Upgrade guava to v11.0.2

Bug: 6457759
Change-Id: Ie9aa2faaf572f1be8e203a447f357510136ae6b9
diff --git a/AUTHORS b/AUTHORS
new file mode 100644
index 0000000..5228f71
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1,4 @@
+Google Inc.
+Colin Decker
+Louis Wasserman
+Maginatics
diff --git a/Android.mk b/Android.mk
index bc081df..95ac73e 100644
--- a/Android.mk
+++ b/Android.mk
@@ -16,8 +16,8 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE := guava
-LOCAL_SDK_VERSION := 8
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
+LOCAL_SDK_VERSION := 9
+LOCAL_SRC_FILES := $(call all-java-files-under, guava/src)
 LOCAL_STATIC_JAVA_LIBRARIES := jsr305
 
 include $(BUILD_STATIC_JAVA_LIBRARY)
@@ -28,7 +28,7 @@
 # Also build a host-side library
 include $(CLEAR_VARS)
 
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
+LOCAL_SRC_FILES := $(call all-java-files-under, guava/src)
 LOCAL_MODULE := guavalib
 LOCAL_STATIC_JAVA_LIBRARIES := jsr305lib
 
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
new file mode 100644
index 0000000..88ecb64
--- /dev/null
+++ b/CONTRIBUTORS
@@ -0,0 +1 @@
+Doug Lea
diff --git a/NOTICE b/NOTICE
deleted file mode 100644
index d645695..0000000
--- a/NOTICE
+++ /dev/null
@@ -1,202 +0,0 @@
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed 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.
diff --git a/README b/README
new file mode 100644
index 0000000..69eee4f
--- /dev/null
+++ b/README
@@ -0,0 +1,46 @@
+Guava: Google Core Libraries for Java
+=====================================
+
+Requires JDK 1.5 or higher.
+
+Project page:
+  http://guava-libraries.googlecode.com
+
+Report a defect or feature request here:
+  http://code.google.com/p/guava-libraries/issues/entry
+
+Ask "how-to" and "why-didn't-it-work" questions at:
+  http://www.stackoverflow.com/questions/ask (use the "guava" tag)
+
+For open-ended questions and discussion:
+  http://groups.google.com/group/guava-discuss
+
+Subscribe to project updates in your feed reader:
+  http://code.google.com/feeds/p/guava-libraries/updates/basic
+
+IMPORTANT WARNINGS
+------------------
+
+1. APIs marked with the @Beta annotation at the class or method level
+are subject to change. They can be modified in any way, or even
+removed, at any time. If your code is a library itself (i.e. it is
+used on the CLASSPATH of users outside your own control), you should
+not use beta APIs, unless you repackage them (e.g. using ProGuard).
+
+2. Deprecated non-beta APIs will be removed eighteen months after the
+release in which they are first deprecated. You must fix your
+references before this time. If you don't, any manner of breakage
+could result (you are not guaranteed a compilation error).
+
+3. Serialized forms of ALL objects are subject to change. Do not
+persist these and assume they can be read by a future version of the
+library.
+
+4. Our classes are not designed to protect against a malicious caller.
+You should not use them for communication between trusted and
+untrusted code.
+
+5. We unit-test and benchmark the libraries using only OpenJDK 1.6 on
+Linux. Some features, especially in com.google.common.io, may not work
+correctly in other environments.
+
diff --git a/README.android b/README.android
index 3a51fda..ed30e5d 100644
--- a/README.android
+++ b/README.android
@@ -1,11 +1,12 @@
 URL: http://code.google.com/p/guava-libraries/source/checkout
-Version: r11
+Version: v11.0.2
 License: Apache 2
 Description: "Guava: Google Core Libraries for Java 1.5"
 
-Local Modifications: Minor hacks to compile on our Mac build machines --
-   see src/com/google/common/collect/Immutable*.java, look for
-   "BEGIN/END android-changed" markers.
+Local Modifications: 
+   Commented out use of the non-public sun.misc.Unsafe
+   from guava/src/com/google/common/primitives/UnsignedBytes.java
+   Look for "BEGIN/END android-changed" markers.
 
 Guava-libraries are a grab bag of utility libraries published by Google as
 open source, including among other things the Google collections libraries.
diff --git a/README.maven b/README.maven
new file mode 100644
index 0000000..516a7ed
--- /dev/null
+++ b/README.maven
@@ -0,0 +1,29 @@
+These folders host the maven metadata which are used to 
+build release binaries for hosting in the central maven 
+repositories.  These are not considered the "canonical" 
+build, but are maintained seperately by (a) volunteer(s) 
+with an interest in easy use of Guava by the Maven build 
+system.
+
+As a convenience, these folders have been set up to 
+provide alternate packaging of the sub-pmodules, which 
+correspond to their respective java packages, with 
+sources symbolically linked back to the main project.  
+This will work to allow command-line builds on MacOS X 
+or other Unix platforms which support symbolic linking, 
+but is not known to work on Windows platforms.  
+(Obviously the deployed binaries in maven repostories 
+will work fine on any compliant JVM).  
+
+The maintainers of these metadata have used M2Eclipse 
+to import these projects directly into Eclipse.  Please 
+remember that this codebase uses @Override annotations 
+on methods which implement an interface method, and 
+therefore require a JDK 1.6 (or newer 1.5 with the 
+appropriate fix) to support this behaviour.  Executing 
+Maven with an appropriate JAVA_HOME env is sufficient, 
+and these metadata do not have toolchain restrictions 
+currently set up.
+
+Christian
+cgruber@google.com
diff --git a/build.xml b/build.xml
deleted file mode 100644
index 3b07307..0000000
--- a/build.xml
+++ /dev/null
@@ -1,59 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="guava" default="compile">
-
-  <!-- can be overridden at the command line with -Dversion=
-       or in IDEA, in the ant properties dialog -->
-  <property name="version" value="snapshot"/>
-
-  <target name="compile" description="Compile Java source.">
-    <mkdir dir="build/classes"/>
-
-    <property environment="env"/>
-    <property name="java5bootclasspath" value="${env.JAVA5_HOME}/jre/lib/rt.jar"/>
-
-    <available file="${java5bootclasspath}" property="isJava5HomeSetRight"/>
-    <fail unless="isJava5HomeSetRight" 
-          message="JAVA5_HOME must be set to a valid JDK 1.5 installation, containing a jre/lib/rt.jar file"/>
-
-    <!-- why does this still allow @Override on interface impl? -->
-    <javac srcdir="src"
-         debug="on"
-         destdir="build/classes"
-         source="1.5"
-         target="1.5"
-         bootclasspath="${java5bootclasspath}"
-         extdirs="">
-      <classpath>
-        <pathelement location="lib/jsr305.jar"/>
-      </classpath>
-    </javac>
-  </target>
-
-  <target name="clean"
-      description="Remove generated files.">
-    <delete dir="build"/>
-  </target>
-
-  <target name="javadoc"
-      description="Generate Javadocs.">
-    <delete dir="build/javadoc"/>
-    <mkdir dir="build/javadoc"/>
-    <javadoc packagenames="com.google.common.annotations,com.google.common.base,com.google.common.collect,com.google.common.io,com.google.common.primitives,com.google.common.util.concurrent"
-         destdir="build/javadoc"
-         use="true"
-         author="true"
-         protected="true"
-         windowtitle="Guava Libraries ${version}">
-      <sourcepath>
-        <pathelement location="src"/>
-      </sourcepath>
-      <!-- workaround for http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6442982 -->
-      <classpath>
-        <pathelement location="lib/jsr305.jar"/>
-      </classpath>
-      <link href="http://jsr-305.googlecode.com/svn/trunk/javadoc"/>
-      <link href="http://java.sun.com/javase/6/docs/api"/>
-    </javadoc>
-  </target>
-</project>
diff --git a/guava-bootstrap/pom.xml b/guava-bootstrap/pom.xml
new file mode 100644
index 0000000..0840092
--- /dev/null
+++ b/guava-bootstrap/pom.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>com.google.guava</groupId>
+    <artifactId>guava-parent</artifactId>
+    <version>11.0.2</version>
+  </parent>
+  <artifactId>guava-bootstrap</artifactId>
+  <name>Guava Compilation Bootstrap Classes</name>
+  <description>
+    ExecutorService's type parameters changed between JDK5 and JDK6 in a
+    way that makes it impossible for our invokeAll/invokeAny methods to
+    match both at compile time. This project builds a JDK6-like copy of
+    ExecutorService (but with JDK5 compiler settings to ensure that it will
+    work with JRE5 at runtime).  This project's is then used in the bootstrap
+    class path of Guava proper.
+  </description>
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <version>2.3.2</version>
+        <configuration>
+          <source>1.5</source>
+          <target>1.5</target>
+        </configuration>
+      </plugin>
+    </plugins>
+    <sourceDirectory>src</sourceDirectory>
+  </build>
+</project>
diff --git a/guava-bootstrap/src/java/util/concurrent/ExecutorService.java b/guava-bootstrap/src/java/util/concurrent/ExecutorService.java
new file mode 100644
index 0000000..f0c67fb
--- /dev/null
+++ b/guava-bootstrap/src/java/util/concurrent/ExecutorService.java
@@ -0,0 +1,47 @@
+/*
+ * This file is a modified version of 
+ * http://gee.cs.oswego.edu/cgi-bin/viewcvs.cgi/jsr166/src/main/java/util/concurrent/ExecutorService.java?revision=1.51
+ * which contained the following notice:
+ *
+ * Written by Doug Lea with assistance from members of JCP JSR-166
+ * Expert Group and released to the public domain, as explained at
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+package java.util.concurrent;
+
+import java.util.Collection;
+import java.util.List;
+
+public interface ExecutorService extends Executor {
+  void shutdown();
+
+  List<Runnable> shutdownNow();
+
+  boolean isShutdown();
+
+  boolean isTerminated();
+
+  boolean awaitTermination(long timeout, TimeUnit unit)
+      throws InterruptedException;
+
+  <T> Future<T> submit(Callable<T> task);
+
+  <T> Future<T> submit(Runnable task, T result);
+
+  Future<?> submit(Runnable task);
+
+  <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks)
+      throws InterruptedException;
+
+  <T> List<Future<T>> invokeAll(
+      Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit)
+      throws InterruptedException;
+
+  <T> T invokeAny(Collection<? extends Callable<T>> tasks)
+      throws InterruptedException, ExecutionException;
+
+  <T> T invokeAny(
+      Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit)
+      throws InterruptedException, ExecutionException, TimeoutException;
+}
diff --git a/guava-gwt/pom.xml b/guava-gwt/pom.xml
new file mode 100644
index 0000000..f087b3d
--- /dev/null
+++ b/guava-gwt/pom.xml
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>com.google.guava</groupId>
+    <artifactId>guava-parent</artifactId>
+    <version>11.0.2</version>
+  </parent>
+  <artifactId>guava-gwt</artifactId>
+  <name>Guava GWT compatible libs</name>
+  <description>
+    Guava is a suite of core and expanded libraries that include
+    utility classes, google's collections, io classes, and much
+    much more.
+
+    This project includes GWT-friendly sources.
+  </description>
+  <dependencies>
+    <dependency>
+      <groupId>com.google.guava</groupId>
+      <artifactId>guava</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>com.google.guava</groupId>
+      <artifactId>guava</artifactId>
+      <version>${project.version}</version>
+      <classifier>sources</classifier>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>4.5</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>com.google.gwt</groupId>
+      <artifactId>gwt-dev</artifactId>
+      <version>2.2.0</version>
+      <type>jar</type>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>com.google.gwt</groupId>
+      <artifactId>gwt-user</artifactId>
+      <version>2.2.0</version>
+      <type>jar</type>
+      <scope>provided</scope>
+    </dependency>
+  </dependencies>
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <version>2.3.2</version>
+        <configuration>
+          <source>1.5</source>
+          <target>1.5</target>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-dependency-plugin</artifactId>
+        <version>2.3</version>
+        <executions>
+          <execution>
+            <id>unpack-guava-sources</id>
+            <phase>generate-resources</phase>
+            <goals><goal>unpack-dependencies</goal></goals>
+            <configuration>
+              <includeArtifactIds>guava</includeArtifactIds>
+              <classifier>sources</classifier>
+              <overWrite>true</overWrite>
+              <excludeTransitive>true</excludeTransitive>
+              <includeScope>provided</includeScope>
+              <excludes>META-INF/MANIFEST.MF</excludes>
+              <outputDirectory>${project.build.directory}/guava-sources</outputDirectory>
+              <type>java-source</type>
+              <silent>false</silent>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-antrun-plugin</artifactId>
+        <version>1.6</version>
+        <executions>
+          <execution>
+            <phase>generate-resources</phase>
+            <goals><goal>run</goal></goals>
+            <configuration>
+              <target name="copy-gwt-resources">
+                <echo message="Test"/>
+                <copy toDir="${project.build.directory}/guava-gwt-sources"
+                      verbose="true">
+                  <fileset dir="${project.build.directory}/guava-sources">
+                    <and>
+                      <contains text="@GwtCompatible"/>
+                      <not><contains text="emulated = true"/></not>
+                    </and>
+                  </fileset>
+                </copy>
+              </target>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+    <sourceDirectory>src</sourceDirectory>
+    <testSourceDirectory>disabled</testSourceDirectory>
+    <resources>
+      <resource>
+        <directory>src</directory>
+      </resource>
+      <resource>
+        <directory>src-super</directory>
+      </resource>
+      <resource>
+        <directory>${project.build.directory}/guava-gwt-sources</directory>
+      </resource>
+    </resources>
+  </build>
+</project>
diff --git a/guava-gwt/src-super/com/google/common/base/super/com/google/common/base/Platform.java b/guava-gwt/src-super/com/google/common/base/super/com/google/common/base/Platform.java
new file mode 100644
index 0000000..8c1e7ca
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/base/super/com/google/common/base/Platform.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base;
+
+import java.util.concurrent.TimeUnit;
+
+/**
+ * @author Jesse Wilson
+ */
+class Platform {
+
+  private static final char[] CHAR_BUFFER = new char[1024];
+
+  static char[] charBufferFromThreadLocal() {
+    // ThreadLocal is not available to GWT, so we always reuse the same
+    // instance.  It is always safe to return the same instance because
+    // javascript is single-threaded, and only used by blocks that doesn't
+    // involve async callbacks.
+    return CHAR_BUFFER;
+  }
+
+  static CharMatcher precomputeCharMatcher(CharMatcher matcher) {
+    // CharMatcher.precomputed() produces CharMatchers that are maybe a little
+    // faster (and that's debatable), but definitely more memory-hungry. We're
+    // choosing to turn .precomputed() into a no-op in GWT, because it doesn't
+    // seem to be a worthwhile tradeoff in a browser.
+    return matcher;
+  }
+
+  static long systemNanoTime() {
+    // System.nanoTime() is not available in GWT, so we get milliseconds
+    // and convert to nanos.
+    return TimeUnit.MILLISECONDS.toNanos(System.currentTimeMillis());
+  }
+}
diff --git a/guava-gwt/src-super/com/google/common/base/super/com/google/common/base/Predicates.java b/guava-gwt/src-super/com/google/common/base/super/com/google/common/base/Predicates.java
new file mode 100644
index 0000000..366ca0d
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/base/super/com/google/common/base/Predicates.java
@@ -0,0 +1,449 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+
+import javax.annotation.Nullable;
+
+/**
+ * Static utility methods pertaining to {@code Predicate} instances.
+ *
+ * <p>All methods returns serializable predicates as long as they're given
+ * serializable parameters.
+ *
+ * @author Kevin Bourrillion
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible(emulated = true)
+public final class Predicates {
+  private Predicates() {}
+
+  // TODO(kevinb): considering having these implement a VisitablePredicate
+  // interface which specifies an accept(PredicateVisitor) method.
+
+  /**
+   * Returns a predicate that always evaluates to {@code true}.
+   */
+  @GwtCompatible(serializable = true)
+  public static <T> Predicate<T> alwaysTrue() {
+    return ObjectPredicate.ALWAYS_TRUE.withNarrowedType();
+  }
+
+  /**
+   * Returns a predicate that always evaluates to {@code false}.
+   */
+  @GwtCompatible(serializable = true)
+  public static <T> Predicate<T> alwaysFalse() {
+    return ObjectPredicate.ALWAYS_FALSE.withNarrowedType();
+  }
+
+  /**
+   * Returns a predicate that evaluates to {@code true} if the object reference
+   * being tested is null.
+   */
+  @GwtCompatible(serializable = true)
+  public static <T> Predicate<T> isNull() {
+    return ObjectPredicate.IS_NULL.withNarrowedType();
+  }
+
+  /**
+   * Returns a predicate that evaluates to {@code true} if the object reference
+   * being tested is not null.
+   */
+  @GwtCompatible(serializable = true)
+  public static <T> Predicate<T> notNull() {
+    return ObjectPredicate.NOT_NULL.withNarrowedType();
+  }
+
+  /**
+   * Returns a predicate that evaluates to {@code true} if the given predicate
+   * evaluates to {@code false}.
+   */
+  public static <T> Predicate<T> not(Predicate<T> predicate) {
+    return new NotPredicate<T>(predicate);
+  }
+
+  /**
+   * Returns a predicate that evaluates to {@code true} if each of its
+   * components evaluates to {@code true}. The components are evaluated in
+   * order, and evaluation will be "short-circuited" as soon as a false
+   * predicate is found. It defensively copies the iterable passed in, so future
+   * changes to it won't alter the behavior of this predicate. If {@code
+   * components} is empty, the returned predicate will always evaluate to {@code
+   * true}.
+   */
+  public static <T> Predicate<T> and(
+      Iterable<? extends Predicate<? super T>> components) {
+    return new AndPredicate<T>(defensiveCopy(components));
+  }
+
+  /**
+   * Returns a predicate that evaluates to {@code true} if each of its
+   * components evaluates to {@code true}. The components are evaluated in
+   * order, and evaluation will be "short-circuited" as soon as a false
+   * predicate is found. It defensively copies the array passed in, so future
+   * changes to it won't alter the behavior of this predicate. If {@code
+   * components} is empty, the returned predicate will always evaluate to {@code
+   * true}.
+   */
+  public static <T> Predicate<T> and(Predicate<? super T>... components) {
+    return new AndPredicate<T>(defensiveCopy(components));
+  }
+
+  /**
+   * Returns a predicate that evaluates to {@code true} if both of its
+   * components evaluate to {@code true}. The components are evaluated in
+   * order, and evaluation will be "short-circuited" as soon as a false
+   * predicate is found.
+   */
+  public static <T> Predicate<T> and(Predicate<? super T> first,
+      Predicate<? super T> second) {
+    return new AndPredicate<T>(Predicates.<T>asList(
+        checkNotNull(first), checkNotNull(second)));
+  }
+
+  /**
+   * Returns a predicate that evaluates to {@code true} if any one of its
+   * components evaluates to {@code true}. The components are evaluated in
+   * order, and evaluation will be "short-circuited" as soon as a
+   * true predicate is found. It defensively copies the iterable passed in, so
+   * future changes to it won't alter the behavior of this predicate. If {@code
+   * components} is empty, the returned predicate will always evaluate to {@code
+   * false}.
+   */
+  public static <T> Predicate<T> or(
+      Iterable<? extends Predicate<? super T>> components) {
+    return new OrPredicate<T>(defensiveCopy(components));
+  }
+
+  /**
+   * Returns a predicate that evaluates to {@code true} if any one of its
+   * components evaluates to {@code true}. The components are evaluated in
+   * order, and evaluation will be "short-circuited" as soon as a
+   * true predicate is found. It defensively copies the array passed in, so
+   * future changes to it won't alter the behavior of this predicate. If {@code
+   * components} is empty, the returned predicate will always evaluate to {@code
+   * false}.
+   */
+  public static <T> Predicate<T> or(Predicate<? super T>... components) {
+    return new OrPredicate<T>(defensiveCopy(components));
+  }
+
+  /**
+   * Returns a predicate that evaluates to {@code true} if either of its
+   * components evaluates to {@code true}. The components are evaluated in
+   * order, and evaluation will be "short-circuited" as soon as a
+   * true predicate is found.
+   */
+  public static <T> Predicate<T> or(
+      Predicate<? super T> first, Predicate<? super T> second) {
+    return new OrPredicate<T>(Predicates.<T>asList(
+        checkNotNull(first), checkNotNull(second)));
+  }
+
+  /**
+   * Returns a predicate that evaluates to {@code true} if the object being
+   * tested {@code equals()} the given target or both are null.
+   */
+  public static <T> Predicate<T> equalTo(@Nullable T target) {
+    return (target == null)
+        ? Predicates.<T>isNull()
+        : new IsEqualToPredicate<T>(target);
+  }
+
+  /**
+   * Returns a predicate that evaluates to {@code true} if the object reference
+   * being tested is a member of the given collection. It does not defensively
+   * copy the collection passed in, so future changes to it will alter the
+   * behavior of the predicate.
+   *
+   * <p>This method can technically accept any {@code Collection<?>}, but using
+   * a typed collection helps prevent bugs. This approach doesn't block any
+   * potential users since it is always possible to use {@code
+   * Predicates.<Object>in()}.
+   *
+   * @param target the collection that may contain the function input
+   */
+  public static <T> Predicate<T> in(Collection<? extends T> target) {
+    return new InPredicate<T>(target);
+  }
+
+  /**
+   * Returns the composition of a function and a predicate. For every {@code x},
+   * the generated predicate returns {@code predicate(function(x))}.
+   *
+   * @return the composition of the provided function and predicate
+   */
+  public static <A, B> Predicate<A> compose(
+      Predicate<B> predicate, Function<A, ? extends B> function) {
+    return new CompositionPredicate<A, B>(predicate, function);
+  }
+
+  // End public API, begin private implementation classes.
+
+  // Package private for GWT serialization.
+  enum ObjectPredicate implements Predicate<Object> {
+    ALWAYS_TRUE {
+      @Override public boolean apply(@Nullable Object o) {
+        return true;
+      }
+    },
+    ALWAYS_FALSE {
+      @Override public boolean apply(@Nullable Object o) {
+        return false;
+      }
+    },
+    IS_NULL {
+      @Override public boolean apply(@Nullable Object o) {
+        return o == null;
+      }
+    },
+    NOT_NULL {
+      @Override public boolean apply(@Nullable Object o) {
+        return o != null;
+      }
+    };
+    
+    @SuppressWarnings("unchecked") // these Object predicates work for any T
+    <T> Predicate<T> withNarrowedType() {
+      return (Predicate<T>) this;
+    }
+  }
+
+  /** @see Predicates#not(Predicate) */
+  private static class NotPredicate<T> implements Predicate<T>, Serializable {
+    final Predicate<T> predicate;
+
+    NotPredicate(Predicate<T> predicate) {
+      this.predicate = checkNotNull(predicate);
+    }
+    @Override
+    public boolean apply(T t) {
+      return !predicate.apply(t);
+    }
+    @Override public int hashCode() {
+      return ~predicate.hashCode();
+    }
+    @Override public boolean equals(@Nullable Object obj) {
+      if (obj instanceof NotPredicate) {
+        NotPredicate<?> that = (NotPredicate<?>) obj;
+        return predicate.equals(that.predicate);
+      }
+      return false;
+    }
+    @Override public String toString() {
+      return "Not(" + predicate.toString() + ")";
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  private static final Joiner COMMA_JOINER = Joiner.on(",");
+
+  /** @see Predicates#and(Iterable) */
+  private static class AndPredicate<T> implements Predicate<T>, Serializable {
+    private final List<? extends Predicate<? super T>> components;
+
+    private AndPredicate(List<? extends Predicate<? super T>> components) {
+      this.components = components;
+    }
+    @Override
+    public boolean apply(T t) {
+      for (int i = 0; i < components.size(); i++) {
+        if (!components.get(i).apply(t)) {
+          return false;
+        }
+      }
+      return true;
+    }
+    @Override public int hashCode() {
+      // 0x12472c2c is a random number to help avoid collisions with OrPredicate
+      return components.hashCode() + 0x12472c2c;
+    }
+    @Override public boolean equals(@Nullable Object obj) {
+      if (obj instanceof AndPredicate) {
+        AndPredicate<?> that = (AndPredicate<?>) obj;
+        return components.equals(that.components);
+      }
+      return false;
+    }
+    @Override public String toString() {
+      return "And(" + COMMA_JOINER.join(components) + ")";
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  /** @see Predicates#or(Iterable) */
+  private static class OrPredicate<T> implements Predicate<T>, Serializable {
+    private final List<? extends Predicate<? super T>> components;
+
+    private OrPredicate(List<? extends Predicate<? super T>> components) {
+      this.components = components;
+    }
+    @Override
+    public boolean apply(T t) {
+      for (int i = 0; i < components.size(); i++) {
+        if (components.get(i).apply(t)) {
+          return true;
+        }
+      }
+      return false;
+    }
+    @Override public int hashCode() {
+      // 0x053c91cf is a random number to help avoid collisions with AndPredicate
+      return components.hashCode() + 0x053c91cf;
+    }
+    @Override public boolean equals(@Nullable Object obj) {
+      if (obj instanceof OrPredicate) {
+        OrPredicate<?> that = (OrPredicate<?>) obj;
+        return components.equals(that.components);
+      }
+      return false;
+    }
+    @Override public String toString() {
+      return "Or(" + COMMA_JOINER.join(components) + ")";
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  /** @see Predicates#equalTo(Object) */
+  private static class IsEqualToPredicate<T>
+      implements Predicate<T>, Serializable {
+    private final T target;
+
+    private IsEqualToPredicate(T target) {
+      this.target = target;
+    }
+    @Override
+    public boolean apply(T t) {
+      return target.equals(t);
+    }
+    @Override public int hashCode() {
+      return target.hashCode();
+    }
+    @Override public boolean equals(@Nullable Object obj) {
+      if (obj instanceof IsEqualToPredicate) {
+        IsEqualToPredicate<?> that = (IsEqualToPredicate<?>) obj;
+        return target.equals(that.target);
+      }
+      return false;
+    }
+    @Override public String toString() {
+      return "IsEqualTo(" + target + ")";
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  /** @see Predicates#in(Collection) */
+  private static class InPredicate<T> implements Predicate<T>, Serializable {
+    private final Collection<?> target;
+
+    private InPredicate(Collection<?> target) {
+      this.target = checkNotNull(target);
+    }
+
+    @Override
+    public boolean apply(T t) {
+      try {
+        return target.contains(t);
+      } catch (NullPointerException e) {
+        return false;
+      } catch (ClassCastException e) {
+        return false;
+      }
+    }
+
+    @Override public boolean equals(@Nullable Object obj) {
+      if (obj instanceof InPredicate) {
+        InPredicate<?> that = (InPredicate<?>) obj;
+        return target.equals(that.target);
+      }
+      return false;
+    }
+
+    @Override public int hashCode() {
+      return target.hashCode();
+    }
+
+    @Override public String toString() {
+      return "In(" + target + ")";
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  /** @see Predicates#compose(Predicate, Function) */
+  private static class CompositionPredicate<A, B>
+      implements Predicate<A>, Serializable {
+    final Predicate<B> p;
+    final Function<A, ? extends B> f;
+
+    private CompositionPredicate(Predicate<B> p, Function<A, ? extends B> f) {
+      this.p = checkNotNull(p);
+      this.f = checkNotNull(f);
+    }
+
+    @Override
+    public boolean apply(A a) {
+      return p.apply(f.apply(a));
+    }
+
+    @Override public boolean equals(@Nullable Object obj) {
+      if (obj instanceof CompositionPredicate) {
+        CompositionPredicate<?, ?> that = (CompositionPredicate<?, ?>) obj;
+        return f.equals(that.f) && p.equals(that.p);
+      }
+      return false;
+    }
+
+    @Override public int hashCode() {
+      return f.hashCode() ^ p.hashCode();
+    }
+
+    @Override public String toString() {
+      return p.toString() + "(" + f.toString() + ")";
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  @SuppressWarnings("unchecked")
+  private static <T> List<Predicate<? super T>> asList(
+      Predicate<? super T> first, Predicate<? super T> second) {
+    return Arrays.<Predicate<? super T>>asList(first, second);
+  }
+
+  private static <T> List<T> defensiveCopy(T... array) {
+    return defensiveCopy(Arrays.asList(array));
+  }
+
+  static <T> List<T> defensiveCopy(Iterable<T> iterable) {
+    ArrayList<T> list = new ArrayList<T>();
+    for (T element : iterable) {
+      list.add(checkNotNull(element));
+    }
+    return list;
+  }
+}
+
diff --git a/guava-gwt/src-super/com/google/common/base/super/com/google/common/base/Splitter.java b/guava-gwt/src-super/com/google/common/base/super/com/google/common/base/Splitter.java
new file mode 100644
index 0000000..142fbec
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/base/super/com/google/common/base/Splitter.java
@@ -0,0 +1,481 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import javax.annotation.CheckReturnValue;
+
+/**
+ * An object that divides strings (or other instances of {@code CharSequence})
+ * into substrings, by recognizing a <i>separator</i> (a.k.a. "delimiter")
+ * which can be expressed as a single character, literal string, regular
+ * expression, {@code CharMatcher}, or by using a fixed substring length. This
+ * class provides the complementary functionality to {@link Joiner}.
+ *
+ * <p>Here is the most basic example of {@code Splitter} usage: <pre>   {@code
+ *
+ *   Splitter.on(',').split("foo,bar")}</pre>
+ *
+ * This invocation returns an {@code Iterable<String>} containing {@code "foo"}
+ * and {@code "bar"}, in that order.
+ *
+ * <p>By default {@code Splitter}'s behavior is very simplistic: <pre>   {@code
+ *
+ *   Splitter.on(',').split("foo,,bar, quux")}</pre>
+ *
+ * This returns an iterable containing {@code ["foo", "", "bar", " quux"]}.
+ * Notice that the splitter does not assume that you want empty strings removed,
+ * or that you wish to trim whitespace. If you want features like these, simply
+ * ask for them: <pre> {@code
+ *
+ *   private static final Splitter MY_SPLITTER = Splitter.on(',')
+ *       .trimResults()
+ *       .omitEmptyStrings();}</pre>
+ *
+ * Now {@code MY_SPLITTER.split("foo, ,bar, quux,")} returns an iterable
+ * containing just {@code ["foo", "bar", "quux"]}. Note that the order in which
+ * the configuration methods are called is never significant; for instance,
+ * trimming is always applied first before checking for an empty result,
+ * regardless of the order in which the {@link #trimResults()} and
+ * {@link #omitEmptyStrings()} methods were invoked.
+ *
+ * <p><b>Warning: splitter instances are always immutable</b>; a configuration
+ * method such as {@code omitEmptyStrings} has no effect on the instance it
+ * is invoked on! You must store and use the new splitter instance returned by
+ * the method. This makes splitters thread-safe, and safe to store as {@code
+ * static final} constants (as illustrated above). <pre>   {@code
+ *
+ *   // Bad! Do not do this!
+ *   Splitter splitter = Splitter.on('/');
+ *   splitter.trimResults(); // does nothing!
+ *   return splitter.split("wrong / wrong / wrong");}</pre>
+ *
+ * The separator recognized by the splitter does not have to be a single
+ * literal character as in the examples above. See the methods {@link
+ * #on(String)}, {@link #on(Pattern)} and {@link #on(CharMatcher)} for examples
+ * of other ways to specify separators.
+ *
+ * <p><b>Note:</b> this class does not mimic any of the quirky behaviors of
+ * similar JDK methods; for instance, it does not silently discard trailing
+ * separators, as does {@link String#split(String)}, nor does it have a default
+ * behavior of using five particular whitespace characters as separators, like
+ * {@link java.util.StringTokenizer}.
+ *
+ * @author Julien Silland
+ * @author Jesse Wilson
+ * @author Kevin Bourrillion
+ * @author Louis Wasserman
+ * @since 1.0
+ */
+@GwtCompatible(emulated = true)
+public final class Splitter {
+  private final CharMatcher trimmer;
+  private final boolean omitEmptyStrings;
+  private final Strategy strategy;
+  private final int limit;
+
+  private Splitter(Strategy strategy) {
+    this(strategy, false, CharMatcher.NONE, Integer.MAX_VALUE);
+  }
+
+  private Splitter(Strategy strategy, boolean omitEmptyStrings,
+      CharMatcher trimmer, int limit) {
+    this.strategy = strategy;
+    this.omitEmptyStrings = omitEmptyStrings;
+    this.trimmer = trimmer;
+    this.limit = limit;
+  }
+
+  /**
+   * Returns a splitter that uses the given single-character separator. For
+   * example, {@code Splitter.on(',').split("foo,,bar")} returns an iterable
+   * containing {@code ["foo", "", "bar"]}.
+   *
+   * @param separator the character to recognize as a separator
+   * @return a splitter, with default settings, that recognizes that separator
+   */
+  public static Splitter on(char separator) {
+    return on(CharMatcher.is(separator));
+  }
+
+  /**
+   * Returns a splitter that considers any single character matched by the
+   * given {@code CharMatcher} to be a separator. For example, {@code
+   * Splitter.on(CharMatcher.anyOf(";,")).split("foo,;bar,quux")} returns an
+   * iterable containing {@code ["foo", "", "bar", "quux"]}.
+   *
+   * @param separatorMatcher a {@link CharMatcher} that determines whether a
+   *     character is a separator
+   * @return a splitter, with default settings, that uses this matcher
+   */
+  public static Splitter on(final CharMatcher separatorMatcher) {
+    checkNotNull(separatorMatcher);
+
+    return new Splitter(new Strategy() {
+      @Override public SplittingIterator iterator(
+          Splitter splitter, final CharSequence toSplit) {
+        return new SplittingIterator(splitter, toSplit) {
+          @Override int separatorStart(int start) {
+            return separatorMatcher.indexIn(toSplit, start);
+          }
+
+          @Override int separatorEnd(int separatorPosition) {
+            return separatorPosition + 1;
+          }
+        };
+      }
+    });
+  }
+
+  /**
+   * Returns a splitter that uses the given fixed string as a separator. For
+   * example, {@code Splitter.on(", ").split("foo, bar, baz,qux")} returns an
+   * iterable containing {@code ["foo", "bar", "baz,qux"]}.
+   *
+   * @param separator the literal, nonempty string to recognize as a separator
+   * @return a splitter, with default settings, that recognizes that separator
+   */
+  public static Splitter on(final String separator) {
+    checkArgument(separator.length() != 0,
+        "The separator may not be the empty string.");
+
+    return new Splitter(new Strategy() {
+      @Override public SplittingIterator iterator(
+          Splitter splitter, CharSequence toSplit) {
+        return new SplittingIterator(splitter, toSplit) {
+          @Override public int separatorStart(int start) {
+            int delimeterLength = separator.length();
+
+            positions:
+            for (int p = start, last = toSplit.length() - delimeterLength;
+                p <= last; p++) {
+              for (int i = 0; i < delimeterLength; i++) {
+                if (toSplit.charAt(i + p) != separator.charAt(i)) {
+                  continue positions;
+                }
+              }
+              return p;
+            }
+            return -1;
+          }
+
+          @Override public int separatorEnd(int separatorPosition) {
+            return separatorPosition + separator.length();
+          }
+        };
+      }
+    });
+  }
+
+  /**
+   * Returns a splitter that divides strings into pieces of the given length.
+   * For example, {@code Splitter.fixedLength(2).split("abcde")} returns an
+   * iterable containing {@code ["ab", "cd", "e"]}. The last piece can be
+   * smaller than {@code length} but will never be empty.
+   *
+   * @param length the desired length of pieces after splitting
+   * @return a splitter, with default settings, that can split into fixed sized
+   *     pieces
+   */
+  public static Splitter fixedLength(final int length) {
+    checkArgument(length > 0, "The length may not be less than 1");
+
+    return new Splitter(new Strategy() {
+      @Override public SplittingIterator iterator(
+          final Splitter splitter, CharSequence toSplit) {
+        return new SplittingIterator(splitter, toSplit) {
+          @Override public int separatorStart(int start) {
+            int nextChunkStart = start + length;
+            return (nextChunkStart < toSplit.length() ? nextChunkStart : -1);
+          }
+
+          @Override public int separatorEnd(int separatorPosition) {
+            return separatorPosition;
+          }
+        };
+      }
+    });
+  }
+
+  /**
+   * Returns a splitter that behaves equivalently to {@code this} splitter, but
+   * automatically omits empty strings from the results. For example, {@code
+   * Splitter.on(',').omitEmptyStrings().split(",a,,,b,c,,")} returns an
+   * iterable containing only {@code ["a", "b", "c"]}.
+   *
+   * <p>If either {@code trimResults} option is also specified when creating a
+   * splitter, that splitter always trims results first before checking for
+   * emptiness. So, for example, {@code
+   * Splitter.on(':').omitEmptyStrings().trimResults().split(": : : ")} returns
+   * an empty iterable.
+   *
+   * <p>Note that it is ordinarily not possible for {@link #split(CharSequence)}
+   * to return an empty iterable, but when using this option, it can (if the
+   * input sequence consists of nothing but separators).
+   *
+   * @return a splitter with the desired configuration
+   */
+  @CheckReturnValue
+  public Splitter omitEmptyStrings() {
+    return new Splitter(strategy, true, trimmer, limit);
+  }
+
+  /**
+   * Returns a splitter that behaves equivalently to {@code this} splitter but
+   * stops splitting after it reaches the limit.
+   * The limit defines the maximum number of items returned by the iterator.
+   *
+   * <p>For example,
+   * {@code Splitter.on(',').limit(3).split("a,b,c,d")} returns an iterable
+   * containing {@code ["a", "b", "c,d"]}.  When omitting empty strings, the
+   * omitted strings do no count.  Hence,
+   * {@code Splitter.on(',').limit(3).omitEmptyStrings().split("a,,,b,,,c,d")}
+   * returns an iterable containing {@code ["a", "b", "c,d"}.
+   * When trim is requested, all entries, including the last are trimmed.  Hence
+   * {@code Splitter.on(',').limit(3).trimResults().split(" a , b , c , d ")}
+   * results in @{code ["a", "b", "c , d"]}.
+   *
+   * @param limit the maximum number of items returns
+   * @return a splitter with the desired configuration
+   * @since 9.0
+   */
+  @CheckReturnValue
+  public Splitter limit(int limit) {
+    checkArgument(limit > 0, "must be greater than zero: %s", limit);
+    return new Splitter(strategy, omitEmptyStrings, trimmer, limit);
+  }
+
+  /**
+   * Returns a splitter that behaves equivalently to {@code this} splitter, but
+   * automatically removes leading and trailing {@linkplain
+   * CharMatcher#WHITESPACE whitespace} from each returned substring; equivalent
+   * to {@code trimResults(CharMatcher.WHITESPACE)}. For example, {@code
+   * Splitter.on(',').trimResults().split(" a, b ,c ")} returns an iterable
+   * containing {@code ["a", "b", "c"]}.
+   *
+   * @return a splitter with the desired configuration
+   */
+  @CheckReturnValue
+  public Splitter trimResults() {
+    return trimResults(CharMatcher.WHITESPACE);
+  }
+
+  /**
+   * Returns a splitter that behaves equivalently to {@code this} splitter, but
+   * removes all leading or trailing characters matching the given {@code
+   * CharMatcher} from each returned substring. For example, {@code
+   * Splitter.on(',').trimResults(CharMatcher.is('_')).split("_a ,_b_ ,c__")}
+   * returns an iterable containing {@code ["a ", "b_ ", "c"]}.
+   *
+   * @param trimmer a {@link CharMatcher} that determines whether a character
+   *     should be removed from the beginning/end of a subsequence
+   * @return a splitter with the desired configuration
+   */
+  // TODO(kevinb): throw if a trimmer was already specified!
+  @CheckReturnValue
+  public Splitter trimResults(CharMatcher trimmer) {
+    checkNotNull(trimmer);
+    return new Splitter(strategy, omitEmptyStrings, trimmer, limit);
+  }
+
+  /**
+   * Splits {@code sequence} into string components and makes them available
+   * through an {@link Iterator}, which may be lazily evaluated.
+   *
+   * @param sequence the sequence of characters to split
+   * @return an iteration over the segments split from the parameter.
+   */
+  public Iterable<String> split(final CharSequence sequence) {
+    checkNotNull(sequence);
+
+    return new Iterable<String>() {
+      @Override public Iterator<String> iterator() {
+        return spliterator(sequence);
+      }
+    };
+  }
+
+  private Iterator<String> spliterator(CharSequence sequence) {
+    return strategy.iterator(this, sequence);
+  }
+
+  /**
+   * Returns a {@code MapSplitter} which splits entries based on this splitter,
+   * and splits entries into keys and values using the specified separator.
+   *
+   * @since 10.0
+   */
+  @CheckReturnValue
+  @Beta
+  public MapSplitter withKeyValueSeparator(String separator) {
+    return withKeyValueSeparator(on(separator));
+  }
+
+  /**
+   * Returns a {@code MapSplitter} which splits entries based on this splitter,
+   * and splits entries into keys and values using the specified key-value
+   * splitter.
+   *
+   * @since 10.0
+   */
+  @CheckReturnValue
+  @Beta
+  public MapSplitter withKeyValueSeparator(Splitter keyValueSplitter) {
+    return new MapSplitter(this, keyValueSplitter);
+  }
+
+  /**
+   * An object that splits strings into maps as {@code Splitter} splits
+   * iterables and lists. Like {@code Splitter}, it is thread-safe and
+   * immutable.
+   *
+   * @since 10.0
+   */
+  @Beta
+  public static final class MapSplitter {
+    private static final String INVALID_ENTRY_MESSAGE =
+        "Chunk [%s] is not a valid entry";
+    private final Splitter outerSplitter;
+    private final Splitter entrySplitter;
+
+    private MapSplitter(Splitter outerSplitter, Splitter entrySplitter) {
+      this.outerSplitter = outerSplitter; // only "this" is passed
+      this.entrySplitter = checkNotNull(entrySplitter);
+    }
+
+    /**
+     * Splits {@code sequence} into substrings, splits each substring into
+     * an entry, and returns an unmodifiable map with each of the entries. For
+     * example, <code>
+     * Splitter.on(';').trimResults().withKeyValueSeparator("=>")
+     * .split("a=>b ; c=>b")
+     * </code> will return a mapping from {@code "a"} to {@code "b"} and
+     * {@code "c"} to {@code b}.
+     *
+     * <p>The returned map preserves the order of the entries from
+     * {@code sequence}.
+     *
+     * @throws IllegalArgumentException if the specified sequence does not split
+     *         into valid map entries, or if there are duplicate keys
+     */
+    public Map<String, String> split(CharSequence sequence) {
+      Map<String, String> map = new LinkedHashMap<String, String>();
+      for (String entry : outerSplitter.split(sequence)) {
+        Iterator<String> entryFields = entrySplitter.spliterator(entry);
+
+        checkArgument(entryFields.hasNext(), INVALID_ENTRY_MESSAGE, entry);
+        String key = entryFields.next();
+        checkArgument(!map.containsKey(key), "Duplicate key [%s] found.", key);
+
+        checkArgument(entryFields.hasNext(), INVALID_ENTRY_MESSAGE, entry);
+        String value = entryFields.next();
+        map.put(key, value);
+
+        checkArgument(!entryFields.hasNext(), INVALID_ENTRY_MESSAGE, entry);
+      }
+      return Collections.unmodifiableMap(map);
+    }
+  }
+
+  private interface Strategy {
+    Iterator<String> iterator(Splitter splitter, CharSequence toSplit);
+  }
+
+  private abstract static class SplittingIterator
+      extends AbstractIterator<String> {
+    final CharSequence toSplit;
+    final CharMatcher trimmer;
+    final boolean omitEmptyStrings;
+
+    /**
+     * Returns the first index in {@code toSplit} at or after {@code start}
+     * that contains the separator.
+     */
+    abstract int separatorStart(int start);
+
+    /**
+     * Returns the first index in {@code toSplit} after {@code
+     * separatorPosition} that does not contain a separator. This method is only
+     * invoked after a call to {@code separatorStart}.
+     */
+    abstract int separatorEnd(int separatorPosition);
+
+    int offset = 0;
+    int limit;
+
+    protected SplittingIterator(Splitter splitter, CharSequence toSplit) {
+      this.trimmer = splitter.trimmer;
+      this.omitEmptyStrings = splitter.omitEmptyStrings;
+      this.limit = splitter.limit;
+      this.toSplit = toSplit;
+    }
+
+    @Override protected String computeNext() {
+      while (offset != -1) {
+        int start = offset;
+        int end;
+
+        int separatorPosition = separatorStart(offset);
+        if (separatorPosition == -1) {
+          end = toSplit.length();
+          offset = -1;
+        } else {
+          end = separatorPosition;
+          offset = separatorEnd(separatorPosition);
+        }
+
+        while (start < end && trimmer.matches(toSplit.charAt(start))) {
+          start++;
+        }
+        while (end > start && trimmer.matches(toSplit.charAt(end - 1))) {
+          end--;
+        }
+
+        if (omitEmptyStrings && start == end) {
+          continue;
+        }
+
+        if (limit == 1) {
+          // The limit has been reached, return the rest of the string as the
+          // final item.  This is tested after empty string removal so that
+          // empty strings do not count towards the limit.
+          end = toSplit.length();
+          offset = -1;
+          // Since we may have changed the end, we need to trim it again.
+          while (end > start && trimmer.matches(toSplit.charAt(end - 1))) {
+            end--;
+          }
+        } else {
+          limit--;
+        }
+
+        return toSplit.subSequence(start, end).toString();
+      }
+      return endOfData();
+    }
+  }
+}
diff --git a/guava-gwt/src-super/com/google/common/base/super/com/google/common/base/Stopwatch.java b/guava-gwt/src-super/com/google/common/base/super/com/google/common/base/Stopwatch.java
new file mode 100644
index 0000000..841362a
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/base/super/com/google/common/base/Stopwatch.java
@@ -0,0 +1,196 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkState;
+import static java.util.concurrent.TimeUnit.MICROSECONDS;
+import static java.util.concurrent.TimeUnit.MILLISECONDS;
+import static java.util.concurrent.TimeUnit.NANOSECONDS;
+import static java.util.concurrent.TimeUnit.SECONDS;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.concurrent.TimeUnit;
+
+/**
+ * An object that measures elapsed time in nanoseconds. It is useful to measure
+ * elapsed time using this class instead of direct calls to {@link
+ * System#nanoTime} for a few reasons:
+ *
+ * <ul>
+ * <li>An alternate time source can be substituted, for testing or performance
+ *     reasons.
+ * <li>As documented by {@code nanoTime}, the value returned has no absolute
+ *     meaning, and can only be interpreted as relative to another timestamp
+ *     returned by {@code nanoTime} at a different time. {@code Stopwatch} is a
+ *     more effective abstraction because it exposes only these relative values,
+ *     not the absolute ones.
+ * </ul>
+ *
+ * <p>Basic usage:
+ * <pre>
+ *   Stopwatch stopwatch = new Stopwatch().{@link #start start}();
+ *   doSomething();
+ *   stopwatch.{@link #stop stop}(); // optional
+ *
+ *   long millis = stopwatch.{@link #elapsedMillis elapsedMillis}();
+ *
+ *   log.info("that took: " + stopwatch); // formatted string like "12.3 ms"
+ * </pre>
+ *
+ * <p>Stopwatch methods are not idempotent; it is an error to start or stop a
+ * stopwatch that is already in the desired state.
+ *
+ * <p>When testing code that uses this class, use the {@linkplain
+ * #Stopwatch(Ticker) alternate constructor} to supply a fake or mock ticker.
+ * <!-- TODO(kevinb): restore the "such as" --> This allows you to
+ * simulate any valid behavior of the stopwatch.
+ *
+ * <p><b>Note:</b> This class is not thread-safe.
+ *
+ * @author Kevin Bourrillion
+ * @since 10.0
+ */
+@Beta
+@GwtCompatible(emulated=true)
+public final class Stopwatch {
+  private final Ticker ticker;
+  private boolean isRunning;
+  private long elapsedNanos;
+  private long startTick;
+
+  /**
+   * Creates (but does not start) a new stopwatch using {@link System#nanoTime}
+   * as its time source.
+   */
+  public Stopwatch() {
+    this(Ticker.systemTicker());
+  }
+
+  /**
+   * Creates (but does not start) a new stopwatch, using the specified time
+   * source.
+   */
+  public Stopwatch(Ticker ticker) {
+    this.ticker = checkNotNull(ticker);
+  }
+
+  /**
+   * Returns {@code true} if {@link #start()} has been called on this stopwatch,
+   * and {@link #stop()} has not been called since the last call to {@code
+   * start()}.
+   */
+  public boolean isRunning() {
+    return isRunning;
+  }
+
+  /**
+   * Starts the stopwatch.
+   *
+   * @return this {@code Stopwatch} instance
+   * @throws IllegalStateException if the stopwatch is already running.
+   */
+  public Stopwatch start() {
+    checkState(!isRunning);
+    isRunning = true;
+    startTick = ticker.read();
+    return this;
+  }
+
+  /**
+   * Stops the stopwatch. Future reads will return the fixed duration that had
+   * elapsed up to this point.
+   *
+   * @return this {@code Stopwatch} instance
+   * @throws IllegalStateException if the stopwatch is already stopped.
+   */
+  public Stopwatch stop() {
+    long tick = ticker.read();
+    checkState(isRunning);
+    isRunning = false;
+    elapsedNanos += tick - startTick;
+    return this;
+  }
+
+  /**
+   * Sets the elapsed time for this stopwatch to zero,
+   * and places it in a stopped state.
+   *
+   * @return this {@code Stopwatch} instance
+   */
+  public Stopwatch reset() {
+    elapsedNanos = 0;
+    isRunning = false;
+    return this;
+  }
+
+  private long elapsedNanos() {
+    return isRunning ? ticker.read() - startTick + elapsedNanos : elapsedNanos;
+  }
+
+  /**
+   * Returns the current elapsed time shown on this stopwatch, expressed
+   * in the desired time unit, with any fraction rounded down.
+   *
+   * <p>Note that the overhead of measurement can be more than a microsecond, so
+   * it is generally not useful to specify {@link TimeUnit#NANOSECONDS}
+   * precision here.
+   */
+  public long elapsedTime(TimeUnit desiredUnit) {
+    return desiredUnit.convert(elapsedNanos(), NANOSECONDS);
+  }
+
+  /**
+   * Returns the current elapsed time shown on this stopwatch, expressed
+   * in milliseconds, with any fraction rounded down. This is identical to
+   * {@code elapsedTime(TimeUnit.MILLISECONDS}.
+   */
+  public long elapsedMillis() {
+    return elapsedTime(MILLISECONDS);
+  }
+
+  private static TimeUnit chooseUnit(long nanos) {
+    if (SECONDS.convert(nanos, NANOSECONDS) > 0) {
+      return SECONDS;
+    }
+    if (MILLISECONDS.convert(nanos, NANOSECONDS) > 0) {
+      return MILLISECONDS;
+    }
+    if (MICROSECONDS.convert(nanos, NANOSECONDS) > 0) {
+      return MICROSECONDS;
+    }
+    return NANOSECONDS;
+  }
+
+  private static String abbreviate(TimeUnit unit) {
+    switch (unit) {
+      case NANOSECONDS:
+        return "ns";
+      case MICROSECONDS:
+        return "\u03bcs"; // μs
+      case MILLISECONDS:
+        return "ms";
+      case SECONDS:
+        return "s";
+      default:
+        throw new AssertionError();
+    }
+  }
+}
+
diff --git a/guava-gwt/src-super/com/google/common/cache/super/com/google/common/cache/CacheBuilder.java b/guava-gwt/src-super/com/google/common/cache/super/com/google/common/cache/CacheBuilder.java
new file mode 100644
index 0000000..4c30815
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/cache/super/com/google/common/cache/CacheBuilder.java
@@ -0,0 +1,323 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.cache;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkState;
+
+import com.google.common.base.Function;
+import com.google.common.cache.CacheLoader.InvalidCacheLoadException;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.util.concurrent.ExecutionError;
+import com.google.common.util.concurrent.UncheckedExecutionException;
+import com.google.gwt.user.client.Timer;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeUnit;
+
+import javax.annotation.Nullable;
+
+/**
+ * CacheBuilder emulation.
+ *
+ * @author Charles Fry
+ */
+// TODO(fry): eventually we should emmulate LocalCache instead of CacheBuilder
+public class CacheBuilder<K, V> {
+  private static final int UNSET_INT = -1;
+  private static final int DEFAULT_INITIAL_CAPACITY = 16;
+  private static final int DEFAULT_EXPIRATION_NANOS = 0;
+
+  private int initialCapacity = -1;
+  private int concurrencyLevel = -1;
+  private long expirationMillis = -1;
+  private int maximumSize = -1;
+
+  CacheBuilder() {}
+
+  public static CacheBuilder<Object, Object> newBuilder() {
+    return new CacheBuilder<Object, Object>();
+  }
+
+  public CacheBuilder<K, V> initialCapacity(int initialCapacity) {
+    checkState(this.initialCapacity == UNSET_INT, "initial capacity was already set to %s",
+        this.initialCapacity);
+    checkArgument(initialCapacity >= 0);
+    this.initialCapacity = initialCapacity;
+    return this;
+  }
+
+  private int getInitialCapacity() {
+    return (initialCapacity == UNSET_INT) ? DEFAULT_INITIAL_CAPACITY : initialCapacity;
+  }
+
+  public CacheBuilder<K, V> concurrencyLevel(int concurrencyLevel) {
+    checkState(this.concurrencyLevel == UNSET_INT, "concurrency level was already set to %s",
+        this.concurrencyLevel);
+    checkArgument(concurrencyLevel > 0);
+    // GWT technically only supports concurrencyLevel == 1, but we silently
+    // ignore other positive values.
+    this.concurrencyLevel = concurrencyLevel;
+    return this;
+  }
+
+  public CacheBuilder<K, V> expireAfterWrite(long duration, TimeUnit unit) {
+    checkState(expirationMillis == UNSET_INT, "expireAfterWrite was already set to %s ms",
+        expirationMillis);
+    checkArgument(duration >= 0, "duration cannot be negative: %s %s", duration, unit);
+    this.expirationMillis = unit.toMillis(duration);
+    return this;
+  }
+
+  private long getExpirationMillis() {
+    return (expirationMillis == UNSET_INT) ? DEFAULT_EXPIRATION_NANOS : expirationMillis;
+  }
+
+  public CacheBuilder<K, V> maximumSize(int maximumSize) {
+    if (this.maximumSize != -1) {
+      throw new IllegalStateException("maximum size of " + maximumSize + " was already set");
+    }
+    if (maximumSize < 0) {
+      throw new IllegalArgumentException("invalid maximum size: " + maximumSize);
+    }
+    this.maximumSize = maximumSize;
+    return this;
+  }
+
+  public <K1 extends K, V1 extends V> Cache<K1, V1> build() {
+    return new LocalManualCache<K1, V1>(this);
+  }
+
+  public <K1 extends K, V1 extends V> LoadingCache<K1, V1> build(
+      CacheLoader<? super K1, V1> loader) {
+    return new LocalLoadingCache<K1, V1>(this, loader);
+  }
+
+  private static class LocalManualCache<K, V>
+      extends AbstractCache<K, V> implements Function<K, V> {
+    final LocalCache<K, V> localCache;
+
+    LocalManualCache(CacheBuilder<? super K, ? super V> builder) {
+      this(builder, null);
+    }
+
+    protected LocalManualCache(CacheBuilder<? super K, ? super V> builder,
+        CacheLoader<? super K, V> loader) {
+      this.localCache = new LocalCache<K, V>(builder, loader);
+    }
+
+    // Cache methods
+
+    @Override
+    public V get(K key) throws ExecutionException {
+      return localCache.getOrLoad(key);
+    }
+
+    @Override
+    public V getUnchecked(K key) {
+      try {
+        return get(key);
+      } catch (ExecutionException e) {
+        throw new UncheckedExecutionException(e.getCause());
+      }
+    }
+
+    @Override
+    public final V apply(K key) {
+      return getUnchecked(key);
+    }
+
+    @Override
+    @Nullable
+    public V getIfPresent(K key) {
+      return localCache.get(key);
+    }
+
+    @Override
+    public void put(K key, V value) {
+      localCache.put(key, value);
+    }
+
+    @Override
+    public void invalidate(Object key) {
+      checkNotNull(key);
+      localCache.remove(key);
+    }
+
+    @Override
+    public void invalidateAll() {
+      localCache.clear();
+    }
+
+    @Override
+    public long size() {
+      return localCache.size();
+    }
+
+    @Override
+    public ConcurrentMap<K, V> asMap() {
+      return localCache;
+    }
+  }
+
+  private static class LocalLoadingCache<K, V>
+      extends LocalManualCache<K, V> implements LoadingCache<K, V> {
+
+    LocalLoadingCache(CacheBuilder<? super K, ? super V> builder,
+        CacheLoader<? super K, V> loader) {
+      super(builder, checkNotNull(loader));
+    }
+
+    // Cache methods
+
+    @Override
+    public ImmutableMap<K, V> getAll(Iterable<? extends K> keys) throws ExecutionException {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void refresh(K key) {
+      throw new UnsupportedOperationException();
+    }
+  }
+
+  // TODO(fry,user): ConcurrentHashMap never throws a CME when mutating the map during iteration, but
+  // this implementation (based on a LHM) does. This will all be replaced soon anyways, so leaving
+  // it as is for now.
+  private static class LocalCache<K, V> extends LinkedHashMap<K, V>
+      implements ConcurrentMap<K, V> {
+    private final CacheLoader<? super K, V> loader;
+    private final long expirationMillis;
+    private final int maximumSize;
+
+    LocalCache(CacheBuilder<? super K, ? super V> builder, CacheLoader<? super K, V> loader) {
+      super(builder.getInitialCapacity(), 0.75f, (builder.maximumSize != UNSET_INT));
+      this.loader = loader;
+      this.expirationMillis = builder.getExpirationMillis();
+      this.maximumSize = builder.maximumSize;
+    }
+
+    @Override
+    public V put(K key, V value) {
+      V result = super.put(key, value);
+      if (expirationMillis > 0) {
+        scheduleRemoval(key, value);
+      }
+      return result;
+    }
+
+    @Override
+    protected boolean removeEldestEntry(Map.Entry<K, V> ignored) {
+      return (maximumSize == -1) ? false : size() > maximumSize;
+    }
+
+    @Override
+    public V putIfAbsent(K key, V value) {
+      if (!containsKey(key)) {
+        return put(key, value);
+      } else {
+        return get(key);
+      }
+    }
+
+    @Override
+    public boolean remove(Object key, Object value) {
+      if (containsKey(key) && get(key).equals(value)) {
+        remove(key);
+        return true;
+      }
+      return false;
+    }
+
+    @Override
+    public boolean replace(K key, V oldValue, V newValue) {
+      if (containsKey(key) && get(key).equals(oldValue)) {
+        put(key, newValue);
+        return true;
+      }
+      return false;
+    }
+
+    @Override
+    public V replace(K key, V value) {
+      return containsKey(key) ? put(key, value) : null;
+    }
+
+    private void scheduleRemoval(final K key, final V value) {
+      /*
+       * TODO: Keep weak reference to map, too. Build a priority queue out of the entries themselves
+       * instead of creating a task per entry. Then, we could have one recurring task per map (which
+       * would clean the entire map and then reschedule itself depending upon when the next
+       * expiration comes). We also want to avoid removing an entry prematurely if the entry was set
+       * to the same value again.
+       */
+      Timer timer = new Timer() {
+        @Override
+        public void run() {
+          remove(key, value);
+        }
+      };
+      timer.schedule((int) expirationMillis);
+    }
+
+    public V getOrLoad(Object k) throws ExecutionException {
+      // from CustomConcurrentHashMap
+      V result = super.get(k);
+      if (result == null) {
+        /*
+         * This cast isn't safe, but we can rely on the fact that K is almost always passed to
+         * Map.get(), and tools like IDEs and Findbugs can catch situations where this isn't the
+         * case.
+         *
+         * The alternative is to add an overloaded method, but the chances of a user calling get()
+         * instead of the new API and the risks inherent in adding a new API outweigh this little
+         * hole.
+         */
+        @SuppressWarnings("unchecked")
+        K key = (K) k;
+        result = compute(key);
+      }
+      return result;
+    }
+
+    private V compute(K key) throws ExecutionException {
+      V value;
+      try {
+        value = loader.load(key);
+      } catch (RuntimeException e) {
+        throw new UncheckedExecutionException(e);
+      } catch (Exception e) {
+        throw new ExecutionException(e);
+      } catch (Error e) {
+        throw new ExecutionError(e);
+      }
+
+      if (value == null) {
+        String message = loader + " returned null for key " + key + ".";
+        throw new InvalidCacheLoadException(message);
+      }
+      put(key, value);
+      return value;
+    }
+  }
+
+}
diff --git a/guava-gwt/src-super/com/google/common/cache/super/com/google/common/cache/CacheLoader.java b/guava-gwt/src-super/com/google/common/cache/super/com/google/common/cache/CacheLoader.java
new file mode 100644
index 0000000..c0815dd
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/cache/super/com/google/common/cache/CacheLoader.java
@@ -0,0 +1,135 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.cache;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Function;
+import com.google.common.base.Supplier;
+
+import java.io.Serializable;
+import java.util.Map;
+
+/**
+ * Computes or retrieves values, based on a key, for use in populating a {@code Cache}.
+ *
+ * <p>Most implementations will only need to implement {@link #load}. Other methods may be
+ * overridden as desired.
+ *
+ * @author Charles Fry
+ * @since 10.0
+ */
+@GwtCompatible(emulated = true)
+public abstract class CacheLoader<K, V> {
+  /**
+   * Constructor for use by subclasses.
+   */
+  protected CacheLoader() {}
+
+  /**
+   * Computes or retrieves the value corresponding to {@code key}.
+   *
+   * @param key the non-null key whose value should be loaded
+   * @return the value associated with {@code key}; <b>must not be null</b>
+   */
+  public abstract V load(K key) throws Exception;
+
+  /**
+   * Computes or retrieves the values corresponding to {@code keys}. This method is called by
+   * {@link Cache#getAll}.
+   *
+   * <p>If the returned map doesn't contain all requested {@code keys} then the entries it does
+   * contain will be cached, but {@code getAll} will throw an exception. If the returned map
+   * contains extra keys not present in {@code keys} then all returned entries will be cached,
+   * but only the entries for {@code keys} will be returned from {@code getAll}.
+   *
+   * <p>This method should be overriden when bulk retrieval is significantly more efficient than
+   * many individual lookups. Note that {@link Cache#getAll} will defer to individual calls to
+   * {@link Cache#get} if this method is not overriden.
+   *
+   * @param keys the unique, non-null keys whose values should be loaded
+   * @return a map from each key in {@code keys} to the value associated with that key;
+   *     <b>may not contain null values</b>
+   * @since 11.0
+   */
+  public Map<K, V> loadAll(Iterable<? extends K> keys) throws Exception {
+    // This will be caught by getAll(), causing it to fall back to multiple calls to Cache.get
+    throw new UnsupportedLoadingOperationException();
+  }
+
+  /**
+   * Returns a {@code CacheLoader} which creates values by applying a {@code Function} to the key.
+   */
+  public static <K, V> CacheLoader<K, V> from(Function<K, V> function) {
+    return new FunctionToCacheLoader<K, V>(function);
+  }
+
+  private static final class FunctionToCacheLoader<K, V>
+      extends CacheLoader<K, V> implements Serializable {
+    private final Function<K, V> computingFunction;
+
+    public FunctionToCacheLoader(Function<K, V> computingFunction) {
+      this.computingFunction = checkNotNull(computingFunction);
+    }
+
+    @Override
+    public V load(K key) {
+      return computingFunction.apply(key);
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  /**
+   * Returns a {@code CacheLoader} which obtains values from a {@code Supplier} (independent of the
+   * key).
+   */
+  public static <V> CacheLoader<Object, V> from(Supplier<V> supplier) {
+    return new SupplierToCacheLoader<V>(supplier);
+  }
+
+  private static final class SupplierToCacheLoader<V>
+      extends CacheLoader<Object, V> implements Serializable {
+    private final Supplier<V> computingSupplier;
+
+    public SupplierToCacheLoader(Supplier<V> computingSupplier) {
+      this.computingSupplier = checkNotNull(computingSupplier);
+    }
+
+    @Override
+    public V load(Object key) {
+      return computingSupplier.get();
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  static final class UnsupportedLoadingOperationException extends UnsupportedOperationException {}
+
+  /**
+   * Thrown to indicate that an invalid response was returned from a call to {@link CacheLoader}.
+   *
+   * @since 11.0
+   */
+  public static final class InvalidCacheLoadException extends RuntimeException {
+    public InvalidCacheLoadException(String message) {
+      super(message);
+    }
+  }
+}
+
diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/AbstractBiMap.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/AbstractBiMap.java
new file mode 100644
index 0000000..a6cec16
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/AbstractBiMap.java
@@ -0,0 +1,383 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkState;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Objects;
+
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * A general-purpose bimap implementation using any two backing {@code Map}
+ * instances.
+ *
+ * <p>Note that this class contains {@code equals()} calls that keep it from
+ * supporting {@code IdentityHashMap} backing maps.
+ *
+ * @author Kevin Bourrillion
+ * @author Mike Bostock
+ */
+@GwtCompatible(emulated = true)
+abstract class AbstractBiMap<K, V> extends ForwardingMap<K, V>
+    implements BiMap<K, V>, Serializable {
+
+  private transient Map<K, V> delegate;
+  private transient AbstractBiMap<V, K> inverse;
+
+  /** Package-private constructor for creating a map-backed bimap. */
+  AbstractBiMap(Map<K, V> forward, Map<V, K> backward) {
+    setDelegates(forward, backward);
+  }
+
+  /** Private constructor for inverse bimap. */
+  private AbstractBiMap(Map<K, V> backward, AbstractBiMap<V, K> forward) {
+    delegate = backward;
+    inverse = forward;
+  }
+
+  @Override protected Map<K, V> delegate() {
+    return delegate;
+  }
+
+  /**
+   * Specifies the delegate maps going in each direction. Called by the
+   * constructor and by subclasses during deserialization.
+   */
+  void setDelegates(Map<K, V> forward, Map<V, K> backward) {
+    checkState(delegate == null);
+    checkState(inverse == null);
+    checkArgument(forward.isEmpty());
+    checkArgument(backward.isEmpty());
+    checkArgument(forward != backward);
+    delegate = forward;
+    inverse = new Inverse<V, K>(backward, this);
+  }
+
+  void setInverse(AbstractBiMap<V, K> inverse) {
+    this.inverse = inverse;
+  }
+
+  // Query Operations (optimizations)
+
+  @Override public boolean containsValue(Object value) {
+    return inverse.containsKey(value);
+  }
+
+  // Modification Operations
+
+  @Override public V put(K key, V value) {
+    return putInBothMaps(key, value, false);
+  }
+
+  @Override
+  public V forcePut(K key, V value) {
+    return putInBothMaps(key, value, true);
+  }
+
+  private V putInBothMaps(@Nullable K key, @Nullable V value, boolean force) {
+    boolean containedKey = containsKey(key);
+    if (containedKey && Objects.equal(value, get(key))) {
+      return value;
+    }
+    if (force) {
+      inverse().remove(value);
+    } else {
+      checkArgument(!containsValue(value), "value already present: %s", value);
+    }
+    V oldValue = delegate.put(key, value);
+    updateInverseMap(key, containedKey, oldValue, value);
+    return oldValue;
+  }
+
+  private void updateInverseMap(
+      K key, boolean containedKey, V oldValue, V newValue) {
+    if (containedKey) {
+      removeFromInverseMap(oldValue);
+    }
+    inverse.delegate.put(newValue, key);
+  }
+
+  @Override public V remove(Object key) {
+    return containsKey(key) ? removeFromBothMaps(key) : null;
+  }
+
+  private V removeFromBothMaps(Object key) {
+    V oldValue = delegate.remove(key);
+    removeFromInverseMap(oldValue);
+    return oldValue;
+  }
+
+  private void removeFromInverseMap(V oldValue) {
+    inverse.delegate.remove(oldValue);
+  }
+
+  // Bulk Operations
+
+  @Override public void putAll(Map<? extends K, ? extends V> map) {
+    for (Entry<? extends K, ? extends V> entry : map.entrySet()) {
+      put(entry.getKey(), entry.getValue());
+    }
+  }
+
+  @Override public void clear() {
+    delegate.clear();
+    inverse.delegate.clear();
+  }
+
+  // Views
+
+  @Override
+  public BiMap<V, K> inverse() {
+    return inverse;
+  }
+
+  private transient Set<K> keySet;
+
+  @Override public Set<K> keySet() {
+    Set<K> result = keySet;
+    return (result == null) ? keySet = new KeySet() : result;
+  }
+
+  private class KeySet extends ForwardingSet<K> {
+    @Override protected Set<K> delegate() {
+      return delegate.keySet();
+    }
+
+    @Override public void clear() {
+      AbstractBiMap.this.clear();
+    }
+
+    @Override public boolean remove(Object key) {
+      if (!contains(key)) {
+        return false;
+      }
+      removeFromBothMaps(key);
+      return true;
+    }
+
+    @Override public boolean removeAll(Collection<?> keysToRemove) {
+      return standardRemoveAll(keysToRemove);
+    }
+
+    @Override public boolean retainAll(Collection<?> keysToRetain) {
+      return standardRetainAll(keysToRetain);
+    }
+
+    @Override public Iterator<K> iterator() {
+      final Iterator<Entry<K, V>> iterator = delegate.entrySet().iterator();
+      return new Iterator<K>() {
+        Entry<K, V> entry;
+
+        @Override
+        public boolean hasNext() {
+          return iterator.hasNext();
+        }
+        @Override
+        public K next() {
+          entry = iterator.next();
+          return entry.getKey();
+        }
+        @Override
+        public void remove() {
+          checkState(entry != null);
+          V value = entry.getValue();
+          iterator.remove();
+          removeFromInverseMap(value);
+        }
+      };
+    }
+  }
+
+  private transient Set<V> valueSet;
+
+  @Override public Set<V> values() {
+    /*
+     * We can almost reuse the inverse's keySet, except we have to fix the
+     * iteration order so that it is consistent with the forward map.
+     */
+    Set<V> result = valueSet;
+    return (result == null) ? valueSet = new ValueSet() : result;
+  }
+
+  private class ValueSet extends ForwardingSet<V> {
+    final Set<V> valuesDelegate = inverse.keySet();
+
+    @Override protected Set<V> delegate() {
+      return valuesDelegate;
+    }
+
+    @Override public Iterator<V> iterator() {
+      final Iterator<V> iterator = delegate.values().iterator();
+      return new Iterator<V>() {
+        V valueToRemove;
+
+        @Override public boolean hasNext() {
+          return iterator.hasNext();
+        }
+
+        @Override public V next() {
+          return valueToRemove = iterator.next();
+        }
+
+        @Override public void remove() {
+          iterator.remove();
+          removeFromInverseMap(valueToRemove);
+        }
+      };
+    }
+
+    @Override public Object[] toArray() {
+      return standardToArray();
+    }
+
+    @Override public <T> T[] toArray(T[] array) {
+      return standardToArray(array);
+    }
+
+    @Override public String toString() {
+      return standardToString();
+    }
+  }
+
+  private transient Set<Entry<K, V>> entrySet;
+
+  @Override public Set<Entry<K, V>> entrySet() {
+    Set<Entry<K, V>> result = entrySet;
+    return (result == null) ? entrySet = new EntrySet() : result;
+  }
+
+  private class EntrySet extends ForwardingSet<Entry<K, V>> {
+    final Set<Entry<K, V>> esDelegate = delegate.entrySet();
+
+    @Override protected Set<Entry<K, V>> delegate() {
+      return esDelegate;
+    }
+
+    @Override public void clear() {
+      AbstractBiMap.this.clear();
+    }
+
+    @Override public boolean remove(Object object) {
+      if (!esDelegate.contains(object)) {
+        return false;
+      }
+
+      // safe because esDelgate.contains(object).
+      Entry<?, ?> entry = (Entry<?, ?>) object;
+      inverse.delegate.remove(entry.getValue());
+      /*
+       * Remove the mapping in inverse before removing from esDelegate because
+       * if entry is part of esDelegate, entry might be invalidated after the
+       * mapping is removed from esDelegate.
+       */
+      esDelegate.remove(entry);
+      return true;
+    }
+
+    @Override public Iterator<Entry<K, V>> iterator() {
+      final Iterator<Entry<K, V>> iterator = esDelegate.iterator();
+      return new Iterator<Entry<K, V>>() {
+        Entry<K, V> entry;
+
+        @Override public boolean hasNext() {
+          return iterator.hasNext();
+        }
+
+        @Override public Entry<K, V> next() {
+          entry = iterator.next();
+          final Entry<K, V> finalEntry = entry;
+
+          return new ForwardingMapEntry<K, V>() {
+            @Override protected Entry<K, V> delegate() {
+              return finalEntry;
+            }
+
+            @Override public V setValue(V value) {
+              // Preconditions keep the map and inverse consistent.
+              checkState(contains(this), "entry no longer in map");
+              // similar to putInBothMaps, but set via entry
+              if (Objects.equal(value, getValue())) {
+                return value;
+              }
+              checkArgument(!containsValue(value),
+                  "value already present: %s", value);
+              V oldValue = finalEntry.setValue(value);
+              checkState(Objects.equal(value, get(getKey())),
+                  "entry no longer in map");
+              updateInverseMap(getKey(), true, oldValue, value);
+              return oldValue;
+            }
+          };
+        }
+
+        @Override public void remove() {
+          checkState(entry != null);
+          V value = entry.getValue();
+          iterator.remove();
+          removeFromInverseMap(value);
+        }
+      };
+    }
+
+    // See java.util.Collections.CheckedEntrySet for details on attacks.
+
+    @Override public Object[] toArray() {
+      return standardToArray();
+    }
+    @Override public <T> T[] toArray(T[] array) {
+      return standardToArray(array);
+    }
+    @Override public boolean contains(Object o) {
+      return Maps.containsEntryImpl(delegate(), o);
+    }
+    @Override public boolean containsAll(Collection<?> c) {
+      return standardContainsAll(c);
+    }
+    @Override public boolean removeAll(Collection<?> c) {
+      return standardRemoveAll(c);
+    }
+    @Override public boolean retainAll(Collection<?> c) {
+      return standardRetainAll(c);
+    }
+  }
+
+  /** The inverse of any other {@code AbstractBiMap} subclass. */
+  private static class Inverse<K, V> extends AbstractBiMap<K, V> {
+    private Inverse(Map<K, V> backward, AbstractBiMap<V, K> forward) {
+      super(backward, forward);
+    }
+
+    /*
+     * Serialization stores the forward bimap, the inverse of this inverse.
+     * Deserialization calls inverse() on the forward bimap and returns that
+     * inverse.
+     *
+     * If a bimap and its inverse are serialized together, the deserialized
+     * instances have inverse() methods that return the other.
+     */
+  }
+}
+
diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/AbstractMapBasedMultiset.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/AbstractMapBasedMultiset.java
new file mode 100644
index 0000000..6bccc6d
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/AbstractMapBasedMultiset.java
@@ -0,0 +1,395 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkState;
+import static com.google.common.collect.Multisets.checkNonnegative;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.primitives.Ints;
+
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.ConcurrentModificationException;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * Basic implementation of {@code Multiset<E>} backed by an instance of {@code
+ * Map<E, AtomicInteger>}.
+ *
+ * <p>For serialization to work, the subclass must specify explicit {@code
+ * readObject} and {@code writeObject} methods.
+ *
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible(emulated = true)
+abstract class AbstractMapBasedMultiset<E> extends AbstractMultiset<E>
+    implements Serializable {
+
+  private transient Map<E, Count> backingMap;
+
+  /*
+   * Cache the size for efficiency. Using a long lets us avoid the need for
+   * overflow checking and ensures that size() will function correctly even if
+   * the multiset had once been larger than Integer.MAX_VALUE.
+   */
+  private transient long size;
+
+  /** Standard constructor. */
+  protected AbstractMapBasedMultiset(Map<E, Count> backingMap) {
+    this.backingMap = checkNotNull(backingMap);
+    this.size = super.size();
+  }
+
+  Map<E, Count> backingMap() {
+    return backingMap;
+  }
+
+  /** Used during deserialization only. The backing map must be empty. */
+  void setBackingMap(Map<E, Count> backingMap) {
+    this.backingMap = backingMap;
+  }
+
+  // Required Implementations
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>Invoking {@link Multiset.Entry#getCount} on an entry in the returned
+   * set always returns the current count of that element in the multiset, as
+   * opposed to the count at the time the entry was retrieved.
+   */
+  @Override
+  public Set<Multiset.Entry<E>> entrySet() {
+    return super.entrySet();
+  }
+
+  @Override
+  Iterator<Entry<E>> entryIterator() {
+    final Iterator<Map.Entry<E, Count>> backingEntries =
+        backingMap.entrySet().iterator();
+    return new Iterator<Multiset.Entry<E>>() {
+      Map.Entry<E, Count> toRemove;
+
+      @Override
+      public boolean hasNext() {
+        return backingEntries.hasNext();
+      }
+
+      @Override
+      public Multiset.Entry<E> next() {
+        final Map.Entry<E, Count> mapEntry = backingEntries.next();
+        toRemove = mapEntry;
+        return new Multisets.AbstractEntry<E>() {
+          @Override
+          public E getElement() {
+            return mapEntry.getKey();
+          }
+          @Override
+          public int getCount() {
+            int count = mapEntry.getValue().get();
+            if (count == 0) {
+              Count frequency = backingMap.get(getElement());
+              if (frequency != null) {
+                count = frequency.get();
+              }
+            }
+            return count;
+          }
+        };
+      }
+
+      @Override
+      public void remove() {
+        checkState(toRemove != null,
+            "no calls to next() since the last call to remove()");
+        size -= toRemove.getValue().getAndSet(0);
+        backingEntries.remove();
+        toRemove = null;
+      }
+    };
+  }
+
+  @Override
+  public void clear() {
+    for (Count frequency : backingMap.values()) {
+      frequency.set(0);
+    }
+    backingMap.clear();
+    size = 0L;
+  }
+
+  @Override
+  int distinctElements() {
+    return backingMap.size();
+  }
+
+  // Optimizations - Query Operations
+
+  @Override public int size() {
+    return Ints.saturatedCast(size);
+  }
+
+  @Override public Iterator<E> iterator() {
+    return new MapBasedMultisetIterator();
+  }
+
+  /*
+   * Not subclassing AbstractMultiset$MultisetIterator because next() needs to
+   * retrieve the Map.Entry<E, AtomicInteger> entry, which can then be used for
+   * a more efficient remove() call.
+   */
+  private class MapBasedMultisetIterator implements Iterator<E> {
+    final Iterator<Map.Entry<E, Count>> entryIterator;
+    Map.Entry<E, Count> currentEntry;
+    int occurrencesLeft;
+    boolean canRemove;
+
+    MapBasedMultisetIterator() {
+      this.entryIterator = backingMap.entrySet().iterator();
+    }
+
+    @Override
+    public boolean hasNext() {
+      return occurrencesLeft > 0 || entryIterator.hasNext();
+    }
+
+    @Override
+    public E next() {
+      if (occurrencesLeft == 0) {
+        currentEntry = entryIterator.next();
+        occurrencesLeft = currentEntry.getValue().get();
+      }
+      occurrencesLeft--;
+      canRemove = true;
+      return currentEntry.getKey();
+    }
+
+    @Override
+    public void remove() {
+      checkState(canRemove,
+          "no calls to next() since the last call to remove()");
+      int frequency = currentEntry.getValue().get();
+      if (frequency <= 0) {
+        throw new ConcurrentModificationException();
+      }
+      if (currentEntry.getValue().addAndGet(-1) == 0) {
+        entryIterator.remove();
+      }
+      size--;
+      canRemove = false;
+    }
+  }
+
+  @Override public int count(@Nullable Object element) {
+    try {
+      Count frequency = backingMap.get(element);
+      return (frequency == null) ? 0 : frequency.get();
+    } catch (NullPointerException e) {
+      return 0;
+    } catch (ClassCastException e) {
+      return 0;
+    }
+  }
+
+  // Optional Operations - Modification Operations
+
+  /**
+   * {@inheritDoc}
+   *
+   * @throws IllegalArgumentException if the call would result in more than
+   *     {@link Integer#MAX_VALUE} occurrences of {@code element} in this
+   *     multiset.
+   */
+  @Override public int add(@Nullable E element, int occurrences) {
+    if (occurrences == 0) {
+      return count(element);
+    }
+    checkArgument(
+        occurrences > 0, "occurrences cannot be negative: %s", occurrences);
+    Count frequency = backingMap.get(element);
+    int oldCount;
+    if (frequency == null) {
+      oldCount = 0;
+      backingMap.put(element, new Count(occurrences));
+    } else {
+      oldCount = frequency.get();
+      long newCount = (long) oldCount + (long) occurrences;
+      checkArgument(newCount <= Integer.MAX_VALUE,
+          "too many occurrences: %s", newCount);
+      frequency.getAndAdd(occurrences);
+    }
+    size += occurrences;
+    return oldCount;
+  }
+
+  @Override public int remove(@Nullable Object element, int occurrences) {
+    if (occurrences == 0) {
+      return count(element);
+    }
+    checkArgument(
+        occurrences > 0, "occurrences cannot be negative: %s", occurrences);
+    Count frequency = backingMap.get(element);
+    if (frequency == null) {
+      return 0;
+    }
+
+    int oldCount = frequency.get();
+
+    int numberRemoved;
+    if (oldCount > occurrences) {
+      numberRemoved = occurrences;
+    } else {
+      numberRemoved = oldCount;
+      backingMap.remove(element);
+    }
+
+    frequency.addAndGet(-numberRemoved);
+    size -= numberRemoved;
+    return oldCount;
+  }
+
+  // Roughly a 33% performance improvement over AbstractMultiset.setCount().
+  @Override public int setCount(E element, int count) {
+    checkNonnegative(count, "count");
+
+    Count existingCounter;
+    int oldCount;
+    if (count == 0) {
+      existingCounter = backingMap.remove(element);
+      oldCount = getAndSet(existingCounter, count);
+    } else {
+      existingCounter = backingMap.get(element);
+      oldCount = getAndSet(existingCounter, count);
+
+      if (existingCounter == null) {
+        backingMap.put(element, new Count(count));
+      }
+    }
+
+    size += (count - oldCount);
+    return oldCount;
+  }
+
+  private static int getAndSet(Count i, int count) {
+    if (i == null) {
+      return 0;
+    }
+
+    return i.getAndSet(count);
+  }
+
+  private int removeAllOccurrences(@Nullable Object element,
+      Map<E, Count> map) {
+    Count frequency = map.remove(element);
+    if (frequency == null) {
+      return 0;
+    }
+    int numberRemoved = frequency.getAndSet(0);
+    size -= numberRemoved;
+    return numberRemoved;
+  }
+
+  // Views
+
+  @Override Set<E> createElementSet() {
+    return new MapBasedElementSet(backingMap);
+  }
+
+  // TODO(user): once TreeMultiset is replaced with a SortedMultiset
+  // implementation, replace this with a subclass of Multisets.ElementSet.
+  class MapBasedElementSet extends ForwardingSet<E> {
+
+    // This mapping is the usually the same as 'backingMap', but can be a
+    // submap in some implementations.
+    private final Map<E, Count> map;
+    private final Set<E> delegate;
+
+    MapBasedElementSet(Map<E, Count> map) {
+      this.map = map;
+      delegate = map.keySet();
+    }
+
+    @Override protected Set<E> delegate() {
+      return delegate;
+    }
+
+    @Override public Iterator<E> iterator() {
+      final Iterator<Map.Entry<E, Count>> entries
+          = map.entrySet().iterator();
+      return new Iterator<E>() {
+        Map.Entry<E, Count> toRemove;
+
+        @Override
+        public boolean hasNext() {
+          return entries.hasNext();
+        }
+
+        @Override
+        public E next() {
+          toRemove = entries.next();
+          return toRemove.getKey();
+        }
+
+        @Override
+        public void remove() {
+          checkState(toRemove != null,
+              "no calls to next() since the last call to remove()");
+          size -= toRemove.getValue().getAndSet(0);
+          entries.remove();
+          toRemove = null;
+        }
+      };
+    }
+
+    @Override public boolean remove(Object element) {
+      return removeAllOccurrences(element, map) != 0;
+    }
+
+    @Override public boolean removeAll(Collection<?> elementsToRemove) {
+      return Iterators.removeAll(iterator(), elementsToRemove);
+    }
+
+    @Override public boolean retainAll(Collection<?> elementsToRetain) {
+      return Iterators.retainAll(iterator(), elementsToRetain);
+    }
+
+    @Override public void clear() {
+      if (map == backingMap) {
+        AbstractMapBasedMultiset.this.clear();
+      } else {
+        Iterator<E> i = iterator();
+        while (i.hasNext()) {
+          i.next();
+          i.remove();
+        }
+      }
+    }
+
+    public Map<E, Count> getMap() {
+      return map;
+    }
+  }
+
+  // Don't allow default serialization.
+}
diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ArrayListMultimap.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ArrayListMultimap.java
new file mode 100644
index 0000000..da5478c
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ArrayListMultimap.java
@@ -0,0 +1,134 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkArgument;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.VisibleForTesting;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * Implementation of {@code Multimap} that uses an {@code ArrayList} to store
+ * the values for a given key. A {@link HashMap} associates each key with an
+ * {@link ArrayList} of values.
+ *
+ * <p>When iterating through the collections supplied by this class, the
+ * ordering of values for a given key agrees with the order in which the values
+ * were added.
+ *
+ * <p>This multimap allows duplicate key-value pairs. After adding a new
+ * key-value pair equal to an existing key-value pair, the {@code
+ * ArrayListMultimap} will contain entries for both the new value and the old
+ * value.
+ *
+ * <p>Keys and values may be null. All optional multimap methods are supported,
+ * and all returned views are modifiable.
+ *
+ * <p>The lists returned by {@link #get}, {@link #removeAll}, and {@link
+ * #replaceValues} all implement {@link java.util.RandomAccess}.
+ *
+ * <p>This class is not threadsafe when any concurrent operations update the
+ * multimap. Concurrent read operations will work correctly. To allow concurrent
+ * update operations, wrap your multimap with a call to {@link
+ * Multimaps#synchronizedListMultimap}.
+ *
+ * @author Jared Levy
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible(serializable = true, emulated = true)
+public final class ArrayListMultimap<K, V> extends AbstractListMultimap<K, V> {
+  // Default from ArrayList
+  private static final int DEFAULT_VALUES_PER_KEY = 10;
+
+  @VisibleForTesting transient int expectedValuesPerKey;
+
+  /**
+   * Creates a new, empty {@code ArrayListMultimap} with the default initial
+   * capacities.
+   */
+  public static <K, V> ArrayListMultimap<K, V> create() {
+    return new ArrayListMultimap<K, V>();
+  }
+
+  /**
+   * Constructs an empty {@code ArrayListMultimap} with enough capacity to hold
+   * the specified numbers of keys and values without resizing.
+   *
+   * @param expectedKeys the expected number of distinct keys
+   * @param expectedValuesPerKey the expected average number of values per key
+   * @throws IllegalArgumentException if {@code expectedKeys} or {@code
+   *      expectedValuesPerKey} is negative
+   */
+  public static <K, V> ArrayListMultimap<K, V> create(
+      int expectedKeys, int expectedValuesPerKey) {
+    return new ArrayListMultimap<K, V>(expectedKeys, expectedValuesPerKey);
+  }
+
+  /**
+   * Constructs an {@code ArrayListMultimap} with the same mappings as the
+   * specified multimap.
+   *
+   * @param multimap the multimap whose contents are copied to this multimap
+   */
+  public static <K, V> ArrayListMultimap<K, V> create(
+      Multimap<? extends K, ? extends V> multimap) {
+    return new ArrayListMultimap<K, V>(multimap);
+  }
+
+  private ArrayListMultimap() {
+    super(new HashMap<K, Collection<V>>());
+    expectedValuesPerKey = DEFAULT_VALUES_PER_KEY;
+  }
+
+  private ArrayListMultimap(int expectedKeys, int expectedValuesPerKey) {
+    super(Maps.<K, Collection<V>>newHashMapWithExpectedSize(expectedKeys));
+    checkArgument(expectedValuesPerKey >= 0);
+    this.expectedValuesPerKey = expectedValuesPerKey;
+  }
+
+  private ArrayListMultimap(Multimap<? extends K, ? extends V> multimap) {
+    this(multimap.keySet().size(),
+        (multimap instanceof ArrayListMultimap) ?
+            ((ArrayListMultimap<?, ?>) multimap).expectedValuesPerKey :
+            DEFAULT_VALUES_PER_KEY);
+    putAll(multimap);
+  }
+
+  /**
+   * Creates a new, empty {@code ArrayList} to hold the collection of values for
+   * an arbitrary key.
+   */
+  @Override List<V> createCollection() {
+    return new ArrayList<V>(expectedValuesPerKey);
+  }
+
+  /**
+   * Reduces the memory used by this {@code ArrayListMultimap}, if feasible.
+   */
+  public void trimToSize() {
+    for (Collection<V> collection : backingMap().values()) {
+      ArrayList<V> arrayList = (ArrayList<V>) collection;
+      arrayList.trimToSize();
+    }
+  }
+}
+
diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/EmptyContiguousSet.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/EmptyContiguousSet.java
new file mode 100644
index 0000000..f8fbe59
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/EmptyContiguousSet.java
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+*/
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.NoSuchElementException;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * An empty contiguous set.
+ *
+ * @author Gregory Kick
+ */
+@GwtCompatible(emulated = true)
+@SuppressWarnings("unchecked") // allow ungenerified Comparable types
+final class EmptyContiguousSet<C extends Comparable> extends ContiguousSet<C> {
+  EmptyContiguousSet(DiscreteDomain<C> domain) {
+    super(domain);
+  }
+
+  @Override public C first() {
+    throw new NoSuchElementException();
+  }
+
+  @Override public C last() {
+    throw new NoSuchElementException();
+  }
+
+  @Override public int size() {
+    return 0;
+  }
+
+  @Override public ContiguousSet<C> intersection(ContiguousSet<C> other) {
+    return this;
+  }
+
+  @Override public Range<C> range() {
+    throw new NoSuchElementException();
+  }
+
+  @Override public Range<C> range(BoundType lowerBoundType, BoundType upperBoundType) {
+    throw new NoSuchElementException();
+  }
+
+  @Override ContiguousSet<C> headSetImpl(C toElement, boolean inclusive) {
+    return this;
+  }
+
+  @Override ContiguousSet<C> subSetImpl(
+      C fromElement, boolean fromInclusive, C toElement, boolean toInclusive) {
+    return this;
+  }
+
+  @Override ContiguousSet<C> tailSetImpl(C fromElement, boolean fromInclusive) {
+    return this;
+  }
+
+  //Abstract method doesn't exist in GWT emulation
+  /* @Override */ int indexOf(Object target) {
+    return -1;
+  }
+
+  @Override public UnmodifiableIterator<C> iterator() {
+    return Iterators.emptyIterator();
+  }
+
+  @Override boolean isPartialView() {
+    return false;
+  }
+
+  @Override public boolean isEmpty() {
+    return true;
+  }
+
+  @Override public ImmutableList<C> asList() {
+    return ImmutableList.of();
+  }
+
+  @Override public String toString() {
+    return "[]";
+  }
+
+  @Override public boolean equals(@Nullable Object object) {
+    if (object instanceof Set) {
+      Set<?> that = (Set<?>) object;
+      return that.isEmpty();
+    }
+    return false;
+  }
+
+  @Override public int hashCode() {
+    return 0;
+  }
+}
+
diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/EmptyImmutableList.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/EmptyImmutableList.java
new file mode 100644
index 0000000..435fc26
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/EmptyImmutableList.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+package com.google.common.collect;
+
+/**
+ * GWT emulated version of EmptyImmutableList.
+ *
+ * @author Hayward Chan
+ */
+final class EmptyImmutableList extends ImmutableList<Object> {
+
+  static final EmptyImmutableList INSTANCE = new EmptyImmutableList();
+}
diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/EmptyImmutableMap.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/EmptyImmutableMap.java
new file mode 100644
index 0000000..dc3fecf
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/EmptyImmutableMap.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+/**
+ * GWT emulation of {@link EmptyImmutableMap}.  In GWT, it is a thin wrapper
+ * around {@link java.util.Collections#emptyMap()}.
+ *
+ * @author Hayward Chan
+ */
+final class EmptyImmutableMap extends ImmutableMap<Object, Object> {
+
+  static final EmptyImmutableMap INSTANCE = new EmptyImmutableMap();
+}
diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/EmptyImmutableSet.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/EmptyImmutableSet.java
new file mode 100644
index 0000000..6166c36
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/EmptyImmutableSet.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+/**
+ * GWT emulation of {@link EmptyImmutableSet}.
+ *
+ * @author Hayward Chan
+ */
+final class EmptyImmutableSet extends ImmutableSet<Object> {
+
+  static final EmptyImmutableSet INSTANCE = new EmptyImmutableSet();
+}
diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/EmptyImmutableSortedSet.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/EmptyImmutableSortedSet.java
new file mode 100644
index 0000000..b21896b
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/EmptyImmutableSortedSet.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import java.util.Comparator;
+
+/**
+ * GWT emulation of {@link EmptyImmutableSortedSet}.
+ *
+ * @author Hayward Chan
+ */
+class EmptyImmutableSortedSet<E> extends ImmutableSortedSet<E> {
+  EmptyImmutableSortedSet(Comparator<? super E> comparator) {
+    super(comparator);
+  }
+}
diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/EnumBiMap.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/EnumBiMap.java
new file mode 100644
index 0000000..f6d7e90
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/EnumBiMap.java
@@ -0,0 +1,105 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkArgument;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.EnumMap;
+import java.util.Map;
+
+/**
+ * A {@code BiMap} backed by two {@code EnumMap} instances. Null keys and values
+ * are not permitted. An {@code EnumBiMap} and its inverse are both
+ * serializable.
+ *
+ * @author Mike Bostock
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible(emulated = true)
+public final class EnumBiMap<K extends Enum<K>, V extends Enum<V>>
+    extends AbstractBiMap<K, V> {
+  private transient Class<K> keyType;
+  private transient Class<V> valueType;
+
+  /**
+   * Returns a new, empty {@code EnumBiMap} using the specified key and value
+   * types.
+   *
+   * @param keyType the key type
+   * @param valueType the value type
+   */
+  public static <K extends Enum<K>, V extends Enum<V>> EnumBiMap<K, V>
+      create(Class<K> keyType, Class<V> valueType) {
+    return new EnumBiMap<K, V>(keyType, valueType);
+  }
+
+  /**
+   * Returns a new bimap with the same mappings as the specified map. If the
+   * specified map is an {@code EnumBiMap}, the new bimap has the same types as
+   * the provided map. Otherwise, the specified map must contain at least one
+   * mapping, in order to determine the key and value types.
+   *
+   * @param map the map whose mappings are to be placed in this map
+   * @throws IllegalArgumentException if map is not an {@code EnumBiMap}
+   *     instance and contains no mappings
+   */
+  public static <K extends Enum<K>, V extends Enum<V>> EnumBiMap<K, V>
+      create(Map<K, V> map) {
+    EnumBiMap<K, V> bimap = create(inferKeyType(map), inferValueType(map));
+    bimap.putAll(map);
+    return bimap;
+  }
+
+  private EnumBiMap(Class<K> keyType, Class<V> valueType) {
+    super(WellBehavedMap.wrap(new EnumMap<K, V>(keyType)),
+        WellBehavedMap.wrap(new EnumMap<V, K>(valueType)));
+    this.keyType = keyType;
+    this.valueType = valueType;
+  }
+
+  static <K extends Enum<K>> Class<K> inferKeyType(Map<K, ?> map) {
+    if (map instanceof EnumBiMap) {
+      return ((EnumBiMap<K, ?>) map).keyType();
+    }
+    if (map instanceof EnumHashBiMap) {
+      return ((EnumHashBiMap<K, ?>) map).keyType();
+    }
+    checkArgument(!map.isEmpty());
+    return map.keySet().iterator().next().getDeclaringClass();
+  }
+
+  private static <V extends Enum<V>> Class<V> inferValueType(Map<?, V> map) {
+    if (map instanceof EnumBiMap) {
+      return ((EnumBiMap<?, V>) map).valueType;
+    }
+    checkArgument(!map.isEmpty());
+    return map.values().iterator().next().getDeclaringClass();
+  }
+
+  /** Returns the associated key type. */
+  public Class<K> keyType() {
+    return keyType;
+  }
+
+  /** Returns the associated value type. */
+  public Class<V> valueType() {
+    return valueType;
+  }
+}
+
diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/EnumHashBiMap.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/EnumHashBiMap.java
new file mode 100644
index 0000000..dce8d66
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/EnumHashBiMap.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.EnumMap;
+import java.util.Map;
+
+import javax.annotation.Nullable;
+
+/**
+ * A {@code BiMap} backed by an {@code EnumMap} instance for keys-to-values, and
+ * a {@code HashMap} instance for values-to-keys. Null keys are not permitted,
+ * but null values are. An {@code EnumHashBiMap} and its inverse are both
+ * serializable.
+ *
+ * @author Mike Bostock
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible(emulated = true)
+public final class EnumHashBiMap<K extends Enum<K>, V>
+    extends AbstractBiMap<K, V> {
+  private transient Class<K> keyType;
+
+  /**
+   * Returns a new, empty {@code EnumHashBiMap} using the specified key type.
+   *
+   * @param keyType the key type
+   */
+  public static <K extends Enum<K>, V> EnumHashBiMap<K, V>
+      create(Class<K> keyType) {
+    return new EnumHashBiMap<K, V>(keyType);
+  }
+
+  /**
+   * Constructs a new bimap with the same mappings as the specified map. If the
+   * specified map is an {@code EnumHashBiMap} or an {@link EnumBiMap}, the new
+   * bimap has the same key type as the input bimap. Otherwise, the specified
+   * map must contain at least one mapping, in order to determine the key type.
+   *
+   * @param map the map whose mappings are to be placed in this map
+   * @throws IllegalArgumentException if map is not an {@code EnumBiMap} or an
+   *     {@code EnumHashBiMap} instance and contains no mappings
+   */
+  public static <K extends Enum<K>, V> EnumHashBiMap<K, V>
+      create(Map<K, ? extends V> map) {
+    EnumHashBiMap<K, V> bimap = create(EnumBiMap.inferKeyType(map));
+    bimap.putAll(map);
+    return bimap;
+  }
+
+  private EnumHashBiMap(Class<K> keyType) {
+    super(WellBehavedMap.wrap(
+        new EnumMap<K, V>(keyType)),
+        Maps.<V, K>newHashMapWithExpectedSize(
+            keyType.getEnumConstants().length));
+    this.keyType = keyType;
+  }
+
+  // Overriding these two methods to show that values may be null (but not keys)
+
+  @Override public V put(K key, @Nullable V value) {
+    return super.put(key, value);
+  }
+
+  @Override public V forcePut(K key, @Nullable V value) {
+    return super.forcePut(key, value);
+  }
+
+  /** Returns the associated key type. */
+  public Class<K> keyType() {
+    return keyType;
+  }
+}
+
diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/EnumMultiset.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/EnumMultiset.java
new file mode 100644
index 0000000..589706b
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/EnumMultiset.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkArgument;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.EnumMap;
+import java.util.Iterator;
+
+/**
+ * Multiset implementation backed by an {@link EnumMap}.
+ *
+ * @author Jared Levy
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible(emulated = true)
+public final class EnumMultiset<E extends Enum<E>> extends AbstractMapBasedMultiset<E> {
+  /** Creates an empty {@code EnumMultiset}. */
+  public static <E extends Enum<E>> EnumMultiset<E> create(Class<E> type) {
+    return new EnumMultiset<E>(type);
+  }
+
+  /**
+   * Creates a new {@code EnumMultiset} containing the specified elements.
+   *
+   * <p>This implementation is highly efficient when {@code elements} is itself a {@link
+   * Multiset}.
+   *
+   * @param elements the elements that the multiset should contain
+   * @throws IllegalArgumentException if {@code elements} is empty
+   */
+  public static <E extends Enum<E>> EnumMultiset<E> create(Iterable<E> elements) {
+    Iterator<E> iterator = elements.iterator();
+    checkArgument(iterator.hasNext(), "EnumMultiset constructor passed empty Iterable");
+    EnumMultiset<E> multiset = new EnumMultiset<E>(iterator.next().getDeclaringClass());
+    Iterables.addAll(multiset, elements);
+    return multiset;
+  }
+
+  private transient Class<E> type;
+
+  /** Creates an empty {@code EnumMultiset}. */
+  private EnumMultiset(Class<E> type) {
+    super(WellBehavedMap.wrap(new EnumMap<E, Count>(type)));
+    this.type = type;
+  }
+}
+
diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ForwardingImmutableCollection.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ForwardingImmutableCollection.java
new file mode 100644
index 0000000..069293e
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ForwardingImmutableCollection.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import java.util.Collection;
+
+import javax.annotation.Nullable;
+
+/**
+ * A GWT-only class only used by GWT emulations.  It is used to consolidate the
+ * definitions of method delegation to save code size.
+ *
+ * @author Hayward Chan
+ */
+// TODO: Make this class GWT serializable.
+class ForwardingImmutableCollection<E> extends ImmutableCollection<E> {
+
+  transient final Collection<E> delegate;
+
+  ForwardingImmutableCollection(Collection<E> delegate) {
+    this.delegate = delegate;
+  }
+
+  @Override public UnmodifiableIterator<E> iterator() {
+    return Iterators.unmodifiableIterator(delegate.iterator());
+  }
+
+  @Override public boolean contains(@Nullable Object object) {
+    return object != null && delegate.contains(object);
+  }
+
+  @Override public boolean containsAll(Collection<?> targets) {
+    return delegate.containsAll(targets);
+  }
+
+  public int size() {
+    return delegate.size();
+  }
+
+  @Override public boolean isEmpty() {
+    return delegate.isEmpty();
+  }
+
+  @Override public Object[] toArray() {
+    return delegate.toArray();
+  }
+
+  @Override public <T> T[] toArray(T[] other) {
+    return delegate.toArray(other);
+  }
+
+  @Override public String toString() {
+    return delegate.toString();
+  }
+}
diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/GenericMapMaker.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/GenericMapMaker.java
new file mode 100644
index 0000000..b75f4bf
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/GenericMapMaker.java
@@ -0,0 +1,97 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Function;
+
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * A class exactly like {@link MapMaker}, except restricted in the types of maps it can build.
+ * For the most part, you should probably just ignore the existence of this class.
+ *
+ * @param <K0> the base type for all key types of maps built by this map maker
+ * @param <V0> the base type for all value types of maps built by this map maker
+ * @author Kevin Bourrillion
+ * @since 7.0
+ */
+@Beta
+@GwtCompatible(emulated = true)
+public abstract class GenericMapMaker<K0, V0> {
+
+  // Set by MapMaker, but sits in this class to preserve the type relationship
+
+  // No subclasses but our own
+  GenericMapMaker() {}
+
+  /**
+   * See {@link MapMaker#initialCapacity}.
+   */
+  public abstract GenericMapMaker<K0, V0> initialCapacity(int initialCapacity);
+
+  /**
+   * See {@link MapMaker#maximumSize}.
+   */
+  abstract GenericMapMaker<K0, V0> maximumSize(int maximumSize);
+
+  /**
+   * See {@link MapMaker#strongKeys}.
+   */
+  abstract GenericMapMaker<K0, V0> strongKeys();
+
+  /**
+   * See {@link MapMaker#concurrencyLevel}.
+   */
+  public abstract GenericMapMaker<K0, V0> concurrencyLevel(int concurrencyLevel);
+
+  /**
+   * See {@link MapMaker#strongValues}.
+   */
+  abstract GenericMapMaker<K0, V0> strongValues();
+
+  /**
+   * See {@link MapMaker#expiration}.
+   */
+  @Deprecated
+  public
+  abstract GenericMapMaker<K0, V0> expiration(long duration, TimeUnit unit);
+
+  /**
+   * See {@link MapMaker#expireAfterWrite}.
+   */
+  abstract GenericMapMaker<K0, V0> expireAfterWrite(long duration, TimeUnit unit);
+
+  /*
+   * Note that MapMaker's removalListener() is not here, because once you're interacting with a
+   * GenericMapMaker you've already called that, and shouldn't be calling it again.
+   */
+
+  /**
+   * See {@link MapMaker#makeMap}.
+   */
+  public abstract <K extends K0, V extends V0> ConcurrentMap<K, V> makeMap();
+
+  /**
+   * See {@link MapMaker#makeComputingMap}.
+   */
+  @Deprecated
+  public abstract <K extends K0, V extends V0> ConcurrentMap<K, V> makeComputingMap(
+      Function<? super K, ? extends V> computingFunction);
+}
diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/GwtPlatform.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/GwtPlatform.java
new file mode 100644
index 0000000..6bde491
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/GwtPlatform.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.gwt.core.client.GwtScriptOnly;
+import com.google.gwt.lang.Array;
+
+/**
+ * Version of {@link GwtPlatform} used in web-mode.  It includes methods in
+ * {@link Platform} that requires different implementions in web mode and
+ * hosted mode.  It is factored out from {@link Platform} because <code>
+ * {@literal @}GwtScriptOnly</code> only supports public classes and methods.
+ *
+ * @author Hayward Chan
+ */
+@GwtCompatible
+@GwtScriptOnly
+public final class GwtPlatform {
+
+  private GwtPlatform() {}
+  
+  public static <T> T[] clone(T[] array) {
+    return (T[]) Array.clone(array);
+  }
+
+  public static <T> T[] newArray(T[] reference, int length) {
+    return Array.createFrom(reference, length);
+  }
+}
diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/HashBiMap.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/HashBiMap.java
new file mode 100644
index 0000000..15c3f9e
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/HashBiMap.java
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.annotation.Nullable;
+
+/**
+ * A {@link BiMap} backed by two {@link HashMap} instances. This implementation
+ * allows null keys and values. A {@code HashBiMap} and its inverse are both
+ * serializable.
+ *
+ * @author Mike Bostock
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible(emulated = true)
+public final class HashBiMap<K, V> extends AbstractBiMap<K, V> {
+
+  /**
+   * Returns a new, empty {@code HashBiMap} with the default initial capacity
+   * (16).
+   */
+  public static <K, V> HashBiMap<K, V> create() {
+    return new HashBiMap<K, V>();
+  }
+
+  /**
+   * Constructs a new, empty bimap with the specified expected size.
+   *
+   * @param expectedSize the expected number of entries
+   * @throws IllegalArgumentException if the specified expected size is
+   *     negative
+   */
+  public static <K, V> HashBiMap<K, V> create(int expectedSize) {
+    return new HashBiMap<K, V>(expectedSize);
+  }
+
+  /**
+   * Constructs a new bimap containing initial values from {@code map}. The
+   * bimap is created with an initial capacity sufficient to hold the mappings
+   * in the specified map.
+   */
+  public static <K, V> HashBiMap<K, V> create(
+      Map<? extends K, ? extends V> map) {
+    HashBiMap<K, V> bimap = create(map.size());
+    bimap.putAll(map);
+    return bimap;
+  }
+
+  private HashBiMap() {
+    super(new HashMap<K, V>(), new HashMap<V, K>());
+  }
+
+  private HashBiMap(int expectedSize) {
+    super(
+        Maps.<K, V>newHashMapWithExpectedSize(expectedSize),
+        Maps.<V, K>newHashMapWithExpectedSize(expectedSize));
+  }
+
+  // Override these two methods to show that keys and values may be null
+
+  @Override public V put(@Nullable K key, @Nullable V value) {
+    return super.put(key, value);
+  }
+
+  @Override public V forcePut(@Nullable K key, @Nullable V value) {
+    return super.forcePut(key, value);
+  }
+}
+
diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/HashMultimap.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/HashMultimap.java
new file mode 100644
index 0000000..55ecd46
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/HashMultimap.java
@@ -0,0 +1,112 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Preconditions;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Set;
+
+/**
+ * Implementation of {@link Multimap} using hash tables.
+ *
+ * <p>The multimap does not store duplicate key-value pairs. Adding a new
+ * key-value pair equal to an existing key-value pair has no effect.
+ *
+ * <p>Keys and values may be null. All optional multimap methods are supported,
+ * and all returned views are modifiable.
+ *
+ * <p>This class is not threadsafe when any concurrent operations update the
+ * multimap. Concurrent read operations will work correctly. To allow concurrent
+ * update operations, wrap your multimap with a call to {@link
+ * Multimaps#synchronizedSetMultimap}.
+ *
+ * @author Jared Levy
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible(serializable = true, emulated = true)
+public final class HashMultimap<K, V> extends AbstractSetMultimap<K, V> {
+  private static final int DEFAULT_VALUES_PER_KEY = 8;
+
+  @VisibleForTesting
+  transient int expectedValuesPerKey = DEFAULT_VALUES_PER_KEY;
+
+  /**
+   * Creates a new, empty {@code HashMultimap} with the default initial
+   * capacities.
+   */
+  public static <K, V> HashMultimap<K, V> create() {
+    return new HashMultimap<K, V>();
+  }
+
+  /**
+   * Constructs an empty {@code HashMultimap} with enough capacity to hold the
+   * specified numbers of keys and values without rehashing.
+   *
+   * @param expectedKeys the expected number of distinct keys
+   * @param expectedValuesPerKey the expected average number of values per key
+   * @throws IllegalArgumentException if {@code expectedKeys} or {@code
+   *      expectedValuesPerKey} is negative
+   */
+  public static <K, V> HashMultimap<K, V> create(
+      int expectedKeys, int expectedValuesPerKey) {
+    return new HashMultimap<K, V>(expectedKeys, expectedValuesPerKey);
+  }
+
+  /**
+   * Constructs a {@code HashMultimap} with the same mappings as the specified
+   * multimap. If a key-value mapping appears multiple times in the input
+   * multimap, it only appears once in the constructed multimap.
+   *
+   * @param multimap the multimap whose contents are copied to this multimap
+   */
+  public static <K, V> HashMultimap<K, V> create(
+      Multimap<? extends K, ? extends V> multimap) {
+    return new HashMultimap<K, V>(multimap);
+  }
+
+  private HashMultimap() {
+    super(new HashMap<K, Collection<V>>());
+  }
+
+  private HashMultimap(int expectedKeys, int expectedValuesPerKey) {
+    super(Maps.<K, Collection<V>>newHashMapWithExpectedSize(expectedKeys));
+    Preconditions.checkArgument(expectedValuesPerKey >= 0);
+    this.expectedValuesPerKey = expectedValuesPerKey;
+  }
+
+  private HashMultimap(Multimap<? extends K, ? extends V> multimap) {
+    super(Maps.<K, Collection<V>>newHashMapWithExpectedSize(
+        multimap.keySet().size()));
+    putAll(multimap);
+  }
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>Creates an empty {@code HashSet} for a collection of values for one key.
+   *
+   * @return a new {@code HashSet} containing a collection of values for one key
+   */
+  @Override Set<V> createCollection() {
+    return Sets.<V>newHashSetWithExpectedSize(expectedValuesPerKey);
+  }
+}
+
diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/HashMultiset.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/HashMultiset.java
new file mode 100644
index 0000000..1ee2d8d
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/HashMultiset.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.HashMap;
+
+/**
+ * Multiset implementation backed by a {@link HashMap}.
+ *
+ * @author Kevin Bourrillion
+ * @author Jared Levy
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible(serializable = true, emulated = true)
+public final class HashMultiset<E> extends AbstractMapBasedMultiset<E> {
+
+  /**
+   * Creates a new, empty {@code HashMultiset} using the default initial
+   * capacity.
+   */
+  public static <E> HashMultiset<E> create() {
+    return new HashMultiset<E>();
+  }
+
+  /**
+   * Creates a new, empty {@code HashMultiset} with the specified expected
+   * number of distinct elements.
+   *
+   * @param distinctElements the expected number of distinct elements
+   * @throws IllegalArgumentException if {@code distinctElements} is negative
+   */
+  public static <E> HashMultiset<E> create(int distinctElements) {
+    return new HashMultiset<E>(distinctElements);
+  }
+
+  /**
+   * Creates a new {@code HashMultiset} containing the specified elements.
+   * 
+   * <p>This implementation is highly efficient when {@code elements} is itself
+   * a {@link Multiset}.
+   * 
+   * @param elements the elements that the multiset should contain
+   */
+  public static <E> HashMultiset<E> create(Iterable<? extends E> elements) {
+    HashMultiset<E> multiset =
+        create(Multisets.inferDistinctElements(elements));
+    Iterables.addAll(multiset, elements);
+    return multiset;
+  }
+
+  private HashMultiset() {
+    super(new HashMap<E, Count>());
+  }
+
+  private HashMultiset(int distinctElements) {
+    super(Maps.<E, Count>newHashMapWithExpectedSize(distinctElements));
+  }
+}
+
diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableAsList.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableAsList.java
new file mode 100644
index 0000000..a790487
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableAsList.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import java.util.List;
+
+/**
+ * GWT emulation of {@link ImmutableAsList}.
+ *
+ * @author Hayward Chan
+ */
+final class ImmutableAsList<E> extends RegularImmutableList<E> {
+  ImmutableAsList(List<E> delegate) {
+    super(delegate);
+  }
+}
diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableAsList_CustomFieldSerializer.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableAsList_CustomFieldSerializer.java
new file mode 100644
index 0000000..1712f5a
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableAsList_CustomFieldSerializer.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+import com.google.gwt.user.client.rpc.core.java.util.Collection_CustomFieldSerializerBase;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * This class implements the client-side GWT serialization of
+ * {@link ImmutableAsList}.
+ *
+ * @author Hayward Chan
+ */
+public class ImmutableAsList_CustomFieldSerializer {
+
+  public static void deserialize(SerializationStreamReader reader,
+      RegularImmutableList<?> instance) {
+  }
+
+  public static ImmutableAsList<Object> instantiate(
+      SerializationStreamReader reader) throws SerializationException {
+    List<Object> elements = new ArrayList<Object>();
+    Collection_CustomFieldSerializerBase.deserialize(reader, elements);
+    return new ImmutableAsList<Object>(elements);
+  }
+
+  public static void serialize(SerializationStreamWriter writer,
+      ImmutableAsList<?> instance) throws SerializationException {
+    Collection_CustomFieldSerializerBase.serialize(writer, instance);
+  }
+}
diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableBiMap.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableBiMap.java
new file mode 100644
index 0000000..59cb788
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableBiMap.java
@@ -0,0 +1,131 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import java.util.Collections;
+import java.util.Map;
+
+/**
+ * GWT emulation of {@link ImmutableBiMap}.
+ *
+ * @author Hayward Chan
+ */
+public abstract class ImmutableBiMap<K, V> extends ImmutableMap<K,V>
+    implements BiMap<K, V> {
+
+  private static final ImmutableBiMap<Object, Object> EMPTY_IMMUTABLE_BIMAP
+      = new EmptyBiMap();
+
+  // Casting to any type is safe because the set will never hold any elements.
+  @SuppressWarnings("unchecked")
+  public static <K, V> ImmutableBiMap<K, V> of() {
+    return (ImmutableBiMap<K, V>) EMPTY_IMMUTABLE_BIMAP;
+  }
+
+  public static <K, V> ImmutableBiMap<K, V> of(K k1, V v1) {
+    return new RegularImmutableBiMap<K, V>(ImmutableMap.of(k1, v1));
+  }
+
+  public static <K, V> ImmutableBiMap<K, V> of(K k1, V v1, K k2, V v2) {
+    return new RegularImmutableBiMap<K, V>(ImmutableMap.of(k1, v1, k2, v2));
+  }
+
+  public static <K, V> ImmutableBiMap<K, V> of(
+      K k1, V v1, K k2, V v2, K k3, V v3) {
+    return new RegularImmutableBiMap<K, V>(ImmutableMap.of(
+        k1, v1, k2, v2, k3, v3));
+  }
+
+  public static <K, V> ImmutableBiMap<K, V> of(
+      K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4) {
+    return new RegularImmutableBiMap<K, V>(ImmutableMap.of(
+        k1, v1, k2, v2, k3, v3, k4, v4));
+  }
+
+  public static <K, V> ImmutableBiMap<K, V> of(
+      K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5) {
+    return new RegularImmutableBiMap<K, V>(ImmutableMap.of(
+        k1, v1, k2, v2, k3, v3, k4, v4, k5, v5));
+  }
+
+  public static <K, V> Builder<K, V> builder() {
+    return new Builder<K, V>();
+  }
+
+  public static final class Builder<K, V> extends ImmutableMap.Builder<K, V> {
+
+    public Builder() {}
+
+    @Override public Builder<K, V> put(K key, V value) {
+      super.put(key, value);
+      return this;
+    }
+
+    @Override public Builder<K, V> putAll(Map<? extends K, ? extends V> map) {
+      super.putAll(map);
+      return this;
+    }
+
+    @Override public ImmutableBiMap<K, V> build() {
+      ImmutableMap<K, V> map = super.build();
+      if (map.isEmpty()) {
+        return of();
+      }
+      return new RegularImmutableBiMap<K, V>(super.build());
+    }
+  }
+
+  public static <K, V> ImmutableBiMap<K, V> copyOf(
+      Map<? extends K, ? extends V> map) {
+    if (map instanceof ImmutableBiMap) {
+      @SuppressWarnings("unchecked") // safe since map is not writable
+      ImmutableBiMap<K, V> bimap = (ImmutableBiMap<K, V>) map;
+      return bimap;
+    }
+
+    if (map.isEmpty()) {
+      return of();
+    }
+
+    ImmutableMap<K, V> immutableMap = ImmutableMap.copyOf(map);
+    return new RegularImmutableBiMap<K, V>(immutableMap);
+  }
+
+  ImmutableBiMap(Map<K, V> delegate) {
+    super(delegate);
+  }
+
+  public abstract ImmutableBiMap<V, K> inverse();
+
+  @Override public ImmutableSet<V> values() {
+    return inverse().keySet();
+  }
+
+  public final V forcePut(K key, V value) {
+    throw new UnsupportedOperationException();
+  }
+
+  @SuppressWarnings("serial")
+  static class EmptyBiMap extends ImmutableBiMap<Object, Object> {
+    EmptyBiMap() {
+      super(Collections.emptyMap());
+    }
+    @Override public ImmutableBiMap<Object, Object> inverse() {
+      return this;
+    }
+  }
+}
diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableCollection.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableCollection.java
new file mode 100644
index 0000000..04bd060
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableCollection.java
@@ -0,0 +1,173 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import java.io.Serializable;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+
+import javax.annotation.Nullable;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+/**
+ * GWT emulated version of {@link ImmutableCollection}.
+ *
+ * @author Jesse Wilson
+ */
+@SuppressWarnings("serial") // we're overriding default serialization
+public abstract class ImmutableCollection<E>
+    implements Collection<E>, Serializable {
+
+  static final ImmutableCollection<Object> EMPTY_IMMUTABLE_COLLECTION
+      = new ForwardingImmutableCollection<Object>(Collections.emptyList());
+
+  ImmutableCollection() {}
+
+  public abstract UnmodifiableIterator<E> iterator();
+
+  public Object[] toArray() {
+    Object[] newArray = new Object[size()];
+    return toArray(newArray);
+  }
+
+  public <T> T[] toArray(T[] other) {
+    int size = size();
+    if (other.length < size) {
+      other = ObjectArrays.newArray(other, size);
+    } else if (other.length > size) {
+      other[size] = null;
+    }
+
+    // Writes will produce ArrayStoreException when the toArray() doc requires.
+    Object[] otherAsObjectArray = other;
+    int index = 0;
+    for (E element : this) {
+      otherAsObjectArray[index++] = element;
+    }
+    return other;
+  }
+
+  public boolean contains(@Nullable Object object) {
+    if (object == null) {
+      return false;
+    }
+    for (E element : this) {
+      if (element.equals(object)) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  public boolean containsAll(Collection<?> targets) {
+    for (Object target : targets) {
+      if (!contains(target)) {
+        return false;
+      }
+    }
+    return true;
+  }
+
+  public boolean isEmpty() {
+    return size() == 0;
+  }
+
+  public final boolean add(E e) {
+    throw new UnsupportedOperationException();
+  }
+
+  public final boolean remove(Object object) {
+    throw new UnsupportedOperationException();
+  }
+
+  public final boolean addAll(Collection<? extends E> newElements) {
+    throw new UnsupportedOperationException();
+  }
+
+  public final boolean removeAll(Collection<?> oldElements) {
+    throw new UnsupportedOperationException();
+  }
+
+  public final boolean retainAll(Collection<?> elementsToKeep) {
+    throw new UnsupportedOperationException();
+  }
+
+  public final void clear() {
+    throw new UnsupportedOperationException();
+  }
+
+  private transient ImmutableList<E> asList;
+
+  public ImmutableList<E> asList() {
+    ImmutableList<E> list = asList;
+    return (list == null) ? (asList = createAsList()) : list;
+  }
+
+  ImmutableList<E> createAsList() {
+    switch (size()) {
+      case 0:
+        return ImmutableList.of();
+      case 1:
+        return ImmutableList.of(iterator().next());
+      default:
+        @SuppressWarnings("unchecked")
+        E[] castedArray = (E[]) toArray();
+        return new ImmutableAsList<E>(Arrays.asList(castedArray));
+    }
+  }
+  static <E> ImmutableCollection<E> unsafeDelegate(Collection<E> delegate) {
+    return new ForwardingImmutableCollection<E>(delegate);
+  }
+  
+  boolean isPartialView(){
+    return false;
+  }
+
+  abstract static class Builder<E> {
+
+    public abstract Builder<E> add(E element);
+
+    public Builder<E> add(E... elements) {
+      checkNotNull(elements); // for GWT
+      for (E element : elements) {
+        add(checkNotNull(element));
+      }
+      return this;
+    }
+
+    public Builder<E> addAll(Iterable<? extends E> elements) {
+      checkNotNull(elements); // for GWT
+      for (E element : elements) {
+        add(checkNotNull(element));
+      }
+      return this;
+    }
+
+    public Builder<E> addAll(Iterator<? extends E> elements) {
+      checkNotNull(elements); // for GWT
+      while (elements.hasNext()) {
+        add(checkNotNull(elements.next()));
+      }
+      return this;
+    }
+
+    public abstract ImmutableCollection<E> build();
+  }
+}
diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableEnumSet.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableEnumSet.java
new file mode 100644
index 0000000..14506c2
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableEnumSet.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import java.util.Set;
+
+/**
+ * GWT emulation of {@link ImmutableEnumSet}.  The type parameter is not bounded
+ * by {@code Enum<E>} to avoid code-size bloat.
+ *
+ * @author Hayward Chan
+ */
+final class ImmutableEnumSet<E> extends ImmutableSet<E> {
+  public ImmutableEnumSet(Set<E> delegate) {
+    super(delegate);
+  }
+}
diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableList.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableList.java
new file mode 100644
index 0000000..db67daa
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableList.java
@@ -0,0 +1,318 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.collect.Lists;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.RandomAccess;
+
+import javax.annotation.Nullable;
+
+/**
+ * GWT emulated version of {@link ImmutableList}.
+ *
+ * @author Hayward Chan
+ */
+@SuppressWarnings("serial") // we're overriding default serialization
+public abstract class ImmutableList<E> extends ForwardingImmutableCollection<E>
+    implements List<E>, RandomAccess {
+  
+  private transient final List<E> delegate;
+
+  ImmutableList(List<E> delegate) {
+    super(delegate);
+    this.delegate = Collections.unmodifiableList(delegate);
+  }
+
+  ImmutableList() {
+    this(Collections.<E>emptyList());
+  }
+
+  // Casting to any type is safe because the list will never hold any elements.
+  @SuppressWarnings("unchecked")
+  public static <E> ImmutableList<E> of() {
+    return (ImmutableList<E>) EmptyImmutableList.INSTANCE;
+  }
+
+  public static <E> ImmutableList<E> of(E element) {
+    return new SingletonImmutableList<E>(element);
+  }
+
+  public static <E> ImmutableList<E> of(E e1, E e2) {
+    return new RegularImmutableList<E>(
+        ImmutableList.<E>nullCheckedList(e1, e2));
+  }
+
+  public static <E> ImmutableList<E> of(E e1, E e2, E e3) {
+    return new RegularImmutableList<E>(
+        ImmutableList.<E>nullCheckedList(e1, e2, e3));
+  }
+
+  public static <E> ImmutableList<E> of(E e1, E e2, E e3, E e4) {
+    return new RegularImmutableList<E>(
+        ImmutableList.<E>nullCheckedList(e1, e2, e3, e4));
+  }
+
+  public static <E> ImmutableList<E> of(E e1, E e2, E e3, E e4, E e5) {
+    return new RegularImmutableList<E>(
+        ImmutableList.<E>nullCheckedList(e1, e2, e3, e4, e5));
+  }
+
+  public static <E> ImmutableList<E> of(E e1, E e2, E e3, E e4, E e5, E e6) {
+    return new RegularImmutableList<E>(
+        ImmutableList.<E>nullCheckedList(e1, e2, e3, e4, e5, e6));
+  }
+
+  public static <E> ImmutableList<E> of(
+      E e1, E e2, E e3, E e4, E e5, E e6, E e7) {
+    return new RegularImmutableList<E>(
+         ImmutableList.<E>nullCheckedList(e1, e2, e3, e4, e5, e6, e7));
+  }
+
+  public static <E> ImmutableList<E> of(
+      E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8) {
+    return new RegularImmutableList<E>(
+         ImmutableList.<E>nullCheckedList(e1, e2, e3, e4, e5, e6, e7, e8));
+  }
+
+  public static <E> ImmutableList<E> of(
+      E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9) {
+    return new RegularImmutableList<E>(
+         ImmutableList.<E>nullCheckedList(e1, e2, e3, e4, e5, e6, e7, e8, e9));
+  }
+
+  public static <E> ImmutableList<E> of(
+      E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9, E e10) {
+    return new RegularImmutableList<E>(ImmutableList.<E>nullCheckedList(
+        e1, e2, e3, e4, e5, e6, e7, e8, e9, e10));
+  }
+
+  public static <E> ImmutableList<E> of(
+      E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9, E e10, E e11) {
+    return new RegularImmutableList<E>(ImmutableList.<E>nullCheckedList(
+        e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11));
+  }
+
+  public static <E> ImmutableList<E> of(
+      E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9, E e10, E e11,
+      E e12, E... others) {
+    final int paramCount = 12;
+    Object[] array = new Object[paramCount + others.length];
+    arrayCopy(array, 0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12);
+    arrayCopy(array, paramCount, others);
+    return new RegularImmutableList<E>(ImmutableList.<E>nullCheckedList(array));
+  }
+
+  public static <E> ImmutableList<E> of(E[] elements) {
+    checkNotNull(elements); // for GWT
+    switch (elements.length) {
+      case 0:
+        return ImmutableList.of();
+      case 1:
+        return new SingletonImmutableList<E>(elements[0]);
+      default:
+        return new RegularImmutableList<E>(
+            ImmutableList.<E>nullCheckedList(elements));
+    }
+  }
+
+  private static void arrayCopy(Object[] dest, int pos, Object... source) {
+    System.arraycopy(source, 0, dest, pos, source.length);
+  }
+
+  public static <E> ImmutableList<E> copyOf(Iterable<? extends E> elements) {
+    checkNotNull(elements); // for GWT
+    return (elements instanceof Collection)
+        ? copyOf((Collection<? extends E>) elements)
+        : copyOf(elements.iterator());
+  }
+
+  public static <E> ImmutableList<E> copyOf(Iterator<? extends E> elements) {
+    return copyFromCollection(Lists.newArrayList(elements));
+  }
+
+  public static <E> ImmutableList<E> copyOf(Collection<? extends E> elements) {
+    if (elements instanceof ImmutableCollection) {
+      /*
+       * TODO: When given an ImmutableList that's a sublist, copy the referenced
+       * portion of the array into a new array to save space?
+       */
+      @SuppressWarnings("unchecked") // all supported methods are covariant
+      ImmutableCollection<E> list = (ImmutableCollection<E>) elements;
+      return list.asList();
+    }
+    return copyFromCollection(elements);
+  }
+
+  public static <E> ImmutableList<E> copyOf(E[] elements) {
+    checkNotNull(elements); // eager for GWT
+    return copyOf(Arrays.asList(elements));
+  }
+
+  private static <E> ImmutableList<E> copyFromCollection(
+      Collection<? extends E> collection) {
+    Object[] elements = collection.toArray();
+    switch (elements.length) {
+      case 0:
+        return of();
+      case 1:
+        @SuppressWarnings("unchecked") // collection had only Es in it
+        ImmutableList<E> list = new SingletonImmutableList<E>((E) elements[0]);
+        return list;
+      default:
+        return new RegularImmutableList<E>(ImmutableList.<E>nullCheckedList(elements));
+    }
+  }
+
+  // Factory method that skips the null checks.  Used only when the elements
+  // are guaranteed to be null.
+  static <E> ImmutableList<E> unsafeDelegateList(List<? extends E> list) {
+    switch (list.size()) {
+      case 0:
+        return of();
+      case 1:
+        return new SingletonImmutableList<E>(list.iterator().next());
+      default:
+        @SuppressWarnings("unchecked")
+        List<E> castedList = (List<E>) list;
+        return new RegularImmutableList<E>(castedList);
+    }
+  }
+
+  static <E> ImmutableList<E> backedBy(E[] elements) {
+    return unsafeDelegateList(Arrays.asList(elements));
+  }
+
+  private static <E> List<E> nullCheckedList(Object... array) {
+    for (int i = 0, len = array.length; i < len; i++) {
+      if (array[i] == null) {
+        throw new NullPointerException("at index " + i);
+      }
+    }
+    @SuppressWarnings("unchecked")
+    E[] castedArray = (E[]) array;
+    return Arrays.asList(castedArray);
+  }
+
+  public int indexOf(@Nullable Object object) {
+    return delegate.indexOf(object);
+  }
+
+  public int lastIndexOf(@Nullable Object object) {
+    return delegate.lastIndexOf(object);
+  }
+
+  public final boolean addAll(int index, Collection<? extends E> newElements) {
+    throw new UnsupportedOperationException();
+  }
+
+  public final E set(int index, E element) {
+    throw new UnsupportedOperationException();
+  }
+
+  public final void add(int index, E element) {
+    throw new UnsupportedOperationException();
+  }
+
+  public final E remove(int index) {
+    throw new UnsupportedOperationException();
+  }
+
+  public E get(int index) {
+    return delegate.get(index);
+  }
+
+  public ImmutableList<E> subList(int fromIndex, int toIndex) {
+    return unsafeDelegateList(delegate.subList(fromIndex, toIndex));
+  }
+
+  public ListIterator<E> listIterator() {
+    return delegate.listIterator();
+  }
+
+  public ListIterator<E> listIterator(int index) {
+    return delegate.listIterator(index);
+  }
+
+  @Override public ImmutableList<E> asList() {
+    return this;
+  }
+  
+  public ImmutableList<E> reverse(){
+    List<E> list = Lists.newArrayList(this);
+    Collections.reverse(list);
+    return unsafeDelegateList(list);
+  }
+
+  @Override public Object[] toArray() {
+    // Note that ArrayList.toArray() doesn't work here because it returns E[]
+    // instead of Object[].
+    return delegate.toArray(new Object[size()]);
+  }
+
+  @Override public boolean equals(Object obj) {
+    return delegate.equals(obj);
+  }
+
+  @Override public int hashCode() {
+    return delegate.hashCode();
+  }
+
+  public static <E> Builder<E> builder() {
+    return new Builder<E>();
+  }
+
+  public static final class Builder<E> extends ImmutableCollection.Builder<E> {
+    private final ArrayList<E> contents = Lists.newArrayList();
+
+    public Builder() {}
+
+    @Override public Builder<E> add(E element) {
+      contents.add(checkNotNull(element));
+      return this;
+    }
+
+    @Override public Builder<E> addAll(Iterable<? extends E> elements) {
+      super.addAll(elements);
+      return this;
+    }
+
+    @Override public Builder<E> add(E... elements) {
+      checkNotNull(elements);  // for GWT
+      super.add(elements);
+      return this;
+    }
+
+    @Override public Builder<E> addAll(Iterator<? extends E> elements) {
+      super.addAll(elements);
+      return this;
+    }
+
+    @Override public ImmutableList<E> build() {
+      return copyOf(contents);
+    }
+  }
+}
diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableListMultimap.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableListMultimap.java
new file mode 100644
index 0000000..fe445d9
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableListMultimap.java
@@ -0,0 +1,326 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.Map.Entry;
+
+import javax.annotation.Nullable;
+
+/**
+ * An immutable {@link ListMultimap} with reliable user-specified key and value
+ * iteration order. Does not permit null keys or values.
+ *
+ * <p>Unlike {@link Multimaps#unmodifiableListMultimap(ListMultimap)}, which is
+ * a <i>view</i> of a separate multimap which can still change, an instance of
+ * {@code ImmutableListMultimap} contains its own data and will <i>never</i>
+ * change. {@code ImmutableListMultimap} is convenient for
+ * {@code public static final} multimaps ("constant multimaps") and also lets
+ * you easily make a "defensive copy" of a multimap provided to your class by
+ * a caller.
+ *
+ * <p><b>Note:</b> Although this class is not final, it cannot be subclassed as
+ * it has no public or protected constructors. Thus, instances of this class
+ * are guaranteed to be immutable.
+ *
+ * @author Jared Levy
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible(serializable = true, emulated = true)
+public class ImmutableListMultimap<K, V>
+    extends ImmutableMultimap<K, V>
+    implements ListMultimap<K, V> {
+
+  /** Returns the empty multimap. */
+  // Casting is safe because the multimap will never hold any elements.
+  @SuppressWarnings("unchecked")
+  public static <K, V> ImmutableListMultimap<K, V> of() {
+    return (ImmutableListMultimap<K, V>) EmptyImmutableListMultimap.INSTANCE;
+  }
+
+  /**
+   * Returns an immutable multimap containing a single entry.
+   */
+  public static <K, V> ImmutableListMultimap<K, V> of(K k1, V v1) {
+    ImmutableListMultimap.Builder<K, V> builder
+        = ImmutableListMultimap.builder();
+    builder.put(k1, v1);
+    return builder.build();
+  }
+
+  /**
+   * Returns an immutable multimap containing the given entries, in order.
+   */
+  public static <K, V> ImmutableListMultimap<K, V> of(K k1, V v1, K k2, V v2) {
+    ImmutableListMultimap.Builder<K, V> builder
+        = ImmutableListMultimap.builder();
+    builder.put(k1, v1);
+    builder.put(k2, v2);
+    return builder.build();
+  }
+
+  /**
+   * Returns an immutable multimap containing the given entries, in order.
+   */
+  public static <K, V> ImmutableListMultimap<K, V> of(
+      K k1, V v1, K k2, V v2, K k3, V v3) {
+    ImmutableListMultimap.Builder<K, V> builder
+        = ImmutableListMultimap.builder();
+    builder.put(k1, v1);
+    builder.put(k2, v2);
+    builder.put(k3, v3);
+    return builder.build();
+  }
+
+  /**
+   * Returns an immutable multimap containing the given entries, in order.
+   */
+  public static <K, V> ImmutableListMultimap<K, V> of(
+      K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4) {
+    ImmutableListMultimap.Builder<K, V> builder
+        = ImmutableListMultimap.builder();
+    builder.put(k1, v1);
+    builder.put(k2, v2);
+    builder.put(k3, v3);
+    builder.put(k4, v4);
+    return builder.build();
+  }
+
+  /**
+   * Returns an immutable multimap containing the given entries, in order.
+   */
+  public static <K, V> ImmutableListMultimap<K, V> of(
+      K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5) {
+    ImmutableListMultimap.Builder<K, V> builder
+        = ImmutableListMultimap.builder();
+    builder.put(k1, v1);
+    builder.put(k2, v2);
+    builder.put(k3, v3);
+    builder.put(k4, v4);
+    builder.put(k5, v5);
+    return builder.build();
+  }
+
+  // looking for of() with > 5 entries? Use the builder instead.
+
+  /**
+   * Returns a new builder. The generated builder is equivalent to the builder
+   * created by the {@link Builder} constructor.
+   */
+  public static <K, V> Builder<K, V> builder() {
+    return new Builder<K, V>();
+  }
+
+  /**
+   * A builder for creating immutable {@code ListMultimap} instances, especially
+   * {@code public static final} multimaps ("constant multimaps"). Example:
+   * <pre>   {@code
+   *
+   *   static final Multimap<String, Integer> STRING_TO_INTEGER_MULTIMAP =
+   *       new ImmutableListMultimap.Builder<String, Integer>()
+   *           .put("one", 1)
+   *           .putAll("several", 1, 2, 3)
+   *           .putAll("many", 1, 2, 3, 4, 5)
+   *           .build();}</pre>
+   *
+   * Builder instances can be reused; it is safe to call {@link #build} multiple
+   * times to build multiple multimaps in series. Each multimap contains the
+   * key-value mappings in the previously created multimaps.
+   *
+   * @since 2.0 (imported from Google Collections Library)
+   */
+  public static final class Builder<K, V>
+      extends ImmutableMultimap.Builder<K, V> {
+    /**
+     * Creates a new builder. The returned builder is equivalent to the builder
+     * generated by {@link ImmutableListMultimap#builder}.
+     */
+    public Builder() {}
+
+    @Override public Builder<K, V> put(K key, V value) {
+      super.put(key, value);
+      return this;
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * @since 11.0
+     */
+    @Override public Builder<K, V> put(
+        Entry<? extends K, ? extends V> entry) {
+      super.put(entry);
+      return this;
+    }
+
+    @Override public Builder<K, V> putAll(K key, Iterable<? extends V> values) {
+      super.putAll(key, values);
+      return this;
+    }
+
+    @Override public Builder<K, V> putAll(K key, V... values) {
+      super.putAll(key, values);
+      return this;
+    }
+
+    @Override public Builder<K, V> putAll(
+        Multimap<? extends K, ? extends V> multimap) {
+      super.putAll(multimap);
+      return this;
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * @since 8.0
+     */
+    @Beta @Override
+    public Builder<K, V> orderKeysBy(Comparator<? super K> keyComparator) {
+      super.orderKeysBy(keyComparator);
+      return this;
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * @since 8.0
+     */
+    @Beta @Override
+    public Builder<K, V> orderValuesBy(Comparator<? super V> valueComparator) {
+      super.orderValuesBy(valueComparator);
+      return this;
+    }
+
+    /**
+     * Returns a newly-created immutable list multimap.
+     */
+    @Override public ImmutableListMultimap<K, V> build() {
+      return (ImmutableListMultimap<K, V>) super.build();
+    }
+  }
+
+  /**
+   * Returns an immutable multimap containing the same mappings as {@code
+   * multimap}. The generated multimap's key and value orderings correspond to
+   * the iteration ordering of the {@code multimap.asMap()} view.
+   *
+   * <p>Despite the method name, this method attempts to avoid actually copying
+   * the data when it is safe to do so. The exact circumstances under which a
+   * copy will or will not be performed are undocumented and subject to change.
+   *
+   * @throws NullPointerException if any key or value in {@code multimap} is
+   *         null
+   */
+  public static <K, V> ImmutableListMultimap<K, V> copyOf(
+      Multimap<? extends K, ? extends V> multimap) {
+    if (multimap.isEmpty()) {
+      return of();
+    }
+
+    // TODO(user): copy ImmutableSetMultimap by using asList() on the sets
+    if (multimap instanceof ImmutableListMultimap) {
+      @SuppressWarnings("unchecked") // safe since multimap is not writable
+      ImmutableListMultimap<K, V> kvMultimap
+          = (ImmutableListMultimap<K, V>) multimap;
+      if (!kvMultimap.isPartialView()) {
+        return kvMultimap;
+      }
+    }
+
+    ImmutableMap.Builder<K, ImmutableList<V>> builder = ImmutableMap.builder();
+    int size = 0;
+
+    for (Entry<? extends K, ? extends Collection<? extends V>> entry
+        : multimap.asMap().entrySet()) {
+      ImmutableList<V> list = ImmutableList.copyOf(entry.getValue());
+      if (!list.isEmpty()) {
+        builder.put(entry.getKey(), list);
+        size += list.size();
+      }
+    }
+
+    return new ImmutableListMultimap<K, V>(builder.build(), size);
+  }
+
+  ImmutableListMultimap(ImmutableMap<K, ImmutableList<V>> map, int size) {
+    super(map, size);
+  }
+
+  // views
+
+  /**
+   * Returns an immutable list of the values for the given key.  If no mappings
+   * in the multimap have the provided key, an empty immutable list is
+   * returned. The values are in the same order as the parameters used to build
+   * this multimap.
+   */
+  @Override public ImmutableList<V> get(@Nullable K key) {
+    // This cast is safe as its type is known in constructor.
+    ImmutableList<V> list = (ImmutableList<V>) map.get(key);
+    return (list == null) ? ImmutableList.<V>of() : list;
+  }
+
+  private transient ImmutableListMultimap<V, K> inverse;
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>Because an inverse of a list multimap can contain multiple pairs with the same key and
+   * value, this method returns an {@code ImmutableListMultimap} rather than the
+   * {@code ImmutableMultimap} specified in the {@code ImmutableMultimap} class.
+   *
+   * @since 11
+   */
+  @Beta
+  public ImmutableListMultimap<V, K> inverse() {
+    ImmutableListMultimap<V, K> result = inverse;
+    return (result == null) ? (inverse = invert()) : result;
+  }
+
+  private ImmutableListMultimap<V, K> invert() {
+    Builder<V, K> builder = builder();
+    for (Entry<K, V> entry : entries()) {
+      builder.put(entry.getValue(), entry.getKey());
+    }
+    ImmutableListMultimap<V, K> invertedMultimap = builder.build();
+    invertedMultimap.inverse = this;
+    return invertedMultimap;
+  }
+
+  /**
+   * Guaranteed to throw an exception and leave the multimap unmodified.
+   *
+   * @throws UnsupportedOperationException always
+   */
+  @Override public ImmutableList<V> removeAll(Object key) {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * Guaranteed to throw an exception and leave the multimap unmodified.
+   *
+   * @throws UnsupportedOperationException always
+   */
+  @Override public ImmutableList<V> replaceValues(
+      K key, Iterable<? extends V> values) {
+    throw new UnsupportedOperationException();
+  }
+}
diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableMap.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableMap.java
new file mode 100644
index 0000000..84896b5
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableMap.java
@@ -0,0 +1,291 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.collect.Iterables.getOnlyElement;
+
+import java.io.Serializable;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * GWT emulation of {@link ImmutableMap}.  For non sorted maps, it is a thin
+ * wrapper around {@link java.util.Collections#emptyMap()}, {@link
+ * Collections#singletonMap(Object, Object)} and {@link java.util.LinkedHashMap}
+ * for empty, singleton and regular maps respectively.  For sorted maps, it's
+ * a thin wrapper around {@link java.util.TreeMap}.
+ *
+ * @see ImmutableSortedMap
+ *
+ * @author Hayward Chan
+ */
+public abstract class ImmutableMap<K, V> implements Map<K, V>, Serializable {
+  
+  private transient final Map<K, V> delegate;
+
+  ImmutableMap() {
+    this.delegate = Collections.emptyMap();
+  }
+
+  ImmutableMap(Map<? extends K, ? extends V> delegate) {
+    this.delegate = Collections.unmodifiableMap(delegate);
+  }
+
+  @SuppressWarnings("unchecked")
+  ImmutableMap(Entry<? extends K, ? extends V>... entries) {
+    Map<K, V> delegate = Maps.newLinkedHashMap();
+    for (Entry<? extends K, ? extends V> entry : entries) {
+      K key = checkNotNull(entry.getKey());
+      V previous = delegate.put(key, checkNotNull(entry.getValue()));
+      if (previous != null) {
+        throw new IllegalArgumentException("duplicate key: " + key);
+      }
+    }
+    this.delegate = Collections.unmodifiableMap(delegate);
+  }
+
+  // Casting to any type is safe because the set will never hold any elements.
+  @SuppressWarnings("unchecked")
+  public static <K, V> ImmutableMap<K, V> of() {
+    return (ImmutableMap<K, V>) EmptyImmutableMap.INSTANCE;
+  }
+
+  public static <K, V> ImmutableMap<K, V> of(K k1, V v1) {
+    return new SingletonImmutableMap<K, V>(
+        checkNotNull(k1), checkNotNull(v1));
+  }
+
+  public static <K, V> ImmutableMap<K, V> of(K k1, V v1, K k2, V v2) {
+    return new RegularImmutableMap<K, V>(entryOf(k1, v1), entryOf(k2, v2));
+  }
+
+  public static <K, V> ImmutableMap<K, V> of(
+      K k1, V v1, K k2, V v2, K k3, V v3) {
+    return new RegularImmutableMap<K, V>(
+        entryOf(k1, v1), entryOf(k2, v2), entryOf(k3, v3));
+  }
+
+  public static <K, V> ImmutableMap<K, V> of(
+      K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4) {
+    return new RegularImmutableMap<K, V>(
+        entryOf(k1, v1), entryOf(k2, v2), entryOf(k3, v3), entryOf(k4, v4));
+  }
+
+  public static <K, V> ImmutableMap<K, V> of(
+      K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5) {
+    return new RegularImmutableMap<K, V>(entryOf(k1, v1),
+        entryOf(k2, v2), entryOf(k3, v3), entryOf(k4, v4), entryOf(k5, v5));
+  }
+
+  // looking for of() with > 5 entries? Use the builder instead.
+
+  public static <K, V> Builder<K, V> builder() {
+    return new Builder<K, V>();
+  }
+
+  static <K, V> Entry<K, V> entryOf(K key, V value) {
+    return Maps.immutableEntry(checkNotNull(key), checkNotNull(value));
+  }
+
+  public static class Builder<K, V> {
+    final List<Entry<K, V>> entries = Lists.newArrayList();
+
+    public Builder() {}
+
+    public Builder<K, V> put(K key, V value) {
+      entries.add(entryOf(key, value));
+      return this;
+    }
+
+    public Builder<K, V> put(Entry<? extends K, ? extends V> entry) {
+      if (entry instanceof ImmutableEntry<?, ?>) {
+        checkNotNull(entry.getKey());
+        checkNotNull(entry.getValue());
+        @SuppressWarnings("unchecked") // all supported methods are covariant
+        Entry<K, V> immutableEntry = (Entry<K, V>) entry;
+        entries.add(immutableEntry);
+      } else {
+        entries.add(entryOf((K) entry.getKey(), (V) entry.getValue()));
+      }
+      return this;
+    }
+
+    public Builder<K, V> putAll(Map<? extends K, ? extends V> map) {
+      for (Entry<? extends K, ? extends V> entry : map.entrySet()) {
+        put(entry.getKey(), entry.getValue());
+      }
+      return this;
+    }
+
+    public ImmutableMap<K, V> build() {
+      return fromEntryList(entries);
+    }
+
+    private static <K, V> ImmutableMap<K, V> fromEntryList(
+        List<Entry<K, V>> entries) {
+      int size = entries.size();
+      switch (size) {
+        case 0:
+          return of();
+        case 1:
+          Entry<K, V> entry = getOnlyElement(entries);
+          return new SingletonImmutableMap<K, V>(
+              entry.getKey(), entry.getValue());
+        default:
+          @SuppressWarnings("unchecked")
+          Entry<K, V>[] entryArray
+              = entries.toArray(new Entry[entries.size()]);
+          return new RegularImmutableMap<K, V>(entryArray);
+      }
+    }
+  }
+
+  public static <K, V> ImmutableMap<K, V> copyOf(
+      Map<? extends K, ? extends V> map) {
+    if ((map instanceof ImmutableMap) && !(map instanceof ImmutableSortedMap)) {
+      @SuppressWarnings("unchecked") // safe since map is not writable
+      ImmutableMap<K, V> kvMap = (ImmutableMap<K, V>) map;
+      return kvMap;
+    }
+
+    int size = map.size();
+    switch (size) {
+      case 0:
+        return of();
+      case 1:
+        Entry<? extends K, ? extends V> entry
+            = getOnlyElement(map.entrySet());
+        return ImmutableMap.<K, V>of(entry.getKey(), entry.getValue());
+      default:
+        Map<K, V> orderPreservingCopy = Maps.newLinkedHashMap();
+        for (Entry<? extends K, ? extends V> e : map.entrySet()) {
+          orderPreservingCopy.put(
+              checkNotNull(e.getKey()), checkNotNull(e.getValue()));
+        }
+        return new RegularImmutableMap<K, V>(orderPreservingCopy);
+    }
+  }
+  
+  boolean isPartialView(){
+    return false;
+  }
+
+  public final V put(K k, V v) {
+    throw new UnsupportedOperationException();
+  }
+
+  public final V remove(Object o) {
+    throw new UnsupportedOperationException();
+  }
+
+  public final void putAll(Map<? extends K, ? extends V> map) {
+    throw new UnsupportedOperationException();
+  }
+
+  public final void clear() {
+    throw new UnsupportedOperationException();
+  }
+
+  public final boolean isEmpty() {
+    return delegate.isEmpty();
+  }
+
+  public final boolean containsKey(@Nullable Object key) {
+    return Maps.safeContainsKey(delegate, key);
+  }
+
+  public final boolean containsValue(@Nullable Object value) {
+    return delegate.containsValue(value);
+  }
+
+  public final V get(@Nullable Object key) {
+    return (key == null) ? null : Maps.safeGet(delegate, key);
+  }
+
+  private transient ImmutableSet<Entry<K, V>> cachedEntrySet = null;
+
+  public final ImmutableSet<Entry<K, V>> entrySet() {
+    if (cachedEntrySet != null) {
+      return cachedEntrySet;
+    }
+    return cachedEntrySet = ImmutableSet.unsafeDelegate(
+        new ForwardingSet<Entry<K, V>>() {
+          @Override protected Set<Entry<K, V>> delegate() {
+            return delegate.entrySet();
+          }
+          @Override public boolean contains(Object object) {
+            if (object instanceof Entry<?, ?>
+                && ((Entry<?, ?>) object).getKey() == null) {
+              return false;
+            }
+            try {
+              return super.contains(object);
+            } catch (ClassCastException e) {
+              return false;
+            }
+          }
+          @Override public <T> T[] toArray(T[] array) {
+            T[] result = super.toArray(array);
+            if (size() < result.length) {
+              // It works around a GWT bug where elements after last is not
+              // properly null'ed.
+              result[size()] = null;              
+            }
+            return result;
+          }
+        });
+  }
+
+  private transient ImmutableSet<K> cachedKeySet = null;
+
+  public ImmutableSet<K> keySet() {
+    if (cachedKeySet != null) {
+      return cachedKeySet;
+    }
+    return cachedKeySet = ImmutableSet.unsafeDelegate(delegate.keySet());
+  }
+
+  private transient ImmutableCollection<V> cachedValues = null;
+
+  public ImmutableCollection<V> values() {
+    if (cachedValues != null) {
+      return cachedValues;
+    }
+    return cachedValues = ImmutableCollection.unsafeDelegate(delegate.values());
+  }
+
+  public int size() {
+    return delegate.size();
+  }
+
+  @Override public boolean equals(@Nullable Object object) {
+    return delegate.equals(object);
+  }
+
+  @Override public int hashCode() {
+    return delegate.hashCode();
+  }
+
+  @Override public String toString() {
+    return delegate.toString();
+  }
+}
diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableMultimap.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableMultimap.java
new file mode 100644
index 0000000..a971129
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableMultimap.java
@@ -0,0 +1,619 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+
+import java.io.Serializable;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map.Entry;
+import java.util.TreeMap;
+
+import javax.annotation.Nullable;
+
+/**
+ * An immutable {@link Multimap}. Does not permit null keys or values.
+ *
+ * <p>Unlike {@link Multimaps#unmodifiableMultimap(Multimap)}, which is
+ * a <i>view</i> of a separate multimap which can still change, an instance of
+ * {@code ImmutableMultimap} contains its own data and will <i>never</i>
+ * change. {@code ImmutableMultimap} is convenient for
+ * {@code public static final} multimaps ("constant multimaps") and also lets
+ * you easily make a "defensive copy" of a multimap provided to your class by
+ * a caller.
+ *
+ * <p><b>Note:</b> Although this class is not final, it cannot be subclassed as
+ * it has no public or protected constructors. Thus, instances of this class
+ * are guaranteed to be immutable.
+ *
+ * <p>In addition to methods defined by {@link Multimap}, an {@link #inverse}
+ * method is also supported.
+ *
+ * @author Jared Levy
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible(emulated = true)
+// TODO(user): If BiMultimap graduates from labs, this class should implement it.
+public abstract class ImmutableMultimap<K, V>
+    implements Multimap<K, V>, Serializable {
+
+  /** Returns an empty multimap. */
+  public static <K, V> ImmutableMultimap<K, V> of() {
+    return ImmutableListMultimap.of();
+  }
+
+  /**
+   * Returns an immutable multimap containing a single entry.
+   */
+  public static <K, V> ImmutableMultimap<K, V> of(K k1, V v1) {
+    return ImmutableListMultimap.of(k1, v1);
+  }
+
+  /**
+   * Returns an immutable multimap containing the given entries, in order.
+   */
+  public static <K, V> ImmutableMultimap<K, V> of(K k1, V v1, K k2, V v2) {
+    return ImmutableListMultimap.of(k1, v1, k2, v2);
+  }
+
+  /**
+   * Returns an immutable multimap containing the given entries, in order.
+   */
+  public static <K, V> ImmutableMultimap<K, V> of(
+      K k1, V v1, K k2, V v2, K k3, V v3) {
+    return ImmutableListMultimap.of(k1, v1, k2, v2, k3, v3);
+  }
+
+  /**
+   * Returns an immutable multimap containing the given entries, in order.
+   */
+  public static <K, V> ImmutableMultimap<K, V> of(
+      K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4) {
+    return ImmutableListMultimap.of(k1, v1, k2, v2, k3, v3, k4, v4);
+  }
+
+  /**
+   * Returns an immutable multimap containing the given entries, in order.
+   */
+  public static <K, V> ImmutableMultimap<K, V> of(
+      K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5) {
+    return ImmutableListMultimap.of(k1, v1, k2, v2, k3, v3, k4, v4, k5, v5);
+  }
+
+  // looking for of() with > 5 entries? Use the builder instead.
+
+  /**
+   * Returns a new builder. The generated builder is equivalent to the builder
+   * created by the {@link Builder} constructor.
+   */
+  public static <K, V> Builder<K, V> builder() {
+    return new Builder<K, V>();
+  }
+
+  /**
+   * Multimap for {@link ImmutableMultimap.Builder} that maintains key and
+   * value orderings, allows duplicate values, and performs better than
+   * {@link LinkedListMultimap}.
+   */
+  private static class BuilderMultimap<K, V> extends AbstractMultimap<K, V> {
+    BuilderMultimap() {
+      super(new LinkedHashMap<K, Collection<V>>());
+    }
+    @Override Collection<V> createCollection() {
+      return Lists.newArrayList();
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  /**
+   * Multimap for {@link ImmutableMultimap.Builder} that sorts key and allows
+   * duplicate values,
+   */
+  private static class SortedKeyBuilderMultimap<K, V>
+      extends AbstractMultimap<K, V> {
+    SortedKeyBuilderMultimap(
+        Comparator<? super K> keyComparator, Multimap<K, V> multimap) {
+      super(new TreeMap<K, Collection<V>>(keyComparator));
+      putAll(multimap);
+    }
+    @Override Collection<V> createCollection() {
+      return Lists.newArrayList();
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  /**
+   * A builder for creating immutable multimap instances, especially
+   * {@code public static final} multimaps ("constant multimaps"). Example:
+   * <pre>   {@code
+   *
+   *   static final Multimap<String, Integer> STRING_TO_INTEGER_MULTIMAP =
+   *       new ImmutableMultimap.Builder<String, Integer>()
+   *           .put("one", 1)
+   *           .putAll("several", 1, 2, 3)
+   *           .putAll("many", 1, 2, 3, 4, 5)
+   *           .build();}</pre>
+   *
+   * Builder instances can be reused; it is safe to call {@link #build} multiple
+   * times to build multiple multimaps in series. Each multimap contains the
+   * key-value mappings in the previously created multimaps.
+   *
+   * @since 2.0 (imported from Google Collections Library)
+   */
+  public static class Builder<K, V> {
+    Multimap<K, V> builderMultimap = new BuilderMultimap<K, V>();
+    Comparator<? super V> valueComparator;
+
+    /**
+     * Creates a new builder. The returned builder is equivalent to the builder
+     * generated by {@link ImmutableMultimap#builder}.
+     */
+    public Builder() {}
+
+    /**
+     * Adds a key-value mapping to the built multimap.
+     */
+    public Builder<K, V> put(K key, V value) {
+      builderMultimap.put(checkNotNull(key), checkNotNull(value));
+      return this;
+    }
+
+    /**
+     * Adds an entry to the built multimap.
+     *
+     * @since 11.0
+     */
+    public Builder<K, V> put(Entry<? extends K, ? extends V> entry) {
+      builderMultimap.put(
+          checkNotNull(entry.getKey()), checkNotNull(entry.getValue()));
+      return this;
+    }
+
+    /**
+     * Stores a collection of values with the same key in the built multimap.
+     *
+     * @throws NullPointerException if {@code key}, {@code values}, or any
+     *     element in {@code values} is null. The builder is left in an invalid
+     *     state.
+     */
+    public Builder<K, V> putAll(K key, Iterable<? extends V> values) {
+      Collection<V> valueList = builderMultimap.get(checkNotNull(key));
+      for (V value : values) {
+        valueList.add(checkNotNull(value));
+      }
+      return this;
+    }
+
+    /**
+     * Stores an array of values with the same key in the built multimap.
+     *
+     * @throws NullPointerException if the key or any value is null. The builder
+     *     is left in an invalid state.
+     */
+    public Builder<K, V> putAll(K key, V... values) {
+      return putAll(key, Arrays.asList(values));
+    }
+
+    /**
+     * Stores another multimap's entries in the built multimap. The generated
+     * multimap's key and value orderings correspond to the iteration ordering
+     * of the {@code multimap.asMap()} view, with new keys and values following
+     * any existing keys and values.
+     *
+     * @throws NullPointerException if any key or value in {@code multimap} is
+     *     null. The builder is left in an invalid state.
+     */
+    public Builder<K, V> putAll(Multimap<? extends K, ? extends V> multimap) {
+      for (Entry<? extends K, ? extends Collection<? extends V>> entry
+          : multimap.asMap().entrySet()) {
+        putAll(entry.getKey(), entry.getValue());
+      }
+      return this;
+    }
+
+    /**
+     * Specifies the ordering of the generated multimap's keys.
+     *
+     * @since 8.0
+     */
+    @Beta
+    public Builder<K, V> orderKeysBy(Comparator<? super K> keyComparator) {
+      builderMultimap = new SortedKeyBuilderMultimap<K, V>(
+          checkNotNull(keyComparator), builderMultimap);
+      return this;
+    }
+
+    /**
+     * Specifies the ordering of the generated multimap's values for each key.
+     *
+     * @since 8.0
+     */
+    @Beta
+    public Builder<K, V> orderValuesBy(Comparator<? super V> valueComparator) {
+      this.valueComparator = checkNotNull(valueComparator);
+      return this;
+    }
+
+    /**
+     * Returns a newly-created immutable multimap.
+     */
+    public ImmutableMultimap<K, V> build() {
+      if (valueComparator != null) {
+        for (Collection<V> values : builderMultimap.asMap().values()) {
+          List<V> list = (List <V>) values;
+          Collections.sort(list, valueComparator);
+        }
+      }
+      return copyOf(builderMultimap);
+    }
+  }
+
+  /**
+   * Returns an immutable multimap containing the same mappings as {@code
+   * multimap}. The generated multimap's key and value orderings correspond to
+   * the iteration ordering of the {@code multimap.asMap()} view.
+   *
+   * <p>Despite the method name, this method attempts to avoid actually copying
+   * the data when it is safe to do so. The exact circumstances under which a
+   * copy will or will not be performed are undocumented and subject to change.
+   *
+   * @throws NullPointerException if any key or value in {@code multimap} is
+   *         null
+   */
+  public static <K, V> ImmutableMultimap<K, V> copyOf(
+      Multimap<? extends K, ? extends V> multimap) {
+    if (multimap instanceof ImmutableMultimap) {
+      @SuppressWarnings("unchecked") // safe since multimap is not writable
+      ImmutableMultimap<K, V> kvMultimap
+          = (ImmutableMultimap<K, V>) multimap;
+      if (!kvMultimap.isPartialView()) {
+        return kvMultimap;
+      }
+    }
+    return ImmutableListMultimap.copyOf(multimap);
+  }
+
+  final transient ImmutableMap<K, ? extends ImmutableCollection<V>> map;
+  final transient int size;
+
+  // These constants allow the deserialization code to set final fields. This
+  // holder class makes sure they are not initialized unless an instance is
+  // deserialized.
+
+  ImmutableMultimap(ImmutableMap<K, ? extends ImmutableCollection<V>> map,
+      int size) {
+    this.map = map;
+    this.size = size;
+  }
+
+  // mutators (not supported)
+
+  /**
+   * Guaranteed to throw an exception and leave the multimap unmodified.
+   *
+   * @throws UnsupportedOperationException always
+   */
+  @Override
+  public ImmutableCollection<V> removeAll(Object key) {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * Guaranteed to throw an exception and leave the multimap unmodified.
+   *
+   * @throws UnsupportedOperationException always
+   */
+  @Override
+  public ImmutableCollection<V> replaceValues(K key,
+      Iterable<? extends V> values) {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * Guaranteed to throw an exception and leave the multimap unmodified.
+   *
+   * @throws UnsupportedOperationException always
+   */
+  @Override
+  public void clear() {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * Returns an immutable collection of the values for the given key.  If no
+   * mappings in the multimap have the provided key, an empty immutable
+   * collection is returned. The values are in the same order as the parameters
+   * used to build this multimap.
+   */
+  @Override
+  public abstract ImmutableCollection<V> get(K key);
+
+  /**
+   * Returns an immutable multimap which is the inverse of this one. For every
+   * key-value mapping in the original, the result will have a mapping with
+   * key and value reversed.
+   *
+   * @since 11
+   */
+  @Beta
+  public abstract ImmutableMultimap<V, K> inverse();
+
+  /**
+   * Guaranteed to throw an exception and leave the multimap unmodified.
+   *
+   * @throws UnsupportedOperationException always
+   */
+  @Override
+  public boolean put(K key, V value) {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * Guaranteed to throw an exception and leave the multimap unmodified.
+   *
+   * @throws UnsupportedOperationException always
+   */
+  @Override
+  public boolean putAll(K key, Iterable<? extends V> values) {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * Guaranteed to throw an exception and leave the multimap unmodified.
+   *
+   * @throws UnsupportedOperationException always
+   */
+  @Override
+  public boolean putAll(Multimap<? extends K, ? extends V> multimap) {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * Guaranteed to throw an exception and leave the multimap unmodified.
+   *
+   * @throws UnsupportedOperationException always
+   */
+  @Override
+  public boolean remove(Object key, Object value) {
+    throw new UnsupportedOperationException();
+  }
+
+  boolean isPartialView(){
+    return map.isPartialView();
+  }
+
+  // accessors
+
+  @Override
+  public boolean containsEntry(@Nullable Object key, @Nullable Object value) {
+    Collection<V> values = map.get(key);
+    return values != null && values.contains(value);
+  }
+
+  @Override
+  public boolean containsKey(@Nullable Object key) {
+    return map.containsKey(key);
+  }
+
+  @Override
+  public boolean containsValue(@Nullable Object value) {
+    for (Collection<V> valueCollection : map.values()) {
+      if (valueCollection.contains(value)) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  @Override
+  public boolean isEmpty() {
+    return size == 0;
+  }
+
+  @Override
+  public int size() {
+    return size;
+  }
+
+  @Override public boolean equals(@Nullable Object object) {
+    if (object instanceof Multimap) {
+      Multimap<?, ?> that = (Multimap<?, ?>) object;
+      return this.map.equals(that.asMap());
+    }
+    return false;
+  }
+
+  @Override public int hashCode() {
+    return map.hashCode();
+  }
+
+  @Override public String toString() {
+    return map.toString();
+  }
+
+  // views
+
+  /**
+   * Returns an immutable set of the distinct keys in this multimap. These keys
+   * are ordered according to when they first appeared during the construction
+   * of this multimap.
+   */
+  @Override
+  public ImmutableSet<K> keySet() {
+    return map.keySet();
+  }
+
+  /**
+   * Returns an immutable map that associates each key with its corresponding
+   * values in the multimap.
+   */
+  @Override
+  @SuppressWarnings("unchecked") // a widening cast
+  public ImmutableMap<K, Collection<V>> asMap() {
+    return (ImmutableMap) map;
+  }
+
+  private transient ImmutableCollection<Entry<K, V>> entries;
+
+  /**
+   * Returns an immutable collection of all key-value pairs in the multimap. Its
+   * iterator traverses the values for the first key, the values for the second
+   * key, and so on.
+   */
+  @Override
+  public ImmutableCollection<Entry<K, V>> entries() {
+    ImmutableCollection<Entry<K, V>> result = entries;
+    return (result == null)
+        ? (entries = new EntryCollection<K, V>(this)) : result;
+  }
+
+  private static class EntryCollection<K, V>
+      extends ImmutableCollection<Entry<K, V>> {
+    final ImmutableMultimap<K, V> multimap;
+
+    EntryCollection(ImmutableMultimap<K, V> multimap) {
+      this.multimap = multimap;
+    }
+
+    @Override public UnmodifiableIterator<Entry<K, V>> iterator() {
+      final Iterator<? extends Entry<K, ? extends ImmutableCollection<V>>>
+          mapIterator = this.multimap.map.entrySet().iterator();
+
+      return new UnmodifiableIterator<Entry<K, V>>() {
+        K key;
+        Iterator<V> valueIterator;
+
+        @Override
+        public boolean hasNext() {
+          return (key != null && valueIterator.hasNext())
+              || mapIterator.hasNext();
+        }
+
+        @Override
+        public Entry<K, V> next() {
+          if (key == null || !valueIterator.hasNext()) {
+            Entry<K, ? extends ImmutableCollection<V>> entry
+                = mapIterator.next();
+            key = entry.getKey();
+            valueIterator = entry.getValue().iterator();
+          }
+          return Maps.immutableEntry(key, valueIterator.next());
+        }
+      };
+    }
+
+    @Override boolean isPartialView() {
+      return multimap.isPartialView();
+    }
+
+    @Override
+    public int size() {
+      return multimap.size();
+    }
+
+    @Override public boolean contains(Object object) {
+      if (object instanceof Entry) {
+        Entry<?, ?> entry = (Entry<?, ?>) object;
+        return multimap.containsEntry(entry.getKey(), entry.getValue());
+      }
+      return false;
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  private transient ImmutableMultiset<K> keys;
+
+  /**
+   * Returns a collection, which may contain duplicates, of all keys. The number
+   * of times a key appears in the returned multiset equals the number of
+   * mappings the key has in the multimap. Duplicate keys appear consecutively
+   * in the multiset's iteration order.
+   */
+  @Override
+  public ImmutableMultiset<K> keys() {
+    ImmutableMultiset<K> result = keys;
+    return (result == null) ? (keys = createKeys()) : result;
+  }
+
+  private ImmutableMultiset<K> createKeys() {
+    ImmutableMultiset.Builder<K> builder = ImmutableMultiset.builder();
+    for (Entry<K, ? extends ImmutableCollection<V>> entry
+        : map.entrySet()) {
+      builder.addCopies(entry.getKey(), entry.getValue().size());
+    }
+    return builder.build();
+  }
+
+  private transient ImmutableCollection<V> values;
+
+  /**
+   * Returns an immutable collection of the values in this multimap. Its
+   * iterator traverses the values for the first key, the values for the second
+   * key, and so on.
+   */
+  @Override
+  public ImmutableCollection<V> values() {
+    ImmutableCollection<V> result = values;
+    return (result == null) ? (values = new Values<V>(this)) : result;
+  }
+
+  private static class Values<V> extends ImmutableCollection<V> {
+    final ImmutableMultimap<?, V> multimap;
+
+    Values(ImmutableMultimap<?, V> multimap) {
+      this.multimap = multimap;
+    }
+
+    @Override public UnmodifiableIterator<V> iterator() {
+      final Iterator<? extends Entry<?, V>> entryIterator
+          = multimap.entries().iterator();
+      return new UnmodifiableIterator<V>() {
+        @Override
+        public boolean hasNext() {
+          return entryIterator.hasNext();
+        }
+        @Override
+        public V next() {
+          return entryIterator.next().getValue();
+        }
+      };
+    }
+
+    @Override
+    public int size() {
+      return multimap.size();
+    }
+
+    @Override boolean isPartialView() {
+      return true;
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  private static final long serialVersionUID = 0;
+}
diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableSet.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableSet.java
new file mode 100644
index 0000000..26bc57f
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableSet.java
@@ -0,0 +1,221 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * GWT emulated version of {@link ImmutableSet}.  For the unsorted sets, they
+ * are thin wrapper around {@link java.util.Collections#emptySet()}, {@link
+ * Collections#singleton(Object)} and {@link java.util.LinkedHashSet} for
+ * empty, singleton and regular sets respectively.  For the sorted sets, it's
+ * a thin wrapper around {@link java.util.TreeSet}.
+ *
+ * @see ImmutableSortedSet
+ *
+ * @author Hayward Chan
+ */
+@SuppressWarnings("serial")  // Serialization only done in GWT.
+public abstract class ImmutableSet<E> extends ForwardingImmutableCollection<E>
+    implements Set<E> {
+
+  ImmutableSet(Set<E> delegate) {
+    super(Collections.unmodifiableSet(delegate));
+  }
+
+  ImmutableSet() {
+    this(Collections.<E>emptySet());
+  }
+
+  // Casting to any type is safe because the set will never hold any elements.
+  @SuppressWarnings({"unchecked"})
+  public static <E> ImmutableSet<E> of() {
+    return (ImmutableSet<E>) EmptyImmutableSet.INSTANCE;
+  }
+
+  public static <E> ImmutableSet<E> of(E element) {
+    return new SingletonImmutableSet<E>(element);
+  }
+
+  @SuppressWarnings("unchecked")
+  public static <E> ImmutableSet<E> of(E e1, E e2) {
+    return create(e1, e2);
+  }
+
+  @SuppressWarnings("unchecked")
+  public static <E> ImmutableSet<E> of(E e1, E e2, E e3) {
+    return create(e1, e2, e3);
+  }
+
+  @SuppressWarnings("unchecked")
+  public static <E> ImmutableSet<E> of(E e1, E e2, E e3, E e4) {
+    return create(e1, e2, e3, e4);
+  }
+
+  @SuppressWarnings("unchecked")
+  public static <E> ImmutableSet<E> of(E e1, E e2, E e3, E e4, E e5) {
+    return create(e1, e2, e3, e4, e5);
+  }
+
+  @SuppressWarnings("unchecked")
+  public static <E> ImmutableSet<E> of(E e1, E e2, E e3, E e4, E e5, E e6,
+      E... others) {
+    int size = others.length + 6;
+    List<E> all = new ArrayList<E>(size);
+    Collections.addAll(all, e1, e2, e3, e4, e5, e6);
+    Collections.addAll(all, others);
+    return copyOf(all.iterator());
+  }
+
+  /** @deprecated */
+  @Deprecated public static <E> ImmutableSet<E> of(E[] elements) {
+    return copyOf(elements);
+  }
+
+  public static <E> ImmutableSet<E> copyOf(E[] elements) {
+    checkNotNull(elements);
+    switch (elements.length) {
+      case 0:
+        return of();
+      case 1:
+        return of(elements[0]);
+      default:
+        return create(elements);
+    }
+  }
+
+  public static <E> ImmutableSet<E> copyOf(Collection<? extends E> elements) {
+    Iterable<? extends E> iterable = elements;
+    return copyOf(iterable);
+  }
+
+  public static <E> ImmutableSet<E> copyOf(Iterable<? extends E> elements) {
+    if (elements instanceof ImmutableSet
+        && !(elements instanceof ImmutableSortedSet)) {
+      @SuppressWarnings("unchecked") // all supported methods are covariant
+      ImmutableSet<E> set = (ImmutableSet<E>) elements;
+      return set;
+    }
+    return copyOf(elements.iterator());
+  }
+
+  public static <E> ImmutableSet<E> copyOf(Iterator<? extends E> elements) {
+    if (!elements.hasNext()) {
+      return of();
+    }
+    E first = elements.next();
+    if (!elements.hasNext()) {
+      // TODO: Remove "ImmutableSet.<E>" when eclipse bug is fixed.
+      return ImmutableSet.<E>of(first);
+    }
+
+    Set<E> delegate = Sets.newLinkedHashSet();
+    delegate.add(checkNotNull(first));
+    do {
+      delegate.add(checkNotNull(elements.next()));
+    } while (elements.hasNext());
+
+    return unsafeDelegate(delegate);
+  }
+
+  // Factory methods that skips the null checks on elements, only used when
+  // the elements are known to be non-null.
+  static <E> ImmutableSet<E> unsafeDelegate(Set<E> delegate) {
+    switch (delegate.size()) {
+      case 0:
+        return of();
+      case 1:
+        return new SingletonImmutableSet<E>(delegate.iterator().next());
+      default:
+        return new RegularImmutableSet<E>(delegate);
+    }
+  }
+
+  private static <E> ImmutableSet<E> create(E... elements) {
+    // Create the set first, to remove duplicates if necessary.
+    Set<E> set = Sets.newLinkedHashSet();
+    Collections.addAll(set, elements);
+    for (E element : set) {
+      checkNotNull(element);
+    }
+
+    switch (set.size()) {
+      case 0:
+        return of();
+      case 1:
+        return new SingletonImmutableSet<E>(set.iterator().next());
+      default:
+        return new RegularImmutableSet<E>(set);
+    }
+  }
+
+  @Override public boolean equals(Object obj) {
+    return Sets.equalsImpl(this, obj);
+  }
+
+  @Override public int hashCode() {
+    return delegate.hashCode();
+  }
+
+  public static <E> Builder<E> builder() {
+    return new Builder<E>();
+  }
+
+  public static class Builder<E> extends ImmutableCollection.Builder<E> {
+    // accessed directly by ImmutableSortedSet
+    final ArrayList<E> contents = Lists.newArrayList();
+
+    public Builder() {}
+
+    @Override public Builder<E> add(E element) {
+      contents.add(checkNotNull(element));
+      return this;
+    }
+
+    @Override public Builder<E> add(E... elements) {
+      checkNotNull(elements); // for GWT
+      contents.ensureCapacity(contents.size() + elements.length);
+      super.add(elements);
+      return this;
+    }
+
+    @Override public Builder<E> addAll(Iterable<? extends E> elements) {
+      if (elements instanceof Collection) {
+        Collection<?> collection = (Collection<?>) elements;
+        contents.ensureCapacity(contents.size() + collection.size());
+      }
+      super.addAll(elements);
+      return this;
+    }
+
+    @Override public Builder<E> addAll(Iterator<? extends E> elements) {
+      super.addAll(elements);
+      return this;
+    }
+
+    @Override public ImmutableSet<E> build() {
+      return copyOf(contents.iterator());
+    }
+  }
+}
diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableSetMultimap.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableSetMultimap.java
new file mode 100644
index 0000000..b5eaabf
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableSetMultimap.java
@@ -0,0 +1,424 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.LinkedHashMap;
+import java.util.Map.Entry;
+import java.util.TreeMap;
+
+import javax.annotation.Nullable;
+
+/**
+ * An immutable {@link SetMultimap} with reliable user-specified key and value
+ * iteration order. Does not permit null keys or values.
+ *
+ * <p>Unlike {@link Multimaps#unmodifiableSetMultimap(SetMultimap)}, which is
+ * a <i>view</i> of a separate multimap which can still change, an instance of
+ * {@code ImmutableSetMultimap} contains its own data and will <i>never</i>
+ * change. {@code ImmutableSetMultimap} is convenient for
+ * {@code public static final} multimaps ("constant multimaps") and also lets
+ * you easily make a "defensive copy" of a multimap provided to your class by
+ * a caller.
+ *
+ * <p><b>Note:</b> Although this class is not final, it cannot be subclassed as
+ * it has no public or protected constructors. Thus, instances of this class
+ * are guaranteed to be immutable.
+ *
+ * @author Mike Ward
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible(serializable = true, emulated = true)
+public class ImmutableSetMultimap<K, V>
+    extends ImmutableMultimap<K, V>
+    implements SetMultimap<K, V> {
+
+  /** Returns the empty multimap. */
+  // Casting is safe because the multimap will never hold any elements.
+  @SuppressWarnings("unchecked")
+  public static <K, V> ImmutableSetMultimap<K, V> of() {
+    return (ImmutableSetMultimap<K, V>) EmptyImmutableSetMultimap.INSTANCE;
+  }
+
+  /**
+   * Returns an immutable multimap containing a single entry.
+   */
+  public static <K, V> ImmutableSetMultimap<K, V> of(K k1, V v1) {
+    ImmutableSetMultimap.Builder<K, V> builder = ImmutableSetMultimap.builder();
+    builder.put(k1, v1);
+    return builder.build();
+  }
+
+  /**
+   * Returns an immutable multimap containing the given entries, in order.
+   * Repeated occurrences of an entry (according to {@link Object#equals}) after
+   * the first are ignored.
+   */
+  public static <K, V> ImmutableSetMultimap<K, V> of(K k1, V v1, K k2, V v2) {
+    ImmutableSetMultimap.Builder<K, V> builder = ImmutableSetMultimap.builder();
+    builder.put(k1, v1);
+    builder.put(k2, v2);
+    return builder.build();
+  }
+
+  /**
+   * Returns an immutable multimap containing the given entries, in order.
+   * Repeated occurrences of an entry (according to {@link Object#equals}) after
+   * the first are ignored.
+   */
+  public static <K, V> ImmutableSetMultimap<K, V> of(
+      K k1, V v1, K k2, V v2, K k3, V v3) {
+    ImmutableSetMultimap.Builder<K, V> builder = ImmutableSetMultimap.builder();
+    builder.put(k1, v1);
+    builder.put(k2, v2);
+    builder.put(k3, v3);
+    return builder.build();
+  }
+
+  /**
+   * Returns an immutable multimap containing the given entries, in order.
+   * Repeated occurrences of an entry (according to {@link Object#equals}) after
+   * the first are ignored.
+   */
+  public static <K, V> ImmutableSetMultimap<K, V> of(
+      K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4) {
+    ImmutableSetMultimap.Builder<K, V> builder = ImmutableSetMultimap.builder();
+    builder.put(k1, v1);
+    builder.put(k2, v2);
+    builder.put(k3, v3);
+    builder.put(k4, v4);
+    return builder.build();
+  }
+
+  /**
+   * Returns an immutable multimap containing the given entries, in order.
+   * Repeated occurrences of an entry (according to {@link Object#equals}) after
+   * the first are ignored.
+   */
+  public static <K, V> ImmutableSetMultimap<K, V> of(
+      K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5) {
+    ImmutableSetMultimap.Builder<K, V> builder = ImmutableSetMultimap.builder();
+    builder.put(k1, v1);
+    builder.put(k2, v2);
+    builder.put(k3, v3);
+    builder.put(k4, v4);
+    builder.put(k5, v5);
+    return builder.build();
+  }
+
+  // looking for of() with > 5 entries? Use the builder instead.
+
+  /**
+   * Returns a new {@link Builder}.
+   */
+  public static <K, V> Builder<K, V> builder() {
+    return new Builder<K, V>();
+  }
+
+  /**
+   * Multimap for {@link ImmutableSetMultimap.Builder} that maintains key
+   * and value orderings and performs better than {@link LinkedHashMultimap}.
+   */
+  private static class BuilderMultimap<K, V> extends AbstractMultimap<K, V> {
+    BuilderMultimap() {
+      super(new LinkedHashMap<K, Collection<V>>());
+    }
+    @Override Collection<V> createCollection() {
+      return Sets.newLinkedHashSet();
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  /**
+   * Multimap for {@link ImmutableSetMultimap.Builder} that sorts keys and
+   * maintains value orderings.
+   */
+  private static class SortedKeyBuilderMultimap<K, V> 
+      extends AbstractMultimap<K, V> {
+    SortedKeyBuilderMultimap(
+        Comparator<? super K> keyComparator, Multimap<K, V> multimap) {
+      super(new TreeMap<K, Collection<V>>(keyComparator));
+      putAll(multimap);
+    }
+    @Override Collection<V> createCollection() {
+      return Sets.newLinkedHashSet();
+    }
+    private static final long serialVersionUID = 0;
+  }
+  
+  /**
+   * A builder for creating immutable {@code SetMultimap} instances, especially
+   * {@code public static final} multimaps ("constant multimaps"). Example:
+   * <pre>   {@code
+   *
+   *   static final Multimap<String, Integer> STRING_TO_INTEGER_MULTIMAP =
+   *       new ImmutableSetMultimap.Builder<String, Integer>()
+   *           .put("one", 1)
+   *           .putAll("several", 1, 2, 3)
+   *           .putAll("many", 1, 2, 3, 4, 5)
+   *           .build();}</pre>
+   *
+   * Builder instances can be reused; it is safe to call {@link #build} multiple
+   * times to build multiple multimaps in series. Each multimap contains the
+   * key-value mappings in the previously created multimaps.
+   *
+   * @since 2.0 (imported from Google Collections Library)
+   */
+  public static final class Builder<K, V>
+      extends ImmutableMultimap.Builder<K, V> {
+    /**
+     * Creates a new builder. The returned builder is equivalent to the builder
+     * generated by {@link ImmutableSetMultimap#builder}.
+     */
+    public Builder() {
+      builderMultimap = new BuilderMultimap<K, V>();      
+    }
+
+    /**
+     * Adds a key-value mapping to the built multimap if it is not already
+     * present.
+     */
+    @Override public Builder<K, V> put(K key, V value) {
+      builderMultimap.put(checkNotNull(key), checkNotNull(value));
+      return this;
+    }
+
+    /**
+     * Adds an entry to the built multimap if it is not already present.
+     *
+     * @since 11.0
+     */
+    @Override public Builder<K, V> put(Entry<? extends K, ? extends V> entry) {
+      builderMultimap.put(
+          checkNotNull(entry.getKey()), checkNotNull(entry.getValue()));
+      return this;
+    }
+
+    @Override public Builder<K, V> putAll(K key, Iterable<? extends V> values) {
+      Collection<V> collection = builderMultimap.get(checkNotNull(key));
+      for (V value : values) {
+        collection.add(checkNotNull(value));
+      }
+      return this;
+    }
+
+    @Override public Builder<K, V> putAll(K key, V... values) {
+      return putAll(key, Arrays.asList(values));
+    }
+
+    @Override public Builder<K, V> putAll(
+        Multimap<? extends K, ? extends V> multimap) {
+      for (Entry<? extends K, ? extends Collection<? extends V>> entry
+          : multimap.asMap().entrySet()) {
+        putAll(entry.getKey(), entry.getValue());
+      }
+      return this;
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * @since 8.0
+     */
+    @Beta @Override
+    public Builder<K, V> orderKeysBy(Comparator<? super K> keyComparator) {
+      builderMultimap = new SortedKeyBuilderMultimap<K, V>(
+          checkNotNull(keyComparator), builderMultimap);
+      return this;
+    }
+
+    /**
+     * Specifies the ordering of the generated multimap's values for each key.
+     * 
+     * <p>If this method is called, the sets returned by the {@code get()} 
+     * method of the generated multimap and its {@link Multimap#asMap()} view
+     * are {@link ImmutableSortedSet} instances. However, serialization does not
+     * preserve that property, though it does maintain the key and value
+     * ordering.
+     * 
+     * @since 8.0
+     */
+    // TODO: Make serialization behavior consistent.
+    @Beta @Override
+    public Builder<K, V> orderValuesBy(Comparator<? super V> valueComparator) {
+      super.orderValuesBy(valueComparator);
+      return this;
+    }
+
+    /**
+     * Returns a newly-created immutable set multimap.
+     */
+    @Override public ImmutableSetMultimap<K, V> build() {
+      return copyOf(builderMultimap, valueComparator);
+    }
+  }
+
+  /**
+   * Returns an immutable set multimap containing the same mappings as
+   * {@code multimap}. The generated multimap's key and value orderings
+   * correspond to the iteration ordering of the {@code multimap.asMap()} view.
+   * Repeated occurrences of an entry in the multimap after the first are
+   * ignored.
+   *
+   * <p>Despite the method name, this method attempts to avoid actually copying
+   * the data when it is safe to do so. The exact circumstances under which a
+   * copy will or will not be performed are undocumented and subject to change.
+   *
+   * @throws NullPointerException if any key or value in {@code multimap} is
+   *     null
+   */
+  public static <K, V> ImmutableSetMultimap<K, V> copyOf(
+      Multimap<? extends K, ? extends V> multimap) {
+    return copyOf(multimap, null);
+  }
+  
+  private static <K, V> ImmutableSetMultimap<K, V> copyOf(
+      Multimap<? extends K, ? extends V> multimap,
+      Comparator<? super V> valueComparator) {
+    checkNotNull(multimap); // eager for GWT
+    if (multimap.isEmpty() && valueComparator == null) {
+      return of();
+    }
+
+    if (multimap instanceof ImmutableSetMultimap) {
+      @SuppressWarnings("unchecked") // safe since multimap is not writable
+      ImmutableSetMultimap<K, V> kvMultimap
+          = (ImmutableSetMultimap<K, V>) multimap;
+      if (!kvMultimap.isPartialView()) {
+        return kvMultimap;
+      }
+    }
+
+    ImmutableMap.Builder<K, ImmutableSet<V>> builder = ImmutableMap.builder();
+    int size = 0;
+
+    for (Entry<? extends K, ? extends Collection<? extends V>> entry
+        : multimap.asMap().entrySet()) {
+      K key = entry.getKey();
+      Collection<? extends V> values = entry.getValue();
+      ImmutableSet<V> set = (valueComparator == null)
+          ? ImmutableSet.copyOf(values) 
+          : ImmutableSortedSet.copyOf(valueComparator, values);
+      if (!set.isEmpty()) {
+        builder.put(key, set);
+        size += set.size();
+      }
+    }
+
+    return new ImmutableSetMultimap<K, V>(
+        builder.build(), size, valueComparator);
+  }
+
+  // Returned by get() when values are sorted and a missing key is provided.
+  private final transient ImmutableSortedSet<V> emptySet;
+
+  ImmutableSetMultimap(ImmutableMap<K, ImmutableSet<V>> map, int size, 
+      @Nullable Comparator<? super V> valueComparator) {
+    super(map, size);
+    this.emptySet = (valueComparator == null) 
+        ? null : ImmutableSortedSet.<V>emptySet(valueComparator);
+  }
+
+  // views
+
+  /**
+   * Returns an immutable set of the values for the given key.  If no mappings
+   * in the multimap have the provided key, an empty immutable set is returned.
+   * The values are in the same order as the parameters used to build this
+   * multimap.
+   */
+  @Override public ImmutableSet<V> get(@Nullable K key) {
+    // This cast is safe as its type is known in constructor.
+    ImmutableSet<V> set = (ImmutableSet<V>) map.get(key);
+    if (set != null) {
+      return set;
+    } else if (emptySet != null) {
+      return emptySet;
+    } else {
+      return ImmutableSet.<V>of();
+    }
+  }
+
+  private transient ImmutableSetMultimap<V, K> inverse;
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>Because an inverse of a set multimap cannot contain multiple pairs with the same key and
+   * value, this method returns an {@code ImmutableSetMultimap} rather than the
+   * {@code ImmutableMultimap} specified in the {@code ImmutableMultimap} class.
+   *
+   * @since 11
+   */
+  @Beta
+  public ImmutableSetMultimap<V, K> inverse() {
+    ImmutableSetMultimap<V, K> result = inverse;
+    return (result == null) ? (inverse = invert()) : result;
+  }
+
+  private ImmutableSetMultimap<V, K> invert() {
+    Builder<V, K> builder = builder();
+    for (Entry<K, V> entry : entries()) {
+      builder.put(entry.getValue(), entry.getKey());
+    }
+    ImmutableSetMultimap<V, K> invertedMultimap = builder.build();
+    invertedMultimap.inverse = this;
+    return invertedMultimap;
+  }
+
+  /**
+   * Guaranteed to throw an exception and leave the multimap unmodified.
+   *
+   * @throws UnsupportedOperationException always
+   */
+  @Override public ImmutableSet<V> removeAll(Object key) {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * Guaranteed to throw an exception and leave the multimap unmodified.
+   *
+   * @throws UnsupportedOperationException always
+   */
+  @Override public ImmutableSet<V> replaceValues(
+      K key, Iterable<? extends V> values) {
+    throw new UnsupportedOperationException();
+  }
+
+  private transient ImmutableSet<Entry<K, V>> entries;
+
+  /**
+   * Returns an immutable collection of all key-value pairs in the multimap.
+   * Its iterator traverses the values for the first key, the values for the
+   * second key, and so on.
+   */
+  // TODO(kevinb): Fix this so that two copies of the entries are not created.
+  @Override public ImmutableSet<Entry<K, V>> entries() {
+    ImmutableSet<Entry<K, V>> result = entries;
+    return (result == null)
+        ? (entries = ImmutableSet.copyOf(super.entries()))
+        : result;
+  }
+}
+
diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableSortedMap.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableSortedMap.java
new file mode 100644
index 0000000..89624d8
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableSortedMap.java
@@ -0,0 +1,320 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.collect.ImmutableSortedSet;
+
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.SortedMap;
+
+/**
+ * GWT emulated version of {@link ImmutableSortedMap}.  It's a thin wrapper
+ * around a {@link java.util.TreeMap}.
+ *
+ * @author Hayward Chan
+ */
+public class ImmutableSortedMap<K, V>
+    extends ImmutableMap<K, V> implements SortedMap<K, V> {
+
+  // TODO: Confirm that ImmutableSortedMap is faster to construct and uses less
+  // memory than TreeMap; then say so in the class Javadoc.
+
+  // TODO: Create separate subclasses for empty, single-entry, and
+  // multiple-entry instances.
+
+  @SuppressWarnings("unchecked")
+  private static final Comparator NATURAL_ORDER = Ordering.natural();
+
+  @SuppressWarnings("unchecked")
+  private static final ImmutableSortedMap<Object, Object> NATURAL_EMPTY_MAP
+      = create(NATURAL_ORDER);
+
+  // This reference is only used by GWT compiler to infer the keys and values
+  // of the map that needs to be serialized.
+  private Comparator<K> unusedComparatorForSerialization;
+  private K unusedKeyForSerialization;
+  private V unusedValueForSerialization;
+
+  private transient final SortedMap<K, V> sortedDelegate;
+
+  // The comparator used by this map.  It's the same as that of sortedDelegate,
+  // except that when sortedDelegate's comparator is null, it points to a
+  // non-null instance of Ordering.natural().
+  private transient final Comparator<K> comparator;
+
+  // If map has a null comparator, the keys should have a natural ordering,
+  // even though K doesn't explicitly implement Comparable.
+  @SuppressWarnings("unchecked")
+  ImmutableSortedMap(SortedMap<K, ? extends V> delegate) {
+    super(delegate);
+    this.comparator = (delegate.comparator() == null)
+        ? NATURAL_ORDER : delegate.comparator();
+    this.sortedDelegate = Collections.unmodifiableSortedMap(delegate);
+  }
+
+  private static <K, V> ImmutableSortedMap<K, V> create(
+      Comparator<? super K> comparator,
+      Entry<? extends K, ? extends V>... entries) {
+    checkNotNull(comparator);
+    SortedMap<K, V> delegate = Maps.newTreeMap(comparator);
+    for (Entry<? extends K, ? extends V> entry : entries) {
+      delegate.put(entry.getKey(), entry.getValue());
+    }
+    return new ImmutableSortedMap<K, V>(delegate);
+  }
+
+  // Casting to any type is safe because the set will never hold any elements.
+  @SuppressWarnings("unchecked")
+  public static <K, V> ImmutableSortedMap<K, V> of() {
+    return (ImmutableSortedMap) NATURAL_EMPTY_MAP;
+  }
+
+  public static <K extends Comparable<? super K>, V> ImmutableSortedMap<K, V>
+      of(K k1, V v1) {
+    return create(Ordering.natural(), entryOf(k1, v1));
+  }
+
+  public static <K extends Comparable<? super K>, V> ImmutableSortedMap<K, V>
+      of(K k1, V v1, K k2, V v2) {
+    return new Builder<K, V>(Ordering.natural())
+        .put(k1, v1).put(k2, v2).build();
+  }
+
+  public static <K extends Comparable<? super K>, V> ImmutableSortedMap<K, V>
+      of(K k1, V v1, K k2, V v2, K k3, V v3) {
+    return new Builder<K, V>(Ordering.natural())
+        .put(k1, v1).put(k2, v2).put(k3, v3).build();
+  }
+
+  public static <K extends Comparable<? super K>, V> ImmutableSortedMap<K, V>
+      of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4) {
+    return new Builder<K, V>(Ordering.natural())
+        .put(k1, v1).put(k2, v2).put(k3, v3).put(k4, v4).build();
+  }
+
+  public static <K extends Comparable<? super K>, V> ImmutableSortedMap<K, V>
+      of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5) {
+    return new Builder<K, V>(Ordering.natural())
+        .put(k1, v1).put(k2, v2).put(k3, v3).put(k4, v4).put(k5, v5).build();
+  }
+
+  public static <K extends Comparable<? super K>, V> ImmutableSortedMap<K, V>
+      copyOf(Map<? extends K, ? extends V> map) {
+    return copyOfInternal(map, Ordering.natural());
+  }
+
+  public static <K, V> ImmutableSortedMap<K, V> copyOf(
+      Map<? extends K, ? extends V> map, Comparator<? super K> comparator) {
+    return copyOfInternal(map, checkNotNull(comparator));
+  }
+
+  public static <K, V> ImmutableSortedMap<K, V> copyOfSorted(
+      SortedMap<K, ? extends V> map) {
+    // If map has a null comparator, the keys should have a natural ordering,
+    // even though K doesn't explicitly implement Comparable.
+    @SuppressWarnings("unchecked")
+    Comparator<? super K> comparator =
+        (map.comparator() == null) ? NATURAL_ORDER : map.comparator();
+    return copyOfInternal(map, comparator);
+  }
+
+  private static <K, V> ImmutableSortedMap<K, V> copyOfInternal(
+      Map<? extends K, ? extends V> map, Comparator<? super K> comparator) {
+
+    if (map instanceof ImmutableSortedMap) {
+      // TODO: Prove that this cast is safe, even though
+      // Collections.unmodifiableSortedMap requires the same key type.
+      @SuppressWarnings("unchecked")
+      ImmutableSortedMap<K, V> kvMap = (ImmutableSortedMap<K, V>) map;
+      Comparator<?> comparator2 = kvMap.comparator();
+      boolean sameComparator = (comparator2 == null)
+          ? comparator == NATURAL_ORDER
+          : comparator.equals(comparator2);
+      if (sameComparator) {
+        return kvMap;
+      }
+    }
+
+    SortedMap<K, V> delegate = Maps.newTreeMap(comparator);
+    for (Entry<? extends K, ? extends V> entry : map.entrySet()) {
+      putEntryWithChecks(delegate, entry);
+    }
+    return new ImmutableSortedMap<K, V>(delegate);
+  }
+
+  private static <K, V> void putEntryWithChecks(
+      SortedMap<K, V> map, Entry<? extends K, ? extends V> entry) {
+    K key = checkNotNull(entry.getKey());
+    V value = checkNotNull(entry.getValue());
+    if (map.containsKey(key)) {
+      // When a collision happens, the colliding entry is the first entry
+      // of the tail map.
+      Entry<K, V> previousEntry
+          = map.tailMap(key).entrySet().iterator().next();
+      throw new IllegalArgumentException(
+          "Duplicate keys in mappings " + previousEntry.getKey() +
+          "=" + previousEntry.getValue() + " and " + key +
+          "=" + value);
+    }
+    map.put(key, value);
+  }
+
+  public static <K extends Comparable<K>, V> Builder<K, V> naturalOrder() {
+    return new Builder<K, V>(Ordering.natural());
+  }
+
+  public static <K, V> Builder<K, V> orderedBy(Comparator<K> comparator) {
+    return new Builder<K, V>(comparator);
+  }
+
+  public static <K extends Comparable<K>, V> Builder<K, V> reverseOrder() {
+    return new Builder<K, V>(Ordering.natural().reverse());
+  }
+
+  public static final class Builder<K, V> extends ImmutableMap.Builder<K, V> {
+    private final Comparator<? super K> comparator;
+
+    public Builder(Comparator<? super K> comparator) {
+      this.comparator = checkNotNull(comparator);
+    }
+
+    @Override public Builder<K, V> put(K key, V value) {
+      entries.add(entryOf(key, value));
+      return this;
+    }
+
+    @Override public Builder<K, V> put(Entry<? extends K, ? extends V> entry) {
+      super.put(entry);
+      return this;
+    }
+
+    @Override public Builder<K, V> putAll(Map<? extends K, ? extends V> map) {
+      for (Entry<? extends K, ? extends V> entry : map.entrySet()) {
+        put(entry.getKey(), entry.getValue());
+      }
+      return this;
+    }
+
+    @Override public ImmutableSortedMap<K, V> build() {
+      SortedMap<K, V> delegate = Maps.newTreeMap(comparator);
+      for (Entry<? extends K, ? extends V> entry : entries) {
+        putEntryWithChecks(delegate, entry);
+      }
+      return new ImmutableSortedMap<K, V>(delegate);
+    }
+  }
+
+  private transient ImmutableSortedSet<K> keySet;
+
+  @Override public ImmutableSortedSet<K> keySet() {
+    ImmutableSortedSet<K> ks = keySet;
+    return (ks == null) ? (keySet = createKeySet()) : ks;
+  }
+
+  private ImmutableSortedSet<K> createKeySet() {
+    // the keySet() of the delegate is only a Set and TreeMap.navigatableKeySet
+    // is not available in GWT yet.  To keep the code simple and code size more,
+    // we make a copy here, instead of creating a view of it.
+    //
+    // TODO: revisit if it's unbearably slow or when GWT supports
+    // TreeMap.navigatbleKeySet().
+    return ImmutableSortedSet.copyOf(comparator, sortedDelegate.keySet());
+  }
+
+  public Comparator<? super K> comparator() {
+    return comparator;
+  }
+
+  public K firstKey() {
+    return sortedDelegate.firstKey();
+  }
+
+  public K lastKey() {
+    return sortedDelegate.lastKey();
+  }
+
+  K higher(K k) {
+    Iterator<K> iterator = keySet().tailSet(k).iterator();
+    while (iterator.hasNext()) {
+      K tmp = iterator.next();
+      if (comparator().compare(k, tmp) < 0) {
+        return tmp;
+      }
+    }
+    return null;
+  }
+
+  public ImmutableSortedMap<K, V> headMap(K toKey) {
+    checkNotNull(toKey);
+    return new ImmutableSortedMap<K, V>(sortedDelegate.headMap(toKey));
+  }
+
+  ImmutableSortedMap<K, V> headMap(K toKey, boolean inclusive) {
+    checkNotNull(toKey);
+    if (inclusive) {
+      K tmp = higher(toKey);
+      if (tmp == null) {
+        return this;
+      }
+      toKey = tmp;
+    }
+    return headMap(toKey);
+  }
+
+  public ImmutableSortedMap<K, V> subMap(K fromKey, K toKey) {
+    checkNotNull(fromKey);
+    checkNotNull(toKey);
+    checkArgument(comparator.compare(fromKey, toKey) <= 0);
+    return new ImmutableSortedMap<K, V>(sortedDelegate.subMap(fromKey, toKey));
+  }
+
+  ImmutableSortedMap<K, V> subMap(K fromKey, boolean fromInclusive, K toKey, boolean toInclusive){
+    checkNotNull(fromKey);
+    checkNotNull(toKey);
+    checkArgument(comparator.compare(fromKey, toKey) <= 0);
+    return tailMap(fromKey, fromInclusive).headMap(toKey, toInclusive);
+  }
+  
+  public ImmutableSortedMap<K, V> tailMap(K fromKey) {
+    checkNotNull(fromKey);
+    return new ImmutableSortedMap<K, V>(sortedDelegate.tailMap(fromKey));
+  }
+
+  public ImmutableSortedMap<K, V> tailMap(K fromKey, boolean inclusive) {
+    checkNotNull(fromKey);
+    if (!inclusive) {
+      fromKey = higher(fromKey);
+      if (fromKey == null) {
+        return emptyMap(comparator());
+      }
+    }
+    return tailMap(fromKey);
+  }
+
+  static <K, V> ImmutableSortedMap<K, V> emptyMap(Comparator<? super K> comparator) {
+    if (comparator == NATURAL_ORDER) {
+      return (ImmutableSortedMap) NATURAL_EMPTY_MAP;
+    }
+    return create(comparator);
+  }
+}
diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableSortedSet.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableSortedSet.java
new file mode 100644
index 0000000..cfb1da2
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableSortedSet.java
@@ -0,0 +1,413 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkArgument;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+import java.util.SortedSet;
+import java.util.TreeSet;
+
+import javax.annotation.Nullable;
+
+/**
+ * GWT emulation of {@link ImmutableSortedSet}.
+ *
+ * @author Hayward Chan
+ */
+public abstract class ImmutableSortedSet<E>
+    extends ImmutableSet<E> implements SortedSet<E>, SortedIterable<E> {
+
+  // In the non-emulated source, this is in ImmutableSortedSetFauxverideShim,
+  // which overrides ImmutableSet & which ImmutableSortedSet extends.
+  // It is necessary here because otherwise the builder() method
+  // would be inherited from the emulated ImmutableSet.
+  @Deprecated public static <E> ImmutableSortedSet.Builder<E> builder() {
+    throw new UnsupportedOperationException();
+  }
+
+  // TODO: Can we find a way to remove this @SuppressWarnings even for eclipse?
+  @SuppressWarnings("unchecked")
+  private static final Comparator NATURAL_ORDER = Ordering.natural();
+
+  @SuppressWarnings("unchecked")
+  private static final ImmutableSortedSet<Object> NATURAL_EMPTY_SET =
+      new EmptyImmutableSortedSet<Object>(NATURAL_ORDER);
+
+  @SuppressWarnings("unchecked")
+  private static <E> ImmutableSortedSet<E> emptySet() {
+    return (ImmutableSortedSet<E>) NATURAL_EMPTY_SET;
+  }
+
+  static <E> ImmutableSortedSet<E> emptySet(
+      Comparator<? super E> comparator) {
+    checkNotNull(comparator);
+    if (NATURAL_ORDER.equals(comparator)) {
+      return emptySet();
+    } else {
+      return new EmptyImmutableSortedSet<E>(comparator);
+    }
+  }
+
+  public static <E> ImmutableSortedSet<E> of() {
+    return emptySet();
+  }
+
+  public static <E extends Comparable<? super E>> ImmutableSortedSet<E> of(
+      E element) {
+    return ofInternal(Ordering.natural(), element);
+  }
+
+  @SuppressWarnings("unchecked")
+  public static <E extends Comparable<? super E>> ImmutableSortedSet<E> of(
+      E e1, E e2) {
+    return ofInternal(Ordering.natural(), e1, e2);
+  }
+
+  @SuppressWarnings("unchecked")
+  public static <E extends Comparable<? super E>> ImmutableSortedSet<E> of(
+      E e1, E e2, E e3) {
+    return ofInternal(Ordering.natural(), e1, e2, e3);
+  }
+
+  @SuppressWarnings("unchecked")
+  public static <E extends Comparable<? super E>> ImmutableSortedSet<E> of(
+      E e1, E e2, E e3, E e4) {
+    return ofInternal(Ordering.natural(), e1, e2, e3, e4);
+  }
+
+  @SuppressWarnings("unchecked")
+  public static <E extends Comparable<? super E>> ImmutableSortedSet<E> of(
+      E e1, E e2, E e3, E e4, E e5) {
+    return ofInternal(Ordering.natural(), e1, e2, e3, e4, e5);
+  }
+
+  @SuppressWarnings("unchecked")
+  public static <E extends Comparable<? super E>> ImmutableSortedSet<E> of(
+      E e1, E e2, E e3, E e4, E e5, E e6, E... remaining) {
+    int size = remaining.length + 6;
+    List<E> all = new ArrayList<E>(size);
+    Collections.addAll(all, e1, e2, e3, e4, e5, e6);
+    Collections.addAll(all, remaining);
+    // This is messed up. See TODO at top of file.
+    return ofInternal(Ordering.natural(), (E[]) all.toArray(new Comparable[0]));
+  }
+
+  @Deprecated
+  public
+  static <E extends Comparable<? super E>> ImmutableSortedSet<E> of(
+      E[] elements) {
+    return copyOf(elements);
+  }
+
+  private static <E> ImmutableSortedSet<E> ofInternal(
+      Comparator<? super E> comparator, E... elements) {
+    checkNotNull(elements);
+    switch (elements.length) {
+      case 0:
+        return emptySet(comparator);
+      default:
+        SortedSet<E> delegate = new TreeSet<E>(comparator);
+        for (E element : elements) {
+          checkNotNull(element);
+          delegate.add(element);
+        }
+        return new RegularImmutableSortedSet<E>(delegate, false);
+    }
+  }
+
+  public static <E extends Comparable<? super E>> ImmutableSortedSet<E> copyOf(
+      Collection<? extends E> elements) {
+    return copyOfInternal(Ordering.natural(), elements, false);
+  }
+
+  public static <E extends Comparable<? super E>> ImmutableSortedSet<E> copyOf(
+      Iterable<? extends E> elements) {
+    return copyOfInternal(Ordering.natural(), elements, false);
+  }
+
+  public static <E extends Comparable<? super E>> ImmutableSortedSet<E> copyOf(
+      Iterator<? extends E> elements) {
+    return copyOfInternal(Ordering.natural(), elements);
+  }
+
+  public static <E extends Comparable<? super E>> ImmutableSortedSet<E> copyOf(
+      E[] elements) {
+    return ofInternal(Ordering.natural(), elements);
+  }
+
+  public static <E> ImmutableSortedSet<E> copyOf(
+      Comparator<? super E> comparator, Iterable<? extends E> elements) {
+    checkNotNull(comparator);
+    return copyOfInternal(comparator, elements, false);
+  }
+
+  public static <E> ImmutableSortedSet<E> copyOf(
+      Comparator<? super E> comparator, Collection<? extends E> elements) {
+    checkNotNull(comparator);
+    return copyOfInternal(comparator, elements, false);
+  }
+
+  public static <E> ImmutableSortedSet<E> copyOf(
+      Comparator<? super E> comparator, Iterator<? extends E> elements) {
+    checkNotNull(comparator);
+    return copyOfInternal(comparator, elements);
+  }
+
+  @SuppressWarnings("unchecked")
+  public static <E> ImmutableSortedSet<E> copyOfSorted(SortedSet<E> sortedSet) {
+    Comparator<? super E> comparator = sortedSet.comparator();
+    if (comparator == null) {
+      comparator = NATURAL_ORDER;
+    }
+    return copyOfInternal(comparator, sortedSet.iterator());
+  }
+
+  private static <E> ImmutableSortedSet<E> copyOfInternal(
+      Comparator<? super E> comparator, Iterable<? extends E> elements,
+      boolean fromSortedSet) {
+    checkNotNull(comparator);
+
+    boolean hasSameComparator
+        = fromSortedSet || hasSameComparator(elements, comparator);
+    if (hasSameComparator && (elements instanceof ImmutableSortedSet)) {
+      @SuppressWarnings("unchecked")
+      ImmutableSortedSet<E> result = (ImmutableSortedSet<E>) elements;
+      boolean isSubset = (result instanceof RegularImmutableSortedSet)
+          && ((RegularImmutableSortedSet) result).isSubset;
+      if (!isSubset) {
+        // Only return the original copy if this immutable sorted set isn't
+        // a subset of another, to avoid memory leak.
+        return result;
+      }
+    }
+    return copyOfInternal(comparator, elements.iterator());
+  }
+
+  private static <E> ImmutableSortedSet<E> copyOfInternal(
+      Comparator<? super E> comparator, Iterator<? extends E> elements) {
+    checkNotNull(comparator);
+    if (!elements.hasNext()) {
+      return emptySet(comparator);
+    }
+    SortedSet<E> delegate = new TreeSet<E>(comparator);
+    while (elements.hasNext()) {
+      E element = elements.next();
+      checkNotNull(element);
+      delegate.add(element);
+    }
+    return new RegularImmutableSortedSet<E>(delegate, false);
+  }
+
+  private static boolean hasSameComparator(
+      Iterable<?> elements, Comparator<?> comparator) {
+    if (elements instanceof SortedSet) {
+      SortedSet<?> sortedSet = (SortedSet<?>) elements;
+      Comparator<?> comparator2 = sortedSet.comparator();
+      return (comparator2 == null)
+          ? comparator == Ordering.natural()
+          : comparator.equals(comparator2);
+    }
+    return false;
+  }
+
+  // Assumes that delegate doesn't have null elements and comparator.
+  static <E> ImmutableSortedSet<E> unsafeDelegateSortedSet(
+      SortedSet<E> delegate, boolean isSubset) {
+    return delegate.isEmpty()
+        ? emptySet(delegate.comparator())
+        : new RegularImmutableSortedSet<E>(delegate, isSubset);
+  }
+
+  // This reference is only used by GWT compiler to infer the elements of the
+  // set that needs to be serialized.
+  private Comparator<E> unusedComparatorForSerialization;
+  private E unusedElementForSerialization;
+
+  private transient final SortedSet<E> sortedDelegate;
+
+  ImmutableSortedSet(Comparator<? super E> comparator) {
+    this(Sets.newTreeSet(comparator));
+  }
+
+  ImmutableSortedSet(SortedSet<E> sortedDelegate) {
+    super(sortedDelegate);
+    this.sortedDelegate = Collections.unmodifiableSortedSet(sortedDelegate);
+  }
+
+  public Comparator<? super E> comparator() {
+    return sortedDelegate.comparator();
+  }
+
+  @Override // needed to unify SortedIterable and Collection iterator() methods
+  public UnmodifiableIterator<E> iterator() {
+    return super.iterator();
+  }
+
+  @Override public boolean contains(@Nullable Object object) {
+    try {
+      // This set never contains null.  We need to explicitly check here
+      // because some comparator might throw NPE (e.g. the natural ordering).
+      return object != null && sortedDelegate.contains(object);
+    } catch (ClassCastException e) {
+      return false;
+    }
+  }
+
+  @Override public boolean containsAll(Collection<?> targets) {
+    for (Object target : targets) {
+      if (target == null) {
+        // This set never contains null.  We need to explicitly check here
+        // because some comparator might throw NPE (e.g. the natural ordering).
+        return false;
+      }
+    }
+    try {
+      return sortedDelegate.containsAll(targets);
+    } catch (ClassCastException e) {
+      return false;
+    }
+  }
+
+  public E first() {
+    return sortedDelegate.first();
+  }
+
+  public ImmutableSortedSet<E> headSet(E toElement) {
+    checkNotNull(toElement);
+    try {
+      return unsafeDelegateSortedSet(sortedDelegate.headSet(toElement), true);
+    } catch (IllegalArgumentException e) {
+      return emptySet(comparator());
+    }
+  }
+
+  E higher(E e) {
+    checkNotNull(e);
+    Iterator<E> iterator = tailSet(e).iterator();
+    while (iterator.hasNext()) {
+      E higher = iterator.next();
+      if (comparator().compare(e, higher) < 0) {
+        return higher;
+      }
+    }
+    return null;
+  }
+
+  ImmutableSortedSet<E> headSet(E toElement, boolean inclusive) {
+    checkNotNull(toElement);
+    if (inclusive) {
+      E tmp = higher(toElement);
+      if (tmp == null) {
+        return this;
+      }
+      toElement = tmp;
+    }
+    return headSet(toElement);
+  }
+
+  public E last() {
+    return sortedDelegate.last();
+  }
+
+  public ImmutableSortedSet<E> subSet(E fromElement, E toElement) {
+    return subSet(fromElement, true, toElement, false);
+  }
+
+  ImmutableSortedSet<E> subSet(E fromElement, boolean fromInclusive, E toElement,
+      boolean toInclusive) {
+    checkNotNull(fromElement);
+    checkNotNull(toElement);
+    int cmp = comparator().compare(fromElement, toElement);
+    checkArgument(cmp <= 0, "fromElement (%s) is less than toElement (%s)", fromElement, toElement);
+    if (cmp == 0 && !(fromInclusive && toInclusive)) {
+      return emptySet(comparator());
+    }
+    return tailSet(fromElement, fromInclusive).headSet(toElement, toInclusive);
+  }
+
+  public ImmutableSortedSet<E> tailSet(E fromElement) {
+    checkNotNull(fromElement);
+    try {
+      return unsafeDelegateSortedSet(sortedDelegate.tailSet(fromElement), true);
+    } catch (IllegalArgumentException e) {
+      return emptySet(comparator());
+    }
+  }
+
+  ImmutableSortedSet<E> tailSet(E fromElement, boolean inclusive) {
+    checkNotNull(fromElement);
+    if (!inclusive) {
+      E tmp = higher(fromElement);
+      if (tmp == null) {
+        return emptySet(comparator());
+      }
+      fromElement = tmp;
+    }
+    return tailSet(fromElement);
+  }
+
+  public static <E> Builder<E> orderedBy(Comparator<E> comparator) {
+    return new Builder<E>(comparator);
+  }
+
+  public static <E extends Comparable<E>> Builder<E> reverseOrder() {
+    return new Builder<E>(Ordering.natural().reverse());
+  }
+
+  public static <E extends Comparable<E>> Builder<E> naturalOrder() {
+    return new Builder<E>(Ordering.natural());
+  }
+
+  public static final class Builder<E> extends ImmutableSet.Builder<E> {
+    private final Comparator<? super E> comparator;
+
+    public Builder(Comparator<? super E> comparator) {
+      this.comparator = checkNotNull(comparator);
+    }
+
+    @Override public Builder<E> add(E element) {
+      super.add(element);
+      return this;
+    }
+
+    @Override public Builder<E> add(E... elements) {
+      super.add(elements);
+      return this;
+    }
+
+    @Override public Builder<E> addAll(Iterable<? extends E> elements) {
+      super.addAll(elements);
+      return this;
+    }
+
+    @Override public Builder<E> addAll(Iterator<? extends E> elements) {
+      super.addAll(elements);
+      return this;
+    }
+
+    @Override public ImmutableSortedSet<E> build() {
+      return copyOfInternal(comparator, contents.iterator());
+    }
+  }
+}
diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/Iterables.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/Iterables.java
new file mode 100644
index 0000000..1299a62
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/Iterables.java
@@ -0,0 +1,1090 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Function;
+import com.google.common.base.Objects;
+import com.google.common.base.Optional;
+import com.google.common.base.Preconditions;
+import com.google.common.base.Predicate;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+import java.util.NoSuchElementException;
+import java.util.Queue;
+import java.util.RandomAccess;
+import java.util.Set;
+import java.util.SortedSet;
+
+import javax.annotation.Nullable;
+
+/**
+ * This class contains static utility methods that operate on or return objects
+ * of type {@code Iterable}. Except as noted, each method has a corresponding
+ * {@link Iterator}-based method in the {@link Iterators} class.
+ *
+ * <p><i>Performance notes:</i> Unless otherwise noted, all of the iterables
+ * produced in this class are <i>lazy</i>, which means that their iterators
+ * only advance the backing iteration when absolutely necessary.
+ *
+ * @author Kevin Bourrillion
+ * @author Jared Levy
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible(emulated = true)
+public final class Iterables {
+  private Iterables() {}
+
+  /** Returns an unmodifiable view of {@code iterable}. */
+  public static <T> Iterable<T> unmodifiableIterable(
+      final Iterable<T> iterable) {
+    checkNotNull(iterable);
+    if (iterable instanceof UnmodifiableIterable ||
+        iterable instanceof ImmutableCollection) {
+      return iterable;
+    }
+    return new UnmodifiableIterable<T>(iterable);
+  }
+
+  /**
+   * Simply returns its argument.
+   *
+   * @deprecated no need to use this
+   * @since 10.0
+   */
+  @Deprecated public static <E> Iterable<E> unmodifiableIterable(
+      ImmutableCollection<E> iterable) {
+    return checkNotNull(iterable);
+  }
+
+  private static final class UnmodifiableIterable<T> implements Iterable<T> {
+    private final Iterable<T> iterable;
+
+    private UnmodifiableIterable(Iterable<T> iterable) {
+      this.iterable = iterable;
+    }
+
+    @Override
+    public Iterator<T> iterator() {
+      return Iterators.unmodifiableIterator(iterable.iterator());
+    }
+
+    @Override
+    public String toString() {
+      return iterable.toString();
+    }
+    // no equals and hashCode; it would break the contract!
+  }
+
+  /**
+   * Returns the number of elements in {@code iterable}.
+   */
+  public static int size(Iterable<?> iterable) {
+    return (iterable instanceof Collection)
+        ? ((Collection<?>) iterable).size()
+        : Iterators.size(iterable.iterator());
+  }
+
+  /**
+   * Returns {@code true} if {@code iterable} contains {@code element}; that is,
+   * any object for which {@code equals(element)} is true.
+   */
+  public static boolean contains(Iterable<?> iterable, @Nullable Object element)
+  {
+    if (iterable instanceof Collection) {
+      Collection<?> collection = (Collection<?>) iterable;
+      try {
+        return collection.contains(element);
+      } catch (NullPointerException e) {
+        return false;
+      } catch (ClassCastException e) {
+        return false;
+      }
+    }
+    return Iterators.contains(iterable.iterator(), element);
+  }
+
+  /**
+   * Removes, from an iterable, every element that belongs to the provided
+   * collection.
+   *
+   * <p>This method calls {@link Collection#removeAll} if {@code iterable} is a
+   * collection, and {@link Iterators#removeAll} otherwise.
+   *
+   * @param removeFrom the iterable to (potentially) remove elements from
+   * @param elementsToRemove the elements to remove
+   * @return {@code true} if any element was removed from {@code iterable}
+   */
+  public static boolean removeAll(
+      Iterable<?> removeFrom, Collection<?> elementsToRemove) {
+    return (removeFrom instanceof Collection)
+        ? ((Collection<?>) removeFrom).removeAll(checkNotNull(elementsToRemove))
+        : Iterators.removeAll(removeFrom.iterator(), elementsToRemove);
+  }
+
+  /**
+   * Removes, from an iterable, every element that does not belong to the
+   * provided collection.
+   *
+   * <p>This method calls {@link Collection#retainAll} if {@code iterable} is a
+   * collection, and {@link Iterators#retainAll} otherwise.
+   *
+   * @param removeFrom the iterable to (potentially) remove elements from
+   * @param elementsToRetain the elements to retain
+   * @return {@code true} if any element was removed from {@code iterable}
+   */
+  public static boolean retainAll(
+      Iterable<?> removeFrom, Collection<?> elementsToRetain) {
+    return (removeFrom instanceof Collection)
+        ? ((Collection<?>) removeFrom).retainAll(checkNotNull(elementsToRetain))
+        : Iterators.retainAll(removeFrom.iterator(), elementsToRetain);
+  }
+
+  /**
+   * Removes, from an iterable, every element that satisfies the provided
+   * predicate.
+   *
+   * @param removeFrom the iterable to (potentially) remove elements from
+   * @param predicate a predicate that determines whether an element should
+   *     be removed
+   * @return {@code true} if any elements were removed from the iterable
+   *
+   * @throws UnsupportedOperationException if the iterable does not support
+   *     {@code remove()}.
+   * @since 2.0
+   */
+  public static <T> boolean removeIf(
+      Iterable<T> removeFrom, Predicate<? super T> predicate) {
+    if (removeFrom instanceof RandomAccess && removeFrom instanceof List) {
+      return removeIfFromRandomAccessList(
+          (List<T>) removeFrom, checkNotNull(predicate));
+    }
+    return Iterators.removeIf(removeFrom.iterator(), predicate);
+  }
+
+  private static <T> boolean removeIfFromRandomAccessList(
+      List<T> list, Predicate<? super T> predicate) {
+    // Note: Not all random access lists support set() so we need to deal with
+    // those that don't and attempt the slower remove() based solution.
+    int from = 0;
+    int to = 0;
+
+    for (; from < list.size(); from++) {
+      T element = list.get(from);
+      if (!predicate.apply(element)) {
+        if (from > to) {
+          try {
+            list.set(to, element);
+          } catch (UnsupportedOperationException e) {
+            slowRemoveIfForRemainingElements(list, predicate, to, from);
+            return true;
+          }
+        }
+        to++;
+      }
+    }
+
+    // Clear the tail of any remaining items
+    list.subList(to, list.size()).clear();
+    return from != to;
+  }
+
+  private static <T> void slowRemoveIfForRemainingElements(List<T> list,
+      Predicate<? super T> predicate, int to, int from) {
+    // Here we know that:
+    // * (to < from) and that both are valid indices.
+    // * Everything with (index < to) should be kept.
+    // * Everything with (to <= index < from) should be removed.
+    // * The element with (index == from) should be kept.
+    // * Everything with (index > from) has not been checked yet.
+
+    // Check from the end of the list backwards (minimize expected cost of
+    // moving elements when remove() is called). Stop before 'from' because
+    // we already know that should be kept.
+    for (int n = list.size() - 1; n > from; n--) {
+      if (predicate.apply(list.get(n))) {
+        list.remove(n);
+      }
+    }
+    // And now remove everything in the range [to, from) (going backwards).
+    for (int n = from - 1; n >= to; n--) {
+      list.remove(n);
+    }
+  }
+
+  /**
+   * Determines whether two iterables contain equal elements in the same order.
+   * More specifically, this method returns {@code true} if {@code iterable1}
+   * and {@code iterable2} contain the same number of elements and every element
+   * of {@code iterable1} is equal to the corresponding element of
+   * {@code iterable2}.
+   */
+  public static boolean elementsEqual(
+      Iterable<?> iterable1, Iterable<?> iterable2) {
+    return Iterators.elementsEqual(iterable1.iterator(), iterable2.iterator());
+  }
+
+  /**
+   * Returns a string representation of {@code iterable}, with the format
+   * {@code [e1, e2, ..., en]}.
+   */
+  public static String toString(Iterable<?> iterable) {
+    return Iterators.toString(iterable.iterator());
+  }
+
+  /**
+   * Returns the single element contained in {@code iterable}.
+   *
+   * @throws NoSuchElementException if the iterable is empty
+   * @throws IllegalArgumentException if the iterable contains multiple
+   *     elements
+   */
+  public static <T> T getOnlyElement(Iterable<T> iterable) {
+    return Iterators.getOnlyElement(iterable.iterator());
+  }
+
+  /**
+   * Returns the single element contained in {@code iterable}, or {@code
+   * defaultValue} if the iterable is empty.
+   *
+   * @throws IllegalArgumentException if the iterator contains multiple
+   *     elements
+   */
+  public static <T> T getOnlyElement(
+      Iterable<T> iterable, @Nullable T defaultValue) {
+    return Iterators.getOnlyElement(iterable.iterator(), defaultValue);
+  }
+
+  /**
+   * Copies an iterable's elements into an array.
+   *
+   * @param iterable the iterable to copy
+   * @return a newly-allocated array into which all the elements of the iterable
+   *     have been copied
+   */
+  static Object[] toArray(Iterable<?> iterable) {
+    return toCollection(iterable).toArray();
+  }
+
+  /**
+   * Converts an iterable into a collection. If the iterable is already a
+   * collection, it is returned. Otherwise, an {@link java.util.ArrayList} is
+   * created with the contents of the iterable in the same iteration order.
+   */
+  private static <E> Collection<E> toCollection(Iterable<E> iterable) {
+    return (iterable instanceof Collection)
+        ? (Collection<E>) iterable
+        : Lists.newArrayList(iterable.iterator());
+  }
+
+  /**
+   * Adds all elements in {@code iterable} to {@code collection}.
+   *
+   * @return {@code true} if {@code collection} was modified as a result of this
+   *     operation.
+   */
+  public static <T> boolean addAll(
+      Collection<T> addTo, Iterable<? extends T> elementsToAdd) {
+    if (elementsToAdd instanceof Collection) {
+      Collection<? extends T> c = Collections2.cast(elementsToAdd);
+      return addTo.addAll(c);
+    }
+    return Iterators.addAll(addTo, elementsToAdd.iterator());
+  }
+
+  /**
+   * Returns the number of elements in the specified iterable that equal the
+   * specified object. This implementation avoids a full iteration when the
+   * iterable is a {@link Multiset} or {@link Set}.
+   *
+   * @see Collections#frequency
+   */
+  public static int frequency(Iterable<?> iterable, @Nullable Object element) {
+    if ((iterable instanceof Multiset)) {
+      return ((Multiset<?>) iterable).count(element);
+    }
+    if ((iterable instanceof Set)) {
+      return ((Set<?>) iterable).contains(element) ? 1 : 0;
+    }
+    return Iterators.frequency(iterable.iterator(), element);
+  }
+
+  /**
+   * Returns an iterable whose iterators cycle indefinitely over the elements of
+   * {@code iterable}.
+   *
+   * <p>That iterator supports {@code remove()} if {@code iterable.iterator()}
+   * does. After {@code remove()} is called, subsequent cycles omit the removed
+   * element, which is no longer in {@code iterable}. The iterator's
+   * {@code hasNext()} method returns {@code true} until {@code iterable} is
+   * empty.
+   *
+   * <p><b>Warning:</b> Typical uses of the resulting iterator may produce an
+   * infinite loop. You should use an explicit {@code break} or be certain that
+   * you will eventually remove all the elements.
+   *
+   * <p>To cycle over the iterable {@code n} times, use the following:
+   * {@code Iterables.concat(Collections.nCopies(n, iterable))}
+   */
+  public static <T> Iterable<T> cycle(final Iterable<T> iterable) {
+    checkNotNull(iterable);
+    return new Iterable<T>() {
+      @Override
+      public Iterator<T> iterator() {
+        return Iterators.cycle(iterable);
+      }
+      @Override public String toString() {
+        return iterable.toString() + " (cycled)";
+      }
+    };
+  }
+
+  /**
+   * Returns an iterable whose iterators cycle indefinitely over the provided
+   * elements.
+   *
+   * <p>After {@code remove} is invoked on a generated iterator, the removed
+   * element will no longer appear in either that iterator or any other iterator
+   * created from the same source iterable. That is, this method behaves exactly
+   * as {@code Iterables.cycle(Lists.newArrayList(elements))}. The iterator's
+   * {@code hasNext} method returns {@code true} until all of the original
+   * elements have been removed.
+   *
+   * <p><b>Warning:</b> Typical uses of the resulting iterator may produce an
+   * infinite loop. You should use an explicit {@code break} or be certain that
+   * you will eventually remove all the elements.
+   *
+   * <p>To cycle over the elements {@code n} times, use the following:
+   * {@code Iterables.concat(Collections.nCopies(n, Arrays.asList(elements)))}
+   */
+  public static <T> Iterable<T> cycle(T... elements) {
+    return cycle(Lists.newArrayList(elements));
+  }
+
+  /**
+   * Combines two iterables into a single iterable. The returned iterable has an
+   * iterator that traverses the elements in {@code a}, followed by the elements
+   * in {@code b}. The source iterators are not polled until necessary.
+   *
+   * <p>The returned iterable's iterator supports {@code remove()} when the
+   * corresponding input iterator supports it.
+   */
+  @SuppressWarnings("unchecked")
+  public static <T> Iterable<T> concat(
+      Iterable<? extends T> a, Iterable<? extends T> b) {
+    checkNotNull(a);
+    checkNotNull(b);
+    return concat(Arrays.asList(a, b));
+  }
+
+  /**
+   * Combines three iterables into a single iterable. The returned iterable has
+   * an iterator that traverses the elements in {@code a}, followed by the
+   * elements in {@code b}, followed by the elements in {@code c}. The source
+   * iterators are not polled until necessary.
+   *
+   * <p>The returned iterable's iterator supports {@code remove()} when the
+   * corresponding input iterator supports it.
+   */
+  @SuppressWarnings("unchecked")
+  public static <T> Iterable<T> concat(Iterable<? extends T> a,
+      Iterable<? extends T> b, Iterable<? extends T> c) {
+    checkNotNull(a);
+    checkNotNull(b);
+    checkNotNull(c);
+    return concat(Arrays.asList(a, b, c));
+  }
+
+  /**
+   * Combines four iterables into a single iterable. The returned iterable has
+   * an iterator that traverses the elements in {@code a}, followed by the
+   * elements in {@code b}, followed by the elements in {@code c}, followed by
+   * the elements in {@code d}. The source iterators are not polled until
+   * necessary.
+   *
+   * <p>The returned iterable's iterator supports {@code remove()} when the
+   * corresponding input iterator supports it.
+   */
+  @SuppressWarnings("unchecked")
+  public static <T> Iterable<T> concat(Iterable<? extends T> a,
+      Iterable<? extends T> b, Iterable<? extends T> c,
+      Iterable<? extends T> d) {
+    checkNotNull(a);
+    checkNotNull(b);
+    checkNotNull(c);
+    checkNotNull(d);
+    return concat(Arrays.asList(a, b, c, d));
+  }
+
+  /**
+   * Combines multiple iterables into a single iterable. The returned iterable
+   * has an iterator that traverses the elements of each iterable in
+   * {@code inputs}. The input iterators are not polled until necessary.
+   *
+   * <p>The returned iterable's iterator supports {@code remove()} when the
+   * corresponding input iterator supports it.
+   *
+   * @throws NullPointerException if any of the provided iterables is null
+   */
+  public static <T> Iterable<T> concat(Iterable<? extends T>... inputs) {
+    return concat(ImmutableList.copyOf(inputs));
+  }
+
+  /**
+   * Combines multiple iterables into a single iterable. The returned iterable
+   * has an iterator that traverses the elements of each iterable in
+   * {@code inputs}. The input iterators are not polled until necessary.
+   *
+   * <p>The returned iterable's iterator supports {@code remove()} when the
+   * corresponding input iterator supports it. The methods of the returned
+   * iterable may throw {@code NullPointerException} if any of the input
+   * iterators is null.
+   */
+  public static <T> Iterable<T> concat(
+      final Iterable<? extends Iterable<? extends T>> inputs) {
+    checkNotNull(inputs);
+    return new IterableWithToString<T>() {
+      @Override
+      public Iterator<T> iterator() {
+        return Iterators.concat(iterators(inputs));
+      }
+    };
+  }
+
+  /**
+   * Returns an iterator over the iterators of the given iterables.
+   */
+  private static <T> UnmodifiableIterator<Iterator<? extends T>> iterators(
+      Iterable<? extends Iterable<? extends T>> iterables) {
+    final Iterator<? extends Iterable<? extends T>> iterableIterator =
+        iterables.iterator();
+    return new UnmodifiableIterator<Iterator<? extends T>>() {
+      @Override
+      public boolean hasNext() {
+        return iterableIterator.hasNext();
+      }
+      @Override
+      public Iterator<? extends T> next() {
+        return iterableIterator.next().iterator();
+      }
+    };
+  }
+
+  /**
+   * Divides an iterable into unmodifiable sublists of the given size (the final
+   * iterable may be smaller). For example, partitioning an iterable containing
+   * {@code [a, b, c, d, e]} with a partition size of 3 yields {@code
+   * [[a, b, c], [d, e]]} -- an outer iterable containing two inner lists of
+   * three and two elements, all in the original order.
+   *
+   * <p>Iterators returned by the returned iterable do not support the {@link
+   * Iterator#remove()} method. The returned lists implement {@link
+   * RandomAccess}, whether or not the input list does.
+   *
+   * <p><b>Note:</b> if {@code iterable} is a {@link List}, use {@link
+   * Lists#partition(List, int)} instead.
+   *
+   * @param iterable the iterable to return a partitioned view of
+   * @param size the desired size of each partition (the last may be smaller)
+   * @return an iterable of unmodifiable lists containing the elements of {@code
+   *     iterable} divided into partitions
+   * @throws IllegalArgumentException if {@code size} is nonpositive
+   */
+  public static <T> Iterable<List<T>> partition(
+      final Iterable<T> iterable, final int size) {
+    checkNotNull(iterable);
+    checkArgument(size > 0);
+    return new IterableWithToString<List<T>>() {
+      @Override
+      public Iterator<List<T>> iterator() {
+        return Iterators.partition(iterable.iterator(), size);
+      }
+    };
+  }
+
+  /**
+   * Divides an iterable into unmodifiable sublists of the given size, padding
+   * the final iterable with null values if necessary. For example, partitioning
+   * an iterable containing {@code [a, b, c, d, e]} with a partition size of 3
+   * yields {@code [[a, b, c], [d, e, null]]} -- an outer iterable containing
+   * two inner lists of three elements each, all in the original order.
+   *
+   * <p>Iterators returned by the returned iterable do not support the {@link
+   * Iterator#remove()} method.
+   *
+   * @param iterable the iterable to return a partitioned view of
+   * @param size the desired size of each partition
+   * @return an iterable of unmodifiable lists containing the elements of {@code
+   *     iterable} divided into partitions (the final iterable may have
+   *     trailing null elements)
+   * @throws IllegalArgumentException if {@code size} is nonpositive
+   */
+  public static <T> Iterable<List<T>> paddedPartition(
+      final Iterable<T> iterable, final int size) {
+    checkNotNull(iterable);
+    checkArgument(size > 0);
+    return new IterableWithToString<List<T>>() {
+      @Override
+      public Iterator<List<T>> iterator() {
+        return Iterators.paddedPartition(iterable.iterator(), size);
+      }
+    };
+  }
+
+  /**
+   * Returns the elements of {@code unfiltered} that satisfy a predicate. The
+   * resulting iterable's iterator does not support {@code remove()}.
+   */
+  public static <T> Iterable<T> filter(
+      final Iterable<T> unfiltered, final Predicate<? super T> predicate) {
+    checkNotNull(unfiltered);
+    checkNotNull(predicate);
+    return new IterableWithToString<T>() {
+      @Override
+      public Iterator<T> iterator() {
+        return Iterators.filter(unfiltered.iterator(), predicate);
+      }
+    };
+  }
+
+  /**
+   * Returns {@code true} if one or more elements in {@code iterable} satisfy
+   * the predicate.
+   */
+  public static <T> boolean any(
+      Iterable<T> iterable, Predicate<? super T> predicate) {
+    return Iterators.any(iterable.iterator(), predicate);
+  }
+
+  /**
+   * Returns {@code true} if every element in {@code iterable} satisfies the
+   * predicate. If {@code iterable} is empty, {@code true} is returned.
+   */
+  public static <T> boolean all(
+      Iterable<T> iterable, Predicate<? super T> predicate) {
+    return Iterators.all(iterable.iterator(), predicate);
+  }
+
+  /**
+   * Returns the first element in {@code iterable} that satisfies the given
+   * predicate; use this method only when such an element is known to exist. If
+   * it is possible that <i>no</i> element will match, use {@link
+   * #tryFind)} or {@link #find(Iterable, Predicate, T)} instead.
+   *
+   * @throws NoSuchElementException if no element in {@code iterable} matches
+   *     the given predicate
+   */
+  public static <T> T find(Iterable<T> iterable,
+      Predicate<? super T> predicate) {
+    return Iterators.find(iterable.iterator(), predicate);
+  }
+
+  /**
+   * Returns the first element in {@code iterable} that satisfies the given
+   * predicate, or {@code defaultValue} if none found. Note that this can
+   * usually be handled more naturally using {@code
+   * tryFind(iterable, predicate).or(defaultValue)}.
+   *
+   * @since 7.0
+   */
+  public static <T> T find(Iterable<T> iterable,
+      Predicate<? super T> predicate, @Nullable T defaultValue) {
+    return Iterators.find(iterable.iterator(), predicate, defaultValue);
+  }
+
+  /**
+   * Returns an {@link Optional} containing the first element in {@code
+   * iterable} that satisfies the given predicate, if such an element exists.
+   *
+   * <p><b>Warning:</b> avoid using a {@code predicate} that matches {@code
+   * null}. If {@code null} is matched in {@code iterable}, a
+   * NullPointerException will be thrown.
+   *
+   * @since 11.0
+   */
+  public static <T> Optional<T> tryFind(Iterable<T> iterable,
+      Predicate<? super T> predicate) {
+    return Iterators.tryFind(iterable.iterator(), predicate);
+  }
+
+  /**
+   * Returns the index in {@code iterable} of the first element that satisfies
+   * the provided {@code predicate}, or {@code -1} if the Iterable has no such
+   * elements.
+   *
+   * <p>More formally, returns the lowest index {@code i} such that
+   * {@code predicate.apply(Iterables.get(iterable, i))} returns {@code true},
+   * or {@code -1} if there is no such index.
+   *
+   * @since 2.0
+   */
+  public static <T> int indexOf(
+      Iterable<T> iterable, Predicate<? super T> predicate) {
+    return Iterators.indexOf(iterable.iterator(), predicate);
+  }
+
+  /**
+   * Returns an iterable that applies {@code function} to each element of {@code
+   * fromIterable}.
+   *
+   * <p>The returned iterable's iterator supports {@code remove()} if the
+   * provided iterator does. After a successful {@code remove()} call,
+   * {@code fromIterable} no longer contains the corresponding element.
+   *
+   * <p>If the input {@code Iterable} is known to be a {@code List} or other
+   * {@code Collection}, consider {@link Lists#transform} and {@link
+   * Collections2#transform}.
+   */
+  public static <F, T> Iterable<T> transform(final Iterable<F> fromIterable,
+      final Function<? super F, ? extends T> function) {
+    checkNotNull(fromIterable);
+    checkNotNull(function);
+    return new IterableWithToString<T>() {
+      @Override
+      public Iterator<T> iterator() {
+        return Iterators.transform(fromIterable.iterator(), function);
+      }
+    };
+  }
+
+  /**
+   * Returns the element at the specified position in an iterable.
+   *
+   * @param position position of the element to return
+   * @return the element at the specified position in {@code iterable}
+   * @throws IndexOutOfBoundsException if {@code position} is negative or
+   *     greater than or equal to the size of {@code iterable}
+   */
+  public static <T> T get(Iterable<T> iterable, int position) {
+    checkNotNull(iterable);
+    if (iterable instanceof List) {
+      return ((List<T>) iterable).get(position);
+    }
+
+    if (iterable instanceof Collection) {
+      // Can check both ends
+      Collection<T> collection = (Collection<T>) iterable;
+      Preconditions.checkElementIndex(position, collection.size());
+    } else {
+      // Can only check the lower end
+      checkNonnegativeIndex(position);
+    }
+    return Iterators.get(iterable.iterator(), position);
+  }
+
+  private static void checkNonnegativeIndex(int position) {
+    if (position < 0) {
+      throw new IndexOutOfBoundsException(
+          "position cannot be negative: " + position);
+    }
+  }
+
+  /**
+   * Returns the element at the specified position in an iterable or a default
+   * value otherwise.
+   *
+   * @param position position of the element to return
+   * @param defaultValue the default value to return if {@code position} is
+   *     greater than or equal to the size of the iterable
+   * @return the element at the specified position in {@code iterable} or
+   *     {@code defaultValue} if {@code iterable} contains fewer than
+   *     {@code position + 1} elements.
+   * @throws IndexOutOfBoundsException if {@code position} is negative
+   * @since 4.0
+   */
+  public static <T> T get(Iterable<T> iterable, int position,
+      @Nullable T defaultValue) {
+    checkNotNull(iterable);
+    checkNonnegativeIndex(position);
+
+    try {
+      return get(iterable, position);
+    } catch (IndexOutOfBoundsException e) {
+      return defaultValue;
+    }
+  }
+
+  /**
+   * Returns the first element in {@code iterable} or {@code defaultValue} if
+   * the iterable is empty.  The {@link Iterators} analog to this method is
+   * {@link Iterators#getNext}.
+   *
+   * @param defaultValue the default value to return if the iterable is empty
+   * @return the first element of {@code iterable} or the default value
+   * @since 7.0
+   */
+  public static <T> T getFirst(Iterable<T> iterable, @Nullable T defaultValue) {
+    return Iterators.getNext(iterable.iterator(), defaultValue);
+  }
+
+  /**
+   * Returns the last element of {@code iterable}.
+   *
+   * @return the last element of {@code iterable}
+   * @throws NoSuchElementException if the iterable is empty
+   */
+  public static <T> T getLast(Iterable<T> iterable) {
+    // TODO(kevinb): Support a concurrently modified collection?
+    if (iterable instanceof List) {
+      List<T> list = (List<T>) iterable;
+      if (list.isEmpty()) {
+        throw new NoSuchElementException();
+      }
+      return getLastInNonemptyList(list);
+    }
+
+    /*
+     * TODO(kevinb): consider whether this "optimization" is worthwhile. Users
+     * with SortedSets tend to know they are SortedSets and probably would not
+     * call this method.
+     */
+    if (iterable instanceof SortedSet) {
+      SortedSet<T> sortedSet = (SortedSet<T>) iterable;
+      return sortedSet.last();
+    }
+
+    return Iterators.getLast(iterable.iterator());
+  }
+
+  /**
+   * Returns the last element of {@code iterable} or {@code defaultValue} if
+   * the iterable is empty.
+   *
+   * @param defaultValue the value to return if {@code iterable} is empty
+   * @return the last element of {@code iterable} or the default value
+   * @since 3.0
+   */
+  public static <T> T getLast(Iterable<T> iterable, @Nullable T defaultValue) {
+    if (iterable instanceof Collection) {
+      Collection<T> collection = (Collection<T>) iterable;
+      if (collection.isEmpty()) {
+        return defaultValue;
+      }
+    }
+
+    if (iterable instanceof List) {
+      List<T> list = (List<T>) iterable;
+      return getLastInNonemptyList(list);
+    }
+
+    /*
+     * TODO(kevinb): consider whether this "optimization" is worthwhile. Users
+     * with SortedSets tend to know they are SortedSets and probably would not
+     * call this method.
+     */
+    if (iterable instanceof SortedSet) {
+      SortedSet<T> sortedSet = (SortedSet<T>) iterable;
+      return sortedSet.last();
+    }
+
+    return Iterators.getLast(iterable.iterator(), defaultValue);
+  }
+
+  private static <T> T getLastInNonemptyList(List<T> list) {
+    return list.get(list.size() - 1);
+  }
+
+  /**
+   * Returns a view of {@code iterable} that skips its first
+   * {@code numberToSkip} elements. If {@code iterable} contains fewer than
+   * {@code numberToSkip} elements, the returned iterable skips all of its
+   * elements.
+   *
+   * <p>Modifications to the underlying {@link Iterable} before a call to
+   * {@code iterator()} are reflected in the returned iterator. That is, the
+   * iterator skips the first {@code numberToSkip} elements that exist when the
+   * {@code Iterator} is created, not when {@code skip()} is called.
+   *
+   * <p>The returned iterable's iterator supports {@code remove()} if the
+   * iterator of the underlying iterable supports it. Note that it is
+   * <i>not</i> possible to delete the last skipped element by immediately
+   * calling {@code remove()} on that iterator, as the {@code Iterator}
+   * contract states that a call to {@code remove()} before a call to
+   * {@code next()} will throw an {@link IllegalStateException}.
+   *
+   * @since 3.0
+   */
+  public static <T> Iterable<T> skip(final Iterable<T> iterable,
+      final int numberToSkip) {
+    checkNotNull(iterable);
+    checkArgument(numberToSkip >= 0, "number to skip cannot be negative");
+
+    if (iterable instanceof List) {
+      final List<T> list = (List<T>) iterable;
+      return new IterableWithToString<T>() {
+        @Override
+        public Iterator<T> iterator() {
+          // TODO(kevinb): Support a concurrently modified collection?
+          return (numberToSkip >= list.size())
+              ? Iterators.<T>emptyIterator()
+              : list.subList(numberToSkip, list.size()).iterator();
+        }
+      };
+    }
+
+    return new IterableWithToString<T>() {
+      @Override
+      public Iterator<T> iterator() {
+        final Iterator<T> iterator = iterable.iterator();
+
+        Iterators.skip(iterator, numberToSkip);
+
+        /*
+         * We can't just return the iterator because an immediate call to its
+         * remove() method would remove one of the skipped elements instead of
+         * throwing an IllegalStateException.
+         */
+        return new Iterator<T>() {
+          boolean atStart = true;
+
+          @Override
+          public boolean hasNext() {
+            return iterator.hasNext();
+          }
+
+          @Override
+          public T next() {
+            if (!hasNext()) {
+              throw new NoSuchElementException();
+            }
+
+            try {
+              return iterator.next();
+            } finally {
+              atStart = false;
+            }
+          }
+
+          @Override
+          public void remove() {
+            if (atStart) {
+              throw new IllegalStateException();
+            }
+            iterator.remove();
+          }
+        };
+      }
+    };
+  }
+
+  /**
+   * Creates an iterable with the first {@code limitSize} elements of the given
+   * iterable. If the original iterable does not contain that many elements, the
+   * returned iterator will have the same behavior as the original iterable. The
+   * returned iterable's iterator supports {@code remove()} if the original
+   * iterator does.
+   *
+   * @param iterable the iterable to limit
+   * @param limitSize the maximum number of elements in the returned iterator
+   * @throws IllegalArgumentException if {@code limitSize} is negative
+   * @since 3.0
+   */
+  public static <T> Iterable<T> limit(
+      final Iterable<T> iterable, final int limitSize) {
+    checkNotNull(iterable);
+    checkArgument(limitSize >= 0, "limit is negative");
+    return new IterableWithToString<T>() {
+      @Override
+      public Iterator<T> iterator() {
+        return Iterators.limit(iterable.iterator(), limitSize);
+      }
+    };
+  }
+
+  /**
+   * Returns a view of the supplied iterable that wraps each generated
+   * {@link Iterator} through {@link Iterators#consumingIterator(Iterator)}.
+   *
+   * <p>Note: If {@code iterable} is a {@link Queue}, the returned iterable will
+   * get entries from {@link Queue#remove()} since {@link Queue}'s iteration
+   * order is undefined.  Calling {@link Iterator#hasNext()} on a generated
+   * iterator from the returned iterable may cause an item to be immediately
+   * dequeued for return on a subsequent call to {@link Iterator#next()}.
+   *
+   * @param iterable the iterable to wrap
+   * @return a view of the supplied iterable that wraps each generated iterator
+   *     through {@link Iterators#consumingIterator(Iterator)}; for queues,
+   *     an iterable that generates iterators that return and consume the
+   *     queue's elements in queue order
+   *
+   * @see Iterators#consumingIterator(Iterator)
+   * @since 2.0
+   */
+  public static <T> Iterable<T> consumingIterable(final Iterable<T> iterable) {
+    if (iterable instanceof Queue) {
+      return new Iterable<T>() {
+        @Override
+        public Iterator<T> iterator() {
+          return new ConsumingQueueIterator<T>((Queue<T>) iterable);
+        }
+      };
+    }
+
+    checkNotNull(iterable);
+
+    return new Iterable<T>() {
+      @Override
+      public Iterator<T> iterator() {
+        return Iterators.consumingIterator(iterable.iterator());
+      }
+    };
+  }
+
+  private static class ConsumingQueueIterator<T> extends AbstractIterator<T> {
+    private final Queue<T> queue;
+
+    private ConsumingQueueIterator(Queue<T> queue) {
+      this.queue = queue;
+    }
+
+    @Override public T computeNext() {
+      try {
+        return queue.remove();
+      } catch (NoSuchElementException e) {
+        return endOfData();
+      }
+    }
+  }
+
+  // Methods only in Iterables, not in Iterators
+
+  /**
+   * Adapts a list to an iterable with reversed iteration order. It is
+   * especially useful in foreach-style loops: <pre>   {@code
+   *
+   *   List<String> mylist = ...
+   *   for (String str : Iterables.reverse(mylist)) {
+   *     ...
+   *   }}</pre>
+   *
+   * There is no corresponding method in {@link Iterators}, since {@link
+   * Iterable#iterator} can simply be invoked on the result of calling this
+   * method.
+   *
+   * @return an iterable with the same elements as the list, in reverse
+   *
+   * @deprecated use {@link Lists#reverse(List)} or {@link
+   *     ImmutableList#reverse()}. <b>This method is scheduled for deletion in
+   *     July 2012.</b>
+   */
+  @Deprecated
+  public static <T> Iterable<T> reverse(final List<T> list) {
+    return Lists.reverse(list);
+  }
+
+  /**
+   * Determines if the given iterable contains no elements.
+   *
+   * <p>There is no precise {@link Iterator} equivalent to this method, since
+   * one can only ask an iterator whether it has any elements <i>remaining</i>
+   * (which one does using {@link Iterator#hasNext}).
+   *
+   * @return {@code true} if the iterable contains no elements
+   */
+  public static boolean isEmpty(Iterable<?> iterable) {
+    if (iterable instanceof Collection) {
+      return ((Collection<?>) iterable).isEmpty();
+    }
+    return !iterable.iterator().hasNext();
+  }
+
+  // Non-public
+
+  /**
+   * Removes the specified element from the specified iterable.
+   *
+   * <p>This method iterates over the iterable, checking each element returned
+   * by the iterator in turn to see if it equals the object {@code o}. If they
+   * are equal, it is removed from the iterable with the iterator's
+   * {@code remove} method. At most one element is removed, even if the iterable
+   * contains multiple members that equal {@code o}.
+   *
+   * <p><b>Warning:</b> Do not use this method for a collection, such as a
+   * {@link HashSet}, that has a fast {@code remove} method.
+   *
+   * @param iterable the iterable from which to remove
+   * @param o an element to remove from the collection
+   * @return {@code true} if the iterable changed as a result
+   * @throws UnsupportedOperationException if the iterator does not support the
+   *     {@code remove} method and the iterable contains the object
+   */
+  static boolean remove(Iterable<?> iterable, @Nullable Object o) {
+    Iterator<?> i = iterable.iterator();
+    while (i.hasNext()) {
+      if (Objects.equal(i.next(), o)) {
+        i.remove();
+        return true;
+      }
+    }
+    return false;
+  }
+
+  abstract static class IterableWithToString<E> implements Iterable<E> {
+    @Override public String toString() {
+      return Iterables.toString(this);
+    }
+  }
+
+  /**
+   * Returns an iterable over the merged contents of all given
+   * {@code iterables}. Equivalent entries will not be de-duplicated.
+   *
+   * <p>Callers must ensure that the source {@code iterables} are in
+   * non-descending order as this method does not sort its input.
+   *
+   * <p>For any equivalent elements across all {@code iterables}, it is
+   * undefined which element is returned first.
+   *
+   * @since 11.0
+   */
+  @Beta
+  public static <T> Iterable<T> mergeSorted(
+      final Iterable<? extends Iterable<? extends T>> iterables,
+      final Comparator<? super T> comparator) {
+    checkNotNull(iterables, "iterables");
+    checkNotNull(comparator, "comparator");
+    Iterable<T> iterable = new Iterable<T>() {
+      @Override
+      public Iterator<T> iterator() {
+        return Iterators.mergeSorted(
+            Iterables.transform(iterables, Iterables.<T>toIterator()),
+            comparator);
+      }
+    };
+    return new UnmodifiableIterable<T>(iterable);
+  }
+
+  // TODO(user): Is this the best place for this? Move to fluent functions?
+  // Useful as a public method?
+  private static <T> Function<Iterable<? extends T>, Iterator<? extends T>>
+      toIterator() {
+    return new Function<Iterable<? extends T>, Iterator<? extends T>>() {
+      @Override
+      public Iterator<? extends T> apply(Iterable<? extends T> iterable) {
+        return iterable.iterator();
+      }
+    };
+  }
+}
diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/Iterators.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/Iterators.java
new file mode 100644
index 0000000..9da1da6
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/Iterators.java
@@ -0,0 +1,1293 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkState;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Function;
+import com.google.common.base.Objects;
+import com.google.common.base.Optional;
+import com.google.common.base.Preconditions;
+import com.google.common.base.Predicate;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.List;
+import java.util.NoSuchElementException;
+import java.util.PriorityQueue;
+import java.util.Queue;
+
+import javax.annotation.Nullable;
+
+/**
+ * This class contains static utility methods that operate on or return objects
+ * of type {@link Iterator}. Except as noted, each method has a corresponding
+ * {@link Iterable}-based method in the {@link Iterables} class.
+ *
+ * <p><i>Performance notes:</i> Unless otherwise noted, all of the iterators
+ * produced in this class are <i>lazy</i>, which means that they only advance
+ * the backing iteration when absolutely necessary.
+ *
+ * @author Kevin Bourrillion
+ * @author Jared Levy
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible(emulated = true)
+public final class Iterators {
+  private Iterators() {}
+
+  static final UnmodifiableIterator<Object> EMPTY_ITERATOR
+      = new UnmodifiableIterator<Object>() {
+        @Override
+        public boolean hasNext() {
+          return false;
+        }
+        @Override
+        public Object next() {
+          throw new NoSuchElementException();
+        }
+      };
+
+  /**
+   * Returns the empty iterator.
+   *
+   * <p>The {@link Iterable} equivalent of this method is {@link
+   * ImmutableSet#of()}.
+   */
+  // Casting to any type is safe since there are no actual elements.
+  @SuppressWarnings("unchecked")
+  public static <T> UnmodifiableIterator<T> emptyIterator() {
+    return (UnmodifiableIterator<T>) EMPTY_ITERATOR;
+  }
+
+  private static final Iterator<Object> EMPTY_MODIFIABLE_ITERATOR =
+      new Iterator<Object>() {
+        @Override public boolean hasNext() {
+          return false;
+        }
+
+        @Override public Object next() {
+          throw new NoSuchElementException();
+        }
+
+        @Override public void remove() {
+          throw new IllegalStateException();
+        }
+      };
+
+  /**
+   * Returns the empty {@code Iterator} that throws
+   * {@link IllegalStateException} instead of
+   * {@link UnsupportedOperationException} on a call to
+   * {@link Iterator#remove()}.
+   */
+  // Casting to any type is safe since there are no actual elements.
+  @SuppressWarnings("unchecked")
+  static <T> Iterator<T> emptyModifiableIterator() {
+    return (Iterator<T>) EMPTY_MODIFIABLE_ITERATOR;
+  }
+
+  /** Returns an unmodifiable view of {@code iterator}. */
+  public static <T> UnmodifiableIterator<T> unmodifiableIterator(
+      final Iterator<T> iterator) {
+    checkNotNull(iterator);
+    if (iterator instanceof UnmodifiableIterator) {
+      return (UnmodifiableIterator<T>) iterator;
+    }
+    return new UnmodifiableIterator<T>() {
+      @Override
+      public boolean hasNext() {
+        return iterator.hasNext();
+      }
+      @Override
+      public T next() {
+        return iterator.next();
+      }
+    };
+  }
+
+  /**
+   * Simply returns its argument.
+   *
+   * @deprecated no need to use this
+   * @since 10.0
+   */
+  @Deprecated public static <T> UnmodifiableIterator<T> unmodifiableIterator(
+      UnmodifiableIterator<T> iterator) {
+    return checkNotNull(iterator);
+  }
+
+  /**
+   * Returns the number of elements remaining in {@code iterator}. The iterator
+   * will be left exhausted: its {@code hasNext()} method will return
+   * {@code false}.
+   */
+  public static int size(Iterator<?> iterator) {
+    int count = 0;
+    while (iterator.hasNext()) {
+      iterator.next();
+      count++;
+    }
+    return count;
+  }
+
+  /**
+   * Returns {@code true} if {@code iterator} contains {@code element}.
+   */
+  public static boolean contains(Iterator<?> iterator, @Nullable Object element)
+  {
+    if (element == null) {
+      while (iterator.hasNext()) {
+        if (iterator.next() == null) {
+          return true;
+        }
+      }
+    } else {
+      while (iterator.hasNext()) {
+        if (element.equals(iterator.next())) {
+          return true;
+        }
+      }
+    }
+    return false;
+  }
+
+  /**
+   * Traverses an iterator and removes every element that belongs to the
+   * provided collection. The iterator will be left exhausted: its
+   * {@code hasNext()} method will return {@code false}.
+   *
+   * @param removeFrom the iterator to (potentially) remove elements from
+   * @param elementsToRemove the elements to remove
+   * @return {@code true} if any element was removed from {@code iterator}
+   */
+  public static boolean removeAll(
+      Iterator<?> removeFrom, Collection<?> elementsToRemove) {
+    checkNotNull(elementsToRemove);
+    boolean modified = false;
+    while (removeFrom.hasNext()) {
+      if (elementsToRemove.contains(removeFrom.next())) {
+        removeFrom.remove();
+        modified = true;
+      }
+    }
+    return modified;
+  }
+
+  /**
+   * Removes every element that satisfies the provided predicate from the
+   * iterator. The iterator will be left exhausted: its {@code hasNext()}
+   * method will return {@code false}.
+   *
+   * @param removeFrom the iterator to (potentially) remove elements from
+   * @param predicate a predicate that determines whether an element should
+   *     be removed
+   * @return {@code true} if any elements were removed from the iterator
+   * @since 2.0
+   */
+  public static <T> boolean removeIf(
+      Iterator<T> removeFrom, Predicate<? super T> predicate) {
+    checkNotNull(predicate);
+    boolean modified = false;
+    while (removeFrom.hasNext()) {
+      if (predicate.apply(removeFrom.next())) {
+        removeFrom.remove();
+        modified = true;
+      }
+    }
+    return modified;
+  }
+
+  /**
+   * Traverses an iterator and removes every element that does not belong to the
+   * provided collection. The iterator will be left exhausted: its
+   * {@code hasNext()} method will return {@code false}.
+   *
+   * @param removeFrom the iterator to (potentially) remove elements from
+   * @param elementsToRetain the elements to retain
+   * @return {@code true} if any element was removed from {@code iterator}
+   */
+  public static boolean retainAll(
+      Iterator<?> removeFrom, Collection<?> elementsToRetain) {
+    checkNotNull(elementsToRetain);
+    boolean modified = false;
+    while (removeFrom.hasNext()) {
+      if (!elementsToRetain.contains(removeFrom.next())) {
+        removeFrom.remove();
+        modified = true;
+      }
+    }
+    return modified;
+  }
+
+  /**
+   * Determines whether two iterators contain equal elements in the same order.
+   * More specifically, this method returns {@code true} if {@code iterator1}
+   * and {@code iterator2} contain the same number of elements and every element
+   * of {@code iterator1} is equal to the corresponding element of
+   * {@code iterator2}.
+   *
+   * <p>Note that this will modify the supplied iterators, since they will have
+   * been advanced some number of elements forward.
+   */
+  public static boolean elementsEqual(
+      Iterator<?> iterator1, Iterator<?> iterator2) {
+    while (iterator1.hasNext()) {
+      if (!iterator2.hasNext()) {
+        return false;
+      }
+      Object o1 = iterator1.next();
+      Object o2 = iterator2.next();
+      if (!Objects.equal(o1, o2)) {
+        return false;
+      }
+    }
+    return !iterator2.hasNext();
+  }
+
+  /**
+   * Returns a string representation of {@code iterator}, with the format
+   * {@code [e1, e2, ..., en]}. The iterator will be left exhausted: its
+   * {@code hasNext()} method will return {@code false}.
+   */
+  public static String toString(Iterator<?> iterator) {
+    if (!iterator.hasNext()) {
+      return "[]";
+    }
+    StringBuilder builder = new StringBuilder();
+    builder.append('[').append(iterator.next());
+    while (iterator.hasNext()) {
+      builder.append(", ").append(iterator.next());
+    }
+    return builder.append(']').toString();
+  }
+
+  /**
+   * Returns the single element contained in {@code iterator}.
+   *
+   * @throws NoSuchElementException if the iterator is empty
+   * @throws IllegalArgumentException if the iterator contains multiple
+   *     elements.  The state of the iterator is unspecified.
+   */
+  public static <T> T getOnlyElement(Iterator<T> iterator) {
+    T first = iterator.next();
+    if (!iterator.hasNext()) {
+      return first;
+    }
+
+    StringBuilder sb = new StringBuilder();
+    sb.append("expected one element but was: <" + first);
+    for (int i = 0; i < 4 && iterator.hasNext(); i++) {
+      sb.append(", " + iterator.next());
+    }
+    if (iterator.hasNext()) {
+      sb.append(", ...");
+    }
+    sb.append('>');
+
+    throw new IllegalArgumentException(sb.toString());
+  }
+
+  /**
+   * Returns the single element contained in {@code iterator}, or {@code
+   * defaultValue} if the iterator is empty.
+   *
+   * @throws IllegalArgumentException if the iterator contains multiple
+   *     elements.  The state of the iterator is unspecified.
+   */
+  public static <T> T getOnlyElement(
+      Iterator<T> iterator, @Nullable T defaultValue) {
+    return iterator.hasNext() ? getOnlyElement(iterator) : defaultValue;
+  }
+
+  /**
+   * Adds all elements in {@code iterator} to {@code collection}. The iterator
+   * will be left exhausted: its {@code hasNext()} method will return
+   * {@code false}.
+   *
+   * @return {@code true} if {@code collection} was modified as a result of this
+   *         operation
+   */
+  public static <T> boolean addAll(
+      Collection<T> addTo, Iterator<? extends T> iterator) {
+    checkNotNull(addTo);
+    boolean wasModified = false;
+    while (iterator.hasNext()) {
+      wasModified |= addTo.add(iterator.next());
+    }
+    return wasModified;
+  }
+
+  /**
+   * Returns the number of elements in the specified iterator that equal the
+   * specified object. The iterator will be left exhausted: its
+   * {@code hasNext()} method will return {@code false}.
+   *
+   * @see Collections#frequency
+   */
+  public static int frequency(Iterator<?> iterator, @Nullable Object element) {
+    int result = 0;
+    if (element == null) {
+      while (iterator.hasNext()) {
+        if (iterator.next() == null) {
+          result++;
+        }
+      }
+    } else {
+      while (iterator.hasNext()) {
+        if (element.equals(iterator.next())) {
+          result++;
+        }
+      }
+    }
+    return result;
+  }
+
+  /**
+   * Returns an iterator that cycles indefinitely over the elements of {@code
+   * iterable}.
+   *
+   * <p>The returned iterator supports {@code remove()} if the provided iterator
+   * does. After {@code remove()} is called, subsequent cycles omit the removed
+   * element, which is no longer in {@code iterable}. The iterator's
+   * {@code hasNext()} method returns {@code true} until {@code iterable} is
+   * empty.
+   *
+   * <p><b>Warning:</b> Typical uses of the resulting iterator may produce an
+   * infinite loop. You should use an explicit {@code break} or be certain that
+   * you will eventually remove all the elements.
+   */
+  public static <T> Iterator<T> cycle(final Iterable<T> iterable) {
+    checkNotNull(iterable);
+    return new Iterator<T>() {
+      Iterator<T> iterator = emptyIterator();
+      Iterator<T> removeFrom;
+
+      @Override
+      public boolean hasNext() {
+        if (!iterator.hasNext()) {
+          iterator = iterable.iterator();
+        }
+        return iterator.hasNext();
+      }
+      @Override
+      public T next() {
+        if (!hasNext()) {
+          throw new NoSuchElementException();
+        }
+        removeFrom = iterator;
+        return iterator.next();
+      }
+      @Override
+      public void remove() {
+        checkState(removeFrom != null,
+            "no calls to next() since last call to remove()");
+        removeFrom.remove();
+        removeFrom = null;
+      }
+    };
+  }
+
+  /**
+   * Returns an iterator that cycles indefinitely over the provided elements.
+   *
+   * <p>The returned iterator supports {@code remove()} if the provided iterator
+   * does. After {@code remove()} is called, subsequent cycles omit the removed
+   * element, but {@code elements} does not change. The iterator's
+   * {@code hasNext()} method returns {@code true} until all of the original
+   * elements have been removed.
+   *
+   * <p><b>Warning:</b> Typical uses of the resulting iterator may produce an
+   * infinite loop. You should use an explicit {@code break} or be certain that
+   * you will eventually remove all the elements.
+   */
+  public static <T> Iterator<T> cycle(T... elements) {
+    return cycle(Lists.newArrayList(elements));
+  }
+
+  /**
+   * Combines two iterators into a single iterator. The returned iterator
+   * iterates across the elements in {@code a}, followed by the elements in
+   * {@code b}. The source iterators are not polled until necessary.
+   *
+   * <p>The returned iterator supports {@code remove()} when the corresponding
+   * input iterator supports it.
+   */
+  @SuppressWarnings("unchecked")
+  public static <T> Iterator<T> concat(Iterator<? extends T> a,
+      Iterator<? extends T> b) {
+    checkNotNull(a);
+    checkNotNull(b);
+    return concat(Arrays.asList(a, b).iterator());
+  }
+
+  /**
+   * Combines three iterators into a single iterator. The returned iterator
+   * iterates across the elements in {@code a}, followed by the elements in
+   * {@code b}, followed by the elements in {@code c}. The source iterators
+   * are not polled until necessary.
+   *
+   * <p>The returned iterator supports {@code remove()} when the corresponding
+   * input iterator supports it.
+   */
+  @SuppressWarnings("unchecked")
+  public static <T> Iterator<T> concat(Iterator<? extends T> a,
+      Iterator<? extends T> b, Iterator<? extends T> c) {
+    checkNotNull(a);
+    checkNotNull(b);
+    checkNotNull(c);
+    return concat(Arrays.asList(a, b, c).iterator());
+  }
+
+  /**
+   * Combines four iterators into a single iterator. The returned iterator
+   * iterates across the elements in {@code a}, followed by the elements in
+   * {@code b}, followed by the elements in {@code c}, followed by the elements
+   * in {@code d}. The source iterators are not polled until necessary.
+   *
+   * <p>The returned iterator supports {@code remove()} when the corresponding
+   * input iterator supports it.
+   */
+  @SuppressWarnings("unchecked")
+  public static <T> Iterator<T> concat(Iterator<? extends T> a,
+      Iterator<? extends T> b, Iterator<? extends T> c,
+      Iterator<? extends T> d) {
+    checkNotNull(a);
+    checkNotNull(b);
+    checkNotNull(c);
+    checkNotNull(d);
+    return concat(Arrays.asList(a, b, c, d).iterator());
+  }
+
+  /**
+   * Combines multiple iterators into a single iterator. The returned iterator
+   * iterates across the elements of each iterator in {@code inputs}. The input
+   * iterators are not polled until necessary.
+   *
+   * <p>The returned iterator supports {@code remove()} when the corresponding
+   * input iterator supports it.
+   *
+   * @throws NullPointerException if any of the provided iterators is null
+   */
+  public static <T> Iterator<T> concat(Iterator<? extends T>... inputs) {
+    return concat(ImmutableList.copyOf(inputs).iterator());
+  }
+
+  /**
+   * Combines multiple iterators into a single iterator. The returned iterator
+   * iterates across the elements of each iterator in {@code inputs}. The input
+   * iterators are not polled until necessary.
+   *
+   * <p>The returned iterator supports {@code remove()} when the corresponding
+   * input iterator supports it. The methods of the returned iterator may throw
+   * {@code NullPointerException} if any of the input iterators is null.
+   */
+  public static <T> Iterator<T> concat(
+      final Iterator<? extends Iterator<? extends T>> inputs) {
+    checkNotNull(inputs);
+    return new Iterator<T>() {
+      Iterator<? extends T> current = emptyIterator();
+      Iterator<? extends T> removeFrom;
+
+      @Override
+      public boolean hasNext() {
+        // http://code.google.com/p/google-collections/issues/detail?id=151
+        // current.hasNext() might be relatively expensive, worth minimizing.
+        boolean currentHasNext;
+        // checkNotNull eager for GWT
+        // note: it must be here & not where 'current' is assigned,
+        // because otherwise we'll have called inputs.next() before throwing
+        // the first NPE, and the next time around we'll call inputs.next()
+        // again, incorrectly moving beyond the error.
+        while (!(currentHasNext = checkNotNull(current).hasNext())
+            && inputs.hasNext()) {
+          current = inputs.next();
+        }
+        return currentHasNext;
+      }
+      @Override
+      public T next() {
+        if (!hasNext()) {
+          throw new NoSuchElementException();
+        }
+        removeFrom = current;
+        return current.next();
+      }
+      @Override
+      public void remove() {
+        checkState(removeFrom != null,
+            "no calls to next() since last call to remove()");
+        removeFrom.remove();
+        removeFrom = null;
+      }
+    };
+  }
+
+  /**
+   * Divides an iterator into unmodifiable sublists of the given size (the final
+   * list may be smaller). For example, partitioning an iterator containing
+   * {@code [a, b, c, d, e]} with a partition size of 3 yields {@code
+   * [[a, b, c], [d, e]]} -- an outer iterator containing two inner lists of
+   * three and two elements, all in the original order.
+   *
+   * <p>The returned lists implement {@link java.util.RandomAccess}.
+   *
+   * @param iterator the iterator to return a partitioned view of
+   * @param size the desired size of each partition (the last may be smaller)
+   * @return an iterator of immutable lists containing the elements of {@code
+   *     iterator} divided into partitions
+   * @throws IllegalArgumentException if {@code size} is nonpositive
+   */
+  public static <T> UnmodifiableIterator<List<T>> partition(
+      Iterator<T> iterator, int size) {
+    return partitionImpl(iterator, size, false);
+  }
+
+  /**
+   * Divides an iterator into unmodifiable sublists of the given size, padding
+   * the final iterator with null values if necessary. For example, partitioning
+   * an iterator containing {@code [a, b, c, d, e]} with a partition size of 3
+   * yields {@code [[a, b, c], [d, e, null]]} -- an outer iterator containing
+   * two inner lists of three elements each, all in the original order.
+   *
+   * <p>The returned lists implement {@link java.util.RandomAccess}.
+   *
+   * @param iterator the iterator to return a partitioned view of
+   * @param size the desired size of each partition
+   * @return an iterator of immutable lists containing the elements of {@code
+   *     iterator} divided into partitions (the final iterable may have
+   *     trailing null elements)
+   * @throws IllegalArgumentException if {@code size} is nonpositive
+   */
+  public static <T> UnmodifiableIterator<List<T>> paddedPartition(
+      Iterator<T> iterator, int size) {
+    return partitionImpl(iterator, size, true);
+  }
+
+  private static <T> UnmodifiableIterator<List<T>> partitionImpl(
+      final Iterator<T> iterator, final int size, final boolean pad) {
+    checkNotNull(iterator);
+    checkArgument(size > 0);
+    return new UnmodifiableIterator<List<T>>() {
+      @Override
+      public boolean hasNext() {
+        return iterator.hasNext();
+      }
+      @Override
+      public List<T> next() {
+        if (!hasNext()) {
+          throw new NoSuchElementException();
+        }
+        Object[] array = new Object[size];
+        int count = 0;
+        for (; count < size && iterator.hasNext(); count++) {
+          array[count] = iterator.next();
+        }
+        for (int i = count; i < size; i++) {
+          array[i] = null; // for GWT
+        }
+
+        @SuppressWarnings("unchecked") // we only put Ts in it
+        List<T> list = Collections.unmodifiableList(
+            (List<T>) Arrays.asList(array));
+        return (pad || count == size) ? list : list.subList(0, count);
+      }
+    };
+  }
+
+  /**
+   * Returns the elements of {@code unfiltered} that satisfy a predicate.
+   */
+  public static <T> UnmodifiableIterator<T> filter(
+      final Iterator<T> unfiltered, final Predicate<? super T> predicate) {
+    checkNotNull(unfiltered);
+    checkNotNull(predicate);
+    return new AbstractIterator<T>() {
+      @Override protected T computeNext() {
+        while (unfiltered.hasNext()) {
+          T element = unfiltered.next();
+          if (predicate.apply(element)) {
+            return element;
+          }
+        }
+        return endOfData();
+      }
+    };
+  }
+
+  /**
+   * Returns {@code true} if one or more elements returned by {@code iterator}
+   * satisfy the given predicate.
+   */
+  public static <T> boolean any(
+      Iterator<T> iterator, Predicate<? super T> predicate) {
+    checkNotNull(predicate);
+    while (iterator.hasNext()) {
+      T element = iterator.next();
+      if (predicate.apply(element)) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  /**
+   * Returns {@code true} if every element returned by {@code iterator}
+   * satisfies the given predicate. If {@code iterator} is empty, {@code true}
+   * is returned.
+   */
+  public static <T> boolean all(
+      Iterator<T> iterator, Predicate<? super T> predicate) {
+    checkNotNull(predicate);
+    while (iterator.hasNext()) {
+      T element = iterator.next();
+      if (!predicate.apply(element)) {
+        return false;
+      }
+    }
+    return true;
+  }
+
+  /**
+   * Returns the first element in {@code iterator} that satisfies the given
+   * predicate; use this method only when such an element is known to exist. If
+   * no such element is found, the iterator will be left exhausted: its {@code
+   * hasNext()} method will return {@code false}. If it is possible that
+   * <i>no</i> element will match, use {@link #tryFind)} or {@link
+   * #find(Iterator, Predicate, T)} instead.
+   *
+   * @throws NoSuchElementException if no element in {@code iterator} matches
+   *     the given predicate
+   */
+  public static <T> T find(
+      Iterator<T> iterator, Predicate<? super T> predicate) {
+    return filter(iterator, predicate).next();
+  }
+
+  /**
+   * Returns the first element in {@code iterator} that satisfies the given
+   * predicate. If no such element is found, {@code defaultValue} will be
+   * returned from this method and the iterator will be left exhausted: its
+   * {@code hasNext()} method will return {@code false}. Note that this can
+   * usually be handled more naturally using {@code
+   * tryFind(iterator, predicate).or(defaultValue)}.
+   *
+   * @since 7.0
+   */
+  public static <T> T find(Iterator<T> iterator, Predicate<? super T> predicate,
+      @Nullable T defaultValue) {
+    UnmodifiableIterator<T> filteredIterator = filter(iterator, predicate);
+    return filteredIterator.hasNext() ? filteredIterator.next() : defaultValue;
+  }
+
+  /**
+   * Returns an {@link Optional} containing the first element in {@code
+   * iterator} that satisfies the given predicate, if such an element exists. If
+   * no such element is found, an empty {@link Optional} will be returned from
+   * this method and the the iterator will be left exhausted: its {@code
+   * hasNext()} method will return {@code false}.
+   *
+   * <p><b>Warning:</b> avoid using a {@code predicate} that matches {@code
+   * null}. If {@code null} is matched in {@code iterator}, a
+   * NullPointerException will be thrown.
+   *
+   * @since 11.0
+   */
+  public static <T> Optional<T> tryFind(
+      Iterator<T> iterator, Predicate<? super T> predicate) {
+    UnmodifiableIterator<T> filteredIterator = filter(iterator, predicate);
+    return filteredIterator.hasNext()
+        ? Optional.of(filteredIterator.next())
+        : Optional.<T>absent();
+  }
+
+  /**
+   * Returns the index in {@code iterator} of the first element that satisfies
+   * the provided {@code predicate}, or {@code -1} if the Iterator has no such
+   * elements.
+   *
+   * <p>More formally, returns the lowest index {@code i} such that
+   * {@code predicate.apply(Iterators.get(iterator, i))} returns {@code true},
+   * or {@code -1} if there is no such index.
+   *
+   * <p>If -1 is returned, the iterator will be left exhausted: its
+   * {@code hasNext()} method will return {@code false}.  Otherwise,
+   * the iterator will be set to the element which satisfies the
+   * {@code predicate}.
+   *
+   * @since 2.0
+   */
+  public static <T> int indexOf(
+      Iterator<T> iterator, Predicate<? super T> predicate) {
+    checkNotNull(predicate, "predicate");
+    int i = 0;
+    while (iterator.hasNext()) {
+      T current = iterator.next();
+      if (predicate.apply(current)) {
+        return i;
+      }
+      i++;
+    }
+    return -1;
+  }
+
+  /**
+   * Returns an iterator that applies {@code function} to each element of {@code
+   * fromIterator}.
+   *
+   * <p>The returned iterator supports {@code remove()} if the provided iterator
+   * does. After a successful {@code remove()} call, {@code fromIterator} no
+   * longer contains the corresponding element.
+   */
+  public static <F, T> Iterator<T> transform(final Iterator<F> fromIterator,
+      final Function<? super F, ? extends T> function) {
+    checkNotNull(fromIterator);
+    checkNotNull(function);
+    return new Iterator<T>() {
+      @Override
+      public boolean hasNext() {
+        return fromIterator.hasNext();
+      }
+      @Override
+      public T next() {
+        F from = fromIterator.next();
+        return function.apply(from);
+      }
+      @Override
+      public void remove() {
+        fromIterator.remove();
+      }
+    };
+  }
+
+  /**
+   * Advances {@code iterator} {@code position + 1} times, returning the
+   * element at the {@code position}th position.
+   *
+   * @param position position of the element to return
+   * @return the element at the specified position in {@code iterator}
+   * @throws IndexOutOfBoundsException if {@code position} is negative or
+   *     greater than or equal to the number of elements remaining in
+   *     {@code iterator}
+   */
+  public static <T> T get(Iterator<T> iterator, int position) {
+    checkNonnegative(position);
+
+    int skipped = 0;
+    while (iterator.hasNext()) {
+      T t = iterator.next();
+      if (skipped++ == position) {
+        return t;
+      }
+    }
+
+    throw new IndexOutOfBoundsException("position (" + position
+        + ") must be less than the number of elements that remained ("
+        + skipped + ")");
+  }
+
+  private static void checkNonnegative(int position) {
+    if (position < 0) {
+      throw new IndexOutOfBoundsException("position (" + position
+          + ") must not be negative");
+    }
+  }
+
+  /**
+   * Advances {@code iterator} {@code position + 1} times, returning the
+   * element at the {@code position}th position or {@code defaultValue}
+   * otherwise.
+   *
+   * @param position position of the element to return
+   * @param defaultValue the default value to return if the iterator is empty
+   *     or if {@code position} is greater than the number of elements
+   *     remaining in {@code iterator}
+   * @return the element at the specified position in {@code iterator} or
+   *     {@code defaultValue} if {@code iterator} produces fewer than
+   *     {@code position + 1} elements.
+   * @throws IndexOutOfBoundsException if {@code position} is negative
+   * @since 4.0
+   */
+  public static <T> T get(Iterator<T> iterator, int position,
+      @Nullable T defaultValue) {
+    checkNonnegative(position);
+
+    try {
+      return get(iterator, position);
+    } catch (IndexOutOfBoundsException e) {
+      return defaultValue;
+    }
+  }
+
+  /**
+   * Returns the next element in {@code iterator} or {@code defaultValue} if
+   * the iterator is empty.  The {@link Iterables} analog to this method is
+   * {@link Iterables#getFirst}.
+   *
+   * @param defaultValue the default value to return if the iterator is empty
+   * @return the next element of {@code iterator} or the default value
+   * @since 7.0
+   */
+  public static <T> T getNext(Iterator<T> iterator, @Nullable T defaultValue) {
+    return iterator.hasNext() ? iterator.next() : defaultValue;
+  }
+
+  /**
+   * Advances {@code iterator} to the end, returning the last element.
+   *
+   * @return the last element of {@code iterator}
+   * @throws NoSuchElementException if the iterator is empty
+   */
+  public static <T> T getLast(Iterator<T> iterator) {
+    while (true) {
+      T current = iterator.next();
+      if (!iterator.hasNext()) {
+        return current;
+      }
+    }
+  }
+
+  /**
+   * Advances {@code iterator} to the end, returning the last element or
+   * {@code defaultValue} if the iterator is empty.
+   *
+   * @param defaultValue the default value to return if the iterator is empty
+   * @return the last element of {@code iterator}
+   * @since 3.0
+   */
+  public static <T> T getLast(Iterator<T> iterator, @Nullable T defaultValue) {
+    return iterator.hasNext() ? getLast(iterator) : defaultValue;
+  }
+
+  /**
+   * Calls {@code next()} on {@code iterator}, either {@code numberToSkip} times
+   * or until {@code hasNext()} returns {@code false}, whichever comes first.
+   *
+   * @return the number of elements skipped
+   * @since 3.0
+   */
+  @Beta
+  public static <T> int skip(Iterator<T> iterator, int numberToSkip) {
+    checkNotNull(iterator);
+    checkArgument(numberToSkip >= 0, "number to skip cannot be negative");
+
+    int i;
+    for (i = 0; i < numberToSkip && iterator.hasNext(); i++) {
+      iterator.next();
+    }
+    return i;
+  }
+
+  /**
+   * Creates an iterator returning the first {@code limitSize} elements of the
+   * given iterator. If the original iterator does not contain that many
+   * elements, the returned iterator will have the same behavior as the original
+   * iterator. The returned iterator supports {@code remove()} if the original
+   * iterator does.
+   *
+   * @param iterator the iterator to limit
+   * @param limitSize the maximum number of elements in the returned iterator
+   * @throws IllegalArgumentException if {@code limitSize} is negative
+   * @since 3.0
+   */
+  public static <T> Iterator<T> limit(
+      final Iterator<T> iterator, final int limitSize) {
+    checkNotNull(iterator);
+    checkArgument(limitSize >= 0, "limit is negative");
+    return new Iterator<T>() {
+      private int count;
+
+      @Override
+      public boolean hasNext() {
+        return count < limitSize && iterator.hasNext();
+      }
+
+      @Override
+      public T next() {
+        if (!hasNext()) {
+          throw new NoSuchElementException();
+        }
+        count++;
+        return iterator.next();
+      }
+
+      @Override
+      public void remove() {
+        iterator.remove();
+      }
+    };
+  }
+
+  /**
+   * Returns a view of the supplied {@code iterator} that removes each element
+   * from the supplied {@code iterator} as it is returned.
+   *
+   * <p>The provided iterator must support {@link Iterator#remove()} or
+   * else the returned iterator will fail on the first call to {@code
+   * next}.
+   *
+   * @param iterator the iterator to remove and return elements from
+   * @return an iterator that removes and returns elements from the
+   *     supplied iterator
+   * @since 2.0
+   */
+  public static <T> Iterator<T> consumingIterator(final Iterator<T> iterator) {
+    checkNotNull(iterator);
+    return new UnmodifiableIterator<T>() {
+      @Override
+      public boolean hasNext() {
+        return iterator.hasNext();
+      }
+
+      @Override
+      public T next() {
+        T next = iterator.next();
+        iterator.remove();
+        return next;
+      }
+    };
+  }
+
+  // Methods only in Iterators, not in Iterables
+
+  /**
+   * Clears the iterator using its remove method.
+   */
+  static void clear(Iterator<?> iterator) {
+    checkNotNull(iterator);
+    while (iterator.hasNext()) {
+      iterator.next();
+      iterator.remove();
+    }
+  }
+
+  /**
+   * Returns an iterator containing the elements of {@code array} in order. The
+   * returned iterator is a view of the array; subsequent changes to the array
+   * will be reflected in the iterator.
+   *
+   * <p><b>Note:</b> It is often preferable to represent your data using a
+   * collection type, for example using {@link Arrays#asList(Object[])}, making
+   * this method unnecessary.
+   *
+   * <p>The {@code Iterable} equivalent of this method is either {@link
+   * Arrays#asList(Object[])}, {@link ImmutableList#copyOf(Object[])}},
+   * or {@link ImmutableList#of}.
+   */
+  public static <T> UnmodifiableIterator<T> forArray(final T... array) {
+    // TODO(kevinb): compare performance with Arrays.asList(array).iterator().
+    checkNotNull(array);  // eager for GWT.
+    return new AbstractIndexedListIterator<T>(array.length) {
+      @Override protected T get(int index) {
+        return array[index];
+      }
+    };
+  }
+
+  /**
+   * Returns an iterator containing the elements in the specified range of
+   * {@code array} in order. The returned iterator is a view of the array;
+   * subsequent changes to the array will be reflected in the iterator.
+   *
+   * <p>The {@code Iterable} equivalent of this method is {@code
+   * Arrays.asList(array).subList(offset, offset + length)}.
+   *
+   * @param array array to read elements out of
+   * @param offset index of first array element to retrieve
+   * @param length number of elements in iteration
+   * @throws IndexOutOfBoundsException if {@code offset} is negative, {@code
+   *     length} is negative, or {@code offset + length > array.length}
+   */
+  static <T> UnmodifiableIterator<T> forArray(
+      final T[] array, final int offset, int length) {
+    checkArgument(length >= 0);
+    int end = offset + length;
+
+    // Technically we should give a slightly more descriptive error on overflow
+    Preconditions.checkPositionIndexes(offset, end, array.length);
+
+    /*
+     * We can't use call the two-arg constructor with arguments (offset, end)
+     * because the returned Iterator is a ListIterator that may be moved back
+     * past the beginning of the iteration.
+     */
+    return new AbstractIndexedListIterator<T>(length) {
+      @Override protected T get(int index) {
+        return array[offset + index];
+      }
+    };
+  }
+
+  /**
+   * Returns an iterator containing only {@code value}.
+   *
+   * <p>The {@link Iterable} equivalent of this method is {@link
+   * Collections#singleton}.
+   */
+  public static <T> UnmodifiableIterator<T> singletonIterator(
+      @Nullable final T value) {
+    return new UnmodifiableIterator<T>() {
+      boolean done;
+      @Override
+      public boolean hasNext() {
+        return !done;
+      }
+      @Override
+      public T next() {
+        if (done) {
+          throw new NoSuchElementException();
+        }
+        done = true;
+        return value;
+      }
+    };
+  }
+
+  /**
+   * Adapts an {@code Enumeration} to the {@code Iterator} interface.
+   *
+   * <p>This method has no equivalent in {@link Iterables} because viewing an
+   * {@code Enumeration} as an {@code Iterable} is impossible. However, the
+   * contents can be <i>copied</i> into a collection using {@link
+   * Collections#list}.
+   */
+  public static <T> UnmodifiableIterator<T> forEnumeration(
+      final Enumeration<T> enumeration) {
+    checkNotNull(enumeration);
+    return new UnmodifiableIterator<T>() {
+      @Override
+      public boolean hasNext() {
+        return enumeration.hasMoreElements();
+      }
+      @Override
+      public T next() {
+        return enumeration.nextElement();
+      }
+    };
+  }
+
+  /**
+   * Adapts an {@code Iterator} to the {@code Enumeration} interface.
+   *
+   * <p>The {@code Iterable} equivalent of this method is either {@link
+   * Collections#enumeration} (if you have a {@link Collection}), or
+   * {@code Iterators.asEnumeration(collection.iterator())}.
+   */
+  public static <T> Enumeration<T> asEnumeration(final Iterator<T> iterator) {
+    checkNotNull(iterator);
+    return new Enumeration<T>() {
+      @Override
+      public boolean hasMoreElements() {
+        return iterator.hasNext();
+      }
+      @Override
+      public T nextElement() {
+        return iterator.next();
+      }
+    };
+  }
+
+  /**
+   * Implementation of PeekingIterator that avoids peeking unless necessary.
+   */
+  private static class PeekingImpl<E> implements PeekingIterator<E> {
+
+    private final Iterator<? extends E> iterator;
+    private boolean hasPeeked;
+    private E peekedElement;
+
+    public PeekingImpl(Iterator<? extends E> iterator) {
+      this.iterator = checkNotNull(iterator);
+    }
+
+    @Override
+    public boolean hasNext() {
+      return hasPeeked || iterator.hasNext();
+    }
+
+    @Override
+    public E next() {
+      if (!hasPeeked) {
+        return iterator.next();
+      }
+      E result = peekedElement;
+      hasPeeked = false;
+      peekedElement = null;
+      return result;
+    }
+
+    @Override
+    public void remove() {
+      checkState(!hasPeeked, "Can't remove after you've peeked at next");
+      iterator.remove();
+    }
+
+    @Override
+    public E peek() {
+      if (!hasPeeked) {
+        peekedElement = iterator.next();
+        hasPeeked = true;
+      }
+      return peekedElement;
+    }
+  }
+
+  /**
+   * Returns a {@code PeekingIterator} backed by the given iterator.
+   *
+   * <p>Calls to the {@code peek} method with no intervening calls to {@code
+   * next} do not affect the iteration, and hence return the same object each
+   * time. A subsequent call to {@code next} is guaranteed to return the same
+   * object again. For example: <pre>   {@code
+   *
+   *   PeekingIterator<String> peekingIterator =
+   *       Iterators.peekingIterator(Iterators.forArray("a", "b"));
+   *   String a1 = peekingIterator.peek(); // returns "a"
+   *   String a2 = peekingIterator.peek(); // also returns "a"
+   *   String a3 = peekingIterator.next(); // also returns "a"}</pre>
+   *
+   * Any structural changes to the underlying iteration (aside from those
+   * performed by the iterator's own {@link PeekingIterator#remove()} method)
+   * will leave the iterator in an undefined state.
+   *
+   * <p>The returned iterator does not support removal after peeking, as
+   * explained by {@link PeekingIterator#remove()}.
+   *
+   * <p>Note: If the given iterator is already a {@code PeekingIterator},
+   * it <i>might</i> be returned to the caller, although this is neither
+   * guaranteed to occur nor required to be consistent.  For example, this
+   * method <i>might</i> choose to pass through recognized implementations of
+   * {@code PeekingIterator} when the behavior of the implementation is
+   * known to meet the contract guaranteed by this method.
+   *
+   * <p>There is no {@link Iterable} equivalent to this method, so use this
+   * method to wrap each individual iterator as it is generated.
+   *
+   * @param iterator the backing iterator. The {@link PeekingIterator} assumes
+   *     ownership of this iterator, so users should cease making direct calls
+   *     to it after calling this method.
+   * @return a peeking iterator backed by that iterator. Apart from the
+   *     additional {@link PeekingIterator#peek()} method, this iterator behaves
+   *     exactly the same as {@code iterator}.
+   */
+  public static <T> PeekingIterator<T> peekingIterator(
+      Iterator<? extends T> iterator) {
+    if (iterator instanceof PeekingImpl) {
+      // Safe to cast <? extends T> to <T> because PeekingImpl only uses T
+      // covariantly (and cannot be subclassed to add non-covariant uses).
+      @SuppressWarnings("unchecked")
+      PeekingImpl<T> peeking = (PeekingImpl<T>) iterator;
+      return peeking;
+    }
+    return new PeekingImpl<T>(iterator);
+  }
+
+  /**
+   * Simply returns its argument.
+   *
+   * @deprecated no need to use this
+   * @since 10.0
+   */
+  @Deprecated public static <T> PeekingIterator<T> peekingIterator(
+      PeekingIterator<T> iterator) {
+    return checkNotNull(iterator);
+  }
+
+  /**
+   * Returns an iterator over the merged contents of all given
+   * {@code iterators}, traversing every element of the input iterators.
+   * Equivalent entries will not be de-duplicated.
+   *
+   * <p>Callers must ensure that the source {@code iterators} are in
+   * non-descending order as this method does not sort its input.
+   *
+   * <p>For any equivalent elements across all {@code iterators}, it is
+   * undefined which element is returned first.
+   *
+   * @since 11.0
+   */
+  @Beta
+  public static <T> UnmodifiableIterator<T> mergeSorted(
+      Iterable<? extends Iterator<? extends T>> iterators,
+      Comparator<? super T> comparator) {
+    checkNotNull(iterators, "iterators");
+    checkNotNull(comparator, "comparator");
+
+    return new MergingIterator<T>(iterators, comparator);
+  }
+
+  /**
+   * An iterator that performs a lazy N-way merge, calculating the next value
+   * each time the iterator is polled. This amortizes the sorting cost over the
+   * iteration and requires less memory than sorting all elements at once.
+   *
+   * <p>Retrieving a single element takes approximately O(log(M)) time, where M
+   * is the number of iterators. (Retrieving all elements takes approximately
+   * O(N*log(M)) time, where N is the total number of elements.)
+   */
+  private static class MergingIterator<T> extends AbstractIterator<T> {
+    final Queue<PeekingIterator<T>> queue;
+    final Comparator<? super T> comparator;
+
+    public MergingIterator(Iterable<? extends Iterator<? extends T>> iterators,
+        Comparator<? super T> itemComparator) {
+      this.comparator = itemComparator;
+
+      // A comparator that's used by the heap, allowing the heap
+      // to be sorted based on the top of each iterator.
+      Comparator<PeekingIterator<T>> heapComparator =
+          new Comparator<PeekingIterator<T>>() {
+            @Override
+            public int compare(PeekingIterator<T> o1, PeekingIterator<T> o2) {
+              return comparator.compare(o1.peek(), o2.peek());
+            }
+          };
+
+      queue = new PriorityQueue<PeekingIterator<T>>(2, heapComparator);
+
+      for (Iterator<? extends T> iterator : iterators) {
+        if (iterator.hasNext()) {
+          queue.add(Iterators.peekingIterator(iterator));
+        }
+      }
+    }
+
+    @Override
+    protected T computeNext() {
+      if (queue.isEmpty()) {
+        return endOfData();
+      }
+
+      PeekingIterator<T> nextIter = queue.poll();
+      T next = nextIter.next();
+
+      if (nextIter.hasNext()) {
+        queue.add(nextIter);
+      }
+
+      return next;
+    }
+  }
+}
diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/LinkedHashMultimap.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/LinkedHashMultimap.java
new file mode 100644
index 0000000..d426893
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/LinkedHashMultimap.java
@@ -0,0 +1,354 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Preconditions;
+import com.google.common.primitives.Ints;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
+import java.util.Map;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * Implementation of {@code Multimap} that does not allow duplicate key-value
+ * entries and that returns collections whose iterators follow the ordering in
+ * which the data was added to the multimap.
+ *
+ * <p>The collections returned by {@code keySet}, {@code keys}, and {@code
+ * asMap} iterate through the keys in the order they were first added to the
+ * multimap. Similarly, {@code get}, {@code removeAll}, and {@code
+ * replaceValues} return collections that iterate through the values in the
+ * order they were added. The collections generated by {@code entries} and
+ * {@code values} iterate across the key-value mappings in the order they were
+ * added to the multimap.
+ *
+ * <p>The iteration ordering of the collections generated by {@code keySet},
+ * {@code keys}, and {@code asMap} has a few subtleties. As long as the set of
+ * keys remains unchanged, adding or removing mappings does not affect the key
+ * iteration order. However, if you remove all values associated with a key and
+ * then add the key back to the multimap, that key will come last in the key
+ * iteration order.
+ *
+ * <p>The multimap does not store duplicate key-value pairs. Adding a new
+ * key-value pair equal to an existing key-value pair has no effect.
+ *
+ * <p>Keys and values may be null. All optional multimap methods are supported,
+ * and all returned views are modifiable.
+ *
+ * <p>This class is not threadsafe when any concurrent operations update the
+ * multimap. Concurrent read operations will work correctly. To allow concurrent
+ * update operations, wrap your multimap with a call to {@link
+ * Multimaps#synchronizedSetMultimap}.
+ *
+ * @author Jared Levy
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible(serializable = true, emulated = true)
+public final class LinkedHashMultimap<K, V> extends AbstractSetMultimap<K, V> {
+  private static final int DEFAULT_VALUES_PER_KEY = 8;
+
+  @VisibleForTesting
+  transient int expectedValuesPerKey = DEFAULT_VALUES_PER_KEY;
+
+  /**
+   * Map entries with an iteration order corresponding to the order in which the
+   * key-value pairs were added to the multimap.
+   */
+  // package-private for GWT deserialization
+  transient Collection<Map.Entry<K, V>> linkedEntries;
+
+  /**
+   * Creates a new, empty {@code LinkedHashMultimap} with the default initial
+   * capacities.
+   */
+  public static <K, V> LinkedHashMultimap<K, V> create() {
+    return new LinkedHashMultimap<K, V>();
+  }
+
+  /**
+   * Constructs an empty {@code LinkedHashMultimap} with enough capacity to hold
+   * the specified numbers of keys and values without rehashing.
+   *
+   * @param expectedKeys the expected number of distinct keys
+   * @param expectedValuesPerKey the expected average number of values per key
+   * @throws IllegalArgumentException if {@code expectedKeys} or {@code
+   *      expectedValuesPerKey} is negative
+   */
+  public static <K, V> LinkedHashMultimap<K, V> create(
+      int expectedKeys, int expectedValuesPerKey) {
+    return new LinkedHashMultimap<K, V>(expectedKeys, expectedValuesPerKey);
+  }
+
+  /**
+   * Constructs a {@code LinkedHashMultimap} with the same mappings as the
+   * specified multimap. If a key-value mapping appears multiple times in the
+   * input multimap, it only appears once in the constructed multimap. The new
+   * multimap has the same {@link Multimap#entries()} iteration order as the
+   * input multimap, except for excluding duplicate mappings.
+   *
+   * @param multimap the multimap whose contents are copied to this multimap
+   */
+  public static <K, V> LinkedHashMultimap<K, V> create(
+      Multimap<? extends K, ? extends V> multimap) {
+    return new LinkedHashMultimap<K, V>(multimap);
+  }
+
+  private LinkedHashMultimap() {
+    super(new LinkedHashMap<K, Collection<V>>());
+    linkedEntries = Sets.newLinkedHashSet();
+  }
+
+  private LinkedHashMultimap(int expectedKeys, int expectedValuesPerKey) {
+    super(new LinkedHashMap<K, Collection<V>>(expectedKeys));
+    Preconditions.checkArgument(expectedValuesPerKey >= 0);
+    this.expectedValuesPerKey = expectedValuesPerKey;
+    linkedEntries = new LinkedHashSet<Map.Entry<K, V>>(
+        (int) Math.min(Ints.MAX_POWER_OF_TWO,
+            ((long) expectedKeys) * expectedValuesPerKey));
+  }
+
+  private LinkedHashMultimap(Multimap<? extends K, ? extends V> multimap) {
+    super(new LinkedHashMap<K, Collection<V>>(
+        Maps.capacity(multimap.keySet().size())));
+    linkedEntries
+        = new LinkedHashSet<Map.Entry<K, V>>(Maps.capacity(multimap.size()));
+    putAll(multimap);
+  }
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>Creates an empty {@code LinkedHashSet} for a collection of values for
+   * one key.
+   *
+   * @return a new {@code LinkedHashSet} containing a collection of values for
+   *     one key
+   */
+  @Override Set<V> createCollection() {
+    return new LinkedHashSet<V>(Maps.capacity(expectedValuesPerKey));
+  }
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>Creates a decorated {@code LinkedHashSet} that also keeps track of the
+   * order in which key-value pairs are added to the multimap.
+   *
+   * @param key key to associate with values in the collection
+   * @return a new decorated {@code LinkedHashSet} containing a collection of
+   *     values for one key
+   */
+  @Override Collection<V> createCollection(@Nullable K key) {
+    return new SetDecorator(key, createCollection());
+  }
+
+  private class SetDecorator extends ForwardingSet<V> {
+    final Set<V> delegate;
+    final K key;
+
+    SetDecorator(@Nullable K key, Set<V> delegate) {
+      this.delegate = delegate;
+      this.key = key;
+    }
+
+    @Override protected Set<V> delegate() {
+      return delegate;
+    }
+
+    <E> Map.Entry<K, E> createEntry(@Nullable E value) {
+      return Maps.immutableEntry(key, value);
+    }
+
+    <E> Collection<Map.Entry<K, E>> createEntries(Collection<E> values) {
+      // converts a collection of values into a list of key/value map entries
+      Collection<Map.Entry<K, E>> entries
+          = Lists.newArrayListWithExpectedSize(values.size());
+      for (E value : values) {
+        entries.add(createEntry(value));
+      }
+      return entries;
+    }
+
+    @Override public boolean add(@Nullable V value) {
+      boolean changed = delegate.add(value);
+      if (changed) {
+        linkedEntries.add(createEntry(value));
+      }
+      return changed;
+    }
+
+    @Override public boolean addAll(Collection<? extends V> values) {
+      boolean changed = delegate.addAll(values);
+      if (changed) {
+        linkedEntries.addAll(createEntries(delegate()));
+      }
+      return changed;
+    }
+
+    @Override public void clear() {
+      for (V value : delegate) {
+        linkedEntries.remove(createEntry(value));
+      }
+      delegate.clear();
+    }
+
+    @Override public Iterator<V> iterator() {
+      final Iterator<V> delegateIterator = delegate.iterator();
+      return new Iterator<V>() {
+        V value;
+
+        @Override
+        public boolean hasNext() {
+          return delegateIterator.hasNext();
+        }
+        @Override
+        public V next() {
+          value = delegateIterator.next();
+          return value;
+        }
+        @Override
+        public void remove() {
+          delegateIterator.remove();
+          linkedEntries.remove(createEntry(value));
+        }
+      };
+    }
+
+    @Override public boolean remove(@Nullable Object value) {
+      boolean changed = delegate.remove(value);
+      if (changed) {
+        /*
+         * linkedEntries.remove() will return false when this method is called
+         * by entries().iterator().remove()
+         */
+        linkedEntries.remove(createEntry(value));
+      }
+      return changed;
+    }
+
+    @Override public boolean removeAll(Collection<?> values) {
+      boolean changed = delegate.removeAll(values);
+      if (changed) {
+        linkedEntries.removeAll(createEntries(values));
+      }
+      return changed;
+    }
+
+    @Override public boolean retainAll(Collection<?> values) {
+      /*
+       * Calling linkedEntries.retainAll() would incorrectly remove values
+       * with other keys.
+       */
+      boolean changed = false;
+      Iterator<V> iterator = delegate.iterator();
+      while (iterator.hasNext()) {
+        V value = iterator.next();
+        if (!values.contains(value)) {
+          iterator.remove();
+          linkedEntries.remove(Maps.immutableEntry(key, value));
+          changed = true;
+        }
+      }
+      return changed;
+    }
+  }
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>Generates an iterator across map entries that follows the ordering in
+   * which the key-value pairs were added to the multimap.
+   *
+   * @return a key-value iterator with the correct ordering
+   */
+  @Override Iterator<Map.Entry<K, V>> createEntryIterator() {
+    final Iterator<Map.Entry<K, V>> delegateIterator = linkedEntries.iterator();
+
+    return new Iterator<Map.Entry<K, V>>() {
+      Map.Entry<K, V> entry;
+
+      @Override
+      public boolean hasNext() {
+        return delegateIterator.hasNext();
+      }
+
+      @Override
+      public Map.Entry<K, V> next() {
+        entry = delegateIterator.next();
+        return entry;
+      }
+
+      @Override
+      public void remove() {
+        // Remove from iterator first to keep iterator valid.
+        delegateIterator.remove();
+        LinkedHashMultimap.this.remove(entry.getKey(), entry.getValue());
+      }
+    };
+  }
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>If {@code values} is not empty and the multimap already contains a
+   * mapping for {@code key}, the {@code keySet()} ordering is unchanged.
+   * However, the provided values always come last in the {@link #entries()} and
+   * {@link #values()} iteration orderings.
+   */
+  @Override public Set<V> replaceValues(
+      @Nullable K key, Iterable<? extends V> values) {
+    return super.replaceValues(key, values);
+  }
+
+  /**
+   * Returns a set of all key-value pairs. Changes to the returned set will
+   * update the underlying multimap, and vice versa. The entries set does not
+   * support the {@code add} or {@code addAll} operations.
+   *
+   * <p>The iterator generated by the returned set traverses the entries in the
+   * order they were added to the multimap.
+   *
+   * <p>Each entry is an immutable snapshot of a key-value mapping in the
+   * multimap, taken at the time the entry is returned by a method call to the
+   * collection or its iterator.
+   */
+  @Override public Set<Map.Entry<K, V>> entries() {
+    return super.entries();
+  }
+
+  /**
+   * Returns a collection of all values in the multimap. Changes to the returned
+   * collection will update the underlying multimap, and vice versa.
+   *
+   * <p>The iterator generated by the returned collection traverses the values
+   * in the order they were added to the multimap.
+   */
+  @Override public Collection<V> values() {
+    return super.values();
+  }
+
+  // Unfortunately, the entries() ordering does not determine the key ordering;
+  // see the example in the LinkedListMultimap class Javadoc.
+}
+
diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/LinkedHashMultiset.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/LinkedHashMultiset.java
new file mode 100644
index 0000000..7715784
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/LinkedHashMultiset.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.LinkedHashMap;
+
+/**
+ * A {@code Multiset} implementation with predictable iteration order. Its
+ * iterator orders elements according to when the first occurrence of the
+ * element was added. When the multiset contains multiple instances of an
+ * element, those instances are consecutive in the iteration order. If all
+ * occurrences of an element are removed, after which that element is added to
+ * the multiset, the element will appear at the end of the iteration.
+ *
+ * @author Kevin Bourrillion
+ * @author Jared Levy
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible(serializable = true, emulated = true)
+@SuppressWarnings("serial") // we're overriding default serialization
+public final class LinkedHashMultiset<E> extends AbstractMapBasedMultiset<E> {
+
+  /**
+   * Creates a new, empty {@code LinkedHashMultiset} using the default initial
+   * capacity.
+   */
+  public static <E> LinkedHashMultiset<E> create() {
+    return new LinkedHashMultiset<E>();
+  }
+
+  /**
+   * Creates a new, empty {@code LinkedHashMultiset} with the specified expected
+   * number of distinct elements.
+   *
+   * @param distinctElements the expected number of distinct elements
+   * @throws IllegalArgumentException if {@code distinctElements} is negative
+   */
+  public static <E> LinkedHashMultiset<E> create(int distinctElements) {
+    return new LinkedHashMultiset<E>(distinctElements);
+  }
+
+  /**
+   * Creates a new {@code LinkedHashMultiset} containing the specified elements.
+   *
+   * <p>This implementation is highly efficient when {@code elements} is itself
+   * a {@link Multiset}.
+   *
+   * @param elements the elements that the multiset should contain
+   */
+  public static <E> LinkedHashMultiset<E> create(
+      Iterable<? extends E> elements) {
+    LinkedHashMultiset<E> multiset =
+        create(Multisets.inferDistinctElements(elements));
+    Iterables.addAll(multiset, elements);
+    return multiset;
+  }
+
+  private LinkedHashMultiset() {
+    super(new LinkedHashMap<E, Count>());
+  }
+
+  private LinkedHashMultiset(int distinctElements) {
+    // Could use newLinkedHashMapWithExpectedSize() if it existed
+    super(new LinkedHashMap<E, Count>(Maps.capacity(distinctElements)));
+  }
+}
+
diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/LinkedListMultimap.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/LinkedListMultimap.java
new file mode 100644
index 0000000..2273535
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/LinkedListMultimap.java
@@ -0,0 +1,1108 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkState;
+import static com.google.common.collect.Multisets.setCountImpl;
+import static java.util.Collections.unmodifiableList;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Objects;
+import com.google.common.base.Preconditions;
+
+import java.io.Serializable;
+import java.util.AbstractCollection;
+import java.util.AbstractMap;
+import java.util.AbstractSequentialList;
+import java.util.AbstractSet;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.NoSuchElementException;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * An implementation of {@code ListMultimap} that supports deterministic
+ * iteration order for both keys and values. The iteration order is preserved
+ * across non-distinct key values. For example, for the following multimap
+ * definition: <pre>   {@code
+ *
+ *   Multimap<K, V> multimap = LinkedListMultimap.create();
+ *   multimap.put(key1, foo);
+ *   multimap.put(key2, bar);
+ *   multimap.put(key1, baz);}</pre>
+ *
+ * ... the iteration order for {@link #keys()} is {@code [key1, key2, key1]},
+ * and similarly for {@link #entries()}. Unlike {@link LinkedHashMultimap}, the
+ * iteration order is kept consistent between keys, entries and values. For
+ * example, calling: <pre>   {@code
+ *
+ *   map.remove(key1, foo);}</pre>
+ *
+ * changes the entries iteration order to {@code [key2=bar, key1=baz]} and the
+ * key iteration order to {@code [key2, key1]}. The {@link #entries()} iterator
+ * returns mutable map entries, and {@link #replaceValues} attempts to preserve
+ * iteration order as much as possible.
+ *
+ * <p>The collections returned by {@link #keySet()} and {@link #asMap} iterate
+ * through the keys in the order they were first added to the multimap.
+ * Similarly, {@link #get}, {@link #removeAll}, and {@link #replaceValues}
+ * return collections that iterate through the values in the order they were
+ * added. The collections generated by {@link #entries()}, {@link #keys()}, and
+ * {@link #values} iterate across the key-value mappings in the order they were
+ * added to the multimap.
+ *
+ * <p>The {@link #values()} and {@link #entries()} methods both return a
+ * {@code List}, instead of the {@code Collection} specified by the {@link
+ * ListMultimap} interface.
+ *
+ * <p>The methods {@link #get}, {@link #keySet()}, {@link #keys()},
+ * {@link #values}, {@link #entries()}, and {@link #asMap} return collections
+ * that are views of the multimap. If the multimap is modified while an
+ * iteration over any of those collections is in progress, except through the
+ * iterator's methods, the results of the iteration are undefined.
+ *
+ * <p>Keys and values may be null. All optional multimap methods are supported,
+ * and all returned views are modifiable.
+ *
+ * <p>This class is not threadsafe when any concurrent operations update the
+ * multimap. Concurrent read operations will work correctly. To allow concurrent
+ * update operations, wrap your multimap with a call to {@link
+ * Multimaps#synchronizedListMultimap}.
+ *
+ * @author Mike Bostock
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible(serializable = true, emulated = true)
+public class LinkedListMultimap<K, V>
+    implements ListMultimap<K, V>, Serializable {
+  /*
+   * Order is maintained using a linked list containing all key-value pairs. In
+   * addition, a series of disjoint linked lists of "siblings", each containing
+   * the values for a specific key, is used to implement {@link
+   * ValueForKeyIterator} in constant time.
+   */
+
+  private static final class Node<K, V> {
+    final K key;
+    V value;
+    Node<K, V> next; // the next node (with any key)
+    Node<K, V> previous; // the previous node (with any key)
+    Node<K, V> nextSibling; // the next node with the same key
+    Node<K, V> previousSibling; // the previous node with the same key
+
+    Node(@Nullable K key, @Nullable V value) {
+      this.key = key;
+      this.value = value;
+    }
+
+    @Override public String toString() {
+      return key + "=" + value;
+    }
+  }
+
+  private transient Node<K, V> head; // the head for all keys
+  private transient Node<K, V> tail; // the tail for all keys
+  private transient Multiset<K> keyCount; // the number of values for each key
+  private transient Map<K, Node<K, V>> keyToKeyHead; // the head for a given key
+  private transient Map<K, Node<K, V>> keyToKeyTail; // the tail for a given key
+
+  /**
+   * Creates a new, empty {@code LinkedListMultimap} with the default initial
+   * capacity.
+   */
+  public static <K, V> LinkedListMultimap<K, V> create() {
+    return new LinkedListMultimap<K, V>();
+  }
+
+  /**
+   * Constructs an empty {@code LinkedListMultimap} with enough capacity to hold
+   * the specified number of keys without rehashing.
+   *
+   * @param expectedKeys the expected number of distinct keys
+   * @throws IllegalArgumentException if {@code expectedKeys} is negative
+   */
+  public static <K, V> LinkedListMultimap<K, V> create(int expectedKeys) {
+    return new LinkedListMultimap<K, V>(expectedKeys);
+  }
+
+  /**
+   * Constructs a {@code LinkedListMultimap} with the same mappings as the
+   * specified {@code Multimap}. The new multimap has the same
+   * {@link Multimap#entries()} iteration order as the input multimap.
+   *
+   * @param multimap the multimap whose contents are copied to this multimap
+   */
+  public static <K, V> LinkedListMultimap<K, V> create(
+      Multimap<? extends K, ? extends V> multimap) {
+    return new LinkedListMultimap<K, V>(multimap);
+  }
+
+  LinkedListMultimap() {
+    keyCount = LinkedHashMultiset.create();
+    keyToKeyHead = Maps.newHashMap();
+    keyToKeyTail = Maps.newHashMap();
+  }
+
+  private LinkedListMultimap(int expectedKeys) {
+    keyCount = LinkedHashMultiset.create(expectedKeys);
+    keyToKeyHead = Maps.newHashMapWithExpectedSize(expectedKeys);
+    keyToKeyTail = Maps.newHashMapWithExpectedSize(expectedKeys);
+  }
+
+  private LinkedListMultimap(Multimap<? extends K, ? extends V> multimap) {
+    this(multimap.keySet().size());
+    putAll(multimap);
+  }
+
+  /**
+   * Adds a new node for the specified key-value pair before the specified
+   * {@code nextSibling} element, or at the end of the list if {@code
+   * nextSibling} is null. Note: if {@code nextSibling} is specified, it MUST be
+   * for an node for the same {@code key}!
+   */
+  private Node<K, V> addNode(
+      @Nullable K key, @Nullable V value, @Nullable Node<K, V> nextSibling) {
+    Node<K, V> node = new Node<K, V>(key, value);
+    if (head == null) { // empty list
+      head = tail = node;
+      keyToKeyHead.put(key, node);
+      keyToKeyTail.put(key, node);
+    } else if (nextSibling == null) { // non-empty list, add to tail
+      tail.next = node;
+      node.previous = tail;
+      Node<K, V> keyTail = keyToKeyTail.get(key);
+      if (keyTail == null) { // first for this key
+        keyToKeyHead.put(key, node);
+      } else {
+        keyTail.nextSibling = node;
+        node.previousSibling = keyTail;
+      }
+      keyToKeyTail.put(key, node);
+      tail = node;
+    } else { // non-empty list, insert before nextSibling
+      node.previous = nextSibling.previous;
+      node.previousSibling = nextSibling.previousSibling;
+      node.next = nextSibling;
+      node.nextSibling = nextSibling;
+      if (nextSibling.previousSibling == null) { // nextSibling was key head
+        keyToKeyHead.put(key, node);
+      } else {
+        nextSibling.previousSibling.nextSibling = node;
+      }
+      if (nextSibling.previous == null) { // nextSibling was head
+        head = node;
+      } else {
+        nextSibling.previous.next = node;
+      }
+      nextSibling.previous = node;
+      nextSibling.previousSibling = node;
+    }
+    keyCount.add(key);
+    return node;
+  }
+
+  /**
+   * Removes the specified node from the linked list. This method is only
+   * intended to be used from the {@code Iterator} classes. See also {@link
+   * LinkedListMultimap#removeAllNodes(Object)}.
+   */
+  private void removeNode(Node<K, V> node) {
+    if (node.previous != null) {
+      node.previous.next = node.next;
+    } else { // node was head
+      head = node.next;
+    }
+    if (node.next != null) {
+      node.next.previous = node.previous;
+    } else { // node was tail
+      tail = node.previous;
+    }
+    if (node.previousSibling != null) {
+      node.previousSibling.nextSibling = node.nextSibling;
+    } else if (node.nextSibling != null) { // node was key head
+      keyToKeyHead.put(node.key, node.nextSibling);
+    } else {
+      keyToKeyHead.remove(node.key); // don't leak a key-null entry
+    }
+    if (node.nextSibling != null) {
+      node.nextSibling.previousSibling = node.previousSibling;
+    } else if (node.previousSibling != null) { // node was key tail
+      keyToKeyTail.put(node.key, node.previousSibling);
+    } else {
+      keyToKeyTail.remove(node.key); // don't leak a key-null entry
+    }
+    keyCount.remove(node.key);
+  }
+
+  /** Removes all nodes for the specified key. */
+  private void removeAllNodes(@Nullable Object key) {
+    for (Iterator<V> i = new ValueForKeyIterator(key); i.hasNext();) {
+      i.next();
+      i.remove();
+    }
+  }
+
+  /** Helper method for verifying that an iterator element is present. */
+  private static void checkElement(@Nullable Object node) {
+    if (node == null) {
+      throw new NoSuchElementException();
+    }
+  }
+
+  /** An {@code Iterator} over all nodes. */
+  private class NodeIterator implements ListIterator<Node<K, V>> {
+    int nextIndex;
+    Node<K, V> next;
+    Node<K, V> current;
+    Node<K, V> previous;
+
+    NodeIterator() {
+      next = head;
+    }
+    NodeIterator(int index) {
+      int size = size();
+      Preconditions.checkPositionIndex(index, size);
+      if (index >= (size / 2)) {
+        previous = tail;
+        nextIndex = size;
+        while (index++ < size) {
+          previous();
+        }
+      } else {
+        next = head;
+        while (index-- > 0) {
+          next();
+        }
+      }
+      current = null;
+    }
+    @Override
+    public boolean hasNext() {
+      return next != null;
+    }
+    @Override
+    public Node<K, V> next() {
+      checkElement(next);
+      previous = current = next;
+      next = next.next;
+      nextIndex++;
+      return current;
+    }
+    @Override
+    public void remove() {
+      checkState(current != null);
+      if (current != next) { // after call to next()
+        previous = current.previous;
+        nextIndex--;
+      } else { // after call to previous()
+        next = current.next;
+      }
+      removeNode(current);
+      current = null;
+    }
+    @Override
+    public boolean hasPrevious() {
+      return previous != null;
+    }
+    @Override
+    public Node<K, V> previous() {
+      checkElement(previous);
+      next = current = previous;
+      previous = previous.previous;
+      nextIndex--;
+      return current;
+    }
+    @Override
+    public int nextIndex() {
+      return nextIndex;
+    }
+    @Override
+    public int previousIndex() {
+      return nextIndex - 1;
+    }
+    @Override
+    public void set(Node<K, V> e) {
+      throw new UnsupportedOperationException();
+    }
+    @Override
+    public void add(Node<K, V> e) {
+      throw new UnsupportedOperationException();
+    }
+    void setValue(V value) {
+      checkState(current != null);
+      current.value = value;
+    }
+  }
+
+  /** An {@code Iterator} over distinct keys in key head order. */
+  private class DistinctKeyIterator implements Iterator<K> {
+    final Set<K> seenKeys = Sets.<K>newHashSetWithExpectedSize(keySet().size());
+    Node<K, V> next = head;
+    Node<K, V> current;
+
+    @Override
+    public boolean hasNext() {
+      return next != null;
+    }
+    @Override
+    public K next() {
+      checkElement(next);
+      current = next;
+      seenKeys.add(current.key);
+      do { // skip ahead to next unseen key
+        next = next.next;
+      } while ((next != null) && !seenKeys.add(next.key));
+      return current.key;
+    }
+    @Override
+    public void remove() {
+      checkState(current != null);
+      removeAllNodes(current.key);
+      current = null;
+    }
+  }
+
+  /** A {@code ListIterator} over values for a specified key. */
+  private class ValueForKeyIterator implements ListIterator<V> {
+    final Object key;
+    int nextIndex;
+    Node<K, V> next;
+    Node<K, V> current;
+    Node<K, V> previous;
+
+    /** Constructs a new iterator over all values for the specified key. */
+    ValueForKeyIterator(@Nullable Object key) {
+      this.key = key;
+      next = keyToKeyHead.get(key);
+    }
+
+    /**
+     * Constructs a new iterator over all values for the specified key starting
+     * at the specified index. This constructor is optimized so that it starts
+     * at either the head or the tail, depending on which is closer to the
+     * specified index. This allows adds to the tail to be done in constant
+     * time.
+     *
+     * @throws IndexOutOfBoundsException if index is invalid
+     */
+    public ValueForKeyIterator(@Nullable Object key, int index) {
+      int size = keyCount.count(key);
+      Preconditions.checkPositionIndex(index, size);
+      if (index >= (size / 2)) {
+        previous = keyToKeyTail.get(key);
+        nextIndex = size;
+        while (index++ < size) {
+          previous();
+        }
+      } else {
+        next = keyToKeyHead.get(key);
+        while (index-- > 0) {
+          next();
+        }
+      }
+      this.key = key;
+      current = null;
+    }
+
+    @Override
+    public boolean hasNext() {
+      return next != null;
+    }
+
+    @Override
+    public V next() {
+      checkElement(next);
+      previous = current = next;
+      next = next.nextSibling;
+      nextIndex++;
+      return current.value;
+    }
+
+    @Override
+    public boolean hasPrevious() {
+      return previous != null;
+    }
+
+    @Override
+    public V previous() {
+      checkElement(previous);
+      next = current = previous;
+      previous = previous.previousSibling;
+      nextIndex--;
+      return current.value;
+    }
+
+    @Override
+    public int nextIndex() {
+      return nextIndex;
+    }
+
+    @Override
+    public int previousIndex() {
+      return nextIndex - 1;
+    }
+
+    @Override
+    public void remove() {
+      checkState(current != null);
+      if (current != next) { // after call to next()
+        previous = current.previousSibling;
+        nextIndex--;
+      } else { // after call to previous()
+        next = current.nextSibling;
+      }
+      removeNode(current);
+      current = null;
+    }
+
+    @Override
+    public void set(V value) {
+      checkState(current != null);
+      current.value = value;
+    }
+
+    @Override
+    @SuppressWarnings("unchecked")
+    public void add(V value) {
+      previous = addNode((K) key, value, next);
+      nextIndex++;
+      current = null;
+    }
+  }
+
+  // Query Operations
+
+  @Override
+  public int size() {
+    return keyCount.size();
+  }
+
+  @Override
+  public boolean isEmpty() {
+    return head == null;
+  }
+
+  @Override
+  public boolean containsKey(@Nullable Object key) {
+    return keyToKeyHead.containsKey(key);
+  }
+
+  @Override
+  public boolean containsValue(@Nullable Object value) {
+    for (Iterator<Node<K, V>> i = new NodeIterator(); i.hasNext();) {
+      if (Objects.equal(i.next().value, value)) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  @Override
+  public boolean containsEntry(@Nullable Object key, @Nullable Object value) {
+    for (Iterator<V> i = new ValueForKeyIterator(key); i.hasNext();) {
+      if (Objects.equal(i.next(), value)) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  // Modification Operations
+
+  /**
+   * Stores a key-value pair in the multimap.
+   *
+   * @param key key to store in the multimap
+   * @param value value to store in the multimap
+   * @return {@code true} always
+   */
+  @Override
+  public boolean put(@Nullable K key, @Nullable V value) {
+    addNode(key, value, null);
+    return true;
+  }
+
+  @Override
+  public boolean remove(@Nullable Object key, @Nullable Object value) {
+    Iterator<V> values = new ValueForKeyIterator(key);
+    while (values.hasNext()) {
+      if (Objects.equal(values.next(), value)) {
+        values.remove();
+        return true;
+      }
+    }
+    return false;
+  }
+
+  // Bulk Operations
+
+  @Override
+  public boolean putAll(@Nullable K key, Iterable<? extends V> values) {
+    boolean changed = false;
+    for (V value : values) {
+      changed |= put(key, value);
+    }
+    return changed;
+  }
+
+  @Override
+  public boolean putAll(Multimap<? extends K, ? extends V> multimap) {
+    boolean changed = false;
+    for (Entry<? extends K, ? extends V> entry : multimap.entries()) {
+      changed |= put(entry.getKey(), entry.getValue());
+    }
+    return changed;
+  }
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>If any entries for the specified {@code key} already exist in the
+   * multimap, their values are changed in-place without affecting the iteration
+   * order.
+   *
+   * <p>The returned list is immutable and implements
+   * {@link java.util.RandomAccess}.
+   */
+  @Override
+  public List<V> replaceValues(@Nullable K key, Iterable<? extends V> values) {
+    List<V> oldValues = getCopy(key);
+    ListIterator<V> keyValues = new ValueForKeyIterator(key);
+    Iterator<? extends V> newValues = values.iterator();
+
+    // Replace existing values, if any.
+    while (keyValues.hasNext() && newValues.hasNext()) {
+      keyValues.next();
+      keyValues.set(newValues.next());
+    }
+
+    // Remove remaining old values, if any.
+    while (keyValues.hasNext()) {
+      keyValues.next();
+      keyValues.remove();
+    }
+
+    // Add remaining new values, if any.
+    while (newValues.hasNext()) {
+      keyValues.add(newValues.next());
+    }
+
+    return oldValues;
+  }
+
+  private List<V> getCopy(@Nullable Object key) {
+    return unmodifiableList(Lists.newArrayList(new ValueForKeyIterator(key)));
+  }
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>The returned list is immutable and implements
+   * {@link java.util.RandomAccess}.
+   */
+  @Override
+  public List<V> removeAll(@Nullable Object key) {
+    List<V> oldValues = getCopy(key);
+    removeAllNodes(key);
+    return oldValues;
+  }
+
+  @Override
+  public void clear() {
+    head = null;
+    tail = null;
+    keyCount.clear();
+    keyToKeyHead.clear();
+    keyToKeyTail.clear();
+  }
+
+  // Views
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>If the multimap is modified while an iteration over the list is in
+   * progress (except through the iterator's own {@code add}, {@code set} or
+   * {@code remove} operations) the results of the iteration are undefined.
+   *
+   * <p>The returned list is not serializable and does not have random access.
+   */
+  @Override
+  public List<V> get(final @Nullable K key) {
+    return new AbstractSequentialList<V>() {
+      @Override public int size() {
+        return keyCount.count(key);
+      }
+      @Override public ListIterator<V> listIterator(int index) {
+        return new ValueForKeyIterator(key, index);
+      }
+      @Override public boolean removeAll(Collection<?> c) {
+        return Iterators.removeAll(iterator(), c);
+      }
+      @Override public boolean retainAll(Collection<?> c) {
+        return Iterators.retainAll(iterator(), c);
+      }
+    };
+  }
+
+  private transient Set<K> keySet;
+
+  @Override
+  public Set<K> keySet() {
+    Set<K> result = keySet;
+    if (result == null) {
+      keySet = result = new AbstractSet<K>() {
+        @Override public int size() {
+          return keyCount.elementSet().size();
+        }
+        @Override public Iterator<K> iterator() {
+          return new DistinctKeyIterator();
+        }
+        @Override public boolean contains(Object key) { // for performance
+          return keyCount.contains(key);
+        }
+        @Override public boolean removeAll(Collection<?> c) {
+          checkNotNull(c); // eager for GWT
+          return super.removeAll(c);
+        }
+      };
+    }
+    return result;
+  }
+
+  private transient Multiset<K> keys;
+
+  @Override
+  public Multiset<K> keys() {
+    Multiset<K> result = keys;
+    if (result == null) {
+      keys = result = new MultisetView();
+    }
+    return result;
+  }
+
+  private class MultisetView extends AbstractCollection<K>
+      implements Multiset<K> {
+
+    @Override public int size() {
+      return keyCount.size();
+    }
+
+    @Override public Iterator<K> iterator() {
+      final Iterator<Node<K, V>> nodes = new NodeIterator();
+      return new Iterator<K>() {
+        @Override
+        public boolean hasNext() {
+          return nodes.hasNext();
+        }
+        @Override
+        public K next() {
+          return nodes.next().key;
+        }
+        @Override
+        public void remove() {
+          nodes.remove();
+        }
+      };
+    }
+
+    @Override
+    public int count(@Nullable Object key) {
+      return keyCount.count(key);
+    }
+
+    @Override
+    public int add(@Nullable K key, int occurrences) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public int remove(@Nullable Object key, int occurrences) {
+      checkArgument(occurrences >= 0);
+      int oldCount = count(key);
+      Iterator<V> values = new ValueForKeyIterator(key);
+      while ((occurrences-- > 0) && values.hasNext()) {
+        values.next();
+        values.remove();
+      }
+      return oldCount;
+    }
+
+    @Override
+    public int setCount(K element, int count) {
+      return setCountImpl(this, element, count);
+    }
+
+    @Override
+    public boolean setCount(K element, int oldCount, int newCount) {
+      return setCountImpl(this, element, oldCount, newCount);
+    }
+
+    @Override public boolean removeAll(Collection<?> c) {
+      return Iterators.removeAll(iterator(), c);
+    }
+
+    @Override public boolean retainAll(Collection<?> c) {
+      return Iterators.retainAll(iterator(), c);
+    }
+
+    @Override
+    public Set<K> elementSet() {
+      return keySet();
+    }
+
+    @Override
+    public Set<Entry<K>> entrySet() {
+      // TODO(jlevy): lazy init?
+      return new AbstractSet<Entry<K>>() {
+        @Override public int size() {
+          return keyCount.elementSet().size();
+        }
+
+        @Override public Iterator<Entry<K>> iterator() {
+          final Iterator<K> keyIterator = new DistinctKeyIterator();
+          return new Iterator<Entry<K>>() {
+            @Override
+            public boolean hasNext() {
+              return keyIterator.hasNext();
+            }
+            @Override
+            public Entry<K> next() {
+              final K key = keyIterator.next();
+              return new Multisets.AbstractEntry<K>() {
+                @Override
+                public K getElement() {
+                  return key;
+                }
+                @Override
+                public int getCount() {
+                  return keyCount.count(key);
+                }
+              };
+            }
+            @Override
+            public void remove() {
+              keyIterator.remove();
+            }
+          };
+        }
+      };
+    }
+
+    @Override public boolean equals(@Nullable Object object) {
+      return keyCount.equals(object);
+    }
+
+    @Override public int hashCode() {
+      return keyCount.hashCode();
+    }
+
+    @Override public String toString() {
+      return keyCount.toString(); // XXX observe order?
+    }
+  }
+
+  private transient List<V> valuesList;
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>The iterator generated by the returned collection traverses the values
+   * in the order they were added to the multimap. Because the values may have
+   * duplicates and follow the insertion ordering, this method returns a {@link
+   * List}, instead of the {@link Collection} specified in the {@link
+   * ListMultimap} interface.
+   */
+  @Override
+  public List<V> values() {
+    List<V> result = valuesList;
+    if (result == null) {
+      valuesList = result = new AbstractSequentialList<V>() {
+        @Override public int size() {
+          return keyCount.size();
+        }
+        @Override
+        public ListIterator<V> listIterator(int index) {
+          final NodeIterator nodes = new NodeIterator(index);
+          return new ListIterator<V>() {
+            @Override
+            public boolean hasNext() {
+              return nodes.hasNext();
+            }
+            @Override
+            public V next() {
+              return nodes.next().value;
+            }
+            @Override
+            public boolean hasPrevious() {
+              return nodes.hasPrevious();
+            }
+            @Override
+            public V previous() {
+              return nodes.previous().value;
+            }
+            @Override
+            public int nextIndex() {
+              return nodes.nextIndex();
+            }
+            @Override
+            public int previousIndex() {
+              return nodes.previousIndex();
+            }
+            @Override
+            public void remove() {
+              nodes.remove();
+            }
+            @Override
+            public void set(V e) {
+              nodes.setValue(e);
+            }
+            @Override
+            public void add(V e) {
+              throw new UnsupportedOperationException();
+            }
+          };
+        }
+      };
+    }
+    return result;
+  }
+
+  private static <K, V> Entry<K, V> createEntry(final Node<K, V> node) {
+    return new AbstractMapEntry<K, V>() {
+      @Override public K getKey() {
+        return node.key;
+      }
+      @Override public V getValue() {
+        return node.value;
+      }
+      @Override public V setValue(V value) {
+        V oldValue = node.value;
+        node.value = value;
+        return oldValue;
+      }
+    };
+  }
+
+  private transient List<Entry<K, V>> entries;
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>The iterator generated by the returned collection traverses the entries
+   * in the order they were added to the multimap. Because the entries may have
+   * duplicates and follow the insertion ordering, this method returns a {@link
+   * List}, instead of the {@link Collection} specified in the {@link
+   * ListMultimap} interface.
+   *
+   * <p>An entry's {@link Entry#getKey} method always returns the same key,
+   * regardless of what happens subsequently. As long as the corresponding
+   * key-value mapping is not removed from the multimap, {@link Entry#getValue}
+   * returns the value from the multimap, which may change over time, and {@link
+   * Entry#setValue} modifies that value. Removing the mapping from the
+   * multimap does not alter the value returned by {@code getValue()}, though a
+   * subsequent {@code setValue()} call won't update the multimap but will lead
+   * to a revised value being returned by {@code getValue()}.
+   */
+  @Override
+  public List<Entry<K, V>> entries() {
+    List<Entry<K, V>> result = entries;
+    if (result == null) {
+      entries = result = new AbstractSequentialList<Entry<K, V>>() {
+        @Override public int size() {
+          return keyCount.size();
+        }
+
+        @Override public ListIterator<Entry<K, V>> listIterator(int index) {
+          final ListIterator<Node<K, V>> nodes = new NodeIterator(index);
+          return new ListIterator<Entry<K, V>>() {
+            @Override
+            public boolean hasNext() {
+              return nodes.hasNext();
+            }
+
+            @Override
+            public Entry<K, V> next() {
+              return createEntry(nodes.next());
+            }
+
+            @Override
+            public void remove() {
+              nodes.remove();
+            }
+
+            @Override
+            public boolean hasPrevious() {
+              return nodes.hasPrevious();
+            }
+
+            @Override
+            public Map.Entry<K, V> previous() {
+              return createEntry(nodes.previous());
+            }
+
+            @Override
+            public int nextIndex() {
+              return nodes.nextIndex();
+            }
+
+            @Override
+            public int previousIndex() {
+              return nodes.previousIndex();
+            }
+
+            @Override
+            public void set(Map.Entry<K, V> e) {
+              throw new UnsupportedOperationException();
+            }
+
+            @Override
+            public void add(Map.Entry<K, V> e) {
+              throw new UnsupportedOperationException();
+            }
+          };
+        }
+      };
+    }
+    return result;
+  }
+
+  private class AsMapEntries extends AbstractSet<Entry<K, Collection<V>>> {
+    @Override public int size() {
+      return keyCount.elementSet().size();
+    }
+
+    @Override public Iterator<Entry<K, Collection<V>>> iterator() {
+      final Iterator<K> keyIterator = new DistinctKeyIterator();
+      return new Iterator<Entry<K, Collection<V>>>() {
+        @Override
+        public boolean hasNext() {
+          return keyIterator.hasNext();
+        }
+
+        @Override
+        public Entry<K, Collection<V>> next() {
+          final K key = keyIterator.next();
+          return new AbstractMapEntry<K, Collection<V>>() {
+            @Override public K getKey() {
+              return key;
+            }
+
+            @Override public Collection<V> getValue() {
+              return LinkedListMultimap.this.get(key);
+            }
+          };
+        }
+
+        @Override
+        public void remove() {
+          keyIterator.remove();
+        }
+      };
+    }
+
+    // TODO(jlevy): Override contains() and remove() for better performance.
+  }
+
+  private transient Map<K, Collection<V>> map;
+
+  @Override
+  public Map<K, Collection<V>> asMap() {
+    Map<K, Collection<V>> result = map;
+    if (result == null) {
+      map = result = new AbstractMap<K, Collection<V>>() {
+        Set<Entry<K, Collection<V>>> entrySet;
+
+        @Override public Set<Entry<K, Collection<V>>> entrySet() {
+          Set<Entry<K, Collection<V>>> result = entrySet;
+          if (result == null) {
+            entrySet = result = new AsMapEntries();
+          }
+          return result;
+        }
+
+        // The following methods are included for performance.
+
+        @Override public boolean containsKey(@Nullable Object key) {
+          return LinkedListMultimap.this.containsKey(key);
+        }
+
+        @SuppressWarnings("unchecked")
+        @Override public Collection<V> get(@Nullable Object key) {
+          Collection<V> collection = LinkedListMultimap.this.get((K) key);
+          return collection.isEmpty() ? null : collection;
+        }
+
+        @Override public Collection<V> remove(@Nullable Object key) {
+          Collection<V> collection = removeAll(key);
+          return collection.isEmpty() ? null : collection;
+        }
+      };
+    }
+
+    return result;
+  }
+
+  // Comparison and hashing
+
+  /**
+   * Compares the specified object to this multimap for equality.
+   *
+   * <p>Two {@code ListMultimap} instances are equal if, for each key, they
+   * contain the same values in the same order. If the value orderings disagree,
+   * the multimaps will not be considered equal.
+   */
+  @Override public boolean equals(@Nullable Object other) {
+    if (other == this) {
+      return true;
+    }
+    if (other instanceof Multimap) {
+      Multimap<?, ?> that = (Multimap<?, ?>) other;
+      return this.asMap().equals(that.asMap());
+    }
+    return false;
+  }
+
+  /**
+   * Returns the hash code for this multimap.
+   *
+   * <p>The hash code of a multimap is defined as the hash code of the map view,
+   * as returned by {@link Multimap#asMap}.
+   */
+  @Override public int hashCode() {
+    return asMap().hashCode();
+  }
+
+  /**
+   * Returns a string representation of the multimap, generated by calling
+   * {@code toString} on the map returned by {@link Multimap#asMap}.
+   *
+   * @return a string representation of the multimap
+   */
+  @Override public String toString() {
+    return asMap().toString();
+  }
+}
+
diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/MapMaker.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/MapMaker.java
new file mode 100644
index 0000000..52c1a98
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/MapMaker.java
@@ -0,0 +1,252 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.base.Function;
+import com.google.gwt.user.client.Timer;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * MapMaker emulation. Since Javascript is single-threaded and have no references, this reduces to
+ * the creation of expiring and computing maps.
+ *
+ * @author Charles Fry
+ */
+public class MapMaker extends GenericMapMaker<Object, Object> {
+
+  // TODO(fry,user): ConcurrentHashMap never throws a CME when mutating the map during iteration, but
+  // this implementation (based on a LHM) does. This will all be replaced soon anyways, so leaving
+  // it as is for now.
+  private static class ExpiringComputingMap<K, V> extends LinkedHashMap<K, V>
+      implements ConcurrentMap<K, V> {
+    private final long expirationMillis;
+    private final Function<? super K, ? extends V> computer;
+    private final int maximumSize;
+
+    ExpiringComputingMap(long expirationMillis, int maximumSize, int initialCapacity,
+        float loadFactor) {
+      this(expirationMillis, null, maximumSize, initialCapacity, loadFactor);
+    }
+
+    ExpiringComputingMap(long expirationMillis, Function<? super K, ? extends V> computer,
+        int maximumSize, int initialCapacity, float loadFactor) {
+      super(initialCapacity, loadFactor, (maximumSize != -1));
+      this.expirationMillis = expirationMillis;
+      this.computer = computer;
+      this.maximumSize = maximumSize;
+    }
+
+    @Override
+    public V put(K key, V value) {
+      V result = super.put(key, value);
+      if (expirationMillis > 0) {
+        scheduleRemoval(key, value);
+      }
+      return result;
+    }
+
+    @Override
+    protected boolean removeEldestEntry(Map.Entry<K, V> ignored) {
+      return (maximumSize == -1) ? false : size() > maximumSize;
+    }
+
+    @Override
+    public V putIfAbsent(K key, V value) {
+      if (!containsKey(key)) {
+        return put(key, value);
+      } else {
+        return get(key);
+      }
+    }
+
+    @Override
+    public boolean remove(Object key, Object value) {
+      if (containsKey(key) && get(key).equals(value)) {
+        remove(key);
+        return true;
+      }
+      return false;
+    }
+
+    @Override
+    public boolean replace(K key, V oldValue, V newValue) {
+      if (containsKey(key) && get(key).equals(oldValue)) {
+        put(key, newValue);
+        return true;
+      }
+      return false;
+    }
+
+    @Override
+    public V replace(K key, V value) {
+      return containsKey(key) ? put(key, value) : null;
+    }
+
+    private void scheduleRemoval(final K key, final V value) {
+      // from MapMaker
+      /*
+       * TODO: Keep weak reference to map, too. Build a priority queue out of the entries themselves
+       * instead of creating a task per entry. Then, we could have one recurring task per map (which
+       * would clean the entire map and then reschedule itself depending upon when the next
+       * expiration comes). We also want to avoid removing an entry prematurely if the entry was set
+       * to the same value again.
+       */
+      Timer timer = new Timer() {
+        @Override
+        public void run() {
+          remove(key, value);
+        }
+      };
+      timer.schedule((int) expirationMillis);
+    }
+
+    @Override
+    public V get(Object k) {
+      // from CustomConcurrentHashMap
+      V result = super.get(k);
+      if (result == null && computer != null) {
+        /*
+         * This cast isn't safe, but we can rely on the fact that K is almost always passed to
+         * Map.get(), and tools like IDEs and Findbugs can catch situations where this isn't the
+         * case.
+         *
+         * The alternative is to add an overloaded method, but the chances of a user calling get()
+         * instead of the new API and the risks inherent in adding a new API outweigh this little
+         * hole.
+         */
+        @SuppressWarnings("unchecked")
+        K key = (K) k;
+        result = compute(key);
+      }
+      return result;
+    }
+
+    private V compute(K key) {
+      // from MapMaker
+      V value;
+      try {
+        value = computer.apply(key);
+      } catch (Throwable t) {
+        throw new ComputationException(t);
+      }
+
+      if (value == null) {
+        String message = computer + " returned null for key " + key + ".";
+        throw new NullPointerException(message);
+      }
+      put(key, value);
+      return value;
+    }
+  }
+
+  private int initialCapacity = 16;
+  private float loadFactor = 0.75f;
+  private long expirationMillis = 0;
+  private int maximumSize = -1;
+  private boolean useCustomMap;
+
+  public MapMaker() {}
+
+  @Override
+  public MapMaker initialCapacity(int initialCapacity) {
+    if (initialCapacity < 0) {
+      throw new IllegalArgumentException();
+    }
+    this.initialCapacity = initialCapacity;
+    return this;
+  }
+
+  public MapMaker loadFactor(float loadFactor) {
+    if (loadFactor <= 0) {
+      throw new IllegalArgumentException();
+    }
+    this.loadFactor = loadFactor;
+    return this;
+  }
+
+  @Override
+  public
+  MapMaker expiration(long duration, TimeUnit unit) {
+    return expireAfterWrite(duration, unit);
+  }
+
+  @Override
+  MapMaker expireAfterWrite(long duration, TimeUnit unit) {
+    if (expirationMillis != 0) {
+      throw new IllegalStateException(
+          "expiration time of " + expirationMillis + " ns was already set");
+    }
+    if (duration <= 0) {
+      throw new IllegalArgumentException("invalid duration: " + duration);
+    }
+    this.expirationMillis = unit.toMillis(duration);
+    useCustomMap = true;
+    return this;
+  }
+
+  @Override
+  MapMaker maximumSize(int maximumSize) {
+    if (this.maximumSize != -1) {
+      throw new IllegalStateException("maximum size of " + maximumSize + " was already set");
+    }
+    if (maximumSize < 0) {
+      throw new IllegalArgumentException("invalid maximum size: " + maximumSize);
+    }
+    this.maximumSize = maximumSize;
+    useCustomMap = true;
+    return this;
+  }
+
+  @Override
+  public MapMaker concurrencyLevel(int concurrencyLevel) {
+    if (concurrencyLevel < 1) {
+      throw new IllegalArgumentException("GWT only supports a concurrency level of 1");
+    }
+    // GWT technically only supports concurrencyLevel == 1, but we silently
+    // ignore other positive values.
+    return this;
+  }
+
+  @Override
+  MapMaker strongKeys() {
+    return this;
+  }
+
+  @Override
+  MapMaker strongValues() {
+    return this;
+  }
+
+  @Override
+  public <K, V> ConcurrentMap<K, V> makeMap() {
+    return useCustomMap
+        ? new ExpiringComputingMap<K, V>(expirationMillis, null, maximumSize, initialCapacity,
+            loadFactor)
+        : new ConcurrentHashMap<K, V>(initialCapacity, loadFactor);
+  }
+
+  @Override
+  public <K, V> ConcurrentMap<K, V> makeComputingMap(Function<? super K, ? extends V> computer) {
+    return new ExpiringComputingMap<K, V>(expirationMillis, computer, maximumSize, initialCapacity,
+        loadFactor);
+  }
+}
diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/Maps.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/Maps.java
new file mode 100644
index 0000000..78165de
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/Maps.java
@@ -0,0 +1,2262 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Equivalence;
+import com.google.common.base.Equivalences;
+import com.google.common.base.Function;
+import com.google.common.base.Joiner.MapJoiner;
+import com.google.common.base.Objects;
+import com.google.common.base.Preconditions;
+import com.google.common.base.Predicate;
+import com.google.common.base.Predicates;
+import com.google.common.collect.MapDifference.ValueDifference;
+import com.google.common.primitives.Ints;
+
+import java.io.Serializable;
+import java.util.AbstractCollection;
+import java.util.AbstractMap;
+import java.util.AbstractSet;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.EnumMap;
+import java.util.HashMap;
+import java.util.IdentityHashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.SortedMap;
+import java.util.TreeMap;
+import java.util.concurrent.ConcurrentMap;
+
+import javax.annotation.Nullable;
+
+/**
+ * Static utility methods pertaining to {@link Map} instances. Also see this
+ * class's counterparts {@link Lists} and {@link Sets}.
+ *
+ * @author Kevin Bourrillion
+ * @author Mike Bostock
+ * @author Isaac Shum
+ * @author Louis Wasserman
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible(emulated = true)
+public final class Maps {
+  private Maps() {}
+
+  /**
+   * Creates a <i>mutable</i>, empty {@code HashMap} instance.
+   *
+   * <p><b>Note:</b> if mutability is not required, use {@link
+   * ImmutableMap#of()} instead.
+   *
+   * <p><b>Note:</b> if {@code K} is an {@code enum} type, use {@link
+   * #newEnumMap} instead.
+   *
+   * @return a new, empty {@code HashMap}
+   */
+  public static <K, V> HashMap<K, V> newHashMap() {
+    return new HashMap<K, V>();
+  }
+
+  /**
+   * Creates a {@code HashMap} instance, with a high enough "initial capacity"
+   * that it <i>should</i> hold {@code expectedSize} elements without growth.
+   * This behavior cannot be broadly guaranteed, but it is observed to be true
+   * for OpenJDK 1.6. It also can't be guaranteed that the method isn't
+   * inadvertently <i>oversizing</i> the returned map.
+   *
+   * @param expectedSize the number of elements you expect to add to the
+   *        returned map
+   * @return a new, empty {@code HashMap} with enough capacity to hold {@code
+   *         expectedSize} elements without resizing
+   * @throws IllegalArgumentException if {@code expectedSize} is negative
+   */
+  public static <K, V> HashMap<K, V> newHashMapWithExpectedSize(
+      int expectedSize) {
+    return new HashMap<K, V>(capacity(expectedSize));
+  }
+
+  /**
+   * Returns a capacity that is sufficient to keep the map from being resized as
+   * long as it grows no larger than expectedSize and the load factor is >= its
+   * default (0.75).
+   */
+  static int capacity(int expectedSize) {
+    if (expectedSize < 3) {
+      checkArgument(expectedSize >= 0);
+      return expectedSize + 1;
+    }
+    if (expectedSize < Ints.MAX_POWER_OF_TWO) {
+      return expectedSize + expectedSize / 3;
+    }
+    return Integer.MAX_VALUE; // any large value
+  }
+
+  /**
+   * Creates a <i>mutable</i> {@code HashMap} instance with the same mappings as
+   * the specified map.
+   *
+   * <p><b>Note:</b> if mutability is not required, use {@link
+   * ImmutableMap#copyOf(Map)} instead.
+   *
+   * <p><b>Note:</b> if {@code K} is an {@link Enum} type, use {@link
+   * #newEnumMap} instead.
+   *
+   * @param map the mappings to be placed in the new map
+   * @return a new {@code HashMap} initialized with the mappings from {@code
+   *         map}
+   */
+  public static <K, V> HashMap<K, V> newHashMap(
+      Map<? extends K, ? extends V> map) {
+    return new HashMap<K, V>(map);
+  }
+
+  /**
+   * Creates a <i>mutable</i>, empty, insertion-ordered {@code LinkedHashMap}
+   * instance.
+   *
+   * <p><b>Note:</b> if mutability is not required, use {@link
+   * ImmutableMap#of()} instead.
+   *
+   * @return a new, empty {@code LinkedHashMap}
+   */
+  public static <K, V> LinkedHashMap<K, V> newLinkedHashMap() {
+    return new LinkedHashMap<K, V>();
+  }
+
+  /**
+   * Creates a <i>mutable</i>, insertion-ordered {@code LinkedHashMap} instance
+   * with the same mappings as the specified map.
+   *
+   * <p><b>Note:</b> if mutability is not required, use {@link
+   * ImmutableMap#copyOf(Map)} instead.
+   *
+   * @param map the mappings to be placed in the new map
+   * @return a new, {@code LinkedHashMap} initialized with the mappings from
+   *         {@code map}
+   */
+  public static <K, V> LinkedHashMap<K, V> newLinkedHashMap(
+      Map<? extends K, ? extends V> map) {
+    return new LinkedHashMap<K, V>(map);
+  }
+
+  /**
+   * Returns a general-purpose instance of {@code ConcurrentMap}, which supports
+   * all optional operations of the ConcurrentMap interface. It does not permit
+   * null keys or values. It is serializable.
+   *
+   * <p>This is currently accomplished by calling {@link MapMaker#makeMap()}.
+   *
+   * <p>It is preferable to use {@code MapMaker} directly (rather than through
+   * this method), as it presents numerous useful configuration options,
+   * such as the concurrency level, load factor, key/value reference types,
+   * and value computation.
+   *
+   * @return a new, empty {@code ConcurrentMap}
+   * @since 3.0
+   */
+  public static <K, V> ConcurrentMap<K, V> newConcurrentMap() {
+    return new MapMaker().<K, V>makeMap();
+  }
+
+  /**
+   * Creates a <i>mutable</i>, empty {@code TreeMap} instance using the natural
+   * ordering of its elements.
+   *
+   * <p><b>Note:</b> if mutability is not required, use {@link
+   * ImmutableSortedMap#of()} instead.
+   *
+   * @return a new, empty {@code TreeMap}
+   */
+  public static <K extends Comparable, V> TreeMap<K, V> newTreeMap() {
+    return new TreeMap<K, V>();
+  }
+
+  /**
+   * Creates a <i>mutable</i> {@code TreeMap} instance with the same mappings as
+   * the specified map and using the same ordering as the specified map.
+   *
+   * <p><b>Note:</b> if mutability is not required, use {@link
+   * ImmutableSortedMap#copyOfSorted(SortedMap)} instead.
+   *
+   * @param map the sorted map whose mappings are to be placed in the new map
+   *        and whose comparator is to be used to sort the new map
+   * @return a new {@code TreeMap} initialized with the mappings from {@code
+   *         map} and using the comparator of {@code map}
+   */
+  public static <K, V> TreeMap<K, V> newTreeMap(SortedMap<K, ? extends V> map) {
+    return new TreeMap<K, V>(map);
+  }
+
+  /**
+   * Creates a <i>mutable</i>, empty {@code TreeMap} instance using the given
+   * comparator.
+   *
+   * <p><b>Note:</b> if mutability is not required, use {@code
+   * ImmutableSortedMap.orderedBy(comparator).build()} instead.
+   *
+   * @param comparator the comparator to sort the keys with
+   * @return a new, empty {@code TreeMap}
+   */
+  public static <C, K extends C, V> TreeMap<K, V> newTreeMap(
+      @Nullable Comparator<C> comparator) {
+    // Ideally, the extra type parameter "C" shouldn't be necessary. It is a
+    // work-around of a compiler type inference quirk that prevents the
+    // following code from being compiled:
+    // Comparator<Class<?>> comparator = null;
+    // Map<Class<? extends Throwable>, String> map = newTreeMap(comparator);
+    return new TreeMap<K, V>(comparator);
+  }
+
+  /**
+   * Creates an {@code EnumMap} instance.
+   *
+   * @param type the key type for this map
+   * @return a new, empty {@code EnumMap}
+   */
+  public static <K extends Enum<K>, V> EnumMap<K, V> newEnumMap(Class<K> type) {
+    return new EnumMap<K, V>(checkNotNull(type));
+  }
+
+  /**
+   * Creates an {@code EnumMap} with the same mappings as the specified map.
+   *
+   * @param map the map from which to initialize this {@code EnumMap}
+   * @return a new {@code EnumMap} initialized with the mappings from {@code
+   *         map}
+   * @throws IllegalArgumentException if {@code m} is not an {@code EnumMap}
+   *         instance and contains no mappings
+   */
+  public static <K extends Enum<K>, V> EnumMap<K, V> newEnumMap(
+      Map<K, ? extends V> map) {
+    return new EnumMap<K, V>(map);
+  }
+
+  /**
+   * Creates an {@code IdentityHashMap} instance.
+   *
+   * @return a new, empty {@code IdentityHashMap}
+   */
+  public static <K, V> IdentityHashMap<K, V> newIdentityHashMap() {
+    return new IdentityHashMap<K, V>();
+  }
+
+  /**
+   * Returns a synchronized (thread-safe) bimap backed by the specified bimap.
+   * In order to guarantee serial access, it is critical that <b>all</b> access
+   * to the backing bimap is accomplished through the returned bimap.
+   *
+   * <p>It is imperative that the user manually synchronize on the returned map
+   * when accessing any of its collection views: <pre>   {@code
+   *
+   *   BiMap<Long, String> map = Maps.synchronizedBiMap(
+   *       HashBiMap.<Long, String>create());
+   *   ...
+   *   Set<Long> set = map.keySet();  // Needn't be in synchronized block
+   *   ...
+   *   synchronized (map) {  // Synchronizing on map, not set!
+   *     Iterator<Long> it = set.iterator(); // Must be in synchronized block
+   *     while (it.hasNext()) {
+   *       foo(it.next());
+   *     }
+   *   }}</pre>
+   *
+   * Failure to follow this advice may result in non-deterministic behavior.
+   *
+   * <p>The returned bimap will be serializable if the specified bimap is
+   * serializable.
+   *
+   * @param bimap the bimap to be wrapped in a synchronized view
+   * @return a sychronized view of the specified bimap
+   */
+  public static <K, V> BiMap<K, V> synchronizedBiMap(BiMap<K, V> bimap) {
+    return Synchronized.biMap(bimap, null);
+  }
+
+  /**
+   * Computes the difference between two maps. This difference is an immutable
+   * snapshot of the state of the maps at the time this method is called. It
+   * will never change, even if the maps change at a later time.
+   *
+   * <p>Since this method uses {@code HashMap} instances internally, the keys of
+   * the supplied maps must be well-behaved with respect to
+   * {@link Object#equals} and {@link Object#hashCode}.
+   *
+   * <p><b>Note:</b>If you only need to know whether two maps have the same
+   * mappings, call {@code left.equals(right)} instead of this method.
+   *
+   * @param left the map to treat as the "left" map for purposes of comparison
+   * @param right the map to treat as the "right" map for purposes of comparison
+   * @return the difference between the two maps
+   */
+  @SuppressWarnings("unchecked")
+  public static <K, V> MapDifference<K, V> difference(
+      Map<? extends K, ? extends V> left, Map<? extends K, ? extends V> right) {
+    if (left instanceof SortedMap) {
+      SortedMap<K, ? extends V> sortedLeft = (SortedMap<K, ? extends V>) left;
+      SortedMapDifference<K, V> result = difference(sortedLeft, right);
+      return result;
+    }
+    return difference(left, right, Equivalences.equals());
+  }
+
+  /**
+   * Computes the difference between two maps. This difference is an immutable
+   * snapshot of the state of the maps at the time this method is called. It
+   * will never change, even if the maps change at a later time.
+   *
+   * <p>Values are compared using a provided equivalence, in the case of
+   * equality, the value on the 'left' is returned in the difference.
+   *
+   * <p>Since this method uses {@code HashMap} instances internally, the keys of
+   * the supplied maps must be well-behaved with respect to
+   * {@link Object#equals} and {@link Object#hashCode}.
+   *
+   * @param left the map to treat as the "left" map for purposes of comparison
+   * @param right the map to treat as the "right" map for purposes of comparison
+   * @param valueEquivalence the equivalence relationship to use to compare
+   *    values
+   * @return the difference between the two maps
+   * @since 10.0
+   */
+  @Beta
+  public static <K, V> MapDifference<K, V> difference(
+      Map<? extends K, ? extends V> left, Map<? extends K, ? extends V> right,
+      Equivalence<? super V> valueEquivalence) {
+    Preconditions.checkNotNull(valueEquivalence);
+
+    Map<K, V> onlyOnLeft = newHashMap();
+    Map<K, V> onlyOnRight = new HashMap<K, V>(right); // will whittle it down
+    Map<K, V> onBoth = newHashMap();
+    Map<K, MapDifference.ValueDifference<V>> differences = newHashMap();
+    boolean eq = true;
+
+    for (Entry<? extends K, ? extends V> entry : left.entrySet()) {
+      K leftKey = entry.getKey();
+      V leftValue = entry.getValue();
+      if (right.containsKey(leftKey)) {
+        V rightValue = onlyOnRight.remove(leftKey);
+        if (valueEquivalence.equivalent(leftValue, rightValue)) {
+          onBoth.put(leftKey, leftValue);
+        } else {
+          eq = false;
+          differences.put(
+              leftKey, ValueDifferenceImpl.create(leftValue, rightValue));
+        }
+      } else {
+        eq = false;
+        onlyOnLeft.put(leftKey, leftValue);
+      }
+    }
+
+    boolean areEqual = eq && onlyOnRight.isEmpty();
+    return mapDifference(
+        areEqual, onlyOnLeft, onlyOnRight, onBoth, differences);
+  }
+
+  private static <K, V> MapDifference<K, V> mapDifference(boolean areEqual,
+      Map<K, V> onlyOnLeft, Map<K, V> onlyOnRight, Map<K, V> onBoth,
+      Map<K, ValueDifference<V>> differences) {
+    return new MapDifferenceImpl<K, V>(areEqual,
+        Collections.unmodifiableMap(onlyOnLeft),
+        Collections.unmodifiableMap(onlyOnRight),
+        Collections.unmodifiableMap(onBoth),
+        Collections.unmodifiableMap(differences));
+  }
+
+  static class MapDifferenceImpl<K, V> implements MapDifference<K, V> {
+    final boolean areEqual;
+    final Map<K, V> onlyOnLeft;
+    final Map<K, V> onlyOnRight;
+    final Map<K, V> onBoth;
+    final Map<K, ValueDifference<V>> differences;
+
+    MapDifferenceImpl(boolean areEqual, Map<K, V> onlyOnLeft,
+        Map<K, V> onlyOnRight, Map<K, V> onBoth,
+        Map<K, ValueDifference<V>> differences) {
+      this.areEqual = areEqual;
+      this.onlyOnLeft = onlyOnLeft;
+      this.onlyOnRight = onlyOnRight;
+      this.onBoth = onBoth;
+      this.differences = differences;
+    }
+
+    @Override
+    public boolean areEqual() {
+      return areEqual;
+    }
+
+    @Override
+    public Map<K, V> entriesOnlyOnLeft() {
+      return onlyOnLeft;
+    }
+
+    @Override
+    public Map<K, V> entriesOnlyOnRight() {
+      return onlyOnRight;
+    }
+
+    @Override
+    public Map<K, V> entriesInCommon() {
+      return onBoth;
+    }
+
+    @Override
+    public Map<K, ValueDifference<V>> entriesDiffering() {
+      return differences;
+    }
+
+    @Override public boolean equals(Object object) {
+      if (object == this) {
+        return true;
+      }
+      if (object instanceof MapDifference) {
+        MapDifference<?, ?> other = (MapDifference<?, ?>) object;
+        return entriesOnlyOnLeft().equals(other.entriesOnlyOnLeft())
+            && entriesOnlyOnRight().equals(other.entriesOnlyOnRight())
+            && entriesInCommon().equals(other.entriesInCommon())
+            && entriesDiffering().equals(other.entriesDiffering());
+      }
+      return false;
+    }
+
+    @Override public int hashCode() {
+      return Objects.hashCode(entriesOnlyOnLeft(), entriesOnlyOnRight(),
+          entriesInCommon(), entriesDiffering());
+    }
+
+    @Override public String toString() {
+      if (areEqual) {
+        return "equal";
+      }
+
+      StringBuilder result = new StringBuilder("not equal");
+      if (!onlyOnLeft.isEmpty()) {
+        result.append(": only on left=").append(onlyOnLeft);
+      }
+      if (!onlyOnRight.isEmpty()) {
+        result.append(": only on right=").append(onlyOnRight);
+      }
+      if (!differences.isEmpty()) {
+        result.append(": value differences=").append(differences);
+      }
+      return result.toString();
+    }
+  }
+
+  static class ValueDifferenceImpl<V>
+      implements MapDifference.ValueDifference<V> {
+    private final V left;
+    private final V right;
+
+    static <V> ValueDifference<V> create(@Nullable V left, @Nullable V right) {
+      return new ValueDifferenceImpl<V>(left, right);
+    }
+
+    private ValueDifferenceImpl(@Nullable V left, @Nullable V right) {
+      this.left = left;
+      this.right = right;
+    }
+
+    @Override
+    public V leftValue() {
+      return left;
+    }
+
+    @Override
+    public V rightValue() {
+      return right;
+    }
+
+    @Override public boolean equals(@Nullable Object object) {
+      if (object instanceof MapDifference.ValueDifference<?>) {
+        MapDifference.ValueDifference<?> that =
+            (MapDifference.ValueDifference<?>) object;
+        return Objects.equal(this.left, that.leftValue())
+            && Objects.equal(this.right, that.rightValue());
+      }
+      return false;
+    }
+
+    @Override public int hashCode() {
+      return Objects.hashCode(left, right);
+    }
+
+    @Override public String toString() {
+      return "(" + left + ", " + right + ")";
+    }
+  }
+
+  /**
+   * Computes the difference between two sorted maps, using the comparator of
+   * the left map, or {@code Ordering.natural()} if the left map uses the
+   * natural ordering of its elements. This difference is an immutable snapshot
+   * of the state of the maps at the time this method is called. It will never
+   * change, even if the maps change at a later time.
+   *
+   * <p>Since this method uses {@code TreeMap} instances internally, the keys of
+   * the right map must all compare as distinct according to the comparator
+   * of the left map.
+   *
+   * <p><b>Note:</b>If you only need to know whether two sorted maps have the
+   * same mappings, call {@code left.equals(right)} instead of this method.
+   *
+   * @param left the map to treat as the "left" map for purposes of comparison
+   * @param right the map to treat as the "right" map for purposes of comparison
+   * @return the difference between the two maps
+   * @since 11.0
+   */
+  @Beta
+  public static <K, V> SortedMapDifference<K, V> difference(
+      SortedMap<K, ? extends V> left, Map<? extends K, ? extends V> right) {
+    checkNotNull(left);
+    checkNotNull(right);
+    Comparator<? super K> comparator = orNaturalOrder(left.comparator());
+    SortedMap<K, V> onlyOnLeft = Maps.newTreeMap(comparator);
+    SortedMap<K, V> onlyOnRight = Maps.newTreeMap(comparator);
+    onlyOnRight.putAll(right); // will whittle it down
+    SortedMap<K, V> onBoth = Maps.newTreeMap(comparator);
+    SortedMap<K, MapDifference.ValueDifference<V>> differences =
+        Maps.newTreeMap(comparator);
+    boolean eq = true;
+
+    for (Entry<? extends K, ? extends V> entry : left.entrySet()) {
+      K leftKey = entry.getKey();
+      V leftValue = entry.getValue();
+      if (right.containsKey(leftKey)) {
+        V rightValue = onlyOnRight.remove(leftKey);
+        if (Objects.equal(leftValue, rightValue)) {
+          onBoth.put(leftKey, leftValue);
+        } else {
+          eq = false;
+          differences.put(
+              leftKey, ValueDifferenceImpl.create(leftValue, rightValue));
+        }
+      } else {
+        eq = false;
+        onlyOnLeft.put(leftKey, leftValue);
+      }
+    }
+
+    boolean areEqual = eq && onlyOnRight.isEmpty();
+    return sortedMapDifference(
+        areEqual, onlyOnLeft, onlyOnRight, onBoth, differences);
+  }
+
+  private static <K, V> SortedMapDifference<K, V> sortedMapDifference(
+      boolean areEqual, SortedMap<K, V> onlyOnLeft, SortedMap<K, V> onlyOnRight,
+      SortedMap<K, V> onBoth, SortedMap<K, ValueDifference<V>> differences) {
+    return new SortedMapDifferenceImpl<K, V>(areEqual,
+        Collections.unmodifiableSortedMap(onlyOnLeft),
+        Collections.unmodifiableSortedMap(onlyOnRight),
+        Collections.unmodifiableSortedMap(onBoth),
+        Collections.unmodifiableSortedMap(differences));
+  }
+
+  static class SortedMapDifferenceImpl<K, V> extends MapDifferenceImpl<K, V>
+      implements SortedMapDifference<K, V> {
+    SortedMapDifferenceImpl(boolean areEqual, SortedMap<K, V> onlyOnLeft,
+        SortedMap<K, V> onlyOnRight, SortedMap<K, V> onBoth,
+        SortedMap<K, ValueDifference<V>> differences) {
+      super(areEqual, onlyOnLeft, onlyOnRight, onBoth, differences);
+    }
+
+    @Override public SortedMap<K, ValueDifference<V>> entriesDiffering() {
+      return (SortedMap<K, ValueDifference<V>>) super.entriesDiffering();
+    }
+
+    @Override public SortedMap<K, V> entriesInCommon() {
+      return (SortedMap<K, V>) super.entriesInCommon();
+    }
+
+    @Override public SortedMap<K, V> entriesOnlyOnLeft() {
+      return (SortedMap<K, V>) super.entriesOnlyOnLeft();
+    }
+
+    @Override public SortedMap<K, V> entriesOnlyOnRight() {
+      return (SortedMap<K, V>) super.entriesOnlyOnRight();
+    }
+  }
+
+  /**
+   * Returns the specified comparator if not null; otherwise returns {@code
+   * Ordering.natural()}. This method is an abomination of generics; the only
+   * purpose of this method is to contain the ugly type-casting in one place.
+   */
+  @SuppressWarnings("unchecked")
+  static <E> Comparator<? super E> orNaturalOrder(
+      @Nullable Comparator<? super E> comparator) {
+    if (comparator != null) { // can't use ? : because of javac bug 5080917
+      return comparator;
+    }
+    return (Comparator<E>) Ordering.natural();
+  }
+  /**
+   * Returns an immutable map for which the {@link Map#values} are the given
+   * elements in the given order, and each key is the product of invoking a
+   * supplied function on its corresponding value.
+   *
+   * @param values the values to use when constructing the {@code Map}
+   * @param keyFunction the function used to produce the key for each value
+   * @return a map mapping the result of evaluating the function {@code
+   *         keyFunction} on each value in the input collection to that value
+   * @throws IllegalArgumentException if {@code keyFunction} produces the same
+   *         key for more than one value in the input collection
+   * @throws NullPointerException if any elements of {@code values} is null, or
+   *         if {@code keyFunction} produces {@code null} for any value
+   */
+  public static <K, V> ImmutableMap<K, V> uniqueIndex(
+      Iterable<V> values, Function<? super V, K> keyFunction) {
+    return uniqueIndex(values.iterator(), keyFunction);
+  }
+
+  /**
+   * <b>Deprecated.</b>
+   *
+   * @since 10.0
+   * @deprecated use {@link #uniqueIndex(Iterator, Function)} by casting {@code
+   *     values} to {@code Iterator<V>}, or better yet, by implementing only
+   *     {@code Iterator} and not {@code Iterable}. <b>This method is scheduled
+   *     for deletion in March 2012.</b>
+   */
+  @Beta
+  @Deprecated
+  public static <K, V, I extends Object & Iterable<V> & Iterator<V>>
+      ImmutableMap<K, V> uniqueIndex(
+          I values, Function<? super V, K> keyFunction) {
+    Iterable<V> valuesIterable = checkNotNull(values);
+    return uniqueIndex(valuesIterable, keyFunction);
+  }
+
+  /**
+   * Returns an immutable map for which the {@link Map#values} are the given
+   * elements in the given order, and each key is the product of invoking a
+   * supplied function on its corresponding value.
+   *
+   * @param values the values to use when constructing the {@code Map}
+   * @param keyFunction the function used to produce the key for each value
+   * @return a map mapping the result of evaluating the function {@code
+   *         keyFunction} on each value in the input collection to that value
+   * @throws IllegalArgumentException if {@code keyFunction} produces the same
+   *         key for more than one value in the input collection
+   * @throws NullPointerException if any elements of {@code values} is null, or
+   *         if {@code keyFunction} produces {@code null} for any value
+   * @since 10.0
+   */
+  public static <K, V> ImmutableMap<K, V> uniqueIndex(
+      Iterator<V> values, Function<? super V, K> keyFunction) {
+    checkNotNull(keyFunction);
+    ImmutableMap.Builder<K, V> builder = ImmutableMap.builder();
+    while (values.hasNext()) {
+      V value = values.next();
+      builder.put(keyFunction.apply(value), value);
+    }
+    return builder.build();
+  }
+
+  /**
+   * Returns an immutable map entry with the specified key and value. The {@link
+   * Entry#setValue} operation throws an {@link UnsupportedOperationException}.
+   *
+   * <p>The returned entry is serializable.
+   *
+   * @param key the key to be associated with the returned entry
+   * @param value the value to be associated with the returned entry
+   */
+  @GwtCompatible(serializable = true)
+  public static <K, V> Entry<K, V> immutableEntry(
+      @Nullable K key, @Nullable V value) {
+    return new ImmutableEntry<K, V>(key, value);
+  }
+
+  /**
+   * Returns an unmodifiable view of the specified set of entries. The {@link
+   * Entry#setValue} operation throws an {@link UnsupportedOperationException},
+   * as do any operations that would modify the returned set.
+   *
+   * @param entrySet the entries for which to return an unmodifiable view
+   * @return an unmodifiable view of the entries
+   */
+  static <K, V> Set<Entry<K, V>> unmodifiableEntrySet(
+      Set<Entry<K, V>> entrySet) {
+    return new UnmodifiableEntrySet<K, V>(
+        Collections.unmodifiableSet(entrySet));
+  }
+
+  /**
+   * Returns an unmodifiable view of the specified map entry. The {@link
+   * Entry#setValue} operation throws an {@link UnsupportedOperationException}.
+   * This also has the side-effect of redefining {@code equals} to comply with
+   * the Entry contract, to avoid a possible nefarious implementation of equals.
+   *
+   * @param entry the entry for which to return an unmodifiable view
+   * @return an unmodifiable view of the entry
+   */
+  static <K, V> Entry<K, V> unmodifiableEntry(final Entry<K, V> entry) {
+    checkNotNull(entry);
+    return new AbstractMapEntry<K, V>() {
+      @Override public K getKey() {
+        return entry.getKey();
+      }
+
+      @Override public V getValue() {
+        return entry.getValue();
+      }
+    };
+  }
+
+  /** @see Multimaps#unmodifiableEntries */
+  static class UnmodifiableEntries<K, V>
+      extends ForwardingCollection<Entry<K, V>> {
+    private final Collection<Entry<K, V>> entries;
+
+    UnmodifiableEntries(Collection<Entry<K, V>> entries) {
+      this.entries = entries;
+    }
+
+    @Override protected Collection<Entry<K, V>> delegate() {
+      return entries;
+    }
+
+    @Override public Iterator<Entry<K, V>> iterator() {
+      final Iterator<Entry<K, V>> delegate = super.iterator();
+      return new ForwardingIterator<Entry<K, V>>() {
+        @Override public Entry<K, V> next() {
+          return unmodifiableEntry(super.next());
+        }
+
+        @Override public void remove() {
+          throw new UnsupportedOperationException();
+        }
+
+        @Override protected Iterator<Entry<K, V>> delegate() {
+          return delegate;
+        }
+      };
+    }
+
+    // See java.util.Collections.UnmodifiableEntrySet for details on attacks.
+
+    @Override public boolean add(Entry<K, V> element) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override public boolean addAll(
+        Collection<? extends Entry<K, V>> collection) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override public void clear() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override public boolean remove(Object object) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override public boolean removeAll(Collection<?> collection) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override public boolean retainAll(Collection<?> collection) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override public Object[] toArray() {
+      return standardToArray();
+    }
+
+    @Override public <T> T[] toArray(T[] array) {
+      return standardToArray(array);
+    }
+  }
+
+  /** @see Maps#unmodifiableEntrySet(Set) */
+  static class UnmodifiableEntrySet<K, V>
+      extends UnmodifiableEntries<K, V> implements Set<Entry<K, V>> {
+    UnmodifiableEntrySet(Set<Entry<K, V>> entries) {
+      super(entries);
+    }
+
+    // See java.util.Collections.UnmodifiableEntrySet for details on attacks.
+
+    @Override public boolean equals(@Nullable Object object) {
+      return Sets.equalsImpl(this, object);
+    }
+
+    @Override public int hashCode() {
+      return Sets.hashCodeImpl(this);
+    }
+  }
+
+  /**
+   * Returns an unmodifiable view of the specified bimap. This method allows
+   * modules to provide users with "read-only" access to internal bimaps. Query
+   * operations on the returned bimap "read through" to the specified bimap, and
+   * attempts to modify the returned map, whether direct or via its collection
+   * views, result in an {@code UnsupportedOperationException}.
+   *
+   * <p>The returned bimap will be serializable if the specified bimap is
+   * serializable.
+   *
+   * @param bimap the bimap for which an unmodifiable view is to be returned
+   * @return an unmodifiable view of the specified bimap
+   */
+  public static <K, V> BiMap<K, V> unmodifiableBiMap(
+      BiMap<? extends K, ? extends V> bimap) {
+    return new UnmodifiableBiMap<K, V>(bimap, null);
+  }
+
+  /** @see Maps#unmodifiableBiMap(BiMap) */
+  private static class UnmodifiableBiMap<K, V>
+      extends ForwardingMap<K, V> implements BiMap<K, V>, Serializable {
+    final Map<K, V> unmodifiableMap;
+    final BiMap<? extends K, ? extends V> delegate;
+    transient BiMap<V, K> inverse;
+    transient Set<V> values;
+
+    UnmodifiableBiMap(BiMap<? extends K, ? extends V> delegate,
+        @Nullable BiMap<V, K> inverse) {
+      unmodifiableMap = Collections.unmodifiableMap(delegate);
+      this.delegate = delegate;
+      this.inverse = inverse;
+    }
+
+    @Override protected Map<K, V> delegate() {
+      return unmodifiableMap;
+    }
+
+    @Override
+    public V forcePut(K key, V value) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public BiMap<V, K> inverse() {
+      BiMap<V, K> result = inverse;
+      return (result == null)
+          ? inverse = new UnmodifiableBiMap<V, K>(delegate.inverse(), this)
+          : result;
+    }
+
+    @Override public Set<V> values() {
+      Set<V> result = values;
+      return (result == null)
+          ? values = Collections.unmodifiableSet(delegate.values())
+          : result;
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  /**
+   * Returns a view of a map where each value is transformed by a function. All
+   * other properties of the map, such as iteration order, are left intact. For
+   * example, the code: <pre>   {@code
+   *
+   *   Map<String, Integer> map = ImmutableMap.of("a", 4, "b", 9);
+   *   Function<Integer, Double> sqrt =
+   *       new Function<Integer, Double>() {
+   *         public Double apply(Integer in) {
+   *           return Math.sqrt((int) in);
+   *         }
+   *       };
+   *   Map<String, Double> transformed = Maps.transformValues(map, sqrt);
+   *   System.out.println(transformed);}</pre>
+   *
+   * ... prints {@code {a=2.0, b=3.0}}.
+   *
+   * <p>Changes in the underlying map are reflected in this view. Conversely,
+   * this view supports removal operations, and these are reflected in the
+   * underlying map.
+   *
+   * <p>It's acceptable for the underlying map to contain null keys, and even
+   * null values provided that the function is capable of accepting null input.
+   * The transformed map might contain null values, if the function sometimes
+   * gives a null result.
+   *
+   * <p>The returned map is not thread-safe or serializable, even if the
+   * underlying map is.
+   *
+   * <p>The function is applied lazily, invoked when needed. This is necessary
+   * for the returned map to be a view, but it means that the function will be
+   * applied many times for bulk operations like {@link Map#containsValue} and
+   * {@code Map.toString()}. For this to perform well, {@code function} should
+   * be fast. To avoid lazy evaluation when the returned map doesn't need to be
+   * a view, copy the returned map into a new map of your choosing.
+   */
+  public static <K, V1, V2> Map<K, V2> transformValues(
+      Map<K, V1> fromMap, final Function<? super V1, V2> function) {
+    checkNotNull(function);
+    EntryTransformer<K, V1, V2> transformer =
+        new EntryTransformer<K, V1, V2>() {
+          @Override
+          public V2 transformEntry(K key, V1 value) {
+            return function.apply(value);
+          }
+        };
+    return transformEntries(fromMap, transformer);
+  }
+
+  /**
+   * Returns a view of a sorted map where each value is transformed by a
+   * function. All other properties of the map, such as iteration order, are
+   * left intact. For example, the code: <pre>   {@code
+   *
+   *   SortedMap<String, Integer> map = ImmutableSortedMap.of("a", 4, "b", 9);
+   *   Function<Integer, Double> sqrt =
+   *       new Function<Integer, Double>() {
+   *         public Double apply(Integer in) {
+   *           return Math.sqrt((int) in);
+   *         }
+   *       };
+   *   SortedMap<String, Double> transformed =
+   *        Maps.transformSortedValues(map, sqrt);
+   *   System.out.println(transformed);}</pre>
+   *
+   * ... prints {@code {a=2.0, b=3.0}}.
+   *
+   * <p>Changes in the underlying map are reflected in this view. Conversely,
+   * this view supports removal operations, and these are reflected in the
+   * underlying map.
+   *
+   * <p>It's acceptable for the underlying map to contain null keys, and even
+   * null values provided that the function is capable of accepting null input.
+   * The transformed map might contain null values, if the function sometimes
+   * gives a null result.
+   *
+   * <p>The returned map is not thread-safe or serializable, even if the
+   * underlying map is.
+   *
+   * <p>The function is applied lazily, invoked when needed. This is necessary
+   * for the returned map to be a view, but it means that the function will be
+   * applied many times for bulk operations like {@link Map#containsValue} and
+   * {@code Map.toString()}. For this to perform well, {@code function} should
+   * be fast. To avoid lazy evaluation when the returned map doesn't need to be
+   * a view, copy the returned map into a new map of your choosing.
+   *
+   * @since 11.0
+   */
+  @Beta
+  public static <K, V1, V2> SortedMap<K, V2> transformValues(
+      SortedMap<K, V1> fromMap, final Function<? super V1, V2> function) {
+    checkNotNull(function);
+    EntryTransformer<K, V1, V2> transformer =
+        new EntryTransformer<K, V1, V2>() {
+          @Override
+          public V2 transformEntry(K key, V1 value) {
+            return function.apply(value);
+          }
+        };
+    return transformEntries(fromMap, transformer);
+  }
+
+  /**
+   * Returns a view of a map whose values are derived from the original map's
+   * entries. In contrast to {@link #transformValues}, this method's
+   * entry-transformation logic may depend on the key as well as the value.
+   *
+   * <p>All other properties of the transformed map, such as iteration order,
+   * are left intact. For example, the code: <pre>   {@code
+   *
+   *   Map<String, Boolean> options =
+   *       ImmutableMap.of("verbose", true, "sort", false);
+   *   EntryTransformer<String, Boolean, String> flagPrefixer =
+   *       new EntryTransformer<String, Boolean, String>() {
+   *         public String transformEntry(String key, Boolean value) {
+   *           return value ? key : "no" + key;
+   *         }
+   *       };
+   *   Map<String, String> transformed =
+   *       Maps.transformEntries(options, flagPrefixer);
+   *   System.out.println(transformed);}</pre>
+   *
+   * ... prints {@code {verbose=verbose, sort=nosort}}.
+   *
+   * <p>Changes in the underlying map are reflected in this view. Conversely,
+   * this view supports removal operations, and these are reflected in the
+   * underlying map.
+   *
+   * <p>It's acceptable for the underlying map to contain null keys and null
+   * values provided that the transformer is capable of accepting null inputs.
+   * The transformed map might contain null values if the transformer sometimes
+   * gives a null result.
+   *
+   * <p>The returned map is not thread-safe or serializable, even if the
+   * underlying map is.
+   *
+   * <p>The transformer is applied lazily, invoked when needed. This is
+   * necessary for the returned map to be a view, but it means that the
+   * transformer will be applied many times for bulk operations like {@link
+   * Map#containsValue} and {@link Object#toString}. For this to perform well,
+   * {@code transformer} should be fast. To avoid lazy evaluation when the
+   * returned map doesn't need to be a view, copy the returned map into a new
+   * map of your choosing.
+   *
+   * <p><b>Warning:</b> This method assumes that for any instance {@code k} of
+   * {@code EntryTransformer} key type {@code K}, {@code k.equals(k2)} implies
+   * that {@code k2} is also of type {@code K}. Using an {@code
+   * EntryTransformer} key type for which this may not hold, such as {@code
+   * ArrayList}, may risk a {@code ClassCastException} when calling methods on
+   * the transformed map.
+   *
+   * @since 7.0
+   */
+  public static <K, V1, V2> Map<K, V2> transformEntries(
+      Map<K, V1> fromMap,
+      EntryTransformer<? super K, ? super V1, V2> transformer) {
+    if (fromMap instanceof SortedMap) {
+      return transformEntries((SortedMap<K, V1>) fromMap, transformer);
+    }
+    return new TransformedEntriesMap<K, V1, V2>(fromMap, transformer);
+  }
+
+  /**
+   * Returns a view of a sorted map whose values are derived from the original
+   * sorted map's entries. In contrast to {@link #transformValues}, this
+   * method's entry-transformation logic may depend on the key as well as the
+   * value.
+   *
+   * <p>All other properties of the transformed map, such as iteration order,
+   * are left intact. For example, the code: <pre>   {@code
+   *
+   *   Map<String, Boolean> options =
+   *       ImmutableSortedMap.of("verbose", true, "sort", false);
+   *   EntryTransformer<String, Boolean, String> flagPrefixer =
+   *       new EntryTransformer<String, Boolean, String>() {
+   *         public String transformEntry(String key, Boolean value) {
+   *           return value ? key : "yes" + key;
+   *         }
+   *       };
+   *   SortedMap<String, String> transformed =
+   *       LabsMaps.transformSortedEntries(options, flagPrefixer);
+   *   System.out.println(transformed);}</pre>
+   *
+   * ... prints {@code {sort=yessort, verbose=verbose}}.
+   *
+   * <p>Changes in the underlying map are reflected in this view. Conversely,
+   * this view supports removal operations, and these are reflected in the
+   * underlying map.
+   *
+   * <p>It's acceptable for the underlying map to contain null keys and null
+   * values provided that the transformer is capable of accepting null inputs.
+   * The transformed map might contain null values if the transformer sometimes
+   * gives a null result.
+   *
+   * <p>The returned map is not thread-safe or serializable, even if the
+   * underlying map is.
+   *
+   * <p>The transformer is applied lazily, invoked when needed. This is
+   * necessary for the returned map to be a view, but it means that the
+   * transformer will be applied many times for bulk operations like {@link
+   * Map#containsValue} and {@link Object#toString}. For this to perform well,
+   * {@code transformer} should be fast. To avoid lazy evaluation when the
+   * returned map doesn't need to be a view, copy the returned map into a new
+   * map of your choosing.
+   *
+   * <p><b>Warning:</b> This method assumes that for any instance {@code k} of
+   * {@code EntryTransformer} key type {@code K}, {@code k.equals(k2)} implies
+   * that {@code k2} is also of type {@code K}. Using an {@code
+   * EntryTransformer} key type for which this may not hold, such as {@code
+   * ArrayList}, may risk a {@code ClassCastException} when calling methods on
+   * the transformed map.
+   *
+   * @since 11.0
+   */
+  @Beta
+  public static <K, V1, V2> SortedMap<K, V2> transformEntries(
+      final SortedMap<K, V1> fromMap,
+      EntryTransformer<? super K, ? super V1, V2> transformer) {
+    return new TransformedEntriesSortedMap<K, V1, V2>(fromMap, transformer);
+  }
+
+  /**
+   * A transformation of the value of a key-value pair, using both key and value
+   * as inputs. To apply the transformation to a map, use
+   * {@link Maps#transformEntries(Map, EntryTransformer)}.
+   *
+   * @param <K> the key type of the input and output entries
+   * @param <V1> the value type of the input entry
+   * @param <V2> the value type of the output entry
+   * @since 7.0
+   */
+  public interface EntryTransformer<K, V1, V2> {
+    /**
+     * Determines an output value based on a key-value pair. This method is
+     * <i>generally expected</i>, but not absolutely required, to have the
+     * following properties:
+     *
+     * <ul>
+     * <li>Its execution does not cause any observable side effects.
+     * <li>The computation is <i>consistent with equals</i>; that is,
+     *     {@link Objects#equal Objects.equal}{@code (k1, k2) &&}
+     *     {@link Objects#equal}{@code (v1, v2)} implies that {@code
+     *     Objects.equal(transformer.transform(k1, v1),
+     *     transformer.transform(k2, v2))}.
+     * </ul>
+     *
+     * @throws NullPointerException if the key or value is null and this
+     *     transformer does not accept null arguments
+     */
+    V2 transformEntry(@Nullable K key, @Nullable V1 value);
+  }
+
+  static class TransformedEntriesMap<K, V1, V2>
+      extends AbstractMap<K, V2> {
+    final Map<K, V1> fromMap;
+    final EntryTransformer<? super K, ? super V1, V2> transformer;
+
+    TransformedEntriesMap(
+        Map<K, V1> fromMap,
+        EntryTransformer<? super K, ? super V1, V2> transformer) {
+      this.fromMap = checkNotNull(fromMap);
+      this.transformer = checkNotNull(transformer);
+    }
+
+    @Override public int size() {
+      return fromMap.size();
+    }
+
+    @Override public boolean containsKey(Object key) {
+      return fromMap.containsKey(key);
+    }
+
+    // safe as long as the user followed the <b>Warning</b> in the javadoc
+    @SuppressWarnings("unchecked")
+    @Override public V2 get(Object key) {
+      V1 value = fromMap.get(key);
+      return (value != null || fromMap.containsKey(key))
+          ? transformer.transformEntry((K) key, value)
+          : null;
+    }
+
+    // safe as long as the user followed the <b>Warning</b> in the javadoc
+    @SuppressWarnings("unchecked")
+    @Override public V2 remove(Object key) {
+      return fromMap.containsKey(key)
+          ? transformer.transformEntry((K) key, fromMap.remove(key))
+          : null;
+    }
+
+    @Override public void clear() {
+      fromMap.clear();
+    }
+
+    @Override public Set<K> keySet() {
+      return fromMap.keySet();
+    }
+
+    Set<Entry<K, V2>> entrySet;
+
+    @Override public Set<Entry<K, V2>> entrySet() {
+      Set<Entry<K, V2>> result = entrySet;
+      if (result == null) {
+        entrySet = result = new EntrySet<K, V2>() {
+          @Override Map<K, V2> map() {
+            return TransformedEntriesMap.this;
+          }
+
+          @Override public Iterator<Entry<K, V2>> iterator() {
+            final Iterator<Entry<K, V1>> backingIterator =
+                fromMap.entrySet().iterator();
+            return Iterators.transform(backingIterator,
+                new Function<Entry<K, V1>, Entry<K, V2>>() {
+                  @Override public Entry<K, V2> apply(Entry<K, V1> entry) {
+                    return immutableEntry(
+                        entry.getKey(),
+                        transformer.transformEntry(entry.getKey(),
+                            entry.getValue()));
+                  }
+                });
+          }
+        };
+      }
+      return result;
+    }
+
+    Collection<V2> values;
+
+    @Override public Collection<V2> values() {
+      Collection<V2> result = values;
+      if (result == null) {
+        return values = new Values<K, V2>() {
+          @Override Map<K, V2> map() {
+            return TransformedEntriesMap.this;
+          }
+        };
+      }
+      return result;
+    }
+  }
+
+  static class TransformedEntriesSortedMap<K, V1, V2>
+      extends TransformedEntriesMap<K, V1, V2> implements SortedMap<K, V2> {
+
+    protected SortedMap<K, V1> fromMap() {
+      return (SortedMap<K, V1>) fromMap;
+    }
+
+    TransformedEntriesSortedMap(SortedMap<K, V1> fromMap,
+        EntryTransformer<? super K, ? super V1, V2> transformer) {
+      super(fromMap, transformer);
+    }
+
+    @Override public Comparator<? super K> comparator() {
+      return fromMap().comparator();
+    }
+
+    @Override public K firstKey() {
+      return fromMap().firstKey();
+    }
+
+    @Override public SortedMap<K, V2> headMap(K toKey) {
+      return transformEntries(fromMap().headMap(toKey), transformer);
+    }
+
+    @Override public K lastKey() {
+      return fromMap().lastKey();
+    }
+
+    @Override public SortedMap<K, V2> subMap(K fromKey, K toKey) {
+      return transformEntries(
+          fromMap().subMap(fromKey, toKey), transformer);
+    }
+
+    @Override public SortedMap<K, V2> tailMap(K fromKey) {
+      return transformEntries(fromMap().tailMap(fromKey), transformer);
+    }
+
+  }
+
+  /**
+   * Returns a map containing the mappings in {@code unfiltered} whose keys
+   * satisfy a predicate. The returned map is a live view of {@code unfiltered};
+   * changes to one affect the other.
+   *
+   * <p>The resulting map's {@code keySet()}, {@code entrySet()}, and {@code
+   * values()} views have iterators that don't support {@code remove()}, but all
+   * other methods are supported by the map and its views. When given a key that
+   * doesn't satisfy the predicate, the map's {@code put()} and {@code putAll()}
+   * methods throw an {@link IllegalArgumentException}.
+   *
+   * <p>When methods such as {@code removeAll()} and {@code clear()} are called
+   * on the filtered map or its views, only mappings whose keys satisfy the
+   * filter will be removed from the underlying map.
+   *
+   * <p>The returned map isn't threadsafe or serializable, even if {@code
+   * unfiltered} is.
+   *
+   * <p>Many of the filtered map's methods, such as {@code size()},
+   * iterate across every key/value mapping in the underlying map and determine
+   * which satisfy the filter. When a live view is <i>not</i> needed, it may be
+   * faster to copy the filtered map and use the copy.
+   *
+   * <p><b>Warning:</b> {@code keyPredicate} must be <i>consistent with
+   * equals</i>, as documented at {@link Predicate#apply}. Do not provide a
+   * predicate such as {@code Predicates.instanceOf(ArrayList.class)}, which is
+   * inconsistent with equals.
+   */
+  public static <K, V> Map<K, V> filterKeys(
+      Map<K, V> unfiltered, final Predicate<? super K> keyPredicate) {
+    if (unfiltered instanceof SortedMap) {
+      return filterKeys((SortedMap<K, V>) unfiltered, keyPredicate);
+    }
+    checkNotNull(keyPredicate);
+    Predicate<Entry<K, V>> entryPredicate =
+        new Predicate<Entry<K, V>>() {
+          @Override
+          public boolean apply(Entry<K, V> input) {
+            return keyPredicate.apply(input.getKey());
+          }
+        };
+    return (unfiltered instanceof AbstractFilteredMap)
+        ? filterFiltered((AbstractFilteredMap<K, V>) unfiltered, entryPredicate)
+        : new FilteredKeyMap<K, V>(
+            checkNotNull(unfiltered), keyPredicate, entryPredicate);
+  }
+
+  /**
+   * Returns a sorted map containing the mappings in {@code unfiltered} whose
+   * keys satisfy a predicate. The returned map is a live view of {@code
+   * unfiltered}; changes to one affect the other.
+   *
+   * <p>The resulting map's {@code keySet()}, {@code entrySet()}, and {@code
+   * values()} views have iterators that don't support {@code remove()}, but all
+   * other methods are supported by the map and its views. When given a key that
+   * doesn't satisfy the predicate, the map's {@code put()} and {@code putAll()}
+   * methods throw an {@link IllegalArgumentException}.
+   *
+   * <p>When methods such as {@code removeAll()} and {@code clear()} are called
+   * on the filtered map or its views, only mappings whose keys satisfy the
+   * filter will be removed from the underlying map.
+   *
+   * <p>The returned map isn't threadsafe or serializable, even if {@code
+   * unfiltered} is.
+   *
+   * <p>Many of the filtered map's methods, such as {@code size()},
+   * iterate across every key/value mapping in the underlying map and determine
+   * which satisfy the filter. When a live view is <i>not</i> needed, it may be
+   * faster to copy the filtered map and use the copy.
+   *
+   * <p><b>Warning:</b> {@code keyPredicate} must be <i>consistent with
+   * equals</i>, as documented at {@link Predicate#apply}. Do not provide a
+   * predicate such as {@code Predicates.instanceOf(ArrayList.class)}, which is
+   * inconsistent with equals.
+   *
+   * @since 11.0
+   */
+  @Beta
+  public static <K, V> SortedMap<K, V> filterKeys(
+      SortedMap<K, V> unfiltered, final Predicate<? super K> keyPredicate) {
+    // TODO: Return a subclass of Maps.FilteredKeyMap for slightly better
+    // performance.
+    checkNotNull(keyPredicate);
+    Predicate<Entry<K, V>> entryPredicate = new Predicate<Entry<K, V>>() {
+      @Override
+      public boolean apply(Entry<K, V> input) {
+        return keyPredicate.apply(input.getKey());
+      }
+    };
+    return filterEntries(unfiltered, entryPredicate);
+  }
+
+  /**
+   * Returns a map containing the mappings in {@code unfiltered} whose values
+   * satisfy a predicate. The returned map is a live view of {@code unfiltered};
+   * changes to one affect the other.
+   *
+   * <p>The resulting map's {@code keySet()}, {@code entrySet()}, and {@code
+   * values()} views have iterators that don't support {@code remove()}, but all
+   * other methods are supported by the map and its views. When given a value
+   * that doesn't satisfy the predicate, the map's {@code put()}, {@code
+   * putAll()}, and {@link Entry#setValue} methods throw an {@link
+   * IllegalArgumentException}.
+   *
+   * <p>When methods such as {@code removeAll()} and {@code clear()} are called
+   * on the filtered map or its views, only mappings whose values satisfy the
+   * filter will be removed from the underlying map.
+   *
+   * <p>The returned map isn't threadsafe or serializable, even if {@code
+   * unfiltered} is.
+   *
+   * <p>Many of the filtered map's methods, such as {@code size()},
+   * iterate across every key/value mapping in the underlying map and determine
+   * which satisfy the filter. When a live view is <i>not</i> needed, it may be
+   * faster to copy the filtered map and use the copy.
+   *
+   * <p><b>Warning:</b> {@code valuePredicate} must be <i>consistent with
+   * equals</i>, as documented at {@link Predicate#apply}. Do not provide a
+   * predicate such as {@code Predicates.instanceOf(ArrayList.class)}, which is
+   * inconsistent with equals.
+   */
+  public static <K, V> Map<K, V> filterValues(
+      Map<K, V> unfiltered, final Predicate<? super V> valuePredicate) {
+    if (unfiltered instanceof SortedMap) {
+      return filterValues((SortedMap<K, V>) unfiltered, valuePredicate);
+    }
+    checkNotNull(valuePredicate);
+    Predicate<Entry<K, V>> entryPredicate =
+        new Predicate<Entry<K, V>>() {
+          @Override
+          public boolean apply(Entry<K, V> input) {
+            return valuePredicate.apply(input.getValue());
+          }
+        };
+    return filterEntries(unfiltered, entryPredicate);
+  }
+
+  /**
+   * Returns a sorted map containing the mappings in {@code unfiltered} whose
+   * values satisfy a predicate. The returned map is a live view of {@code
+   * unfiltered}; changes to one affect the other.
+   *
+   * <p>The resulting map's {@code keySet()}, {@code entrySet()}, and {@code
+   * values()} views have iterators that don't support {@code remove()}, but all
+   * other methods are supported by the map and its views. When given a value
+   * that doesn't satisfy the predicate, the map's {@code put()}, {@code
+   * putAll()}, and {@link Entry#setValue} methods throw an {@link
+   * IllegalArgumentException}.
+   *
+   * <p>When methods such as {@code removeAll()} and {@code clear()} are called
+   * on the filtered map or its views, only mappings whose values satisfy the
+   * filter will be removed from the underlying map.
+   *
+   * <p>The returned map isn't threadsafe or serializable, even if {@code
+   * unfiltered} is.
+   *
+   * <p>Many of the filtered map's methods, such as {@code size()},
+   * iterate across every key/value mapping in the underlying map and determine
+   * which satisfy the filter. When a live view is <i>not</i> needed, it may be
+   * faster to copy the filtered map and use the copy.
+   *
+   * <p><b>Warning:</b> {@code valuePredicate} must be <i>consistent with
+   * equals</i>, as documented at {@link Predicate#apply}. Do not provide a
+   * predicate such as {@code Predicates.instanceOf(ArrayList.class)}, which is
+   * inconsistent with equals.
+   *
+   * @since 11.0
+   */
+  @Beta
+  public static <K, V> SortedMap<K, V> filterValues(
+      SortedMap<K, V> unfiltered, final Predicate<? super V> valuePredicate) {
+    checkNotNull(valuePredicate);
+    Predicate<Entry<K, V>> entryPredicate =
+        new Predicate<Entry<K, V>>() {
+          @Override
+          public boolean apply(Entry<K, V> input) {
+            return valuePredicate.apply(input.getValue());
+          }
+        };
+    return filterEntries(unfiltered, entryPredicate);
+  }
+
+  /**
+   * Returns a map containing the mappings in {@code unfiltered} that satisfy a
+   * predicate. The returned map is a live view of {@code unfiltered}; changes
+   * to one affect the other.
+   *
+   * <p>The resulting map's {@code keySet()}, {@code entrySet()}, and {@code
+   * values()} views have iterators that don't support {@code remove()}, but all
+   * other methods are supported by the map and its views. When given a
+   * key/value pair that doesn't satisfy the predicate, the map's {@code put()}
+   * and {@code putAll()} methods throw an {@link IllegalArgumentException}.
+   * Similarly, the map's entries have a {@link Entry#setValue} method that
+   * throws an {@link IllegalArgumentException} when the existing key and the
+   * provided value don't satisfy the predicate.
+   *
+   * <p>When methods such as {@code removeAll()} and {@code clear()} are called
+   * on the filtered map or its views, only mappings that satisfy the filter
+   * will be removed from the underlying map.
+   *
+   * <p>The returned map isn't threadsafe or serializable, even if {@code
+   * unfiltered} is.
+   *
+   * <p>Many of the filtered map's methods, such as {@code size()},
+   * iterate across every key/value mapping in the underlying map and determine
+   * which satisfy the filter. When a live view is <i>not</i> needed, it may be
+   * faster to copy the filtered map and use the copy.
+   *
+   * <p><b>Warning:</b> {@code entryPredicate} must be <i>consistent with
+   * equals</i>, as documented at {@link Predicate#apply}.
+   */
+  public static <K, V> Map<K, V> filterEntries(
+      Map<K, V> unfiltered, Predicate<? super Entry<K, V>> entryPredicate) {
+    if (unfiltered instanceof SortedMap) {
+      return filterEntries((SortedMap<K, V>) unfiltered, entryPredicate);
+    }
+    checkNotNull(entryPredicate);
+    return (unfiltered instanceof AbstractFilteredMap)
+        ? filterFiltered((AbstractFilteredMap<K, V>) unfiltered, entryPredicate)
+        : new FilteredEntryMap<K, V>(checkNotNull(unfiltered), entryPredicate);
+  }
+
+  /**
+   * Returns a sorted map containing the mappings in {@code unfiltered} that
+   * satisfy a predicate. The returned map is a live view of {@code unfiltered};
+   * changes to one affect the other.
+   *
+   * <p>The resulting map's {@code keySet()}, {@code entrySet()}, and {@code
+   * values()} views have iterators that don't support {@code remove()}, but all
+   * other methods are supported by the map and its views. When given a
+   * key/value pair that doesn't satisfy the predicate, the map's {@code put()}
+   * and {@code putAll()} methods throw an {@link IllegalArgumentException}.
+   * Similarly, the map's entries have a {@link Entry#setValue} method that
+   * throws an {@link IllegalArgumentException} when the existing key and the
+   * provided value don't satisfy the predicate.
+   *
+   * <p>When methods such as {@code removeAll()} and {@code clear()} are called
+   * on the filtered map or its views, only mappings that satisfy the filter
+   * will be removed from the underlying map.
+   *
+   * <p>The returned map isn't threadsafe or serializable, even if {@code
+   * unfiltered} is.
+   *
+   * <p>Many of the filtered map's methods, such as {@code size()},
+   * iterate across every key/value mapping in the underlying map and determine
+   * which satisfy the filter. When a live view is <i>not</i> needed, it may be
+   * faster to copy the filtered map and use the copy.
+   *
+   * <p><b>Warning:</b> {@code entryPredicate} must be <i>consistent with
+   * equals</i>, as documented at {@link Predicate#apply}.
+   *
+   * @since 11.0
+   */
+  @Beta
+  public static <K, V> SortedMap<K, V> filterEntries(
+      SortedMap<K, V> unfiltered,
+      Predicate<? super Entry<K, V>> entryPredicate) {
+    checkNotNull(entryPredicate);
+    return (unfiltered instanceof FilteredEntrySortedMap)
+        ? filterFiltered((FilteredEntrySortedMap<K, V>) unfiltered, entryPredicate)
+        : new FilteredEntrySortedMap<K, V>(checkNotNull(unfiltered), entryPredicate);
+  }
+
+  /**
+   * Support {@code clear()}, {@code removeAll()}, and {@code retainAll()} when
+   * filtering a filtered map.
+   */
+  private static <K, V> Map<K, V> filterFiltered(AbstractFilteredMap<K, V> map,
+      Predicate<? super Entry<K, V>> entryPredicate) {
+    Predicate<Entry<K, V>> predicate =
+        Predicates.and(map.predicate, entryPredicate);
+    return new FilteredEntryMap<K, V>(map.unfiltered, predicate);
+  }
+
+  private abstract static class AbstractFilteredMap<K, V>
+      extends AbstractMap<K, V> {
+    final Map<K, V> unfiltered;
+    final Predicate<? super Entry<K, V>> predicate;
+
+    AbstractFilteredMap(
+        Map<K, V> unfiltered, Predicate<? super Entry<K, V>> predicate) {
+      this.unfiltered = unfiltered;
+      this.predicate = predicate;
+    }
+
+    boolean apply(Object key, V value) {
+      // This method is called only when the key is in the map, implying that
+      // key is a K.
+      @SuppressWarnings("unchecked")
+      K k = (K) key;
+      return predicate.apply(Maps.immutableEntry(k, value));
+    }
+
+    @Override public V put(K key, V value) {
+      checkArgument(apply(key, value));
+      return unfiltered.put(key, value);
+    }
+
+    @Override public void putAll(Map<? extends K, ? extends V> map) {
+      for (Entry<? extends K, ? extends V> entry : map.entrySet()) {
+        checkArgument(apply(entry.getKey(), entry.getValue()));
+      }
+      unfiltered.putAll(map);
+    }
+
+    @Override public boolean containsKey(Object key) {
+      return unfiltered.containsKey(key) && apply(key, unfiltered.get(key));
+    }
+
+    @Override public V get(Object key) {
+      V value = unfiltered.get(key);
+      return ((value != null) && apply(key, value)) ? value : null;
+    }
+
+    @Override public boolean isEmpty() {
+      return entrySet().isEmpty();
+    }
+
+    @Override public V remove(Object key) {
+      return containsKey(key) ? unfiltered.remove(key) : null;
+    }
+
+    Collection<V> values;
+
+    @Override public Collection<V> values() {
+      Collection<V> result = values;
+      return (result == null) ? values = new Values() : result;
+    }
+
+    class Values extends AbstractCollection<V> {
+      @Override public Iterator<V> iterator() {
+        final Iterator<Entry<K, V>> entryIterator = entrySet().iterator();
+        return new UnmodifiableIterator<V>() {
+          @Override
+          public boolean hasNext() {
+            return entryIterator.hasNext();
+          }
+
+          @Override
+          public V next() {
+            return entryIterator.next().getValue();
+          }
+        };
+      }
+
+      @Override public int size() {
+        return entrySet().size();
+      }
+
+      @Override public void clear() {
+        entrySet().clear();
+      }
+
+      @Override public boolean isEmpty() {
+        return entrySet().isEmpty();
+      }
+
+      @Override public boolean remove(Object o) {
+        Iterator<Entry<K, V>> iterator = unfiltered.entrySet().iterator();
+        while (iterator.hasNext()) {
+          Entry<K, V> entry = iterator.next();
+          if (Objects.equal(o, entry.getValue()) && predicate.apply(entry)) {
+            iterator.remove();
+            return true;
+          }
+        }
+        return false;
+      }
+
+      @Override public boolean removeAll(Collection<?> collection) {
+        checkNotNull(collection);
+        boolean changed = false;
+        Iterator<Entry<K, V>> iterator = unfiltered.entrySet().iterator();
+        while (iterator.hasNext()) {
+          Entry<K, V> entry = iterator.next();
+          if (collection.contains(entry.getValue()) && predicate.apply(entry)) {
+            iterator.remove();
+            changed = true;
+          }
+        }
+        return changed;
+      }
+
+      @Override public boolean retainAll(Collection<?> collection) {
+        checkNotNull(collection);
+        boolean changed = false;
+        Iterator<Entry<K, V>> iterator = unfiltered.entrySet().iterator();
+        while (iterator.hasNext()) {
+          Entry<K, V> entry = iterator.next();
+          if (!collection.contains(entry.getValue())
+              && predicate.apply(entry)) {
+            iterator.remove();
+            changed = true;
+          }
+        }
+        return changed;
+      }
+
+      @Override public Object[] toArray() {
+        // creating an ArrayList so filtering happens once
+        return Lists.newArrayList(iterator()).toArray();
+      }
+
+      @Override public <T> T[] toArray(T[] array) {
+        return Lists.newArrayList(iterator()).toArray(array);
+      }
+    }
+  }
+  /**
+   * Support {@code clear()}, {@code removeAll()}, and {@code retainAll()} when
+   * filtering a filtered sorted map.
+   */
+  private static <K, V> SortedMap<K, V> filterFiltered(
+      FilteredEntrySortedMap<K, V> map,
+      Predicate<? super Entry<K, V>> entryPredicate) {
+    Predicate<Entry<K, V>> predicate
+        = Predicates.and(map.predicate, entryPredicate);
+    return new FilteredEntrySortedMap<K, V>(map.sortedMap(), predicate);
+  }
+
+  private static class FilteredEntrySortedMap<K, V>
+      extends FilteredEntryMap<K, V> implements SortedMap<K, V> {
+
+    FilteredEntrySortedMap(SortedMap<K, V> unfiltered,
+        Predicate<? super Entry<K, V>> entryPredicate) {
+      super(unfiltered, entryPredicate);
+    }
+
+    SortedMap<K, V> sortedMap() {
+      return (SortedMap<K, V>) unfiltered;
+    }
+
+    @Override public Comparator<? super K> comparator() {
+      return sortedMap().comparator();
+    }
+
+    @Override public K firstKey() {
+      // correctly throws NoSuchElementException when filtered map is empty.
+      return keySet().iterator().next();
+    }
+
+    @Override public K lastKey() {
+      SortedMap<K, V> headMap = sortedMap();
+      while (true) {
+        // correctly throws NoSuchElementException when filtered map is empty.
+        K key = headMap.lastKey();
+        if (apply(key, unfiltered.get(key))) {
+          return key;
+        }
+        headMap = sortedMap().headMap(key);
+      }
+    }
+
+    @Override public SortedMap<K, V> headMap(K toKey) {
+      return new FilteredEntrySortedMap<K, V>(sortedMap().headMap(toKey), predicate);
+    }
+
+    @Override public SortedMap<K, V> subMap(K fromKey, K toKey) {
+      return new FilteredEntrySortedMap<K, V>(
+          sortedMap().subMap(fromKey, toKey), predicate);
+    }
+
+    @Override public SortedMap<K, V> tailMap(K fromKey) {
+      return new FilteredEntrySortedMap<K, V>(
+          sortedMap().tailMap(fromKey), predicate);
+    }
+  }
+
+  private static class FilteredKeyMap<K, V> extends AbstractFilteredMap<K, V> {
+    Predicate<? super K> keyPredicate;
+
+    FilteredKeyMap(Map<K, V> unfiltered, Predicate<? super K> keyPredicate,
+        Predicate<Entry<K, V>> entryPredicate) {
+      super(unfiltered, entryPredicate);
+      this.keyPredicate = keyPredicate;
+    }
+
+    Set<Entry<K, V>> entrySet;
+
+    @Override public Set<Entry<K, V>> entrySet() {
+      Set<Entry<K, V>> result = entrySet;
+      return (result == null)
+          ? entrySet = Sets.filter(unfiltered.entrySet(), predicate)
+          : result;
+    }
+
+    Set<K> keySet;
+
+    @Override public Set<K> keySet() {
+      Set<K> result = keySet;
+      return (result == null)
+          ? keySet = Sets.filter(unfiltered.keySet(), keyPredicate)
+          : result;
+    }
+
+    // The cast is called only when the key is in the unfiltered map, implying
+    // that key is a K.
+    @Override
+    @SuppressWarnings("unchecked")
+    public boolean containsKey(Object key) {
+      return unfiltered.containsKey(key) && keyPredicate.apply((K) key);
+    }
+  }
+
+  static class FilteredEntryMap<K, V> extends AbstractFilteredMap<K, V> {
+    /**
+     * Entries in this set satisfy the predicate, but they don't validate the
+     * input to {@code Entry.setValue()}.
+     */
+    final Set<Entry<K, V>> filteredEntrySet;
+
+    FilteredEntryMap(
+        Map<K, V> unfiltered, Predicate<? super Entry<K, V>> entryPredicate) {
+      super(unfiltered, entryPredicate);
+      filteredEntrySet = Sets.filter(unfiltered.entrySet(), predicate);
+    }
+
+    Set<Entry<K, V>> entrySet;
+
+    @Override public Set<Entry<K, V>> entrySet() {
+      Set<Entry<K, V>> result = entrySet;
+      return (result == null) ? entrySet = new EntrySet() : result;
+    }
+
+    private class EntrySet extends ForwardingSet<Entry<K, V>> {
+      @Override protected Set<Entry<K, V>> delegate() {
+        return filteredEntrySet;
+      }
+
+      @Override public Iterator<Entry<K, V>> iterator() {
+        final Iterator<Entry<K, V>> iterator = filteredEntrySet.iterator();
+        return new UnmodifiableIterator<Entry<K, V>>() {
+          @Override
+          public boolean hasNext() {
+            return iterator.hasNext();
+          }
+
+          @Override
+          public Entry<K, V> next() {
+            final Entry<K, V> entry = iterator.next();
+            return new ForwardingMapEntry<K, V>() {
+              @Override protected Entry<K, V> delegate() {
+                return entry;
+              }
+
+              @Override public V setValue(V value) {
+                checkArgument(apply(entry.getKey(), value));
+                return super.setValue(value);
+              }
+            };
+          }
+        };
+      }
+    }
+
+    Set<K> keySet;
+
+    @Override public Set<K> keySet() {
+      Set<K> result = keySet;
+      return (result == null) ? keySet = new KeySet() : result;
+    }
+
+    private class KeySet extends AbstractSet<K> {
+      @Override public Iterator<K> iterator() {
+        final Iterator<Entry<K, V>> iterator = filteredEntrySet.iterator();
+        return new UnmodifiableIterator<K>() {
+          @Override
+          public boolean hasNext() {
+            return iterator.hasNext();
+          }
+
+          @Override
+          public K next() {
+            return iterator.next().getKey();
+          }
+        };
+      }
+
+      @Override public int size() {
+        return filteredEntrySet.size();
+      }
+
+      @Override public void clear() {
+        filteredEntrySet.clear();
+      }
+
+      @Override public boolean contains(Object o) {
+        return containsKey(o);
+      }
+
+      @Override public boolean remove(Object o) {
+        if (containsKey(o)) {
+          unfiltered.remove(o);
+          return true;
+        }
+        return false;
+      }
+
+      @Override public boolean removeAll(Collection<?> collection) {
+        checkNotNull(collection); // for GWT
+        boolean changed = false;
+        for (Object obj : collection) {
+          changed |= remove(obj);
+        }
+        return changed;
+      }
+
+      @Override public boolean retainAll(Collection<?> collection) {
+        checkNotNull(collection); // for GWT
+        boolean changed = false;
+        Iterator<Entry<K, V>> iterator = unfiltered.entrySet().iterator();
+        while (iterator.hasNext()) {
+          Entry<K, V> entry = iterator.next();
+          if (!collection.contains(entry.getKey()) && predicate.apply(entry)) {
+            iterator.remove();
+            changed = true;
+          }
+        }
+        return changed;
+      }
+
+      @Override public Object[] toArray() {
+        // creating an ArrayList so filtering happens once
+        return Lists.newArrayList(iterator()).toArray();
+      }
+
+      @Override public <T> T[] toArray(T[] array) {
+        return Lists.newArrayList(iterator()).toArray(array);
+      }
+    }
+  }
+
+  /**
+   * {@code AbstractMap} extension that implements {@link #isEmpty()} as {@code
+   * entrySet().isEmpty()} instead of {@code size() == 0} to speed up
+   * implementations where {@code size()} is O(n), and it delegates the {@code
+   * isEmpty()} methods of its key set and value collection to this
+   * implementation.
+   */
+  @GwtCompatible
+  static abstract class ImprovedAbstractMap<K, V> extends AbstractMap<K, V> {
+    /**
+     * Creates the entry set to be returned by {@link #entrySet()}. This method
+     * is invoked at most once on a given map, at the time when {@code entrySet}
+     * is first called.
+     */
+    protected abstract Set<Entry<K, V>> createEntrySet();
+
+    private Set<Entry<K, V>> entrySet;
+
+    @Override public Set<Entry<K, V>> entrySet() {
+      Set<Entry<K, V>> result = entrySet;
+      if (result == null) {
+        entrySet = result = createEntrySet();
+      }
+      return result;
+    }
+
+    private Set<K> keySet;
+
+    @Override public Set<K> keySet() {
+      Set<K> result = keySet;
+      if (result == null) {
+        return keySet = new KeySet<K, V>() {
+          @Override Map<K, V> map() {
+            return ImprovedAbstractMap.this;
+          }
+        };
+      }
+      return result;
+    }
+
+    private Collection<V> values;
+
+    @Override public Collection<V> values() {
+      Collection<V> result = values;
+      if (result == null) {
+        return values = new Values<K, V>(){
+          @Override Map<K, V> map() {
+            return ImprovedAbstractMap.this;
+          }
+        };
+      }
+      return result;
+    }
+
+    /**
+     * Returns {@code true} if this map contains no key-value mappings.
+     *
+     * <p>The implementation returns {@code entrySet().isEmpty()}.
+     *
+     * @return {@code true} if this map contains no key-value mappings
+     */
+    @Override public boolean isEmpty() {
+      return entrySet().isEmpty();
+    }
+  }
+
+  static final MapJoiner STANDARD_JOINER =
+      Collections2.STANDARD_JOINER.withKeyValueSeparator("=");
+
+  /**
+   * Delegates to {@link Map#get}. Returns {@code null} on {@code
+   * ClassCastException}.
+   */
+  static <V> V safeGet(Map<?, V> map, Object key) {
+    try {
+      return map.get(key);
+    } catch (ClassCastException e) {
+      return null;
+    }
+  }
+
+  /**
+   * Delegates to {@link Map#containsKey}. Returns {@code false} on {@code
+   * ClassCastException}
+   */
+  static boolean safeContainsKey(Map<?, ?> map, Object key) {
+    try {
+      return map.containsKey(key);
+    } catch (ClassCastException e) {
+      return false;
+    }
+  }
+
+  /**
+   * Implements {@code Collection.contains} safely for forwarding collections of
+   * map entries. If {@code o} is an instance of {@code Map.Entry}, it is
+   * wrapped using {@link #unmodifiableEntry} to protect against a possible
+   * nefarious equals method.
+   *
+   * <p>Note that {@code c} is the backing (delegate) collection, rather than
+   * the forwarding collection.
+   *
+   * @param c the delegate (unwrapped) collection of map entries
+   * @param o the object that might be contained in {@code c}
+   * @return {@code true} if {@code c} contains {@code o}
+   */
+  static <K, V> boolean containsEntryImpl(Collection<Entry<K, V>> c, Object o) {
+    if (!(o instanceof Entry)) {
+      return false;
+    }
+    return c.contains(unmodifiableEntry((Entry<?, ?>) o));
+  }
+
+  /**
+   * Implements {@code Collection.remove} safely for forwarding collections of
+   * map entries. If {@code o} is an instance of {@code Map.Entry}, it is
+   * wrapped using {@link #unmodifiableEntry} to protect against a possible
+   * nefarious equals method.
+   *
+   * <p>Note that {@code c} is backing (delegate) collection, rather than the
+   * forwarding collection.
+   *
+   * @param c the delegate (unwrapped) collection of map entries
+   * @param o the object to remove from {@code c}
+   * @return {@code true} if {@code c} was changed
+   */
+  static <K, V> boolean removeEntryImpl(Collection<Entry<K, V>> c, Object o) {
+    if (!(o instanceof Entry)) {
+      return false;
+    }
+    return c.remove(unmodifiableEntry((Entry<?, ?>) o));
+  }
+
+  /**
+   * An implementation of {@link Map#equals}.
+   */
+  static boolean equalsImpl(Map<?, ?> map, Object object) {
+    if (map == object) {
+      return true;
+    }
+    if (object instanceof Map) {
+      Map<?, ?> o = (Map<?, ?>) object;
+      return map.entrySet().equals(o.entrySet());
+    }
+    return false;
+  }
+
+  /**
+   * An implementation of {@link Map#hashCode}.
+   */
+  static int hashCodeImpl(Map<?, ?> map) {
+    return Sets.hashCodeImpl(map.entrySet());
+  }
+
+  /**
+   * An implementation of {@link Map#toString}.
+   */
+  static String toStringImpl(Map<?, ?> map) {
+    StringBuilder sb
+        = Collections2.newStringBuilderForCollection(map.size()).append('{');
+    STANDARD_JOINER.appendTo(sb, map);
+    return sb.append('}').toString();
+  }
+
+  /**
+   * An implementation of {@link Map#putAll}.
+   */
+  static <K, V> void putAllImpl(
+      Map<K, V> self, Map<? extends K, ? extends V> map) {
+    for (Map.Entry<? extends K, ? extends V> entry : map.entrySet()) {
+      self.put(entry.getKey(), entry.getValue());
+    }
+  }
+
+  /**
+   * An admittedly inefficient implementation of {@link Map#containsKey}.
+   */
+  static boolean containsKeyImpl(Map<?, ?> map, @Nullable Object key) {
+    for (Entry<?, ?> entry : map.entrySet()) {
+      if (Objects.equal(entry.getKey(), key)) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  /**
+   * An implementation of {@link Map#containsValue}.
+   */
+  static boolean containsValueImpl(Map<?, ?> map, @Nullable Object value) {
+    for (Entry<?, ?> entry : map.entrySet()) {
+      if (Objects.equal(entry.getValue(), value)) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  abstract static class KeySet<K, V> extends AbstractSet<K> {
+    abstract Map<K, V> map();
+
+    @Override public Iterator<K> iterator() {
+      return Iterators.transform(map().entrySet().iterator(),
+          new Function<Map.Entry<K, V>, K>() {
+            @Override public K apply(Entry<K, V> entry) {
+              return entry.getKey();
+            }
+          });
+    }
+
+    @Override public int size() {
+      return map().size();
+    }
+
+    @Override public boolean isEmpty() {
+      return map().isEmpty();
+    }
+
+    @Override public boolean contains(Object o) {
+      return map().containsKey(o);
+    }
+
+    @Override public boolean remove(Object o) {
+      if (contains(o)) {
+        map().remove(o);
+        return true;
+      }
+      return false;
+    }
+
+    @Override
+    public boolean removeAll(Collection<?> c) {
+      // TODO(user): find out why this is necessary to make GWT tests pass.
+      return super.removeAll(checkNotNull(c));
+    }
+
+    @Override public void clear() {
+      map().clear();
+    }
+  }
+
+  abstract static class Values<K, V> extends AbstractCollection<V> {
+    abstract Map<K, V> map();
+
+    @Override public Iterator<V> iterator() {
+      return Iterators.transform(map().entrySet().iterator(),
+          new Function<Entry<K, V>, V>() {
+            @Override public V apply(Entry<K, V> entry) {
+              return entry.getValue();
+            }
+          });
+    }
+
+    @Override public boolean remove(Object o) {
+      try {
+        return super.remove(o);
+      } catch (UnsupportedOperationException e) {
+        for (Entry<K, V> entry : map().entrySet()) {
+          if (Objects.equal(o, entry.getValue())) {
+            map().remove(entry.getKey());
+            return true;
+          }
+        }
+        return false;
+      }
+    }
+
+    @Override public boolean removeAll(Collection<?> c) {
+      try {
+        return super.removeAll(checkNotNull(c));
+      } catch (UnsupportedOperationException e) {
+        Set<K> toRemove = Sets.newHashSet();
+        for (Entry<K, V> entry : map().entrySet()) {
+          if (c.contains(entry.getValue())) {
+            toRemove.add(entry.getKey());
+          }
+        }
+        return map().keySet().removeAll(toRemove);
+      }
+    }
+
+    @Override public boolean retainAll(Collection<?> c) {
+      try {
+        return super.retainAll(checkNotNull(c));
+      } catch (UnsupportedOperationException e) {
+        Set<K> toRetain = Sets.newHashSet();
+        for (Entry<K, V> entry : map().entrySet()) {
+          if (c.contains(entry.getValue())) {
+            toRetain.add(entry.getKey());
+          }
+        }
+        return map().keySet().retainAll(toRetain);
+      }
+    }
+
+    @Override public int size() {
+      return map().size();
+    }
+
+    @Override public boolean isEmpty() {
+      return map().isEmpty();
+    }
+
+    @Override public boolean contains(@Nullable Object o) {
+      return map().containsValue(o);
+    }
+
+    @Override public void clear() {
+      map().clear();
+    }
+  }
+
+  abstract static class EntrySet<K, V> extends AbstractSet<Entry<K, V>> {
+    abstract Map<K, V> map();
+
+    @Override public int size() {
+      return map().size();
+    }
+
+    @Override public void clear() {
+      map().clear();
+    }
+
+    @Override public boolean contains(Object o) {
+      if (o instanceof Entry) {
+        Entry<?, ?> entry = (Entry<?, ?>) o;
+        Object key = entry.getKey();
+        V value = map().get(key);
+        return Objects.equal(value, entry.getValue())
+            && (value != null || map().containsKey(key));
+      }
+      return false;
+    }
+
+    @Override public boolean isEmpty() {
+      return map().isEmpty();
+    }
+
+    @Override public boolean remove(Object o) {
+      if (contains(o)) {
+        Entry<?, ?> entry = (Entry<?, ?>) o;
+        return map().keySet().remove(entry.getKey());
+      }
+      return false;
+    }
+
+    @Override public boolean removeAll(Collection<?> c) {
+      try {
+        return super.removeAll(checkNotNull(c));
+      } catch (UnsupportedOperationException e) {
+        // if the iterators don't support remove
+        boolean changed = true;
+        for (Object o : c) {
+          changed |= remove(o);
+        }
+        return changed;
+      }
+    }
+
+    @Override public boolean retainAll(Collection<?> c) {
+      try {
+        return super.retainAll(checkNotNull(c));
+      } catch (UnsupportedOperationException e) {
+        // if the iterators don't support remove
+        Set<Object> keys = Sets.newHashSetWithExpectedSize(c.size());
+        for (Object o : c) {
+          if (contains(o)) {
+            Entry<?, ?> entry = (Entry<?, ?>) o;
+            keys.add(entry.getKey());
+          }
+        }
+        return map().keySet().retainAll(keys);
+      }
+    }
+  }
+}
diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/Multimaps.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/Multimaps.java
new file mode 100644
index 0000000..7e8e2f7
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/Multimaps.java
@@ -0,0 +1,2539 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkState;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Function;
+import com.google.common.base.Joiner;
+import com.google.common.base.Joiner.MapJoiner;
+import com.google.common.base.Objects;
+import com.google.common.base.Predicate;
+import com.google.common.base.Predicates;
+import com.google.common.base.Supplier;
+import com.google.common.collect.Collections2.TransformedCollection;
+import com.google.common.collect.Maps.EntryTransformer;
+
+import java.io.Serializable;
+import java.util.AbstractCollection;
+import java.util.AbstractSet;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.NoSuchElementException;
+import java.util.Set;
+import java.util.SortedSet;
+
+import javax.annotation.Nullable;
+
+/**
+ * Provides static methods acting on or generating a {@code Multimap}.
+ *
+ * @author Jared Levy
+ * @author Robert Konigsberg
+ * @author Mike Bostock
+ * @author Louis Wasserman
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible(emulated = true)
+public final class Multimaps {
+  private Multimaps() {}
+
+  /**
+   * Creates a new {@code Multimap} that uses the provided map and factory. It
+   * can generate a multimap based on arbitrary {@link Map} and
+   * {@link Collection} classes.
+   *
+   * <p>The {@code factory}-generated and {@code map} classes determine the
+   * multimap iteration order. They also specify the behavior of the
+   * {@code equals}, {@code hashCode}, and {@code toString} methods for the
+   * multimap and its returned views. However, the multimap's {@code get}
+   * method returns instances of a different class than {@code factory.get()}
+   * does.
+   *
+   * <p>The multimap is serializable if {@code map}, {@code factory}, the
+   * collections generated by {@code factory}, and the multimap contents are all
+   * serializable.
+   *
+   * <p>The multimap is not threadsafe when any concurrent operations update the
+   * multimap, even if {@code map} and the instances generated by
+   * {@code factory} are. Concurrent read operations will work correctly. To
+   * allow concurrent update operations, wrap the multimap with a call to
+   * {@link #synchronizedMultimap}.
+   *
+   * <p>Call this method only when the simpler methods
+   * {@link ArrayListMultimap#create()}, {@link HashMultimap#create()},
+   * {@link LinkedHashMultimap#create()}, {@link LinkedListMultimap#create()},
+   * {@link TreeMultimap#create()}, and
+   * {@link TreeMultimap#create(Comparator, Comparator)} won't suffice.
+   *
+   * <p>Note: the multimap assumes complete ownership over of {@code map} and
+   * the collections returned by {@code factory}. Those objects should not be
+   * manually updated and they should not use soft, weak, or phantom references.
+   *
+   * @param map place to store the mapping from each key to its corresponding
+   *     values
+   * @param factory supplier of new, empty collections that will each hold all
+   *     values for a given key
+   * @throws IllegalArgumentException if {@code map} is not empty
+   */
+  public static <K, V> Multimap<K, V> newMultimap(Map<K, Collection<V>> map,
+      final Supplier<? extends Collection<V>> factory) {
+    return new CustomMultimap<K, V>(map, factory);
+  }
+
+  private static class CustomMultimap<K, V> extends AbstractMultimap<K, V> {
+    transient Supplier<? extends Collection<V>> factory;
+
+    CustomMultimap(Map<K, Collection<V>> map,
+        Supplier<? extends Collection<V>> factory) {
+      super(map);
+      this.factory = checkNotNull(factory);
+    }
+
+    @Override protected Collection<V> createCollection() {
+      return factory.get();
+    }
+
+    // can't use Serialization writeMultimap and populateMultimap methods since
+    // there's no way to generate the empty backing map.
+  }
+
+  /**
+   * Creates a new {@code ListMultimap} that uses the provided map and factory.
+   * It can generate a multimap based on arbitrary {@link Map} and {@link List}
+   * classes.
+   *
+   * <p>The {@code factory}-generated and {@code map} classes determine the
+   * multimap iteration order. They also specify the behavior of the
+   * {@code equals}, {@code hashCode}, and {@code toString} methods for the
+   * multimap and its returned views. The multimap's {@code get}, {@code
+   * removeAll}, and {@code replaceValues} methods return {@code RandomAccess}
+   * lists if the factory does. However, the multimap's {@code get} method
+   * returns instances of a different class than does {@code factory.get()}.
+   *
+   * <p>The multimap is serializable if {@code map}, {@code factory}, the
+   * lists generated by {@code factory}, and the multimap contents are all
+   * serializable.
+   *
+   * <p>The multimap is not threadsafe when any concurrent operations update the
+   * multimap, even if {@code map} and the instances generated by
+   * {@code factory} are. Concurrent read operations will work correctly. To
+   * allow concurrent update operations, wrap the multimap with a call to
+   * {@link #synchronizedListMultimap}.
+   *
+   * <p>Call this method only when the simpler methods
+   * {@link ArrayListMultimap#create()} and {@link LinkedListMultimap#create()}
+   * won't suffice.
+   *
+   * <p>Note: the multimap assumes complete ownership over of {@code map} and
+   * the lists returned by {@code factory}. Those objects should not be manually
+   * updated, they should be empty when provided, and they should not use soft,
+   * weak, or phantom references.
+   *
+   * @param map place to store the mapping from each key to its corresponding
+   *     values
+   * @param factory supplier of new, empty lists that will each hold all values
+   *     for a given key
+   * @throws IllegalArgumentException if {@code map} is not empty
+   */
+  public static <K, V> ListMultimap<K, V> newListMultimap(
+      Map<K, Collection<V>> map, final Supplier<? extends List<V>> factory) {
+    return new CustomListMultimap<K, V>(map, factory);
+  }
+
+  private static class CustomListMultimap<K, V>
+      extends AbstractListMultimap<K, V> {
+    transient Supplier<? extends List<V>> factory;
+
+    CustomListMultimap(Map<K, Collection<V>> map,
+        Supplier<? extends List<V>> factory) {
+      super(map);
+      this.factory = checkNotNull(factory);
+    }
+
+    @Override protected List<V> createCollection() {
+      return factory.get();
+    }
+  }
+
+  /**
+   * Creates a new {@code SetMultimap} that uses the provided map and factory.
+   * It can generate a multimap based on arbitrary {@link Map} and {@link Set}
+   * classes.
+   *
+   * <p>The {@code factory}-generated and {@code map} classes determine the
+   * multimap iteration order. They also specify the behavior of the
+   * {@code equals}, {@code hashCode}, and {@code toString} methods for the
+   * multimap and its returned views. However, the multimap's {@code get}
+   * method returns instances of a different class than {@code factory.get()}
+   * does.
+   *
+   * <p>The multimap is serializable if {@code map}, {@code factory}, the
+   * sets generated by {@code factory}, and the multimap contents are all
+   * serializable.
+   *
+   * <p>The multimap is not threadsafe when any concurrent operations update the
+   * multimap, even if {@code map} and the instances generated by
+   * {@code factory} are. Concurrent read operations will work correctly. To
+   * allow concurrent update operations, wrap the multimap with a call to
+   * {@link #synchronizedSetMultimap}.
+   *
+   * <p>Call this method only when the simpler methods
+   * {@link HashMultimap#create()}, {@link LinkedHashMultimap#create()},
+   * {@link TreeMultimap#create()}, and
+   * {@link TreeMultimap#create(Comparator, Comparator)} won't suffice.
+   *
+   * <p>Note: the multimap assumes complete ownership over of {@code map} and
+   * the sets returned by {@code factory}. Those objects should not be manually
+   * updated and they should not use soft, weak, or phantom references.
+   *
+   * @param map place to store the mapping from each key to its corresponding
+   *     values
+   * @param factory supplier of new, empty sets that will each hold all values
+   *     for a given key
+   * @throws IllegalArgumentException if {@code map} is not empty
+   */
+  public static <K, V> SetMultimap<K, V> newSetMultimap(
+      Map<K, Collection<V>> map, final Supplier<? extends Set<V>> factory) {
+    return new CustomSetMultimap<K, V>(map, factory);
+  }
+
+  private static class CustomSetMultimap<K, V>
+      extends AbstractSetMultimap<K, V> {
+    transient Supplier<? extends Set<V>> factory;
+
+    CustomSetMultimap(Map<K, Collection<V>> map,
+        Supplier<? extends Set<V>> factory) {
+      super(map);
+      this.factory = checkNotNull(factory);
+    }
+
+    @Override protected Set<V> createCollection() {
+      return factory.get();
+    }
+  }
+
+  /**
+   * Creates a new {@code SortedSetMultimap} that uses the provided map and
+   * factory. It can generate a multimap based on arbitrary {@link Map} and
+   * {@link SortedSet} classes.
+   *
+   * <p>The {@code factory}-generated and {@code map} classes determine the
+   * multimap iteration order. They also specify the behavior of the
+   * {@code equals}, {@code hashCode}, and {@code toString} methods for the
+   * multimap and its returned views. However, the multimap's {@code get}
+   * method returns instances of a different class than {@code factory.get()}
+   * does.
+   *
+   * <p>The multimap is serializable if {@code map}, {@code factory}, the
+   * sets generated by {@code factory}, and the multimap contents are all
+   * serializable.
+   *
+   * <p>The multimap is not threadsafe when any concurrent operations update the
+   * multimap, even if {@code map} and the instances generated by
+   * {@code factory} are. Concurrent read operations will work correctly. To
+   * allow concurrent update operations, wrap the multimap with a call to
+   * {@link #synchronizedSortedSetMultimap}.
+   *
+   * <p>Call this method only when the simpler methods
+   * {@link TreeMultimap#create()} and
+   * {@link TreeMultimap#create(Comparator, Comparator)} won't suffice.
+   *
+   * <p>Note: the multimap assumes complete ownership over of {@code map} and
+   * the sets returned by {@code factory}. Those objects should not be manually
+   * updated and they should not use soft, weak, or phantom references.
+   *
+   * @param map place to store the mapping from each key to its corresponding
+   *     values
+   * @param factory supplier of new, empty sorted sets that will each hold
+   *     all values for a given key
+   * @throws IllegalArgumentException if {@code map} is not empty
+   */
+  public static <K, V> SortedSetMultimap<K, V> newSortedSetMultimap(
+      Map<K, Collection<V>> map,
+      final Supplier<? extends SortedSet<V>> factory) {
+    return new CustomSortedSetMultimap<K, V>(map, factory);
+  }
+
+  private static class CustomSortedSetMultimap<K, V>
+      extends AbstractSortedSetMultimap<K, V> {
+    transient Supplier<? extends SortedSet<V>> factory;
+    transient Comparator<? super V> valueComparator;
+
+    CustomSortedSetMultimap(Map<K, Collection<V>> map,
+        Supplier<? extends SortedSet<V>> factory) {
+      super(map);
+      this.factory = checkNotNull(factory);
+      valueComparator = factory.get().comparator();
+    }
+
+    @Override protected SortedSet<V> createCollection() {
+      return factory.get();
+    }
+
+    @Override public Comparator<? super V> valueComparator() {
+      return valueComparator;
+    }
+  }
+
+  /**
+   * Copies each key-value mapping in {@code source} into {@code dest}, with
+   * its key and value reversed.
+   *
+   * <p>If {@code source} is an {@link ImmutableMultimap}, consider using
+   * {@link ImmutableMultimap#inverse} instead.
+   *
+   * @param source any multimap
+   * @param dest the multimap to copy into; usually empty
+   * @return {@code dest}
+   */
+  public static <K, V, M extends Multimap<K, V>> M invertFrom(
+      Multimap<? extends V, ? extends K> source, M dest) {
+    checkNotNull(dest);
+    for (Map.Entry<? extends V, ? extends K> entry : source.entries()) {
+      dest.put(entry.getValue(), entry.getKey());
+    }
+    return dest;
+  }
+
+  /**
+   * Returns a synchronized (thread-safe) multimap backed by the specified
+   * multimap. In order to guarantee serial access, it is critical that
+   * <b>all</b> access to the backing multimap is accomplished through the
+   * returned multimap.
+   *
+   * <p>It is imperative that the user manually synchronize on the returned
+   * multimap when accessing any of its collection views: <pre>   {@code
+   *
+   *   Multimap<K, V> m = Multimaps.synchronizedMultimap(
+   *       HashMultimap.<K, V>create());
+   *   ...
+   *   Set<K> s = m.keySet();  // Needn't be in synchronized block
+   *   ...
+   *   synchronized (m) {  // Synchronizing on m, not s!
+   *     Iterator<K> i = s.iterator(); // Must be in synchronized block
+   *     while (i.hasNext()) {
+   *       foo(i.next());
+   *     }
+   *   }}</pre>
+   *
+   * Failure to follow this advice may result in non-deterministic behavior.
+   *
+   * <p>Note that the generated multimap's {@link Multimap#removeAll} and
+   * {@link Multimap#replaceValues} methods return collections that aren't
+   * synchronized.
+   *
+   * <p>The returned multimap will be serializable if the specified multimap is
+   * serializable.
+   *
+   * @param multimap the multimap to be wrapped in a synchronized view
+   * @return a synchronized view of the specified multimap
+   */
+  public static <K, V> Multimap<K, V> synchronizedMultimap(
+      Multimap<K, V> multimap) {
+    return Synchronized.multimap(multimap, null);
+  }
+
+  /**
+   * Returns an unmodifiable view of the specified multimap. Query operations on
+   * the returned multimap "read through" to the specified multimap, and
+   * attempts to modify the returned multimap, either directly or through the
+   * multimap's views, result in an {@code UnsupportedOperationException}.
+   *
+   * <p>Note that the generated multimap's {@link Multimap#removeAll} and
+   * {@link Multimap#replaceValues} methods return collections that are
+   * modifiable.
+   *
+   * <p>The returned multimap will be serializable if the specified multimap is
+   * serializable.
+   *
+   * @param delegate the multimap for which an unmodifiable view is to be
+   *     returned
+   * @return an unmodifiable view of the specified multimap
+   */
+  public static <K, V> Multimap<K, V> unmodifiableMultimap(
+      Multimap<K, V> delegate) {
+    if (delegate instanceof UnmodifiableMultimap ||
+        delegate instanceof ImmutableMultimap) {
+      return delegate;
+    }
+    return new UnmodifiableMultimap<K, V>(delegate);
+  }
+
+  /**
+   * Simply returns its argument.
+   *
+   * @deprecated no need to use this
+   * @since 10.0
+   */
+  @Deprecated public static <K, V> Multimap<K, V> unmodifiableMultimap(
+      ImmutableMultimap<K, V> delegate) {
+    return checkNotNull(delegate);
+  }
+
+  private static class UnmodifiableMultimap<K, V>
+      extends ForwardingMultimap<K, V> implements Serializable {
+    final Multimap<K, V> delegate;
+    transient Collection<Entry<K, V>> entries;
+    transient Multiset<K> keys;
+    transient Set<K> keySet;
+    transient Collection<V> values;
+    transient Map<K, Collection<V>> map;
+
+    UnmodifiableMultimap(final Multimap<K, V> delegate) {
+      this.delegate = checkNotNull(delegate);
+    }
+
+    @Override protected Multimap<K, V> delegate() {
+      return delegate;
+    }
+
+    @Override public void clear() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override public Map<K, Collection<V>> asMap() {
+      Map<K, Collection<V>> result = map;
+      if (result == null) {
+        final Map<K, Collection<V>> unmodifiableMap
+            = Collections.unmodifiableMap(delegate.asMap());
+        map = result = new ForwardingMap<K, Collection<V>>() {
+          @Override protected Map<K, Collection<V>> delegate() {
+            return unmodifiableMap;
+          }
+
+          Set<Entry<K, Collection<V>>> entrySet;
+
+          @Override public Set<Map.Entry<K, Collection<V>>> entrySet() {
+            Set<Entry<K, Collection<V>>> result = entrySet;
+            return (result == null)
+                ? entrySet
+                    = unmodifiableAsMapEntries(unmodifiableMap.entrySet())
+                : result;
+          }
+
+          @Override public Collection<V> get(Object key) {
+            Collection<V> collection = unmodifiableMap.get(key);
+            return (collection == null)
+                ? null : unmodifiableValueCollection(collection);
+          }
+
+          Collection<Collection<V>> asMapValues;
+
+          @Override public Collection<Collection<V>> values() {
+            Collection<Collection<V>> result = asMapValues;
+            return (result == null)
+                ? asMapValues
+                    = new UnmodifiableAsMapValues<V>(unmodifiableMap.values())
+                : result;
+          }
+
+          @Override public boolean containsValue(Object o) {
+            return values().contains(o);
+          }
+        };
+      }
+      return result;
+    }
+
+    @Override public Collection<Entry<K, V>> entries() {
+      Collection<Entry<K, V>> result = entries;
+      if (result == null) {
+        entries = result = unmodifiableEntries(delegate.entries());
+      }
+      return result;
+    }
+
+    @Override public Collection<V> get(K key) {
+      return unmodifiableValueCollection(delegate.get(key));
+    }
+
+    @Override public Multiset<K> keys() {
+      Multiset<K> result = keys;
+      if (result == null) {
+        keys = result = Multisets.unmodifiableMultiset(delegate.keys());
+      }
+      return result;
+    }
+
+    @Override public Set<K> keySet() {
+      Set<K> result = keySet;
+      if (result == null) {
+        keySet = result = Collections.unmodifiableSet(delegate.keySet());
+      }
+      return result;
+    }
+
+    @Override public boolean put(K key, V value) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override public boolean putAll(K key, Iterable<? extends V> values) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public boolean putAll(Multimap<? extends K, ? extends V> multimap) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override public boolean remove(Object key, Object value) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override public Collection<V> removeAll(Object key) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override public Collection<V> replaceValues(
+        K key, Iterable<? extends V> values) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override public Collection<V> values() {
+      Collection<V> result = values;
+      if (result == null) {
+        values = result = Collections.unmodifiableCollection(delegate.values());
+      }
+      return result;
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  private static class UnmodifiableAsMapValues<V>
+      extends ForwardingCollection<Collection<V>> {
+    final Collection<Collection<V>> delegate;
+    UnmodifiableAsMapValues(Collection<Collection<V>> delegate) {
+      this.delegate = Collections.unmodifiableCollection(delegate);
+    }
+    @Override protected Collection<Collection<V>> delegate() {
+      return delegate;
+    }
+    @Override public Iterator<Collection<V>> iterator() {
+      final Iterator<Collection<V>> iterator = delegate.iterator();
+      return new Iterator<Collection<V>>() {
+        @Override
+        public boolean hasNext() {
+          return iterator.hasNext();
+        }
+        @Override
+        public Collection<V> next() {
+          return unmodifiableValueCollection(iterator.next());
+        }
+        @Override
+        public void remove() {
+          throw new UnsupportedOperationException();
+        }
+      };
+    }
+    @Override public Object[] toArray() {
+      return standardToArray();
+    }
+    @Override public <T> T[] toArray(T[] array) {
+      return standardToArray(array);
+    }
+    @Override public boolean contains(Object o) {
+      return standardContains(o);
+    }
+    @Override public boolean containsAll(Collection<?> c) {
+      return standardContainsAll(c);
+    }
+  }
+
+  private static class UnmodifiableListMultimap<K, V>
+      extends UnmodifiableMultimap<K, V> implements ListMultimap<K, V> {
+    UnmodifiableListMultimap(ListMultimap<K, V> delegate) {
+      super(delegate);
+    }
+    @Override public ListMultimap<K, V> delegate() {
+      return (ListMultimap<K, V>) super.delegate();
+    }
+    @Override public List<V> get(K key) {
+      return Collections.unmodifiableList(delegate().get(key));
+    }
+    @Override public List<V> removeAll(Object key) {
+      throw new UnsupportedOperationException();
+    }
+    @Override public List<V> replaceValues(
+        K key, Iterable<? extends V> values) {
+      throw new UnsupportedOperationException();
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  private static class UnmodifiableSetMultimap<K, V>
+      extends UnmodifiableMultimap<K, V> implements SetMultimap<K, V> {
+    UnmodifiableSetMultimap(SetMultimap<K, V> delegate) {
+      super(delegate);
+    }
+    @Override public SetMultimap<K, V> delegate() {
+      return (SetMultimap<K, V>) super.delegate();
+    }
+    @Override public Set<V> get(K key) {
+      /*
+       * Note that this doesn't return a SortedSet when delegate is a
+       * SortedSetMultiset, unlike (SortedSet<V>) super.get().
+       */
+      return Collections.unmodifiableSet(delegate().get(key));
+    }
+    @Override public Set<Map.Entry<K, V>> entries() {
+      return Maps.unmodifiableEntrySet(delegate().entries());
+    }
+    @Override public Set<V> removeAll(Object key) {
+      throw new UnsupportedOperationException();
+    }
+    @Override public Set<V> replaceValues(
+        K key, Iterable<? extends V> values) {
+      throw new UnsupportedOperationException();
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  private static class UnmodifiableSortedSetMultimap<K, V>
+      extends UnmodifiableSetMultimap<K, V> implements SortedSetMultimap<K, V> {
+    UnmodifiableSortedSetMultimap(SortedSetMultimap<K, V> delegate) {
+      super(delegate);
+    }
+    @Override public SortedSetMultimap<K, V> delegate() {
+      return (SortedSetMultimap<K, V>) super.delegate();
+    }
+    @Override public SortedSet<V> get(K key) {
+      return Collections.unmodifiableSortedSet(delegate().get(key));
+    }
+    @Override public SortedSet<V> removeAll(Object key) {
+      throw new UnsupportedOperationException();
+    }
+    @Override public SortedSet<V> replaceValues(
+        K key, Iterable<? extends V> values) {
+      throw new UnsupportedOperationException();
+    }
+    @Override
+    public Comparator<? super V> valueComparator() {
+      return delegate().valueComparator();
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  /**
+   * Returns a synchronized (thread-safe) {@code SetMultimap} backed by the
+   * specified multimap.
+   *
+   * <p>You must follow the warnings described in {@link #synchronizedMultimap}.
+   *
+   * <p>The returned multimap will be serializable if the specified multimap is
+   * serializable.
+   *
+   * @param multimap the multimap to be wrapped
+   * @return a synchronized view of the specified multimap
+   */
+  public static <K, V> SetMultimap<K, V> synchronizedSetMultimap(
+      SetMultimap<K, V> multimap) {
+    return Synchronized.setMultimap(multimap, null);
+  }
+
+  /**
+   * Returns an unmodifiable view of the specified {@code SetMultimap}. Query
+   * operations on the returned multimap "read through" to the specified
+   * multimap, and attempts to modify the returned multimap, either directly or
+   * through the multimap's views, result in an
+   * {@code UnsupportedOperationException}.
+   *
+   * <p>Note that the generated multimap's {@link Multimap#removeAll} and
+   * {@link Multimap#replaceValues} methods return collections that are
+   * modifiable.
+   *
+   * <p>The returned multimap will be serializable if the specified multimap is
+   * serializable.
+   *
+   * @param delegate the multimap for which an unmodifiable view is to be
+   *     returned
+   * @return an unmodifiable view of the specified multimap
+   */
+  public static <K, V> SetMultimap<K, V> unmodifiableSetMultimap(
+      SetMultimap<K, V> delegate) {
+    if (delegate instanceof UnmodifiableSetMultimap ||
+        delegate instanceof ImmutableSetMultimap) {
+      return delegate;
+    }
+    return new UnmodifiableSetMultimap<K, V>(delegate);
+  }
+
+  /**
+   * Simply returns its argument.
+   *
+   * @deprecated no need to use this
+   * @since 10.0
+   */
+  @Deprecated public static <K, V> SetMultimap<K, V> unmodifiableSetMultimap(
+      ImmutableSetMultimap<K, V> delegate) {
+    return checkNotNull(delegate);
+  }
+
+  /**
+   * Returns a synchronized (thread-safe) {@code SortedSetMultimap} backed by
+   * the specified multimap.
+   *
+   * <p>You must follow the warnings described in {@link #synchronizedMultimap}.
+   *
+   * <p>The returned multimap will be serializable if the specified multimap is
+   * serializable.
+   *
+   * @param multimap the multimap to be wrapped
+   * @return a synchronized view of the specified multimap
+   */
+  public static <K, V> SortedSetMultimap<K, V>
+      synchronizedSortedSetMultimap(SortedSetMultimap<K, V> multimap) {
+    return Synchronized.sortedSetMultimap(multimap, null);
+  }
+
+  /**
+   * Returns an unmodifiable view of the specified {@code SortedSetMultimap}.
+   * Query operations on the returned multimap "read through" to the specified
+   * multimap, and attempts to modify the returned multimap, either directly or
+   * through the multimap's views, result in an
+   * {@code UnsupportedOperationException}.
+   *
+   * <p>Note that the generated multimap's {@link Multimap#removeAll} and
+   * {@link Multimap#replaceValues} methods return collections that are
+   * modifiable.
+   *
+   * <p>The returned multimap will be serializable if the specified multimap is
+   * serializable.
+   *
+   * @param delegate the multimap for which an unmodifiable view is to be
+   *     returned
+   * @return an unmodifiable view of the specified multimap
+   */
+  public static <K, V> SortedSetMultimap<K, V> unmodifiableSortedSetMultimap(
+      SortedSetMultimap<K, V> delegate) {
+    if (delegate instanceof UnmodifiableSortedSetMultimap) {
+      return delegate;
+    }
+    return new UnmodifiableSortedSetMultimap<K, V>(delegate);
+  }
+
+  /**
+   * Returns a synchronized (thread-safe) {@code ListMultimap} backed by the
+   * specified multimap.
+   *
+   * <p>You must follow the warnings described in {@link #synchronizedMultimap}.
+   *
+   * @param multimap the multimap to be wrapped
+   * @return a synchronized view of the specified multimap
+   */
+  public static <K, V> ListMultimap<K, V> synchronizedListMultimap(
+      ListMultimap<K, V> multimap) {
+    return Synchronized.listMultimap(multimap, null);
+  }
+
+  /**
+   * Returns an unmodifiable view of the specified {@code ListMultimap}. Query
+   * operations on the returned multimap "read through" to the specified
+   * multimap, and attempts to modify the returned multimap, either directly or
+   * through the multimap's views, result in an
+   * {@code UnsupportedOperationException}.
+   *
+   * <p>Note that the generated multimap's {@link Multimap#removeAll} and
+   * {@link Multimap#replaceValues} methods return collections that are
+   * modifiable.
+   *
+   * <p>The returned multimap will be serializable if the specified multimap is
+   * serializable.
+   *
+   * @param delegate the multimap for which an unmodifiable view is to be
+   *     returned
+   * @return an unmodifiable view of the specified multimap
+   */
+  public static <K, V> ListMultimap<K, V> unmodifiableListMultimap(
+      ListMultimap<K, V> delegate) {
+    if (delegate instanceof UnmodifiableListMultimap ||
+        delegate instanceof ImmutableListMultimap) {
+      return delegate;
+    }
+    return new UnmodifiableListMultimap<K, V>(delegate);
+  }
+
+  /**
+   * Simply returns its argument.
+   *
+   * @deprecated no need to use this
+   * @since 10.0
+   */
+  @Deprecated public static <K, V> ListMultimap<K, V> unmodifiableListMultimap(
+      ImmutableListMultimap<K, V> delegate) {
+    return checkNotNull(delegate);
+  }
+
+  /**
+   * Returns an unmodifiable view of the specified collection, preserving the
+   * interface for instances of {@code SortedSet}, {@code Set}, {@code List} and
+   * {@code Collection}, in that order of preference.
+   *
+   * @param collection the collection for which to return an unmodifiable view
+   * @return an unmodifiable view of the collection
+   */
+  private static <V> Collection<V> unmodifiableValueCollection(
+      Collection<V> collection) {
+    if (collection instanceof SortedSet) {
+      return Collections.unmodifiableSortedSet((SortedSet<V>) collection);
+    } else if (collection instanceof Set) {
+      return Collections.unmodifiableSet((Set<V>) collection);
+    } else if (collection instanceof List) {
+      return Collections.unmodifiableList((List<V>) collection);
+    }
+    return Collections.unmodifiableCollection(collection);
+  }
+
+  /**
+   * Returns an unmodifiable view of the specified multimap {@code asMap} entry.
+   * The {@link Entry#setValue} operation throws an {@link
+   * UnsupportedOperationException}, and the collection returned by {@code
+   * getValue} is also an unmodifiable (type-preserving) view. This also has the
+   * side-effect of redefining equals to comply with the Map.Entry contract, and
+   * to avoid a possible nefarious implementation of equals.
+   *
+   * @param entry the entry for which to return an unmodifiable view
+   * @return an unmodifiable view of the entry
+   */
+  private static <K, V> Map.Entry<K, Collection<V>> unmodifiableAsMapEntry(
+      final Map.Entry<K, Collection<V>> entry) {
+    checkNotNull(entry);
+    return new AbstractMapEntry<K, Collection<V>>() {
+      @Override public K getKey() {
+        return entry.getKey();
+      }
+
+      @Override public Collection<V> getValue() {
+        return unmodifiableValueCollection(entry.getValue());
+      }
+    };
+  }
+
+  /**
+   * Returns an unmodifiable view of the specified collection of entries. The
+   * {@link Entry#setValue} operation throws an {@link
+   * UnsupportedOperationException}. If the specified collection is a {@code
+   * Set}, the returned collection is also a {@code Set}.
+   *
+   * @param entries the entries for which to return an unmodifiable view
+   * @return an unmodifiable view of the entries
+   */
+  private static <K, V> Collection<Entry<K, V>> unmodifiableEntries(
+      Collection<Entry<K, V>> entries) {
+    if (entries instanceof Set) {
+      return Maps.unmodifiableEntrySet((Set<Entry<K, V>>) entries);
+    }
+    return new Maps.UnmodifiableEntries<K, V>(
+        Collections.unmodifiableCollection(entries));
+  }
+
+  /**
+   * Returns an unmodifiable view of the specified set of {@code asMap} entries.
+   * The {@link Entry#setValue} operation throws an {@link
+   * UnsupportedOperationException}, as do any operations that attempt to modify
+   * the returned collection.
+   *
+   * @param asMapEntries the {@code asMap} entries for which to return an
+   *     unmodifiable view
+   * @return an unmodifiable view of the collection entries
+   */
+  private static <K, V> Set<Entry<K, Collection<V>>> unmodifiableAsMapEntries(
+      Set<Entry<K, Collection<V>>> asMapEntries) {
+    return new UnmodifiableAsMapEntries<K, V>(
+        Collections.unmodifiableSet(asMapEntries));
+  }
+
+  /** @see Multimaps#unmodifiableAsMapEntries */
+  static class UnmodifiableAsMapEntries<K, V>
+      extends ForwardingSet<Entry<K, Collection<V>>> {
+    private final Set<Entry<K, Collection<V>>> delegate;
+    UnmodifiableAsMapEntries(Set<Entry<K, Collection<V>>> delegate) {
+      this.delegate = delegate;
+    }
+
+    @Override protected Set<Entry<K, Collection<V>>> delegate() {
+      return delegate;
+    }
+
+    @Override public Iterator<Entry<K, Collection<V>>> iterator() {
+      final Iterator<Entry<K, Collection<V>>> iterator = delegate.iterator();
+      return new ForwardingIterator<Entry<K, Collection<V>>>() {
+        @Override protected Iterator<Entry<K, Collection<V>>> delegate() {
+          return iterator;
+        }
+        @Override public Entry<K, Collection<V>> next() {
+          return unmodifiableAsMapEntry(iterator.next());
+        }
+      };
+    }
+
+    @Override public Object[] toArray() {
+      return standardToArray();
+    }
+
+    @Override public <T> T[] toArray(T[] array) {
+      return standardToArray(array);
+    }
+
+    @Override public boolean contains(Object o) {
+      return Maps.containsEntryImpl(delegate(), o);
+    }
+
+    @Override public boolean containsAll(Collection<?> c) {
+      return standardContainsAll(c);
+    }
+
+    @Override public boolean equals(@Nullable Object object) {
+      return standardEquals(object);
+    }
+  }
+
+  /**
+   * Returns a multimap view of the specified map. The multimap is backed by the
+   * map, so changes to the map are reflected in the multimap, and vice versa.
+   * If the map is modified while an iteration over one of the multimap's
+   * collection views is in progress (except through the iterator's own {@code
+   * remove} operation, or through the {@code setValue} operation on a map entry
+   * returned by the iterator), the results of the iteration are undefined.
+   *
+   * <p>The multimap supports mapping removal, which removes the corresponding
+   * mapping from the map. It does not support any operations which might add
+   * mappings, such as {@code put}, {@code putAll} or {@code replaceValues}.
+   *
+   * <p>The returned multimap will be serializable if the specified map is
+   * serializable.
+   *
+   * @param map the backing map for the returned multimap view
+   */
+  public static <K, V> SetMultimap<K, V> forMap(Map<K, V> map) {
+    return new MapMultimap<K, V>(map);
+  }
+
+  /** @see Multimaps#forMap */
+  private static class MapMultimap<K, V>
+      implements SetMultimap<K, V>, Serializable {
+    final Map<K, V> map;
+    transient Map<K, Collection<V>> asMap;
+
+    MapMultimap(Map<K, V> map) {
+      this.map = checkNotNull(map);
+    }
+
+    @Override
+    public int size() {
+      return map.size();
+    }
+
+    @Override
+    public boolean isEmpty() {
+      return map.isEmpty();
+    }
+
+    @Override
+    public boolean containsKey(Object key) {
+      return map.containsKey(key);
+    }
+
+    @Override
+    public boolean containsValue(Object value) {
+      return map.containsValue(value);
+    }
+
+    @Override
+    public boolean containsEntry(Object key, Object value) {
+      return map.entrySet().contains(Maps.immutableEntry(key, value));
+    }
+
+    @Override
+    public Set<V> get(final K key) {
+      return new AbstractSet<V>() {
+        @Override public Iterator<V> iterator() {
+          return new Iterator<V>() {
+            int i;
+
+            @Override
+            public boolean hasNext() {
+              return (i == 0) && map.containsKey(key);
+            }
+
+            @Override
+            public V next() {
+              if (!hasNext()) {
+                throw new NoSuchElementException();
+              }
+              i++;
+              return map.get(key);
+            }
+
+            @Override
+            public void remove() {
+              checkState(i == 1);
+              i = -1;
+              map.remove(key);
+            }
+          };
+        }
+
+        @Override public int size() {
+          return map.containsKey(key) ? 1 : 0;
+        }
+      };
+    }
+
+    @Override
+    public boolean put(K key, V value) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public boolean putAll(K key, Iterable<? extends V> values) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public boolean putAll(Multimap<? extends K, ? extends V> multimap) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public Set<V> replaceValues(K key, Iterable<? extends V> values) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public boolean remove(Object key, Object value) {
+      return map.entrySet().remove(Maps.immutableEntry(key, value));
+    }
+
+    @Override
+    public Set<V> removeAll(Object key) {
+      Set<V> values = new HashSet<V>(2);
+      if (!map.containsKey(key)) {
+        return values;
+      }
+      values.add(map.remove(key));
+      return values;
+    }
+
+    @Override
+    public void clear() {
+      map.clear();
+    }
+
+    @Override
+    public Set<K> keySet() {
+      return map.keySet();
+    }
+
+    @Override
+    public Multiset<K> keys() {
+      return Multisets.forSet(map.keySet());
+    }
+
+    @Override
+    public Collection<V> values() {
+      return map.values();
+    }
+
+    @Override
+    public Set<Entry<K, V>> entries() {
+      return map.entrySet();
+    }
+
+    @Override
+    public Map<K, Collection<V>> asMap() {
+      Map<K, Collection<V>> result = asMap;
+      if (result == null) {
+        asMap = result = new AsMap();
+      }
+      return result;
+    }
+
+    @Override public boolean equals(@Nullable Object object) {
+      if (object == this) {
+        return true;
+      }
+      if (object instanceof Multimap) {
+        Multimap<?, ?> that = (Multimap<?, ?>) object;
+        return this.size() == that.size() && asMap().equals(that.asMap());
+      }
+      return false;
+    }
+
+    @Override public int hashCode() {
+      return map.hashCode();
+    }
+
+    private static final MapJoiner JOINER
+        = Joiner.on("], ").withKeyValueSeparator("=[").useForNull("null");
+
+    @Override public String toString() {
+      if (map.isEmpty()) {
+        return "{}";
+      }
+      StringBuilder builder
+          = Collections2.newStringBuilderForCollection(map.size()).append('{');
+      JOINER.appendTo(builder, map);
+      return builder.append("]}").toString();
+    }
+
+    /** @see MapMultimap#asMap */
+    class AsMapEntries extends AbstractSet<Entry<K, Collection<V>>> {
+      @Override public int size() {
+        return map.size();
+      }
+
+      @Override public Iterator<Entry<K, Collection<V>>> iterator() {
+        return new Iterator<Entry<K, Collection<V>>>() {
+          final Iterator<K> keys = map.keySet().iterator();
+
+          @Override
+          public boolean hasNext() {
+            return keys.hasNext();
+          }
+          @Override
+          public Entry<K, Collection<V>> next() {
+            final K key = keys.next();
+            return new AbstractMapEntry<K, Collection<V>>() {
+              @Override public K getKey() {
+                return key;
+              }
+              @Override public Collection<V> getValue() {
+                return get(key);
+              }
+            };
+          }
+          @Override
+          public void remove() {
+            keys.remove();
+          }
+        };
+      }
+
+      @Override public boolean contains(Object o) {
+        if (!(o instanceof Entry)) {
+          return false;
+        }
+        Entry<?, ?> entry = (Entry<?, ?>) o;
+        if (!(entry.getValue() instanceof Set)) {
+          return false;
+        }
+        Set<?> set = (Set<?>) entry.getValue();
+        return (set.size() == 1)
+            && containsEntry(entry.getKey(), set.iterator().next());
+      }
+
+      @Override public boolean remove(Object o) {
+        if (!(o instanceof Entry)) {
+          return false;
+        }
+        Entry<?, ?> entry = (Entry<?, ?>) o;
+        if (!(entry.getValue() instanceof Set)) {
+          return false;
+        }
+        Set<?> set = (Set<?>) entry.getValue();
+        return (set.size() == 1)
+            && map.entrySet().remove(
+                Maps.immutableEntry(entry.getKey(), set.iterator().next()));
+      }
+    }
+
+    /** @see MapMultimap#asMap */
+    class AsMap extends Maps.ImprovedAbstractMap<K, Collection<V>> {
+      @Override protected Set<Entry<K, Collection<V>>> createEntrySet() {
+        return new AsMapEntries();
+      }
+
+      // The following methods are included for performance.
+
+      @Override public boolean containsKey(Object key) {
+        return map.containsKey(key);
+      }
+
+      @SuppressWarnings("unchecked")
+      @Override public Collection<V> get(Object key) {
+        Collection<V> collection = MapMultimap.this.get((K) key);
+        return collection.isEmpty() ? null : collection;
+      }
+
+      @Override public Collection<V> remove(Object key) {
+        Collection<V> collection = removeAll(key);
+        return collection.isEmpty() ? null : collection;
+      }
+    }
+    private static final long serialVersionUID = 7845222491160860175L;
+  }
+
+  /**
+   * Returns a view of a multimap where each value is transformed by a function.
+   * All other properties of the multimap, such as iteration order, are left
+   * intact. For example, the code: <pre>   {@code
+   *
+   * Multimap<String, Integer> multimap =
+   *     ImmutableSetMultimap.of("a", 2, "b", -3, "b", -3, "a", 4, "c", 6);
+   * Function<Integer, String> square = new Function<Integer, String>() {
+   *     public String apply(Integer in) {
+   *       return Integer.toString(in * in);
+   *     }
+   * };
+   * Multimap<String, String> transformed =
+   *     Multimaps.transformValues(multimap, square);
+   *   System.out.println(transformed);}</pre>
+   *
+   * ... prints {@code {a=[4, 16], b=[9, 9], c=[6]}}.
+   *
+   * <p>Changes in the underlying multimap are reflected in this view.
+   * Conversely, this view supports removal operations, and these are reflected
+   * in the underlying multimap.
+   *
+   * <p>It's acceptable for the underlying multimap to contain null keys, and
+   * even null values provided that the function is capable of accepting null
+   * input.  The transformed multimap might contain null values, if the function
+   * sometimes gives a null result.
+   *
+   * <p>The returned multimap is not thread-safe or serializable, even if the
+   * underlying multimap is.  The {@code equals} and {@code hashCode} methods
+   * of the returned multimap are meaningless, since there is not a definition
+   * of {@code equals} or {@code hashCode} for general collections, and
+   * {@code get()} will return a general {@code Collection} as opposed to a
+   * {@code List} or a {@code Set}.
+   *
+   * <p>The function is applied lazily, invoked when needed. This is necessary
+   * for the returned multimap to be a view, but it means that the function will
+   * be applied many times for bulk operations like
+   * {@link Multimap#containsValue} and {@code Multimap.toString()}. For this to
+   * perform well, {@code function} should be fast. To avoid lazy evaluation
+   * when the returned multimap doesn't need to be a view, copy the returned
+   * multimap into a new multimap of your choosing.
+   *
+   * @since 7.0
+   */
+  @Beta
+  public static <K, V1, V2> Multimap<K, V2> transformValues(
+      Multimap<K, V1> fromMultimap, final Function<? super V1, V2> function) {
+    checkNotNull(function);
+    EntryTransformer<K, V1, V2> transformer =
+        new EntryTransformer<K, V1, V2>() {
+          @Override
+          public V2 transformEntry(K key, V1 value) {
+            return function.apply(value);
+          }
+        };
+    return transformEntries(fromMultimap, transformer);
+  }
+
+  /**
+   * Returns a view of a multimap whose values are derived from the original
+   * multimap's entries. In contrast to {@link #transformValues}, this method's
+   * entry-transformation logic may depend on the key as well as the value.
+   *
+   * <p>All other properties of the transformed multimap, such as iteration
+   * order, are left intact. For example, the code: <pre>   {@code
+   *
+   *   SetMultimap<String, Integer> multimap =
+   *       ImmutableSetMultimap.of("a", 1, "a", 4, "b", -6);
+   *   EntryTransformer<String, Integer, String> transformer =
+   *       new EntryTransformer<String, Integer, String>() {
+   *         public String transformEntry(String key, Integer value) {
+   *            return (value >= 0) ? key : "no" + key;
+   *         }
+   *       };
+   *   Multimap<String, String> transformed =
+   *       Multimaps.transformEntries(multimap, transformer);
+   *   System.out.println(transformed);}</pre>
+   *
+   * ... prints {@code {a=[a, a], b=[nob]}}.
+   *
+   * <p>Changes in the underlying multimap are reflected in this view.
+   * Conversely, this view supports removal operations, and these are reflected
+   * in the underlying multimap.
+   *
+   * <p>It's acceptable for the underlying multimap to contain null keys and
+   * null values provided that the transformer is capable of accepting null
+   * inputs. The transformed multimap might contain null values if the
+   * transformer sometimes gives a null result.
+   *
+   * <p>The returned multimap is not thread-safe or serializable, even if the
+   * underlying multimap is.  The {@code equals} and {@code hashCode} methods
+   * of the returned multimap are meaningless, since there is not a definition
+   * of {@code equals} or {@code hashCode} for general collections, and
+   * {@code get()} will return a general {@code Collection} as opposed to a
+   * {@code List} or a {@code Set}.
+   *
+   * <p>The transformer is applied lazily, invoked when needed. This is
+   * necessary for the returned multimap to be a view, but it means that the
+   * transformer will be applied many times for bulk operations like {@link
+   * Multimap#containsValue} and {@link Object#toString}. For this to perform
+   * well, {@code transformer} should be fast. To avoid lazy evaluation when the
+   * returned multimap doesn't need to be a view, copy the returned multimap
+   * into a new multimap of your choosing.
+   *
+   * <p><b>Warning:</b> This method assumes that for any instance {@code k} of
+   * {@code EntryTransformer} key type {@code K}, {@code k.equals(k2)} implies
+   * that {@code k2} is also of type {@code K}. Using an {@code
+   * EntryTransformer} key type for which this may not hold, such as {@code
+   * ArrayList}, may risk a {@code ClassCastException} when calling methods on
+   * the transformed multimap.
+   *
+   * @since 7.0
+   */
+  @Beta
+  public static <K, V1, V2> Multimap<K, V2> transformEntries(
+      Multimap<K, V1> fromMap,
+      EntryTransformer<? super K, ? super V1, V2> transformer) {
+    return new TransformedEntriesMultimap<K, V1, V2>(fromMap, transformer);
+  }
+
+  private static class TransformedEntriesMultimap<K, V1, V2>
+      implements Multimap<K, V2> {
+    final Multimap<K, V1> fromMultimap;
+    final EntryTransformer<? super K, ? super V1, V2> transformer;
+
+    TransformedEntriesMultimap(Multimap<K, V1> fromMultimap,
+        final EntryTransformer<? super K, ? super V1, V2> transformer) {
+      this.fromMultimap = checkNotNull(fromMultimap);
+      this.transformer = checkNotNull(transformer);
+    }
+
+    Collection<V2> transform(final K key, Collection<V1> values) {
+      return Collections2.transform(values, new Function<V1, V2>() {
+        @Override public V2 apply(V1 value) {
+          return transformer.transformEntry(key, value);
+        }
+      });
+    }
+
+    private transient Map<K, Collection<V2>> asMap;
+
+    @Override public Map<K, Collection<V2>> asMap() {
+      if (asMap == null) {
+        Map<K, Collection<V2>> aM = Maps.transformEntries(fromMultimap.asMap(),
+            new EntryTransformer<K, Collection<V1>, Collection<V2>>() {
+
+              @Override public Collection<V2> transformEntry(
+                  K key, Collection<V1> value) {
+                return transform(key, value);
+              }
+            });
+        asMap = aM;
+        return aM;
+      }
+      return asMap;
+    }
+
+    @Override public void clear() {
+      fromMultimap.clear();
+    }
+
+    @SuppressWarnings("unchecked")
+    @Override public boolean containsEntry(Object key, Object value) {
+      Collection<V2> values = get((K) key);
+      return values.contains(value);
+    }
+
+    @Override public boolean containsKey(Object key) {
+      return fromMultimap.containsKey(key);
+    }
+
+    @Override public boolean containsValue(Object value) {
+      return values().contains(value);
+    }
+
+    private transient Collection<Entry<K, V2>> entries;
+
+    @Override public Collection<Entry<K, V2>> entries() {
+      if (entries == null) {
+        Collection<Entry<K, V2>> es = new TransformedEntries(transformer);
+        entries = es;
+        return es;
+      }
+      return entries;
+    }
+
+    private class TransformedEntries
+        extends TransformedCollection<Entry<K, V1>, Entry<K, V2>> {
+
+      TransformedEntries(
+          final EntryTransformer<? super K, ? super V1, V2> transformer) {
+        super(fromMultimap.entries(),
+            new Function<Entry<K, V1>, Entry<K, V2>>() {
+              @Override public Entry<K, V2> apply(final Entry<K, V1> entry) {
+                return new AbstractMapEntry<K, V2>() {
+
+                  @Override public K getKey() {
+                    return entry.getKey();
+                  }
+
+                  @Override public V2 getValue() {
+                    return transformer.transformEntry(
+                        entry.getKey(), entry.getValue());
+                  }
+                };
+              }
+            });
+      }
+
+      @Override public boolean contains(Object o) {
+        if (o instanceof Entry) {
+          Entry<?, ?> entry = (Entry<?, ?>) o;
+          return containsEntry(entry.getKey(), entry.getValue());
+        }
+        return false;
+      }
+
+      @SuppressWarnings("unchecked")
+      @Override public boolean remove(Object o) {
+        if (o instanceof Entry) {
+          Entry<?, ?> entry = (Entry<?, ?>) o;
+          Collection<V2> values = get((K) entry.getKey());
+          return values.remove(entry.getValue());
+        }
+        return false;
+      }
+
+    }
+
+    @Override public Collection<V2> get(final K key) {
+      return transform(key, fromMultimap.get(key));
+    }
+
+    @Override public boolean isEmpty() {
+      return fromMultimap.isEmpty();
+    }
+
+    @Override public Set<K> keySet() {
+      return fromMultimap.keySet();
+    }
+
+    @Override public Multiset<K> keys() {
+      return fromMultimap.keys();
+    }
+
+    @Override public boolean put(K key, V2 value) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override public boolean putAll(K key, Iterable<? extends V2> values) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override public boolean putAll(
+        Multimap<? extends K, ? extends V2> multimap) {
+      throw new UnsupportedOperationException();
+    }
+
+    @SuppressWarnings("unchecked")
+    @Override public boolean remove(Object key, Object value) {
+      return get((K) key).remove(value);
+    }
+
+    @SuppressWarnings("unchecked")
+    @Override public Collection<V2> removeAll(Object key) {
+      return transform((K) key, fromMultimap.removeAll(key));
+    }
+
+    @Override public Collection<V2> replaceValues(
+        K key, Iterable<? extends V2> values) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override public int size() {
+      return fromMultimap.size();
+    }
+
+    private transient Collection<V2> values;
+
+    @Override public Collection<V2> values() {
+      if (values == null) {
+        Collection<V2> vs = Collections2.transform(
+            fromMultimap.entries(), new Function<Entry<K, V1>, V2>() {
+
+              @Override public V2 apply(Entry<K, V1> entry) {
+                return transformer.transformEntry(
+                    entry.getKey(), entry.getValue());
+              }
+            });
+        values = vs;
+        return vs;
+      }
+      return values;
+    }
+
+    @Override public boolean equals(Object obj) {
+      if (obj instanceof Multimap) {
+        Multimap<?, ?> other = (Multimap<?, ?>) obj;
+        return asMap().equals(other.asMap());
+      }
+      return false;
+    }
+
+    @Override public int hashCode() {
+      return asMap().hashCode();
+    }
+
+    @Override public String toString() {
+      return asMap().toString();
+    }
+  }
+
+  /**
+   * Returns a view of a {@code ListMultimap} where each value is transformed by
+   * a function. All other properties of the multimap, such as iteration order,
+   * are left intact. For example, the code: <pre>   {@code
+   *
+   *   ListMultimap<String, Integer> multimap
+   *        = ImmutableListMultimap.of("a", 4, "a", 16, "b", 9);
+   *   Function<Integer, Double> sqrt =
+   *       new Function<Integer, Double>() {
+   *         public Double apply(Integer in) {
+   *           return Math.sqrt((int) in);
+   *         }
+   *       };
+   *   ListMultimap<String, Double> transformed = Multimaps.transformValues(map,
+   *       sqrt);
+   *   System.out.println(transformed);}</pre>
+   *
+   * ... prints {@code {a=[2.0, 4.0], b=[3.0]}}.
+   *
+   * <p>Changes in the underlying multimap are reflected in this view.
+   * Conversely, this view supports removal operations, and these are reflected
+   * in the underlying multimap.
+   *
+   * <p>It's acceptable for the underlying multimap to contain null keys, and
+   * even null values provided that the function is capable of accepting null
+   * input.  The transformed multimap might contain null values, if the function
+   * sometimes gives a null result.
+   *
+   * <p>The returned multimap is not thread-safe or serializable, even if the
+   * underlying multimap is.
+   *
+   * <p>The function is applied lazily, invoked when needed. This is necessary
+   * for the returned multimap to be a view, but it means that the function will
+   * be applied many times for bulk operations like
+   * {@link Multimap#containsValue} and {@code Multimap.toString()}. For this to
+   * perform well, {@code function} should be fast. To avoid lazy evaluation
+   * when the returned multimap doesn't need to be a view, copy the returned
+   * multimap into a new multimap of your choosing.
+   *
+   * @since 7.0
+   */
+  @Beta
+  public static <K, V1, V2> ListMultimap<K, V2> transformValues(
+      ListMultimap<K, V1> fromMultimap,
+      final Function<? super V1, V2> function) {
+    checkNotNull(function);
+    EntryTransformer<K, V1, V2> transformer =
+        new EntryTransformer<K, V1, V2>() {
+          @Override
+          public V2 transformEntry(K key, V1 value) {
+            return function.apply(value);
+          }
+        };
+    return transformEntries(fromMultimap, transformer);
+  }
+
+  /**
+   * Returns a view of a {@code ListMultimap} whose values are derived from the
+   * original multimap's entries. In contrast to
+   * {@link #transformValues(ListMultimap, Function)}, this method's
+   * entry-transformation logic may depend on the key as well as the value.
+   *
+   * <p>All other properties of the transformed multimap, such as iteration
+   * order, are left intact. For example, the code: <pre>   {@code
+   *
+   *   Multimap<String, Integer> multimap =
+   *       ImmutableMultimap.of("a", 1, "a", 4, "b", 6);
+   *   EntryTransformer<String, Integer, String> transformer =
+   *       new EntryTransformer<String, Integer, String>() {
+   *         public String transformEntry(String key, Integer value) {
+   *           return key + value;
+   *         }
+   *       };
+   *   Multimap<String, String> transformed =
+   *       Multimaps.transformEntries(multimap, transformer);
+   *   System.out.println(transformed);}</pre>
+   *
+   * ... prints {@code {"a"=["a1", "a4"], "b"=["b6"]}}.
+   *
+   * <p>Changes in the underlying multimap are reflected in this view.
+   * Conversely, this view supports removal operations, and these are reflected
+   * in the underlying multimap.
+   *
+   * <p>It's acceptable for the underlying multimap to contain null keys and
+   * null values provided that the transformer is capable of accepting null
+   * inputs. The transformed multimap might contain null values if the
+   * transformer sometimes gives a null result.
+   *
+   * <p>The returned multimap is not thread-safe or serializable, even if the
+   * underlying multimap is.
+   *
+   * <p>The transformer is applied lazily, invoked when needed. This is
+   * necessary for the returned multimap to be a view, but it means that the
+   * transformer will be applied many times for bulk operations like {@link
+   * Multimap#containsValue} and {@link Object#toString}. For this to perform
+   * well, {@code transformer} should be fast. To avoid lazy evaluation when the
+   * returned multimap doesn't need to be a view, copy the returned multimap
+   * into a new multimap of your choosing.
+   *
+   * <p><b>Warning:</b> This method assumes that for any instance {@code k} of
+   * {@code EntryTransformer} key type {@code K}, {@code k.equals(k2)} implies
+   * that {@code k2} is also of type {@code K}. Using an {@code
+   * EntryTransformer} key type for which this may not hold, such as {@code
+   * ArrayList}, may risk a {@code ClassCastException} when calling methods on
+   * the transformed multimap.
+   *
+   * @since 7.0
+   */
+  @Beta
+  public static <K, V1, V2> ListMultimap<K, V2> transformEntries(
+      ListMultimap<K, V1> fromMap,
+      EntryTransformer<? super K, ? super V1, V2> transformer) {
+    return new TransformedEntriesListMultimap<K, V1, V2>(fromMap, transformer);
+  }
+
+  private static final class TransformedEntriesListMultimap<K, V1, V2>
+      extends TransformedEntriesMultimap<K, V1, V2>
+      implements ListMultimap<K, V2> {
+
+    TransformedEntriesListMultimap(ListMultimap<K, V1> fromMultimap,
+        EntryTransformer<? super K, ? super V1, V2> transformer) {
+      super(fromMultimap, transformer);
+    }
+
+    @Override List<V2> transform(final K key, Collection<V1> values) {
+      return Lists.transform((List<V1>) values, new Function<V1, V2>() {
+        @Override public V2 apply(V1 value) {
+          return transformer.transformEntry(key, value);
+        }
+      });
+    }
+
+    @Override public List<V2> get(K key) {
+      return transform(key, fromMultimap.get(key));
+    }
+
+    @SuppressWarnings("unchecked")
+    @Override public List<V2> removeAll(Object key) {
+      return transform((K) key, fromMultimap.removeAll(key));
+    }
+
+    @Override public List<V2> replaceValues(
+        K key, Iterable<? extends V2> values) {
+      throw new UnsupportedOperationException();
+    }
+  }
+
+  /**
+   * Creates an index {@code ImmutableListMultimap} that contains the results of
+   * applying a specified function to each item in an {@code Iterable} of
+   * values. Each value will be stored as a value in the resulting multimap,
+   * yielding a multimap with the same size as the input iterable. The key used
+   * to store that value in the multimap will be the result of calling the
+   * function on that value. The resulting multimap is created as an immutable
+   * snapshot. In the returned multimap, keys appear in the order they are first
+   * encountered, and the values corresponding to each key appear in the same
+   * order as they are encountered.
+   *
+   * <p>For example, <pre>   {@code
+   *
+   *   List<String> badGuys =
+   *       Arrays.asList("Inky", "Blinky", "Pinky", "Pinky", "Clyde");
+   *   Function<String, Integer> stringLengthFunction = ...;
+   *   Multimap<Integer, String> index =
+   *       Multimaps.index(badGuys, stringLengthFunction);
+   *   System.out.println(index);}</pre>
+   *
+   * prints <pre>   {@code
+   *
+   *   {4=[Inky], 6=[Blinky], 5=[Pinky, Pinky, Clyde]}}</pre>
+   *
+   * The returned multimap is serializable if its keys and values are all
+   * serializable.
+   *
+   * @param values the values to use when constructing the {@code
+   *     ImmutableListMultimap}
+   * @param keyFunction the function used to produce the key for each value
+   * @return {@code ImmutableListMultimap} mapping the result of evaluating the
+   *     function {@code keyFunction} on each value in the input collection to
+   *     that value
+   * @throws NullPointerException if any of the following cases is true:
+   *     <ul>
+   *     <li>{@code values} is null
+   *     <li>{@code keyFunction} is null
+   *     <li>An element in {@code values} is null
+   *     <li>{@code keyFunction} returns {@code null} for any element of {@code
+   *         values}
+   *     </ul>
+   */
+  public static <K, V> ImmutableListMultimap<K, V> index(
+      Iterable<V> values, Function<? super V, K> keyFunction) {
+    return index(values.iterator(), keyFunction);
+  }
+
+  /**
+   * <b>Deprecated.</b>
+   *
+   * @since 10.0
+   * @deprecated use {@link #index(Iterator, Function)} by casting {@code
+   *     values} to {@code Iterator<V>}, or better yet, by implementing only
+   *     {@code Iterator} and not {@code Iterable}. <b>This method is scheduled
+   *     for deletion in March 2012.</b>
+   */
+  @Beta
+  @Deprecated
+  public static <K, V, I extends Object & Iterable<V> & Iterator<V>>
+      ImmutableListMultimap<K, V> index(
+          I values, Function<? super V, K> keyFunction) {
+    Iterable<V> valuesIterable = checkNotNull(values);
+    return index(valuesIterable, keyFunction);
+  }
+
+  /**
+   * Creates an index {@code ImmutableListMultimap} that contains the results of
+   * applying a specified function to each item in an {@code Iterator} of
+   * values. Each value will be stored as a value in the resulting multimap,
+   * yielding a multimap with the same size as the input iterator. The key used
+   * to store that value in the multimap will be the result of calling the
+   * function on that value. The resulting multimap is created as an immutable
+   * snapshot. In the returned multimap, keys appear in the order they are first
+   * encountered, and the values corresponding to each key appear in the same
+   * order as they are encountered.
+   *
+   * <p>For example, <pre>   {@code
+   *
+   *   List<String> badGuys =
+   *       Arrays.asList("Inky", "Blinky", "Pinky", "Pinky", "Clyde");
+   *   Function<String, Integer> stringLengthFunction = ...;
+   *   Multimap<Integer, String> index =
+   *       Multimaps.index(badGuys.iterator(), stringLengthFunction);
+   *   System.out.println(index);}</pre>
+   *
+   * prints <pre>   {@code
+   *
+   *   {4=[Inky], 6=[Blinky], 5=[Pinky, Pinky, Clyde]}}</pre>
+   *
+   * The returned multimap is serializable if its keys and values are all
+   * serializable.
+   *
+   * @param values the values to use when constructing the {@code
+   *     ImmutableListMultimap}
+   * @param keyFunction the function used to produce the key for each value
+   * @return {@code ImmutableListMultimap} mapping the result of evaluating the
+   *     function {@code keyFunction} on each value in the input collection to
+   *     that value
+   * @throws NullPointerException if any of the following cases is true:
+   *     <ul>
+   *     <li>{@code values} is null
+   *     <li>{@code keyFunction} is null
+   *     <li>An element in {@code values} is null
+   *     <li>{@code keyFunction} returns {@code null} for any element of {@code
+   *         values}
+   *     </ul>
+   * @since 10.0
+   */
+  public static <K, V> ImmutableListMultimap<K, V> index(
+      Iterator<V> values, Function<? super V, K> keyFunction) {
+    checkNotNull(keyFunction);
+    ImmutableListMultimap.Builder<K, V> builder
+        = ImmutableListMultimap.builder();
+    while (values.hasNext()) {
+      V value = values.next();
+      checkNotNull(value, values);
+      builder.put(keyFunction.apply(value), value);
+    }
+    return builder.build();
+  }
+
+  static abstract class Keys<K, V> extends AbstractMultiset<K> {
+    abstract Multimap<K, V> multimap();
+
+    @Override Iterator<Multiset.Entry<K>> entryIterator() {
+      final Iterator<Map.Entry<K, Collection<V>>> backingIterator =
+          multimap().asMap().entrySet().iterator();
+      return new Iterator<Multiset.Entry<K>>() {
+        @Override public boolean hasNext() {
+          return backingIterator.hasNext();
+        }
+
+        @Override public Multiset.Entry<K> next() {
+          final Map.Entry<K, Collection<V>> backingEntry =
+              backingIterator.next();
+          return new Multisets.AbstractEntry<K>() {
+            @Override public K getElement() {
+              return backingEntry.getKey();
+            }
+
+            @Override public int getCount() {
+              return backingEntry.getValue().size();
+            }
+          };
+        }
+
+        @Override public void remove() {
+          backingIterator.remove();
+        }
+      };
+    }
+
+    @Override int distinctElements() {
+      return multimap().asMap().size();
+    }
+
+    @Override Set<Multiset.Entry<K>> createEntrySet() {
+      return new KeysEntrySet();
+    }
+
+    class KeysEntrySet extends Multisets.EntrySet<K> {
+      @Override Multiset<K> multiset() {
+        return Keys.this;
+      }
+
+      @Override public Iterator<Multiset.Entry<K>> iterator() {
+        return entryIterator();
+      }
+
+      @Override public int size() {
+        return distinctElements();
+      }
+
+      @Override public boolean isEmpty() {
+        return multimap().isEmpty();
+      }
+
+      @Override public boolean contains(@Nullable Object o) {
+        if (o instanceof Multiset.Entry<?>) {
+          Multiset.Entry<?> entry = (Multiset.Entry<?>) o;
+          Collection<V> collection = multimap().asMap().get(entry.getElement());
+          return collection != null && collection.size() == entry.getCount();
+        }
+        return false;
+      }
+
+      @Override public boolean remove(@Nullable Object o) {
+        if (o instanceof Multiset.Entry<?>) {
+          Multiset.Entry<?> entry = (Multiset.Entry<?>) o;
+          Collection<V> collection = multimap().asMap().get(entry.getElement());
+          if (collection != null && collection.size() == entry.getCount()) {
+            collection.clear();
+            return true;
+          }
+        }
+        return false;
+      }
+    }
+
+    @Override public boolean contains(@Nullable Object element) {
+      return multimap().containsKey(element);
+    }
+
+    @Override public Iterator<K> iterator() {
+      return Iterators.transform(multimap().entries().iterator(),
+          new Function<Map.Entry<K, V>, K>() {
+            @Override public K apply(Map.Entry<K, V> entry) {
+              return entry.getKey();
+            }
+          });
+    }
+
+    @Override public int count(@Nullable Object element) {
+      try {
+        if (multimap().containsKey(element)) {
+          Collection<V> values = multimap().asMap().get(element);
+          return (values == null) ? 0 : values.size();
+        }
+        return 0;
+      } catch (ClassCastException e) {
+        return 0;
+      } catch (NullPointerException e) {
+        return 0;
+      }
+    }
+
+    @Override public int remove(@Nullable Object element, int occurrences) {
+      checkArgument(occurrences >= 0);
+      if (occurrences == 0) {
+        return count(element);
+      }
+
+      Collection<V> values;
+      try {
+        values = multimap().asMap().get(element);
+      } catch (ClassCastException e) {
+        return 0;
+      } catch (NullPointerException e) {
+        return 0;
+      }
+
+      if (values == null) {
+        return 0;
+      }
+
+      int oldCount = values.size();
+      if (occurrences >= oldCount) {
+        values.clear();
+      } else {
+        Iterator<V> iterator = values.iterator();
+        for (int i = 0; i < occurrences; i++) {
+          iterator.next();
+          iterator.remove();
+        }
+      }
+      return oldCount;
+    }
+
+    @Override public void clear() {
+      multimap().clear();
+    }
+
+    @Override public Set<K> elementSet() {
+      return multimap().keySet();
+    }
+  }
+
+  static abstract class Values<K, V> extends AbstractCollection<V> {
+    abstract Multimap<K, V> multimap();
+
+    @Override public Iterator<V> iterator() {
+      final Iterator<Map.Entry<K, V>> backingIterator =
+          multimap().entries().iterator();
+      return new Iterator<V>() {
+        @Override public boolean hasNext() {
+          return backingIterator.hasNext();
+        }
+
+        @Override public V next() {
+          return backingIterator.next().getValue();
+        }
+
+        @Override public void remove() {
+          backingIterator.remove();
+        }
+      };
+    }
+
+    @Override public int size() {
+      return multimap().size();
+    }
+
+    @Override public boolean contains(@Nullable Object o) {
+      return multimap().containsValue(o);
+    }
+
+    @Override public void clear() {
+      multimap().clear();
+    }
+  }
+
+  /**
+   * A skeleton implementation of {@link Multimap#entries()}.
+   */
+  static abstract class Entries<K, V> extends
+      AbstractCollection<Map.Entry<K, V>> {
+    abstract Multimap<K, V> multimap();
+
+    @Override public int size() {
+      return multimap().size();
+    }
+
+    @Override public boolean contains(@Nullable Object o) {
+      if (o instanceof Map.Entry<?, ?>) {
+        Map.Entry<?, ?> entry = (Map.Entry<?, ?>) o;
+        return multimap().containsEntry(entry.getKey(), entry.getValue());
+      }
+      return false;
+    }
+
+    @Override public boolean remove(@Nullable Object o) {
+      if (o instanceof Map.Entry<?, ?>) {
+        Map.Entry<?, ?> entry = (Map.Entry<?, ?>) o;
+        return multimap().remove(entry.getKey(), entry.getValue());
+      }
+      return false;
+    }
+
+    @Override public void clear() {
+      multimap().clear();
+    }
+  }
+
+  /**
+   * A skeleton implementation of {@link SetMultimap#entries()}.
+   */
+  static abstract class EntrySet<K, V> extends Entries<K, V> implements
+      Set<Map.Entry<K, V>> {
+    @Override public int hashCode() {
+      return Sets.hashCodeImpl(this);
+    }
+
+    @Override public boolean equals(@Nullable Object obj) {
+      return Sets.equalsImpl(this, obj);
+    }
+  }
+
+  /**
+   * A skeleton implementation of {@link Multimap#asMap()}.
+   */
+  static abstract class AsMap<K, V> extends
+      Maps.ImprovedAbstractMap<K, Collection<V>> {
+    abstract Multimap<K, V> multimap();
+
+    @Override public abstract int size();
+
+    abstract Iterator<Entry<K, Collection<V>>> entryIterator();
+
+    @Override protected Set<Entry<K, Collection<V>>> createEntrySet() {
+      return new EntrySet();
+    }
+
+    void removeValuesForKey(Object key){
+      multimap().removeAll(key);
+    }
+
+    class EntrySet extends Maps.EntrySet<K, Collection<V>> {
+      @Override Map<K, Collection<V>> map() {
+        return AsMap.this;
+      }
+
+      @Override public Iterator<Entry<K, Collection<V>>> iterator() {
+        return entryIterator();
+      }
+
+      @Override public boolean remove(Object o) {
+        if (!contains(o)) {
+          return false;
+        }
+        Map.Entry<?, ?> entry = (Map.Entry<?, ?>) o;
+        removeValuesForKey(entry.getKey());
+        return true;
+      }
+    }
+
+    @SuppressWarnings("unchecked")
+    @Override public Collection<V> get(Object key) {
+      return containsKey(key) ? multimap().get((K) key) : null;
+    }
+
+    @Override public Collection<V> remove(Object key) {
+      return containsKey(key) ? multimap().removeAll(key) : null;
+    }
+
+    @Override public Set<K> keySet() {
+      return multimap().keySet();
+    }
+
+    @Override public boolean isEmpty() {
+      return multimap().isEmpty();
+    }
+
+    @Override public boolean containsKey(Object key) {
+      return multimap().containsKey(key);
+    }
+
+    @Override public void clear() {
+      multimap().clear();
+    }
+  }
+
+  /**
+   * Support removal operations when filtering a filtered multimap. Since a
+   * filtered multimap has iterators that don't support remove, passing one to
+   * the FilteredMultimap constructor would lead to a multimap whose removal
+   * operations would fail. This method combines the predicates to avoid that
+   * problem.
+   */
+  private static <K, V> Multimap<K, V> filterFiltered(FilteredMultimap<K, V> map,
+      Predicate<? super Entry<K, V>> entryPredicate) {
+    Predicate<Entry<K, V>> predicate
+        = Predicates.and(map.predicate, entryPredicate);
+    return new FilteredMultimap<K, V>(map.unfiltered, predicate);
+  }
+
+  private static class FilteredMultimap<K, V> implements Multimap<K, V> {
+    final Multimap<K, V> unfiltered;
+    final Predicate<? super Entry<K, V>> predicate;
+
+    FilteredMultimap(Multimap<K, V> unfiltered, Predicate<? super Entry<K, V>> predicate) {
+      this.unfiltered = unfiltered;
+      this.predicate = predicate;
+    }
+
+    @Override public int size() {
+      return entries().size();
+    }
+
+    @Override public boolean isEmpty() {
+      return entries().isEmpty();
+    }
+
+    @Override public boolean containsKey(Object key) {
+      return asMap().containsKey(key);
+    }
+
+    @Override public boolean containsValue(Object value) {
+      return values().contains(value);
+    }
+
+    // This method should be called only when key is a K and value is a V.
+    @SuppressWarnings("unchecked")
+    boolean satisfiesPredicate(Object key, Object value) {
+      return predicate.apply(Maps.immutableEntry((K) key, (V) value));
+    }
+
+    @Override public boolean containsEntry(Object key, Object value) {
+      return unfiltered.containsEntry(key, value) && satisfiesPredicate(key, value);
+    }
+
+    @Override public boolean put(K key, V value) {
+      checkArgument(satisfiesPredicate(key, value));
+      return unfiltered.put(key, value);
+    }
+
+    @Override public boolean remove(Object key, Object value) {
+      return containsEntry(key, value) ? unfiltered.remove(key, value) : false;
+    }
+
+    @Override public boolean putAll(K key, Iterable<? extends V> values) {
+      for (V value : values) {
+        checkArgument(satisfiesPredicate(key, value));
+      }
+      return unfiltered.putAll(key, values);
+    }
+
+    @Override public boolean putAll(Multimap<? extends K, ? extends V> multimap) {
+      for (Entry<? extends K, ? extends V> entry : multimap.entries()) {
+        checkArgument(satisfiesPredicate(entry.getKey(), entry.getValue()));
+      }
+      return unfiltered.putAll(multimap);
+    }
+
+    @Override public Collection<V> replaceValues(K key, Iterable<? extends V> values) {
+      for (V value : values) {
+        checkArgument(satisfiesPredicate(key, value));
+      }
+      // Not calling unfiltered.replaceValues() since values that don't satisify
+      // the filter should remain in the multimap.
+      Collection<V> oldValues = removeAll(key);
+      unfiltered.putAll(key, values);
+      return oldValues;
+    }
+
+    @Override public Collection<V> removeAll(Object key) {
+      List<V> removed = Lists.newArrayList();
+      Collection<V> values = unfiltered.asMap().get(key);
+      if (values != null) {
+        Iterator<V> iterator = values.iterator();
+        while (iterator.hasNext()) {
+          V value = iterator.next();
+          if (satisfiesPredicate(key, value)) {
+            removed.add(value);
+            iterator.remove();
+          }
+        }
+      }
+      if (unfiltered instanceof SetMultimap) {
+        return Collections.unmodifiableSet(Sets.newLinkedHashSet(removed));
+      } else {
+        return Collections.unmodifiableList(removed);
+      }
+    }
+
+    @Override public void clear() {
+      entries().clear();
+    }
+
+    @Override public boolean equals(@Nullable Object object) {
+      if (object == this) {
+        return true;
+      }
+      if (object instanceof Multimap) {
+        Multimap<?, ?> that = (Multimap<?, ?>) object;
+        return asMap().equals(that.asMap());
+      }
+      return false;
+    }
+
+    @Override public int hashCode() {
+      return asMap().hashCode();
+    }
+
+    @Override public String toString() {
+      return asMap().toString();
+    }
+
+    class ValuePredicate implements Predicate<V> {
+      final K key;
+      ValuePredicate(K key) {
+        this.key = key;
+      }
+      @Override public boolean apply(V value) {
+        return satisfiesPredicate(key, value);
+      }
+    }
+
+    Collection<V> filterCollection(Collection<V> collection, Predicate<V> predicate) {
+      if (collection instanceof Set) {
+        return Sets.filter((Set<V>) collection, predicate);
+      } else {
+        return Collections2.filter(collection, predicate);
+      }
+    }
+
+    @Override public Collection<V> get(K key) {
+      return filterCollection(unfiltered.get(key), new ValuePredicate(key));
+    }
+
+    @Override public Set<K> keySet() {
+      return asMap().keySet();
+    }
+
+    Collection<V> values;
+
+    @Override public Collection<V> values() {
+      return (values == null) ? values = new Values() : values;
+    }
+
+    class Values extends Multimaps.Values<K, V> {
+      @Override Multimap<K, V> multimap() {
+        return FilteredMultimap.this;
+      }
+
+      @Override public boolean contains(@Nullable Object o) {
+        return Iterators.contains(iterator(), o);
+      }
+
+      // Override remove methods since iterator doesn't support remove.
+
+      @Override public boolean remove(Object o) {
+        Iterator<Entry<K, V>> iterator = unfiltered.entries().iterator();
+        while (iterator.hasNext()) {
+          Entry<K, V> entry = iterator.next();
+          if (Objects.equal(o, entry.getValue()) && predicate.apply(entry)) {
+            iterator.remove();
+            return true;
+          }
+        }
+        return false;
+      }
+
+      @Override public boolean removeAll(Collection<?> c) {
+        boolean changed = false;
+        Iterator<Entry<K, V>> iterator = unfiltered.entries().iterator();
+        while (iterator.hasNext()) {
+          Entry<K, V> entry = iterator.next();
+          if (c.contains(entry.getValue()) && predicate.apply(entry)) {
+            iterator.remove();
+            changed = true;
+          }
+        }
+        return changed;
+      }
+
+      @Override public boolean retainAll(Collection<?> c) {
+        boolean changed = false;
+        Iterator<Entry<K, V>> iterator = unfiltered.entries().iterator();
+        while (iterator.hasNext()) {
+          Entry<K, V> entry = iterator.next();
+          if (!c.contains(entry.getValue()) && predicate.apply(entry)) {
+            iterator.remove();
+            changed = true;
+          }
+        }
+        return changed;
+      }
+    }
+
+    Collection<Entry<K, V>> entries;
+
+    @Override public Collection<Entry<K, V>> entries() {
+      return (entries == null)
+          ? entries = Collections2.filter(unfiltered.entries(), predicate)
+          : entries;
+    }
+
+    /**
+     * Remove all filtered asMap() entries that satisfy the predicate.
+     */
+    boolean removeEntriesIf(Predicate<Map.Entry<K, Collection<V>>> removalPredicate) {
+      Iterator<Map.Entry<K, Collection<V>>> iterator = unfiltered.asMap().entrySet().iterator();
+      boolean changed = false;
+      while (iterator.hasNext()) {
+        // Determine whether to remove the filtered values with this key.
+        Map.Entry<K, Collection<V>> entry = iterator.next();
+        K key = entry.getKey();
+        Collection<V> collection = entry.getValue();
+        Predicate<V> valuePredicate = new ValuePredicate(key);
+        Collection<V> filteredCollection = filterCollection(collection, valuePredicate);
+        Map.Entry<K, Collection<V>> filteredEntry = Maps.immutableEntry(key, filteredCollection);
+        if (removalPredicate.apply(filteredEntry) && !filteredCollection.isEmpty()) {
+          changed = true;
+          if (Iterables.all(collection, valuePredicate)) {
+            iterator.remove();  // Remove all values for the key.
+          } else {
+            filteredCollection.clear();  // Remove the filtered values only.
+          }
+        }
+      }
+      return changed;
+    }
+
+    Map<K, Collection<V>> asMap;
+
+    @Override public Map<K, Collection<V>> asMap() {
+      return (asMap == null) ? asMap = createAsMap() : asMap;
+    }
+
+    static final Predicate<Collection<?>> NOT_EMPTY = new Predicate<Collection<?>>() {
+      @Override public boolean apply(Collection<?> input) {
+        return !input.isEmpty();
+      }
+    };
+
+    Map<K, Collection<V>> createAsMap() {
+      // Select the values that satisify the predicate.
+      EntryTransformer<K, Collection<V>, Collection<V>> transformer
+          = new EntryTransformer<K, Collection<V>, Collection<V>>() {
+            @Override public Collection<V> transformEntry(K key, Collection<V> collection) {
+              return filterCollection(collection, new ValuePredicate(key));
+            }
+      };
+      Map<K, Collection<V>> transformed
+          = Maps.transformEntries(unfiltered.asMap(), transformer);
+
+      // Select the keys that have at least one value remaining.
+      Map<K, Collection<V>> filtered = Maps.filterValues(transformed, NOT_EMPTY);
+
+      // Override the removal methods, since removing a map entry should not
+      // affect values that don't satisfy the filter.
+      return new AsMap(filtered);
+    }
+
+    class AsMap extends ForwardingMap<K, Collection<V>> {
+     final Map<K, Collection<V>> delegate;
+
+      AsMap(Map<K, Collection<V>> delegate) {
+        this.delegate = delegate;
+      }
+
+      @Override protected Map<K, Collection<V>> delegate() {
+        return delegate;
+      }
+
+      @Override public Collection<V> remove(Object o) {
+        Collection<V> output = FilteredMultimap.this.removeAll(o);
+        return output.isEmpty() ? null : output;
+      }
+
+      @Override public void clear() {
+        FilteredMultimap.this.clear();
+      }
+
+      Set<K> keySet;
+
+      @Override public Set<K> keySet() {
+        return (keySet == null) ? keySet = new KeySet() : keySet;
+      }
+
+      class KeySet extends Maps.KeySet<K, Collection<V>> {
+        @Override Map<K, Collection<V>> map() {
+          return AsMap.this;
+        }
+
+        @Override public boolean remove(Object o) {
+           Collection<V> collection = delegate.get(o);
+           if (collection == null) {
+             return false;
+           }
+           collection.clear();
+           return true;
+        }
+
+        @Override public boolean removeAll(Collection<?> c) {
+          return Sets.removeAllImpl(this, c);
+        }
+
+        @Override public boolean retainAll(final Collection<?> c) {
+          Predicate<Map.Entry<K, Collection<V>>> removalPredicate
+              = new Predicate<Map.Entry<K, Collection<V>>>() {
+                @Override public boolean apply(Map.Entry<K, Collection<V>> entry) {
+                  return !c.contains(entry.getKey());
+                }
+              };
+          return removeEntriesIf(removalPredicate);
+        }
+      }
+
+      Values asMapValues;
+
+      @Override public Collection<Collection<V>> values() {
+        return (asMapValues == null) ? asMapValues = new Values() : asMapValues;
+      }
+
+      class Values extends Maps.Values<K, Collection<V>> {
+        @Override Map<K, Collection<V>> map() {
+          return AsMap.this;
+        }
+
+        @Override public boolean remove(Object o) {
+          for (Collection<V> collection : this) {
+            if (collection.equals(o)) {
+              collection.clear();
+              return true;
+            }
+          }
+          return false;
+        }
+
+        @Override public boolean removeAll(final Collection<?> c) {
+          Predicate<Map.Entry<K, Collection<V>>> removalPredicate
+              = new Predicate<Map.Entry<K, Collection<V>>>() {
+                @Override public boolean apply(Map.Entry<K, Collection<V>> entry) {
+                  return c.contains(entry.getValue());
+                }
+              };
+          return removeEntriesIf(removalPredicate);
+        }
+
+        @Override public boolean retainAll(final Collection<?> c) {
+          Predicate<Map.Entry<K, Collection<V>>> removalPredicate
+              = new Predicate<Map.Entry<K, Collection<V>>>() {
+                @Override public boolean apply(Map.Entry<K, Collection<V>> entry) {
+                  return !c.contains(entry.getValue());
+                }
+              };
+          return removeEntriesIf(removalPredicate);
+        }
+      }
+
+      EntrySet entrySet;
+
+      @Override public Set<Map.Entry<K, Collection<V>>> entrySet() {
+        return (entrySet == null) ? entrySet = new EntrySet(super.entrySet()) : entrySet;
+      }
+
+      class EntrySet extends Maps.EntrySet<K, Collection<V>> {
+        Set<Map.Entry<K, Collection<V>>> delegateEntries;
+
+        public EntrySet(Set<Map.Entry<K, Collection<V>>> delegateEntries) {
+          this.delegateEntries = delegateEntries;
+        }
+
+        @Override Map<K, Collection<V>> map() {
+          return AsMap.this;
+        }
+
+        @Override public Iterator<Map.Entry<K, Collection<V>>> iterator() {
+          return delegateEntries.iterator();
+        }
+
+        @Override public boolean remove(Object o) {
+          if (o instanceof Entry<?, ?>) {
+            Entry<?, ?> entry = (Entry<?, ?>) o;
+            Collection<V> collection = delegate.get(entry.getKey());
+            if (collection != null && collection.equals(entry.getValue())) {
+              collection.clear();
+              return true;
+            }
+          }
+          return false;
+        }
+
+        @Override public boolean removeAll(Collection<?> c) {
+          return Sets.removeAllImpl(this, c);
+        }
+
+        @Override public boolean retainAll(final Collection<?> c) {
+          Predicate<Map.Entry<K, Collection<V>>> removalPredicate
+              = new Predicate<Map.Entry<K, Collection<V>>>() {
+                @Override public boolean apply(Map.Entry<K, Collection<V>> entry) {
+                  return !c.contains(entry);
+                }
+              };
+          return removeEntriesIf(removalPredicate);
+        }
+      }
+    }
+
+    AbstractMultiset<K> keys;
+
+    @Override public Multiset<K> keys() {
+      return (keys == null) ? keys = new Keys() : keys;
+    }
+
+    class Keys extends Multimaps.Keys<K, V> {
+      @Override Multimap<K, V> multimap() {
+        return FilteredMultimap.this;
+      }
+
+      @Override public int remove(Object o, int occurrences) {
+        checkArgument(occurrences >= 0);
+        Collection<V> values = unfiltered.asMap().get(o);
+        if (values == null) {
+          return 0;
+        }
+        int priorCount = 0;
+        int removed = 0;
+        Iterator<V> iterator = values.iterator();
+        while (iterator.hasNext()) {
+          if (satisfiesPredicate(o, iterator.next())) {
+            priorCount++;
+            if (removed < occurrences) {
+              iterator.remove();
+              removed++;
+            }
+          }
+        }
+        return priorCount;
+      }
+
+      @Override Set<Multiset.Entry<K>> createEntrySet() {
+        return new EntrySet();
+      }
+
+      class EntrySet extends Multimaps.Keys<K, V>.KeysEntrySet {
+        @Override public boolean removeAll(Collection<?> c) {
+          return Sets.removeAllImpl(this, c);
+        }
+
+        @Override public boolean retainAll(final Collection<?> c) {
+          Predicate<Map.Entry<K, Collection<V>>> removalPredicate
+              = new Predicate<Map.Entry<K, Collection<V>>>() {
+                @Override public boolean apply(Map.Entry<K, Collection<V>> entry) {
+                  Multiset.Entry<K> multisetEntry
+                      = Multisets.immutableEntry(entry.getKey(), entry.getValue().size());
+                  return !c.contains(multisetEntry);
+                }
+              };
+          return removeEntriesIf(removalPredicate);
+        }
+      }
+    }
+  }
+
+  // TODO(jlevy): Create methods that filter a SetMultimap or SortedSetMultimap.
+}
+
diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ObjectArrays.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ObjectArrays.java
new file mode 100644
index 0000000..087fd17
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ObjectArrays.java
@@ -0,0 +1,156 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Collection;
+
+import javax.annotation.Nullable;
+
+/**
+ * Static utility methods pertaining to object arrays.
+ *
+ * @author Kevin Bourrillion
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible(emulated = true)
+public final class ObjectArrays {
+  private ObjectArrays() {}
+
+  /**
+   * Returns a new array of the given length with the same type as a reference
+   * array.
+   *
+   * @param reference any array of the desired type
+   * @param length the length of the new array
+   */
+  public static <T> T[] newArray(T[] reference, int length) {
+    return Platform.newArray(reference, length);
+  }
+
+  /**
+   * Returns a new array that prepends {@code element} to {@code array}.
+   *
+   * @param element the element to prepend to the front of {@code array}
+   * @param array the array of elements to append
+   * @return an array whose size is one larger than {@code array}, with
+   *     {@code element} occupying the first position, and the
+   *     elements of {@code array} occupying the remaining elements.
+   */
+  public static <T> T[] concat(@Nullable T element, T[] array) {
+    T[] result = newArray(array, array.length + 1);
+    result[0] = element;
+    Platform.unsafeArrayCopy(array, 0, result, 1, array.length);
+    return result;
+  }
+
+  /**
+   * Returns a new array that appends {@code element} to {@code array}.
+   *
+   * @param array the array of elements to prepend
+   * @param element the element to append to the end
+   * @return an array whose size is one larger than {@code array}, with
+   *     the same contents as {@code array}, plus {@code element} occupying the
+   *     last position.
+   */
+  public static <T> T[] concat(T[] array, @Nullable T element) {
+    T[] result = arraysCopyOf(array, array.length + 1);
+    result[array.length] = element;
+    return result;
+  }
+
+  /** GWT safe version of Arrays.copyOf. */
+  static <T> T[] arraysCopyOf(T[] original, int newLength) {
+    T[] copy = newArray(original, newLength);
+    Platform.unsafeArrayCopy(
+        original, 0, copy, 0, Math.min(original.length, newLength));
+    return copy;
+  }
+
+  /**
+   * Returns an array containing all of the elements in the specified
+   * collection; the runtime type of the returned array is that of the specified
+   * array. If the collection fits in the specified array, it is returned
+   * therein. Otherwise, a new array is allocated with the runtime type of the
+   * specified array and the size of the specified collection.
+   *
+   * <p>If the collection fits in the specified array with room to spare (i.e.,
+   * the array has more elements than the collection), the element in the array
+   * immediately following the end of the collection is set to {@code null}.
+   * This is useful in determining the length of the collection <i>only</i> if
+   * the caller knows that the collection does not contain any null elements.
+   *
+   * <p>This method returns the elements in the order they are returned by the
+   * collection's iterator.
+   *
+   * <p>TODO(kevinb): support concurrently modified collections?
+   *
+   * @param c the collection for which to return an array of elements
+   * @param array the array in which to place the collection elements
+   * @throws ArrayStoreException if the runtime type of the specified array is
+   *     not a supertype of the runtime type of every element in the specified
+   *     collection
+   */
+  static <T> T[] toArrayImpl(Collection<?> c, T[] array) {
+    int size = c.size();
+    if (array.length < size) {
+      array = newArray(array, size);
+    }
+    fillArray(c, array);
+    if (array.length > size) {
+      array[size] = null;
+    }
+    return array;
+  }
+
+  /**
+   * Returns an array containing all of the elements in the specified
+   * collection. This method returns the elements in the order they are returned
+   * by the collection's iterator. The returned array is "safe" in that no
+   * references to it are maintained by the collection. The caller is thus free
+   * to modify the returned array.
+   *
+   * <p>This method assumes that the collection size doesn't change while the
+   * method is running.
+   *
+   * <p>TODO(kevinb): support concurrently modified collections?
+   *
+   * @param c the collection for which to return an array of elements
+   */
+  static Object[] toArrayImpl(Collection<?> c) {
+    return fillArray(c, new Object[c.size()]);
+  }
+
+  private static Object[] fillArray(Iterable<?> elements, Object[] array) {
+    int i = 0;
+    for (Object element : elements) {
+      array[i++] = element;
+    }
+    return array;
+  }
+
+  /**
+   * Swaps {@code array[i]} with {@code array[j]}.
+   */
+  static void swap(Object[] array, int i, int j) {
+    Object temp = array[i];
+    array[i] = array[j];
+    array[j] = temp;
+  }
+}
+
diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/Platform.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/Platform.java
new file mode 100644
index 0000000..4fbdde0
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/Platform.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+/**
+ * Minimal GWT emulation of {@code com.google.common.collect.Platform}.
+ *
+ * <p><strong>This .java file should never be consumed by javac.</strong>
+ *
+ * @author Hayward Chan
+ */
+class Platform {
+
+  static <T> T[] clone(T[] array) {
+    return GwtPlatform.clone(array);
+  }
+
+  // TODO: Fix System.arraycopy in GWT so that it isn't necessary.
+  static void unsafeArrayCopy(
+      Object[] src, int srcPos, Object[] dest, int destPos, int length) {
+    for (int i = 0; i < length; i++) {
+      dest[destPos + i] = src[srcPos + i];
+    }
+  }
+
+  static <T> T[] newArray(Class<T> type, int length) {
+    throw new UnsupportedOperationException(
+        "Platform.newArray is not supported in GWT yet.");
+  }
+
+  static <T> T[] newArray(T[] reference, int length) {
+    return GwtPlatform.newArray(reference, length);
+  }
+
+  static MapMaker tryWeakKeys(MapMaker mapMaker) {
+    return mapMaker;
+  }
+}
diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/RegularContiguousSet.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/RegularContiguousSet.java
new file mode 100644
index 0000000..a63b391
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/RegularContiguousSet.java
@@ -0,0 +1,171 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.collect.BoundType.CLOSED;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Collection;
+
+import javax.annotation.Nullable;
+
+/**
+ * An implementation of {@link ContiguousSet} that contains one or more elements.
+ *
+ * @author Gregory Kick
+ */
+@GwtCompatible(emulated = true)
+@SuppressWarnings("unchecked") // allow ungenerified Comparable types
+final class RegularContiguousSet<C extends Comparable> extends ContiguousSet<C> {
+  private final Range<C> range;
+
+  RegularContiguousSet(Range<C> range, DiscreteDomain<C> domain) {
+    super(domain);
+    this.range = range;
+  }
+
+  // Abstract method doesn't exist in GWT emulation
+  /* @Override */ ContiguousSet<C> headSetImpl(C toElement, boolean inclusive) {
+    return range.intersection(Ranges.upTo(toElement, BoundType.forBoolean(inclusive)))
+        .asSet(domain);
+  }
+
+  // Abstract method doesn't exist in GWT emulation
+  /* @Override */ int indexOf(Object target) {
+    return contains(target) ? (int) domain.distance(first(), (C) target) : -1;
+  }
+
+  // Abstract method doesn't exist in GWT emulation
+  /* @Override */ ContiguousSet<C> subSetImpl(C fromElement, boolean fromInclusive, C toElement,
+      boolean toInclusive) {
+    return range.intersection(Ranges.range(fromElement, BoundType.forBoolean(fromInclusive),
+        toElement, BoundType.forBoolean(toInclusive))).asSet(domain);
+  }
+
+  // Abstract method doesn't exist in GWT emulation
+  /* @Override */ ContiguousSet<C> tailSetImpl(C fromElement, boolean inclusive) {
+    return range.intersection(Ranges.downTo(fromElement, BoundType.forBoolean(inclusive)))
+        .asSet(domain);
+  }
+
+  @Override public UnmodifiableIterator<C> iterator() {
+    return new AbstractLinkedIterator<C>(first()) {
+      final C last = last();
+
+      @Override
+      protected C computeNext(C previous) {
+        return equalsOrThrow(previous, last) ? null : domain.next(previous);
+      }
+    };
+  }
+
+  private static boolean equalsOrThrow(Comparable<?> left, @Nullable Comparable<?> right) {
+    return right != null && Range.compareOrThrow(left, right) == 0;
+  }
+
+  @Override boolean isPartialView() {
+    return false;
+  }
+
+  @Override public C first() {
+    return range.lowerBound.leastValueAbove(domain);
+  }
+
+  @Override public C last() {
+    return range.upperBound.greatestValueBelow(domain);
+  }
+
+  @Override public int size() {
+    long distance = domain.distance(first(), last());
+    return (distance >= Integer.MAX_VALUE) ? Integer.MAX_VALUE : (int) distance + 1;
+  }
+
+  @Override public boolean contains(Object object) {
+    try {
+      return range.contains((C) object);
+    } catch (ClassCastException e) {
+      return false;
+    }
+  }
+
+  @Override public boolean containsAll(Collection<?> targets) {
+    try {
+      return range.containsAll((Iterable<? extends C>) targets);
+    } catch (ClassCastException e) {
+      return false;
+    }
+  }
+
+  @Override public boolean isEmpty() {
+    return false;
+  }
+
+  // copied to make sure not to use the GWT-emulated version
+  @Override public Object[] toArray() {
+    return ObjectArrays.toArrayImpl(this);
+  }
+
+  // copied to make sure not to use the GWT-emulated version
+  @Override public <T> T[] toArray(T[] other) {
+    return ObjectArrays.toArrayImpl(this, other);
+  }
+
+  @Override public ContiguousSet<C> intersection(ContiguousSet<C> other) {
+    checkNotNull(other);
+    checkArgument(this.domain.equals(other.domain));
+    if (other.isEmpty()) {
+      return other;
+    } else {
+      C lowerEndpoint = Ordering.natural().max(this.first(), other.first());
+      C upperEndpoint = Ordering.natural().min(this.last(), other.last());
+      return (lowerEndpoint.compareTo(upperEndpoint) < 0)
+          ? Ranges.closed(lowerEndpoint, upperEndpoint).asSet(domain)
+          : new EmptyContiguousSet<C>(domain);
+    }
+  }
+
+  @Override public Range<C> range() {
+    return range(CLOSED, CLOSED);
+  }
+
+  @Override public Range<C> range(BoundType lowerBoundType, BoundType upperBoundType) {
+    return Ranges.create(range.lowerBound.withLowerBoundType(lowerBoundType, domain),
+        range.upperBound.withUpperBoundType(upperBoundType, domain));
+  }
+
+  @Override public boolean equals(Object object) {
+    if (object == this) {
+      return true;
+    } else if (object instanceof RegularContiguousSet<?>) {
+      RegularContiguousSet<?> that = (RegularContiguousSet<?>) object;
+      if (this.domain.equals(that.domain)) {
+        return this.first().equals(that.first())
+            && this.last().equals(that.last());
+      }
+    }
+    return super.equals(object);
+  }
+
+  // copied to make sure not to use the GWT-emulated version
+  @Override public int hashCode() {
+    return Sets.hashCodeImpl(this);
+  }
+
+  private static final long serialVersionUID = 0;
+}
+
diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/RegularImmutableBiMap.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/RegularImmutableBiMap.java
new file mode 100644
index 0000000..5b4e851
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/RegularImmutableBiMap.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+/**
+ * GWT emulation of {@link RegularImmutableBiMap}.
+ *
+ * @author Jared Levy
+ * @author Hayward Chan
+ */
+@SuppressWarnings("serial")
+class RegularImmutableBiMap<K, V> extends ImmutableBiMap<K, V> {
+
+  // This reference is used both by the GWT compiler to infer the elements
+  // of the lists that needs to be serialized.
+  private ImmutableBiMap<V, K> inverse;
+
+  RegularImmutableBiMap(ImmutableMap<K, V> delegate) {
+    super(delegate);
+
+    ImmutableMap.Builder<V, K> builder = ImmutableMap.builder();
+    for (Entry<K, V> entry : delegate.entrySet()) {
+      builder.put(entry.getValue(), entry.getKey());
+    }
+    ImmutableMap<V, K> backwardMap = builder.build();
+    this.inverse = new RegularImmutableBiMap<V, K>(backwardMap, this);
+  }
+
+  RegularImmutableBiMap(ImmutableMap<K, V> delegate,
+      ImmutableBiMap<V, K> inverse) {
+    super(delegate);
+    this.inverse = inverse;
+  }
+
+  @Override public ImmutableBiMap<V, K> inverse() {
+    return inverse;
+  }
+}
diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/RegularImmutableList.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/RegularImmutableList.java
new file mode 100644
index 0000000..5cdddff
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/RegularImmutableList.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import java.util.List;
+
+/**
+ * GWT emulated version of {@link RegularImmutableList}.
+ *
+ * @author Hayward Chan
+ */
+class RegularImmutableList<E> extends ImmutableList<E> {
+  RegularImmutableList(List<E> delegate) {
+    super(delegate);
+  }
+}
diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/RegularImmutableMap.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/RegularImmutableMap.java
new file mode 100644
index 0000000..bdf536b
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/RegularImmutableMap.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import java.util.Map;
+
+/**
+ * GWt emulation of {@link RegularImmutableMap}.
+ *
+ * @author Hayward Chan
+ */
+final class RegularImmutableMap<K, V> extends ImmutableMap<K, V> {
+
+  RegularImmutableMap(Map<? extends K, ? extends V> delegate) {
+    super(delegate);
+  }
+
+  RegularImmutableMap(Entry<? extends K, ? extends V>... entries) {
+    super(entries);
+  }  
+}
diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/RegularImmutableSet.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/RegularImmutableSet.java
new file mode 100644
index 0000000..f462ade
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/RegularImmutableSet.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkArgument;
+
+import java.util.Set;
+
+/**
+ * GWT emulation of {@link RegularImmutableSet}.
+ *
+ * @author Hayward Chan
+ */
+final class RegularImmutableSet<E> extends ImmutableSet<E> {
+  RegularImmutableSet(Set<E> delegate) {
+    super(delegate);
+
+    // Required for GWT deserialization because the server-side implementation
+    // requires this.
+    checkArgument(delegate.size() >= 2);
+  }
+}
diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/RegularImmutableSortedSet.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/RegularImmutableSortedSet.java
new file mode 100644
index 0000000..8256e98
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/RegularImmutableSortedSet.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import java.util.SortedSet;
+
+/**
+ * GWT emulation of {@link RegularImmutableSortedSet}.
+ *
+ * @author Hayward Chan
+ */
+final class RegularImmutableSortedSet<E> extends ImmutableSortedSet<E> {
+
+  /** true if this set is a subset of another immutable sorted set. */
+  final boolean isSubset;
+
+  RegularImmutableSortedSet(SortedSet<E> delegate, boolean isSubset) {
+    super(delegate);
+    this.isSubset = isSubset;
+  }
+}
diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/Sets.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/Sets.java
new file mode 100644
index 0000000..be31363
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/Sets.java
@@ -0,0 +1,1382 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Function;
+import com.google.common.base.Objects;
+import com.google.common.base.Preconditions;
+import com.google.common.base.Predicate;
+import com.google.common.base.Predicates;
+import com.google.common.collect.Collections2.FilteredCollection;
+import com.google.common.math.IntMath;
+
+import java.io.Serializable;
+import java.util.AbstractSet;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.EnumSet;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.NoSuchElementException;
+import java.util.Set;
+import java.util.SortedSet;
+import java.util.TreeSet;
+
+import javax.annotation.Nullable;
+
+/**
+ * Static utility methods pertaining to {@link Set} instances. Also see this
+ * class's counterparts {@link Lists} and {@link Maps}.
+ *
+ * @author Kevin Bourrillion
+ * @author Jared Levy
+ * @author Chris Povirk
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible(emulated = true)
+public final class Sets {
+  private Sets() {}
+
+  /**
+   * Returns an immutable set instance containing the given enum elements.
+   * Internally, the returned set will be backed by an {@link EnumSet}.
+   *
+   * <p>The iteration order of the returned set follows the enum's iteration
+   * order, not the order in which the elements are provided to the method.
+   *
+   * @param anElement one of the elements the set should contain
+   * @param otherElements the rest of the elements the set should contain
+   * @return an immutable set containing those elements, minus duplicates
+   */
+  // http://code.google.com/p/google-web-toolkit/issues/detail?id=3028
+  @GwtCompatible(serializable = true)
+  public static <E extends Enum<E>> ImmutableSet<E> immutableEnumSet(
+      E anElement, E... otherElements) {
+    return new ImmutableEnumSet<E>(EnumSet.of(anElement, otherElements));
+  }
+
+  /**
+   * Returns an immutable set instance containing the given enum elements.
+   * Internally, the returned set will be backed by an {@link EnumSet}.
+   *
+   * <p>The iteration order of the returned set follows the enum's iteration
+   * order, not the order in which the elements appear in the given collection.
+   *
+   * @param elements the elements, all of the same {@code enum} type, that the
+   *     set should contain
+   * @return an immutable set containing those elements, minus duplicates
+   */
+  // http://code.google.com/p/google-web-toolkit/issues/detail?id=3028
+  @GwtCompatible(serializable = true)
+  public static <E extends Enum<E>> ImmutableSet<E> immutableEnumSet(
+      Iterable<E> elements) {
+    Iterator<E> iterator = elements.iterator();
+    if (!iterator.hasNext()) {
+      return ImmutableSet.of();
+    }
+    if (elements instanceof EnumSet) {
+      EnumSet<E> enumSetClone = EnumSet.copyOf((EnumSet<E>) elements);
+      return new ImmutableEnumSet<E>(enumSetClone);
+    }
+    E first = iterator.next();
+    EnumSet<E> set = EnumSet.of(first);
+    while (iterator.hasNext()) {
+      set.add(iterator.next());
+    }
+    return new ImmutableEnumSet<E>(set);
+  }
+
+  /**
+   * Returns a new {@code EnumSet} instance containing the given elements.
+   * Unlike {@link EnumSet#copyOf(Collection)}, this method does not produce an
+   * exception on an empty collection, and it may be called on any iterable, not
+   * just a {@code Collection}.
+   */
+  public static <E extends Enum<E>> EnumSet<E> newEnumSet(Iterable<E> iterable,
+      Class<E> elementType) {
+    /*
+     * TODO(cpovirk): noneOf() and addAll() will both throw
+     * NullPointerExceptions when appropriate. However, NullPointerTester will
+     * fail on this method because it passes in Class.class instead of an enum
+     * type. This means that, when iterable is null but elementType is not,
+     * noneOf() will throw a ClassCastException before addAll() has a chance to
+     * throw a NullPointerException. NullPointerTester considers this a failure.
+     * Ideally the test would be fixed, but it would require a special case for
+     * Class<E> where E extends Enum. Until that happens (if ever), leave
+     * checkNotNull() here. For now, contemplate the irony that checking
+     * elementType, the problem argument, is harmful, while checking iterable,
+     * the innocent bystander, is effective.
+     */
+    checkNotNull(iterable);
+    EnumSet<E> set = EnumSet.noneOf(elementType);
+    Iterables.addAll(set, iterable);
+    return set;
+  }
+
+  // HashSet
+
+  /**
+   * Creates a <i>mutable</i>, empty {@code HashSet} instance.
+   *
+   * <p><b>Note:</b> if mutability is not required, use {@link
+   * ImmutableSet#of()} instead.
+   *
+   * <p><b>Note:</b> if {@code E} is an {@link Enum} type, use {@link
+   * EnumSet#noneOf} instead.
+   *
+   * @return a new, empty {@code HashSet}
+   */
+  public static <E> HashSet<E> newHashSet() {
+    return new HashSet<E>();
+  }
+
+  /**
+   * Creates a <i>mutable</i> {@code HashSet} instance containing the given
+   * elements in unspecified order.
+   *
+   * <p><b>Note:</b> if mutability is not required and the elements are
+   * non-null, use an overload of {@link ImmutableSet#of()} (for varargs) or
+   * {@link ImmutableSet#copyOf(Object[])} (for an array) instead.
+   *
+   * <p><b>Note:</b> if {@code E} is an {@link Enum} type, use {@link
+   * EnumSet#of(Enum, Enum[])} instead.
+   *
+   * @param elements the elements that the set should contain
+   * @return a new {@code HashSet} containing those elements (minus duplicates)
+   */
+  public static <E> HashSet<E> newHashSet(E... elements) {
+    HashSet<E> set = newHashSetWithExpectedSize(elements.length);
+    Collections.addAll(set, elements);
+    return set;
+  }
+
+  /**
+   * Creates a {@code HashSet} instance, with a high enough "initial capacity"
+   * that it <i>should</i> hold {@code expectedSize} elements without growth.
+   * This behavior cannot be broadly guaranteed, but it is observed to be true
+   * for OpenJDK 1.6. It also can't be guaranteed that the method isn't
+   * inadvertently <i>oversizing</i> the returned set.
+   *
+   * @param expectedSize the number of elements you expect to add to the
+   *        returned set
+   * @return a new, empty {@code HashSet} with enough capacity to hold {@code
+   *         expectedSize} elements without resizing
+   * @throws IllegalArgumentException if {@code expectedSize} is negative
+   */
+  public static <E> HashSet<E> newHashSetWithExpectedSize(int expectedSize) {
+    return new HashSet<E>(Maps.capacity(expectedSize));
+  }
+
+  /**
+   * Creates a <i>mutable</i> {@code HashSet} instance containing the given
+   * elements in unspecified order.
+   *
+   * <p><b>Note:</b> if mutability is not required and the elements are
+   * non-null, use {@link ImmutableSet#copyOf(Iterable)} instead.
+   *
+   * <p><b>Note:</b> if {@code E} is an {@link Enum} type, use
+   * {@link #newEnumSet(Iterable, Class)} instead.
+   *
+   * @param elements the elements that the set should contain
+   * @return a new {@code HashSet} containing those elements (minus duplicates)
+   */
+  public static <E> HashSet<E> newHashSet(Iterable<? extends E> elements) {
+    return (elements instanceof Collection)
+        ? new HashSet<E>(Collections2.cast(elements))
+        : newHashSet(elements.iterator());
+  }
+
+  /**
+   * Creates a <i>mutable</i> {@code HashSet} instance containing the given
+   * elements in unspecified order.
+   *
+   * <p><b>Note:</b> if mutability is not required and the elements are
+   * non-null, use {@link ImmutableSet#copyOf(Iterable)} instead.
+   *
+   * <p><b>Note:</b> if {@code E} is an {@link Enum} type, you should create an
+   * {@link EnumSet} instead.
+   *
+   * @param elements the elements that the set should contain
+   * @return a new {@code HashSet} containing those elements (minus duplicates)
+   */
+  public static <E> HashSet<E> newHashSet(Iterator<? extends E> elements) {
+    HashSet<E> set = newHashSet();
+    while (elements.hasNext()) {
+      set.add(elements.next());
+    }
+    return set;
+  }
+
+  // LinkedHashSet
+
+  /**
+   * Creates a <i>mutable</i>, empty {@code LinkedHashSet} instance.
+   *
+   * <p><b>Note:</b> if mutability is not required, use {@link
+   * ImmutableSet#of()} instead.
+   *
+   * @return a new, empty {@code LinkedHashSet}
+   */
+  public static <E> LinkedHashSet<E> newLinkedHashSet() {
+    return new LinkedHashSet<E>();
+  }
+
+  /**
+   * Creates a {@code LinkedHashSet} instance, with a high enough "initial
+   * capacity" that it <i>should</i> hold {@code expectedSize} elements without
+   * growth. This behavior cannot be broadly guaranteed, but it is observed to
+   * be true for OpenJDK 1.6. It also can't be guaranteed that the method isn't
+   * inadvertently <i>oversizing</i> the returned set.
+   *
+   * @param expectedSize the number of elements you expect to add to the
+   *        returned set
+   * @return a new, empty {@code LinkedHashSet} with enough capacity to hold
+   *         {@code expectedSize} elements without resizing
+   * @throws IllegalArgumentException if {@code expectedSize} is negative
+   * @since 11.0
+   */
+  public static <E> LinkedHashSet<E> newLinkedHashSetWithExpectedSize(
+      int expectedSize) {
+    return new LinkedHashSet<E>(Maps.capacity(expectedSize));
+  }
+
+  /**
+   * Creates a <i>mutable</i> {@code LinkedHashSet} instance containing the
+   * given elements in order.
+   *
+   * <p><b>Note:</b> if mutability is not required and the elements are
+   * non-null, use {@link ImmutableSet#copyOf(Iterable)} instead.
+   *
+   * @param elements the elements that the set should contain, in order
+   * @return a new {@code LinkedHashSet} containing those elements (minus
+   *     duplicates)
+   */
+  public static <E> LinkedHashSet<E> newLinkedHashSet(
+      Iterable<? extends E> elements) {
+    if (elements instanceof Collection) {
+      return new LinkedHashSet<E>(Collections2.cast(elements));
+    }
+    LinkedHashSet<E> set = newLinkedHashSet();
+    for (E element : elements) {
+      set.add(element);
+    }
+    return set;
+  }
+
+  // TreeSet
+
+  /**
+   * Creates a <i>mutable</i>, empty {@code TreeSet} instance sorted by the
+   * natural sort ordering of its elements.
+   *
+   * <p><b>Note:</b> if mutability is not required, use {@link
+   * ImmutableSortedSet#of()} instead.
+   *
+   * @return a new, empty {@code TreeSet}
+   */
+  public static <E extends Comparable> TreeSet<E> newTreeSet() {
+    return new TreeSet<E>();
+  }
+
+  /**
+   * Creates a <i>mutable</i> {@code TreeSet} instance containing the given
+   * elements sorted by their natural ordering.
+   *
+   * <p><b>Note:</b> if mutability is not required, use {@link
+   * ImmutableSortedSet#copyOf(Iterable)} instead.
+   *
+   * <p><b>Note:</b> If {@code elements} is a {@code SortedSet} with an explicit
+   * comparator, this method has different behavior than
+   * {@link TreeSet#TreeSet(SortedSet)}, which returns a {@code TreeSet} with
+   * that comparator.
+   *
+   * @param elements the elements that the set should contain
+   * @return a new {@code TreeSet} containing those elements (minus duplicates)
+   */
+  public static <E extends Comparable> TreeSet<E> newTreeSet(
+      Iterable<? extends E> elements) {
+    TreeSet<E> set = newTreeSet();
+    for (E element : elements) {
+      set.add(element);
+    }
+    return set;
+  }
+
+  /**
+   * Creates a <i>mutable</i>, empty {@code TreeSet} instance with the given
+   * comparator.
+   *
+   * <p><b>Note:</b> if mutability is not required, use {@code
+   * ImmutableSortedSet.orderedBy(comparator).build()} instead.
+   *
+   * @param comparator the comparator to use to sort the set
+   * @return a new, empty {@code TreeSet}
+   * @throws NullPointerException if {@code comparator} is null
+   */
+  public static <E> TreeSet<E> newTreeSet(Comparator<? super E> comparator) {
+    return new TreeSet<E>(checkNotNull(comparator));
+  }
+
+  /**
+   * Creates an empty {@code Set} that uses identity to determine equality. It
+   * compares object references, instead of calling {@code equals}, to
+   * determine whether a provided object matches an element in the set. For
+   * example, {@code contains} returns {@code false} when passed an object that
+   * equals a set member, but isn't the same instance. This behavior is similar
+   * to the way {@code IdentityHashMap} handles key lookups.
+   *
+   * @since 8.0
+   */
+  public static <E> Set<E> newIdentityHashSet() {
+    return Sets.newSetFromMap(Maps.<E, Boolean>newIdentityHashMap());
+  }
+
+  /**
+   * Creates an {@code EnumSet} consisting of all enum values that are not in
+   * the specified collection. If the collection is an {@link EnumSet}, this
+   * method has the same behavior as {@link EnumSet#complementOf}. Otherwise,
+   * the specified collection must contain at least one element, in order to
+   * determine the element type. If the collection could be empty, use
+   * {@link #complementOf(Collection, Class)} instead of this method.
+   *
+   * @param collection the collection whose complement should be stored in the
+   *     enum set
+   * @return a new, modifiable {@code EnumSet} containing all values of the enum
+   *     that aren't present in the given collection
+   * @throws IllegalArgumentException if {@code collection} is not an
+   *     {@code EnumSet} instance and contains no elements
+   */
+  public static <E extends Enum<E>> EnumSet<E> complementOf(
+      Collection<E> collection) {
+    if (collection instanceof EnumSet) {
+      return EnumSet.complementOf((EnumSet<E>) collection);
+    }
+    checkArgument(!collection.isEmpty(),
+        "collection is empty; use the other version of this method");
+    Class<E> type = collection.iterator().next().getDeclaringClass();
+    return makeComplementByHand(collection, type);
+  }
+
+  /**
+   * Creates an {@code EnumSet} consisting of all enum values that are not in
+   * the specified collection. This is equivalent to
+   * {@link EnumSet#complementOf}, but can act on any input collection, as long
+   * as the elements are of enum type.
+   *
+   * @param collection the collection whose complement should be stored in the
+   *     {@code EnumSet}
+   * @param type the type of the elements in the set
+   * @return a new, modifiable {@code EnumSet} initially containing all the
+   *     values of the enum not present in the given collection
+   */
+  public static <E extends Enum<E>> EnumSet<E> complementOf(
+      Collection<E> collection, Class<E> type) {
+    checkNotNull(collection);
+    return (collection instanceof EnumSet)
+        ? EnumSet.complementOf((EnumSet<E>) collection)
+        : makeComplementByHand(collection, type);
+  }
+
+  private static <E extends Enum<E>> EnumSet<E> makeComplementByHand(
+      Collection<E> collection, Class<E> type) {
+    EnumSet<E> result = EnumSet.allOf(type);
+    result.removeAll(collection);
+    return result;
+  }
+
+  /*
+   * Regarding newSetForMap() and SetFromMap:
+   *
+   * Written by Doug Lea with assistance from members of JCP JSR-166
+   * Expert Group and released to the public domain, as explained at
+   * http://creativecommons.org/licenses/publicdomain
+   */
+
+  /**
+   * Returns a set backed by the specified map. The resulting set displays
+   * the same ordering, concurrency, and performance characteristics as the
+   * backing map. In essence, this factory method provides a {@link Set}
+   * implementation corresponding to any {@link Map} implementation. There is no
+   * need to use this method on a {@link Map} implementation that already has a
+   * corresponding {@link Set} implementation (such as {@link java.util.HashMap}
+   * or {@link java.util.TreeMap}).
+   *
+   * <p>Each method invocation on the set returned by this method results in
+   * exactly one method invocation on the backing map or its {@code keySet}
+   * view, with one exception. The {@code addAll} method is implemented as a
+   * sequence of {@code put} invocations on the backing map.
+   *
+   * <p>The specified map must be empty at the time this method is invoked,
+   * and should not be accessed directly after this method returns. These
+   * conditions are ensured if the map is created empty, passed directly
+   * to this method, and no reference to the map is retained, as illustrated
+   * in the following code fragment: <pre>  {@code
+   *
+   *   Set<Object> identityHashSet = Sets.newSetFromMap(
+   *       new IdentityHashMap<Object, Boolean>());}</pre>
+   *
+   * This method has the same behavior as the JDK 6 method
+   * {@code Collections.newSetFromMap()}. The returned set is serializable if
+   * the backing map is.
+   *
+   * @param map the backing map
+   * @return the set backed by the map
+   * @throws IllegalArgumentException if {@code map} is not empty
+   */
+  public static <E> Set<E> newSetFromMap(Map<E, Boolean> map) {
+    return new SetFromMap<E>(map);
+  }
+
+  private static class SetFromMap<E> extends AbstractSet<E>
+      implements Set<E>, Serializable {
+    private final Map<E, Boolean> m; // The backing map
+    private transient Set<E> s; // Its keySet
+
+    SetFromMap(Map<E, Boolean> map) {
+      checkArgument(map.isEmpty(), "Map is non-empty");
+      m = map;
+      s = map.keySet();
+    }
+
+    @Override public void clear() {
+      m.clear();
+    }
+    @Override public int size() {
+      return m.size();
+    }
+    @Override public boolean isEmpty() {
+      return m.isEmpty();
+    }
+    @Override public boolean contains(Object o) {
+      return m.containsKey(o);
+    }
+    @Override public boolean remove(Object o) {
+      return m.remove(o) != null;
+    }
+    @Override public boolean add(E e) {
+      return m.put(e, Boolean.TRUE) == null;
+    }
+    @Override public Iterator<E> iterator() {
+      return s.iterator();
+    }
+    @Override public Object[] toArray() {
+      return s.toArray();
+    }
+    @Override public <T> T[] toArray(T[] a) {
+      return s.toArray(a);
+    }
+    @Override public String toString() {
+      return s.toString();
+    }
+    @Override public int hashCode() {
+      return s.hashCode();
+    }
+    @Override public boolean equals(@Nullable Object object) {
+      return this == object || this.s.equals(object);
+    }
+    @Override public boolean containsAll(Collection<?> c) {
+      return s.containsAll(c);
+    }
+    @Override public boolean removeAll(Collection<?> c) {
+      return s.removeAll(c);
+    }
+    @Override public boolean retainAll(Collection<?> c) {
+      return s.retainAll(c);
+    }
+
+    // addAll is the only inherited implementation
+  }
+
+  /**
+   * An unmodifiable view of a set which may be backed by other sets; this view
+   * will change as the backing sets do. Contains methods to copy the data into
+   * a new set which will then remain stable. There is usually no reason to
+   * retain a reference of type {@code SetView}; typically, you either use it
+   * as a plain {@link Set}, or immediately invoke {@link #immutableCopy} or
+   * {@link #copyInto} and forget the {@code SetView} itself.
+   *
+   * @since 2.0 (imported from Google Collections Library)
+   */
+  public abstract static class SetView<E> extends AbstractSet<E> {
+    private SetView() {} // no subclasses but our own
+
+    /**
+     * Returns an immutable copy of the current contents of this set view.
+     * Does not support null elements.
+     *
+     * <p><b>Warning:</b> this may have unexpected results if a backing set of
+     * this view uses a nonstandard notion of equivalence, for example if it is
+     * a {@link TreeSet} using a comparator that is inconsistent with {@link
+     * Object#equals(Object)}.
+     */
+    public ImmutableSet<E> immutableCopy() {
+      return ImmutableSet.copyOf(this);
+    }
+
+    /**
+     * Copies the current contents of this set view into an existing set. This
+     * method has equivalent behavior to {@code set.addAll(this)}, assuming that
+     * all the sets involved are based on the same notion of equivalence.
+     *
+     * @return a reference to {@code set}, for convenience
+     */
+    // Note: S should logically extend Set<? super E> but can't due to either
+    // some javac bug or some weirdness in the spec, not sure which.
+    public <S extends Set<E>> S copyInto(S set) {
+      set.addAll(this);
+      return set;
+    }
+  }
+
+  /**
+   * Returns an unmodifiable <b>view</b> of the union of two sets. The returned
+   * set contains all elements that are contained in either backing set.
+   * Iterating over the returned set iterates first over all the elements of
+   * {@code set1}, then over each element of {@code set2}, in order, that is not
+   * contained in {@code set1}.
+   *
+   * <p>Results are undefined if {@code set1} and {@code set2} are sets based on
+   * different equivalence relations (as {@link HashSet}, {@link TreeSet}, and
+   * the {@link Map#keySet} of an {@code IdentityHashMap} all are).
+   *
+   * <p><b>Note:</b> The returned view performs better when {@code set1} is the
+   * smaller of the two sets. If you have reason to believe one of your sets
+   * will generally be smaller than the other, pass it first.
+   */
+  public static <E> SetView<E> union(
+      final Set<? extends E> set1, final Set<? extends E> set2) {
+    checkNotNull(set1, "set1");
+    checkNotNull(set2, "set2");
+
+    final Set<? extends E> set2minus1 = difference(set2, set1);
+
+    return new SetView<E>() {
+      @Override public int size() {
+        return set1.size() + set2minus1.size();
+      }
+      @Override public boolean isEmpty() {
+        return set1.isEmpty() && set2.isEmpty();
+      }
+      @Override public Iterator<E> iterator() {
+        return Iterators.unmodifiableIterator(
+            Iterators.concat(set1.iterator(), set2minus1.iterator()));
+      }
+      @Override public boolean contains(Object object) {
+        return set1.contains(object) || set2.contains(object);
+      }
+      @Override public <S extends Set<E>> S copyInto(S set) {
+        set.addAll(set1);
+        set.addAll(set2);
+        return set;
+      }
+      @Override public ImmutableSet<E> immutableCopy() {
+        return new ImmutableSet.Builder<E>()
+            .addAll(set1).addAll(set2).build();
+      }
+    };
+  }
+
+  /**
+   * Returns an unmodifiable <b>view</b> of the intersection of two sets. The
+   * returned set contains all elements that are contained by both backing sets.
+   * The iteration order of the returned set matches that of {@code set1}.
+   *
+   * <p>Results are undefined if {@code set1} and {@code set2} are sets based
+   * on different equivalence relations (as {@code HashSet}, {@code TreeSet},
+   * and the keySet of an {@code IdentityHashMap} all are).
+   *
+   * <p><b>Note:</b> The returned view performs slightly better when {@code
+   * set1} is the smaller of the two sets. If you have reason to believe one of
+   * your sets will generally be smaller than the other, pass it first.
+   * Unfortunately, since this method sets the generic type of the returned set
+   * based on the type of the first set passed, this could in rare cases force
+   * you to make a cast, for example: <pre>   {@code
+   *
+   *   Set<Object> aFewBadObjects = ...
+   *   Set<String> manyBadStrings = ...
+   *
+   *   // impossible for a non-String to be in the intersection
+   *   SuppressWarnings("unchecked")
+   *   Set<String> badStrings = (Set) Sets.intersection(
+   *       aFewBadObjects, manyBadStrings);}</pre>
+   *
+   * This is unfortunate, but should come up only very rarely.
+   */
+  public static <E> SetView<E> intersection(
+      final Set<E> set1, final Set<?> set2) {
+    checkNotNull(set1, "set1");
+    checkNotNull(set2, "set2");
+
+    final Predicate<Object> inSet2 = Predicates.in(set2);
+    return new SetView<E>() {
+      @Override public Iterator<E> iterator() {
+        return Iterators.filter(set1.iterator(), inSet2);
+      }
+      @Override public int size() {
+        return Iterators.size(iterator());
+      }
+      @Override public boolean isEmpty() {
+        return !iterator().hasNext();
+      }
+      @Override public boolean contains(Object object) {
+        return set1.contains(object) && set2.contains(object);
+      }
+      @Override public boolean containsAll(Collection<?> collection) {
+        return set1.containsAll(collection)
+            && set2.containsAll(collection);
+      }
+    };
+  }
+
+  /**
+   * Returns an unmodifiable <b>view</b> of the difference of two sets. The
+   * returned set contains all elements that are contained by {@code set1} and
+   * not contained by {@code set2}. {@code set2} may also contain elements not
+   * present in {@code set1}; these are simply ignored. The iteration order of
+   * the returned set matches that of {@code set1}.
+   *
+   * <p>Results are undefined if {@code set1} and {@code set2} are sets based
+   * on different equivalence relations (as {@code HashSet}, {@code TreeSet},
+   * and the keySet of an {@code IdentityHashMap} all are).
+   */
+  public static <E> SetView<E> difference(
+      final Set<E> set1, final Set<?> set2) {
+    checkNotNull(set1, "set1");
+    checkNotNull(set2, "set2");
+
+    final Predicate<Object> notInSet2 = Predicates.not(Predicates.in(set2));
+    return new SetView<E>() {
+      @Override public Iterator<E> iterator() {
+        return Iterators.filter(set1.iterator(), notInSet2);
+      }
+      @Override public int size() {
+        return Iterators.size(iterator());
+      }
+      @Override public boolean isEmpty() {
+        return set2.containsAll(set1);
+      }
+      @Override public boolean contains(Object element) {
+        return set1.contains(element) && !set2.contains(element);
+      }
+    };
+  }
+
+  /**
+   * Returns an unmodifiable <b>view</b> of the symmetric difference of two
+   * sets. The returned set contains all elements that are contained in either
+   * {@code set1} or {@code set2} but not in both. The iteration order of the
+   * returned set is undefined.
+   *
+   * <p>Results are undefined if {@code set1} and {@code set2} are sets based
+   * on different equivalence relations (as {@code HashSet}, {@code TreeSet},
+   * and the keySet of an {@code IdentityHashMap} all are).
+   *
+   * @since 3.0
+   */
+  public static <E> SetView<E> symmetricDifference(
+      Set<? extends E> set1, Set<? extends E> set2) {
+    checkNotNull(set1, "set1");
+    checkNotNull(set2, "set2");
+
+    // TODO(kevinb): Replace this with a more efficient implementation
+    return difference(union(set1, set2), intersection(set1, set2));
+  }
+
+  /**
+   * Returns the elements of {@code unfiltered} that satisfy a predicate. The
+   * returned set is a live view of {@code unfiltered}; changes to one affect
+   * the other.
+   *
+   * <p>The resulting set's iterator does not support {@code remove()}, but all
+   * other set methods are supported. When given an element that doesn't satisfy
+   * the predicate, the set's {@code add()} and {@code addAll()} methods throw
+   * an {@link IllegalArgumentException}. When methods such as {@code
+   * removeAll()} and {@code clear()} are called on the filtered set, only
+   * elements that satisfy the filter will be removed from the underlying set.
+   *
+   * <p>The returned set isn't threadsafe or serializable, even if
+   * {@code unfiltered} is.
+   *
+   * <p>Many of the filtered set's methods, such as {@code size()}, iterate
+   * across every element in the underlying set and determine which elements
+   * satisfy the filter. When a live view is <i>not</i> needed, it may be faster
+   * to copy {@code Iterables.filter(unfiltered, predicate)} and use the copy.
+   *
+   * <p><b>Warning:</b> {@code predicate} must be <i>consistent with equals</i>,
+   * as documented at {@link Predicate#apply}. Do not provide a predicate such
+   * as {@code Predicates.instanceOf(ArrayList.class)}, which is inconsistent
+   * with equals. (See {@link Iterables#filter(Iterable, Class)} for related
+   * functionality.)
+   */
+  // TODO(kevinb): how to omit that last sentence when building GWT javadoc?
+  public static <E> Set<E> filter(
+      Set<E> unfiltered, Predicate<? super E> predicate) {
+    if (unfiltered instanceof SortedSet) {
+      return filter((SortedSet<E>) unfiltered, predicate);
+    }
+    if (unfiltered instanceof FilteredSet) {
+      // Support clear(), removeAll(), and retainAll() when filtering a filtered
+      // collection.
+      FilteredSet<E> filtered = (FilteredSet<E>) unfiltered;
+      Predicate<E> combinedPredicate
+          = Predicates.<E>and(filtered.predicate, predicate);
+      return new FilteredSet<E>(
+          (Set<E>) filtered.unfiltered, combinedPredicate);
+    }
+
+    return new FilteredSet<E>(
+        checkNotNull(unfiltered), checkNotNull(predicate));
+  }
+
+  private static class FilteredSet<E> extends FilteredCollection<E>
+      implements Set<E> {
+    FilteredSet(Set<E> unfiltered, Predicate<? super E> predicate) {
+      super(unfiltered, predicate);
+    }
+
+    @Override public boolean equals(@Nullable Object object) {
+      return equalsImpl(this, object);
+    }
+
+    @Override public int hashCode() {
+      return hashCodeImpl(this);
+    }
+  }
+
+  /**
+   * Returns the elements of a {@code SortedSet}, {@code unfiltered}, that
+   * satisfy a predicate. The returned set is a live view of {@code unfiltered};
+   * changes to one affect the other.
+   *
+   * <p>The resulting set's iterator does not support {@code remove()}, but all
+   * other set methods are supported. When given an element that doesn't satisfy
+   * the predicate, the set's {@code add()} and {@code addAll()} methods throw
+   * an {@link IllegalArgumentException}. When methods such as
+   * {@code removeAll()} and {@code clear()} are called on the filtered set,
+   * only elements that satisfy the filter will be removed from the underlying
+   * set.
+   *
+   * <p>The returned set isn't threadsafe or serializable, even if
+   * {@code unfiltered} is.
+   *
+   * <p>Many of the filtered set's methods, such as {@code size()}, iterate across
+   * every element in the underlying set and determine which elements satisfy
+   * the filter. When a live view is <i>not</i> needed, it may be faster to copy
+   * {@code Iterables.filter(unfiltered, predicate)} and use the copy.
+   *
+   * <p><b>Warning:</b> {@code predicate} must be <i>consistent with equals</i>,
+   * as documented at {@link Predicate#apply}. Do not provide a predicate such as
+   * {@code Predicates.instanceOf(ArrayList.class)}, which is inconsistent with
+   * equals. (See {@link Iterables#filter(Iterable, Class)} for related
+   * functionality.)
+   *
+   * @since 11.0
+   */
+  @Beta
+  @SuppressWarnings("unchecked")
+  public static <E> SortedSet<E> filter(
+      SortedSet<E> unfiltered, Predicate<? super E> predicate) {
+    if (unfiltered instanceof FilteredSet) {
+      // Support clear(), removeAll(), and retainAll() when filtering a filtered
+      // collection.
+      FilteredSet<E> filtered = (FilteredSet<E>) unfiltered;
+      Predicate<E> combinedPredicate
+          = Predicates.<E>and(filtered.predicate, predicate);
+      return new FilteredSortedSet<E>(
+          (SortedSet<E>) filtered.unfiltered, combinedPredicate);
+    }
+
+    return new FilteredSortedSet<E>(
+        checkNotNull(unfiltered), checkNotNull(predicate));
+  }
+
+  private static class FilteredSortedSet<E> extends FilteredCollection<E>
+      implements SortedSet<E> {
+
+    FilteredSortedSet(SortedSet<E> unfiltered, Predicate<? super E> predicate) {
+      super(unfiltered, predicate);
+    }
+
+    @Override public boolean equals(@Nullable Object object) {
+      return equalsImpl(this, object);
+    }
+
+    @Override public int hashCode() {
+      return hashCodeImpl(this);
+    }
+
+    @Override
+    public Comparator<? super E> comparator() {
+      return ((SortedSet<E>) unfiltered).comparator();
+    }
+
+    @Override
+    public SortedSet<E> subSet(E fromElement, E toElement) {
+      return new FilteredSortedSet<E>(((SortedSet<E>) unfiltered).subSet(fromElement, toElement),
+          predicate);
+    }
+
+    @Override
+    public SortedSet<E> headSet(E toElement) {
+      return new FilteredSortedSet<E>(((SortedSet<E>) unfiltered).headSet(toElement), predicate);
+    }
+
+    @Override
+    public SortedSet<E> tailSet(E fromElement) {
+      return new FilteredSortedSet<E>(((SortedSet<E>) unfiltered).tailSet(fromElement), predicate);
+    }
+
+    @Override
+    public E first() {
+      return iterator().next();
+    }
+
+    @Override
+    public E last() {
+      SortedSet<E> sortedUnfiltered = (SortedSet<E>) unfiltered;
+      while (true) {
+        E element = sortedUnfiltered.last();
+        if (predicate.apply(element)) {
+          return element;
+        }
+        sortedUnfiltered = sortedUnfiltered.headSet(element);
+      }
+    }
+  }
+
+  /**
+   * Returns every possible list that can be formed by choosing one element
+   * from each of the given sets in order; the "n-ary
+   * <a href="http://en.wikipedia.org/wiki/Cartesian_product">Cartesian
+   * product</a>" of the sets. For example: <pre>   {@code
+   *
+   *   Sets.cartesianProduct(ImmutableList.of(
+   *       ImmutableSet.of(1, 2),
+   *       ImmutableSet.of("A", "B", "C")))}</pre>
+   *
+   * returns a set containing six lists:
+   *
+   * <ul>
+   * <li>{@code ImmutableList.of(1, "A")}
+   * <li>{@code ImmutableList.of(1, "B")}
+   * <li>{@code ImmutableList.of(1, "C")}
+   * <li>{@code ImmutableList.of(2, "A")}
+   * <li>{@code ImmutableList.of(2, "B")}
+   * <li>{@code ImmutableList.of(2, "C")}
+   * </ul>
+   *
+   * The order in which these lists are returned is not guaranteed, however the
+   * position of an element inside a tuple always corresponds to the position of
+   * the set from which it came in the input list. Note that if any input set is
+   * empty, the Cartesian product will also be empty. If no sets at all are
+   * provided (an empty list), the resulting Cartesian product has one element,
+   * an empty list (counter-intuitive, but mathematically consistent).
+   *
+   * <p><i>Performance notes:</i> while the cartesian product of sets of size
+   * {@code m, n, p} is a set of size {@code m x n x p}, its actual memory
+   * consumption is much smaller. When the cartesian set is constructed, the
+   * input sets are merely copied. Only as the resulting set is iterated are the
+   * individual lists created, and these are not retained after iteration.
+   *
+   * @param sets the sets to choose elements from, in the order that
+   *     the elements chosen from those sets should appear in the resulting
+   *     lists
+   * @param <B> any common base class shared by all axes (often just {@link
+   *     Object})
+   * @return the Cartesian product, as an immutable set containing immutable
+   *     lists
+   * @throws NullPointerException if {@code sets}, any one of the {@code sets},
+   *     or any element of a provided set is null
+   * @since 2.0
+   */
+  public static <B> Set<List<B>> cartesianProduct(
+      List<? extends Set<? extends B>> sets) {
+    for (Set<? extends B> set : sets) {
+      if (set.isEmpty()) {
+        return ImmutableSet.of();
+      }
+    }
+    CartesianSet<B> cartesianSet = new CartesianSet<B>(sets);
+    return cartesianSet;
+  }
+
+  /**
+   * Returns every possible list that can be formed by choosing one element
+   * from each of the given sets in order; the "n-ary
+   * <a href="http://en.wikipedia.org/wiki/Cartesian_product">Cartesian
+   * product</a>" of the sets. For example: <pre>   {@code
+   *
+   *   Sets.cartesianProduct(
+   *       ImmutableSet.of(1, 2),
+   *       ImmutableSet.of("A", "B", "C"))}</pre>
+   *
+   * returns a set containing six lists:
+   *
+   * <ul>
+   * <li>{@code ImmutableList.of(1, "A")}
+   * <li>{@code ImmutableList.of(1, "B")}
+   * <li>{@code ImmutableList.of(1, "C")}
+   * <li>{@code ImmutableList.of(2, "A")}
+   * <li>{@code ImmutableList.of(2, "B")}
+   * <li>{@code ImmutableList.of(2, "C")}
+   * </ul>
+   *
+   * The order in which these lists are returned is not guaranteed, however the
+   * position of an element inside a tuple always corresponds to the position of
+   * the set from which it came in the input list. Note that if any input set is
+   * empty, the Cartesian product will also be empty. If no sets at all are
+   * provided, the resulting Cartesian product has one element, an empty list
+   * (counter-intuitive, but mathematically consistent).
+   *
+   * <p><i>Performance notes:</i> while the cartesian product of sets of size
+   * {@code m, n, p} is a set of size {@code m x n x p}, its actual memory
+   * consumption is much smaller. When the cartesian set is constructed, the
+   * input sets are merely copied. Only as the resulting set is iterated are the
+   * individual lists created, and these are not retained after iteration.
+   *
+   * @param sets the sets to choose elements from, in the order that
+   *     the elements chosen from those sets should appear in the resulting
+   *     lists
+   * @param <B> any common base class shared by all axes (often just {@link
+   *     Object})
+   * @return the Cartesian product, as an immutable set containing immutable
+   *     lists
+   * @throws NullPointerException if {@code sets}, any one of the {@code sets},
+   *     or any element of a provided set is null
+   * @since 2.0
+   */
+  public static <B> Set<List<B>> cartesianProduct(
+      Set<? extends B>... sets) {
+    return cartesianProduct(Arrays.asList(sets));
+  }
+
+  private static class CartesianSet<B> extends AbstractSet<List<B>> {
+    final ImmutableList<Axis> axes;
+    final int size;
+
+    CartesianSet(List<? extends Set<? extends B>> sets) {
+      int dividend = 1;
+      ImmutableList.Builder<Axis> builder = ImmutableList.builder();
+      try {
+        for (Set<? extends B> set : sets) {
+          Axis axis = new Axis(set, dividend);
+          builder.add(axis);
+          dividend = IntMath.checkedMultiply(dividend, axis.size());
+        }
+      } catch (ArithmeticException overflow) {
+        throw new IllegalArgumentException("cartesian product too big");
+      }
+      this.axes = builder.build();
+      size = dividend;
+    }
+
+    @Override public int size() {
+      return size;
+    }
+
+    @Override public UnmodifiableIterator<List<B>> iterator() {
+      return new UnmodifiableIterator<List<B>>() {
+        int index;
+
+        @Override
+        public boolean hasNext() {
+          return index < size;
+        }
+
+        @Override
+        public List<B> next() {
+          if (!hasNext()) {
+            throw new NoSuchElementException();
+          }
+
+          Object[] tuple = new Object[axes.size()];
+          for (int i = 0 ; i < tuple.length; i++) {
+            tuple[i] = axes.get(i).getForIndex(index);
+          }
+          index++;
+
+          @SuppressWarnings("unchecked") // only B's are put in here
+          List<B> result = (ImmutableList<B>) ImmutableList.copyOf(tuple);
+          return result;
+        }
+      };
+    }
+
+    @Override public boolean contains(Object element) {
+      if (!(element instanceof List<?>)) {
+        return false;
+      }
+      List<?> tuple = (List<?>) element;
+      int dimensions = axes.size();
+      if (tuple.size() != dimensions) {
+        return false;
+      }
+      for (int i = 0; i < dimensions; i++) {
+        if (!axes.get(i).contains(tuple.get(i))) {
+          return false;
+        }
+      }
+      return true;
+    }
+
+    @Override public boolean equals(@Nullable Object object) {
+      // Warning: this is broken if size() == 0, so it is critical that we
+      // substitute an empty ImmutableSet to the user in place of this
+      if (object instanceof CartesianSet) {
+        CartesianSet<?> that = (CartesianSet<?>) object;
+        return this.axes.equals(that.axes);
+      }
+      return super.equals(object);
+    }
+
+    @Override public int hashCode() {
+      // Warning: this is broken if size() == 0, so it is critical that we
+      // substitute an empty ImmutableSet to the user in place of this
+
+      // It's a weird formula, but tests prove it works.
+      int adjust = size - 1;
+      for (int i = 0; i < axes.size(); i++) {
+        adjust *= 31;
+      }
+      return axes.hashCode() + adjust;
+    }
+
+    private class Axis {
+      final ImmutableSet<? extends B> choices;
+      final ImmutableList<? extends B> choicesList;
+      final int dividend;
+
+      Axis(Set<? extends B> set, int dividend) {
+        choices = ImmutableSet.copyOf(set);
+        choicesList = choices.asList();
+        this.dividend = dividend;
+      }
+
+      int size() {
+        return choices.size();
+      }
+
+      B getForIndex(int index) {
+        return choicesList.get(index / dividend % size());
+      }
+
+      boolean contains(Object target) {
+        return choices.contains(target);
+      }
+
+      @Override public boolean equals(Object obj) {
+        if (obj instanceof CartesianSet.Axis) {
+          CartesianSet.Axis that = (CartesianSet.Axis) obj;
+          return this.choices.equals(that.choices);
+          // dividends must be equal or we wouldn't have gotten this far
+        }
+        return false;
+      }
+
+      @Override public int hashCode() {
+        // Because Axis instances are not exposed, we can
+        // opportunistically choose whatever bizarre formula happens
+        // to make CartesianSet.hashCode() as simple as possible.
+        return size / choices.size() * choices.hashCode();
+      }
+    }
+  }
+
+  /**
+   * Returns the set of all possible subsets of {@code set}. For example,
+   * {@code powerSet(ImmutableSet.of(1, 2))} returns the set {@code {{},
+   * {1}, {2}, {1, 2}}}.
+   *
+   * <p>Elements appear in these subsets in the same iteration order as they
+   * appeared in the input set. The order in which these subsets appear in the
+   * outer set is undefined. Note that the power set of the empty set is not the
+   * empty set, but a one-element set containing the empty set.
+   *
+   * <p>The returned set and its constituent sets use {@code equals} to decide
+   * whether two elements are identical, even if the input set uses a different
+   * concept of equivalence.
+   *
+   * <p><i>Performance notes:</i> while the power set of a set with size {@code
+   * n} is of size {@code 2^n}, its memory usage is only {@code O(n)}. When the
+   * power set is constructed, the input set is merely copied. Only as the
+   * power set is iterated are the individual subsets created, and these subsets
+   * themselves occupy only a few bytes of memory regardless of their size.
+   *
+   * @param set the set of elements to construct a power set from
+   * @return the power set, as an immutable set of immutable sets
+   * @throws IllegalArgumentException if {@code set} has more than 30 unique
+   *     elements (causing the power set size to exceed the {@code int} range)
+   * @throws NullPointerException if {@code set} is or contains {@code null}
+   * @see <a href="http://en.wikipedia.org/wiki/Power_set">Power set article at
+   *      Wikipedia</a>
+   * @since 4.0
+   */
+  @GwtCompatible(serializable = false)
+  public static <E> Set<Set<E>> powerSet(Set<E> set) {
+    ImmutableSet<E> input = ImmutableSet.copyOf(set);
+    checkArgument(input.size() <= 30,
+        "Too many elements to create power set: %s > 30", input.size());
+    return new PowerSet<E>(input);
+  }
+
+  private static final class PowerSet<E> extends AbstractSet<Set<E>> {
+    final ImmutableSet<E> inputSet;
+    final ImmutableList<E> inputList;
+    final int powerSetSize;
+
+    PowerSet(ImmutableSet<E> input) {
+      this.inputSet = input;
+      this.inputList = input.asList();
+      this.powerSetSize = 1 << input.size();
+    }
+
+    @Override public int size() {
+      return powerSetSize;
+    }
+
+    @Override public boolean isEmpty() {
+      return false;
+    }
+
+    @Override public Iterator<Set<E>> iterator() {
+      return new AbstractIndexedListIterator<Set<E>>(powerSetSize) {
+        @Override protected Set<E> get(final int setBits) {
+          return new AbstractSet<E>() {
+            @Override public int size() {
+              return Integer.bitCount(setBits);
+            }
+            @Override public Iterator<E> iterator() {
+              return new BitFilteredSetIterator<E>(inputList, setBits);
+            }
+          };
+        }
+      };
+    }
+
+    private static final class BitFilteredSetIterator<E>
+        extends UnmodifiableIterator<E> {
+      final ImmutableList<E> input;
+      int remainingSetBits;
+
+      BitFilteredSetIterator(ImmutableList<E> input, int allSetBits) {
+        this.input = input;
+        this.remainingSetBits = allSetBits;
+      }
+
+      @Override public boolean hasNext() {
+        return remainingSetBits != 0;
+      }
+
+      @Override public E next() {
+        int index = Integer.numberOfTrailingZeros(remainingSetBits);
+        if (index == 32) {
+          throw new NoSuchElementException();
+        }
+
+        int currentElementMask = 1 << index;
+        remainingSetBits &= ~currentElementMask;
+        return input.get(index);
+      }
+    }
+
+    @Override public boolean contains(@Nullable Object obj) {
+      if (obj instanceof Set) {
+        Set<?> set = (Set<?>) obj;
+        return inputSet.containsAll(set);
+      }
+      return false;
+    }
+
+    @Override public boolean equals(@Nullable Object obj) {
+      if (obj instanceof PowerSet) {
+        PowerSet<?> that = (PowerSet<?>) obj;
+        return inputSet.equals(that.inputSet);
+      }
+      return super.equals(obj);
+    }
+
+    @Override public int hashCode() {
+      /*
+       * The sum of the sums of the hash codes in each subset is just the sum of
+       * each input element's hash code times the number of sets that element
+       * appears in. Each element appears in exactly half of the 2^n sets, so:
+       */
+      return inputSet.hashCode() << (inputSet.size() - 1);
+    }
+
+    @Override public String toString() {
+      return "powerSet(" + inputSet + ")";
+    }
+  }
+
+  /**
+   * An implementation for {@link Set#hashCode()}.
+   */
+  static int hashCodeImpl(Set<?> s) {
+    int hashCode = 0;
+    for (Object o : s) {
+      hashCode += o != null ? o.hashCode() : 0;
+    }
+    return hashCode;
+  }
+
+  /**
+   * An implementation for {@link Set#equals(Object)}.
+   */
+  static boolean equalsImpl(Set<?> s, @Nullable Object object){
+    if (s == object) {
+      return true;
+    }
+    if (object instanceof Set) {
+      Set<?> o = (Set<?>) object;
+
+      try {
+        return s.size() == o.size() && s.containsAll(o);
+      } catch (NullPointerException ignored) {
+        return false;
+      } catch (ClassCastException ignored) {
+        return false;
+      }
+    }
+    return false;
+  }
+
+  /**
+   * Creates a view of Set<B> for a Set<A>, given a bijection between A and B.
+   * (Modelled for now as InvertibleFunction<A, B>, can't be Converter<A, B>
+   * because that's not in Guava, though both designs are less than optimal).
+   * Note that the bijection is treated as undefined for values not in the
+   * given Set<A> - it doesn't have to define a true bijection for those.
+   *
+   * <p>Note that the returned Set's contains method is unsafe -
+   * you *must* pass an instance of B to it, since the bijection
+   * can only invert B's (not any Object) back to A, so we can
+   * then delegate the call to the original Set<A>.
+   */
+  static <A, B> Set<B> transform(
+      Set<A> set, InvertibleFunction<A, B> bijection) {
+    return new TransformedSet<A, B>(
+        Preconditions.checkNotNull(set, "set"),
+        Preconditions.checkNotNull(bijection, "bijection")
+    );
+  }
+
+  /**
+   * Stop-gap measure since there is no bijection related type in Guava.
+   */
+  abstract static class InvertibleFunction<A, B> implements Function<A, B> {
+    abstract A invert(B b);
+
+    public InvertibleFunction<B, A> inverse() {
+      return new InvertibleFunction<B, A>() {
+        @Override public A apply(B b) {
+          return InvertibleFunction.this.invert(b);
+        }
+
+        @Override B invert(A a) {
+          return InvertibleFunction.this.apply(a);
+        }
+
+        // Not required per se, but just for good karma.
+        @Override public InvertibleFunction<A, B> inverse() {
+          return InvertibleFunction.this;
+        }
+      };
+    }
+  }
+
+  private static class TransformedSet<A, B> extends AbstractSet<B> {
+    final Set<A> delegate;
+    final InvertibleFunction<A, B> bijection;
+
+    TransformedSet(Set<A> delegate, InvertibleFunction<A, B> bijection) {
+      this.delegate = delegate;
+      this.bijection = bijection;
+    }
+
+    @Override public Iterator<B> iterator() {
+      return Iterators.transform(delegate.iterator(), bijection);
+    }
+
+    @Override public int size() {
+      return delegate.size();
+    }
+
+    @SuppressWarnings("unchecked") // unsafe, passed object *must* be B
+    @Override public boolean contains(Object o) {
+      B b = (B) o;
+      A a = bijection.invert(b);
+      /*
+       * Mathematically, Converter<A, B> defines a bijection between ALL A's
+       * on ALL B's. Here we concern ourselves with a subset
+       * of this relation: we only want the part that is defined by a *subset*
+       * of all A's (defined by that Set<A> delegate), and the image
+       * of *that* on B (which is this set). We don't care whether
+       * the converter is *not* a bijection for A's that are not in Set<A>
+       * or B's not in this Set<B>.
+       *
+       * We only want to return true if and only f the user passes a B instance
+       * that is contained in precisely in the image of Set<A>.
+       *
+       * The first test is whether the inverse image of this B is indeed
+       * in Set<A>. But we don't know whether that B belongs in this Set<B>
+       * or not; if not, the converter is free to return
+       * anything it wants, even an element of Set<A> (and this relationship
+       * is not part of the Set<A> <--> Set<B> bijection), and we must not
+       * be confused by that. So we have to do a final check to see if the
+       * image of that A is really equivalent to the passed B, which proves
+       * that the given B belongs indeed in the image of Set<A>.
+       */
+      return delegate.contains(a) && Objects.equal(bijection.apply(a), o);
+    }
+
+    @Override public boolean add(B b) {
+      return delegate.add(bijection.invert(b));
+    }
+
+    @SuppressWarnings("unchecked") // unsafe, passed object *must* be B
+    @Override public boolean remove(Object o) {
+      return contains(o) && delegate.remove(bijection.invert((B) o));
+    }
+
+    @Override public void clear() {
+      delegate.clear();
+    }
+  }
+
+  /**
+   * Remove each element in an iterable from a set.
+   */
+  static boolean removeAllImpl(Set<?> set, Iterable<?> iterable) {
+    // TODO(jlevy): Have ForwardingSet.standardRemoveAll() call this method.
+    boolean changed = false;
+    for (Object o : iterable) {
+      changed |= set.remove(o);
+    }
+    return changed;
+  }
+}
diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/SingletonImmutableList.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/SingletonImmutableList.java
new file mode 100644
index 0000000..6172191
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/SingletonImmutableList.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.util.Collections;
+
+/**
+ * GWT emulated version of {@link SingletonImmutableList}.
+ *
+ * @author Hayward Chan
+ */
+final class SingletonImmutableList<E> extends ImmutableList<E> {
+
+  // This reference is used both by the custom field serializer, and by the
+  // GWT compiler to infer the elements of the lists that needs to be
+  // serialized.
+  E element;
+
+  SingletonImmutableList(E element) {
+    super(Collections.singletonList(checkNotNull(element)));
+    this.element = element;
+  }
+}
diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/SingletonImmutableMap.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/SingletonImmutableMap.java
new file mode 100644
index 0000000..236d76e
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/SingletonImmutableMap.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.util.Collections;
+
+/**
+ * GWT emulation of {@link SingletonImmutableMap}.
+ *
+ * @author Hayward Chan
+ */
+final class SingletonImmutableMap<K, V> extends ImmutableMap<K, V> {
+
+  // These references are used both by the custom field serializer, and by the
+  // GWT compiler to infer the keys and values of the map that needs to be
+  // serialized.
+  //
+  // Although they are non-final, they are package private and the reference is
+  // never modified after a map is constructed.
+  K singleKey;
+  V singleValue;
+
+  SingletonImmutableMap(K key, V value) {
+    super(Collections.singletonMap(checkNotNull(key), checkNotNull(value)));
+    this.singleKey = key;
+    this.singleValue = value;
+  }
+}
diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/SingletonImmutableSet.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/SingletonImmutableSet.java
new file mode 100644
index 0000000..b51d4aa
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/SingletonImmutableSet.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.util.Collections;
+
+/**
+ * GWT emulation of {@link SingletonImmutableSet}.
+ *
+ * @author Hayward Chan
+ */
+final class SingletonImmutableSet<E> extends ImmutableSet<E> {
+    
+  // This reference is used both by the custom field serializer, and by the
+  // GWT compiler to infer the elements of the lists that needs to be
+  // serialized.
+  //
+  // Although this reference is non-final, it doesn't change after set creation.
+  E element;
+
+  SingletonImmutableSet(E element) {
+    super(Collections.singleton(checkNotNull(element)));
+    this.element = element;
+  }
+}
diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/Synchronized.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/Synchronized.java
new file mode 100644
index 0000000..fd09c97
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/Synchronized.java
@@ -0,0 +1,1206 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.VisibleForTesting;
+
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Map;
+import java.util.RandomAccess;
+import java.util.Set;
+import java.util.SortedMap;
+import java.util.SortedSet;
+
+import javax.annotation.Nullable;
+
+/**
+ * Synchronized collection views. The returned synchronized collection views are
+ * serializable if the backing collection and the mutex are serializable.
+ *
+ * <p>If {@code null} is passed as the {@code mutex} parameter to any of this
+ * class's top-level methods or inner class constructors, the created object
+ * uses itself as the synchronization mutex.
+ *
+ * <p>This class should be used by other collection classes only.
+ *
+ * @author Mike Bostock
+ * @author Jared Levy
+ */
+@GwtCompatible(emulated = true)
+final class Synchronized {
+  private Synchronized() {}
+
+  static class SynchronizedObject implements Serializable {
+    final Object delegate;
+    final Object mutex;
+
+    SynchronizedObject(Object delegate, @Nullable Object mutex) {
+      this.delegate = checkNotNull(delegate);
+      this.mutex = (mutex == null) ? this : mutex;
+    }
+
+    Object delegate() {
+      return delegate;
+    }
+
+    // No equals and hashCode; see ForwardingObject for details.
+
+    @Override public String toString() {
+      synchronized (mutex) {
+        return delegate.toString();
+      }
+    }
+
+    // Serialization invokes writeObject only when it's private.
+    // The SynchronizedObject subclasses don't need a writeObject method since
+    // they don't contain any non-transient member variables, while the
+    // following writeObject() handles the SynchronizedObject members.
+  }
+
+  private static <E> Collection<E> collection(
+      Collection<E> collection, @Nullable Object mutex) {
+    return new SynchronizedCollection<E>(collection, mutex);
+  }
+
+  @VisibleForTesting static class SynchronizedCollection<E>
+      extends SynchronizedObject implements Collection<E> {
+    private SynchronizedCollection(
+        Collection<E> delegate, @Nullable Object mutex) {
+      super(delegate, mutex);
+    }
+
+    @SuppressWarnings("unchecked")
+    @Override Collection<E> delegate() {
+      return (Collection<E>) super.delegate();
+    }
+
+    @Override
+    public boolean add(E e) {
+      synchronized (mutex) {
+        return delegate().add(e);
+      }
+    }
+
+    @Override
+    public boolean addAll(Collection<? extends E> c) {
+      synchronized (mutex) {
+        return delegate().addAll(c);
+      }
+    }
+
+    @Override
+    public void clear() {
+      synchronized (mutex) {
+        delegate().clear();
+      }
+    }
+
+    @Override
+    public boolean contains(Object o) {
+      synchronized (mutex) {
+        return delegate().contains(o);
+      }
+    }
+
+    @Override
+    public boolean containsAll(Collection<?> c) {
+      synchronized (mutex) {
+        return delegate().containsAll(c);
+      }
+    }
+
+    @Override
+    public boolean isEmpty() {
+      synchronized (mutex) {
+        return delegate().isEmpty();
+      }
+    }
+
+    @Override
+    public Iterator<E> iterator() {
+      return delegate().iterator(); // manually synchronized
+    }
+
+    @Override
+    public boolean remove(Object o) {
+      synchronized (mutex) {
+        return delegate().remove(o);
+      }
+    }
+
+    @Override
+    public boolean removeAll(Collection<?> c) {
+      synchronized (mutex) {
+        return delegate().removeAll(c);
+      }
+    }
+
+    @Override
+    public boolean retainAll(Collection<?> c) {
+      synchronized (mutex) {
+        return delegate().retainAll(c);
+      }
+    }
+
+    @Override
+    public int size() {
+      synchronized (mutex) {
+        return delegate().size();
+      }
+    }
+
+    @Override
+    public Object[] toArray() {
+      synchronized (mutex) {
+        return delegate().toArray();
+      }
+    }
+
+    @Override
+    public <T> T[] toArray(T[] a) {
+      synchronized (mutex) {
+        return delegate().toArray(a);
+      }
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  @VisibleForTesting static <E> Set<E> set(Set<E> set, @Nullable Object mutex) {
+    return new SynchronizedSet<E>(set, mutex);
+  }
+
+  static class SynchronizedSet<E>
+      extends SynchronizedCollection<E> implements Set<E> {
+    
+    SynchronizedSet(Set<E> delegate, @Nullable Object mutex) {
+      super(delegate, mutex);
+    }
+
+    @Override Set<E> delegate() {
+      return (Set<E>) super.delegate();
+    }
+
+    @Override public boolean equals(Object o) {
+      if (o == this) {
+        return true;
+      }
+      synchronized (mutex) {
+        return delegate().equals(o);
+      }
+    }
+
+    @Override public int hashCode() {
+      synchronized (mutex) {
+        return delegate().hashCode();
+      }
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  private static <E> SortedSet<E> sortedSet(
+      SortedSet<E> set, @Nullable Object mutex) {
+    return new SynchronizedSortedSet<E>(set, mutex);
+  }
+
+  static class SynchronizedSortedSet<E> extends SynchronizedSet<E>
+      implements SortedSet<E> {
+    SynchronizedSortedSet(SortedSet<E> delegate, @Nullable Object mutex) {
+      super(delegate, mutex);
+    }
+
+    @Override SortedSet<E> delegate() {
+      return (SortedSet<E>) super.delegate();
+    }
+
+    @Override
+    public Comparator<? super E> comparator() {
+      synchronized (mutex) {
+        return delegate().comparator();
+      }
+    }
+
+    @Override
+    public SortedSet<E> subSet(E fromElement, E toElement) {
+      synchronized (mutex) {
+        return sortedSet(delegate().subSet(fromElement, toElement), mutex);
+      }
+    }
+
+    @Override
+    public SortedSet<E> headSet(E toElement) {
+      synchronized (mutex) {
+        return sortedSet(delegate().headSet(toElement), mutex);
+      }
+    }
+
+    @Override
+    public SortedSet<E> tailSet(E fromElement) {
+      synchronized (mutex) {
+        return sortedSet(delegate().tailSet(fromElement), mutex);
+      }
+    }
+
+    @Override
+    public E first() {
+      synchronized (mutex) {
+        return delegate().first();
+      }
+    }
+
+    @Override
+    public E last() {
+      synchronized (mutex) {
+        return delegate().last();
+      }
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  private static <E> List<E> list(List<E> list, @Nullable Object mutex) {
+    return (list instanceof RandomAccess)
+        ? new SynchronizedRandomAccessList<E>(list, mutex)
+        : new SynchronizedList<E>(list, mutex);
+  }
+
+  private static class SynchronizedList<E> extends SynchronizedCollection<E>
+      implements List<E> {
+    SynchronizedList(List<E> delegate, @Nullable Object mutex) {
+      super(delegate, mutex);
+    }
+
+    @Override List<E> delegate() {
+      return (List<E>) super.delegate();
+    }
+
+    @Override
+    public void add(int index, E element) {
+      synchronized (mutex) {
+        delegate().add(index, element);
+      }
+    }
+
+    @Override
+    public boolean addAll(int index, Collection<? extends E> c) {
+      synchronized (mutex) {
+        return delegate().addAll(index, c);
+      }
+    }
+
+    @Override
+    public E get(int index) {
+      synchronized (mutex) {
+        return delegate().get(index);
+      }
+    }
+
+    @Override
+    public int indexOf(Object o) {
+      synchronized (mutex) {
+        return delegate().indexOf(o);
+      }
+    }
+
+    @Override
+    public int lastIndexOf(Object o) {
+      synchronized (mutex) {
+        return delegate().lastIndexOf(o);
+      }
+    }
+
+    @Override
+    public ListIterator<E> listIterator() {
+      return delegate().listIterator(); // manually synchronized
+    }
+
+    @Override
+    public ListIterator<E> listIterator(int index) {
+      return delegate().listIterator(index); // manually synchronized
+    }
+
+    @Override
+    public E remove(int index) {
+      synchronized (mutex) {
+        return delegate().remove(index);
+      }
+    }
+
+    @Override
+    public E set(int index, E element) {
+      synchronized (mutex) {
+        return delegate().set(index, element);
+      }
+    }
+
+    @Override
+    public List<E> subList(int fromIndex, int toIndex) {
+      synchronized (mutex) {
+        return list(delegate().subList(fromIndex, toIndex), mutex);
+      }
+    }
+
+    @Override public boolean equals(Object o) {
+      if (o == this) {
+        return true;
+      }
+      synchronized (mutex) {
+        return delegate().equals(o);
+      }
+    }
+
+    @Override public int hashCode() {
+      synchronized (mutex) {
+        return delegate().hashCode();
+      }
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  private static class SynchronizedRandomAccessList<E>
+      extends SynchronizedList<E> implements RandomAccess {
+    SynchronizedRandomAccessList(List<E> list, @Nullable Object mutex) {
+      super(list, mutex);
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  static <E> Multiset<E> multiset(
+      Multiset<E> multiset, @Nullable Object mutex) {
+    if (multiset instanceof SynchronizedMultiset ||
+        multiset instanceof ImmutableMultiset) {
+      return multiset;
+    }
+    return new SynchronizedMultiset<E>(multiset, mutex);
+  }
+
+  private static class SynchronizedMultiset<E> extends SynchronizedCollection<E>
+      implements Multiset<E> {
+    transient Set<E> elementSet;
+    transient Set<Entry<E>> entrySet;
+
+    SynchronizedMultiset(Multiset<E> delegate, @Nullable Object mutex) {
+      super(delegate, mutex);
+    }
+
+    @Override Multiset<E> delegate() {
+      return (Multiset<E>) super.delegate();
+    }
+
+    @Override
+    public int count(Object o) {
+      synchronized (mutex) {
+        return delegate().count(o);
+      }
+    }
+
+    @Override
+    public int add(E e, int n) {
+      synchronized (mutex) {
+        return delegate().add(e, n);
+      }
+    }
+
+    @Override
+    public int remove(Object o, int n) {
+      synchronized (mutex) {
+        return delegate().remove(o, n);
+      }
+    }
+
+    @Override
+    public int setCount(E element, int count) {
+      synchronized (mutex) {
+        return delegate().setCount(element, count);
+      }
+    }
+
+    @Override
+    public boolean setCount(E element, int oldCount, int newCount) {
+      synchronized (mutex) {
+        return delegate().setCount(element, oldCount, newCount);
+      }
+    }
+
+    @Override
+    public Set<E> elementSet() {
+      synchronized (mutex) {
+        if (elementSet == null) {
+          elementSet = typePreservingSet(delegate().elementSet(), mutex);
+        }
+        return elementSet;
+      }
+    }
+
+    @Override
+    public Set<Entry<E>> entrySet() {
+      synchronized (mutex) {
+        if (entrySet == null) {
+          entrySet = typePreservingSet(delegate().entrySet(), mutex);
+        }
+        return entrySet;
+      }
+    }
+
+    @Override public boolean equals(Object o) {
+      if (o == this) {
+        return true;
+      }
+      synchronized (mutex) {
+        return delegate().equals(o);
+      }
+    }
+
+    @Override public int hashCode() {
+      synchronized (mutex) {
+        return delegate().hashCode();
+      }
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  static <K, V> Multimap<K, V> multimap(
+      Multimap<K, V> multimap, @Nullable Object mutex) {
+    if (multimap instanceof SynchronizedMultimap ||
+        multimap instanceof ImmutableMultimap) {
+      return multimap;
+    }
+    return new SynchronizedMultimap<K, V>(multimap, mutex);
+  }
+
+  private static class SynchronizedMultimap<K, V> extends SynchronizedObject
+      implements Multimap<K, V> {
+    transient Set<K> keySet;
+    transient Collection<V> valuesCollection;
+    transient Collection<Map.Entry<K, V>> entries;
+    transient Map<K, Collection<V>> asMap;
+    transient Multiset<K> keys;
+
+    @SuppressWarnings("unchecked")
+    @Override Multimap<K, V> delegate() {
+      return (Multimap<K, V>) super.delegate();
+    }
+
+    SynchronizedMultimap(Multimap<K, V> delegate, @Nullable Object mutex) {
+      super(delegate, mutex);
+    }
+
+    @Override
+    public int size() {
+      synchronized (mutex) {
+        return delegate().size();
+      }
+    }
+
+    @Override
+    public boolean isEmpty() {
+      synchronized (mutex) {
+        return delegate().isEmpty();
+      }
+    }
+
+    @Override
+    public boolean containsKey(Object key) {
+      synchronized (mutex) {
+        return delegate().containsKey(key);
+      }
+    }
+
+    @Override
+    public boolean containsValue(Object value) {
+      synchronized (mutex) {
+        return delegate().containsValue(value);
+      }
+    }
+
+    @Override
+    public boolean containsEntry(Object key, Object value) {
+      synchronized (mutex) {
+        return delegate().containsEntry(key, value);
+      }
+    }
+
+    @Override
+    public Collection<V> get(K key) {
+      synchronized (mutex) {
+        return typePreservingCollection(delegate().get(key), mutex);
+      }
+    }
+
+    @Override
+    public boolean put(K key, V value) {
+      synchronized (mutex) {
+        return delegate().put(key, value);
+      }
+    }
+
+    @Override
+    public boolean putAll(K key, Iterable<? extends V> values) {
+      synchronized (mutex) {
+        return delegate().putAll(key, values);
+      }
+    }
+
+    @Override
+    public boolean putAll(Multimap<? extends K, ? extends V> multimap) {
+      synchronized (mutex) {
+        return delegate().putAll(multimap);
+      }
+    }
+
+    @Override
+    public Collection<V> replaceValues(K key, Iterable<? extends V> values) {
+      synchronized (mutex) {
+        return delegate().replaceValues(key, values); // copy not synchronized
+      }
+    }
+
+    @Override
+    public boolean remove(Object key, Object value) {
+      synchronized (mutex) {
+        return delegate().remove(key, value);
+      }
+    }
+
+    @Override
+    public Collection<V> removeAll(Object key) {
+      synchronized (mutex) {
+        return delegate().removeAll(key); // copy not synchronized
+      }
+    }
+
+    @Override
+    public void clear() {
+      synchronized (mutex) {
+        delegate().clear();
+      }
+    }
+
+    @Override
+    public Set<K> keySet() {
+      synchronized (mutex) {
+        if (keySet == null) {
+          keySet = typePreservingSet(delegate().keySet(), mutex);
+        }
+        return keySet;
+      }
+    }
+
+    @Override
+    public Collection<V> values() {
+      synchronized (mutex) {
+        if (valuesCollection == null) {
+          valuesCollection = collection(delegate().values(), mutex);
+        }
+        return valuesCollection;
+      }
+    }
+
+    @Override
+    public Collection<Map.Entry<K, V>> entries() {
+      synchronized (mutex) {
+        if (entries == null) {
+          entries = typePreservingCollection(delegate().entries(), mutex);
+        }
+        return entries;
+      }
+    }
+
+    @Override
+    public Map<K, Collection<V>> asMap() {
+      synchronized (mutex) {
+        if (asMap == null) {
+          asMap = new SynchronizedAsMap<K, V>(delegate().asMap(), mutex);
+        }
+        return asMap;
+      }
+    }
+
+    @Override
+    public Multiset<K> keys() {
+      synchronized (mutex) {
+        if (keys == null) {
+          keys = multiset(delegate().keys(), mutex);
+        }
+        return keys;
+      }
+    }
+
+    @Override public boolean equals(Object o) {
+      if (o == this) {
+        return true;
+      }
+      synchronized (mutex) {
+        return delegate().equals(o);
+      }
+    }
+
+    @Override public int hashCode() {
+      synchronized (mutex) {
+        return delegate().hashCode();
+      }
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  static <K, V> ListMultimap<K, V> listMultimap(
+      ListMultimap<K, V> multimap, @Nullable Object mutex) {
+    if (multimap instanceof SynchronizedListMultimap ||
+        multimap instanceof ImmutableListMultimap) {
+      return multimap;
+    }
+    return new SynchronizedListMultimap<K, V>(multimap, mutex);
+  }
+
+  private static class SynchronizedListMultimap<K, V>
+      extends SynchronizedMultimap<K, V> implements ListMultimap<K, V> {
+    SynchronizedListMultimap(
+        ListMultimap<K, V> delegate, @Nullable Object mutex) {
+      super(delegate, mutex);
+    }
+    @Override ListMultimap<K, V> delegate() {
+      return (ListMultimap<K, V>) super.delegate();
+    }
+    @Override public List<V> get(K key) {
+      synchronized (mutex) {
+        return list(delegate().get(key), mutex);
+      }
+    }
+    @Override public List<V> removeAll(Object key) {
+      synchronized (mutex) {
+        return delegate().removeAll(key); // copy not synchronized
+      }
+    }
+    @Override public List<V> replaceValues(
+        K key, Iterable<? extends V> values) {
+      synchronized (mutex) {
+        return delegate().replaceValues(key, values); // copy not synchronized
+      }
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  static <K, V> SetMultimap<K, V> setMultimap(
+      SetMultimap<K, V> multimap, @Nullable Object mutex) {
+    if (multimap instanceof SynchronizedSetMultimap ||
+        multimap instanceof ImmutableSetMultimap) {
+      return multimap;
+    }
+    return new SynchronizedSetMultimap<K, V>(multimap, mutex);
+  }
+
+  private static class SynchronizedSetMultimap<K, V>
+      extends SynchronizedMultimap<K, V> implements SetMultimap<K, V> {
+    transient Set<Map.Entry<K, V>> entrySet;
+
+    SynchronizedSetMultimap(
+        SetMultimap<K, V> delegate, @Nullable Object mutex) {
+      super(delegate, mutex);
+    }
+    @Override SetMultimap<K, V> delegate() {
+      return (SetMultimap<K, V>) super.delegate();
+    }
+    @Override public Set<V> get(K key) {
+      synchronized (mutex) {
+        return set(delegate().get(key), mutex);
+      }
+    }
+    @Override public Set<V> removeAll(Object key) {
+      synchronized (mutex) {
+        return delegate().removeAll(key); // copy not synchronized
+      }
+    }
+    @Override public Set<V> replaceValues(
+        K key, Iterable<? extends V> values) {
+      synchronized (mutex) {
+        return delegate().replaceValues(key, values); // copy not synchronized
+      }
+    }
+    @Override public Set<Map.Entry<K, V>> entries() {
+      synchronized (mutex) {
+        if (entrySet == null) {
+          entrySet = set(delegate().entries(), mutex);
+        }
+        return entrySet;
+      }
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  static <K, V> SortedSetMultimap<K, V> sortedSetMultimap(
+      SortedSetMultimap<K, V> multimap, @Nullable Object mutex) {
+    if (multimap instanceof SynchronizedSortedSetMultimap) {
+      return multimap;
+    }
+    return new SynchronizedSortedSetMultimap<K, V>(multimap, mutex);
+  }
+
+  private static class SynchronizedSortedSetMultimap<K, V>
+      extends SynchronizedSetMultimap<K, V> implements SortedSetMultimap<K, V> {
+    SynchronizedSortedSetMultimap(
+        SortedSetMultimap<K, V> delegate, @Nullable Object mutex) {
+      super(delegate, mutex);
+    }
+    @Override SortedSetMultimap<K, V> delegate() {
+      return (SortedSetMultimap<K, V>) super.delegate();
+    }
+    @Override public SortedSet<V> get(K key) {
+      synchronized (mutex) {
+        return sortedSet(delegate().get(key), mutex);
+      }
+    }
+    @Override public SortedSet<V> removeAll(Object key) {
+      synchronized (mutex) {
+        return delegate().removeAll(key); // copy not synchronized
+      }
+    }
+    @Override public SortedSet<V> replaceValues(
+        K key, Iterable<? extends V> values) {
+      synchronized (mutex) {
+        return delegate().replaceValues(key, values); // copy not synchronized
+      }
+    }
+    @Override
+    public Comparator<? super V> valueComparator() {
+      synchronized (mutex) {
+        return delegate().valueComparator();
+      }
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  private static <E> Collection<E> typePreservingCollection(
+      Collection<E> collection, @Nullable Object mutex) {
+    if (collection instanceof SortedSet) {
+      return sortedSet((SortedSet<E>) collection, mutex);
+    }
+    if (collection instanceof Set) {
+      return set((Set<E>) collection, mutex);
+    }
+    if (collection instanceof List) {
+      return list((List<E>) collection, mutex);
+    }
+    return collection(collection, mutex);
+  }
+
+  private static <E> Set<E> typePreservingSet(
+      Set<E> set, @Nullable Object mutex) {
+    if (set instanceof SortedSet) {
+      return sortedSet((SortedSet<E>) set, mutex);
+    } else {
+      return set(set, mutex);
+    }
+  }
+
+  private static class SynchronizedAsMapEntries<K, V>
+      extends SynchronizedSet<Map.Entry<K, Collection<V>>> {
+    SynchronizedAsMapEntries(
+        Set<Map.Entry<K, Collection<V>>> delegate, @Nullable Object mutex) {
+      super(delegate, mutex);
+    }
+
+    @Override public Iterator<Map.Entry<K, Collection<V>>> iterator() {
+      // Must be manually synchronized.
+      final Iterator<Map.Entry<K, Collection<V>>> iterator = super.iterator();
+      return new ForwardingIterator<Map.Entry<K, Collection<V>>>() {
+        @Override protected Iterator<Map.Entry<K, Collection<V>>> delegate() {
+          return iterator;
+        }
+
+        @Override public Map.Entry<K, Collection<V>> next() {
+          final Map.Entry<K, Collection<V>> entry = iterator.next();
+          return new ForwardingMapEntry<K, Collection<V>>() {
+            @Override protected Map.Entry<K, Collection<V>> delegate() {
+              return entry;
+            }
+            @Override public Collection<V> getValue() {
+              return typePreservingCollection(entry.getValue(), mutex);
+            }
+          };
+        }
+      };
+    }
+
+    // See Collections.CheckedMap.CheckedEntrySet for details on attacks.
+
+    @Override public Object[] toArray() {
+      synchronized (mutex) {
+        return ObjectArrays.toArrayImpl(delegate());
+      }
+    }
+    @Override public <T> T[] toArray(T[] array) {
+      synchronized (mutex) {
+        return ObjectArrays.toArrayImpl(delegate(), array);
+      }
+    }
+    @Override public boolean contains(Object o) {
+      synchronized (mutex) {
+        return Maps.containsEntryImpl(delegate(), o);
+      }
+    }
+    @Override public boolean containsAll(Collection<?> c) {
+      synchronized (mutex) {
+        return Collections2.containsAllImpl(delegate(), c);
+      }
+    }
+    @Override public boolean equals(Object o) {
+      if (o == this) {
+        return true;
+      }
+      synchronized (mutex) {
+        return Sets.equalsImpl(delegate(), o);
+      }
+    }
+    @Override public boolean remove(Object o) {
+      synchronized (mutex) {
+        return Maps.removeEntryImpl(delegate(), o);
+      }
+    }
+    @Override public boolean removeAll(Collection<?> c) {
+      synchronized (mutex) {
+        return Iterators.removeAll(delegate().iterator(), c);
+      }
+    }
+    @Override public boolean retainAll(Collection<?> c) {
+      synchronized (mutex) {
+        return Iterators.retainAll(delegate().iterator(), c);
+      }
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  @VisibleForTesting
+  static <K, V> Map<K, V> map(Map<K, V> map, @Nullable Object mutex) {
+    return new SynchronizedMap<K, V>(map, mutex);
+  }
+
+  private static class SynchronizedMap<K, V> extends SynchronizedObject
+      implements Map<K, V> {
+    transient Set<K> keySet;
+    transient Collection<V> values;
+    transient Set<Map.Entry<K, V>> entrySet;
+
+    SynchronizedMap(Map<K, V> delegate, @Nullable Object mutex) {
+      super(delegate, mutex);
+    }
+
+    @SuppressWarnings("unchecked")
+    @Override Map<K, V> delegate() {
+      return (Map<K, V>) super.delegate();
+    }
+
+    @Override
+    public void clear() {
+      synchronized (mutex) {
+        delegate().clear();
+      }
+    }
+
+    @Override
+    public boolean containsKey(Object key) {
+      synchronized (mutex) {
+        return delegate().containsKey(key);
+      }
+    }
+
+    @Override
+    public boolean containsValue(Object value) {
+      synchronized (mutex) {
+        return delegate().containsValue(value);
+      }
+    }
+
+    @Override
+    public Set<Map.Entry<K, V>> entrySet() {
+      synchronized (mutex) {
+        if (entrySet == null) {
+          entrySet = set(delegate().entrySet(), mutex);
+        }
+        return entrySet;
+      }
+    }
+
+    @Override
+    public V get(Object key) {
+      synchronized (mutex) {
+        return delegate().get(key);
+      }
+    }
+
+    @Override
+    public boolean isEmpty() {
+      synchronized (mutex) {
+        return delegate().isEmpty();
+      }
+    }
+
+    @Override
+    public Set<K> keySet() {
+      synchronized (mutex) {
+        if (keySet == null) {
+          keySet = set(delegate().keySet(), mutex);
+        }
+        return keySet;
+      }
+    }
+
+    @Override
+    public V put(K key, V value) {
+      synchronized (mutex) {
+        return delegate().put(key, value);
+      }
+    }
+
+    @Override
+    public void putAll(Map<? extends K, ? extends V> map) {
+      synchronized (mutex) {
+        delegate().putAll(map);
+      }
+    }
+
+    @Override
+    public V remove(Object key) {
+      synchronized (mutex) {
+        return delegate().remove(key);
+      }
+    }
+
+    @Override
+    public int size() {
+      synchronized (mutex) {
+        return delegate().size();
+      }
+    }
+
+    @Override
+    public Collection<V> values() {
+      synchronized (mutex) {
+        if (values == null) {
+          values = collection(delegate().values(), mutex);
+        }
+        return values;
+      }
+    }
+
+    @Override public boolean equals(Object o) {
+      if (o == this) {
+        return true;
+      }
+      synchronized (mutex) {
+        return delegate().equals(o);
+      }
+    }
+
+    @Override public int hashCode() {
+      synchronized (mutex) {
+        return delegate().hashCode();
+      }
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+  
+  static <K, V> SortedMap<K, V> sortedMap(
+      SortedMap<K, V> sortedMap, @Nullable Object mutex) {
+    return new SynchronizedSortedMap<K, V>(sortedMap, mutex);
+  }
+  
+  static class SynchronizedSortedMap<K, V> extends SynchronizedMap<K, V>
+      implements SortedMap<K, V> {
+
+    SynchronizedSortedMap(SortedMap<K, V> delegate, @Nullable Object mutex) {
+      super(delegate, mutex);
+    }
+
+    @Override SortedMap<K, V> delegate() {
+      return (SortedMap<K, V>) super.delegate();
+    }
+
+    @Override public Comparator<? super K> comparator() {
+      synchronized (mutex) {
+        return delegate().comparator();
+      }
+    }
+
+    @Override public K firstKey() {
+      synchronized (mutex) {
+        return delegate().firstKey();
+      }
+    }
+
+    @Override public SortedMap<K, V> headMap(K toKey) {
+      synchronized (mutex) {
+        return sortedMap(delegate().headMap(toKey), mutex);
+      }
+    }
+
+    @Override public K lastKey() {
+      synchronized (mutex) {
+        return delegate().lastKey();
+      }
+    }
+
+    @Override public SortedMap<K, V> subMap(K fromKey, K toKey) {
+      synchronized (mutex) {
+        return sortedMap(delegate().subMap(fromKey, toKey), mutex);
+      }
+    }
+
+    @Override public SortedMap<K, V> tailMap(K fromKey) {
+      synchronized (mutex) {
+        return sortedMap(delegate().tailMap(fromKey), mutex);
+      }
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  static <K, V> BiMap<K, V> biMap(BiMap<K, V> bimap, @Nullable Object mutex) {
+    if (bimap instanceof SynchronizedBiMap ||
+        bimap instanceof ImmutableBiMap) {
+      return bimap;
+    }
+    return new SynchronizedBiMap<K, V>(bimap, mutex, null);
+  }
+
+  @VisibleForTesting static class SynchronizedBiMap<K, V>
+      extends SynchronizedMap<K, V> implements BiMap<K, V>, Serializable {
+    private transient Set<V> valueSet;
+    private transient BiMap<V, K> inverse;
+
+    private SynchronizedBiMap(BiMap<K, V> delegate, @Nullable Object mutex,
+        @Nullable BiMap<V, K> inverse) {
+      super(delegate, mutex);
+      this.inverse = inverse;
+    }
+
+    @Override BiMap<K, V> delegate() {
+      return (BiMap<K, V>) super.delegate();
+    }
+
+    @Override public Set<V> values() {
+      synchronized (mutex) {
+        if (valueSet == null) {
+          valueSet = set(delegate().values(), mutex);
+        }
+        return valueSet;
+      }
+    }
+
+    @Override
+    public V forcePut(K key, V value) {
+      synchronized (mutex) {
+        return delegate().forcePut(key, value);
+      }
+    }
+
+    @Override
+    public BiMap<V, K> inverse() {
+      synchronized (mutex) {
+        if (inverse == null) {
+          inverse
+              = new SynchronizedBiMap<V, K>(delegate().inverse(), mutex, this);
+        }
+        return inverse;
+      }
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  private static class SynchronizedAsMap<K, V>
+      extends SynchronizedMap<K, Collection<V>> {
+    transient Set<Map.Entry<K, Collection<V>>> asMapEntrySet;
+    transient Collection<Collection<V>> asMapValues;
+
+    SynchronizedAsMap(Map<K, Collection<V>> delegate, @Nullable Object mutex) {
+      super(delegate, mutex);
+    }
+
+    @Override public Collection<V> get(Object key) {
+      synchronized (mutex) {
+        Collection<V> collection = super.get(key);
+        return (collection == null) ? null
+            : typePreservingCollection(collection, mutex);
+      }
+    }
+
+    @Override public Set<Map.Entry<K, Collection<V>>> entrySet() {
+      synchronized (mutex) {
+        if (asMapEntrySet == null) {
+          asMapEntrySet = new SynchronizedAsMapEntries<K, V>(
+              delegate().entrySet(), mutex);
+        }
+        return asMapEntrySet;
+      }
+    }
+
+    @Override public Collection<Collection<V>> values() {
+      synchronized (mutex) {
+        if (asMapValues == null) {
+          asMapValues
+              = new SynchronizedAsMapValues<V>(delegate().values(), mutex);
+        }
+        return asMapValues;
+      }
+    }
+
+    @Override public boolean containsValue(Object o) {
+      // values() and its contains() method are both synchronized.
+      return values().contains(o);
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  private static class SynchronizedAsMapValues<V>
+      extends SynchronizedCollection<Collection<V>> {
+    SynchronizedAsMapValues(
+        Collection<Collection<V>> delegate, @Nullable Object mutex) {
+      super(delegate, mutex);
+    }
+
+    @Override public Iterator<Collection<V>> iterator() {
+      // Must be manually synchronized.
+      final Iterator<Collection<V>> iterator = super.iterator();
+      return new ForwardingIterator<Collection<V>>() {
+        @Override protected Iterator<Collection<V>> delegate() {
+          return iterator;
+        }
+        @Override public Collection<V> next() {
+          return typePreservingCollection(iterator.next(), mutex);
+        }
+      };
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+}
+
diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/TreeMultimap.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/TreeMultimap.java
new file mode 100644
index 0000000..228dc2d
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/TreeMultimap.java
@@ -0,0 +1,167 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.SortedMap;
+import java.util.SortedSet;
+import java.util.TreeMap;
+import java.util.TreeSet;
+
+/**
+ * Implementation of {@code Multimap} whose keys and values are ordered by
+ * their natural ordering or by supplied comparators. In all cases, this
+ * implementation uses {@link Comparable#compareTo} or {@link
+ * Comparator#compare} instead of {@link Object#equals} to determine
+ * equivalence of instances.
+ *
+ * <p><b>Warning:</b> The comparators or comparables used must be <i>consistent
+ * with equals</i> as explained by the {@link Comparable} class specification.
+ * Otherwise, the resulting multiset will violate the general contract of {@link
+ * SetMultimap}, which it is specified in terms of {@link Object#equals}.
+ *
+ * <p>The collections returned by {@code keySet} and {@code asMap} iterate
+ * through the keys according to the key comparator ordering or the natural
+ * ordering of the keys. Similarly, {@code get}, {@code removeAll}, and {@code
+ * replaceValues} return collections that iterate through the values according
+ * to the value comparator ordering or the natural ordering of the values. The
+ * collections generated by {@code entries}, {@code keys}, and {@code values}
+ * iterate across the keys according to the above key ordering, and for each
+ * key they iterate across the values according to the value ordering.
+ *
+ * <p>The multimap does not store duplicate key-value pairs. Adding a new
+ * key-value pair equal to an existing key-value pair has no effect.
+ *
+ * <p>Null keys and values are permitted (provided, of course, that the
+ * respective comparators support them). All optional multimap methods are
+ * supported, and all returned views are modifiable.
+ *
+ * <p>This class is not threadsafe when any concurrent operations update the
+ * multimap. Concurrent read operations will work correctly. To allow concurrent
+ * update operations, wrap your multimap with a call to {@link
+ * Multimaps#synchronizedSortedSetMultimap}.
+ *
+ * @author Jared Levy
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible(serializable = true, emulated = true)
+public class TreeMultimap<K, V> extends AbstractSortedSetMultimap<K, V> {
+  private transient Comparator<? super K> keyComparator;
+  private transient Comparator<? super V> valueComparator;
+
+  /**
+   * Creates an empty {@code TreeMultimap} ordered by the natural ordering of
+   * its keys and values.
+   */
+  public static <K extends Comparable, V extends Comparable>
+      TreeMultimap<K, V> create() {
+    return new TreeMultimap<K, V>(Ordering.natural(), Ordering.natural());
+  }
+
+  /**
+   * Creates an empty {@code TreeMultimap} instance using explicit comparators.
+   * Neither comparator may be null; use {@link Ordering#natural()} to specify
+   * natural order.
+   *
+   * @param keyComparator the comparator that determines the key ordering
+   * @param valueComparator the comparator that determines the value ordering
+   */
+  public static <K, V> TreeMultimap<K, V> create(
+      Comparator<? super K> keyComparator,
+      Comparator<? super V> valueComparator) {
+    return new TreeMultimap<K, V>(checkNotNull(keyComparator),
+        checkNotNull(valueComparator));
+  }
+
+  /**
+   * Constructs a {@code TreeMultimap}, ordered by the natural ordering of its
+   * keys and values, with the same mappings as the specified multimap.
+   *
+   * @param multimap the multimap whose contents are copied to this multimap
+   */
+  public static <K extends Comparable, V extends Comparable>
+      TreeMultimap<K, V> create(Multimap<? extends K, ? extends V> multimap) {
+    return new TreeMultimap<K, V>(Ordering.natural(), Ordering.natural(),
+        multimap);
+  }
+
+  TreeMultimap(Comparator<? super K> keyComparator,
+      Comparator<? super V> valueComparator) {
+    super(new TreeMap<K, Collection<V>>(keyComparator));
+    this.keyComparator = keyComparator;
+    this.valueComparator = valueComparator;
+  }
+
+  private TreeMultimap(Comparator<? super K> keyComparator,
+      Comparator<? super V> valueComparator,
+      Multimap<? extends K, ? extends V> multimap) {
+    this(keyComparator, valueComparator);
+    putAll(multimap);
+  }
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>Creates an empty {@code TreeSet} for a collection of values for one key.
+   *
+   * @return a new {@code TreeSet} containing a collection of values for one
+   *     key
+   */
+  @Override SortedSet<V> createCollection() {
+    return new TreeSet<V>(valueComparator);
+  }
+
+  /**
+   * Returns the comparator that orders the multimap keys.
+   */
+  public Comparator<? super K> keyComparator() {
+    return keyComparator;
+  }
+
+  @Override
+  public Comparator<? super V> valueComparator() {
+    return valueComparator;
+  }
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>Because a {@code TreeMultimap} has unique sorted keys, this method
+   * returns a {@link SortedSet}, instead of the {@link java.util.Set} specified
+   * in the {@link Multimap} interface.
+   */
+  @Override public SortedSet<K> keySet() {
+    return (SortedSet<K>) super.keySet();
+  }
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>Because a {@code TreeMultimap} has unique sorted keys, this method
+   * returns a {@link SortedMap}, instead of the {@link java.util.Map} specified
+   * in the {@link Multimap} interface.
+   */
+  @Override public SortedMap<K, Collection<V>> asMap() {
+    return (SortedMap<K, Collection<V>>) super.asMap();
+  }
+}
+
diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/TreeMultiset.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/TreeMultiset.java
new file mode 100644
index 0000000..622454d
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/TreeMultiset.java
@@ -0,0 +1,539 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkState;
+import static com.google.common.collect.BstSide.LEFT;
+import static com.google.common.collect.BstSide.RIGHT;
+
+import java.io.Serializable;
+import java.util.Comparator;
+import java.util.ConcurrentModificationException;
+import java.util.Iterator;
+
+import javax.annotation.Nullable;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.primitives.Ints;
+
+/**
+ * A multiset which maintains the ordering of its elements, according to either
+ * their natural order or an explicit {@link Comparator}. In all cases, this
+ * implementation uses {@link Comparable#compareTo} or {@link
+ * Comparator#compare} instead of {@link Object#equals} to determine
+ * equivalence of instances.
+ *
+ * <p><b>Warning:</b> The comparison must be <i>consistent with equals</i> as
+ * explained by the {@link Comparable} class specification. Otherwise, the
+ * resulting multiset will violate the {@link java.util.Collection} contract,
+ * which is specified in terms of {@link Object#equals}.
+ *
+ * @author Louis Wasserman
+ * @author Jared Levy
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible(emulated = true)
+public final class TreeMultiset<E> extends AbstractSortedMultiset<E>
+    implements Serializable {
+
+  /**
+   * Creates a new, empty multiset, sorted according to the elements' natural
+   * order. All elements inserted into the multiset must implement the
+   * {@code Comparable} interface. Furthermore, all such elements must be
+   * <i>mutually comparable</i>: {@code e1.compareTo(e2)} must not throw a
+   * {@code ClassCastException} for any elements {@code e1} and {@code e2} in
+   * the multiset. If the user attempts to add an element to the multiset that
+   * violates this constraint (for example, the user attempts to add a string
+   * element to a set whose elements are integers), the {@code add(Object)}
+   * call will throw a {@code ClassCastException}.
+   *
+   * <p>The type specification is {@code <E extends Comparable>}, instead of the
+   * more specific {@code <E extends Comparable<? super E>>}, to support
+   * classes defined without generics.
+   */
+  public static <E extends Comparable> TreeMultiset<E> create() {
+    return new TreeMultiset<E>(Ordering.natural());
+  }
+
+  /**
+   * Creates a new, empty multiset, sorted according to the specified
+   * comparator. All elements inserted into the multiset must be <i>mutually
+   * comparable</i> by the specified comparator: {@code comparator.compare(e1,
+   * e2)} must not throw a {@code ClassCastException} for any elements {@code
+   * e1} and {@code e2} in the multiset. If the user attempts to add an element
+   * to the multiset that violates this constraint, the {@code add(Object)} call
+   * will throw a {@code ClassCastException}.
+   *
+   * @param comparator the comparator that will be used to sort this multiset. A
+   *     null value indicates that the elements' <i>natural ordering</i> should
+   *     be used.
+   */
+  @SuppressWarnings("unchecked")
+  public static <E> TreeMultiset<E> create(
+      @Nullable Comparator<? super E> comparator) {
+    return (comparator == null)
+           ? new TreeMultiset<E>((Comparator) Ordering.natural())
+           : new TreeMultiset<E>(comparator);
+  }
+
+  /**
+   * Creates an empty multiset containing the given initial elements, sorted
+   * according to the elements' natural order.
+   *
+   * <p>This implementation is highly efficient when {@code elements} is itself
+   * a {@link Multiset}.
+   *
+   * <p>The type specification is {@code <E extends Comparable>}, instead of the
+   * more specific {@code <E extends Comparable<? super E>>}, to support
+   * classes defined without generics.
+   */
+  public static <E extends Comparable> TreeMultiset<E> create(
+      Iterable<? extends E> elements) {
+    TreeMultiset<E> multiset = create();
+    Iterables.addAll(multiset, elements);
+    return multiset;
+  }
+
+  /**
+   * Returns an iterator over the elements contained in this collection.
+   */
+  @Override
+  public Iterator<E> iterator() {
+    // Needed to avoid Javadoc bug.
+    return super.iterator();
+  }
+
+  private TreeMultiset(Comparator<? super E> comparator) {
+    super(comparator);
+    this.range = GeneralRange.all(comparator);
+    this.rootReference = new Reference<Node<E>>();
+  }
+
+  private TreeMultiset(GeneralRange<E> range, Reference<Node<E>> root) {
+    super(range.comparator());
+    this.range = range;
+    this.rootReference = root;
+  }
+
+  @SuppressWarnings("unchecked")
+  E checkElement(Object o) {
+    return (E) o;
+  }
+
+  private transient final GeneralRange<E> range;
+
+  private transient final Reference<Node<E>> rootReference;
+
+  static final class Reference<T> {
+    T value;
+
+    public Reference() {}
+
+    public T get() {
+      return value;
+    }
+
+    public boolean compareAndSet(T expected, T newValue) {
+      if (value == expected) {
+        value = newValue;
+        return true;
+      }
+      return false;
+    }
+  }
+
+  @Override
+  int distinctElements() {
+    Node<E> root = rootReference.get();
+    return Ints.checkedCast(BstRangeOps.totalInRange(distinctAggregate(), range, root));
+  }
+
+  @Override
+  public int size() {
+    Node<E> root = rootReference.get();
+    return Ints.saturatedCast(BstRangeOps.totalInRange(sizeAggregate(), range, root));
+  }
+
+  @Override
+  public int count(@Nullable Object element) {
+    try {
+      E e = checkElement(element);
+      if (range.contains(e)) {
+        Node<E> node = BstOperations.seek(comparator(), rootReference.get(), e);
+        return countOrZero(node);
+      }
+      return 0;
+    } catch (ClassCastException e) {
+      return 0;
+    } catch (NullPointerException e) {
+      return 0;
+    }
+  }
+
+  private int mutate(@Nullable E e, MultisetModifier modifier) {
+    BstMutationRule<E, Node<E>> mutationRule = BstMutationRule.createRule(
+        modifier,
+        BstCountBasedBalancePolicies.
+          <E, Node<E>>singleRebalancePolicy(distinctAggregate()),
+        nodeFactory());
+    BstMutationResult<E, Node<E>> mutationResult =
+        BstOperations.mutate(comparator(), mutationRule, rootReference.get(), e);
+    if (!rootReference.compareAndSet(
+        mutationResult.getOriginalRoot(), mutationResult.getChangedRoot())) {
+      throw new ConcurrentModificationException();
+    }
+    Node<E> original = mutationResult.getOriginalTarget();
+    return countOrZero(original);
+  }
+
+  @Override
+  public int add(E element, int occurrences) {
+    checkElement(element);
+    if (occurrences == 0) {
+      return count(element);
+    }
+    checkArgument(range.contains(element));
+    return mutate(element, new AddModifier(occurrences));
+  }
+
+  @Override
+  public int remove(@Nullable Object element, int occurrences) {
+    if (element == null) {
+      return 0;
+    } else if (occurrences == 0) {
+      return count(element);
+    }
+    try {
+      E e = checkElement(element);
+      return range.contains(e) ? mutate(e, new RemoveModifier(occurrences)) : 0;
+    } catch (ClassCastException e) {
+      return 0;
+    }
+  }
+
+  @Override
+  public boolean setCount(E element, int oldCount, int newCount) {
+    checkElement(element);
+    checkArgument(range.contains(element));
+    return mutate(element, new ConditionalSetCountModifier(oldCount, newCount))
+        == oldCount;
+  }
+
+  @Override
+  public int setCount(E element, int count) {
+    checkElement(element);
+    checkArgument(range.contains(element));
+    return mutate(element, new SetCountModifier(count));
+  }
+
+  private BstPathFactory<Node<E>, BstInOrderPath<Node<E>>> pathFactory() {
+    return BstInOrderPath.inOrderFactory();
+  }
+
+  @Override
+  Iterator<Entry<E>> entryIterator() {
+    Node<E> root = rootReference.get();
+    final BstInOrderPath<Node<E>> startingPath =
+        BstRangeOps.furthestPath(range, LEFT, pathFactory(), root);
+    return iteratorInDirection(startingPath, RIGHT);
+  }
+
+  @Override
+  Iterator<Entry<E>> descendingEntryIterator() {
+    Node<E> root = rootReference.get();
+    final BstInOrderPath<Node<E>> startingPath =
+        BstRangeOps.furthestPath(range, RIGHT, pathFactory(), root);
+    return iteratorInDirection(startingPath, LEFT);
+  }
+
+  private Iterator<Entry<E>> iteratorInDirection(
+      @Nullable BstInOrderPath<Node<E>> start, final BstSide direction) {
+    final Iterator<BstInOrderPath<Node<E>>> pathIterator =
+        new AbstractLinkedIterator<BstInOrderPath<Node<E>>>(start) {
+          @Override
+          protected BstInOrderPath<Node<E>> computeNext(BstInOrderPath<Node<E>> previous) {
+            if (!previous.hasNext(direction)) {
+              return null;
+            }
+            BstInOrderPath<Node<E>> next = previous.next(direction);
+            // TODO(user): only check against one side
+            return range.contains(next.getTip().getKey()) ? next : null;
+          }
+        };
+    return new Iterator<Entry<E>>() {
+      E toRemove = null;
+
+      @Override
+      public boolean hasNext() {
+        return pathIterator.hasNext();
+      }
+
+      @Override
+      public Entry<E> next() {
+        BstInOrderPath<Node<E>> path = pathIterator.next();
+        return new LiveEntry(
+            toRemove = path.getTip().getKey(), path.getTip().elemCount());
+      }
+
+      @Override
+      public void remove() {
+        checkState(toRemove != null);
+        setCount(toRemove, 0);
+        toRemove = null;
+      }
+    };
+  }
+
+  class LiveEntry extends Multisets.AbstractEntry<E> {
+    private Node<E> expectedRoot;
+    private final E element;
+    private int count;
+
+    private LiveEntry(E element, int count) {
+      this.expectedRoot = rootReference.get();
+      this.element = element;
+      this.count = count;
+    }
+
+    @Override
+    public E getElement() {
+      return element;
+    }
+
+    @Override
+    public int getCount() {
+      if (rootReference.get() == expectedRoot) {
+        return count;
+      } else {
+        // check for updates
+        expectedRoot = rootReference.get();
+        return count = TreeMultiset.this.count(element);
+      }
+    }
+  }
+
+  @Override
+  public void clear() {
+    Node<E> root = rootReference.get();
+    Node<E> cleared = BstRangeOps.minusRange(range,
+        BstCountBasedBalancePolicies.<E, Node<E>>fullRebalancePolicy(distinctAggregate()),
+        nodeFactory(), root);
+    if (!rootReference.compareAndSet(root, cleared)) {
+      throw new ConcurrentModificationException();
+    }
+  }
+
+  @Override
+  public SortedMultiset<E> headMultiset(E upperBound, BoundType boundType) {
+    checkNotNull(upperBound);
+    return new TreeMultiset<E>(
+        range.intersect(GeneralRange.upTo(comparator, upperBound, boundType)), rootReference);
+  }
+
+  @Override
+  public SortedMultiset<E> tailMultiset(E lowerBound, BoundType boundType) {
+    checkNotNull(lowerBound);
+    return new TreeMultiset<E>(
+        range.intersect(GeneralRange.downTo(comparator, lowerBound, boundType)), rootReference);
+  }
+
+  /**
+   * {@inheritDoc}
+   *
+   * @since 11.0
+   */
+  @Override
+  public Comparator<? super E> comparator() {
+    return super.comparator();
+  }
+
+  private static final class Node<E> extends BstNode<E, Node<E>> implements Serializable {
+    private final long size;
+    private final int distinct;
+
+    private Node(E key, int elemCount, @Nullable Node<E> left,
+        @Nullable Node<E> right) {
+      super(key, left, right);
+      checkArgument(elemCount > 0);
+      this.size = (long) elemCount + sizeOrZero(left) + sizeOrZero(right);
+      this.distinct = 1 + distinctOrZero(left) + distinctOrZero(right);
+    }
+
+    int elemCount() {
+      long result = size - sizeOrZero(childOrNull(LEFT))
+          - sizeOrZero(childOrNull(RIGHT));
+      return Ints.checkedCast(result);
+    }
+
+    private Node(E key, int elemCount) {
+      this(key, elemCount, null, null);
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  private static long sizeOrZero(@Nullable Node<?> node) {
+    return (node == null) ? 0 : node.size;
+  }
+
+  private static int distinctOrZero(@Nullable Node<?> node) {
+    return (node == null) ? 0 : node.distinct;
+  }
+
+  private static int countOrZero(@Nullable Node<?> entry) {
+    return (entry == null) ? 0 : entry.elemCount();
+  }
+
+  @SuppressWarnings("unchecked")
+  private BstAggregate<Node<E>> distinctAggregate() {
+    return (BstAggregate) DISTINCT_AGGREGATE;
+  }
+
+  private static final BstAggregate<Node<Object>> DISTINCT_AGGREGATE =
+      new BstAggregate<Node<Object>>() {
+    @Override
+    public int entryValue(Node<Object> entry) {
+      return 1;
+    }
+
+    @Override
+    public long treeValue(@Nullable Node<Object> tree) {
+      return distinctOrZero(tree);
+    }
+  };
+
+  @SuppressWarnings("unchecked")
+  private BstAggregate<Node<E>> sizeAggregate() {
+    return (BstAggregate) SIZE_AGGREGATE;
+  }
+
+  private static final BstAggregate<Node<Object>> SIZE_AGGREGATE =
+      new BstAggregate<Node<Object>>() {
+        @Override
+        public int entryValue(Node<Object> entry) {
+          return entry.elemCount();
+        }
+
+        @Override
+        public long treeValue(@Nullable Node<Object> tree) {
+          return sizeOrZero(tree);
+        }
+      };
+
+  @SuppressWarnings("unchecked")
+  private BstNodeFactory<Node<E>> nodeFactory() {
+    return (BstNodeFactory) NODE_FACTORY;
+  }
+
+  private static final BstNodeFactory<Node<Object>> NODE_FACTORY =
+      new BstNodeFactory<Node<Object>>() {
+        @Override
+        public Node<Object> createNode(Node<Object> source, @Nullable Node<Object> left,
+            @Nullable Node<Object> right) {
+          return new Node<Object>(source.getKey(), source.elemCount(), left, right);
+        }
+      };
+
+  private abstract class MultisetModifier implements BstModifier<E, Node<E>> {
+    abstract int newCount(int oldCount);
+
+    @Nullable
+    @Override
+    public BstModificationResult<Node<E>> modify(E key, @Nullable Node<E> originalEntry) {
+      int oldCount = countOrZero(originalEntry);
+      int newCount = newCount(oldCount);
+      if (oldCount == newCount) {
+        return BstModificationResult.identity(originalEntry);
+      } else if (newCount == 0) {
+        return BstModificationResult.rebalancingChange(originalEntry, null);
+      } else if (oldCount == 0) {
+        return BstModificationResult.rebalancingChange(null, new Node<E>(key, newCount));
+      } else {
+        return BstModificationResult.rebuildingChange(originalEntry,
+            new Node<E>(originalEntry.getKey(), newCount));
+      }
+    }
+  }
+
+  private final class AddModifier extends MultisetModifier {
+    private final int countToAdd;
+
+    private AddModifier(int countToAdd) {
+      checkArgument(countToAdd > 0);
+      this.countToAdd = countToAdd;
+    }
+
+    @Override
+    int newCount(int oldCount) {
+      checkArgument(countToAdd <= Integer.MAX_VALUE - oldCount, "Cannot add this many elements");
+      return oldCount + countToAdd;
+    }
+  }
+
+  private final class RemoveModifier extends MultisetModifier {
+    private final int countToRemove;
+
+    private RemoveModifier(int countToRemove) {
+      checkArgument(countToRemove > 0);
+      this.countToRemove = countToRemove;
+    }
+
+    @Override
+    int newCount(int oldCount) {
+      return Math.max(0, oldCount - countToRemove);
+    }
+  }
+
+  private final class SetCountModifier extends MultisetModifier {
+    private final int countToSet;
+
+    private SetCountModifier(int countToSet) {
+      checkArgument(countToSet >= 0);
+      this.countToSet = countToSet;
+    }
+
+    @Override
+    int newCount(int oldCount) {
+      return countToSet;
+    }
+  }
+
+  private final class ConditionalSetCountModifier extends MultisetModifier {
+    private final int expectedCount;
+    private final int setCount;
+
+    private ConditionalSetCountModifier(int expectedCount, int setCount) {
+      checkArgument(setCount >= 0 & expectedCount >= 0);
+      this.expectedCount = expectedCount;
+      this.setCount = setCount;
+    }
+
+    @Override
+    int newCount(int oldCount) {
+      return (oldCount == expectedCount) ? setCount : oldCount;
+    }
+  }
+
+  /*
+   * TODO(jlevy): Decide whether entrySet() should return entries with an
+   * equals() method that calls the comparator to compare the two keys. If that
+   * change is made, AbstractMultiset.equals() can simply check whether two
+   * multisets have equal entry sets.
+   */
+}
diff --git a/guava-gwt/src-super/com/google/common/escape/super/com/google/common/escape/Platform.java b/guava-gwt/src-super/com/google/common/escape/super/com/google/common/escape/Platform.java
new file mode 100644
index 0000000..36f1b2e
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/escape/super/com/google/common/escape/Platform.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.escape;
+
+/**
+ * @author Jesse Wilson
+ */
+class Platform {
+
+  private static final char[] CHAR_BUFFER = new char[1024];
+
+  static char[] charBufferFromThreadLocal() {
+    // ThreadLocal is not available to GWT, so we always reuse the same
+    // instance.  It is always safe to return the same instance because
+    // javascript is single-threaded, and only used by blocks that doesn't
+    // involve async callbacks.
+    return CHAR_BUFFER;
+  }
+}
diff --git a/guava-gwt/src-super/com/google/common/math/super/com/google/common/math/IntMath.java b/guava-gwt/src-super/com/google/common/math/super/com/google/common/math/IntMath.java
new file mode 100644
index 0000000..352351c
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/math/super/com/google/common/math/IntMath.java
@@ -0,0 +1,199 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.math;
+
+import static com.google.common.math.MathPreconditions.checkNoOverflow;
+import static com.google.common.math.MathPreconditions.checkNonNegative;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.VisibleForTesting;
+
+/**
+ * A class for arithmetic on values of type {@code int}. Where possible, methods are defined and
+ * named analogously to their {@code BigInteger} counterparts.
+ * 
+ * <p>The implementations of many methods in this class are based on material from Henry S. Warren,
+ * Jr.'s <i>Hacker's Delight</i>, (Addison Wesley, 2002).
+ * 
+ * <p>Similar functionality for {@code long} and for {@link BigInteger} can be found in
+ * {@link LongMath} and {@link BigIntegerMath} respectively.  For other common operations on
+ * {@code int} values, see {@link com.google.common.primitives.Ints}.
+ * 
+ * @author Louis Wasserman
+ * @since 11.0
+ */
+@Beta
+@GwtCompatible(emulated = true)
+public final class IntMath {
+  // NOTE: Whenever both tests are cheap and functional, it's faster to use &, | instead of &&, ||
+
+  /**
+   * Returns {@code true} if {@code x} represents a power of two.
+   * 
+   * <p>This differs from {@code Integer.bitCount(x) == 1}, because
+   * {@code Integer.bitCount(Integer.MIN_VALUE) == 1}, but {@link Integer#MIN_VALUE} is not a power
+   * of two.
+   */
+  public static boolean isPowerOfTwo(int x) {
+    return x > 0 & (x & (x - 1)) == 0;
+  }
+
+  /** The biggest half power of two that can fit in an unsigned int. */
+  @VisibleForTesting static final int MAX_POWER_OF_SQRT2_UNSIGNED = 0xB504F333;
+  
+  private static int log10Floor(int x) {
+    for (int i = 1; i < POWERS_OF_10.length; i++) {
+      if (x < POWERS_OF_10[i]) {
+        return i - 1;
+      }
+    }
+    return POWERS_OF_10.length - 1;
+  }
+
+  @VisibleForTesting static final int[] POWERS_OF_10 =
+      {1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000};
+
+  // HALF_POWERS_OF_10[i] = largest int less than 10^(i + 0.5)
+  @VisibleForTesting static final int[] HALF_POWERS_OF_10 =
+      {3, 31, 316, 3162, 31622, 316227, 3162277, 31622776, 316227766, Integer.MAX_VALUE};
+
+  private static int sqrtFloor(int x) {
+    // There is no loss of precision in converting an int to a double, according to
+    // http://java.sun.com/docs/books/jls/third_edition/html/conversions.html#5.1.2
+    return (int) Math.sqrt(x);
+  }
+
+  /**
+   * Returns {@code x mod m}. This differs from {@code x % m} in that it always returns a
+   * non-negative result.
+   * 
+   * <p>For example:<pre> {@code
+   * 
+   * mod(7, 4) == 3
+   * mod(-7, 4) == 1
+   * mod(-1, 4) == 3
+   * mod(-8, 4) == 0
+   * mod(8, 4) == 0}</pre>
+   * 
+   * @throws ArithmeticException if {@code m <= 0}
+   */
+  public static int mod(int x, int m) {
+    if (m <= 0) {
+      throw new ArithmeticException("Modulus " + m + " must be > 0");
+    }
+    int result = x % m;
+    return (result >= 0) ? result : result + m;
+  }
+
+  /**
+   * Returns the greatest common divisor of {@code a, b}. Returns {@code 0} if
+   * {@code a == 0 && b == 0}.
+   * 
+   * @throws IllegalArgumentException if {@code a < 0} or {@code b < 0}
+   */
+  public static int gcd(int a, int b) {
+    /*
+     * The reason we require both arguments to be >= 0 is because otherwise, what do you return on
+     * gcd(0, Integer.MIN_VALUE)? BigInteger.gcd would return positive 2^31, but positive 2^31
+     * isn't an int.
+     */
+    checkNonNegative("a", a);
+    checkNonNegative("b", b);
+    // The simple Euclidean algorithm is the fastest for ints, and is easily the most readable.
+    while (b != 0) {
+      int t = b;
+      b = a % b;
+      a = t;
+    }
+    return a;
+  }
+
+  /**
+   * Returns the sum of {@code a} and {@code b}, provided it does not overflow.
+   * 
+   * @throws ArithmeticException if {@code a + b} overflows in signed {@code int} arithmetic
+   */
+  public static int checkedAdd(int a, int b) {
+    long result = (long) a + b;
+    checkNoOverflow(result == (int) result);
+    return (int) result;
+  }
+
+  /**
+   * Returns the difference of {@code a} and {@code b}, provided it does not overflow.
+   * 
+   * @throws ArithmeticException if {@code a - b} overflows in signed {@code int} arithmetic
+   */
+  public static int checkedSubtract(int a, int b) {
+    long result = (long) a - b;
+    checkNoOverflow(result == (int) result);
+    return (int) result;
+  }
+
+  /**
+   * Returns the product of {@code a} and {@code b}, provided it does not overflow.
+   * 
+   * @throws ArithmeticException if {@code a * b} overflows in signed {@code int} arithmetic
+   */
+  public static int checkedMultiply(int a, int b) {
+    long result = (long) a * b;
+    checkNoOverflow(result == (int) result);
+    return (int) result;
+  }
+
+  @VisibleForTesting static final int FLOOR_SQRT_MAX_INT = 46340;
+  
+  static final int[] FACTORIALS = {
+      1,
+      1,
+      1 * 2,
+      1 * 2 * 3,
+      1 * 2 * 3 * 4,
+      1 * 2 * 3 * 4 * 5,
+      1 * 2 * 3 * 4 * 5 * 6,
+      1 * 2 * 3 * 4 * 5 * 6 * 7,
+      1 * 2 * 3 * 4 * 5 * 6 * 7 * 8,
+      1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9,
+      1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10,
+      1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10 * 11,
+      1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10 * 11 * 12};
+
+  // binomial(BIGGEST_BINOMIALS[k], k) fits in an int, but not binomial(BIGGEST_BINOMIALS[k]+1,k).
+  @VisibleForTesting static int[] BIGGEST_BINOMIALS = {
+    Integer.MAX_VALUE,
+    Integer.MAX_VALUE,
+    65536,
+    2345,
+    477,
+    193,
+    110,
+    75,
+    58,
+    49,
+    43,
+    39,
+    37,
+    35,
+    34,
+    34,
+    33
+  };
+  
+  private IntMath() {}
+}
+
diff --git a/guava-gwt/src-super/com/google/common/primitives/super/com/google/common/primitives/Chars.java b/guava-gwt/src-super/com/google/common/primitives/super/com/google/common/primitives/Chars.java
new file mode 100644
index 0000000..5f78865
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/primitives/super/com/google/common/primitives/Chars.java
@@ -0,0 +1,532 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.primitives;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkElementIndex;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkPositionIndexes;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.io.Serializable;
+import java.util.AbstractList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.RandomAccess;
+
+/**
+ * Static utility methods pertaining to {@code char} primitives, that are not
+ * already found in either {@link Character} or {@link Arrays}.
+ *
+ * <p>All the operations in this class treat {@code char} values strictly
+ * numerically; they are neither Unicode-aware nor locale-dependent.
+ *
+ * @author Kevin Bourrillion
+ * @since 1.0
+ */
+@GwtCompatible(emulated = true)
+public final class Chars {
+  private Chars() {}
+
+  /**
+   * The number of bytes required to represent a primitive {@code char}
+   * value.
+   */
+  public static final int BYTES = Character.SIZE / Byte.SIZE;
+
+  /**
+   * Returns a hash code for {@code value}; equal to the result of invoking
+   * {@code ((Character) value).hashCode()}.
+   *
+   * @param value a primitive {@code char} value
+   * @return a hash code for the value
+   */
+  public static int hashCode(char value) {
+    return value;
+  }
+
+  /**
+   * Returns the {@code char} value that is equal to {@code value}, if possible.
+   *
+   * @param value any value in the range of the {@code char} type
+   * @return the {@code char} value that equals {@code value}
+   * @throws IllegalArgumentException if {@code value} is greater than {@link
+   *     Character#MAX_VALUE} or less than {@link Character#MIN_VALUE}
+   */
+  public static char checkedCast(long value) {
+    char result = (char) value;
+    checkArgument(result == value, "Out of range: %s", value);
+    return result;
+  }
+
+  /**
+   * Returns the {@code char} nearest in value to {@code value}.
+   *
+   * @param value any {@code long} value
+   * @return the same value cast to {@code char} if it is in the range of the
+   *     {@code char} type, {@link Character#MAX_VALUE} if it is too large,
+   *     or {@link Character#MIN_VALUE} if it is too small
+   */
+  public static char saturatedCast(long value) {
+    if (value > Character.MAX_VALUE) {
+      return Character.MAX_VALUE;
+    }
+    if (value < Character.MIN_VALUE) {
+      return Character.MIN_VALUE;
+    }
+    return (char) value;
+  }
+
+  /**
+   * Compares the two specified {@code char} values. The sign of the value
+   * returned is the same as that of {@code ((Character) a).compareTo(b)}.
+   *
+   * @param a the first {@code char} to compare
+   * @param b the second {@code char} to compare
+   * @return a negative value if {@code a} is less than {@code b}; a positive
+   *     value if {@code a} is greater than {@code b}; or zero if they are equal
+   */
+  public static int compare(char a, char b) {
+    return a - b; // safe due to restricted range
+  }
+
+  /**
+   * Returns {@code true} if {@code target} is present as an element anywhere in
+   * {@code array}.
+   *
+   * @param array an array of {@code char} values, possibly empty
+   * @param target a primitive {@code char} value
+   * @return {@code true} if {@code array[i] == target} for some value of {@code
+   *     i}
+   */
+  public static boolean contains(char[] array, char target) {
+    for (char value : array) {
+      if (value == target) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  /**
+   * Returns the index of the first appearance of the value {@code target} in
+   * {@code array}.
+   *
+   * @param array an array of {@code char} values, possibly empty
+   * @param target a primitive {@code char} value
+   * @return the least index {@code i} for which {@code array[i] == target}, or
+   *     {@code -1} if no such index exists.
+   */
+  public static int indexOf(char[] array, char target) {
+    return indexOf(array, target, 0, array.length);
+  }
+
+  // TODO(kevinb): consider making this public
+  private static int indexOf(
+      char[] array, char target, int start, int end) {
+    for (int i = start; i < end; i++) {
+      if (array[i] == target) {
+        return i;
+      }
+    }
+    return -1;
+  }
+
+  /**
+   * Returns the start position of the first occurrence of the specified {@code
+   * target} within {@code array}, or {@code -1} if there is no such occurrence.
+   *
+   * <p>More formally, returns the lowest index {@code i} such that {@code
+   * java.util.Arrays.copyOfRange(array, i, i + target.length)} contains exactly
+   * the same elements as {@code target}.
+   *
+   * @param array the array to search for the sequence {@code target}
+   * @param target the array to search for as a sub-sequence of {@code array}
+   */
+  public static int indexOf(char[] array, char[] target) {
+    checkNotNull(array, "array");
+    checkNotNull(target, "target");
+    if (target.length == 0) {
+      return 0;
+    }
+
+    outer:
+    for (int i = 0; i < array.length - target.length + 1; i++) {
+      for (int j = 0; j < target.length; j++) {
+        if (array[i + j] != target[j]) {
+          continue outer;
+        }
+      }
+      return i;
+    }
+    return -1;
+  }
+
+  /**
+   * Returns the index of the last appearance of the value {@code target} in
+   * {@code array}.
+   *
+   * @param array an array of {@code char} values, possibly empty
+   * @param target a primitive {@code char} value
+   * @return the greatest index {@code i} for which {@code array[i] == target},
+   *     or {@code -1} if no such index exists.
+   */
+  public static int lastIndexOf(char[] array, char target) {
+    return lastIndexOf(array, target, 0, array.length);
+  }
+
+  // TODO(kevinb): consider making this public
+  private static int lastIndexOf(
+      char[] array, char target, int start, int end) {
+    for (int i = end - 1; i >= start; i--) {
+      if (array[i] == target) {
+        return i;
+      }
+    }
+    return -1;
+  }
+
+  /**
+   * Returns the least value present in {@code array}.
+   *
+   * @param array a <i>nonempty</i> array of {@code char} values
+   * @return the value present in {@code array} that is less than or equal to
+   *     every other value in the array
+   * @throws IllegalArgumentException if {@code array} is empty
+   */
+  public static char min(char... array) {
+    checkArgument(array.length > 0);
+    char min = array[0];
+    for (int i = 1; i < array.length; i++) {
+      if (array[i] < min) {
+        min = array[i];
+      }
+    }
+    return min;
+  }
+
+  /**
+   * Returns the greatest value present in {@code array}.
+   *
+   * @param array a <i>nonempty</i> array of {@code char} values
+   * @return the value present in {@code array} that is greater than or equal to
+   *     every other value in the array
+   * @throws IllegalArgumentException if {@code array} is empty
+   */
+  public static char max(char... array) {
+    checkArgument(array.length > 0);
+    char max = array[0];
+    for (int i = 1; i < array.length; i++) {
+      if (array[i] > max) {
+        max = array[i];
+      }
+    }
+    return max;
+  }
+
+  /**
+   * Returns the values from each provided array combined into a single array.
+   * For example, {@code concat(new char[] {a, b}, new char[] {}, new
+   * char[] {c}} returns the array {@code {a, b, c}}.
+   *
+   * @param arrays zero or more {@code char} arrays
+   * @return a single array containing all the values from the source arrays, in
+   *     order
+   */
+  public static char[] concat(char[]... arrays) {
+    int length = 0;
+    for (char[] array : arrays) {
+      length += array.length;
+    }
+    char[] result = new char[length];
+    int pos = 0;
+    for (char[] array : arrays) {
+      System.arraycopy(array, 0, result, pos, array.length);
+      pos += array.length;
+    }
+    return result;
+  }
+
+  /**
+   * Returns an array containing the same values as {@code array}, but
+   * guaranteed to be of a specified minimum length. If {@code array} already
+   * has a length of at least {@code minLength}, it is returned directly.
+   * Otherwise, a new array of size {@code minLength + padding} is returned,
+   * containing the values of {@code array}, and zeroes in the remaining places.
+   *
+   * @param array the source array
+   * @param minLength the minimum length the returned array must guarantee
+   * @param padding an extra amount to "grow" the array by if growth is
+   *     necessary
+   * @throws IllegalArgumentException if {@code minLength} or {@code padding} is
+   *     negative
+   * @return an array containing the values of {@code array}, with guaranteed
+   *     minimum length {@code minLength}
+   */
+  public static char[] ensureCapacity(
+      char[] array, int minLength, int padding) {
+    checkArgument(minLength >= 0, "Invalid minLength: %s", minLength);
+    checkArgument(padding >= 0, "Invalid padding: %s", padding);
+    return (array.length < minLength)
+        ? copyOf(array, minLength + padding)
+        : array;
+  }
+
+  // Arrays.copyOf() requires Java 6
+  private static char[] copyOf(char[] original, int length) {
+    char[] copy = new char[length];
+    System.arraycopy(original, 0, copy, 0, Math.min(original.length, length));
+    return copy;
+  }
+
+  /**
+   * Returns a string containing the supplied {@code char} values separated
+   * by {@code separator}. For example, {@code join("-", '1', '2', '3')} returns
+   * the string {@code "1-2-3"}.
+   *
+   * @param separator the text that should appear between consecutive values in
+   *     the resulting string (but not at the start or end)
+   * @param array an array of {@code char} values, possibly empty
+   */
+  public static String join(String separator, char... array) {
+    checkNotNull(separator);
+    int len = array.length;
+    if (len == 0) {
+      return "";
+    }
+
+    StringBuilder builder
+        = new StringBuilder(len + separator.length() * (len - 1));
+    builder.append(array[0]);
+    for (int i = 1; i < len; i++) {
+      builder.append(separator).append(array[i]);
+    }
+    return builder.toString();
+  }
+
+  /**
+   * Returns a comparator that compares two {@code char} arrays
+   * lexicographically. That is, it compares, using {@link
+   * #compare(char, char)}), the first pair of values that follow any
+   * common prefix, or when one array is a prefix of the other, treats the
+   * shorter array as the lesser. For example,
+   * {@code [] < ['a'] < ['a', 'b'] < ['b']}.
+   *
+   * <p>The returned comparator is inconsistent with {@link
+   * Object#equals(Object)} (since arrays support only identity equality), but
+   * it is consistent with {@link Arrays#equals(char[], char[])}.
+   *
+   * @see <a href="http://en.wikipedia.org/wiki/Lexicographical_order">
+   *     Lexicographical order article at Wikipedia</a>
+   * @since 2.0
+   */
+  public static Comparator<char[]> lexicographicalComparator() {
+    return LexicographicalComparator.INSTANCE;
+  }
+
+  private enum LexicographicalComparator implements Comparator<char[]> {
+    INSTANCE;
+
+    @Override
+    public int compare(char[] left, char[] right) {
+      int minLength = Math.min(left.length, right.length);
+      for (int i = 0; i < minLength; i++) {
+        int result = Chars.compare(left[i], right[i]);
+        if (result != 0) {
+          return result;
+        }
+      }
+      return left.length - right.length;
+    }
+  }
+
+  /**
+   * Copies a collection of {@code Character} instances into a new array of
+   * primitive {@code char} values.
+   *
+   * <p>Elements are copied from the argument collection as if by {@code
+   * collection.toArray()}.  Calling this method is as thread-safe as calling
+   * that method.
+   *
+   * @param collection a collection of {@code Character} objects
+   * @return an array containing the same values as {@code collection}, in the
+   *     same order, converted to primitives
+   * @throws NullPointerException if {@code collection} or any of its elements
+   *     is null
+   */
+  public static char[] toArray(Collection<Character> collection) {
+    if (collection instanceof CharArrayAsList) {
+      return ((CharArrayAsList) collection).toCharArray();
+    }
+
+    Object[] boxedArray = collection.toArray();
+    int len = boxedArray.length;
+    char[] array = new char[len];
+    for (int i = 0; i < len; i++) {
+      // checkNotNull for GWT (do not optimize)
+      array[i] = (Character) checkNotNull(boxedArray[i]);
+    }
+    return array;
+  }
+
+  /**
+   * Returns a fixed-size list backed by the specified array, similar to {@link
+   * Arrays#asList(Object[])}. The list supports {@link List#set(int, Object)},
+   * but any attempt to set a value to {@code null} will result in a {@link
+   * NullPointerException}.
+   *
+   * <p>The returned list maintains the values, but not the identities, of
+   * {@code Character} objects written to or read from it.  For example, whether
+   * {@code list.get(0) == list.get(0)} is true for the returned list is
+   * unspecified.
+   *
+   * @param backingArray the array to back the list
+   * @return a list view of the array
+   */
+  public static List<Character> asList(char... backingArray) {
+    if (backingArray.length == 0) {
+      return Collections.emptyList();
+    }
+    return new CharArrayAsList(backingArray);
+  }
+
+  @GwtCompatible
+  private static class CharArrayAsList extends AbstractList<Character>
+      implements RandomAccess, Serializable {
+    final char[] array;
+    final int start;
+    final int end;
+
+    CharArrayAsList(char[] array) {
+      this(array, 0, array.length);
+    }
+
+    CharArrayAsList(char[] array, int start, int end) {
+      this.array = array;
+      this.start = start;
+      this.end = end;
+    }
+
+    @Override public int size() {
+      return end - start;
+    }
+
+    @Override public boolean isEmpty() {
+      return false;
+    }
+
+    @Override public Character get(int index) {
+      checkElementIndex(index, size());
+      return array[start + index];
+    }
+
+    @Override public boolean contains(Object target) {
+      // Overridden to prevent a ton of boxing
+      return (target instanceof Character)
+          && Chars.indexOf(array, (Character) target, start, end) != -1;
+    }
+
+    @Override public int indexOf(Object target) {
+      // Overridden to prevent a ton of boxing
+      if (target instanceof Character) {
+        int i = Chars.indexOf(array, (Character) target, start, end);
+        if (i >= 0) {
+          return i - start;
+        }
+      }
+      return -1;
+    }
+
+    @Override public int lastIndexOf(Object target) {
+      // Overridden to prevent a ton of boxing
+      if (target instanceof Character) {
+        int i = Chars.lastIndexOf(array, (Character) target, start, end);
+        if (i >= 0) {
+          return i - start;
+        }
+      }
+      return -1;
+    }
+
+    @Override public Character set(int index, Character element) {
+      checkElementIndex(index, size());
+      char oldValue = array[start + index];
+      array[start + index] = checkNotNull(element);  // checkNotNull for GWT (do not optimize)
+      return oldValue;
+    }
+
+    @Override public List<Character> subList(int fromIndex, int toIndex) {
+      int size = size();
+      checkPositionIndexes(fromIndex, toIndex, size);
+      if (fromIndex == toIndex) {
+        return Collections.emptyList();
+      }
+      return new CharArrayAsList(array, start + fromIndex, start + toIndex);
+    }
+
+    @Override public boolean equals(Object object) {
+      if (object == this) {
+        return true;
+      }
+      if (object instanceof CharArrayAsList) {
+        CharArrayAsList that = (CharArrayAsList) object;
+        int size = size();
+        if (that.size() != size) {
+          return false;
+        }
+        for (int i = 0; i < size; i++) {
+          if (array[start + i] != that.array[that.start + i]) {
+            return false;
+          }
+        }
+        return true;
+      }
+      return super.equals(object);
+    }
+
+    @Override public int hashCode() {
+      int result = 1;
+      for (int i = start; i < end; i++) {
+        result = 31 * result + Chars.hashCode(array[i]);
+      }
+      return result;
+    }
+
+    @Override public String toString() {
+      StringBuilder builder = new StringBuilder(size() * 3);
+      builder.append('[').append(array[start]);
+      for (int i = start + 1; i < end; i++) {
+        builder.append(", ").append(array[i]);
+      }
+      return builder.append(']').toString();
+    }
+
+    char[] toCharArray() {
+      // Arrays.copyOfRange() requires Java 6
+      int size = size();
+      char[] result = new char[size];
+      System.arraycopy(array, start, result, 0, size);
+      return result;
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+}
+
diff --git a/guava-gwt/src-super/com/google/common/primitives/super/com/google/common/primitives/Ints.java b/guava-gwt/src-super/com/google/common/primitives/super/com/google/common/primitives/Ints.java
new file mode 100644
index 0000000..0cee6c4
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/primitives/super/com/google/common/primitives/Ints.java
@@ -0,0 +1,533 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.primitives;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkElementIndex;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkPositionIndexes;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.io.Serializable;
+import java.util.AbstractList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.RandomAccess;
+
+/**
+ * Static utility methods pertaining to {@code int} primitives, that are not
+ * already found in either {@link Integer} or {@link Arrays}.
+ *
+ * @author Kevin Bourrillion
+ * @since 1.0
+ */
+@GwtCompatible(emulated = true)
+public final class Ints {
+  private Ints() {}
+
+  /**
+   * The number of bytes required to represent a primitive {@code int}
+   * value.
+   */
+  public static final int BYTES = Integer.SIZE / Byte.SIZE;
+
+  /**
+   * The largest power of two that can be represented as an {@code int}.
+   *
+   * @since 10.0
+   */
+  public static final int MAX_POWER_OF_TWO = 1 << (Integer.SIZE - 2);
+
+  /**
+   * Returns a hash code for {@code value}; equal to the result of invoking
+   * {@code ((Integer) value).hashCode()}.
+   *
+   * @param value a primitive {@code int} value
+   * @return a hash code for the value
+   */
+  public static int hashCode(int value) {
+    return value;
+  }
+
+  /**
+   * Returns the {@code int} value that is equal to {@code value}, if possible.
+   *
+   * @param value any value in the range of the {@code int} type
+   * @return the {@code int} value that equals {@code value}
+   * @throws IllegalArgumentException if {@code value} is greater than {@link
+   *     Integer#MAX_VALUE} or less than {@link Integer#MIN_VALUE}
+   */
+  public static int checkedCast(long value) {
+    int result = (int) value;
+    checkArgument(result == value, "Out of range: %s", value);
+    return result;
+  }
+
+  /**
+   * Returns the {@code int} nearest in value to {@code value}.
+   *
+   * @param value any {@code long} value
+   * @return the same value cast to {@code int} if it is in the range of the
+   *     {@code int} type, {@link Integer#MAX_VALUE} if it is too large,
+   *     or {@link Integer#MIN_VALUE} if it is too small
+   */
+  public static int saturatedCast(long value) {
+    if (value > Integer.MAX_VALUE) {
+      return Integer.MAX_VALUE;
+    }
+    if (value < Integer.MIN_VALUE) {
+      return Integer.MIN_VALUE;
+    }
+    return (int) value;
+  }
+
+  /**
+   * Compares the two specified {@code int} values. The sign of the value
+   * returned is the same as that of {@code ((Integer) a).compareTo(b)}.
+   *
+   * @param a the first {@code int} to compare
+   * @param b the second {@code int} to compare
+   * @return a negative value if {@code a} is less than {@code b}; a positive
+   *     value if {@code a} is greater than {@code b}; or zero if they are equal
+   */
+  public static int compare(int a, int b) {
+    return (a < b) ? -1 : ((a > b) ? 1 : 0);
+  }
+
+  /**
+   * Returns {@code true} if {@code target} is present as an element anywhere in
+   * {@code array}.
+   *
+   * @param array an array of {@code int} values, possibly empty
+   * @param target a primitive {@code int} value
+   * @return {@code true} if {@code array[i] == target} for some value of {@code
+   *     i}
+   */
+  public static boolean contains(int[] array, int target) {
+    for (int value : array) {
+      if (value == target) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  /**
+   * Returns the index of the first appearance of the value {@code target} in
+   * {@code array}.
+   *
+   * @param array an array of {@code int} values, possibly empty
+   * @param target a primitive {@code int} value
+   * @return the least index {@code i} for which {@code array[i] == target}, or
+   *     {@code -1} if no such index exists.
+   */
+  public static int indexOf(int[] array, int target) {
+    return indexOf(array, target, 0, array.length);
+  }
+
+  // TODO(kevinb): consider making this public
+  private static int indexOf(
+      int[] array, int target, int start, int end) {
+    for (int i = start; i < end; i++) {
+      if (array[i] == target) {
+        return i;
+      }
+    }
+    return -1;
+  }
+
+  /**
+   * Returns the start position of the first occurrence of the specified {@code
+   * target} within {@code array}, or {@code -1} if there is no such occurrence.
+   *
+   * <p>More formally, returns the lowest index {@code i} such that {@code
+   * java.util.Arrays.copyOfRange(array, i, i + target.length)} contains exactly
+   * the same elements as {@code target}.
+   *
+   * @param array the array to search for the sequence {@code target}
+   * @param target the array to search for as a sub-sequence of {@code array}
+   */
+  public static int indexOf(int[] array, int[] target) {
+    checkNotNull(array, "array");
+    checkNotNull(target, "target");
+    if (target.length == 0) {
+      return 0;
+    }
+
+    outer:
+    for (int i = 0; i < array.length - target.length + 1; i++) {
+      for (int j = 0; j < target.length; j++) {
+        if (array[i + j] != target[j]) {
+          continue outer;
+        }
+      }
+      return i;
+    }
+    return -1;
+  }
+
+  /**
+   * Returns the index of the last appearance of the value {@code target} in
+   * {@code array}.
+   *
+   * @param array an array of {@code int} values, possibly empty
+   * @param target a primitive {@code int} value
+   * @return the greatest index {@code i} for which {@code array[i] == target},
+   *     or {@code -1} if no such index exists.
+   */
+  public static int lastIndexOf(int[] array, int target) {
+    return lastIndexOf(array, target, 0, array.length);
+  }
+
+  // TODO(kevinb): consider making this public
+  private static int lastIndexOf(
+      int[] array, int target, int start, int end) {
+    for (int i = end - 1; i >= start; i--) {
+      if (array[i] == target) {
+        return i;
+      }
+    }
+    return -1;
+  }
+
+  /**
+   * Returns the least value present in {@code array}.
+   *
+   * @param array a <i>nonempty</i> array of {@code int} values
+   * @return the value present in {@code array} that is less than or equal to
+   *     every other value in the array
+   * @throws IllegalArgumentException if {@code array} is empty
+   */
+  public static int min(int... array) {
+    checkArgument(array.length > 0);
+    int min = array[0];
+    for (int i = 1; i < array.length; i++) {
+      if (array[i] < min) {
+        min = array[i];
+      }
+    }
+    return min;
+  }
+
+  /**
+   * Returns the greatest value present in {@code array}.
+   *
+   * @param array a <i>nonempty</i> array of {@code int} values
+   * @return the value present in {@code array} that is greater than or equal to
+   *     every other value in the array
+   * @throws IllegalArgumentException if {@code array} is empty
+   */
+  public static int max(int... array) {
+    checkArgument(array.length > 0);
+    int max = array[0];
+    for (int i = 1; i < array.length; i++) {
+      if (array[i] > max) {
+        max = array[i];
+      }
+    }
+    return max;
+  }
+
+  /**
+   * Returns the values from each provided array combined into a single array.
+   * For example, {@code concat(new int[] {a, b}, new int[] {}, new
+   * int[] {c}} returns the array {@code {a, b, c}}.
+   *
+   * @param arrays zero or more {@code int} arrays
+   * @return a single array containing all the values from the source arrays, in
+   *     order
+   */
+  public static int[] concat(int[]... arrays) {
+    int length = 0;
+    for (int[] array : arrays) {
+      length += array.length;
+    }
+    int[] result = new int[length];
+    int pos = 0;
+    for (int[] array : arrays) {
+      System.arraycopy(array, 0, result, pos, array.length);
+      pos += array.length;
+    }
+    return result;
+  }
+
+  /**
+   * Returns an array containing the same values as {@code array}, but
+   * guaranteed to be of a specified minimum length. If {@code array} already
+   * has a length of at least {@code minLength}, it is returned directly.
+   * Otherwise, a new array of size {@code minLength + padding} is returned,
+   * containing the values of {@code array}, and zeroes in the remaining places.
+   *
+   * @param array the source array
+   * @param minLength the minimum length the returned array must guarantee
+   * @param padding an extra amount to "grow" the array by if growth is
+   *     necessary
+   * @throws IllegalArgumentException if {@code minLength} or {@code padding} is
+   *     negative
+   * @return an array containing the values of {@code array}, with guaranteed
+   *     minimum length {@code minLength}
+   */
+  public static int[] ensureCapacity(
+      int[] array, int minLength, int padding) {
+    checkArgument(minLength >= 0, "Invalid minLength: %s", minLength);
+    checkArgument(padding >= 0, "Invalid padding: %s", padding);
+    return (array.length < minLength)
+        ? copyOf(array, minLength + padding)
+        : array;
+  }
+
+  // Arrays.copyOf() requires Java 6
+  private static int[] copyOf(int[] original, int length) {
+    int[] copy = new int[length];
+    System.arraycopy(original, 0, copy, 0, Math.min(original.length, length));
+    return copy;
+  }
+
+  /**
+   * Returns a string containing the supplied {@code int} values separated
+   * by {@code separator}. For example, {@code join("-", 1, 2, 3)} returns
+   * the string {@code "1-2-3"}.
+   *
+   * @param separator the text that should appear between consecutive values in
+   *     the resulting string (but not at the start or end)
+   * @param array an array of {@code int} values, possibly empty
+   */
+  public static String join(String separator, int... array) {
+    checkNotNull(separator);
+    if (array.length == 0) {
+      return "";
+    }
+
+    // For pre-sizing a builder, just get the right order of magnitude
+    StringBuilder builder = new StringBuilder(array.length * 5);
+    builder.append(array[0]);
+    for (int i = 1; i < array.length; i++) {
+      builder.append(separator).append(array[i]);
+    }
+    return builder.toString();
+  }
+
+  /**
+   * Returns a comparator that compares two {@code int} arrays
+   * lexicographically. That is, it compares, using {@link
+   * #compare(int, int)}), the first pair of values that follow any
+   * common prefix, or when one array is a prefix of the other, treats the
+   * shorter array as the lesser. For example, {@code [] < [1] < [1, 2] < [2]}.
+   *
+   * <p>The returned comparator is inconsistent with {@link
+   * Object#equals(Object)} (since arrays support only identity equality), but
+   * it is consistent with {@link Arrays#equals(int[], int[])}.
+   *
+   * @see <a href="http://en.wikipedia.org/wiki/Lexicographical_order">
+   *     Lexicographical order article at Wikipedia</a>
+   * @since 2.0
+   */
+  public static Comparator<int[]> lexicographicalComparator() {
+    return LexicographicalComparator.INSTANCE;
+  }
+
+  private enum LexicographicalComparator implements Comparator<int[]> {
+    INSTANCE;
+
+    @Override
+    public int compare(int[] left, int[] right) {
+      int minLength = Math.min(left.length, right.length);
+      for (int i = 0; i < minLength; i++) {
+        int result = Ints.compare(left[i], right[i]);
+        if (result != 0) {
+          return result;
+        }
+      }
+      return left.length - right.length;
+    }
+  }
+
+  /**
+   * Copies a collection of {@code Integer} instances into a new array of
+   * primitive {@code int} values.
+   *
+   * <p>Elements are copied from the argument collection as if by {@code
+   * collection.toArray()}.  Calling this method is as thread-safe as calling
+   * that method.
+   *
+   * @param collection a collection of {@code Integer} objects
+   * @return an array containing the same values as {@code collection}, in the
+   *     same order, converted to primitives
+   * @throws NullPointerException if {@code collection} or any of its elements
+   *     is null
+   */
+  public static int[] toArray(Collection<Integer> collection) {
+    if (collection instanceof IntArrayAsList) {
+      return ((IntArrayAsList) collection).toIntArray();
+    }
+
+    Object[] boxedArray = collection.toArray();
+    int len = boxedArray.length;
+    int[] array = new int[len];
+    for (int i = 0; i < len; i++) {
+      // checkNotNull for GWT (do not optimize)
+      array[i] = (Integer) checkNotNull(boxedArray[i]);
+    }
+    return array;
+  }
+
+  /**
+   * Returns a fixed-size list backed by the specified array, similar to {@link
+   * Arrays#asList(Object[])}. The list supports {@link List#set(int, Object)},
+   * but any attempt to set a value to {@code null} will result in a {@link
+   * NullPointerException}.
+   *
+   * <p>The returned list maintains the values, but not the identities, of
+   * {@code Integer} objects written to or read from it.  For example, whether
+   * {@code list.get(0) == list.get(0)} is true for the returned list is
+   * unspecified.
+   *
+   * @param backingArray the array to back the list
+   * @return a list view of the array
+   */
+  public static List<Integer> asList(int... backingArray) {
+    if (backingArray.length == 0) {
+      return Collections.emptyList();
+    }
+    return new IntArrayAsList(backingArray);
+  }
+
+  @GwtCompatible
+  private static class IntArrayAsList extends AbstractList<Integer>
+      implements RandomAccess, Serializable {
+    final int[] array;
+    final int start;
+    final int end;
+
+    IntArrayAsList(int[] array) {
+      this(array, 0, array.length);
+    }
+
+    IntArrayAsList(int[] array, int start, int end) {
+      this.array = array;
+      this.start = start;
+      this.end = end;
+    }
+
+    @Override public int size() {
+      return end - start;
+    }
+
+    @Override public boolean isEmpty() {
+      return false;
+    }
+
+    @Override public Integer get(int index) {
+      checkElementIndex(index, size());
+      return array[start + index];
+    }
+
+    @Override public boolean contains(Object target) {
+      // Overridden to prevent a ton of boxing
+      return (target instanceof Integer)
+          && Ints.indexOf(array, (Integer) target, start, end) != -1;
+    }
+
+    @Override public int indexOf(Object target) {
+      // Overridden to prevent a ton of boxing
+      if (target instanceof Integer) {
+        int i = Ints.indexOf(array, (Integer) target, start, end);
+        if (i >= 0) {
+          return i - start;
+        }
+      }
+      return -1;
+    }
+
+    @Override public int lastIndexOf(Object target) {
+      // Overridden to prevent a ton of boxing
+      if (target instanceof Integer) {
+        int i = Ints.lastIndexOf(array, (Integer) target, start, end);
+        if (i >= 0) {
+          return i - start;
+        }
+      }
+      return -1;
+    }
+
+    @Override public Integer set(int index, Integer element) {
+      checkElementIndex(index, size());
+      int oldValue = array[start + index];
+      array[start + index] = checkNotNull(element);  // checkNotNull for GWT (do not optimize)
+      return oldValue;
+    }
+
+    @Override public List<Integer> subList(int fromIndex, int toIndex) {
+      int size = size();
+      checkPositionIndexes(fromIndex, toIndex, size);
+      if (fromIndex == toIndex) {
+        return Collections.emptyList();
+      }
+      return new IntArrayAsList(array, start + fromIndex, start + toIndex);
+    }
+
+    @Override public boolean equals(Object object) {
+      if (object == this) {
+        return true;
+      }
+      if (object instanceof IntArrayAsList) {
+        IntArrayAsList that = (IntArrayAsList) object;
+        int size = size();
+        if (that.size() != size) {
+          return false;
+        }
+        for (int i = 0; i < size; i++) {
+          if (array[start + i] != that.array[that.start + i]) {
+            return false;
+          }
+        }
+        return true;
+      }
+      return super.equals(object);
+    }
+
+    @Override public int hashCode() {
+      int result = 1;
+      for (int i = start; i < end; i++) {
+        result = 31 * result + Ints.hashCode(array[i]);
+      }
+      return result;
+    }
+
+    @Override public String toString() {
+      StringBuilder builder = new StringBuilder(size() * 5);
+      builder.append('[').append(array[start]);
+      for (int i = start + 1; i < end; i++) {
+        builder.append(", ").append(array[i]);
+      }
+      return builder.append(']').toString();
+    }
+
+    int[] toIntArray() {
+      // Arrays.copyOfRange() requires Java 6
+      int size = size();
+      int[] result = new int[size];
+      System.arraycopy(array, start, result, 0, size);
+      return result;
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+}
diff --git a/guava-gwt/src-super/com/google/common/primitives/super/com/google/common/primitives/Longs.java b/guava-gwt/src-super/com/google/common/primitives/super/com/google/common/primitives/Longs.java
new file mode 100644
index 0000000..000e055
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/primitives/super/com/google/common/primitives/Longs.java
@@ -0,0 +1,507 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.primitives;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkElementIndex;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkPositionIndexes;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.io.Serializable;
+import java.util.AbstractList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.RandomAccess;
+
+/**
+ * Static utility methods pertaining to {@code long} primitives, that are not
+ * already found in either {@link Long} or {@link Arrays}.
+ *
+ * @author Kevin Bourrillion
+ * @since 1.0
+ */
+@GwtCompatible(emulated = true)
+public final class Longs {
+  private Longs() {}
+
+  /**
+   * The number of bytes required to represent a primitive {@code long}
+   * value.
+   */
+  public static final int BYTES = Long.SIZE / Byte.SIZE;
+
+  /**
+   * The largest power of two that can be represented as a {@code long}.
+   *
+   * @since 10.0
+   */
+  public static final long MAX_POWER_OF_TWO = 1L << (Long.SIZE - 2);
+
+  /**
+   * Returns a hash code for {@code value}; equal to the result of invoking
+   * {@code ((Long) value).hashCode()}.
+   *
+   * <p>This method always return the value specified by {@link
+   * Long#hashCode()} in java, which might be different from
+   * {@code ((Long) value).hashCode()} in GWT because {@link Long#hashCode()}
+   * in GWT does not obey the JRE contract.
+   *
+   * @param value a primitive {@code long} value
+   * @return a hash code for the value
+   */
+  public static int hashCode(long value) {
+    return (int) (value ^ (value >>> 32));
+  }
+
+  /**
+   * Compares the two specified {@code long} values. The sign of the value
+   * returned is the same as that of {@code ((Long) a).compareTo(b)}.
+   *
+   * @param a the first {@code long} to compare
+   * @param b the second {@code long} to compare
+   * @return a negative value if {@code a} is less than {@code b}; a positive
+   *     value if {@code a} is greater than {@code b}; or zero if they are equal
+   */
+  public static int compare(long a, long b) {
+    return (a < b) ? -1 : ((a > b) ? 1 : 0);
+  }
+
+  /**
+   * Returns {@code true} if {@code target} is present as an element anywhere in
+   * {@code array}.
+   *
+   * @param array an array of {@code long} values, possibly empty
+   * @param target a primitive {@code long} value
+   * @return {@code true} if {@code array[i] == target} for some value of {@code
+   *     i}
+   */
+  public static boolean contains(long[] array, long target) {
+    for (long value : array) {
+      if (value == target) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  /**
+   * Returns the index of the first appearance of the value {@code target} in
+   * {@code array}.
+   *
+   * @param array an array of {@code long} values, possibly empty
+   * @param target a primitive {@code long} value
+   * @return the least index {@code i} for which {@code array[i] == target}, or
+   *     {@code -1} if no such index exists.
+   */
+  public static int indexOf(long[] array, long target) {
+    return indexOf(array, target, 0, array.length);
+  }
+
+  // TODO(kevinb): consider making this public
+  private static int indexOf(
+      long[] array, long target, int start, int end) {
+    for (int i = start; i < end; i++) {
+      if (array[i] == target) {
+        return i;
+      }
+    }
+    return -1;
+  }
+
+  /**
+   * Returns the start position of the first occurrence of the specified {@code
+   * target} within {@code array}, or {@code -1} if there is no such occurrence.
+   *
+   * <p>More formally, returns the lowest index {@code i} such that {@code
+   * java.util.Arrays.copyOfRange(array, i, i + target.length)} contains exactly
+   * the same elements as {@code target}.
+   *
+   * @param array the array to search for the sequence {@code target}
+   * @param target the array to search for as a sub-sequence of {@code array}
+   */
+  public static int indexOf(long[] array, long[] target) {
+    checkNotNull(array, "array");
+    checkNotNull(target, "target");
+    if (target.length == 0) {
+      return 0;
+    }
+
+    outer:
+    for (int i = 0; i < array.length - target.length + 1; i++) {
+      for (int j = 0; j < target.length; j++) {
+        if (array[i + j] != target[j]) {
+          continue outer;
+        }
+      }
+      return i;
+    }
+    return -1;
+  }
+
+  /**
+   * Returns the index of the last appearance of the value {@code target} in
+   * {@code array}.
+   *
+   * @param array an array of {@code long} values, possibly empty
+   * @param target a primitive {@code long} value
+   * @return the greatest index {@code i} for which {@code array[i] == target},
+   *     or {@code -1} if no such index exists.
+   */
+  public static int lastIndexOf(long[] array, long target) {
+    return lastIndexOf(array, target, 0, array.length);
+  }
+
+  // TODO(kevinb): consider making this public
+  private static int lastIndexOf(
+      long[] array, long target, int start, int end) {
+    for (int i = end - 1; i >= start; i--) {
+      if (array[i] == target) {
+        return i;
+      }
+    }
+    return -1;
+  }
+
+  /**
+   * Returns the least value present in {@code array}.
+   *
+   * @param array a <i>nonempty</i> array of {@code long} values
+   * @return the value present in {@code array} that is less than or equal to
+   *     every other value in the array
+   * @throws IllegalArgumentException if {@code array} is empty
+   */
+  public static long min(long... array) {
+    checkArgument(array.length > 0);
+    long min = array[0];
+    for (int i = 1; i < array.length; i++) {
+      if (array[i] < min) {
+        min = array[i];
+      }
+    }
+    return min;
+  }
+
+  /**
+   * Returns the greatest value present in {@code array}.
+   *
+   * @param array a <i>nonempty</i> array of {@code long} values
+   * @return the value present in {@code array} that is greater than or equal to
+   *     every other value in the array
+   * @throws IllegalArgumentException if {@code array} is empty
+   */
+  public static long max(long... array) {
+    checkArgument(array.length > 0);
+    long max = array[0];
+    for (int i = 1; i < array.length; i++) {
+      if (array[i] > max) {
+        max = array[i];
+      }
+    }
+    return max;
+  }
+
+  /**
+   * Returns the values from each provided array combined into a single array.
+   * For example, {@code concat(new long[] {a, b}, new long[] {}, new
+   * long[] {c}} returns the array {@code {a, b, c}}.
+   *
+   * @param arrays zero or more {@code long} arrays
+   * @return a single array containing all the values from the source arrays, in
+   *     order
+   */
+  public static long[] concat(long[]... arrays) {
+    int length = 0;
+    for (long[] array : arrays) {
+      length += array.length;
+    }
+    long[] result = new long[length];
+    int pos = 0;
+    for (long[] array : arrays) {
+      System.arraycopy(array, 0, result, pos, array.length);
+      pos += array.length;
+    }
+    return result;
+  }
+
+  /**
+   * Returns an array containing the same values as {@code array}, but
+   * guaranteed to be of a specified minimum length. If {@code array} already
+   * has a length of at least {@code minLength}, it is returned directly.
+   * Otherwise, a new array of size {@code minLength + padding} is returned,
+   * containing the values of {@code array}, and zeroes in the remaining places.
+   *
+   * @param array the source array
+   * @param minLength the minimum length the returned array must guarantee
+   * @param padding an extra amount to "grow" the array by if growth is
+   *     necessary
+   * @throws IllegalArgumentException if {@code minLength} or {@code padding} is
+   *     negative
+   * @return an array containing the values of {@code array}, with guaranteed
+   *     minimum length {@code minLength}
+   */
+  public static long[] ensureCapacity(
+      long[] array, int minLength, int padding) {
+    checkArgument(minLength >= 0, "Invalid minLength: %s", minLength);
+    checkArgument(padding >= 0, "Invalid padding: %s", padding);
+    return (array.length < minLength)
+        ? copyOf(array, minLength + padding)
+        : array;
+  }
+
+  // Arrays.copyOf() requires Java 6
+  private static long[] copyOf(long[] original, int length) {
+    long[] copy = new long[length];
+    System.arraycopy(original, 0, copy, 0, Math.min(original.length, length));
+    return copy;
+  }
+
+  /**
+   * Returns a string containing the supplied {@code long} values separated
+   * by {@code separator}. For example, {@code join("-", 1L, 2L, 3L)} returns
+   * the string {@code "1-2-3"}.
+   *
+   * @param separator the text that should appear between consecutive values in
+   *     the resulting string (but not at the start or end)
+   * @param array an array of {@code long} values, possibly empty
+   */
+  public static String join(String separator, long... array) {
+    checkNotNull(separator);
+    if (array.length == 0) {
+      return "";
+    }
+
+    // For pre-sizing a builder, just get the right order of magnitude
+    StringBuilder builder = new StringBuilder(array.length * 10);
+    builder.append(array[0]);
+    for (int i = 1; i < array.length; i++) {
+      builder.append(separator).append(array[i]);
+    }
+    return builder.toString();
+  }
+
+  /**
+   * Returns a comparator that compares two {@code long} arrays
+   * lexicographically. That is, it compares, using {@link
+   * #compare(long, long)}), the first pair of values that follow any
+   * common prefix, or when one array is a prefix of the other, treats the
+   * shorter array as the lesser. For example,
+   * {@code [] < [1L] < [1L, 2L] < [2L]}.
+   *
+   * <p>The returned comparator is inconsistent with {@link
+   * Object#equals(Object)} (since arrays support only identity equality), but
+   * it is consistent with {@link Arrays#equals(long[], long[])}.
+   *
+   * @see <a href="http://en.wikipedia.org/wiki/Lexicographical_order">
+   *     Lexicographical order article at Wikipedia</a>
+   * @since 2.0
+   */
+  public static Comparator<long[]> lexicographicalComparator() {
+    return LexicographicalComparator.INSTANCE;
+  }
+
+  private enum LexicographicalComparator implements Comparator<long[]> {
+    INSTANCE;
+
+    @Override
+    public int compare(long[] left, long[] right) {
+      int minLength = Math.min(left.length, right.length);
+      for (int i = 0; i < minLength; i++) {
+        int result = Longs.compare(left[i], right[i]);
+        if (result != 0) {
+          return result;
+        }
+      }
+      return left.length - right.length;
+    }
+  }
+
+  /**
+   * Copies a collection of {@code Long} instances into a new array of
+   * primitive {@code long} values.
+   *
+   * <p>Elements are copied from the argument collection as if by {@code
+   * collection.toArray()}.  Calling this method is as thread-safe as calling
+   * that method.
+   *
+   * @param collection a collection of {@code Long} objects
+   * @return an array containing the same values as {@code collection}, in the
+   *     same order, converted to primitives
+   * @throws NullPointerException if {@code collection} or any of its elements
+   *     is null
+   */
+  public static long[] toArray(Collection<Long> collection) {
+    if (collection instanceof LongArrayAsList) {
+      return ((LongArrayAsList) collection).toLongArray();
+    }
+
+    Object[] boxedArray = collection.toArray();
+    int len = boxedArray.length;
+    long[] array = new long[len];
+    for (int i = 0; i < len; i++) {
+      // checkNotNull for GWT (do not optimize)
+      array[i] = (Long) checkNotNull(boxedArray[i]);
+    }
+    return array;
+  }
+
+  /**
+   * Returns a fixed-size list backed by the specified array, similar to {@link
+   * Arrays#asList(Object[])}. The list supports {@link List#set(int, Object)},
+   * but any attempt to set a value to {@code null} will result in a {@link
+   * NullPointerException}.
+   *
+   * <p>The returned list maintains the values, but not the identities, of
+   * {@code Long} objects written to or read from it.  For example, whether
+   * {@code list.get(0) == list.get(0)} is true for the returned list is
+   * unspecified.
+   *
+   * @param backingArray the array to back the list
+   * @return a list view of the array
+   */
+  public static List<Long> asList(long... backingArray) {
+    if (backingArray.length == 0) {
+      return Collections.emptyList();
+    }
+    return new LongArrayAsList(backingArray);
+  }
+
+  @GwtCompatible
+  private static class LongArrayAsList extends AbstractList<Long>
+      implements RandomAccess, Serializable {
+    final long[] array;
+    final int start;
+    final int end;
+
+    LongArrayAsList(long[] array) {
+      this(array, 0, array.length);
+    }
+
+    LongArrayAsList(long[] array, int start, int end) {
+      this.array = array;
+      this.start = start;
+      this.end = end;
+    }
+
+    @Override public int size() {
+      return end - start;
+    }
+
+    @Override public boolean isEmpty() {
+      return false;
+    }
+
+    @Override public Long get(int index) {
+      checkElementIndex(index, size());
+      return array[start + index];
+    }
+
+    @Override public boolean contains(Object target) {
+      // Overridden to prevent a ton of boxing
+      return (target instanceof Long)
+          && Longs.indexOf(array, (Long) target, start, end) != -1;
+    }
+
+    @Override public int indexOf(Object target) {
+      // Overridden to prevent a ton of boxing
+      if (target instanceof Long) {
+        int i = Longs.indexOf(array, (Long) target, start, end);
+        if (i >= 0) {
+          return i - start;
+        }
+      }
+      return -1;
+    }
+
+    @Override public int lastIndexOf(Object target) {
+      // Overridden to prevent a ton of boxing
+      if (target instanceof Long) {
+        int i = Longs.lastIndexOf(array, (Long) target, start, end);
+        if (i >= 0) {
+          return i - start;
+        }
+      }
+      return -1;
+    }
+
+    @Override public Long set(int index, Long element) {
+      checkElementIndex(index, size());
+      long oldValue = array[start + index];
+      array[start + index] = checkNotNull(element);  // checkNotNull for GWT (do not optimize)
+      return oldValue;
+    }
+
+    @Override public List<Long> subList(int fromIndex, int toIndex) {
+      int size = size();
+      checkPositionIndexes(fromIndex, toIndex, size);
+      if (fromIndex == toIndex) {
+        return Collections.emptyList();
+      }
+      return new LongArrayAsList(array, start + fromIndex, start + toIndex);
+    }
+
+    @Override public boolean equals(Object object) {
+      if (object == this) {
+        return true;
+      }
+      if (object instanceof LongArrayAsList) {
+        LongArrayAsList that = (LongArrayAsList) object;
+        int size = size();
+        if (that.size() != size) {
+          return false;
+        }
+        for (int i = 0; i < size; i++) {
+          if (array[start + i] != that.array[that.start + i]) {
+            return false;
+          }
+        }
+        return true;
+      }
+      return super.equals(object);
+    }
+
+    @Override public int hashCode() {
+      int result = 1;
+      for (int i = start; i < end; i++) {
+        result = 31 * result + Longs.hashCode(array[i]);
+      }
+      return result;
+    }
+
+    @Override public String toString() {
+      StringBuilder builder = new StringBuilder(size() * 10);
+      builder.append('[').append(array[start]);
+      for (int i = start + 1; i < end; i++) {
+        builder.append(", ").append(array[i]);
+      }
+      return builder.append(']').toString();
+    }
+
+    long[] toLongArray() {
+      // Arrays.copyOfRange() requires Java 6
+      int size = size();
+      long[] result = new long[size];
+      System.arraycopy(array, start, result, 0, size);
+      return result;
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+}
diff --git a/guava-gwt/src-super/com/google/common/primitives/super/com/google/common/primitives/Shorts.java b/guava-gwt/src-super/com/google/common/primitives/super/com/google/common/primitives/Shorts.java
new file mode 100644
index 0000000..d1cee13
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/primitives/super/com/google/common/primitives/Shorts.java
@@ -0,0 +1,535 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.primitives;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkElementIndex;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkPositionIndexes;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.io.Serializable;
+import java.util.AbstractList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.RandomAccess;
+
+/**
+ * Static utility methods pertaining to {@code short} primitives, that are not
+ * already found in either {@link Short} or {@link Arrays}.
+ *
+ * @author Kevin Bourrillion
+ * @since 1.0
+ */
+@GwtCompatible(emulated = true)
+public final class Shorts {
+  private Shorts() {}
+
+  /**
+   * The number of bytes required to represent a primitive {@code short}
+   * value.
+   */
+  public static final int BYTES = Short.SIZE / Byte.SIZE;
+
+  /**
+   * The largest power of two that can be represented as a {@code short}.
+   *
+   * @since 10.0
+   */
+  public static final short MAX_POWER_OF_TWO = 1 << (Short.SIZE - 2);
+
+  /**
+   * Returns a hash code for {@code value}; equal to the result of invoking
+   * {@code ((Short) value).hashCode()}.
+   *
+   * @param value a primitive {@code short} value
+   * @return a hash code for the value
+   */
+  public static int hashCode(short value) {
+    return value;
+  }
+
+  /**
+   * Returns the {@code short} value that is equal to {@code value}, if
+   * possible.
+   *
+   * @param value any value in the range of the {@code short} type
+   * @return the {@code short} value that equals {@code value}
+   * @throws IllegalArgumentException if {@code value} is greater than {@link
+   *     Short#MAX_VALUE} or less than {@link Short#MIN_VALUE}
+   */
+  public static short checkedCast(long value) {
+    short result = (short) value;
+    checkArgument(result == value, "Out of range: %s", value);
+    return result;
+  }
+
+  /**
+   * Returns the {@code short} nearest in value to {@code value}.
+   *
+   * @param value any {@code long} value
+   * @return the same value cast to {@code short} if it is in the range of the
+   *     {@code short} type, {@link Short#MAX_VALUE} if it is too large,
+   *     or {@link Short#MIN_VALUE} if it is too small
+   */
+  public static short saturatedCast(long value) {
+    if (value > Short.MAX_VALUE) {
+      return Short.MAX_VALUE;
+    }
+    if (value < Short.MIN_VALUE) {
+      return Short.MIN_VALUE;
+    }
+    return (short) value;
+  }
+
+  /**
+   * Compares the two specified {@code short} values. The sign of the value
+   * returned is the same as that of {@code ((Short) a).compareTo(b)}.
+   *
+   * @param a the first {@code short} to compare
+   * @param b the second {@code short} to compare
+   * @return a negative value if {@code a} is less than {@code b}; a positive
+   *     value if {@code a} is greater than {@code b}; or zero if they are equal
+   */
+  public static int compare(short a, short b) {
+    return a - b; // safe due to restricted range
+  }
+
+  /**
+   * Returns {@code true} if {@code target} is present as an element anywhere in
+   * {@code array}.
+   *
+   * @param array an array of {@code short} values, possibly empty
+   * @param target a primitive {@code short} value
+   * @return {@code true} if {@code array[i] == target} for some value of {@code
+   *     i}
+   */
+  public static boolean contains(short[] array, short target) {
+    for (short value : array) {
+      if (value == target) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  /**
+   * Returns the index of the first appearance of the value {@code target} in
+   * {@code array}.
+   *
+   * @param array an array of {@code short} values, possibly empty
+   * @param target a primitive {@code short} value
+   * @return the least index {@code i} for which {@code array[i] == target}, or
+   *     {@code -1} if no such index exists.
+   */
+  public static int indexOf(short[] array, short target) {
+    return indexOf(array, target, 0, array.length);
+  }
+
+  // TODO(kevinb): consider making this public
+  private static int indexOf(
+      short[] array, short target, int start, int end) {
+    for (int i = start; i < end; i++) {
+      if (array[i] == target) {
+        return i;
+      }
+    }
+    return -1;
+  }
+
+  /**
+   * Returns the start position of the first occurrence of the specified {@code
+   * target} within {@code array}, or {@code -1} if there is no such occurrence.
+   *
+   * <p>More formally, returns the lowest index {@code i} such that {@code
+   * java.util.Arrays.copyOfRange(array, i, i + target.length)} contains exactly
+   * the same elements as {@code target}.
+   *
+   * @param array the array to search for the sequence {@code target}
+   * @param target the array to search for as a sub-sequence of {@code array}
+   */
+  public static int indexOf(short[] array, short[] target) {
+    checkNotNull(array, "array");
+    checkNotNull(target, "target");
+    if (target.length == 0) {
+      return 0;
+    }
+
+    outer:
+    for (int i = 0; i < array.length - target.length + 1; i++) {
+      for (int j = 0; j < target.length; j++) {
+        if (array[i + j] != target[j]) {
+          continue outer;
+        }
+      }
+      return i;
+    }
+    return -1;
+  }
+
+  /**
+   * Returns the index of the last appearance of the value {@code target} in
+   * {@code array}.
+   *
+   * @param array an array of {@code short} values, possibly empty
+   * @param target a primitive {@code short} value
+   * @return the greatest index {@code i} for which {@code array[i] == target},
+   *     or {@code -1} if no such index exists.
+   */
+  public static int lastIndexOf(short[] array, short target) {
+    return lastIndexOf(array, target, 0, array.length);
+  }
+
+  // TODO(kevinb): consider making this public
+  private static int lastIndexOf(
+      short[] array, short target, int start, int end) {
+    for (int i = end - 1; i >= start; i--) {
+      if (array[i] == target) {
+        return i;
+      }
+    }
+    return -1;
+  }
+
+  /**
+   * Returns the least value present in {@code array}.
+   *
+   * @param array a <i>nonempty</i> array of {@code short} values
+   * @return the value present in {@code array} that is less than or equal to
+   *     every other value in the array
+   * @throws IllegalArgumentException if {@code array} is empty
+   */
+  public static short min(short... array) {
+    checkArgument(array.length > 0);
+    short min = array[0];
+    for (int i = 1; i < array.length; i++) {
+      if (array[i] < min) {
+        min = array[i];
+      }
+    }
+    return min;
+  }
+
+  /**
+   * Returns the greatest value present in {@code array}.
+   *
+   * @param array a <i>nonempty</i> array of {@code short} values
+   * @return the value present in {@code array} that is greater than or equal to
+   *     every other value in the array
+   * @throws IllegalArgumentException if {@code array} is empty
+   */
+  public static short max(short... array) {
+    checkArgument(array.length > 0);
+    short max = array[0];
+    for (int i = 1; i < array.length; i++) {
+      if (array[i] > max) {
+        max = array[i];
+      }
+    }
+    return max;
+  }
+
+  /**
+   * Returns the values from each provided array combined into a single array.
+   * For example, {@code concat(new short[] {a, b}, new short[] {}, new
+   * short[] {c}} returns the array {@code {a, b, c}}.
+   *
+   * @param arrays zero or more {@code short} arrays
+   * @return a single array containing all the values from the source arrays, in
+   *     order
+   */
+  public static short[] concat(short[]... arrays) {
+    int length = 0;
+    for (short[] array : arrays) {
+      length += array.length;
+    }
+    short[] result = new short[length];
+    int pos = 0;
+    for (short[] array : arrays) {
+      System.arraycopy(array, 0, result, pos, array.length);
+      pos += array.length;
+    }
+    return result;
+  }
+
+  /**
+   * Returns an array containing the same values as {@code array}, but
+   * guaranteed to be of a specified minimum length. If {@code array} already
+   * has a length of at least {@code minLength}, it is returned directly.
+   * Otherwise, a new array of size {@code minLength + padding} is returned,
+   * containing the values of {@code array}, and zeroes in the remaining places.
+   *
+   * @param array the source array
+   * @param minLength the minimum length the returned array must guarantee
+   * @param padding an extra amount to "grow" the array by if growth is
+   *     necessary
+   * @throws IllegalArgumentException if {@code minLength} or {@code padding} is
+   *     negative
+   * @return an array containing the values of {@code array}, with guaranteed
+   *     minimum length {@code minLength}
+   */
+  public static short[] ensureCapacity(
+      short[] array, int minLength, int padding) {
+    checkArgument(minLength >= 0, "Invalid minLength: %s", minLength);
+    checkArgument(padding >= 0, "Invalid padding: %s", padding);
+    return (array.length < minLength)
+        ? copyOf(array, minLength + padding)
+        : array;
+  }
+
+  // Arrays.copyOf() requires Java 6
+  private static short[] copyOf(short[] original, int length) {
+    short[] copy = new short[length];
+    System.arraycopy(original, 0, copy, 0, Math.min(original.length, length));
+    return copy;
+  }
+
+  /**
+   * Returns a string containing the supplied {@code short} values separated
+   * by {@code separator}. For example, {@code join("-", (short) 1, (short) 2,
+   * (short) 3)} returns the string {@code "1-2-3"}.
+   *
+   * @param separator the text that should appear between consecutive values in
+   *     the resulting string (but not at the start or end)
+   * @param array an array of {@code short} values, possibly empty
+   */
+  public static String join(String separator, short... array) {
+    checkNotNull(separator);
+    if (array.length == 0) {
+      return "";
+    }
+
+    // For pre-sizing a builder, just get the right order of magnitude
+    StringBuilder builder = new StringBuilder(array.length * 6);
+    builder.append(array[0]);
+    for (int i = 1; i < array.length; i++) {
+      builder.append(separator).append(array[i]);
+    }
+    return builder.toString();
+  }
+
+  /**
+   * Returns a comparator that compares two {@code short} arrays
+   * lexicographically. That is, it compares, using {@link
+   * #compare(short, short)}), the first pair of values that follow any
+   * common prefix, or when one array is a prefix of the other, treats the
+   * shorter array as the lesser. For example, {@code [] < [(short) 1] <
+   * [(short) 1, (short) 2] < [(short) 2]}.
+   *
+   * <p>The returned comparator is inconsistent with {@link
+   * Object#equals(Object)} (since arrays support only identity equality), but
+   * it is consistent with {@link Arrays#equals(short[], short[])}.
+   *
+   * @see <a href="http://en.wikipedia.org/wiki/Lexicographical_order">
+   *     Lexicographical order article at Wikipedia</a>
+   * @since 2.0
+   */
+  public static Comparator<short[]> lexicographicalComparator() {
+    return LexicographicalComparator.INSTANCE;
+  }
+
+  private enum LexicographicalComparator implements Comparator<short[]> {
+    INSTANCE;
+
+    @Override
+    public int compare(short[] left, short[] right) {
+      int minLength = Math.min(left.length, right.length);
+      for (int i = 0; i < minLength; i++) {
+        int result = Shorts.compare(left[i], right[i]);
+        if (result != 0) {
+          return result;
+        }
+      }
+      return left.length - right.length;
+    }
+  }
+
+  /**
+   * Copies a collection of {@code Short} instances into a new array of
+   * primitive {@code short} values.
+   *
+   * <p>Elements are copied from the argument collection as if by {@code
+   * collection.toArray()}.  Calling this method is as thread-safe as calling
+   * that method.
+   *
+   * @param collection a collection of {@code Short} objects
+   * @return an array containing the same values as {@code collection}, in the
+   *     same order, converted to primitives
+   * @throws NullPointerException if {@code collection} or any of its elements
+   *     is null
+   */
+  public static short[] toArray(Collection<Short> collection) {
+    if (collection instanceof ShortArrayAsList) {
+      return ((ShortArrayAsList) collection).toShortArray();
+    }
+
+    Object[] boxedArray = collection.toArray();
+    int len = boxedArray.length;
+    short[] array = new short[len];
+    for (int i = 0; i < len; i++) {
+      // checkNotNull for GWT (do not optimize)
+      array[i] = (Short) checkNotNull(boxedArray[i]);
+    }
+    return array;
+  }
+
+  /**
+   * Returns a fixed-size list backed by the specified array, similar to {@link
+   * Arrays#asList(Object[])}. The list supports {@link List#set(int, Object)},
+   * but any attempt to set a value to {@code null} will result in a {@link
+   * NullPointerException}.
+   *
+   * <p>The returned list maintains the values, but not the identities, of
+   * {@code Short} objects written to or read from it.  For example, whether
+   * {@code list.get(0) == list.get(0)} is true for the returned list is
+   * unspecified.
+   *
+   * @param backingArray the array to back the list
+   * @return a list view of the array
+   */
+  public static List<Short> asList(short... backingArray) {
+    if (backingArray.length == 0) {
+      return Collections.emptyList();
+    }
+    return new ShortArrayAsList(backingArray);
+  }
+
+  @GwtCompatible
+  private static class ShortArrayAsList extends AbstractList<Short>
+      implements RandomAccess, Serializable {
+    final short[] array;
+    final int start;
+    final int end;
+
+    ShortArrayAsList(short[] array) {
+      this(array, 0, array.length);
+    }
+
+    ShortArrayAsList(short[] array, int start, int end) {
+      this.array = array;
+      this.start = start;
+      this.end = end;
+    }
+
+    @Override public int size() {
+      return end - start;
+    }
+
+    @Override public boolean isEmpty() {
+      return false;
+    }
+
+    @Override public Short get(int index) {
+      checkElementIndex(index, size());
+      return array[start + index];
+    }
+
+    @Override public boolean contains(Object target) {
+      // Overridden to prevent a ton of boxing
+      return (target instanceof Short)
+          && Shorts.indexOf(array, (Short) target, start, end) != -1;
+    }
+
+    @Override public int indexOf(Object target) {
+      // Overridden to prevent a ton of boxing
+      if (target instanceof Short) {
+        int i = Shorts.indexOf(array, (Short) target, start, end);
+        if (i >= 0) {
+          return i - start;
+        }
+      }
+      return -1;
+    }
+
+    @Override public int lastIndexOf(Object target) {
+      // Overridden to prevent a ton of boxing
+      if (target instanceof Short) {
+        int i = Shorts.lastIndexOf(array, (Short) target, start, end);
+        if (i >= 0) {
+          return i - start;
+        }
+      }
+      return -1;
+    }
+
+    @Override public Short set(int index, Short element) {
+      checkElementIndex(index, size());
+      short oldValue = array[start + index];
+      array[start + index] = checkNotNull(element);  // checkNotNull for GWT (do not optimize)
+      return oldValue;
+    }
+
+    @Override public List<Short> subList(int fromIndex, int toIndex) {
+      int size = size();
+      checkPositionIndexes(fromIndex, toIndex, size);
+      if (fromIndex == toIndex) {
+        return Collections.emptyList();
+      }
+      return new ShortArrayAsList(array, start + fromIndex, start + toIndex);
+    }
+
+    @Override public boolean equals(Object object) {
+      if (object == this) {
+        return true;
+      }
+      if (object instanceof ShortArrayAsList) {
+        ShortArrayAsList that = (ShortArrayAsList) object;
+        int size = size();
+        if (that.size() != size) {
+          return false;
+        }
+        for (int i = 0; i < size; i++) {
+          if (array[start + i] != that.array[that.start + i]) {
+            return false;
+          }
+        }
+        return true;
+      }
+      return super.equals(object);
+    }
+
+    @Override public int hashCode() {
+      int result = 1;
+      for (int i = start; i < end; i++) {
+        result = 31 * result + Shorts.hashCode(array[i]);
+      }
+      return result;
+    }
+
+    @Override public String toString() {
+      StringBuilder builder = new StringBuilder(size() * 6);
+      builder.append('[').append(array[start]);
+      for (int i = start + 1; i < end; i++) {
+        builder.append(", ").append(array[i]);
+      }
+      return builder.append(']').toString();
+    }
+
+    short[] toShortArray() {
+      // Arrays.copyOfRange() requires Java 6
+      int size = size();
+      short[] result = new short[size];
+      System.arraycopy(array, start, result, 0, size);
+      return result;
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+}
diff --git a/guava-gwt/src-super/com/google/common/testing/super/com/google/common/testing/Platform.java b/guava-gwt/src-super/com/google/common/testing/super/com/google/common/testing/Platform.java
new file mode 100644
index 0000000..9fa092e
--- /dev/null
+++ b/guava-gwt/src-super/com/google/common/testing/super/com/google/common/testing/Platform.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.testing;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+/**
+ * Methods factored out so that they can be emulated differently in GWT.
+ *
+ * @author Chris Povirk
+ */
+final class Platform {
+  /**
+   * Serializes and deserializes the specified object (a no-op under GWT).
+   */
+  @SuppressWarnings("unchecked")
+  static <T> T reserialize(T object) {
+    return checkNotNull(object);
+  }
+
+  private Platform() {}
+}
diff --git a/guava-gwt/src-super/java/util/Util.gwt.xml b/guava-gwt/src-super/java/util/Util.gwt.xml
new file mode 100644
index 0000000..bd7134f
--- /dev/null
+++ b/guava-gwt/src-super/java/util/Util.gwt.xml
@@ -0,0 +1 @@
+<module><super-source path="super"/></module>
\ No newline at end of file
diff --git a/guava-gwt/src-super/java/util/super/java/util/concurrent/Callable.java b/guava-gwt/src-super/java/util/super/java/util/concurrent/Callable.java
new file mode 100644
index 0000000..548f3a6
--- /dev/null
+++ b/guava-gwt/src-super/java/util/super/java/util/concurrent/Callable.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (C) 2011 Google Inc.
+ *
+ * Licensed 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.
+ */
+
+package java.util.concurrent;
+
+/**
+ * Emulation of Callable.
+ *
+ * @author Charles Fry
+ */
+public interface Callable<V> {
+  V call() throws Exception;
+}
diff --git a/guava-gwt/src-super/java/util/super/java/util/concurrent/ConcurrentHashMap.java b/guava-gwt/src-super/java/util/super/java/util/concurrent/ConcurrentHashMap.java
new file mode 100644
index 0000000..77544b5
--- /dev/null
+++ b/guava-gwt/src-super/java/util/super/java/util/concurrent/ConcurrentHashMap.java
@@ -0,0 +1,144 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed 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.
+ */
+
+package java.util.concurrent;
+
+import java.util.AbstractMap;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Minimal emulation of {@link java.util.concurrent.ConcurrentHashMap}.
+ * Note that javascript intepreter is <a
+ * href="http://code.google.com/docreader/#p=google-web-toolkit-doc-1-5&t=DevGuideJavaCompatibility">
+ * single-threaded</a>, it is essentially a {@link java.util.HashMap},
+ * implementing the new methods introduced by {@link ConcurrentMap}.
+ *
+ * @author Hayward Chan
+ */
+public class ConcurrentHashMap<K, V>
+    extends AbstractMap<K, V> implements ConcurrentMap<K, V> {
+
+  private final Map<K, V> backingMap;
+
+  public ConcurrentHashMap() {
+    this.backingMap = new HashMap<K, V>();
+  }
+
+  public ConcurrentHashMap(int initialCapacity) {
+    this.backingMap = new HashMap<K, V>(initialCapacity);
+  }
+
+  public ConcurrentHashMap(int initialCapacity, float loadFactor) {
+    this.backingMap = new HashMap<K, V>(initialCapacity, loadFactor);
+  }
+
+  public ConcurrentHashMap(Map<? extends K, ? extends V> t) {
+    this.backingMap = new HashMap<K, V>(t);
+  }
+
+  public V putIfAbsent(K key, V value) {
+    if (!containsKey(key)) {
+      return put(key, value);
+    } else {
+      return get(key);
+    }
+  }
+
+  public boolean remove(Object key, Object value) {
+    if (containsKey(key) && get(key).equals(value)) {
+      remove(key);
+      return true;
+    } else {
+      return false;
+    }
+  }
+
+  public boolean replace(K key, V oldValue, V newValue) {
+    if (oldValue == null || newValue == null) {
+      throw new NullPointerException();
+    } else if (containsKey(key) && get(key).equals(oldValue)) {
+      put(key, newValue);
+      return true;
+    } else {
+      return false;
+    }
+  }
+
+  public V replace(K key, V value) {
+    if (value == null) {
+      throw new NullPointerException();
+    } else if (containsKey(key)) {
+      return put(key, value);
+    } else {
+      return null;
+    }
+  }
+
+  @Override public boolean containsKey(Object key) {
+    if (key == null) {
+      throw new NullPointerException();
+    }
+    return backingMap.containsKey(key);
+  }
+
+  @Override public V get(Object key) {
+    if (key == null) {
+      throw new NullPointerException();
+    }
+    return backingMap.get(key);
+  }
+
+  @Override public V put(K key, V value) {
+    if (key == null || value == null) {
+      throw new NullPointerException();
+    }
+    return backingMap.put(key, value);
+  }
+
+  @Override public boolean containsValue(Object value) {
+    if (value == null) {
+      throw new NullPointerException();
+    }
+    return backingMap.containsValue(value);
+  }
+
+  @Override public V remove(Object key) {
+    if (key == null) {
+      throw new NullPointerException();
+    }
+    return backingMap.remove(key);
+  }
+
+  @Override public Set<Entry<K, V>> entrySet() {
+    return backingMap.entrySet();
+  }
+
+  public boolean contains(Object value) {
+    return containsValue(value);
+  }
+
+  public Enumeration<V> elements() {
+    return Collections.enumeration(values());
+  }
+
+  public Enumeration<K> keys() {
+    return Collections.enumeration(keySet());
+  }
+}
diff --git a/guava-gwt/src-super/java/util/super/java/util/concurrent/ConcurrentMap.java b/guava-gwt/src-super/java/util/super/java/util/concurrent/ConcurrentMap.java
new file mode 100644
index 0000000..61a8a04
--- /dev/null
+++ b/guava-gwt/src-super/java/util/super/java/util/concurrent/ConcurrentMap.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed 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.
+ */
+
+package java.util.concurrent;
+
+import java.util.Map;
+
+/**
+ * Minimal GWT emulation of a map providing atomic operations.
+ *
+ * @author Jesse Wilson
+ */
+public interface ConcurrentMap<K, V> extends Map<K, V> {
+
+  V putIfAbsent(K key, V value);
+
+  boolean remove(Object key, Object value);
+
+  V replace(K key, V value);
+
+  boolean replace(K key, V oldValue, V newValue);
+}
diff --git a/guava-gwt/src-super/java/util/super/java/util/concurrent/ExecutionException.java b/guava-gwt/src-super/java/util/super/java/util/concurrent/ExecutionException.java
new file mode 100644
index 0000000..b25f476
--- /dev/null
+++ b/guava-gwt/src-super/java/util/super/java/util/concurrent/ExecutionException.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2011 Google Inc.
+ *
+ * Licensed 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.
+ */
+
+package java.util.concurrent;
+
+/**
+ * Emulation of ExecutionException.
+ *
+ * @author fry@google.com (Charles Fry)
+ */
+public class ExecutionException extends Exception {
+  protected ExecutionException() { }
+
+  protected ExecutionException(String message) {
+    super(message);
+  }
+
+  public ExecutionException(String message, Throwable cause) {
+    super(message, cause);
+  }
+
+  public ExecutionException(Throwable cause) {
+    super(cause);
+  }
+}
diff --git a/guava-gwt/src-super/java/util/super/java/util/concurrent/TimeUnit.java b/guava-gwt/src-super/java/util/super/java/util/concurrent/TimeUnit.java
new file mode 100644
index 0000000..2ce1de3
--- /dev/null
+++ b/guava-gwt/src-super/java/util/super/java/util/concurrent/TimeUnit.java
@@ -0,0 +1,144 @@
+/*
+ * Written by Doug Lea with assistance from members of JCP JSR-166
+ * Expert Group and released to the public domain, as explained at
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+package java.util.concurrent;
+
+/**
+ * GWT emulation of TimeUnit, created by removing unsupported operations from
+ * Doug Lea's public domain version.
+ */
+public enum TimeUnit {
+  NANOSECONDS {
+    public long toNanos(long d)   { return d; }
+    public long toMicros(long d)  { return d/(C1/C0); }
+    public long toMillis(long d)  { return d/(C2/C0); }
+    public long toSeconds(long d) { return d/(C3/C0); }
+    public long toMinutes(long d) { return d/(C4/C0); }
+    public long toHours(long d)   { return d/(C5/C0); }
+    public long toDays(long d)    { return d/(C6/C0); }
+    public long convert(long d, TimeUnit u) { return u.toNanos(d); }
+    int excessNanos(long d, long m) { return (int)(d - (m*C2)); }
+  },
+  MICROSECONDS {
+    public long toNanos(long d)   { return x(d, C1/C0, MAX/(C1/C0)); }
+    public long toMicros(long d)  { return d; }
+    public long toMillis(long d)  { return d/(C2/C1); }
+    public long toSeconds(long d) { return d/(C3/C1); }
+    public long toMinutes(long d) { return d/(C4/C1); }
+    public long toHours(long d)   { return d/(C5/C1); }
+    public long toDays(long d)    { return d/(C6/C1); }
+    public long convert(long d, TimeUnit u) { return u.toMicros(d); }
+    int excessNanos(long d, long m) { return (int)((d*C1) - (m*C2)); }
+  },
+  MILLISECONDS {
+    public long toNanos(long d)   { return x(d, C2/C0, MAX/(C2/C0)); }
+    public long toMicros(long d)  { return x(d, C2/C1, MAX/(C2/C1)); }
+    public long toMillis(long d)  { return d; }
+    public long toSeconds(long d) { return d/(C3/C2); }
+    public long toMinutes(long d) { return d/(C4/C2); }
+    public long toHours(long d)   { return d/(C5/C2); }
+    public long toDays(long d)    { return d/(C6/C2); }
+    public long convert(long d, TimeUnit u) { return u.toMillis(d); }
+    int excessNanos(long d, long m) { return 0; }
+  },
+  SECONDS {
+    public long toNanos(long d)   { return x(d, C3/C0, MAX/(C3/C0)); }
+    public long toMicros(long d)  { return x(d, C3/C1, MAX/(C3/C1)); }
+    public long toMillis(long d)  { return x(d, C3/C2, MAX/(C3/C2)); }
+    public long toSeconds(long d) { return d; }
+    public long toMinutes(long d) { return d/(C4/C3); }
+    public long toHours(long d)   { return d/(C5/C3); }
+    public long toDays(long d)    { return d/(C6/C3); }
+    public long convert(long d, TimeUnit u) { return u.toSeconds(d); }
+    int excessNanos(long d, long m) { return 0; }
+  },
+  MINUTES {
+    public long toNanos(long d)   { return x(d, C4/C0, MAX/(C4/C0)); }
+    public long toMicros(long d)  { return x(d, C4/C1, MAX/(C4/C1)); }
+    public long toMillis(long d)  { return x(d, C4/C2, MAX/(C4/C2)); }
+    public long toSeconds(long d) { return x(d, C4/C3, MAX/(C4/C3)); }
+    public long toMinutes(long d) { return d; }
+    public long toHours(long d)   { return d/(C5/C4); }
+    public long toDays(long d)    { return d/(C6/C4); }
+    public long convert(long d, TimeUnit u) { return u.toMinutes(d); }
+    int excessNanos(long d, long m) { return 0; }
+  },
+  HOURS {
+    public long toNanos(long d)   { return x(d, C5/C0, MAX/(C5/C0)); }
+    public long toMicros(long d)  { return x(d, C5/C1, MAX/(C5/C1)); }
+    public long toMillis(long d)  { return x(d, C5/C2, MAX/(C5/C2)); }
+    public long toSeconds(long d) { return x(d, C5/C3, MAX/(C5/C3)); }
+    public long toMinutes(long d) { return x(d, C5/C4, MAX/(C5/C4)); }
+    public long toHours(long d)   { return d; }
+    public long toDays(long d)    { return d/(C6/C5); }
+    public long convert(long d, TimeUnit u) { return u.toHours(d); }
+    int excessNanos(long d, long m) { return 0; }
+  },
+  DAYS {
+    public long toNanos(long d)   { return x(d, C6/C0, MAX/(C6/C0)); }
+    public long toMicros(long d)  { return x(d, C6/C1, MAX/(C6/C1)); }
+    public long toMillis(long d)  { return x(d, C6/C2, MAX/(C6/C2)); }
+    public long toSeconds(long d) { return x(d, C6/C3, MAX/(C6/C3)); }
+    public long toMinutes(long d) { return x(d, C6/C4, MAX/(C6/C4)); }
+    public long toHours(long d)   { return x(d, C6/C5, MAX/(C6/C5)); }
+    public long toDays(long d)    { return d; }
+    public long convert(long d, TimeUnit u) { return u.toDays(d); }
+    int excessNanos(long d, long m) { return 0; }
+  };
+
+  // Handy constants for conversion methods
+  static final long C0 = 1L;
+  static final long C1 = C0 * 1000L;
+  static final long C2 = C1 * 1000L;
+  static final long C3 = C2 * 1000L;
+  static final long C4 = C3 * 60L;
+  static final long C5 = C4 * 60L;
+  static final long C6 = C5 * 24L;
+
+  static final long MAX = Long.MAX_VALUE;
+
+  static long x(long d, long m, long over) {
+    if (d >  over) return Long.MAX_VALUE;
+    if (d < -over) return Long.MIN_VALUE;
+    return d * m;
+  }
+
+  // exceptions below changed from AbstractMethodError for GWT
+
+  public long convert(long sourceDuration, TimeUnit sourceUnit) {
+    throw new AssertionError();
+  }
+
+  public long toNanos(long duration) {
+    throw new AssertionError();
+  }
+
+  public long toMicros(long duration) {
+    throw new AssertionError();
+  }
+
+  public long toMillis(long duration) {
+    throw new AssertionError();
+  }
+
+  public long toSeconds(long duration) {
+    throw new AssertionError();
+  }
+
+  public long toMinutes(long duration) {
+    throw new AssertionError();
+  }
+
+  public long toHours(long duration) {
+    throw new AssertionError();
+  }
+
+  public long toDays(long duration) {
+    throw new AssertionError();
+  }
+
+  abstract int excessNanos(long d, long m);
+}
diff --git a/guava-gwt/src-super/java/util/super/java/util/concurrent/atomic/AtomicInteger.java b/guava-gwt/src-super/java/util/super/java/util/concurrent/atomic/AtomicInteger.java
new file mode 100644
index 0000000..ac98dcf
--- /dev/null
+++ b/guava-gwt/src-super/java/util/super/java/util/concurrent/atomic/AtomicInteger.java
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed 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.
+ */
+
+package java.util.concurrent.atomic;
+
+/**
+ * GWT emulated version of {@link AtomicInteger}.  It's a thin wrapper
+ * around the primitive {@code int}.
+ *
+ * @author Hayward Chan
+ */
+public class AtomicInteger extends Number implements java.io.Serializable {
+
+  private int value;
+
+  public AtomicInteger(int initialValue) {
+    value = initialValue;
+  }
+
+  public AtomicInteger() {
+  }
+
+  public final int get() {
+    return value;
+  }
+
+  public final void set(int newValue) {
+    value = newValue;
+  }
+
+  public final void lazySet(int newValue) {
+    set(newValue);
+  }
+
+  public final int getAndSet(int newValue) {
+    int current = value;
+    value = newValue;
+    return current;
+  }
+
+  public final boolean compareAndSet(int expect, int update) {
+    if (value == expect) {
+      value = update;
+      return true;
+    } else {
+      return false;
+    }
+  }
+
+  public final int getAndIncrement() {
+    return value++;
+  }
+
+  public final int getAndDecrement() {
+    return value--;
+  }
+
+  public final int getAndAdd(int delta) {
+    int current = value;
+    value += delta;
+    return current;
+  }
+
+  public final int incrementAndGet() {
+    return ++value;
+  }
+
+  public final int decrementAndGet() {
+    return --value;
+  }
+
+  public final int addAndGet(int delta) {
+    value += delta;
+    return value;
+  }
+
+  @Override public String toString() {
+    return Integer.toString(value);
+  }
+
+  public int intValue() {
+    return value;
+  }
+
+  public long longValue() {
+    return (long) value;
+  }
+
+  public float floatValue() {
+    return (float) value;
+  }
+
+  public double doubleValue() {
+    return (double) value;
+  }
+}
diff --git a/guava-gwt/src-super/java/util/super/java/util/concurrent/atomic/AtomicLong.java b/guava-gwt/src-super/java/util/super/java/util/concurrent/atomic/AtomicLong.java
new file mode 100644
index 0000000..8696422
--- /dev/null
+++ b/guava-gwt/src-super/java/util/super/java/util/concurrent/atomic/AtomicLong.java
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2011 Google Inc.
+ *
+ * Licensed 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.
+ */
+
+package java.util.concurrent.atomic;
+
+/**
+ * GWT emulated version of {@link AtomicLong}.  It's a thin wrapper
+ * around the primitive {@code long}.
+ *
+ * @author Jige Yu
+ */
+public class AtomicLong extends Number implements java.io.Serializable {
+
+  private long value;
+
+  public AtomicLong(long initialValue) {
+    this.value = initialValue;
+  }
+
+  public AtomicLong() {
+  }
+
+  public final long get() {
+    return value;
+  }
+
+  public final void set(long newValue) {
+    value = newValue;
+  }
+
+  public final void lazySet(long newValue) {
+    set(newValue);
+  }
+
+  public final long getAndSet(long newValue) {
+    long current = value;
+    value = newValue;
+    return current;
+  }
+
+  public final boolean compareAndSet(long expect, long update) {
+    if (value == expect) {
+      value = update;
+      return true;
+    } else {
+      return false;
+    }
+  }
+
+  public final long getAndIncrement() {
+    return value++;
+  }
+
+  public final long getAndDecrement() {
+    return value--;
+  }
+
+  public final long getAndAdd(long delta) {
+    long current = value;
+    value += delta;
+    return current;
+  }
+
+  public final long incrementAndGet() {
+    return ++value;
+  }
+
+  public final long decrementAndGet() {
+    return --value;
+  }
+
+  public final long addAndGet(long delta) {
+    value += delta;
+    return value;
+  }
+
+  @Override public String toString() {
+    return Long.toString(value);
+  }
+
+  public int intValue() {
+    return (int) value;
+  }
+
+  public long longValue() {
+    return value;
+  }
+
+  public float floatValue() {
+    return (float) value;
+  }
+
+  public double doubleValue() {
+    return (double) value;
+  }
+}
diff --git a/guava-gwt/src/com/google/common/annotations/Annotations.gwt.xml b/guava-gwt/src/com/google/common/annotations/Annotations.gwt.xml
new file mode 100644
index 0000000..0b388fa
--- /dev/null
+++ b/guava-gwt/src/com/google/common/annotations/Annotations.gwt.xml
@@ -0,0 +1,3 @@
+<module>
+ <source path=""/>
+</module>
diff --git a/guava-gwt/src/com/google/common/base/Base.gwt.xml b/guava-gwt/src/com/google/common/base/Base.gwt.xml
new file mode 100644
index 0000000..f1ca187
--- /dev/null
+++ b/guava-gwt/src/com/google/common/base/Base.gwt.xml
@@ -0,0 +1,5 @@
+<module>
+  <source path=""/>
+  <super-source path="super"/>
+  <inherits name="java.util.Util"/>
+</module>
diff --git a/guava-gwt/src/com/google/common/base/GwtSerializationDependencies.java b/guava-gwt/src/com/google/common/base/GwtSerializationDependencies.java
new file mode 100644
index 0000000..77f93f2
--- /dev/null
+++ b/guava-gwt/src/com/google/common/base/GwtSerializationDependencies.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base;
+
+import com.google.common.annotations.GwtCompatible;
+
+/**
+ * Contains dummy collection implementations to convince GWT that part of
+ * serializing a collection is serializing its elements.
+ *
+ * <p>See {@linkplain com.google.common.collect.GwtSerializationDependencies the
+ * com.google.common.collect version} for more details.
+ *
+ * @author Chris Povirk
+ */
+@GwtCompatible
+// None of these classes are instantiated, let alone serialized:
+@SuppressWarnings("serial")
+final class GwtSerializationDependencies {
+  private GwtSerializationDependencies() {}
+}
diff --git a/guava-gwt/src/com/google/common/base/PairwiseEquivalence_CustomFieldSerializer.java b/guava-gwt/src/com/google/common/base/PairwiseEquivalence_CustomFieldSerializer.java
new file mode 100644
index 0000000..6f125f9
--- /dev/null
+++ b/guava-gwt/src/com/google/common/base/PairwiseEquivalence_CustomFieldSerializer.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+/**
+ * GWT serialization logic for {@link PairwiseEquivalence}.
+ *
+ * @author kkanitkar@google.com (Kedar Kanitkar)
+ */
+public class PairwiseEquivalence_CustomFieldSerializer {
+
+  private PairwiseEquivalence_CustomFieldSerializer() {}
+
+  public static void deserialize(SerializationStreamReader reader,
+      PairwiseEquivalence<?> instance) {}
+
+  public static PairwiseEquivalence<?> instantiate(SerializationStreamReader reader)
+      throws SerializationException {
+    return create((Equivalence<?>) reader.readObject());
+  }
+
+  private static <T> PairwiseEquivalence<T> create(Equivalence<T> elementEquivalence) {
+    return new PairwiseEquivalence<T>(elementEquivalence);
+  }
+
+  public static void serialize(SerializationStreamWriter writer, PairwiseEquivalence<?> instance)
+      throws SerializationException {
+    writer.writeObject(instance.elementEquivalence);
+  }
+}
diff --git a/guava-gwt/src/com/google/common/cache/Cache.gwt.xml b/guava-gwt/src/com/google/common/cache/Cache.gwt.xml
new file mode 100644
index 0000000..9c5b758
--- /dev/null
+++ b/guava-gwt/src/com/google/common/cache/Cache.gwt.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<module>
+   
+  <source path=""/>
+   
+  <super-source path="super"/>
+   
+  <inherits name="com.google.common.annotations.Annotations"/>
+   
+  <inherits name="com.google.common.base.Base"/>
+   
+  <inherits name="com.google.common.collect.Collect"/>
+   
+  <inherits name="com.google.common.util.concurrent.Concurrent"/>
+    
+  <inherits name="java.util.Util"/>
+   
+</module>
diff --git a/guava-gwt/src/com/google/common/collect/ArrayListMultimap_CustomFieldSerializer.java b/guava-gwt/src/com/google/common/collect/ArrayListMultimap_CustomFieldSerializer.java
new file mode 100644
index 0000000..129562d
--- /dev/null
+++ b/guava-gwt/src/com/google/common/collect/ArrayListMultimap_CustomFieldSerializer.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+/**
+ * This class implements the GWT serialization of {@link ArrayListMultimap}.
+ * 
+ * @author Chris Povirk
+ */
+public class ArrayListMultimap_CustomFieldSerializer {
+
+  public static void deserialize(SerializationStreamReader in,
+      ArrayListMultimap<?, ?> out) {
+  }
+
+  public static ArrayListMultimap<Object, Object> instantiate(
+      SerializationStreamReader in) throws SerializationException {
+    return (ArrayListMultimap<Object, Object>)
+        Multimap_CustomFieldSerializerBase.populate(
+            in, ArrayListMultimap.create());
+  }
+
+  public static void serialize(SerializationStreamWriter out,
+      ArrayListMultimap<?, ?> multimap) throws SerializationException {
+    Multimap_CustomFieldSerializerBase.serialize(out, multimap);
+  }
+}
diff --git a/guava-gwt/src/com/google/common/collect/ByFunctionOrdering_CustomFieldSerializer.java b/guava-gwt/src/com/google/common/collect/ByFunctionOrdering_CustomFieldSerializer.java
new file mode 100644
index 0000000..d42648c
--- /dev/null
+++ b/guava-gwt/src/com/google/common/collect/ByFunctionOrdering_CustomFieldSerializer.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.base.Function;
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+/**
+ * This class implements the GWT serialization of {@link ByFunctionOrdering}.
+ * 
+ * @author Chris Povirk
+ */
+public class ByFunctionOrdering_CustomFieldSerializer {
+
+  public static void deserialize(SerializationStreamReader reader,
+      ByFunctionOrdering<?, ?> instance) {
+  }
+
+  @SuppressWarnings("unchecked") // deserialization is unsafe
+  public static ByFunctionOrdering<Object, Object> instantiate(
+      SerializationStreamReader reader) throws SerializationException {
+    return new ByFunctionOrdering<Object, Object>(
+        (Function<Object, Object>) reader.readObject(),
+        (Ordering<Object>) reader.readObject());
+  }
+
+  public static void serialize(SerializationStreamWriter writer,
+      ByFunctionOrdering<?, ?> instance) throws SerializationException {
+    writer.writeObject(instance.function);
+    writer.writeObject(instance.ordering);
+  }
+}
diff --git a/guava-gwt/src/com/google/common/collect/Collect.gwt.xml b/guava-gwt/src/com/google/common/collect/Collect.gwt.xml
new file mode 100644
index 0000000..31441af
--- /dev/null
+++ b/guava-gwt/src/com/google/common/collect/Collect.gwt.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<module>
+   
+  <source path=""/>
+   
+  <super-source path="super"/>
+   
+  <inherits name="com.google.common.annotations.Annotations"/>
+   
+  <inherits name="com.google.common.base.Base"/>
+   
+  <inherits name="com.google.common.math.Math"/>
+   
+  <inherits name="com.google.common.primitives.Primitives"/>
+    
+  <inherits name="java.util.Util"/>
+   
+</module>
diff --git a/guava-gwt/src/com/google/common/collect/ComparatorOrdering_CustomFieldSerializer.java b/guava-gwt/src/com/google/common/collect/ComparatorOrdering_CustomFieldSerializer.java
new file mode 100644
index 0000000..4b0cc11
--- /dev/null
+++ b/guava-gwt/src/com/google/common/collect/ComparatorOrdering_CustomFieldSerializer.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+import java.util.Comparator;
+
+/**
+ * This class implements the GWT serialization of {@link ComparatorOrdering}.
+ * 
+ * @author Chris Povirk
+ */
+public class ComparatorOrdering_CustomFieldSerializer {
+
+  public static void deserialize(SerializationStreamReader reader,
+      ComparatorOrdering<?> instance) {
+  }
+
+  @SuppressWarnings("unchecked") // deserialization is unsafe
+  public static ComparatorOrdering<Object> instantiate(
+      SerializationStreamReader reader) throws SerializationException {
+    return new ComparatorOrdering<Object>(
+        (Comparator<Object>) reader.readObject());
+  }
+
+  public static void serialize(SerializationStreamWriter writer,
+      ComparatorOrdering<?> instance) throws SerializationException {
+    writer.writeObject(instance.comparator);
+  }
+}
diff --git a/guava-gwt/src/com/google/common/collect/CompoundOrdering_CustomFieldSerializer.java b/guava-gwt/src/com/google/common/collect/CompoundOrdering_CustomFieldSerializer.java
new file mode 100644
index 0000000..2cfd6dc
--- /dev/null
+++ b/guava-gwt/src/com/google/common/collect/CompoundOrdering_CustomFieldSerializer.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+import java.util.Comparator;
+
+/**
+ * This class implements the GWT serialization of {@link CompoundOrdering}.
+ * 
+ * @author Chris Povirk
+ */
+public class CompoundOrdering_CustomFieldSerializer {
+
+  public static void deserialize(SerializationStreamReader reader,
+      CompoundOrdering<?> instance) {
+  }
+
+  @SuppressWarnings("unchecked") // deserialization is unsafe
+  public static CompoundOrdering<Object> instantiate(
+      SerializationStreamReader reader) throws SerializationException {
+    return new CompoundOrdering<Object>(
+        (ImmutableList<Comparator<Object>>) reader.readObject());
+  }
+
+  public static void serialize(SerializationStreamWriter writer,
+      CompoundOrdering<?> instance) throws SerializationException {
+    writer.writeObject(instance.comparators);
+  }
+}
diff --git a/guava-gwt/src/com/google/common/collect/EmptyImmutableListMultimap_CustomFieldSerializer.java b/guava-gwt/src/com/google/common/collect/EmptyImmutableListMultimap_CustomFieldSerializer.java
new file mode 100644
index 0000000..8b1173e
--- /dev/null
+++ b/guava-gwt/src/com/google/common/collect/EmptyImmutableListMultimap_CustomFieldSerializer.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+/**
+ * This class implements the GWT serialization of
+ * {@link EmptyImmutableListMultimap}.
+ * 
+ * @author Chris Povirk
+ */
+public class EmptyImmutableListMultimap_CustomFieldSerializer {
+
+  public static void deserialize(SerializationStreamReader reader,
+      EmptyImmutableListMultimap instance) {
+  }
+
+  public static EmptyImmutableListMultimap instantiate(
+      SerializationStreamReader reader) {
+    return EmptyImmutableListMultimap.INSTANCE;
+  }
+
+  public static void serialize(SerializationStreamWriter writer,
+      EmptyImmutableListMultimap instance) {
+  }
+}
diff --git a/guava-gwt/src/com/google/common/collect/EmptyImmutableList_CustomFieldSerializer.java b/guava-gwt/src/com/google/common/collect/EmptyImmutableList_CustomFieldSerializer.java
new file mode 100644
index 0000000..d9dcd0a
--- /dev/null
+++ b/guava-gwt/src/com/google/common/collect/EmptyImmutableList_CustomFieldSerializer.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+/**
+ * This class implements the GWT serialization of {@link EmptyImmutableList}.
+ * 
+ * @author Chris Povirk
+ */
+public class EmptyImmutableList_CustomFieldSerializer {
+
+  public static void deserialize(SerializationStreamReader reader,
+      EmptyImmutableList instance) {
+  }
+
+  public static EmptyImmutableList instantiate(
+      SerializationStreamReader reader) {
+    return EmptyImmutableList.INSTANCE;
+  }
+
+  public static void serialize(SerializationStreamWriter writer,
+      EmptyImmutableList instance) {
+  }
+}
diff --git a/guava-gwt/src/com/google/common/collect/EmptyImmutableMap_CustomFieldSerializer.java b/guava-gwt/src/com/google/common/collect/EmptyImmutableMap_CustomFieldSerializer.java
new file mode 100644
index 0000000..67d63b2
--- /dev/null
+++ b/guava-gwt/src/com/google/common/collect/EmptyImmutableMap_CustomFieldSerializer.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+/**
+ * This class implements the GWT serialization of
+ * {@link EmptyImmutableMap}.
+ * 
+ * @author Chris Povirk
+ */
+public class EmptyImmutableMap_CustomFieldSerializer {
+
+  public static void deserialize(SerializationStreamReader reader,
+      EmptyImmutableMap instance) {
+  }
+
+  public static EmptyImmutableMap instantiate(
+      SerializationStreamReader reader) {
+    return EmptyImmutableMap.INSTANCE;
+  }
+
+  public static void serialize(SerializationStreamWriter writer,
+      EmptyImmutableMap instance) {
+  }
+}
diff --git a/guava-gwt/src/com/google/common/collect/EmptyImmutableMultiset_CustomFieldSerializer.java b/guava-gwt/src/com/google/common/collect/EmptyImmutableMultiset_CustomFieldSerializer.java
new file mode 100644
index 0000000..eda38f7
--- /dev/null
+++ b/guava-gwt/src/com/google/common/collect/EmptyImmutableMultiset_CustomFieldSerializer.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+/**
+ * This class implements the GWT serialization of
+ * {@link EmptyImmutableMultiset}.
+ * 
+ * @author Chris Povirk
+ */
+public class EmptyImmutableMultiset_CustomFieldSerializer {
+
+  public static void deserialize(SerializationStreamReader reader,
+      EmptyImmutableMultiset instance) {
+  }
+
+  public static EmptyImmutableMultiset instantiate(
+      SerializationStreamReader reader) {
+    return EmptyImmutableMultiset.INSTANCE;
+  }
+
+  public static void serialize(SerializationStreamWriter writer,
+      EmptyImmutableMultiset instance) {
+  }
+}
diff --git a/guava-gwt/src/com/google/common/collect/EmptyImmutableSetMultimap_CustomFieldSerializer.java b/guava-gwt/src/com/google/common/collect/EmptyImmutableSetMultimap_CustomFieldSerializer.java
new file mode 100644
index 0000000..905abfb
--- /dev/null
+++ b/guava-gwt/src/com/google/common/collect/EmptyImmutableSetMultimap_CustomFieldSerializer.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+/**
+ * This class implements the GWT serialization of
+ * {@link EmptyImmutableSetMultimap}.
+ * 
+ * @author Chris Povirk
+ */
+public class EmptyImmutableSetMultimap_CustomFieldSerializer {
+
+  public static void deserialize(SerializationStreamReader reader,
+      EmptyImmutableSetMultimap instance) {
+  }
+
+  public static EmptyImmutableSetMultimap instantiate(
+      SerializationStreamReader reader) {
+    return EmptyImmutableSetMultimap.INSTANCE;
+  }
+
+  public static void serialize(SerializationStreamWriter writer,
+      EmptyImmutableSetMultimap instance) {
+  }
+}
diff --git a/guava-gwt/src/com/google/common/collect/EmptyImmutableSet_CustomFieldSerializer.java b/guava-gwt/src/com/google/common/collect/EmptyImmutableSet_CustomFieldSerializer.java
new file mode 100644
index 0000000..b52dac9
--- /dev/null
+++ b/guava-gwt/src/com/google/common/collect/EmptyImmutableSet_CustomFieldSerializer.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+/**
+ * This class implements the GWT serialization of {@link EmptyImmutableSet}.
+ * 
+ * @author Chris Povirk
+ */
+public class EmptyImmutableSet_CustomFieldSerializer {
+
+  public static void deserialize(SerializationStreamReader reader,
+      EmptyImmutableSet instance) {
+  }
+
+  public static EmptyImmutableSet instantiate(
+      SerializationStreamReader reader) {
+    return EmptyImmutableSet.INSTANCE;
+  }
+
+  public static void serialize(SerializationStreamWriter writer,
+      EmptyImmutableSet instance) {
+  }
+}
diff --git a/guava-gwt/src/com/google/common/collect/EmptyImmutableSortedSet_CustomFieldSerializer.java b/guava-gwt/src/com/google/common/collect/EmptyImmutableSortedSet_CustomFieldSerializer.java
new file mode 100644
index 0000000..3857616
--- /dev/null
+++ b/guava-gwt/src/com/google/common/collect/EmptyImmutableSortedSet_CustomFieldSerializer.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+import java.util.Comparator;
+
+/**
+ * This class implements the GWT serialization of
+ * {@link EmptyImmutableSortedSet}.
+ * 
+ * @author Chris Povirk
+ */
+public class EmptyImmutableSortedSet_CustomFieldSerializer {
+  public static void deserialize(SerializationStreamReader reader,
+      EmptyImmutableSortedSet<?> instance) {
+  }
+
+  public static EmptyImmutableSortedSet<Object> instantiate(
+      SerializationStreamReader reader) throws SerializationException {
+    /*
+     * Nothing we can do, but we're already assuming the serialized form is
+     * correctly typed, anyway.
+     */
+    @SuppressWarnings("unchecked")
+    Comparator<Object> comparator = (Comparator<Object>) reader.readObject();
+
+    /*
+     * For this custom field serializer to be invoked, the set must have been
+     * EmptyImmutableSortedSet before it's serialized. Since
+     * EmptyImmutableSortedSet always has no elements, ImmutableSortedSet.copyOf
+     * always return an EmptyImmutableSortedSet back.
+     */
+    return (EmptyImmutableSortedSet<Object>)
+        ImmutableSortedSet.orderedBy(comparator).build();
+  }
+
+  public static void serialize(SerializationStreamWriter writer,
+      EmptyImmutableSortedSet<?> instance) throws SerializationException {
+    writer.writeObject(instance.comparator());
+  }
+}
diff --git a/guava-gwt/src/com/google/common/collect/ExplicitOrdering_CustomFieldSerializer.java b/guava-gwt/src/com/google/common/collect/ExplicitOrdering_CustomFieldSerializer.java
new file mode 100644
index 0000000..89ebdf2
--- /dev/null
+++ b/guava-gwt/src/com/google/common/collect/ExplicitOrdering_CustomFieldSerializer.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+/**
+ * This class implements the GWT serialization of {@link ExplicitOrdering}.
+ * 
+ * @author Chris Povirk
+ */
+public class ExplicitOrdering_CustomFieldSerializer {
+
+  public static void deserialize(SerializationStreamReader reader,
+      ExplicitOrdering<?> instance) {
+  }
+
+  @SuppressWarnings("unchecked") // deserialization is unsafe
+  public static ExplicitOrdering<Object> instantiate(
+      SerializationStreamReader reader) throws SerializationException {
+    return new ExplicitOrdering<Object>(
+        (ImmutableMap<Object, Integer>) reader.readObject());
+  }
+
+  public static void serialize(SerializationStreamWriter writer,
+      ExplicitOrdering<?> instance) throws SerializationException {
+    writer.writeObject(instance.rankMap);
+  }
+}
diff --git a/guava-gwt/src/com/google/common/collect/GwtSerializationDependencies.java b/guava-gwt/src/com/google/common/collect/GwtSerializationDependencies.java
new file mode 100644
index 0000000..3e8b1e6
--- /dev/null
+++ b/guava-gwt/src/com/google/common/collect/GwtSerializationDependencies.java
@@ -0,0 +1,129 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.TreeMap;
+
+/**
+ * Contains dummy collection implementations to convince GWT that part of
+ * serializing a collection is serializing its elements.
+ *
+ * <p>Because of our use of final fields in our collections, GWT's normal
+ * heuristic for determining which classes might be serialized fails. That
+ * heuristic is, roughly speaking, to look at each parameter and return type of
+ * each RPC interface and to assume that implementations of those types might be
+ * serialized. Those types have their own dependencies -- their fields -- which
+ * are analyzed recursively and analogously.
+ *
+ * <p>For classes with final fields, GWT assumes that the class itself might be
+ * serialized but doesn't assume the same about its final fields. To work around
+ * this, we provide dummy implementations of our collections with their
+ * dependencies as non-final fields. Even though these implementations are never
+ * instantiated, they are visible to GWT when it performs its serialization
+ * analysis, and it assumes that their fields may be serialized.
+ *
+ * <p>Currently we provide dummy implementations of all the immutable
+ * collection classes necessary to support declarations like
+ * {@code ImmutableMultiset<String>} in RPC interfaces. Support for
+ * {@code ImmutableMultiset} in the interface is support for {@code Multiset},
+ * so there is nothing further to be done to support the new collection
+ * interfaces. It is not support, however, for an RPC interface in terms of
+ * {@code HashMultiset}. It is still possible to send a {@code HashMultiset}
+ * over GWT RPC; it is only the declaration of an interface in terms of
+ * {@code HashMultiset} that we haven't tried to support. (We may wish to
+ * revisit this decision in the future.)
+ *
+ * @author Chris Povirk
+ */
+@GwtCompatible
+// None of these classes are instantiated, let alone serialized:
+@SuppressWarnings("serial")
+final class GwtSerializationDependencies {
+  private GwtSerializationDependencies() {}
+
+  static final class ImmutableListMultimapDependencies<K, V>
+      extends ImmutableListMultimap<K, V> {
+    K key;
+    V value;
+
+    ImmutableListMultimapDependencies() {
+      super(null, 0);
+    }
+  }
+
+  // ImmutableMap is covered by ImmutableSortedMap/ImmutableBiMap.
+
+  // ImmutableMultimap is covered by ImmutableSetMultimap/ImmutableListMultimap.
+
+  static final class ImmutableSetMultimapDependencies<K, V>
+      extends ImmutableSetMultimap<K, V> {
+    K key;
+    V value;
+
+    ImmutableSetMultimapDependencies() {
+      super(null, 0, null);
+    }
+  }
+
+  /*
+   * We support an interface declared in terms of LinkedListMultimap because it
+   * supports entry ordering not supported by other implementations.
+   */
+  static final class LinkedListMultimapDependencies<K, V>
+      extends LinkedListMultimap<K, V> {
+    K key;
+    V value;
+
+    LinkedListMultimapDependencies() {
+      super();
+    }
+  }
+
+  static final class HashBasedTableDependencies<R, C, V>
+      extends HashBasedTable<R, C, V> {
+    HashMap<R, HashMap<C, V>> data;
+
+    HashBasedTableDependencies() {
+      super(null, null);
+    }
+  }
+
+  static final class TreeBasedTableDependencies<R, C, V>
+      extends TreeBasedTable<R, C, V> {
+    TreeMap<R, TreeMap<C, V>> data;
+
+    TreeBasedTableDependencies() {
+      super(null, null);
+    }
+  }
+
+  static final class TreeMultimapDependencies<K, V>
+      extends TreeMultimap<K, V> {
+    Comparator<? super K> keyComparator;
+    Comparator<? super V> valueComparator;
+    K key;
+    V value;
+
+    TreeMultimapDependencies() {
+      super(null, null);
+    }
+  }
+}
diff --git a/guava-gwt/src/com/google/common/collect/HashBasedTable_CustomFieldSerializer.java b/guava-gwt/src/com/google/common/collect/HashBasedTable_CustomFieldSerializer.java
new file mode 100644
index 0000000..7b9f429
--- /dev/null
+++ b/guava-gwt/src/com/google/common/collect/HashBasedTable_CustomFieldSerializer.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+import java.util.Map;
+import java.util.Map.Entry;
+
+/**
+ * This class implements the GWT serialization of {@link HashBasedTable}.
+ *
+ * @author Hayward Chan
+ */
+public class HashBasedTable_CustomFieldSerializer {
+
+  public static void deserialize(SerializationStreamReader reader,
+      HashBasedTable<?, ?, ?> instance) {
+  }
+
+  public static HashBasedTable<Object, Object, Object> instantiate(
+      SerializationStreamReader reader) throws SerializationException {
+    Map<?, ?> hashMap = (Map<?, ?>) reader.readObject();
+
+    HashBasedTable<Object, Object, Object> table = HashBasedTable.create();
+    for (Entry<?, ?> row : hashMap.entrySet()) {
+      table.row(row.getKey()).putAll((Map<?, ?>) row.getValue());
+    }
+    return table;
+  }
+
+  public static void serialize(SerializationStreamWriter writer,
+      HashBasedTable<?, ?, ?> instance)
+      throws SerializationException {
+    /*
+     * The backing map of a HashBasedTable is a hash map of hash map.
+     * Therefore, the backing map is serializable (assuming the row,
+     * column and values are all serializable).
+     */
+    writer.writeObject(instance.backingMap);
+  }
+}
diff --git a/guava-gwt/src/com/google/common/collect/HashMultimap_CustomFieldSerializer.java b/guava-gwt/src/com/google/common/collect/HashMultimap_CustomFieldSerializer.java
new file mode 100644
index 0000000..85611b1
--- /dev/null
+++ b/guava-gwt/src/com/google/common/collect/HashMultimap_CustomFieldSerializer.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+/**
+ * This class implements the GWT serialization of {@link HashMultimap}.
+ * 
+ * @author Jord Sonneveld
+ * 
+ */
+public class HashMultimap_CustomFieldSerializer {
+
+  public static void deserialize(SerializationStreamReader in,
+      HashMultimap<?, ?> out) {
+  }
+
+  public static HashMultimap<Object, Object> instantiate(
+      SerializationStreamReader in) throws SerializationException {
+    return (HashMultimap<Object, Object>)
+        Multimap_CustomFieldSerializerBase.populate(in, HashMultimap.create());
+  }
+
+  public static void serialize(SerializationStreamWriter out,
+      HashMultimap<?, ?> multimap) throws SerializationException {
+    Multimap_CustomFieldSerializerBase.serialize(out, multimap);
+  }
+}
diff --git a/guava-gwt/src/com/google/common/collect/HashMultiset_CustomFieldSerializer.java b/guava-gwt/src/com/google/common/collect/HashMultiset_CustomFieldSerializer.java
new file mode 100644
index 0000000..ff18183
--- /dev/null
+++ b/guava-gwt/src/com/google/common/collect/HashMultiset_CustomFieldSerializer.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+/**
+ * This class implements the GWT serialization of {@link HashMultiset}.
+ *
+ * @author Chris Povirk
+ */
+public class HashMultiset_CustomFieldSerializer {
+
+  public static void deserialize(SerializationStreamReader reader,
+      HashMultiset<?> instance) {
+  }
+
+  public static HashMultiset<Object> instantiate(
+      SerializationStreamReader reader) throws SerializationException {
+    return (HashMultiset<Object>) Multiset_CustomFieldSerializerBase.populate(
+        reader, HashMultiset.create());
+  }
+
+  public static void serialize(SerializationStreamWriter writer,
+      HashMultiset<?> instance) throws SerializationException {
+    Multiset_CustomFieldSerializerBase.serialize(writer, instance);
+  }
+}
diff --git a/guava-gwt/src/com/google/common/collect/ImmutableAsList_CustomFieldSerializer.java b/guava-gwt/src/com/google/common/collect/ImmutableAsList_CustomFieldSerializer.java
new file mode 100644
index 0000000..4cb55ee
--- /dev/null
+++ b/guava-gwt/src/com/google/common/collect/ImmutableAsList_CustomFieldSerializer.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+import com.google.gwt.user.client.rpc.core.java.util.Collection_CustomFieldSerializerBase;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * This class implements the server-side GWT serialization of
+ * {@link ImmutableAsList}.
+ *
+ * @author Hayward Chan
+ */
+@GwtCompatible(emulated = true)
+public class ImmutableAsList_CustomFieldSerializer {
+
+  public static void deserialize(SerializationStreamReader reader,
+      ImmutableAsList<?> instance) {
+  }
+
+  public static ImmutableAsList<Object> instantiate(
+      SerializationStreamReader reader) throws SerializationException {
+    List<Object> elements = new ArrayList<Object>();
+    Collection_CustomFieldSerializerBase.deserialize(reader, elements);
+    ImmutableList<Object> asImmutableList = ImmutableList.copyOf(elements);
+    return new ImmutableAsList<Object>(
+        asImmutableList.toArray(new Object[asImmutableList.size()]),
+        asImmutableList);
+  }
+
+  public static void serialize(SerializationStreamWriter writer,
+      ImmutableAsList<?> instance) throws SerializationException {
+    Collection_CustomFieldSerializerBase.serialize(writer, instance);
+  }
+}
diff --git a/guava-gwt/src/com/google/common/collect/ImmutableEntry_CustomFieldSerializer.java b/guava-gwt/src/com/google/common/collect/ImmutableEntry_CustomFieldSerializer.java
new file mode 100644
index 0000000..ab1512a
--- /dev/null
+++ b/guava-gwt/src/com/google/common/collect/ImmutableEntry_CustomFieldSerializer.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+/**
+ * This class implements the GWT serialization of
+ * {@link ImmutableEntry}.
+ *
+ * @author iteratee@google.com (Kyle Butt)
+ */
+public class ImmutableEntry_CustomFieldSerializer {
+
+  public static void deserialize(SerializationStreamReader reader,
+      ImmutableEntry<?, ?> instance) {
+  }
+
+  public static ImmutableEntry<Object, Object> instantiate(
+      SerializationStreamReader reader) throws SerializationException {
+    Object key = reader.readObject();
+    Object value = reader.readObject();
+    return new ImmutableEntry<Object, Object>(key, value);
+  }
+
+  public static void serialize(SerializationStreamWriter writer,
+      ImmutableEntry<?, ?> instance) throws SerializationException {
+    writer.writeObject(instance.getKey());
+    writer.writeObject(instance.getValue());
+  }
+}
diff --git a/guava-gwt/src/com/google/common/collect/ImmutableEnumSet_CustomFieldSerializer.java b/guava-gwt/src/com/google/common/collect/ImmutableEnumSet_CustomFieldSerializer.java
new file mode 100644
index 0000000..8b5a66d
--- /dev/null
+++ b/guava-gwt/src/com/google/common/collect/ImmutableEnumSet_CustomFieldSerializer.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+import com.google.gwt.user.client.rpc.core.java.util.Collection_CustomFieldSerializerBase;
+
+import java.util.List;
+
+/**
+ * This class implements the GWT serialization of {@link ImmutableEnumSet}.
+ *
+ * @author Hayward Chan
+ */
+public class ImmutableEnumSet_CustomFieldSerializer {
+
+  public static void deserialize(SerializationStreamReader reader,
+      ImmutableEnumSet<?> instance) {
+  }
+
+  public static <E extends Enum<E>> ImmutableEnumSet<?> instantiate(
+      SerializationStreamReader reader) throws SerializationException {
+    List<E> deserialized = Lists.newArrayList();
+    Collection_CustomFieldSerializerBase.deserialize(reader, deserialized);
+    /*
+     * It is safe to cast to ImmutableEnumSet because in order for it to be
+     * serialized as an ImmutableEnumSet, it must be non-empty to start
+     * with.
+     */
+    return (ImmutableEnumSet<?>) Sets.immutableEnumSet(deserialized);
+  }
+
+  public static void serialize(SerializationStreamWriter writer,
+      ImmutableEnumSet<?> instance) throws SerializationException {
+    Collection_CustomFieldSerializerBase.serialize(writer, instance);
+  }
+
+}
diff --git a/guava-gwt/src/com/google/common/collect/ImmutableListMultimap_CustomFieldSerializer.java b/guava-gwt/src/com/google/common/collect/ImmutableListMultimap_CustomFieldSerializer.java
new file mode 100644
index 0000000..528ca3d
--- /dev/null
+++ b/guava-gwt/src/com/google/common/collect/ImmutableListMultimap_CustomFieldSerializer.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+/**
+ * This class implements the GWT serialization of {@link ImmutableListMultimap}.
+ *
+ * @author Chris Povirk
+ */
+public class ImmutableListMultimap_CustomFieldSerializer {
+
+  public static void deserialize(SerializationStreamReader reader,
+      ImmutableListMultimap<?, ?> instance) {
+  }
+
+  public static ImmutableListMultimap<Object, Object> instantiate(
+      SerializationStreamReader reader) throws SerializationException {
+    return (ImmutableListMultimap<Object, Object>)
+        Multimap_CustomFieldSerializerBase.instantiate(
+            reader, ImmutableListMultimap.builder());
+  }
+
+  public static void serialize(SerializationStreamWriter writer,
+      ImmutableListMultimap<?, ?> instance) throws SerializationException {
+    Multimap_CustomFieldSerializerBase.serialize(writer, instance);
+  }
+}
diff --git a/guava-gwt/src/com/google/common/collect/ImmutableList_CustomFieldSerializer.java b/guava-gwt/src/com/google/common/collect/ImmutableList_CustomFieldSerializer.java
new file mode 100644
index 0000000..bd451b3
--- /dev/null
+++ b/guava-gwt/src/com/google/common/collect/ImmutableList_CustomFieldSerializer.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+/**
+ * Even though {@link ImmutableList} cannot be instantiated, we still need
+ * a custom field serializer to unify the type signature of
+ * {@code ImmutableList[]} on server and client side.
+ *
+ * @author Hayward Chan
+ */
+public final class ImmutableList_CustomFieldSerializer {}
diff --git a/guava-gwt/src/com/google/common/collect/ImmutableMultiset_CustomFieldSerializer.java b/guava-gwt/src/com/google/common/collect/ImmutableMultiset_CustomFieldSerializer.java
new file mode 100644
index 0000000..25f7b21
--- /dev/null
+++ b/guava-gwt/src/com/google/common/collect/ImmutableMultiset_CustomFieldSerializer.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+/**
+ * Even though {@link ImmutableMultiset} cannot be instantiated, we still need
+ * a custom field serializer to unify the type signature of
+ * {@code ImmutableMultiset[]} on server and client side.
+ *
+ * @author Chris Povirk
+ */
+public class ImmutableMultiset_CustomFieldSerializer {}
diff --git a/guava-gwt/src/com/google/common/collect/ImmutableSetMultimap_CustomFieldSerializer.java b/guava-gwt/src/com/google/common/collect/ImmutableSetMultimap_CustomFieldSerializer.java
new file mode 100644
index 0000000..aef97ca
--- /dev/null
+++ b/guava-gwt/src/com/google/common/collect/ImmutableSetMultimap_CustomFieldSerializer.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+/**
+ * This class implements the GWT serialization of {@link ImmutableSetMultimap}.
+ *
+ * @author Chris Povirk
+ */
+public class ImmutableSetMultimap_CustomFieldSerializer {
+
+  public static void deserialize(SerializationStreamReader reader,
+      ImmutableSetMultimap<?, ?> instance) {
+  }
+
+  public static ImmutableSetMultimap<Object, Object> instantiate(
+      SerializationStreamReader reader) throws SerializationException {
+    return (ImmutableSetMultimap<Object, Object>)
+        Multimap_CustomFieldSerializerBase.instantiate(
+            reader, ImmutableSetMultimap.builder());
+  }
+
+  public static void serialize(SerializationStreamWriter writer,
+      ImmutableSetMultimap<?, ?> instance) throws SerializationException {
+    Multimap_CustomFieldSerializerBase.serialize(writer, instance);
+  }
+}
diff --git a/guava-gwt/src/com/google/common/collect/ImmutableSet_CustomFieldSerializer.java b/guava-gwt/src/com/google/common/collect/ImmutableSet_CustomFieldSerializer.java
new file mode 100644
index 0000000..96f87ce
--- /dev/null
+++ b/guava-gwt/src/com/google/common/collect/ImmutableSet_CustomFieldSerializer.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+/**
+ * Even though {@link ImmutableSet} cannot be instantiated, we still need
+ * a custom field serializer to unify the type signature of
+ * {@code ImmutableSet[]} on server and client side.
+ *
+ * @author Hayward Chan
+ */
+public final class ImmutableSet_CustomFieldSerializer {}
diff --git a/guava-gwt/src/com/google/common/collect/ImmutableSortedMap_CustomFieldSerializer.java b/guava-gwt/src/com/google/common/collect/ImmutableSortedMap_CustomFieldSerializer.java
new file mode 100644
index 0000000..6293686
--- /dev/null
+++ b/guava-gwt/src/com/google/common/collect/ImmutableSortedMap_CustomFieldSerializer.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+import com.google.gwt.user.client.rpc.core.java.util.Map_CustomFieldSerializerBase;
+
+import java.util.Comparator;
+import java.util.SortedMap;
+import java.util.TreeMap;
+
+/**
+ * This class implements the GWT serialization of {@link ImmutableSortedMap}.
+ *
+ * @author Chris Povirk
+ */
+public class ImmutableSortedMap_CustomFieldSerializer {
+  public static void deserialize(SerializationStreamReader reader,
+      ImmutableSortedMap<?, ?> instance) {
+  }
+
+  public static ImmutableSortedMap<?, ?> instantiate(
+      SerializationStreamReader reader) throws SerializationException {
+    /*
+     * Nothing we can do, but we're already assuming the serialized form is
+     * correctly typed, anyway.
+     */
+    @SuppressWarnings("unchecked")
+    Comparator<Object> comparator = (Comparator<Object>) reader.readObject();
+
+    SortedMap<Object, Object> entries = new TreeMap<Object, Object>(comparator);
+    Map_CustomFieldSerializerBase.deserialize(reader, entries);
+
+    return ImmutableSortedMap.orderedBy(comparator).putAll(entries).build();
+  }
+
+  public static void serialize(SerializationStreamWriter writer,
+      ImmutableSortedMap<?, ?> instance) throws SerializationException {
+    writer.writeObject(instance.comparator());
+
+    Map_CustomFieldSerializerBase.serialize(writer, instance);
+  }
+}
diff --git a/guava-gwt/src/com/google/common/collect/ImmutableSortedSet_CustomFieldSerializer.java b/guava-gwt/src/com/google/common/collect/ImmutableSortedSet_CustomFieldSerializer.java
new file mode 100644
index 0000000..a221a38
--- /dev/null
+++ b/guava-gwt/src/com/google/common/collect/ImmutableSortedSet_CustomFieldSerializer.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+/**
+ * Even though {@link ImmutableSortedSet} cannot be instantiated, we still need
+ * a custom field serializer to unify the type signature of
+ * {@code ImmutableSortedSet[]} on server and client side.
+ *
+ * @author Hayward Chan
+ */
+public final class ImmutableSortedSet_CustomFieldSerializer {}
diff --git a/guava-gwt/src/com/google/common/collect/LexicographicalOrdering_CustomFieldSerializer.java b/guava-gwt/src/com/google/common/collect/LexicographicalOrdering_CustomFieldSerializer.java
new file mode 100644
index 0000000..fdc1956
--- /dev/null
+++ b/guava-gwt/src/com/google/common/collect/LexicographicalOrdering_CustomFieldSerializer.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+/**
+ * This class implements the GWT serialization of {@link LexicographicalOrdering}.
+ * 
+ * @author Chris Povirk
+ */
+public class LexicographicalOrdering_CustomFieldSerializer {
+
+  public static void deserialize(SerializationStreamReader reader,
+      LexicographicalOrdering<?> instance) {
+  }
+
+  @SuppressWarnings("unchecked") // deserialization is unsafe
+  public static LexicographicalOrdering<Object> instantiate(
+      SerializationStreamReader reader) throws SerializationException {
+    return new LexicographicalOrdering<Object>(
+        (Ordering<Object>) reader.readObject());
+  }
+
+  public static void serialize(SerializationStreamWriter writer,
+      LexicographicalOrdering<?> instance) throws SerializationException {
+    writer.writeObject(instance.elementOrder);
+  }
+}
diff --git a/guava-gwt/src/com/google/common/collect/LinkedHashMultimap_CustomFieldSerializer.java b/guava-gwt/src/com/google/common/collect/LinkedHashMultimap_CustomFieldSerializer.java
new file mode 100644
index 0000000..30a280e
--- /dev/null
+++ b/guava-gwt/src/com/google/common/collect/LinkedHashMultimap_CustomFieldSerializer.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+import java.util.Map;
+
+/**
+ * This class implements the GWT serialization of {@link LinkedHashMultimap}.
+ * 
+ * @author Chris Povirk
+ */
+public class LinkedHashMultimap_CustomFieldSerializer {
+
+  public static void deserialize(SerializationStreamReader in,
+      LinkedHashMultimap<?, ?> out) {
+  }
+
+  public static LinkedHashMultimap<Object, Object> instantiate(
+      SerializationStreamReader in) throws SerializationException {
+    LinkedHashMultimap<Object, Object> multimap =
+        (LinkedHashMultimap<Object, Object>)
+            Multimap_CustomFieldSerializerBase.populate(
+                in, LinkedHashMultimap.create());
+
+    multimap.linkedEntries.clear(); // will clear and repopulate entries
+    for (int i = 0; i < multimap.size(); i++) {
+      Object key = in.readObject();
+      Object value = in.readObject();
+      multimap.linkedEntries.add(Maps.immutableEntry(key, value));
+    }
+
+    return multimap;
+  }
+
+  public static void serialize(SerializationStreamWriter out,
+      LinkedHashMultimap<?, ?> multimap) throws SerializationException {
+    Multimap_CustomFieldSerializerBase.serialize(out, multimap);
+    for (Map.Entry<?, ?> entry : multimap.entries()) {
+      out.writeObject(entry.getKey());
+      out.writeObject(entry.getValue());
+    }
+  }
+}
diff --git a/guava-gwt/src/com/google/common/collect/LinkedHashMultiset_CustomFieldSerializer.java b/guava-gwt/src/com/google/common/collect/LinkedHashMultiset_CustomFieldSerializer.java
new file mode 100644
index 0000000..77cc126
--- /dev/null
+++ b/guava-gwt/src/com/google/common/collect/LinkedHashMultiset_CustomFieldSerializer.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+/**
+ * This class implements the GWT serialization of {@link LinkedHashMultiset}.
+ *
+ * @author Chris Povirk
+ */
+public class LinkedHashMultiset_CustomFieldSerializer {
+
+  public static void deserialize(SerializationStreamReader reader,
+      LinkedHashMultiset<?> instance) {
+  }
+
+  public static LinkedHashMultiset<Object> instantiate(
+      SerializationStreamReader reader) throws SerializationException {
+    return (LinkedHashMultiset<Object>)
+        Multiset_CustomFieldSerializerBase.populate(
+            reader, LinkedHashMultiset.create());
+  }
+
+  public static void serialize(SerializationStreamWriter writer,
+      LinkedHashMultiset<?> instance) throws SerializationException {
+    Multiset_CustomFieldSerializerBase.serialize(writer, instance);
+  }
+}
diff --git a/guava-gwt/src/com/google/common/collect/LinkedListMultimap_CustomFieldSerializer.java b/guava-gwt/src/com/google/common/collect/LinkedListMultimap_CustomFieldSerializer.java
new file mode 100644
index 0000000..28d3327
--- /dev/null
+++ b/guava-gwt/src/com/google/common/collect/LinkedListMultimap_CustomFieldSerializer.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+import java.util.Map;
+
+/**
+ * This class implements the GWT serialization of {@link LinkedListMultimap}.
+ * 
+ * @author Chris Povirk
+ */
+public class LinkedListMultimap_CustomFieldSerializer {
+
+  public static void deserialize(SerializationStreamReader in,
+      LinkedListMultimap<?, ?> out) {
+  }
+
+  public static LinkedListMultimap<Object, Object> instantiate(
+      SerializationStreamReader in) throws SerializationException {
+    LinkedListMultimap<Object, Object> multimap = LinkedListMultimap.create();
+    int size = in.readInt();
+    for (int i = 0; i < size; i++) {
+      Object key = in.readObject();
+      Object value = in.readObject();
+      multimap.put(key, value);
+    }
+    return multimap;
+  }
+
+  public static void serialize(SerializationStreamWriter out,
+      LinkedListMultimap<?, ?> multimap) throws SerializationException {
+    out.writeInt(multimap.size());
+    for (Map.Entry<?, ?> entry : multimap.entries()) {
+      out.writeObject(entry.getKey());
+      out.writeObject(entry.getValue());
+    }
+  }
+}
diff --git a/guava-gwt/src/com/google/common/collect/Multimap_CustomFieldSerializerBase.java b/guava-gwt/src/com/google/common/collect/Multimap_CustomFieldSerializerBase.java
new file mode 100644
index 0000000..5e60a45
--- /dev/null
+++ b/guava-gwt/src/com/google/common/collect/Multimap_CustomFieldSerializerBase.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+import java.util.Collection;
+import java.util.Map;
+
+/**
+ * This class contains static utility methods for writing {@code Multimap} GWT
+ * field serializers. Serializers should delegate to
+ * {@link #serialize(SerializationStreamWriter, Multimap)} and to either
+ * {@link #instantiate(SerializationStreamReader, ImmutableMultimap.Builder)} or
+ * {@link #populate(SerializationStreamReader, Multimap)}.
+ *
+ * @author Chris Povirk
+ */
+public final class Multimap_CustomFieldSerializerBase {
+
+  static ImmutableMultimap<Object, Object> instantiate(
+      SerializationStreamReader reader,
+      ImmutableMultimap.Builder<Object, Object> builder)
+      throws SerializationException {
+    int keyCount = reader.readInt();
+    for (int i = 0; i < keyCount; ++i) {
+      Object key = reader.readObject();
+      int valueCount = reader.readInt();
+      for (int j = 0; j < valueCount; ++j) {
+        Object value = reader.readObject();
+        builder.put(key, value);
+      }
+    }
+    return builder.build();
+  }
+
+  public static Multimap<Object, Object> populate(
+      SerializationStreamReader reader, Multimap<Object, Object> multimap)
+      throws SerializationException {
+    int keyCount = reader.readInt();
+    for (int i = 0; i < keyCount; ++i) {
+      Object key = reader.readObject();
+      int valueCount = reader.readInt();
+      for (int j = 0; j < valueCount; ++j) {
+        Object value = reader.readObject();
+        multimap.put(key, value);
+      }
+    }
+    return multimap;
+  }
+
+  public static void serialize(
+      SerializationStreamWriter writer, Multimap<?, ?> instance)
+      throws SerializationException {
+    writer.writeInt(instance.asMap().size());
+    for (Map.Entry<?, ? extends Collection<?>> entry
+        : instance.asMap().entrySet()) {
+      writer.writeObject(entry.getKey());
+      writer.writeInt(entry.getValue().size());
+      for (Object value : entry.getValue()) {
+        writer.writeObject(value);
+      }
+    }
+  }
+
+  private Multimap_CustomFieldSerializerBase() {}
+}
diff --git a/guava-gwt/src/com/google/common/collect/Multiset_CustomFieldSerializerBase.java b/guava-gwt/src/com/google/common/collect/Multiset_CustomFieldSerializerBase.java
new file mode 100644
index 0000000..0cad199
--- /dev/null
+++ b/guava-gwt/src/com/google/common/collect/Multiset_CustomFieldSerializerBase.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+/**
+ * This class contains static utility methods for writing {@code Multiset} GWT
+ * field serializers. Serializers should delegate to
+ * {@link #serialize(SerializationStreamWriter, Multiset)} and to either
+ * {@link #instantiate(SerializationStreamReader, ImmutableMultiset.Builder)} or
+ * {@link #populate(SerializationStreamReader, Multiset)}.
+ * 
+ * @author Chris Povirk
+ */
+final class Multiset_CustomFieldSerializerBase {
+  static ImmutableMultiset<Object> instantiate(
+      SerializationStreamReader reader,
+      ImmutableMultiset.Builder<Object> builder)
+      throws SerializationException {
+    int distinctElements = reader.readInt();
+    for (int i = 0; i < distinctElements; i++) {
+      Object element = reader.readObject();
+      int count = reader.readInt();
+      builder.addCopies(element, count);
+    }
+    return builder.build();
+  }
+
+  static Multiset<Object> populate(
+      SerializationStreamReader reader, Multiset<Object> multiset)
+      throws SerializationException {
+    int distinctElements = reader.readInt();
+    for (int i = 0; i < distinctElements; i++) {
+      Object element = reader.readObject();
+      int count = reader.readInt();
+      multiset.add(element, count);
+    }
+    return multiset;
+  }
+
+  static void serialize(SerializationStreamWriter writer, Multiset<?> instance)
+      throws SerializationException {
+    int entryCount = instance.entrySet().size();
+    writer.writeInt(entryCount);
+    for (Multiset.Entry<?> entry : instance.entrySet()) {
+      writer.writeObject(entry.getElement());
+      writer.writeInt(entry.getCount());
+    }
+  } 
+
+  private Multiset_CustomFieldSerializerBase() {}
+}
diff --git a/guava-gwt/src/com/google/common/collect/NaturalOrdering_CustomFieldSerializer.java b/guava-gwt/src/com/google/common/collect/NaturalOrdering_CustomFieldSerializer.java
new file mode 100644
index 0000000..9e57fff
--- /dev/null
+++ b/guava-gwt/src/com/google/common/collect/NaturalOrdering_CustomFieldSerializer.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+/**
+ * This class implements the GWT serialization of {@link NaturalOrdering}.
+ * 
+ * @author Chris Povirk
+ */
+public class NaturalOrdering_CustomFieldSerializer {
+
+  public static void deserialize(SerializationStreamReader reader,
+      NaturalOrdering instance) {
+  }
+
+  public static NaturalOrdering instantiate(
+      SerializationStreamReader reader) {
+    return NaturalOrdering.INSTANCE;
+  }
+
+  public static void serialize(SerializationStreamWriter writer,
+      NaturalOrdering instance) {
+  }
+}
diff --git a/guava-gwt/src/com/google/common/collect/NullsFirstOrdering_CustomFieldSerializer.java b/guava-gwt/src/com/google/common/collect/NullsFirstOrdering_CustomFieldSerializer.java
new file mode 100644
index 0000000..d1a0a71
--- /dev/null
+++ b/guava-gwt/src/com/google/common/collect/NullsFirstOrdering_CustomFieldSerializer.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+/**
+ * This class implements the GWT serialization of {@link NullsFirstOrdering}.
+ * 
+ * @author Chris Povirk
+ */
+public class NullsFirstOrdering_CustomFieldSerializer {
+
+  public static void deserialize(SerializationStreamReader reader,
+      NullsFirstOrdering<?> instance) {
+  }
+
+  @SuppressWarnings("unchecked") // deserialization is unsafe
+  public static NullsFirstOrdering<Object> instantiate(
+      SerializationStreamReader reader) throws SerializationException {
+    return new NullsFirstOrdering<Object>(
+        (Ordering<Object>) reader.readObject());
+  }
+
+  public static void serialize(SerializationStreamWriter writer,
+      NullsFirstOrdering<?> instance) throws SerializationException {
+    writer.writeObject(instance.ordering);
+  }
+}
diff --git a/guava-gwt/src/com/google/common/collect/NullsLastOrdering_CustomFieldSerializer.java b/guava-gwt/src/com/google/common/collect/NullsLastOrdering_CustomFieldSerializer.java
new file mode 100644
index 0000000..0c306e0
--- /dev/null
+++ b/guava-gwt/src/com/google/common/collect/NullsLastOrdering_CustomFieldSerializer.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+/**
+ * This class implements the GWT serialization of {@link NullsLastOrdering}.
+ * 
+ * @author Chris Povirk
+ */
+public class NullsLastOrdering_CustomFieldSerializer {
+
+  public static void deserialize(SerializationStreamReader reader,
+      NullsLastOrdering<?> instance) {
+  }
+
+  @SuppressWarnings("unchecked") // deserialization is unsafe
+  public static NullsLastOrdering<Object> instantiate(
+      SerializationStreamReader reader) throws SerializationException {
+    return new NullsLastOrdering<Object>(
+        (Ordering<Object>) reader.readObject());
+  }
+
+  public static void serialize(SerializationStreamWriter writer,
+      NullsLastOrdering<?> instance) throws SerializationException {
+    writer.writeObject(instance.ordering);
+  }
+}
diff --git a/guava-gwt/src/com/google/common/collect/RegularImmutableBiMap_CustomFieldSerializer.java b/guava-gwt/src/com/google/common/collect/RegularImmutableBiMap_CustomFieldSerializer.java
new file mode 100644
index 0000000..4d68331
--- /dev/null
+++ b/guava-gwt/src/com/google/common/collect/RegularImmutableBiMap_CustomFieldSerializer.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+import com.google.gwt.user.client.rpc.core.java.util.Map_CustomFieldSerializerBase;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+/**
+ * This class implements the GWT serialization of
+ * {@link RegularImmutableBiMap}.
+ * 
+ * @author Chris Povirk
+ */
+public class RegularImmutableBiMap_CustomFieldSerializer {
+  public static void deserialize(SerializationStreamReader reader,
+      RegularImmutableBiMap<?, ?> instance) {
+  }
+
+  public static RegularImmutableBiMap<Object, Object> instantiate(
+      SerializationStreamReader reader) throws SerializationException {
+    Map<Object, Object> entries = new LinkedHashMap<Object, Object>();
+    Map_CustomFieldSerializerBase.deserialize(reader, entries);
+    /*
+     * For this custom field serializer to be invoked, the map must have been
+     * RegularImmutableBiMap before it's serialized. Since RegularImmutableBiMap
+     * always have one or more elements, ImmutableBiMap.copyOf always return a
+     * RegularImmutableBiMap back.
+     */
+    return 
+        (RegularImmutableBiMap<Object, Object>) ImmutableBiMap.copyOf(entries);
+  }
+
+  public static void serialize(SerializationStreamWriter writer,
+      RegularImmutableBiMap<?, ?> instance) throws SerializationException {
+    Map_CustomFieldSerializerBase.serialize(writer, instance);
+  }
+}
diff --git a/guava-gwt/src/com/google/common/collect/RegularImmutableList_CustomFieldSerializer.java b/guava-gwt/src/com/google/common/collect/RegularImmutableList_CustomFieldSerializer.java
new file mode 100644
index 0000000..9dd652c
--- /dev/null
+++ b/guava-gwt/src/com/google/common/collect/RegularImmutableList_CustomFieldSerializer.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+import com.google.gwt.user.client.rpc.core.java.util.Collection_CustomFieldSerializerBase;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * This class implements the GWT serialization of {@link
+ * RegularImmutableList}.
+ *
+ * @author Hayward Chan
+ */
+public class RegularImmutableList_CustomFieldSerializer {
+
+  public static void deserialize(SerializationStreamReader reader,
+      RegularImmutableList<?> instance) {
+  }
+
+  public static RegularImmutableList<Object> instantiate(
+      SerializationStreamReader reader) throws SerializationException {
+    List<Object> elements = new ArrayList<Object>();
+    Collection_CustomFieldSerializerBase.deserialize(reader, elements);
+    /*
+     * For this custom field serializer to be invoked, the list must have been
+     * RegularImmutableList before it's serialized.  Since RegularImmutableList
+     * always have one or more elements, ImmutableList.copyOf always return
+     * a RegularImmutableList back.
+     */
+    return (RegularImmutableList<Object>) ImmutableList.copyOf(elements);
+  }
+
+  public static void serialize(SerializationStreamWriter writer,
+      RegularImmutableList<?> instance) throws SerializationException {
+    Collection_CustomFieldSerializerBase.serialize(writer, instance);
+  }
+}
diff --git a/guava-gwt/src/com/google/common/collect/RegularImmutableMap_CustomFieldSerializer.java b/guava-gwt/src/com/google/common/collect/RegularImmutableMap_CustomFieldSerializer.java
new file mode 100644
index 0000000..d9e1748
--- /dev/null
+++ b/guava-gwt/src/com/google/common/collect/RegularImmutableMap_CustomFieldSerializer.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+import com.google.gwt.user.client.rpc.core.java.util.Map_CustomFieldSerializerBase;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+/**
+ * This class implements the GWT serialization of {@link RegularImmutableMap}.
+ *
+ * @author Hayward Chan
+ */
+public class RegularImmutableMap_CustomFieldSerializer {
+
+  public static void deserialize(SerializationStreamReader reader,
+      RegularImmutableMap<?, ?> instance) {
+  }
+
+  public static RegularImmutableMap<Object, Object> instantiate(
+      SerializationStreamReader reader) throws SerializationException {
+    Map<Object, Object> entries = new LinkedHashMap<Object, Object>();
+    Map_CustomFieldSerializerBase.deserialize(reader, entries);
+    /*
+     * For this custom field serializer to be invoked, the map must have been
+     * RegularImmutableMap before it's serialized.  Since RegularImmutableMap
+     * always have two or more elements, ImmutableMap.copyOf always return
+     * a RegularImmutableMap back.
+     */
+    return (RegularImmutableMap<Object, Object>) ImmutableMap.copyOf(entries);
+  }
+
+  public static void serialize(SerializationStreamWriter writer,
+      RegularImmutableMap<?, ?> instance) throws SerializationException {
+    Map_CustomFieldSerializerBase.serialize(writer, instance);
+  }
+}
diff --git a/guava-gwt/src/com/google/common/collect/RegularImmutableMultiset_CustomFieldSerializer.java b/guava-gwt/src/com/google/common/collect/RegularImmutableMultiset_CustomFieldSerializer.java
new file mode 100644
index 0000000..3c04929
--- /dev/null
+++ b/guava-gwt/src/com/google/common/collect/RegularImmutableMultiset_CustomFieldSerializer.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+import com.google.gwt.user.client.rpc.core.java.util.Collection_CustomFieldSerializerBase;
+
+import java.util.List;
+
+/**
+ * This class implements the GWT serialization of {@link RegularImmutableMultiset}.
+ * 
+ * @author Louis Wasserman
+ */
+public class RegularImmutableMultiset_CustomFieldSerializer {
+  public static void deserialize(SerializationStreamReader reader,
+      RegularImmutableMultiset<?> instance) {
+  }
+
+  public static RegularImmutableMultiset<Object> instantiate(
+      SerializationStreamReader reader) throws SerializationException {
+    List<Object> elements = Lists.newArrayList();
+    Collection_CustomFieldSerializerBase.deserialize(reader, elements);
+    /*
+     * For this custom field serializer to be invoked, the set must have been
+     * RegularImmutableMultiset before it's serialized. Since
+     * RegularImmutableMultiset always have one or more elements,
+     * ImmutableMultiset.copyOf always return a RegularImmutableMultiset back.
+     */
+    return (RegularImmutableMultiset<Object>) ImmutableMultiset
+        .copyOf(elements);
+  }
+
+  public static void serialize(SerializationStreamWriter writer,
+      RegularImmutableMultiset<?> instance) throws SerializationException {
+    Collection_CustomFieldSerializerBase.serialize(writer, instance);
+  }
+}
diff --git a/guava-gwt/src/com/google/common/collect/RegularImmutableSet_CustomFieldSerializer.java b/guava-gwt/src/com/google/common/collect/RegularImmutableSet_CustomFieldSerializer.java
new file mode 100644
index 0000000..5908935
--- /dev/null
+++ b/guava-gwt/src/com/google/common/collect/RegularImmutableSet_CustomFieldSerializer.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+import com.google.gwt.user.client.rpc.core.java.util.Collection_CustomFieldSerializerBase;
+
+import java.util.List;
+
+/**
+ * This class implements the GWT serialization of {@link RegularImmutableSet}.
+ *
+ * @author Hayward Chan
+ */
+public class RegularImmutableSet_CustomFieldSerializer {
+
+  public static void deserialize(SerializationStreamReader reader,
+      RegularImmutableSet<?> instance) {
+  }
+
+  public static RegularImmutableSet<Object> instantiate(
+      SerializationStreamReader reader) throws SerializationException {
+    List<Object> elements = Lists.newArrayList();
+    Collection_CustomFieldSerializerBase.deserialize(reader, elements);
+    /*
+     * For this custom field serializer to be invoked, the set must have been
+     * RegularImmutableSet before it's serialized.  Since RegularImmutableSet
+     * always have two or more elements, ImmutableSet.copyOf always return
+     * a RegularImmutableSet back.
+     */
+    return (RegularImmutableSet<Object>) ImmutableSet.copyOf(elements);
+  }
+
+  public static void serialize(SerializationStreamWriter writer,
+      RegularImmutableSet<?> instance) throws SerializationException {
+    Collection_CustomFieldSerializerBase.serialize(writer, instance);
+  }
+}
diff --git a/guava-gwt/src/com/google/common/collect/RegularImmutableSortedSet_CustomFieldSerializer.java b/guava-gwt/src/com/google/common/collect/RegularImmutableSortedSet_CustomFieldSerializer.java
new file mode 100644
index 0000000..d3018c3
--- /dev/null
+++ b/guava-gwt/src/com/google/common/collect/RegularImmutableSortedSet_CustomFieldSerializer.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+import com.google.gwt.user.client.rpc.core.java.util.Collection_CustomFieldSerializerBase;
+
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.List;
+
+/**
+ * This class implements the GWT serialization of
+ * {@link RegularImmutableSortedSet}.
+ * 
+ * @author Chris Povirk
+ */
+public class RegularImmutableSortedSet_CustomFieldSerializer {
+  public static void deserialize(SerializationStreamReader reader,
+      RegularImmutableSortedSet<?> instance) {
+  }
+
+  public static RegularImmutableSortedSet<Object> instantiate(
+      SerializationStreamReader reader) throws SerializationException {
+    /*
+     * Nothing we can do, but we're already assuming the serialized form is
+     * correctly typed, anyway.
+     */
+    @SuppressWarnings("unchecked")
+    Comparator<Object> comparator = (Comparator<Object>) reader.readObject();
+
+    List<Object> elements = new ArrayList<Object>();
+    Collection_CustomFieldSerializerBase.deserialize(reader, elements);
+    /*
+     * For this custom field serializer to be invoked, the set must have been
+     * RegularImmutableSortedSet before it's serialized. Since
+     * RegularImmutableSortedSet always have one or more elements,
+     * ImmutableSortedSet.copyOf always return a RegularImmutableSortedSet back.
+     */
+    return (RegularImmutableSortedSet<Object>)
+        ImmutableSortedSet.copyOf(comparator, elements);
+  }
+
+  public static void serialize(SerializationStreamWriter writer,
+      RegularImmutableSortedSet<?> instance) throws SerializationException {
+    writer.writeObject(instance.comparator());
+
+    Collection_CustomFieldSerializerBase.serialize(writer, instance);
+  }
+}
diff --git a/guava-gwt/src/com/google/common/collect/ReverseNaturalOrdering_CustomFieldSerializer.java b/guava-gwt/src/com/google/common/collect/ReverseNaturalOrdering_CustomFieldSerializer.java
new file mode 100644
index 0000000..b3744f5
--- /dev/null
+++ b/guava-gwt/src/com/google/common/collect/ReverseNaturalOrdering_CustomFieldSerializer.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+/**
+ * This class implements the GWT serialization of
+ * {@link ReverseNaturalOrdering}.
+ * 
+ * @author Chris Povirk
+ */
+public class ReverseNaturalOrdering_CustomFieldSerializer {
+
+  public static void deserialize(SerializationStreamReader reader,
+      ReverseNaturalOrdering instance) {
+  }
+
+  public static ReverseNaturalOrdering instantiate(
+      SerializationStreamReader reader) {
+    return ReverseNaturalOrdering.INSTANCE;
+  }
+
+  public static void serialize(SerializationStreamWriter writer,
+      ReverseNaturalOrdering instance) {
+  }
+}
diff --git a/guava-gwt/src/com/google/common/collect/ReverseOrdering_CustomFieldSerializer.java b/guava-gwt/src/com/google/common/collect/ReverseOrdering_CustomFieldSerializer.java
new file mode 100644
index 0000000..67711bd
--- /dev/null
+++ b/guava-gwt/src/com/google/common/collect/ReverseOrdering_CustomFieldSerializer.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+/**
+ * This class implements the GWT serialization of {@link ReverseOrdering}.
+ * 
+ * @author Chris Povirk
+ */
+public class ReverseOrdering_CustomFieldSerializer {
+
+  public static void deserialize(SerializationStreamReader reader,
+      ReverseOrdering<?> instance) {
+  }
+
+  @SuppressWarnings("unchecked") // deserialization is unsafe
+  public static ReverseOrdering<Object> instantiate(
+      SerializationStreamReader reader) throws SerializationException {
+    return new ReverseOrdering<Object>(
+        (Ordering<Object>) reader.readObject());
+  }
+
+  public static void serialize(SerializationStreamWriter writer,
+      ReverseOrdering<?> instance) throws SerializationException {
+    writer.writeObject(instance.forwardOrder);
+  }
+}
diff --git a/guava-gwt/src/com/google/common/collect/SingletonImmutableList_CustomFieldSerializer.java b/guava-gwt/src/com/google/common/collect/SingletonImmutableList_CustomFieldSerializer.java
new file mode 100644
index 0000000..712e275
--- /dev/null
+++ b/guava-gwt/src/com/google/common/collect/SingletonImmutableList_CustomFieldSerializer.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+/**
+ * This class implements the GWT serialization of
+ * {@link SingletonImmutableList}.
+ *
+ * @author Chris Povirk
+ */
+public class SingletonImmutableList_CustomFieldSerializer {
+
+  public static void deserialize(SerializationStreamReader reader,
+      SingletonImmutableList<?> instance) {
+  }
+
+  public static SingletonImmutableList<Object> instantiate(
+      SerializationStreamReader reader) throws SerializationException {
+    Object element = reader.readObject();
+    return new SingletonImmutableList<Object>(element);
+  }
+  
+  public static void serialize(SerializationStreamWriter writer,
+      SingletonImmutableList<?> instance) throws SerializationException {
+    writer.writeObject(instance.element);
+  }
+}
diff --git a/guava-gwt/src/com/google/common/collect/SingletonImmutableMap_CustomFieldSerializer.java b/guava-gwt/src/com/google/common/collect/SingletonImmutableMap_CustomFieldSerializer.java
new file mode 100644
index 0000000..6a3ef38
--- /dev/null
+++ b/guava-gwt/src/com/google/common/collect/SingletonImmutableMap_CustomFieldSerializer.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+/**
+ * This class implements the GWT serialization of {@link SingletonImmutableMap}.
+ *
+ * @author Chris Povirk
+ */
+public class SingletonImmutableMap_CustomFieldSerializer {
+
+  public static void deserialize(SerializationStreamReader reader,
+      SingletonImmutableMap<?, ?> instance) {
+  }
+
+  public static SingletonImmutableMap<Object, Object> instantiate(
+      SerializationStreamReader reader) throws SerializationException {
+    Object key = checkNotNull(reader.readObject());
+    Object value = checkNotNull(reader.readObject());
+    return new SingletonImmutableMap<Object, Object>(key, value);
+  }
+  
+  public static void serialize(SerializationStreamWriter writer,
+      SingletonImmutableMap<?, ?> instance) throws SerializationException {
+    writer.writeObject(instance.singleKey);
+    writer.writeObject(instance.singleValue);
+  }
+}
diff --git a/guava-gwt/src/com/google/common/collect/SingletonImmutableSet_CustomFieldSerializer.java b/guava-gwt/src/com/google/common/collect/SingletonImmutableSet_CustomFieldSerializer.java
new file mode 100644
index 0000000..bfa9d42
--- /dev/null
+++ b/guava-gwt/src/com/google/common/collect/SingletonImmutableSet_CustomFieldSerializer.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+/**
+ * This class implements the GWT serialization of {@link SingletonImmutableSet}.
+ *
+ * @author Hayward Chan
+ */
+public class SingletonImmutableSet_CustomFieldSerializer {
+
+  public static void deserialize(SerializationStreamReader reader,
+      SingletonImmutableSet<?> instance) {
+  }
+
+  public static SingletonImmutableSet<Object> instantiate(
+      SerializationStreamReader reader) throws SerializationException {
+    Object element = reader.readObject();
+    return new SingletonImmutableSet<Object>(element);
+  }
+  
+  public static void serialize(SerializationStreamWriter writer,
+      SingletonImmutableSet<?> instance) throws SerializationException {
+    writer.writeObject(instance.element);
+  }
+}
diff --git a/guava-gwt/src/com/google/common/collect/TreeBasedTable_CustomFieldSerializer.java b/guava-gwt/src/com/google/common/collect/TreeBasedTable_CustomFieldSerializer.java
new file mode 100644
index 0000000..1b09ff4
--- /dev/null
+++ b/guava-gwt/src/com/google/common/collect/TreeBasedTable_CustomFieldSerializer.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+import java.util.Comparator;
+import java.util.Map;
+import java.util.Map.Entry;
+
+/**
+ * This class implements the GWT serialization of {@link TreeBasedTable}.
+ *
+ * @author Hayward Chan
+ */
+public class TreeBasedTable_CustomFieldSerializer {
+
+  public static void deserialize(SerializationStreamReader reader,
+      TreeBasedTable<?, ?, ?> instance) {
+  }
+
+  public static TreeBasedTable<Object, Object, Object> instantiate(
+      SerializationStreamReader reader) throws SerializationException {
+    @SuppressWarnings("unchecked") // The comparator isn't used statically.
+    Comparator<Object> rowComparator
+        = (Comparator<Object>) reader.readObject();
+    @SuppressWarnings("unchecked") // The comparator isn't used statically.
+    Comparator<Object> columnComparator
+        = (Comparator<Object>) reader.readObject();
+    Map<?, ?> backingMap = (Map<?, ?>) reader.readObject();
+
+    TreeBasedTable<Object, Object, Object> table
+        = TreeBasedTable.create(rowComparator, columnComparator);
+    for (Entry<?, ?> row : backingMap.entrySet()) {
+      table.row(row.getKey()).putAll((Map<?, ?>) row.getValue());
+    }
+    return table;
+  }
+
+  public static void serialize(SerializationStreamWriter writer,
+      TreeBasedTable<?, ?, ?> instance)
+      throws SerializationException {
+    /*
+     * The backing map of a TreeBasedTable is a tree map of tree map.
+     * Therefore, the backing map is GWT serializable (assuming the row,
+     * column, value, the row comparator and column comparator are all
+     * serializable).
+     */
+    writer.writeObject(instance.rowComparator());
+    writer.writeObject(instance.columnComparator());
+    writer.writeObject(instance.backingMap);
+  }
+}
diff --git a/guava-gwt/src/com/google/common/collect/TreeMultimap_CustomFieldSerializer.java b/guava-gwt/src/com/google/common/collect/TreeMultimap_CustomFieldSerializer.java
new file mode 100644
index 0000000..47e1bf3
--- /dev/null
+++ b/guava-gwt/src/com/google/common/collect/TreeMultimap_CustomFieldSerializer.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationException;
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+import java.util.Comparator;
+
+/**
+ * This class implements the GWT serialization of {@link TreeMultimap}.
+ *
+ * @author Nikhil Singhal
+ */
+public class TreeMultimap_CustomFieldSerializer {
+
+  public static void deserialize(SerializationStreamReader in,
+      TreeMultimap<?, ?> out) {
+  }
+
+  @SuppressWarnings("unchecked")
+  public static TreeMultimap<Object, Object> instantiate(
+      SerializationStreamReader in) throws SerializationException {
+    Comparator keyComparator = (Comparator) in.readObject();
+    Comparator valueComparator = (Comparator) in.readObject();
+
+    return (TreeMultimap<Object, Object>)
+        Multimap_CustomFieldSerializerBase.populate(
+            in, TreeMultimap.create(keyComparator, valueComparator));
+  }
+
+  public static void serialize(SerializationStreamWriter out,
+      TreeMultimap<?, ?> multimap) throws SerializationException {
+    out.writeObject(multimap.keyComparator());
+    out.writeObject(multimap.valueComparator());
+    Multimap_CustomFieldSerializerBase.serialize(out, multimap);
+  }
+}
diff --git a/guava-gwt/src/com/google/common/collect/UsingToStringOrdering_CustomFieldSerializer.java b/guava-gwt/src/com/google/common/collect/UsingToStringOrdering_CustomFieldSerializer.java
new file mode 100644
index 0000000..dacf0c2
--- /dev/null
+++ b/guava-gwt/src/com/google/common/collect/UsingToStringOrdering_CustomFieldSerializer.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.user.client.rpc.SerializationStreamReader;
+import com.google.gwt.user.client.rpc.SerializationStreamWriter;
+
+/**
+ * This class implements the GWT serialization of {@link UsingToStringOrdering}.
+ * 
+ * @author Chris Povirk
+ */
+public class UsingToStringOrdering_CustomFieldSerializer {
+
+  public static void deserialize(SerializationStreamReader reader,
+      UsingToStringOrdering instance) {
+  }
+
+  public static UsingToStringOrdering instantiate(
+      SerializationStreamReader reader) {
+    return UsingToStringOrdering.INSTANCE;
+  }
+
+  public static void serialize(SerializationStreamWriter writer,
+      UsingToStringOrdering instance) {
+  }
+}
diff --git a/guava-gwt/src/com/google/common/math/Math.gwt.xml b/guava-gwt/src/com/google/common/math/Math.gwt.xml
new file mode 100644
index 0000000..1ccb925
--- /dev/null
+++ b/guava-gwt/src/com/google/common/math/Math.gwt.xml
@@ -0,0 +1,6 @@
+<module>
+  <source path=""/>
+  <super-source path="super"/>
+  <inherits name="com.google.common.annotations.Annotations"/>
+  <inherits name="com.google.common.base.Base"/>
+</module>
diff --git a/guava-gwt/src/com/google/common/net/Net.gwt.xml b/guava-gwt/src/com/google/common/net/Net.gwt.xml
new file mode 100644
index 0000000..6df61fb
--- /dev/null
+++ b/guava-gwt/src/com/google/common/net/Net.gwt.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<module>
+   
+  <source path=""/>
+   
+  <super-source path="super"/>
+   
+  <inherits name="com.google.common.annotations.Annotations"/>
+   
+  <inherits name="com.google.common.base.Base"/>
+   
+  <inherits name="com.google.common.collect.Collect"/>
+   
+  <inherits name="com.google.common.escape.Escape"/>
+   
+  <inherits name="com.google.common.primitives.Primitives"/>
+    
+  <inherits name="java.util.Util"/>
+   
+</module>
diff --git a/guava-gwt/src/com/google/common/primitives/Primitives.gwt.xml b/guava-gwt/src/com/google/common/primitives/Primitives.gwt.xml
new file mode 100644
index 0000000..fa86e6b
--- /dev/null
+++ b/guava-gwt/src/com/google/common/primitives/Primitives.gwt.xml
@@ -0,0 +1,6 @@
+<module>
+ <source path=""/>
+ <super-source path="super"/>
+ <inherits name="com.google.common.annotations.Annotations"/>
+ <inherits name="com.google.common.base.Base"/>
+</module>
diff --git a/guava-gwt/src/com/google/common/util/concurrent/Concurrent.gwt.xml b/guava-gwt/src/com/google/common/util/concurrent/Concurrent.gwt.xml
new file mode 100644
index 0000000..cc8ffd6
--- /dev/null
+++ b/guava-gwt/src/com/google/common/util/concurrent/Concurrent.gwt.xml
@@ -0,0 +1,4 @@
+<module>
+  <source path=""/>
+  <inherits name="com.google.common.annotations.Annotations"/>
+</module>
diff --git a/guava-gwt/test/com/google/common/base/TestModuleEntryPoint.java b/guava-gwt/test/com/google/common/base/TestModuleEntryPoint.java
new file mode 100644
index 0000000..cda7e39
--- /dev/null
+++ b/guava-gwt/test/com/google/common/base/TestModuleEntryPoint.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base;
+
+import com.google.gwt.core.client.EntryPoint;
+
+/**
+ * A dummy entry point of the test module.
+ *
+ * @author Hayward Chan
+ */
+public class TestModuleEntryPoint implements EntryPoint {
+
+  @Override public void onModuleLoad() {
+  }
+}
diff --git a/guava-gwt/test/com/google/common/base/testModule.gwt.xml b/guava-gwt/test/com/google/common/base/testModule.gwt.xml
new file mode 100644
index 0000000..0356983
--- /dev/null
+++ b/guava-gwt/test/com/google/common/base/testModule.gwt.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<module>
+  <inherits name="com.google.gwt.user.User"/>
+  <inherits name="com.google.gwt.junit.JUnit"/>
+  <inherits name="com.google.common.base.Base"/>
+  <inherits name="com.google.common.collect.Collect"/>
+  <inherits name="com.google.common.testing.Testing"/>
+  <inherits name="org.junit.contrib.truth.Truth"/>
+  <inherits name="com.google.common.annotations.Annotations"/>
+  <entry-point class="com.google.common.base.TestModuleEntryPoint"/>
+   
+  <source path=""/>
+    
+  <add-linker name="std"/>
+   
+  <super-source path="super"/>
+   
+</module>
diff --git a/guava-gwt/test/com/google/common/collect/TestModuleEntryPoint.java b/guava-gwt/test/com/google/common/collect/TestModuleEntryPoint.java
new file mode 100644
index 0000000..5c171b2
--- /dev/null
+++ b/guava-gwt/test/com/google/common/collect/TestModuleEntryPoint.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.gwt.core.client.EntryPoint;
+
+/**
+ * A dummy entry point of the test module.
+ *
+ * @author Hayward Chan
+ */
+public class TestModuleEntryPoint implements EntryPoint {
+
+  @Override public void onModuleLoad() {
+  }
+}
diff --git a/guava-gwt/test/com/google/common/collect/testModule.gwt.xml b/guava-gwt/test/com/google/common/collect/testModule.gwt.xml
new file mode 100644
index 0000000..47b2f23
--- /dev/null
+++ b/guava-gwt/test/com/google/common/collect/testModule.gwt.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<module>
+  <inherits name="com.google.gwt.user.User"/>
+  <inherits name="com.google.gwt.junit.JUnit"/>
+  <inherits name="com.google.common.base.Base"/>
+  <inherits name="com.google.common.collect.Collect"/>
+  <inherits name="com.google.common.testing.Testing"/>
+  <inherits name="org.junit.contrib.truth.Truth"/>
+  <inherits name="com.google.common.annotations.Annotations"/>
+  <entry-point class="com.google.common.collect.TestModuleEntryPoint"/>
+   
+  <source path=""/>
+   
+  <source path="gwt"/>
+    
+  <add-linker name="std"/>
+   
+  <super-source path="super"/>
+   
+</module>
diff --git a/guava-gwt/test/com/google/common/math/TestModuleEntryPoint.java b/guava-gwt/test/com/google/common/math/TestModuleEntryPoint.java
new file mode 100644
index 0000000..9e6813c
--- /dev/null
+++ b/guava-gwt/test/com/google/common/math/TestModuleEntryPoint.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.math;
+
+import com.google.gwt.core.client.EntryPoint;
+
+/**
+ * A dummy entry point of the test module.
+ *
+ * @author Hayward Chan
+ */
+public class TestModuleEntryPoint implements EntryPoint {
+
+  @Override public void onModuleLoad() {
+  }
+}
diff --git a/guava-gwt/test/com/google/common/math/testModule.gwt.xml b/guava-gwt/test/com/google/common/math/testModule.gwt.xml
new file mode 100644
index 0000000..17f579d
--- /dev/null
+++ b/guava-gwt/test/com/google/common/math/testModule.gwt.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<module>
+  <inherits name="com.google.gwt.user.User"/>
+  <inherits name="com.google.gwt.junit.JUnit"/>
+  <inherits name="com.google.common.base.Base"/>
+  <inherits name="com.google.common.collect.Collect"/>
+  <inherits name="com.google.common.math.Math"/>
+  <inherits name="com.google.common.testing.Testing"/>
+  <inherits name="com.google.common.annotations.Annotations"/>
+  <inherits name="org.junit.contrib.truth.Truth"/>
+  <entry-point class="com.google.common.math.TestModuleEntryPoint"/>
+   
+  <source path=""/>
+    
+  <add-linker name="std"/>
+   
+  <super-source path="super"/>
+   
+</module>
diff --git a/guava-gwt/test/com/google/common/net/TestModuleEntryPoint.java b/guava-gwt/test/com/google/common/net/TestModuleEntryPoint.java
new file mode 100644
index 0000000..d7237aa
--- /dev/null
+++ b/guava-gwt/test/com/google/common/net/TestModuleEntryPoint.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.net;
+
+import com.google.gwt.core.client.EntryPoint;
+
+/**
+ * A dummy entry point of the test module.
+ *
+ * @author Hayward Chan
+ */
+public class TestModuleEntryPoint implements EntryPoint {
+
+  @Override public void onModuleLoad() {
+  }
+}
diff --git a/guava-gwt/test/com/google/common/net/TestPlatform.java b/guava-gwt/test/com/google/common/net/TestPlatform.java
new file mode 100644
index 0000000..39301d5
--- /dev/null
+++ b/guava-gwt/test/com/google/common/net/TestPlatform.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.net;
+
+import com.google.common.annotations.GwtCompatible;
+
+/**
+ * @author Hayward Chan
+ */
+@GwtCompatible(emulated = true)
+class TestPlatform {
+}
diff --git a/guava-gwt/test/com/google/common/net/testModule.gwt.xml b/guava-gwt/test/com/google/common/net/testModule.gwt.xml
new file mode 100644
index 0000000..0e6338b
--- /dev/null
+++ b/guava-gwt/test/com/google/common/net/testModule.gwt.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<module>
+  <inherits name="com.google.gwt.user.User"/>
+  <inherits name="com.google.gwt.junit.JUnit"/>
+  <inherits name="com.google.common.escape.testing.Testing"/>
+  <inherits name="com.google.common.net.Net"/>
+  <inherits name="com.google.common.testing.Testing"/>
+  <inherits name="org.junit.contrib.truth.Truth"/>
+  <inherits name="com.google.common.annotations.Annotations"/>
+  <entry-point class="com.google.common.net.TestModuleEntryPoint"/>
+   
+  <source path=""/>
+    
+  <add-linker name="std"/>
+   
+  <super-source path="super"/>
+   
+</module>
diff --git a/guava-gwt/test/com/google/common/primitives/TestModuleEntryPoint.java b/guava-gwt/test/com/google/common/primitives/TestModuleEntryPoint.java
new file mode 100644
index 0000000..b1daa47
--- /dev/null
+++ b/guava-gwt/test/com/google/common/primitives/TestModuleEntryPoint.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.primitives;
+
+import com.google.gwt.core.client.EntryPoint;
+
+/**
+ * A dummy entry point of the test module.
+ *
+ * @author Hayward Chan
+ */
+public class TestModuleEntryPoint implements EntryPoint {
+
+  @Override public void onModuleLoad() {
+  }
+}
diff --git a/guava-gwt/test/com/google/common/primitives/testModule.gwt.xml b/guava-gwt/test/com/google/common/primitives/testModule.gwt.xml
new file mode 100644
index 0000000..7bb4013
--- /dev/null
+++ b/guava-gwt/test/com/google/common/primitives/testModule.gwt.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<module>
+  <inherits name="com.google.gwt.user.User"/>
+  <inherits name="com.google.gwt.junit.JUnit"/>
+  <inherits name="com.google.common.primitives.Primitives"/>
+  <inherits name="com.google.common.testing.Testing"/>
+  <inherits name="org.junit.contrib.truth.Truth"/>
+  <inherits name="com.google.common.annotations.Annotations"/>
+  <entry-point class="com.google.common.primitives.TestModuleEntryPoint"/>
+   
+  <source path=""/>
+    
+  <add-linker name="std"/>
+   
+  <super-source path="super"/>
+   
+</module>
diff --git a/guava-gwt/test/com/google/common/testing/TestModuleEntryPoint.java b/guava-gwt/test/com/google/common/testing/TestModuleEntryPoint.java
new file mode 100644
index 0000000..ed6e199
--- /dev/null
+++ b/guava-gwt/test/com/google/common/testing/TestModuleEntryPoint.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.testing;
+
+import com.google.gwt.core.client.EntryPoint;
+
+/**
+ * A dummy entry point of the test module.
+ *
+ * @author Hayward Chan
+ */
+public class TestModuleEntryPoint implements EntryPoint {
+
+  @Override public void onModuleLoad() {
+  }
+}
diff --git a/guava-gwt/test/com/google/common/testing/Testing.gwt.xml b/guava-gwt/test/com/google/common/testing/Testing.gwt.xml
new file mode 100644
index 0000000..e1f85eb
--- /dev/null
+++ b/guava-gwt/test/com/google/common/testing/Testing.gwt.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<module>
+   
+  <source path=""/>
+   
+  <super-source path="super"/>
+   
+  <inherits name="com.google.common.annotations.Annotations"/>
+   
+  <inherits name="com.google.common.base.Base"/>
+   
+  <inherits name="com.google.common.collect.Collect"/>
+   
+  <inherits name="com.google.gwt.junit.JUnit"/>
+    
+  <inherits name="java.util.Util"/>
+   
+</module>
diff --git a/guava-gwt/test/com/google/common/testing/testModule.gwt.xml b/guava-gwt/test/com/google/common/testing/testModule.gwt.xml
new file mode 100644
index 0000000..2015440
--- /dev/null
+++ b/guava-gwt/test/com/google/common/testing/testModule.gwt.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<module>
+  <inherits name="com.google.gwt.user.User"/>
+  <inherits name="com.google.gwt.junit.JUnit"/>
+  <inherits name="com.google.common.collect.Collect"/>
+  <inherits name="com.google.common.testing.Testing"/>
+  <entry-point class="com.google.common.testing.TestModuleEntryPoint"/>
+   
+  <source path=""/>
+    
+  <add-linker name="std"/>
+   
+  <super-source path="super"/>
+   
+</module>
diff --git a/guava-testlib/pom.xml b/guava-testlib/pom.xml
new file mode 100644
index 0000000..fed06d7
--- /dev/null
+++ b/guava-testlib/pom.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>com.google.guava</groupId>
+    <artifactId>guava-parent</artifactId>
+    <version>11.0.2</version>
+  </parent>
+  <artifactId>guava-testlib</artifactId>
+  <name>Guava Testing Library</name>
+  <description>
+    Guava testlib is a set of java classes used for more convenient
+    unit testing - particularly to assist the tests for Guava itself.
+  </description>
+  <dependencies>
+    <dependency>
+      <groupId>${project.groupId}</groupId>
+      <artifactId>guava</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>4.8.2</version>
+    </dependency>
+    <dependency>
+      <groupId>com.google.gwt</groupId>
+      <artifactId>gwt-dev</artifactId>
+      <version>2.2.0</version>
+      <scope>provided</scope>
+    </dependency>
+  </dependencies>
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <version>2.3.2</version>
+        <configuration>
+          <source>1.5</source>
+          <target>1.5</target>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-source-plugin</artifactId>
+        <version>2.1.2</version>
+        <executions>
+          <execution>
+            <id>attach-sources</id>
+            <phase>verify</phase>
+            <goals><goal>jar-no-fork</goal></goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+    <sourceDirectory>src</sourceDirectory>
+  </build>
+</project>
diff --git a/guava-testlib/src/com/google/common/collect/testing/AbstractCollectionTestSuiteBuilder.java b/guava-testlib/src/com/google/common/collect/testing/AbstractCollectionTestSuiteBuilder.java
new file mode 100644
index 0000000..32bc3fb
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/AbstractCollectionTestSuiteBuilder.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+import com.google.common.collect.testing.testers.CollectionAddAllTester;
+import com.google.common.collect.testing.testers.CollectionAddTester;
+import com.google.common.collect.testing.testers.CollectionClearTester;
+import com.google.common.collect.testing.testers.CollectionContainsAllTester;
+import com.google.common.collect.testing.testers.CollectionContainsTester;
+import com.google.common.collect.testing.testers.CollectionCreationTester;
+import com.google.common.collect.testing.testers.CollectionEqualsTester;
+import com.google.common.collect.testing.testers.CollectionIsEmptyTester;
+import com.google.common.collect.testing.testers.CollectionIteratorTester;
+import com.google.common.collect.testing.testers.CollectionRemoveAllTester;
+import com.google.common.collect.testing.testers.CollectionRemoveTester;
+import com.google.common.collect.testing.testers.CollectionRetainAllTester;
+import com.google.common.collect.testing.testers.CollectionSizeTester;
+import com.google.common.collect.testing.testers.CollectionToArrayTester;
+import com.google.common.collect.testing.testers.CollectionToStringTester;
+
+import junit.framework.TestSuite;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * Abstract superclass of all test-suite builders for collection interfaces.
+ *
+ * @author George van den Driessche
+ */
+public abstract class AbstractCollectionTestSuiteBuilder<
+    B extends AbstractCollectionTestSuiteBuilder<B, E>, E>
+    extends PerCollectionSizeTestSuiteBuilder<
+        B, TestCollectionGenerator<E>, Collection<E>, E> {
+  // Class parameters must be raw.
+  @SuppressWarnings("unchecked")
+  @Override protected List<Class<? extends AbstractTester>> getTesters() {
+    return Arrays.<Class<? extends AbstractTester>>asList(
+        CollectionAddAllTester.class,
+        CollectionAddTester.class,
+        CollectionClearTester.class,
+        CollectionContainsAllTester.class,
+        CollectionContainsTester.class,
+        CollectionCreationTester.class,
+        CollectionEqualsTester.class,
+        CollectionIsEmptyTester.class,
+        CollectionIteratorTester.class,
+        CollectionRemoveAllTester.class,
+        CollectionRemoveTester.class,
+        CollectionRetainAllTester.class,
+        CollectionSizeTester.class,
+        CollectionToArrayTester.class,
+        CollectionToStringTester.class
+    );
+  }
+
+  @Override List<TestSuite> createDerivedSuites(FeatureSpecificTestSuiteBuilder<
+      ?, ? extends OneSizeTestContainerGenerator<Collection<E>, E>>
+          parentBuilder) {
+    DerivedIteratorTestSuiteBuilder<?> iteratorTestSuiteBuilder =
+        new DerivedIteratorTestSuiteBuilder<E>()
+            .named(parentBuilder.getName())
+            .usingGenerator(parentBuilder.getSubjectGenerator())
+            .withFeatures(parentBuilder.getFeatures());
+
+    return Collections.singletonList(
+        iteratorTestSuiteBuilder.createTestSuite());
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/AbstractCollectionTester.java b/guava-testlib/src/com/google/common/collect/testing/AbstractCollectionTester.java
new file mode 100644
index 0000000..f1c7688
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/AbstractCollectionTester.java
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+import java.util.Collection;
+
+/**
+ * Base class for collection testers.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @param <E> the element type of the collection to be tested.
+ *
+ * @author Kevin Bourrillion
+ */
+public abstract class AbstractCollectionTester<E>
+    extends AbstractContainerTester<Collection<E>, E> {
+
+  // TODO: replace this with an accessor.
+  protected Collection<E> collection;
+
+  @Override protected Collection<E> actualContents() {
+    return collection;
+  }
+
+  // TODO: dispose of this once collection is encapsulated.
+  @Override protected Collection<E> resetContainer(Collection<E> newContents) {
+    collection = super.resetContainer(newContents);
+    return collection;
+  }
+
+  /** @see AbstractContainerTester#resetContainer() */
+  protected void resetCollection() {
+    resetContainer();
+  }
+
+  /**
+   * @return an array of the proper size with {@code null} inserted into the
+   * middle element.
+   */
+  protected E[] createArrayWithNullElement() {
+    E[] array = createSamplesArray();
+    array[getNullLocation()] = null;
+    return array;
+  }
+
+  protected void initCollectionWithNullElement() {
+    E[] array = createArrayWithNullElement();
+    resetContainer(getSubjectGenerator().create(array));
+  }
+
+  /**
+   * Equivalent to {@link #expectMissing(Object[]) expectMissing}{@code (null)}
+   * except that the call to {@code contains(null)} is permitted to throw a
+   * {@code NullPointerException}.
+   *
+   * @param message message to use upon assertion failure
+   */
+  protected void expectNullMissingWhenNullUnsupported(String message) {
+    try {
+      assertFalse(message, actualContents().contains(null));
+    } catch (NullPointerException tolerated) {
+      // Tolerated
+    }
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/AbstractContainerTester.java b/guava-testlib/src/com/google/common/collect/testing/AbstractContainerTester.java
new file mode 100644
index 0000000..fb95223
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/AbstractContainerTester.java
@@ -0,0 +1,240 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * Base class for testers of classes (including {@link Collection}
+ * and {@link java.util.Map Map}) that contain elements.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @param <C> the type of the container
+ * @param <E> the type of the container's contents
+ *
+ * @author George van den Driessche
+ */
+public abstract class AbstractContainerTester<C, E>
+    extends AbstractTester<OneSizeTestContainerGenerator<C, E>> {
+  protected SampleElements<E> samples;
+  protected C container;
+
+  @Override public void setUp() throws Exception {
+    super.setUp();
+    samples = this.getSubjectGenerator().samples();
+    resetContainer();
+  }
+
+  /**
+   * @return the contents of the container under test, for use by
+   * {@link #expectContents(Object[]) expectContents(E...)} and its friends.
+   */
+  protected abstract Collection<E> actualContents();
+
+  /**
+   * Replaces the existing container under test with a new container created
+   * by the subject generator.
+   *
+   * @see #resetContainer(Object) resetContainer(C)
+   *
+   * @return the new container instance.
+   */
+  protected C resetContainer() {
+    return resetContainer(getSubjectGenerator().createTestSubject());
+  }
+
+  /**
+   * Replaces the existing container under test with a new container.
+   * This is useful when a single test method needs to create multiple
+   * containers while retaining the ability to use
+   * {@link #expectContents(Object[]) expectContents(E...)} and other
+   * convenience methods. The creation of multiple containers in a single
+   * method is discouraged in most cases, but it is vital to the iterator tests.
+   *
+   * @return the new container instance
+   * @param newValue the new container instance
+   */
+  protected C resetContainer(C newValue) {
+    container = newValue;
+    return container;
+  }
+
+  /**
+   * @see #expectContents(java.util.Collection)
+   *
+   * @param elements expected contents of {@link #container}
+   */
+  protected final void expectContents(E... elements) {
+    expectContents(Arrays.asList(elements));
+  }
+
+  /**
+   * Asserts that the collection under test contains exactly the given elements,
+   * respecting cardinality but not order. Subclasses may override this method
+   * to provide stronger assertions, e.g., to check ordering in lists, but
+   * realize that <strong>unless a test extends
+   * {@link com.google.common.collect.testing.testers.AbstractListTester
+   * AbstractListTester}, a call to {@code expectContents()} invokes this
+   * version</strong>.
+   *
+   * @param expected expected value of {@link #container}
+   */
+  /*
+   * TODO: improve this and other implementations and move out of this framework
+   * for wider use
+   *
+   * TODO: could we incorporate the overriding logic from AbstractListTester, by
+   * examining whether the features include KNOWN_ORDER?
+   */
+  protected void expectContents(Collection<E> expected) {
+    Helpers.assertEqualIgnoringOrder(expected, actualContents());
+  }
+
+  protected void expectUnchanged() {
+    expectContents(getSampleElements());
+  }
+
+  /**
+   * Asserts that the collection under test contains exactly the elements it was
+   * initialized with plus the given elements, according to
+   * {@link #expectContents(java.util.Collection)}. In other words, for the
+   * default {@code expectContents()} implementation, the number of occurrences
+   * of each given element has increased by one since the test collection was
+   * created, and the number of occurrences of all other elements has not
+   * changed.
+   * 
+   * <p>Note: This means that a test like the following will fail if
+   * {@code collection} is a {@code Set}:
+   *
+   * <pre>
+   * collection.add(existingElement);
+   * expectAdded(existingElement);</pre>
+   *
+   * In this case, {@code collection} was not modified as a result of the
+   * {@code add()} call, and the test will fail because the number of
+   * occurrences of {@code existingElement} is unchanged.
+   *
+   * @param elements expected additional contents of {@link #container}
+   */
+  protected final void expectAdded(E... elements) {
+    List<E> expected = Helpers.copyToList(getSampleElements());
+    expected.addAll(Arrays.asList(elements));
+    expectContents(expected);
+  }
+
+  protected final void expectAdded(int index, E... elements) {
+    expectAdded(index, Arrays.asList(elements));
+  }
+
+  protected final void expectAdded(int index, Collection<E> elements) {
+    List<E> expected = Helpers.copyToList(getSampleElements());
+    expected.addAll(index, elements);
+    expectContents(expected);
+  }
+
+  /*
+   * TODO: if we're testing a list, we could check indexOf(). (Doing it in
+   * AbstractListTester isn't enough because many tests that run on lists don't
+   * extends AbstractListTester.) We could also iterate over all elements to
+   * verify absence
+   */
+  protected void expectMissing(E... elements) {
+    for (E element : elements) {
+      assertFalse("Should not contain " + element,
+          actualContents().contains(element));
+    }
+  }
+
+  protected E[] createSamplesArray() {
+    E[] array = getSubjectGenerator().createArray(getNumElements());
+    getSampleElements().toArray(array);
+    return array;
+  }
+
+  public static class ArrayWithDuplicate<E> {
+    public final E[] elements;
+    public final E duplicate;
+
+    private ArrayWithDuplicate(E[] elements, E duplicate) {
+      this.elements = elements;
+      this.duplicate = duplicate;
+    }
+  }
+
+  /**
+   * @return an array of the proper size with a duplicate element.
+   * The size must be at least three.
+   */
+  protected ArrayWithDuplicate<E> createArrayWithDuplicateElement() {
+    E[] elements = createSamplesArray();
+    E duplicate = elements[(elements.length / 2) - 1];
+    elements[(elements.length / 2) + 1] = duplicate;
+    return new ArrayWithDuplicate<E>(elements, duplicate);
+  }
+
+  // Helper methods to improve readability of derived classes
+
+  protected int getNumElements() {
+    return getSubjectGenerator().getCollectionSize().getNumElements();
+  }
+
+  protected Collection<E> getSampleElements(int howMany) {
+    return getSubjectGenerator().getSampleElements(howMany);
+  }
+
+  protected Collection<E> getSampleElements() {
+    return getSampleElements(getNumElements());
+  }
+
+  /**
+   * Returns the {@linkplain #getSampleElements() sample elements} as ordered by
+   * {@link TestContainerGenerator#order(List)}. Tests should used this method
+   * only if they declare requirement {@link
+   * com.google.common.collect.testing.features.CollectionFeature#KNOWN_ORDER}.
+   */
+  protected List<E> getOrderedElements() {
+    List<E> list = new ArrayList<E>();
+    for (E e : getSubjectGenerator().order(
+        new ArrayList<E>(getSampleElements()))) {
+      list.add(e);
+    }
+    return Collections.unmodifiableList(list);
+  }
+
+  /**
+   * @return a suitable location for a null element, to use when initializing
+   * containers for tests that involve a null element being present.
+   */
+  protected int getNullLocation() {
+    return getNumElements() / 2;
+  }
+
+  @SuppressWarnings("unchecked")
+  protected MinimalCollection<E> createDisjointCollection() {
+    return MinimalCollection.of(samples.e3, samples.e4);
+  }
+
+  @SuppressWarnings("unchecked")
+  protected MinimalCollection<E> emptyCollection() {
+    return MinimalCollection.<E>of();
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/AbstractIteratorTester.java b/guava-testlib/src/com/google/common/collect/testing/AbstractIteratorTester.java
new file mode 100644
index 0000000..385b92a
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/AbstractIteratorTester.java
@@ -0,0 +1,667 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.fail;
+
+import junit.framework.AssertionFailedError;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.NoSuchElementException;
+import java.util.Set;
+import java.util.Stack;
+
+/**
+ * Most of the logic for {@link IteratorTester} and {@link ListIteratorTester}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @param <E> the type of element returned by the iterator
+ * @param <I> the type of the iterator ({@link Iterator} or
+ *     {@link ListIterator})
+ *
+ * @author Kevin Bourrillion
+ * @author Chris Povirk
+ */
+abstract class AbstractIteratorTester<E, I extends Iterator<E>> {
+  private boolean whenNextThrowsExceptionStopTestingCallsToRemove;
+  private boolean whenAddThrowsExceptionStopTesting;
+
+  /**
+   * Don't verify iterator behavior on remove() after a call to next()
+   * throws an exception.
+   *
+   * <p>JDK 6 currently has a bug where some iterators get into a undefined
+   * state when next() throws a NoSuchElementException. The correct
+   * behavior is for remove() to remove the last element returned by
+   * next, even if a subsequent next() call threw an exception; however
+   * JDK 6's HashMap and related classes throw an IllegalStateException
+   * in this case.
+   *
+   * <p>Calling this method causes the iterator tester to skip testing
+   * any remove() in a stimulus sequence after the reference iterator
+   * throws an exception in next().
+   *
+   * <p>TODO: remove this once we're on 6u5, which has the fix.
+   *
+   * @see <a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6529795">
+   *     Sun Java Bug 6529795</a>
+   */
+  public void ignoreSunJavaBug6529795() {
+    whenNextThrowsExceptionStopTestingCallsToRemove = true;
+  }
+
+  /**
+   * Don't verify iterator behavior after a call to add() throws an exception.
+   *
+   * <p>AbstractList's ListIterator implementation gets into a undefined state
+   * when add() throws an UnsupportedOperationException. Instead of leaving the
+   * iterator's position unmodified, it increments it, skipping an element or
+   * even moving past the end of the list.
+   *
+   * <p>Calling this method causes the iterator tester to skip testing in a
+   * stimulus sequence after the iterator under test throws an exception in
+   * add().
+   *
+   * <p>TODO: remove this once the behavior is fixed.
+   *
+   * @see <a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6533203">
+   *     Sun Java Bug 6533203</a>
+   */
+  public void stopTestingWhenAddThrowsException() {
+    whenAddThrowsExceptionStopTesting = true;
+  }
+
+  private Stimulus<E, ? super I>[] stimuli;
+  private final Iterator<E> elementsToInsert;
+  private final Set<IteratorFeature> features;
+  private final List<E> expectedElements;
+  private final int startIndex;
+  private final KnownOrder knownOrder;
+
+  /**
+   * Meta-exception thrown by
+   * {@link AbstractIteratorTester.MultiExceptionListIterator} instead of
+   * throwing any particular exception type.
+   */
+  // This class is accessible but not supported in GWT.
+  private static final class PermittedMetaException extends RuntimeException {
+    final Set<? extends Class<? extends RuntimeException>> exceptionClasses;
+
+    PermittedMetaException(
+        Set<? extends Class<? extends RuntimeException>> exceptionClasses) {
+      super("one of " + exceptionClasses);
+      this.exceptionClasses = exceptionClasses;
+    }
+
+    PermittedMetaException(Class<? extends RuntimeException> exceptionClass) {
+      this(Collections.singleton(exceptionClass));
+    }
+
+    // It's not supported In GWT, it always returns true.
+    boolean isPermitted(RuntimeException exception) {
+      for (Class<? extends RuntimeException> clazz : exceptionClasses) {
+        if (Platform.checkIsInstance(clazz, exception)) {
+          return true;
+        }
+      }
+      return false;
+    }
+
+    // It's not supported in GWT, it always passes.
+    void assertPermitted(RuntimeException exception) {
+      if (!isPermitted(exception)) {
+        // TODO: use simple class names
+        String message = "Exception " + exception.getClass()
+            + " was thrown; expected " + this;
+        Helpers.fail(exception, message);
+      }
+    }
+
+    @Override public String toString() {
+      return getMessage();
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  private static final class UnknownElementException extends RuntimeException {
+    private UnknownElementException(Collection<?> expected, Object actual) {
+      super("Returned value '"
+          + actual + "' not found. Remaining elements: " + expected);
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  /**
+   * Quasi-implementation of {@link ListIterator} that works from a list of
+   * elements and a set of features to support (from the enclosing
+   * {@link AbstractIteratorTester} instance). Instead of throwing exceptions
+   * like {@link NoSuchElementException} at the appropriate times, it throws
+   * {@link PermittedMetaException} instances, which wrap a set of all
+   * exceptions that the iterator could throw during the invocation of that
+   * method. This is necessary because, e.g., a call to
+   * {@code iterator().remove()} of an unmodifiable list could throw either
+   * {@link IllegalStateException} or {@link UnsupportedOperationException}.
+   * Note that iterator implementations should always throw one of the
+   * exceptions in a {@code PermittedExceptions} instance, since
+   * {@code PermittedExceptions} is thrown only when a method call is invalid.
+   *
+   * <p>This class is accessible but not supported in GWT as it references
+   * {@link PermittedMetaException}.
+   */
+  protected final class MultiExceptionListIterator implements ListIterator<E> {
+    // TODO: track seen elements when order isn't guaranteed
+    // TODO: verify contents afterward
+    // TODO: something shiny and new instead of Stack
+    // TODO: test whether null is supported (create a Feature)
+    /**
+     * The elements to be returned by future calls to {@code next()}, with the
+     * first at the top of the stack.
+     */
+    final Stack<E> nextElements = new Stack<E>();
+    /**
+     * The elements to be returned by future calls to {@code previous()}, with
+     * the first at the top of the stack.
+     */
+    final Stack<E> previousElements = new Stack<E>();
+    /**
+     * {@link #nextElements} if {@code next()} was called more recently then
+     * {@code previous}, {@link #previousElements} if the reverse is true, or --
+     * overriding both of these -- {@code null} if {@code remove()} or
+     * {@code add()} has been called more recently than either. We use this to
+     * determine which stack to pop from on a call to {@code remove()} (or to
+     * pop from and push to on a call to {@code set()}.
+     */
+    Stack<E> stackWithLastReturnedElementAtTop = null;
+
+    MultiExceptionListIterator(List<E> expectedElements) {
+      Helpers.addAll(nextElements, Helpers.reverse(expectedElements));
+      for (int i = 0; i < startIndex; i++) {
+        previousElements.push(nextElements.pop());
+      }
+    }
+
+    @Override
+    public void add(E e) {
+      if (!features.contains(IteratorFeature.SUPPORTS_ADD)) {
+        throw new PermittedMetaException(UnsupportedOperationException.class);
+      }
+
+      previousElements.push(e);
+      stackWithLastReturnedElementAtTop = null;
+    }
+
+    @Override
+    public boolean hasNext() {
+      return !nextElements.isEmpty();
+    }
+
+    @Override
+    public boolean hasPrevious() {
+      return !previousElements.isEmpty();
+    }
+
+    @Override
+    public E next() {
+      return transferElement(nextElements, previousElements);
+    }
+
+    @Override
+    public int nextIndex() {
+      return previousElements.size();
+    }
+
+    @Override
+    public E previous() {
+      return transferElement(previousElements, nextElements);
+    }
+
+    @Override
+    public int previousIndex() {
+      return nextIndex() - 1;
+    }
+
+    @Override
+    public void remove() {
+      throwIfInvalid(IteratorFeature.SUPPORTS_REMOVE);
+
+      stackWithLastReturnedElementAtTop.pop();
+      stackWithLastReturnedElementAtTop = null;
+    }
+
+    @Override
+    public void set(E e) {
+      throwIfInvalid(IteratorFeature.SUPPORTS_SET);
+
+      stackWithLastReturnedElementAtTop.pop();
+      stackWithLastReturnedElementAtTop.push(e);
+    }
+
+    /**
+     * Moves the given element from its current position in
+     * {@link #nextElements} to the top of the stack so that it is returned by
+     * the next call to {@link Iterator#next()}. If the element is not in
+     * {@link #nextElements}, this method throws an
+     * {@link UnknownElementException}.
+     *
+     * <p>This method is used when testing iterators without a known ordering.
+     * We poll the target iterator's next element and pass it to the reference
+     * iterator through this method so it can return the same element. This
+     * enables the assertion to pass and the reference iterator to properly
+     * update its state.
+     */
+    void promoteToNext(E e) {
+      if (nextElements.remove(e)) {
+        nextElements.push(e);
+      } else {
+        throw new UnknownElementException(nextElements, e);
+      }
+    }
+
+    private E transferElement(Stack<E> source, Stack<E> destination) {
+      if (source.isEmpty()) {
+        throw new PermittedMetaException(NoSuchElementException.class);
+      }
+
+      destination.push(source.pop());
+      stackWithLastReturnedElementAtTop = destination;
+      return destination.peek();
+    }
+
+    private void throwIfInvalid(IteratorFeature methodFeature) {
+      Set<Class<? extends RuntimeException>> exceptions
+          = new HashSet<Class<? extends RuntimeException>>();
+
+      if (!features.contains(methodFeature)) {
+        exceptions.add(UnsupportedOperationException.class);
+      }
+
+      if (stackWithLastReturnedElementAtTop == null) {
+        exceptions.add(IllegalStateException.class);
+      }
+
+      if (!exceptions.isEmpty()) {
+        throw new PermittedMetaException(exceptions);
+      }
+    }
+
+    private List<E> getElements() {
+      List<E> elements = new ArrayList<E>();
+      Helpers.addAll(elements, previousElements);
+      Helpers.addAll(elements, Helpers.reverse(nextElements));
+      return elements;
+    }
+  }
+
+  public enum KnownOrder { KNOWN_ORDER, UNKNOWN_ORDER }
+
+  @SuppressWarnings("unchecked") // creating array of generic class Stimulus
+  AbstractIteratorTester(int steps, Iterable<E> elementsToInsertIterable,
+      Iterable<? extends IteratorFeature> features,
+      Iterable<E> expectedElements, KnownOrder knownOrder, int startIndex) {
+    // periodically we should manually try (steps * 3 / 2) here; all tests but
+    // one should still pass (testVerifyGetsCalled()).
+    stimuli = new Stimulus[steps];
+    if (!elementsToInsertIterable.iterator().hasNext()) {
+      throw new IllegalArgumentException();
+    }
+    elementsToInsert = Helpers.cycle(elementsToInsertIterable);
+    this.features = Helpers.copyToSet(features);
+    this.expectedElements = Helpers.copyToList(expectedElements);
+    this.knownOrder = knownOrder;
+    this.startIndex = startIndex;
+  }
+
+  /**
+   * I'd like to make this a parameter to the constructor, but I can't because
+   * the stimulus instances refer to {@code this}.
+   */
+  protected abstract Iterable<? extends Stimulus<E, ? super I>>
+      getStimulusValues();
+
+  /**
+   * Returns a new target iterator each time it's called. This is the iterator
+   * you are trying to test. This must return an Iterator that returns the
+   * expected elements passed to the constructor in the given order. Warning: it
+   * is not enough to simply pull multiple iterators from the same source
+   * Iterable, unless that Iterator is unmodifiable.
+   */
+  protected abstract I newTargetIterator();
+
+  /**
+   * Override this to verify anything after running a list of Stimuli.
+   *
+   * <p>For example, verify that calls to remove() actually removed
+   * the correct elements.
+   *
+   * @param elements the expected elements passed to the constructor, as mutated
+   *     by {@code remove()}, {@code set()}, and {@code add()} calls
+   */
+  protected void verify(List<E> elements) {}
+
+  /**
+   * Executes the test.
+   */
+  public final void test() {
+    try {
+      recurse(0);
+    } catch (RuntimeException e) {
+      throw new RuntimeException(Arrays.toString(stimuli), e);
+    }
+  }
+
+  private void recurse(int level) {
+    // We're going to reuse the stimuli array 3^steps times by overwriting it
+    // in a recursive loop.  Sneaky.
+    if (level == stimuli.length) {
+      // We've filled the array.
+      compareResultsForThisListOfStimuli();
+    } else {
+      // Keep recursing to fill the array.
+      for (Stimulus<E, ? super I> stimulus : getStimulusValues()) {
+        stimuli[level] = stimulus;
+        recurse(level + 1);
+      }
+    }
+  }
+
+  private void compareResultsForThisListOfStimuli() {
+    MultiExceptionListIterator reference =
+        new MultiExceptionListIterator(expectedElements);
+    I target = newTargetIterator();
+    boolean shouldStopTestingCallsToRemove = false;
+    for (int i = 0; i < stimuli.length; i++) {
+      Stimulus<E, ? super I> stimulus = stimuli[i];
+      if (stimulus.equals(remove) && shouldStopTestingCallsToRemove) {
+        break;
+      }
+      try {
+        boolean threwException = stimulus.executeAndCompare(reference, target);
+        if (threwException
+            && stimulus.equals(next)
+            && whenNextThrowsExceptionStopTestingCallsToRemove) {
+          shouldStopTestingCallsToRemove = true;
+        }
+        if (threwException
+            && stimulus.equals(add)
+            && whenAddThrowsExceptionStopTesting) {
+          break;
+        }
+        List<E> elements = reference.getElements();
+        verify(elements);
+      } catch (AssertionFailedError cause) {
+        Helpers.fail(cause,
+            "failed with stimuli " + subListCopy(stimuli, i + 1));
+      }
+    }
+  }
+
+  private static List<Object> subListCopy(Object[] source, int size) {
+    final Object[] copy = new Object[size];
+    Platform.unsafeArrayCopy(source, 0, copy, 0, size);
+    return Arrays.asList(copy);
+  }
+
+  private interface IteratorOperation {
+    Object execute(Iterator<?> iterator);
+  }
+
+  /**
+   * Apply this method to both iterators and return normally only if both
+   * produce the same response.
+   *
+   * @return {@code true} if an exception was thrown by the iterators.
+   *
+   * @see Stimulus#executeAndCompare(ListIterator, Iterator)
+   */
+  private <T extends Iterator<E>> boolean internalExecuteAndCompare(
+      T reference, T target, IteratorOperation method)
+      throws AssertionFailedError {
+
+    Object referenceReturnValue = null;
+    PermittedMetaException referenceException = null;
+    Object targetReturnValue = null;
+    RuntimeException targetException = null;
+
+    try {
+      targetReturnValue = method.execute(target);
+    } catch (RuntimeException e) {
+      targetException = e;
+    }
+
+    try {
+      if (method == NEXT_METHOD && targetException == null
+          && knownOrder == KnownOrder.UNKNOWN_ORDER) {
+        /*
+         * We already know the iterator is an Iterator<E>, and now we know that
+         * we called next(), so the returned element must be of type E.
+         */
+        @SuppressWarnings("unchecked")
+        E targetReturnValueFromNext = (E) targetReturnValue;
+        /*
+         * We have an Iterator<E> and want to cast it to
+         * MultiExceptionListIterator. Because we're inside an
+         * AbstractIteratorTester<E>, that's implicitly a cast to
+         * AbstractIteratorTester<E>.MultiExceptionListIterator. The runtime
+         * won't be able to verify the AbstractIteratorTester<E> part, so it's
+         * an unchecked cast. We know, however, that the only possible value for
+         * the type parameter is <E>, since otherwise the
+         * MultiExceptionListIterator wouldn't be an Iterator<E>. The cast is
+         * safe, even though javac can't tell.
+         *
+         * Sun bug 6665356 is an additional complication. Until OpenJDK 7, javac
+         * doesn't recognize this kind of cast as unchecked cast. Neither does
+         * Eclipse 3.4. Right now, this suppression is mostly unecessary.
+         */
+        MultiExceptionListIterator multiExceptionListIterator =
+            (MultiExceptionListIterator) reference;
+        multiExceptionListIterator.promoteToNext(targetReturnValueFromNext);
+      }
+
+      referenceReturnValue = method.execute(reference);
+    } catch (PermittedMetaException e) {
+      referenceException = e;
+    } catch (UnknownElementException e) {
+      Helpers.fail(e, e.getMessage());
+    }
+
+    if (referenceException == null) {
+      if (targetException != null) {
+        Helpers.fail(targetException,
+            "Target threw exception when reference did not");
+      }
+
+      /*
+       * Reference iterator returned a value, so we should expect the
+       * same value from the target
+       */
+      assertEquals(referenceReturnValue, targetReturnValue);
+
+      return false;
+    }
+
+    if (targetException == null) {
+      fail("Target failed to throw " + referenceException);
+    }
+
+    /*
+     * Reference iterator threw an exception, so we should expect an acceptable
+     * exception from the target.
+     */
+    referenceException.assertPermitted(targetException);
+
+    return true;
+  }
+
+  private static final IteratorOperation REMOVE_METHOD =
+      new IteratorOperation() {
+        @Override
+        public Object execute(Iterator<?> iterator) {
+          iterator.remove();
+          return null;
+        }
+      };
+
+  private static final IteratorOperation NEXT_METHOD =
+      new IteratorOperation() {
+        @Override
+        public Object execute(Iterator<?> iterator) {
+          return iterator.next();
+        }
+      };
+
+  private static final IteratorOperation PREVIOUS_METHOD =
+      new IteratorOperation() {
+        @Override
+        public Object execute(Iterator<?> iterator) {
+          return ((ListIterator<?>) iterator).previous();
+        }
+      };
+
+  private final IteratorOperation newAddMethod() {
+    final Object toInsert = elementsToInsert.next();
+    return new IteratorOperation() {
+      @Override
+      public Object execute(Iterator<?> iterator) {
+        @SuppressWarnings("unchecked")
+        ListIterator<Object> rawIterator = (ListIterator<Object>) iterator;
+        rawIterator.add(toInsert);
+        return null;
+      }
+    };
+  }
+
+  private final IteratorOperation newSetMethod() {
+    final E toInsert = elementsToInsert.next();
+    return new IteratorOperation() {
+      @Override
+      public Object execute(Iterator<?> iterator) {
+        @SuppressWarnings("unchecked")
+        ListIterator<E> li = (ListIterator<E>) iterator;
+        li.set(toInsert);
+        return null;
+      }
+    };
+  }
+
+  abstract static class Stimulus<E, T extends Iterator<E>> {
+    private final String toString;
+
+    protected Stimulus(String toString) {
+      this.toString = toString;
+    }
+
+    /**
+     * Send this stimulus to both iterators and return normally only if both
+     * produce the same response.
+     *
+     * @return {@code true} if an exception was thrown by the iterators.
+     */
+    abstract boolean executeAndCompare(ListIterator<E> reference, T target);
+
+    @Override public String toString() {
+      return toString;
+    }
+  }
+
+  Stimulus<E, Iterator<E>> hasNext = new Stimulus<E, Iterator<E>>("hasNext") {
+    @Override boolean
+        executeAndCompare(ListIterator<E> reference, Iterator<E> target) {
+      // return only if both are true or both are false
+      assertEquals(reference.hasNext(), target.hasNext());
+      return false;
+    }
+  };
+  Stimulus<E, Iterator<E>> next = new Stimulus<E, Iterator<E>>("next") {
+    @Override boolean
+        executeAndCompare(ListIterator<E> reference, Iterator<E> target) {
+      return internalExecuteAndCompare(reference, target, NEXT_METHOD);
+    }
+  };
+  Stimulus<E, Iterator<E>> remove = new Stimulus<E, Iterator<E>>("remove") {
+    @Override boolean
+        executeAndCompare(ListIterator<E> reference, Iterator<E> target) {
+      return internalExecuteAndCompare(reference, target, REMOVE_METHOD);
+    }
+  };
+
+  @SuppressWarnings("unchecked")
+  List<Stimulus<E, Iterator<E>>> iteratorStimuli() {
+    return Arrays.asList(hasNext, next, remove);
+  }
+
+  Stimulus<E, ListIterator<E>> hasPrevious =
+      new Stimulus<E, ListIterator<E>>("hasPrevious") {
+        @Override boolean executeAndCompare(
+            ListIterator<E> reference, ListIterator<E> target) {
+          // return only if both are true or both are false
+          assertEquals(reference.hasPrevious(), target.hasPrevious());
+          return false;
+        }
+      };
+  Stimulus<E, ListIterator<E>> nextIndex =
+      new Stimulus<E, ListIterator<E>>("nextIndex") {
+        @Override boolean executeAndCompare(
+            ListIterator<E> reference, ListIterator<E> target) {
+          assertEquals(reference.nextIndex(), target.nextIndex());
+          return false;
+        }
+      };
+  Stimulus<E, ListIterator<E>> previousIndex =
+      new Stimulus<E, ListIterator<E>>("previousIndex") {
+        @Override boolean executeAndCompare(
+            ListIterator<E> reference, ListIterator<E> target) {
+          assertEquals(reference.previousIndex(), target.previousIndex());
+          return false;
+        }
+      };
+  Stimulus<E, ListIterator<E>> previous =
+      new Stimulus<E, ListIterator<E>>("previous") {
+        @Override boolean executeAndCompare(
+            ListIterator<E> reference, ListIterator<E> target) {
+          return internalExecuteAndCompare(reference, target, PREVIOUS_METHOD);
+        }
+      };
+  Stimulus<E, ListIterator<E>> add = new Stimulus<E, ListIterator<E>>("add") {
+    @Override boolean executeAndCompare(
+        ListIterator<E> reference, ListIterator<E> target) {
+      return internalExecuteAndCompare(reference, target, newAddMethod());
+    }
+  };
+  Stimulus<E, ListIterator<E>> set = new Stimulus<E, ListIterator<E>>("set") {
+    @Override boolean executeAndCompare(
+        ListIterator<E> reference, ListIterator<E> target) {
+      return internalExecuteAndCompare(reference, target, newSetMethod());
+    }
+  };
+
+  @SuppressWarnings("unchecked")
+  List<Stimulus<E, ListIterator<E>>> listIteratorStimuli() {
+    return Arrays.asList(
+        hasPrevious, nextIndex, previousIndex, previous, add, set);
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/AbstractMapTester.java b/guava-testlib/src/com/google/common/collect/testing/AbstractMapTester.java
new file mode 100644
index 0000000..c8c3169
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/AbstractMapTester.java
@@ -0,0 +1,229 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Map;
+import java.util.Map.Entry;
+
+/**
+ * Base class for map testers.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * TODO: see how much of this is actually needed once Map testers are written.
+ * (It was cloned from AbstractCollectionTester.)
+ *
+ * @param <K> the key type of the map to be tested.
+ * @param <V> the value type of the map to be tested.
+ *
+ * @author George van den Driessche
+ */
+public abstract class AbstractMapTester<K, V> extends
+    AbstractContainerTester<Map<K, V>, Map.Entry<K, V>> {
+  protected Map<K, V> getMap() {
+    return container;
+  }
+
+  @Override public void setUp() throws Exception {
+    super.setUp();
+    samples = this.getSubjectGenerator().samples();
+    resetMap();
+  }
+
+  @Override protected Collection<Map.Entry<K, V>> actualContents() {
+    return getMap().entrySet();
+  }
+
+  /** @see AbstractContainerTester#resetContainer() */
+  protected void resetMap() {
+    resetContainer();
+  }
+
+  protected void expectMissingKeys(K... elements) {
+    for (K element : elements) {
+      assertFalse("Should not contain key " + element,
+          getMap().containsKey(element));
+    }
+  }
+
+  protected void expectMissingValues(V... elements) {
+    for (V element : elements) {
+      assertFalse("Should not contain value " + element,
+          getMap().containsValue(element));
+    }
+  }
+
+  /**
+   * @return an array of the proper size with {@code null} as the key of the
+   * middle element.
+   */
+  protected Map.Entry<K, V>[] createArrayWithNullKey() {
+    Map.Entry<K, V>[] array = createSamplesArray();
+    final int nullKeyLocation = getNullLocation();
+    final Map.Entry<K, V> oldEntry = array[nullKeyLocation];
+    array[nullKeyLocation] = entry(null, oldEntry.getValue());
+    return array;
+  }
+
+  protected V getValueForNullKey() {
+    return getEntryNullReplaces().getValue();
+  }
+
+  protected K getKeyForNullValue() {
+    return getEntryNullReplaces().getKey();
+  }
+
+  private Entry<K, V> getEntryNullReplaces() {
+    Iterator<Entry<K, V>> entries = getSampleElements().iterator();
+    for (int i = 0; i < getNullLocation(); i++) {
+      entries.next();
+    }
+    return entries.next();
+  }
+
+  /**
+   * @return an array of the proper size with {@code null} as the value of the
+   * middle element.
+   */
+  protected Map.Entry<K, V>[] createArrayWithNullValue() {
+    Map.Entry<K, V>[] array = createSamplesArray();
+    final int nullValueLocation = getNullLocation();
+    final Map.Entry<K, V> oldEntry = array[nullValueLocation];
+    array[nullValueLocation] = entry(oldEntry.getKey(), null);
+    return array;
+  }
+
+  protected void initMapWithNullKey() {
+    resetMap(createArrayWithNullKey());
+  }
+
+  protected void initMapWithNullValue() {
+    resetMap(createArrayWithNullValue());
+  }
+
+  /**
+   * Equivalent to {@link #expectMissingKeys(Object[]) expectMissingKeys}
+   * {@code (null)}
+   * except that the call to {@code contains(null)} is permitted to throw a
+   * {@code NullPointerException}.
+   * @param message message to use upon assertion failure
+   */
+  protected void expectNullKeyMissingWhenNullKeysUnsupported(String message) {
+    try {
+      assertFalse(message, getMap().containsKey(null));
+    } catch (NullPointerException tolerated) {
+      // Tolerated
+    }
+  }
+
+  /**
+   * Equivalent to {@link #expectMissingValues(Object[]) expectMissingValues}
+   * {@code (null)}
+   * except that the call to {@code contains(null)} is permitted to throw a
+   * {@code NullPointerException}.
+   * @param message message to use upon assertion failure
+   */
+  protected void expectNullValueMissingWhenNullValuesUnsupported(
+      String message) {
+    try {
+      assertFalse(message, getMap().containsValue(null));
+    } catch (NullPointerException tolerated) {
+      // Tolerated
+    }
+  }
+
+  @SuppressWarnings("unchecked")
+  @Override protected MinimalCollection<Map.Entry<K, V>>
+      createDisjointCollection() {
+    return MinimalCollection.of(samples.e3, samples.e4);
+  }
+
+  protected int getNumEntries() {
+    return getNumElements();
+  }
+
+  protected Collection<Map.Entry<K, V>> getSampleEntries(int howMany) {
+    return getSampleElements(howMany);
+  }
+
+  protected Collection<Map.Entry<K, V>> getSampleEntries() {
+    return getSampleElements();
+  }
+
+  @Override protected void expectMissing(Entry<K, V>... entries) {
+    for (Entry<K, V> entry : entries) {
+      assertFalse("Should not contain entry " + entry,
+          actualContents().contains(entry));
+      assertFalse("Should not contain key " + entry.getKey(),
+          getMap().containsKey(entry.getKey()));
+      assertFalse("Should not contain value " + entry.getValue(),
+          getMap().containsValue(entry.getValue()));
+      assertNull("Should not return a mapping for key " + entry.getKey(),
+          getMap().get(entry.getKey()));
+    }
+  }
+
+  // This one-liner saves us from some ugly casts
+  protected Entry<K, V> entry(K key, V value) {
+    return Helpers.mapEntry(key, value);
+  }
+
+  @Override protected void expectContents(Collection<Entry<K, V>> expected) {
+    // TODO: move this to invariant checks once the appropriate hook exists?
+    super.expectContents(expected);
+    for (Entry<K, V> entry : expected) {
+      assertEquals("Wrong value for key " + entry.getKey(),
+          entry.getValue(), getMap().get(entry.getKey()));
+    }
+  }
+
+  protected final void expectReplacement(Entry<K, V> newEntry) {
+    List<Entry<K, V>> expected = Helpers.copyToList(getSampleElements());
+    replaceValue(expected, newEntry);
+    expectContents(expected);
+  }
+
+  private void replaceValue(List<Entry<K, V>> expected, Entry<K, V> newEntry) {
+    for (ListIterator<Entry<K, V>> i = expected.listIterator(); i.hasNext();) {
+      if (Helpers.equal(i.next().getKey(), newEntry.getKey())) {
+        i.set(newEntry);
+        return;
+      }
+    }
+
+    throw new IllegalArgumentException(Platform.format(
+        "key %s not found in entries %s", newEntry.getKey(), expected));
+  }
+
+  /**
+   * Wrapper for {@link Map#get(Object)} that forces the caller to pass in a key
+   * of the same type as the map. Besides being slightly shorter than code that
+   * uses {@link #getMap()}, it also ensures that callers don't pass an
+   * {@link Entry} by mistake.
+   */
+  protected V get(K key) {
+    return getMap().get(key);
+  }
+
+  protected void resetMap(Entry<K, V>[] entries) {
+    resetContainer(getSubjectGenerator().create((Object[]) entries));
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/AbstractTester.java b/guava-testlib/src/com/google/common/collect/testing/AbstractTester.java
new file mode 100644
index 0000000..c141fb4
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/AbstractTester.java
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+import junit.framework.TestCase;
+
+/**
+ * This abstract base class for testers allows the framework to inject needed
+ * information after JUnit constructs the instances.
+ *
+ * <p>This class is emulated in GWT.
+ *
+ * @param <G> the type of the test generator required by this tester. An
+ * instance of G should somehow provide an instance of the class under test,
+ * plus any other information required to parameterize the test.
+ *
+ * @author George van den Driessche
+ */
+public class AbstractTester<G> extends TestCase {
+  private G subjectGenerator;
+  private String suiteName;
+  private Runnable setUp;
+  private Runnable tearDown;
+
+  // public so that it can be referenced in generated GWT tests.
+  @Override public void setUp() throws Exception {
+    if (setUp != null) {
+      setUp.run();
+    }
+  }
+
+  // public so that it can be referenced in generated GWT tests.
+  @Override public void tearDown() throws Exception {
+    if (tearDown != null) {
+      tearDown.run();
+    }
+  }
+
+  // public so that it can be referenced in generated GWT tests.
+  public final void init(
+      G subjectGenerator, String suiteName, Runnable setUp, Runnable tearDown) {
+    this.subjectGenerator = subjectGenerator;
+    this.suiteName = suiteName;
+    this.setUp = setUp;
+    this.tearDown = tearDown;
+  }
+
+  // public so that it can be referenced in generated GWT tests.
+  public final void init(G subjectGenerator, String suiteName) {
+    init(subjectGenerator, suiteName, null, null);
+  }
+
+  public G getSubjectGenerator() {
+    return subjectGenerator;
+  }
+
+  /** Returns the name of the test method invoked by this test instance. */
+  public final String getTestMethodName() {
+    return super.getName();
+  }
+
+  @Override public String getName() {
+    return Platform.format("%s[%s]", super.getName(), suiteName);
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/AnEnum.java b/guava-testlib/src/com/google/common/collect/testing/AnEnum.java
new file mode 100644
index 0000000..3fc1ae3
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/AnEnum.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+/**
+ * A sample enumerated type we use for testing.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Kevin Bourrillion
+ */
+public enum AnEnum {
+  A, B, C, D, E, F
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/BaseComparable.java b/guava-testlib/src/com/google/common/collect/testing/BaseComparable.java
new file mode 100644
index 0000000..93f449c
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/BaseComparable.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+import java.io.Serializable;
+
+/**
+ * Simple base class to verify that we handle generics correctly.
+ * 
+ * @author Kevin Bourrillion
+ */
+public class BaseComparable implements Comparable<BaseComparable>, Serializable {
+  private final String s;
+
+  public BaseComparable(String s) {
+    this.s = s;
+  }
+
+  @Override public int hashCode() { // delegate to 's'
+    return s.hashCode();
+  }
+
+  @Override public boolean equals(Object other) {
+    if (other == null) {
+      return false;
+    } else if (other instanceof BaseComparable) {
+      return s.equals(((BaseComparable) other).s);
+    } else {
+      return false;
+    }
+  }
+
+  @Override
+  public int compareTo(BaseComparable o) {
+    return s.compareTo(o.s);
+  }
+
+  private static final long serialVersionUID = 0;
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/CollectionTestSuiteBuilder.java b/guava-testlib/src/com/google/common/collect/testing/CollectionTestSuiteBuilder.java
new file mode 100644
index 0000000..e05a700
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/CollectionTestSuiteBuilder.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+/**
+ * Concrete instantiation of {@link AbstractCollectionTestSuiteBuilder} for
+ * testing collections that do not have a more specific tester like
+ * {@link ListTestSuiteBuilder} or {@link SetTestSuiteBuilder}.
+ *
+ * @author Chris Povirk
+ */
+public class CollectionTestSuiteBuilder<E>
+    extends AbstractCollectionTestSuiteBuilder<
+        CollectionTestSuiteBuilder<E>, E> {
+  public static <E> CollectionTestSuiteBuilder<E> using(
+      TestCollectionGenerator<E> generator) {
+    return new CollectionTestSuiteBuilder<E>().usingGenerator(generator);
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/ConcurrentMapInterfaceTest.java b/guava-testlib/src/com/google/common/collect/testing/ConcurrentMapInterfaceTest.java
new file mode 100644
index 0000000..4ad4230
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/ConcurrentMapInterfaceTest.java
@@ -0,0 +1,842 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+import java.util.concurrent.ConcurrentMap;
+
+/**
+ * Tests representing the contract of {@link ConcurrentMap}. Concrete
+ * subclasses of this base class test conformance of concrete
+ * {@link ConcurrentMap} subclasses to that contract.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * <p>The tests in this class for null keys and values only check maps for
+ * which null keys and values are not allowed. There are currently no
+ * {@link ConcurrentMap} implementations that support nulls.
+ *
+ * @author Jared Levy
+ */
+public abstract class ConcurrentMapInterfaceTest<K, V>
+    extends MapInterfaceTest<K, V> {
+
+  protected ConcurrentMapInterfaceTest(boolean allowsNullKeys,
+      boolean allowsNullValues, boolean supportsPut, boolean supportsRemove,
+      boolean supportsClear) {
+    super(allowsNullKeys, allowsNullValues, supportsPut, supportsRemove,
+        supportsClear);
+  }
+
+  /**
+   * Creates a new value that is not expected to be found in
+   * {@link #makePopulatedMap()} and differs from the value returned by
+   * {@link #getValueNotInPopulatedMap()}.
+   *
+   * @return a value
+   * @throws UnsupportedOperationException if it's not possible to make a value
+   * that will not be found in the map
+   */
+  protected abstract V getSecondValueNotInPopulatedMap()
+      throws UnsupportedOperationException;
+
+  @Override protected abstract ConcurrentMap<K, V> makeEmptyMap()
+      throws UnsupportedOperationException;
+
+  @Override protected abstract ConcurrentMap<K, V> makePopulatedMap()
+      throws UnsupportedOperationException;
+
+  @Override protected ConcurrentMap<K, V> makeEitherMap() {
+    try {
+      return makePopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return makeEmptyMap();
+    }
+  }
+
+  public void testPutIfAbsentNewKey() {
+    final ConcurrentMap<K, V> map;
+    final K keyToPut;
+    final V valueToPut;
+    try {
+      map = makeEitherMap();
+      keyToPut = getKeyNotInPopulatedMap();
+      valueToPut = getValueNotInPopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    if (supportsPut) {
+      int initialSize = map.size();
+      V oldValue = map.putIfAbsent(keyToPut, valueToPut);
+      assertEquals(valueToPut, map.get(keyToPut));
+      assertTrue(map.containsKey(keyToPut));
+      assertTrue(map.containsValue(valueToPut));
+      assertEquals(initialSize + 1, map.size());
+      assertNull(oldValue);
+    } else {
+      try {
+        map.putIfAbsent(keyToPut, valueToPut);
+        fail("Expected UnsupportedOperationException.");
+      } catch (UnsupportedOperationException e) {
+        // Expected.
+      }
+    }
+    assertInvariants(map);
+  }
+
+  public void testPutIfAbsentExistingKey() {
+    final ConcurrentMap<K, V> map;
+    final K keyToPut;
+    final V valueToPut;
+    try {
+      map = makePopulatedMap();
+      valueToPut = getValueNotInPopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    keyToPut = map.keySet().iterator().next();
+    if (supportsPut) {
+      V oldValue = map.get(keyToPut);
+      int initialSize = map.size();
+      assertEquals(oldValue, map.putIfAbsent(keyToPut, valueToPut));
+      assertEquals(oldValue, map.get(keyToPut));
+      assertTrue(map.containsKey(keyToPut));
+      assertTrue(map.containsValue(oldValue));
+      assertFalse(map.containsValue(valueToPut));
+      assertEquals(initialSize, map.size());
+    } else {
+      try {
+        map.putIfAbsent(keyToPut, valueToPut);
+        fail("Expected UnsupportedOperationException.");
+      } catch (UnsupportedOperationException e) {
+        // Expected.
+      }
+    }
+    assertInvariants(map);
+  }
+
+  public void testPutIfAbsentNullKey() {
+    if (allowsNullKeys) {
+      return;   // Not yet implemented
+    }
+    final ConcurrentMap<K, V> map;
+    final V valueToPut;
+    try {
+      map = makeEitherMap();
+      valueToPut = getValueNotInPopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    int initialSize = map.size();
+    if (supportsPut) {
+      try {
+        map.putIfAbsent(null, valueToPut);
+        fail("Expected NullPointerException");
+      } catch (NullPointerException e) {
+        // Expected.
+      }
+    } else {
+      try {
+        map.putIfAbsent(null, valueToPut);
+        fail("Expected UnsupportedOperationException or NullPointerException");
+      } catch (UnsupportedOperationException e) {
+        // Expected.
+      } catch (NullPointerException e) {
+        // Expected.
+      }
+    }
+    assertEquals(initialSize, map.size());
+    assertInvariants(map);
+  }
+
+  public void testPutIfAbsentNewKeyNullValue() {
+    if (allowsNullValues) {
+      return;   // Not yet implemented
+    }
+    final ConcurrentMap<K, V> map;
+    final K keyToPut;
+    try {
+      map = makeEitherMap();
+      keyToPut = getKeyNotInPopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    int initialSize = map.size();
+    if (supportsPut) {
+      try {
+        map.putIfAbsent(keyToPut, null);
+        fail("Expected NullPointerException");
+      } catch (NullPointerException e) {
+        // Expected.
+      }
+    } else {
+      try {
+        map.putIfAbsent(keyToPut, null);
+        fail("Expected UnsupportedOperationException or NullPointerException");
+      } catch (UnsupportedOperationException e) {
+        // Expected.
+      } catch (NullPointerException e) {
+        // Expected.
+      }
+    }
+    assertEquals(initialSize, map.size());
+    assertInvariants(map);
+  }
+
+  public void testPutIfAbsentExistingKeyNullValue() {
+    if (allowsNullValues) {
+      return;   // Not yet implemented
+    }
+    final ConcurrentMap<K, V> map;
+    final K keyToPut;
+    try {
+      map = makePopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    keyToPut = map.keySet().iterator().next();
+    int initialSize = map.size();
+    if (supportsPut) {
+      try {
+        assertNull(map.putIfAbsent(keyToPut, null));
+      } catch (NullPointerException e) {
+        // Optional.
+      }
+    } else {
+      try {
+        map.putIfAbsent(keyToPut, null);
+        fail("Expected UnsupportedOperationException or NullPointerException");
+      } catch (UnsupportedOperationException e) {
+        // Expected.
+      } catch (NullPointerException e) {
+        // Expected.
+      }
+    }
+    assertEquals(initialSize, map.size());
+    assertInvariants(map);
+  }
+
+  public void testRemoveKeyValueExisting() {
+    final ConcurrentMap<K, V> map;
+    final K keyToRemove;
+    try {
+      map = makePopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    keyToRemove = map.keySet().iterator().next();
+    V oldValue = map.get(keyToRemove);
+    if (supportsRemove) {
+      int initialSize = map.size();
+      assertTrue(map.remove(keyToRemove, oldValue));
+      assertFalse(map.containsKey(keyToRemove));
+      assertEquals(initialSize - 1, map.size());
+    } else {
+      try {
+        map.remove(keyToRemove, oldValue);
+        fail("Expected UnsupportedOperationException.");
+      } catch (UnsupportedOperationException e) {
+        // Expected.
+      }
+    }
+    assertInvariants(map);
+  }
+
+  public void testRemoveKeyValueMissingKey() {
+    final ConcurrentMap<K, V> map;
+    final K keyToRemove;
+    final V valueToRemove;
+    try {
+      map = makePopulatedMap();
+      keyToRemove = getKeyNotInPopulatedMap();
+      valueToRemove = getValueNotInPopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    if (supportsRemove) {
+      int initialSize = map.size();
+      assertFalse(map.remove(keyToRemove, valueToRemove));
+      assertEquals(initialSize, map.size());
+    } else {
+      try {
+        map.remove(keyToRemove, valueToRemove);
+        fail("Expected UnsupportedOperationException.");
+      } catch (UnsupportedOperationException e) {
+        // Expected.
+      }
+    }
+    assertInvariants(map);
+  }
+
+  public void testRemoveKeyValueDifferentValue() {
+    final ConcurrentMap<K, V> map;
+    final K keyToRemove;
+    final V valueToRemove;
+    try {
+      map = makePopulatedMap();
+      valueToRemove = getValueNotInPopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    keyToRemove = map.keySet().iterator().next();
+    if (supportsRemove) {
+      int initialSize = map.size();
+      V oldValue = map.get(keyToRemove);
+      assertFalse(map.remove(keyToRemove, valueToRemove));
+      assertEquals(oldValue, map.get(keyToRemove));
+      assertTrue(map.containsKey(keyToRemove));
+      assertEquals(initialSize, map.size());
+    } else {
+      try {
+        map.remove(keyToRemove, valueToRemove);
+        fail("Expected UnsupportedOperationException.");
+      } catch (UnsupportedOperationException e) {
+        // Expected.
+      }
+    }
+    assertInvariants(map);
+  }
+
+  public void testRemoveKeyValueNullKey() {
+    if (allowsNullKeys) {
+      return;   // Not yet implemented
+    }
+    final ConcurrentMap<K, V> map;
+    final V valueToRemove;
+    try {
+      map = makeEitherMap();
+      valueToRemove = getValueNotInPopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    int initialSize = map.size();
+    if (supportsRemove) {
+      try {
+        assertFalse(map.remove(null, valueToRemove));
+      } catch (NullPointerException e) {
+        // Optional.
+      }
+    } else {
+      try {
+        assertFalse(map.remove(null, valueToRemove));
+      } catch (UnsupportedOperationException e) {
+        // Optional.
+      } catch (NullPointerException e) {
+        // Optional.
+      }
+    }
+    assertEquals(initialSize, map.size());
+    assertInvariants(map);
+  }
+
+  public void testRemoveKeyValueExistingKeyNullValue() {
+    if (allowsNullValues) {
+      return;   // Not yet implemented
+    }
+    final ConcurrentMap<K, V> map;
+    final K keyToRemove;
+    try {
+      map = makePopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    keyToRemove = map.keySet().iterator().next();
+    int initialSize = map.size();
+    if (supportsRemove) {
+      try {
+        assertFalse(map.remove(keyToRemove, null));
+      } catch (NullPointerException e) {
+        // Optional.
+      }
+    } else {
+      try {
+        assertFalse(map.remove(keyToRemove, null));
+      } catch (UnsupportedOperationException e) {
+        // Optional.
+      } catch (NullPointerException e) {
+        // Optional.
+      }
+    }
+    assertEquals(initialSize, map.size());
+    assertInvariants(map);
+  }
+
+  public void testRemoveKeyValueMissingKeyNullValue() {
+    if (allowsNullValues) {
+      return;   // Not yet implemented
+    }
+    final ConcurrentMap<K, V> map;
+    final K keyToRemove;
+    try {
+      map = makeEitherMap();
+      keyToRemove = getKeyNotInPopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    int initialSize = map.size();
+    if (supportsRemove) {
+      try {
+        assertFalse(map.remove(keyToRemove, null));
+      } catch (NullPointerException e) {
+        // Optional.
+      }
+    } else {
+      try {
+        assertFalse(map.remove(keyToRemove, null));
+      } catch (UnsupportedOperationException e) {
+        // Optional.
+      } catch (NullPointerException e) {
+        // Optional.
+      }
+    }
+    assertEquals(initialSize, map.size());
+    assertInvariants(map);
+  }
+
+  /* Replace2 tests call 2-parameter replace(key, value) */
+
+  public void testReplace2ExistingKey() {
+    final ConcurrentMap<K, V> map;
+    final K keyToReplace;
+    final V newValue;
+    try {
+      map = makePopulatedMap();
+      newValue = getValueNotInPopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    keyToReplace = map.keySet().iterator().next();
+    if (supportsPut) {
+      V oldValue = map.get(keyToReplace);
+      int initialSize = map.size();
+      assertEquals(oldValue, map.replace(keyToReplace, newValue));
+      assertEquals(newValue, map.get(keyToReplace));
+      assertTrue(map.containsKey(keyToReplace));
+      assertTrue(map.containsValue(newValue));
+      assertEquals(initialSize, map.size());
+    } else {
+      try {
+        map.replace(keyToReplace, newValue);
+        fail("Expected UnsupportedOperationException.");
+      } catch (UnsupportedOperationException e) {
+        // Expected.
+      }
+    }
+    assertInvariants(map);
+  }
+
+  public void testReplace2MissingKey() {
+    final ConcurrentMap<K, V> map;
+    final K keyToReplace;
+    final V newValue;
+    try {
+      map = makeEitherMap();
+      keyToReplace = getKeyNotInPopulatedMap();
+      newValue = getValueNotInPopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    if (supportsPut) {
+      int initialSize = map.size();
+      assertNull(map.replace(keyToReplace, newValue));
+      assertNull(map.get(keyToReplace));
+      assertFalse(map.containsKey(keyToReplace));
+      assertFalse(map.containsValue(newValue));
+      assertEquals(initialSize, map.size());
+    } else {
+      try {
+        map.replace(keyToReplace, newValue);
+        fail("Expected UnsupportedOperationException.");
+      } catch (UnsupportedOperationException e) {
+        // Expected.
+      }
+    }
+    assertInvariants(map);
+  }
+
+  public void testReplace2NullKey() {
+    if (allowsNullKeys) {
+      return;   // Not yet implemented
+    }
+    final ConcurrentMap<K, V> map;
+    final V valueToReplace;
+    try {
+      map = makeEitherMap();
+      valueToReplace = getValueNotInPopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    int initialSize = map.size();
+    if (supportsPut) {
+      try {
+        assertNull(map.replace(null, valueToReplace));
+      } catch (NullPointerException e) {
+        // Optional.
+      }
+    } else {
+      try {
+        assertNull(map.replace(null, valueToReplace));
+      } catch (UnsupportedOperationException e) {
+        // Optional.
+      } catch (NullPointerException e) {
+        // Optional.
+      }
+    }
+    assertEquals(initialSize, map.size());
+    assertInvariants(map);
+  }
+
+  public void testReplace2ExistingKeyNullValue() {
+    if (allowsNullValues) {
+      return;   // Not yet implemented
+    }
+    final ConcurrentMap<K, V> map;
+    final K keyToReplace;
+    try {
+      map = makePopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    keyToReplace = map.keySet().iterator().next();
+    int initialSize = map.size();
+    if (supportsPut) {
+      try {
+        map.replace(keyToReplace, null);
+        fail("Expected NullPointerException");
+      } catch (NullPointerException e) {
+        // Expected.
+      }
+    } else {
+      try {
+        map.replace(keyToReplace, null);
+        fail("Expected UnsupportedOperationException or NullPointerException");
+      } catch (UnsupportedOperationException e) {
+        // Expected.
+      } catch (NullPointerException e) {
+        // Expected.
+      }
+    }
+    assertEquals(initialSize, map.size());
+    assertInvariants(map);
+  }
+
+  public void testReplace2MissingKeyNullValue() {
+    if (allowsNullValues) {
+      return;   // Not yet implemented
+    }
+    final ConcurrentMap<K, V> map;
+    final K keyToReplace;
+    try {
+      map = makeEitherMap();
+      keyToReplace = getKeyNotInPopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    int initialSize = map.size();
+    if (supportsPut) {
+      try {
+        assertNull(map.replace(keyToReplace, null));
+      } catch (NullPointerException e) {
+        // Optional.
+      }
+    } else {
+      try {
+        assertNull(map.replace(keyToReplace, null));
+      } catch (UnsupportedOperationException e) {
+        // Optional.
+      } catch (NullPointerException e) {
+        // Optional.
+      }
+    }
+    assertEquals(initialSize, map.size());
+    assertInvariants(map);
+  }
+
+  /*
+   * Replace3 tests call 3-parameter replace(key, oldValue, newValue)
+   */
+
+  public void testReplace3ExistingKeyValue() {
+    final ConcurrentMap<K, V> map;
+    final K keyToReplace;
+    final V oldValue;
+    final V newValue;
+    try {
+      map = makePopulatedMap();
+      newValue = getValueNotInPopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    keyToReplace = map.keySet().iterator().next();
+    oldValue = map.get(keyToReplace);
+    if (supportsPut) {
+      int initialSize = map.size();
+      assertTrue(map.replace(keyToReplace, oldValue, newValue));
+      assertEquals(newValue, map.get(keyToReplace));
+      assertTrue(map.containsKey(keyToReplace));
+      assertTrue(map.containsValue(newValue));
+      assertFalse(map.containsValue(oldValue));
+      assertEquals(initialSize, map.size());
+    } else {
+      try {
+        map.replace(keyToReplace, oldValue, newValue);
+        fail("Expected UnsupportedOperationException.");
+      } catch (UnsupportedOperationException e) {
+        // Expected.
+      }
+    }
+    assertInvariants(map);
+  }
+
+  public void testReplace3ExistingKeyDifferentValue() {
+    final ConcurrentMap<K, V> map;
+    final K keyToReplace;
+    final V oldValue;
+    final V newValue;
+    try {
+      map = makePopulatedMap();
+      oldValue = getValueNotInPopulatedMap();
+      newValue = getSecondValueNotInPopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    keyToReplace = map.keySet().iterator().next();
+    final V originalValue = map.get(keyToReplace);
+    int initialSize = map.size();
+    if (supportsPut) {
+      assertFalse(map.replace(keyToReplace, oldValue, newValue));
+    } else {
+      try {
+        map.replace(keyToReplace, oldValue, newValue);
+        fail("Expected UnsupportedOperationException.");
+      } catch (UnsupportedOperationException e) {
+        // Expected.
+      }
+    }
+    assertTrue(map.containsKey(keyToReplace));
+    assertFalse(map.containsValue(newValue));
+    assertFalse(map.containsValue(oldValue));
+    assertEquals(originalValue, map.get(keyToReplace));
+    assertEquals(initialSize, map.size());
+    assertInvariants(map);
+  }
+
+  public void testReplace3MissingKey() {
+    final ConcurrentMap<K, V> map;
+    final K keyToReplace;
+    final V oldValue;
+    final V newValue;
+    try {
+      map = makeEitherMap();
+      keyToReplace = getKeyNotInPopulatedMap();
+      oldValue = getValueNotInPopulatedMap();
+      newValue = getSecondValueNotInPopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    int initialSize = map.size();
+    if (supportsPut) {
+      assertFalse(map.replace(keyToReplace, oldValue, newValue));
+    } else {
+      try {
+        map.replace(keyToReplace, oldValue, newValue);
+        fail("Expected UnsupportedOperationException.");
+      } catch (UnsupportedOperationException e) {
+        // Expected.
+      }
+    }
+    assertFalse(map.containsKey(keyToReplace));
+    assertFalse(map.containsValue(newValue));
+    assertFalse(map.containsValue(oldValue));
+    assertEquals(initialSize, map.size());
+    assertInvariants(map);
+  }
+
+  public void testReplace3NullKey() {
+    if (allowsNullKeys) {
+      return;   // Not yet implemented
+    }
+    final ConcurrentMap<K, V> map;
+    final V oldValue;
+    final V newValue;
+    try {
+      map = makeEitherMap();
+      oldValue = getValueNotInPopulatedMap();
+      newValue = getSecondValueNotInPopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    int initialSize = map.size();
+    if (supportsPut) {
+      try {
+        assertFalse(map.replace(null, oldValue, newValue));
+      } catch (NullPointerException e) {
+        // Optional.
+      }
+    } else {
+      try {
+        assertFalse(map.replace(null, oldValue, newValue));
+      } catch (UnsupportedOperationException e) {
+        // Optional.
+      } catch (NullPointerException e) {
+        // Optional.
+      }
+    }
+    assertEquals(initialSize, map.size());
+    assertInvariants(map);
+  }
+
+  public void testReplace3ExistingKeyNullOldValue() {
+    if (allowsNullValues) {
+      return;   // Not yet implemented
+    }
+    final ConcurrentMap<K, V> map;
+    final K keyToReplace;
+    final V newValue;
+    try {
+      map = makePopulatedMap();
+      newValue = getValueNotInPopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    keyToReplace = map.keySet().iterator().next();
+    final V originalValue = map.get(keyToReplace);
+    int initialSize = map.size();
+    if (supportsPut) {
+      try {
+        assertFalse(map.replace(keyToReplace, null, newValue));
+      } catch (NullPointerException e) {
+        // Optional.
+      }
+    } else {
+      try {
+        assertFalse(map.replace(keyToReplace, null, newValue));
+      } catch (UnsupportedOperationException e) {
+        // Optional.
+      } catch (NullPointerException e) {
+        // Optional.
+      }
+    }
+    assertEquals(initialSize, map.size());
+    assertEquals(originalValue, map.get(keyToReplace));
+    assertInvariants(map);
+  }
+
+  public void testReplace3MissingKeyNullOldValue() {
+    if (allowsNullValues) {
+      return;   // Not yet implemented
+    }
+    final ConcurrentMap<K, V> map;
+    final K keyToReplace;
+    final V newValue;
+    try {
+      map = makeEitherMap();
+      keyToReplace = getKeyNotInPopulatedMap();
+      newValue = getValueNotInPopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    int initialSize = map.size();
+    if (supportsPut) {
+      try {
+        assertFalse(map.replace(keyToReplace, null, newValue));
+      } catch (NullPointerException e) {
+        // Optional.
+      }
+    } else {
+      try {
+        assertFalse(map.replace(keyToReplace, null, newValue));
+      } catch (UnsupportedOperationException e) {
+        // Optional.
+      } catch (NullPointerException e) {
+        // Optional.
+      }
+    }
+    assertEquals(initialSize, map.size());
+    assertInvariants(map);
+  }
+
+  public void testReplace3MissingKeyNullNewValue() {
+    if (allowsNullValues) {
+      return;   // Not yet implemented
+    }
+    final ConcurrentMap<K, V> map;
+    final K keyToReplace;
+    final V oldValue;
+    try {
+      map = makeEitherMap();
+      keyToReplace = getKeyNotInPopulatedMap();
+      oldValue = getValueNotInPopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    int initialSize = map.size();
+    if (supportsPut) {
+      try {
+        map.replace(keyToReplace, oldValue, null);
+      } catch (NullPointerException e) {
+        // Optional.
+      }
+    } else {
+      try {
+        map.replace(keyToReplace, oldValue, null);
+      } catch (UnsupportedOperationException e) {
+        // Optional.
+      } catch (NullPointerException e) {
+        // Optional.
+      }
+    }
+    assertEquals(initialSize, map.size());
+    assertInvariants(map);
+  }
+
+  public void testReplace3ExistingKeyValueNullNewValue() {
+    if (allowsNullValues) {
+      return;   // Not yet implemented
+    }
+    final ConcurrentMap<K, V> map;
+    final K keyToReplace;
+    final V oldValue;
+    try {
+      map = makePopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    keyToReplace = map.keySet().iterator().next();
+    oldValue = map.get(keyToReplace);
+    int initialSize = map.size();
+    if (supportsPut) {
+      try {
+        map.replace(keyToReplace, oldValue, null);
+        fail("Expected NullPointerException");
+      } catch (NullPointerException e) {
+        // Expected.
+      }
+    } else {
+      try {
+        map.replace(keyToReplace, oldValue, null);
+        fail("Expected UnsupportedOperationException or NullPointerException");
+      } catch (UnsupportedOperationException e) {
+        // Expected.
+      } catch (NullPointerException e) {
+        // Expected.
+      }
+    }
+    assertEquals(initialSize, map.size());
+    assertEquals(oldValue, map.get(keyToReplace));
+    assertInvariants(map);
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/DerivedComparable.java b/guava-testlib/src/com/google/common/collect/testing/DerivedComparable.java
new file mode 100644
index 0000000..254bd57
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/DerivedComparable.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+/**
+ * Simple derived class to verify that we handle generics correctly.
+ * 
+ * @author Kevin Bourrillion
+ */
+public class DerivedComparable extends BaseComparable {
+  public DerivedComparable(String s) {
+    super(s);
+  }
+
+  private static final long serialVersionUID = 0;
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/DerivedIteratorTestSuiteBuilder.java b/guava-testlib/src/com/google/common/collect/testing/DerivedIteratorTestSuiteBuilder.java
new file mode 100644
index 0000000..f6ced28
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/DerivedIteratorTestSuiteBuilder.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+import junit.framework.TestSuite;
+
+import java.util.List;
+
+/**
+ * Given a test iterable generator, builds a test suite for the
+ * iterable's iterator, by delegating to a {@link IteratorTestSuiteBuilder}.
+ *
+ * @author George van den Driessche
+ */
+public class DerivedIteratorTestSuiteBuilder<E>
+    extends FeatureSpecificTestSuiteBuilder<
+        DerivedIteratorTestSuiteBuilder<E>,
+        TestSubjectGenerator<? extends Iterable<E>>> {
+  /**
+   * We rely entirely on the delegate builder for test creation, so this
+   * just throws UnsupportedOperationException.
+   *
+   * @return never.
+   */
+  @Override protected List<Class<? extends AbstractTester>> getTesters() {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override public TestSuite createTestSuite() {
+    checkCanCreate();
+    return new IteratorTestSuiteBuilder<E>()
+        .named(getName() + " iterator")
+        .usingGenerator(new DerivedTestIteratorGenerator<E>(
+            getSubjectGenerator()))
+        .withFeatures(getFeatures())
+        .createTestSuite();
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/DerivedTestIteratorGenerator.java b/guava-testlib/src/com/google/common/collect/testing/DerivedTestIteratorGenerator.java
new file mode 100644
index 0000000..a1ff114
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/DerivedTestIteratorGenerator.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+import java.util.Iterator;
+
+/**
+ * Adapts a test iterable generator to give a TestIteratorGenerator.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author George van den Driessche
+ */
+public final class DerivedTestIteratorGenerator<E>
+    implements TestIteratorGenerator<E> {
+  private final TestSubjectGenerator<? extends Iterable<E>>
+      collectionGenerator;
+
+  public DerivedTestIteratorGenerator(
+      TestSubjectGenerator<? extends Iterable<E>> collectionGenerator) {
+    this.collectionGenerator = collectionGenerator;
+  }
+
+  public TestSubjectGenerator<? extends Iterable<E>> getCollectionGenerator() {
+    return collectionGenerator;
+  }
+
+  @Override
+  public Iterator<E> get() {
+    return collectionGenerator.createTestSubject().iterator();
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/ExampleIteratorTester.java b/guava-testlib/src/com/google/common/collect/testing/ExampleIteratorTester.java
new file mode 100644
index 0000000..6fa6d40
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/ExampleIteratorTester.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+/**
+ * A non-empty tester for {@link java.util.Iterator}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author George van den Driessche
+ */
+public final class ExampleIteratorTester<E>
+    extends AbstractTester<TestIteratorGenerator<E>> {
+  public void testSomethingAboutIterators() {
+    assertTrue(true);
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/FeatureSpecificTestSuiteBuilder.java b/guava-testlib/src/com/google/common/collect/testing/FeatureSpecificTestSuiteBuilder.java
new file mode 100644
index 0000000..3cee7ce
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/FeatureSpecificTestSuiteBuilder.java
@@ -0,0 +1,345 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+import static java.util.Collections.disjoint;
+import static java.util.logging.Level.FINER;
+
+import com.google.common.collect.testing.features.ConflictingRequirementsException;
+import com.google.common.collect.testing.features.Feature;
+import com.google.common.collect.testing.features.FeatureUtil;
+import com.google.common.collect.testing.features.TesterRequirements;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.logging.Logger;
+
+/**
+ * Creates, based on your criteria, a JUnit test suite that exhaustively tests
+ * the object generated by a G, selecting appropriate tests by matching them
+ * against specified features.
+ *
+ * @param <B> The concrete type of this builder (the 'self-type'). All the
+ * Builder methods of this class (such as {@link #named}) return this type, so
+ * that Builder methods of more derived classes can be chained onto them without
+ * casting.
+ * @param <G> The type of the generator to be passed to testers in the
+ * generated test suite. An instance of G should somehow provide an
+ * instance of the class under test, plus any other information required
+ * to parameterize the test.
+ *
+ * @author George van den Driessche
+ */
+public abstract class FeatureSpecificTestSuiteBuilder<
+    B extends FeatureSpecificTestSuiteBuilder<B, G>, G> {
+  @SuppressWarnings("unchecked")
+  protected B self() {
+    return (B) this;
+  }
+
+  // Test Data
+
+  private G subjectGenerator;
+  // Gets run before every test.
+  private Runnable setUp;
+  // Gets run at the conclusion of every test.
+  private Runnable tearDown;
+
+  protected B usingGenerator(G subjectGenerator) {
+    this.subjectGenerator = subjectGenerator;
+    return self();
+  }
+
+  protected G getSubjectGenerator() {
+    return subjectGenerator;
+  }
+
+  public B withSetUp(Runnable setUp) {
+    this.setUp = setUp;
+    return self();
+  }
+
+  protected Runnable getSetUp() {
+    return setUp;
+  }
+
+  public B withTearDown(Runnable tearDown) {
+    this.tearDown = tearDown;
+    return self();
+  }
+
+  protected Runnable getTearDown() {
+    return tearDown;
+  }
+
+  // Features
+
+  private Set<Feature<?>> features;
+
+  /**
+   * Configures this builder to produce tests appropriate for the given
+   * features.
+   */
+  public B withFeatures(Feature<?>... features) {
+    return withFeatures(Arrays.asList(features));
+  }
+
+  public B withFeatures(Iterable<? extends Feature<?>> features) {
+    this.features = Helpers.copyToSet(features);
+    return self();
+  }
+
+  protected Set<Feature<?>> getFeatures() {
+    return Collections.unmodifiableSet(features);
+  }
+
+  // Name
+
+  private String name;
+
+  /** Configures this builder produce a TestSuite with the given name. */
+  public B named(String name) {
+    if (name.contains("(")) {
+      throw new IllegalArgumentException("Eclipse hides all characters after "
+          + "'('; please use '[]' or other characters instead of parentheses");
+    }
+    this.name = name;
+    return self();
+  }
+
+  protected String getName() {
+    return name;
+  }
+
+  // Test suppression
+
+  private Set<Method> suppressedTests = new HashSet<Method>();
+
+  /**
+   * Prevents the given methods from being run as part of the test suite.
+   *
+   * <em>Note:</em> in principle this should never need to be used, but it
+   * might be useful if the semantics of an implementation disagree in
+   * unforeseen ways with the semantics expected by a test, or to keep dependent
+   * builds clean in spite of an erroneous test.
+   */
+  public B suppressing(Method... methods) {
+    return suppressing(Arrays.asList(methods));
+  }
+
+  public B suppressing(Collection<Method> methods) {
+    suppressedTests.addAll(methods);
+    return self();
+  }
+
+  protected Set<Method> getSuppressedTests() {
+    return suppressedTests;
+  }
+
+  private static final Logger logger = Logger.getLogger(
+      FeatureSpecificTestSuiteBuilder.class.getName());
+
+  /**
+   * Creates a runnable JUnit test suite based on the criteria already given.
+   */
+  /*
+   * Class parameters must be raw. This annotation should go on testerClass in
+   * the for loop, but the 1.5 javac crashes on annotations in for loops:
+   * <http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6294589>
+   */
+  @SuppressWarnings("unchecked")
+  public TestSuite createTestSuite() {
+    checkCanCreate();
+
+    logger.fine(" Testing: " + name);
+    logger.fine("Features: " + formatFeatureSet(features));
+
+    FeatureUtil.addImpliedFeatures(features);
+
+    logger.fine("Expanded: " + formatFeatureSet(features));
+
+    // Class parameters must be raw.
+    List<Class<? extends AbstractTester>> testers = getTesters();
+
+    TestSuite suite = new TestSuite(name);
+    for (Class<? extends AbstractTester> testerClass : testers) {
+      final TestSuite testerSuite = makeSuiteForTesterClass(
+          (Class<? extends AbstractTester<?>>) testerClass);
+      if (testerSuite.countTestCases() > 0) {
+        suite.addTest(testerSuite);
+      }
+    }
+    return suite;
+  }
+
+  /**
+   * Throw {@link IllegalStateException} if {@link #createTestSuite()} can't
+   * be called yet.
+   */
+  protected void checkCanCreate() {
+    if (subjectGenerator == null) {
+      throw new IllegalStateException("Call using() before createTestSuite().");
+    }
+    if (name == null) {
+      throw new IllegalStateException("Call named() before createTestSuite().");
+    }
+    if (features == null) {
+      throw new IllegalStateException(
+          "Call withFeatures() before createTestSuite().");
+    }
+  }
+
+  // Class parameters must be raw.
+  protected abstract List<Class<? extends AbstractTester>>
+      getTesters();
+
+  private boolean matches(Test test) {
+    final Method method;
+    try {
+      method = extractMethod(test);
+    } catch (IllegalArgumentException e) {
+      logger.finer(Platform.format(
+          "%s: including by default: %s", test, e.getMessage()));
+      return true;
+    }
+    if (suppressedTests.contains(method)) {
+      logger.finer(Platform.format(
+          "%s: excluding because it was explicitly suppressed.", test));
+      return false;
+    }
+    final TesterRequirements requirements;
+    try {
+      requirements = FeatureUtil.getTesterRequirements(method);
+    } catch (ConflictingRequirementsException e) {
+      throw new RuntimeException(e);
+    }
+    if (!features.containsAll(requirements.getPresentFeatures())) {
+      if (logger.isLoggable(FINER)) {
+        Set<Feature<?>> missingFeatures =
+            Helpers.copyToSet(requirements.getPresentFeatures());
+        missingFeatures.removeAll(features);
+        logger.finer(Platform.format(
+            "%s: skipping because these features are absent: %s",
+           method, missingFeatures));
+      }
+      return false;
+    }
+    if (intersect(features, requirements.getAbsentFeatures())) {
+      if (logger.isLoggable(FINER)) {
+        Set<Feature<?>> unwantedFeatures =
+            Helpers.copyToSet(requirements.getAbsentFeatures());
+        unwantedFeatures.retainAll(features);
+        logger.finer(Platform.format(
+            "%s: skipping because these features are present: %s",
+            method, unwantedFeatures));
+      }
+      return false;
+    }
+    return true;
+  }
+
+  private static boolean intersect(Set<?> a, Set<?> b) {
+    return !disjoint(a, b);
+  }
+
+  private static Method extractMethod(Test test) {
+    if (test instanceof AbstractTester) {
+      AbstractTester<?> tester = (AbstractTester<?>) test;
+      return Platform.getMethod(tester.getClass(), tester.getTestMethodName());
+    } else if (test instanceof TestCase) {
+      TestCase testCase = (TestCase) test;
+      return Platform.getMethod(testCase.getClass(), testCase.getName());
+    } else {
+      throw new IllegalArgumentException(
+          "unable to extract method from test: not a TestCase.");
+    }
+  }
+
+  protected TestSuite makeSuiteForTesterClass(
+      Class<? extends AbstractTester<?>> testerClass) {
+    final TestSuite candidateTests = getTemplateSuite(testerClass);
+    final TestSuite suite = filterSuite(candidateTests);
+
+    Enumeration<?> allTests = suite.tests();
+    while (allTests.hasMoreElements()) {
+      Object test = allTests.nextElement();
+      if (test instanceof AbstractTester) {
+        @SuppressWarnings("unchecked")
+        AbstractTester<? super G> tester = (AbstractTester<? super G>) test;
+        tester.init(subjectGenerator, name, setUp, tearDown);
+      }
+    }
+
+    return suite;
+  }
+
+  private static final Map<Class<? extends AbstractTester<?>>, TestSuite>
+      templateSuiteForClass =
+          new HashMap<Class<? extends AbstractTester<?>>, TestSuite>();
+
+  private static TestSuite getTemplateSuite(
+      Class<? extends AbstractTester<?>> testerClass) {
+    synchronized (templateSuiteForClass) {
+      TestSuite suite = templateSuiteForClass.get(testerClass);
+      if (suite == null) {
+        suite = new TestSuite(testerClass);
+        templateSuiteForClass.put(testerClass, suite);
+      }
+      return suite;
+    }
+  }
+
+  private TestSuite filterSuite(TestSuite suite) {
+    TestSuite filtered = new TestSuite(suite.getName());
+    final Enumeration<?> tests = suite.tests();
+    while (tests.hasMoreElements()) {
+      Test test = (Test) tests.nextElement();
+      if (matches(test)) {
+        filtered.addTest(test);
+      }
+    }
+    return filtered;
+  }
+
+  protected static String formatFeatureSet(Set<? extends Feature<?>> features) {
+    List<String> temp = new ArrayList<String>();
+    for (Feature<?> feature : features) {
+      Object featureAsObject = feature; // to work around bogus JDK warning
+      if (featureAsObject instanceof Enum) {
+        Enum<?> f = (Enum<?>) featureAsObject;
+        temp.add(Platform.classGetSimpleName(
+            f.getDeclaringClass()) + "." + feature);
+      } else {
+        temp.add(feature.toString());
+      }
+    }
+    return temp.toString();
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/Helpers.java b/guava-testlib/src/com/google/common/collect/testing/Helpers.java
new file mode 100644
index 0000000..9c0a5f5
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/Helpers.java
@@ -0,0 +1,290 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertFalse;
+import static junit.framework.Assert.assertTrue;
+
+import junit.framework.Assert;
+import junit.framework.AssertionFailedError;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+// This class is GWT compatible.
+public class Helpers {
+  // Clone of Objects.equal
+  static boolean equal(Object a, Object b) {
+    return a == b || (a != null && a.equals(b));
+  }
+
+  // Clone of Lists.newArrayList
+  public static <E> List<E> copyToList(Iterable<? extends E> elements) {
+    List<E> list = new ArrayList<E>();
+    addAll(list, elements);
+    return list;
+  }
+
+  public static <E> List<E> copyToList(E[] elements) {
+    return copyToList(Arrays.asList(elements));
+  }
+
+  // Clone of Sets.newLinkedHashSet
+  public static <E> Set<E> copyToSet(Iterable<? extends E> elements) {
+    Set<E> set = new LinkedHashSet<E>();
+    addAll(set, elements);
+    return set;
+  }
+
+  public static <E> Set<E> copyToSet(E[] elements) {
+    return copyToSet(Arrays.asList(elements));
+  }
+
+  // Would use Maps.immutableEntry
+  static <K, V> Entry<K, V> mapEntry(K key, V value) {
+    return Collections.singletonMap(key, value).entrySet().iterator().next();
+  }
+
+  public static void assertEqualIgnoringOrder(
+      Iterable<?> expected, Iterable<?> actual) {
+    List<?> exp = copyToList(expected);
+    List<?> act = copyToList(actual);
+    String actString = act.toString();
+
+    // Of course we could take pains to give the complete description of the
+    // problem on any failure.
+
+    // Yeah it's n^2.
+    for (Object object : exp) {
+      if (!act.remove(object)) {
+        Assert.fail("did not contain expected element " + object + ", "
+            + "expected = " + exp + ", actual = " + actString);
+      }
+    }
+    assertTrue("unexpected elements: " + act, act.isEmpty());
+  }
+
+  public static void assertContentsAnyOrder(
+      Iterable<?> actual, Object... expected) {
+    assertEqualIgnoringOrder(Arrays.asList(expected), actual);
+  }
+
+  public static <E> boolean addAll(
+      Collection<E> addTo, Iterable<? extends E> elementsToAdd) {
+    boolean modified = false;
+    for (E e : elementsToAdd) {
+      modified |= addTo.add(e);
+    }
+    return modified;
+  }
+
+  static <T> Iterable<T> reverse(final List<T> list) {
+    return new Iterable<T>() {
+      @Override
+      public Iterator<T> iterator() {
+        final ListIterator<T> listIter = list.listIterator(list.size());
+        return new Iterator<T>() {
+          @Override
+          public boolean hasNext() {
+            return listIter.hasPrevious();
+          }
+          @Override
+          public T next() {
+            return listIter.previous();
+          }
+          @Override
+          public void remove() {
+            listIter.remove();
+          }
+        };
+      }
+    };
+  }
+
+  static <T> Iterator<T> cycle(final Iterable<T> iterable) {
+    return new Iterator<T>() {
+      Iterator<T> iterator = Collections.<T>emptySet().iterator();
+      @Override
+      public boolean hasNext() {
+        return true;
+      }
+      @Override
+      public T next() {
+        if (!iterator.hasNext()) {
+          iterator = iterable.iterator();
+        }
+        return iterator.next();
+      }
+      @Override
+      public void remove() {
+        throw new UnsupportedOperationException();
+      }
+    };
+  }
+
+  static <T> T get(Iterator<T> iterator, int position) {
+    for (int i = 0; i < position; i++) {
+      iterator.next();
+    }
+    return iterator.next();
+  }
+
+  static void fail(Throwable cause, Object message) {
+    AssertionFailedError assertionFailedError =
+        new AssertionFailedError(String.valueOf(message));
+    assertionFailedError.initCause(cause);
+    throw assertionFailedError;
+  }
+
+  public static <K, V> Comparator<Entry<K, V>> entryComparator(
+      final Comparator<? super K> keyComparator) {
+    return new Comparator<Entry<K, V>>() {
+      @Override
+      public int compare(Entry<K, V> a, Entry<K, V> b) {
+        return keyComparator.compare(a.getKey(), b.getKey());
+      }
+    };
+  }
+
+  public static <T> void testComparator(
+      Comparator<? super T> comparator, T... valuesInExpectedOrder) {
+    testComparator(comparator, Arrays.asList(valuesInExpectedOrder));
+  }
+
+  public static <T> void testComparator(
+      Comparator<? super T> comparator, List<T> valuesInExpectedOrder) {
+    // This does an O(n^2) test of all pairs of values in both orders
+    for (int i = 0; i < valuesInExpectedOrder.size(); i++) {
+      T t = valuesInExpectedOrder.get(i);
+
+      for (int j = 0; j < i; j++) {
+        T lesser = valuesInExpectedOrder.get(j);
+        assertTrue(comparator + ".compare(" + lesser + ", " + t + ")",
+            comparator.compare(lesser, t) < 0);
+      }
+
+      assertEquals(comparator + ".compare(" + t + ", " + t + ")",
+          0, comparator.compare(t, t));
+
+      for (int j = i + 1; j < valuesInExpectedOrder.size(); j++) {
+        T greater = valuesInExpectedOrder.get(j);
+        assertTrue(comparator + ".compare(" + greater + ", " + t + ")",
+            comparator.compare(greater, t) > 0);
+      }
+    }
+  }
+
+  public static <T extends Comparable<? super T>> void testCompareToAndEquals(
+      List<T> valuesInExpectedOrder) {
+    // This does an O(n^2) test of all pairs of values in both orders
+    for (int i = 0; i < valuesInExpectedOrder.size(); i++) {
+      T t = valuesInExpectedOrder.get(i);
+
+      for (int j = 0; j < i; j++) {
+        T lesser = valuesInExpectedOrder.get(j);
+        assertTrue(lesser + ".compareTo(" + t + ')', lesser.compareTo(t) < 0);
+        assertFalse(lesser.equals(t));
+      }
+
+      assertEquals(t + ".compareTo(" + t + ')', 0, t.compareTo(t));
+      assertTrue(t.equals(t));
+
+      for (int j = i + 1; j < valuesInExpectedOrder.size(); j++) {
+        T greater = valuesInExpectedOrder.get(j);
+        assertTrue(greater + ".compareTo(" + t + ')', greater.compareTo(t) > 0);
+        assertFalse(greater.equals(t));
+      }
+    }
+  }
+
+  /**
+   * Returns a collection that simulates concurrent modification by
+   * having its size method return incorrect values.  This is useful
+   * for testing methods that must treat the return value from size()
+   * as a hint only.
+   *
+   * @param delta the difference between the true size of the
+   * collection and the values returned by the size method
+   */
+  public static <T> Collection<T> misleadingSizeCollection(final int delta) {
+    // It would be nice to be able to return a real concurrent
+    // collection like ConcurrentLinkedQueue, so that e.g. concurrent
+    // iteration would work, but that would not be GWT-compatible.
+    return new ArrayList<T>() {
+      @Override public int size() { return Math.max(0, super.size() + delta); }
+    };
+  }
+
+  /**
+   * Returns a "nefarious" map entry with the specified key and value,
+   * meaning an entry that is suitable for testing that map entries cannot be
+   * modified via a nefarious implementation of equals. This is used for testing
+   * unmodifiable collections of map entries; for example, it should not be
+   * possible to access the raw (modifiable) map entry via a nefarious equals
+   * method.
+   */
+  public static <K, V> Map.Entry<K, V> nefariousMapEntry(final K key, 
+      final V value) {
+    return new Map.Entry<K, V>() {      
+      @Override public K getKey() {
+        return key;
+      }
+      @Override public V getValue() {
+        return value;
+      }
+      @Override public V setValue(V value) {
+        throw new UnsupportedOperationException();
+      }
+      @SuppressWarnings("unchecked")
+      @Override public boolean equals(Object o) {
+        if (o instanceof Map.Entry<?, ?>) {
+          Map.Entry<K, V> e = (Map.Entry<K, V>) o;
+          e.setValue(value); // muhahaha!
+          
+          return equal(this.getKey(), e.getKey())
+              && equal(this.getValue(), e.getValue());
+        }
+        return false;
+      }
+
+      @Override public int hashCode() {
+        K k = getKey();
+        V v = getValue();
+        return ((k == null) ?
+            0 : k.hashCode()) ^ ((v == null) ? 0 : v.hashCode());
+      }
+
+      /**
+       * Returns a string representation of the form <code>{key}={value}</code>.
+       */
+      @Override public String toString() {
+        return getKey() + "=" + getValue();
+      }
+    };
+  }  
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/IteratorFeature.java b/guava-testlib/src/com/google/common/collect/testing/IteratorFeature.java
new file mode 100644
index 0000000..bcf0fdf
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/IteratorFeature.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+import java.util.Collections;
+import java.util.EnumSet;
+import java.util.Iterator;
+import java.util.ListIterator;
+import java.util.Set;
+
+/**
+ * A method supported by implementations of the {@link Iterator} or
+ * {@link ListIterator} interface.
+ *
+ * <p>This enum is GWT compatible.
+ *
+ * @author Chris Povirk
+ */
+public enum IteratorFeature {
+  /**
+   * Support for {@link Iterator#remove()}.
+   */
+  SUPPORTS_REMOVE,
+  /**
+   * Support for {@link ListIterator#add(Object)}; ignored for plain
+   * {@link Iterator} implementations.
+   */
+  SUPPORTS_ADD,
+  /**
+   * Support for {@link ListIterator#set(Object)}; ignored for plain
+   * {@link Iterator} implementations.
+   */
+  SUPPORTS_SET;
+
+  /**
+   * A set containing none of the optional features of the {@link Iterator} or
+   * {@link ListIterator} interfaces.
+   */
+  public static final Set<IteratorFeature> UNMODIFIABLE =
+      Collections.emptySet();
+
+  /**
+   * A set containing all of the optional features of the {@link Iterator} and
+   * {@link ListIterator} interfaces.
+   */
+  public static final Set<IteratorFeature> MODIFIABLE =
+      Collections.unmodifiableSet(EnumSet.allOf(IteratorFeature.class));
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/IteratorTestSuiteBuilder.java b/guava-testlib/src/com/google/common/collect/testing/IteratorTestSuiteBuilder.java
new file mode 100644
index 0000000..facb951
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/IteratorTestSuiteBuilder.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * Creates, based on your criteria, a JUnit test suite that exhaustively tests
+ * an Iterator implementation.
+ *
+ * <p>At least, it will do when it's finished.
+ *
+ * @author George van den Driessche
+ */
+public class IteratorTestSuiteBuilder<E>
+    extends FeatureSpecificTestSuiteBuilder<
+        IteratorTestSuiteBuilder<E>, TestIteratorGenerator<?>> {
+
+  @Override protected List<Class<? extends AbstractTester>> getTesters() {
+    return Collections.<Class<? extends AbstractTester>>singletonList(
+        ExampleIteratorTester.class);
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/IteratorTester.java b/guava-testlib/src/com/google/common/collect/testing/IteratorTester.java
new file mode 100644
index 0000000..2a17dca
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/IteratorTester.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+import java.util.Collections;
+import java.util.Iterator;
+
+/**
+ * A utility for testing an Iterator implementation by comparing its behavior to
+ * that of a "known good" reference implementation. In order to accomplish this,
+ * it's important to test a great variety of sequences of the
+ * {@link Iterator#next}, {@link Iterator#hasNext} and {@link Iterator#remove}
+ * operations. This utility takes the brute-force approach of trying <i>all</i>
+ * possible sequences of these operations, up to a given number of steps. So, if
+ * the caller specifies to use <i>n</i> steps, a total of <i>3^n</i> tests are
+ * actually performed.
+ *
+ * <p>For instance, if <i>steps</i> is 5, one example sequence that will be
+ * tested is:
+ *
+ * <ol>
+ * <li>remove();
+ * <li>hasNext()
+ * <li>hasNext();
+ * <li>remove();
+ * <li>next();
+ * </ol>
+ *
+ * This particular order of operations may be unrealistic, and testing all 3^5
+ * of them may be thought of as overkill; however, it's difficult to determine
+ * which proper subset of this massive set would be sufficient to expose any
+ * possible bug. Brute force is simpler.
+ *
+ * <p>To use this class the concrete subclass must implement the
+ * {@link IteratorTester#newTargetIterator()} method. This is because it's
+ * impossible to test an Iterator without changing its state, so the tester
+ * needs a steady supply of fresh Iterators.
+ *
+ * <p>If your iterator supports modification through {@code remove()}, you may
+ * wish to override the verify() method, which is called <em>after</em>
+ * each sequence and is guaranteed to be called using the latest values
+ * obtained from {@link IteratorTester#newTargetIterator()}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Kevin Bourrillion
+ * @author Chris Povirk
+ */
+public abstract class IteratorTester<E> extends
+    AbstractIteratorTester<E, Iterator<E>> {
+  /**
+   * Creates an IteratorTester.
+   *
+   * @param steps how many operations to test for each tested pair of iterators
+   * @param features the features supported by the iterator
+   */
+  protected IteratorTester(int steps,
+      Iterable<? extends IteratorFeature> features,
+      Iterable<E> expectedElements, KnownOrder knownOrder) {
+    super(steps, Collections.<E>singleton(null), features, expectedElements,
+        knownOrder, 0);
+  }
+
+  @Override
+  protected final Iterable<Stimulus<E, Iterator<E>>> getStimulusValues() {
+    return iteratorStimuli();
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/ListIteratorTester.java b/guava-testlib/src/com/google/common/collect/testing/ListIteratorTester.java
new file mode 100644
index 0000000..87d7b71
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/ListIteratorTester.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.ListIterator;
+
+/**
+ * A utility similar to {@link IteratorTester} for testing a
+ * {@link ListIterator} against a known good reference implementation. As with
+ * {@code IteratorTester}, a concrete subclass must provide target iterators on
+ * demand. It also requires three additional constructor parameters:
+ * {@code elementsToInsert}, the elements to be passed to {@code set()} and
+ * {@code add()} calls; {@code features}, the features supported by the
+ * iterator; and {@code expectedElements}, the elements the iterator should
+ * return in order.
+ * <p>
+ * The items in {@code elementsToInsert} will be repeated if {@code steps} is
+ * larger than the number of provided elements.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Chris Povirk
+ */
+public abstract class ListIteratorTester<E> extends
+    AbstractIteratorTester<E, ListIterator<E>> {
+  protected ListIteratorTester(int steps, Iterable<E> elementsToInsert,
+      Iterable<? extends IteratorFeature> features,
+      Iterable<E> expectedElements, int startIndex) {
+    super(steps, elementsToInsert, features, expectedElements,
+        KnownOrder.KNOWN_ORDER, startIndex);
+  }
+
+  @Override
+  protected final Iterable<? extends Stimulus<E, ? super ListIterator<E>>>
+      getStimulusValues() {
+    List<Stimulus<E, ? super ListIterator<E>>> list =
+        new ArrayList<Stimulus<E, ? super ListIterator<E>>>();
+    Helpers.addAll(list, iteratorStimuli());
+    Helpers.addAll(list, listIteratorStimuli());
+    return list;
+  }
+
+  @Override protected abstract ListIterator<E> newTargetIterator();
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/ListTestSuiteBuilder.java b/guava-testlib/src/com/google/common/collect/testing/ListTestSuiteBuilder.java
new file mode 100644
index 0000000..e8bdf78
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/ListTestSuiteBuilder.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.Feature;
+import com.google.common.collect.testing.testers.ListAddAllAtIndexTester;
+import com.google.common.collect.testing.testers.ListAddAllTester;
+import com.google.common.collect.testing.testers.ListAddAtIndexTester;
+import com.google.common.collect.testing.testers.ListAddTester;
+import com.google.common.collect.testing.testers.ListCreationTester;
+import com.google.common.collect.testing.testers.ListEqualsTester;
+import com.google.common.collect.testing.testers.ListGetTester;
+import com.google.common.collect.testing.testers.ListHashCodeTester;
+import com.google.common.collect.testing.testers.ListIndexOfTester;
+import com.google.common.collect.testing.testers.ListLastIndexOfTester;
+import com.google.common.collect.testing.testers.ListListIteratorTester;
+import com.google.common.collect.testing.testers.ListRemoveAllTester;
+import com.google.common.collect.testing.testers.ListRemoveAtIndexTester;
+import com.google.common.collect.testing.testers.ListRemoveTester;
+import com.google.common.collect.testing.testers.ListRetainAllTester;
+import com.google.common.collect.testing.testers.ListSetTester;
+import com.google.common.collect.testing.testers.ListSubListTester;
+import com.google.common.collect.testing.testers.ListToArrayTester;
+
+import junit.framework.TestSuite;
+
+import java.util.List;
+
+/**
+ * Creates, based on your criteria, a JUnit test suite that exhaustively tests
+ * a List implementation.
+ *
+ * @author George van den Driessche
+ */
+public final class ListTestSuiteBuilder<E> extends
+    AbstractCollectionTestSuiteBuilder<ListTestSuiteBuilder<E>, E> {
+  public static <E> ListTestSuiteBuilder<E> using(
+      TestListGenerator<E> generator) {
+    return new ListTestSuiteBuilder<E>().usingGenerator(generator);
+  }
+
+  @Override protected List<Class<? extends AbstractTester>> getTesters() {
+    List<Class<? extends AbstractTester>> testers
+        = Helpers.copyToList(super.getTesters());
+
+    testers.add(ListAddAllAtIndexTester.class);
+    testers.add(ListAddAllTester.class);
+    testers.add(ListAddAtIndexTester.class);
+    testers.add(ListAddTester.class);
+    testers.add(ListCreationTester.class);
+    testers.add(ListEqualsTester.class);
+    testers.add(ListGetTester.class);
+    testers.add(ListHashCodeTester.class);
+    testers.add(ListIndexOfTester.class);
+    testers.add(ListLastIndexOfTester.class);
+    testers.add(ListListIteratorTester.class);
+    testers.add(ListRemoveAllTester.class);
+    testers.add(ListRemoveAtIndexTester.class);
+    testers.add(ListRemoveTester.class);
+    testers.add(ListRetainAllTester.class);
+    testers.add(ListSetTester.class);
+    testers.add(ListSubListTester.class);
+    testers.add(ListToArrayTester.class);
+    return testers;
+  }
+
+  /**
+   * Specifies {@link CollectionFeature#KNOWN_ORDER} for all list tests, since
+   * lists have an iteration ordering corresponding to the insertion order.
+   */
+  @Override public TestSuite createTestSuite() {
+    if (!getFeatures().contains(CollectionFeature.KNOWN_ORDER)) {
+      List<Feature<?>> features = Helpers.copyToList(getFeatures());
+      features.add(CollectionFeature.KNOWN_ORDER);
+      withFeatures(features);
+    }
+    return super.createTestSuite();
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/MapInterfaceTest.java b/guava-testlib/src/com/google/common/collect/testing/MapInterfaceTest.java
new file mode 100644
index 0000000..e080157
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/MapInterfaceTest.java
@@ -0,0 +1,1677 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+import static java.util.Collections.singleton;
+
+import junit.framework.TestCase;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+/**
+ * Tests representing the contract of {@link Map}. Concrete subclasses of this
+ * base class test conformance of concrete {@link Map} subclasses to that
+ * contract.
+ *
+ * TODO: Descriptive assertion messages, with hints as to probable
+ * fixes.
+ * TODO: Add another constructor parameter indicating whether the
+ * class under test is ordered, and check the order if so.
+ * TODO: Refactor to share code with SetTestBuilder &c.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @param <K> the type of keys used by the maps under test
+ * @param <V> the type of mapped values used the maps under test
+ *
+ * @author George van den Driessche
+ */
+public abstract class MapInterfaceTest<K, V> extends TestCase {
+
+  /** A key type that is not assignable to any classes but Object. */
+  private static final class IncompatibleKeyType {
+    @Override public String toString() {
+      return "IncompatibleKeyType";
+    }
+  }
+
+  protected final boolean supportsPut;
+  protected final boolean supportsRemove;
+  protected final boolean supportsClear;
+  protected final boolean allowsNullKeys;
+  protected final boolean allowsNullValues;
+  protected final boolean supportsIteratorRemove;
+
+  /**
+   * Creates a new, empty instance of the class under test.
+   *
+   * @return a new, empty map instance.
+   * @throws UnsupportedOperationException if it's not possible to make an
+   * empty instance of the class under test.
+   */
+  protected abstract Map<K, V> makeEmptyMap()
+      throws UnsupportedOperationException;
+
+  /**
+   * Creates a new, non-empty instance of the class under test.
+   *
+   * @return a new, non-empty map instance.
+   * @throws UnsupportedOperationException if it's not possible to make a
+   * non-empty instance of the class under test.
+   */
+  protected abstract Map<K, V> makePopulatedMap()
+      throws UnsupportedOperationException;
+
+  /**
+   * Creates a new key that is not expected to be found
+   * in {@link #makePopulatedMap()}.
+   *
+   * @return a key.
+   * @throws UnsupportedOperationException if it's not possible to make a key
+   * that will not be found in the map.
+   */
+  protected abstract K getKeyNotInPopulatedMap()
+      throws UnsupportedOperationException;
+
+  /**
+   * Creates a new value that is not expected to be found
+   * in {@link #makePopulatedMap()}.
+   *
+   * @return a value.
+   * @throws UnsupportedOperationException if it's not possible to make a value
+   * that will not be found in the map.
+   */
+  protected abstract V getValueNotInPopulatedMap()
+      throws UnsupportedOperationException;
+
+  /**
+   * Constructor that assigns {@code supportsIteratorRemove} the same value as
+   * {@code supportsRemove}.
+   */
+  protected MapInterfaceTest(
+      boolean allowsNullKeys,
+      boolean allowsNullValues,
+      boolean supportsPut,
+      boolean supportsRemove,
+      boolean supportsClear) {
+    this(allowsNullKeys, allowsNullValues, supportsPut, supportsRemove,
+        supportsClear, supportsRemove);
+  }
+
+  /**
+   * Constructor with an explicit {@code supportsIteratorRemove} parameter.
+   */
+  protected MapInterfaceTest(
+      boolean allowsNullKeys,
+      boolean allowsNullValues,
+      boolean supportsPut,
+      boolean supportsRemove,
+      boolean supportsClear,
+      boolean supportsIteratorRemove) {
+    this.supportsPut = supportsPut;
+    this.supportsRemove = supportsRemove;
+    this.supportsClear = supportsClear;
+    this.allowsNullKeys = allowsNullKeys;
+    this.allowsNullValues = allowsNullValues;
+    this.supportsIteratorRemove = supportsIteratorRemove;
+  }
+
+  /**
+   * Used by tests that require a map, but don't care whether it's
+   * populated or not.
+   *
+   * @return a new map instance.
+   */
+  protected Map<K, V> makeEitherMap() {
+    try {
+      return makePopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return makeEmptyMap();
+    }
+  }
+
+  protected final boolean supportsValuesHashCode(Map<K, V> map) {
+    // get the first non-null value
+    Collection<V> values = map.values();
+    for (V value : values) {
+      if (value != null) {
+        try {
+          value.hashCode();
+        } catch (Exception e) {
+          return false;
+        }
+        return true;
+      }
+    }
+    return true;
+  }
+
+  /**
+   * Checks all the properties that should always hold of a map. Also calls
+   * {@link #assertMoreInvariants} to check invariants that are peculiar to
+   * specific implementations.
+   *
+   * @see #assertMoreInvariants
+   * @param map the map to check.
+   */
+  protected final void assertInvariants(Map<K, V> map) {
+    Set<K> keySet = map.keySet();
+    Collection<V> valueCollection = map.values();
+    Set<Entry<K, V>> entrySet = map.entrySet();
+
+    assertEquals(map.size() == 0, map.isEmpty());
+    assertEquals(map.size(), keySet.size());
+    assertEquals(keySet.size() == 0, keySet.isEmpty());
+    assertEquals(!keySet.isEmpty(), keySet.iterator().hasNext());
+
+    int expectedKeySetHash = 0;
+    for (K key : keySet) {
+      V value = map.get(key);
+      expectedKeySetHash += key != null ? key.hashCode() : 0;
+      assertTrue(map.containsKey(key));
+      assertTrue(map.containsValue(value));
+      assertTrue(valueCollection.contains(value));
+      assertTrue(valueCollection.containsAll(Collections.singleton(value)));
+      assertTrue(entrySet.contains(mapEntry(key, value)));
+      assertTrue(allowsNullKeys || (key != null));
+    }
+    assertEquals(expectedKeySetHash, keySet.hashCode());
+
+    assertEquals(map.size(), valueCollection.size());
+    assertEquals(valueCollection.size() == 0, valueCollection.isEmpty());
+    assertEquals(
+        !valueCollection.isEmpty(), valueCollection.iterator().hasNext());
+    for (V value : valueCollection) {
+      assertTrue(map.containsValue(value));
+      assertTrue(allowsNullValues || (value != null));
+    }
+
+    assertEquals(map.size(), entrySet.size());
+    assertEquals(entrySet.size() == 0, entrySet.isEmpty());
+    assertEquals(!entrySet.isEmpty(), entrySet.iterator().hasNext());
+    assertFalse(entrySet.contains("foo"));
+
+    boolean supportsValuesHashCode = supportsValuesHashCode(map);
+    if (supportsValuesHashCode) {
+      int expectedEntrySetHash = 0;
+      for (Entry<K, V> entry : entrySet) {
+        assertTrue(map.containsKey(entry.getKey()));
+        assertTrue(map.containsValue(entry.getValue()));
+        int expectedHash =
+            (entry.getKey() == null ? 0 : entry.getKey().hashCode()) ^
+            (entry.getValue() == null ? 0 : entry.getValue().hashCode());
+        assertEquals(expectedHash, entry.hashCode());
+        expectedEntrySetHash += expectedHash;
+      }
+      assertEquals(expectedEntrySetHash, entrySet.hashCode());
+      assertTrue(entrySet.containsAll(new HashSet<Entry<K, V>>(entrySet)));
+      assertTrue(entrySet.equals(new HashSet<Entry<K, V>>(entrySet)));
+    }
+
+    Object[] entrySetToArray1 = entrySet.toArray();
+    assertEquals(map.size(), entrySetToArray1.length);
+    assertTrue(Arrays.asList(entrySetToArray1).containsAll(entrySet));
+
+    Entry<?, ?>[] entrySetToArray2 = new Entry<?, ?>[map.size() + 2];
+    entrySetToArray2[map.size()] = mapEntry("foo", 1);
+    assertSame(entrySetToArray2, entrySet.toArray(entrySetToArray2));
+    assertNull(entrySetToArray2[map.size()]);
+    assertTrue(Arrays.asList(entrySetToArray2).containsAll(entrySet));
+
+    Object[] valuesToArray1 = valueCollection.toArray();
+    assertEquals(map.size(), valuesToArray1.length);
+    assertTrue(Arrays.asList(valuesToArray1).containsAll(valueCollection));
+
+    Object[] valuesToArray2 = new Object[map.size() + 2];
+    valuesToArray2[map.size()] = "foo";
+    assertSame(valuesToArray2, valueCollection.toArray(valuesToArray2));
+    assertNull(valuesToArray2[map.size()]);
+    assertTrue(Arrays.asList(valuesToArray2).containsAll(valueCollection));
+
+    if (supportsValuesHashCode) {
+      int expectedHash = 0;
+      for (Entry<K, V> entry : entrySet) {
+        expectedHash += entry.hashCode();
+      }
+      assertEquals(expectedHash, map.hashCode());
+    }
+
+    assertMoreInvariants(map);
+  }
+
+  /**
+   * Override this to check invariants which should hold true for a particular
+   * implementation, but which are not generally applicable to every instance
+   * of Map.
+   *
+   * @param map the map whose additional invariants to check.
+   */
+  protected void assertMoreInvariants(Map<K, V> map) {
+  }
+
+  public void testClear() {
+    final Map<K, V> map;
+    try {
+      map = makePopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+
+    if (supportsClear) {
+      map.clear();
+      assertTrue(map.isEmpty());
+    } else {
+      try {
+        map.clear();
+        fail("Expected UnsupportedOperationException.");
+      } catch (UnsupportedOperationException e) {
+        // Expected.
+      }
+    }
+    assertInvariants(map);
+  }
+
+  public void testContainsKey() {
+    final Map<K, V> map;
+    final K unmappedKey;
+    try {
+      map = makePopulatedMap();
+      unmappedKey = getKeyNotInPopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    assertFalse(map.containsKey(unmappedKey));
+    try {
+      assertFalse(map.containsKey(new IncompatibleKeyType()));
+    } catch (ClassCastException tolerated) {}
+    assertTrue(map.containsKey(map.keySet().iterator().next()));
+    if (allowsNullKeys) {
+      map.containsKey(null);
+    } else {
+      try {
+        map.containsKey(null);
+      } catch (NullPointerException optional) {
+      }
+    }
+    assertInvariants(map);
+  }
+
+  public void testContainsValue() {
+    final Map<K, V> map;
+    final V unmappedValue;
+    try {
+      map = makePopulatedMap();
+      unmappedValue = getValueNotInPopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    assertFalse(map.containsValue(unmappedValue));
+    assertTrue(map.containsValue(map.values().iterator().next()));
+    if (allowsNullValues) {
+      map.containsValue(null);
+    } else {
+      try {
+        map.containsKey(null);
+      } catch (NullPointerException optional) {
+      }
+    }
+    assertInvariants(map);
+  }
+
+  public void testEntrySet() {
+    final Map<K, V> map;
+    final Set<Entry<K, V>> entrySet;
+    try {
+      map = makePopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    assertInvariants(map);
+
+    entrySet = map.entrySet();
+    final K unmappedKey;
+    final V unmappedValue;
+    try {
+      unmappedKey = getKeyNotInPopulatedMap();
+      unmappedValue = getValueNotInPopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    for (Entry<K, V> entry : entrySet) {
+      assertFalse(unmappedKey.equals(entry.getKey()));
+      assertFalse(unmappedValue.equals(entry.getValue()));
+    }
+  }
+
+  public void testEntrySetForEmptyMap() {
+    final Map<K, V> map;
+    try {
+      map = makeEmptyMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    assertInvariants(map);
+  }
+
+  public void testEntrySetContainsEntryIncompatibleKey() {
+    final Map<K, V> map;
+    final Set<Entry<K, V>> entrySet;
+    try {
+      map = makeEitherMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    assertInvariants(map);
+
+    entrySet = map.entrySet();
+    final V unmappedValue;
+    try {
+      unmappedValue = getValueNotInPopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    Entry<IncompatibleKeyType, V> entry
+        = mapEntry(new IncompatibleKeyType(), unmappedValue);
+    try {
+      assertFalse(entrySet.contains(entry));
+    } catch (ClassCastException tolerated) {}
+  }
+
+  public void testEntrySetContainsEntryNullKeyPresent() {
+    if (!allowsNullKeys || !supportsPut) {
+      return;
+    }
+    final Map<K, V> map;
+    final Set<Entry<K, V>> entrySet;
+    try {
+      map = makeEitherMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    assertInvariants(map);
+
+    entrySet = map.entrySet();
+    final V unmappedValue;
+    try {
+      unmappedValue = getValueNotInPopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+
+    map.put(null, unmappedValue);
+    Entry<K, V> entry = mapEntry(null, unmappedValue);
+    assertTrue(entrySet.contains(entry));
+    assertFalse(entrySet.contains(mapEntry(null, null)));
+  }
+
+  public void testEntrySetContainsEntryNullKeyMissing() {
+    final Map<K, V> map;
+    final Set<Entry<K, V>> entrySet;
+    try {
+      map = makeEitherMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    assertInvariants(map);
+
+    entrySet = map.entrySet();
+    final V unmappedValue;
+    try {
+      unmappedValue = getValueNotInPopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    Entry<K, V> entry = mapEntry(null, unmappedValue);
+    try {
+      assertFalse(entrySet.contains(entry));
+    } catch (NullPointerException e) {
+      assertFalse(allowsNullKeys);
+    }
+    try {
+      assertFalse(entrySet.contains(mapEntry(null, null)));
+    } catch (NullPointerException e) {
+      assertFalse(allowsNullKeys && allowsNullValues);
+    }
+  }
+
+  public void testEntrySetIteratorRemove() {
+    final Map<K, V> map;
+    try {
+      map = makePopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+
+    Set<Entry<K, V>> entrySet = map.entrySet();
+    Iterator<Entry<K, V>> iterator = entrySet.iterator();
+    if (supportsIteratorRemove) {
+      int initialSize = map.size();
+      Entry<K, V> entry = iterator.next();
+      Entry<K, V> entryCopy = Helpers.mapEntry(
+          entry.getKey(), entry.getValue());
+
+      iterator.remove();
+      assertEquals(initialSize - 1, map.size());
+
+      // Use "entryCopy" instead of "entry" because "entry" might be invalidated after
+      // iterator.remove().
+      assertFalse(entrySet.contains(entryCopy));
+      assertInvariants(map);
+      try {
+        iterator.remove();
+        fail("Expected IllegalStateException.");
+      } catch (IllegalStateException e) {
+        // Expected.
+      }
+    } else {
+      try {
+        iterator.next();
+        iterator.remove();
+        fail("Expected UnsupportedOperationException.");
+      } catch (UnsupportedOperationException e) {
+        // Expected.
+      }
+    }
+    assertInvariants(map);
+  }
+
+  public void testEntrySetRemove() {
+    final Map<K, V> map;
+    try {
+      map = makePopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+
+    Set<Entry<K, V>> entrySet = map.entrySet();
+    if (supportsRemove) {
+      int initialSize = map.size();
+      boolean didRemove = entrySet.remove(entrySet.iterator().next());
+      assertTrue(didRemove);
+      assertEquals(initialSize - 1, map.size());
+    } else {
+      try {
+        entrySet.remove(entrySet.iterator().next());
+        fail("Expected UnsupportedOperationException.");
+      } catch (UnsupportedOperationException e) {
+        // Expected.
+      }
+    }
+    assertInvariants(map);
+  }
+
+  public void testEntrySetRemoveMissingKey() {
+    final Map<K, V> map;
+    final K key;
+    try {
+      map = makeEitherMap();
+      key = getKeyNotInPopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+
+    Set<Entry<K, V>> entrySet = map.entrySet();
+    Entry<K, V> entry
+        = mapEntry(key, getValueNotInPopulatedMap());
+    int initialSize = map.size();
+    if (supportsRemove) {
+      boolean didRemove = entrySet.remove(entry);
+      assertFalse(didRemove);
+    } else {
+      try {
+        boolean didRemove = entrySet.remove(entry);
+        assertFalse(didRemove);
+      } catch (UnsupportedOperationException optional) {}
+    }
+    assertEquals(initialSize, map.size());
+    assertFalse(map.containsKey(key));
+    assertInvariants(map);
+  }
+
+  public void testEntrySetRemoveDifferentValue() {
+    final Map<K, V> map;
+    try {
+      map = makePopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+
+    Set<Entry<K, V>> entrySet = map.entrySet();
+    K key = map.keySet().iterator().next();
+    Entry<K, V> entry
+        = mapEntry(key, getValueNotInPopulatedMap());
+    int initialSize = map.size();
+    if (supportsRemove) {
+      boolean didRemove = entrySet.remove(entry);
+      assertFalse(didRemove);
+    } else {
+      try {
+        boolean didRemove = entrySet.remove(entry);
+        assertFalse(didRemove);
+      } catch (UnsupportedOperationException optional) {}
+    }
+    assertEquals(initialSize, map.size());
+    assertTrue(map.containsKey(key));
+    assertInvariants(map);
+  }
+
+  public void testEntrySetRemoveNullKeyPresent() {
+    if (!allowsNullKeys || !supportsPut || !supportsRemove) {
+      return;
+    }
+    final Map<K, V> map;
+    final Set<Entry<K, V>> entrySet;
+    try {
+      map = makeEitherMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    assertInvariants(map);
+
+    entrySet = map.entrySet();
+    final V unmappedValue;
+    try {
+      unmappedValue = getValueNotInPopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+
+    map.put(null, unmappedValue);
+    assertEquals(unmappedValue, map.get(null));
+    assertTrue(map.containsKey(null));
+    Entry<K, V> entry = mapEntry(null, unmappedValue);
+    assertTrue(entrySet.remove(entry));
+    assertNull(map.get(null));
+    assertFalse(map.containsKey(null));
+  }
+
+  public void testEntrySetRemoveNullKeyMissing() {
+    final Map<K, V> map;
+    try {
+      map = makeEitherMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+
+    Set<Entry<K, V>> entrySet = map.entrySet();
+    Entry<K, V> entry
+        = mapEntry(null, getValueNotInPopulatedMap());
+    int initialSize = map.size();
+    if (supportsRemove) {
+      try {
+        boolean didRemove = entrySet.remove(entry);
+        assertFalse(didRemove);
+      } catch (NullPointerException e) {
+        assertFalse(allowsNullKeys);
+      }
+    } else {
+      try {
+        boolean didRemove = entrySet.remove(entry);
+        assertFalse(didRemove);
+      } catch (UnsupportedOperationException optional) {}
+    }
+    assertEquals(initialSize, map.size());
+    assertInvariants(map);
+  }
+
+  public void testEntrySetRemoveAll() {
+    final Map<K, V> map;
+    try {
+      map = makePopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+
+    Set<Entry<K, V>> entrySet = map.entrySet();
+
+    Entry<K, V> entryToRemove = entrySet.iterator().next();
+    Set<Entry<K, V>> entriesToRemove = singleton(entryToRemove);
+    if (supportsRemove) {
+      // We use a copy of "entryToRemove" in the assertion because "entryToRemove" might be
+      // invalidated and have undefined behavior after entrySet.removeAll(entriesToRemove),
+      // for example entryToRemove.getValue() might be null.
+      Entry<K, V> entryToRemoveCopy = Helpers.mapEntry(
+          entryToRemove.getKey(), entryToRemove.getValue());
+
+      int initialSize = map.size();
+      boolean didRemove = entrySet.removeAll(entriesToRemove);
+      assertTrue(didRemove);
+      assertEquals(initialSize - entriesToRemove.size(), map.size());
+
+      // Use "entryToRemoveCopy" instead of "entryToRemove" because it might be invalidated and
+      // have undefined behavior after entrySet.removeAll(entriesToRemove),
+      assertFalse(entrySet.contains(entryToRemoveCopy));
+    } else {
+      try {
+        entrySet.removeAll(entriesToRemove);
+        fail("Expected UnsupportedOperationException.");
+      } catch (UnsupportedOperationException e) {
+        // Expected.
+      }
+    }
+    assertInvariants(map);
+  }
+
+  public void testEntrySetRemoveAllNullFromEmpty() {
+    final Map<K, V> map;
+    try {
+      map = makeEmptyMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+
+    Set<Entry<K, V>> entrySet = map.entrySet();
+    if (supportsRemove) {
+      try {
+        entrySet.removeAll(null);
+        fail("Expected NullPointerException.");
+      } catch (NullPointerException e) {
+        // Expected.
+      }
+    } else {
+      try {
+        entrySet.removeAll(null);
+        fail("Expected UnsupportedOperationException or NullPointerException.");
+      } catch (UnsupportedOperationException e) {
+        // Expected.
+      } catch (NullPointerException e) {
+        // Expected.
+      }
+    }
+    assertInvariants(map);
+  }
+
+  public void testEntrySetRetainAll() {
+    final Map<K, V> map;
+    try {
+      map = makePopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+
+    Set<Entry<K, V>> entrySet = map.entrySet();
+    Set<Entry<K, V>> entriesToRetain =
+        singleton(entrySet.iterator().next());
+    if (supportsRemove) {
+      boolean shouldRemove = (entrySet.size() > entriesToRetain.size());
+      boolean didRemove = entrySet.retainAll(entriesToRetain);
+      assertEquals(shouldRemove, didRemove);
+      assertEquals(entriesToRetain.size(), map.size());
+      for (Entry<K, V> entry : entriesToRetain) {
+        assertTrue(entrySet.contains(entry));
+      }
+    } else {
+      try {
+        entrySet.retainAll(entriesToRetain);
+        fail("Expected UnsupportedOperationException.");
+      } catch (UnsupportedOperationException e) {
+        // Expected.
+      }
+    }
+    assertInvariants(map);
+  }
+
+  public void testEntrySetRetainAllNullFromEmpty() {
+    final Map<K, V> map;
+    try {
+      map = makeEmptyMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+
+    Set<Entry<K, V>> entrySet = map.entrySet();
+    if (supportsRemove) {
+      try {
+        entrySet.retainAll(null);
+        // Returning successfully is not ideal, but tolerated.
+      } catch (NullPointerException e) {
+        // Expected.
+      }
+    } else {
+      try {
+        entrySet.retainAll(null);
+        // We have to tolerate a successful return (Sun bug 4802647)
+      } catch (UnsupportedOperationException e) {
+        // Expected.
+      } catch (NullPointerException e) {
+        // Expected.
+      }
+    }
+    assertInvariants(map);
+  }
+
+  public void testEntrySetClear() {
+    final Map<K, V> map;
+    try {
+      map = makePopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+
+    Set<Entry<K, V>> entrySet = map.entrySet();
+    if (supportsClear) {
+      entrySet.clear();
+      assertTrue(entrySet.isEmpty());
+    } else {
+      try {
+        entrySet.clear();
+        fail("Expected UnsupportedOperationException.");
+      } catch (UnsupportedOperationException e) {
+        // Expected.
+      }
+    }
+    assertInvariants(map);
+  }
+
+  public void testEntrySetAddAndAddAll() {
+    final Map<K, V> map = makeEitherMap();
+
+    Set<Entry<K, V>> entrySet = map.entrySet();
+    final Entry<K, V> entryToAdd = mapEntry(null, null);
+    try {
+      entrySet.add(entryToAdd);
+      fail("Expected UnsupportedOperationException or NullPointerException.");
+    } catch (UnsupportedOperationException e) {
+      // Expected.
+    } catch (NullPointerException e) {
+      // Expected.
+    }
+    assertInvariants(map);
+
+    try {
+      entrySet.addAll(singleton(entryToAdd));
+      fail("Expected UnsupportedOperationException or NullPointerException.");
+    } catch (UnsupportedOperationException e) {
+      // Expected.
+    } catch (NullPointerException e) {
+      // Expected.
+    }
+    assertInvariants(map);
+  }
+
+  public void testEntrySetSetValue() {
+    // TODO: Investigate the extent to which, in practice, maps that support
+    // put() also support Entry.setValue().
+    if (!supportsPut) {
+      return;
+    }
+
+    final Map<K, V> map;
+    final V valueToSet;
+    try {
+      map = makePopulatedMap();
+      valueToSet = getValueNotInPopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+
+    Set<Entry<K, V>> entrySet = map.entrySet();
+    Entry<K, V> entry = entrySet.iterator().next();
+    final V oldValue = entry.getValue();
+    final V returnedValue = entry.setValue(valueToSet);
+    assertEquals(oldValue, returnedValue);
+    assertTrue(entrySet.contains(
+        mapEntry(entry.getKey(), valueToSet)));
+    assertEquals(valueToSet, map.get(entry.getKey()));
+    assertInvariants(map);
+  }
+
+  public void testEntrySetSetValueSameValue() {
+    // TODO: Investigate the extent to which, in practice, maps that support
+    // put() also support Entry.setValue().
+    if (!supportsPut) {
+      return;
+    }
+
+    final Map<K, V> map;
+    try {
+      map = makePopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+
+    Set<Entry<K, V>> entrySet = map.entrySet();
+    Entry<K, V> entry = entrySet.iterator().next();
+    final V oldValue = entry.getValue();
+    final V returnedValue = entry.setValue(oldValue);
+    assertEquals(oldValue, returnedValue);
+    assertTrue(entrySet.contains(
+        mapEntry(entry.getKey(), oldValue)));
+    assertEquals(oldValue, map.get(entry.getKey()));
+    assertInvariants(map);
+  }
+
+  public void testEqualsForEqualMap() {
+    final Map<K, V> map;
+    try {
+      map = makePopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+
+    assertEquals(map, map);
+    assertEquals(makePopulatedMap(), map);
+    assertFalse(map.equals(Collections.emptyMap()));
+    //no-inspection ObjectEqualsNull
+    assertFalse(map.equals(null));
+  }
+
+  public void testEqualsForLargerMap() {
+    if (!supportsPut) {
+      return;
+    }
+
+    final Map<K, V> map;
+    final Map<K, V> largerMap;
+    try {
+      map = makePopulatedMap();
+      largerMap = makePopulatedMap();
+      largerMap.put(getKeyNotInPopulatedMap(), getValueNotInPopulatedMap());
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+
+    assertFalse(map.equals(largerMap));
+  }
+
+  public void testEqualsForSmallerMap() {
+    if (!supportsRemove) {
+      return;
+    }
+
+    final Map<K, V> map;
+    final Map<K, V> smallerMap;
+    try {
+      map = makePopulatedMap();
+      smallerMap = makePopulatedMap();
+      smallerMap.remove(smallerMap.keySet().iterator().next());
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+
+    assertFalse(map.equals(smallerMap));
+  }
+
+  public void testEqualsForEmptyMap() {
+    final Map<K, V> map;
+    try {
+      map = makeEmptyMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+
+    assertEquals(map, map);
+    assertEquals(makeEmptyMap(), map);
+    assertEquals(Collections.emptyMap(), map);
+    assertFalse(map.equals(Collections.emptySet()));
+    //noinspection ObjectEqualsNull
+    assertFalse(map.equals(null));
+  }
+
+  public void testGet() {
+    final Map<K, V> map;
+    try {
+      map = makePopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+
+    for (Entry<K, V> entry : map.entrySet()) {
+      assertEquals(entry.getValue(), map.get(entry.getKey()));
+    }
+
+    K unmappedKey = null;
+    try {
+      unmappedKey = getKeyNotInPopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    assertNull(map.get(unmappedKey));
+  }
+
+  public void testGetForEmptyMap() {
+    final Map<K, V> map;
+    K unmappedKey = null;
+    try {
+      map = makeEmptyMap();
+      unmappedKey = getKeyNotInPopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    assertNull(map.get(unmappedKey));
+  }
+
+  public void testGetNull() {
+    Map<K, V> map = makeEitherMap();
+    if (allowsNullKeys) {
+      if (allowsNullValues) {
+        // TODO: decide what to test here.
+      } else {
+        assertEquals(map.containsKey(null), map.get(null) != null);
+      }
+    } else {
+      try {
+        map.get(null);
+      } catch (NullPointerException optional) {
+      }
+    }
+    assertInvariants(map);
+  }
+
+  public void testHashCode() {
+    final Map<K, V> map;
+    try {
+      map = makePopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    assertInvariants(map);
+  }
+
+  public void testHashCodeForEmptyMap() {
+    final Map<K, V> map;
+    try {
+      map = makeEmptyMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    assertInvariants(map);
+  }
+
+  public void testPutNewKey() {
+    final Map<K, V> map = makeEitherMap();
+    final K keyToPut;
+    final V valueToPut;
+    try {
+      keyToPut = getKeyNotInPopulatedMap();
+      valueToPut = getValueNotInPopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    if (supportsPut) {
+      int initialSize = map.size();
+      V oldValue = map.put(keyToPut, valueToPut);
+      assertEquals(valueToPut, map.get(keyToPut));
+      assertTrue(map.containsKey(keyToPut));
+      assertTrue(map.containsValue(valueToPut));
+      assertEquals(initialSize + 1, map.size());
+      assertNull(oldValue);
+    } else {
+      try {
+        map.put(keyToPut, valueToPut);
+        fail("Expected UnsupportedOperationException.");
+      } catch (UnsupportedOperationException e) {
+        // Expected.
+      }
+    }
+    assertInvariants(map);
+  }
+
+  public void testPutExistingKey() {
+    final Map<K, V> map;
+    final K keyToPut;
+    final V valueToPut;
+    try {
+      map = makePopulatedMap();
+      valueToPut = getValueNotInPopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    keyToPut = map.keySet().iterator().next();
+    if (supportsPut) {
+      int initialSize = map.size();
+      map.put(keyToPut, valueToPut);
+      assertEquals(valueToPut, map.get(keyToPut));
+      assertTrue(map.containsKey(keyToPut));
+      assertTrue(map.containsValue(valueToPut));
+      assertEquals(initialSize, map.size());
+    } else {
+      try {
+        map.put(keyToPut, valueToPut);
+        fail("Expected UnsupportedOperationException.");
+      } catch (UnsupportedOperationException e) {
+        // Expected.
+      }
+    }
+    assertInvariants(map);
+  }
+
+  public void testPutNullKey() {
+    if (!supportsPut) {
+      return;
+    }
+    final Map<K, V> map = makeEitherMap();
+    final V valueToPut;
+    try {
+      valueToPut = getValueNotInPopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    if (allowsNullKeys) {
+      final V oldValue = map.get(null);
+      final V returnedValue = map.put(null, valueToPut);
+      assertEquals(oldValue, returnedValue);
+      assertEquals(valueToPut, map.get(null));
+      assertTrue(map.containsKey(null));
+      assertTrue(map.containsValue(valueToPut));
+    } else {
+      try {
+        map.put(null, valueToPut);
+        fail("Expected RuntimeException");
+      } catch (RuntimeException e) {
+        // Expected.
+      }
+    }
+    assertInvariants(map);
+  }
+
+  public void testPutNullValue() {
+    if (!supportsPut) {
+      return;
+    }
+    final Map<K, V> map = makeEitherMap();
+    final K keyToPut;
+    try {
+      keyToPut = getKeyNotInPopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    if (allowsNullValues) {
+      int initialSize = map.size();
+      final V oldValue = map.get(keyToPut);
+      final V returnedValue = map.put(keyToPut, null);
+      assertEquals(oldValue, returnedValue);
+      assertNull(map.get(keyToPut));
+      assertTrue(map.containsKey(keyToPut));
+      assertTrue(map.containsValue(null));
+      assertEquals(initialSize + 1, map.size());
+    } else {
+      try {
+        map.put(keyToPut, null);
+        fail("Expected RuntimeException");
+      } catch (RuntimeException e) {
+        // Expected.
+      }
+    }
+    assertInvariants(map);
+  }
+
+  public void testPutNullValueForExistingKey() {
+    if (!supportsPut) {
+      return;
+    }
+    final Map<K, V> map;
+    final K keyToPut;
+    try {
+      map = makePopulatedMap();
+      keyToPut = map.keySet().iterator().next();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    if (allowsNullValues) {
+      int initialSize = map.size();
+      final V oldValue = map.get(keyToPut);
+      final V returnedValue = map.put(keyToPut, null);
+      assertEquals(oldValue, returnedValue);
+      assertNull(map.get(keyToPut));
+      assertTrue(map.containsKey(keyToPut));
+      assertTrue(map.containsValue(null));
+      assertEquals(initialSize, map.size());
+    } else {
+      try {
+        map.put(keyToPut, null);
+        fail("Expected RuntimeException");
+      } catch (RuntimeException e) {
+        // Expected.
+      }
+    }
+    assertInvariants(map);
+  }
+
+  public void testPutAllNewKey() {
+    final Map<K, V> map = makeEitherMap();
+    final K keyToPut;
+    final V valueToPut;
+    try {
+      keyToPut = getKeyNotInPopulatedMap();
+      valueToPut = getValueNotInPopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    final Map<K, V> mapToPut = Collections.singletonMap(keyToPut, valueToPut);
+    if (supportsPut) {
+      int initialSize = map.size();
+      map.putAll(mapToPut);
+      assertEquals(valueToPut, map.get(keyToPut));
+      assertTrue(map.containsKey(keyToPut));
+      assertTrue(map.containsValue(valueToPut));
+      assertEquals(initialSize + 1, map.size());
+    } else {
+      try {
+        map.putAll(mapToPut);
+        fail("Expected UnsupportedOperationException.");
+      } catch (UnsupportedOperationException e) {
+        // Expected.
+      }
+    }
+    assertInvariants(map);
+  }
+
+  public void testPutAllExistingKey() {
+    final Map<K, V> map;
+    final K keyToPut;
+    final V valueToPut;
+    try {
+      map = makePopulatedMap();
+      valueToPut = getValueNotInPopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    keyToPut = map.keySet().iterator().next();
+    final Map<K, V> mapToPut = Collections.singletonMap(keyToPut, valueToPut);
+    int initialSize = map.size();
+    if (supportsPut) {
+      map.putAll(mapToPut);
+      assertEquals(valueToPut, map.get(keyToPut));
+      assertTrue(map.containsKey(keyToPut));
+      assertTrue(map.containsValue(valueToPut));
+    } else {
+      try {
+        map.putAll(mapToPut);
+        fail("Expected UnsupportedOperationException.");
+      } catch (UnsupportedOperationException e) {
+        // Expected.
+      }
+    }
+    assertEquals(initialSize, map.size());
+    assertInvariants(map);
+  }
+
+  public void testRemove() {
+    final Map<K, V> map;
+    final K keyToRemove;
+    try {
+      map = makePopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    keyToRemove = map.keySet().iterator().next();
+    if (supportsRemove) {
+      int initialSize = map.size();
+      V expectedValue = map.get(keyToRemove);
+      V oldValue = map.remove(keyToRemove);
+      assertEquals(expectedValue, oldValue);
+      assertFalse(map.containsKey(keyToRemove));
+      assertEquals(initialSize - 1, map.size());
+    } else {
+      try {
+        map.remove(keyToRemove);
+        fail("Expected UnsupportedOperationException.");
+      } catch (UnsupportedOperationException e) {
+        // Expected.
+      }
+    }
+    assertInvariants(map);
+  }
+
+  public void testRemoveMissingKey() {
+    final Map<K, V> map;
+    final K keyToRemove;
+    try {
+      map = makePopulatedMap();
+      keyToRemove = getKeyNotInPopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    if (supportsRemove) {
+      int initialSize = map.size();
+      assertNull(map.remove(keyToRemove));
+      assertEquals(initialSize, map.size());
+    } else {
+      try {
+        map.remove(keyToRemove);
+        fail("Expected UnsupportedOperationException.");
+      } catch (UnsupportedOperationException e) {
+        // Expected.
+      }
+    }
+    assertInvariants(map);
+  }
+
+  public void testSize() {
+    assertInvariants(makeEitherMap());
+  }
+
+  public void testKeySetRemove() {
+    final Map<K, V> map;
+    try {
+      map = makePopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+
+    Set<K> keys = map.keySet();
+    K key = keys.iterator().next();
+    if (supportsRemove) {
+      int initialSize = map.size();
+      keys.remove(key);
+      assertEquals(initialSize - 1, map.size());
+      assertFalse(map.containsKey(key));
+    } else {
+      try {
+        keys.remove(key);
+        fail("Expected UnsupportedOperationException.");
+      } catch (UnsupportedOperationException e) {
+        // Expected.
+      }
+    }
+    assertInvariants(map);
+  }
+
+  public void testKeySetRemoveAll() {
+    final Map<K, V> map;
+    try {
+      map = makePopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+
+    Set<K> keys = map.keySet();
+    K key = keys.iterator().next();
+    if (supportsRemove) {
+      int initialSize = map.size();
+      assertTrue(keys.removeAll(Collections.singleton(key)));
+      assertEquals(initialSize - 1, map.size());
+      assertFalse(map.containsKey(key));
+    } else {
+      try {
+        keys.removeAll(Collections.singleton(key));
+        fail("Expected UnsupportedOperationException.");
+      } catch (UnsupportedOperationException e) {
+        // Expected.
+      }
+    }
+    assertInvariants(map);
+  }
+
+  public void testKeySetRetainAll() {
+    final Map<K, V> map;
+    try {
+      map = makePopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+
+    Set<K> keys = map.keySet();
+    K key = keys.iterator().next();
+    if (supportsRemove) {
+      keys.retainAll(Collections.singleton(key));
+      assertEquals(1, map.size());
+      assertTrue(map.containsKey(key));
+    } else {
+      try {
+        keys.retainAll(Collections.singleton(key));
+        fail("Expected UnsupportedOperationException.");
+      } catch (UnsupportedOperationException e) {
+        // Expected.
+      }
+    }
+    assertInvariants(map);
+  }
+
+  public void testKeySetClear() {
+    final Map<K, V> map;
+    try {
+      map = makeEitherMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+
+    Set<K> keySet = map.keySet();
+    if (supportsClear) {
+      keySet.clear();
+      assertTrue(keySet.isEmpty());
+    } else {
+      try {
+        keySet.clear();
+        fail("Expected UnsupportedOperationException.");
+      } catch (UnsupportedOperationException e) {
+        // Expected.
+      }
+    }
+    assertInvariants(map);
+  }
+
+  public void testKeySetRemoveAllNullFromEmpty() {
+    final Map<K, V> map;
+    try {
+      map = makeEmptyMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+
+    Set<K> keySet = map.keySet();
+    if (supportsRemove) {
+      try {
+        keySet.removeAll(null);
+        fail("Expected NullPointerException.");
+      } catch (NullPointerException e) {
+        // Expected.
+      }
+    } else {
+      try {
+        keySet.removeAll(null);
+        fail("Expected UnsupportedOperationException or NullPointerException.");
+      } catch (UnsupportedOperationException e) {
+        // Expected.
+      } catch (NullPointerException e) {
+        // Expected.
+      }
+    }
+    assertInvariants(map);
+  }
+
+  public void testKeySetRetainAllNullFromEmpty() {
+    final Map<K, V> map;
+    try {
+      map = makeEmptyMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+
+    Set<K> keySet = map.keySet();
+    if (supportsRemove) {
+      try {
+        keySet.retainAll(null);
+        // Returning successfully is not ideal, but tolerated.
+      } catch (NullPointerException e) {
+        // Expected.
+      }
+    } else {
+      try {
+        keySet.retainAll(null);
+        // We have to tolerate a successful return (Sun bug 4802647)
+      } catch (UnsupportedOperationException e) {
+        // Expected.
+      } catch (NullPointerException e) {
+        // Expected.
+      }
+    }
+    assertInvariants(map);
+  }
+
+  public void testValues() {
+    final Map<K, V> map;
+    final Collection<V> valueCollection;
+    try {
+      map = makePopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    assertInvariants(map);
+
+    valueCollection = map.values();
+    final V unmappedValue;
+    try {
+      unmappedValue = getValueNotInPopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    for (V value : valueCollection) {
+      assertFalse(unmappedValue.equals(value));
+    }
+  }
+
+  public void testValuesIteratorRemove() {
+    final Map<K, V> map;
+    try {
+      map = makePopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+
+    Collection<V> valueCollection = map.values();
+    Iterator<V> iterator = valueCollection.iterator();
+    if (supportsIteratorRemove) {
+      int initialSize = map.size();
+      iterator.next();
+      iterator.remove();
+      assertEquals(initialSize - 1, map.size());
+      // (We can't assert that the values collection no longer contains the
+      // removed value, because the underlying map can have multiple mappings
+      // to the same value.)
+      assertInvariants(map);
+      try {
+        iterator.remove();
+        fail("Expected IllegalStateException.");
+      } catch (IllegalStateException e) {
+        // Expected.
+      }
+    } else {
+      try {
+        iterator.next();
+        iterator.remove();
+        fail("Expected UnsupportedOperationException.");
+      } catch (UnsupportedOperationException e) {
+        // Expected.
+      }
+    }
+    assertInvariants(map);
+  }
+
+  public void testValuesRemove() {
+    final Map<K, V> map;
+    try {
+      map = makePopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+
+    Collection<V> valueCollection = map.values();
+    if (supportsRemove) {
+      int initialSize = map.size();
+      valueCollection.remove(valueCollection.iterator().next());
+      assertEquals(initialSize - 1, map.size());
+      // (We can't assert that the values collection no longer contains the
+      // removed value, because the underlying map can have multiple mappings
+      // to the same value.)
+    } else {
+      try {
+        valueCollection.remove(valueCollection.iterator().next());
+        fail("Expected UnsupportedOperationException.");
+      } catch (UnsupportedOperationException e) {
+        // Expected.
+      }
+    }
+    assertInvariants(map);
+  }
+
+  public void testValuesRemoveMissing() {
+    final Map<K, V> map;
+    final V valueToRemove;
+    try {
+      map = makeEitherMap();
+      valueToRemove = getValueNotInPopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+
+    Collection<V> valueCollection = map.values();
+    int initialSize = map.size();
+    if (supportsRemove) {
+      assertFalse(valueCollection.remove(valueToRemove));
+    } else {
+      try {
+        assertFalse(valueCollection.remove(valueToRemove));
+      } catch (UnsupportedOperationException e) {
+        // Tolerated.
+      }
+    }
+    assertEquals(initialSize, map.size());
+    assertInvariants(map);
+  }
+
+  public void testValuesRemoveAll() {
+    final Map<K, V> map;
+    try {
+      map = makePopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+
+    Collection<V> valueCollection = map.values();
+    Set<V> valuesToRemove = singleton(valueCollection.iterator().next());
+    if (supportsRemove) {
+      valueCollection.removeAll(valuesToRemove);
+      for (V value : valuesToRemove) {
+        assertFalse(valueCollection.contains(value));
+      }
+      for (V value : valueCollection) {
+        assertFalse(valuesToRemove.contains(value));
+      }
+    } else {
+      try {
+        valueCollection.removeAll(valuesToRemove);
+        fail("Expected UnsupportedOperationException.");
+      } catch (UnsupportedOperationException e) {
+        // Expected.
+      }
+    }
+    assertInvariants(map);
+  }
+
+  public void testValuesRemoveAllNullFromEmpty() {
+    final Map<K, V> map;
+    try {
+      map = makeEmptyMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+
+    Collection<V> values = map.values();
+    if (supportsRemove) {
+      try {
+        values.removeAll(null);
+        // Returning successfully is not ideal, but tolerated.
+      } catch (NullPointerException e) {
+        // Expected.
+      }
+    } else {
+      try {
+        values.removeAll(null);
+        // We have to tolerate a successful return (Sun bug 4802647)
+      } catch (UnsupportedOperationException e) {
+        // Expected.
+      } catch (NullPointerException e) {
+        // Expected.
+      }
+    }
+    assertInvariants(map);
+  }
+
+  public void testValuesRetainAll() {
+    final Map<K, V> map;
+    try {
+      map = makePopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+
+    Collection<V> valueCollection = map.values();
+    Set<V> valuesToRetain = singleton(valueCollection.iterator().next());
+    if (supportsRemove) {
+      valueCollection.retainAll(valuesToRetain);
+      for (V value : valuesToRetain) {
+        assertTrue(valueCollection.contains(value));
+      }
+      for (V value : valueCollection) {
+        assertTrue(valuesToRetain.contains(value));
+      }
+    } else {
+      try {
+        valueCollection.retainAll(valuesToRetain);
+        fail("Expected UnsupportedOperationException.");
+      } catch (UnsupportedOperationException e) {
+        // Expected.
+      }
+    }
+    assertInvariants(map);
+  }
+
+  public void testValuesRetainAllNullFromEmpty() {
+    final Map<K, V> map;
+    try {
+      map = makeEmptyMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+
+    Collection<V> values = map.values();
+    if (supportsRemove) {
+      try {
+        values.retainAll(null);
+        // Returning successfully is not ideal, but tolerated.
+      } catch (NullPointerException e) {
+        // Expected.
+      }
+    } else {
+      try {
+        values.retainAll(null);
+        // We have to tolerate a successful return (Sun bug 4802647)
+      } catch (UnsupportedOperationException e) {
+        // Expected.
+      } catch (NullPointerException e) {
+        // Expected.
+      }
+    }
+    assertInvariants(map);
+  }
+
+  public void testValuesClear() {
+    final Map<K, V> map;
+    try {
+      map = makePopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+
+    Collection<V> valueCollection = map.values();
+    if (supportsClear) {
+      valueCollection.clear();
+      assertTrue(valueCollection.isEmpty());
+    } else {
+      try {
+        valueCollection.clear();
+        fail("Expected UnsupportedOperationException.");
+      } catch (UnsupportedOperationException e) {
+        // Expected.
+      }
+    }
+    assertInvariants(map);
+  }
+
+  static <K, V> Entry<K, V> mapEntry(K key, V value) {
+    return Collections.singletonMap(key, value).entrySet().iterator().next();
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/MapTestSuiteBuilder.java b/guava-testlib/src/com/google/common/collect/testing/MapTestSuiteBuilder.java
new file mode 100644
index 0000000..dbb7fa2
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/MapTestSuiteBuilder.java
@@ -0,0 +1,333 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.Feature;
+import com.google.common.collect.testing.features.MapFeature;
+import com.google.common.collect.testing.testers.MapClearTester;
+import com.google.common.collect.testing.testers.MapContainsKeyTester;
+import com.google.common.collect.testing.testers.MapContainsValueTester;
+import com.google.common.collect.testing.testers.MapCreationTester;
+import com.google.common.collect.testing.testers.MapEqualsTester;
+import com.google.common.collect.testing.testers.MapGetTester;
+import com.google.common.collect.testing.testers.MapHashCodeTester;
+import com.google.common.collect.testing.testers.MapIsEmptyTester;
+import com.google.common.collect.testing.testers.MapPutAllTester;
+import com.google.common.collect.testing.testers.MapPutTester;
+import com.google.common.collect.testing.testers.MapRemoveTester;
+import com.google.common.collect.testing.testers.MapSizeTester;
+
+import junit.framework.TestSuite;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+/**
+ * Creates, based on your criteria, a JUnit test suite that exhaustively tests
+ * a Map implementation.
+ *
+ * @author George van den Driessche
+ */
+public class MapTestSuiteBuilder<K, V>
+    extends PerCollectionSizeTestSuiteBuilder<
+        MapTestSuiteBuilder<K, V>,
+        TestMapGenerator<K, V>, Map<K, V>, Map.Entry<K, V>> {
+  public static <K, V> MapTestSuiteBuilder<K, V> using(
+      TestMapGenerator<K, V> generator) {
+    return new MapTestSuiteBuilder<K, V>().usingGenerator(generator);
+  }
+
+  @SuppressWarnings("unchecked") // Class parameters must be raw.
+  @Override protected List<Class<? extends AbstractTester>> getTesters() {
+    return Arrays.<Class<? extends AbstractTester>>asList(
+        MapClearTester.class,
+        MapContainsKeyTester.class,
+        MapContainsValueTester.class,
+        MapCreationTester.class,
+        MapEqualsTester.class,
+        MapGetTester.class,
+        MapHashCodeTester.class,
+        MapIsEmptyTester.class,
+        MapPutTester.class,
+        MapPutAllTester.class,
+        MapRemoveTester.class,
+        MapSizeTester.class
+    );
+  }
+
+  @Override List<TestSuite> createDerivedSuites(
+      FeatureSpecificTestSuiteBuilder<
+          ?,
+          ? extends OneSizeTestContainerGenerator<Map<K, V>, Map.Entry<K, V>>>
+      parentBuilder) {
+    // TODO: Once invariant support is added, supply invariants to each of the
+    // derived suites, to check that mutations to the derived collections are
+    // reflected in the underlying map.
+
+    List<TestSuite> derivedSuites = super.createDerivedSuites(parentBuilder);
+
+    derivedSuites.add(SetTestSuiteBuilder.using(
+            new MapEntrySetGenerator<K, V>(parentBuilder.getSubjectGenerator()))
+        .withFeatures(computeEntrySetFeatures(parentBuilder.getFeatures()))
+        .named(parentBuilder.getName() + " entrySet")
+        .suppressing(parentBuilder.getSuppressedTests())
+        .createTestSuite());
+
+    derivedSuites.add(createDerivedKeySetSuite(
+            new MapKeySetGenerator<K, V>(parentBuilder.getSubjectGenerator()))
+        .withFeatures(computeKeySetFeatures(parentBuilder.getFeatures()))
+        .named(parentBuilder.getName() + " keys")
+        .suppressing(parentBuilder.getSuppressedTests())
+        .createTestSuite());
+
+    derivedSuites.add(CollectionTestSuiteBuilder.using(
+            new MapValueCollectionGenerator<K, V>(
+                parentBuilder.getSubjectGenerator()))
+        .named(parentBuilder.getName() + " values")
+        .withFeatures(computeValuesCollectionFeatures(
+            parentBuilder.getFeatures()))
+        .suppressing(parentBuilder.getSuppressedTests())
+        .createTestSuite());
+
+    return derivedSuites;
+  }
+
+  protected SetTestSuiteBuilder<K> createDerivedKeySetSuite(TestSetGenerator<K> keySetGenerator) {
+    return SetTestSuiteBuilder.using(keySetGenerator);
+  }
+
+  private static Set<Feature<?>> computeEntrySetFeatures(
+      Set<Feature<?>> mapFeatures) {
+    Set<Feature<?>> entrySetFeatures = 
+        computeCommonDerivedCollectionFeatures(mapFeatures);
+    entrySetFeatures.add(CollectionFeature.ALLOWS_NULL_QUERIES);
+    return entrySetFeatures;
+  }
+
+  private static Set<Feature<?>> computeKeySetFeatures(
+      Set<Feature<?>> mapFeatures) {
+    Set<Feature<?>> keySetFeatures =
+        computeCommonDerivedCollectionFeatures(mapFeatures);
+
+    if (mapFeatures.contains(MapFeature.ALLOWS_NULL_KEYS)) {
+      keySetFeatures.add(CollectionFeature.ALLOWS_NULL_VALUES);
+    } else if (mapFeatures.contains(MapFeature.ALLOWS_NULL_QUERIES)) {
+      keySetFeatures.add(CollectionFeature.ALLOWS_NULL_QUERIES);
+    }
+
+    return keySetFeatures;
+  }
+
+  private static Set<Feature<?>> computeValuesCollectionFeatures(
+      Set<Feature<?>> mapFeatures) {
+    Set<Feature<?>> valuesCollectionFeatures =
+        computeCommonDerivedCollectionFeatures(mapFeatures);
+    valuesCollectionFeatures.add(CollectionFeature.ALLOWS_NULL_QUERIES);
+
+    if (mapFeatures.contains(MapFeature.ALLOWS_NULL_VALUES)) {
+      valuesCollectionFeatures.add(CollectionFeature.ALLOWS_NULL_VALUES);
+    }
+
+    return valuesCollectionFeatures;
+  }
+
+  private static Set<Feature<?>> computeCommonDerivedCollectionFeatures(
+      Set<Feature<?>> mapFeatures) {
+    Set<Feature<?>> derivedFeatures = new HashSet<Feature<?>>();
+    if (mapFeatures.contains(MapFeature.SUPPORTS_REMOVE)) {
+      derivedFeatures.add(CollectionFeature.SUPPORTS_REMOVE);
+      derivedFeatures.add(CollectionFeature.SUPPORTS_REMOVE_ALL);
+      derivedFeatures.add(CollectionFeature.SUPPORTS_RETAIN_ALL);
+    }
+    if (mapFeatures.contains(MapFeature.SUPPORTS_CLEAR)) {
+      derivedFeatures.add(CollectionFeature.SUPPORTS_CLEAR);
+    }
+    if (mapFeatures.contains(MapFeature.REJECTS_DUPLICATES_AT_CREATION)) {
+      derivedFeatures.add(CollectionFeature.REJECTS_DUPLICATES_AT_CREATION);
+    }
+    // add the intersection of CollectionSize.values() and mapFeatures
+    for (CollectionSize size : CollectionSize.values()) {
+      if (mapFeatures.contains(size)) {
+        derivedFeatures.add(size);
+      }
+    }
+    return derivedFeatures;
+  }
+
+  private static class MapEntrySetGenerator<K, V>
+      implements TestSetGenerator<Map.Entry<K, V>> {
+    private final OneSizeTestContainerGenerator<Map<K, V>, Map.Entry<K, V>>
+        mapGenerator;
+
+    public MapEntrySetGenerator(
+        OneSizeTestContainerGenerator<
+            Map<K, V>, Map.Entry<K, V>> mapGenerator) {
+      this.mapGenerator = mapGenerator;
+    }
+
+    @Override
+    public SampleElements<Map.Entry<K, V>> samples() {
+      return mapGenerator.samples();
+    }
+
+    @Override
+    public Set<Map.Entry<K, V>> create(Object... elements) {
+      return mapGenerator.create(elements).entrySet();
+    }
+
+    @Override
+    public Map.Entry<K, V>[] createArray(int length) {
+      return mapGenerator.createArray(length);
+    }
+
+    @Override
+    public Iterable<Map.Entry<K, V>> order(
+        List<Map.Entry<K, V>> insertionOrder) {
+      return mapGenerator.order(insertionOrder);
+    }
+  }
+
+  // TODO: investigate some API changes to SampleElements that would tidy up
+  // parts of the following classes.
+
+  private static class MapKeySetGenerator<K, V> implements TestSetGenerator<K> {
+    private final OneSizeTestContainerGenerator<Map<K, V>, Map.Entry<K, V>>
+        mapGenerator;
+    private final SampleElements<K> samples;
+
+    public MapKeySetGenerator(
+        OneSizeTestContainerGenerator<Map<K, V>, Map.Entry<K, V>>
+            mapGenerator) {
+      this.mapGenerator = mapGenerator;
+      final SampleElements<Map.Entry<K, V>> mapSamples =
+          this.mapGenerator.samples();
+      this.samples = new SampleElements<K>(
+          mapSamples.e0.getKey(),
+          mapSamples.e1.getKey(),
+          mapSamples.e2.getKey(),
+          mapSamples.e3.getKey(),
+          mapSamples.e4.getKey());
+    }
+
+    @Override
+    public SampleElements<K> samples() {
+      return samples;
+    }
+
+    @Override
+    public Set<K> create(Object... elements) {
+      @SuppressWarnings("unchecked")
+      K[] keysArray = (K[]) elements;
+
+      // Start with a suitably shaped collection of entries
+      Collection<Map.Entry<K, V>> originalEntries =
+          mapGenerator.getSampleElements(elements.length);
+
+      // Create a copy of that, with the desired value for each key
+      Collection<Map.Entry<K, V>> entries =
+          new ArrayList<Entry<K, V>>(elements.length);
+      int i = 0;
+      for (Map.Entry<K, V> entry : originalEntries) {
+        entries.add(Helpers.mapEntry(keysArray[i++], entry.getValue()));
+      }
+
+      return mapGenerator.create(entries.toArray()).keySet();
+    }
+
+    @Override
+    public K[] createArray(int length) {
+      // TODO: with appropriate refactoring of OneSizeGenerator, we can perhaps
+      // tidy this up and get rid of the casts here and in
+      // MapValueCollectionGenerator.
+
+      return ((TestMapGenerator<K, V>) mapGenerator.getInnerGenerator())
+          .createKeyArray(length);
+    }
+
+    @Override
+    public Iterable<K> order(List<K> insertionOrder) {
+      return insertionOrder;
+    }
+  }
+
+  private static class MapValueCollectionGenerator<K, V>
+      implements TestCollectionGenerator<V> {
+    private final OneSizeTestContainerGenerator<Map<K, V>, Map.Entry<K, V>>
+        mapGenerator;
+    private final SampleElements<V> samples;
+
+    public MapValueCollectionGenerator(
+        OneSizeTestContainerGenerator<
+            Map<K, V>, Map.Entry<K, V>> mapGenerator) {
+      this.mapGenerator = mapGenerator;
+      final SampleElements<Map.Entry<K, V>> mapSamples =
+          this.mapGenerator.samples();
+      this.samples = new SampleElements<V>(
+          mapSamples.e0.getValue(),
+          mapSamples.e1.getValue(),
+          mapSamples.e2.getValue(),
+          mapSamples.e3.getValue(),
+          mapSamples.e4.getValue());
+    }
+
+    @Override
+    public SampleElements<V> samples() {
+      return samples;
+    }
+
+    @Override
+    public Collection<V> create(Object... elements) {
+      @SuppressWarnings("unchecked")
+      V[] valuesArray = (V[]) elements;
+
+      // Start with a suitably shaped collection of entries
+      Collection<Map.Entry<K, V>> originalEntries =
+          mapGenerator.getSampleElements(elements.length);
+
+      // Create a copy of that, with the desired value for each value
+      Collection<Map.Entry<K, V>> entries =
+          new ArrayList<Entry<K, V>>(elements.length);
+      int i = 0;
+      for (Map.Entry<K, V> entry : originalEntries) {
+        entries.add(Helpers.mapEntry(entry.getKey(), valuesArray[i++]));
+      }
+
+      return mapGenerator.create(entries.toArray()).values();
+    }
+
+    @Override
+    public V[] createArray(int length) {
+      //noinspection UnnecessaryLocalVariable
+      final V[] vs = ((TestMapGenerator<K, V>) mapGenerator.getInnerGenerator())
+          .createValueArray(length);
+      return vs;
+    }
+
+    @Override
+    public Iterable<V> order(List<V> insertionOrder) {
+      return insertionOrder;
+    }
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/MinimalCollection.java b/guava-testlib/src/com/google/common/collect/testing/MinimalCollection.java
new file mode 100644
index 0000000..20c9db9
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/MinimalCollection.java
@@ -0,0 +1,120 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+import java.util.AbstractCollection;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Iterator;
+
+/**
+ * A simplistic collection which implements only the bare minimum allowed by the
+ * spec, and throws exceptions whenever it can.
+ *
+ * @author Kevin Bourrillion
+ */
+public class MinimalCollection<E> extends AbstractCollection<E> {
+  // TODO: expose allow nulls parameter?
+
+  public static <E> MinimalCollection<E> of(E... contents) {
+    return new MinimalCollection<E>(Object.class, true, contents);
+  }
+
+  // TODO: use this
+  public static <E> MinimalCollection<E> ofClassAndContents(
+      Class<? super E> type, E... contents) {
+    return new MinimalCollection<E>(type, true, contents);
+  }
+
+  private final E[] contents;
+  private final Class<? super E> type;
+  private final boolean allowNulls;
+
+  // Package-private so that it can be extended.
+  MinimalCollection(Class<? super E> type, boolean allowNulls, E... contents) {
+    // TODO: consider making it shuffle the contents to test iteration order.
+    this.contents = Platform.clone(contents);
+    this.type = type;
+    this.allowNulls = allowNulls;
+
+    if (!allowNulls) {
+      for (Object element : contents) {
+        if (element == null) {
+          throw new NullPointerException();
+        }
+      }
+    }
+  }
+
+  @Override public int size() {
+    return contents.length;
+  }
+
+  @Override public boolean contains(Object object) {
+    if (!allowNulls) {
+      // behave badly
+      if (object == null) {
+        throw new NullPointerException();
+      }
+    }
+    Platform.checkCast(type, object);  // behave badly
+    return Arrays.asList(contents).contains(object);
+  }
+
+  @Override public boolean containsAll(Collection<?> collection) {
+    if (!allowNulls) {
+      for (Object object : collection) {
+        // behave badly
+        if (object == null) {
+          throw new NullPointerException();
+        }
+      }
+    }
+    return super.containsAll(collection);
+  }
+
+  @Override public Iterator<E> iterator() {
+    return Arrays.asList(contents).iterator();
+  }
+
+  @Override public Object[] toArray() {
+    Object[] result = new Object[contents.length];
+    Platform.unsafeArrayCopy(contents, 0, result, 0, contents.length);
+    return result;
+  }
+
+  /*
+   * a "type A" unmodifiable collection freaks out proactively, even if there
+   * wasn't going to be any actual work to do anyway
+   */
+
+  @Override public boolean addAll(Collection<? extends E> elementsToAdd) {
+    throw up();
+  }
+  @Override public boolean removeAll(Collection<?> elementsToRemove) {
+    throw up();
+  }
+  @Override public boolean retainAll(Collection<?> elementsToRetain) {
+    throw up();
+  }
+  @Override public void clear() {
+    throw up();
+  }
+  private static UnsupportedOperationException up() {
+    throw new UnsupportedOperationException();
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/MinimalIterable.java b/guava-testlib/src/com/google/common/collect/testing/MinimalIterable.java
new file mode 100644
index 0000000..2d2cf10
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/MinimalIterable.java
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Iterator;
+
+/**
+ * An implementation of {@code Iterable} which throws an exception on all
+ * invocations of the {@link #iterator()} method after the first, and whose
+ * iterator is always unmodifiable.
+ *
+ * <p>The {@code Iterable} specification does not make it absolutely clear what
+ * should happen on a second invocation, so implementors have made various
+ * choices, including:
+ *
+ * <ul>
+ * <li>returning the same iterator again
+ * <li>throwing an exception of some kind
+ * <li>or the usual, <i>robust</i> behavior, which all known {@link Collection}
+ *     implementations have, of returning a new, independent iterator
+ * </ul>
+ *
+ * Because of this situation, any public method accepting an iterable should
+ * invoke the {@code iterator} method only once, and should be tested using this
+ * class. Exceptions to this rule should be clearly documented.
+ *
+ * <p>Note that although your APIs should be liberal in what they accept, your
+ * methods which <i>return</i> iterables should make every attempt to return
+ * ones of the robust variety.
+ *
+ * <p>This testing utility is not thread-safe.
+ *
+ * @author Kevin Bourrillion
+ */
+public final class MinimalIterable<E> implements Iterable<E> {
+  /**
+   * Returns an iterable whose iterator returns the given elements in order.
+   */
+  public static <E> MinimalIterable<E> of(E... elements) {
+    // Make sure to get an unmodifiable iterator
+    return new MinimalIterable<E>(Arrays.asList(elements).iterator());
+  }
+
+  /**
+   * Returns an iterable whose iterator returns the given elements in order.
+   * The elements are copied out of the source collection at the time this
+   * method is called.
+   */
+  @SuppressWarnings("unchecked") // Es come in, Es go out
+  public static <E> MinimalIterable<E> from(final Collection<E> elements) {
+    return (MinimalIterable) of(elements.toArray());
+  }
+
+  private Iterator<E> iterator;
+
+  private MinimalIterable(Iterator<E> iterator) {
+    this.iterator = iterator;
+  }
+
+  @Override
+  public Iterator<E> iterator() {
+    if (iterator == null) {
+      // TODO: throw something else? Do we worry that people's code and tests
+      // might be relying on this particular type of exception?
+      throw new IllegalStateException();
+    }
+    try {
+      return iterator;
+    } finally {
+      iterator = null;
+    }
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/MinimalSet.java b/guava-testlib/src/com/google/common/collect/testing/MinimalSet.java
new file mode 100644
index 0000000..e8270dd
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/MinimalSet.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * A simplistic set which implements the bare minimum so that it can be used in
+ * tests without relying on any specific Set implementations. Slow. Explicitly
+ * allows null elements so that they can be used in the testers.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Regina O'Dell
+ */
+public class MinimalSet<E> extends MinimalCollection<E> implements Set<E> {
+
+  @SuppressWarnings("unchecked") // empty Object[] as E[]
+  public static <E> MinimalSet<E> of(E... contents) {
+    return ofClassAndContents(
+        Object.class, (E[]) new Object[0], Arrays.asList(contents));
+  }
+
+  @SuppressWarnings("unchecked") // empty Object[] as E[]
+  public static <E> MinimalSet<E> from(Collection<? extends E> contents) {
+    return ofClassAndContents(Object.class, (E[]) new Object[0], contents);
+  }
+
+  public static <E> MinimalSet<E> ofClassAndContents(
+      Class<? super E> type, E[] emptyArrayForContents,
+      Iterable<? extends E> contents) {
+    List<E> setContents = new ArrayList<E>();
+    for (E e : contents) {
+      if (!setContents.contains(e)) {
+        setContents.add(e);
+      }
+    }
+    return new MinimalSet<E>(type, setContents.toArray(emptyArrayForContents));
+  }
+
+  private MinimalSet(Class<? super E> type, E... contents) {
+    super(type, true, contents);
+  }
+
+  /*
+   * equals() and hashCode() are more specific in the Set contract.
+   */
+
+  @Override public boolean equals(Object object) {
+    if (object instanceof Set) {
+      Set<?> that = (Set<?>) object;
+      return (this.size() == that.size()) && this.containsAll(that);
+    }
+    return false;
+  }
+
+  @Override public int hashCode() {
+    int hashCodeSum = 0;
+    for (Object o : this) {
+      hashCodeSum += (o == null) ? 0 : o.hashCode();
+    }
+    return hashCodeSum;
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/NavigableMapTestSuiteBuilder.java b/guava-testlib/src/com/google/common/collect/testing/NavigableMapTestSuiteBuilder.java
new file mode 100644
index 0000000..1d38601
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/NavigableMapTestSuiteBuilder.java
@@ -0,0 +1,267 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+import com.google.common.collect.testing.features.Feature;
+import com.google.common.collect.testing.testers.MapNavigationTester;
+
+import junit.framework.TestSuite;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.NavigableMap;
+import java.util.Set;
+
+/**
+ * Creates, based on your criteria, a JUnit test suite that exhaustively tests
+ * a NavigableMap implementation.
+ */
+public class NavigableMapTestSuiteBuilder<K, V> extends MapTestSuiteBuilder<K, V> {
+  public static <K, V> NavigableMapTestSuiteBuilder<K, V> using(
+      TestMapGenerator<K, V> generator) {
+    NavigableMapTestSuiteBuilder<K, V> result = new NavigableMapTestSuiteBuilder<K, V>();
+    result.usingGenerator(generator);
+    return result;
+  }
+
+  @Override protected List<Class<? extends AbstractTester>> getTesters() {
+    List<Class<? extends AbstractTester>> testers = Helpers.copyToList(super.getTesters());
+    testers.add(MapNavigationTester.class);
+    return testers;
+  }
+
+  @Override List<TestSuite> createDerivedSuites(FeatureSpecificTestSuiteBuilder<?,
+      ? extends OneSizeTestContainerGenerator<Map<K, V>, Entry<K, V>>> parentBuilder) {
+    List<TestSuite> derivedSuites = super.createDerivedSuites(parentBuilder);
+
+    if (!parentBuilder.getFeatures().contains(NoRecurse.DESCENDING)) {
+      derivedSuites.add(createDescendingSuite(parentBuilder));
+    }
+
+    if (!parentBuilder.getFeatures().contains(NoRecurse.SUBMAP)) {
+      derivedSuites.add(createSubmapSuite(parentBuilder, Bound.NO_BOUND, Bound.EXCLUSIVE));
+      derivedSuites.add(createSubmapSuite(parentBuilder, Bound.NO_BOUND, Bound.INCLUSIVE));
+      derivedSuites.add(createSubmapSuite(parentBuilder, Bound.EXCLUSIVE, Bound.NO_BOUND));
+      derivedSuites.add(createSubmapSuite(parentBuilder, Bound.EXCLUSIVE, Bound.EXCLUSIVE));
+      derivedSuites.add(createSubmapSuite(parentBuilder, Bound.EXCLUSIVE, Bound.INCLUSIVE));
+      derivedSuites.add(createSubmapSuite(parentBuilder, Bound.INCLUSIVE, Bound.NO_BOUND));
+      derivedSuites.add(createSubmapSuite(parentBuilder, Bound.INCLUSIVE, Bound.EXCLUSIVE));
+      derivedSuites.add(createSubmapSuite(parentBuilder, Bound.INCLUSIVE, Bound.INCLUSIVE));
+    }
+
+    return derivedSuites;
+  }
+
+  @Override protected SetTestSuiteBuilder<K> createDerivedKeySetSuite(
+      TestSetGenerator<K> keySetGenerator) {
+    return NavigableSetTestSuiteBuilder.using(keySetGenerator);
+  }
+
+  /**
+   * To avoid infinite recursion, test suites with these marker features won't
+   * have derived suites created for them.
+   */
+  enum NoRecurse implements Feature<Void> {
+    SUBMAP,
+    DESCENDING;
+
+    @Override
+    public Set<Feature<? super Void>> getImpliedFeatures() {
+      return Collections.emptySet();
+    }
+  }
+
+  /**
+   * Two bounds (from and to) define how to build a subMap.
+   */
+  enum Bound {
+    INCLUSIVE,
+    EXCLUSIVE,
+    NO_BOUND;
+  }
+
+  /**
+   * Creates a suite whose map has some elements filtered out of view.
+   *
+   * <p>Because the map may be ascending or descending, this test must derive
+   * the relative order of these extreme values rather than relying on their
+   * regular sort ordering.
+   */
+  private TestSuite createSubmapSuite(final FeatureSpecificTestSuiteBuilder<?,
+          ? extends OneSizeTestContainerGenerator<Map<K, V>, Entry<K, V>>>
+          parentBuilder, final Bound from, final Bound to) {
+    final TestMapGenerator<K, V> delegate
+        = (TestMapGenerator<K, V>) parentBuilder.getSubjectGenerator().getInnerGenerator();
+
+    List<Feature<?>> features = new ArrayList<Feature<?>>();
+    features.add(NoRecurse.SUBMAP);
+    features.addAll(parentBuilder.getFeatures());
+
+    NavigableMap<K, V> emptyMap = (NavigableMap<K, V>) delegate.create();
+    final Comparator<Entry<K, V>> entryComparator = Helpers.entryComparator(emptyMap.comparator());
+
+    // derive values for inclusive filtering from the input samples
+    SampleElements<Entry<K, V>> samples = delegate.samples();
+    @SuppressWarnings("unchecked") // no elements are inserted into the array
+    List<Entry<K, V>> samplesList = Arrays.asList(
+        samples.e0, samples.e1, samples.e2, samples.e3, samples.e4);
+    Collections.sort(samplesList, entryComparator);
+    final K firstInclusive = samplesList.get(0).getKey();
+    final K lastInclusive = samplesList.get(samplesList.size() - 1).getKey();
+
+    return NavigableMapTestSuiteBuilder
+        .using(new ForwardingTestMapGenerator<K, V>(delegate) {
+          @Override public Map<K, V> create(Object... entries) {
+            @SuppressWarnings("unchecked") // we dangerously assume K and V are both strings
+            List<Entry<K, V>> extremeValues = (List) getExtremeValues();
+            @SuppressWarnings("unchecked") // map generators must past entry objects
+            List<Entry<K, V>> normalValues = (List) Arrays.asList(entries);
+
+            // prepare extreme values to be filtered out of view
+            Collections.sort(extremeValues, entryComparator);
+            K firstExclusive = extremeValues.get(1).getKey();
+            K lastExclusive = extremeValues.get(2).getKey();
+            if (from == Bound.NO_BOUND) {
+              extremeValues.remove(0);
+              extremeValues.remove(0);
+            }
+            if (to == Bound.NO_BOUND) {
+              extremeValues.remove(extremeValues.size() - 1);
+              extremeValues.remove(extremeValues.size() - 1);
+            }
+
+            // the regular values should be visible after filtering
+            List<Entry<K, V>> allEntries = new ArrayList<Entry<K, V>>();
+            allEntries.addAll(extremeValues);
+            allEntries.addAll(normalValues);
+            NavigableMap<K, V> map = (NavigableMap<K, V>)
+                delegate.create((Object[])
+                    allEntries.toArray(new Entry[allEntries.size()]));
+
+            // call the smallest subMap overload that filters out the extreme values
+            if (from == Bound.NO_BOUND && to == Bound.EXCLUSIVE) {
+              return map.headMap(lastExclusive);
+            } else if (from == Bound.NO_BOUND && to == Bound.INCLUSIVE) {
+              return map.headMap(lastInclusive, true);
+            } else if (from == Bound.EXCLUSIVE && to == Bound.NO_BOUND) {
+              return map.tailMap(firstExclusive, false);
+            } else if (from == Bound.EXCLUSIVE && to == Bound.EXCLUSIVE) {
+              return map.subMap(firstExclusive, false, lastExclusive, false);
+            } else if (from == Bound.EXCLUSIVE && to == Bound.INCLUSIVE) {
+              return map.subMap(firstExclusive, false, lastInclusive, true);
+            } else if (from == Bound.INCLUSIVE && to == Bound.NO_BOUND) {
+              return map.tailMap(firstInclusive);
+            } else if (from == Bound.INCLUSIVE && to == Bound.EXCLUSIVE) {
+              return map.subMap(firstInclusive, lastExclusive);
+            } else if (from == Bound.INCLUSIVE && to == Bound.INCLUSIVE) {
+              return map.subMap(firstInclusive, true, lastInclusive, true);
+            } else {
+              throw new IllegalArgumentException();
+            }
+          }
+        })
+        .named(parentBuilder.getName() + " subMap " + from + "-" + to)
+        .withFeatures(features)
+        .suppressing(parentBuilder.getSuppressedTests())
+        .createTestSuite();
+  }
+
+  /**
+   * Returns an array of four bogus elements that will always be too high or
+   * too low for the display. This includes two values for each extreme.
+   *
+   * <p>This method (dangerously) assume that the strings {@code "!! a"} and
+   * {@code "~~ z"} will work for this purpose, which may cause problems for
+   * navigable maps with non-string or unicode generators.
+   */
+  private List<Entry<String, String>> getExtremeValues() {
+    List<Entry<String, String>> result = new ArrayList<Entry<String, String>>();
+    result.add(Helpers.mapEntry("!! a", "below view"));
+    result.add(Helpers.mapEntry("!! b", "below view"));
+    result.add(Helpers.mapEntry("~~ y", "above view"));
+    result.add(Helpers.mapEntry("~~ z", "above view"));
+    return result;
+  }
+
+  /**
+   * Create a suite whose maps are descending views of other maps.
+   */
+  private TestSuite createDescendingSuite(final FeatureSpecificTestSuiteBuilder<?,
+          ? extends OneSizeTestContainerGenerator<Map<K, V>, Entry<K, V>>> parentBuilder) {
+    final TestMapGenerator<K, V> delegate
+        = (TestMapGenerator<K, V>) parentBuilder.getSubjectGenerator().getInnerGenerator();
+
+    List<Feature<?>> features = new ArrayList<Feature<?>>();
+    features.add(NoRecurse.DESCENDING);
+    features.addAll(parentBuilder.getFeatures());
+
+    return NavigableMapTestSuiteBuilder
+        .using(new ForwardingTestMapGenerator<K, V>(delegate) {
+          @Override public Map<K, V> create(Object... entries) {
+            NavigableMap<K, V> map = (NavigableMap<K, V>) delegate.create(entries);
+            return map.descendingMap();
+          }
+        })
+        .named(parentBuilder.getName() + " descending")
+        .withFeatures(features)
+        .suppressing(parentBuilder.getSuppressedTests())
+        .createTestSuite();
+  }
+
+  static class ForwardingTestMapGenerator<K, V> implements TestMapGenerator<K, V> {
+    private TestMapGenerator<K, V> delegate;
+
+    ForwardingTestMapGenerator(TestMapGenerator<K, V> delegate) {
+      this.delegate = delegate;
+    }
+
+    @Override
+    public Iterable<Entry<K, V>> order(List<Entry<K, V>> insertionOrder) {
+      return delegate.order(insertionOrder);
+    }
+
+    @Override
+    public K[] createKeyArray(int length) {
+      return delegate.createKeyArray(length);
+    }
+
+    @Override
+    public V[] createValueArray(int length) {
+      return delegate.createValueArray(length);
+    }
+
+    @Override
+    public SampleElements<Entry<K, V>> samples() {
+      return delegate.samples();
+    }
+
+    @Override
+    public Map<K, V> create(Object... elements) {
+      return delegate.create(elements);
+    }
+
+    @Override
+    public Entry<K, V>[] createArray(int length) {
+      return delegate.createArray(length);
+    }
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/NavigableSetTestSuiteBuilder.java b/guava-testlib/src/com/google/common/collect/testing/NavigableSetTestSuiteBuilder.java
new file mode 100644
index 0000000..3e0f8b9
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/NavigableSetTestSuiteBuilder.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+import com.google.common.collect.testing.testers.SetNavigationTester;
+
+import java.util.List;
+
+/**
+ * Creates, based on your criteria, a JUnit test suite that exhaustively tests
+ * a NavigableSet implementation.
+ */
+public final class NavigableSetTestSuiteBuilder<E>
+    extends SetTestSuiteBuilder<E> {
+  public static <E> NavigableSetTestSuiteBuilder<E> using(
+      TestSetGenerator<E> generator) {
+    NavigableSetTestSuiteBuilder<E> builder =
+        new NavigableSetTestSuiteBuilder<E>();
+    builder.usingGenerator(generator);
+    return builder;
+  }
+
+  @Override protected List<Class<? extends AbstractTester>> getTesters() {
+    List<Class<? extends AbstractTester>> testers =
+        Helpers.copyToList(super.getTesters());
+    testers.add(SetNavigationTester.class);
+    return testers;
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/OneSizeGenerator.java b/guava-testlib/src/com/google/common/collect/testing/OneSizeGenerator.java
new file mode 100644
index 0000000..7d3a50b
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/OneSizeGenerator.java
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+import com.google.common.collect.testing.features.CollectionSize;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * Generator for collection of a particular size.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author George van den Driessche
+ */
+public final class OneSizeGenerator<T, E>
+    implements OneSizeTestContainerGenerator<T, E> {
+  private final TestContainerGenerator<T, E> generator;
+  private final CollectionSize collectionSize;
+
+  public OneSizeGenerator(TestContainerGenerator<T, E> generator,
+      CollectionSize collectionSize) {
+    this.generator = generator;
+    this.collectionSize = collectionSize;
+  }
+
+  @Override
+  public TestContainerGenerator<T, E> getInnerGenerator() {
+    return generator;
+  }
+
+  @Override
+  public SampleElements<E> samples() {
+    return generator.samples();
+  }
+
+  @Override
+  public T create(Object... elements) {
+    return generator.create(elements);
+  }
+
+  @Override
+  public E[] createArray(int length) {
+    return generator.createArray(length);
+  }
+
+  @Override
+  public T createTestSubject() {
+    Collection<E> elements = getSampleElements(
+        getCollectionSize().getNumElements());
+    return generator.create(elements.toArray());
+  }
+
+  @Override
+  public Collection<E> getSampleElements(int howMany) {
+    SampleElements<E> samples = samples();
+    @SuppressWarnings("unchecked")
+    List<E> allSampleElements = Arrays.asList(
+        samples.e0, samples.e1, samples.e2, samples.e3, samples.e4);
+    return new ArrayList<E>(allSampleElements.subList(0, howMany));
+  }
+
+  @Override
+  public CollectionSize getCollectionSize() {
+    return collectionSize;
+  }
+
+  @Override
+  public Iterable<E> order(List<E> insertionOrder) {
+    return generator.order(insertionOrder);
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/OneSizeTestContainerGenerator.java b/guava-testlib/src/com/google/common/collect/testing/OneSizeTestContainerGenerator.java
new file mode 100644
index 0000000..5296be6
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/OneSizeTestContainerGenerator.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+import com.google.common.collect.testing.features.CollectionSize;
+
+import java.util.Collection;
+
+/**
+ * The subject-generator interface accepted by Collection testers, for testing
+ * a Collection at one particular {@link CollectionSize}.
+ *
+ * <p>This interface should not be implemented outside this package;
+ * {@link PerCollectionSizeTestSuiteBuilder} constructs instances of it from
+ * a more general {@link TestCollectionGenerator}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author George van den Driessche
+ */
+public interface OneSizeTestContainerGenerator<T, E>
+    extends TestSubjectGenerator<T>, TestContainerGenerator<T, E> {
+  TestContainerGenerator<T, E> getInnerGenerator();
+
+  Collection<E> getSampleElements(int howMany);
+
+  CollectionSize getCollectionSize();
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/PerCollectionSizeTestSuiteBuilder.java b/guava-testlib/src/com/google/common/collect/testing/PerCollectionSizeTestSuiteBuilder.java
new file mode 100644
index 0000000..8c219e8
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/PerCollectionSizeTestSuiteBuilder.java
@@ -0,0 +1,138 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.Feature;
+import com.google.common.collect.testing.features.FeatureUtil;
+
+import junit.framework.TestSuite;
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Set;
+import java.util.logging.Logger;
+
+/**
+ * This builder creates a composite test suite, containing a separate test suite
+ * for each {@link CollectionSize} present in the features specified
+ * by {@link #withFeatures(Feature...)}.
+ *
+ * @param <B> The concrete type of this builder (the 'self-type'). All the
+ * Builder methods of this class (such as {@link #named(String)}) return this
+ * type, so that Builder methods of more derived classes can be chained onto
+ * them without casting.
+ * @param <G> The type of the generator to be passed to testers in the
+ * generated test suite. An instance of G should somehow provide an
+ * instance of the class under test, plus any other information required
+ * to parameterize the test.
+ *
+ * @see FeatureSpecificTestSuiteBuilder
+ *
+ * @author George van den Driessche
+ */
+public abstract class PerCollectionSizeTestSuiteBuilder<
+    B extends PerCollectionSizeTestSuiteBuilder<B, G, T, E>,
+    G extends TestContainerGenerator<T, E>,
+    T,
+    E>
+    extends FeatureSpecificTestSuiteBuilder<B, G> {
+  private static final Logger logger = Logger.getLogger(
+      PerCollectionSizeTestSuiteBuilder.class.getName());
+
+  /**
+   * Creates a runnable JUnit test suite based on the criteria already given.
+   */
+  @Override public TestSuite createTestSuite() {
+    checkCanCreate();
+
+    String name = getName();
+    // Copy this set, so we can modify it.
+    Set<Feature<?>> features = Helpers.copyToSet(getFeatures());
+    List<Class<? extends AbstractTester>> testers = getTesters();
+
+    logger.fine(" Testing: " + name);
+
+    // Split out all the specified sizes.
+    Set<Feature<?>> sizesToTest =
+        Helpers.<Feature<?>>copyToSet(CollectionSize.values());
+    sizesToTest.retainAll(features);
+    features.removeAll(sizesToTest);
+
+    FeatureUtil.addImpliedFeatures(sizesToTest);
+    sizesToTest.retainAll(Arrays.asList(
+        CollectionSize.ZERO, CollectionSize.ONE, CollectionSize.SEVERAL));
+
+    logger.fine("   Sizes: " + formatFeatureSet(sizesToTest));
+
+    if (sizesToTest.isEmpty()) {
+      throw new IllegalStateException(name
+          + ": no CollectionSizes specified (check the argument to "
+          + "FeatureSpecificTestSuiteBuilder.withFeatures().)");
+    }
+
+    TestSuite suite = new TestSuite(name);
+    for (Feature<?> collectionSize : sizesToTest) {
+      String oneSizeName = Platform.format("%s [collection size: %s]",
+          name, collectionSize.toString().toLowerCase());
+      OneSizeGenerator<T, E> oneSizeGenerator = new OneSizeGenerator<T, E>(
+          getSubjectGenerator(), (CollectionSize) collectionSize);
+      Set<Feature<?>> oneSizeFeatures = Helpers.copyToSet(features);
+      oneSizeFeatures.add(collectionSize);
+      Set<Method> oneSizeSuppressedTests = getSuppressedTests();
+
+      OneSizeTestSuiteBuilder<T, E> oneSizeBuilder =
+          new OneSizeTestSuiteBuilder<T, E>(testers)
+              .named(oneSizeName)
+              .usingGenerator(oneSizeGenerator)
+              .withFeatures(oneSizeFeatures)
+              .withSetUp(getSetUp())
+              .withTearDown(getTearDown())
+              .suppressing(oneSizeSuppressedTests);
+      TestSuite oneSizeSuite = oneSizeBuilder.createTestSuite();
+      suite.addTest(oneSizeSuite);
+
+      for (TestSuite derivedSuite : createDerivedSuites(oneSizeBuilder)) {
+        oneSizeSuite.addTest(derivedSuite);
+      }
+    }
+    return suite;
+  }
+
+  List<TestSuite> createDerivedSuites(FeatureSpecificTestSuiteBuilder<
+      ?, ? extends OneSizeTestContainerGenerator<T, E>> parentBuilder) {
+    return new ArrayList<TestSuite>();
+  }
+
+  /** Builds a test suite for one particular {@link CollectionSize}. */
+  private static final class OneSizeTestSuiteBuilder<T, E> extends
+      FeatureSpecificTestSuiteBuilder<
+          OneSizeTestSuiteBuilder<T, E>, OneSizeGenerator<T, E>> {
+    private final List<Class<? extends AbstractTester>> testers;
+
+    public OneSizeTestSuiteBuilder(
+        List<Class<? extends AbstractTester>> testers) {
+      this.testers = testers;
+    }
+
+    @Override protected List<Class<? extends AbstractTester>> getTesters() {
+      return testers;
+    }
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/Platform.java b/guava-testlib/src/com/google/common/collect/testing/Platform.java
new file mode 100644
index 0000000..e7ac3ea
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/Platform.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+import java.lang.reflect.Method;
+
+/**
+ * Methods factored out so that they can be emulated differently in GWT.
+ *
+ * <p>This class is emulated in GWT.
+ *
+ * @author Hayward Chan
+ */
+class Platform {
+
+  /**
+   * Calls {@link Class#isInstance(Object)}.  Factored out so that it can be
+   * emulated in GWT.
+   *
+   * <p>This method always returns {@code true} in GWT.
+   */
+  static boolean checkIsInstance(Class<?> clazz, Object obj) {
+    return clazz.isInstance(obj);
+  }
+
+  static <T> T[] clone(T[] array) {
+    return array.clone();
+  }
+
+  // Class.cast is not supported in GWT.  This method is a no-op in GWT.
+  static void checkCast(Class<?> clazz, Object obj) {
+    clazz.cast(obj);
+  }
+
+  static String format(String template, Object... args) {
+    return String.format(template, args);
+  }
+
+  /**
+   * Wrapper around {@link System#arraycopy} so that it can be emulated
+   * correctly in GWT.
+   *
+   * <p>It is only intended for the case {@code src} and {@code dest} are
+   * different.  It also doesn't validate the types and indices.
+   *
+   * <p>As of GWT 2.0, The built-in {@link System#arraycopy} doesn't work
+   * in general case.  See
+   * http://code.google.com/p/google-web-toolkit/issues/detail?id=3621
+   * for more details.
+   */
+  static void unsafeArrayCopy(
+      Object[] src, int srcPos, Object[] dest, int destPos, int length) {
+    System.arraycopy(src, srcPos, dest, destPos, length);
+  }
+
+  static Method getMethod(Class<?> clazz, String name) {
+    try {
+      return clazz.getMethod(name);
+    } catch (Exception e) {
+      throw new IllegalArgumentException(e);
+    }
+  }
+
+  static String classGetSimpleName(Class<?> clazz) {
+    return clazz.getSimpleName();
+  }
+
+  private Platform() {}
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/QueueTestSuiteBuilder.java b/guava-testlib/src/com/google/common/collect/testing/QueueTestSuiteBuilder.java
new file mode 100644
index 0000000..10662be
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/QueueTestSuiteBuilder.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+import com.google.common.collect.testing.testers.QueueElementTester;
+import com.google.common.collect.testing.testers.QueueOfferTester;
+import com.google.common.collect.testing.testers.QueuePeekTester;
+import com.google.common.collect.testing.testers.QueuePollTester;
+import com.google.common.collect.testing.testers.QueueRemoveTester;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Creates, based on your criteria, a JUnit test suite that exhaustively tests
+ * a queue implementation.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Jared Levy
+ */
+public final class QueueTestSuiteBuilder<E>
+    extends AbstractCollectionTestSuiteBuilder<QueueTestSuiteBuilder<E>, E> {
+  public static <E> QueueTestSuiteBuilder<E> using(
+      TestQueueGenerator<E> generator) {
+    return new QueueTestSuiteBuilder<E>().usingGenerator(generator);
+  }
+
+  private boolean runCollectionTests = true;
+
+  /**
+   * Specify whether to skip the general collection tests. Call this method when
+   * testing a collection that's both a queue and a list, to avoid running the
+   * common collection tests twice. By default, collection tests do run.
+   */
+  public QueueTestSuiteBuilder<E> skipCollectionTests() {
+    runCollectionTests = false;
+    return this;
+  }
+
+  @Override protected List<Class<? extends AbstractTester>> getTesters() {
+    List<Class<? extends AbstractTester>> testers =
+        new ArrayList<Class<? extends AbstractTester>>();
+    if (runCollectionTests) {
+      testers.addAll(super.getTesters());
+    }
+
+    testers.add(QueueElementTester.class);
+    testers.add(QueueOfferTester.class);
+    testers.add(QueuePeekTester.class);
+    testers.add(QueuePollTester.class);
+    testers.add(QueueRemoveTester.class);
+    return testers;
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/ReserializingTestCollectionGenerator.java b/guava-testlib/src/com/google/common/collect/testing/ReserializingTestCollectionGenerator.java
new file mode 100644
index 0000000..54e5632
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/ReserializingTestCollectionGenerator.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * Reserializes the sets created by another test set generator.
+ *
+ * TODO: make CollectionTestSuiteBuilder test reserialized collections
+ *
+ * @author Jesse Wilson
+ */
+public class ReserializingTestCollectionGenerator<E>
+    implements TestCollectionGenerator<E> {
+  private final TestCollectionGenerator<E> delegate;
+
+  ReserializingTestCollectionGenerator(TestCollectionGenerator<E> delegate) {
+    this.delegate = delegate;
+  }
+
+  public static <E> ReserializingTestCollectionGenerator<E> newInstance(
+      TestCollectionGenerator<E> delegate) {
+    return new ReserializingTestCollectionGenerator<E>(delegate);
+  }
+
+  @Override
+  public Collection<E> create(Object... elements) {
+    return reserialize(delegate.create(elements));
+  }
+
+  @SuppressWarnings("unchecked")
+  static <T> T reserialize(T object) {
+    try {
+      ByteArrayOutputStream bytes = new ByteArrayOutputStream();
+      ObjectOutputStream out = new ObjectOutputStream(bytes);
+      out.writeObject(object);
+      ObjectInputStream in = new ObjectInputStream(
+          new ByteArrayInputStream(bytes.toByteArray()));
+      return (T) in.readObject();
+    } catch (IOException e) {
+      Helpers.fail(e, e.getMessage());
+    } catch (ClassNotFoundException e) {
+      Helpers.fail(e, e.getMessage());
+    }
+    throw new AssertionError("not reachable");
+  }
+
+  @Override
+  public SampleElements<E> samples() {
+    return delegate.samples();
+  }
+
+  @Override
+  public E[] createArray(int length) {
+    return delegate.createArray(length);
+  }
+
+  @Override
+  public Iterable<E> order(List<E> insertionOrder) {
+    return delegate.order(insertionOrder);
+  }
+}
\ No newline at end of file
diff --git a/guava-testlib/src/com/google/common/collect/testing/ReserializingTestSetGenerator.java b/guava-testlib/src/com/google/common/collect/testing/ReserializingTestSetGenerator.java
new file mode 100644
index 0000000..7e425e7
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/ReserializingTestSetGenerator.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+import java.util.Set;
+
+/**
+ * Reserializes the sets created by another test set generator.
+ *
+ * TODO: make CollectionTestSuiteBuilder test reserialized collections
+ *
+ * @author Jesse Wilson
+ */
+public class ReserializingTestSetGenerator<E>
+    extends ReserializingTestCollectionGenerator<E>
+    implements TestSetGenerator<E> {
+
+  ReserializingTestSetGenerator(TestSetGenerator<E> delegate) {
+    super(delegate);
+  }
+
+  public static <E> TestSetGenerator<E> newInstance(
+      TestSetGenerator<E> delegate) {
+    return new ReserializingTestSetGenerator<E>(delegate);
+  }
+
+  @Override public Set<E> create(Object... elements) {
+    return (Set<E>) super.create(elements);
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/SafeTreeMap.java b/guava-testlib/src/com/google/common/collect/testing/SafeTreeMap.java
new file mode 100644
index 0000000..08e6492
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/SafeTreeMap.java
@@ -0,0 +1,255 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.Map;
+import java.util.NavigableMap;
+import java.util.NavigableSet;
+import java.util.Set;
+import java.util.SortedMap;
+import java.util.TreeMap;
+
+/**
+ * A wrapper around {@code TreeMap} that aggressively checks to see if keys are
+ * mutually comparable. This implementation passes the navigable map test
+ * suites.
+ *
+ * @author Louis Wasserman
+ */
+public final class SafeTreeMap<K, V>
+    implements Serializable, NavigableMap<K, V> {
+  @SuppressWarnings("unchecked")
+  private static final Comparator NATURAL_ORDER = new Comparator<Comparable>() {
+    @Override public int compare(Comparable o1, Comparable o2) {
+      return o1.compareTo(o2);
+    }
+  };
+  private final NavigableMap<K, V> delegate;
+
+  public SafeTreeMap() {
+    this(new TreeMap<K, V>());
+  }
+
+  public SafeTreeMap(Comparator<? super K> comparator) {
+    this(new TreeMap<K, V>(comparator));
+  }
+
+  public SafeTreeMap(Map<? extends K, ? extends V> map) {
+    this(new TreeMap<K, V>(map));
+  }
+
+  public SafeTreeMap(SortedMap<K, ? extends V> map) {
+    this(new TreeMap<K, V>(map));
+  }
+
+  private SafeTreeMap(NavigableMap<K, V> delegate) {
+    this.delegate = delegate;
+    if (delegate == null) {
+      throw new NullPointerException();
+    }
+    for (K k : keySet()) {
+      checkValid(k);
+    }
+  }
+
+  @Override public Entry<K, V> ceilingEntry(K key) {
+    return delegate.ceilingEntry(checkValid(key));
+  }
+
+  @Override public K ceilingKey(K key) {
+    return delegate.ceilingKey(checkValid(key));
+  }
+
+  @Override public void clear() {
+    delegate.clear();
+  }
+
+  @SuppressWarnings("unchecked")
+  @Override public Comparator<? super K> comparator() {
+    Comparator<? super K> comparator = delegate.comparator();
+    if (comparator == null) {
+      comparator = NATURAL_ORDER;
+    }
+    return comparator;
+  }
+
+  @Override public boolean containsKey(Object key) {
+    try {
+      return delegate.containsKey(checkValid(key));
+    } catch (NullPointerException e) {
+      return false;
+    } catch (ClassCastException e) {
+      return false;
+    }
+  }
+
+  @Override public boolean containsValue(Object value) {
+    return delegate.containsValue(value);
+  }
+
+  @Override public NavigableSet<K> descendingKeySet() {
+    return delegate.descendingKeySet();
+  }
+
+  @Override public NavigableMap<K, V> descendingMap() {
+    return new SafeTreeMap<K, V>(delegate.descendingMap());
+  }
+
+  @Override public Set<Entry<K, V>> entrySet() {
+    return delegate.entrySet();
+  }
+
+  @Override public Entry<K, V> firstEntry() {
+    return delegate.firstEntry();
+  }
+
+  @Override public K firstKey() {
+    return delegate.firstKey();
+  }
+
+  @Override public Entry<K, V> floorEntry(K key) {
+    return delegate.floorEntry(checkValid(key));
+  }
+
+  @Override public K floorKey(K key) {
+    return delegate.floorKey(checkValid(key));
+  }
+
+  @Override public V get(Object key) {
+    return delegate.get(checkValid(key));
+  }
+
+  @Override public SortedMap<K, V> headMap(K toKey) {
+    return headMap(toKey, false);
+  }
+
+  @Override public NavigableMap<K, V> headMap(K toKey, boolean inclusive) {
+    return new SafeTreeMap<K, V>(
+        delegate.headMap(checkValid(toKey), inclusive));
+  }
+
+  @Override public Entry<K, V> higherEntry(K key) {
+    return delegate.higherEntry(checkValid(key));
+  }
+
+  @Override public K higherKey(K key) {
+    return delegate.higherKey(checkValid(key));
+  }
+
+  @Override public boolean isEmpty() {
+    return delegate.isEmpty();
+  }
+
+  @Override public NavigableSet<K> keySet() {
+    return navigableKeySet();
+  }
+
+  @Override public Entry<K, V> lastEntry() {
+    return delegate.lastEntry();
+  }
+
+  @Override public K lastKey() {
+    return delegate.lastKey();
+  }
+
+  @Override public Entry<K, V> lowerEntry(K key) {
+    return delegate.lowerEntry(checkValid(key));
+  }
+
+  @Override public K lowerKey(K key) {
+    return delegate.lowerKey(checkValid(key));
+  }
+
+  @Override public NavigableSet<K> navigableKeySet() {
+    return delegate.navigableKeySet();
+  }
+
+  @Override public Entry<K, V> pollFirstEntry() {
+    return delegate.pollFirstEntry();
+  }
+
+  @Override public Entry<K, V> pollLastEntry() {
+    return delegate.pollLastEntry();
+  }
+
+  @Override public V put(K key, V value) {
+    return delegate.put(checkValid(key), value);
+  }
+
+  @Override public void putAll(Map<? extends K, ? extends V> map) {
+    for (K key : map.keySet()) {
+      checkValid(key);
+    }
+    delegate.putAll(map);
+  }
+
+  @Override public V remove(Object key) {
+    return delegate.remove(checkValid(key));
+  }
+
+  @Override public int size() {
+    return delegate.size();
+  }
+
+  @Override public NavigableMap<K, V> subMap(
+      K fromKey, boolean fromInclusive, K toKey, boolean toInclusive) {
+    return new SafeTreeMap<K, V>(delegate.subMap(
+        checkValid(fromKey), fromInclusive, checkValid(toKey), toInclusive));
+  }
+
+  @Override public SortedMap<K, V> subMap(K fromKey, K toKey) {
+    return subMap(fromKey, true, toKey, false);
+  }
+
+  @Override public SortedMap<K, V> tailMap(K fromKey) {
+    return tailMap(fromKey, true);
+  }
+
+  @Override public NavigableMap<K, V> tailMap(K fromKey, boolean inclusive) {
+    return new SafeTreeMap<K, V>(
+        delegate.tailMap(checkValid(fromKey), inclusive));
+  }
+
+  @Override public Collection<V> values() {
+    return delegate.values();
+  }
+
+  private <T> T checkValid(T t) {
+    // a ClassCastException is what's supposed to happen!
+    @SuppressWarnings("unchecked")
+    K k = (K) t;
+    comparator().compare(k, k);
+    return t;
+  }
+
+  @Override public boolean equals(Object obj) {
+    return delegate.equals(obj);
+  }
+
+  @Override public int hashCode() {
+    return delegate.hashCode();
+  }
+
+  @Override public String toString() {
+    return delegate.toString();
+  }
+
+  private static final long serialVersionUID = 0L;
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/SafeTreeSet.java b/guava-testlib/src/com/google/common/collect/testing/SafeTreeSet.java
new file mode 100644
index 0000000..90bcb3c
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/SafeTreeSet.java
@@ -0,0 +1,219 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.NavigableSet;
+import java.util.SortedSet;
+import java.util.TreeSet;
+
+/**
+ * A wrapper around {@code TreeSet} that aggressively checks to see if elements
+ * are mutually comparable. This implementation passes the navigable set test
+ * suites.
+ *
+ * @author Louis Wasserman
+ */
+public final class SafeTreeSet<E> implements Serializable, NavigableSet<E> {
+  @SuppressWarnings("unchecked")
+  private static final Comparator NATURAL_ORDER = new Comparator<Comparable>() {
+    @Override public int compare(Comparable o1, Comparable o2) {
+      return o1.compareTo(o2);
+    }
+  };
+  private final NavigableSet<E> delegate;
+
+  public SafeTreeSet() {
+    this(new TreeSet<E>());
+  }
+
+  public SafeTreeSet(Collection<? extends E> collection) {
+    this(new TreeSet<E>(collection));
+  }
+
+  public SafeTreeSet(Comparator<? super E> comparator) {
+    this(new TreeSet<E>(comparator));
+  }
+
+  public SafeTreeSet(SortedSet<E> set) {
+    this(new TreeSet<E>(set));
+  }
+
+  private SafeTreeSet(NavigableSet<E> delegate) {
+    this.delegate = delegate;
+    for (E e : this) {
+      checkValid(e);
+    }
+  }
+
+  @Override public boolean add(E element) {
+    return delegate.add(checkValid(element));
+  }
+
+  @Override public boolean addAll(Collection<? extends E> collection) {
+    for (E e : collection) {
+      checkValid(e);
+    }
+    return delegate.addAll(collection);
+  }
+
+  @Override public E ceiling(E e) {
+    return delegate.ceiling(checkValid(e));
+  }
+
+  @Override public void clear() {
+    delegate.clear();
+  }
+
+  @SuppressWarnings("unchecked")
+  @Override public Comparator<? super E> comparator() {
+    Comparator<? super E> comparator = delegate.comparator();
+    if (comparator == null) {
+      comparator = NATURAL_ORDER;
+    }
+    return comparator;
+  }
+
+  @Override public boolean contains(Object object) {
+    return delegate.contains(checkValid(object));
+  }
+
+  @Override public boolean containsAll(Collection<?> c) {
+    return delegate.containsAll(c);
+  }
+
+  @Override public Iterator<E> descendingIterator() {
+    return delegate.descendingIterator();
+  }
+
+  @Override public NavigableSet<E> descendingSet() {
+    return new SafeTreeSet<E>(delegate.descendingSet());
+  }
+
+  @Override public E first() {
+    return delegate.first();
+  }
+
+  @Override public E floor(E e) {
+    return delegate.floor(checkValid(e));
+  }
+
+  @Override public SortedSet<E> headSet(E toElement) {
+    return headSet(toElement, false);
+  }
+
+  @Override public NavigableSet<E> headSet(E toElement, boolean inclusive) {
+    return new SafeTreeSet<E>(
+        delegate.headSet(checkValid(toElement), inclusive));
+  }
+
+  @Override public E higher(E e) {
+    return delegate.higher(checkValid(e));
+  }
+
+  @Override public boolean isEmpty() {
+    return delegate.isEmpty();
+  }
+
+  @Override public Iterator<E> iterator() {
+    return delegate.iterator();
+  }
+
+  @Override public E last() {
+    return delegate.last();
+  }
+
+  @Override public E lower(E e) {
+    return delegate.lower(checkValid(e));
+  }
+
+  @Override public E pollFirst() {
+    return delegate.pollFirst();
+  }
+
+  @Override public E pollLast() {
+    return delegate.pollLast();
+  }
+
+  @Override public boolean remove(Object object) {
+    return delegate.remove(checkValid(object));
+  }
+
+  @Override public boolean removeAll(Collection<?> c) {
+    return delegate.removeAll(c);
+  }
+
+  @Override public boolean retainAll(Collection<?> c) {
+    return delegate.retainAll(c);
+  }
+
+  @Override public int size() {
+    return delegate.size();
+  }
+
+  @Override public NavigableSet<E> subSet(
+      E fromElement, boolean fromInclusive, E toElement, boolean toInclusive) {
+    return new SafeTreeSet<E>(
+        delegate.subSet(checkValid(fromElement), fromInclusive,
+            checkValid(toElement), toInclusive));
+  }
+
+  @Override public SortedSet<E> subSet(E fromElement, E toElement) {
+    return subSet(fromElement, true, toElement, false);
+  }
+
+  @Override public SortedSet<E> tailSet(E fromElement) {
+    return tailSet(fromElement, true);
+  }
+
+  @Override public NavigableSet<E> tailSet(E fromElement, boolean inclusive) {
+    return delegate.tailSet(checkValid(fromElement), inclusive);
+  }
+
+  @Override public Object[] toArray() {
+    return delegate.toArray();
+  }
+
+  @Override public <T> T[] toArray(T[] a) {
+    return delegate.toArray(a);
+  }
+
+  private <T> T checkValid(T t) {
+    // a ClassCastException is what's supposed to happen!
+    @SuppressWarnings("unchecked")
+    E e = (E) t;
+    comparator().compare(e, e);
+    return t;
+  }
+
+  @Override public boolean equals(Object obj) {
+    return delegate.equals(obj);
+  }
+
+  @Override public int hashCode() {
+    return delegate.hashCode();
+  }
+
+  @Override public String toString() {
+    return delegate.toString();
+  }
+
+  private static final long serialVersionUID = 0L;
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/SampleElements.java b/guava-testlib/src/com/google/common/collect/testing/SampleElements.java
new file mode 100644
index 0000000..2674dbb
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/SampleElements.java
@@ -0,0 +1,110 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+import java.util.Map;
+
+/**
+ * A container class for the five sample elements we need for testing.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Kevin Bourrillion
+ */
+public class SampleElements<E> {
+  // TODO: rename e3, e4 => missing1, missing2
+  public final E e0;
+  public final E e1;
+  public final E e2;
+  public final E e3;
+  public final E e4;
+
+  public SampleElements(E e0, E e1, E e2, E e3, E e4) {
+    this.e0 = e0;
+    this.e1 = e1;
+    this.e2 = e2;
+    this.e3 = e3;
+    this.e4 = e4;
+  }
+
+  public static class Strings extends SampleElements<String> {
+    public Strings() {
+      // elements aren't sorted, to better test SortedSet iteration ordering
+      super("b", "a", "c", "d", "e");
+    }
+
+    // for testing SortedSet and SortedMap methods
+    public static final String BEFORE_FIRST = "\0";
+    public static final String BEFORE_FIRST_2 = "\0\0";
+    public static final String MIN_ELEMENT = "a";
+    public static final String AFTER_LAST = "z";
+    public static final String AFTER_LAST_2 = "zz";
+  }
+
+  public static class Enums extends SampleElements<AnEnum> {
+    public Enums() {
+      // elements aren't sorted, to better test SortedSet iteration ordering
+      super(AnEnum.B, AnEnum.A, AnEnum.C, AnEnum.D, AnEnum.E);
+    }
+  }
+
+  public static <K, V> SampleElements<Map.Entry<K, V>> mapEntries(
+      SampleElements<K> keys, SampleElements<V> values) {
+    return new SampleElements<Map.Entry<K, V>>(
+        Helpers.mapEntry(keys.e0, values.e0),
+        Helpers.mapEntry(keys.e1, values.e1),
+        Helpers.mapEntry(keys.e2, values.e2),
+        Helpers.mapEntry(keys.e3, values.e3),
+        Helpers.mapEntry(keys.e4, values.e4));
+  }
+
+  public static class Unhashables extends SampleElements<UnhashableObject> {
+    public Unhashables() {
+      super(new UnhashableObject(1),
+          new UnhashableObject(2),
+          new UnhashableObject(3),
+          new UnhashableObject(4),
+          new UnhashableObject(5));
+    }
+  }
+
+  public static class Colliders extends SampleElements<Object> {
+    public Colliders() {
+      super(new Collider(1),
+          new Collider(2),
+          new Collider(3),
+          new Collider(4),
+          new Collider(5));
+    }
+  }
+
+  private static class Collider {
+    final int value;
+
+    Collider(int value) {
+      this.value = value;
+    }
+
+    @Override public boolean equals(Object obj) {
+      return obj instanceof Collider && ((Collider) obj).value == value;
+    }
+
+    @Override public int hashCode() {
+      return 1; // evil!
+    }
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/SetTestSuiteBuilder.java b/guava-testlib/src/com/google/common/collect/testing/SetTestSuiteBuilder.java
new file mode 100644
index 0000000..5440d72
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/SetTestSuiteBuilder.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+import com.google.common.collect.testing.testers.SetAddAllTester;
+import com.google.common.collect.testing.testers.SetAddTester;
+import com.google.common.collect.testing.testers.SetCreationTester;
+import com.google.common.collect.testing.testers.SetEqualsTester;
+import com.google.common.collect.testing.testers.SetHashCodeTester;
+import com.google.common.collect.testing.testers.SetRemoveTester;
+
+import java.util.List;
+
+/**
+ * Creates, based on your criteria, a JUnit test suite that exhaustively tests
+ * a Set implementation.
+ *
+ * @author George van den Driessche
+ */
+public class SetTestSuiteBuilder<E>
+    extends AbstractCollectionTestSuiteBuilder<SetTestSuiteBuilder<E>, E> {
+  public static <E> SetTestSuiteBuilder<E> using(
+      TestSetGenerator<E> generator) {
+    return new SetTestSuiteBuilder<E>().usingGenerator(generator);
+  }
+
+  @Override protected List<Class<? extends AbstractTester>> getTesters() {
+    List<Class<? extends AbstractTester>> testers
+        = Helpers.copyToList(super.getTesters());
+
+    testers.add(SetAddAllTester.class);
+    testers.add(SetAddTester.class);
+    testers.add(SetCreationTester.class);
+    testers.add(SetHashCodeTester.class);
+    testers.add(SetEqualsTester.class);
+    testers.add(SetRemoveTester.class);
+    // SetRemoveAllTester doesn't exist because, Sets not permitting
+    // duplicate elements, there are no tests for Set.removeAll() that aren't
+    // covered by CollectionRemoveAllTester.
+    return testers;
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/SortedMapInterfaceTest.java b/guava-testlib/src/com/google/common/collect/testing/SortedMapInterfaceTest.java
new file mode 100644
index 0000000..fdf6632
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/SortedMapInterfaceTest.java
@@ -0,0 +1,372 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.NoSuchElementException;
+import java.util.Set;
+import java.util.SortedMap;
+
+/**
+ * Tests representing the contract of {@link SortedMap}. Concrete subclasses of
+ * this base class test conformance of concrete {@link SortedMap} subclasses to
+ * that contract.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Jared Levy
+ */
+// TODO: Use this class to test classes besides ImmutableSortedMap.
+public abstract class SortedMapInterfaceTest<K, V>
+    extends MapInterfaceTest<K, V> {
+
+  /** A key type that is not assignable to any classes but Object. */
+  private static final class IncompatibleComparableKeyType
+      implements Comparable<IncompatibleComparableKeyType> {
+    @Override public String toString() {
+      return "IncompatibleComparableKeyType";
+    }
+    @Override
+    public int compareTo(IncompatibleComparableKeyType o) {
+      throw new ClassCastException();
+    }
+  }
+
+  protected SortedMapInterfaceTest(boolean allowsNullKeys,
+      boolean allowsNullValues, boolean supportsPut, boolean supportsRemove,
+      boolean supportsClear) {
+    super(allowsNullKeys, allowsNullValues, supportsPut, supportsRemove,
+        supportsClear);
+  }
+
+  @Override protected abstract SortedMap<K, V> makeEmptyMap()
+      throws UnsupportedOperationException;
+
+  @Override protected abstract SortedMap<K, V> makePopulatedMap()
+      throws UnsupportedOperationException;
+
+  @Override protected SortedMap<K, V> makeEitherMap() {
+    try {
+      return makePopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return makeEmptyMap();
+    }
+  }
+
+  @SuppressWarnings("unchecked") // Needed for null comparator
+  public void testOrdering() {
+    final SortedMap<K, V> map;
+    try {
+      map = makePopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    Iterator<K> iterator = map.keySet().iterator();
+    K prior = iterator.next();
+    Comparator<? super K> comparator = map.comparator();
+    while (iterator.hasNext()) {
+      K current = iterator.next();
+      if (comparator == null) {
+        Comparable comparable = (Comparable) prior;
+        assertTrue(comparable.compareTo(current) < 0);
+      } else {
+        assertTrue(map.comparator().compare(prior, current) < 0);
+      }
+      current = prior;
+    }
+  }
+
+  public void testEntrySetContainsEntryIncompatibleComparableKey() {
+    final Map<K, V> map;
+    final Set<Entry<K, V>> entrySet;
+    try {
+      map = makeEitherMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    assertInvariants(map);
+
+    entrySet = map.entrySet();
+    final V unmappedValue;
+    try {
+      unmappedValue = getValueNotInPopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    Entry<IncompatibleComparableKeyType, V> entry
+        = mapEntry(new IncompatibleComparableKeyType(), unmappedValue);
+    assertFalse(entrySet.contains(entry));
+  }
+
+  public void testFirstKeyEmpty() {
+    final SortedMap<K, V> map;
+    try {
+      map = makeEmptyMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    try {
+      map.firstKey();
+      fail("Expected NoSuchElementException");
+    } catch (NoSuchElementException expected) {}
+    assertInvariants(map);
+  }
+
+  public void testFirstKeyNonEmpty() {
+    final SortedMap<K, V> map;
+    try {
+      map = makePopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    K expected = map.keySet().iterator().next();
+    assertEquals(expected, map.firstKey());
+    assertInvariants(map);
+  }
+
+  public void testLastKeyEmpty() {
+    final SortedMap<K, V> map;
+    try {
+      map = makeEmptyMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    try {
+      map.lastKey();
+      fail("Expected NoSuchElementException");
+    } catch (NoSuchElementException expected) {}
+    assertInvariants(map);
+  }
+
+  public void testLastKeyNonEmpty() {
+    final SortedMap<K, V> map;
+    try {
+      map = makePopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    K expected = null;
+    for (K key : map.keySet()) {
+      expected = key;
+    }
+    assertEquals(expected, map.lastKey());
+    assertInvariants(map);
+  }
+
+  private static <E> List<E> toList(Collection<E> collection) {
+    return new ArrayList<E>(collection);
+  }
+
+  private static <E> List<E> subListSnapshot(
+      List<E> list, int fromIndex, int toIndex) {
+    List<E> subList = new ArrayList<E>();
+    for (int i = fromIndex; i < toIndex; i++) {
+      subList.add(list.get(i));
+    }
+    return Collections.unmodifiableList(subList);
+  }
+
+  public void testHeadMap() {
+    final SortedMap<K, V> map;
+    try {
+      map = makeEitherMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    List<Entry<K, V>> list = toList(map.entrySet());
+    for (int i = 0; i < list.size(); i++) {
+      List<Entry<K, V>> expected = subListSnapshot(list, 0, i);
+      SortedMap<K, V> headMap = map.headMap(list.get(i).getKey());
+      assertEquals(expected, toList(headMap.entrySet()));
+    }
+  }
+
+  public void testTailMap() {
+    final SortedMap<K, V> map;
+    try {
+      map = makeEitherMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    List<Entry<K, V>> list = toList(map.entrySet());
+    for (int i = 0; i < list.size(); i++) {
+      List<Entry<K, V>> expected = subListSnapshot(list, i, list.size());
+      SortedMap<K, V> tailMap = map.tailMap(list.get(i).getKey());
+      assertEquals(expected, toList(tailMap.entrySet()));
+    }
+  }
+
+  public void testSubMap() {
+    final SortedMap<K, V> map;
+    try {
+      map = makeEitherMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    List<Entry<K, V>> list = toList(map.entrySet());
+    for (int i = 0; i < list.size(); i++) {
+      for (int j = i; j < list.size(); j++) {
+        List<Entry<K, V>> expected = subListSnapshot(list, i, j);
+        SortedMap<K, V> subMap
+            = map.subMap(list.get(i).getKey(), list.get(j).getKey());
+        assertEquals(expected, toList(subMap.entrySet()));
+      }
+    }
+  }
+
+  public void testSubMapIllegal() {
+    final SortedMap<K, V> map;
+    try {
+      map = makePopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    if (map.size() < 2) {
+      return;
+    }
+    Iterator<K> iterator = map.keySet().iterator();
+    K first = iterator.next();
+    K second = iterator.next();
+    try {
+      map.subMap(second, first);
+      fail("Expected IllegalArgumentException");
+    } catch (IllegalArgumentException expected) {}
+  }
+
+  public void testTailMapEntrySet() {
+    final SortedMap<K, V> map;
+    try {
+      map = makePopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    if (map.size() < 3) {
+      return;
+    }
+    Iterator<Entry<K, V>> iterator = map.entrySet().iterator();
+    Entry<K, V> firstEntry = iterator.next();
+    Entry<K, V> secondEntry = iterator.next();
+    Entry<K, V> thirdEntry = iterator.next();
+    SortedMap<K, V> tail = map.tailMap(secondEntry.getKey());
+    Set<Entry<K, V>> tailEntrySet = tail.entrySet();
+    assertTrue(tailEntrySet.contains(thirdEntry));
+    assertTrue(tailEntrySet.contains(secondEntry));
+    assertFalse(tailEntrySet.contains(firstEntry));
+    assertEquals(tail.firstKey(), secondEntry.getKey());
+  }
+
+  public void testHeadMapEntrySet() {
+    final SortedMap<K, V> map;
+    try {
+      map = makePopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    if (map.size() < 3) {
+      return;
+    }
+    Iterator<Entry<K, V>> iterator = map.entrySet().iterator();
+    Entry<K, V> firstEntry = iterator.next();
+    Entry<K, V> secondEntry = iterator.next();
+    Entry<K, V> thirdEntry = iterator.next();
+    SortedMap<K, V> head = map.headMap(secondEntry.getKey());
+    Set<Entry<K, V>> headEntrySet = head.entrySet();
+    assertFalse(headEntrySet.contains(thirdEntry));
+    assertFalse(headEntrySet.contains(secondEntry));
+    assertTrue(headEntrySet.contains(firstEntry));
+    assertEquals(head.firstKey(), firstEntry.getKey());
+    assertEquals(head.lastKey(), firstEntry.getKey());
+  }
+
+  public void testTailMapWriteThrough() {
+    final SortedMap<K, V> map;
+    try {
+      map = makePopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    if (map.size() < 2 || !supportsPut) {
+      return;
+    }
+    Iterator<Entry<K, V>> iterator = map.entrySet().iterator();
+    Entry<K, V> firstEntry = iterator.next();
+    Entry<K, V> secondEntry = iterator.next();
+    K key = secondEntry.getKey();
+    SortedMap<K, V> subMap = map.tailMap(key);
+    V value = getValueNotInPopulatedMap();
+    subMap.put(key, value);
+    assertEquals(secondEntry.getValue(), value);
+    assertEquals(map.get(key), value);
+    try {
+      subMap.put(firstEntry.getKey(), value);
+      fail("Expected IllegalArgumentException");
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  public void testTailMapRemoveThrough() {
+    final SortedMap<K, V> map;
+    try {
+      map = makePopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    int oldSize = map.size();
+    if (map.size() < 2 || !supportsRemove) {
+      return;
+    }
+    Iterator<Entry<K, V>> iterator = map.entrySet().iterator();
+    Entry<K, V> firstEntry = iterator.next();
+    Entry<K, V> secondEntry = iterator.next();
+    K key = secondEntry.getKey();
+    SortedMap<K, V> subMap = map.tailMap(key);
+    subMap.remove(key);
+    assertNull(subMap.remove(firstEntry.getKey()));
+    assertEquals(map.size(), oldSize - 1);
+    assertFalse(map.containsKey(key));
+    assertEquals(subMap.size(), oldSize - 2);
+  }
+
+  public void testTailMapClearThrough() {
+    final SortedMap<K, V> map;
+    try {
+      map = makePopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    int oldSize = map.size();
+    if (map.size() < 2 || !supportsClear) {
+      return;
+    }
+    Iterator<Entry<K, V>> iterator = map.entrySet().iterator();
+    Entry<K, V> firstEntry = iterator.next();
+    Entry<K, V> secondEntry = iterator.next();
+    K key = secondEntry.getKey();
+    SortedMap<K, V> subMap = map.tailMap(key);
+    int subMapSize = subMap.size();
+    subMap.clear();
+    assertEquals(map.size(), oldSize - subMapSize);
+    assertTrue(subMap.isEmpty());
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/TestCollectionGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestCollectionGenerator.java
new file mode 100644
index 0000000..92367a2
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/TestCollectionGenerator.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+import java.util.Collection;
+
+/**
+ * Creates collections, containing sample elements, to be tested.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Kevin Bourrillion
+ */
+public interface TestCollectionGenerator<E>
+    extends TestContainerGenerator<Collection<E>, E> {
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/TestCollidingSetGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestCollidingSetGenerator.java
new file mode 100644
index 0000000..ed26b65
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/TestCollidingSetGenerator.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+import com.google.common.collect.testing.SampleElements.Colliders;
+
+import java.util.List;
+
+/**
+ * A generator using sample elements whose hash codes all collide badly.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Kevin Bourrillion
+ */
+public abstract class TestCollidingSetGenerator
+    implements TestSetGenerator<Object> {
+  @Override
+  public SampleElements<Object> samples() {
+    return new Colliders();
+  }
+
+  @Override
+  public Object[] createArray(int length) {
+    return new Object[length];
+  }
+
+  /** Returns the original element list, unchanged. */
+  @Override
+  public List<Object> order(List<Object> insertionOrder) {
+    return insertionOrder;
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/TestContainerGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestContainerGenerator.java
new file mode 100644
index 0000000..1511040
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/TestContainerGenerator.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * To be implemented by test generators of things that can contain
+ * elements. Such things include both {@link Collection} and {@link Map}; since
+ * there isn't an established collective noun that encompasses both of these,
+ * 'container' is used.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author George van den Driessche
+ */
+public interface TestContainerGenerator<T, E> {
+  /**
+   * Returns the sample elements that this generate populates its container
+   * with.
+   */
+  SampleElements<E> samples();
+
+  /**
+   * Creates a new container containing the given elements. TODO: would be nice
+   * to figure out how to use E... or E[] as a parameter type, but this doesn't
+   * seem to work because Java creates an array of the erased type.
+   */
+  T create(Object ... elements);
+
+  /**
+   * Helper method to create an array of the appropriate type used by this
+   * generator. The returned array will contain only nulls.
+   */
+  E[] createArray(int length);
+
+  /**
+   * Returns the iteration ordering of elements, given the order in
+   * which they were added to the container. This method may return the
+   * original list unchanged, the original list modified in place, or a
+   * different list.
+   *
+   * <p>This method runs only when {@link
+   * com.google.common.collect.testing.features.CollectionFeature#KNOWN_ORDER}
+   * is specified when creating the test suite. It should never run when testing
+   * containers such as {@link java.util.HashSet}, which have a
+   * non-deterministic iteration order.
+   */
+  Iterable<E> order(List<E> insertionOrder);
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/TestEnumMapGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestEnumMapGenerator.java
new file mode 100644
index 0000000..42bc48a
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/TestEnumMapGenerator.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+/**
+ * Implementation helper for {@link TestMapGenerator} for use with enum maps.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Kevin Bourrillion
+ */
+public abstract class TestEnumMapGenerator
+    implements TestMapGenerator<AnEnum, String> {
+
+  @Override
+  public SampleElements<Entry<AnEnum, String>> samples() {
+    return new SampleElements<Entry<AnEnum, String>>(
+        Helpers.mapEntry(AnEnum.A, "January"),
+        Helpers.mapEntry(AnEnum.B, "February"),
+        Helpers.mapEntry(AnEnum.C, "March"),
+        Helpers.mapEntry(AnEnum.D, "April"),
+        Helpers.mapEntry(AnEnum.E, "May")
+    );
+  }
+
+  @Override
+  public final Map<AnEnum, String> create(Object... entries) {
+    @SuppressWarnings("unchecked")
+    Entry<AnEnum, String>[] array = new Entry[entries.length];
+    int i = 0;
+    for (Object o : entries) {
+      @SuppressWarnings("unchecked")
+      Entry<AnEnum, String> e = (Entry<AnEnum, String>) o;
+      array[i++] = e;
+    }
+    return create(array);
+  }
+
+  protected abstract Map<AnEnum, String> create(
+      Entry<AnEnum, String>[] entries);
+
+  @Override
+  @SuppressWarnings("unchecked")
+  public final Entry<AnEnum, String>[] createArray(int length) {
+    return new Entry[length];
+  }
+
+  @Override
+  public final AnEnum[] createKeyArray(int length) {
+    return new AnEnum[length];
+  }
+
+  @Override
+  public final String[] createValueArray(int length) {
+    return new String[length];
+  }
+
+  /** Returns the original element list, unchanged. */
+  @Override
+  public Iterable<Entry<AnEnum, String>> order(
+      List<Entry<AnEnum, String>> insertionOrder) {
+    return insertionOrder;
+  }
+}
\ No newline at end of file
diff --git a/guava-testlib/src/com/google/common/collect/testing/TestEnumSetGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestEnumSetGenerator.java
new file mode 100644
index 0000000..fd7155c
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/TestEnumSetGenerator.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+import com.google.common.collect.testing.SampleElements.Enums;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * An abstract TestSetGenerator for generating sets containing enum values.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Kevin Bourrillion
+ */
+public abstract class TestEnumSetGenerator implements TestSetGenerator<AnEnum> {
+  @Override
+  public SampleElements<AnEnum> samples() {
+    return new Enums();
+  }
+
+  @Override
+  public Set<AnEnum> create(Object... elements) {
+    AnEnum[] array = new AnEnum[elements.length];
+    int i = 0;
+    for (Object e : elements) {
+      array[i++] = (AnEnum) e;
+    }
+    return create(array);
+  }
+
+  protected abstract Set<AnEnum> create(AnEnum[] elements);
+
+  @Override
+  public AnEnum[] createArray(int length) {
+    return new AnEnum[length];
+  }
+
+  /**
+   * Sorts the enums according to their natural ordering.
+   */
+  @Override
+  public List<AnEnum> order(List<AnEnum> insertionOrder) {
+    Collections.sort(insertionOrder);
+    return insertionOrder;
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/TestIteratorGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestIteratorGenerator.java
new file mode 100644
index 0000000..1c718c5
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/TestIteratorGenerator.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+import java.util.Iterator;
+
+/**
+ * Creates iterators to be tested.
+ *
+ * @param <E> the element type of the iterator.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author George van den Driessche
+ */
+public interface TestIteratorGenerator<E> {
+  Iterator<E> get();
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/TestListGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestListGenerator.java
new file mode 100644
index 0000000..11e2604
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/TestListGenerator.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+import java.util.List;
+
+/**
+ * Creates sets, containing sample elements, to be tested.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Kevin Bourrillion
+ */
+public interface TestListGenerator<E> extends TestCollectionGenerator<E> {
+  @Override
+  List<E> create(Object... elements);
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/TestMapEntrySetGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestMapEntrySetGenerator.java
new file mode 100644
index 0000000..e1a9611
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/TestMapEntrySetGenerator.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Creates map entries using sample keys and sample values.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Jesse Wilson
+ */
+public abstract class TestMapEntrySetGenerator<K, V>
+    implements TestSetGenerator<Map.Entry<K, V>> {
+  private final SampleElements<K> keys;
+  private final SampleElements<V> values;
+
+  protected TestMapEntrySetGenerator(
+      SampleElements<K> keys, SampleElements<V> values) {
+    this.keys = keys;
+    this.values = values;
+  }
+
+  @Override
+  public SampleElements<Map.Entry<K, V>> samples() {
+    return SampleElements.mapEntries(keys, values);
+  }
+
+  @Override
+  public Set<Map.Entry<K, V>> create(Object... elements) {
+    Map.Entry<K, V>[] entries = createArray(elements.length);
+    Platform.unsafeArrayCopy(elements, 0, entries, 0, elements.length);
+    return createFromEntries(entries);
+  }
+
+  public abstract Set<Map.Entry<K, V>> createFromEntries(
+      Map.Entry<K, V>[] entries);
+
+  @Override
+  @SuppressWarnings("unchecked") // generic arrays make typesafety sad
+  public Map.Entry<K, V>[] createArray(int length) {
+    return new Map.Entry[length];
+  }
+
+  /** Returns the original element list, unchanged. */
+  @Override
+  public List<Map.Entry<K, V>> order(List<Map.Entry<K, V>> insertionOrder) {
+    return insertionOrder;
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/TestMapGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestMapGenerator.java
new file mode 100644
index 0000000..e7add5a
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/TestMapGenerator.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+import java.util.Map;
+
+/**
+ * Creates maps, containing sample elements, to be tested.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author George van den Driessche
+ */
+public interface TestMapGenerator<K, V>
+    extends TestContainerGenerator<Map<K, V>, Map.Entry<K, V>> {
+  K[] createKeyArray(int length);
+
+  V[] createValueArray(int length);
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/TestQueueGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestQueueGenerator.java
new file mode 100644
index 0000000..f8d8dc6
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/TestQueueGenerator.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+import java.util.Queue;
+
+/**
+ * Creates queues, containing sample elements, to be tested.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Jared Levy
+ */
+public interface TestQueueGenerator<E> extends TestCollectionGenerator<E> {
+  @Override
+  Queue<E> create(Object... elements);
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/TestSetGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestSetGenerator.java
new file mode 100644
index 0000000..106112b
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/TestSetGenerator.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+import java.util.Set;
+
+/**
+ * Creates sets, containing sample elements, to be tested.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Kevin Bourrillion
+ */
+public interface TestSetGenerator<E> extends TestCollectionGenerator<E> {
+  @Override
+  Set<E> create(Object... elements);
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/TestStringCollectionGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestStringCollectionGenerator.java
new file mode 100644
index 0000000..2248853
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/TestStringCollectionGenerator.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+import com.google.common.collect.testing.SampleElements.Strings;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * String creation for testing arbitrary collections.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Jared Levy
+ */
+public abstract class TestStringCollectionGenerator
+    implements TestCollectionGenerator<String> {
+  @Override
+  public SampleElements<String> samples() {
+    return new Strings();
+  }
+
+  @Override
+  public Collection<String> create(Object... elements) {
+    String[] array = new String[elements.length];
+    int i = 0;
+    for (Object e : elements) {
+      array[i++] = (String) e;
+    }
+    return create(array);
+  }
+
+  protected abstract Collection<String> create(String[] elements);
+
+  @Override
+  public String[] createArray(int length) {
+    return new String[length];
+  }
+
+  /** Returns the original element list, unchanged. */
+  @Override
+  public List<String> order(List<String> insertionOrder) {
+    return insertionOrder;
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/TestStringListGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestStringListGenerator.java
new file mode 100644
index 0000000..ea024ad
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/TestStringListGenerator.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+import com.google.common.collect.testing.SampleElements.Strings;
+
+import java.util.List;
+
+/**
+ * TODO: javadoc.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Kevin Bourrillion
+ */
+public abstract class TestStringListGenerator
+    implements TestListGenerator<String> {
+  @Override
+  public SampleElements<String> samples() {
+    return new Strings();
+  }
+
+  @Override
+  public List<String> create(Object... elements) {
+    String[] array = new String[elements.length];
+    int i = 0;
+    for (Object e : elements) {
+      array[i++] = (String) e;
+    }
+    return create(array);
+  }
+
+  /**
+   * Creates a new collection containing the given elements; implement this
+   * method instead of {@link #create(Object...)}.
+   */
+  protected abstract List<String> create(String[] elements);
+
+  @Override
+  public String[] createArray(int length) {
+    return new String[length];
+  }
+
+  /** Returns the original element list, unchanged. */
+  @Override
+  public List<String> order(List<String> insertionOrder) {
+    return insertionOrder;
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/TestStringMapGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestStringMapGenerator.java
new file mode 100644
index 0000000..2f9b51b
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/TestStringMapGenerator.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+/**
+ * Implementation helper for {@link TestMapGenerator} for use with maps of
+ * strings.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Chris Povirk
+ * @author Jared Levy
+ * @author George van den Driessche
+ */
+public abstract class TestStringMapGenerator
+    implements TestMapGenerator<String, String> {
+
+  @Override
+  public SampleElements<Map.Entry<String, String>> samples() {
+    return new SampleElements<Map.Entry<String, String>>(
+        Helpers.mapEntry("one", "January"),
+        Helpers.mapEntry("two", "February"),
+        Helpers.mapEntry("three", "March"),
+        Helpers.mapEntry("four", "April"),
+        Helpers.mapEntry("five", "May")
+    );
+  }
+
+  @Override
+  public final Map<String, String> create(Object... entries) {
+    @SuppressWarnings("unchecked")
+    Entry<String, String>[] array = new Entry[entries.length];
+    int i = 0;
+    for (Object o : entries) {
+      @SuppressWarnings("unchecked")
+      Entry<String, String> e = (Entry<String, String>) o;
+      array[i++] = e;
+    }
+    return create(array);
+  }
+
+  protected abstract Map<String, String> create(
+      Entry<String, String>[] entries);
+
+  @Override
+  @SuppressWarnings("unchecked")
+  public final Entry<String, String>[] createArray(int length) {
+    return new Entry[length];
+  }
+
+  @Override
+  public final String[] createKeyArray(int length) {
+    return new String[length];
+  }
+
+  @Override
+  public final String[] createValueArray(int length) {
+    return new String[length];
+  }
+
+  /** Returns the original element list, unchanged. */
+  @Override
+  public Iterable<Entry<String, String>> order(
+      List<Entry<String, String>> insertionOrder) {
+    return insertionOrder;
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/TestStringQueueGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestStringQueueGenerator.java
new file mode 100644
index 0000000..d116044
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/TestStringQueueGenerator.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+import com.google.common.collect.testing.SampleElements.Strings;
+
+import java.util.List;
+import java.util.Queue;
+
+/**
+ * Create queue of strings for tests.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Jared Levy
+ */
+public abstract class TestStringQueueGenerator
+    implements TestQueueGenerator<String>
+{
+  @Override
+  public SampleElements<String> samples() {
+    return new Strings();
+  }
+
+  @Override
+  public Queue<String> create(Object... elements) {
+    String[] array = new String[elements.length];
+    int i = 0;
+    for (Object e : elements) {
+      array[i++] = (String) e;
+    }
+    return create(array);
+  }
+
+  protected abstract Queue<String> create(String[] elements);
+
+  @Override
+  public String[] createArray(int length) {
+    return new String[length];
+  }
+
+  /** Returns the original element list, unchanged. */
+  @Override
+  public List<String> order(List<String> insertionOrder) {
+    return insertionOrder;
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/TestStringSetGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestStringSetGenerator.java
new file mode 100644
index 0000000..712b533
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/TestStringSetGenerator.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+import com.google.common.collect.testing.SampleElements.Strings;
+
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Create string sets for collection tests.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Kevin Bourrillion
+ */
+public abstract class TestStringSetGenerator implements TestSetGenerator<String>
+{
+  @Override
+  public SampleElements<String> samples() {
+    return new Strings();
+  }
+
+  @Override
+  public Set<String> create(Object... elements) {
+    String[] array = new String[elements.length];
+    int i = 0;
+    for (Object e : elements) {
+      array[i++] = (String) e;
+    }
+    return create(array);
+  }
+
+  protected abstract Set<String> create(String[] elements);
+
+  @Override
+  public String[] createArray(int length) {
+    return new String[length];
+  }
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>By default, returns the supplied elements in their given order; however,
+   * generators for containers with a known order other than insertion order
+   * must override this method.
+   *
+   * <p>Note: This default implementation is overkill (but valid) for an
+   * unordered container. An equally valid implementation for an unordered
+   * container is to throw an exception. The chosen implementation, however, has
+   * the advantage of working for insertion-ordered containers, as well.
+   */
+  @Override
+  public List<String> order(List<String> insertionOrder) {
+    return insertionOrder;
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/TestStringSortedSetGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestStringSortedSetGenerator.java
new file mode 100644
index 0000000..833ffe9
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/TestStringSortedSetGenerator.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.SortedSet;
+
+/**
+ * Create string sets for testing collections that are sorted by natural
+ * ordering.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Jared Levy
+ */
+public abstract class TestStringSortedSetGenerator
+    extends TestStringSetGenerator {
+  @Override protected abstract SortedSet<String> create(String[] elements);
+
+  /** Sorts the elements by their natural ordering. */
+  @Override public List<String> order(List<String> insertionOrder) {
+    Collections.sort(insertionOrder);
+    return insertionOrder;
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/TestSubjectGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestSubjectGenerator.java
new file mode 100644
index 0000000..fa8970d
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/TestSubjectGenerator.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+/**
+ * To be implemented by test generators that can produce test subjects without
+ * requiring any parameters.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @param <T> the type created by this generator.
+ *
+ * @author George van den Driessche
+ */
+public interface TestSubjectGenerator<T> {
+  T createTestSubject();
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/TestUnhashableCollectionGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestUnhashableCollectionGenerator.java
new file mode 100644
index 0000000..3010b47
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/TestUnhashableCollectionGenerator.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+import com.google.common.collect.testing.SampleElements.Unhashables;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * Creates collections containing unhashable sample elements, to be tested.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Regina O'Dell
+ */
+public abstract class
+    TestUnhashableCollectionGenerator<T extends Collection<UnhashableObject>>
+    implements TestCollectionGenerator<UnhashableObject> {
+  @Override
+  public SampleElements<UnhashableObject> samples() {
+    return new Unhashables();
+  }
+
+  @Override
+  public T create(Object... elements) {
+    UnhashableObject[] array = createArray(elements.length);
+    int i = 0;
+    for (Object e : elements) {
+      array[i++] = (UnhashableObject) e;
+    }
+    return create(array);
+  }
+
+  /**
+   * Creates a new collection containing the given elements; implement this
+   * method instead of {@link #create(Object...)}.
+   */
+  protected abstract T create(UnhashableObject[] elements);
+
+  @Override
+  public UnhashableObject[] createArray(int length) {
+    return new UnhashableObject[length];
+  }
+
+  @Override
+  public Iterable<UnhashableObject> order(
+      List<UnhashableObject> insertionOrder) {
+    return insertionOrder;
+  }
+}
\ No newline at end of file
diff --git a/guava-testlib/src/com/google/common/collect/testing/TestsForListsInJavaUtil.java b/guava-testlib/src/com/google/common/collect/testing/TestsForListsInJavaUtil.java
new file mode 100644
index 0000000..c9961f3
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/TestsForListsInJavaUtil.java
@@ -0,0 +1,277 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.ListFeature;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import java.lang.reflect.Method;
+import java.util.AbstractList;
+import java.util.AbstractSequentialList;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+/**
+ * Generates a test suite covering the {@link List} implementations in the
+ * {@link java.util} package. Can be subclassed to specify tests that should
+ * be suppressed.
+ *
+ * @author Kevin Bourrillion
+ */
+public class TestsForListsInJavaUtil {
+  public static Test suite() {
+    return new TestsForListsInJavaUtil().allTests();
+  }
+
+  public Test allTests() {
+    TestSuite suite = new TestSuite("java.util Lists");
+    suite.addTest(testsForEmptyList());
+    suite.addTest(testsForSingletonList());
+    suite.addTest(testsForArraysAsList());
+    suite.addTest(testsForArrayList());
+    suite.addTest(testsForLinkedList());
+    suite.addTest(testsForCopyOnWriteArrayList());
+    suite.addTest(testsForUnmodifiableList());
+    suite.addTest(testsForCheckedList());
+    suite.addTest(testsForAbstractList());
+    suite.addTest(testsForAbstractSequentialList());
+    return suite;
+  }
+
+  protected Collection<Method> suppressForEmptyList() {
+    return Collections.emptySet();
+  }
+  protected Collection<Method> suppressForSingletonList() {
+    return Collections.emptySet();
+  }
+  protected Collection<Method> suppressForArraysAsList() {
+    return Collections.emptySet();
+  }
+  protected Collection<Method> suppressForArrayList() {
+    return Collections.emptySet();
+  }
+  protected Collection<Method> suppressForLinkedList() {
+    return Collections.emptySet();
+  }
+  protected Collection<Method> suppressForCopyOnWriteArrayList() {
+    return Collections.emptySet();
+  }
+  protected Collection<Method> suppressForUnmodifiableList() {
+    return Collections.emptySet();
+  }
+  protected Collection<Method> suppressForCheckedList() {
+    return Collections.emptySet();
+  }
+  protected Collection<Method> suppressForAbstractList() {
+    return Collections.emptySet();
+  }
+  protected Collection<Method> suppressForAbstractSequentialList() {
+    return Collections.emptySet();
+  }
+
+  public Test testsForEmptyList() {
+    return ListTestSuiteBuilder
+        .using(new TestStringListGenerator() {
+            @Override public List<String> create(String[] elements) {
+              return Collections.emptyList();
+            }
+          })
+        .named("emptyList")
+        .withFeatures(
+            CollectionFeature.NONE,
+            CollectionSize.ZERO)
+        .suppressing(suppressForEmptyList())
+        .createTestSuite();
+  }
+
+  public Test testsForSingletonList() {
+    return ListTestSuiteBuilder
+        .using(new TestStringListGenerator() {
+            @Override public List<String> create(String[] elements) {
+              return Collections.singletonList(elements[0]);
+            }
+          })
+        .named("singletonList")
+        .withFeatures(
+            CollectionFeature.NONE,
+            CollectionFeature.ALLOWS_NULL_VALUES,
+            CollectionSize.ONE)
+        .suppressing(suppressForSingletonList())
+        .createTestSuite();
+  }
+
+  public Test testsForArraysAsList() {
+    return ListTestSuiteBuilder
+        .using(new TestStringListGenerator() {
+            @Override public List<String> create(String[] elements) {
+              return Arrays.asList(elements.clone());
+            }
+          })
+        .named("Arrays.asList")
+        .withFeatures(
+            ListFeature.SUPPORTS_SET,
+            CollectionFeature.ALLOWS_NULL_VALUES,
+            CollectionSize.ANY)
+        .suppressing(suppressForArraysAsList())
+        .createTestSuite();
+  }
+
+  public Test testsForArrayList() {
+    return ListTestSuiteBuilder
+        .using(new TestStringListGenerator() {
+            @Override public List<String> create(String[] elements) {
+              return new ArrayList<String>(MinimalCollection.of(elements));
+            }
+          })
+        .named("ArrayList")
+        .withFeatures(
+            ListFeature.GENERAL_PURPOSE,
+            CollectionFeature.ALLOWS_NULL_VALUES,
+            CollectionSize.ANY)
+        .suppressing(suppressForArrayList())
+        .createTestSuite();
+  }
+
+  public Test testsForLinkedList() {
+    return ListTestSuiteBuilder
+        .using(new TestStringListGenerator() {
+            @Override public List<String> create(String[] elements) {
+              return new LinkedList<String>(MinimalCollection.of(elements));
+            }
+          })
+        .named("LinkedList")
+        .withFeatures(
+            ListFeature.GENERAL_PURPOSE,
+            CollectionFeature.ALLOWS_NULL_VALUES,
+            CollectionSize.ANY)
+        .suppressing(suppressForLinkedList())
+        .createTestSuite();
+  }
+
+  public Test testsForCopyOnWriteArrayList() {
+    return ListTestSuiteBuilder
+        .using(new TestStringListGenerator() {
+            @Override public List<String> create(String[] elements) {
+              return new CopyOnWriteArrayList<String>(
+                  MinimalCollection.of(elements));
+            }
+          })
+        .named("CopyOnWriteArrayList")
+        .withFeatures(
+            ListFeature.GENERAL_PURPOSE,
+            CollectionFeature.ALLOWS_NULL_VALUES,
+            CollectionSize.ANY)
+        .suppressing(suppressForCopyOnWriteArrayList())
+        .createTestSuite();
+  }
+
+  public Test testsForUnmodifiableList() {
+    return ListTestSuiteBuilder
+        .using(new TestStringListGenerator() {
+            @Override public List<String> create(String[] elements) {
+              List<String> innerList = new ArrayList<String>();
+              Collections.addAll(innerList, elements);
+              return Collections.unmodifiableList(innerList);
+            }
+          })
+        .named("unmodifiableList/ArrayList")
+        .withFeatures(
+            CollectionFeature.NONE,
+            CollectionFeature.ALLOWS_NULL_VALUES,
+            CollectionSize.ANY)
+        .suppressing(suppressForUnmodifiableList())
+        .createTestSuite();
+  }
+
+  public Test testsForCheckedList() {
+    return ListTestSuiteBuilder
+        .using(new TestStringListGenerator() {
+            @Override public List<String> create(String[] elements) {
+              List<String> innerList = new ArrayList<String>();
+              Collections.addAll(innerList, elements);
+              return Collections.checkedList(innerList, String.class);
+            }
+          })
+        .named("checkedList/ArrayList")
+        .withFeatures(
+            ListFeature.GENERAL_PURPOSE,
+            CollectionFeature.RESTRICTS_ELEMENTS,
+            CollectionFeature.ALLOWS_NULL_VALUES,
+            CollectionSize.ANY)
+        .suppressing(suppressForCheckedList())
+        .createTestSuite();
+  }
+
+  public Test testsForAbstractList() {
+    return ListTestSuiteBuilder
+        .using(new TestStringListGenerator () {
+            @Override protected List<String> create(final String[] elements) {
+              return new AbstractList<String>() {
+                @Override public int size() {
+                  return elements.length;
+                }
+                @Override public String get(int index) {
+                  return elements[index];
+                }
+              };
+            }
+          })
+        .named("AbstractList")
+        .withFeatures(
+            CollectionFeature.NONE,
+            CollectionFeature.ALLOWS_NULL_VALUES,
+            CollectionSize.ANY)
+        .suppressing(suppressForAbstractList())
+        .createTestSuite();
+  }
+
+  public Test testsForAbstractSequentialList() {
+    return ListTestSuiteBuilder
+        .using(new TestStringListGenerator () {
+            @Override protected List<String> create(final String[] elements) {
+              // For this test we trust ArrayList works
+              final List<String> list = new ArrayList<String>();
+              Collections.addAll(list, elements);
+              return new AbstractSequentialList<String>() {
+                @Override public int size() {
+                  return list.size();
+                }
+                @Override public ListIterator<String> listIterator(int index) {
+                  return list.listIterator(index);
+                }
+              };
+            }
+          })
+        .named("AbstractSequentialList")
+        .withFeatures(
+            ListFeature.GENERAL_PURPOSE,
+            CollectionFeature.ALLOWS_NULL_VALUES,
+            CollectionSize.ANY)
+        .suppressing(suppressForAbstractSequentialList())
+        .createTestSuite();
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/TestsForMapsInJavaUtil.java b/guava-testlib/src/com/google/common/collect/testing/TestsForMapsInJavaUtil.java
new file mode 100644
index 0000000..6b71f22
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/TestsForMapsInJavaUtil.java
@@ -0,0 +1,245 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.MapFeature;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import java.lang.reflect.Method;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.EnumMap;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.TreeMap;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * Generates a test suite covering the {@link Map} implementations in the
+ * {@link java.util} package. Can be subclassed to specify tests that should
+ * be suppressed.
+ *
+ * @author Kevin Bourrillion
+ */
+public class TestsForMapsInJavaUtil {
+  public static Test suite() {
+    return new TestsForMapsInJavaUtil().allTests();
+  }
+
+  public Test allTests() {
+    TestSuite suite = new TestSuite("java.util Maps");
+    suite.addTest(testsForEmptyMap());
+    suite.addTest(testsForSingletonMap());
+    suite.addTest(testsForHashMap());
+    suite.addTest(testsForLinkedHashMap());
+    suite.addTest(testsForTreeMap());
+    suite.addTest(testsForEnumMap());
+    suite.addTest(testsForConcurrentHashMap());
+    return suite;
+  }
+
+  protected Collection<Method> suppressForEmptyMap() {
+    return Collections.emptySet();
+  }
+  protected Collection<Method> suppressForSingletonMap() {
+    return Collections.emptySet();
+  }
+  protected Collection<Method> suppressForHashMap() {
+    return Collections.emptySet();
+  }
+  protected Collection<Method> suppressForLinkedHashMap() {
+    return Collections.emptySet();
+  }
+  protected Collection<Method> suppressForTreeMap() {
+    return Collections.emptySet();
+  }
+  protected Collection<Method> suppressForEnumMap() {
+    return Collections.emptySet();
+  }
+  protected Collection<Method> suppressForConcurrentHashMap() {
+    return Collections.emptySet();
+  }
+
+  public Test testsForEmptyMap() {
+    return MapTestSuiteBuilder
+        .using(new TestStringMapGenerator() {
+            @Override protected Map<String, String> create(
+                Entry<String, String>[] entries) {
+              return Collections.emptyMap();
+            }
+          })
+        .named("emptyMap")
+        .withFeatures(
+            CollectionFeature.NONE,
+            CollectionSize.ZERO)
+        .suppressing(suppressForEmptyMap())
+        .createTestSuite();
+  }
+
+  public Test testsForSingletonMap() {
+    return MapTestSuiteBuilder
+        .using(new TestStringMapGenerator() {
+            @Override protected Map<String, String> create(
+                Entry<String, String>[] entries) {
+              return Collections.singletonMap(
+                  entries[0].getKey(), entries[0].getValue());
+            }
+          })
+        .named("singletonMap")
+        .withFeatures(
+            MapFeature.ALLOWS_NULL_KEYS,
+            MapFeature.ALLOWS_NULL_VALUES,
+            CollectionSize.ONE)
+        .suppressing(suppressForSingletonMap())
+        .createTestSuite();
+  }
+
+  public Test testsForHashMap() {
+    return MapTestSuiteBuilder
+        .using(new TestStringMapGenerator() {
+            @Override protected Map<String, String> create(
+                Entry<String, String>[] entries) {
+              return toHashMap(entries);
+            }
+            @Override public Iterable<Entry<String, String>> order(
+                List<Entry<String, String>> insertionOrder) {
+              /*
+               * For convenience, make this test double as a test that no tester
+               * calls order() on a container without the KNOWN_ORDER feature.
+               */
+              throw new UnsupportedOperationException();
+            }
+          })
+        .named("HashMap")
+        .withFeatures(
+            MapFeature.GENERAL_PURPOSE,
+            MapFeature.ALLOWS_NULL_KEYS,
+            MapFeature.ALLOWS_NULL_VALUES,
+            CollectionSize.ANY)
+        .suppressing(suppressForHashMap())
+        .createTestSuite();
+  }
+
+  public Test testsForLinkedHashMap() {
+    return MapTestSuiteBuilder
+        .using(new TestStringMapGenerator() {
+            @Override protected Map<String, String> create(
+                Entry<String, String>[] entries) {
+              return populate(new LinkedHashMap<String, String>(), entries);
+            }
+          })
+        .named("LinkedHashMap")
+        .withFeatures(
+            MapFeature.GENERAL_PURPOSE,
+            MapFeature.ALLOWS_NULL_KEYS,
+            MapFeature.ALLOWS_NULL_VALUES,
+            CollectionFeature.KNOWN_ORDER,
+            CollectionSize.ANY)
+        .suppressing(suppressForLinkedHashMap())
+        .createTestSuite();
+  }
+
+  public Test testsForTreeMap() {
+    return NavigableMapTestSuiteBuilder
+        .using(new TestStringMapGenerator() {
+            @Override protected Map<String, String> create(
+                Entry<String, String>[] entries) {
+              return populate(new TreeMap<String, String>(
+                  arbitraryNullFriendlyComparator()), entries);
+            }
+          })
+        .named("TreeMap")
+        .withFeatures(
+            MapFeature.GENERAL_PURPOSE,
+            MapFeature.ALLOWS_NULL_KEYS,
+            MapFeature.ALLOWS_NULL_VALUES,
+            CollectionFeature.KNOWN_ORDER,
+            CollectionSize.ANY)
+        .suppressing(suppressForTreeMap())
+        .createTestSuite();
+  }
+
+  public Test testsForEnumMap() {
+    return MapTestSuiteBuilder
+        .using(new TestEnumMapGenerator() {
+            @Override protected Map<AnEnum, String> create(
+                Entry<AnEnum, String>[] entries) {
+              return populate(
+                  new EnumMap<AnEnum, String>(AnEnum.class), entries);
+            }
+          })
+        .named("EnumMap")
+        .withFeatures(
+            MapFeature.GENERAL_PURPOSE,
+            MapFeature.ALLOWS_NULL_VALUES,
+            MapFeature.RESTRICTS_KEYS,
+            CollectionFeature.KNOWN_ORDER,
+            CollectionSize.ANY)
+        .suppressing(suppressForEnumMap())
+        .createTestSuite();
+  }
+
+  public Test testsForConcurrentHashMap() {
+    return MapTestSuiteBuilder
+        .using(new TestStringMapGenerator() {
+          @Override protected Map<String, String> create(
+              Entry<String, String>[] entries) {
+            return populate(new ConcurrentHashMap<String, String>(), entries);
+          }
+        })
+        .named("ConcurrentHashMap")
+        .withFeatures(
+            MapFeature.GENERAL_PURPOSE,
+            CollectionSize.ANY)
+        .suppressing(suppressForConcurrentHashMap())
+        .createTestSuite();
+  }
+
+  // TODO: IdentityHashMap, AbstractMap
+
+  private static Map<String, String> toHashMap(
+      Entry<String, String>[] entries) {
+    return populate(new HashMap<String, String>(), entries);
+  }
+
+  // TODO: call conversion constructors or factory methods instead of using
+  // populate() on an empty map
+  private static <T> Map<T, String> populate(
+      Map<T, String> map, Entry<T, String>[] entries) {
+    for (Entry<T, String> entry : entries) {
+      map.put(entry.getKey(), entry.getValue());
+    }
+    return map;
+  }
+
+  static <T> Comparator<T> arbitraryNullFriendlyComparator() {
+    return new Comparator<T>() {
+      @Override
+      public int compare(T left, T right) {
+        return String.valueOf(left).compareTo(String.valueOf(right));
+      }
+    };
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/TestsForQueuesInJavaUtil.java b/guava-testlib/src/com/google/common/collect/testing/TestsForQueuesInJavaUtil.java
new file mode 100644
index 0000000..bb4ae17
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/TestsForQueuesInJavaUtil.java
@@ -0,0 +1,182 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import java.lang.reflect.Method;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.PriorityQueue;
+import java.util.Queue;
+import java.util.concurrent.ArrayBlockingQueue;
+import java.util.concurrent.ConcurrentLinkedQueue;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.PriorityBlockingQueue;
+
+/**
+ * Generates a test suite covering the {@link Queue} implementations in the
+ * {@link java.util} package. Can be subclassed to specify tests that should
+ * be suppressed.
+ *
+ * @author Jared Levy
+ */
+public class TestsForQueuesInJavaUtil {
+  public static Test suite() {
+    return new TestsForQueuesInJavaUtil().allTests();
+  }
+
+  public Test allTests() {
+    TestSuite suite = new TestSuite();
+    suite.addTest(testsForLinkedList());
+    suite.addTest(testsForArrayBlockingQueue());
+    suite.addTest(testsForConcurrentLinkedQueue());
+    suite.addTest(testsForLinkedBlockingQueue());
+    suite.addTest(testsForPriorityBlockingQueue());
+    suite.addTest(testsForPriorityQueue());
+    return suite;
+  }
+
+  protected Collection<Method> suppressForLinkedList() {
+    return Collections.emptySet();
+  }
+  protected Collection<Method> suppressForArrayBlockingQueue() {
+    return Collections.emptySet();
+  }
+  protected Collection<Method> suppressForConcurrentLinkedQueue() {
+    return Collections.emptySet();
+  }
+  protected Collection<Method> suppressForLinkedBlockingQueue() {
+    return Collections.emptySet();
+  }
+  protected Collection<Method> suppressForPriorityBlockingQueue() {
+    return Collections.emptySet();
+  }
+  protected Collection<Method> suppressForPriorityQueue() {
+    return Collections.emptySet();
+  }
+
+  public Test testsForLinkedList() {
+    return QueueTestSuiteBuilder
+        .using(new TestStringQueueGenerator() {
+            @Override public Queue<String> create(String[] elements) {
+              return new LinkedList<String>(MinimalCollection.of(elements));
+            }
+          })
+        .named("LinkedList")
+        .withFeatures(
+            CollectionFeature.GENERAL_PURPOSE,
+            CollectionFeature.ALLOWS_NULL_VALUES,
+            CollectionFeature.KNOWN_ORDER,
+            CollectionSize.ANY)
+        .skipCollectionTests() // already covered in TestsForListsInJavaUtil
+        .suppressing(suppressForLinkedList())
+        .createTestSuite();
+  }
+
+  public Test testsForArrayBlockingQueue() {
+    return QueueTestSuiteBuilder
+        .using(new TestStringQueueGenerator() {
+            @Override public Queue<String> create(String[] elements) {
+              return new ArrayBlockingQueue<String>(
+                  100, false, MinimalCollection.of(elements));
+            }
+          })
+        .named("ArrayBlockingQueue")
+        .withFeatures(
+            CollectionFeature.GENERAL_PURPOSE,
+            CollectionFeature.KNOWN_ORDER,
+            CollectionSize.ANY)
+        .suppressing(suppressForArrayBlockingQueue())
+        .createTestSuite();
+  }
+
+  public Test testsForConcurrentLinkedQueue() {
+    return QueueTestSuiteBuilder
+        .using(new TestStringQueueGenerator() {
+            @Override public Queue<String> create(String[] elements) {
+              return new ConcurrentLinkedQueue<String>(
+                  MinimalCollection.of(elements));
+            }
+          })
+        .named("ConcurrentLinkedQueue")
+        .withFeatures(
+            CollectionFeature.GENERAL_PURPOSE,
+            CollectionFeature.KNOWN_ORDER,
+            CollectionSize.ANY)
+        .suppressing(suppressForConcurrentLinkedQueue())
+        .createTestSuite();
+  }
+
+  public Test testsForLinkedBlockingQueue() {
+    return QueueTestSuiteBuilder
+        .using(new TestStringQueueGenerator() {
+            @Override public Queue<String> create(String[] elements) {
+              return new LinkedBlockingQueue<String>(
+                  MinimalCollection.of(elements));
+            }
+          })
+        .named("LinkedBlockingQueue")
+        .withFeatures(
+            CollectionFeature.GENERAL_PURPOSE,
+            CollectionFeature.KNOWN_ORDER,
+            CollectionSize.ANY)
+        .suppressing(suppressForLinkedBlockingQueue())
+        .createTestSuite();
+  }
+
+  // Not specifying KNOWN_ORDER for PriorityQueue and PriorityBlockingQueue
+  // even though they do have it, because our tests interpret KNOWN_ORDER to
+  // also mean that the iterator returns the head element first, which those
+  // don't.
+
+  public Test testsForPriorityBlockingQueue() {
+    return QueueTestSuiteBuilder
+        .using(new TestStringQueueGenerator() {
+            @Override public Queue<String> create(String[] elements) {
+              return new PriorityBlockingQueue<String>(
+                  MinimalCollection.of(elements));
+            }
+          })
+        .named("PriorityBlockingQueue")
+        .withFeatures(
+            CollectionFeature.GENERAL_PURPOSE,
+            CollectionSize.ANY)
+        .suppressing(suppressForPriorityBlockingQueue())
+        .createTestSuite();
+  }
+
+  public Test testsForPriorityQueue() {
+    return QueueTestSuiteBuilder
+        .using(new TestStringQueueGenerator() {
+            @Override public Queue<String> create(String[] elements) {
+              return new PriorityQueue<String>(MinimalCollection.of(elements));
+            }
+          })
+        .named("PriorityQueue")
+        .withFeatures(
+            CollectionFeature.GENERAL_PURPOSE,
+            CollectionSize.ANY)
+        .suppressing(suppressForPriorityQueue())
+        .createTestSuite();
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/TestsForSetsInJavaUtil.java b/guava-testlib/src/com/google/common/collect/testing/TestsForSetsInJavaUtil.java
new file mode 100644
index 0000000..4b4b924
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/TestsForSetsInJavaUtil.java
@@ -0,0 +1,334 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.SetFeature;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import java.lang.reflect.Method;
+import java.util.AbstractSet;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.EnumSet;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.Set;
+import java.util.SortedSet;
+import java.util.TreeSet;
+import java.util.concurrent.CopyOnWriteArraySet;
+
+/**
+ * Generates a test suite covering the {@link Set} implementations in the
+ * {@link java.util} package. Can be subclassed to specify tests that should
+ * be suppressed.
+ *
+ * @author Kevin Bourrillion
+ */
+public class TestsForSetsInJavaUtil {
+  public static Test suite() {
+    return new TestsForSetsInJavaUtil().allTests();
+  }
+
+  public Test allTests() {
+    TestSuite suite = new TestSuite("java.util Sets");
+    suite.addTest(testsForEmptySet());
+    suite.addTest(testsForSingletonSet());
+    suite.addTest(testsForHashSet());
+    suite.addTest(testsForLinkedHashSet());
+    suite.addTest(testsForEnumSet());
+    suite.addTest(testsForTreeSetNatural());
+    suite.addTest(testsForTreeSetWithComparator());
+    suite.addTest(testsForCopyOnWriteArraySet());
+    suite.addTest(testsForUnmodifiableSet());
+    suite.addTest(testsForCheckedSet());
+    suite.addTest(testsForAbstractSet());
+    suite.addTest(testsForBadlyCollidingHashSet());
+
+    return suite;
+  }
+
+  protected Collection<Method> suppressForEmptySet() {
+    return Collections.emptySet();
+  }
+  protected Collection<Method> suppressForSingletonSet() {
+    return Collections.emptySet();
+  }
+  protected Collection<Method> suppressForHashSet() {
+    return Collections.emptySet();
+  }
+  protected Collection<Method> suppressForLinkedHashSet() {
+    return Collections.emptySet();
+  }
+  protected Collection<Method> suppressForEnumSet() {
+    return Collections.emptySet();
+  }
+  protected Collection<Method> suppressForTreeSetNatural() {
+    return Collections.emptySet();
+  }
+  protected Collection<Method> suppressForTreeSetWithComparator() {
+    return Collections.emptySet();
+  }
+  protected Collection<Method> suppressForCopyOnWriteArraySet() {
+    return Collections.emptySet();
+  }
+  protected Collection<Method> suppressForUnmodifiableSet() {
+    return Collections.emptySet();
+  }
+  protected Collection<Method> suppressForCheckedSet() {
+    return Collections.emptySet();
+  }
+  protected Collection<Method> suppressForAbstractSet() {
+    return Collections.emptySet();
+  }
+
+  public Test testsForEmptySet() {
+    return SetTestSuiteBuilder
+        .using(new TestStringSetGenerator() {
+            @Override public Set<String> create(String[] elements) {
+              return Collections.emptySet();
+            }
+          })
+        .named("emptySet")
+        .withFeatures(
+            CollectionFeature.NONE,
+            CollectionSize.ZERO)
+        .suppressing(suppressForEmptySet())
+        .createTestSuite();
+  }
+
+  public Test testsForSingletonSet() {
+    return SetTestSuiteBuilder
+        .using(new TestStringSetGenerator() {
+            @Override public Set<String> create(String[] elements) {
+              return Collections.singleton(elements[0]);
+            }
+          })
+        .named("singleton")
+        .withFeatures(
+            CollectionFeature.NONE,
+            CollectionFeature.ALLOWS_NULL_VALUES,
+            CollectionSize.ONE)
+        .suppressing(suppressForSingletonSet())
+        .createTestSuite();
+  }
+
+  public Test testsForHashSet() {
+    return SetTestSuiteBuilder
+        .using(new TestStringSetGenerator() {
+            @Override public Set<String> create(String[] elements) {
+              return new HashSet<String>(MinimalCollection.of(elements));
+            }
+          })
+        .named("HashSet")
+        .withFeatures(
+            SetFeature.GENERAL_PURPOSE,
+            CollectionFeature.ALLOWS_NULL_VALUES,
+            CollectionSize.ANY)
+        .suppressing(suppressForHashSet())
+        .createTestSuite();
+  }
+
+  public Test testsForLinkedHashSet() {
+    return SetTestSuiteBuilder
+        .using(new TestStringSetGenerator() {
+            @Override public Set<String> create(String[] elements) {
+              return new LinkedHashSet<String>(MinimalCollection.of(elements));
+            }
+          })
+        .named("LinkedHashSet")
+        .withFeatures(
+            SetFeature.GENERAL_PURPOSE,
+            CollectionFeature.ALLOWS_NULL_VALUES,
+            CollectionFeature.KNOWN_ORDER,
+            CollectionSize.ANY)
+        .suppressing(suppressForLinkedHashSet())
+        .createTestSuite();
+  }
+
+  public Test testsForEnumSet() {
+    return SetTestSuiteBuilder
+        .using(new TestEnumSetGenerator() {
+            @Override public Set<AnEnum> create(AnEnum[] elements) {
+              return (elements.length == 0)
+                  ? EnumSet.noneOf(AnEnum.class)
+                  : EnumSet.copyOf(MinimalCollection.of(elements));
+            }
+          })
+        .named("EnumSet")
+        .withFeatures(
+            SetFeature.GENERAL_PURPOSE,
+            CollectionFeature.KNOWN_ORDER,
+            CollectionFeature.RESTRICTS_ELEMENTS,
+            CollectionSize.ANY)
+        .suppressing(suppressForEnumSet())
+        .createTestSuite();
+  }
+
+  public Test testsForTreeSetNatural() {
+    return SetTestSuiteBuilder
+        .using(new TestStringSortedSetGenerator() {
+            @Override public SortedSet<String> create(String[] elements) {
+              return new TreeSet<String>(MinimalCollection.of(elements));
+            }
+          })
+        .named("TreeSet, natural")
+        .withFeatures(
+            SetFeature.GENERAL_PURPOSE,
+            CollectionFeature.KNOWN_ORDER,
+            CollectionSize.ANY)
+        .suppressing(suppressForTreeSetNatural())
+        .createTestSuite();
+  }
+
+  public Test testsForTreeSetWithComparator() {
+    return SetTestSuiteBuilder
+        .using(new TestStringSortedSetGenerator() {
+            @Override public SortedSet<String> create(String[] elements) {
+              SortedSet<String> set
+                  = new TreeSet<String>(arbitraryNullFriendlyComparator());
+              Collections.addAll(set, elements);
+              return set;
+            }
+          })
+        .named("TreeSet, with comparator")
+        .withFeatures(
+            SetFeature.GENERAL_PURPOSE,
+            CollectionFeature.ALLOWS_NULL_VALUES,
+            CollectionFeature.KNOWN_ORDER,
+            CollectionSize.ANY)
+        .suppressing(suppressForTreeSetWithComparator())
+        .createTestSuite();
+  }
+
+  public Test testsForCopyOnWriteArraySet() {
+    return SetTestSuiteBuilder
+        .using(new TestStringSetGenerator() {
+            @Override public Set<String> create(String[] elements) {
+              return new CopyOnWriteArraySet<String>(
+                  MinimalCollection.of(elements));
+            }
+          })
+        .named("CopyOnWriteArraySet")
+        .withFeatures(
+            SetFeature.GENERAL_PURPOSE,
+            CollectionFeature.ALLOWS_NULL_VALUES,
+            CollectionFeature.KNOWN_ORDER,
+            CollectionSize.ANY)
+        .suppressing(suppressForCopyOnWriteArraySet())
+        .createTestSuite();
+  }
+
+  public Test testsForUnmodifiableSet() {
+    return SetTestSuiteBuilder
+        .using(new TestStringSetGenerator() {
+            @Override public Set<String> create(String[] elements) {
+              Set<String> innerSet = new HashSet<String>();
+              Collections.addAll(innerSet, elements);
+              return Collections.unmodifiableSet(innerSet);
+            }
+          })
+        .named("unmodifiableSet/HashSet")
+        .withFeatures(
+            CollectionFeature.NONE,
+            CollectionFeature.ALLOWS_NULL_VALUES,
+            CollectionSize.ANY)
+        .suppressing(suppressForUnmodifiableSet())
+        .createTestSuite();
+  }
+
+  public Test testsForCheckedSet() {
+    return SetTestSuiteBuilder
+        .using(new TestStringSetGenerator() {
+            @Override public Set<String> create(String[] elements) {
+              Set<String> innerSet = new HashSet<String>();
+              Collections.addAll(innerSet, elements);
+              return Collections.checkedSet(innerSet, String.class);
+            }
+          })
+        .named("checkedSet/HashSet")
+        .withFeatures(
+            SetFeature.GENERAL_PURPOSE,
+            CollectionFeature.ALLOWS_NULL_VALUES,
+            CollectionFeature.RESTRICTS_ELEMENTS,
+            CollectionSize.ANY)
+        .suppressing(suppressForCheckedSet())
+        .createTestSuite();
+  }
+
+  public Test testsForAbstractSet() {
+    return SetTestSuiteBuilder
+        .using(new TestStringSetGenerator () {
+            @Override protected Set<String> create(String[] elements) {
+              final String[] deduped = dedupe(elements);
+              return new AbstractSet<String>() {
+                @Override public int size() {
+                  return deduped.length;
+                }
+                @Override public Iterator<String> iterator() {
+                  return MinimalCollection.of(deduped).iterator();
+                }
+              };
+            }
+          })
+        .named("AbstractSet")
+        .withFeatures(
+            CollectionFeature.NONE,
+            CollectionFeature.ALLOWS_NULL_VALUES,
+            CollectionFeature.KNOWN_ORDER, // in this case, anyway
+            CollectionSize.ANY)
+        .suppressing(suppressForAbstractSet())
+        .createTestSuite();
+  }
+
+  public Test testsForBadlyCollidingHashSet() {
+    return SetTestSuiteBuilder
+        .using(new TestCollidingSetGenerator() {
+            @Override
+            public Set<Object> create(Object... elements) {
+              return new HashSet<Object>(MinimalCollection.of(elements));
+            }
+          })
+        .named("badly colliding HashSet")
+        .withFeatures(
+            SetFeature.GENERAL_PURPOSE,
+            CollectionFeature.ALLOWS_NULL_VALUES,
+            CollectionSize.SEVERAL)
+        .suppressing(suppressForHashSet())
+        .createTestSuite();
+  }
+
+  private static String[] dedupe(String[] elements) {
+    Set<String> tmp = new LinkedHashSet<String>();
+    Collections.addAll(tmp, elements);
+    return tmp.toArray(new String[0]);
+  }
+
+  static <T> Comparator<T> arbitraryNullFriendlyComparator() {
+    return new Comparator<T>() {
+      @Override
+      public int compare(T left, T right) {
+        return String.valueOf(left).compareTo(String.valueOf(right));
+      }
+    };
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/UnhashableObject.java b/guava-testlib/src/com/google/common/collect/testing/UnhashableObject.java
new file mode 100644
index 0000000..d038cfb
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/UnhashableObject.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+/**
+ * An unhashable object to be used in testing as values in our collections.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Regina O'Dell
+ */
+public class UnhashableObject implements Comparable<UnhashableObject> {
+  private final int value;
+
+  public UnhashableObject(int value) {
+    this.value = value;
+  }
+
+  @Override public boolean equals(Object object) {
+    if (object instanceof UnhashableObject) {
+      UnhashableObject that = (UnhashableObject) object;
+      return this.value == that.value;
+    }
+    return false;
+  }
+
+  @Override public int hashCode() {
+    throw new UnsupportedOperationException();
+  }
+
+  // needed because otherwise Object.toString() calls hashCode()
+  @Override public String toString() {
+    return "DontHashMe" + value;
+  }
+
+  @Override
+  public int compareTo(UnhashableObject o) {
+    return (this.value < o.value) ? -1 : (this.value > o.value) ? 1 : 0;
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/WrongType.java b/guava-testlib/src/com/google/common/collect/testing/WrongType.java
new file mode 100644
index 0000000..0fecaba
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/WrongType.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing;
+
+/**
+ * A type which will never be used as the element type of any collection in our
+ * tests, and so can be used to test how a Collection behaves when given input
+ * of the wrong type.
+ *
+ * <p>This class is GWT compatible.
+ */
+public enum WrongType {
+  VALUE
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/features/CollectionFeature.java b/guava-testlib/src/com/google/common/collect/testing/features/CollectionFeature.java
new file mode 100644
index 0000000..4f14c3c
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/features/CollectionFeature.java
@@ -0,0 +1,134 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.features;
+
+import com.google.common.collect.testing.Helpers;
+
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.util.Collection;
+import java.util.LinkedHashSet;
+import java.util.Set;
+import java.util.SortedSet;
+
+/**
+ * Optional features of classes derived from {@code Collection}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author George van den Driessche
+ */
+// Enum values use constructors with generic varargs.
+@SuppressWarnings("unchecked")
+public enum CollectionFeature implements Feature<Collection> {  
+  /**
+   * The collection must not throw {@code NullPointerException} on calls
+   * such as {@code contains(null)} or {@code remove(null)}, but instead
+   * must return a simple {@code false}.
+   */
+  ALLOWS_NULL_QUERIES,
+
+  ALLOWS_NULL_VALUES (ALLOWS_NULL_QUERIES),
+
+  /**
+   * Indicates that a collection disallows certain elements (other than
+   * {@code null}, whose validity as an element is indicated by the presence
+   * or absence of {@link #ALLOWS_NULL_VALUES}).
+   * From the documentation for {@link Collection}:
+   * <blockquote>"Some collection implementations have restrictions on the
+   * elements that they may contain.  For example, some implementations
+   * prohibit null elements, and some have restrictions on the types of their
+   * elements."</blockquote>
+   */
+  RESTRICTS_ELEMENTS,
+
+  /**
+   * Indicates that a collection has a well-defined ordering of its elements.
+   * The ordering may depend on the element values, such as a {@link SortedSet},
+   * or on the insertion ordering, such as a {@link LinkedHashSet}. All list
+   * tests automatically specify this feature.
+   */
+  KNOWN_ORDER,
+
+  /**
+   * Indicates that a collection has a different {@link Object#toString}
+   * representation than most collections. If not specified, the collection
+   * tests will examine the value returned by {@link Object#toString}.
+   */
+  NON_STANDARD_TOSTRING,
+
+  /**
+   * Indicates that the constructor or factory method of a collection, usually
+   * an immutable set, throws an {@link IllegalArgumentException} when presented
+   * with duplicate elements instead of collapsing them to a single element or
+   * including duplicate instances in the collection.
+   */
+  REJECTS_DUPLICATES_AT_CREATION,
+
+  SUPPORTS_ADD,
+  SUPPORTS_REMOVE,
+  SUPPORTS_ADD_ALL,
+  SUPPORTS_REMOVE_ALL,
+  SUPPORTS_RETAIN_ALL,
+  SUPPORTS_CLEAR,
+
+  /**
+   * Features supported by general-purpose collections -
+   * everything but {@link #RESTRICTS_ELEMENTS}.
+   * @see java.util.Collection the definition of general-purpose collections.
+   */
+  GENERAL_PURPOSE(
+      SUPPORTS_ADD,
+      SUPPORTS_REMOVE,
+      SUPPORTS_ADD_ALL,
+      SUPPORTS_REMOVE_ALL,
+      SUPPORTS_RETAIN_ALL,
+      SUPPORTS_CLEAR),
+
+  /** Features supported by collections where only removal is allowed. */
+  REMOVE_OPERATIONS(
+      SUPPORTS_REMOVE,
+      SUPPORTS_REMOVE_ALL,
+      SUPPORTS_RETAIN_ALL,
+      SUPPORTS_CLEAR),
+
+  /**
+   * For documenting collections that support no optional features, such as
+   * {@link java.util.Collections#emptySet}
+   */
+  NONE();
+
+  private final Set<Feature<? super Collection>> implied;
+
+  CollectionFeature(Feature<? super Collection> ... implied) {
+    this.implied = Helpers.copyToSet(implied);
+  }
+
+  @Override
+  public Set<Feature<? super Collection>> getImpliedFeatures() {
+    return implied;
+  }
+
+  @Retention(RetentionPolicy.RUNTIME)
+  @Inherited
+  @TesterAnnotation
+  public @interface Require {
+    CollectionFeature[] value() default {};
+    CollectionFeature[] absent() default {};
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/features/CollectionSize.java b/guava-testlib/src/com/google/common/collect/testing/features/CollectionSize.java
new file mode 100644
index 0000000..f986d35
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/features/CollectionSize.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.features;
+
+import com.google.common.collect.testing.Helpers;
+
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Set;
+
+/**
+ * When describing the features of the collection produced by a given generator
+ * (i.e. in a call to {@link
+ * com.google.common.collect.testing.FeatureSpecificTestSuiteBuilder#withFeatures(Feature...)}),
+ * this annotation specifies each of the different sizes for which a test suite
+ * should be built. (In a typical case, the features should include {@link
+ * CollectionSize#ANY}.) These semantics are thus a little different
+ * from those of other Collection-related features such as {@link
+ * CollectionFeature} or {@link SetFeature}.
+ * <p>
+ * However, when {@link CollectionSize.Require} is used to annotate a test it
+ * behaves normally (i.e. it requires the collection instance under test to be
+ * a certain size for the test to run). Note that this means a test should not
+ * require more than one CollectionSize, since a particular collection instance
+ * can only be one size at once.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author George van den Driessche
+ */
+// Enum values use constructors with generic varargs.
+@SuppressWarnings("unchecked")
+public enum CollectionSize implements Feature<Collection>,
+    Comparable<CollectionSize> {
+  /** Test an empty collection. */
+  ZERO(0),
+  /** Test a one-element collection. */
+  ONE(1),
+  /** Test a three-element collection. */
+  SEVERAL(3),
+  /*
+   * TODO: add VERY_LARGE, noting that we currently assume that the fourth
+   * sample element is not in any collection
+   */
+
+  ANY(
+      ZERO,
+      ONE,
+      SEVERAL
+  );
+
+  private final Set<Feature<? super Collection>> implied;
+  private final Integer numElements;
+
+  CollectionSize(int numElements) {
+    this.implied = Collections.emptySet();
+    this.numElements = numElements;
+  }
+
+  CollectionSize(Feature<? super Collection> ... implied) {
+    // Keep the order here, so that PerCollectionSizeTestSuiteBuilder
+    // gives a predictable order of test suites.
+    this.implied = Helpers.copyToSet(implied);
+    this.numElements = null;
+  }
+
+  @Override
+  public Set<Feature<? super Collection>> getImpliedFeatures() {
+    return implied;
+  }
+
+  public int getNumElements() {
+    if (numElements == null) {
+      throw new IllegalStateException(
+          "A compound CollectionSize doesn't specify a number of elements.");
+    }
+    return numElements;
+  }
+
+  @Retention(RetentionPolicy.RUNTIME)
+  @Inherited
+  @TesterAnnotation
+  public @interface Require {
+    CollectionSize[] value() default {};
+    CollectionSize[] absent() default {};
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/features/ConflictingRequirementsException.java b/guava-testlib/src/com/google/common/collect/testing/features/ConflictingRequirementsException.java
new file mode 100644
index 0000000..e70ed0d
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/features/ConflictingRequirementsException.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.features;
+
+import java.util.Set;
+
+/**
+ * Thrown when requirements on a tester method or class conflict with
+ * each other.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author George van den Driessche
+ */
+public class ConflictingRequirementsException extends Exception {
+  private Set<Feature<?>> conflicts;
+  private Object source;
+
+  public ConflictingRequirementsException(
+      String message, Set<Feature<?>> conflicts, Object source) {
+    super(message);
+    this.conflicts = conflicts;
+    this.source = source;
+  }
+
+  public Set<Feature<?>> getConflicts() {
+    return conflicts;
+  }
+
+  public Object getSource() {
+    return source;
+  }
+
+  @Override public String getMessage() {
+    return super.getMessage() + " (source: " + source + ")";
+  }
+
+  private static final long serialVersionUID = 0;
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/features/Feature.java b/guava-testlib/src/com/google/common/collect/testing/features/Feature.java
new file mode 100644
index 0000000..b185803
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/features/Feature.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.features;
+
+import java.util.Set;
+
+/**
+ * Base class for enumerating the features of an interface to be tested.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @param <T> The interface whose features are to be enumerated.
+ * @author George van den Driessche
+ */
+public interface Feature<T> {
+  /** Returns the set of features that are implied by this feature. */
+  Set<Feature<? super T>> getImpliedFeatures();
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/features/FeatureUtil.java b/guava-testlib/src/com/google/common/collect/testing/features/FeatureUtil.java
new file mode 100644
index 0000000..3edffa3
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/features/FeatureUtil.java
@@ -0,0 +1,322 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.features;
+
+import com.google.common.collect.testing.Helpers;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.AnnotatedElement;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Utilities for collecting and validating tester requirements from annotations.
+ *
+ * <p>This class can be referenced in GWT tests.
+ *
+ * @author George van den Driessche
+ */
+public class FeatureUtil {
+  /**
+   * A cache of annotated objects (typically a Class or Method) to its
+   * set of annotations.
+   */
+  private static Map<AnnotatedElement, Annotation[]> annotationCache =
+      new HashMap<AnnotatedElement, Annotation[]>();
+
+  private static final Map<Class<?>, TesterRequirements>
+      classTesterRequirementsCache =
+          new HashMap<Class<?>, TesterRequirements>();
+
+  /**
+   * Given a set of features, add to it all the features directly or indirectly
+   * implied by any of them, and return it.
+   * @param features the set of features to expand
+   * @return the same set of features, expanded with all implied features
+   */
+  public static Set<Feature<?>> addImpliedFeatures(Set<Feature<?>> features) {
+    // The base case of the recursion is an empty set of features, which will
+    // occur when the previous set contained only simple features.
+    if (!features.isEmpty()) {
+      features.addAll(impliedFeatures(features));
+    }
+    return features;
+  }
+
+  /**
+   * Given a set of features, return a new set of all features directly or
+   * indirectly implied by any of them.
+   * @param features the set of features whose implications to find
+   * @return the implied set of features
+   */
+  public static Set<Feature<?>> impliedFeatures(Set<Feature<?>> features) {
+    Set<Feature<?>> implied = new LinkedHashSet<Feature<?>>();
+    for (Feature<?> feature : features) {
+      implied.addAll(feature.getImpliedFeatures());
+    }
+    addImpliedFeatures(implied);
+    return implied;
+  }
+
+  /**
+   * Get the full set of requirements for a tester class.
+   * @param testerClass a tester class
+   * @return all the constraints implicitly or explicitly required by the class
+   * or any of its superclasses.
+   * @throws ConflictingRequirementsException if the requirements are mutually
+   * inconsistent.
+   */
+  public static TesterRequirements getTesterRequirements(Class<?> testerClass)
+      throws ConflictingRequirementsException {
+    synchronized (classTesterRequirementsCache) {
+      TesterRequirements requirements =
+          classTesterRequirementsCache.get(testerClass);
+      if (requirements == null) {
+        requirements = buildTesterRequirements(testerClass);
+        classTesterRequirementsCache.put(testerClass, requirements);
+      }
+      return requirements;
+    }
+  }
+
+  /**
+   * Get the full set of requirements for a tester class.
+   * @param testerMethod a test method of a tester class
+   * @return all the constraints implicitly or explicitly required by the
+   * method, its declaring class, or any of its superclasses.
+   * @throws ConflictingRequirementsException if the requirements are
+   * mutually inconsistent.
+   */
+  public static TesterRequirements getTesterRequirements(Method testerMethod)
+      throws ConflictingRequirementsException {
+    return buildTesterRequirements(testerMethod);
+  }
+
+  /**
+   * Construct the full set of requirements for a tester class.
+   * @param testerClass a tester class
+   * @return all the constraints implicitly or explicitly required by the class
+   * or any of its superclasses.
+   * @throws ConflictingRequirementsException if the requirements are mutually
+   * inconsistent.
+   */
+  static TesterRequirements buildTesterRequirements(Class<?> testerClass)
+      throws ConflictingRequirementsException {
+    final TesterRequirements declaredRequirements =
+        buildDeclaredTesterRequirements(testerClass);
+    Class<?> baseClass = testerClass.getSuperclass();
+    if (baseClass == null) {
+      return declaredRequirements;
+    } else {
+      final TesterRequirements clonedBaseRequirements =
+          new TesterRequirements(getTesterRequirements(baseClass));
+      return incorporateRequirements(
+          clonedBaseRequirements, declaredRequirements, testerClass);
+    }
+  }
+
+  /**
+   * Construct the full set of requirements for a tester method.
+   * @param testerMethod a test method of a tester class
+   * @return all the constraints implicitly or explicitly required by the
+   * method, its declaring class, or any of its superclasses.
+   * @throws ConflictingRequirementsException if the requirements are mutually
+   * inconsistent.
+   */
+  static TesterRequirements buildTesterRequirements(Method testerMethod)
+      throws ConflictingRequirementsException {
+    TesterRequirements clonedClassRequirements = new TesterRequirements(
+        getTesterRequirements(testerMethod.getDeclaringClass()));
+    TesterRequirements declaredRequirements =
+        buildDeclaredTesterRequirements(testerMethod);
+    return incorporateRequirements(
+        clonedClassRequirements, declaredRequirements, testerMethod);
+  }
+
+  /**
+   * Construct the set of requirements specified by annotations
+   * directly on a tester class or method.
+   * @param classOrMethod a tester class or a test method thereof
+   * @return all the constraints implicitly or explicitly required by
+   *         annotations on the class or method.
+   * @throws ConflictingRequirementsException if the requirements are mutually
+   *         inconsistent.
+   */
+  public static TesterRequirements buildDeclaredTesterRequirements(
+      AnnotatedElement classOrMethod)
+      throws ConflictingRequirementsException {
+    TesterRequirements requirements = new TesterRequirements();
+
+    Iterable<Annotation> testerAnnotations =
+        getTesterAnnotations(classOrMethod);
+    for (Annotation testerAnnotation : testerAnnotations) {
+      TesterRequirements moreRequirements =
+          buildTesterRequirements(testerAnnotation);
+      incorporateRequirements(
+          requirements, moreRequirements, testerAnnotation);
+    }
+
+    return requirements;
+  }
+
+  /**
+   * Find all the tester annotations declared on a tester class or method.
+   * @param classOrMethod a class or method whose tester annotations to find
+   * @return an iterable sequence of tester annotations on the class
+   */
+  public static Iterable<Annotation> getTesterAnnotations(
+      AnnotatedElement classOrMethod) {
+    List<Annotation> result = new ArrayList<Annotation>();
+
+    Annotation[] annotations;
+    synchronized (annotationCache) {
+      annotations = annotationCache.get(classOrMethod);
+      if (annotations == null) {
+        annotations = classOrMethod.getDeclaredAnnotations();
+        annotationCache.put(classOrMethod, annotations);
+      }
+    }
+
+    for (Annotation a : annotations) {
+      Class<? extends Annotation> annotationClass = a.annotationType();
+      if (annotationClass.isAnnotationPresent(TesterAnnotation.class)) {
+        result.add(a);
+      }
+    }
+    return result;
+  }
+
+  /**
+   * Find all the constraints explicitly or implicitly specified by a single
+   * tester annotation.
+   * @param testerAnnotation a tester annotation
+   * @return the requirements specified by the annotation
+   * @throws ConflictingRequirementsException if the requirements are mutually
+   *         inconsistent.
+   */
+  private static TesterRequirements buildTesterRequirements(
+      Annotation testerAnnotation)
+      throws ConflictingRequirementsException {
+    Class<? extends Annotation> annotationClass = testerAnnotation.getClass();
+    final Feature<?>[] presentFeatures;
+    final Feature<?>[] absentFeatures;
+    try {
+      presentFeatures = (Feature[]) annotationClass.getMethod("value")
+          .invoke(testerAnnotation);
+      absentFeatures = (Feature[]) annotationClass.getMethod("absent")
+          .invoke(testerAnnotation);
+    } catch (Exception e) {
+      throw new IllegalArgumentException(
+          "Error extracting features from tester annotation.", e);
+    }
+    Set<Feature<?>> allPresentFeatures =
+        addImpliedFeatures(Helpers.<Feature<?>>copyToSet(presentFeatures));
+    Set<Feature<?>> allAbsentFeatures =
+        addImpliedFeatures(Helpers.<Feature<?>>copyToSet(absentFeatures));
+    Set<Feature<?>> conflictingFeatures =
+        intersection(allPresentFeatures, allAbsentFeatures);
+    if (!conflictingFeatures.isEmpty()) {
+      throw new ConflictingRequirementsException("Annotation explicitly or " +
+          "implicitly requires one or more features to be both present " +
+          "and absent.",
+          conflictingFeatures, testerAnnotation);
+    }
+    return new TesterRequirements(allPresentFeatures, allAbsentFeatures);
+  }
+
+  /**
+   * Incorporate additional requirements into an existing requirements object.
+   * @param requirements the existing requirements object
+   * @param moreRequirements more requirements to incorporate
+   * @param source the source of the additional requirements
+   *        (used only for error reporting)
+   * @return the existing requirements object, modified to include the
+   *         additional requirements
+   * @throws ConflictingRequirementsException if the additional requirements
+   *         are inconsistent with the existing requirements
+   */
+  private static TesterRequirements incorporateRequirements(
+      TesterRequirements requirements, TesterRequirements moreRequirements,
+      Object source) throws ConflictingRequirementsException {
+    Set<Feature<?>> presentFeatures = requirements.getPresentFeatures();
+    Set<Feature<?>> absentFeatures = requirements.getAbsentFeatures();
+    Set<Feature<?>> morePresentFeatures = moreRequirements.getPresentFeatures();
+    Set<Feature<?>> moreAbsentFeatures = moreRequirements.getAbsentFeatures();
+    checkConflict(
+        "absent", absentFeatures,
+        "present", morePresentFeatures, source);
+    checkConflict(
+        "present", presentFeatures,
+        "absent", moreAbsentFeatures, source);
+    presentFeatures.addAll(morePresentFeatures);
+    absentFeatures.addAll(moreAbsentFeatures);
+    return requirements;
+  }
+
+  // Used by incorporateRequirements() only
+  private static void checkConflict(
+      String earlierRequirement, Set<Feature<?>> earlierFeatures,
+      String newRequirement, Set<Feature<?>> newFeatures,
+      Object source) throws ConflictingRequirementsException {
+    Set<Feature<?>> conflictingFeatures;
+    conflictingFeatures = intersection(newFeatures, earlierFeatures);
+    if (!conflictingFeatures.isEmpty()) {
+      throw new ConflictingRequirementsException(String.format(
+          "Annotation requires to be %s features that earlier " +
+          "annotations required to be %s.",
+              newRequirement, earlierRequirement),
+          conflictingFeatures, source);
+    }
+  }
+
+  /**
+   * Construct a new {@link java.util.Set} that is the intersection
+   * of the given sets.
+   */
+  // Calls generic varargs method.
+  @SuppressWarnings("unchecked")
+  public static <T> Set<T> intersection(
+      Set<? extends T> set1, Set<? extends T> set2) {
+    return intersection(new Set[] {set1, set2});
+  }
+
+  /**
+   * Construct a new {@link java.util.Set} that is the intersection
+   * of all the given sets.
+   * @param sets the sets to intersect
+   * @return the intersection of the sets
+   * @throws java.lang.IllegalArgumentException if there are no sets to
+   *         intersect
+   */
+  public static <T> Set<T> intersection(Set<? extends T> ... sets) {
+    if (sets.length == 0) {
+      throw new IllegalArgumentException(
+          "Can't intersect no sets; would have to return the universe.");
+    }
+    Set<T> results = Helpers.copyToSet(sets[0]);
+    for (int i = 1; i < sets.length; i++) {
+      Set<? extends T> set = sets[i];
+      results.retainAll(set);
+    }
+    return results;
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/features/ListFeature.java b/guava-testlib/src/com/google/common/collect/testing/features/ListFeature.java
new file mode 100644
index 0000000..095723f
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/features/ListFeature.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.features;
+
+import com.google.common.collect.testing.Helpers;
+
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Optional features of classes derived from {@code List}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author George van den Driessche
+ */
+// Enum values use constructors with generic varargs.
+@SuppressWarnings("unchecked")
+public enum ListFeature implements Feature<List> {
+  SUPPORTS_SET,
+  SUPPORTS_ADD_WITH_INDEX,
+  SUPPORTS_ADD_ALL_WITH_INDEX,
+  SUPPORTS_REMOVE_WITH_INDEX,
+
+  GENERAL_PURPOSE(
+      CollectionFeature.GENERAL_PURPOSE,
+      SUPPORTS_SET,
+      SUPPORTS_ADD_WITH_INDEX,
+      SUPPORTS_ADD_ALL_WITH_INDEX,
+      SUPPORTS_REMOVE_WITH_INDEX
+  ),
+
+  /** Features supported by lists where only removal is allowed. */
+  REMOVE_OPERATIONS(
+      CollectionFeature.REMOVE_OPERATIONS,
+      SUPPORTS_REMOVE_WITH_INDEX
+  );
+
+  private final Set<Feature<? super List>> implied;
+
+  ListFeature(Feature<? super List> ... implied) {
+    this.implied = Helpers.copyToSet(implied);
+  }
+
+  @Override
+  public Set<Feature<? super List>> getImpliedFeatures() {
+    return implied;
+  }
+
+  @Retention(RetentionPolicy.RUNTIME)
+  @Inherited
+  @TesterAnnotation
+  public @interface Require {
+    ListFeature[] value() default {};
+    ListFeature[] absent() default {};
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/features/MapFeature.java b/guava-testlib/src/com/google/common/collect/testing/features/MapFeature.java
new file mode 100644
index 0000000..8d97a09
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/features/MapFeature.java
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.features;
+
+import com.google.common.collect.testing.Helpers;
+
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Optional features of classes derived from {@code Map}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author George van den Driessche
+ */
+// Enum values use constructors with generic varargs.
+@SuppressWarnings("unchecked")
+public enum MapFeature implements Feature<Map> {
+  /**
+   * The map does not throw {@code NullPointerException} on calls such as
+   * {@code containsKey(null)}, {@code get(null)}, or {@code remove(null)}.
+   */
+  ALLOWS_NULL_QUERIES,
+  ALLOWS_NULL_KEYS (ALLOWS_NULL_QUERIES),
+  ALLOWS_NULL_VALUES,
+  RESTRICTS_KEYS,
+  RESTRICTS_VALUES,
+  SUPPORTS_PUT,
+  SUPPORTS_PUT_ALL,
+  SUPPORTS_REMOVE,
+  SUPPORTS_CLEAR,
+  /**
+   * Indicates that the constructor or factory method of a map, usually an
+   * immutable map, throws an {@link IllegalArgumentException} when presented
+   * with duplicate keys instead of discarding all but one.
+   */
+  REJECTS_DUPLICATES_AT_CREATION,
+
+  GENERAL_PURPOSE(
+      SUPPORTS_PUT,
+      SUPPORTS_PUT_ALL,
+      SUPPORTS_REMOVE,
+      SUPPORTS_CLEAR
+  ),
+
+  /** Features supported by maps where only removal is allowed. */
+  REMOVE_OPERATIONS(
+      SUPPORTS_REMOVE,
+      SUPPORTS_CLEAR
+    );
+
+  private final Set<Feature<? super Map>> implied;
+
+  MapFeature(Feature<? super Map> ... implied) {
+    this.implied = Helpers.copyToSet(implied);
+  }
+
+  @Override
+  public Set<Feature<? super Map>> getImpliedFeatures() {
+    return implied;
+  }
+
+  @Retention(RetentionPolicy.RUNTIME)
+  @Inherited
+  @TesterAnnotation
+  public @interface Require {
+    public abstract MapFeature[] value() default {};
+    public abstract MapFeature[] absent() default {};
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/features/SetFeature.java b/guava-testlib/src/com/google/common/collect/testing/features/SetFeature.java
new file mode 100644
index 0000000..7b6c069
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/features/SetFeature.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.features;
+
+import com.google.common.collect.testing.Helpers;
+
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.util.Set;
+
+/**
+ * Optional features of classes derived from {@code Set}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author George van den Driessche
+ */
+// Enum values use constructors with generic varargs.
+@SuppressWarnings("unchecked")
+public enum SetFeature implements Feature<Set> {
+  GENERAL_PURPOSE(
+      CollectionFeature.GENERAL_PURPOSE
+  );
+
+  private final Set<Feature<? super Set>> implied;
+
+  SetFeature(Feature<? super Set> ... implied) {
+    this.implied = Helpers.copyToSet(implied);
+  }
+
+  @Override
+  public Set<Feature<? super Set>> getImpliedFeatures() {
+    return implied;
+  }
+
+  @Retention(RetentionPolicy.RUNTIME)
+  @Inherited
+  @TesterAnnotation
+  public @interface Require {
+    public abstract SetFeature[] value() default {};
+    public abstract SetFeature[] absent() default {};
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/features/TesterAnnotation.java b/guava-testlib/src/com/google/common/collect/testing/features/TesterAnnotation.java
new file mode 100644
index 0000000..bec249c
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/features/TesterAnnotation.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.features;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Use this to meta-annotate XxxFeature.Require annotations, so that those
+ * annotations can be used to decide whether to apply a test to a given
+ * class-under-test.
+ * <br>
+ * This is needed because annotations can't implement interfaces, which is also
+ * why reflection is used to extract values from the properties of the various
+ * annotations.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @see CollectionFeature.Require
+ *
+ * @author George van den Driessche
+ */
+@Target(value = {java.lang.annotation.ElementType.ANNOTATION_TYPE})
+@Retention(value = RetentionPolicy.RUNTIME)
+@Documented
+public @interface TesterAnnotation {
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/features/TesterRequirements.java b/guava-testlib/src/com/google/common/collect/testing/features/TesterRequirements.java
new file mode 100644
index 0000000..1d72e3d
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/features/TesterRequirements.java
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.features;
+
+import com.google.common.collect.testing.Helpers;
+
+import java.util.Collections;
+import java.util.Set;
+
+/**
+ * Encapsulates the constraints that a class under test must satisfy in order
+ * for a tester method to be run against that class.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author George van den Driessche
+ */
+public final class TesterRequirements {
+  private final Set<Feature<?>> presentFeatures;
+  private final Set<Feature<?>> absentFeatures;
+
+  public TesterRequirements(
+      Set<Feature<?>> presentFeatures, Set<Feature<?>> absentFeatures) {
+    this.presentFeatures = Helpers.copyToSet(presentFeatures);
+    this.absentFeatures = Helpers.copyToSet(absentFeatures);
+  }
+
+  public TesterRequirements(TesterRequirements tr) {
+    this(tr.getPresentFeatures(), tr.getAbsentFeatures());
+  }
+
+  public TesterRequirements() {
+    this(Collections.<Feature<?>>emptySet(),
+        Collections.<Feature<?>>emptySet());
+  }
+
+  public final Set<Feature<?>> getPresentFeatures() {
+    return presentFeatures;
+  }
+
+  public final Set<Feature<?>> getAbsentFeatures() {
+    return absentFeatures;
+  }
+
+  @Override public boolean equals(Object object) {
+    if (object == this) {
+      return true;
+    }
+    if (object instanceof TesterRequirements) {
+      TesterRequirements that = (TesterRequirements) object;
+      return this.presentFeatures.equals(that.presentFeatures)
+          && this.absentFeatures.equals(that.absentFeatures);
+    }
+    return false;
+  }
+
+  @Override public int hashCode() {
+    return presentFeatures.hashCode() * 31 + absentFeatures.hashCode();
+  }
+
+  @Override public String toString() {
+    return "{TesterRequirements: present="
+        + presentFeatures + ", absent=" + absentFeatures + "}";
+  }
+
+  private static final long serialVersionUID = 0;
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/google/AbstractMultisetSetCountTester.java b/guava-testlib/src/com/google/common/collect/testing/google/AbstractMultisetSetCountTester.java
new file mode 100644
index 0000000..9219e3e
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/google/AbstractMultisetSetCountTester.java
@@ -0,0 +1,348 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.google;
+
+import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES;
+import static com.google.common.collect.testing.features.CollectionFeature.RESTRICTS_ELEMENTS;
+import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_ADD;
+import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_REMOVE;
+import static com.google.common.collect.testing.features.CollectionSize.SEVERAL;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.collect.Multiset;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+
+import java.lang.reflect.Method;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Common superclass for {@link MultisetSetCountUnconditionallyTester} and
+ * {@link MultisetSetCountConditionallyTester}. It is used by those testers to
+ * test calls to the unconditional {@code setCount()} method and calls to the
+ * conditional {@code setCount()} method when the expected present count is
+ * correct.
+ *
+ * @author Chris Povirk
+ */
+@GwtCompatible
+public abstract class AbstractMultisetSetCountTester<E>
+    extends AbstractMultisetTester<E> {
+  /*
+   * TODO: consider adding MultisetFeatures.SUPPORTS_SET_COUNT. Currently we
+   * assume that using setCount() to increase the count is permitted iff add()
+   * is permitted and similarly for decrease/remove(). We assume that a
+   * setCount() no-op is permitted if either add() or remove() is permitted,
+   * though we also allow it to "succeed" if neither is permitted.
+   */
+
+  private void assertSetCount(E element, int count) {
+    setCountCheckReturnValue(element, count);
+
+    assertEquals(
+        "multiset.count() should return the value passed to setCount()",
+        count, getMultiset().count(element));
+
+    int size = 0;
+    for (Multiset.Entry<E> entry : getMultiset().entrySet()) {
+      size += entry.getCount();
+    }
+    assertEquals(
+        "multiset.size() should be the sum of the counts of all entries",
+        size, getMultiset().size());
+  }
+
+  /**
+   * Call the {@code setCount()} method under test, and check its return value.
+   */
+  abstract void setCountCheckReturnValue(E element, int count);
+
+  /**
+   * Call the {@code setCount()} method under test, but do not check its return
+   * value. Callers should use this method over
+   * {@link #setCountCheckReturnValue(Object, int)} when they expect
+   * {@code setCount()} to throw an exception, as checking the return value
+   * could produce an incorrect error message like
+   * "setCount() should return the original count" instead of the message passed
+   * to a later invocation of {@code fail()}, like "setCount should throw
+   * UnsupportedOperationException."
+   */
+  abstract void setCountNoCheckReturnValue(E element, int count);
+
+  private void assertSetCountIncreasingFailure(E element, int count) {
+    try {
+      setCountNoCheckReturnValue(element, count);
+      fail("a call to multiset.setCount() to increase an element's count "
+          + "should throw");
+    } catch (UnsupportedOperationException expected) {
+    }
+  }
+
+  private void assertSetCountDecreasingFailure(E element, int count) {
+    try {
+      setCountNoCheckReturnValue(element, count);
+      fail("a call to multiset.setCount() to decrease an element's count "
+          + "should throw");
+    } catch (UnsupportedOperationException expected) {
+    }
+  }
+
+  // Unconditional setCount no-ops.
+
+  private void assertZeroToZero() {
+    assertSetCount(samples.e3, 0);
+  }
+
+  private void assertOneToOne() {
+    assertSetCount(samples.e0, 1);
+  }
+
+  private void assertThreeToThree() {
+    initThreeCopies();
+    assertSetCount(samples.e0, 3);
+  }
+
+  @CollectionFeature.Require(SUPPORTS_ADD)
+  public void testSetCount_zeroToZero_addSupported() {
+    assertZeroToZero();
+  }
+
+  @CollectionFeature.Require(SUPPORTS_REMOVE)
+  public void testSetCount_zeroToZero_removeSupported() {
+    assertZeroToZero();
+  }
+
+  @CollectionFeature.Require(absent = {SUPPORTS_ADD, SUPPORTS_REMOVE})
+  public void testSetCount_zeroToZero_unsupported() {
+    try {
+      assertZeroToZero();
+    } catch (UnsupportedOperationException tolerated) {
+    }
+  }
+
+  @CollectionSize.Require(absent = ZERO)
+  @CollectionFeature.Require(SUPPORTS_ADD)
+  public void testSetCount_oneToOne_addSupported() {
+    assertOneToOne();
+  }
+
+  @CollectionSize.Require(absent = ZERO)
+  @CollectionFeature.Require(SUPPORTS_REMOVE)
+  public void testSetCount_oneToOne_removeSupported() {
+    assertOneToOne();
+  }
+
+  @CollectionSize.Require(absent = ZERO)
+  @CollectionFeature.Require(absent = {SUPPORTS_ADD, SUPPORTS_REMOVE})
+  public void testSetCount_oneToOne_unsupported() {
+    try {
+      assertOneToOne();
+    } catch (UnsupportedOperationException tolerated) {
+    }
+  }
+
+  @CollectionSize.Require(SEVERAL)
+  @CollectionFeature.Require(SUPPORTS_ADD)
+  public void testSetCount_threeToThree_addSupported() {
+    assertThreeToThree();
+  }
+
+  @CollectionSize.Require(SEVERAL)
+  @CollectionFeature.Require(SUPPORTS_REMOVE)
+  public void testSetCount_threeToThree_removeSupported() {
+    assertThreeToThree();
+  }
+
+  @CollectionSize.Require(SEVERAL)
+  @CollectionFeature.Require(absent = {SUPPORTS_ADD, SUPPORTS_REMOVE})
+  public void testSetCount_threeToThree_unsupported() {
+    try {
+      assertThreeToThree();
+    } catch (UnsupportedOperationException tolerated) {
+    }
+  }
+
+  // Unconditional setCount size increases:
+
+  @CollectionFeature.Require(SUPPORTS_ADD)
+  public void testSetCount_zeroToOne_supported() {
+    assertSetCount(samples.e3, 1);
+  }
+
+  @CollectionFeature.Require(SUPPORTS_ADD)
+  public void testSetCount_zeroToThree_supported() {
+    assertSetCount(samples.e3, 3);
+  }
+
+  @CollectionSize.Require(absent = ZERO)
+  @CollectionFeature.Require(SUPPORTS_ADD)
+  public void testSetCount_oneToThree_supported() {
+    assertSetCount(samples.e0, 3);
+  }
+
+  @CollectionFeature.Require(absent = SUPPORTS_ADD)
+  public void testSetCount_zeroToOne_unsupported() {
+    assertSetCountIncreasingFailure(samples.e3, 1);
+  }
+
+  @CollectionFeature.Require(absent = SUPPORTS_ADD)
+  public void testSetCount_zeroToThree_unsupported() {
+    assertSetCountIncreasingFailure(samples.e3, 3);
+  }
+
+  @CollectionSize.Require(absent = ZERO)
+  @CollectionFeature.Require(absent = SUPPORTS_ADD)
+  public void testSetCount_oneToThree_unsupported() {
+    assertSetCountIncreasingFailure(samples.e3, 3);
+  }
+
+  // Unconditional setCount size decreases:
+
+  @CollectionSize.Require(absent = ZERO)
+  @CollectionFeature.Require(SUPPORTS_REMOVE)
+  public void testSetCount_oneToZero_supported() {
+    assertSetCount(samples.e0, 0);
+  }
+
+  @CollectionSize.Require(SEVERAL)
+  @CollectionFeature.Require(SUPPORTS_REMOVE)
+  public void testSetCount_threeToZero_supported() {
+    initThreeCopies();
+    assertSetCount(samples.e0, 0);
+  }
+
+  @CollectionSize.Require(SEVERAL)
+  @CollectionFeature.Require(SUPPORTS_REMOVE)
+  public void testSetCount_threeToOne_supported() {
+    initThreeCopies();
+    assertSetCount(samples.e0, 1);
+  }
+
+  @CollectionSize.Require(absent = ZERO)
+  @CollectionFeature.Require(absent = SUPPORTS_REMOVE)
+  public void testSetCount_oneToZero_unsupported() {
+    assertSetCountDecreasingFailure(samples.e0, 0);
+  }
+
+  @CollectionSize.Require(SEVERAL)
+  @CollectionFeature.Require(absent = SUPPORTS_REMOVE)
+  public void testSetCount_threeToZero_unsupported() {
+    initThreeCopies();
+    assertSetCountDecreasingFailure(samples.e0, 0);
+  }
+
+  @CollectionSize.Require(SEVERAL)
+  @CollectionFeature.Require(absent = SUPPORTS_REMOVE)
+  public void testSetCount_threeToOne_unsupported() {
+    initThreeCopies();
+    assertSetCountDecreasingFailure(samples.e0, 1);
+  }
+
+  // setCount with nulls:
+
+  @CollectionSize.Require(absent = ZERO)
+  @CollectionFeature.Require({SUPPORTS_REMOVE, ALLOWS_NULL_VALUES})
+  public void testSetCount_removeNull_nullSupported() {
+    initCollectionWithNullElement();
+    assertSetCount(null, 0);
+  }
+
+  @CollectionFeature.Require(value = {SUPPORTS_ADD, ALLOWS_NULL_VALUES},
+      absent = RESTRICTS_ELEMENTS)
+  public void testSetCount_addNull_nullSupported() {
+    assertSetCount(null, 1);
+  }
+
+  @CollectionFeature.Require(value = SUPPORTS_ADD, absent = ALLOWS_NULL_VALUES)
+  public void testSetCount_addNull_nullUnsupported() {
+    try {
+      setCountNoCheckReturnValue(null, 1);
+      fail("adding null with setCount() should throw NullPointerException");
+    } catch (NullPointerException expected) {
+    }
+  }
+
+  @CollectionFeature.Require(ALLOWS_NULL_VALUES)
+  public void testSetCount_noOpNull_nullSupported() {
+    try {
+      assertSetCount(null, 0);
+    } catch (UnsupportedOperationException tolerated) {
+    }
+  }
+
+  @CollectionFeature.Require(absent = ALLOWS_NULL_VALUES)
+  public void testSetCount_noOpNull_nullUnsupported() {
+    try {
+      assertSetCount(null, 0);
+    } catch (NullPointerException tolerated) {
+    } catch (UnsupportedOperationException tolerated) {
+    }
+  }
+
+  @CollectionSize.Require(absent = ZERO)
+  @CollectionFeature.Require(ALLOWS_NULL_VALUES)
+  public void testSetCount_existingNoNopNull_nullSupported() {
+    initCollectionWithNullElement();
+    try {
+      assertSetCount(null, 1);
+    } catch (UnsupportedOperationException tolerated) {
+    }
+  }
+
+  // Negative count.
+
+  @CollectionFeature.Require(SUPPORTS_REMOVE)
+  public void testSetCount_negative_removeSupported() {
+    try {
+      setCountNoCheckReturnValue(samples.e3, -1);
+      fail("calling setCount() with a negative count should throw "
+          + "IllegalArgumentException");
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  @CollectionFeature.Require(absent = SUPPORTS_REMOVE)
+  public void testSetCount_negative_removeUnsupported() {
+    try {
+      setCountNoCheckReturnValue(samples.e3, -1);
+      fail("calling setCount() with a negative count should throw "
+          + "IllegalArgumentException or UnsupportedOperationException");
+    } catch (IllegalArgumentException expected) {
+    } catch (UnsupportedOperationException expected) {
+    }
+  }
+
+  // TODO: test adding element of wrong type
+
+  /**
+   * Returns {@link Method} instances for the {@code setCount()} tests that
+   * assume multisets support duplicates so that the test of {@code
+   * Multisets.forSet()} can suppress them.
+   */
+  public static List<Method> getSetCountDuplicateInitializingMethods() {
+    return Arrays.asList(
+        getMethod("testSetCount_threeToThree_removeSupported"),
+        getMethod("testSetCount_threeToZero_supported"),
+        getMethod("testSetCount_threeToOne_supported"));
+  }
+
+  private static Method getMethod(String methodName) {
+    return Platform.getMethod(AbstractMultisetSetCountTester.class, methodName);
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/google/AbstractMultisetTester.java b/guava-testlib/src/com/google/common/collect/testing/google/AbstractMultisetTester.java
new file mode 100644
index 0000000..c4317d1
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/google/AbstractMultisetTester.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.google;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.collect.Multiset;
+import com.google.common.collect.testing.AbstractCollectionTester;
+
+/**
+ * Base class for multiset collection tests.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible
+public class AbstractMultisetTester<E> extends AbstractCollectionTester<E> {
+  protected final Multiset<E> getMultiset() {
+    return (Multiset<E>) collection;
+  }
+
+  protected void initThreeCopies() {
+    collection =
+        getSubjectGenerator().create(samples.e0, samples.e0, samples.e0);
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/google/BiMapGenerators.java b/guava-testlib/src/com/google/common/collect/testing/google/BiMapGenerators.java
new file mode 100644
index 0000000..987ae9c
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/google/BiMapGenerators.java
@@ -0,0 +1,119 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.google;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.collect.ImmutableBiMap;
+import com.google.common.collect.Maps;
+import com.google.common.collect.testing.SampleElements;
+import com.google.common.collect.testing.TestMapEntrySetGenerator;
+import com.google.common.collect.testing.TestStringSetGenerator;
+
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+/**
+ * Generators of various {@link com.google.common.collect.BiMap}s and derived
+ * collections.
+ *
+ * @author Jared Levy
+ * @author Hayward Chan
+ */
+@GwtCompatible
+public class BiMapGenerators {
+
+  public static class ImmutableBiMapKeySetGenerator
+      extends TestStringSetGenerator {
+    @Override protected Set<String> create(String[] elements) {
+      Map<String, Integer> map = Maps.newLinkedHashMap();
+      for (int i = 0; i < elements.length; i++) {
+        map.put(elements[i], i);
+      }
+      return ImmutableBiMap.copyOf(map).keySet();
+    }
+  }
+
+  public static class ImmutableBiMapValuesGenerator
+      extends TestStringSetGenerator {
+    @Override protected Set<String> create(String[] elements) {
+      Map<Integer, String> map = Maps.newLinkedHashMap();
+      for (int i = 0; i < elements.length; i++) {
+        map.put(i, elements[i]);
+      }
+      return ImmutableBiMap.copyOf(map).values();
+    }
+  }
+
+  public static class ImmutableBiMapInverseEntrySetGenerator
+      extends TestMapEntrySetGenerator<String, String> {
+
+    public ImmutableBiMapInverseEntrySetGenerator() {
+      super(new SampleElements.Strings(), new SampleElements.Strings());
+    }
+    @Override public Set<Entry<String, String>> createFromEntries(
+        Entry<String, String>[] entries) {
+      Map<String, String> map = Maps.newLinkedHashMap();
+      for (Entry<String, String> entry : entries) {
+        checkNotNull(entry);
+        map.put(entry.getValue(), entry.getKey());
+      }
+      return ImmutableBiMap.copyOf(map).inverse().entrySet();
+    }
+  }
+
+  public static class ImmutableBiMapInverseKeySetGenerator
+      extends TestStringSetGenerator {
+    @Override protected Set<String> create(String[] elements) {
+      Map<Integer, String> map = Maps.newLinkedHashMap();
+      for (int i = 0; i < elements.length; i++) {
+        map.put(i, elements[i]);
+      }
+      return ImmutableBiMap.copyOf(map).inverse().keySet();
+    }
+  }
+
+  public static class ImmutableBiMapInverseValuesGenerator
+      extends TestStringSetGenerator {
+    @Override protected Set<String> create(String[] elements) {
+      Map<String, Integer> map = Maps.newLinkedHashMap();
+      for (int i = 0; i < elements.length; i++) {
+        map.put(elements[i], i);
+      }
+      return ImmutableBiMap.copyOf(map).inverse().values();
+    }
+  }
+
+  public static class ImmutableBiMapEntrySetGenerator
+      extends TestMapEntrySetGenerator<String, String> {
+
+    public ImmutableBiMapEntrySetGenerator() {
+      super(new SampleElements.Strings(), new SampleElements.Strings());
+    }
+    @Override public Set<Entry<String, String>> createFromEntries(
+        Entry<String, String>[] entries) {
+      Map<String, String> map = Maps.newLinkedHashMap();
+      for (Entry<String, String> entry : entries) {
+        checkNotNull(entry);
+        map.put(entry.getKey(), entry.getValue());
+      }
+      return ImmutableBiMap.copyOf(map).entrySet();
+    }
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/google/ListGenerators.java b/guava-testlib/src/com/google/common/collect/testing/google/ListGenerators.java
new file mode 100644
index 0000000..e0b7691
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/google/ListGenerators.java
@@ -0,0 +1,128 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.google;
+
+import static java.util.Arrays.asList;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableList.Builder;
+import com.google.common.collect.testing.TestListGenerator;
+import com.google.common.collect.testing.TestStringListGenerator;
+import com.google.common.collect.testing.TestUnhashableCollectionGenerator;
+import com.google.common.collect.testing.UnhashableObject;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * Common generators of different types of lists.
+ *
+ * @author Hayward Chan
+ */
+@GwtCompatible
+public final class ListGenerators {
+
+  private ListGenerators() {}
+
+  public static class ImmutableListOfGenerator extends TestStringListGenerator {
+    @Override protected List<String> create(String[] elements) {
+      return ImmutableList.copyOf(elements);
+    }
+  }
+
+  public static class BuilderAddListGenerator extends TestStringListGenerator {
+    @Override protected List<String> create(String[] elements) {
+      Builder<String> builder = ImmutableList.<String>builder();
+      for (String element : elements) {
+        builder.add(element);
+      }
+      return builder.build();
+    }
+  }
+
+  public static class BuilderAddAllListGenerator
+      extends TestStringListGenerator {
+    @Override protected List<String> create(String[] elements) {
+      return ImmutableList.<String>builder()
+          .addAll(asList(elements))
+          .build();
+    }
+  }
+  
+  public static class BuilderReversedListGenerator
+      extends TestStringListGenerator {
+    @Override protected List<String> create(String[] elements) {
+      List<String> list = asList(elements);
+      Collections.reverse(list);
+      return ImmutableList.copyOf(list).reverse();
+    }
+  }
+
+  public static class ImmutableListHeadSubListGenerator
+      extends TestStringListGenerator {
+    @Override protected List<String> create(String[] elements) {
+      String[] suffix = {"f", "g"};
+      String[] all = new String[elements.length + suffix.length];
+      System.arraycopy(elements, 0, all, 0, elements.length);
+      System.arraycopy(suffix, 0, all, elements.length, suffix.length);
+      return ImmutableList.copyOf(all)
+          .subList(0, elements.length);
+    }
+  }
+
+  public static class ImmutableListTailSubListGenerator
+      extends TestStringListGenerator {
+    @Override protected List<String> create(String[] elements) {
+      String[] prefix = {"f", "g"};
+      String[] all = new String[elements.length + prefix.length];
+      System.arraycopy(prefix, 0, all, 0, 2);
+      System.arraycopy(elements, 0, all, 2, elements.length);
+      return ImmutableList.copyOf(all)
+          .subList(2, elements.length + 2);
+    }
+  }
+
+  public static class ImmutableListMiddleSubListGenerator
+      extends TestStringListGenerator {
+    @Override protected List<String> create(String[] elements) {
+      String[] prefix = {"f", "g"};
+      String[] suffix = {"h", "i"};
+
+      String[] all = new String[2 + elements.length + 2];
+      System.arraycopy(prefix, 0, all, 0, 2);
+      System.arraycopy(elements, 0, all, 2, elements.length);
+      System.arraycopy(suffix, 0, all, 2 + elements.length, 2);
+
+      return ImmutableList.copyOf(all)
+          .subList(2, elements.length + 2);
+    }
+  }
+
+  private abstract static class TestUnhashableListGenerator
+      extends TestUnhashableCollectionGenerator<List<UnhashableObject>>
+      implements TestListGenerator<UnhashableObject> {
+  }
+
+  public static class UnhashableElementsImmutableListGenerator
+      extends TestUnhashableListGenerator {
+    @Override
+    public List<UnhashableObject> create(UnhashableObject[] elements) {
+      return ImmutableList.copyOf(elements);
+    }
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/google/MapGenerators.java b/guava-testlib/src/com/google/common/collect/testing/google/MapGenerators.java
new file mode 100644
index 0000000..2dd9f54
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/google/MapGenerators.java
@@ -0,0 +1,150 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.google;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableMap.Builder;
+import com.google.common.collect.testing.SampleElements;
+import com.google.common.collect.testing.TestCollectionGenerator;
+import com.google.common.collect.testing.TestListGenerator;
+import com.google.common.collect.testing.TestMapEntrySetGenerator;
+import com.google.common.collect.testing.TestStringSetGenerator;
+import com.google.common.collect.testing.TestUnhashableCollectionGenerator;
+import com.google.common.collect.testing.UnhashableObject;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map.Entry;
+import java.util.Set;
+
+/**
+ * Generators of different types of map and related collections, such as
+ * keys, entries and values.
+ *
+ * @author Hayward Chan
+ */
+@GwtCompatible
+public class MapGenerators {
+
+  public static class ImmutableMapKeySetGenerator
+      extends TestStringSetGenerator {
+    @Override protected Set<String> create(String[] elements) {
+      Builder<String, Integer> builder = ImmutableMap.builder();
+      for (String key : elements) {
+        builder.put(key, 4);
+      }
+      return builder.build().keySet();
+    }
+  }
+
+  public static class ImmutableMapValuesGenerator
+      implements TestCollectionGenerator<String> {
+
+    @Override
+    public SampleElements<String> samples() {
+      return new SampleElements.Strings();
+    }
+
+    @Override
+    public Collection<String> create(Object... elements) {
+      Builder<Object, String> builder = ImmutableMap.builder();
+      for (Object key : elements) {
+        builder.put(key, String.valueOf(key));
+      }
+      return builder.build().values();
+    }
+
+    @Override
+    public String[] createArray(int length) {
+      return new String[length];
+    }
+
+    @Override
+    public List<String> order(List<String> insertionOrder) {
+      return insertionOrder;
+    }
+  }
+
+  public static class ImmutableMapUnhashableValuesGenerator
+      extends TestUnhashableCollectionGenerator<Collection<UnhashableObject>> {
+
+    @Override public Collection<UnhashableObject> create(
+        UnhashableObject[] elements) {
+      Builder<Integer, UnhashableObject> builder = ImmutableMap.builder();
+      int key = 1;
+      for (UnhashableObject value : elements) {
+        builder.put(key++, value);
+      }
+      return builder.build().values();
+    }
+  }
+
+  public static class ImmutableMapEntrySetGenerator
+      extends TestMapEntrySetGenerator<String, String> {
+
+    public ImmutableMapEntrySetGenerator() {
+      super(new SampleElements.Strings(), new SampleElements.Strings());
+    }
+
+    @Override public Set<Entry<String, String>> createFromEntries(
+        Entry<String, String>[] entries) {
+      Builder<String, String> builder = ImmutableMap.builder();
+      for (Entry<String, String> entry : entries) {
+        // This null-check forces NPE to be thrown for tests with null
+        // elements.  Those tests aren't useful in testing entry sets
+        // because entry sets never have null elements.
+        checkNotNull(entry);
+        builder.put(entry.getKey(), entry.getValue());
+      }
+      return builder.build().entrySet();
+    }
+  }
+
+  public static class ImmutableMapValueListGenerator
+      implements TestListGenerator<String> {
+    @Override
+    public SampleElements<String> samples() {
+      return new SampleElements.Strings();
+    }
+
+    @Override
+    public List<String> create(Object... elements) {
+      Builder<Integer, String> builder = ImmutableMap.builder();
+      for (int i = 0; i < elements.length; i++) {
+        builder.put(i, toStringOrNull(elements[i]));
+      }
+      return builder.build().values().asList();
+    }
+
+    @Override
+    public String[] createArray(int length) {
+      return new String[length];
+    }
+
+    @Override
+    public Iterable<String> order(List<String> insertionOrder) {
+      return insertionOrder;
+    }
+  }
+
+  private static String toStringOrNull(Object o) {
+    return (o == null) ? null : o.toString();
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/google/MultisetIteratorTester.java b/guava-testlib/src/com/google/common/collect/testing/google/MultisetIteratorTester.java
new file mode 100644
index 0000000..63082d5
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/google/MultisetIteratorTester.java
@@ -0,0 +1,103 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ * 
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.google;
+
+import static com.google.common.collect.testing.features.CollectionFeature.KNOWN_ORDER;
+import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_REMOVE;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.collect.testing.IteratorFeature;
+import com.google.common.collect.testing.IteratorTester;
+import com.google.common.collect.testing.features.CollectionFeature;
+
+import java.lang.reflect.Method;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * Tester to make sure the {@code iterator().remove()} implementation of {@code Multiset} works when
+ * there are multiple occurrences of elements.
+ * 
+ * @author Louis Wasserman
+ */
+@GwtCompatible
+public class MultisetIteratorTester<E> extends AbstractMultisetTester<E> {
+  @SuppressWarnings("unchecked")
+  @CollectionFeature.Require({SUPPORTS_REMOVE, KNOWN_ORDER})
+  public void testRemovingIteratorKnownOrder() {
+    new IteratorTester<E>(4, IteratorFeature.MODIFIABLE, getSubjectGenerator().order(
+        Arrays.asList(samples.e0, samples.e1, samples.e1, samples.e2)),
+        IteratorTester.KnownOrder.KNOWN_ORDER) {
+      @Override
+      protected Iterator<E> newTargetIterator() {
+        return getSubjectGenerator().create(samples.e0, samples.e1, samples.e1, samples.e2)
+            .iterator();
+      }
+    }.test();
+  }
+
+  @SuppressWarnings("unchecked")
+  @CollectionFeature.Require(value = SUPPORTS_REMOVE, absent = KNOWN_ORDER)
+  public void testRemovingIteratorUnknownOrder() {
+    new IteratorTester<E>(4, IteratorFeature.MODIFIABLE, Arrays.asList(samples.e0, samples.e1,
+        samples.e1, samples.e2), IteratorTester.KnownOrder.UNKNOWN_ORDER) {
+      @Override
+      protected Iterator<E> newTargetIterator() {
+        return getSubjectGenerator().create(samples.e0, samples.e1, samples.e1, samples.e2)
+            .iterator();
+      }
+    }.test();
+  }
+
+  @SuppressWarnings("unchecked")
+  @CollectionFeature.Require(value = KNOWN_ORDER, absent = SUPPORTS_REMOVE)
+  public void testIteratorKnownOrder() {
+    new IteratorTester<E>(4, IteratorFeature.UNMODIFIABLE, getSubjectGenerator().order(
+        Arrays.asList(samples.e0, samples.e1, samples.e1, samples.e2)),
+        IteratorTester.KnownOrder.KNOWN_ORDER) {
+      @Override
+      protected Iterator<E> newTargetIterator() {
+        return getSubjectGenerator().create(samples.e0, samples.e1, samples.e1, samples.e2)
+            .iterator();
+      }
+    }.test();
+  }
+
+  @SuppressWarnings("unchecked")
+  @CollectionFeature.Require(absent = {SUPPORTS_REMOVE, KNOWN_ORDER})
+  public void testIteratorUnknownOrder() {
+    new IteratorTester<E>(4, IteratorFeature.UNMODIFIABLE, Arrays.asList(samples.e0, samples.e1,
+        samples.e1, samples.e2), IteratorTester.KnownOrder.UNKNOWN_ORDER) {
+      @Override
+      protected Iterator<E> newTargetIterator() {
+        return getSubjectGenerator().create(samples.e0, samples.e1, samples.e1, samples.e2)
+            .iterator();
+      }
+    }.test();
+  }
+
+  /**
+   * Returns {@link Method} instances for the tests that assume multisets support duplicates so that
+   * the test of {@code Multisets.forSet()} can suppress them.
+   */
+  public static List<Method> getIteratorDuplicateInitializingMethods() {
+    return Arrays.asList(
+        Platform.getMethod(MultisetIteratorTester.class, "testIteratorKnownOrder"),
+        Platform.getMethod(MultisetIteratorTester.class, "testIteratorUnknownOrder"),
+        Platform.getMethod(MultisetIteratorTester.class, "testRemovingIteratorKnownOrder"),
+        Platform.getMethod(MultisetIteratorTester.class, "testRemovingIteratorUnknownOrder"));
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/google/MultisetNavigationTester.java b/guava-testlib/src/com/google/common/collect/testing/google/MultisetNavigationTester.java
new file mode 100644
index 0000000..e817738
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/google/MultisetNavigationTester.java
@@ -0,0 +1,666 @@
+/*
+ * Copyright (C) 2011 Google Inc.
+ * 
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.google;
+
+import static com.google.common.collect.BoundType.CLOSED;
+import static com.google.common.collect.BoundType.OPEN;
+import static com.google.common.collect.testing.Helpers.copyToList;
+import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_ADD;
+import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_REMOVE;
+import static com.google.common.collect.testing.features.CollectionSize.ONE;
+import static com.google.common.collect.testing.features.CollectionSize.SEVERAL;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.collect.BoundType;
+import com.google.common.collect.Iterators;
+import com.google.common.collect.Multiset;
+import com.google.common.collect.Multiset.Entry;
+import com.google.common.collect.Multisets;
+import com.google.common.collect.SortedMultiset;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.NoSuchElementException;
+
+/**
+ * Tester for navigation of SortedMultisets.
+ * 
+ * @author Louis Wasserman
+ */
+@GwtCompatible
+public class MultisetNavigationTester<E> extends AbstractMultisetTester<E> {
+  private SortedMultiset<E> sortedMultiset;
+  private List<E> entries;
+  private Entry<E> a;
+  private Entry<E> b;
+  private Entry<E> c;
+
+  /**
+   * Used to avoid http://bugs.sun.com/view_bug.do?bug_id=6558557
+   */
+  static <T> SortedMultiset<T> cast(Multiset<T> iterable) {
+    return (SortedMultiset<T>) iterable;
+  }
+
+  @Override
+  public void setUp() throws Exception {
+    super.setUp();
+    sortedMultiset = cast(getMultiset());
+    entries =
+        copyToList(getSubjectGenerator().getSampleElements(
+            getSubjectGenerator().getCollectionSize().getNumElements()));
+    Collections.sort(entries, sortedMultiset.comparator());
+
+    // some tests assume SEVERAL == 3
+    if (entries.size() >= 1) {
+      a = Multisets.immutableEntry(entries.get(0), sortedMultiset.count(entries.get(0)));
+      if (entries.size() >= 3) {
+        b = Multisets.immutableEntry(entries.get(1), sortedMultiset.count(entries.get(1)));
+        c = Multisets.immutableEntry(entries.get(2), sortedMultiset.count(entries.get(2)));
+      }
+    }
+  }
+
+  /**
+   * Resets the contents of sortedMultiset to have entries a, c, for the navigation tests.
+   */
+  @SuppressWarnings("unchecked")
+  // Needed to stop Eclipse whining
+  private void resetWithHole() {
+    List<E> container = new ArrayList<E>();
+    container.addAll(Collections.nCopies(a.getCount(), a.getElement()));
+    container.addAll(Collections.nCopies(c.getCount(), c.getElement()));
+    super.resetContainer(getSubjectGenerator().create(container.toArray()));
+    sortedMultiset = (SortedMultiset<E>) getMultiset();
+  }
+
+  @CollectionSize.Require(ZERO)
+  public void testEmptyMultisetFirst() {
+    assertNull(sortedMultiset.firstEntry());
+    try {
+      sortedMultiset.elementSet().first();
+      fail();
+    } catch (NoSuchElementException e) {}
+  }
+
+  @CollectionFeature.Require(SUPPORTS_REMOVE)
+  @CollectionSize.Require(ZERO)
+  public void testEmptyMultisetPollFirst() {
+    assertNull(sortedMultiset.pollFirstEntry());
+  }
+
+  @CollectionSize.Require(ZERO)
+  public void testEmptyMultisetNearby() {
+    for (BoundType type : BoundType.values()) {
+      assertNull(sortedMultiset.headMultiset(samples.e0, type).lastEntry());
+      assertNull(sortedMultiset.tailMultiset(samples.e0, type).firstEntry());
+    }
+  }
+
+  @CollectionSize.Require(ZERO)
+  public void testEmptyMultisetLast() {
+    assertNull(sortedMultiset.lastEntry());
+    try {
+      assertNull(sortedMultiset.elementSet().last());
+      fail();
+    } catch (NoSuchElementException e) {}
+  }
+
+  @CollectionFeature.Require(SUPPORTS_REMOVE)
+  @CollectionSize.Require(ZERO)
+  public void testEmptyMultisetPollLast() {
+    assertNull(sortedMultiset.pollLastEntry());
+  }
+
+  @CollectionSize.Require(ONE)
+  public void testSingletonMultisetFirst() {
+    assertEquals(a, sortedMultiset.firstEntry());
+  }
+
+  @CollectionFeature.Require(SUPPORTS_REMOVE)
+  @CollectionSize.Require(ONE)
+  public void testSingletonMultisetPollFirst() {
+    assertEquals(a, sortedMultiset.pollFirstEntry());
+    assertTrue(sortedMultiset.isEmpty());
+  }
+
+  @CollectionSize.Require(ONE)
+  public void testSingletonMultisetNearby() {
+    assertNull(sortedMultiset.headMultiset(samples.e0, OPEN).lastEntry());
+    assertNull(sortedMultiset.tailMultiset(samples.e0, OPEN).lastEntry());
+
+    assertEquals(a, sortedMultiset.headMultiset(samples.e0, CLOSED).lastEntry());
+    assertEquals(a, sortedMultiset.tailMultiset(samples.e0, CLOSED).firstEntry());
+  }
+
+  @CollectionSize.Require(ONE)
+  public void testSingletonMultisetLast() {
+    assertEquals(a, sortedMultiset.lastEntry());
+  }
+
+  @CollectionFeature.Require(SUPPORTS_REMOVE)
+  @CollectionSize.Require(ONE)
+  public void testSingletonMultisetPollLast() {
+    assertEquals(a, sortedMultiset.pollLastEntry());
+    assertTrue(sortedMultiset.isEmpty());
+  }
+
+  @CollectionSize.Require(SEVERAL)
+  public void testFirst() {
+    assertEquals(a, sortedMultiset.firstEntry());
+  }
+
+  @SuppressWarnings("unchecked")
+  @CollectionFeature.Require(SUPPORTS_REMOVE)
+  @CollectionSize.Require(SEVERAL)
+  public void testPollFirst() {
+    assertEquals(a, sortedMultiset.pollFirstEntry());
+    assertEquals(Arrays.asList(b, c), copyToList(sortedMultiset.entrySet()));
+  }
+
+  @CollectionFeature.Require(absent = SUPPORTS_REMOVE)
+  public void testPollFirstUnsupported() {
+    try {
+      sortedMultiset.pollFirstEntry();
+      fail();
+    } catch (UnsupportedOperationException e) {}
+  }
+
+  @CollectionSize.Require(SEVERAL)
+  public void testLower() {
+    resetWithHole();
+    assertEquals(null, sortedMultiset.headMultiset(a.getElement(), OPEN).lastEntry());
+    assertEquals(a, sortedMultiset.headMultiset(b.getElement(), OPEN).lastEntry());
+    assertEquals(a, sortedMultiset.headMultiset(c.getElement(), OPEN).lastEntry());
+  }
+
+  @CollectionSize.Require(SEVERAL)
+  public void testFloor() {
+    resetWithHole();
+    assertEquals(a, sortedMultiset.headMultiset(a.getElement(), CLOSED).lastEntry());
+    assertEquals(a, sortedMultiset.headMultiset(b.getElement(), CLOSED).lastEntry());
+    assertEquals(c, sortedMultiset.headMultiset(c.getElement(), CLOSED).lastEntry());
+  }
+
+  @CollectionSize.Require(SEVERAL)
+  public void testCeiling() {
+    resetWithHole();
+
+    assertEquals(a, sortedMultiset.tailMultiset(a.getElement(), CLOSED).firstEntry());
+    assertEquals(c, sortedMultiset.tailMultiset(b.getElement(), CLOSED).firstEntry());
+    assertEquals(c, sortedMultiset.tailMultiset(c.getElement(), CLOSED).firstEntry());
+  }
+
+  @CollectionSize.Require(SEVERAL)
+  public void testHigher() {
+    resetWithHole();
+    assertEquals(c, sortedMultiset.tailMultiset(a.getElement(), OPEN).firstEntry());
+    assertEquals(c, sortedMultiset.tailMultiset(b.getElement(), OPEN).firstEntry());
+    assertEquals(null, sortedMultiset.tailMultiset(c.getElement(), OPEN).firstEntry());
+  }
+
+  @CollectionSize.Require(SEVERAL)
+  public void testLast() {
+    assertEquals(c, sortedMultiset.lastEntry());
+  }
+
+  @SuppressWarnings("unchecked")
+  @CollectionFeature.Require(SUPPORTS_REMOVE)
+  @CollectionSize.Require(SEVERAL)
+  public void testPollLast() {
+    assertEquals(c, sortedMultiset.pollLastEntry());
+    assertEquals(Arrays.asList(a, b), copyToList(sortedMultiset.entrySet()));
+  }
+
+  @CollectionFeature.Require(absent = SUPPORTS_REMOVE)
+  @CollectionSize.Require(SEVERAL)
+  public void testPollLastUnsupported() {
+    try {
+      sortedMultiset.pollLastEntry();
+      fail();
+    } catch (UnsupportedOperationException e) {}
+  }
+
+  @CollectionSize.Require(SEVERAL)
+  public void testDescendingNavigation() {
+    List<Entry<E>> ascending = new ArrayList<Entry<E>>();
+    Iterators.addAll(ascending, sortedMultiset.entrySet().iterator());
+    List<Entry<E>> descending = new ArrayList<Entry<E>>();
+    Iterators.addAll(descending, sortedMultiset.descendingMultiset().entrySet().iterator());
+    Collections.reverse(descending);
+    assertEquals(ascending, descending);
+  }
+
+  void expectAddFailure(SortedMultiset<E> multiset, Entry<E> entry) {
+    try {
+      multiset.add(entry.getElement(), entry.getCount());
+      fail("Expected IllegalArgumentException");
+    } catch (IllegalArgumentException expected) {}
+
+    try {
+      multiset.add(entry.getElement());
+      fail("Expected IllegalArgumentException");
+    } catch (IllegalArgumentException expected) {}
+
+    try {
+      multiset.addAll(Collections.singletonList(entry.getElement()));
+      fail("Expected IllegalArgumentException");
+    } catch (IllegalArgumentException expected) {}
+  }
+
+  void expectRemoveZero(SortedMultiset<E> multiset, Entry<E> entry) {
+    assertEquals(0, multiset.remove(entry.getElement(), entry.getCount()));
+    assertFalse(multiset.remove(entry.getElement()));
+    assertFalse(multiset.elementSet().remove(entry.getElement()));
+  }
+
+  void expectSetCountFailure(SortedMultiset<E> multiset, Entry<E> entry) {
+    try {
+      multiset.setCount(entry.getElement(), multiset.count(entry.getElement()));
+    } catch (IllegalArgumentException acceptable) {}
+    try {
+      multiset.setCount(entry.getElement(), multiset.count(entry.getElement()) + 1);
+      fail("Expected IllegalArgumentException");
+    } catch (IllegalArgumentException expected) {}
+  }
+
+  @CollectionSize.Require(ONE)
+  @CollectionFeature.Require(SUPPORTS_ADD)
+  public void testAddOutOfTailBoundsOne() {
+    expectAddFailure(sortedMultiset.tailMultiset(a.getElement(), OPEN), a);
+  }
+
+  @CollectionSize.Require(SEVERAL)
+  @CollectionFeature.Require(SUPPORTS_ADD)
+  public void testAddOutOfTailBoundsSeveral() {
+    expectAddFailure(sortedMultiset.tailMultiset(a.getElement(), OPEN), a);
+    expectAddFailure(sortedMultiset.tailMultiset(b.getElement(), CLOSED), a);
+    expectAddFailure(sortedMultiset.tailMultiset(b.getElement(), OPEN), a);
+    expectAddFailure(sortedMultiset.tailMultiset(b.getElement(), OPEN), b);
+    expectAddFailure(sortedMultiset.tailMultiset(c.getElement(), CLOSED), a);
+    expectAddFailure(sortedMultiset.tailMultiset(c.getElement(), CLOSED), b);
+    expectAddFailure(sortedMultiset.tailMultiset(c.getElement(), OPEN), a);
+    expectAddFailure(sortedMultiset.tailMultiset(c.getElement(), OPEN), b);
+    expectAddFailure(sortedMultiset.tailMultiset(c.getElement(), OPEN), c);
+  }
+
+  @CollectionSize.Require(ONE)
+  @CollectionFeature.Require(SUPPORTS_ADD)
+  public void testAddOutOfHeadBoundsOne() {
+    expectAddFailure(sortedMultiset.headMultiset(a.getElement(), OPEN), a);
+  }
+
+  @CollectionSize.Require(SEVERAL)
+  @CollectionFeature.Require(SUPPORTS_ADD)
+  public void testAddOutOfHeadBoundsSeveral() {
+    expectAddFailure(sortedMultiset.headMultiset(c.getElement(), OPEN), c);
+    expectAddFailure(sortedMultiset.headMultiset(b.getElement(), CLOSED), c);
+    expectAddFailure(sortedMultiset.headMultiset(b.getElement(), OPEN), c);
+    expectAddFailure(sortedMultiset.headMultiset(b.getElement(), OPEN), b);
+    expectAddFailure(sortedMultiset.headMultiset(a.getElement(), CLOSED), c);
+    expectAddFailure(sortedMultiset.headMultiset(a.getElement(), CLOSED), b);
+    expectAddFailure(sortedMultiset.headMultiset(a.getElement(), OPEN), c);
+    expectAddFailure(sortedMultiset.headMultiset(a.getElement(), OPEN), b);
+    expectAddFailure(sortedMultiset.headMultiset(a.getElement(), OPEN), a);
+  }
+
+  @CollectionSize.Require(ONE)
+  @CollectionFeature.Require(SUPPORTS_REMOVE)
+  public void testRemoveOutOfTailBoundsOne() {
+    expectRemoveZero(sortedMultiset.tailMultiset(a.getElement(), OPEN), a);
+  }
+
+  @CollectionSize.Require(SEVERAL)
+  @CollectionFeature.Require(SUPPORTS_REMOVE)
+  public void testRemoveOutOfTailBoundsSeveral() {
+    expectRemoveZero(sortedMultiset.tailMultiset(a.getElement(), OPEN), a);
+    expectRemoveZero(sortedMultiset.tailMultiset(b.getElement(), CLOSED), a);
+    expectRemoveZero(sortedMultiset.tailMultiset(b.getElement(), OPEN), a);
+    expectRemoveZero(sortedMultiset.tailMultiset(b.getElement(), OPEN), b);
+    expectRemoveZero(sortedMultiset.tailMultiset(c.getElement(), CLOSED), a);
+    expectRemoveZero(sortedMultiset.tailMultiset(c.getElement(), CLOSED), b);
+    expectRemoveZero(sortedMultiset.tailMultiset(c.getElement(), OPEN), a);
+    expectRemoveZero(sortedMultiset.tailMultiset(c.getElement(), OPEN), b);
+    expectRemoveZero(sortedMultiset.tailMultiset(c.getElement(), OPEN), c);
+  }
+
+  @CollectionSize.Require(ONE)
+  @CollectionFeature.Require(SUPPORTS_REMOVE)
+  public void testRemoveOutOfHeadBoundsOne() {
+    expectRemoveZero(sortedMultiset.headMultiset(a.getElement(), OPEN), a);
+  }
+
+  @CollectionSize.Require(SEVERAL)
+  @CollectionFeature.Require(SUPPORTS_REMOVE)
+  public void testRemoveOutOfHeadBoundsSeveral() {
+    expectRemoveZero(sortedMultiset.headMultiset(c.getElement(), OPEN), c);
+    expectRemoveZero(sortedMultiset.headMultiset(b.getElement(), CLOSED), c);
+    expectRemoveZero(sortedMultiset.headMultiset(b.getElement(), OPEN), c);
+    expectRemoveZero(sortedMultiset.headMultiset(b.getElement(), OPEN), b);
+    expectRemoveZero(sortedMultiset.headMultiset(a.getElement(), CLOSED), c);
+    expectRemoveZero(sortedMultiset.headMultiset(a.getElement(), CLOSED), b);
+    expectRemoveZero(sortedMultiset.headMultiset(a.getElement(), OPEN), c);
+    expectRemoveZero(sortedMultiset.headMultiset(a.getElement(), OPEN), b);
+    expectRemoveZero(sortedMultiset.headMultiset(a.getElement(), OPEN), a);
+  }
+
+  @CollectionSize.Require(ONE)
+  @CollectionFeature.Require({SUPPORTS_ADD, SUPPORTS_REMOVE})
+  public void testSetCountOutOfTailBoundsOne() {
+    expectSetCountFailure(sortedMultiset.tailMultiset(a.getElement(), OPEN), a);
+  }
+
+  @CollectionSize.Require(SEVERAL)
+  @CollectionFeature.Require({SUPPORTS_ADD, SUPPORTS_REMOVE})
+  public void testSetCountOutOfTailBoundsSeveral() {
+    expectSetCountFailure(sortedMultiset.tailMultiset(a.getElement(), OPEN), a);
+    expectSetCountFailure(sortedMultiset.tailMultiset(b.getElement(), CLOSED), a);
+    expectSetCountFailure(sortedMultiset.tailMultiset(b.getElement(), OPEN), a);
+    expectSetCountFailure(sortedMultiset.tailMultiset(b.getElement(), OPEN), b);
+    expectSetCountFailure(sortedMultiset.tailMultiset(c.getElement(), CLOSED), a);
+    expectSetCountFailure(sortedMultiset.tailMultiset(c.getElement(), CLOSED), b);
+    expectSetCountFailure(sortedMultiset.tailMultiset(c.getElement(), OPEN), a);
+    expectSetCountFailure(sortedMultiset.tailMultiset(c.getElement(), OPEN), b);
+    expectSetCountFailure(sortedMultiset.tailMultiset(c.getElement(), OPEN), c);
+  }
+
+  @CollectionSize.Require(ONE)
+  @CollectionFeature.Require({SUPPORTS_ADD, SUPPORTS_REMOVE})
+  public void testSetCountOutOfHeadBoundsOne() {
+    expectSetCountFailure(sortedMultiset.headMultiset(a.getElement(), OPEN), a);
+  }
+
+  @CollectionSize.Require(SEVERAL)
+  @CollectionFeature.Require({SUPPORTS_ADD, SUPPORTS_REMOVE})
+  public void testSetCountOutOfHeadBoundsSeveral() {
+    expectSetCountFailure(sortedMultiset.headMultiset(c.getElement(), OPEN), c);
+    expectSetCountFailure(sortedMultiset.headMultiset(b.getElement(), CLOSED), c);
+    expectSetCountFailure(sortedMultiset.headMultiset(b.getElement(), OPEN), c);
+    expectSetCountFailure(sortedMultiset.headMultiset(b.getElement(), OPEN), b);
+    expectSetCountFailure(sortedMultiset.headMultiset(a.getElement(), CLOSED), c);
+    expectSetCountFailure(sortedMultiset.headMultiset(a.getElement(), CLOSED), b);
+    expectSetCountFailure(sortedMultiset.headMultiset(a.getElement(), OPEN), c);
+    expectSetCountFailure(sortedMultiset.headMultiset(a.getElement(), OPEN), b);
+    expectSetCountFailure(sortedMultiset.headMultiset(a.getElement(), OPEN), a);
+  }
+
+  @CollectionSize.Require(SEVERAL)
+  @CollectionFeature.Require(SUPPORTS_ADD)
+  public void testAddWithConflictingBounds() {
+    testEmptyRangeSubMultisetSupportingAdd(sortedMultiset.subMultiset(a.getElement(), CLOSED,
+        a.getElement(), OPEN));
+    testEmptyRangeSubMultisetSupportingAdd(sortedMultiset.subMultiset(a.getElement(), OPEN,
+        a.getElement(), OPEN));
+    testEmptyRangeSubMultisetSupportingAdd(sortedMultiset.subMultiset(a.getElement(), OPEN,
+        a.getElement(), CLOSED));
+    testEmptyRangeSubMultisetSupportingAdd(sortedMultiset.subMultiset(b.getElement(), CLOSED,
+        a.getElement(), CLOSED));
+    testEmptyRangeSubMultisetSupportingAdd(sortedMultiset.subMultiset(b.getElement(), CLOSED,
+        a.getElement(), OPEN));
+    testEmptyRangeSubMultisetSupportingAdd(sortedMultiset.subMultiset(b.getElement(), OPEN,
+        a.getElement(), OPEN));
+  }
+
+  @CollectionSize.Require(SEVERAL)
+  @CollectionFeature.Require(SUPPORTS_ADD)
+  public void testConflictingBounds() {
+    testEmptyRangeSubMultiset(sortedMultiset.subMultiset(a.getElement(), CLOSED, a.getElement(),
+        OPEN));
+    testEmptyRangeSubMultiset(sortedMultiset.subMultiset(a.getElement(), OPEN, a.getElement(),
+        OPEN));
+    testEmptyRangeSubMultiset(sortedMultiset.subMultiset(a.getElement(), OPEN, a.getElement(),
+        CLOSED));
+    testEmptyRangeSubMultiset(sortedMultiset.subMultiset(b.getElement(), CLOSED, a.getElement(),
+        CLOSED));
+    testEmptyRangeSubMultiset(sortedMultiset.subMultiset(b.getElement(), CLOSED, a.getElement(),
+        OPEN));
+    testEmptyRangeSubMultiset(sortedMultiset.subMultiset(b.getElement(), OPEN, a.getElement(),
+        OPEN));
+  }
+
+  public void testEmptyRangeSubMultiset(SortedMultiset<E> multiset) {
+    assertTrue(multiset.isEmpty());
+    assertEquals(0, multiset.size());
+    assertEquals(0, multiset.toArray().length);
+    assertTrue(multiset.entrySet().isEmpty());
+    assertFalse(multiset.iterator().hasNext());
+    assertEquals(0, multiset.entrySet().size());
+    assertEquals(0, multiset.entrySet().toArray().length);
+    assertFalse(multiset.entrySet().iterator().hasNext());
+  }
+
+  @SuppressWarnings("unchecked")
+  public void testEmptyRangeSubMultisetSupportingAdd(SortedMultiset<E> multiset) {
+    for (Entry<E> entry : Arrays.asList(a, b, c)) {
+      expectAddFailure(multiset, entry);
+    }
+  }
+
+  private int totalSize(Iterable<? extends Entry<?>> entries) {
+    int sum = 0;
+    for (Entry<?> entry : entries) {
+      sum += entry.getCount();
+    }
+    return sum;
+  }
+
+  private enum SubMultisetSpec {
+    TAIL_CLOSED {
+      @Override
+      <E> List<Entry<E>> expectedEntries(int targetEntry, List<Entry<E>> entries) {
+        return entries.subList(targetEntry, entries.size());
+      }
+
+      @Override
+      <E> SortedMultiset<E> subMultiset(SortedMultiset<E> multiset, List<Entry<E>> entries,
+          int targetEntry) {
+        return multiset.tailMultiset(entries.get(targetEntry).getElement(), CLOSED);
+      }
+    },
+    TAIL_OPEN {
+      @Override
+      <E> List<Entry<E>> expectedEntries(int targetEntry, List<Entry<E>> entries) {
+        return entries.subList(targetEntry + 1, entries.size());
+      }
+
+      @Override
+      <E> SortedMultiset<E> subMultiset(SortedMultiset<E> multiset, List<Entry<E>> entries,
+          int targetEntry) {
+        return multiset.tailMultiset(entries.get(targetEntry).getElement(), OPEN);
+      }
+    },
+    HEAD_CLOSED {
+      @Override
+      <E> List<Entry<E>> expectedEntries(int targetEntry, List<Entry<E>> entries) {
+        return entries.subList(0, targetEntry + 1);
+      }
+
+      @Override
+      <E> SortedMultiset<E> subMultiset(SortedMultiset<E> multiset, List<Entry<E>> entries,
+          int targetEntry) {
+        return multiset.headMultiset(entries.get(targetEntry).getElement(), CLOSED);
+      }
+    },
+    HEAD_OPEN {
+      @Override
+      <E> List<Entry<E>> expectedEntries(int targetEntry, List<Entry<E>> entries) {
+        return entries.subList(0, targetEntry);
+      }
+
+      @Override
+      <E> SortedMultiset<E> subMultiset(SortedMultiset<E> multiset, List<Entry<E>> entries,
+          int targetEntry) {
+        return multiset.headMultiset(entries.get(targetEntry).getElement(), OPEN);
+      }
+    };
+    abstract <E> List<Entry<E>> expectedEntries(int targetEntry, List<Entry<E>> entries);
+
+    abstract <E> SortedMultiset<E> subMultiset(SortedMultiset<E> multiset, List<Entry<E>> entries,
+        int targetEntry);
+  }
+
+  private void testSubMultisetEntrySet(SubMultisetSpec spec) {
+    List<Entry<E>> entries = copyToList(sortedMultiset.entrySet());
+    for (int i = 0; i < entries.size(); i++) {
+      List<Entry<E>> expected = spec.expectedEntries(i, entries);
+      SortedMultiset<E> subMultiset = spec.subMultiset(sortedMultiset, entries, i);
+      assertEquals(expected, copyToList(subMultiset.entrySet()));
+    }
+  }
+
+  private void testSubMultisetSize(SubMultisetSpec spec) {
+    List<Entry<E>> entries = copyToList(sortedMultiset.entrySet());
+    for (int i = 0; i < entries.size(); i++) {
+      List<Entry<E>> expected = spec.expectedEntries(i, entries);
+      SortedMultiset<E> subMultiset = spec.subMultiset(sortedMultiset, entries, i);
+      assertEquals(totalSize(expected), subMultiset.size());
+    }
+  }
+
+  private void testSubMultisetDistinctElements(SubMultisetSpec spec) {
+    List<Entry<E>> entries = copyToList(sortedMultiset.entrySet());
+    for (int i = 0; i < entries.size(); i++) {
+      List<Entry<E>> expected = spec.expectedEntries(i, entries);
+      SortedMultiset<E> subMultiset = spec.subMultiset(sortedMultiset, entries, i);
+      assertEquals(expected.size(), subMultiset.entrySet().size());
+      assertEquals(expected.size(), subMultiset.elementSet().size());
+    }
+  }
+
+  public void testTailClosedEntrySet() {
+    testSubMultisetEntrySet(SubMultisetSpec.TAIL_CLOSED);
+  }
+
+  public void testTailClosedSize() {
+    testSubMultisetSize(SubMultisetSpec.TAIL_CLOSED);
+  }
+
+  public void testTailClosedDistinctElements() {
+    testSubMultisetDistinctElements(SubMultisetSpec.TAIL_CLOSED);
+  }
+
+  public void testTailOpenEntrySet() {
+    testSubMultisetEntrySet(SubMultisetSpec.TAIL_OPEN);
+  }
+
+  public void testTailOpenSize() {
+    testSubMultisetSize(SubMultisetSpec.TAIL_OPEN);
+  }
+
+  public void testTailOpenDistinctElements() {
+    testSubMultisetDistinctElements(SubMultisetSpec.TAIL_OPEN);
+  }
+
+  public void testHeadClosedEntrySet() {
+    testSubMultisetEntrySet(SubMultisetSpec.HEAD_CLOSED);
+  }
+
+  public void testHeadClosedSize() {
+    testSubMultisetSize(SubMultisetSpec.HEAD_CLOSED);
+  }
+
+  public void testHeadClosedDistinctElements() {
+    testSubMultisetDistinctElements(SubMultisetSpec.HEAD_CLOSED);
+  }
+
+  public void testHeadOpenEntrySet() {
+    testSubMultisetEntrySet(SubMultisetSpec.HEAD_OPEN);
+  }
+
+  public void testHeadOpenSize() {
+    testSubMultisetSize(SubMultisetSpec.HEAD_OPEN);
+  }
+
+  public void testHeadOpenDistinctElements() {
+    testSubMultisetDistinctElements(SubMultisetSpec.HEAD_OPEN);
+  }
+
+  @CollectionSize.Require(SEVERAL)
+  @CollectionFeature.Require(SUPPORTS_REMOVE)
+  public void testClearTailOpen() {
+    List<Entry<E>> expected =
+        copyToList(sortedMultiset.headMultiset(b.getElement(), CLOSED).entrySet());
+    sortedMultiset.tailMultiset(b.getElement(), OPEN).clear();
+    assertEquals(expected, copyToList(sortedMultiset.entrySet()));
+  }
+
+  @CollectionSize.Require(SEVERAL)
+  @CollectionFeature.Require(SUPPORTS_REMOVE)
+  public void testClearTailOpenEntrySet() {
+    List<Entry<E>> expected =
+        copyToList(sortedMultiset.headMultiset(b.getElement(), CLOSED).entrySet());
+    sortedMultiset.tailMultiset(b.getElement(), OPEN).entrySet().clear();
+    assertEquals(expected, copyToList(sortedMultiset.entrySet()));
+  }
+
+  @CollectionSize.Require(SEVERAL)
+  @CollectionFeature.Require(SUPPORTS_REMOVE)
+  public void testClearTailClosed() {
+    List<Entry<E>> expected =
+        copyToList(sortedMultiset.headMultiset(b.getElement(), OPEN).entrySet());
+    sortedMultiset.tailMultiset(b.getElement(), CLOSED).clear();
+    assertEquals(expected, copyToList(sortedMultiset.entrySet()));
+  }
+
+  @CollectionSize.Require(SEVERAL)
+  @CollectionFeature.Require(SUPPORTS_REMOVE)
+  public void testClearTailClosedEntrySet() {
+    List<Entry<E>> expected =
+        copyToList(sortedMultiset.headMultiset(b.getElement(), OPEN).entrySet());
+    sortedMultiset.tailMultiset(b.getElement(), CLOSED).entrySet().clear();
+    assertEquals(expected, copyToList(sortedMultiset.entrySet()));
+  }
+
+  @CollectionSize.Require(SEVERAL)
+  @CollectionFeature.Require(SUPPORTS_REMOVE)
+  public void testClearHeadOpen() {
+    List<Entry<E>> expected =
+        copyToList(sortedMultiset.tailMultiset(b.getElement(), CLOSED).entrySet());
+    sortedMultiset.headMultiset(b.getElement(), OPEN).clear();
+    assertEquals(expected, copyToList(sortedMultiset.entrySet()));
+  }
+
+  @CollectionSize.Require(SEVERAL)
+  @CollectionFeature.Require(SUPPORTS_REMOVE)
+  public void testClearHeadOpenEntrySet() {
+    List<Entry<E>> expected =
+        copyToList(sortedMultiset.tailMultiset(b.getElement(), CLOSED).entrySet());
+    sortedMultiset.headMultiset(b.getElement(), OPEN).entrySet().clear();
+    assertEquals(expected, copyToList(sortedMultiset.entrySet()));
+  }
+
+  @CollectionSize.Require(SEVERAL)
+  @CollectionFeature.Require(SUPPORTS_REMOVE)
+  public void testClearHeadClosed() {
+    List<Entry<E>> expected =
+        copyToList(sortedMultiset.tailMultiset(b.getElement(), OPEN).entrySet());
+    sortedMultiset.headMultiset(b.getElement(), CLOSED).clear();
+    assertEquals(expected, copyToList(sortedMultiset.entrySet()));
+  }
+
+  @CollectionSize.Require(SEVERAL)
+  @CollectionFeature.Require(SUPPORTS_REMOVE)
+  public void testClearHeadClosedEntrySet() {
+    List<Entry<E>> expected =
+        copyToList(sortedMultiset.tailMultiset(b.getElement(), OPEN).entrySet());
+    sortedMultiset.headMultiset(b.getElement(), CLOSED).entrySet().clear();
+    assertEquals(expected, copyToList(sortedMultiset.entrySet()));
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/google/MultisetReadsTester.java b/guava-testlib/src/com/google/common/collect/testing/google/MultisetReadsTester.java
new file mode 100644
index 0000000..c353404
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/google/MultisetReadsTester.java
@@ -0,0 +1,154 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.google;
+
+import static com.google.common.collect.testing.features.CollectionSize.ONE;
+import static com.google.common.collect.testing.features.CollectionSize.SEVERAL;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.collect.HashMultiset;
+import com.google.common.collect.Multiset;
+import com.google.common.collect.Multisets;
+import com.google.common.collect.testing.WrongType;
+import com.google.common.collect.testing.features.CollectionSize;
+
+import java.lang.reflect.Method;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * A generic JUnit test which tests multiset-specific read operations.
+ * Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.SetTestSuiteBuilder}.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible
+public class MultisetReadsTester<E> extends AbstractMultisetTester<E> {
+  public void testCount_0() {
+    assertEquals("multiset.count(missing) didn't return 0",
+        0, getMultiset().count(samples.e3));
+  }
+
+  @CollectionSize.Require(absent = ZERO)
+  public void testCount_1() {
+    assertEquals("multiset.count(present) didn't return 1",
+        1, getMultiset().count(samples.e0));
+  }
+
+  @CollectionSize.Require(SEVERAL)
+  public void testCount_3() {
+    initThreeCopies();
+    assertEquals("multiset.count(thriceContained) didn't return 3",
+        3, getMultiset().count(samples.e0));
+  }
+
+  public void testCount_null() {
+    assertEquals("multiset.count(null) didn't return 0",
+        0, getMultiset().count(null));
+  }
+
+  public void testCount_wrongType() {
+    assertEquals("multiset.count(wrongType) didn't return 0",
+        0, getMultiset().count(WrongType.VALUE));
+  }
+
+  @CollectionSize.Require(absent = ZERO)
+  public void testElementSet_contains() {
+    assertTrue("multiset.elementSet().contains(present) returned false",
+        getMultiset().elementSet().contains(samples.e0));
+  }
+
+  @CollectionSize.Require(absent = ZERO)
+  public void testEntrySet_contains() {
+    assertTrue("multiset.entrySet() didn't contain [present, 1]",
+        getMultiset().entrySet().contains(
+            Multisets.immutableEntry(samples.e0, 1)));
+  }
+
+  public void testEntrySet_contains_count0() {
+    assertFalse("multiset.entrySet() contains [missing, 0]",
+        getMultiset().entrySet().contains(
+            Multisets.immutableEntry(samples.e3, 0)));
+  }
+
+  public void testEntrySet_contains_nonentry() {
+    assertFalse("multiset.entrySet() contains a non-entry",
+        getMultiset().entrySet().contains(samples.e0));
+  }
+
+  public void testEntrySet_twice() {
+    assertEquals("calling multiset.entrySet() twice returned unequal sets",
+        getMultiset().entrySet(), getMultiset().entrySet());
+  }
+
+  @CollectionSize.Require(ZERO)
+  public void testEntrySet_hashCode_size0() {
+    assertEquals("multiset.entrySet() has incorrect hash code",
+        0, getMultiset().entrySet().hashCode());
+  }
+
+  @CollectionSize.Require(ONE)
+  public void testEntrySet_hashCode_size1() {
+    assertEquals("multiset.entrySet() has incorrect hash code",
+        1 ^ samples.e0.hashCode(), getMultiset().entrySet().hashCode());
+  }
+
+  public void testEquals_yes() {
+    assertTrue("multiset doesn't equal a multiset with the same elements",
+        getMultiset().equals(HashMultiset.create(getSampleElements())));
+  }
+
+  public void testEquals_differentSize() {
+    Multiset<E> other = HashMultiset.create(getSampleElements());
+    other.add(samples.e0);
+    assertFalse("multiset equals a multiset with a different size",
+        getMultiset().equals(other));
+  }
+
+  @CollectionSize.Require(absent = ZERO)
+  public void testEquals_differentElements() {
+    Multiset<E> other = HashMultiset.create(getSampleElements());
+    other.remove(samples.e0);
+    other.add(samples.e3);
+    assertFalse("multiset equals a multiset with different elements",
+        getMultiset().equals(other));
+  }
+
+  @CollectionSize.Require(ZERO)
+  public void testHashCode_size0() {
+    assertEquals("multiset has incorrect hash code",
+        0, getMultiset().hashCode());
+  }
+
+  @CollectionSize.Require(ONE)
+  public void testHashCode_size1() {
+    assertEquals("multiset has incorrect hash code",
+        1 ^ samples.e0.hashCode(), getMultiset().hashCode());
+  }
+
+  /**
+   * Returns {@link Method} instances for the read tests that assume multisets
+   * support duplicates so that the test of {@code Multisets.forSet()} can
+   * suppress them.
+   */
+  public static List<Method> getReadsDuplicateInitializingMethods() {
+    return Arrays.asList(
+        Platform.getMethod(MultisetReadsTester.class, "testCount_3"));
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/google/MultisetSetCountConditionallyTester.java b/guava-testlib/src/com/google/common/collect/testing/google/MultisetSetCountConditionallyTester.java
new file mode 100644
index 0000000..3973434
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/google/MultisetSetCountConditionallyTester.java
@@ -0,0 +1,107 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.google;
+
+import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_ADD;
+import static com.google.common.collect.testing.features.CollectionSize.SEVERAL;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+import static java.util.Collections.nCopies;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+
+/**
+ * A generic JUnit test which tests conditional {@code setCount()} operations on
+ * a multiset. Can't be invoked directly; please see
+ * {@link MultisetTestSuiteBuilder}.
+ *
+ * @author Chris Povirk
+ */
+@GwtCompatible
+public class MultisetSetCountConditionallyTester<E> extends
+    AbstractMultisetSetCountTester<E> {
+  @Override void setCountCheckReturnValue(E element, int count) {
+    assertTrue(
+        "setCount() with the correct expected present count should return true",
+        setCount(element, count));
+  }
+
+  @Override void setCountNoCheckReturnValue(E element, int count) {
+    setCount(element, count);
+  }
+
+  private boolean setCount(E element, int count) {
+    return getMultiset().setCount(element, getMultiset().count(element), count);
+  }
+
+  private void assertSetCountNegativeOldCount() {
+    try {
+      getMultiset().setCount(samples.e3, -1, 1);
+      fail("calling setCount() with a negative oldCount should throw "
+          + "IllegalArgumentException");
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  // Negative oldCount.
+
+  @CollectionFeature.Require(SUPPORTS_ADD)
+  public void testSetCountConditional_negativeOldCount_addSupported() {
+    assertSetCountNegativeOldCount();
+  }
+
+  @CollectionFeature.Require(absent = SUPPORTS_ADD)
+  public void testSetCountConditional_negativeOldCount_addUnsupported() {
+    try {
+      assertSetCountNegativeOldCount();
+    } catch (UnsupportedOperationException tolerated) {
+    }
+  }
+
+  // Incorrect expected present count.
+
+  @CollectionFeature.Require(SUPPORTS_ADD)
+  public void testSetCountConditional_oldCountTooLarge() {
+    assertFalse("setCount() with a too-large oldCount should return false",
+        getMultiset().setCount(samples.e0, 2, 3));
+    expectUnchanged();
+  }
+
+  @CollectionSize.Require(absent = ZERO)
+  @CollectionFeature.Require(SUPPORTS_ADD)
+  public void testSetCountConditional_oldCountTooSmallZero() {
+    assertFalse("setCount() with a too-small oldCount should return false",
+        getMultiset().setCount(samples.e0, 0, 2));
+    expectUnchanged();
+  }
+
+  @CollectionSize.Require(SEVERAL)
+  @CollectionFeature.Require(SUPPORTS_ADD)
+  public void testSetCountConditional_oldCountTooSmallNonzero() {
+    initThreeCopies();
+    assertFalse("setCount() with a too-small oldCount should return false",
+        getMultiset().setCount(samples.e0, 1, 5));
+    expectContents(nCopies(3, samples.e0));
+  }
+
+  /*
+   * TODO: test that unmodifiable multisets either throw UOE or return false
+   * when both are valid options. Currently we test the UOE cases and the
+   * return-false cases but not their intersection
+   */
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/google/MultisetSetCountUnconditionallyTester.java b/guava-testlib/src/com/google/common/collect/testing/google/MultisetSetCountUnconditionallyTester.java
new file mode 100644
index 0000000..4e4fbe0
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/google/MultisetSetCountUnconditionallyTester.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.google;
+
+import com.google.common.annotations.GwtCompatible;
+
+/**
+ * A generic JUnit test which tests unconditional {@code setCount()} operations
+ * on a multiset. Can't be invoked directly; please see
+ * {@link MultisetTestSuiteBuilder}.
+ *
+ * @author Chris Povirk
+ */
+@GwtCompatible
+public class MultisetSetCountUnconditionallyTester<E>
+    extends AbstractMultisetSetCountTester<E> {
+  @Override void setCountCheckReturnValue(E element, int count) {
+    assertEquals("multiset.setCount() should return the old count",
+        getMultiset().count(element), setCount(element, count));
+  }
+
+  @Override void setCountNoCheckReturnValue(E element, int count) {
+    setCount(element, count);
+  }
+
+  private int setCount(E element, int count) {
+    return getMultiset().setCount(element, count);
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/google/MultisetTestSuiteBuilder.java b/guava-testlib/src/com/google/common/collect/testing/google/MultisetTestSuiteBuilder.java
new file mode 100644
index 0000000..4bdbaf5
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/google/MultisetTestSuiteBuilder.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.google;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.collect.testing.AbstractCollectionTestSuiteBuilder;
+import com.google.common.collect.testing.AbstractTester;
+import com.google.common.collect.testing.Helpers;
+
+import java.util.List;
+
+/**
+ * Creates, based on your criteria, a JUnit test suite that exhaustively tests
+ * a {@code Multiset} implementation.
+ *
+ * @author Jared Levy
+ * @author Louis Wasserman
+ */
+@GwtCompatible
+public class MultisetTestSuiteBuilder<E> extends
+    AbstractCollectionTestSuiteBuilder<MultisetTestSuiteBuilder<E>, E> {
+  public static <E> MultisetTestSuiteBuilder<E> using(
+      TestMultisetGenerator<E> generator) {
+    return new MultisetTestSuiteBuilder<E>().usingGenerator(generator);
+  }
+
+  @Override protected List<Class<? extends AbstractTester>> getTesters() {
+    List<Class<? extends AbstractTester>> testers
+        = Helpers.copyToList(super.getTesters());
+    testers.add(MultisetReadsTester.class);
+    testers.add(MultisetSetCountConditionallyTester.class);
+    testers.add(MultisetSetCountUnconditionallyTester.class);
+    testers.add(MultisetWritesTester.class);
+    testers.add(MultisetIteratorTester.class);
+    return testers;
+  }
+}
+
diff --git a/guava-testlib/src/com/google/common/collect/testing/google/MultisetWritesTester.java b/guava-testlib/src/com/google/common/collect/testing/google/MultisetWritesTester.java
new file mode 100644
index 0000000..9b91cb8
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/google/MultisetWritesTester.java
@@ -0,0 +1,245 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.google;
+
+import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_ADD;
+import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_CLEAR;
+import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_REMOVE;
+import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_REMOVE_ALL;
+import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_RETAIN_ALL;
+import static com.google.common.collect.testing.features.CollectionSize.ONE;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.collect.Multiset;
+import com.google.common.collect.Multisets;
+import com.google.common.collect.testing.WrongType;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+
+import java.lang.reflect.Method;
+import java.util.Collections;
+import java.util.Iterator;
+
+/**
+ * A generic JUnit test which tests multiset-specific write operations.
+ * Can't be invoked directly; please see {@link MultisetTestSuiteBuilder}.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible
+public class MultisetWritesTester<E> extends AbstractMultisetTester<E> {
+  /**
+   * Returns the {@link Method} instance for
+   * {@link #testEntrySet_iterator()} so that tests of
+   * classes with unmodifiable iterators can suppress it.
+   */
+  public static Method getEntrySetIteratorMethod() {
+    return Platform.getMethod(
+        MultisetWritesTester.class, "testEntrySet_iterator");
+  }
+
+  @CollectionFeature.Require(SUPPORTS_ADD)
+  public void testAddOccurrences() {
+    int oldCount = getMultiset().count(samples.e0);
+    assertEquals("multiset.add(E, int) should return the old count",
+        oldCount, getMultiset().add(samples.e0, 2));
+    assertEquals("multiset.count() incorrect after add(E, int)",
+        oldCount + 2, getMultiset().count(samples.e0));
+  }
+
+  @CollectionFeature.Require(absent = SUPPORTS_ADD)
+  public void testAddOccurrences_unsupported() {
+    try {
+      getMultiset().add(samples.e0, 2);
+      fail("unsupported multiset.add(E, int) didn't throw exception");
+    } catch (UnsupportedOperationException required) {}
+  }
+
+  @CollectionSize.Require(absent = ZERO)
+  @CollectionFeature.Require(SUPPORTS_REMOVE)
+  public void testRemove_occurrences_present() {
+    assertEquals("multiset.remove(present, 2) didn't return the old count",
+        1, getMultiset().remove(samples.e0, 2));
+    assertFalse("multiset contains present after multiset.remove(present, 2)",
+        getMultiset().contains(samples.e0));
+  }
+
+  @CollectionFeature.Require(SUPPORTS_REMOVE)
+  public void testRemove_occurrences_absent() {
+    assertEquals("multiset.remove(absent, 0) didn't return 0",
+        0, getMultiset().remove(samples.e3, 2));
+  }
+
+  @CollectionFeature.Require(absent = SUPPORTS_REMOVE)
+  public void testRemove_occurrences_unsupported_absent() {
+    // notice: we don't care whether it succeeds, or fails with UOE
+    try {
+      assertEquals(
+          "multiset.remove(absent, 2) didn't return 0 or throw an exception",
+          0, getMultiset().remove(samples.e3, 2));
+    } catch (UnsupportedOperationException ok) {}
+  }
+
+  @CollectionFeature.Require(SUPPORTS_REMOVE)
+  public void testRemove_occurrences_0() {
+    int oldCount = getMultiset().count(samples.e0);
+    assertEquals("multiset.remove(E, 0) didn't return the old count",
+        oldCount, getMultiset().remove(samples.e0, 0));
+  }
+
+  @CollectionFeature.Require(SUPPORTS_REMOVE)
+  public void testRemove_occurrences_negative() {
+    try {
+      getMultiset().remove(samples.e0, -1);
+      fail("multiset.remove(E, -1) didn't throw an exception");
+    } catch (IllegalArgumentException required) {}
+  }
+
+  @CollectionFeature.Require(SUPPORTS_REMOVE)
+  public void testRemove_occurrences_wrongType() {
+    assertEquals("multiset.remove(wrongType, 1) didn't return 0",
+        0, getMultiset().remove(WrongType.VALUE, 1));
+  }
+
+  @CollectionFeature.Require(SUPPORTS_CLEAR)
+  public void testEntrySet_clear() {
+    getMultiset().entrySet().clear();
+    assertTrue("multiset not empty after entrySet().clear()",
+        getMultiset().isEmpty());
+  }
+
+  @CollectionSize.Require(ONE)
+  @CollectionFeature.Require(SUPPORTS_REMOVE)
+  public void testEntrySet_iterator() {
+    Iterator<Multiset.Entry<E>> iterator = getMultiset().entrySet().iterator();
+    assertTrue(
+        "non-empty multiset.entrySet() iterator.hasNext() returned false",
+        iterator.hasNext());
+    assertEquals("multiset.entrySet() iterator.next() returned incorrect entry",
+        Multisets.immutableEntry(samples.e0, 1), iterator.next());
+    assertFalse(
+        "size 1 multiset.entrySet() iterator.hasNext() returned true "
+            + "after next()",
+        iterator.hasNext());
+    iterator.remove();
+    assertTrue(
+        "multiset isn't empty after multiset.entrySet() iterator.remove()",
+        getMultiset().isEmpty());
+  }
+
+  @CollectionSize.Require(absent = ZERO)
+  @CollectionFeature.Require(absent = SUPPORTS_REMOVE)
+  public void testEntrySet_iterator_remove_unsupported() {
+    Iterator<Multiset.Entry<E>> iterator = getMultiset().entrySet().iterator();
+    assertTrue(
+        "non-empty multiset.entrySet() iterator.hasNext() returned false",
+        iterator.hasNext());
+    try {
+      iterator.remove();
+      fail("multiset.entrySet() iterator.remove() didn't throw an exception");
+    } catch (UnsupportedOperationException expected) {}
+  }
+
+  @CollectionSize.Require(absent = ZERO)
+  @CollectionFeature.Require(SUPPORTS_REMOVE)
+  public void testEntrySet_remove_present() {
+    assertTrue(
+        "multiset.entrySet.remove(presentEntry) returned false",
+        getMultiset().entrySet().remove(
+            Multisets.immutableEntry(samples.e0, 1)));
+    assertFalse(
+        "multiset contains element after removing its entry",
+        getMultiset().contains(samples.e0));
+  }
+
+  @CollectionSize.Require(absent = ZERO)
+  @CollectionFeature.Require(SUPPORTS_REMOVE)
+  public void testEntrySet_remove_missing() {
+    assertFalse(
+        "multiset.entrySet.remove(missingEntry) returned true",
+        getMultiset().entrySet().remove(
+            Multisets.immutableEntry(samples.e0, 2)));
+    assertTrue(
+        "multiset didn't contain element after removing a missing entry",
+        getMultiset().contains(samples.e0));
+  }
+
+  @CollectionSize.Require(absent = ZERO)
+  @CollectionFeature.Require(SUPPORTS_REMOVE_ALL)
+  public void testEntrySet_removeAll_present() {
+    assertTrue(
+        "multiset.entrySet.removeAll(presentEntry) returned false",
+        getMultiset().entrySet().removeAll(
+            Collections.singleton(Multisets.immutableEntry(samples.e0, 1))));
+    assertFalse(
+        "multiset contains element after removing its entry",
+        getMultiset().contains(samples.e0));
+  }
+
+  @CollectionSize.Require(absent = ZERO)
+  @CollectionFeature.Require(SUPPORTS_REMOVE_ALL)
+  public void testEntrySet_removeAll_missing() {
+    assertFalse(
+        "multiset.entrySet.remove(missingEntry) returned true",
+        getMultiset().entrySet().removeAll(
+            Collections.singleton(Multisets.immutableEntry(samples.e0, 2))));
+    assertTrue(
+        "multiset didn't contain element after removing a missing entry",
+        getMultiset().contains(samples.e0));
+  }
+
+  @CollectionFeature.Require(SUPPORTS_REMOVE_ALL)
+  public void testEntrySet_removeAll_null() {
+    try {
+      getMultiset().entrySet().removeAll(null);
+      fail("multiset.entrySet.removeAll(null) didn't throw an exception");
+    } catch (NullPointerException expected) {}
+  }
+
+  @CollectionSize.Require(ONE)
+  @CollectionFeature.Require(SUPPORTS_RETAIN_ALL)
+  public void testEntrySet_retainAll_present() {
+    assertFalse(
+        "multiset.entrySet.retainAll(presentEntry) returned false",
+        getMultiset().entrySet().retainAll(
+            Collections.singleton(Multisets.immutableEntry(samples.e0, 1))));
+    assertTrue(
+        "multiset doesn't contains element after retaining its entry",
+        getMultiset().contains(samples.e0));
+  }
+
+  @CollectionSize.Require(ONE)
+  @CollectionFeature.Require(SUPPORTS_RETAIN_ALL)
+  public void testEntrySet_retainAll_missing() {
+    assertTrue(
+        "multiset.entrySet.retainAll(missingEntry) returned true",
+        getMultiset().entrySet().retainAll(
+            Collections.singleton(Multisets.immutableEntry(samples.e0, 2))));
+    assertFalse(
+        "multiset contains element after retaining a different entry",
+        getMultiset().contains(samples.e0));
+  }
+
+  @CollectionFeature.Require(SUPPORTS_RETAIN_ALL)
+  public void testEntrySet_retainAll_null() {
+    try {
+      getMultiset().entrySet().retainAll(null);
+      // Returning successfully is not ideal, but tolerated.
+    } catch (NullPointerException expected) {}
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/google/Platform.java b/guava-testlib/src/com/google/common/collect/testing/google/Platform.java
new file mode 100644
index 0000000..45b4166
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/google/Platform.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.google;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+
+import java.lang.reflect.Method;
+
+/**
+ * Methods factored out so that they can be emulated in GWT.
+ *
+ * @author Hayward Chan
+ */
+@GwtCompatible
+class Platform {
+
+  @GwtIncompatible("Class.getMethod, java.lang.reflect.Method")
+  static Method getMethod(Class<?> clazz, String name) {
+    try {
+      return clazz.getMethod(name);
+    } catch (Exception e) {
+      throw new RuntimeException(e);
+    }
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/google/SetGenerators.java b/guava-testlib/src/com/google/common/collect/testing/google/SetGenerators.java
new file mode 100644
index 0000000..dee0d41
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/google/SetGenerators.java
@@ -0,0 +1,260 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.google;
+
+import static com.google.common.collect.testing.SampleElements.Strings.AFTER_LAST;
+import static com.google.common.collect.testing.SampleElements.Strings.AFTER_LAST_2;
+import static com.google.common.collect.testing.SampleElements.Strings.BEFORE_FIRST;
+import static com.google.common.collect.testing.SampleElements.Strings.BEFORE_FIRST_2;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.ImmutableSortedSet;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Ordering;
+import com.google.common.collect.Sets;
+import com.google.common.collect.testing.TestCollectionGenerator;
+import com.google.common.collect.testing.TestCollidingSetGenerator;
+import com.google.common.collect.testing.TestSetGenerator;
+import com.google.common.collect.testing.TestStringListGenerator;
+import com.google.common.collect.testing.TestStringSetGenerator;
+import com.google.common.collect.testing.TestStringSortedSetGenerator;
+import com.google.common.collect.testing.TestUnhashableCollectionGenerator;
+import com.google.common.collect.testing.UnhashableObject;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Set;
+import java.util.SortedSet;
+
+/**
+ * Generators of different types of sets and derived collections from sets.
+ * 
+ * @author Kevin Bourrillion
+ * @author Jared Levy
+ * @author Hayward Chan
+ */
+@GwtCompatible
+public class SetGenerators {
+
+  public static class ImmutableSetCopyOfGenerator extends TestStringSetGenerator {
+    @Override protected Set<String> create(String[] elements) {
+      return ImmutableSet.copyOf(elements);
+    }
+  }
+
+  public static class ImmutableSetWithBadHashesGenerator
+      extends TestCollidingSetGenerator
+      // Work around a GWT compiler bug.  Not explicitly listing this will
+      // cause the createArray() method missing in the generated javascript.
+      // TODO: Remove this once the GWT bug is fixed.
+      implements TestCollectionGenerator<Object> {
+    @Override
+    public Set<Object> create(Object... elements) {
+      return ImmutableSet.copyOf(elements);
+    }
+  }
+
+  public static class DegeneratedImmutableSetGenerator
+      extends TestStringSetGenerator {
+    // Make sure we get what we think we're getting, or else this test
+    // is pointless
+    @SuppressWarnings("cast")
+    @Override protected Set<String> create(String[] elements) {
+      return (ImmutableSet<String>)
+          ImmutableSet.of(elements[0], elements[0]);
+    }
+  }
+
+  public static class ImmutableSortedSetCopyOfGenerator
+      extends TestStringSortedSetGenerator {
+    @Override protected SortedSet<String> create(String[] elements) {
+      return ImmutableSortedSet.copyOf(elements);
+    }
+  }
+
+  public static class ImmutableSortedSetHeadsetGenerator
+      extends TestStringSortedSetGenerator {
+    @Override protected SortedSet<String> create(String[] elements) {
+      List<String> list = Lists.newArrayList(elements);
+      list.add("zzz");
+      return ImmutableSortedSet.copyOf(list)
+          .headSet("zzy");
+    }
+  }
+
+  public static class ImmutableSortedSetTailsetGenerator
+      extends TestStringSortedSetGenerator {
+    @Override protected SortedSet<String> create(String[] elements) {
+      List<String> list = Lists.newArrayList(elements);
+      list.add("\0");
+      return ImmutableSortedSet.copyOf(list)
+          .tailSet("\0\0");
+    }
+  }
+
+  public static class ImmutableSortedSetSubsetGenerator
+      extends TestStringSortedSetGenerator {
+    @Override protected SortedSet<String> create(String[] elements) {
+      List<String> list = Lists.newArrayList(elements);
+      list.add("\0");
+      list.add("zzz");
+      return ImmutableSortedSet.copyOf(list)
+          .subSet("\0\0", "zzy");
+    }
+  }
+
+  public static class ImmutableSortedSetExplicitComparator
+      extends TestStringSetGenerator {
+
+    private static final Comparator<String> STRING_REVERSED
+        = Collections.reverseOrder();
+
+    @Override protected SortedSet<String> create(String[] elements) {
+      return ImmutableSortedSet.orderedBy(STRING_REVERSED)
+          .add(elements)
+          .build();
+    }
+
+    @Override public List<String> order(List<String> insertionOrder) {
+      Collections.sort(insertionOrder, Collections.reverseOrder());
+      return insertionOrder;
+    }
+  }
+
+  public static class ImmutableSortedSetExplicitSuperclassComparatorGenerator
+      extends TestStringSetGenerator {
+
+    private static final Comparator<Comparable<?>> COMPARABLE_REVERSED
+        = Collections.reverseOrder();
+
+    @Override protected SortedSet<String> create(String[] elements) {
+      return new ImmutableSortedSet.Builder<String>(COMPARABLE_REVERSED)
+          .add(elements)
+          .build();
+    }
+
+    @Override public List<String> order(List<String> insertionOrder) {
+      Collections.sort(insertionOrder, Collections.reverseOrder());
+      return insertionOrder;
+    }
+  }
+
+  public static class ImmutableSortedSetReversedOrderGenerator
+      extends TestStringSetGenerator {
+
+    @Override protected SortedSet<String> create(String[] elements) {
+      return ImmutableSortedSet.<String>reverseOrder()
+          .addAll(Arrays.asList(elements).iterator())
+          .build();
+    }
+
+    @Override public List<String> order(List<String> insertionOrder) {
+      Collections.sort(insertionOrder, Collections.reverseOrder());
+      return insertionOrder;
+    }
+  }
+
+  public static class ImmutableSortedSetUnhashableGenerator
+      extends TestUnhashableSetGenerator {
+    @Override public Set<UnhashableObject> create(
+        UnhashableObject[] elements) {
+      return ImmutableSortedSet.copyOf(elements);
+    }
+  }
+
+  public static class ImmutableSetAsListGenerator
+      extends TestStringListGenerator {
+    @Override protected List<String> create(String[] elements) {
+      return ImmutableSet.copyOf(elements).asList();
+    }
+  }
+
+  public static class ImmutableSortedSetAsListGenerator
+      extends TestStringListGenerator {
+    @Override protected List<String> create(String[] elements) {
+      Comparator<String> comparator = createExplicitComparator(elements);
+      ImmutableSet<String> set = ImmutableSortedSet.copyOf(
+          comparator, Arrays.asList(elements));
+      return set.asList();
+    }
+  }
+
+  public static class ImmutableSortedSetSubsetAsListGenerator
+      extends TestStringListGenerator {
+    @Override protected List<String> create(String[] elements) {
+      Comparator<String> comparator = createExplicitComparator(elements);
+      ImmutableSortedSet.Builder<String> builder
+          = ImmutableSortedSet.orderedBy(comparator);
+      builder.add(BEFORE_FIRST);
+      builder.add(elements);
+      builder.add(AFTER_LAST);
+      return builder.build().subSet(BEFORE_FIRST_2,
+          AFTER_LAST).asList();
+    }
+  }
+
+  public static class ImmutableSortedSetAsListSubListGenerator
+      extends TestStringListGenerator {
+    @Override protected List<String> create(String[] elements) {
+      Comparator<String> comparator = createExplicitComparator(elements);
+      ImmutableSortedSet.Builder<String> builder
+          = ImmutableSortedSet.orderedBy(comparator);
+      builder.add(BEFORE_FIRST);
+      builder.add(elements);
+      builder.add(AFTER_LAST);
+      return builder.build().asList().subList(1, elements.length + 1);
+    }
+  }
+
+  public static class ImmutableSortedsetSubsetAsListSubListGenerator
+      extends TestStringListGenerator {
+    @Override protected List<String> create(String[] elements) {
+      Comparator<String> comparator = createExplicitComparator(elements);
+      ImmutableSortedSet.Builder<String> builder
+          = ImmutableSortedSet.orderedBy(comparator);
+      builder.add(BEFORE_FIRST);
+      builder.add(BEFORE_FIRST_2);
+      builder.add(elements);
+      builder.add(AFTER_LAST);
+      builder.add(AFTER_LAST_2);
+      return builder.build().subSet(BEFORE_FIRST_2,
+          AFTER_LAST_2)
+              .asList().subList(1, elements.length + 1);
+    }
+  }
+
+  public abstract static class TestUnhashableSetGenerator
+      extends TestUnhashableCollectionGenerator<Set<UnhashableObject>>
+      implements TestSetGenerator<UnhashableObject> {
+  }
+
+  private static Comparator<String> createExplicitComparator(
+      String[] elements) {
+    // Collapse equal elements, which Ordering.explicit() doesn't support, while
+    // maintaining the ordering by first occurrence.
+    Set<String> elementsPlus = Sets.newLinkedHashSet();
+    elementsPlus.add(BEFORE_FIRST);
+    elementsPlus.add(BEFORE_FIRST_2);
+    elementsPlus.addAll(Arrays.asList(elements));
+    elementsPlus.add(AFTER_LAST);
+    elementsPlus.add(AFTER_LAST_2);
+    return Ordering.explicit(Lists.newArrayList(elementsPlus));
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/google/SortedMapGenerators.java b/guava-testlib/src/com/google/common/collect/testing/google/SortedMapGenerators.java
new file mode 100644
index 0000000..6ce5a77
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/google/SortedMapGenerators.java
@@ -0,0 +1,199 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.google;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.collect.ImmutableSortedMap;
+import com.google.common.collect.ImmutableSortedMap.Builder;
+import com.google.common.collect.testing.SampleElements;
+import com.google.common.collect.testing.TestCollectionGenerator;
+import com.google.common.collect.testing.TestMapEntrySetGenerator;
+import com.google.common.collect.testing.TestStringSetGenerator;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Map.Entry;
+import java.util.Set;
+
+/**
+ * Generators of sorted maps and derived collections.
+ *
+ * @author Kevin Bourrillion
+ * @author Jesse Wilson
+ * @author Jared Levy
+ * @author Hayward Chan
+ */
+@GwtCompatible
+public class SortedMapGenerators {
+
+  public static final Comparator<Entry<String, String>> ENTRY_COMPARATOR
+      = new Comparator<Entry<String, String>>() {
+          @Override
+          public int compare(
+              Entry<String, String> o1, Entry<String, String> o2) {
+            return o1.getKey().compareTo(o2.getKey());
+          }
+  };
+
+  public static class ImmutableSortedMapKeySetGenerator
+      extends TestStringSetGenerator {
+
+    @Override protected Set<String> create(String[] elements) {
+      Builder<String, Integer> builder = ImmutableSortedMap.naturalOrder();
+      for (String key : elements) {
+        builder.put(key, 4);
+      }
+      return builder.build().keySet();
+    }
+    @Override public List<String> order(List<String> insertionOrder) {
+      Collections.sort(insertionOrder);
+      return insertionOrder;
+    }
+  }
+
+  public static class ImmutableSortedMapValuesGenerator
+      implements TestCollectionGenerator<String> {
+
+    @Override
+    public SampleElements<String> samples() {
+      return new SampleElements.Strings();
+    }
+
+    @Override
+    public Collection<String> create(Object... elements) {
+      Builder<Integer, String> builder = ImmutableSortedMap.naturalOrder();
+      for (int i = 0; i < elements.length; i++) {
+        builder.put(i, toStringOrNull(elements[i]));
+      }
+      return builder.build().values();
+    }
+
+    @Override
+    public String[] createArray(int length) {
+      return new String[length];
+    }
+
+    @Override
+    public List<String> order(List<String> insertionOrder) {
+      return insertionOrder;
+    }
+  }
+
+  public static class ImmutableSortedMapSubMapEntryGenerator
+      extends TestMapEntrySetGenerator<String, String> {
+
+    public ImmutableSortedMapSubMapEntryGenerator() {
+      super(new SampleElements.Strings(), new SampleElements.Strings());
+    }
+
+    @Override public Set<Entry<String, String>> createFromEntries(
+        Entry<String, String>[] entries) {
+      Builder<String, String> builder = ImmutableSortedMap.naturalOrder();
+      builder.put(SampleElements.Strings.BEFORE_FIRST, "begin");
+      builder.put(SampleElements.Strings.AFTER_LAST, "end");
+      for (Entry<String, String> entry : entries) {
+        checkNotNull(entry);
+        builder.put(entry.getKey(), entry.getValue());
+      }
+      return builder.build().subMap(SampleElements.Strings.MIN_ELEMENT,
+          SampleElements.Strings.AFTER_LAST).entrySet();
+    }
+    @Override public List<Entry<String, String>> order(
+        List<Entry<String, String>> insertionOrder) {
+      Collections.sort(insertionOrder, ENTRY_COMPARATOR);
+      return insertionOrder;
+    }
+  }
+
+  public static class ImmutableSortedMapHeadMapKeySetGenerator
+      extends TestStringSetGenerator {
+    @Override protected Set<String> create(String[] elements) {
+      Builder<String, Integer> builder = ImmutableSortedMap.naturalOrder();
+      builder.put(SampleElements.Strings.AFTER_LAST, -1);
+      for (String key : elements) {
+        builder.put(key, 4);
+      }
+      return builder.build().headMap(
+          SampleElements.Strings.AFTER_LAST).keySet();
+    }
+    @Override public List<String> order(List<String> insertionOrder) {
+      Collections.sort(insertionOrder);
+      return insertionOrder;
+    }
+  }
+
+  public static class ImmutableSortedMapTailMapValuesGenerator
+      implements TestCollectionGenerator<String> {
+
+    @Override
+    public SampleElements<String> samples() {
+      return new SampleElements.Strings();
+    }
+
+    @Override
+    public Collection<String> create(Object... elements) {
+      Builder<Integer, String> builder = ImmutableSortedMap.naturalOrder();
+      builder.put(-1, "begin");
+      for (int i = 0; i < elements.length; i++) {
+        builder.put(i, toStringOrNull(elements[i]));
+      }
+      return builder.build().tailMap(0).values();
+    }
+
+    @Override
+    public String[] createArray(int length) {
+      return new String[length];
+    }
+
+    @Override
+    public List<String> order(List<String> insertionOrder) {
+      return insertionOrder;
+    }
+  }
+
+  public static class ImmutableSortedMapEntrySetGenerator
+      extends TestMapEntrySetGenerator<String, String> {
+
+    public ImmutableSortedMapEntrySetGenerator() {
+      super(new SampleElements.Strings(), new SampleElements.Strings());
+    }
+
+    @Override public Set<Entry<String, String>> createFromEntries(
+        Entry<String, String>[] entries) {
+      Builder<String, String> builder = ImmutableSortedMap.naturalOrder();
+      for (Entry<String, String> entry : entries) {
+        checkNotNull(entry);
+        builder.put(entry.getKey(), entry.getValue());
+      }
+      return builder.build().entrySet();
+    }
+
+    @Override public List<Entry<String, String>> order(
+        List<Entry<String, String>> insertionOrder) {
+      Collections.sort(insertionOrder, ENTRY_COMPARATOR);
+      return insertionOrder;
+    }
+  }
+
+  private static String toStringOrNull(Object o) {
+    return (o == null) ? null : o.toString();
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/google/SortedMultisetTestSuiteBuilder.java b/guava-testlib/src/com/google/common/collect/testing/google/SortedMultisetTestSuiteBuilder.java
new file mode 100644
index 0000000..547ab97
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/google/SortedMultisetTestSuiteBuilder.java
@@ -0,0 +1,278 @@
+/*
+ * Copyright (C) 2011 Google Inc.
+ * 
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.google;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.collect.BoundType;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Multiset;
+import com.google.common.collect.SortedMultiset;
+import com.google.common.collect.testing.AbstractTester;
+import com.google.common.collect.testing.Helpers;
+import com.google.common.collect.testing.SampleElements;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.Feature;
+
+import junit.framework.TestSuite;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Creates, based on your criteria, a JUnit test suite that exhaustively tests a
+ * {@code SortedMultiset} implementation.
+ * 
+ * <p><b>Warning</b>: expects that {@code E} is a String.
+ * 
+ * @author Louis Wasserman
+ */
+@GwtCompatible
+public class SortedMultisetTestSuiteBuilder<E> extends
+    MultisetTestSuiteBuilder<E> {
+  public static <E> SortedMultisetTestSuiteBuilder<E> using(
+      TestMultisetGenerator<E> generator) {
+    SortedMultisetTestSuiteBuilder<E> result =
+        new SortedMultisetTestSuiteBuilder<E>();
+    result.usingGenerator(generator);
+    return result;
+  }
+
+  @Override
+  public TestSuite createTestSuite() {
+    TestSuite suite = super.createTestSuite();
+    for (TestSuite subSuite : createDerivedSuites(this)) {
+      suite.addTest(subSuite);
+    }
+    return suite;
+  }
+
+  @Override
+  protected List<Class<? extends AbstractTester>> getTesters() {
+    List<Class<? extends AbstractTester>> testers =
+        Helpers.copyToList(super.getTesters());
+    testers.add(MultisetNavigationTester.class);
+    return testers;
+  }
+
+  /**
+   * To avoid infinite recursion, test suites with these marker features won't
+   * have derived suites created for them.
+   */
+  enum NoRecurse implements Feature<Void> {
+    SUBMULTISET, DESCENDING;
+
+    @Override
+    public Set<Feature<? super Void>> getImpliedFeatures() {
+      return Collections.emptySet();
+    }
+  }
+
+  /**
+   * Two bounds (from and to) define how to build a subMultiset.
+   */
+  enum Bound {
+    INCLUSIVE, EXCLUSIVE, NO_BOUND;
+  }
+
+  List<TestSuite> createDerivedSuites(
+      SortedMultisetTestSuiteBuilder<E> parentBuilder) {
+    List<TestSuite> derivedSuites = Lists.newArrayList();
+
+    if (!parentBuilder.getFeatures().contains(NoRecurse.DESCENDING)) {
+      derivedSuites.add(createDescendingSuite(parentBuilder));
+    }
+
+    if (!parentBuilder.getFeatures().contains(NoRecurse.SUBMULTISET)) {
+      derivedSuites.add(createSubMultisetSuite(parentBuilder, Bound.NO_BOUND,
+          Bound.EXCLUSIVE));
+      derivedSuites.add(createSubMultisetSuite(parentBuilder, Bound.NO_BOUND,
+          Bound.INCLUSIVE));
+      derivedSuites.add(createSubMultisetSuite(parentBuilder, Bound.EXCLUSIVE,
+          Bound.NO_BOUND));
+      derivedSuites.add(createSubMultisetSuite(parentBuilder, Bound.EXCLUSIVE,
+          Bound.EXCLUSIVE));
+      derivedSuites.add(createSubMultisetSuite(parentBuilder, Bound.EXCLUSIVE,
+          Bound.INCLUSIVE));
+      derivedSuites.add(createSubMultisetSuite(parentBuilder, Bound.INCLUSIVE,
+          Bound.NO_BOUND));
+      derivedSuites.add(createSubMultisetSuite(parentBuilder, Bound.INCLUSIVE,
+          Bound.EXCLUSIVE));
+      derivedSuites.add(createSubMultisetSuite(parentBuilder, Bound.INCLUSIVE,
+          Bound.INCLUSIVE));
+    }
+
+    return derivedSuites;
+  }
+
+  private TestSuite createSubMultisetSuite(
+      SortedMultisetTestSuiteBuilder<E> parentBuilder, final Bound from,
+      final Bound to) {
+    final TestMultisetGenerator<E> delegate =
+        (TestMultisetGenerator<E>) parentBuilder.getSubjectGenerator();
+
+    List<Feature<?>> features = new ArrayList<Feature<?>>();
+    features.add(NoRecurse.SUBMULTISET);
+    features.add(CollectionFeature.RESTRICTS_ELEMENTS);
+    features.addAll(parentBuilder.getFeatures());
+
+    SortedMultiset<E> emptyMultiset = (SortedMultiset<E>) delegate.create();
+    final Comparator<? super E> comparator = emptyMultiset.comparator();
+    SampleElements<E> samples = delegate.samples();
+    @SuppressWarnings("unchecked")
+    List<E> samplesList =
+        Arrays.asList(samples.e0, samples.e1, samples.e2, samples.e3,
+            samples.e4);
+
+    Collections.sort(samplesList, comparator);
+    final E firstInclusive = samplesList.get(0);
+    final E lastInclusive = samplesList.get(samplesList.size() - 1);
+
+    return SortedMultisetTestSuiteBuilder
+        .using(new ForwardingTestMultisetGenerator<E>(delegate) {
+          @Override
+          public SortedMultiset<E> create(Object... entries) {
+            @SuppressWarnings("unchecked")
+            // we dangerously assume E is a string
+            List<E> extremeValues = (List) getExtremeValues();
+            @SuppressWarnings("unchecked")
+            // map generators must past entry objects
+            List<E> normalValues = (List) Arrays.asList(entries);
+
+            // prepare extreme values to be filtered out of view
+            Collections.sort(extremeValues, comparator);
+            E firstExclusive = extremeValues.get(1);
+            E lastExclusive = extremeValues.get(2);
+            if (from == Bound.NO_BOUND) {
+              extremeValues.remove(0);
+              extremeValues.remove(0);
+            }
+            if (to == Bound.NO_BOUND) {
+              extremeValues.remove(extremeValues.size() - 1);
+              extremeValues.remove(extremeValues.size() - 1);
+            }
+
+            // the regular values should be visible after filtering
+            List<E> allEntries = new ArrayList<E>();
+            allEntries.addAll(extremeValues);
+            allEntries.addAll(normalValues);
+            SortedMultiset<E> multiset =
+                (SortedMultiset<E>) delegate.create(allEntries.toArray());
+
+            // call the smallest subMap overload that filters out the extreme
+            // values
+            if (from == Bound.INCLUSIVE) {
+              multiset =
+                  multiset.tailMultiset(firstInclusive, BoundType.CLOSED);
+            } else if (from == Bound.EXCLUSIVE) {
+              multiset = multiset.tailMultiset(firstExclusive, BoundType.OPEN);
+            }
+
+            if (to == Bound.INCLUSIVE) {
+              multiset = multiset.headMultiset(lastInclusive, BoundType.CLOSED);
+            } else if (to == Bound.EXCLUSIVE) {
+              multiset = multiset.headMultiset(lastExclusive, BoundType.OPEN);
+            }
+
+            return multiset;
+          }
+        })
+        .named(parentBuilder.getName() + " subMultiset " + from + "-" + to)
+        .withFeatures(features)
+        .suppressing(parentBuilder.getSuppressedTests())
+        .createTestSuite();
+  }
+
+  /**
+   * Returns an array of four bogus elements that will always be too high or too
+   * low for the display. This includes two values for each extreme.
+   * 
+   * <p>
+   * This method (dangerously) assume that the strings {@code "!! a"} and
+   * {@code "~~ z"} will work for this purpose, which may cause problems for
+   * navigable maps with non-string or unicode generators.
+   */
+  private List<String> getExtremeValues() {
+    List<String> result = new ArrayList<String>();
+    result.add("!! a");
+    result.add("!! b");
+    result.add("~~ y");
+    result.add("~~ z");
+    return result;
+  }
+
+  private TestSuite createDescendingSuite(
+      SortedMultisetTestSuiteBuilder<E> parentBuilder) {
+    final TestMultisetGenerator<E> delegate =
+        (TestMultisetGenerator<E>) parentBuilder.getSubjectGenerator();
+
+    List<Feature<?>> features = new ArrayList<Feature<?>>();
+    features.add(NoRecurse.DESCENDING);
+    features.addAll(parentBuilder.getFeatures());
+
+    return SortedMultisetTestSuiteBuilder
+        .using(new ForwardingTestMultisetGenerator<E>(delegate) {
+          @Override
+          public SortedMultiset<E> create(Object... entries) {
+            return ((SortedMultiset<E>) super.create(entries))
+                .descendingMultiset();
+          }
+
+          @Override
+          public Iterable<E> order(List<E> insertionOrder) {
+            return ImmutableList.copyOf(super.order(insertionOrder)).reverse();
+          }
+        })
+        .named(parentBuilder.getName() + " descending")
+        .withFeatures(features)
+        .suppressing(parentBuilder.getSuppressedTests())
+        .createTestSuite();
+  }
+
+  private static class ForwardingTestMultisetGenerator<E>
+      implements TestMultisetGenerator<E> {
+    private final TestMultisetGenerator<E> delegate;
+
+    ForwardingTestMultisetGenerator(TestMultisetGenerator<E> delegate) {
+      this.delegate = delegate;
+    }
+
+    @Override
+    public SampleElements<E> samples() {
+      return delegate.samples();
+    }
+
+    @Override
+    public E[] createArray(int length) {
+      return delegate.createArray(length);
+    }
+
+    @Override
+    public Iterable<E> order(List<E> insertionOrder) {
+      return delegate.order(insertionOrder);
+    }
+
+    @Override
+    public Multiset<E> create(Object... elements) {
+      return delegate.create(elements);
+    }
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/google/TestEnumMultisetGenerator.java b/guava-testlib/src/com/google/common/collect/testing/google/TestEnumMultisetGenerator.java
new file mode 100644
index 0000000..1dad202
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/google/TestEnumMultisetGenerator.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.google;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.collect.Multiset;
+import com.google.common.collect.testing.AnEnum;
+import com.google.common.collect.testing.SampleElements;
+import com.google.common.collect.testing.SampleElements.Enums;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * An abstract {@code TestMultisetGenerator} for generating multisets containing
+ * enum values.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible
+public abstract class TestEnumMultisetGenerator
+    implements TestMultisetGenerator<AnEnum> {
+  @Override
+  public SampleElements<AnEnum> samples() {
+    return new Enums();
+  }
+
+  @Override
+  public Multiset<AnEnum> create(Object... elements) {
+    AnEnum[] array = new AnEnum[elements.length];
+    int i = 0;
+    for (Object e : elements) {
+      array[i++] = (AnEnum) e;
+    }
+    return create(array);
+  }
+
+  protected abstract Multiset<AnEnum> create(AnEnum[] elements);
+
+  @Override
+  public AnEnum[] createArray(int length) {
+    return new AnEnum[length];
+  }
+
+  /**
+   * Sorts the enums according to their natural ordering.
+   */
+  @Override
+  public List<AnEnum> order(List<AnEnum> insertionOrder) {
+    Collections.sort(insertionOrder);
+    return insertionOrder;
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/google/TestMultisetGenerator.java b/guava-testlib/src/com/google/common/collect/testing/google/TestMultisetGenerator.java
new file mode 100644
index 0000000..d3b5acd
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/google/TestMultisetGenerator.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.google;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.collect.Multiset;
+import com.google.common.collect.testing.TestCollectionGenerator;
+
+/**
+ * Creates multisets, containing sample elements, to be tested.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible
+public interface TestMultisetGenerator<E> extends TestCollectionGenerator<E> {
+  @Override
+  Multiset<E> create(Object... elements);
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/google/TestStringMultisetGenerator.java b/guava-testlib/src/com/google/common/collect/testing/google/TestStringMultisetGenerator.java
new file mode 100644
index 0000000..4711150
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/google/TestStringMultisetGenerator.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.google;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.collect.Multiset;
+import com.google.common.collect.testing.SampleElements;
+import com.google.common.collect.testing.SampleElements.Strings;
+
+import java.util.List;
+
+/**
+ * Create multisets of strings for tests.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible
+public abstract class TestStringMultisetGenerator
+    implements TestMultisetGenerator<String>
+{
+  @Override
+  public SampleElements<String> samples() {
+    return new Strings();
+  }
+
+  @Override
+  public Multiset<String> create(Object... elements) {
+    String[] array = new String[elements.length];
+    int i = 0;
+    for (Object e : elements) {
+      array[i++] = (String) e;
+    }
+    return create(array);
+  }
+
+  protected abstract Multiset<String> create(String[] elements);
+
+  @Override
+  public String[] createArray(int length) {
+    return new String[length];
+  }
+
+  /** Returns the original element list, unchanged. */
+  @Override
+  public List<String> order(List<String> insertionOrder) {
+    return insertionOrder;
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/google/UnmodifiableCollectionTests.java b/guava-testlib/src/com/google/common/collect/testing/google/UnmodifiableCollectionTests.java
new file mode 100644
index 0000000..b136ff3
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/google/UnmodifiableCollectionTests.java
@@ -0,0 +1,425 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.google;
+
+import static junit.framework.TestCase.assertEquals;
+import static junit.framework.TestCase.assertTrue;
+import static junit.framework.TestCase.fail;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.collect.ArrayListMultimap;
+import com.google.common.collect.LinkedHashMultiset;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Multimap;
+import com.google.common.collect.Multiset;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map.Entry;
+import java.util.Set;
+
+/**
+ * A series of tests that support asserting that collections cannot be
+ * modified, either through direct or indirect means.
+ *
+ * @author Robert Konigsberg
+ */
+@GwtCompatible
+public class UnmodifiableCollectionTests {
+
+  public static void assertMapEntryIsUnmodifiable(Entry<?, ?> entry) {
+    try {
+      entry.setValue(null);
+      fail("setValue on unmodifiable Map.Entry succeeded");
+    } catch (UnsupportedOperationException expected) {
+    }
+  }
+
+  /**
+   * Verifies that an Iterator is unmodifiable.
+   *
+   * <p>This test only works with iterators that iterate over a finite set.
+   */
+  public static void assertIteratorIsUnmodifiable(Iterator<?> iterator) {
+    while (iterator.hasNext()) {
+      iterator.next();
+      try {
+        iterator.remove();
+        fail("Remove on unmodifiable iterator succeeded");
+      } catch (UnsupportedOperationException expected) {
+      }
+    }
+  }
+
+  /**
+   * Asserts that two iterators contain elements in tandem.
+   *
+   * <p>This test only works with iterators that iterate over a finite set.
+   */
+  public static void assertIteratorsInOrder(
+      Iterator<?> expectedIterator, Iterator<?> actualIterator) {
+    int i = 0;
+    while (expectedIterator.hasNext()) {
+      Object expected = expectedIterator.next();
+
+      assertTrue(
+          "index " + i + " expected <" + expected + "., actual is exhausted",
+        actualIterator.hasNext());
+
+      Object actual = actualIterator.next();
+      assertEquals("index " + i, expected, actual);
+      i++;
+    }
+    if (actualIterator.hasNext()) {
+      fail("index " + i
+          + ", expected is exhausted, actual <" + actualIterator.next() + ">");
+    }
+  }
+
+  /**
+   * Verifies that a collection is immutable.
+   *
+   * <p>A collection is considered immutable if:
+   * <ol>
+   * <li>All its mutation methods result in UnsupportedOperationException, and
+   * do not change the underlying contents.
+   * <li>All methods that return objects that can indirectly mutate the
+   * collection throw UnsupportedOperationException when those mutators
+   * are called.
+   * </ol>
+   *
+   * @param collection the presumed-immutable collection
+   * @param sampleElement an element of the same type as that contained by
+   * {@code collection}. {@code collection} may or may not have {@code
+   * sampleElement} as a member.
+   */
+  public static <E> void assertCollectionIsUnmodifiable(
+      Collection<E> collection, E sampleElement) {
+    Collection<E> siblingCollection = new ArrayList<E>();
+    siblingCollection.add(sampleElement);
+    Collection<E> copy = new ArrayList<E>();
+    copy.addAll(collection);
+    try {
+      collection.add(sampleElement);
+      fail("add succeeded on unmodifiable collection");
+    } catch (UnsupportedOperationException expected) {
+    }
+
+    assertCollectionsAreEquivalent(copy, collection);
+
+    try {
+      collection.addAll(siblingCollection);
+      fail("addAll succeeded on unmodifiable collection");
+    } catch (UnsupportedOperationException expected) {
+    }
+    assertCollectionsAreEquivalent(copy, collection);
+
+    try {
+      collection.clear();
+      fail("clear succeeded on unmodifiable collection");
+    } catch (UnsupportedOperationException expected) {
+    }
+    assertCollectionsAreEquivalent(copy, collection);
+
+    assertIteratorIsUnmodifiable(collection.iterator());
+    assertCollectionsAreEquivalent(copy, collection);
+
+    try {
+      collection.remove(sampleElement);
+      fail("remove succeeded on unmodifiable collection");
+    } catch (UnsupportedOperationException expected) {
+    }
+    assertCollectionsAreEquivalent(copy, collection);
+
+    try {
+      collection.removeAll(siblingCollection);
+      fail("removeAll succeeded on unmodifiable collection");
+    } catch (UnsupportedOperationException expected) {
+    }
+    assertCollectionsAreEquivalent(copy, collection);
+
+    try {
+      collection.retainAll(siblingCollection);
+      fail("retainAll succeeded on unmodifiable collection");
+    } catch (UnsupportedOperationException expected) {
+    }
+    assertCollectionsAreEquivalent(copy, collection);
+  }
+
+  /**
+   * Verifies that a set is immutable.
+   *
+   * <p>A set is considered immutable if:
+   * <ol>
+   * <li>All its mutation methods result in UnsupportedOperationException, and
+   * do not change the underlying contents.
+   * <li>All methods that return objects that can indirectly mutate the
+   * set throw UnsupportedOperationException when those mutators
+   * are called.
+   * </ol>
+   *
+   * @param set the presumed-immutable set
+   * @param sampleElement an element of the same type as that contained by
+   * {@code set}. {@code set} may or may not have {@code sampleElement} as a
+   * member.
+   */
+  public static <E> void assertSetIsUnmodifiable(
+      Set<E> set, E sampleElement) {
+    assertCollectionIsUnmodifiable(set, sampleElement);
+  }
+
+  /**
+   * Verifies that a multiset is immutable.
+   *
+   * <p>A multiset is considered immutable if:
+   * <ol>
+   * <li>All its mutation methods result in UnsupportedOperationException, and
+   * do not change the underlying contents.
+   * <li>All methods that return objects that can indirectly mutate the
+   * multiset throw UnsupportedOperationException when those mutators
+   * are called.
+   * </ol>
+   *
+   * @param multiset the presumed-immutable multiset
+   * @param sampleElement an element of the same type as that contained by
+   * {@code multiset}. {@code multiset} may or may not have {@code
+   * sampleElement} as a member.
+   */
+  public static <E> void assertMultisetIsUnmodifiable(Multiset<E> multiset,
+      final E sampleElement) {
+    Multiset<E> copy = LinkedHashMultiset.create(multiset);
+    assertCollectionsAreEquivalent(multiset, copy);
+
+    // Multiset is a collection, so we can use all those tests.
+    assertCollectionIsUnmodifiable(multiset, sampleElement);
+
+    assertCollectionsAreEquivalent(multiset, copy);
+
+    try {
+      multiset.add(sampleElement, 2);
+      fail("add(Object, int) succeeded on unmodifiable collection");
+    } catch (UnsupportedOperationException expected) {
+    }
+    assertCollectionsAreEquivalent(multiset, copy);
+
+    try {
+      multiset.remove(sampleElement, 2);
+      fail("remove(Object, int) succeeded on unmodifiable collection");
+    } catch (UnsupportedOperationException expected) {
+    }
+    assertCollectionsAreEquivalent(multiset, copy);
+
+    assertCollectionsAreEquivalent(multiset, copy);
+
+    assertSetIsUnmodifiable(multiset.elementSet(), sampleElement);
+    assertCollectionsAreEquivalent(multiset, copy);
+
+    assertSetIsUnmodifiable(
+      multiset.entrySet(), new Multiset.Entry<E>() {
+        @Override
+        public int getCount() {
+          return 1;
+        }
+
+        @Override
+        public E getElement() {
+          return sampleElement;
+        }
+      });
+    assertCollectionsAreEquivalent(multiset, copy);
+  }
+
+  /**
+   * Verifies that a multimap is immutable.
+   *
+   * <p>A multimap is considered immutable if:
+   * <ol>
+   * <li>All its mutation methods result in UnsupportedOperationException, and
+   * do not change the underlying contents.
+   * <li>All methods that return objects that can indirectly mutate the
+   * multimap throw UnsupportedOperationException when those mutators
+   * </ol>
+   *
+   * @param multimap the presumed-immutable multimap
+   * @param sampleKey a key of the same type as that contained by
+   * {@code multimap}. {@code multimap} may or may not have {@code sampleKey} as
+   * a key.
+   * @param sampleValue a key of the same type as that contained by
+   * {@code multimap}. {@code multimap} may or may not have {@code sampleValue}
+   * as a key.
+   */
+  public static <K, V> void assertMultimapIsUnmodifiable(
+      Multimap<K, V> multimap, final K sampleKey, final V sampleValue) {
+    List<Entry<K, V>> originalEntries =
+        Collections.unmodifiableList(Lists.newArrayList(multimap.entries()));
+
+    assertMultimapRemainsUnmodified(multimap, originalEntries);
+
+    Collection<V> sampleValueAsCollection = Collections.singleton(sampleValue);
+
+    // Test #clear()
+    try {
+      multimap.clear();
+      fail("clear succeeded on unmodifiable multimap");
+    } catch (UnsupportedOperationException expected) {
+    }
+
+    assertMultimapRemainsUnmodified(multimap, originalEntries);
+
+    // Test asMap().entrySet()
+    assertSetIsUnmodifiable(
+      multimap.asMap().entrySet(),
+      Maps.immutableEntry(sampleKey, sampleValueAsCollection));
+
+    // Test #values()
+
+    assertMultimapRemainsUnmodified(multimap, originalEntries);
+    if (!multimap.isEmpty()) {
+      Collection<V> values =
+          multimap.asMap().entrySet().iterator().next().getValue();
+
+      assertCollectionIsUnmodifiable(values, sampleValue);
+    }
+
+    // Test #entries()
+    assertCollectionIsUnmodifiable(
+      multimap.entries(),
+      Maps.immutableEntry(sampleKey, sampleValue));
+    assertMultimapRemainsUnmodified(multimap, originalEntries);
+
+    // Iterate over every element in the entry set
+    for (Entry<K, V> entry : multimap.entries()) {
+      assertMapEntryIsUnmodifiable(entry);
+    }
+    assertMultimapRemainsUnmodified(multimap, originalEntries);
+
+    // Test #keys()
+    assertMultisetIsUnmodifiable(multimap.keys(), sampleKey);
+    assertMultimapRemainsUnmodified(multimap, originalEntries);
+
+    // Test #keySet()
+    assertSetIsUnmodifiable(multimap.keySet(), sampleKey);
+    assertMultimapRemainsUnmodified(multimap, originalEntries);
+
+    // Test #get()
+    if (!multimap.isEmpty()) {
+      K key = multimap.keySet().iterator().next();
+      assertCollectionIsUnmodifiable(multimap.get(key), sampleValue);
+      assertMultimapRemainsUnmodified(multimap, originalEntries);
+    }
+
+    // Test #put()
+    try {
+      multimap.put(sampleKey, sampleValue);
+      fail("put succeeded on unmodifiable multimap");
+    } catch (UnsupportedOperationException expected) {
+    }
+    assertMultimapRemainsUnmodified(multimap, originalEntries);
+
+    // Test #putAll(K, Collection<V>)
+    try {
+      multimap.putAll(sampleKey, sampleValueAsCollection);
+      fail("putAll(K, Iterable) succeeded on unmodifiable multimap");
+    } catch (UnsupportedOperationException expected) {
+    }
+    assertMultimapRemainsUnmodified(multimap, originalEntries);
+
+    // Test #putAll(Multimap<K, V>)
+    Multimap<K, V> multimap2 = ArrayListMultimap.create();
+    multimap2.put(sampleKey, sampleValue);
+    try {
+      multimap.putAll(multimap2);
+      fail("putAll(Multimap<K, V>) succeeded on unmodifiable multimap");
+    } catch (UnsupportedOperationException expected) {
+    }
+    assertMultimapRemainsUnmodified(multimap, originalEntries);
+
+    // Test #remove()
+    try {
+      multimap.remove(sampleKey, sampleValue);
+      fail("remove succeeded on unmodifiable multimap");
+    } catch (UnsupportedOperationException expected) {
+    }
+    assertMultimapRemainsUnmodified(multimap, originalEntries);
+
+    // Test #removeAll()
+    try {
+      multimap.removeAll(sampleKey);
+      fail("removeAll succeeded on unmodifiable multimap");
+    } catch (UnsupportedOperationException expected) {
+    }
+    assertMultimapRemainsUnmodified(multimap, originalEntries);
+
+    // Test #replaceValues()
+    try {
+      multimap.replaceValues(sampleKey, sampleValueAsCollection);
+      fail("replaceValues succeeded on unmodifiable multimap");
+    } catch (UnsupportedOperationException expected) {
+    }
+    assertMultimapRemainsUnmodified(multimap, originalEntries);
+
+    // Test #asMap()
+    try {
+      multimap.asMap().remove(sampleKey);
+      fail("asMap().remove() succeeded on unmodifiable multimap");
+    } catch (UnsupportedOperationException expected) {
+    }
+    assertMultimapRemainsUnmodified(multimap, originalEntries);
+
+    if (!multimap.isEmpty()) {
+      K presentKey = multimap.keySet().iterator().next();
+      try {
+        multimap.asMap().get(presentKey).remove(sampleValue);
+        fail("asMap().get().remove() succeeded on unmodifiable multimap");
+      } catch (UnsupportedOperationException expected) {
+      }
+      assertMultimapRemainsUnmodified(multimap, originalEntries);
+
+      try {
+        multimap.asMap().values().iterator().next().remove(sampleValue);
+        fail("asMap().values().iterator().next().remove() succeeded on " +
+                "unmodifiable multimap");
+      } catch (UnsupportedOperationException expected) {
+      }
+
+      try {
+        ((Collection<?>) multimap.asMap().values().toArray()[0]).clear();
+        fail("asMap().values().toArray()[0].clear() succeeded on " +
+                "unmodifiable multimap");
+      } catch (UnsupportedOperationException expected) {
+      }
+    }
+
+    assertCollectionIsUnmodifiable(multimap.values(), sampleValue);
+    assertMultimapRemainsUnmodified(multimap, originalEntries);
+  }
+
+  private static <E> void assertCollectionsAreEquivalent(
+      Collection<E> expected, Collection<E> actual) {
+    assertIteratorsInOrder(expected.iterator(), actual.iterator());
+  }
+
+  private static <K, V> void assertMultimapRemainsUnmodified(
+      Multimap<K, V> expected, List<Entry<K, V>> actual) {
+    assertIteratorsInOrder(
+      expected.entries().iterator(), actual.iterator());
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/AbstractListIndexOfTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/AbstractListIndexOfTester.java
new file mode 100644
index 0000000..af960a5
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/AbstractListIndexOfTester.java
@@ -0,0 +1,95 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+import com.google.common.collect.testing.WrongType;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+
+/**
+ * Common parent class for {@link ListIndexOfTester} and
+ * {@link ListLastIndexOfTester}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Chris Povirk
+ */
+public abstract class AbstractListIndexOfTester<E>
+    extends AbstractListTester<E> {
+  /** Override to call {@code indexOf()} or {@code lastIndexOf()}. */
+  protected abstract int find(Object o);
+
+  /**
+   * Override to return "indexOf" or "lastIndexOf()" for use in failure
+   * messages.
+   */
+  protected abstract String getMethodName();
+
+  @CollectionSize.Require(absent = ZERO)
+  public void testFind_yes() {
+    assertEquals(getMethodName() + "(firstElement) should return 0",
+        0, find(samples.e0));
+  }
+
+  public void testFind_no() {
+    assertEquals(getMethodName() + "(notPresent) should return -1",
+        -1, find(samples.e3));
+  }
+
+  @CollectionFeature.Require(ALLOWS_NULL_VALUES)
+  public void testFind_nullNotContainedButSupported() {
+    assertEquals(getMethodName() + "(nullNotPresent) should return -1",
+        -1, find(null));
+  }
+
+  @CollectionFeature.Require(absent = ALLOWS_NULL_VALUES)
+  public void testFind_nullNotContainedAndUnsupported() {
+    try {
+      assertEquals(
+          getMethodName() + "(nullNotPresent) should return -1 or throw",
+          -1, find(null));
+    } catch (NullPointerException tolerated) {
+    }
+  }
+
+  @CollectionFeature.Require(ALLOWS_NULL_VALUES)
+  @CollectionSize.Require(absent = ZERO)
+  public void testFind_nonNullWhenNullContained() {
+    initCollectionWithNullElement();
+    assertEquals(getMethodName() + "(notPresent) should return -1",
+        -1, find(samples.e3));
+  }
+
+  @CollectionFeature.Require(ALLOWS_NULL_VALUES)
+  @CollectionSize.Require(absent = ZERO)
+  public void testFind_nullContained() {
+    initCollectionWithNullElement();
+    assertEquals(getMethodName() + "(null) should return " + getNullLocation(),
+        getNullLocation(), find(null));
+  }
+
+  public void testFind_wrongType() {
+    try {
+      assertEquals(getMethodName() + "(wrongType) should return -1 or throw",
+          -1, find(WrongType.VALUE));
+    } catch (ClassCastException tolerated) {
+    }
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/AbstractListTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/AbstractListTester.java
new file mode 100644
index 0000000..268022d
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/AbstractListTester.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.AbstractCollectionTester;
+import com.google.common.collect.testing.Helpers;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * Base class for list testers.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author George van den Driessche
+ */
+public class AbstractListTester<E> extends AbstractCollectionTester<E> {
+  /*
+   * Previously we had a field named list that was initialized to the value of
+   * collection in setUp(), but that caused problems when a tester changed the
+   * value of list or collection but not both.
+   */
+  protected final List<E> getList() {
+    return (List<E>) collection;
+  }
+
+  /**
+   * {@inheritDoc}
+   * <p>
+   * The {@code AbstractListTester} implementation overrides
+   * {@link AbstractCollectionTester#expectContents(Collection)} to verify that
+   * the order of the elements in the list under test matches what is expected.
+   */
+  @Override protected void expectContents(Collection<E> expectedCollection) {
+    List<E> expectedList = Helpers.copyToList(expectedCollection);
+    // Avoid expectEquals() here to delay reason manufacture until necessary.
+    if (getList().size() != expectedList.size()) {
+      fail("size mismatch: " + reportContext(expectedList));
+    }
+    for (int i = 0; i < expectedList.size(); i++) {
+      E expected = expectedList.get(i);
+      E actual = getList().get(i);
+      if (expected != actual &&
+          (expected == null || !expected.equals(actual))) {
+        fail("mismatch at index " + i + ": " + reportContext(expectedList));
+      }
+    }
+  }
+
+  /**
+   * Used to delay string formatting until actually required, as it
+   * otherwise shows up in the test execution profile when running an
+   * extremely large numbers of tests.
+   */
+  private String reportContext(List<E> expected) {
+    return Platform.format("expected collection %s; actual collection %s",
+                           expected, this.collection);
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/AbstractQueueTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/AbstractQueueTester.java
new file mode 100644
index 0000000..5f7477c
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/AbstractQueueTester.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.AbstractCollectionTester;
+
+import java.util.Queue;
+
+/**
+ * Base class for queue collection tests.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Jared Levy
+ */
+public class AbstractQueueTester<E> extends AbstractCollectionTester<E> {
+  protected final Queue<E> getQueue() {
+    return (Queue<E>) collection;
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/AbstractSetTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/AbstractSetTester.java
new file mode 100644
index 0000000..76a5326
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/AbstractSetTester.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.AbstractCollectionTester;
+
+import java.util.Set;
+
+/**
+ * <p>This class is GWT compatible.
+ *
+ * @author George van den Driessche
+ */
+public class AbstractSetTester<E> extends AbstractCollectionTester<E> {
+  /*
+   * Previously we had a field named set that was initialized to the value of
+   * collection in setUp(), but that caused problems when a tester changed the
+   * value of set or collection but not both.
+   */
+  protected final Set<E> getSet() {
+    return (Set<E>) collection;
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionAddAllTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionAddAllTester.java
new file mode 100644
index 0000000..b5e3085
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionAddAllTester.java
@@ -0,0 +1,157 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES;
+import static com.google.common.collect.testing.features.CollectionFeature.RESTRICTS_ELEMENTS;
+import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_ADD_ALL;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+import static java.util.Collections.singletonList;
+
+import com.google.common.collect.testing.AbstractCollectionTester;
+import com.google.common.collect.testing.MinimalCollection;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+
+import java.lang.reflect.Method;
+import java.util.List;
+
+/**
+ * A generic JUnit test which tests addAll operations on a collection. Can't be
+ * invoked directly; please see
+ * {@link com.google.common.collect.testing.CollectionTestSuiteBuilder}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Chris Povirk
+ * @author Kevin Bourrillion
+ */
+@SuppressWarnings("unchecked") // too many "unchecked generic array creations"
+public class CollectionAddAllTester<E> extends AbstractCollectionTester<E> {
+  @CollectionFeature.Require(SUPPORTS_ADD_ALL)
+  public void testAddAll_supportedNothing() {
+    assertFalse("addAll(nothing) should return false",
+        collection.addAll(emptyCollection()));
+    expectUnchanged();
+  }
+
+  @CollectionFeature.Require(absent = SUPPORTS_ADD_ALL)
+  public void testAddAll_unsupportedNothing() {
+    try {
+      assertFalse("addAll(nothing) should return false or throw",
+          collection.addAll(emptyCollection()));
+    } catch (UnsupportedOperationException tolerated) {
+    }
+    expectUnchanged();
+  }
+
+  @CollectionFeature.Require(SUPPORTS_ADD_ALL)
+  public void testAddAll_supportedNonePresent() {
+    assertTrue("addAll(nonePresent) should return true",
+        collection.addAll(createDisjointCollection()));
+    expectAdded(samples.e3, samples.e4);
+  }
+
+  @CollectionFeature.Require(absent = SUPPORTS_ADD_ALL)
+  public void testAddAll_unsupportedNonePresent() {
+    try {
+      collection.addAll(createDisjointCollection());
+      fail("addAll(nonePresent) should throw");
+    } catch (UnsupportedOperationException expected) {
+    }
+    expectUnchanged();
+    expectMissing(samples.e3, samples.e4);
+  }
+
+  @CollectionFeature.Require(SUPPORTS_ADD_ALL)
+  @CollectionSize.Require(absent = ZERO)
+  public void testAddAll_supportedSomePresent() {
+    assertTrue("addAll(somePresent) should return true",
+        collection.addAll(MinimalCollection.of(samples.e3, samples.e0)));
+    assertTrue("should contain " + samples.e3, collection.contains(samples.e3));
+    assertTrue("should contain " + samples.e0, collection.contains(samples.e0));
+  }
+
+  @CollectionFeature.Require(absent = SUPPORTS_ADD_ALL)
+  @CollectionSize.Require(absent = ZERO)
+  public void testAddAll_unsupportedSomePresent() {
+    try {
+      collection.addAll(MinimalCollection.of(samples.e3, samples.e0));
+      fail("addAll(somePresent) should throw");
+    } catch (UnsupportedOperationException expected) {
+    }
+    expectUnchanged();
+  }
+
+  @CollectionFeature.Require(absent = SUPPORTS_ADD_ALL)
+  @CollectionSize.Require(absent = ZERO)
+  public void testAddAll_unsupportedAllPresent() {
+    try {
+      assertFalse("addAll(allPresent) should return false or throw",
+          collection.addAll(MinimalCollection.of(samples.e0)));
+    } catch (UnsupportedOperationException tolerated) {
+    }
+    expectUnchanged();
+  }
+
+  @CollectionFeature.Require(value = {SUPPORTS_ADD_ALL,
+      ALLOWS_NULL_VALUES}, absent = RESTRICTS_ELEMENTS)
+  public void testAddAll_nullSupported() {
+    List<E> containsNull = singletonList(null);
+    assertTrue("addAll(containsNull) should return true", collection
+        .addAll(containsNull));
+    /*
+     * We need (E) to force interpretation of null as the single element of a
+     * varargs array, not the array itself
+     */
+    expectAdded((E) null);
+  }
+
+  @CollectionFeature.Require(value = SUPPORTS_ADD_ALL,
+      absent = ALLOWS_NULL_VALUES)
+  public void testAddAll_nullUnsupported() {
+    List<E> containsNull = singletonList(null);
+    try {
+      collection.addAll(containsNull);
+      fail("addAll(containsNull) should throw");
+    } catch (NullPointerException expected) {
+    }
+    expectUnchanged();
+    expectNullMissingWhenNullUnsupported(
+        "Should not contain null after unsupported addAll(containsNull)");
+  }
+
+  @CollectionFeature.Require(SUPPORTS_ADD_ALL)
+  public void testAddAll_nullCollectionReference() {
+    try {
+      collection.addAll(null);
+      fail("addAll(null) should throw NullPointerException");
+    } catch (NullPointerException expected) {
+    }
+  }
+
+  /**
+   * Returns the {@link Method} instance for {@link
+   * #testAddAll_nullUnsupported()} so that tests can suppress it with {@code
+   * FeatureSpecificTestSuiteBuilder.suppressing()} until <a
+   * href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5045147">Sun
+   * bug 5045147</a> is fixed.
+   */
+  public static Method getAddAllNullUnsupportedMethod() {
+    return Platform.getMethod(CollectionAddAllTester.class, "testAddAll_nullUnsupported");
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionAddTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionAddTester.java
new file mode 100644
index 0000000..1de5b14
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionAddTester.java
@@ -0,0 +1,120 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES;
+import static com.google.common.collect.testing.features.CollectionFeature.RESTRICTS_ELEMENTS;
+import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_ADD;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+import com.google.common.collect.testing.AbstractCollectionTester;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+
+import java.lang.reflect.Method;
+
+/**
+ * A generic JUnit test which tests {@code add} operations on a collection.
+ * Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.CollectionTestSuiteBuilder}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Chris Povirk
+ * @author Kevin Bourrillion
+ */
+@SuppressWarnings("unchecked") // too many "unchecked generic array creations"
+public class CollectionAddTester<E> extends AbstractCollectionTester<E> {
+  @CollectionFeature.Require(SUPPORTS_ADD)
+  public void testAdd_supportedNotPresent() {
+    assertTrue("add(notPresent) should return true",
+        collection.add(samples.e3));
+    expectAdded(samples.e3);
+  }
+
+  @CollectionFeature.Require(absent = SUPPORTS_ADD)
+  public void testAdd_unsupportedNotPresent() {
+    try {
+      collection.add(samples.e3);
+      fail("add(notPresent) should throw");
+    } catch (UnsupportedOperationException expected) {
+    }
+    expectUnchanged();
+    expectMissing(samples.e3);
+  }
+
+  @CollectionFeature.Require(absent = SUPPORTS_ADD)
+  @CollectionSize.Require(absent = ZERO)
+  public void testAdd_unsupportedPresent() {
+    try {
+      assertFalse("add(present) should return false or throw",
+          collection.add(samples.e0));
+    } catch (UnsupportedOperationException tolerated) {
+    }
+    expectUnchanged();
+  }
+
+  @CollectionFeature.Require(
+      value = {SUPPORTS_ADD, ALLOWS_NULL_VALUES},
+      absent = RESTRICTS_ELEMENTS)
+  public void testAdd_nullSupported() {
+    assertTrue("add(null) should return true", collection.add(null));
+    expectAdded((E) null);
+  }
+
+  @CollectionFeature.Require(value = SUPPORTS_ADD,
+      absent = ALLOWS_NULL_VALUES)
+  public void testAdd_nullUnsupported() {
+    try {
+      collection.add(null);
+      fail("add(null) should throw");
+    } catch (NullPointerException expected) {
+    }
+    expectUnchanged();
+    expectNullMissingWhenNullUnsupported(
+        "Should not contain null after unsupported add(null)");
+  }
+
+  /**
+   * Returns the {@link Method} instance for {@link #testAdd_nullSupported()} so
+   * that tests of {@link
+   * java.util.Collections#checkedCollection(java.util.Collection, Class)} can
+   * suppress it with {@code FeatureSpecificTestSuiteBuilder.suppressing()}
+   * until <a
+   * href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6409434">Sun bug
+   * 6409434</a> is fixed. It's unclear whether nulls were to be permitted or
+   * forbidden, but presumably the eventual fix will be to permit them, as it
+   * seems more likely that code would depend on that behavior than on the
+   * other. Thus, we say the bug is in add(), which fails to support null.
+   */
+  public static Method getAddNullSupportedMethod() {
+    return Platform.getMethod(CollectionAddTester.class, "testAdd_nullSupported");
+  }
+
+  /**
+   * Returns the {@link Method} instance for {@link #testAdd_nullSupported()} so
+   * that tests of {@link
+   * java.util.Collections#checkedCollection(java.util.Collection, Class)} can
+   * suppress it with {@code FeatureSpecificTestSuiteBuilder.suppressing()}
+   * until <a
+   * href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5045147">Sun
+   * bug 5045147</a> is fixed.
+   */
+  public static Method getAddNullUnsupportedMethod() {
+    return Platform.getMethod(CollectionAddTester.class, "testAdd_nullUnsupported");
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionClearTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionClearTester.java
new file mode 100644
index 0000000..69f1d02
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionClearTester.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_CLEAR;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+import com.google.common.collect.testing.AbstractCollectionTester;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+
+/**
+ * A generic JUnit test which tests {@code clear()} operations on a collection.
+ * Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.CollectionTestSuiteBuilder}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author George van den Driessche
+ */
+public class CollectionClearTester<E> extends AbstractCollectionTester<E> {
+  @CollectionFeature.Require(SUPPORTS_CLEAR)
+  public void testClear() {
+    collection.clear();
+    assertTrue("After clear(), a collection should be empty.",
+        collection.isEmpty());
+  }
+
+  @CollectionFeature.Require(absent = SUPPORTS_CLEAR)
+  @CollectionSize.Require(absent = ZERO)
+  public void testClear_unsupported() {
+    try {
+      collection.clear();
+      fail("clear() should throw UnsupportedOperation if a collection does "
+          + "not support it and is not empty.");
+    } catch (UnsupportedOperationException expected) {
+    }
+    expectUnchanged();
+  }
+
+  @CollectionFeature.Require(absent = SUPPORTS_CLEAR)
+  @CollectionSize.Require(ZERO)
+  public void testClear_unsupportedByEmptyCollection() {
+    try {
+      collection.clear();
+    } catch (UnsupportedOperationException tolerated) {
+    }
+    expectUnchanged();
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionContainsAllTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionContainsAllTester.java
new file mode 100644
index 0000000..40be02b
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionContainsAllTester.java
@@ -0,0 +1,101 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_QUERIES;
+import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+import com.google.common.collect.testing.AbstractCollectionTester;
+import com.google.common.collect.testing.MinimalCollection;
+import com.google.common.collect.testing.WrongType;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+
+import java.util.Collection;
+
+/**
+ * A generic JUnit test which tests {@code containsAll()} operations on a
+ * collection. Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.CollectionTestSuiteBuilder}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Kevin Bourrillion
+ * @author Chris Povirk
+ */
+@SuppressWarnings("unchecked") // too many "unchecked generic array creations"
+public class CollectionContainsAllTester<E>
+    extends AbstractCollectionTester<E> {
+  public void testContainsAll_empty() {
+    assertTrue("containsAll(empty) should return true",
+        collection.containsAll(MinimalCollection.of()));
+  }
+
+  @CollectionSize.Require(absent = ZERO)
+  public void testContainsAll_subset() {
+    assertTrue("containsAll(subset) should return true",
+        collection.containsAll(MinimalCollection.of(samples.e0)));
+  }
+
+  public void testContainsAll_sameElements() {
+    assertTrue("containsAll(sameElements) should return true",
+        collection.containsAll(MinimalCollection.of(createSamplesArray())));
+  }
+
+  public void testContainsAll_self() {
+    assertTrue("containsAll(this) should return true",
+        collection.containsAll(collection));
+  }
+
+  public void testContainsAll_partialOverlap() {
+    assertFalse("containsAll(partialOverlap) should return false",
+        collection.containsAll(MinimalCollection.of(samples.e0, samples.e3)));
+  }
+
+  public void testContainsAll_disjoint() {
+    assertFalse("containsAll(disjoint) should return false",
+        collection.containsAll(MinimalCollection.of(samples.e3)));
+  }
+
+  @CollectionFeature.Require(absent = ALLOWS_NULL_QUERIES)
+  public void testContainsAll_nullNotAllowed() {
+    try {
+      assertFalse(collection.containsAll(MinimalCollection.of((E) null)));
+    } catch (NullPointerException tolerated) {}
+  }
+
+  @CollectionFeature.Require(ALLOWS_NULL_QUERIES)
+  public void testContainsAll_nullAllowed() {
+    assertFalse(collection.containsAll(MinimalCollection.of((E) null)));
+  }
+
+  @CollectionFeature.Require(ALLOWS_NULL_VALUES)
+  public void testContainsAll_nullPresent() {
+    initCollectionWithNullElement();
+    assertTrue(collection.containsAll(MinimalCollection.of((E) null)));
+  }
+
+  public void testContainsAll_wrongType() {
+    Collection<WrongType> wrong = MinimalCollection.of(WrongType.VALUE);
+    try {
+      assertFalse("containsAll(wrongType) should return false or throw",
+          collection.containsAll(wrong));
+    } catch (ClassCastException tolerated) {
+    }
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionContainsTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionContainsTester.java
new file mode 100644
index 0000000..49337c3
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionContainsTester.java
@@ -0,0 +1,84 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_QUERIES;
+import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+import com.google.common.collect.testing.AbstractCollectionTester;
+import com.google.common.collect.testing.WrongType;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+
+/**
+ * A generic JUnit test which tests {@code contains()} operations on a
+ * collection. Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.CollectionTestSuiteBuilder}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Kevin Bourrillion
+ * @author Chris Povirk
+ */
+public class CollectionContainsTester<E> extends AbstractCollectionTester<E> {
+  @CollectionSize.Require(absent = ZERO)
+  public void testContains_yes() {
+    assertTrue("contains(present) should return true",
+        collection.contains(samples.e0));
+  }
+
+  public void testContains_no() {
+    assertFalse("contains(notPresent) should return false",
+        collection.contains(samples.e3));
+  }
+
+  @CollectionFeature.Require(ALLOWS_NULL_QUERIES)
+  public void testContains_nullNotContainedButQueriesSupported() {
+    assertFalse("contains(null) should return false",
+        collection.contains(null));
+  }
+
+  @CollectionFeature.Require(absent = ALLOWS_NULL_QUERIES)
+  public void testContains_nullNotContainedAndUnsupported() {
+    expectNullMissingWhenNullUnsupported(
+        "contains(null) should return false or throw");
+  }
+
+  @CollectionFeature.Require(ALLOWS_NULL_VALUES)
+  @CollectionSize.Require(absent = ZERO)
+  public void testContains_nonNullWhenNullContained() {
+    initCollectionWithNullElement();
+    assertFalse("contains(notPresent) should return false",
+        collection.contains(samples.e3));
+  }
+
+  @CollectionFeature.Require(ALLOWS_NULL_VALUES)
+  @CollectionSize.Require(absent = ZERO)
+  public void testContains_nullContained() {
+    initCollectionWithNullElement();
+    assertTrue("contains(null) should return true", collection.contains(null));
+  }
+
+  public void testContains_wrongType() {
+    try {
+      assertFalse("contains(wrongType) should return false or throw",
+          collection.contains(WrongType.VALUE));
+    } catch (ClassCastException tolerated) {
+    }
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionCreationTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionCreationTester.java
new file mode 100644
index 0000000..401a0f2
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionCreationTester.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+import com.google.common.collect.testing.AbstractCollectionTester;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+
+import java.lang.reflect.Method;
+
+/**
+ * A generic JUnit test which tests creation (typically through a constructor or
+ * static factory method) of a collection. Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.CollectionTestSuiteBuilder}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Chris Povirk
+ */
+public class CollectionCreationTester<E> extends AbstractCollectionTester<E> {
+  @CollectionFeature.Require(ALLOWS_NULL_VALUES)
+  @CollectionSize.Require(absent = ZERO)
+  public void testCreateWithNull_supported() {
+    E[] array = createArrayWithNullElement();
+    collection = getSubjectGenerator().create(array);
+    expectContents(array);
+  }
+
+  @CollectionFeature.Require(absent = ALLOWS_NULL_VALUES)
+  @CollectionSize.Require(absent = ZERO)
+  public void testCreateWithNull_unsupported() {
+    E[] array = createArrayWithNullElement();
+
+    try {
+      getSubjectGenerator().create(array);
+      fail("Creating a collection containing null should fail");
+    } catch (NullPointerException expected) {
+    }
+  }
+
+  /**
+   * Returns the {@link Method} instance for {@link
+   * #testCreateWithNull_unsupported()} so that tests can suppress it
+   * with {@code FeatureSpecificTestSuiteBuilder.suppressing()} until <a
+   * href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5045147">Sun
+   * bug 5045147</a> is fixed.
+   */
+  public static Method getCreateWithNullUnsupportedMethod() {
+    return Platform.getMethod(CollectionCreationTester.class, "testCreateWithNull_unsupported");
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionEqualsTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionEqualsTester.java
new file mode 100644
index 0000000..fe642fc
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionEqualsTester.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.AbstractCollectionTester;
+
+/**
+ * Tests {@link java.util.Collection#equals}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author George van den Driessche
+ */
+public class CollectionEqualsTester<E> extends AbstractCollectionTester<E> {
+  public void testEquals_self() {
+    assertTrue("An Object should be equal to itself.",
+        collection.equals(collection));
+  }
+
+  public void testEquals_null() {
+    //noinspection ObjectEqualsNull
+    assertFalse("An object should not be equal to null.",
+        collection.equals(null));
+  }
+
+  public void testEquals_notACollection() {
+    //noinspection EqualsBetweenInconvertibleTypes
+    assertFalse("A Collection should never equal an "
+        + "object that is not a Collection.",
+        collection.equals("huh?"));
+  }
+}
\ No newline at end of file
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionIsEmptyTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionIsEmptyTester.java
new file mode 100644
index 0000000..8d11f42
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionIsEmptyTester.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+import com.google.common.collect.testing.AbstractCollectionTester;
+import com.google.common.collect.testing.features.CollectionSize;
+
+/**
+ * A generic JUnit test which tests {@code isEmpty()} operations on a
+ * collection. Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.CollectionTestSuiteBuilder}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Kevin Bourrillion
+ */
+public class CollectionIsEmptyTester<E> extends AbstractCollectionTester<E> {
+  @CollectionSize.Require(ZERO)
+  public void testIsEmpty_yes() {
+    assertTrue("isEmpty() should return true", collection.isEmpty());
+  }
+
+  @CollectionSize.Require(absent = ZERO)
+  public void testIsEmpty_no() {
+    assertFalse("isEmpty() should return false", collection.isEmpty());
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionIteratorTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionIteratorTester.java
new file mode 100644
index 0000000..3e54cfc
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionIteratorTester.java
@@ -0,0 +1,162 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import static com.google.common.collect.testing.IteratorFeature.MODIFIABLE;
+import static com.google.common.collect.testing.IteratorFeature.UNMODIFIABLE;
+import static com.google.common.collect.testing.features.CollectionFeature.KNOWN_ORDER;
+import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_REMOVE;
+
+import com.google.common.collect.testing.AbstractCollectionTester;
+import com.google.common.collect.testing.Helpers;
+import com.google.common.collect.testing.IteratorFeature;
+import com.google.common.collect.testing.IteratorTester;
+import com.google.common.collect.testing.features.CollectionFeature;
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+import java.util.NoSuchElementException;
+import java.util.Set;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.CopyOnWriteArraySet;
+
+/**
+ * A generic JUnit test which tests {@code iterator} operations on a collection.
+ * Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.CollectionTestSuiteBuilder}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Chris Povirk
+ */
+public class CollectionIteratorTester<E> extends AbstractCollectionTester<E> {
+  public void testIterator() {
+    List<E> iteratorElements = new ArrayList<E>();
+    for (E element : collection) { // uses iterator()
+      iteratorElements.add(element);
+    }
+    Helpers.assertEqualIgnoringOrder(
+        Arrays.asList(createSamplesArray()), iteratorElements);
+  }
+
+  @CollectionFeature.Require(KNOWN_ORDER)
+  public void testIterationOrdering() {
+    List<E> iteratorElements = new ArrayList<E>();
+    for (E element : collection) { // uses iterator()
+      iteratorElements.add(element);
+    }
+    List<E> expected = Helpers.copyToList(getOrderedElements());
+    assertEquals("Different ordered iteration", expected, iteratorElements);
+  }
+
+  // TODO: switch to DerivedIteratorTestSuiteBuilder
+
+  @CollectionFeature.Require({KNOWN_ORDER, SUPPORTS_REMOVE})
+  public void testIterator_knownOrderRemoveSupported() {
+    runIteratorTest(MODIFIABLE, IteratorTester.KnownOrder.KNOWN_ORDER,
+        getOrderedElements());
+  }
+
+  @CollectionFeature.Require(value = KNOWN_ORDER, absent = SUPPORTS_REMOVE)
+  public void testIterator_knownOrderRemoveUnsupported() {
+    runIteratorTest(UNMODIFIABLE, IteratorTester.KnownOrder.KNOWN_ORDER,
+        getOrderedElements());
+  }
+
+  @CollectionFeature.Require(absent = KNOWN_ORDER, value = SUPPORTS_REMOVE)
+  public void testIterator_unknownOrderRemoveSupported() {
+    runIteratorTest(MODIFIABLE, IteratorTester.KnownOrder.UNKNOWN_ORDER,
+        getSampleElements());
+  }
+
+  @CollectionFeature.Require(absent = {KNOWN_ORDER, SUPPORTS_REMOVE})
+  public void testIterator_unknownOrderRemoveUnsupported() {
+    runIteratorTest(UNMODIFIABLE, IteratorTester.KnownOrder.UNKNOWN_ORDER,
+        getSampleElements());
+  }
+
+  private void runIteratorTest(Set<IteratorFeature> features,
+      IteratorTester.KnownOrder knownOrder, Iterable<E> elements) {
+    new IteratorTester<E>(Platform.collectionIteratorTesterNumIterations(), features, elements,
+        knownOrder) {
+      {
+        // TODO: don't set this universally
+        ignoreSunJavaBug6529795();
+      }
+
+      @Override protected Iterator<E> newTargetIterator() {
+        resetCollection();
+        return collection.iterator();
+      }
+
+      @Override protected void verify(List<E> elements) {
+        expectContents(elements);
+      }
+    }.test();
+  }
+
+  /**
+   * Returns the {@link Method} instance for
+   * {@link #testIterator_knownOrderRemoveSupported()} so that tests of
+   * {@link CopyOnWriteArraySet} and {@link CopyOnWriteArrayList} can suppress
+   * it with {@code FeatureSpecificTestSuiteBuilder.suppressing()} until <a
+   * href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6570575">Sun bug
+   * 6570575</a> is fixed.
+   */
+  public static Method getIteratorKnownOrderRemoveSupportedMethod() {
+    return Platform.getMethod(
+          CollectionIteratorTester.class, "testIterator_knownOrderRemoveSupported");
+  }
+
+  /**
+   * Returns the {@link Method} instance for
+   * {@link #testIterator_unknownOrderRemoveSupported()} so that tests of
+   * classes with unmodifiable iterators can suppress it.
+   */
+  public static Method getIteratorUnknownOrderRemoveSupportedMethod() {
+    return Platform.getMethod(
+        CollectionIteratorTester.class, "testIterator_unknownOrderRemoveSupported");
+  }
+
+  public void testIteratorNoSuchElementException() {
+    Iterator<E> iterator = collection.iterator();
+    while (iterator.hasNext()) {
+      iterator.next();
+    }
+
+    try {
+      iterator.next();
+      fail("iterator.next() should throw NoSuchElementException");
+    } catch (NoSuchElementException expected) {}
+  }
+
+  /**
+   * Returns the {@link Method} instance for
+   * {@link #testIterator_knownOrderRemoveUnsupported()} so that tests of
+   * {@code ArrayStack} can suppress it with
+   * {@code FeatureSpecificTestSuiteBuilder.suppressing()}. {@code ArrayStack}
+   * supports {@code remove()} on only the first element, and the iterator
+   * tester can't handle that.
+   */
+  public static Method getIteratorKnownOrderRemoveUnsupportedMethod() {
+    return Platform.getMethod(
+        CollectionIteratorTester.class, "testIterator_knownOrderRemoveUnsupported");
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionRemoveAllTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionRemoveAllTester.java
new file mode 100644
index 0000000..1005307
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionRemoveAllTester.java
@@ -0,0 +1,187 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_QUERIES;
+import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES;
+import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_REMOVE_ALL;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+import com.google.common.collect.testing.AbstractCollectionTester;
+import com.google.common.collect.testing.MinimalCollection;
+import com.google.common.collect.testing.WrongType;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+
+import java.util.Collections;
+
+/**
+ * A generic JUnit test which tests {@code removeAll} operations on a
+ * collection. Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.CollectionTestSuiteBuilder}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author George van den Driessche
+ * @author Chris Povirk
+ */
+@SuppressWarnings("unchecked") // too many "unchecked generic array creations"
+public class CollectionRemoveAllTester<E> extends AbstractCollectionTester<E> {
+  @CollectionFeature.Require(SUPPORTS_REMOVE_ALL)
+  public void testRemoveAll_emptyCollection() {
+    assertFalse("removeAll(emptyCollection) should return false",
+        collection.removeAll(MinimalCollection.of()));
+    expectUnchanged();
+  }
+
+  @CollectionFeature.Require(SUPPORTS_REMOVE_ALL)
+  public void testRemoveAll_nonePresent() {
+    assertFalse("removeAll(disjointCollection) should return false",
+        collection.removeAll(MinimalCollection.of(samples.e3)));
+    expectUnchanged();
+  }
+
+  @CollectionFeature.Require(SUPPORTS_REMOVE_ALL)
+  @CollectionSize.Require(absent = ZERO)
+  public void testRemoveAll_allPresent() {
+    assertTrue("removeAll(intersectingCollection) should return true",
+        collection.removeAll(MinimalCollection.of(samples.e0)));
+    expectMissing(samples.e0);
+  }
+
+  @CollectionFeature.Require(SUPPORTS_REMOVE_ALL)
+  @CollectionSize.Require(absent = ZERO)
+  public void testRemoveAll_somePresent() {
+    assertTrue("removeAll(intersectingCollection) should return true",
+        collection.removeAll(MinimalCollection.of(samples.e0, samples.e3)));
+    expectMissing(samples.e0);
+  }
+
+  /**
+   * Trigger the other.size() >= this.size() case in AbstractSet.removeAll().
+   */
+  @CollectionFeature.Require(SUPPORTS_REMOVE_ALL)
+  @CollectionSize.Require(absent = ZERO)
+  public void testRemoveAll_somePresentLargeCollectionToRemove() {
+    assertTrue("removeAll(largeIntersectingCollection) should return true",
+        collection.removeAll(MinimalCollection.of(
+            samples.e0, samples.e0, samples.e0,
+            samples.e3, samples.e3, samples.e3)));
+    expectMissing(samples.e0);
+  }
+
+  @CollectionFeature.Require(absent = SUPPORTS_REMOVE_ALL)
+  public void testRemoveAll_unsupportedEmptyCollection() {
+    try {
+      assertFalse("removeAll(emptyCollection) should return false or throw "
+          + "UnsupportedOperationException",
+        collection.removeAll(MinimalCollection.of()));
+    } catch (UnsupportedOperationException tolerated) {
+    }
+    expectUnchanged();
+  }
+
+  @CollectionFeature.Require(absent = SUPPORTS_REMOVE_ALL)
+  public void testRemoveAll_unsupportedNonePresent() {
+    try {
+      assertFalse("removeAll(disjointCollection) should return false or throw "
+          + "UnsupportedOperationException",
+        collection.removeAll(MinimalCollection.of(samples.e3)));
+    } catch (UnsupportedOperationException tolerated) {
+    }
+    expectUnchanged();
+  }
+
+  @CollectionFeature.Require(absent = SUPPORTS_REMOVE_ALL)
+  @CollectionSize.Require(absent = ZERO)
+  public void testRemoveAll_unsupportedPresent() {
+    try {
+      collection.removeAll(MinimalCollection.of(samples.e0));
+      fail("removeAll(intersectingCollection) should throw "
+          + "UnsupportedOperationException");
+    } catch (UnsupportedOperationException expected) {
+    }
+    expectUnchanged();
+    assertTrue(collection.contains(samples.e0));
+  }
+
+  /*
+   * AbstractCollection fails the removeAll(null) test when the subject
+   * collection is empty, but we'd still like to test removeAll(null) when we
+   * can. We split the test into empty and non-empty cases. This allows us to
+   * suppress only the former.
+   */
+
+  @CollectionFeature.Require(SUPPORTS_REMOVE_ALL)
+  @CollectionSize.Require(ZERO)
+  public void testRemoveAll_nullCollectionReferenceEmptySubject() {
+    try {
+      collection.removeAll(null);
+      // Returning successfully is not ideal, but tolerated.
+    } catch (NullPointerException expected) {
+    }
+  }
+
+  @CollectionFeature.Require(SUPPORTS_REMOVE_ALL)
+  @CollectionSize.Require(absent = ZERO)
+  public void testRemoveAll_nullCollectionReferenceNonEmptySubject() {
+    try {
+      collection.removeAll(null);
+      fail("removeAll(null) should throw NullPointerException");
+    } catch (NullPointerException expected) {
+    }
+  }
+
+  @CollectionFeature.Require(value = SUPPORTS_REMOVE_ALL,
+      absent = ALLOWS_NULL_QUERIES)
+  public void testRemoveAll_containsNullNo() {
+    MinimalCollection<?> containsNull = MinimalCollection.of((Object) null);
+    try {
+      assertFalse("removeAll(containsNull) should return false or throw",
+          collection.removeAll(containsNull));
+    } catch (NullPointerException tolerated) {
+    }
+    expectUnchanged();
+  }
+
+  @CollectionFeature.Require({SUPPORTS_REMOVE_ALL, ALLOWS_NULL_QUERIES})
+  public void testRemoveAll_containsNullNoButAllowed() {
+    MinimalCollection<?> containsNull = MinimalCollection.of((Object) null);
+    assertFalse("removeAll(containsNull) should return false",
+        collection.removeAll(containsNull));
+    expectUnchanged();
+  }
+
+  @CollectionFeature.Require({SUPPORTS_REMOVE_ALL, ALLOWS_NULL_VALUES})
+  @CollectionSize.Require(absent = ZERO)
+  public void testRemoveAll_containsNullYes() {
+    initCollectionWithNullElement();
+    assertTrue("removeAll(containsNull) should return true",
+        collection.removeAll(Collections.singleton(null)));
+    // TODO: make this work with MinimalCollection
+  }
+
+  @CollectionFeature.Require(SUPPORTS_REMOVE_ALL)
+  public void testRemoveAll_containsWrongType() {
+    try {
+      assertFalse("removeAll(containsWrongType) should return false or throw",
+          collection.removeAll(MinimalCollection.of(WrongType.VALUE)));
+    } catch (ClassCastException tolerated) {
+    }
+    expectUnchanged();
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionRemoveTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionRemoveTester.java
new file mode 100644
index 0000000..2d051bc
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionRemoveTester.java
@@ -0,0 +1,138 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_QUERIES;
+import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES;
+import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_REMOVE;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+import com.google.common.collect.testing.AbstractCollectionTester;
+import com.google.common.collect.testing.WrongType;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+
+import java.util.Iterator;
+
+/**
+ * A generic JUnit test which tests {@code remove} operations on a collection.
+ * Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.CollectionTestSuiteBuilder}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author George van den Driessche
+ */
+@SuppressWarnings("unchecked") // too many "unchecked generic array creations"
+public class CollectionRemoveTester<E> extends AbstractCollectionTester<E> {
+  @CollectionFeature.Require(SUPPORTS_REMOVE)
+  @CollectionSize.Require(absent = ZERO)
+  public void testRemove_present() {
+    int initialSize = collection.size();
+    assertTrue("remove(present) should return true",
+        collection.remove(samples.e0));
+    assertEquals("remove(present) should decrease a collection's size by one.",
+        initialSize - 1, collection.size());
+    expectMissing(samples.e0);
+  }
+
+  @CollectionFeature.Require(SUPPORTS_REMOVE)
+  public void testRemove_notPresent() {
+    assertFalse("remove(notPresent) should return false",
+        collection.remove(samples.e3));
+    expectUnchanged();
+  }
+
+  @CollectionFeature.Require({SUPPORTS_REMOVE, ALLOWS_NULL_VALUES})
+  @CollectionSize.Require(absent = ZERO)
+  public void testRemove_nullPresent() {
+    collection = getSubjectGenerator().create(createArrayWithNullElement());
+
+    int initialSize = collection.size();
+    assertTrue("remove(null) should return true", collection.remove(null));
+    assertEquals("remove(present) should decrease a collection's size by one.",
+        initialSize - 1, collection.size());
+    expectMissing((E) null);
+  }
+
+  @CollectionFeature.Require(absent = SUPPORTS_REMOVE)
+  @CollectionSize.Require(absent = ZERO)
+  public void testRemove_unsupported() {
+    try {
+      collection.remove(samples.e0);
+      fail("remove(present) should throw UnsupportedOperationException");
+    } catch (UnsupportedOperationException expected) {
+    }
+    expectUnchanged();
+    assertTrue("remove(present) should not remove the element",
+        collection.contains(samples.e0));
+  }
+
+  @CollectionFeature.Require(absent = SUPPORTS_REMOVE)
+  public void testRemove_unsupportedNotPresent() {
+    try {
+      assertFalse("remove(notPresent) should return false or throw "
+          + "UnsupportedOperationException",
+          collection.remove(samples.e3));
+    } catch (UnsupportedOperationException tolerated) {
+    }
+    expectUnchanged();
+    expectMissing(samples.e3);
+  }
+
+  @CollectionFeature.Require(
+      value = SUPPORTS_REMOVE,
+      absent = ALLOWS_NULL_QUERIES)
+  public void testRemove_nullNotSupported() {
+    try {
+      assertFalse("remove(null) should return false or throw "
+          + "NullPointerException",
+          collection.remove(null));
+    } catch (NullPointerException tolerated) {
+    }
+    expectUnchanged();
+  }
+
+  @CollectionFeature.Require({SUPPORTS_REMOVE, ALLOWS_NULL_QUERIES})
+  public void testRemove_nullAllowed() {
+    assertFalse("remove(null) should return false", collection.remove(null));
+    expectUnchanged();
+  }
+
+  @CollectionFeature.Require(absent = SUPPORTS_REMOVE)
+  @CollectionSize.Require(absent = ZERO)
+  public void testIteratorRemove_unsupported() {
+    Iterator<E> iterator = collection.iterator();
+    iterator.next();
+    try {
+      iterator.remove();
+      fail("iterator.remove() should throw UnsupportedOperationException");
+    } catch (UnsupportedOperationException expected) {
+    }
+    expectUnchanged();
+    assertTrue(collection.contains(samples.e0));
+  }
+
+  @CollectionFeature.Require(SUPPORTS_REMOVE)
+  public void testRemove_wrongType() {
+    try {
+      assertFalse(collection.remove(WrongType.VALUE));
+    } catch (ClassCastException tolerated) {
+    }
+    expectUnchanged();
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionRetainAllTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionRetainAllTester.java
new file mode 100644
index 0000000..fbfd0d8
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionRetainAllTester.java
@@ -0,0 +1,342 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES;
+import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_RETAIN_ALL;
+import static com.google.common.collect.testing.features.CollectionSize.ONE;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+import com.google.common.collect.testing.AbstractCollectionTester;
+import com.google.common.collect.testing.MinimalCollection;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * A generic JUnit test which tests {@code retainAll} operations on a
+ * collection. Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.CollectionTestSuiteBuilder}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Chris Povirk
+ */
+@SuppressWarnings("unchecked") // too many "unchecked generic array creations"
+public class CollectionRetainAllTester<E> extends AbstractCollectionTester<E> {
+
+  /**
+   * A collection of elements to retain, along with a description for use in
+   * failure messages.
+   */
+  private class Target {
+    private final Collection<E> toRetain;
+    private final String description;
+
+    private Target(Collection<E> toRetain, String description) {
+      this.toRetain = toRetain;
+      this.description = description;
+    }
+
+    @Override public String toString() {
+      return description;
+    }
+  }
+
+  private Target empty;
+  private Target disjoint;
+  private Target superset;
+  private Target nonEmptyProperSubset;
+  private Target sameElements;
+  private Target partialOverlap;
+  private Target containsDuplicates;
+  private Target nullSingleton;
+
+  @Override public void setUp() throws Exception {
+    super.setUp();
+
+    empty = new Target(emptyCollection(), "empty");
+    /*
+     * We test that nullSingleton.retainAll(disjointList) does NOT throw a
+     * NullPointerException when disjointList does not, so we can't use
+     * MinimalCollection, which throws NullPointerException on calls to
+     * contains(null).
+     */
+    List<E> disjointList = Arrays.asList(samples.e3, samples.e4);
+    disjoint
+        = new Target(disjointList, "disjoint");
+    superset
+        = new Target(MinimalCollection.of(
+            samples.e0, samples.e1, samples.e2, samples.e3, samples.e4),
+            "superset");
+    nonEmptyProperSubset
+        = new Target(MinimalCollection.of(samples.e1), "subset");
+    sameElements
+        = new Target(Arrays.asList(createSamplesArray()), "sameElements");
+    containsDuplicates = new Target(
+        MinimalCollection.of(samples.e0, samples.e0, samples.e3, samples.e3),
+        "containsDuplicates");
+    partialOverlap
+        = new Target(MinimalCollection.of(samples.e2, samples.e3),
+            "partialOverlap");
+    nullSingleton
+        = new Target(Collections.<E>singleton(null), "nullSingleton");
+  }
+
+  // retainAll(empty)
+
+  @CollectionFeature.Require(SUPPORTS_RETAIN_ALL)
+  @CollectionSize.Require(ZERO)
+  public void testRetainAll_emptyPreviouslyEmpty() {
+    expectReturnsFalse(empty);
+    expectUnchanged();
+  }
+
+  @CollectionFeature.Require(absent = SUPPORTS_RETAIN_ALL)
+  @CollectionSize.Require(ZERO)
+  public void testRetainAll_emptyPreviouslyEmptyUnsupported() {
+    expectReturnsFalseOrThrows(empty);
+    expectUnchanged();
+  }
+
+  @CollectionFeature.Require(SUPPORTS_RETAIN_ALL)
+  @CollectionSize.Require(absent = ZERO)
+  public void testRetainAll_emptyPreviouslyNonEmpty() {
+    expectReturnsTrue(empty);
+    expectContents();
+    expectMissing(samples.e0, samples.e1, samples.e2);
+  }
+
+  @CollectionFeature.Require(absent = SUPPORTS_RETAIN_ALL)
+  @CollectionSize.Require(absent = ZERO)
+  public void testRetainAll_emptyPreviouslyNonEmptyUnsupported() {
+    expectThrows(empty);
+    expectUnchanged();
+  }
+
+  // retainAll(disjoint)
+
+  @CollectionFeature.Require(SUPPORTS_RETAIN_ALL)
+  @CollectionSize.Require(ZERO)
+  public void testRetainAll_disjointPreviouslyEmpty() {
+    expectReturnsFalse(disjoint);
+    expectUnchanged();
+  }
+
+  @CollectionFeature.Require(absent = SUPPORTS_RETAIN_ALL)
+  @CollectionSize.Require(ZERO)
+  public void testRetainAll_disjointPreviouslyEmptyUnsupported() {
+    expectReturnsFalseOrThrows(disjoint);
+    expectUnchanged();
+  }
+
+  @CollectionFeature.Require(SUPPORTS_RETAIN_ALL)
+  @CollectionSize.Require(absent = ZERO)
+  public void testRetainAll_disjointPreviouslyNonEmpty() {
+    expectReturnsTrue(disjoint);
+    expectContents();
+    expectMissing(samples.e0, samples.e1, samples.e2);
+  }
+
+  @CollectionFeature.Require(absent = SUPPORTS_RETAIN_ALL)
+  @CollectionSize.Require(absent = ZERO)
+  public void testRetainAll_disjointPreviouslyNonEmptyUnsupported() {
+    expectThrows(disjoint);
+    expectUnchanged();
+  }
+
+  // retainAll(superset)
+
+  @CollectionFeature.Require(SUPPORTS_RETAIN_ALL)
+  public void testRetainAll_superset() {
+    expectReturnsFalse(superset);
+    expectUnchanged();
+  }
+
+  @CollectionFeature.Require(absent = SUPPORTS_RETAIN_ALL)
+  public void testRetainAll_supersetUnsupported() {
+    expectReturnsFalseOrThrows(superset);
+    expectUnchanged();
+  }
+
+  // retainAll(subset)
+
+  @CollectionFeature.Require(SUPPORTS_RETAIN_ALL)
+  @CollectionSize.Require(absent = {ZERO, ONE})
+  public void testRetainAll_subset() {
+    expectReturnsTrue(nonEmptyProperSubset);
+    expectContents(nonEmptyProperSubset.toRetain);
+  }
+
+  @CollectionFeature.Require(absent = SUPPORTS_RETAIN_ALL)
+  @CollectionSize.Require(absent = {ZERO, ONE})
+  public void testRetainAll_subsetUnsupported() {
+    expectThrows(nonEmptyProperSubset);
+    expectUnchanged();
+  }
+
+  // retainAll(sameElements)
+
+  @CollectionFeature.Require(SUPPORTS_RETAIN_ALL)
+  public void testRetainAll_sameElements() {
+    expectReturnsFalse(sameElements);
+    expectUnchanged();
+  }
+
+  @CollectionFeature.Require(absent = SUPPORTS_RETAIN_ALL)
+  public void testRetainAll_sameElementsUnsupported() {
+    expectReturnsFalseOrThrows(sameElements);
+    expectUnchanged();
+  }
+
+  // retainAll(partialOverlap)
+
+  @CollectionFeature.Require(SUPPORTS_RETAIN_ALL)
+  @CollectionSize.Require(absent = {ZERO, ONE})
+  public void testRetainAll_partialOverlap() {
+    expectReturnsTrue(partialOverlap);
+    expectContents(samples.e2);
+  }
+
+  @CollectionFeature.Require(absent = SUPPORTS_RETAIN_ALL)
+  @CollectionSize.Require(absent = {ZERO, ONE})
+  public void testRetainAll_partialOverlapUnsupported() {
+    expectThrows(partialOverlap);
+    expectUnchanged();
+  }
+
+  // retainAll(containsDuplicates)
+
+  @CollectionFeature.Require(SUPPORTS_RETAIN_ALL)
+  @CollectionSize.Require(ONE)
+  public void testRetainAll_containsDuplicatesSizeOne() {
+    expectReturnsFalse(containsDuplicates);
+    expectContents(samples.e0);
+  }
+
+  @CollectionFeature.Require(SUPPORTS_RETAIN_ALL)
+  @CollectionSize.Require(absent = {ZERO, ONE})
+  public void testRetainAll_containsDuplicatesSizeSeveral() {
+    expectReturnsTrue(containsDuplicates);
+    expectContents(samples.e0);
+  }
+
+  // retainAll(nullSingleton)
+
+  @CollectionFeature.Require(SUPPORTS_RETAIN_ALL)
+  @CollectionSize.Require(ZERO)
+  public void testRetainAll_nullSingletonPreviouslyEmpty() {
+    expectReturnsFalse(nullSingleton);
+    expectUnchanged();
+  }
+
+  @CollectionFeature.Require(SUPPORTS_RETAIN_ALL)
+  @CollectionSize.Require(absent = ZERO)
+  public void testRetainAll_nullSingletonPreviouslyNonEmpty() {
+    expectReturnsTrue(nullSingleton);
+    expectContents();
+  }
+
+  @CollectionFeature.Require({SUPPORTS_RETAIN_ALL, ALLOWS_NULL_VALUES})
+  @CollectionSize.Require(ONE)
+  public void testRetainAll_nullSingletonPreviouslySingletonWithNull() {
+    initCollectionWithNullElement();
+    expectReturnsFalse(nullSingleton);
+    expectContents(createArrayWithNullElement());
+  }
+
+  @CollectionFeature.Require({SUPPORTS_RETAIN_ALL, ALLOWS_NULL_VALUES})
+  @CollectionSize.Require(absent = {ZERO, ONE})
+  public void testRetainAll_nullSingletonPreviouslySeveralWithNull() {
+    initCollectionWithNullElement();
+    expectReturnsTrue(nullSingleton);
+    expectContents(nullSingleton.toRetain);
+  }
+
+  // nullSingleton.retainAll()
+
+  @CollectionFeature.Require({SUPPORTS_RETAIN_ALL, ALLOWS_NULL_VALUES})
+  @CollectionSize.Require(absent = ZERO)
+  public void testRetainAll_containsNonNullWithNull() {
+    initCollectionWithNullElement();
+    expectReturnsTrue(disjoint);
+    expectContents();
+  }
+
+  // retainAll(null)
+
+  /*
+   * AbstractCollection fails the retainAll(null) test when the subject
+   * collection is empty, but we'd still like to test retainAll(null) when we
+   * can. We split the test into empty and non-empty cases. This allows us to
+   * suppress only the former.
+   */
+
+  @CollectionFeature.Require(SUPPORTS_RETAIN_ALL)
+  @CollectionSize.Require(ZERO)
+  public void testRetainAll_nullCollectionReferenceEmptySubject() {
+    try {
+      collection.retainAll(null);
+      // Returning successfully is not ideal, but tolerated.
+    } catch (NullPointerException expected) {
+    }
+  }
+
+  @CollectionFeature.Require(SUPPORTS_RETAIN_ALL)
+  @CollectionSize.Require(absent = ZERO)
+  public void testRetainAll_nullCollectionReferenceNonEmptySubject() {
+    try {
+      collection.retainAll(null);
+      fail("retainAll(null) should throw NullPointerException");
+    } catch (NullPointerException expected) {
+    }
+  }
+
+  private void expectReturnsTrue(Target target) {
+    String message
+        = Platform.format("retainAll(%s) should return true", target);
+    assertTrue(message, collection.retainAll(target.toRetain));
+  }
+
+  private void expectReturnsFalse(Target target) {
+    String message
+        = Platform.format("retainAll(%s) should return false", target);
+    assertFalse(message, collection.retainAll(target.toRetain));
+  }
+
+  private void expectThrows(Target target) {
+    try {
+      collection.retainAll(target.toRetain);
+      String message = Platform.format("retainAll(%s) should throw", target);
+      fail(message);
+    } catch (UnsupportedOperationException expected) {
+    }
+  }
+
+  private void expectReturnsFalseOrThrows(Target target) {
+    String message
+        = Platform.format("retainAll(%s) should return false or throw", target);
+    try {
+      assertFalse(message, collection.retainAll(target.toRetain));
+    } catch (UnsupportedOperationException tolerated) {
+    }
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionSizeTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionSizeTester.java
new file mode 100644
index 0000000..f7fa87b
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionSizeTester.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.AbstractCollectionTester;
+
+/**
+ * A generic JUnit test which tests {@code size()} operations on a collection.
+ * Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.CollectionTestSuiteBuilder}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Kevin Bourrillion
+ */
+public class CollectionSizeTester<E> extends AbstractCollectionTester<E> {
+  public void testSize() {
+    assertEquals("size():", getNumElements(), collection.size());
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionToArrayTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionToArrayTester.java
new file mode 100644
index 0000000..3d65969
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionToArrayTester.java
@@ -0,0 +1,198 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import static com.google.common.collect.testing.features.CollectionFeature.KNOWN_ORDER;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+import com.google.common.collect.testing.AbstractCollectionTester;
+import com.google.common.collect.testing.Helpers;
+import com.google.common.collect.testing.WrongType;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+
+import java.lang.reflect.Method;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * A generic JUnit test which tests {@code toArray()} operations on a
+ * collection. Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.CollectionTestSuiteBuilder}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Kevin Bourrillion
+ * @author Chris Povirk
+ */
+public class CollectionToArrayTester<E> extends AbstractCollectionTester<E> {
+  public void testToArray_noArgs() {
+    Object[] array = collection.toArray();
+    expectArrayContentsAnyOrder(createSamplesArray(), array);
+  }
+
+  /**
+   * {@link Collection#toArray(Object[])} says: "Note that
+   * <tt>toArray(new Object[0])</tt> is identical in function to
+   * <tt>toArray()</tt>."
+   *
+   * <p>For maximum effect, the collection under test should be created from an
+   * element array of a type other than {@code Object[]}.
+   */
+  public void testToArray_isPlainObjectArray() {
+    Object[] array = collection.toArray();
+    assertEquals(Object[].class, array.getClass());
+  }
+
+  public void testToArray_emptyArray() {
+    E[] empty = getSubjectGenerator().createArray(0);
+    E[] array = collection.toArray(empty);
+    assertEquals("toArray(emptyT[]) should return an array of type T",
+        empty.getClass(), array.getClass());
+    assertEquals("toArray(emptyT[]).length:", getNumElements(), array.length);
+    expectArrayContentsAnyOrder(createSamplesArray(), array);
+  }
+
+  @CollectionFeature.Require(KNOWN_ORDER)
+  public void testToArray_emptyArray_ordered() {
+    E[] empty = getSubjectGenerator().createArray(0);
+    E[] array = collection.toArray(empty);
+    assertEquals("toArray(emptyT[]) should return an array of type T",
+        empty.getClass(), array.getClass());
+    assertEquals("toArray(emptyT[]).length:", getNumElements(), array.length);
+    expectArrayContentsInOrder(getOrderedElements(), array);
+  }
+
+  public void testToArray_emptyArrayOfObject() {
+    Object[] in = new Object[0];
+    Object[] array = collection.toArray(in);
+    assertEquals("toArray(emptyObject[]) should return an array of type Object",
+        Object[].class, array.getClass());
+    assertEquals("toArray(emptyObject[]).length",
+        getNumElements(), array.length);
+    expectArrayContentsAnyOrder(createSamplesArray(), array);
+  }
+
+  public void testToArray_rightSizedArray() {
+    E[] array = getSubjectGenerator().createArray(getNumElements());
+    assertSame("toArray(sameSizeE[]) should return the given array",
+        array, collection.toArray(array));
+    expectArrayContentsAnyOrder(createSamplesArray(), array);
+  }
+
+  @CollectionFeature.Require(KNOWN_ORDER)
+  public void testToArray_rightSizedArray_ordered() {
+    E[] array = getSubjectGenerator().createArray(getNumElements());
+    assertSame("toArray(sameSizeE[]) should return the given array",
+        array, collection.toArray(array));
+    expectArrayContentsInOrder(getOrderedElements(), array);
+  }
+
+  public void testToArray_rightSizedArrayOfObject() {
+    Object[] array = new Object[getNumElements()];
+    assertSame("toArray(sameSizeObject[]) should return the given array",
+        array, collection.toArray(array));
+    expectArrayContentsAnyOrder(createSamplesArray(), array);
+  }
+
+  @CollectionFeature.Require(KNOWN_ORDER)
+  public void testToArray_rightSizedArrayOfObject_ordered() {
+    Object[] array = new Object[getNumElements()];
+    assertSame("toArray(sameSizeObject[]) should return the given array",
+        array, collection.toArray(array));
+    expectArrayContentsInOrder(getOrderedElements(), array);
+  }
+
+  public void testToArray_oversizedArray() {
+    E[] array = getSubjectGenerator().createArray(getNumElements() + 2);
+    array[getNumElements()] = samples.e3;
+    array[getNumElements() + 1] = samples.e3;
+    assertSame("toArray(overSizedE[]) should return the given array",
+        array, collection.toArray(array));
+
+    List<E> subArray = Arrays.asList(array).subList(0, getNumElements());
+    E[] expectedSubArray = createSamplesArray();
+    for (int i = 0; i < getNumElements(); i++) {
+      assertTrue(
+          "toArray(overSizedE[]) should contain element " + expectedSubArray[i],
+          subArray.contains(expectedSubArray[i]));
+    }
+    assertNull("The array element "
+        + "immediately following the end of the collection should be nulled",
+        array[getNumElements()]);
+    // array[getNumElements() + 1] might or might not have been nulled
+  }
+
+  @CollectionFeature.Require(KNOWN_ORDER)
+  public void testToArray_oversizedArray_ordered() {
+    E[] array = getSubjectGenerator().createArray(getNumElements() + 2);
+    array[getNumElements()] = samples.e3;
+    array[getNumElements() + 1] = samples.e3;
+    assertSame("toArray(overSizedE[]) should return the given array",
+        array, collection.toArray(array));
+
+    List<E> expected = getOrderedElements();
+    for (int i = 0; i < getNumElements(); i++) {
+      assertEquals(expected.get(i), array[i]);
+    }
+    assertNull("The array element "
+        + "immediately following the end of the collection should be nulled",
+        array[getNumElements()]);
+    // array[getNumElements() + 1] might or might not have been nulled
+  }
+
+  @CollectionSize.Require(absent = ZERO)
+  public void testToArray_emptyArrayOfWrongTypeForNonEmptyCollection() {
+    try {
+      WrongType[] array = new WrongType[0];
+      collection.toArray(array);
+      fail("toArray(notAssignableTo[]) should throw");
+    } catch (ArrayStoreException expected) {
+    }
+  }
+
+  @CollectionSize.Require(ZERO)
+  public void testToArray_emptyArrayOfWrongTypeForEmptyCollection() {
+    WrongType[] array = new WrongType[0];
+    assertSame(
+        "toArray(sameSizeNotAssignableTo[]) should return the given array",
+        array, collection.toArray(array));
+  }
+
+  private void expectArrayContentsAnyOrder(Object[] expected, Object[] actual) {
+    Helpers.assertEqualIgnoringOrder(
+        Arrays.asList(expected), Arrays.asList(actual));
+  }
+
+  private void expectArrayContentsInOrder(List<E> expected, Object[] actual) {
+    assertEquals("toArray() ordered contents: ",
+        expected, Arrays.asList(actual));
+  }
+
+  /**
+   * Returns the {@link Method} instance for
+   * {@link #testToArray_isPlainObjectArray()} so that tests of
+   * {@link Arrays#asList(Object[])} can suppress it with {@code
+   * FeatureSpecificTestSuiteBuilder.suppressing()} until <a
+   * href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6260652">Sun bug
+   * 6260652</a> is fixed.
+   */
+  public static Method getToArrayIsPlainObjectArrayMethod() {
+    return Platform.getMethod(CollectionToArrayTester.class, "testToArray_isPlainObjectArray");
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionToStringTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionToStringTester.java
new file mode 100644
index 0000000..120a112
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionToStringTester.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import static com.google.common.collect.testing.features.CollectionFeature.KNOWN_ORDER;
+import static com.google.common.collect.testing.features.CollectionFeature.NON_STANDARD_TOSTRING;
+import static com.google.common.collect.testing.features.CollectionSize.ONE;
+import static com.google.common.collect.testing.features.CollectionSize.SEVERAL;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+import com.google.common.collect.testing.AbstractCollectionTester;
+import com.google.common.collect.testing.Helpers;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+
+/**
+ * A generic JUnit test which tests {@code toString()} operations on a
+ * collection. Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.CollectionTestSuiteBuilder}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Kevin Bourrillion
+ */
+public class CollectionToStringTester<E> extends AbstractCollectionTester<E> {
+  public void testToString_minimal() {
+    assertNotNull("toString() should not return null",
+        collection.toString());
+  }
+
+  @CollectionSize.Require(ZERO)
+  @CollectionFeature.Require(absent = NON_STANDARD_TOSTRING)
+  public void testToString_size0() {
+    assertEquals("emptyCollection.toString should return []", "[]",
+        collection.toString());
+  }
+
+  @CollectionSize.Require(ONE)
+  @CollectionFeature.Require(absent = NON_STANDARD_TOSTRING)
+  public void testToString_size1() {
+    assertEquals("size1Collection.toString should return [{element}]",
+        "[" + samples.e0 + "]", collection.toString());
+  }
+
+  @CollectionSize.Require(SEVERAL)
+  @CollectionFeature.Require(
+      value = KNOWN_ORDER, absent = NON_STANDARD_TOSTRING)
+  public void testToString_sizeSeveral() {
+    String expected = Helpers.copyToList(getOrderedElements()).toString();
+    assertEquals("collection.toString() incorrect",
+        expected, collection.toString());
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/ListAddAllAtIndexTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/ListAddAllAtIndexTester.java
new file mode 100644
index 0000000..be64b0d
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/ListAddAllAtIndexTester.java
@@ -0,0 +1,183 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES;
+import static com.google.common.collect.testing.features.CollectionSize.ONE;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+import static com.google.common.collect.testing.features.ListFeature.SUPPORTS_ADD_ALL_WITH_INDEX;
+import static com.google.common.collect.testing.features.ListFeature.SUPPORTS_ADD_WITH_INDEX;
+import static java.util.Collections.singletonList;
+
+import com.google.common.collect.testing.MinimalCollection;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.ListFeature;
+
+import java.util.List;
+
+/**
+ * A generic JUnit test which tests {@code addAll(int, Collection)} operations
+ * on a list. Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.ListTestSuiteBuilder}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Chris Povirk
+ */
+@SuppressWarnings("unchecked") // too many "unchecked generic array creations"
+public class ListAddAllAtIndexTester<E> extends AbstractListTester<E> {
+  @ListFeature.Require(SUPPORTS_ADD_ALL_WITH_INDEX)
+  @CollectionSize.Require(absent = ZERO)
+  public void testAddAllAtIndex_supportedAllPresent() {
+    assertTrue("addAll(n, allPresent) should return true",
+        getList().addAll(0, MinimalCollection.of(samples.e0)));
+    expectAdded(0, samples.e0);
+  }
+
+  @ListFeature.Require(absent = SUPPORTS_ADD_ALL_WITH_INDEX)
+  @CollectionSize.Require(absent = ZERO)
+  public void testAddAllAtIndex_unsupportedAllPresent() {
+    try {
+      getList().addAll(0, MinimalCollection.of(samples.e0));
+      fail("addAll(n, allPresent) should throw");
+    } catch (UnsupportedOperationException expected) {
+    }
+    expectUnchanged();
+  }
+
+  @ListFeature.Require(SUPPORTS_ADD_ALL_WITH_INDEX)
+  @CollectionSize.Require(absent = ZERO)
+  public void testAddAllAtIndex_supportedSomePresent() {
+    assertTrue("addAll(n, allPresent) should return true",
+        getList().addAll(0, MinimalCollection.of(samples.e0, samples.e3)));
+    expectAdded(0, samples.e0, samples.e3);
+  }
+
+  @ListFeature.Require(absent = SUPPORTS_ADD_ALL_WITH_INDEX)
+  @CollectionSize.Require(absent = ZERO)
+  public void testAddAllAtIndex_unsupportedSomePresent() {
+    try {
+      getList().addAll(0, MinimalCollection.of(samples.e0, samples.e3));
+      fail("addAll(n, allPresent) should throw");
+    } catch (UnsupportedOperationException expected) {
+    }
+    expectUnchanged();
+    expectMissing(samples.e3);
+  }
+
+  @ListFeature.Require(SUPPORTS_ADD_ALL_WITH_INDEX)
+  public void testAddAllAtIndex_supportedNothing() {
+    assertFalse("addAll(n, nothing) should return false",
+        getList().addAll(0, emptyCollection()));
+    expectUnchanged();
+  }
+
+  @ListFeature.Require(absent = SUPPORTS_ADD_ALL_WITH_INDEX)
+  public void testAddAllAtIndex_unsupportedNothing() {
+    try {
+      assertFalse("addAll(n, nothing) should return false or throw",
+          getList().addAll(0, emptyCollection()));
+    } catch (UnsupportedOperationException tolerated) {
+    }
+    expectUnchanged();
+  }
+
+  @ListFeature.Require(SUPPORTS_ADD_ALL_WITH_INDEX)
+  public void testAddAllAtIndex_withDuplicates() {
+    MinimalCollection<E> elementsToAdd
+        = MinimalCollection.of(samples.e0, samples.e1, samples.e0, samples.e1);
+    assertTrue("addAll(n, hasDuplicates) should return true",
+        getList().addAll(0, elementsToAdd));
+    expectAdded(0, samples.e0, samples.e1, samples.e0, samples.e1);
+  }
+
+  @ListFeature.Require(SUPPORTS_ADD_ALL_WITH_INDEX)
+  @CollectionFeature.Require(ALLOWS_NULL_VALUES)
+  public void testAddAllAtIndex_nullSupported() {
+    List<E> containsNull = singletonList(null);
+    assertTrue("addAll(n, containsNull) should return true",
+        getList().addAll(0, containsNull));
+    /*
+     * We need (E) to force interpretation of null as the single element of a
+     * varargs array, not the array itself
+     */
+    expectAdded(0, (E) null);
+  }
+
+  @ListFeature.Require(SUPPORTS_ADD_ALL_WITH_INDEX)
+  @CollectionFeature.Require(absent = ALLOWS_NULL_VALUES)
+  public void testAddAllAtIndex_nullUnsupported() {
+    List<E> containsNull = singletonList(null);
+    try {
+      getList().addAll(0, containsNull);
+      fail("addAll(n, containsNull) should throw");
+    } catch (NullPointerException expected) {
+    }
+    expectUnchanged();
+    expectNullMissingWhenNullUnsupported(
+        "Should not contain null after unsupported addAll(n, containsNull)");
+  }
+
+  @ListFeature.Require(SUPPORTS_ADD_ALL_WITH_INDEX)
+  @CollectionSize.Require(absent = {ZERO, ONE})
+  public void testAddAllAtIndex_middle() {
+    assertTrue("addAll(middle, disjoint) should return true",
+        getList().addAll(getNumElements() / 2, createDisjointCollection()));
+    expectAdded(getNumElements() / 2, createDisjointCollection());
+  }
+
+  @ListFeature.Require(SUPPORTS_ADD_ALL_WITH_INDEX)
+  @CollectionSize.Require(absent = ZERO)
+  public void testAddAllAtIndex_end() {
+    assertTrue("addAll(end, disjoint) should return true",
+        getList().addAll(getNumElements(), createDisjointCollection()));
+    expectAdded(getNumElements(), createDisjointCollection());
+  }
+
+  @ListFeature.Require(SUPPORTS_ADD_ALL_WITH_INDEX)
+  public void testAddAllAtIndex_nullCollectionReference() {
+    try {
+      getList().addAll(0, null);
+      fail("addAll(n, null) should throw");
+    } catch (NullPointerException expected) {
+    }
+    expectUnchanged();
+  }
+
+  @ListFeature.Require(SUPPORTS_ADD_WITH_INDEX)
+  public void testAddAllAtIndex_negative() {
+    try {
+      getList().addAll(-1, MinimalCollection.of(samples.e3));
+      fail("addAll(-1, e) should throw");
+    } catch (IndexOutOfBoundsException expected) {
+    }
+    expectUnchanged();
+    expectMissing(samples.e3);
+  }
+
+  @ListFeature.Require(SUPPORTS_ADD_WITH_INDEX)
+  public void testAddAllAtIndex_tooLarge() {
+    try {
+      getList().addAll(getNumElements() + 1, MinimalCollection.of(samples.e3));
+      fail("addAll(size + 1, e) should throw");
+    } catch (IndexOutOfBoundsException expected) {
+    }
+    expectUnchanged();
+    expectMissing(samples.e3);
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/ListAddAllTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/ListAddAllTester.java
new file mode 100644
index 0000000..3e9cb49
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/ListAddAllTester.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_ADD_ALL;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+import com.google.common.collect.testing.MinimalCollection;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+
+/**
+ * A generic JUnit test which tests {@code addAll(Collection)} operations on a
+ * list. Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.ListTestSuiteBuilder}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Chris Povirk
+ */
+@SuppressWarnings("unchecked") // too many "unchecked generic array creations"
+public class ListAddAllTester<E> extends AbstractListTester<E> {
+  @CollectionFeature.Require(SUPPORTS_ADD_ALL)
+  @CollectionSize.Require(absent = ZERO)
+  public void testAddAll_supportedAllPresent() {
+    assertTrue("addAll(allPresent) should return true",
+        getList().addAll(MinimalCollection.of(samples.e0)));
+    expectAdded(samples.e0);
+  }
+
+  @CollectionFeature.Require(absent = SUPPORTS_ADD_ALL)
+  @CollectionSize.Require(absent = ZERO)
+  public void testAddAll_unsupportedAllPresent() {
+    try {
+      getList().addAll(MinimalCollection.of(samples.e0));
+      fail("addAll(allPresent) should throw");
+    } catch (UnsupportedOperationException expected) {
+    }
+    expectUnchanged();
+  }
+
+  @CollectionFeature.Require(SUPPORTS_ADD_ALL)
+  public void testAddAll_withDuplicates() {
+    MinimalCollection<E> elementsToAdd
+        = MinimalCollection.of(samples.e0, samples.e1, samples.e0, samples.e1);
+    assertTrue("addAll(hasDuplicates) should return true",
+        getList().addAll(elementsToAdd));
+    expectAdded(samples.e0, samples.e1, samples.e0, samples.e1);
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/ListAddAtIndexTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/ListAddAtIndexTester.java
new file mode 100644
index 0000000..9721393
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/ListAddAtIndexTester.java
@@ -0,0 +1,145 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES;
+import static com.google.common.collect.testing.features.CollectionSize.ONE;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+import static com.google.common.collect.testing.features.ListFeature.SUPPORTS_ADD_WITH_INDEX;
+
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.ListFeature;
+
+import java.lang.reflect.Method;
+
+/**
+ * A generic JUnit test which tests {@code add(int, Object)} operations on a
+ * list. Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.ListTestSuiteBuilder}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Chris Povirk
+ */
+@SuppressWarnings("unchecked") // too many "unchecked generic array creations"
+public class ListAddAtIndexTester<E> extends AbstractListTester<E> {
+  @ListFeature.Require(SUPPORTS_ADD_WITH_INDEX)
+  @CollectionSize.Require(absent = ZERO)
+  public void testAddAtIndex_supportedPresent() {
+    getList().add(0, samples.e0);
+    expectAdded(0, samples.e0);
+  }
+
+  @ListFeature.Require(absent = SUPPORTS_ADD_WITH_INDEX)
+  @CollectionSize.Require(absent = ZERO)
+  /*
+   * absent = ZERO isn't required, since unmodList.add() must
+   * throw regardless, but it keeps the method name accurate.
+   */
+  public void testAddAtIndex_unsupportedPresent() {
+    try {
+      getList().add(0, samples.e0);
+      fail("add(n, present) should throw");
+    } catch (UnsupportedOperationException expected) {
+    }
+    expectUnchanged();
+  }
+
+  @ListFeature.Require(SUPPORTS_ADD_WITH_INDEX)
+  public void testAddAtIndex_supportedNotPresent() {
+    getList().add(0, samples.e3);
+    expectAdded(0, samples.e3);
+  }
+
+  @ListFeature.Require(absent = SUPPORTS_ADD_WITH_INDEX)
+  public void testAddAtIndex_unsupportedNotPresent() {
+    try {
+      getList().add(0, samples.e3);
+      fail("add(n, notPresent) should throw");
+    } catch (UnsupportedOperationException expected) {
+    }
+    expectUnchanged();
+    expectMissing(samples.e3);
+  }
+
+  @ListFeature.Require(SUPPORTS_ADD_WITH_INDEX)
+  @CollectionSize.Require(absent = {ZERO, ONE})
+  public void testAddAtIndex_middle() {
+    getList().add(getNumElements() / 2, samples.e3);
+    expectAdded(getNumElements() / 2, samples.e3);
+  }
+
+  @ListFeature.Require(SUPPORTS_ADD_WITH_INDEX)
+  @CollectionSize.Require(absent = ZERO)
+  public void testAddAtIndex_end() {
+    getList().add(getNumElements(), samples.e3);
+    expectAdded(getNumElements(), samples.e3);
+  }
+
+  @ListFeature.Require(SUPPORTS_ADD_WITH_INDEX)
+  @CollectionFeature.Require(ALLOWS_NULL_VALUES)
+  public void testAddAtIndex_nullSupported() {
+    getList().add(0, null);
+    expectAdded(0, (E) null);
+  }
+
+  @ListFeature.Require(SUPPORTS_ADD_WITH_INDEX)
+  @CollectionFeature.Require(absent = ALLOWS_NULL_VALUES)
+  public void testAddAtIndex_nullUnsupported() {
+    try {
+      getList().add(0, null);
+      fail("add(n, null) should throw");
+    } catch (NullPointerException expected) {
+    }
+    expectUnchanged();
+    expectNullMissingWhenNullUnsupported(
+        "Should not contain null after unsupported add(n, null)");
+  }
+
+  @ListFeature.Require(SUPPORTS_ADD_WITH_INDEX)
+  public void testAddAtIndex_negative() {
+    try {
+      getList().add(-1, samples.e3);
+      fail("add(-1, e) should throw");
+    } catch (IndexOutOfBoundsException expected) {
+    }
+    expectUnchanged();
+    expectMissing(samples.e3);
+  }
+
+  @ListFeature.Require(SUPPORTS_ADD_WITH_INDEX)
+  public void testAddAtIndex_tooLarge() {
+    try {
+      getList().add(getNumElements() + 1, samples.e3);
+      fail("add(size + 1, e) should throw");
+    } catch (IndexOutOfBoundsException expected) {
+    }
+    expectUnchanged();
+    expectMissing(samples.e3);
+  }
+
+  /**
+   * Returns the {@link Method} instance for
+   * {@link #testAddAtIndex_nullSupported()} so that tests can suppress it. See
+   * {@link CollectionAddTester#getAddNullSupportedMethod()} for details.
+   */
+  public static Method getAddNullSupportedMethod() {
+    return Platform.getMethod(
+        ListAddAtIndexTester.class, "testAddAtIndex_nullSupported");
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/ListAddTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/ListAddTester.java
new file mode 100644
index 0000000..0fc8dd0
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/ListAddTester.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES;
+import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_ADD;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+import com.google.common.collect.testing.Helpers;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+
+import java.lang.reflect.Method;
+import java.util.List;
+
+/**
+ * A generic JUnit test which tests {@code add(Object)} operations on a list.
+ * Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.ListTestSuiteBuilder}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Chris Povirk
+ */
+@SuppressWarnings("unchecked") // too many "unchecked generic array creations"
+public class ListAddTester<E> extends AbstractListTester<E> {
+  @CollectionFeature.Require(SUPPORTS_ADD)
+  @CollectionSize.Require(absent = ZERO)
+  public void testAdd_supportedPresent() {
+    assertTrue("add(present) should return true", getList().add(samples.e0));
+    expectAdded(samples.e0);
+  }
+
+  @CollectionFeature.Require(absent = SUPPORTS_ADD)
+  @CollectionSize.Require(absent = ZERO)
+  /*
+   * absent = ZERO isn't required, since unmodList.add() must
+   * throw regardless, but it keeps the method name accurate.
+   */
+  public void testAdd_unsupportedPresent() {
+    try {
+      getList().add(samples.e0);
+      fail("add(present) should throw");
+    } catch (UnsupportedOperationException expected) {
+    }
+  }
+
+  @CollectionFeature.Require(value = {SUPPORTS_ADD, ALLOWS_NULL_VALUES})
+  @CollectionSize.Require(absent = ZERO)
+  public void testAdd_supportedNullPresent() {
+    E[] array = createArrayWithNullElement();
+    collection = getSubjectGenerator().create(array);
+    assertTrue("add(nullPresent) should return true", getList().add(null));
+
+    List<E> expected = Helpers.copyToList(array);
+    expected.add(null);
+    expectContents(expected);
+  }
+
+  /**
+   * Returns the {@link Method} instance for
+   * {@link #testAdd_supportedNullPresent()} so that tests can suppress it. See
+   * {@link CollectionAddTester#getAddNullSupportedMethod()} for details.
+   */
+  public static Method getAddSupportedNullPresentMethod() {
+    return Platform.getMethod(ListAddTester.class, "testAdd_supportedNullPresent");
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/ListCreationTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/ListCreationTester.java
new file mode 100644
index 0000000..601eea4
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/ListCreationTester.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import static com.google.common.collect.testing.features.CollectionFeature.REJECTS_DUPLICATES_AT_CREATION;
+import static com.google.common.collect.testing.features.CollectionSize.ONE;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+
+/**
+ * A generic JUnit test which tests creation (typically through a constructor or
+ * static factory method) of a list. Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.ListTestSuiteBuilder}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Chris Povirk
+ */
+public class ListCreationTester<E> extends AbstractListTester<E> {
+  @CollectionFeature.Require(absent = REJECTS_DUPLICATES_AT_CREATION)
+  @CollectionSize.Require(absent = {ZERO, ONE})
+  public void testCreateWithDuplicates() {
+    E[] array = createSamplesArray();
+    array[1] = samples.e0;
+    collection = getSubjectGenerator().create(array);
+
+    expectContents(array);
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/ListEqualsTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/ListEqualsTester.java
new file mode 100644
index 0000000..9e7e13e
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/ListEqualsTester.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES;
+
+import com.google.common.collect.testing.MinimalSet;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * Tests {@link List#equals}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author George van den Driessche
+ */
+public class ListEqualsTester<E> extends AbstractListTester<E> {
+  public void testEquals_otherListWithSameElements() {
+    assertTrue(
+        "A List should equal any other List containing the same elements.",
+        getList().equals(new ArrayList<E>(getSampleElements())));
+  }
+
+  @CollectionSize.Require(absent = CollectionSize.ZERO)
+  public void testEquals_otherListWithDifferentElements() {
+    ArrayList<E> other = new ArrayList<E>(getSampleElements());
+    other.set(other.size() / 2, getSubjectGenerator().samples().e3);
+    assertFalse(
+        "A List should not equal another List containing different elements.",
+        getList().equals(other));
+  }
+
+  @CollectionSize.Require(absent = CollectionSize.ZERO)
+  public void testEquals_otherListContainingNull() {
+    List<E> other = new ArrayList<E>(getSampleElements());
+    other.set(other.size() / 2, null);
+    assertFalse("Two Lists should not be equal if exactly one of them has "
+        + "null at a given index.",
+        getList().equals(other));
+  }
+
+  @CollectionSize.Require(absent = CollectionSize.ZERO)
+  @CollectionFeature.Require(ALLOWS_NULL_VALUES)
+  public void testEquals_containingNull() {
+    ArrayList<E> elements = new ArrayList<E>(getSampleElements());
+    elements.set(elements.size() / 2, null);
+    collection = getSubjectGenerator().create(elements.toArray());
+    List<E> other = new ArrayList<E>(getSampleElements());
+    assertFalse("Two Lists should not be equal if exactly one of them has "
+        + "null at a given index.",
+        getList().equals(other));
+  }
+
+  @CollectionSize.Require(absent = CollectionSize.ZERO)
+  public void testEquals_shorterList() {
+    Collection<E> fewerElements = getSampleElements(getNumElements() - 1);
+    assertFalse("Lists of different sizes should not be equal.",
+        getList().equals(new ArrayList<E>(fewerElements)));
+  }
+
+  public void testEquals_longerList() {
+    Collection<E> moreElements = getSampleElements(getNumElements() + 1);
+    assertFalse("Lists of different sizes should not be equal.",
+        getList().equals(new ArrayList<E>(moreElements)));
+  }
+
+  public void testEquals_set() {
+    assertFalse("A List should never equal a Set.",
+        getList().equals(MinimalSet.from(getList())));
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/ListGetTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/ListGetTester.java
new file mode 100644
index 0000000..340e0cb
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/ListGetTester.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+/**
+ * A generic JUnit test which tests {@code get()} operations on a list. Can't be
+ * invoked directly; please see
+ * {@link com.google.common.collect.testing.ListTestSuiteBuilder}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Chris Povirk
+ */
+public class ListGetTester<E> extends AbstractListTester<E> {
+  public void testGet_valid() {
+    // This calls get() on each index and checks the result:
+    expectContents(createSamplesArray());
+  }
+
+  public void testGet_negative() {
+    try {
+      getList().get(-1);
+      fail("get(-1) should throw");
+    } catch (IndexOutOfBoundsException expected) {
+    }
+  }
+
+  public void testGet_tooLarge() {
+    try {
+      getList().get(getNumElements());
+      fail("get(size) should throw");
+    } catch (IndexOutOfBoundsException expected) {
+    }
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/ListHashCodeTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/ListHashCodeTester.java
new file mode 100644
index 0000000..f7f3291
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/ListHashCodeTester.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import java.lang.reflect.Method;
+
+/**
+ * Tests {@link java.util.List#hashCode}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author George van den Driessche
+ */
+public class ListHashCodeTester<E> extends AbstractListTester<E> {
+  public void testHashCode() {
+    int expectedHashCode = 1;
+    for (E element : getSampleElements()) {
+      expectedHashCode = 31 * expectedHashCode +
+          ((element == null) ? 0 : element.hashCode());
+    }
+    assertEquals(
+        "A List's hashCode() should be computed from those of its elements.",
+        expectedHashCode, getList().hashCode());
+  }
+
+  /**
+   * Returns the {@link Method} instance for {@link #testHashCode()} so that
+   * list tests on unhashable objects can suppress it with
+   * {@code FeatureSpecificTestSuiteBuilder.suppressing()}.
+   */
+  public static Method getHashCodeMethod() {
+    return Platform.getMethod(ListHashCodeTester.class, "testHashCode");
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/ListIndexOfTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/ListIndexOfTester.java
new file mode 100644
index 0000000..4c96c19
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/ListIndexOfTester.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import static com.google.common.collect.testing.features.CollectionFeature.REJECTS_DUPLICATES_AT_CREATION;
+import static com.google.common.collect.testing.features.CollectionSize.ONE;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+
+/**
+ * A generic JUnit test which tests {@code indexOf()} operations on a list.
+ * Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.ListTestSuiteBuilder}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Chris Povirk
+ */
+public class ListIndexOfTester<E> extends AbstractListIndexOfTester<E> {
+  @Override protected int find(Object o) {
+    return getList().indexOf(o);
+  }
+
+  @Override protected String getMethodName() {
+    return "indexOf";
+  }
+
+  @CollectionFeature.Require(absent = REJECTS_DUPLICATES_AT_CREATION)
+  @CollectionSize.Require(absent = {ZERO, ONE})
+  public void testIndexOf_duplicate() {
+    E[] array = createSamplesArray();
+    array[getNumElements() / 2] = samples.e0;
+    collection = getSubjectGenerator().create(array);
+    assertEquals("indexOf(duplicate) should return index of first occurrence",
+        0, getList().indexOf(samples.e0));
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/ListLastIndexOfTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/ListLastIndexOfTester.java
new file mode 100644
index 0000000..a3f9812
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/ListLastIndexOfTester.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import static com.google.common.collect.testing.features.CollectionFeature.REJECTS_DUPLICATES_AT_CREATION;
+import static com.google.common.collect.testing.features.CollectionSize.ONE;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+
+/**
+ * A generic JUnit test which tests {@code lastIndexOf()} operations on a list.
+ * Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.ListTestSuiteBuilder}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Chris Povirk
+ */
+public class ListLastIndexOfTester<E> extends AbstractListIndexOfTester<E> {
+  @Override protected int find(Object o) {
+    return getList().lastIndexOf(o);
+  }
+
+  @Override protected String getMethodName() {
+    return "lastIndexOf";
+  }
+
+  @CollectionFeature.Require(absent = REJECTS_DUPLICATES_AT_CREATION)
+  @CollectionSize.Require(absent = {ZERO, ONE})
+  public void testLastIndexOf_duplicate() {
+    E[] array = createSamplesArray();
+    array[getNumElements() / 2] = samples.e0;
+    collection = getSubjectGenerator().create(array);
+    assertEquals(
+        "lastIndexOf(duplicate) should return index of last occurrence",
+        getNumElements() / 2, getList().lastIndexOf(samples.e0));
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/ListListIteratorTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/ListListIteratorTester.java
new file mode 100644
index 0000000..c8c8d6f
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/ListListIteratorTester.java
@@ -0,0 +1,131 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import static com.google.common.collect.testing.IteratorFeature.MODIFIABLE;
+import static com.google.common.collect.testing.IteratorFeature.UNMODIFIABLE;
+import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_REMOVE;
+import static com.google.common.collect.testing.features.ListFeature.SUPPORTS_ADD_WITH_INDEX;
+import static com.google.common.collect.testing.features.ListFeature.SUPPORTS_SET;
+import static com.google.common.collect.testing.testers.Platform.listListIteratorTesterNumIterations;
+import static java.util.Collections.singleton;
+
+import com.google.common.collect.testing.Helpers;
+import com.google.common.collect.testing.IteratorFeature;
+import com.google.common.collect.testing.ListIteratorTester;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.ListFeature;
+
+import java.lang.reflect.Method;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Set;
+import java.util.concurrent.CopyOnWriteArraySet;
+
+/**
+ * A generic JUnit test which tests {@code listIterator} operations on a list.
+ * Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.ListTestSuiteBuilder}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Chris Povirk
+ * @author Kevin Bourrillion
+ */
+public class ListListIteratorTester<E> extends AbstractListTester<E> {
+  // TODO: switch to DerivedIteratorTestSuiteBuilder
+
+  @CollectionFeature.Require(absent = SUPPORTS_REMOVE)
+  @ListFeature.Require(absent = {SUPPORTS_SET, SUPPORTS_ADD_WITH_INDEX})
+  public void testListIterator_unmodifiable() {
+    runListIteratorTest(UNMODIFIABLE);
+  }
+
+  /*
+   * For now, we don't cope with testing this when the list supports only some
+   * modification operations.
+   */
+  @CollectionFeature.Require(SUPPORTS_REMOVE)
+  @ListFeature.Require({SUPPORTS_SET, SUPPORTS_ADD_WITH_INDEX})
+  public void testListIterator_fullyModifiable() {
+    runListIteratorTest(MODIFIABLE);
+  }
+
+  private void runListIteratorTest(Set<IteratorFeature> features) {
+    new ListIteratorTester<E>(
+        listListIteratorTesterNumIterations(), singleton(samples.e4), features,
+        Helpers.copyToList(getSampleElements()), 0) {
+      {
+        // TODO: don't set this universally
+        stopTestingWhenAddThrowsException();
+      }
+
+      @Override protected ListIterator<E> newTargetIterator() {
+        resetCollection();
+        return getList().listIterator();
+      }
+
+      @Override protected void verify(List<E> elements) {
+        expectContents(elements);
+      }
+    }.test();
+  }
+
+  public void testListIterator_tooLow() {
+    try {
+      getList().listIterator(-1);
+      fail();
+    } catch (IndexOutOfBoundsException expected) {
+    }
+  }
+
+  public void testListIterator_tooHigh() {
+    try {
+      getList().listIterator(getNumElements() + 1);
+      fail();
+    } catch (IndexOutOfBoundsException expected) {
+    }
+  }
+
+  public void testListIterator_atSize() {
+    getList().listIterator(getNumElements());
+    // TODO: run the iterator through ListIteratorTester
+  }
+
+  /**
+   * Returns the {@link Method} instance for
+   * {@link #testListIterator_fullyModifiable()} so that tests of
+   * {@link CopyOnWriteArraySet} can suppress it with
+   * {@code FeatureSpecificTestSuiteBuilder.suppressing()} until <a
+   * href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6570575">Sun bug
+   * 6570575</a> is fixed.
+   */
+  public static Method getListIteratorFullyModifiableMethod() {
+    return Platform.getMethod(
+        ListListIteratorTester.class, "testListIterator_fullyModifiable");
+  }
+
+  /**
+   * Returns the {@link Method} instance for
+   * {@link #testListIterator_unmodifiable()} so that it can be suppressed in
+   * GWT tests.
+   */
+  public static Method getListIteratorUnmodifiableMethod() {
+    return Platform.getMethod(
+        ListListIteratorTester.class, "testListIterator_unmodifiable");
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/ListRemoveAllTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/ListRemoveAllTester.java
new file mode 100644
index 0000000..faeec46
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/ListRemoveAllTester.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_REMOVE_ALL;
+import static com.google.common.collect.testing.features.CollectionSize.ONE;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+import com.google.common.collect.testing.MinimalCollection;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+
+/**
+ * A generic JUnit test which tests removeAll operations on a list. Can't be
+ * invoked directly; please see
+ * {@link com.google.common.collect.testing.ListTestSuiteBuilder}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author George van den Driessche
+ */
+@SuppressWarnings("unchecked") // too many "unchecked generic array creations"
+public class ListRemoveAllTester<E> extends AbstractListTester<E> {
+  @CollectionFeature.Require(SUPPORTS_REMOVE_ALL)
+  @CollectionSize.Require(absent = {ZERO, ONE})
+  public void testRemoveAll_duplicate() {
+    ArrayWithDuplicate<E> arrayAndDuplicate = createArrayWithDuplicateElement();
+    collection = getSubjectGenerator().create(arrayAndDuplicate.elements);
+    E duplicate = arrayAndDuplicate.duplicate;
+
+    assertTrue("removeAll(intersectingCollection) should return true",
+        getList().removeAll(MinimalCollection.of(duplicate)));
+    assertFalse("after removeAll(e), a collection should not contain e even " +
+        "if it initially contained e more than once.",
+        getList().contains(duplicate));
+  }
+
+  // All other cases are covered by CollectionRemoveAllTester.
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/ListRemoveAtIndexTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/ListRemoveAtIndexTester.java
new file mode 100644
index 0000000..cb37c67
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/ListRemoveAtIndexTester.java
@@ -0,0 +1,96 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import static com.google.common.collect.testing.features.CollectionSize.ONE;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+import static com.google.common.collect.testing.features.ListFeature.SUPPORTS_REMOVE_WITH_INDEX;
+
+import com.google.common.collect.testing.Helpers;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.ListFeature;
+
+import java.util.List;
+
+/**
+ * A generic JUnit test which tests {@code remove(int)} operations on a list.
+ * Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.ListTestSuiteBuilder}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Chris Povirk
+ */
+public class ListRemoveAtIndexTester<E> extends AbstractListTester<E> {
+  @ListFeature.Require(absent = SUPPORTS_REMOVE_WITH_INDEX)
+  @CollectionSize.Require(absent = ZERO)
+  public void testRemoveAtIndex_unsupported() {
+    try {
+      getList().remove(0);
+      fail("remove(i) should throw");
+    } catch (UnsupportedOperationException expected) {
+    }
+    expectUnchanged();
+  }
+
+  @ListFeature.Require(SUPPORTS_REMOVE_WITH_INDEX)
+  public void testRemoveAtIndex_negative() {
+    try {
+      getList().remove(-1);
+      fail("remove(-1) should throw");
+    } catch (IndexOutOfBoundsException expected) {
+    }
+    expectUnchanged();
+  }
+
+  @ListFeature.Require(SUPPORTS_REMOVE_WITH_INDEX)
+  public void testRemoveAtIndex_tooLarge() {
+    try {
+      getList().remove(getNumElements());
+      fail("remove(size) should throw");
+    } catch (IndexOutOfBoundsException expected) {
+    }
+    expectUnchanged();
+  }
+
+  @ListFeature.Require(SUPPORTS_REMOVE_WITH_INDEX)
+  @CollectionSize.Require(absent = ZERO)
+  public void testRemoveAtIndex_first() {
+    runRemoveTest(0);
+  }
+
+  @ListFeature.Require(SUPPORTS_REMOVE_WITH_INDEX)
+  @CollectionSize.Require(absent = {ZERO, ONE})
+  public void testRemoveAtIndex_middle() {
+    runRemoveTest(getNumElements() / 2);
+  }
+
+  @ListFeature.Require(SUPPORTS_REMOVE_WITH_INDEX)
+  @CollectionSize.Require(absent = ZERO)
+  public void testRemoveAtIndex_last() {
+    runRemoveTest(getNumElements() - 1);
+  }
+
+  private void runRemoveTest(int index) {
+    assertEquals(Platform.format(
+        "remove(%d) should return the element at index %d", index, index),
+        getList().get(index), getList().remove(index));
+    List<E> expected = Helpers.copyToList(createSamplesArray());
+    expected.remove(index);
+    expectContents(expected);
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/ListRemoveTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/ListRemoveTester.java
new file mode 100644
index 0000000..0094928
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/ListRemoveTester.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_REMOVE;
+import static com.google.common.collect.testing.features.CollectionSize.ONE;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+
+/**
+ * A generic JUnit test which tests {@code remove(Object)} operations on a list.
+ * Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.ListTestSuiteBuilder}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author George van den Driessche
+ */
+public class ListRemoveTester<E> extends AbstractListTester<E> {
+  @CollectionFeature.Require(SUPPORTS_REMOVE)
+  @CollectionSize.Require(absent = {ZERO, ONE})
+  public void testRemove_duplicate() {
+    ArrayWithDuplicate<E> arrayAndDuplicate = createArrayWithDuplicateElement();
+    collection = getSubjectGenerator().create(arrayAndDuplicate.elements);
+    E duplicate = arrayAndDuplicate.duplicate;
+
+    int firstIndex = getList().indexOf(duplicate);
+    int initialSize = getList().size();
+    assertTrue("remove(present) should return true",
+        getList().remove(duplicate));
+    assertTrue("After remove(duplicate), a list should still contain "
+        + "the duplicate element", getList().contains(duplicate));
+    assertFalse("remove(duplicate) should remove the first instance of the "
+        + "duplicate element in the list",
+        firstIndex == getList().indexOf(duplicate));
+    assertEquals("remove(present) should decrease the size of a list by one.",
+        initialSize - 1, getList().size());
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/ListRetainAllTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/ListRetainAllTester.java
new file mode 100644
index 0000000..2ede664
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/ListRetainAllTester.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_RETAIN_ALL;
+import static com.google.common.collect.testing.features.CollectionSize.ONE;
+import static com.google.common.collect.testing.features.CollectionSize.SEVERAL;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+import com.google.common.collect.testing.MinimalCollection;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+
+/**
+ * A generic JUnit test which tests {@code retainAll} operations on a list.
+ * Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.ListTestSuiteBuilder}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Chris Povirk
+ */
+public class ListRetainAllTester<E> extends AbstractListTester<E> {
+  @CollectionFeature.Require(SUPPORTS_RETAIN_ALL)
+  @CollectionSize.Require(absent = {ZERO, ONE})
+  public void testRetainAll_duplicatesKept() {
+    E[] array = createSamplesArray();
+    array[1] = samples.e0;
+    collection = getSubjectGenerator().create(array);
+    assertFalse("containsDuplicates.retainAll(superset) should return false",
+        collection.retainAll(MinimalCollection.of(createSamplesArray())));
+    expectContents(array);
+  }
+
+  @SuppressWarnings("unchecked")
+  @CollectionFeature.Require(SUPPORTS_RETAIN_ALL)
+  @CollectionSize.Require(SEVERAL)
+  public void testRetainAll_duplicatesRemoved() {
+    E[] array = createSamplesArray();
+    array[1] = samples.e0;
+    collection = getSubjectGenerator().create(array);
+    assertTrue("containsDuplicates.retainAll(subset) should return true",
+        collection.retainAll(MinimalCollection.of(samples.e2)));
+    expectContents(samples.e2);
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/ListSetTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/ListSetTester.java
new file mode 100644
index 0000000..2b3b7b0
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/ListSetTester.java
@@ -0,0 +1,151 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+import static com.google.common.collect.testing.features.ListFeature.SUPPORTS_SET;
+
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.ListFeature;
+
+import java.lang.reflect.Method;
+
+/**
+ * A generic JUnit test which tests {@code set()} operations on a list. Can't be
+ * invoked directly; please see
+ * {@link com.google.common.collect.testing.ListTestSuiteBuilder}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author George van den Driessche
+ */
+public class ListSetTester<E> extends AbstractListTester<E> {
+  @ListFeature.Require(SUPPORTS_SET)
+  @CollectionSize.Require(absent = ZERO)
+  public void testSet() {
+    doTestSet(samples.e3);
+  }
+
+  @CollectionSize.Require(absent = ZERO)
+  @CollectionFeature.Require(ALLOWS_NULL_VALUES)
+  @ListFeature.Require(SUPPORTS_SET)
+  public void testSet_null() {
+    doTestSet(null);
+  }
+
+  @CollectionSize.Require(absent = ZERO)
+  @CollectionFeature.Require(ALLOWS_NULL_VALUES)
+  @ListFeature.Require(SUPPORTS_SET)
+  public void testSet_replacingNull() {
+    E[] elements = createSamplesArray();
+    int i = aValidIndex();
+    elements[i] = null;
+    collection = getSubjectGenerator().create(elements);
+
+    doTestSet(samples.e3);
+  }
+
+  private void doTestSet(E newValue) {
+    int index = aValidIndex();
+    E initialValue = getList().get(index);
+    assertEquals("set(i, x) should return the old element at position i.",
+        initialValue, getList().set(index, newValue));
+    assertEquals("After set(i, x), get(i) should return x",
+        newValue, getList().get(index));
+    assertEquals("set() should not change the size of a list.",
+        getNumElements(), getList().size());
+  }
+
+  @ListFeature.Require(SUPPORTS_SET)
+  public void testSet_indexTooLow() {
+    try {
+      getList().set(-1, samples.e3);
+      fail("set(-1) should throw IndexOutOfBoundsException");
+    } catch (IndexOutOfBoundsException expected) {
+    }
+    expectUnchanged();
+  }
+
+  @ListFeature.Require(SUPPORTS_SET)
+  public void testSet_indexTooHigh() {
+    int index = getNumElements();
+    try {
+      getList().set(index, samples.e3);
+      fail("set(size) should throw IndexOutOfBoundsException");
+    } catch (IndexOutOfBoundsException expected) {
+    }
+    expectUnchanged();
+  }
+
+  @CollectionSize.Require(absent = ZERO)
+  @ListFeature.Require(absent = SUPPORTS_SET)
+  public void testSet_unsupported() {
+    try {
+      getList().set(aValidIndex(), samples.e3);
+      fail("set() should throw UnsupportedOperationException");
+    } catch (UnsupportedOperationException expected) {
+    }
+    expectUnchanged();
+  }
+
+  @CollectionSize.Require(ZERO)
+  @ListFeature.Require(absent = SUPPORTS_SET)
+  public void testSet_unsupportedByEmptyList() {
+    try {
+      getList().set(0, samples.e3);
+      fail("set() should throw UnsupportedOperationException "
+          + "or IndexOutOfBoundsException");
+    } catch (UnsupportedOperationException tolerated) {
+    } catch (IndexOutOfBoundsException tolerated) {
+    }
+    expectUnchanged();
+  }
+
+  @CollectionSize.Require(absent = ZERO)
+  @ListFeature.Require(SUPPORTS_SET)
+  @CollectionFeature.Require(absent = ALLOWS_NULL_VALUES)
+  public void testSet_nullUnsupported() {
+    try {
+      getList().set(aValidIndex(), null);
+      fail("set(null) should throw NullPointerException");
+    } catch (NullPointerException expected) {
+    }
+    expectUnchanged();
+  }
+
+  private int aValidIndex() {
+    return getList().size() / 2;
+  }
+
+  /**
+   * Returns the {@link java.lang.reflect.Method} instance for
+   * {@link #testSet_null()} so that tests of {@link
+   * java.util.Collections#checkedCollection(java.util.Collection, Class)} can
+   * suppress it with {@code FeatureSpecificTestSuiteBuilder.suppressing()}
+   * until <a
+   * href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6409434">Sun bug
+   * 6409434</a> is fixed. It's unclear whether nulls were to be permitted or
+   * forbidden, but presumably the eventual fix will be to permit them, as it
+   * seems more likely that code would depend on that behavior than on the
+   * other. Thus, we say the bug is in set(), which fails to support null.
+   */
+  public static Method getSetNullSupportedMethod() {
+    return Platform.getMethod(ListSetTester.class, "testSet_null");
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/ListSubListTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/ListSubListTester.java
new file mode 100644
index 0000000..7ba68ba
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/ListSubListTester.java
@@ -0,0 +1,344 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import static com.google.common.collect.testing.features.CollectionSize.ONE;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+import static com.google.common.collect.testing.features.ListFeature.SUPPORTS_ADD_WITH_INDEX;
+import static com.google.common.collect.testing.features.ListFeature.SUPPORTS_REMOVE_WITH_INDEX;
+import static com.google.common.collect.testing.features.ListFeature.SUPPORTS_SET;
+import static java.util.Collections.emptyList;
+
+import com.google.common.collect.testing.Helpers;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.ListFeature;
+
+import java.lang.reflect.Method;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+/**
+ * A generic JUnit test which tests {@code subList()} operations on a list.
+ * Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.ListTestSuiteBuilder}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Chris Povirk
+ */
+@SuppressWarnings("unchecked") // too many "unchecked generic array creations"
+public class ListSubListTester<E> extends AbstractListTester<E> {
+  public void testSubList_startNegative() {
+    try {
+      getList().subList(-1, 0);
+      fail("subList(-1, 0) should throw");
+    } catch (IndexOutOfBoundsException expected) {
+    }
+  }
+
+  public void testSubList_endTooLarge() {
+    try {
+      getList().subList(0, getNumElements() + 1);
+      fail("subList(0, size + 1) should throw");
+    } catch (IndexOutOfBoundsException expected) {
+    }
+  }
+
+  public void testSubList_startGreaterThanEnd() {
+    try {
+      getList().subList(1, 0);
+      fail("subList(1, 0) should throw");
+    } catch (IndexOutOfBoundsException expected) {
+    } catch (IllegalArgumentException expected) {
+      /*
+       * The subList() docs claim that this should be an
+       * IndexOutOfBoundsException, but many JDK implementations throw
+       * IllegalArgumentException:
+       * http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4506427
+       */
+    }
+  }
+
+  public void testSubList_empty() {
+    assertEquals("subList(0, 0) should be empty",
+        emptyList(), getList().subList(0, 0));
+  }
+
+  public void testSubList_entireList() {
+    assertEquals("subList(0, size) should be equal to the original list",
+        getList(), getList().subList(0, getNumElements()));
+  }
+
+  @ListFeature.Require(SUPPORTS_REMOVE_WITH_INDEX)
+  @CollectionSize.Require(absent = ZERO)
+  public void testSubList_subListRemoveAffectsOriginal() {
+    List<E> subList = getList().subList(0, 1);
+    subList.remove(0);
+    List<E> expected =
+        Arrays.asList(createSamplesArray()).subList(1, getNumElements());
+    expectContents(expected);
+  }
+
+  @ListFeature.Require(SUPPORTS_ADD_WITH_INDEX)
+  public void testSubList_subListAddAffectsOriginal() {
+    List<E> subList = getList().subList(0, 0);
+    subList.add(samples.e3);
+    expectAdded(0, samples.e3);
+  }
+
+  @ListFeature.Require(SUPPORTS_SET)
+  @CollectionSize.Require(absent = ZERO)
+  public void testSubList_subListSetAffectsOriginal() {
+    List<E> subList = getList().subList(0, 1);
+    subList.set(0, samples.e3);
+    List<E> expected = Helpers.copyToList(createSamplesArray());
+    expected.set(0, samples.e3);
+    expectContents(expected);
+  }
+
+  @ListFeature.Require(SUPPORTS_SET)
+  @CollectionSize.Require(absent = ZERO)
+  public void testSubList_originalListSetAffectsSubList() {
+    List<E> subList = getList().subList(0, 1);
+    getList().set(0, samples.e3);
+    assertEquals("A set() call to a list after a sublist has been created "
+        + "should be reflected in the sublist",
+        Collections.singletonList(samples.e3), subList);
+  }
+
+  @ListFeature.Require(SUPPORTS_REMOVE_WITH_INDEX)
+  @CollectionSize.Require(absent = {ZERO, ONE})
+  public void testSubList_subListRemoveAffectsOriginalLargeList() {
+    List<E> subList = getList().subList(1, 3);
+    subList.remove(samples.e2);
+    List<E> expected = Helpers.copyToList(createSamplesArray());
+    expected.remove(2);
+    expectContents(expected);
+  }
+
+  @ListFeature.Require(SUPPORTS_ADD_WITH_INDEX)
+  @CollectionSize.Require(absent = {ZERO, ONE})
+  public void testSubList_subListAddAtIndexAffectsOriginalLargeList() {
+    List<E> subList = getList().subList(2, 3);
+    subList.add(0, samples.e3);
+    expectAdded(2, samples.e3);
+  }
+
+  @ListFeature.Require(SUPPORTS_SET)
+  @CollectionSize.Require(absent = {ZERO, ONE})
+  public void testSubList_subListSetAffectsOriginalLargeList() {
+    List<E> subList = getList().subList(1, 2);
+    subList.set(0, samples.e3);
+    List<E> expected = Helpers.copyToList(createSamplesArray());
+    expected.set(1, samples.e3);
+    expectContents(expected);
+  }
+
+  @ListFeature.Require(SUPPORTS_SET)
+  @CollectionSize.Require(absent = {ZERO, ONE})
+  public void testSubList_originalListSetAffectsSubListLargeList() {
+    List<E> subList = getList().subList(1, 3);
+    getList().set(1, samples.e3);
+    assertEquals("A set() call to a list after a sublist has been created "
+        + "should be reflected in the sublist",
+        Arrays.asList(samples.e3, samples.e2), subList);
+  }
+
+  public void testSubList_ofSubListEmpty() {
+    List<E> subList = getList().subList(0, 0).subList(0, 0);
+    assertEquals("subList(0, 0).subList(0, 0) should be an empty list",
+        emptyList(), subList);
+  }
+
+  @CollectionSize.Require(absent = {ZERO, ONE})
+  public void testSubList_ofSubListNonEmpty() {
+    List<E> subList = getList().subList(0, 2).subList(1, 2);
+    assertEquals("subList(0, 2).subList(1, 2) "
+        + "should be a single-element list of the element at index 1",
+        Collections.singletonList(samples.e1), subList);
+  }
+
+  @CollectionSize.Require(absent = {ZERO})
+  public void testSubList_size() {
+    List<E> list = getList();
+    int size = getNumElements();
+    assertEquals(list.subList(0, size).size(),
+                 size);
+    assertEquals(list.subList(0, size - 1).size(),
+                 size - 1);
+    assertEquals(list.subList(1, size).size(),
+                 size - 1);
+    assertEquals(list.subList(size, size).size(),
+                 0);
+    assertEquals(list.subList(0, 0).size(),
+                 0);
+  }
+
+  @CollectionSize.Require(absent = {ZERO})
+  public void testSubList_isEmpty() {
+    List<E> list = getList();
+    int size = getNumElements();
+    for (List<E> subList : Arrays.asList(
+        list.subList(0, size),
+        list.subList(0, size - 1),
+        list.subList(1, size),
+        list.subList(0, 0),
+        list.subList(size, size))) {
+      assertEquals(subList.isEmpty(), subList.size() == 0);
+    }
+  }
+
+  @CollectionSize.Require(absent = {ZERO, ONE})
+  public void testSubList_get() {
+    List<E> list = getList();
+    int size = getNumElements();
+    List<E> copy = list.subList(0, size);
+    List<E> head = list.subList(0, size - 1);
+    List<E> tail = list.subList(1, size);
+    assertEquals(list.get(0), copy.get(0));
+    assertEquals(list.get(size - 1), copy.get(size - 1));
+    assertEquals(list.get(1), tail.get(0));
+    assertEquals(list.get(size - 1), tail.get(size - 2));
+    assertEquals(list.get(0), head.get(0));
+    assertEquals(list.get(size - 2), head.get(size - 2));
+    for (List<E> subList : Arrays.asList(copy, head, tail)) {
+      for (int index : Arrays.asList(-1, subList.size())) {
+        try {
+          subList.get(index);
+          fail("expected IndexOutOfBoundsException");
+        } catch (IndexOutOfBoundsException expected) {
+        }
+      }
+    }
+  }
+
+  @CollectionSize.Require(absent = {ZERO, ONE})
+  public void testSubList_contains() {
+    List<E> list = getList();
+    int size = getNumElements();
+    List<E> copy = list.subList(0, size);
+    List<E> head = list.subList(0, size - 1);
+    List<E> tail = list.subList(1, size);
+    assertTrue(copy.contains(list.get(0)));
+    assertTrue(head.contains(list.get(0)));
+    assertTrue(tail.contains(list.get(1)));
+    // The following assumes all elements are distinct.
+    assertTrue(copy.contains(list.get(size - 1)));
+    assertTrue(head.contains(list.get(size - 2)));
+    assertTrue(tail.contains(list.get(size - 1)));
+    assertFalse(head.contains(list.get(size - 1)));
+    assertFalse(tail.contains(list.get(0)));
+  }
+
+  @CollectionSize.Require(absent = {ZERO, ONE})
+  public void testSubList_indexOf() {
+    List<E> list = getList();
+    int size = getNumElements();
+    List<E> copy = list.subList(0, size);
+    List<E> head = list.subList(0, size - 1);
+    List<E> tail = list.subList(1, size);
+    assertEquals(copy.indexOf(list.get(0)),
+                 0);
+    assertEquals(head.indexOf(list.get(0)),
+                 0);
+    assertEquals(tail.indexOf(list.get(1)),
+                 0);
+    // The following assumes all elements are distinct.
+    assertEquals(copy.indexOf(list.get(size - 1)),
+                 size - 1);
+    assertEquals(head.indexOf(list.get(size - 2)),
+                 size - 2);
+    assertEquals(tail.indexOf(list.get(size - 1)),
+                 size - 2);
+    assertEquals(head.indexOf(list.get(size - 1)),
+                 -1);
+    assertEquals(tail.indexOf(list.get(0)),
+                 -1);
+  }
+
+  @CollectionSize.Require(absent = {ZERO, ONE})
+  public void testSubList_lastIndexOf() {
+    List<E> list = getList();
+    int size = list.size();
+    List<E> copy = list.subList(0, size);
+    List<E> head = list.subList(0, size - 1);
+    List<E> tail = list.subList(1, size);
+    assertEquals(copy.lastIndexOf(list.get(size - 1)),
+                 size - 1);
+    assertEquals(head.lastIndexOf(list.get(size - 2)),
+                 size - 2);
+    assertEquals(tail.lastIndexOf(list.get(size - 1)),
+                 size - 2);
+    // The following assumes all elements are distinct.
+    assertEquals(copy.lastIndexOf(list.get(0)),
+                 0);
+    assertEquals(head.lastIndexOf(list.get(0)),
+                 0);
+    assertEquals(tail.lastIndexOf(list.get(1)),
+                 0);
+    assertEquals(head.lastIndexOf(list.get(size - 1)),
+                 -1);
+    assertEquals(tail.lastIndexOf(list.get(0)),
+                 -1);
+  }
+
+  /**
+   * Returns the {@link Method} instance for
+   * {@link #testSubList_originalListSetAffectsSubList()} so that tests
+   * of {@link CopyOnWriteArrayList} can suppress them with
+   * {@code FeatureSpecificTestSuiteBuilder.suppressing()} until <a
+   * href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6570631">Sun bug
+   * 6570631</a> is fixed.
+   */
+  public static Method getSubListOriginalListSetAffectsSubListMethod() {
+    return Platform
+        .getMethod(ListSubListTester.class, "testSubList_originalListSetAffectsSubList");
+  }
+
+  /**
+   * Returns the {@link Method} instance for
+   * {@link #testSubList_originalListSetAffectsSubListLargeList()} ()} so that
+   * tests of {@link CopyOnWriteArrayList} can suppress them with
+   * {@code FeatureSpecificTestSuiteBuilder.suppressing()} until <a
+   * href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6570631">Sun bug
+   * 6570631</a> is fixed.
+   */
+  public static Method
+      getSubListOriginalListSetAffectsSubListLargeListMethod() {
+    return Platform
+        .getMethod(ListSubListTester.class, "testSubList_originalListSetAffectsSubListLargeList");
+  }
+
+  /**
+   * Returns the {@link Method} instance for
+   * {@link #testSubList_subListRemoveAffectsOriginalLargeList()} so that tests
+   * of {@link CopyOnWriteArrayList} can suppress it with
+   * {@code FeatureSpecificTestSuiteBuilder.suppressing()} until <a
+   * href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6570575">Sun bug
+   * 6570575</a> is fixed.
+   */
+  public static Method getSubListSubListRemoveAffectsOriginalLargeListMethod() {
+    return Platform.getMethod(
+        ListSubListTester.class, "testSubList_subListRemoveAffectsOriginalLargeList");
+  }
+
+  /*
+   * TODO: perform all List tests on subList(), but beware infinite recursion
+   */
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/ListToArrayTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/ListToArrayTester.java
new file mode 100644
index 0000000..f990ffb
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/ListToArrayTester.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+import com.google.common.collect.testing.features.CollectionSize;
+
+import java.util.Arrays;
+
+/**
+ * A generic JUnit test which tests {@code toArray()} operations on a list.
+ * Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.ListTestSuiteBuilder}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Chris Povirk
+ */
+public class ListToArrayTester<E> extends AbstractListTester<E> {
+  // CollectionToArrayTester tests everything except ordering.
+
+  public void testToArray_noArg() {
+    Object[] actual = getList().toArray();
+    assertArrayEquals("toArray() order should match list",
+        createSamplesArray(), actual);
+  }
+
+  @CollectionSize.Require(absent = ZERO)
+  public void testToArray_tooSmall() {
+    Object[] actual = getList().toArray(new Object[0]);
+    assertArrayEquals("toArray(tooSmall) order should match list",
+        createSamplesArray(), actual);
+  }
+
+  public void testToArray_largeEnough() {
+    Object[] actual = getList().toArray(new Object[getNumElements()]);
+    assertArrayEquals("toArray(largeEnough) order should match list",
+        createSamplesArray(), actual);
+  }
+
+  private static void assertArrayEquals(String message, Object[] expected,
+      Object[] actual) {
+    assertEquals(message, Arrays.asList(expected), Arrays.asList(actual));
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/MapClearTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/MapClearTester.java
new file mode 100644
index 0000000..302df11
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/MapClearTester.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+import static com.google.common.collect.testing.features.MapFeature.SUPPORTS_CLEAR;
+
+import com.google.common.collect.testing.AbstractMapTester;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.MapFeature;
+
+/**
+ * A generic JUnit test which tests {@code clear()} operations on a map.
+ * Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.MapTestSuiteBuilder}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author George van den Driessche
+ * @author Chris Povirk
+ */
+public class MapClearTester<K, V> extends AbstractMapTester<K, V> {
+  @MapFeature.Require(SUPPORTS_CLEAR)
+  public void testClear() {
+    getMap().clear();
+    assertTrue("After clear(), a map should be empty.",
+        getMap().isEmpty());
+  }
+
+  @MapFeature.Require(absent = SUPPORTS_CLEAR)
+  @CollectionSize.Require(absent = ZERO)
+  public void testClear_unsupported() {
+    try {
+      getMap().clear();
+      fail("clear() should throw UnsupportedOperation if a map does "
+          + "not support it and is not empty.");
+    } catch (UnsupportedOperationException expected) {
+    }
+    expectUnchanged();
+  }
+
+  @MapFeature.Require(absent = SUPPORTS_CLEAR)
+  @CollectionSize.Require(ZERO)
+  public void testClear_unsupportedByEmptyCollection() {
+    try {
+      getMap().clear();
+    } catch (UnsupportedOperationException tolerated) {
+    }
+    expectUnchanged();
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/MapContainsKeyTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/MapContainsKeyTester.java
new file mode 100644
index 0000000..cbfeaf4
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/MapContainsKeyTester.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_KEYS;
+import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_QUERIES;
+
+import com.google.common.collect.testing.AbstractMapTester;
+import com.google.common.collect.testing.WrongType;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.MapFeature;
+
+/**
+ * A generic JUnit test which tests {@code containsKey()} operations on a map.
+ * Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.MapTestSuiteBuilder}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author George van den Driessche
+ */
+public class MapContainsKeyTester<K, V> extends AbstractMapTester<K, V> {
+  @CollectionSize.Require(absent = ZERO)
+  public void testContains_yes() {
+    assertTrue("containsKey(present) should return true",
+        getMap().containsKey(samples.e0.getKey()));
+  }
+
+  public void testContains_no() {
+    assertFalse("containsKey(notPresent) should return false",
+        getMap().containsKey(samples.e3.getKey()));
+  }
+
+  @MapFeature.Require(ALLOWS_NULL_QUERIES)
+  public void testContains_nullNotContainedButAllowed() {
+    assertFalse("containsKey(null) should return false",
+        getMap().containsKey(null));
+  }
+
+  @MapFeature.Require(absent = ALLOWS_NULL_QUERIES)
+  public void testContains_nullNotContainedAndUnsupported() {
+    expectNullKeyMissingWhenNullKeysUnsupported(
+        "containsKey(null) should return false or throw");
+  }
+
+  @MapFeature.Require(ALLOWS_NULL_KEYS)
+  @CollectionSize.Require(absent = ZERO)
+  public void testContains_nonNullWhenNullContained() {
+    initMapWithNullKey();
+    assertFalse("containsKey(notPresent) should return false",
+        getMap().containsKey(samples.e3.getKey()));
+  }
+
+  @MapFeature.Require(ALLOWS_NULL_KEYS)
+  @CollectionSize.Require(absent = ZERO)
+  public void testContains_nullContained() {
+    initMapWithNullKey();
+    assertTrue("containsKey(null) should return true",
+        getMap().containsKey(null));
+  }
+
+  public void testContains_wrongType() {
+    try {
+      //noinspection SuspiciousMethodCalls
+      assertFalse("containsKey(wrongType) should return false or throw",
+          getMap().containsKey(WrongType.VALUE));
+    } catch (ClassCastException tolerated) {
+    }
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/MapContainsValueTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/MapContainsValueTester.java
new file mode 100644
index 0000000..7c44040
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/MapContainsValueTester.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+import static com.google.common.collect.testing.features.MapFeature.*;
+
+import com.google.common.collect.testing.AbstractMapTester;
+import com.google.common.collect.testing.WrongType;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.MapFeature;
+
+/**
+ * A generic JUnit test which tests {@code containsValue()} operations on a map.
+ * Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.MapTestSuiteBuilder}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author George van den Driessche
+ * @author Chris Povirk
+ */
+public class MapContainsValueTester<K, V> extends AbstractMapTester<K, V> {
+  @CollectionSize.Require(absent = ZERO)
+  public void testContains_yes() {
+    assertTrue("containsValue(present) should return true",
+        getMap().containsValue(samples.e0.getValue()));
+  }
+
+  public void testContains_no() {
+    assertFalse("containsValue(notPresent) should return false",
+        getMap().containsValue(samples.e3.getValue()));
+  }
+
+  @MapFeature.Require(ALLOWS_NULL_QUERIES)
+  public void testContains_nullNotContainedButAllowed() {
+    assertFalse("containsValue(null) should return false",
+        getMap().containsValue(null));
+  }
+
+  @MapFeature.Require(absent = ALLOWS_NULL_QUERIES)
+  public void testContains_nullNotContainedAndUnsupported() {
+    expectNullValueMissingWhenNullValuesUnsupported(
+        "containsValue(null) should return false or throw");
+  }
+
+  @MapFeature.Require(ALLOWS_NULL_VALUES)
+  @CollectionSize.Require(absent = ZERO)
+  public void testContains_nonNullWhenNullContained() {
+    initMapWithNullValue();
+    assertFalse("containsValue(notPresent) should return false",
+        getMap().containsValue(samples.e3.getValue()));
+  }
+
+  @MapFeature.Require(ALLOWS_NULL_VALUES)
+  @CollectionSize.Require(absent = ZERO)
+  public void testContains_nullContained() {
+    initMapWithNullValue();
+    assertTrue("containsValue(null) should return true",
+        getMap().containsValue(null));
+  }
+
+  public void testContains_wrongType() {
+    try {
+      //noinspection SuspiciousMethodCalls
+      assertFalse("containsValue(wrongType) should return false or throw",
+          getMap().containsValue(WrongType.VALUE));
+    } catch (ClassCastException tolerated) {
+    }
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/MapCreationTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/MapCreationTester.java
new file mode 100644
index 0000000..00f8bfc
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/MapCreationTester.java
@@ -0,0 +1,141 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import static com.google.common.collect.testing.features.CollectionSize.ONE;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_KEYS;
+import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_VALUES;
+import static com.google.common.collect.testing.features.MapFeature.REJECTS_DUPLICATES_AT_CREATION;
+
+import com.google.common.collect.testing.AbstractMapTester;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.MapFeature;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map.Entry;
+
+/**
+ * A generic JUnit test which tests creation (typically through a constructor or
+ * static factory method) of a map. Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.MapTestSuiteBuilder}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Chris Povirk
+ * @author Kevin Bourrillion
+ */
+public class MapCreationTester<K, V> extends AbstractMapTester<K, V> {
+  @MapFeature.Require(ALLOWS_NULL_KEYS)
+  @CollectionSize.Require(absent = ZERO)
+  public void testCreateWithNullKeySupported() {
+    initMapWithNullKey();
+    expectContents(createArrayWithNullKey());
+  }
+
+  @MapFeature.Require(absent = ALLOWS_NULL_KEYS)
+  @CollectionSize.Require(absent = ZERO)
+  public void testCreateWithNullKeyUnsupported() {
+    try {
+      initMapWithNullKey();
+      fail("Creating a map containing a null key should fail");
+    } catch (NullPointerException expected) {
+    }
+  }
+
+  @MapFeature.Require(ALLOWS_NULL_VALUES)
+  @CollectionSize.Require(absent = ZERO)
+  public void testCreateWithNullValueSupported() {
+    initMapWithNullValue();
+    expectContents(createArrayWithNullValue());
+  }
+
+  @MapFeature.Require(absent = ALLOWS_NULL_VALUES)
+  @CollectionSize.Require(absent = ZERO)
+  public void testCreateWithNullValueUnsupported() {
+    try {
+      initMapWithNullValue();
+      fail("Creating a map containing a null value should fail");
+    } catch (NullPointerException expected) {
+    }
+  }
+
+  @MapFeature.Require({ALLOWS_NULL_KEYS, ALLOWS_NULL_VALUES})
+  @CollectionSize.Require(absent = ZERO)
+  public void testCreateWithNullKeyAndValueSupported() {
+    Entry<K, V>[] entries = createSamplesArray();
+    entries[getNullLocation()] = entry(null, null);
+    resetMap(entries);
+    expectContents(entries);
+  }
+
+  @MapFeature.Require(value = ALLOWS_NULL_KEYS,
+      absent = REJECTS_DUPLICATES_AT_CREATION)
+  @CollectionSize.Require(absent = {ZERO, ONE})
+  public void testCreateWithDuplicates_nullDuplicatesNotRejected() {
+    expectFirstRemoved(getEntriesMultipleNullKeys());
+  }
+
+  @MapFeature.Require(absent = REJECTS_DUPLICATES_AT_CREATION)
+  @CollectionSize.Require(absent = {ZERO, ONE})
+  public void testCreateWithDuplicates_nonNullDuplicatesNotRejected() {
+    expectFirstRemoved(getEntriesMultipleNonNullKeys());
+  }
+
+  @MapFeature.Require({ALLOWS_NULL_KEYS, REJECTS_DUPLICATES_AT_CREATION})
+  @CollectionSize.Require(absent = {ZERO, ONE})
+  public void testCreateWithDuplicates_nullDuplicatesRejected() {
+    Entry<K, V>[] entries = getEntriesMultipleNullKeys();
+    try {
+      resetMap(entries);
+      fail("Should reject duplicate null elements at creation");
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  @MapFeature.Require(REJECTS_DUPLICATES_AT_CREATION)
+  @CollectionSize.Require(absent = {ZERO, ONE})
+  public void testCreateWithDuplicates_nonNullDuplicatesRejected() {
+    Entry<K, V>[] entries = getEntriesMultipleNonNullKeys();
+    try {
+      resetMap(entries);
+      fail("Should reject duplicate non-null elements at creation");
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  private Entry<K, V>[] getEntriesMultipleNullKeys() {
+    Entry<K, V>[] entries = createArrayWithNullKey();
+    entries[0] = entries[getNullLocation()];
+    return entries;
+  }
+
+  private Entry<K, V>[] getEntriesMultipleNonNullKeys() {
+    Entry<K, V>[] entries = createSamplesArray();
+    entries[0] = samples.e1;
+    return entries;
+  }
+
+  private void expectFirstRemoved(Entry<K, V>[] entries) {
+    resetMap(entries);
+
+    List<Entry<K, V>> expectedWithDuplicateRemoved =
+        Arrays.asList(entries).subList(1, getNumElements());
+    expectContents(expectedWithDuplicateRemoved);
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/MapEqualsTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/MapEqualsTester.java
new file mode 100644
index 0000000..66b71e7
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/MapEqualsTester.java
@@ -0,0 +1,134 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_KEYS;
+import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_VALUES;
+
+import com.google.common.collect.testing.AbstractMapTester;
+import com.google.common.collect.testing.Helpers;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.MapFeature;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+
+/**
+ * Tests {@link java.util.Map#equals}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author George van den Driessche
+ * @author Chris Povirk
+ */
+public class MapEqualsTester<K, V> extends AbstractMapTester<K, V> {
+  public void testEquals_otherMapWithSameEntries() {
+    assertTrue(
+        "A Map should equal any other Map containing the same entries.",
+        getMap().equals(newHashMap(getSampleEntries())));
+  }
+
+  @CollectionSize.Require(absent = CollectionSize.ZERO)
+  public void testEquals_otherMapWithDifferentEntries() {
+    Map<K, V> other = newHashMap(getSampleEntries(getNumEntries() - 1));
+    Entry<K, V> e3 = getSubjectGenerator().samples().e3;
+    other.put(e3.getKey(), e3.getValue());
+    assertFalse(
+        "A Map should not equal another Map containing different entries.",
+        getMap().equals(other)
+    );
+  }
+
+  @CollectionSize.Require(absent = CollectionSize.ZERO)
+  @MapFeature.Require(ALLOWS_NULL_KEYS)
+  public void testEquals_containingNullKey() {
+    Collection<Map.Entry<K, V>> entries = getSampleEntries(getNumEntries() - 1);
+    entries.add(entry(null, samples.e3.getValue()));
+
+    resetContainer(getSubjectGenerator().create(entries.toArray()));
+    assertTrue("A Map should equal any other Map containing the same entries,"
+        + " even if some keys are null.",
+        getMap().equals(newHashMap(entries)));
+  }
+
+  @CollectionSize.Require(absent = CollectionSize.ZERO)
+  public void testEquals_otherContainsNullKey() {
+    Collection<Map.Entry<K, V>> entries = getSampleEntries(getNumEntries() - 1);
+    entries.add(entry(null, samples.e3.getValue()));
+    Map<K, V> other = newHashMap(entries);
+
+    assertFalse(
+        "Two Maps should not be equal if exactly one of them contains a null "
+        + "key.",
+        getMap().equals(other));
+  }
+
+  @CollectionSize.Require(absent = CollectionSize.ZERO)
+  @MapFeature.Require(ALLOWS_NULL_VALUES)
+  public void testEquals_containingNullValue() {
+    Collection<Map.Entry<K, V>> entries = getSampleEntries(getNumEntries() - 1);
+    entries.add(entry(samples.e3.getKey(), null));
+
+    resetContainer(getSubjectGenerator().create(entries.toArray()));
+    assertTrue("A Map should equal any other Map containing the same entries,"
+        + " even if some values are null.",
+        getMap().equals(newHashMap(entries)));
+  }
+
+  @CollectionSize.Require(absent = CollectionSize.ZERO)
+  public void testEquals_otherContainsNullValue() {
+    Collection<Map.Entry<K, V>> entries = getSampleEntries(getNumEntries() - 1);
+    entries.add(entry(samples.e3.getKey(), null));
+    Map<K, V> other = newHashMap(entries);
+
+    assertFalse(
+        "Two Maps should not be equal if exactly one of them contains a null "
+        + "value.",
+        getMap().equals(other));
+  }
+
+  @CollectionSize.Require(absent = CollectionSize.ZERO)
+  public void testEquals_smallerMap() {
+    Collection<Map.Entry<K, V>> fewerEntries
+        = getSampleEntries(getNumEntries() - 1);
+    assertFalse("Maps of different sizes should not be equal.",
+        getMap().equals(newHashMap(fewerEntries)));
+  }
+
+  public void testEquals_largerMap() {
+    Collection<Map.Entry<K, V>> moreEntries
+        = getSampleEntries(getNumEntries() + 1);
+    assertFalse("Maps of different sizes should not be equal.",
+        getMap().equals(newHashMap(moreEntries)));
+  }
+
+  public void testEquals_list() {
+    assertFalse("A List should never equal a Map.",
+        getMap().equals(Helpers.copyToList(getMap().entrySet())));
+  }
+
+  private static <K, V> HashMap<K, V> newHashMap(
+      Collection<? extends Map.Entry<? extends K, ? extends V>> entries) {
+    HashMap<K, V> map = new HashMap<K, V>();
+    for (Map.Entry<? extends K, ? extends V> entry : entries) {
+      map.put(entry.getKey(), entry.getValue());
+    }
+    return map;
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/MapGetTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/MapGetTester.java
new file mode 100644
index 0000000..9860931
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/MapGetTester.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_QUERIES;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_KEYS;
+
+import com.google.common.collect.testing.AbstractMapTester;
+import com.google.common.collect.testing.WrongType;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.MapFeature;
+
+/**
+ * A generic JUnit test which tests {@code get} operations on a map. Can't be
+ * invoked directly; please see
+ * {@link com.google.common.collect.testing.MapTestSuiteBuilder}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Kevin Bourrillion
+ * @author Chris Povirk
+ */
+public class MapGetTester<K, V> extends AbstractMapTester<K, V> {
+  @CollectionSize.Require(absent = ZERO)
+  public void testGet_yes() {
+    assertEquals("get(present) should return the associated value",
+        samples.e0.getValue(), get(samples.e0.getKey()));
+  }
+
+  public void testGet_no() {
+    assertNull("get(notPresent) should return null", get(samples.e3.getKey()));
+  }
+
+  @CollectionFeature.Require(ALLOWS_NULL_QUERIES)
+  public void testGet_nullNotContainedButAllowed() {
+    assertNull("get(null) should return null", get(null));
+  }
+
+  @CollectionFeature.Require(absent = ALLOWS_NULL_QUERIES)
+  public void testGet_nullNotContainedAndUnsupported() {
+    try {
+      assertNull("get(null) should return null or throw", get(null));
+    } catch (NullPointerException tolerated) {
+    }
+  }
+  
+  @MapFeature.Require(ALLOWS_NULL_KEYS)
+  @CollectionSize.Require(absent = ZERO)
+  public void testGet_nonNullWhenNullContained() {
+    initMapWithNullKey();
+    assertNull("get(notPresent) should return null", get(samples.e3.getKey()));
+  }
+
+  @MapFeature.Require(ALLOWS_NULL_KEYS)
+  @CollectionSize.Require(absent = ZERO)
+  public void testGet_nullContained() {
+    initMapWithNullKey();
+    assertEquals("get(null) should return the associated value",
+        getValueForNullKey(), get(null));
+  }
+
+  public void testGet_wrongType() {
+    try {
+      assertNull("get(wrongType) should return null or throw",
+          getMap().get(WrongType.VALUE));
+    } catch (ClassCastException tolerated) {
+    }
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/MapHashCodeTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/MapHashCodeTester.java
new file mode 100644
index 0000000..ccfde43
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/MapHashCodeTester.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_KEYS;
+import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_VALUES;
+
+import com.google.common.collect.testing.AbstractMapTester;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.MapFeature;
+
+import java.util.Collection;
+import java.util.Map;
+
+/**
+ * Tests {@link java.util.Map#hashCode}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author George van den Driessche
+ * @author Chris Povirk
+ */
+public class MapHashCodeTester<K, V> extends AbstractMapTester<K, V> {
+  public void testHashCode() {
+    int expectedHashCode = 0;
+    for (Map.Entry<K, V> entry : getSampleEntries()) {
+      expectedHashCode += hash(entry);
+    }
+    assertEquals(
+        "A Map's hashCode() should be the sum of those of its entries.",
+        expectedHashCode, getMap().hashCode());
+  }
+
+  @CollectionSize.Require(absent = CollectionSize.ZERO)
+  @MapFeature.Require(ALLOWS_NULL_KEYS)
+  public void testHashCode_containingNullKey() {
+    Map.Entry<K, V> entryWithNull = entry(null, samples.e3.getValue());
+    runEntryWithNullTest(entryWithNull);
+  }
+
+  @CollectionSize.Require(absent = CollectionSize.ZERO)
+  @MapFeature.Require(ALLOWS_NULL_VALUES)
+  public void testHashCode_containingNullValue() {
+    Map.Entry<K, V> entryWithNull = entry(samples.e3.getKey(), null);
+    runEntryWithNullTest(entryWithNull);
+  }
+
+  private void runEntryWithNullTest(Map.Entry<K, V> entryWithNull) {
+    Collection<Map.Entry<K, V>> entries = getSampleEntries(getNumEntries() - 1);
+
+    entries.add(entryWithNull);
+
+    int expectedHashCode = 0;
+    for (Map.Entry<K, V> entry : entries) {
+      expectedHashCode += hash(entry);
+    }
+
+    resetContainer(getSubjectGenerator().create(entries.toArray()));
+    assertEquals(
+        "A Map's hashCode() should be the sum of those of its entries (where "
+            + "a null element in an entry counts as having a hash of zero).",
+        expectedHashCode, getMap().hashCode());
+  }
+
+  private static int hash(Map.Entry<?, ?> e) {
+    return (e.getKey() == null ? 0 : e.getKey().hashCode())
+        ^ (e.getValue() == null ? 0 : e.getValue().hashCode());
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/MapIsEmptyTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/MapIsEmptyTester.java
new file mode 100644
index 0000000..8d27eb7
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/MapIsEmptyTester.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+import com.google.common.collect.testing.AbstractMapTester;
+import com.google.common.collect.testing.features.CollectionSize;
+
+/**
+ * A generic JUnit test which tests {@code isEmpty()} operations on a
+ * map. Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.MapTestSuiteBuilder}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Kevin Bourrillion
+ */
+public class MapIsEmptyTester<K, V> extends AbstractMapTester<K, V> {
+  @CollectionSize.Require(ZERO)
+  public void testIsEmpty_yes() {
+    assertTrue("isEmpty() should return true", getMap().isEmpty());
+  }
+
+  @CollectionSize.Require(absent = ZERO)
+  public void testIsEmpty_no() {
+    assertFalse("isEmpty() should return false", getMap().isEmpty());
+  }
+}
\ No newline at end of file
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/MapNavigationTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/MapNavigationTester.java
new file mode 100644
index 0000000..8c2bf60
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/MapNavigationTester.java
@@ -0,0 +1,261 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import static com.google.common.collect.testing.features.CollectionSize.ONE;
+import static com.google.common.collect.testing.features.CollectionSize.SEVERAL;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+import static com.google.common.collect.testing.features.MapFeature.SUPPORTS_REMOVE;
+
+import com.google.common.collect.testing.AbstractMapTester;
+import com.google.common.collect.testing.Helpers;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.MapFeature;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map.Entry;
+import java.util.NavigableMap;
+import java.util.NoSuchElementException;
+
+/**
+ * A generic JUnit test which tests operations on a NavigableMap. Can't be
+ * invoked directly; please see {@code MapTestSuiteBuilder}.
+ *
+ * @author Jesse Wilson
+ * @author Louis Wasserman
+ */
+public class MapNavigationTester<K, V> extends AbstractMapTester<K, V> {
+
+  private NavigableMap<K, V> navigableMap;
+  private List<Entry<K, V>> entries;
+  private Entry<K, V> a;
+  private Entry<K, V> b;
+  private Entry<K, V> c;
+
+  @Override public void setUp() throws Exception {
+    super.setUp();
+    navigableMap = (NavigableMap<K, V>) getMap();
+    entries = Helpers.copyToList(getSubjectGenerator().getSampleElements(
+        getSubjectGenerator().getCollectionSize().getNumElements()));
+    Collections.sort(entries, Helpers.<K, V>entryComparator(navigableMap.comparator()));
+
+    // some tests assume SEVERAL == 3
+    if (entries.size() >= 1) {
+      a = entries.get(0);
+      if (entries.size() >= 3) {
+        b = entries.get(1);
+        c = entries.get(2);
+      }
+    }
+  }
+
+  /**
+   * Resets the contents of navigableMap to have entries a, c, for the
+   * navigation tests.
+   */
+  @SuppressWarnings("unchecked") // Needed to stop Eclipse whining
+  private void resetWithHole() {
+    Entry<K, V>[] entries = new Entry[] {a, c};
+    super.resetMap(entries);
+    navigableMap = (NavigableMap<K, V>) getMap();
+  }
+
+  @CollectionSize.Require(ZERO)
+  public void testEmptyMapFirst() {
+    assertNull(navigableMap.firstEntry());
+    try {
+      navigableMap.firstKey();
+      fail();
+    } catch (NoSuchElementException e) {
+    }
+  }
+
+  @MapFeature.Require(SUPPORTS_REMOVE)
+  @CollectionSize.Require(ZERO)
+  public void testEmptyMapPollFirst() {
+    assertNull(navigableMap.pollFirstEntry());
+  }
+
+  @CollectionSize.Require(ZERO)
+  public void testEmptyMapNearby() {
+    assertNull(navigableMap.lowerEntry(samples.e0.getKey()));
+    assertNull(navigableMap.lowerKey(samples.e0.getKey()));
+    assertNull(navigableMap.floorEntry(samples.e0.getKey()));
+    assertNull(navigableMap.floorKey(samples.e0.getKey()));
+    assertNull(navigableMap.ceilingEntry(samples.e0.getKey()));
+    assertNull(navigableMap.ceilingKey(samples.e0.getKey()));
+    assertNull(navigableMap.higherEntry(samples.e0.getKey()));
+    assertNull(navigableMap.higherKey(samples.e0.getKey()));
+  }
+
+  @CollectionSize.Require(ZERO)
+  public void testEmptyMapLast() {
+    assertNull(navigableMap.lastEntry());
+    try {
+      assertNull(navigableMap.lastKey());
+      fail();
+    } catch (NoSuchElementException e) {
+    }
+  }  
+
+  @MapFeature.Require(SUPPORTS_REMOVE)
+  @CollectionSize.Require(ZERO)
+  public void testEmptyMapPollLast() {
+    assertNull(navigableMap.pollLastEntry());
+  }
+
+  @CollectionSize.Require(ONE)
+  public void testSingletonMapFirst() {
+    assertEquals(a, navigableMap.firstEntry());
+    assertEquals(a.getKey(), navigableMap.firstKey());
+  }
+
+  @MapFeature.Require(SUPPORTS_REMOVE)
+  @CollectionSize.Require(ONE)
+  public void testSingletonMapPollFirst() {
+    assertEquals(a, navigableMap.pollFirstEntry());
+    assertTrue(navigableMap.isEmpty());
+  }
+
+  @CollectionSize.Require(ONE)
+  public void testSingletonMapNearby() {
+    assertNull(navigableMap.lowerEntry(samples.e0.getKey()));
+    assertNull(navigableMap.lowerKey(samples.e0.getKey()));
+    assertEquals(a, navigableMap.floorEntry(samples.e0.getKey()));
+    assertEquals(a.getKey(), navigableMap.floorKey(samples.e0.getKey()));
+    assertEquals(a, navigableMap.ceilingEntry(samples.e0.getKey()));
+    assertEquals(a.getKey(), navigableMap.ceilingKey(samples.e0.getKey()));
+    assertNull(navigableMap.higherEntry(samples.e0.getKey()));
+    assertNull(navigableMap.higherKey(samples.e0.getKey()));
+  }
+
+  @CollectionSize.Require(ONE)
+  public void testSingletonMapLast() {
+    assertEquals(a, navigableMap.lastEntry());
+    assertEquals(a.getKey(), navigableMap.lastKey());
+  }
+
+  @MapFeature.Require(SUPPORTS_REMOVE)
+  @CollectionSize.Require(ONE)
+  public void testSingletonMapPollLast() {
+    assertEquals(a, navigableMap.pollLastEntry());
+    assertTrue(navigableMap.isEmpty());
+  }
+
+  @CollectionSize.Require(SEVERAL)
+  public void testFirst() {
+    assertEquals(a, navigableMap.firstEntry());
+    assertEquals(a.getKey(), navigableMap.firstKey());
+  }
+
+  @MapFeature.Require(SUPPORTS_REMOVE)
+  @CollectionSize.Require(SEVERAL)
+  public void testPollFirst() {
+    assertEquals(a, navigableMap.pollFirstEntry());
+    assertEquals(entries.subList(1, entries.size()),
+        Helpers.copyToList(navigableMap.entrySet()));
+  }
+
+  @MapFeature.Require(absent = SUPPORTS_REMOVE)
+  public void testPollFirstUnsupported() {
+    try {
+      navigableMap.pollFirstEntry();
+      fail();
+    } catch (UnsupportedOperationException e) {
+    }
+  }
+  
+  @CollectionSize.Require(SEVERAL)
+  public void testLower() {
+    resetWithHole();
+    assertEquals(null, navigableMap.lowerEntry(a.getKey()));
+    assertEquals(null, navigableMap.lowerKey(a.getKey()));
+    assertEquals(a, navigableMap.lowerEntry(b.getKey()));
+    assertEquals(a.getKey(), navigableMap.lowerKey(b.getKey()));
+    assertEquals(a, navigableMap.lowerEntry(c.getKey()));
+    assertEquals(a.getKey(), navigableMap.lowerKey(c.getKey()));
+  }
+  
+  @CollectionSize.Require(SEVERAL)
+  public void testFloor() {
+    resetWithHole();
+    assertEquals(a, navigableMap.floorEntry(a.getKey()));
+    assertEquals(a.getKey(), navigableMap.floorKey(a.getKey()));
+    assertEquals(a, navigableMap.floorEntry(b.getKey()));
+    assertEquals(a.getKey(), navigableMap.floorKey(b.getKey()));
+    assertEquals(c, navigableMap.floorEntry(c.getKey()));
+    assertEquals(c.getKey(), navigableMap.floorKey(c.getKey()));
+  }
+
+  @CollectionSize.Require(SEVERAL)
+  public void testCeiling() {
+    resetWithHole();
+    assertEquals(a, navigableMap.ceilingEntry(a.getKey()));
+    assertEquals(a.getKey(), navigableMap.ceilingKey(a.getKey()));
+    assertEquals(c, navigableMap.ceilingEntry(b.getKey()));
+    assertEquals(c.getKey(), navigableMap.ceilingKey(b.getKey()));
+    assertEquals(c, navigableMap.ceilingEntry(c.getKey()));
+    assertEquals(c.getKey(), navigableMap.ceilingKey(c.getKey()));
+  }
+
+  @CollectionSize.Require(SEVERAL)
+  public void testHigher() {
+    resetWithHole();
+    assertEquals(c, navigableMap.higherEntry(a.getKey()));
+    assertEquals(c.getKey(), navigableMap.higherKey(a.getKey()));
+    assertEquals(c, navigableMap.higherEntry(b.getKey()));
+    assertEquals(c.getKey(), navigableMap.higherKey(b.getKey()));
+    assertEquals(null, navigableMap.higherEntry(c.getKey()));
+    assertEquals(null, navigableMap.higherKey(c.getKey()));
+  }
+  
+  @CollectionSize.Require(SEVERAL)
+  public void testLast() {
+    assertEquals(c, navigableMap.lastEntry());
+    assertEquals(c.getKey(), navigableMap.lastKey());
+  }
+  
+  @MapFeature.Require(SUPPORTS_REMOVE)
+  @CollectionSize.Require(SEVERAL)
+  public void testPollLast() {
+    assertEquals(c, navigableMap.pollLastEntry());
+    assertEquals(entries.subList(0, entries.size() - 1),
+        Helpers.copyToList(navigableMap.entrySet()));
+  }
+
+  @MapFeature.Require(absent = SUPPORTS_REMOVE)
+  @CollectionSize.Require(SEVERAL)
+  public void testPollLastUnsupported() {
+    try {
+      navigableMap.pollLastEntry();
+      fail();
+    } catch (UnsupportedOperationException e) {
+    }
+  }  
+
+  @CollectionSize.Require(SEVERAL)
+  public void testDescendingNavigation() {
+    List<Entry<K, V>> descending = new ArrayList<Entry<K, V>>();
+    for (Entry<K, V> entry : navigableMap.descendingMap().entrySet()) {
+      descending.add(entry);
+    }
+    Collections.reverse(descending);
+    assertEquals(entries, descending);
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/MapPutAllTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/MapPutAllTester.java
new file mode 100644
index 0000000..d36e736
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/MapPutAllTester.java
@@ -0,0 +1,179 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_KEYS;
+import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_VALUES;
+import static com.google.common.collect.testing.features.MapFeature.SUPPORTS_PUT_ALL;
+import static java.util.Collections.singletonList;
+
+import com.google.common.collect.testing.AbstractMapTester;
+import com.google.common.collect.testing.MinimalCollection;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.MapFeature;
+
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+/**
+ * A generic JUnit test which tests {@code putAll} operations on a map. Can't be
+ * invoked directly; please see
+ * {@link com.google.common.collect.testing.MapTestSuiteBuilder}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Chris Povirk
+ * @author Kevin Bourrillion
+ */
+@SuppressWarnings("unchecked") // too many "unchecked generic array creations"
+public class MapPutAllTester<K, V> extends AbstractMapTester<K, V> {
+  private List<Entry<K, V>> containsNullKey;
+  private List<Entry<K, V>> containsNullValue;
+
+  @Override public void setUp() throws Exception {
+    super.setUp();
+    containsNullKey = singletonList(entry(null, samples.e3.getValue()));
+    containsNullValue = singletonList(entry(samples.e3.getKey(), null));
+  }
+
+  @MapFeature.Require(SUPPORTS_PUT_ALL)
+  public void testPutAll_supportedNothing() {
+    getMap().putAll(emptyMap());
+    expectUnchanged();
+  }
+
+  @MapFeature.Require(absent = SUPPORTS_PUT_ALL)
+  public void testPutAll_unsupportedNothing() {
+    try {
+      getMap().putAll(emptyMap());
+    } catch (UnsupportedOperationException tolerated) {
+    }
+    expectUnchanged();
+  }
+
+  @MapFeature.Require(SUPPORTS_PUT_ALL)
+  public void testPutAll_supportedNonePresent() {
+    putAll(createDisjointCollection());
+    expectAdded(samples.e3, samples.e4);
+  }
+
+  @MapFeature.Require(absent = SUPPORTS_PUT_ALL)
+  public void testPutAll_unsupportedNonePresent() {
+    try {
+      putAll(createDisjointCollection());
+      fail("putAll(nonePresent) should throw");
+    } catch (UnsupportedOperationException expected) {
+    }
+    expectUnchanged();
+    expectMissing(samples.e3, samples.e4);
+  }
+
+  @MapFeature.Require(SUPPORTS_PUT_ALL)
+  @CollectionSize.Require(absent = ZERO)
+  public void testPutAll_supportedSomePresent() {
+    putAll(MinimalCollection.of(samples.e3, samples.e0));
+    expectAdded(samples.e3);
+  }
+
+  @MapFeature.Require(absent = SUPPORTS_PUT_ALL)
+  @CollectionSize.Require(absent = ZERO)
+  public void testPutAll_unsupportedSomePresent() {
+    try {
+      putAll(MinimalCollection.of(samples.e3, samples.e0));
+      fail("putAll(somePresent) should throw");
+    } catch (UnsupportedOperationException expected) {
+    }
+    expectUnchanged();
+  }
+
+  @MapFeature.Require(absent = SUPPORTS_PUT_ALL)
+  @CollectionSize.Require(absent = ZERO)
+  public void testPutAll_unsupportedAllPresent() {
+    try {
+      putAll(MinimalCollection.of(samples.e0));
+    } catch (UnsupportedOperationException tolerated) {
+    }
+    expectUnchanged();
+  }
+
+  @MapFeature.Require({SUPPORTS_PUT_ALL,
+      ALLOWS_NULL_KEYS})
+  public void testPutAll_nullKeySupported() {
+    putAll(containsNullKey);
+    expectAdded(containsNullKey.get(0));
+  }
+
+  @MapFeature.Require(value = SUPPORTS_PUT_ALL,
+      absent = ALLOWS_NULL_KEYS)
+  public void testAdd_nullKeyUnsupported() {
+    try {
+      putAll(containsNullKey);
+      fail("putAll(containsNullKey) should throw");
+    } catch (NullPointerException expected) {
+    }
+    expectUnchanged();
+    expectNullKeyMissingWhenNullKeysUnsupported(
+        "Should not contain null key after unsupported " +
+        "putAll(containsNullKey)");
+  }
+
+  @MapFeature.Require({SUPPORTS_PUT_ALL,
+      ALLOWS_NULL_VALUES})
+  public void testPutAll_nullValueSupported() {
+    putAll(containsNullValue);
+    expectAdded(containsNullValue.get(0));
+  }
+
+  @MapFeature.Require(value = SUPPORTS_PUT_ALL,
+      absent = ALLOWS_NULL_VALUES)
+  public void testAdd_nullValueUnsupported() {
+    try {
+      putAll(containsNullValue);
+      fail("putAll(containsNullValue) should throw");
+    } catch (NullPointerException expected) {
+    }
+    expectUnchanged();
+    expectNullValueMissingWhenNullValuesUnsupported(
+        "Should not contain null value after unsupported " +
+        "putAll(containsNullValue)");
+  }
+
+  @MapFeature.Require(SUPPORTS_PUT_ALL)
+  public void testPutAll_nullCollectionReference() {
+    try {
+      getMap().putAll(null);
+      fail("putAll(null) should throw NullPointerException");
+    } catch (NullPointerException expected) {
+    }
+  }
+
+  private Map<K, V> emptyMap() {
+    return Collections.emptyMap();
+  }
+
+  private void putAll(Iterable<Entry<K, V>> entries) {
+    Map<K, V> map = new LinkedHashMap<K, V>();
+    for (Entry<K, V> entry : entries) {
+      map.put(entry.getKey(), entry.getValue());
+    }
+    getMap().putAll(map);
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/MapPutTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/MapPutTester.java
new file mode 100644
index 0000000..69b57ca
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/MapPutTester.java
@@ -0,0 +1,196 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_KEYS;
+import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_VALUES;
+import static com.google.common.collect.testing.features.MapFeature.SUPPORTS_PUT;
+
+import com.google.common.collect.testing.AbstractMapTester;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.MapFeature;
+
+import java.util.Map;
+import java.util.Map.Entry;
+
+/**
+ * A generic JUnit test which tests {@code put} operations on a map. Can't be
+ * invoked directly; please see
+ * {@link com.google.common.collect.testing.MapTestSuiteBuilder}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Chris Povirk
+ * @author Kevin Bourrillion
+ */
+@SuppressWarnings("unchecked") // too many "unchecked generic array creations"
+public class MapPutTester<K, V> extends AbstractMapTester<K, V> {
+  private Entry<K, V> nullKeyEntry;
+  private Entry<K, V> nullValueEntry;
+  private Entry<K, V> nullKeyValueEntry;
+  private Entry<K, V> presentKeyNullValueEntry;
+
+  @Override public void setUp() throws Exception {
+    super.setUp();
+    nullKeyEntry = entry(null, samples.e3.getValue());
+    nullValueEntry = entry(samples.e3.getKey(), null);
+    nullKeyValueEntry = entry(null, null);
+    presentKeyNullValueEntry = entry(samples.e0.getKey(), null);
+  }
+
+  @MapFeature.Require(SUPPORTS_PUT)
+  public void testPut_supportedNotPresent() {
+    assertNull("put(notPresent, value) should return null", put(samples.e3));
+    expectAdded(samples.e3);
+  }
+
+  @MapFeature.Require(absent = SUPPORTS_PUT)
+  public void testPut_unsupportedNotPresent() {
+    try {
+      put(samples.e3);
+      fail("put(notPresent, value) should throw");
+    } catch (UnsupportedOperationException expected) {
+    }
+    expectUnchanged();
+    expectMissing(samples.e3);
+  }
+
+  @MapFeature.Require(absent = SUPPORTS_PUT)
+  @CollectionSize.Require(absent = ZERO)
+  public void testPut_unsupportedPresentExistingValue() {
+    try {
+      assertEquals("put(present, existingValue) should return present or throw",
+          samples.e0.getValue(), put(samples.e0));
+    } catch (UnsupportedOperationException tolerated) {
+    }
+    expectUnchanged();
+  }
+
+  @MapFeature.Require(absent = SUPPORTS_PUT)
+  @CollectionSize.Require(absent = ZERO)
+  public void testPut_unsupportedPresentDifferentValue() {
+    try {
+      getMap().put(samples.e0.getKey(), samples.e3.getValue());
+      fail("put(present, differentValue) should throw");
+    } catch (UnsupportedOperationException expected) {
+    }
+    expectUnchanged();
+  }
+
+  @MapFeature.Require({SUPPORTS_PUT, ALLOWS_NULL_KEYS})
+  public void testPut_nullKeySupportedNotPresent() {
+    assertNull("put(null, value) should return null", put(nullKeyEntry));
+    expectAdded(nullKeyEntry);
+  }
+
+  @MapFeature.Require({SUPPORTS_PUT, ALLOWS_NULL_KEYS})
+  @CollectionSize.Require(absent = ZERO)
+  public void testPut_nullKeySupportedPresent() {
+    Entry<K, V> newEntry = entry(null, samples.e3.getValue());
+    initMapWithNullKey();
+    assertEquals("put(present, value) should return the associated value",
+        getValueForNullKey(), put(newEntry));
+
+    Entry<K, V>[] expected = createArrayWithNullKey();
+    expected[getNullLocation()] = newEntry;
+    expectContents(expected);
+  }
+
+  @MapFeature.Require(value = SUPPORTS_PUT, absent = ALLOWS_NULL_KEYS)
+  public void testPut_nullKeyUnsupported() {
+    try {
+      put(nullKeyEntry);
+      fail("put(null, value) should throw");
+    } catch (NullPointerException expected) {
+    }
+    expectUnchanged();
+    expectNullKeyMissingWhenNullKeysUnsupported(
+        "Should not contain null key after unsupported put(null, value)");
+  }
+
+  @MapFeature.Require({SUPPORTS_PUT, ALLOWS_NULL_VALUES})
+  public void testPut_nullValueSupported() {
+    assertNull("put(key, null) should return null", put(nullValueEntry));
+    expectAdded(nullValueEntry);
+  }
+
+  @MapFeature.Require(value = SUPPORTS_PUT, absent = ALLOWS_NULL_VALUES)
+  public void testPut_nullValueUnsupported() {
+    try {
+      put(nullValueEntry);
+      fail("put(key, null) should throw");
+    } catch (NullPointerException expected) {
+    }
+    expectUnchanged();
+    expectNullValueMissingWhenNullValuesUnsupported(
+        "Should not contain null value after unsupported put(key, null)");
+  }
+
+  @MapFeature.Require({SUPPORTS_PUT, ALLOWS_NULL_VALUES})
+  @CollectionSize.Require(absent = ZERO)
+  public void testPut_replaceWithNullValueSupported() {
+    assertEquals("put(present, null) should return the associated value",
+        samples.e0.getValue(), put(presentKeyNullValueEntry));
+    expectReplacement(presentKeyNullValueEntry);
+  }
+
+  @MapFeature.Require(value = SUPPORTS_PUT, absent = ALLOWS_NULL_VALUES)
+  @CollectionSize.Require(absent = ZERO)
+  public void testPut_replaceWithNullValueUnsupported() {
+    try {
+      put(presentKeyNullValueEntry);
+      fail("put(present, null) should throw");
+    } catch (NullPointerException expected) {
+    }
+    expectUnchanged();
+    expectNullValueMissingWhenNullValuesUnsupported(
+        "Should not contain null after unsupported put(present, null)");
+  }
+
+  @MapFeature.Require({SUPPORTS_PUT, ALLOWS_NULL_VALUES})
+  @CollectionSize.Require(absent = ZERO)
+  public void testPut_replaceNullValueWithNullSupported() {
+    initMapWithNullValue();
+    assertNull("put(present, null) should return the associated value (null)",
+        getMap().put(getKeyForNullValue(), null));
+    expectContents(createArrayWithNullValue());
+  }
+
+  @MapFeature.Require({SUPPORTS_PUT, ALLOWS_NULL_VALUES})
+  @CollectionSize.Require(absent = ZERO)
+  public void testPut_replaceNullValueWithNonNullSupported() {
+    Entry<K, V> newEntry = entry(getKeyForNullValue(), samples.e3.getValue());
+    initMapWithNullValue();
+    assertNull("put(present, value) should return the associated value (null)",
+        put(newEntry));
+
+    Entry<K, V>[] expected = createArrayWithNullValue();
+    expected[getNullLocation()] = newEntry;
+    expectContents(expected);
+  }
+
+  @MapFeature.Require({SUPPORTS_PUT, ALLOWS_NULL_KEYS, ALLOWS_NULL_VALUES})
+  public void testPut_nullKeyAndValueSupported() {
+    assertNull("put(null, null) should return null", put(nullKeyValueEntry));
+    expectAdded(nullKeyValueEntry);
+  }
+
+  private V put(Map.Entry<K, V> entry) {
+    return getMap().put(entry.getKey(), entry.getValue());
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/MapRemoveTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/MapRemoveTester.java
new file mode 100644
index 0000000..6ba33ce
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/MapRemoveTester.java
@@ -0,0 +1,124 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_KEYS;
+import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_QUERIES;
+import static com.google.common.collect.testing.features.MapFeature.SUPPORTS_REMOVE;
+
+import com.google.common.collect.testing.AbstractMapTester;
+import com.google.common.collect.testing.WrongType;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.MapFeature;
+
+/**
+ * A generic JUnit test which tests {@code remove} operations on a map. Can't be
+ * invoked directly; please see
+ * {@link com.google.common.collect.testing.MapTestSuiteBuilder}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author George van den Driessche
+ * @author Chris Povirk
+ */
+@SuppressWarnings("unchecked") // too many "unchecked generic array creations"
+public class MapRemoveTester<K, V> extends AbstractMapTester<K, V> {
+  @MapFeature.Require(SUPPORTS_REMOVE)
+  @CollectionSize.Require(absent = ZERO)
+  public void testRemove_present() {
+    int initialSize = getMap().size();
+    assertEquals("remove(present) should return the associated value",
+        samples.e0.getValue(), getMap().remove(samples.e0.getKey()));
+    assertEquals("remove(present) should decrease a map's size by one.",
+        initialSize - 1, getMap().size());
+    expectMissing(samples.e0);
+  }
+
+  @MapFeature.Require(SUPPORTS_REMOVE)
+  public void testRemove_notPresent() {
+    assertNull("remove(notPresent) should return null",
+        getMap().remove(samples.e3.getKey()));
+    expectUnchanged();
+  }
+
+  @MapFeature.Require({SUPPORTS_REMOVE, ALLOWS_NULL_KEYS})
+  @CollectionSize.Require(absent = ZERO)
+  public void testRemove_nullPresent() {
+    initMapWithNullKey();
+
+    int initialSize = getMap().size();
+    assertEquals("remove(null) should return the associated value",
+        getValueForNullKey(), getMap().remove(null));
+    assertEquals("remove(present) should decrease a map's size by one.",
+        initialSize - 1, getMap().size());
+    expectMissing(entry(null, getValueForNullKey()));
+  }
+
+  @MapFeature.Require(absent = SUPPORTS_REMOVE)
+  @CollectionSize.Require(absent = ZERO)
+  public void testRemove_unsupported() {
+    try {
+      getMap().remove(samples.e0.getKey());
+      fail("remove(present) should throw UnsupportedOperationException");
+    } catch (UnsupportedOperationException expected) {
+    }
+    expectUnchanged();
+    assertEquals("remove(present) should not remove the element",
+        samples.e0.getValue(), get(samples.e0.getKey()));
+  }
+
+  @MapFeature.Require(absent = SUPPORTS_REMOVE)
+  public void testRemove_unsupportedNotPresent() {
+    try {
+      assertNull("remove(notPresent) should return null or throw "
+          + "UnsupportedOperationException",
+          getMap().remove(samples.e3.getKey()));
+    } catch (UnsupportedOperationException tolerated) {
+    }
+    expectUnchanged();
+    expectMissing(samples.e3);
+  }
+
+  @MapFeature.Require(
+      value = SUPPORTS_REMOVE,
+      absent = ALLOWS_NULL_QUERIES)
+  public void testRemove_nullQueriesNotSupported() {
+    try {
+      assertNull("remove(null) should return null or throw "
+          + "NullPointerException",
+          getMap().remove(null));
+    } catch (NullPointerException tolerated) {
+    }
+    expectUnchanged();
+  }
+
+  @MapFeature.Require({SUPPORTS_REMOVE, ALLOWS_NULL_QUERIES})
+  public void testRemove_nullSupportedMissing() {
+    assertNull("remove(null) should return null", getMap().remove(null));
+    expectUnchanged();
+  }
+
+  @MapFeature.Require(SUPPORTS_REMOVE)
+  public void testRemove_wrongType() {
+    try {
+      assertNull(getMap().remove(WrongType.VALUE));
+    } catch (ClassCastException tolerated) {
+    }
+    expectUnchanged();
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/MapSizeTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/MapSizeTester.java
new file mode 100644
index 0000000..6b3439a
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/MapSizeTester.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import com.google.common.collect.testing.AbstractMapTester;
+
+/**
+ * A generic JUnit test which tests {@code size()} operations on a map.
+ * Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.MapTestSuiteBuilder}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author George van den Driessche
+ */
+public class MapSizeTester<K, V> extends AbstractMapTester<K, V> {
+  public void testSize() {
+    assertEquals("size():", getNumElements(), getMap().size());
+  }
+}
\ No newline at end of file
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/Platform.java b/guava-testlib/src/com/google/common/collect/testing/testers/Platform.java
new file mode 100644
index 0000000..ba4d3f0
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/Platform.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import java.lang.reflect.Method;
+
+/**
+ * This class is emulated in GWT.
+ *
+ * @author Hayward Chan
+ */
+class Platform {
+
+  /**
+   * Delegate to {@link Class#getMethod(String, Class[])}.  Not
+   * usable in GWT.
+   */
+  static Method getMethod(Class<?> clazz, String methodName) {
+    try {
+      return clazz.getMethod(methodName);
+    } catch (NoSuchMethodException e) {
+      throw new RuntimeException(e);
+    }
+  }
+
+  /**
+   * Format the template with args, only supports the placeholder
+   * {@code %s}.
+   */
+  static String format(String template, Object... args) {
+    return String.format(template, args);
+  }
+
+  /** See {@link ListListIteratorTester} */
+  static int listListIteratorTesterNumIterations() {
+    return 4;
+  }
+
+  /** See {@link CollectionIteratorTester} */
+  static int collectionIteratorTesterNumIterations() {
+    return 5;
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/QueueElementTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/QueueElementTester.java
new file mode 100644
index 0000000..7c5ce41
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/QueueElementTester.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import static com.google.common.collect.testing.features.CollectionFeature.KNOWN_ORDER;
+import static com.google.common.collect.testing.features.CollectionSize.ONE;
+import static com.google.common.collect.testing.features.CollectionSize.SEVERAL;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+
+import java.util.NoSuchElementException;
+
+/**
+ * A generic JUnit test which tests {@code element()} operations on a queue.
+ * Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.CollectionTestSuiteBuilder}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Jared Levy
+ */
+public class QueueElementTester<E> extends AbstractQueueTester<E> {
+  @CollectionSize.Require(ZERO)
+  public void testElement_empty() {
+    try {
+      getQueue().element();
+      fail("emptyQueue.element() should throw");
+    } catch (NoSuchElementException expected) {}
+    expectUnchanged();
+  }
+
+  @CollectionSize.Require(ONE)
+  public void testElement_size1() {
+    assertEquals("size1Queue.element() should return first element",
+        samples.e0, getQueue().element());
+    expectUnchanged();
+  }
+
+  @CollectionFeature.Require(KNOWN_ORDER)
+  @CollectionSize.Require(SEVERAL)
+  public void testElement_sizeMany() {
+    assertEquals("sizeManyQueue.element() should return first element",
+        samples.e0, getQueue().element());
+    expectUnchanged();
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/QueueOfferTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/QueueOfferTester.java
new file mode 100644
index 0000000..f4fa792
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/QueueOfferTester.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES;
+import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_ADD;
+
+import com.google.common.collect.testing.features.CollectionFeature;
+
+/**
+ * A generic JUnit test which tests offer operations on a queue. Can't be
+ * invoked directly; please see
+ * {@link com.google.common.collect.testing.CollectionTestSuiteBuilder}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Jared Levy
+ */
+@SuppressWarnings("unchecked") // too many "unchecked generic array creations"
+public class QueueOfferTester<E> extends AbstractQueueTester<E> {
+  @CollectionFeature.Require(SUPPORTS_ADD)
+  public void testOffer_supportedNotPresent() {
+    assertTrue("offer(notPresent) should return true",
+        getQueue().offer(samples.e3));
+    expectAdded(samples.e3);
+  }
+
+  @CollectionFeature.Require({SUPPORTS_ADD, ALLOWS_NULL_VALUES})
+  public void testOffer_nullSupported() {
+    assertTrue("offer(null) should return true", getQueue().offer(null));
+    expectAdded((E) null);
+  }
+
+  @CollectionFeature.Require(value = SUPPORTS_ADD, absent = ALLOWS_NULL_VALUES)
+  public void testOffer_nullUnsupported() {
+    try {
+      getQueue().offer(null);
+      fail("offer(null) should throw");
+    } catch (NullPointerException expected) {
+    }
+    expectUnchanged();
+    expectNullMissingWhenNullUnsupported(
+        "Should not contain null after unsupported offer(null)");
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/QueuePeekTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/QueuePeekTester.java
new file mode 100644
index 0000000..341e68d
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/QueuePeekTester.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import static com.google.common.collect.testing.features.CollectionFeature.KNOWN_ORDER;
+import static com.google.common.collect.testing.features.CollectionSize.ONE;
+import static com.google.common.collect.testing.features.CollectionSize.SEVERAL;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+
+/**
+ * A generic JUnit test which tests {@code peek()} operations on a queue.
+ * Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.CollectionTestSuiteBuilder}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Jared Levy
+ */
+public class QueuePeekTester<E> extends AbstractQueueTester<E> {
+  @CollectionSize.Require(ZERO)
+  public void testPeek_empty() {
+    assertNull("emptyQueue.peek() should return null", getQueue().peek());
+    expectUnchanged();
+  }
+
+  @CollectionSize.Require(ONE)
+  public void testPeek_size1() {
+    assertEquals("size1Queue.peek() should return first element",
+        samples.e0, getQueue().peek());
+    expectUnchanged();
+  }
+
+  @CollectionFeature.Require(KNOWN_ORDER)
+  @CollectionSize.Require(SEVERAL)
+  public void testPeek_sizeMany() {
+    assertEquals("sizeManyQueue.peek() should return first element",
+        samples.e0, getQueue().peek());
+    expectUnchanged();
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/QueuePollTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/QueuePollTester.java
new file mode 100644
index 0000000..a447bb0
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/QueuePollTester.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import static com.google.common.collect.testing.features.CollectionFeature.KNOWN_ORDER;
+import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_REMOVE;
+import static com.google.common.collect.testing.features.CollectionSize.ONE;
+import static com.google.common.collect.testing.features.CollectionSize.SEVERAL;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+
+/**
+ * A generic JUnit test which tests {@code poll()} operations on a queue.
+ * Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.CollectionTestSuiteBuilder}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Jared Levy
+ */
+@SuppressWarnings("unchecked") // too many "unchecked generic array creations"
+public class QueuePollTester<E> extends AbstractQueueTester<E> {
+  @CollectionFeature.Require(SUPPORTS_REMOVE)
+  @CollectionSize.Require(ZERO)
+  public void testPoll_empty() {
+    assertNull("emptyQueue.poll() should return null", getQueue().poll());
+    expectUnchanged();
+  }
+
+  @CollectionFeature.Require(SUPPORTS_REMOVE)
+  @CollectionSize.Require(ONE)
+  public void testPoll_size1() {
+    assertEquals("size1Queue.poll() should return first element",
+        samples.e0, getQueue().poll());
+    expectMissing(samples.e0);
+  }
+
+  @CollectionFeature.Require({KNOWN_ORDER, SUPPORTS_REMOVE})
+  @CollectionSize.Require(SEVERAL)
+  public void testPoll_sizeMany() {
+    assertEquals("sizeManyQueue.poll() should return first element",
+        samples.e0, getQueue().poll());
+    expectMissing(samples.e0);
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/QueueRemoveTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/QueueRemoveTester.java
new file mode 100644
index 0000000..07596f4
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/QueueRemoveTester.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import static com.google.common.collect.testing.features.CollectionFeature.KNOWN_ORDER;
+import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_REMOVE;
+import static com.google.common.collect.testing.features.CollectionSize.ONE;
+import static com.google.common.collect.testing.features.CollectionSize.SEVERAL;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+
+import java.util.NoSuchElementException;
+
+/**
+ * A generic JUnit test which tests {@code remove()} operations on a queue.
+ * Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.CollectionTestSuiteBuilder}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Jared Levy
+ */
+@SuppressWarnings("unchecked") // too many "unchecked generic array creations"
+public class QueueRemoveTester<E> extends AbstractQueueTester<E> {
+  @CollectionFeature.Require(SUPPORTS_REMOVE)
+  @CollectionSize.Require(ZERO)
+  public void testRemove_empty() {
+    try {
+      getQueue().remove();
+      fail("emptyQueue.remove() should throw");
+    } catch (NoSuchElementException expected) {}
+    expectUnchanged();
+  }
+
+  @CollectionFeature.Require(SUPPORTS_REMOVE)
+  @CollectionSize.Require(ONE)
+  public void testRemove_size1() {
+    assertEquals("size1Queue.remove() should return first element",
+        samples.e0, getQueue().remove());
+    expectMissing(samples.e0);
+  }
+
+  @CollectionFeature.Require({KNOWN_ORDER, SUPPORTS_REMOVE})
+  @CollectionSize.Require(SEVERAL)
+  public void testRemove_sizeMany() {
+    assertEquals("sizeManyQueue.remove() should return first element",
+        samples.e0, getQueue().remove());
+    expectMissing(samples.e0);
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/SetAddAllTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/SetAddAllTester.java
new file mode 100644
index 0000000..0dac713
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/SetAddAllTester.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_ADD_ALL;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+import com.google.common.collect.testing.MinimalCollection;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+
+/**
+ * A generic JUnit test which tests addAll operations on a set. Can't be
+ * invoked directly; please see
+ * {@link com.google.common.collect.testing.SetTestSuiteBuilder}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Kevin Bourrillion
+ */
+@SuppressWarnings("unchecked") // too many "unchecked generic array creations"
+public class SetAddAllTester<E> extends AbstractSetTester<E> {
+  @CollectionFeature.Require(SUPPORTS_ADD_ALL)
+  @CollectionSize.Require(absent = ZERO)
+  public void testAddAll_supportedSomePresent() {
+    assertTrue("add(somePresent) should return true",
+        getSet().addAll(MinimalCollection.of(samples.e3, samples.e0)));
+    expectAdded(samples.e3);
+  }
+
+  @CollectionFeature.Require(SUPPORTS_ADD_ALL)
+  public void testAddAll_withDuplicates() {
+    MinimalCollection<E> elementsToAdd
+        = MinimalCollection.of(samples.e3, samples.e4, samples.e3, samples.e4);
+    assertTrue("add(hasDuplicates) should return true",
+        getSet().addAll(elementsToAdd));
+    expectAdded(samples.e3, samples.e4);
+  }
+
+  @CollectionFeature.Require(SUPPORTS_ADD_ALL)
+  @CollectionSize.Require(absent = ZERO)
+  public void testAddAll_supportedAllPresent() {
+    assertFalse("add(allPresent) should return false",
+        getSet().addAll(MinimalCollection.of(samples.e0)));
+    expectUnchanged();
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/SetAddTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/SetAddTester.java
new file mode 100644
index 0000000..d9d8601
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/SetAddTester.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES;
+import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_ADD;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+
+import java.lang.reflect.Method;
+
+/**
+ * A generic JUnit test which tests add operations on a set. Can't be
+ * invoked directly; please see
+ * {@link com.google.common.collect.testing.SetTestSuiteBuilder}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Kevin Bourrillion
+ */
+public class SetAddTester<E> extends AbstractSetTester<E> {
+  @CollectionFeature.Require(SUPPORTS_ADD)
+  @CollectionSize.Require(absent = ZERO)
+  public void testAdd_supportedPresent() {
+    assertFalse("add(present) should return false", getSet().add(samples.e0));
+    expectUnchanged();
+  }
+
+  @CollectionFeature.Require(value = {SUPPORTS_ADD, ALLOWS_NULL_VALUES})
+  @CollectionSize.Require(absent = ZERO)
+  public void testAdd_supportedNullPresent() {
+    E[] array = createArrayWithNullElement();
+    collection = getSubjectGenerator().create(array);
+    assertFalse("add(nullPresent) should return false", getSet().add(null));
+    expectContents(array);
+  }
+
+  /**
+   * Returns the {@link Method} instance for
+   * {@link #testAdd_supportedNullPresent()} so that tests can suppress it. See
+   * {@link CollectionAddTester#getAddNullSupportedMethod()} for details.
+   */
+  public static Method getAddSupportedNullPresentMethod() {
+    return Platform.getMethod(SetAddTester.class, "testAdd_supportedNullPresent");
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/SetCreationTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/SetCreationTester.java
new file mode 100644
index 0000000..50d83c7
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/SetCreationTester.java
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES;
+import static com.google.common.collect.testing.features.CollectionFeature.REJECTS_DUPLICATES_AT_CREATION;
+import static com.google.common.collect.testing.features.CollectionSize.ONE;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * A generic JUnit test which tests creation (typically through a constructor or
+ * static factory method) of a set. Can't be invoked directly; please see
+ * {@link com.google.common.collect.testing.SetTestSuiteBuilder}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author Chris Povirk
+ */
+public class SetCreationTester<E> extends AbstractSetTester<E> {
+  @CollectionFeature.Require(value = ALLOWS_NULL_VALUES,
+      absent = REJECTS_DUPLICATES_AT_CREATION)
+  @CollectionSize.Require(absent = {ZERO, ONE})
+  public void testCreateWithDuplicates_nullDuplicatesNotRejected() {
+    E[] array = createArrayWithNullElement();
+    array[0] = null;
+    collection = getSubjectGenerator().create(array);
+
+    List<E> expectedWithDuplicateRemoved =
+        Arrays.asList(array).subList(1, getNumElements());
+    expectContents(expectedWithDuplicateRemoved);
+  }
+
+  @CollectionFeature.Require(absent = REJECTS_DUPLICATES_AT_CREATION)
+  @CollectionSize.Require(absent = {ZERO, ONE})
+  public void testCreateWithDuplicates_nonNullDuplicatesNotRejected() {
+    E[] array = createSamplesArray();
+    array[1] = samples.e0;
+    collection = getSubjectGenerator().create(array);
+
+    List<E> expectedWithDuplicateRemoved =
+        Arrays.asList(array).subList(1, getNumElements());
+    expectContents(expectedWithDuplicateRemoved);
+  }
+
+  @CollectionFeature.Require(
+      {ALLOWS_NULL_VALUES, REJECTS_DUPLICATES_AT_CREATION})
+  @CollectionSize.Require(absent = {ZERO, ONE})
+  public void testCreateWithDuplicates_nullDuplicatesRejected() {
+    E[] array = createArrayWithNullElement();
+    array[0] = null;
+    try {
+      collection = getSubjectGenerator().create(array);
+      fail("Should reject duplicate null elements at creation");
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  @CollectionFeature.Require(REJECTS_DUPLICATES_AT_CREATION)
+  @CollectionSize.Require(absent = {ZERO, ONE})
+  public void testCreateWithDuplicates_nonNullDuplicatesRejected() {
+    E[] array = createSamplesArray();
+    array[1] = samples.e0;
+    try {
+      collection = getSubjectGenerator().create(array);
+      fail("Should reject duplicate non-null elements at creation");
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/SetEqualsTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/SetEqualsTester.java
new file mode 100644
index 0000000..a783a44
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/SetEqualsTester.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES;
+
+import com.google.common.collect.testing.Helpers;
+import com.google.common.collect.testing.MinimalSet;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+
+import java.util.Collection;
+import java.util.Set;
+
+/**
+ * Tests {@link java.util.Set#equals}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author George van den Driessche
+ */
+public class SetEqualsTester<E> extends AbstractSetTester<E> {
+  public void testEquals_otherSetWithSameElements() {
+    assertTrue(
+        "A Set should equal any other Set containing the same elements.",
+        getSet().equals(MinimalSet.from(getSampleElements())));
+  }
+
+  @CollectionSize.Require(absent = CollectionSize.ZERO)
+  public void testEquals_otherSetWithDifferentElements() {
+    Collection<E> elements = getSampleElements(getNumElements() - 1);
+    elements.add(getSubjectGenerator().samples().e3);
+
+    assertFalse(
+        "A Set should not equal another Set containing different elements.",
+        getSet().equals(MinimalSet.from(elements))
+    );
+  }
+
+  @CollectionSize.Require(absent = CollectionSize.ZERO)
+  @CollectionFeature.Require(ALLOWS_NULL_VALUES)
+  public void testEquals_containingNull() {
+    Collection<E> elements = getSampleElements(getNumElements() - 1);
+    elements.add(null);
+
+    collection = getSubjectGenerator().create(elements.toArray());
+    assertTrue("A Set should equal any other Set containing the same elements,"
+        + " even if some elements are null.",
+        getSet().equals(MinimalSet.from(elements)));
+  }
+
+  @CollectionSize.Require(absent = CollectionSize.ZERO)
+  public void testEquals_otherContainsNull() {
+    Collection<E> elements = getSampleElements(getNumElements() - 1);
+    elements.add(null);
+    Set<E> other = MinimalSet.from(elements);
+
+    assertFalse(
+        "Two Sets should not be equal if exactly one of them contains null.",
+        getSet().equals(other));
+  }
+
+  @CollectionSize.Require(absent = CollectionSize.ZERO)
+  public void testEquals_smallerSet() {
+    Collection<E> fewerElements = getSampleElements(getNumElements() - 1);
+    assertFalse("Sets of different sizes should not be equal.",
+        getSet().equals(MinimalSet.from(fewerElements)));
+  }
+
+  public void testEquals_largerSet() {
+    Collection<E> moreElements = getSampleElements(getNumElements() + 1);
+    assertFalse("Sets of different sizes should not be equal.",
+        getSet().equals(MinimalSet.from(moreElements)));
+  }
+
+  public void testEquals_list() {
+    assertFalse("A List should never equal a Set.",
+        getSet().equals(Helpers.copyToList(getSet())));
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/SetHashCodeTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/SetHashCodeTester.java
new file mode 100644
index 0000000..e8fc705
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/SetHashCodeTester.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES;
+
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+
+import java.lang.reflect.Method;
+import java.util.Collection;
+
+/**
+ * Tests {@link java.util.Set#hashCode}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author George van den Driessche
+ */
+public class SetHashCodeTester<E> extends AbstractSetTester<E> {
+  public void testHashCode() {
+    int expectedHashCode = 0;
+    for (E element : getSampleElements()) {
+      expectedHashCode += ((element == null) ? 0 : element.hashCode());
+    }
+    assertEquals(
+        "A Set's hashCode() should be the sum of those of its elements.",
+        expectedHashCode, getSet().hashCode());
+  }
+
+  @CollectionSize.Require(absent = CollectionSize.ZERO)
+  @CollectionFeature.Require(ALLOWS_NULL_VALUES)
+  public void testHashCode_containingNull() {
+    Collection<E> elements = getSampleElements(getNumElements() - 1);
+    int expectedHashCode = 0;
+    for (E element : elements) {
+      expectedHashCode += ((element == null) ? 0 : element.hashCode());
+    }
+
+    elements.add(null);
+    collection = getSubjectGenerator().create(elements.toArray());
+    assertEquals(
+        "A Set's hashCode() should be the sum of those of its elements (with "
+            + "a null element counting as having a hash of zero).",
+        expectedHashCode, getSet().hashCode());
+  }
+
+  /**
+   * Returns the {@link Method} instances for the test methods in this class
+   * which call {@code hashCode()} on the set values so that set tests on
+   * unhashable objects can suppress it with
+   * {@code FeatureSpecificTestSuiteBuilder.suppressing()}.
+   */
+  public static Method[] getHashCodeMethods() {
+    return new Method[]{
+        Platform.getMethod(SetHashCodeTester.class, "testHashCode"),
+        Platform.getMethod(SetHashCodeTester.class, "testHashCode_containingNull") };
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/SetNavigationTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/SetNavigationTester.java
new file mode 100644
index 0000000..a35595a
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/SetNavigationTester.java
@@ -0,0 +1,230 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_REMOVE;
+import static com.google.common.collect.testing.features.CollectionSize.ONE;
+import static com.google.common.collect.testing.features.CollectionSize.SEVERAL;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+import com.google.common.collect.testing.Helpers;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.NavigableSet;
+import java.util.NoSuchElementException;
+
+/**
+ * A generic JUnit test which tests operations on a NavigableSet. Can't be
+ * invoked directly; please see {@code SetTestSuiteBuilder}.
+ *
+ * @author Jesse Wilson
+ * @author Louis Wasserman
+ */
+public class SetNavigationTester<E> extends AbstractSetTester<E> {
+
+  private NavigableSet<E> navigableSet;
+  private List<E> values;
+  private E a;
+  private E b;
+  private E c;
+
+  @Override public void setUp() throws Exception {
+    super.setUp();
+    navigableSet = (NavigableSet<E>) getSet();
+    values = Helpers.copyToList(getSubjectGenerator().getSampleElements(
+        getSubjectGenerator().getCollectionSize().getNumElements()));
+    Collections.sort(values, navigableSet.comparator());
+
+    // some tests assume SEVERAL == 3
+    if (values.size() >= 1) {
+      a = values.get(0);
+      if (values.size() >= 3) {
+        b = values.get(1);
+        c = values.get(2);
+      }
+    }
+  }
+  
+  /**
+   * Resets the contents of navigableSet to have elements a, c, for the
+   * navigation tests.
+   */
+  protected void resetWithHole() {
+    super.resetContainer(getSubjectGenerator().create(a, c));
+    navigableSet = (NavigableSet<E>) getSet();
+  }
+
+  @CollectionSize.Require(ZERO)
+  public void testEmptySetFirst() {
+    try {
+      navigableSet.first();
+      fail();
+    } catch (NoSuchElementException e) {
+    }
+  }
+
+  @CollectionFeature.Require(SUPPORTS_REMOVE)
+  @CollectionSize.Require(ZERO)
+  public void testEmptySetPollFirst() {
+    assertNull(navigableSet.pollFirst());
+  }
+
+  @CollectionSize.Require(ZERO)
+  public void testEmptySetNearby() {
+    assertNull(navigableSet.lower(samples.e0));
+    assertNull(navigableSet.floor(samples.e0));
+    assertNull(navigableSet.ceiling(samples.e0));
+    assertNull(navigableSet.higher(samples.e0));
+  }
+
+  @CollectionSize.Require(ZERO)
+  public void testEmptySetLast() {
+    try {
+      navigableSet.last();
+      fail();
+    } catch (NoSuchElementException e) {
+    }
+  }
+
+  @CollectionFeature.Require(SUPPORTS_REMOVE)
+  @CollectionSize.Require(ZERO)
+  public void testEmptySetPollLast() {
+    assertNull(navigableSet.pollLast());
+  }
+
+  @CollectionSize.Require(ONE)
+  public void testSingletonSetFirst() {
+    assertEquals(a, navigableSet.first());
+  }
+
+  @CollectionFeature.Require(SUPPORTS_REMOVE)
+  @CollectionSize.Require(ONE)
+  public void testSingletonSetPollFirst() {
+    assertEquals(a, navigableSet.pollFirst());
+    assertTrue(navigableSet.isEmpty());
+  }
+
+  @CollectionSize.Require(ONE)
+  public void testSingletonSetNearby() {
+    assertNull(navigableSet.lower(samples.e0));
+    assertEquals(a, navigableSet.floor(samples.e0));
+    assertEquals(a, navigableSet.ceiling(samples.e0));
+    assertNull(navigableSet.higher(samples.e0));
+  }
+
+  @CollectionSize.Require(ONE)
+  public void testSingletonSetLast() {
+    assertEquals(a, navigableSet.last());
+  }
+
+  @CollectionFeature.Require(SUPPORTS_REMOVE)
+  @CollectionSize.Require(ONE)
+  public void testSingletonSetPollLast() {
+    assertEquals(a, navigableSet.pollLast());
+    assertTrue(navigableSet.isEmpty());
+  }
+
+  @CollectionSize.Require(SEVERAL)
+  public void testFirst() {
+    assertEquals(a, navigableSet.first());
+  }
+
+  @CollectionFeature.Require(SUPPORTS_REMOVE)
+  @CollectionSize.Require(SEVERAL)
+  public void testPollFirst() {
+    assertEquals(a, navigableSet.pollFirst());
+    assertEquals(
+        values.subList(1, values.size()), Helpers.copyToList(navigableSet));
+  }
+
+  @CollectionFeature.Require(absent = SUPPORTS_REMOVE)
+  public void testPollFirstUnsupported() {
+    try {
+      navigableSet.pollFirst();
+      fail();
+    } catch (UnsupportedOperationException e) {
+    }
+  }
+
+  @CollectionSize.Require(SEVERAL)
+  public void testLower() {
+    resetWithHole();
+    assertEquals(null, navigableSet.lower(a));
+    assertEquals(a, navigableSet.lower(b));
+    assertEquals(a, navigableSet.lower(c));
+  }
+  @CollectionSize.Require(SEVERAL)
+  public void testFloor() {
+    resetWithHole();
+    assertEquals(a, navigableSet.floor(a));
+    assertEquals(a, navigableSet.floor(b));
+    assertEquals(c, navigableSet.floor(c));
+  }
+
+  @CollectionSize.Require(SEVERAL)
+  public void testCeiling() {
+    resetWithHole();
+    assertEquals(a, navigableSet.ceiling(a));
+    assertEquals(c, navigableSet.ceiling(b));
+    assertEquals(c, navigableSet.ceiling(c));
+  }
+
+  @CollectionSize.Require(SEVERAL)
+  public void testHigher() {
+    resetWithHole();
+    assertEquals(c, navigableSet.higher(a));
+    assertEquals(c, navigableSet.higher(b));
+    assertEquals(null, navigableSet.higher(c));
+  }
+
+  @CollectionSize.Require(SEVERAL)
+  public void testLast() {
+    assertEquals(c, navigableSet.last());
+  }
+
+  @CollectionFeature.Require(SUPPORTS_REMOVE)
+  @CollectionSize.Require(SEVERAL)
+  public void testPollLast() {
+    assertEquals(c, navigableSet.pollLast());
+    assertEquals(
+        values.subList(0, values.size() - 1), Helpers.copyToList(navigableSet));
+  }
+
+  @CollectionFeature.Require(absent = SUPPORTS_REMOVE)
+  public void testPollLastUnsupported() {
+    try {
+      navigableSet.pollLast();
+      fail();
+    } catch (UnsupportedOperationException e) {
+    }
+  }
+
+  @CollectionSize.Require(SEVERAL)
+  public void testDescendingNavigation() {
+    List<E> descending = new ArrayList<E>();
+    for (Iterator<E> i = navigableSet.descendingIterator(); i.hasNext();) {
+      descending.add(i.next());
+    }
+    Collections.reverse(descending);
+    assertEquals(values, descending);
+  }
+}
diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/SetRemoveTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/SetRemoveTester.java
new file mode 100644
index 0000000..1310cff
--- /dev/null
+++ b/guava-testlib/src/com/google/common/collect/testing/testers/SetRemoveTester.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect.testing.testers;
+
+import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_REMOVE;
+import static com.google.common.collect.testing.features.CollectionSize.ZERO;
+
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+
+/**
+ * A generic JUnit test which tests remove operations on a set. Can't be
+ * invoked directly; please see
+ * {@link com.google.common.collect.testing.ListTestSuiteBuilder}.
+ *
+ * <p>This class is GWT compatible.
+ *
+ * @author George van den Driessche
+ */
+public class SetRemoveTester<E> extends AbstractSetTester<E> {
+  @CollectionFeature.Require(SUPPORTS_REMOVE)
+  @CollectionSize.Require(absent = ZERO)
+  public void testRemove_present() {
+    getSet().remove(samples.e0);
+    assertFalse("After remove(present) a set should not contain "
+        + "the removed element.",
+        getSet().contains(samples.e0));
+  }
+}
diff --git a/guava-testlib/src/com/google/common/testing/ClusterException.java b/guava-testlib/src/com/google/common/testing/ClusterException.java
new file mode 100644
index 0000000..39a6693
--- /dev/null
+++ b/guava-testlib/src/com/google/common/testing/ClusterException.java
@@ -0,0 +1,122 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.testing;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+
+/**
+ * An {@link ClusterException} is a data structure that allows for some code to
+ * "throw multiple exceptions", or something close to it. The prototypical code
+ * that calls for this class is presented below:
+ *
+ * <pre>
+ * void runManyThings(List&lt;ThingToRun&gt; thingsToRun) {
+ *   for (ThingToRun thingToRun : thingsToRun) {
+ *     thingToRun.run(); // <-- say this may throw an exception, but you want to
+ *                       // always run all thingsToRun
+ *   }
+ * }
+ * </pre>
+ *
+ * This is what the code would become:
+ *
+ * <pre>
+ * void runManyThings(List&lt;ThingToRun&gt; thingsToRun) {
+ *   List&lt;Exception&gt; exceptions = Lists.newArrayList();
+ *   for (ThingToRun thingToRun : thingsToRun) {
+ *     try {
+ *       thingToRun.run();
+ *     } catch (Exception e) {
+ *       exceptions.add(e);
+ *     }
+ *   }
+ *   if (exceptions.size() > 0) {
+ *     throw ClusterException.create(exceptions);
+ *   }
+ * }
+ * </pre>
+ *
+ * <p>See semantic details at {@link #create(Collection)}.
+ *
+ * @author Luiz-Otavio Zorzella
+ */
+@GwtCompatible
+final class ClusterException extends RuntimeException {
+
+  public final Collection<? extends Throwable> exceptions;
+
+  private ClusterException(Collection<? extends Throwable> exceptions) {
+    super(
+        exceptions.size() + " exceptions were thrown. The first exception is listed as a cause.",
+        exceptions.iterator().next());
+    ArrayList<Throwable> temp = new ArrayList<Throwable>();
+    temp.addAll(exceptions);
+    this.exceptions = Collections.unmodifiableCollection(temp);
+  }
+
+  /**
+   * @see #create(Collection)
+   */
+  public static RuntimeException create(Throwable... exceptions) {
+    ArrayList<Throwable> temp = new ArrayList<Throwable>();
+    for (Throwable exception : exceptions) {
+      temp.add(exception);
+    }
+    return create(temp);
+  }
+
+  /**
+   * Given a collection of exceptions, returns a {@link RuntimeException}, with
+   * the following rules:
+   *
+   * <ul>
+   *  <li>If {@code exceptions} has a single exception and that exception is a
+   *    {@link RuntimeException}, return it
+   *  <li>If {@code exceptions} has a single exceptions and that exceptions is
+   *    <em>not</em> a {@link RuntimeException}, return a simple
+   *    {@code RuntimeException} that wraps it
+   *  <li>Otherwise, return an instance of {@link ClusterException} that wraps
+   *    the first exception in the {@code exceptions} collection.
+   * </ul>
+   *
+   * <p>Though this method takes any {@link Collection}, it often makes most
+   * sense to pass a {@link java.util.List} or some other collection that
+   * preserves the order in which the exceptions got added.
+   *
+   * @throws NullPointerException if {@code exceptions} is null
+   * @throws IllegalArgumentException if {@code exceptions} is empty
+   */
+  public static RuntimeException create(Collection<? extends Throwable> exceptions) {
+    if (exceptions.size() == 0) {
+      throw new IllegalArgumentException(
+          "Can't create an ExceptionCollection with no exceptions");
+    }
+    if (exceptions.size() == 1) {
+      Throwable temp = exceptions.iterator().next();
+      if (temp instanceof RuntimeException) {
+        return (RuntimeException)temp;
+      } else {
+        return new RuntimeException(temp);
+      }
+    }
+    return new ClusterException(exceptions);
+  }
+}
diff --git a/guava-testlib/src/com/google/common/testing/EqualsTester.java b/guava-testlib/src/com/google/common/testing/EqualsTester.java
new file mode 100644
index 0000000..4ee69bf
--- /dev/null
+++ b/guava-testlib/src/com/google/common/testing/EqualsTester.java
@@ -0,0 +1,142 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.testing;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertTrue;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Objects;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
+import com.google.common.testing.RelationshipTester.RelationshipAssertion;
+
+import java.util.List;
+
+/**
+ * Tester for equals() and hashCode() methods of a class.
+ *
+ * <p>To use, create a new EqualsTester and add equality groups where each group
+ * contains objects that are supposed to be equal to each other, and objects of
+ * different groups are expected to be unequal. For example:
+ * <pre>
+ * new EqualsTester()
+ *     .addEqualityGroup("hello", "h" + "ello")
+ *     .addEqualityGroup("world", "wor" + "ld")
+ *     .addEqualityGroup(2, 1 + 1)
+ *     .testEquals();
+ * </pre>
+ * This tests:
+ * <ul>
+ * <li>comparing each object against itself returns true
+ * <li>comparing each object against null returns false
+ * <li>comparing each object an instance of an incompatible class returns false
+ * <li>comparing each pair of objects within the same equality group returns
+ *     true
+ * <li>comparing each pair of objects from different equality groups returns
+ *     false
+ * <li>the hash code of any two equal objects are equal
+ * </ul>
+ *
+ * <p>When a test fails, the error message labels the objects involved in
+ * the failed comparison as follows:
+ * <ul>
+ *   <li>"{@code [group }<i>i</i>{@code , item }<i>j</i>{@code ]}" refers to the
+ *       <i>j</i><sup>th</sup> item in the <i>i</i><sup>th</sup> equality group,
+ *       where both equality groups and the items within equality groups are
+ *       numbered starting from 1.  When either a constructor argument or an
+ *       equal object is provided, that becomes group 1.
+ * </ul>
+ *
+ * @author Jim McMaster
+ * @author Jige Yu
+ * @since 10.0
+ */
+@Beta
+@GwtCompatible
+public final class EqualsTester {
+  private static final int REPETITIONS = 3;
+
+  private final List<List<Object>> equalityGroups = Lists.newArrayList();
+
+  /**
+   * Constructs an empty EqualsTester instance
+   */
+  public EqualsTester() {}
+
+  /**
+   * Adds {@code equalityGroup} with objects that are supposed to be equal to
+   * each other and not equal to any other equality groups added to this tester.
+   */
+  public EqualsTester addEqualityGroup(Object... equalityGroup) {
+    checkNotNull(equalityGroup);
+    equalityGroups.add(ImmutableList.copyOf(equalityGroup));
+    return this;
+  }
+
+  /**
+   * Run tests on equals method, throwing a failure on an invalid test
+   */
+  public EqualsTester testEquals() {
+    RelationshipTester<Object> delegate = new RelationshipTester<Object>(
+        new RelationshipAssertion<Object>() {
+          @Override public void assertRelated(Object item, Object related) {
+            assertEquals("$ITEM must be equal to $RELATED", item, related);
+            int itemHash = item.hashCode();
+            int relatedHash = related.hashCode();
+            assertEquals("the hash (" + itemHash + ") of $ITEM must be equal to the hash ("
+                + relatedHash +") of $RELATED", itemHash, relatedHash);
+          }
+
+          @Override public void assertUnrelated(Object item, Object unrelated) {
+            // TODO(cpovirk): should this implementation (and
+            // RelationshipAssertions in general) accept null inputs?
+            assertTrue("$ITEM must be unequal to $UNRELATED", !Objects.equal(item, unrelated));
+          }
+        });
+    for (List<Object> group : equalityGroups) {
+      delegate.addRelatedGroup(group);
+    }
+    for (int run = 0; run < REPETITIONS; run++) {
+      testItems();
+      delegate.test();
+    }
+    return this;
+  }
+
+  private void testItems() {
+    for (Object item : Iterables.concat(equalityGroups)) {
+      assertTrue(item + " must be unequal to null", !item.equals(null));
+      assertTrue(item + " must be unequal to an arbitrary object of another class",
+          !item.equals(NotAnInstance.EQUAL_TO_NOTHING));
+      assertEquals(item + " must be equal to itself", item, item);
+      assertEquals("the hash of " + item + " must be consistent", item.hashCode(), item.hashCode());
+    }
+  }
+
+  /**
+   * Class used to test whether equals() correctly handles an instance
+   * of an incompatible class.  Since it is a private inner class, the
+   * invoker can never pass in an instance to the tester
+   */
+  private enum NotAnInstance {
+    EQUAL_TO_NOTHING;
+  }
+}
diff --git a/guava-testlib/src/com/google/common/testing/EquivalenceTester.java b/guava-testlib/src/com/google/common/testing/EquivalenceTester.java
new file mode 100644
index 0000000..40e5a27
--- /dev/null
+++ b/guava-testlib/src/com/google/common/testing/EquivalenceTester.java
@@ -0,0 +1,124 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.testing;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertTrue;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Equivalence;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Lists;
+import com.google.common.testing.RelationshipTester.RelationshipAssertion;
+
+import java.util.List;
+
+/**
+ * Tester for {@link Equivalence} relationships between groups of objects.
+ *
+ * <p>
+ * To use, create a new {@link EquivalenceTester} and add equivalence groups
+ * where each group contains objects that are supposed to be equal to each
+ * other. Objects of different groups are expected to be unequal. For example:
+ *
+ * <pre>
+ * {@code
+ * EquivalenceTester.of(someStringEquivalence)
+ *     .addEquivalenceGroup("hello", "h" + "ello")
+ *     .addEquivalenceGroup("world", "wor" + "ld")
+ *     .test();
+ * }
+ * </pre>
+ *
+ * <p>
+ * Note that testing {@link Objects#equals(Object)} is more simply done using
+ * the {@link EqualsTester}. It includes an extra test against an instance of an
+ * arbitrary class without having to explicitly add another equivalence group.
+ *
+ * @author Gregory Kick
+ * @since 10.0
+ *
+ * TODO(gak): turn this into a test suite so that each test can fail
+ * independently
+ */
+@Beta
+@GwtCompatible public final class EquivalenceTester<T> {
+  private static final int REPETITIONS = 3;
+
+  private final Equivalence<? super T> equivalence;
+  private final RelationshipTester<T> delegate;
+  private final List<T> items = Lists.newArrayList();
+
+  EquivalenceTester(final Equivalence<? super T> equivalence) {
+    this.equivalence = checkNotNull(equivalence);
+    this.delegate = new RelationshipTester<T>(new RelationshipAssertion<T>() {
+      @Override public void assertRelated(T item, T related) {
+        assertTrue("$ITEM must be equivalent to $RELATED", equivalence.equivalent(item, related));
+        int itemHash = equivalence.hash(item);
+        int relatedHash = equivalence.hash(related);
+        assertEquals("the hash (" + itemHash + ") of $ITEM must be equal to the hash ("
+            + relatedHash + ") of $RELATED", itemHash, relatedHash);
+      }
+
+      @Override public void assertUnrelated(T item, T unrelated) {
+        assertTrue("$ITEM must be inequivalent to $UNRELATED",
+            !equivalence.equivalent(item, unrelated));
+      }
+    });
+  }
+
+  public static <T> EquivalenceTester<T> of(Equivalence<? super T> equivalence) {
+    return new EquivalenceTester<T>(equivalence);
+  }
+
+  /**
+   * Adds a group of objects that are supposed to be equivalent to each other
+   * and not equivalent to objects in any other equivalence group added to this
+   * tester.
+   */
+  public EquivalenceTester<T> addEquivalenceGroup(T first, T... rest) {
+    addEquivalenceGroup(Lists.asList(first, rest));
+    return this;
+  }
+
+  public EquivalenceTester<T> addEquivalenceGroup(Iterable<T> group) {
+    delegate.addRelatedGroup(group);
+    items.addAll(ImmutableList.copyOf(group));
+    return this;
+  }
+
+  /** Run tests on equivalence methods, throwing a failure on an invalid test */
+  public EquivalenceTester<T> test() {
+    for (int run = 0; run < REPETITIONS; run++) {
+      testItems();
+      delegate.test();
+    }
+    return this;
+  }
+
+  private void testItems() {
+    for (T item : items) {
+      assertTrue(item + " must be inequivalent to null", !equivalence.equivalent(item, null));
+      assertTrue("null must be inequivalent to " + item, !equivalence.equivalent(null, item));
+      assertTrue(item + " must be equivalent to itself", equivalence.equivalent(item, item));
+      assertEquals("the hash of " + item + " must be consistent", equivalence.hash(item),
+          equivalence.hash(item));
+    }
+  }
+}
diff --git a/guava-testlib/src/com/google/common/testing/FakeTicker.java b/guava-testlib/src/com/google/common/testing/FakeTicker.java
new file mode 100644
index 0000000..9f32120
--- /dev/null
+++ b/guava-testlib/src/com/google/common/testing/FakeTicker.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.testing;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Ticker;
+
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicLong;
+
+/**
+ * A Ticker whose value can be advanced programmatically in test.
+ * <p>
+ * This class is thread-safe.
+ *
+ * @author Jige Yu
+ * @since 10.0
+ */
+@Beta
+@GwtCompatible
+public class FakeTicker extends Ticker {
+
+  private final AtomicLong nanos = new AtomicLong();
+
+  /** Advances the ticker value by {@code time} in {@code timeUnit}. */
+  public FakeTicker advance(long time, TimeUnit timeUnit) {
+    return advance(timeUnit.toNanos(time));
+  }
+
+  /** Advances the ticker value by {@code nanoseconds}. */
+  public FakeTicker advance(long nanoseconds) {
+    nanos.addAndGet(nanoseconds);
+    return this;
+  }
+
+  @Override public long read() {
+    return nanos.get();
+  }
+}
diff --git a/guava-testlib/src/com/google/common/testing/GcFinalization.java b/guava-testlib/src/com/google/common/testing/GcFinalization.java
new file mode 100644
index 0000000..e541793
--- /dev/null
+++ b/guava-testlib/src/com/google/common/testing/GcFinalization.java
@@ -0,0 +1,247 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.testing;
+
+import static java.util.concurrent.TimeUnit.SECONDS;
+
+import com.google.common.annotations.Beta;
+
+import java.lang.ref.WeakReference;
+import java.util.concurrent.CancellationException;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeoutException;
+
+/**
+ * Testing utilities relating to garbage collection finalization.
+ *
+ * <p>Use this class to test code triggered by <em>finalization</em>, that is, one of the
+ * following actions taken by the java garbage collection system:
+ *
+ * <ul>
+ * <li>invoking the {@code finalize} methods of unreachable objects
+ * <li>clearing weak references to unreachable referents
+ * <li>enqueuing weak references to unreachable referents in their reference queue
+ * </ul>
+ *
+ * <p>This class uses (possibly repeated) invocations of {@link java.lang.System#gc()} to cause
+ * finalization to happen.  However, a call to {@code System.gc()} is specified to be no more
+ * than a hint, so this technique may fail at the whim of the JDK implementation, for example if
+ * a user specified the JVM flag {@code -XX:+DisableExplicitGC}.  But in practice, it works very
+ * well for ordinary tests.
+ *
+ * <p>Failure of the expected event to occur within an implementation-defined "reasonable" time
+ * period or an interrupt while waiting for the expected event will result in a {@link
+ * RuntimeException}.
+ *
+ * <p>Here's an example that tests a {@code finalize} method:
+ *
+ * <pre>   {@code
+ *   final CountDownLatch latch = new CountDownLatch(1);
+ *   Object x = new MyClass() {
+ *     ...
+ *     protected void finalize() { latch.countDown(); ... }
+ *   };
+ *   x = null;  // Hint to the JIT that x is unreachable
+ *   GcFinalization.await(latch);
+ * }</pre>
+ *
+ * <p>Here's an example that uses a user-defined finalization predicate:
+ *
+ * <pre>   {@code
+ *   final WeakHashMap<Object, Object> map = new WeakHashMap<Object, Object>();
+ *   map.put(new Object(), Boolean.TRUE);
+ *   GcFinalization.awaitDone(new FinalizationPredicate() {
+ *     public boolean isDone() {
+ *       return map.isEmpty();
+ *     }
+ *   });
+ * }</pre>
+ *
+ * <p>This class cannot currently be used to test soft references, since this class does not try to
+ * create the memory pressure required to cause soft references to be cleared.
+ *
+ * <p>This class only provides testing utilities.  It is not designed for direct use in production
+ * or for benchmarking.
+ *
+ * @author schmoe@google.com (mike nonemacher)
+ * @author martinrb@google.com (Martin Buchholz)
+ * @since 11.0
+ */
+@Beta
+public final class GcFinalization {
+  private GcFinalization() {}
+
+  /**
+   * 10 seconds ought to be long enough for any object to be GC'ed and finalized.  Unless we have a
+   * gigantic heap, in which case we scale by heap size.
+   */
+  private static long timeoutSeconds() {
+    // This class can make no hard guarantees.  The methods in this class are inherently flaky, but
+    // we try hard to make them robust in practice.  We could additionally try to add in a system
+    // load timeout multiplier.  Or we could try to use a CPU time bound instead of wall clock time
+    // bound.  But these ideas are harder to implement.  We do not try to detect or handle a
+    // user-specified -XX:+DisableExplicitGC.
+    //
+    // TODO(user): Consider using
+    // java/lang/management/OperatingSystemMXBean.html#getSystemLoadAverage()
+    //
+    // TODO(user): Consider scaling by number of mutator threads,
+    // e.g. using Thread#activeCount()
+    return Math.max(10L, Runtime.getRuntime().totalMemory() / (32L * 1024L * 1024L));
+  }
+
+  /**
+   * Waits until the given future {@linkplain Future#isDone is done}, invoking the garbage
+   * collector as necessary to try to ensure that this will happen.
+   *
+   * @throws RuntimeException if timed out or interrupted while waiting
+   */
+  public static void awaitDone(Future<?> future) {
+    if (future.isDone()) {
+      return;
+    }
+    final long timeoutSeconds = timeoutSeconds();
+    final long deadline = System.nanoTime() + SECONDS.toNanos(timeoutSeconds);
+    do {
+      System.runFinalization();
+      if (future.isDone()) {
+        return;
+      }
+      System.gc();
+      try {
+        future.get(1L, SECONDS);
+        return;
+      } catch (CancellationException ok) {
+        return;
+      } catch (ExecutionException ok) {
+        return;
+      } catch (InterruptedException ie) {
+        throw new RuntimeException("Unexpected interrupt while waiting for future", ie);
+      } catch (TimeoutException tryHarder) {
+        /* OK */
+      }
+    } while (System.nanoTime() - deadline < 0);
+    throw new RuntimeException(
+        String.format("Future not done within %d second timeout", timeoutSeconds));
+  }
+
+  /**
+   * Waits until the given latch has {@linkplain CountDownLatch#countDown counted down} to zero,
+   * invoking the garbage collector as necessary to try to ensure that this will happen.
+   *
+   * @throws RuntimeException if timed out or interrupted while waiting
+   */
+  public static void await(CountDownLatch latch) {
+    if (latch.getCount() == 0) {
+      return;
+    }
+    final long timeoutSeconds = timeoutSeconds();
+    final long deadline = System.nanoTime() + SECONDS.toNanos(timeoutSeconds);
+    do {
+      System.runFinalization();
+      if (latch.getCount() == 0) {
+        return;
+      }
+      System.gc();
+      try {
+        if (latch.await(1L, SECONDS)) {
+          return;
+        }
+      } catch (InterruptedException ie) {
+        throw new RuntimeException("Unexpected interrupt while waiting for latch", ie);
+      }
+    } while (System.nanoTime() - deadline < 0);
+    throw new RuntimeException(
+        String.format("Latch failed to count down within %d second timeout", timeoutSeconds));
+  }
+
+  /**
+   * Creates a garbage object that counts down the latch in its finalizer.  Sequestered into a
+   * separate method to make it somewhat more likely to be unreachable.
+   */
+  private static void createUnreachableLatchFinalizer(final CountDownLatch latch) {
+    new Object() { @Override protected void finalize() { latch.countDown(); }};
+  }
+
+  /**
+   * A predicate that is expected to return true subsequent to <em>finalization</em>, that is, one
+   * of the following actions taken by the garbage collector when performing a full collection in
+   * response to {@link System#gc()}:
+   *
+   * <ul>
+   * <li>invoking the {@code finalize} methods of unreachable objects
+   * <li>clearing weak references to unreachable referents
+   * <li>enqueuing weak references to unreachable referents in their reference queue
+   * </ul>
+   */
+  public interface FinalizationPredicate {
+    boolean isDone();
+  }
+
+  /**
+   * Waits until the given predicate returns true, invoking the garbage collector as necessary to
+   * try to ensure that this will happen.
+   *
+   * @throws RuntimeException if timed out or interrupted while waiting
+   */
+  public static void awaitDone(FinalizationPredicate predicate) {
+    if (predicate.isDone()) {
+      return;
+    }
+    final long timeoutSeconds = timeoutSeconds();
+    final long deadline = System.nanoTime() + SECONDS.toNanos(timeoutSeconds);
+    do {
+      System.runFinalization();
+      if (predicate.isDone()) {
+        return;
+      }
+      CountDownLatch done = new CountDownLatch(1);
+      createUnreachableLatchFinalizer(done);
+      await(done);
+      if (predicate.isDone()) {
+        return;
+      }
+    } while (System.nanoTime() - deadline < 0);
+    throw new RuntimeException(
+        String.format("Predicate did not become true within %d second timeout", timeoutSeconds));
+  }
+
+  /**
+   * Waits until the given weak reference is cleared, invoking the garbage collector as necessary
+   * to try to ensure that this will happen.
+   *
+   * <p>This is a convenience method, equivalent to:
+   * <pre>   {@code
+   *   awaitDone(new FinalizationPredicate() {
+   *     public boolean isDone() {
+   *       return ref.get() == null;
+   *     }
+   *   });
+   * }</pre>
+   *
+   * @throws RuntimeException if timed out or interrupted while waiting
+   */
+  public static void awaitClear(final WeakReference<?> ref) {
+    awaitDone(new FinalizationPredicate() {
+      public boolean isDone() {
+        return ref.get() == null;
+      }
+    });
+  }
+}
diff --git a/guava-testlib/src/com/google/common/testing/NullPointerTester.java b/guava-testlib/src/com/google/common/testing/NullPointerTester.java
new file mode 100644
index 0000000..1142056
--- /dev/null
+++ b/guava-testlib/src/com/google/common/testing/NullPointerTester.java
@@ -0,0 +1,321 @@
+/*
+ * Copyright (C) 2005 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.testing;
+
+import com.google.common.annotations.Beta;
+import com.google.common.base.Function;
+import com.google.common.base.Functions;
+import com.google.common.base.Predicate;
+import com.google.common.base.Predicates;
+import com.google.common.base.Supplier;
+import com.google.common.base.Suppliers;
+import com.google.common.collect.Iterators;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+
+import junit.framework.Assert;
+import junit.framework.AssertionFailedError;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Member;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.SortedSet;
+import java.util.TreeSet;
+import java.util.concurrent.TimeUnit;
+import java.util.regex.Pattern;
+
+import javax.annotation.Nullable;
+
+/**
+ * A test utility that verifies that your methods throw {@link
+ * NullPointerException} or {@link UnsupportedOperationException} whenever any
+ * of their parameters are null. To use it, you must first provide valid default
+ * values for the parameter types used by the class.
+ *
+ * @author Kevin Bourrillion
+ * @since 10.0
+ */
+@Beta
+public final class NullPointerTester {
+  private final Map<Class<?>, Object> defaults = Maps.newHashMap();
+  private final List<Member> ignoredMembers = Lists.newArrayList();
+
+  public NullPointerTester() {
+    setCommonDefaults();
+  }
+
+  private final void setCommonDefaults() {
+    setDefault(Appendable.class, new StringBuilder());
+    setDefault(CharSequence.class, "");
+    setDefault(Class.class, Class.class);
+    setDefault(Collection.class, Collections.emptySet());
+    setDefault(Comparable.class, 0);
+    setDefault(Comparator.class, Collections.reverseOrder());
+    setDefault(Function.class, Functions.identity());
+    setDefault(Integer.class, 0);
+    setDefault(Iterable.class, Collections.emptySet());
+    setDefault(Iterator.class, Iterators.emptyIterator());
+    setDefault(List.class, Collections.emptyList());
+    setDefault(Map.class, Collections.emptyMap());
+    setDefault(Object.class, new Object());
+    setDefault(Object[].class, new Object[0]);
+    setDefault(Pattern.class, Pattern.compile(""));
+    setDefault(Predicate.class, Predicates.alwaysTrue());
+    setDefault(Set.class, Collections.emptySet());
+    setDefault(SortedSet.class, new TreeSet());
+    setDefault(String.class, "");
+    setDefault(Supplier.class, Suppliers.ofInstance(1));
+    setDefault(Throwable.class, new Exception());
+    setDefault(TimeUnit.class, TimeUnit.SECONDS);
+    setDefault(int.class, 0);
+    setDefault(long.class, 0L);
+    setDefault(short.class, (short) 0);
+    setDefault(char.class, 'a');
+    setDefault(byte.class, (byte) 0);
+    setDefault(float.class, 0.0f);
+    setDefault(double.class, 0.0d);
+    setDefault(boolean.class, false);
+  }
+
+  /**
+   * Sets a default value that can be used for any parameter of type
+   * {@code type}. Returns this object.
+   */
+  public <T> NullPointerTester setDefault(Class<T> type, T value) {
+    defaults.put(type, value);
+    return this;
+  }
+
+  /**
+   * Ignore a member (constructor or method) in testAllXxx methods. Returns
+   * this object.
+   */
+  public NullPointerTester ignore(Member member) {
+    ignoredMembers.add(member);
+    return this;
+  }
+
+  /**
+   * Runs {@link #testConstructor} on every public constructor in class {@code
+   * c}.
+   */
+  public void testAllPublicConstructors(Class<?> c) throws Exception {
+    for (Constructor<?> constructor : c.getDeclaredConstructors()) {
+      if (isPublic(constructor) && !isStatic(constructor)
+          && !isIgnored(constructor)) {
+        testConstructor(constructor);
+      }
+    }
+  }
+
+  /**
+   * Runs {@link #testMethod} on every public static method in class
+   * {@code c}.
+   */
+  public void testAllPublicStaticMethods(Class<?> c) throws Exception {
+    for (Method method : c.getDeclaredMethods()) {
+      if (isPublic(method) && isStatic(method) && !isIgnored(method)) {
+        testMethod(null, method);
+      }
+    }
+  }
+
+  /**
+   * Runs {@link #testMethod} on every public instance method of
+   * {@code instance}.
+   */
+  public void testAllPublicInstanceMethods(Object instance) throws Exception {
+    Class<?> c = instance.getClass();
+    for (Method method : c.getDeclaredMethods()) {
+      if (isPublic(method) && !isStatic(method) && !isIgnored(method)) {
+        testMethod(instance, method);
+      }
+    }
+  }
+
+  /**
+   * Verifies that {@code method} produces a {@link NullPointerException}
+   * or {@link UnsupportedOperationException} whenever <i>any</i> of its
+   * non-{@link Nullable} parameters are null.
+   *
+   * @param instance the instance to invoke {@code method} on, or null if
+   *     {@code method} is static
+   */
+  public void testMethod(Object instance, Method method) throws Exception {
+    Class<?>[] types = method.getParameterTypes();
+    for (int nullIndex = 0; nullIndex < types.length; nullIndex++) {
+      testMethodParameter(instance, method, nullIndex);
+    }
+  }
+
+  /**
+   * Verifies that {@code ctor} produces a {@link NullPointerException} or
+   * {@link UnsupportedOperationException} whenever <i>any</i> of its
+   * non-{@link Nullable} parameters are null.
+   */
+  public void testConstructor(Constructor<?> ctor) throws Exception {
+    Class<?>[] types = ctor.getParameterTypes();
+    for (int nullIndex = 0; nullIndex < types.length; nullIndex++) {
+      testConstructorParameter(ctor, nullIndex);
+    }
+  }
+
+  /**
+   * Verifies that {@code method} produces a {@link NullPointerException} or
+   * {@link UnsupportedOperationException} when the parameter in position {@code
+   * paramIndex} is null.  If this parameter is marked {@link Nullable}, this
+   * method does nothing.
+   *
+   * @param instance the instance to invoke {@code method} on, or null if
+   *     {@code method} is static
+   */
+  public void testMethodParameter(Object instance, final Method method,
+      int paramIndex) throws Exception {
+    method.setAccessible(true);
+    testFunctorParameter(instance, new Functor() {
+        @Override public Class<?>[] getParameterTypes() {
+          return method.getParameterTypes();
+        }
+        @Override public Annotation[][] getParameterAnnotations() {
+          return method.getParameterAnnotations();
+        }
+        @Override public void invoke(Object instance, Object[] params)
+            throws InvocationTargetException, IllegalAccessException {
+          method.invoke(instance, params);
+        }
+        @Override public String toString() {
+          return method.getName()
+              + "(" + Arrays.toString(getParameterTypes()) + ")";
+        }
+      }, paramIndex, method.getDeclaringClass());
+  }
+
+  /**
+   * Verifies that {@code ctor} produces a {@link NullPointerException} or
+   * {@link UnsupportedOperationException} when the parameter in position {@code
+   * paramIndex} is null.  If this parameter is marked {@link Nullable}, this
+   * method does nothing.
+   */
+  public void testConstructorParameter(final Constructor<?> ctor,
+      int paramIndex) throws Exception {
+    ctor.setAccessible(true);
+    testFunctorParameter(null, new Functor() {
+        @Override public Class<?>[] getParameterTypes() {
+          return ctor.getParameterTypes();
+        }
+        @Override public Annotation[][] getParameterAnnotations() {
+          return ctor.getParameterAnnotations();
+        }
+        @Override public void invoke(Object instance, Object[] params)
+            throws InvocationTargetException, IllegalAccessException,
+            InstantiationException {
+          ctor.newInstance(params);
+        }
+      }, paramIndex, ctor.getDeclaringClass());
+  }
+
+  /**
+   * Verifies that {@code func} produces a {@link NullPointerException} or
+   * {@link UnsupportedOperationException} when the parameter in position {@code
+   * paramIndex} is null.  If this parameter is marked {@link Nullable}, this
+   * method does nothing.
+   *
+   * @param instance the instance to invoke {@code func} on, or null if
+   *     {@code func} is static
+   */
+  private void testFunctorParameter(Object instance, Functor func,
+      int paramIndex, Class<?> testedClass) throws Exception {
+    if (parameterIsPrimitiveOrNullable(func, paramIndex)) {
+      return; // there's nothing to test
+    }
+    Object[] params = buildParamList(func, paramIndex);
+    try {
+      func.invoke(instance, params);
+      Assert.fail("No exception thrown from " + func +
+          Arrays.toString(params) + " for " + testedClass);
+    } catch (InvocationTargetException e) {
+      Throwable cause = e.getCause();
+      if (cause instanceof NullPointerException ||
+          cause instanceof UnsupportedOperationException) {
+        return;
+      }
+      AssertionFailedError error = new AssertionFailedError(
+          "wrong exception thrown from " + func + ": " + cause);
+      error.initCause(cause);
+      throw error;
+    }
+  }
+
+  private static boolean parameterIsPrimitiveOrNullable(
+      Functor func, int paramIndex) {
+    if (func.getParameterTypes()[paramIndex].isPrimitive()) {
+      return true;
+    }
+    Annotation[] annotations = func.getParameterAnnotations()[paramIndex];
+    for (Annotation annotation : annotations) {
+      if (annotation instanceof Nullable) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  private Object[] buildParamList(Functor func, int indexOfParamToSetToNull) {
+    Class<?>[] types = func.getParameterTypes();
+    Object[] params = new Object[types.length];
+
+    for (int i = 0; i < types.length; i++) {
+      if (i != indexOfParamToSetToNull) {
+        params[i] = defaults.get(types[i]);
+        if (!parameterIsPrimitiveOrNullable(func, i)) {
+          Assert.assertTrue("No default value found for " + types[i].getName(),
+              params[i] != null);
+        }
+      }
+    }
+    return params;
+  }
+
+  private interface Functor {
+    Class<?>[] getParameterTypes();
+    Annotation[][] getParameterAnnotations();
+    void invoke(Object o, Object[] params) throws Exception;
+  }
+
+  private static boolean isPublic(Member member) {
+    return Modifier.isPublic(member.getModifiers());
+  }
+
+  private static boolean isStatic(Member member) {
+    return Modifier.isStatic(member.getModifiers());
+  }
+
+  private boolean isIgnored(Member member) {
+    return member.isSynthetic() || ignoredMembers.contains(member);
+  }
+}
diff --git a/guava-testlib/src/com/google/common/testing/Platform.java b/guava-testlib/src/com/google/common/testing/Platform.java
new file mode 100644
index 0000000..a7c02ca
--- /dev/null
+++ b/guava-testlib/src/com/google/common/testing/Platform.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.testing;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+
+/**
+ * Methods factored out so that they can be emulated differently in GWT.
+ *
+ * @author Chris Povirk
+ */
+final class Platform {
+  /**
+   * Serializes and deserializes the specified object.
+   */
+  @SuppressWarnings("unchecked")
+  static <T> T reserialize(T object) {
+    checkNotNull(object);
+    ByteArrayOutputStream bytes = new ByteArrayOutputStream();
+    try {
+      ObjectOutputStream out = new ObjectOutputStream(bytes);
+      out.writeObject(object);
+      ObjectInputStream in = new ObjectInputStream(
+          new ByteArrayInputStream(bytes.toByteArray()));
+      return (T) in.readObject();
+    } catch (IOException e) {
+      throw new RuntimeException(e);
+    } catch (ClassNotFoundException e) {
+      throw new RuntimeException(e);
+    }
+  }
+
+  private Platform() {}
+}
diff --git a/guava-testlib/src/com/google/common/testing/RelationshipTester.java b/guava-testlib/src/com/google/common/testing/RelationshipTester.java
new file mode 100644
index 0000000..88bea63
--- /dev/null
+++ b/guava-testlib/src/com/google/common/testing/RelationshipTester.java
@@ -0,0 +1,127 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.testing;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Lists;
+
+import junit.framework.AssertionFailedError;
+
+import java.util.List;
+
+/**
+ * Tests a collection of objects according to the rules specified in a
+ * {@link RelationshipAssertion}.
+ *
+ * @author Gregory Kick
+ */
+@GwtCompatible
+final class RelationshipTester<T> {
+  private final List<ImmutableList<T>> groups = Lists.newArrayList();
+  private final RelationshipAssertion<T> assertion;
+
+  RelationshipTester(RelationshipAssertion<T> assertion) {
+    this.assertion = checkNotNull(assertion);
+  }
+
+  public RelationshipTester<T> addRelatedGroup(Iterable<? extends T> group) {
+    groups.add(ImmutableList.copyOf(group));
+    return this;
+  }
+
+  public void test() {
+    for (int groupNumber = 0; groupNumber < groups.size(); groupNumber++) {
+      ImmutableList<T> group = groups.get(groupNumber);
+      for (int itemNumber = 0; itemNumber < group.size(); itemNumber++) {
+        // check related items in same group
+        for (int relatedItemNumber = 0; relatedItemNumber < group.size(); relatedItemNumber++) {
+          if (itemNumber != relatedItemNumber) {
+            assertRelated(groupNumber, itemNumber, relatedItemNumber);
+          }
+        }
+        // check unrelated items in all other groups
+        for (int unrelatedGroupNumber = 0; unrelatedGroupNumber < groups.size();
+            unrelatedGroupNumber++) {
+          if (groupNumber != unrelatedGroupNumber) {
+            ImmutableList<T> unrelatedGroup = groups.get(unrelatedGroupNumber);
+            for (int unrelatedItemNumber = 0; unrelatedItemNumber < unrelatedGroup.size();
+                unrelatedItemNumber++) {
+              assertUnrelated(groupNumber, itemNumber, unrelatedGroupNumber, unrelatedItemNumber);
+            }
+          }
+        }
+      }
+    }
+  }
+
+  private void assertRelated(int groupNumber, int itemNumber, int relatedItemNumber) {
+    ImmutableList<T> group = groups.get(groupNumber);
+    T item = group.get(itemNumber);
+    T related = group.get(relatedItemNumber);
+    try {
+      assertion.assertRelated(item, related);
+    } catch (AssertionFailedError e) {
+      // TODO(gak): special handling for ComparisonFailure?
+      throw new AssertionFailedError(e.getMessage()
+          .replace("$ITEM", itemString(item, groupNumber, itemNumber))
+          .replace("$RELATED", itemString(related, groupNumber, relatedItemNumber)));
+    }
+  }
+
+  private void assertUnrelated(int groupNumber, int itemNumber, int unrelatedGroupNumber,
+      int unrelatedItemNumber) {
+    T item = groups.get(groupNumber).get(itemNumber);
+    T unrelated = groups.get(unrelatedGroupNumber).get(unrelatedItemNumber);
+    try {
+      assertion.assertUnrelated(item, unrelated);
+    } catch (AssertionFailedError e) {
+      // TODO(gak): special handling for ComparisonFailure?
+      throw new AssertionFailedError(e.getMessage()
+          .replace("$ITEM", itemString(item, groupNumber, itemNumber))
+          .replace("$UNRELATED", itemString(unrelated, unrelatedGroupNumber, unrelatedItemNumber)));
+    }
+  }
+
+  private static String itemString(Object item, int groupNumber, int itemNumber) {
+    return new StringBuilder()
+        .append(item)
+        .append(" [group ")
+        .append(groupNumber + 1)
+        .append(", item ")
+        .append(itemNumber + 1)
+        .append(']')
+        .toString();
+  }
+
+  /**
+   * A strategy for testing the relationship between objects.  Methods are expected to throw
+   * {@link AssertionFailedError} whenever the relationship is violated.
+   *
+   * <p>As a convenience, any occurrence of {@code $ITEM}, {@code $RELATED} or {@code $UNRELATED} in
+   * the error message will be replaced with a string that combines the {@link Object#toString()},
+   * item number and group number of the respective item.
+   *
+   */
+  interface RelationshipAssertion<T> {
+    void assertRelated(T item, T related);
+
+    void assertUnrelated(T item, T unrelated);
+  }
+}
diff --git a/guava-testlib/src/com/google/common/testing/SerializableTester.java b/guava-testlib/src/com/google/common/testing/SerializableTester.java
new file mode 100644
index 0000000..f214ccc
--- /dev/null
+++ b/guava-testlib/src/com/google/common/testing/SerializableTester.java
@@ -0,0 +1,102 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.testing;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+
+import junit.framework.Assert;
+import junit.framework.AssertionFailedError;
+
+/**
+ * Tests serialization and deserialization of an object, optionally asserting
+ * that the resulting object is equal to the original.
+ *
+ * <p><b>GWT warning:</b> Under GWT, both methods simply returns their input,
+ * as proper GWT serialization tests require more setup.  This no-op behavior
+ * allows test authors to intersperse {@code SerializableTester} calls with
+ * other, GWT-compatible tests.
+ *
+ *
+ * @author Mike Bostock
+ * @since 10.0
+ */
+@Beta
+@GwtCompatible // but no-op!
+public final class SerializableTester {
+  private SerializableTester() {}
+
+  /**
+   * Serializes and deserializes the specified object.
+   *
+   * <p><b>GWT warning:</b> Under GWT, this method simply returns its input, as
+   * proper GWT serialization tests require more setup.  This no-op behavior
+   * allows test authors to intersperse {@code SerializableTester} calls with
+   * other, GWT-compatible tests.
+   *
+   * <p>Note that the specified object may not be known by the compiler to be a
+   * {@link java.io.Serializable} instance, and is thus declared an
+   * {@code Object}. For example, it might be declared as a {@code List}.
+   *
+   * @return the re-serialized object
+   * @throws RuntimeException if the specified object was not successfully
+   *     serialized or deserialized
+   */
+  @SuppressWarnings("unchecked")
+  public static <T> T reserialize(T object) {
+    return Platform.reserialize(object);
+  }
+
+  /**
+   * Serializes and deserializes the specified object and verifies that the
+   * re-serialized object is equal to the provided object, that the hashcodes
+   * are identical, and that the class of the re-serialized object is identical
+   * to that of the original.
+   *
+   * <p><b>GWT warning:</b> Under GWT, this method simply returns its input, as
+   * proper GWT serialization tests require more setup.  This no-op behavior
+   * allows test authors to intersperse {@code SerializableTester} calls with
+   * other, GWT-compatible tests.
+   *
+   * <p>Note that the specified object may not be known by the compiler to be a
+   * {@link java.io.Serializable} instance, and is thus declared an
+   * {@code Object}. For example, it might be declared as a {@code List}.
+   *
+   * <p>Note also that serialization is not in general required to return an
+   * object that is {@linkplain Object#equals equal} to the original, nor is it
+   * required to return even an object of the same class. For example, if
+   * sublists of {@code MyList} instances were serializable, those sublists
+   * might implement a private {@code MySubList} type but serialize as a plain
+   * {@code MyList} to save space. So long as {@code MyList} has all the public
+   * supertypes of {@code MySubList}, this is safe. For these cases, for which
+   * {@code reserializeAndAssert} is too strict, use {@link #reserialize}.
+   *
+   * @return the re-serialized object
+   * @throws RuntimeException if the specified object was not successfully
+   *     serialized or deserialized
+   * @throws AssertionFailedError if the re-serialized object is not equal to
+   *     the original object, or if the hashcodes are different.
+   */
+  public static <T> T reserializeAndAssert(T object) {
+    T copy = reserialize(object);
+    new EqualsTester()
+        .addEqualityGroup(object, copy)
+        .testEquals();
+    Assert.assertEquals(object.getClass(), copy.getClass());
+    return copy;
+  }
+}
diff --git a/guava-testlib/src/com/google/common/testing/SloppyTearDown.java b/guava-testlib/src/com/google/common/testing/SloppyTearDown.java
new file mode 100644
index 0000000..bbb60ca
--- /dev/null
+++ b/guava-testlib/src/com/google/common/testing/SloppyTearDown.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.testing;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * Simple utility for when you want to create a {@link TearDown} that may throw
+ * an exception but should not fail a test when it does. (The behavior of a
+ * {@code TearDown} that throws an exception varies; see its documentation for
+ * details.) Use it just like a {@code TearDown}, except override {@link
+ * #sloppyTearDown()} instead.
+ *
+ * @author Luiz-Otavio Zorzella
+ * @since 10.0
+ */
+@Beta
+@GwtCompatible
+public abstract class SloppyTearDown implements TearDown {
+  public static final Logger logger =
+      Logger.getLogger(SloppyTearDown.class.getName());
+
+  @Override
+  public final void tearDown() {
+    try {
+      sloppyTearDown();
+    } catch (Throwable t) {
+      logger.log(Level.INFO,
+          "exception thrown during tearDown: " + t.getMessage(), t);
+    }
+  }
+
+  public abstract void sloppyTearDown() throws Exception;
+
+}
diff --git a/guava-testlib/src/com/google/common/testing/TearDown.java b/guava-testlib/src/com/google/common/testing/TearDown.java
new file mode 100644
index 0000000..c64a4f7
--- /dev/null
+++ b/guava-testlib/src/com/google/common/testing/TearDown.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.testing;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+
+/**
+ * An object that can perform a {@link #tearDown} operation.
+ *
+ * @author Kevin Bourrillion
+ * @since 10.0
+ */
+@Beta
+@GwtCompatible
+public interface TearDown {
+  /**
+   * Performs a <b>single</b> tear-down operation. See test-libraries-for-java's
+   * {@code com.google.common.testing.junit3.TearDownTestCase} and
+   * {@code com.google.common.testing.junit4.TearDownTestCase} for example.
+   *
+   * <p>A failing {@link TearDown} may or may not fail a tl4j test, depending on
+   * the version of JUnit test case you are running under. To avoid failing in
+   * the face of an exception regardless of JUnit version, implement a {@link
+   * SloppyTearDown} instead.
+   *
+   * <p>tl4j details: For backwards compatibility, {@code
+   * junit3.TearDownTestCase} currently does not fail a test when an exception
+   * is thrown from one of its {@link TearDown}s, but this is subject to
+   * change. Also, {@code junit4.TearDownTestCase} will.
+   *
+   * @throws Exception for any reason. {@code TearDownTestCase} ensures that
+   *     any exception thrown will not interfere with other TearDown
+   *     operations.
+   */
+  void tearDown() throws Exception;
+}
diff --git a/guava-testlib/src/com/google/common/testing/TearDownAccepter.java b/guava-testlib/src/com/google/common/testing/TearDownAccepter.java
new file mode 100644
index 0000000..526ddc7
--- /dev/null
+++ b/guava-testlib/src/com/google/common/testing/TearDownAccepter.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.testing;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+
+/**
+ * Any object which can accept registrations of {@link TearDown} instances.
+ *
+ * @author Kevin Bourrillion
+ * @since 10.0
+ */
+@Beta
+@GwtCompatible
+public interface TearDownAccepter {
+  /**
+   * Registers a TearDown implementor which will be run after the test proper.
+   *
+   * <p>In JUnit4 language, that means as an {@code @After}.
+   *
+   * <p>In JUnit3 language, that means during the
+   * {@link junit.framework.TestCase#tearDown()} step.
+   */
+  void addTearDown(TearDown tearDown);
+}
diff --git a/guava-testlib/src/com/google/common/testing/TearDownStack.java b/guava-testlib/src/com/google/common/testing/TearDownStack.java
new file mode 100644
index 0000000..e579d82
--- /dev/null
+++ b/guava-testlib/src/com/google/common/testing/TearDownStack.java
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.testing;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * A {@code TearDownStack} contains a stack of {@link TearDown} instances.
+ *
+ * @author Kevin Bourrillion
+ * @since 10.0
+ */
+@Beta
+@GwtCompatible
+public class TearDownStack implements TearDownAccepter {
+  public static final Logger logger
+      = Logger.getLogger(TearDownStack.class.getName());
+
+  final LinkedList<TearDown> stack = new LinkedList<TearDown>();
+
+  private final boolean suppressThrows;
+
+  public TearDownStack() {
+    this.suppressThrows = false;
+  }
+
+  public TearDownStack(boolean suppressThrows) {
+    this.suppressThrows = suppressThrows;
+  }
+
+  @Override
+  public final void addTearDown(TearDown tearDown) {
+    stack.addFirst(tearDown);
+  }
+
+  /**
+   * Causes teardown to execute.
+   */
+  public final void runTearDown() {
+    List<Throwable> exceptions = new ArrayList<Throwable>();
+    for (TearDown tearDown : stack) {
+      try {
+        tearDown.tearDown();
+      } catch (Throwable t) {
+        if (suppressThrows) {
+          TearDownStack.logger.log(Level.INFO,
+              "exception thrown during tearDown: " + t.getMessage(), t);
+        } else {
+          exceptions.add(t);
+        }
+      }
+    }
+    stack.clear();
+    if ((!suppressThrows) && (exceptions.size() > 0)) {
+      throw ClusterException.create(exceptions);
+    }
+  }
+}
diff --git a/guava-testlib/src/com/google/common/testing/TestLogHandler.java b/guava-testlib/src/com/google/common/testing/TestLogHandler.java
new file mode 100644
index 0000000..1d45554
--- /dev/null
+++ b/guava-testlib/src/com/google/common/testing/TestLogHandler.java
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.testing;
+
+import com.google.common.annotations.Beta;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.logging.Handler;
+import java.util.logging.LogRecord;
+
+/**
+ * Tests may use this to intercept messages that are logged by the code under
+ * test.  Example:
+ * <pre>
+ *   TestLogHandler handler;
+ *
+ *   protected void setUp() throws Exception {
+ *     super.setUp();
+ *     handler = new TestLogHandler();
+ *     SomeClass.logger.addHandler(handler);
+ *     addTearDown(new TearDown() {
+ *       public void tearDown() throws Exception {
+ *         SomeClass.logger.removeHandler(handler);
+ *       }
+ *     });
+ *   }
+ *
+ *   public void test() {
+ *     SomeClass.foo();
+ *     LogRecord firstRecord = handler.getStoredLogRecords().get(0);
+ *     assertEquals("some message", firstRecord.getMessage());
+ *   }
+ * </pre>
+ *
+ * @author Kevin Bourrillion
+ * @since 10.0
+ */
+@Beta
+public class TestLogHandler extends Handler {
+  /** We will keep a private list of all logged records */
+  private final List<LogRecord> list =
+      Collections.synchronizedList(new ArrayList<LogRecord>());
+
+  /**
+   * Adds the most recently logged record to our list.
+   */
+  @Override
+  public void publish(LogRecord record) {
+    list.add(record);
+  }
+
+  @Override
+  public void flush() { }
+
+  @Override
+  public void close() { }
+
+  public void clear() {
+    list.clear();
+  }
+
+  /**
+   * Fetch the list of logged records
+   * @return unmodifiable LogRecord list of all logged records
+   */
+  public List<LogRecord> getStoredLogRecords() {
+    List<LogRecord> result = new ArrayList<LogRecord>(list);
+    return Collections.unmodifiableList(result);
+  }
+}
diff --git a/guava-testlib/src/com/google/common/util/concurrent/testing/AbstractCheckedFutureTest.java b/guava-testlib/src/com/google/common/util/concurrent/testing/AbstractCheckedFutureTest.java
new file mode 100644
index 0000000..65ad829
--- /dev/null
+++ b/guava-testlib/src/com/google/common/util/concurrent/testing/AbstractCheckedFutureTest.java
@@ -0,0 +1,157 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent.testing;
+
+import com.google.common.annotations.Beta;
+import com.google.common.util.concurrent.CheckedFuture;
+import com.google.common.util.concurrent.ListenableFuture;
+
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Test case to make sure the {@link CheckedFuture#checkedGet()} and
+ * {@link CheckedFuture#checkedGet(long, TimeUnit)} methods work correctly.
+ *
+ * @author Sven Mawson
+ * @since 10.0
+ */
+@Beta
+public abstract class AbstractCheckedFutureTest
+    extends AbstractListenableFutureTest {
+
+  /**
+   * More specific type for the create method.
+   */
+  protected abstract <V> CheckedFuture<V, ?> createCheckedFuture(V value,
+      Exception except, CountDownLatch waitOn);
+
+  /**
+   * Checks that the exception is the correct type of cancellation exception.
+   */
+  protected abstract void checkCancelledException(Exception e);
+
+  /**
+   * Checks that the exception is the correct type of execution exception.
+   */
+  protected abstract void checkExecutionException(Exception e);
+
+  /**
+   * Checks that the exception is the correct type of interruption exception.
+   */
+  protected abstract void checkInterruptedException(Exception e);
+
+  @Override
+  protected <V> ListenableFuture<V> createListenableFuture(V value,
+      Exception except, CountDownLatch waitOn) {
+    return createCheckedFuture(value, except, waitOn);
+  }
+
+  /**
+   * Tests that the {@link CheckedFuture#checkedGet()} method throws the correct
+   * type of cancellation exception when it is cancelled.
+   */
+  public void testCheckedGetThrowsApplicationExceptionOnCancellation() {
+
+    final CheckedFuture<Boolean, ?> future =
+        createCheckedFuture(Boolean.TRUE, null, latch);
+
+    assertFalse(future.isDone());
+    assertFalse(future.isCancelled());
+
+    new Thread(new Runnable() {
+      @Override
+      public void run() {
+        future.cancel(true);
+      }
+    }).start();
+
+    try {
+      future.checkedGet();
+      fail("RPC Should have been cancelled.");
+    } catch (Exception e) {
+      checkCancelledException(e);
+    }
+
+    assertTrue(future.isDone());
+    assertTrue(future.isCancelled());
+  }
+
+  public void testCheckedGetThrowsApplicationExceptionOnInterruption()
+      throws InterruptedException {
+
+    final CheckedFuture<Boolean, ?> future =
+        createCheckedFuture(Boolean.TRUE, null, latch);
+
+    final CountDownLatch startingGate = new CountDownLatch(1);
+    final CountDownLatch successLatch = new CountDownLatch(1);
+
+    assertFalse(future.isDone());
+    assertFalse(future.isCancelled());
+
+    Thread getThread = new Thread(new Runnable() {
+      @Override
+      public void run() {
+        startingGate.countDown();
+
+        try {
+          future.checkedGet();
+        } catch (Exception e) {
+          checkInterruptedException(e);
+
+          // This only gets hit if the original call throws an exception and
+          // the check call above passes.
+          successLatch.countDown();
+        }
+      }
+    });
+    getThread.start();
+
+    assertTrue(startingGate.await(500, TimeUnit.MILLISECONDS));
+    getThread.interrupt();
+
+    assertTrue(successLatch.await(500, TimeUnit.MILLISECONDS));
+
+    assertFalse(future.isDone());
+    assertFalse(future.isCancelled());
+  }
+
+  public void testCheckedGetThrowsApplicationExceptionOnError() {
+    final CheckedFuture<Boolean, ?> future =
+        createCheckedFuture(Boolean.TRUE, new Exception("Error"), latch);
+
+    assertFalse(future.isDone());
+    assertFalse(future.isCancelled());
+
+    new Thread(new Runnable() {
+      @Override
+      public void run() {
+        latch.countDown();
+      }
+    }).start();
+
+    try {
+      future.checkedGet();
+      fail();
+    } catch (Exception e) {
+      checkExecutionException(e);
+    }
+
+    assertTrue(future.isDone());
+    assertFalse(future.isCancelled());
+  }
+}
diff --git a/guava-testlib/src/com/google/common/util/concurrent/testing/AbstractListenableFutureTest.java b/guava-testlib/src/com/google/common/util/concurrent/testing/AbstractListenableFutureTest.java
new file mode 100644
index 0000000..e6da973
--- /dev/null
+++ b/guava-testlib/src/com/google/common/util/concurrent/testing/AbstractListenableFutureTest.java
@@ -0,0 +1,246 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent.testing;
+
+import com.google.common.annotations.Beta;
+import com.google.common.util.concurrent.ListenableFuture;
+
+import junit.framework.TestCase;
+
+import java.util.concurrent.CancellationException;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+
+/**
+ * Abstract test case parent for anything implementing {@link ListenableFuture}.
+ * Tests the two get methods and the addListener method.
+ *
+ * @author Sven Mawson
+ * @since 10.0
+ */
+@Beta
+public abstract class AbstractListenableFutureTest extends TestCase {
+
+  protected CountDownLatch latch;
+  protected ListenableFuture<Boolean> future;
+
+  @Override
+  protected void setUp() throws Exception {
+
+    // Create a latch and a future that waits on the latch.
+    latch = new CountDownLatch(1);
+    future = createListenableFuture(Boolean.TRUE, null, latch);
+  }
+
+  @Override
+  protected void tearDown() throws Exception {
+
+    // Make sure we have no waiting threads.
+    latch.countDown();
+  }
+
+  /**
+   * Constructs a listenable future with a value available after the latch
+   * has counted down.
+   */
+  protected abstract <V> ListenableFuture<V> createListenableFuture(
+      V value, Exception except, CountDownLatch waitOn);
+
+  /**
+   * Tests that the {@link Future#get()} method blocks until a value is
+   * available.
+   */
+  public void testGetBlocksUntilValueAvailable() throws Throwable {
+
+    assertFalse(future.isDone());
+    assertFalse(future.isCancelled());
+
+    final CountDownLatch successLatch = new CountDownLatch(1);
+    final Throwable[] badness = new Throwable[1];
+
+    // Wait on the future in a separate thread.
+    new Thread(new Runnable() {
+      @Override
+      public void run() {
+        try {
+          assertSame(Boolean.TRUE, future.get());
+          successLatch.countDown();
+        } catch (Throwable t) {
+          t.printStackTrace();
+          badness[0] = t;
+        }
+      }}).start();
+
+    // Release the future value.
+    latch.countDown();
+
+    assertTrue(successLatch.await(10, TimeUnit.SECONDS));
+
+    if (badness[0] != null) {
+      throw badness[0];
+    }
+
+    assertTrue(future.isDone());
+    assertFalse(future.isCancelled());
+  }
+
+  /**
+   * Tests that the {@link Future#get(long, TimeUnit)} method times out
+   * correctly.
+   */
+  public void testTimeoutOnGetWorksCorrectly() throws InterruptedException,
+      ExecutionException {
+
+    // The task thread waits for the latch, so we expect a timeout here.
+    try {
+      future.get(20, TimeUnit.MILLISECONDS);
+      fail("Should have timed out trying to get the value.");
+    } catch (TimeoutException expected) {
+      // Expected.
+    } finally {
+      latch.countDown();
+    }
+  }
+
+  /**
+   * Tests that a canceled future throws a cancellation exception.
+   *
+   * This method checks the cancel, isCancelled, and isDone methods.
+   */
+  public void testCanceledFutureThrowsCancellation() throws Exception {
+
+    assertFalse(future.isDone());
+    assertFalse(future.isCancelled());
+
+    final CountDownLatch successLatch = new CountDownLatch(1);
+
+    // Run cancellation in a separate thread as an extra thread-safety test.
+    new Thread(new Runnable() {
+      @Override
+      public void run() {
+        try {
+          future.get();
+        } catch (CancellationException expected) {
+          successLatch.countDown();
+        } catch (Exception ignored) {
+          // All other errors are ignored, we expect a cancellation.
+        }
+      }
+    }).start();
+
+    assertFalse(future.isDone());
+    assertFalse(future.isCancelled());
+
+    future.cancel(true);
+
+    assertTrue(future.isDone());
+    assertTrue(future.isCancelled());
+
+    assertTrue(successLatch.await(200, TimeUnit.MILLISECONDS));
+
+    latch.countDown();
+  }
+
+  public void testListenersNotifiedOnError() throws Exception {
+    final CountDownLatch successLatch = new CountDownLatch(1);
+    final CountDownLatch listenerLatch = new CountDownLatch(1);
+
+    ExecutorService exec = Executors.newCachedThreadPool();
+
+    future.addListener(new Runnable() {
+      @Override
+      public void run() {
+        listenerLatch.countDown();
+      }
+    }, exec);
+
+    new Thread(new Runnable() {
+      @Override
+      public void run() {
+        try {
+          future.get();
+        } catch (CancellationException expected) {
+          successLatch.countDown();
+        } catch (Exception ignored) {
+          // No success latch count down.
+        }
+      }
+    }).start();
+
+    future.cancel(true);
+
+    assertTrue(future.isCancelled());
+    assertTrue(future.isDone());
+
+    assertTrue(successLatch.await(200, TimeUnit.MILLISECONDS));
+    assertTrue(listenerLatch.await(200, TimeUnit.MILLISECONDS));
+
+    latch.countDown();
+
+    exec.shutdown();
+    exec.awaitTermination(100, TimeUnit.MILLISECONDS);
+  }
+
+  /**
+   * Tests that all listeners complete, even if they were added before or after
+   * the future was finishing.  Also acts as a concurrency test to make sure the
+   * locking is done correctly when a future is finishing so that no listeners
+   * can be lost.
+   */
+  public void testAllListenersCompleteSuccessfully()
+      throws InterruptedException, ExecutionException {
+
+    ExecutorService exec = Executors.newCachedThreadPool();
+
+    int listenerCount = 20;
+    final CountDownLatch listenerLatch = new CountDownLatch(listenerCount);
+
+    // Test that listeners added both before and after the value is available
+    // get called correctly.
+    for (int i = 0; i < 20; i++) {
+
+      // Right in the middle start up a thread to close the latch.
+      if (i == 10) {
+        new Thread(new Runnable() {
+          @Override
+          public void run() {
+            latch.countDown();
+          }
+        }).start();
+      }
+
+      future.addListener(new Runnable() {
+        @Override
+        public void run() {
+          listenerLatch.countDown();
+        }
+      }, exec);
+    }
+
+    assertSame(Boolean.TRUE, future.get());
+    // Wait for the listener latch to complete.
+    listenerLatch.await(500, TimeUnit.MILLISECONDS);
+
+    exec.shutdown();
+    exec.awaitTermination(500, TimeUnit.MILLISECONDS);
+  }
+}
diff --git a/guava-testlib/src/com/google/common/util/concurrent/testing/MockFutureListener.java b/guava-testlib/src/com/google/common/util/concurrent/testing/MockFutureListener.java
new file mode 100644
index 0000000..d944995
--- /dev/null
+++ b/guava-testlib/src/com/google/common/util/concurrent/testing/MockFutureListener.java
@@ -0,0 +1,92 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent.testing;
+
+import com.google.common.annotations.Beta;
+import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.MoreExecutors;
+
+import junit.framework.Assert;
+
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * A simple mock implementation of {@code Runnable} that can be used for
+ * testing ListenableFutures.
+ *
+ * @author Nishant Thakkar
+ * @since 10.0
+ */
+@Beta
+public class MockFutureListener implements Runnable {
+  private final CountDownLatch countDownLatch;
+  private final ListenableFuture<?> future;
+
+  public MockFutureListener(ListenableFuture<?> future) {
+    this.countDownLatch = new CountDownLatch(1);
+    this.future = future;
+
+    future.addListener(this, MoreExecutors.sameThreadExecutor());
+  }
+
+  @Override
+  public void run() {
+    countDownLatch.countDown();
+  }
+
+  /**
+   * Verify that the listener completes in a reasonable amount of time, and
+   * Asserts that the future returns the expected data.
+   * @throws Throwable if the listener isn't called or if it resulted in a
+   *     throwable or if the result doesn't match the expected value.
+   */
+  public void assertSuccess(Object expectedData) throws Throwable {
+    // Verify that the listener executed in a reasonable amount of time.
+    Assert.assertTrue(countDownLatch.await(1L, TimeUnit.SECONDS));
+
+    try {
+      Assert.assertEquals(expectedData, future.get());
+    } catch (ExecutionException e) {
+      throw e.getCause();
+    }
+  }
+
+  /**
+   * Verify that the listener completes in a reasonable amount of time, and
+   * Asserts that the future throws an {@code ExecutableException} and that the
+   * cause of the {@code ExecutableException} is {@code expectedCause}.
+   */
+  public void assertException(Throwable expectedCause) throws Exception {
+    // Verify that the listener executed in a reasonable amount of time.
+    Assert.assertTrue(countDownLatch.await(1L, TimeUnit.SECONDS));
+
+    try {
+      future.get();
+      Assert.fail("This call was supposed to throw an ExecutionException");
+    } catch (ExecutionException expected) {
+      Assert.assertSame(expectedCause, expected.getCause());
+    }
+  }
+
+  public void assertTimeout() throws Exception {
+    // Verify that the listener does not get called in a reasonable amount of
+    // time.
+    Assert.assertFalse(countDownLatch.await(1L, TimeUnit.SECONDS));
+  }
+}
diff --git a/guava-tests/lib/libtruth-gwt.jar b/guava-tests/lib/libtruth-gwt.jar
new file mode 100644
index 0000000..5d61f52
--- /dev/null
+++ b/guava-tests/lib/libtruth-gwt.jar
Binary files differ
diff --git a/guava-tests/lib/libtruth.jar b/guava-tests/lib/libtruth.jar
new file mode 100644
index 0000000..a2ee08d
--- /dev/null
+++ b/guava-tests/lib/libtruth.jar
Binary files differ
diff --git a/guava-tests/pom.xml b/guava-tests/pom.xml
new file mode 100644
index 0000000..ba0c62a
--- /dev/null
+++ b/guava-tests/pom.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>com.google.guava</groupId>
+    <artifactId>guava-parent</artifactId>
+    <version>11.0.2</version>
+  </parent>
+  <artifactId>guava-tests</artifactId>
+  <name>Guava Unit Tests</name>
+  <description>
+    The unit tests for the Guava libraries - separated into a 
+    separate artifact to allow for the testlibs to depend on guava
+    itself.
+  </description>
+  <dependencies>
+    <dependency>
+      <groupId>${project.groupId}</groupId>
+      <artifactId>guava-testlib</artifactId>
+      <version>${project.version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>4.8.2</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.easymock</groupId>
+      <artifactId>easymock</artifactId>
+      <version>3.0</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.junit.contrib</groupId>
+      <artifactId>truth</artifactId>
+      <version>0.5.0-beta1</version>
+      <scope>system</scope>
+      <systemPath>${basedir}/lib/libtruth.jar</systemPath>
+    </dependency>
+  </dependencies>
+  <repositories>
+    <repository>
+      <releases><enabled>true</enabled></releases>
+      <snapshots><enabled>false</enabled></snapshots>
+      <id>truth-github</id>
+      <name>Truth Github Repository</name>
+      <url>https://raw.github.com/truth0/repo/master</url>
+    </repository>
+  </repositories>
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <version>2.3.2</version>
+        <configuration>
+          <source>1.5</source>
+          <target>1.5</target>
+        </configuration>
+      </plugin>
+    </plugins>
+    <testResources>
+      <testResource>
+        <directory>${basedir}/test</directory>
+        <excludes>
+          <exclude>**/*.java</exclude>
+        </excludes>
+      </testResource>
+    </testResources>
+    <testSourceDirectory>test</testSourceDirectory>
+  </build>
+</project>
diff --git a/guava-tests/test/com/google/common/base/AbstractIteratorTest.java b/guava-tests/test/com/google/common/base/AbstractIteratorTest.java
new file mode 100644
index 0000000..7a38919
--- /dev/null
+++ b/guava-tests/test/com/google/common/base/AbstractIteratorTest.java
@@ -0,0 +1,198 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base;
+
+import com.google.common.annotations.GwtCompatible;
+
+import junit.framework.TestCase;
+
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+
+/**
+ * Unit test for {@code AbstractIterator}.
+ *
+ * @author Kevin Bourrillion
+ */
+@SuppressWarnings("serial") // No serialization is used in this test
+@GwtCompatible
+// TODO(cpovirk): why is this slow (>1m/test) under GWT when fully optimized?
+public class AbstractIteratorTest extends TestCase {
+
+  public void testDefaultBehaviorOfNextAndHasNext() {
+
+    // This sample AbstractIterator returns 0 on the first call, 1 on the
+    // second, then signals that it's reached the end of the data
+    Iterator<Integer> iter = new AbstractIterator<Integer>() {
+      private int rep;
+      @Override public Integer computeNext() {
+        switch (rep++) {
+          case 0:
+            return 0;
+          case 1:
+            return 1;
+          case 2:
+            return endOfData();
+          default:
+            fail("Should not have been invoked again");
+            return null;
+        }
+      }
+    };
+
+    assertTrue(iter.hasNext());
+    assertEquals(0, (int) iter.next());
+
+    // verify idempotence of hasNext()
+    assertTrue(iter.hasNext());
+    assertTrue(iter.hasNext());
+    assertTrue(iter.hasNext());
+    assertEquals(1, (int) iter.next());
+
+    assertFalse(iter.hasNext());
+
+    // Make sure computeNext() doesn't get invoked again
+    assertFalse(iter.hasNext());
+
+    try {
+      iter.next();
+      fail("no exception thrown");
+    } catch (NoSuchElementException expected) {
+    }
+  }
+
+  public void testSneakyThrow() throws Exception {
+    Iterator<Integer> iter = new AbstractIterator<Integer>() {
+      boolean haveBeenCalled;
+      @Override public Integer computeNext() {
+        if (haveBeenCalled) {
+          fail("Should not have been called again");
+        } else {
+          haveBeenCalled = true;
+          sneakyThrow(new SomeCheckedException());
+        }
+        return null; // never reached
+      }
+    };
+
+    // The first time, the sneakily-thrown exception comes out
+    try {
+      iter.hasNext();
+      fail("No exception thrown");
+    } catch (Exception e) {
+      if (!(e instanceof SomeCheckedException)) {
+        throw e;
+      }
+    }
+
+    // But the second time, AbstractIterator itself throws an ISE
+    try {
+      iter.hasNext();
+      fail("No exception thrown");
+    } catch (IllegalStateException expected) {
+    }
+  }
+
+  public void testException() {
+    final SomeUncheckedException exception = new SomeUncheckedException();
+    Iterator<Integer> iter = new AbstractIterator<Integer>() {
+      @Override public Integer computeNext() {
+        throw exception;
+      }
+    };
+
+    // It should pass through untouched
+    try {
+      iter.hasNext();
+      fail("No exception thrown");
+    } catch (SomeUncheckedException e) {
+      assertSame(exception, e);
+    }
+  }
+
+  public void testExceptionAfterEndOfData() {
+    Iterator<Integer> iter = new AbstractIterator<Integer>() {
+      @Override public Integer computeNext() {
+        endOfData();
+        throw new SomeUncheckedException();
+      }
+    };
+    try {
+      iter.hasNext();
+      fail("No exception thrown");
+    } catch (SomeUncheckedException expected) {
+    }
+  }
+
+  public void testCantRemove() {
+    Iterator<Integer> iter = new AbstractIterator<Integer>() {
+      boolean haveBeenCalled;
+      @Override public Integer computeNext() {
+        if (haveBeenCalled) {
+          endOfData();
+        }
+        haveBeenCalled = true;
+        return 0;
+      }
+    };
+
+    assertEquals(0, (int) iter.next());
+
+    try {
+      iter.remove();
+      fail("No exception thrown");
+    } catch (UnsupportedOperationException expected) {
+    }
+  }
+
+  public void testReentrantHasNext() {
+    Iterator<Integer> iter = new AbstractIterator<Integer>() {
+      @Override protected Integer computeNext() {
+        hasNext();
+        return null;
+      }
+    };
+    try {
+      iter.hasNext();
+      fail();
+    } catch (IllegalStateException expected) {
+    }
+  }
+
+  // Technically we should test other reentrant scenarios (4 combinations of
+  // hasNext/next), but we'll cop out for now, knowing that 
+  // next() both start by invoking hasNext() anyway.
+
+  /**
+   * Throws a undeclared checked exception.
+   */
+  private static void sneakyThrow(Throwable t) {
+    class SneakyThrower<T extends Throwable> {
+      @SuppressWarnings("unchecked") // not really safe, but that's the point
+      void throwIt(Throwable t) throws T {
+        throw (T) t;
+      }
+    }
+    new SneakyThrower<Error>().throwIt(t);
+  }
+
+  private static class SomeCheckedException extends Exception {
+  }
+
+  private static class SomeUncheckedException extends RuntimeException {
+  }
+}
diff --git a/guava-tests/test/com/google/common/base/AsciiTest.java b/guava-tests/test/com/google/common/base/AsciiTest.java
new file mode 100644
index 0000000..579b388
--- /dev/null
+++ b/guava-tests/test/com/google/common/base/AsciiTest.java
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base;
+
+import com.google.common.annotations.GwtCompatible;
+
+import junit.framework.TestCase;
+
+/**
+ * Unit test for {@link Ascii}.
+ *
+ * @author Craig Berry
+ */
+@GwtCompatible
+public class AsciiTest extends TestCase {
+
+  /**
+   * The Unicode points {@code 00c1} and {@code 00e1} are the upper- and
+   * lowercase forms of A-with-acute-accent, {@code Á} and {@code á}.
+   */
+  private static final String IGNORED =
+      "`10-=~!@#$%^&*()_+[]\\{}|;':\",./<>?'\u00c1\u00e1\n";
+  private static final String LOWER = "abcdefghijklmnopqrstuvwxyz";
+  private static final String UPPER = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+
+  public void testToLowerCase() {
+    assertEquals(LOWER, Ascii.toLowerCase(UPPER));
+    assertEquals(LOWER, Ascii.toLowerCase(LOWER));
+    assertEquals(IGNORED, Ascii.toUpperCase(IGNORED));
+  }
+
+  public void testToUpperCase() {
+    assertEquals(UPPER, Ascii.toUpperCase(LOWER));
+    assertEquals(UPPER, Ascii.toUpperCase(UPPER));
+    assertEquals(IGNORED, Ascii.toUpperCase(IGNORED));
+  }
+
+  public void testCharsIgnored() {
+    for (char c : IGNORED.toCharArray()) {
+      String str = String.valueOf(c);
+      assertTrue(str, c == Ascii.toLowerCase(c));
+      assertTrue(str, c == Ascii.toUpperCase(c));
+      assertFalse(str, Ascii.isLowerCase(c));
+      assertFalse(str, Ascii.isUpperCase(c));
+    }
+  }
+
+  public void testCharsLower() {
+    for (char c : LOWER.toCharArray()) {
+      String str = String.valueOf(c);
+      assertTrue(str, c == Ascii.toLowerCase(c));
+      assertFalse(str, c == Ascii.toUpperCase(c));
+      assertTrue(str, Ascii.isLowerCase(c));
+      assertFalse(str, Ascii.isUpperCase(c));
+    }
+  }
+
+  public void testCharsUpper() {
+    for (char c : UPPER.toCharArray()) {
+      String str = String.valueOf(c);
+      assertFalse(str, c == Ascii.toLowerCase(c));
+      assertTrue(str, c == Ascii.toUpperCase(c));
+      assertFalse(str, Ascii.isLowerCase(c));
+      assertTrue(str, Ascii.isUpperCase(c));
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/base/CaseFormatTest.java b/guava-tests/test/com/google/common/base/CaseFormatTest.java
new file mode 100644
index 0000000..daabfa3
--- /dev/null
+++ b/guava-tests/test/com/google/common/base/CaseFormatTest.java
@@ -0,0 +1,189 @@
+/*
+ * Copyright (C) 2006 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base;
+
+import static com.google.common.base.CaseFormat.LOWER_CAMEL;
+import static com.google.common.base.CaseFormat.LOWER_HYPHEN;
+import static com.google.common.base.CaseFormat.LOWER_UNDERSCORE;
+import static com.google.common.base.CaseFormat.UPPER_CAMEL;
+import static com.google.common.base.CaseFormat.UPPER_UNDERSCORE;
+
+import com.google.common.annotations.GwtCompatible;
+
+import junit.framework.TestCase;
+
+/**
+ * Unit test for {@link CaseFormat}.
+ *
+ * @author Mike Bostock
+ */
+@GwtCompatible
+public class CaseFormatTest extends TestCase {
+
+  public void testIdentity() {
+    for (CaseFormat from : CaseFormat.values()) {
+      assertSame(from + " to " + from, "foo", from.to(from, "foo"));
+      for (CaseFormat to : CaseFormat.values()) {
+        assertEquals(from + " to " + to, "", from.to(to, ""));
+        assertEquals(from + " to " + to, " ", from.to(to, " "));
+      }
+    }
+  }
+
+  public void testNullPointer() {
+    try {
+      LOWER_CAMEL.to(null, "");
+      fail();
+    } catch (NullPointerException expected) {}
+    try {
+      LOWER_CAMEL.to(LOWER_HYPHEN, null);
+      fail();
+    } catch (NullPointerException expected) {}
+  }
+
+  public void testLowerHyphenToLowerHyphen() {
+    assertEquals("foo", LOWER_HYPHEN.to(LOWER_HYPHEN, "foo"));
+    assertEquals("foo-bar", LOWER_HYPHEN.to(LOWER_HYPHEN, "foo-bar"));
+  }
+
+  public void testLowerHyphenToLowerUnderscore() {
+    assertEquals("foo", LOWER_HYPHEN.to(LOWER_UNDERSCORE, "foo"));
+    assertEquals("foo_bar", LOWER_HYPHEN.to(LOWER_UNDERSCORE, "foo-bar"));
+  }
+
+  public void testLowerHyphenToLowerCamel() {
+    assertEquals("foo", LOWER_HYPHEN.to(LOWER_CAMEL, "foo"));
+    assertEquals("fooBar", LOWER_HYPHEN.to(LOWER_CAMEL, "foo-bar"));
+  }
+
+  public void testLowerHyphenToUpperCamel() {
+    assertEquals("Foo", LOWER_HYPHEN.to(UPPER_CAMEL, "foo"));
+    assertEquals("FooBar", LOWER_HYPHEN.to(UPPER_CAMEL, "foo-bar"));
+  }
+
+  public void testLowerHyphenToUpperUnderscore() {
+    assertEquals("FOO", LOWER_HYPHEN.to(UPPER_UNDERSCORE, "foo"));
+    assertEquals("FOO_BAR", LOWER_HYPHEN.to(UPPER_UNDERSCORE, "foo-bar"));
+  }
+
+  public void testLowerUnderscoreToLowerHyphen() {
+    assertEquals("foo", LOWER_UNDERSCORE.to(LOWER_HYPHEN, "foo"));
+    assertEquals("foo-bar", LOWER_UNDERSCORE.to(LOWER_HYPHEN, "foo_bar"));
+  }
+
+  public void testLowerUnderscoreToLowerUnderscore() {
+    assertEquals("foo", LOWER_UNDERSCORE.to(LOWER_UNDERSCORE, "foo"));
+    assertEquals("foo_bar", LOWER_UNDERSCORE.to(LOWER_UNDERSCORE, "foo_bar"));
+  }
+
+  public void testLowerUnderscoreToLowerCamel() {
+    assertEquals("foo", LOWER_UNDERSCORE.to(LOWER_CAMEL, "foo"));
+    assertEquals("fooBar", LOWER_UNDERSCORE.to(LOWER_CAMEL, "foo_bar"));
+  }
+
+  public void testLowerUnderscoreToUpperCamel() {
+    assertEquals("Foo", LOWER_UNDERSCORE.to(UPPER_CAMEL, "foo"));
+    assertEquals("FooBar", LOWER_UNDERSCORE.to(UPPER_CAMEL, "foo_bar"));
+  }
+
+  public void testLowerUnderscoreToUpperUnderscore() {
+    assertEquals("FOO", LOWER_UNDERSCORE.to(UPPER_UNDERSCORE, "foo"));
+    assertEquals("FOO_BAR", LOWER_UNDERSCORE.to(UPPER_UNDERSCORE, "foo_bar"));
+  }
+
+  public void testLowerCamelToLowerHyphen() {
+    assertEquals("foo", LOWER_CAMEL.to(LOWER_HYPHEN, "foo"));
+    assertEquals("foo-bar", LOWER_CAMEL.to(LOWER_HYPHEN, "fooBar"));
+    assertEquals("h-t-t-p", LOWER_CAMEL.to(LOWER_HYPHEN, "HTTP"));
+  }
+
+  public void testLowerCamelToLowerUnderscore() {
+    assertEquals("foo", LOWER_CAMEL.to(LOWER_UNDERSCORE, "foo"));
+    assertEquals("foo_bar", LOWER_CAMEL.to(LOWER_UNDERSCORE, "fooBar"));
+    assertEquals("h_t_t_p", LOWER_CAMEL.to(LOWER_UNDERSCORE, "hTTP"));
+  }
+
+  public void testLowerCamelToLowerCamel() {
+    assertEquals("foo", LOWER_CAMEL.to(LOWER_CAMEL, "foo"));
+    assertEquals("fooBar", LOWER_CAMEL.to(LOWER_CAMEL, "fooBar"));
+  }
+
+  public void testLowerCamelToUpperCamel() {
+    assertEquals("Foo", LOWER_CAMEL.to(UPPER_CAMEL, "foo"));
+    assertEquals("FooBar", LOWER_CAMEL.to(UPPER_CAMEL, "fooBar"));
+    assertEquals("HTTP", LOWER_CAMEL.to(UPPER_CAMEL, "hTTP"));
+  }
+
+  public void testLowerCamelToUpperUnderscore() {
+    assertEquals("FOO", LOWER_CAMEL.to(UPPER_UNDERSCORE, "foo"));
+    assertEquals("FOO_BAR", LOWER_CAMEL.to(UPPER_UNDERSCORE, "fooBar"));
+  }
+
+  public void testUpperCamelToLowerHyphen() {
+    assertEquals("foo", UPPER_CAMEL.to(LOWER_HYPHEN, "Foo"));
+    assertEquals("foo-bar", UPPER_CAMEL.to(LOWER_HYPHEN, "FooBar"));
+  }
+
+  public void testUpperCamelToLowerUnderscore() {
+    assertEquals("foo", UPPER_CAMEL.to(LOWER_UNDERSCORE, "Foo"));
+    assertEquals("foo_bar", UPPER_CAMEL.to(LOWER_UNDERSCORE, "FooBar"));
+  }
+
+  public void testUpperCamelToLowerCamel() {
+    assertEquals("foo", UPPER_CAMEL.to(LOWER_CAMEL, "Foo"));
+    assertEquals("fooBar", UPPER_CAMEL.to(LOWER_CAMEL, "FooBar"));
+    assertEquals("hTTP", UPPER_CAMEL.to(LOWER_CAMEL, "HTTP"));
+  }
+
+  public void testUpperCamelToUpperCamel() {
+    assertEquals("Foo", UPPER_CAMEL.to(UPPER_CAMEL, "Foo"));
+    assertEquals("FooBar", UPPER_CAMEL.to(UPPER_CAMEL, "FooBar"));
+  }
+
+  public void testUpperCamelToUpperUnderscore() {
+    assertEquals("FOO", UPPER_CAMEL.to(UPPER_UNDERSCORE, "Foo"));
+    assertEquals("FOO_BAR", UPPER_CAMEL.to(UPPER_UNDERSCORE, "FooBar"));
+    assertEquals("H_T_T_P", UPPER_CAMEL.to(UPPER_UNDERSCORE, "HTTP"));
+    assertEquals("H__T__T__P", UPPER_CAMEL.to(UPPER_UNDERSCORE, "H_T_T_P"));
+  }
+
+  public void testUpperUnderscoreToLowerHyphen() {
+    assertEquals("foo", UPPER_UNDERSCORE.to(LOWER_HYPHEN, "FOO"));
+    assertEquals("foo-bar", UPPER_UNDERSCORE.to(LOWER_HYPHEN, "FOO_BAR"));
+  }
+
+  public void testUpperUnderscoreToLowerUnderscore() {
+    assertEquals("foo", UPPER_UNDERSCORE.to(LOWER_UNDERSCORE, "FOO"));
+    assertEquals("foo_bar", UPPER_UNDERSCORE.to(LOWER_UNDERSCORE, "FOO_BAR"));
+  }
+
+  public void testUpperUnderscoreToLowerCamel() {
+    assertEquals("foo", UPPER_UNDERSCORE.to(LOWER_CAMEL, "FOO"));
+    assertEquals("fooBar", UPPER_UNDERSCORE.to(LOWER_CAMEL, "FOO_BAR"));
+  }
+
+  public void testUpperUnderscoreToUpperCamel() {
+    assertEquals("Foo", UPPER_UNDERSCORE.to(UPPER_CAMEL, "FOO"));
+    assertEquals("FooBar", UPPER_UNDERSCORE.to(UPPER_CAMEL, "FOO_BAR"));
+    assertEquals("HTTP", UPPER_UNDERSCORE.to(UPPER_CAMEL, "H_T_T_P"));
+  }
+
+  public void testUpperUnderscoreToUpperUnderscore() {
+    assertEquals("FOO", UPPER_UNDERSCORE.to(UPPER_UNDERSCORE, "FOO"));
+    assertEquals("FOO_BAR", UPPER_UNDERSCORE.to(UPPER_UNDERSCORE, "FOO_BAR"));
+  }
+}
diff --git a/guava-tests/test/com/google/common/base/CharMatcherTest.java b/guava-tests/test/com/google/common/base/CharMatcherTest.java
new file mode 100644
index 0000000..5fe5662
--- /dev/null
+++ b/guava-tests/test/com/google/common/base/CharMatcherTest.java
@@ -0,0 +1,607 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base;
+
+import static com.google.common.base.CharMatcher.anyOf;
+import static com.google.common.base.CharMatcher.forPredicate;
+import static com.google.common.base.CharMatcher.inRange;
+import static com.google.common.base.CharMatcher.is;
+import static com.google.common.base.CharMatcher.isNot;
+import static com.google.common.base.CharMatcher.noneOf;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.testing.NullPointerTester;
+
+import junit.framework.AssertionFailedError;
+import junit.framework.TestCase;
+
+/**
+ * Unit test for {@link CharMatcher}.
+ *
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible(emulated = true)
+public class CharMatcherTest extends TestCase {
+
+  @GwtIncompatible("NullPointerTester")
+  public void testStaticNullPointers() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.testAllPublicStaticMethods(CharMatcher.class);
+    tester.testAllPublicInstanceMethods(CharMatcher.ANY);
+    tester.testAllPublicInstanceMethods(CharMatcher.anyOf("abc"));
+  }
+
+  private static final CharMatcher WHATEVER = new CharMatcher() {
+    @Override public boolean matches(char c) {
+      throw new AssertionFailedError(
+          "You weren't supposed to actually invoke me!");
+    }
+  };
+
+  public void testAnyAndNone_logicalOps() throws Exception {
+    // These are testing behavior that's never promised by the API, but since
+    // we're lucky enough that these do pass, it saves us from having to write
+    // more excruciating tests! Hooray!
+
+    assertSame(CharMatcher.ANY, CharMatcher.NONE.negate());
+    assertSame(CharMatcher.NONE, CharMatcher.ANY.negate());
+
+    assertSame(WHATEVER, CharMatcher.ANY.and(WHATEVER));
+    assertSame(CharMatcher.ANY, CharMatcher.ANY.or(WHATEVER));
+
+    assertSame(CharMatcher.NONE, CharMatcher.NONE.and(WHATEVER));
+    assertSame(WHATEVER, CharMatcher.NONE.or(WHATEVER));
+  }
+
+  // The rest of the behavior of ANY and NONE will be covered in the tests for
+  // the text processing methods below.
+
+  // The next tests require ICU4J and have, at least for now, been sliced out
+  // of the open-source view of the tests.
+
+  @GwtIncompatible("Character.isISOControl")
+  public void testJavaIsoControl() {
+    for (int c = 0; c <= Character.MAX_VALUE; c++) {
+      assertEquals("" + c, Character.isISOControl(c),
+          CharMatcher.JAVA_ISO_CONTROL.matches((char) c));
+    }
+  }
+
+  // There's no way to test LEGACY_WHITESPACE, really; it just is what it is.
+
+  // Omitting tests for the rest of the JAVA_* constants as these are defined
+  // as extremely straightforward pass-throughs to the JDK methods.
+
+  // We're testing the is(), isNot(), anyOf(), noneOf() and inRange() methods
+  // below by testing their text-processing methods.
+
+  // The organization of this test class is unusual, as it's not done by
+  // method, but by overall "scenario". Also, the variety of actual tests we
+  // do borders on absurd overkill. Better safe than sorry, though?
+
+  public void testEmpty() throws Exception {
+    doTestEmpty(CharMatcher.ANY);
+    doTestEmpty(CharMatcher.NONE);
+    doTestEmpty(is('a'));
+    doTestEmpty(isNot('a'));
+    doTestEmpty(anyOf(""));
+    doTestEmpty(anyOf("x"));
+    doTestEmpty(anyOf("xy"));
+    doTestEmpty(anyOf("CharMatcher"));
+    doTestEmpty(noneOf("CharMatcher"));
+    doTestEmpty(inRange('n', 'q'));
+    doTestEmpty(forPredicate(Predicates.equalTo('c')));
+  }
+
+  @GwtIncompatible("NullPointerTester")
+  public void testNull() throws Exception {
+    doTestNull(CharMatcher.ANY);
+    doTestNull(CharMatcher.NONE);
+    doTestNull(is('a'));
+    doTestNull(isNot('a'));
+    doTestNull(anyOf(""));
+    doTestNull(anyOf("x"));
+    doTestNull(anyOf("xy"));
+    doTestNull(anyOf("CharMatcher"));
+    doTestNull(noneOf("CharMatcher"));
+    doTestNull(inRange('n', 'q'));
+    doTestNull(forPredicate(Predicates.equalTo('c')));
+  }
+
+  private void doTestEmpty(CharMatcher matcher) throws Exception {
+    reallyTestEmpty(matcher);
+    reallyTestEmpty(matcher.negate());
+    reallyTestEmpty(matcher.precomputed());
+  }
+
+  private void reallyTestEmpty(CharMatcher matcher) throws Exception {
+    assertEquals(-1, matcher.indexIn(""));
+    assertEquals(-1, matcher.indexIn("", 0));
+    try {
+      matcher.indexIn("", 1);
+      fail();
+    } catch (IndexOutOfBoundsException expected) {
+    }
+    try {
+      matcher.indexIn("", -1);
+      fail();
+    } catch (IndexOutOfBoundsException expected) {
+    }
+    assertEquals(-1, matcher.lastIndexIn(""));
+    assertFalse(matcher.matchesAnyOf(""));
+    assertTrue(matcher.matchesAllOf(""));
+    assertTrue(matcher.matchesNoneOf(""));
+    assertEquals("", matcher.removeFrom(""));
+    assertEquals("", matcher.replaceFrom("", 'z'));
+    assertEquals("", matcher.replaceFrom("", "ZZ"));
+    assertEquals("", matcher.trimFrom(""));
+    assertEquals(0, matcher.countIn(""));
+  }
+
+  @GwtIncompatible("NullPointerTester")
+  private void doTestNull(CharMatcher matcher) throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.testAllPublicInstanceMethods(matcher);
+  }
+
+  public void testNoMatches() {
+    doTestNoMatches(CharMatcher.NONE, "blah");
+    doTestNoMatches(is('a'), "bcde");
+    doTestNoMatches(isNot('a'), "aaaa");
+    doTestNoMatches(anyOf(""), "abcd");
+    doTestNoMatches(anyOf("x"), "abcd");
+    doTestNoMatches(anyOf("xy"), "abcd");
+    doTestNoMatches(anyOf("CharMatcher"), "zxqy");
+    doTestNoMatches(noneOf("CharMatcher"), "ChMa");
+    doTestNoMatches(inRange('p', 'x'), "mom");
+    doTestNoMatches(forPredicate(Predicates.equalTo('c')), "abe");
+    doTestNoMatches(inRange('A', 'Z').and(inRange('F', 'K').negate()), "F1a");
+    doTestNoMatches(CharMatcher.DIGIT, "\tAz()");
+    doTestNoMatches(CharMatcher.JAVA_DIGIT, "\tAz()");
+    doTestNoMatches(CharMatcher.DIGIT.and(CharMatcher.ASCII), "\tAz()");
+    doTestNoMatches(CharMatcher.SINGLE_WIDTH, "\u05bf\u3000");
+  }
+
+  private void doTestNoMatches(CharMatcher matcher, String s) {
+    reallyTestNoMatches(matcher, s);
+    reallyTestAllMatches(matcher.negate(), s);
+    reallyTestNoMatches(matcher.precomputed(), s);
+    reallyTestAllMatches(matcher.negate().precomputed(), s);
+    reallyTestAllMatches(matcher.precomputed().negate(), s);
+    reallyTestNoMatches(forPredicate(matcher), s);
+
+    reallyTestNoMatches(matcher, new StringBuilder(s));
+  }
+
+  public void testAllMatches() {
+    doTestAllMatches(CharMatcher.ANY, "blah");
+    doTestAllMatches(isNot('a'), "bcde");
+    doTestAllMatches(is('a'), "aaaa");
+    doTestAllMatches(noneOf("CharMatcher"), "zxqy");
+    doTestAllMatches(anyOf("x"), "xxxx");
+    doTestAllMatches(anyOf("xy"), "xyyx");
+    doTestAllMatches(anyOf("CharMatcher"), "ChMa");
+    doTestAllMatches(inRange('m', 'p'), "mom");
+    doTestAllMatches(forPredicate(Predicates.equalTo('c')), "ccc");
+    doTestAllMatches(CharMatcher.DIGIT, "0123456789\u0ED0\u1B59");
+    doTestAllMatches(CharMatcher.JAVA_DIGIT, "0123456789");
+    doTestAllMatches(CharMatcher.DIGIT.and(CharMatcher.ASCII), "0123456789");
+    doTestAllMatches(CharMatcher.SINGLE_WIDTH, "\t0123ABCdef~\u00A0\u2111");
+  }
+
+  private void doTestAllMatches(CharMatcher matcher, String s) {
+    reallyTestAllMatches(matcher, s);
+    reallyTestNoMatches(matcher.negate(), s);
+    reallyTestAllMatches(matcher.precomputed(), s);
+    reallyTestNoMatches(matcher.negate().precomputed(), s);
+    reallyTestNoMatches(matcher.precomputed().negate(), s);
+    reallyTestAllMatches(forPredicate(matcher), s);
+
+    reallyTestAllMatches(matcher, new StringBuilder(s));
+  }
+
+  private void reallyTestNoMatches(CharMatcher matcher, CharSequence s) {
+    assertFalse(matcher.matches(s.charAt(0)));
+    assertEquals(-1, matcher.indexIn(s));
+    assertEquals(-1, matcher.indexIn(s, 0));
+    assertEquals(-1, matcher.indexIn(s, 1));
+    assertEquals(-1, matcher.indexIn(s, s.length()));
+    try {
+      matcher.indexIn(s, s.length() + 1);
+      fail();
+    } catch (IndexOutOfBoundsException expected) {
+    }
+    try {
+      matcher.indexIn(s, -1);
+      fail();
+    } catch (IndexOutOfBoundsException expected) {
+    }
+    assertEquals(-1, matcher.lastIndexIn(s));
+    assertFalse(matcher.matchesAnyOf(s));
+    assertFalse(matcher.matchesAllOf(s));
+    assertTrue(matcher.matchesNoneOf(s));
+
+    assertEquals(s.toString(), matcher.removeFrom(s));
+    assertEquals(s.toString(), matcher.replaceFrom(s, 'z'));
+    assertEquals(s.toString(), matcher.replaceFrom(s, "ZZ"));
+    assertEquals(s.toString(), matcher.trimFrom(s));
+    assertEquals(0, matcher.countIn(s));
+  }
+
+  private void reallyTestAllMatches(CharMatcher matcher, CharSequence s) {
+    assertTrue(matcher.matches(s.charAt(0)));
+    assertEquals(0, matcher.indexIn(s));
+    assertEquals(0, matcher.indexIn(s, 0));
+    assertEquals(1, matcher.indexIn(s, 1));
+    assertEquals(-1, matcher.indexIn(s, s.length()));
+    assertEquals(s.length() - 1, matcher.lastIndexIn(s));
+    assertTrue(matcher.matchesAnyOf(s));
+    assertTrue(matcher.matchesAllOf(s));
+    assertFalse(matcher.matchesNoneOf(s));
+    assertEquals("", matcher.removeFrom(s));
+    assertEquals(Strings.repeat("z", s.length()),
+        matcher.replaceFrom(s, 'z'));
+    assertEquals(Strings.repeat("ZZ", s.length()),
+        matcher.replaceFrom(s, "ZZ"));
+    assertEquals("", matcher.trimFrom(s));
+    assertEquals(s.length(), matcher.countIn(s));
+  }
+
+  public void testGeneral() {
+    doTestGeneral(is('a'), 'a', 'b');
+    doTestGeneral(isNot('a'), 'b', 'a');
+    doTestGeneral(anyOf("x"), 'x', 'z');
+    doTestGeneral(anyOf("xy"), 'y', 'z');
+    doTestGeneral(anyOf("CharMatcher"), 'C', 'z');
+    doTestGeneral(noneOf("CharMatcher"), 'z', 'C');
+    doTestGeneral(inRange('p', 'x'), 'q', 'z');
+  }
+
+  private void doTestGeneral(CharMatcher matcher, char match, char noMatch) {
+    doTestOneCharMatch(matcher, "" + match);
+    doTestOneCharNoMatch(matcher, "" + noMatch);
+    doTestMatchThenNoMatch(matcher, "" + match + noMatch);
+    doTestNoMatchThenMatch(matcher, "" + noMatch + match);
+  }
+
+  private void doTestOneCharMatch(CharMatcher matcher, String s) {
+    reallyTestOneCharMatch(matcher, s);
+    reallyTestOneCharNoMatch(matcher.negate(), s);
+    reallyTestOneCharMatch(matcher.precomputed(), s);
+    reallyTestOneCharNoMatch(matcher.negate().precomputed(), s);
+    reallyTestOneCharNoMatch(matcher.precomputed().negate(), s);
+  }
+
+  private void doTestOneCharNoMatch(CharMatcher matcher, String s) {
+    reallyTestOneCharNoMatch(matcher, s);
+    reallyTestOneCharMatch(matcher.negate(), s);
+    reallyTestOneCharNoMatch(matcher.precomputed(), s);
+    reallyTestOneCharMatch(matcher.negate().precomputed(), s);
+    reallyTestOneCharMatch(matcher.precomputed().negate(), s);
+  }
+
+  private void doTestMatchThenNoMatch(CharMatcher matcher, String s) {
+    reallyTestMatchThenNoMatch(matcher, s);
+    reallyTestNoMatchThenMatch(matcher.negate(), s);
+    reallyTestMatchThenNoMatch(matcher.precomputed(), s);
+    reallyTestNoMatchThenMatch(matcher.negate().precomputed(), s);
+    reallyTestNoMatchThenMatch(matcher.precomputed().negate(), s);
+  }
+
+  private void doTestNoMatchThenMatch(CharMatcher matcher, String s) {
+    reallyTestNoMatchThenMatch(matcher, s);
+    reallyTestMatchThenNoMatch(matcher.negate(), s);
+    reallyTestNoMatchThenMatch(matcher.precomputed(), s);
+    reallyTestMatchThenNoMatch(matcher.negate().precomputed(), s);
+    reallyTestMatchThenNoMatch(matcher.precomputed().negate(), s);
+  }
+
+  private void reallyTestOneCharMatch(CharMatcher matcher, String s) {
+    assertTrue(matcher.matches(s.charAt(0)));
+    assertTrue(matcher.apply(s.charAt(0)));
+    assertEquals(0, matcher.indexIn(s));
+    assertEquals(0, matcher.indexIn(s, 0));
+    assertEquals(-1, matcher.indexIn(s, 1));
+    assertEquals(0, matcher.lastIndexIn(s));
+    assertTrue(matcher.matchesAnyOf(s));
+    assertTrue(matcher.matchesAllOf(s));
+    assertFalse(matcher.matchesNoneOf(s));
+    assertEquals("", matcher.removeFrom(s));
+    assertEquals("z", matcher.replaceFrom(s, 'z'));
+    assertEquals("ZZ", matcher.replaceFrom(s, "ZZ"));
+    assertEquals("", matcher.trimFrom(s));
+    assertEquals(1, matcher.countIn(s));
+  }
+
+  private void reallyTestOneCharNoMatch(CharMatcher matcher, String s) {
+    assertFalse(matcher.matches(s.charAt(0)));
+    assertFalse(matcher.apply(s.charAt(0)));
+    assertEquals(-1, matcher.indexIn(s));
+    assertEquals(-1, matcher.indexIn(s, 0));
+    assertEquals(-1, matcher.indexIn(s, 1));
+    assertEquals(-1, matcher.lastIndexIn(s));
+    assertFalse(matcher.matchesAnyOf(s));
+    assertFalse(matcher.matchesAllOf(s));
+    assertTrue(matcher.matchesNoneOf(s));
+
+    // Note: only 'assertEquals' is promised by the API.  Although they could
+    // have been assertSame() on the server side, they have to be assertEquals
+    // in GWT, because of GWT issue 4491.
+    assertEquals(s, matcher.removeFrom(s));
+    assertEquals(s, matcher.replaceFrom(s, 'z'));
+    assertEquals(s, matcher.replaceFrom(s, "ZZ"));
+    assertEquals(s, matcher.trimFrom(s));
+    assertEquals(0, matcher.countIn(s));
+  }
+
+  private void reallyTestMatchThenNoMatch(CharMatcher matcher, String s) {
+    assertEquals(0, matcher.indexIn(s));
+    assertEquals(0, matcher.indexIn(s, 0));
+    assertEquals(-1, matcher.indexIn(s, 1));
+    assertEquals(-1, matcher.indexIn(s, 2));
+    assertEquals(0, matcher.lastIndexIn(s));
+    assertTrue(matcher.matchesAnyOf(s));
+    assertFalse(matcher.matchesAllOf(s));
+    assertFalse(matcher.matchesNoneOf(s));
+    assertEquals(s.substring(1), matcher.removeFrom(s));
+    assertEquals("z" + s.substring(1), matcher.replaceFrom(s, 'z'));
+    assertEquals("ZZ" + s.substring(1), matcher.replaceFrom(s, "ZZ"));
+    assertEquals(s.substring(1), matcher.trimFrom(s));
+    assertEquals(1, matcher.countIn(s));
+  }
+
+  private void reallyTestNoMatchThenMatch(CharMatcher matcher, String s) {
+    assertEquals(1, matcher.indexIn(s));
+    assertEquals(1, matcher.indexIn(s, 0));
+    assertEquals(1, matcher.indexIn(s, 1));
+    assertEquals(-1, matcher.indexIn(s, 2));
+    assertEquals(1, matcher.lastIndexIn(s));
+    assertTrue(matcher.matchesAnyOf(s));
+    assertFalse(matcher.matchesAllOf(s));
+    assertFalse(matcher.matchesNoneOf(s));
+    assertEquals(s.substring(0, 1), matcher.removeFrom(s));
+    assertEquals(s.substring(0, 1) + "z", matcher.replaceFrom(s, 'z'));
+    assertEquals(s.substring(0, 1) + "ZZ", matcher.replaceFrom(s, "ZZ"));
+    assertEquals(s.substring(0, 1), matcher.trimFrom(s));
+    assertEquals(1, matcher.countIn(s));
+  }
+
+  // Test collapse() a little differently than the rest, as we really want to
+  // cover lots of different configurations of input text
+  public void testCollapse() {
+    // collapsing groups of - into _
+    doTestCollapse("-", "_");
+    doTestCollapse("x-", "x_");
+    doTestCollapse("-x", "_x");
+    doTestCollapse("--", "_");
+    doTestCollapse("x--", "x_");
+    doTestCollapse("--x", "_x");
+    doTestCollapse("-x-", "_x_");
+    doTestCollapse("x-x", "x_x");
+    doTestCollapse("---", "_");
+    doTestCollapse("--x-", "_x_");
+    doTestCollapse("--xx", "_xx");
+    doTestCollapse("-x--", "_x_");
+    doTestCollapse("-x-x", "_x_x");
+    doTestCollapse("-xx-", "_xx_");
+    doTestCollapse("x--x", "x_x");
+    doTestCollapse("x-x-", "x_x_");
+    doTestCollapse("x-xx", "x_xx");
+    doTestCollapse("x-x--xx---x----x", "x_x_xx_x_x");
+
+    doTestCollapseWithNoChange("");
+    doTestCollapseWithNoChange("x");
+    doTestCollapseWithNoChange("xx");
+  }
+
+  private void doTestCollapse(String in, String out) {
+    // Try a few different matchers which all match '-' and not 'x'
+    assertEquals(out, is('-').collapseFrom(in, '_'));
+    assertEquals(out, is('-').or(is('#')).collapseFrom(in, '_'));
+    assertEquals(out, isNot('x').collapseFrom(in, '_'));
+    assertEquals(out, is('x').negate().collapseFrom(in, '_'));
+    assertEquals(out, anyOf("-").collapseFrom(in, '_'));
+    assertEquals(out, anyOf("-#").collapseFrom(in, '_'));
+    assertEquals(out, anyOf("-#123").collapseFrom(in, '_'));
+  }
+
+  private void doTestCollapseWithNoChange(String inout) {
+    /*
+     * Note: assertSame(), not promised by the spec, happens to work with the
+     * current implementation because String.toString() promises to return
+     * |this|. However, GWT bug 4491 keeps it from working there, so we stick
+     * with assertEquals().
+     */
+    assertEquals(inout, is('-').collapseFrom(inout, '_'));
+    assertEquals(inout, is('-').or(is('#')).collapseFrom(inout, '_'));
+    assertEquals(inout, isNot('x').collapseFrom(inout, '_'));
+    assertEquals(inout, is('x').negate().collapseFrom(inout, '_'));
+    assertEquals(inout, anyOf("-").collapseFrom(inout, '_'));
+    assertEquals(inout, anyOf("-#").collapseFrom(inout, '_'));
+    assertEquals(inout, anyOf("-#123").collapseFrom(inout, '_'));
+    assertEquals(inout, CharMatcher.NONE.collapseFrom(inout, '_'));
+  }
+
+  public void testCollapse_any() {
+    assertEquals("", CharMatcher.ANY.collapseFrom("", '_'));
+    assertEquals("_", CharMatcher.ANY.collapseFrom("a", '_'));
+    assertEquals("_", CharMatcher.ANY.collapseFrom("ab", '_'));
+    assertEquals("_", CharMatcher.ANY.collapseFrom("abcd", '_'));
+  }
+
+  public void testTrimFrom() {
+    // trimming -
+    doTestTrimFrom("-", "");
+    doTestTrimFrom("x-", "x");
+    doTestTrimFrom("-x", "x");
+    doTestTrimFrom("--", "");
+    doTestTrimFrom("x--", "x");
+    doTestTrimFrom("--x", "x");
+    doTestTrimFrom("-x-", "x");
+    doTestTrimFrom("x-x", "x-x");
+    doTestTrimFrom("---", "");
+    doTestTrimFrom("--x-", "x");
+    doTestTrimFrom("--xx", "xx");
+    doTestTrimFrom("-x--", "x");
+    doTestTrimFrom("-x-x", "x-x");
+    doTestTrimFrom("-xx-", "xx");
+    doTestTrimFrom("x--x", "x--x");
+    doTestTrimFrom("x-x-", "x-x");
+    doTestTrimFrom("x-xx", "x-xx");
+    doTestTrimFrom("x-x--xx---x----x", "x-x--xx---x----x");
+    // additional testing using the doc example
+    assertEquals("cat", anyOf("ab").trimFrom("abacatbab"));
+  }
+
+  private void doTestTrimFrom(String in, String out) {
+    // Try a few different matchers which all match '-' and not 'x'
+    assertEquals(out, is('-').trimFrom(in));
+    assertEquals(out, is('-').or(is('#')).trimFrom(in));
+    assertEquals(out, isNot('x').trimFrom(in));
+    assertEquals(out, is('x').negate().trimFrom(in));
+    assertEquals(out, anyOf("-").trimFrom(in));
+    assertEquals(out, anyOf("-#").trimFrom(in));
+    assertEquals(out, anyOf("-#123").trimFrom(in));
+  }
+
+  public void testTrimLeadingFrom() {
+    // trimming -
+    doTestTrimLeadingFrom("-", "");
+    doTestTrimLeadingFrom("x-", "x-");
+    doTestTrimLeadingFrom("-x", "x");
+    doTestTrimLeadingFrom("--", "");
+    doTestTrimLeadingFrom("x--", "x--");
+    doTestTrimLeadingFrom("--x", "x");
+    doTestTrimLeadingFrom("-x-", "x-");
+    doTestTrimLeadingFrom("x-x", "x-x");
+    doTestTrimLeadingFrom("---", "");
+    doTestTrimLeadingFrom("--x-", "x-");
+    doTestTrimLeadingFrom("--xx", "xx");
+    doTestTrimLeadingFrom("-x--", "x--");
+    doTestTrimLeadingFrom("-x-x", "x-x");
+    doTestTrimLeadingFrom("-xx-", "xx-");
+    doTestTrimLeadingFrom("x--x", "x--x");
+    doTestTrimLeadingFrom("x-x-", "x-x-");
+    doTestTrimLeadingFrom("x-xx", "x-xx");
+    doTestTrimLeadingFrom("x-x--xx---x----x", "x-x--xx---x----x");
+    // additional testing using the doc example
+    assertEquals("catbab", anyOf("ab").trimLeadingFrom("abacatbab"));
+  }
+
+  private void doTestTrimLeadingFrom(String in, String out) {
+    // Try a few different matchers which all match '-' and not 'x'
+    assertEquals(out, is('-').trimLeadingFrom(in));
+    assertEquals(out, is('-').or(is('#')).trimLeadingFrom(in));
+    assertEquals(out, isNot('x').trimLeadingFrom(in));
+    assertEquals(out, is('x').negate().trimLeadingFrom(in));
+    assertEquals(out, anyOf("-#").trimLeadingFrom(in));
+    assertEquals(out, anyOf("-#123").trimLeadingFrom(in));
+  }
+
+  public void testTrimTrailingFrom() {
+    // trimming -
+    doTestTrimTrailingFrom("-", "");
+    doTestTrimTrailingFrom("x-", "x");
+    doTestTrimTrailingFrom("-x", "-x");
+    doTestTrimTrailingFrom("--", "");
+    doTestTrimTrailingFrom("x--", "x");
+    doTestTrimTrailingFrom("--x", "--x");
+    doTestTrimTrailingFrom("-x-", "-x");
+    doTestTrimTrailingFrom("x-x", "x-x");
+    doTestTrimTrailingFrom("---", "");
+    doTestTrimTrailingFrom("--x-", "--x");
+    doTestTrimTrailingFrom("--xx", "--xx");
+    doTestTrimTrailingFrom("-x--", "-x");
+    doTestTrimTrailingFrom("-x-x", "-x-x");
+    doTestTrimTrailingFrom("-xx-", "-xx");
+    doTestTrimTrailingFrom("x--x", "x--x");
+    doTestTrimTrailingFrom("x-x-", "x-x");
+    doTestTrimTrailingFrom("x-xx", "x-xx");
+    doTestTrimTrailingFrom("x-x--xx---x----x", "x-x--xx---x----x");
+    // additional testing using the doc example
+    assertEquals("abacat", anyOf("ab").trimTrailingFrom("abacatbab"));
+  }
+
+  private void doTestTrimTrailingFrom(String in, String out) {
+    // Try a few different matchers which all match '-' and not 'x'
+    assertEquals(out, is('-').trimTrailingFrom(in));
+    assertEquals(out, is('-').or(is('#')).trimTrailingFrom(in));
+    assertEquals(out, isNot('x').trimTrailingFrom(in));
+    assertEquals(out, is('x').negate().trimTrailingFrom(in));
+    assertEquals(out, anyOf("-#").trimTrailingFrom(in));
+    assertEquals(out, anyOf("-#123").trimTrailingFrom(in));
+  }
+
+  public void testTrimAndCollapse() {
+    // collapsing groups of - into _
+    doTestTrimAndCollapse("-", "");
+    doTestTrimAndCollapse("x-", "x");
+    doTestTrimAndCollapse("-x", "x");
+    doTestTrimAndCollapse("--", "");
+    doTestTrimAndCollapse("x--", "x");
+    doTestTrimAndCollapse("--x", "x");
+    doTestTrimAndCollapse("-x-", "x");
+    doTestTrimAndCollapse("x-x", "x_x");
+    doTestTrimAndCollapse("---", "");
+    doTestTrimAndCollapse("--x-", "x");
+    doTestTrimAndCollapse("--xx", "xx");
+    doTestTrimAndCollapse("-x--", "x");
+    doTestTrimAndCollapse("-x-x", "x_x");
+    doTestTrimAndCollapse("-xx-", "xx");
+    doTestTrimAndCollapse("x--x", "x_x");
+    doTestTrimAndCollapse("x-x-", "x_x");
+    doTestTrimAndCollapse("x-xx", "x_xx");
+    doTestTrimAndCollapse("x-x--xx---x----x", "x_x_xx_x_x");
+  }
+
+  private void doTestTrimAndCollapse(String in, String out) {
+    // Try a few different matchers which all match '-' and not 'x'
+    assertEquals(out, is('-').trimAndCollapseFrom(in, '_'));
+    assertEquals(out, is('-').or(is('#')).trimAndCollapseFrom(in, '_'));
+    assertEquals(out, isNot('x').trimAndCollapseFrom(in, '_'));
+    assertEquals(out, is('x').negate().trimAndCollapseFrom(in, '_'));
+    assertEquals(out, anyOf("-").trimAndCollapseFrom(in, '_'));
+    assertEquals(out, anyOf("-#").trimAndCollapseFrom(in, '_'));
+    assertEquals(out, anyOf("-#123").trimAndCollapseFrom(in, '_'));
+  }
+
+  public void testReplaceFrom() {
+    assertEquals("yoho", is('a').replaceFrom("yaha", 'o'));
+    assertEquals("yh", is('a').replaceFrom("yaha", ""));
+    assertEquals("yoho", is('a').replaceFrom("yaha", "o"));
+    assertEquals("yoohoo", is('a').replaceFrom("yaha", "oo"));
+    assertEquals("12 &gt; 5", is('>').replaceFrom("12 > 5", "&gt;"));
+  }
+
+  public void testPrecomputedOptimizations() {
+    // These are testing behavior that's never promised by the API.
+    // Some matchers are so efficient that it is a waste of effort to
+    // build a precomputed version.
+    CharMatcher m1 = is('x');
+    assertSame(m1, m1.precomputed());
+
+    CharMatcher m2 = anyOf("Az");
+    assertSame(m2, m2.precomputed());
+
+    CharMatcher m3 = inRange('A', 'Z');
+    assertSame(m3, m3.precomputed());
+
+    assertSame(CharMatcher.NONE, CharMatcher.NONE.precomputed());
+    assertSame(CharMatcher.ANY, CharMatcher.ANY.precomputed());
+  }
+}
diff --git a/guava-tests/test/com/google/common/base/CharsetsTest.java b/guava-tests/test/com/google/common/base/CharsetsTest.java
new file mode 100644
index 0000000..67f2b07
--- /dev/null
+++ b/guava-tests/test/com/google/common/base/CharsetsTest.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base;
+
+import junit.framework.TestCase;
+
+import java.nio.charset.Charset;
+
+/**
+ * Unit test for {@link Charsets}.
+ *
+ * @author Mike Bostock
+ */
+public class CharsetsTest extends TestCase {
+  public void testUsAscii() {
+    assertEquals(Charset.forName("US-ASCII"), Charsets.US_ASCII);
+  }
+
+  public void testIso88591() {
+    assertEquals(Charset.forName("ISO-8859-1"), Charsets.ISO_8859_1);
+  }
+
+  public void testUtf8() {
+    assertEquals(Charset.forName("UTF-8"), Charsets.UTF_8);
+  }
+
+  public void testUtf16be() {
+    assertEquals(Charset.forName("UTF-16BE"), Charsets.UTF_16BE);
+  }
+
+  public void testUtf16le() {
+    assertEquals(Charset.forName("UTF-16LE"), Charsets.UTF_16LE);
+  }
+
+  public void testUtf16() {
+    assertEquals(Charset.forName("UTF-16"), Charsets.UTF_16);
+  }
+}
diff --git a/guava-tests/test/com/google/common/base/DefaultsTest.java b/guava-tests/test/com/google/common/base/DefaultsTest.java
new file mode 100644
index 0000000..3aeca28
--- /dev/null
+++ b/guava-tests/test/com/google/common/base/DefaultsTest.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base;
+
+import junit.framework.TestCase;
+
+/**
+ * Unit test for {@link Defaults}.
+ * 
+ * @author Jige Yu
+ */
+public class DefaultsTest extends TestCase {
+  public void testGetDefaultValue() {
+    assertEquals(false, Defaults.defaultValue(boolean.class).booleanValue());
+    assertEquals('\0', Defaults.defaultValue(char.class).charValue());
+    assertEquals(0, Defaults.defaultValue(byte.class).byteValue());
+    assertEquals(0, Defaults.defaultValue(short.class).shortValue());
+    assertEquals(0, Defaults.defaultValue(int.class).intValue());
+    assertEquals(0, Defaults.defaultValue(long.class).longValue());
+    assertEquals(0.0f, Defaults.defaultValue(float.class).floatValue());
+    assertEquals(0.0d, Defaults.defaultValue(double.class).doubleValue());
+    assertNull(Defaults.defaultValue(void.class));
+    assertNull(Defaults.defaultValue(String.class));
+  }
+}
diff --git a/guava-tests/test/com/google/common/base/EnumsTest.java b/guava-tests/test/com/google/common/base/EnumsTest.java
new file mode 100644
index 0000000..142833b
--- /dev/null
+++ b/guava-tests/test/com/google/common/base/EnumsTest.java
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.testing.EqualsTester;
+import com.google.common.testing.NullPointerTester;
+import com.google.common.testing.SerializableTester;
+
+import junit.framework.TestCase;
+
+/**
+ * Tests for {@link Enums}.
+ *
+ * @author Steve McKay
+ */
+@GwtCompatible(emulated = true)
+public class EnumsTest extends TestCase {
+
+  private enum TestEnum {
+    CHEETO,
+    HONDA,
+    POODLE,
+  }
+
+  private enum OtherEnum {}
+
+  public void testValueOfFunction() {
+    Function<String, TestEnum> function = Enums.valueOfFunction(TestEnum.class);
+    assertEquals(TestEnum.CHEETO, function.apply("CHEETO"));
+    assertEquals(TestEnum.HONDA, function.apply("HONDA"));
+    assertEquals(TestEnum.POODLE, function.apply("POODLE"));
+  }
+
+  public void testValueOfFunction_caseSensitive() {
+    Function<String, TestEnum> function = Enums.valueOfFunction(TestEnum.class);
+    assertNull(function.apply("cHEETO"));
+    assertNull(function.apply("Honda"));
+    assertNull(function.apply("poodlE"));
+  }
+
+  public void testValueOfFunction_nullWhenNotMatchingConstant() {
+    Function<String, TestEnum> function = Enums.valueOfFunction(TestEnum.class);
+    assertNull(function.apply("WOMBAT"));
+  }
+
+  public void testValueOfFunction_equals() {
+    new EqualsTester()
+        .addEqualityGroup(
+            Enums.valueOfFunction(TestEnum.class), Enums.valueOfFunction(TestEnum.class))
+        .addEqualityGroup(Enums.valueOfFunction(OtherEnum.class))
+        .testEquals();
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testValueOfFunction_serialization() {
+    Function<String, TestEnum> function = Enums.valueOfFunction(TestEnum.class);
+    SerializableTester.reserializeAndAssert(function);
+  }
+
+  @GwtIncompatible("NullPointerTester")
+  public void testNullPointerExceptions() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.testAllPublicStaticMethods(Enums.class);
+  }
+}
diff --git a/guava-tests/test/com/google/common/base/EquivalenceTest.java b/guava-tests/test/com/google/common/base/EquivalenceTest.java
new file mode 100644
index 0000000..877aa67
--- /dev/null
+++ b/guava-tests/test/com/google/common/base/EquivalenceTest.java
@@ -0,0 +1,131 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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
+ * diOBJECTibuted under the License is diOBJECTibuted 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.
+ */
+
+package com.google.common.base;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.collect.ImmutableList;
+import com.google.common.testing.EqualsTester;
+import com.google.common.testing.EquivalenceTester;
+import com.google.common.testing.SerializableTester;
+
+import junit.framework.TestCase;
+
+/**
+ * Unit test for {@link Equivalence}.
+ *
+ * @author Jige Yu
+ */
+@GwtCompatible(emulated = true)
+public class EquivalenceTest extends TestCase {
+
+  @SuppressWarnings("unchecked") // Iterable<String>...
+  public void testPairwiseEquivalent() {
+    EquivalenceTester.of(Equivalences.equals().<String>pairwise())
+        .addEquivalenceGroup(ImmutableList.<String>of())
+        .addEquivalenceGroup(ImmutableList.of("a"))
+        .addEquivalenceGroup(ImmutableList.of("b"))
+        .addEquivalenceGroup(ImmutableList.of("a", "b"), ImmutableList.of("a", "b"))
+        .test();
+  }
+
+  public void testPairwiseEquivalent_equals() {
+    new EqualsTester()
+        .addEqualityGroup(Equivalences.equals().pairwise(), Equivalences.equals().pairwise())
+        .addEqualityGroup(Equivalences.identity().pairwise())
+        .testEquals();
+  }
+
+  private enum LengthFunction implements Function<String, Integer> {
+    INSTANCE;
+
+    @Override public Integer apply(String input) {
+      return input.length();
+    }
+  }
+
+  private static final Equivalence<String> LENGTH_EQUIVALENCE = Equivalences.equals()
+      .onResultOf(LengthFunction.INSTANCE);
+
+  public void testWrap() {
+    new EqualsTester()
+        .addEqualityGroup(
+            LENGTH_EQUIVALENCE.wrap("hello"),
+            LENGTH_EQUIVALENCE.wrap("hello"),
+            LENGTH_EQUIVALENCE.wrap("world"))
+        .addEqualityGroup(
+            LENGTH_EQUIVALENCE.wrap("hi"),
+            LENGTH_EQUIVALENCE.wrap("yo"))
+        .addEqualityGroup(
+            LENGTH_EQUIVALENCE.wrap(null),
+            LENGTH_EQUIVALENCE.wrap(null))
+        .addEqualityGroup(Equivalences.equals().wrap("hello"))
+        .addEqualityGroup(Equivalences.equals().wrap(null))
+        .testEquals();
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testWrapSerialization() {
+    SerializableTester.reserializeAndAssert(LENGTH_EQUIVALENCE.wrap("hello"));
+  }
+
+  private static class IntValue {
+    private final int value;
+    
+    IntValue(int value) {
+      this.value = value;
+    }
+
+    @Override public String toString() {
+      return "value = " + value;
+    }
+  }
+  
+  public void testOnResultOf() {
+    EquivalenceTester.of(Equivalences.equals().onResultOf(Functions.toStringFunction()))
+        .addEquivalenceGroup(new IntValue(1), new IntValue(1))
+        .addEquivalenceGroup(new IntValue(2))
+        .test();
+  }
+  
+  public void testOnResultOf_equals() {
+    new EqualsTester()
+        .addEqualityGroup(
+            Equivalences.identity().onResultOf(Functions.toStringFunction()),
+            Equivalences.identity().onResultOf(Functions.toStringFunction()))
+        .addEqualityGroup(Equivalences.equals().onResultOf(Functions.toStringFunction()))
+        .addEqualityGroup(Equivalences.identity().onResultOf(Functions.identity()))
+        .testEquals();
+  }
+  
+  public void testEquivalentTo() {
+    Predicate<Object> equalTo1 = Equivalences.equals().equivalentTo("1");
+    assertTrue(equalTo1.apply("1"));
+    assertFalse(equalTo1.apply("2"));
+    assertFalse(equalTo1.apply(null));
+    Predicate<Object> isNull = Equivalences.equals().equivalentTo(null);
+    assertFalse(isNull.apply("1"));
+    assertFalse(isNull.apply("2"));
+    assertTrue(isNull.apply(null));
+    
+    new EqualsTester()
+        .addEqualityGroup(equalTo1, Equivalences.equals().equivalentTo("1"))
+        .addEqualityGroup(isNull)
+        .addEqualityGroup(Equivalences.identity().equivalentTo("1"))
+        .testEquals();
+  }
+}
diff --git a/guava-tests/test/com/google/common/base/EquivalencesTest.java b/guava-tests/test/com/google/common/base/EquivalencesTest.java
new file mode 100644
index 0000000..41d9fd0
--- /dev/null
+++ b/guava-tests/test/com/google/common/base/EquivalencesTest.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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
+ * diOBJECTibuted under the License is diOBJECTibuted 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.
+ */
+
+package com.google.common.base;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.testing.EqualsTester;
+import com.google.common.testing.EquivalenceTester;
+import com.google.common.testing.SerializableTester;
+
+import junit.framework.TestCase;
+
+/**
+ * Unit test for {@link Equivalences}.
+ *
+ * @author Kurt Alfred Kluever
+ * @author Jige Yu
+ */
+@GwtCompatible(emulated = true)
+public class EquivalencesTest extends TestCase {
+
+  public void testEqualsEquivalent() {
+    EquivalenceTester.of(Equivalences.equals())
+        .addEquivalenceGroup(new Integer(42), 42)
+        .addEquivalenceGroup("a")
+        .test();
+  }
+
+  public void testIdentityEquivalent() {
+    EquivalenceTester.of(Equivalences.identity())
+        .addEquivalenceGroup(new Integer(42))
+        .addEquivalenceGroup(new Integer(42))
+        .addEquivalenceGroup("a")
+        .test();
+  }
+  
+  public void testEquality() {
+    new EqualsTester()
+        .addEqualityGroup(Equivalences.equals(), Equivalences.equals())
+        .addEqualityGroup(Equivalences.identity(), Equivalences.identity())
+        .testEquals();
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testSerialization() {
+    SerializableTester.reserializeAndAssert(Equivalences.equals());
+    SerializableTester.reserializeAndAssert(Equivalences.identity());
+  }
+}
diff --git a/guava-tests/test/com/google/common/base/FinalizableReferenceQueueTest.java b/guava-tests/test/com/google/common/base/FinalizableReferenceQueueTest.java
new file mode 100644
index 0000000..c6f7248
--- /dev/null
+++ b/guava-tests/test/com/google/common/base/FinalizableReferenceQueueTest.java
@@ -0,0 +1,165 @@
+/*
+ * Copyright (C) 2005 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base;
+
+import com.google.common.base.internal.Finalizer;
+
+import junit.framework.TestCase;
+
+import java.lang.ref.ReferenceQueue;
+import java.lang.ref.WeakReference;
+import java.net.URL;
+import java.net.URLClassLoader;
+
+/**
+ * Unit test for {@link FinalizableReferenceQueue}.
+ *
+ * @author Bob Lee
+ */
+public class FinalizableReferenceQueueTest extends TestCase {
+
+  private FinalizableReferenceQueue frq;
+
+  @Override
+  protected void tearDown() throws Exception {
+    frq = null;
+  }
+
+  public void testFinalizeReferentCalled() {
+    MockReference reference = new MockReference(
+        frq = new FinalizableReferenceQueue());
+    // wait up to 5s
+    for (int i = 0; i < 500; i++) {
+      if (reference.finalizeReferentCalled) {
+        return;
+      }
+      try {
+        System.gc();
+        Thread.sleep(10);
+      } catch (InterruptedException e) { /* ignore */ }
+    }
+    fail();
+  }
+
+  static class MockReference extends FinalizableWeakReference<Object> {
+
+    volatile boolean finalizeReferentCalled;
+
+    MockReference(FinalizableReferenceQueue frq) {
+      super(new Object(), frq);
+    }
+
+    @Override
+    public void finalizeReferent() {
+      finalizeReferentCalled = true;
+    }
+  }
+
+  /**
+   * Keeps a weak reference to the underlying reference queue. When this
+   * reference is cleared, we know that the background thread has stopped
+   * and released its strong reference.
+   */
+  private WeakReference<ReferenceQueue<Object>> queueReference;
+
+  public void testThatFinalizerStops() {
+    weaklyReferenceQueue();
+
+    // wait up to 5s
+    for (int i = 0; i < 500; i++) {
+      if (queueReference.get() == null) {
+        return;
+      }
+      try {
+        System.gc();
+        Thread.sleep(10);
+      } catch (InterruptedException e) { /* ignore */ }
+    }
+    fail();
+  }
+
+  /**
+   * If we don't keep a strong reference to the reference object, it won't
+   * be enqueued.
+   */
+  FinalizableWeakReference<Object> reference;
+
+  /**
+   * Create the FRQ in a method that goes out of scope so that we're sure
+   * it will be reclaimed.
+   */
+  private void weaklyReferenceQueue() {
+    frq = new FinalizableReferenceQueue();
+    queueReference = new WeakReference<ReferenceQueue<Object>>(frq.queue);
+
+    /*
+     * Queue and clear a reference for good measure. We test later on that
+     * the finalizer thread stopped, but we should test that it actually
+     * started first.
+     */
+    reference = new FinalizableWeakReference<Object>(new Object(), frq) {
+      @Override
+      public void finalizeReferent() {
+        reference = null;
+        frq = null;
+      }
+    };
+  }
+
+  public void testDecoupledLoader() {
+    FinalizableReferenceQueue.DecoupledLoader decoupledLoader =
+        new FinalizableReferenceQueue.DecoupledLoader() {
+          @Override
+          URLClassLoader newLoader(URL base) {
+            return new DecoupledClassLoader(new URL[] { base });
+          }
+        };
+
+    Class<?> finalizerCopy = decoupledLoader.loadFinalizer();
+
+    assertNotNull(finalizerCopy);
+    assertNotSame(Finalizer.class, finalizerCopy);
+
+    assertNotNull(FinalizableReferenceQueue.getStartFinalizer(finalizerCopy));
+  }
+
+  static class DecoupledClassLoader extends URLClassLoader {
+
+    public DecoupledClassLoader(URL[] urls) {
+      super(urls);
+    }
+
+    @Override
+    protected synchronized Class<?> loadClass(String name, boolean resolve)
+        throws ClassNotFoundException {
+      // Force Finalizer to load from this class loader, not its parent.
+      if (name.equals(Finalizer.class.getName())) {
+        Class<?> clazz = findClass(name);
+        if (resolve) {
+          resolveClass(clazz);
+        }
+        return clazz;
+      }
+
+      return super.loadClass(name, resolve);
+    }
+  }
+
+  public void testGetFinalizerUrl() {
+    assertNotNull(getClass().getResource("internal/Finalizer.class"));
+  }
+}
diff --git a/guava-tests/test/com/google/common/base/FunctionsTest.java b/guava-tests/test/com/google/common/base/FunctionsTest.java
new file mode 100644
index 0000000..e74f622
--- /dev/null
+++ b/guava-tests/test/com/google/common/base/FunctionsTest.java
@@ -0,0 +1,459 @@
+/*
+ * Copyright (C) 2005 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Maps;
+import com.google.common.testing.EqualsTester;
+import com.google.common.testing.NullPointerTester;
+import com.google.common.testing.SerializableTester;
+
+import junit.framework.TestCase;
+
+import java.io.Serializable;
+import java.util.Map;
+
+/**
+ * Tests for {@link Functions}.
+ *
+ * @author Mike Bostock
+ * @author Vlad Patryshev
+ */
+@GwtCompatible(emulated = true)
+public class FunctionsTest extends TestCase {
+
+  public void testIdentity_same() {
+    Function<String, String> identity = Functions.identity();
+    assertNull(identity.apply(null));
+    assertSame("foo", identity.apply("foo"));
+  }
+
+  public void testIdentity_notSame() {
+    Function<Long, Long> identity = Functions.identity();
+    assertNotSame(new Long(135135L), identity.apply(new Long(135135L)));
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testIdentitySerializable() {
+    checkCanReserializeSingleton(Functions.identity());
+  }
+
+  public void testToStringFunction_apply() {
+    assertEquals("3", Functions.toStringFunction().apply(3));
+    assertEquals("hiya", Functions.toStringFunction().apply("hiya"));
+    assertEquals("I'm a string",
+        Functions.toStringFunction().apply(
+            new Object() {
+              @Override public String toString() {
+                return "I'm a string";
+              }
+            }));
+    try {
+      Functions.toStringFunction().apply(null);
+      fail("expected NullPointerException");
+    } catch (NullPointerException e) {
+      // expected
+    }
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testToStringFunctionSerializable() {
+    checkCanReserializeSingleton(Functions.toStringFunction());
+  }
+
+  @GwtIncompatible("NullPointerTester")
+  public void testNullPointerExceptions() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.testAllPublicStaticMethods(Functions.class);
+  }
+
+  public void testForMapWithoutDefault() {
+    Map<String, Integer> map = Maps.newHashMap();
+    map.put("One", 1);
+    map.put("Three", 3);
+    map.put("Null", null);
+    Function<String, Integer> function = Functions.forMap(map);
+
+    assertEquals(1, function.apply("One").intValue());
+    assertEquals(3, function.apply("Three").intValue());
+    assertNull(function.apply("Null"));
+
+    try {
+      function.apply("Two");
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+
+    new EqualsTester()
+        .addEqualityGroup(function, Functions.forMap(map))
+        .addEqualityGroup(Functions.forMap(map, 42))
+        .testEquals();
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testForMapWithoutDefaultSerializable() {
+    checkCanReserialize(Functions.forMap(ImmutableMap.of(1, 2)));
+  }
+
+  public void testForMapWithDefault() {
+    Map<String, Integer> map = Maps.newHashMap();
+    map.put("One", 1);
+    map.put("Three", 3);
+    map.put("Null", null);
+    Function<String, Integer> function = Functions.forMap(map, 42);
+
+    assertEquals(1, function.apply("One").intValue());
+    assertEquals(42, function.apply("Two").intValue());
+    assertEquals(3, function.apply("Three").intValue());
+    assertNull(function.apply("Null"));
+
+    new EqualsTester()
+        .addEqualityGroup(function, Functions.forMap(map, 42))
+        .addEqualityGroup(Functions.forMap(map))
+        .addEqualityGroup(Functions.forMap(map, null))
+        .addEqualityGroup(Functions.forMap(map, 43))
+        .testEquals();
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testForMapWithDefault_includeSerializable() {
+    Map<String, Integer> map = Maps.newHashMap();
+    map.put("One", 1);
+    map.put("Three", 3);
+    Function<String, Integer> function = Functions.forMap(map, 42);
+
+    assertEquals(1, function.apply("One").intValue());
+    assertEquals(42, function.apply("Two").intValue());
+    assertEquals(3, function.apply("Three").intValue());
+
+    new EqualsTester()
+        .addEqualityGroup(
+            function,
+            Functions.forMap(map, 42),
+            SerializableTester.reserialize(function))
+        .addEqualityGroup(Functions.forMap(map))
+        .addEqualityGroup(Functions.forMap(map, null))
+        .addEqualityGroup(Functions.forMap(map, 43))
+        .testEquals();
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testForMapWithDefaultSerializable() {
+    checkCanReserialize(Functions.forMap(ImmutableMap.of(1, 2), 3));
+  }
+
+  public void testForMapWithDefault_null() {
+    ImmutableMap<String, Integer> map = ImmutableMap.of("One", 1);
+    Function<String, Integer> function = Functions.forMap(map, null);
+
+    assertEquals((Integer) 1, function.apply("One"));
+    assertNull(function.apply("Two"));
+
+    // check basic sanity of equals and hashCode
+    new EqualsTester()
+        .addEqualityGroup(function)
+        .addEqualityGroup(Functions.forMap(map, 1))
+        .testEquals();
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testForMapWithDefault_null_compareWithSerializable() {
+    ImmutableMap<String, Integer> map = ImmutableMap.of("One", 1);
+    Function<String, Integer> function = Functions.forMap(map, null);
+
+    assertEquals((Integer) 1, function.apply("One"));
+    assertNull(function.apply("Two"));
+
+    // check basic sanity of equals and hashCode
+    new EqualsTester()
+        .addEqualityGroup(function, SerializableTester.reserialize(function))
+        .addEqualityGroup(Functions.forMap(map, 1))
+        .testEquals();
+  }
+
+  public void testForMapWildCardWithDefault() {
+    Map<String, Integer> map = Maps.newHashMap();
+    map.put("One", 1);
+    map.put("Three", 3);
+    Number number = Double.valueOf(42);
+    Function<String, Number> function = Functions.forMap(map, number);
+
+    assertEquals(1, function.apply("One").intValue());
+    assertEquals(number, function.apply("Two"));
+    assertEquals(3L, function.apply("Three").longValue());
+  }
+
+  public void testComposition() {
+    Map<String, Integer> mJapaneseToInteger = Maps.newHashMap();
+    mJapaneseToInteger.put("Ichi", 1);
+    mJapaneseToInteger.put("Ni", 2);
+    mJapaneseToInteger.put("San", 3);
+    Function<String, Integer> japaneseToInteger =
+        Functions.forMap(mJapaneseToInteger);
+
+    Map<Integer, String> mIntegerToSpanish = Maps.newHashMap();
+    mIntegerToSpanish.put(1, "Uno");
+    mIntegerToSpanish.put(3, "Tres");
+    mIntegerToSpanish.put(4, "Cuatro");
+    Function<Integer, String> integerToSpanish =
+        Functions.forMap(mIntegerToSpanish);
+
+    Function<String, String> japaneseToSpanish =
+        Functions.compose(integerToSpanish, japaneseToInteger);
+
+    assertEquals("Uno", japaneseToSpanish.apply("Ichi"));
+    try {
+      japaneseToSpanish.apply("Ni");
+      fail();
+    } catch (IllegalArgumentException e) {
+    }
+    assertEquals("Tres", japaneseToSpanish.apply("San"));
+    try {
+      japaneseToSpanish.apply("Shi");
+      fail();
+    } catch (IllegalArgumentException e) {
+    }
+
+    new EqualsTester()
+        .addEqualityGroup(
+            japaneseToSpanish,
+            Functions.compose(integerToSpanish, japaneseToInteger))
+        .addEqualityGroup(japaneseToInteger)
+        .addEqualityGroup(integerToSpanish)
+        .addEqualityGroup(
+            Functions.compose(japaneseToInteger, integerToSpanish))
+        .testEquals();
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testComposition_includeReserializabled() {
+    Map<String, Integer> mJapaneseToInteger = Maps.newHashMap();
+    mJapaneseToInteger.put("Ichi", 1);
+    mJapaneseToInteger.put("Ni", 2);
+    mJapaneseToInteger.put("San", 3);
+    Function<String, Integer> japaneseToInteger =
+        Functions.forMap(mJapaneseToInteger);
+
+    Map<Integer, String> mIntegerToSpanish = Maps.newHashMap();
+    mIntegerToSpanish.put(1, "Uno");
+    mIntegerToSpanish.put(3, "Tres");
+    mIntegerToSpanish.put(4, "Cuatro");
+    Function<Integer, String> integerToSpanish =
+        Functions.forMap(mIntegerToSpanish);
+
+    Function<String, String> japaneseToSpanish =
+        Functions.compose(integerToSpanish, japaneseToInteger);
+
+    new EqualsTester()
+        .addEqualityGroup(
+            japaneseToSpanish,
+            Functions.compose(integerToSpanish, japaneseToInteger),
+            SerializableTester.reserialize(japaneseToSpanish))
+        .addEqualityGroup(japaneseToInteger)
+        .addEqualityGroup(integerToSpanish)
+        .addEqualityGroup(
+            Functions.compose(japaneseToInteger, integerToSpanish))
+        .testEquals();
+  }
+
+  public void testCompositionWildcard() {
+    Map<String, Integer> mapJapaneseToInteger = Maps.newHashMap();
+    Function<String, Integer> japaneseToInteger =
+        Functions.forMap(mapJapaneseToInteger);
+
+    Function<Object, String> numberToSpanish = Functions.constant("Yo no se");
+
+    Function<String, String> japaneseToSpanish =
+        Functions.compose(numberToSpanish, japaneseToInteger);
+  }
+
+  private static class HashCodeFunction implements Function<Object, Integer> {
+    @Override
+    public Integer apply(Object o) {
+      return (o == null) ? 0 : o.hashCode();
+    }
+  }
+
+  public void testComposeOfFunctionsIsAssociative() {
+    Map<Float, String> m = ImmutableMap.of(
+        4.0f, "A", 3.0f, "B", 2.0f, "C", 1.0f, "D");
+    Function<? super Integer, Boolean> h = Functions.constant(Boolean.TRUE);
+    Function<? super String, Integer> g = new HashCodeFunction();
+    Function<Float, String> f = Functions.forMap(m, "F");
+
+    Function<Float, Boolean> c1 = Functions.compose(Functions.compose(h, g), f);
+    Function<Float, Boolean> c2 = Functions.compose(h, Functions.compose(g, f));
+
+    // Might be nice (eventually) to have:
+    //     assertEquals(c1, c2);
+
+    // But for now, settle for this:
+    assertEquals(c1.hashCode(), c2.hashCode());
+
+    assertEquals(c1.apply(1.0f), c2.apply(1.0f));
+    assertEquals(c1.apply(5.0f), c2.apply(5.0f));
+  }
+
+  public void testComposeOfPredicateAndFunctionIsAssociative() {
+    Map<Float, String> m = ImmutableMap.of(
+        4.0f, "A", 3.0f, "B", 2.0f, "C", 1.0f, "D");
+    Predicate<? super Integer> h = Predicates.equalTo(42);
+    Function<? super String, Integer> g = new HashCodeFunction();
+    Function<Float, String> f = Functions.forMap(m, "F");
+
+    Predicate<Float> p1 = Predicates.compose(Predicates.compose(h, g), f);
+    Predicate<Float> p2 = Predicates.compose(h, Functions.compose(g, f));
+
+    // Might be nice (eventually) to have:
+    //     assertEquals(p1, p2);
+
+    // But for now, settle for this:
+    assertEquals(p1.hashCode(), p2.hashCode());
+
+    assertEquals(p1.apply(1.0f), p2.apply(1.0f));
+    assertEquals(p1.apply(5.0f), p2.apply(5.0f));
+  }
+
+  public void testForPredicate() {
+    Function<Object, Boolean> alwaysTrue =
+        Functions.forPredicate(Predicates.alwaysTrue());
+    Function<Object, Boolean> alwaysFalse =
+        Functions.forPredicate(Predicates.alwaysFalse());
+
+    assertTrue(alwaysTrue.apply(0));
+    assertFalse(alwaysFalse.apply(0));
+
+    new EqualsTester()
+        .addEqualityGroup(
+            alwaysTrue, Functions.forPredicate(Predicates.alwaysTrue()))
+        .addEqualityGroup(alwaysFalse)
+        .addEqualityGroup(Functions.identity())
+        .testEquals();
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testForPredicateSerializable() {
+    checkCanReserialize(Functions.forPredicate(Predicates.equalTo(5)));
+  }
+
+  public void testConstant() {
+    Function<Object, Object> f = Functions.<Object>constant("correct");
+    assertEquals("correct", f.apply(new Object()));
+    assertEquals("correct", f.apply(null));
+
+    Function<Object, String> g = Functions.constant(null);
+    assertEquals(null, g.apply(2));
+    assertEquals(null, g.apply(null));
+
+    new EqualsTester()
+        .addEqualityGroup(f, Functions.constant("correct"))
+        .addEqualityGroup(Functions.constant("incorrect"))
+        .addEqualityGroup(Functions.toStringFunction())
+        .addEqualityGroup(g)
+        .testEquals();
+
+    new EqualsTester()
+        .addEqualityGroup(g, Functions.constant(null))
+        .addEqualityGroup(Functions.constant("incorrect"))
+        .addEqualityGroup(Functions.toStringFunction())
+        .addEqualityGroup(f)
+        .testEquals();
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testConstantSerializable() {
+    checkCanReserialize(Functions.constant(5));
+  }
+
+  private static class CountingSupplier
+      implements Supplier<Integer>, Serializable {
+
+    private static final long serialVersionUID = 0;
+    
+    private int value;
+
+    @Override
+    public Integer get() {
+      return ++value;
+    }
+    
+    @Override
+    public boolean equals(Object obj) {
+      if (obj instanceof CountingSupplier) {
+        return this.value == ((CountingSupplier) obj).value;
+      }
+      return false;
+    }
+    
+    @Override
+    public int hashCode() {
+      return value;
+    }
+  }
+
+  public void testForSupplier() {
+    Supplier<Integer> supplier = new CountingSupplier();
+    Function<Object, Integer> function = Functions.forSupplier(supplier);
+
+    assertEquals(1, (int) function.apply(null));
+    assertEquals(2, (int) function.apply("foo"));
+    
+    new EqualsTester()
+        .addEqualityGroup(function, Functions.forSupplier(supplier))
+        .addEqualityGroup(Functions.forSupplier(new CountingSupplier()))
+        .addEqualityGroup(Functions.forSupplier(Suppliers.ofInstance(12)))
+        .addEqualityGroup(Functions.toStringFunction())
+        .testEquals();
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testForSupplierSerializable() {
+    checkCanReserialize(Functions.forSupplier(new CountingSupplier()));
+  }
+
+  @GwtIncompatible("SerializableTester")
+  private <Y> void checkCanReserialize(Function<? super Integer, Y> f) {
+    Function<? super Integer, Y> g = SerializableTester.reserializeAndAssert(f);
+    for (int i = 1; i < 5; i++) {
+      // convoluted way to check that the same result happens from each
+      Y expected = null;
+      try {
+        expected = f.apply(i);
+      } catch (IllegalArgumentException e) {
+        try {
+          g.apply(i);
+          fail();
+        } catch (IllegalArgumentException ok) {
+          continue;
+        }
+      }
+      assertEquals(expected, g.apply(i));
+    }
+  }
+
+  @GwtIncompatible("SerializableTester")
+  private <Y> void checkCanReserializeSingleton(Function<? super String, Y> f) {
+    Function<? super String, Y> g = SerializableTester.reserializeAndAssert(f);
+    assertSame(f, g);
+    for (Integer i = 1; i < 5; i++) {
+      assertEquals(f.apply(i.toString()), g.apply(i.toString()));
+    }
+  }
+
+}
diff --git a/guava-tests/test/com/google/common/base/JoinerTest.java b/guava-tests/test/com/google/common/base/JoinerTest.java
new file mode 100644
index 0000000..1b6bbc5
--- /dev/null
+++ b/guava-tests/test/com/google/common/base/JoinerTest.java
@@ -0,0 +1,412 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.base.Joiner.MapJoiner;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableMultimap;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Iterators;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.common.testing.NullPointerTester;
+
+import junit.framework.TestCase;
+
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Unit test for {@link Joiner}.
+ *
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible(emulated = true)
+public class JoinerTest extends TestCase {
+  private static final Joiner J = Joiner.on("-");
+
+  // <Integer> needed to prevent warning :(
+  private static final Iterable<Integer> ITERABLE_ = Arrays.<Integer>asList();
+  private static final Iterable<Integer> ITERABLE_1 = Arrays.asList(1);
+  private static final Iterable<Integer> ITERABLE_12 = Arrays.asList(1, 2);
+  private static final Iterable<Integer> ITERABLE_123 = Arrays.asList(1, 2, 3);
+  private static final Iterable<Integer> ITERABLE_NULL = Arrays.asList((Integer) null);
+  private static final Iterable<Integer> ITERABLE_NULL_NULL
+      = Arrays.asList((Integer) null, null);
+  private static final Iterable<Integer> ITERABLE_NULL_1 = Arrays.asList(null, 1);
+  private static final Iterable<Integer> ITERABLE_1_NULL = Arrays.asList(1, null);
+  private static final Iterable<Integer> ITERABLE_1_NULL_2 = Arrays.asList(1, null, 2);
+  private static final Iterable<Integer> ITERABLE_FOUR_NULLS
+      = Arrays.asList((Integer) null, null, null, null);
+
+  public void testNoSpecialNullBehavior() {
+    checkNoOutput(J, ITERABLE_);
+    checkResult(J, ITERABLE_1, "1");
+    checkResult(J, ITERABLE_12, "1-2");
+    checkResult(J, ITERABLE_123, "1-2-3");
+
+    try {
+      J.join(ITERABLE_NULL);
+      fail();
+    } catch (NullPointerException expected) {
+    }
+    try {
+      J.join(ITERABLE_1_NULL_2);
+      fail();
+    } catch (NullPointerException expected) {
+    }
+
+    try {
+      J.join(ITERABLE_NULL.iterator());
+      fail();
+    } catch (NullPointerException expected) {
+    }
+    try {
+      J.join(ITERABLE_1_NULL_2.iterator());
+      fail();
+    } catch (NullPointerException expected) {
+    }
+  }
+
+  public void testOnCharOverride() {
+    Joiner onChar = Joiner.on('-');
+    checkNoOutput(onChar, ITERABLE_);
+    checkResult(onChar, ITERABLE_1, "1");
+    checkResult(onChar, ITERABLE_12, "1-2");
+    checkResult(onChar, ITERABLE_123, "1-2-3");
+  }
+
+  public void testSkipNulls() {
+    Joiner skipNulls = J.skipNulls();
+    checkNoOutput(skipNulls, ITERABLE_);
+    checkNoOutput(skipNulls, ITERABLE_NULL);
+    checkNoOutput(skipNulls, ITERABLE_NULL_NULL);
+    checkNoOutput(skipNulls, ITERABLE_FOUR_NULLS);
+    checkResult(skipNulls, ITERABLE_1, "1");
+    checkResult(skipNulls, ITERABLE_12, "1-2");
+    checkResult(skipNulls, ITERABLE_123, "1-2-3");
+    checkResult(skipNulls, ITERABLE_NULL_1, "1");
+    checkResult(skipNulls, ITERABLE_1_NULL, "1");
+    checkResult(skipNulls, ITERABLE_1_NULL_2, "1-2");
+  }
+
+  public void testUseForNull() {
+    Joiner zeroForNull = J.useForNull("0");
+    checkNoOutput(zeroForNull, ITERABLE_);
+    checkResult(zeroForNull, ITERABLE_1, "1");
+    checkResult(zeroForNull, ITERABLE_12, "1-2");
+    checkResult(zeroForNull, ITERABLE_123, "1-2-3");
+    checkResult(zeroForNull, ITERABLE_NULL, "0");
+    checkResult(zeroForNull, ITERABLE_NULL_NULL, "0-0");
+    checkResult(zeroForNull, ITERABLE_NULL_1, "0-1");
+    checkResult(zeroForNull, ITERABLE_1_NULL, "1-0");
+    checkResult(zeroForNull, ITERABLE_1_NULL_2, "1-0-2");
+    checkResult(zeroForNull, ITERABLE_FOUR_NULLS, "0-0-0-0");
+  }
+
+  private static void checkNoOutput(Joiner joiner, Iterable<Integer> set) {
+    assertEquals("", joiner.join(set));
+    assertEquals("", joiner.join(set.iterator()));
+
+    Object[] array = Lists.newArrayList(set).toArray(new Integer[0]);
+    assertEquals("", joiner.join(array));
+
+    StringBuilder sb1FromIterable = new StringBuilder();
+    assertSame(sb1FromIterable, joiner.appendTo(sb1FromIterable, set));
+    assertEquals(0, sb1FromIterable.length());
+
+    StringBuilder sb1FromIterator = new StringBuilder();
+    assertSame(sb1FromIterator, joiner.appendTo(sb1FromIterator, set));
+    assertEquals(0, sb1FromIterator.length());
+
+    StringBuilder sb2 = new StringBuilder();
+    assertSame(sb2, joiner.appendTo(sb2, array));
+    assertEquals(0, sb2.length());
+
+    try {
+      joiner.appendTo(NASTY_APPENDABLE, set);
+    } catch (IOException e) {
+      throw new AssertionError(e);
+    }
+
+    try {
+      joiner.appendTo(NASTY_APPENDABLE, set.iterator());
+    } catch (IOException e) {
+      throw new AssertionError(e);
+    }
+
+    try {
+      joiner.appendTo(NASTY_APPENDABLE, array);
+    } catch (IOException e) {
+      throw new AssertionError(e);
+    }
+  }
+
+  private static final Appendable NASTY_APPENDABLE = new Appendable() {
+    @Override
+    public Appendable append(CharSequence csq) throws IOException {
+      throw new IOException();
+    }
+    @Override
+    public Appendable append(CharSequence csq, int start, int end) throws IOException {
+      throw new IOException();
+    }
+    @Override
+    public Appendable append(char c) throws IOException {
+      throw new IOException();
+    }
+  };
+
+  private static void checkResult(Joiner joiner, Iterable<Integer> parts, String expected) {
+    assertEquals(expected, joiner.join(parts));
+    assertEquals(expected, joiner.join(parts.iterator()));
+
+    StringBuilder sb1FromIterable = new StringBuilder().append('x');
+    joiner.appendTo(sb1FromIterable, parts);
+    assertEquals("x" + expected, sb1FromIterable.toString());
+
+    StringBuilder sb1FromIterator = new StringBuilder().append('x');
+    joiner.appendTo(sb1FromIterator, parts.iterator());
+    assertEquals("x" + expected, sb1FromIterator.toString());
+
+    Integer[] partsArray = Lists.newArrayList(parts).toArray(new Integer[0]);
+    assertEquals(expected, joiner.join(partsArray));
+
+    StringBuilder sb2 = new StringBuilder().append('x');
+    joiner.appendTo(sb2, partsArray);
+    assertEquals("x" + expected, sb2.toString());
+
+    int num = partsArray.length - 2;
+    if (num >= 0) {
+      Object[] rest = new Integer[num];
+      for (int i = 0; i < num; i++) {
+        rest[i] = partsArray[i + 2];
+      }
+
+      assertEquals(expected, joiner.join(partsArray[0], partsArray[1], rest));
+
+      StringBuilder sb3 = new StringBuilder().append('x');
+      joiner.appendTo(sb3, partsArray[0], partsArray[1], rest);
+      assertEquals("x" + expected, sb3.toString());
+    }
+  }
+
+  public void testIterableIterator() {
+    Joiner onChar = Joiner.on('-');
+    checkIterableIterator(onChar, "1-2-3-4");
+
+    Joiner skipNulls = J.skipNulls();
+    checkIterableIterator(skipNulls, "1-2-3-4");
+
+    Joiner zeroForNull = J.useForNull("0");
+    checkIterableIterator(zeroForNull, "1-2-3-4");
+  }
+  
+  private static void checkIterableIterator(Joiner joiner, String expected) {
+    assertEquals(expected, joiner.join(new IterableIterator()));
+
+    StringBuilder sb1 = new StringBuilder().append('x');
+    joiner.appendTo(sb1, new IterableIterator());
+    assertEquals("x" + expected, sb1.toString());
+
+    Integer[] partsArray =
+        Lists.newArrayList(new IterableIterator().iterator()).toArray(new Integer[0]);
+    assertEquals(expected, joiner.join(partsArray));
+
+    StringBuilder sb2 = new StringBuilder().append('x');
+    joiner.appendTo(sb2, partsArray);
+    assertEquals("x" + expected, sb2.toString());
+
+    int num = partsArray.length - 2;
+    if (num >= 0) {
+      Object[] rest = new Integer[num];
+      for (int i = 0; i < num; i++) {
+        rest[i] = partsArray[i + 2];
+      }
+
+      assertEquals(expected, joiner.join(partsArray[0], partsArray[1], rest));
+
+      StringBuilder sb3 = new StringBuilder().append('x');
+      joiner.appendTo(sb3, partsArray[0], partsArray[1], rest);
+      assertEquals("x" + expected, sb3.toString());
+    }
+  }
+
+  public void test_useForNull_skipNulls() {
+    Joiner j = Joiner.on("x").useForNull("y");
+    try {
+      j.skipNulls();
+      fail();
+    } catch (UnsupportedOperationException expected) {
+    }
+  }
+
+  public void test_skipNulls_useForNull() {
+    Joiner j = Joiner.on("x").skipNulls();
+    try {
+      j.useForNull("y");
+      fail();
+    } catch (UnsupportedOperationException expected) {
+    }
+  }
+
+  public void test_useForNull_twice() {
+    Joiner j = Joiner.on("x").useForNull("y");
+    try {
+      j.useForNull("y");
+      fail();
+    } catch (UnsupportedOperationException expected) {
+    }
+  }
+
+  public void testMap() {
+    MapJoiner j = Joiner.on(";").withKeyValueSeparator(":");
+    assertEquals("", j.join(ImmutableMap.of()));
+    assertEquals(":", j.join(ImmutableMap.of("", "")));
+
+    Map<String, String> mapWithNulls = Maps.newLinkedHashMap();
+    mapWithNulls.put("a", null);
+    mapWithNulls.put(null, "b");
+
+    try {
+      j.join(mapWithNulls);
+      fail();
+    } catch (NullPointerException expected) {
+    }
+
+    assertEquals("a:00;00:b", j.useForNull("00").join(mapWithNulls));
+
+    StringBuilder sb = new StringBuilder();
+    j.appendTo(sb, ImmutableMap.of(1, 2, 3, 4, 5, 6));
+    assertEquals("1:2;3:4;5:6", sb.toString());
+  }
+
+  public void testEntries() {
+    MapJoiner j = Joiner.on(";").withKeyValueSeparator(":");
+    assertEquals("", j.join(ImmutableMultimap.of().entries()));
+    assertEquals("", j.join(ImmutableMultimap.of().entries().iterator()));
+    assertEquals(":", j.join(ImmutableMultimap.of("", "").entries()));
+    assertEquals(":", j.join(ImmutableMultimap.of("", "").entries().iterator()));
+    assertEquals("1:a;1:b", j.join(ImmutableMultimap.of("1", "a", "1", "b").entries()));
+    assertEquals("1:a;1:b", j.join(ImmutableMultimap.of("1", "a", "1", "b").entries().iterator()));
+
+    Map<String, String> mapWithNulls = Maps.newLinkedHashMap();
+    mapWithNulls.put("a", null);
+    mapWithNulls.put(null, "b");
+    Set<Map.Entry<String, String>> entriesWithNulls = mapWithNulls.entrySet();
+
+    try {
+      j.join(entriesWithNulls);
+      fail();
+    } catch (NullPointerException expected) {
+    }
+
+    try {
+      j.join(entriesWithNulls.iterator());
+      fail();
+    } catch (NullPointerException expected) {
+    }
+
+    assertEquals("a:00;00:b", j.useForNull("00").join(entriesWithNulls));
+    assertEquals("a:00;00:b", j.useForNull("00").join(entriesWithNulls.iterator()));
+
+    StringBuilder sb1 = new StringBuilder();
+    j.appendTo(sb1, ImmutableMultimap.of(1, 2, 3, 4, 5, 6, 1, 3, 5, 10).entries());
+    assertEquals("1:2;1:3;3:4;5:6;5:10", sb1.toString());
+
+    StringBuilder sb2 = new StringBuilder();
+    j.appendTo(sb2, ImmutableMultimap.of(1, 2, 3, 4, 5, 6, 1, 3, 5, 10).entries().iterator());
+    assertEquals("1:2;1:3;3:4;5:6;5:10", sb2.toString());
+  }
+
+  public void test_skipNulls_onMap() {
+    Joiner j = Joiner.on(",").skipNulls();
+    try {
+      j.withKeyValueSeparator("/");
+      fail();
+    } catch (UnsupportedOperationException expected) {
+    }
+  }
+
+  private static class DontStringMeBro implements CharSequence {
+    @Override
+    public int length() {
+      return 3;
+    }
+    @Override
+    public char charAt(int index) {
+      return "foo".charAt(index);
+    }
+    @Override
+    public CharSequence subSequence(int start, int end) {
+      return "foo".subSequence(start, end);
+    }
+    @Override public String toString() {
+      fail("shouldn't be invoked");
+      return null;
+    }
+  }
+
+  // Don't do this.
+  private static class IterableIterator implements Iterable<Integer>, Iterator<Integer> {
+    private static final ImmutableSet<Integer> INTEGERS = ImmutableSet.of(1, 2, 3, 4);
+    private final Iterator<Integer> iterator;
+    public IterableIterator() {
+      this.iterator = iterator();
+    }
+    @Override public Iterator<Integer> iterator() {
+      return INTEGERS.iterator();
+    }
+    @Override public boolean hasNext() {
+      return iterator.hasNext();
+    }
+    @Override public Integer next() {
+      return iterator.next();
+    }
+    @Override public void remove() {
+      iterator.remove();
+    }
+  }
+
+  @GwtIncompatible("StringBuilder.append in GWT invokes Object.toString(), unlike the JRE version.")
+  public void testDontConvertCharSequenceToString() {
+    assertEquals("foo,foo", Joiner.on(",").join(
+        new DontStringMeBro(), new DontStringMeBro()));
+    assertEquals("foo,bar,foo", Joiner.on(",").useForNull("bar").join(
+        new DontStringMeBro(), null, new DontStringMeBro()));
+  }
+
+  @GwtIncompatible("NullPointerTester")
+  public void testNullPointers() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.setDefault(StringBuilder.class, new StringBuilder());
+    // This is necessary because of the generics hackery we have to temporarily support parameters
+    // which implement both Iterator and Iterable.
+    tester.setDefault(Object.class, Iterators.emptyIterator());
+    tester.testAllPublicStaticMethods(Joiner.class);
+    tester.testAllPublicInstanceMethods(Joiner.on(","));
+    tester.testAllPublicInstanceMethods(Joiner.on(",").skipNulls());
+    tester.testAllPublicInstanceMethods(Joiner.on(",").useForNull("x"));
+    tester.testAllPublicInstanceMethods(
+        Joiner.on(",").withKeyValueSeparator("="));
+  }
+}
diff --git a/guava-tests/test/com/google/common/base/ObjectsTest.java b/guava-tests/test/com/google/common/base/ObjectsTest.java
new file mode 100644
index 0000000..7b1f47b
--- /dev/null
+++ b/guava-tests/test/com/google/common/base/ObjectsTest.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2006 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.testing.NullPointerTester;
+
+import junit.framework.TestCase;
+
+/**
+ * Tests for {@link Objects}.
+ *
+ * @author Laurence Gonsalves
+ */
+@GwtCompatible(emulated = true)
+public class ObjectsTest extends TestCase {
+  public void testEqual() throws Exception {
+    assertTrue(Objects.equal(1, 1));
+    assertTrue(Objects.equal(null, null));
+
+    // test distinct string objects
+    String s1 = "foobar";
+    String s2 = new String(s1);
+    assertTrue(Objects.equal(s1, s2));
+
+    assertFalse(Objects.equal(s1, null));
+    assertFalse(Objects.equal(null, s1));
+    assertFalse(Objects.equal("foo", "bar"));
+    assertFalse(Objects.equal("1", 1));
+  }
+
+  public void testHashCode() throws Exception {
+    int h1 = Objects.hashCode(1, "two", 3.0);
+    int h2 = Objects.hashCode(new Integer(1), new String("two"),
+                              new Double(3.0));
+    // repeatable
+    assertEquals(h1, h2);
+
+    // These don't strictly need to be true, but they're nice properties.
+    assertTrue(Objects.hashCode(1, 2, null) != Objects.hashCode(1, 2));
+    assertTrue(Objects.hashCode(1, 2, null) != Objects.hashCode(1, null, 2));
+    assertTrue(Objects.hashCode(1, null, 2) != Objects.hashCode(1, 2));
+    assertTrue(Objects.hashCode(1, 2, 3) != Objects.hashCode(3, 2, 1));
+    assertTrue(Objects.hashCode(1, 2, 3) != Objects.hashCode(2, 3, 1));
+  }
+
+  public void testFirstNonNull_withNonNull() throws Exception {
+    String s1 = "foo";
+    String s2 = Objects.firstNonNull(s1, "bar");
+    assertSame(s1, s2);
+
+    Long n1 = new Long(42);
+    Long n2 = Objects.firstNonNull(null, n1);
+    assertSame(n1, n2);
+  }
+
+  public void testFirstNonNull_throwsNullPointerException() throws Exception {
+    try {
+      Objects.firstNonNull(null, null);
+      fail("expected NullPointerException");
+    } catch (NullPointerException expected) {
+    }
+  }
+
+  @GwtIncompatible("NullPointerTester")
+  public void testNullPointers() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.testAllPublicStaticMethods(Objects.class);
+  }
+}
diff --git a/guava-tests/test/com/google/common/base/OptionalTest.java b/guava-tests/test/com/google/common/base/OptionalTest.java
new file mode 100644
index 0000000..5a0b765
--- /dev/null
+++ b/guava-tests/test/com/google/common/base/OptionalTest.java
@@ -0,0 +1,219 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base;
+
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.collect.ImmutableList;
+import com.google.common.testing.NullPointerTester;
+import com.google.common.testing.SerializableTester;
+
+import junit.framework.TestCase;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Unit test for {@link Optional}.
+ *
+ * @author Kurt Alfred Kluever
+ */
+@GwtCompatible(emulated = true)
+public final class OptionalTest extends TestCase {
+  public void testAbsent() {
+    Optional<String> optionalName = Optional.absent();
+    assertFalse(optionalName.isPresent());
+  }
+
+  public void testOf() {
+    assertEquals("training", Optional.of("training").get());
+  }
+
+  public void testOf_null() {
+    try {
+      Optional.of(null);
+      fail();
+    } catch (NullPointerException expected) {
+    }
+  }
+
+  public void testFromNullable() {
+    Optional<String> optionalName = Optional.fromNullable("bob");
+    assertEquals("bob", optionalName.get());
+  }
+
+  public void testFromNullable_null() {
+    // not promised by spec, but easier to test
+    assertSame(Optional.absent(), Optional.fromNullable(null));
+  }
+
+  public void testIsPresent_no() {
+    assertFalse(Optional.absent().isPresent());
+  }
+
+  public void testIsPresent_yes() {
+    assertTrue(Optional.of("training").isPresent());
+  }
+
+  public void testGet_absent() {
+    Optional<String> optional = Optional.absent();
+    try {
+      optional.get();
+      fail();
+    } catch (IllegalStateException expected) {
+    }
+  }
+
+  public void testGet_present() {
+    assertEquals("training", Optional.of("training").get());
+  }
+
+  public void testOr_T_present() {
+    assertEquals("a", Optional.of("a").or("default"));
+  }
+
+  public void testOr_T_absent() {
+    assertEquals("default", Optional.absent().or("default"));
+  }
+
+  public void testOr_Supplier_present() {
+    assertEquals("a", Optional.of("a").or(Suppliers.ofInstance("fallback")));
+  }
+
+  public void testOr_Supplier_absent() {
+    assertEquals("fallback", Optional.absent().or(Suppliers.ofInstance("fallback")));
+  }
+
+  public void testOr_NullSupplier_absent() {
+    Supplier<Object> nullSupplier = Suppliers.ofInstance(null);
+    Optional<Object> absentOptional = Optional.absent();
+    try {
+      absentOptional.or(nullSupplier);
+      fail();
+    } catch (NullPointerException expected) {
+    }
+  }
+
+  public void testOr_Optional_present() {
+    assertEquals(Optional.of("a"), Optional.of("a").or(Optional.of("fallback")));
+  }
+
+  public void testOr_Optional_absent() {
+    assertEquals(Optional.of("fallback"), Optional.absent().or(Optional.of("fallback")));
+  }
+
+  public void testOrNull_present() {
+    assertEquals("a", Optional.of("a").orNull());
+  }
+
+  public void testOrNull_absent() {
+    assertNull(Optional.absent().orNull());
+  }
+  
+  public void testAsSet_present() {
+    Set<String> expected = Collections.singleton("a");
+    assertEquals(expected, Optional.of("a").asSet());
+  }
+  
+  public void testAsSet_absent() {
+    assertTrue("Returned set should be empty", Optional.absent().asSet().isEmpty());
+  }
+  
+  public void testAsSet_presentIsImmutable() {
+    Set<String> presentAsSet = Optional.of("a").asSet();
+    try {
+      presentAsSet.add("b");
+      fail();
+    } catch (UnsupportedOperationException expected) {
+    }
+  }
+
+  public void testAsSet_absentIsImmutable() {
+    Set<Object> absentAsSet = Optional.absent().asSet();
+    try {
+      absentAsSet.add("foo");
+      fail();
+    } catch (UnsupportedOperationException expected) {
+    }
+  }
+
+  // TODO(kevinb): use EqualsTester
+
+  public void testEqualsAndHashCode_absent() {
+    assertEquals(Optional.<String>absent(), Optional.<Integer>absent());
+    assertEquals(Optional.absent().hashCode(), Optional.absent().hashCode());
+  }
+
+  public void testEqualsAndHashCode_present() {
+    assertEquals(Optional.of("training"), Optional.of("training"));
+    assertFalse(Optional.of("a").equals(Optional.of("b")));
+    assertFalse(Optional.of("a").equals(Optional.absent()));
+    assertEquals(Optional.of("training").hashCode(), Optional.of("training").hashCode());
+  }
+
+  public void testToString_absent() {
+    assertEquals("Optional.absent()", Optional.absent().toString());
+  }
+
+  public void testToString_present() {
+    assertEquals("Optional.of(training)", Optional.of("training").toString());
+  }
+
+  public void testPresentInstances_allPresent() {
+    List<Optional<String>> optionals =
+        ImmutableList.of(Optional.of("a"), Optional.of("b"), Optional.of("c"));
+    ASSERT.that(Optional.presentInstances(optionals)).hasContentsInOrder("a", "b", "c");
+  }
+  
+  public void testPresentInstances_allAbsent() {
+    List<Optional<Object>> optionals =
+        ImmutableList.of(Optional.absent(), Optional.absent());
+    ASSERT.that(Optional.presentInstances(optionals)).isEmpty();
+  }
+  
+  public void testPresentInstances_somePresent() {
+    List<Optional<String>> optionals =
+        ImmutableList.of(Optional.of("a"), Optional.<String>absent(), Optional.of("c"));
+    ASSERT.that(Optional.presentInstances(optionals)).hasContentsInOrder("a", "c");
+  }
+  
+  public void testPresentInstances_callingIteratorTwice() {
+    List<Optional<String>> optionals =
+        ImmutableList.of(Optional.of("a"), Optional.<String>absent(), Optional.of("c"));
+    Iterable<String> onlyPresent = Optional.presentInstances(optionals);
+    ASSERT.that(onlyPresent).hasContentsInOrder("a", "c");
+    ASSERT.that(onlyPresent).hasContentsInOrder("a", "c");
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testSerialization() {
+    SerializableTester.reserializeAndAssert(Optional.absent());
+    SerializableTester.reserializeAndAssert(Optional.of("foo"));
+  }
+
+  @GwtIncompatible("NullPointerTester")
+  public void testNullPointers() throws Exception {
+    NullPointerTester npTester = new NullPointerTester();
+    npTester.testAllPublicConstructors(Optional.class);
+    npTester.testAllPublicStaticMethods(Optional.class);
+    npTester.testAllPublicInstanceMethods(Optional.absent());
+    npTester.testAllPublicInstanceMethods(Optional.of("training"));
+  }
+}
diff --git a/guava-tests/test/com/google/common/base/PreconditionsTest.java b/guava-tests/test/com/google/common/base/PreconditionsTest.java
new file mode 100644
index 0000000..8f19d40
--- /dev/null
+++ b/guava-tests/test/com/google/common/base/PreconditionsTest.java
@@ -0,0 +1,373 @@
+/*
+ * Copyright (C) 2006 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.testing.NullPointerTester;
+
+import junit.framework.TestCase;
+
+/**
+ * Unit test for {@link Preconditions}.
+ *
+ * @author Kevin Bourrillion
+ * @author Jared Levy
+ */
+@GwtCompatible(emulated = true)
+public class PreconditionsTest extends TestCase {
+  public void testCheckArgument_simple_success() {
+    Preconditions.checkArgument(true);
+  }
+
+  public void testCheckArgument_simple_failure() {
+    try {
+      Preconditions.checkArgument(false);
+      fail("no exception thrown");
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  public void testCheckArgument_simpleMessage_success() {
+    Preconditions.checkArgument(true, IGNORE_ME);
+  }
+
+  public void testCheckArgument_simpleMessage_failure() {
+    try {
+      Preconditions.checkArgument(false, new Message());
+      fail("no exception thrown");
+    } catch (IllegalArgumentException expected) {
+      verifySimpleMessage(expected);
+    }
+  }
+
+  public void testCheckArgument_nullMessage_failure() {
+    try {
+      Preconditions.checkArgument(false, null);
+      fail("no exception thrown");
+    } catch (IllegalArgumentException expected) {
+      assertEquals("null", expected.getMessage());
+    }
+  }
+
+  public void testCheckArgument_complexMessage_success() {
+    Preconditions.checkArgument(true, "%s", IGNORE_ME);
+  }
+
+  public void testCheckArgument_complexMessage_failure() {
+    try {
+      Preconditions.checkArgument(false, FORMAT, 5);
+      fail("no exception thrown");
+    } catch (IllegalArgumentException expected) {
+      verifyComplexMessage(expected);
+    }
+  }
+
+  public void testCheckState_simple_success() {
+    Preconditions.checkState(true);
+  }
+
+  public void testCheckState_simple_failure() {
+    try {
+      Preconditions.checkState(false);
+      fail("no exception thrown");
+    } catch (IllegalStateException expected) {
+    }
+  }
+
+  public void testCheckState_simpleMessage_success() {
+    Preconditions.checkState(true, IGNORE_ME);
+  }
+
+  public void testCheckState_simpleMessage_failure() {
+    try {
+      Preconditions.checkState(false, new Message());
+      fail("no exception thrown");
+    } catch (IllegalStateException expected) {
+      verifySimpleMessage(expected);
+    }
+  }
+
+  public void testCheckState_nullMessage_failure() {
+    try {
+      Preconditions.checkState(false, null);
+      fail("no exception thrown");
+    } catch (IllegalStateException expected) {
+      assertEquals("null", expected.getMessage());
+    }
+  }
+
+  public void testCheckState_complexMessage_success() {
+    Preconditions.checkState(true, "%s", IGNORE_ME);
+  }
+
+  public void testCheckState_complexMessage_failure() {
+    try {
+      Preconditions.checkState(false, FORMAT, 5);
+      fail("no exception thrown");
+    } catch (IllegalStateException expected) {
+      verifyComplexMessage(expected);
+    }
+  }
+
+  private static final String NON_NULL_STRING = "foo";
+
+  public void testCheckNotNull_simple_success() {
+    String result = Preconditions.checkNotNull(NON_NULL_STRING);
+    assertSame(NON_NULL_STRING, result);
+  }
+
+  public void testCheckNotNull_simple_failure() {
+    try {
+      Preconditions.checkNotNull(null);
+      fail("no exception thrown");
+    } catch (NullPointerException expected) {
+    }
+  }
+
+  public void testCheckNotNull_simpleMessage_success() {
+    String result = Preconditions.checkNotNull(NON_NULL_STRING, IGNORE_ME);
+    assertSame(NON_NULL_STRING, result);
+  }
+
+  public void testCheckNotNull_simpleMessage_failure() {
+    try {
+      Preconditions.checkNotNull(null, new Message());
+      fail("no exception thrown");
+    } catch (NullPointerException expected) {
+      verifySimpleMessage(expected);
+    }
+  }
+
+  public void testCheckNotNull_complexMessage_success() {
+    String result = Preconditions.checkNotNull(
+        NON_NULL_STRING, "%s", IGNORE_ME);
+    assertSame(NON_NULL_STRING, result);
+  }
+
+  public void testCheckNotNull_complexMessage_failure() {
+    try {
+      Preconditions.checkNotNull(null, FORMAT, 5);
+      fail("no exception thrown");
+    } catch (NullPointerException expected) {
+      verifyComplexMessage(expected);
+    }
+  }
+
+  public void testCheckElementIndex_ok() {
+    assertEquals(0, Preconditions.checkElementIndex(0, 1));
+    assertEquals(0, Preconditions.checkElementIndex(0, 2));
+    assertEquals(1, Preconditions.checkElementIndex(1, 2));
+  }
+
+  public void testCheckElementIndex_badSize() {
+    try {
+      Preconditions.checkElementIndex(1, -1);
+      fail();
+    } catch (IllegalArgumentException expected) {
+      // don't care what the message text is, as this is an invalid usage of
+      // the Preconditions class, unlike all the other exceptions it throws
+    }
+  }
+
+  public void testCheckElementIndex_negative() {
+    try {
+      Preconditions.checkElementIndex(-1, 1);
+      fail();
+    } catch (IndexOutOfBoundsException expected) {
+      assertEquals("index (-1) must not be negative", expected.getMessage());
+    }
+  }
+
+  public void testCheckElementIndex_tooHigh() {
+    try {
+      Preconditions.checkElementIndex(1, 1);
+      fail();
+    } catch (IndexOutOfBoundsException expected) {
+      assertEquals("index (1) must be less than size (1)",
+          expected.getMessage());
+    }
+  }
+
+  public void testCheckElementIndex_withDesc_negative() {
+    try {
+      Preconditions.checkElementIndex(-1, 1, "foo");
+      fail();
+    } catch (IndexOutOfBoundsException expected) {
+      assertEquals("foo (-1) must not be negative", expected.getMessage());
+    }
+  }
+
+  public void testCheckElementIndex_withDesc_tooHigh() {
+    try {
+      Preconditions.checkElementIndex(1, 1, "foo");
+      fail();
+    } catch (IndexOutOfBoundsException expected) {
+      assertEquals("foo (1) must be less than size (1)",
+          expected.getMessage());
+    }
+  }
+
+  public void testCheckPositionIndex_ok() {
+    assertEquals(0, Preconditions.checkPositionIndex(0, 0));
+    assertEquals(0, Preconditions.checkPositionIndex(0, 1));
+    assertEquals(1, Preconditions.checkPositionIndex(1, 1));
+  }
+
+  public void testCheckPositionIndex_badSize() {
+    try {
+      Preconditions.checkPositionIndex(1, -1);
+      fail();
+    } catch (IllegalArgumentException expected) {
+      // don't care what the message text is, as this is an invalid usage of
+      // the Preconditions class, unlike all the other exceptions it throws
+    }
+  }
+
+  public void testCheckPositionIndex_negative() {
+    try {
+      Preconditions.checkPositionIndex(-1, 1);
+      fail();
+    } catch (IndexOutOfBoundsException expected) {
+      assertEquals("index (-1) must not be negative", expected.getMessage());
+    }
+  }
+
+  public void testCheckPositionIndex_tooHigh() {
+    try {
+      Preconditions.checkPositionIndex(2, 1);
+      fail();
+    } catch (IndexOutOfBoundsException expected) {
+      assertEquals("index (2) must not be greater than size (1)",
+          expected.getMessage());
+    }
+  }
+
+  public void testCheckPositionIndex_withDesc_negative() {
+    try {
+      Preconditions.checkPositionIndex(-1, 1, "foo");
+      fail();
+    } catch (IndexOutOfBoundsException expected) {
+      assertEquals("foo (-1) must not be negative", expected.getMessage());
+    }
+  }
+
+  public void testCheckPositionIndex_withDesc_tooHigh() {
+    try {
+      Preconditions.checkPositionIndex(2, 1, "foo");
+      fail();
+    } catch (IndexOutOfBoundsException expected) {
+      assertEquals("foo (2) must not be greater than size (1)",
+          expected.getMessage());
+    }
+  }
+
+  public void testCheckPositionIndexes_ok() {
+    Preconditions.checkPositionIndexes(0, 0, 0);
+    Preconditions.checkPositionIndexes(0, 0, 1);
+    Preconditions.checkPositionIndexes(0, 1, 1);
+    Preconditions.checkPositionIndexes(1, 1, 1);
+  }
+
+  public void testCheckPositionIndexes_badSize() {
+    try {
+      Preconditions.checkPositionIndexes(1, 1, -1);
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  public void testCheckPositionIndex_startNegative() {
+    try {
+      Preconditions.checkPositionIndexes(-1, 1, 1);
+      fail();
+    } catch (IndexOutOfBoundsException expected) {
+      assertEquals("start index (-1) must not be negative",
+          expected.getMessage());
+    }
+  }
+
+  public void testCheckPositionIndexes_endTooHigh() {
+    try {
+      Preconditions.checkPositionIndexes(0, 2, 1);
+      fail();
+    } catch (IndexOutOfBoundsException expected) {
+      assertEquals("end index (2) must not be greater than size (1)",
+          expected.getMessage());
+    }
+  }
+
+  public void testCheckPositionIndexes_reversed() {
+    try {
+      Preconditions.checkPositionIndexes(1, 0, 1);
+      fail();
+    } catch (IndexOutOfBoundsException expected) {
+      assertEquals("end index (0) must not be less than start index (1)",
+          expected.getMessage());
+    }
+  }
+
+  public void testFormat() {
+    assertEquals("%s", Preconditions.format("%s"));
+    assertEquals("5", Preconditions.format("%s", 5));
+    assertEquals("foo [5]", Preconditions.format("foo", 5));
+    assertEquals("foo [5, 6, 7]", Preconditions.format("foo", 5, 6, 7));
+    assertEquals("%s 1 2", Preconditions.format("%s %s %s", "%s", 1, 2));
+    assertEquals(" [5, 6]", Preconditions.format("", 5, 6));
+    assertEquals("123", Preconditions.format("%s%s%s", 1, 2, 3));
+    assertEquals("1%s%s", Preconditions.format("%s%s%s", 1));
+    assertEquals("5 + 6 = 11", Preconditions.format("%s + 6 = 11", 5));
+    assertEquals("5 + 6 = 11", Preconditions.format("5 + %s = 11", 6));
+    assertEquals("5 + 6 = 11", Preconditions.format("5 + 6 = %s", 11));
+    assertEquals("5 + 6 = 11", Preconditions.format("%s + %s = %s", 5, 6, 11));
+    assertEquals("null [null, null]",
+        Preconditions.format("%s", null, null, null));
+    assertEquals("null [5, 6]", Preconditions.format(null, 5, 6));
+  }
+
+  @GwtIncompatible("NullPointerTester")
+  public void testNullPointers() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.testAllPublicStaticMethods(Preconditions.class);
+  }
+
+  private static final Object IGNORE_ME = new Object() {
+    @Override public String toString() {
+      fail();
+      return null;
+    }
+  };
+
+  private static class Message {
+    boolean invoked;
+    @Override public String toString() {
+      assertFalse(invoked);
+      invoked = true;
+      return "A message";
+    }
+  }
+
+  private static final String FORMAT = "I ate %s pies.";
+
+  private static void verifySimpleMessage(Exception e) {
+    assertEquals("A message", e.getMessage());
+  }
+
+  private static void verifyComplexMessage(Exception e) {
+    assertEquals("I ate 5 pies.", e.getMessage());
+  }
+}
diff --git a/guava-tests/test/com/google/common/base/PredicatesTest.java b/guava-tests/test/com/google/common/base/PredicatesTest.java
new file mode 100644
index 0000000..c256c71
--- /dev/null
+++ b/guava-tests/test/com/google/common/base/PredicatesTest.java
@@ -0,0 +1,976 @@
+/*
+ * Copyright (C) 2005 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base;
+
+import static com.google.common.base.CharMatcher.WHITESPACE;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.testing.EqualsTester;
+import com.google.common.testing.NullPointerTester;
+import com.google.common.testing.SerializableTester;
+
+import junit.framework.TestCase;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.regex.Pattern;
+
+/**
+ * Unit test for {@link Predicates}.
+ *
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible(emulated = true)
+public class PredicatesTest extends TestCase {
+  private static final Predicate<Integer> TRUE = Predicates.alwaysTrue();
+  private static final Predicate<Integer> FALSE = Predicates.alwaysFalse();
+  private static final Predicate<Integer> NEVER_REACHED =
+      new Predicate<Integer>() {
+    @Override
+    public boolean apply(Integer i) {
+      fail("This predicate should never have been evaluated");
+      return false;
+    }
+  };
+
+  /** Instantiable predicate with reasonable hashCode() and equals() methods. */
+  static class IsOdd implements Predicate<Integer>, Serializable {
+    private static final long serialVersionUID = 0x150ddL;
+    @Override
+    public boolean apply(Integer i) {
+      return (i.intValue() & 1) == 1;
+    }
+    @Override public int hashCode() {
+      return 0x150dd;
+    }
+    @Override public boolean equals(Object obj) {
+      return obj instanceof IsOdd;
+    }
+    @Override public String toString() {
+      return "IsOdd";
+    }
+  }
+
+  /**
+   * Generates a new Predicate per call.
+   *
+   * <p>Creating a new Predicate each time helps catch cases where code is
+   * using {@code x == y} instead of {@code x.equals(y)}.
+   */
+  private static IsOdd isOdd() {
+    return new IsOdd();
+  }
+
+  /*
+   * Tests for Predicates.alwaysTrue().
+   */
+
+  public void testAlwaysTrue_apply() {
+    assertEvalsToTrue(Predicates.alwaysTrue());
+  }
+
+  public void testAlwaysTrue_equality() throws Exception {
+    new EqualsTester()
+        .addEqualityGroup(TRUE, Predicates.alwaysTrue())
+        .addEqualityGroup(isOdd())
+        .addEqualityGroup(Predicates.alwaysFalse())
+        .testEquals();
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testAlwaysTrue_serialization() {
+    checkSerialization(Predicates.alwaysTrue());
+  }
+
+  /*
+   * Tests for Predicates.alwaysFalse().
+   */
+
+  public void testAlwaysFalse_apply() throws Exception {
+    assertEvalsToFalse(Predicates.alwaysFalse());
+  }
+
+  public void testAlwaysFalse_equality() throws Exception {
+    new EqualsTester()
+        .addEqualityGroup(FALSE, Predicates.alwaysFalse())
+        .addEqualityGroup(isOdd())
+        .addEqualityGroup(Predicates.alwaysTrue())
+        .testEquals();
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testAlwaysFalse_serialization() {
+    checkSerialization(Predicates.alwaysFalse());
+  }
+
+  /*
+   * Tests for Predicates.not(predicate).
+   */
+
+  public void testNot_apply() {
+    assertEvalsToTrue(Predicates.not(FALSE));
+    assertEvalsToFalse(Predicates.not(TRUE));
+    assertEvalsLikeOdd(Predicates.not(Predicates.not(isOdd())));
+  }
+
+  public void testNot_equality() {
+    new EqualsTester()
+        .addEqualityGroup(Predicates.not(isOdd()), Predicates.not(isOdd()))
+        .addEqualityGroup(Predicates.not(TRUE))
+        .addEqualityGroup(isOdd())
+        .testEquals();
+  }
+
+  public void testNot_equalityForNotOfKnownValues() {
+    new EqualsTester()
+        .addEqualityGroup(TRUE, Predicates.alwaysTrue())
+        .addEqualityGroup(FALSE)
+        .addEqualityGroup(Predicates.not(TRUE))
+        .testEquals();
+
+    new EqualsTester()
+        .addEqualityGroup(FALSE, Predicates.alwaysFalse())
+        .addEqualityGroup(TRUE)
+        .addEqualityGroup(Predicates.not(FALSE))
+        .testEquals();
+
+    new EqualsTester()
+        .addEqualityGroup(Predicates.isNull(), Predicates.isNull())
+        .addEqualityGroup(Predicates.notNull())
+        .addEqualityGroup(Predicates.not(Predicates.isNull()))
+        .testEquals();
+
+    new EqualsTester()
+        .addEqualityGroup(Predicates.notNull(), Predicates.notNull())
+        .addEqualityGroup(Predicates.isNull())
+        .addEqualityGroup(Predicates.not(Predicates.notNull()))
+        .testEquals();
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testNot_serialization() {
+    checkSerialization(Predicates.not(isOdd()));
+  }
+
+  /*
+   * Tests for all the different flavors of Predicates.and().
+   */
+
+  @SuppressWarnings("unchecked")
+  public void testAnd_applyNoArgs() {
+    assertEvalsToTrue(Predicates.and());
+  }
+
+  @SuppressWarnings("unchecked")
+  public void testAnd_equalityNoArgs() {
+    new EqualsTester()
+        .addEqualityGroup(Predicates.and(), Predicates.and())
+        .addEqualityGroup(Predicates.and(FALSE))
+        .addEqualityGroup(Predicates.or())
+        .testEquals();
+  }
+
+  @GwtIncompatible("SerializableTester")
+  @SuppressWarnings("unchecked")
+  public void testAnd_serializationNoArgs() {
+    checkSerialization(Predicates.and());
+  }
+
+  @SuppressWarnings("unchecked")
+  public void testAnd_applyOneArg() {
+    assertEvalsLikeOdd(Predicates.and(isOdd()));
+  }
+
+  @SuppressWarnings("unchecked")
+  public void testAnd_equalityOneArg() {
+    Object[] notEqualObjects = {Predicates.and(NEVER_REACHED, FALSE)};
+    new EqualsTester()
+        .addEqualityGroup(
+            Predicates.and(NEVER_REACHED), Predicates.and(NEVER_REACHED))
+        .addEqualityGroup(notEqualObjects)
+        .addEqualityGroup(Predicates.and(isOdd()))
+        .addEqualityGroup(Predicates.and())
+        .addEqualityGroup(Predicates.or(NEVER_REACHED))
+        .testEquals();
+  }
+
+  @GwtIncompatible("SerializableTester")
+  @SuppressWarnings("unchecked")
+  public void testAnd_serializationOneArg() {
+    checkSerialization(Predicates.and(isOdd()));
+  }
+
+  public void testAnd_applyBinary() {
+    assertEvalsLikeOdd(Predicates.and(isOdd(), TRUE));
+    assertEvalsLikeOdd(Predicates.and(TRUE, isOdd()));
+    assertEvalsToFalse(Predicates.and(FALSE, NEVER_REACHED));
+  }
+
+  @SuppressWarnings("unchecked")
+  public void testAnd_equalityBinary() {
+    new EqualsTester()
+        .addEqualityGroup(
+            Predicates.and(TRUE, NEVER_REACHED),
+            Predicates.and(TRUE, NEVER_REACHED))
+        .addEqualityGroup(Predicates.and(NEVER_REACHED, TRUE))
+        .addEqualityGroup(Predicates.and(TRUE))
+        .addEqualityGroup(Predicates.or(TRUE, NEVER_REACHED))
+        .testEquals();
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testAnd_serializationBinary() {
+    checkSerialization(Predicates.and(TRUE, isOdd()));
+  }
+
+  @SuppressWarnings("unchecked")
+  public void testAnd_applyTernary() {
+    assertEvalsLikeOdd(Predicates.and(isOdd(), TRUE, TRUE));
+    assertEvalsLikeOdd(Predicates.and(TRUE, isOdd(), TRUE));
+    assertEvalsLikeOdd(Predicates.and(TRUE, TRUE, isOdd()));
+    assertEvalsToFalse(Predicates.and(TRUE, FALSE, NEVER_REACHED));
+  }
+
+  @SuppressWarnings("unchecked")
+  public void testAnd_equalityTernary() {
+    new EqualsTester()
+        .addEqualityGroup(
+            Predicates.and(TRUE, isOdd(), NEVER_REACHED),
+            Predicates.and(TRUE, isOdd(), NEVER_REACHED))
+        .addEqualityGroup(Predicates.and(isOdd(), NEVER_REACHED, TRUE))
+        .addEqualityGroup(Predicates.and(TRUE))
+        .addEqualityGroup(Predicates.or(TRUE, isOdd(), NEVER_REACHED))
+        .testEquals();
+  }
+
+  @GwtIncompatible("SerializableTester")
+  @SuppressWarnings("unchecked")
+  public void testAnd_serializationTernary() {
+    checkSerialization(Predicates.and(TRUE, isOdd(), FALSE));
+  }
+
+  @SuppressWarnings("unchecked")
+  public void testAnd_applyIterable() {
+    Collection<Predicate<Integer>> empty = Arrays.asList();
+    assertEvalsToTrue(Predicates.and(empty));
+    assertEvalsLikeOdd(Predicates.and(Arrays.asList(isOdd())));
+    assertEvalsLikeOdd(Predicates.and(Arrays.asList(TRUE, isOdd())));
+    assertEvalsToFalse(Predicates.and(Arrays.asList(FALSE, NEVER_REACHED)));
+  }
+
+  @SuppressWarnings("unchecked")
+  public void testAnd_equalityIterable() {
+    new EqualsTester()
+        .addEqualityGroup(
+            Predicates.and(Arrays.asList(TRUE, NEVER_REACHED)),
+            Predicates.and(Arrays.asList(TRUE, NEVER_REACHED)),
+            Predicates.and(TRUE, NEVER_REACHED))
+        .addEqualityGroup(Predicates.and(FALSE, NEVER_REACHED))
+        .addEqualityGroup(Predicates.or(TRUE, NEVER_REACHED))
+        .testEquals();
+  }
+
+  @GwtIncompatible("SerializableTester")
+  @SuppressWarnings("unchecked")
+  public void testAnd_serializationIterable() {
+    checkSerialization(Predicates.and(Arrays.asList(TRUE, FALSE)));
+  }
+
+  @SuppressWarnings("unchecked")
+  public void testAnd_arrayDefensivelyCopied() {
+    Predicate[] array = {Predicates.alwaysFalse()};
+    Predicate<Object> predicate = Predicates.and(array);
+    assertFalse(predicate.apply(1));
+    array[0] = Predicates.alwaysTrue();
+    assertFalse(predicate.apply(1));
+  }
+
+  @SuppressWarnings("unchecked")
+  public void testAnd_listDefensivelyCopied() {
+    List list = new ArrayList<Predicate>();
+    Predicate<Object> predicate = Predicates.and(list);
+    assertTrue(predicate.apply(1));
+    list.add(Predicates.alwaysFalse());
+    assertTrue(predicate.apply(1));
+  }
+
+  @SuppressWarnings("unchecked")
+  public void testAnd_iterableDefensivelyCopied() {
+    final List list = new ArrayList<Predicate>();
+    Iterable iterable = new Iterable<Predicate>() {
+      @Override
+      public Iterator<Predicate> iterator() {
+        return list.iterator();
+      }
+    };
+    Predicate<Object> predicate = Predicates.and(iterable);
+    assertTrue(predicate.apply(1));
+    list.add(Predicates.alwaysFalse());
+    assertTrue(predicate.apply(1));
+  }
+
+  /*
+   * Tests for all the different flavors of Predicates.or().
+   */
+
+  @SuppressWarnings("unchecked")
+  public void testOr_applyNoArgs() {
+    assertEvalsToFalse(Predicates.or());
+  }
+
+  @SuppressWarnings("unchecked")
+  public void testOr_equalityNoArgs() {
+    new EqualsTester()
+        .addEqualityGroup(Predicates.or(), Predicates.or())
+        .addEqualityGroup(Predicates.or(TRUE))
+        .addEqualityGroup(Predicates.and())
+        .testEquals();
+  }
+
+  @GwtIncompatible("SerializableTester")
+  @SuppressWarnings("unchecked")
+  public void testOr_serializationNoArgs() {
+    checkSerialization(Predicates.or());
+  }
+
+  @SuppressWarnings("unchecked")
+  public void testOr_applyOneArg() {
+    assertEvalsToTrue(Predicates.or(TRUE));
+    assertEvalsToFalse(Predicates.or(FALSE));
+  }
+
+  @SuppressWarnings("unchecked")
+  public void testOr_equalityOneArg() {
+    new EqualsTester()
+        .addEqualityGroup(
+            Predicates.or(NEVER_REACHED), Predicates.or(NEVER_REACHED))
+        .addEqualityGroup(Predicates.or(NEVER_REACHED, TRUE))
+        .addEqualityGroup(Predicates.or(TRUE))
+        .addEqualityGroup(Predicates.or())
+        .addEqualityGroup(Predicates.and(NEVER_REACHED))
+        .testEquals();
+  }
+
+  @GwtIncompatible("SerializableTester")
+  @SuppressWarnings("unchecked")
+  public void testOr_serializationOneArg() {
+    checkSerialization(Predicates.or(isOdd()));
+  }
+
+  public void testOr_applyBinary() {
+    Predicate<Integer> falseOrFalse = Predicates.or(FALSE, FALSE);
+    Predicate<Integer> falseOrTrue = Predicates.or(FALSE, TRUE);
+    Predicate<Integer> trueOrAnything = Predicates.or(TRUE, NEVER_REACHED);
+
+    assertEvalsToFalse(falseOrFalse);
+    assertEvalsToTrue(falseOrTrue);
+    assertEvalsToTrue(trueOrAnything);
+  }
+
+  @SuppressWarnings("unchecked")
+  public void testOr_equalityBinary() {
+    new EqualsTester()
+        .addEqualityGroup(
+            Predicates.or(FALSE, NEVER_REACHED),
+            Predicates.or(FALSE, NEVER_REACHED))
+        .addEqualityGroup(Predicates.or(NEVER_REACHED, FALSE))
+        .addEqualityGroup(Predicates.or(TRUE))
+        .addEqualityGroup(Predicates.and(FALSE, NEVER_REACHED))
+        .testEquals();
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testOr_serializationBinary() {
+    checkSerialization(Predicates.or(isOdd(), TRUE));
+  }
+
+  @SuppressWarnings("unchecked")
+  public void testOr_applyTernary() {
+    assertEvalsLikeOdd(Predicates.or(isOdd(), FALSE, FALSE));
+    assertEvalsLikeOdd(Predicates.or(FALSE, isOdd(), FALSE));
+    assertEvalsLikeOdd(Predicates.or(FALSE, FALSE, isOdd()));
+    assertEvalsToTrue(Predicates.or(FALSE, TRUE, NEVER_REACHED));
+  }
+
+  @SuppressWarnings("unchecked")
+  public void testOr_equalityTernary() {
+    new EqualsTester()
+        .addEqualityGroup(
+            Predicates.or(FALSE, NEVER_REACHED, TRUE),
+            Predicates.or(FALSE, NEVER_REACHED, TRUE))
+        .addEqualityGroup(Predicates.or(TRUE, NEVER_REACHED, FALSE))
+        .addEqualityGroup(Predicates.or(TRUE))
+        .addEqualityGroup(Predicates.and(FALSE, NEVER_REACHED, TRUE))
+        .testEquals();
+  }
+
+  @GwtIncompatible("SerializableTester")
+  @SuppressWarnings("unchecked")
+  public void testOr_serializationTernary() {
+    checkSerialization(Predicates.or(FALSE, isOdd(), TRUE));
+  }
+
+  @SuppressWarnings("unchecked")
+  public void testOr_applyIterable() {
+    Predicate<Integer> vacuouslyFalse =
+        Predicates.or(Collections.<Predicate<Integer>>emptyList());
+    Predicate<Integer> troo = Predicates.or(Collections.singletonList(TRUE));
+    /*
+     * newLinkedList() takes varargs. TRUE and FALSE are both instances of
+     * Predicate<Integer>, so the call is safe.
+     */
+    Predicate<Integer> trueAndFalse = Predicates.or(Arrays.asList(TRUE, FALSE));
+
+    assertEvalsToFalse(vacuouslyFalse);
+    assertEvalsToTrue(troo);
+    assertEvalsToTrue(trueAndFalse);
+  }
+
+  @SuppressWarnings("unchecked")
+  public void testOr_equalityIterable() {
+    new EqualsTester()
+        .addEqualityGroup(
+            Predicates.or(Arrays.asList(FALSE, NEVER_REACHED)),
+            Predicates.or(Arrays.asList(FALSE, NEVER_REACHED)),
+            Predicates.or(FALSE, NEVER_REACHED))
+        .addEqualityGroup(Predicates.or(TRUE, NEVER_REACHED))
+        .addEqualityGroup(Predicates.and(FALSE, NEVER_REACHED))
+        .testEquals();
+  }
+
+  @GwtIncompatible("SerializableTester")
+  @SuppressWarnings("unchecked")
+  public void testOr_serializationIterable() {
+    Predicate<Integer> pre = Predicates.or(Arrays.asList(TRUE, FALSE));
+    Predicate<Integer> post = SerializableTester.reserializeAndAssert(pre);
+    assertEquals(pre.apply(0), post.apply(0));
+  }
+
+  @SuppressWarnings("unchecked")
+  public void testOr_arrayDefensivelyCopied() {
+    Predicate[] array = {Predicates.alwaysFalse()};
+    Predicate<Object> predicate = Predicates.or(array);
+    assertFalse(predicate.apply(1));
+    array[0] = Predicates.alwaysTrue();
+    assertFalse(predicate.apply(1));
+  }
+
+  @SuppressWarnings("unchecked")
+  public void testOr_listDefensivelyCopied() {
+    List list = new ArrayList<Predicate>();
+    Predicate<Object> predicate = Predicates.or(list);
+    assertFalse(predicate.apply(1));
+    list.add(Predicates.alwaysTrue());
+    assertFalse(predicate.apply(1));
+  }
+
+  @SuppressWarnings("unchecked")
+  public void testOr_iterableDefensivelyCopied() {
+    final List list = new ArrayList<Predicate>();
+    Iterable iterable = new Iterable<Predicate>() {
+      @Override
+      public Iterator<Predicate> iterator() {
+        return list.iterator();
+      }
+    };
+    Predicate<Object> predicate = Predicates.or(iterable);
+    assertFalse(predicate.apply(1));
+    list.add(Predicates.alwaysTrue());
+    assertFalse(predicate.apply(1));
+  }
+
+  /*
+   * Tests for Predicates.equalTo(x).
+   */
+
+  public void testIsEqualTo_apply() {
+    Predicate<Integer> isOne = Predicates.equalTo(1);
+
+    assertTrue(isOne.apply(1));
+    assertFalse(isOne.apply(2));
+    assertFalse(isOne.apply(null));
+  }
+
+  public void testIsEqualTo_equality() {
+    new EqualsTester()
+        .addEqualityGroup(Predicates.equalTo(1), Predicates.equalTo(1))
+        .addEqualityGroup(Predicates.equalTo(2))
+        .addEqualityGroup(Predicates.equalTo(null))
+        .testEquals();
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testIsEqualTo_serialization() {
+    checkSerialization(Predicates.equalTo(1));
+  }
+
+  public void testIsEqualToNull_apply() {
+    Predicate<Integer> isNull = Predicates.equalTo(null);
+    assertTrue(isNull.apply(null));
+    assertFalse(isNull.apply(1));
+  }
+
+  public void testIsEqualToNull_equality() {
+    new EqualsTester()
+        .addEqualityGroup(Predicates.equalTo(null), Predicates.equalTo(null))
+        .addEqualityGroup(Predicates.equalTo(1))
+        .addEqualityGroup(Predicates.equalTo("null"))
+        .testEquals();
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testIsEqualToNull_serialization() {
+    checkSerialization(Predicates.equalTo(null));
+  }
+
+  /**
+   * Tests for Predicates.instanceOf(x).
+   * TODO: Fix the comment style after fixing annotation stripper to remove
+   * comments properly.  Currently, all tests before the comments are removed
+   * as well.
+   */
+
+  @GwtIncompatible("Predicates.instanceOf")
+  public void testIsInstanceOf_apply() {
+    Predicate<Object> isInteger = Predicates.instanceOf(Integer.class);
+
+    assertTrue(isInteger.apply(1));
+    assertFalse(isInteger.apply(2.0f));
+    assertFalse(isInteger.apply(""));
+    assertFalse(isInteger.apply(null));
+  }
+
+  @GwtIncompatible("Predicates.instanceOf")
+  public void testIsInstanceOf_subclass() {
+    Predicate<Object> isNumber = Predicates.instanceOf(Number.class);
+
+    assertTrue(isNumber.apply(1));
+    assertTrue(isNumber.apply(2.0f));
+    assertFalse(isNumber.apply(""));
+    assertFalse(isNumber.apply(null));
+  }
+
+  @GwtIncompatible("Predicates.instanceOf")
+  public void testIsInstanceOf_interface() {
+    Predicate<Object> isComparable = Predicates.instanceOf(Comparable.class);
+
+    assertTrue(isComparable.apply(1));
+    assertTrue(isComparable.apply(2.0f));
+    assertTrue(isComparable.apply(""));
+    assertFalse(isComparable.apply(null));
+  }
+
+  @GwtIncompatible("Predicates.instanceOf")
+  public void testIsInstanceOf_equality() {
+    new EqualsTester()
+        .addEqualityGroup(
+            Predicates.instanceOf(Integer.class),
+            Predicates.instanceOf(Integer.class))
+        .addEqualityGroup(Predicates.instanceOf(Number.class))
+        .addEqualityGroup(Predicates.instanceOf(Float.class))
+        .testEquals();
+  }
+
+  @GwtIncompatible("Predicates.instanceOf, SerializableTester")
+  public void testIsInstanceOf_serialization() {
+    checkSerialization(Predicates.instanceOf(Integer.class));
+  }
+  
+  @GwtIncompatible("Predicates.assignableFrom")
+  public void testIsAssignableFrom_apply() {
+    Predicate<Class<?>> isInteger = Predicates.assignableFrom(Integer.class);
+
+    assertTrue(isInteger.apply(Integer.class));
+    assertFalse(isInteger.apply(Float.class));
+    
+    try {      
+      isInteger.apply(null);
+      fail();
+    } catch(NullPointerException expected) {}
+  }
+
+  @GwtIncompatible("Predicates.assignableFrom")
+  public void testIsAssignableFrom_subclass() {
+    Predicate<Class<?>> isNumber = Predicates.assignableFrom(Number.class);
+
+    assertTrue(isNumber.apply(Integer.class));
+    assertTrue(isNumber.apply(Float.class));
+  }
+
+  @GwtIncompatible("Predicates.assignableFrom")
+  public void testIsAssignableFrom_interface() {
+    Predicate<Class<?>> isComparable =
+        Predicates.assignableFrom(Comparable.class);
+
+    assertTrue(isComparable.apply(Integer.class));
+    assertTrue(isComparable.apply(Float.class));
+  }
+
+  @GwtIncompatible("Predicates.assignableFrom")
+  public void testIsAssignableFrom_equality() {
+    new EqualsTester()
+        .addEqualityGroup(
+            Predicates.assignableFrom(Integer.class),
+            Predicates.assignableFrom(Integer.class))
+        .addEqualityGroup(Predicates.assignableFrom(Number.class))
+        .addEqualityGroup(Predicates.assignableFrom(Float.class))
+        .testEquals();
+  }
+
+  @GwtIncompatible("Predicates.assignableFrom, SerializableTester")
+  public void testIsAssignableFrom_serialization() {
+    Predicate<Class<?>> predicate = 
+        Predicates.assignableFrom(Integer.class);
+    Predicate<Class<?>> reserialized =
+        SerializableTester.reserializeAndAssert(predicate);
+
+    assertEvalsLike(predicate, reserialized, Integer.class);
+    assertEvalsLike(predicate, reserialized, Float.class);
+    assertEvalsLike(predicate, reserialized, null);
+  }
+
+  /*
+   * Tests for Predicates.isNull()
+   */
+
+  public void testIsNull_apply() {
+    Predicate<Integer> isNull = Predicates.isNull();
+    assertTrue(isNull.apply(null));
+    assertFalse(isNull.apply(1));
+  }
+
+  public void testIsNull_equality() {
+    new EqualsTester()
+        .addEqualityGroup(Predicates.isNull(), Predicates.isNull())
+        .addEqualityGroup(Predicates.notNull())
+        .testEquals();
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testIsNull_serialization() {
+    Predicate<String> pre = Predicates.isNull();
+    Predicate<String> post = SerializableTester.reserializeAndAssert(pre);
+    assertEquals(pre.apply("foo"), post.apply("foo"));
+    assertEquals(pre.apply(null), post.apply(null));
+  }
+
+  public void testNotNull_apply() {
+    Predicate<Integer> notNull = Predicates.notNull();
+    assertFalse(notNull.apply(null));
+    assertTrue(notNull.apply(1));
+  }
+
+  public void testNotNull_equality() {
+    new EqualsTester()
+        .addEqualityGroup(Predicates.notNull(), Predicates.notNull())
+        .addEqualityGroup(Predicates.isNull())
+        .testEquals();
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testNotNull_serialization() {
+    checkSerialization(Predicates.notNull());
+  }
+
+  public void testIn_apply() {
+    Collection<Integer> nums = Arrays.asList(1, 5);
+    Predicate<Integer> isOneOrFive = Predicates.in(nums);
+
+    assertTrue(isOneOrFive.apply(1));
+    assertTrue(isOneOrFive.apply(5));
+    assertFalse(isOneOrFive.apply(3));
+    assertFalse(isOneOrFive.apply(null));
+  }
+
+  public void testIn_equality() {
+    Collection<Integer> nums = ImmutableSet.of(1, 5);
+    Collection<Integer> sameOrder = ImmutableSet.of(1, 5);
+    Collection<Integer> differentOrder = ImmutableSet.of(5, 1);
+    Collection<Integer> differentNums = ImmutableSet.of(1, 3, 5);
+
+    new EqualsTester()
+        .addEqualityGroup(Predicates.in(nums), Predicates.in(nums),
+            Predicates.in(sameOrder), Predicates.in(differentOrder))
+        .addEqualityGroup(Predicates.in(differentNums))
+        .testEquals();
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testIn_serialization() {
+    checkSerialization(Predicates.in(Arrays.asList(1, 2, 3, null)));
+  }
+
+  public void testIn_handlesNullPointerException() {
+    class CollectionThatThrowsNPE<T> extends ArrayList<T> {
+      private static final long serialVersionUID = 1L;
+
+      @Override public boolean contains(Object element) {
+        Preconditions.checkNotNull(element);
+        return super.contains(element);
+      }
+    }
+    Collection<Integer> nums = new CollectionThatThrowsNPE<Integer>();
+    Predicate<Integer> isFalse = Predicates.in(nums);
+    assertFalse(isFalse.apply(null));
+  }
+
+  public void testIn_handlesClassCastException() {
+    class CollectionThatThrowsCCE<T> extends ArrayList<T> {
+      private static final long serialVersionUID = 1L;
+
+      @Override public boolean contains(Object element) {
+        throw new ClassCastException("");
+      }
+    }
+    Collection<Integer> nums = new CollectionThatThrowsCCE<Integer>();
+    nums.add(3);
+    Predicate<Integer> isThree = Predicates.in(nums);
+    assertFalse(isThree.apply(3));
+  }
+
+  /*
+   * Tests that compilation will work when applying explicit types.
+   */
+  @SuppressWarnings("unused")
+  public void testIn_compilesWithExplicitSupertype() {
+    Collection<Number> nums = ImmutableSet.of();
+    Predicate<Number> p1 = Predicates.in(nums);
+    Predicate<Object> p2 = Predicates.<Object>in(nums);
+    // The next two lines are not expected to compile.
+    // Predicate<Integer> p3 = Predicates.in(nums);
+    // Predicate<Integer> p4 = Predicates.<Integer>in(nums);
+  }
+
+  @GwtIncompatible("NullPointerTester")
+  public void testNullPointerExceptions() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.testAllPublicStaticMethods(Predicates.class);
+  }
+
+  @SuppressWarnings("unchecked") // varargs
+  @GwtIncompatible("SerializbleTester")
+  public void testCascadingSerialization() throws Exception {
+    // Eclipse says Predicate<Integer>; javac says Predicate<Object>.
+    Predicate<? super Integer> nasty = Predicates.not(Predicates.and(
+        Predicates.or(
+            Predicates.equalTo((Object) 1), Predicates.equalTo(null),
+            Predicates.alwaysFalse(), Predicates.alwaysTrue(),
+            Predicates.isNull(), Predicates.notNull(),
+            Predicates.in(Arrays.asList(1)))));
+    assertEvalsToFalse(nasty);
+
+    Predicate<? super Integer> stillNasty =
+        SerializableTester.reserializeAndAssert(nasty);
+
+    assertEvalsToFalse(stillNasty);
+  }
+
+  // enum singleton pattern
+  private enum TrimStringFunction implements Function<String, String> {
+    INSTANCE;
+
+    @Override
+    public String apply(String string) {
+      return WHITESPACE.trimFrom(string);
+    }
+  }
+
+  public void testCompose() {
+    Function<String, String> trim = TrimStringFunction.INSTANCE;
+    Predicate<String> equalsFoo = Predicates.equalTo("Foo");
+    Predicate<String> equalsBar = Predicates.equalTo("Bar");
+    Predicate<String> trimEqualsFoo = Predicates.compose(equalsFoo, trim);
+    Function<String, String> identity = Functions.identity();
+
+    assertTrue(trimEqualsFoo.apply("Foo"));
+    assertTrue(trimEqualsFoo.apply("   Foo   "));
+    assertFalse(trimEqualsFoo.apply("Foo-b-que"));
+
+    new EqualsTester()
+        .addEqualityGroup(trimEqualsFoo, Predicates.compose(equalsFoo, trim))
+        .addEqualityGroup(equalsFoo)
+        .addEqualityGroup(trim)
+        .addEqualityGroup(Predicates.compose(equalsFoo, identity))
+        .addEqualityGroup(Predicates.compose(equalsBar, trim))
+        .testEquals();
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testComposeSerialization() {
+    Function<String, String> trim = TrimStringFunction.INSTANCE;
+    Predicate<String> equalsFoo = Predicates.equalTo("Foo");
+    Predicate<String> trimEqualsFoo = Predicates.compose(equalsFoo, trim);
+    SerializableTester.reserializeAndAssert(trimEqualsFoo);
+  }
+
+  /**
+   * Tests for Predicates.contains(Pattern) and .containsPattern(String).
+   * We assume the regex level works, so there are only trivial tests of that
+   * aspect.
+   * TODO: Fix comment style once annotation stripper is fixed.
+   */
+
+  @GwtIncompatible("Predicates.containsPattern")
+  public void testContainsPattern_apply() {
+    Predicate<CharSequence> isFoobar =
+        Predicates.containsPattern("^Fo.*o.*bar$");
+    assertTrue(isFoobar.apply("Foxyzoabcbar"));
+    assertFalse(isFoobar.apply("Foobarx"));
+  }
+
+  @GwtIncompatible("Predicates.containsPattern")
+  public void testContains_apply() {
+    Predicate<CharSequence> isFoobar =
+        Predicates.contains(Pattern.compile("^Fo.*o.*bar$"));
+
+    assertTrue(isFoobar.apply("Foxyzoabcbar"));
+    assertFalse(isFoobar.apply("Foobarx"));
+  }
+
+  @GwtIncompatible("NullPointerTester")
+  public void testContainsPattern_nulls() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    Predicate<CharSequence> isWooString = Predicates.containsPattern("Woo");
+
+    tester.testAllPublicInstanceMethods(isWooString);
+  }
+
+  @GwtIncompatible("NullPointerTester")
+  public void testContains_nulls() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    Predicate<CharSequence> isWooPattern =
+        Predicates.contains(Pattern.compile("Woo"));
+
+    tester.testAllPublicInstanceMethods(isWooPattern);
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testContainsPattern_serialization() {
+    Predicate<CharSequence> pre = Predicates.containsPattern("foo");
+    Predicate<CharSequence> post = SerializableTester.reserializeAndAssert(pre);
+    assertEquals(pre.apply("foo"), post.apply("foo"));
+  }
+
+  @GwtIncompatible("java.util.regex.Pattern")
+  public void testContains_equals() {
+    new EqualsTester()
+        .addEqualityGroup(
+            Predicates.contains(Pattern.compile("foo")),
+            Predicates.containsPattern("foo"))
+        .addEqualityGroup(
+            Predicates.contains(
+                Pattern.compile("foo", Pattern.CASE_INSENSITIVE)))
+        .addEqualityGroup(
+            Predicates.containsPattern("bar"))
+        .testEquals();
+      }
+
+  public void assertEqualHashCode(
+      Predicate<? super Integer> expected, Predicate<? super Integer> actual) {
+    assertEquals(actual.toString() + " should hash like " + expected.toString(),
+        expected.hashCode(), actual.hashCode());
+  }
+
+  public void testHashCodeForBooleanOperations() {
+    Predicate<Integer> p1 = Predicates.isNull();
+    Predicate<Integer> p2 = isOdd();
+
+    // Make sure that hash codes are not computed per-instance.
+    assertEqualHashCode(
+        Predicates.not(p1),
+        Predicates.not(p1));
+
+    assertEqualHashCode(
+        Predicates.and(p1, p2),
+        Predicates.and(p1, p2));
+
+    assertEqualHashCode(
+        Predicates.or(p1, p2),
+        Predicates.or(p1, p2));
+ 
+    // While not a contractual requirement, we'd like the hash codes for ands
+    // & ors of the same predicates to not collide. 
+    assertTrue(Predicates.and(p1, p2).hashCode() != Predicates.or(p1, p2).hashCode());
+  }
+
+  private static void assertEvalsToTrue(Predicate<? super Integer> predicate) {
+    assertTrue(predicate.apply(0));
+    assertTrue(predicate.apply(1));
+    assertTrue(predicate.apply(null));
+  }
+
+  private static void assertEvalsToFalse(Predicate<? super Integer> predicate) {
+    assertFalse(predicate.apply(0));
+    assertFalse(predicate.apply(1));
+    assertFalse(predicate.apply(null));
+  }
+
+  private static void assertEvalsLikeOdd(Predicate<? super Integer> predicate) {
+    assertEvalsLike(isOdd(), predicate);
+  }
+
+  private static void assertEvalsLike(
+      Predicate<? super Integer> expected,
+      Predicate<? super Integer> actual) {
+    assertEvalsLike(expected, actual, 0);
+    assertEvalsLike(expected, actual, 1);
+    assertEvalsLike(expected, actual, null);
+  }
+
+  private static <T> void assertEvalsLike(
+      Predicate<? super T> expected,
+      Predicate<? super T> actual,
+      T input) {
+    Boolean expectedResult = null;
+    RuntimeException expectedRuntimeException = null;
+    try {
+      expectedResult = expected.apply(input);
+    } catch (RuntimeException e) {
+      expectedRuntimeException = e;
+    }
+
+    Boolean actualResult = null;
+    RuntimeException actualRuntimeException = null;
+    try {
+      actualResult = actual.apply(input);
+    } catch (RuntimeException e) {
+      actualRuntimeException = e;
+    }
+
+    assertEquals(expectedResult, actualResult);
+    if (expectedRuntimeException != null) {
+      assertNotNull(actualRuntimeException);
+      assertEquals(
+          expectedRuntimeException.getClass(),
+          actualRuntimeException.getClass());
+    }
+  }
+
+  @GwtIncompatible("SerializableTester")
+  private static void checkSerialization(Predicate<? super Integer> predicate) {
+    Predicate<? super Integer> reserialized =
+        SerializableTester.reserializeAndAssert(predicate);
+    assertEvalsLike(predicate, reserialized);
+  }
+}
diff --git a/guava-tests/test/com/google/common/base/SplitterTest.java b/guava-tests/test/com/google/common/base/SplitterTest.java
new file mode 100644
index 0000000..25e963f
--- /dev/null
+++ b/guava-tests/test/com/google/common/base/SplitterTest.java
@@ -0,0 +1,720 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base;
+
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.testing.NullPointerTester;
+
+import junit.framework.TestCase;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Pattern;
+
+/**
+ * @author Julien Silland
+ */
+@GwtCompatible(emulated = true)
+public class SplitterTest extends TestCase {
+
+  private static final Splitter COMMA_SPLITTER = Splitter.on(',');
+
+  public void testSplitNullString() {
+    try {
+      COMMA_SPLITTER.split(null);
+      fail();
+    } catch (NullPointerException expected) {
+    }
+  }
+
+  public void testCharacterSimpleSplit() {
+    String simple = "a,b,c";
+    Iterable<String> letters = COMMA_SPLITTER.split(simple);
+    ASSERT.that(letters).hasContentsInOrder("a", "b", "c");
+  }
+
+  public void testCharacterSimpleSplitWithNoDelimiter() {
+    String simple = "a,b,c";
+    Iterable<String> letters = Splitter.on('.').split(simple);
+    ASSERT.that(letters).hasContentsInOrder("a,b,c");
+  }
+
+  public void testCharacterSplitWithDoubleDelimiter() {
+    String doubled = "a,,b,c";
+    Iterable<String> letters = COMMA_SPLITTER.split(doubled);
+    ASSERT.that(letters).hasContentsInOrder("a", "", "b", "c");
+  }
+
+  public void testCharacterSplitWithDoubleDelimiterAndSpace() {
+    String doubled = "a,, b,c";
+    Iterable<String> letters = COMMA_SPLITTER.split(doubled);
+    ASSERT.that(letters).hasContentsInOrder("a", "", " b", "c");
+  }
+
+  public void testCharacterSplitWithTrailingDelimiter() {
+    String trailing = "a,b,c,";
+    Iterable<String> letters = COMMA_SPLITTER.split(trailing);
+    ASSERT.that(letters).hasContentsInOrder("a", "b", "c", "");
+  }
+
+  public void testCharacterSplitWithLeadingDelimiter() {
+    String leading = ",a,b,c";
+    Iterable<String> letters = COMMA_SPLITTER.split(leading);
+    ASSERT.that(letters).hasContentsInOrder("", "a", "b", "c");
+  }
+
+  public void testCharacterSplitWithMulitpleLetters() {
+    Iterable<String> testCharacteringMotto = Splitter.on('-').split(
+        "Testing-rocks-Debugging-sucks");
+    ASSERT.that(testCharacteringMotto).hasContentsInOrder(
+        "Testing", "rocks", "Debugging", "sucks");
+  }
+
+  public void testCharacterSplitWithMatcherDelimiter() {
+    Iterable<String> testCharacteringMotto = Splitter
+        .on(CharMatcher.WHITESPACE)
+        .split("Testing\nrocks\tDebugging sucks");
+    ASSERT.that(testCharacteringMotto).hasContentsInOrder(
+        "Testing", "rocks", "Debugging", "sucks");
+  }
+
+  public void testCharacterSplitWithDoubleDelimiterOmitEmptyStrings() {
+    String doubled = "a..b.c";
+    Iterable<String> letters = Splitter.on('.')
+        .omitEmptyStrings().split(doubled);
+    ASSERT.that(letters).hasContentsInOrder("a", "b", "c");
+  }
+
+  public void testCharacterSplitEmptyToken() {
+    String emptyToken = "a. .c";
+    Iterable<String> letters = Splitter.on('.').trimResults()
+        .split(emptyToken);
+    ASSERT.that(letters).hasContentsInOrder("a", "", "c");
+  }
+
+  public void testCharacterSplitEmptyTokenOmitEmptyStrings() {
+    String emptyToken = "a. .c";
+    Iterable<String> letters = Splitter.on('.')
+        .omitEmptyStrings().trimResults().split(emptyToken);
+    ASSERT.that(letters).hasContentsInOrder("a", "c");
+  }
+
+  public void testCharacterSplitOnEmptyString() {
+    Iterable<String> nothing = Splitter.on('.').split("");
+    ASSERT.that(nothing).hasContentsInOrder("");
+  }
+
+  public void testCharacterSplitOnEmptyStringOmitEmptyStrings() {
+    ASSERT.that(Splitter.on('.').omitEmptyStrings().split("")).isEmpty();
+  }
+
+  public void testCharacterSplitOnOnlyDelimiter() {
+    Iterable<String> blankblank = Splitter.on('.').split(".");
+    ASSERT.that(blankblank).hasContentsInOrder("", "");
+  }
+
+  public void testCharacterSplitOnOnlyDelimitersOmitEmptyStrings() {
+    Iterable<String> empty = Splitter.on('.').omitEmptyStrings().split("...");
+    ASSERT.that(empty);
+  }
+
+  public void testCharacterSplitWithTrim() {
+    String jacksons = "arfo(Marlon)aorf, (Michael)orfa, afro(Jackie)orfa, "
+        + "ofar(Jemaine), aff(Tito)";
+    Iterable<String> family = COMMA_SPLITTER
+        .trimResults(CharMatcher.anyOf("afro").or(CharMatcher.WHITESPACE))
+        .split(jacksons);
+    ASSERT.that(family).hasContentsInOrder(
+        "(Marlon)", "(Michael)", "(Jackie)", "(Jemaine)", "(Tito)");
+  }
+
+  public void testStringSimpleSplit() {
+    String simple = "a,b,c";
+    Iterable<String> letters = Splitter.on(",").split(simple);
+    ASSERT.that(letters).hasContentsInOrder("a", "b", "c");
+  }
+
+  public void testStringSimpleSplitWithNoDelimiter() {
+    String simple = "a,b,c";
+    Iterable<String> letters = Splitter.on(".").split(simple);
+    ASSERT.that(letters).hasContentsInOrder("a,b,c");
+  }
+
+  public void testStringSplitWithDoubleDelimiter() {
+    String doubled = "a,,b,c";
+    Iterable<String> letters = Splitter.on(",").split(doubled);
+    ASSERT.that(letters).hasContentsInOrder("a", "", "b", "c");
+  }
+
+  public void testStringSplitWithDoubleDelimiterAndSpace() {
+    String doubled = "a,, b,c";
+    Iterable<String> letters = Splitter.on(",").split(doubled);
+    ASSERT.that(letters).hasContentsInOrder("a", "", " b", "c");
+  }
+
+  public void testStringSplitWithTrailingDelimiter() {
+    String trailing = "a,b,c,";
+    Iterable<String> letters = Splitter.on(",").split(trailing);
+    ASSERT.that(letters).hasContentsInOrder("a", "b", "c", "");
+  }
+
+  public void testStringSplitWithLeadingDelimiter() {
+    String leading = ",a,b,c";
+    Iterable<String> letters = Splitter.on(",").split(leading);
+    ASSERT.that(letters).hasContentsInOrder("", "a", "b", "c");
+  }
+
+  public void testStringSplitWithMultipleLetters() {
+    Iterable<String> testStringingMotto = Splitter.on("-").split(
+        "Testing-rocks-Debugging-sucks");
+    ASSERT.that(testStringingMotto).hasContentsInOrder(
+        "Testing", "rocks", "Debugging", "sucks");
+  }
+
+  public void testStringSplitWithDoubleDelimiterOmitEmptyStrings() {
+    String doubled = "a..b.c";
+    Iterable<String> letters = Splitter.on(".")
+        .omitEmptyStrings().split(doubled);
+    ASSERT.that(letters).hasContentsInOrder("a", "b", "c");
+  }
+
+  public void testStringSplitEmptyToken() {
+    String emptyToken = "a. .c";
+    Iterable<String> letters = Splitter.on(".").trimResults()
+        .split(emptyToken);
+    ASSERT.that(letters).hasContentsInOrder("a", "", "c");
+  }
+
+  public void testStringSplitEmptyTokenOmitEmptyStrings() {
+    String emptyToken = "a. .c";
+    Iterable<String> letters = Splitter.on(".")
+        .omitEmptyStrings().trimResults().split(emptyToken);
+    ASSERT.that(letters).hasContentsInOrder("a", "c");
+  }
+
+  public void testStringSplitWithLongDelimiter() {
+    String longDelimiter = "a, b, c";
+    Iterable<String> letters = Splitter.on(", ").split(longDelimiter);
+    ASSERT.that(letters).hasContentsInOrder("a", "b", "c");
+  }
+
+  public void testStringSplitWithLongLeadingDelimiter() {
+    String longDelimiter = ", a, b, c";
+    Iterable<String> letters = Splitter.on(", ").split(longDelimiter);
+    ASSERT.that(letters).hasContentsInOrder("", "a", "b", "c");
+  }
+
+  public void testStringSplitWithLongTrailingDelimiter() {
+    String longDelimiter = "a, b, c, ";
+    Iterable<String> letters = Splitter.on(", ").split(longDelimiter);
+    ASSERT.that(letters).hasContentsInOrder("a", "b", "c", "");
+  }
+
+  public void testStringSplitWithDelimiterSubstringInValue() {
+    String fourCommasAndFourSpaces = ",,,,    ";
+    Iterable<String> threeCommasThenThreeSpaces = Splitter.on(", ").split(
+        fourCommasAndFourSpaces);
+    ASSERT.that(threeCommasThenThreeSpaces).hasContentsInOrder(",,,", "   ");
+  }
+
+  public void testStringSplitWithEmptyString() {
+    try {
+      Splitter.on("");
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  public void testStringSplitOnEmptyString() {
+    Iterable<String> notMuch = Splitter.on(".").split("");
+    ASSERT.that(notMuch).hasContentsInOrder("");
+  }
+
+  public void testStringSplitOnEmptyStringOmitEmptyString() {
+    ASSERT.that(Splitter.on(".").omitEmptyStrings().split("")).isEmpty();
+  }
+
+  public void testStringSplitOnOnlyDelimiter() {
+    Iterable<String> blankblank = Splitter.on(".").split(".");
+    ASSERT.that(blankblank).hasContentsInOrder("", "");
+  }
+
+  public void testStringSplitOnOnlyDelimitersOmitEmptyStrings() {
+    Iterable<String> empty = Splitter.on(".").omitEmptyStrings().split("...");
+    ASSERT.that(empty).isEmpty();
+  }
+
+  public void testStringSplitWithTrim() {
+    String jacksons = "arfo(Marlon)aorf, (Michael)orfa, afro(Jackie)orfa, "
+        + "ofar(Jemaine), aff(Tito)";
+    Iterable<String> family = Splitter.on(",")
+        .trimResults(CharMatcher.anyOf("afro").or(CharMatcher.WHITESPACE))
+        .split(jacksons);
+    ASSERT.that(family).hasContentsInOrder(
+        "(Marlon)", "(Michael)", "(Jackie)", "(Jemaine)", "(Tito)");
+  }
+
+  @GwtIncompatible("Splitter.onPattern")
+  public void testPatternSimpleSplit() {
+    String simple = "a,b,c";
+    Iterable<String> letters = Splitter.onPattern(",").split(simple);
+    ASSERT.that(letters).hasContentsInOrder("a", "b", "c");
+  }
+
+  @GwtIncompatible("Splitter.onPattern")
+  public void testPatternSimpleSplitWithNoDelimiter() {
+    String simple = "a,b,c";
+    Iterable<String> letters = Splitter.onPattern("foo").split(simple);
+    ASSERT.that(letters).hasContentsInOrder("a,b,c");
+  }
+
+  @GwtIncompatible("Splitter.onPattern")
+  public void testPatternSplitWithDoubleDelimiter() {
+    String doubled = "a,,b,c";
+    Iterable<String> letters = Splitter.onPattern(",").split(doubled);
+    ASSERT.that(letters).hasContentsInOrder("a", "", "b", "c");
+  }
+
+  @GwtIncompatible("Splitter.onPattern")
+  public void testPatternSplitWithDoubleDelimiterAndSpace() {
+    String doubled = "a,, b,c";
+    Iterable<String> letters = Splitter.onPattern(",").split(doubled);
+    ASSERT.that(letters).hasContentsInOrder("a", "", " b", "c");
+  }
+
+  @GwtIncompatible("Splitter.onPattern")
+  public void testPatternSplitWithTrailingDelimiter() {
+    String trailing = "a,b,c,";
+    Iterable<String> letters = Splitter.onPattern(",").split(trailing);
+    ASSERT.that(letters).hasContentsInOrder("a", "b", "c", "");
+  }
+
+  @GwtIncompatible("Splitter.onPattern")
+  public void testPatternSplitWithLeadingDelimiter() {
+    String leading = ",a,b,c";
+    Iterable<String> letters = Splitter.onPattern(",").split(leading);
+    ASSERT.that(letters).hasContentsInOrder("", "a", "b", "c");
+  }
+
+  // TODO(kevinb): the name of this method suggests it might not actually be testing what it
+  // intends to be testing?
+  @GwtIncompatible("Splitter.onPattern")
+  public void testPatternSplitWithMultipleLetters() {
+    Iterable<String> testPatterningMotto = Splitter.onPattern("-").split(
+        "Testing-rocks-Debugging-sucks");
+    ASSERT.that(testPatterningMotto).hasContentsInOrder("Testing", "rocks", "Debugging", "sucks");
+  }
+
+  @GwtIncompatible("java.util.regex.Pattern")
+  private static Pattern literalDotPattern() {
+    return Pattern.compile("\\.");
+  }
+
+  @GwtIncompatible("java.util.regex.Pattern")
+  public void testPatternSplitWithDoubleDelimiterOmitEmptyStrings() {
+    String doubled = "a..b.c";
+    Iterable<String> letters = Splitter.on(literalDotPattern())
+        .omitEmptyStrings().split(doubled);
+    ASSERT.that(letters).hasContentsInOrder("a", "b", "c");
+  }
+
+  @GwtIncompatible("java.util.regex.Pattern")
+  public void testPatternSplitEmptyToken() {
+    String emptyToken = "a. .c";
+    Iterable<String> letters = Splitter.on(literalDotPattern()).trimResults().split(emptyToken);
+    ASSERT.that(letters).hasContentsInOrder("a", "", "c");
+  }
+
+  @GwtIncompatible("java.util.regex.Pattern")
+  public void testPatternSplitEmptyTokenOmitEmptyStrings() {
+    String emptyToken = "a. .c";
+    Iterable<String> letters = Splitter.on(literalDotPattern())
+        .omitEmptyStrings().trimResults().split(emptyToken);
+    ASSERT.that(letters).hasContentsInOrder("a", "c");
+  }
+
+  @GwtIncompatible("java.util.regex.Pattern")
+  public void testPatternSplitOnOnlyDelimiter() {
+    Iterable<String> blankblank = Splitter.on(literalDotPattern()).split(".");
+
+    ASSERT.that(blankblank).hasContentsInOrder("", "");
+  }
+
+  @GwtIncompatible("java.util.regex.Pattern")
+  public void testPatternSplitOnOnlyDelimitersOmitEmptyStrings() {
+    Iterable<String> empty = Splitter.on(literalDotPattern()).omitEmptyStrings()
+        .split("...");
+    ASSERT.that(empty).isEmpty();
+  }
+
+  @GwtIncompatible("java.util.regex.Pattern")
+  public void testPatternSplitMatchingIsGreedy() {
+    String longDelimiter = "a, b,   c";
+    Iterable<String> letters = Splitter.on(Pattern.compile(",\\s*"))
+        .split(longDelimiter);
+    ASSERT.that(letters).hasContentsInOrder("a", "b", "c");
+  }
+
+  @GwtIncompatible("java.util.regex.Pattern")
+  public void testPatternSplitWithLongLeadingDelimiter() {
+    String longDelimiter = ", a, b, c";
+    Iterable<String> letters = Splitter.on(Pattern.compile(", "))
+        .split(longDelimiter);
+    ASSERT.that(letters).hasContentsInOrder("", "a", "b", "c");
+  }
+
+  @GwtIncompatible("java.util.regex.Pattern")
+  public void testPatternSplitWithLongTrailingDelimiter() {
+    String longDelimiter = "a, b, c/ ";
+    Iterable<String> letters = Splitter.on(Pattern.compile("[,/]\\s"))
+        .split(longDelimiter);
+    ASSERT.that(letters).hasContentsInOrder("a", "b", "c", "");
+  }
+
+  @GwtIncompatible("java.util.regex.Pattern")
+  public void testPatternSplitInvalidPattern() {
+    try {
+      Splitter.on(Pattern.compile("a*"));
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  @GwtIncompatible("java.util.regex.Pattern")
+  public void testPatternSplitWithTrim() {
+    String jacksons = "arfo(Marlon)aorf, (Michael)orfa, afro(Jackie)orfa, "
+        + "ofar(Jemaine), aff(Tito)";
+    Iterable<String> family = Splitter.on(Pattern.compile(","))
+        .trimResults(CharMatcher.anyOf("afro").or(CharMatcher.WHITESPACE))
+        .split(jacksons);
+    ASSERT.that(family).hasContentsInOrder(
+        "(Marlon)", "(Michael)", "(Jackie)", "(Jemaine)", "(Tito)");
+  }
+
+  public void testSplitterIterableIsUnmodifiable_char() {
+    assertIteratorIsUnmodifiable(COMMA_SPLITTER.split("a,b").iterator());
+  }
+
+  public void testSplitterIterableIsUnmodifiable_string() {
+    assertIteratorIsUnmodifiable(Splitter.on(",").split("a,b").iterator());
+  }
+
+  @GwtIncompatible("java.util.regex.Pattern")
+  public void testSplitterIterableIsUnmodifiable_pattern() {
+    assertIteratorIsUnmodifiable(
+        Splitter.on(Pattern.compile(",")).split("a,b").iterator());
+  }
+
+  private void assertIteratorIsUnmodifiable(Iterator<?> iterator) {
+    iterator.next();
+    try {
+      iterator.remove();
+      fail();
+    } catch (UnsupportedOperationException expected) {
+    }
+  }
+
+  public void testSplitterIterableIsLazy_char() {
+    assertSplitterIterableIsLazy(COMMA_SPLITTER);
+  }
+
+  public void testSplitterIterableIsLazy_string() {
+    assertSplitterIterableIsLazy(Splitter.on(","));
+  }
+
+  @GwtIncompatible("java.util.regex.Pattern")
+  public void testSplitterIterableIsLazy_pattern() {
+    assertSplitterIterableIsLazy(Splitter.onPattern(","));
+  }
+
+  /**
+   * This test really pushes the boundaries of what we support. In general the
+   * splitter's behaviour is not well defined if the char sequence it's
+   * splitting is mutated during iteration.
+   */
+  private void assertSplitterIterableIsLazy(Splitter splitter) {
+    StringBuilder builder = new StringBuilder();
+    Iterator<String> iterator = splitter.split(builder).iterator();
+
+    builder.append("A,");
+    assertEquals("A", iterator.next());
+    builder.append("B,");
+    assertEquals("B", iterator.next());
+    builder.append("C");
+    assertEquals("C", iterator.next());
+    assertFalse(iterator.hasNext());
+  }
+
+  public void testAtEachSimpleSplit() {
+    String simple = "abcde";
+    Iterable<String> letters = Splitter.fixedLength(2).split(simple);
+    ASSERT.that(letters).hasContentsInOrder("ab", "cd", "e");
+  }
+
+  public void testAtEachSplitEqualChunkLength() {
+    String simple = "abcdef";
+    Iterable<String> letters = Splitter.fixedLength(2).split(simple);
+    ASSERT.that(letters).hasContentsInOrder("ab", "cd", "ef");
+  }
+
+  public void testAtEachSplitOnlyOneChunk() {
+    String simple = "abc";
+    Iterable<String> letters = Splitter.fixedLength(3).split(simple);
+    ASSERT.that(letters).hasContentsInOrder("abc");
+  }
+
+  public void testAtEachSplitSmallerString() {
+    String simple = "ab";
+    Iterable<String> letters = Splitter.fixedLength(3).split(simple);
+    ASSERT.that(letters).hasContentsInOrder("ab");
+  }
+
+  public void testAtEachSplitEmptyString() {
+    String simple = "";
+    Iterable<String> letters = Splitter.fixedLength(3).split(simple);
+    ASSERT.that(letters).hasContentsInOrder("");
+  }
+
+  public void testAtEachSplitEmptyStringWithOmitEmptyStrings() {
+    ASSERT.that(Splitter.fixedLength(3).omitEmptyStrings().split("")).isEmpty();
+  }
+
+  public void testAtEachSplitIntoChars() {
+    String simple = "abcd";
+    Iterable<String> letters = Splitter.fixedLength(1).split(simple);
+    ASSERT.that(letters).hasContentsInOrder("a", "b", "c", "d");
+  }
+
+  public void testAtEachSplitZeroChunkLen() {
+    try {
+      Splitter.fixedLength(0);
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  public void testAtEachSplitNegativeChunkLen() {
+    try {
+      Splitter.fixedLength(-1);
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  public void testLimitLarge() {
+    String simple = "abcd";
+    Iterable<String> letters = Splitter.fixedLength(1).limit(100).split(simple);
+    ASSERT.that(letters).hasContentsInOrder("a", "b", "c", "d");
+  }
+
+  public void testLimitOne() {
+    String simple = "abcd";
+    Iterable<String> letters = Splitter.fixedLength(1).limit(1).split(simple);
+    ASSERT.that(letters).hasContentsInOrder("abcd");
+  }
+
+  public void testLimitFixedLength() {
+    String simple = "abcd";
+    Iterable<String> letters = Splitter.fixedLength(1).limit(2).split(simple);
+    ASSERT.that(letters).hasContentsInOrder("a", "bcd");
+  }
+
+  public void testLimitSeparator() {
+    String simple = "a,b,c,d";
+    Iterable<String> items = COMMA_SPLITTER.limit(2).split(simple);
+    ASSERT.that(items).hasContentsInOrder("a", "b,c,d");
+  }
+
+  public void testLimitExtraSeparators() {
+    String text = "a,,,b,,c,d";
+    Iterable<String> items = COMMA_SPLITTER.limit(2).split(text);
+    ASSERT.that(items).hasContentsInOrder("a", ",,b,,c,d");
+  }
+
+  public void testLimitExtraSeparatorsOmitEmpty() {
+    String text = "a,,,b,,c,d";
+    Iterable<String> items = COMMA_SPLITTER.limit(2).omitEmptyStrings().split(text);
+    ASSERT.that(items).hasContentsInOrder("a", "b,,c,d");
+  }
+
+  public void testLimitExtraSeparatorsOmitEmpty3() {
+    String text = "a,,,b,,c,d";
+    Iterable<String> items = COMMA_SPLITTER.limit(3).omitEmptyStrings().split(text);
+    ASSERT.that(items).hasContentsInOrder("a", "b", "c,d");
+  }
+
+  public void testLimitExtraSeparatorsTrim() {
+    String text = ",,a,,  , b ,, c,d ";
+    Iterable<String> items = COMMA_SPLITTER.limit(2).omitEmptyStrings().trimResults().split(text);
+    ASSERT.that(items).hasContentsInOrder("a", "b ,, c,d");
+  }
+
+  public void testLimitExtraSeparatorsTrim3() {
+    String text = ",,a,,  , b ,, c,d ";
+    Iterable<String> items = COMMA_SPLITTER.limit(3).omitEmptyStrings().trimResults().split(text);
+    ASSERT.that(items).hasContentsInOrder("a", "b", "c,d");
+  }
+
+  public void testLimitExtraSeparatorsTrim1() {
+    String text = ",,a,,  , b ,, c,d ";
+    Iterable<String> items = COMMA_SPLITTER.limit(1).omitEmptyStrings().trimResults().split(text);
+    ASSERT.that(items).hasContentsInOrder("a,,  , b ,, c,d");
+  }
+
+  public void testLimitExtraSeparatorsTrim1NoOmit() {
+    String text = ",,a,,  , b ,, c,d ";
+    Iterable<String> items = COMMA_SPLITTER.limit(1).trimResults().split(text);
+    ASSERT.that(items).hasContentsInOrder(",,a,,  , b ,, c,d");
+  }
+
+  public void testLimitExtraSeparatorsTrim1Empty() {
+    String text = "";
+    Iterable<String> items = COMMA_SPLITTER.limit(1).split(text);
+    ASSERT.that(items).hasContentsInOrder("");
+  }
+
+  public void testLimitExtraSeparatorsTrim1EmptyOmit() {
+    String text = "";
+    Iterable<String> items = COMMA_SPLITTER.omitEmptyStrings().limit(1).split(text);
+    ASSERT.that(items).isEmpty();
+  }
+
+  public void testInvalidZeroLimit() {
+    try {
+      COMMA_SPLITTER.limit(0);
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  @GwtIncompatible("NullPointerTester")
+  public void testNullPointers() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.testAllPublicStaticMethods(Splitter.class);
+    tester.testAllPublicInstanceMethods(Splitter.on(","));
+    tester.testAllPublicInstanceMethods(Splitter.on(",").trimResults());
+  }
+
+  private static <E> List<E> asList(Collection<E> collection){
+    return ImmutableList.copyOf(collection);
+  }
+
+  public void testMapSplitter_trimmedBoth() {
+    Map<String, String> m = COMMA_SPLITTER
+        .trimResults()
+        .withKeyValueSeparator(Splitter.on(':').trimResults())
+        .split("boy  : tom , girl: tina , cat  : kitty , dog: tommy ");
+    ImmutableMap<String, String> expected =
+          ImmutableMap.of("boy", "tom", "girl", "tina", "cat", "kitty", "dog", "tommy");
+    ASSERT.that(m).isEqualTo(expected);
+    ASSERT.that(asList(m.entrySet())).is(asList(expected.entrySet()));
+  }
+
+  public void testMapSplitter_trimmedEntries() {
+    Map<String, String> m = COMMA_SPLITTER
+        .trimResults()
+        .withKeyValueSeparator(":")
+        .split("boy  : tom , girl: tina , cat  : kitty , dog: tommy ");
+    ImmutableMap<String, String> expected =
+        ImmutableMap.of("boy  ", " tom", "girl", " tina", "cat  ", " kitty", "dog", " tommy");
+
+    ASSERT.that(m).isEqualTo(expected);
+    ASSERT.that(asList(m.entrySet())).is(asList(expected.entrySet()));
+  }
+
+  public void testMapSplitter_trimmedKeyValue() {
+    Map<String, String> m =
+        COMMA_SPLITTER.withKeyValueSeparator(Splitter.on(':').trimResults()).split(
+            "boy  : tom , girl: tina , cat  : kitty , dog: tommy ");
+    ImmutableMap<String, String> expected =
+        ImmutableMap.of("boy", "tom", "girl", "tina", "cat", "kitty", "dog", "tommy");
+    ASSERT.that(m).isEqualTo(expected);
+    ASSERT.that(asList(m.entrySet())).is(asList(expected.entrySet()));
+  }
+
+  public void testMapSplitter_notTrimmed() {
+    Map<String, String> m = COMMA_SPLITTER.withKeyValueSeparator(":").split(
+        " boy:tom , girl: tina , cat :kitty , dog:  tommy ");
+    ImmutableMap<String, String> expected =
+        ImmutableMap.of(" boy", "tom ", " girl", " tina ", " cat ", "kitty ", " dog", "  tommy ");
+    ASSERT.that(m).isEqualTo(expected);
+    ASSERT.that(asList(m.entrySet())).is(asList(expected.entrySet()));
+  }
+
+  public void testMapSplitter_multiCharacterSeparator() {
+    // try different delimiters.
+    Map<String, String> m = Splitter
+        .on(",")
+        .withKeyValueSeparator(":^&")
+        .split("boy:^&tom,girl:^&tina,cat:^&kitty,dog:^&tommy");
+    ImmutableMap<String, String> expected =
+        ImmutableMap.of("boy", "tom", "girl", "tina", "cat", "kitty", "dog", "tommy");
+
+    ASSERT.that(m).isEqualTo(expected);
+    ASSERT.that(asList(m.entrySet())).is(asList(expected.entrySet()));
+  }
+
+  public void testMapSplitter_emptySeparator() {
+    try {
+      COMMA_SPLITTER.withKeyValueSeparator("");
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  public void testMapSplitter_malformedEntry() {
+    try {
+      COMMA_SPLITTER.withKeyValueSeparator("=").split("a=1,b,c=2");
+      fail();
+    } catch(IllegalArgumentException expected) {
+    }
+  }
+
+  public void testMapSplitter_orderedResults() {
+    Map<String, String> m = Splitter.on(",")
+        .withKeyValueSeparator(":")
+        .split("boy:tom,girl:tina,cat:kitty,dog:tommy");
+
+    ASSERT.that(m.keySet()).hasContentsInOrder("boy", "girl", "cat", "dog");
+    ASSERT.that(m).isEqualTo(
+        ImmutableMap.of("boy", "tom", "girl", "tina", "cat", "kitty", "dog", "tommy"));
+
+    // try in a different order
+    m = Splitter.on(",")
+        .withKeyValueSeparator(":")
+        .split("girl:tina,boy:tom,dog:tommy,cat:kitty");
+
+    ASSERT.that(m.keySet()).hasContentsInOrder("girl", "boy", "dog", "cat");
+    ASSERT.that(m).isEqualTo(
+        ImmutableMap.of("boy", "tom", "girl", "tina", "cat", "kitty", "dog", "tommy"));
+  }
+
+  public void testMapSplitter_duplicateKeys() {
+    try {
+      Splitter.on(",").withKeyValueSeparator(":").split("a:1,b:2,a:3");
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/base/StopwatchTest.java b/guava-tests/test/com/google/common/base/StopwatchTest.java
new file mode 100644
index 0000000..33e8fb0
--- /dev/null
+++ b/guava-tests/test/com/google/common/base/StopwatchTest.java
@@ -0,0 +1,234 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base;
+
+import static java.util.concurrent.TimeUnit.MICROSECONDS;
+import static java.util.concurrent.TimeUnit.MILLISECONDS;
+import static java.util.concurrent.TimeUnit.NANOSECONDS;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.testing.FakeTicker;
+
+import junit.framework.TestCase;
+
+/**
+ * Unit test for {@link Stopwatch}.
+ *
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible(emulated=true)
+public class StopwatchTest extends TestCase {
+
+  private final FakeTicker ticker = new FakeTicker();
+  private final Stopwatch stopwatch = new Stopwatch(ticker);
+
+  public void testInitialState() {
+    assertFalse(stopwatch.isRunning());
+    assertEquals(0, stopwatch.elapsedTime(NANOSECONDS));
+  }
+
+  public void testStart() {
+    assertSame(stopwatch, stopwatch.start());
+    assertTrue(stopwatch.isRunning());
+  }
+
+  public void testStart_whileRunning() {
+    stopwatch.start();
+    try {
+      stopwatch.start();
+      fail();
+    } catch (IllegalStateException expected) {
+    }
+    assertTrue(stopwatch.isRunning());
+  }
+
+  public void testStop() {
+    stopwatch.start();
+    assertSame(stopwatch, stopwatch.stop());
+    assertFalse(stopwatch.isRunning());
+  }
+
+  public void testStop_new() {
+    try {
+      stopwatch.stop();
+      fail();
+    } catch (IllegalStateException expected) {
+    }
+    assertFalse(stopwatch.isRunning());
+  }
+
+  public void testStop_alreadyStopped() {
+    stopwatch.start();
+    stopwatch.stop();
+    try {
+      stopwatch.stop();
+      fail();
+    } catch (IllegalStateException expected) {
+    }
+    assertFalse(stopwatch.isRunning());
+  }
+
+  public void testReset_new() {
+    ticker.advance(1);
+    stopwatch.reset();
+    assertFalse(stopwatch.isRunning());
+    ticker.advance(2);
+    assertEquals(0, stopwatch.elapsedTime(NANOSECONDS));
+    stopwatch.start();
+    ticker.advance(3);
+    assertEquals(3, stopwatch.elapsedTime(NANOSECONDS));
+  }
+
+  public void testReset_whileRunning() {
+    ticker.advance(1);
+    stopwatch.start();
+    assertEquals(0, stopwatch.elapsedTime(NANOSECONDS));
+    ticker.advance(2);
+    assertEquals(2, stopwatch.elapsedTime(NANOSECONDS));
+    stopwatch.reset();
+    assertFalse(stopwatch.isRunning());
+    ticker.advance(3);
+    assertEquals(0, stopwatch.elapsedTime(NANOSECONDS));
+  }
+
+  public void testElapsedTime_whileRunning() {
+    ticker.advance(78);
+    stopwatch.start();
+    assertEquals(0, stopwatch.elapsedTime(NANOSECONDS));
+
+    ticker.advance(345);
+    assertEquals(345, stopwatch.elapsedTime(NANOSECONDS));
+  }
+
+  public void testElapsedTime_notRunning() {
+    ticker.advance(1);
+    stopwatch.start();
+    ticker.advance(4);
+    stopwatch.stop();
+    ticker.advance(9);
+    assertEquals(4, stopwatch.elapsedTime(NANOSECONDS));
+  }
+
+  public void testElapsedTime_multipleSegments() {
+    stopwatch.start();
+    ticker.advance(9);
+    stopwatch.stop();
+
+    ticker.advance(16);
+
+    stopwatch.start();
+    assertEquals(9, stopwatch.elapsedTime(NANOSECONDS));
+    ticker.advance(25);
+    assertEquals(34, stopwatch.elapsedTime(NANOSECONDS));
+
+    stopwatch.stop();
+    ticker.advance(36);
+    assertEquals(34, stopwatch.elapsedTime(NANOSECONDS));
+  }
+  
+  public void testElapsedTime_micros() {
+    stopwatch.start();
+    ticker.advance(999);
+    assertEquals(0, stopwatch.elapsedTime(MICROSECONDS));
+    ticker.advance(1);
+    assertEquals(1, stopwatch.elapsedTime(MICROSECONDS));
+  }
+
+  public void testElapsedTime_millis() {
+    stopwatch.start();
+    ticker.advance(999999);
+    assertEquals(0, stopwatch.elapsedTime(MILLISECONDS));
+    ticker.advance(1);
+    assertEquals(1, stopwatch.elapsedTime(MILLISECONDS));
+  }
+
+  public void testElapsedMillis() {
+    stopwatch.start();
+    ticker.advance(999999);
+    assertEquals(0, stopwatch.elapsedMillis());
+    ticker.advance(1);
+    assertEquals(1, stopwatch.elapsedMillis());
+  }
+
+  public void testElapsedMillis_whileRunning() {
+    ticker.advance(78000000);
+    stopwatch.start();
+    assertEquals(0, stopwatch.elapsedMillis());
+
+    ticker.advance(345000000);
+    assertEquals(345, stopwatch.elapsedMillis());
+  }
+
+  public void testElapsedMillis_notRunning() {
+    ticker.advance(1000000);
+    stopwatch.start();
+    ticker.advance(4000000);
+    stopwatch.stop();
+    ticker.advance(9000000);
+    assertEquals(4, stopwatch.elapsedMillis());
+  }
+
+  public void testElapsedMillis_multipleSegments() {
+    stopwatch.start();
+    ticker.advance(9000000);
+    stopwatch.stop();
+
+    ticker.advance(16000000);
+
+    stopwatch.start();
+    assertEquals(9, stopwatch.elapsedMillis());
+    ticker.advance(25000000);
+    assertEquals(34, stopwatch.elapsedMillis());
+
+    stopwatch.stop();
+    ticker.advance(36000000);
+    assertEquals(34, stopwatch.elapsedMillis());
+  }
+
+  @GwtIncompatible("String.format()")
+  public void testToString() {
+    stopwatch.start();
+    assertEquals("0.000 ns", stopwatch.toString());
+    ticker.advance(1);
+    assertEquals("1.000 ns", stopwatch.toString());
+    ticker.advance(998);
+    assertEquals("999.0 ns", stopwatch.toString());
+    ticker.advance(1);
+    assertEquals("1.000 \u03bcs", stopwatch.toString());
+    ticker.advance(1);
+    assertEquals("1.001 \u03bcs", stopwatch.toString());
+    ticker.advance(8998);
+    assertEquals("9.999 \u03bcs", stopwatch.toString());
+    stopwatch.reset();
+    stopwatch.start();
+    ticker.advance(1234567);
+    assertEquals("1.235 ms", stopwatch.toString());
+    stopwatch.reset();
+    stopwatch.start();
+    ticker.advance(5000000000L);
+    assertEquals("5.000 s", stopwatch.toString());
+  }
+
+  @GwtIncompatible("GWT is at millisecond granularity")
+  public void testDefault() {
+    // By default System.nanoTime() is used as the time source
+    long value = new Stopwatch().start().elapsedTime(NANOSECONDS);
+    assertTrue(value > 0);
+    // There isn't much else we can test about this
+  }
+}
diff --git a/guava-tests/test/com/google/common/base/StringsTest.java b/guava-tests/test/com/google/common/base/StringsTest.java
new file mode 100644
index 0000000..f97c288
--- /dev/null
+++ b/guava-tests/test/com/google/common/base/StringsTest.java
@@ -0,0 +1,228 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.testing.NullPointerTester;
+
+import junit.framework.TestCase;
+
+/**
+ * Unit test for {@link Strings}.
+ *
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible(emulated = true)
+public class StringsTest extends TestCase {
+  public void testNullToEmpty() {
+    assertEquals("", Strings.nullToEmpty(null));
+    assertEquals("", Strings.nullToEmpty(""));
+    assertEquals("a", Strings.nullToEmpty("a"));
+  }
+
+  public void testEmptyToNull() {
+    assertNull(Strings.emptyToNull(null));
+    assertNull(Strings.emptyToNull(""));
+    assertEquals("a", Strings.emptyToNull("a"));
+  }
+
+  public void testIsNullOrEmpty() {
+    assertTrue(Strings.isNullOrEmpty(null));
+    assertTrue(Strings.isNullOrEmpty(""));
+    assertFalse(Strings.isNullOrEmpty("a"));
+  }
+
+  public void testPadStart_noPadding() {
+    assertSame("", Strings.padStart("", 0, '-'));
+    assertSame("x", Strings.padStart("x", 0, '-'));
+    assertSame("x", Strings.padStart("x", 1, '-'));
+    assertSame("xx", Strings.padStart("xx", 0, '-'));
+    assertSame("xx", Strings.padStart("xx", 2, '-'));
+  }
+
+  public void testPadStart_somePadding() {
+    assertEquals("-", Strings.padStart("", 1, '-'));
+    assertEquals("--", Strings.padStart("", 2, '-'));
+    assertEquals("-x", Strings.padStart("x", 2, '-'));
+    assertEquals("--x", Strings.padStart("x", 3, '-'));
+    assertEquals("-xx", Strings.padStart("xx", 3, '-'));
+  }
+
+  public void testPadStart_negativeMinLength() {
+    assertSame("x", Strings.padStart("x", -1, '-'));
+  }
+
+  // TODO: could remove if we got NPT working in GWT somehow
+  public void testPadStart_null() {
+    try {
+      Strings.padStart(null, 5, '0');
+      fail();
+    } catch (NullPointerException expected) {
+    }
+  }
+
+  public void testPadEnd_noPadding() {
+    assertSame("", Strings.padEnd("", 0, '-'));
+    assertSame("x", Strings.padEnd("x", 0, '-'));
+    assertSame("x", Strings.padEnd("x", 1, '-'));
+    assertSame("xx", Strings.padEnd("xx", 0, '-'));
+    assertSame("xx", Strings.padEnd("xx", 2, '-'));
+  }
+
+  public void testPadEnd_somePadding() {
+    assertEquals("-", Strings.padEnd("", 1, '-'));
+    assertEquals("--", Strings.padEnd("", 2, '-'));
+    assertEquals("x-", Strings.padEnd("x", 2, '-'));
+    assertEquals("x--", Strings.padEnd("x", 3, '-'));
+    assertEquals("xx-", Strings.padEnd("xx", 3, '-'));
+  }
+
+  public void testPadEnd_negativeMinLength() {
+    assertSame("x", Strings.padEnd("x", -1, '-'));
+  }
+
+  // TODO: could remove if we got NPT working in GWT somehow
+  public void testPadEnd_null() {
+    try {
+      Strings.padEnd(null, 5, '0');
+      fail();
+    } catch (NullPointerException expected) {
+    }
+  }
+
+  public void testRepeat() {
+    String input = "20";
+    assertEquals("", Strings.repeat(input, 0));
+    assertEquals("20", Strings.repeat(input, 1));
+    assertEquals("2020", Strings.repeat(input, 2));
+    assertEquals("202020", Strings.repeat(input, 3));
+
+    assertEquals("", Strings.repeat("", 4));
+
+    for (int i = 0; i < 100; ++i) {
+      assertEquals(2 * i, Strings.repeat(input, i).length());
+    }
+
+    try {
+      Strings.repeat("x", -1);
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+    try {
+      // Massive string
+      Strings.repeat("12345678", (1 << 30) + 3);
+      fail();
+    } catch (ArrayIndexOutOfBoundsException expected) {
+    }
+  }
+
+  // TODO: could remove if we got NPT working in GWT somehow
+  public void testRepeat_null() {
+    try {
+      Strings.repeat(null, 5);
+      fail();
+    } catch (NullPointerException expected) {
+    }
+  }
+
+  public void testCommonPrefix() {
+    assertEquals("", Strings.commonPrefix("", ""));
+    assertEquals("", Strings.commonPrefix("abc", ""));
+    assertEquals("", Strings.commonPrefix("", "abc"));
+    assertEquals("", Strings.commonPrefix("abcde", "xyz"));
+    assertEquals("", Strings.commonPrefix("xyz", "abcde"));
+    assertEquals("", Strings.commonPrefix("xyz", "abcxyz"));
+    assertEquals("a", Strings.commonPrefix("abc", "aaaaa"));
+    assertEquals("aa", Strings.commonPrefix("aa", "aaaaa"));
+    assertEquals("abc",
+        Strings.commonPrefix(new StringBuffer("abcdef"), "abcxyz"));
+
+    // Identical valid surrogate pairs.
+    assertEquals("abc\uD8AB\uDCAB",
+        Strings.commonPrefix("abc\uD8AB\uDCABdef", "abc\uD8AB\uDCABxyz"));
+    // Differing valid surrogate pairs.
+    assertEquals("abc",
+        Strings.commonPrefix("abc\uD8AB\uDCABdef", "abc\uD8AB\uDCACxyz"));
+    // One invalid pair.
+    assertEquals("abc",
+        Strings.commonPrefix("abc\uD8AB\uDCABdef", "abc\uD8AB\uD8ABxyz"));
+    // Two identical invalid pairs.
+    assertEquals("abc\uD8AB\uD8AC",
+        Strings.commonPrefix("abc\uD8AB\uD8ACdef", "abc\uD8AB\uD8ACxyz"));
+    // Two differing invalid pairs.
+    assertEquals("abc\uD8AB",
+        Strings.commonPrefix("abc\uD8AB\uD8ABdef", "abc\uD8AB\uD8ACxyz"));
+    // One orphan high surrogate.
+    assertEquals("", Strings.commonPrefix("\uD8AB\uDCAB", "\uD8AB"));
+    // Two orphan high surrogates.
+    assertEquals("\uD8AB", Strings.commonPrefix("\uD8AB", "\uD8AB"));
+  }
+
+  public void testCommonSuffix() {
+    assertEquals("", Strings.commonSuffix("", ""));
+    assertEquals("", Strings.commonSuffix("abc", ""));
+    assertEquals("", Strings.commonSuffix("", "abc"));
+    assertEquals("", Strings.commonSuffix("abcde", "xyz"));
+    assertEquals("", Strings.commonSuffix("xyz", "abcde"));
+    assertEquals("", Strings.commonSuffix("xyz", "xyzabc"));
+    assertEquals("c", Strings.commonSuffix("abc", "ccccc"));
+    assertEquals("aa", Strings.commonSuffix("aa", "aaaaa"));
+    assertEquals("abc",
+        Strings.commonSuffix(new StringBuffer("xyzabc"), "xxxabc"));
+
+    // Identical valid surrogate pairs.
+    assertEquals("\uD8AB\uDCABdef",
+        Strings.commonSuffix("abc\uD8AB\uDCABdef", "xyz\uD8AB\uDCABdef"));
+    // Differing valid surrogate pairs.
+    assertEquals("def",
+        Strings.commonSuffix("abc\uD8AB\uDCABdef", "abc\uD8AC\uDCABdef"));
+    // One invalid pair.
+    assertEquals("def",
+        Strings.commonSuffix("abc\uD8AB\uDCABdef", "xyz\uDCAB\uDCABdef"));
+    // Two identical invalid pairs.
+    assertEquals("\uD8AB\uD8ABdef",
+        Strings.commonSuffix("abc\uD8AB\uD8ABdef", "xyz\uD8AB\uD8ABdef"));
+    // Two differing invalid pairs.
+    assertEquals("\uDCABdef",
+        Strings.commonSuffix("abc\uDCAB\uDCABdef", "abc\uDCAC\uDCABdef"));
+    // One orphan low surrogate.
+    assertEquals("", Strings.commonSuffix("x\uD8AB\uDCAB", "\uDCAB"));
+    // Two orphan low surrogates.
+    assertEquals("\uDCAB", Strings.commonSuffix("\uDCAB", "\uDCAB"));
+  }
+
+  public void testValidSurrogatePairAt() {
+    assertTrue(Strings.validSurrogatePairAt("\uD8AB\uDCAB", 0));
+    assertTrue(Strings.validSurrogatePairAt("abc\uD8AB\uDCAB", 3));
+    assertTrue(Strings.validSurrogatePairAt("abc\uD8AB\uDCABxyz", 3));
+    assertFalse(Strings.validSurrogatePairAt("\uD8AB\uD8AB", 0));
+    assertFalse(Strings.validSurrogatePairAt("\uDCAB\uDCAB", 0));
+    assertFalse(Strings.validSurrogatePairAt("\uD8AB\uDCAB", -1));
+    assertFalse(Strings.validSurrogatePairAt("\uD8AB\uDCAB", 1));
+    assertFalse(Strings.validSurrogatePairAt("\uD8AB\uDCAB", -2));
+    assertFalse(Strings.validSurrogatePairAt("\uD8AB\uDCAB", 2));
+    assertFalse(Strings.validSurrogatePairAt("x\uDCAB", 0));
+    assertFalse(Strings.validSurrogatePairAt("\uD8ABx", 0));
+  }
+
+  @GwtIncompatible("NullPointerTester")
+  public void testNullPointers() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.testAllPublicStaticMethods(Strings.class);
+  }
+}
diff --git a/guava-tests/test/com/google/common/base/SuppliersTest.java b/guava-tests/test/com/google/common/base/SuppliersTest.java
new file mode 100644
index 0000000..7b4b8b9
--- /dev/null
+++ b/guava-tests/test/com/google/common/base/SuppliersTest.java
@@ -0,0 +1,399 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base;
+
+import static com.google.common.testing.SerializableTester.reserialize;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.collect.Lists;
+import com.google.common.testing.NullPointerTester;
+
+import junit.framework.TestCase;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicReference;
+
+/**
+ * Tests com.google.common.base.Suppliers.
+ *
+ * @author Laurence Gonsalves
+ * @author Harry Heymann
+ */
+@GwtCompatible(emulated = true)
+public class SuppliersTest extends TestCase {
+  public void testCompose() {
+    Supplier<Integer> fiveSupplier = new Supplier<Integer>() {
+      @Override
+      public Integer get() {
+        return 5;
+      }
+    };
+
+    Function<Number, Integer> intValueFunction =
+        new Function<Number, Integer>() {
+          @Override
+          public Integer apply(Number x) {
+            return x.intValue();
+          }
+        };
+
+    Supplier<Integer> squareSupplier = Suppliers.compose(intValueFunction,
+        fiveSupplier);
+
+    assertEquals(Integer.valueOf(5), squareSupplier.get());
+  }
+
+  public void testComposeWithLists() {
+    Supplier<ArrayList<Integer>> listSupplier
+        = new Supplier<ArrayList<Integer>>() {
+      @Override
+      public ArrayList<Integer> get() {
+        return Lists.newArrayList(0);
+      }
+    };
+
+    Function<List<Integer>, List<Integer>> addElementFunction =
+        new Function<List<Integer>, List<Integer>>() {
+          @Override
+          public List<Integer> apply(List<Integer> list) {
+            ArrayList<Integer> result = Lists.newArrayList(list);
+            result.add(1);
+            return result;
+          }
+        };
+
+    Supplier<List<Integer>> addSupplier = Suppliers.compose(addElementFunction,
+        listSupplier);
+
+    List<Integer> result = addSupplier.get();
+    assertEquals(Integer.valueOf(0), result.get(0));
+    assertEquals(Integer.valueOf(1), result.get(1));
+  }
+
+  static class CountingSupplier implements Supplier<Integer>, Serializable {
+    private static final long serialVersionUID = 0L;
+    transient int calls = 0;
+    @Override
+    public Integer get() {
+      calls++;
+      return calls * 10;
+    }
+  }
+
+  public void testMemoize() {
+    CountingSupplier countingSupplier = new CountingSupplier();
+    Supplier<Integer> memoizedSupplier = Suppliers.memoize(countingSupplier);
+    checkMemoize(countingSupplier, memoizedSupplier);
+  }
+
+  public void testMemoize_redudantly() {
+    CountingSupplier countingSupplier = new CountingSupplier();
+    Supplier<Integer> memoizedSupplier = Suppliers.memoize(countingSupplier);
+    assertSame(memoizedSupplier, Suppliers.memoize(memoizedSupplier));
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testMemoizeSerialized() {
+    CountingSupplier countingSupplier = new CountingSupplier();
+    Supplier<Integer> memoizedSupplier = Suppliers.memoize(countingSupplier);
+    checkMemoize(countingSupplier, memoizedSupplier);
+    // Calls to the original memoized supplier shouldn't affect its copy.
+    memoizedSupplier.get();
+
+    Supplier<Integer> copy = reserialize(memoizedSupplier);
+    memoizedSupplier.get();
+
+    CountingSupplier countingCopy = (CountingSupplier)
+        ((Suppliers.MemoizingSupplier<Integer>) copy).delegate;
+    checkMemoize(countingCopy, copy);
+  }
+
+  private void checkMemoize(
+      CountingSupplier countingSupplier, Supplier<Integer> memoizedSupplier) {
+    // the underlying supplier hasn't executed yet
+    assertEquals(0, countingSupplier.calls);
+
+    assertEquals(10, (int) memoizedSupplier.get());
+
+    // now it has
+    assertEquals(1, countingSupplier.calls);
+
+    assertEquals(10, (int) memoizedSupplier.get());
+
+    // it still should only have executed once due to memoization
+    assertEquals(1, countingSupplier.calls);
+  }
+
+  public void testMemoizeExceptionThrown() {
+    Supplier<Integer> exceptingSupplier = new Supplier<Integer>() {
+      @Override
+      public Integer get() {
+        throw new NullPointerException();
+      }
+    };
+
+    Supplier<Integer> memoizedSupplier = Suppliers.memoize(exceptingSupplier);
+
+    // call get() twice to make sure that memoization doesn't interfere
+    // with throwing the exception
+    for (int i = 0; i < 2; i++) {
+      try {
+        memoizedSupplier.get();
+        fail("failed to throw NullPointerException");
+      } catch (NullPointerException e) {
+        // this is what should happen
+      }
+    }
+  }
+
+  @GwtIncompatible("Thread.sleep")
+  public void testMemoizeWithExpiration() throws InterruptedException {
+    CountingSupplier countingSupplier = new CountingSupplier();
+
+    Supplier<Integer> memoizedSupplier = Suppliers.memoizeWithExpiration(
+        countingSupplier, 75, TimeUnit.MILLISECONDS);
+
+    checkExpiration(countingSupplier, memoizedSupplier);
+  }
+
+  @GwtIncompatible("Thread.sleep, SerializationTester")
+  public void testMemoizeWithExpirationSerialized()
+      throws InterruptedException {
+    CountingSupplier countingSupplier = new CountingSupplier();
+
+    Supplier<Integer> memoizedSupplier = Suppliers.memoizeWithExpiration(
+        countingSupplier, 75, TimeUnit.MILLISECONDS);
+    // Calls to the original memoized supplier shouldn't affect its copy.
+    memoizedSupplier.get();
+
+    Supplier<Integer> copy = reserialize(memoizedSupplier);
+    memoizedSupplier.get();
+
+    CountingSupplier countingCopy = (CountingSupplier)
+        ((Suppliers.ExpiringMemoizingSupplier<Integer>) copy).delegate;
+    checkExpiration(countingCopy, copy);
+  }
+
+  @GwtIncompatible("Thread.sleep")
+  private void checkExpiration(
+      CountingSupplier countingSupplier, Supplier<Integer> memoizedSupplier)
+      throws InterruptedException {
+    // the underlying supplier hasn't executed yet
+    assertEquals(0, countingSupplier.calls);
+
+    assertEquals(10, (int) memoizedSupplier.get());
+    // now it has
+    assertEquals(1, countingSupplier.calls);
+
+    assertEquals(10, (int) memoizedSupplier.get());
+    // it still should only have executed once due to memoization
+    assertEquals(1, countingSupplier.calls);
+
+    Thread.sleep(150);
+
+    assertEquals(20, (int) memoizedSupplier.get());
+    // old value expired
+    assertEquals(2, countingSupplier.calls);
+
+    assertEquals(20, (int) memoizedSupplier.get());
+    // it still should only have executed twice due to memoization
+    assertEquals(2, countingSupplier.calls);
+  }
+
+  public void testOfInstanceSuppliesSameInstance() {
+    Object toBeSupplied = new Object();
+    Supplier<Object> objectSupplier = Suppliers.ofInstance(toBeSupplied);
+    assertSame(toBeSupplied,objectSupplier.get());
+    assertSame(toBeSupplied,objectSupplier.get()); // idempotent
+  }
+
+  public void testOfInstanceSuppliesNull() {
+    Supplier<Integer> nullSupplier = Suppliers.ofInstance(null);
+    assertNull(nullSupplier.get());
+  }
+
+  @GwtIncompatible("Thread")
+
+  public void testExpiringMemoizedSupplierThreadSafe() throws Throwable {
+    Function<Supplier<Boolean>, Supplier<Boolean>> memoizer =
+        new Function<Supplier<Boolean>, Supplier<Boolean>>() {
+      @Override public Supplier<Boolean> apply(Supplier<Boolean> supplier) {
+        return Suppliers.memoizeWithExpiration(
+            supplier, Long.MAX_VALUE, TimeUnit.NANOSECONDS);
+      }
+    };
+    testSupplierThreadSafe(memoizer);
+  }
+
+  @GwtIncompatible("Thread")
+
+  public void testMemoizedSupplierThreadSafe() throws Throwable {
+    Function<Supplier<Boolean>, Supplier<Boolean>> memoizer =
+        new Function<Supplier<Boolean>, Supplier<Boolean>>() {
+      @Override public Supplier<Boolean> apply(Supplier<Boolean> supplier) {
+        return Suppliers.memoize(supplier);
+      }
+    };
+    testSupplierThreadSafe(memoizer);
+  }
+
+  @GwtIncompatible("Thread")
+  public void testSupplierThreadSafe(
+      Function<Supplier<Boolean>, Supplier<Boolean>> memoizer)
+      throws Throwable {
+    final AtomicInteger count = new AtomicInteger(0);
+    final AtomicReference<Throwable> thrown =
+        new AtomicReference<Throwable>(null);
+    final int numThreads = 3;
+    final Thread[] threads = new Thread[numThreads];
+    final long timeout = TimeUnit.SECONDS.toNanos(60);
+
+    final Supplier<Boolean> supplier = new Supplier<Boolean>() {
+      boolean isWaiting(Thread thread) {
+        switch (thread.getState()) {
+          case BLOCKED:
+          case WAITING:
+          case TIMED_WAITING:
+          return true;
+          default:
+          return false;
+        }
+      }
+
+      int waitingThreads() {
+        int waitingThreads = 0;
+        for (Thread thread : threads) {
+          if (isWaiting(thread)) {
+            waitingThreads++;
+          }
+        }
+        return waitingThreads;
+      }
+
+      @Override
+      public Boolean get() {
+        // Check that this method is called exactly once, by the first
+        // thread to synchronize.
+        long t0 = System.nanoTime();
+        while (waitingThreads() != numThreads - 1) {
+          if (System.nanoTime() - t0 > timeout) {
+            thrown.set(new TimeoutException(
+                "timed out waiting for other threads to block" +
+                " synchronizing on supplier"));
+            break;
+          }
+          Thread.yield();
+        }
+        count.getAndIncrement();
+        return Boolean.TRUE;
+      }
+    };
+
+    final Supplier<Boolean> memoizedSupplier = memoizer.apply(supplier);
+
+    for (int i = 0; i < numThreads; i++) {
+      threads[i] = new Thread() {
+        @Override public void run() {
+          assertSame(Boolean.TRUE, memoizedSupplier.get());
+        }
+      };
+    }
+    for (Thread t : threads) {
+      t.start();
+    }
+    for (Thread t : threads) {
+      t.join();
+    }
+
+    if (thrown.get() != null) {
+      throw thrown.get();
+    }
+    assertEquals(1, count.get());
+  }
+
+  @GwtIncompatible("Thread")
+
+  public void testSynchronizedSupplierThreadSafe()
+      throws InterruptedException {
+    final Supplier<Integer> nonThreadSafe = new Supplier<Integer>() {
+      int counter = 0;
+      @Override
+      public Integer get() {
+        int nextValue = counter + 1;
+        Thread.yield();
+        counter = nextValue;
+        return counter;
+      }
+    };
+
+    final int numThreads = 10;
+    final int iterations = 1000;
+    Thread[] threads = new Thread[numThreads];
+    for (int i = 0; i < numThreads; i++) {
+      threads[i] = new Thread() {
+        @Override public void run() {
+          for (int j = 0; j < iterations; j++) {
+            Suppliers.synchronizedSupplier(nonThreadSafe).get();
+          }
+        }
+      };
+    }
+    for (Thread t : threads) {
+      t.start();
+    }
+    for (Thread t : threads) {
+      t.join();
+    }
+
+    assertEquals(numThreads * iterations + 1, (int) nonThreadSafe.get());
+  }
+
+  public void testSupplierFunction() {
+    Supplier<Integer> supplier = Suppliers.ofInstance(14);
+    Function<Supplier<Integer>, Integer> supplierFunction =
+        Suppliers.supplierFunction();
+
+    assertEquals(14, (int) supplierFunction.apply(supplier));
+  }
+
+  @GwtIncompatible("SerializationTester")
+  public void testSerialization() {
+    assertEquals(
+        Integer.valueOf(5), reserialize(Suppliers.ofInstance(5)).get());
+    assertEquals(Integer.valueOf(5), reserialize(Suppliers.compose(
+        Functions.identity(), Suppliers.ofInstance(5))).get());
+    assertEquals(Integer.valueOf(5),
+        reserialize(Suppliers.memoize(Suppliers.ofInstance(5))).get());
+    assertEquals(Integer.valueOf(5),
+        reserialize(Suppliers.memoizeWithExpiration(
+            Suppliers.ofInstance(5), 30, TimeUnit.SECONDS)).get());
+    assertEquals(Integer.valueOf(5), reserialize(
+        Suppliers.synchronizedSupplier(Suppliers.ofInstance(5))).get());
+  }
+
+  @GwtIncompatible("NullPointerTest")
+  public void testNullPointers() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.testAllPublicStaticMethods(Suppliers.class);
+  }
+}
diff --git a/guava-tests/test/com/google/common/base/ThrowablesTest.java b/guava-tests/test/com/google/common/base/ThrowablesTest.java
new file mode 100644
index 0000000..1abd1ff
--- /dev/null
+++ b/guava-tests/test/com/google/common/base/ThrowablesTest.java
@@ -0,0 +1,533 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base;
+
+import static com.google.common.base.Throwables.getStackTraceAsString;
+import static java.util.Arrays.asList;
+import static java.util.regex.Pattern.quote;
+
+import com.google.common.collect.Iterables;
+import com.google.common.testing.NullPointerTester;
+
+import junit.framework.TestCase;
+
+import java.io.FileNotFoundException;
+import java.util.List;
+
+/**
+ * Unit test for {@link Throwables}.
+ *
+ * @author Kevin Bourrillion 
+ */
+@SuppressWarnings("serial") // this warning is silly for exceptions in tests 
+public class ThrowablesTest extends TestCase {
+  public void testPropagateIfPossible_NoneDeclared_NoneThrown() {
+    Sample sample = new Sample() {
+      @Override public void noneDeclared() {
+        try {
+          methodThatDoesntThrowAnything();
+        } catch (Throwable t) {
+          Throwables.propagateIfPossible(t);
+          throw new SomeChainingException(t);
+        }
+      }
+    };
+
+    // Expect no exception to be thrown
+    sample.noneDeclared();
+  }
+
+  public void testPropagateIfPossible_NoneDeclared_UncheckedThrown() {
+    Sample sample = new Sample() {
+      @Override public void noneDeclared() {
+        try {
+          methodThatThrowsUnchecked();
+        } catch (Throwable t) {
+          Throwables.propagateIfPossible(t);
+          throw new SomeChainingException(t);
+        }
+      }
+    };
+
+    // Expect the unchecked exception to propagate as-is
+    try {
+      sample.noneDeclared();
+      fail();
+    } catch (SomeUncheckedException expected) {
+    }
+  }
+
+  public void testPropagateIfPossible_NoneDeclared_UndeclaredThrown() {
+    Sample sample = new Sample() {
+      @Override public void noneDeclared() {
+        try {
+          methodThatThrowsUndeclaredChecked();
+        } catch (Throwable t) {
+          Throwables.propagateIfPossible(t);
+          throw new SomeChainingException(t);
+        }
+      }
+    };
+
+    // Expect the undeclared exception to have been chained inside another
+    try {
+      sample.noneDeclared();
+      fail();
+    } catch (SomeChainingException expected) {
+    }
+  }
+
+  public void testPropagateIfPossible_OneDeclared_NoneThrown()
+      throws SomeCheckedException {
+    Sample sample = new Sample() {
+      @Override public void oneDeclared() throws SomeCheckedException {
+        try {
+          methodThatDoesntThrowAnything();
+        } catch (Throwable t) {
+          // yes, this block is never reached, but for purposes of illustration
+          // we're keeping it the same in each test
+          Throwables.propagateIfPossible(t, SomeCheckedException.class);
+          throw new SomeChainingException(t);
+        }
+      }
+    };
+
+    // Expect no exception to be thrown
+    sample.oneDeclared();
+  }
+
+  public void testPropagateIfPossible_OneDeclared_UncheckedThrown()
+      throws SomeCheckedException {
+    Sample sample = new Sample() {
+      @Override public void oneDeclared() throws SomeCheckedException {
+        try {
+          methodThatThrowsUnchecked();
+        } catch (Throwable t) {
+          Throwables.propagateIfPossible(t, SomeCheckedException.class);
+          throw new SomeChainingException(t);
+        }
+      }
+    };
+
+    // Expect the unchecked exception to propagate as-is
+    try {
+      sample.oneDeclared();
+      fail();
+    } catch (SomeUncheckedException expected) {
+    }
+  }
+
+  public void testPropagateIfPossible_OneDeclared_CheckedThrown() {
+    Sample sample = new Sample() {
+      @Override public void oneDeclared() throws SomeCheckedException {
+        try {
+          methodThatThrowsChecked();
+        } catch (Throwable t) {
+          Throwables.propagateIfPossible(t, SomeCheckedException.class);
+          throw new SomeChainingException(t);
+        }
+      }
+    };
+
+    // Expect the checked exception to propagate as-is
+    try {
+      sample.oneDeclared();
+      fail();
+    } catch (SomeCheckedException expected) {
+    }
+  }
+
+  public void testPropagateIfPossible_OneDeclared_UndeclaredThrown()
+      throws SomeCheckedException {
+    Sample sample = new Sample() {
+      @Override public void oneDeclared() throws SomeCheckedException {
+        try {
+          methodThatThrowsUndeclaredChecked();
+        } catch (Throwable t) {
+          Throwables.propagateIfPossible(t, SomeCheckedException.class);
+          throw new SomeChainingException(t);
+        }
+      }
+    };
+
+    // Expect the undeclared exception to have been chained inside another
+    try {
+      sample.oneDeclared();
+      fail();
+    } catch (SomeChainingException expected) {
+    }
+  }
+
+  public void testPropagateIfPossible_TwoDeclared_NoneThrown()
+      throws SomeCheckedException, SomeOtherCheckedException {
+    Sample sample = new Sample() {
+      @Override public void twoDeclared() throws SomeCheckedException,
+          SomeOtherCheckedException {
+        try {
+          methodThatDoesntThrowAnything();
+        } catch (Throwable t) {
+          Throwables.propagateIfPossible(t, SomeCheckedException.class,
+              SomeOtherCheckedException.class);
+          throw new SomeChainingException(t);
+        }
+      }
+    };
+
+    // Expect no exception to be thrown
+    sample.twoDeclared();
+  }
+
+  public void testPropagateIfPossible_TwoDeclared_UncheckedThrown()
+      throws SomeCheckedException, SomeOtherCheckedException {
+    Sample sample = new Sample() {
+      @Override public void twoDeclared() throws SomeCheckedException,
+          SomeOtherCheckedException {
+        try {
+          methodThatThrowsUnchecked();
+        } catch (Throwable t) {
+          Throwables.propagateIfPossible(t, SomeCheckedException.class,
+              SomeOtherCheckedException.class);
+          throw new SomeChainingException(t);
+        }
+      }
+    };
+
+    // Expect the unchecked exception to propagate as-is
+    try {
+      sample.twoDeclared();
+      fail();
+    } catch (SomeUncheckedException expected) {
+    }
+  }
+
+  public void testPropagateIfPossible_TwoDeclared_CheckedThrown()
+      throws SomeOtherCheckedException {
+    Sample sample = new Sample() {
+      @Override public void twoDeclared() throws SomeCheckedException,
+          SomeOtherCheckedException {
+        try {
+          methodThatThrowsChecked();
+        } catch (Throwable t) {
+          Throwables.propagateIfPossible(t, SomeCheckedException.class,
+              SomeOtherCheckedException.class);
+          throw new SomeChainingException(t);
+        }
+      }
+    };
+
+    // Expect the checked exception to propagate as-is
+    try {
+      sample.twoDeclared();
+      fail();
+    } catch (SomeCheckedException expected) {
+    }
+  }
+
+  public void testPropagateIfPossible_TwoDeclared_OtherCheckedThrown()
+      throws SomeCheckedException {
+    Sample sample = new Sample() {
+      @Override public void twoDeclared() throws SomeCheckedException,
+          SomeOtherCheckedException {
+        try {
+          methodThatThrowsOtherChecked();
+        } catch (Throwable t) {
+          Throwables.propagateIfPossible(t, SomeCheckedException.class,
+              SomeOtherCheckedException.class);
+          throw new SomeChainingException(t);
+        }
+      }
+    };
+
+    // Expect the checked exception to propagate as-is
+    try {
+      sample.twoDeclared();
+      fail();
+    } catch (SomeOtherCheckedException expected) {
+    }
+  }
+
+  public void testPropageIfPossible_null() throws SomeCheckedException {
+    Throwables.propagateIfPossible(null);
+    Throwables.propagateIfPossible(null, SomeCheckedException.class);
+    Throwables.propagateIfPossible(null, SomeCheckedException.class,
+        SomeUncheckedException.class);
+  }
+
+  public void testPropagate_NoneDeclared_NoneThrown() {
+    Sample sample = new Sample() {
+      @Override public void noneDeclared() {
+        try {
+          methodThatDoesntThrowAnything();
+        } catch (Throwable t) {
+          throw Throwables.propagate(t);
+        }
+      }
+    };
+
+    // Expect no exception to be thrown
+    sample.noneDeclared();
+  }
+
+  public void testPropagate_NoneDeclared_UncheckedThrown() {
+    Sample sample = new Sample() {
+      @Override public void noneDeclared() {
+        try {
+          methodThatThrowsUnchecked();
+        } catch (Throwable t) {
+          throw Throwables.propagate(t);
+        }
+      }
+    };
+
+    // Expect the unchecked exception to propagate as-is
+    try {
+      sample.noneDeclared();
+      fail();
+    } catch (SomeUncheckedException expected) {
+    }
+  }
+
+  public void testPropagate_NoneDeclared_ErrorThrown() {
+    Sample sample = new Sample() {
+      @Override public void noneDeclared() {
+        try {
+          methodThatThrowsError();
+        } catch (Throwable t) {
+          throw Throwables.propagate(t);
+        }
+      }
+    };
+
+    // Expect the error to propagate as-is
+    try {
+      sample.noneDeclared();
+      fail();
+    } catch (SomeError expected) {
+    }
+  }
+
+  public void testPropagate_NoneDeclared_CheckedThrown() {
+    Sample sample = new Sample() {
+      @Override public void noneDeclared() {
+        try {
+          methodThatThrowsChecked();
+        } catch (Throwable t) {
+          throw Throwables.propagate(t);
+        }
+      }
+    };
+
+    // Expect the undeclared exception to have been chained inside another
+    try {
+      sample.noneDeclared();
+      fail();
+    } catch (RuntimeException expected) {
+      assertTrue(expected.getCause() instanceof SomeCheckedException);
+    }
+  }
+
+  public void testPropagateIfInstanceOf_NoneThrown()
+      throws SomeCheckedException {
+    Sample sample = new Sample() {
+      @Override public void oneDeclared() throws SomeCheckedException {
+        try {
+          methodThatDoesntThrowAnything();
+        } catch (Throwable t) {
+          Throwables.propagateIfInstanceOf(t, SomeCheckedException.class);
+          throw Throwables.propagate(t);
+        }
+      }
+    };
+
+    // Expect no exception to be thrown
+    sample.oneDeclared();
+  }
+
+  public void testPropagateIfInstanceOf_DeclaredThrown() {
+    Sample sample = new Sample() {
+      @Override public void oneDeclared() throws SomeCheckedException {
+        try {
+          methodThatThrowsChecked();
+        } catch (Throwable t) {
+          Throwables.propagateIfInstanceOf(t, SomeCheckedException.class);
+          throw Throwables.propagate(t);
+        }
+      }
+    };
+
+    // Expect declared exception to be thrown as-is
+    try {
+      sample.oneDeclared();
+      fail();
+    } catch (SomeCheckedException e) {
+    }
+  }
+
+  public void testPropagateIfInstanceOf_UncheckedThrown()
+      throws SomeCheckedException {
+    Sample sample = new Sample() {
+      @Override public void oneDeclared() throws SomeCheckedException {
+        try {
+          methodThatThrowsUnchecked();
+        } catch (Throwable t) {
+          Throwables.propagateIfInstanceOf(t, SomeCheckedException.class);
+          throw Throwables.propagate(t);
+        }
+      }
+    };
+
+    // Expect unchecked exception to be thrown as-is
+    try {
+      sample.oneDeclared();
+      fail();
+    } catch (SomeUncheckedException e) {
+    }
+  }
+
+  public void testPropagateIfInstanceOf_UndeclaredThrown()
+      throws SomeCheckedException {
+    Sample sample = new Sample() {
+      @Override public void oneDeclared() throws SomeCheckedException {
+        try {
+          methodThatThrowsOtherChecked();
+        } catch (Throwable t) {
+          Throwables.propagateIfInstanceOf(t, SomeCheckedException.class);
+          throw Throwables.propagate(t);
+        }
+      }
+    };
+
+    // Expect undeclared exception wrapped by RuntimeException to be thrown
+    try {
+      sample.oneDeclared();
+      fail();
+    } catch (RuntimeException e) {
+      assertTrue(e.getCause() instanceof SomeOtherCheckedException);
+    }
+  }
+
+  public void testPropageIfInstanceOf_null() throws SomeCheckedException {
+    Throwables.propagateIfInstanceOf(null, SomeCheckedException.class);
+  }
+
+  public void testGetRootCause_NoCause() {
+    SomeCheckedException exception = new SomeCheckedException();
+    assertSame(exception, Throwables.getRootCause(exception));
+  }
+
+  public void testGetRootCause_SingleWrapped() {
+    SomeCheckedException cause = new SomeCheckedException();
+    SomeChainingException exception = new SomeChainingException(cause);
+    assertSame(cause, Throwables.getRootCause(exception));
+  }
+
+  public void testGetRootCause_DoubleWrapped() {
+    SomeCheckedException cause = new SomeCheckedException();
+    SomeChainingException exception =
+        new SomeChainingException(new SomeChainingException(cause));
+    assertSame(cause, Throwables.getRootCause(exception));
+  }
+
+  private static class SomeThrowable extends Throwable {}  
+  private static class SomeError extends Error {}
+  private static class SomeCheckedException extends Exception {}
+  private static class SomeOtherCheckedException extends Exception {}
+  private static class SomeUncheckedException extends RuntimeException {}
+  private static class SomeUndeclaredCheckedException extends Exception {}
+  private static class SomeChainingException extends RuntimeException {
+    public SomeChainingException(Throwable cause) {
+      super(cause);
+    }
+  }
+
+  static class Sample {
+    void noneDeclared() {}
+    /*
+     * Subclasses of Sample will define methods with these signatures that throw
+     * these exceptions, so we must declare them in the throws clause here.
+     * Eclipse doesn't think being thrown from a subclass's non-public,
+     * non-protected method with the same signature counts as being "used."
+     */
+    @SuppressWarnings("unused")
+    void oneDeclared() throws SomeCheckedException {}
+    @SuppressWarnings("unused")
+    void twoDeclared() throws SomeCheckedException, SomeOtherCheckedException {}
+  }
+
+  static void methodThatDoesntThrowAnything() {}
+  static void methodThatThrowsError() {
+    throw new SomeError();
+  }
+  static void methodThatThrowsUnchecked() {
+    throw new SomeUncheckedException();
+  }
+  static void methodThatThrowsChecked() throws SomeCheckedException {
+    throw new SomeCheckedException();
+  }
+  static void methodThatThrowsOtherChecked() throws SomeOtherCheckedException {
+    throw new SomeOtherCheckedException();
+  }
+  static void methodThatThrowsUndeclaredChecked()
+      throws SomeUndeclaredCheckedException {
+    throw new SomeUndeclaredCheckedException();
+  }
+
+  public void testGetStackTraceAsString() {
+    class StackTraceException extends Exception {
+      StackTraceException(String message) {
+        super(message);
+      }
+    }
+
+    StackTraceException e = new StackTraceException("my message");
+
+    String firstLine = quote(e.getClass().getName() + ": " + e.getMessage());
+    String secondLine = "\\s*at " + ThrowablesTest.class.getName() + "\\..*";
+    String moreLines = "(?:.*\n?)*";
+    String expected = firstLine + "\n" + secondLine + "\n" + moreLines;
+    assertTrue(getStackTraceAsString(e).matches(expected));
+  }
+
+  public void testGetCausalChain() {
+    FileNotFoundException fnfe = new FileNotFoundException();
+    IllegalArgumentException iae = new IllegalArgumentException(fnfe);
+    RuntimeException re = new RuntimeException(iae);
+    IllegalStateException ex = new IllegalStateException(re);
+
+    assertEquals(asList(ex, re, iae, fnfe), Throwables.getCausalChain(ex));
+    assertSame(fnfe, Iterables.getOnlyElement(Throwables.getCausalChain(fnfe)));
+    try {
+      Throwables.getCausalChain(null);
+      fail("Should have throw NPE");
+    } catch (NullPointerException expected) {
+    }
+
+    List<Throwable> causes = Throwables.getCausalChain(ex);
+    try {
+      causes.add(new RuntimeException());
+      fail("List should be unmodifiable");
+    } catch (UnsupportedOperationException expected) {
+    }
+  }
+
+  public void testNullPointers() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.setDefault(Throwable.class, new SomeCheckedException());
+    tester.setDefault(Class.class, SomeCheckedException.class);
+    tester.testAllPublicStaticMethods(Throwables.class);
+  }
+}
diff --git a/guava-tests/test/com/google/common/base/ToStringHelperTest.java b/guava-tests/test/com/google/common/base/ToStringHelperTest.java
new file mode 100644
index 0000000..32ba19f
--- /dev/null
+++ b/guava-tests/test/com/google/common/base/ToStringHelperTest.java
@@ -0,0 +1,332 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.collect.ImmutableMap;
+
+import junit.framework.TestCase;
+
+import java.util.Arrays;
+import java.util.Map;
+
+/**
+ * Tests for {@link Objects#toStringHelper(Object)}.
+ *
+ * @author Jason Lee
+ */
+@GwtCompatible
+public class ToStringHelperTest extends TestCase {
+
+  @GwtIncompatible("Class names are obfuscated in GWT")
+  public void testConstructor_instance() {
+    String toTest = Objects.toStringHelper(this).toString();
+    assertEquals("ToStringHelperTest{}", toTest);
+  }
+
+  public void testConstructorLenient_instance() {
+    String toTest = Objects.toStringHelper(this).toString();
+    assertTrue(toTest, toTest.matches(".*\\{\\}"));
+  }
+
+  @GwtIncompatible("Class names are obfuscated in GWT")
+  public void testConstructor_innerClass() {
+    String toTest = Objects.toStringHelper(new TestClass()).toString();
+    assertEquals("TestClass{}", toTest);
+  }
+
+  public void testConstructorLenient_innerClass() {
+    String toTest = Objects.toStringHelper(new TestClass()).toString();
+    assertTrue(toTest, toTest.matches(".*\\{\\}"));
+  }
+
+  @GwtIncompatible("Class names are obfuscated in GWT")
+  public void testConstructor_anonymousClass() {
+    String toTest = Objects.toStringHelper(new Object() {}).toString();
+    assertEquals("{}", toTest);
+  }
+
+  public void testConstructorLenient_anonymousClass() {
+    String toTest = Objects.toStringHelper(new Object() {}).toString();
+    assertTrue(toTest, toTest.matches(".*\\{\\}"));
+  }
+
+  @GwtIncompatible("Class names are obfuscated in GWT")
+  public void testConstructor_classObject() {
+    String toTest = Objects.toStringHelper(TestClass.class).toString();
+    assertEquals("TestClass{}", toTest);
+  }
+
+  public void testConstructorLenient_classObject() {
+    String toTest = Objects.toStringHelper(TestClass.class).toString();
+    assertTrue(toTest, toTest.matches(".*\\{\\}"));
+  }
+
+  public void testConstructor_stringObject() {
+    String toTest = Objects.toStringHelper("FooBar").toString();
+    assertEquals("FooBar{}", toTest);
+  }
+
+  @GwtIncompatible("Class names are obfuscated in GWT")
+  public void testToStringHelper_localInnerClass() {
+    // Local inner classes have names ending like "Outer.$1Inner"
+    class LocalInnerClass {}
+    String toTest = Objects.toStringHelper(new LocalInnerClass()).toString();
+    assertEquals("LocalInnerClass{}", toTest);
+  }
+
+  public void testToStringHelperLenient_localInnerClass() {
+    class LocalInnerClass {}
+    String toTest = Objects.toStringHelper(new LocalInnerClass()).toString();
+    assertTrue(toTest, toTest.matches(".*\\{\\}"));
+  }
+
+  @GwtIncompatible("Class names are obfuscated in GWT")
+  public void testToStringHelper_localInnerNestedClass() {
+    class LocalInnerClass {
+      class LocalInnerNestedClass {}
+    }
+    String toTest = Objects.toStringHelper(new LocalInnerClass().new LocalInnerNestedClass())
+        .toString();
+    assertEquals("LocalInnerNestedClass{}", toTest);
+  }
+
+  public void testToStringHelperLenient_localInnerNestedClass() {
+    class LocalInnerClass {
+      class LocalInnerNestedClass {}
+    }
+    String toTest = Objects.toStringHelper(new LocalInnerClass().new LocalInnerNestedClass())
+        .toString();
+    assertTrue(toTest, toTest.matches(".*\\{\\}"));
+  }
+
+  @GwtIncompatible("Class names are obfuscated in GWT")
+  public void testToStringHelper_moreThanNineAnonymousClasses() {
+    // The nth anonymous class has a name ending like "Outer.$n"
+    Object o1 = new Object() {};
+    Object o2 = new Object() {};
+    Object o3 = new Object() {};
+    Object o4 = new Object() {};
+    Object o5 = new Object() {};
+    Object o6 = new Object() {};
+    Object o7 = new Object() {};
+    Object o8 = new Object() {};
+    Object o9 = new Object() {};
+    Object o10 = new Object() {};
+    String toTest = Objects.toStringHelper(o10).toString();
+    assertEquals("{}", toTest);
+  }
+
+  public void testToStringHelperLenient_moreThanNineAnonymousClasses() {
+    // The nth anonymous class has a name ending like "Outer.$n"
+    Object o1 = new Object() {};
+    Object o2 = new Object() {};
+    Object o3 = new Object() {};
+    Object o4 = new Object() {};
+    Object o5 = new Object() {};
+    Object o6 = new Object() {};
+    Object o7 = new Object() {};
+    Object o8 = new Object() {};
+    Object o9 = new Object() {};
+    Object o10 = new Object() {};
+    String toTest = Objects.toStringHelper(o10).toString();
+    assertTrue(toTest, toTest.matches(".*\\{\\}"));
+  }
+
+  // all remaining test are on an inner class with various fields
+  @GwtIncompatible("Class names are obfuscated in GWT")
+  public void testToString_oneField() {
+    String toTest = Objects.toStringHelper(new TestClass())
+        .add("field1", "Hello")
+        .toString();
+    assertEquals("TestClass{field1=Hello}", toTest);
+  }
+
+  @GwtIncompatible("Class names are obfuscated in GWT")
+  public void testToString_oneIntegerField() {
+    String toTest = Objects.toStringHelper(new TestClass())
+        .add("field1", new Integer(42))
+        .toString();
+    assertEquals("TestClass{field1=42}", toTest);
+  }
+
+  @GwtIncompatible("Class names are obfuscated in GWT")
+  public void testToString_nullInteger() {
+    String toTest = Objects.toStringHelper(new TestClass())
+        .add("field1", (Integer) null)
+        .toString();
+    assertEquals("TestClass{field1=null}", toTest);
+  }
+
+  public void testToStringLenient_oneField() {
+    String toTest = Objects.toStringHelper(new TestClass())
+        .add("field1", "Hello")
+        .toString();
+    assertTrue(toTest, toTest.matches(".*\\{field1\\=Hello\\}"));
+  }
+
+  public void testToStringLenient_oneIntegerField() {
+    String toTest = Objects.toStringHelper(new TestClass())
+        .add("field1", new Integer(42))
+        .toString();
+    assertTrue(toTest, toTest.matches(".*\\{field1\\=42\\}"));
+  }
+
+  public void testToStringLenient_nullInteger() {
+    String toTest = Objects.toStringHelper(new TestClass())
+        .add("field1", (Integer) null)
+        .toString();
+    assertTrue(toTest, toTest.matches(".*\\{field1\\=null\\}"));
+  }
+
+  @GwtIncompatible("Class names are obfuscated in GWT")
+  public void testToString_complexFields() {
+
+    Map<String, Integer> map = ImmutableMap.<String, Integer>builder()
+        .put("abc", 1)
+        .put("def", 2)
+        .put("ghi", 3)
+        .build();
+    String toTest = Objects.toStringHelper(new TestClass())
+        .add("field1", "This is string.")
+        .add("field2", Arrays.asList("abc", "def", "ghi"))
+        .add("field3", map)
+        .toString();
+    final String expected = "TestClass{"
+        + "field1=This is string., field2=[abc, def, ghi], field3={abc=1, def=2, ghi=3}}";
+
+    assertEquals(expected, toTest);
+  }
+
+  public void testToStringLenient_complexFields() {
+
+    Map<String, Integer> map = ImmutableMap.<String, Integer>builder()
+        .put("abc", 1)
+        .put("def", 2)
+        .put("ghi", 3)
+        .build();
+    String toTest = Objects.toStringHelper(new TestClass())
+        .add("field1", "This is string.")
+        .add("field2", Arrays.asList("abc", "def", "ghi"))
+        .add("field3", map)
+        .toString();
+    final String expectedRegex = ".*\\{"
+        + "field1\\=This is string\\., "
+        + "field2\\=\\[abc, def, ghi\\], "
+        + "field3=\\{abc\\=1, def\\=2, ghi\\=3\\}\\}";
+
+    assertTrue(toTest, toTest.matches(expectedRegex));
+  }
+
+  public void testToString_addWithNullName() {
+    Objects.ToStringHelper helper = Objects.toStringHelper(new TestClass());
+    try {
+      helper.add(null, "Hello");
+      fail("No exception was thrown.");
+    } catch (NullPointerException expected) {
+    }
+  }
+
+  @GwtIncompatible("Class names are obfuscated in GWT")
+  public void testToString_addWithNullValue() {
+    final String result = Objects.toStringHelper(new TestClass())
+        .add("Hello", null)
+        .toString();
+
+    assertEquals("TestClass{Hello=null}", result);
+  }
+
+  public void testToStringLenient_addWithNullValue() {
+    final String result = Objects.toStringHelper(new TestClass())
+        .add("Hello", null)
+        .toString();
+    assertTrue(result, result.matches(".*\\{Hello\\=null\\}"));
+  }
+
+  @GwtIncompatible("Class names are obfuscated in GWT")
+  public void testToString_ToStringTwice() {
+    Objects.ToStringHelper helper = Objects.toStringHelper(new TestClass())
+        .add("field1", 1)
+        .addValue("value1")
+        .add("field2", "value2");
+    final String expected = "TestClass{field1=1, value1, field2=value2}";
+
+    assertEquals(expected, helper.toString());
+    // Call toString again
+    assertEquals(expected, helper.toString());
+
+    // Make sure the cached value is reset when we modify the helper at all
+    final String expected2 = "TestClass{field1=1, value1, field2=value2, 2}";
+    helper.addValue(2);
+    assertEquals(expected2, helper.toString());
+  }
+
+  @GwtIncompatible("Class names are obfuscated in GWT")
+  public void testToString_addValue() {
+    String toTest = Objects.toStringHelper(new TestClass())
+        .add("field1", 1)
+        .addValue("value1")
+        .add("field2", "value2")
+        .addValue(2)
+        .toString();
+    final String expected = "TestClass{field1=1, value1, field2=value2, 2}";
+
+    assertEquals(expected, toTest);
+  }
+
+  public void testToStringLenient_addValue() {
+    String toTest = Objects.toStringHelper(new TestClass())
+        .add("field1", 1)
+        .addValue("value1")
+        .add("field2", "value2")
+        .addValue(2)
+        .toString();
+    final String expected = ".*\\{field1\\=1, value1, field2\\=value2, 2\\}";
+
+    assertTrue(toTest, toTest.matches(expected));
+  }
+
+  @GwtIncompatible("Class names are obfuscated in GWT")
+  public void testToString_addValueWithNullValue() {
+    final String result = Objects.toStringHelper(new TestClass())
+        .addValue(null)
+        .addValue("Hello")
+        .addValue(null)
+        .toString();
+    final String expected = "TestClass{null, Hello, null}";
+
+    assertEquals(expected, result);
+  }
+
+  public void testToStringLenient_addValueWithNullValue() {
+    final String result = Objects.toStringHelper(new TestClass())
+        .addValue(null)
+        .addValue("Hello")
+        .addValue(null)
+        .toString();
+    final String expected = ".*\\{null, Hello, null\\}";
+
+    assertTrue(result, result.matches(expected));
+  }
+
+  /**
+   * Test class for testing formatting of inner classes.
+   */
+  private static class TestClass {}
+
+}
diff --git a/guava-tests/test/com/google/common/cache/AbstractCacheTest.java b/guava-tests/test/com/google/common/cache/AbstractCacheTest.java
new file mode 100644
index 0000000..46e2a9e
--- /dev/null
+++ b/guava-tests/test/com/google/common/cache/AbstractCacheTest.java
@@ -0,0 +1,178 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.cache;
+
+import com.google.common.cache.AbstractCache.SimpleStatsCounter;
+import com.google.common.cache.AbstractCache.StatsCounter;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Lists;
+
+import junit.framework.TestCase;
+
+import java.util.List;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.atomic.AtomicReference;
+
+/**
+ * Unit test for {@link AbstractCache}.
+ *
+ * @author Charles Fry
+ */
+public class AbstractCacheTest extends TestCase {
+
+  public void testGetAllPresent() {
+    final AtomicReference<Object> valueRef = new AtomicReference<Object>();
+    Cache<Object, Object> cache = new AbstractCache<Object, Object>() {
+      @Override
+      public Object getIfPresent(Object key) {
+        return valueRef.get();
+      }
+
+      @Override
+      public Object get(Object key) throws ExecutionException {
+        throw new UnsupportedOperationException();
+      }
+
+    };
+
+    assertNull(cache.getIfPresent(new Object()));
+
+    Object newValue = new Object();
+    valueRef.set(newValue);
+    assertSame(newValue, cache.getIfPresent(new Object()));
+  }
+
+  public void testInvalidateAll() {
+    final List<Object> invalidated = Lists.newArrayList();
+    Cache<Integer, Integer> cache = new AbstractCache<Integer, Integer>() {
+      @Override
+      public Integer getIfPresent(Integer key) {
+        throw new UnsupportedOperationException();
+      }
+
+      @Override
+      public Integer get(Integer key) throws ExecutionException {
+        throw new UnsupportedOperationException();
+      }
+
+      @Override
+      public void invalidate(Object key) {
+        invalidated.add(key);
+      }
+    };
+
+    List<Integer> toInvalidate = ImmutableList.of(1, 2, 3, 4);
+    cache.invalidateAll(toInvalidate);
+    assertEquals(toInvalidate, invalidated);
+  }
+
+  public void testEmptySimpleStats() {
+    StatsCounter counter = new SimpleStatsCounter();
+    CacheStats stats = counter.snapshot();
+    assertEquals(0, stats.requestCount());
+    assertEquals(0, stats.hitCount());
+    assertEquals(1.0, stats.hitRate());
+    assertEquals(0, stats.missCount());
+    assertEquals(0.0, stats.missRate());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(0, stats.loadCount());
+    assertEquals(0, stats.totalLoadTime());
+    assertEquals(0.0, stats.averageLoadPenalty());
+    assertEquals(0, stats.evictionCount());
+  }
+
+  public void testSingleSimpleStats() {
+    StatsCounter counter = new SimpleStatsCounter();
+    for (int i = 0; i < 11; i++) {
+      counter.recordHits(1);
+    }
+    for (int i = 0; i < 13; i++) {
+      counter.recordLoadSuccess(i);
+    }
+    for (int i = 0; i < 17; i++) {
+      counter.recordLoadException(i);
+    }
+    for (int i = 0; i < 23; i++) {
+      counter.recordMisses(1);
+    }
+    for (int i = 0; i < 27; i++) {
+      counter.recordEviction();
+    }
+    CacheStats stats = counter.snapshot();
+    int requestCount = 11 + 23;
+    assertEquals(requestCount, stats.requestCount());
+    assertEquals(11, stats.hitCount());
+    assertEquals(11.0/requestCount, stats.hitRate());
+    int missCount = 23;
+    assertEquals(missCount, stats.missCount());
+    assertEquals(((double) missCount)/requestCount, stats.missRate());
+    assertEquals(13, stats.loadSuccessCount());
+    assertEquals(17, stats.loadExceptionCount());
+    assertEquals(13 + 17, stats.loadCount());
+    assertEquals(214, stats.totalLoadTime());
+    assertEquals(214.0/(13 + 17), stats.averageLoadPenalty());
+    assertEquals(27, stats.evictionCount());
+  }
+
+  public void testSimpleStatsIncrementBy() {
+    long totalLoadTime = 0;
+
+    SimpleStatsCounter counter1 = new SimpleStatsCounter();
+    for (int i = 0; i < 11; i++) {
+      counter1.recordHits(1);
+    }
+    for (int i = 0; i < 13; i++) {
+      counter1.recordLoadSuccess(i);
+      totalLoadTime += i;
+    }
+    for (int i = 0; i < 17; i++) {
+      counter1.recordLoadException(i);
+      totalLoadTime += i;
+    }
+    for (int i = 0; i < 19; i++) {
+      counter1.recordMisses(1);
+    }
+    for (int i = 0; i < 23; i++) {
+      counter1.recordEviction();
+    }
+
+    SimpleStatsCounter counter2 = new SimpleStatsCounter();
+    for (int i = 0; i < 27; i++) {
+      counter2.recordHits(1);
+    }
+    for (int i = 0; i < 31; i++) {
+      counter2.recordLoadSuccess(i);
+      totalLoadTime += i;
+    }
+    for (int i = 0; i < 37; i++) {
+      counter2.recordLoadException(i);
+      totalLoadTime += i;
+    }
+    for (int i = 0; i < 41; i++) {
+      counter2.recordMisses(1);
+    }
+    for (int i = 0; i < 43; i++) {
+      counter2.recordEviction();
+    }
+
+    counter1.incrementBy(counter2);
+    assertEquals(new CacheStats(38, 60, 44, 54, totalLoadTime, 66),
+        counter1.snapshot());
+  }
+
+}
diff --git a/guava-tests/test/com/google/common/cache/AbstractLoadingCacheTest.java b/guava-tests/test/com/google/common/cache/AbstractLoadingCacheTest.java
new file mode 100644
index 0000000..1fa1b87
--- /dev/null
+++ b/guava-tests/test/com/google/common/cache/AbstractLoadingCacheTest.java
@@ -0,0 +1,157 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.cache;
+
+import com.google.common.util.concurrent.ExecutionError;
+import com.google.common.util.concurrent.UncheckedExecutionException;
+
+import junit.framework.TestCase;
+
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.atomic.AtomicReference;
+
+/**
+ * Unit test for {@link AbstractLoadingCache}.
+ *
+ * @author Charles Fry
+ */
+public class AbstractLoadingCacheTest extends TestCase {
+
+  public void testGetUnchecked_checked() {
+    final Exception cause = new Exception();
+    final AtomicReference<Object> valueRef = new AtomicReference<Object>();
+    LoadingCache<Object, Object> cache = new AbstractLoadingCache<Object, Object>() {
+      @Override
+      public Object get(Object key) throws ExecutionException {
+        Object v = valueRef.get();
+        if (v == null) {
+          throw new ExecutionException(cause);
+        }
+        return v;
+      }
+
+      @Override
+      public Object getIfPresent(Object key) {
+        return valueRef.get();
+      }
+    };
+
+    try {
+      cache.getUnchecked(new Object());
+      fail();
+    } catch (UncheckedExecutionException expected) {
+      assertEquals(cause, expected.getCause());
+    }
+
+    Object newValue = new Object();
+    valueRef.set(newValue);
+    assertSame(newValue, cache.getUnchecked(new Object()));
+  }
+
+  public void testGetUnchecked_unchecked() {
+    final RuntimeException cause = new RuntimeException();
+    final AtomicReference<Object> valueRef = new AtomicReference<Object>();
+    LoadingCache<Object, Object> cache = new AbstractLoadingCache<Object, Object>() {
+      @Override
+      public Object get(Object key) throws ExecutionException {
+        Object v = valueRef.get();
+        if (v == null) {
+          throw new ExecutionException(cause);
+        }
+        return v;
+      }
+
+      @Override
+      public Object getIfPresent(Object key) {
+        return valueRef.get();
+      }
+    };
+
+    try {
+      cache.getUnchecked(new Object());
+      fail();
+    } catch (UncheckedExecutionException expected) {
+      assertEquals(cause, expected.getCause());
+    }
+
+    Object newValue = new Object();
+    valueRef.set(newValue);
+    assertSame(newValue, cache.getUnchecked(new Object()));
+  }
+
+  public void testGetUnchecked_error() {
+    final Error cause = new Error();
+    final AtomicReference<Object> valueRef = new AtomicReference<Object>();
+    LoadingCache<Object, Object> cache = new AbstractLoadingCache<Object, Object>() {
+      @Override
+      public Object get(Object key) throws ExecutionException {
+        Object v = valueRef.get();
+        if (v == null) {
+          throw new ExecutionError(cause);
+        }
+        return v;
+      }
+
+      @Override
+      public Object getIfPresent(Object key) {
+        return valueRef.get();
+      }
+    };
+
+    try {
+      cache.getUnchecked(new Object());
+      fail();
+    } catch (ExecutionError expected) {
+      assertEquals(cause, expected.getCause());
+    }
+
+    Object newValue = new Object();
+    valueRef.set(newValue);
+    assertSame(newValue, cache.getUnchecked(new Object()));
+  }
+
+  public void testGetUnchecked_otherThrowable() {
+    final Throwable cause = new Throwable();
+    final AtomicReference<Object> valueRef = new AtomicReference<Object>();
+    LoadingCache<Object, Object> cache = new AbstractLoadingCache<Object, Object>() {
+      @Override
+      public Object get(Object key) throws ExecutionException {
+        Object v = valueRef.get();
+        if (v == null) {
+          throw new ExecutionException(cause);
+        }
+        return v;
+      }
+
+      @Override
+      public Object getIfPresent(Object key) {
+        return valueRef.get();
+      }
+    };
+
+    try {
+      cache.getUnchecked(new Object());
+      fail();
+    } catch (UncheckedExecutionException expected) {
+      assertEquals(cause, expected.getCause());
+    }
+
+    Object newValue = new Object();
+    valueRef.set(newValue);
+    assertSame(newValue, cache.getUnchecked(new Object()));
+  }
+}
diff --git a/guava-tests/test/com/google/common/cache/CacheBuilderFactory.java b/guava-tests/test/com/google/common/cache/CacheBuilderFactory.java
new file mode 100644
index 0000000..865faf8
--- /dev/null
+++ b/guava-tests/test/com/google/common/cache/CacheBuilderFactory.java
@@ -0,0 +1,217 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.cache;
+
+import com.google.common.base.Function;
+import com.google.common.base.Objects;
+import com.google.common.base.Optional;
+import com.google.common.base.Preconditions;
+import com.google.common.cache.LocalCache.Strength;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
+
+import java.util.List;
+import java.util.Set;
+import java.util.concurrent.TimeUnit;
+
+import javax.annotation.Nullable;
+
+/**
+ * Helper class for creating {@link CacheBuilder} instances with all combinations of several sets of
+ * parameters.
+ *
+ * @author mike nonemacher
+ */
+class CacheBuilderFactory {
+  // Default values contain only 'null', which means don't call the CacheBuilder method (just give
+  // the CacheBuilder default).
+  private Set<Integer> concurrencyLevels = Sets.newHashSet((Integer) null);
+  private Set<Integer> initialCapacities = Sets.newHashSet((Integer) null);
+  private Set<Integer> maximumSizes = Sets.newHashSet((Integer) null);
+  private Set<DurationSpec> expireAfterWrites = Sets.newHashSet((DurationSpec) null);
+  private Set<DurationSpec> expireAfterAccesses = Sets.newHashSet((DurationSpec) null);
+  private Set<DurationSpec> refreshes = Sets.newHashSet((DurationSpec) null);
+  private Set<Strength> keyStrengths = Sets.newHashSet((Strength) null);
+  private Set<Strength> valueStrengths = Sets.newHashSet((Strength) null);
+
+  CacheBuilderFactory withConcurrencyLevels(Set<Integer> concurrencyLevels) {
+    this.concurrencyLevels = Sets.newLinkedHashSet(concurrencyLevels);
+    return this;
+  }
+
+  CacheBuilderFactory withInitialCapacities(Set<Integer> initialCapacities) {
+    this.initialCapacities = Sets.newLinkedHashSet(initialCapacities);
+    return this;
+  }
+
+  CacheBuilderFactory withMaximumSizes(Set<Integer> maximumSizes) {
+    this.maximumSizes = Sets.newLinkedHashSet(maximumSizes);
+    return this;
+  }
+
+  CacheBuilderFactory withExpireAfterWrites(Set<DurationSpec> durations) {
+    this.expireAfterWrites = Sets.newLinkedHashSet(durations);
+    return this;
+  }
+
+  CacheBuilderFactory withExpireAfterAccesses(Set<DurationSpec> durations) {
+    this.expireAfterAccesses = Sets.newLinkedHashSet(durations);
+    return this;
+  }
+
+  CacheBuilderFactory withRefreshes(Set<DurationSpec> durations) {
+    this.refreshes = Sets.newLinkedHashSet(durations);
+    return this;
+  }
+
+  CacheBuilderFactory withKeyStrengths(Set<Strength> keyStrengths) {
+    this.keyStrengths = Sets.newLinkedHashSet(keyStrengths);
+    Preconditions.checkArgument(!this.keyStrengths.contains(Strength.SOFT));
+    return this;
+  }
+
+  CacheBuilderFactory withValueStrengths(Set<Strength> valueStrengths) {
+    this.valueStrengths = Sets.newLinkedHashSet(valueStrengths);
+    return this;
+  }
+
+  Iterable<CacheBuilder<Object, Object>> buildAllPermutations() {
+    @SuppressWarnings("unchecked")
+    Iterable<List<Object>> combinations = buildCartesianProduct(concurrencyLevels,
+        initialCapacities, maximumSizes, expireAfterWrites, expireAfterAccesses, refreshes,
+        keyStrengths, valueStrengths);
+    return Iterables.transform(combinations,
+        new Function<List<Object>, CacheBuilder<Object, Object>>() {
+          @Override public CacheBuilder<Object, Object> apply(List<Object> combination) {
+            return createCacheBuilder(
+                (Integer) combination.get(0),
+                (Integer) combination.get(1),
+                (Integer) combination.get(2),
+                (DurationSpec) combination.get(3),
+                (DurationSpec) combination.get(4),
+                (DurationSpec) combination.get(5),
+                (Strength) combination.get(6),
+                (Strength) combination.get(7));
+          }
+        });
+  }
+
+  private static final Function<Object, Optional<?>> NULLABLE_TO_OPTIONAL =
+      new Function<Object, Optional<?>>() {
+        @Override public Optional<?> apply(@Nullable Object obj) {
+          return Optional.fromNullable(obj);
+        }
+      };
+
+  private static final Function<Optional<?>, Object> OPTIONAL_TO_NULLABLE =
+      new Function<Optional<?>, Object>() {
+        @Override public Object apply(Optional<?> optional) {
+          return optional.orNull();
+        }
+      };
+
+  /**
+   * Sets.cartesianProduct doesn't allow sets that contain null, but we want null to mean
+   * "don't call the associated CacheBuilder method" - that is, get the default CacheBuilder
+   * behavior. This method wraps the elements in the input sets (which may contain null) as
+   * Optionals, calls Sets.cartesianProduct with those, then transforms the result to unwrap
+   * the Optionals. 
+   */
+  private Iterable<List<Object>> buildCartesianProduct(Set<?>... sets) {
+    List<Set<Optional<?>>> optionalSets = Lists.newArrayListWithExpectedSize(sets.length);
+    for (Set<?> set : sets) {
+      Set<Optional<?>> optionalSet =
+          Sets.newLinkedHashSet(Iterables.transform(set, NULLABLE_TO_OPTIONAL));
+      optionalSets.add(optionalSet);
+    }
+    Set<List<Optional<?>>> cartesianProduct = Sets.cartesianProduct(optionalSets);
+    return Iterables.transform(cartesianProduct,
+        new Function<List<Optional<?>>, List<Object>>() {
+          @Override public List<Object> apply(List<Optional<?>> objs) {
+            return Lists.transform(objs, OPTIONAL_TO_NULLABLE);
+          }
+        });
+  }
+
+  private CacheBuilder<Object, Object> createCacheBuilder(
+      Integer concurrencyLevel, Integer initialCapacity, Integer maximumSize,
+      DurationSpec expireAfterWrite, DurationSpec expireAfterAccess, DurationSpec refresh,
+      Strength keyStrength, Strength valueStrength) {
+
+    CacheBuilder<Object, Object> builder = CacheBuilder.newBuilder();
+    if (concurrencyLevel != null) {
+      builder.concurrencyLevel(concurrencyLevel);
+    }
+    if (initialCapacity != null) {
+      builder.initialCapacity(initialCapacity);
+    }
+    if (maximumSize != null) {
+      builder.maximumSize(maximumSize);
+    }
+    if (expireAfterWrite != null) {
+      builder.expireAfterWrite(expireAfterWrite.duration, expireAfterWrite.unit);
+    }
+    if (expireAfterAccess != null) {
+      builder.expireAfterAccess(expireAfterAccess.duration, expireAfterAccess.unit);
+    }
+    if (refresh != null) {
+      builder.refreshAfterWrite(refresh.duration, refresh.unit);
+    }
+    if (keyStrength != null) {
+      builder.setKeyStrength(keyStrength);
+    }
+    if (valueStrength != null) {
+      builder.setValueStrength(valueStrength);
+    }
+    return builder;
+  }
+
+  static class DurationSpec {
+    private final long duration;
+    private final TimeUnit unit;
+
+    private DurationSpec(long duration, TimeUnit unit) {
+      this.duration = duration;
+      this.unit = unit;
+    }
+
+    public static DurationSpec of(long duration, TimeUnit unit) {
+      return new DurationSpec(duration, unit);
+    }
+
+    @Override
+    public int hashCode() {
+      return Objects.hashCode(duration, unit);
+    }
+
+    @Override
+    public boolean equals(Object o) {
+      if (o instanceof DurationSpec) {
+        DurationSpec that = (DurationSpec) o;
+        return unit.toNanos(duration) == that.unit.toNanos(that.duration);
+      }
+      return false;
+    }
+
+    @Override
+    public String toString() {
+      return Objects.toStringHelper(this)
+          .add("duration", duration)
+          .add("unit", unit)
+          .toString();
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/cache/CacheBuilderTest.java b/guava-tests/test/com/google/common/cache/CacheBuilderTest.java
new file mode 100644
index 0000000..31b917d
--- /dev/null
+++ b/guava-tests/test/com/google/common/cache/CacheBuilderTest.java
@@ -0,0 +1,636 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.cache;
+
+import static com.google.common.cache.TestingCacheLoaders.constantLoader;
+import static com.google.common.cache.TestingCacheLoaders.identityLoader;
+import static com.google.common.cache.TestingRemovalListeners.countingRemovalListener;
+import static com.google.common.cache.TestingRemovalListeners.nullRemovalListener;
+import static com.google.common.cache.TestingRemovalListeners.queuingRemovalListener;
+import static com.google.common.cache.TestingWeighers.constantWeigher;
+import static java.util.concurrent.TimeUnit.NANOSECONDS;
+import static java.util.concurrent.TimeUnit.SECONDS;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.base.Ticker;
+import com.google.common.cache.TestingRemovalListeners.CountingRemovalListener;
+import com.google.common.cache.TestingRemovalListeners.QueuingRemovalListener;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
+import com.google.common.testing.NullPointerTester;
+
+import junit.framework.TestCase;
+
+import java.util.Map;
+import java.util.Random;
+import java.util.Set;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ * Unit tests for CacheBuilder.
+ */
+@GwtCompatible(emulated = true)
+public class CacheBuilderTest extends TestCase {
+
+  @GwtIncompatible("removalListener")
+  public void testNewBuilder() {
+    CacheLoader<Object, Integer> loader = constantLoader(1);
+
+    LoadingCache<String, Integer> cache = CacheBuilder.newBuilder()
+        .removalListener(countingRemovalListener())
+        .build(loader);
+
+    assertEquals(Integer.valueOf(1), cache.getUnchecked("one"));
+    assertEquals(1, cache.size());
+  }
+
+  public void testInitialCapacity_negative() {
+    CacheBuilder<Object, Object> builder = new CacheBuilder<Object, Object>();
+    try {
+      builder.initialCapacity(-1);
+      fail();
+    } catch (IllegalArgumentException expected) {}
+  }
+
+  public void testInitialCapacity_setTwice() {
+    CacheBuilder<Object, Object> builder = new CacheBuilder<Object, Object>().initialCapacity(16);
+    try {
+      // even to the same value is not allowed
+      builder.initialCapacity(16);
+      fail();
+    } catch (IllegalStateException expected) {}
+  }
+
+  @GwtIncompatible("CacheTesting")
+  public void testInitialCapacity_small() {
+    LoadingCache<?, ?> cache = CacheBuilder.newBuilder()
+        .initialCapacity(5)
+        .build(identityLoader());
+    LocalCache<?, ?> map = CacheTesting.toLocalCache(cache);
+
+    assertEquals(4, map.segments.length);
+    assertEquals(2, map.segments[0].table.length());
+    assertEquals(2, map.segments[1].table.length());
+    assertEquals(2, map.segments[2].table.length());
+    assertEquals(2, map.segments[3].table.length());
+  }
+
+  @GwtIncompatible("CacheTesting")
+  public void testInitialCapacity_smallest() {
+    LoadingCache<?, ?> cache = CacheBuilder.newBuilder()
+        .initialCapacity(0)
+        .build(identityLoader());
+    LocalCache<?, ?> map = CacheTesting.toLocalCache(cache);
+
+    assertEquals(4, map.segments.length);
+    // 1 is as low as it goes, not 0. it feels dirty to know this/test this.
+    assertEquals(1, map.segments[0].table.length());
+    assertEquals(1, map.segments[1].table.length());
+    assertEquals(1, map.segments[2].table.length());
+    assertEquals(1, map.segments[3].table.length());
+  }
+
+  public void testInitialCapacity_large() {
+    CacheBuilder.newBuilder().initialCapacity(Integer.MAX_VALUE);
+    // that the builder didn't blow up is enough;
+    // don't actually create this monster!
+  }
+
+  public void testConcurrencyLevel_zero() {
+    CacheBuilder<Object, Object> builder = new CacheBuilder<Object, Object>();
+    try {
+      builder.concurrencyLevel(0);
+      fail();
+    } catch (IllegalArgumentException expected) {}
+  }
+
+  public void testConcurrencyLevel_setTwice() {
+    CacheBuilder<Object, Object> builder = new CacheBuilder<Object, Object>().concurrencyLevel(16);
+    try {
+      // even to the same value is not allowed
+      builder.concurrencyLevel(16);
+      fail();
+    } catch (IllegalStateException expected) {}
+  }
+
+  @GwtIncompatible("CacheTesting")
+  public void testConcurrencyLevel_small() {
+    LoadingCache<?, ?> cache = CacheBuilder.newBuilder()
+        .concurrencyLevel(1)
+        .build(identityLoader());
+    LocalCache<?, ?> map = CacheTesting.toLocalCache(cache);
+    assertEquals(1, map.segments.length);
+  }
+
+  public void testConcurrencyLevel_large() {
+    CacheBuilder.newBuilder().concurrencyLevel(Integer.MAX_VALUE);
+    // don't actually build this beast
+  }
+
+  public void testMaximumSize_negative() {
+    CacheBuilder<Object, Object> builder = new CacheBuilder<Object, Object>();
+    try {
+      builder.maximumSize(-1);
+      fail();
+    } catch (IllegalArgumentException expected) {}
+  }
+
+  public void testMaximumSize_setTwice() {
+    CacheBuilder<Object, Object> builder = new CacheBuilder<Object, Object>().maximumSize(16);
+    try {
+      // even to the same value is not allowed
+      builder.maximumSize(16);
+      fail();
+    } catch (IllegalStateException expected) {}
+  }
+
+  @GwtIncompatible("maximumWeight")
+  public void testMaximumSize_andWeight() {
+    CacheBuilder<Object, Object> builder = new CacheBuilder<Object, Object>().maximumSize(16);
+    try {
+      builder.maximumWeight(16);
+      fail();
+    } catch (IllegalStateException expected) {}
+  }
+
+  @GwtIncompatible("maximumWeight")
+  public void testMaximumWeight_negative() {
+    CacheBuilder<Object, Object> builder = new CacheBuilder<Object, Object>();
+    try {
+      builder.maximumWeight(-1);
+      fail();
+    } catch (IllegalArgumentException expected) {}
+  }
+
+  @GwtIncompatible("maximumWeight")
+  public void testMaximumWeight_setTwice() {
+    CacheBuilder<Object, Object> builder = new CacheBuilder<Object, Object>().maximumWeight(16);
+    try {
+      // even to the same value is not allowed
+      builder.maximumWeight(16);
+      fail();
+    } catch (IllegalStateException expected) {}
+    try {
+      builder.maximumSize(16);
+      fail();
+    } catch (IllegalStateException expected) {}
+  }
+
+  @GwtIncompatible("maximumWeight")
+  public void testMaximumWeight_withoutWeigher() {
+    CacheBuilder<Object, Object> builder = new CacheBuilder<Object, Object>()
+        .maximumWeight(1);
+    try {
+      builder.build(identityLoader());
+      fail();
+    } catch (IllegalStateException expected) {}
+  }
+
+  @GwtIncompatible("weigher")
+  public void testWeigher_withoutMaximumWeight() {
+    CacheBuilder<Object, Object> builder = new CacheBuilder<Object, Object>()
+        .weigher(constantWeigher(42));
+    try {
+      builder.build(identityLoader());
+      fail();
+    } catch (IllegalStateException expected) {}
+  }
+
+  @GwtIncompatible("weigher")
+  public void testWeigher_withMaximumSize() {
+    try {
+      CacheBuilder<Object, Object> builder = new CacheBuilder<Object, Object>()
+          .weigher(constantWeigher(42))
+          .maximumSize(1);
+      fail();
+    } catch (IllegalStateException expected) {}
+    try {
+      CacheBuilder<Object, Object> builder = new CacheBuilder<Object, Object>()
+          .maximumSize(1)
+          .weigher(constantWeigher(42));
+      fail();
+    } catch (IllegalStateException expected) {}
+  }
+
+  @GwtIncompatible("weakKeys")
+  public void testKeyStrengthSetTwice() {
+    CacheBuilder<Object, Object> builder1 = new CacheBuilder<Object, Object>().weakKeys();
+    try {
+      builder1.weakKeys();
+      fail();
+    } catch (IllegalStateException expected) {}
+  }
+
+  @GwtIncompatible("weakValues")
+  public void testValueStrengthSetTwice() {
+    CacheBuilder<Object, Object> builder1 = new CacheBuilder<Object, Object>().weakValues();
+    try {
+      builder1.weakValues();
+      fail();
+    } catch (IllegalStateException expected) {}
+    try {
+      builder1.softValues();
+      fail();
+    } catch (IllegalStateException expected) {}
+
+    CacheBuilder<Object, Object> builder2 = new CacheBuilder<Object, Object>().softValues();
+    try {
+      builder2.softValues();
+      fail();
+    } catch (IllegalStateException expected) {}
+    try {
+      builder2.weakValues();
+      fail();
+    } catch (IllegalStateException expected) {}
+  }
+
+  public void testTimeToLive_negative() {
+    CacheBuilder<Object, Object> builder = new CacheBuilder<Object, Object>();
+    try {
+      builder.expireAfterWrite(-1, SECONDS);
+      fail();
+    } catch (IllegalArgumentException expected) {}
+  }
+
+  public void testTimeToLive_small() {
+    CacheBuilder.newBuilder()
+        .expireAfterWrite(1, NANOSECONDS)
+        .build(identityLoader());
+    // well, it didn't blow up.
+  }
+
+  public void testTimeToLive_setTwice() {
+    CacheBuilder<Object, Object> builder =
+        new CacheBuilder<Object, Object>().expireAfterWrite(3600, SECONDS);
+    try {
+      // even to the same value is not allowed
+      builder.expireAfterWrite(3600, SECONDS);
+      fail();
+    } catch (IllegalStateException expected) {}
+  }
+
+  @GwtIncompatible("expireAfterAccess")
+  public void testTimeToIdle_negative() {
+    CacheBuilder<Object, Object> builder = new CacheBuilder<Object, Object>();
+    try {
+      builder.expireAfterAccess(-1, SECONDS);
+      fail();
+    } catch (IllegalArgumentException expected) {}
+  }
+
+  @GwtIncompatible("expireAfterAccess")
+  public void testTimeToIdle_small() {
+    CacheBuilder.newBuilder()
+        .expireAfterAccess(1, NANOSECONDS)
+        .build(identityLoader());
+    // well, it didn't blow up.
+  }
+
+  @GwtIncompatible("expireAfterAccess")
+  public void testTimeToIdle_setTwice() {
+    CacheBuilder<Object, Object> builder =
+        new CacheBuilder<Object, Object>().expireAfterAccess(3600, SECONDS);
+    try {
+      // even to the same value is not allowed
+      builder.expireAfterAccess(3600, SECONDS);
+      fail();
+    } catch (IllegalStateException expected) {}
+  }
+
+  @GwtIncompatible("expireAfterAccess")
+  public void testTimeToIdleAndToLive() {
+    CacheBuilder.newBuilder()
+        .expireAfterWrite(1, NANOSECONDS)
+        .expireAfterAccess(1, NANOSECONDS)
+        .build(identityLoader());
+    // well, it didn't blow up.
+  }
+
+  @GwtIncompatible("refreshAfterWrite")
+  public void testRefresh_zero() {
+    CacheBuilder<Object, Object> builder = new CacheBuilder<Object, Object>();
+    try {
+      builder.refreshAfterWrite(0, SECONDS);
+      fail();
+    } catch (IllegalArgumentException expected) {}
+  }
+
+  @GwtIncompatible("refreshAfterWrite")
+  public void testRefresh_setTwice() {
+    CacheBuilder<Object, Object> builder =
+        new CacheBuilder<Object, Object>().refreshAfterWrite(3600, SECONDS);
+    try {
+      // even to the same value is not allowed
+      builder.refreshAfterWrite(3600, SECONDS);
+      fail();
+    } catch (IllegalStateException expected) {}
+  }
+
+  @GwtIncompatible("ticker")
+  public void testTicker_setTwice() {
+    Ticker testTicker = Ticker.systemTicker();
+    CacheBuilder<Object, Object> builder =
+        new CacheBuilder<Object, Object>().ticker(testTicker);
+    try {
+      // even to the same instance is not allowed
+      builder.ticker(testTicker);
+      fail();
+    } catch (IllegalStateException expected) {}
+  }
+
+  @GwtIncompatible("removalListener")
+  public void testRemovalListener_setTwice() {
+    RemovalListener<Object, Object> testListener = nullRemovalListener();
+    CacheBuilder<Object, Object> builder =
+        new CacheBuilder<Object, Object>().removalListener(testListener);
+    try {
+      // even to the same instance is not allowed
+      builder = builder.removalListener(testListener);
+      fail();
+    } catch (IllegalStateException expected) {}
+  }
+
+  @GwtIncompatible("removalListener")
+  public void testNullCache() {
+    CountingRemovalListener<Object, Object> listener = countingRemovalListener();
+    LoadingCache<Object, Object> nullCache = new CacheBuilder<Object, Object>()
+        .maximumSize(0)
+        .removalListener(listener)
+        .build(identityLoader());
+    assertEquals(0, nullCache.size());
+    Object key = new Object();
+    assertSame(key, nullCache.getUnchecked(key));
+    assertEquals(1, listener.getCount());
+    assertEquals(0, nullCache.size());
+    CacheTesting.checkEmpty(nullCache.asMap());
+  }
+
+  @GwtIncompatible("removalListener")
+
+  public void testRemovalNotification_clear() throws InterruptedException {
+    // If a clear() happens while a computation is pending, we should not get a removal
+    // notification.
+
+    final AtomicBoolean shouldWait = new AtomicBoolean(false);
+    final CountDownLatch computingLatch = new CountDownLatch(1);
+    CacheLoader<String, String> computingFunction = new CacheLoader<String, String>() {
+      @Override public String load(String key) throws InterruptedException {
+        if (shouldWait.get()) {
+          computingLatch.await();
+        }
+        return key;
+      }
+    };
+    QueuingRemovalListener<String, String> listener = queuingRemovalListener();
+
+    final LoadingCache<String, String> cache = CacheBuilder.newBuilder()
+        .concurrencyLevel(1)
+        .removalListener(listener)
+        .build(computingFunction);
+
+    // seed the map, so its segment's count > 0
+    cache.getUnchecked("a");
+    shouldWait.set(true);
+
+    final CountDownLatch computationStarted = new CountDownLatch(1);
+    final CountDownLatch computationComplete = new CountDownLatch(1);
+    new Thread(new Runnable() {
+      @Override public void run() {
+        computationStarted.countDown();
+        cache.getUnchecked("b");
+        computationComplete.countDown();
+      }
+    }).start();
+
+    // wait for the computingEntry to be created
+    computationStarted.await();
+    cache.invalidateAll();
+    // let the computation proceed
+    computingLatch.countDown();
+    // don't check cache.size() until we know the get("b") call is complete
+    computationComplete.await();
+
+    // At this point, the listener should be holding the seed value (a -> a), and the map should
+    // contain the computed value (b -> b), since the clear() happened before the computation
+    // completed.
+    assertEquals(1, listener.size());
+    RemovalNotification<String, String> notification = listener.remove();
+    assertEquals("a", notification.getKey());
+    assertEquals("a", notification.getValue());
+    assertEquals(1, cache.size());
+    assertEquals("b", cache.getUnchecked("b"));
+  }
+
+  // "Basher tests", where we throw a bunch of stuff at a LoadingCache and check basic invariants.
+
+  /**
+   * This is a less carefully-controlled version of {@link #testRemovalNotification_clear} - this is
+   * a black-box test that tries to create lots of different thread-interleavings, and asserts that
+   * each computation is affected by a call to {@code clear()} (and therefore gets passed to the
+   * removal listener), or else is not affected by the {@code clear()} (and therefore exists in the
+   * cache afterward).
+   */
+  @GwtIncompatible("removalListener")
+
+  public void testRemovalNotification_clear_basher() throws InterruptedException {
+    // If a clear() happens close to the end of computation, one of two things should happen:
+    // - computation ends first: the removal listener is called, and the cache does not contain the
+    //   key/value pair
+    // - clear() happens first: the removal listener is not called, and the cache contains the pair
+    AtomicBoolean computationShouldWait = new AtomicBoolean();
+    CountDownLatch computationLatch = new CountDownLatch(1);
+    QueuingRemovalListener<String, String> listener = queuingRemovalListener();
+    final LoadingCache <String, String> cache = CacheBuilder.newBuilder()
+        .removalListener(listener)
+        .concurrencyLevel(20)
+        .build(
+            new DelayingIdentityLoader<String>(computationShouldWait, computationLatch));
+
+    int nThreads = 100;
+    int nTasks = 1000;
+    int nSeededEntries = 100;
+    Set<String> expectedKeys = Sets.newHashSetWithExpectedSize(nTasks + nSeededEntries);
+    // seed the map, so its segments have a count>0; otherwise, clear() won't visit the in-progress
+    // entries
+    for (int i = 0; i < nSeededEntries; i++) {
+      String s = "b" + i;
+      cache.getUnchecked(s);
+      expectedKeys.add(s);
+    }
+    computationShouldWait.set(true);
+
+    final AtomicInteger computedCount = new AtomicInteger();
+    ExecutorService threadPool = Executors.newFixedThreadPool(nThreads);
+    final CountDownLatch tasksFinished = new CountDownLatch(nTasks);
+    for (int i = 0; i < nTasks; i++) {
+      final String s = "a" + i;
+      threadPool.submit(new Runnable() {
+        @Override public void run() {
+          cache.getUnchecked(s);
+          computedCount.incrementAndGet();
+          tasksFinished.countDown();
+        }
+      });
+      expectedKeys.add(s);
+    }
+
+    computationLatch.countDown();
+    // let some computations complete
+    while (computedCount.get() < nThreads) {
+      Thread.yield();
+    }
+    cache.invalidateAll();
+    tasksFinished.await();
+
+    // Check all of the removal notifications we received: they should have had correctly-associated
+    // keys and values. (An earlier bug saw removal notifications for in-progress computations,
+    // which had real keys with null values.)
+    Map<String, String> removalNotifications = Maps.newHashMap();
+    for (RemovalNotification<String, String> notification : listener) {
+      removalNotifications.put(notification.getKey(), notification.getValue());
+      assertEquals("Unexpected key/value pair passed to removalListener",
+          notification.getKey(), notification.getValue());
+    }
+
+    // All of the seed values should have been visible, so we should have gotten removal
+    // notifications for all of them.
+    for (int i = 0; i < nSeededEntries; i++) {
+      assertEquals("b" + i, removalNotifications.get("b" + i));
+    }
+
+    // Each of the values added to the map should either still be there, or have seen a removal
+    // notification.
+    assertEquals(expectedKeys, Sets.union(cache.asMap().keySet(), removalNotifications.keySet()));
+    assertTrue(Sets.intersection(cache.asMap().keySet(), removalNotifications.keySet()).isEmpty());
+  }
+
+  /**
+   * Calls get() repeatedly from many different threads, and tests that all of the removed entries
+   * (removed because of size limits or expiration) trigger appropriate removal notifications.
+   */
+  @GwtIncompatible("removalListener")
+
+  public void testRemovalNotification_get_basher() throws InterruptedException {
+    int nTasks = 3000;
+    int nThreads = 100;
+    final int getsPerTask = 1000;
+    final int nUniqueKeys = 10000;
+    final Random random = new Random(); // Randoms.insecureRandom();
+
+    QueuingRemovalListener<String, String> removalListener = queuingRemovalListener();
+    final AtomicInteger computeCount = new AtomicInteger();
+    final AtomicInteger exceptionCount = new AtomicInteger();
+    final AtomicInteger computeNullCount = new AtomicInteger();
+    CacheLoader<String, String> countingIdentityLoader =
+        new CacheLoader<String, String>() {
+          @Override public String load(String key) throws InterruptedException {
+            int behavior = random.nextInt(4);
+            if (behavior == 0) { // throw an exception
+              exceptionCount.incrementAndGet();
+              throw new RuntimeException("fake exception for test");
+            } else if (behavior == 1) { // return null
+              computeNullCount.incrementAndGet();
+              return null;
+            } else if (behavior == 2) { // slight delay before returning
+              Thread.sleep(5);
+              computeCount.incrementAndGet();
+              return key;
+            } else {
+              computeCount.incrementAndGet();
+              return key;
+            }
+          }
+        };
+    final LoadingCache<String, String> cache = CacheBuilder.newBuilder()
+        .concurrencyLevel(2)
+        .expireAfterWrite(100, TimeUnit.MILLISECONDS)
+        .removalListener(removalListener)
+        .maximumSize(5000)
+        .build(countingIdentityLoader);
+
+    ExecutorService threadPool = Executors.newFixedThreadPool(nThreads);
+    for (int i = 0; i < nTasks; i++) {
+      threadPool.submit(new Runnable() {
+        @Override public void run() {
+          for (int j = 0; j < getsPerTask; j++) {
+            try {
+              cache.getUnchecked("key" + random.nextInt(nUniqueKeys));
+            } catch (RuntimeException e) {
+            }
+          }
+        }
+      });
+    }
+
+    threadPool.shutdown();
+    threadPool.awaitTermination(300, TimeUnit.SECONDS);
+
+    // Since we're not doing any more cache operations, and the cache only expires/evicts when doing
+    // other operations, the cache and the removal queue won't change from this point on.
+
+    // Verify that each received removal notification was valid
+    for (RemovalNotification<String, String> notification : removalListener) {
+      assertEquals("Invalid removal notification", notification.getKey(), notification.getValue());
+    }
+
+    CacheStats stats = cache.stats();
+    assertEquals(removalListener.size(), stats.evictionCount());
+    assertEquals(computeCount.get(), stats.loadSuccessCount());
+    assertEquals(exceptionCount.get() + computeNullCount.get(), stats.loadExceptionCount());
+    // each computed value is still in the cache, or was passed to the removal listener
+    assertEquals(computeCount.get(), cache.size() + removalListener.size());
+  }
+
+  @GwtIncompatible("NullPointerTester")
+  public void testNullParameters() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    CacheBuilder<Object, Object> builder = new CacheBuilder<Object, Object>();
+    tester.testAllPublicInstanceMethods(builder);
+  }
+
+  @GwtIncompatible("CacheTesting")
+  public void testSizingDefaults() {
+    LoadingCache<?, ?> cache = CacheBuilder.newBuilder().build(identityLoader());
+    LocalCache<?, ?> map = CacheTesting.toLocalCache(cache);
+    assertEquals(4, map.segments.length); // concurrency level
+    assertEquals(4, map.segments[0].table.length()); // capacity / conc level
+  }
+
+  @GwtIncompatible("CountDownLatch")
+  static final class DelayingIdentityLoader<T> extends CacheLoader<T, T> {
+    private final AtomicBoolean shouldWait;
+    private final CountDownLatch delayLatch;
+
+    DelayingIdentityLoader(AtomicBoolean shouldWait, CountDownLatch delayLatch) {
+      this.shouldWait = shouldWait;
+      this.delayLatch = delayLatch;
+    }
+
+    @Override public T load(T key) throws InterruptedException {
+      if (shouldWait.get()) {
+        delayLatch.await();
+      }
+      return key;
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/cache/CacheEvictionTest.java b/guava-tests/test/com/google/common/cache/CacheEvictionTest.java
new file mode 100644
index 0000000..64e322e
--- /dev/null
+++ b/guava-tests/test/com/google/common/cache/CacheEvictionTest.java
@@ -0,0 +1,293 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.cache;
+
+import static com.google.common.cache.TestingCacheLoaders.identityLoader;
+import static com.google.common.cache.TestingRemovalListeners.countingRemovalListener;
+import static com.google.common.cache.TestingWeighers.constantWeigher;
+import static com.google.common.cache.TestingWeighers.intKeyWeigher;
+import static java.util.Arrays.asList;
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import com.google.common.cache.CacheTesting.Receiver;
+import com.google.common.cache.LocalCache.ReferenceEntry;
+import com.google.common.cache.TestingCacheLoaders.IdentityLoader;
+import com.google.common.cache.TestingRemovalListeners.CountingRemovalListener;
+
+import junit.framework.TestCase;
+
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Tests relating to cache eviction: what does and doesn't count toward maximumSize, what happens
+ * when maximumSize is reached, etc.
+ *
+ * @author mike nonemacher
+ */
+public class CacheEvictionTest extends TestCase {
+  static final int MAX_SIZE = 100;
+
+  public void testEviction_setMaxSegmentSize() {
+    IdentityLoader<Object> loader = identityLoader();
+    for (int i = 1; i < 1000; i++) {
+      LoadingCache<Object, Object> cache = CacheBuilder.newBuilder()
+          .maximumSize(i)
+          .build(loader);
+      assertEquals(i, CacheTesting.getTotalSegmentSize(cache));
+    }
+  }
+
+  public void testEviction_setMaxSegmentWeight() {
+    IdentityLoader<Object> loader = identityLoader();
+    for (int i = 1; i < 1000; i++) {
+      LoadingCache<Object, Object> cache = CacheBuilder.newBuilder()
+          .maximumWeight(i)
+          .weigher(constantWeigher(1))
+          .build(loader);
+      assertEquals(i, CacheTesting.getTotalSegmentSize(cache));
+    }
+  }
+
+  public void testEviction_maxSizeOneSegment() {
+    IdentityLoader<Integer> loader = identityLoader();
+    LoadingCache<Integer, Integer> cache = CacheBuilder.newBuilder()
+        .concurrencyLevel(1)
+        .maximumSize(MAX_SIZE)
+        .build(loader);
+    for (int i = 0; i < 2 * MAX_SIZE; i++) {
+      cache.getUnchecked(i);
+      assertEquals(Math.min(i + 1, MAX_SIZE), cache.size());
+    }
+
+    assertEquals(MAX_SIZE, cache.size());
+    CacheTesting.checkValidState(cache);
+  }
+
+  public void testEviction_maxWeightOneSegment() {
+    IdentityLoader<Integer> loader = identityLoader();
+    LoadingCache<Integer, Integer> cache = CacheBuilder.newBuilder()
+        .concurrencyLevel(1)
+        .maximumWeight(2 * MAX_SIZE)
+        .weigher(constantWeigher(2))
+        .build(loader);
+    for (int i = 0; i < 2 * MAX_SIZE; i++) {
+      cache.getUnchecked(i);
+      assertEquals(Math.min(i + 1, MAX_SIZE), cache.size());
+    }
+
+    assertEquals(MAX_SIZE, cache.size());
+    CacheTesting.checkValidState(cache);
+  }
+
+  public void testEviction_maxSize() {
+    CountingRemovalListener<Integer, Integer> removalListener = countingRemovalListener();
+    IdentityLoader<Integer> loader = identityLoader();
+    LoadingCache<Integer, Integer> cache = CacheBuilder.newBuilder()
+        .maximumSize(MAX_SIZE)
+        .removalListener(removalListener)
+        .build(loader);
+    for (int i = 0; i < 2 * MAX_SIZE; i++) {
+      cache.getUnchecked(i);
+      assertTrue(cache.size() <= MAX_SIZE);
+    }
+
+    assertEquals(MAX_SIZE, CacheTesting.accessQueueSize(cache));
+    assertEquals(MAX_SIZE, cache.size());
+    CacheTesting.processPendingNotifications(cache);
+    assertEquals(MAX_SIZE, removalListener.getCount());
+    CacheTesting.checkValidState(cache);
+  }
+
+  public void testEviction_maxWeight() {
+    CountingRemovalListener<Integer, Integer> removalListener = countingRemovalListener();
+    IdentityLoader<Integer> loader = identityLoader();
+    LoadingCache<Integer, Integer> cache = CacheBuilder.newBuilder()
+        .maximumWeight(2 * MAX_SIZE)
+        .weigher(constantWeigher(2))
+        .removalListener(removalListener)
+        .build(loader);
+    for (int i = 0; i < 2 * MAX_SIZE; i++) {
+      cache.getUnchecked(i);
+      assertTrue(cache.size() <= MAX_SIZE);
+    }
+
+    assertEquals(MAX_SIZE, CacheTesting.accessQueueSize(cache));
+    assertEquals(MAX_SIZE, cache.size());
+    CacheTesting.processPendingNotifications(cache);
+    assertEquals(MAX_SIZE, removalListener.getCount());
+    CacheTesting.checkValidState(cache);
+  }
+
+  public void testUpdateRecency_onGet() {
+    IdentityLoader<Integer> loader = identityLoader();
+    final LoadingCache<Integer, Integer> cache =
+        CacheBuilder.newBuilder().maximumSize(MAX_SIZE).build(loader);
+    CacheTesting.checkRecency(cache, MAX_SIZE,
+        new Receiver<ReferenceEntry<Integer, Integer>>() {
+          @Override
+          public void accept(ReferenceEntry<Integer, Integer> entry) {
+            cache.getUnchecked(entry.getKey());
+          }
+        });
+  }
+
+  public void testUpdateRecency_onInvalidate() {
+    IdentityLoader<Integer> loader = identityLoader();
+    final LoadingCache<Integer, Integer> cache = CacheBuilder.newBuilder()
+        .maximumSize(MAX_SIZE)
+        .concurrencyLevel(1)
+        .build(loader);
+    CacheTesting.checkRecency(cache, MAX_SIZE,
+        new Receiver<ReferenceEntry<Integer, Integer>>() {
+          @Override
+          public void accept(ReferenceEntry<Integer, Integer> entry) {
+            Integer key = entry.getKey();
+            cache.invalidate(key);
+          }
+        });
+  }
+
+  public void testEviction_lru() {
+    // test lru within a single segment
+    IdentityLoader<Integer> loader = identityLoader();
+    LoadingCache<Integer, Integer> cache = CacheBuilder.newBuilder()
+        .concurrencyLevel(1)
+        .maximumSize(10)
+        .build(loader);
+    CacheTesting.warmUp(cache, 0, 10);
+    Set<Integer> keySet = cache.asMap().keySet();
+    ASSERT.that(keySet).hasContentsAnyOrder(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
+
+    // re-order
+    getAll(cache, asList(0, 1, 2));
+    CacheTesting.drainRecencyQueues(cache);
+    ASSERT.that(keySet).hasContentsAnyOrder(3, 4, 5, 6, 7, 8, 9, 0, 1, 2);
+
+    // evict 3, 4, 5
+    getAll(cache, asList(10, 11, 12));
+    CacheTesting.drainRecencyQueues(cache);
+    ASSERT.that(keySet).hasContentsAnyOrder(6, 7, 8, 9, 0, 1, 2, 10, 11, 12);
+
+    // re-order
+    getAll(cache, asList(6, 7, 8));
+    CacheTesting.drainRecencyQueues(cache);
+    ASSERT.that(keySet).hasContentsAnyOrder(9, 0, 1, 2, 10, 11, 12, 6, 7, 8);
+
+    // evict 9, 0, 1
+    getAll(cache, asList(13, 14, 15));
+    CacheTesting.drainRecencyQueues(cache);
+    ASSERT.that(keySet).hasContentsAnyOrder(2, 10, 11, 12, 6, 7, 8, 13, 14, 15);
+  }
+
+  public void testEviction_weightedLru() {
+    // test weighted lru within a single segment
+    IdentityLoader<Integer> loader = identityLoader();
+    LoadingCache<Integer, Integer> cache = CacheBuilder.newBuilder()
+        .concurrencyLevel(1)
+        .maximumWeight(45)
+        .weigher(intKeyWeigher())
+        .build(loader);
+    CacheTesting.warmUp(cache, 0, 10);
+    Set<Integer> keySet = cache.asMap().keySet();
+    ASSERT.that(keySet).hasContentsAnyOrder(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
+
+    // re-order
+    getAll(cache, asList(0, 1, 2));
+    CacheTesting.drainRecencyQueues(cache);
+    ASSERT.that(keySet).hasContentsAnyOrder(3, 4, 5, 6, 7, 8, 9, 0, 1, 2);
+
+    // evict 3, 4, 5
+    getAll(cache, asList(10));
+    CacheTesting.drainRecencyQueues(cache);
+    ASSERT.that(keySet).hasContentsAnyOrder(6, 7, 8, 9, 0, 1, 2, 10);
+
+    // re-order
+    getAll(cache, asList(6, 7, 8));
+    CacheTesting.drainRecencyQueues(cache);
+    ASSERT.that(keySet).hasContentsAnyOrder(9, 0, 1, 2, 10, 6, 7, 8);
+
+    // evict 9, 1, 2, 10
+    getAll(cache, asList(15));
+    CacheTesting.drainRecencyQueues(cache);
+    ASSERT.that(keySet).hasContentsAnyOrder(0, 6, 7, 8, 15);
+
+    // fill empty space
+    getAll(cache, asList(9));
+    CacheTesting.drainRecencyQueues(cache);
+    ASSERT.that(keySet).hasContentsAnyOrder(0, 6, 7, 8, 15, 9);
+
+    // evict 6
+    getAll(cache, asList(1));
+    CacheTesting.drainRecencyQueues(cache);
+    ASSERT.that(keySet).hasContentsAnyOrder(0, 7, 8, 15, 9, 1);
+  }
+
+  public void testEviction_overweight() {
+    // test weighted lru within a single segment
+    IdentityLoader<Integer> loader = identityLoader();
+    LoadingCache<Integer, Integer> cache = CacheBuilder.newBuilder()
+        .concurrencyLevel(1)
+        .maximumWeight(45)
+        .weigher(intKeyWeigher())
+        .build(loader);
+    CacheTesting.warmUp(cache, 0, 10);
+    Set<Integer> keySet = cache.asMap().keySet();
+    ASSERT.that(keySet).hasContentsAnyOrder(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
+
+    // add an at-the-maximum-weight entry
+    getAll(cache, asList(45));
+    CacheTesting.drainRecencyQueues(cache);
+    ASSERT.that(keySet).hasContentsAnyOrder(0, 45);
+
+    // add an over-the-maximum-weight entry
+    getAll(cache, asList(46));
+    CacheTesting.drainRecencyQueues(cache);
+    ASSERT.that(keySet).hasContentsAnyOrder(0);
+  }
+
+  public void testEviction_invalidateAll() {
+    // test that .invalidateAll() resets total weight state correctly
+    IdentityLoader<Integer> loader = identityLoader();
+    LoadingCache<Integer, Integer> cache = CacheBuilder.newBuilder()
+        .concurrencyLevel(1)
+        .maximumSize(10)
+        .build(loader);
+
+    Set<Integer> keySet = cache.asMap().keySet();
+    ASSERT.that(keySet).isEmpty();
+
+    // add 0, 1, 2, 3, 4
+    getAll(cache, asList(0, 1, 2, 3, 4));
+    CacheTesting.drainRecencyQueues(cache);
+    ASSERT.that(keySet).hasContentsAnyOrder(0, 1, 2, 3, 4);
+
+    // invalidate all
+    cache.invalidateAll();
+    CacheTesting.drainRecencyQueues(cache);
+    ASSERT.that(keySet).isEmpty();
+
+    // add 5, 6, 7, 8, 9, 10, 11, 12
+    getAll(cache, asList(5, 6, 7, 8, 9, 10, 11, 12));
+    CacheTesting.drainRecencyQueues(cache);
+    ASSERT.that(keySet).hasContentsAnyOrder(5, 6, 7, 8, 9, 10, 11, 12);
+  }
+
+  private void getAll(LoadingCache<Integer, Integer> cache, List<Integer> keys) {
+    for (int i : keys) {
+      cache.getUnchecked(i);
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/cache/CacheExpirationTest.java b/guava-tests/test/com/google/common/cache/CacheExpirationTest.java
new file mode 100644
index 0000000..97677cf
--- /dev/null
+++ b/guava-tests/test/com/google/common/cache/CacheExpirationTest.java
@@ -0,0 +1,478 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.cache;
+
+import static com.google.common.cache.TestingCacheLoaders.identityLoader;
+import static com.google.common.cache.TestingRemovalListeners.countingRemovalListener;
+import static java.util.Arrays.asList;
+import static java.util.concurrent.TimeUnit.MILLISECONDS;
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import com.google.common.cache.TestingCacheLoaders.IdentityLoader;
+import com.google.common.cache.TestingRemovalListeners.CountingRemovalListener;
+import com.google.common.collect.Iterators;
+import com.google.common.testing.FakeTicker;
+import com.google.common.util.concurrent.Callables;
+
+import junit.framework.TestCase;
+
+import java.util.List;
+import java.util.Set;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ * Tests relating to cache expiration: make sure entries expire at the right times, make sure
+ * expired entries don't show up, etc.
+ *
+ * @author mike nonemacher
+ */
+@SuppressWarnings("deprecation") // tests of deprecated method
+public class CacheExpirationTest extends TestCase {
+
+  private static final long EXPIRING_TIME = 1000;
+  private static final int VALUE_PREFIX = 12345;
+  private static final String KEY_PREFIX = "key prefix:";
+
+  public void testExpiration_expireAfterWrite() {
+    FakeTicker ticker = new FakeTicker();
+    CountingRemovalListener<String, Integer> removalListener = countingRemovalListener();
+    WatchedCreatorLoader loader = new WatchedCreatorLoader();
+    LoadingCache<String, Integer> cache = CacheBuilder.newBuilder()
+        .expireAfterWrite(EXPIRING_TIME, MILLISECONDS)
+        .removalListener(removalListener)
+        .ticker(ticker)
+        .build(loader);
+    checkExpiration(cache, loader, ticker, removalListener);
+  }
+
+  public void testExpiration_expireAfterAccess() {
+    FakeTicker ticker = new FakeTicker();
+    CountingRemovalListener<String, Integer> removalListener = countingRemovalListener();
+    WatchedCreatorLoader loader = new WatchedCreatorLoader();
+    LoadingCache<String, Integer> cache = CacheBuilder.newBuilder()
+        .expireAfterAccess(EXPIRING_TIME, MILLISECONDS)
+        .removalListener(removalListener)
+        .ticker(ticker)
+        .build(loader);
+    checkExpiration(cache, loader, ticker, removalListener);
+  }
+
+  private void checkExpiration(LoadingCache<String, Integer> cache, WatchedCreatorLoader loader,
+      FakeTicker ticker, CountingRemovalListener<String, Integer> removalListener) {
+
+    for (int i = 0; i < 10; i++) {
+      assertEquals(Integer.valueOf(VALUE_PREFIX + i), cache.getUnchecked(KEY_PREFIX + i));
+    }
+
+    for (int i = 0; i < 10; i++) {
+      loader.reset();
+      assertEquals(Integer.valueOf(VALUE_PREFIX + i), cache.getUnchecked(KEY_PREFIX + i));
+      assertFalse("Creator should not have been called @#" + i, loader.wasCalled());
+    }
+
+    CacheTesting.expireEntries((LoadingCache<?, ?>) cache, EXPIRING_TIME, ticker);
+
+    assertEquals("Map must be empty by now", 0, cache.size());
+    assertEquals("Eviction notifications must be received", 10,
+        removalListener.getCount());
+
+    CacheTesting.expireEntries((LoadingCache<?, ?>) cache, EXPIRING_TIME, ticker);
+    // ensure that no new notifications are sent
+    assertEquals("Eviction notifications must be received", 10,
+        removalListener.getCount());
+  }
+
+  public void testExpiringGet_expireAfterWrite() {
+    FakeTicker ticker = new FakeTicker();
+    CountingRemovalListener<String, Integer> removalListener = countingRemovalListener();
+    WatchedCreatorLoader loader = new WatchedCreatorLoader();
+    LoadingCache<String, Integer> cache = CacheBuilder.newBuilder()
+        .expireAfterWrite(EXPIRING_TIME, MILLISECONDS)
+        .removalListener(removalListener)
+        .ticker(ticker)
+        .build(loader);
+    runExpirationTest(cache, loader, ticker, removalListener);
+  }
+
+  public void testExpiringGet_expireAfterAccess() {
+    FakeTicker ticker = new FakeTicker();
+    CountingRemovalListener<String, Integer> removalListener = countingRemovalListener();
+    WatchedCreatorLoader loader = new WatchedCreatorLoader();
+    LoadingCache<String, Integer> cache = CacheBuilder.newBuilder()
+        .expireAfterAccess(EXPIRING_TIME, MILLISECONDS)
+        .removalListener(removalListener)
+        .ticker(ticker)
+        .build(loader);
+    runExpirationTest(cache, loader, ticker, removalListener);
+  }
+
+  private void runExpirationTest(LoadingCache<String, Integer> cache, WatchedCreatorLoader loader,
+      FakeTicker ticker, CountingRemovalListener<String, Integer> removalListener) {
+
+    for (int i = 0; i < 10; i++) {
+      assertEquals(Integer.valueOf(VALUE_PREFIX + i), cache.getUnchecked(KEY_PREFIX + i));
+    }
+
+    for (int i = 0; i < 10; i++) {
+      loader.reset();
+      assertEquals(Integer.valueOf(VALUE_PREFIX + i), cache.getUnchecked(KEY_PREFIX + i));
+      assertFalse("Loader should NOT have been called @#" + i, loader.wasCalled());
+    }
+
+    // wait for entries to expire, but don't call expireEntries
+    ticker.advance(EXPIRING_TIME * 10, MILLISECONDS);
+
+    // add a single unexpired entry
+    cache.getUnchecked(KEY_PREFIX + 11);
+
+    // collections views shouldn't expose expired entries
+    assertEquals(1, Iterators.size(cache.asMap().entrySet().iterator()));
+    assertEquals(1, Iterators.size(cache.asMap().keySet().iterator()));
+    assertEquals(1, Iterators.size(cache.asMap().values().iterator()));
+
+    CacheTesting.expireEntries((LoadingCache<?, ?>) cache, EXPIRING_TIME, ticker);
+
+    for (int i = 0; i < 11; i++) {
+      assertFalse(cache.asMap().containsKey(KEY_PREFIX + i));
+    }
+    assertEquals(11, removalListener.getCount());
+
+    for (int i = 0; i < 10; i++) {
+      assertFalse(cache.asMap().containsKey(KEY_PREFIX + i));
+      loader.reset();
+      assertEquals(Integer.valueOf(VALUE_PREFIX + i), cache.getUnchecked(KEY_PREFIX + i));
+      assertTrue("Creator should have been called @#" + i, loader.wasCalled());
+    }
+
+    // expire new values we just created
+    CacheTesting.expireEntries((LoadingCache<?, ?>) cache, EXPIRING_TIME, ticker);
+    assertEquals("Eviction notifications must be received", 21,
+        removalListener.getCount());
+
+    CacheTesting.expireEntries((LoadingCache<?, ?>) cache, EXPIRING_TIME, ticker);
+    // ensure that no new notifications are sent
+    assertEquals("Eviction notifications must be received", 21,
+        removalListener.getCount());
+  }
+
+  public void testRemovalListener_expireAfterWrite() {
+    FakeTicker ticker = new FakeTicker();
+    final AtomicInteger evictionCount = new AtomicInteger();
+    final AtomicInteger applyCount = new AtomicInteger();
+    final AtomicInteger totalSum = new AtomicInteger();
+
+    RemovalListener<Integer, AtomicInteger> removalListener =
+        new RemovalListener<Integer, AtomicInteger>() {
+          @Override
+          public void onRemoval(RemovalNotification<Integer, AtomicInteger> notification) {
+            if (notification.wasEvicted()) {
+              evictionCount.incrementAndGet();
+              totalSum.addAndGet(notification.getValue().get());
+            }
+          }
+        };
+
+    CacheLoader<Integer, AtomicInteger> loader = new CacheLoader<Integer, AtomicInteger>() {
+      @Override public AtomicInteger load(Integer key) {
+        applyCount.incrementAndGet();
+        return new AtomicInteger();
+      }
+    };
+
+    LoadingCache<Integer, AtomicInteger> cache = CacheBuilder.newBuilder()
+        .removalListener(removalListener)
+        .expireAfterWrite(10, MILLISECONDS)
+        .ticker(ticker)
+        .build(loader);
+
+    // Increment 100 times
+    for (int i = 0; i < 100; ++i) {
+      cache.getUnchecked(10).incrementAndGet();
+      ticker.advance(1, MILLISECONDS);
+    }
+
+    assertEquals(evictionCount.get() + 1, applyCount.get());
+    int remaining = cache.getUnchecked(10).get();
+    assertEquals(100, totalSum.get() + remaining);
+  }
+
+  public void testRemovalScheduler_expireAfterWrite() {
+    FakeTicker ticker = new FakeTicker();
+    CountingRemovalListener<String, Integer> removalListener = countingRemovalListener();
+    WatchedCreatorLoader loader = new WatchedCreatorLoader();
+    LoadingCache<String, Integer> cache = CacheBuilder.newBuilder()
+        .expireAfterWrite(EXPIRING_TIME, MILLISECONDS)
+        .removalListener(removalListener)
+        .ticker(ticker)
+        .build(loader);
+    runRemovalScheduler(cache, removalListener, loader, ticker, KEY_PREFIX, EXPIRING_TIME);
+  }
+
+  public void testRemovalScheduler_expireAfterAccess() {
+    FakeTicker ticker = new FakeTicker();
+    CountingRemovalListener<String, Integer> removalListener = countingRemovalListener();
+    WatchedCreatorLoader loader = new WatchedCreatorLoader();
+    LoadingCache<String, Integer> cache = CacheBuilder.newBuilder()
+        .expireAfterAccess(EXPIRING_TIME, MILLISECONDS)
+        .removalListener(removalListener)
+        .ticker(ticker)
+        .build(loader);
+    runRemovalScheduler(cache, removalListener, loader, ticker, KEY_PREFIX, EXPIRING_TIME);
+  }
+
+  public void testRemovalScheduler_expireAfterBoth() {
+    FakeTicker ticker = new FakeTicker();
+    CountingRemovalListener<String, Integer> removalListener = countingRemovalListener();
+    WatchedCreatorLoader loader = new WatchedCreatorLoader();
+    LoadingCache<String, Integer> cache = CacheBuilder.newBuilder()
+        .expireAfterAccess(EXPIRING_TIME, MILLISECONDS)
+        .expireAfterWrite(EXPIRING_TIME, MILLISECONDS)
+        .removalListener(removalListener)
+        .ticker(ticker)
+        .build(loader);
+    runRemovalScheduler(cache, removalListener, loader, ticker, KEY_PREFIX, EXPIRING_TIME);
+  }
+
+  public void testExpirationOrder_access() {
+    // test lru within a single segment
+    FakeTicker ticker = new FakeTicker();
+    IdentityLoader<Integer> loader = identityLoader();
+    LoadingCache<Integer, Integer> cache = CacheBuilder.newBuilder()
+        .concurrencyLevel(1)
+        .expireAfterAccess(10, MILLISECONDS)
+        .ticker(ticker)
+        .build(loader);
+    for (int i = 0; i < 10; i++) {
+      cache.getUnchecked(i);
+      ticker.advance(1, MILLISECONDS);
+    }
+    Set<Integer> keySet = cache.asMap().keySet();
+    ASSERT.that(keySet).hasContentsAnyOrder(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
+
+    // 0 expires
+    ticker.advance(1, MILLISECONDS);
+    ASSERT.that(keySet).hasContentsAnyOrder(1, 2, 3, 4, 5, 6, 7, 8, 9);
+
+    // reorder
+    getAll(cache, asList(0, 1, 2));
+    CacheTesting.drainRecencyQueues(cache);
+    ticker.advance(2, MILLISECONDS);
+    ASSERT.that(keySet).hasContentsAnyOrder(3, 4, 5, 6, 7, 8, 9, 0, 1, 2);
+
+    // 3 expires
+    ticker.advance(1, MILLISECONDS);
+    ASSERT.that(keySet).hasContentsAnyOrder(4, 5, 6, 7, 8, 9, 0, 1, 2);
+
+    // reorder
+    getAll(cache, asList(5, 7, 9));
+    CacheTesting.drainRecencyQueues(cache);
+    ASSERT.that(keySet).hasContentsAnyOrder(4, 6, 8, 0, 1, 2, 5, 7, 9);
+
+    // 4 expires
+    ticker.advance(1, MILLISECONDS);
+    ASSERT.that(keySet).hasContentsAnyOrder(6, 8, 0, 1, 2, 5, 7, 9);
+    ticker.advance(1, MILLISECONDS);
+    ASSERT.that(keySet).hasContentsAnyOrder(6, 8, 0, 1, 2, 5, 7, 9);
+
+    // 6 expires
+    ticker.advance(1, MILLISECONDS);
+    ASSERT.that(keySet).hasContentsAnyOrder(8, 0, 1, 2, 5, 7, 9);
+    ticker.advance(1, MILLISECONDS);
+    ASSERT.that(keySet).hasContentsAnyOrder(8, 0, 1, 2, 5, 7, 9);
+
+    // 8 expires
+    ticker.advance(1, MILLISECONDS);
+    ASSERT.that(keySet).hasContentsAnyOrder(0, 1, 2, 5, 7, 9);
+  }
+
+  public void testExpirationOrder_write() throws ExecutionException {
+    // test lru within a single segment
+    FakeTicker ticker = new FakeTicker();
+    IdentityLoader<Integer> loader = identityLoader();
+    LoadingCache<Integer, Integer> cache = CacheBuilder.newBuilder()
+        .concurrencyLevel(1)
+        .expireAfterWrite(10, MILLISECONDS)
+        .ticker(ticker)
+        .build(loader);
+    for (int i = 0; i < 10; i++) {
+      cache.getUnchecked(i);
+      ticker.advance(1, MILLISECONDS);
+    }
+    Set<Integer> keySet = cache.asMap().keySet();
+    ASSERT.that(keySet).hasContentsAnyOrder(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
+
+    // 0 expires
+    ticker.advance(1, MILLISECONDS);
+    ASSERT.that(keySet).hasContentsAnyOrder(1, 2, 3, 4, 5, 6, 7, 8, 9);
+
+    // get doesn't stop 1 from expiring
+    getAll(cache, asList(0, 1, 2));
+    CacheTesting.drainRecencyQueues(cache);
+    ticker.advance(1, MILLISECONDS);
+    ASSERT.that(keySet).hasContentsAnyOrder(2, 3, 4, 5, 6, 7, 8, 9, 0);
+
+    // get(K, Callable) doesn't stop 2 from expiring
+    cache.get(2, Callables.returning(-2));
+    CacheTesting.drainRecencyQueues(cache);
+    ticker.advance(1, MILLISECONDS);
+    ASSERT.that(keySet).hasContentsAnyOrder(3, 4, 5, 6, 7, 8, 9, 0);
+
+    // asMap.put saves 3
+    cache.asMap().put(3, -3);
+    ticker.advance(1, MILLISECONDS);
+    ASSERT.that(keySet).hasContentsAnyOrder(4, 5, 6, 7, 8, 9, 0, 3);
+
+    // asMap.replace saves 4
+    cache.asMap().replace(4, -4);
+    ticker.advance(1, MILLISECONDS);
+    ASSERT.that(keySet).hasContentsAnyOrder(5, 6, 7, 8, 9, 0, 3, 4);
+
+    // 5 expires
+    ticker.advance(1, MILLISECONDS);
+    ASSERT.that(keySet).hasContentsAnyOrder(6, 7, 8, 9, 0, 3, 4);
+  }
+
+  public void testExpirationOrder_writeAccess() throws ExecutionException {
+    // test lru within a single segment
+    FakeTicker ticker = new FakeTicker();
+    IdentityLoader<Integer> loader = identityLoader();
+    LoadingCache<Integer, Integer> cache = CacheBuilder.newBuilder()
+        .concurrencyLevel(1)
+        .expireAfterWrite(4, MILLISECONDS)
+        .expireAfterAccess(2, MILLISECONDS)
+        .ticker(ticker)
+        .build(loader);
+    for (int i = 0; i < 5; i++) {
+      cache.getUnchecked(i);
+    }
+    ticker.advance(1, MILLISECONDS);
+    for (int i = 5; i < 10; i++) {
+      cache.getUnchecked(i);
+    }
+    ticker.advance(1, MILLISECONDS);
+
+    Set<Integer> keySet = cache.asMap().keySet();
+    ASSERT.that(keySet).hasContentsAnyOrder(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
+
+    // get saves 1, 3; 0, 2, 4 expire
+    getAll(cache, asList(1, 3));
+    CacheTesting.drainRecencyQueues(cache);
+    ticker.advance(1, MILLISECONDS);
+    ASSERT.that(keySet).hasContentsAnyOrder(5, 6, 7, 8, 9, 1, 3);
+
+    // get saves 6, 8; 5, 7, 9 expire
+    getAll(cache, asList(6, 8));
+    CacheTesting.drainRecencyQueues(cache);
+    ticker.advance(1, MILLISECONDS);
+    ASSERT.that(keySet).hasContentsAnyOrder(1, 3, 6, 8);
+
+    // get fails to save 1, put saves 3
+    cache.asMap().put(3, -3);
+    getAll(cache, asList(1));
+    CacheTesting.drainRecencyQueues(cache);
+    ticker.advance(1, MILLISECONDS);
+    ASSERT.that(keySet).hasContentsAnyOrder(6, 8, 3);
+
+    // get(K, Callable) fails to save 8, replace saves 6
+    cache.asMap().replace(6, -6);
+    cache.get(8, Callables.returning(-8));
+    CacheTesting.drainRecencyQueues(cache);
+    ticker.advance(1, MILLISECONDS);
+    ASSERT.that(keySet).hasContentsAnyOrder(3, 6);
+  }
+
+  private void runRemovalScheduler(LoadingCache<String, Integer> cache,
+      CountingRemovalListener<String, Integer> removalListener,
+      WatchedCreatorLoader loader,
+      FakeTicker ticker, String keyPrefix, long ttl) {
+
+    int shift1 = 10 + VALUE_PREFIX;
+    loader.setValuePrefix(shift1);
+    // fill with initial data
+    for (int i = 0; i < 10; i++) {
+      assertEquals(Integer.valueOf(i + shift1), cache.getUnchecked(keyPrefix + i));
+    }
+    assertEquals(10, CacheTesting.expirationQueueSize(cache));
+    assertEquals(0, removalListener.getCount());
+
+    // wait, so that entries have just 10 ms to live
+    ticker.advance(ttl * 2 / 3, MILLISECONDS);
+
+    assertEquals(10, CacheTesting.expirationQueueSize(cache));
+    assertEquals(0, removalListener.getCount());
+
+    int shift2 = shift1 + 10;
+    loader.setValuePrefix(shift2);
+    // fill with new data - has to live for 20 ms more
+    for (int i = 0; i < 10; i++) {
+      cache.invalidate(keyPrefix + i);
+      assertEquals("key: " + keyPrefix + i,
+          Integer.valueOf(i + shift2), cache.getUnchecked(keyPrefix + i));
+    }
+    assertEquals(10, CacheTesting.expirationQueueSize(cache));
+    assertEquals(10, removalListener.getCount());  // these are the invalidated ones
+
+    // old timeouts must expire after this wait
+    ticker.advance(ttl * 2 / 3, MILLISECONDS);
+
+    assertEquals(10, CacheTesting.expirationQueueSize(cache));
+    assertEquals(10, removalListener.getCount());
+
+    // check that new values are still there - they still have 10 ms to live
+    for (int i = 0; i < 10; i++) {
+      loader.reset();
+      assertEquals(Integer.valueOf(i + shift2), cache.getUnchecked(keyPrefix + i));
+      assertFalse("Creator should NOT have been called @#" + i, loader.wasCalled());
+    }
+    assertEquals(10, removalListener.getCount());
+  }
+
+  private void getAll(LoadingCache<Integer, Integer> cache, List<Integer> keys) {
+    for (int i : keys) {
+      cache.getUnchecked(i);
+    }
+  }
+
+  private static class WatchedCreatorLoader extends CacheLoader<String, Integer> {
+    boolean wasCalled = false; // must be set in load()
+    String keyPrefix = KEY_PREFIX;
+    int valuePrefix = VALUE_PREFIX;
+
+    public WatchedCreatorLoader() {
+    }
+
+    public void reset() {
+      wasCalled = false;
+    }
+
+    public boolean wasCalled() {
+      return wasCalled;
+    }
+
+    public void setKeyPrefix(String keyPrefix) {
+      this.keyPrefix = keyPrefix;
+    }
+
+    public void setValuePrefix(int valuePrefix) {
+      this.valuePrefix = valuePrefix;
+    }
+
+    @Override public Integer load(String key) {
+      wasCalled = true;
+      return valuePrefix + Integer.parseInt(key.substring(keyPrefix.length()));
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/cache/CacheLoadingTest.java b/guava-tests/test/com/google/common/cache/CacheLoadingTest.java
new file mode 100644
index 0000000..f108b63
--- /dev/null
+++ b/guava-tests/test/com/google/common/cache/CacheLoadingTest.java
@@ -0,0 +1,2319 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.cache;
+
+import static com.google.common.cache.TestingCacheLoaders.bulkLoader;
+import static com.google.common.cache.TestingCacheLoaders.constantLoader;
+import static com.google.common.cache.TestingCacheLoaders.errorLoader;
+import static com.google.common.cache.TestingCacheLoaders.exceptionLoader;
+import static com.google.common.cache.TestingCacheLoaders.identityLoader;
+import static com.google.common.cache.TestingRemovalListeners.countingRemovalListener;
+import static java.util.Arrays.asList;
+import static java.util.concurrent.TimeUnit.MILLISECONDS;
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import com.google.common.cache.CacheLoader.InvalidCacheLoadException;
+import com.google.common.cache.TestingCacheLoaders.CountingLoader;
+import com.google.common.cache.TestingCacheLoaders.IdentityLoader;
+import com.google.common.cache.TestingRemovalListeners.CountingRemovalListener;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.common.testing.FakeTicker;
+import com.google.common.testing.TestLogHandler;
+import com.google.common.util.concurrent.Callables;
+import com.google.common.util.concurrent.ExecutionError;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.UncheckedExecutionException;
+
+import junit.framework.TestCase;
+
+import java.io.IOException;
+import java.lang.ref.WeakReference;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicReferenceArray;
+import java.util.logging.LogRecord;
+
+/**
+ * Tests relating to cache loading: concurrent loading, exceptions during loading, etc.
+ *
+ * @author mike nonemacher
+ */
+public class CacheLoadingTest extends TestCase {
+  TestLogHandler logHandler;
+
+  @Override
+  public void setUp() throws Exception {
+    super.setUp();
+    logHandler = new TestLogHandler();
+    LocalCache.logger.addHandler(logHandler);
+  }
+
+  @Override
+  public void tearDown() throws Exception {
+    super.tearDown();
+    LocalCache.logger.removeHandler(logHandler);
+  }
+
+  private Throwable popLoggedThrowable() {
+    List<LogRecord> logRecords = logHandler.getStoredLogRecords();
+    assertEquals(1, logRecords.size());
+    LogRecord logRecord = logRecords.get(0);
+    logHandler.clear();
+    return logRecord.getThrown();
+  }
+
+  private void checkNothingLogged() {
+    assertTrue(logHandler.getStoredLogRecords().isEmpty());
+  }
+
+  private void checkLoggedCause(Throwable t) {
+    assertSame(t, popLoggedThrowable().getCause());
+  }
+
+  private void checkLoggedInvalidLoad() {
+    assertTrue(popLoggedThrowable() instanceof InvalidCacheLoadException);
+  }
+
+  public void testLoad() throws ExecutionException {
+    LoadingCache<Object, Object> cache = CacheBuilder.newBuilder()
+        .build(identityLoader());
+    CacheStats stats = cache.stats();
+    assertEquals(0, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    Object key = new Object();
+    assertSame(key, cache.get(key));
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(1, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    key = new Object();
+    assertSame(key, cache.getUnchecked(key));
+    stats = cache.stats();
+    assertEquals(2, stats.missCount());
+    assertEquals(2, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    key = new Object();
+    cache.refresh(key);
+    checkNothingLogged();
+    stats = cache.stats();
+    assertEquals(2, stats.missCount());
+    assertEquals(3, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    assertSame(key, cache.get(key));
+    stats = cache.stats();
+    assertEquals(2, stats.missCount());
+    assertEquals(3, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(1, stats.hitCount());
+
+    Object value = new Object();
+    // callable is not called
+    assertSame(key, cache.get(key, throwing(new Exception())));
+    stats = cache.stats();
+    assertEquals(2, stats.missCount());
+    assertEquals(3, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(2, stats.hitCount());
+
+    key = new Object();
+    assertSame(value, cache.get(key, Callables.returning(value)));
+    stats = cache.stats();
+    assertEquals(3, stats.missCount());
+    assertEquals(4, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(2, stats.hitCount());
+  }
+
+  public void testReload() throws ExecutionException {
+    final Object one = new Object();
+    final Object two = new Object();
+    CacheLoader<Object, Object> loader = new CacheLoader<Object, Object>() {
+      @Override
+      public Object load(Object key) {
+        return one;
+      }
+
+      @Override
+      public ListenableFuture<Object> reload(Object key, Object oldValue) {
+        return Futures.immediateFuture(two);
+      }
+    };
+
+    LoadingCache<Object, Object> cache = CacheBuilder.newBuilder().build(loader);
+    Object key = new Object();
+    CacheStats stats = cache.stats();
+    assertEquals(0, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    assertSame(one, cache.getUnchecked(key));
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(1, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    cache.refresh(key);
+    checkNothingLogged();
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(2, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    assertSame(two, cache.getUnchecked(key));
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(2, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(1, stats.hitCount());
+  }
+
+  public void testRefresh() {
+    final Object one = new Object();
+    final Object two = new Object();
+    FakeTicker ticker = new FakeTicker();
+    CacheLoader<Object, Object> loader = new CacheLoader<Object, Object>() {
+      @Override
+      public Object load(Object key) {
+        return one;
+      }
+
+      @Override
+      public ListenableFuture<Object> reload(Object key, Object oldValue) {
+        return Futures.immediateFuture(two);
+      }
+    };
+
+    LoadingCache<Object, Object> cache = CacheBuilder.newBuilder()
+        .ticker(ticker)
+        .refreshAfterWrite(1, MILLISECONDS)
+        .build(loader);
+    Object key = new Object();
+    CacheStats stats = cache.stats();
+    assertEquals(0, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    assertSame(one, cache.getUnchecked(key));
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(1, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    ticker.advance(1, MILLISECONDS);
+    assertSame(one, cache.getUnchecked(key));
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(1, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(1, stats.hitCount());
+
+    ticker.advance(1, MILLISECONDS);
+    assertSame(two, cache.getUnchecked(key));
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(2, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(2, stats.hitCount());
+
+    ticker.advance(1, MILLISECONDS);
+    assertSame(two, cache.getUnchecked(key));
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(2, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(3, stats.hitCount());
+  }
+
+  public void testRefresh_getIfPresent() {
+    final Object one = new Object();
+    final Object two = new Object();
+    FakeTicker ticker = new FakeTicker();
+    CacheLoader<Object, Object> loader = new CacheLoader<Object, Object>() {
+      @Override
+      public Object load(Object key) {
+        return one;
+      }
+
+      @Override
+      public ListenableFuture<Object> reload(Object key, Object oldValue) {
+        return Futures.immediateFuture(two);
+      }
+    };
+
+    LoadingCache<Object, Object> cache = CacheBuilder.newBuilder()
+        .ticker(ticker)
+        .refreshAfterWrite(1, MILLISECONDS)
+        .build(loader);
+    Object key = new Object();
+    CacheStats stats = cache.stats();
+    assertEquals(0, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    assertSame(one, cache.getUnchecked(key));
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(1, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    ticker.advance(1, MILLISECONDS);
+    assertSame(one, cache.getIfPresent(key));
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(1, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(1, stats.hitCount());
+
+    ticker.advance(1, MILLISECONDS);
+    assertSame(two, cache.getIfPresent(key));
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(2, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(2, stats.hitCount());
+
+    ticker.advance(1, MILLISECONDS);
+    assertSame(two, cache.getIfPresent(key));
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(2, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(3, stats.hitCount());
+  }
+
+  public void testBulkLoad_default() throws ExecutionException {
+    LoadingCache<Integer, Integer> cache = CacheBuilder.newBuilder()
+        .build(TestingCacheLoaders.<Integer>identityLoader());
+    CacheStats stats = cache.stats();
+    assertEquals(0, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    assertEquals(ImmutableMap.of(), cache.getAll(ImmutableList.<Integer>of()));
+    assertEquals(0, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    assertEquals(ImmutableMap.of(1, 1), cache.getAll(asList(1)));
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(1, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    assertEquals(ImmutableMap.of(1, 1, 2, 2, 3, 3, 4, 4), cache.getAll(asList(1, 2, 3, 4)));
+    stats = cache.stats();
+    assertEquals(4, stats.missCount());
+    assertEquals(4, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(1, stats.hitCount());
+
+    assertEquals(ImmutableMap.of(2, 2, 3, 3), cache.getAll(asList(2, 3)));
+    stats = cache.stats();
+    assertEquals(4, stats.missCount());
+    assertEquals(4, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(3, stats.hitCount());
+
+    // duplicate keys are ignored, and don't impact stats
+    assertEquals(ImmutableMap.of(4, 4, 5, 5), cache.getAll(asList(4, 5)));
+    stats = cache.stats();
+    assertEquals(5, stats.missCount());
+    assertEquals(5, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(4, stats.hitCount());
+  }
+
+  public void testBulkLoad_loadAll() throws ExecutionException {
+    IdentityLoader<Integer> backingLoader = identityLoader();
+    CacheLoader<Integer, Integer> loader = bulkLoader(backingLoader);
+    LoadingCache<Integer, Integer> cache = CacheBuilder.newBuilder().build(loader);
+    CacheStats stats = cache.stats();
+    assertEquals(0, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    assertEquals(ImmutableMap.of(), cache.getAll(ImmutableList.<Integer>of()));
+    assertEquals(0, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    assertEquals(ImmutableMap.of(1, 1), cache.getAll(asList(1)));
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(1, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    assertEquals(ImmutableMap.of(1, 1, 2, 2, 3, 3, 4, 4), cache.getAll(asList(1, 2, 3, 4)));
+    stats = cache.stats();
+    assertEquals(4, stats.missCount());
+    assertEquals(2, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(1, stats.hitCount());
+
+    assertEquals(ImmutableMap.of(2, 2, 3, 3), cache.getAll(asList(2, 3)));
+    stats = cache.stats();
+    assertEquals(4, stats.missCount());
+    assertEquals(2, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(3, stats.hitCount());
+
+    // duplicate keys are ignored, and don't impact stats
+    assertEquals(ImmutableMap.of(4, 4, 5, 5), cache.getAll(asList(4, 5)));
+    stats = cache.stats();
+    assertEquals(5, stats.missCount());
+    assertEquals(3, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(4, stats.hitCount());
+  }
+
+  public void testBulkLoad_extra() throws ExecutionException {
+    CacheLoader<Object, Object> loader = new CacheLoader<Object, Object>() {
+      @Override
+      public Object load(Object key) throws Exception {
+        return new Object();
+      }
+
+      @Override
+      public Map<Object, Object> loadAll(Iterable<? extends Object> keys) throws Exception {
+        Map<Object, Object> result = Maps.newHashMap();
+        for (Object key : keys) {
+          Object value = new Object();
+          result.put(key, value);
+          // add extra entries
+          result.put(value, key);
+        }
+        return result;
+      }
+    };
+    LoadingCache<Object, Object> cache = CacheBuilder.newBuilder().build(loader);
+
+    Object[] lookupKeys = new Object[] { new Object(), new Object(), new Object() };
+    Map<Object, Object> result = cache.getAll(asList(lookupKeys));
+    ASSERT.that(result.keySet()).hasContentsAnyOrder(lookupKeys);
+    for (Map.Entry<Object, Object> entry : result.entrySet()) {
+      Object key = entry.getKey();
+      Object value = entry.getValue();
+      assertSame(value, result.get(key));
+      assertNull(result.get(value));
+      assertSame(value, cache.asMap().get(key));
+      assertSame(key, cache.asMap().get(value));
+    }
+  }
+
+  public void testBulkLoad_clobber() throws ExecutionException {
+    final Object extraKey = new Object();
+    final Object extraValue = new Object();
+    CacheLoader<Object, Object> loader = new CacheLoader<Object, Object>() {
+      @Override
+      public Object load(Object key) throws Exception {
+        throw new AssertionError();
+      }
+
+      @Override
+      public Map<Object, Object> loadAll(Iterable<? extends Object> keys) throws Exception {
+        Map<Object, Object> result = Maps.newHashMap();
+        for (Object key : keys) {
+          Object value = new Object();
+          result.put(key, value);
+        }
+        result.put(extraKey, extraValue);
+        return result;
+      }
+    };
+    LoadingCache<Object, Object> cache = CacheBuilder.newBuilder().build(loader);
+    cache.asMap().put(extraKey, extraKey);
+    assertSame(extraKey, cache.asMap().get(extraKey));
+
+    Object[] lookupKeys = new Object[] { new Object(), new Object(), new Object() };
+    Map<Object, Object> result = cache.getAll(asList(lookupKeys));
+    ASSERT.that(result.keySet()).hasContentsAnyOrder(lookupKeys);
+    for (Map.Entry<Object, Object> entry : result.entrySet()) {
+      Object key = entry.getKey();
+      Object value = entry.getValue();
+      assertSame(value, result.get(key));
+      assertSame(value, cache.asMap().get(key));
+    }
+    assertNull(result.get(extraKey));
+    assertSame(extraValue, cache.asMap().get(extraKey));
+  }
+
+  public void testBulkLoad_clobberNullValue() throws ExecutionException {
+    final Object extraKey = new Object();
+    final Object extraValue = new Object();
+    CacheLoader<Object, Object> loader = new CacheLoader<Object, Object>() {
+      @Override
+      public Object load(Object key) throws Exception {
+        throw new AssertionError();
+      }
+
+      @Override
+      public Map<Object, Object> loadAll(Iterable<? extends Object> keys) throws Exception {
+        Map<Object, Object> result = Maps.newHashMap();
+        for (Object key : keys) {
+          Object value = new Object();
+          result.put(key, value);
+        }
+        result.put(extraKey, extraValue);
+        result.put(extraValue, null);
+        return result;
+      }
+    };
+    LoadingCache<Object, Object> cache = CacheBuilder.newBuilder().build(loader);
+    cache.asMap().put(extraKey, extraKey);
+    assertSame(extraKey, cache.asMap().get(extraKey));
+
+    Object[] lookupKeys = new Object[] { new Object(), new Object(), new Object() };
+    try {
+      cache.getAll(asList(lookupKeys));
+      fail();
+    } catch (InvalidCacheLoadException expected) {}
+
+    for (Object key : lookupKeys) {
+      assertTrue(cache.asMap().containsKey(key));
+    }
+    assertSame(extraValue, cache.asMap().get(extraKey));
+    assertFalse(cache.asMap().containsKey(extraValue));
+  }
+
+  public void testBulkLoad_clobberNullKey() throws ExecutionException {
+    final Object extraKey = new Object();
+    final Object extraValue = new Object();
+    CacheLoader<Object, Object> loader = new CacheLoader<Object, Object>() {
+      @Override
+      public Object load(Object key) throws Exception {
+        throw new AssertionError();
+      }
+
+      @Override
+      public Map<Object, Object> loadAll(Iterable<? extends Object> keys) throws Exception {
+        Map<Object, Object> result = Maps.newHashMap();
+        for (Object key : keys) {
+          Object value = new Object();
+          result.put(key, value);
+        }
+        result.put(extraKey, extraValue);
+        result.put(null, extraKey);
+        return result;
+      }
+    };
+    LoadingCache<Object, Object> cache = CacheBuilder.newBuilder().build(loader);
+    cache.asMap().put(extraKey, extraKey);
+    assertSame(extraKey, cache.asMap().get(extraKey));
+
+    Object[] lookupKeys = new Object[] { new Object(), new Object(), new Object() };
+    try {
+      cache.getAll(asList(lookupKeys));
+      fail();
+    } catch (InvalidCacheLoadException expected) {}
+
+    for (Object key : lookupKeys) {
+      assertTrue(cache.asMap().containsKey(key));
+    }
+    assertSame(extraValue, cache.asMap().get(extraKey));
+    assertFalse(cache.asMap().containsValue(extraKey));
+  }
+
+  public void testBulkLoad_partial() throws ExecutionException {
+    final Object extraKey = new Object();
+    final Object extraValue = new Object();
+    CacheLoader<Object, Object> loader = new CacheLoader<Object, Object>() {
+      @Override
+      public Object load(Object key) throws Exception {
+        throw new AssertionError();
+      }
+
+      @Override
+      public Map<Object, Object> loadAll(Iterable<? extends Object> keys) throws Exception {
+        Map<Object, Object> result = Maps.newHashMap();
+        // ignore request keys
+        result.put(extraKey, extraValue);
+        return result;
+      }
+    };
+    LoadingCache<Object, Object> cache = CacheBuilder.newBuilder().build(loader);
+
+    Object[] lookupKeys = new Object[] { new Object(), new Object(), new Object() };
+    try {
+      cache.getAll(asList(lookupKeys));
+      fail();
+    } catch (InvalidCacheLoadException expected) {}
+    assertSame(extraValue, cache.asMap().get(extraKey));
+  }
+
+  public void testLoadNull() throws ExecutionException {
+    LoadingCache<Object, Object> cache = CacheBuilder.newBuilder()
+        .build(constantLoader(null));
+    CacheStats stats = cache.stats();
+    assertEquals(0, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    try {
+      cache.get(new Object());
+      fail();
+    } catch (InvalidCacheLoadException expected) {}
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(1, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    try {
+      cache.getUnchecked(new Object());
+      fail();
+    } catch (InvalidCacheLoadException expected) {}
+    stats = cache.stats();
+    assertEquals(2, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(2, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    cache.refresh(new Object());
+    checkLoggedInvalidLoad();
+    stats = cache.stats();
+    assertEquals(2, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(3, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    try {
+      cache.get(new Object(), Callables.returning(null));
+      fail();
+    } catch (InvalidCacheLoadException expected) {}
+    stats = cache.stats();
+    assertEquals(3, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(4, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    try {
+      cache.getAll(asList(new Object()));
+      fail();
+    } catch (InvalidCacheLoadException expected) {}
+    stats = cache.stats();
+    assertEquals(4, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(5, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+  }
+
+  public void testReloadNull() throws ExecutionException {
+    final Object one = new Object();
+    CacheLoader<Object, Object> loader = new CacheLoader<Object, Object>() {
+      @Override
+      public Object load(Object key) {
+        return one;
+      }
+
+      @Override
+      public ListenableFuture<Object> reload(Object key, Object oldValue) {
+        return null;
+      }
+    };
+
+    LoadingCache<Object, Object> cache = CacheBuilder.newBuilder().build(loader);
+    Object key = new Object();
+    CacheStats stats = cache.stats();
+    assertEquals(0, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    assertSame(one, cache.getUnchecked(key));
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(1, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    cache.refresh(key);
+    checkLoggedInvalidLoad();
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(1, stats.loadSuccessCount());
+    assertEquals(1, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    assertSame(one, cache.getUnchecked(key));
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(1, stats.loadSuccessCount());
+    assertEquals(1, stats.loadExceptionCount());
+    assertEquals(1, stats.hitCount());
+  }
+
+  public void testReloadNullFuture() throws ExecutionException {
+    final Object one = new Object();
+    CacheLoader<Object, Object> loader = new CacheLoader<Object, Object>() {
+      @Override
+      public Object load(Object key) {
+        return one;
+      }
+
+      @Override
+      public ListenableFuture<Object> reload(Object key, Object oldValue) {
+        return Futures.immediateFuture(null);
+      }
+    };
+
+    LoadingCache<Object, Object> cache = CacheBuilder.newBuilder().build(loader);
+    Object key = new Object();
+    CacheStats stats = cache.stats();
+    assertEquals(0, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    assertSame(one, cache.getUnchecked(key));
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(1, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    cache.refresh(key);
+    checkLoggedInvalidLoad();
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(1, stats.loadSuccessCount());
+    assertEquals(1, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    assertSame(one, cache.getUnchecked(key));
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(1, stats.loadSuccessCount());
+    assertEquals(1, stats.loadExceptionCount());
+    assertEquals(1, stats.hitCount());
+  }
+
+  public void testRefreshNull() {
+    final Object one = new Object();
+    FakeTicker ticker = new FakeTicker();
+    CacheLoader<Object, Object> loader = new CacheLoader<Object, Object>() {
+      @Override
+      public Object load(Object key) {
+        return one;
+      }
+
+      @Override
+      public ListenableFuture<Object> reload(Object key, Object oldValue) {
+        return Futures.immediateFuture(null);
+      }
+    };
+
+    LoadingCache<Object, Object> cache = CacheBuilder.newBuilder()
+        .ticker(ticker)
+        .refreshAfterWrite(1, MILLISECONDS)
+        .build(loader);
+    Object key = new Object();
+    CacheStats stats = cache.stats();
+    assertEquals(0, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    assertSame(one, cache.getUnchecked(key));
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(1, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    ticker.advance(1, MILLISECONDS);
+    assertSame(one, cache.getUnchecked(key));
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(1, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(1, stats.hitCount());
+
+    ticker.advance(1, MILLISECONDS);
+    assertSame(one, cache.getUnchecked(key));
+    // refreshed
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(1, stats.loadSuccessCount());
+    assertEquals(1, stats.loadExceptionCount());
+    assertEquals(2, stats.hitCount());
+
+    ticker.advance(1, MILLISECONDS);
+    assertSame(one, cache.getUnchecked(key));
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(1, stats.loadSuccessCount());
+    assertEquals(2, stats.loadExceptionCount());
+    assertEquals(3, stats.hitCount());
+  }
+
+  public void testBulkLoadNull() throws ExecutionException {
+    LoadingCache<Object, Object> cache = CacheBuilder.newBuilder()
+        .build(bulkLoader(constantLoader(null)));
+    CacheStats stats = cache.stats();
+    assertEquals(0, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    try {
+      cache.getAll(asList(new Object()));
+      fail();
+    } catch (InvalidCacheLoadException expected) {}
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(1, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+  }
+
+  public void testBulkLoadNullMap() throws ExecutionException {
+    LoadingCache<Object, Object> cache = CacheBuilder.newBuilder().build(
+        new CacheLoader<Object, Object>() {
+          @Override
+          public Object load(Object key) {
+            throw new AssertionError();
+          }
+
+          @Override
+          public Map<Object, Object> loadAll(Iterable<? extends Object> keys) {
+            return null;
+          }
+        });
+
+    CacheStats stats = cache.stats();
+    assertEquals(0, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    try {
+      cache.getAll(asList(new Object()));
+      fail();
+    } catch (InvalidCacheLoadException expected) {}
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(1, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+  }
+
+  public void testLoadError() throws ExecutionException {
+    Error e = new Error();
+    CacheLoader<Object, Object> loader = errorLoader(e);
+    LoadingCache<Object, Object> cache = CacheBuilder.newBuilder().build(loader);
+    CacheStats stats = cache.stats();
+    assertEquals(0, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    try {
+      cache.get(new Object());
+      fail();
+    } catch (ExecutionError expected) {
+      assertSame(e, expected.getCause());
+    }
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(1, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    try {
+      cache.getUnchecked(new Object());
+      fail();
+    } catch (ExecutionError expected) {
+      assertSame(e, expected.getCause());
+    }
+    stats = cache.stats();
+    assertEquals(2, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(2, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    cache.refresh(new Object());
+    checkLoggedCause(e);
+    stats = cache.stats();
+    assertEquals(2, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(3, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    final Error callableError = new Error();
+    try {
+      cache.get(new Object(), new Callable<Object>() {
+        @Override
+        public Object call() {
+          throw callableError;
+        }
+      });
+      fail();
+    } catch (ExecutionError expected) {
+      assertSame(callableError, expected.getCause());
+    }
+    stats = cache.stats();
+    assertEquals(3, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(4, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    try {
+      cache.getAll(asList(new Object()));
+      fail();
+    } catch (ExecutionError expected) {
+      assertSame(e, expected.getCause());
+    }
+    stats = cache.stats();
+    assertEquals(4, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(5, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+  }
+
+  public void testReloadError() throws ExecutionException {
+    final Object one = new Object();
+    final Error e = new Error();
+    CacheLoader<Object, Object> loader = new CacheLoader<Object, Object>() {
+      @Override
+      public Object load(Object key) {
+        return one;
+      }
+
+      @Override
+      public ListenableFuture<Object> reload(Object key, Object oldValue) {
+        throw e;
+      }
+    };
+
+    LoadingCache<Object, Object> cache = CacheBuilder.newBuilder().build(loader);
+    Object key = new Object();
+    CacheStats stats = cache.stats();
+    assertEquals(0, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    assertSame(one, cache.getUnchecked(key));
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(1, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    cache.refresh(key);
+    checkLoggedCause(e);
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(1, stats.loadSuccessCount());
+    assertEquals(1, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    assertSame(one, cache.getUnchecked(key));
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(1, stats.loadSuccessCount());
+    assertEquals(1, stats.loadExceptionCount());
+    assertEquals(1, stats.hitCount());
+  }
+
+  public void testReloadFutureError() throws ExecutionException {
+    final Object one = new Object();
+    final Error e = new Error();
+    CacheLoader<Object, Object> loader = new CacheLoader<Object, Object>() {
+      @Override
+      public Object load(Object key) {
+        return one;
+      }
+
+      @Override
+      public ListenableFuture<Object> reload(Object key, Object oldValue) {
+        return Futures.immediateFailedFuture(e);
+      }
+    };
+
+    LoadingCache<Object, Object> cache = CacheBuilder.newBuilder().build(loader);
+    Object key = new Object();
+    CacheStats stats = cache.stats();
+    assertEquals(0, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    assertSame(one, cache.getUnchecked(key));
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(1, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    cache.refresh(key);
+    checkLoggedCause(e);
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(1, stats.loadSuccessCount());
+    assertEquals(1, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    assertSame(one, cache.getUnchecked(key));
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(1, stats.loadSuccessCount());
+    assertEquals(1, stats.loadExceptionCount());
+    assertEquals(1, stats.hitCount());
+  }
+
+  public void testRefreshError() {
+    final Object one = new Object();
+    final Error e = new Error();
+    FakeTicker ticker = new FakeTicker();
+    CacheLoader<Object, Object> loader = new CacheLoader<Object, Object>() {
+      @Override
+      public Object load(Object key) {
+        return one;
+      }
+
+      @Override
+      public ListenableFuture<Object> reload(Object key, Object oldValue) {
+        return Futures.immediateFailedFuture(e);
+      }
+    };
+
+    LoadingCache<Object, Object> cache = CacheBuilder.newBuilder()
+        .ticker(ticker)
+        .refreshAfterWrite(1, MILLISECONDS)
+        .build(loader);
+    Object key = new Object();
+    CacheStats stats = cache.stats();
+    assertEquals(0, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    assertSame(one, cache.getUnchecked(key));
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(1, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    ticker.advance(1, MILLISECONDS);
+    assertSame(one, cache.getUnchecked(key));
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(1, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(1, stats.hitCount());
+
+    ticker.advance(1, MILLISECONDS);
+    assertSame(one, cache.getUnchecked(key));
+    // refreshed
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(1, stats.loadSuccessCount());
+    assertEquals(1, stats.loadExceptionCount());
+    assertEquals(2, stats.hitCount());
+
+    ticker.advance(1, MILLISECONDS);
+    assertSame(one, cache.getUnchecked(key));
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(1, stats.loadSuccessCount());
+    assertEquals(2, stats.loadExceptionCount());
+    assertEquals(3, stats.hitCount());
+  }
+
+  public void testBulkLoadError() throws ExecutionException {
+    Error e = new Error();
+    CacheLoader<Object, Object> loader = errorLoader(e);
+    LoadingCache<Object, Object> cache = CacheBuilder.newBuilder()
+        .build(bulkLoader(loader));
+    CacheStats stats = cache.stats();
+    assertEquals(0, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    try {
+      cache.getAll(asList(new Object()));
+      fail();
+    } catch (ExecutionError expected) {
+      assertSame(e, expected.getCause());
+    }
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(1, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+  }
+
+  public void testLoadCheckedException() {
+    Exception e = new Exception();
+    CacheLoader<Object, Object> loader = exceptionLoader(e);
+    LoadingCache<Object, Object> cache = CacheBuilder.newBuilder().build(loader);
+    CacheStats stats = cache.stats();
+    assertEquals(0, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    try {
+      cache.get(new Object());
+      fail();
+    } catch (ExecutionException expected) {
+      assertSame(e, expected.getCause());
+    }
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(1, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    try {
+      cache.getUnchecked(new Object());
+      fail();
+    } catch (UncheckedExecutionException expected) {
+      assertSame(e, expected.getCause());
+    }
+    stats = cache.stats();
+    assertEquals(2, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(2, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    cache.refresh(new Object());
+    checkLoggedCause(e);
+    stats = cache.stats();
+    assertEquals(2, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(3, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    Exception callableException = new Exception();
+    try {
+      cache.get(new Object(), throwing(callableException));
+      fail();
+    } catch (ExecutionException expected) {
+      assertSame(callableException, expected.getCause());
+    }
+    stats = cache.stats();
+    assertEquals(3, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(4, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    try {
+      cache.getAll(asList(new Object()));
+      fail();
+    } catch (ExecutionException expected) {
+      assertSame(e, expected.getCause());
+    }
+    stats = cache.stats();
+    assertEquals(4, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(5, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+  }
+
+  public void testReloadCheckedException() {
+    final Object one = new Object();
+    final Exception e = new Exception();
+    CacheLoader<Object, Object> loader = new CacheLoader<Object, Object>() {
+      @Override
+      public Object load(Object key) {
+        return one;
+      }
+
+      @Override
+      public ListenableFuture<Object> reload(Object key, Object oldValue) throws Exception {
+        throw e;
+      }
+    };
+
+    LoadingCache<Object, Object> cache = CacheBuilder.newBuilder().build(loader);
+    Object key = new Object();
+    CacheStats stats = cache.stats();
+    assertEquals(0, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    assertSame(one, cache.getUnchecked(key));
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(1, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    cache.refresh(key);
+    checkLoggedCause(e);
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(1, stats.loadSuccessCount());
+    assertEquals(1, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    assertSame(one, cache.getUnchecked(key));
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(1, stats.loadSuccessCount());
+    assertEquals(1, stats.loadExceptionCount());
+    assertEquals(1, stats.hitCount());
+  }
+
+  public void testReloadFutureCheckedException() {
+    final Object one = new Object();
+    final Exception e = new Exception();
+    CacheLoader<Object, Object> loader = new CacheLoader<Object, Object>() {
+      @Override
+      public Object load(Object key) {
+        return one;
+      }
+
+      @Override
+      public ListenableFuture<Object> reload(Object key, Object oldValue) {
+        return Futures.immediateFailedFuture(e);
+      }
+    };
+
+    LoadingCache<Object, Object> cache = CacheBuilder.newBuilder().build(loader);
+    Object key = new Object();
+    CacheStats stats = cache.stats();
+    assertEquals(0, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    assertSame(one, cache.getUnchecked(key));
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(1, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    cache.refresh(key);
+    checkLoggedCause(e);
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(1, stats.loadSuccessCount());
+    assertEquals(1, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    assertSame(one, cache.getUnchecked(key));
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(1, stats.loadSuccessCount());
+    assertEquals(1, stats.loadExceptionCount());
+    assertEquals(1, stats.hitCount());
+  }
+
+  public void testRefreshCheckedException() {
+    final Object one = new Object();
+    final Exception e = new Exception();
+    FakeTicker ticker = new FakeTicker();
+    CacheLoader<Object, Object> loader = new CacheLoader<Object, Object>() {
+      @Override
+      public Object load(Object key) {
+        return one;
+      }
+
+      @Override
+      public ListenableFuture<Object> reload(Object key, Object oldValue) {
+        return Futures.immediateFailedFuture(e);
+      }
+    };
+
+    LoadingCache<Object, Object> cache = CacheBuilder.newBuilder()
+        .ticker(ticker)
+        .refreshAfterWrite(1, MILLISECONDS)
+        .build(loader);
+    Object key = new Object();
+    CacheStats stats = cache.stats();
+    assertEquals(0, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    assertSame(one, cache.getUnchecked(key));
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(1, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    ticker.advance(1, MILLISECONDS);
+    assertSame(one, cache.getUnchecked(key));
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(1, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(1, stats.hitCount());
+
+    ticker.advance(1, MILLISECONDS);
+    assertSame(one, cache.getUnchecked(key));
+    // refreshed
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(1, stats.loadSuccessCount());
+    assertEquals(1, stats.loadExceptionCount());
+    assertEquals(2, stats.hitCount());
+
+    ticker.advance(1, MILLISECONDS);
+    assertSame(one, cache.getUnchecked(key));
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(1, stats.loadSuccessCount());
+    assertEquals(2, stats.loadExceptionCount());
+    assertEquals(3, stats.hitCount());
+  }
+
+  public void testBulkLoadCheckedException() {
+    Exception e = new Exception();
+    CacheLoader<Object, Object> loader = exceptionLoader(e);
+    LoadingCache<Object, Object> cache = CacheBuilder.newBuilder()
+        .build(bulkLoader(loader));
+    CacheStats stats = cache.stats();
+    assertEquals(0, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    try {
+      cache.getAll(asList(new Object()));
+      fail();
+    } catch (ExecutionException expected) {
+      assertSame(e, expected.getCause());
+    }
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(1, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+  }
+
+  public void testLoadUncheckedException() throws ExecutionException {
+    Exception e = new RuntimeException();
+    CacheLoader<Object, Object> loader = exceptionLoader(e);
+    LoadingCache<Object, Object> cache = CacheBuilder.newBuilder().build(loader);
+    CacheStats stats = cache.stats();
+    assertEquals(0, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    try {
+      cache.get(new Object());
+      fail();
+    } catch (UncheckedExecutionException expected) {
+      assertSame(e, expected.getCause());
+    }
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(1, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    try {
+      cache.getUnchecked(new Object());
+      fail();
+    } catch (UncheckedExecutionException expected) {
+      assertSame(e, expected.getCause());
+    }
+    stats = cache.stats();
+    assertEquals(2, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(2, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    cache.refresh(new Object());
+    checkLoggedCause(e);
+    stats = cache.stats();
+    assertEquals(2, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(3, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    Exception callableException = new RuntimeException();
+    try {
+      cache.get(new Object(), throwing(callableException));
+      fail();
+    } catch (UncheckedExecutionException expected) {
+      assertSame(callableException, expected.getCause());
+    }
+    stats = cache.stats();
+    assertEquals(3, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(4, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    try {
+      cache.getAll(asList(new Object()));
+      fail();
+    } catch (UncheckedExecutionException expected) {
+      assertSame(e, expected.getCause());
+    }
+    stats = cache.stats();
+    assertEquals(4, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(5, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+  }
+
+  public void testReloadUncheckedException() throws ExecutionException {
+    final Object one = new Object();
+    final Exception e = new RuntimeException();
+    CacheLoader<Object, Object> loader = new CacheLoader<Object, Object>() {
+      @Override
+      public Object load(Object key) {
+        return one;
+      }
+
+      @Override
+      public ListenableFuture<Object> reload(Object key, Object oldValue) throws Exception {
+        throw e;
+      }
+    };
+
+    LoadingCache<Object, Object> cache = CacheBuilder.newBuilder().build(loader);
+    Object key = new Object();
+    CacheStats stats = cache.stats();
+    assertEquals(0, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    assertSame(one, cache.getUnchecked(key));
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(1, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    cache.refresh(key);
+    checkLoggedCause(e);
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(1, stats.loadSuccessCount());
+    assertEquals(1, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    assertSame(one, cache.getUnchecked(key));
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(1, stats.loadSuccessCount());
+    assertEquals(1, stats.loadExceptionCount());
+    assertEquals(1, stats.hitCount());
+  }
+
+  public void testReloadFutureUncheckedException() throws ExecutionException {
+    final Object one = new Object();
+    final Exception e = new RuntimeException();
+    CacheLoader<Object, Object> loader = new CacheLoader<Object, Object>() {
+      @Override
+      public Object load(Object key) {
+        return one;
+      }
+
+      @Override
+      public ListenableFuture<Object> reload(Object key, Object oldValue) {
+        return Futures.immediateFailedFuture(e);
+      }
+    };
+
+    LoadingCache<Object, Object> cache = CacheBuilder.newBuilder().build(loader);
+    Object key = new Object();
+    CacheStats stats = cache.stats();
+    assertEquals(0, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    assertSame(one, cache.getUnchecked(key));
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(1, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    cache.refresh(key);
+    checkLoggedCause(e);
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(1, stats.loadSuccessCount());
+    assertEquals(1, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    assertSame(one, cache.getUnchecked(key));
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(1, stats.loadSuccessCount());
+    assertEquals(1, stats.loadExceptionCount());
+    assertEquals(1, stats.hitCount());
+  }
+
+  public void testRefreshUncheckedException() {
+    final Object one = new Object();
+    final Exception e = new RuntimeException();
+    FakeTicker ticker = new FakeTicker();
+    CacheLoader<Object, Object> loader = new CacheLoader<Object, Object>() {
+      @Override
+      public Object load(Object key) {
+        return one;
+      }
+
+      @Override
+      public ListenableFuture<Object> reload(Object key, Object oldValue) {
+        return Futures.immediateFailedFuture(e);
+      }
+    };
+
+    LoadingCache<Object, Object> cache = CacheBuilder.newBuilder()
+        .ticker(ticker)
+        .refreshAfterWrite(1, MILLISECONDS)
+        .build(loader);
+    Object key = new Object();
+    CacheStats stats = cache.stats();
+    assertEquals(0, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    assertSame(one, cache.getUnchecked(key));
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(1, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    ticker.advance(1, MILLISECONDS);
+    assertSame(one, cache.getUnchecked(key));
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(1, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(1, stats.hitCount());
+
+    ticker.advance(1, MILLISECONDS);
+    assertSame(one, cache.getUnchecked(key));
+    // refreshed
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(1, stats.loadSuccessCount());
+    assertEquals(1, stats.loadExceptionCount());
+    assertEquals(2, stats.hitCount());
+
+    ticker.advance(1, MILLISECONDS);
+    assertSame(one, cache.getUnchecked(key));
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(1, stats.loadSuccessCount());
+    assertEquals(2, stats.loadExceptionCount());
+    assertEquals(3, stats.hitCount());
+  }
+
+  public void testBulkLoadUncheckedException() throws ExecutionException {
+    Exception e = new RuntimeException();
+    CacheLoader<Object, Object> loader = exceptionLoader(e);
+    LoadingCache<Object, Object> cache = CacheBuilder.newBuilder()
+        .build(bulkLoader(loader));
+    CacheStats stats = cache.stats();
+    assertEquals(0, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    try {
+      cache.getAll(asList(new Object()));
+      fail();
+    } catch (UncheckedExecutionException expected) {
+      assertSame(e, expected.getCause());
+    }
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(1, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+  }
+
+  public void testReloadAfterFailure() throws ExecutionException {
+    final AtomicInteger count = new AtomicInteger();
+    final Exception e = new IllegalStateException("exception to trigger failure on first load()");
+    CacheLoader<Integer, String> failOnceFunction = new CacheLoader<Integer, String>() {
+
+      @Override
+      public String load(Integer key) throws Exception {
+        if (count.getAndIncrement() == 0) {
+          throw e;
+        }
+        return key.toString();
+      }
+    };
+    CountingRemovalListener<Integer, String> removalListener = countingRemovalListener();
+    LoadingCache<Integer, String> cache = CacheBuilder.newBuilder()
+        .weakValues()
+        .removalListener(removalListener)
+        .build(failOnceFunction);
+
+    try {
+      cache.getUnchecked(1);
+      fail();
+    } catch (UncheckedExecutionException ue) {
+      assertSame(e, ue.getCause());
+    }
+
+    assertEquals("1", cache.getUnchecked(1));
+    assertEquals(0, removalListener.getCount());
+
+    count.set(0);
+    cache.refresh(2);
+    checkLoggedCause(e);
+
+    assertEquals("2", cache.getUnchecked(2));
+    assertEquals(0, removalListener.getCount());
+
+  }
+
+  public void testReloadAfterValueReclamation() throws InterruptedException, ExecutionException {
+    CountingLoader countingLoader = new CountingLoader();
+    LoadingCache<Object, Object> cache =
+        CacheBuilder.newBuilder().weakValues().build(countingLoader);
+    ConcurrentMap<Object, Object> map = cache.asMap();
+
+    int iterations = 10;
+    WeakReference<Object> ref = new WeakReference<Object>(null);
+    int expectedComputations = 0;
+    for (int i = 0; i < iterations; i++) {
+      // The entry should get garbage collected and recomputed.
+      Object oldValue = ref.get();
+      if (oldValue == null) {
+        expectedComputations++;
+      }
+      ref = new WeakReference<Object>(cache.getUnchecked(1));
+      oldValue = null;
+      Thread.sleep(i);
+      System.gc();
+    }
+    assertEquals(expectedComputations, countingLoader.getCount());
+
+    for (int i = 0; i < iterations; i++) {
+      // The entry should get garbage collected and recomputed.
+      Object oldValue = ref.get();
+      if (oldValue == null) {
+        expectedComputations++;
+      }
+      cache.refresh(1);
+      checkNothingLogged();
+      ref = new WeakReference<Object>(map.get(1));
+      oldValue = null;
+      Thread.sleep(i);
+      System.gc();
+    }
+    assertEquals(expectedComputations, countingLoader.getCount());
+  }
+
+  public void testReloadAfterSimulatedValueReclamation() throws ExecutionException {
+    CountingLoader countingLoader = new CountingLoader();
+    LoadingCache<Object, Object> cache = CacheBuilder.newBuilder()
+        .concurrencyLevel(1)
+        .weakValues()
+        .build(countingLoader);
+
+    Object key = new Object();
+    assertNotNull(cache.getUnchecked(key));
+
+    CacheTesting.simulateValueReclamation(cache, key);
+
+    // this blocks if computation can't deal with partially-collected values
+    assertNotNull(cache.getUnchecked(key));
+    assertEquals(1, cache.size());
+    assertEquals(2, countingLoader.getCount());
+
+    CacheTesting.simulateValueReclamation(cache, key);
+    cache.refresh(key);
+    checkNothingLogged();
+    assertEquals(1, cache.size());
+    assertEquals(3, countingLoader.getCount());
+  }
+
+  public void testReloadAfterSimulatedKeyReclamation() throws ExecutionException {
+    CountingLoader countingLoader = new CountingLoader();
+    LoadingCache<Object, Object> cache = CacheBuilder.newBuilder()
+        .concurrencyLevel(1)
+        .weakKeys()
+        .build(countingLoader);
+
+    Object key = new Object();
+    assertNotNull(cache.getUnchecked(key));
+    assertEquals(1, cache.size());
+
+    CacheTesting.simulateKeyReclamation(cache, key);
+
+    // this blocks if computation can't deal with partially-collected values
+    assertNotNull(cache.getUnchecked(key));
+    assertEquals(2, countingLoader.getCount());
+
+    CacheTesting.simulateKeyReclamation(cache, key);
+    cache.refresh(key);
+    checkNothingLogged();
+    assertEquals(3, countingLoader.getCount());
+  }
+
+  /**
+   * Make sure LoadingCache correctly wraps ExecutionExceptions and UncheckedExecutionExceptions.
+   */
+  public void testLoadingExceptionWithCause() {
+    final Exception cause = new Exception();
+    final UncheckedExecutionException uee = new UncheckedExecutionException(cause);
+    final ExecutionException ee = new ExecutionException(cause);
+
+    LoadingCache<Object, Object> cacheUnchecked =
+        CacheBuilder.newBuilder().build(exceptionLoader(uee));
+    LoadingCache<Object, Object> cacheChecked =
+        CacheBuilder.newBuilder().build(exceptionLoader(ee));
+
+    try {
+      cacheUnchecked.get(new Object());
+      fail();
+    } catch (ExecutionException e) {
+      fail();
+    } catch (UncheckedExecutionException caughtEe) {
+      assertSame(uee, caughtEe.getCause());
+    }
+
+    try {
+      cacheUnchecked.getUnchecked(new Object());
+      fail();
+    } catch (UncheckedExecutionException caughtUee) {
+      assertSame(uee, caughtUee.getCause());
+    }
+
+    cacheUnchecked.refresh(new Object());
+    checkLoggedCause(uee);
+
+    try {
+      cacheUnchecked.getAll(asList(new Object()));
+      fail();
+    } catch (ExecutionException e) {
+      fail();
+    } catch (UncheckedExecutionException caughtEe) {
+      assertSame(uee, caughtEe.getCause());
+    }
+
+    try {
+      cacheChecked.get(new Object());
+      fail();
+    } catch (ExecutionException caughtEe) {
+      assertSame(ee, caughtEe.getCause());
+    }
+
+    try {
+      cacheChecked.getUnchecked(new Object());
+      fail();
+    } catch (UncheckedExecutionException caughtUee) {
+      assertSame(ee, caughtUee.getCause());
+    }
+
+    cacheChecked.refresh(new Object());
+    checkLoggedCause(ee);
+
+    try {
+      cacheChecked.getAll(asList(new Object()));
+      fail();
+    } catch (ExecutionException caughtEe) {
+      assertSame(ee, caughtEe.getCause());
+    }
+  }
+
+  public void testBulkLoadingExceptionWithCause() {
+    final Exception cause = new Exception();
+    final UncheckedExecutionException uee = new UncheckedExecutionException(cause);
+    final ExecutionException ee = new ExecutionException(cause);
+
+    LoadingCache<Object, Object> cacheUnchecked =
+        CacheBuilder.newBuilder().build(bulkLoader(exceptionLoader(uee)));
+    LoadingCache<Object, Object> cacheChecked =
+        CacheBuilder.newBuilder().build(bulkLoader(exceptionLoader(ee)));
+
+    try {
+      cacheUnchecked.getAll(asList(new Object()));
+      fail();
+    } catch (ExecutionException e) {
+      fail();
+    } catch (UncheckedExecutionException caughtEe) {
+      assertSame(uee, caughtEe.getCause());
+    }
+
+    try {
+      cacheChecked.getAll(asList(new Object()));
+      fail();
+    } catch (ExecutionException caughtEe) {
+      assertSame(ee, caughtEe.getCause());
+    }
+  }
+
+  public void testConcurrentLoading() throws InterruptedException {
+    testConcurrentLoading(CacheBuilder.newBuilder());
+  }
+
+  public void testConcurrentExpirationLoading() throws InterruptedException {
+    testConcurrentLoading(CacheBuilder.newBuilder().expireAfterWrite(10, TimeUnit.SECONDS));
+  }
+
+  private static void testConcurrentLoading(CacheBuilder<Object, Object> builder)
+      throws InterruptedException {
+    testConcurrentLoadingDefault(builder);
+    testConcurrentLoadingNull(builder);
+    testConcurrentLoadingUncheckedException(builder);
+    testConcurrentLoadingCheckedException(builder);
+  }
+
+  /**
+   * On a successful concurrent computation, only one thread does the work, but all the threads get
+   * the same result.
+   */
+  private static void testConcurrentLoadingDefault(CacheBuilder<Object, Object> builder)
+      throws InterruptedException {
+
+    int count = 10;
+    final AtomicInteger callCount = new AtomicInteger();
+    final CountDownLatch startSignal = new CountDownLatch(count + 1);
+    final Object result = new Object();
+
+    LoadingCache<String, Object> cache = builder.build(
+        new CacheLoader<String, Object>() {
+          @Override public Object load(String key) throws InterruptedException {
+            callCount.incrementAndGet();
+            startSignal.await();
+            return result;
+          }
+        });
+
+    List<Object> resultArray = doConcurrentGet(cache, "bar", count, startSignal);
+
+    assertEquals(1, callCount.get());
+    for (int i = 0; i < count; i++) {
+      assertSame("result(" + i + ") didn't match expected", result, resultArray.get(i));
+    }
+  }
+
+  /**
+   * On a concurrent computation that returns null, all threads should get an
+   * InvalidCacheLoadException, with the loader only called once. The result should not be cached
+   * (a later request should call the loader again).
+   */
+  private static void testConcurrentLoadingNull(CacheBuilder<Object, Object> builder)
+      throws InterruptedException {
+
+    int count = 10;
+    final AtomicInteger callCount = new AtomicInteger();
+    final CountDownLatch startSignal = new CountDownLatch(count + 1);
+
+    LoadingCache<String, String> cache = builder.build(
+        new CacheLoader<String, String>() {
+          @Override public String load(String key) throws InterruptedException {
+            callCount.incrementAndGet();
+            startSignal.await();
+            return null;
+          }
+        });
+
+    List<Object> result = doConcurrentGet(cache, "bar", count, startSignal);
+
+    assertEquals(1, callCount.get());
+    for (int i = 0; i < count; i++) {
+      assertTrue(result.get(i) instanceof InvalidCacheLoadException);
+    }
+
+    // subsequent calls should call the loader again, not get the old exception
+    try {
+      cache.getUnchecked("bar");
+      fail();
+    } catch (InvalidCacheLoadException expected) {
+    }
+    assertEquals(2, callCount.get());
+  }
+
+  /**
+   * On a concurrent computation that throws an unchecked exception, all threads should get the
+   * (wrapped) exception, with the loader called only once. The result should not be cached (a later
+   * request should call the loader again).
+   */
+  private static void testConcurrentLoadingUncheckedException(
+      CacheBuilder<Object, Object> builder) throws InterruptedException {
+
+    int count = 10;
+    final AtomicInteger callCount = new AtomicInteger();
+    final CountDownLatch startSignal = new CountDownLatch(count + 1);
+    final RuntimeException e = new RuntimeException();
+
+    LoadingCache<String, String> cache = builder.build(
+        new CacheLoader<String, String>() {
+          @Override public String load(String key) throws InterruptedException {
+            callCount.incrementAndGet();
+            startSignal.await();
+            throw e;
+          }
+        });
+
+    List<Object> result = doConcurrentGet(cache, "bar", count, startSignal);
+
+    assertEquals(1, callCount.get());
+    for (int i = 0; i < count; i++) {
+      // doConcurrentGet alternates between calling getUnchecked and calling get, but an unchecked
+      // exception thrown by the loader is always wrapped as an UncheckedExecutionException.
+      assertTrue(result.get(i) instanceof UncheckedExecutionException);
+      assertSame(e, ((UncheckedExecutionException) result.get(i)).getCause());
+    }
+
+    // subsequent calls should call the loader again, not get the old exception
+    try {
+      cache.getUnchecked("bar");
+      fail();
+    } catch (UncheckedExecutionException expected) {
+    }
+    assertEquals(2, callCount.get());
+  }
+
+  /**
+   * On a concurrent computation that throws a checked exception, all threads should get the
+   * (wrapped) exception, with the loader called only once. The result should not be cached (a later
+   * request should call the loader again).
+   */
+  private static void testConcurrentLoadingCheckedException(
+      CacheBuilder<Object, Object> builder) throws InterruptedException {
+
+    int count = 10;
+    final AtomicInteger callCount = new AtomicInteger();
+    final CountDownLatch startSignal = new CountDownLatch(count + 1);
+    final IOException e = new IOException();
+
+    LoadingCache<String, String> cache = builder.build(
+        new CacheLoader<String, String>() {
+          @Override public String load(String key) throws IOException, InterruptedException {
+            callCount.incrementAndGet();
+            startSignal.await();
+            throw e;
+          }
+        });
+
+    List<Object> result = doConcurrentGet(cache, "bar", count, startSignal);
+
+    assertEquals(1, callCount.get());
+    for (int i = 0; i < count; i++) {
+      // doConcurrentGet alternates between calling getUnchecked and calling get. If we call get(),
+      // we should get an ExecutionException; if we call getUnchecked(), we should get an
+      // UncheckedExecutionException.
+      int mod = i % 3;
+      if (mod == 0 || mod == 2) {
+        assertTrue(result.get(i) instanceof ExecutionException);
+        assertSame(e, ((ExecutionException) result.get(i)).getCause());
+      } else {
+        assertTrue(result.get(i) instanceof UncheckedExecutionException);
+        assertSame(e, ((UncheckedExecutionException) result.get(i)).getCause());
+      }
+    }
+
+    // subsequent calls should call the loader again, not get the old exception
+    try {
+      cache.getUnchecked("bar");
+      fail();
+    } catch (UncheckedExecutionException expected) {
+    }
+    assertEquals(2, callCount.get());
+  }
+
+  /**
+   * Test-helper method that performs {@code nThreads} concurrent calls to {@code cache.get(key)}
+   * or {@code cache.getUnchecked(key)}, and returns a List containing each of the results. The
+   * result for any given call to {@code cache.get} or {@code cache.getUnchecked} is the value
+   * returned, or the exception thrown.
+   *
+   * <p>As we iterate from {@code 0} to {@code nThreads}, threads with an even index will call
+   * {@code getUnchecked}, and threads with an odd index will call {@code get}. If the cache throws
+   * exceptions, this difference may be visible in the returned List.
+   */
+  private static <K> List<Object> doConcurrentGet(final LoadingCache<K, ?> cache, final K key,
+      int nThreads, final CountDownLatch gettersStartedSignal) throws InterruptedException {
+
+    final AtomicReferenceArray<Object> result = new AtomicReferenceArray<Object>(nThreads);
+    final CountDownLatch gettersComplete = new CountDownLatch(nThreads);
+    for (int i = 0; i < nThreads; i++) {
+      final int index = i;
+      Thread thread = new Thread(new Runnable() {
+        @Override public void run() {
+          gettersStartedSignal.countDown();
+          Object value = null;
+          try {
+            int mod = index % 3;
+            if (mod == 0) {
+              value = cache.get(key);
+            } else if (mod == 1) {
+              value = cache.getUnchecked(key);
+            } else {
+              cache.refresh(key);
+              value = cache.get(key);
+            }
+            result.set(index, value);
+          } catch (Throwable t) {
+            result.set(index, t);
+          }
+          gettersComplete.countDown();
+        }
+      });
+      thread.start();
+      // we want to wait until each thread is WAITING - one thread waiting inside CacheLoader.load
+      // (in startSignal.await()), and the others waiting for that thread's result.
+      while (thread.isAlive() && thread.getState() != Thread.State.WAITING) {
+        Thread.yield();
+      }
+    }
+    gettersStartedSignal.countDown();
+    gettersComplete.await();
+
+    List<Object> resultList = Lists.newArrayListWithExpectedSize(nThreads);
+    for (int i = 0; i < nThreads; i++) {
+      resultList.add(result.get(i));
+    }
+    return resultList;
+  }
+
+  public void testAsMapDuringLoading() throws InterruptedException, ExecutionException {
+    final CountDownLatch getStartedSignal = new CountDownLatch(2);
+    final CountDownLatch letGetFinishSignal = new CountDownLatch(1);
+    final CountDownLatch getFinishedSignal = new CountDownLatch(2);
+    final String getKey = "get";
+    final String refreshKey = "refresh";
+    final String suffix = "Suffix";
+
+    CacheLoader<String, String> computeFunction = new CacheLoader<String, String>() {
+      @Override
+      public String load(String key) throws InterruptedException {
+        getStartedSignal.countDown();
+        letGetFinishSignal.await();
+        return key + suffix;
+      }
+    };
+
+    final LoadingCache<String, String> cache = CacheBuilder.newBuilder()
+        .build(computeFunction);
+    ConcurrentMap<String,String> map = cache.asMap();
+    map.put(refreshKey, refreshKey);
+    assertEquals(1, map.size());
+    assertFalse(map.containsKey(getKey));
+    assertSame(refreshKey, map.get(refreshKey));
+
+    new Thread() {
+      @Override
+      public void run() {
+        cache.getUnchecked(getKey);
+        getFinishedSignal.countDown();
+      }
+    }.start();
+    new Thread() {
+      @Override
+      public void run() {
+        cache.refresh(refreshKey);
+        getFinishedSignal.countDown();
+      }
+    }.start();
+
+    getStartedSignal.await();
+
+    // computation is in progress; asMap shouldn't have changed
+    assertEquals(1, map.size());
+    assertFalse(map.containsKey(getKey));
+    assertSame(refreshKey, map.get(refreshKey));
+
+    // let computation complete
+    letGetFinishSignal.countDown();
+    getFinishedSignal.await();
+    checkNothingLogged();
+
+    // asMap view should have been updated
+    assertEquals(2, cache.size());
+    assertEquals(getKey + suffix, map.get(getKey));
+    assertEquals(refreshKey + suffix, map.get(refreshKey));
+  }
+
+  public void testInvalidateDuringLoading() throws InterruptedException, ExecutionException {
+    // computation starts; invalidate() is called on the key being computed, computation finishes
+    final CountDownLatch computationStarted = new CountDownLatch(2);
+    final CountDownLatch letGetFinishSignal = new CountDownLatch(1);
+    final CountDownLatch getFinishedSignal = new CountDownLatch(2);
+    final String getKey = "get";
+    final String refreshKey = "refresh";
+    final String suffix = "Suffix";
+
+    CacheLoader<String, String> computeFunction = new CacheLoader<String, String>() {
+      @Override
+      public String load(String key) throws InterruptedException {
+        computationStarted.countDown();
+        letGetFinishSignal.await();
+        return key + suffix;
+      }
+    };
+
+    final LoadingCache<String, String> cache = CacheBuilder.newBuilder()
+        .build(computeFunction);
+    ConcurrentMap<String,String> map = cache.asMap();
+    map.put(refreshKey, refreshKey);
+
+    new Thread() {
+      @Override
+      public void run() {
+        cache.getUnchecked(getKey);
+        getFinishedSignal.countDown();
+      }
+    }.start();
+    new Thread() {
+      @Override
+      public void run() {
+        cache.refresh(refreshKey);
+        getFinishedSignal.countDown();
+      }
+    }.start();
+
+    computationStarted.await();
+    cache.invalidate(getKey);
+    cache.invalidate(refreshKey);
+    assertFalse(map.containsKey(getKey));
+    assertFalse(map.containsKey(refreshKey));
+
+    // let computation complete
+    letGetFinishSignal.countDown();
+    getFinishedSignal.await();
+    checkNothingLogged();
+
+    // results should be visible
+    assertEquals(2, cache.size());
+    assertEquals(getKey + suffix, map.get(getKey));
+    assertEquals(refreshKey + suffix, map.get(refreshKey));
+  }
+
+  public void testExpandDuringLoading() throws InterruptedException {
+    final int count = 3;
+    final AtomicInteger callCount = new AtomicInteger();
+    // tells the computing thread when to start computing
+    final CountDownLatch computeSignal = new CountDownLatch(1);
+    // tells the main thread when computation is pending
+    final CountDownLatch secondSignal = new CountDownLatch(1);
+    // tells the main thread when the second get has started
+    final CountDownLatch thirdSignal = new CountDownLatch(1);
+    // tells the main thread when the third get has started
+    final CountDownLatch fourthSignal = new CountDownLatch(1);
+    // tells the test when all gets have returned
+    final CountDownLatch doneSignal = new CountDownLatch(count);
+
+    CacheLoader<String, String> computeFunction = new CacheLoader<String, String>() {
+      @Override
+      public String load(String key) throws InterruptedException {
+        callCount.incrementAndGet();
+        secondSignal.countDown();
+        computeSignal.await();
+        return key + "foo";
+      }
+    };
+
+    final LoadingCache<String, String> cache = CacheBuilder.newBuilder()
+        .weakKeys()
+        .build(computeFunction);
+
+    final AtomicReferenceArray<String> result = new AtomicReferenceArray<String>(count);
+
+    final String key = "bar";
+
+    // start computing thread
+    new Thread() {
+      @Override
+      public void run() {
+        result.set(0, cache.getUnchecked(key));
+        doneSignal.countDown();
+      }
+    }.start();
+
+    // wait for computation to start
+    secondSignal.await();
+
+    // start waiting thread
+    new Thread() {
+      @Override
+      public void run() {
+        thirdSignal.countDown();
+        result.set(1, cache.getUnchecked(key));
+        doneSignal.countDown();
+      }
+    }.start();
+
+    // give the second get a chance to run; it is okay for this to be racy
+    // as the end result should be the same either way
+    thirdSignal.await();
+    Thread.yield();
+
+    // Expand!
+    CacheTesting.forceExpandSegment(cache, key);
+
+    // start another waiting thread
+    new Thread() {
+      @Override
+      public void run() {
+        fourthSignal.countDown();
+        result.set(2, cache.getUnchecked(key));
+        doneSignal.countDown();
+      }
+    }.start();
+
+    // give the third get a chance to run; it is okay for this to be racy
+    // as the end result should be the same either way
+    fourthSignal.await();
+    Thread.yield();
+
+    // let computation finish
+    computeSignal.countDown();
+    doneSignal.await();
+
+    assertTrue(callCount.get() == 1);
+    assertEquals("barfoo", result.get(0));
+    assertEquals("barfoo", result.get(1));
+    assertEquals("barfoo", result.get(2));
+    assertEquals("barfoo", cache.getUnchecked(key));
+  }
+
+  public void testExpandDuringRefresh() throws InterruptedException, ExecutionException {
+    final AtomicInteger callCount = new AtomicInteger();
+    // tells the computing thread when to start computing
+    final CountDownLatch computeSignal = new CountDownLatch(1);
+    // tells the main thread when computation is pending
+    final CountDownLatch secondSignal = new CountDownLatch(1);
+    // tells the main thread when the second get has started
+    final CountDownLatch thirdSignal = new CountDownLatch(1);
+    // tells the main thread when the third get has started
+    final CountDownLatch fourthSignal = new CountDownLatch(1);
+    // tells the test when all gets have returned
+    final CountDownLatch doneSignal = new CountDownLatch(3);
+    final String suffix = "Suffix";
+
+    CacheLoader<String, String> computeFunction = new CacheLoader<String, String>() {
+      @Override
+      public String load(String key) throws InterruptedException {
+        callCount.incrementAndGet();
+        secondSignal.countDown();
+        computeSignal.await();
+        return key + suffix;
+      }
+    };
+
+    final AtomicReferenceArray<String> result = new AtomicReferenceArray<String>(2);
+
+    final LoadingCache<String, String> cache = CacheBuilder.newBuilder()
+        .build(computeFunction);
+    final String key = "bar";
+    cache.asMap().put(key, key);
+
+    // start computing thread
+    new Thread() {
+      @Override
+      public void run() {
+        cache.refresh(key);
+        doneSignal.countDown();
+      }
+    }.start();
+
+    // wait for computation to start
+    secondSignal.await();
+    checkNothingLogged();
+
+    // start waiting thread
+    new Thread() {
+      @Override
+      public void run() {
+        thirdSignal.countDown();
+        result.set(0, cache.getUnchecked(key));
+        doneSignal.countDown();
+      }
+    }.start();
+
+    // give the second get a chance to run; it is okay for this to be racy
+    // as the end result should be the same either way
+    thirdSignal.await();
+    Thread.yield();
+
+    // Expand!
+    CacheTesting.forceExpandSegment(cache, key);
+
+    // start another waiting thread
+    new Thread() {
+      @Override
+      public void run() {
+        fourthSignal.countDown();
+        result.set(1, cache.getUnchecked(key));
+        doneSignal.countDown();
+      }
+    }.start();
+
+    // give the third get a chance to run; it is okay for this to be racy
+    // as the end result should be the same either way
+    fourthSignal.await();
+    Thread.yield();
+
+    // let computation finish
+    computeSignal.countDown();
+    doneSignal.await();
+
+    assertTrue(callCount.get() == 1);
+    assertEquals(key, result.get(0));
+    assertEquals(key, result.get(1));
+    assertEquals(key + suffix, cache.getUnchecked(key));
+  }
+
+  static <T> Callable<T> throwing(final Exception exception) {
+    return new Callable<T>() {
+      @Override public T call() throws Exception {
+        throw exception;
+      }
+    };
+  }
+}
diff --git a/guava-tests/test/com/google/common/cache/CacheManualTest.java b/guava-tests/test/com/google/common/cache/CacheManualTest.java
new file mode 100644
index 0000000..d8db9b6
--- /dev/null
+++ b/guava-tests/test/com/google/common/cache/CacheManualTest.java
@@ -0,0 +1,155 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.cache;
+
+import static java.util.Arrays.asList;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+
+import junit.framework.TestCase;
+
+/**
+ * @author Charles Fry
+ */
+public class CacheManualTest extends TestCase {
+
+  public void testGetIfPresent() {
+    Cache<Object, Object> cache = CacheBuilder.newBuilder().build();
+    CacheStats stats = cache.stats();
+    assertEquals(0, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    Object one = new Object();
+    Object two = new Object();
+
+    assertNull(cache.getIfPresent(one));
+    stats = cache.stats();
+    assertEquals(1, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+    assertNull(cache.asMap().get(one));
+    assertFalse(cache.asMap().containsKey(one));
+    assertFalse(cache.asMap().containsValue(two));
+
+    assertNull(cache.getIfPresent(two));
+    stats = cache.stats();
+    assertEquals(2, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+    assertNull(cache.asMap().get(two));
+    assertFalse(cache.asMap().containsKey(two));
+    assertFalse(cache.asMap().containsValue(one));
+
+    cache.put(one, two);
+
+    assertSame(two, cache.getIfPresent(one));
+    stats = cache.stats();
+    assertEquals(2, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(1, stats.hitCount());
+    assertSame(two, cache.asMap().get(one));
+    assertTrue(cache.asMap().containsKey(one));
+    assertTrue(cache.asMap().containsValue(two));
+
+    assertNull(cache.getIfPresent(two));
+    stats = cache.stats();
+    assertEquals(3, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(1, stats.hitCount());
+    assertNull(cache.asMap().get(two));
+    assertFalse(cache.asMap().containsKey(two));
+    assertFalse(cache.asMap().containsValue(one));
+
+    cache.put(two, one);
+
+    assertSame(two, cache.getIfPresent(one));
+    stats = cache.stats();
+    assertEquals(3, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(2, stats.hitCount());
+    assertSame(two, cache.asMap().get(one));
+    assertTrue(cache.asMap().containsKey(one));
+    assertTrue(cache.asMap().containsValue(two));
+
+    assertSame(one, cache.getIfPresent(two));
+    stats = cache.stats();
+    assertEquals(3, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(3, stats.hitCount());
+    assertSame(one, cache.asMap().get(two));
+    assertTrue(cache.asMap().containsKey(two));
+    assertTrue(cache.asMap().containsValue(one));
+  }
+
+  public void testGetAllPresent() {
+    Cache<Integer, Integer> cache = CacheBuilder.newBuilder().build();
+    CacheStats stats = cache.stats();
+    assertEquals(0, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    assertEquals(ImmutableMap.of(), cache.getAllPresent(ImmutableList.<Integer>of()));
+    stats = cache.stats();
+    assertEquals(0, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    assertEquals(ImmutableMap.of(), cache.getAllPresent(asList(1, 2, 3)));
+    stats = cache.stats();
+    assertEquals(3, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(0, stats.hitCount());
+
+    cache.put(2, 22);
+
+    assertEquals(ImmutableMap.of(2, 22), cache.getAllPresent(asList(1, 2, 3)));
+    stats = cache.stats();
+    assertEquals(5, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(1, stats.hitCount());
+
+    cache.put(3, 33);
+
+    assertEquals(ImmutableMap.of(2, 22, 3, 33), cache.getAllPresent(asList(1, 2, 3)));
+    stats = cache.stats();
+    assertEquals(6, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(3, stats.hitCount());
+
+    cache.put(1, 11);
+
+    assertEquals(ImmutableMap.of(1, 11, 2, 22, 3, 33), cache.getAllPresent(asList(1, 2, 3)));
+    stats = cache.stats();
+    assertEquals(6, stats.missCount());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(6, stats.hitCount());
+  }
+
+}
diff --git a/guava-tests/test/com/google/common/cache/CacheReferencesTest.java b/guava-tests/test/com/google/common/cache/CacheReferencesTest.java
new file mode 100644
index 0000000..ce74b67
--- /dev/null
+++ b/guava-tests/test/com/google/common/cache/CacheReferencesTest.java
@@ -0,0 +1,206 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.cache;
+
+import static com.google.common.cache.LocalCache.Strength.STRONG;
+import static com.google.common.cache.TestingRemovalListeners.countingRemovalListener;
+import static com.google.common.collect.Maps.immutableEntry;
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import com.google.common.base.Function;
+import com.google.common.cache.LocalCache.Strength;
+import com.google.common.cache.TestingRemovalListeners.CountingRemovalListener;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Iterables;
+
+import junit.framework.TestCase;
+
+import java.lang.ref.WeakReference;
+
+/**
+ * Tests of basic {@link LoadingCache} operations with all possible combinations of key & value
+ * strengths.
+ *
+ * @author mike nonemacher
+ */
+public class CacheReferencesTest extends TestCase {
+
+  private static final CacheLoader<Key,String> KEY_TO_STRING_LOADER =
+      new CacheLoader<Key, String>() {
+        @Override public String load(Key key) {
+          return key.toString();
+        }
+      };
+
+  private CacheBuilderFactory factoryWithAllKeyStrengths() {
+    return new CacheBuilderFactory()
+        .withKeyStrengths(ImmutableSet.of(STRONG, Strength.WEAK))
+        .withValueStrengths(ImmutableSet.of(STRONG, Strength.WEAK, Strength.SOFT));
+  }
+
+  private Iterable<LoadingCache<Key, String>> caches() {
+    CacheBuilderFactory factory = factoryWithAllKeyStrengths();
+    return Iterables.transform(factory.buildAllPermutations(),
+        new Function<CacheBuilder<Object, Object>, LoadingCache<Key, String>>() {
+          @Override public LoadingCache<Key, String> apply(CacheBuilder<Object, Object> builder) {
+            return builder.build(KEY_TO_STRING_LOADER);
+          }
+        });
+  }
+
+  public void testContainsKeyAndValue() {
+    for (LoadingCache<Key, String> cache : caches()) {
+      // maintain strong refs so these won't be collected, regardless of cache's key/value strength
+      Key key = new Key(1);
+      String value = key.toString();
+      assertSame(value, cache.getUnchecked(key));
+      assertTrue(cache.asMap().containsKey(key));
+      assertTrue(cache.asMap().containsValue(value));
+      assertEquals(1, cache.size());
+    }
+  }
+
+  public void testClear() {
+    for (LoadingCache<Key, String> cache : caches()) {
+      Key key = new Key(1);
+      String value = key.toString();
+      assertSame(value, cache.getUnchecked(key));
+      assertFalse(cache.asMap().isEmpty());
+      cache.invalidateAll();
+      assertEquals(0, cache.size());
+      assertTrue(cache.asMap().isEmpty());
+      assertFalse(cache.asMap().containsKey(key));
+      assertFalse(cache.asMap().containsValue(value));
+    }
+  }
+
+  public void testKeySetEntrySetValues() {
+    for (LoadingCache<Key, String> cache : caches()) {
+      Key key1 = new Key(1);
+      String value1 = key1.toString();
+      Key key2 = new Key(2);
+      String value2 = key2.toString();
+      assertSame(value1, cache.getUnchecked(key1));
+      assertSame(value2, cache.getUnchecked(key2));
+      assertEquals(ImmutableSet.of(key1, key2), cache.asMap().keySet());
+      ASSERT.that(cache.asMap().values()).hasContentsAnyOrder(value1, value2);
+      assertEquals(ImmutableSet.of(immutableEntry(key1, value1), immutableEntry(key2, value2)),
+          cache.asMap().entrySet());
+    }
+  }
+
+  public void testInvalidate() {
+    for (LoadingCache<Key, String> cache : caches()) {
+      Key key1 = new Key(1);
+      String value1 = key1.toString();
+      Key key2 = new Key(2);
+      String value2 = key2.toString();
+      assertSame(value1, cache.getUnchecked(key1));
+      assertSame(value2, cache.getUnchecked(key2));
+      cache.invalidate(key1);
+      assertFalse(cache.asMap().containsKey(key1));
+      assertTrue(cache.asMap().containsKey(key2));
+      assertEquals(1, cache.size());
+      assertEquals(ImmutableSet.of(key2), cache.asMap().keySet());
+      ASSERT.that(cache.asMap().values()).hasContentsAnyOrder(value2);
+      assertEquals(ImmutableSet.of(immutableEntry(key2, value2)), cache.asMap().entrySet());
+    }
+  }
+
+  public void testCleanupOnReferenceCollection() {
+    for (CacheBuilder<Object, Object> builder
+        : factoryWithAllKeyStrengths().buildAllPermutations()) {
+      if (builder.keyStrength == STRONG && builder.valueStrength == STRONG) {
+        continue;
+      }
+      CountingRemovalListener<Integer, String> removalListener = countingRemovalListener();
+      CacheLoader<Integer, String> toStringLoader =
+          new CacheLoader<Integer, String>() {
+            @Override public String load(Integer key) {
+              return key.toString();
+            }
+          };
+      LoadingCache<Integer, String> cache =
+          builder.removalListener(removalListener).build(toStringLoader);
+
+      // ints in [-128, 127] have their wrappers precomputed and cached, so they won't be GCed
+      Integer key1 = 1001;
+      Integer key2 = 1002;
+      String value1 = cache.getUnchecked(key1);
+      String value2 = cache.getUnchecked(key2);
+      // make (key1, value1) eligible for collection
+      key1 = null;
+      value1 = null;
+      assertCleanup(cache, removalListener);
+      // make sure the GC isn't going to see key2 or value2 as dead in assertCleanup
+      assertSame(value2, cache.getUnchecked(key2));
+    }
+  }
+
+  private void assertCleanup(LoadingCache<Integer, String> cache,
+      CountingRemovalListener<Integer, String> removalListener) {
+
+    // initialSize will most likely be 2, but it's possible for the GC to have already run, so we'll
+    // observe a size of 1
+    long initialSize = cache.size();
+    assertTrue(initialSize == 1 || initialSize == 2);
+
+    // wait up to 5s
+    byte[] filler = new byte[1024];
+    for (int i = 0; i < 500; i++) {
+      System.gc();
+
+      CacheTesting.drainReferenceQueues(cache);
+      if (cache.size() == 1) {
+        break;
+      }
+      try {
+        Thread.sleep(10);
+      } catch (InterruptedException e) { /* ignore */}
+      try {
+        // Fill up heap so soft references get cleared.
+        filler = new byte[Math.max(filler.length, filler.length * 2)];
+      } catch (OutOfMemoryError e) {}
+    }
+
+    CacheTesting.processPendingNotifications(cache);
+    assertEquals(1, cache.size());
+    assertEquals(1, removalListener.getCount());
+  }
+
+  // A simple type whose .toString() will return the same value each time, but without maintaining
+  // a strong reference to that value.
+  static class Key {
+    private final int value;
+    private WeakReference<String> toString;
+
+    Key(int value) {
+      this.value = value;
+    }
+
+    @Override public synchronized String toString() {
+      String s;
+      if (toString != null) {
+        s = toString.get();
+        if (s != null) {
+          return s;
+        }
+      }
+      s = Integer.toString(value);
+      toString = new WeakReference<String>(s);
+      return s;
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/cache/CacheRefreshTest.java b/guava-tests/test/com/google/common/cache/CacheRefreshTest.java
new file mode 100644
index 0000000..8a4ee44
--- /dev/null
+++ b/guava-tests/test/com/google/common/cache/CacheRefreshTest.java
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.cache;
+
+import static com.google.common.cache.TestingCacheLoaders.incrementingLoader;
+import static java.util.concurrent.TimeUnit.MILLISECONDS;
+
+import com.google.common.cache.TestingCacheLoaders.IncrementingLoader;
+import com.google.common.testing.FakeTicker;
+
+import junit.framework.TestCase;
+
+/**
+ * Tests relating to automatic cache refreshing.
+ *
+ * @author Charles Fry
+ */
+public class CacheRefreshTest extends TestCase {
+  public void testAutoRefresh() {
+    FakeTicker ticker = new FakeTicker();
+    IncrementingLoader loader = incrementingLoader();
+    LoadingCache<Integer, Integer> cache = CacheBuilder.newBuilder()
+        .refreshAfterWrite(3, MILLISECONDS)
+        .expireAfterWrite(6, MILLISECONDS)
+        .lenientParsing()
+        .ticker(ticker)
+        .build(loader);
+    int expectedLoads = 0;
+    int expectedReloads = 0;
+    for (int i = 0; i < 3; i++) {
+      assertEquals(Integer.valueOf(i), cache.getUnchecked(i));
+      expectedLoads++;
+      assertEquals(expectedLoads, loader.getLoadCount());
+      assertEquals(expectedReloads, loader.getReloadCount());
+      ticker.advance(1, MILLISECONDS);
+    }
+
+    assertEquals(Integer.valueOf(0), cache.getUnchecked(0));
+    assertEquals(Integer.valueOf(1), cache.getUnchecked(1));
+    assertEquals(Integer.valueOf(2), cache.getUnchecked(2));
+    assertEquals(expectedLoads, loader.getLoadCount());
+    assertEquals(expectedReloads, loader.getReloadCount());
+
+    // refresh 0
+    ticker.advance(1, MILLISECONDS);
+    assertEquals(Integer.valueOf(1), cache.getUnchecked(0));
+    expectedReloads++;
+    assertEquals(Integer.valueOf(1), cache.getUnchecked(1));
+    assertEquals(Integer.valueOf(2), cache.getUnchecked(2));
+    assertEquals(expectedLoads, loader.getLoadCount());
+    assertEquals(expectedReloads, loader.getReloadCount());
+
+    // write to 1 to delay its refresh
+    cache.asMap().put(1, -1);
+    ticker.advance(1, MILLISECONDS);
+    assertEquals(Integer.valueOf(1), cache.getUnchecked(0));
+    assertEquals(Integer.valueOf(-1), cache.getUnchecked(1));
+    assertEquals(Integer.valueOf(2), cache.getUnchecked(2));
+    assertEquals(expectedLoads, loader.getLoadCount());
+    assertEquals(expectedReloads, loader.getReloadCount());
+
+    // refresh 2
+    ticker.advance(1, MILLISECONDS);
+    assertEquals(Integer.valueOf(1), cache.getUnchecked(0));
+    assertEquals(Integer.valueOf(-1), cache.getUnchecked(1));
+    assertEquals(Integer.valueOf(3), cache.getUnchecked(2));
+    expectedReloads++;
+    assertEquals(expectedLoads, loader.getLoadCount());
+    assertEquals(expectedReloads, loader.getReloadCount());
+
+    ticker.advance(1, MILLISECONDS);
+    assertEquals(Integer.valueOf(1), cache.getUnchecked(0));
+    assertEquals(Integer.valueOf(-1), cache.getUnchecked(1));
+    assertEquals(Integer.valueOf(3), cache.getUnchecked(2));
+    assertEquals(expectedLoads, loader.getLoadCount());
+    assertEquals(expectedReloads, loader.getReloadCount());
+
+    // refresh 0 and 1
+    ticker.advance(1, MILLISECONDS);
+    assertEquals(Integer.valueOf(2), cache.getUnchecked(0));
+    expectedReloads++;
+    assertEquals(Integer.valueOf(0), cache.getUnchecked(1));
+    expectedReloads++;
+    assertEquals(Integer.valueOf(3), cache.getUnchecked(2));
+    assertEquals(expectedLoads, loader.getLoadCount());
+    assertEquals(expectedReloads, loader.getReloadCount());
+  }
+}
diff --git a/guava-tests/test/com/google/common/cache/CacheStatsTest.java b/guava-tests/test/com/google/common/cache/CacheStatsTest.java
new file mode 100644
index 0000000..4437cf4
--- /dev/null
+++ b/guava-tests/test/com/google/common/cache/CacheStatsTest.java
@@ -0,0 +1,101 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.cache;
+
+import junit.framework.TestCase;
+
+/**
+ * Unit test for {@link CacheStats}.
+ *
+ * @author Charles Fry
+ */
+public class CacheStatsTest extends TestCase {
+
+  public void testEmpty() {
+    CacheStats stats = new CacheStats(0, 0, 0, 0, 0, 0);
+    assertEquals(0, stats.requestCount());
+    assertEquals(0, stats.hitCount());
+    assertEquals(1.0, stats.hitRate());
+    assertEquals(0, stats.missCount());
+    assertEquals(0.0, stats.missRate());
+    assertEquals(0, stats.loadSuccessCount());
+    assertEquals(0, stats.loadExceptionCount());
+    assertEquals(0.0, stats.loadExceptionRate());
+    assertEquals(0, stats.loadCount());
+    assertEquals(0, stats.totalLoadTime());
+    assertEquals(0.0, stats.averageLoadPenalty());
+    assertEquals(0, stats.evictionCount());
+  }
+
+  public void testSingle() {
+    CacheStats stats = new CacheStats(11, 13, 17, 19, 23, 27);
+    assertEquals(24, stats.requestCount());
+    assertEquals(11, stats.hitCount());
+    assertEquals(11.0/24, stats.hitRate());
+    assertEquals(13, stats.missCount());
+    assertEquals(13.0/24, stats.missRate());
+    assertEquals(17, stats.loadSuccessCount());
+    assertEquals(19, stats.loadExceptionCount());
+    assertEquals(19.0/36, stats.loadExceptionRate());
+    assertEquals(17 + 19, stats.loadCount());
+    assertEquals(23, stats.totalLoadTime());
+    assertEquals(23.0/(17 + 19), stats.averageLoadPenalty());
+    assertEquals(27, stats.evictionCount());
+  }
+
+  public void testMinus() {
+    CacheStats one = new CacheStats(11, 13, 17, 19, 23, 27);
+    CacheStats two = new CacheStats(53, 47, 43, 41, 37, 31);
+
+    CacheStats diff = two.minus(one);
+    assertEquals(76, diff.requestCount());
+    assertEquals(42, diff.hitCount());
+    assertEquals(42.0/76, diff.hitRate());
+    assertEquals(34, diff.missCount());
+    assertEquals(34.0/76, diff.missRate());
+    assertEquals(26, diff.loadSuccessCount());
+    assertEquals(22, diff.loadExceptionCount());
+    assertEquals(22.0/48, diff.loadExceptionRate());
+    assertEquals(26 + 22, diff.loadCount());
+    assertEquals(14, diff.totalLoadTime());
+    assertEquals(14.0/(26 + 22), diff.averageLoadPenalty());
+    assertEquals(4, diff.evictionCount());
+
+    assertEquals(new CacheStats(0, 0, 0, 0, 0, 0), one.minus(two));
+  }
+
+  public void testPlus() {
+    CacheStats one = new CacheStats(11, 13, 15, 13, 11, 9);
+    CacheStats two = new CacheStats(53, 47, 41, 39, 37, 35);
+
+    CacheStats sum = two.plus(one);
+    assertEquals(124, sum.requestCount());
+    assertEquals(64, sum.hitCount());
+    assertEquals(64.0/124, sum.hitRate());
+    assertEquals(60, sum.missCount());
+    assertEquals(60.0/124, sum.missRate());
+    assertEquals(56, sum.loadSuccessCount());
+    assertEquals(52, sum.loadExceptionCount());
+    assertEquals(52.0/108, sum.loadExceptionRate());
+    assertEquals(56 + 52, sum.loadCount());
+    assertEquals(48, sum.totalLoadTime());
+    assertEquals(48.0/(56 + 52), sum.averageLoadPenalty());
+    assertEquals(44, sum.evictionCount());
+
+    assertEquals(sum, one.plus(two));
+  }
+}
diff --git a/guava-tests/test/com/google/common/cache/CacheTesting.java b/guava-tests/test/com/google/common/cache/CacheTesting.java
new file mode 100644
index 0000000..febd766
--- /dev/null
+++ b/guava-tests/test/com/google/common/cache/CacheTesting.java
@@ -0,0 +1,490 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.cache;
+
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertFalse;
+import static junit.framework.Assert.assertNotNull;
+import static junit.framework.Assert.assertNotSame;
+import static junit.framework.Assert.assertNull;
+import static junit.framework.Assert.assertSame;
+import static junit.framework.Assert.assertTrue;
+
+import com.google.common.base.Preconditions;
+import com.google.common.cache.LocalCache.LocalLoadingCache;
+import com.google.common.cache.LocalCache.ReferenceEntry;
+import com.google.common.cache.LocalCache.Segment;
+import com.google.common.cache.LocalCache.ValueReference;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
+import com.google.common.testing.EqualsTester;
+import com.google.common.testing.FakeTicker;
+
+import java.lang.ref.Reference;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicReferenceArray;
+
+import javax.annotation.Nullable;
+
+/**
+ * A collection of utilities for {@link Cache} testing.
+ *
+ * @author mike nonemacher
+ */
+class CacheTesting {
+
+  /**
+   * Poke into the Cache internals to simulate garbage collection of the value associated with the
+   * given key. This assumes that the associated entry is a WeakValueReference or a
+   * SoftValueReference (and not a LoadingValueReference), and throws an IllegalStateException
+   * if that assumption does not hold.
+   */
+  @SuppressWarnings("unchecked")  // the instanceof check and the cast generate this warning
+  static <K, V> void simulateValueReclamation(Cache<K, V> cache, K key) {
+    ReferenceEntry<K, V> entry = getReferenceEntry(cache, key);
+    if (entry != null) {
+      ValueReference<K, V> valueRef = entry.getValueReference();
+      // fail on strong/computing refs
+      Preconditions.checkState(valueRef instanceof Reference);
+      Reference<V> ref = (Reference<V>) valueRef;
+      if (ref != null) {
+        ref.clear();
+      }
+    }
+  }
+
+  /**
+   * Poke into the Cache internals to simulate garbage collection of the given key. This assumes
+   * that the given entry is a weak or soft reference, and throws an IllegalStateException if that
+   * assumption does not hold.
+   */
+  @SuppressWarnings("unchecked")  // the instanceof check and the cast generate this warning
+  static <K, V> void simulateKeyReclamation(Cache<K, V> cache, K key) {
+    ReferenceEntry<K, V> entry = getReferenceEntry(cache, key);
+
+    Preconditions.checkState(entry instanceof Reference);
+    Reference<?> ref = (Reference<?>) entry;
+    if (ref != null) {
+      ref.clear();
+    }
+  }
+
+  static <K, V> ReferenceEntry<K, V> getReferenceEntry(Cache<K, V> cache, K key) {
+    LocalCache<K, V> map = toLocalCache(cache);
+    return map.getEntry(key);
+  }
+
+  /**
+   * Forces the segment containing the given {@code key} to expand (see
+   * {@link Segment#expand()}.
+   */
+  static <K, V> void forceExpandSegment(Cache<K, V> cache, K key) {
+    LocalCache<K, V> map = toLocalCache(cache);
+    int hash = map.hash(key);
+    Segment<K, V> segment = map.segmentFor(hash);
+    segment.expand();
+  }
+
+  /**
+   * Gets the {@link LocalCache} used by the given {@link Cache}, if any, or throws an
+   * IllegalArgumentException if this is a Cache type that doesn't have a LocalCache.
+   */
+  static <K, V> LocalCache<K, V> toLocalCache(Cache<K, V> cache) {
+    if (cache instanceof LocalLoadingCache) {
+      return ((LocalLoadingCache<K, V>) cache).localCache;
+    }
+    throw new IllegalArgumentException("Cache of type " + cache.getClass()
+        + " doesn't have a LocalCache.");
+  }
+
+  /**
+   * Determines whether the given cache can be converted to a LocalCache by
+   * {@link #toLocalCache} without throwing an exception.
+   */
+  static boolean hasLocalCache(Cache<?, ?> cache) {
+    return (cache instanceof LocalLoadingCache);
+  }
+
+  static void drainRecencyQueues(Cache<?, ?> cache) {
+    if (hasLocalCache(cache)) {
+      LocalCache<?, ?> map = toLocalCache(cache);
+      for (Segment segment : map.segments) {
+        drainRecencyQueue(segment);
+      }
+    }
+  }
+
+  static void drainRecencyQueue(Segment<?, ?> segment) {
+    segment.lock();
+    try {
+      segment.cleanUp();
+    } finally {
+      segment.unlock();
+    }
+  }
+
+  static void drainReferenceQueues(Cache<?, ?> cache) {
+    if (hasLocalCache(cache)) {
+      drainReferenceQueues(toLocalCache(cache));
+    }
+  }
+
+  static void drainReferenceQueues(LocalCache<?, ?> cchm) {
+    for (LocalCache.Segment segment : cchm.segments) {
+      drainReferenceQueue(segment);
+    }
+  }
+
+  static void drainReferenceQueue(LocalCache.Segment<?, ?> segment) {
+    segment.lock();
+    try {
+      segment.drainReferenceQueues();
+    } finally {
+      segment.unlock();
+    }
+  }
+
+  static int getTotalSegmentSize(Cache<?, ?> cache) {
+    LocalCache<?, ?> map = toLocalCache(cache);
+    int totalSize = 0;
+    for (Segment<?, ?> segment : map.segments) {
+      totalSize += segment.maxSegmentWeight;
+    }
+    return totalSize;
+  }
+
+  /**
+   * Peeks into the cache's internals to check its internal consistency. Verifies that each
+   * segment's count matches its #elements (after cleanup), each segment is unlocked, each entry
+   * contains a non-null key and value, and the eviction and expiration queues are consistent
+   * (see {@link #checkEviction}, {@link #checkExpiration}).
+   */
+  static void checkValidState(Cache<?, ?> cache) {
+    if (hasLocalCache(cache)) {
+      checkValidState(toLocalCache(cache));
+    }
+  }
+
+  static void checkValidState(LocalCache<?, ?> cchm) {
+    for (Segment<?, ?> segment : cchm.segments) {
+      segment.cleanUp();
+      assertFalse(segment.isLocked());
+      Map<?, ?> table = segmentTable(segment);
+      // cleanup and then check count after we have a strong reference to all entries
+      segment.cleanUp();
+      // under high memory pressure keys/values may be nulled out but not yet enqueued
+      assertTrue(table.size() <= segment.count);
+      for (Entry entry : table.entrySet()) {
+        assertNotNull(entry.getKey());
+        assertNotNull(entry.getValue());
+        assertSame(entry.getValue(), cchm.get(entry.getKey()));
+      }
+    }
+    checkEviction(cchm);
+    checkExpiration(cchm);
+  }
+
+  /**
+   * Peeks into the cache's internals to verify that its expiration queue is consistent. Verifies
+   * that the next/prev links in the expiration queue are correct, and that the queue is ordered
+   * by expiration time.
+   */
+  static void checkExpiration(Cache<?, ?> cache) {
+    if (hasLocalCache(cache)) {
+      checkExpiration(toLocalCache(cache));
+    }
+  }
+
+  static void checkExpiration(LocalCache<?, ?> cchm) {
+    for (Segment<?, ?> segment : cchm.segments) {
+      if (cchm.usesWriteQueue()) {
+        Set<ReferenceEntry<?, ?>> entries = Sets.newIdentityHashSet();
+
+        ReferenceEntry<?, ?> prev = null;
+        for (ReferenceEntry<?, ?> current : segment.writeQueue) {
+          assertTrue(entries.add(current));
+          if (prev != null) {
+            assertSame(prev, current.getPreviousInWriteQueue());
+            assertSame(prev.getNextInWriteQueue(), current);
+            assertTrue(prev.getWriteTime() <= current.getWriteTime());
+          }
+          Object key = current.getKey();
+          if (key != null) {
+            assertSame(current, segment.getEntry(key, current.getHash()));
+          }
+          prev = current;
+        }
+        assertEquals(segment.count, entries.size());
+      } else {
+        assertTrue(segment.writeQueue.isEmpty());
+      }
+
+      if (cchm.usesAccessQueue()) {
+        Set<ReferenceEntry<?, ?>> entries = Sets.newIdentityHashSet();
+
+        ReferenceEntry<?, ?> prev = null;
+        for (ReferenceEntry<?, ?> current : segment.accessQueue) {
+          assertTrue(entries.add(current));
+          if (prev != null) {
+            assertSame(prev, current.getPreviousInAccessQueue());
+            assertSame(prev.getNextInAccessQueue(), current);
+            // read accesses may be slightly misordered
+            assertTrue(prev.getAccessTime() <= current.getAccessTime()
+                || prev.getAccessTime() - current.getAccessTime() < 1000);
+          }
+          Object key = current.getKey();
+          if (key != null) {
+            assertSame(current, segment.getEntry(key, current.getHash()));
+          }
+          prev = current;
+        }
+        assertEquals(segment.count, entries.size());
+      } else {
+        assertTrue(segment.accessQueue.isEmpty());
+      }
+    }
+  }
+
+  /**
+   * Peeks into the cache's internals to verify that its eviction queue is consistent. Verifies
+   * that the prev/next links are correct, and that all items in each segment are also in that
+   * segment's eviction (recency) queue.
+   */
+  static void checkEviction(Cache<?, ?> cache) {
+    if (hasLocalCache(cache)) {
+      checkEviction(toLocalCache(cache));
+    }
+  }
+
+  static void checkEviction(LocalCache<?, ?> map) {
+    if (map.evictsBySize()) {
+      for (Segment<?, ?> segment : map.segments) {
+        drainRecencyQueue(segment);
+        assertEquals(0, segment.recencyQueue.size());
+        assertEquals(0, segment.readCount.get());
+
+        ReferenceEntry<?, ?> prev = null;
+        for (ReferenceEntry<?, ?> current : segment.accessQueue) {
+          if (prev != null) {
+            assertSame(prev, current.getPreviousInAccessQueue());
+            assertSame(prev.getNextInAccessQueue(), current);
+          }
+          Object key = current.getKey();
+          if (key != null) {
+            assertSame(current, segment.getEntry(key, current.getHash()));
+          }
+          prev = current;
+        }
+      }
+    } else {
+      for (Segment segment : map.segments) {
+        assertEquals(0, segment.recencyQueue.size());
+      }
+    }
+  }
+
+  static int segmentSize(Segment<?, ?> segment) {
+    Map<?, ?> map = segmentTable(segment);
+    return map.size();
+  }
+
+  static <K, V> Map<K, V> segmentTable(Segment<K, V> segment) {
+    AtomicReferenceArray<? extends ReferenceEntry<K, V>> table = segment.table;
+    Map<K, V> map = Maps.newLinkedHashMap();
+    for (int i = 0; i < table.length(); i++) {
+      for (ReferenceEntry<K, V> entry = table.get(i); entry != null; entry = entry.getNext()) {
+        K key = entry.getKey();
+        V value = entry.getValueReference().get();
+        if (key != null && value != null) {
+          assertNull(map.put(key, value));
+        }
+      }
+    }
+    return map;
+  }
+
+  static int writeQueueSize(Cache<?, ?> cache) {
+    LocalCache<?, ?> cchm = toLocalCache(cache);
+
+    int size = 0;
+    for (Segment<?, ?> segment : cchm.segments) {
+      size += writeQueueSize(segment);
+    }
+    return size;
+  }
+
+  static int writeQueueSize(Segment<?, ?> segment) {
+    return segment.writeQueue.size();
+  }
+
+  static int accessQueueSize(Cache<?, ?> cache) {
+    LocalCache<?, ?> cchm = toLocalCache(cache);
+    int size = 0;
+    for (Segment<?, ?> segment : cchm.segments) {
+      size += accessQueueSize(segment);
+    }
+    return size;
+  }
+
+  static int accessQueueSize(Segment<?, ?> segment) {
+    return segment.accessQueue.size();
+  }
+
+  static int expirationQueueSize(Cache<?, ?> cache) {
+    return Math.max(accessQueueSize(cache), writeQueueSize(cache));
+  }
+
+  static void processPendingNotifications(Cache<?, ?> cache) {
+    if (hasLocalCache(cache)) {
+      LocalCache<?, ?> cchm = toLocalCache(cache);
+      cchm.processPendingNotifications();
+    }
+  }
+
+  interface Receiver<T> {
+    void accept(@Nullable T object);
+  }
+
+  /**
+   * Assuming the given cache has maximum size {@code maxSize}, this method populates the cache (by
+   * getting a bunch of different keys), then makes sure all the items in the cache are also in the
+   * eviction queue. It will invoke the given {@code operation} on the first element in the
+   * eviction queue, and then reverify that all items in the cache are in the eviction queue, and
+   * verify that the head of the eviction queue has changed as a result of the operation.
+   */
+  static void checkRecency(LoadingCache<Integer, Integer> cache, int maxSize,
+      Receiver<ReferenceEntry<Integer, Integer>> operation) {
+
+    if (hasLocalCache(cache)) {
+      warmUp(cache, 0, 2 * maxSize);
+
+      LocalCache<Integer, Integer> cchm = toLocalCache(cache);
+      Segment<?, ?> segment = cchm.segments[0];
+      drainRecencyQueue(segment);
+      assertEquals(maxSize, accessQueueSize(cache));
+      assertEquals(maxSize, cache.size());
+
+      ReferenceEntry<?, ?> originalHead = segment.accessQueue.peek();
+      @SuppressWarnings("unchecked")
+      ReferenceEntry<Integer, Integer> entry = (ReferenceEntry) originalHead;
+      operation.accept(entry);
+      drainRecencyQueue(segment);
+
+      assertNotSame(originalHead, segment.accessQueue.peek());
+      assertEquals(cache.size(), accessQueueSize(cache));
+    }
+  }
+
+  /**
+   * Warms the given cache by getting all values in {@code [start, end)}, in order.
+   */
+  static void warmUp(LoadingCache<Integer, Integer> map, int start, int end) {
+    for (int i = start; i < end; i++) {
+      map.getUnchecked(i);
+    }
+  }
+
+  static void expireEntries(Cache<?, ?> cache, long expiringTime, FakeTicker ticker) {
+    expireEntries(toLocalCache(cache), expiringTime, ticker);
+  }
+
+  static void expireEntries(
+      LocalCache<?, ?> cchm, long expiringTime, FakeTicker ticker) {
+
+    for (Segment<?, ?> segment : cchm.segments) {
+      drainRecencyQueue(segment);
+    }
+
+    ticker.advance(2 * expiringTime, TimeUnit.MILLISECONDS);
+
+    long now = ticker.read();
+    for (Segment<?, ?> segment : cchm.segments) {
+      expireEntries(segment, now);
+      assertEquals("Expiration queue must be empty by now", 0, writeQueueSize(segment));
+      assertEquals("Expiration queue must be empty by now", 0, accessQueueSize(segment));
+      assertEquals("Segments must be empty by now", 0, segmentSize(segment));
+    }
+    cchm.processPendingNotifications();
+  }
+
+  static void expireEntries(Segment<?, ?> segment, long now) {
+    segment.lock();
+    try {
+      segment.expireEntries(now);
+      segment.cleanUp();
+    } finally {
+      segment.unlock();
+    }
+  }
+  static void checkEmpty(Cache<?, ?> cache) {
+    assertEquals(0, cache.size());
+    assertFalse(cache.asMap().containsKey(null));
+    assertFalse(cache.asMap().containsKey(6));
+    assertFalse(cache.asMap().containsValue(null));
+    assertFalse(cache.asMap().containsValue(6));
+    checkEmpty(cache.asMap());
+  }
+
+  static void checkEmpty(ConcurrentMap<?, ?> map) {
+    checkEmpty(map.keySet());
+    checkEmpty(map.values());
+    checkEmpty(map.entrySet());
+    assertEquals(ImmutableMap.of(), map);
+    assertEquals(ImmutableMap.of().hashCode(), map.hashCode());
+    assertEquals(ImmutableMap.of().toString(), map.toString());
+
+    if (map instanceof LocalCache) {
+      LocalCache<?, ?> cchm = (LocalCache<?, ?>) map;
+
+      checkValidState(cchm);
+      assertTrue(cchm.isEmpty());
+      assertEquals(0, cchm.size());
+      for (LocalCache.Segment segment : cchm.segments) {
+        assertEquals(0, segment.count);
+        assertEquals(0, segmentSize(segment));
+        assertTrue(segment.writeQueue.isEmpty());
+        assertTrue(segment.accessQueue.isEmpty());
+      }
+    }
+  }
+
+  static void checkEmpty(Collection<?> collection) {
+    assertTrue(collection.isEmpty());
+    assertEquals(0, collection.size());
+    assertFalse(collection.iterator().hasNext());
+    assertEquals(0, collection.toArray().length);
+    assertEquals(0, collection.toArray(new Object[0]).length);
+    if (collection instanceof Set) {
+      new EqualsTester()
+          .addEqualityGroup(ImmutableSet.of(), collection)
+          .addEqualityGroup(ImmutableSet.of(""))
+          .testEquals();
+    } else if (collection instanceof List) {
+      new EqualsTester()
+          .addEqualityGroup(ImmutableList.of(), collection)
+          .addEqualityGroup(ImmutableList.of(""))
+          .testEquals();
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/cache/EmptyCachesTest.java b/guava-tests/test/com/google/common/cache/EmptyCachesTest.java
new file mode 100644
index 0000000..c31cf68
--- /dev/null
+++ b/guava-tests/test/com/google/common/cache/EmptyCachesTest.java
@@ -0,0 +1,389 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.cache;
+
+import static com.google.common.cache.CacheTesting.checkEmpty;
+import static com.google.common.cache.TestingCacheLoaders.identityLoader;
+import static java.util.Arrays.asList;
+import static java.util.concurrent.TimeUnit.DAYS;
+import static java.util.concurrent.TimeUnit.SECONDS;
+
+import com.google.common.base.Function;
+import com.google.common.cache.CacheBuilderFactory.DurationSpec;
+import com.google.common.cache.LocalCache.Strength;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Maps;
+import com.google.common.testing.EqualsTester;
+
+import junit.framework.TestCase;
+
+import java.util.Collection;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.concurrent.ExecutionException;
+
+/**
+ * {@link LoadingCache} tests that deal with empty caches.
+ *
+ * @author mike nonemacher
+ */
+public class EmptyCachesTest extends TestCase {
+  public void testEmpty() {
+    for (LoadingCache<Object, Object> cache : caches()) {
+      checkEmpty(cache);
+    }
+  }
+
+  public void testInvalidate_empty() {
+    for (LoadingCache<Object, Object> cache : caches()) {
+      cache.getUnchecked("a");
+      cache.getUnchecked("b");
+      cache.invalidate("a");
+      cache.invalidate("b");
+      cache.invalidate(0);
+      checkEmpty(cache);
+    }
+  }
+
+  public void testInvalidateAll_empty() {
+    for (LoadingCache<Object, Object> cache : caches()) {
+      cache.getUnchecked("a");
+      cache.getUnchecked("b");
+      cache.getUnchecked("c");
+      cache.invalidateAll();
+      checkEmpty(cache);
+    }
+  }
+
+  public void testEquals_null() {
+    for (LoadingCache<Object, Object> cache : caches()) {
+      assertFalse(cache.equals(null));
+    }
+  }
+
+  public void testEqualsAndHashCode_different() {
+    for (CacheBuilder<Object, Object> builder : cacheFactory().buildAllPermutations()) {
+      // all caches should be different: instance equality
+      new EqualsTester()
+          .addEqualityGroup(builder.build(identityLoader()))
+          .addEqualityGroup(builder.build(identityLoader()))
+          .addEqualityGroup(builder.build(identityLoader()))
+          .testEquals();
+    }
+  }
+
+  public void testGet_null() throws ExecutionException {
+    for (LoadingCache<Object, Object> cache : caches()) {
+      try {
+        cache.get(null);
+        fail("Expected NullPointerException");
+      } catch (NullPointerException e) {
+        // expected
+      }
+      checkEmpty(cache);
+    }
+  }
+
+  public void testGetUnchecked_null() {
+    for (LoadingCache<Object, Object> cache : caches()) {
+      try {
+        cache.getUnchecked(null);
+        fail("Expected NullPointerException");
+      } catch (NullPointerException e) {
+        // expected
+      }
+      checkEmpty(cache);
+    }
+  }
+
+  /* ---------------- Key Set -------------- */
+
+  public void testKeySet_nullToArray() {
+    for (LoadingCache<Object, Object> cache : caches()) {
+      Set<Object> keys = cache.asMap().keySet();
+      try {
+        keys.toArray(null);
+        fail();
+      } catch (NullPointerException e) {
+        // expected
+      }
+      checkEmpty(cache);
+    }
+  }
+
+  public void testKeySet_addNotSupported() {
+    for (LoadingCache<Object, Object> cache : caches()) {
+      try {
+        cache.asMap().keySet().add(1);
+        fail();
+      } catch (UnsupportedOperationException e) {
+        // expected
+      }
+
+      try {
+        cache.asMap().keySet().addAll(asList(1, 2));
+        fail();
+      } catch (UnsupportedOperationException e) {
+        // expected
+      }
+    }
+  }
+
+  public void testKeySet_clear() {
+    for (LoadingCache<Object, Object> cache : caches()) {
+      warmUp(cache, 0, 100);
+
+      Set<Object> keys = cache.asMap().keySet();
+      keys.clear();
+      checkEmpty(keys);
+      checkEmpty(cache);
+    }
+  }
+
+  public void testKeySet_empty_remove() {
+    for (LoadingCache<Object, Object> cache : caches()) {
+      Set<Object> keys = cache.asMap().keySet();
+      assertFalse(keys.remove(null));
+      assertFalse(keys.remove(6));
+      assertFalse(keys.remove(-6));
+      assertFalse(keys.removeAll(asList(null, 0, 15, 1500)));
+      assertFalse(keys.retainAll(asList(null, 0, 15, 1500)));
+      checkEmpty(keys);
+      checkEmpty(cache);
+    }
+  }
+
+  public void testKeySet_remove() {
+    for (LoadingCache<Object, Object> cache : caches()) {
+      cache.getUnchecked(1);
+      cache.getUnchecked(2);
+
+      Set<Object> keys = cache.asMap().keySet();
+      // We don't know whether these are still in the cache, so we can't assert on the return
+      // values of these removes, but the cache should be empty after the removes, regardless.
+      keys.remove(1);
+      keys.remove(2);
+      assertFalse(keys.remove(null));
+      assertFalse(keys.remove(6));
+      assertFalse(keys.remove(-6));
+      assertFalse(keys.removeAll(asList(null, 0, 15, 1500)));
+      assertFalse(keys.retainAll(asList(null, 0, 15, 1500)));
+      checkEmpty(keys);
+      checkEmpty(cache);
+    }
+  }
+
+  /* ---------------- Values -------------- */
+
+  public void testValues_nullToArray() {
+    for (LoadingCache<Object, Object> cache : caches()) {
+      Collection<Object> values = cache.asMap().values();
+      try {
+        values.toArray(null);
+        fail();
+      } catch (NullPointerException e) {
+        // expected
+      }
+      checkEmpty(cache);
+    }
+  }
+
+  public void testValues_addNotSupported() {
+    for (LoadingCache<Object, Object> cache : caches()) {
+      try {
+        cache.asMap().values().add(1);
+        fail();
+      } catch (UnsupportedOperationException e) {
+        // expected
+      }
+
+      try {
+        cache.asMap().values().addAll(asList(1, 2));
+        fail();
+      } catch (UnsupportedOperationException e) {
+        // expected
+      }
+    }
+  }
+
+  public void testValues_clear() {
+    for (LoadingCache<Object, Object> cache : caches()) {
+      warmUp(cache, 0, 100);
+
+      Collection<Object> values = cache.asMap().values();
+      values.clear();
+      checkEmpty(values);
+      checkEmpty(cache);
+    }
+  }
+
+  public void testValues_empty_remove() {
+    for (LoadingCache<Object, Object> cache : caches()) {
+      Collection<Object> values = cache.asMap().values();
+      assertFalse(values.remove(null));
+      assertFalse(values.remove(6));
+      assertFalse(values.remove(-6));
+      assertFalse(values.removeAll(asList(null, 0, 15, 1500)));
+      assertFalse(values.retainAll(asList(null, 0, 15, 1500)));
+      checkEmpty(values);
+      checkEmpty(cache);
+    }
+  }
+
+  public void testValues_remove() {
+    for (LoadingCache<Object, Object> cache : caches()) {
+      cache.getUnchecked(1);
+      cache.getUnchecked(2);
+
+      Collection<Object> values = cache.asMap().keySet();
+      // We don't know whether these are still in the cache, so we can't assert on the return
+      // values of these removes, but the cache should be empty after the removes, regardless.
+      values.remove(1);
+      values.remove(2);
+      assertFalse(values.remove(null));
+      assertFalse(values.remove(6));
+      assertFalse(values.remove(-6));
+      assertFalse(values.removeAll(asList(null, 0, 15, 1500)));
+      assertFalse(values.retainAll(asList(null, 0, 15, 1500)));
+      checkEmpty(values);
+      checkEmpty(cache);
+    }
+  }
+
+  /* ---------------- Entry Set -------------- */
+
+  public void testEntrySet_nullToArray() {
+    for (LoadingCache<Object, Object> cache : caches()) {
+      Set<Entry<Object, Object>> entries = cache.asMap().entrySet();
+      try {
+        entries.toArray(null);
+        fail();
+      } catch (NullPointerException e) {
+        // expected
+      }
+      checkEmpty(cache);
+    }
+  }
+
+  public void testEntrySet_addNotSupported() {
+    for (LoadingCache<Object, Object> cache : caches()) {
+      try {
+        cache.asMap().entrySet().add(entryOf(1, 1));
+        fail();
+      } catch (UnsupportedOperationException e) {
+        // expected
+      }
+
+      try {
+        cache.asMap().values().addAll(asList(entryOf(1, 1), entryOf(2, 2)));
+        fail();
+      } catch (UnsupportedOperationException e) {
+        // expected
+      }
+    }
+  }
+
+  public void testEntrySet_clear() {
+    for (LoadingCache<Object, Object> cache : caches()) {
+      warmUp(cache, 0, 100);
+
+      Set<Entry<Object, Object>> entrySet = cache.asMap().entrySet();
+      entrySet.clear();
+      checkEmpty(entrySet);
+      checkEmpty(cache);
+    }
+  }
+
+  public void testEntrySet_empty_remove() {
+    for (LoadingCache<Object, Object> cache : caches()) {
+      Set<Entry<Object, Object>> entrySet = cache.asMap().entrySet();
+      assertFalse(entrySet.remove(null));
+      assertFalse(entrySet.remove(entryOf(6, 6)));
+      assertFalse(entrySet.remove(entryOf(-6, -6)));
+      assertFalse(entrySet.removeAll(asList(null, entryOf(0, 0), entryOf(15, 15))));
+      assertFalse(entrySet.retainAll( asList(null, entryOf(0, 0), entryOf(15, 15))));
+      checkEmpty(entrySet);
+      checkEmpty(cache);
+    }
+  }
+
+  public void testEntrySet_remove() {
+    for (LoadingCache<Object, Object> cache : caches()) {
+      cache.getUnchecked(1);
+      cache.getUnchecked(2);
+
+      Set<Entry<Object, Object>> entrySet = cache.asMap().entrySet();
+      // We don't know whether these are still in the cache, so we can't assert on the return
+      // values of these removes, but the cache should be empty after the removes, regardless.
+      entrySet.remove(entryOf(1, 1));
+      entrySet.remove(entryOf(2, 2));
+      assertFalse(entrySet.remove(null));
+      assertFalse(entrySet.remove(entryOf(1, 1)));
+      assertFalse(entrySet.remove(entryOf(6, 6)));
+      assertFalse(entrySet.removeAll(asList(null, entryOf(1, 1), entryOf(15, 15))));
+      assertFalse(entrySet.retainAll(asList(null, entryOf(1, 1), entryOf(15, 15))));
+      checkEmpty(entrySet);
+      checkEmpty(cache);
+    }
+  }
+
+  /* ---------------- Local utilities -------------- */
+
+  /**
+   * Most of the tests in this class run against every one of these caches.
+   */
+  private Iterable<LoadingCache<Object, Object>> caches() {
+    // lots of different ways to configure a LoadingCache
+    CacheBuilderFactory factory = cacheFactory();
+    return Iterables.transform(factory.buildAllPermutations(),
+        new Function<CacheBuilder<Object, Object>, LoadingCache<Object, Object>>() {
+          @Override public LoadingCache<Object, Object> apply(
+              CacheBuilder<Object, Object> builder) {
+            return builder.build(identityLoader());
+          }
+        });
+  }
+
+  private CacheBuilderFactory cacheFactory() {
+    return new CacheBuilderFactory()
+        .withKeyStrengths(ImmutableSet.of(Strength.STRONG, Strength.WEAK))
+        .withValueStrengths(ImmutableSet.copyOf(Strength.values()))
+        .withConcurrencyLevels(ImmutableSet.of(1, 4, 16, 64))
+        .withMaximumSizes(ImmutableSet.of(0, 1, 10, 100, 1000))
+        .withInitialCapacities(ImmutableSet.of(0, 1, 10, 100, 1000))
+        .withExpireAfterWrites(ImmutableSet.of(
+            DurationSpec.of(0, SECONDS),
+            DurationSpec.of(1, SECONDS),
+            DurationSpec.of(1, DAYS)))
+        .withExpireAfterAccesses(ImmutableSet.of(
+            DurationSpec.of(0, SECONDS),
+            DurationSpec.of(1, SECONDS),
+            DurationSpec.of(1, DAYS)))
+        .withRefreshes(ImmutableSet.of(
+            DurationSpec.of(1, SECONDS),
+            DurationSpec.of(1, DAYS)));
+  }
+
+  private void warmUp(LoadingCache<Object, Object> cache, int minimum, int maximum) {
+    for (int i = minimum; i < maximum; i++) {
+      cache.getUnchecked(i);
+    }
+  }
+
+  private Entry<Object, Object> entryOf(Object key, Object value) {
+    return Maps.immutableEntry(key, value);
+  }
+}
diff --git a/guava-tests/test/com/google/common/cache/ForwardingCacheTest.java b/guava-tests/test/com/google/common/cache/ForwardingCacheTest.java
new file mode 100644
index 0000000..3d76288
--- /dev/null
+++ b/guava-tests/test/com/google/common/cache/ForwardingCacheTest.java
@@ -0,0 +1,130 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.cache;
+
+import static org.easymock.EasyMock.createMock;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.replay;
+import static org.easymock.EasyMock.verify;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+
+import junit.framework.TestCase;
+
+import java.util.concurrent.ExecutionException;
+
+/**
+ * Unit test for {@link ForwardingCache}.
+ *
+ * @author Charles Fry
+ */
+public class ForwardingCacheTest extends TestCase {
+  private Cache<String, Boolean> forward;
+  private Cache<String, Boolean> mock;
+
+  @SuppressWarnings("unchecked") // createMock
+  @Override public void setUp() throws Exception {
+    super.setUp();
+    /*
+     * Class parameters must be raw, so we can't create a proxy with generic
+     * type arguments. The created proxy only records calls and returns null, so
+     * the type is irrelevant at runtime.
+     */
+    mock = createMock(Cache.class);
+    forward = new ForwardingCache<String, Boolean>() {
+      @Override protected Cache<String, Boolean> delegate() {
+        return mock;
+      }
+    };
+  }
+
+  public void testGetIfPresent() throws ExecutionException {
+    expect(mock.getIfPresent("key")).andReturn(Boolean.TRUE);
+    replay(mock);
+    assertSame(Boolean.TRUE, forward.getIfPresent("key"));
+    verify(mock);
+  }
+
+  public void testGetAllPresent() throws ExecutionException {
+    expect(mock.getAllPresent(ImmutableList.of("key")))
+        .andReturn(ImmutableMap.of("key", Boolean.TRUE));
+    replay(mock);
+    assertEquals(ImmutableMap.of("key", Boolean.TRUE),
+        forward.getAllPresent(ImmutableList.of("key")));
+    verify(mock);
+  }
+
+  public void testInvalidate() {
+    mock.invalidate("key");
+    replay(mock);
+    forward.invalidate("key");
+    verify(mock);
+  }
+
+  public void testInvalidateAllIterable() {
+    mock.invalidateAll(ImmutableList.of("key"));
+    replay(mock);
+    forward.invalidateAll(ImmutableList.of("key"));
+    verify(mock);
+  }
+
+  public void testInvalidateAll() {
+    mock.invalidateAll();
+    replay(mock);
+    forward.invalidateAll();
+    verify(mock);
+  }
+
+  public void testSize() {
+    expect(mock.size()).andReturn(0L);
+    replay(mock);
+    forward.size();
+    verify(mock);
+  }
+
+  public void testStats() {
+    expect(mock.stats()).andReturn(null);
+    replay(mock);
+    assertNull(forward.stats());
+    verify(mock);
+  }
+
+  public void testAsMap() {
+    expect(mock.asMap()).andReturn(null);
+    replay(mock);
+    assertNull(forward.asMap());
+    verify(mock);
+  }
+
+  public void testCleanUp() {
+    mock.cleanUp();
+    replay(mock);
+    forward.cleanUp();
+    verify(mock);
+  }
+
+  /**
+   * Make sure that all methods are forwarded.
+   */
+  private static class OnlyGet<K, V> extends ForwardingCache<K, V> {
+    @Override
+    protected Cache<K, V> delegate() {
+      return null;
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/cache/ForwardingLoadingCacheTest.java b/guava-tests/test/com/google/common/cache/ForwardingLoadingCacheTest.java
new file mode 100644
index 0000000..25a154b
--- /dev/null
+++ b/guava-tests/test/com/google/common/cache/ForwardingLoadingCacheTest.java
@@ -0,0 +1,142 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.cache;
+
+import static org.easymock.EasyMock.createMock;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.replay;
+import static org.easymock.EasyMock.verify;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+
+import junit.framework.TestCase;
+
+import java.util.concurrent.ExecutionException;
+
+/**
+ * Unit test for {@link ForwardingLoadingCache}.
+ *
+ * @author Charles Fry
+ */
+public class ForwardingLoadingCacheTest extends TestCase {
+  private LoadingCache<String, Boolean> forward;
+  private LoadingCache<String, Boolean> mock;
+
+  @SuppressWarnings("unchecked") // createMock
+  @Override public void setUp() throws Exception {
+    super.setUp();
+    /*
+     * Class parameters must be raw, so we can't create a proxy with generic
+     * type arguments. The created proxy only records calls and returns null, so
+     * the type is irrelevant at runtime.
+     */
+    mock = createMock(LoadingCache.class);
+    forward = new ForwardingLoadingCache<String, Boolean>() {
+      @Override protected LoadingCache<String, Boolean> delegate() {
+        return mock;
+      }
+    };
+  }
+
+  public void testGet() throws ExecutionException {
+    expect(mock.get("key")).andReturn(Boolean.TRUE);
+    replay(mock);
+    assertSame(Boolean.TRUE, forward.get("key"));
+    verify(mock);
+  }
+
+  public void testGetUnchecked() {
+    expect(mock.getUnchecked("key")).andReturn(Boolean.TRUE);
+    replay(mock);
+    assertSame(Boolean.TRUE, forward.getUnchecked("key"));
+    verify(mock);
+  }
+
+  public void testGetAll() throws ExecutionException {
+    expect(mock.getAll(ImmutableList.of("key"))).andReturn(ImmutableMap.of("key", Boolean.TRUE));
+    replay(mock);
+    assertEquals(ImmutableMap.of("key", Boolean.TRUE), forward.getAll(ImmutableList.of("key")));
+    verify(mock);
+  }
+
+  public void testApply() {
+    expect(mock.apply("key")).andReturn(Boolean.TRUE);
+    replay(mock);
+    assertSame(Boolean.TRUE, forward.apply("key"));
+    verify(mock);
+  }
+
+  public void testInvalidate() {
+    mock.invalidate("key");
+    replay(mock);
+    forward.invalidate("key");
+    verify(mock);
+  }
+
+  public void testRefresh() throws ExecutionException {
+    mock.refresh("key");
+    replay(mock);
+    forward.refresh("key");
+    verify(mock);
+  }
+
+  public void testInvalidateAll() {
+    mock.invalidateAll();
+    replay(mock);
+    forward.invalidateAll();
+    verify(mock);
+  }
+
+  public void testSize() {
+    expect(mock.size()).andReturn(0L);
+    replay(mock);
+    forward.size();
+    verify(mock);
+  }
+
+  public void testStats() {
+    expect(mock.stats()).andReturn(null);
+    replay(mock);
+    assertNull(forward.stats());
+    verify(mock);
+  }
+
+  public void testAsMap() {
+    expect(mock.asMap()).andReturn(null);
+    replay(mock);
+    assertNull(forward.asMap());
+    verify(mock);
+  }
+
+  public void testCleanUp() {
+    mock.cleanUp();
+    replay(mock);
+    forward.cleanUp();
+    verify(mock);
+  }
+
+  /**
+   * Make sure that all methods are forwarded.
+   */
+  private static class OnlyGet<K, V> extends ForwardingLoadingCache<K, V> {
+    @Override
+    protected LoadingCache<K, V> delegate() {
+      return null;
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/cache/LocalCacheTest.java b/guava-tests/test/com/google/common/cache/LocalCacheTest.java
new file mode 100644
index 0000000..7f926e3
--- /dev/null
+++ b/guava-tests/test/com/google/common/cache/LocalCacheTest.java
@@ -0,0 +1,2736 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.cache;
+
+import static com.google.common.cache.CacheBuilder.NULL_TICKER;
+import static com.google.common.cache.LocalCache.DISCARDING_QUEUE;
+import static com.google.common.cache.LocalCache.DRAIN_THRESHOLD;
+import static com.google.common.cache.LocalCache.nullEntry;
+import static com.google.common.cache.LocalCache.unset;
+import static com.google.common.cache.TestingCacheLoaders.identityLoader;
+import static com.google.common.cache.TestingRemovalListeners.countingRemovalListener;
+import static com.google.common.cache.TestingRemovalListeners.queuingRemovalListener;
+import static com.google.common.cache.TestingWeighers.constantWeigher;
+import static com.google.common.collect.Lists.newArrayList;
+import static com.google.common.collect.Maps.immutableEntry;
+import static java.util.concurrent.TimeUnit.MINUTES;
+import static java.util.concurrent.TimeUnit.NANOSECONDS;
+import static java.util.concurrent.TimeUnit.SECONDS;
+import static org.easymock.EasyMock.createMock;
+
+import com.google.common.base.Equivalence;
+import com.google.common.base.Ticker;
+import com.google.common.cache.LocalCache.EntryFactory;
+import com.google.common.cache.LocalCache.LoadingValueReference;
+import com.google.common.cache.LocalCache.LocalLoadingCache;
+import com.google.common.cache.LocalCache.LocalManualCache;
+import com.google.common.cache.LocalCache.ReferenceEntry;
+import com.google.common.cache.LocalCache.Segment;
+import com.google.common.cache.LocalCache.Strength;
+import com.google.common.cache.LocalCache.ValueReference;
+import com.google.common.cache.TestingCacheLoaders.CountingLoader;
+import com.google.common.cache.TestingRemovalListeners.CountingRemovalListener;
+import com.google.common.cache.TestingRemovalListeners.QueuingRemovalListener;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.common.testing.FakeTicker;
+import com.google.common.testing.NullPointerTester;
+import com.google.common.testing.SerializableTester;
+import com.google.common.testing.TestLogHandler;
+
+import junit.framework.TestCase;
+
+import java.io.Serializable;
+import java.lang.ref.Reference;
+import java.lang.ref.ReferenceQueue;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicReferenceArray;
+import java.util.logging.LogRecord;
+
+/**
+ * @author Charles Fry
+ */
+public class LocalCacheTest extends TestCase {
+
+  static final int SMALL_MAX_SIZE = DRAIN_THRESHOLD * 5;
+
+  TestLogHandler logHandler;
+
+  @Override
+  public void setUp() throws Exception {
+    super.setUp();
+    logHandler = new TestLogHandler();
+    LocalCache.logger.addHandler(logHandler);
+  }
+
+  @Override
+  public void tearDown() throws Exception {
+    super.tearDown();
+    LocalCache.logger.removeHandler(logHandler);
+  }
+
+  private Throwable popLoggedThrowable() {
+    List<LogRecord> logRecords = logHandler.getStoredLogRecords();
+    assertSame(1, logRecords.size());
+    LogRecord logRecord = logRecords.get(0);
+    logHandler.clear();
+    return logRecord.getThrown();
+  }
+
+  private void checkNothingLogged() {
+    assertTrue(logHandler.getStoredLogRecords().isEmpty());
+  }
+
+  private void checkLogged(Throwable t) {
+    assertSame(t, popLoggedThrowable());
+  }
+
+  private static <K, V> LocalCache<K, V> makeLocalCache(CacheBuilder<K, V> builder) {
+    return new LocalCache<K, V>(builder, null);
+  }
+
+  private static CacheBuilder<Object, Object> createCacheBuilder() {
+    return new CacheBuilder<Object, Object>();
+  }
+
+  // constructor tests
+
+  public void testDefaults() {
+    LocalCache<Object, Object> map = makeLocalCache(createCacheBuilder());
+
+    assertSame(Strength.STRONG, map.keyStrength);
+    assertSame(Strength.STRONG, map.valueStrength);
+    assertSame(map.keyStrength.defaultEquivalence(), map.keyEquivalence);
+    assertSame(map.valueStrength.defaultEquivalence(), map.valueEquivalence);
+
+    assertEquals(0, map.expireAfterAccessNanos);
+    assertEquals(0, map.expireAfterWriteNanos);
+    assertEquals(0, map.refreshNanos);
+    assertEquals(CacheBuilder.UNSET_INT, map.maxWeight);
+
+    assertSame(EntryFactory.STRONG, map.entryFactory);
+    assertSame(CacheBuilder.NullListener.INSTANCE, map.removalListener);
+    assertSame(DISCARDING_QUEUE, map.removalNotificationQueue);
+    assertSame(NULL_TICKER, map.ticker);
+
+    assertEquals(4, map.concurrencyLevel);
+
+    // concurrency level
+    assertEquals(4, map.segments.length);
+    // initial capacity / concurrency level
+    assertEquals(16 / map.segments.length, map.segments[0].table.length());
+
+    assertFalse(map.evictsBySize());
+    assertFalse(map.expires());
+    assertFalse(map.expiresAfterWrite());
+    assertFalse(map.expiresAfterAccess());
+    assertFalse(map.refreshes());
+  }
+
+  public void testSetKeyEquivalence() {
+    Equivalence<Object> testEquivalence = new Equivalence<Object>() {
+      @Override
+      protected boolean doEquivalent(Object a, Object b) {
+        return false;
+      }
+
+      @Override
+      protected int doHash(Object t) {
+        return 0;
+      }
+    };
+
+    LocalCache<Object, Object> map =
+        makeLocalCache(createCacheBuilder().keyEquivalence(testEquivalence));
+    assertSame(testEquivalence, map.keyEquivalence);
+    assertSame(map.valueStrength.defaultEquivalence(), map.valueEquivalence);
+  }
+
+  public void testSetValueEquivalence() {
+    Equivalence<Object> testEquivalence = new Equivalence<Object>() {
+      @Override
+      protected boolean doEquivalent(Object a, Object b) {
+        return false;
+      }
+
+      @Override
+      protected int doHash(Object t) {
+        return 0;
+      }
+    };
+
+    LocalCache<Object, Object> map =
+        makeLocalCache(createCacheBuilder().valueEquivalence(testEquivalence));
+    assertSame(testEquivalence, map.valueEquivalence);
+    assertSame(map.keyStrength.defaultEquivalence(), map.keyEquivalence);
+  }
+
+  public void testSetConcurrencyLevel() {
+    // round up to nearest power of two
+
+    checkConcurrencyLevel(1, 1);
+    checkConcurrencyLevel(2, 2);
+    checkConcurrencyLevel(3, 4);
+    checkConcurrencyLevel(4, 4);
+    checkConcurrencyLevel(5, 8);
+    checkConcurrencyLevel(6, 8);
+    checkConcurrencyLevel(7, 8);
+    checkConcurrencyLevel(8, 8);
+  }
+
+  private static void checkConcurrencyLevel(int concurrencyLevel, int segmentCount) {
+    LocalCache<Object, Object> map =
+        makeLocalCache(createCacheBuilder().concurrencyLevel(concurrencyLevel));
+    assertEquals(segmentCount, map.segments.length);
+  }
+
+  public void testSetInitialCapacity() {
+    // share capacity over each segment, then round up to nearest power of two
+
+    checkInitialCapacity(1, 0, 1);
+    checkInitialCapacity(1, 1, 1);
+    checkInitialCapacity(1, 2, 2);
+    checkInitialCapacity(1, 3, 4);
+    checkInitialCapacity(1, 4, 4);
+    checkInitialCapacity(1, 5, 8);
+    checkInitialCapacity(1, 6, 8);
+    checkInitialCapacity(1, 7, 8);
+    checkInitialCapacity(1, 8, 8);
+
+    checkInitialCapacity(2, 0, 1);
+    checkInitialCapacity(2, 1, 1);
+    checkInitialCapacity(2, 2, 1);
+    checkInitialCapacity(2, 3, 2);
+    checkInitialCapacity(2, 4, 2);
+    checkInitialCapacity(2, 5, 4);
+    checkInitialCapacity(2, 6, 4);
+    checkInitialCapacity(2, 7, 4);
+    checkInitialCapacity(2, 8, 4);
+
+    checkInitialCapacity(4, 0, 1);
+    checkInitialCapacity(4, 1, 1);
+    checkInitialCapacity(4, 2, 1);
+    checkInitialCapacity(4, 3, 1);
+    checkInitialCapacity(4, 4, 1);
+    checkInitialCapacity(4, 5, 2);
+    checkInitialCapacity(4, 6, 2);
+    checkInitialCapacity(4, 7, 2);
+    checkInitialCapacity(4, 8, 2);
+  }
+
+  private static void checkInitialCapacity(
+      int concurrencyLevel, int initialCapacity, int segmentSize) {
+    LocalCache<Object, Object> map = makeLocalCache(
+        createCacheBuilder().concurrencyLevel(concurrencyLevel).initialCapacity(initialCapacity));
+    for (int i = 0; i < map.segments.length; i++) {
+      assertEquals(segmentSize, map.segments[i].table.length());
+    }
+  }
+
+  public void testSetMaximumSize() {
+    // vary maximumSize wrt concurrencyLevel
+
+    for (int maxSize = 1; maxSize < 8; maxSize++) {
+      checkMaximumSize(1, 8, maxSize);
+      checkMaximumSize(2, 8, maxSize);
+      checkMaximumSize(4, 8, maxSize);
+      checkMaximumSize(8, 8, maxSize);
+    }
+
+    checkMaximumSize(1, 8, Long.MAX_VALUE);
+    checkMaximumSize(2, 8, Long.MAX_VALUE);
+    checkMaximumSize(4, 8, Long.MAX_VALUE);
+    checkMaximumSize(8, 8, Long.MAX_VALUE);
+
+    // vary initial capacity wrt maximumSize
+
+    for (int capacity = 0; capacity < 8; capacity++) {
+      checkMaximumSize(1, capacity, 4);
+      checkMaximumSize(2, capacity, 4);
+      checkMaximumSize(4, capacity, 4);
+      checkMaximumSize(8, capacity, 4);
+    }
+  }
+
+  private static void checkMaximumSize(int concurrencyLevel, int initialCapacity, long maxSize) {
+    LocalCache<Object, Object> map = makeLocalCache(createCacheBuilder()
+        .concurrencyLevel(concurrencyLevel)
+        .initialCapacity(initialCapacity)
+        .maximumSize(maxSize));
+    long totalCapacity = 0;
+    for (int i = 0; i < map.segments.length; i++) {
+      totalCapacity += map.segments[i].maxSegmentWeight;
+    }
+    assertTrue("totalCapacity=" + totalCapacity + ", maxSize=" + maxSize, totalCapacity == maxSize);
+
+    map = makeLocalCache(createCacheBuilder()
+        .concurrencyLevel(concurrencyLevel)
+        .initialCapacity(initialCapacity)
+        .maximumWeight(maxSize)
+        .weigher(constantWeigher(1)));
+    totalCapacity = 0;
+    for (int i = 0; i < map.segments.length; i++) {
+      totalCapacity += map.segments[i].maxSegmentWeight;
+    }
+    assertTrue("totalCapacity=" + totalCapacity + ", maxSize=" + maxSize, totalCapacity == maxSize);
+  }
+
+  public void testSetWeigher() {
+    Weigher<Object, Object> testWeigher = new Weigher<Object, Object>() {
+      @Override
+      public int weigh(Object key, Object value) {
+        return 42;
+      }
+    };
+    LocalCache<Object, Object> map =
+        makeLocalCache(createCacheBuilder().maximumWeight(1).weigher(testWeigher));
+    assertSame(testWeigher, map.weigher);
+  }
+
+  public void testSetWeakKeys() {
+    LocalCache<Object, Object> map = makeLocalCache(createCacheBuilder().weakKeys());
+    checkStrength(map, Strength.WEAK, Strength.STRONG);
+    assertSame(EntryFactory.WEAK, map.entryFactory);
+  }
+
+  public void testSetWeakValues() {
+    LocalCache<Object, Object> map = makeLocalCache(createCacheBuilder().weakValues());
+    checkStrength(map, Strength.STRONG, Strength.WEAK);
+    assertSame(EntryFactory.STRONG, map.entryFactory);
+  }
+
+  public void testSetSoftValues() {
+    LocalCache<Object, Object> map = makeLocalCache(createCacheBuilder().softValues());
+    checkStrength(map, Strength.STRONG, Strength.SOFT);
+    assertSame(EntryFactory.STRONG, map.entryFactory);
+  }
+
+  private static void checkStrength(
+      LocalCache<Object, Object> map, Strength keyStrength, Strength valueStrength) {
+    assertSame(keyStrength, map.keyStrength);
+    assertSame(valueStrength, map.valueStrength);
+    assertSame(keyStrength.defaultEquivalence(), map.keyEquivalence);
+    assertSame(valueStrength.defaultEquivalence(), map.valueEquivalence);
+  }
+
+  public void testSetExpireAfterWrite() {
+    long duration = 42;
+    TimeUnit unit = TimeUnit.SECONDS;
+    LocalCache<Object, Object> map =
+        makeLocalCache(createCacheBuilder().expireAfterWrite(duration, unit));
+    assertEquals(unit.toNanos(duration), map.expireAfterWriteNanos);
+  }
+
+  public void testSetExpireAfterAccess() {
+    long duration = 42;
+    TimeUnit unit = TimeUnit.SECONDS;
+    LocalCache<Object, Object> map =
+        makeLocalCache(createCacheBuilder().expireAfterAccess(duration, unit));
+    assertEquals(unit.toNanos(duration), map.expireAfterAccessNanos);
+  }
+
+  public void testSetRefresh() {
+    long duration = 42;
+    TimeUnit unit = TimeUnit.SECONDS;
+    LocalCache<Object, Object> map =
+        makeLocalCache(createCacheBuilder().refreshAfterWrite(duration, unit));
+    assertEquals(unit.toNanos(duration), map.refreshNanos);
+  }
+
+  public void testSetRemovalListener() {
+    RemovalListener<Object, Object> testListener = TestingRemovalListeners.nullRemovalListener();
+    LocalCache<Object, Object> map =
+        makeLocalCache(createCacheBuilder().removalListener(testListener));
+    assertSame(testListener, map.removalListener);
+  }
+
+  public void testSetTicker() {
+    Ticker testTicker = new Ticker() {
+      @Override
+      public long read() {
+        return 0;
+      }
+    };
+    LocalCache<Object, Object> map = makeLocalCache(createCacheBuilder().ticker(testTicker));
+    assertSame(testTicker, map.ticker);
+  }
+
+  public void testEntryFactory() {
+    assertSame(EntryFactory.STRONG,
+        EntryFactory.getFactory(Strength.STRONG, false, false));
+    assertSame(EntryFactory.STRONG_ACCESS,
+        EntryFactory.getFactory(Strength.STRONG, true, false));
+    assertSame(EntryFactory.STRONG_WRITE,
+        EntryFactory.getFactory(Strength.STRONG, false, true));
+    assertSame(EntryFactory.STRONG_ACCESS_WRITE,
+        EntryFactory.getFactory(Strength.STRONG, true, true));
+    assertSame(EntryFactory.WEAK,
+        EntryFactory.getFactory(Strength.WEAK, false, false));
+    assertSame(EntryFactory.WEAK_ACCESS,
+        EntryFactory.getFactory(Strength.WEAK, true, false));
+    assertSame(EntryFactory.WEAK_WRITE,
+        EntryFactory.getFactory(Strength.WEAK, false, true));
+    assertSame(EntryFactory.WEAK_ACCESS_WRITE,
+        EntryFactory.getFactory(Strength.WEAK, true, true));
+  }
+
+  // computation tests
+
+  public void testCompute() throws ExecutionException {
+    CountingLoader loader = new CountingLoader();
+    LocalCache<Object, Object> map = makeLocalCache(createCacheBuilder());
+    assertEquals(0, loader.getCount());
+
+    Object key = new Object();
+    Object value = map.get(key, loader);
+    assertEquals(1, loader.getCount());
+    assertEquals(value, map.get(key, loader));
+    assertEquals(1, loader.getCount());
+  }
+
+  public void testRecordReadOnCompute() throws ExecutionException {
+    CountingLoader loader = new CountingLoader();
+    for (CacheBuilder<Object, Object> builder : allEvictingMakers()) {
+      LocalCache<Object, Object> map =
+          makeLocalCache(builder.concurrencyLevel(1));
+      Segment<Object, Object> segment = map.segments[0];
+      List<ReferenceEntry<Object, Object>> writeOrder = Lists.newLinkedList();
+      List<ReferenceEntry<Object, Object>> readOrder = Lists.newLinkedList();
+      for (int i = 0; i < SMALL_MAX_SIZE; i++) {
+        Object key = new Object();
+        int hash = map.hash(key);
+
+        map.get(key, loader);
+        ReferenceEntry<Object, Object> entry = segment.getEntry(key, hash);
+        writeOrder.add(entry);
+        readOrder.add(entry);
+      }
+
+      checkEvictionQueues(map, segment, readOrder, writeOrder);
+      checkExpirationTimes(map);
+      assertTrue(segment.recencyQueue.isEmpty());
+
+      // access some of the elements
+      Random random = new Random();
+      List<ReferenceEntry<Object, Object>> reads = Lists.newArrayList();
+      Iterator<ReferenceEntry<Object, Object>> i = readOrder.iterator();
+      while (i.hasNext()) {
+        ReferenceEntry<Object, Object> entry = i.next();
+        if (random.nextBoolean()) {
+          map.get(entry.getKey(), loader);
+          reads.add(entry);
+          i.remove();
+          assertTrue(segment.recencyQueue.size() <= DRAIN_THRESHOLD);
+        }
+      }
+      int undrainedIndex = reads.size() - segment.recencyQueue.size();
+      checkAndDrainRecencyQueue(map, segment, reads.subList(undrainedIndex, reads.size()));
+      readOrder.addAll(reads);
+
+      checkEvictionQueues(map, segment, readOrder, writeOrder);
+      checkExpirationTimes(map);
+    }
+  }
+
+  public void testComputeExistingEntry() throws ExecutionException {
+    CountingLoader loader = new CountingLoader();
+    LocalCache<Object, Object> map = makeLocalCache(createCacheBuilder());
+    assertEquals(0, loader.getCount());
+
+    Object key = new Object();
+    Object value = new Object();
+    map.put(key, value);
+
+    assertEquals(value, map.get(key, loader));
+    assertEquals(0, loader.getCount());
+  }
+
+  public void testComputePartiallyCollectedKey() throws ExecutionException {
+    CacheBuilder<Object, Object> builder = createCacheBuilder().concurrencyLevel(1);
+    CountingLoader loader = new CountingLoader();
+    LocalCache<Object, Object> map = makeLocalCache(builder);
+    Segment<Object, Object> segment = map.segments[0];
+    AtomicReferenceArray<ReferenceEntry<Object, Object>> table = segment.table;
+    assertEquals(0, loader.getCount());
+
+    Object key = new Object();
+    int hash = map.hash(key);
+    Object value = new Object();
+    int index = hash & (table.length() - 1);
+
+    DummyEntry<Object, Object> entry = DummyEntry.create(key, hash, null);
+    DummyValueReference<Object, Object> valueRef = DummyValueReference.create(value, entry);
+    entry.setValueReference(valueRef);
+    table.set(index, entry);
+    segment.count++;
+
+    assertSame(value, map.get(key, loader));
+    assertEquals(0, loader.getCount());
+    assertEquals(1, segment.count);
+
+    entry.clearKey();
+    assertNotSame(value, map.get(key, loader));
+    assertEquals(1, loader.getCount());
+    assertEquals(2, segment.count);
+  }
+
+  public void testComputePartiallyCollectedValue() throws ExecutionException {
+    CacheBuilder<Object, Object> builder = createCacheBuilder().concurrencyLevel(1);
+    CountingLoader loader = new CountingLoader();
+    LocalCache<Object, Object> map = makeLocalCache(builder);
+    Segment<Object, Object> segment = map.segments[0];
+    AtomicReferenceArray<ReferenceEntry<Object, Object>> table = segment.table;
+    assertEquals(0, loader.getCount());
+
+    Object key = new Object();
+    int hash = map.hash(key);
+    Object value = new Object();
+    int index = hash & (table.length() - 1);
+
+    DummyEntry<Object, Object> entry = DummyEntry.create(key, hash, null);
+    DummyValueReference<Object, Object> valueRef = DummyValueReference.create(value, entry);
+    entry.setValueReference(valueRef);
+    table.set(index, entry);
+    segment.count++;
+
+    assertSame(value, map.get(key, loader));
+    assertEquals(0, loader.getCount());
+    assertEquals(1, segment.count);
+
+    valueRef.clear();
+    assertNotSame(value, map.get(key, loader));
+    assertEquals(1, loader.getCount());
+    assertEquals(1, segment.count);
+  }
+
+  public void testComputeExpiredEntry() throws ExecutionException {
+    CacheBuilder<Object, Object> builder = createCacheBuilder()
+        .expireAfterWrite(1, TimeUnit.NANOSECONDS);
+    CountingLoader loader = new CountingLoader();
+    LocalCache<Object, Object> map = makeLocalCache(builder);
+    assertEquals(0, loader.getCount());
+
+    Object key = new Object();
+    Object one = map.get(key, loader);
+    assertEquals(1, loader.getCount());
+
+    Object two = map.get(key, loader);
+    assertNotSame(one, two);
+    assertEquals(2, loader.getCount());
+  }
+
+  public void testCopyEntry_computing() {
+    final CountDownLatch startSignal = new CountDownLatch(1);
+    final CountDownLatch computingSignal = new CountDownLatch(1);
+    final CountDownLatch doneSignal = new CountDownLatch(2);
+    final Object computedObject = new Object();
+
+    final CacheLoader<Object, Object> loader = new CacheLoader<Object, Object>() {
+      @Override
+      public Object load(Object key) throws Exception {
+        computingSignal.countDown();
+        startSignal.await();
+        return computedObject;
+      }
+    };
+
+    QueuingRemovalListener<Object, Object> listener = queuingRemovalListener();
+    CacheBuilder<Object, Object> builder = createCacheBuilder()
+        .concurrencyLevel(1)
+        .removalListener(listener);
+    final LocalCache<Object, Object> map = makeLocalCache(builder);
+    Segment<Object, Object> segment = map.segments[0];
+    AtomicReferenceArray<ReferenceEntry<Object, Object>> table = segment.table;
+    assertTrue(listener.isEmpty());
+
+    final Object one = new Object();
+    int hash = map.hash(one);
+    int index = hash & (table.length() - 1);
+
+    new Thread() {
+      @Override
+      public void run() {
+        try {
+          map.get(one, loader);
+        } catch (ExecutionException e) {
+          throw new RuntimeException(e);
+        }
+        doneSignal.countDown();
+      }
+    }.start();
+
+    try {
+      computingSignal.await();
+    } catch (InterruptedException e) {
+      throw new RuntimeException(e);
+    }
+
+    new Thread() {
+      @Override
+      public void run() {
+        try {
+          map.get(one, loader);
+        } catch (ExecutionException e) {
+          throw new RuntimeException(e);
+        }
+        doneSignal.countDown();
+      }
+    }.start();
+
+    ReferenceEntry<Object, Object> entry = segment.getEntry(one, hash);
+    ReferenceEntry<Object, Object> newEntry = segment.copyEntry(entry, null);
+    table.set(index, newEntry);
+
+    @SuppressWarnings("unchecked")
+    LoadingValueReference<Object, Object> valueReference =
+        (LoadingValueReference) newEntry.getValueReference();
+    assertFalse(valueReference.futureValue.isDone());
+    startSignal.countDown();
+
+    try {
+      doneSignal.await();
+    } catch (InterruptedException e) {
+      throw new RuntimeException(e);
+    }
+
+    map.cleanUp(); // force notifications
+    assertTrue(listener.isEmpty());
+    assertTrue(map.containsKey(one));
+    assertEquals(1, map.size());
+    assertSame(computedObject, map.get(one));
+  }
+
+  public void testRemovalListenerCheckedException() {
+    final RuntimeException e = new RuntimeException();
+    RemovalListener<Object, Object> listener = new RemovalListener<Object, Object>() {
+      @Override
+      public void onRemoval(RemovalNotification<Object, Object> notification) {
+        throw e;
+      }
+    };
+
+    CacheBuilder<Object, Object> builder = createCacheBuilder().removalListener(listener);
+    final LocalCache<Object, Object> cache = makeLocalCache(builder);
+    Object key = new Object();
+    cache.put(key, new Object());
+    checkNothingLogged();
+
+    cache.remove(key);
+    checkLogged(e);
+  }
+
+  public void testRemovalListener_replaced_computing() {
+    final CountDownLatch startSignal = new CountDownLatch(1);
+    final CountDownLatch computingSignal = new CountDownLatch(1);
+    final CountDownLatch doneSignal = new CountDownLatch(1);
+    final Object computedObject = new Object();
+
+    final CacheLoader<Object, Object> loader = new CacheLoader<Object, Object>() {
+      @Override
+      public Object load(Object key) throws Exception {
+        computingSignal.countDown();
+        startSignal.await();
+        return computedObject;
+      }
+    };
+
+    QueuingRemovalListener<Object, Object> listener = queuingRemovalListener();
+    CacheBuilder<Object, Object> builder = createCacheBuilder().removalListener(listener);
+    final LocalCache<Object, Object> map = makeLocalCache(builder);
+    assertTrue(listener.isEmpty());
+
+    final Object one = new Object();
+    final Object two = new Object();
+
+    new Thread() {
+      @Override
+      public void run() {
+        try {
+          map.get(one, loader);
+        } catch (ExecutionException e) {
+          throw new RuntimeException(e);
+        }
+        doneSignal.countDown();
+      }
+    }.start();
+
+    try {
+      computingSignal.await();
+    } catch (InterruptedException e) {
+      throw new RuntimeException(e);
+    }
+
+    map.put(one, two);
+    assertSame(two, map.get(one));
+    startSignal.countDown();
+
+    try {
+      doneSignal.await();
+    } catch (InterruptedException e) {
+      throw new RuntimeException(e);
+    }
+
+    map.cleanUp(); // force notifications
+    assertNotified(listener, one, computedObject, RemovalCause.REPLACED);
+    assertTrue(listener.isEmpty());
+  }
+
+  public void testSegmentRefresh_duplicate() throws ExecutionException {
+    LocalCache<Object, Object> map = makeLocalCache(createCacheBuilder()
+        .concurrencyLevel(1));
+    Segment<Object, Object> segment = map.segments[0];
+
+    Object key = new Object();
+    int hash = map.hash(key);
+    AtomicReferenceArray<ReferenceEntry<Object, Object>> table = segment.table;
+    int index = hash & (table.length() - 1);
+
+    // already loading
+    DummyEntry<Object, Object> entry = DummyEntry.create(key, hash, null);
+    DummyValueReference<Object, Object> valueRef = DummyValueReference.create(null, entry);
+    valueRef.setLoading(true);
+    entry.setValueReference(valueRef);
+    table.set(index, entry);
+    assertNull(segment.refresh(key, hash, identityLoader()));
+  }
+
+  // Removal listener tests
+
+  public void testRemovalListener_explicit() {
+    QueuingRemovalListener<Object, Object> listener = queuingRemovalListener();
+    LocalCache<Object, Object> map = makeLocalCache(createCacheBuilder()
+        .removalListener(listener));
+    assertTrue(listener.isEmpty());
+
+    Object one = new Object();
+    Object two = new Object();
+    Object three = new Object();
+    Object four = new Object();
+    Object five = new Object();
+    Object six = new Object();
+
+    map.put(one, two);
+    map.remove(one);
+    assertNotified(listener, one, two, RemovalCause.EXPLICIT);
+
+    map.put(two, three);
+    map.remove(two, three);
+    assertNotified(listener, two, three, RemovalCause.EXPLICIT);
+
+    map.put(three, four);
+    Iterator<?> i = map.entrySet().iterator();
+    i.next();
+    i.remove();
+    assertNotified(listener, three, four, RemovalCause.EXPLICIT);
+
+    map.put(four, five);
+    i = map.keySet().iterator();
+    i.next();
+    i.remove();
+    assertNotified(listener, four, five, RemovalCause.EXPLICIT);
+
+    map.put(five, six);
+    i = map.values().iterator();
+    i.next();
+    i.remove();
+    assertNotified(listener, five, six, RemovalCause.EXPLICIT);
+
+    assertTrue(listener.isEmpty());
+  }
+
+  public void testRemovalListener_replaced() {
+    QueuingRemovalListener<Object, Object> listener = queuingRemovalListener();
+    LocalCache<Object, Object> map = makeLocalCache(createCacheBuilder()
+        .removalListener(listener));
+    assertTrue(listener.isEmpty());
+
+    Object one = new Object();
+    Object two = new Object();
+    Object three = new Object();
+    Object four = new Object();
+    Object five = new Object();
+    Object six = new Object();
+
+    map.put(one, two);
+    map.put(one, three);
+    assertNotified(listener, one, two, RemovalCause.REPLACED);
+
+    Map<Object, Object> newMap = ImmutableMap.of(one, four);
+    map.putAll(newMap);
+    assertNotified(listener, one, three, RemovalCause.REPLACED);
+
+    map.replace(one, five);
+    assertNotified(listener, one, four, RemovalCause.REPLACED);
+
+    map.replace(one, five, six);
+    assertNotified(listener, one, five, RemovalCause.REPLACED);
+  }
+
+  public void testRemovalListener_collected() {
+    QueuingRemovalListener<Object, Object> listener = queuingRemovalListener();
+    LocalCache<Object, Object> map = makeLocalCache(createCacheBuilder()
+        .concurrencyLevel(1)
+        .softValues()
+        .removalListener(listener));
+    Segment<Object, Object> segment = map.segments[0];
+    assertTrue(listener.isEmpty());
+
+    Object one = new Object();
+    Object two = new Object();
+    Object three = new Object();
+
+    map.put(one, two);
+    map.put(two, three);
+    assertTrue(listener.isEmpty());
+
+    int hash = map.hash(one);
+    ReferenceEntry<Object, Object> entry = segment.getEntry(one, hash);
+    map.reclaimValue(entry.getValueReference());
+    assertNotified(listener, one, two, RemovalCause.COLLECTED);
+
+    assertTrue(listener.isEmpty());
+  }
+
+  public void testRemovalListener_expired() {
+    FakeTicker ticker = new FakeTicker();
+    QueuingRemovalListener<Object, Object> listener = queuingRemovalListener();
+    LocalCache<Object, Object> map = makeLocalCache(createCacheBuilder()
+        .concurrencyLevel(1)
+        .expireAfterWrite(2, TimeUnit.NANOSECONDS)
+        .ticker(ticker)
+        .removalListener(listener));
+    assertTrue(listener.isEmpty());
+
+    Object one = new Object();
+    Object two = new Object();
+    Object three = new Object();
+    Object four = new Object();
+    Object five = new Object();
+
+    map.put(one, two);
+    ticker.advance(1);
+    map.put(two, three);
+    ticker.advance(1);
+    map.put(three, four);
+    assertTrue(listener.isEmpty());
+    ticker.advance(1);
+    map.put(four, five);
+    assertNotified(listener, one, two, RemovalCause.EXPIRED);
+
+    assertTrue(listener.isEmpty());
+  }
+
+  public void testRemovalListener_size() {
+    QueuingRemovalListener<Object, Object> listener = queuingRemovalListener();
+    LocalCache<Object, Object> map = makeLocalCache(createCacheBuilder()
+        .concurrencyLevel(1)
+        .maximumSize(2)
+        .removalListener(listener));
+    assertTrue(listener.isEmpty());
+
+    Object one = new Object();
+    Object two = new Object();
+    Object three = new Object();
+    Object four = new Object();
+
+    map.put(one, two);
+    map.put(two, three);
+    assertTrue(listener.isEmpty());
+    map.put(three, four);
+    assertNotified(listener, one, two, RemovalCause.SIZE);
+
+    assertTrue(listener.isEmpty());
+  }
+
+  static <K, V> void assertNotified(
+      QueuingRemovalListener<K, V> listener, K key, V value, RemovalCause cause) {
+    RemovalNotification<K, V> notification = listener.remove();
+    assertSame(key, notification.getKey());
+    assertSame(value, notification.getValue());
+    assertSame(cause, notification.getCause());
+  }
+
+  // Segment core tests
+
+  public void testNewEntry() {
+    for (CacheBuilder<Object, Object> builder : allEntryTypeMakers()) {
+      LocalCache<Object, Object> map = makeLocalCache(builder);
+
+      Object keyOne = new Object();
+      Object valueOne = new Object();
+      int hashOne = map.hash(keyOne);
+      ReferenceEntry<Object, Object> entryOne = map.newEntry(keyOne, hashOne, null);
+      ValueReference<Object, Object> valueRefOne = map.newValueReference(entryOne, valueOne, 1);
+      assertSame(valueOne, valueRefOne.get());
+      entryOne.setValueReference(valueRefOne);
+
+      assertSame(keyOne, entryOne.getKey());
+      assertEquals(hashOne, entryOne.getHash());
+      assertNull(entryOne.getNext());
+      assertSame(valueRefOne, entryOne.getValueReference());
+
+      Object keyTwo = new Object();
+      Object valueTwo = new Object();
+      int hashTwo = map.hash(keyTwo);
+      ReferenceEntry<Object, Object> entryTwo = map.newEntry(keyTwo, hashTwo, entryOne);
+      ValueReference<Object, Object> valueRefTwo = map.newValueReference(entryTwo, valueTwo, 1);
+      assertSame(valueTwo, valueRefTwo.get());
+      entryTwo.setValueReference(valueRefTwo);
+
+      assertSame(keyTwo, entryTwo.getKey());
+      assertEquals(hashTwo, entryTwo.getHash());
+      assertSame(entryOne, entryTwo.getNext());
+      assertSame(valueRefTwo, entryTwo.getValueReference());
+    }
+  }
+
+  public void testCopyEntry() {
+    for (CacheBuilder<Object, Object> builder : allEntryTypeMakers()) {
+      LocalCache<Object, Object> map = makeLocalCache(builder);
+
+      Object keyOne = new Object();
+      Object valueOne = new Object();
+      int hashOne = map.hash(keyOne);
+      ReferenceEntry<Object, Object> entryOne = map.newEntry(keyOne, hashOne, null);
+      entryOne.setValueReference(map.newValueReference(entryOne, valueOne, 1));
+
+      Object keyTwo = new Object();
+      Object valueTwo = new Object();
+      int hashTwo = map.hash(keyTwo);
+      ReferenceEntry<Object, Object> entryTwo = map.newEntry(keyTwo, hashTwo, entryOne);
+      entryTwo.setValueReference(map.newValueReference(entryTwo, valueTwo, 1));
+      if (map.usesAccessQueue()) {
+        LocalCache.connectAccessOrder(entryOne, entryTwo);
+      }
+      if (map.usesWriteQueue()) {
+        LocalCache.connectWriteOrder(entryOne, entryTwo);
+      }
+      assertConnected(map, entryOne, entryTwo);
+
+      ReferenceEntry<Object, Object> copyOne = map.copyEntry(entryOne, null);
+      assertSame(keyOne, entryOne.getKey());
+      assertEquals(hashOne, entryOne.getHash());
+      assertNull(entryOne.getNext());
+      assertSame(valueOne, copyOne.getValueReference().get());
+      assertConnected(map, copyOne, entryTwo);
+
+      ReferenceEntry<Object, Object> copyTwo = map.copyEntry(entryTwo, copyOne);
+      assertSame(keyTwo, copyTwo.getKey());
+      assertEquals(hashTwo, copyTwo.getHash());
+      assertSame(copyOne, copyTwo.getNext());
+      assertSame(valueTwo, copyTwo.getValueReference().get());
+      assertConnected(map, copyOne, copyTwo);
+    }
+  }
+
+  private static <K, V> void assertConnected(
+      LocalCache<K, V> map, ReferenceEntry<K, V> one, ReferenceEntry<K, V> two) {
+    if (map.usesWriteQueue()) {
+      assertSame(two, one.getNextInWriteQueue());
+    }
+    if (map.usesAccessQueue()) {
+      assertSame(two, one.getNextInAccessQueue());
+    }
+  }
+
+  public void testSegmentGetAndContains() {
+    FakeTicker ticker = new FakeTicker();
+    LocalCache<Object, Object> map = makeLocalCache(createCacheBuilder()
+        .concurrencyLevel(1)
+        .ticker(ticker)
+        .expireAfterAccess(1, TimeUnit.NANOSECONDS));
+    Segment<Object, Object> segment = map.segments[0];
+    // TODO(fry): check recency ordering
+
+    Object key = new Object();
+    int hash = map.hash(key);
+    Object value = new Object();
+    AtomicReferenceArray<ReferenceEntry<Object, Object>> table = segment.table;
+    int index = hash & (table.length() - 1);
+
+    ReferenceEntry<Object, Object> entry = map.newEntry(key, hash, null);
+    ValueReference<Object, Object> valueRef = map.newValueReference(entry, value, 1);
+    entry.setValueReference(valueRef);
+
+    assertNull(segment.get(key, hash));
+
+    // count == 0
+    table.set(index, entry);
+    assertNull(segment.get(key, hash));
+    assertFalse(segment.containsKey(key, hash));
+    assertFalse(segment.containsValue(value));
+
+    // count == 1
+    segment.count++;
+    assertSame(value, segment.get(key, hash));
+    assertTrue(segment.containsKey(key, hash));
+    assertTrue(segment.containsValue(value));
+    // don't see absent values now that count > 0
+    assertNull(segment.get(new Object(), hash));
+
+    // null key
+    DummyEntry<Object, Object> nullEntry = DummyEntry.create(null, hash, entry);
+    Object nullValue = new Object();
+    ValueReference<Object, Object> nullValueRef = map.newValueReference(nullEntry, nullValue, 1);
+    nullEntry.setValueReference(nullValueRef);
+    table.set(index, nullEntry);
+    // skip the null key
+    assertSame(value, segment.get(key, hash));
+    assertTrue(segment.containsKey(key, hash));
+    assertTrue(segment.containsValue(value));
+    assertFalse(segment.containsValue(nullValue));
+
+    // hash collision
+    DummyEntry<Object, Object> dummy = DummyEntry.create(new Object(), hash, entry);
+    Object dummyValue = new Object();
+    ValueReference<Object, Object> dummyValueRef = map.newValueReference(dummy, dummyValue, 1);
+    dummy.setValueReference(dummyValueRef);
+    table.set(index, dummy);
+    assertSame(value, segment.get(key, hash));
+    assertTrue(segment.containsKey(key, hash));
+    assertTrue(segment.containsValue(value));
+    assertTrue(segment.containsValue(dummyValue));
+
+    // key collision
+    dummy = DummyEntry.create(key, hash, entry);
+    dummyValue = new Object();
+    dummyValueRef = map.newValueReference(dummy, dummyValue, 1);
+    dummy.setValueReference(dummyValueRef);
+    table.set(index, dummy);
+    // returns the most recent entry
+    assertSame(dummyValue, segment.get(key, hash));
+    assertTrue(segment.containsKey(key, hash));
+    assertTrue(segment.containsValue(value));
+    assertTrue(segment.containsValue(dummyValue));
+
+    // expired
+    dummy.setAccessTime(ticker.read() - 2);
+    assertNull(segment.get(key, hash));
+    assertFalse(segment.containsKey(key, hash));
+    assertTrue(segment.containsValue(value));
+    assertFalse(segment.containsValue(dummyValue));
+  }
+
+  public void testSegmentReplaceValue() {
+    LocalCache<Object, Object> map =
+        makeLocalCache(createCacheBuilder().concurrencyLevel(1).expireAfterAccess(99999, SECONDS));
+    Segment<Object, Object> segment = map.segments[0];
+    // TODO(fry): check recency ordering
+
+    Object key = new Object();
+    int hash = map.hash(key);
+    Object oldValue = new Object();
+    Object newValue = new Object();
+    AtomicReferenceArray<ReferenceEntry<Object, Object>> table = segment.table;
+    int index = hash & (table.length() - 1);
+
+    DummyEntry<Object, Object> entry = DummyEntry.create(key, hash, null);
+    DummyValueReference<Object, Object> oldValueRef = DummyValueReference.create(oldValue, entry);
+    entry.setValueReference(oldValueRef);
+
+    // no entry
+    assertFalse(segment.replace(key, hash, oldValue, newValue));
+    assertEquals(0, segment.count);
+
+    // same value
+    table.set(index, entry);
+    segment.count++;
+    assertEquals(1, segment.count);
+    assertSame(oldValue, segment.get(key, hash));
+    assertTrue(segment.replace(key, hash, oldValue, newValue));
+    assertEquals(1, segment.count);
+    assertSame(newValue, segment.get(key, hash));
+
+    // different value
+    assertFalse(segment.replace(key, hash, oldValue, newValue));
+    assertEquals(1, segment.count);
+    assertSame(newValue, segment.get(key, hash));
+
+    // cleared
+    entry.setValueReference(oldValueRef);
+    assertSame(oldValue, segment.get(key, hash));
+    oldValueRef.clear();
+    assertFalse(segment.replace(key, hash, oldValue, newValue));
+    assertEquals(0, segment.count);
+    assertNull(segment.get(key, hash));
+  }
+
+  public void testSegmentReplace() {
+    LocalCache<Object, Object> map =
+        makeLocalCache(createCacheBuilder().concurrencyLevel(1).expireAfterAccess(99999, SECONDS));
+    Segment<Object, Object> segment = map.segments[0];
+    // TODO(fry): check recency ordering
+
+    Object key = new Object();
+    int hash = map.hash(key);
+    Object oldValue = new Object();
+    Object newValue = new Object();
+    AtomicReferenceArray<ReferenceEntry<Object, Object>> table = segment.table;
+    int index = hash & (table.length() - 1);
+
+    DummyEntry<Object, Object> entry = DummyEntry.create(key, hash, null);
+    DummyValueReference<Object, Object> oldValueRef = DummyValueReference.create(oldValue, entry);
+    entry.setValueReference(oldValueRef);
+
+    // no entry
+    assertNull(segment.replace(key, hash, newValue));
+    assertEquals(0, segment.count);
+
+    // same key
+    table.set(index, entry);
+    segment.count++;
+    assertEquals(1, segment.count);
+    assertSame(oldValue, segment.get(key, hash));
+    assertSame(oldValue, segment.replace(key, hash, newValue));
+    assertEquals(1, segment.count);
+    assertSame(newValue, segment.get(key, hash));
+
+    // cleared
+    entry.setValueReference(oldValueRef);
+    assertSame(oldValue, segment.get(key, hash));
+    oldValueRef.clear();
+    assertNull(segment.replace(key, hash, newValue));
+    assertEquals(0, segment.count);
+    assertNull(segment.get(key, hash));
+  }
+
+  public void testSegmentPut() {
+    LocalCache<Object, Object> map =
+        makeLocalCache(createCacheBuilder().concurrencyLevel(1).expireAfterAccess(99999, SECONDS));
+    Segment<Object, Object> segment = map.segments[0];
+    // TODO(fry): check recency ordering
+
+    Object key = new Object();
+    int hash = map.hash(key);
+    Object oldValue = new Object();
+    Object newValue = new Object();
+
+    // no entry
+    assertEquals(0, segment.count);
+    assertNull(segment.put(key, hash, oldValue, false));
+    assertEquals(1, segment.count);
+
+    // same key
+    assertSame(oldValue, segment.put(key, hash, newValue, false));
+    assertEquals(1, segment.count);
+    assertSame(newValue, segment.get(key, hash));
+
+    // cleared
+    ReferenceEntry<Object, Object> entry = segment.getEntry(key, hash);
+    DummyValueReference<Object, Object> oldValueRef = DummyValueReference.create(oldValue, entry);
+    entry.setValueReference(oldValueRef);
+    assertSame(oldValue, segment.get(key, hash));
+    oldValueRef.clear();
+    assertNull(segment.put(key, hash, newValue, false));
+    assertEquals(1, segment.count);
+    assertSame(newValue, segment.get(key, hash));
+  }
+
+  public void testSegmentPutIfAbsent() {
+    LocalCache<Object, Object> map =
+        makeLocalCache(createCacheBuilder().concurrencyLevel(1).expireAfterAccess(99999, SECONDS));
+    Segment<Object, Object> segment = map.segments[0];
+    // TODO(fry): check recency ordering
+
+    Object key = new Object();
+    int hash = map.hash(key);
+    Object oldValue = new Object();
+    Object newValue = new Object();
+
+    // no entry
+    assertEquals(0, segment.count);
+    assertNull(segment.put(key, hash, oldValue, true));
+    assertEquals(1, segment.count);
+
+    // same key
+    assertSame(oldValue, segment.put(key, hash, newValue, true));
+    assertEquals(1, segment.count);
+    assertSame(oldValue, segment.get(key, hash));
+
+    // cleared
+    ReferenceEntry<Object, Object> entry = segment.getEntry(key, hash);
+    DummyValueReference<Object, Object> oldValueRef = DummyValueReference.create(oldValue, entry);
+    entry.setValueReference(oldValueRef);
+    assertSame(oldValue, segment.get(key, hash));
+    oldValueRef.clear();
+    assertNull(segment.put(key, hash, newValue, true));
+    assertEquals(1, segment.count);
+    assertSame(newValue, segment.get(key, hash));
+  }
+
+  public void testSegmentPut_expand() {
+    LocalCache<Object, Object> map =
+        makeLocalCache(createCacheBuilder().concurrencyLevel(1).initialCapacity(1));
+    Segment<Object, Object> segment = map.segments[0];
+    assertEquals(1, segment.table.length());
+
+    int count = 1024;
+    for (int i = 0; i < count; i++) {
+      Object key = new Object();
+      Object value = new Object();
+      int hash = map.hash(key);
+      assertNull(segment.put(key, hash, value, false));
+      assertTrue(segment.table.length() > i);
+    }
+  }
+
+  public void testSegmentPut_evict() {
+    int maxSize = 10;
+    LocalCache<Object, Object> map =
+        makeLocalCache(createCacheBuilder().concurrencyLevel(1).maximumSize(maxSize));
+
+    // manually add elements to avoid eviction
+    int originalCount = 1024;
+    LinkedHashMap<Object, Object> originalMap = Maps.newLinkedHashMap();
+    for (int i = 0; i < originalCount; i++) {
+      Object key = new Object();
+      Object value = new Object();
+      map.put(key, value);
+      originalMap.put(key, value);
+      if (i >= maxSize) {
+        Iterator<Object> it = originalMap.keySet().iterator();
+        it.next();
+        it.remove();
+      }
+      assertEquals(originalMap, map);
+    }
+  }
+
+  public void testSegmentStoreComputedValue() {
+    QueuingRemovalListener<Object, Object> listener = queuingRemovalListener();
+    LocalCache<Object, Object> map = makeLocalCache(createCacheBuilder()
+        .concurrencyLevel(1)
+        .removalListener(listener));
+    Segment<Object, Object> segment = map.segments[0];
+
+    Object key = new Object();
+    int hash = map.hash(key);
+    AtomicReferenceArray<ReferenceEntry<Object, Object>> table = segment.table;
+    int index = hash & (table.length() - 1);
+
+    DummyEntry<Object, Object> entry = DummyEntry.create(key, hash, null);
+    LoadingValueReference<Object, Object> valueRef = new LoadingValueReference<Object, Object>();
+    entry.setValueReference(valueRef);
+
+    // absent
+    Object value = new Object();
+    assertTrue(listener.isEmpty());
+    assertEquals(0, segment.count);
+    assertNull(segment.get(key, hash));
+    assertTrue(segment.storeLoadedValue(key, hash, valueRef, value));
+    assertSame(value, segment.get(key, hash));
+    assertEquals(1, segment.count);
+    assertTrue(listener.isEmpty());
+
+    // clobbered
+    Object value2 = new Object();
+    assertFalse(segment.storeLoadedValue(key, hash, valueRef, value2));
+    assertEquals(1, segment.count);
+    assertSame(value, segment.get(key, hash));
+    RemovalNotification<Object, Object> notification = listener.remove();
+    assertEquals(immutableEntry(key, value2), notification);
+    assertEquals(RemovalCause.REPLACED, notification.getCause());
+    assertTrue(listener.isEmpty());
+
+    // inactive
+    Object value3 = new Object();
+    map.clear();
+    listener.clear();
+    assertEquals(0, segment.count);
+    table.set(index, entry);
+    assertTrue(segment.storeLoadedValue(key, hash, valueRef, value3));
+    assertSame(value3, segment.get(key, hash));
+    assertEquals(1, segment.count);
+    assertTrue(listener.isEmpty());
+
+    // replaced
+    Object value4 = new Object();
+    DummyValueReference<Object, Object> value3Ref = DummyValueReference.create(value3, entry);
+    valueRef = new LoadingValueReference<Object, Object>(value3Ref);
+    entry.setValueReference(valueRef);
+    table.set(index, entry);
+    assertSame(value3, segment.get(key, hash));
+    assertEquals(1, segment.count);
+    assertTrue(segment.storeLoadedValue(key, hash, valueRef, value4));
+    assertSame(value4, segment.get(key, hash));
+    assertEquals(1, segment.count);
+    notification = listener.remove();
+    assertEquals(immutableEntry(key, value3), notification);
+    assertEquals(RemovalCause.REPLACED, notification.getCause());
+    assertTrue(listener.isEmpty());
+
+    // collected
+    entry.setValueReference(valueRef);
+    table.set(index, entry);
+    assertSame(value3, segment.get(key, hash));
+    assertEquals(1, segment.count);
+    value3Ref.clear();
+    assertTrue(segment.storeLoadedValue(key, hash, valueRef, value4));
+    assertSame(value4, segment.get(key, hash));
+    assertEquals(1, segment.count);
+    notification = listener.remove();
+    assertEquals(immutableEntry(key, null), notification);
+    assertEquals(RemovalCause.COLLECTED, notification.getCause());
+    assertTrue(listener.isEmpty());
+  }
+
+  public void testSegmentRemove() {
+    LocalCache<Object, Object> map = makeLocalCache(createCacheBuilder().concurrencyLevel(1));
+    Segment<Object, Object> segment = map.segments[0];
+
+    Object key = new Object();
+    int hash = map.hash(key);
+    Object oldValue = new Object();
+    AtomicReferenceArray<ReferenceEntry<Object, Object>> table = segment.table;
+    int index = hash & (table.length() - 1);
+
+    DummyEntry<Object, Object> entry = DummyEntry.create(key, hash, null);
+    DummyValueReference<Object, Object> oldValueRef = DummyValueReference.create(oldValue, entry);
+    entry.setValueReference(oldValueRef);
+
+    // no entry
+    assertEquals(0, segment.count);
+    assertNull(segment.remove(key, hash));
+    assertEquals(0, segment.count);
+
+    // same key
+    table.set(index, entry);
+    segment.count++;
+    assertEquals(1, segment.count);
+    assertSame(oldValue, segment.get(key, hash));
+    assertSame(oldValue, segment.remove(key, hash));
+    assertEquals(0, segment.count);
+    assertNull(segment.get(key, hash));
+
+    // cleared
+    table.set(index, entry);
+    segment.count++;
+    assertEquals(1, segment.count);
+    assertSame(oldValue, segment.get(key, hash));
+    oldValueRef.clear();
+    assertNull(segment.remove(key, hash));
+    assertEquals(0, segment.count);
+    assertNull(segment.get(key, hash));
+  }
+
+  public void testSegmentRemoveValue() {
+    LocalCache<Object, Object> map = makeLocalCache(createCacheBuilder().concurrencyLevel(1));
+    Segment<Object, Object> segment = map.segments[0];
+
+    Object key = new Object();
+    int hash = map.hash(key);
+    Object oldValue = new Object();
+    Object newValue = new Object();
+    AtomicReferenceArray<ReferenceEntry<Object, Object>> table = segment.table;
+    int index = hash & (table.length() - 1);
+
+    DummyEntry<Object, Object> entry = DummyEntry.create(key, hash, null);
+    DummyValueReference<Object, Object> oldValueRef = DummyValueReference.create(oldValue, entry);
+    entry.setValueReference(oldValueRef);
+
+    // no entry
+    assertEquals(0, segment.count);
+    assertNull(segment.remove(key, hash));
+    assertEquals(0, segment.count);
+
+    // same value
+    table.set(index, entry);
+    segment.count++;
+    assertEquals(1, segment.count);
+    assertSame(oldValue, segment.get(key, hash));
+    assertTrue(segment.remove(key, hash, oldValue));
+    assertEquals(0, segment.count);
+    assertNull(segment.get(key, hash));
+
+    // different value
+    table.set(index, entry);
+    segment.count++;
+    assertEquals(1, segment.count);
+    assertSame(oldValue, segment.get(key, hash));
+    assertFalse(segment.remove(key, hash, newValue));
+    assertEquals(1, segment.count);
+    assertSame(oldValue, segment.get(key, hash));
+
+    // cleared
+    assertSame(oldValue, segment.get(key, hash));
+    oldValueRef.clear();
+    assertFalse(segment.remove(key, hash, oldValue));
+    assertEquals(0, segment.count);
+    assertNull(segment.get(key, hash));
+  }
+
+  public void testExpand() {
+    LocalCache<Object, Object> map =
+        makeLocalCache(createCacheBuilder().concurrencyLevel(1).initialCapacity(1));
+    Segment<Object, Object> segment = map.segments[0];
+    assertEquals(1, segment.table.length());
+
+    // manually add elements to avoid expansion
+    int originalCount = 1024;
+    ReferenceEntry<Object, Object> entry = null;
+    for (int i = 0; i < originalCount; i++) {
+      Object key = new Object();
+      Object value = new Object();
+      int hash = map.hash(key);
+      // chain all entries together as we only have a single bucket
+      entry = map.newEntry(key, hash, entry);
+      ValueReference<Object, Object> valueRef = map.newValueReference(entry, value, 1);
+      entry.setValueReference(valueRef);
+    }
+    segment.table.set(0, entry);
+    segment.count = originalCount;
+    ImmutableMap<Object, Object> originalMap = ImmutableMap.copyOf(map);
+    assertEquals(originalCount, originalMap.size());
+    assertEquals(originalMap, map);
+
+    for (int i = 1; i <= originalCount * 2; i *= 2) {
+      if (i > 1) {
+        segment.expand();
+      }
+      assertEquals(i, segment.table.length());
+      assertEquals(originalCount, countLiveEntries(map, 0));
+      assertEquals(originalCount, segment.count);
+      assertEquals(originalMap, map);
+    }
+  }
+
+  public void testReclaimKey() {
+    CountingRemovalListener<Object, Object> listener = countingRemovalListener();
+    LocalCache<Object, Object> map = makeLocalCache(createCacheBuilder()
+        .concurrencyLevel(1)
+        .initialCapacity(1)
+        .maximumSize(SMALL_MAX_SIZE)
+        .expireAfterWrite(99999, SECONDS)
+        .removalListener(listener));
+    Segment<Object, Object> segment = map.segments[0];
+    AtomicReferenceArray<ReferenceEntry<Object, Object>> table = segment.table;
+    assertEquals(1, table.length());
+
+    // create 3 objects and chain them together
+    Object keyOne = new Object();
+    Object valueOne = new Object();
+    int hashOne = map.hash(keyOne);
+    DummyEntry<Object, Object> entryOne = createDummyEntry(keyOne, hashOne, valueOne, null);
+    Object keyTwo = new Object();
+    Object valueTwo = new Object();
+    int hashTwo = map.hash(keyTwo);
+    DummyEntry<Object, Object> entryTwo = createDummyEntry(keyTwo, hashTwo, valueTwo, entryOne);
+    Object keyThree = new Object();
+    Object valueThree = new Object();
+    int hashThree = map.hash(keyThree);
+    DummyEntry<Object, Object> entryThree =
+      createDummyEntry(keyThree, hashThree, valueThree, entryTwo);
+
+    // absent
+    assertEquals(0, listener.getCount());
+    assertFalse(segment.reclaimKey(entryOne, hashOne));
+    assertEquals(0, listener.getCount());
+    table.set(0, entryOne);
+    assertFalse(segment.reclaimKey(entryTwo, hashTwo));
+    assertEquals(0, listener.getCount());
+    table.set(0, entryTwo);
+    assertFalse(segment.reclaimKey(entryThree, hashThree));
+    assertEquals(0, listener.getCount());
+
+    // present
+    table.set(0, entryOne);
+    segment.count = 1;
+    assertTrue(segment.reclaimKey(entryOne, hashOne));
+    assertEquals(1, listener.getCount());
+    assertSame(keyOne, listener.getLastEvictedKey());
+    assertSame(valueOne, listener.getLastEvictedValue());
+    assertTrue(map.removalNotificationQueue.isEmpty());
+    assertFalse(segment.accessQueue.contains(entryOne));
+    assertFalse(segment.writeQueue.contains(entryOne));
+    assertEquals(0, segment.count);
+    assertNull(table.get(0));
+  }
+
+  public void testRemoveEntryFromChain() {
+    LocalCache<Object, Object> map = makeLocalCache(createCacheBuilder().concurrencyLevel(1));
+    Segment<Object, Object> segment = map.segments[0];
+
+    // create 3 objects and chain them together
+    Object keyOne = new Object();
+    Object valueOne = new Object();
+    int hashOne = map.hash(keyOne);
+    DummyEntry<Object, Object> entryOne = createDummyEntry(keyOne, hashOne, valueOne, null);
+    Object keyTwo = new Object();
+    Object valueTwo = new Object();
+    int hashTwo = map.hash(keyTwo);
+    DummyEntry<Object, Object> entryTwo = createDummyEntry(keyTwo, hashTwo, valueTwo, entryOne);
+    Object keyThree = new Object();
+    Object valueThree = new Object();
+    int hashThree = map.hash(keyThree);
+    DummyEntry<Object, Object> entryThree =
+      createDummyEntry(keyThree, hashThree, valueThree, entryTwo);
+
+    // alone
+    assertNull(segment.removeEntryFromChain(entryOne, entryOne));
+
+    // head
+    assertSame(entryOne, segment.removeEntryFromChain(entryTwo, entryTwo));
+
+    // middle
+    ReferenceEntry<Object, Object> newFirst = segment.removeEntryFromChain(entryThree, entryTwo);
+    assertSame(keyThree, newFirst.getKey());
+    assertSame(valueThree, newFirst.getValueReference().get());
+    assertEquals(hashThree, newFirst.getHash());
+    assertSame(entryOne, newFirst.getNext());
+
+    // tail (remaining entries are copied in reverse order)
+    newFirst = segment.removeEntryFromChain(entryThree, entryOne);
+    assertSame(keyTwo, newFirst.getKey());
+    assertSame(valueTwo, newFirst.getValueReference().get());
+    assertEquals(hashTwo, newFirst.getHash());
+    newFirst = newFirst.getNext();
+    assertSame(keyThree, newFirst.getKey());
+    assertSame(valueThree, newFirst.getValueReference().get());
+    assertEquals(hashThree, newFirst.getHash());
+    assertNull(newFirst.getNext());
+  }
+
+  public void testExpand_cleanup() {
+    LocalCache<Object, Object> map =
+        makeLocalCache(createCacheBuilder().concurrencyLevel(1).initialCapacity(1));
+    Segment<Object, Object> segment = map.segments[0];
+    assertEquals(1, segment.table.length());
+
+    // manually add elements to avoid expansion
+    // 1/3 null keys, 1/3 null values
+    int originalCount = 1024;
+    ReferenceEntry<Object, Object> entry = null;
+    for (int i = 0; i < originalCount; i++) {
+      Object key = new Object();
+      Object value = (i % 3 == 0) ? null : new Object();
+      int hash = map.hash(key);
+      if (i % 3 == 1) {
+        key = null;
+      }
+      // chain all entries together as we only have a single bucket
+      entry = DummyEntry.create(key, hash, entry);
+      ValueReference<Object, Object> valueRef = DummyValueReference.create(value, entry);
+      entry.setValueReference(valueRef);
+    }
+    segment.table.set(0, entry);
+    segment.count = originalCount;
+    int liveCount = originalCount / 3;
+    assertEquals(1, segment.table.length());
+    assertEquals(liveCount, countLiveEntries(map, 0));
+    ImmutableMap<Object, Object> originalMap = ImmutableMap.copyOf(map);
+    assertEquals(liveCount, originalMap.size());
+    // can't compare map contents until cleanup occurs
+
+    for (int i = 1; i <= originalCount * 2; i *= 2) {
+      if (i > 1) {
+        segment.expand();
+      }
+      assertEquals(i, segment.table.length());
+      assertEquals(liveCount, countLiveEntries(map, 0));
+      // expansion cleanup is sloppy, with a goal of avoiding unnecessary copies
+      assertTrue(segment.count >= liveCount);
+      assertTrue(segment.count <= originalCount);
+      assertEquals(originalMap, ImmutableMap.copyOf(map));
+    }
+  }
+
+  private static <K, V> int countLiveEntries(LocalCache<K, V> map, long now) {
+    int result = 0;
+    for (Segment<K, V> segment : map.segments) {
+      AtomicReferenceArray<ReferenceEntry<K, V>> table = segment.table;
+      for (int i = 0; i < table.length(); i++) {
+        for (ReferenceEntry<K, V> e = table.get(i); e != null; e = e.getNext()) {
+          if (map.isLive(e, now)) {
+            result++;
+          }
+        }
+      }
+    }
+    return result;
+  }
+
+  public void testClear() {
+    LocalCache<Object, Object> map = makeLocalCache(createCacheBuilder()
+        .concurrencyLevel(1)
+        .initialCapacity(1)
+        .maximumSize(SMALL_MAX_SIZE)
+        .expireAfterWrite(99999, SECONDS));
+    Segment<Object, Object> segment = map.segments[0];
+    AtomicReferenceArray<ReferenceEntry<Object, Object>> table = segment.table;
+    assertEquals(1, table.length());
+
+    Object key = new Object();
+    Object value = new Object();
+    int hash = map.hash(key);
+    DummyEntry<Object, Object> entry = createDummyEntry(key, hash, value, null);
+    segment.recordWrite(entry, 1, map.ticker.read());
+    segment.table.set(0, entry);
+    segment.readCount.incrementAndGet();
+    segment.count = 1;
+    segment.totalWeight = 1;
+
+    assertSame(entry, table.get(0));
+    assertSame(entry, segment.accessQueue.peek());
+    assertSame(entry, segment.writeQueue.peek());
+
+    segment.clear();
+    assertNull(table.get(0));
+    assertTrue(segment.accessQueue.isEmpty());
+    assertTrue(segment.writeQueue.isEmpty());
+    assertEquals(0, segment.readCount.get());
+    assertEquals(0, segment.count);
+    assertEquals(0, segment.totalWeight);
+  }
+
+  public void testClear_notification() {
+    QueuingRemovalListener<Object, Object> listener = queuingRemovalListener();
+    LocalCache<Object, Object> map = makeLocalCache(createCacheBuilder()
+        .concurrencyLevel(1)
+        .initialCapacity(1)
+        .maximumSize(SMALL_MAX_SIZE)
+        .expireAfterWrite(99999, SECONDS)
+        .removalListener(listener));
+    Segment<Object, Object> segment = map.segments[0];
+    AtomicReferenceArray<ReferenceEntry<Object, Object>> table = segment.table;
+    assertEquals(1, table.length());
+
+    Object key = new Object();
+    Object value = new Object();
+    int hash = map.hash(key);
+    DummyEntry<Object, Object> entry = createDummyEntry(key, hash, value, null);
+    segment.recordWrite(entry, 1, map.ticker.read());
+    segment.table.set(0, entry);
+    segment.readCount.incrementAndGet();
+    segment.count = 1;
+    segment.totalWeight = 1;
+
+    assertSame(entry, table.get(0));
+    assertSame(entry, segment.accessQueue.peek());
+    assertSame(entry, segment.writeQueue.peek());
+
+    segment.clear();
+    assertNull(table.get(0));
+    assertTrue(segment.accessQueue.isEmpty());
+    assertTrue(segment.writeQueue.isEmpty());
+    assertEquals(0, segment.readCount.get());
+    assertEquals(0, segment.count);
+    assertEquals(0, segment.totalWeight);
+    assertNotified(listener, key, value, RemovalCause.EXPLICIT);
+  }
+
+  public void testRemoveEntry() {
+    LocalCache<Object, Object> map = makeLocalCache(createCacheBuilder()
+        .concurrencyLevel(1)
+        .initialCapacity(1)
+        .maximumSize(SMALL_MAX_SIZE)
+        .expireAfterWrite(99999, SECONDS)
+        .removalListener(countingRemovalListener()));
+    Segment<Object, Object> segment = map.segments[0];
+    AtomicReferenceArray<ReferenceEntry<Object, Object>> table = segment.table;
+    assertEquals(1, table.length());
+
+    Object key = new Object();
+    Object value = new Object();
+    int hash = map.hash(key);
+    DummyEntry<Object, Object> entry = createDummyEntry(key, hash, value, null);
+
+    // remove absent
+    assertFalse(segment.removeEntry(entry, hash, RemovalCause.COLLECTED));
+
+    // remove live
+    segment.recordWrite(entry, 1, map.ticker.read());
+    table.set(0, entry);
+    segment.count = 1;
+    assertTrue(segment.removeEntry(entry, hash, RemovalCause.COLLECTED));
+    assertNotificationEnqueued(map, key, value, hash);
+    assertTrue(map.removalNotificationQueue.isEmpty());
+    assertFalse(segment.accessQueue.contains(entry));
+    assertFalse(segment.writeQueue.contains(entry));
+    assertEquals(0, segment.count);
+    assertNull(table.get(0));
+  }
+
+  public void testReclaimValue() {
+    CountingRemovalListener<Object, Object> listener =
+        countingRemovalListener();
+    LocalCache<Object, Object> map = makeLocalCache(createCacheBuilder()
+        .concurrencyLevel(1)
+        .initialCapacity(1)
+        .maximumSize(SMALL_MAX_SIZE)
+        .expireAfterWrite(99999, SECONDS)
+        .removalListener(listener));
+    Segment<Object, Object> segment = map.segments[0];
+    AtomicReferenceArray<ReferenceEntry<Object, Object>> table = segment.table;
+    assertEquals(1, table.length());
+
+    Object key = new Object();
+    Object value = new Object();
+    int hash = map.hash(key);
+    DummyEntry<Object, Object> entry = DummyEntry.create(key, hash, null);
+    DummyValueReference<Object, Object> valueRef = DummyValueReference.create(value, entry);
+    entry.setValueReference(valueRef);
+
+    // reclaim absent
+    assertFalse(segment.reclaimValue(key, hash, valueRef));
+
+    // reclaim live
+    segment.recordWrite(entry, 1, map.ticker.read());
+    table.set(0, entry);
+    segment.count = 1;
+    assertTrue(segment.reclaimValue(key, hash, valueRef));
+    assertEquals(1, listener.getCount());
+    assertSame(key, listener.getLastEvictedKey());
+    assertSame(value, listener.getLastEvictedValue());
+    assertTrue(map.removalNotificationQueue.isEmpty());
+    assertFalse(segment.accessQueue.contains(entry));
+    assertFalse(segment.writeQueue.contains(entry));
+    assertEquals(0, segment.count);
+    assertNull(table.get(0));
+
+    // reclaim wrong value reference
+    table.set(0, entry);
+    DummyValueReference<Object, Object> otherValueRef = DummyValueReference.create(value, entry);
+    entry.setValueReference(otherValueRef);
+    assertFalse(segment.reclaimValue(key, hash, valueRef));
+    assertEquals(1, listener.getCount());
+    assertTrue(segment.reclaimValue(key, hash, otherValueRef));
+    assertEquals(2, listener.getCount());
+    assertSame(key, listener.getLastEvictedKey());
+    assertSame(value, listener.getLastEvictedValue());
+  }
+
+  public void testRemoveComputingValue() {
+    LocalCache<Object, Object> map = makeLocalCache(createCacheBuilder()
+        .concurrencyLevel(1)
+        .initialCapacity(1)
+        .maximumSize(SMALL_MAX_SIZE)
+        .expireAfterWrite(99999, SECONDS)
+        .removalListener(countingRemovalListener()));
+    Segment<Object, Object> segment = map.segments[0];
+    AtomicReferenceArray<ReferenceEntry<Object, Object>> table = segment.table;
+    assertEquals(1, table.length());
+
+    Object key = new Object();
+    int hash = map.hash(key);
+    DummyEntry<Object, Object> entry = DummyEntry.create(key, hash, null);
+    LoadingValueReference<Object, Object> valueRef = new LoadingValueReference<Object, Object>();
+    entry.setValueReference(valueRef);
+
+    // absent
+    assertFalse(segment.removeLoadingValue(key, hash, valueRef));
+
+    // live
+    table.set(0, entry);
+    // don't increment count; this is used during computation
+    assertTrue(segment.removeLoadingValue(key, hash, valueRef));
+    // no notification sent with removeLoadingValue
+    assertTrue(map.removalNotificationQueue.isEmpty());
+    assertEquals(0, segment.count);
+    assertNull(table.get(0));
+
+    // active
+    Object value = new Object();
+    DummyValueReference<Object, Object> previousRef = DummyValueReference.create(value, entry);
+    valueRef = new LoadingValueReference<Object, Object>(previousRef);
+    entry.setValueReference(valueRef);
+    table.set(0, entry);
+    segment.count = 1;
+    assertTrue(segment.removeLoadingValue(key, hash, valueRef));
+    assertSame(entry, table.get(0));
+    assertSame(value, segment.get(key, hash));
+
+    // wrong value reference
+    table.set(0, entry);
+    DummyValueReference<Object, Object> otherValueRef = DummyValueReference.create(value, entry);
+    entry.setValueReference(otherValueRef);
+    assertFalse(segment.removeLoadingValue(key, hash, valueRef));
+    entry.setValueReference(valueRef);
+    assertTrue(segment.removeLoadingValue(key, hash, valueRef));
+  }
+
+  private static <K, V> void assertNotificationEnqueued(
+      LocalCache<K, V> map, K key, V value, int hash) {
+    RemovalNotification<K, V> notification = map.removalNotificationQueue.poll();
+    assertSame(key, notification.getKey());
+    assertSame(value, notification.getValue());
+  }
+
+  // Segment eviction tests
+
+  public void testDrainRecencyQueueOnWrite() {
+    for (CacheBuilder<Object, Object> builder : allEvictingMakers()) {
+      LocalCache<Object, Object> map = makeLocalCache(builder.concurrencyLevel(1));
+      Segment<Object, Object> segment = map.segments[0];
+
+      if (segment.recencyQueue != DISCARDING_QUEUE) {
+        Object keyOne = new Object();
+        Object valueOne = new Object();
+        Object keyTwo = new Object();
+        Object valueTwo = new Object();
+
+        map.put(keyOne, valueOne);
+        assertTrue(segment.recencyQueue.isEmpty());
+
+        for (int i = 0; i < DRAIN_THRESHOLD / 2; i++) {
+          map.get(keyOne);
+        }
+        assertFalse(segment.recencyQueue.isEmpty());
+
+        map.put(keyTwo, valueTwo);
+        assertTrue(segment.recencyQueue.isEmpty());
+      }
+    }
+  }
+
+  public void testDrainRecencyQueueOnRead() {
+    for (CacheBuilder<Object, Object> builder : allEvictingMakers()) {
+      LocalCache<Object, Object> map = makeLocalCache(builder.concurrencyLevel(1));
+      Segment<Object, Object> segment = map.segments[0];
+
+      if (segment.recencyQueue != DISCARDING_QUEUE) {
+        Object keyOne = new Object();
+        Object valueOne = new Object();
+
+        // repeated get of the same key
+
+        map.put(keyOne, valueOne);
+        assertTrue(segment.recencyQueue.isEmpty());
+
+        for (int i = 0; i < DRAIN_THRESHOLD / 2; i++) {
+          map.get(keyOne);
+        }
+        assertFalse(segment.recencyQueue.isEmpty());
+
+        for (int i = 0; i < DRAIN_THRESHOLD * 2; i++) {
+          map.get(keyOne);
+          assertTrue(segment.recencyQueue.size() <= DRAIN_THRESHOLD);
+        }
+
+        // get over many different keys
+
+        for (int i = 0; i < DRAIN_THRESHOLD * 2; i++) {
+          map.put(new Object(), new Object());
+        }
+        assertTrue(segment.recencyQueue.isEmpty());
+
+        for (int i = 0; i < DRAIN_THRESHOLD / 2; i++) {
+          map.get(keyOne);
+        }
+        assertFalse(segment.recencyQueue.isEmpty());
+
+        for (Object key : map.keySet()) {
+          map.get(key);
+          assertTrue(segment.recencyQueue.size() <= DRAIN_THRESHOLD);
+        }
+      }
+    }
+  }
+
+  public void testRecordRead() {
+    for (CacheBuilder<Object, Object> builder : allEvictingMakers()) {
+      LocalCache<Object, Object> map = makeLocalCache(builder.concurrencyLevel(1));
+      Segment<Object, Object> segment = map.segments[0];
+      List<ReferenceEntry<Object, Object>> writeOrder = Lists.newLinkedList();
+      List<ReferenceEntry<Object, Object>> readOrder = Lists.newLinkedList();
+      for (int i = 0; i < DRAIN_THRESHOLD * 2; i++) {
+        Object key = new Object();
+        int hash = map.hash(key);
+        Object value = new Object();
+
+        ReferenceEntry<Object, Object> entry = createDummyEntry(key, hash, value, null);
+        // must recordRead for drainRecencyQueue to believe this entry is live
+        segment.recordWrite(entry, 1, map.ticker.read());
+        writeOrder.add(entry);
+        readOrder.add(entry);
+      }
+
+      checkEvictionQueues(map, segment, readOrder, writeOrder);
+      checkExpirationTimes(map);
+
+      // access some of the elements
+      Random random = new Random();
+      List<ReferenceEntry<Object, Object>> reads = Lists.newArrayList();
+      Iterator<ReferenceEntry<Object, Object>> i = readOrder.iterator();
+      while (i.hasNext()) {
+        ReferenceEntry<Object, Object> entry = i.next();
+        if (random.nextBoolean()) {
+          segment.recordRead(entry, map.ticker.read());
+          reads.add(entry);
+          i.remove();
+        }
+      }
+      checkAndDrainRecencyQueue(map, segment, reads);
+      readOrder.addAll(reads);
+
+      checkEvictionQueues(map, segment, readOrder, writeOrder);
+      checkExpirationTimes(map);
+    }
+  }
+
+  public void testRecordReadOnGet() {
+    for (CacheBuilder<Object, Object> builder : allEvictingMakers()) {
+      LocalCache<Object, Object> map = makeLocalCache(builder.concurrencyLevel(1));
+      Segment<Object, Object> segment = map.segments[0];
+      List<ReferenceEntry<Object, Object>> writeOrder = Lists.newLinkedList();
+      List<ReferenceEntry<Object, Object>> readOrder = Lists.newLinkedList();
+      for (int i = 0; i < DRAIN_THRESHOLD * 2; i++) {
+        Object key = new Object();
+        int hash = map.hash(key);
+        Object value = new Object();
+
+        map.put(key, value);
+        ReferenceEntry<Object, Object> entry = segment.getEntry(key, hash);
+        writeOrder.add(entry);
+        readOrder.add(entry);
+      }
+
+      checkEvictionQueues(map, segment, readOrder, writeOrder);
+      checkExpirationTimes(map);
+      assertTrue(segment.recencyQueue.isEmpty());
+
+      // access some of the elements
+      Random random = new Random();
+      List<ReferenceEntry<Object, Object>> reads = Lists.newArrayList();
+      Iterator<ReferenceEntry<Object, Object>> i = readOrder.iterator();
+      while (i.hasNext()) {
+        ReferenceEntry<Object, Object> entry = i.next();
+        if (random.nextBoolean()) {
+          map.get(entry.getKey());
+          reads.add(entry);
+          i.remove();
+          assertTrue(segment.recencyQueue.size() <= DRAIN_THRESHOLD);
+        }
+      }
+      int undrainedIndex = reads.size() - segment.recencyQueue.size();
+      checkAndDrainRecencyQueue(map, segment, reads.subList(undrainedIndex, reads.size()));
+      readOrder.addAll(reads);
+
+      checkEvictionQueues(map, segment, readOrder, writeOrder);
+      checkExpirationTimes(map);
+    }
+  }
+
+  public void testRecordWrite() {
+    for (CacheBuilder<Object, Object> builder : allEvictingMakers()) {
+      LocalCache<Object, Object> map = makeLocalCache(builder.concurrencyLevel(1));
+      Segment<Object, Object> segment = map.segments[0];
+      List<ReferenceEntry<Object, Object>> writeOrder = Lists.newLinkedList();
+      for (int i = 0; i < DRAIN_THRESHOLD * 2; i++) {
+        Object key = new Object();
+        int hash = map.hash(key);
+        Object value = new Object();
+
+        ReferenceEntry<Object, Object> entry = createDummyEntry(key, hash, value, null);
+        // must recordRead for drainRecencyQueue to believe this entry is live
+        segment.recordWrite(entry, 1, map.ticker.read());
+        writeOrder.add(entry);
+      }
+
+      checkEvictionQueues(map, segment, writeOrder, writeOrder);
+      checkExpirationTimes(map);
+
+      // access some of the elements
+      Random random = new Random();
+      List<ReferenceEntry<Object, Object>> writes = Lists.newArrayList();
+      Iterator<ReferenceEntry<Object, Object>> i = writeOrder.iterator();
+      while (i.hasNext()) {
+        ReferenceEntry<Object, Object> entry = i.next();
+        if (random.nextBoolean()) {
+          segment.recordWrite(entry, 1, map.ticker.read());
+          writes.add(entry);
+          i.remove();
+        }
+      }
+      writeOrder.addAll(writes);
+
+      checkEvictionQueues(map, segment, writeOrder, writeOrder);
+      checkExpirationTimes(map);
+    }
+  }
+
+  static <K, V> void checkAndDrainRecencyQueue(LocalCache<K, V> map,
+      Segment<K, V> segment, List<ReferenceEntry<K, V>> reads) {
+    if (map.evictsBySize() || map.expiresAfterAccess()) {
+      assertSameEntries(reads, ImmutableList.copyOf(segment.recencyQueue));
+    }
+    segment.drainRecencyQueue();
+  }
+
+  static <K, V> void checkEvictionQueues(LocalCache<K, V> map,
+      Segment<K, V> segment, List<ReferenceEntry<K, V>> readOrder,
+      List<ReferenceEntry<K, V>> writeOrder) {
+    if (map.evictsBySize() || map.expiresAfterAccess()) {
+      assertSameEntries(readOrder, ImmutableList.copyOf(segment.accessQueue));
+    }
+    if (map.expiresAfterWrite()) {
+      assertSameEntries(writeOrder, ImmutableList.copyOf(segment.writeQueue));
+    }
+  }
+
+  private static <K, V> void assertSameEntries(List<ReferenceEntry<K, V>> expectedEntries,
+      List<ReferenceEntry<K, V>> actualEntries) {
+    int size = expectedEntries.size();
+    assertEquals(size, actualEntries.size());
+    for (int i = 0; i < size; i++) {
+      ReferenceEntry<K, V> expectedEntry = expectedEntries.get(0);
+      ReferenceEntry<K, V> actualEntry = actualEntries.get(0);
+      assertSame(expectedEntry.getKey(), actualEntry.getKey());
+      assertSame(expectedEntry.getValueReference().get(), actualEntry.getValueReference().get());
+    }
+  }
+
+  static <K, V> void checkExpirationTimes(LocalCache<K, V> map) {
+    if (!map.expires()) {
+      return;
+    }
+
+    for (Segment<K, V> segment : map.segments) {
+      long lastAccessTime = 0;
+      long lastWriteTime = 0;
+      for (ReferenceEntry<K, V> e : segment.recencyQueue) {
+        long accessTime = e.getAccessTime();
+        assertTrue(accessTime >= lastAccessTime);
+        lastAccessTime = accessTime;
+        long writeTime = e.getWriteTime();
+        assertTrue(writeTime >= lastWriteTime);
+        lastWriteTime = writeTime;
+      }
+
+      lastAccessTime = 0;
+      lastWriteTime = 0;
+      for (ReferenceEntry<K, V> e : segment.accessQueue) {
+        long accessTime = e.getAccessTime();
+        assertTrue(accessTime >= lastAccessTime);
+        lastAccessTime = accessTime;
+      }
+      for (ReferenceEntry<K, V> e : segment.writeQueue) {
+        long writeTime = e.getWriteTime();
+        assertTrue(writeTime >= lastWriteTime);
+        lastWriteTime = writeTime;
+      }
+    }
+  }
+
+  public void testExpireAfterWrite() {
+    FakeTicker ticker = new FakeTicker();
+    LocalCache<Object, Object> map = makeLocalCache(createCacheBuilder()
+        .concurrencyLevel(1)
+        .ticker(ticker)
+        .expireAfterWrite(1, TimeUnit.NANOSECONDS));
+    Segment<Object, Object> segment = map.segments[0];
+
+    Object key = new Object();
+    Object value = new Object();
+    map.put(key, value);
+    ReferenceEntry<Object, Object> entry = map.getEntry(key);
+    assertTrue(map.isLive(entry, ticker.read()));
+
+    segment.writeQueue.add(entry);
+    assertSame(value, map.get(key));
+    assertSame(entry, segment.writeQueue.peek());
+    assertEquals(1, segment.writeQueue.size());
+
+    segment.recordRead(entry, ticker.read());
+    segment.expireEntries(ticker.read());
+    assertSame(value, map.get(key));
+    assertSame(entry, segment.writeQueue.peek());
+    assertEquals(1, segment.writeQueue.size());
+
+    ticker.advance(1);
+    segment.recordRead(entry, ticker.read());
+    segment.expireEntries(ticker.read());
+    assertSame(value, map.get(key));
+    assertSame(entry, segment.writeQueue.peek());
+    assertEquals(1, segment.writeQueue.size());
+
+    ticker.advance(1);
+    assertNull(map.get(key));
+    segment.expireEntries(ticker.read());
+    assertNull(map.get(key));
+    assertTrue(segment.writeQueue.isEmpty());
+  }
+
+  public void testExpireAfterAccess() {
+    FakeTicker ticker = new FakeTicker();
+    LocalCache<Object, Object> map = makeLocalCache(createCacheBuilder()
+        .concurrencyLevel(1)
+        .ticker(ticker)
+        .expireAfterAccess(1, TimeUnit.NANOSECONDS));
+    Segment<Object, Object> segment = map.segments[0];
+
+    Object key = new Object();
+    Object value = new Object();
+    map.put(key, value);
+    ReferenceEntry<Object, Object> entry = map.getEntry(key);
+    assertTrue(map.isLive(entry, ticker.read()));
+
+    segment.accessQueue.add(entry);
+    assertSame(value, map.get(key));
+    assertSame(entry, segment.accessQueue.peek());
+    assertEquals(1, segment.accessQueue.size());
+
+    segment.recordRead(entry, ticker.read());
+    segment.expireEntries(ticker.read());
+    assertTrue(map.containsKey(key));
+    assertSame(entry, segment.accessQueue.peek());
+    assertEquals(1, segment.accessQueue.size());
+
+    ticker.advance(1);
+    segment.recordRead(entry, ticker.read());
+    segment.expireEntries(ticker.read());
+    assertTrue(map.containsKey(key));
+    assertSame(entry, segment.accessQueue.peek());
+    assertEquals(1, segment.accessQueue.size());
+
+    ticker.advance(1);
+    segment.recordRead(entry, ticker.read());
+    segment.expireEntries(ticker.read());
+    assertTrue(map.containsKey(key));
+    assertSame(entry, segment.accessQueue.peek());
+    assertEquals(1, segment.accessQueue.size());
+
+    ticker.advance(1);
+    segment.expireEntries(ticker.read());
+    assertTrue(map.containsKey(key));
+    assertSame(entry, segment.accessQueue.peek());
+    assertEquals(1, segment.accessQueue.size());
+
+    ticker.advance(1);
+    assertFalse(map.containsKey(key));
+    assertNull(map.get(key));
+    segment.expireEntries(ticker.read());
+    assertFalse(map.containsKey(key));
+    assertNull(map.get(key));
+    assertTrue(segment.accessQueue.isEmpty());
+  }
+
+  public void testEvictEntries() {
+    int maxSize = 10;
+    LocalCache<Object, Object> map =
+        makeLocalCache(createCacheBuilder().concurrencyLevel(1).maximumSize(maxSize));
+    Segment<Object, Object> segment = map.segments[0];
+
+    // manually add elements to avoid eviction
+    int originalCount = 1024;
+    ReferenceEntry<Object, Object> entry = null;
+    LinkedHashMap<Object, Object> originalMap = Maps.newLinkedHashMap();
+    for (int i = 0; i < originalCount; i++) {
+      Object key = new Object();
+      Object value = new Object();
+      AtomicReferenceArray<ReferenceEntry<Object, Object>> table = segment.table;
+      int hash = map.hash(key);
+      int index = hash & (table.length() - 1);
+      ReferenceEntry<Object, Object> first = table.get(index);
+      entry = map.newEntry(key, hash, first);
+      ValueReference<Object, Object> valueRef = map.newValueReference(entry, value, 1);
+      entry.setValueReference(valueRef);
+      segment.recordWrite(entry, 1, map.ticker.read());
+      table.set(index, entry);
+      originalMap.put(key, value);
+    }
+    segment.count = originalCount;
+    segment.totalWeight = originalCount;
+    assertEquals(originalCount, map.size());
+    assertEquals(originalMap, map);
+
+    Iterator<Object> it = originalMap.keySet().iterator();
+    for (int i = 0; i < originalCount - maxSize; i++) {
+      it.next();
+      it.remove();
+    }
+    segment.evictEntries();
+    assertEquals(maxSize, map.size());
+    assertEquals(originalMap, map);
+  }
+
+  // reference queues
+
+  public void testDrainKeyReferenceQueueOnWrite() {
+    for (CacheBuilder<Object, Object> builder : allKeyValueStrengthMakers()) {
+      LocalCache<Object, Object> map =
+          makeLocalCache(builder.concurrencyLevel(1));
+      if (map.usesKeyReferences()) {
+        Segment<Object, Object> segment = map.segments[0];
+
+        Object keyOne = new Object();
+        int hashOne = map.hash(keyOne);
+        Object valueOne = new Object();
+        Object keyTwo = new Object();
+        Object valueTwo = new Object();
+
+        map.put(keyOne, valueOne);
+        ReferenceEntry<Object, Object> entry = segment.getEntry(keyOne, hashOne);
+
+        @SuppressWarnings("unchecked")
+        Reference<Object> reference = (Reference) entry;
+        reference.enqueue();
+
+        map.put(keyTwo, valueTwo);
+        assertFalse(map.containsKey(keyOne));
+        assertFalse(map.containsValue(valueOne));
+        assertNull(map.get(keyOne));
+        assertEquals(1, map.size());
+        assertNull(segment.keyReferenceQueue.poll());
+      }
+    }
+  }
+
+  public void testDrainValueReferenceQueueOnWrite() {
+    for (CacheBuilder<Object, Object> builder : allKeyValueStrengthMakers()) {
+      LocalCache<Object, Object> map =
+          makeLocalCache(builder.concurrencyLevel(1));
+      if (map.usesValueReferences()) {
+        Segment<Object, Object> segment = map.segments[0];
+
+        Object keyOne = new Object();
+        int hashOne = map.hash(keyOne);
+        Object valueOne = new Object();
+        Object keyTwo = new Object();
+        Object valueTwo = new Object();
+
+        map.put(keyOne, valueOne);
+        ReferenceEntry<Object, Object> entry = segment.getEntry(keyOne, hashOne);
+        ValueReference<Object, Object> valueReference = entry.getValueReference();
+
+        @SuppressWarnings("unchecked")
+        Reference<Object> reference = (Reference) valueReference;
+        reference.enqueue();
+
+        map.put(keyTwo, valueTwo);
+        assertFalse(map.containsKey(keyOne));
+        assertFalse(map.containsValue(valueOne));
+        assertNull(map.get(keyOne));
+        assertEquals(1, map.size());
+        assertNull(segment.valueReferenceQueue.poll());
+      }
+    }
+  }
+
+  public void testDrainKeyReferenceQueueOnRead() {
+    for (CacheBuilder<Object, Object> builder : allKeyValueStrengthMakers()) {
+      LocalCache<Object, Object> map =
+          makeLocalCache(builder.concurrencyLevel(1));
+      if (map.usesKeyReferences()) {
+        Segment<Object, Object> segment = map.segments[0];
+
+        Object keyOne = new Object();
+        int hashOne = map.hash(keyOne);
+        Object valueOne = new Object();
+        Object keyTwo = new Object();
+
+        map.put(keyOne, valueOne);
+        ReferenceEntry<Object, Object> entry = segment.getEntry(keyOne, hashOne);
+
+        @SuppressWarnings("unchecked")
+        Reference<Object> reference = (Reference) entry;
+        reference.enqueue();
+
+        for (int i = 0; i < SMALL_MAX_SIZE; i++) {
+          map.get(keyTwo);
+        }
+        assertFalse(map.containsKey(keyOne));
+        assertFalse(map.containsValue(valueOne));
+        assertNull(map.get(keyOne));
+        assertEquals(0, map.size());
+        assertNull(segment.keyReferenceQueue.poll());
+      }
+    }
+  }
+
+  public void testDrainValueReferenceQueueOnRead() {
+    for (CacheBuilder<Object, Object> builder : allKeyValueStrengthMakers()) {
+      LocalCache<Object, Object> map =
+          makeLocalCache(builder.concurrencyLevel(1));
+      if (map.usesValueReferences()) {
+        Segment<Object, Object> segment = map.segments[0];
+
+        Object keyOne = new Object();
+        int hashOne = map.hash(keyOne);
+        Object valueOne = new Object();
+        Object keyTwo = new Object();
+
+        map.put(keyOne, valueOne);
+        ReferenceEntry<Object, Object> entry = segment.getEntry(keyOne, hashOne);
+        ValueReference<Object, Object> valueReference = entry.getValueReference();
+
+        @SuppressWarnings("unchecked")
+        Reference<Object> reference = (Reference) valueReference;
+        reference.enqueue();
+
+        for (int i = 0; i < SMALL_MAX_SIZE; i++) {
+          map.get(keyTwo);
+        }
+        assertFalse(map.containsKey(keyOne));
+        assertFalse(map.containsValue(valueOne));
+        assertNull(map.get(keyOne));
+        assertEquals(0, map.size());
+        assertNull(segment.valueReferenceQueue.poll());
+      }
+    }
+  }
+
+  public void testNullParameters() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.testAllPublicInstanceMethods(makeLocalCache(createCacheBuilder()));
+    CacheLoader<Object, Object> loader = identityLoader();
+    tester.testAllPublicInstanceMethods(makeLocalCache(createCacheBuilder()));
+  }
+
+  public void testSerializationProxyLoading() {
+    CacheLoader<Object, Object> loader = new SerializableCacheLoader();
+    RemovalListener<Object, Object> listener = new SerializableRemovalListener<Object, Object>();
+    SerializableWeigher<Object, Object> weigher = new SerializableWeigher<Object, Object>();
+    Ticker ticker = new SerializableTicker();
+    @SuppressWarnings("unchecked") // createMock
+    LocalLoadingCache<Object, Object> one = (LocalLoadingCache) CacheBuilder.newBuilder()
+        .weakKeys()
+        .softValues()
+        .expireAfterAccess(123, SECONDS)
+        .expireAfterWrite(456, MINUTES)
+        .maximumWeight(789)
+        .weigher(weigher)
+        .concurrencyLevel(12)
+        .removalListener(listener)
+        .ticker(ticker)
+        .build(loader);
+    // add a non-serializable entry
+    one.getUnchecked(new Object());
+    assertEquals(1, one.size());
+    assertFalse(one.asMap().isEmpty());
+    LocalLoadingCache<Object, Object> two = SerializableTester.reserialize(one);
+    assertEquals(0, two.size());
+    assertTrue(two.asMap().isEmpty());
+
+    LocalCache<Object, Object> localCacheOne = one.localCache;
+    LocalCache<Object, Object> localCacheTwo = two.localCache;
+
+    assertEquals(localCacheOne.keyStrength, localCacheTwo.keyStrength);
+    assertEquals(localCacheOne.keyStrength, localCacheTwo.keyStrength);
+    assertEquals(localCacheOne.valueEquivalence, localCacheTwo.valueEquivalence);
+    assertEquals(localCacheOne.valueEquivalence, localCacheTwo.valueEquivalence);
+    assertEquals(localCacheOne.maxWeight, localCacheTwo.maxWeight);
+    assertEquals(localCacheOne.weigher, localCacheTwo.weigher);
+    assertEquals(localCacheOne.expireAfterAccessNanos, localCacheTwo.expireAfterAccessNanos);
+    assertEquals(localCacheOne.expireAfterWriteNanos, localCacheTwo.expireAfterWriteNanos);
+    assertEquals(localCacheOne.refreshNanos, localCacheTwo.refreshNanos);
+    assertEquals(localCacheOne.removalListener, localCacheTwo.removalListener);
+    assertEquals(localCacheOne.ticker, localCacheTwo.ticker);
+
+    // serialize the reconstituted version to be sure we haven't lost the ability to reserialize
+    LocalLoadingCache<Object, Object> three = SerializableTester.reserialize(two);
+    LocalCache<Object, Object> localCacheThree = three.localCache;
+
+    assertEquals(localCacheTwo.defaultLoader, localCacheThree.defaultLoader);
+    assertEquals(localCacheTwo.keyStrength, localCacheThree.keyStrength);
+    assertEquals(localCacheTwo.keyStrength, localCacheThree.keyStrength);
+    assertEquals(localCacheTwo.valueEquivalence, localCacheThree.valueEquivalence);
+    assertEquals(localCacheTwo.valueEquivalence, localCacheThree.valueEquivalence);
+    assertEquals(localCacheTwo.maxWeight, localCacheThree.maxWeight);
+    assertEquals(localCacheTwo.weigher, localCacheThree.weigher);
+    assertEquals(localCacheTwo.expireAfterAccessNanos, localCacheThree.expireAfterAccessNanos);
+    assertEquals(localCacheTwo.expireAfterWriteNanos, localCacheThree.expireAfterWriteNanos);
+    assertEquals(localCacheTwo.removalListener, localCacheThree.removalListener);
+    assertEquals(localCacheTwo.ticker, localCacheThree.ticker);
+  }
+
+  public void testSerializationProxyManual() {
+    RemovalListener<Object, Object> listener = new SerializableRemovalListener<Object, Object>();
+    SerializableWeigher<Object, Object> weigher = new SerializableWeigher<Object, Object>();
+    Ticker ticker = new SerializableTicker();
+    @SuppressWarnings("unchecked") // createMock
+    LocalManualCache<Object, Object> one = (LocalManualCache) CacheBuilder.newBuilder()
+        .weakKeys()
+        .softValues()
+        .expireAfterAccess(123, NANOSECONDS)
+        .maximumWeight(789)
+        .weigher(weigher)
+        .concurrencyLevel(12)
+        .removalListener(listener)
+        .ticker(ticker)
+        .build();
+    // add a non-serializable entry
+    one.put(new Object(), new Object());
+    assertEquals(1, one.size());
+    assertFalse(one.asMap().isEmpty());
+    LocalManualCache<Object, Object> two = SerializableTester.reserialize(one);
+    assertEquals(0, two.size());
+    assertTrue(two.asMap().isEmpty());
+
+    LocalCache<Object, Object> localCacheOne = one.localCache;
+    LocalCache<Object, Object> localCacheTwo = two.localCache;
+
+    assertEquals(localCacheOne.keyStrength, localCacheTwo.keyStrength);
+    assertEquals(localCacheOne.keyStrength, localCacheTwo.keyStrength);
+    assertEquals(localCacheOne.valueEquivalence, localCacheTwo.valueEquivalence);
+    assertEquals(localCacheOne.valueEquivalence, localCacheTwo.valueEquivalence);
+    assertEquals(localCacheOne.maxWeight, localCacheTwo.maxWeight);
+    assertEquals(localCacheOne.weigher, localCacheTwo.weigher);
+    assertEquals(localCacheOne.expireAfterAccessNanos, localCacheTwo.expireAfterAccessNanos);
+    assertEquals(localCacheOne.expireAfterWriteNanos, localCacheTwo.expireAfterWriteNanos);
+    assertEquals(localCacheOne.removalListener, localCacheTwo.removalListener);
+    assertEquals(localCacheOne.ticker, localCacheTwo.ticker);
+
+    // serialize the reconstituted version to be sure we haven't lost the ability to reserialize
+    LocalManualCache<Object, Object> three = SerializableTester.reserialize(two);
+    LocalCache<Object, Object> localCacheThree = three.localCache;
+
+    assertEquals(localCacheTwo.keyStrength, localCacheThree.keyStrength);
+    assertEquals(localCacheTwo.keyStrength, localCacheThree.keyStrength);
+    assertEquals(localCacheTwo.valueEquivalence, localCacheThree.valueEquivalence);
+    assertEquals(localCacheTwo.valueEquivalence, localCacheThree.valueEquivalence);
+    assertEquals(localCacheTwo.maxWeight, localCacheThree.maxWeight);
+    assertEquals(localCacheTwo.weigher, localCacheThree.weigher);
+    assertEquals(localCacheTwo.expireAfterAccessNanos, localCacheThree.expireAfterAccessNanos);
+    assertEquals(localCacheTwo.expireAfterWriteNanos, localCacheThree.expireAfterWriteNanos);
+    assertEquals(localCacheTwo.removalListener, localCacheThree.removalListener);
+    assertEquals(localCacheTwo.ticker, localCacheThree.ticker);
+  }
+
+  // utility methods
+
+  /**
+   * Returns an iterable containing all combinations of maximumSize, expireAfterAccess/Write,
+   * weakKeys and weak/softValues.
+   */
+  @SuppressWarnings("unchecked") // varargs
+  private static Iterable<CacheBuilder<Object, Object>> allEntryTypeMakers() {
+    List<CacheBuilder<Object, Object>> result =
+        newArrayList(allKeyValueStrengthMakers());
+    for (CacheBuilder<Object, Object> builder : allKeyValueStrengthMakers()) {
+      result.add(builder.maximumSize(SMALL_MAX_SIZE));
+    }
+    for (CacheBuilder<Object, Object> builder : allKeyValueStrengthMakers()) {
+      result.add(builder.expireAfterAccess(99999, SECONDS));
+    }
+    for (CacheBuilder<Object, Object> builder : allKeyValueStrengthMakers()) {
+      result.add(builder.expireAfterWrite(99999, SECONDS));
+    }
+    for (CacheBuilder<Object, Object> builder : allKeyValueStrengthMakers()) {
+      result.add(builder.maximumSize(SMALL_MAX_SIZE).expireAfterAccess(99999, SECONDS));
+    }
+    for (CacheBuilder<Object, Object> builder : allKeyValueStrengthMakers()) {
+      result.add(builder.maximumSize(SMALL_MAX_SIZE).expireAfterWrite(99999, SECONDS));
+    }
+    return result;
+  }
+
+  /**
+   * Returns an iterable containing all combinations of maximumSize and expireAfterAccess/Write.
+   */
+  @SuppressWarnings("unchecked") // varargs
+  static Iterable<CacheBuilder<Object, Object>> allEvictingMakers() {
+    return ImmutableList.of(createCacheBuilder().maximumSize(SMALL_MAX_SIZE),
+        createCacheBuilder().expireAfterAccess(99999, SECONDS),
+        createCacheBuilder().expireAfterWrite(99999, SECONDS),
+        createCacheBuilder()
+            .maximumSize(SMALL_MAX_SIZE)
+            .expireAfterAccess(SMALL_MAX_SIZE, TimeUnit.SECONDS),
+        createCacheBuilder()
+            .maximumSize(SMALL_MAX_SIZE)
+            .expireAfterWrite(SMALL_MAX_SIZE, TimeUnit.SECONDS));
+  }
+
+  /**
+   * Returns an iterable containing all combinations weakKeys and weak/softValues.
+   */
+  @SuppressWarnings("unchecked") // varargs
+  private static Iterable<CacheBuilder<Object, Object>> allKeyValueStrengthMakers() {
+    return ImmutableList.of(createCacheBuilder(),
+        createCacheBuilder().weakValues(),
+        createCacheBuilder().softValues(),
+        createCacheBuilder().weakKeys(),
+        createCacheBuilder().weakKeys().weakValues(),
+        createCacheBuilder().weakKeys().softValues());
+  }
+
+  // entries and values
+
+  private static <K, V> DummyEntry<K, V> createDummyEntry(
+      K key, int hash, V value, ReferenceEntry<K, V> next) {
+    DummyEntry<K, V> entry = DummyEntry.create(key, hash, next);
+    DummyValueReference<K, V> valueRef = DummyValueReference.create(value, entry);
+    entry.setValueReference(valueRef);
+    return entry;
+  }
+
+  static class DummyEntry<K, V> implements ReferenceEntry<K, V> {
+    private K key;
+    private final int hash;
+    private final ReferenceEntry<K, V> next;
+
+    public DummyEntry(K key, int hash, ReferenceEntry<K, V> next) {
+      this.key = key;
+      this.hash = hash;
+      this.next = next;
+    }
+
+    public static <K, V> DummyEntry<K, V> create(K key, int hash, ReferenceEntry<K, V> next) {
+      return new DummyEntry<K, V>(key, hash, next);
+    }
+
+    public void clearKey() {
+      this.key = null;
+    }
+
+    private ValueReference<K, V> valueReference = unset();
+
+    @Override
+    public ValueReference<K, V> getValueReference() {
+      return valueReference;
+    }
+
+    @Override
+    public void setValueReference(ValueReference<K, V> valueReference) {
+      this.valueReference = valueReference;
+    }
+
+    @Override
+    public ReferenceEntry<K, V> getNext() {
+      return next;
+    }
+
+    @Override
+    public int getHash() {
+      return hash;
+    }
+
+    @Override
+    public K getKey() {
+      return key;
+    }
+
+    private long accessTime = Long.MAX_VALUE;
+
+    @Override
+    public long getAccessTime() {
+      return accessTime;
+    }
+
+    @Override
+    public void setAccessTime(long time) {
+      this.accessTime = time;
+    }
+
+    private ReferenceEntry<K, V> nextAccess = nullEntry();
+
+    @Override
+    public ReferenceEntry<K, V> getNextInAccessQueue() {
+      return nextAccess;
+    }
+
+    @Override
+    public void setNextInAccessQueue(ReferenceEntry<K, V> next) {
+      this.nextAccess = next;
+    }
+
+    private ReferenceEntry<K, V> previousAccess = nullEntry();
+
+    @Override
+    public ReferenceEntry<K, V> getPreviousInAccessQueue() {
+      return previousAccess;
+    }
+
+    @Override
+    public void setPreviousInAccessQueue(ReferenceEntry<K, V> previous) {
+      this.previousAccess = previous;
+    }
+
+    private long writeTime = Long.MAX_VALUE;
+
+    @Override
+    public long getWriteTime() {
+      return writeTime;
+    }
+
+    @Override
+    public void setWriteTime(long time) {
+      this.writeTime = time;
+    }
+
+    private ReferenceEntry<K, V> nextWrite = nullEntry();
+
+    @Override
+    public ReferenceEntry<K, V> getNextInWriteQueue() {
+      return nextWrite;
+    }
+
+    @Override
+    public void setNextInWriteQueue(ReferenceEntry<K, V> next) {
+      this.nextWrite = next;
+    }
+
+    private ReferenceEntry<K, V> previousWrite = nullEntry();
+
+    @Override
+    public ReferenceEntry<K, V> getPreviousInWriteQueue() {
+      return previousWrite;
+    }
+
+    @Override
+    public void setPreviousInWriteQueue(ReferenceEntry<K, V> previous) {
+      this.previousWrite = previous;
+    }
+  }
+
+  static class DummyValueReference<K, V> implements ValueReference<K, V> {
+    final ReferenceEntry<K, V> entry;
+    private V value;
+    boolean loading = false;
+
+    public DummyValueReference(ReferenceEntry<K, V> entry) {
+      this(null, entry);
+      this.loading = true;
+    }
+
+    public DummyValueReference(V value, ReferenceEntry<K, V> entry) {
+      this.value = value;
+      this.entry = entry;
+    }
+
+    public static <K, V> DummyValueReference<K, V> create(V value, ReferenceEntry<K, V> entry) {
+      return new DummyValueReference<K, V>(value, entry);
+    }
+
+    public static <K, V> DummyValueReference<K, V> createLoading(ReferenceEntry<K, V> entry) {
+      return new DummyValueReference<K, V>(entry);
+    }
+
+    @Override
+    public V get() {
+      return value;
+    }
+
+    @Override
+    public int getWeight() {
+      return 1;
+    }
+
+    @Override
+    public ReferenceEntry<K, V> getEntry() {
+      return entry;
+    }
+
+    @Override
+    public ValueReference<K, V> copyFor(ReferenceQueue<V> queue, ReferenceEntry<K, V> entry) {
+      return new DummyValueReference<K, V>(value, entry);
+    }
+
+    public void setLoading(boolean loading) {
+      this.loading = loading;
+    }
+
+    @Override
+    public boolean isLoading() {
+      return loading;
+    }
+
+    @Override
+    public boolean isActive() {
+      return !loading;
+    }
+
+    @Override
+    public V waitForValue() {
+      return get();
+    }
+
+    @Override
+    public void notifyNewValue(V newValue) {}
+
+    public void clear() {
+      value = null;
+    }
+  }
+
+  private static class SerializableCacheLoader
+      extends CacheLoader<Object, Object> implements Serializable {
+    @Override
+    public Object load(Object key) {
+      return new Object();
+    }
+
+    @Override
+    public int hashCode() {
+      return 42;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+      return (o instanceof SerializableCacheLoader);
+    }
+  }
+
+  private static class SerializableRemovalListener<K, V>
+      implements RemovalListener<K, V>, Serializable {
+    @Override
+    public void onRemoval(RemovalNotification<K, V> notification) {}
+
+    @Override
+    public int hashCode() {
+      return 42;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+      return (o instanceof SerializableRemovalListener);
+    }
+  }
+
+  private static class SerializableTicker extends Ticker implements Serializable {
+    @Override
+    public long read() {
+      return 42;
+    }
+
+    @Override
+    public int hashCode() {
+      return 42;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+      return (o instanceof SerializableTicker);
+    }
+  }
+
+  private static class SerializableWeigher<K, V> implements Weigher<K, V>, Serializable {
+    @Override
+    public int weigh(K key, V value) {
+      return 42;
+    }
+
+    @Override
+    public int hashCode() {
+      return 42;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+      return (o instanceof SerializableWeigher);
+    }
+  }
+
+}
diff --git a/guava-tests/test/com/google/common/cache/LocalLoadingCacheTest.java b/guava-tests/test/com/google/common/cache/LocalLoadingCacheTest.java
new file mode 100644
index 0000000..c590cd7
--- /dev/null
+++ b/guava-tests/test/com/google/common/cache/LocalLoadingCacheTest.java
@@ -0,0 +1,343 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.cache;
+
+import static com.google.common.cache.CacheBuilder.EMPTY_STATS;
+import static com.google.common.cache.LocalCacheTest.SMALL_MAX_SIZE;
+import static com.google.common.cache.TestingCacheLoaders.identityLoader;
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import com.google.common.cache.LocalCache.LocalLoadingCache;
+import com.google.common.cache.LocalCache.Segment;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Maps;
+import com.google.common.testing.NullPointerTester;
+import com.google.common.util.concurrent.Callables;
+
+import junit.framework.TestCase;
+
+import java.lang.Thread.UncaughtExceptionHandler;
+import java.util.Collection;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicReference;
+
+/**
+ * @author Charles Fry
+ */
+public class LocalLoadingCacheTest extends TestCase {
+
+  private static <K, V> LocalLoadingCache<K, V> makeCache(
+      CacheBuilder<K, V> builder, CacheLoader<? super K, V> loader) {
+    return new LocalLoadingCache<K, V>(builder, loader);
+  }
+
+  private CacheBuilder<Object, Object> createCacheBuilder() {
+    return new CacheBuilder<Object, Object>();
+  }
+
+  // constructor tests
+
+  public void testComputingFunction() {
+    CacheLoader<Object, Object> loader = new CacheLoader<Object, Object>() {
+      @Override
+      public Object load(Object from) {
+        return new Object();
+      }
+    };
+    LocalLoadingCache<Object, Object> cache = makeCache(createCacheBuilder(), loader);
+    assertSame(loader, cache.localCache.defaultLoader);
+  }
+
+  // null parameters test
+
+  public void testNullParameters() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.setDefault(Callable.class, Callables.returning(null));
+    CacheLoader<Object, Object> loader = identityLoader();
+    tester.testAllPublicInstanceMethods(makeCache(createCacheBuilder(), loader));
+  }
+
+  // stats tests
+
+  public void testStats() {
+    CacheBuilder<Object, Object> builder = createCacheBuilder()
+        .concurrencyLevel(1)
+        .maximumSize(2);
+    LocalLoadingCache<Object, Object> cache = makeCache(builder, identityLoader());
+    assertEquals(EMPTY_STATS, cache.stats());
+
+    Object one = new Object();
+    cache.getUnchecked(one);
+    CacheStats stats = cache.stats();
+    assertEquals(1, stats.requestCount());
+    assertEquals(0, stats.hitCount());
+    assertEquals(0.0, stats.hitRate());
+    assertEquals(1, stats.missCount());
+    assertEquals(1.0, stats.missRate());
+    assertEquals(1, stats.loadCount());
+    long totalLoadTime = stats.totalLoadTime();
+    assertTrue(totalLoadTime > 0);
+    assertTrue(stats.averageLoadPenalty() > 0.0);
+    assertEquals(0, stats.evictionCount());
+
+    cache.getUnchecked(one);
+    stats = cache.stats();
+    assertEquals(2, stats.requestCount());
+    assertEquals(1, stats.hitCount());
+    assertEquals(1.0/2, stats.hitRate());
+    assertEquals(1, stats.missCount());
+    assertEquals(1.0/2, stats.missRate());
+    assertEquals(1, stats.loadCount());
+    assertEquals(0, stats.evictionCount());
+
+    Object two = new Object();
+    cache.getUnchecked(two);
+    stats = cache.stats();
+    assertEquals(3, stats.requestCount());
+    assertEquals(1, stats.hitCount());
+    assertEquals(1.0/3, stats.hitRate());
+    assertEquals(2, stats.missCount());
+    assertEquals(2.0/3, stats.missRate());
+    assertEquals(2, stats.loadCount());
+    assertTrue(stats.totalLoadTime() > totalLoadTime);
+    totalLoadTime = stats.totalLoadTime();
+    assertTrue(stats.averageLoadPenalty() > 0.0);
+    assertEquals(0, stats.evictionCount());
+
+    Object three = new Object();
+    cache.getUnchecked(three);
+    stats = cache.stats();
+    assertEquals(4, stats.requestCount());
+    assertEquals(1, stats.hitCount());
+    assertEquals(1.0/4, stats.hitRate());
+    assertEquals(3, stats.missCount());
+    assertEquals(3.0/4, stats.missRate());
+    assertEquals(3, stats.loadCount());
+    assertTrue(stats.totalLoadTime() > totalLoadTime);
+    totalLoadTime = stats.totalLoadTime();
+    assertTrue(stats.averageLoadPenalty() > 0.0);
+    assertEquals(1, stats.evictionCount());
+  }
+
+  public void testStatsNoops() {
+    CacheBuilder<Object, Object> builder = createCacheBuilder()
+        .concurrencyLevel(1);
+    LocalLoadingCache<Object, Object> cache = makeCache(builder, identityLoader());
+    ConcurrentMap<Object, Object> map = cache.localCache; // modifiable map view
+    assertEquals(EMPTY_STATS, cache.stats());
+
+    Object one = new Object();
+    assertNull(map.put(one, one));
+    assertSame(one, map.get(one));
+    assertTrue(map.containsKey(one));
+    assertTrue(map.containsValue(one));
+    Object two = new Object();
+    assertSame(one, map.replace(one, two));
+    assertTrue(map.containsKey(one));
+    assertFalse(map.containsValue(one));
+    Object three = new Object();
+    assertTrue(map.replace(one, two, three));
+    assertTrue(map.remove(one, three));
+    assertFalse(map.containsKey(one));
+    assertFalse(map.containsValue(one));
+    assertNull(map.putIfAbsent(two, three));
+    assertSame(three, map.remove(two));
+    assertNull(map.put(three, one));
+    assertNull(map.put(one, two));
+
+    Set<Map.Entry<Object, Object>> entries = map.entrySet();
+    ASSERT.that(entries).hasContentsAnyOrder(
+        Maps.immutableEntry(three, one), Maps.immutableEntry(one, two));
+    Set<Object> keys = map.keySet();
+    ASSERT.that(keys).hasContentsAnyOrder(one, three);
+    Collection<Object> values = map.values();
+    ASSERT.that(values).hasContentsAnyOrder(one, two);
+
+    map.clear();
+
+    assertEquals(EMPTY_STATS, cache.stats());
+  }
+
+  public void testDisableStats() {
+    CacheBuilder<Object, Object> builder = createCacheBuilder()
+        .concurrencyLevel(1)
+        .maximumSize(2)
+        .disableStats();
+    LocalLoadingCache<Object, Object> cache = makeCache(builder, identityLoader());
+    assertEquals(EMPTY_STATS, cache.stats());
+
+    Object one = new Object();
+    cache.getUnchecked(one);
+    assertEquals(EMPTY_STATS, cache.stats());
+
+    cache.getUnchecked(one);
+    assertEquals(EMPTY_STATS, cache.stats());
+
+    Object two = new Object();
+    cache.getUnchecked(two);
+    assertEquals(EMPTY_STATS, cache.stats());
+
+    Object three = new Object();
+    cache.getUnchecked(three);
+    assertEquals(EMPTY_STATS, cache.stats());
+  }
+
+  // asMap tests
+
+  public void testAsMap() {
+    CacheBuilder<Object, Object> builder = createCacheBuilder();
+    LocalLoadingCache<Object, Object> cache = makeCache(builder, identityLoader());
+    assertEquals(EMPTY_STATS, cache.stats());
+
+    Object one = new Object();
+    Object two = new Object();
+    Object three = new Object();
+
+    ConcurrentMap<Object, Object> map = cache.asMap();
+    assertNull(map.put(one, two));
+    assertSame(two, map.get(one));
+    map.putAll(ImmutableMap.of(two, three));
+    assertSame(three, map.get(two));
+    assertSame(two, map.putIfAbsent(one, three));
+    assertSame(two, map.get(one));
+    assertNull(map.putIfAbsent(three, one));
+    assertSame(one, map.get(three));
+    assertSame(two, map.replace(one, three));
+    assertSame(three, map.get(one));
+    assertFalse(map.replace(one, two, three));
+    assertSame(three, map.get(one));
+    assertTrue(map.replace(one, three, two));
+    assertSame(two, map.get(one));
+    assertEquals(3, map.size());
+
+    map.clear();
+    assertTrue(map.isEmpty());
+    assertEquals(0, map.size());
+
+    cache.getUnchecked(one);
+    assertEquals(1, map.size());
+    assertSame(one, map.get(one));
+    assertTrue(map.containsKey(one));
+    assertTrue(map.containsValue(one));
+    assertSame(one, map.remove(one));
+    assertEquals(0, map.size());
+
+    cache.getUnchecked(one);
+    assertEquals(1, map.size());
+    assertFalse(map.remove(one, two));
+    assertTrue(map.remove(one, one));
+    assertEquals(0, map.size());
+
+    cache.getUnchecked(one);
+    Map<Object, Object> newMap = ImmutableMap.of(one, one);
+    assertEquals(newMap, map);
+    assertEquals(newMap.entrySet(), map.entrySet());
+    assertEquals(newMap.keySet(), map.keySet());
+    Set<Object> expectedValues = ImmutableSet.of(one);
+    Set<Object> actualValues = ImmutableSet.copyOf(map.values());
+    assertEquals(expectedValues, actualValues);
+  }
+
+  /**
+   * Lookups on the map view shouldn't impact the recency queue.
+   */
+  public void testAsMapRecency() {
+    CacheBuilder<Object, Object> builder = createCacheBuilder()
+        .concurrencyLevel(1)
+        .maximumSize(SMALL_MAX_SIZE);
+    LocalLoadingCache<Object, Object> cache = makeCache(builder, identityLoader());
+    Segment<Object, Object> segment = cache.localCache.segments[0];
+    ConcurrentMap<Object, Object> map = cache.asMap();
+
+    Object one = new Object();
+    assertSame(one, cache.getUnchecked(one));
+    assertTrue(segment.recencyQueue.isEmpty());
+    assertSame(one, map.get(one));
+    assertSame(one, segment.recencyQueue.peek().getKey());
+    assertSame(one, cache.getUnchecked(one));
+    assertFalse(segment.recencyQueue.isEmpty());
+  }
+
+  public void testRecursiveComputation() throws InterruptedException {
+    final AtomicReference<LoadingCache<Integer, String>> cacheRef =
+        new AtomicReference<LoadingCache<Integer, String>>();
+    CacheLoader<Integer, String> recursiveLoader = new CacheLoader<Integer, String>() {
+      @Override
+      public String load(Integer key) {
+        if (key > 0) {
+          return key + ", " + cacheRef.get().getUnchecked(key - 1);
+        } else {
+          return "0";
+        }
+      }
+    };
+
+    LoadingCache<Integer, String> recursiveCache = new CacheBuilder<Integer, String>()
+        .weakKeys()
+        .weakValues()
+        .build(recursiveLoader);
+    cacheRef.set(recursiveCache);
+    assertEquals("3, 2, 1, 0", recursiveCache.getUnchecked(3));
+
+    recursiveLoader = new CacheLoader<Integer, String>() {
+      @Override
+      public String load(Integer key) {
+        return cacheRef.get().getUnchecked(key);
+      }
+    };
+
+    recursiveCache = new CacheBuilder<Integer, String>()
+        .weakKeys()
+        .weakValues()
+        .build(recursiveLoader);
+    cacheRef.set(recursiveCache);
+
+    // tells the test when the compution has completed
+    final CountDownLatch doneSignal = new CountDownLatch(1);
+
+    Thread thread = new Thread() {
+      @Override
+      public void run() {
+        try {
+          cacheRef.get().getUnchecked(3);
+        } finally {
+          doneSignal.countDown();
+        }
+      }
+    };
+    thread.setUncaughtExceptionHandler(new UncaughtExceptionHandler() {
+      @Override
+      public void uncaughtException(Thread t, Throwable e) {}
+    });
+    thread.start();
+
+    boolean done = doneSignal.await(1, TimeUnit.SECONDS);
+    if (!done) {
+      StringBuilder builder = new StringBuilder();
+      for (StackTraceElement trace : thread.getStackTrace()) {
+        builder.append("\tat ").append(trace).append('\n');
+      }
+      fail(builder.toString());
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/cache/NullCacheTest.java b/guava-tests/test/com/google/common/cache/NullCacheTest.java
new file mode 100644
index 0000000..f46651f
--- /dev/null
+++ b/guava-tests/test/com/google/common/cache/NullCacheTest.java
@@ -0,0 +1,124 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.cache;
+
+import static com.google.common.cache.CacheTesting.checkEmpty;
+import static com.google.common.cache.TestingCacheLoaders.constantLoader;
+import static com.google.common.cache.TestingCacheLoaders.exceptionLoader;
+import static com.google.common.cache.TestingRemovalListeners.queuingRemovalListener;
+import static java.util.concurrent.TimeUnit.SECONDS;
+
+import com.google.common.cache.CacheLoader.InvalidCacheLoadException;
+import com.google.common.cache.TestingRemovalListeners.QueuingRemovalListener;
+import com.google.common.util.concurrent.UncheckedExecutionException;
+
+import junit.framework.TestCase;
+
+/**
+ * {@link LoadingCache} tests for caches with a maximum size of zero.
+ *
+ * @author mike nonemacher
+ */
+public class NullCacheTest extends TestCase {
+  QueuingRemovalListener<Object, Object> listener;
+
+  @Override
+  protected void setUp() {
+    listener = queuingRemovalListener();
+  }
+
+  public void testGet() {
+    Object computed = new Object();
+    LoadingCache<Object, Object> cache = CacheBuilder.newBuilder()
+        .maximumSize(0)
+        .removalListener(listener)
+        .build(constantLoader(computed));
+
+    Object key = new Object();
+    assertSame(computed, cache.getUnchecked(key));
+    RemovalNotification<Object, Object> notification = listener.remove();
+    assertSame(key, notification.getKey());
+    assertSame(computed, notification.getValue());
+    assertSame(RemovalCause.SIZE, notification.getCause());
+    assertTrue(listener.isEmpty());
+    checkEmpty(cache);
+  }
+
+  public void testGet_expireAfterWrite() {
+    Object computed = new Object();
+    LoadingCache<Object, Object> cache = CacheBuilder.newBuilder()
+        .expireAfterWrite(0, SECONDS)
+        .removalListener(listener)
+        .build(constantLoader(computed));
+
+    Object key = new Object();
+    assertSame(computed, cache.getUnchecked(key));
+    RemovalNotification<Object, Object> notification = listener.remove();
+    assertSame(key, notification.getKey());
+    assertSame(computed, notification.getValue());
+    assertSame(RemovalCause.SIZE, notification.getCause());
+    assertTrue(listener.isEmpty());
+    checkEmpty(cache);
+  }
+
+  public void testGet_expireAfterAccess() {
+    Object computed = new Object();
+    LoadingCache<Object, Object> cache = CacheBuilder.newBuilder()
+        .expireAfterAccess(0, SECONDS)
+        .removalListener(listener)
+        .build(constantLoader(computed));
+
+    Object key = new Object();
+    assertSame(computed, cache.getUnchecked(key));
+    RemovalNotification<Object, Object> notification = listener.remove();
+    assertSame(key, notification.getKey());
+    assertSame(computed, notification.getValue());
+    assertSame(RemovalCause.SIZE, notification.getCause());
+    assertTrue(listener.isEmpty());
+    checkEmpty(cache);
+  }
+
+  public void testGet_computeNull() {
+    LoadingCache<Object, Object> cache = CacheBuilder.newBuilder()
+        .maximumSize(0)
+        .removalListener(listener)
+        .build(constantLoader(null));
+
+    try {
+      cache.getUnchecked(new Object());
+      fail();
+    } catch (InvalidCacheLoadException e) { /* expected */}
+
+    assertTrue(listener.isEmpty());
+    checkEmpty(cache);
+  }
+
+  public void testGet_runtimeException() {
+    final RuntimeException e = new RuntimeException();
+    LoadingCache<Object, Object> map = CacheBuilder.newBuilder()
+        .maximumSize(0)
+        .removalListener(listener)
+        .build(exceptionLoader(e));
+
+    try {
+      map.getUnchecked(new Object());
+      fail();
+    } catch (UncheckedExecutionException uee) {
+      assertSame(e, uee.getCause());
+    }
+    assertTrue(listener.isEmpty());
+    checkEmpty(map);
+  }
+}
diff --git a/guava-tests/test/com/google/common/cache/PopulatedCachesTest.java b/guava-tests/test/com/google/common/cache/PopulatedCachesTest.java
new file mode 100644
index 0000000..28aa5f8
--- /dev/null
+++ b/guava-tests/test/com/google/common/cache/PopulatedCachesTest.java
@@ -0,0 +1,382 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.cache;
+
+import static com.google.common.cache.CacheTesting.checkEmpty;
+import static com.google.common.cache.CacheTesting.checkValidState;
+import static com.google.common.cache.TestingCacheLoaders.identityLoader;
+import static java.util.Arrays.asList;
+import static java.util.concurrent.TimeUnit.DAYS;
+import static java.util.concurrent.TimeUnit.MILLISECONDS;
+import static java.util.concurrent.TimeUnit.SECONDS;
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import com.google.common.base.Function;
+import com.google.common.cache.CacheBuilderFactory.DurationSpec;
+import com.google.common.cache.LocalCache.Strength;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Iterators;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.common.testing.EqualsTester;
+
+import junit.framework.TestCase;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+/**
+ * {@link LoadingCache} tests that deal with caches that actually contain some key-value mappings.
+ *
+ * @author mike nonemacher
+ */
+public class PopulatedCachesTest extends TestCase {
+  // we use integers as keys; make sure the range covers some values that ARE cached by
+  // Integer.valueOf(int), and some that are not cached. (127 is the highest cached value.)
+  static final int WARMUP_MIN = 120;
+  static final int WARMUP_MAX = 135;
+  static final int WARMUP_SIZE = WARMUP_MAX - WARMUP_MIN;
+
+  public void testSize_populated() {
+    for (LoadingCache<Object, Object> cache : caches()) {
+      // don't let the entries get GCed
+      List<Entry<Object, Object>> warmed = warmUp(cache);
+      assertEquals(WARMUP_SIZE, cache.size());
+      assertMapSize(cache.asMap(), WARMUP_SIZE);
+      checkValidState(cache);
+    }
+  }
+
+  public void testContainsKey_found() {
+    for (LoadingCache<Object, Object> cache : caches()) {
+      // don't let the entries get GCed
+      List<Entry<Object, Object>> warmed = warmUp(cache);
+      for (int i = WARMUP_MIN; i < WARMUP_MAX; i++) {
+        Entry<Object, Object> entry = warmed.get(i - WARMUP_MIN);
+        assertTrue(cache.asMap().containsKey(entry.getKey()));
+        assertTrue(cache.asMap().containsValue(entry.getValue()));
+        // this getUnchecked() call shouldn't be a cache miss; verified below
+        assertEquals(entry.getValue(), cache.getUnchecked(entry.getKey()));
+      }
+      assertEquals(WARMUP_SIZE, cache.stats().missCount());
+      checkValidState(cache);
+    }
+  }
+
+  public void testPut_populated() {
+    for (LoadingCache<Object, Object> cache : caches()) {
+      // don't let the entries get GCed
+      List<Entry<Object, Object>> warmed = warmUp(cache);
+      for (int i = WARMUP_MIN; i < WARMUP_MAX; i++) {
+        Entry<Object, Object> entry = warmed.get(i - WARMUP_MIN);
+        Object newValue = new Object();
+        assertSame(entry.getValue(), cache.asMap().put(entry.getKey(), newValue));
+        // don't let the new entry get GCed
+        warmed.add(entryOf(entry.getKey(), newValue));
+        Object newKey = new Object();
+        assertNull(cache.asMap().put(newKey, entry.getValue()));
+        // this getUnchecked() call shouldn't be a cache miss; verified below
+        assertEquals(newValue, cache.getUnchecked(entry.getKey()));
+        assertEquals(entry.getValue(), cache.getUnchecked(newKey));
+        // don't let the new entry get GCed
+        warmed.add(entryOf(newKey, entry.getValue()));
+      }
+      assertEquals(WARMUP_SIZE, cache.stats().missCount());
+      checkValidState(cache);
+    }
+  }
+
+  public void testPutIfAbsent_populated() {
+    for (LoadingCache<Object, Object> cache : caches()) {
+      // don't let the entries get GCed
+      List<Entry<Object, Object>> warmed = warmUp(cache);
+      for (int i = WARMUP_MIN; i < WARMUP_MAX; i++) {
+        Entry<Object, Object> entry = warmed.get(i - WARMUP_MIN);
+        Object newValue = new Object();
+        assertSame(entry.getValue(), cache.asMap().putIfAbsent(entry.getKey(), newValue));
+        Object newKey = new Object();
+        assertNull(cache.asMap().putIfAbsent(newKey, entry.getValue()));
+        // this getUnchecked() call shouldn't be a cache miss; verified below
+        assertEquals(entry.getValue(), cache.getUnchecked(entry.getKey()));
+        assertEquals(entry.getValue(), cache.getUnchecked(newKey));
+        // don't let the new entry get GCed
+        warmed.add(entryOf(newKey, entry.getValue()));
+      }
+      assertEquals(WARMUP_SIZE, cache.stats().missCount());
+      checkValidState(cache);
+    }
+  }
+
+  public void testPutAll_populated() {
+    for (LoadingCache<Object, Object> cache : caches()) {
+      // don't let the entries get GCed
+      List<Entry<Object, Object>> warmed = warmUp(cache);
+      Object newKey = new Object();
+      Object newValue = new Object();
+      cache.asMap().putAll(ImmutableMap.of(newKey, newValue));
+      // this getUnchecked() call shouldn't be a cache miss; verified below
+      assertEquals(newValue, cache.getUnchecked(newKey));
+      assertEquals(WARMUP_SIZE, cache.stats().missCount());
+      checkValidState(cache);
+    }
+  }
+
+  public void testReplace_populated() {
+    for (LoadingCache<Object, Object> cache : caches()) {
+      // don't let the entries get GCed
+      List<Entry<Object, Object>> warmed = warmUp(cache);
+      for (int i = WARMUP_MIN; i < WARMUP_MAX; i++) {
+        Entry<Object, Object> entry = warmed.get(i - WARMUP_MIN);
+        Object newValue = new Object();
+        assertSame(entry.getValue(), cache.asMap().replace(entry.getKey(), newValue));
+        assertTrue(cache.asMap().replace(entry.getKey(), newValue, entry.getValue()));
+        Object newKey = new Object();
+        assertNull(cache.asMap().replace(newKey, entry.getValue()));
+        assertFalse(cache.asMap().replace(newKey, entry.getValue(), newValue));
+        // this getUnchecked() call shouldn't be a cache miss; verified below
+        assertEquals(entry.getValue(), cache.getUnchecked(entry.getKey()));
+        assertFalse(cache.asMap().containsKey(newKey));
+      }
+      assertEquals(WARMUP_SIZE, cache.stats().missCount());
+      checkValidState(cache);
+    }
+  }
+
+  public void testRemove_byKey() {
+    for (LoadingCache<Object, Object> cache : caches()) {
+      // don't let the entries get GCed
+      List<Entry<Object, Object>> warmed = warmUp(cache);
+      for (int i = WARMUP_MIN; i < WARMUP_MAX; i++) {
+        Entry<Object, Object> entry = warmed.get(i - WARMUP_MIN);
+        Object key = entry.getKey();
+        assertEquals(entry.getValue(), cache.asMap().remove(key));
+        assertNull(cache.asMap().remove(key));
+        assertFalse(cache.asMap().containsKey(key));
+      }
+      checkEmpty(cache);
+    }
+  }
+
+  public void testRemove_byKeyAndValue() {
+    for (LoadingCache<Object, Object> cache : caches()) {
+      // don't let the entries get GCed
+      List<Entry<Object, Object>> warmed = warmUp(cache);
+      for (int i = WARMUP_MIN; i < WARMUP_MAX; i++) {
+        Object key = warmed.get(i - WARMUP_MIN).getKey();
+        Object value = warmed.get(i - WARMUP_MIN).getValue();
+        assertFalse(cache.asMap().remove(key, -1));
+        assertTrue(cache.asMap().remove(key, value));
+        assertFalse(cache.asMap().remove(key, -1));
+        assertFalse(cache.asMap().containsKey(key));
+      }
+      checkEmpty(cache);
+    }
+  }
+
+  public void testKeySet_populated() {
+    for (LoadingCache<Object, Object> cache : caches()) {
+      Set<Object> keys = cache.asMap().keySet();
+      List<Entry<Object, Object>> warmed = warmUp(cache);
+
+      Object[] expectedArray = Maps.newHashMap(cache.asMap()).keySet().toArray(new Object[0]);
+      ASSERT.that(keys).hasContentsAnyOrder(expectedArray);
+      ASSERT.that(asList(keys.toArray())).hasContentsAnyOrder(expectedArray);
+      ASSERT.that(asList(keys.toArray(new Object[(int) cache.size()])))
+          .hasContentsAnyOrder(expectedArray);
+
+      new EqualsTester()
+          .addEqualityGroup(cache.asMap().keySet(), keys)
+          .addEqualityGroup(ImmutableSet.of())
+          .testEquals();
+      assertEquals(WARMUP_SIZE, keys.size());
+      for (int i = WARMUP_MIN; i < WARMUP_MAX; i++) {
+        Object key = warmed.get(i - WARMUP_MIN).getKey();
+        assertTrue(keys.contains(key));
+        assertTrue(keys.remove(key));
+        assertFalse(keys.remove(key));
+        assertFalse(keys.contains(key));
+      }
+      checkEmpty(keys);
+      checkEmpty(cache);
+    }
+  }
+
+  public void testValues_populated() {
+    for (LoadingCache<Object, Object> cache : caches()) {
+      Collection<Object> values = cache.asMap().values();
+      List<Entry<Object, Object>> warmed = warmUp(cache);
+
+      Object[] expectedArray = Maps.newHashMap(cache.asMap()).values().toArray(new Object[0]);
+      ASSERT.that(values).hasContentsAnyOrder(expectedArray);
+      ASSERT.that(asList(values.toArray())).hasContentsAnyOrder(expectedArray);
+      ASSERT.that(asList(values.toArray(new Object[(int) cache.size()])))
+          .hasContentsAnyOrder(expectedArray);
+
+      assertEquals(WARMUP_SIZE, values.size());
+      for (int i = WARMUP_MIN; i < WARMUP_MAX; i++) {
+        Object value = warmed.get(i - WARMUP_MIN).getValue();
+        assertTrue(values.contains(value));
+        assertTrue(values.remove(value));
+        assertFalse(values.remove(value));
+        assertFalse(values.contains(value));
+      }
+      checkEmpty(values);
+      checkEmpty(cache);
+    }
+  }
+
+  @SuppressWarnings("unchecked") // generic array creation
+  public void testEntrySet_populated() {
+    for (LoadingCache<Object, Object> cache : caches()) {
+      Set<Entry<Object, Object>> entries = cache.asMap().entrySet();
+      List<Entry<Object, Object>> warmed = warmUp(cache, WARMUP_MIN, WARMUP_MAX);
+
+      Set<Entry<Object, Object>> entrySet = Maps.newHashMap(cache.asMap()).entrySet();
+      ASSERT.that(entries).is(entrySet);
+      ASSERT.that(entries.toArray()).hasContentsAnyOrder(entrySet.toArray());
+      ASSERT.that(entries.toArray(new Entry[0]))
+          .hasContentsAnyOrder(entrySet.toArray(new Entry[0]));
+
+      new EqualsTester()
+          .addEqualityGroup(cache.asMap().entrySet(), entries)
+          .addEqualityGroup(ImmutableSet.of())
+          .testEquals();
+      assertEquals(WARMUP_SIZE, entries.size());
+      for (int i = WARMUP_MIN; i < WARMUP_MAX; i++) {
+        Entry<Object, Object> newEntry = warmed.get(i - WARMUP_MIN);
+        assertTrue(entries.contains(newEntry));
+        assertTrue(entries.remove(newEntry));
+        assertFalse(entries.remove(newEntry));
+        assertFalse(entries.contains(newEntry));
+      }
+      checkEmpty(entries);
+      checkEmpty(cache);
+    }
+  }
+
+  public void testWriteThroughEntry() {
+    for (LoadingCache<Object, Object> cache : caches()) {
+      cache.getUnchecked(1);
+      Entry<Object, Object> entry = Iterables.getOnlyElement(cache.asMap().entrySet());
+      try {
+        entry.setValue(3);
+        fail("expected entry.setValue to throw UnsupportedOperationException");
+      } catch (UnsupportedOperationException expected) {
+      }
+      try {
+        entry.setValue(null);
+        fail("expected entry.setValue(null) to throw UnsupportedOperationException");
+      } catch (UnsupportedOperationException expected) {
+      }
+      checkValidState(cache);
+    }
+  }
+
+  /* ---------------- Local utilities -------------- */
+
+  /**
+   * Most of the tests in this class run against every one of these caches.
+   */
+  private Iterable<LoadingCache<Object, Object>> caches() {
+    // lots of different ways to configure a LoadingCache
+    CacheBuilderFactory factory = cacheFactory();
+    return Iterables.transform(factory.buildAllPermutations(),
+        new Function<CacheBuilder<Object, Object>, LoadingCache<Object, Object>>() {
+          @Override public LoadingCache<Object, Object> apply(
+              CacheBuilder<Object, Object> builder) {
+            return builder.build(identityLoader());
+          }
+        });
+  }
+
+  private CacheBuilderFactory cacheFactory() {
+    // This is trickier than expected. We plan to put 15 values in each of these (WARMUP_MIN to
+    // WARMUP_MAX), but the tests assume no values get evicted. Even with a maximumSize of 100, one
+    // of the values gets evicted. With weak keys, we use identity equality, which means using
+    // System.identityHashCode, which means the assignment of keys to segments is nondeterministic,
+    // so more than (maximumSize / #segments) keys could get assigned to the same segment, which
+    // would cause one to be evicted.
+    return new CacheBuilderFactory()
+        .withKeyStrengths(ImmutableSet.of(Strength.STRONG, Strength.WEAK))
+        .withValueStrengths(ImmutableSet.copyOf(Strength.values()))
+        .withConcurrencyLevels(ImmutableSet.of(1, 4, 16, 64))
+        .withMaximumSizes(ImmutableSet.of(400, 1000))
+        .withInitialCapacities(ImmutableSet.of(0, 1, 10, 100, 1000))
+        .withExpireAfterWrites(ImmutableSet.of(
+            // DurationSpec.of(500, MILLISECONDS),
+            DurationSpec.of(1, SECONDS),
+            DurationSpec.of(1, DAYS)))
+        .withExpireAfterAccesses(ImmutableSet.of(
+            // DurationSpec.of(500, MILLISECONDS),
+            DurationSpec.of(1, SECONDS),
+            DurationSpec.of(1, DAYS)))
+        .withRefreshes(ImmutableSet.of(
+            // DurationSpec.of(500, MILLISECONDS),
+            DurationSpec.of(1, SECONDS),
+            DurationSpec.of(1, DAYS)));
+  }
+
+  private List<Map.Entry<Object, Object>> warmUp(LoadingCache<Object, Object> cache) {
+    return warmUp(cache, WARMUP_MIN, WARMUP_MAX);
+  }
+
+  /**
+   * Returns the entries that were added to the map, so they won't fall out of a map with weak or
+   * soft references until the caller drops the reference to the returned entries.
+   */
+  private List<Map.Entry<Object, Object>> warmUp(
+      LoadingCache<Object, Object> cache, int minimum, int maximum) {
+
+    List<Map.Entry<Object, Object>> entries = Lists.newArrayList();
+    for (int i = minimum; i < maximum; i++) {
+      Object key = i;
+      Object value = cache.getUnchecked(key);
+      entries.add(entryOf(key, value));
+    }
+    return entries;
+  }
+
+  private Entry<Object, Object> entryOf(Object key, Object value) {
+    return Maps.immutableEntry(key, value);
+  }
+
+  private void assertMapSize(Map<?, ?> map, int size) {
+    assertEquals(size, map.size());
+    if (size > 0) {
+      assertFalse(map.isEmpty());
+    } else {
+      assertTrue(map.isEmpty());
+    }
+    assertCollectionSize(map.keySet(), size);
+    assertCollectionSize(map.entrySet(), size);
+    assertCollectionSize(map.values(), size);
+  }
+
+  private void assertCollectionSize(Collection<?> collection, int size) {
+    assertEquals(size, collection.size());
+    if (size > 0) {
+      assertFalse(collection.isEmpty());
+    } else {
+      assertTrue(collection.isEmpty());
+    }
+    assertEquals(size, Iterables.size(collection));
+    assertEquals(size, Iterators.size(collection.iterator()));
+  }
+}
diff --git a/guava-tests/test/com/google/common/cache/TestingCacheLoaders.java b/guava-tests/test/com/google/common/cache/TestingCacheLoaders.java
new file mode 100644
index 0000000..960fed7
--- /dev/null
+++ b/guava-tests/test/com/google/common/cache/TestingCacheLoaders.java
@@ -0,0 +1,170 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.cache;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.collect.Maps;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
+
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ * Utility {@link CacheLoader} implementations intended for use in testing.
+ *
+ * @author mike nonemacher
+ */
+@GwtCompatible(emulated = true)
+class TestingCacheLoaders {
+
+  /**
+   * Returns a {@link CacheLoader} that implements a naive {@link CacheLoader#loadAll}, delegating
+   * {@link CacheLoader#load} calls to {@code loader}.
+   */
+  static <K, V> CacheLoader<K, V> bulkLoader(final CacheLoader<K, V> loader) {
+    return new CacheLoader<K, V>() {
+      @Override
+      public V load(K key) throws Exception {
+        return loader.load(key);
+      }
+
+      @Override
+      public Map<K, V> loadAll(Iterable<? extends K> keys) throws Exception {
+        Map<K, V> result = Maps.newHashMap(); // allow nulls
+        for (K key : keys) {
+          result.put(key, load(key));
+        }
+        return result;
+      }
+    };
+  }
+
+  /**
+   * Returns a {@link CacheLoader} that returns the given {@code constant} for every request.
+   */
+  static <K, V> ConstantLoader<K, V> constantLoader(V constant) {
+    return new ConstantLoader<K, V>(constant);
+  }
+
+  /**
+   * Returns a {@link CacheLoader} that returns the given {@code constant} for every request.
+   */
+  static IncrementingLoader incrementingLoader() {
+    return new IncrementingLoader();
+  }
+
+  /**
+   * Returns a {@link CacheLoader} that throws the given error for every request.
+   */
+  static <K, V> CacheLoader<K, V> errorLoader(final Error e) {
+    return new CacheLoader<K, V>() {
+      @Override
+      public V load(K key) {
+        throw e;
+      }
+    };
+  }
+
+  /**
+   * Returns a {@link CacheLoader} that throws the given exception for every request.
+   */
+  static <K, V> CacheLoader<K, V> exceptionLoader(final Exception e) {
+    return new CacheLoader<K, V>() {
+      @Override
+      public V load(K key) throws Exception {
+        throw e;
+      }
+    };
+  }
+
+  /**
+   * Returns a {@link CacheLoader} that returns the key for every request.
+   */
+  static <T> IdentityLoader<T> identityLoader() {
+    return new IdentityLoader<T>();
+  }
+
+  /**
+   * Returns a {@code new Object()} for every request, and increments a counter for every request.
+   * The count is accessible via {@link #getCount}.
+   */
+  static class CountingLoader extends CacheLoader<Object, Object> {
+    private final AtomicInteger count = new AtomicInteger();
+
+    @Override
+    public Object load(Object from) {
+      count.incrementAndGet();
+      return new Object();
+    }
+
+    public int getCount() {
+      return count.get();
+    }
+  }
+
+  static final class ConstantLoader<K, V> extends CacheLoader<K, V> {
+    private final V constant;
+
+    ConstantLoader(V constant) {
+      this.constant = constant;
+    }
+
+    @Override
+    public V load(K key) {
+      return constant;
+    }
+  }
+
+  /**
+   * Returns a {@code new Object()} for every request, and increments a counter for every request.
+   * An {@code Integer} loader that returns the key for {@code load} requests, and increments the
+   * old value on {@code reload} requests. The load counts are accessible via {@link #getLoadCount}
+   * and {@link #getReloadCount}.
+   */
+  static class IncrementingLoader extends CacheLoader<Integer, Integer> {
+    private final AtomicInteger countLoad = new AtomicInteger();
+    private final AtomicInteger countReload = new AtomicInteger();
+
+    @Override
+    public Integer load(Integer key) {
+      countLoad.incrementAndGet();
+      return key;
+    }
+
+    @GwtIncompatible("reload")
+    @Override
+    public ListenableFuture<Integer> reload(Integer key, Integer oldValue) {
+      countReload.incrementAndGet();
+      return Futures.immediateFuture(oldValue + 1);
+    }
+
+    public int getLoadCount() {
+      return countLoad.get();
+    }
+
+    public int getReloadCount() {
+      return countReload.get();
+    }
+  }
+
+  static final class IdentityLoader<T> extends CacheLoader<T, T> {
+    @Override
+    public T load(T key) {
+      return key;
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/cache/TestingRemovalListeners.java b/guava-tests/test/com/google/common/cache/TestingRemovalListeners.java
new file mode 100644
index 0000000..67c71da
--- /dev/null
+++ b/guava-tests/test/com/google/common/cache/TestingRemovalListeners.java
@@ -0,0 +1,98 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.cache;
+
+import java.util.concurrent.ConcurrentLinkedQueue;
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ * Utility {@link RemovalListener} implementations intended for use in testing.
+ *
+ * @author mike nonemacher
+ */
+class TestingRemovalListeners {
+
+  /**
+   * Returns a new no-op {@code RemovalListener}.
+   */
+  static <K, V> NullRemovalListener<K, V> nullRemovalListener() {
+    return new NullRemovalListener<K, V>();
+  }
+
+  /**
+   * Type-inferring factory method for creating a {@link QueuingRemovalListener}.
+   */
+  static <K, V> QueuingRemovalListener<K, V> queuingRemovalListener() {
+    return new QueuingRemovalListener<K,V>();
+  }
+
+  /**
+   * Type-inferring factory method for creating a {@link CountingRemovalListener}.
+   */
+  static <K, V> CountingRemovalListener<K, V> countingRemovalListener() {
+    return new CountingRemovalListener<K,V>();
+  }
+
+  /**
+   * {@link RemovalListener} that adds all {@link RemovalNotification} objects to a queue.
+   */
+  static class QueuingRemovalListener<K, V>
+      extends ConcurrentLinkedQueue<RemovalNotification<K, V>> implements RemovalListener<K, V> {
+
+    @Override
+    public void onRemoval(RemovalNotification<K, V> notification) {
+      add(notification);
+    }
+  }
+
+  /**
+   * {@link RemovalListener} that counts each {@link RemovalNotification} it receives, and provides
+   * access to the most-recently received one.
+   */
+  static class CountingRemovalListener<K, V> implements RemovalListener<K, V> {
+    private final AtomicInteger count = new AtomicInteger();
+    private volatile RemovalNotification<K, V> lastNotification;
+
+    @Override
+    public void onRemoval(RemovalNotification<K, V> notification) {
+      count.incrementAndGet();
+      lastNotification = notification;
+    }
+
+    public int getCount() {
+      return count.get();
+    }
+
+    public K getLastEvictedKey() {
+      return lastNotification.getKey();
+    }
+
+    public V getLastEvictedValue() {
+      return lastNotification.getValue();
+    }
+
+    public RemovalNotification<K, V> getLastNotification() {
+      return lastNotification;
+    }
+  }
+
+  /**
+   * No-op {@link RemovalListener}.
+   */
+  static class NullRemovalListener<K, V> implements RemovalListener<K, V> {
+    @Override
+    public void onRemoval(RemovalNotification<K, V> notification) {}
+  }
+}
diff --git a/guava-tests/test/com/google/common/cache/TestingWeighers.java b/guava-tests/test/com/google/common/cache/TestingWeighers.java
new file mode 100644
index 0000000..dd7f77d
--- /dev/null
+++ b/guava-tests/test/com/google/common/cache/TestingWeighers.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.cache;
+
+/**
+ * Utility {@link Weigher} implementations intended for use in testing.
+ *
+ * @author Charles Fry
+ */
+public class TestingWeighers {
+
+  /**
+   * Returns a {@link Weigher} that returns the given {@code constant} for every request.
+   */
+  static Weigher<Object, Object> constantWeigher(int constant) {
+    return new ConstantWeigher(constant);
+  }
+
+  /**
+   * Returns a {@link Weigher} that uses the integer key as the weight.
+   */
+  static Weigher<Integer, Object> intKeyWeigher() {
+    return new IntKeyWeigher();
+  }
+
+  /**
+   * Returns a {@link Weigher} that uses the integer value as the weight.
+   */
+  static Weigher<Object, Integer> intValueWeigher() {
+    return new IntValueWeigher();
+  }
+
+  static final class ConstantWeigher implements Weigher<Object, Object> {
+    private final int constant;
+
+    ConstantWeigher(int constant) {
+      this.constant = constant;
+    }
+
+    @Override
+    public int weigh(Object key, Object value) {
+      return constant;
+    }
+  }
+
+  static final class IntKeyWeigher implements Weigher<Integer, Object> {
+    @Override
+    public int weigh(Integer key, Object value) {
+      return key;
+    }
+  }
+
+  static final class IntValueWeigher implements Weigher<Object, Integer> {
+    @Override
+    public int weigh(Object key, Integer value) {
+      return value;
+    }
+  }
+
+}
diff --git a/guava-tests/test/com/google/common/collect/AbstractBiMapTest.java b/guava-tests/test/com/google/common/collect/AbstractBiMapTest.java
new file mode 100644
index 0000000..20f171d
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/AbstractBiMapTest.java
@@ -0,0 +1,551 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static java.util.Arrays.asList;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.testing.SerializableTester;
+
+import junit.framework.TestCase;
+
+import java.io.Serializable;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+/**
+ * Common tests for any {@code BiMap}.
+ *
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible(emulated = true)
+public abstract class AbstractBiMapTest extends TestCase {
+
+  protected abstract BiMap<Integer, String> create();
+
+  protected BiMap<Integer, String> bimap;
+  protected Set<Entry<Integer, String>> entrySet;
+
+  // public for GWT
+  @Override public void setUp() throws Exception {
+    super.setUp();
+    bimap = create();
+    entrySet = bimap.entrySet();
+  }
+
+  public void testClear() {
+    bimap.clear();
+    assertTrue(bimap.isEmpty());
+    putOneTwoThree();
+    bimap.clear();
+    assertTrue(bimap.isEmpty());
+  }
+
+  public void testContainsKey() {
+    assertFalse(bimap.containsKey(null));
+    assertFalse(bimap.containsKey(1));
+    assertFalse(bimap.containsKey("one"));
+
+    bimap.put(1, "one");
+    assertTrue(bimap.containsKey(1));
+
+    bimap.put(null, null);
+    assertTrue(bimap.containsKey(null));
+  }
+
+  public void testContainsValue() {
+    assertFalse(bimap.containsValue(null));
+    assertFalse(bimap.containsValue(1));
+    assertFalse(bimap.containsValue("one"));
+
+    bimap.put(1, "one");
+    assertTrue(bimap.containsValue("one"));
+
+    bimap.put(null, null);
+    assertTrue(bimap.containsValue(null));
+  }
+
+  public void testEquals() {
+    BiMap<Integer, String> biMap = create();
+    assertEquals(biMap, biMap);
+    assertEquals(create(), biMap);
+    biMap.put(1, null);
+    assertFalse(create().equals(biMap));
+  }
+
+  public void testGet() {
+    assertNull(bimap.get(1));
+    assertNull(bimap.get(null));
+    assertNull(bimap.get("bad"));
+
+    bimap.put(1, "one");
+    bimap.put(0, null);
+    bimap.put(null, "nothing");
+    assertEquals("one", bimap.get(1));
+    assertNull(bimap.get(0));
+    assertEquals("nothing", bimap.get(null));
+    assertNull(bimap.get("bad"));
+
+    bimap.forcePut(null, null);
+    assertNull(bimap.get(null));
+    bimap.remove(null);
+    assertNull(bimap.get(null));
+  }
+
+  public void testInverseSimple() {
+    BiMap<String, Integer> inverse = bimap.inverse();
+    bimap.put(1, "one");
+    bimap.put(2, "two");
+    assertEquals(ImmutableMap.of("one", 1, "two", 2), inverse);
+    // see InverseBiMapTest
+
+    assertSame(bimap, inverse.inverse());
+  }
+
+  public void testInversePut() {
+    BiMap<String, Integer> inverse = bimap.inverse();
+    bimap.put(1, "one");
+    bimap.inverse().put("two", 2);
+    assertEquals(ImmutableMap.of("one", 1, "two", 2), inverse);
+    assertEquals(ImmutableMap.of(1, "one", 2, "two"), bimap);
+  }
+
+  public void testIsEmpty() {
+    assertTrue(bimap.isEmpty());
+    bimap.put(1, "one");
+    assertFalse(bimap.isEmpty());
+    bimap.remove(1);
+    assertTrue(bimap.isEmpty());
+  }
+
+  public void testPut() {
+    bimap.put(1, "one");
+    assertEquals(ImmutableMap.of(1, "one"), bimap);
+
+    bimap.put(2, "two");
+    assertEquals(ImmutableMap.of(1, "one", 2, "two"), bimap);
+
+    bimap.put(2, "two");
+    assertEquals(ImmutableMap.of(1, "one", 2, "two"), bimap);
+
+    bimap.put(1, "ONE");
+    assertEquals(ImmutableMap.of(1, "ONE", 2, "two"), bimap);
+
+    try {
+      bimap.put(3, "two");
+      fail();
+    } catch (IllegalArgumentException e) {
+    }
+    assertEquals(ImmutableMap.of(1, "ONE", 2, "two"), bimap);
+
+    bimap.put(-1, null);
+    bimap.put(null, "null");
+    Map<Integer, String> expected = Maps.newHashMap();
+    expected.put(1, "ONE");
+    expected.put(2, "two");
+    expected.put(-1, null);
+    expected.put(null, "null");
+
+    assertEquals(expected, bimap);
+
+    bimap.remove(-1);
+    bimap.put(null, null);
+
+    expected.remove(-1);
+    expected.put(null, null);
+
+    assertEquals(expected, bimap);
+  }
+
+  public void testPutNull() {
+    bimap.put(-1, null);
+    assertTrue(bimap.containsValue(null));
+    bimap.put(1, "one");
+    assertTrue(bimap.containsValue(null));
+  }
+
+  public void testPutAll() {
+    bimap.put(1, "one");
+    Map<Integer, String> newEntries = ImmutableMap.of(2, "two", 3, "three");
+    bimap.putAll(newEntries);
+    assertEquals(ImmutableMap.of(1, "one", 2, "two", 3, "three"), bimap);
+  }
+
+  public void testForcePut() {
+    assertNull(bimap.forcePut(1, "one"));
+    assertEquals(ImmutableMap.of(1, "one"), bimap);
+    assertEquals("one", bimap.forcePut(1, "one"));
+    assertEquals(ImmutableMap.of(1, "one"), bimap);
+    assertEquals("one", bimap.forcePut(1, "ONE"));
+    assertEquals(ImmutableMap.of(1, "ONE"), bimap);
+    assertNull(bimap.forcePut(-1, "ONE")); // key 1 disappears without a trace
+    assertEquals(ImmutableMap.of(-1, "ONE"), bimap);
+    assertNull(bimap.forcePut(2, "two"));
+    assertEquals(ImmutableMap.of(-1, "ONE", 2, "two"), bimap);
+    assertEquals("two", bimap.forcePut(2, "ONE"));
+    assertEquals(ImmutableMap.of(2, "ONE"), bimap);
+  }
+
+  public void testRemove() {
+    Map<Integer, String> map = Maps.newHashMap();
+    map.put(0, null);
+    map.put(1, "one");
+    map.put(null, "null");
+
+    bimap.putAll(map);
+    assertNull(bimap.remove(0));
+
+    map.remove(0);
+    assertEquals(map, bimap);
+
+    assertEquals("null", bimap.remove(null));
+    assertEquals(Collections.singletonMap(1, "one"), bimap);
+
+    assertNull(bimap.remove(15));
+
+    assertEquals("one", bimap.remove(1));
+    assertTrue(bimap.isEmpty());
+  }
+
+  public void testSize() {
+    assertEquals(0, bimap.size());
+    bimap.put(1, "one");
+    assertEquals(1, bimap.size());
+    bimap.put(1, "ONE");
+    assertEquals(1, bimap.size());
+    bimap.put(2, "two");
+    assertEquals(2, bimap.size());
+    bimap.forcePut(1, "two");
+    assertEquals(1, bimap.size());
+  }
+
+  public void testToString() {
+    bimap.put(1, "one");
+    bimap.put(2, "two");
+
+    String string = bimap.toString();
+    String expected = string.startsWith("{1")
+        ? "{1=one, 2=two}"
+        : "{2=two, 1=one}";
+    assertEquals(expected, bimap.toString());
+  }
+
+  // Entry Set
+
+  public void testEntrySetAdd() {
+    try {
+      entrySet.add(Maps.immutableEntry(1, "one"));
+      fail();
+    } catch (UnsupportedOperationException expected) {
+    }
+  }
+
+  public void testEntrySetAddAll() {
+    try {
+      entrySet.addAll(Collections.singleton(Maps.immutableEntry(1, "one")));
+      fail();
+    } catch (UnsupportedOperationException expected) {
+    }
+  }
+
+  public void testEntrySetClear() {
+    entrySet.clear();
+    assertTrue(entrySet.isEmpty());
+    assertTrue(bimap.isEmpty());
+    putOneTwoThree();
+    entrySet.clear();
+    assertTrue(entrySet.isEmpty());
+    assertTrue(bimap.isEmpty());
+  }
+
+  public void testEntrySetContains() {
+    assertFalse(entrySet.contains(Maps.immutableEntry(1, "one")));
+    bimap.put(1, "one");
+    assertTrue(entrySet.contains(Maps.immutableEntry(1, "one")));
+    assertFalse(entrySet.contains(Maps.immutableEntry(1, "")));
+    assertFalse(entrySet.contains(Maps.immutableEntry(0, "one")));
+    assertFalse(entrySet.contains(Maps.immutableEntry(1, null)));
+    assertFalse(entrySet.contains(Maps.immutableEntry(null, "one")));
+    assertFalse(entrySet.contains(Maps.immutableEntry(null, null)));
+
+    bimap.put(null, null);
+    assertTrue(entrySet.contains(Maps.immutableEntry(1, "one")));
+    assertTrue(entrySet.contains(Maps.immutableEntry(null, null)));
+    assertFalse(entrySet.contains(Maps.immutableEntry(1, "")));
+    assertFalse(entrySet.contains(Maps.immutableEntry(0, "one")));
+    assertFalse(entrySet.contains(Maps.immutableEntry(1, null)));
+    assertFalse(entrySet.contains(Maps.immutableEntry(null, "one")));
+
+    bimap.put(null, "null");
+    bimap.put(0, null);
+    assertTrue(entrySet.contains(Maps.immutableEntry(1, "one")));
+    assertTrue(entrySet.contains(Maps.immutableEntry(null, "null")));
+    assertTrue(entrySet.contains(Maps.immutableEntry(0, null)));
+    assertFalse(entrySet.contains(Maps.immutableEntry(1, "")));
+    assertFalse(entrySet.contains(Maps.immutableEntry(0, "one")));
+    assertFalse(entrySet.contains(Maps.immutableEntry(1, null)));
+    assertFalse(entrySet.contains(Maps.immutableEntry(null, "one")));
+    assertFalse(entrySet.contains(Maps.immutableEntry(null, null)));
+  }
+
+  public void testEntrySetIsEmpty() {
+    assertTrue(entrySet.isEmpty());
+    bimap.put(1, "one");
+    assertFalse(entrySet.isEmpty());
+    bimap.remove(1);
+    assertTrue(entrySet.isEmpty());
+  }
+
+  public void testEntrySetRemove() {
+    putOneTwoThree();
+    assertTrue(bimap.containsKey(1));
+    assertTrue(bimap.containsValue("one"));
+    assertTrue(entrySet.remove(Maps.immutableEntry(1, "one")));
+    assertFalse(bimap.containsKey(1));
+    assertFalse(bimap.containsValue("one"));
+    assertEquals(2, bimap.size());
+    assertEquals(2, bimap.inverse().size());
+    assertFalse(entrySet.remove(Maps.immutableEntry(2, "three")));
+    assertFalse(entrySet.remove(3));
+    assertEquals(2, bimap.size());
+    assertEquals(2, bimap.inverse().size());
+  }
+
+  public void testEntrySetRemoveAll() {
+    putOneTwoThree();
+    assertTrue(bimap.containsKey(1));
+    assertTrue(bimap.containsValue("one"));
+    assertTrue(entrySet.removeAll(
+        Collections.singleton(Maps.immutableEntry(1, "one"))));
+    assertFalse(bimap.containsKey(1));
+    assertFalse(bimap.containsValue("one"));
+    assertEquals(2, bimap.size());
+    assertEquals(2, bimap.inverse().size());
+  }
+
+  public void testEntrySetValue() {
+    bimap.put(1, "one");
+    Entry<Integer, String> entry = bimap.entrySet().iterator().next();
+    bimap.put(2, "two");
+    assertEquals("one", entry.getValue());
+    bimap.put(1, "one");
+    assertEquals("one", entry.getValue());
+    assertEquals("one", bimap.get(1));
+    assertEquals(Integer.valueOf(1), bimap.inverse().get("one"));
+    bimap.put(1, "uno");
+    assertEquals("uno", entry.getValue());
+    assertEquals("uno", bimap.get(1));
+    assertEquals(Integer.valueOf(1), bimap.inverse().get("uno"));
+    assertEquals(2, bimap.size());
+    assertEquals(2, bimap.inverse().size());
+    try {
+      entry.setValue("two");
+      fail();
+    } catch (IllegalArgumentException expected) {}
+    assertEquals("uno", entry.getValue());
+    assertEquals("uno", bimap.get(1));
+    assertEquals(Integer.valueOf(1), bimap.inverse().get("uno"));
+    assertEquals(2, bimap.size());
+    assertEquals(2, bimap.inverse().size());
+  }
+
+  public void testEntrySetValueRemovedEntry() {
+    bimap.put(1, "a");
+    Entry<Integer, String> entry = bimap.entrySet().iterator().next();
+    bimap.clear();
+    try {
+      entry.setValue("b");
+      fail();
+    } catch (IllegalStateException expected) {}
+    assertEquals(0, bimap.size());
+    assertEquals(0, bimap.inverse().size());
+  }
+
+  public void testEntrySetValueRemovedEntryNullOldValue() {
+    bimap.put(1, null);
+    Entry<Integer, String> entry = bimap.entrySet().iterator().next();
+    bimap.clear();
+    try {
+      entry.setValue("b");
+      fail();
+    } catch (IllegalStateException expected) {}
+    assertEquals(0, bimap.size());
+    assertEquals(0, bimap.inverse().size());
+  }
+
+  public void testEntrySetValueRemovedEntryAddedEqualEntry() {
+    bimap.put(1, "a");
+    Entry<Integer, String> entry = bimap.entrySet().iterator().next();
+    bimap.clear();
+    bimap.put(1, "a");
+    try {
+      entry.setValue("b");
+      fail();
+    } catch (IllegalStateException expected) {}
+    assertEquals(1, bimap.size());
+    assertEquals("a", bimap.get(1));
+    assertEquals(1, bimap.inverse().size());
+    assertEquals((Integer) 1, bimap.inverse().get("a"));
+  }
+
+  public void testKeySetIteratorRemove() {
+    putOneTwoThree();
+    Iterator<Integer> iterator = bimap.keySet().iterator();
+    iterator.next();
+    iterator.remove();
+    assertEquals(2, bimap.size());
+    assertEquals(2, bimap.inverse().size());
+  }
+
+  public void testKeySetRemoveAll() {
+    putOneTwoThree();
+    Set<Integer> keySet = bimap.keySet();
+    assertTrue(keySet.removeAll(asList(1, 3)));
+    assertEquals(1, bimap.size());
+    assertTrue(keySet.contains(2));
+  }
+
+  public void testKeySetRetainAll() {
+    putOneTwoThree();
+    Set<Integer> keySet = bimap.keySet();
+    assertTrue(keySet.retainAll(Collections.singleton(2)));
+    assertEquals(1, bimap.size());
+    assertTrue(keySet.contains(2));
+  }
+
+  public void testEntriesIteratorRemove() {
+    putOneTwoThree();
+    Iterator<Entry<Integer, String>> iterator = bimap.entrySet().iterator();
+    iterator.next();
+    iterator.remove();
+    assertEquals(2, bimap.size());
+    assertEquals(2, bimap.inverse().size());
+  }
+
+  public void testEntriesRetainAll() {
+    putOneTwoThree();
+    Set<Map.Entry<Integer, String>> entries = bimap.entrySet();
+    Map.Entry<Integer, String> entry = Maps.immutableEntry(2, "two");
+    assertTrue(entries.retainAll(Collections.singleton(entry)));
+    assertEquals(1, bimap.size());
+    assertTrue(bimap.containsKey(2));
+  }
+
+  public void testValuesIteratorRemove() {
+    putOneTwoThree();
+    Iterator<String> iterator = bimap.values().iterator();
+    iterator.next();
+    iterator.remove();
+    assertEquals(2, bimap.size());
+    assertEquals(2, bimap.inverse().size());
+  }
+
+  public void testValuesToArray() {
+    bimap.put(1, "one");
+    String[] array = new String[3];
+    array[1] = "garbage";
+    assertSame(array, bimap.values().toArray(array));
+    assertEquals("one", array[0]);
+    assertNull(array[1]);
+  }
+
+  public void testValuesToString() {
+    bimap.put(1, "one");
+    assertEquals("[one]", bimap.values().toString());
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testSerialization() {
+    bimap.put(1, "one");
+    bimap.put(2, "two");
+    bimap.put(3, "three");
+    bimap.put(null, null);
+
+    BiMap<Integer, String> copy =
+        SerializableTester.reserializeAndAssert(bimap);
+    assertEquals(bimap.inverse(), copy.inverse());
+  }
+
+  void putOneTwoThree() {
+    bimap.put(1, "one");
+    bimap.put(2, "two");
+    bimap.put(3, "three");
+  }
+
+  @GwtIncompatible("used only by @GwtIncompatible code")
+  private static class BiMapPair implements Serializable {
+    final BiMap<Integer, String> forward;
+    final BiMap<String, Integer> backward;
+
+    BiMapPair(BiMap<Integer, String> original) {
+      this.forward = original;
+      this.backward = original.inverse();
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testSerializationWithInverseEqual() {
+    bimap.put(1, "one");
+    bimap.put(2, "two");
+    bimap.put(3, "three");
+    bimap.put(null, null);
+
+    BiMapPair pair = new BiMapPair(bimap);
+    BiMapPair copy = SerializableTester.reserialize(pair);
+    assertEquals(pair.forward, copy.forward);
+    assertEquals(pair.backward, copy.backward);
+
+    copy.forward.put(4, "four");
+    copy.backward.put("five", 5);
+    assertEquals(copy.backward, copy.forward.inverse());
+    assertEquals(copy.forward, copy.backward.inverse());
+
+    assertTrue(copy.forward.containsKey(4));
+    assertTrue(copy.forward.containsKey(5));
+    assertTrue(copy.backward.containsValue(4));
+    assertTrue(copy.backward.containsValue(5));
+    assertTrue(copy.forward.containsValue("four"));
+    assertTrue(copy.forward.containsValue("five"));
+    assertTrue(copy.backward.containsKey("four"));
+    assertTrue(copy.backward.containsKey("five"));
+  }
+
+  /**
+   * The sameness checks ensure that a bimap and its inverse remain consistent,
+   * even after the deserialized instances are updated. Also, the relationship
+   * {@code a == b.inverse()} should continue to hold after both bimaps are
+   * serialized and deserialized together.
+   */
+  @GwtIncompatible("SerializableTester")
+  public void testSerializationWithInverseSame() {
+    bimap.put(1, "one");
+    bimap.put(2, "two");
+    bimap.put(3, "three");
+    bimap.put(null, null);
+
+    BiMapPair pair = new BiMapPair(bimap);
+    BiMapPair copy = SerializableTester.reserialize(pair);
+    assertSame(copy.backward, copy.forward.inverse());
+    assertSame(copy.forward, copy.backward.inverse());
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/AbstractBstBalancePolicyTest.java b/guava-tests/test/com/google/common/collect/AbstractBstBalancePolicyTest.java
new file mode 100644
index 0000000..0f53f54
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/AbstractBstBalancePolicyTest.java
@@ -0,0 +1,115 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.collect.BstTesting.assertInOrderTraversalIs;
+import static com.google.common.collect.BstTesting.nodeFactory;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.collect.BstTesting.SimpleNode;
+
+import junit.framework.TestCase;
+
+import javax.annotation.Nullable;
+
+/**
+ * Tests for an arbitrary {@code BSTRebalancePolicy}.
+ *
+ * @author Louis Wasserman
+ */
+@GwtCompatible
+public abstract class AbstractBstBalancePolicyTest extends TestCase {
+  protected abstract BstBalancePolicy<SimpleNode> getBalancePolicy();
+
+  public void testBalanceLeaf() {
+    SimpleNode a = new SimpleNode('a', null, null);
+    assertInOrderTraversalIs(getBalancePolicy().balance(nodeFactory, a, null, null), "a");
+  }
+
+  private SimpleNode balanceNew(char c, @Nullable SimpleNode left, @Nullable SimpleNode right) {
+    return getBalancePolicy().balance(nodeFactory, new SimpleNode(c, null, null), left, right);
+  }
+
+  public void testBalanceTree1() {
+    //   b
+    //    \
+    //    c
+    SimpleNode c = balanceNew('c', null, null);
+    SimpleNode b = balanceNew('b', null, c);
+    assertInOrderTraversalIs(b, "bc");
+  }
+
+  public void testBalanceTree2() {
+    //   b
+    //  /
+    //  a
+    SimpleNode a = balanceNew('a', null, null);
+    SimpleNode b = balanceNew('b', a, null);
+    assertInOrderTraversalIs(b, "ab");
+  }
+
+  public void testBalanceTree3() {
+    //   b
+    //  / \
+    //  a c
+    SimpleNode a = balanceNew('a', null, null);
+    SimpleNode c = balanceNew('c', null, null);
+    SimpleNode b = balanceNew('b', a, c);
+    assertInOrderTraversalIs(b, "abc");
+  }
+
+  public void testBalanceTree4() {
+    // a
+    //  \
+    //  b
+    //   \
+    //   c
+    //    \
+    //    d
+    //     \
+    //     e
+    //      \
+    //       f
+
+    SimpleNode f = balanceNew('f', null, null);
+    SimpleNode e = balanceNew('e', null, f);
+    SimpleNode d = balanceNew('d', null, e);
+    SimpleNode c = balanceNew('c', null, d);
+    SimpleNode b = balanceNew('b', null, c);
+    SimpleNode a = balanceNew('a', null, b);
+    assertInOrderTraversalIs(a, "abcdef");
+  }
+
+  public void testBalanceTree5() {
+    //       f
+    //      /
+    //      e
+    //     /
+    //     d
+    //    /
+    //    c
+    //   /
+    //   b
+    //  /
+    //  a
+    SimpleNode a = balanceNew('a', null, null);
+    SimpleNode b = balanceNew('b', a, null);
+    SimpleNode c = balanceNew('c', b, null);
+    SimpleNode d = balanceNew('d', c, null);
+    SimpleNode e = balanceNew('e', d, null);
+    SimpleNode f = balanceNew('f', e, null);
+    assertInOrderTraversalIs(f, "abcdef");
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/AbstractCollectionTest.java b/guava-tests/test/com/google/common/collect/AbstractCollectionTest.java
new file mode 100644
index 0000000..13c3df2
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/AbstractCollectionTest.java
@@ -0,0 +1,226 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static java.util.Arrays.asList;
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.testing.NullPointerTester;
+
+import junit.framework.TestCase;
+
+import java.util.Collection;
+import java.util.Collections;
+
+/**
+ * Common tests for a {@code Collection}.
+ *
+ * @author Kevin Bourrillion
+ * @author Mike Bostock
+ */
+@GwtCompatible(emulated = true)
+public abstract class AbstractCollectionTest extends TestCase {
+
+  protected abstract <E> Collection<E> create();
+
+  protected Collection<String> c;
+
+  // public for GWT
+  @Override public void setUp() throws Exception {
+    super.setUp();
+    c = create();
+  }
+
+  public void testIsEmptyYes() {
+    assertTrue(c.isEmpty());
+  }
+
+  public void testIsEmptyNo() {
+    c.add("a");
+    assertFalse(c.isEmpty());
+  }
+
+  public void testAddOne() {
+    assertTrue(c.add("a"));
+    assertContents("a");
+  }
+
+  public void testAddSeveralTimes() {
+    assertTrue(c.add("a"));
+    assertTrue(c.add("b"));
+    c.add("a");
+    c.add("b");
+    assertTrue(c.contains("a"));
+    assertTrue(c.contains("b"));
+  }
+
+  public void testRemoveOneFromNoneStandard() {
+    assertFalse(c.remove("a"));
+    assertContents();
+  }
+
+  public void testRemoveOneFromOneStandard() {
+    c.add("a");
+    assertTrue(c.remove("a"));
+    assertContents();
+  }
+
+  public void testContainsNo() {
+    c.add("a");
+    assertFalse(c.contains("b"));
+  }
+
+  public void testContainsOne() {
+    c.add("a");
+    assertTrue(c.contains(new String("a")));
+  }
+
+  public void testContainsAfterRemoval() {
+    c.add("a");
+    c.remove("a");
+    assertFalse(c.contains("a"));
+  }
+
+  public void testContainsAllVacuous() {
+    assertTrue(c.containsAll(Collections.emptySet()));
+  }
+
+  public void testRemoveAllVacuous() {
+    assertFalse(c.removeAll(Collections.emptySet()));
+  }
+
+  public void testRetainAllVacuous() {
+    assertFalse(c.retainAll(asList("a")));
+    assertContents();
+  }
+
+  public void testRetainAllOfNothing() {
+    c.add("a");
+    assertTrue(c.retainAll(Collections.emptySet()));
+    assertContents();
+  }
+
+  public void testClearNothing() {
+    c.clear();
+    assertContents();
+  }
+
+  public void testClear() {
+    c = createSample();
+    c.clear();
+    assertContents();
+  }
+
+  public void testEqualsNo() {
+    c.add("a");
+
+    Collection<String> c2 = create();
+    c2.add("b");
+
+    assertFalse(c.equals(c2));
+  }
+
+  public void testEqualsYes() {
+    c.add("a");
+    c.add("b");
+    c.add("b");
+
+    Collection<String> c2 = create();
+    c2.add("a");
+    c2.add("b");
+    c2.add("b");
+
+    assertEquals(c, c2);
+  }
+
+  public void testEqualsSelf() {
+    c.add("a");
+    c.add("b");
+    c.add("b");
+
+    assertEquals(c, c);
+  }
+
+  public void testEqualsTricky() {
+    c.add("a");
+    c.add("a");
+
+    Collection<String> c2 = create();
+    c2.add("a");
+    c2.add("a");
+    c2.add("b");
+    c2.add("b");
+    c2.remove("b");
+    c2.remove("b");
+
+    assertEquals(c, c2);
+  }
+
+  public void testEqualsPartial() {
+    c.add("a");
+    c.add("b");
+
+    Collection<String> c2 = create();
+    c2.add("a");
+    c2.add("c");
+
+    assertFalse(c.equals(c2));
+
+    Collection<String> c3 = create();
+    c2.add("b");
+    c2.add("c");
+
+    assertFalse(c2.equals(c3));
+  }
+
+  public void testEqualsDifferentTypes() {
+    c.add("a");
+    assertFalse(c.equals("a"));
+  }
+
+  public void testToArrayOne() {
+    c.add("a");
+    String[] array = new String[3];
+    assertSame(array, c.toArray(array));
+    assertEquals("a", array[0]);
+    assertNull(array[1]);
+  }
+
+  @GwtIncompatible("NullPointerTester")
+  public void testNullPointerExceptions() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.testAllPublicInstanceMethods(c);
+  }
+
+  protected Collection<String> createSample() {
+    Collection<String> c = create();
+    c.add("a");
+    c.add("b");
+    c.add("b");
+    c.add("c");
+    c.add("d");
+    c.add("d");
+    c.add("d");
+    return c;
+  }
+
+  protected void assertContents(String... expected) {
+    ASSERT.that(c).hasContentsAnyOrder(expected);
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/AbstractConcurrentHashMultisetTest.java b/guava-tests/test/com/google/common/collect/AbstractConcurrentHashMultisetTest.java
new file mode 100644
index 0000000..514e7e9
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/AbstractConcurrentHashMultisetTest.java
@@ -0,0 +1,124 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static java.util.Arrays.asList;
+
+/**
+ * Unit test for {@link ConcurrentHashMultiset}.
+ *
+ * @author Kevin Bourrillion
+ * @author Jared Levy
+ */
+public abstract class AbstractConcurrentHashMultisetTest
+    extends AbstractMultisetTest {
+  // we don't support null
+  @Override public void testToStringNull() {}
+
+  // our entries are snapshots, not live views. at least for now.
+
+  @Override public void testEntryAfterRemove() {}
+  @Override public void testEntryAfterClear() {}
+  @Override public void testEntryAfterEntrySetClear() {}
+  @Override public void testEntryAfterEntrySetIteratorRemove() {}
+  @Override public void testEntryAfterElementSetIteratorRemove() {}
+
+  public void testCopyConstructor() {
+    ms = ConcurrentHashMultiset.create(asList("a", "b", "a", "c"));
+    assertEquals(4, ms.size());
+    assertEquals(2, ms.count("a"));
+    assertEquals(1, ms.count("b"));
+    assertEquals(1, ms.count("c"));
+  }
+
+  public void testSetCount() {
+    ConcurrentHashMultiset<String> cms = ConcurrentHashMultiset.create();
+    cms.add("a", 2);
+    cms.add("b", 3);
+
+    try {
+      cms.setCount("a", -1);
+      fail();
+    } catch (IllegalArgumentException expected) {}
+    assertEquals(2, cms.count("a"));
+
+    assertEquals(2, cms.setCount("a", 0));
+    assertEquals(0, cms.count("a"));
+    assertEquals(3, cms.setCount("b", 4));
+    assertEquals(4, cms.count("b"));
+    assertEquals(0, cms.setCount("c", 5));
+    assertEquals(5, cms.count("c"));
+  }
+
+  public void testSetCountConditional() {
+    ConcurrentHashMultiset<String> cms = ConcurrentHashMultiset.create();
+    cms.add("a", 2);
+    cms.add("b", 3);
+
+    try {
+      cms.setCount("a", -1, 1);
+      fail();
+    } catch (IllegalArgumentException expected) {}
+    try {
+      cms.setCount("a", 1, -1);
+      fail();
+    } catch (IllegalArgumentException expected) {}
+    assertEquals(2, cms.count("a"));
+
+    assertTrue(cms.setCount("c", 0, 0));
+    assertEquals(0, cms.count("c"));
+    assertFalse(cms.setCount("c", 1, 0));
+    assertEquals(0, cms.count("c"));
+    assertFalse(cms.setCount("a", 0, 0));
+    assertEquals(2, cms.count("a"));
+    assertFalse(cms.setCount("a", 1, 0));
+    assertEquals(2, cms.count("a"));
+    assertTrue(cms.setCount("a", 2, 0));
+    assertEquals(0, cms.count("a"));
+
+    assertTrue(cms.setCount("d", 0, 4));
+    assertEquals(4, cms.count("d"));
+    assertFalse(cms.setCount("b", 0, 5));
+    assertEquals(3, cms.count("b"));
+    assertFalse(cms.setCount("b", 1, 5));
+    assertEquals(3, cms.count("b"));
+    assertTrue(cms.setCount("b", 3, 5));
+    assertEquals(5, cms.count("b"));
+  }
+
+  public void testRemoveExactly() {
+    ConcurrentHashMultiset<String> cms = ConcurrentHashMultiset.create();
+    cms.add("a", 2);
+    cms.add("b", 3);
+
+    try {
+      cms.removeExactly("a", -2);
+    } catch (IllegalArgumentException expected) {}
+
+    assertTrue(cms.removeExactly("a", 0));
+    assertEquals(2, cms.count("a"));
+    assertTrue(cms.removeExactly("c", 0));
+    assertEquals(0, cms.count("c"));
+
+    assertFalse(cms.removeExactly("a", 4));
+    assertEquals(2, cms.count("a"));
+    assertTrue(cms.removeExactly("a", 2));
+    assertEquals(0, cms.count("a"));
+    assertTrue(cms.removeExactly("b", 2));
+    assertEquals(1, cms.count("b"));
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/AbstractImmutableSetTest.java b/guava-tests/test/com/google/common/collect/AbstractImmutableSetTest.java
new file mode 100644
index 0000000..ca475da
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/AbstractImmutableSetTest.java
@@ -0,0 +1,457 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.collect.testing.IteratorFeature.UNMODIFIABLE;
+import static java.util.Arrays.asList;
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.collect.testing.Helpers;
+import com.google.common.collect.testing.IteratorTester;
+import com.google.common.collect.testing.MinimalCollection;
+import com.google.common.collect.testing.MinimalIterable;
+
+import junit.framework.TestCase;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Base class for {@link ImmutableSet} and  {@link ImmutableSortedSet} tests.
+ *
+ * @author Kevin Bourrillion
+ * @author Jared Levy
+ */
+@GwtCompatible(emulated = true)
+public abstract class AbstractImmutableSetTest extends TestCase {
+
+  protected abstract Set<String> of();
+  protected abstract Set<String> of(String e);
+  protected abstract Set<String> of(String e1, String e2);
+  protected abstract Set<String> of(String e1, String e2, String e3);
+  protected abstract Set<String> of(String e1, String e2, String e3, String e4);
+  protected abstract Set<String> of(String e1, String e2, String e3, String e4,
+      String e5);
+  protected abstract Set<String> of(String e1, String e2, String e3, String e4,
+      String e5, String e6, String... rest);
+  protected abstract Set<String> copyOf(String[] elements);
+  protected abstract Set<String> copyOf(Collection<String> elements);
+  protected abstract Set<String> copyOf(Iterable<String> elements);
+  protected abstract Set<String> copyOf(Iterator<String> elements);
+
+  public void testCreation_noArgs() {
+    Set<String> set = of();
+    assertEquals(Collections.<String>emptySet(), set);
+    assertSame(of(), set);
+  }
+
+  public void testCreation_oneElement() {
+    Set<String> set = of("a");
+    assertEquals(Collections.singleton("a"), set);
+  }
+
+  public void testCreation_twoElements() {
+    Set<String> set = of("a", "b");
+    assertEquals(Sets.newHashSet("a", "b"), set);
+  }
+
+  public void testCreation_threeElements() {
+    Set<String> set = of("a", "b", "c");
+    assertEquals(Sets.newHashSet("a", "b", "c"), set);
+  }
+
+  public void testCreation_fourElements() {
+    Set<String> set = of("a", "b", "c", "d");
+    assertEquals(Sets.newHashSet("a", "b", "c", "d"), set);
+  }
+
+  public void testCreation_fiveElements() {
+    Set<String> set = of("a", "b", "c", "d", "e");
+    assertEquals(Sets.newHashSet("a", "b", "c", "d", "e"), set);
+  }
+
+  public void testCreation_sixElements() {
+    Set<String> set = of("a", "b", "c", "d", "e", "f");
+    assertEquals(Sets.newHashSet("a", "b", "c", "d", "e", "f"), set);
+  }
+
+  public void testCreation_sevenElements() {
+    Set<String> set = of("a", "b", "c", "d", "e", "f", "g");
+    assertEquals(Sets.newHashSet("a", "b", "c", "d", "e", "f", "g"), set);
+  }
+
+  public void testCreation_eightElements() {
+    Set<String> set = of("a", "b", "c", "d", "e", "f", "g", "h");
+    assertEquals(Sets.newHashSet("a", "b", "c", "d", "e", "f", "g", "h"), set);
+  }
+
+  public void testCopyOf_emptyArray() {
+    String[] array = new String[0];
+    Set<String> set = copyOf(array);
+    assertEquals(Collections.<String>emptySet(), set);
+    assertSame(of(), set);
+  }
+
+  public void testCopyOf_arrayOfOneElement() {
+    String[] array = new String[] { "a" };
+    Set<String> set = copyOf(array);
+    assertEquals(Collections.singleton("a"), set);
+  }
+
+  public void testCopyOf_nullArray() {
+    try {
+      copyOf((String[]) null);
+      fail();
+    } catch(NullPointerException expected) {
+    }
+  }
+
+  public void testCopyOf_arrayContainingOnlyNull() {
+    String[] array = new String[] { null };
+    try {
+      copyOf(array);
+      fail();
+    } catch (NullPointerException expected) {
+    }
+  }
+
+  public void testCopyOf_collection_empty() {
+    // "<String>" is required to work around a javac 1.5 bug.
+    Collection<String> c = MinimalCollection.<String>of();
+    Set<String> set = copyOf(c);
+    assertEquals(Collections.<String>emptySet(), set);
+    assertSame(of(), set);
+  }
+
+  public void testCopyOf_collection_oneElement() {
+    Collection<String> c = MinimalCollection.of("a");
+    Set<String> set = copyOf(c);
+    assertEquals(Collections.singleton("a"), set);
+  }
+
+  public void testCopyOf_collection_oneElementRepeated() {
+    Collection<String> c = MinimalCollection.of("a", "a", "a");
+    Set<String> set = copyOf(c);
+    assertEquals(Collections.singleton("a"), set);
+  }
+
+  public void testCopyOf_collection_general() {
+    Collection<String> c = MinimalCollection.of("a", "b", "a");
+    Set<String> set = copyOf(c);
+    assertEquals(2, set.size());
+    assertTrue(set.contains("a"));
+    assertTrue(set.contains("b"));
+  }
+
+  public void testCopyOf_collectionContainingNull() {
+    Collection<String> c = MinimalCollection.of("a", null, "b");
+    try {
+      copyOf(c);
+      fail();
+    } catch (NullPointerException expected) {
+    }
+  }
+
+  public void testCopyOf_iterator_empty() {
+    Iterator<String> iterator = Iterators.emptyIterator();
+    Set<String> set = copyOf(iterator);
+    assertEquals(Collections.<String>emptySet(), set);
+    assertSame(of(), set);
+  }
+
+  public void testCopyOf_iterator_oneElement() {
+    Iterator<String> iterator = Iterators.singletonIterator("a");
+    Set<String> set = copyOf(iterator);
+    assertEquals(Collections.singleton("a"), set);
+  }
+
+  public void testCopyOf_iterator_oneElementRepeated() {
+    Iterator<String> iterator = Iterators.forArray("a", "a", "a");
+    Set<String> set = copyOf(iterator);
+    assertEquals(Collections.singleton("a"), set);
+  }
+
+  public void testCopyOf_iterator_general() {
+    Iterator<String> iterator = Iterators.forArray("a", "b", "a");
+    Set<String> set = copyOf(iterator);
+    assertEquals(2, set.size());
+    assertTrue(set.contains("a"));
+    assertTrue(set.contains("b"));
+  }
+
+  public void testCopyOf_iteratorContainingNull() {
+    Iterator<String> c = Iterators.forArray("a", null, "b");
+    try {
+      copyOf(c);
+      fail();
+    } catch (NullPointerException expected) {
+    }
+  }
+
+  private static class CountingIterable implements Iterable<String> {
+    int count = 0;
+    @Override
+    public Iterator<String> iterator() {
+      count++;
+      return Iterators.forArray("a", "b", "a");
+    }
+  }
+
+  public void testCopyOf_plainIterable() {
+    CountingIterable iterable = new CountingIterable();
+    Set<String> set = copyOf(iterable);
+    assertEquals(2, set.size());
+    assertTrue(set.contains("a"));
+    assertTrue(set.contains("b"));
+  }
+
+  public void testCopyOf_plainIterable_iteratesOnce() {
+    CountingIterable iterable = new CountingIterable();
+    copyOf(iterable);
+    assertEquals(1, iterable.count);
+  }
+
+  public void testCopyOf_shortcut_empty() {
+    Collection<String> c = of();
+    assertEquals(Collections.<String>emptySet(), copyOf(c));
+    assertSame(c, copyOf(c));
+  }
+
+  public void testCopyOf_shortcut_singleton() {
+    Collection<String> c = of("a");
+    assertEquals(Collections.singleton("a"), copyOf(c));
+    assertSame(c, copyOf(c));
+  }
+
+  public void testCopyOf_shortcut_sameType() {
+    Collection<String> c = of("a", "b", "c");
+    assertSame(c, copyOf(c));
+  }
+
+  public void testToString() {
+    Set<String> set = of("a", "b", "c", "d", "e", "f", "g");
+    assertEquals("[a, b, c, d, e, f, g]", set.toString());
+  }
+
+  @GwtIncompatible("slow (~40s)")
+  public void testIterator_oneElement() {
+    new IteratorTester<String>(5, UNMODIFIABLE, Collections.singleton("a"),
+        IteratorTester.KnownOrder.KNOWN_ORDER) {
+      @Override protected Iterator<String> newTargetIterator() {
+        return of("a").iterator();
+      }
+    }.test();
+  }
+
+  @GwtIncompatible("slow (~30s)")
+  public void testIterator_general() {
+    new IteratorTester<String>(5, UNMODIFIABLE, asList("a", "b", "c"),
+        IteratorTester.KnownOrder.KNOWN_ORDER) {
+      @Override protected Iterator<String> newTargetIterator() {
+        return of("a", "b", "c").iterator();
+      }
+    }.test();
+  }
+
+  public void testContainsAll_sameType() {
+    Collection<String> c = of("a", "b", "c");
+    assertFalse(c.containsAll(of("a", "b", "c", "d")));
+    assertFalse(c.containsAll(of("a", "d")));
+    assertTrue(c.containsAll(of("a", "c")));
+    assertTrue(c.containsAll(of("a", "b", "c")));
+  }
+
+  public void testEquals_sameType() {
+    Collection<String> c = of("a", "b", "c");
+    assertTrue(c.equals(of("a", "b", "c")));
+    assertFalse(c.equals(of("a", "b", "d")));
+  }
+
+  abstract <E extends Comparable<E>> ImmutableSet.Builder<E> builder();
+
+  public void testBuilderWithNonDuplicateElements() {
+    ImmutableSet<String> set = this.<String>builder()
+        .add("a")
+        .add("b", "c")
+        .add("d", "e", "f")
+        .add("g", "h", "i", "j")
+        .build();
+    ASSERT.that(set).hasContentsInOrder(
+        "a", "b", "c", "d", "e", "f", "g", "h", "i", "j");
+  }
+
+  public void testBuilderWithDuplicateElements() {
+    ImmutableSet<String> set = this.<String>builder()
+        .add("a")
+        .add("a", "a")
+        .add("a", "a", "a")
+        .add("a", "a", "a", "a")
+        .build();
+    assertTrue(set.contains("a"));
+    assertFalse(set.contains("b"));
+    assertEquals(1, set.size());
+  }
+
+  public void testBuilderAddAll() {
+    List<String> a = asList("a", "b", "c");
+    List<String> b = asList("c", "d", "e");
+    ImmutableSet<String> set = this.<String>builder()
+        .addAll(a)
+        .addAll(b)
+        .build();
+    ASSERT.that(set).hasContentsInOrder("a", "b", "c", "d", "e");
+  }
+
+  static final int LAST_COLOR_ADDED = 0x00BFFF;
+
+  public void testComplexBuilder() {
+    List<Integer> colorElem = asList(0x00, 0x33, 0x66, 0x99, 0xCC, 0xFF);
+    // javac won't compile this without "this.<Integer>"
+    ImmutableSet.Builder<Integer> webSafeColorsBuilder
+        = this.<Integer>builder();
+    for (Integer red : colorElem) {
+      for (Integer green : colorElem) {
+        for (Integer blue : colorElem) {
+          webSafeColorsBuilder.add((red << 16) + (green << 8) + blue);
+        }
+      }
+    }
+    ImmutableSet<Integer> webSafeColors = webSafeColorsBuilder.build();
+    assertEquals(216, webSafeColors.size());
+    Integer[] webSafeColorArray =
+        webSafeColors.toArray(new Integer[webSafeColors.size()]);
+    assertEquals(0x000000, (int) webSafeColorArray[0]);
+    assertEquals(0x000033, (int) webSafeColorArray[1]);
+    assertEquals(0x000066, (int) webSafeColorArray[2]);
+    assertEquals(0x003300, (int) webSafeColorArray[6]);
+    assertEquals(0x330000, (int) webSafeColorArray[36]);
+    ImmutableSet<Integer> addedColor
+        = webSafeColorsBuilder.add(LAST_COLOR_ADDED).build();
+    assertEquals(
+        "Modifying the builder should not have changed any already built sets",
+        216, webSafeColors.size());
+    assertEquals("the new array should be one bigger than webSafeColors",
+        217, addedColor.size());
+    Integer[] appendColorArray =
+        addedColor.toArray(new Integer[addedColor.size()]);
+    assertEquals(
+        getComplexBuilderSetLastElement(), (int) appendColorArray[216]);
+  }
+
+  abstract int getComplexBuilderSetLastElement();
+
+  public void testBuilderAddHandlesNullsCorrectly() {
+    ImmutableSet.Builder<String> builder = this.<String>builder();
+    try {
+      builder.add((String) null);
+      fail("expected NullPointerException");  // COV_NF_LINE
+    } catch (NullPointerException expected) {
+    }
+
+    builder = this.<String>builder();
+    try {
+      builder.add((String[]) null);
+      fail("expected NullPointerException");  // COV_NF_LINE
+    } catch (NullPointerException expected) {
+    }
+
+    builder = this.<String>builder();
+    try {
+      builder.add("a", (String) null);
+      fail("expected NullPointerException");  // COV_NF_LINE
+    } catch (NullPointerException expected) {
+    }
+
+    builder = this.<String>builder();
+    try {
+      builder.add("a", "b", (String) null);
+      fail("expected NullPointerException");  // COV_NF_LINE
+    } catch (NullPointerException expected) {
+    }
+
+    builder = this.<String>builder();
+    try {
+      builder.add("a", "b", "c", null);
+      fail("expected NullPointerException");  // COV_NF_LINE
+    } catch (NullPointerException expected) {
+    }
+
+    builder = this.<String>builder();
+    try {
+      builder.add("a", "b", null, "c");
+      fail("expected NullPointerException");  // COV_NF_LINE
+    } catch (NullPointerException expected) {
+    }
+  }
+
+  public void testBuilderAddAllHandlesNullsCorrectly() {
+    ImmutableSet.Builder<String> builder = this.<String>builder();
+    try {
+      builder.addAll((Iterable<String>) null);
+      fail("expected NullPointerException");  // COV_NF_LINE
+    } catch (NullPointerException expected) {
+    }
+
+    try {
+      builder.addAll((Iterator<String>) null);
+      fail("expected NullPointerException");  // COV_NF_LINE
+    } catch (NullPointerException expected) {
+    }
+
+    builder = this.<String>builder();
+    List<String> listWithNulls = asList("a", null, "b");
+    try {
+      builder.addAll(listWithNulls);
+      fail("expected NullPointerException");  // COV_NF_LINE
+    } catch (NullPointerException expected) {
+    }
+
+    Iterable<String> iterableWithNulls = MinimalIterable.of("a", null, "b");
+    try {
+      builder.addAll(iterableWithNulls);
+      fail("expected NullPointerException");  // COV_NF_LINE
+    } catch (NullPointerException expected) {
+    }
+  }
+
+  /**
+   * Verify thread safety by using a collection whose size() may be inconsistent
+   * with the actual number of elements.  Tests using this method might fail in
+   * GWT because the GWT emulations might count on size() during copy.  It is
+   * safe to do so in GWT because javascript is single-threaded.
+   */
+  // TODO(benyu): turn this into a test once all copyOf(Collection) are
+  // thread-safe
+  @GwtIncompatible("GWT is single threaded")
+  void verifyThreadSafe() {
+    List<String> sample = Lists.newArrayList("a", "b", "c");
+    for (int delta : new int[] {-1, 0, 1}) {
+      for (int i = 0; i < sample.size(); i++) {
+        Collection<String> misleading = Helpers.misleadingSizeCollection(delta);
+        List<String> expected = sample.subList(0, i);
+        misleading.addAll(expected);
+        assertEquals("delta: " + delta + " sample size: " + i,
+            Sets.newHashSet(expected), copyOf(misleading));
+      }
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/AbstractImmutableTableTest.java b/guava-tests/test/com/google/common/collect/AbstractImmutableTableTest.java
new file mode 100644
index 0000000..a456c6a
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/AbstractImmutableTableTest.java
@@ -0,0 +1,92 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import junit.framework.TestCase;
+
+/**
+ * Tests {@link ImmutableTable}
+ *
+ * @author gak@google.com (Gregory Kick)
+ */
+public abstract class AbstractImmutableTableTest extends TestCase {
+
+  abstract Iterable<ImmutableTable<Character, Integer, String>>
+      getTestInstances();
+
+  public final void testClear() {
+    for(ImmutableTable<Character, Integer, String> testInstance :
+        getTestInstances()) {
+      try {
+        testInstance.clear();
+        fail();
+      } catch (UnsupportedOperationException e) {
+        // success
+      }
+    }
+  }
+
+  public final void testPut() {
+    for(ImmutableTable<Character, Integer, String> testInstance :
+        getTestInstances()) {
+      try {
+        testInstance.put('a', 1, "blah");
+        fail();
+      } catch (UnsupportedOperationException e) {
+        // success
+      }
+    }
+  }
+
+  public final void testPutAll() {
+    for(ImmutableTable<Character, Integer, String> testInstance :
+        getTestInstances()) {
+      try {
+        testInstance.putAll(ImmutableTable.of('a', 1, "blah"));
+        fail();
+      } catch (UnsupportedOperationException e) {
+        // success
+      }
+    }
+  }
+
+  public final void testRemove() {
+    for(ImmutableTable<Character, Integer, String> testInstance :
+        getTestInstances()) {
+      try {
+        testInstance.remove('a', 1);
+        fail();
+      } catch (UnsupportedOperationException e) {
+        // success
+      }
+    }
+  }
+
+  public final void testConsistentToString() {
+    for(ImmutableTable<Character, Integer, String> testInstance :
+        getTestInstances()) {
+      assertEquals(testInstance.rowMap().toString(), testInstance.toString());
+    }
+  }
+
+  public final void testConsistentHashCode() {
+    for(ImmutableTable<Character, Integer, String> testInstance :
+        getTestInstances()) {
+      assertEquals(testInstance.cellSet().hashCode(), testInstance.hashCode());
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/AbstractIteratorTest.java b/guava-tests/test/com/google/common/collect/AbstractIteratorTest.java
new file mode 100644
index 0000000..a1fe7cd
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/AbstractIteratorTest.java
@@ -0,0 +1,280 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import junit.framework.TestCase;
+
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+
+/**
+ * Unit test for {@code AbstractIterator}.
+ *
+ * @author Kevin Bourrillion
+ */
+@SuppressWarnings("serial") // No serialization is used in this test
+@GwtCompatible
+// TODO(cpovirk): why is this slow (>1m/test) under GWT when fully optimized?
+public class AbstractIteratorTest extends TestCase {
+
+  public void testDefaultBehaviorOfNextAndHasNext() {
+
+    // This sample AbstractIterator returns 0 on the first call, 1 on the
+    // second, then signals that it's reached the end of the data
+    Iterator<Integer> iter = new AbstractIterator<Integer>() {
+      private int rep;
+      @Override public Integer computeNext() {
+        switch (rep++) {
+          case 0:
+            return 0;
+          case 1:
+            return 1;
+          case 2:
+            return endOfData();
+          default:
+            fail("Should not have been invoked again");
+            return null;
+        }
+      }
+    };
+
+    assertTrue(iter.hasNext());
+    assertEquals(0, (int) iter.next());
+
+    // verify idempotence of hasNext()
+    assertTrue(iter.hasNext());
+    assertTrue(iter.hasNext());
+    assertTrue(iter.hasNext());
+    assertEquals(1, (int) iter.next());
+
+    assertFalse(iter.hasNext());
+
+    // Make sure computeNext() doesn't get invoked again
+    assertFalse(iter.hasNext());
+
+    try {
+      iter.next();
+      fail("no exception thrown");
+    } catch (NoSuchElementException expected) {
+    }
+  }
+
+  public void testDefaultBehaviorOfPeek() {
+    /*
+     * This sample AbstractIterator returns 0 on the first call, 1 on the
+     * second, then signals that it's reached the end of the data
+     */
+    AbstractIterator<Integer> iter = new AbstractIterator<Integer>() {
+      private int rep;
+      @Override public Integer computeNext() {
+        switch (rep++) {
+          case 0:
+            return 0;
+          case 1:
+            return 1;
+          case 2:
+            return endOfData();
+          default:
+            fail("Should not have been invoked again");
+            return null;
+        }
+      }
+    };
+
+    assertEquals(0, (int) iter.peek());
+    assertEquals(0, (int) iter.peek());
+    assertTrue(iter.hasNext());
+    assertEquals(0, (int) iter.peek());
+    assertEquals(0, (int) iter.next());
+
+    assertEquals(1, (int) iter.peek());
+    assertEquals(1, (int) iter.next());
+
+    try {
+      iter.peek();
+      fail("peek() should throw NoSuchElementException at end");
+    } catch (NoSuchElementException expected) {
+    }
+
+    try {
+      iter.peek();
+      fail("peek() should continue to throw NoSuchElementException at end");
+    } catch (NoSuchElementException expected) {
+    }
+
+    try {
+      iter.next();
+      fail("next() should throw NoSuchElementException as usual");
+    } catch (NoSuchElementException expected) {
+    }
+
+    try {
+      iter.peek();
+      fail("peek() should still throw NoSuchElementException after next()");
+    } catch (NoSuchElementException expected) {
+    }
+  }
+
+  public void testDefaultBehaviorOfPeekForEmptyIteration() {
+
+    AbstractIterator<Integer> empty = new AbstractIterator<Integer>() {
+      private boolean alreadyCalledEndOfData;
+      @Override public Integer computeNext() {
+        if (alreadyCalledEndOfData) {
+          fail("Should not have been invoked again");
+        }
+        alreadyCalledEndOfData = true;
+        return endOfData();
+      }
+    };
+
+    try {
+      empty.peek();
+      fail("peek() should throw NoSuchElementException at end");
+    } catch (NoSuchElementException expected) {
+    }
+
+    try {
+      empty.peek();
+      fail("peek() should continue to throw NoSuchElementException at end");
+    } catch (NoSuchElementException expected) {
+    }
+  }
+
+  public void testSneakyThrow() throws Exception {
+    Iterator<Integer> iter = new AbstractIterator<Integer>() {
+      boolean haveBeenCalled;
+      @Override public Integer computeNext() {
+        if (haveBeenCalled) {
+          fail("Should not have been called again");
+        } else {
+          haveBeenCalled = true;
+          sneakyThrow(new SomeCheckedException());
+        }
+        return null; // never reached
+      }
+    };
+
+    // The first time, the sneakily-thrown exception comes out
+    try {
+      iter.hasNext();
+      fail("No exception thrown");
+    } catch (Exception e) {
+      if (!(e instanceof SomeCheckedException)) {
+        throw e;
+      }
+    }
+
+    // But the second time, AbstractIterator itself throws an ISE
+    try {
+      iter.hasNext();
+      fail("No exception thrown");
+    } catch (IllegalStateException expected) {
+    }
+  }
+
+  public void testException() {
+    final SomeUncheckedException exception = new SomeUncheckedException();
+    Iterator<Integer> iter = new AbstractIterator<Integer>() {
+      @Override public Integer computeNext() {
+        throw exception;
+      }
+    };
+
+    // It should pass through untouched
+    try {
+      iter.hasNext();
+      fail("No exception thrown");
+    } catch (SomeUncheckedException e) {
+      assertSame(exception, e);
+    }
+  }
+
+  public void testExceptionAfterEndOfData() {
+    Iterator<Integer> iter = new AbstractIterator<Integer>() {
+      @Override public Integer computeNext() {
+        endOfData();
+        throw new SomeUncheckedException();
+      }
+    };
+    try {
+      iter.hasNext();
+      fail("No exception thrown");
+    } catch (SomeUncheckedException expected) {
+    }
+  }
+
+  public void testCantRemove() {
+    Iterator<Integer> iter = new AbstractIterator<Integer>() {
+      boolean haveBeenCalled;
+      @Override public Integer computeNext() {
+        if (haveBeenCalled) {
+          endOfData();
+        }
+        haveBeenCalled = true;
+        return 0;
+      }
+    };
+
+    assertEquals(0, (int) iter.next());
+
+    try {
+      iter.remove();
+      fail("No exception thrown");
+    } catch (UnsupportedOperationException expected) {
+    }
+  }
+
+  public void testReentrantHasNext() {
+    Iterator<Integer> iter = new AbstractIterator<Integer>() {
+      @Override protected Integer computeNext() {
+        hasNext();
+        return null;
+      }
+    };
+    try {
+      iter.hasNext();
+      fail();
+    } catch (IllegalStateException expected) {
+    }
+  }
+
+  // Technically we should test other reentrant scenarios (9 combinations of
+  // hasNext/next/peek), but we'll cop out for now, knowing that peek() and
+  // next() both start by invoking hasNext() anyway.
+
+  /**
+   * Throws a undeclared checked exception.
+   */
+  private static void sneakyThrow(Throwable t) {
+    class SneakyThrower<T extends Throwable> {
+      @SuppressWarnings("unchecked") // not really safe, but that's the point
+      void throwIt(Throwable t) throws T {
+        throw (T) t;
+      }
+    }
+    new SneakyThrower<Error>().throwIt(t);
+  }
+
+  private static class SomeCheckedException extends Exception {
+  }
+
+  private static class SomeUncheckedException extends RuntimeException {
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/AbstractLinkedIteratorTest.java b/guava-tests/test/com/google/common/collect/AbstractLinkedIteratorTest.java
new file mode 100644
index 0000000..b51f29f
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/AbstractLinkedIteratorTest.java
@@ -0,0 +1,132 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.collect.testing.IteratorFeature.UNMODIFIABLE;
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.collect.testing.IteratorTester;
+
+import junit.framework.AssertionFailedError;
+import junit.framework.TestCase;
+
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+
+/** Tests for {@link AbstractLinkedIterator}. */
+@GwtCompatible(emulated = true)
+public class AbstractLinkedIteratorTest extends TestCase {
+  @GwtIncompatible("Too slow")
+  public void testDoublerExhaustive() {
+    new IteratorTester<Integer>(3, UNMODIFIABLE, ImmutableList.of(1, 2),
+        IteratorTester.KnownOrder.KNOWN_ORDER) {
+      @Override
+      protected Iterator<Integer> newTargetIterator() {
+        return newDoubler(1, 2);
+      }
+    }.test();
+  }
+
+  public void testDoubler() {
+    Iterable<Integer> doubled = new Iterable<Integer>() {
+      @Override
+      public Iterator<Integer> iterator() {
+        return newDoubler(2, 32);
+      }
+    };
+    ASSERT.that(doubled).hasContentsInOrder(2, 4, 8, 16, 32);
+  }
+
+  public void testSampleCode() {
+    Iterable<Integer> actual = new Iterable<Integer>() {
+      @Override
+      public Iterator<Integer> iterator() {
+        Iterator<Integer> powersOfTwo = new AbstractLinkedIterator<Integer>(1) {
+          protected Integer computeNext(Integer previous) {
+            return (previous == 1 << 30) ? null : previous * 2;
+          }
+        };
+        return powersOfTwo;
+      }
+    };
+    ASSERT.that(actual).hasContentsInOrder(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096,
+        8192, 16384, 32768, 65536, 131072, 262144, 524288, 1048576, 2097152, 4194304, 8388608,
+        16777216, 33554432, 67108864, 134217728, 268435456, 536870912, 1073741824);
+  }
+
+  public void testEmpty() {
+    Iterator<Object> empty = newEmpty();
+    assertFalse(empty.hasNext());
+    try {
+      empty.next();
+      fail();
+    } catch (NoSuchElementException expected) {
+    }
+    try {
+      empty.remove();
+      fail();
+    } catch (UnsupportedOperationException expected) {
+    }
+  }
+
+  public void testBroken() {
+    Iterator<Object> broken = newBroken();
+    assertTrue(broken.hasNext());
+    // We can't retrieve even the known first element:
+    try {
+      broken.next();
+      fail();
+    } catch (MyException expected) {
+    }
+    try {
+      broken.next();
+      fail();
+    } catch (MyException expected) {
+    }
+  }
+
+  private static Iterator<Integer> newDoubler(int first, final int last) {
+    return new AbstractLinkedIterator<Integer>(first) {
+      @Override
+      protected Integer computeNext(Integer previous) {
+        return (previous == last) ? null : previous * 2;
+      }
+    };
+  }
+
+  private static <T> Iterator<T> newEmpty() {
+    return new AbstractLinkedIterator<T>(null) {
+      @Override
+      protected T computeNext(T previous) {
+        throw new AssertionFailedError();
+      }
+    };
+  }
+
+  private static Iterator<Object> newBroken() {
+    return new AbstractLinkedIterator<Object>("UNUSED") {
+      @Override
+      protected Object computeNext(Object previous) {
+        throw new MyException();
+      }
+    };
+  }
+
+  private static class MyException extends RuntimeException {}
+}
diff --git a/guava-tests/test/com/google/common/collect/AbstractListMultimapTest.java b/guava-tests/test/com/google/common/collect/AbstractListMultimapTest.java
new file mode 100644
index 0000000..1741af6
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/AbstractListMultimapTest.java
@@ -0,0 +1,522 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.collect.testing.IteratorFeature.MODIFIABLE;
+import static java.util.Arrays.asList;
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.collect.testing.ListIteratorTester;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Map;
+
+/**
+ * Tests for {@code ListMultimap} implementations.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible(emulated = true)
+public abstract class AbstractListMultimapTest extends AbstractMultimapTest {
+
+  @Override protected abstract ListMultimap<String, Integer> create();
+
+  /**
+   * Test adding duplicate key-value pairs to multimap.
+   */
+  public void testDuplicates() {
+    Multimap<String, Integer> multimap = create();
+    multimap.put("foo", 1);
+    multimap.put("foo", 3);
+    multimap.put("bar", 3);
+    multimap.put("foo", 1);
+    assertEquals(4, multimap.size());
+    assertTrue(multimap.containsEntry("foo", 1));
+    multimap.remove("foo", 1);
+    assertEquals(3, multimap.size());
+    assertTrue(multimap.containsEntry("foo", 1));
+  }
+
+  /**
+   * Test returned boolean when adding duplicate key-value pairs to multimap.
+   */
+  public void testPutReturn() {
+    Multimap<String, Integer> multimap = create();
+    assertTrue(multimap.put("foo", 1));
+    assertTrue(multimap.put("foo", 1));
+    assertTrue(multimap.put("foo", 3));
+    assertTrue(multimap.put("bar", 5));
+  }
+
+  public void testPutAllReturn_existingElements() {
+    Multimap<String, Integer> multimap = create();
+    assertTrue(multimap.putAll("foo", asList(1, 2, 3)));
+    assertTrue(multimap.put("foo", 1));
+    assertTrue(multimap.putAll("foo", asList(1, 2, 3)));
+    assertTrue(multimap.putAll("foo", asList(1, 3)));
+
+    Multimap<String, Integer> other = create();
+    other.putAll("foo", asList(1, 2));
+    assertTrue(multimap.putAll(other));
+
+    other.putAll("bar", asList(1, 2));
+    assertTrue(multimap.putAll(other));
+    assertTrue(other.putAll(multimap));
+  }
+
+  /**
+   * Confirm that get() returns a collection equal to a List.
+   */
+  public void testGetEquals() {
+    Multimap<String, Integer> multimap = create();
+    multimap.put("foo", 1);
+    multimap.put("foo", 3);
+    assertEquals(ImmutableList.of(1, 3), multimap.get("foo"));
+  }
+
+  public void testAsMapEquals() {
+    Multimap<String, Integer> multimap = getMultimap();
+    multimap.put("foo", 1);
+    multimap.put("foo", nullValue());
+    multimap.put(nullKey(), 3);
+    Map<String, Collection<Integer>> map = multimap.asMap();
+
+    Map<String, Collection<Integer>> equalMap = Maps.newHashMap();
+    equalMap.put("foo", asList(1, nullValue()));
+    equalMap.put(nullKey(), asList(3));
+    assertEquals(map, equalMap);
+    assertEquals(equalMap, map);
+    assertEquals(equalMap.hashCode(), multimap.hashCode());
+
+    Map<String, Collection<Integer>> unequalMap = Maps.newHashMap();
+    equalMap.put("foo", asList(3, nullValue()));
+    equalMap.put(nullKey(), asList(1));
+    assertFalse(map.equals(unequalMap));
+    assertFalse(unequalMap.equals(map));
+  }
+
+  /**
+   * Confirm that asMap().entrySet() returns values equal to a List.
+   */
+  public void testAsMapEntriesEquals() {
+    Multimap<String, Integer> multimap = create();
+    multimap.put("foo", 1);
+    multimap.put("foo", 3);
+    Iterator<Map.Entry<String, Collection<Integer>>> i =
+        multimap.asMap().entrySet().iterator();
+    Map.Entry<String, Collection<Integer>> entry = i.next();
+    assertEquals("foo", entry.getKey());
+    assertEquals(ImmutableList.of(1, 3), entry.getValue());
+    assertFalse(i.hasNext());
+  }
+
+  public void testAsMapValuesRemove() {
+    Multimap<String, Integer> multimap = create();
+    multimap.put("foo", 1);
+    multimap.put("foo", 3);
+    multimap.put("bar", 3);
+    Collection<Collection<Integer>> asMapValues = multimap.asMap().values();
+    assertFalse(asMapValues.remove(asList(3, 1)));
+    assertEquals(3, multimap.size());
+    assertTrue(asMapValues.remove(asList(1, 3)));
+    assertEquals(1, multimap.size());
+  }
+
+  /**
+   * Test multimap.equals() for multimaps with different insertion orderings.
+   */
+  public void testEqualsOrdering() {
+    Multimap<String, Integer> multimap = create();
+    multimap.put("foo", 1);
+    multimap.put("foo", 3);
+    multimap.put("bar", 3);
+    Multimap<String, Integer> multimap2 = create();
+    multimap2.put("foo", 3);
+    multimap2.put("foo", 1);
+    multimap2.put("bar", 3);
+    assertFalse(multimap.equals(multimap2));
+  }
+
+  /**
+   * Test the ordering of the values returned by multimap.get().
+   */
+  public void testPutGetOrdering() {
+    Multimap<String, Integer> multimap = create();
+    multimap.put("foo", 1);
+    multimap.put("foo", 3);
+    multimap.put("bar", 3);
+    Iterator<Integer> values = multimap.get("foo").iterator();
+    assertEquals(Integer.valueOf(1), values.next());
+    assertEquals(Integer.valueOf(3), values.next());
+  }
+
+  /**
+   * Test List-specific methods on List returned by get().
+   */
+  public void testListMethods() {
+    ListMultimap<String, Integer> multimap = create();
+    multimap.put("foo", 1);
+    multimap.put("foo", 3);
+    multimap.put("foo", 5);
+    List<Integer> list = multimap.get("foo");
+
+    list.add(1, 2);
+    assertEquals(4, multimap.size());
+    ASSERT.that(multimap.get("foo")).hasContentsInOrder(1, 2, 3, 5);
+
+    list.addAll(3, asList(4, 8));
+    assertEquals(6, multimap.size());
+    ASSERT.that(multimap.get("foo")).hasContentsInOrder(1, 2, 3, 4, 8, 5);
+
+    assertEquals(8, list.get(4).intValue());
+    assertEquals(4, list.indexOf(8));
+    assertEquals(4, list.lastIndexOf(8));
+
+    list.remove(4);
+    assertEquals(5, multimap.size());
+    ASSERT.that(multimap.get("foo")).hasContentsInOrder(1, 2, 3, 4, 5);
+
+    list.set(4, 10);
+    assertEquals(5, multimap.size());
+    ASSERT.that(multimap.get("foo")).hasContentsInOrder(1, 2, 3, 4, 10);
+  }
+  
+  public void testListMethodsIncludingSublist() {
+    ListMultimap<String, Integer> multimap = create();
+    multimap.put("foo", 1);
+    multimap.put("foo", 2);
+    multimap.put("foo", 3);
+    multimap.put("foo", 4);
+    multimap.put("foo", 10);
+    List<Integer> list = multimap.get("foo");
+    
+    List<Integer> sublist = list.subList(1, 4);
+    ASSERT.that(sublist).hasContentsInOrder(2, 3, 4);
+    list.set(3, 6);
+    ASSERT.that(multimap.get("foo")).hasContentsInOrder(1, 2, 3, 6, 10);
+  }
+
+  /**
+   * Test sublist of List returned by get() after the original list is updated.
+   */
+  public void testSublistAfterListUpdate() {
+    ListMultimap<String, Integer> multimap = create();
+    multimap.put("foo", 1);
+    multimap.put("foo", 2);
+    multimap.put("foo", 3);
+    multimap.put("foo", 4);
+    multimap.put("foo", 5);
+
+    List<Integer> list = multimap.get("foo");
+    List<Integer> sublist = list.subList(1, 4);
+    ASSERT.that(sublist).hasContentsInOrder(2, 3, 4);
+    list.set(3, 6);
+    ASSERT.that(multimap.get("foo")).hasContentsInOrder(1, 2, 3, 6, 5);
+    ASSERT.that(sublist).hasContentsInOrder(2, 3, 6);
+  }
+
+  /**
+   * Test ListIterator methods that don't change the multimap.
+   */
+  public void testListIteratorNavigate() {
+    ListMultimap<String, Integer> multimap = create();
+    multimap.put("foo", 1);
+    multimap.put("foo", 3);
+    List<Integer> list = multimap.get("foo");
+    ListIterator<Integer> iterator = list.listIterator();
+
+    assertFalse(iterator.hasPrevious());
+    assertTrue(iterator.hasNext());
+    assertEquals(0, iterator.nextIndex());
+    assertEquals(-1, iterator.previousIndex());
+
+    assertEquals(1, iterator.next().intValue());
+    assertEquals(3, iterator.next().intValue());
+    assertTrue(iterator.hasPrevious());
+    assertFalse(iterator.hasNext());
+
+    assertEquals(3, iterator.previous().intValue());
+    assertEquals(1, iterator.previous().intValue());
+  }
+
+  /**
+   * Test ListIterator methods that change the multimap.
+   */
+  public void testListIteratorUpdate() {
+    ListMultimap<String, Integer> multimap = create();
+    multimap.put("foo", 1);
+    multimap.put("foo", 3);
+    multimap.put("foo", 5);
+    List<Integer> list = multimap.get("foo");
+    ListIterator<Integer> iterator = list.listIterator();
+
+    assertEquals(1, iterator.next().intValue());
+    iterator.set(2);
+    ASSERT.that(multimap.get("foo")).hasContentsInOrder(2, 3, 5);
+
+    assertEquals(3, iterator.next().intValue());
+    iterator.remove();
+    ASSERT.that(multimap.get("foo")).hasContentsInOrder(2, 5);
+  }
+
+  /**
+   * Test calling toString() on the multimap, which does not have a
+   * deterministic iteration order for keys but does for values.
+   */
+  public void testToString() {
+    String s = createSample().toString();
+    assertTrue(s.equals("{foo=[3, -1, 2, 4, 1], bar=[1, 2, 3, 1]}")
+        || s.equals("{bar=[1, 2, 3, 1], foo=[3, -1, 2, 4, 1]}"));
+  }
+
+  /**
+   * Test calling set() on a sublist.
+   */
+  public void testSublistSet() {
+    ListMultimap<String, Integer> multimap = create();
+    multimap.putAll("foo", asList(1, 2, 3, 4, 5));
+    List<Integer> list = multimap.get("foo");
+    ASSERT.that(multimap.get("foo")).hasContentsInOrder(1, 2, 3, 4, 5);
+    List<Integer> sublist = list.subList(1, 4);
+    ASSERT.that(sublist).hasContentsInOrder(2, 3, 4);
+
+    sublist.set(1, 6);
+    ASSERT.that(multimap.get("foo")).hasContentsInOrder(1, 2, 6, 4, 5);
+  }
+
+  /**
+   * Test removing elements from a sublist.
+   */
+  public void testSublistRemove() {
+    ListMultimap<String, Integer> multimap = create();
+    multimap.putAll("foo", asList(1, 2, 3, 4, 5));
+    List<Integer> list = multimap.get("foo");
+    ASSERT.that(multimap.get("foo")).hasContentsInOrder(1, 2, 3, 4, 5);
+    List<Integer> sublist = list.subList(1, 4);
+    ASSERT.that(sublist).hasContentsInOrder(2, 3, 4);
+
+    sublist.remove(1);
+    assertEquals(4, multimap.size());
+    ASSERT.that(multimap.get("foo")).hasContentsInOrder(1, 2, 4, 5);
+
+    sublist.removeAll(Collections.singleton(4));
+    assertEquals(3, multimap.size());
+    ASSERT.that(multimap.get("foo")).hasContentsInOrder(1, 2, 5);
+
+    sublist.remove(0);
+    assertEquals(2, multimap.size());
+    ASSERT.that(multimap.get("foo")).hasContentsInOrder(1, 5);
+  }
+
+  /**
+   * Test adding elements to a sublist.
+   */
+  public void testSublistAdd() {
+    ListMultimap<String, Integer> multimap = create();
+    multimap.putAll("foo", asList(1, 2, 3, 4, 5));
+    List<Integer> list = multimap.get("foo");
+    ASSERT.that(multimap.get("foo")).hasContentsInOrder(1, 2, 3, 4, 5);
+    List<Integer> sublist = list.subList(1, 4);
+    ASSERT.that(sublist).hasContentsInOrder(2, 3, 4);
+
+    sublist.add(6);
+    assertEquals(6, multimap.size());
+    ASSERT.that(multimap.get("foo")).hasContentsInOrder(1, 2, 3, 4, 6, 5);
+
+    sublist.add(0, 7);
+    assertEquals(7, multimap.size());
+    ASSERT.that(multimap.get("foo")).hasContentsInOrder(1, 7, 2, 3, 4, 6, 5);
+  }
+
+  /**
+   * Test clearing a sublist.
+   */
+  public void testSublistClear() {
+    ListMultimap<String, Integer> multimap = create();
+    multimap.putAll("foo", asList(1, 2, 3, 4, 5));
+    List<Integer> list = multimap.get("foo");
+    ASSERT.that(multimap.get("foo")).hasContentsInOrder(1, 2, 3, 4, 5);
+    List<Integer> sublist = list.subList(1, 4);
+    ASSERT.that(sublist).hasContentsInOrder(2, 3, 4);
+
+    sublist.clear();
+    assertEquals(2, multimap.size());
+    ASSERT.that(multimap.get("foo")).hasContentsInOrder(1, 5);
+  }
+
+  /**
+   * Test adding elements to an empty sublist with an empty ancestor.
+   */
+  public void testSublistAddToEmpty() {
+    ListMultimap<String, Integer> multimap = create();
+    multimap.putAll("foo", asList(1, 2, 3, 4, 5));
+    List<Integer> list = multimap.get("foo");
+    ASSERT.that(multimap.get("foo")).hasContentsInOrder(1, 2, 3, 4, 5);
+    List<Integer> sublist = list.subList(0, 5);
+    ASSERT.that(sublist).hasContentsInOrder(1, 2, 3, 4, 5);
+
+    sublist.retainAll(Collections.EMPTY_LIST);
+    assertTrue(multimap.isEmpty());
+
+    sublist.add(6);
+    assertEquals(1, multimap.size());
+    assertTrue(multimap.containsEntry("foo", 6));
+  }
+
+  /**
+   * Test updates through a list iterator retrieved by
+   * multimap.get(key).listIterator(index).
+   */
+  public void testListIteratorIndexUpdate() {
+    ListMultimap<String, Integer> multimap = create();
+    multimap.putAll("foo", asList(1, 2, 3, 4, 5));
+    ListIterator<Integer> iterator = multimap.get("foo").listIterator(1);
+
+    assertEquals(2, iterator.next().intValue());
+    iterator.set(6);
+    ASSERT.that(multimap.get("foo")).hasContentsInOrder(1, 6, 3, 4, 5);
+
+    assertTrue(iterator.hasNext());
+    assertEquals(3, iterator.next().intValue());
+    iterator.remove();
+    ASSERT.that(multimap.get("foo")).hasContentsInOrder(1, 6, 4, 5);
+    assertEquals(4, multimap.size());
+  }
+
+  @GwtIncompatible("unreasonable slow")
+  public void testGetIteration() {
+    List<Integer> addItems = ImmutableList.of(99, 88, 77);
+
+    for (final int startIndex : new int[] {0, 3, 5}) {
+      new ListIteratorTester<Integer>(3, addItems, MODIFIABLE,
+          Lists.newArrayList(2, 3, 4, 7, 8), startIndex) {
+        private ListMultimap<String, Integer> multimap;
+
+        @Override protected ListIterator<Integer> newTargetIterator() {
+          multimap = create();
+          multimap.put("bar", 1);
+          multimap.putAll("foo", asList(2, 3, 4));
+          multimap.putAll("bar", asList(5, 6));
+          multimap.putAll("foo", asList(7, 8));
+          return multimap.get("foo").listIterator(startIndex);
+        }
+
+        @Override protected void verify(List<Integer> elements) {
+          assertEquals(elements, multimap.get("foo"));
+        }
+      }.test();
+    }
+  }
+
+  public void testListGetSet() {
+    ListMultimap<String, Integer> map = create();
+    map.put("bar", 1);
+    map.get("bar").set(0, 2);
+    assertEquals("{bar=[2]}", map.toString());
+    assertEquals("[bar=2]", map.entries().toString());
+  }
+
+  public void testListPutAllIterable() {
+    Multimap<String, Integer> map = create();
+    map.putAll("foo", asList(1, 2));
+    assertEquals("{foo=[1, 2]}", map.toString());
+    assertEquals("[foo=1, foo=2]", map.entries().toString());
+  }
+
+  public void testListRemoveAll() {
+    Multimap<String, Integer> map = create();
+    map.put("bar", 1);
+    map.put("foo", 2);
+    map.put("bar", 3);
+    map.put("bar", 4);
+    map.removeAll("foo");
+    assertEquals("[bar=1, bar=3, bar=4]", map.entries().toString());
+    assertEquals("{bar=[1, 3, 4]}", map.toString());
+    map.removeAll("bar");
+    assertEquals("[]", map.entries().toString());
+    assertEquals("{}", map.toString());
+  }
+
+  public void testListEquals() {
+    Multimap<String, Integer> map1 = create();
+    map1.put("bar", 1);
+    map1.put("foo", 2);
+    map1.put("bar", 3);
+    Multimap<String, Integer> map2 = ArrayListMultimap.create();
+    map2.putAll(map1);
+    assertTrue(map1.equals(map2));
+    assertTrue(map2.equals(map1));
+    assertFalse(map1.equals(null));
+    assertFalse(map1.equals(new Object()));
+  }
+
+  public void testListHashCode() {
+    Multimap<String, Integer> map1 = create();
+    map1.put("bar", 1);
+    map1.put("foo", 2);
+    map1.put("bar", 3);
+    Multimap<String, Integer> map2 = ArrayListMultimap.create();
+    map2.putAll(map1);
+    assertEquals(map1.hashCode(), map2.hashCode());
+  }
+
+  public void testListAddIndex() {
+    ListMultimap<String, Integer> multimap = create();
+    multimap.put("bar", 11);
+    multimap.put("bar", 12);
+    multimap.get("bar").add(0, 13);
+    ASSERT.that(multimap.get("bar")).hasContentsInOrder(13, 11, 12);
+  }
+
+  /**
+   * According to the AbstractCollection.retainAll() implementation,
+   * {@code A.retainAll(B)} should keep all occurrences of each object in B,
+   * so even though the collection that this test passes to retainAll() has
+   * fewer occurrences of 2 than the multimap has, all of the 2s should be
+   * retained.
+   */
+  public void testGetRetainAll() {
+    // TODO: test this logic in ListRetainAllTester
+    ListMultimap<String, Integer> multimap = create();
+    multimap.putAll("foo", asList(1, 2, 2, 3, 3, 3));
+
+    multimap.get("foo").retainAll(asList(1, 2, 4));
+    ASSERT.that(multimap.get("foo")).hasContentsInOrder(1, 2, 2);
+  }
+
+  /**
+   * According to the AbstractCollection.removeAll() implementation,
+   * {@code A.removeAll(B)} should remove all occurrences of each object in B,
+   * so even though the collection that this test passes to removeAll() has
+   * fewer occurrences of 2 and 3 than the multimap has, there should be no
+   * 2s or 3s remaining in the collection.
+   */
+  public void testGetRemoveAll_someValuesRemain() {
+    // TODO: test this logic in ListRemoveAllTester
+    ListMultimap<String, Integer> multimap = create();
+    multimap.putAll("foo", asList(1, 2, 2, 3, 3, 3));
+
+    multimap.get("foo").removeAll(asList(2, 3, 3, 4));
+    ASSERT.that(multimap.get("foo")).hasContentsInOrder(1);
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/AbstractMapEntryTest.java b/guava-tests/test/com/google/common/collect/AbstractMapEntryTest.java
new file mode 100644
index 0000000..f106dcc
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/AbstractMapEntryTest.java
@@ -0,0 +1,91 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import junit.framework.TestCase;
+
+import java.util.Collections;
+import java.util.Map.Entry;
+
+/**
+ * Tests for {@code AbstractMapEntry}.
+ *
+ * @author Mike Bostock
+ */
+@GwtCompatible
+public class AbstractMapEntryTest extends TestCase {
+  private static final String NK = null;
+  private static final Integer NV = null;
+
+  private static <K, V> Entry<K, V> entry(final K key, final V value) {
+    return new AbstractMapEntry<K, V>() {
+        @Override public K getKey() {
+          return key;
+        }
+        @Override public V getValue() {
+          return value;
+        }
+      };
+  }
+
+  private static <K, V> Entry<K, V> control(K key, V value) {
+    return Collections.singletonMap(key, value).entrySet().iterator().next();
+  }
+
+  public void testToString() {
+    assertEquals("foo=1", entry("foo", 1).toString());
+  }
+
+  public void testToStringNull() {
+    assertEquals("null=1", entry(NK, 1).toString());
+    assertEquals("foo=null", entry("foo", NV).toString());
+    assertEquals("null=null", entry(NK, NV).toString());
+  }
+
+  public void testEquals() {
+    Entry<String, Integer> foo1 = entry("foo", 1);
+    assertEquals(foo1, foo1);
+    assertEquals(control("foo", 1), foo1);
+    assertEquals(control("bar", 2), entry("bar", 2));
+    assertFalse(control("foo", 1).equals(entry("foo", 2)));
+    assertFalse(foo1.equals(control("bar", 1)));
+    assertFalse(foo1.equals(new Object()));
+    assertFalse(foo1.equals(null));
+  }
+
+  public void testEqualsNull() {
+    assertEquals(control(NK, 1), entry(NK, 1));
+    assertEquals(control("bar", NV), entry("bar", NV));
+    assertFalse(control(NK, 1).equals(entry(NK, 2)));
+    assertFalse(entry(NK, 1).equals(control("bar", 1)));
+    assertFalse(entry(NK, 1).equals(new Object()));
+    assertFalse(entry(NK, 1).equals(null));
+  }
+
+  public void testHashCode() {
+    assertEquals(control("foo", 1).hashCode(), entry("foo", 1).hashCode());
+    assertEquals(control("bar", 2).hashCode(), entry("bar", 2).hashCode());
+  }
+
+  public void testHashCodeNull() {
+    assertEquals(control(NK, 1).hashCode(), entry(NK, 1).hashCode());
+    assertEquals(control("bar", NV).hashCode(), entry("bar", NV).hashCode());
+    assertEquals(control(NK, NV).hashCode(), entry(NK, NV).hashCode());
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/AbstractMultimapAsMapImplementsMapTest.java b/guava-tests/test/com/google/common/collect/AbstractMultimapAsMapImplementsMapTest.java
new file mode 100644
index 0000000..33b20a5
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/AbstractMultimapAsMapImplementsMapTest.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.collect.testing.MapInterfaceTest;
+
+import java.util.Collection;
+import java.util.Map;
+
+/**
+ * Test {@link Multimap#asMap()} for an arbitrary multimap with
+ * {@link MapInterfaceTest}.
+ *
+ * @author George van den Driessche
+ * @author Jared Levy
+ */
+@GwtCompatible
+public abstract class AbstractMultimapAsMapImplementsMapTest
+    extends MapInterfaceTest<String, Collection<Integer>> {
+
+  public AbstractMultimapAsMapImplementsMapTest(
+      boolean modifiable, boolean allowsNulls, boolean supportsIteratorRemove) {
+    super(allowsNulls, allowsNulls, false, modifiable, modifiable, supportsIteratorRemove);
+  }
+
+  protected void populate(Multimap<String, Integer> multimap) {
+    multimap.put("one", 1);
+    multimap.put("two", 2);
+    multimap.put("two", 22);
+    multimap.put("three", 3);
+    multimap.put("three", 33);
+    multimap.put("three", 333);
+  }
+
+  @Override protected String getKeyNotInPopulatedMap()
+      throws UnsupportedOperationException {
+    return "zero";
+  }
+
+  @Override protected Collection<Integer> getValueNotInPopulatedMap()
+      throws UnsupportedOperationException {
+    return Lists.newArrayList(0);
+  }
+
+  /**
+   * The version of this test supplied by {@link MapInterfaceTest} fails for
+   * this particular Map implementation, because {@code map.get()} returns a
+   * view collection that changes in the course of a call to {@code remove()}.
+   * Thus, the expectation doesn't hold that {@code map.remove(x)} returns the
+   * same value which {@code map.get(x)} did immediately beforehand.
+   */
+  @Override public void testRemove() {
+    final Map<String, Collection<Integer>> map;
+    final String keyToRemove;
+    try {
+      map = makePopulatedMap();
+    } catch (UnsupportedOperationException e) {
+      return;
+    }
+    keyToRemove = map.keySet().iterator().next();
+    if (supportsRemove) {
+      int initialSize = map.size();
+      map.get(keyToRemove);
+      map.remove(keyToRemove);
+      // This line doesn't hold - see the Javadoc comments above.
+      // assertEquals(expectedValue, oldValue);
+      assertFalse(map.containsKey(keyToRemove));
+      assertEquals(initialSize - 1, map.size());
+    } else {
+      try {
+        map.remove(keyToRemove);
+        fail("Expected UnsupportedOperationException.");
+      } catch (UnsupportedOperationException e) {
+        // Expected.
+      }
+    }
+    assertInvariants(map);
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/AbstractMultimapTest.java b/guava-tests/test/com/google/common/collect/AbstractMultimapTest.java
new file mode 100644
index 0000000..da55ee0
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/AbstractMultimapTest.java
@@ -0,0 +1,1375 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static java.util.Arrays.asList;
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.testing.SerializableTester;
+
+import junit.framework.TestCase;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.ConcurrentModificationException;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.NoSuchElementException;
+import java.util.Set;
+
+/**
+ * Tests for {@code Multimap} implementations. Caution: when subclassing avoid
+ * accidental naming collisions with tests in this class!
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible(emulated = true)
+public abstract class AbstractMultimapTest extends TestCase {
+
+  private Multimap<String, Integer> multimap;
+
+  protected abstract Multimap<String, Integer> create();
+
+  protected Multimap<String, Integer> createSample() {
+    Multimap<String, Integer> sample = create();
+    sample.putAll("foo", asList(3, -1, 2, 4, 1));
+    sample.putAll("bar", asList(1, 2, 3, 1));
+    return sample;
+  }
+
+  // public for GWT
+  @Override public void setUp() throws Exception {
+    super.setUp();
+    multimap = create();
+  }
+
+  protected Multimap<String, Integer> getMultimap() {
+    return multimap;
+  }
+
+  /**
+   * Returns the key to use as a null placeholder in tests. The default
+   * implementation returns {@code null}, but tests for multimaps that don't
+   * support null keys should override it.
+   */
+  protected String nullKey() {
+    return null;
+  }
+
+  /**
+   * Returns the value to use as a null placeholder in tests. The default
+   * implementation returns {@code null}, but tests for multimaps that don't
+   * support null values should override it.
+   */
+  protected Integer nullValue() {
+    return null;
+  }
+
+  /**
+   * Validate multimap size by calling {@code size()} and also by iterating
+   * through the entries. This tests cases where the {@code entries()} list is
+   * stored separately, such as the {@link LinkedHashMultimap}. It also
+   * verifies that the multimap contains every multimap entry.
+   */
+  protected void assertSize(int expectedSize) {
+    assertEquals(expectedSize, multimap.size());
+
+    int size = 0;
+    for (Entry<String, Integer> entry : multimap.entries()) {
+      assertTrue(multimap.containsEntry(entry.getKey(), entry.getValue()));
+      size++;
+    }
+    assertEquals(expectedSize, size);
+
+    int size2 = 0;
+    for (Entry<String, Collection<Integer>> entry2 :
+        multimap.asMap().entrySet()) {
+      size2 += entry2.getValue().size();
+    }
+    assertEquals(expectedSize, size2);
+  }
+
+  protected boolean removedCollectionsAreModifiable() {
+    return false;
+  }
+
+  public void testSize0() {
+    assertSize(0);
+  }
+
+  public void testSize1() {
+    multimap.put("foo", 1);
+    assertSize(1);
+  }
+
+  public void testSize2Keys() {
+    multimap.put("foo", 1);
+    multimap.put("bar", 5);
+    assertSize(2);
+  }
+
+  public void testSize2Values() {
+    multimap.put("foo", 1);
+    multimap.put("foo", 7);
+    assertSize(2);
+  }
+
+  public void testSizeNull() {
+    multimap.put("foo", 1);
+    multimap.put("bar", 5);
+    multimap.put(nullKey(), nullValue());
+    multimap.put("foo", nullValue());
+    multimap.put(nullKey(), 5);
+    assertSize(5);
+  }
+
+  public void testIsEmptyYes() {
+    assertTrue(multimap.isEmpty());
+  }
+
+  public void testIsEmptyNo() {
+    multimap.put("foo", 1);
+    assertFalse(multimap.isEmpty());
+  }
+
+  public void testIsEmptyNull() {
+    multimap.put(nullKey(), nullValue());
+    assertFalse(multimap.isEmpty());
+  }
+
+  public void testIsEmptyRemoved() {
+    multimap.put("foo", 1);
+    multimap.remove("foo", 1);
+    assertTrue(multimap.isEmpty());
+  }
+
+  public void testContainsKeyTrue() {
+    multimap.put("foo", 1);
+    assertTrue(multimap.containsKey("foo"));
+  }
+
+  public void testContainsKeyFalse() {
+    multimap.put("foo", 1);
+    assertFalse(multimap.containsKey("bar"));
+    assertFalse(multimap.containsKey(nullKey()));
+  }
+
+  public void testContainsKeyNull() {
+    multimap.put(nullKey(), 1);
+    assertTrue(multimap.containsKey(nullKey()));
+  }
+
+  public void testContainsValueTrue() {
+    multimap.put("foo", 1);
+    assertTrue(multimap.containsValue(1));
+  }
+
+  public void testContainsValueFalse() {
+    multimap.put("foo", 1);
+    assertFalse(multimap.containsValue(2));
+    assertFalse(multimap.containsValue(nullValue()));
+  }
+
+  public void testContainsValueNull() {
+    multimap.put("foo", nullValue());
+    assertTrue(multimap.containsValue(nullValue()));
+  }
+
+  public void testContainsKeyValueTrue() {
+    multimap.put("foo", 1);
+    assertTrue(multimap.containsEntry("foo", 1));
+  }
+
+  public void testContainsKeyValueRemoved() {
+    multimap.put("foo", 1);
+    multimap.remove("foo", 1);
+    assertFalse(multimap.containsEntry("foo", 1));
+  }
+
+  public void testGet0() {
+    multimap.put("foo", 1);
+    Collection<Integer> values = multimap.get("bar");
+    assertEquals(0, values.size());
+  }
+
+  public void testGet1() {
+    multimap.put("foo", 1);
+    multimap.put("bar", 3);
+    Collection<Integer> values = multimap.get("bar");
+    assertEquals(1, values.size());
+    assertTrue(values.contains(3));
+    assertFalse(values.contains(5));
+  }
+
+  public void testGet2() {
+    multimap.put("foo", 1);
+    multimap.put("foo", 3);
+    Collection<Integer> values = multimap.get("foo");
+    assertEquals(2, values.size());
+    assertTrue(values.contains(1));
+    assertTrue(values.contains(3));
+  }
+
+  public void testGetNull() {
+    multimap.put(nullKey(), nullValue());
+    multimap.put(nullKey(), 3);
+    Collection<Integer> values = multimap.get(nullKey());
+    assertEquals(2, values.size());
+    assertTrue(values.contains(nullValue()));
+    assertTrue(values.contains(3));
+  }
+
+  public void testPutAllIterable() {
+    Iterable<Integer> iterable = new Iterable<Integer>() {
+      @Override
+      public Iterator<Integer> iterator() {
+        return Lists.newArrayList(1, 3).iterator();
+      }
+    };
+    multimap.putAll("foo", iterable);
+    assertTrue(multimap.containsEntry("foo", 1));
+    assertTrue(multimap.containsEntry("foo", 3));
+    assertSize(2);
+
+    Iterable<Integer> emptyIterable = new Iterable<Integer>() {
+      @Override
+      public Iterator<Integer> iterator() {
+        return Iterators.emptyIterator();
+      }
+    };
+    multimap.putAll("bar", emptyIterable);
+    assertSize(2);
+    assertEquals(Collections.singleton("foo"), multimap.keySet());
+  }
+
+  public void testPutAllCollection() {
+    Collection<Integer> collection = Lists.newArrayList(1, 3);
+    multimap.putAll("foo", collection);
+    assertTrue(multimap.containsEntry("foo", 1));
+    assertTrue(multimap.containsEntry("foo", 3));
+    assertSize(2);
+
+    Collection<Integer> emptyCollection = Lists.newArrayList();
+    multimap.putAll("bar", emptyCollection);
+    assertSize(2);
+    assertEquals(Collections.singleton("foo"), multimap.keySet());
+  }
+
+  public void testPutAllCollectionNull() {
+    Collection<Integer> collection = Lists.newArrayList(1, nullValue());
+    multimap.putAll(nullKey(), collection);
+    assertTrue(multimap.containsEntry(nullKey(), 1));
+    assertTrue(multimap.containsEntry(nullKey(), nullValue()));
+    assertSize(2);
+  }
+
+  public void testPutAllEmptyCollection() {
+    Collection<Integer> collection = Lists.newArrayList();
+    multimap.putAll("foo", collection);
+    assertSize(0);
+    assertTrue(multimap.isEmpty());
+  }
+
+  public void testPutAllMultimap() {
+    multimap.put("foo", 2);
+    multimap.put("cow", 5);
+    multimap.put(nullKey(), 2);
+    Multimap<String, Integer> multimap2 = create();
+    multimap2.put("foo", 1);
+    multimap2.put("bar", 3);
+    multimap2.put(nullKey(), nullValue());
+    multimap.putAll(multimap2);
+    assertTrue(multimap.containsEntry("foo", 2));
+    assertTrue(multimap.containsEntry("cow", 5));
+    assertTrue(multimap.containsEntry("foo", 1));
+    assertTrue(multimap.containsEntry("bar", 3));
+    assertTrue(multimap.containsEntry(nullKey(), nullValue()));
+    assertTrue(multimap.containsEntry(nullKey(), 2));
+    assertSize(6);
+  }
+
+  public void testPutAllReturn_emptyCollection() {
+    assertFalse(multimap.putAll("foo", new ArrayList<Integer>()));
+    assertFalse(multimap.putAll(create()));
+  }
+
+  public void testPutAllReturn_nonEmptyCollection() {
+    assertTrue(multimap.putAll("foo", asList(1, 2, 3)));
+    assertTrue(multimap.putAll("foo", asList(4, 5, 6)));
+    assertFalse(multimap.putAll(create()));
+
+    Multimap<String, Integer> other = create();
+    other.putAll("bar", asList(7, 8, 9));
+    assertTrue(multimap.putAll(other));
+  }
+
+  private void checkRemovedCollection(Collection<Integer> collection) {
+    if (removedCollectionsAreModifiable()) {
+      collection.add(9876);
+      collection.remove(9876);
+      assertFalse(collection.contains(9876));
+    } else {
+      try {
+        collection.add(9876);
+        fail();
+      } catch (UnsupportedOperationException expected) {
+      }
+    }
+  }
+
+  public void testReplaceValues() {
+    multimap.put("foo", 1);
+    multimap.put("bar", 3);
+    Collection<Integer> values = asList(2, nullValue());
+    Collection<Integer> oldValues = multimap.replaceValues("foo", values);
+    assertTrue(multimap.containsEntry("foo", 2));
+    assertTrue(multimap.containsEntry("foo", nullValue()));
+    assertTrue(multimap.containsEntry("bar", 3));
+    assertSize(3);
+    assertTrue(oldValues.contains(1));
+    assertEquals(1, oldValues.size());
+    checkRemovedCollection(oldValues);
+  }
+
+  public void testReplaceValuesEmpty() {
+    multimap.put("foo", 1);
+    multimap.put("bar", 3);
+    Collection<Integer> values = asList();
+    Collection<Integer> oldValues = multimap.replaceValues("foo", values);
+    assertFalse(multimap.containsKey("foo"));
+    assertTrue(multimap.containsEntry("bar", 3));
+    assertSize(1);
+    assertTrue(oldValues.contains(1));
+    assertEquals(1, oldValues.size());
+    checkRemovedCollection(oldValues);
+  }
+
+  public void testReplaceValuesNull() {
+    multimap.put(nullKey(), 1);
+    multimap.put("bar", 3);
+    Collection<Integer> values = asList(2, nullValue());
+    Collection<Integer> oldValues = multimap.replaceValues(nullKey(), values);
+    assertTrue(multimap.containsEntry(nullKey(), 2));
+    assertTrue(multimap.containsEntry(nullKey(), nullValue()));
+    assertTrue(multimap.containsEntry("bar", 3));
+    assertSize(3);
+    assertTrue(oldValues.contains(1));
+    assertEquals(1, oldValues.size());
+    checkRemovedCollection(oldValues);
+  }
+
+  public void testReplaceValuesNotPresent() {
+    multimap.put("bar", 3);
+    Collection<Integer> values = asList(2, 4);
+    Collection<Integer> oldValues = multimap.replaceValues("foo", values);
+    assertTrue(multimap.containsEntry("foo", 2));
+    assertTrue(multimap.containsEntry("foo", 4));
+    assertTrue(multimap.containsEntry("bar", 3));
+    assertSize(3);
+    assertNotNull(oldValues);
+    assertTrue(oldValues.isEmpty());
+    checkRemovedCollection(oldValues);
+  }
+
+  public void testReplaceValuesDuplicates() {
+    Collection<Integer> values = Lists.newArrayList(1, 2, 3, 2, 1);
+    multimap.put("bar", 3);
+    Collection<Integer> oldValues = multimap.replaceValues("bar", values);
+    Collection<Integer> replacedValues = multimap.get("bar");
+    assertSize(multimap.size());
+    assertEquals(replacedValues.size(), multimap.size());
+    assertEquals(1, oldValues.size());
+    assertTrue(oldValues.contains(3));
+    checkRemovedCollection(oldValues);
+  }
+
+  public void testRemove() {
+    multimap.put("foo", 1);
+    multimap.put("foo", 3);
+
+    assertTrue(multimap.remove("foo", 1));
+    assertFalse(multimap.containsEntry("foo", 1));
+    assertTrue(multimap.containsEntry("foo", 3));
+    assertSize(1);
+
+    assertFalse(multimap.remove("bar", 3));
+    assertTrue(multimap.containsEntry("foo", 3));
+    assertSize(1);
+
+    assertFalse(multimap.remove("foo", 2));
+    assertTrue(multimap.containsEntry("foo", 3));
+    assertSize(1);
+
+    assertTrue(multimap.remove("foo", 3));
+    assertFalse(multimap.containsKey("foo"));
+    assertSize(0);
+  }
+
+  public void testRemoveNull() {
+    multimap.put(nullKey(), 1);
+    multimap.put(nullKey(), 3);
+    multimap.put(nullKey(), nullValue());
+
+    assertTrue(multimap.remove(nullKey(), 1));
+    assertFalse(multimap.containsEntry(nullKey(), 1));
+    assertTrue(multimap.containsEntry(nullKey(), 3));
+    assertTrue(multimap.containsEntry(nullKey(), nullValue()));
+    assertSize(2);
+
+    assertTrue(multimap.remove(nullKey(), nullValue()));
+    assertFalse(multimap.containsEntry(nullKey(), 1));
+    assertTrue(multimap.containsEntry(nullKey(), 3));
+    assertFalse(multimap.containsEntry(nullKey(), nullValue()));
+    assertSize(1);
+  }
+
+  public void testRemoveAll() {
+    multimap.put("foo", 1);
+    multimap.put("foo", 3);
+    Collection<Integer> removed = multimap.removeAll("foo");
+    assertFalse(multimap.containsKey("foo"));
+    assertSize(0);
+    assertTrue(removed.contains(1));
+    assertTrue(removed.contains(3));
+    assertEquals(2, removed.size());
+    checkRemovedCollection(removed);
+  }
+
+  public void testRemoveAllNull() {
+    multimap.put(nullKey(), 1);
+    multimap.put(nullKey(), nullValue());
+    Collection<Integer> removed = multimap.removeAll(nullKey());
+    assertFalse(multimap.containsKey(nullKey()));
+    assertSize(0);
+    assertTrue(removed.contains(1));
+    assertTrue(removed.contains(nullValue()));
+    assertEquals(2, removed.size());
+    checkRemovedCollection(removed);
+  }
+
+  public void testRemoveAllNotPresent() {
+    multimap.put("foo", 1);
+    multimap.put("foo", 3);
+    Collection<Integer> removed = multimap.removeAll("bar");
+    assertSize(2);
+    assertNotNull(removed);
+    assertTrue(removed.isEmpty());
+    checkRemovedCollection(removed);
+  }
+
+  public void testClear() {
+    multimap.put("foo", 1);
+    multimap.put("bar", 3);
+    multimap.clear();
+    assertEquals(0, multimap.keySet().size());
+    assertSize(0);
+  }
+
+  public void testKeySet() {
+    multimap.put("foo", 1);
+    multimap.put("foo", nullValue());
+    multimap.put(nullKey(), 3);
+    Set<String> keys = multimap.keySet();
+    assertEquals(2, keys.size());
+    assertTrue(keys.contains("foo"));
+    assertTrue(keys.contains(nullKey()));
+    assertTrue(keys.containsAll(Lists.newArrayList("foo", nullKey())));
+    assertFalse(keys.containsAll(Lists.newArrayList("foo", "bar")));
+  }
+
+  public void testValues() {
+    multimap.put("foo", 1);
+    multimap.put("foo", nullValue());
+    multimap.put(nullKey(), 3);
+    Collection<Integer> values = multimap.values();
+    assertEquals(3, values.size());
+    assertTrue(values.contains(1));
+    assertTrue(values.contains(3));
+    assertTrue(values.contains(nullValue()));
+    assertFalse(values.contains(5));
+  }
+
+  public void testValuesClear() {
+    multimap.put("foo", 1);
+    multimap.put("foo", nullValue());
+    multimap.put(nullKey(), 3);
+    Collection<Integer> values = multimap.values();
+    values.clear();
+    assertTrue(multimap.isEmpty());
+    assertTrue(values.isEmpty());
+    assertFalse(multimap.containsEntry("foo", 1));
+  }
+
+  public void testValuesRemoveAllNullFromEmpty() {
+    try {
+      multimap.values().removeAll(null);
+      // Returning successfully is not ideal, but tolerated.
+    } catch (NullPointerException expected) {}
+  }
+
+  public void testValuesRetainAllNullFromEmpty() {
+    try {
+      multimap.values().retainAll(null);
+      // Returning successfully is not ideal, but tolerated.
+    } catch (NullPointerException expected) {}
+  }
+
+  // the entries collection is more thoroughly tested in MultimapCollectionTest
+  @SuppressWarnings("unchecked") // varargs
+  public void testEntries() {
+    multimap.put("foo", 1);
+    multimap.put("foo", nullValue());
+    multimap.put(nullKey(), 3);
+    Collection<Entry<String, Integer>> entries = multimap.entries();
+    ASSERT.that(entries).hasContentsAnyOrder(
+        Maps.immutableEntry("foo", 1),
+        Maps.immutableEntry("foo", nullValue()),
+        Maps.immutableEntry(nullKey(), 3));
+  }
+
+  public void testNoSuchElementException() {
+    Iterator<Entry<String, Integer>> entries =
+        multimap.entries().iterator();
+    try {
+      entries.next();
+      fail();
+    } catch (NoSuchElementException expected) {}
+  }
+
+  public void testAsMap() {
+    multimap.put("foo", 1);
+    multimap.put("foo", nullValue());
+    multimap.put(nullKey(), 3);
+    Map<String, Collection<Integer>> map = multimap.asMap();
+
+    assertEquals(2, map.size());
+    ASSERT.that(map.get("foo")).hasContentsAnyOrder(1, nullValue());
+    ASSERT.that(map.get(nullKey())).hasContentsAnyOrder(3);
+    assertNull(map.get("bar"));
+    assertTrue(map.containsKey("foo"));
+    assertTrue(map.containsKey(nullKey()));
+    assertFalse(multimap.containsKey("bar"));
+
+    ASSERT.that(map.remove("foo")).hasContentsAnyOrder(1, nullValue());
+    assertFalse(multimap.containsKey("foo"));
+    assertEquals(1, multimap.size());
+    assertNull(map.remove("bar"));
+    multimap.get(nullKey()).add(5);
+    assertTrue(multimap.containsEntry(nullKey(), 5));
+    assertEquals(2, multimap.size());
+    multimap.get(nullKey()).clear();
+    assertTrue(multimap.isEmpty());
+    assertEquals(0, multimap.size());
+
+    try {
+      map.put("bar", asList(4, 8));
+      fail("Expected UnsupportedOperationException");
+    } catch (UnsupportedOperationException expected) {}
+
+    multimap.put("bar", 5);
+    assertSize(1);
+    map.clear();
+    assertSize(0);
+  }
+
+  public void testAsMapEntries() {
+    multimap.put("foo", 1);
+    multimap.put("foo", nullValue());
+    multimap.put(nullKey(), 3);
+    Collection<Entry<String, Collection<Integer>>> entries =
+        multimap.asMap().entrySet();
+    assertEquals(2, entries.size());
+
+    assertTrue(entries.contains(
+        Maps.immutableEntry("foo", multimap.get("foo"))));
+    assertFalse(entries.contains(
+        Maps.immutableEntry("bar", multimap.get("foo"))));
+    assertFalse(entries.contains(
+        Maps.immutableEntry("bar", null)));
+    assertFalse(entries.contains(
+        Maps.immutableEntry("foo", null)));
+    assertFalse(entries.contains(
+        Maps.immutableEntry("foo", asList(1, 4))));
+    assertFalse(entries.contains("foo"));
+
+    Iterator<Entry<String, Collection<Integer>>> iterator =
+        entries.iterator();
+    for (int i = 0; i < 2; i++) {
+      assertTrue(iterator.hasNext());
+      Entry<String, Collection<Integer>> entry = iterator.next();
+      if ("foo".equals(entry.getKey())) {
+        assertEquals(2, entry.getValue().size());
+        assertTrue(entry.getValue().contains(1));
+        assertTrue(entry.getValue().contains(nullValue()));
+      } else {
+        assertEquals(nullKey(), entry.getKey());
+        assertEquals(1, entry.getValue().size());
+        assertTrue(entry.getValue().contains(3));
+      }
+    }
+    assertFalse(iterator.hasNext());
+  }
+
+  public void testAsMapToString() {
+    multimap.put("foo", 1);
+    assertEquals("{foo=[1]}", multimap.asMap().toString());
+  }
+
+  public void testKeys() {
+    multimap.put("foo", 1);
+    multimap.put("foo", 5);
+    multimap.put("foo", nullValue());
+    multimap.put(nullKey(), 3);
+    Multiset<String> multiset = multimap.keys();
+    assertEquals(3, multiset.count("foo"));
+    assertEquals(1, multiset.count(nullKey()));
+    ASSERT.that(multiset.elementSet()).hasContentsAnyOrder("foo", nullKey());
+    assertEquals(2, multiset.entrySet().size());
+    assertEquals(4, multiset.size());
+
+    Set<Multiset.Entry<String>> entries = multimap.keys().entrySet();
+    assertTrue(entries.contains(Multisets.immutableEntry("foo", 3)));
+    assertFalse(entries.contains(Multisets.immutableEntry("foo", 2)));
+    assertFalse(entries.contains(Maps.immutableEntry("foo", 3)));
+
+    Multiset<String> foo3null1 =
+        HashMultiset.create(asList("foo", "foo", nullKey(), "foo"));
+    assertEquals(foo3null1, multiset);
+    assertEquals(multiset, foo3null1);
+    assertFalse(multiset.equals(
+        HashMultiset.create(asList("foo", "foo", nullKey(), nullKey()))));
+    assertEquals(foo3null1.hashCode(), multiset.hashCode());
+    assertEquals(foo3null1.entrySet(), multiset.entrySet());
+    assertEquals(multiset.entrySet(), foo3null1.entrySet());
+    assertEquals(foo3null1.entrySet().hashCode(),
+        multiset.entrySet().hashCode());
+
+    assertEquals(0, multiset.remove("bar", 1));
+    assertEquals(1, multiset.remove(nullKey(), 4));
+    assertFalse(multimap.containsKey(nullKey()));
+    assertSize(3);
+    assertEquals("foo", entries.iterator().next().getElement());
+
+    assertEquals(3, multiset.remove("foo", 1));
+    assertTrue(multimap.containsKey("foo"));
+    assertSize(2);
+    assertEquals(2, multiset.setCount("foo", 0));
+    assertEquals(0, multiset.setCount("bar", 0));
+  }
+
+  public void testKeysAdd() {
+    multimap.put("foo", 1);
+    Multiset<String> multiset = multimap.keys();
+
+    try {
+      multiset.add("bar");
+      fail();
+    } catch (UnsupportedOperationException expected) {}
+
+    try {
+      multiset.add("bar", 2);
+      fail();
+    } catch (UnsupportedOperationException expected) {}
+  }
+
+  public void testKeysContainsAll() {
+    multimap.put("foo", 1);
+    multimap.put("foo", 5);
+    multimap.put("foo", nullValue());
+    multimap.put(nullKey(), 3);
+    Multiset<String> multiset = multimap.keys();
+
+    assertTrue(multiset.containsAll(asList("foo", nullKey())));
+    assertFalse(multiset.containsAll(asList("foo", "bar")));
+  }
+
+  public void testKeysClear() {
+    multimap.put("foo", 1);
+    multimap.put("foo", 5);
+    multimap.put("foo", nullValue());
+    multimap.put(nullKey(), 3);
+    Multiset<String> multiset = multimap.keys();
+
+    multiset.clear();
+    assertTrue(multiset.isEmpty());
+    assertTrue(multimap.isEmpty());
+    assertSize(0);
+    assertFalse(multimap.containsKey("foo"));
+    assertFalse(multimap.containsKey(nullKey()));
+  }
+
+  public void testKeysToString() {
+    multimap.put("foo", 7);
+    multimap.put("foo", 8);
+    assertEquals("[foo x 2]", multimap.keys().toString());
+  }
+
+  public void testKeysEntrySetIterator() {
+    multimap.put("foo", 7);
+    multimap.put("foo", 8);
+    Iterator<Multiset.Entry<String>> iterator
+        = multimap.keys().entrySet().iterator();
+    assertTrue(iterator.hasNext());
+    assertEquals(Multisets.immutableEntry("foo", 2), iterator.next());
+    iterator.remove();
+    assertFalse(iterator.hasNext());
+    assertSize(0);
+  }
+
+  public void testKeysEntrySetToString() {
+    multimap.put("foo", 7);
+    multimap.put("foo", 8);
+    assertEquals("[foo x 2]", multimap.keys().entrySet().toString());
+  }
+
+  public void testKeysEntrySetRemove() {
+    multimap.putAll("foo", asList(1, 2, 3));
+    multimap.putAll("bar", asList(4, 5));
+    Set<Multiset.Entry<String>> entries = multimap.keys().entrySet();
+    assertTrue(entries.remove(Multisets.immutableEntry("bar", 2)));
+    assertEquals("[foo x 3]", multimap.keys().entrySet().toString());
+
+    // doesn't exist in entries, should have no effect
+    assertFalse(entries.remove(Multisets.immutableEntry("foo", 2)));
+    assertEquals("[foo x 3]", multimap.keys().entrySet().toString());
+    assertEquals("Multimap size after keys().entrySet().remove(entry)",
+        3, multimap.size());
+  }
+
+  public void testEqualsTrue() {
+    multimap.put("foo", 1);
+    multimap.put("foo", nullValue());
+    multimap.put(nullKey(), 3);
+    assertEquals(multimap, multimap);
+
+    Multimap<String, Integer> multimap2 = create();
+    multimap2.put(nullKey(), 3);
+    multimap2.put("foo", 1);
+    multimap2.put("foo", nullValue());
+
+    assertEquals(multimap, multimap2);
+    assertEquals(multimap.hashCode(), multimap2.hashCode());
+  }
+
+  public void testEqualsFalse() {
+    multimap.put("foo", 1);
+    multimap.put("foo", 3);
+    multimap.put("bar", 3);
+
+    Multimap<String, Integer> multimap2 = create();
+    multimap2.put("bar", 3);
+    multimap2.put("bar", 1);
+    assertFalse(multimap.equals(multimap2));
+
+    multimap2.put("foo", 3);
+    assertFalse(multimap.equals(multimap2));
+
+    assertFalse(multimap.equals(nullValue()));
+    assertFalse(multimap.equals("foo"));
+  }
+
+  public void testValuesIterator() {
+    multimap.put("foo", 1);
+    multimap.put("foo", 2);
+    multimap.put(nullKey(), 4);
+    int sum = 0;
+    for (int i : multimap.values()) {
+      sum += i;
+    }
+    assertEquals(7, sum);
+  }
+
+  public void testValuesIteratorEmpty() {
+    int sum = 0;
+    for (int i : multimap.values()) {
+      sum += i;
+    }
+    assertEquals(0, sum);
+  }
+
+  public void testGetAddQuery() {
+    multimap.put("foo", 1);
+    multimap.put("foo", 3);
+    multimap.put("bar", 4);
+    Collection<Integer> values = multimap.get("foo");
+    multimap.put("foo", 5);
+    multimap.put("bar", 6);
+
+    /* Verify that values includes effect of put. */
+    assertEquals(3, values.size());
+    assertTrue(values.contains(1));
+    assertTrue(values.contains(5));
+    assertFalse(values.contains(6));
+    ASSERT.that(values).hasContentsAnyOrder(1, 3, 5);
+    assertTrue(values.containsAll(asList(3, 5)));
+    assertFalse(values.isEmpty());
+    assertEquals(multimap.get("foo"), values);
+    assertEquals(multimap.get("foo").hashCode(), values.hashCode());
+    assertEquals(multimap.get("foo").toString(), values.toString());
+  }
+
+  public void testGetAddAll() {
+    multimap.put("foo", 1);
+    multimap.put("foo", 3);
+    multimap.get("foo").addAll(asList(5, 7));
+    multimap.get("bar").addAll(asList(6, 8));
+    multimap.get("cow").addAll(Arrays.<Integer>asList());
+    assertSize(6);
+    ASSERT.that(multimap.get("foo")).hasContentsAnyOrder(1, 3, 5, 7);
+    ASSERT.that(multimap.get("bar")).hasContentsAnyOrder(6, 8);
+    ASSERT.that(multimap.get("cow")).isEmpty();
+  }
+
+  public void testGetRemoveAddQuery() {
+    multimap.put("foo", 1);
+    multimap.put("foo", 3);
+    multimap.put("bar", 4);
+    Collection<Integer> values = multimap.get("foo");
+    Iterator<Integer> iterator = values.iterator();
+    multimap.remove("foo", 1);
+    multimap.remove("foo", 3);
+
+    /* Verify that values includes effect of remove */
+    assertEquals(0, values.size());
+    assertFalse(values.contains(1));
+    assertFalse(values.contains(6));
+    assertTrue(values.isEmpty());
+    assertEquals(multimap.get("foo"), values);
+    assertEquals(multimap.get("foo").hashCode(), values.hashCode());
+    assertEquals(multimap.get("foo").toString(), values.toString());
+
+    multimap.put("foo", 5);
+
+    /* Verify that values includes effect of put. */
+    assertEquals(1, values.size());
+    assertFalse(values.contains(1));
+    assertTrue(values.contains(5));
+    assertFalse(values.contains(6));
+    assertEquals(5, values.iterator().next().intValue());
+    assertFalse(values.isEmpty());
+    assertEquals(multimap.get("foo"), values);
+    assertEquals(multimap.get("foo").hashCode(), values.hashCode());
+    assertEquals(multimap.get("foo").toString(), values.toString());
+
+    try {
+      iterator.hasNext();
+    } catch (ConcurrentModificationException expected) {}
+  }
+
+  public void testModifyCollectionFromGet() {
+    multimap.put("foo", 1);
+    multimap.put("foo", 3);
+    multimap.put("bar", 4);
+    Collection<Integer> values = multimap.get("foo");
+
+    assertTrue(values.add(5));
+    assertSize(4);
+    assertEquals(3, multimap.get("foo").size());
+    assertTrue(multimap.containsEntry("foo", 5));
+
+    values.clear();
+    assertSize(1);
+    assertFalse(multimap.containsKey("foo"));
+
+    assertTrue(values.addAll(asList(7, 9)));
+    assertSize(3);
+    assertEquals(2, multimap.get("foo").size());
+    assertTrue(multimap.containsEntry("foo", 7));
+    assertTrue(multimap.containsEntry("foo", 9));
+    assertFalse(values.addAll(Collections.<Integer>emptyList()));
+    assertSize(3);
+
+    assertTrue(values.remove(7));
+    assertSize(2);
+    assertEquals(1, multimap.get("foo").size());
+    assertFalse(multimap.containsEntry("foo", 7));
+    assertTrue(multimap.containsEntry("foo", 9));
+    assertFalse(values.remove(77));
+    assertSize(2);
+
+    assertTrue(values.add(11));
+    assertTrue(values.add(13));
+    assertTrue(values.add(15));
+    assertTrue(values.add(17));
+
+    assertTrue(values.removeAll(asList(11, 15)));
+    assertSize(4);
+    ASSERT.that(multimap.get("foo")).hasContentsAnyOrder(9, 13, 17);
+    assertFalse(values.removeAll(asList(21, 25)));
+    assertSize(4);
+
+    assertTrue(values.retainAll(asList(13, 17, 19)));
+    assertSize(3);
+    ASSERT.that(multimap.get("foo")).hasContentsAnyOrder(13, 17);
+    assertFalse(values.retainAll(asList(13, 17, 19)));
+    assertSize(3);
+
+    values.remove(13);
+    values.remove(17);
+    assertTrue(multimap.get("foo").isEmpty());
+    assertSize(1);
+    assertFalse(multimap.containsKey("foo"));
+  }
+
+  public void testGetIterator() {
+    multimap.put("foo", 1);
+    multimap.put("foo", 3);
+    multimap.put("foo", 5);
+    multimap.put("bar", 4);
+    Collection<Integer> values = multimap.get("foo");
+
+    Iterator<Integer> iterator = values.iterator();
+    assertTrue(iterator.hasNext());
+    Integer v1 = iterator.next();
+    assertTrue(iterator.hasNext());
+    Integer v2 = iterator.next();
+    iterator.remove();
+    assertTrue(iterator.hasNext());
+    Integer v3 = iterator.next();
+    assertFalse(iterator.hasNext());
+
+    ASSERT.that(asList(v1, v2, v3)).hasContentsAnyOrder(1, 3, 5);
+    assertSize(3);
+    assertTrue(multimap.containsEntry("foo", v1));
+    assertFalse(multimap.containsEntry("foo", v2));
+    assertTrue(multimap.containsEntry("foo", v3));
+
+    iterator = values.iterator();
+    assertTrue(iterator.hasNext());
+    Integer n1 = iterator.next();
+    iterator.remove();
+    assertTrue(iterator.hasNext());
+    Integer n3 = iterator.next();
+    iterator.remove();
+    assertFalse(iterator.hasNext());
+
+    ASSERT.that(asList(n1, n3)).hasContentsAnyOrder(v1, v3);
+    assertSize(1);
+    assertFalse(multimap.containsKey("foo"));
+  }
+
+  public void testGetClear() {
+    multimap.put("foo", 1);
+    multimap.put("bar", 3);
+    Collection<Integer> values = multimap.get("foo");
+    multimap.clear();
+    assertTrue(values.isEmpty());
+  }
+
+  public void testGetPutAllCollection() {
+    Collection<Integer> values = multimap.get("foo");
+    Collection<Integer> collection = Lists.newArrayList(1, 3);
+    multimap.putAll("foo", collection);
+    ASSERT.that(values).hasContentsAnyOrder(1, 3);
+  }
+
+  public void testGetPutAllMultimap() {
+    multimap.put("foo", 2);
+    multimap.put("cow", 5);
+    multimap.put(nullKey(), 2);
+    Collection<Integer> valuesFoo = multimap.get("foo");
+    Collection<Integer> valuesBar = multimap.get("bar");
+    Collection<Integer> valuesCow = multimap.get("cow");
+    Collection<Integer> valuesNull = multimap.get(nullKey());
+    Multimap<String, Integer> multimap2 = create();
+    multimap2.put("foo", 1);
+    multimap2.put("bar", 3);
+    multimap2.put(nullKey(), nullValue());
+    multimap.putAll(multimap2);
+
+    ASSERT.that(valuesFoo).hasContentsAnyOrder(1, 2);
+    ASSERT.that(valuesBar).hasContentsAnyOrder(3);
+    ASSERT.that(valuesCow).hasContentsAnyOrder(5);
+    ASSERT.that(valuesNull).hasContentsAnyOrder(nullValue(), 2);
+  }
+
+  public void testGetRemove() {
+    multimap.put("foo", 1);
+    multimap.put("foo", 3);
+    Collection<Integer> values = multimap.get("foo");
+    multimap.remove("foo", 1);
+    ASSERT.that(values).hasContentsAnyOrder(3);
+  }
+
+  public void testGetRemoveAll() {
+    multimap.put("foo", 1);
+    multimap.put("foo", 3);
+    Collection<Integer> values = multimap.get("foo");
+    multimap.removeAll("foo");
+    assertTrue(values.isEmpty());
+  }
+
+  public void testGetReplaceValues() {
+    multimap.put("foo", 1);
+    multimap.put("foo", 3);
+    Collection<Integer> values = multimap.get("foo");
+    multimap.replaceValues("foo", asList(1, 5));
+    ASSERT.that(values).hasContentsAnyOrder(1, 5);
+
+    multimap.replaceValues("foo", new ArrayList<Integer>());
+    assertTrue(multimap.isEmpty());
+    assertSize(0);
+    assertTrue(values.isEmpty());
+  }
+
+  public void testEntriesUpdate() {
+    multimap.put("foo", 1);
+    Collection<Entry<String, Integer>> entries = multimap.entries();
+    Iterator<Entry<String, Integer>> iterator = entries.iterator();
+
+    assertTrue(iterator.hasNext());
+    Entry<String, Integer> entry = iterator.next();
+    assertEquals("foo", entry.getKey());
+    assertEquals(1, entry.getValue().intValue());
+    iterator.remove();
+    assertFalse(iterator.hasNext());
+    assertTrue(multimap.isEmpty());
+    assertSize(0);
+
+    try {
+      entries.add(Maps.immutableEntry("bar", 2));
+      fail("UnsupportedOperationException expected");
+    } catch (UnsupportedOperationException expected) {}
+    assertSize(0);
+    assertFalse(multimap.containsEntry("bar", 2));
+
+    multimap.put("bar", 2);
+    assertSize(1);
+    assertTrue(entries.contains(Maps.immutableEntry("bar", 2)));
+
+    entries.clear();
+    assertTrue(multimap.isEmpty());
+    assertSize(0);
+  }
+
+  public void testEntriesRemove() {
+    multimap.put("foo", 1);
+    multimap.put("foo", nullValue());
+    multimap.put(nullKey(), 3);
+    Collection<Entry<String, Integer>> entries = multimap.entries();
+
+    assertTrue(entries.remove(Maps.immutableEntry("foo", nullValue())));
+    assertSize(2);
+    assertFalse(multimap.containsEntry("foo", nullValue()));
+
+    assertFalse(entries.remove(Maps.immutableEntry("foo", 3)));
+    assertFalse(entries.remove(3.5));
+    assertSize(2);
+  }
+
+  @SuppressWarnings("unchecked")
+  public void testEntriesRemoveAll() {
+    multimap.put("foo", 1);
+    multimap.put("foo", 2);
+    multimap.put("bar", 3);
+
+    assertFalse(multimap.entries().removeAll(
+        Collections.singleton(Maps.immutableEntry("foo", 3))));
+    assertSize(3);
+
+    assertTrue(multimap.entries().removeAll(asList(
+        Maps.immutableEntry("foo", 3), Maps.immutableEntry("bar", 3))));
+    assertSize(2);
+    assertFalse(multimap.containsKey("bar"));
+  }
+
+  public void testEntriesRemoveAllNullFromEmpty() {
+    try {
+      multimap.entries().removeAll(null);
+      // Returning successfully is not ideal, but tolerated.
+    } catch (NullPointerException expected) {}
+  }
+
+  @SuppressWarnings("unchecked")
+  public void testEntriesRetainAll() {
+    multimap.put("foo", 1);
+    multimap.put("foo", 2);
+    multimap.put("bar", 3);
+
+    assertFalse(multimap.entries().retainAll(asList(
+        Maps.immutableEntry("foo", 1), Maps.immutableEntry("foo", 2),
+        Maps.immutableEntry("foo", 3), Maps.immutableEntry("bar", 3))));
+    assertSize(3);
+
+    assertTrue(multimap.entries().retainAll(asList(
+        Maps.immutableEntry("foo", 3), Maps.immutableEntry("bar", 3))));
+    assertSize(1);
+    assertTrue(multimap.containsEntry("bar", 3));
+  }
+
+  public void testEntriesRetainAllNullFromEmpty() {
+    try {
+      multimap.entries().retainAll(null);
+      // Returning successfully is not ideal, but tolerated.
+    } catch (NullPointerException expected) {}
+  }
+
+  public void testEntriesIterator() {
+    multimap.put("foo", 3);
+    Iterator<Entry<String, Integer>> iterator
+        = multimap.entries().iterator();
+    assertTrue(iterator.hasNext());
+    assertEquals(Maps.immutableEntry("foo", 3), iterator.next());
+    iterator.remove();
+    assertFalse(iterator.hasNext());
+    assertSize(0);
+  }
+
+  public void testEntriesToString() {
+    multimap.put("foo", 3);
+    Collection<Entry<String, Integer>> entries = multimap.entries();
+    assertEquals("[foo=3]", entries.toString());
+  }
+
+  public void testEntriesToArray() {
+    multimap.put("foo", 3);
+    Collection<Entry<String, Integer>> entries = multimap.entries();
+    Entry<?, ?>[] array = new Entry<?, ?>[3];
+    assertSame(array, entries.toArray(array));
+    assertEquals(Maps.immutableEntry("foo", 3), array[0]);
+    assertNull(array[1]);
+  }
+
+  /**
+   * Test calling setValue() on an entry returned by multimap.entries().
+   */
+  public void testEntrySetValue() {
+    multimap.put("foo", 1);
+    multimap.put("bar", 1);
+    Collection<Entry<String, Integer>> entries = multimap.entries();
+    Iterator<Entry<String, Integer>> iterator = entries.iterator();
+    Entry<String, Integer> entrya = iterator.next();
+    Entry<String, Integer> entryb = iterator.next();
+    try {
+      entrya.setValue(3);
+      fail();
+    } catch (UnsupportedOperationException expected) {}
+    assertTrue(multimap.containsEntry("foo", 1));
+    assertTrue(multimap.containsEntry("bar", 1));
+    assertFalse(multimap.containsEntry("foo", 2));
+    assertFalse(multimap.containsEntry("bar", 2));
+    assertEquals(1, (int) entrya.getValue());
+    assertEquals(1, (int) entryb.getValue());
+  }
+
+  /** Verify that the entries remain valid after iterating past them. */
+  public void testEntriesCopy() {
+    multimap.put("foo", 1);
+    multimap.put("foo", 2);
+    multimap.put("bar", 3);
+
+    Set<Entry<String, Integer>> copy = Sets.newHashSet(multimap.entries());
+    assertEquals(3, copy.size());
+    assertTrue(copy.contains(Maps.immutableEntry("foo", 1)));
+    assertTrue(copy.contains(Maps.immutableEntry("foo", 2)));
+    assertTrue(copy.contains(Maps.immutableEntry("bar", 3)));
+    assertFalse(copy.contains(Maps.immutableEntry("bar", 1)));
+
+    multimap.removeAll("foo");
+    assertEquals(3, copy.size());
+    assertTrue(copy.contains(Maps.immutableEntry("foo", 1)));
+    assertTrue(copy.contains(Maps.immutableEntry("foo", 2)));
+    assertTrue(copy.contains(Maps.immutableEntry("bar", 3)));
+    assertFalse(copy.contains(Maps.immutableEntry("bar", 1)));
+  }
+
+  public void testKeySetRemove() {
+    multimap.put("foo", 1);
+    multimap.put("foo", nullValue());
+    multimap.put(nullKey(), 3);
+    Set<String> keys = multimap.keySet();
+    assertTrue(keys.remove("foo"));
+    assertFalse(keys.remove("bar"));
+    assertSize(1);
+    assertFalse(multimap.containsKey("foo"));
+    assertTrue(multimap.containsEntry(nullKey(), 3));
+  }
+
+  public void testKeySetRemoveAllNullFromEmpty() {
+    try {
+      multimap.keySet().removeAll(null);
+      fail();
+    } catch (NullPointerException expected) {}
+  }
+
+  public void testKeySetRetainAllNullFromEmpty() {
+    try {
+      multimap.keySet().retainAll(null);
+      // Returning successfully is not ideal, but tolerated.
+    } catch (NullPointerException expected) {}
+  }
+
+  public void testKeySetIterator() {
+    multimap.put("foo", 1);
+    multimap.put("foo", nullValue());
+    multimap.put(nullKey(), 3);
+
+    Iterator<String> iterator = multimap.keySet().iterator();
+    while (iterator.hasNext()) {
+      String key = iterator.next();
+      if ("foo".equals(key)) {
+        iterator.remove();
+      }
+    }
+    assertSize(1);
+    assertFalse(multimap.containsKey("foo"));
+    assertTrue(multimap.containsEntry(nullKey(), 3));
+
+    iterator = multimap.keySet().iterator();
+    assertEquals(nullKey(), iterator.next());
+    iterator.remove();
+    assertTrue(multimap.isEmpty());
+    assertSize(0);
+  }
+
+  public void testKeySetClear() {
+    multimap.put("foo", 1);
+    multimap.put("foo", nullValue());
+    multimap.put(nullKey(), 3);
+
+    multimap.keySet().clear();
+    assertTrue(multimap.isEmpty());
+    assertSize(0);
+  }
+
+  public void testValuesIteratorRemove() {
+    multimap.put("foo", 1);
+    multimap.put("foo", 2);
+    multimap.put(nullKey(), 4);
+
+    Iterator<Integer> iterator = multimap.values().iterator();
+    while (iterator.hasNext()) {
+      int value = iterator.next();
+      if ((value % 2) == 0) {
+        iterator.remove();
+      }
+    }
+
+    assertSize(1);
+    assertTrue(multimap.containsEntry("foo", 1));
+  }
+
+  public void testAsMapEntriesUpdate() {
+    multimap.put("foo", 1);
+    multimap.put("foo", 3);
+    Collection<Entry<String, Collection<Integer>>> entries =
+        multimap.asMap().entrySet();
+    Entry<String, Collection<Integer>> entry = entries.iterator().next();
+    Collection<Integer> values = entry.getValue();
+
+    multimap.put("foo", 5);
+    assertEquals(3, values.size());
+    assertTrue(values.contains(5));
+
+    values.add(7);
+    assertSize(4);
+    assertTrue(multimap.containsValue(7));
+
+    multimap.put("bar", 4);
+    assertEquals(2, entries.size());
+    assertSize(5);
+
+    assertTrue(entries.remove(entry));
+    assertSize(1);
+    assertFalse(multimap.containsKey("foo"));
+    assertTrue(multimap.containsKey("bar"));
+    assertFalse(entries.remove("foo"));
+    assertFalse(entries.remove(
+        Maps.immutableEntry("foo", Collections.singleton(2))));
+    assertSize(1);
+
+    Iterator<Entry<String, Collection<Integer>>> iterator =
+        entries.iterator();
+    assertTrue(iterator.hasNext());
+    iterator.next();
+    iterator.remove();
+    assertFalse(iterator.hasNext());
+    assertSize(0);
+    assertTrue(multimap.isEmpty());
+
+    multimap.put("bar", 8);
+    assertSize(1);
+    entries.clear();
+    assertSize(0);
+  }
+
+  public void testToStringNull() {
+    multimap.put("foo", 3);
+    multimap.put("foo", -1);
+    multimap.put(nullKey(), nullValue());
+    multimap.put("bar", 1);
+    multimap.put("foo", 2);
+    multimap.put(nullKey(), 0);
+    multimap.put("bar", 2);
+    multimap.put("bar", nullValue());
+    multimap.put("foo", nullValue());
+    multimap.put("foo", 4);
+    multimap.put(nullKey(), -1);
+    multimap.put("bar", 3);
+    multimap.put("bar", 1);
+    multimap.put("foo", 1);
+
+    // This test is brittle. The original test was meant to validate the
+    // contents of the string itself, but key and value ordering tend
+    // to change under unpredictable circumstances. Instead, we're just ensuring
+    // that the string not return null and, implicitly, not throw an exception.
+    assertNotNull(multimap.toString());
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testSerializable() {
+    multimap = createSample();
+    assertEquals(multimap, SerializableTester.reserialize(multimap));
+  }
+
+  public void testEmptyToString() {
+    Multimap<String, Integer> map = create();
+    assertEquals("{}", map.toString());
+    assertEquals("[]", map.entries().toString());
+  }
+
+  public void testEmptyGetToString() {
+    Multimap<String, Integer> map = create();
+    map.get("foo"); // shouldn't have any side-effect
+    assertEquals("{}", map.toString());
+    assertEquals("[]", map.entries().toString());
+  }
+
+  public void testGetRemoveToString() {
+    Multimap<String, Integer> map = create();
+    map.put("bar", 1);
+    map.put("foo", 2);
+    map.put("bar", 3);
+    map.get("foo").remove(2);
+    map.get("bar").remove(1);
+    assertEquals("{bar=[3]}", map.toString());
+    assertEquals("[bar=3]", map.entries().toString());
+  }
+
+  public void testRemoveToString() {
+    Multimap<String, Integer> map = create();
+    map.put("foo", 1);
+    map.put("foo", 2);
+    map.remove("foo", 1);
+    assertEquals("[foo=2]", map.entries().toString());
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/AbstractMultisetTest.java b/guava-tests/test/com/google/common/collect/AbstractMultisetTest.java
new file mode 100644
index 0000000..af50029
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/AbstractMultisetTest.java
@@ -0,0 +1,691 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static java.util.Arrays.asList;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.collect.Multiset.Entry;
+import com.google.common.collect.testing.google.UnmodifiableCollectionTests;
+import com.google.common.testing.SerializableTester;
+
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+import java.util.Set;
+
+/**
+ * Common tests for a {@link Multiset}.
+ *
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible(emulated = true)
+public abstract class AbstractMultisetTest extends AbstractCollectionTest {
+
+  @Override protected abstract <E> Multiset<E> create();
+
+  protected Multiset<String> ms;
+
+  // public for GWT
+  @Override public void setUp() throws Exception {
+    super.setUp();
+    c = ms = create();
+  }
+
+  /**
+   * Validates that multiset size returned by {@code size()} is the same as the
+   * size generated by summing the counts of all multiset entries.
+   */
+  protected void assertSize(Multiset<String> multiset) {
+    long size = 0;
+    for (Multiset.Entry<String> entry : multiset.entrySet()) {
+      size += entry.getCount();
+    }
+    assertEquals((int) Math.min(size, Integer.MAX_VALUE), multiset.size());
+  }
+
+  protected void assertSize() {
+    assertSize(ms);
+  }
+
+  @Override protected void assertContents(String... expected) {
+    super.assertContents(expected);
+    assertSize();
+  }
+
+  /**
+   * Don't run {@code NullPointerTester} on multisets, since they fail with
+   * Java 6 due to a bug in the JDK, as illustrated in the commented out
+   * method {@code HashMultisetTest#testAnnotations()}.
+   */
+  // TODO: Figure out if this is still true...
+  @GwtIncompatible("NullPointerTester")
+  @Override public void testNullPointerExceptions() throws Exception {}
+
+  public void testCountZero() {
+    assertEquals(0, ms.count("a"));
+    assertSize();
+  }
+
+  public void testCountOne() {
+    ms.add("a");
+    assertEquals(1, ms.count("a"));
+    assertSize();
+  }
+
+  public void testCountTwo() {
+    ms.add("a");
+    ms.add("a");
+    assertEquals(2, ms.count("a"));
+    assertSize();
+  }
+
+  public void testCountAfterRemoval() {
+    ms.add("a");
+    ms.remove("a");
+    assertEquals(0, ms.count("a"));
+    assertSize();
+  }
+
+  public void testCountNull() {
+    assertEquals(0, ms.count(null));
+  }
+
+  public void testCountWrongType() {
+    assertEquals(0, ms.count(new WrongType()));
+  }
+
+  static class WrongType {}
+
+  public void testAddNoneToNone() {
+    assertEquals(0, ms.add("a", 0));
+    assertContents();
+  }
+
+  public void testAddNoneToSome() {
+    ms.add("a");
+    assertEquals(1, ms.add("a", 0));
+    assertContents("a");
+  }
+
+  public void testAddSeveralAtOnce() {
+    assertEquals(0, ms.add("a", 3));
+    assertContents("a", "a", "a");
+  }
+
+  public void testAddSomeToSome() {
+    ms.add("a", 2);
+    assertEquals(2, ms.add("a", 3));
+    assertContents("a", "a", "a", "a", "a");
+  }
+
+  @Override public void testAddSeveralTimes() {
+    assertTrue(ms.add("a"));
+    assertTrue(ms.add("b"));
+    assertTrue(ms.add("a"));
+    assertTrue(ms.add("b"));
+    assertContents("a", "b", "a", "b");
+  }
+
+  public void testAddNegative() {
+    try {
+      ms.add("a", -1);
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+    assertSize();
+  }
+
+  @Override public void testEqualsNo() {
+    ms.add("a");
+    ms.add("b");
+    ms.add("b");
+
+    Multiset<String> ms2 = create();
+    ms2.add("a", 2);
+    ms2.add("b");
+
+    assertFalse(ms.equals(ms2));
+    assertSize();
+  }
+
+  public void testAddTooMany() {
+    ms.add("a", Integer.MAX_VALUE); // so far so good
+    ms.add("b", Integer.MAX_VALUE); // so far so good
+    try {
+      ms.add("a");
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+    assertSize();
+  }
+
+  public void testAddAllEmptySet() {
+    c = ms = createSample();
+    assertFalse(ms.addAll(Collections.<String>emptySet()));
+    assertEquals(createSample(), ms);
+    assertSize();
+  }
+
+  public void testAddAllEmptyMultiset() {
+    c = ms = createSample();
+    Multiset<String> empty = create();
+    assertFalse(ms.addAll(empty));
+    assertEquals(createSample(), ms);
+    assertSize();
+  }
+
+  public void testAddAllSet() {
+    c = ms = createSample();
+    Set<String> more = ImmutableSet.of("c", "d", "e");
+    assertTrue(ms.addAll(more));
+    assertContents("a", "b", "b", "c", "c", "d", "d", "d", "d", "e");
+  }
+
+  public void testAddAllMultiset() {
+    c = ms = createSample();
+    Multiset<String> more = HashMultiset.create(
+        asList("c", "c", "d", "d", "e"));
+    assertTrue(ms.addAll(more));
+    assertContents("a", "b", "b", "c", "c", "c", "d", "d", "d", "d", "d", "e");
+  }
+
+  public void testRemoveNoneFromNone() {
+    assertEquals(0, ms.remove("a", 0));
+    assertContents();
+  }
+
+  public void testRemoveNoneFromSome() {
+    ms.add("a");
+    assertEquals(1, ms.remove("a", 0));
+    assertContents("a");
+  }
+
+  public void testRemoveOneFromNone() {
+    assertEquals(0, ms.remove("a", 1));
+    assertContents();
+  }
+
+  public void testRemoveOneFromOne() {
+    ms.add("a");
+    assertEquals(1, ms.remove("a", 1));
+    assertContents();
+  }
+
+  public void testRemoveSomeFromSome() {
+    ms.add("a", 5);
+    assertEquals(5, ms.remove("a", 3));
+    assertContents("a", "a");
+  }
+
+  public void testRemoveTooMany() {
+    ms.add("a", 3);
+    assertEquals(3, ms.remove("a", 5));
+    assertContents();
+  }
+
+  public void testRemoveNegative() {
+    try {
+      ms.remove("a", -1);
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+    assertSize();
+  }
+
+  public void testContainsSeveral() {
+    ms.add("a", 3);
+    assertTrue(ms.contains(new String("a")));
+    assertSize();
+  }
+
+  public void testContainsAllNo() {
+    ms.add("a", 2);
+    ms.add("b", 3);
+    assertFalse(ms.containsAll(asList("a", "c")));
+    assertSize();
+  }
+
+  public void testContainsAllYes() {
+    ms.add("a", 2);
+    ms.add("b", 3);
+    ms.add("c", 4);
+    assertTrue(ms.containsAll(asList("a", "c")));
+    assertSize();
+  }
+
+  public void testRemoveAllOfOne() {
+    ms.add("a", 2);
+    ms.add("b");
+    assertTrue(ms.removeAll(asList("a", "c")));
+    assertContents("b");
+  }
+
+  public void testRemoveAllOfDisjoint() {
+    ms.add("a", 2);
+    ms.add("b");
+    assertFalse(ms.removeAll(asList("c", "d")));
+    assertContents("a", "a", "b");
+  }
+
+  public void testRemoveAllOfEverything() {
+    ms.add("a", 2);
+    ms.add("b");
+    assertTrue(ms.removeAll(asList("a", "b")));
+    assertContents();
+  }
+
+  public void testRetainAllOfOne() {
+    ms.add("a", 2);
+    ms.add("b");
+    assertTrue(ms.retainAll(asList("a", "c")));
+    assertContents("a", "a");
+  }
+
+  public void testRetainAllOfDisjoint() {
+    ms.add("a", 2);
+    ms.add("b");
+    assertTrue(ms.retainAll(asList("c", "d")));
+    assertContents();
+  }
+
+  public void testRetainAllOfEverything() {
+    ms.add("a", 2);
+    ms.add("b");
+    assertFalse(ms.retainAll(asList("a", "b")));
+    assertContents("a", "a", "b");
+  }
+
+  public void testContainsAllVacuousViaElementSet() {
+    assertTrue(ms.elementSet().containsAll(Collections.emptySet()));
+  }
+
+  public void testContainsAllNoViaElementSet() {
+    ms.add("a", 2);
+    ms.add("b", 3);
+    assertFalse(ms.elementSet().containsAll(asList("a", "c")));
+    assertSize();
+  }
+
+  public void testContainsAllYesViaElementSet() {
+    ms.add("a", 2);
+    ms.add("b", 3);
+    ms.add("c", 4);
+    assertTrue(ms.elementSet().containsAll(asList("a", "c")));
+    assertSize();
+  }
+
+  public void testRemoveAllVacuousViaElementSet() {
+    assertFalse(ms.elementSet().removeAll(Collections.emptySet()));
+    assertSize();
+  }
+
+  public void testRemoveAllOfOneViaElementSet() {
+    ms.add("a", 2);
+    ms.add("b");
+    assertTrue(ms.elementSet().removeAll(asList("a", "c")));
+    assertContents("b");
+  }
+
+  public void testRemoveAllOfDisjointViaElementSet() {
+    ms.add("a", 2);
+    ms.add("b");
+    assertFalse(ms.elementSet().removeAll(asList("c", "d")));
+    assertContents("a", "a", "b");
+  }
+
+  public void testRemoveAllOfEverythingViaElementSet() {
+    ms.add("a", 2);
+    ms.add("b");
+    assertTrue(ms.elementSet().removeAll(asList("a", "b")));
+    assertContents();
+  }
+
+  public void testRetainAllVacuousViaElementSet() {
+    assertFalse(ms.elementSet().retainAll(asList("a")));
+    assertContents();
+  }
+
+  public void testRetainAllOfNothingViaElementSet() {
+    ms.add("a");
+    assertTrue(ms.elementSet().retainAll(Collections.emptySet()));
+    assertContents();
+  }
+
+  public void testRetainAllOfOneViaElementSet() {
+    ms.add("a", 2);
+    ms.add("b");
+    assertTrue(ms.elementSet().retainAll(asList("a", "c")));
+    assertContents("a", "a");
+  }
+
+  public void testRetainAllOfDisjointViaElementSet() {
+    ms.add("a", 2);
+    ms.add("b");
+    assertTrue(ms.elementSet().retainAll(asList("c", "d")));
+    assertContents();
+  }
+
+  public void testRetainAllOfEverythingViaElementSet() {
+    ms.add("a", 2);
+    ms.add("b");
+    assertFalse(ms.elementSet().retainAll(asList("a", "b")));
+    assertContents("a", "a", "b");
+  }
+
+  public void testElementSetBasic() {
+    ms.add("a", 3);
+    ms.add("b", 2);
+    ms.add("c", 1);
+    HashSet<String> expected = Sets.newHashSet("a", "b", "c");
+    Set<String> actual = ms.elementSet();
+    assertEquals(expected, actual);
+    assertEquals(actual, expected);
+    assertSize();
+  }
+
+  public void testElementSetIsNotACopy() {
+    ms.add("a", 1);
+    ms.add("b", 2);
+    Set<String> elementSet = ms.elementSet();
+    ms.add("c", 3);
+    ms.setCount("b", 0);
+    assertEquals(Sets.newHashSet("a", "c"), elementSet);
+    assertSize();
+  }
+
+  public void testRemoveFromElementSetYes() {
+    ms.add("a", 1);
+    ms.add("b", 2);
+    Set<String> elementSet = ms.elementSet();
+    assertTrue(elementSet.remove("b"));
+    assertContents("a");
+  }
+
+  public void testRemoveFromElementSetNo() {
+    ms.add("a", 1);
+    Set<String> elementSet = ms.elementSet();
+    assertFalse(elementSet.remove("b"));
+    assertContents("a");
+  }
+
+  public void testRemoveFromElementSetNull() {
+    assertEquals(false, ms.elementSet().remove(null));
+  }
+
+  public void testRemoveFromElementSetWrongType() {
+    assertEquals(false, ms.elementSet().remove(new WrongType()));
+  }
+
+  public void testCantAddToElementSet() {
+    try {
+      ms.elementSet().add("a");
+      fail();
+    } catch (UnsupportedOperationException expected) {
+    }
+    assertSize();
+  }
+
+  public void testClearViaElementSet() {
+    ms = createSample();
+    ms.elementSet().clear();
+    assertContents();
+  }
+
+  public void testClearViaEntrySet() {
+    ms = createSample();
+    ms.entrySet().clear();
+    assertContents();
+  }
+
+  public void testEntrySet() {
+    ms = createSample();
+    for (Multiset.Entry<String> entry : ms.entrySet()) {
+      assertEquals(entry, entry);
+      String element = entry.getElement();
+      if (element.equals("a")) {
+        assertEquals(1, entry.getCount());
+      } else if (element.equals("b")) {
+        assertEquals(2, entry.getCount());
+      } else if (element.equals("c")) {
+        assertEquals(1, entry.getCount());
+      } else if (element.equals("d")) {
+        assertEquals(3, entry.getCount());
+      } else {
+        fail();
+      }
+    }
+    assertSize();
+  }
+
+  public void testEntrySetEmpty() {
+    assertEquals(Collections.emptySet(), ms.entrySet());
+  }
+
+  public void testReallyBig() {
+    ms.add("a", Integer.MAX_VALUE - 1);
+    assertEquals(Integer.MAX_VALUE - 1, ms.size());
+    ms.add("b", 3);
+
+    // See Collection.size() contract
+    assertEquals(Integer.MAX_VALUE, ms.size());
+
+    // Make sure we didn't forget our size
+    ms.remove("a", 4);
+    assertEquals(Integer.MAX_VALUE - 2, ms.size());
+    assertSize();
+  }
+
+  public void testToStringNull() {
+    ms.add("a", 3);
+    ms.add("c", 1);
+    ms.add("b", 2);
+    ms.add(null, 4);
+
+    // This test is brittle. The original test was meant to validate the
+    // contents of the string itself, but key ordering tended to change
+    // under unpredictable circumstances. Instead, we're just ensuring
+    // that the string not return null, and implicitly, not throw an exception.
+    assertNotNull(ms.toString());
+    assertSize();
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testSerializable() {
+    ms = createSample();
+    assertEquals(ms, SerializableTester.reserialize(ms));
+    assertSize();
+  }
+
+  public void testIteratorRemove() {
+    ms.add("a");
+    ms.add("b");
+    ms.add("c");
+    Iterator<String> iterator = ms.iterator();
+    String element1 = iterator.next();
+    iterator.remove();
+    String element2 = iterator.next();
+    assertFalse(ms.contains(element1));
+    assertTrue(ms.contains(element2));
+    assertSize();
+  }
+
+  public void testIteratorRemoveRepeated() {
+    ms.add("a", 3);
+    ms.add("b", 1);
+    ms.add("c", 2);
+    Iterator<String> iterator = ms.iterator();
+    for (int i = 0; i < 6; i++) {
+      assertTrue(iterator.hasNext());
+      iterator.next();
+      iterator.remove();
+    }
+    assertFalse(iterator.hasNext());
+    assertTrue(ms.isEmpty());
+    assertSize();
+  }
+
+  public void testIteratorRemoveTooSoon() {
+    ms.add("a");
+    ms.add("b");
+    ms.add("c");
+    Iterator<String> iterator = ms.iterator();
+    try {
+      iterator.remove();
+      fail();
+    } catch (IllegalStateException expected) {}
+    assertSize();
+  }
+
+  public void testIteratorRemoveTwiceConsecutive() {
+    ms.add("a");
+    ms.add("b");
+    ms.add("c");
+    Iterator<String> iterator = ms.iterator();
+    iterator.next();
+    iterator.remove();
+    try {
+      iterator.remove();
+      fail();
+    } catch (IllegalStateException expected) {}
+    assertSize();
+  }
+
+  public void testIteratorNoSuchElementException() {
+    ms.add("a");
+    ms.add("b");
+    ms.add("c");
+    Iterator<String> iterator = ms.iterator();
+    iterator.next();
+    iterator.next();
+    iterator.next();
+    try {
+      iterator.next();
+      fail();
+    } catch (NoSuchElementException expected) {}
+    assertSize();
+  }
+
+  public void testEntryAfterRemove() {
+    ms.add("a", 8);
+    Multiset.Entry<String> entry = ms.entrySet().iterator().next();
+    assertEquals(8, entry.getCount());
+    ms.remove("a");
+    assertEquals(7, entry.getCount());
+    ms.remove("a", 4);
+    assertEquals(3, entry.getCount());
+    ms.elementSet().remove("a");
+    assertEquals(0, entry.getCount());
+    ms.add("a", 5);
+    assertEquals(5, entry.getCount());
+  }
+
+  public void testEntryAfterClear() {
+    ms.add("a", 3);
+    Multiset.Entry<String> entry = ms.entrySet().iterator().next();
+    ms.clear();
+    assertEquals(0, entry.getCount());
+    ms.add("a", 5);
+    assertEquals(5, entry.getCount());
+  }
+
+  public void testEntryAfterEntrySetClear() {
+    ms.add("a", 3);
+    Multiset.Entry<String> entry = ms.entrySet().iterator().next();
+    ms.entrySet().clear();
+    assertEquals(0, entry.getCount());
+    ms.add("a", 5);
+    assertEquals(5, entry.getCount());
+  }
+
+  public void testEntryAfterEntrySetIteratorRemove() {
+    ms.add("a", 3);
+    Iterator<Multiset.Entry<String>> iterator = ms.entrySet().iterator();
+    Multiset.Entry<String> entry = iterator.next();
+    iterator.remove();
+    assertEquals(0, entry.getCount());
+    try {
+      iterator.remove();
+      fail();
+    } catch (IllegalStateException expected) {}
+    ms.add("a", 5);
+    assertEquals(5, entry.getCount());
+  }
+
+  public void testEntryAfterElementSetIteratorRemove() {
+    ms.add("a", 3);
+    Multiset.Entry<String> entry = ms.entrySet().iterator().next();
+    Iterator<String> iterator = ms.elementSet().iterator();
+    iterator.next();
+    iterator.remove();
+    assertEquals(0, entry.getCount());
+    ms.add("a", 5);
+    assertEquals(5, entry.getCount());
+  }
+
+  public void testEntrySetContains() {
+    ms.add("a", 3);
+    Set<Entry<String>> es = ms.entrySet();
+    assertTrue(es.contains(Multisets.immutableEntry("a", 3)));
+    assertFalse(es.contains(null));
+    assertFalse(es.contains(Maps.immutableEntry("a", 3)));
+    assertFalse(es.contains(Multisets.immutableEntry("a", 2)));
+    assertFalse(es.contains(Multisets.immutableEntry("b", 3)));
+    assertFalse(es.contains(Multisets.immutableEntry("b", 0)));
+  }
+
+  public void testEntrySetRemove() {
+    ms.add("a", 3);
+    Set<Entry<String>> es = ms.entrySet();
+    assertFalse(es.remove(null));
+    assertFalse(es.remove(Maps.immutableEntry("a", 3)));
+    assertFalse(es.remove(Multisets.immutableEntry("a", 2)));
+    assertFalse(es.remove(Multisets.immutableEntry("b", 3)));
+    assertFalse(es.remove(Multisets.immutableEntry("b", 0)));
+    assertEquals(3, ms.count("a"));
+    assertTrue(es.remove(Multisets.immutableEntry("a", 3)));
+    assertEquals(0, ms.count("a"));
+  }
+
+  public void testEntrySetToArray() {
+    ms.add("a", 3);
+    Set<Multiset.Entry<String>> es = ms.entrySet();
+    Entry<?>[] array = new Entry<?>[3];
+    assertSame(array, es.toArray(array));
+    assertEquals(Multisets.immutableEntry("a", 3), array[0]);
+    assertNull(array[1]);
+  }
+
+  public void testUnmodifiableMultiset() {
+    ms.add("a", 3);
+    ms.add("b");
+    ms.add("c", 2);
+    Multiset<Object> unmodifiable = Multisets.<Object>unmodifiableMultiset(ms);
+    UnmodifiableCollectionTests.assertMultisetIsUnmodifiable(unmodifiable, "a");
+  }
+
+  @Override protected Multiset<String> createSample() {
+    Multiset<String> ms = create();
+    ms.add("a", 1);
+    ms.add("b", 2);
+    ms.add("c", 1);
+    ms.add("d", 3);
+    return ms;
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/AbstractSetMultimapTest.java b/guava-tests/test/com/google/common/collect/AbstractSetMultimapTest.java
new file mode 100644
index 0000000..e2593a2
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/AbstractSetMultimapTest.java
@@ -0,0 +1,187 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static java.util.Arrays.asList;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Tests for {@code SetMultimap} implementations.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible
+public abstract class AbstractSetMultimapTest extends AbstractMultimapTest {
+
+  public void testDuplicates() {
+    Multimap<String, Integer> multimap = getMultimap();
+    assertTrue(multimap.put("foo", 1));
+    assertTrue(multimap.put("foo", 3));
+    assertTrue(multimap.put("bar", 3));
+    assertFalse(multimap.put("foo", 1));
+    assertSize(3);
+    assertTrue(multimap.containsEntry("foo", 1));
+    assertTrue(multimap.remove("foo", 1));
+    assertSize(2);
+    assertFalse(multimap.containsEntry("foo", 1));
+  }
+
+  public void testGetEquals() {
+    Multimap<String, Integer> multimap = getMultimap();
+    multimap.put("foo", 1);
+    multimap.put("foo", 3);
+    assertEquals(ImmutableSet.of(1, 3), multimap.get("foo"));
+  }
+
+  public void testAsMapEquals() {
+    Multimap<String, Integer> multimap = getMultimap();
+    multimap.put("foo", 1);
+    multimap.put("foo", nullValue());
+    multimap.put(nullKey(), 3);
+    Map<String, Collection<Integer>> map = multimap.asMap();
+
+    Map<String, Collection<Integer>> equalMap = Maps.newHashMap();
+    equalMap.put("foo", Sets.newHashSet(1, nullValue()));
+    equalMap.put(nullKey(), Sets.newHashSet(3));
+    assertEquals(map, equalMap);
+    assertEquals(equalMap, map);
+    assertEquals(equalMap.hashCode(), multimap.hashCode());
+
+    Map<String, Collection<Integer>> unequalMap = Maps.newHashMap();
+    equalMap.put("foo", Sets.newHashSet(3, nullValue()));
+    equalMap.put(nullKey(), Sets.newHashSet(1));
+    assertFalse(map.equals(unequalMap));
+    assertFalse(unequalMap.equals(map));
+  }
+
+  public void testAsMapEntriesEquals() {
+    Multimap<String, Integer> multimap = getMultimap();
+    multimap.put("foo", 1);
+    multimap.put("foo", 3);
+    Set<Map.Entry<String, Collection<Integer>>> set
+        = multimap.asMap().entrySet();
+
+    Iterator<Map.Entry<String, Collection<Integer>>> i = set.iterator();
+    Map.Entry<String, Collection<Integer>> expected =
+        Maps.immutableEntry(
+            "foo", (Collection<Integer>) ImmutableSet.of(1, 3));
+    Map.Entry<String, Collection<Integer>> entry = i.next();
+    assertEquals(expected, entry);
+    assertFalse(i.hasNext());
+
+    assertTrue(Collections.singleton(expected).equals(set));
+    assertTrue(set.equals(Collections.singleton(expected)));
+
+    Map.Entry<?, ?>[] array = new Map.Entry<?, ?>[3];
+    array[1] = Maps.immutableEntry("another", "entry");
+    assertSame(array, set.toArray(array));
+    assertEquals(entry, array[0]);
+    assertNull(array[1]);
+  }
+
+  @SuppressWarnings("unchecked")
+  public void testAsMapValues() {
+    Multimap<String, Integer> multimap = create();
+    Collection<Collection<Integer>> asMapValues = multimap.asMap().values();
+    multimap.put("foo", 1);
+    multimap.put("foo", 3);
+
+    Collection<?>[] array = new Collection<?>[3];
+    array[1] = Collections.emptyList();
+    assertSame(array, asMapValues.toArray(array));
+    assertEquals(Sets.newHashSet(1, 3), array[0]);
+    assertNull(array[1]);
+
+    multimap.put("bar", 3);
+    assertTrue(asMapValues.containsAll(
+        asList(Sets.newHashSet(1, 3), Sets.newHashSet(3))));
+    assertFalse(asMapValues.containsAll(
+        asList(Sets.newHashSet(1, 3), Sets.newHashSet(1))));
+    assertFalse(asMapValues.remove(ImmutableSet.of(1, 2)));
+    assertEquals(3, multimap.size());
+    assertTrue(asMapValues.remove(ImmutableSet.of(1, 3)));
+    assertEquals(1, multimap.size());
+  }
+
+  public void testPutReturn() {
+    Multimap<String, Integer> multimap = getMultimap();
+    assertTrue(multimap.put("foo", 1));
+    assertFalse(multimap.put("foo", 1));
+    assertTrue(multimap.put("foo", 3));
+    assertTrue(multimap.put("bar", 5));
+  }
+
+  public void testPutAllReturn_existingElements() {
+    Multimap<String, Integer> multimap = create();
+    assertTrue(multimap.putAll("foo", asList(1, 2, 3)));
+    assertFalse(multimap.put("foo", 1));
+    assertFalse(multimap.putAll("foo", asList(1, 2, 3)));
+    assertFalse(multimap.putAll("foo", asList(1, 3)));
+    assertTrue(multimap.putAll("foo", asList(1, 2, 4)));
+
+    Multimap<String, Integer> other = create();
+    other.putAll("foo", asList(1, 2));
+    assertFalse(multimap.putAll(other));
+
+    other.putAll("bar", asList(1, 2));
+    assertTrue(multimap.putAll(other));
+    assertTrue(other.putAll(multimap));
+    assertTrue(other.equals(multimap));
+  }
+
+  @SuppressWarnings("unchecked")
+  public void testEntriesEquals() {
+    Multimap<String, Integer> multimap = getMultimap();
+    multimap.put("foo", 1);
+    multimap.put("foo", 3);
+    multimap.put("bar", 3);
+    Collection<Map.Entry<String, Integer>> entries = multimap.entries();
+
+    Set<Map.Entry<String, Integer>> same = Sets.newHashSet(
+        Maps.immutableEntry("foo", 3),
+        Maps.immutableEntry("bar", 3),
+        Maps.immutableEntry("foo", 1));
+    assertEquals(entries, same);
+    assertEquals(same, entries);
+    assertEquals(entries.hashCode(), same.hashCode());
+
+    assertFalse(entries.equals(null));
+    assertFalse(entries.equals("foo"));
+
+    Set<Map.Entry<String, Integer>> different3 = Sets.newHashSet(
+        Maps.immutableEntry("foo", 3),
+        Maps.immutableEntry("bar", 3),
+        Maps.immutableEntry("bar", 1));
+    assertFalse(entries.equals(different3));
+    assertFalse(different3.equals(entries));
+
+    Set<Map.Entry<String, Integer>> different4 = Sets.newHashSet(
+        Maps.immutableEntry("foo", 3),
+        Maps.immutableEntry("bar", 3),
+        Maps.immutableEntry("bar", 1),
+        Maps.immutableEntry("foo", 1));
+    assertFalse(entries.equals(different4));
+    assertFalse(different4.equals(entries));
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/AbstractTableReadTest.java b/guava-tests/test/com/google/common/collect/AbstractTableReadTest.java
new file mode 100644
index 0000000..b808951
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/AbstractTableReadTest.java
@@ -0,0 +1,195 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.base.Objects;
+import com.google.common.testing.EqualsTester;
+import com.google.common.testing.NullPointerTester;
+
+import junit.framework.TestCase;
+
+/**
+ * Test cases for {@link Table} read operations.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible(emulated = true)
+public abstract class AbstractTableReadTest extends TestCase {
+  protected Table<String, Integer, Character> table;
+
+  /**
+   * Creates a table with the specified data.
+   *
+   * @param data the table data, repeating the sequence row key, column key,
+   *     value once per mapping
+   * @throws IllegalArgumentException if the size of {@code data} isn't a
+   *     multiple of 3
+   * @throws ClassCastException if a data element has the wrong type
+   */
+  protected abstract Table<String, Integer, Character>
+      create(Object... data);
+
+  protected void assertSize(int expectedSize) {
+    assertEquals(expectedSize, table.size());
+  }
+
+  @Override public void setUp() throws Exception {
+    super.setUp();
+    table = create();
+  }
+
+  public void testContains() {
+    table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
+    assertTrue(table.contains("foo", 1));
+    assertTrue(table.contains("bar", 1));
+    assertTrue(table.contains("foo", 3));
+    assertFalse(table.contains("foo", 2));
+    assertFalse(table.contains("bar", 3));
+    assertFalse(table.contains("cat", 1));
+    assertFalse(table.contains("foo", null));
+    assertFalse(table.contains(null, 1));
+    assertFalse(table.contains(null, null));
+  }
+
+  public void testContainsRow() {
+    table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
+    assertTrue(table.containsRow("foo"));
+    assertTrue(table.containsRow("bar"));
+    assertFalse(table.containsRow("cat"));
+    assertFalse(table.containsRow(null));
+  }
+
+  public void testContainsColumn() {
+    table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
+    assertTrue(table.containsColumn(1));
+    assertTrue(table.containsColumn(3));
+    assertFalse(table.containsColumn(2));
+    assertFalse(table.containsColumn(null));
+  }
+
+  public void testContainsValue() {
+    table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
+    assertTrue(table.containsValue('a'));
+    assertTrue(table.containsValue('b'));
+    assertTrue(table.containsValue('c'));
+    assertFalse(table.containsValue('x'));
+    assertFalse(table.containsValue(null));
+  }
+
+  public void testGet() {
+    table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
+    assertEquals((Character) 'a', table.get("foo", 1));
+    assertEquals((Character) 'b', table.get("bar", 1));
+    assertEquals((Character) 'c', table.get("foo", 3));
+    assertNull(table.get("foo", 2));
+    assertNull(table.get("bar", 3));
+    assertNull(table.get("cat", 1));
+    assertNull(table.get("foo", null));
+    assertNull(table.get(null, 1));
+    assertNull(table.get(null, null));
+  }
+
+  public void testIsEmpty() {
+    assertTrue(table.isEmpty());
+    table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
+    assertFalse(table.isEmpty());
+  }
+
+  public void testSize() {
+    assertSize(0);
+    table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
+    assertSize(3);
+  }
+
+  public void testEquals() {
+    table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
+    Table<String, Integer, Character> hashCopy = HashBasedTable.create(table);
+    Table<String, Integer, Character> reordered
+        = create("foo", 3, 'c', "foo", 1, 'a', "bar", 1, 'b');
+    Table<String, Integer, Character> smaller
+        = create("foo", 1, 'a', "bar", 1, 'b');
+    Table<String, Integer, Character> swapOuter
+        = create("bar", 1, 'a', "foo", 1, 'b', "bar", 3, 'c');
+    Table<String, Integer, Character> swapValues
+        = create("foo", 1, 'c', "bar", 1, 'b', "foo", 3, 'a');
+
+    new EqualsTester()
+        .addEqualityGroup(table, hashCopy, reordered)
+        .addEqualityGroup(smaller)
+        .addEqualityGroup(swapOuter)
+        .addEqualityGroup(swapValues)
+        .testEquals();
+  }
+
+  public void testHashCode() {
+    table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
+    int expected = Objects.hashCode("foo", 1, 'a')
+        + Objects.hashCode("bar", 1, 'b')
+        + Objects.hashCode("foo", 3, 'c');
+    assertEquals(expected, table.hashCode());
+  }
+
+  public void testToStringSize1() {
+    table = create("foo", 1, 'a');
+    assertEquals("{foo={1=a}}", table.toString());
+  }
+
+  public void testRow() {
+    table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
+    assertEquals(ImmutableMap.of(1, 'a', 3, 'c'), table.row("foo"));
+  }
+
+  // This test assumes that the implementation does not support null keys.
+  public void testRowNull() {
+    table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
+    try {
+      table.row(null);
+      fail();
+    } catch (NullPointerException expected) {}
+  }
+
+  public void testColumn() {
+    table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
+    assertEquals(ImmutableMap.of("foo", 'a', "bar", 'b'), table.column(1));
+  }
+
+  // This test assumes that the implementation does not support null keys.
+  public void testColumnNull() {
+    table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
+    try {
+      table.column(null);
+      fail();
+    } catch (NullPointerException expected) {}
+  }
+
+  public void testColumnSetPartialOverlap() {
+    table = create(
+        "foo", 1, 'a', "bar", 1, 'b', "foo", 2, 'c', "bar", 3, 'd');
+    ASSERT.that(table.columnKeySet()).hasContentsAnyOrder(1, 2, 3);
+  }
+
+  @GwtIncompatible("NullPointerTester")
+  public void testNullPointerInstance() throws Exception {
+    table = create(
+        "foo", 1, 'a', "bar", 1, 'b', "foo", 2, 'c', "bar", 3, 'd');
+    new NullPointerTester().testAllPublicInstanceMethods(table);
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/AbstractTableTest.java b/guava-tests/test/com/google/common/collect/AbstractTableTest.java
new file mode 100644
index 0000000..7b1eb2d
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/AbstractTableTest.java
@@ -0,0 +1,172 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkArgument;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Map;
+
+/**
+ * Test cases for a {@link Table} implementation supporting reads and writes.
+ *
+ * @author Jared Levy
+ * @author Louis Wasserman
+ */
+@GwtCompatible
+public abstract class AbstractTableTest extends AbstractTableReadTest {
+
+  protected void populate(
+      Table<String, Integer, Character> table, Object... data) {
+    checkArgument(data.length % 3 == 0);
+    for (int i = 0; i < data.length; i+= 3) {
+      table.put(
+          (String) data[i], (Integer) data[i+1], (Character) data[i+2]);
+    }
+  }
+
+  protected boolean supportsRemove() {
+    return true;
+  }
+
+  protected boolean supportsNullValues() {
+    return false;
+  }
+
+  public void testClear() {
+    table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
+    if (supportsRemove()) {
+      table.clear();
+      assertEquals(0, table.size());
+      assertFalse(table.containsRow("foo"));
+    } else {
+      try {
+        table.clear();
+        fail();
+      } catch (UnsupportedOperationException expected) {}
+    }
+  }
+
+  public void testPut() {
+    assertNull(table.put("foo", 1, 'a'));
+    assertNull(table.put("bar", 1, 'b'));
+    assertNull(table.put("foo", 3, 'c'));
+    assertEquals((Character) 'a', table.put("foo", 1, 'd'));
+    assertEquals((Character) 'd', table.get("foo", 1));
+    assertEquals((Character) 'b', table.get("bar", 1));
+    assertSize(3);
+    assertEquals((Character) 'd', table.put("foo", 1, 'd'));
+    assertEquals((Character) 'd', table.get("foo", 1));
+    assertSize(3);
+  }
+
+  // This test assumes that the implementation does not support nulls.
+  public void testPutNull() {
+    table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
+    assertSize(3);
+    try {
+      table.put(null, 2, 'd');
+      fail();
+    } catch (NullPointerException expected) {}
+    try {
+      table.put("cat", null, 'd');
+      fail();
+    } catch (NullPointerException expected) {}
+    if (supportsNullValues()) {
+      assertNull(table.put("cat", 2, null));
+      assertTrue(table.contains("cat", 2));
+    } else {
+      try {
+        table.put("cat", 2, null);
+        fail();
+      } catch (NullPointerException expected) {}
+    }
+    assertSize(3);
+  }
+
+  public void testPutNullReplace() {
+    table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
+
+    if (supportsNullValues()) {
+      assertEquals((Character) 'b', table.put("bar", 1, null));
+      assertNull(table.get("bar", 1));
+    } else {
+      try {
+        table.put("bar", 1, null);
+        fail();
+      } catch (NullPointerException expected) {}
+    }
+  }
+
+  public void testPutAllTable() {
+    table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
+    Table<String, Integer, Character> other = HashBasedTable.create();
+    other.put("foo", 1, 'd');
+    other.put("bar", 2, 'e');
+    other.put("cat", 2, 'f');
+    table.putAll(other);
+    assertEquals((Character) 'd', table.get("foo", 1));
+    assertEquals((Character) 'b', table.get("bar", 1));
+    assertEquals((Character) 'c', table.get("foo", 3));
+    assertEquals((Character) 'e', table.get("bar", 2));
+    assertEquals((Character) 'f', table.get("cat", 2));
+    assertSize(5);
+  }
+
+  public void testRemove() {
+    table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
+    if (supportsRemove()) {
+      assertNull(table.remove("cat", 1));
+      assertNull(table.remove("bar", 3));
+      assertEquals(3, table.size());
+      assertEquals((Character) 'c', table.remove("foo", 3));
+      assertEquals(2, table.size());
+      assertEquals((Character) 'a', table.get("foo", 1));
+      assertEquals((Character) 'b', table.get("bar", 1));
+      assertNull(table.get("foo", 3));
+      assertNull(table.remove(null, 1));
+      assertNull(table.remove("foo", null));
+      assertNull(table.remove(null, null));
+      assertSize(2);
+    } else {
+      try {
+        table.remove("foo", 3);
+        fail();
+      } catch (UnsupportedOperationException expected) {}
+      assertEquals((Character) 'c', table.get("foo", 3));
+    }
+  }
+
+  public void testRowClearAndPut() {
+    if (supportsRemove()) {
+      table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
+      Map<Integer, Character> row = table.row("foo");
+      assertEquals(ImmutableMap.of(1, 'a', 3, 'c'), row);
+      table.remove("foo", 3);
+      assertEquals(ImmutableMap.of(1, 'a'), row);
+      table.remove("foo", 1);
+      assertEquals(ImmutableMap.of(), row);
+      table.put("foo", 2, 'b');
+      assertEquals(ImmutableMap.of(2, 'b'), row);
+      row.clear();
+      assertEquals(ImmutableMap.of(), row);
+      table.put("foo", 5, 'x');
+      assertEquals(ImmutableMap.of(5, 'x'), row);
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/ArrayListMultimapTest.java b/guava-tests/test/com/google/common/collect/ArrayListMultimapTest.java
new file mode 100644
index 0000000..ca53f2c
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/ArrayListMultimapTest.java
@@ -0,0 +1,154 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static java.util.Arrays.asList;
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.ConcurrentModificationException;
+import java.util.List;
+import java.util.RandomAccess;
+
+/**
+ * Unit tests for {@code ArrayListMultimap}.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible
+public class ArrayListMultimapTest extends AbstractListMultimapTest {
+
+  @Override protected ListMultimap<String, Integer> create() {
+    return ArrayListMultimap.create();
+  }
+
+  /**
+   * Confirm that get() returns a List implementing RandomAccess.
+   */
+  public void testGetRandomAccess() {
+    Multimap<String, Integer> multimap = create();
+    multimap.put("foo", 1);
+    multimap.put("foo", 3);
+    assertTrue(multimap.get("foo") instanceof RandomAccess);
+    assertTrue(multimap.get("bar") instanceof RandomAccess);
+  }
+
+  /**
+   * Confirm that removeAll() returns a List implementing RandomAccess.
+   */
+  public void testRemoveAllRandomAccess() {
+    Multimap<String, Integer> multimap = create();
+    multimap.put("foo", 1);
+    multimap.put("foo", 3);
+    assertTrue(multimap.removeAll("foo") instanceof RandomAccess);
+    assertTrue(multimap.removeAll("bar") instanceof RandomAccess);
+  }
+
+  /**
+   * Confirm that replaceValues() returns a List implementing RandomAccess.
+   */
+  public void testReplaceValuesRandomAccess() {
+    Multimap<String, Integer> multimap = create();
+    multimap.put("foo", 1);
+    multimap.put("foo", 3);
+    assertTrue(multimap.replaceValues("foo", asList(2, 4))
+        instanceof RandomAccess);
+    assertTrue(multimap.replaceValues("bar", asList(2, 4))
+        instanceof RandomAccess);
+  }
+
+  /**
+   * Test throwing ConcurrentModificationException when a sublist's ancestor's
+   * delegate changes.
+   */
+  public void testSublistConcurrentModificationException() {
+    ListMultimap<String, Integer> multimap = create();
+    multimap.putAll("foo", asList(1, 2, 3, 4, 5));
+    List<Integer> list = multimap.get("foo");
+    ASSERT.that(multimap.get("foo")).hasContentsInOrder(1, 2, 3, 4, 5);
+    List<Integer> sublist = list.subList(0, 5);
+    ASSERT.that(sublist).hasContentsInOrder(1, 2, 3, 4, 5);
+
+    sublist.clear();
+    assertTrue(sublist.isEmpty());
+    multimap.put("foo", 6);
+
+    try {
+      sublist.isEmpty();
+      fail("Expected ConcurrentModificationException");
+    } catch (ConcurrentModificationException expected) {}
+  }
+
+  public void testCreateFromMultimap() {
+    Multimap<String, Integer> multimap = createSample();
+    ArrayListMultimap<String, Integer> copy
+        = ArrayListMultimap.create(multimap);
+    assertEquals(multimap, copy);
+  }
+
+  public void testCreate() {
+    ArrayListMultimap<String, Integer> multimap
+        = ArrayListMultimap.create();
+    assertEquals(10, multimap.expectedValuesPerKey);
+  }
+
+  public void testCreateFromSizes() {
+    ArrayListMultimap<String, Integer> multimap
+        = ArrayListMultimap.create(15, 20);
+    assertEquals(20, multimap.expectedValuesPerKey);
+  }
+
+  public void testCreateFromIllegalSizes() {
+    try {
+      ArrayListMultimap.create(15, -2);
+      fail();
+    } catch (IllegalArgumentException expected) {}
+
+    try {
+      ArrayListMultimap.create(-15, 2);
+      fail();
+    } catch (IllegalArgumentException expected) {}
+  }
+
+  public void testCreateFromHashMultimap() {
+    Multimap<String, Integer> original = HashMultimap.create();
+    ArrayListMultimap<String, Integer> multimap
+        = ArrayListMultimap.create(original);
+    assertEquals(10, multimap.expectedValuesPerKey);
+  }
+
+  public void testCreateFromArrayListMultimap() {
+    ArrayListMultimap<String, Integer> original
+        = ArrayListMultimap.create(15, 20);
+    ArrayListMultimap<String, Integer> multimap
+        = ArrayListMultimap.create(original);
+    assertEquals(20, multimap.expectedValuesPerKey);
+  }
+
+  public void testTrimToSize() {
+    ArrayListMultimap<String, Integer> multimap
+        = ArrayListMultimap.create();
+    multimap.put("foo", 1);
+    multimap.put("foo", 2);
+    multimap.put("bar", 3);
+    multimap.trimToSize();
+    assertEquals(3, multimap.size());
+    ASSERT.that(multimap.get("foo")).hasContentsInOrder(1, 2);
+    ASSERT.that(multimap.get("bar")).hasContentsInOrder(3);
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/ArrayTableTest.java b/guava-tests/test/com/google/common/collect/ArrayTableTest.java
new file mode 100644
index 0000000..8c2bf0c
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/ArrayTableTest.java
@@ -0,0 +1,456 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static java.util.Arrays.asList;
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import com.google.common.base.Objects;
+import com.google.common.collect.Table.Cell;
+import com.google.common.testing.EqualsTester;
+import com.google.common.testing.NullPointerTester;
+import com.google.common.testing.SerializableTester;
+
+import java.util.Arrays;
+import java.util.Map;
+
+/**
+ * Test cases for {@link ArrayTable}.
+ *
+ * @author Jared Levy
+ */
+public class ArrayTableTest extends AbstractTableTest {
+
+  @Override protected ArrayTable<String, Integer, Character> create(
+      Object... data) {
+    // TODO: Specify different numbers of rows and columns, to detect problems
+    // that arise when the wrong size is used.
+    ArrayTable<String, Integer, Character> table =
+        ArrayTable.create(asList("foo", "bar", "cat"), asList(1, 2, 3));
+    populate(table, data);
+    return table;
+  }
+
+  @Override protected void assertSize(int expectedSize) {
+    assertEquals(9, table.size());
+  }
+
+  @Override protected boolean supportsRemove() {
+    return false;
+  }
+
+  @Override protected boolean supportsNullValues() {
+    return true;
+  }
+
+  // Overriding tests of behavior that differs for ArrayTable.
+
+  @Override public void testContains() {
+    table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
+    assertTrue(table.contains("foo", 1));
+    assertTrue(table.contains("bar", 1));
+    assertTrue(table.contains("foo", 3));
+    assertTrue(table.contains("foo", 2));
+    assertTrue(table.contains("bar", 3));
+    assertTrue(table.contains("cat", 1));
+    assertFalse(table.contains("foo", -1));
+    assertFalse(table.contains("bad", 1));
+    assertFalse(table.contains("bad", -1));
+    assertFalse(table.contains("foo", null));
+    assertFalse(table.contains(null, 1));
+    assertFalse(table.contains(null, null));
+  }
+
+  @Override public void testContainsRow() {
+    table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
+    assertTrue(table.containsRow("foo"));
+    assertTrue(table.containsRow("bar"));
+    assertTrue(table.containsRow("cat"));
+    assertFalse(table.containsRow("bad"));
+    assertFalse(table.containsRow(null));
+  }
+
+  @Override public void testContainsColumn() {
+    table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
+    assertTrue(table.containsColumn(1));
+    assertTrue(table.containsColumn(3));
+    assertTrue(table.containsColumn(2));
+    assertFalse(table.containsColumn(-1));
+    assertFalse(table.containsColumn(null));
+  }
+
+  @Override public void testContainsValue() {
+    table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
+    assertTrue(table.containsValue('a'));
+    assertTrue(table.containsValue('b'));
+    assertTrue(table.containsValue('c'));
+    assertFalse(table.containsValue('x'));
+    assertTrue(table.containsValue(null));
+  }
+
+  @Override public void testIsEmpty() {
+    assertFalse(table.isEmpty());
+    table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
+    assertFalse(table.isEmpty());
+  }
+
+  @Override public void testEquals() {
+    table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
+    Table<String, Integer, Character> hashCopy = HashBasedTable.create();
+    hashCopy.put("foo", 1, 'a');
+    hashCopy.put("bar", 1, 'b');
+    hashCopy.put("foo", 3, 'c');
+    Table<String, Integer, Character> reordered
+        = create("foo", 3, 'c', "foo", 1, 'a', "bar", 1, 'b');
+    Table<String, Integer, Character> smaller
+        = create("foo", 1, 'a', "bar", 1, 'b');
+    Table<String, Integer, Character> swapOuter
+        = create("bar", 1, 'a', "foo", 1, 'b', "bar", 3, 'c');
+    Table<String, Integer, Character> swapValues
+        = create("foo", 1, 'c', "bar", 1, 'b', "foo", 3, 'a');
+
+    new EqualsTester()
+        .addEqualityGroup(table, reordered)
+        .addEqualityGroup(hashCopy)
+        .addEqualityGroup(smaller)
+        .addEqualityGroup(swapOuter)
+        .addEqualityGroup(swapValues)
+        .testEquals();
+  }
+
+  @Override public void testHashCode() {
+    table = ArrayTable.create(asList("foo", "bar"), asList(1, 3));
+    table.put("foo", 1, 'a');
+    table.put("bar", 1, 'b');
+    table.put("foo", 3, 'c');
+    int expected = Objects.hashCode("foo", 1, 'a')
+        + Objects.hashCode("bar", 1, 'b')
+        + Objects.hashCode("foo", 3, 'c')
+        + Objects.hashCode("bar", 3, 0);
+    assertEquals(expected, table.hashCode());
+  }
+
+  @Override public void testRow() {
+    table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
+    Map<Integer, Character> expected = Maps.newHashMap();
+    expected.put(1, 'a');
+    expected.put(3, 'c');
+    expected.put(2, null);
+    assertEquals(expected, table.row("foo"));
+  }
+
+  @Override public void testColumn() {
+    table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
+    Map<String, Character> expected = Maps.newHashMap();
+    expected.put("foo", 'a');
+    expected.put("bar", 'b');
+    expected.put("cat", null);
+    assertEquals(expected, table.column(1));
+  }
+
+  @Override public void testToStringSize1() {
+    table = ArrayTable.create(ImmutableList.of("foo"), ImmutableList.of(1));
+    table.put("foo", 1, 'a');
+    assertEquals("{foo={1=a}}", table.toString());
+  }
+
+  public void testCreateDuplicateRows() {
+    try {
+      ArrayTable.create(asList("foo", "bar", "foo"), asList(1, 2, 3));
+      fail();
+    } catch (IllegalArgumentException expected) {}
+  }
+
+  public void testCreateDuplicateColumns() {
+    try {
+      ArrayTable.create(asList("foo", "bar"), asList(1, 2, 3, 2));
+      fail();
+    } catch (IllegalArgumentException expected) {}
+  }
+
+  public void testCreateEmptyRows() {
+    try {
+      ArrayTable.create(Arrays.<String>asList(), asList(1, 2, 3));
+      fail();
+    } catch (IllegalArgumentException expected) {}
+  }
+
+  public void testCreateEmptyColumns() {
+    try {
+      ArrayTable.create(asList("foo", "bar"), Arrays.<Integer>asList());
+      fail();
+    } catch (IllegalArgumentException expected) {}
+  }
+
+  public void testCreateCopyArrayTable() {
+    Table<String, Integer, Character> original
+        = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
+    Table<String, Integer, Character> copy = ArrayTable.create(original);
+    assertEquals(original, copy);
+    original.put("foo", 1, 'd');
+    assertEquals((Character) 'd', original.get("foo", 1));
+    assertEquals((Character) 'a', copy.get("foo", 1));
+    assertEquals(copy.rowKeySet(), original.rowKeySet());
+    assertEquals(copy.columnKeySet(), original.columnKeySet());
+  }
+
+  public void testCreateCopyHashBasedTable() {
+    Table<String, Integer, Character> original = HashBasedTable.create();
+    original.put("foo", 1, 'a');
+    original.put("bar", 1, 'b');
+    original.put("foo", 3, 'c');
+    Table<String, Integer, Character> copy = ArrayTable.create(original);
+    assertEquals(4, copy.size());
+    assertEquals((Character) 'a', copy.get("foo", 1));
+    assertEquals((Character) 'b', copy.get("bar", 1));
+    assertEquals((Character) 'c', copy.get("foo", 3));
+    assertNull(copy.get("bar", 3));
+    original.put("foo", 1, 'd');
+    assertEquals((Character) 'd', original.get("foo", 1));
+    assertEquals((Character) 'a', copy.get("foo", 1));
+    assertEquals(copy.rowKeySet(), ImmutableSet.of("foo", "bar"));
+    assertEquals(copy.columnKeySet(), ImmutableSet.of(1, 3));
+  }
+
+  public void testCreateCopyEmptyTable() {
+    Table<String, Integer, Character> original = HashBasedTable.create();
+    try {
+      ArrayTable.create(original);
+      fail();
+    } catch (IllegalArgumentException expected) {}
+  }
+
+  public void testSerialization() {
+    table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
+    SerializableTester.reserializeAndAssert(table);
+  }
+
+  public void testNullPointerStatic() throws Exception {
+    new NullPointerTester().testAllPublicStaticMethods(ArrayTable.class);
+  }
+
+  public void testToString_ordered() {
+    table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
+    assertEquals("{foo={1=a, 2=null, 3=c}, " +
+        "bar={1=b, 2=null, 3=null}, " +
+        "cat={1=null, 2=null, 3=null}}",
+        table.toString());
+    assertEquals("{foo={1=a, 2=null, 3=c}, " +
+        "bar={1=b, 2=null, 3=null}, " +
+        "cat={1=null, 2=null, 3=null}}",
+        table.rowMap().toString());
+  }
+
+  public void testCellSetToString_ordered() {
+    table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
+    assertEquals("[(foo,1)=a, (foo,2)=null, (foo,3)=c, " +
+        "(bar,1)=b, (bar,2)=null, (bar,3)=null, " +
+        "(cat,1)=null, (cat,2)=null, (cat,3)=null]",
+        table.cellSet().toString());
+  }
+
+  public void testRowKeySetToString_ordered() {
+    table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
+    assertEquals("[foo, bar, cat]", table.rowKeySet().toString());
+  }
+
+  public void testColumnKeySetToString_ordered() {
+    table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
+    assertEquals("[1, 2, 3]", table.columnKeySet().toString());
+  }
+
+  public void testValuesToString_ordered() {
+    table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
+    assertEquals("[a, null, c, b, null, null, null, null, null]",
+        table.values().toString());
+  }
+
+  public void testRowKeyList() {
+    ArrayTable<String, Integer, Character> table
+        = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
+    ASSERT.that(table.rowKeyList()).hasContentsInOrder("foo", "bar", "cat");
+  }
+
+  public void testColumnKeyList() {
+    ArrayTable<String, Integer, Character> table
+        = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
+    ASSERT.that(table.columnKeyList()).hasContentsInOrder(1, 2, 3);
+  }
+
+  public void testGetMissingKeys() {
+    table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
+    assertNull(table.get("dog", 1));
+    assertNull(table.get("foo", 4));
+  }
+
+  public void testAt() {
+    ArrayTable<String, Integer, Character> table
+        = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
+    assertEquals((Character) 'b', table.at(1, 0));
+    assertEquals((Character) 'c', table.at(0, 2));
+    assertNull(table.at(1, 2));
+    try {
+      table.at(1, 3);
+      fail();
+    } catch (IndexOutOfBoundsException expected) {}
+    try {
+      table.at(1, -1);
+      fail();
+    } catch (IndexOutOfBoundsException expected) {}
+    try {
+      table.at(3, 2);
+      fail();
+    } catch (IndexOutOfBoundsException expected) {}
+    try {
+      table.at(-1, 2);
+      fail();
+    } catch (IndexOutOfBoundsException expected) {}
+  }
+
+  public void testSet() {
+    ArrayTable<String, Integer, Character> table
+        = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
+    assertEquals((Character) 'b', table.set(1, 0, 'd'));
+    assertEquals((Character) 'd', table.get("bar", 1));
+    assertNull(table.set(2, 0, 'e'));
+    assertEquals((Character) 'e', table.get("cat", 1));
+    assertEquals((Character) 'a', table.set(0, 0, null));
+    assertNull(table.get("foo", 1));
+    try {
+      table.set(1, 3, 'z');
+      fail();
+    } catch (IndexOutOfBoundsException expected) {}
+    try {
+      table.set(1, -1, 'z');
+      fail();
+    } catch (IndexOutOfBoundsException expected) {}
+    try {
+      table.set(3, 2, 'z');
+      fail();
+    } catch (IndexOutOfBoundsException expected) {}
+    try {
+      table.set(-1, 2, 'z');
+      fail();
+    } catch (IndexOutOfBoundsException expected) {}
+    assertFalse(table.containsValue('z'));
+  }
+
+  public void testEraseAll() {
+    ArrayTable<String, Integer, Character> table
+        = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
+    table.eraseAll();
+    assertEquals(9, table.size());
+    assertNull(table.get("bar", 1));
+    assertTrue(table.containsRow("foo"));
+    assertFalse(table.containsValue('a'));
+  }
+
+  public void testPutIllegal() {
+    table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
+    try {
+      table.put("dog", 1, 'd');
+      fail();
+    } catch (IllegalArgumentException expected) {
+      assertEquals("Row dog not in [foo, bar, cat]", expected.getMessage());
+    }
+    try {
+      table.put("foo", 4, 'd');
+      fail();
+    } catch (IllegalArgumentException expected) {
+      assertEquals("Column 4 not in [1, 2, 3]", expected.getMessage());
+    }
+    assertFalse(table.containsValue('d'));
+  }
+
+  public void testErase() {
+    ArrayTable<String, Integer, Character> table
+        = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
+    assertEquals((Character) 'b', table.erase("bar", 1));
+    assertNull(table.get("bar", 1));
+    assertEquals(9, table.size());
+    assertNull(table.erase("bar", 1));
+    assertNull(table.erase("foo", 2));
+    assertNull(table.erase("dog", 1));
+    assertNull(table.erase("bar", 5));
+    assertNull(table.erase(null, 1));
+    assertNull(table.erase("bar", null));
+  }
+
+  public void testToArray() {
+    ArrayTable<String, Integer, Character> table
+        = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
+    Character[][] array = table.toArray(Character.class);
+    assertEquals(3, array.length);
+    ASSERT.that(array[0]).hasContentsInOrder('a', null, 'c');
+    ASSERT.that(array[1]).hasContentsInOrder('b', null, null);
+    ASSERT.that(array[2]).hasContentsInOrder(null, null, null);
+    table.set(0, 2, 'd');
+    assertEquals((Character) 'c', array[0][2]);
+    array[0][2] = 'e';
+    assertEquals((Character) 'd', table.at(0, 2));
+  }
+
+  public void testCellReflectsChanges() {
+    table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
+    Cell<String, Integer, Character> cell = table.cellSet().iterator().next();
+    assertEquals(Tables.immutableCell("foo", 1, 'a'), cell);
+    assertEquals((Character) 'a', table.put("foo", 1, 'd'));
+    assertEquals(Tables.immutableCell("foo", 1, 'd'), cell);
+  }
+
+  public void testRowMissing() {
+    table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
+    Map<Integer, Character> row = table.row("dog");
+    assertTrue(row.isEmpty());
+    try {
+      row.put(1, 'd');
+      fail();
+    } catch (UnsupportedOperationException expected) {}
+  }
+
+  public void testColumnMissing() {
+    table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
+    Map<String, Character> column = table.column(4);
+    assertTrue(column.isEmpty());
+    try {
+      column.put("foo", 'd');
+      fail();
+    } catch (UnsupportedOperationException expected) {}
+  }
+
+  public void testRowPutIllegal() {
+    table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
+    Map<Integer, Character> map = table.row("foo");
+    try {
+      map.put(4, 'd');
+      fail();
+    } catch (IllegalArgumentException expected) {
+      assertEquals("Column 4 not in [1, 2, 3]", expected.getMessage());
+    }
+  }
+
+  public void testColumnPutIllegal() {
+    table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
+    Map<String, Character> map = table.column(3);
+    try {
+      map.put("dog", 'd');
+      fail();
+    } catch (IllegalArgumentException expected) {
+      assertEquals("Row dog not in [foo, bar, cat]", expected.getMessage());
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/BiMapCollectionTest.java b/guava-tests/test/com/google/common/collect/BiMapCollectionTest.java
new file mode 100644
index 0000000..9bee5f1
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/BiMapCollectionTest.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.collect.testing.SetTestSuiteBuilder;
+import com.google.common.collect.testing.TestStringSetGenerator;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import java.util.Set;
+
+/**
+ * Collection tests for bimaps.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible
+public class BiMapCollectionTest extends TestCase {
+
+  public static Test suite() {
+    TestSuite suite = new TestSuite();
+    suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+          @Override protected Set<String> create(String[] elements) {
+            BiMap<String, Integer> bimap = HashBiMap.create();
+            for (int i = 0; i < elements.length; i++) {
+              bimap.put(elements[i], i);
+            }
+            return bimap.keySet();
+          }
+        })
+        .named("HashBiMap.keySet")
+        .withFeatures(CollectionSize.ANY,
+            CollectionFeature.ALLOWS_NULL_VALUES,
+            CollectionFeature.REMOVE_OPERATIONS)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+          @Override protected Set<String> create(String[] elements) {
+            BiMap<Integer, String> bimap = HashBiMap.create();
+            for (int i = 0; i < elements.length; i++) {
+              bimap.put(i, elements[i]);
+            }
+            return bimap.values();
+          }
+        })
+        .named("HashBiMap.values")
+        .withFeatures(CollectionSize.ANY,
+            CollectionFeature.ALLOWS_NULL_VALUES,
+            CollectionFeature.REMOVE_OPERATIONS,
+            CollectionFeature.REJECTS_DUPLICATES_AT_CREATION)
+        .createTestSuite());
+
+    return suite;
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/BiMapMapInterfaceTest.java b/guava-tests/test/com/google/common/collect/BiMapMapInterfaceTest.java
new file mode 100644
index 0000000..6f3ae3e
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/BiMapMapInterfaceTest.java
@@ -0,0 +1,126 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.collect.testing.MapInterfaceTest;
+
+import junit.framework.TestCase;
+
+import java.util.Map;
+import java.util.Map.Entry;
+
+/**
+ * Map interface tests for bimaps.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible
+public class BiMapMapInterfaceTest extends TestCase {
+
+  private abstract static class AbstractMapInterfaceTest
+      extends MapInterfaceTest<String, Integer> {
+
+    protected AbstractMapInterfaceTest(boolean modifiable) {
+      super(true, true, modifiable, modifiable, modifiable);
+    }
+
+    @Override protected String getKeyNotInPopulatedMap() {
+      return "cat";
+    }
+
+    @Override protected Integer getValueNotInPopulatedMap() {
+      return 3;
+    }
+
+    @Override protected Map<String, Integer> makeEmptyMap() {
+      return HashBiMap.create();
+    }
+
+    @Override protected Map<String, Integer> makePopulatedMap() {
+      Map<String, Integer> map = makeEmptyMap();
+      map.put("foo", 1);
+      map.put("bar", 2);
+      return map;
+    }
+
+    @Override protected void assertMoreInvariants(Map<String, Integer> map) {
+      BiMap<String, Integer> bimap = (BiMap<String, Integer>) map;
+      BiMap<Integer, String> inverse = bimap.inverse();
+      assertEquals(bimap.size(), inverse.size());
+      for (Entry<String, Integer> entry : bimap.entrySet()) {
+        assertEquals(entry.getKey(), inverse.get(entry.getValue()));
+      }
+      for (Entry<Integer, String> entry : inverse.entrySet()) {
+        assertEquals(entry.getKey(), bimap.get(entry.getValue()));
+      }
+    }
+  }
+
+  public static class HashBiMapInterfaceTest extends AbstractMapInterfaceTest {
+    public HashBiMapInterfaceTest() {
+      super(true);
+    }
+    @Override protected Map<String, Integer> makeEmptyMap() {
+      return HashBiMap.create();
+    }
+  }
+
+  public static class InverseBiMapInterfaceTest
+      extends AbstractMapInterfaceTest {
+    public InverseBiMapInterfaceTest() {
+      super(true);
+    }
+    @Override protected Map<String, Integer> makeEmptyMap() {
+      return HashBiMap.<Integer, String>create().inverse();
+    }
+  }
+
+  public static class UnmodifiableBiMapInterfaceTest
+      extends AbstractMapInterfaceTest {
+    public UnmodifiableBiMapInterfaceTest() {
+      super(false);
+    }
+    @Override protected Map<String, Integer> makeEmptyMap() {
+      return Maps.unmodifiableBiMap(HashBiMap.<String, Integer>create());
+    }
+    @Override protected Map<String, Integer> makePopulatedMap() {
+      BiMap<String, Integer> bimap = HashBiMap.create();
+      bimap.put("foo", 1);
+      bimap.put("bar", 2);
+      return Maps.unmodifiableBiMap(bimap);
+    }
+  }
+
+  public static class SynchronizedBiMapInterfaceTest
+      extends AbstractMapInterfaceTest {
+    public SynchronizedBiMapInterfaceTest() {
+      super(true);
+    }
+    @Override protected Map<String, Integer> makeEmptyMap() {
+      return Maps.synchronizedBiMap(HashBiMap.<String, Integer>create());
+    }
+  }
+
+  public void testNothing() {
+    /*
+     * It's a warning if a TestCase subclass contains no tests, so we add one.
+     * Alternatively, we could stop extending TestCase, but I worry that someone
+     * will add a test in the future and not realize that it's being ignored.
+     */
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/BstCountBasedBalancePoliciesTest.java b/guava-tests/test/com/google/common/collect/BstCountBasedBalancePoliciesTest.java
new file mode 100644
index 0000000..f084ae7
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/BstCountBasedBalancePoliciesTest.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.collect.BstTesting.countAggregate;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.collect.BstTesting.SimpleNode;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ * Tests for the policies exported by {@link BstCountBasedBalancePolicies}
+ *
+ * @author Louis Wasserman
+ */
+@GwtCompatible
+public class BstCountBasedBalancePoliciesTest extends TestCase {
+  public static class NoRebalanceTest extends AbstractBstBalancePolicyTest {
+    @Override
+    protected BstBalancePolicy<SimpleNode> getBalancePolicy() {
+      return BstCountBasedBalancePolicies.noRebalancePolicy(countAggregate);
+    }
+  }
+
+  public static class SingleRebalanceTest extends AbstractBstBalancePolicyTest {
+    @Override
+    protected BstBalancePolicy<SimpleNode> getBalancePolicy() {
+      return BstCountBasedBalancePolicies.<Character, SimpleNode>singleRebalancePolicy(
+          countAggregate);
+    }
+  }
+
+  public static class FullRebalanceTest extends AbstractBstBalancePolicyTest {
+    @Override
+    protected BstBalancePolicy<SimpleNode> getBalancePolicy() {
+      return BstCountBasedBalancePolicies.<Character, SimpleNode>fullRebalancePolicy(
+          countAggregate);
+    }
+  }
+
+  public static Test suite() {
+    TestSuite suite = new TestSuite();
+    suite.addTestSuite(NoRebalanceTest.class);
+    suite.addTestSuite(SingleRebalanceTest.class);
+    suite.addTestSuite(FullRebalanceTest.class);
+    return suite;
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/BstInOrderPathTest.java b/guava-tests/test/com/google/common/collect/BstInOrderPathTest.java
new file mode 100644
index 0000000..0498401
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/BstInOrderPathTest.java
@@ -0,0 +1,199 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.collect.BstSide.LEFT;
+import static com.google.common.collect.BstSide.RIGHT;
+import static com.google.common.collect.BstTesting.defaultNullPointerTester;
+import static com.google.common.collect.BstTesting.extension;
+import static com.google.common.collect.BstTesting.pathToList;
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.collect.BstTesting.SimpleNode;
+
+import junit.framework.TestCase;
+
+/**
+ * Tests for {@code BstInOrderPath}.
+ *
+ * @author Louis Wasserman
+ */
+@GwtCompatible(emulated = true)
+public class BstInOrderPathTest extends TestCase {
+  public void testFullTreeRight() {
+    //    d
+    //   / \
+    //  b   f
+    // / \ / \
+    // a c e g
+    SimpleNode a = new SimpleNode('a', null, null);
+    SimpleNode c = new SimpleNode('c', null, null);
+    SimpleNode b = new SimpleNode('b', a, c);
+    SimpleNode e = new SimpleNode('e', null, null);
+    SimpleNode g = new SimpleNode('g', null, null);
+    SimpleNode f = new SimpleNode('f', e, g);
+    SimpleNode d = new SimpleNode('d', b, f);
+    BstPathFactory<SimpleNode, BstInOrderPath<SimpleNode>> factory =
+        BstInOrderPath.inOrderFactory();
+    BstInOrderPath<SimpleNode> path = extension(factory, d, LEFT, LEFT);
+    ASSERT.that(pathToList(path)).hasContentsInOrder(a, b, d);
+    path = testNextPathIs(path, b, d);
+    path = testNextPathIs(path, c, b, d);
+    path = testNextPathIs(path, d);
+    path = testNextPathIs(path, e, f, d);
+    path = testNextPathIs(path, f, d);
+    path = testNextPathIs(path, g, f, d);
+    assertFalse(path.hasNext(RIGHT));
+  }
+
+  public void testFullTreeLeft() {
+    //    d
+    //   / \
+    //  b   f
+    // / \ / \
+    // a c e g
+    SimpleNode a = new SimpleNode('a', null, null);
+    SimpleNode c = new SimpleNode('c', null, null);
+    SimpleNode b = new SimpleNode('b', a, c);
+    SimpleNode e = new SimpleNode('e', null, null);
+    SimpleNode g = new SimpleNode('g', null, null);
+    SimpleNode f = new SimpleNode('f', e, g);
+    SimpleNode d = new SimpleNode('d', b, f);
+    BstPathFactory<SimpleNode, BstInOrderPath<SimpleNode>> factory =
+        BstInOrderPath.inOrderFactory();
+    BstInOrderPath<SimpleNode> path = extension(factory, d, RIGHT, RIGHT);
+    ASSERT.that(pathToList(path)).hasContentsInOrder(g, f, d);
+    path = testPrevPathIs(path, f, d);
+    path = testPrevPathIs(path, e, f, d);
+    path = testPrevPathIs(path, d);
+    path = testPrevPathIs(path, c, b, d);
+    path = testPrevPathIs(path, b, d);
+    path = testPrevPathIs(path, a, b, d);
+    assertFalse(path.hasNext(LEFT));
+  }
+
+  public void testPartialTree1Right() {
+
+    //    d
+    //   / \
+    //  b   f
+    // /     \
+    // a     g
+    SimpleNode a = new SimpleNode('a', null, null);
+    SimpleNode b = new SimpleNode('b', a, null);
+    SimpleNode g = new SimpleNode('g', null, null);
+    SimpleNode f = new SimpleNode('f', null, g);
+    SimpleNode d = new SimpleNode('d', b, f);
+    BstPathFactory<SimpleNode, BstInOrderPath<SimpleNode>> factory =
+        BstInOrderPath.inOrderFactory();
+    BstInOrderPath<SimpleNode> path = extension(factory, d, LEFT, LEFT);
+    ASSERT.that(pathToList(path)).hasContentsInOrder(a, b, d);
+    path = testNextPathIs(path, b, d);
+    path = testNextPathIs(path, d);
+    path = testNextPathIs(path, f, d);
+    path = testNextPathIs(path, g, f, d);
+    assertFalse(path.hasNext(RIGHT));
+  }
+
+  public void testPartialTree1Left() {
+
+    //    d
+    //   / \
+    //  b   f
+    // /     \
+    // a     g
+    SimpleNode a = new SimpleNode('a', null, null);
+    SimpleNode b = new SimpleNode('b', a, null);
+    SimpleNode g = new SimpleNode('g', null, null);
+    SimpleNode f = new SimpleNode('f', null, g);
+    SimpleNode d = new SimpleNode('d', b, f);
+    BstPathFactory<SimpleNode, BstInOrderPath<SimpleNode>> factory =
+        BstInOrderPath.inOrderFactory();
+    BstInOrderPath<SimpleNode> path = extension(factory, d, RIGHT, RIGHT);
+    ASSERT.that(pathToList(path)).hasContentsInOrder(g, f, d);
+    path = testPrevPathIs(path, f, d);
+    path = testPrevPathIs(path, d);
+    path = testPrevPathIs(path, b, d);
+    path = testPrevPathIs(path, a, b, d);
+    assertFalse(path.hasNext(LEFT));
+  }
+
+  public void testPartialTree2Right() {
+    //    d
+    //   / \
+    //  b   f
+    //   \ /
+    //   c e  
+    SimpleNode c = new SimpleNode('c', null, null);
+    SimpleNode b = new SimpleNode('b', null, c);
+    SimpleNode e = new SimpleNode('e', null, null);
+    SimpleNode f = new SimpleNode('f', e, null);
+    SimpleNode d = new SimpleNode('d', b, f);
+    BstPathFactory<SimpleNode, BstInOrderPath<SimpleNode>> factory =
+        BstInOrderPath.inOrderFactory();
+    BstInOrderPath<SimpleNode> path = extension(factory, d, LEFT);
+    ASSERT.that(pathToList(path)).hasContentsInOrder(b, d);
+    path = testNextPathIs(path, c, b, d);
+    path = testNextPathIs(path, d);
+    path = testNextPathIs(path, e, f, d);
+    path = testNextPathIs(path, f, d);
+    assertFalse(path.hasNext(RIGHT));
+  }
+
+  public void testPartialTree2Left() {
+    //    d
+    //   / \
+    //  b   f
+    //   \ /
+    //   c e  
+    SimpleNode c = new SimpleNode('c', null, null);
+    SimpleNode b = new SimpleNode('b', null, c);
+    SimpleNode e = new SimpleNode('e', null, null);
+    SimpleNode f = new SimpleNode('f', e, null);
+    SimpleNode d = new SimpleNode('d', b, f);
+    BstPathFactory<SimpleNode, BstInOrderPath<SimpleNode>> factory =
+        BstInOrderPath.inOrderFactory();
+    BstInOrderPath<SimpleNode> path = extension(factory, d, RIGHT);
+    ASSERT.that(pathToList(path)).hasContentsInOrder(f, d);
+    path = testPrevPathIs(path, e,f,d);
+    path = testPrevPathIs(path, d);
+    path = testPrevPathIs(path, c,b, d);
+    path = testPrevPathIs(path, b, d);
+    assertFalse(path.hasNext(LEFT));
+  }
+
+  private static BstInOrderPath<SimpleNode> testNextPathIs(
+      BstInOrderPath<SimpleNode> path, SimpleNode... nodes) {
+    assertTrue(path.hasNext(RIGHT));
+    path = path.next(RIGHT);
+    ASSERT.that(pathToList(path)).hasContentsInOrder(nodes);
+    return path;
+  }
+
+  private static BstInOrderPath<SimpleNode> testPrevPathIs(
+      BstInOrderPath<SimpleNode> path, SimpleNode... nodes) {
+    assertTrue(path.hasNext(LEFT));
+    path = path.next(LEFT);
+    ASSERT.that(pathToList(path)).hasContentsInOrder(nodes);
+    return path;
+  }
+
+  @GwtIncompatible("NullPointerTester")
+  public void testNullPointers() throws Exception {
+    defaultNullPointerTester().testAllPublicStaticMethods(BstInOrderPath.class);
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/BstMutationResultTest.java b/guava-tests/test/com/google/common/collect/BstMutationResultTest.java
new file mode 100644
index 0000000..bb942c2
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/BstMutationResultTest.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.collect.BstTesting.defaultNullPointerTester;
+
+import com.google.common.annotations.GwtIncompatible;
+
+import junit.framework.TestCase;
+
+/**
+ * Tests for {@code BstMutationResult}.
+ *
+ * @author Louis Wasserman
+ */
+@GwtIncompatible("NullPointerTester")
+public class BstMutationResultTest extends TestCase {
+  public void testNullPointers() throws Exception {
+    defaultNullPointerTester().testAllPublicStaticMethods(BstMutationResult.class);
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/BstNodeTest.java b/guava-tests/test/com/google/common/collect/BstNodeTest.java
new file mode 100644
index 0000000..37f2bbc
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/BstNodeTest.java
@@ -0,0 +1,125 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed under the Apache License, Version 'b'.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-'b'.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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.collect.BstSide.LEFT;
+import static com.google.common.collect.BstSide.RIGHT;
+import static com.google.common.collect.BstTesting.defaultNullPointerTester;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.collect.BstTesting.SimpleNode;
+
+import junit.framework.TestCase;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Tests for {@code BstNode}.
+ *
+ * @author Louis Wasserman
+ */
+@GwtCompatible(emulated = true)
+public class BstNodeTest extends TestCase {
+  private void testLacksChild(SimpleNode node, BstSide side) {
+    assertNull(node.childOrNull(side));
+    assertFalse(node.hasChild(side));
+    try {
+      node.getChild(side);
+      fail("Expected IllegalStateException");
+    } catch (IllegalStateException expected) {}
+  }
+
+  private void testChildIs(SimpleNode node, BstSide side, SimpleNode expectedChild) {
+    assertEquals(expectedChild, node.childOrNull(side));
+    assertTrue(node.hasChild(side));
+    assertEquals(expectedChild, node.getChild(side));
+  }
+
+  public void testHasChildLeaf() {
+    SimpleNode leaf = new SimpleNode('a', null, null);
+    testLacksChild(leaf, LEFT);
+    testLacksChild(leaf, RIGHT);
+  }
+
+  public void testHasChildLeftOnly() {
+    SimpleNode leaf = new SimpleNode('a', null, null);
+    SimpleNode node = new SimpleNode('b', leaf, null);
+    testChildIs(node, LEFT, leaf);
+    testLacksChild(node, RIGHT);
+  }
+
+  public void testHasChildRightOnly() {
+    SimpleNode leaf = new SimpleNode('c', null, null);
+    SimpleNode node = new SimpleNode('b', null, leaf);
+    testLacksChild(node, LEFT);
+    testChildIs(node, RIGHT, leaf);
+  }
+
+  public void testHasChildBoth() {
+    SimpleNode left = new SimpleNode('a', null, null);
+    SimpleNode right = new SimpleNode('c', null, null);
+    SimpleNode node = new SimpleNode('b', left, right);
+    testChildIs(node, LEFT, left);
+    testChildIs(node, RIGHT, right);
+  }
+
+  private static final char MIDDLE_KEY = 'b';
+
+  private static final List<SimpleNode> GOOD_LEFTS =
+      Arrays.asList(null, new SimpleNode('a', null, null));
+  private static final List<SimpleNode> BAD_LEFTS =
+      Arrays.asList(new SimpleNode('b', null, null), new SimpleNode('c', null, null));
+  private static final Iterable<SimpleNode> ALL_LEFTS = Iterables.concat(GOOD_LEFTS, BAD_LEFTS);
+
+  private static final List<SimpleNode> GOOD_RIGHTS =
+      Arrays.asList(null, new SimpleNode('c', null, null));
+  private static final List<SimpleNode> BAD_RIGHTS =
+      Arrays.asList(new SimpleNode('b', null, null), new SimpleNode('a', null, null));
+  private static final Iterable<SimpleNode> ALL_RIGHTS = Iterables.concat(GOOD_RIGHTS, BAD_RIGHTS);
+
+  public void testOrderingInvariantHoldsForGood() {
+    for (SimpleNode left : GOOD_LEFTS) {
+      for (SimpleNode right : GOOD_RIGHTS) {
+        assertTrue(
+            new SimpleNode(MIDDLE_KEY, left, right).orderingInvariantHolds(Ordering.natural()));
+      }
+    }
+  }
+
+  public void testOrderingInvariantBadLeft() {
+    for (SimpleNode left : BAD_LEFTS) {
+      for (SimpleNode right : ALL_RIGHTS) {
+        assertFalse(
+            new SimpleNode(MIDDLE_KEY, left, right).orderingInvariantHolds(Ordering.natural()));
+      }
+    }
+  }
+
+  public void testOrderingInvariantBadRight() {
+    for (SimpleNode left : ALL_LEFTS) {
+      for (SimpleNode right : BAD_RIGHTS) {
+        assertFalse(
+            new SimpleNode(MIDDLE_KEY, left, right).orderingInvariantHolds(Ordering.natural()));
+      }
+    }
+  }
+
+  @GwtIncompatible("NullPointerTester")
+  public void testNullPointers() throws Exception {
+    defaultNullPointerTester().testAllPublicStaticMethods(BstNode.class);
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/BstOperationsTest.java b/guava-tests/test/com/google/common/collect/BstOperationsTest.java
new file mode 100644
index 0000000..7ced712
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/BstOperationsTest.java
@@ -0,0 +1,544 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.collect.BstSide.LEFT;
+import static com.google.common.collect.BstTesting.assertInOrderTraversalIs;
+import static com.google.common.collect.BstTesting.balancePolicy;
+import static com.google.common.collect.BstTesting.defaultNullPointerTester;
+import static com.google.common.collect.BstTesting.extension;
+import static com.google.common.collect.BstTesting.nodeFactory;
+import static com.google.common.collect.BstTesting.pathFactory;
+import static org.easymock.EasyMock.eq;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.isNull;
+import static org.easymock.EasyMock.replay;
+import static org.easymock.EasyMock.reportMatcher;
+import static org.easymock.EasyMock.same;
+import static org.easymock.EasyMock.verify;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.collect.BstModificationResult.ModificationType;
+import com.google.common.collect.BstTesting.SimpleNode;
+
+import junit.framework.TestCase;
+
+import org.easymock.EasyMock;
+import org.easymock.IArgumentMatcher;
+
+/**
+ * Tests for {@code BstOperations}.
+ *
+ * @author Louis Wasserman
+ */
+@GwtCompatible(emulated = true)
+public class BstOperationsTest extends TestCase {
+  public void testSeek1() {
+    //    d
+    //   / \
+    //  b   f
+    // /     \
+    // a     g
+    SimpleNode a = new SimpleNode('a', null, null);
+    SimpleNode b = new SimpleNode('b', a, null);
+    SimpleNode g = new SimpleNode('g', null, null);
+    SimpleNode f = new SimpleNode('f', null, g);
+    SimpleNode d = new SimpleNode('d', b, f);
+    assertEquals(a, BstOperations.seek(Ordering.natural(), d, 'a'));
+    assertEquals(b, BstOperations.seek(Ordering.natural(), d, 'b'));
+    assertNull(BstOperations.seek(Ordering.natural(), d, 'c'));
+    assertEquals(d, BstOperations.seek(Ordering.natural(), d, 'd'));
+    assertNull(BstOperations.seek(Ordering.natural(), d, 'e'));
+    assertEquals(f, BstOperations.seek(Ordering.natural(), d, 'f'));
+    assertEquals(g, BstOperations.seek(Ordering.natural(), d, 'g'));
+  }
+
+  public void testSeek2() {
+    //    d
+    //   / \
+    //  b   f
+    //   \ /
+    //   c e 
+    SimpleNode c = new SimpleNode('c', null, null);
+    SimpleNode b = new SimpleNode('b', null, c);
+    SimpleNode e = new SimpleNode('e', null, null);
+    SimpleNode f = new SimpleNode('f', e, null);
+    SimpleNode d = new SimpleNode('d', b, f);
+    assertNull(BstOperations.seek(Ordering.natural(), d, 'a'));
+    assertEquals(b, BstOperations.seek(Ordering.natural(), d, 'b'));
+    assertEquals(c, BstOperations.seek(Ordering.natural(), d, 'c'));
+    assertEquals(d, BstOperations.seek(Ordering.natural(), d, 'd'));
+    assertEquals(e, BstOperations.seek(Ordering.natural(), d, 'e'));
+    assertEquals(f, BstOperations.seek(Ordering.natural(), d, 'f'));
+    assertNull(BstOperations.seek(Ordering.natural(), d, 'g'));
+  }
+
+  @GwtIncompatible("EasyMock")
+  @SuppressWarnings("unchecked")
+  public void testModifyInsertAbsentNode() {
+    //    d
+    //   / \
+    //  b   f
+    // /     \
+    // a     g
+    SimpleNode a = new SimpleNode('a', null, null);
+    SimpleNode b = new SimpleNode('b', a, null);
+    SimpleNode g = new SimpleNode('g', null, null);
+    SimpleNode f = new SimpleNode('f', null, g);
+    SimpleNode d = new SimpleNode('d', b, f);
+
+    BstNodeFactory<SimpleNode> nodeFactory = EasyMock.createStrictMock(BstNodeFactory.class);
+    BstBalancePolicy<SimpleNode> balancePolicy = EasyMock.createStrictMock(BstBalancePolicy.class);
+    BstModifier<Character, SimpleNode> modifier = EasyMock.createStrictMock(BstModifier.class);
+
+    SimpleNode c = new SimpleNode('c', null, null);
+    expect(modifier.modify(eq('c'), (SimpleNode) isNull())).andReturn(
+        BstModificationResult.rebalancingChange(null, c));
+
+    expect(balancePolicy.balance(
+        same(nodeFactory), same(c), (SimpleNode) isNull(), (SimpleNode) isNull()))
+        .andReturn(c)
+        .times(0, 1);
+
+    SimpleNode bWithC = new SimpleNode('b', a, c);
+    expectPossibleEntryfication(nodeFactory, b);
+    expect(balancePolicy.balance(
+        same(nodeFactory), withKey('b'), same(a), withKey('c')))
+        .andReturn(bWithC);
+
+    SimpleNode dWithBWithC = new SimpleNode('d', bWithC, f);
+    expectPossibleEntryfication(nodeFactory, d);
+    expect(
+        balancePolicy.balance(same(nodeFactory), withKey('d'), same(bWithC), same(f)))
+        .andReturn(dWithBWithC);
+    replay(nodeFactory, balancePolicy, modifier);
+    BstMutationRule<Character, SimpleNode> mutationRule =
+        BstMutationRule.createRule(modifier, balancePolicy, nodeFactory);
+    BstMutationResult<Character, SimpleNode> mutationResult =
+        BstOperations.mutate(Ordering.natural(), mutationRule, d, 'c');
+    assertEquals('c', mutationResult.getTargetKey().charValue());
+    assertNull(mutationResult.getOriginalTarget());
+    assertEquals('c', mutationResult
+        .getChangedTarget()
+        .getKey()
+        .charValue());
+    assertSame(d, mutationResult.getOriginalRoot());
+    assertSame(dWithBWithC, mutationResult.getChangedRoot());
+    assertEquals(ModificationType.REBALANCING_CHANGE, mutationResult.modificationType());
+    verify(nodeFactory, balancePolicy, modifier);
+  }
+
+  @GwtIncompatible("EasyMock")
+  @SuppressWarnings("unchecked")
+  public void testModifyInsertPresentNode() {
+    // We wish to test that BstOperations & co. treat IDENTITY modifications as the same.
+    //    d
+    //   / \
+    //  b   f
+    // /     \
+    // a     g
+    SimpleNode a = new SimpleNode('a', null, null);
+    SimpleNode b = new SimpleNode('b', a, null);
+    SimpleNode g = new SimpleNode('g', null, null);
+    SimpleNode f = new SimpleNode('f', null, g);
+    SimpleNode d = new SimpleNode('d', b, f);
+
+    BstNodeFactory<SimpleNode> nodeFactory = EasyMock.createStrictMock(BstNodeFactory.class);
+    BstBalancePolicy<SimpleNode> balancePolicy = EasyMock.createStrictMock(BstBalancePolicy.class);
+    BstModifier<Character, SimpleNode> modifier = EasyMock.createStrictMock(BstModifier.class);
+
+    expectPossibleEntryfication(nodeFactory, a);
+    expect(modifier.modify(eq('a'), withKey('a'))).andReturn(
+        BstModificationResult.identity(a));
+    replay(nodeFactory, balancePolicy, modifier);
+    BstMutationRule<Character, SimpleNode> mutationRule =
+        BstMutationRule.createRule(modifier, balancePolicy, nodeFactory);
+    BstMutationResult<Character, SimpleNode> mutationResult =
+        BstOperations.mutate(Ordering.natural(), mutationRule, d, 'a');
+    assertEquals('a', mutationResult.getTargetKey().charValue());
+    assertSame(a, mutationResult.getOriginalTarget());
+    assertSame(a, mutationResult.getChangedTarget());
+    assertSame(d, mutationResult.getOriginalRoot());
+    assertSame(d, mutationResult.getChangedRoot());
+    assertEquals(ModificationType.IDENTITY, mutationResult.modificationType());
+    verify(nodeFactory, balancePolicy, modifier);
+  }
+
+  @GwtIncompatible("EasyMock")
+  @SuppressWarnings("unchecked")
+  public void testModifyInsertInequivalentNode() {
+    // We wish to test that BstOperations & co. treat non-equivalent() nodes as different.
+    //    d
+    //   / \
+    //  b   f
+    // /     \
+    // a     g
+    SimpleNode a = new SimpleNode('a', null, null);
+    SimpleNode b = new SimpleNode('b', a, null);
+    SimpleNode g = new SimpleNode('g', null, null);
+    SimpleNode f = new SimpleNode('f', null, g);
+    SimpleNode d = new SimpleNode('d', b, f);
+
+    BstNodeFactory<SimpleNode> nodeFactory = EasyMock.createStrictMock(BstNodeFactory.class);
+    BstBalancePolicy<SimpleNode> balancePolicy = EasyMock.createStrictMock(BstBalancePolicy.class);
+    BstModifier<Character, SimpleNode> modifier = EasyMock.createStrictMock(BstModifier.class);
+
+    expectPossibleEntryfication(nodeFactory, a);
+    SimpleNode a2 = new SimpleNode('a', null, null);
+    expect(modifier.modify(eq('a'), withKey('a'))).andReturn(
+        BstModificationResult.rebuildingChange(a, a2));
+
+    expectPossibleEntryfication(nodeFactory, a2);
+
+    SimpleNode bWithA2 = new SimpleNode('b', a2, null);
+    expect(nodeFactory.createNode(same(b), withKey('a'), (SimpleNode) isNull())).andReturn(
+        bWithA2);
+
+    SimpleNode dWithA2 = new SimpleNode('d', bWithA2, f);
+    expect(nodeFactory.createNode(same(d), same(bWithA2), same(f))).andReturn(
+        dWithA2);
+
+    replay(nodeFactory, balancePolicy, modifier);
+    BstMutationRule<Character, SimpleNode> mutationRule =
+        BstMutationRule.createRule(modifier, balancePolicy, nodeFactory);
+    BstMutationResult<Character, SimpleNode> mutationResult =
+        BstOperations.mutate(Ordering.natural(), mutationRule, d, 'a');
+    assertEquals('a', mutationResult.getTargetKey().charValue());
+    assertSame(a, mutationResult.getOriginalTarget());
+    assertEquals('a', mutationResult.getChangedTarget().getKey().charValue());
+    assertSame(d, mutationResult.getOriginalRoot());
+    assertSame(dWithA2, mutationResult.getChangedRoot());
+    assertEquals(ModificationType.REBUILDING_CHANGE, mutationResult.modificationType());
+    verify(nodeFactory, balancePolicy, modifier);
+  }
+
+  @GwtIncompatible("EasyMock")
+  @SuppressWarnings("unchecked")
+  public void testModifyDeletePresentNode() {
+    //    d
+    //   / \
+    //  b   f
+    // /     \
+    // a     g
+    SimpleNode a = new SimpleNode('a', null, null);
+    SimpleNode b = new SimpleNode('b', a, null);
+    SimpleNode g = new SimpleNode('g', null, null);
+    SimpleNode f = new SimpleNode('f', null, g);
+    SimpleNode d = new SimpleNode('d', b, f);
+
+    BstNodeFactory<SimpleNode> nodeFactory = EasyMock.createStrictMock(BstNodeFactory.class);
+    BstBalancePolicy<SimpleNode> balancePolicy = EasyMock.createStrictMock(BstBalancePolicy.class);
+    BstModifier<Character, SimpleNode> modifier = EasyMock.createStrictMock(BstModifier.class);
+
+    expectPossibleEntryfication(nodeFactory, a);
+    expect(modifier.modify(eq('a'), withKey('a'))).andReturn(
+        BstModificationResult.rebalancingChange(a, null));
+
+    expect(balancePolicy.combine(same(nodeFactory), (SimpleNode) isNull(), (SimpleNode) isNull()))
+        .andReturn(null);
+
+    expectPossibleEntryfication(nodeFactory, b);
+    SimpleNode leafB = new SimpleNode('b', null, null);
+    expect(
+        balancePolicy.balance(same(nodeFactory), withKey('b'), (SimpleNode) isNull(),
+            (SimpleNode) isNull())).andReturn(leafB);
+
+    SimpleNode dWithLeafB = new SimpleNode('d', leafB, f);
+    expectPossibleEntryfication(nodeFactory, d);
+    expect(
+        balancePolicy.balance(same(nodeFactory), withKey('d'), same(leafB), same(f)))
+        .andReturn(dWithLeafB);
+    replay(nodeFactory, balancePolicy, modifier);
+    BstMutationRule<Character, SimpleNode> mutationRule =
+        BstMutationRule.createRule(modifier, balancePolicy, nodeFactory);
+    BstMutationResult<Character, SimpleNode> mutationResult =
+        BstOperations.mutate(Ordering.natural(), mutationRule, d, 'a');
+    assertEquals('a', mutationResult.getTargetKey().charValue());
+    assertEquals('a', mutationResult
+        .getOriginalTarget()
+        .getKey()
+        .charValue());
+    assertNull(mutationResult.getChangedTarget());
+    assertSame(d, mutationResult.getOriginalRoot());
+    assertSame(dWithLeafB, mutationResult.getChangedRoot());
+    assertEquals(ModificationType.REBALANCING_CHANGE, mutationResult.modificationType());
+    verify(nodeFactory, balancePolicy, modifier);
+  }
+
+  @GwtIncompatible("EasyMock")
+  @SuppressWarnings("unchecked")
+  public void testModifyDeleteAbsentNode() {
+    //    d
+    //   / \
+    //  b   f
+    // /     \
+    // a     g
+    SimpleNode a = new SimpleNode('a', null, null);
+    SimpleNode b = new SimpleNode('b', a, null);
+    SimpleNode g = new SimpleNode('g', null, null);
+    SimpleNode f = new SimpleNode('f', null, g);
+    SimpleNode d = new SimpleNode('d', b, f);
+
+    BstNodeFactory<SimpleNode> nodeFactory = EasyMock.createStrictMock(BstNodeFactory.class);
+    BstBalancePolicy<SimpleNode> balancePolicy = EasyMock.createStrictMock(BstBalancePolicy.class);
+    BstModifier<Character, SimpleNode> modifier = EasyMock.createStrictMock(BstModifier.class);
+
+    expectPossibleEntryfication(nodeFactory, a);
+    expect(modifier.modify(eq('c'), (SimpleNode) isNull())).andReturn(
+        BstModificationResult.<SimpleNode> identity(null));
+    replay(nodeFactory, balancePolicy, modifier);
+    BstMutationRule<Character, SimpleNode> mutationRule =
+        BstMutationRule.createRule(modifier, balancePolicy, nodeFactory);
+    BstMutationResult<Character, SimpleNode> mutationResult =
+        BstOperations.mutate(Ordering.natural(), mutationRule, d, 'c');
+    assertEquals('c', mutationResult.getTargetKey().charValue());
+    assertEquals(d, mutationResult.getOriginalRoot());
+    assertEquals(d, mutationResult.getChangedRoot());
+    assertNull(mutationResult.getOriginalTarget());
+    assertNull(mutationResult.getChangedTarget());
+    assertEquals(ModificationType.IDENTITY, mutationResult.modificationType());
+    verify(nodeFactory, balancePolicy, modifier);
+  }
+
+  @GwtIncompatible("EasyMock")
+  @SuppressWarnings("unchecked")
+  public void testModifyPathInsertPresentNode() {
+    // We wish to test that BstOperations & co. treat identity-different nodes as changed,
+    // instead of using SimpleNode.equals().
+    //    d
+    //   / \
+    //  b   f
+    // /     \
+    // a     g
+    SimpleNode a = new SimpleNode('a', null, null);
+    SimpleNode b = new SimpleNode('b', a, null);
+    SimpleNode g = new SimpleNode('g', null, null);
+    SimpleNode f = new SimpleNode('f', null, g);
+    SimpleNode d = new SimpleNode('d', b, f);
+
+    BstNodeFactory<SimpleNode> nodeFactory = EasyMock.createStrictMock(BstNodeFactory.class);
+    BstBalancePolicy<SimpleNode> balancePolicy = EasyMock.createStrictMock(BstBalancePolicy.class);
+    BstModifier<Character, SimpleNode> modifier = EasyMock.createStrictMock(BstModifier.class);
+
+    expectPossibleEntryfication(nodeFactory, a);
+    expect(modifier.modify(eq('a'), withKey('a'))).andReturn(BstModificationResult.identity(a));
+    replay(nodeFactory, balancePolicy, modifier);
+    BstInOrderPath<SimpleNode> path = extension(pathFactory, d, LEFT, LEFT);
+    BstMutationRule<Character, SimpleNode> mutationRule =
+        BstMutationRule.createRule(modifier, balancePolicy, nodeFactory);
+    BstMutationResult<Character, SimpleNode> mutationResult =
+        BstOperations.mutate(path, mutationRule);
+    assertEquals('a', mutationResult.getTargetKey().charValue());
+    assertSame(a, mutationResult.getOriginalTarget());
+    assertSame(a, mutationResult.getChangedTarget());
+    assertSame(d, mutationResult.getOriginalRoot());
+    assertSame(d, mutationResult.getChangedRoot());
+    assertEquals(ModificationType.IDENTITY, mutationResult.modificationType());
+    verify(nodeFactory, balancePolicy, modifier);
+  }
+
+  @GwtIncompatible("EasyMock")
+  private SimpleNode withKey(final char c) {
+    reportMatcher(new IArgumentMatcher() {
+      @Override
+      public void appendTo(StringBuffer buffer) {
+        buffer.append("Expected BstNode with key ").append(c);
+      }
+
+      @Override
+      public boolean matches(Object argument) {
+        return argument instanceof SimpleNode
+            && ((SimpleNode) argument).getKey().charValue() == c;
+      }
+    });
+    return null;
+  }
+
+  /**
+   * The implementation may remove the children of a node it treats as an entry for safety. Expect
+   * this and handle it.
+   */
+  @GwtIncompatible("EasyMock")
+  private void expectPossibleEntryfication(BstNodeFactory<SimpleNode> factory, SimpleNode entry) {
+    expect(factory.createNode(same(entry), (SimpleNode) isNull(), (SimpleNode) isNull()))
+        .andReturn(new SimpleNode(entry.getKey(), null, null))
+        .times(0, 1);
+  }
+  public void testInsertMin1() {
+    //    d
+    //   / \
+    //  b   f
+    //   \   \
+    //   c   g
+    SimpleNode c = new SimpleNode('c', null, null);
+    SimpleNode b = new SimpleNode('b', null, c);
+    SimpleNode g = new SimpleNode('g', null, null);
+    SimpleNode f = new SimpleNode('f', null, g);
+    SimpleNode d = new SimpleNode('d', b, f);
+
+    SimpleNode a = new SimpleNode('a', null, null);
+    SimpleNode newRoot = BstOperations.insertMin(d, a, nodeFactory, balancePolicy);
+    assertInOrderTraversalIs(newRoot, "abcdfg");
+  }
+
+  public void testInsertMin2() {
+    //    d
+    //   / \
+    //  b   f
+    //       \
+    //       g
+    SimpleNode b = new SimpleNode('b', null, null);
+    SimpleNode g = new SimpleNode('g', null, null);
+    SimpleNode f = new SimpleNode('f', null, g);
+    SimpleNode d = new SimpleNode('d', b, f);
+
+    SimpleNode a = new SimpleNode('a', null, null);
+    SimpleNode newRoot = BstOperations.insertMin(d, a, nodeFactory, balancePolicy);
+    assertInOrderTraversalIs(newRoot, "abdfg");
+  }
+
+  public void testInsertMinEmpty() {
+    SimpleNode a = new SimpleNode('a', null, null);
+    SimpleNode newRoot = BstOperations.insertMin(null, a, nodeFactory, balancePolicy);
+    assertInOrderTraversalIs(newRoot, "a");
+  }
+
+  public void testInsertMax1() {
+    //    d
+    //   / \
+    //  b   f
+    //   \   \
+    //   c   g
+    SimpleNode c = new SimpleNode('c', null, null);
+    SimpleNode b = new SimpleNode('b', null, c);
+    SimpleNode g = new SimpleNode('g', null, null);
+    SimpleNode f = new SimpleNode('f', null, g);
+    SimpleNode d = new SimpleNode('d', b, f);
+
+    SimpleNode h = new SimpleNode('h', null, null);
+    SimpleNode newRoot = BstOperations.insertMax(d, h, nodeFactory, balancePolicy);
+    assertInOrderTraversalIs(newRoot, "bcdfgh");
+  }
+
+  public void testInsertMax2() {
+    //    d
+    //   / \
+    //  b   f
+    //     / 
+    //     e
+    SimpleNode b = new SimpleNode('b', null, null);
+    SimpleNode e = new SimpleNode('e', null, null);
+    SimpleNode f = new SimpleNode('f', e, null);
+    SimpleNode d = new SimpleNode('d', b, f);
+
+    SimpleNode h = new SimpleNode('h', null, null);
+    SimpleNode newRoot = BstOperations.insertMax(d, h, nodeFactory, balancePolicy);
+    assertInOrderTraversalIs(newRoot, "bdefh");
+  }
+
+  public void testInsertMaxEmpty() {
+    SimpleNode a = new SimpleNode('a', null, null);
+    SimpleNode newRoot = BstOperations.insertMax(null, a, nodeFactory, balancePolicy);
+    assertInOrderTraversalIs(newRoot, "a");
+  }
+
+  public void testExtractMin1() {
+    //    d
+    //   / \
+    //  b   f
+    //   \   \
+    //   c   g
+    SimpleNode c = new SimpleNode('c', null, null);
+    SimpleNode b = new SimpleNode('b', null, c);
+    SimpleNode g = new SimpleNode('g', null, null);
+    SimpleNode f = new SimpleNode('f', null, g);
+    SimpleNode d = new SimpleNode('d', b, f);
+
+    BstMutationResult<Character, SimpleNode> extractMin =
+        BstOperations.extractMin(d, nodeFactory, balancePolicy);
+    assertEquals('b', extractMin.getTargetKey().charValue());
+    assertEquals(d, extractMin.getOriginalRoot());
+    assertEquals(b, extractMin.getOriginalTarget());
+    assertNull(extractMin.getChangedTarget());
+    assertInOrderTraversalIs(extractMin.getChangedRoot(), "cdfg");
+  }
+
+  public void testExtractMin2() {
+    //    d
+    //   / \
+    //  b   f
+    //       \
+    //       g
+    SimpleNode b = new SimpleNode('b', null, null);
+    SimpleNode g = new SimpleNode('g', null, null);
+    SimpleNode f = new SimpleNode('f', null, g);
+    SimpleNode d = new SimpleNode('d', b, f);
+
+    BstMutationResult<Character, SimpleNode> extractMin =
+        BstOperations.extractMin(d, nodeFactory, balancePolicy);
+    assertEquals('b', extractMin.getTargetKey().charValue());
+    assertEquals(d, extractMin.getOriginalRoot());
+    assertEquals(b, extractMin.getOriginalTarget());
+    assertNull(extractMin.getChangedTarget());
+    assertInOrderTraversalIs(extractMin.getChangedRoot(), "dfg");
+  }
+
+  public void testExtractMax1() {
+    //    d
+    //   / \
+    //  b   f
+    //   \   \
+    //   c   g
+    SimpleNode c = new SimpleNode('c', null, null);
+    SimpleNode b = new SimpleNode('b', null, c);
+    SimpleNode g = new SimpleNode('g', null, null);
+    SimpleNode f = new SimpleNode('f', null, g);
+    SimpleNode d = new SimpleNode('d', b, f);
+
+    BstMutationResult<Character, SimpleNode> extractMax =
+        BstOperations.extractMax(d, nodeFactory, balancePolicy);
+    assertEquals('g', extractMax.getTargetKey().charValue());
+    assertEquals(d, extractMax.getOriginalRoot());
+    assertEquals(g, extractMax.getOriginalTarget());
+    assertNull(extractMax.getChangedTarget());
+    assertInOrderTraversalIs(extractMax.getChangedRoot(), "bcdf");
+  }
+
+  public void testExtractMax2() {
+    //    d
+    //   / \
+    //  b   f
+    //     /
+    //     e
+    SimpleNode b = new SimpleNode('b', null, null);
+    SimpleNode e = new SimpleNode('e', null, null);
+    SimpleNode f = new SimpleNode('f', e, null);
+    SimpleNode d = new SimpleNode('d', b, f);
+
+    BstMutationResult<Character, SimpleNode> extractMax =
+        BstOperations.extractMax(d, nodeFactory, balancePolicy);
+    assertEquals('f', extractMax.getTargetKey().charValue());
+    assertEquals(d, extractMax.getOriginalRoot());
+    assertEquals(f, extractMax.getOriginalTarget());
+    assertNull(extractMax.getChangedTarget());
+    assertInOrderTraversalIs(extractMax.getChangedRoot(), "bde");
+  }
+
+  @GwtIncompatible("NullPointerTester")
+  public void testNullPointers() throws Exception {
+    defaultNullPointerTester().testAllPublicStaticMethods(BstOperations.class);
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/BstPathTest.java b/guava-tests/test/com/google/common/collect/BstPathTest.java
new file mode 100644
index 0000000..08c582d
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/BstPathTest.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.collect.BstTesting.SimpleNode;
+
+import junit.framework.TestCase;
+
+/**
+ * Simple tests for {@code BstPath}.
+ *
+ * @author Louis Wasserman
+ */
+@GwtCompatible
+public class BstPathTest extends TestCase {
+  static class SimplePath extends BstPath<SimpleNode, SimplePath> {
+    private SimplePath(SimpleNode tip, SimplePath tail) {
+      super(tip, tail);
+    }
+  }
+
+  public void testTailAtRoot() {
+    SimpleNode root = new SimpleNode('a', null, null);
+    SimplePath rootPath = new SimplePath(root, null);
+    assertFalse(rootPath.hasPrefix());
+    assertNull(rootPath.prefixOrNull());
+    try {
+      rootPath.getPrefix();
+      fail("Expected IllegalStateException");
+    } catch (IllegalStateException expected) {}
+  }
+
+  public void testTailDown() {
+    SimpleNode node = new SimpleNode('a', null, null);
+    SimpleNode root = new SimpleNode('b', node, null);
+    SimplePath rootPath = new SimplePath(root, null);
+    SimplePath nodePath = new SimplePath(node, rootPath);
+    assertTrue(nodePath.hasPrefix());
+    assertEquals(rootPath, nodePath.prefixOrNull());
+    assertEquals(rootPath, nodePath.getPrefix());
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/BstRangeOpsTest.java b/guava-tests/test/com/google/common/collect/BstRangeOpsTest.java
new file mode 100644
index 0000000..d98041a
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/BstRangeOpsTest.java
@@ -0,0 +1,397 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.collect.BoundType.CLOSED;
+import static com.google.common.collect.BoundType.OPEN;
+import static com.google.common.collect.BstSide.LEFT;
+import static com.google.common.collect.BstSide.RIGHT;
+import static com.google.common.collect.BstTesting.assertInOrderTraversalIs;
+import static com.google.common.collect.BstTesting.balancePolicy;
+import static com.google.common.collect.BstTesting.countAggregate;
+import static com.google.common.collect.BstTesting.defaultNullPointerTester;
+import static com.google.common.collect.BstTesting.nodeFactory;
+import static com.google.common.collect.BstTesting.pathFactory;
+import static com.google.common.collect.BstTesting.pathToList;
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.collect.BstTesting.SimpleNode;
+
+import junit.framework.TestCase;
+
+import java.util.SortedSet;
+
+/**
+ * Tests for {@code BSTRangeOps}.
+ *
+ * @author Louis Wasserman
+ */
+@GwtCompatible(emulated = true)
+public class BstRangeOpsTest extends TestCase {
+  private static final SortedSet<Character> MODEL =
+      ImmutableSortedSet.of('a', 'b', 'c', 'd', 'e', 'f', 'g');
+  private static final SimpleNode ROOT;
+
+  static {
+    SimpleNode a = new SimpleNode('a', null, null);
+    SimpleNode c = new SimpleNode('c', null, null);
+    SimpleNode b = new SimpleNode('b', a, c);
+    SimpleNode e = new SimpleNode('e', null, null);
+    SimpleNode g = new SimpleNode('g', null, null);
+    SimpleNode f = new SimpleNode('f', e, g);
+    SimpleNode d = new SimpleNode('d', b, f);
+    ROOT = d;
+  }
+
+  public void testCountInRangeLowerBound() {
+    for (char c : "abcdefg".toCharArray()) {
+      for (BoundType type : BoundType.values()) {
+        long count = BstRangeOps.totalInRange(
+            countAggregate, GeneralRange.downTo(Ordering.natural(), c, type), ROOT);
+        char d = c;
+        if (type == BoundType.OPEN) {
+          d++;
+        }
+        assertEquals(MODEL.tailSet(d).size(), count);
+      }
+    }
+  }
+
+  public void testCountInRangeUpperBound() {
+    for (char c : "abcdefg".toCharArray()) {
+      for (BoundType type : BoundType.values()) {
+        long count = BstRangeOps.totalInRange(
+            countAggregate, GeneralRange.upTo(Ordering.natural(), c, type), ROOT);
+        char d = c;
+        if (type == BoundType.CLOSED) {
+          d++;
+        }
+        assertEquals(MODEL.headSet(d).size(), count);
+      }
+    }
+  }
+
+  public void testCountInRangeBothBounds() {
+    String chars = "abcdefg";
+    for (int i = 0; i < chars.length(); i++) {
+      for (BoundType lb : BoundType.values()) {
+        for (int j = i; j < chars.length(); j++) {
+          for (BoundType ub : BoundType.values()) {
+            if (i == j && lb == BoundType.OPEN && ub == BoundType.OPEN) {
+              continue;
+            }
+            long count = BstRangeOps.totalInRange(countAggregate, GeneralRange.range(
+                Ordering.natural(), chars.charAt(i), lb, chars.charAt(j), ub), ROOT);
+            char lo = chars.charAt(i);
+            if (lb == BoundType.OPEN) {
+              lo++;
+            }
+            char hi = chars.charAt(j);
+            if (ub == BoundType.CLOSED) {
+              hi++;
+            }
+            if (lo > hi) {
+              lo = hi;
+            }
+            assertEquals(MODEL.subSet(lo, hi).size(), count);
+          }
+        }
+      }
+    }
+  }
+
+  public void testCountInRangeAll() {
+    assertEquals(MODEL.size(), BstRangeOps.totalInRange(
+        countAggregate, GeneralRange.<Character>all(Ordering.natural()), ROOT));
+  }
+
+  public void testCountInRangeEmpty() {
+    SimpleNode empty = null;
+    GeneralRange<Character> range = GeneralRange.all(Ordering.natural());
+    assertEquals(0, BstRangeOps.totalInRange(countAggregate, range, empty));
+  }
+
+  public void testClearRangeLowerBound() {
+    //     d
+    //    / \
+    //   b   f
+    //  /   / \
+    //  a   e g
+    SimpleNode a = new SimpleNode('a', null, null);
+    SimpleNode b = new SimpleNode('b', a, null);
+    SimpleNode e = new SimpleNode('e', null, null);
+    SimpleNode g = new SimpleNode('g', null, null);
+    SimpleNode f = new SimpleNode('f', e, g);
+    SimpleNode d = new SimpleNode('d', b, f);
+
+    assertInOrderTraversalIs(d, "abdefg");
+    GeneralRange<Character> range1 = GeneralRange.downTo(Ordering.natural(), 'f', CLOSED);
+    testTraversalAfterClearingRangeIs(d, range1, "abde");
+
+    GeneralRange<Character> range2 = GeneralRange.downTo(Ordering.natural(), 'f', OPEN);
+    testTraversalAfterClearingRangeIs(d, range2, "abdef");
+
+    GeneralRange<Character> range3 = GeneralRange.downTo(Ordering.natural(), 'a', CLOSED);
+    testTraversalAfterClearingRangeIs(d, range3, "");
+
+    GeneralRange<Character> range4 = GeneralRange.downTo(Ordering.natural(), 'a', OPEN);
+    testTraversalAfterClearingRangeIs(d, range4, "a");
+
+    GeneralRange<Character> range5 = GeneralRange.downTo(Ordering.natural(), 'c', OPEN);
+    testTraversalAfterClearingRangeIs(d, range5, "ab");
+
+    GeneralRange<Character> range6 = GeneralRange.downTo(Ordering.natural(), 'c', CLOSED);
+    testTraversalAfterClearingRangeIs(d, range6, "ab");
+  }
+
+  public void testClearRangeUpperBound() {
+    //     d
+    //    / \
+    //   b   f
+    //  /   / \
+    //  a   e g
+    SimpleNode a = new SimpleNode('a', null, null);
+    SimpleNode b = new SimpleNode('b', a, null);
+    SimpleNode e = new SimpleNode('e', null, null);
+    SimpleNode g = new SimpleNode('g', null, null);
+    SimpleNode f = new SimpleNode('f', e, g);
+    SimpleNode d = new SimpleNode('d', b, f);
+
+    assertInOrderTraversalIs(d, "abdefg");
+    GeneralRange<Character> range1 = GeneralRange.upTo(Ordering.natural(), 'f', CLOSED);
+    testTraversalAfterClearingRangeIs(d, range1, "g");
+
+    GeneralRange<Character> range2 = GeneralRange.upTo(Ordering.natural(), 'f', OPEN);
+    testTraversalAfterClearingRangeIs(d, range2, "fg");
+
+    GeneralRange<Character> range3 = GeneralRange.upTo(Ordering.natural(), 'a', CLOSED);
+    testTraversalAfterClearingRangeIs(d, range3, "bdefg");
+
+    GeneralRange<Character> range4 = GeneralRange.upTo(Ordering.natural(), 'a', OPEN);
+    testTraversalAfterClearingRangeIs(d, range4, "abdefg");
+
+    GeneralRange<Character> range5 = GeneralRange.upTo(Ordering.natural(), 'c', OPEN);
+    testTraversalAfterClearingRangeIs(d, range5, "defg");
+
+    GeneralRange<Character> range6 = GeneralRange.upTo(Ordering.natural(), 'c', CLOSED);
+    testTraversalAfterClearingRangeIs(d, range6, "defg");
+  }
+
+  public void testClearRangeDoublyBounded() {
+    //     d
+    //    / \
+    //   b   f
+    //  / \ / \
+    //  a c e g
+    SimpleNode a = new SimpleNode('a', null, null);
+    SimpleNode c = new SimpleNode('c', null, null);
+    SimpleNode b = new SimpleNode('b', a, c);
+    SimpleNode e = new SimpleNode('e', null, null);
+    SimpleNode g = new SimpleNode('g', null, null);
+    SimpleNode f = new SimpleNode('f', e, g);
+    SimpleNode d = new SimpleNode('d', b, f);
+
+    GeneralRange<Character> range1 =
+        GeneralRange.range(Ordering.natural(), 'c', OPEN, 'f', CLOSED);
+    testTraversalAfterClearingRangeIs(d, range1, "abcg");
+
+    GeneralRange<Character> range2 =
+        GeneralRange.range(Ordering.natural(), 'a', CLOSED, 'h', OPEN);
+    testTraversalAfterClearingRangeIs(d, range2, "");
+
+  }
+
+  public void testClearRangeAll() {
+    //     d
+    //    / \
+    //   b   f
+    //  / \ / \
+    //  a c e g
+    SimpleNode a = new SimpleNode('a', null, null);
+    SimpleNode c = new SimpleNode('c', null, null);
+    SimpleNode b = new SimpleNode('b', a, c);
+    SimpleNode e = new SimpleNode('e', null, null);
+    SimpleNode g = new SimpleNode('g', null, null);
+    SimpleNode f = new SimpleNode('f', e, g);
+    SimpleNode d = new SimpleNode('d', b, f);
+
+    testTraversalAfterClearingRangeIs(d, GeneralRange.<Character>all(Ordering.natural()), "");
+  }
+
+  private void testTraversalAfterClearingRangeIs(
+      SimpleNode d, GeneralRange<Character> range, String expected) {
+    assertInOrderTraversalIs(
+        BstRangeOps.minusRange(range, balancePolicy, nodeFactory, d), expected);
+  }
+
+  public void testLeftmostPathAll() {
+    //     d
+    //    / \
+    //   b   f
+    //    \ / \
+    //    c e g
+    SimpleNode c = new SimpleNode('c', null, null);
+    SimpleNode b = new SimpleNode('b', null, c);
+    SimpleNode e = new SimpleNode('e', null, null);
+    SimpleNode g = new SimpleNode('g', null, null);
+    SimpleNode f = new SimpleNode('f', e, g);
+    SimpleNode d = new SimpleNode('d', b, f);
+
+    GeneralRange<Character> range1 = GeneralRange.all(Ordering.natural());
+    ASSERT.that(pathToList(BstRangeOps.furthestPath(range1, LEFT, pathFactory, d)))
+        .hasContentsInOrder(b, d);
+
+    assertNull(BstRangeOps.furthestPath(range1, LEFT, pathFactory, null));
+  }
+
+  public void testLeftmostPathDownTo() {
+    //     d
+    //    / \
+    //   b   f
+    //    \ / \
+    //    c e g
+    SimpleNode c = new SimpleNode('c', null, null);
+    SimpleNode b = new SimpleNode('b', null, c);
+    SimpleNode e = new SimpleNode('e', null, null);
+    SimpleNode g = new SimpleNode('g', null, null);
+    SimpleNode f = new SimpleNode('f', e, g);
+    SimpleNode d = new SimpleNode('d', b, f);
+
+    GeneralRange<Character> range1 = GeneralRange.downTo(Ordering.natural(), 'd', OPEN);
+    ASSERT.that(pathToList(BstRangeOps.furthestPath(range1, LEFT, pathFactory, d)))
+        .hasContentsInOrder(e, f, d);
+
+    GeneralRange<Character> range2 = GeneralRange.downTo(Ordering.natural(), 'd', CLOSED);
+    ASSERT.that(pathToList(BstRangeOps.furthestPath(range2, LEFT, pathFactory, d)))
+        .hasContentsInOrder(d);
+
+    GeneralRange<Character> range3 = GeneralRange.downTo(Ordering.natural(), 'a', CLOSED);
+    ASSERT.that(pathToList(BstRangeOps.furthestPath(range3, LEFT, pathFactory, d)))
+        .hasContentsInOrder(b, d);
+
+    GeneralRange<Character> range4 = GeneralRange.downTo(Ordering.natural(), 'h', CLOSED);
+    assertNull(BstRangeOps.furthestPath(range4, LEFT, pathFactory, d));
+  }
+
+  public void testLeftmostPathUpTo() {
+    //     d
+    //    / \
+    //   b   f
+    //    \ / \
+    //    c e g
+    SimpleNode c = new SimpleNode('c', null, null);
+    SimpleNode b = new SimpleNode('b', null, c);
+    SimpleNode e = new SimpleNode('e', null, null);
+    SimpleNode g = new SimpleNode('g', null, null);
+    SimpleNode f = new SimpleNode('f', e, g);
+    SimpleNode d = new SimpleNode('d', b, f);
+
+    GeneralRange<Character> range1 = GeneralRange.upTo(Ordering.natural(), 'd', OPEN);
+    ASSERT.that(pathToList(BstRangeOps.furthestPath(range1, LEFT, pathFactory, d)))
+        .hasContentsInOrder(b, d);
+
+    GeneralRange<Character> range2 = GeneralRange.upTo(Ordering.natural(), 'd', CLOSED);
+    ASSERT.that(pathToList(BstRangeOps.furthestPath(range2, LEFT, pathFactory, d)))
+        .hasContentsInOrder(b, d);
+
+    GeneralRange<Character> range3 = GeneralRange.upTo(Ordering.natural(), 'a', CLOSED);
+    assertNull(BstRangeOps.furthestPath(range3, LEFT, pathFactory, d));
+  }
+
+  public void testRightmostPathAll() {
+    //     d
+    //    / \
+    //   b   f
+    //    \ / \
+    //    c e g
+    SimpleNode c = new SimpleNode('c', null, null);
+    SimpleNode b = new SimpleNode('b', null, c);
+    SimpleNode e = new SimpleNode('e', null, null);
+    SimpleNode g = new SimpleNode('g', null, null);
+    SimpleNode f = new SimpleNode('f', e, g);
+    SimpleNode d = new SimpleNode('d', b, f);
+
+    GeneralRange<Character> range1 = GeneralRange.all(Ordering.natural());
+    ASSERT.that(pathToList(BstRangeOps.furthestPath(range1, RIGHT, pathFactory, d)))
+        .hasContentsInOrder(g, f, d);
+
+    assertNull(BstRangeOps.furthestPath(range1, RIGHT, pathFactory, null));
+  }
+
+  public void testRightmostPathDownTo() {
+    //     d
+    //    / \
+    //   b   f
+    //    \ / \
+    //    c e g
+    SimpleNode c = new SimpleNode('c', null, null);
+    SimpleNode b = new SimpleNode('b', null, c);
+    SimpleNode e = new SimpleNode('e', null, null);
+    SimpleNode g = new SimpleNode('g', null, null);
+    SimpleNode f = new SimpleNode('f', e, g);
+    SimpleNode d = new SimpleNode('d', b, f);
+
+    GeneralRange<Character> range1 = GeneralRange.downTo(Ordering.natural(), 'd', OPEN);
+    ASSERT.that(pathToList(BstRangeOps.furthestPath(range1, RIGHT, pathFactory, d)))
+        .hasContentsInOrder(g, f, d);
+
+    GeneralRange<Character> range2 = GeneralRange.downTo(Ordering.natural(), 'd', CLOSED);
+    ASSERT.that(pathToList(BstRangeOps.furthestPath(range2, RIGHT, pathFactory, d)))
+        .hasContentsInOrder(g, f, d);
+
+    GeneralRange<Character> range3 = GeneralRange.downTo(Ordering.natural(), 'a', CLOSED);
+    ASSERT.that(pathToList(BstRangeOps.furthestPath(range3, RIGHT, pathFactory, d)))
+        .hasContentsInOrder(g, f, d);
+
+    GeneralRange<Character> range4 = GeneralRange.downTo(Ordering.natural(), 'h', CLOSED);
+    assertNull(BstRangeOps.furthestPath(range4, RIGHT, pathFactory, d));
+  }
+
+  public void testRightmostPathUpTo() {
+    //     d
+    //    / \
+    //   b   f
+    //    \ / \
+    //    c e g
+    SimpleNode c = new SimpleNode('c', null, null);
+    SimpleNode b = new SimpleNode('b', null, c);
+    SimpleNode e = new SimpleNode('e', null, null);
+    SimpleNode g = new SimpleNode('g', null, null);
+    SimpleNode f = new SimpleNode('f', e, g);
+    SimpleNode d = new SimpleNode('d', b, f);
+
+    GeneralRange<Character> range1 = GeneralRange.upTo(Ordering.natural(), 'd', OPEN);
+    ASSERT.that(pathToList(BstRangeOps.furthestPath(range1, RIGHT, pathFactory, d)))
+        .hasContentsInOrder(c, b, d);
+
+    GeneralRange<Character> range2 = GeneralRange.upTo(Ordering.natural(), 'd', CLOSED);
+    ASSERT.that(pathToList(BstRangeOps.furthestPath(range2, RIGHT, pathFactory, d)))
+        .hasContentsInOrder(d);
+
+    GeneralRange<Character> range3 = GeneralRange.upTo(Ordering.natural(), 'a', CLOSED);
+    assertNull(BstRangeOps.furthestPath(range3, RIGHT, pathFactory, d));
+
+    GeneralRange<Character> range4 = GeneralRange.upTo(Ordering.natural(), 'h', CLOSED);
+    ASSERT.that(pathToList(BstRangeOps.furthestPath(range4, RIGHT, pathFactory, d)))
+        .hasContentsInOrder(g, f, d);
+  }
+
+  @GwtIncompatible("NullPointerTester")
+  public void testNullPointers() throws Exception {
+    defaultNullPointerTester().testAllPublicStaticMethods(BstRangeOps.class);
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/BstTesting.java b/guava-tests/test/com/google/common/collect/BstTesting.java
new file mode 100644
index 0000000..af929b2
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/BstTesting.java
@@ -0,0 +1,188 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.collect.BstSide.LEFT;
+import static com.google.common.collect.BstSide.RIGHT;
+import static junit.framework.Assert.assertEquals;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.base.Objects;
+import com.google.common.testing.NullPointerTester;
+
+import java.util.List;
+
+import javax.annotation.Nullable;
+
+/**
+ * Testing classes and utilities to be used in tests of the binary search tree framework.
+ *
+ * @author Louis Wasserman
+ */
+@GwtCompatible(emulated = true)
+public class BstTesting {
+  static final class SimpleNode extends BstNode<Character, SimpleNode> {
+    SimpleNode(Character key, @Nullable SimpleNode left, @Nullable SimpleNode right) {
+      super(key, left, right);
+    }
+
+    @Override
+    public String toString() {
+      return getKey().toString();
+    }
+
+    @Override
+    public boolean equals(@Nullable Object obj) {
+      if (obj instanceof SimpleNode) {
+        SimpleNode node = (SimpleNode) obj;
+        return getKey().equals(node.getKey())
+            && Objects.equal(childOrNull(LEFT), node.childOrNull(LEFT))
+            && Objects.equal(childOrNull(RIGHT), node.childOrNull(RIGHT));
+      }
+      return false;
+    }
+
+    @Override
+    public int hashCode() {
+      return Objects.hashCode(getKey(), childOrNull(LEFT), childOrNull(RIGHT));
+    }
+  }
+
+  static final BstNodeFactory<SimpleNode> nodeFactory = new BstNodeFactory<SimpleNode>() {
+    @Override
+    public SimpleNode createNode(
+        SimpleNode source, @Nullable SimpleNode left, @Nullable SimpleNode right) {
+      return new SimpleNode(source.getKey(), left, right);
+    }
+  };
+
+  static final BstBalancePolicy<SimpleNode> balancePolicy = new BstBalancePolicy<SimpleNode>() {
+    @Override
+    public SimpleNode balance(BstNodeFactory<SimpleNode> nodeFactory, SimpleNode source,
+        @Nullable SimpleNode left, @Nullable SimpleNode right) {
+      return checkNotNull(nodeFactory).createNode(source, left, right);
+    }
+
+    @Nullable
+    @Override
+    public SimpleNode combine(BstNodeFactory<SimpleNode> nodeFactory, @Nullable SimpleNode left,
+        @Nullable SimpleNode right) {
+      // Shove right into the rightmost position in the left tree.
+      if (left == null) {
+        return right;
+      } else if (right == null) {
+        return left;
+      } else if (left.hasChild(RIGHT)) {
+        return nodeFactory.createNode(
+            left, left.childOrNull(LEFT), combine(nodeFactory, left.childOrNull(RIGHT), right));
+      } else {
+        return nodeFactory.createNode(left, left.childOrNull(LEFT), right);
+      }
+    }
+  };
+
+  static final BstPathFactory<SimpleNode, BstInOrderPath<SimpleNode>> pathFactory =
+      BstInOrderPath.inOrderFactory();
+
+  // A direct, if dumb, way to count total nodes in a tree.
+  static final BstAggregate<SimpleNode> countAggregate = new BstAggregate<SimpleNode>() {
+    @Override
+    public int entryValue(SimpleNode entry) {
+      return 1;
+    }
+
+    @Override
+    public long treeValue(@Nullable SimpleNode tree) {
+      if (tree == null) {
+        return 0;
+      } else {
+        return 1 + treeValue(tree.childOrNull(LEFT)) + treeValue(tree.childOrNull(RIGHT));
+      }
+    }
+  };
+
+  static <P extends BstPath<SimpleNode, P>> List<SimpleNode> pathToList(P path) {
+    List<SimpleNode> list = Lists.newArrayList();
+    for (; path != null; path = path.prefixOrNull()) {
+      list.add(path.getTip());
+    }
+    return list;
+  }
+
+  static <N extends BstNode<?, N>, P extends BstPath<N, P>> P extension(
+      BstPathFactory<N, P> factory, N root, BstSide... sides) {
+    P path = factory.initialPath(root);
+    for (BstSide side : sides) {
+      path = factory.extension(path, side);
+    }
+    return path;
+  }
+
+  static void assertInOrderTraversalIs(@Nullable SimpleNode root, String order) {
+    if (root == null) {
+      assertEquals("", order);
+    } else {
+      BstInOrderPath<SimpleNode> path = pathFactory.initialPath(root);
+      while (path.getTip().hasChild(LEFT)) {
+        path = pathFactory.extension(path, LEFT);
+      }
+      assertEquals(order.charAt(0), path
+          .getTip()
+          .getKey()
+          .charValue());
+      int i;
+      for (i = 1; path.hasNext(RIGHT); i++) {
+        path = path.next(RIGHT);
+        assertEquals(order.charAt(i), path
+            .getTip()
+            .getKey()
+            .charValue());
+      }
+      assertEquals(i, order.length());
+    }
+  }
+
+  @GwtIncompatible("NullPointerTester")
+  static NullPointerTester defaultNullPointerTester() {
+    NullPointerTester tester = new NullPointerTester();
+    SimpleNode node = new SimpleNode('a', null, null);
+    tester.setDefault(BstNode.class, node);
+    tester.setDefault(BstSide.class, LEFT);
+    tester.setDefault(BstNodeFactory.class, nodeFactory);
+    tester.setDefault(BstBalancePolicy.class, balancePolicy);
+    tester.setDefault(BstPathFactory.class, pathFactory);
+    tester.setDefault(BstPath.class, pathFactory.initialPath(node));
+    tester.setDefault(BstInOrderPath.class, pathFactory.initialPath(node));
+    tester.setDefault(Object.class, 'a');
+    tester.setDefault(GeneralRange.class, GeneralRange.all(Ordering.natural()));
+    tester.setDefault(BstAggregate.class, countAggregate);
+    BstModifier<Character, SimpleNode> modifier = new BstModifier<Character, SimpleNode>() {
+      @Nullable
+      @Override
+      public BstModificationResult<SimpleNode> modify(
+          Character key, @Nullable SimpleNode originalEntry) {
+        return BstModificationResult.identity(originalEntry);
+      }
+    };
+    tester.setDefault(
+        BstModificationResult.class, BstModificationResult.<SimpleNode>identity(null));
+    tester.setDefault(BstModifier.class, modifier);
+    tester.setDefault(
+        BstMutationRule.class, BstMutationRule.createRule(modifier, balancePolicy, nodeFactory));
+    return tester;
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/Collections2Test.java b/guava-tests/test/com/google/common/collect/Collections2Test.java
new file mode 100644
index 0000000..e17cd05
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/Collections2Test.java
@@ -0,0 +1,364 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.collect.Lists.newArrayList;
+import static com.google.common.collect.Lists.newLinkedList;
+import static com.google.common.collect.testing.testers.CollectionIteratorTester.getIteratorKnownOrderRemoveSupportedMethod;
+import static java.util.Arrays.asList;
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.base.Function;
+import com.google.common.base.Predicate;
+import com.google.common.collect.testing.CollectionTestSuiteBuilder;
+import com.google.common.collect.testing.TestStringCollectionGenerator;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.testing.NullPointerTester;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * Tests for {@link Collections2}.
+ *
+ * @author Chris Povirk
+ * @author Jared Levy
+ */
+@GwtCompatible(emulated = true)
+public class Collections2Test extends TestCase {
+  @GwtIncompatible("suite")
+  public static Test suite() {
+    TestSuite suite = new TestSuite(Collections2Test.class.getSimpleName());
+    suite.addTest(testsForFilter());
+    suite.addTest(testsForFilterAll());
+    suite.addTest(testsForFilterLinkedList());
+    suite.addTest(testsForFilterNoNulls());
+    suite.addTest(testsForFilterFiltered());
+    suite.addTest(testsForTransform());
+    suite.addTestSuite(Collections2Test.class);
+    return suite;
+  }
+
+  static final Predicate<String> NOT_YYY_ZZZ = new Predicate<String>() {
+      @Override
+      public boolean apply(String input) {
+        return !"yyy".equals(input) && !"zzz".equals(input);
+      }
+  };
+
+  static final Predicate<String> LENGTH_1 = new Predicate<String>() {
+    @Override
+    public boolean apply(String input) {
+      return input.length() == 1;
+    }
+  };
+
+  static final Predicate<String> STARTS_WITH_VOWEL = new Predicate<String>() {
+    @Override
+    public boolean apply(String input) {
+      return asList('a', 'e', 'i', 'o', 'u').contains(input.charAt(0));
+    }
+  };
+
+  @GwtIncompatible("suite")
+  private static Test testsForFilter() {
+    return CollectionTestSuiteBuilder.using(
+        new TestStringCollectionGenerator() {
+          @Override public Collection<String> create(String[] elements) {
+            List<String> unfiltered = newArrayList();
+            unfiltered.add("yyy");
+            unfiltered.addAll(asList(elements));
+            unfiltered.add("zzz");
+            return Collections2.filter(unfiltered, NOT_YYY_ZZZ);
+          }
+        })
+        .named("Collections2.filter")
+        .withFeatures(
+            CollectionFeature.GENERAL_PURPOSE,
+            CollectionFeature.ALLOWS_NULL_VALUES,
+            CollectionFeature.KNOWN_ORDER,
+            CollectionSize.ANY)
+        .suppressing(getIteratorKnownOrderRemoveSupportedMethod())
+        .createTestSuite();
+  }
+
+  @GwtIncompatible("suite")
+  private static Test testsForFilterAll() {
+    return CollectionTestSuiteBuilder.using(
+        new TestStringCollectionGenerator() {
+          @Override public Collection<String> create(String[] elements) {
+            List<String> unfiltered = newArrayList();
+            unfiltered.addAll(asList(elements));
+            return Collections2.filter(unfiltered, NOT_YYY_ZZZ);
+          }
+        })
+        .named("Collections2.filter")
+        .withFeatures(
+            CollectionFeature.GENERAL_PURPOSE,
+            CollectionFeature.ALLOWS_NULL_VALUES,
+            CollectionFeature.KNOWN_ORDER,
+            CollectionSize.ANY)
+        .suppressing(getIteratorKnownOrderRemoveSupportedMethod())
+        .createTestSuite();
+  }
+
+  @GwtIncompatible("suite")
+  private static Test testsForFilterLinkedList() {
+    return CollectionTestSuiteBuilder.using(
+        new TestStringCollectionGenerator() {
+          @Override public Collection<String> create(String[] elements) {
+            List<String> unfiltered = newLinkedList();
+            unfiltered.add("yyy");
+            unfiltered.addAll(asList(elements));
+            unfiltered.add("zzz");
+            return Collections2.filter(unfiltered, NOT_YYY_ZZZ);
+          }
+        })
+        .named("Collections2.filter")
+        .withFeatures(
+            CollectionFeature.GENERAL_PURPOSE,
+            CollectionFeature.ALLOWS_NULL_VALUES,
+            CollectionFeature.KNOWN_ORDER,
+            CollectionSize.ANY)
+        .suppressing(getIteratorKnownOrderRemoveSupportedMethod())
+        .createTestSuite();
+  }
+
+  @GwtIncompatible("suite")
+  private static Test testsForFilterNoNulls() {
+    return CollectionTestSuiteBuilder.using(
+        new TestStringCollectionGenerator() {
+          @Override public Collection<String> create(String[] elements) {
+            List<String> unfiltered = newArrayList();
+            unfiltered.add("yyy");
+            unfiltered.addAll(ImmutableList.copyOf(elements));
+            unfiltered.add("zzz");
+            return Collections2.filter(unfiltered, LENGTH_1);
+          }
+        })
+        .named("Collections2.filter, no nulls")
+        .withFeatures(
+            CollectionFeature.GENERAL_PURPOSE,
+            CollectionFeature.ALLOWS_NULL_QUERIES,
+            CollectionFeature.KNOWN_ORDER,
+            CollectionSize.ANY)
+        .suppressing(getIteratorKnownOrderRemoveSupportedMethod())
+        .createTestSuite();
+  }
+
+  @GwtIncompatible("suite")
+  private static Test testsForFilterFiltered() {
+    return CollectionTestSuiteBuilder.using(
+        new TestStringCollectionGenerator() {
+          @Override public Collection<String> create(String[] elements) {
+            List<String> unfiltered = newArrayList();
+            unfiltered.add("yyy");
+            unfiltered.addAll(ImmutableList.copyOf(elements));
+            unfiltered.add("zzz");
+            unfiltered.add("abc");
+            return Collections2.filter(
+                Collections2.filter(unfiltered, LENGTH_1), NOT_YYY_ZZZ);
+          }
+        })
+        .named("Collections2.filter, filtered input")
+        .withFeatures(
+            CollectionFeature.GENERAL_PURPOSE,
+            CollectionFeature.KNOWN_ORDER,
+            CollectionFeature.ALLOWS_NULL_QUERIES,
+            CollectionSize.ANY)
+        .suppressing(getIteratorKnownOrderRemoveSupportedMethod())
+        .createTestSuite();
+  }
+
+  public abstract static class FilterChangeTest extends TestCase {
+    protected abstract <E> List<E> newList();
+
+    public void testFilterIllegalAdd() {
+      List<String> unfiltered = newList();
+      Collection<String> filtered
+          = Collections2.filter(unfiltered, NOT_YYY_ZZZ);
+      filtered.add("a");
+      filtered.add("b");
+      ASSERT.that(filtered).hasContentsInOrder("a", "b");
+
+      try {
+        filtered.add("yyy");
+        fail();
+      } catch (IllegalArgumentException expected) {}
+
+      try {
+        filtered.addAll(asList("c", "zzz", "d"));
+        fail();
+      } catch (IllegalArgumentException expected) {}
+
+      ASSERT.that(filtered).hasContentsInOrder("a", "b");
+    }
+
+    public void testFilterChangeUnfiltered() {
+      List<String> unfiltered = newList();
+      Collection<String> filtered
+          = Collections2.filter(unfiltered, NOT_YYY_ZZZ);
+
+      unfiltered.add("a");
+      unfiltered.add("yyy");
+      unfiltered.add("b");
+      ASSERT.that(unfiltered).hasContentsInOrder("a", "yyy", "b");
+      ASSERT.that(filtered).hasContentsInOrder("a", "b");
+
+      unfiltered.remove("a");
+      ASSERT.that(unfiltered).hasContentsInOrder("yyy", "b");
+      ASSERT.that(filtered).hasContentsInOrder("b");
+
+      unfiltered.clear();
+      ASSERT.that(unfiltered).isEmpty();
+      ASSERT.that(filtered).isEmpty();
+
+      unfiltered.add("yyy");
+      ASSERT.that(unfiltered).hasContentsInOrder("yyy");
+      ASSERT.that(filtered).isEmpty();
+      filtered.clear();
+      ASSERT.that(unfiltered).hasContentsInOrder("yyy");
+      ASSERT.that(filtered).isEmpty();
+
+      unfiltered.clear();
+      filtered.clear();
+      ASSERT.that(unfiltered).isEmpty();
+      ASSERT.that(filtered).isEmpty();
+
+      unfiltered.add("a");
+      ASSERT.that(unfiltered).hasContentsInOrder("a");
+      ASSERT.that(filtered).hasContentsInOrder("a");
+      filtered.clear();
+      ASSERT.that(unfiltered).isEmpty();
+      ASSERT.that(filtered).isEmpty();
+
+      unfiltered.clear();
+      Collections.addAll(unfiltered,
+          "a", "b", "yyy", "zzz", "c", "d", "yyy", "zzz");
+      ASSERT.that(unfiltered).hasContentsInOrder(
+          "a", "b", "yyy", "zzz", "c", "d", "yyy", "zzz");
+      ASSERT.that(filtered).hasContentsInOrder("a", "b", "c", "d");
+      filtered.clear();
+      ASSERT.that(unfiltered).hasContentsInOrder("yyy", "zzz", "yyy", "zzz");
+      ASSERT.that(filtered).isEmpty();
+    }
+
+    public void testFilterChangeFiltered() {
+      List<String> unfiltered = newList();
+      Collection<String> filtered
+          = Collections2.filter(unfiltered, NOT_YYY_ZZZ);
+
+      unfiltered.add("a");
+      unfiltered.add("yyy");
+      filtered.add("b");
+      ASSERT.that(unfiltered).hasContentsInOrder("a", "yyy", "b");
+      ASSERT.that(filtered).hasContentsInOrder("a", "b");
+
+      filtered.remove("a");
+      ASSERT.that(unfiltered).hasContentsInOrder("yyy", "b");
+      ASSERT.that(filtered).hasContentsInOrder("b");
+
+      filtered.clear();
+      ASSERT.that(unfiltered).hasContentsInOrder("yyy");
+      ASSERT.that(filtered);
+    }
+
+    public void testFilterFiltered() {
+      List<String> unfiltered = newList();
+      Collection<String> filtered = Collections2.filter(
+          Collections2.filter(unfiltered, LENGTH_1), STARTS_WITH_VOWEL);
+      unfiltered.add("a");
+      unfiltered.add("b");
+      unfiltered.add("apple");
+      unfiltered.add("banana");
+      unfiltered.add("e");
+      ASSERT.that(filtered).hasContentsInOrder("a", "e");
+      ASSERT.that(unfiltered).hasContentsInOrder("a", "b", "apple", "banana", "e");
+
+      try {
+        filtered.add("d");
+        fail();
+      } catch (IllegalArgumentException expected) {}
+      try {
+        filtered.add("egg");
+        fail();
+      } catch (IllegalArgumentException expected) {}
+      ASSERT.that(filtered).hasContentsInOrder("a", "e");
+      ASSERT.that(unfiltered).hasContentsInOrder("a", "b", "apple", "banana", "e");
+
+      filtered.clear();
+      ASSERT.that(filtered).isEmpty();
+      ASSERT.that(unfiltered).hasContentsInOrder("b", "apple", "banana");
+    }
+  }
+
+  public static class ArrayListFilterChangeTest extends FilterChangeTest {
+    @Override protected <E> List<E> newList() {
+      return Lists.newArrayList();
+    }
+  }
+
+  public static class LinkedListFilterChangeTest extends FilterChangeTest {
+    @Override protected <E> List<E> newList() {
+      return Lists.newLinkedList();
+    }
+  }
+
+  private static final Function<String, String> REMOVE_FIRST_CHAR
+      = new Function<String, String>() {
+        @Override
+        public String apply(String from) {
+          return ((from == null) || "".equals(from))
+              ? null : from.substring(1);
+        }
+      };
+
+  @GwtIncompatible("suite")
+  private static Test testsForTransform() {
+    return CollectionTestSuiteBuilder.using(
+        new TestStringCollectionGenerator() {
+          @Override public Collection<String> create(String[] elements) {
+            List<String> list = newArrayList();
+            for (String element : elements) {
+              list.add((element == null) ? null : "q" + element);
+            }
+            return Collections2.transform(list, REMOVE_FIRST_CHAR);
+          }
+        })
+        .named("Collections2.transform")
+        .withFeatures(
+            CollectionFeature.REMOVE_OPERATIONS,
+            CollectionFeature.ALLOWS_NULL_VALUES,
+            CollectionFeature.KNOWN_ORDER,
+            CollectionSize.ANY)
+        .createTestSuite();
+  }
+
+  @GwtIncompatible("NullPointerTester")
+  public void testNullPointerExceptions() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.testAllPublicStaticMethods(Collections2.class);
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/ComparisonChainTest.java b/guava-tests/test/com/google/common/collect/ComparisonChainTest.java
new file mode 100644
index 0000000..c0ddcd5
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/ComparisonChainTest.java
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import junit.framework.AssertionFailedError;
+import junit.framework.TestCase;
+
+/**
+ * Unit test for {@link ComparisonChain}.
+ *
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible
+public class ComparisonChainTest extends TestCase {
+  private static final DontCompareMe DONT_COMPARE_ME = new DontCompareMe();
+
+  private static class DontCompareMe implements Comparable<DontCompareMe> {
+    @Override
+    public int compareTo(DontCompareMe o) {
+      throw new AssertionFailedError();
+    }
+  }
+
+  public void testDegenerate() {
+    // kinda bogus, but who cares?
+    assertEquals(0, ComparisonChain.start().result());
+  }
+
+  public void testOneEqual() {
+    assertEquals(0, ComparisonChain.start()
+        .compare("a", "a")
+        .result());
+  }
+
+  public void testOneEqualUsingComparator() {
+    assertEquals(0, ComparisonChain.start()
+        .compare("a", "A", String.CASE_INSENSITIVE_ORDER)
+        .result());
+  }
+
+  public void testManyEqual() {
+    assertEquals(0, ComparisonChain.start()
+        .compare(1, 1)
+        .compare(1L, 1L)
+        .compare(true, true)
+        .compare(1.0, 1.0)
+        .compare(1.0f, 1.0f)
+        .compare("a", "a", Ordering.usingToString())
+        .result());
+  }
+
+  public void testShortCircuitLess() {
+    assertTrue(ComparisonChain.start()
+        .compare("a", "b")
+        .compare(DONT_COMPARE_ME, DONT_COMPARE_ME)
+        .result() < 0);
+  }
+
+  public void testShortCircuitGreater() {
+    assertTrue(ComparisonChain.start()
+        .compare("b", "a")
+        .compare(DONT_COMPARE_ME, DONT_COMPARE_ME)
+        .result() > 0);
+  }
+
+  public void testShortCircuitSecondStep() {
+    assertTrue(ComparisonChain.start()
+        .compare("a", "a")
+        .compare("a", "b")
+        .compare(DONT_COMPARE_ME, DONT_COMPARE_ME)
+        .result() < 0);
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/ComputingConcurrentHashMapTest.java b/guava-tests/test/com/google/common/collect/ComputingConcurrentHashMapTest.java
new file mode 100644
index 0000000..3a75690
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/ComputingConcurrentHashMapTest.java
@@ -0,0 +1,346 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.collect.MapMakerInternalMap.DRAIN_THRESHOLD;
+import static com.google.common.collect.MapMakerInternalMapTest.SMALL_MAX_SIZE;
+import static com.google.common.collect.MapMakerInternalMapTest.allEvictingMakers;
+import static com.google.common.collect.MapMakerInternalMapTest.assertNotified;
+import static com.google.common.collect.MapMakerInternalMapTest.checkAndDrainRecencyQueue;
+import static com.google.common.collect.MapMakerInternalMapTest.checkEvictionQueues;
+import static com.google.common.collect.MapMakerInternalMapTest.checkExpirationTimes;
+
+import com.google.common.base.Function;
+import com.google.common.collect.ComputingConcurrentHashMap.ComputingMapAdapter;
+import com.google.common.collect.MapMaker.RemovalCause;
+import com.google.common.collect.MapMakerInternalMap.ReferenceEntry;
+import com.google.common.collect.MapMakerInternalMap.Segment;
+import com.google.common.collect.MapMakerInternalMapTest.DummyEntry;
+import com.google.common.collect.MapMakerInternalMapTest.DummyValueReference;
+import com.google.common.collect.MapMakerInternalMapTest.QueuingRemovalListener;
+import com.google.common.testing.NullPointerTester;
+
+import junit.framework.TestCase;
+
+import java.util.Iterator;
+import java.util.List;
+import java.util.Random;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicReferenceArray;
+
+/**
+ * @author Charles Fry
+ */
+public class ComputingConcurrentHashMapTest extends TestCase {
+
+  private static <K, V> ComputingConcurrentHashMap<K, V> makeComputingMap(
+      MapMaker maker, Function<? super K, ? extends V> computingFunction) {
+    return new ComputingConcurrentHashMap<K, V>(
+        maker, computingFunction);
+  }
+
+  private static <K, V> ComputingMapAdapter<K, V> makeAdaptedMap(
+      MapMaker maker, Function<? super K, ? extends V> computingFunction) {
+    return new ComputingMapAdapter<K, V>(
+        maker, computingFunction);
+  }
+
+  private MapMaker createMapMaker() {
+    MapMaker maker = new MapMaker();
+    maker.useCustomMap = true;
+    return maker;
+  }
+
+  // constructor tests
+
+  public void testComputingFunction() {
+    Function<Object, Object> computingFunction = new Function<Object, Object>() {
+      @Override
+      public Object apply(Object from) {
+        return from;
+      }
+    };
+    ComputingConcurrentHashMap<Object, Object> map =
+        makeComputingMap(createMapMaker(), computingFunction);
+    assertSame(computingFunction, map.computingFunction);
+  }
+
+  // computation tests
+
+  public void testCompute() throws ExecutionException {
+    CountingFunction computingFunction = new CountingFunction();
+    ComputingConcurrentHashMap<Object, Object> map =
+        makeComputingMap(createMapMaker(), computingFunction);
+    assertEquals(0, computingFunction.getCount());
+
+    Object key = new Object();
+    Object value = map.getOrCompute(key);
+    assertEquals(1, computingFunction.getCount());
+    assertEquals(value, map.getOrCompute(key));
+    assertEquals(1, computingFunction.getCount());
+  }
+
+  public void testComputeNull() {
+    Function<Object, Object> computingFunction = new ConstantLoader<Object, Object>(null);
+    ComputingMapAdapter<Object, Object> map = makeAdaptedMap(createMapMaker(), computingFunction);
+    try {
+      map.get(new Object());
+      fail();
+    } catch (NullPointerException expected) {}
+  }
+
+  public void testRecordReadOnCompute() throws ExecutionException {
+    CountingFunction computingFunction = new CountingFunction();
+    for (MapMaker maker : allEvictingMakers()) {
+      ComputingConcurrentHashMap<Object, Object> map =
+          makeComputingMap(maker.concurrencyLevel(1), computingFunction);
+      Segment<Object, Object> segment = map.segments[0];
+      List<ReferenceEntry<Object, Object>> writeOrder = Lists.newLinkedList();
+      List<ReferenceEntry<Object, Object>> readOrder = Lists.newLinkedList();
+      for (int i = 0; i < SMALL_MAX_SIZE; i++) {
+        Object key = new Object();
+        int hash = map.hash(key);
+
+        map.getOrCompute(key);
+        ReferenceEntry<Object, Object> entry = segment.getEntry(key, hash);
+        writeOrder.add(entry);
+        readOrder.add(entry);
+      }
+
+      checkEvictionQueues(map, segment, readOrder, writeOrder);
+      checkExpirationTimes(map);
+      assertTrue(segment.recencyQueue.isEmpty());
+
+      // access some of the elements
+      Random random = new Random();
+      List<ReferenceEntry<Object, Object>> reads = Lists.newArrayList();
+      Iterator<ReferenceEntry<Object, Object>> i = readOrder.iterator();
+      while (i.hasNext()) {
+        ReferenceEntry<Object, Object> entry = i.next();
+        if (random.nextBoolean()) {
+          map.getOrCompute(entry.getKey());
+          reads.add(entry);
+          i.remove();
+          assertTrue(segment.recencyQueue.size() <= DRAIN_THRESHOLD);
+        }
+      }
+      int undrainedIndex = reads.size() - segment.recencyQueue.size();
+      checkAndDrainRecencyQueue(map, segment, reads.subList(undrainedIndex, reads.size()));
+      readOrder.addAll(reads);
+
+      checkEvictionQueues(map, segment, readOrder, writeOrder);
+      checkExpirationTimes(map);
+    }
+  }
+
+  public void testComputeExistingEntry() throws ExecutionException {
+    CountingFunction computingFunction = new CountingFunction();
+    ComputingConcurrentHashMap<Object, Object> map =
+        makeComputingMap(createMapMaker(), computingFunction);
+    assertEquals(0, computingFunction.getCount());
+
+    Object key = new Object();
+    Object value = new Object();
+    map.put(key, value);
+
+    assertEquals(value, map.getOrCompute(key));
+    assertEquals(0, computingFunction.getCount());
+  }
+
+  public void testComputePartiallyCollectedKey() throws ExecutionException {
+    MapMaker maker = createMapMaker().concurrencyLevel(1);
+    CountingFunction computingFunction = new CountingFunction();
+    ComputingConcurrentHashMap<Object, Object> map = makeComputingMap(maker, computingFunction);
+    Segment<Object, Object> segment = map.segments[0];
+    AtomicReferenceArray<ReferenceEntry<Object, Object>> table = segment.table;
+    assertEquals(0, computingFunction.getCount());
+
+    Object key = new Object();
+    int hash = map.hash(key);
+    Object value = new Object();
+    int index = hash & (table.length() - 1);
+
+    DummyEntry<Object, Object> entry = DummyEntry.create(key, hash, null);
+    DummyValueReference<Object, Object> valueRef = DummyValueReference.create(value, entry);
+    entry.setValueReference(valueRef);
+    table.set(index, entry);
+    segment.count++;
+
+    assertSame(value, map.getOrCompute(key));
+    assertEquals(0, computingFunction.getCount());
+    assertEquals(1, segment.count);
+
+    entry.clearKey();
+    assertNotSame(value, map.getOrCompute(key));
+    assertEquals(1, computingFunction.getCount());
+    assertEquals(2, segment.count);
+  }
+
+  public void testComputePartiallyCollectedValue() throws ExecutionException {
+    MapMaker maker = createMapMaker().concurrencyLevel(1);
+    CountingFunction computingFunction = new CountingFunction();
+    ComputingConcurrentHashMap<Object, Object> map = makeComputingMap(maker, computingFunction);
+    Segment<Object, Object> segment = map.segments[0];
+    AtomicReferenceArray<ReferenceEntry<Object, Object>> table = segment.table;
+    assertEquals(0, computingFunction.getCount());
+
+    Object key = new Object();
+    int hash = map.hash(key);
+    Object value = new Object();
+    int index = hash & (table.length() - 1);
+
+    DummyEntry<Object, Object> entry = DummyEntry.create(key, hash, null);
+    DummyValueReference<Object, Object> valueRef = DummyValueReference.create(value, entry);
+    entry.setValueReference(valueRef);
+    table.set(index, entry);
+    segment.count++;
+
+    assertSame(value, map.getOrCompute(key));
+    assertEquals(0, computingFunction.getCount());
+    assertEquals(1, segment.count);
+
+    valueRef.clear(null);
+    assertNotSame(value, map.getOrCompute(key));
+    assertEquals(1, computingFunction.getCount());
+    assertEquals(1, segment.count);
+  }
+
+  @SuppressWarnings("deprecation") // test of deprecated method
+  public void testComputeExpiredEntry() throws ExecutionException {
+    MapMaker maker = createMapMaker().expireAfterWrite(1, TimeUnit.NANOSECONDS);
+    CountingFunction computingFunction = new CountingFunction();
+    ComputingConcurrentHashMap<Object, Object> map = makeComputingMap(maker, computingFunction);
+    assertEquals(0, computingFunction.getCount());
+
+    Object key = new Object();
+    Object one = map.getOrCompute(key);
+    assertEquals(1, computingFunction.getCount());
+
+    Object two = map.getOrCompute(key);
+    assertNotSame(one, two);
+    assertEquals(2, computingFunction.getCount());
+  }
+
+  public void testRemovalListener_replaced() {
+    // TODO(user): May be a good candidate to play with the MultithreadedTestCase
+    final CountDownLatch startSignal = new CountDownLatch(1);
+    final CountDownLatch computingSignal = new CountDownLatch(1);
+    final CountDownLatch doneSignal = new CountDownLatch(1);
+    final Object computedObject = new Object();
+
+    Function<Object, Object> computingFunction = new Function<Object, Object>() {
+      @Override
+      public Object apply(Object key) {
+        computingSignal.countDown();
+        try {
+          startSignal.await();
+        } catch (InterruptedException e) {
+          throw new RuntimeException(e);
+        }
+        return computedObject;
+      }
+    };
+
+    QueuingRemovalListener<Object, Object> listener =
+        new QueuingRemovalListener<Object, Object>();
+    MapMaker maker = (MapMaker) createMapMaker().removalListener(listener);
+    final ComputingConcurrentHashMap<Object, Object> map =
+        makeComputingMap(maker, computingFunction);
+    assertTrue(listener.isEmpty());
+
+    final Object one = new Object();
+    final Object two = new Object();
+    final Object three = new Object();
+
+    new Thread() {
+      @Override
+      public void run() {
+        try {
+          map.getOrCompute(one);
+        } catch (ExecutionException e) {
+          throw new RuntimeException(e);
+        }
+        doneSignal.countDown();
+      }
+    }.start();
+
+    try {
+      computingSignal.await();
+    } catch (InterruptedException e) {
+      throw new RuntimeException(e);
+    }
+
+    map.put(one, two);
+    startSignal.countDown();
+
+    try {
+      doneSignal.await();
+    } catch (InterruptedException e) {
+      throw new RuntimeException(e);
+    }
+
+    assertNotNull(map.putIfAbsent(one, three)); // force notifications
+    assertNotified(listener, one, computedObject, RemovalCause.REPLACED);
+    assertTrue(listener.isEmpty());
+  }
+
+  // computing functions
+
+  private static class CountingFunction implements Function<Object, Object> {
+    private final AtomicInteger count = new AtomicInteger();
+
+    @Override
+    public Object apply(Object from) {
+      count.incrementAndGet();
+      return new Object();
+    }
+
+    public int getCount() {
+      return count.get();
+    }
+  }
+
+  public void testNullParameters() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    Function<Object, Object> computingFunction = new IdentityLoader<Object>();
+    tester.testAllPublicInstanceMethods(makeComputingMap(createMapMaker(), computingFunction));
+  }
+
+  static final class ConstantLoader<K, V> implements Function<K, V> {
+    private final V constant;
+
+    public ConstantLoader(V constant) {
+      this.constant = constant;
+    }
+
+    @Override
+    public V apply(K key) {
+      return constant;
+    }
+  }
+
+  static final class IdentityLoader<T> implements Function<T, T> {
+    @Override
+    public T apply(T key) {
+      return key;
+    }
+  }
+
+}
diff --git a/guava-tests/test/com/google/common/collect/ConcurrentHashMultisetBasherTest.java b/guava-tests/test/com/google/common/collect/ConcurrentHashMultisetBasherTest.java
new file mode 100644
index 0000000..6c022a7
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/ConcurrentHashMultisetBasherTest.java
@@ -0,0 +1,169 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.base.Function;
+import com.google.common.primitives.Ints;
+
+import junit.framework.TestCase;
+
+import java.util.List;
+import java.util.Random;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.ConcurrentSkipListMap;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ * Basher test for {@link ConcurrentHashMultiset}: start a bunch of threads, have each of them
+ * do operations at random. Each thread keeps track of the per-key deltas that it's directly
+ * responsible for; after all threads have completed, we sum the per-key deltas and compare to the
+ * existing multiset values.
+ *
+ * @author mike nonemacher
+ */
+
+public class ConcurrentHashMultisetBasherTest extends TestCase {
+
+  public void testAddAndRemove_ConcurrentHashMap() throws Exception {
+    testAddAndRemove(new ConcurrentHashMap<String, AtomicInteger>());
+  }
+
+  public void testAddAndRemove_ConcurrentSkipListMap() throws Exception {
+    testAddAndRemove(new ConcurrentSkipListMap<String, AtomicInteger>());
+  }
+
+  public void testAddAndRemove_MapMakerMap() throws Exception {
+    MapMaker mapMaker = new MapMaker();
+    // force MapMaker to use its own MapMakerInternalMap
+    mapMaker.useCustomMap = true;
+    testAddAndRemove(mapMaker.<String, AtomicInteger>makeMap());
+  }
+
+  private void testAddAndRemove(ConcurrentMap<String, AtomicInteger> map)
+      throws ExecutionException, InterruptedException {
+
+    final ConcurrentHashMultiset<String> multiset = new ConcurrentHashMultiset<String>(map);
+    int nThreads = 20;
+    int tasksPerThread = 10;
+    int nTasks = nThreads * tasksPerThread;
+    ExecutorService pool = Executors.newFixedThreadPool(nThreads);
+    ImmutableList<String> keys = ImmutableList.of("a", "b", "c");
+    try {
+      List<Future<int[]>> futures = Lists.newArrayListWithExpectedSize(nTasks);
+      for (int i = 0; i < nTasks; i++) {
+        futures.add(pool.submit(new MutateTask(multiset, keys)));
+      }
+
+      int[] deltas = new int[3];
+      for (Future<int[]> future : futures) {
+        int[] taskDeltas = future.get();
+        for (int i = 0; i < deltas.length; i++) {
+          deltas[i] += taskDeltas[i];
+        }
+      }
+
+      List<Integer> actualCounts = Lists.transform(keys,
+          new Function<String, Integer>() {
+            @Override public Integer apply(String key) {
+              return multiset.count(key);
+            }
+          });
+      assertEquals("Counts not as expected", Ints.asList(deltas), actualCounts);
+    } finally {
+      pool.shutdownNow();
+    }
+
+    // Since we have access to the backing map, verify that there are no zeroes in the map
+    for (AtomicInteger value : map.values()) {
+      assertTrue("map should not contain a zero", value.get() != 0);
+    }
+  }
+
+  private static class MutateTask implements Callable<int[]> {
+    private final ConcurrentHashMultiset<String> multiset;
+    private final ImmutableList<String> keys;
+    private final Random random = new Random();
+
+    private MutateTask(ConcurrentHashMultiset<String> multiset, ImmutableList<String> keys) {
+      this.multiset = multiset;
+      this.keys = keys;
+    }
+
+    @Override public int[] call() throws Exception {
+      int iterations = 100000;
+      int nKeys = keys.size();
+      int[] deltas = new int[nKeys];
+      Operation[] operations = Operation.values();
+      for (int i = 0; i < iterations; i++) {
+        int keyIndex = random.nextInt(nKeys);
+        String key = keys.get(keyIndex);
+        Operation op = operations[random.nextInt(operations.length)];
+        switch (op) {
+          case ADD: {
+            int delta = random.nextInt(10);
+            multiset.add(key, delta);
+            deltas[keyIndex] += delta;
+            break;
+          }
+          case SET_COUNT: {
+            int newValue = random.nextInt(3);
+            int oldValue = multiset.setCount(key, newValue);
+            deltas[keyIndex] += (newValue - oldValue);
+            break;
+          }
+          case SET_COUNT_IF: {
+            int newValue = random.nextInt(3);
+            int oldValue = multiset.count(key);
+            if (multiset.setCount(key, oldValue, newValue)) {
+              deltas[keyIndex] += (newValue - oldValue);
+            }
+            break;
+          }
+          case REMOVE: {
+            int delta = random.nextInt(6);  // [0, 5]
+            int oldValue = multiset.remove(key, delta);
+            deltas[keyIndex] -= Math.min(delta, oldValue);
+            break;
+          }
+          case REMOVE_EXACTLY: {
+            int delta = random.nextInt(5);  // [0, 4]
+            if (multiset.removeExactly(key, delta)) {
+              deltas[keyIndex] -= delta;
+            }
+            break;
+          }
+        }
+      }
+      return deltas;
+    }
+
+    private enum Operation {
+      ADD,
+      SET_COUNT,
+      SET_COUNT_IF,
+      REMOVE,
+      REMOVE_EXACTLY,
+      ;
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/ConcurrentHashMultisetTest.java b/guava-tests/test/com/google/common/collect/ConcurrentHashMultisetTest.java
new file mode 100644
index 0000000..8a96b62
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/ConcurrentHashMultisetTest.java
@@ -0,0 +1,564 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.collect.MapMakerInternalMap.Strength.SOFT;
+import static com.google.common.collect.MapMakerInternalMap.Strength.STRONG;
+import static com.google.common.collect.MapMakerInternalMap.Strength.WEAK;
+import static com.google.common.collect.testing.IteratorFeature.SUPPORTS_REMOVE;
+import static com.google.common.testing.SerializableTester.reserializeAndAssert;
+import static java.util.Arrays.asList;
+import static org.easymock.EasyMock.eq;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.isA;
+
+import com.google.common.base.Equivalences;
+import com.google.common.collect.MapMaker.RemovalListener;
+import com.google.common.collect.MapMaker.RemovalNotification;
+import com.google.common.collect.Multiset.Entry;
+import com.google.common.collect.testing.IteratorTester;
+
+import junit.framework.TestCase;
+
+import org.easymock.EasyMock;
+
+import java.util.Iterator;
+import java.util.List;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ * Test case for {@link ConcurrentHashMultiset}.
+ *
+ * @author Cliff L. Biffle
+ * @author mike nonemacher
+ */
+public class ConcurrentHashMultisetTest extends TestCase {
+  private static final String KEY = "puppies";
+
+  ConcurrentMap<String, AtomicInteger> backingMap;
+  ConcurrentHashMultiset<String> multiset;
+
+  @SuppressWarnings("unchecked")
+  @Override protected void setUp() {
+    backingMap = EasyMock.createMock(ConcurrentMap.class);
+    expect(backingMap.isEmpty()).andReturn(true);
+    replay();
+
+    multiset = new ConcurrentHashMultiset<String>(backingMap);
+    verify();
+    reset();
+  }
+
+  public void testCount_elementPresent() {
+    final int COUNT = 12;
+    expect(backingMap.get(KEY)).andReturn(new AtomicInteger(COUNT));
+    replay();
+
+    assertEquals(COUNT, multiset.count(KEY));
+    verify();
+  }
+
+  public void testCount_elementAbsent() {
+    expect(backingMap.get(KEY)).andReturn(null);
+    replay();
+
+    assertEquals(0, multiset.count(KEY));
+    verify();
+  }
+
+  public void testAdd_zero() {
+    final int INITIAL_COUNT = 32;
+
+    expect(backingMap.get(KEY)).andReturn(new AtomicInteger(INITIAL_COUNT));
+    replay();
+    assertEquals(INITIAL_COUNT, multiset.add(KEY, 0));
+    verify();
+  }
+
+  public void testAdd_firstFewWithSuccess() {
+    final int COUNT = 400;
+
+    expect(backingMap.get(KEY)).andReturn(null);
+    expect(backingMap.putIfAbsent(eq(KEY), isA(AtomicInteger.class))).andReturn(null);
+    replay();
+
+    assertEquals(0, multiset.add(KEY, COUNT));
+    verify();
+  }
+
+  public void testAdd_laterFewWithSuccess() {
+    int INITIAL_COUNT = 32;
+    int COUNT_TO_ADD = 400;
+
+    AtomicInteger initial = new AtomicInteger(INITIAL_COUNT);
+    expect(backingMap.get(KEY)).andReturn(initial);
+    replay();
+
+    assertEquals(INITIAL_COUNT, multiset.add(KEY, COUNT_TO_ADD));
+    assertEquals(INITIAL_COUNT + COUNT_TO_ADD, initial.get());
+    verify();
+  }
+
+  public void testAdd_laterFewWithOverflow() {
+    final int INITIAL_COUNT = 92384930;
+    final int COUNT_TO_ADD = Integer.MAX_VALUE - INITIAL_COUNT + 1;
+
+    expect(backingMap.get(KEY)).andReturn(new AtomicInteger(INITIAL_COUNT));
+    replay();
+
+    try {
+      multiset.add(KEY, COUNT_TO_ADD);
+      fail("Must reject arguments that would cause counter overflow.");
+    } catch (IllegalArgumentException e) {
+      // Expected.
+    }
+    verify();
+  }
+
+  /**
+   * Simulate some of the races that can happen on add. We can't easily simulate the race that
+   * happens when an {@link AtomicInteger#compareAndSet} fails, but we can simulate the case where
+   * the putIfAbsent returns a non-null value, and the case where the replace() of an observed
+   * zero fails.
+   */
+  public void testAdd_withFailures() {
+    AtomicInteger existing = new AtomicInteger(12);
+    AtomicInteger existingZero = new AtomicInteger(0);
+
+    // initial map.get()
+    expect(backingMap.get(KEY)).andReturn(null);
+    // since get returned null, try a putIfAbsent; that fails due to a simulated race
+    expect(backingMap.putIfAbsent(eq(KEY), isA(AtomicInteger.class))).andReturn(existingZero);
+    // since the putIfAbsent returned a zero, we'll try to replace...
+    expect(backingMap.replace(eq(KEY), eq(existingZero), isA(AtomicInteger.class)))
+        .andReturn(false);
+    // ...and then putIfAbsent. Simulate failure on both
+    expect(backingMap.putIfAbsent(eq(KEY), isA(AtomicInteger.class))).andReturn(existing);
+
+    // next map.get()
+    expect(backingMap.get(KEY)).andReturn(existingZero);
+    // since get returned zero, try a replace; that fails due to a simulated race
+    expect(backingMap.replace(eq(KEY), eq(existingZero), isA(AtomicInteger.class)))
+        .andReturn(false);
+    expect(backingMap.putIfAbsent(eq(KEY), isA(AtomicInteger.class))).andReturn(existing);
+
+    // another map.get()
+    expect(backingMap.get(KEY)).andReturn(existing);
+    // we shouldn't see any more map operations; CHM will now just update the AtomicInteger
+
+    replay();
+
+    assertEquals(multiset.add(KEY, 3), 12);
+    assertEquals(15, existing.get());
+
+    verify();
+  }
+
+  public void testRemove_zeroFromSome() {
+    final int INITIAL_COUNT = 14;
+    expect(backingMap.get(KEY)).andReturn(new AtomicInteger(INITIAL_COUNT));
+    replay();
+
+    assertEquals(INITIAL_COUNT, multiset.remove(KEY, 0));
+    verify();
+  }
+
+  public void testRemove_zeroFromNone() {
+    expect(backingMap.get(KEY)).andReturn(null);
+    replay();
+
+    assertEquals(0, multiset.remove(KEY, 0));
+    verify();
+  }
+
+  public void testRemove_nonePresent() {
+    expect(backingMap.get(KEY)).andReturn(null);
+    replay();
+
+    assertEquals(0, multiset.remove(KEY, 400));
+    verify();
+  }
+
+  public void testRemove_someRemaining() {
+    int countToRemove = 30;
+    int countRemaining = 1;
+    AtomicInteger current = new AtomicInteger(countToRemove + countRemaining);
+
+    expect(backingMap.get(KEY)).andReturn(current);
+    replay();
+
+    assertEquals(countToRemove + countRemaining, multiset.remove(KEY, countToRemove));
+    assertEquals(countRemaining, current.get());
+    verify();
+  }
+
+  public void testRemove_noneRemaining() {
+    int countToRemove = 30;
+    AtomicInteger current = new AtomicInteger(countToRemove);
+
+    expect(backingMap.get(KEY)).andReturn(current);
+    // it's ok if removal fails: another thread may have done the remove
+    expect(backingMap.remove(KEY, current)).andReturn(false);
+    replay();
+
+    assertEquals(countToRemove, multiset.remove(KEY, countToRemove));
+    assertEquals(0, current.get());
+    verify();
+  }
+
+  public void testIteratorRemove_actualMap() {
+    // Override to avoid using mocks.
+    multiset = ConcurrentHashMultiset.create();
+
+    multiset.add(KEY);
+    multiset.add(KEY + "_2");
+    multiset.add(KEY);
+
+    int mutations = 0;
+    for (Iterator<String> it = multiset.iterator(); it.hasNext(); ) {
+      it.next();
+      it.remove();
+      mutations++;
+    }
+    assertTrue(multiset.isEmpty());
+    assertEquals(3, mutations);
+  }
+
+  public void testIterator() {
+    // multiset.iterator
+    List<String> expected = asList("a", "a", "b", "b", "b");
+    new IteratorTester<String>(
+        5, asList(SUPPORTS_REMOVE), expected, IteratorTester.KnownOrder.UNKNOWN_ORDER) {
+
+      ConcurrentHashMultiset<String> multiset;
+
+      @Override protected Iterator<String> newTargetIterator() {
+        multiset = ConcurrentHashMultiset.create();
+        multiset.add("a", 2);
+        multiset.add("b", 3);
+        return multiset.iterator();
+      }
+
+      @Override protected void verify(List<String> elements) {
+        super.verify(elements);
+        assertEquals(ImmutableMultiset.copyOf(elements), multiset);
+      }
+    }.test();
+  }
+
+  public void testEntryIterator() {
+    // multiset.entryIterator
+    List<Entry<String>> expected = asList(
+        Multisets.immutableEntry("a", 1),
+        Multisets.immutableEntry("b", 2),
+        Multisets.immutableEntry("c", 3),
+        Multisets.immutableEntry("d", 4),
+        Multisets.immutableEntry("e", 5));
+    new IteratorTester<Entry<String>>(
+        5, asList(SUPPORTS_REMOVE), expected, IteratorTester.KnownOrder.UNKNOWN_ORDER) {
+
+      ConcurrentHashMultiset<String> multiset;
+
+      @Override protected Iterator<Entry<String>> newTargetIterator() {
+        multiset = ConcurrentHashMultiset.create();
+        multiset.add("a", 1);
+        multiset.add("b", 2);
+        multiset.add("c", 3);
+        multiset.add("d", 4);
+        multiset.add("e", 5);
+        return multiset.entryIterator();
+      }
+
+      @Override protected void verify(List<Entry<String>> elements) {
+        super.verify(elements);
+        assertEquals(ImmutableSet.copyOf(elements), ImmutableSet.copyOf(multiset.entryIterator()));
+      }
+    }.test();
+  }
+
+  public void testSetCount_basic() {
+    int initialCount = 20;
+    int countToSet = 40;
+    AtomicInteger current = new AtomicInteger(initialCount);
+
+    expect(backingMap.get(KEY)).andReturn(current);
+    replay();
+
+    assertEquals(initialCount, multiset.setCount(KEY, countToSet));
+    assertEquals(countToSet, current.get());
+    verify();
+  }
+
+  public void testSetCount_asRemove() {
+    int countToRemove = 40;
+    AtomicInteger current = new AtomicInteger(countToRemove);
+
+    expect(backingMap.get(KEY)).andReturn(current);
+    expect(backingMap.remove(KEY, current)).andReturn(true);
+    replay();
+
+    assertEquals(countToRemove, multiset.setCount(KEY, 0));
+    assertEquals(0, current.get());
+    verify();
+  }
+
+  public void testSetCount_0_nonePresent() {
+    expect(backingMap.get(KEY)).andReturn(null);
+    replay();
+
+    assertEquals(0, multiset.setCount(KEY, 0));
+    verify();
+  }
+
+  public void testCreate() {
+    ConcurrentHashMultiset<Integer> multiset = ConcurrentHashMultiset.create();
+    assertTrue(multiset.isEmpty());
+    reserializeAndAssert(multiset);
+  }
+
+  public void testCreateFromIterable() {
+    Iterable<Integer> iterable = asList(1, 2, 2, 3, 4);
+    ConcurrentHashMultiset<Integer> multiset
+        = ConcurrentHashMultiset.create(iterable);
+    assertEquals(2, multiset.count(2));
+    reserializeAndAssert(multiset);
+  }
+
+  public void testIdentityKeyEquality_strongKeys() {
+    testIdentityKeyEquality(STRONG);
+  }
+  
+  public void testIdentityKeyEquality_softKeys() {
+    testIdentityKeyEquality(SOFT);
+  }
+
+  public void testIdentityKeyEquality_weakKeys() {
+    testIdentityKeyEquality(WEAK);
+  }
+
+  private void testIdentityKeyEquality(
+      MapMakerInternalMap.Strength keyStrength) {
+
+    MapMaker mapMaker = new MapMaker()
+        .setKeyStrength(keyStrength)
+        .keyEquivalence(Equivalences.identity());
+
+    ConcurrentHashMultiset<String> multiset =
+        ConcurrentHashMultiset.create(mapMaker);
+
+    String s1 = new String("a");
+    String s2 = new String("a");
+    assertEquals(s1, s2); // Stating the obvious.
+    assertTrue(s1 != s2); // Stating the obvious.
+
+    multiset.add(s1);
+    assertTrue(multiset.contains(s1));
+    assertFalse(multiset.contains(s2));
+    assertEquals(1, multiset.count(s1));
+    assertEquals(0, multiset.count(s2));
+
+    multiset.add(s1);
+    multiset.add(s2, 3);
+    assertEquals(2, multiset.count(s1));
+    assertEquals(3, multiset.count(s2));
+
+    multiset.remove(s1);
+    assertEquals(1, multiset.count(s1));
+    assertEquals(3, multiset.count(s2));
+  }
+
+  public void testLogicalKeyEquality_strongKeys() {
+    testLogicalKeyEquality(STRONG);
+  }
+
+  public void testLogicalKeyEquality_softKeys() {
+    testLogicalKeyEquality(SOFT);
+  }
+
+  public void testLogicalKeyEquality_weakKeys() {
+    testLogicalKeyEquality(WEAK);
+  }
+
+  private void testLogicalKeyEquality(
+      MapMakerInternalMap.Strength keyStrength) {
+
+    MapMaker mapMaker = new MapMaker()
+        .setKeyStrength(keyStrength)
+        .keyEquivalence(Equivalences.equals());
+
+    ConcurrentHashMultiset<String> multiset =
+        ConcurrentHashMultiset.create(mapMaker);
+
+    String s1 = new String("a");
+    String s2 = new String("a");
+    assertEquals(s1, s2); // Stating the obvious.
+
+    multiset.add(s1);
+    assertTrue(multiset.contains(s1));
+    assertTrue(multiset.contains(s2));
+    assertEquals(1, multiset.count(s1));
+    assertEquals(1, multiset.count(s2));
+
+    multiset.add(s2, 3);
+    assertEquals(4, multiset.count(s1));
+    assertEquals(4, multiset.count(s2));
+
+    multiset.remove(s1);
+    assertEquals(3, multiset.count(s1));
+    assertEquals(3, multiset.count(s2));
+  }
+
+  public void testSerializationWithMapMaker1() {
+    MapMaker mapMaker = new MapMaker();
+    multiset = ConcurrentHashMultiset.create(mapMaker);
+    reserializeAndAssert(multiset);
+  }
+
+  public void testSerializationWithMapMaker2() {
+    MapMaker mapMaker = new MapMaker();
+    multiset = ConcurrentHashMultiset.create(mapMaker);
+    multiset.addAll(ImmutableList.of("a", "a", "b", "c", "d", "b"));
+    reserializeAndAssert(multiset);
+  }
+
+  public void testSerializationWithMapMaker3() {
+    MapMaker mapMaker = new MapMaker().expireAfterWrite(1, TimeUnit.SECONDS);
+    multiset = ConcurrentHashMultiset.create(mapMaker);
+    multiset.addAll(ImmutableList.of("a", "a", "b", "c", "d", "b"));
+    reserializeAndAssert(multiset);
+  }
+
+  public void testSerializationWithMapMaker_preservesIdentityKeyEquivalence() {
+    MapMaker mapMaker = new MapMaker()
+        .keyEquivalence(Equivalences.identity());
+
+    ConcurrentHashMultiset<String> multiset =
+        ConcurrentHashMultiset.create(mapMaker);
+    multiset = reserializeAndAssert(multiset);
+
+    String s1 = new String("a");
+    String s2 = new String("a");
+    assertEquals(s1, s2); // Stating the obvious.
+    assertTrue(s1 != s2); // Stating the obvious.
+
+    multiset.add(s1);
+    assertTrue(multiset.contains(s1));
+    assertFalse(multiset.contains(s2));
+    assertEquals(1, multiset.count(s1));
+    assertEquals(0, multiset.count(s2));
+  }
+
+//  @Suppress(owner = "bmanes", detail = "Does not call the eviction listener")
+//  public void testWithMapMakerEvictionListener_BROKEN1()
+//      throws InterruptedException {
+//    MapEvictionListener<String, Number> evictionListener =
+//        mockEvictionListener();
+//    evictionListener.onEviction("a", 5);
+//    EasyMock.replay(evictionListener);
+//
+//    GenericMapMaker<String, Number> mapMaker = new MapMaker()
+//        .expireAfterWrite(100, TimeUnit.MILLISECONDS)
+//        .evictionListener(evictionListener);
+//
+//    ConcurrentHashMultiset<String> multiset =
+//        ConcurrentHashMultiset.create(mapMaker);
+//
+//    multiset.add("a", 5);
+//
+//    assertTrue(multiset.contains("a"));
+//    assertEquals(5, multiset.count("a"));
+//
+//    Thread.sleep(2000);
+//
+//    EasyMock.verify(evictionListener);
+//  }
+
+//  @Suppress(owner = "bmanes", detail = "Does not call the eviction listener")
+//  public void testWithMapMakerEvictionListener_BROKEN2()
+//      throws InterruptedException {
+//    MapEvictionListener<String, Number> evictionListener =
+//        mockEvictionListener();
+//    evictionListener.onEviction("a", 5);
+//    EasyMock.replay(evictionListener);
+//
+//    GenericMapMaker<String, Number> mapMaker = new MapMaker()
+//        .expireAfterWrite(100, TimeUnit.MILLISECONDS)
+//        .evictionListener(evictionListener);
+//
+//    ConcurrentHashMultiset<String> multiset =
+//        ConcurrentHashMultiset.create(mapMaker);
+//
+//    multiset.add("a", 5);
+//
+//    assertTrue(multiset.contains("a"));
+//    assertEquals(5, multiset.count("a"));
+//
+//    Thread.sleep(2000);
+//
+//    // This call should have the side-effect of calling the
+//    // eviction listener, but it does not.
+//    assertFalse(multiset.contains("a"));
+//
+//    EasyMock.verify(evictionListener);
+//  }
+
+  public void testWithMapMakerEvictionListener() {
+    final List<RemovalNotification<String, Number>> notificationQueue = Lists.newArrayList();
+    RemovalListener<String, Number> removalListener =
+        new RemovalListener<String, Number>() {
+          @Override public void onRemoval(RemovalNotification<String, Number> notification) {
+            notificationQueue.add(notification);
+          }
+        };
+
+    @SuppressWarnings("deprecation") // TODO(kevinb): what to do?
+    GenericMapMaker<String, Number> mapMaker = new MapMaker()
+        .concurrencyLevel(1)
+        .maximumSize(1)
+        .removalListener(removalListener);
+
+    ConcurrentHashMultiset<String> multiset = ConcurrentHashMultiset.create(mapMaker);
+
+    multiset.add("a", 5);
+    assertTrue(multiset.contains("a"));
+    assertEquals(5, multiset.count("a"));
+
+    multiset.add("b", 3);
+
+    assertFalse(multiset.contains("a"));
+    assertTrue(multiset.contains("b"));
+    assertEquals(3, multiset.count("b"));
+    RemovalNotification<String, Number> notification = Iterables.getOnlyElement(notificationQueue);
+    assertEquals("a", notification.getKey());
+    // The map evicted this entry, so CHM didn't have a chance to zero it.
+    assertEquals(5, notification.getValue().intValue());
+  }
+
+  private void replay() {
+    EasyMock.replay(backingMap);
+  }
+
+  private void verify() {
+    EasyMock.verify(backingMap);
+  }
+
+  private void reset() {
+    EasyMock.reset(backingMap);
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/ConcurrentHashMultisetWithChmTest.java b/guava-tests/test/com/google/common/collect/ConcurrentHashMultisetWithChmTest.java
new file mode 100644
index 0000000..c573ab1
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/ConcurrentHashMultisetWithChmTest.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+/**
+ * Unit test for {@link ConcurrentHashMultiset} behavior when backed by the
+ * standard {@link java.util.concurrent.ConcurrentHashMap}.
+ *
+ * @author Kevin Bourrillion
+ * @author Jared Levy
+ */
+public class ConcurrentHashMultisetWithChmTest
+    extends AbstractConcurrentHashMultisetTest {
+  @Override protected <E> Multiset<E> create() {
+    return ConcurrentHashMultiset.create();
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/ConcurrentHashMultisetWithCslmTest.java b/guava-tests/test/com/google/common/collect/ConcurrentHashMultisetWithCslmTest.java
new file mode 100644
index 0000000..b5a61e5
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/ConcurrentHashMultisetWithCslmTest.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import java.util.concurrent.ConcurrentSkipListMap;
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ * Unit test for {@link ConcurrentHashMultiset} behavior when backed by
+ * {@link ConcurrentSkipListMap}. User code cannot create such a multiset, since
+ * the constructor we use here is package-private, but
+ * {@link ConcurrentHashMultiset} should work regardless of the type of its
+ * backing map, and it's possible that this test could catch a bug that the
+ * standard test doesn't.
+ * 
+ * @author Chris Povirk
+ * @author Jared Levy
+ */
+public class ConcurrentHashMultisetWithCslmTest
+    extends AbstractConcurrentHashMultisetTest {
+  @Override protected <E> Multiset<E> create() {
+    return new ConcurrentHashMultiset<E>(
+        new ConcurrentSkipListMap<E, AtomicInteger>());
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/ConstrainedBiMapTest.java b/guava-tests/test/com/google/common/collect/ConstrainedBiMapTest.java
new file mode 100644
index 0000000..4f02c13
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/ConstrainedBiMapTest.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.collect.MapConstraintsTest.TestKeyException;
+import com.google.common.collect.MapConstraintsTest.TestValueException;
+
+/**
+ * Tests for {@link MapConstraints#constrainedBiMap}.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible(emulated = true)
+public class ConstrainedBiMapTest extends AbstractBiMapTest {
+
+  private static final Integer TEST_KEY = 42;
+  private static final String TEST_VALUE = "test";
+  private static final MapConstraint<Integer, String> TEST_CONSTRAINT
+      = new TestConstraint();
+
+  private static final class TestConstraint
+      implements MapConstraint<Integer, String> {
+    @Override
+    public void checkKeyValue(Integer key, String value) {
+      if (TEST_KEY.equals(key)) {
+        throw new TestKeyException();
+      }
+      if (TEST_VALUE.equals(value)) {
+        throw new TestValueException();
+      }
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  @Override protected BiMap<Integer, String> create() {
+    return MapConstraints.constrainedBiMap(
+        HashBiMap.<Integer, String>create(), TEST_CONSTRAINT);
+  }
+
+  // not serializable
+  @GwtIncompatible("SerializableTester")
+  @Override
+  public void testSerialization() {}
+  
+  @GwtIncompatible("SerializableTester")
+  @Override
+  public void testSerializationWithInverseEqual() {}
+  
+  @GwtIncompatible("SerializableTester")
+  @Override
+  public void testSerializationWithInverseSame() {}
+}
diff --git a/guava-tests/test/com/google/common/collect/ConstrainedMapImplementsMapTest.java b/guava-tests/test/com/google/common/collect/ConstrainedMapImplementsMapTest.java
new file mode 100644
index 0000000..de6ebb7
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/ConstrainedMapImplementsMapTest.java
@@ -0,0 +1,105 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.collect.testing.MapInterfaceTest;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/** @author George van den Driessche */
+@GwtCompatible
+public class ConstrainedMapImplementsMapTest
+    extends MapInterfaceTest<String, Integer> {
+
+  public ConstrainedMapImplementsMapTest() {
+    super(true, true, true, true, true);
+  }
+
+  @Override protected Map<String, Integer> makeEmptyMap() {
+    return MapConstraints.constrainedMap(new HashMap<String, Integer>(),
+        MapConstraintsTest.TEST_CONSTRAINT);
+  }
+
+  @Override protected Map<String, Integer> makePopulatedMap() {
+    final Map<String, Integer> sortedMap = MapConstraints.constrainedMap(
+        new HashMap<String, Integer>(), MapConstraintsTest.TEST_CONSTRAINT);
+    sortedMap.put("one", 1);
+    sortedMap.put("two", 2);
+    sortedMap.put("three", 3);
+    return sortedMap;
+  }
+
+  @Override protected String getKeyNotInPopulatedMap()
+      throws UnsupportedOperationException {
+    return "minus one";
+  }
+
+  @Override protected Integer getValueNotInPopulatedMap()
+      throws UnsupportedOperationException {
+    return -1;
+  }
+
+  @Override public void testEntrySetRemoveAllNullFromEmpty() {
+    try {
+      super.testEntrySetRemoveAllNullFromEmpty();
+    } catch (RuntimeException tolerated) {
+      // GWT's HashMap.entrySet().removeAll(null) doesn't throws NPE.
+    }
+  }
+
+  @Override public void testEntrySetRetainAllNullFromEmpty() {
+    try {
+      super.testEntrySetRetainAllNullFromEmpty();
+    } catch (RuntimeException tolerated) {
+      // GWT's HashMap.entrySet().retainAll(null) doesn't throws NPE.
+    }
+  }
+
+  @Override public void testKeySetRemoveAllNullFromEmpty() {
+    try {
+      super.testKeySetRemoveAllNullFromEmpty();
+    } catch (RuntimeException tolerated) {
+      // GWT's HashMap.keySet().removeAll(null) doesn't throws NPE.
+    }
+  }
+
+  @Override public void testKeySetRetainAllNullFromEmpty() {
+    try {
+      super.testKeySetRetainAllNullFromEmpty();
+    } catch (RuntimeException tolerated) {
+      // GWT's HashMap.keySet().retainAll(null) doesn't throws NPE.
+    }
+  }
+
+  @Override public void testValuesRemoveAllNullFromEmpty() {
+    try {
+      super.testValuesRemoveAllNullFromEmpty();
+    } catch (RuntimeException tolerated) {
+      // GWT's HashMap.values().removeAll(null) doesn't throws NPE.
+    }
+  }
+
+  @Override public void testValuesRetainAllNullFromEmpty() {
+    try {
+      super.testValuesRemoveAllNullFromEmpty();
+    } catch (RuntimeException tolerated) {
+      // GWT's HashMap.values().retainAll(null) doesn't throws NPE.
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/ConstrainedMultimapAsMapImplementsMapTest.java b/guava-tests/test/com/google/common/collect/ConstrainedMultimapAsMapImplementsMapTest.java
new file mode 100644
index 0000000..c068d1c
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/ConstrainedMultimapAsMapImplementsMapTest.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.collect.testing.MapInterfaceTest;
+
+import java.util.Collection;
+import java.util.Map;
+
+/**
+ * Test {@link Multimap#asMap()} for a constrained multimap with
+ * {@link MapInterfaceTest}.
+ *
+ * @author George van den Driessche
+ */
+@GwtCompatible
+public class ConstrainedMultimapAsMapImplementsMapTest
+    extends AbstractMultimapAsMapImplementsMapTest {
+
+  public ConstrainedMultimapAsMapImplementsMapTest() {
+    super(true, true, true);
+  }
+
+  @Override protected Map<String, Collection<Integer>> makeEmptyMap() {
+    return MapConstraints.constrainedMultimap(
+        ArrayListMultimap.<String, Integer>create(),
+        MapConstraintsTest.TEST_CONSTRAINT)
+        .asMap();
+  }
+
+  @Override protected Map<String, Collection<Integer>> makePopulatedMap() {
+    Multimap<String, Integer> delegate = ArrayListMultimap.create();
+    populate(delegate);
+    return MapConstraints.constrainedMultimap(
+            delegate, MapConstraintsTest.TEST_CONSTRAINT)
+        .asMap();
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/ConstrainedSetMultimapTest.java b/guava-tests/test/com/google/common/collect/ConstrainedSetMultimapTest.java
new file mode 100644
index 0000000..2931cf7
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/ConstrainedSetMultimapTest.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+
+/**
+ * Tests for {@link MapConstraints#constrainedSetMultimap}.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible(emulated = true)
+public class ConstrainedSetMultimapTest extends AbstractSetMultimapTest {
+
+  @Override protected SetMultimap<String, Integer> create() {
+    return MapConstraints.<String, Integer>constrainedSetMultimap(
+        HashMultimap.<String, Integer>create(),
+        MapConstraintsTest.TEST_CONSTRAINT);
+  }
+
+  // an override of a GwtIncompatible method
+  @GwtIncompatible("SerializableTester")
+  // not serializable
+  @Override public void testSerializable() {}
+}
diff --git a/guava-tests/test/com/google/common/collect/ConstraintsTest.java b/guava-tests/test/com/google/common/collect/ConstraintsTest.java
new file mode 100644
index 0000000..64dbc8a
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/ConstraintsTest.java
@@ -0,0 +1,350 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static java.util.Arrays.asList;
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.testing.SerializableTester;
+
+import junit.framework.TestCase;
+
+import java.util.AbstractCollection;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.RandomAccess;
+import java.util.Set;
+import java.util.SortedSet;
+
+/**
+ * Tests for {@code Constraints}.
+ *
+ * @author Mike Bostock
+ * @author Jared Levy
+ */
+@GwtCompatible(emulated = true)
+public class ConstraintsTest extends TestCase {
+
+  private static final String TEST_ELEMENT = "test";
+
+  private static final class TestElementException
+      extends IllegalArgumentException {
+    private static final long serialVersionUID = 0;
+  }
+
+  private static final Constraint<String> TEST_CONSTRAINT
+      = new Constraint<String>() {
+          @Override
+          public String checkElement(String element) {
+            if (TEST_ELEMENT.equals(element)) {
+              throw new TestElementException();
+            }
+            return element;
+          }
+        };
+
+  public void testNotNull() {
+    Constraint<? super String> constraint = Constraints.notNull();
+    assertSame(TEST_ELEMENT, constraint.checkElement(TEST_ELEMENT));
+    try {
+      constraint.checkElement(null);
+      fail("NullPointerException expected");
+    } catch (NullPointerException expected) {}
+    assertEquals("Not null", constraint.toString());
+  }
+
+  public void testConstrainedCollectionLegal() {
+    Collection<String> collection = Lists.newArrayList("foo", "bar");
+    Collection<String> constrained = Constraints.constrainedCollection(
+        collection, TEST_CONSTRAINT);
+    collection.add(TEST_ELEMENT);
+    constrained.add("qux");
+    constrained.addAll(asList("cat", "dog"));
+    /* equals and hashCode aren't defined for Collection */
+    ASSERT.that(collection).hasContentsInOrder("foo", "bar", TEST_ELEMENT, "qux", "cat", "dog");
+    ASSERT.that(constrained).hasContentsInOrder("foo", "bar", TEST_ELEMENT, "qux", "cat", "dog");
+  }
+
+  public void testConstrainedCollectionIllegal() {
+    Collection<String> collection = Lists.newArrayList("foo", "bar");
+    Collection<String> constrained = Constraints.constrainedCollection(
+        collection, TEST_CONSTRAINT);
+    try {
+      constrained.add(TEST_ELEMENT);
+      fail("TestElementException expected");
+    } catch (TestElementException expected) {}
+    try {
+      constrained.addAll(asList("baz", TEST_ELEMENT));
+      fail("TestElementException expected");
+    } catch (TestElementException expected) {}
+    ASSERT.that(constrained).hasContentsInOrder("foo", "bar");
+    ASSERT.that(collection).hasContentsInOrder("foo", "bar");
+  }
+
+  public void testConstrainedSetLegal() {
+    Set<String> set = Sets.newLinkedHashSet(asList("foo", "bar"));
+    Set<String> constrained = Constraints.constrainedSet(set, TEST_CONSTRAINT);
+    set.add(TEST_ELEMENT);
+    constrained.add("qux");
+    constrained.addAll(asList("cat", "dog"));
+    assertTrue(set.equals(constrained));
+    assertTrue(constrained.equals(set));
+    assertEquals(set.toString(), constrained.toString());
+    assertEquals(set.hashCode(), constrained.hashCode());
+    ASSERT.that(set).hasContentsInOrder("foo", "bar", TEST_ELEMENT, "qux", "cat", "dog");
+    ASSERT.that(constrained).hasContentsInOrder("foo", "bar", TEST_ELEMENT, "qux", "cat", "dog");
+  }
+
+  public void testConstrainedSetIllegal() {
+    Set<String> set = Sets.newLinkedHashSet(asList("foo", "bar"));
+    Set<String> constrained = Constraints.constrainedSet(set, TEST_CONSTRAINT);
+    try {
+      constrained.add(TEST_ELEMENT);
+      fail("TestElementException expected");
+    } catch (TestElementException expected) {}
+    try {
+      constrained.addAll(asList("baz", TEST_ELEMENT));
+      fail("TestElementException expected");
+    } catch (TestElementException expected) {}
+    ASSERT.that(constrained).hasContentsInOrder("foo", "bar");
+    ASSERT.that(set).hasContentsInOrder("foo", "bar");
+  }
+
+  public void testConstrainedSortedSetLegal() {
+    SortedSet<String> sortedSet = Sets.newTreeSet(asList("foo", "bar"));
+    SortedSet<String> constrained = Constraints.constrainedSortedSet(
+        sortedSet, TEST_CONSTRAINT);
+    sortedSet.add(TEST_ELEMENT);
+    constrained.add("qux");
+    constrained.addAll(asList("cat", "dog"));
+    assertTrue(sortedSet.equals(constrained));
+    assertTrue(constrained.equals(sortedSet));
+    assertEquals(sortedSet.toString(), constrained.toString());
+    assertEquals(sortedSet.hashCode(), constrained.hashCode());
+    ASSERT.that(sortedSet).hasContentsInOrder("bar", "cat", "dog", "foo", "qux", TEST_ELEMENT);
+    ASSERT.that(constrained).hasContentsInOrder("bar", "cat", "dog", "foo", "qux", TEST_ELEMENT);
+    assertNull(constrained.comparator());
+    assertEquals("bar", constrained.first());
+    assertEquals(TEST_ELEMENT, constrained.last());
+  }
+
+  public void testConstrainedSortedSetIllegal() {
+    SortedSet<String> sortedSet = Sets.newTreeSet(asList("foo", "bar"));
+    SortedSet<String> constrained = Constraints.constrainedSortedSet(
+        sortedSet, TEST_CONSTRAINT);
+    try {
+      constrained.add(TEST_ELEMENT);
+      fail("TestElementException expected");
+    } catch (TestElementException expected) {}
+    try {
+      constrained.subSet("bar", "foo").add(TEST_ELEMENT);
+      fail("TestElementException expected");
+    } catch (TestElementException expected) {}
+    try {
+      constrained.headSet("bar").add(TEST_ELEMENT);
+      fail("TestElementException expected");
+    } catch (TestElementException expected) {}
+    try {
+      constrained.tailSet("foo").add(TEST_ELEMENT);
+      fail("TestElementException expected");
+    } catch (TestElementException expected) {}
+    try {
+      constrained.addAll(asList("baz", TEST_ELEMENT));
+      fail("TestElementException expected");
+    } catch (TestElementException expected) {}
+    ASSERT.that(constrained).hasContentsInOrder("bar", "foo");
+    ASSERT.that(sortedSet).hasContentsInOrder("bar", "foo");
+  }
+
+  public void testConstrainedListLegal() {
+    List<String> list = Lists.newArrayList("foo", "bar");
+    List<String> constrained = Constraints.constrainedList(
+        list, TEST_CONSTRAINT);
+    list.add(TEST_ELEMENT);
+    constrained.add("qux");
+    constrained.addAll(asList("cat", "dog"));
+    constrained.add(1, "cow");
+    constrained.addAll(4, asList("box", "fan"));
+    constrained.set(2, "baz");
+    assertTrue(list.equals(constrained));
+    assertTrue(constrained.equals(list));
+    assertEquals(list.toString(), constrained.toString());
+    assertEquals(list.hashCode(), constrained.hashCode());
+    ASSERT.that(list).hasContentsInOrder(
+        "foo", "cow", "baz", TEST_ELEMENT, "box", "fan", "qux", "cat", "dog");
+    ASSERT.that(constrained).hasContentsInOrder(
+        "foo", "cow", "baz", TEST_ELEMENT, "box", "fan", "qux", "cat", "dog");
+    ListIterator<String> iterator = constrained.listIterator();
+    iterator.next();
+    iterator.set("sun");
+    constrained.listIterator(2).add("sky");
+    ASSERT.that(list).hasContentsInOrder(
+        "sun", "cow", "sky", "baz", TEST_ELEMENT, "box", "fan", "qux", "cat", "dog");
+    ASSERT.that(constrained).hasContentsInOrder(
+        "sun", "cow", "sky", "baz", TEST_ELEMENT, "box", "fan", "qux", "cat", "dog");
+    assertTrue(constrained instanceof RandomAccess);
+  }
+
+  public void testConstrainedListRandomAccessFalse() {
+    List<String> list = Lists.newLinkedList(asList("foo", "bar"));
+    List<String> constrained = Constraints.constrainedList(
+        list, TEST_CONSTRAINT);
+    list.add(TEST_ELEMENT);
+    constrained.add("qux");
+    assertFalse(constrained instanceof RandomAccess);
+  }
+
+  public void testConstrainedListIllegal() {
+    List<String> list = Lists.newArrayList("foo", "bar");
+    List<String> constrained = Constraints.constrainedList(
+        list, TEST_CONSTRAINT);
+    try {
+      constrained.add(TEST_ELEMENT);
+      fail("TestElementException expected");
+    } catch (TestElementException expected) {}
+    try {
+      constrained.listIterator().add(TEST_ELEMENT);
+      fail("TestElementException expected");
+    } catch (TestElementException expected) {}
+    try {
+      constrained.listIterator(1).add(TEST_ELEMENT);
+      fail("TestElementException expected");
+    } catch (TestElementException expected) {}
+    try {
+      constrained.listIterator().set(TEST_ELEMENT);
+      fail("TestElementException expected");
+    } catch (TestElementException expected) {}
+    try {
+      constrained.listIterator(1).set(TEST_ELEMENT);
+      fail("TestElementException expected");
+    } catch (TestElementException expected) {}
+    try {
+      constrained.subList(0, 1).add(TEST_ELEMENT);
+      fail("TestElementException expected");
+    } catch (TestElementException expected) {}
+    try {
+      constrained.add(1, TEST_ELEMENT);
+      fail("TestElementException expected");
+    } catch (TestElementException expected) {}
+    try {
+      constrained.set(1, TEST_ELEMENT);
+      fail("TestElementException expected");
+    } catch (TestElementException expected) {}
+    try {
+      constrained.addAll(asList("baz", TEST_ELEMENT));
+      fail("TestElementException expected");
+    } catch (TestElementException expected) {}
+    try {
+      constrained.addAll(1, asList("baz", TEST_ELEMENT));
+      fail("TestElementException expected");
+    } catch (TestElementException expected) {}
+    ASSERT.that(constrained).hasContentsInOrder("foo", "bar");
+    ASSERT.that(list).hasContentsInOrder("foo", "bar");
+  }
+
+  public void testConstrainedMultisetLegal() {
+    Multiset<String> multiset = HashMultiset.create(asList("foo", "bar"));
+    Multiset<String> constrained = Constraints.constrainedMultiset(
+        multiset, TEST_CONSTRAINT);
+    multiset.add(TEST_ELEMENT);
+    constrained.add("qux");
+    constrained.addAll(asList("cat", "dog"));
+    constrained.add("cow", 2);
+    assertTrue(multiset.equals(constrained));
+    assertTrue(constrained.equals(multiset));
+    assertEquals(multiset.toString(), constrained.toString());
+    assertEquals(multiset.hashCode(), constrained.hashCode());
+    ASSERT.that(multiset).hasContentsAnyOrder(
+        "foo", "bar", TEST_ELEMENT, "qux", "cat", "dog", "cow", "cow");
+    ASSERT.that(constrained).hasContentsAnyOrder(
+        "foo", "bar", TEST_ELEMENT, "qux", "cat", "dog", "cow", "cow");
+    assertEquals(1, constrained.count("foo"));
+    assertEquals(1, constrained.remove("foo", 3));
+    assertEquals(2, constrained.setCount("cow", 0));
+    ASSERT.that(multiset).hasContentsAnyOrder("bar", TEST_ELEMENT, "qux", "cat", "dog");
+    ASSERT.that(constrained).hasContentsAnyOrder("bar", TEST_ELEMENT, "qux", "cat", "dog");
+  }
+
+  public void testConstrainedMultisetIllegal() {
+    Multiset<String> multiset = HashMultiset.create(asList("foo", "bar"));
+    Multiset<String> constrained = Constraints.constrainedMultiset(
+        multiset, TEST_CONSTRAINT);
+    try {
+      constrained.add(TEST_ELEMENT);
+      fail("TestElementException expected");
+    } catch (TestElementException expected) {}
+    try {
+      constrained.add(TEST_ELEMENT, 2);
+      fail("TestElementException expected");
+    } catch (TestElementException expected) {}
+    try {
+      constrained.addAll(asList("baz", TEST_ELEMENT));
+      fail("TestElementException expected");
+    } catch (TestElementException expected) {}
+    ASSERT.that(constrained).hasContentsAnyOrder("foo", "bar");
+    ASSERT.that(multiset).hasContentsAnyOrder("foo", "bar");
+  }
+
+  public void testNefariousAddAll() {
+    List<String> list = Lists.newArrayList("foo", "bar");
+    List<String> constrained = Constraints.constrainedList(
+        list, TEST_CONSTRAINT);
+    Collection<String> onceIterable = onceIterableCollection("baz");
+    constrained.addAll(onceIterable);
+    ASSERT.that(constrained).hasContentsInOrder("foo", "bar", "baz");
+    ASSERT.that(list).hasContentsInOrder("foo", "bar", "baz");
+  }
+
+  /**
+   * Returns a "nefarious" collection, which permits only one call to
+   * iterator(). This verifies that the constrained collection uses a defensive
+   * copy instead of potentially checking the elements in one snapshot and
+   * adding the elements from another.
+   *
+   * @param element the element to be contained in the collection
+   */
+  static <E> Collection<E> onceIterableCollection(final E element) {
+    return new AbstractCollection<E>() {
+      boolean iteratorCalled;
+      @Override public int size() {
+        /*
+         * We could make the collection empty, but that seems more likely to
+         * trigger special cases (so maybe we should test both empty and
+         * nonempty...).
+         */
+        return 1;
+      }
+      @Override public Iterator<E> iterator() {
+        assertFalse("Expected only one call to iterator()", iteratorCalled);
+        iteratorCalled = true;
+        return Collections.singleton(element).iterator();
+      }
+    };
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testSerialization() {
+    // TODO: Test serialization of constrained collections.
+    assertSame(Constraints.notNull(),
+        SerializableTester.reserialize(Constraints.notNull()));
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/ContiguousSetNonGwtTest.java b/guava-tests/test/com/google/common/collect/ContiguousSetNonGwtTest.java
new file mode 100644
index 0000000..d36e471
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/ContiguousSetNonGwtTest.java
@@ -0,0 +1,110 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.collect.DiscreteDomains.integers;
+
+import com.google.common.collect.testing.SampleElements;
+import com.google.common.collect.testing.SetTestSuiteBuilder;
+import com.google.common.collect.testing.TestSetGenerator;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.testers.SetHashCodeTester;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+import java.util.SortedSet;
+import java.util.TreeSet;
+
+/**
+ * @author Gregory Kick
+ */
+public class ContiguousSetNonGwtTest extends TestCase {
+  public static class BuiltTests extends TestCase {
+    public static Test suite() {
+      TestSuite suite = new TestSuite();
+
+      suite.addTest(
+          SetTestSuiteBuilder
+              .using(
+                  new TestIntegerSetGenerator() {
+                    @Override
+                    protected Set<Integer> create(Integer[] elements) {
+                      // reject duplicates at creation, just so that I can use
+                      // that SetFeature below, which stops a test from running
+                      // that doesn't work. hack!
+                      SortedSet<Integer> set = new TreeSet<Integer>();
+                      Collections.addAll(set, elements);
+                      checkArgument(set.size() == elements.length);
+                      return Ranges.closed(set.first(), set.last()).asSet(integers());
+                    }
+                  })
+              .withFeatures(
+                  CollectionSize.ONE,
+                  CollectionSize.SEVERAL,
+                  CollectionFeature.KNOWN_ORDER,
+                  CollectionFeature.ALLOWS_NULL_QUERIES,
+                  CollectionFeature.NON_STANDARD_TOSTRING,
+                  CollectionFeature.RESTRICTS_ELEMENTS,
+                  CollectionFeature.REJECTS_DUPLICATES_AT_CREATION)
+              .suppressing(SetHashCodeTester.getHashCodeMethods())
+              .named("DiscreteRange.asSet, closed")
+              .createTestSuite());
+
+      return suite;
+    }
+  }
+
+  abstract static class TestIntegerSetGenerator implements TestSetGenerator<Integer> {
+    @Override public SampleElements<Integer> samples() {
+      return new SampleElements<Integer>(1, 2, 3, 4, 5);
+    }
+
+    @Override public Set<Integer> create(Object... elements) {
+      Integer[] array = new Integer[elements.length];
+      int i = 0;
+      for (Object e : elements) {
+        array[i++] = (Integer) e;
+      }
+      return create(array);
+    }
+
+    protected abstract Set<Integer> create(Integer[] elements);
+
+    @Override public Integer[] createArray(int length) {
+      return new Integer[length];
+    }
+
+    @Override public List<Integer> order(List<Integer> insertionOrder) {
+      return Ordering.natural().sortedCopy(insertionOrder);
+    }
+  }
+
+  public void testNothing() {
+    /*
+     * It's a warning if a TestCase subclass contains no tests, so we add one.
+     * Alternatively, we could stop extending TestCase, but I worry that someone
+     * will add a test in the future and not realize that it's being ignored.
+     */
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/ContiguousSetTest.java b/guava-tests/test/com/google/common/collect/ContiguousSetTest.java
new file mode 100644
index 0000000..6909f7a
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/ContiguousSetTest.java
@@ -0,0 +1,278 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.collect.BoundType.CLOSED;
+import static com.google.common.collect.BoundType.OPEN;
+import static com.google.common.collect.DiscreteDomains.integers;
+import static com.google.common.testing.SerializableTester.reserialize;
+import static com.google.common.testing.SerializableTester.reserializeAndAssert;
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.testing.EqualsTester;
+
+import junit.framework.TestCase;
+
+import java.util.Set;
+
+/**
+ * @author Gregory Kick
+ */
+@GwtCompatible(emulated = true)
+public class ContiguousSetTest extends TestCase {
+  private static DiscreteDomain<Integer> NOT_EQUAL_TO_INTEGERS = new DiscreteDomain<Integer>() {
+    @Override public Integer next(Integer value) {
+      return integers().next(value);
+    }
+
+    @Override public Integer previous(Integer value) {
+      return integers().previous(value);
+    }
+
+    @Override public long distance(Integer start, Integer end) {
+      return integers().distance(start, end);
+    }
+
+    @Override public Integer minValue() {
+      return integers().minValue();
+    }
+
+    @Override public Integer maxValue() {
+      return integers().maxValue();
+    }
+  };
+
+  public void testEquals() {
+    new EqualsTester()
+        .addEqualityGroup(
+            Ranges.closed(1, 3).asSet(integers()),
+            Ranges.closedOpen(1, 4).asSet(integers()),
+            Ranges.openClosed(0, 3).asSet(integers()),
+            Ranges.open(0, 4).asSet(integers()),
+            Ranges.closed(1, 3).asSet(NOT_EQUAL_TO_INTEGERS),
+            Ranges.closedOpen(1, 4).asSet(NOT_EQUAL_TO_INTEGERS),
+            Ranges.openClosed(0, 3).asSet(NOT_EQUAL_TO_INTEGERS),
+            Ranges.open(0, 4).asSet(NOT_EQUAL_TO_INTEGERS),
+            ImmutableSortedSet.of(1, 2, 3))
+        .testEquals();
+    // not testing hashCode for these because it takes forever to compute
+    assertEquals(Ranges.closed(Integer.MIN_VALUE, Integer.MAX_VALUE).asSet(integers()),
+        Ranges.<Integer>all().asSet(integers()));
+    assertEquals(Ranges.closed(Integer.MIN_VALUE, Integer.MAX_VALUE).asSet(integers()),
+        Ranges.atLeast(Integer.MIN_VALUE).asSet(integers()));
+    assertEquals(Ranges.closed(Integer.MIN_VALUE, Integer.MAX_VALUE).asSet(integers()),
+        Ranges.atMost(Integer.MAX_VALUE).asSet(integers()));
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testSerialization() {
+    ContiguousSet<Integer> empty = Ranges.closedOpen(1, 1).asSet(integers());
+    assertTrue(empty instanceof EmptyContiguousSet);
+    reserializeAndAssert(empty);
+
+    ContiguousSet<Integer> regular = Ranges.closed(1, 3).asSet(integers());
+    assertTrue(regular instanceof RegularContiguousSet);
+    reserializeAndAssert(regular);
+
+    /*
+     * Make sure that we're using RegularContiguousSet.SerializedForm and not
+     * ImmutableSet.SerializedForm, which would be enormous.
+     */
+    ContiguousSet<Integer> enormous = Ranges.<Integer>all().asSet(integers());
+    assertTrue(enormous instanceof RegularContiguousSet);
+    // We can't use reserializeAndAssert because it calls hashCode, which is enormously slow.
+    ContiguousSet<Integer> enormousReserialized = reserialize(enormous);
+    assertEquals(enormous, enormousReserialized);
+  }
+
+  public void testHeadSet() {
+    ImmutableSortedSet<Integer> set = Ranges.closed(1, 3).asSet(integers());
+    ASSERT.that(set.headSet(1)).isEmpty();
+    ASSERT.that(set.headSet(2)).hasContentsInOrder(1);
+    ASSERT.that(set.headSet(3)).hasContentsInOrder(1, 2);
+    ASSERT.that(set.headSet(4)).hasContentsInOrder(1, 2, 3);
+    ASSERT.that(set.headSet(Integer.MAX_VALUE)).hasContentsInOrder(1, 2, 3);
+    ASSERT.that(set.headSet(1, true)).hasContentsInOrder(1);
+    ASSERT.that(set.headSet(2, true)).hasContentsInOrder(1, 2);
+    ASSERT.that(set.headSet(3, true)).hasContentsInOrder(1, 2, 3);
+    ASSERT.that(set.headSet(4, true)).hasContentsInOrder(1, 2, 3);
+    ASSERT.that(set.headSet(Integer.MAX_VALUE, true)).hasContentsInOrder(1, 2, 3);
+  }
+
+  public void testHeadSet_tooSmall() {
+    ImmutableSortedSet<Integer> set = Ranges.closed(1, 3).asSet(integers());
+    try {
+      set.headSet(0);
+      fail();
+    } catch (IllegalArgumentException e) {}
+  }
+
+  public void testTailSet() {
+    ImmutableSortedSet<Integer> set = Ranges.closed(1, 3).asSet(integers());
+    ASSERT.that(set.tailSet(Integer.MIN_VALUE)).hasContentsInOrder(1, 2, 3);
+    ASSERT.that(set.tailSet(1)).hasContentsInOrder(1, 2, 3);
+    ASSERT.that(set.tailSet(2)).hasContentsInOrder(2, 3);
+    ASSERT.that(set.tailSet(3)).hasContentsInOrder(3);
+    ASSERT.that(set.tailSet(Integer.MIN_VALUE, false)).hasContentsInOrder(1, 2, 3);
+    ASSERT.that(set.tailSet(1, false)).hasContentsInOrder(2, 3);
+    ASSERT.that(set.tailSet(2, false)).hasContentsInOrder(3);
+    ASSERT.that(set.tailSet(3, false)).isEmpty();
+  }
+
+  public void testTailSet_tooLarge() {
+    ImmutableSortedSet<Integer> set = Ranges.closed(1, 3).asSet(integers());
+    try {
+      set.tailSet(4);
+      fail();
+    } catch (IllegalArgumentException e) {}
+  }
+
+  public void testSubSet() {
+    ImmutableSortedSet<Integer> set = Ranges.closed(1, 3).asSet(integers());
+    ASSERT.that(set.subSet(1, 4)).hasContentsInOrder(1, 2, 3);
+    ASSERT.that(set.subSet(2, 4)).hasContentsInOrder(2, 3);
+    ASSERT.that(set.subSet(3, 4)).hasContentsInOrder(3);
+    ASSERT.that(set.subSet(3, 3)).isEmpty();
+    ASSERT.that(set.subSet(2, 3)).hasContentsInOrder(2);
+    ASSERT.that(set.subSet(1, 3)).hasContentsInOrder(1, 2);
+    ASSERT.that(set.subSet(1, 2)).hasContentsInOrder(1);
+    ASSERT.that(set.subSet(2, 2)).isEmpty();
+    ASSERT.that(set.subSet(Integer.MIN_VALUE, Integer.MAX_VALUE)).hasContentsInOrder(1, 2, 3);
+    ASSERT.that(set.subSet(1, true, 3, true)).hasContentsInOrder(1, 2, 3);
+    ASSERT.that(set.subSet(1, false, 3, true)).hasContentsInOrder(2, 3);
+    ASSERT.that(set.subSet(1, true, 3, false)).hasContentsInOrder(1, 2);
+    ASSERT.that(set.subSet(1, false, 3, false)).hasContentsInOrder(2);
+  }
+
+  public void testSubSet_outOfOrder() {
+    ImmutableSortedSet<Integer> set = Ranges.closed(1, 3).asSet(integers());
+    try {
+      set.subSet(3, 2);
+      fail();
+    } catch (IllegalArgumentException expected) {}
+  }
+
+  public void testSubSet_tooLarge() {
+    ImmutableSortedSet<Integer> set = Ranges.closed(1, 3).asSet(integers());
+    try {
+      set.subSet(4, 6);
+      fail();
+    } catch (IllegalArgumentException expected) {}
+  }
+
+  public void testSubSet_tooSmall() {
+    ImmutableSortedSet<Integer> set = Ranges.closed(1, 3).asSet(integers());
+    try {
+      set.subSet(-1, 0);
+      fail();
+    } catch (IllegalArgumentException expected) {}
+  }
+
+  public void testFirst() {
+    assertEquals(1, Ranges.closed(1, 3).asSet(integers()).first().intValue());
+    assertEquals(1, Ranges.open(0, 4).asSet(integers()).first().intValue());
+    assertEquals(Integer.MIN_VALUE, Ranges.<Integer>all().asSet(integers()).first().intValue());
+  }
+
+  public void testLast() {
+    assertEquals(3, Ranges.closed(1, 3).asSet(integers()).last().intValue());
+    assertEquals(3, Ranges.open(0, 4).asSet(integers()).last().intValue());
+    assertEquals(Integer.MAX_VALUE, Ranges.<Integer>all().asSet(integers()).last().intValue());
+  }
+
+  public void testContains() {
+    ImmutableSortedSet<Integer> set = Ranges.closed(1, 3).asSet(integers());
+    assertFalse(set.contains(0));
+    assertTrue(set.contains(1));
+    assertTrue(set.contains(2));
+    assertTrue(set.contains(3));
+    assertFalse(set.contains(4));
+    set = Ranges.open(0, 4).asSet(integers());
+    assertFalse(set.contains(0));
+    assertTrue(set.contains(1));
+    assertTrue(set.contains(2));
+    assertTrue(set.contains(3));
+    assertFalse(set.contains(4));
+    assertFalse(set.contains("blah"));
+  }
+
+  public void testContainsAll() {
+    ImmutableSortedSet<Integer> set = Ranges.closed(1, 3).asSet(integers());
+    for (Set<Integer> subset : Sets.powerSet(ImmutableSet.of(1, 2, 3))) {
+      assertTrue(set.containsAll(subset));
+    }
+    for (Set<Integer> subset : Sets.powerSet(ImmutableSet.of(1, 2, 3))) {
+      assertFalse(set.containsAll(Sets.union(subset, ImmutableSet.of(9))));
+    }
+    assertFalse(set.containsAll(ImmutableSet.of("blah")));
+  }
+
+  public void testRange() {
+    assertEquals(Ranges.closed(1, 3), Ranges.closed(1, 3).asSet(integers()).range());
+    assertEquals(Ranges.closed(1, 3), Ranges.closedOpen(1, 4).asSet(integers()).range());
+    assertEquals(Ranges.closed(1, 3), Ranges.open(0, 4).asSet(integers()).range());
+    assertEquals(Ranges.closed(1, 3), Ranges.openClosed(0, 3).asSet(integers()).range());
+
+    assertEquals(Ranges.openClosed(0, 3),
+        Ranges.closed(1, 3).asSet(integers()).range(OPEN, CLOSED));
+    assertEquals(Ranges.openClosed(0, 3),
+        Ranges.closedOpen(1, 4).asSet(integers()).range(OPEN, CLOSED));
+    assertEquals(Ranges.openClosed(0, 3), Ranges.open(0, 4).asSet(integers()).range(OPEN, CLOSED));
+    assertEquals(Ranges.openClosed(0, 3),
+        Ranges.openClosed(0, 3).asSet(integers()).range(OPEN, CLOSED));
+
+    assertEquals(Ranges.open(0, 4), Ranges.closed(1, 3).asSet(integers()).range(OPEN, OPEN));
+    assertEquals(Ranges.open(0, 4), Ranges.closedOpen(1, 4).asSet(integers()).range(OPEN, OPEN));
+    assertEquals(Ranges.open(0, 4), Ranges.open(0, 4).asSet(integers()).range(OPEN, OPEN));
+    assertEquals(Ranges.open(0, 4), Ranges.openClosed(0, 3).asSet(integers()).range(OPEN, OPEN));
+
+    assertEquals(Ranges.closedOpen(1, 4),
+        Ranges.closed(1, 3).asSet(integers()).range(CLOSED, OPEN));
+    assertEquals(Ranges.closedOpen(1, 4),
+        Ranges.closedOpen(1, 4).asSet(integers()).range(CLOSED, OPEN));
+    assertEquals(Ranges.closedOpen(1, 4), Ranges.open(0, 4).asSet(integers()).range(CLOSED, OPEN));
+    assertEquals(Ranges.closedOpen(1, 4),
+        Ranges.openClosed(0, 3).asSet(integers()).range(CLOSED, OPEN));
+  }
+
+  public void testRange_unboundedRanges() {
+    assertEquals(Ranges.closed(Integer.MIN_VALUE, Integer.MAX_VALUE),
+        Ranges.<Integer>all().asSet(integers()).range());
+    assertEquals(Ranges.atLeast(Integer.MIN_VALUE),
+        Ranges.<Integer>all().asSet(integers()).range(CLOSED, OPEN));
+    assertEquals(Ranges.all(), Ranges.<Integer>all().asSet(integers()).range(OPEN, OPEN));
+    assertEquals(Ranges.atMost(Integer.MAX_VALUE),
+        Ranges.<Integer>all().asSet(integers()).range(OPEN, CLOSED));
+  }
+
+  public void testIntersection_empty() {
+    ContiguousSet<Integer> set = Ranges.closed(1, 3).asSet(integers());
+    ContiguousSet<Integer> emptySet = Ranges.closedOpen(2,2).asSet(integers());
+    assertEquals(ImmutableSet.of(), set.intersection(emptySet));
+    assertEquals(ImmutableSet.of(), emptySet.intersection(set));
+    assertEquals(ImmutableSet.of(), Ranges.closed(-5, -1).asSet(integers()).intersection(
+        Ranges.open(3, 64).asSet(integers())));
+  }
+
+  public void testIntersection() {
+    ContiguousSet<Integer> set = Ranges.closed(1, 3).asSet(integers());
+    assertEquals(ImmutableSet.of(1, 2, 3), Ranges.open(-1, 4).asSet(integers()).intersection(set));
+    assertEquals(ImmutableSet.of(1, 2, 3), set.intersection(Ranges.open(-1, 4).asSet(integers())));
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/CountTest.java b/guava-tests/test/com/google/common/collect/CountTest.java
new file mode 100644
index 0000000..be40ff8
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/CountTest.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import junit.framework.TestCase;
+
+/**
+ * Tests for {@code Count}.
+ *
+ * @author Louis Wasserman
+ */
+@GwtCompatible
+public class CountTest extends TestCase {
+  public void testGet() {
+    assertEquals(20, new Count(20).get());
+  }
+
+  public void testGetAndAdd() {
+    Count holder = new Count(20);
+    assertEquals(20, holder.getAndAdd(1));
+    assertEquals(21, holder.get());
+  }
+
+  public void testAddAndGet() {
+    Count holder = new Count(20);
+    assertEquals(21, holder.addAndGet(1));
+  }
+
+  public void testGetAndSet() {
+    Count holder = new Count(10);
+    assertEquals(10, holder.getAndSet(20));
+    assertEquals(20, holder.get());
+  }
+  
+  public void testSet(){
+    Count holder = new Count(10);
+    holder.set(20);
+    assertEquals(20, holder.get());
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/DiscreteDomainsTest.java b/guava-tests/test/com/google/common/collect/DiscreteDomainsTest.java
new file mode 100644
index 0000000..2aec2db
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/DiscreteDomainsTest.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.testing.SerializableTester.reserializeAndAssert;
+
+import com.google.common.annotations.GwtIncompatible;
+
+import junit.framework.TestCase;
+
+/**
+ * Tests for {@link DiscreteDomains}.
+ *
+ * @author Chris Povirk
+ */
+@GwtIncompatible("SerializableTester")
+public class DiscreteDomainsTest extends TestCase {
+  public void testSerialization() {
+    reserializeAndAssert(DiscreteDomains.integers());
+    reserializeAndAssert(DiscreteDomains.longs());
+    reserializeAndAssert(DiscreteDomains.bigIntegers());
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/EmptyImmutableTableTest.java b/guava-tests/test/com/google/common/collect/EmptyImmutableTableTest.java
new file mode 100644
index 0000000..38f4f32
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/EmptyImmutableTableTest.java
@@ -0,0 +1,117 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.testing.EqualsTester;
+
+/**
+ * Tests {@link EmptyImmutableTable}
+ *
+ * @author gak@google.com (Gregory Kick)
+ */
+public class EmptyImmutableTableTest extends AbstractImmutableTableTest {
+  private static final ImmutableTable<Character, Integer, String> INSTANCE =
+      ImmutableTable.of();
+
+  @Override Iterable<ImmutableTable<Character, Integer, String>>
+      getTestInstances() {
+    return ImmutableSet.of(INSTANCE);
+  }
+
+  public void testHashCode() {
+    assertEquals(0, INSTANCE.hashCode());
+  }
+
+  public void testEqualsObject() {
+    new EqualsTester()
+        .addEqualityGroup(INSTANCE, HashBasedTable.create(),
+            TreeBasedTable.create())
+        .addEqualityGroup(ArrayTable.create(ImmutableSet.of("A"),
+            ImmutableSet.of(1)))
+        .testEquals();
+  }
+
+  public void testToString() {
+    assertEquals("{}", INSTANCE.toString());
+  }
+
+  public void testSize() {
+    assertEquals(0, INSTANCE.size());
+  }
+
+  public void testGet() {
+    assertNull(INSTANCE.get('a', 1));
+  }
+
+  public void testIsEmpty() {
+    assertTrue(INSTANCE.isEmpty());
+  }
+
+  public void testCellSet() {
+    assertEquals(ImmutableSet.of(), INSTANCE.cellSet());
+  }
+
+  public void testColumn() {
+    assertEquals(ImmutableMap.of(), INSTANCE.column(1));
+  }
+
+  public void testColumnKeySet() {
+    assertEquals(ImmutableSet.of(), INSTANCE.columnKeySet());
+  }
+
+  public void testColumnMap() {
+    assertEquals(ImmutableMap.of(), INSTANCE.columnMap());
+  }
+
+  public void testContains() {
+    assertFalse(INSTANCE.contains('a', 1));
+  }
+
+  public void testContainsColumn() {
+    assertFalse(INSTANCE.containsColumn(1));
+  }
+
+  public void testContainsRow() {
+    assertFalse(INSTANCE.containsRow('a'));
+  }
+
+  public void testContainsValue() {
+    assertFalse(INSTANCE.containsValue("blah"));
+  }
+
+  public void testRow() {
+    assertEquals(ImmutableMap.of(), INSTANCE.row('a'));
+  }
+
+  public void testRowKeySet() {
+    assertEquals(ImmutableSet.of(), INSTANCE.rowKeySet());
+  }
+
+  public void testRowMap() {
+    assertEquals(ImmutableMap.of(), INSTANCE.rowMap());
+  }
+
+  public void testValues() {
+    assertTrue(INSTANCE.values().isEmpty());
+  }
+
+  public void testReadResolve() {
+    assertSame(EmptyImmutableTable.INSTANCE,
+        EmptyImmutableTable.INSTANCE.readResolve());
+  }
+
+}
diff --git a/guava-tests/test/com/google/common/collect/EnumBiMapTest.java b/guava-tests/test/com/google/common/collect/EnumBiMapTest.java
new file mode 100644
index 0000000..c592f79
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/EnumBiMapTest.java
@@ -0,0 +1,163 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.testing.SerializableTester;
+
+import junit.framework.TestCase;
+
+import java.util.Collections;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Tests for {@code EnumBiMap}.
+ *
+ * @author Mike Bostock
+ * @author Jared Levy
+ */
+@GwtCompatible(emulated = true)
+public class EnumBiMapTest extends TestCase {
+  private enum Currency { DOLLAR, FRANC, PESO }
+  private enum Country { CANADA, CHILE, SWITZERLAND }
+
+  public void testCreate() {
+    EnumBiMap<Currency, Country> bimap =
+        EnumBiMap.create(Currency.class, Country.class);
+    assertTrue(bimap.isEmpty());
+    assertEquals("{}", bimap.toString());
+    assertEquals(HashBiMap.create(), bimap);
+    bimap.put(Currency.DOLLAR, Country.CANADA);
+    assertEquals(Country.CANADA, bimap.get(Currency.DOLLAR));
+    assertEquals(Currency.DOLLAR, bimap.inverse().get(Country.CANADA));
+  }
+
+  public void testCreateFromMap() {
+    /* Test with non-empty Map. */
+    Map<Currency, Country> map = ImmutableMap.of(
+        Currency.DOLLAR, Country.CANADA,
+        Currency.PESO, Country.CHILE,
+        Currency.FRANC, Country.SWITZERLAND);
+    EnumBiMap<Currency, Country> bimap = EnumBiMap.create(map);
+    assertEquals(Country.CANADA, bimap.get(Currency.DOLLAR));
+    assertEquals(Currency.DOLLAR, bimap.inverse().get(Country.CANADA));
+
+    /* Map must have at least one entry if not an EnumBiMap. */
+    try {
+      EnumBiMap.create(Collections.<Currency, Country>emptyMap());
+      fail("IllegalArgumentException expected");
+    } catch (IllegalArgumentException expected) {}
+    try {
+      EnumBiMap.create(
+          EnumHashBiMap.<Currency, Country>create(Currency.class));
+      fail("IllegalArgumentException expected");
+    } catch (IllegalArgumentException expected) {}
+
+    /* Map can be empty if it's an EnumBiMap. */
+    Map<Currency, Country> emptyBimap =
+        EnumBiMap.create(Currency.class, Country.class);
+    bimap = EnumBiMap.create(emptyBimap);
+    assertTrue(bimap.isEmpty());
+  }
+
+  public void testEnumBiMapConstructor() {
+    /* Test that it copies existing entries. */
+    EnumBiMap<Currency, Country> bimap1 =
+        EnumBiMap.create(Currency.class, Country.class);
+    bimap1.put(Currency.DOLLAR, Country.CANADA);
+    EnumBiMap<Currency, Country> bimap2 =
+        EnumBiMap.create(bimap1);
+    assertEquals(Country.CANADA, bimap2.get(Currency.DOLLAR));
+    assertEquals(bimap1, bimap2);
+    bimap2.inverse().put(Country.SWITZERLAND, Currency.FRANC);
+    assertEquals(Country.SWITZERLAND, bimap2.get(Currency.FRANC));
+    assertNull(bimap1.get(Currency.FRANC));
+    assertFalse(bimap2.equals(bimap1));
+
+    /* Test that it can be empty. */
+    EnumBiMap<Currency, Country> emptyBimap =
+        EnumBiMap.create(Currency.class, Country.class);
+    EnumBiMap<Currency, Country> bimap3 =
+        EnumBiMap.create(emptyBimap);
+    assertEquals(bimap3, emptyBimap);
+  }
+
+  public void testKeyType() {
+    EnumBiMap<Currency, Country> bimap =
+        EnumBiMap.create(Currency.class, Country.class);
+    assertEquals(Currency.class, bimap.keyType());
+  }
+
+  public void testValueType() {
+    EnumBiMap<Currency, Country> bimap =
+        EnumBiMap.create(Currency.class, Country.class);
+    assertEquals(Country.class, bimap.valueType());
+  }
+
+  @GwtIncompatible("SerializationTester")
+  public void testSerialization() {
+    Map<Currency, Country> map = ImmutableMap.of(
+        Currency.DOLLAR, Country.CANADA,
+        Currency.PESO, Country.CHILE,
+        Currency.FRANC, Country.SWITZERLAND);
+    EnumBiMap<Currency, Country> bimap = EnumBiMap.create(map);
+
+    BiMap<Currency, Country> copy =
+        SerializableTester.reserializeAndAssert(bimap);
+    assertEquals(bimap.inverse(), copy.inverse());
+  }
+
+  public void testIterationOrder() {
+    // The enum orderings are alphabetical, leading to the bimap and its inverse
+    // having inconsistent iteration orderings.
+    Map<Currency, Country> map = ImmutableMap.of(
+        Currency.DOLLAR, Country.CANADA,
+        Currency.PESO, Country.CHILE,
+        Currency.FRANC, Country.SWITZERLAND);
+    EnumBiMap<Currency, Country> bimap = EnumBiMap.create(map);
+
+    // forward map ordered by currency
+    ASSERT.that(bimap.keySet())
+        .hasContentsInOrder(Currency.DOLLAR, Currency.FRANC, Currency.PESO);
+    // forward map ordered by currency (even for country values)
+    ASSERT.that(bimap.values())
+        .hasContentsInOrder(Country.CANADA, Country.SWITZERLAND, Country.CHILE);
+    // backward map ordered by country
+    ASSERT.that(bimap.inverse().keySet())
+        .hasContentsInOrder(Country.CANADA, Country.CHILE, Country.SWITZERLAND);
+    // backward map ordered by country (even for currency values)
+    ASSERT.that(bimap.inverse().values())
+        .hasContentsInOrder(Currency.DOLLAR, Currency.PESO, Currency.FRANC);
+  }
+
+  public void testEntrySet() {
+    Map<Currency, Country> map = ImmutableMap.of(
+        Currency.DOLLAR, Country.CANADA,
+        Currency.PESO, Country.CHILE,
+        Currency.FRANC, Country.SWITZERLAND);
+    EnumBiMap<Currency, Country> bimap = EnumBiMap.create(map);
+    Set<Object> uniqueEntries = Sets.newIdentityHashSet();
+    uniqueEntries.addAll(bimap.entrySet());
+    assertEquals(3, uniqueEntries.size());
+  }
+
+  /* Remaining behavior tested by AbstractBiMapTest. */
+}
diff --git a/guava-tests/test/com/google/common/collect/EnumHashBiMapTest.java b/guava-tests/test/com/google/common/collect/EnumHashBiMapTest.java
new file mode 100644
index 0000000..e85811e
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/EnumHashBiMapTest.java
@@ -0,0 +1,172 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.testing.SerializableTester;
+
+import junit.framework.TestCase;
+
+import java.util.Collections;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Tests for {@code EnumHashBiMap}.
+ *
+ * @author Mike Bostock
+ */
+@GwtCompatible(emulated = true)
+public class EnumHashBiMapTest extends TestCase {
+  private enum Currency { DOLLAR, PESO, FRANC }
+  private enum Country { CANADA, CHILE, SWITZERLAND }
+
+  public void testCreate() {
+    EnumHashBiMap<Currency, String> bimap =
+        EnumHashBiMap.create(Currency.class);
+    assertTrue(bimap.isEmpty());
+    assertEquals("{}", bimap.toString());
+    assertEquals(HashBiMap.create(), bimap);
+    bimap.put(Currency.DOLLAR, "dollar");
+    assertEquals("dollar", bimap.get(Currency.DOLLAR));
+    assertEquals(Currency.DOLLAR, bimap.inverse().get("dollar"));
+  }
+
+  public void testCreateFromMap() {
+    /* Test with non-empty Map. */
+    Map<Currency, String> map = ImmutableMap.of(
+        Currency.DOLLAR, "dollar",
+        Currency.PESO, "peso",
+        Currency.FRANC, "franc");
+    EnumHashBiMap<Currency, String> bimap
+        = EnumHashBiMap.create(map);
+    assertEquals("dollar", bimap.get(Currency.DOLLAR));
+    assertEquals(Currency.DOLLAR, bimap.inverse().get("dollar"));
+
+    /* Map must have at least one entry if not an EnumHashBiMap. */
+    try {
+      EnumHashBiMap.create(
+          Collections.<Currency, String>emptyMap());
+      fail("IllegalArgumentException expected");
+    } catch (IllegalArgumentException expected) {}
+
+    /* Map can be empty if it's an EnumHashBiMap. */
+    Map<Currency, String> emptyBimap = EnumHashBiMap.create(Currency.class);
+    bimap = EnumHashBiMap.create(emptyBimap);
+    assertTrue(bimap.isEmpty());
+
+    /* Map can be empty if it's an EnumBiMap. */
+    Map<Currency, Country> emptyBimap2 =
+        EnumBiMap.create(Currency.class, Country.class);
+    EnumHashBiMap<Currency, Country> bimap2
+        = EnumHashBiMap.create(emptyBimap2);
+    assertTrue(bimap2.isEmpty());
+  }
+
+  public void testEnumHashBiMapConstructor() {
+    /* Test that it copies existing entries. */
+    EnumHashBiMap<Currency, String> bimap1 =
+        EnumHashBiMap.create(Currency.class);
+    bimap1.put(Currency.DOLLAR, "dollar");
+    EnumHashBiMap<Currency, String> bimap2 =
+        EnumHashBiMap.create(bimap1);
+    assertEquals("dollar", bimap2.get(Currency.DOLLAR));
+    assertEquals(bimap1, bimap2);
+    bimap2.inverse().put("franc", Currency.FRANC);
+    assertEquals("franc", bimap2.get(Currency.FRANC));
+    assertNull(bimap1.get(Currency.FRANC));
+    assertFalse(bimap2.equals(bimap1));
+
+    /* Test that it can be empty. */
+    EnumHashBiMap<Currency, String> emptyBimap =
+        EnumHashBiMap.create(Currency.class);
+    EnumHashBiMap<Currency, String> bimap3 =
+        EnumHashBiMap.create(emptyBimap);
+    assertEquals(bimap3, emptyBimap);
+  }
+
+  public void testEnumBiMapConstructor() {
+    /* Test that it copies existing entries. */
+    EnumBiMap<Currency, Country> bimap1 =
+        EnumBiMap.create(Currency.class, Country.class);
+    bimap1.put(Currency.DOLLAR, Country.SWITZERLAND);
+    EnumHashBiMap<Currency, Object> bimap2 = // use supertype
+        EnumHashBiMap.<Currency, Object>create(bimap1);
+    assertEquals(Country.SWITZERLAND, bimap2.get(Currency.DOLLAR));
+    assertEquals(bimap1, bimap2);
+    bimap2.inverse().put("franc", Currency.FRANC);
+    assertEquals("franc", bimap2.get(Currency.FRANC));
+    assertNull(bimap1.get(Currency.FRANC));
+    assertFalse(bimap2.equals(bimap1));
+
+    /* Test that it can be empty. */
+    EnumBiMap<Currency, Country> emptyBimap =
+        EnumBiMap.create(Currency.class, Country.class);
+    EnumHashBiMap<Currency, Country> bimap3 = // use exact type
+        EnumHashBiMap.create(emptyBimap);
+    assertEquals(bimap3, emptyBimap);
+  }
+
+  public void testKeyType() {
+    EnumHashBiMap<Currency, String> bimap =
+        EnumHashBiMap.create(Currency.class);
+    assertEquals(Currency.class, bimap.keyType());
+  }
+
+  @GwtIncompatible("SerializationTester")
+  public void testSerialization() {
+    Map<Currency, String> map = ImmutableMap.of(
+        Currency.DOLLAR, "dollar",
+        Currency.PESO, "peso",
+        Currency.FRANC, "franc");
+    EnumHashBiMap<Currency, String> bimap
+        = EnumHashBiMap.create(map);
+
+    BiMap<Currency, String> copy =
+        SerializableTester.reserializeAndAssert(bimap);
+    assertEquals(bimap.inverse(), copy.inverse());
+  }
+
+  public void testForcePut() {
+    EnumHashBiMap<Currency, String> bimap =
+        EnumHashBiMap.create(Currency.class);
+    bimap.put(Currency.DOLLAR, "dollar");
+    try {
+      bimap.put(Currency.PESO, "dollar");
+    } catch (IllegalArgumentException expected) {}
+    bimap.forcePut(Currency.PESO, "dollar");
+    assertEquals("dollar", bimap.get(Currency.PESO));
+    assertEquals(Currency.PESO, bimap.inverse().get("dollar"));
+    assertEquals(1, bimap.size());
+    assertEquals(1, bimap.inverse().size());
+  }
+
+  public void testEntrySet() {
+    Map<Currency, String> map = ImmutableMap.of(
+        Currency.DOLLAR, "dollar",
+        Currency.PESO, "peso",
+        Currency.FRANC, "franc");
+    EnumHashBiMap<Currency, String> bimap
+        = EnumHashBiMap.create(map);
+    
+    Set<Object> uniqueEntries = Sets.newIdentityHashSet();
+    uniqueEntries.addAll(bimap.entrySet());
+    assertEquals(3, uniqueEntries.size());
+  }
+  /* Remaining behavior tested by AbstractBiMapTest. */
+}
diff --git a/guava-tests/test/com/google/common/collect/EnumMultisetTest.java b/guava-tests/test/com/google/common/collect/EnumMultisetTest.java
new file mode 100644
index 0000000..e22fe5e
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/EnumMultisetTest.java
@@ -0,0 +1,93 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static java.util.Arrays.asList;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.testing.SerializableTester;
+
+import junit.framework.TestCase;
+
+import java.util.Collection;
+import java.util.EnumSet;
+import java.util.Set;
+
+/**
+ * Tests for an {@link EnumMultiset}.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible(emulated = true)
+public class EnumMultisetTest extends TestCase {
+  private static enum Color {
+    BLUE, RED, YELLOW, GREEN, WHITE
+  }
+
+  public void testClassCreate() {
+    Multiset<Color> ms = EnumMultiset.create(Color.class);
+    ms.add(Color.RED);
+    ms.add(Color.YELLOW);
+    ms.add(Color.RED);
+    assertEquals(0, ms.count(Color.BLUE));
+    assertEquals(1, ms.count(Color.YELLOW));
+    assertEquals(2, ms.count(Color.RED));
+  }
+
+  public void testCollectionCreate() {
+    Multiset<Color> ms = EnumMultiset.create(
+        asList(Color.RED, Color.YELLOW, Color.RED));
+    assertEquals(0, ms.count(Color.BLUE));
+    assertEquals(1, ms.count(Color.YELLOW));
+    assertEquals(2, ms.count(Color.RED));
+  }
+
+  public void testIllegalCreate() {
+    Collection<Color> empty = EnumSet.noneOf(Color.class);
+    try {
+      EnumMultiset.create(empty);
+      fail();
+    } catch (IllegalArgumentException expected) {}
+  }
+
+  public void testToString() {
+    Multiset<Color> ms = EnumMultiset.create(Color.class);
+    ms.add(Color.BLUE, 3);
+    ms.add(Color.YELLOW, 1);
+    ms.add(Color.RED, 2);
+    assertEquals("[BLUE x 3, RED x 2, YELLOW]", ms.toString());
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testSerializable() {
+    Multiset<Color> ms = EnumMultiset.create(
+        asList(Color.RED, Color.YELLOW, Color.RED));
+    assertEquals(ms, SerializableTester.reserialize(ms));
+  }
+  
+  public void testEntrySet() {
+    Multiset<Color> ms = EnumMultiset.create(Color.class);
+    ms.add(Color.BLUE, 3);
+    ms.add(Color.YELLOW, 1);
+    ms.add(Color.RED, 2);
+    
+    Set<Object> uniqueEntries = Sets.newIdentityHashSet();
+    uniqueEntries.addAll(ms.entrySet());
+    assertEquals(3, uniqueEntries.size());
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/FauxveridesTest.java b/guava-tests/test/com/google/common/collect/FauxveridesTest.java
new file mode 100644
index 0000000..0bf6df4
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/FauxveridesTest.java
@@ -0,0 +1,288 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.collect.Lists.transform;
+import static com.google.common.collect.Sets.newHashSet;
+import static com.google.common.collect.Sets.newTreeSet;
+import static java.lang.reflect.Modifier.isPublic;
+import static java.lang.reflect.Modifier.isStatic;
+
+import com.google.common.base.Function;
+import com.google.common.base.Joiner;
+import com.google.common.base.Objects;
+
+import junit.framework.TestCase;
+
+import java.lang.reflect.Method;
+import java.lang.reflect.Type;
+import java.lang.reflect.TypeVariable;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Tests that all {@code public static} methods "inherited" from superclasses
+ * are "overridden" in each immutable-collection class. This ensures, for
+ * example, that a call written "{@code ImmutableSortedSet.copyOf()}" cannot
+ * secretly be a call to {@code ImmutableSet.copyOf()}.
+ *
+ * @author Chris Povirk
+ */
+public class FauxveridesTest extends TestCase {
+  public void testImmutableBiMap() {
+    doHasAllFauxveridesTest(ImmutableBiMap.class, ImmutableMap.class);
+  }
+
+  public void testImmutableListMultimap() {
+    doHasAllFauxveridesTest(
+        ImmutableListMultimap.class, ImmutableMultimap.class);
+  }
+
+  public void testImmutableSetMultimap() {
+    doHasAllFauxveridesTest(
+        ImmutableSetMultimap.class, ImmutableMultimap.class);
+  }
+
+  public void testImmutableSortedMap() {
+    doHasAllFauxveridesTest(ImmutableSortedMap.class, ImmutableMap.class);
+  }
+
+  public void testImmutableSortedSet() {
+    doHasAllFauxveridesTest(ImmutableSortedSet.class, ImmutableSet.class);
+  }
+
+  /*
+   * Demonstrate that ClassCastException is possible when calling
+   * ImmutableSorted{Set,Map}.copyOf(), whose type parameters we are unable to
+   * restrict (see ImmutableSortedSetFauxverideShim).
+   */
+
+  public void testImmutableSortedMapCopyOfMap() {
+    Map<Object, Object> original =
+        ImmutableMap.of(new Object(), new Object(), new Object(), new Object());
+
+    try {
+      ImmutableSortedMap.copyOf(original);
+      fail();
+    } catch (ClassCastException expected) {
+    }
+  }
+
+  public void testImmutableSortedSetCopyOfIterable() {
+    Set<Object> original = ImmutableSet.of(new Object(), new Object());
+
+    try {
+      ImmutableSortedSet.copyOf(original);
+      fail();
+    } catch (ClassCastException expected) {
+    }
+  }
+
+  public void testImmutableSortedSetCopyOfIterator() {
+    Set<Object> original = ImmutableSet.of(new Object(), new Object());
+
+    try {
+      ImmutableSortedSet.copyOf(original.iterator());
+      fail();
+    } catch (ClassCastException expected) {
+    }
+  }
+
+  private void doHasAllFauxveridesTest(Class<?> descendant, Class<?> ancestor) {
+    Set<MethodSignature> required =
+        getAllRequiredToFauxveride(descendant, ancestor);
+    Set<MethodSignature> found = getAllFauxveridden(descendant, ancestor);
+    required.removeAll(found);
+
+    assertEquals("Must hide public static methods from ancestor classes",
+        Collections.emptySet(), newTreeSet(required));
+  }
+
+  private static Set<MethodSignature> getAllRequiredToFauxveride(
+      Class<?> descendant, Class<?> ancestor) {
+    return getPublicStaticMethodsBetween(ancestor, Object.class);
+  }
+
+  private static Set<MethodSignature> getAllFauxveridden(
+      Class<?> descendant, Class<?> ancestor) {
+    return getPublicStaticMethodsBetween(descendant, ancestor);
+  }
+
+  private static Set<MethodSignature> getPublicStaticMethodsBetween(
+      Class<?> descendant, Class<?> ancestor) {
+    Set<MethodSignature> methods = newHashSet();
+    for (Class<?> clazz : getClassesBetween(descendant, ancestor)) {
+      methods.addAll(getPublicStaticMethods(clazz));
+    }
+    return methods;
+  }
+
+  private static Set<MethodSignature> getPublicStaticMethods(Class<?> clazz) {
+    Set<MethodSignature> publicStaticMethods = newHashSet();
+
+    for (Method method : clazz.getDeclaredMethods()) {
+      int modifiers = method.getModifiers();
+      if (isPublic(modifiers) && isStatic(modifiers)) {
+        publicStaticMethods.add(new MethodSignature(method));
+      }
+    }
+
+    return publicStaticMethods;
+  }
+
+  /** [descendant, ancestor) */
+  private static Set<Class<?>> getClassesBetween(
+      Class<?> descendant, Class<?> ancestor) {
+    Set<Class<?>> classes = newHashSet();
+
+    while (!descendant.equals(ancestor)) {
+      classes.add(descendant);
+      descendant = descendant.getSuperclass();
+    }
+
+    return classes;
+  }
+
+  /**
+   * Not really a signature -- just the parts that affect whether one method is
+   * a fauxveride of a method from an ancestor class.
+   * <p>
+   * See JLS 8.4.2 for the definition of the related "override-equivalent."
+   */
+  private static final class MethodSignature
+      implements Comparable<MethodSignature> {
+    final String name;
+    final List<Class<?>> parameterTypes;
+    final TypeSignature typeSignature;
+
+    MethodSignature(Method method) {
+      name = method.getName();
+      parameterTypes = Arrays.asList(method.getParameterTypes());
+      typeSignature = new TypeSignature(method.getTypeParameters());
+    }
+
+    @Override public boolean equals(Object obj) {
+      if (obj instanceof MethodSignature) {
+        MethodSignature other = (MethodSignature) obj;
+        return name.equals(other.name)
+            && parameterTypes.equals(other.parameterTypes)
+            && typeSignature.equals(other.typeSignature);
+      }
+
+      return false;
+    }
+
+    @Override public int hashCode() {
+      return Objects.hashCode(name, parameterTypes, typeSignature);
+    }
+
+    @Override public String toString() {
+      return String.format("%s%s(%s)",
+          typeSignature, name, getTypesString(parameterTypes));
+    }
+
+    @Override public int compareTo(MethodSignature o) {
+      return toString().compareTo(o.toString());
+    }
+  }
+
+  private static final class TypeSignature {
+    final List<TypeParameterSignature> parameterSignatures;
+
+    TypeSignature(TypeVariable<Method>[] parameters) {
+      parameterSignatures =
+          transform(Arrays.asList(parameters),
+              new Function<TypeVariable<?>, TypeParameterSignature>() {
+                @Override
+                public TypeParameterSignature apply(TypeVariable<?> from) {
+                  return new TypeParameterSignature(from);
+                }
+              });
+    }
+
+    @Override public boolean equals(Object obj) {
+      if (obj instanceof TypeSignature) {
+        TypeSignature other = (TypeSignature) obj;
+        return parameterSignatures.equals(other.parameterSignatures);
+      }
+
+      return false;
+    }
+
+    @Override public int hashCode() {
+      return parameterSignatures.hashCode();
+    }
+
+    @Override public String toString() {
+      return (parameterSignatures.isEmpty())
+          ? ""
+          : "<" + Joiner.on(", ").join(parameterSignatures) + "> ";
+    }
+  }
+
+  private static final class TypeParameterSignature {
+    final String name;
+    final List<Type> bounds;
+
+    TypeParameterSignature(TypeVariable<?> typeParameter) {
+      name = typeParameter.getName();
+      bounds = Arrays.asList(typeParameter.getBounds());
+    }
+
+    @Override public boolean equals(Object obj) {
+      if (obj instanceof TypeParameterSignature) {
+        TypeParameterSignature other = (TypeParameterSignature) obj;
+        /*
+         * The name is here only for display purposes; <E extends Number> and <T
+         * extends Number> are equivalent.
+         */
+        return bounds.equals(other.bounds);
+      }
+
+      return false;
+    }
+
+    @Override public int hashCode() {
+      return bounds.hashCode();
+    }
+
+    @Override public String toString() {
+      return (bounds.equals(ImmutableList.of(Object.class)))
+          ? name
+          : name + " extends " + getTypesString(bounds);
+    }
+  }
+
+  private static String getTypesString(List<? extends Type> types) {
+    List<String> names = transform(types, SIMPLE_NAME_GETTER);
+    return Joiner.on(", ").join(names);
+  }
+
+  private static final Function<Type, String> SIMPLE_NAME_GETTER =
+      new Function<Type, String>() {
+        @Override
+        public String apply(Type from) {
+          if (from instanceof Class) {
+            return ((Class<?>) from).getSimpleName();
+          }
+          return from.toString();
+        }
+      };
+}
diff --git a/guava-tests/test/com/google/common/collect/FilteredMultimapTest.java b/guava-tests/test/com/google/common/collect/FilteredMultimapTest.java
new file mode 100644
index 0000000..e87f0b0
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/FilteredMultimapTest.java
@@ -0,0 +1,108 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.base.Predicate;
+
+import java.util.Arrays;
+import java.util.Map;
+import java.util.Map.Entry;
+
+/**
+ * Unit tests for {@link Multimaps} filtering methods.
+ *
+ * @author Jared Levy
+ */
+@GwtIncompatible("nottested")
+public class FilteredMultimapTest extends AbstractMultimapTest {
+
+  private static final Predicate<Map.Entry<String, Integer>> ENTRY_PREDICATE
+      = new Predicate<Map.Entry<String, Integer>>() {
+        @Override public boolean apply(Entry<String, Integer> entry) {
+          return !"badkey".equals(entry.getKey()) && !((Integer) 55556).equals(entry.getValue());
+        }
+  };
+
+  @Override protected Multimap<String, Integer> create() {
+    Multimap<String, Integer> unfiltered = HashMultimap.create();
+    unfiltered.put("foo", 55556);
+    unfiltered.put("badkey", 1);
+    return Multimaps.filterEntries(unfiltered, ENTRY_PREDICATE);
+  }
+
+  // iterators don't support remove()
+  // TODO(jlevy): Test logic that doesn't involve iterator.remove()
+  @Override public void testKeysEntrySetIterator() {}
+  @Override public void testGetIterator() {}
+  @Override public void testEntriesUpdate() {}
+  @Override public void testEntriesIterator() {}
+  @Override public void testKeySetIterator() {}
+  @Override public void testValuesIteratorRemove() {}
+  @Override public void testAsMapEntriesUpdate() {}
+
+  // not serializable
+  @Override public void testSerializable() {}
+
+  private static final Predicate<String> KEY_PREDICATE
+      = new Predicate<String>() {
+        @Override public boolean apply(String key) {
+          return !"badkey".equals(key);
+        }
+  };
+
+  public void testFilterKeys() {
+    Multimap<String, Integer> unfiltered = HashMultimap.create();
+    unfiltered.put("foo", 55556);
+    unfiltered.put("badkey", 1);
+    Multimap<String, Integer> filtered = Multimaps.filterKeys(unfiltered, KEY_PREDICATE);
+    assertEquals(1, filtered.size());
+    assertTrue(filtered.containsEntry("foo", 55556));
+  }
+
+  private static final Predicate<Integer> VALUE_PREDICATE
+      = new Predicate<Integer>() {
+        @Override public boolean apply(Integer value) {
+          return !((Integer) 55556).equals(value);
+        }
+  };
+
+  public void testFilterValues() {
+    Multimap<String, Integer> unfiltered = HashMultimap.create();
+    unfiltered.put("foo", 55556);
+    unfiltered.put("badkey", 1);
+    Multimap<String, Integer> filtered = Multimaps.filterValues(unfiltered, VALUE_PREDICATE);
+    assertEquals(1, filtered.size());
+    assertFalse(filtered.containsEntry("foo", 55556));
+    assertTrue(filtered.containsEntry("badkey", 1));
+  }
+
+  public void testFilterFiltered() {
+    Multimap<String, Integer> unfiltered = HashMultimap.create();
+    unfiltered.put("foo", 55556);
+    unfiltered.put("badkey", 1);
+    unfiltered.put("foo", 1);
+    Multimap<String, Integer> keyFiltered = Multimaps.filterKeys(unfiltered, KEY_PREDICATE);
+    Multimap<String, Integer> filtered = Multimaps.filterValues(keyFiltered, VALUE_PREDICATE);
+    assertEquals(1, filtered.size());
+    assertTrue(filtered.containsEntry("foo", 1));
+    assertTrue(filtered.keySet().retainAll(Arrays.asList("cat", "dog")));
+    assertEquals(0, filtered.size());
+  }
+
+  // TODO(jlevy): Many more tests needed.
+}
diff --git a/guava-tests/test/com/google/common/collect/ForMapMultimapAsMapImplementsMapTest.java b/guava-tests/test/com/google/common/collect/ForMapMultimapAsMapImplementsMapTest.java
new file mode 100644
index 0000000..c9f5a26
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/ForMapMultimapAsMapImplementsMapTest.java
@@ -0,0 +1,99 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.collect.testing.MapInterfaceTest;
+
+import java.util.Collection;
+import java.util.Map;
+
+/**
+ * Test {@link Multimap#asMap()} for a {@link Multimaps#forMap} multimap with
+ * {@link MapInterfaceTest}.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible
+public class ForMapMultimapAsMapImplementsMapTest
+    extends AbstractMultimapAsMapImplementsMapTest {
+
+  public ForMapMultimapAsMapImplementsMapTest() {
+    super(true, true, true);
+  }
+
+  @Override protected Map<String, Collection<Integer>> makeEmptyMap() {
+    Map<String, Integer> map = Maps.newHashMap();
+    return Multimaps.forMap(map).asMap();
+  }
+
+  @Override protected Map<String, Collection<Integer>> makePopulatedMap() {
+    Map<String, Integer> map = Maps.newHashMap();
+    map.put("foo", 1);
+    map.put("bar", 2);
+    map.put("cow", 3);
+    return Multimaps.forMap(map).asMap();
+  }
+
+  @Override public void testEntrySetRemoveAllNullFromEmpty() {
+    try {
+      super.testEntrySetRemoveAllNullFromEmpty();
+    } catch (RuntimeException tolerated) {
+      // GWT's HashMap.entrySet().removeAll(null) doesn't throws NPE.
+    }
+  }
+
+  @Override public void testEntrySetRetainAllNullFromEmpty() {
+    try {
+      super.testEntrySetRetainAllNullFromEmpty();
+    } catch (RuntimeException tolerated) {
+      // GWT's HashMap.entrySet().retainAll(null) doesn't throws NPE.
+    }
+  }
+
+  @Override public void testKeySetRemoveAllNullFromEmpty() {
+    try {
+      super.testKeySetRemoveAllNullFromEmpty();
+    } catch (RuntimeException tolerated) {
+      // GWT's HashMap.keySet().removeAll(null) doesn't throws NPE.
+    }
+  }
+
+  @Override public void testKeySetRetainAllNullFromEmpty() {
+    try {
+      super.testKeySetRetainAllNullFromEmpty();
+    } catch (RuntimeException tolerated) {
+      // GWT's HashMap.keySet().retainAll(null) doesn't throws NPE.
+    }
+  }
+
+  @Override public void testValuesRemoveAllNullFromEmpty() {
+    try {
+      super.testValuesRemoveAllNullFromEmpty();
+    } catch (RuntimeException tolerated) {
+      // GWT's HashMap.values().removeAll(null) doesn't throws NPE.
+    }
+  }
+
+  @Override public void testValuesRetainAllNullFromEmpty() {
+    try {
+      super.testValuesRemoveAllNullFromEmpty();
+    } catch (RuntimeException tolerated) {
+      // GWT's HashMap.values().retainAll(null) doesn't throws NPE.
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/ForwardingCollectionTest.java b/guava-tests/test/com/google/common/collect/ForwardingCollectionTest.java
new file mode 100644
index 0000000..47942c5
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/ForwardingCollectionTest.java
@@ -0,0 +1,224 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static java.util.Arrays.asList;
+
+import com.google.common.collect.testing.CollectionTestSuiteBuilder;
+import com.google.common.collect.testing.MinimalCollection;
+import com.google.common.collect.testing.TestStringCollectionGenerator;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import java.util.Collection;
+import java.util.Collections;
+
+/**
+ * Tests for {@link ForwardingCollection}.
+ *
+ * @author Robert Konigsberg
+ * @author Hayward Chan
+ * @author Louis Wasserman
+ */
+public class ForwardingCollectionTest extends ForwardingTestCase {
+  static final class StandardImplForwardingCollection<T>
+      extends ForwardingCollection<T> {
+    private final Collection<T> backingCollection;
+
+    StandardImplForwardingCollection(Collection<T> backingCollection) {
+      this.backingCollection = backingCollection;
+    }
+
+    @Override protected Collection<T> delegate() {
+      return backingCollection;
+    }
+
+    @Override public boolean addAll(Collection<? extends T> collection) {
+      return standardAddAll(collection);
+    }
+
+    @Override public void clear() {
+      standardClear();
+    }
+
+    @Override public boolean contains(Object object) {
+      return standardContains(object);
+    }
+
+    @Override public boolean containsAll(Collection<?> collection) {
+      return standardContainsAll(collection);
+    }
+
+    @Override public boolean remove(Object object) {
+      return standardRemove(object);
+    }
+
+    @Override public boolean removeAll(Collection<?> collection) {
+      return standardRemoveAll(collection);
+    }
+
+    @Override public boolean retainAll(Collection<?> collection) {
+      return standardRetainAll(collection);
+    }
+
+    @Override public Object[] toArray() {
+      return standardToArray();
+    }
+
+    @Override public <T> T[] toArray(T[] array) {
+      return standardToArray(array);
+    }
+
+    @Override public String toString() {
+      return standardToString();
+    }
+  }
+
+  private static final Collection<String> EMPTY_COLLECTION =
+      Collections.emptyList();
+
+  private Collection<String> forward;
+
+  public static Test suite(){
+    TestSuite suite = new TestSuite();
+    
+    suite.addTestSuite(ForwardingCollectionTest.class);
+    suite.addTest(
+        CollectionTestSuiteBuilder.using(new TestStringCollectionGenerator() {
+          @Override protected Collection<String> create(String[] elements) {
+            return new StandardImplForwardingCollection<String>(
+                Lists.newLinkedList(asList(elements)));
+          }
+        }).named(
+            "ForwardingCollection[LinkedList] with standard implementations")
+            .withFeatures(CollectionSize.ANY,
+                CollectionFeature.ALLOWS_NULL_VALUES,
+                CollectionFeature.GENERAL_PURPOSE).createTestSuite());
+    suite.addTest(
+        CollectionTestSuiteBuilder.using(new TestStringCollectionGenerator() {
+          @Override protected Collection<String> create(String[] elements) {
+            return new StandardImplForwardingCollection<String>(
+                MinimalCollection.of(elements));
+          }
+        }).named(
+            "ForwardingCollection[MinimalCollection] with standard"
+            + " implementations")
+            .withFeatures(CollectionSize.ANY, 
+                CollectionFeature.ALLOWS_NULL_VALUES).createTestSuite());
+    
+    return suite;
+  }
+  
+  @Override public void setUp() throws Exception {
+    super.setUp();
+    /*
+     * Class parameters must be raw, so we can't create a proxy with generic
+     * type arguments. The created proxy only records calls and returns null, so
+     * the type is irrelevant at runtime.
+     */
+    @SuppressWarnings("unchecked")
+    final Collection<String> list = createProxyInstance(Collection.class);
+    forward = new ForwardingCollection<String>() {
+      @Override protected Collection<String> delegate() {
+        return list;
+      }
+    };
+  }
+
+  public void testAdd_T() {
+    forward.add("asdf");
+    assertEquals("[add(Object)]", getCalls());
+  }
+
+  public void testAddAll_Collection() {
+    forward.addAll(EMPTY_COLLECTION);
+    assertEquals("[addAll(Collection)]", getCalls());
+  }
+
+  public void testClear() {
+    forward.clear();
+    assertEquals("[clear]", getCalls());
+  }
+
+  public void testContains_Object() {
+    forward.contains(null);
+    assertEquals("[contains(Object)]", getCalls());
+  }
+
+  public void testContainsAll_Collection() {
+    forward.containsAll(EMPTY_COLLECTION);
+    assertEquals("[containsAll(Collection)]", getCalls());
+  }
+
+  public void testIsEmpty() {
+    forward.isEmpty();
+    assertEquals("[isEmpty]", getCalls());
+  }
+
+  public void testIterator() {
+    forward.iterator();
+    assertEquals("[iterator]", getCalls());
+  }
+
+  public void testRemove_Object() {
+    forward.remove(null);
+    assertEquals("[remove(Object)]", getCalls());
+  }
+
+  public void testRemoveAll_Collection() {
+    forward.removeAll(EMPTY_COLLECTION);
+    assertEquals("[removeAll(Collection)]", getCalls());
+  }
+
+  public void testRetainAll_Collection() {
+    forward.retainAll(EMPTY_COLLECTION);
+    assertEquals("[retainAll(Collection)]", getCalls());
+  }
+
+  public void testSize() {
+    forward.size();
+    assertEquals("[size]", getCalls());
+  }
+
+  public void testToArray() {
+    forward.toArray();
+    assertEquals("[toArray]", getCalls());
+  }
+
+  public void testToArray_TArray() {
+    forward.toArray(new String[0]);
+    assertEquals("[toArray(Object[])]", getCalls());
+  }
+
+  public void testToString() {
+    forward.toString();
+    assertEquals("[toString]", getCalls());
+  }
+
+  public void testEquals_Object() {
+    forward.equals("asdf");
+    assertFalse("equals() should not be forwarded.", isCalled());
+  }
+
+  public void testHashCode() {
+    forward.hashCode();
+    assertFalse("hashCode() should not be forwarded.", isCalled());
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/ForwardingConcurrentMapTest.java b/guava-tests/test/com/google/common/collect/ForwardingConcurrentMapTest.java
new file mode 100644
index 0000000..1c85e83
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/ForwardingConcurrentMapTest.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import junit.framework.TestCase;
+
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+/**
+ * Tests for {@link ForwardingConcurrentMap}.
+ *
+ * @author Jared Levy
+ */
+public class ForwardingConcurrentMapTest extends TestCase {
+
+  private static class TestMap
+      extends ForwardingConcurrentMap<String, Integer> {
+    final ConcurrentMap<String, Integer> delegate
+        = new ConcurrentHashMap<String, Integer>();
+    @Override protected ConcurrentMap<String, Integer> delegate() {
+      return delegate;
+    }
+  }
+
+  public void testPutIfAbsent() {
+    TestMap map = new TestMap();
+    map.put("foo", 1);
+    assertEquals(Integer.valueOf(1), map.putIfAbsent("foo", 2));
+    assertEquals(Integer.valueOf(1), map.get("foo"));
+    assertNull(map.putIfAbsent("bar", 3));
+    assertEquals(Integer.valueOf(3), map.get("bar"));
+  }
+
+  public void testRemove() {
+    TestMap map = new TestMap();
+    map.put("foo", 1);
+    assertFalse(map.remove("foo", 2));
+    assertFalse(map.remove("bar", 1));
+    assertEquals(Integer.valueOf(1), map.get("foo"));
+    assertTrue(map.remove("foo", 1));
+    assertTrue(map.isEmpty());
+  }
+
+  public void testReplace() {
+    TestMap map = new TestMap();
+    map.put("foo", 1);
+    assertEquals(Integer.valueOf(1), map.replace("foo", 2));
+    assertNull(map.replace("bar", 3));
+    assertEquals(Integer.valueOf(2), map.get("foo"));
+    assertFalse(map.containsKey("bar"));
+  }
+
+  public void testReplaceConditional() {
+    TestMap map = new TestMap();
+    map.put("foo", 1);
+    assertFalse(map.replace("foo", 2, 3));
+    assertFalse(map.replace("bar", 1, 2));
+    assertEquals(Integer.valueOf(1), map.get("foo"));
+    assertFalse(map.containsKey("bar"));
+    assertTrue(map.replace("foo", 1, 4));
+    assertEquals(Integer.valueOf(4), map.get("foo"));
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/ForwardingListIteratorTest.java b/guava-tests/test/com/google/common/collect/ForwardingListIteratorTest.java
new file mode 100644
index 0000000..3318527
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/ForwardingListIteratorTest.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import java.util.ListIterator;
+
+/**
+ * Tests for {@code ForwardingListIterator}.
+ *
+ * @author Robert Konigsberg
+ */
+public class ForwardingListIteratorTest extends ForwardingTestCase {
+
+  private ForwardingListIterator<String> forward;
+
+  @Override public void setUp() throws Exception {
+    super.setUp();
+    /*
+     * Class parameters must be raw, so we can't create a proxy with generic
+     * type arguments. The created proxy only records calls and returns null, so
+     * the type is irrelevant at runtime.
+     */
+    @SuppressWarnings("unchecked")
+    final ListIterator<String> li = createProxyInstance(ListIterator.class);
+    forward = new ForwardingListIterator<String>() {
+      @Override protected ListIterator<String> delegate() {
+        return li;
+      }
+    };
+  }
+
+  public void testAdd_T() {
+    forward.add("asdf");
+    assertEquals("[add(Object)]", getCalls());
+  }
+
+  public void testHasNext() {
+    forward.hasNext();
+    assertEquals("[hasNext]", getCalls());
+  }
+
+  public void testHasPrevious() {
+    forward.hasPrevious();
+    assertEquals("[hasPrevious]", getCalls());
+  }
+
+  public void testNext() {
+    forward.next();
+    assertEquals("[next]", getCalls());
+  }
+
+  public void testNextIndex() {
+    forward.nextIndex();
+    assertEquals("[nextIndex]", getCalls());
+  }
+
+  public void testPrevious() {
+    forward.previous();
+    assertEquals("[previous]", getCalls());
+  }
+
+  public void testPreviousIndex() {
+    forward.previousIndex();
+    assertEquals("[previousIndex]", getCalls());
+  }
+
+  public void testRemove() {
+    forward.remove();
+    assertEquals("[remove]", getCalls());
+  }
+
+  public void testSet_T() {
+    forward.set("asdf");
+    assertEquals("[set(Object)]", getCalls());
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/ForwardingListMultimapTest.java b/guava-tests/test/com/google/common/collect/ForwardingListMultimapTest.java
new file mode 100644
index 0000000..c237ee0
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/ForwardingListMultimapTest.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+/**
+ * Unit test for {@link ForwardingListMultimap}.
+ *
+ * @author Kurt Alfred Kluever
+ */
+public class ForwardingListMultimapTest extends ForwardingMultimapTest {
+
+  @Override public void setUp() throws Exception {
+    super.setUp();
+    /*
+     * Class parameters must be raw, so we can't create a proxy with generic
+     * type arguments. The created proxy only records calls and returns null, so
+     * the type is irrelevant at runtime.
+     */
+    @SuppressWarnings("unchecked")
+    final ListMultimap<String, Boolean> multimap =
+        createProxyInstance(ListMultimap.class);
+    forward = new ForwardingListMultimap<String, Boolean>() {
+      @Override protected ListMultimap<String, Boolean> delegate() {
+        return multimap;
+      }
+    };
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/ForwardingListTest.java b/guava-tests/test/com/google/common/collect/ForwardingListTest.java
new file mode 100644
index 0000000..aaa106e
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/ForwardingListTest.java
@@ -0,0 +1,315 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.collect.testing.ListTestSuiteBuilder;
+import com.google.common.collect.testing.TestStringListGenerator;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.ListFeature;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.RandomAccess;
+
+/**
+ * Tests for {@code ForwardingList}.
+ *
+ * @author Robert Konigsberg
+ * @author Louis Wasserman
+ */
+public class ForwardingListTest extends ForwardingTestCase {
+  static final class StandardImplForwardingList<T> extends ForwardingList<T> {
+    private final List<T> backingList;
+
+    StandardImplForwardingList(List<T> backingList) {
+      this.backingList = backingList;
+    }
+
+    @Override protected List<T> delegate() {
+      return backingList;
+    }
+
+    @Override public boolean add(T element) {
+      return standardAdd(element);
+    }
+
+    @Override public boolean addAll(Collection<? extends T> collection) {
+      return standardAddAll(collection);
+    }
+
+    @Override public void clear() {
+      standardClear();
+    }
+
+    @Override public boolean contains(Object object) {
+      return standardContains(object);
+    }
+
+    @Override public boolean containsAll(Collection<?> collection) {
+      return standardContainsAll(collection);
+    }
+
+    @Override public boolean remove(Object object) {
+      return standardRemove(object);
+    }
+
+    @Override public boolean removeAll(Collection<?> collection) {
+      return standardRemoveAll(collection);
+    }
+
+    @Override public boolean retainAll(Collection<?> collection) {
+      return standardRetainAll(collection);
+    }
+
+    @Override public Object[] toArray() {
+      return standardToArray();
+    }
+
+    @Override public <T> T[] toArray(T[] array) {
+      return standardToArray(array);
+    }
+
+    @Override public String toString() {
+      return standardToString();
+    }
+
+    @Override public boolean addAll(
+        int index, Collection<? extends T> elements) {
+      return standardAddAll(index, elements);
+    }
+
+    @Override public boolean equals(Object object) {
+      return standardEquals(object);
+    }
+
+    @Override public int hashCode() {
+      return standardHashCode();
+    }
+
+    @Override public int indexOf(Object element) {
+      return standardIndexOf(element);
+    }
+
+    @Override public int lastIndexOf(Object element) {
+      return standardLastIndexOf(element);
+    }
+
+    @Override public Iterator<T> iterator() {
+      return listIterator();
+    }
+
+    @Override public ListIterator<T> listIterator() {
+      return listIterator(0);
+    }
+
+    @Override public ListIterator<T> listIterator(int index) {
+      return standardListIterator(index);
+    }
+
+    @Override public List<T> subList(int fromIndex, int toIndex) {
+      return standardSubList(fromIndex, toIndex);
+    }
+  }
+  
+  private static final List<String> EMPTY_LIST =
+      Collections.<String>emptyList();
+
+  private List<String> forward;
+
+  public static Test suite(){
+    TestSuite suite = new TestSuite();
+    
+    suite.addTestSuite(ForwardingListTest.class);
+    suite.addTest(ListTestSuiteBuilder.using(new TestStringListGenerator() {
+
+      @Override protected List<String> create(String[] elements) {
+        return new StandardImplForwardingList<String>(
+            Lists.newArrayList(elements));
+      }
+    }).named("ForwardingList[ArrayList] with standard implementations")
+        .withFeatures(CollectionSize.ANY, CollectionFeature.ALLOWS_NULL_VALUES,
+            ListFeature.GENERAL_PURPOSE).createTestSuite());
+    suite.addTest(ListTestSuiteBuilder.using(new TestStringListGenerator() {
+
+      @Override protected List<String> create(String[] elements) {
+        return new StandardImplForwardingList<String>(
+            ImmutableList.copyOf(elements));
+      }
+    }).named("ForwardingList[ImmutableList] with standard implementations")
+        .withFeatures(CollectionSize.ANY, CollectionFeature.ALLOWS_NULL_QUERIES)
+        .createTestSuite());
+    
+    return suite;
+  }
+  
+  @Override public void setUp() throws Exception {
+    super.setUp();
+    /*
+     * Class parameters must be raw, so we can't create a proxy with generic
+     * type arguments. The created proxy only records calls and returns null, so
+     * the type is irrelevant at runtime.
+     */
+    @SuppressWarnings("unchecked")
+    final List<String> list = createProxyInstance(List.class);
+    forward = new ForwardingList<String>() {
+      @Override protected List<String> delegate() {
+        return list;
+      }
+    };
+  }
+
+  public void testAdd_T() {
+    forward.add("asdf");
+    assertEquals("[add(Object)]", getCalls());
+  }
+
+  public void testAdd_int_T() {
+    forward.add(0, "asdf");
+    assertEquals("[add(int,Object)]", getCalls());
+  }
+
+  public void testAddAll_Collection() {
+    forward.addAll(EMPTY_LIST);
+    assertEquals("[addAll(Collection)]", getCalls());
+  }
+
+  public void testAddAll_int_Collection() {
+    forward.addAll(0, Collections.singleton("asdf"));
+    assertEquals("[addAll(int,Collection)]", getCalls());
+  }
+
+  public void testClear() {
+    forward.clear();
+    assertEquals("[clear]", getCalls());
+  }
+
+  public void testContains_Object() {
+    forward.contains(null);
+    assertEquals("[contains(Object)]", getCalls());
+  }
+
+  public void testContainsAll_Collection() {
+    forward.containsAll(EMPTY_LIST);
+    assertEquals("[containsAll(Collection)]", getCalls());
+  }
+
+  public void testGet_int() {
+    forward.get(0);
+    assertEquals("[get(int)]", getCalls());
+  }
+
+  public void testIndexOf_Object() {
+    forward.indexOf(null);
+    assertEquals("[indexOf(Object)]", getCalls());
+  }
+
+  public void testIsEmpty() {
+    forward.isEmpty();
+    assertEquals("[isEmpty]", getCalls());
+  }
+
+  public void testIterator() {
+    forward.iterator();
+    assertEquals("[iterator]", getCalls());
+  }
+
+  public void testLastIndexOf_Object() {
+    forward.lastIndexOf("asdf");
+    assertEquals("[lastIndexOf(Object)]", getCalls());
+  }
+
+  public void testListIterator() {
+    forward.listIterator();
+    assertEquals("[listIterator]", getCalls());
+  }
+
+  public void testListIterator_int() {
+    forward.listIterator(0);
+    assertEquals("[listIterator(int)]", getCalls());
+  }
+
+  public void testRemove_int() {
+    forward.remove(0);
+    assertEquals("[remove(int)]", getCalls());
+  }
+
+  public void testRemove_Object() {
+    forward.remove(null);
+    assertEquals("[remove(Object)]", getCalls());
+  }
+
+  public void testRemoveAll_Collection() {
+    forward.removeAll(EMPTY_LIST);
+    assertEquals("[removeAll(Collection)]", getCalls());
+  }
+
+  public void testRetainAll_Collection() {
+    forward.retainAll(EMPTY_LIST);
+    assertEquals("[retainAll(Collection)]", getCalls());
+  }
+
+  public void testSet_int_T() {
+    forward.set(0, "asdf");
+    assertEquals("[set(int,Object)]", getCalls());
+  }
+
+  public void testSize() {
+    forward.size();
+    assertEquals("[size]", getCalls());
+  }
+
+  public void testSubList_int_int() {
+    forward.subList(0, 1);
+    assertEquals("[subList(int,int)]", getCalls());
+  }
+
+  public void testToArray() {
+    forward.toArray();
+    assertEquals("[toArray]", getCalls());
+  }
+
+  public void testToArray_TArray() {
+    forward.toArray(new String[0]);
+    assertEquals("[toArray(Object[])]", getCalls());
+  }
+
+  public void testEquals_Object() {
+    forward.equals("asdf");
+    assertEquals("[equals(Object)]", getCalls());
+  }
+
+  public void testHashCode() {
+    forward.hashCode();
+    assertEquals("[hashCode]", getCalls());
+  }
+
+  public void testRandomAccess() {
+    assertFalse(forward instanceof RandomAccess);
+  }
+
+  public void testToString() {
+    forward.toString();
+    assertEquals("[toString]", getCalls());
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/ForwardingMapTest.java b/guava-tests/test/com/google/common/collect/ForwardingMapTest.java
new file mode 100644
index 0000000..1f92e90
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/ForwardingMapTest.java
@@ -0,0 +1,350 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+import static org.easymock.EasyMock.anyObject;
+import static org.easymock.EasyMock.createMock;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.expectLastCall;
+import static org.easymock.EasyMock.replay;
+import static org.easymock.EasyMock.verify;
+
+import com.google.common.collect.testing.MapTestSuiteBuilder;
+import com.google.common.collect.testing.TestStringMapGenerator;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.MapFeature;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+/**
+ * Unit test for {@link ForwardingMap}.
+ *
+ * @author Hayward Chan
+ * @author Louis Wasserman
+ */
+public class ForwardingMapTest extends ForwardingTestCase {
+  static class StandardImplForwardingMap<K, V> extends ForwardingMap<K, V> {
+    private final Map<K, V> backingMap;
+
+    StandardImplForwardingMap(Map<K, V> backingMap) {
+      this.backingMap = backingMap;
+    }
+
+    @Override protected Map<K, V> delegate() {
+      return backingMap;
+    }
+
+    @Override public boolean containsKey(Object key) {
+      return standardContainsKey(key);
+    }
+
+    @Override public boolean containsValue(Object value) {
+      return standardContainsValue(value);
+    }
+
+    @Override public void putAll(Map<? extends K, ? extends V> map) {
+      standardPutAll(map);
+    }
+
+    @Override public V remove(Object object) {
+      return standardRemove(object);
+    }
+
+    @Override public boolean equals(Object object) {
+      return standardEquals(object);
+    }
+
+    @Override public int hashCode() {
+      return standardHashCode();
+    }
+
+    @Override public Set<K> keySet() {
+      return new StandardKeySet();
+    }
+
+    @Override public Collection<V> values() {
+      return new StandardValues();
+    }
+
+    @Override public String toString() {
+      return standardToString();
+    }
+
+    @Override public Set<Entry<K, V>> entrySet() {
+      return new StandardEntrySet() {
+        @Override
+        public Iterator<Entry<K, V>> iterator() {
+          return delegate()
+              .entrySet()
+              .iterator();
+        }
+      };
+    }
+
+    @Override public void clear() {
+      standardClear();
+    }
+
+    @Override public boolean isEmpty() {
+      return standardIsEmpty();
+    }
+  }
+
+  Map<String, Boolean> forward;
+
+  public static Test suite() {
+    TestSuite suite = new TestSuite();
+
+    suite.addTestSuite(ForwardingMapTest.class);
+    suite.addTest(MapTestSuiteBuilder.using(new TestStringMapGenerator() {
+
+      @Override protected Map<String, String> create(
+          Entry<String, String>[] entries) {
+        Map<String, String> map = Maps.newLinkedHashMap();
+        for (Entry<String, String> entry : entries) {
+          map.put(entry.getKey(), entry.getValue());
+        }
+        return new StandardImplForwardingMap<String, String>(map);
+      }
+
+    }).named("ForwardingMap[LinkedHashMap] with standard implementations")
+        .withFeatures(CollectionSize.ANY, MapFeature.ALLOWS_NULL_VALUES,
+            MapFeature.ALLOWS_NULL_KEYS, MapFeature.GENERAL_PURPOSE)
+        .createTestSuite());
+    suite.addTest(MapTestSuiteBuilder.using(new TestStringMapGenerator() {
+
+      @Override protected Map<String, String> create(
+          Entry<String, String>[] entries) {
+        ImmutableMap.Builder<String, String> builder = ImmutableMap.builder();
+        for (Entry<String, String> entry : entries) {
+          builder.put(entry.getKey(), entry.getValue());
+        }
+        return new StandardImplForwardingMap<String, String>(builder.build());
+      }
+
+    }).named("ForwardingMap[ImmutableMap] with standard implementations")
+        .withFeatures(
+            CollectionSize.ANY, MapFeature.REJECTS_DUPLICATES_AT_CREATION,
+            MapFeature.ALLOWS_NULL_QUERIES)
+        .createTestSuite());
+
+    return suite;
+  }
+
+  @Override public void setUp() throws Exception {
+    super.setUp();
+    /*
+     * Class parameters must be raw, so we can't create a proxy with generic
+     * type arguments. The created proxy only records calls and returns null, so
+     * the type is irrelevant at runtime.
+     */
+    @SuppressWarnings("unchecked")
+    final Map<String, Boolean> map = createProxyInstance(Map.class);
+    forward = new ForwardingMap<String, Boolean>() {
+      @Override protected Map<String, Boolean> delegate() {
+        return map;
+      }
+    };
+  }
+
+  public void testSize() {
+    forward().size();
+    assertEquals("[size]", getCalls());
+  }
+
+  public void testIsEmpty() {
+    forward().isEmpty();
+    assertEquals("[isEmpty]", getCalls());
+  }
+
+  public void testRemove() {
+    forward().remove(null);
+    assertEquals("[remove(Object)]", getCalls());
+  }
+
+  public void testClear() {
+    forward().clear();
+    assertEquals("[clear]", getCalls());
+  }
+
+  public void testContainsKey() {
+    forward().containsKey("asdf");
+    assertEquals("[containsKey(Object)]", getCalls());
+  }
+
+  public void testContainsValue() {
+    forward().containsValue(false);
+    assertEquals("[containsValue(Object)]", getCalls());
+  }
+
+  public void testGet_Object() {
+    forward().get("asdf");
+    assertEquals("[get(Object)]", getCalls());
+  }
+
+  public void testPut_Key_Value() {
+    forward().put("key", false);
+    assertEquals("[put(Object,Object)]", getCalls());
+  }
+
+  public void testPutAll_Map() {
+    forward().putAll(new HashMap<String, Boolean>());
+    assertEquals("[putAll(Map)]", getCalls());
+  }
+
+  public void testKeySet() {
+    forward().keySet();
+    assertEquals("[keySet]", getCalls());
+  }
+
+  public void testValues() {
+    forward().values();
+    assertEquals("[values]", getCalls());
+  }
+
+  public void testEntrySet() {
+    forward().entrySet();
+    assertEquals("[entrySet]", getCalls());
+  }
+
+  public void testToString() {
+    forward().toString();
+    assertEquals("[toString]", getCalls());
+  }
+
+  public void testEquals_Object() {
+    forward().equals("asdf");
+    assertEquals("[equals(Object)]", getCalls());
+  }
+
+  public void testHashCode() {
+    forward().hashCode();
+    assertEquals("[hashCode]", getCalls());
+  }
+  
+  public void testStandardEntrySet() throws InvocationTargetException {
+    @SuppressWarnings("unchecked")
+    final Map<String, Boolean> map = createMock(Map.class);
+    @SuppressWarnings("unchecked")
+    final Set<Map.Entry<String, Boolean>> entrySet = createMock(Set.class);
+    expect(map.containsKey(anyObject())).andReturn(false).anyTimes();
+    expect(map.get(anyObject())).andReturn(null).anyTimes();
+    expect(map.isEmpty()).andReturn(true).anyTimes();
+    expect(map.remove(anyObject())).andReturn(null).anyTimes();
+    expect(map.size()).andReturn(0).anyTimes();
+    expect(entrySet.iterator())
+        .andReturn(Iterators.<Entry<String, Boolean>>emptyIterator())
+        .anyTimes();
+    map.clear();
+    expectLastCall().anyTimes();
+
+    replay(map, entrySet);
+
+    Map<String, Boolean> forward = new ForwardingMap<String, Boolean>() {
+      @Override protected Map<String, Boolean> delegate() {
+        return map;
+      }
+
+      @Override public Set<Entry<String, Boolean>> entrySet() {
+        return new StandardEntrySet() {
+          @Override
+          public Iterator<Entry<String, Boolean>> iterator() {
+            return entrySet.iterator();
+          }
+        };
+      }
+    };
+    callAllPublicMethods(Set.class, forward.entrySet());
+
+    verify(map, entrySet);
+  }
+  
+  public void testStandardKeySet() throws InvocationTargetException {
+    @SuppressWarnings("unchecked")
+    Set<Entry<String, Boolean>> entrySet = createMock(Set.class);
+    expect(entrySet.iterator()).andReturn(
+        Iterators.<Entry<String, Boolean>>emptyIterator()).anyTimes();
+
+    @SuppressWarnings("unchecked")
+    final Map<String, Boolean> map = createMock(Map.class);
+    expect(map.containsKey(anyObject())).andReturn(false).anyTimes();
+    expect(map.isEmpty()).andReturn(true).anyTimes();
+    expect(map.remove(anyObject())).andReturn(null).anyTimes();
+    expect(map.size()).andReturn(0).anyTimes();
+    expect(map.entrySet()).andReturn(entrySet).anyTimes();
+    map.clear();
+    expectLastCall().anyTimes();
+
+    replay(entrySet, map);
+
+    Map<String, Boolean> forward = new ForwardingMap<String, Boolean>() {
+      @Override protected Map<String, Boolean> delegate() {
+        return map;
+      }
+
+      @Override public Set<String> keySet() {
+        return new StandardKeySet();
+      }
+    };
+    callAllPublicMethods(Set.class, forward.keySet());
+
+    verify(entrySet, map);
+  }
+  
+  public void testStandardValues() throws InvocationTargetException {
+    @SuppressWarnings("unchecked")
+    Set<Entry<String, Boolean>> entrySet = createMock(Set.class);
+    expect(entrySet.iterator()).andReturn(
+        Iterators.<Entry<String, Boolean>>emptyIterator()).anyTimes();
+
+    @SuppressWarnings("unchecked")
+    final Map<String, Boolean> map = createMock(Map.class);
+    expect(map.containsValue(anyObject())).andReturn(false).anyTimes();
+    expect(map.isEmpty()).andReturn(true).anyTimes();
+    expect(map.size()).andReturn(0).anyTimes();
+    expect(map.entrySet()).andReturn(entrySet).anyTimes();
+    map.clear();
+    expectLastCall().anyTimes();
+
+    replay(entrySet, map);
+
+    Map<String, Boolean> forward = new ForwardingMap<String, Boolean>() {
+      @Override protected Map<String, Boolean> delegate() {
+        return map;
+      }
+
+      @Override public Collection<Boolean> values() {
+        return new StandardValues();
+      }
+    };
+    callAllPublicMethods(Collection.class, forward.values());
+
+    verify(entrySet, map);
+  }
+
+  Map<String, Boolean> forward() {
+    return forward;
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/ForwardingMultimapTest.java b/guava-tests/test/com/google/common/collect/ForwardingMultimapTest.java
new file mode 100644
index 0000000..a4dc2a5
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/ForwardingMultimapTest.java
@@ -0,0 +1,152 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import java.util.Collections;
+
+/**
+ * Unit test for {@link ForwardingMultimap}.
+ *
+ * @author Hayward Chan
+ */
+public class ForwardingMultimapTest extends ForwardingTestCase {
+
+  // Package-private so subclasses can access this variable.
+  Multimap<String, Boolean> forward;
+
+  @Override public void setUp() throws Exception {
+    super.setUp();
+    /*
+     * Class parameters must be raw, so we can't create a proxy with generic
+     * type arguments. The created proxy only records calls and returns null, so
+     * the type is irrelevant at runtime.
+     */
+    @SuppressWarnings("unchecked")
+    final Multimap<String, Boolean> multimap =
+        createProxyInstance(Multimap.class);
+    forward = new ForwardingMultimap<String, Boolean>() {
+      @Override protected Multimap<String, Boolean> delegate() {
+        return multimap;
+      }
+    };
+  }
+
+  public void testSize() {
+    forward.size();
+    assertEquals("[size]", getCalls());
+  }
+
+  public void testIsEmpty() {
+    forward.isEmpty();
+    assertEquals("[isEmpty]", getCalls());
+  }
+
+  public void testContainsKey_Object() {
+    forward.containsKey("asdf");
+    assertEquals("[containsKey(Object)]", getCalls());
+  }
+
+  public void testContainsValue_Object() {
+    forward.containsValue("asdf");
+    assertEquals("[containsValue(Object)]", getCalls());
+  }
+
+  public void testContainsEntry_Object_Object() {
+    forward.containsEntry("asdf", false);
+    assertEquals("[containsEntry(Object,Object)]", getCalls());
+  }
+
+  public void testPut_Key_Value() {
+    forward.put("asdf", true);
+    assertEquals("[put(Object,Object)]", getCalls());
+  }
+
+  public void testRemove_Key_Value() {
+    forward.remove("asdf", false);
+    assertEquals("[remove(Object,Object)]", getCalls());
+  }
+
+  public void testPutAll_Key_Iterable() {
+    forward.remove("asfd", Collections.<Boolean>emptyList());
+    assertEquals("[remove(Object,Object)]", getCalls());
+  }
+
+  public void testPutAll_Multimap() {
+    forward.putAll(ArrayListMultimap.<String, Boolean>create());
+    assertEquals("[putAll(Multimap)]", getCalls());
+  }
+
+  public void testReplaceValues_Key_Iterable() {
+    forward.replaceValues("key", Collections.<Boolean>emptyList());
+    assertEquals("[replaceValues(Object,Iterable)]", getCalls());
+  }
+
+  public void testRemoveAll_Object() {
+    forward.removeAll("key");
+    assertEquals("[removeAll(Object)]", getCalls());
+  }
+
+  public void testClear() {
+    forward.clear();
+    assertEquals("[clear]", getCalls());
+  }
+
+  public void testGet_Key() {
+    forward.get(null);
+    assertEquals("[get(Object)]", getCalls());
+  }
+
+  public void testKeySet() {
+    forward.keySet();
+    assertEquals("[keySet]", getCalls());
+  }
+
+  public void testKeys() {
+    forward.keys();
+    assertEquals("[keys]", getCalls());
+  }
+
+  public void testValues() {
+    forward.values();
+    assertEquals("[values]", getCalls());
+  }
+
+  public void testEntries() {
+    forward.entries();
+    assertEquals("[entries]", getCalls());
+  }
+
+  public void testAsMap() {
+    forward.asMap();
+    assertEquals("[asMap]", getCalls());
+  }
+
+  public void testEquals() {
+    forward.equals(null);
+    assertEquals("[equals(Object)]", getCalls());
+  }
+
+  public void testHashCode() {
+    forward.hashCode();
+    assertEquals("[hashCode]", getCalls());
+  }
+
+  public void testToString() {
+    forward.toString();
+    assertEquals("[toString]", getCalls());
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/ForwardingMultisetTest.java b/guava-tests/test/com/google/common/collect/ForwardingMultisetTest.java
new file mode 100644
index 0000000..a7d4d8c
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/ForwardingMultisetTest.java
@@ -0,0 +1,401 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.collect.testing.SetTestSuiteBuilder;
+import com.google.common.collect.testing.TestStringSetGenerator;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.google.MultisetTestSuiteBuilder;
+import com.google.common.collect.testing.google.TestStringMultisetGenerator;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.Set;
+
+/**
+ * Tests for {@link ForwardingMultiset}.
+ *
+ * @author Hayward Chan
+ * @author Louis Wasserman
+ */
+public class ForwardingMultisetTest extends ForwardingTestCase {
+
+  static final class StandardImplForwardingMultiset<T>
+      extends ForwardingMultiset<T> {
+    private final Multiset<T> backingCollection;
+
+    StandardImplForwardingMultiset(Multiset<T> backingMultiset) {
+      this.backingCollection = backingMultiset;
+    }
+
+    @Override protected Multiset<T> delegate() {
+      return backingCollection;
+    }
+
+    @Override public boolean addAll(Collection<? extends T> collection) {
+      return standardAddAll(collection);
+    }
+
+    @Override public boolean add(T element) {
+      return standardAdd(element);
+    }
+
+    @Override public void clear() {
+      standardClear();
+    }
+
+    @Override public int count(Object element) {
+      return standardCount(element);
+    }
+
+    @Override public boolean contains(Object object) {
+      return standardContains(object);
+    }
+
+    @Override public boolean containsAll(Collection<?> collection) {
+      return standardContainsAll(collection);
+    }
+
+    @Override public boolean remove(Object object) {
+      return standardRemove(object);
+    }
+
+    @Override public boolean removeAll(Collection<?> collection) {
+      return standardRemoveAll(collection);
+    }
+
+    @Override public boolean retainAll(Collection<?> collection) {
+      return standardRetainAll(collection);
+    }
+
+    @Override public Object[] toArray() {
+      return standardToArray();
+    }
+
+    @Override public <T> T[] toArray(T[] array) {
+      return standardToArray(array);
+    }
+
+    @Override public String toString() {
+      return standardToString();
+    }
+
+    @Override public boolean equals(Object object) {
+      return standardEquals(object);
+    }
+
+    @Override public int hashCode() {
+      return standardHashCode();
+    }
+
+    @Override public boolean setCount(T element, int oldCount, int newCount) {
+      return standardSetCount(element, oldCount, newCount);
+    }
+
+    @Override public int setCount(T element, int count) {
+      return standardSetCount(element, count);
+    }
+
+    @Override public Set<T> elementSet() {
+      return new StandardElementSet();
+    }
+
+    @Override public Iterator<T> iterator() {
+      return standardIterator();
+    }
+
+    @Override public boolean isEmpty() {
+      return standardIsEmpty();
+    }
+
+    @Override public int size() {
+      return standardSize();
+    }
+  }
+
+  private static final Collection<String> EMPTY_COLLECTION =
+      Collections.emptyList();
+
+  protected Multiset<String> forward;
+
+  public static Test suite() {
+    TestSuite suite = new TestSuite();
+
+    suite.addTestSuite(ForwardingMultisetTest.class);
+    suite.addTest(
+        MultisetTestSuiteBuilder.using(new TestStringMultisetGenerator() {
+
+          @Override protected Multiset<String> create(String[] elements) {
+            return new StandardImplForwardingMultiset<String>(
+                LinkedHashMultiset.create(Arrays.asList(elements)));
+          }
+        }).named("ForwardingMultiset[LinkedHashMultiset] with standard "
+            + "implementations").withFeatures(CollectionSize.ANY,
+            CollectionFeature.ALLOWS_NULL_VALUES,
+            CollectionFeature.GENERAL_PURPOSE).createTestSuite());
+    suite.addTest(
+        MultisetTestSuiteBuilder.using(new TestStringMultisetGenerator() {
+
+          @Override protected Multiset<String> create(String[] elements) {
+            return new StandardImplForwardingMultiset<String>(
+                ImmutableMultiset.copyOf(elements));
+          }
+        }).named("ForwardingMultiset[ImmutableMultiset] with standard "
+            + "implementations")
+            .withFeatures(CollectionSize.ANY,
+                CollectionFeature.ALLOWS_NULL_QUERIES)
+            .createTestSuite());
+    suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+
+      /**
+       * Returns a Multiset that throws an exception on any attempt to use a
+       * method not specifically authorized by the elementSet() or hashCode()
+       * docs.
+       */
+      @Override protected Set<String> create(String[] elements) {
+        final Multiset<String> inner =
+            LinkedHashMultiset.create(Arrays.asList(elements));
+        return new ForwardingMultiset<String>() {
+          @Override protected Multiset<String> delegate() {
+            return inner;
+          }
+
+          @Override public Set<String> elementSet() {
+            return new StandardElementSet();
+          }
+          
+          @Override public int add(String element, int occurrences) {
+            throw new UnsupportedOperationException();
+          }
+          @Override public Set<Entry<String>> entrySet() {
+            final Set<Entry<String>> backingSet = super.entrySet();
+            return new ForwardingSet<Entry<String>>() {
+              @Override protected Set<Entry<String>> delegate() {
+                return backingSet;
+              }
+              @Override public boolean add(Entry<String> element) {
+                throw new UnsupportedOperationException();
+              }
+              @Override public boolean addAll(
+                  Collection<? extends Entry<String>> collection) {
+                throw new UnsupportedOperationException();
+              }
+              @Override public void clear() {
+                throw new UnsupportedOperationException();
+              }
+              @Override public boolean contains(Object object) {
+                throw new UnsupportedOperationException();
+              }
+              @Override public boolean containsAll(Collection<?> collection) {
+                throw new UnsupportedOperationException();
+              }
+              @Override public boolean isEmpty() {
+                throw new UnsupportedOperationException();
+              }
+              @Override public boolean remove(Object object) {
+                throw new UnsupportedOperationException();
+              }
+              @Override public boolean removeAll(Collection<?> collection) {
+                throw new UnsupportedOperationException();
+              }
+              @Override public boolean retainAll(Collection<?> collection) {
+                throw new UnsupportedOperationException();
+              }
+            };
+          }
+          @Override public boolean equals(Object object) {
+            throw new UnsupportedOperationException();
+          }
+          @Override public boolean remove(Object element) {
+            throw new UnsupportedOperationException();
+          }
+          @Override public boolean setCount(
+              String element, int oldCount, int newCount) {
+            throw new UnsupportedOperationException();
+          }
+          @Override public int setCount(String element, int count) {
+            throw new UnsupportedOperationException();
+          }
+          @Override public boolean add(String element) {
+            throw new UnsupportedOperationException();
+          }
+          @Override public boolean addAll(
+              Collection<? extends String> collection) {
+            throw new UnsupportedOperationException();
+          }
+          @Override public Iterator<String> iterator() {
+            throw new UnsupportedOperationException();
+          }
+          @Override public boolean removeAll(Collection<?> collection) {
+            throw new UnsupportedOperationException();
+          }
+          @Override public boolean retainAll(Collection<?> collection) {
+            throw new UnsupportedOperationException();
+          }
+          @Override public int size() {
+            throw new UnsupportedOperationException();
+          }
+        }.elementSet();
+      }
+    }).named("standardElementSet tripwire").withFeatures(CollectionSize.ANY,
+        CollectionFeature.ALLOWS_NULL_VALUES,
+        CollectionFeature.REMOVE_OPERATIONS).createTestSuite());
+
+    return suite;
+  }
+
+  @Override public void setUp() throws Exception {
+    super.setUp();
+    /*
+     * Class parameters must be raw, so we can't create a proxy with generic
+     * type arguments. The created proxy only records calls and returns null, so
+     * the type is irrelevant at runtime.
+     */
+    @SuppressWarnings("unchecked")
+    final Multiset<String> multiset = createProxyInstance(Multiset.class);
+    forward = new ForwardingMultiset<String>() {
+      @Override protected Multiset<String> delegate() {
+        return multiset;
+      }
+    };
+  }
+
+  public void testAdd_T() {
+    forward().add("asdf");
+    assertEquals("[add(Object)]", getCalls());
+  }
+
+  public void testAddAll_Collection() {
+    forward().addAll(EMPTY_COLLECTION);
+    assertEquals("[addAll(Collection)]", getCalls());
+  }
+
+  public void testClear() {
+    forward().clear();
+    assertEquals("[clear]", getCalls());
+  }
+
+  public void testContains_Object() {
+    forward().contains(null);
+    assertEquals("[contains(Object)]", getCalls());
+  }
+
+  public void testContainsAll_Collection() {
+    forward().containsAll(EMPTY_COLLECTION);
+    assertEquals("[containsAll(Collection)]", getCalls());
+  }
+
+  public void testIsEmpty() {
+    forward().isEmpty();
+    assertEquals("[isEmpty]", getCalls());
+  }
+
+  public void testIterator() {
+    forward().iterator();
+    assertEquals("[iterator]", getCalls());
+  }
+
+  public void testRemove_Object() {
+    forward().remove(null);
+    assertEquals("[remove(Object)]", getCalls());
+  }
+
+  public void testRemoveAll_Collection() {
+    forward().removeAll(EMPTY_COLLECTION);
+    assertEquals("[removeAll(Collection)]", getCalls());
+  }
+
+  public void testRetainAll_Collection() {
+    forward().retainAll(EMPTY_COLLECTION);
+    assertEquals("[retainAll(Collection)]", getCalls());
+  }
+
+  public void testSize() {
+    forward().size();
+    assertEquals("[size]", getCalls());
+  }
+
+  public void testToArray() {
+    forward().toArray();
+    assertEquals("[toArray]", getCalls());
+  }
+
+  public void testToArray_TArray() {
+    forward().toArray(new String[0]);
+    assertEquals("[toArray(Object[])]", getCalls());
+  }
+
+  public void testToString() {
+    forward().toString();
+    assertEquals("[toString]", getCalls());
+  }
+
+  public void testEquals_Object() {
+    forward().equals("asdf");
+    assertEquals("[equals(Object)]", getCalls());
+  }
+
+  public void testHashCode() {
+    forward().hashCode();
+    assertEquals("[hashCode]", getCalls());
+  }
+
+  public void testCount_Object() {
+    forward().count(null);
+    assertEquals("[count(Object)]", getCalls());
+  }
+
+  public void testAdd_Object_int() {
+    forward().add("asd", 23);
+    assertEquals("[add(Object,int)]", getCalls());
+  }
+
+  public void testRemove_Object_int() {
+    forward().remove("asd", 23);
+    assertEquals("[remove(Object,int)]", getCalls());
+  }
+
+  public void testSetCount_Object_int() {
+    forward().setCount("asdf", 233);
+    assertEquals("[setCount(Object,int)]", getCalls());
+  }
+
+  public void testSetCount_Object_oldCount_newCount() {
+    forward().setCount("asdf", 4552, 1233);
+    assertEquals("[setCount(Object,int,int)]", getCalls());
+  }
+
+  public void testElementSet() {
+    forward().elementSet();
+    assertEquals("[elementSet]", getCalls());
+  }
+
+  public void testEntrySet() {
+    forward().entrySet();
+    assertEquals("[entrySet]", getCalls());
+  }
+
+  protected Multiset<String> forward() {
+    return forward;
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/ForwardingObjectTest.java b/guava-tests/test/com/google/common/collect/ForwardingObjectTest.java
new file mode 100644
index 0000000..cddb2ba
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/ForwardingObjectTest.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import junit.framework.TestCase;
+
+import java.util.Set;
+
+/**
+ * Tests for {@code ForwardingObject}.
+ *
+ * @author Mike Bostock
+ */
+public class ForwardingObjectTest extends TestCase {
+
+  public void testEqualsReflexive() {
+    final Object delegate = new Object();
+    ForwardingObject forward = new ForwardingObject() {
+      @Override protected Object delegate() {
+        return delegate;
+      }
+    };
+    assertTrue(forward.equals(forward));
+  }
+
+  public void testEqualsSymmetric() {
+    final Set<String> delegate = Sets.newHashSet("foo");
+    ForwardingObject forward = new ForwardingObject() {
+      @Override protected Object delegate() {
+        return delegate;
+      }
+    };
+    assertEquals(forward.equals(delegate), delegate.equals(forward));
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/ForwardingQueueTest.java b/guava-tests/test/com/google/common/collect/ForwardingQueueTest.java
new file mode 100644
index 0000000..c8f0bfe
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/ForwardingQueueTest.java
@@ -0,0 +1,239 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static java.util.Arrays.asList;
+
+import com.google.common.collect.testing.QueueTestSuiteBuilder;
+import com.google.common.collect.testing.TestStringQueueGenerator;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Queue;
+
+/**
+ * Tests for {@code ForwardingQueue}.
+ *
+ * @author Robert Konigsberg
+ * @author Louis Wasserman
+ */
+public class ForwardingQueueTest extends ForwardingTestCase {
+
+  static final class StandardImplForwardingQueue<T>
+      extends ForwardingQueue<T> {
+    private final Queue<T> backingQueue;
+
+    StandardImplForwardingQueue(Queue<T> backingQueue) {
+      this.backingQueue = backingQueue;
+    }
+
+    @Override protected Queue<T> delegate() {
+      return backingQueue;
+    }
+
+    @Override public boolean addAll(Collection<? extends T> collection) {
+      return standardAddAll(collection);
+    }
+
+    @Override public void clear() {
+      standardClear();
+    }
+
+    @Override public boolean contains(Object object) {
+      return standardContains(object);
+    }
+
+    @Override public boolean containsAll(Collection<?> collection) {
+      return standardContainsAll(collection);
+    }
+
+    @Override public boolean remove(Object object) {
+      return standardRemove(object);
+    }
+
+    @Override public boolean removeAll(Collection<?> collection) {
+      return standardRemoveAll(collection);
+    }
+
+    @Override public boolean retainAll(Collection<?> collection) {
+      return standardRetainAll(collection);
+    }
+
+    @Override public Object[] toArray() {
+      return standardToArray();
+    }
+
+    @Override public <T> T[] toArray(T[] array) {
+      return standardToArray(array);
+    }
+
+    @Override public String toString() {
+      return standardToString();
+    }
+
+    @Override public boolean offer(T o) {
+      return standardOffer(o);
+    }
+
+    @Override public T peek() {
+      return standardPeek();
+    }
+
+    @Override public T poll() {
+      return standardPoll();
+    }
+  }
+  
+  private Queue<String> forward;
+  private Queue<String> queue;
+  
+  public static Test suite(){
+    TestSuite suite = new TestSuite();
+    
+    suite.addTestSuite(ForwardingQueueTest.class);
+    suite.addTest(
+        QueueTestSuiteBuilder.using(new TestStringQueueGenerator() {
+
+          @Override protected Queue<String> create(String[] elements) {
+            return new StandardImplForwardingQueue<String>(
+                Lists.newLinkedList(asList(elements)));
+          }
+        }).named(
+            "ForwardingQueue[LinkedList] with standard implementations")
+            .withFeatures(CollectionSize.ANY,
+                CollectionFeature.ALLOWS_NULL_VALUES,
+                CollectionFeature.GENERAL_PURPOSE).createTestSuite());
+    
+    return suite;
+  }
+  
+  /*
+   * Class parameters must be raw, so we can't create a proxy with generic
+   * type arguments. The created proxy only records calls and returns null, so
+   * the type is irrelevant at runtime.
+   */
+  @SuppressWarnings("unchecked")
+  @Override protected void setUp() throws Exception {
+    super.setUp();
+    queue = createProxyInstance(Queue.class);
+    forward = new ForwardingQueue<String>() {
+      @Override protected Queue<String> delegate() {
+        return queue;
+      }
+    };
+  }
+
+  public void testAdd_T() {
+    forward.add("asdf");
+    assertEquals("[add(Object)]", getCalls());
+  }
+
+  public void testAddAll_Collection() {
+    forward.addAll(Collections.singleton("asdf"));
+    assertEquals("[addAll(Collection)]", getCalls());
+  }
+
+  public void testClear() {
+    forward.clear();
+    assertEquals("[clear]", getCalls());
+  }
+
+  public void testContains_T() {
+    forward.contains("asdf");
+    assertEquals("[contains(Object)]", getCalls());
+  }
+
+  public void testContainsAll_Collection() {
+    forward.containsAll(Collections.singleton("asdf"));
+    assertEquals("[containsAll(Collection)]", getCalls());
+  }
+
+  public void testElement() {
+    forward.element();
+    assertEquals("[element]", getCalls());
+  }
+
+  public void testIterator() {
+    forward.iterator();
+    assertEquals("[iterator]", getCalls());
+  }
+
+  public void testIsEmpty() {
+    forward.isEmpty();
+    assertEquals("[isEmpty]", getCalls());
+  }
+
+  public void testOffer_T() {
+    forward.offer("asdf");
+    assertEquals("[offer(Object)]", getCalls());
+  }
+
+  public void testPeek() {
+    forward.peek();
+    assertEquals("[peek]", getCalls());
+  }
+
+  public void testPoll() {
+    forward.poll();
+    assertEquals("[poll]", getCalls());
+  }
+
+  public void testRemove() {
+    forward.remove();
+    assertEquals("[remove]", getCalls());
+  }
+
+  public void testRemove_Object() {
+    forward.remove(Object.class);
+    assertEquals("[remove(Object)]", getCalls());
+  }
+
+  public void testRemoveAll_Collection() {
+    forward.removeAll(Collections.singleton("asdf"));
+    assertEquals("[removeAll(Collection)]", getCalls());
+  }
+
+  public void testRetainAll_Collection() {
+    forward.retainAll(Collections.singleton("asdf"));
+    assertEquals("[retainAll(Collection)]", getCalls());
+  }
+
+  public void testSize() {
+    forward.size();
+    assertEquals("[size]", getCalls());
+  }
+
+  public void testToArray() {
+    forward.toArray();
+    assertEquals("[toArray]", getCalls());
+  }
+
+  public void testToArray_TArray() {
+    forward.toArray(new String[0]);
+    assertEquals("[toArray(Object[])]", getCalls());
+  }
+      
+  public void testToString() {
+    forward.toString();
+    assertEquals("[toString]", getCalls());
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/ForwardingSetMultimapTest.java b/guava-tests/test/com/google/common/collect/ForwardingSetMultimapTest.java
new file mode 100644
index 0000000..a55c809
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/ForwardingSetMultimapTest.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+/**
+ * Unit test for {@link ForwardingSetMultimap}.
+ *
+ * @author Kurt Alfred Kluever
+ */
+public class ForwardingSetMultimapTest extends ForwardingMultimapTest {
+
+  @Override public void setUp() throws Exception {
+    super.setUp();
+    /*
+     * Class parameters must be raw, so we can't create a proxy with generic
+     * type arguments. The created proxy only records calls and returns null, so
+     * the type is irrelevant at runtime.
+     */
+    @SuppressWarnings("unchecked")
+    final SetMultimap<String, Boolean> multimap =
+        createProxyInstance(SetMultimap.class);
+    forward = new ForwardingSetMultimap<String, Boolean>() {
+      @Override protected SetMultimap<String, Boolean> delegate() {
+        return multimap;
+      }
+    };
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/ForwardingSetTest.java b/guava-tests/test/com/google/common/collect/ForwardingSetTest.java
new file mode 100644
index 0000000..19484fc
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/ForwardingSetTest.java
@@ -0,0 +1,225 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static java.util.Arrays.asList;
+
+import com.google.common.collect.testing.MinimalSet;
+import com.google.common.collect.testing.SetTestSuiteBuilder;
+import com.google.common.collect.testing.TestStringSetGenerator;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Tests for {@code ForwardingSet}.
+ *
+ * @author Robert Konigsberg
+ * @author Louis Wasserman
+ */
+public class ForwardingSetTest extends ForwardingTestCase {
+  static class StandardImplForwardingSet<T> extends ForwardingSet<T> {
+    private final Set<T> backingSet;
+
+    StandardImplForwardingSet(Set<T> backingSet) {
+      this.backingSet = backingSet;
+    }
+
+    @Override protected Set<T> delegate() {
+      return backingSet;
+    }
+
+    @Override public boolean equals(Object object) {
+      return standardEquals(object);
+    }
+
+    @Override public int hashCode() {
+      return standardHashCode();
+    }
+
+    @Override public boolean addAll(Collection<? extends T> collection) {
+      return standardAddAll(collection);
+    }
+
+    @Override public void clear() {
+      standardClear();
+    }
+
+    @Override public boolean contains(Object object) {
+      return standardContains(object);
+    }
+
+    @Override public boolean containsAll(Collection<?> collection) {
+      return standardContainsAll(collection);
+    }
+
+    @Override public boolean remove(Object object) {
+      return standardRemove(object);
+    }
+
+    @Override public boolean removeAll(Collection<?> collection) {
+      return standardRemoveAll(collection);
+    }
+
+    @Override public boolean retainAll(Collection<?> collection) {
+      return standardRetainAll(collection);
+    }
+
+    @Override public Object[] toArray() {
+      return standardToArray();
+    }
+
+    @Override public <T> T[] toArray(T[] array) {
+      return standardToArray(array);
+    }
+
+    @Override public String toString() {
+      return standardToString();
+    }
+  }
+  
+  private static final List<String> EMPTY_LIST =
+      Collections.<String>emptyList();
+
+  Set<String> forward;
+  
+  public static Test suite(){
+    TestSuite suite = new TestSuite();
+    
+    suite.addTestSuite(ForwardingSetTest.class);
+    suite.addTest(
+        SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+          @Override protected Set<String> create(String[] elements) {
+            return new StandardImplForwardingSet<String>(
+                Sets.newLinkedHashSet(asList(elements)));
+          }
+        }).named(
+            "ForwardingSet[LinkedHashSet] with standard implementations")
+            .withFeatures(CollectionSize.ANY,
+                CollectionFeature.ALLOWS_NULL_VALUES,
+                CollectionFeature.GENERAL_PURPOSE).createTestSuite());
+    suite.addTest(
+        SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+          @Override protected Set<String> create(String[] elements) {
+            return new StandardImplForwardingSet<String>(
+                MinimalSet.of(elements));
+          }
+        }).named(
+            "ForwardingSet[MinimalSet] with standard implementations")
+            .withFeatures(CollectionSize.ANY, 
+                CollectionFeature.ALLOWS_NULL_VALUES).createTestSuite());
+    
+    return suite;
+  }
+  
+  @Override public void setUp() throws Exception {
+    super.setUp();
+    /*
+     * Class parameters must be raw, so we can't create a proxy with generic
+     * type arguments. The created proxy only records calls and returns null, so
+     * the type is irrelevant at runtime.
+     */
+    @SuppressWarnings("unchecked")
+    final Set<String> set = createProxyInstance(Set.class);
+    forward = new ForwardingSet<String>() {
+      @Override protected Set<String> delegate() {
+        return set;
+      }
+    };
+  }
+
+  public void testAdd_T() {
+    forward().add("asdf");
+    assertEquals("[add(Object)]", getCalls());
+  }
+
+  public void testAddAll_Collection() {
+    forward().addAll(EMPTY_LIST);
+    assertEquals("[addAll(Collection)]", getCalls());
+  }
+
+  public void testClear() {
+    forward().clear();
+    assertEquals("[clear]", getCalls());
+  }
+
+  public void testContains_Object() {
+    forward().contains(null);
+    assertEquals("[contains(Object)]", getCalls());
+  }
+
+  public void testContainsAll_Collection() {
+    forward().containsAll(EMPTY_LIST);
+    assertEquals("[containsAll(Collection)]", getCalls());
+  }
+
+  public void testIsEmpty() {
+    forward().isEmpty();
+    assertEquals("[isEmpty]", getCalls());
+  }
+
+  public void testIterator() {
+    forward().iterator();
+    assertEquals("[iterator]", getCalls());
+  }
+
+  public void testRemove_Object() {
+    forward().remove(null);
+    assertEquals("[remove(Object)]", getCalls());
+  }
+
+  public void testRemoveAll_Collection() {
+    forward().removeAll(EMPTY_LIST);
+    assertEquals("[removeAll(Collection)]", getCalls());
+  }
+
+  public void testRetainAll_Collection() {
+    forward().retainAll(EMPTY_LIST);
+    assertEquals("[retainAll(Collection)]", getCalls());
+  }
+
+  public void testSize() {
+    forward().size();
+    assertEquals("[size]", getCalls());
+  }
+
+  public void testToArray() {
+    forward().toArray();
+    assertEquals("[toArray]", getCalls());
+  }
+
+  public void testToArray_TArray() {
+    forward().toArray(new String[0]);
+    assertEquals("[toArray(Object[])]", getCalls());
+  }
+
+  public void testToString() {
+    forward().toString();
+    assertEquals("[toString]", getCalls());
+  }
+
+  Set<String> forward() {
+    return forward;
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/ForwardingSortedMapImplementsMapTest.java b/guava-tests/test/com/google/common/collect/ForwardingSortedMapImplementsMapTest.java
new file mode 100644
index 0000000..f67849c
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/ForwardingSortedMapImplementsMapTest.java
@@ -0,0 +1,141 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.collect.testing.MapInterfaceTest;
+import com.google.common.collect.testing.SortedMapInterfaceTest;
+
+import java.util.SortedMap;
+import java.util.TreeMap;
+
+/**
+ * Tests for {@link ForwardingSortedMap} using {@link MapInterfaceTest}.
+ *
+ * @author George van den Driessche
+ */
+@GwtCompatible
+public class ForwardingSortedMapImplementsMapTest
+    extends SortedMapInterfaceTest<String, Integer> {
+
+  private static class SimpleForwardingSortedMap<K, V>
+      extends ForwardingSortedMap<K, V> {
+    final SortedMap<K, V> delegate;
+    SimpleForwardingSortedMap(SortedMap<K, V> delegate) {
+      this.delegate = delegate;
+    }
+    @Override protected SortedMap<K, V> delegate() {
+      return delegate;
+    }
+  }
+
+  public ForwardingSortedMapImplementsMapTest() {
+    super(true, true, true, true, true);
+  }
+
+  @Override protected SortedMap<String, Integer> makeEmptyMap() {
+    return new SimpleForwardingSortedMap<String, Integer>(
+        new TreeMap<String, Integer>(Ordering.natural().nullsFirst()));
+  }
+
+  @Override protected SortedMap<String, Integer> makePopulatedMap() {
+    final SortedMap<String, Integer> sortedMap = makeEmptyMap();
+    sortedMap.put("one", 1);
+    sortedMap.put("two", 2);
+    sortedMap.put("three", 3);
+    return sortedMap;
+  }
+
+  @Override protected String getKeyNotInPopulatedMap()
+      throws UnsupportedOperationException {
+    return "minus one";
+  }
+
+  @Override protected Integer getValueNotInPopulatedMap()
+      throws UnsupportedOperationException {
+    return -1;
+  }
+
+  @Override public void testContainsKey() {
+    try {
+      super.testContainsKey();
+    } catch (ClassCastException tolerated) {
+    }
+  }
+
+  @Override public void testEntrySetContainsEntryIncompatibleKey() {
+    try {
+      super.testEntrySetContainsEntryIncompatibleKey();
+    } catch (ClassCastException tolerated) {
+    }
+  }
+
+  @Override public void testEntrySetContainsEntryIncompatibleComparableKey() {
+    try {
+      super.testEntrySetContainsEntryIncompatibleComparableKey();
+    } catch (ClassCastException tolerated) {
+    }
+  }
+
+  @Override public void testEntrySetRemoveAllNullFromEmpty() {
+    try {
+      super.testEntrySetRemoveAllNullFromEmpty();
+    } catch (RuntimeException tolerated) {
+      // GWT's TreeMap.entrySet().removeAll(null) doesn't throws NPE.
+    }
+  }
+
+  @Override public void testEntrySetRetainAllNullFromEmpty() {
+    try {
+      super.testEntrySetRetainAllNullFromEmpty();
+    } catch (RuntimeException tolerated) {
+      // GWT's TreeMap.entrySet().retainAll(null) doesn't throws NPE.
+    }
+  }
+
+  @Override public void testKeySetRemoveAllNullFromEmpty() {
+    try {
+      super.testKeySetRemoveAllNullFromEmpty();
+    } catch (RuntimeException tolerated) {
+      // GWT's TreeMap.keySet().removeAll(null) doesn't throws NPE.
+    }
+  }
+
+  @Override public void testKeySetRetainAllNullFromEmpty() {
+    try {
+      super.testKeySetRetainAllNullFromEmpty();
+    } catch (RuntimeException tolerated) {
+      // GWT's TreeMap.keySet().retainAll(null) doesn't throws NPE.
+    }
+  }
+
+  @Override public void testValuesRemoveAllNullFromEmpty() {
+    try {
+      super.testValuesRemoveAllNullFromEmpty();
+    } catch (RuntimeException tolerated) {
+      // GWT's TreeMap.values().removeAll(null) doesn't throws NPE.
+    }
+  }
+
+  @Override public void testValuesRetainAllNullFromEmpty() {
+    try {
+      super.testValuesRemoveAllNullFromEmpty();
+    } catch (RuntimeException tolerated) {
+      // GWT's TreeMap.values().retainAll(null) doesn't throws NPE.
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/ForwardingSortedMapTest.java b/guava-tests/test/com/google/common/collect/ForwardingSortedMapTest.java
new file mode 100644
index 0000000..54947ba
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/ForwardingSortedMapTest.java
@@ -0,0 +1,244 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.collect.testing.MapTestSuiteBuilder;
+import com.google.common.collect.testing.SafeTreeMap;
+import com.google.common.collect.testing.TestStringMapGenerator;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.MapFeature;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.SortedMap;
+
+/**
+ * Tests for {@code ForwardingSortedMap}.
+ *
+ * @author Robert Konigsberg
+ */
+public class ForwardingSortedMapTest extends ForwardingMapTest {
+  static class StandardImplForwardingSortedMap<K, V>
+      extends ForwardingSortedMap<K, V> {
+    private final SortedMap<K, V> backingMap;
+
+    StandardImplForwardingSortedMap(SortedMap<K, V> backingMap) {
+      this.backingMap = backingMap;
+    }
+
+    @Override protected SortedMap<K, V> delegate() {
+      return backingMap;
+    }
+
+    @Override public boolean containsKey(Object key) {
+      return standardContainsKey(key);
+    }
+
+    @Override public boolean containsValue(Object value) {
+      return standardContainsValue(value);
+    }
+
+    @Override public void putAll(Map<? extends K, ? extends V> map) {
+      standardPutAll(map);
+    }
+
+    @Override public V remove(Object object) {
+      return standardRemove(object);
+    }
+
+    @Override public boolean equals(Object object) {
+      return standardEquals(object);
+    }
+
+    @Override public int hashCode() {
+      return standardHashCode();
+    }
+
+    @Override public Set<K> keySet() {
+      return new StandardKeySet();
+    }
+
+    @Override public Collection<V> values() {
+      return new StandardValues();
+    }
+
+    @Override public String toString() {
+      return standardToString();
+    }
+
+    @Override public Set<Entry<K, V>> entrySet() {
+      return new StandardEntrySet() {
+        @Override
+        public Iterator<Entry<K, V>> iterator() {
+          return backingMap.entrySet().iterator();
+        }
+      };
+    }
+
+    @Override public void clear() {
+      standardClear();
+    }
+
+    @Override public boolean isEmpty() {
+      return standardIsEmpty();
+    }
+
+    @Override public SortedMap<K, V> subMap(K fromKey, K toKey) {
+      return standardSubMap(fromKey, toKey);
+    }
+  }
+
+  public static Test suite() {
+    TestSuite suite = new TestSuite();
+
+    suite.addTestSuite(ForwardingSortedMapTest.class);
+    suite.addTest(MapTestSuiteBuilder.using(new TestStringMapGenerator() {
+      @Override protected Map<String, String> create(
+          Entry<String, String>[] entries) {
+        SortedMap<String, String> map = new SafeTreeMap<String, String>();
+        for (Entry<String, String> entry : entries) {
+          map.put(entry.getKey(), entry.getValue());
+        }
+        return new StandardImplForwardingSortedMap<String, String>(map);
+      }
+
+      @Override public Iterable<Entry<String, String>> order(
+          List<Entry<String, String>> insertionOrder) {
+        return sort(insertionOrder);
+      }
+    }).named("ForwardingSortedMap[SafeTreeMap] with no comparator and standard "
+        + "implementations").withFeatures(CollectionSize.ANY,
+        CollectionFeature.KNOWN_ORDER, MapFeature.ALLOWS_NULL_VALUES,
+        MapFeature.GENERAL_PURPOSE).createTestSuite());
+    suite.addTest(MapTestSuiteBuilder.using(new TestStringMapGenerator() {
+      private final Comparator<String> comparator =
+          Ordering.natural().nullsFirst();
+
+      @Override protected Map<String, String> create(
+          Entry<String, String>[] entries) {
+        SortedMap<String, String> map =
+            new SafeTreeMap<String, String>(comparator);
+        for (Entry<String, String> entry : entries) {
+          map.put(entry.getKey(), entry.getValue());
+        }
+        return new StandardImplForwardingSortedMap<String, String>(map);
+      }
+
+      @Override public Iterable<Entry<String, String>> order(
+          List<Entry<String, String>> insertionOrder) {
+        return sort(insertionOrder);
+      }
+    }).named("ForwardingSortedMap[SafeTreeMap] with natural comparator and "
+        + "standard implementations").withFeatures(CollectionSize.ANY,
+        CollectionFeature.KNOWN_ORDER, MapFeature.ALLOWS_NULL_VALUES,
+        MapFeature.ALLOWS_NULL_KEYS, MapFeature.GENERAL_PURPOSE)
+        .createTestSuite());
+    suite.addTest(MapTestSuiteBuilder.using(new TestStringMapGenerator() {
+      @Override protected Map<String, String> create(
+          Entry<String, String>[] entries) {
+        ImmutableSortedMap.Builder<String, String> builder =
+            ImmutableSortedMap.naturalOrder();
+        for (Entry<String, String> entry : entries) {
+          builder.put(entry.getKey(), entry.getValue());
+        }
+        return new StandardImplForwardingSortedMap<String, String>(
+            builder.build());
+      }
+      
+      @Override public Iterable<Entry<String, String>> order(
+          List<Entry<String, String>> insertionOrder) {
+        return sort(insertionOrder);
+      }
+    }).named("ForwardingSortedMap[ImmutableSortedMap] with standard "
+        + "implementations").withFeatures(
+        CollectionSize.ANY, MapFeature.REJECTS_DUPLICATES_AT_CREATION,
+        MapFeature.ALLOWS_NULL_QUERIES)
+        .createTestSuite());
+
+    return suite;
+  }
+  
+  private static Iterable<Entry<String, String>> sort(
+      List<Entry<String, String>> entries) {
+    SortedMap<String, String> map =
+        new SafeTreeMap<String, String>(Ordering.natural().nullsFirst());
+    for (Entry<String, String> entry : entries) {
+      map.put(entry.getKey(), entry.getValue());
+    }
+    return map.entrySet();
+  }
+
+  @Override public void setUp() throws Exception {
+    super.setUp();
+    /*
+     * Class parameters must be raw, so we can't create a proxy with generic
+     * type arguments. The created proxy only records calls and returns null, so
+     * the type is irrelevant at runtime.
+     */
+    @SuppressWarnings("unchecked")
+    final SortedMap<String, Boolean> sortedMap =
+        createProxyInstance(SortedMap.class);
+    forward = new ForwardingSortedMap<String, Boolean>() {
+      @Override protected SortedMap<String, Boolean> delegate() {
+        return sortedMap;
+      }
+    };
+  }
+
+  public void testComparator() {
+    forward().comparator();
+    assertEquals("[comparator]", getCalls());
+  }
+
+  public void testFirstKey() {
+    forward().firstKey();
+    assertEquals("[firstKey]", getCalls());
+  }
+
+  public void testHeadMap_K() {
+    forward().headMap("asdf");
+    assertEquals("[headMap(Object)]", getCalls());
+  }
+
+  public void testLastKey() {
+    forward().lastKey();
+    assertEquals("[lastKey]", getCalls());
+  }
+
+  public void testSubMap_K_K() {
+    forward().subMap("first", "last");
+    assertEquals("[subMap(Object,Object)]", getCalls());
+  }
+
+  public void testTailMap_K() {
+    forward().tailMap("last");
+    assertEquals("[tailMap(Object)]", getCalls());
+  }
+
+  @Override SortedMap<String, Boolean> forward() {
+    return (SortedMap<String, Boolean>) super.forward();
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/ForwardingSortedSetMultimapTest.java b/guava-tests/test/com/google/common/collect/ForwardingSortedSetMultimapTest.java
new file mode 100644
index 0000000..63ea11f
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/ForwardingSortedSetMultimapTest.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+/**
+ * Unit test for {@link ForwardingSortedSetMultimap}.
+ *
+ * @author Kurt Alfred Kluever
+ */
+public class ForwardingSortedSetMultimapTest extends ForwardingSetMultimapTest {
+
+  @Override public void setUp() throws Exception {
+    super.setUp();
+    /*
+     * Class parameters must be raw, so we can't create a proxy with generic
+     * type arguments. The created proxy only records calls and returns null, so
+     * the type is irrelevant at runtime.
+     */
+    @SuppressWarnings("unchecked")
+    final SortedSetMultimap<String, Boolean> multimap =
+        createProxyInstance(SortedSetMultimap.class);
+    forward = new ForwardingSortedSetMultimap<String, Boolean>() {
+      @Override protected SortedSetMultimap<String, Boolean> delegate() {
+        return multimap;
+      }
+    };
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/ForwardingSortedSetTest.java b/guava-tests/test/com/google/common/collect/ForwardingSortedSetTest.java
new file mode 100644
index 0000000..4bf9dd7
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/ForwardingSortedSetTest.java
@@ -0,0 +1,177 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.collect.testing.SafeTreeSet;
+import com.google.common.collect.testing.SetTestSuiteBuilder;
+import com.google.common.collect.testing.TestStringSetGenerator;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+import java.util.Set;
+import java.util.SortedSet;
+
+/**
+ * Tests for {@code ForwardingSortedSet}.
+ *
+ * @author Louis Wasserman
+ */
+public class ForwardingSortedSetTest extends ForwardingSetTest {
+  static class StandardImplForwardingSortedSet<T>
+      extends ForwardingSortedSet<T> {
+    private final SortedSet<T> backingSet;
+
+    StandardImplForwardingSortedSet(SortedSet<T> backingSet) {
+      this.backingSet = backingSet;
+    }
+
+    @Override protected SortedSet<T> delegate() {
+      return backingSet;
+    }
+
+    @Override public boolean equals(Object object) {
+      return standardEquals(object);
+    }
+
+    @Override public int hashCode() {
+      return standardHashCode();
+    }
+
+    @Override public boolean addAll(Collection<? extends T> collection) {
+      return standardAddAll(collection);
+    }
+
+    @Override public void clear() {
+      standardClear();
+    }
+
+    @Override public boolean contains(Object object) {
+      return standardContains(object);
+    }
+
+    @Override public boolean containsAll(Collection<?> collection) {
+      return standardContainsAll(collection);
+    }
+
+    @Override public boolean remove(Object object) {
+      return standardRemove(object);
+    }
+
+    @Override public boolean removeAll(Collection<?> collection) {
+      return standardRemoveAll(collection);
+    }
+
+    @Override public boolean retainAll(Collection<?> collection) {
+      return standardRetainAll(collection);
+    }
+
+    @Override public Object[] toArray() {
+      return standardToArray();
+    }
+
+    @Override public <T> T[] toArray(T[] array) {
+      return standardToArray(array);
+    }
+
+    @Override public String toString() {
+      return standardToString();
+    }
+
+    @Override public SortedSet<T> subSet(T fromElement, T toElement) {
+      return standardSubSet(fromElement, toElement);
+    }
+  }
+  
+  public static Test suite(){
+    TestSuite suite = new TestSuite();
+    
+    suite.addTestSuite(ForwardingSortedSetTest.class);
+    suite.addTest(
+        SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+          @Override protected Set<String> create(String[] elements) {
+            return new StandardImplForwardingSortedSet<String>(
+                new SafeTreeSet<String>(Arrays.asList(elements)));
+          }
+
+          @Override public List<String> order(List<String> insertionOrder) {
+            return Lists.newArrayList(Sets.newTreeSet(insertionOrder));
+          }
+        }).named(
+            "ForwardingSortedSet[SafeTreeSet] with standard implementations")
+            .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER,
+                CollectionFeature.GENERAL_PURPOSE).createTestSuite());
+    
+    return suite;
+  }
+  
+  @Override public void setUp() throws Exception {
+    super.setUp();
+    /*
+     * Class parameters must be raw, so we can't create a proxy with generic
+     * type arguments. The created proxy only records calls and returns null, so
+     * the type is irrelevant at runtime.
+     */
+    @SuppressWarnings("unchecked")
+    final SortedSet<String> sortedSet
+        = createProxyInstance(SortedSet.class);
+    forward = new ForwardingSortedSet<String>() {
+      @Override protected SortedSet<String> delegate() {
+        return sortedSet;
+      }
+    };
+  }
+
+  public void testComparator() {
+    forward().comparator();
+    assertEquals("[comparator]", getCalls());
+  }
+
+  public void testFirst() {
+    forward().first();
+    assertEquals("[first]", getCalls());
+  }
+
+  public void testHeadSet_K() {
+    forward().headSet("asdf");
+    assertEquals("[headSet(Object)]", getCalls());
+  }
+
+  public void testLast() {
+    forward().last();
+    assertEquals("[last]", getCalls());
+  }
+
+  public void testSubSet_K_K() {
+    forward().subSet("first", "last");
+    assertEquals("[subSet(Object,Object)]", getCalls());
+  }
+
+  public void testTailSet_K() {
+    forward().tailSet("last");
+    assertEquals("[tailSet(Object)]", getCalls());
+  }
+
+  @Override SortedSet<String> forward() {
+    return (SortedSet<String>) super.forward();
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/ForwardingTableTest.java b/guava-tests/test/com/google/common/collect/ForwardingTableTest.java
new file mode 100644
index 0000000..f8a4e88
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/ForwardingTableTest.java
@@ -0,0 +1,150 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+/**
+ * Tests {@link ForwardingTable}.
+ *
+ * @author Gregory Kick
+ */
+public class ForwardingTableTest extends ForwardingTestCase {
+
+  private Table<String, Integer, Boolean> forward;
+
+  @Override public void setUp() throws Exception {
+    super.setUp();
+    /*
+     * Class parameters must be raw, so we can't create a proxy with generic
+     * type arguments. The created proxy only records calls and returns null, so
+     * the type is irrelevant at runtime.
+     */
+    @SuppressWarnings("unchecked")
+    final Table<String, Integer, Boolean> table =
+        createProxyInstance(Table.class);
+    forward = new ForwardingTable<String, Integer, Boolean>() {
+      @Override protected Table<String, Integer, Boolean> delegate() {
+        return table;
+      }
+    };
+  }
+
+  public void testHashCode() {
+    forward.hashCode();
+    assertEquals("[hashCode]", getCalls());
+  }
+
+  public void testCellSet() {
+    forward.cellSet();
+    assertEquals("[cellSet]", getCalls());
+  }
+
+  public void testClear() {
+    forward.clear();
+    assertEquals("[clear]", getCalls());
+  }
+
+  public void testColumn() {
+    forward.column(1);
+    assertEquals("[column(Object)]", getCalls());
+  }
+
+  public void testColumnKeySet() {
+    forward.columnKeySet();
+    assertEquals("[columnKeySet]", getCalls());
+  }
+
+  public void testColumnMap() {
+    forward.columnMap();
+    assertEquals("[columnMap]", getCalls());
+  }
+
+  public void testContains() {
+    forward.contains("blah", 1);
+    assertEquals("[contains(Object,Object)]", getCalls());
+  }
+
+  public void testContainsColumn() {
+    forward.containsColumn(1);
+    assertEquals("[containsColumn(Object)]", getCalls());
+  }
+
+  public void testContainsRow() {
+    forward.containsRow("blah");
+    assertEquals("[containsRow(Object)]", getCalls());
+  }
+
+  public void testContainsValue() {
+    forward.containsValue(false);
+    assertEquals("[containsValue(Object)]", getCalls());
+  }
+
+  public void testGet() {
+    forward.get("blah", 1);
+    assertEquals("[get(Object,Object)]", getCalls());
+  }
+
+  public void testIsEmpty() {
+    forward.isEmpty();
+    assertEquals("[isEmpty]", getCalls());
+  }
+
+  public void testPut() {
+    forward.put("blah", 1, false);
+    assertEquals("[put(Object,Object,Object)]", getCalls());
+  }
+
+  public void testPutAll() {
+    forward.putAll(HashBasedTable.<String, Integer, Boolean>create());
+    assertEquals("[putAll(Table)]", getCalls());
+  }
+
+  public void testRemove() {
+    forward.remove("blah", 1);
+    assertEquals("[remove(Object,Object)]", getCalls());
+  }
+
+  public void testRow() {
+    forward.row("String");
+    assertEquals("[row(Object)]", getCalls());
+  }
+
+  public void testRowKeySet() {
+    forward.rowKeySet();
+    assertEquals("[rowKeySet]", getCalls());
+  }
+
+  public void testRowMap() {
+    forward.rowMap();
+    assertEquals("[rowMap]", getCalls());
+  }
+
+  public void testSize() {
+    forward.size();
+    assertEquals("[size]", getCalls());
+  }
+
+  public void testValues() {
+    forward.values();
+    assertEquals("[values]", getCalls());
+  }
+
+  public void testEqualsObject() {
+    forward.equals(null);
+    assertEquals("[equals(Object)]", getCalls());
+  }
+
+}
diff --git a/guava-tests/test/com/google/common/collect/ForwardingTestCase.java b/guava-tests/test/com/google/common/collect/ForwardingTestCase.java
new file mode 100644
index 0000000..d43d7b7
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/ForwardingTestCase.java
@@ -0,0 +1,147 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.base.Function;
+import com.google.common.base.Joiner;
+
+import junit.framework.TestCase;
+
+import java.lang.reflect.Array;
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Base test case for testing the variety of forwarding classes.
+ *
+ * @author Robert Konigsberg
+ * @author Louis Wasserman
+ */
+public abstract class ForwardingTestCase extends TestCase {
+
+  private List<String> calls = new ArrayList<String>();
+
+  private void called(String id) {
+    calls.add(id);
+  }
+
+  protected String getCalls() {
+    return calls.toString();
+  }
+
+  protected boolean isCalled() {
+    return !calls.isEmpty();
+  }
+
+  @SuppressWarnings("unchecked")
+  protected <T> T createProxyInstance(Class<T> c) {
+    /*
+     * This invocation handler only registers that a method was called,
+     * and then returns a bogus, but acceptable, value.
+     */
+    InvocationHandler handler = new InvocationHandler() {
+      @Override
+      public Object invoke(Object proxy, Method method, Object[] args)
+          throws Throwable {
+        called(asString(method));
+
+        return getDefaultValue(method.getReturnType());
+      }
+    };
+
+    return (T) Proxy.newProxyInstance(c.getClassLoader(),
+        new Class[] { c }, handler);
+  }
+
+  private static final Joiner COMMA_JOINER = Joiner.on(",");
+
+  /*
+   * Returns string representation of a method.
+   *
+   * If the method takes no parameters, it returns the name (e.g.
+   * "isEmpty". If the method takes parameters, it returns the simple names
+   * of the parameters (e.g. "put(Object,Object)".)
+   */
+  private String asString(Method method) {
+    String methodName = method.getName();
+    Class<?>[] parameterTypes = method.getParameterTypes();
+
+    if (parameterTypes.length == 0) {
+      return methodName;
+    }
+
+    Iterable<String> parameterNames = Iterables.transform(
+        Arrays.asList(parameterTypes),
+        new Function<Class<?>, String>() {
+          @Override
+          public String apply(Class<?> from) {
+            return from.getSimpleName();
+          }
+    });
+    return methodName + "(" + COMMA_JOINER.join(parameterNames) + ")";
+  }
+  
+  private static Object getDefaultValue(Class<?> returnType) {
+    if (returnType == boolean.class || returnType == Boolean.class) {
+      return Boolean.FALSE;
+    } else if (returnType == int.class || returnType == Integer.class) {
+      return 0;
+    } else if ((returnType == Set.class) || (returnType == Collection.class)) {
+      return Collections.emptySet();
+    } else if (returnType == Iterator.class){
+      return Iterators.emptyModifiableIterator();
+    } else if (returnType.isArray()) {
+      return Array.newInstance(returnType.getComponentType(), 0);
+    } else {
+      return null;
+    }
+  }
+  
+  protected static <T> void callAllPublicMethods(Class<T> theClass, T object)
+      throws InvocationTargetException {
+    for (Method method : theClass.getMethods()) {
+      Class<?>[] parameterTypes = method.getParameterTypes();
+      Object[] parameters = new Object[parameterTypes.length];
+      for (int i = 0; i < parameterTypes.length; i++) {
+        parameters[i] = getDefaultValue(parameterTypes[i]);
+      }
+      try {
+        try {
+          method.invoke(object, parameters);
+        } catch (InvocationTargetException ex) {
+          try {
+            throw ex.getCause();
+          } catch (UnsupportedOperationException unsupported) {
+            // this is a legit exception
+          }
+        }
+      } catch (Throwable cause) {
+        throw new InvocationTargetException(cause,
+            method.toString() + " with args: " + Arrays.toString(parameters));
+      }
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/GeneralRangeTest.java b/guava-tests/test/com/google/common/collect/GeneralRangeTest.java
new file mode 100644
index 0000000..a90e5d1
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/GeneralRangeTest.java
@@ -0,0 +1,213 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ * 
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.collect.BoundType.CLOSED;
+import static com.google.common.collect.BoundType.OPEN;
+
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.base.Objects;
+import com.google.common.testing.NullPointerTester;
+
+/**
+ * Tests for {@code GeneralRange}.
+ * 
+ * @author Louis Wasserman
+ */
+@GwtCompatible(emulated = true)
+public class GeneralRangeTest extends TestCase {
+  private static final Ordering<Integer> ORDERING = Ordering.natural().nullsFirst();
+
+  private static final List<Integer> IN_ORDER_VALUES = Arrays.asList(null, 1, 2, 3, 4, 5);
+
+  public void testCreateEmptyRangeFails() {
+    for (BoundType lboundType : BoundType.values()) {
+      for (BoundType uboundType : BoundType.values()) {
+        try {
+          GeneralRange<Integer> range = GeneralRange.range(ORDERING, 4, lboundType, 2, uboundType);
+          fail("Expected IAE");
+        } catch (IllegalArgumentException expected) {}
+      }
+    }
+  }
+
+  public void testCreateEmptyRangeOpenOpenFails() {
+    for (Integer i : IN_ORDER_VALUES) {
+      try {
+        GeneralRange.range(ORDERING, i, OPEN, i, OPEN);
+        fail("Expected IAE");
+      } catch (IllegalArgumentException expected) {}
+    }
+  }
+
+  public void testCreateEmptyRangeClosedOpenSucceeds() {
+    for (Integer i : IN_ORDER_VALUES) {
+      GeneralRange<Integer> range = GeneralRange.range(ORDERING, i, CLOSED, i, OPEN);
+      for (Integer j : IN_ORDER_VALUES) {
+        assertFalse(range.contains(j));
+      }
+    }
+  }
+
+  public void testCreateEmptyRangeOpenClosedSucceeds() {
+    for (Integer i : IN_ORDER_VALUES) {
+      GeneralRange<Integer> range = GeneralRange.range(ORDERING, i, OPEN, i, CLOSED);
+      for (Integer j : IN_ORDER_VALUES) {
+        assertFalse(range.contains(j));
+      }
+    }
+  }
+
+  public void testCreateSingletonRangeSucceeds() {
+    for (Integer i : IN_ORDER_VALUES) {
+      GeneralRange<Integer> range = GeneralRange.range(ORDERING, i, CLOSED, i, CLOSED);
+      for (Integer j : IN_ORDER_VALUES) {
+        assertEquals(Objects.equal(i, j), range.contains(j));
+      }
+    }
+  }
+
+  public void testSingletonRange() {
+    GeneralRange<Integer> range = GeneralRange.range(ORDERING, 3, CLOSED, 3, CLOSED);
+    for (Integer i : IN_ORDER_VALUES) {
+      assertEquals(ORDERING.compare(i, 3) == 0, range.contains(i));
+    }
+  }
+
+  public void testLowerRange() {
+    for (BoundType lBoundType : BoundType.values()) {
+      GeneralRange<Integer> range = GeneralRange.downTo(ORDERING, 3, lBoundType);
+      for (Integer i : IN_ORDER_VALUES) {
+        assertEquals(ORDERING.compare(i, 3) > 0
+            || (ORDERING.compare(i, 3) == 0 && lBoundType == CLOSED), range.contains(i));
+        assertEquals(ORDERING.compare(i, 3) < 0
+            || (ORDERING.compare(i, 3) == 0 && lBoundType == OPEN), range.tooLow(i));
+        assertFalse(range.tooHigh(i));
+      }
+    }
+  }
+
+  public void testUpperRange() {
+    for (BoundType lBoundType : BoundType.values()) {
+      GeneralRange<Integer> range = GeneralRange.upTo(ORDERING, 3, lBoundType);
+      for (Integer i : IN_ORDER_VALUES) {
+        assertEquals(ORDERING.compare(i, 3) < 0
+            || (ORDERING.compare(i, 3) == 0 && lBoundType == CLOSED), range.contains(i));
+        assertEquals(ORDERING.compare(i, 3) > 0
+            || (ORDERING.compare(i, 3) == 0 && lBoundType == OPEN), range.tooHigh(i));
+        assertFalse(range.tooLow(i));
+      }
+    }
+  }
+
+  public void testDoublyBoundedAgainstRange() {
+    for (BoundType lboundType : BoundType.values()) {
+      for (BoundType uboundType : BoundType.values()) {
+        Range<Integer> range = Ranges.range(2, lboundType, 4, uboundType);
+        GeneralRange<Integer> gRange = GeneralRange.range(ORDERING, 2, lboundType, 4, uboundType);
+        for (Integer i : IN_ORDER_VALUES) {
+          assertEquals(i != null && range.contains(i), gRange.contains(i));
+        }
+      }
+    }
+  }
+
+  public void testIntersectAgainstMatchingEndpointsRange() {
+    GeneralRange<Integer> range = GeneralRange.range(ORDERING, 2, CLOSED, 4, OPEN);
+    assertEquals(GeneralRange.range(ORDERING, 2, OPEN, 4, OPEN),
+        range.intersect(GeneralRange.range(ORDERING, 2, OPEN, 4, CLOSED)));
+  }
+
+  public void testIntersectAgainstBiggerRange() {
+    GeneralRange<Integer> range = GeneralRange.range(ORDERING, 2, CLOSED, 4, OPEN);
+
+    assertEquals(GeneralRange.range(ORDERING, 2, CLOSED, 4, OPEN),
+        range.intersect(GeneralRange.range(ORDERING, null, OPEN, 5, CLOSED)));
+
+    assertEquals(GeneralRange.range(ORDERING, 2, OPEN, 4, OPEN),
+        range.intersect(GeneralRange.range(ORDERING, 2, OPEN, 5, CLOSED)));
+
+    assertEquals(GeneralRange.range(ORDERING, 2, CLOSED, 4, OPEN),
+        range.intersect(GeneralRange.range(ORDERING, 1, OPEN, 4, OPEN)));
+  }
+
+  public void testIntersectAgainstSmallerRange() {
+    GeneralRange<Integer> range = GeneralRange.range(ORDERING, 2, OPEN, 4, OPEN);
+    assertEquals(GeneralRange.range(ORDERING, 3, CLOSED, 4, OPEN),
+        range.intersect(GeneralRange.range(ORDERING, 3, CLOSED, 4, CLOSED)));
+  }
+
+  public void testIntersectOverlappingRange() {
+    GeneralRange<Integer> range = GeneralRange.range(ORDERING, 2, OPEN, 4, CLOSED);
+    assertEquals(GeneralRange.range(ORDERING, 3, CLOSED, 4, CLOSED),
+        range.intersect(GeneralRange.range(ORDERING, 3, CLOSED, 5, CLOSED)));
+    assertEquals(GeneralRange.range(ORDERING, 2, OPEN, 3, OPEN),
+        range.intersect(GeneralRange.range(ORDERING, 1, OPEN, 3, OPEN)));
+  }
+
+  public void testIntersectNonOverlappingRange() {
+    GeneralRange<Integer> range = GeneralRange.range(ORDERING, 2, OPEN, 4, CLOSED);
+    assertTrue(range.intersect(GeneralRange.range(ORDERING, 5, CLOSED, 6, CLOSED)).isEmpty());
+    assertTrue(range.intersect(GeneralRange.range(ORDERING, 1, OPEN, 2, OPEN)).isEmpty());
+  }
+
+  public void testFromRangeAll() {
+    assertEquals(GeneralRange.all(Ordering.natural()), GeneralRange.from(Ranges.all()));
+  }
+
+  public void testFromRangeOneEnd() {
+    for (BoundType endpointType : BoundType.values()) {
+      assertEquals(GeneralRange.upTo(Ordering.natural(), 3, endpointType),
+          GeneralRange.from(Ranges.upTo(3, endpointType)));
+
+      assertEquals(GeneralRange.downTo(Ordering.natural(), 3, endpointType),
+          GeneralRange.from(Ranges.downTo(3, endpointType)));
+    }
+  }
+
+  public void testFromRangeTwoEnds() {
+    for (BoundType lowerType : BoundType.values()) {
+      for (BoundType upperType : BoundType.values()) {
+        assertEquals(GeneralRange.range(Ordering.natural(), 3, lowerType, 4, upperType),
+            GeneralRange.from(Ranges.range(3, lowerType, 4, upperType)));
+      }
+    }
+  }
+
+  public void testReverse() {
+    assertEquals(GeneralRange.all(ORDERING.reverse()), GeneralRange.all(ORDERING).reverse());
+    assertEquals(GeneralRange.downTo(ORDERING.reverse(), 3, CLOSED),
+        GeneralRange.upTo(ORDERING, 3, CLOSED).reverse());
+    assertEquals(GeneralRange.upTo(ORDERING.reverse(), 3, OPEN),
+        GeneralRange.downTo(ORDERING, 3, OPEN).reverse());
+    assertEquals(GeneralRange.range(ORDERING.reverse(), 5, OPEN, 3, CLOSED),
+        GeneralRange.range(ORDERING, 3, CLOSED, 5, OPEN).reverse());
+  }
+
+  @GwtIncompatible("NullPointerTester")
+  public void testNullPointers() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.setDefault(Comparator.class, Ordering.arbitrary());
+    tester.setDefault(BoundType.class, BoundType.CLOSED);
+    tester.testAllPublicStaticMethods(GeneralRange.class);
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/HashBasedTableTest.java b/guava-tests/test/com/google/common/collect/HashBasedTableTest.java
new file mode 100644
index 0000000..66f033b
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/HashBasedTableTest.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.testing.NullPointerTester;
+import com.google.common.testing.SerializableTester;
+
+/**
+ * Test cases for {@link HashBasedTable}.
+ * 
+ * @author Jared Levy
+ */
+@GwtCompatible(emulated = true)
+public class HashBasedTableTest extends AbstractTableTest {
+
+  @Override protected Table<String, Integer, Character> create(
+      Object... data) {
+    Table<String, Integer, Character> table = HashBasedTable.create();
+    table.put("foo", 4, 'a');
+    table.put("cat", 1, 'b');
+    table.clear();
+    populate(table, data);
+    return table;
+  }
+  
+  public void testCreateWithValidSizes() {
+    Table<String, Integer, Character> table1 = HashBasedTable.create(100, 20);
+    table1.put("foo", 1, 'a');
+    assertEquals((Character) 'a', table1.get("foo", 1));
+    
+    Table<String, Integer, Character> table2 = HashBasedTable.create(100, 0);
+    table2.put("foo", 1, 'a');
+    assertEquals((Character) 'a', table2.get("foo", 1));
+    
+    Table<String, Integer, Character> table3 = HashBasedTable.create(0, 20);
+    table3.put("foo", 1, 'a');
+    assertEquals((Character) 'a', table3.get("foo", 1));
+    
+    Table<String, Integer, Character> table4 = HashBasedTable.create(0, 0);
+    table4.put("foo", 1, 'a');
+    assertEquals((Character) 'a', table4.get("foo", 1));
+  }
+
+  public void testCreateWithInvalidSizes() {
+    try {
+      HashBasedTable.create(100, -5);
+      fail();
+    } catch (IllegalArgumentException expected) {}
+    
+    try {
+      HashBasedTable.create(-5, 20);
+      fail();
+    } catch (IllegalArgumentException expected) {}
+  }
+  
+  public void testCreateCopy() {
+    Table<String, Integer, Character> original
+        = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
+    Table<String, Integer, Character> copy = HashBasedTable.create(original);
+    assertEquals(original, copy);
+    assertEquals((Character) 'a', copy.get("foo", 1));   
+  }
+  
+  @GwtIncompatible("SerializableTester")
+  public void testSerialization() {
+    table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
+    SerializableTester.reserializeAndAssert(table);
+  }
+  
+  @GwtIncompatible("NullPointerTester")
+  public void testNullPointerStatic() throws Exception {
+    new NullPointerTester().testAllPublicStaticMethods(HashBasedTable.class);
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/HashBiMapTest.java b/guava-tests/test/com/google/common/collect/HashBiMapTest.java
new file mode 100644
index 0000000..f8661ad
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/HashBiMapTest.java
@@ -0,0 +1,123 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.IdentityHashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+/**
+ * Tests for {@link HashBiMap}.
+ *
+ * @author Mike Bostock
+ */
+@GwtCompatible
+public class HashBiMapTest extends AbstractBiMapTest {
+
+  @Override protected BiMap<Integer, String> create() {
+    return HashBiMap.create();
+  }
+
+  public void testCreate() {
+    BiMap<String, String> bimap = HashBiMap.create();
+    assertEquals(0, bimap.size());
+    bimap.put("canada", "dollar");
+    assertEquals("dollar", bimap.get("canada"));
+    assertEquals("canada", bimap.inverse().get("dollar"));
+  }
+
+  public void testMapConstructor() {
+    /* Test with non-empty Map. */
+    Map<String, String> map = ImmutableMap.of(
+        "canada", "dollar",
+        "chile", "peso",
+        "switzerland", "franc");
+    HashBiMap<String, String> bimap = HashBiMap.create(map);
+    assertEquals("dollar", bimap.get("canada"));
+    assertEquals("canada", bimap.inverse().get("dollar"));
+  }
+
+  private static final int N = 1000;
+
+  public void testBashIt() throws Exception {
+    BiMap<Integer, Integer> bimap = HashBiMap.create(N);
+    BiMap<Integer, Integer> inverse = bimap.inverse();
+
+    for (int i = 0; i < N; i++) {
+      assertNull(bimap.put(2 * i, 2 * i + 1));
+    }
+    for (int i = 0; i < N; i++) {
+      assertEquals(2 * i + 1, (int) bimap.get(2 * i));
+    }
+    for (int i = 0; i < N; i++) {
+      assertEquals(2 * i, (int) inverse.get(2 * i + 1));
+    }
+    for (int i = 0; i < N; i++) {
+      int oldValue = bimap.get(2 * i);
+      assertEquals(2 * i + 1, (int) bimap.put(2 * i, oldValue - 2));
+    }
+    for (int i = 0; i < N; i++) {
+      assertEquals(2 * i - 1, (int) bimap.get(2 * i));
+    }
+    for (int i = 0; i < N; i++) {
+      assertEquals(2 * i, (int) inverse.get(2 * i - 1));
+    }
+    Set<Entry<Integer, Integer>> entries = bimap.entrySet();
+    for (Entry<Integer, Integer> entry : entries) {
+      entry.setValue(entry.getValue() + 2 * N);
+    }
+    for (int i = 0; i < N; i++) {
+      assertEquals(2 * N + 2 * i - 1, (int) bimap.get(2 * i));
+    }
+  }
+
+  // The next two tests verify that map entries are not accessed after they're
+  // removed, since IdentityHashMap throws an exception when that occurs.
+  public void testIdentityKeySetIteratorRemove() {
+    bimap = new AbstractBiMap<Integer, String>(
+        new IdentityHashMap<Integer, String>(),
+        new IdentityHashMap<String, Integer>()) {};
+    putOneTwoThree();
+    Iterator<Integer> iterator = bimap.keySet().iterator();
+    iterator.next();
+    iterator.next();
+    iterator.remove();
+    iterator.next();
+    iterator.remove();
+    assertEquals(1, bimap.size());
+    assertEquals(1, bimap.inverse().size());
+  }
+
+  public void testIdentityEntrySetIteratorRemove() {
+    bimap = new AbstractBiMap<Integer, String>(
+        new IdentityHashMap<Integer, String>(),
+        new IdentityHashMap<String, Integer>()) {};
+    putOneTwoThree();
+    Iterator<Entry<Integer, String>> iterator = bimap.entrySet().iterator();
+    iterator.next();
+    iterator.next();
+    iterator.remove();
+    iterator.next();
+    iterator.remove();
+    assertEquals(1, bimap.size());
+    assertEquals(1, bimap.inverse().size());
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/HashMultimapTest.java b/guava-tests/test/com/google/common/collect/HashMultimapTest.java
new file mode 100644
index 0000000..4264a94
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/HashMultimapTest.java
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+/**
+ * Unit tests for {@link HashMultimap}.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible
+public class HashMultimapTest extends AbstractSetMultimapTest {
+  @Override protected Multimap<String, Integer> create() {
+    return HashMultimap.create();
+  }
+
+  /*
+   * The behavior of toString() is tested by TreeMultimap, which shares a
+   * lot of code with HashMultimap and has deterministic iteration order.
+   */
+  public void testCreate() {
+    HashMultimap<String, Integer> multimap = HashMultimap.create();
+    multimap.put("foo", 1);
+    multimap.put("bar", 2);
+    multimap.put("foo", 3);
+    assertEquals(ImmutableSet.of(1, 3), multimap.get("foo"));
+    assertEquals(8, multimap.expectedValuesPerKey);
+  }
+
+  public void testCreateFromMultimap() {
+    Multimap<String, Integer> multimap = createSample();
+    HashMultimap<String, Integer> copy = HashMultimap.create(multimap);
+    assertEquals(multimap, copy);
+    assertEquals(8, copy.expectedValuesPerKey);
+  }
+
+  public void testCreateFromSizes() {
+    HashMultimap<String, Integer> multimap = HashMultimap.create(20, 15);
+    multimap.put("foo", 1);
+    multimap.put("bar", 2);
+    multimap.put("foo", 3);
+    assertEquals(ImmutableSet.of(1, 3), multimap.get("foo"));
+    assertEquals(15, multimap.expectedValuesPerKey);
+  }
+
+  public void testCreateFromIllegalSizes() {
+    try {
+      HashMultimap.create(-20, 15);
+      fail();
+    } catch (IllegalArgumentException expected) {}
+
+    try {
+      HashMultimap.create(20, -15);
+      fail();
+    } catch (IllegalArgumentException expected) {}
+  }
+
+  public void testEmptyMultimapsEqual() {
+    Multimap<String, Integer> setMultimap = HashMultimap.create();
+    Multimap<String, Integer> listMultimap = ArrayListMultimap.create();
+    assertTrue(setMultimap.equals(listMultimap));
+    assertTrue(listMultimap.equals(setMultimap));
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/HashMultisetTest.java b/guava-tests/test/com/google/common/collect/HashMultisetTest.java
new file mode 100644
index 0000000..6e20b07
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/HashMultisetTest.java
@@ -0,0 +1,139 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.testing.SerializableTester;
+
+import java.io.Serializable;
+import java.util.Arrays;
+
+/**
+ * Unit test for {@link HashMultiset}.
+ *
+ * @author Kevin Bourrillion
+ * @author Jared Levy
+ */
+@GwtCompatible(emulated = true)
+public class HashMultisetTest extends AbstractMultisetTest {
+  @Override protected <E> Multiset<E> create() {
+    return HashMultiset.create();
+  }
+
+  public void testCreate() {
+    Multiset<String> multiset = HashMultiset.create();
+    multiset.add("foo", 2);
+    multiset.add("bar");
+    assertEquals(3, multiset.size());
+    assertEquals(2, multiset.count("foo"));
+  }
+
+  public void testCreateWithSize() {
+    Multiset<String> multiset = HashMultiset.create(50);
+    multiset.add("foo", 2);
+    multiset.add("bar");
+    assertEquals(3, multiset.size());
+    assertEquals(2, multiset.count("foo"));
+  }
+
+  public void testCreateFromIterable() {
+    Multiset<String> multiset
+        = HashMultiset.create(Arrays.asList("foo", "bar", "foo"));
+    assertEquals(3, multiset.size());
+    assertEquals(2, multiset.count("foo"));
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testSerializationContainingSelf() {
+    Multiset<Multiset<?>> multiset = HashMultiset.create();
+    multiset.add(multiset, 2);
+    Multiset<Multiset<?>> copy = SerializableTester.reserialize(multiset);
+    assertEquals(2, copy.size());
+    assertSame(copy, copy.iterator().next());
+  }
+
+  @GwtIncompatible("Only used by @GwtIncompatible code")
+  private static class MultisetHolder implements Serializable {
+    public Multiset<?> member;
+    MultisetHolder(Multiset<?> multiset) {
+      this.member = multiset;
+    }
+    private static final long serialVersionUID = 1L;
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testSerializationIndirectSelfReference() {
+    Multiset<MultisetHolder> multiset = HashMultiset.create();
+    MultisetHolder holder = new MultisetHolder(multiset);
+    multiset.add(holder, 2);
+    Multiset<MultisetHolder> copy = SerializableTester.reserialize(multiset);
+    assertEquals(2, copy.size());
+    assertSame(copy, copy.iterator().next().member);
+  }
+
+  /*
+   * The behavior of toString() and iteration is tested by LinkedHashMultiset,
+   * which shares a lot of code with HashMultiset and has deterministic
+   * iteration order.
+   */
+
+  /**
+   * This test fails with Java 6, preventing us from running
+   * NullPointerTester on multisets.
+  public void testAnnotations() throws Exception {
+    Method method = HashMultiset.class.getDeclaredMethod(
+        "add", Object.class, int.class);
+    assertTrue(method.getParameterAnnotations()[0].length > 0);
+  }
+  */
+  
+  @Override
+  @GwtIncompatible(
+      "http://code.google.com/p/google-web-toolkit/issues/detail?id=3421")
+  public void testEntryAfterRemove() {
+    super.testEntryAfterRemove();
+  }
+  
+  @Override
+  @GwtIncompatible(
+      "http://code.google.com/p/google-web-toolkit/issues/detail?id=3421")
+  public void testEntryAfterClear() {
+    super.testEntryAfterClear();
+  }
+  
+  @Override
+  @GwtIncompatible(
+      "http://code.google.com/p/google-web-toolkit/issues/detail?id=3421")
+  public void testEntryAfterEntrySetClear() {
+    super.testEntryAfterEntrySetClear();
+  }
+
+  @Override
+  @GwtIncompatible(
+      "http://code.google.com/p/google-web-toolkit/issues/detail?id=3421")
+  public void testEntryAfterEntrySetIteratorRemove() {
+    super.testEntryAfterEntrySetIteratorRemove();
+  }
+  
+  @Override
+  @GwtIncompatible(
+      "http://code.google.com/p/google-web-toolkit/issues/detail?id=3421")
+  public void testEntryAfterElementSetIteratorRemove() {
+    super.testEntryAfterElementSetIteratorRemove();
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/ImmutableBiMapTest.java b/guava-tests/test/com/google/common/collect/ImmutableBiMapTest.java
new file mode 100644
index 0000000..223b0aa
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/ImmutableBiMapTest.java
@@ -0,0 +1,559 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.base.Joiner;
+import com.google.common.collect.ImmutableBiMap.Builder;
+import com.google.common.collect.testing.MapInterfaceTest;
+import com.google.common.collect.testing.ReserializingTestSetGenerator;
+import com.google.common.collect.testing.SetTestSuiteBuilder;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.google.BiMapGenerators.ImmutableBiMapEntrySetGenerator;
+import com.google.common.collect.testing.google.BiMapGenerators.ImmutableBiMapInverseEntrySetGenerator;
+import com.google.common.collect.testing.google.BiMapGenerators.ImmutableBiMapInverseKeySetGenerator;
+import com.google.common.collect.testing.google.BiMapGenerators.ImmutableBiMapInverseValuesGenerator;
+import com.google.common.collect.testing.google.BiMapGenerators.ImmutableBiMapKeySetGenerator;
+import com.google.common.collect.testing.google.BiMapGenerators.ImmutableBiMapValuesGenerator;
+import com.google.common.testing.SerializableTester;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+/**
+ * Tests for {@link ImmutableBiMap}.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible(emulated = true)
+public class ImmutableBiMapTest extends TestCase {
+
+  // TODO: Reduce duplication of ImmutableMapTest code
+
+  @GwtIncompatible("suite")
+  public static Test suite() {
+    TestSuite suite = new TestSuite();
+
+    suite.addTestSuite(MapTests.class);
+    suite.addTestSuite(InverseMapTests.class);
+    suite.addTestSuite(CreationTests.class);
+    suite.addTestSuite(BiMapSpecificTests.class);
+
+    suite.addTest(SetTestSuiteBuilder.using(new ImmutableBiMapKeySetGenerator())
+        .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .named("ImmutableBiMap.keySet")
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(
+        new ImmutableBiMapEntrySetGenerator())
+        .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .named("ImmutableBiMap.entrySet")
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(new ImmutableBiMapValuesGenerator())
+        .withFeatures(
+            CollectionSize.ANY,
+            CollectionFeature.REJECTS_DUPLICATES_AT_CREATION,
+            CollectionFeature.KNOWN_ORDER,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .named("ImmutableBiMap.values")
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(
+        new ImmutableBiMapInverseKeySetGenerator())
+        .withFeatures(
+            CollectionSize.ANY,
+            CollectionFeature.REJECTS_DUPLICATES_AT_CREATION,
+            CollectionFeature.KNOWN_ORDER,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .named("ImmutableBiMap.inverse.keys")
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(
+        new ImmutableBiMapInverseEntrySetGenerator())
+        .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .named("ImmutableBiMap.inverse.entrySet")
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(
+        new ImmutableBiMapInverseValuesGenerator())
+        .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .named("ImmutableBiMap.inverse.values")
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(
+        ReserializingTestSetGenerator.newInstance(
+            new ImmutableBiMapKeySetGenerator()))
+        .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .named("ImmutableBiMap.keySet, reserialized")
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(
+        ReserializingTestSetGenerator.newInstance(
+            new ImmutableBiMapEntrySetGenerator()))
+        .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .named("ImmutableBiMap.entrySet, reserialized")
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(
+        ReserializingTestSetGenerator.newInstance(
+            new ImmutableBiMapValuesGenerator()))
+        .withFeatures(
+            CollectionSize.ANY,
+            CollectionFeature.REJECTS_DUPLICATES_AT_CREATION,
+            CollectionFeature.KNOWN_ORDER,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .named("ImmutableBiMap.values, reserialized")
+        .createTestSuite());
+
+    return suite;
+  }
+
+  public static abstract class AbstractMapTests<K, V>
+      extends MapInterfaceTest<K, V> {
+    public AbstractMapTests() {
+      super(false, false, false, false, false);
+    }
+
+    @Override protected Map<K, V> makeEmptyMap() {
+      throw new UnsupportedOperationException();
+    }
+
+    private static final Joiner joiner = Joiner.on(", ");
+
+    @Override protected void assertMoreInvariants(Map<K, V> map) {
+
+      BiMap<K, V> bimap = (BiMap<K, V>) map;
+
+      for (Entry<K, V> entry : map.entrySet()) {
+        assertEquals(entry.getKey() + "=" + entry.getValue(),
+            entry.toString());
+        assertEquals(entry.getKey(), bimap.inverse().get(entry.getValue()));
+      }
+
+      assertEquals("{" + joiner.join(map.entrySet()) + "}",
+          map.toString());
+      assertEquals("[" + joiner.join(map.entrySet()) + "]",
+          map.entrySet().toString());
+      assertEquals("[" + joiner.join(map.keySet()) + "]",
+          map.keySet().toString());
+      assertEquals("[" + joiner.join(map.values()) + "]",
+          map.values().toString());
+
+      assertEquals(Sets.newHashSet(map.entrySet()), map.entrySet());
+      assertEquals(Sets.newHashSet(map.keySet()), map.keySet());
+    }
+  }
+
+  public static class MapTests extends AbstractMapTests<String, Integer> {
+    @Override protected Map<String, Integer> makeEmptyMap() {
+      return ImmutableBiMap.of();
+    }
+
+    @Override protected Map<String, Integer> makePopulatedMap() {
+      return ImmutableBiMap.of("one", 1, "two", 2, "three", 3);
+    }
+
+    @Override protected String getKeyNotInPopulatedMap() {
+      return "minus one";
+    }
+
+    @Override protected Integer getValueNotInPopulatedMap() {
+      return -1;
+    }
+  }
+
+  public static class InverseMapTests
+      extends AbstractMapTests<String, Integer> {
+    @Override protected Map<String, Integer> makeEmptyMap() {
+      return ImmutableBiMap.of();
+    }
+
+    @Override protected Map<String, Integer> makePopulatedMap() {
+      return ImmutableBiMap.of(1, "one", 2, "two", 3, "three").inverse();
+    }
+
+    @Override protected String getKeyNotInPopulatedMap() {
+      return "minus one";
+    }
+
+    @Override protected Integer getValueNotInPopulatedMap() {
+      return -1;
+    }
+  }
+
+  public static class CreationTests extends TestCase {
+    public void testEmptyBuilder() {
+      ImmutableBiMap<String, Integer> map
+          = new Builder<String, Integer>().build();
+      assertEquals(Collections.<String, Integer>emptyMap(), map);
+      assertEquals(Collections.<Integer, String>emptyMap(), map.inverse());
+      assertSame(ImmutableBiMap.of(), map);
+    }
+
+    public void testSingletonBuilder() {
+      ImmutableBiMap<String, Integer> map = new Builder<String, Integer>()
+          .put("one", 1)
+          .build();
+      assertMapEquals(map, "one", 1);
+      assertMapEquals(map.inverse(), 1, "one");
+    }
+
+    public void testBuilder() {
+      ImmutableBiMap<String, Integer> map
+          = ImmutableBiMap.<String, Integer>builder()
+            .put("one", 1)
+            .put("two", 2)
+            .put("three", 3)
+            .put("four", 4)
+            .put("five", 5)
+            .build();
+      assertMapEquals(map,
+          "one", 1, "two", 2, "three", 3, "four", 4, "five", 5);
+      assertMapEquals(map.inverse(),
+          1, "one", 2, "two", 3, "three", 4, "four", 5, "five");
+    }
+
+    public void testBuilderPutAllWithEmptyMap() {
+      ImmutableBiMap<String, Integer> map = new Builder<String, Integer>()
+          .putAll(Collections.<String, Integer>emptyMap())
+          .build();
+      assertEquals(Collections.<String, Integer>emptyMap(), map);
+    }
+
+    public void testBuilderPutAll() {
+      Map<String, Integer> toPut = new LinkedHashMap<String, Integer>();
+      toPut.put("one", 1);
+      toPut.put("two", 2);
+      toPut.put("three", 3);
+      Map<String, Integer> moreToPut = new LinkedHashMap<String, Integer>();
+      moreToPut.put("four", 4);
+      moreToPut.put("five", 5);
+
+      ImmutableBiMap<String, Integer> map = new Builder<String, Integer>()
+          .putAll(toPut)
+          .putAll(moreToPut)
+          .build();
+      assertMapEquals(map,
+          "one", 1, "two", 2, "three", 3, "four", 4, "five", 5);
+      assertMapEquals(map.inverse(),
+          1, "one", 2, "two", 3, "three", 4, "four", 5, "five");
+    }
+
+    public void testBuilderReuse() {
+      Builder<String, Integer> builder = new Builder<String, Integer>();
+      ImmutableBiMap<String, Integer> mapOne = builder
+          .put("one", 1)
+          .put("two", 2)
+          .build();
+      ImmutableBiMap<String, Integer> mapTwo = builder
+          .put("three", 3)
+          .put("four", 4)
+          .build();
+
+      assertMapEquals(mapOne, "one", 1, "two", 2);
+      assertMapEquals(mapOne.inverse(), 1, "one", 2, "two");
+      assertMapEquals(mapTwo, "one", 1, "two", 2, "three", 3, "four", 4);
+      assertMapEquals(mapTwo.inverse(),
+          1, "one", 2, "two", 3, "three", 4, "four");
+    }
+
+    public void testBuilderPutNullKey() {
+      Builder<String, Integer> builder = new Builder<String, Integer>();
+      try {
+        builder.put(null, 1);
+        fail();
+      } catch (NullPointerException expected) {
+      }
+    }
+
+    public void testBuilderPutNullValue() {
+      Builder<String, Integer> builder = new Builder<String, Integer>();
+      try {
+        builder.put("one", null);
+        fail();
+      } catch (NullPointerException expected) {
+      }
+    }
+
+    public void testBuilderPutNullKeyViaPutAll() {
+      Builder<String, Integer> builder = new Builder<String, Integer>();
+      try {
+        builder.putAll(Collections.<String, Integer>singletonMap(null, 1));
+        fail();
+      } catch (NullPointerException expected) {
+      }
+    }
+
+    public void testBuilderPutNullValueViaPutAll() {
+      Builder<String, Integer> builder = new Builder<String, Integer>();
+      try {
+        builder.putAll(Collections.<String, Integer>singletonMap("one", null));
+        fail();
+      } catch (NullPointerException expected) {
+      }
+    }
+
+    public void testPuttingTheSameKeyTwiceThrowsOnBuild() {
+      Builder<String, Integer> builder = new Builder<String, Integer>()
+          .put("one", 1)
+          .put("one", 1); // throwing on this line would be even better
+
+      try {
+        builder.build();
+        fail();
+      } catch (IllegalArgumentException expected) {
+        assertEquals("duplicate key: one", expected.getMessage());
+      }
+    }
+
+    public void testOf() {
+      assertMapEquals(
+          ImmutableBiMap.of("one", 1),
+          "one", 1);
+      assertMapEquals(
+          ImmutableBiMap.of("one", 1).inverse(),
+          1, "one");
+      assertMapEquals(
+          ImmutableBiMap.of("one", 1, "two", 2),
+          "one", 1, "two", 2);
+      assertMapEquals(
+          ImmutableBiMap.of("one", 1, "two", 2).inverse(),
+          1, "one", 2, "two");
+      assertMapEquals(
+          ImmutableBiMap.of("one", 1, "two", 2, "three", 3),
+          "one", 1, "two", 2, "three", 3);
+      assertMapEquals(
+          ImmutableBiMap.of("one", 1, "two", 2, "three", 3).inverse(),
+          1, "one", 2, "two", 3, "three");
+      assertMapEquals(
+          ImmutableBiMap.of("one", 1, "two", 2, "three", 3, "four", 4),
+          "one", 1, "two", 2, "three", 3, "four", 4);
+      assertMapEquals(
+          ImmutableBiMap.of(
+              "one", 1, "two", 2, "three", 3, "four", 4).inverse(),
+          1, "one", 2, "two", 3, "three", 4, "four");
+      assertMapEquals(
+          ImmutableBiMap.of(
+              "one", 1, "two", 2, "three", 3, "four", 4, "five", 5),
+          "one", 1, "two", 2, "three", 3, "four", 4, "five", 5);
+      assertMapEquals(
+          ImmutableBiMap.of(
+              "one", 1, "two", 2, "three", 3, "four", 4, "five", 5).inverse(),
+          1, "one", 2, "two", 3, "three", 4, "four", 5, "five");
+    }
+
+    public void testOfNullKey() {
+      try {
+        ImmutableBiMap.of(null, 1);
+        fail();
+      } catch (NullPointerException expected) {
+      }
+
+      try {
+        ImmutableBiMap.of("one", 1, null, 2);
+        fail();
+      } catch (NullPointerException expected) {
+      }
+    }
+
+    public void testOfNullValue() {
+      try {
+        ImmutableBiMap.of("one", null);
+        fail();
+      } catch (NullPointerException expected) {
+      }
+
+      try {
+        ImmutableBiMap.of("one", 1, "two", null);
+        fail();
+      } catch (NullPointerException expected) {
+      }
+    }
+
+    public void testOfWithDuplicateKey() {
+      try {
+        ImmutableBiMap.of("one", 1, "one", 1);
+        fail();
+      } catch (IllegalArgumentException expected) {
+        assertEquals("duplicate key: one", expected.getMessage());
+      }
+    }
+
+    public void testCopyOfEmptyMap() {
+      ImmutableBiMap<String, Integer> copy
+          = ImmutableBiMap.copyOf(Collections.<String, Integer>emptyMap());
+      assertEquals(Collections.<String, Integer>emptyMap(), copy);
+      assertSame(copy, ImmutableBiMap.copyOf(copy));
+      assertSame(ImmutableBiMap.of(), copy);
+    }
+
+    public void testCopyOfSingletonMap() {
+      ImmutableBiMap<String, Integer> copy
+          = ImmutableBiMap.copyOf(Collections.singletonMap("one", 1));
+      assertMapEquals(copy, "one", 1);
+      assertSame(copy, ImmutableBiMap.copyOf(copy));
+    }
+
+    public void testCopyOf() {
+      Map<String, Integer> original = new LinkedHashMap<String, Integer>();
+      original.put("one", 1);
+      original.put("two", 2);
+      original.put("three", 3);
+
+      ImmutableBiMap<String, Integer> copy = ImmutableBiMap.copyOf(original);
+      assertMapEquals(copy, "one", 1, "two", 2, "three", 3);
+      assertSame(copy, ImmutableBiMap.copyOf(copy));
+    }
+
+    public void testEmpty() {
+      ImmutableBiMap<String, Integer> bimap = ImmutableBiMap.of();
+      assertEquals(Collections.<String, Integer>emptyMap(), bimap);
+      assertEquals(Collections.<String, Integer>emptyMap(), bimap.inverse());
+    }
+
+    public void testFromHashMap() {
+      Map<String, Integer> hashMap = Maps.newLinkedHashMap();
+      hashMap.put("one", 1);
+      hashMap.put("two", 2);
+      ImmutableBiMap<String, Integer> bimap = ImmutableBiMap.copyOf(
+          ImmutableMap.of("one", 1, "two", 2));
+      assertMapEquals(bimap, "one", 1, "two", 2);
+      assertMapEquals(bimap.inverse(), 1, "one", 2, "two");
+    }
+
+    public void testFromImmutableMap() {
+      ImmutableBiMap<String, Integer> bimap = ImmutableBiMap.copyOf(
+          new ImmutableMap.Builder<String, Integer>()
+              .put("one", 1)
+              .put("two", 2)
+              .put("three", 3)
+              .put("four", 4)
+              .put("five", 5)
+              .build());
+      assertMapEquals(bimap,
+          "one", 1, "two", 2, "three", 3, "four", 4, "five", 5);
+      assertMapEquals(bimap.inverse(),
+          1, "one", 2, "two", 3, "three", 4, "four", 5, "five");
+    }
+
+    public void testDuplicateValues() {
+      ImmutableMap<String, Integer> map
+          = new ImmutableMap.Builder<String, Integer>()
+              .put("one", 1)
+              .put("two", 2)
+              .put("uno", 1)
+              .put("dos", 2)
+              .build();
+
+      try {
+        ImmutableBiMap.copyOf(map);
+        fail();
+      } catch (IllegalArgumentException expected) {
+        assertEquals("duplicate key: 1", expected.getMessage());
+      }
+    }
+  }
+
+  public static class BiMapSpecificTests extends TestCase {
+
+    public void testForcePut() {
+      ImmutableBiMap<String, Integer> bimap = ImmutableBiMap.copyOf(
+          ImmutableMap.of("one", 1, "two", 2));
+      try {
+        bimap.forcePut("three", 3);
+        fail();
+      } catch (UnsupportedOperationException expected) {}
+    }
+
+    public void testKeySet() {
+      ImmutableBiMap<String, Integer> bimap = ImmutableBiMap.copyOf(
+          ImmutableMap.of("one", 1, "two", 2, "three", 3, "four", 4));
+      Set<String> keys = bimap.keySet();
+      assertEquals(Sets.newHashSet("one", "two", "three", "four"), keys);
+      ASSERT.that(keys).hasContentsInOrder("one", "two", "three", "four");
+    }
+
+    public void testValues() {
+      ImmutableBiMap<String, Integer> bimap = ImmutableBiMap.copyOf(
+          ImmutableMap.of("one", 1, "two", 2, "three", 3, "four", 4));
+      Set<Integer> values = bimap.values();
+      assertEquals(Sets.newHashSet(1, 2, 3, 4), values);
+      ASSERT.that(values).hasContentsInOrder(1, 2, 3, 4);
+    }
+
+    public void testDoubleInverse() {
+      ImmutableBiMap<String, Integer> bimap = ImmutableBiMap.copyOf(
+          ImmutableMap.of("one", 1, "two", 2));
+      assertSame(bimap, bimap.inverse().inverse());
+    }
+
+    @GwtIncompatible("SerializableTester")
+    public void testEmptySerialization() {
+      ImmutableBiMap<String, Integer> bimap = ImmutableBiMap.of();
+      assertSame(bimap, SerializableTester.reserializeAndAssert(bimap));
+    }
+
+    @GwtIncompatible("SerializableTester")
+    public void testSerialization() {
+      ImmutableBiMap<String, Integer> bimap = ImmutableBiMap.copyOf(
+          ImmutableMap.of("one", 1, "two", 2));
+      ImmutableBiMap<String, Integer> copy =
+          SerializableTester.reserializeAndAssert(bimap);
+      assertEquals(Integer.valueOf(1), copy.get("one"));
+      assertEquals("one", copy.inverse().get(1));
+      assertSame(copy, copy.inverse().inverse());
+    }
+
+    @GwtIncompatible("SerializableTester")
+    public void testInverseSerialization() {
+      ImmutableBiMap<String, Integer> bimap = ImmutableBiMap.copyOf(
+          ImmutableMap.of(1, "one", 2, "two")).inverse();
+      ImmutableBiMap<String, Integer> copy =
+          SerializableTester.reserializeAndAssert(bimap);
+      assertEquals(Integer.valueOf(1), copy.get("one"));
+      assertEquals("one", copy.inverse().get(1));
+      assertSame(copy, copy.inverse().inverse());
+    }
+  }
+
+  private static <K, V> void assertMapEquals(Map<K, V> map,
+      Object... alternatingKeysAndValues) {
+    int i = 0;
+    for (Entry<K, V> entry : map.entrySet()) {
+      assertEquals(alternatingKeysAndValues[i++], entry.getKey());
+      assertEquals(alternatingKeysAndValues[i++], entry.getValue());
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/ImmutableClassToInstanceMapTest.java b/guava-tests/test/com/google/common/collect/ImmutableClassToInstanceMapTest.java
new file mode 100644
index 0000000..9a9a875
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/ImmutableClassToInstanceMapTest.java
@@ -0,0 +1,188 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.collect.testing.MapTestSuiteBuilder;
+import com.google.common.collect.testing.SampleElements;
+import com.google.common.collect.testing.TestMapGenerator;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.MapFeature;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+/**
+ * Unit test for {@link ImmutableClassToInstanceMap}.
+ *
+ * @author Kevin Bourrillion
+ */
+public class ImmutableClassToInstanceMapTest extends TestCase {
+  public static Test suite() {
+    TestSuite suite = new TestSuite();
+    suite.addTestSuite(ImmutableClassToInstanceMapTest.class);
+
+    suite.addTest(MapTestSuiteBuilder
+        .using(new TestClassToInstanceMapGenerator() {
+          // Other tests will verify what real, warning-free usage looks like
+          // but here we have to do some serious fudging
+          @Override
+          @SuppressWarnings("unchecked")
+          public Map<Class, Number> create(Object... elements) {
+            ImmutableClassToInstanceMap.Builder<Number> builder
+                = ImmutableClassToInstanceMap.builder();
+            for (Object object : elements) {
+              Entry<Class, Number> entry = (Entry<Class, Number>) object;
+              builder.put(entry.getKey(), entry.getValue());
+            }
+            return (Map) builder.build();
+          }
+        })
+        .named("ImmutableClassToInstanceMap")
+        .withFeatures(
+            MapFeature.REJECTS_DUPLICATES_AT_CREATION,
+            MapFeature.RESTRICTS_KEYS,
+            CollectionFeature.KNOWN_ORDER,
+            CollectionSize.ANY,
+            MapFeature.ALLOWS_NULL_QUERIES)
+        .createTestSuite());
+
+    return suite;
+  }
+
+  public void testCopyOf_map_empty() {
+    Map<Class<?>, Object> in = Collections.emptyMap();
+    ClassToInstanceMap<Object> map = ImmutableClassToInstanceMap.copyOf(in);
+    assertTrue(map.isEmpty());
+
+    assertSame(map, ImmutableClassToInstanceMap.copyOf(map));
+  }
+
+  public void testCopyOf_map_valid() {
+    Map<Class<? extends Number>, Number> in = Maps.newHashMap();
+    in.put(Number.class, 0);
+    in.put(Double.class, Math.PI);
+    ClassToInstanceMap<Number> map = ImmutableClassToInstanceMap.copyOf(in);
+    assertEquals(2, map.size());
+
+    Number zero = map.getInstance(Number.class);
+    assertEquals(0, zero);
+
+    Double pi = map.getInstance(Double.class);
+    assertEquals(Math.PI, pi, 0.0);
+
+    assertSame(map, ImmutableClassToInstanceMap.copyOf(map));
+  }
+
+  public void testCopyOf_map_nulls() {
+    Map<Class<? extends Number>, Number> nullKey = Collections.singletonMap(
+        null, (Number) 1.0);
+    try {
+      ImmutableClassToInstanceMap.copyOf(nullKey);
+      fail();
+    } catch (NullPointerException expected) {
+    }
+
+    Map<? extends Class<? extends Number>, Number> nullValue
+        = Collections.singletonMap(Number.class, null);
+    try {
+      ImmutableClassToInstanceMap.copyOf(nullValue);
+      fail();
+    } catch (NullPointerException expected) {
+    }
+  }
+
+  public void testCopyOf_imap_empty() {
+    Map<Class<?>, Object> in = Collections.emptyMap();
+    ClassToInstanceMap<Object> map = ImmutableClassToInstanceMap.copyOf(in);
+    assertTrue(map.isEmpty());
+  }
+
+  public void testCopyOf_imap_valid() {
+    ImmutableMap<Class<? extends Number>, ? extends Number> in
+        = ImmutableMap.of(Number.class, 0, Double.class, Math.PI);
+    ClassToInstanceMap<Number> map = ImmutableClassToInstanceMap.copyOf(in);
+    assertEquals(2, map.size());
+
+    Number zero = map.getInstance(Number.class);
+    assertEquals(0, zero);
+
+    Double pi = map.getInstance(Double.class);
+    assertEquals(Math.PI, pi, 0.0);
+  }
+
+  public void testPrimitiveAndWrapper() {
+    ImmutableClassToInstanceMap<Number> ictim
+        = new ImmutableClassToInstanceMap.Builder<Number>()
+            .put(Integer.class, 0)
+            .put(int.class, 1)
+            .build();
+    assertEquals(2, ictim.size());
+
+    assertEquals(0, (int) ictim.getInstance(Integer.class));
+    assertEquals(1, (int) ictim.getInstance(int.class));
+  }
+
+  abstract static class TestClassToInstanceMapGenerator
+      implements TestMapGenerator<Class, Number> {
+
+    @Override
+    public Class[] createKeyArray(int length) {
+      return new Class[length];
+    }
+
+    @Override
+    public Number[] createValueArray(int length) {
+      return new Number[length];
+    }
+
+    @Override
+    public SampleElements<Entry<Class, Number>> samples() {
+      Entry<Class, Number> entry1 =
+          Maps.immutableEntry((Class) Integer.class, (Number) 0);
+      Entry<Class, Number> entry2 =
+          Maps.immutableEntry((Class) Number.class, (Number) 1);
+      Entry<Class, Number> entry3 =
+          Maps.immutableEntry((Class) Double.class, (Number) 2.0);
+      Entry<Class, Number> entry4 =
+          Maps.immutableEntry((Class) Byte.class, (Number) (byte) 0x03);
+      Entry<Class, Number> entry5 =
+          Maps.immutableEntry((Class) Long.class, (Number) 0x0FF1C1AL);
+      return new SampleElements<Entry<Class, Number>>(
+          entry1, entry2, entry3, entry4, entry5
+      );
+    }
+
+    @Override
+    @SuppressWarnings("unchecked")
+    public Entry<Class, Number>[] createArray(int length) {
+      return new Entry[length];
+    }
+
+    @Override
+    public Iterable<Entry<Class, Number>> order(
+        List<Entry<Class, Number>> insertionOrder) {
+      return insertionOrder;
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/ImmutableListMultimapTest.java b/guava-tests/test/com/google/common/collect/ImmutableListMultimapTest.java
new file mode 100644
index 0000000..fb8f6b4
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/ImmutableListMultimapTest.java
@@ -0,0 +1,477 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.collect.ImmutableListMultimap.Builder;
+import com.google.common.collect.testing.google.UnmodifiableCollectionTests;
+import com.google.common.testing.EqualsTester;
+import com.google.common.testing.SerializableTester;
+
+import junit.framework.TestCase;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Map.Entry;
+
+/**
+ * Tests for {@link ImmutableListMultimap}.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible(emulated = true)
+public class ImmutableListMultimapTest extends TestCase {
+
+  public void testBuilder_withImmutableEntry() {
+    ImmutableListMultimap<String, Integer> multimap = new Builder<String, Integer>()
+        .put(Maps.immutableEntry("one", 1))
+        .build();
+    assertEquals(Arrays.asList(1), multimap.get("one"));
+  }
+
+  public void testBuilder_withImmutableEntryAndNullContents() {
+    Builder<String, Integer> builder = new Builder<String, Integer>();
+    try {
+      builder.put(Maps.immutableEntry("one", (Integer) null));
+      fail();
+    } catch (NullPointerException expected) {
+    }
+    try {
+      builder.put(Maps.immutableEntry((String) null, 1));
+      fail();
+    } catch (NullPointerException expected) {
+    }
+  }
+
+  private static class StringHolder {
+    String string;
+  }
+
+  public void testBuilder_withMutableEntry() {
+    ImmutableListMultimap.Builder<String, Integer> builder =
+        new Builder<String, Integer>();
+    final StringHolder holder = new StringHolder();
+    holder.string = "one";
+    Entry<String, Integer> entry = new AbstractMapEntry<String, Integer>() {
+      @Override public String getKey() {
+        return holder.string;
+      }
+      @Override public Integer getValue() {
+        return 1;
+      }
+    };
+
+    builder.put(entry);
+    holder.string = "two";
+    assertEquals(Arrays.asList(1), builder.build().get("one"));
+  }
+
+  public void testBuilderPutAllIterable() {
+    ImmutableListMultimap.Builder<String, Integer> builder
+        = ImmutableListMultimap.builder();
+    builder.putAll("foo", Arrays.asList(1, 2, 3));
+    builder.putAll("bar", Arrays.asList(4, 5));
+    builder.putAll("foo", Arrays.asList(6, 7));
+    Multimap<String, Integer> multimap = builder.build();
+    assertEquals(Arrays.asList(1, 2, 3, 6, 7), multimap.get("foo"));
+    assertEquals(Arrays.asList(4, 5), multimap.get("bar"));
+    assertEquals(7, multimap.size());
+  }
+
+  public void testBuilderPutAllVarargs() {
+    ImmutableListMultimap.Builder<String, Integer> builder
+        = ImmutableListMultimap.builder();
+    builder.putAll("foo", 1, 2, 3);
+    builder.putAll("bar", 4, 5);
+    builder.putAll("foo", 6, 7);
+    Multimap<String, Integer> multimap = builder.build();
+    assertEquals(Arrays.asList(1, 2, 3, 6, 7), multimap.get("foo"));
+    assertEquals(Arrays.asList(4, 5), multimap.get("bar"));
+    assertEquals(7, multimap.size());
+  }
+
+  public void testBuilderPutAllMultimap() {
+    Multimap<String, Integer> toPut = LinkedListMultimap.create();
+    toPut.put("foo", 1);
+    toPut.put("bar", 4);
+    toPut.put("foo", 2);
+    toPut.put("foo", 3);
+    Multimap<String, Integer> moreToPut = LinkedListMultimap.create();
+    moreToPut.put("foo", 6);
+    moreToPut.put("bar", 5);
+    moreToPut.put("foo", 7);
+    ImmutableListMultimap.Builder<String, Integer> builder
+        = ImmutableListMultimap.builder();
+    builder.putAll(toPut);
+    builder.putAll(moreToPut);
+    Multimap<String, Integer> multimap = builder.build();
+    assertEquals(Arrays.asList(1, 2, 3, 6, 7), multimap.get("foo"));
+    assertEquals(Arrays.asList(4, 5), multimap.get("bar"));
+    assertEquals(7, multimap.size());
+  }
+
+  public void testBuilderPutAllWithDuplicates() {
+    ImmutableListMultimap.Builder<String, Integer> builder
+        = ImmutableListMultimap.builder();
+    builder.putAll("foo", 1, 2, 3);
+    builder.putAll("bar", 4, 5);
+    builder.putAll("foo", 1, 6, 7);
+    ImmutableListMultimap<String, Integer> multimap = builder.build();
+    assertEquals(Arrays.asList(1, 2, 3, 1, 6, 7), multimap.get("foo"));
+    assertEquals(Arrays.asList(4, 5), multimap.get("bar"));
+    assertEquals(8, multimap.size());
+  }
+
+  public void testBuilderPutWithDuplicates() {
+    ImmutableListMultimap.Builder<String, Integer> builder
+        = ImmutableListMultimap.builder();
+    builder.putAll("foo", 1, 2, 3);
+    builder.putAll("bar", 4, 5);
+    builder.put("foo", 1);
+    ImmutableListMultimap<String, Integer> multimap = builder.build();
+    assertEquals(Arrays.asList(1, 2, 3, 1), multimap.get("foo"));
+    assertEquals(Arrays.asList(4, 5), multimap.get("bar"));
+    assertEquals(6, multimap.size());
+  }
+
+  public void testBuilderPutAllMultimapWithDuplicates() {
+    Multimap<String, Integer> toPut = LinkedListMultimap.create();
+    toPut.put("foo", 1);
+    toPut.put("bar", 4);
+    toPut.put("foo", 2);
+    toPut.put("foo", 1);
+    toPut.put("bar", 5);
+    Multimap<String, Integer> moreToPut = LinkedListMultimap.create();
+    moreToPut.put("foo", 6);
+    moreToPut.put("bar", 4);
+    moreToPut.put("foo", 7);
+    moreToPut.put("foo", 2);
+    ImmutableListMultimap.Builder<String, Integer> builder
+        = ImmutableListMultimap.builder();
+    builder.putAll(toPut);
+    builder.putAll(moreToPut);
+    Multimap<String, Integer> multimap = builder.build();
+    assertEquals(Arrays.asList(1, 2, 1, 6, 7, 2), multimap.get("foo"));
+    assertEquals(Arrays.asList(4, 5, 4), multimap.get("bar"));
+    assertEquals(9, multimap.size());
+  }
+
+  public void testBuilderPutNullKey() {
+    Multimap<String, Integer> toPut = LinkedListMultimap.create();
+    toPut.put("foo", null);
+    ImmutableListMultimap.Builder<String, Integer> builder
+        = ImmutableListMultimap.builder();
+    try {
+      builder.put(null, 1);
+      fail();
+    } catch (NullPointerException expected) {}
+    try {
+      builder.putAll(null, Arrays.asList(1, 2, 3));
+      fail();
+    } catch (NullPointerException expected) {}
+    try {
+      builder.putAll(null, 1, 2, 3);
+      fail();
+    } catch (NullPointerException expected) {}
+    try {
+      builder.putAll(toPut);
+      fail();
+    } catch (NullPointerException expected) {}
+  }
+
+  public void testBuilderPutNullValue() {
+    Multimap<String, Integer> toPut = LinkedListMultimap.create();
+    toPut.put(null, 1);
+    ImmutableListMultimap.Builder<String, Integer> builder
+        = ImmutableListMultimap.builder();
+    try {
+      builder.put("foo", null);
+      fail();
+    } catch (NullPointerException expected) {}
+    try {
+      builder.putAll("foo", Arrays.asList(1, null, 3));
+      fail();
+    } catch (NullPointerException expected) {}
+    try {
+      builder.putAll("foo", 1, null, 3);
+      fail();
+    } catch (NullPointerException expected) {}
+    try {
+      builder.putAll(toPut);
+      fail();
+    } catch (NullPointerException expected) {}
+  }
+
+  public void testBuilderOrderKeysBy() {
+    ImmutableListMultimap.Builder<String, Integer> builder
+        = ImmutableListMultimap.builder();
+    builder.put("b", 3);
+    builder.put("d", 2);
+    builder.put("a", 5);
+    builder.orderKeysBy(Collections.reverseOrder());
+    builder.put("c", 4);
+    builder.put("a", 2);
+    builder.put("b", 6);
+    ImmutableListMultimap<String, Integer> multimap = builder.build();
+    ASSERT.that(multimap.keySet()).hasContentsInOrder("d", "c", "b", "a");
+    ASSERT.that(multimap.values()).hasContentsInOrder(2, 4, 3, 6, 5, 2);
+    ASSERT.that(multimap.get("a")).hasContentsInOrder(5, 2);
+    ASSERT.that(multimap.get("b")).hasContentsInOrder(3, 6);
+  }
+
+  public void testBuilderOrderValuesBy() {
+    ImmutableListMultimap.Builder<String, Integer> builder
+        = ImmutableListMultimap.builder();
+    builder.put("b", 3);
+    builder.put("d", 2);
+    builder.put("a", 5);
+    builder.orderValuesBy(Collections.reverseOrder());
+    builder.put("c", 4);
+    builder.put("a", 2);
+    builder.put("b", 6);
+    ImmutableListMultimap<String, Integer> multimap = builder.build();
+    ASSERT.that(multimap.keySet()).hasContentsInOrder("b", "d", "a", "c");
+    ASSERT.that(multimap.values()).hasContentsInOrder(6, 3, 2, 5, 2, 4);
+    ASSERT.that(multimap.get("a")).hasContentsInOrder(5, 2);
+    ASSERT.that(multimap.get("b")).hasContentsInOrder(6, 3);
+  }
+
+  public void testBuilderOrderKeysAndValuesBy() {
+    ImmutableListMultimap.Builder<String, Integer> builder
+        = ImmutableListMultimap.builder();
+    builder.put("b", 3);
+    builder.put("d", 2);
+    builder.put("a", 5);
+    builder.orderKeysBy(Collections.reverseOrder());
+    builder.orderValuesBy(Collections.reverseOrder());
+    builder.put("c", 4);
+    builder.put("a", 2);
+    builder.put("b", 6);
+    ImmutableListMultimap<String, Integer> multimap = builder.build();
+    ASSERT.that(multimap.keySet()).hasContentsInOrder("d", "c", "b", "a");
+    ASSERT.that(multimap.values()).hasContentsInOrder(2, 4, 6, 3, 5, 2);
+    ASSERT.that(multimap.get("a")).hasContentsInOrder(5, 2);
+    ASSERT.that(multimap.get("b")).hasContentsInOrder(6, 3);
+  }
+
+  public void testCopyOf() {
+    ArrayListMultimap<String, Integer> input = ArrayListMultimap.create();
+    input.put("foo", 1);
+    input.put("bar", 2);
+    input.put("foo", 3);
+    Multimap<String, Integer> multimap = ImmutableListMultimap.copyOf(input);
+    assertEquals(multimap, input);
+    assertEquals(input, multimap);
+  }
+
+  public void testCopyOfWithDuplicates() {
+    ArrayListMultimap<String, Integer> input = ArrayListMultimap.create();
+    input.put("foo", 1);
+    input.put("bar", 2);
+    input.put("foo", 3);
+    input.put("foo", 1);
+    Multimap<String, Integer> multimap = ImmutableListMultimap.copyOf(input);
+    assertEquals(multimap, input);
+    assertEquals(input, multimap);
+  }
+
+  public void testCopyOfEmpty() {
+    ArrayListMultimap<String, Integer> input = ArrayListMultimap.create();
+    Multimap<String, Integer> multimap = ImmutableListMultimap.copyOf(input);
+    assertEquals(multimap, input);
+    assertEquals(input, multimap);
+  }
+
+  public void testCopyOfImmutableListMultimap() {
+    Multimap<String, Integer> multimap = createMultimap();
+    assertSame(multimap, ImmutableListMultimap.copyOf(multimap));
+  }
+
+  public void testCopyOfNullKey() {
+    ArrayListMultimap<String, Integer> input = ArrayListMultimap.create();
+    input.put(null, 1);
+    try {
+      ImmutableListMultimap.copyOf(input);
+      fail();
+    } catch (NullPointerException expected) {}
+  }
+
+  public void testCopyOfNullValue() {
+    ArrayListMultimap<String, Integer> input = ArrayListMultimap.create();
+    input.putAll("foo", Arrays.asList(1, null, 3));
+    try {
+      ImmutableListMultimap.copyOf(input);
+      fail();
+    } catch (NullPointerException expected) {}
+  }
+
+  public void testEmptyMultimapReads() {
+    Multimap<String, Integer> multimap = ImmutableListMultimap.of();
+    assertFalse(multimap.containsKey("foo"));
+    assertFalse(multimap.containsValue(1));
+    assertFalse(multimap.containsEntry("foo", 1));
+    assertTrue(multimap.entries().isEmpty());
+    assertTrue(multimap.equals(ArrayListMultimap.create()));
+    assertEquals(Collections.emptyList(), multimap.get("foo"));
+    assertEquals(0, multimap.hashCode());
+    assertTrue(multimap.isEmpty());
+    assertEquals(HashMultiset.create(), multimap.keys());
+    assertEquals(Collections.emptySet(), multimap.keySet());
+    assertEquals(0, multimap.size());
+    assertTrue(multimap.values().isEmpty());
+    assertEquals("{}", multimap.toString());
+  }
+
+  public void testEmptyMultimapWrites() {
+    Multimap<String, Integer> multimap = ImmutableListMultimap.of();
+    UnmodifiableCollectionTests.assertMultimapIsUnmodifiable(
+        multimap, "foo", 1);
+  }
+
+  private Multimap<String, Integer> createMultimap() {
+    return ImmutableListMultimap.<String, Integer>builder()
+        .put("foo", 1).put("bar", 2).put("foo", 3).build();
+  }
+
+  public void testMultimapReads() {
+    Multimap<String, Integer> multimap = createMultimap();
+    assertTrue(multimap.containsKey("foo"));
+    assertFalse(multimap.containsKey("cat"));
+    assertTrue(multimap.containsValue(1));
+    assertFalse(multimap.containsValue(5));
+    assertTrue(multimap.containsEntry("foo", 1));
+    assertFalse(multimap.containsEntry("cat", 1));
+    assertFalse(multimap.containsEntry("foo", 5));
+    assertFalse(multimap.entries().isEmpty());
+    assertEquals(3, multimap.size());
+    assertFalse(multimap.isEmpty());
+    assertEquals("{foo=[1, 3], bar=[2]}", multimap.toString());
+  }
+
+  public void testMultimapWrites() {
+    Multimap<String, Integer> multimap = createMultimap();
+    UnmodifiableCollectionTests.assertMultimapIsUnmodifiable(
+        multimap, "bar", 2);
+  }
+
+  public void testMultimapEquals() {
+    Multimap<String, Integer> multimap = createMultimap();
+    Multimap<String, Integer> arrayListMultimap
+        = ArrayListMultimap.create();
+    arrayListMultimap.putAll("foo", Arrays.asList(1, 3));
+    arrayListMultimap.put("bar", 2);
+
+    new EqualsTester()
+        .addEqualityGroup(multimap, createMultimap(), arrayListMultimap,
+            ImmutableListMultimap.<String, Integer>builder()
+                .put("bar", 2).put("foo", 1).put("foo", 3).build())
+        .addEqualityGroup(ImmutableListMultimap.<String, Integer>builder()
+            .put("bar", 2).put("foo", 3).put("foo", 1).build())
+        .addEqualityGroup(ImmutableListMultimap.<String, Integer>builder()
+            .put("foo", 2).put("foo", 3).put("foo", 1).build())
+        .addEqualityGroup(ImmutableListMultimap.<String, Integer>builder()
+            .put("bar", 2).put("foo", 3).build())
+        .testEquals();
+  }
+
+  public void testOf() {
+    assertMultimapEquals(
+        ImmutableListMultimap.of("one", 1),
+        "one", 1);
+    assertMultimapEquals(
+        ImmutableListMultimap.of("one", 1, "two", 2),
+        "one", 1, "two", 2);
+    assertMultimapEquals(
+        ImmutableListMultimap.of("one", 1, "two", 2, "three", 3),
+        "one", 1, "two", 2, "three", 3);
+    assertMultimapEquals(
+        ImmutableListMultimap.of("one", 1, "two", 2, "three", 3, "four", 4),
+        "one", 1, "two", 2, "three", 3, "four", 4);
+    assertMultimapEquals(
+        ImmutableListMultimap.of(
+            "one", 1, "two", 2, "three", 3, "four", 4, "five", 5),
+        "one", 1, "two", 2, "three", 3, "four", 4, "five", 5);
+  }
+
+  public void testInverse() {
+    assertEquals(
+        ImmutableListMultimap.<Integer, String>of(),
+        ImmutableListMultimap.<String, Integer>of().inverse());
+    assertEquals(
+        ImmutableListMultimap.of(1, "one"),
+        ImmutableListMultimap.of("one", 1).inverse());
+    assertEquals(
+        ImmutableListMultimap.of(1, "one", 2, "two"),
+        ImmutableListMultimap.of("one", 1, "two", 2).inverse());
+    assertEquals(
+        ImmutableListMultimap.of("of", 'o', "of", 'f', "to", 't', "to", 'o').inverse(),
+        ImmutableListMultimap.of('o', "of", 'f', "of", 't', "to", 'o', "to"));
+    assertEquals(
+        ImmutableListMultimap.of('f', "foo", 'o', "foo", 'o', "foo"),
+        ImmutableListMultimap.of("foo", 'f', "foo", 'o', "foo", 'o').inverse());
+  }
+
+  public void testInverseMinimizesWork() {
+    ImmutableListMultimap<String, Character> multimap =
+        ImmutableListMultimap.<String, Character>builder()
+            .put("foo", 'f')
+            .put("foo", 'o')
+            .put("foo", 'o')
+            .put("poo", 'p')
+            .put("poo", 'o')
+            .put("poo", 'o')
+            .build();
+    assertSame(multimap.inverse(), multimap.inverse());
+    assertSame(multimap, multimap.inverse().inverse());
+  }
+
+  private static <K, V> void assertMultimapEquals(Multimap<K, V> multimap,
+      Object... alternatingKeysAndValues) {
+    assertEquals(multimap.size(), alternatingKeysAndValues.length / 2);
+    int i = 0;
+    for (Entry<K, V> entry : multimap.entries()) {
+      assertEquals(alternatingKeysAndValues[i++], entry.getKey());
+      assertEquals(alternatingKeysAndValues[i++], entry.getValue());
+    }
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testSerialization() {
+    Multimap<String, Integer> multimap = createMultimap();
+    SerializableTester.reserializeAndAssert(multimap);
+    assertEquals(multimap.size(),
+        SerializableTester.reserialize(multimap).size());
+    SerializableTester.reserializeAndAssert(multimap.get("foo"));
+    LenientSerializableTester.reserializeAndAssertLenient(multimap.keySet());
+    SerializableTester.reserializeAndAssert(multimap.keys());
+    SerializableTester.reserializeAndAssert(multimap.asMap());
+    Collection<Integer> valuesCopy
+        = SerializableTester.reserialize(multimap.values());
+    assertEquals(HashMultiset.create(multimap.values()),
+        HashMultiset.create(valuesCopy));
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testEmptySerialization() {
+    Multimap<String, Integer> multimap = ImmutableListMultimap.of();
+    assertSame(multimap, SerializableTester.reserialize(multimap));
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/ImmutableListTest.java b/guava-tests/test/com/google/common/collect/ImmutableListTest.java
new file mode 100644
index 0000000..ced0635
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/ImmutableListTest.java
@@ -0,0 +1,782 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.collect.Iterables.getOnlyElement;
+import static com.google.common.collect.Iterables.unmodifiableIterable;
+import static com.google.common.collect.Sets.newHashSet;
+import static java.lang.reflect.Proxy.newProxyInstance;
+import static java.util.Arrays.asList;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.collect.testing.Helpers;
+import com.google.common.collect.testing.ListTestSuiteBuilder;
+import com.google.common.collect.testing.MinimalCollection;
+import com.google.common.collect.testing.MinimalIterable;
+import com.google.common.collect.testing.TestStringListGenerator;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.google.ListGenerators.BuilderAddAllListGenerator;
+import com.google.common.collect.testing.google.ListGenerators.BuilderReversedListGenerator;
+import com.google.common.collect.testing.google.ListGenerators.ImmutableListHeadSubListGenerator;
+import com.google.common.collect.testing.google.ListGenerators.ImmutableListMiddleSubListGenerator;
+import com.google.common.collect.testing.google.ListGenerators.ImmutableListOfGenerator;
+import com.google.common.collect.testing.google.ListGenerators.ImmutableListTailSubListGenerator;
+import com.google.common.collect.testing.google.ListGenerators.UnhashableElementsImmutableListGenerator;
+import com.google.common.collect.testing.testers.ListHashCodeTester;
+import com.google.common.testing.NullPointerTester;
+import com.google.common.testing.SerializableTester;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+/**
+ * Unit test for {@link ImmutableList}.
+ *
+ * @author Kevin Bourrillion
+ * @author George van den Driessche
+ * @author Jared Levy
+ */
+@GwtCompatible(emulated = true)
+public class ImmutableListTest extends TestCase {
+  
+  @GwtIncompatible("suite")
+  public static Test suite() {
+    TestSuite suite = new TestSuite();
+    suite.addTest(ListTestSuiteBuilder.using(new ImmutableListOfGenerator())
+        .named("ImmutableList")
+        .withFeatures(CollectionSize.ANY,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .createTestSuite());
+    suite.addTest(ListTestSuiteBuilder.using(new BuilderAddAllListGenerator())
+        .named("ImmutableList, built with Builder.add")
+        .withFeatures(CollectionSize.ANY,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .createTestSuite());
+    suite.addTest(ListTestSuiteBuilder.using(new BuilderAddAllListGenerator())
+        .named("ImmutableList, built with Builder.addAll")
+        .withFeatures(CollectionSize.ANY,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .createTestSuite());
+    suite.addTest(ListTestSuiteBuilder.using(new BuilderReversedListGenerator())
+        .named("ImmutableList, reversed")
+        .withFeatures(CollectionSize.ANY,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .createTestSuite());
+    suite.addTest(ListTestSuiteBuilder.using(new TestStringListGenerator() {
+          @Override protected List<String> create(String[] elements) {
+            return SerializableTester.reserialize(
+                ImmutableList.copyOf(elements));
+          }
+        })
+        .named("ImmutableList, reserialized")
+        .withFeatures(CollectionSize.ANY,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .createTestSuite());
+    suite.addTest(ListTestSuiteBuilder.using(
+        new ImmutableListHeadSubListGenerator())
+        .named("ImmutableList, head subList")
+        .withFeatures(CollectionSize.ANY,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .createTestSuite());
+    suite.addTest(ListTestSuiteBuilder.using(
+        new ImmutableListTailSubListGenerator())
+        .named("ImmutableList, tail subList")
+        .withFeatures(CollectionSize.ANY,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .createTestSuite());
+    suite.addTest(ListTestSuiteBuilder.using(
+        new ImmutableListMiddleSubListGenerator())
+        .named("ImmutableList, middle subList")
+        .withFeatures(CollectionSize.ANY,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .createTestSuite());
+    suite.addTest(ListTestSuiteBuilder.using(
+        new UnhashableElementsImmutableListGenerator())
+        .suppressing(ListHashCodeTester.getHashCodeMethod())
+        .named("ImmutableList, unhashable values")
+        .withFeatures(CollectionSize.ANY,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .createTestSuite());
+    return suite;
+  }
+
+  public static class CreationTests extends TestCase {
+    public void testCreation_noArgs() {
+      List<String> list = ImmutableList.of();
+      assertEquals(Collections.emptyList(), list);
+    }
+
+    public void testCreation_oneElement() {
+      List<String> list = ImmutableList.of("a");
+      assertEquals(Collections.singletonList("a"), list);
+    }
+
+    public void testCreation_twoElements() {
+      List<String> list = ImmutableList.of("a", "b");
+      assertEquals(Lists.newArrayList("a", "b"), list);
+    }
+
+    public void testCreation_threeElements() {
+      List<String> list = ImmutableList.of("a", "b", "c");
+      assertEquals(Lists.newArrayList("a", "b", "c"), list);
+    }
+
+    public void testCreation_fourElements() {
+      List<String> list = ImmutableList.of("a", "b", "c", "d");
+      assertEquals(Lists.newArrayList("a", "b", "c", "d"), list);
+    }
+
+    public void testCreation_fiveElements() {
+      List<String> list = ImmutableList.of("a", "b", "c", "d", "e");
+      assertEquals(Lists.newArrayList("a", "b", "c", "d", "e"), list);
+    }
+
+    public void testCreation_sixElements() {
+      List<String> list = ImmutableList.of("a", "b", "c", "d", "e", "f");
+      assertEquals(Lists.newArrayList("a", "b", "c", "d", "e", "f"), list);
+    }
+
+    public void testCreation_sevenElements() {
+      List<String> list = ImmutableList.of("a", "b", "c", "d", "e", "f", "g");
+      assertEquals(Lists.newArrayList("a", "b", "c", "d", "e", "f", "g"), list);
+    }
+
+    public void testCreation_eightElements() {
+      List<String> list = ImmutableList.of(
+          "a", "b", "c", "d", "e", "f", "g", "h");
+      assertEquals(Lists.newArrayList(
+          "a", "b", "c", "d", "e", "f", "g", "h"), list);
+    }
+
+    public void testCreation_nineElements() {
+      List<String> list = ImmutableList.of(
+          "a", "b", "c", "d", "e", "f", "g", "h", "i");
+      assertEquals(Lists.newArrayList(
+          "a", "b", "c", "d", "e", "f", "g", "h", "i"), list);
+    }
+
+    public void testCreation_tenElements() {
+      List<String> list = ImmutableList.of(
+          "a", "b", "c", "d", "e", "f", "g", "h", "i", "j");
+      assertEquals(Lists.newArrayList(
+          "a", "b", "c", "d", "e", "f", "g", "h", "i", "j"), list);
+    }
+
+    public void testCreation_elevenElements() {
+      List<String> list = ImmutableList.of(
+          "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k");
+      assertEquals(Lists.newArrayList(
+          "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k"), list);
+    }
+
+    // Varargs versions
+    
+    public void testCreation_twelveElements() {
+      List<String> list = ImmutableList.of(
+          "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l");
+      assertEquals(Lists.newArrayList(
+          "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l"), list);
+    }
+
+    public void testCreation_thirteenElements() {
+      List<String> list = ImmutableList.of(
+          "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m");
+      assertEquals(Lists.newArrayList(
+          "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m"),
+          list);
+    }
+
+    public void testCreation_fourteenElements() {
+      List<String> list = ImmutableList.of(
+          "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n");
+      assertEquals(Lists.newArrayList(
+          "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n"),
+          list);
+    }
+
+    public void testCreation_singletonNull() {
+      try {
+        ImmutableList.of((String) null);
+        fail();
+      } catch (NullPointerException expected) {
+      }
+    }
+
+    public void testCreation_withNull() {
+      try {
+        ImmutableList.of("a", null, "b");
+        fail();
+      } catch (NullPointerException expected) {
+      }
+    }
+
+    public void testCreation_generic() {
+      List<String> a = ImmutableList.of("a");
+      // only verify that there is no compile warning
+      ImmutableList.of(a, a);
+    }
+
+    public void testCreation_arrayOfArray() {
+      String[] array = new String[] { "a" };
+      List<String[]> list = ImmutableList.<String[]>of(array);
+      assertEquals(Collections.singletonList(array), list);
+    }    
+
+    public void testCopyOf_emptyArray() {
+      String[] array = new String[0];
+      List<String> list = ImmutableList.copyOf(array);
+      assertEquals(Collections.emptyList(), list);
+    }
+
+    public void testCopyOf_arrayOfOneElement() {
+      String[] array = new String[] { "a" };
+      List<String> list = ImmutableList.copyOf(array);
+      assertEquals(Collections.singletonList("a"), list);
+    }
+
+    public void testCopyOf_nullArray() {
+      try {
+        ImmutableList.copyOf((String[]) null);
+        fail();
+      } catch(NullPointerException expected) {        
+      }
+    }
+
+    public void testCopyOf_arrayContainingOnlyNull() {
+      String[] array = new String[] { null };
+      try {
+        ImmutableList.copyOf(array);
+        fail();
+      } catch (NullPointerException expected) {
+      }
+    }
+
+    public void testCopyOf_collection_empty() {
+      // "<String>" is required to work around a javac 1.5 bug.
+      Collection<String> c = MinimalCollection.<String>of();
+      List<String> list = ImmutableList.copyOf(c);
+      assertEquals(Collections.emptyList(), list);
+    }
+
+    public void testCopyOf_collection_oneElement() {
+      Collection<String> c = MinimalCollection.of("a");
+      List<String> list = ImmutableList.copyOf(c);
+      assertEquals(Collections.singletonList("a"), list);
+    }
+
+    public void testCopyOf_collection_general() {
+      Collection<String> c = MinimalCollection.of("a", "b", "a");
+      List<String> list = ImmutableList.copyOf(c);
+      assertEquals(asList("a", "b", "a"), list);
+      List<String> mutableList = asList("a", "b");
+      list = ImmutableList.copyOf(mutableList);
+      mutableList.set(0, "c");
+      assertEquals(asList("a", "b"), list);
+    }
+
+    public void testCopyOf_collectionContainingNull() {
+      Collection<String> c = MinimalCollection.of("a", null, "b");
+      try {
+        ImmutableList.copyOf(c);
+        fail();
+      } catch (NullPointerException expected) {
+      }
+    }
+
+    public void testCopyOf_iterator_empty() {
+      Iterator<String> iterator = Iterators.emptyIterator();
+      List<String> list = ImmutableList.copyOf(iterator);
+      assertEquals(Collections.emptyList(), list);
+    }
+
+    public void testCopyOf_iterator_oneElement() {
+      Iterator<String> iterator = Iterators.singletonIterator("a");
+      List<String> list = ImmutableList.copyOf(iterator);
+      assertEquals(Collections.singletonList("a"), list);
+    }
+
+    public void testCopyOf_iterator_general() {
+      Iterator<String> iterator = asList("a", "b", "a").iterator();
+      List<String> list = ImmutableList.copyOf(iterator);
+      assertEquals(asList("a", "b", "a"), list);
+    }
+
+    public void testCopyOf_iteratorContainingNull() {
+      Iterator<String> iterator = asList("a", null, "b").iterator();
+      try {
+        ImmutableList.copyOf(iterator);
+        fail();
+      } catch (NullPointerException expected) {
+      }
+    }
+    
+    public void testCopyOf_iteratorNull() {
+      try {
+        ImmutableList.copyOf((Iterator<String>) null);
+        fail();
+      } catch(NullPointerException expected) {
+      }
+    }
+    
+    public void testCopyOf_concurrentlyMutating() {
+      List<String> sample = Lists.newArrayList("a", "b", "c");
+      for (int delta : new int[] {-1, 0, 1}) {
+        for (int i = 0; i < sample.size(); i++) {
+          Collection<String> misleading =
+              Helpers.misleadingSizeCollection(delta);
+          List<String> expected = sample.subList(0, i);
+          misleading.addAll(expected);
+          assertEquals(expected, ImmutableList.copyOf(misleading));
+          assertEquals(expected,
+              ImmutableList.copyOf((Iterable<String>) misleading));
+        }
+      }
+    }
+
+    private static class CountingIterable implements Iterable<String> {
+      int count = 0;
+      @Override
+      public Iterator<String> iterator() {
+        count++;
+        return asList("a", "b", "a").iterator();
+      }
+    }
+
+    public void testCopyOf_plainIterable() {
+      CountingIterable iterable = new CountingIterable();
+      List<String> list = ImmutableList.copyOf(iterable);
+      assertEquals(asList("a", "b", "a"), list);
+    }
+
+    public void testCopyOf_plainIterable_iteratesOnce() {
+      CountingIterable iterable = new CountingIterable();
+      ImmutableList.copyOf(iterable);
+      assertEquals(1, iterable.count);
+    }
+
+    public void testCopyOf_shortcut_empty() {
+      Collection<String> c = ImmutableList.of();
+      assertSame(c, ImmutableList.copyOf(c));
+    }
+
+    public void testCopyOf_shortcut_singleton() {
+      Collection<String> c = ImmutableList.of("a");
+      assertSame(c, ImmutableList.copyOf(c));
+    }
+
+    public void testCopyOf_shortcut_immutableList() {
+      Collection<String> c = ImmutableList.of("a", "b", "c");
+      assertSame(c, ImmutableList.copyOf(c));
+    }
+  }
+  
+  @GwtIncompatible("reflection")
+  public static class ConcurrentTests extends TestCase {  
+    enum WrapWithIterable { WRAP, NO_WRAP }
+
+    private static void runConcurrentlyMutatedTest(
+        Collection<Integer> initialContents,
+        Iterable<ListFrobber> actionsToPerformConcurrently,
+        WrapWithIterable wrap) {
+      ConcurrentlyMutatedList<Integer> concurrentlyMutatedList =
+          newConcurrentlyMutatedList(
+              initialContents, actionsToPerformConcurrently);
+
+      Iterable<Integer> iterableToCopy = wrap == WrapWithIterable.WRAP
+          ? unmodifiableIterable(concurrentlyMutatedList)
+          : concurrentlyMutatedList;
+
+      ImmutableList<Integer> copyOfIterable =
+          ImmutableList.copyOf(iterableToCopy);
+
+      assertTrue(concurrentlyMutatedList.getAllStates()
+          .contains(copyOfIterable));
+
+      // Check that it's a RegularImmutableList iff it is nonempty:
+      assertEquals(copyOfIterable.size() == 0, copyOfIterable.isEmpty());
+    }
+
+    private static void runConcurrentlyMutatedTest(WrapWithIterable wrap) {
+      /*
+       * TODO: Iterate over many array sizes and all possible operation lists,
+       * performing adds and removes in different ways.
+       */
+      runConcurrentlyMutatedTest(
+          elements(),
+          ops(add(1), add(2)),
+          wrap);
+
+      runConcurrentlyMutatedTest(
+          elements(),
+          ops(add(1), nop()),
+          wrap);
+
+      runConcurrentlyMutatedTest(
+          elements(),
+          ops(add(1), remove()),
+          wrap);
+
+      runConcurrentlyMutatedTest(
+          elements(),
+          ops(nop(), add(1)),
+          wrap);
+
+      runConcurrentlyMutatedTest(
+          elements(1),
+          ops(remove(), nop()),
+          wrap);
+
+      runConcurrentlyMutatedTest(
+          elements(1),
+          ops(remove(), add(2)),
+          wrap);
+
+      runConcurrentlyMutatedTest(
+          elements(1, 2),
+          ops(remove(), remove()),
+          wrap);
+
+      runConcurrentlyMutatedTest(
+          elements(1, 2),
+          ops(remove(), nop()),
+          wrap);
+
+      runConcurrentlyMutatedTest(
+          elements(1, 2),
+          ops(remove(), add(3)),
+          wrap);
+
+      runConcurrentlyMutatedTest(
+          elements(1, 2),
+          ops(nop(), remove()),
+          wrap);
+
+      runConcurrentlyMutatedTest(
+          elements(1, 2, 3),
+          ops(remove(), remove()),
+          wrap);
+    }
+
+    private static ImmutableList<Integer> elements(Integer... elements) {
+      return ImmutableList.copyOf(elements);
+    }
+
+    private static ImmutableList<ListFrobber> ops(ListFrobber... elements) {
+      return ImmutableList.copyOf(elements);
+    }
+
+    public void testCopyOf_concurrentlyMutatedList() {
+      runConcurrentlyMutatedTest(WrapWithIterable.NO_WRAP);
+    }
+
+    public void testCopyOf_concurrentlyMutatedIterable() {
+      runConcurrentlyMutatedTest(WrapWithIterable.WRAP);
+    }
+
+    /** An operation to perform on a list. */
+    interface ListFrobber {
+      void perform(List<Integer> list);
+    }
+
+    static final ListFrobber add(final int element) {
+      return new ListFrobber() {
+        @Override
+        public void perform(List<Integer> list) {
+          list.add(0, element);
+        }
+      };
+    }
+
+    static final ListFrobber remove() {
+      return new ListFrobber() {
+        @Override
+        public void perform(List<Integer> list) {
+          list.remove(0);
+        }
+      };
+    }
+
+    static final ListFrobber nop() {
+      return new ListFrobber() {
+        @Override
+        public void perform(List<Integer> list) {
+        }
+      };
+    }
+
+    /**
+     * A list that mutates itself after every call to each of its {@link List}
+     * methods.
+     */
+    interface ConcurrentlyMutatedList<E> extends List<E> {
+      /**
+       * The elements of a {@link ConcurrentlyMutatedList} are added and removed
+       * over time. This method returns every state that the list has passed
+       * through at some point.
+       */
+      Set<List<E>> getAllStates();
+    }
+
+    /**
+     * Returns a {@link ConcurrentlyMutatedList} that performs the given
+     * operations as its concurrent modifications. The mutations occur in the
+     * same thread as the triggering method call.
+     */
+    private static ConcurrentlyMutatedList<Integer> newConcurrentlyMutatedList(
+        final Collection<Integer> initialContents,
+        final Iterable<ListFrobber> actionsToPerformConcurrently) {
+      InvocationHandler invocationHandler = new InvocationHandler() {
+        final CopyOnWriteArrayList<Integer> delegate =
+            new CopyOnWriteArrayList<Integer>(initialContents);
+
+        final Method getAllStatesMethod = getOnlyElement(asList(
+            ConcurrentlyMutatedList.class.getDeclaredMethods()));
+
+        final Iterator<ListFrobber> remainingActions =
+            actionsToPerformConcurrently.iterator();
+
+        final Set<List<Integer>> allStates = newHashSet();
+
+        @Override
+        public Object invoke(Object proxy, Method method,
+            Object[] args) throws Throwable {
+          return method.equals(getAllStatesMethod)
+              ? getAllStates()
+              : invokeListMethod(method, args);
+        }
+
+        private Set<List<Integer>> getAllStates() {
+          return allStates;
+        }
+
+        private Object invokeListMethod(Method method, Object[] args)
+            throws Throwable {
+          try {
+            Object returnValue = method.invoke(delegate, args);
+            mutateDelegate();
+            return returnValue;
+          } catch (InvocationTargetException e) {
+            throw e.getCause();
+          } catch (IllegalAccessException e) {
+            throw new AssertionError(e);
+          }
+        }
+
+        private void mutateDelegate() {
+          allStates.add(ImmutableList.copyOf(delegate));
+          remainingActions.next().perform(delegate);
+          allStates.add(ImmutableList.copyOf(delegate));
+        }
+      };
+
+      @SuppressWarnings("unchecked")
+      ConcurrentlyMutatedList<Integer> list =
+          (ConcurrentlyMutatedList<Integer>) newProxyInstance(
+              ImmutableListTest.CreationTests.class.getClassLoader(),
+              new Class[] {ConcurrentlyMutatedList.class}, invocationHandler);
+      return list;
+    }
+  }
+  
+  public static class BasicTests extends TestCase {
+
+    @GwtIncompatible("NullPointerTester")
+    public void testNullPointers() throws Exception {
+      NullPointerTester tester = new NullPointerTester();
+      tester.testAllPublicStaticMethods(ImmutableList.class);
+      tester.testAllPublicInstanceMethods(ImmutableList.of(1, 2, 3));
+    }
+
+    @GwtIncompatible("SerializableTester")
+    public void testSerialization_empty() {
+      Collection<String> c = ImmutableList.of();
+      assertSame(c, SerializableTester.reserialize(c));
+    }
+
+    @GwtIncompatible("SerializableTester")
+    public void testSerialization_singleton() {
+      Collection<String> c = ImmutableList.of("a");
+      ImmutableList<String> copy = (SingletonImmutableList<String>)
+          SerializableTester.reserializeAndAssert(c);
+    }
+
+    @GwtIncompatible("SerializableTester")
+    public void testSerialization_multiple() {
+      Collection<String> c = ImmutableList.of("a", "b", "c");
+      SerializableTester.reserializeAndAssert(c);
+    }
+
+    public void testEquals_immutableList() {
+      Collection<String> c = ImmutableList.of("a", "b", "c");
+      assertTrue(c.equals(ImmutableList.of("a", "b", "c")));
+      assertFalse(c.equals(ImmutableList.of("a", "c", "b")));
+      assertFalse(c.equals(ImmutableList.of("a", "b")));
+      assertFalse(c.equals(ImmutableList.of("a", "b", "c", "d")));
+    }
+
+    public void testBuilderAdd() {
+      ImmutableList<String> list = new ImmutableList.Builder<String>()
+          .add("a")
+          .add("b")
+          .add("a")
+          .add("c")
+          .build();
+      assertEquals(asList("a", "b", "a", "c"), list);
+    }
+
+    public void testBuilderAdd_varargs() {
+      ImmutableList<String> list = new ImmutableList.Builder<String>()
+          .add("a", "b", "a", "c")
+          .build();
+      assertEquals(asList("a", "b", "a", "c"), list);
+    }
+
+    public void testBuilderAddAll_iterable() {
+      List<String> a = asList("a", "b");
+      List<String> b = asList("c", "d");
+      ImmutableList<String> list = new ImmutableList.Builder<String>()
+          .addAll(a)
+          .addAll(b)
+          .build();
+      assertEquals(asList( "a", "b", "c", "d"), list);
+      b.set(0, "f");
+      assertEquals(asList( "a", "b", "c", "d"), list);
+    }
+
+    public void testBuilderAddAll_iterator() {
+      List<String> a = asList("a", "b");
+      List<String> b = asList("c", "d");
+      ImmutableList<String> list = new ImmutableList.Builder<String>()
+          .addAll(a.iterator())
+          .addAll(b.iterator())
+          .build();
+      assertEquals(asList( "a", "b", "c", "d"), list);
+      b.set(0, "f");
+      assertEquals(asList( "a", "b", "c", "d"), list);
+    }
+
+    public void testComplexBuilder() {
+      List<Integer> colorElem = asList(0x00, 0x33, 0x66, 0x99, 0xCC, 0xFF);
+      ImmutableList.Builder<Integer> webSafeColorsBuilder
+          = ImmutableList.builder();
+      for (Integer red : colorElem) {
+        for (Integer green : colorElem) {
+          for (Integer blue : colorElem) {
+            webSafeColorsBuilder.add((red << 16) + (green << 8) + blue);
+          }
+        }
+      }
+      ImmutableList<Integer> webSafeColors = webSafeColorsBuilder.build();
+      assertEquals(216, webSafeColors.size());
+      Integer[] webSafeColorArray =
+          webSafeColors.toArray(new Integer[webSafeColors.size()]);
+      assertEquals(0x000000, (int) webSafeColorArray[0]);
+      assertEquals(0x000033, (int) webSafeColorArray[1]);
+      assertEquals(0x000066, (int) webSafeColorArray[2]);
+      assertEquals(0x003300, (int) webSafeColorArray[6]);
+      assertEquals(0x330000, (int) webSafeColorArray[36]);
+      assertEquals(0x000066, (int) webSafeColors.get(2));
+      assertEquals(0x003300, (int) webSafeColors.get(6));
+      ImmutableList<Integer> addedColor
+          = webSafeColorsBuilder.add(0x00BFFF).build();
+      assertEquals("Modifying the builder should not have changed any already"
+          + " built sets", 216, webSafeColors.size());
+      assertEquals("the new array should be one bigger than webSafeColors",
+          217, addedColor.size());
+      Integer[] appendColorArray =
+          addedColor.toArray(new Integer[addedColor.size()]);
+      assertEquals(0x00BFFF, (int) appendColorArray[216]);
+    }
+
+    public void testBuilderAddHandlesNullsCorrectly() {
+      ImmutableList.Builder<String> builder = ImmutableList.builder();
+      try {
+        builder.add((String) null);
+        fail("expected NullPointerException");
+      } catch (NullPointerException expected) {
+      }
+
+      try {
+        builder.add((String[]) null);
+        fail("expected NullPointerException");
+      } catch (NullPointerException expected) {
+      }
+
+      try {
+        builder.add("a", null, "b");
+        fail("expected NullPointerException");
+      } catch (NullPointerException expected) {
+      }
+    }
+
+    public void testBuilderAddAllHandlesNullsCorrectly() {
+      ImmutableList.Builder<String> builder = ImmutableList.builder();
+      try {
+        builder.addAll((Iterable<String>) null);
+        fail("expected NullPointerException");
+      } catch (NullPointerException expected) {
+      }
+
+      try {
+        builder.addAll((Iterator<String>) null);
+        fail("expected NullPointerException");
+      } catch (NullPointerException expected) {
+      }
+
+      builder = ImmutableList.builder();
+      List<String> listWithNulls = asList("a", null, "b");
+      try {
+        builder.addAll(listWithNulls);
+        fail("expected NullPointerException");
+      } catch (NullPointerException expected) {
+      }
+
+      builder = ImmutableList.builder();
+      Iterator<String> iteratorWithNulls = asList("a", null, "b").iterator();
+      try {
+        builder.addAll(iteratorWithNulls);
+        fail("expected NullPointerException");
+      } catch (NullPointerException expected) {
+      }
+
+      Iterable<String> iterableWithNulls = MinimalIterable.of("a", null, "b");
+      try {
+        builder.addAll(iterableWithNulls);
+        fail("expected NullPointerException");
+      } catch (NullPointerException expected) {
+      }
+    }
+
+    public void testAsList() {
+      ImmutableList<String> list = ImmutableList.of("a", "b");
+      assertSame(list, list.asList());
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/ImmutableMapTest.java b/guava-tests/test/com/google/common/collect/ImmutableMapTest.java
new file mode 100644
index 0000000..4c04803
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/ImmutableMapTest.java
@@ -0,0 +1,588 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.testing.SerializableTester.reserialize;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.base.Joiner;
+import com.google.common.collect.ImmutableMap.Builder;
+import com.google.common.collect.testing.CollectionTestSuiteBuilder;
+import com.google.common.collect.testing.ListTestSuiteBuilder;
+import com.google.common.collect.testing.MapInterfaceTest;
+import com.google.common.collect.testing.MinimalSet;
+import com.google.common.collect.testing.ReserializingTestCollectionGenerator;
+import com.google.common.collect.testing.ReserializingTestSetGenerator;
+import com.google.common.collect.testing.SampleElements.Colliders;
+import com.google.common.collect.testing.SampleElements.Unhashables;
+import com.google.common.collect.testing.SetTestSuiteBuilder;
+import com.google.common.collect.testing.UnhashableObject;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.google.MapGenerators.ImmutableMapEntrySetGenerator;
+import com.google.common.collect.testing.google.MapGenerators.ImmutableMapKeySetGenerator;
+import com.google.common.collect.testing.google.MapGenerators.ImmutableMapUnhashableValuesGenerator;
+import com.google.common.collect.testing.google.MapGenerators.ImmutableMapValueListGenerator;
+import com.google.common.collect.testing.google.MapGenerators.ImmutableMapValuesGenerator;
+import com.google.common.testing.NullPointerTester;
+import com.google.common.testing.SerializableTester;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+
+/**
+ * Tests for {@link ImmutableMap}.
+ *
+ * @author Kevin Bourrillion
+ * @author Jesse Wilson
+ */
+@GwtCompatible(emulated = true)
+public class ImmutableMapTest extends TestCase {
+
+  @GwtIncompatible("suite")
+  public static Test suite() {
+    TestSuite suite = new TestSuite();
+    suite.addTestSuite(ImmutableMapTest.class);
+
+    suite.addTest(SetTestSuiteBuilder.using(new ImmutableMapKeySetGenerator())
+        .withFeatures(
+            CollectionSize.ANY,
+            CollectionFeature.KNOWN_ORDER,
+            CollectionFeature.REJECTS_DUPLICATES_AT_CREATION,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .named("ImmutableMap.keySet")
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(new ImmutableMapEntrySetGenerator())
+        .withFeatures(
+            CollectionSize.ANY,
+            CollectionFeature.KNOWN_ORDER,
+            CollectionFeature.REJECTS_DUPLICATES_AT_CREATION,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .named("ImmutableMap.entrySet")
+        .createTestSuite());
+
+    suite.addTest(CollectionTestSuiteBuilder.using(
+        new ImmutableMapValuesGenerator())
+        .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .named("ImmutableMap.values")
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(
+        ReserializingTestSetGenerator.newInstance(
+            new ImmutableMapKeySetGenerator()))
+        .withFeatures(
+            CollectionSize.ANY,
+            CollectionFeature.KNOWN_ORDER,
+            CollectionFeature.REJECTS_DUPLICATES_AT_CREATION,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .named("ImmutableMap.keySet, reserialized")
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(
+        ReserializingTestSetGenerator.newInstance(
+            new ImmutableMapKeySetGenerator()))
+        .withFeatures(
+            CollectionSize.ANY,
+            CollectionFeature.KNOWN_ORDER,
+            CollectionFeature.REJECTS_DUPLICATES_AT_CREATION,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .named("ImmutableMap.entrySet, reserialized")
+        .createTestSuite());
+
+    suite.addTest(CollectionTestSuiteBuilder.using(
+        ReserializingTestCollectionGenerator.newInstance(
+            new ImmutableMapValuesGenerator()))
+        .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .named("ImmutableMap.values, reserialized")
+        .createTestSuite());
+
+    suite.addTest(CollectionTestSuiteBuilder.using(
+            new ImmutableMapUnhashableValuesGenerator())
+        .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .named("ImmutableMap.values, unhashable")
+        .createTestSuite());
+
+    suite.addTest(ListTestSuiteBuilder.using(
+        new ImmutableMapValueListGenerator())
+        .named("ImmutableMap.values.asList")
+        .withFeatures(CollectionSize.ANY,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .createTestSuite());
+
+    return suite;
+  }
+
+  public abstract static class AbstractMapTests<K, V>
+      extends MapInterfaceTest<K, V> {
+    public AbstractMapTests() {
+      super(false, false, false, false, false);
+    }
+
+    @Override protected Map<K, V> makeEmptyMap() {
+      throw new UnsupportedOperationException();
+    }
+
+    private static final Joiner joiner = Joiner.on(", ");
+
+    @Override protected void assertMoreInvariants(Map<K, V> map) {
+      // TODO: can these be moved to MapInterfaceTest?
+      for (Entry<K, V> entry : map.entrySet()) {
+        assertEquals(entry.getKey() + "=" + entry.getValue(),
+            entry.toString());
+      }
+
+      assertEquals("{" + joiner.join(map.entrySet()) + "}",
+          map.toString());
+      assertEquals("[" + joiner.join(map.entrySet()) + "]",
+          map.entrySet().toString());
+      assertEquals("[" + joiner.join(map.keySet()) + "]",
+          map.keySet().toString());
+      assertEquals("[" + joiner.join(map.values()) + "]",
+          map.values().toString());
+
+      assertEquals(MinimalSet.from(map.entrySet()), map.entrySet());
+      assertEquals(Sets.newHashSet(map.keySet()), map.keySet());
+    }
+  }
+
+  public static class MapTests extends AbstractMapTests<String, Integer> {
+    @Override protected Map<String, Integer> makeEmptyMap() {
+      return ImmutableMap.of();
+    }
+
+    @Override protected Map<String, Integer> makePopulatedMap() {
+      return ImmutableMap.of("one", 1, "two", 2, "three", 3);
+    }
+
+    @Override protected String getKeyNotInPopulatedMap() {
+      return "minus one";
+    }
+
+    @Override protected Integer getValueNotInPopulatedMap() {
+      return -1;
+    }
+  }
+
+  public static class SingletonMapTests
+      extends AbstractMapTests<String, Integer> {
+    @Override protected Map<String, Integer> makePopulatedMap() {
+      return ImmutableMap.of("one", 1);
+    }
+
+    @Override protected String getKeyNotInPopulatedMap() {
+      return "minus one";
+    }
+
+    @Override protected Integer getValueNotInPopulatedMap() {
+      return -1;
+    }
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public static class ReserializedMapTests
+      extends AbstractMapTests<String, Integer> {
+    @Override protected Map<String, Integer> makePopulatedMap() {
+      return SerializableTester.reserialize(
+          ImmutableMap.of("one", 1, "two", 2, "three", 3));
+    }
+
+    @Override protected String getKeyNotInPopulatedMap() {
+      return "minus one";
+    }
+
+    @Override protected Integer getValueNotInPopulatedMap() {
+      return -1;
+    }
+  }
+
+  public static class MapTestsWithBadHashes
+      extends AbstractMapTests<Object, Integer> {
+
+    @Override protected Map<Object, Integer> makeEmptyMap() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override protected Map<Object, Integer> makePopulatedMap() {
+      Colliders colliders = new Colliders();
+      return ImmutableMap.of(
+          colliders.e0, 0,
+          colliders.e1, 1,
+          colliders.e2, 2,
+          colliders.e3, 3);
+    }
+
+    @Override protected Object getKeyNotInPopulatedMap() {
+      return new Colliders().e4;
+    }
+
+    @Override protected Integer getValueNotInPopulatedMap() {
+      return 4;
+    }
+  }
+
+  @GwtIncompatible("GWT's ImmutableMap emulation is backed by java.util.HashMap.")
+  public static class MapTestsWithUnhashableValues
+      extends AbstractMapTests<Integer, UnhashableObject> {
+    @Override protected Map<Integer, UnhashableObject> makeEmptyMap() {
+      return ImmutableMap.of();
+    }
+
+    @Override protected Map<Integer, UnhashableObject> makePopulatedMap() {
+      Unhashables unhashables = new Unhashables();
+      return ImmutableMap.of(
+          0, unhashables.e0, 1, unhashables.e1, 2, unhashables.e2);
+    }
+
+    @Override protected Integer getKeyNotInPopulatedMap() {
+      return 3;
+    }
+
+    @Override protected UnhashableObject getValueNotInPopulatedMap() {
+      return new Unhashables().e3;
+    }
+  }
+
+  @GwtIncompatible("GWT's ImmutableMap emulation is backed by java.util.HashMap.")
+  public static class MapTestsWithSingletonUnhashableValue
+      extends MapTestsWithUnhashableValues {
+    @Override protected Map<Integer, UnhashableObject> makePopulatedMap() {
+      Unhashables unhashables = new Unhashables();
+      return ImmutableMap.of(0, unhashables.e0);
+    }
+  }
+
+  public static class CreationTests extends TestCase {
+    public void testEmptyBuilder() {
+      ImmutableMap<String, Integer> map
+          = new Builder<String, Integer>().build();
+      assertEquals(Collections.<String, Integer>emptyMap(), map);
+    }
+
+    public void testSingletonBuilder() {
+      ImmutableMap<String, Integer> map = new Builder<String, Integer>()
+          .put("one", 1)
+          .build();
+      assertMapEquals(map, "one", 1);
+    }
+
+    public void testBuilder() {
+      ImmutableMap<String, Integer> map = new Builder<String, Integer>()
+          .put("one", 1)
+          .put("two", 2)
+          .put("three", 3)
+          .put("four", 4)
+          .put("five", 5)
+          .build();
+      assertMapEquals(map,
+          "one", 1, "two", 2, "three", 3, "four", 4, "five", 5);
+    }
+
+    public void testBuilder_withImmutableEntry() {
+      ImmutableMap<String, Integer> map = new Builder<String, Integer>()
+          .put(Maps.immutableEntry("one", 1))
+          .build();
+      assertMapEquals(map, "one", 1);
+    }
+
+    public void testBuilder_withImmutableEntryAndNullContents() {
+      Builder<String, Integer> builder = new Builder<String, Integer>();
+      try {
+        builder.put(Maps.immutableEntry("one", (Integer) null));
+        fail();
+      } catch (NullPointerException expected) {
+      }
+      try {
+        builder.put(Maps.immutableEntry((String) null, 1));
+        fail();
+      } catch (NullPointerException expected) {
+      }
+    }
+
+    private static class StringHolder {
+      String string;
+    }
+
+    public void testBuilder_withMutableEntry() {
+      ImmutableMap.Builder<String, Integer> builder =
+          new Builder<String, Integer>();
+      final StringHolder holder = new StringHolder();
+      holder.string = "one";
+      Entry<String, Integer> entry = new AbstractMapEntry<String, Integer>() {
+        @Override public String getKey() {
+          return holder.string;
+        }
+        @Override public Integer getValue() {
+          return 1;
+        }
+      };
+
+      builder.put(entry);
+      holder.string = "two";
+      assertMapEquals(builder.build(), "one", 1);
+    }
+
+    public void testBuilderPutAllWithEmptyMap() {
+      ImmutableMap<String, Integer> map = new Builder<String, Integer>()
+          .putAll(Collections.<String, Integer>emptyMap())
+          .build();
+      assertEquals(Collections.<String, Integer>emptyMap(), map);
+    }
+
+    public void testBuilderPutAll() {
+      Map<String, Integer> toPut = new LinkedHashMap<String, Integer>();
+      toPut.put("one", 1);
+      toPut.put("two", 2);
+      toPut.put("three", 3);
+      Map<String, Integer> moreToPut = new LinkedHashMap<String, Integer>();
+      moreToPut.put("four", 4);
+      moreToPut.put("five", 5);
+
+      ImmutableMap<String, Integer> map = new Builder<String, Integer>()
+          .putAll(toPut)
+          .putAll(moreToPut)
+          .build();
+      assertMapEquals(map,
+          "one", 1, "two", 2, "three", 3, "four", 4, "five", 5);
+    }
+
+    public void testBuilderReuse() {
+      Builder<String, Integer> builder = new Builder<String, Integer>();
+      ImmutableMap<String, Integer> mapOne = builder
+          .put("one", 1)
+          .put("two", 2)
+          .build();
+      ImmutableMap<String, Integer> mapTwo = builder
+          .put("three", 3)
+          .put("four", 4)
+          .build();
+
+      assertMapEquals(mapOne, "one", 1, "two", 2);
+      assertMapEquals(mapTwo, "one", 1, "two", 2, "three", 3, "four", 4);
+    }
+
+    public void testBuilderPutNullKey() {
+      Builder<String, Integer> builder = new Builder<String, Integer>();
+      try {
+        builder.put(null, 1);
+        fail();
+      } catch (NullPointerException expected) {
+      }
+    }
+
+    public void testBuilderPutNullValue() {
+      Builder<String, Integer> builder = new Builder<String, Integer>();
+      try {
+        builder.put("one", null);
+        fail();
+      } catch (NullPointerException expected) {
+      }
+    }
+
+    public void testBuilderPutNullKeyViaPutAll() {
+      Builder<String, Integer> builder = new Builder<String, Integer>();
+      try {
+        builder.putAll(Collections.<String, Integer>singletonMap(null, 1));
+        fail();
+      } catch (NullPointerException expected) {
+      }
+    }
+
+    public void testBuilderPutNullValueViaPutAll() {
+      Builder<String, Integer> builder = new Builder<String, Integer>();
+      try {
+        builder.putAll(Collections.<String, Integer>singletonMap("one", null));
+        fail();
+      } catch (NullPointerException expected) {
+      }
+    }
+
+    public void testPuttingTheSameKeyTwiceThrowsOnBuild() {
+      Builder<String, Integer> builder = new Builder<String, Integer>()
+          .put("one", 1)
+          .put("one", 1); // throwing on this line would be even better
+
+      try {
+        builder.build();
+        fail();
+      } catch (IllegalArgumentException expected) {
+        assertEquals("duplicate key: one", expected.getMessage());
+      }
+    }
+
+    public void testOf() {
+      assertMapEquals(
+          ImmutableMap.of("one", 1),
+          "one", 1);
+      assertMapEquals(
+          ImmutableMap.of("one", 1, "two", 2),
+          "one", 1, "two", 2);
+      assertMapEquals(
+          ImmutableMap.of("one", 1, "two", 2, "three", 3),
+          "one", 1, "two", 2, "three", 3);
+      assertMapEquals(
+          ImmutableMap.of("one", 1, "two", 2, "three", 3, "four", 4),
+          "one", 1, "two", 2, "three", 3, "four", 4);
+      assertMapEquals(
+          ImmutableMap.of("one", 1, "two", 2, "three", 3, "four", 4, "five", 5),
+          "one", 1, "two", 2, "three", 3, "four", 4, "five", 5);
+    }
+
+    public void testOfNullKey() {
+      try {
+        ImmutableMap.of(null, 1);
+        fail();
+      } catch (NullPointerException expected) {
+      }
+
+      try {
+        ImmutableMap.of("one", 1, null, 2);
+        fail();
+      } catch (NullPointerException expected) {
+      }
+    }
+
+    public void testOfNullValue() {
+      try {
+        ImmutableMap.of("one", null);
+        fail();
+      } catch (NullPointerException expected) {
+      }
+
+      try {
+        ImmutableMap.of("one", 1, "two", null);
+        fail();
+      } catch (NullPointerException expected) {
+      }
+    }
+
+    public void testOfWithDuplicateKey() {
+      try {
+        ImmutableMap.of("one", 1, "one", 1);
+        fail();
+      } catch (IllegalArgumentException expected) {
+        assertEquals("duplicate key: one", expected.getMessage());
+      }
+    }
+
+    public void testCopyOfEmptyMap() {
+      ImmutableMap<String, Integer> copy
+          = ImmutableMap.copyOf(Collections.<String, Integer>emptyMap());
+      assertEquals(Collections.<String, Integer>emptyMap(), copy);
+      assertSame(copy, ImmutableMap.copyOf(copy));
+    }
+
+    public void testCopyOfSingletonMap() {
+      ImmutableMap<String, Integer> copy
+          = ImmutableMap.copyOf(Collections.singletonMap("one", 1));
+      assertMapEquals(copy, "one", 1);
+      assertSame(copy, ImmutableMap.copyOf(copy));
+    }
+
+    public void testCopyOf() {
+      Map<String, Integer> original = new LinkedHashMap<String, Integer>();
+      original.put("one", 1);
+      original.put("two", 2);
+      original.put("three", 3);
+
+      ImmutableMap<String, Integer> copy = ImmutableMap.copyOf(original);
+      assertMapEquals(copy, "one", 1, "two", 2, "three", 3);
+      assertSame(copy, ImmutableMap.copyOf(copy));
+    }
+  }
+
+  public void testNullGet() {
+    ImmutableMap<String, Integer> map = ImmutableMap.of("one", 1);
+    assertNull(map.get(null));
+  }
+
+  @GwtIncompatible("NullPointerTester")
+  public void testNullPointers() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.testAllPublicStaticMethods(ImmutableMap.class);
+    tester.testAllPublicInstanceMethods(
+        new ImmutableMap.Builder<Object, Object>());
+    tester.testAllPublicInstanceMethods(ImmutableMap.of());
+    tester.testAllPublicInstanceMethods(ImmutableMap.of("one", 1));
+    tester.testAllPublicInstanceMethods(
+        ImmutableMap.of("one", 1, "two", 2, "three", 3));
+  }
+
+  private static <K, V> void assertMapEquals(Map<K, V> map,
+      Object... alternatingKeysAndValues) {
+    assertEquals(map.size(), alternatingKeysAndValues.length / 2);
+    int i = 0;
+    for (Entry<K, V> entry : map.entrySet()) {
+      assertEquals(alternatingKeysAndValues[i++], entry.getKey());
+      assertEquals(alternatingKeysAndValues[i++], entry.getValue());
+    }
+  }
+
+  private static class IntHolder implements Serializable {
+    public int value;
+
+    public IntHolder(int value) {
+      this.value = value;
+    }
+
+    @Override public boolean equals(Object o) {
+      return (o instanceof IntHolder) && ((IntHolder) o).value == value;
+    }
+
+    @Override public int hashCode() {
+      return value;
+    }
+
+    private static final long serialVersionUID = 5;
+  }
+
+  public void testMutableValues() {
+    IntHolder holderA = new IntHolder(1);
+    IntHolder holderB = new IntHolder(2);
+    Map<String, IntHolder> map = ImmutableMap.of("a", holderA, "b", holderB);
+    holderA.value = 3;
+    assertTrue(map.entrySet().contains(
+        Maps.immutableEntry("a", new IntHolder(3))));
+    Map<String, Integer> intMap = ImmutableMap.of("a", 3, "b", 2);
+    assertEquals(intMap.hashCode(), map.entrySet().hashCode());
+    assertEquals(intMap.hashCode(), map.hashCode());
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testViewSerialization() {
+    Map<String, Integer> map = ImmutableMap.of("one", 1, "two", 2, "three", 3);
+    LenientSerializableTester.reserializeAndAssertLenient(map.entrySet());
+    LenientSerializableTester.reserializeAndAssertLenient(map.keySet());
+
+    Collection<Integer> reserializedValues = reserialize(map.values());
+    assertEquals(Lists.newArrayList(map.values()),
+        Lists.newArrayList(reserializedValues));
+    assertTrue(reserializedValues instanceof ImmutableCollection);
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/ImmutableMultimapAsMapImplementsMapTest.java b/guava-tests/test/com/google/common/collect/ImmutableMultimapAsMapImplementsMapTest.java
new file mode 100644
index 0000000..acffe17
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/ImmutableMultimapAsMapImplementsMapTest.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.collect.testing.MapInterfaceTest;
+
+import java.util.Collection;
+import java.util.Map;
+
+/**
+ * Test {@link Multimap#asMap()} for an {@link ImmutableMultimap} with
+ * {@link MapInterfaceTest}.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible
+public class ImmutableMultimapAsMapImplementsMapTest
+    extends AbstractMultimapAsMapImplementsMapTest {
+
+  public ImmutableMultimapAsMapImplementsMapTest() {
+    super(false, false, false);
+  }
+
+  @Override protected Map<String, Collection<Integer>> makeEmptyMap() {
+    return ImmutableMultimap.<String, Integer>of().asMap();
+  }
+
+  @Override protected Map<String, Collection<Integer>> makePopulatedMap() {
+    Multimap<String, Integer> delegate = HashMultimap.create();
+    populate(delegate);
+    return ImmutableMultimap.copyOf(delegate).asMap();
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/ImmutableMultimapTest.java b/guava-tests/test/com/google/common/collect/ImmutableMultimapTest.java
new file mode 100644
index 0000000..0b917e9
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/ImmutableMultimapTest.java
@@ -0,0 +1,117 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.collect.ImmutableMultimap.Builder;
+import com.google.common.collect.testing.SampleElements;
+import com.google.common.collect.testing.SampleElements.Unhashables;
+import com.google.common.collect.testing.UnhashableObject;
+
+import junit.framework.TestCase;
+
+import java.util.Arrays;
+import java.util.Map.Entry;
+
+/**
+ * Tests for {@link ImmutableMultimap}.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible
+public class ImmutableMultimapTest extends TestCase {
+
+  public void testBuilder_withImmutableEntry() {
+    ImmutableMultimap<String, Integer> multimap = new Builder<String, Integer>()
+        .put(Maps.immutableEntry("one", 1))
+        .build();
+    assertEquals(Arrays.asList(1), multimap.get("one"));
+  }
+
+  public void testBuilder_withImmutableEntryAndNullContents() {
+    Builder<String, Integer> builder = new Builder<String, Integer>();
+    try {
+      builder.put(Maps.immutableEntry("one", (Integer) null));
+      fail();
+    } catch (NullPointerException expected) {
+    }
+    try {
+      builder.put(Maps.immutableEntry((String) null, 1));
+      fail();
+    } catch (NullPointerException expected) {
+    }
+  }
+
+  private static class StringHolder {
+    String string;
+  }
+
+  public void testBuilder_withMutableEntry() {
+    ImmutableMultimap.Builder<String, Integer> builder =
+        new Builder<String, Integer>();
+    final StringHolder holder = new StringHolder();
+    holder.string = "one";
+    Entry<String, Integer> entry = new AbstractMapEntry<String, Integer>() {
+      @Override public String getKey() {
+        return holder.string;
+      }
+      @Override public Integer getValue() {
+        return 1;
+      }
+    };
+
+    builder.put(entry);
+    holder.string = "two";
+    assertEquals(Arrays.asList(1), builder.build().get("one"));
+  }
+
+  // TODO: test ImmutableMultimap builder and factory methods
+
+  public void testCopyOf() {
+    ImmutableSetMultimap<String, String> setMultimap
+        = ImmutableSetMultimap.of("k1", "v1");
+    ImmutableMultimap<String, String> setMultimapCopy
+        = ImmutableMultimap.copyOf(setMultimap);
+    assertSame("copyOf(ImmutableSetMultimap) should not create a new instance",
+        setMultimap, setMultimapCopy);
+
+    ImmutableListMultimap<String, String> listMultimap
+        = ImmutableListMultimap.of("k1", "v1");
+    ImmutableMultimap<String, String> listMultimapCopy
+        = ImmutableMultimap.copyOf(listMultimap);
+    assertSame("copyOf(ImmutableListMultimap) should not create a new instance",
+        listMultimap, listMultimapCopy);
+  }
+
+  public void testUnhashableSingletonValue() {
+    SampleElements<UnhashableObject> unhashables = new Unhashables();
+    Multimap<Integer, UnhashableObject> multimap = ImmutableMultimap.of(
+        0, unhashables.e0);
+    assertEquals(1, multimap.get(0).size());
+    assertTrue(multimap.get(0).contains(unhashables.e0));
+  }
+
+  public void testUnhashableMixedValues() {
+    SampleElements<UnhashableObject> unhashables = new Unhashables();
+    Multimap<Integer, Object> multimap = ImmutableMultimap.<Integer, Object>of(
+        0, unhashables.e0, 2, "hey you", 0, unhashables.e1);
+    assertEquals(2, multimap.get(0).size());
+    assertTrue(multimap.get(0).contains(unhashables.e0));
+    assertTrue(multimap.get(0).contains(unhashables.e1));
+    assertTrue(multimap.get(2).contains("hey you"));
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/ImmutableMultisetTest.java b/guava-tests/test/com/google/common/collect/ImmutableMultisetTest.java
new file mode 100644
index 0000000..657cf5c
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/ImmutableMultisetTest.java
@@ -0,0 +1,466 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static java.util.Arrays.asList;
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.collect.testing.MinimalCollection;
+import com.google.common.collect.testing.SetTestSuiteBuilder;
+import com.google.common.collect.testing.TestStringSetGenerator;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.google.MultisetTestSuiteBuilder;
+import com.google.common.collect.testing.google.TestStringMultisetGenerator;
+import com.google.common.collect.testing.google.UnmodifiableCollectionTests;
+import com.google.common.testing.NullPointerTester;
+import com.google.common.testing.SerializableTester;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Tests for {@link ImmutableMultiset}.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible(emulated = true)
+public class ImmutableMultisetTest extends TestCase {
+
+  @GwtIncompatible("suite") // TODO(cpovirk): add to collect/gwt/suites
+  public static Test suite() {
+    TestSuite suite = new TestSuite();
+    suite.addTestSuite(ImmutableMultisetTest.class);
+
+    suite.addTest(MultisetTestSuiteBuilder.using(
+        new TestStringMultisetGenerator() {
+          @Override protected Multiset<String> create(String[] elements) {
+            return ImmutableMultiset.copyOf(elements);
+          }
+        })
+        .named("ImmutableMultiset")
+        .withFeatures(CollectionSize.ANY, 
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .createTestSuite());
+
+    suite.addTest(MultisetTestSuiteBuilder.using(
+        new TestStringMultisetGenerator() {
+          @Override protected Multiset<String> create(String[] elements) {
+            return SerializableTester.reserialize(
+                ImmutableMultiset.copyOf(elements));
+          }
+        })
+        .named("ImmutableMultiset, reserialized")
+        .withFeatures(CollectionSize.ANY,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+          @Override protected Set<String> create(String[] elements) {
+            return SerializableTester.reserialize(
+                ImmutableMultiset.copyOf(elements).elementSet());
+          }
+        })
+        .named("ImmutableMultiset, element set")
+        .withFeatures(CollectionSize.ANY,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .createTestSuite());
+
+    return suite;
+  }
+
+  public void testCreation_noArgs() {
+    Multiset<String> multiset = ImmutableMultiset.of();
+    assertTrue(multiset.isEmpty());
+  }
+
+  public void testCreation_oneElement() {
+    Multiset<String> multiset = ImmutableMultiset.of("a");
+    assertEquals(HashMultiset.create(asList("a")), multiset);
+  }
+
+  public void testCreation_twoElements() {
+    Multiset<String> multiset = ImmutableMultiset.of("a", "b");
+    assertEquals(HashMultiset.create(asList("a", "b")), multiset);
+  }
+
+  public void testCreation_threeElements() {
+    Multiset<String> multiset = ImmutableMultiset.of("a", "b", "c");
+    assertEquals(HashMultiset.create(asList("a", "b", "c")), multiset);
+  }
+
+  public void testCreation_fourElements() {
+    Multiset<String> multiset = ImmutableMultiset.of("a", "b", "c", "d");
+    assertEquals(HashMultiset.create(asList("a", "b", "c", "d")), multiset);
+  }
+
+  public void testCreation_fiveElements() {
+    Multiset<String> multiset = ImmutableMultiset.of("a", "b", "c", "d", "e");
+    assertEquals(HashMultiset.create(asList("a", "b", "c", "d", "e")),
+        multiset);
+  }
+
+  public void testCreation_sixElements() {
+    Multiset<String> multiset = ImmutableMultiset.of(
+        "a", "b", "c", "d", "e", "f");
+    assertEquals(HashMultiset.create(asList("a", "b", "c", "d", "e", "f")),
+        multiset);
+  }
+
+  public void testCreation_sevenElements() {
+    Multiset<String> multiset = ImmutableMultiset.of(
+        "a", "b", "c", "d", "e", "f", "g");
+    assertEquals(
+        HashMultiset.create(asList("a", "b", "c", "d", "e", "f", "g")),
+        multiset);
+  }
+
+  public void testCreation_emptyArray() {
+    String[] array = new String[0];
+    Multiset<String> multiset = ImmutableMultiset.copyOf(array);
+    assertTrue(multiset.isEmpty());
+  }
+
+  public void testCreation_arrayOfOneElement() {
+    String[] array = new String[] { "a" };
+    Multiset<String> multiset = ImmutableMultiset.copyOf(array);
+    assertEquals(HashMultiset.create(asList("a")), multiset);
+  }
+
+  public void testCreation_arrayOfArray() {
+    String[] array = new String[] { "a" };
+    Multiset<String[]> multiset = ImmutableMultiset.<String[]>of(array);
+    Multiset<String[]> expected = HashMultiset.create();
+    expected.add(array);
+    assertEquals(expected, multiset);
+  }
+
+  public void testCreation_arrayContainingOnlyNull() {
+    String[] array = new String[] { null };
+    try {
+      ImmutableMultiset.copyOf(array);
+      fail();
+    } catch (NullPointerException expected) {}
+  }
+
+  public void testCopyOf_collection_empty() {
+    // "<String>" is required to work around a javac 1.5 bug.
+    Collection<String> c = MinimalCollection.<String>of();
+    Multiset<String> multiset = ImmutableMultiset.copyOf(c);
+    assertTrue(multiset.isEmpty());
+  }
+
+  public void testCopyOf_collection_oneElement() {
+    Collection<String> c = MinimalCollection.of("a");
+    Multiset<String> multiset = ImmutableMultiset.copyOf(c);
+    assertEquals(HashMultiset.create(asList("a")), multiset);
+  }
+
+  public void testCopyOf_collection_general() {
+    Collection<String> c = MinimalCollection.of("a", "b", "a");
+    Multiset<String> multiset = ImmutableMultiset.copyOf(c);
+    assertEquals(HashMultiset.create(asList("a", "b", "a")), multiset);
+  }
+
+  public void testCopyOf_collectionContainingNull() {
+    Collection<String> c = MinimalCollection.of("a", null, "b");
+    try {
+      ImmutableMultiset.copyOf(c);
+      fail();
+    } catch (NullPointerException expected) {}
+  }
+
+  public void testCopyOf_multiset_empty() {
+    Multiset<String> c = HashMultiset.create();
+    Multiset<String> multiset = ImmutableMultiset.copyOf(c);
+    assertTrue(multiset.isEmpty());
+  }
+
+  public void testCopyOf_multiset_oneElement() {
+    Multiset<String> c = HashMultiset.create(asList("a"));
+    Multiset<String> multiset = ImmutableMultiset.copyOf(c);
+    assertEquals(HashMultiset.create(asList("a")), multiset);
+  }
+
+  public void testCopyOf_multiset_general() {
+    Multiset<String> c = HashMultiset.create(asList("a", "b", "a"));
+    Multiset<String> multiset = ImmutableMultiset.copyOf(c);
+    assertEquals(HashMultiset.create(asList("a", "b", "a")), multiset);
+  }
+
+  public void testCopyOf_multisetContainingNull() {
+    Multiset<String> c = HashMultiset.create(asList("a", null, "b"));
+    try {
+      ImmutableMultiset.copyOf(c);
+      fail();
+    } catch (NullPointerException expected) {}
+  }
+
+  public void testCopyOf_iterator_empty() {
+    Iterator<String> iterator = Iterators.emptyIterator();
+    Multiset<String> multiset = ImmutableMultiset.copyOf(iterator);
+    assertTrue(multiset.isEmpty());
+  }
+
+  public void testCopyOf_iterator_oneElement() {
+    Iterator<String> iterator = Iterators.singletonIterator("a");
+    Multiset<String> multiset = ImmutableMultiset.copyOf(iterator);
+    assertEquals(HashMultiset.create(asList("a")), multiset);
+  }
+
+  public void testCopyOf_iterator_general() {
+    Iterator<String> iterator = asList("a", "b", "a").iterator();
+    Multiset<String> multiset = ImmutableMultiset.copyOf(iterator);
+    assertEquals(HashMultiset.create(asList("a", "b", "a")), multiset);
+  }
+
+  public void testCopyOf_iteratorContainingNull() {
+    Iterator<String> iterator = asList("a", null, "b").iterator();
+    try {
+      ImmutableMultiset.copyOf(iterator);
+      fail();
+    } catch (NullPointerException expected) {}
+  }
+
+  private static class CountingIterable implements Iterable<String> {
+    int count = 0;
+    @Override
+    public Iterator<String> iterator() {
+      count++;
+      return asList("a", "b", "a").iterator();
+    }
+  }
+
+  public void testCopyOf_plainIterable() {
+    CountingIterable iterable = new CountingIterable();
+    Multiset<String> multiset = ImmutableMultiset.copyOf(iterable);
+    assertEquals(HashMultiset.create(asList("a", "b", "a")), multiset);
+    assertEquals(1, iterable.count);
+  }
+
+  public void testCopyOf_shortcut_empty() {
+    Collection<String> c = ImmutableMultiset.of();
+    assertSame(c, ImmutableMultiset.copyOf(c));
+  }
+
+  public void testCopyOf_shortcut_singleton() {
+    Collection<String> c = ImmutableMultiset.of("a");
+    assertSame(c, ImmutableMultiset.copyOf(c));
+  }
+
+  public void testCopyOf_shortcut_immutableMultiset() {
+    Collection<String> c = ImmutableMultiset.of("a", "b", "c");
+    assertSame(c, ImmutableMultiset.copyOf(c));
+  }
+
+  public void testBuilderAdd() {
+    ImmutableMultiset<String> multiset = new ImmutableMultiset.Builder<String>()
+        .add("a")
+        .add("b")
+        .add("a")
+        .add("c")
+        .build();
+    assertEquals(HashMultiset.create(asList("a", "b", "a", "c")), multiset);
+  }
+
+  public void testBuilderAddAll() {
+    List<String> a = asList("a", "b");
+    List<String> b = asList("c", "d");
+    ImmutableMultiset<String> multiset = new ImmutableMultiset.Builder<String>()
+        .addAll(a)
+        .addAll(b)
+        .build();
+    assertEquals(HashMultiset.create(asList("a", "b", "c", "d")), multiset);
+  }
+
+  public void testBuilderAddAllMultiset() {
+    Multiset<String> a = HashMultiset.create(asList("a", "b", "b"));
+    Multiset<String> b = HashMultiset.create(asList("c", "b"));
+    ImmutableMultiset<String> multiset = new ImmutableMultiset.Builder<String>()
+        .addAll(a)
+        .addAll(b)
+        .build();
+    assertEquals(
+        HashMultiset.create(asList("a", "b", "b", "b", "c")), multiset);
+  }
+
+  public void testBuilderAddAllIterator() {
+    Iterator<String> iterator = asList("a", "b", "a", "c").iterator();
+    ImmutableMultiset<String> multiset = new ImmutableMultiset.Builder<String>()
+        .addAll(iterator)
+        .build();
+    assertEquals(HashMultiset.create(asList("a", "b", "a", "c")), multiset);
+  }
+
+  public void testBuilderAddCopies() {
+    ImmutableMultiset<String> multiset = new ImmutableMultiset.Builder<String>()
+        .addCopies("a", 2)
+        .addCopies("b", 3)
+        .addCopies("c", 0)
+        .build();
+    assertEquals(
+        HashMultiset.create(asList("a", "a", "b", "b", "b")), multiset);
+  }
+
+  public void testBuilderSetCount() {
+    ImmutableMultiset<String> multiset = new ImmutableMultiset.Builder<String>()
+        .add("a")
+        .setCount("a", 2)
+        .setCount("b", 3)
+        .build();
+    assertEquals(
+        HashMultiset.create(asList("a", "a", "b", "b", "b")), multiset);
+  }
+
+  public void testBuilderAddHandlesNullsCorrectly() {
+    ImmutableMultiset.Builder<String> builder = ImmutableMultiset.builder();
+    try {
+      builder.add((String) null);
+      fail("expected NullPointerException");
+    } catch (NullPointerException expected) {}
+  }
+
+  public void testBuilderAddAllHandlesNullsCorrectly() {
+    ImmutableMultiset.Builder<String> builder = ImmutableMultiset.builder();
+    try {
+      builder.addAll((Collection<String>) null);
+      fail("expected NullPointerException");
+    } catch (NullPointerException expected) {}
+
+    builder = ImmutableMultiset.builder();
+    List<String> listWithNulls = asList("a", null, "b");
+    try {
+      builder.addAll(listWithNulls);
+      fail("expected NullPointerException");
+    } catch (NullPointerException expected) {}
+
+    builder = ImmutableMultiset.builder();
+    Multiset<String> multisetWithNull
+        = LinkedHashMultiset.create(asList("a", null, "b"));
+    try {
+      builder.addAll(multisetWithNull);
+      fail("expected NullPointerException");
+    } catch (NullPointerException expected) {}
+  }
+
+  public void testBuilderAddCopiesHandlesNullsCorrectly() {
+    ImmutableMultiset.Builder<String> builder = ImmutableMultiset.builder();
+    try {
+      builder.addCopies(null, 2);
+      fail("expected NullPointerException");
+    } catch (NullPointerException expected) {}
+  }
+
+  public void testBuilderAddCopiesIllegal() {
+    ImmutableMultiset.Builder<String> builder = ImmutableMultiset.builder();
+    try {
+      builder.addCopies("a", -2);
+      fail("expected IllegalArgumentException");
+    } catch (IllegalArgumentException expected) {}
+  }
+
+  public void testBuilderSetCountHandlesNullsCorrectly() {
+    ImmutableMultiset.Builder<String> builder = ImmutableMultiset.builder();
+    try {
+      builder.setCount(null, 2);
+      fail("expected NullPointerException");
+    } catch (NullPointerException expected) {}
+  }
+
+  public void testBuilderSetCountIllegal() {
+    ImmutableMultiset.Builder<String> builder = ImmutableMultiset.builder();
+    try {
+      builder.setCount("a", -2);
+      fail("expected IllegalArgumentException");
+    } catch (IllegalArgumentException expected) {}
+  }
+
+  @GwtIncompatible("NullPointerTester")
+  public void testNullPointers() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.testAllPublicStaticMethods(ImmutableMultiset.class);
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testSerialization_empty() {
+    Collection<String> c = ImmutableMultiset.of();
+    assertSame(c, SerializableTester.reserialize(c));
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testSerialization_multiple() {
+    Collection<String> c = ImmutableMultiset.of("a", "b", "a");
+    Collection<String> copy = SerializableTester.reserializeAndAssert(c);
+    ASSERT.that(copy).hasContentsInOrder("a", "a", "b");
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testSerialization_elementSet() {
+    Multiset<String> c = ImmutableMultiset.of("a", "b", "a");
+    Collection<String> copy =
+        LenientSerializableTester.reserializeAndAssertLenient(c.elementSet());
+    ASSERT.that(copy).hasContentsInOrder("a", "b");
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testSerialization_entrySet() {
+    Multiset<String> c = ImmutableMultiset.of("a", "b", "c");
+    SerializableTester.reserializeAndAssert(c.entrySet());
+  }
+
+  public void testEquals_immutableMultiset() {
+    Collection<String> c = ImmutableMultiset.of("a", "b", "a");
+    assertEquals(c, ImmutableMultiset.of("a", "b", "a"));
+    assertEquals(c, ImmutableMultiset.of("a", "a", "b"));
+    ASSERT.that(c).isNotEqualTo(ImmutableMultiset.of("a", "b"));
+    ASSERT.that(c).isNotEqualTo(ImmutableMultiset.of("a", "b", "c", "d"));
+  }
+
+  public void testIterationOrder() {
+    Collection<String> c = ImmutableMultiset.of("a", "b", "a");
+    ASSERT.that(c).hasContentsInOrder("a", "a", "b");
+  }
+
+  public void testMultisetWrites() {
+    Multiset<String> multiset = ImmutableMultiset.of("a", "b", "a");
+    UnmodifiableCollectionTests.assertMultisetIsUnmodifiable(multiset, "test");
+  }
+
+  public void testAsList() {
+    ImmutableMultiset<String> multiset
+        = ImmutableMultiset.of("a", "a", "b", "b", "b");
+    ImmutableList<String> list = multiset.asList();
+    assertEquals(ImmutableList.of("a", "a", "b", "b", "b"), list);
+    assertEquals(2, list.indexOf("b"));
+    assertEquals(4, list.lastIndexOf("b"));
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testSerialization_asList() {
+    ImmutableMultiset<String> multiset
+        = ImmutableMultiset.of("a", "a", "b", "b", "b");
+    SerializableTester.reserializeAndAssert(multiset.asList());
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/ImmutableSetCollectionTest.java b/guava-tests/test/com/google/common/collect/ImmutableSetCollectionTest.java
new file mode 100644
index 0000000..9ebceec
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/ImmutableSetCollectionTest.java
@@ -0,0 +1,253 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.collect.testing.ListTestSuiteBuilder;
+import com.google.common.collect.testing.SetTestSuiteBuilder;
+import com.google.common.collect.testing.TestStringSetGenerator;
+import com.google.common.collect.testing.TestStringSortedSetGenerator;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.google.SetGenerators.DegeneratedImmutableSetGenerator;
+import com.google.common.collect.testing.google.SetGenerators.ImmutableSetAsListGenerator;
+import com.google.common.collect.testing.google.SetGenerators.ImmutableSetCopyOfGenerator;
+import com.google.common.collect.testing.google.SetGenerators.ImmutableSetWithBadHashesGenerator;
+import com.google.common.collect.testing.google.SetGenerators.ImmutableSortedSetAsListGenerator;
+import com.google.common.collect.testing.google.SetGenerators.ImmutableSortedSetAsListSubListGenerator;
+import com.google.common.collect.testing.google.SetGenerators.ImmutableSortedSetCopyOfGenerator;
+import com.google.common.collect.testing.google.SetGenerators.ImmutableSortedSetExplicitComparator;
+import com.google.common.collect.testing.google.SetGenerators.ImmutableSortedSetExplicitSuperclassComparatorGenerator;
+import com.google.common.collect.testing.google.SetGenerators.ImmutableSortedSetHeadsetGenerator;
+import com.google.common.collect.testing.google.SetGenerators.ImmutableSortedSetReversedOrderGenerator;
+import com.google.common.collect.testing.google.SetGenerators.ImmutableSortedSetSubsetAsListGenerator;
+import com.google.common.collect.testing.google.SetGenerators.ImmutableSortedSetSubsetGenerator;
+import com.google.common.collect.testing.google.SetGenerators.ImmutableSortedSetTailsetGenerator;
+import com.google.common.collect.testing.google.SetGenerators.ImmutableSortedSetUnhashableGenerator;
+import com.google.common.collect.testing.google.SetGenerators.ImmutableSortedsetSubsetAsListSubListGenerator;
+import com.google.common.collect.testing.testers.SetHashCodeTester;
+import com.google.common.testing.SerializableTester;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import java.util.List;
+import java.util.Set;
+import java.util.SortedSet;
+
+/**
+ * Collection tests for {@link ImmutableSet} and {@link ImmutableSortedSet}.
+ *
+ * @author Kevin Bourrillion
+ * @author Jared Levy
+ */
+@GwtIncompatible("suite") // handled by collect/gwt/suites
+public class ImmutableSetCollectionTest extends TestCase {
+  public static Test suite() {
+    TestSuite suite = new TestSuite();
+
+    suite.addTest(SetTestSuiteBuilder.using(new ImmutableSetCopyOfGenerator())
+        .named(ImmutableSetTest.class.getName())
+        .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+          @Override protected Set<String> create(String[] elements) {
+            Set<String> set = ImmutableSet.copyOf(elements);
+            return SerializableTester.reserialize(set);
+          }
+        })
+        .named(ImmutableSetTest.class.getName() + ", reserialized")
+        .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(
+        new ImmutableSetWithBadHashesGenerator())
+        .named(ImmutableSetTest.class.getName() + ", with bad hashes")
+        .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(
+        new DegeneratedImmutableSetGenerator())
+        .named(ImmutableSetTest.class.getName() + ", degenerate")
+        .withFeatures(CollectionSize.ONE, CollectionFeature.KNOWN_ORDER,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(
+        new ImmutableSortedSetCopyOfGenerator())
+        .named(ImmutableSortedSetTest.class.getName())
+        .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestStringSortedSetGenerator() {
+          @Override protected SortedSet<String> create(String[] elements) {
+            SortedSet<String> set = ImmutableSortedSet.copyOf(elements);
+            return SerializableTester.reserialize(set);
+          }
+        })
+        .named(ImmutableSortedSetTest.class.getName() + ", reserialized")
+        .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(
+        new ImmutableSortedSetHeadsetGenerator())
+        .named(ImmutableSortedSetTest.class.getName() + ", headset")
+        .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(
+        new ImmutableSortedSetTailsetGenerator())
+        .named(ImmutableSortedSetTest.class.getName() + ", tailset")
+        .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(
+        new ImmutableSortedSetSubsetGenerator())
+        .named(ImmutableSortedSetTest.class.getName() + ", subset")
+        .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(
+        new TestStringSortedSetGenerator() {
+          @Override protected SortedSet<String> create(String[] elements) {
+            List<String> list = Lists.newArrayList(elements);
+            list.add("zzz");
+            return SerializableTester.reserialize(
+                ImmutableSortedSet.copyOf(list).headSet("zzy"));
+          }
+        })
+        .named(
+            ImmutableSortedSetTest.class.getName() + ", headset, reserialized")
+        .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(
+        new TestStringSortedSetGenerator() {
+          @Override protected SortedSet<String> create(String[] elements) {
+            List<String> list = Lists.newArrayList(elements);
+            list.add("\0");
+            return SerializableTester.reserialize(
+                ImmutableSortedSet.copyOf(list).tailSet("\0\0"));
+          }
+        })
+        .named(
+            ImmutableSortedSetTest.class.getName() + ", tailset, reserialized")
+        .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(
+        new TestStringSortedSetGenerator() {
+          @Override protected SortedSet<String> create(String[] elements) {
+            List<String> list = Lists.newArrayList(elements);
+            list.add("\0");
+            list.add("zzz");
+            return SerializableTester.reserialize(
+                ImmutableSortedSet.copyOf(list).subSet("\0\0", "zzy"));
+          }
+        })
+        .named(
+            ImmutableSortedSetTest.class.getName() + ", subset, reserialized")
+        .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(
+        new ImmutableSortedSetExplicitComparator())
+        .named(ImmutableSortedSetTest.class.getName()
+            + ", explicit comparator, vararg")
+        .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(
+        new ImmutableSortedSetExplicitSuperclassComparatorGenerator())
+        .named(ImmutableSortedSetTest.class.getName()
+            + ", explicit superclass comparator, iterable")
+        .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(
+        new ImmutableSortedSetReversedOrderGenerator())
+        .named(ImmutableSortedSetTest.class.getName()
+            + ", reverseOrder, iterator")
+        .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(
+        new ImmutableSortedSetUnhashableGenerator())
+        .suppressing(SetHashCodeTester.getHashCodeMethods())
+        .named(ImmutableSortedSetTest.class.getName() + ", unhashable")
+        .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .createTestSuite());
+
+    suite.addTest(ListTestSuiteBuilder.using(new ImmutableSetAsListGenerator())
+        .named("ImmutableSet.asList")
+        .withFeatures(CollectionSize.ANY,
+            CollectionFeature.REJECTS_DUPLICATES_AT_CREATION,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .createTestSuite());
+
+    suite.addTest(ListTestSuiteBuilder.using(
+        new ImmutableSortedSetAsListGenerator())
+        .named("ImmutableSortedSet.asList")
+        .withFeatures(CollectionSize.ANY,
+            CollectionFeature.REJECTS_DUPLICATES_AT_CREATION,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .createTestSuite());
+
+    suite.addTest(ListTestSuiteBuilder.using(
+        new ImmutableSortedSetSubsetAsListGenerator())
+        .named("ImmutableSortedSet.subSet.asList")
+        .withFeatures(CollectionSize.ANY,
+            CollectionFeature.REJECTS_DUPLICATES_AT_CREATION,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .createTestSuite());
+
+    suite.addTest(ListTestSuiteBuilder.using(
+        new ImmutableSortedSetAsListSubListGenerator())
+        .named("ImmutableSortedSet.asList.subList")
+        .withFeatures(CollectionSize.ANY,
+            CollectionFeature.REJECTS_DUPLICATES_AT_CREATION,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .createTestSuite());
+
+    suite.addTest(ListTestSuiteBuilder.using(
+        new ImmutableSortedsetSubsetAsListSubListGenerator())
+        .named("ImmutableSortedSet.subSet.asList.subList")
+        .withFeatures(CollectionSize.ANY,
+            CollectionFeature.REJECTS_DUPLICATES_AT_CREATION,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .createTestSuite());
+
+    return suite;
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/ImmutableSetMultimapAsMapImplementsMapTest.java b/guava-tests/test/com/google/common/collect/ImmutableSetMultimapAsMapImplementsMapTest.java
new file mode 100644
index 0000000..692cfbc
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/ImmutableSetMultimapAsMapImplementsMapTest.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.collect.testing.MapInterfaceTest;
+
+import java.util.Collection;
+import java.util.Map;
+
+/**
+ * Test {@link Multimap#asMap()} for an {@link ImmutableSetMultimap} with
+ * {@link MapInterfaceTest}.
+ *
+ * @author Mike Ward
+ */
+@GwtCompatible
+public class ImmutableSetMultimapAsMapImplementsMapTest
+    extends AbstractMultimapAsMapImplementsMapTest {
+
+  public ImmutableSetMultimapAsMapImplementsMapTest() {
+    super(false, false, false);
+  }
+
+  @Override protected Map<String, Collection<Integer>> makeEmptyMap() {
+    return ImmutableSetMultimap.<String, Integer>of().asMap();
+  }
+
+  @Override protected Map<String, Collection<Integer>> makePopulatedMap() {
+    Multimap<String, Integer> delegate = HashMultimap.create();
+    populate(delegate);
+    return ImmutableSetMultimap.copyOf(delegate).asMap();
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/ImmutableSetMultimapTest.java b/guava-tests/test/com/google/common/collect/ImmutableSetMultimapTest.java
new file mode 100644
index 0000000..8c182cf
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/ImmutableSetMultimapTest.java
@@ -0,0 +1,478 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.collect.ImmutableSetMultimap.Builder;
+import com.google.common.collect.testing.google.UnmodifiableCollectionTests;
+import com.google.common.testing.EqualsTester;
+import com.google.common.testing.SerializableTester;
+
+import junit.framework.TestCase;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Map.Entry;
+
+/**
+ * Tests for {@link ImmutableSetMultimap}.
+ *
+ * @author Mike Ward
+ */
+@GwtCompatible(emulated = true)
+public class ImmutableSetMultimapTest extends TestCase {
+
+  public void testBuilder_withImmutableEntry() {
+    ImmutableSetMultimap<String, Integer> multimap = new Builder<String, Integer>()
+        .put(Maps.immutableEntry("one", 1))
+        .build();
+    assertEquals(ImmutableSet.of(1), multimap.get("one"));
+  }
+
+  public void testBuilder_withImmutableEntryAndNullContents() {
+    Builder<String, Integer> builder = new Builder<String, Integer>();
+    try {
+      builder.put(Maps.immutableEntry("one", (Integer) null));
+      fail();
+    } catch (NullPointerException expected) {
+    }
+    try {
+      builder.put(Maps.immutableEntry((String) null, 1));
+      fail();
+    } catch (NullPointerException expected) {
+    }
+  }
+
+  private static class StringHolder {
+    String string;
+  }
+
+  public void testBuilder_withMutableEntry() {
+    ImmutableSetMultimap.Builder<String, Integer> builder =
+        new Builder<String, Integer>();
+    final StringHolder holder = new StringHolder();
+    holder.string = "one";
+    Entry<String, Integer> entry = new AbstractMapEntry<String, Integer>() {
+      @Override public String getKey() {
+        return holder.string;
+      }
+      @Override public Integer getValue() {
+        return 1;
+      }
+    };
+
+    builder.put(entry);
+    holder.string = "two";
+    assertEquals(ImmutableSet.of(1), builder.build().get("one"));
+  }
+
+  public void testBuilderPutAllIterable() {
+    ImmutableSetMultimap.Builder<String, Integer> builder
+        = ImmutableSetMultimap.builder();
+    builder.putAll("foo", Arrays.asList(1, 2, 3));
+    builder.putAll("bar", Arrays.asList(4, 5));
+    builder.putAll("foo", Arrays.asList(6, 7));
+    Multimap<String, Integer> multimap = builder.build();
+    assertEquals(ImmutableSet.of(1, 2, 3, 6, 7), multimap.get("foo"));
+    assertEquals(ImmutableSet.of(4, 5), multimap.get("bar"));
+    assertEquals(7, multimap.size());
+  }
+
+  public void testBuilderPutAllVarargs() {
+    ImmutableSetMultimap.Builder<String, Integer> builder
+        = ImmutableSetMultimap.builder();
+    builder.putAll("foo", 1, 2, 3);
+    builder.putAll("bar", 4, 5);
+    builder.putAll("foo", 6, 7);
+    Multimap<String, Integer> multimap = builder.build();
+    assertEquals(ImmutableSet.of(1, 2, 3, 6, 7), multimap.get("foo"));
+    assertEquals(ImmutableSet.of(4, 5), multimap.get("bar"));
+    assertEquals(7, multimap.size());
+  }
+
+  public void testBuilderPutAllMultimap() {
+    Multimap<String, Integer> toPut = LinkedListMultimap.create();
+    toPut.put("foo", 1);
+    toPut.put("bar", 4);
+    toPut.put("foo", 2);
+    toPut.put("foo", 3);
+    Multimap<String, Integer> moreToPut = LinkedListMultimap.create();
+    moreToPut.put("foo", 6);
+    moreToPut.put("bar", 5);
+    moreToPut.put("foo", 7);
+    ImmutableSetMultimap.Builder<String, Integer> builder
+        = ImmutableSetMultimap.builder();
+    builder.putAll(toPut);
+    builder.putAll(moreToPut);
+    Multimap<String, Integer> multimap = builder.build();
+    assertEquals(ImmutableSet.of(1, 2, 3, 6, 7), multimap.get("foo"));
+    assertEquals(ImmutableSet.of(4, 5), multimap.get("bar"));
+    assertEquals(7, multimap.size());
+  }
+
+  public void testBuilderPutAllWithDuplicates() {
+    ImmutableSetMultimap.Builder<String, Integer> builder
+        = ImmutableSetMultimap.builder();
+    builder.putAll("foo", 1, 2, 3);
+    builder.putAll("bar", 4, 5);
+    builder.putAll("foo", 1, 6, 7);
+    ImmutableSetMultimap<String, Integer> multimap = builder.build();
+    assertEquals(7, multimap.size());
+  }
+
+  public void testBuilderPutWithDuplicates() {
+    ImmutableSetMultimap.Builder<String, Integer> builder
+        = ImmutableSetMultimap.builder();
+    builder.putAll("foo", 1, 2, 3);
+    builder.putAll("bar", 4, 5);
+    builder.put("foo", 1);
+    ImmutableSetMultimap<String, Integer> multimap = builder.build();
+    assertEquals(5, multimap.size());
+  }
+
+  public void testBuilderPutAllMultimapWithDuplicates() {
+    Multimap<String, Integer> toPut = LinkedListMultimap.create();
+    toPut.put("foo", 1);
+    toPut.put("bar", 4);
+    toPut.put("foo", 2);
+    toPut.put("foo", 1);
+    toPut.put("bar", 5);
+    ImmutableSetMultimap.Builder<String, Integer> builder
+        = ImmutableSetMultimap.builder();
+    builder.putAll(toPut);
+    ImmutableSetMultimap<String, Integer> multimap = builder.build();
+    assertEquals(4, multimap.size());
+  }
+
+  public void testBuilderPutNullKey() {
+    Multimap<String, Integer> toPut = LinkedListMultimap.create();
+    toPut.put("foo", null);
+    ImmutableSetMultimap.Builder<String, Integer> builder
+        = ImmutableSetMultimap.builder();
+    try {
+      builder.put(null, 1);
+      fail();
+    } catch (NullPointerException expected) {}
+    try {
+      builder.putAll(null, Arrays.asList(1, 2, 3));
+      fail();
+    } catch (NullPointerException expected) {}
+    try {
+      builder.putAll(null, 1, 2, 3);
+      fail();
+    } catch (NullPointerException expected) {}
+    try {
+      builder.putAll(toPut);
+      fail();
+    } catch (NullPointerException expected) {}
+  }
+
+  public void testBuilderPutNullValue() {
+    Multimap<String, Integer> toPut = LinkedListMultimap.create();
+    toPut.put(null, 1);
+    ImmutableSetMultimap.Builder<String, Integer> builder
+        = ImmutableSetMultimap.builder();
+    try {
+      builder.put("foo", null);
+      fail();
+    } catch (NullPointerException expected) {}
+    try {
+      builder.putAll("foo", Arrays.asList(1, null, 3));
+      fail();
+    } catch (NullPointerException expected) {}
+    try {
+      builder.putAll("foo", 4, null, 6);
+      fail();
+    } catch (NullPointerException expected) {}
+    try {
+      builder.putAll(toPut);
+      fail();
+    } catch (NullPointerException expected) {}
+  }
+
+  public void testBuilderOrderKeysBy() {
+    ImmutableSetMultimap.Builder<String, Integer> builder
+        = ImmutableSetMultimap.builder();
+    builder.put("b", 3);
+    builder.put("d", 2);
+    builder.put("a", 5);
+    builder.orderKeysBy(Collections.reverseOrder());
+    builder.put("c", 4);
+    builder.put("a", 2);
+    builder.put("b", 6);
+    ImmutableSetMultimap<String, Integer> multimap = builder.build();
+    ASSERT.that(multimap.keySet()).hasContentsInOrder("d", "c", "b", "a");
+    ASSERT.that(multimap.values()).hasContentsInOrder(2, 4, 3, 6, 5, 2);
+    ASSERT.that(multimap.get("a")).hasContentsInOrder(5, 2);
+    ASSERT.that(multimap.get("b")).hasContentsInOrder(3, 6);
+    assertFalse(multimap.get("a") instanceof ImmutableSortedSet);
+    assertFalse(multimap.get("x") instanceof ImmutableSortedSet);
+    assertFalse(multimap.asMap().get("a") instanceof ImmutableSortedSet);
+  }
+
+  public void testBuilderOrderValuesBy() {
+    ImmutableSetMultimap.Builder<String, Integer> builder
+        = ImmutableSetMultimap.builder();
+    builder.put("b", 3);
+    builder.put("d", 2);
+    builder.put("a", 5);
+    builder.orderValuesBy(Collections.reverseOrder());
+    builder.put("c", 4);
+    builder.put("a", 2);
+    builder.put("b", 6);
+    ImmutableSetMultimap<String, Integer> multimap = builder.build();
+    ASSERT.that(multimap.keySet()).hasContentsInOrder("b", "d", "a", "c");
+    ASSERT.that(multimap.values()).hasContentsInOrder(6, 3, 2, 5, 2, 4);
+    ASSERT.that(multimap.get("a")).hasContentsInOrder(5, 2);
+    ASSERT.that(multimap.get("b")).hasContentsInOrder(6, 3);
+    assertTrue(multimap.get("a") instanceof ImmutableSortedSet);
+    assertEquals(Collections.reverseOrder(), 
+        ((ImmutableSortedSet<Integer>) multimap.get("a")).comparator());
+    assertTrue(multimap.get("x") instanceof ImmutableSortedSet);
+    assertEquals(Collections.reverseOrder(), 
+        ((ImmutableSortedSet<Integer>) multimap.get("x")).comparator());
+    assertTrue(multimap.asMap().get("a") instanceof ImmutableSortedSet);
+    assertEquals(Collections.reverseOrder(), 
+        ((ImmutableSortedSet<Integer>) multimap.asMap().get("a")).comparator());
+  }
+
+  public void testBuilderOrderKeysAndValuesBy() {
+    ImmutableSetMultimap.Builder<String, Integer> builder
+        = ImmutableSetMultimap.builder();
+    builder.put("b", 3);
+    builder.put("d", 2);
+    builder.put("a", 5);
+    builder.orderKeysBy(Collections.reverseOrder());
+    builder.orderValuesBy(Collections.reverseOrder());
+    builder.put("c", 4);
+    builder.put("a", 2);
+    builder.put("b", 6);
+    ImmutableSetMultimap<String, Integer> multimap = builder.build();
+    ASSERT.that(multimap.keySet()).hasContentsInOrder("d", "c", "b", "a");
+    ASSERT.that(multimap.values()).hasContentsInOrder(2, 4, 6, 3, 5, 2);
+    ASSERT.that(multimap.get("a")).hasContentsInOrder(5, 2);
+    ASSERT.that(multimap.get("b")).hasContentsInOrder(6, 3);
+    assertTrue(multimap.get("a") instanceof ImmutableSortedSet);
+    assertEquals(Collections.reverseOrder(), 
+        ((ImmutableSortedSet<Integer>) multimap.get("a")).comparator());
+    assertTrue(multimap.get("x") instanceof ImmutableSortedSet);
+    assertEquals(Collections.reverseOrder(), 
+        ((ImmutableSortedSet<Integer>) multimap.get("x")).comparator());
+    assertTrue(multimap.asMap().get("a") instanceof ImmutableSortedSet);
+    assertEquals(Collections.reverseOrder(), 
+        ((ImmutableSortedSet<Integer>) multimap.asMap().get("a")).comparator());
+  }
+  
+  public void testCopyOf() {
+    HashMultimap<String, Integer> input = HashMultimap.create();
+    input.put("foo", 1);
+    input.put("bar", 2);
+    input.put("foo", 3);
+    Multimap<String, Integer> multimap = ImmutableSetMultimap.copyOf(input);
+    assertEquals(multimap, input);
+    assertEquals(input, multimap);
+  }
+
+  public void testCopyOfWithDuplicates() {
+    ArrayListMultimap<Object, Object> input = ArrayListMultimap.create();
+    input.put("foo", 1);
+    input.put("bar", 2);
+    input.put("foo", 3);
+    input.put("foo", 1);
+    ImmutableSetMultimap<Object, Object> copy
+        = ImmutableSetMultimap.copyOf(input);
+    assertEquals(3, copy.size());
+  }
+
+  public void testCopyOfEmpty() {
+    HashMultimap<String, Integer> input = HashMultimap.create();
+    Multimap<String, Integer> multimap = ImmutableSetMultimap.copyOf(input);
+    assertEquals(multimap, input);
+    assertEquals(input, multimap);
+  }
+
+  public void testCopyOfImmutableSetMultimap() {
+    Multimap<String, Integer> multimap = createMultimap();
+    assertSame(multimap, ImmutableSetMultimap.copyOf(multimap));
+  }
+
+  public void testCopyOfNullKey() {
+    HashMultimap<String, Integer> input = HashMultimap.create();
+    input.put(null, 1);
+    try {
+      ImmutableSetMultimap.copyOf(input);
+      fail();
+    } catch (NullPointerException expected) {}
+  }
+
+  public void testCopyOfNullValue() {
+    HashMultimap<String, Integer> input = HashMultimap.create();
+    input.putAll("foo", Arrays.asList(1, null, 3));
+    try {
+      ImmutableSetMultimap.copyOf(input);
+      fail();
+    } catch (NullPointerException expected) {}
+  }
+
+  public void testEmptyMultimapReads() {
+    Multimap<String, Integer> multimap = ImmutableSetMultimap.of();
+    assertFalse(multimap.containsKey("foo"));
+    assertFalse(multimap.containsValue(1));
+    assertFalse(multimap.containsEntry("foo", 1));
+    assertTrue(multimap.entries().isEmpty());
+    assertTrue(multimap.equals(HashMultimap.create()));
+    assertEquals(Collections.emptySet(), multimap.get("foo"));
+    assertEquals(0, multimap.hashCode());
+    assertTrue(multimap.isEmpty());
+    assertEquals(HashMultiset.create(), multimap.keys());
+    assertEquals(Collections.emptySet(), multimap.keySet());
+    assertEquals(0, multimap.size());
+    assertTrue(multimap.values().isEmpty());
+    assertEquals("{}", multimap.toString());
+  }
+
+  public void testEmptyMultimapWrites() {
+    Multimap<String, Integer> multimap = ImmutableSetMultimap.of();
+    UnmodifiableCollectionTests.assertMultimapIsUnmodifiable(
+        multimap, "foo", 1);
+  }
+
+  public void testMultimapReads() {
+    Multimap<String, Integer> multimap = createMultimap();
+    assertTrue(multimap.containsKey("foo"));
+    assertFalse(multimap.containsKey("cat"));
+    assertTrue(multimap.containsValue(1));
+    assertFalse(multimap.containsValue(5));
+    assertTrue(multimap.containsEntry("foo", 1));
+    assertFalse(multimap.containsEntry("cat", 1));
+    assertFalse(multimap.containsEntry("foo", 5));
+    assertFalse(multimap.entries().isEmpty());
+    assertEquals(3, multimap.size());
+    assertFalse(multimap.isEmpty());
+    assertEquals("{foo=[1, 3], bar=[2]}", multimap.toString());
+  }
+
+  public void testMultimapWrites() {
+    Multimap<String, Integer> multimap = createMultimap();
+    UnmodifiableCollectionTests.assertMultimapIsUnmodifiable(
+        multimap, "bar", 2);
+  }
+
+  public void testMultimapEquals() {
+    Multimap<String, Integer> multimap = createMultimap();
+    Multimap<String, Integer> hashMultimap = HashMultimap.create();
+    hashMultimap.putAll("foo", Arrays.asList(1, 3));
+    hashMultimap.put("bar", 2);
+
+    new EqualsTester()
+        .addEqualityGroup(
+            multimap,
+            createMultimap(),
+            hashMultimap,
+            ImmutableSetMultimap.<String, Integer>builder()
+                .put("bar", 2).put("foo", 1).put("foo", 3).build(),
+            ImmutableSetMultimap.<String, Integer>builder()
+                .put("bar", 2).put("foo", 3).put("foo", 1).build())
+        .addEqualityGroup(ImmutableSetMultimap.<String, Integer>builder()
+            .put("foo", 2).put("foo", 3).put("foo", 1).build())
+        .addEqualityGroup(ImmutableSetMultimap.<String, Integer>builder()
+            .put("bar", 2).put("foo", 3).build())
+        .testEquals();
+  }
+
+  public void testOf() {
+    assertMultimapEquals(
+        ImmutableSetMultimap.of("one", 1),
+        "one", 1);
+    assertMultimapEquals(
+        ImmutableSetMultimap.of("one", 1, "two", 2),
+        "one", 1, "two", 2);
+    assertMultimapEquals(
+        ImmutableSetMultimap.of("one", 1, "two", 2, "three", 3),
+        "one", 1, "two", 2, "three", 3);
+    assertMultimapEquals(
+        ImmutableSetMultimap.of("one", 1, "two", 2, "three", 3, "four", 4),
+        "one", 1, "two", 2, "three", 3, "four", 4);
+    assertMultimapEquals(
+        ImmutableSetMultimap.of(
+            "one", 1, "two", 2, "three", 3, "four", 4, "five", 5),
+        "one", 1, "two", 2, "three", 3, "four", 4, "five", 5);
+  }
+
+  public void testInverse() {
+    assertEquals(
+        ImmutableSetMultimap.<Integer, String>of(),
+        ImmutableSetMultimap.<String, Integer>of().inverse());
+    assertEquals(
+        ImmutableSetMultimap.of(1, "one"),
+        ImmutableSetMultimap.of("one", 1).inverse());
+    assertEquals(
+        ImmutableSetMultimap.of(1, "one", 2, "two"),
+        ImmutableSetMultimap.of("one", 1, "two", 2).inverse());
+    assertEquals(
+        ImmutableSetMultimap.of('o', "of", 'f', "of", 't', "to", 'o', "to"),
+        ImmutableSetMultimap.of("of", 'o', "of", 'f', "to", 't', "to", 'o').inverse());
+  }
+
+  public void testInverseMinimizesWork() {
+    ImmutableSetMultimap<String, Character> multimap =
+        ImmutableSetMultimap.of("of", 'o', "of", 'f', "to", 't', "to", 'o');
+    assertSame(multimap.inverse(), multimap.inverse());
+    assertSame(multimap, multimap.inverse().inverse());
+  }
+
+  private static <K, V> void assertMultimapEquals(Multimap<K, V> multimap,
+      Object... alternatingKeysAndValues) {
+    assertEquals(multimap.size(), alternatingKeysAndValues.length / 2);
+    int i = 0;
+    for (Entry<K, V> entry : multimap.entries()) {
+      assertEquals(alternatingKeysAndValues[i++], entry.getKey());
+      assertEquals(alternatingKeysAndValues[i++], entry.getValue());
+    }
+  }  
+
+  @GwtIncompatible("SerializableTester")
+  public void testSerialization() {
+    Multimap<String, Integer> multimap = createMultimap();
+    SerializableTester.reserializeAndAssert(multimap);
+    assertEquals(multimap.size(),
+        SerializableTester.reserialize(multimap).size());
+    SerializableTester.reserializeAndAssert(multimap.get("foo"));
+    LenientSerializableTester.reserializeAndAssertLenient(multimap.keySet());
+    SerializableTester.reserializeAndAssert(multimap.keys());
+    SerializableTester.reserializeAndAssert(multimap.asMap());
+    Collection<Integer> valuesCopy
+        = SerializableTester.reserialize(multimap.values());
+    assertEquals(HashMultiset.create(multimap.values()),
+        HashMultiset.create(valuesCopy));
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testEmptySerialization() {
+    Multimap<String, Integer> multimap = ImmutableSetMultimap.of();
+    assertSame(multimap, SerializableTester.reserialize(multimap));
+  }
+
+  private ImmutableSetMultimap<String, Integer> createMultimap() {
+    return ImmutableSetMultimap.<String, Integer>builder()
+        .put("foo", 1).put("bar", 2).put("foo", 3).build();
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/ImmutableSetTest.java b/guava-tests/test/com/google/common/collect/ImmutableSetTest.java
new file mode 100644
index 0000000..6ed82ec
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/ImmutableSetTest.java
@@ -0,0 +1,198 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.collect.ImmutableSet.Builder;
+import com.google.common.testing.NullPointerTester;
+import com.google.common.testing.SerializableTester;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.Set;
+
+/**
+ * Unit test for {@link ImmutableSet}.
+ *
+ * @author Kevin Bourrillion
+ * @author Jared Levy
+ * @author Nick Kralevich
+ */
+@GwtCompatible(emulated = true)
+public class ImmutableSetTest extends AbstractImmutableSetTest {
+
+  @Override protected Set<String> of() {
+    return ImmutableSet.of();
+  }
+
+  @Override protected Set<String> of(String e) {
+    return ImmutableSet.of(e);
+  }
+
+  @Override protected Set<String> of(String e1, String e2) {
+    return ImmutableSet.of(e1, e2);
+  }
+
+  @Override protected Set<String> of(String e1, String e2, String e3) {
+    return ImmutableSet.of(e1, e2, e3);
+  }
+
+  @Override protected Set<String> of(
+      String e1, String e2, String e3, String e4) {
+    return ImmutableSet.of(e1, e2, e3, e4);
+  }
+
+  @Override protected Set<String> of(
+      String e1, String e2, String e3, String e4, String e5) {
+    return ImmutableSet.of(e1, e2, e3, e4, e5);
+  }
+
+  @Override protected Set<String> of(String e1, String e2, String e3,
+      String e4, String e5, String e6, String... rest) {
+    return ImmutableSet.of(e1, e2, e3, e4, e5, e6, rest);
+  }
+
+  @Override protected Set<String> copyOf(String[] elements) {
+    return ImmutableSet.copyOf(elements);
+  }
+
+  @Override protected Set<String> copyOf(Collection<String> elements) {
+    return ImmutableSet.copyOf(elements);
+  }
+
+  @Override protected Set<String> copyOf(Iterable<String> elements) {
+    return ImmutableSet.copyOf(elements);
+  }
+
+  @Override protected Set<String> copyOf(Iterator<String> elements) {
+    return ImmutableSet.copyOf(elements);
+  }
+
+  public void testCreation_allDuplicates() {
+    ImmutableSet<String> set = ImmutableSet.copyOf(Lists.newArrayList("a", "a"));
+    assertTrue(set instanceof SingletonImmutableSet);
+    assertEquals(Lists.newArrayList("a"), Lists.newArrayList(set));
+  }
+
+  public void testCreation_oneDuplicate() {
+    // now we'll get the varargs overload
+    ImmutableSet<String> set = ImmutableSet.of(
+        "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "a");
+    assertEquals(Lists.newArrayList(
+        "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m"),
+        Lists.newArrayList(set));
+  }
+
+  public void testCreation_manyDuplicates() {
+    // now we'll get the varargs overload
+    ImmutableSet<String> set = ImmutableSet.of(
+        "a", "b", "c", "c", "c", "c", "b", "b", "a", "a", "c", "c", "c", "a");
+    ASSERT.that(set).hasContentsInOrder("a", "b", "c");
+  }
+
+  public void testCreation_arrayOfArray() {
+    String[] array = new String[] { "a" };
+    Set<String[]> set = ImmutableSet.<String[]>of(array);
+    assertEquals(Collections.singleton(array), set);
+  }
+
+  @GwtIncompatible("NullPointerTester")
+  public void testNullPointers() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.testAllPublicStaticMethods(ImmutableSet.class);
+  }
+
+  @GwtIncompatible("ImmutableSet.chooseTableSize")
+  public void testChooseTableSize() {
+    assertEquals(8, ImmutableSet.chooseTableSize(3));
+    assertEquals(16, ImmutableSet.chooseTableSize(4));
+
+    assertEquals(1 << 30, ImmutableSet.chooseTableSize(1 << 28));
+    assertEquals(1 << 30, ImmutableSet.chooseTableSize(1 << 29 - 1));
+
+    // Now we hit the cap
+    assertEquals(1 << 30, ImmutableSet.chooseTableSize(1 << 29));
+    assertEquals(1 << 30, ImmutableSet.chooseTableSize(1 << 30 - 1));
+
+    // Now we've gone too far
+    try {
+      ImmutableSet.chooseTableSize(1 << 30);
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  @GwtIncompatible("RegularImmutableSet.table not in emulation")
+  public void testResizeTable() {
+    verifyTableSize(100, 2, 8);
+    verifyTableSize(100, 5, 16);
+    verifyTableSize(100, 33, 256);
+    verifyTableSize(17, 17, 64);
+    verifyTableSize(17, 16, 64);
+    verifyTableSize(17, 15, 64);
+  }
+
+  @GwtIncompatible("RegularImmutableSet.table not in emulation")
+  private void verifyTableSize(int inputSize, int setSize, int tableSize) {
+    Builder<Integer> builder = ImmutableSet.builder();
+    for (int i = 0; i < inputSize; i++) {
+      builder.add(i % setSize);
+    }
+    ImmutableSet<Integer> set = builder.build();
+    assertTrue(set instanceof RegularImmutableSet);
+    assertEquals("Input size " + inputSize + " and set size " + setSize,
+        tableSize, ((RegularImmutableSet<Integer>) set).table.length);
+  }
+
+  public void testCopyOf_copiesImmutableSortedSet() {
+    ImmutableSortedSet<String> sortedSet = ImmutableSortedSet.of("a");
+    ImmutableSet<String> copy = ImmutableSet.copyOf(sortedSet);
+    assertNotSame(sortedSet, copy);
+  }
+
+  @GwtIncompatible("GWT is single threaded")
+  public void testCopyOf_threadSafe() {
+    verifyThreadSafe();
+  }
+
+  public void testAsList() {
+    ImmutableSet<String> set = ImmutableSet.of("a", "b", "c", "d", "e");
+    ImmutableList<String> list = set.asList();
+    assertEquals(ImmutableList.of("a", "b", "c", "d", "e"), list);
+  }
+
+  @GwtIncompatible("SerializableTester, ImmutableAsList")
+  public void testAsListReturnTypeAndSerialization() {
+    ImmutableSet<String> set = ImmutableSet.of("a", "b", "c", "d", "e");
+    ImmutableList<String> list = set.asList();
+    assertTrue(list instanceof ImmutableAsList);
+    ImmutableList<String> copy = SerializableTester.reserializeAndAssert(list);
+    assertTrue(copy instanceof ImmutableAsList);
+  }
+
+  @Override <E extends Comparable<E>> Builder<E> builder() {
+    return ImmutableSet.builder();
+  }
+
+  @Override int getComplexBuilderSetLastElement() {
+    return LAST_COLOR_ADDED;
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/ImmutableSortedMapTest.java b/guava-tests/test/com/google/common/collect/ImmutableSortedMapTest.java
new file mode 100644
index 0000000..988aa4e
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/ImmutableSortedMapTest.java
@@ -0,0 +1,825 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.base.Joiner;
+import com.google.common.collect.ImmutableSortedMap.Builder;
+import com.google.common.collect.testing.CollectionTestSuiteBuilder;
+import com.google.common.collect.testing.ReserializingTestCollectionGenerator;
+import com.google.common.collect.testing.ReserializingTestSetGenerator;
+import com.google.common.collect.testing.SetTestSuiteBuilder;
+import com.google.common.collect.testing.SortedMapInterfaceTest;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.google.SortedMapGenerators.ImmutableSortedMapEntrySetGenerator;
+import com.google.common.collect.testing.google.SortedMapGenerators.ImmutableSortedMapHeadMapKeySetGenerator;
+import com.google.common.collect.testing.google.SortedMapGenerators.ImmutableSortedMapKeySetGenerator;
+import com.google.common.collect.testing.google.SortedMapGenerators.ImmutableSortedMapSubMapEntryGenerator;
+import com.google.common.collect.testing.google.SortedMapGenerators.ImmutableSortedMapTailMapValuesGenerator;
+import com.google.common.collect.testing.google.SortedMapGenerators.ImmutableSortedMapValuesGenerator;
+import com.google.common.testing.NullPointerTester;
+import com.google.common.testing.SerializableTester;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import java.io.Serializable;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.SortedMap;
+
+/**
+ * Tests for {@link ImmutableSortedMap}.
+ *
+ * @author Kevin Bourrillion
+ * @author Jesse Wilson
+ * @author Jared Levy
+ */
+@GwtCompatible(emulated = true)
+public class ImmutableSortedMapTest extends TestCase {
+  // TODO: Avoid duplicating code in ImmutableMapTest
+
+  @GwtIncompatible("suite")
+  public static Test suite() {
+    TestSuite suite = new TestSuite();
+    suite.addTestSuite(ImmutableSortedMapTest.class);
+
+    suite.addTest(SetTestSuiteBuilder.using(
+        new ImmutableSortedMapKeySetGenerator())
+        .withFeatures(
+            CollectionSize.ANY,
+            CollectionFeature.KNOWN_ORDER,
+            CollectionFeature.REJECTS_DUPLICATES_AT_CREATION,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .named("ImmutableSortedMap.keySet")
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(
+        new ImmutableSortedMapEntrySetGenerator())
+        .withFeatures(
+            CollectionSize.ANY,
+            CollectionFeature.KNOWN_ORDER,
+            CollectionFeature.REJECTS_DUPLICATES_AT_CREATION,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .named("ImmutableSortedMap.entrySet")
+        .createTestSuite());
+
+    suite.addTest(CollectionTestSuiteBuilder.using(
+        new ImmutableSortedMapValuesGenerator())
+        .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .named("ImmutableSortedMap.values")
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(
+        ReserializingTestSetGenerator.newInstance(
+            new ImmutableSortedMapKeySetGenerator()))
+        .withFeatures(
+            CollectionSize.ANY,
+            CollectionFeature.KNOWN_ORDER,
+            CollectionFeature.REJECTS_DUPLICATES_AT_CREATION,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .named("ImmutableSortedMap.keySet, reserialized")
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(
+        ReserializingTestSetGenerator.newInstance(
+            new ImmutableSortedMapEntrySetGenerator()))
+        .withFeatures(
+            CollectionSize.ANY,
+            CollectionFeature.KNOWN_ORDER,
+            CollectionFeature.REJECTS_DUPLICATES_AT_CREATION,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .named("ImmutableSortedMap.entrySet, reserialized")
+        .createTestSuite());
+
+    suite.addTest(CollectionTestSuiteBuilder.using(
+        ReserializingTestCollectionGenerator.newInstance(
+            new ImmutableSortedMapValuesGenerator()))
+        .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .named("ImmutableSortedMap.values, reserialized")
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(
+        new ImmutableSortedMapHeadMapKeySetGenerator())
+        .withFeatures(
+            CollectionSize.ANY,
+            CollectionFeature.KNOWN_ORDER,
+            CollectionFeature.REJECTS_DUPLICATES_AT_CREATION,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .named("ImmutableSortedMap.headMap.keySet")
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(
+        new ImmutableSortedMapSubMapEntryGenerator())
+        .withFeatures(
+            CollectionSize.ANY,
+            CollectionFeature.KNOWN_ORDER,
+            CollectionFeature.REJECTS_DUPLICATES_AT_CREATION,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .named("ImmutableSortedMap.subMap.entrySet")
+        .createTestSuite());
+
+    suite.addTest(CollectionTestSuiteBuilder.using(
+        new ImmutableSortedMapTailMapValuesGenerator())
+        .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .named("ImmutableSortedMap.tailMap.values")
+        .createTestSuite());
+
+    return suite;
+  }
+
+  public abstract static class AbstractMapTests<K, V>
+      extends SortedMapInterfaceTest<K, V> {
+    public AbstractMapTests() {
+      super(false, false, false, false, false);
+    }
+
+    @Override protected SortedMap<K, V> makeEmptyMap() {
+      throw new UnsupportedOperationException();
+    }
+
+    private static final Joiner joiner = Joiner.on(", ");
+
+    @Override protected void assertMoreInvariants(Map<K, V> map) {
+      // TODO: can these be moved to MapInterfaceTest?
+      for (Entry<K, V> entry : map.entrySet()) {
+        assertEquals(entry.getKey() + "=" + entry.getValue(),
+            entry.toString());
+      }
+
+      assertEquals("{" + joiner.join(map.entrySet()) + "}",
+          map.toString());
+      assertEquals("[" + joiner.join(map.entrySet()) + "]",
+          map.entrySet().toString());
+      assertEquals("[" + joiner.join(map.keySet()) + "]",
+          map.keySet().toString());
+      assertEquals("[" + joiner.join(map.values()) + "]",
+          map.values().toString());
+
+      assertEquals(Sets.newHashSet(map.entrySet()), map.entrySet());
+      assertEquals(Sets.newHashSet(map.keySet()), map.keySet());
+    }
+  }
+
+  public static class MapTests extends AbstractMapTests<String, Integer> {
+    @Override protected SortedMap<String, Integer> makeEmptyMap() {
+      return ImmutableSortedMap.of();
+    }
+
+    @Override protected SortedMap<String, Integer> makePopulatedMap() {
+      return ImmutableSortedMap.of("one", 1, "two", 2, "three", 3);
+    }
+
+    @Override protected String getKeyNotInPopulatedMap() {
+      return "minus one";
+    }
+
+    @Override protected Integer getValueNotInPopulatedMap() {
+      return -1;
+    }
+  }
+
+  public static class SingletonMapTests
+      extends AbstractMapTests<String, Integer> {
+    @Override protected SortedMap<String, Integer> makePopulatedMap() {
+      return ImmutableSortedMap.of("one", 1);
+    }
+
+    @Override protected String getKeyNotInPopulatedMap() {
+      return "minus one";
+    }
+
+    @Override protected Integer getValueNotInPopulatedMap() {
+      return -1;
+    }
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public static class ReserializedMapTests
+      extends AbstractMapTests<String, Integer> {
+    @Override protected SortedMap<String, Integer> makePopulatedMap() {
+      return SerializableTester.reserialize(
+          ImmutableSortedMap.of("one", 1, "two", 2, "three", 3));
+    }
+
+    @Override protected String getKeyNotInPopulatedMap() {
+      return "minus one";
+    }
+
+    @Override protected Integer getValueNotInPopulatedMap() {
+      return -1;
+    }
+  }
+
+  public static class HeadMapTests extends AbstractMapTests<String, Integer> {
+    @Override protected SortedMap<String, Integer> makePopulatedMap() {
+      return ImmutableSortedMap.of("a", 1, "b", 2, "c", 3, "d", 4, "e", 5)
+          .headMap("d");
+    }
+
+    @Override protected String getKeyNotInPopulatedMap() {
+      return "d";
+    }
+
+    @Override protected Integer getValueNotInPopulatedMap() {
+      return 4;
+    }
+  }
+
+  public static class HeadMapInclusiveTests extends AbstractMapTests<String, Integer> {
+    @Override protected SortedMap<String, Integer> makePopulatedMap() {
+      return ImmutableSortedMap.of("a", 1, "b", 2, "c", 3, "d", 4, "e", 5)
+          .headMap("c", true);
+    }
+
+    @Override protected String getKeyNotInPopulatedMap() {
+      return "d";
+    }
+
+    @Override protected Integer getValueNotInPopulatedMap() {
+      return 4;
+    }
+  }
+  
+  public static class TailMapTests extends AbstractMapTests<String, Integer> {
+    @Override protected SortedMap<String, Integer> makePopulatedMap() {
+      return ImmutableSortedMap.of("a", 1, "b", 2, "c", 3, "d", 4, "e", 5)
+          .tailMap("b");
+    }
+
+    @Override protected String getKeyNotInPopulatedMap() {
+      return "a";
+    }
+
+    @Override protected Integer getValueNotInPopulatedMap() {
+      return 1;
+    }
+  }
+
+  public static class TailExclusiveMapTests extends AbstractMapTests<String, Integer> {
+    @Override protected SortedMap<String, Integer> makePopulatedMap() {
+      return ImmutableSortedMap.of("a", 1, "b", 2, "c", 3, "d", 4, "e", 5)
+          .tailMap("a", false);
+    }
+
+    @Override protected String getKeyNotInPopulatedMap() {
+      return "a";
+    }
+
+    @Override protected Integer getValueNotInPopulatedMap() {
+      return 1;
+    }
+  }
+
+  public static class SubMapTests extends AbstractMapTests<String, Integer> {
+    @Override protected SortedMap<String, Integer> makePopulatedMap() {
+      return ImmutableSortedMap.of("a", 1, "b", 2, "c", 3, "d", 4, "e", 5)
+          .subMap("b", "d");
+    }
+
+    @Override protected String getKeyNotInPopulatedMap() {
+      return "a";
+    }
+
+    @Override protected Integer getValueNotInPopulatedMap() {
+      return 4;
+    }
+  }
+
+  public static class CreationTests extends TestCase {
+    public void testEmptyBuilder() {
+      ImmutableSortedMap<String, Integer> map
+          = ImmutableSortedMap.<String, Integer>naturalOrder().build();
+      assertEquals(Collections.<String, Integer>emptyMap(), map);
+    }
+
+    public void testSingletonBuilder() {
+      ImmutableSortedMap<String, Integer> map
+          = ImmutableSortedMap.<String, Integer>naturalOrder()
+              .put("one", 1)
+              .build();
+      assertMapEquals(map, "one", 1);
+    }
+
+    public void testBuilder() {
+      ImmutableSortedMap<String, Integer> map
+          = ImmutableSortedMap.<String, Integer>naturalOrder()
+              .put("one", 1)
+              .put("two", 2)
+              .put("three", 3)
+              .put("four", 4)
+              .put("five", 5)
+              .build();
+      assertMapEquals(map,
+          "five", 5, "four", 4, "one", 1, "three", 3, "two", 2);
+    }
+
+    public void testBuilder_withImmutableEntry() {
+      ImmutableSortedMap<String, Integer> map =
+          ImmutableSortedMap.<String, Integer>naturalOrder()
+              .put(Maps.immutableEntry("one", 1))
+              .build();
+      assertMapEquals(map, "one", 1);
+    }
+
+    public void testBuilder_withImmutableEntryAndNullContents() {
+      Builder<String, Integer> builder =
+          ImmutableSortedMap.naturalOrder();
+      try {
+        builder.put(Maps.immutableEntry("one", (Integer) null));
+        fail();
+      } catch (NullPointerException expected) {
+      }
+      try {
+        builder.put(Maps.immutableEntry((String) null, 1));
+        fail();
+      } catch (NullPointerException expected) {
+      }
+    }
+
+    private static class StringHolder {
+      String string;
+    }
+
+    public void testBuilder_withMutableEntry() {
+      ImmutableSortedMap.Builder<String, Integer> builder =
+          ImmutableSortedMap.naturalOrder();
+      final StringHolder holder = new StringHolder();
+      holder.string = "one";
+      Entry<String, Integer> entry = new AbstractMapEntry<String, Integer>() {
+        @Override public String getKey() {
+          return holder.string;
+        }
+        @Override public Integer getValue() {
+          return 1;
+        }
+      };
+
+      builder.put(entry);
+      holder.string = "two";
+      assertMapEquals(builder.build(), "one", 1);
+    }
+
+    public void testBuilderPutAllWithEmptyMap() {
+      ImmutableSortedMap<String, Integer> map
+          = ImmutableSortedMap.<String, Integer>naturalOrder()
+              .putAll(Collections.<String, Integer>emptyMap())
+              .build();
+      assertEquals(Collections.<String, Integer>emptyMap(), map);
+    }
+
+    public void testBuilderPutAll() {
+      Map<String, Integer> toPut = new LinkedHashMap<String, Integer>();
+      toPut.put("one", 1);
+      toPut.put("two", 2);
+      toPut.put("three", 3);
+      Map<String, Integer> moreToPut = new LinkedHashMap<String, Integer>();
+      moreToPut.put("four", 4);
+      moreToPut.put("five", 5);
+
+      ImmutableSortedMap<String, Integer> map
+          = ImmutableSortedMap.<String, Integer>naturalOrder()
+              .putAll(toPut)
+              .putAll(moreToPut)
+              .build();
+      assertMapEquals(map,
+          "five", 5, "four", 4, "one", 1, "three", 3, "two", 2);
+    }
+
+    public void testBuilderReuse() {
+      Builder<String, Integer> builder = ImmutableSortedMap.naturalOrder();
+      ImmutableSortedMap<String, Integer> mapOne = builder
+          .put("one", 1)
+          .put("two", 2)
+          .build();
+      ImmutableSortedMap<String, Integer> mapTwo = builder
+          .put("three", 3)
+          .put("four", 4)
+          .build();
+
+      assertMapEquals(mapOne, "one", 1, "two", 2);
+      assertMapEquals(mapTwo, "four", 4, "one", 1, "three", 3, "two", 2);
+    }
+
+    public void testBuilderPutNullKey() {
+      Builder<String, Integer> builder = ImmutableSortedMap.naturalOrder();
+      try {
+        builder.put(null, 1);
+        fail();
+      } catch (NullPointerException expected) {
+      }
+    }
+
+    public void testBuilderPutNullValue() {
+      Builder<String, Integer> builder = ImmutableSortedMap.naturalOrder();
+      try {
+        builder.put("one", null);
+        fail();
+      } catch (NullPointerException expected) {
+      }
+    }
+
+    public void testBuilderPutNullKeyViaPutAll() {
+      Builder<String, Integer> builder = ImmutableSortedMap.naturalOrder();
+      try {
+        builder.putAll(Collections.<String, Integer>singletonMap(null, 1));
+        fail();
+      } catch (NullPointerException expected) {
+      }
+    }
+
+    public void testBuilderPutNullValueViaPutAll() {
+      Builder<String, Integer> builder = ImmutableSortedMap.naturalOrder();
+      try {
+        builder.putAll(Collections.<String, Integer>singletonMap("one", null));
+        fail();
+      } catch (NullPointerException expected) {
+      }
+    }
+
+    public void testPuttingTheSameKeyTwiceThrowsOnBuild() {
+      Builder<String, Integer> builder
+          = ImmutableSortedMap.<String, Integer>naturalOrder()
+              .put("one", 1)
+              .put("one", 2); // throwing on this line would be even better
+
+      try {
+        builder.build();
+        fail();
+      } catch (IllegalArgumentException expected) {
+        assertEquals("Duplicate keys in mappings one=1 and one=2",
+            expected.getMessage());
+      }
+    }
+
+    public void testOf() {
+      assertMapEquals(
+          ImmutableSortedMap.of("one", 1),
+          "one", 1);
+      assertMapEquals(
+          ImmutableSortedMap.of("one", 1, "two", 2),
+          "one", 1, "two", 2);
+      assertMapEquals(
+          ImmutableSortedMap.of("one", 1, "two", 2, "three", 3),
+          "one", 1, "three", 3, "two", 2);
+      assertMapEquals(
+          ImmutableSortedMap.of("one", 1, "two", 2, "three", 3, "four", 4),
+          "four", 4, "one", 1, "three", 3, "two", 2);
+      assertMapEquals(
+          ImmutableSortedMap.of(
+              "one", 1, "two", 2, "three", 3, "four", 4, "five", 5),
+          "five", 5, "four", 4, "one", 1, "three", 3, "two", 2);
+    }
+
+    public void testOfNullKey() {
+      Integer n = null;
+      try {
+        ImmutableSortedMap.of(n, 1);
+        fail();
+      } catch (NullPointerException expected) {
+      }
+
+      try {
+        ImmutableSortedMap.of("one", 1, null, 2);
+        fail();
+      } catch (NullPointerException expected) {
+      }
+    }
+
+    public void testOfNullValue() {
+      try {
+        ImmutableSortedMap.of("one", null);
+        fail();
+      } catch (NullPointerException expected) {
+      }
+
+      try {
+        ImmutableSortedMap.of("one", 1, "two", null);
+        fail();
+      } catch (NullPointerException expected) {
+      }
+    }
+
+    public void testOfWithDuplicateKey() {
+      try {
+        ImmutableSortedMap.of("one", 1, "one", 1);
+        fail();
+      } catch (IllegalArgumentException expected) {
+        assertEquals("Duplicate keys in mappings one=1 and one=1",
+            expected.getMessage());
+      }
+    }
+
+    public void testCopyOfEmptyMap() {
+      ImmutableSortedMap<String, Integer> copy
+          = ImmutableSortedMap.copyOf(Collections.<String, Integer>emptyMap());
+      assertEquals(Collections.<String, Integer>emptyMap(), copy);
+      assertSame(copy, ImmutableSortedMap.copyOf(copy));
+      assertSame(Ordering.natural(), copy.comparator());
+    }
+
+    public void testCopyOfSingletonMap() {
+      ImmutableSortedMap<String, Integer> copy
+          = ImmutableSortedMap.copyOf(Collections.singletonMap("one", 1));
+      assertMapEquals(copy, "one", 1);
+      assertSame(copy, ImmutableSortedMap.copyOf(copy));
+      assertSame(Ordering.natural(), copy.comparator());
+    }
+
+    public void testCopyOf() {
+      Map<String, Integer> original = new LinkedHashMap<String, Integer>();
+      original.put("one", 1);
+      original.put("two", 2);
+      original.put("three", 3);
+
+      ImmutableSortedMap<String, Integer> copy
+          = ImmutableSortedMap.copyOf(original);
+      assertMapEquals(copy, "one", 1, "three", 3, "two", 2);
+      assertSame(copy, ImmutableSortedMap.copyOf(copy));
+      assertSame(Ordering.natural(), copy.comparator());
+    }
+
+    public void testCopyOfExplicitComparator() {
+      Comparator<String> comparator = Ordering.natural().reverse();
+      Map<String, Integer> original = new LinkedHashMap<String, Integer>();
+      original.put("one", 1);
+      original.put("two", 2);
+      original.put("three", 3);
+
+      ImmutableSortedMap<String, Integer> copy
+          = ImmutableSortedMap.copyOf(original, comparator);
+      assertMapEquals(copy, "two", 2, "three", 3, "one", 1);
+      assertSame(copy, ImmutableSortedMap.copyOf(copy, comparator));
+      assertSame(comparator, copy.comparator());
+    }
+
+    public void testCopyOfImmutableSortedSetDifferentComparator() {
+      Comparator<String> comparator = Ordering.natural().reverse();
+      Map<String, Integer> original
+          = ImmutableSortedMap.of("one", 1, "two", 2, "three", 3);
+      ImmutableSortedMap<String, Integer> copy
+          = ImmutableSortedMap.copyOf(original, comparator);
+      assertMapEquals(copy, "two", 2, "three", 3, "one", 1);
+      assertSame(copy, ImmutableSortedMap.copyOf(copy, comparator));
+      assertSame(comparator, copy.comparator());
+    }
+
+    public void testCopyOfSortedNatural() {
+      SortedMap<String, Integer> original = Maps.newTreeMap();
+      original.put("one", 1);
+      original.put("two", 2);
+      original.put("three", 3);
+
+      ImmutableSortedMap<String, Integer> copy
+          = ImmutableSortedMap.copyOfSorted(original);
+      assertMapEquals(copy, "one", 1, "three", 3, "two", 2);
+      assertSame(copy, ImmutableSortedMap.copyOfSorted(copy));
+      assertSame(Ordering.natural(), copy.comparator());
+    }
+
+    public void testCopyOfSortedExplicit() {
+      Comparator<String> comparator = Ordering.natural().reverse();
+      SortedMap<String, Integer> original = Maps.newTreeMap(comparator);
+      original.put("one", 1);
+      original.put("two", 2);
+      original.put("three", 3);
+
+      ImmutableSortedMap<String, Integer> copy
+          = ImmutableSortedMap.copyOfSorted(original);
+      assertMapEquals(copy, "two", 2, "three", 3, "one", 1);
+      assertSame(copy, ImmutableSortedMap.copyOfSorted(copy));
+      assertSame(comparator, copy.comparator());
+    }
+
+    private static class IntegerDiv10 implements Comparable<IntegerDiv10> {
+      final int value;
+
+      IntegerDiv10(int value) {
+        this.value = value;
+      }
+
+      @Override
+      public int compareTo(IntegerDiv10 o) {
+        return value / 10 - o.value / 10;
+      }
+
+      @Override public String toString() {
+        return Integer.toString(value);
+      }
+    }
+
+    public void testCopyOfDuplicateKey() {
+      Map<IntegerDiv10, String> original = ImmutableMap.of(
+          new IntegerDiv10(3), "three",
+          new IntegerDiv10(20), "twenty",
+          new IntegerDiv10(11), "eleven",
+          new IntegerDiv10(35), "thirty five",
+          new IntegerDiv10(12), "twelve"
+      );
+
+      try {
+        ImmutableSortedMap.copyOf(original);
+        fail("Expected IllegalArgumentException");
+      } catch (IllegalArgumentException expected) {
+        assertEquals("Duplicate keys in mappings 11=eleven and 12=twelve",
+            expected.getMessage());
+      }
+    }
+
+    public void testImmutableMapCopyOfImmutableSortedMap() {
+      IntegerDiv10 three = new IntegerDiv10(3);
+      IntegerDiv10 eleven = new IntegerDiv10(11);
+      IntegerDiv10 twelve = new IntegerDiv10(12);
+      IntegerDiv10 twenty = new IntegerDiv10(20);
+      Map<IntegerDiv10, String> original = ImmutableSortedMap.of(
+          three, "three", eleven, "eleven", twenty, "twenty");
+      Map<IntegerDiv10, String> copy = ImmutableMap.copyOf(original);
+      assertTrue(original.containsKey(twelve));
+      assertFalse(copy.containsKey(twelve));
+    }
+
+    public void testBuilderReverseOrder() {
+      ImmutableSortedMap<String, Integer> map
+          = ImmutableSortedMap.<String, Integer>reverseOrder()
+              .put("one", 1)
+              .put("two", 2)
+              .put("three", 3)
+              .put("four", 4)
+              .put("five", 5)
+              .build();
+      assertMapEquals(map,
+          "two", 2, "three", 3, "one", 1, "four", 4, "five", 5);
+      assertEquals(Ordering.natural().reverse(), map.comparator());
+    }
+
+    public void testBuilderComparator() {
+      Comparator<String> comparator = Ordering.natural().reverse();
+      ImmutableSortedMap<String, Integer> map
+          = new ImmutableSortedMap.Builder<String, Integer>(comparator)
+              .put("one", 1)
+              .put("two", 2)
+              .put("three", 3)
+              .put("four", 4)
+              .put("five", 5)
+              .build();
+      assertMapEquals(map,
+          "two", 2, "three", 3, "one", 1, "four", 4, "five", 5);
+      assertSame(comparator, map.comparator());
+    }
+  }
+
+  public void testNullGet() {
+    ImmutableSortedMap<String, Integer> map = ImmutableSortedMap.of("one", 1);
+    assertNull(map.get(null));
+  }
+
+  @GwtIncompatible("NullPointerTester")
+  public void testNullPointers() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.testAllPublicStaticMethods(ImmutableSortedMap.class);
+    tester.testAllPublicInstanceMethods(
+        ImmutableSortedMap.<String, Integer>naturalOrder());
+    tester.testAllPublicInstanceMethods(ImmutableSortedMap.of());
+    tester.testAllPublicInstanceMethods(ImmutableSortedMap.of("one", 1));
+    tester.testAllPublicInstanceMethods(
+        ImmutableSortedMap.of("one", 1, "two", 2, "three", 3));
+  }
+
+  private static <K, V> void assertMapEquals(Map<K, V> map,
+      Object... alternatingKeysAndValues) {
+    assertEquals(map.size(), alternatingKeysAndValues.length / 2);
+    int i = 0;
+    for (Entry<K, V> entry : map.entrySet()) {
+      assertEquals(alternatingKeysAndValues[i++], entry.getKey());
+      assertEquals(alternatingKeysAndValues[i++], entry.getValue());
+    }
+  }
+
+  private static class IntHolder implements Serializable {
+    public int value;
+
+    public IntHolder(int value) {
+      this.value = value;
+    }
+
+    @Override public boolean equals(Object o) {
+      return (o instanceof IntHolder) && ((IntHolder) o).value == value;
+    }
+
+    @Override public int hashCode() {
+      return value;
+    }
+
+    private static final long serialVersionUID = 5;
+  }
+
+  public void testMutableValues() {
+    IntHolder holderA = new IntHolder(1);
+    IntHolder holderB = new IntHolder(2);
+    Map<String, IntHolder> map
+        = ImmutableSortedMap.of("a", holderA, "b", holderB);
+    holderA.value = 3;
+    assertTrue(map.entrySet().contains(
+        Maps.immutableEntry("a", new IntHolder(3))));
+    Map<String, Integer> intMap
+        = ImmutableSortedMap.of("a", 3, "b", 2);
+    assertEquals(intMap.hashCode(), map.entrySet().hashCode());
+    assertEquals(intMap.hashCode(), map.hashCode());
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testViewSerialization() {
+    Map<String, Integer> map
+        = ImmutableSortedMap.of("one", 1, "two", 2, "three", 3);
+    SerializableTester.reserializeAndAssert(map.entrySet());
+    SerializableTester.reserializeAndAssert(map.keySet());
+    assertEquals(Lists.newArrayList(map.values()),
+        Lists.newArrayList(SerializableTester.reserialize(map.values())));
+  }
+
+  @SuppressWarnings("unchecked") // varargs
+  public void testHeadMapInclusive() {
+    Map<String, Integer> map =
+        ImmutableSortedMap.of("one", 1, "two", 2, "three", 3).headMap("three", true);
+    ASSERT.that(map.entrySet()).hasContentsInOrder(Maps.immutableEntry("one", 1),
+        Maps.immutableEntry("three", 3));
+  }
+
+  @SuppressWarnings("unchecked") // varargs
+  public void testHeadMapExclusive() {
+    Map<String, Integer> map =
+        ImmutableSortedMap.of("one", 1, "two", 2, "three", 3).headMap("three", false);
+    ASSERT.that(map.entrySet()).hasContentsInOrder(Maps.immutableEntry("one", 1));
+  }
+
+  @SuppressWarnings("unchecked") // varargs
+  public void testTailMapInclusive() {
+    Map<String, Integer> map =
+        ImmutableSortedMap.of("one", 1, "two", 2, "three", 3).tailMap("three", true);
+    ASSERT.that(map.entrySet()).hasContentsInOrder(Maps.immutableEntry("three", 3),
+        Maps.immutableEntry("two", 2));
+  }
+
+  @SuppressWarnings("unchecked") // varargs
+  public void testTailMapExclusive() {
+    Map<String, Integer> map =
+        ImmutableSortedMap.of("one", 1, "two", 2, "three", 3).tailMap("three", false);
+    ASSERT.that(map.entrySet()).hasContentsInOrder(Maps.immutableEntry("two", 2));
+  }
+
+  @SuppressWarnings("unchecked") // varargs
+  public void testSubMapExclusiveExclusive() {
+    Map<String, Integer> map =
+        ImmutableSortedMap.of("one", 1, "two", 2, "three", 3).subMap("one", false, "two", false);
+    ASSERT.that(map.entrySet()).hasContentsInOrder(Maps.immutableEntry("three", 3));
+  }
+
+  @SuppressWarnings("unchecked") // varargs
+  public void testSubMapInclusiveExclusive() {
+    Map<String, Integer> map =
+        ImmutableSortedMap.of("one", 1, "two", 2, "three", 3).subMap("one", true, "two", false);
+    ASSERT.that(map.entrySet()).hasContentsInOrder(Maps.immutableEntry("one", 1),
+        Maps.immutableEntry("three", 3));
+  }
+
+  @SuppressWarnings("unchecked") // varargs
+  public void testSubMapExclusiveInclusive() {
+    Map<String, Integer> map =
+        ImmutableSortedMap.of("one", 1, "two", 2, "three", 3).subMap("one", false, "two", true);
+    ASSERT.that(map.entrySet()).hasContentsInOrder(Maps.immutableEntry("three", 3),
+        Maps.immutableEntry("two", 2));
+  }
+
+  @SuppressWarnings("unchecked") // varargs
+  public void testSubMapInclusiveInclusive() {
+    Map<String, Integer> map =
+        ImmutableSortedMap.of("one", 1, "two", 2, "three", 3).subMap("one", true, "two", true);
+    ASSERT.that(map.entrySet()).hasContentsInOrder(Maps.immutableEntry("one", 1),
+        Maps.immutableEntry("three", 3), Maps.immutableEntry("two", 2));
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/ImmutableSortedMultisetTest.java b/guava-tests/test/com/google/common/collect/ImmutableSortedMultisetTest.java
new file mode 100644
index 0000000..5ecb339
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/ImmutableSortedMultisetTest.java
@@ -0,0 +1,454 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ * 
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static java.util.Arrays.asList;
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import com.google.common.base.Function;
+import com.google.common.collect.testing.MinimalCollection;
+import com.google.common.collect.testing.SetTestSuiteBuilder;
+import com.google.common.collect.testing.TestStringSetGenerator;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.google.SortedMultisetTestSuiteBuilder;
+import com.google.common.collect.testing.google.TestStringMultisetGenerator;
+import com.google.common.collect.testing.google.UnmodifiableCollectionTests;
+import com.google.common.testing.NullPointerTester;
+import com.google.common.testing.SerializableTester;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Tests for {@link ImmutableSortedMultiset}.
+ * 
+ * @author Louis Wasserman
+ */
+public class ImmutableSortedMultisetTest extends TestCase {
+  public static Test suite() {
+    TestSuite suite = new TestSuite();
+    suite.addTestSuite(ImmutableSortedMultisetTest.class);
+
+    suite.addTest(SortedMultisetTestSuiteBuilder.using(new TestStringMultisetGenerator() {
+      @Override
+      protected Multiset<String> create(String[] elements) {
+        return ImmutableSortedMultiset.copyOf(elements);
+      }
+
+      @Override
+      public List<String> order(List<String> insertionOrder) {
+        return Ordering.natural().sortedCopy(insertionOrder);
+      }
+    }).named("ImmutableSortedMultiset").withFeatures(CollectionSize.ANY,
+        CollectionFeature.ALLOWS_NULL_QUERIES)
+        .createTestSuite());
+
+    suite.addTest(SortedMultisetTestSuiteBuilder.using(new TestStringMultisetGenerator() {
+      @Override
+      protected Multiset<String> create(String[] elements) {
+        return SerializableTester.reserialize(ImmutableSortedMultiset.copyOf(elements));
+      }
+
+      @Override
+      public List<String> order(List<String> insertionOrder) {
+        return Ordering.natural().sortedCopy(insertionOrder);
+      }
+    }).named("ImmutableSortedMultiset, reserialized").withFeatures(CollectionSize.ANY,
+        CollectionFeature.ALLOWS_NULL_QUERIES)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder
+        .using(new TestStringSetGenerator() {
+          @Override
+          protected Set<String> create(String[] elements) {
+            return SerializableTester.reserialize(ImmutableSortedMultiset.copyOf(elements)
+                .elementSet());
+          }
+
+          @Override
+          public List<String> order(List<String> insertionOrder) {
+            return Ordering.natural().immutableSortedCopy(insertionOrder);
+          }
+        }).named("ImmutableSortedMultiset, element set").withFeatures(CollectionSize.ANY,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .createTestSuite());
+
+    return suite;
+  }
+
+  public void testCreation_noArgs() {
+    Multiset<String> multiset = ImmutableSortedMultiset.of();
+    assertTrue(multiset.isEmpty());
+  }
+
+  public void testCreation_oneElement() {
+    Multiset<String> multiset = ImmutableSortedMultiset.of("a");
+    assertEquals(HashMultiset.create(asList("a")), multiset);
+  }
+
+  public void testCreation_twoElements() {
+    Multiset<String> multiset = ImmutableSortedMultiset.of("a", "b");
+    assertEquals(HashMultiset.create(asList("a", "b")), multiset);
+  }
+
+  public void testCreation_threeElements() {
+    Multiset<String> multiset = ImmutableSortedMultiset.of("a", "b", "c");
+    assertEquals(HashMultiset.create(asList("a", "b", "c")), multiset);
+  }
+
+  public void testCreation_fourElements() {
+    Multiset<String> multiset = ImmutableSortedMultiset.of("a", "b", "c", "d");
+    assertEquals(HashMultiset.create(asList("a", "b", "c", "d")), multiset);
+  }
+
+  public void testCreation_fiveElements() {
+    Multiset<String> multiset = ImmutableSortedMultiset.of("a", "b", "c", "d", "e");
+    assertEquals(HashMultiset.create(asList("a", "b", "c", "d", "e")), multiset);
+  }
+
+  public void testCreation_sixElements() {
+    Multiset<String> multiset = ImmutableSortedMultiset.of("a", "b", "c", "d", "e", "f");
+    assertEquals(HashMultiset.create(asList("a", "b", "c", "d", "e", "f")), multiset);
+  }
+
+  public void testCreation_sevenElements() {
+    Multiset<String> multiset = ImmutableSortedMultiset.of("a", "b", "c", "d", "e", "f", "g");
+    assertEquals(HashMultiset.create(asList("a", "b", "c", "d", "e", "f", "g")), multiset);
+  }
+
+  public void testCreation_emptyArray() {
+    String[] array = new String[0];
+    Multiset<String> multiset = ImmutableSortedMultiset.copyOf(array);
+    assertTrue(multiset.isEmpty());
+  }
+
+  public void testCreation_arrayOfOneElement() {
+    String[] array = new String[] {"a"};
+    Multiset<String> multiset = ImmutableSortedMultiset.copyOf(array);
+    assertEquals(HashMultiset.create(asList("a")), multiset);
+  }
+
+  public void testCreation_arrayOfArray() {
+    Comparator<String[]> comparator =
+        Ordering.natural().lexicographical()
+            .onResultOf(new Function<String[], Iterable<Comparable>>() {
+              @Override
+              public Iterable<Comparable> apply(String[] input) {
+                return Arrays.<Comparable>asList(input);
+              }
+            });
+    String[] array = new String[] {"a"};
+    Multiset<String[]> multiset = ImmutableSortedMultiset.orderedBy(comparator).add(array).build();
+    Multiset<String[]> expected = HashMultiset.create();
+    expected.add(array);
+    assertEquals(expected, multiset);
+  }
+
+  public void testCreation_arrayContainingOnlyNull() {
+    String[] array = new String[] {null};
+    try {
+      ImmutableSortedMultiset.copyOf(array);
+      fail();
+    } catch (NullPointerException expected) {}
+  }
+
+  public void testCopyOf_collection_empty() {
+    // "<String>" is required to work around a javac 1.5 bug.
+    Collection<String> c = MinimalCollection.<String>of();
+    Multiset<String> multiset = ImmutableSortedMultiset.copyOf(c);
+    assertTrue(multiset.isEmpty());
+  }
+
+  public void testCopyOf_collection_oneElement() {
+    Collection<String> c = MinimalCollection.of("a");
+    Multiset<String> multiset = ImmutableSortedMultiset.copyOf(c);
+    assertEquals(HashMultiset.create(asList("a")), multiset);
+  }
+
+  public void testCopyOf_collection_general() {
+    Collection<String> c = MinimalCollection.of("a", "b", "a");
+    Multiset<String> multiset = ImmutableSortedMultiset.copyOf(c);
+    assertEquals(HashMultiset.create(asList("a", "b", "a")), multiset);
+  }
+
+  public void testCopyOf_collectionContainingNull() {
+    Collection<String> c = MinimalCollection.of("a", null, "b");
+    try {
+      ImmutableSortedMultiset.copyOf(c);
+      fail();
+    } catch (NullPointerException expected) {}
+  }
+
+  public void testCopyOf_multiset_empty() {
+    Multiset<String> c = HashMultiset.create();
+    Multiset<String> multiset = ImmutableSortedMultiset.copyOf(c);
+    assertTrue(multiset.isEmpty());
+  }
+
+  public void testCopyOf_multiset_oneElement() {
+    Multiset<String> c = HashMultiset.create(asList("a"));
+    Multiset<String> multiset = ImmutableSortedMultiset.copyOf(c);
+    assertEquals(HashMultiset.create(asList("a")), multiset);
+  }
+
+  public void testCopyOf_multiset_general() {
+    Multiset<String> c = HashMultiset.create(asList("a", "b", "a"));
+    Multiset<String> multiset = ImmutableSortedMultiset.copyOf(c);
+    assertEquals(HashMultiset.create(asList("a", "b", "a")), multiset);
+  }
+
+  public void testCopyOf_multisetContainingNull() {
+    Multiset<String> c = HashMultiset.create(asList("a", null, "b"));
+    try {
+      ImmutableSortedMultiset.copyOf(c);
+      fail();
+    } catch (NullPointerException expected) {}
+  }
+
+  public void testCopyOf_iterator_empty() {
+    Iterator<String> iterator = Iterators.emptyIterator();
+    Multiset<String> multiset = ImmutableSortedMultiset.copyOf(iterator);
+    assertTrue(multiset.isEmpty());
+  }
+
+  public void testCopyOf_iterator_oneElement() {
+    Iterator<String> iterator = Iterators.singletonIterator("a");
+    Multiset<String> multiset = ImmutableSortedMultiset.copyOf(iterator);
+    assertEquals(HashMultiset.create(asList("a")), multiset);
+  }
+
+  public void testCopyOf_iterator_general() {
+    Iterator<String> iterator = asList("a", "b", "a").iterator();
+    Multiset<String> multiset = ImmutableSortedMultiset.copyOf(iterator);
+    assertEquals(HashMultiset.create(asList("a", "b", "a")), multiset);
+  }
+
+  public void testCopyOf_iteratorContainingNull() {
+    Iterator<String> iterator = asList("a", null, "b").iterator();
+    try {
+      ImmutableSortedMultiset.copyOf(iterator);
+      fail();
+    } catch (NullPointerException expected) {}
+  }
+
+  private static class CountingIterable implements Iterable<String> {
+    int count = 0;
+
+    @Override
+    public Iterator<String> iterator() {
+      count++;
+      return asList("a", "b", "a").iterator();
+    }
+  }
+
+  public void testCopyOf_plainIterable() {
+    CountingIterable iterable = new CountingIterable();
+    Multiset<String> multiset = ImmutableSortedMultiset.copyOf(iterable);
+    assertEquals(HashMultiset.create(asList("a", "b", "a")), multiset);
+    assertEquals(1, iterable.count);
+  }
+
+  public void testCopyOf_shortcut_empty() {
+    Collection<String> c = ImmutableSortedMultiset.of();
+    assertSame(c, ImmutableSortedMultiset.copyOf(c));
+  }
+
+  public void testCopyOf_shortcut_singleton() {
+    Collection<String> c = ImmutableSortedMultiset.of("a");
+    assertSame(c, ImmutableSortedMultiset.copyOf(c));
+  }
+
+  public void testCopyOf_shortcut_immutableMultiset() {
+    Collection<String> c = ImmutableSortedMultiset.of("a", "b", "c");
+    assertSame(c, ImmutableSortedMultiset.copyOf(c));
+  }
+
+  public void testBuilderAdd() {
+    ImmutableSortedMultiset<String> multiset =
+        ImmutableSortedMultiset.<String>naturalOrder().add("a").add("b").add("a").add("c").build();
+    assertEquals(HashMultiset.create(asList("a", "b", "a", "c")), multiset);
+  }
+
+  public void testBuilderAddAll() {
+    List<String> a = asList("a", "b");
+    List<String> b = asList("c", "d");
+    ImmutableSortedMultiset<String> multiset =
+        ImmutableSortedMultiset.<String>naturalOrder().addAll(a).addAll(b).build();
+    assertEquals(HashMultiset.create(asList("a", "b", "c", "d")), multiset);
+  }
+
+  public void testBuilderAddAllMultiset() {
+    Multiset<String> a = HashMultiset.create(asList("a", "b", "b"));
+    Multiset<String> b = HashMultiset.create(asList("c", "b"));
+    ImmutableSortedMultiset<String> multiset =
+        ImmutableSortedMultiset.<String>naturalOrder().addAll(a).addAll(b).build();
+    assertEquals(HashMultiset.create(asList("a", "b", "b", "b", "c")), multiset);
+  }
+
+  public void testBuilderAddAllIterator() {
+    Iterator<String> iterator = asList("a", "b", "a", "c").iterator();
+    ImmutableSortedMultiset<String> multiset =
+        ImmutableSortedMultiset.<String>naturalOrder().addAll(iterator).build();
+    assertEquals(HashMultiset.create(asList("a", "b", "a", "c")), multiset);
+  }
+
+  public void testBuilderAddCopies() {
+    ImmutableSortedMultiset<String> multiset =
+        ImmutableSortedMultiset.<String>naturalOrder().addCopies("a", 2).addCopies("b", 3)
+            .addCopies("c", 0).build();
+    assertEquals(HashMultiset.create(asList("a", "a", "b", "b", "b")), multiset);
+  }
+
+  public void testBuilderSetCount() {
+    ImmutableSortedMultiset<String> multiset =
+        ImmutableSortedMultiset.<String>naturalOrder().add("a").setCount("a", 2).setCount("b", 3)
+            .build();
+    assertEquals(HashMultiset.create(asList("a", "a", "b", "b", "b")), multiset);
+  }
+
+  public void testBuilderAddHandlesNullsCorrectly() {
+    ImmutableSortedMultiset.Builder<String> builder = ImmutableSortedMultiset.naturalOrder();
+    try {
+      builder.add((String) null);
+      fail("expected NullPointerException");
+    } catch (NullPointerException expected) {}
+  }
+
+  public void testBuilderAddAllHandlesNullsCorrectly() {
+    ImmutableSortedMultiset.Builder<String> builder = ImmutableSortedMultiset.naturalOrder();
+    try {
+      builder.addAll((Collection<String>) null);
+      fail("expected NullPointerException");
+    } catch (NullPointerException expected) {}
+
+    builder = ImmutableSortedMultiset.naturalOrder();
+    List<String> listWithNulls = asList("a", null, "b");
+    try {
+      builder.addAll(listWithNulls);
+      fail("expected NullPointerException");
+    } catch (NullPointerException expected) {}
+
+    builder = ImmutableSortedMultiset.naturalOrder();
+    Multiset<String> multisetWithNull = LinkedHashMultiset.create(asList("a", null, "b"));
+    try {
+      builder.addAll(multisetWithNull);
+      fail("expected NullPointerException");
+    } catch (NullPointerException expected) {}
+  }
+
+  public void testBuilderAddCopiesHandlesNullsCorrectly() {
+    ImmutableSortedMultiset.Builder<String> builder = ImmutableSortedMultiset.naturalOrder();
+    try {
+      builder.addCopies(null, 2);
+      fail("expected NullPointerException");
+    } catch (NullPointerException expected) {}
+  }
+
+  public void testBuilderAddCopiesIllegal() {
+    ImmutableSortedMultiset.Builder<String> builder = ImmutableSortedMultiset.naturalOrder();
+    try {
+      builder.addCopies("a", -2);
+      fail("expected IllegalArgumentException");
+    } catch (IllegalArgumentException expected) {}
+  }
+
+  public void testBuilderSetCountHandlesNullsCorrectly() {
+    ImmutableSortedMultiset.Builder<String> builder =
+        new ImmutableSortedMultiset.Builder<String>(Ordering.natural().nullsFirst());
+    try {
+      builder.setCount(null, 2);
+      fail("expected NullPointerException");
+    } catch (NullPointerException expected) {}
+  }
+
+  public void testBuilderSetCountIllegal() {
+    ImmutableSortedMultiset.Builder<String> builder = ImmutableSortedMultiset.naturalOrder();
+    try {
+      builder.setCount("a", -2);
+      fail("expected IllegalArgumentException");
+    } catch (IllegalArgumentException expected) {}
+  }
+
+  public void testNullPointers() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.setDefault(Comparator.class, Ordering.natural());
+    tester.setDefault(Comparable.class, "");
+    tester.setDefault(Iterator.class, Iterators.emptyIterator());
+    tester.setDefault(Iterable.class, Collections.emptySet());
+    tester.setDefault(Comparable[].class, new Comparable[0]);
+    tester.testAllPublicStaticMethods(ImmutableSortedMultiset.class);
+  }
+
+  public void testSerialization_empty() {
+    Collection<String> c = ImmutableSortedMultiset.of();
+    assertSame(c, SerializableTester.reserialize(c));
+  }
+
+  public void testSerialization_multiple() {
+    Collection<String> c = ImmutableSortedMultiset.of("a", "b", "a");
+    Collection<String> copy = SerializableTester.reserializeAndAssert(c);
+    ASSERT.that(copy).hasContentsInOrder("a", "a", "b");
+  }
+
+  public void testSerialization_elementSet() {
+    Multiset<String> c = ImmutableSortedMultiset.of("a", "b", "a");
+    Collection<String> copy = SerializableTester.reserializeAndAssert(c.elementSet());
+    ASSERT.that(copy).hasContentsInOrder("a", "b");
+  }
+
+  public void testSerialization_entrySet() {
+    Multiset<String> c = ImmutableSortedMultiset.of("a", "b", "c");
+    SerializableTester.reserializeAndAssert(c.entrySet());
+  }
+
+  public void testEquals_immutableMultiset() {
+    Collection<String> c = ImmutableSortedMultiset.of("a", "b", "a");
+    assertEquals(c, ImmutableSortedMultiset.of("a", "b", "a"));
+    assertEquals(c, ImmutableSortedMultiset.of("a", "a", "b"));
+    ASSERT.that(c).isNotEqualTo(ImmutableSortedMultiset.of("a", "b"));
+    ASSERT.that(c).isNotEqualTo(ImmutableSortedMultiset.of("a", "b", "c", "d"));
+  }
+
+  public void testIterationOrder() {
+    Collection<String> c = ImmutableSortedMultiset.of("a", "b", "a");
+    ASSERT.that(c).hasContentsInOrder("a", "a", "b");
+  }
+
+  public void testMultisetWrites() {
+    Multiset<String> multiset = ImmutableSortedMultiset.of("a", "b", "a");
+    UnmodifiableCollectionTests.assertMultisetIsUnmodifiable(multiset, "test");
+  }
+
+  public void testAsList() {
+    ImmutableSortedMultiset<String> multiset = ImmutableSortedMultiset.of("a", "a", "b", "b", "b");
+    ImmutableList<String> list = multiset.asList();
+    assertEquals(ImmutableList.of("a", "a", "b", "b", "b"), list);
+    assertTrue(list instanceof ImmutableAsList);
+    ImmutableList<String> copy = SerializableTester.reserializeAndAssert(list);
+    assertTrue(copy instanceof ImmutableAsList);
+    assertEquals(2, list.indexOf("b"));
+    assertEquals(4, list.lastIndexOf("b"));
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/ImmutableSortedSetTest.java b/guava-tests/test/com/google/common/collect/ImmutableSortedSetTest.java
new file mode 100644
index 0000000..59506db
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/ImmutableSortedSetTest.java
@@ -0,0 +1,915 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static java.util.Arrays.asList;
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.collect.ImmutableSet.Builder;
+import com.google.common.testing.NullPointerTester;
+import com.google.common.testing.SerializableTester;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+import java.util.Set;
+import java.util.SortedSet;
+import java.util.TreeSet;
+
+/**
+ * Unit tests for {@link ImmutableSortedSet}.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible(emulated = true)
+public class ImmutableSortedSetTest extends AbstractImmutableSetTest {
+
+  // enum singleton pattern
+  private enum StringLengthComparator implements Comparator<String> {
+    INSTANCE;
+
+    @Override
+    public int compare(String a, String b) {
+      return a.length() - b.length();
+    }
+  }
+
+  private static final Comparator<String> STRING_LENGTH
+      = StringLengthComparator.INSTANCE;
+
+  @Override protected SortedSet<String> of() {
+    return ImmutableSortedSet.of();
+  }
+
+  @Override protected SortedSet<String> of(String e) {
+    return ImmutableSortedSet.of(e);
+  }
+
+  @Override protected SortedSet<String> of(String e1, String e2) {
+    return ImmutableSortedSet.of(e1, e2);
+  }
+
+  @Override protected SortedSet<String> of(String e1, String e2, String e3) {
+    return ImmutableSortedSet.of(e1, e2, e3);
+  }
+
+  @Override protected SortedSet<String> of(
+      String e1, String e2, String e3, String e4) {
+    return ImmutableSortedSet.of(e1, e2, e3, e4);
+  }
+
+  @Override protected SortedSet<String> of(
+      String e1, String e2, String e3, String e4, String e5) {
+    return ImmutableSortedSet.of(e1, e2, e3, e4, e5);
+  }
+
+  @Override protected SortedSet<String> of(String e1, String e2, String e3,
+      String e4, String e5, String e6, String... rest) {
+    return ImmutableSortedSet.of(e1, e2, e3, e4, e5, e6, rest);
+  }
+
+  @Override protected SortedSet<String> copyOf(String[] elements) {
+    return ImmutableSortedSet.copyOf(elements);
+  }
+
+  @Override protected SortedSet<String> copyOf(Collection<String> elements) {
+    return ImmutableSortedSet.copyOf(elements);
+  }
+
+  @Override protected SortedSet<String> copyOf(Iterable<String> elements) {
+    return ImmutableSortedSet.copyOf(elements);
+  }
+
+  @Override protected SortedSet<String> copyOf(Iterator<String> elements) {
+    return ImmutableSortedSet.copyOf(elements);
+  }
+
+  @GwtIncompatible("NullPointerTester")
+  public void testNullPointers() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.setDefault(Comparable[].class, new Comparable[] { 0 });
+    tester.testAllPublicStaticMethods(ImmutableSortedSet.class);
+  }
+
+  public void testEmpty_comparator() {
+    SortedSet<String> set = of();
+    assertSame(Ordering.natural(), set.comparator());
+  }
+
+  public void testEmpty_headSet() {
+    SortedSet<String> set = of();
+    assertSame(set, set.headSet("c"));
+  }
+
+  public void testEmpty_tailSet() {
+    SortedSet<String> set = of();
+    assertSame(set, set.tailSet("f"));
+  }
+
+  public void testEmpty_subSet() {
+    SortedSet<String> set = of();
+    assertSame(set, set.subSet("c", "f"));
+  }
+
+  public void testEmpty_first() {
+    SortedSet<String> set = of();
+    try {
+      set.first();
+      fail();
+    } catch (NoSuchElementException expected) {
+    }
+  }
+
+  public void testEmpty_last() {
+    SortedSet<String> set = of();
+    try {
+      set.last();
+      fail();
+    } catch (NoSuchElementException expected) {
+    }
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testEmpty_serialization() {
+    SortedSet<String> set = of();
+    SortedSet<String> copy = SerializableTester.reserialize(set);
+    assertSame(set, copy);
+  }
+
+  public void testSingle_comparator() {
+    SortedSet<String> set = of("e");
+    assertSame(Ordering.natural(), set.comparator());
+  }
+
+  public void testSingle_headSet() {
+    SortedSet<String> set = of("e");
+    assertTrue(set.headSet("g") instanceof ImmutableSortedSet);
+    ASSERT.that(set.headSet("g")).hasContentsInOrder("e");
+    assertSame(of(), set.headSet("c"));
+    assertSame(of(), set.headSet("e"));
+  }
+
+  public void testSingle_tailSet() {
+    SortedSet<String> set = of("e");
+    assertTrue(set.tailSet("c") instanceof ImmutableSortedSet);
+    ASSERT.that(set.tailSet("c")).hasContentsInOrder("e");
+    ASSERT.that(set.tailSet("e")).hasContentsInOrder("e");
+    assertSame(of(), set.tailSet("g"));
+  }
+
+  public void testSingle_subSet() {
+    SortedSet<String> set = of("e");
+    assertTrue(set.subSet("c", "g") instanceof ImmutableSortedSet);
+    ASSERT.that(set.subSet("c", "g")).hasContentsInOrder("e");
+    ASSERT.that(set.subSet("e", "g")).hasContentsInOrder("e");
+    assertSame(of(), set.subSet("f", "g"));
+    assertSame(of(), set.subSet("c", "e"));
+    assertSame(of(), set.subSet("c", "d"));
+  }
+
+  public void testSingle_first() {
+    SortedSet<String> set = of("e");
+    assertEquals("e", set.first());
+  }
+
+  public void testSingle_last() {
+    SortedSet<String> set = of("e");
+    assertEquals("e", set.last());
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testSingle_serialization() {
+    SortedSet<String> set = of("e");
+    SortedSet<String> copy = SerializableTester.reserializeAndAssert(set);
+    assertEquals(set.comparator(), copy.comparator());
+  }
+
+  public void testOf_ordering() {
+    SortedSet<String> set = of("e", "a", "f", "b", "d", "c");
+    ASSERT.that(set).hasContentsInOrder("a", "b", "c", "d", "e", "f");
+  }
+
+  /*
+   * Tests that we workaround GWT bug #3621 (or that it is already fixed).
+   *
+   * A call to of() with a parameter that is not a plain Object[] (here,
+   * Interface[]) creates a RegularImmutableSortedSet backed by an array of that
+   * type. Later, RegularImmutableSortedSet.toArray() calls System.arraycopy()
+   * to copy from that array to the destination array. This would be fine, but
+   * GWT has a bug: It refuses to copy from an E[] to an Object[] when E is an
+   * interface type.
+   */
+  // TODO: test other collections for this problem
+  public void testOf_gwtArraycopyBug() {
+    /*
+     * The test requires:
+     *
+     * 1) An interface I extending Comparable<I> so that the created array is of
+     * an interface type. 2) An instance of a class implementing that interface
+     * so that we can pass non-null instances of the interface.
+     *
+     * (Currently it's safe to pass instances for which compareTo() always
+     * returns 0, but if we had a SingletonImmutableSortedSet, this might no
+     * longer be the case.)
+     *
+     * javax.naming.Name and java.util.concurrent.Delayed might work, but
+     * they're fairly obscure, we've invented our own interface and class.
+     */
+    Interface a = new Impl();
+    Interface b = new Impl();
+    ImmutableSortedSet<Interface> set = ImmutableSortedSet.of(a, b);
+    set.toArray();
+    set.toArray(new Object[2]);
+  }
+
+  interface Interface extends Comparable<Interface> {
+  }
+  static class Impl implements Interface {
+    static int nextId;
+    Integer id = nextId++;
+
+    @Override public int compareTo(Interface other) {
+      return id.compareTo(((Impl) other).id);
+    }
+  }
+
+  public void testOf_ordering_dupes() {
+    SortedSet<String> set = of("e", "a", "e", "f", "b", "b", "d", "a", "c");
+    ASSERT.that(set).hasContentsInOrder("a", "b", "c", "d", "e", "f");
+  }
+
+  public void testOf_comparator() {
+    SortedSet<String> set = of("e", "a", "f", "b", "d", "c");
+    assertSame(Ordering.natural(), set.comparator());
+  }
+
+  public void testOf_headSet() {
+    SortedSet<String> set = of("e", "f", "b", "d", "c");
+    assertTrue(set.headSet("e") instanceof ImmutableSortedSet);
+    ASSERT.that(set.headSet("e")).hasContentsInOrder("b", "c", "d");
+    ASSERT.that(set.headSet("g")).hasContentsInOrder("b", "c", "d", "e", "f");
+    assertSame(of(), set.headSet("a"));
+    assertSame(of(), set.headSet("b"));
+  }
+
+  public void testOf_tailSet() {
+    SortedSet<String> set = of("e", "f", "b", "d", "c");
+    assertTrue(set.tailSet("e") instanceof ImmutableSortedSet);
+    ASSERT.that(set.tailSet("e")).hasContentsInOrder("e", "f");
+    ASSERT.that(set.tailSet("a")).hasContentsInOrder("b", "c", "d", "e", "f");
+    assertSame(of(), set.tailSet("g"));
+  }
+
+  public void testOf_subSet() {
+    SortedSet<String> set = of("e", "f", "b", "d", "c");
+    assertTrue(set.subSet("c", "e") instanceof ImmutableSortedSet);
+    ASSERT.that(set.subSet("c", "e")).hasContentsInOrder("c", "d");
+    ASSERT.that(set.subSet("a", "g")).hasContentsInOrder("b", "c", "d", "e", "f");
+    assertSame(of(), set.subSet("a", "b"));
+    assertSame(of(), set.subSet("g", "h"));
+    assertSame(of(), set.subSet("c", "c"));
+    try {
+      set.subSet("e", "c");
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testOf_subSetSerialization() {
+    SortedSet<String> set = of("e", "f", "b", "d", "c");
+    SerializableTester.reserializeAndAssert(set.subSet("c", "e"));
+  }
+
+  public void testOf_first() {
+    SortedSet<String> set = of("e", "f", "b", "d", "c");
+    assertEquals("b", set.first());
+  }
+
+  public void testOf_last() {
+    SortedSet<String> set = of("e", "f", "b", "d", "c");
+    assertEquals("f", set.last());
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testOf_serialization() {
+    SortedSet<String> set = of("e", "f", "b", "d", "c");
+    SortedSet<String> copy = SerializableTester.reserializeAndAssert(set);
+    assertTrue(Iterables.elementsEqual(set, copy));
+    assertEquals(set.comparator(), copy.comparator());
+  }
+
+  /* "Explicit" indicates an explicit comparator. */
+
+  public void testExplicit_ordering() {
+    SortedSet<String> set = ImmutableSortedSet.orderedBy(STRING_LENGTH).add(
+        "in", "the", "quick", "jumped", "over", "a").build();
+    ASSERT.that(set).hasContentsInOrder("a", "in", "the", "over", "quick", "jumped");
+  }
+
+  public void testExplicit_ordering_dupes() {
+    SortedSet<String> set = ImmutableSortedSet.orderedBy(STRING_LENGTH).add(
+        "in", "the", "quick", "brown", "fox", "jumped",
+        "over", "a", "lazy", "dog").build();
+    ASSERT.that(set).hasContentsInOrder("a", "in", "the", "over", "quick", "jumped");
+  }
+
+  public void testExplicit_contains() {
+    SortedSet<String> set = ImmutableSortedSet.orderedBy(STRING_LENGTH).add(
+        "in", "the", "quick", "jumped", "over", "a").build();
+    assertTrue(set.contains("quick"));
+    assertTrue(set.contains("google"));
+    assertFalse(set.contains(""));
+    assertFalse(set.contains("california"));
+    assertFalse(set.contains(null));
+  }
+
+  public void testExplicit_containsMismatchedTypes() {
+    SortedSet<String> set = ImmutableSortedSet.orderedBy(STRING_LENGTH).add(
+        "in", "the", "quick", "jumped", "over", "a").build();
+    assertFalse(set.contains(3.7));
+  }
+
+  public void testExplicit_comparator() {
+    SortedSet<String> set = ImmutableSortedSet.orderedBy(STRING_LENGTH).add(
+        "in", "the", "quick", "jumped", "over", "a").build();
+    assertSame(STRING_LENGTH, set.comparator());
+  }
+
+  public void testExplicit_headSet() {
+    SortedSet<String> set = ImmutableSortedSet.orderedBy(STRING_LENGTH).add(
+        "in", "the", "quick", "jumped", "over", "a").build();
+    assertTrue(set.headSet("a") instanceof ImmutableSortedSet);
+    assertTrue(set.headSet("fish") instanceof ImmutableSortedSet);
+    ASSERT.that(set.headSet("fish")).hasContentsInOrder("a", "in", "the");
+    ASSERT.that(
+        set.headSet("california")).hasContentsInOrder("a", "in", "the", "over", "quick", "jumped");
+    assertTrue(set.headSet("a").isEmpty());
+    assertTrue(set.headSet("").isEmpty());
+  }
+
+  public void testExplicit_tailSet() {
+    SortedSet<String> set = ImmutableSortedSet.orderedBy(STRING_LENGTH).add(
+        "in", "the", "quick", "jumped", "over", "a").build();
+    assertTrue(set.tailSet("california") instanceof ImmutableSortedSet);
+    assertTrue(set.tailSet("fish") instanceof ImmutableSortedSet);
+    ASSERT.that(set.tailSet("fish")).hasContentsInOrder("over", "quick", "jumped");
+    ASSERT.that(
+        set.tailSet("a")).hasContentsInOrder("a", "in", "the", "over", "quick", "jumped");
+    assertTrue(set.tailSet("california").isEmpty());
+  }
+
+  public void testExplicit_subSet() {
+    SortedSet<String> set = ImmutableSortedSet.orderedBy(STRING_LENGTH).add(
+        "in", "the", "quick", "jumped", "over", "a").build();
+    assertTrue(set.subSet("the", "quick") instanceof ImmutableSortedSet);
+    assertTrue(set.subSet("", "b") instanceof ImmutableSortedSet);
+    ASSERT.that(set.subSet("the", "quick")).hasContentsInOrder("the", "over");
+    ASSERT.that(set.subSet("a", "california"))
+        .hasContentsInOrder("a", "in", "the", "over", "quick", "jumped");
+    assertTrue(set.subSet("", "b").isEmpty());
+    assertTrue(set.subSet("vermont", "california").isEmpty());
+    assertTrue(set.subSet("aaa", "zzz").isEmpty());
+    try {
+      set.subSet("quick", "the");
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  public void testExplicit_first() {
+    SortedSet<String> set = ImmutableSortedSet.orderedBy(STRING_LENGTH).add(
+        "in", "the", "quick", "jumped", "over", "a").build();
+    assertEquals("a", set.first());
+  }
+
+  public void testExplicit_last() {
+    SortedSet<String> set = ImmutableSortedSet.orderedBy(STRING_LENGTH).add(
+        "in", "the", "quick", "jumped", "over", "a").build();
+    assertEquals("jumped", set.last());
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testExplicitEmpty_serialization() {
+    SortedSet<String> set = ImmutableSortedSet.orderedBy(STRING_LENGTH).build();
+    SortedSet<String> copy = SerializableTester.reserializeAndAssert(set);
+    assertTrue(set.isEmpty());
+    assertTrue(copy.isEmpty());
+    assertSame(set.comparator(), copy.comparator());
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testExplicit_serialization() {
+    SortedSet<String> set = ImmutableSortedSet.orderedBy(STRING_LENGTH).add(
+        "in", "the", "quick", "jumped", "over", "a").build();
+    SortedSet<String> copy = SerializableTester.reserializeAndAssert(set);
+    assertTrue(Iterables.elementsEqual(set, copy));
+    assertSame(set.comparator(), copy.comparator());
+  }
+
+  public void testCopyOf_ordering() {
+    SortedSet<String> set =
+        copyOf(asList("e", "a", "f", "b", "d", "c"));
+    ASSERT.that(set).hasContentsInOrder("a", "b", "c", "d", "e", "f");
+  }
+
+  public void testCopyOf_ordering_dupes() {
+    SortedSet<String> set =
+        copyOf(asList("e", "a", "e", "f", "b", "b", "d", "a", "c"));
+    ASSERT.that(set).hasContentsInOrder("a", "b", "c", "d", "e", "f");
+  }
+
+  public void testCopyOf_subSet() {
+    SortedSet<String> set = of("e", "a", "f", "b", "d", "c");
+    SortedSet<String> subset = set.subSet("c", "e");
+    SortedSet<String> copy = copyOf(subset);
+    assertEquals(subset, copy);
+  }
+
+  public void testCopyOf_headSet() {
+    SortedSet<String> set = of("e", "a", "f", "b", "d", "c");
+    SortedSet<String> headset = set.headSet("d");
+    SortedSet<String> copy = copyOf(headset);
+    assertEquals(headset, copy);
+  }
+
+  public void testCopyOf_tailSet() {
+    SortedSet<String> set = of("e", "a", "f", "b", "d", "c");
+    SortedSet<String> tailset = set.tailSet("d");
+    SortedSet<String> copy = copyOf(tailset);
+    assertEquals(tailset, copy);
+  }
+
+  public void testCopyOf_comparator() {
+    SortedSet<String> set = copyOf(asList("e", "a", "f", "b", "d", "c"));
+    assertSame(Ordering.natural(), set.comparator());
+  }
+
+  public void testCopyOf_iterator_ordering() {
+    SortedSet<String> set = copyOf(asIterator("e", "a", "f", "b", "d", "c"));
+    ASSERT.that(set).hasContentsInOrder("a", "b", "c", "d", "e", "f");
+  }
+
+  public void testCopyOf_iterator_ordering_dupes() {
+    SortedSet<String> set =
+        copyOf(asIterator("e", "a", "e", "f", "b", "b", "d", "a", "c"));
+    ASSERT.that(set).hasContentsInOrder("a", "b", "c", "d", "e", "f");
+  }
+
+  public void testCopyOf_iterator_comparator() {
+    SortedSet<String> set = copyOf(asIterator("e", "a", "f", "b", "d", "c"));
+    assertSame(Ordering.natural(), set.comparator());
+  }
+
+  public void testCopyOf_sortedSet_ordering() {
+    SortedSet<String> set =
+        copyOf(Sets.newTreeSet(asList("e", "a", "f", "b", "d", "c")));
+    ASSERT.that(set).hasContentsInOrder("a", "b", "c", "d", "e", "f");
+  }
+
+  public void testCopyOf_sortedSet_comparator() {
+    SortedSet<String> set = copyOf(Sets.<String>newTreeSet());
+    assertSame(Ordering.natural(), set.comparator());
+  }
+
+  public void testCopyOfExplicit_ordering() {
+    SortedSet<String> set =
+        ImmutableSortedSet.copyOf(STRING_LENGTH, asList(
+            "in", "the", "quick", "jumped", "over", "a"));
+    ASSERT.that(set).hasContentsInOrder("a", "in", "the", "over", "quick", "jumped");
+  }
+
+  public void testCopyOfExplicit_ordering_dupes() {
+    SortedSet<String> set =
+        ImmutableSortedSet.copyOf(STRING_LENGTH, asList(
+            "in", "the", "quick", "brown", "fox", "jumped", "over", "a",
+            "lazy", "dog"));
+    ASSERT.that(set).hasContentsInOrder("a", "in", "the", "over", "quick", "jumped");
+  }
+
+  public void testCopyOfExplicit_comparator() {
+    SortedSet<String> set =
+        ImmutableSortedSet.copyOf(STRING_LENGTH, asList(
+            "in", "the", "quick", "jumped", "over", "a"));
+    assertSame(STRING_LENGTH, set.comparator());
+  }
+
+  public void testCopyOfExplicit_iterator_ordering() {
+    SortedSet<String> set =
+        ImmutableSortedSet.copyOf(STRING_LENGTH, asIterator(
+            "in", "the", "quick", "jumped", "over", "a"));
+    ASSERT.that(set).hasContentsInOrder("a", "in", "the", "over", "quick", "jumped");
+  }
+
+  public void testCopyOfExplicit_iterator_ordering_dupes() {
+    SortedSet<String> set =
+        ImmutableSortedSet.copyOf(STRING_LENGTH, asIterator(
+            "in", "the", "quick", "brown", "fox", "jumped", "over", "a",
+            "lazy", "dog"));
+    ASSERT.that(set).hasContentsInOrder("a", "in", "the", "over", "quick", "jumped");
+  }
+
+  public void testCopyOfExplicit_iterator_comparator() {
+    SortedSet<String> set =
+        ImmutableSortedSet.copyOf(STRING_LENGTH, asIterator(
+            "in", "the", "quick", "jumped", "over", "a"));
+    assertSame(STRING_LENGTH, set.comparator());
+  }
+
+  public void testCopyOf_sortedSetIterable() {
+    SortedSet<String> input = Sets.newTreeSet(STRING_LENGTH);
+    Collections.addAll(input, "in", "the", "quick", "jumped", "over", "a");
+    SortedSet<String> set = copyOf(input);
+    ASSERT.that(set).hasContentsInOrder("a", "in", "jumped", "over", "quick", "the");
+  }
+
+  public void testCopyOfSorted_natural_ordering() {
+    SortedSet<String> input = Sets.newTreeSet(
+        asList("in", "the", "quick", "jumped", "over", "a"));
+    SortedSet<String> set = ImmutableSortedSet.copyOfSorted(input);
+    ASSERT.that(set).hasContentsInOrder("a", "in", "jumped", "over", "quick", "the");
+  }
+
+  public void testCopyOfSorted_natural_comparator() {
+    SortedSet<String> input =
+        Sets.newTreeSet(asList("in", "the", "quick", "jumped", "over", "a"));
+    SortedSet<String> set = ImmutableSortedSet.copyOfSorted(input);
+    assertSame(Ordering.natural(), set.comparator());
+  }
+
+  public void testCopyOfSorted_explicit_ordering() {
+    SortedSet<String> input = Sets.newTreeSet(STRING_LENGTH);
+    Collections.addAll(input, "in", "the", "quick", "jumped", "over", "a");
+    SortedSet<String> set = ImmutableSortedSet.copyOfSorted(input);
+    ASSERT.that(set).hasContentsInOrder("a", "in", "the", "over", "quick", "jumped");
+    assertSame(STRING_LENGTH, set.comparator());
+  }
+
+  public void testEquals_bothDefaultOrdering() {
+    SortedSet<String> set = of("a", "b", "c");
+    assertEquals(set, Sets.newTreeSet(asList("a", "b", "c")));
+    assertEquals(Sets.newTreeSet(asList("a", "b", "c")), set);
+    assertFalse(set.equals(Sets.newTreeSet(asList("a", "b", "d"))));
+    assertFalse(Sets.newTreeSet(asList("a", "b", "d")).equals(set));
+    assertFalse(set.equals(Sets.newHashSet(4, 5, 6)));
+    assertFalse(Sets.newHashSet(4, 5, 6).equals(set));
+  }
+
+  public void testEquals_bothExplicitOrdering() {
+    SortedSet<String> set = of("in", "the", "a");
+    assertEquals(Sets.newTreeSet(asList("in", "the", "a")), set);
+    assertFalse(set.equals(Sets.newTreeSet(asList("in", "the", "house"))));
+    assertFalse(Sets.newTreeSet(asList("in", "the", "house")).equals(set));
+    assertFalse(set.equals(Sets.newHashSet(4, 5, 6)));
+    assertFalse(Sets.newHashSet(4, 5, 6).equals(set));
+
+    Set<String> complex = Sets.newTreeSet(STRING_LENGTH);
+    Collections.addAll(complex, "in", "the", "a");
+    assertEquals(set, complex);
+  }
+
+  public void testEquals_bothDefaultOrdering_StringVsInt() {
+    SortedSet<String> set = of("a", "b", "c");
+    assertFalse(set.equals(Sets.newTreeSet(asList(4, 5, 6))));
+    assertNotEqualLenient(Sets.newTreeSet(asList(4, 5, 6)), set);
+  }
+
+  public void testEquals_bothExplicitOrdering_StringVsInt() {
+    SortedSet<String> set = of("in", "the", "a");
+    assertFalse(set.equals(Sets.newTreeSet(asList(4, 5, 6))));
+    assertNotEqualLenient(Sets.newTreeSet(asList(4, 5, 6)), set);
+  }
+
+  public void testContainsAll_notSortedSet() {
+    SortedSet<String> set = of("a", "b", "f");
+    assertTrue(set.containsAll(Collections.emptyList()));
+    assertTrue(set.containsAll(asList("b")));
+    assertTrue(set.containsAll(asList("b", "b")));
+    assertTrue(set.containsAll(asList("b", "f")));
+    assertTrue(set.containsAll(asList("b", "f", "a")));
+    assertFalse(set.containsAll(asList("d")));
+    assertFalse(set.containsAll(asList("z")));
+    assertFalse(set.containsAll(asList("b", "d")));
+    assertFalse(set.containsAll(asList("f", "d", "a")));
+  }
+
+  public void testContainsAll_sameComparator() {
+    SortedSet<String> set = of("a", "b", "f");
+    assertTrue(set.containsAll(Sets.newTreeSet()));
+    assertTrue(set.containsAll(Sets.newTreeSet(asList("b"))));
+    assertTrue(set.containsAll(Sets.newTreeSet(asList("a", "f"))));
+    assertTrue(set.containsAll(Sets.newTreeSet(asList("a", "b", "f"))));
+    assertFalse(set.containsAll(Sets.newTreeSet(asList("d"))));
+    assertFalse(set.containsAll(Sets.newTreeSet(asList("z"))));
+    assertFalse(set.containsAll(Sets.newTreeSet(asList("b", "d"))));
+    assertFalse(set.containsAll(Sets.newTreeSet(asList("f", "d", "a"))));
+  }
+
+  public void testContainsAll_sameComparator_StringVsInt() {
+    SortedSet<String> set = of("a", "b", "f");
+    SortedSet<Integer> unexpected = Sets.newTreeSet(Ordering.natural());
+    unexpected.addAll(asList(1, 2, 3));
+    assertFalse(set.containsAll(unexpected));
+  }
+
+  public void testContainsAll_differentComparator() {
+    Comparator<Comparable<?>> comparator = Collections.reverseOrder();
+    SortedSet<String> set = new ImmutableSortedSet.Builder<String>(comparator)
+        .add("a", "b", "f").build();
+    assertTrue(set.containsAll(Sets.newTreeSet()));
+    assertTrue(set.containsAll(Sets.newTreeSet(asList("b"))));
+    assertTrue(set.containsAll(Sets.newTreeSet(asList("a", "f"))));
+    assertTrue(set.containsAll(Sets.newTreeSet(asList("a", "b", "f"))));
+    assertFalse(set.containsAll(Sets.newTreeSet(asList("d"))));
+    assertFalse(set.containsAll(Sets.newTreeSet(asList("z"))));
+    assertFalse(set.containsAll(Sets.newTreeSet(asList("b", "d"))));
+    assertFalse(set.containsAll(Sets.newTreeSet(asList("f", "d", "a"))));
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testDifferentComparator_serialization() {
+    Comparator<Comparable<?>> comparator = Collections.reverseOrder();
+    SortedSet<String> set = new ImmutableSortedSet.Builder<String>(comparator)
+        .add("a", "b", "c").build();
+    SortedSet<String> copy = SerializableTester.reserializeAndAssert(set);
+    assertTrue(Iterables.elementsEqual(set, copy));
+    assertEquals(set.comparator(), copy.comparator());
+  }
+
+  public void testReverseOrder() {
+    SortedSet<String> set = ImmutableSortedSet.<String>reverseOrder()
+        .add("a", "b", "c").build();
+    ASSERT.that(set).hasContentsInOrder("c", "b", "a");
+    assertEquals(Ordering.natural().reverse(), set.comparator());
+  }
+
+  private static final Comparator<Object> TO_STRING
+      = new Comparator<Object>() {
+          @Override
+          public int compare(Object o1, Object o2) {
+            return o1.toString().compareTo(o2.toString());
+          }
+        };
+
+  public void testSupertypeComparator() {
+    SortedSet<Integer> set = new ImmutableSortedSet.Builder<Integer>(TO_STRING)
+        .add(3, 12, 101, 44).build();
+    ASSERT.that(set).hasContentsInOrder(101, 12, 3, 44);
+  }
+
+  public void testSupertypeComparatorSubtypeElements() {
+    SortedSet<Number> set = new ImmutableSortedSet.Builder<Number>(TO_STRING)
+        .add(3, 12, 101, 44).build();
+    ASSERT.that(set).hasContentsInOrder(101, 12, 3, 44);
+  }
+
+  @Override <E extends Comparable<E>> Builder<E> builder() {
+    return ImmutableSortedSet.naturalOrder();
+  }
+
+  @Override int getComplexBuilderSetLastElement() {
+    return 0x00FFFFFF;
+  }
+
+  public void testLegacyComparable_of() {
+    ImmutableSortedSet<LegacyComparable> set0 = ImmutableSortedSet.of();
+
+    @SuppressWarnings("unchecked") // using a legacy comparable
+    ImmutableSortedSet<LegacyComparable> set1 = ImmutableSortedSet.of(
+        LegacyComparable.Z);
+
+    @SuppressWarnings("unchecked") // using a legacy comparable
+    ImmutableSortedSet<LegacyComparable> set2 = ImmutableSortedSet.of(
+        LegacyComparable.Z, LegacyComparable.Y);
+  }
+
+  public void testLegacyComparable_copyOf_collection() {
+    ImmutableSortedSet<LegacyComparable> set
+        = ImmutableSortedSet.copyOf(LegacyComparable.VALUES_BACKWARD);
+    assertTrue(Iterables.elementsEqual(LegacyComparable.VALUES_FORWARD, set));
+  }
+
+  public void testLegacyComparable_copyOf_iterator() {
+    ImmutableSortedSet<LegacyComparable> set = ImmutableSortedSet.copyOf(
+        LegacyComparable.VALUES_BACKWARD.iterator());
+    assertTrue(Iterables.elementsEqual(LegacyComparable.VALUES_FORWARD, set));
+  }
+
+  public void testLegacyComparable_builder_natural() {
+    @SuppressWarnings("unchecked")
+    // Note: IntelliJ wrongly reports an error for this statement
+    ImmutableSortedSet.Builder<LegacyComparable> builder
+        = ImmutableSortedSet.<LegacyComparable>naturalOrder();
+
+    builder.addAll(LegacyComparable.VALUES_BACKWARD);
+    builder.add(LegacyComparable.X);
+    builder.add(LegacyComparable.Y, LegacyComparable.Z);
+
+    ImmutableSortedSet<LegacyComparable> set = builder.build();
+    assertTrue(Iterables.elementsEqual(LegacyComparable.VALUES_FORWARD, set));
+  }
+
+  public void testLegacyComparable_builder_reverse() {
+    @SuppressWarnings("unchecked")
+    // Note: IntelliJ wrongly reports an error for this statement
+    ImmutableSortedSet.Builder<LegacyComparable> builder
+        = ImmutableSortedSet.<LegacyComparable>reverseOrder();
+
+    builder.addAll(LegacyComparable.VALUES_FORWARD);
+    builder.add(LegacyComparable.X);
+    builder.add(LegacyComparable.Y, LegacyComparable.Z);
+
+    ImmutableSortedSet<LegacyComparable> set = builder.build();
+    assertTrue(Iterables.elementsEqual(LegacyComparable.VALUES_BACKWARD, set));
+  }
+
+  @SuppressWarnings({"deprecation", "static-access"})
+  public void testBuilderMethod() {
+    try {
+      ImmutableSortedSet.builder();
+      fail();
+    } catch (UnsupportedOperationException expected) {
+    }
+  }
+
+  public void testAsList() {
+    ImmutableSet<String> set = ImmutableSortedSet.of("a", "e", "i", "o", "u");
+    ImmutableList<String> list = set.asList();
+    assertEquals(ImmutableList.of("a", "e", "i", "o", "u"), list);
+    assertSame(list, ImmutableList.copyOf(set));
+  }
+
+  @GwtIncompatible("SerializableTester, ImmutableSortedAsList")
+  public void testAsListReturnTypeAndSerialization() {
+    ImmutableSet<String> set = ImmutableSortedSet.of("a", "e", "i", "o", "u");
+    ImmutableList<String> list = set.asList();
+    assertTrue(list instanceof ImmutableSortedAsList);
+    ImmutableList<String> copy = SerializableTester.reserializeAndAssert(list);
+    assertTrue(copy instanceof ImmutableSortedAsList);
+  }
+
+  public void testSubsetAsList() {
+    ImmutableSet<String> set
+        = ImmutableSortedSet.of("a", "e", "i", "o", "u").subSet("c", "r");
+    ImmutableList<String> list = set.asList();
+    assertEquals(ImmutableList.of("e", "i", "o"), list);
+    assertEquals(list, ImmutableList.copyOf(set));
+  }
+
+  @GwtIncompatible("SerializableTester, ImmutableSortedAsList")
+  public void testSubsetAsListReturnTypeAndSerialization() {
+    ImmutableSet<String> set
+        = ImmutableSortedSet.of("a", "e", "i", "o", "u").subSet("c", "r");
+    ImmutableList<String> list = set.asList();
+    assertTrue(list instanceof ImmutableSortedAsList);
+    ImmutableList<String> copy = SerializableTester.reserializeAndAssert(list);
+    assertTrue(copy instanceof ImmutableSortedAsList);
+  }
+
+  public void testAsListInconsistentComprator() {
+    ImmutableSet<String> set = ImmutableSortedSet.orderedBy(STRING_LENGTH).add(
+        "in", "the", "quick", "jumped", "over", "a").build();
+    ImmutableList<String> list = set.asList();
+    assertTrue(list.contains("the"));
+    assertEquals(2, list.indexOf("the"));
+    assertEquals(2, list.lastIndexOf("the"));
+    assertFalse(list.contains("dog"));
+    assertEquals(-1, list.indexOf("dog"));
+    assertEquals(-1, list.lastIndexOf("dog"));
+    assertFalse(list.contains("chicken"));
+    assertEquals(-1, list.indexOf("chicken"));
+    assertEquals(-1, list.lastIndexOf("chicken"));
+  }
+
+  private static final <E> Iterator<E> asIterator(E... elements) {
+    return asList(elements).iterator();
+  }
+
+  // In GWT, java.util.TreeSet throws ClassCastException when the comparator
+  // throws it, unlike JDK6.  Therefore, we accept ClassCastException as a
+  // valid result thrown by java.util.TreeSet#equals.
+  private static void assertNotEqualLenient(
+      TreeSet<?> unexpected, SortedSet<?> actual) {
+    try {
+      ASSERT.that(actual).isNotEqualTo(unexpected);
+    } catch (ClassCastException accepted) {
+    }
+  }
+
+  public void testHeadSetInclusive() {
+    String[] strings = NUMBER_NAMES.toArray(new String[0]);
+    ImmutableSortedSet<String> set = ImmutableSortedSet.copyOf(strings);
+    Arrays.sort(strings);
+    for (int i = 0; i < strings.length; i++) {
+      ASSERT.that(set.headSet(strings[i], true))
+          .hasContentsInOrder(sortedNumberNames(0, i + 1));
+    }
+  }
+
+  public void testHeadSetExclusive() {
+    String[] strings = NUMBER_NAMES.toArray(new String[0]);
+    ImmutableSortedSet<String> set = ImmutableSortedSet.copyOf(strings);
+    Arrays.sort(strings);
+    for (int i = 0; i < strings.length; i++) {
+      ASSERT.that(set.headSet(strings[i], false)).hasContentsInOrder(sortedNumberNames(0, i));
+    }
+  }
+
+  public void testTailSetInclusive() {
+    String[] strings = NUMBER_NAMES.toArray(new String[0]);
+    ImmutableSortedSet<String> set = ImmutableSortedSet.copyOf(strings);
+    Arrays.sort(strings);
+    for (int i = 0; i < strings.length; i++) {
+      ASSERT.that(set.tailSet(strings[i], true)).hasContentsInOrder(
+          sortedNumberNames(i, strings.length));
+    }
+  }
+
+  public void testTailSetExclusive() {
+    String[] strings = NUMBER_NAMES.toArray(new String[0]);
+    ImmutableSortedSet<String> set = ImmutableSortedSet.copyOf(strings);
+    Arrays.sort(strings);
+    for (int i = 0; i < strings.length; i++) {
+      ASSERT.that(set.tailSet(strings[i], false)).hasContentsInOrder(
+          sortedNumberNames(i + 1, strings.length));
+    }
+  }
+
+  public void testSubSetExclusiveExclusive() {
+    String[] strings = NUMBER_NAMES.toArray(new String[0]);
+    ImmutableSortedSet<String> set = ImmutableSortedSet.copyOf(strings);
+    Arrays.sort(strings);
+    for (int i = 0; i < strings.length; i++) {
+      for (int j = i; j < strings.length; j++) {
+        ASSERT.that(set.subSet(strings[i], false, strings[j], false))
+            .hasContentsInOrder(sortedNumberNames(Math.min(i + 1, j), j));
+      }
+    }
+  }
+
+  public void testSubSetInclusiveExclusive() {
+    String[] strings = NUMBER_NAMES.toArray(new String[0]);
+    ImmutableSortedSet<String> set = ImmutableSortedSet.copyOf(strings);
+    Arrays.sort(strings);
+    for (int i = 0; i < strings.length; i++) {
+      for (int j = i; j < strings.length; j++) {
+        ASSERT.that(set.subSet(strings[i], true, strings[j], false))
+            .hasContentsInOrder(sortedNumberNames(i, j));
+      }
+    }
+  }
+
+  public void testSubSetExclusiveInclusive() {
+    String[] strings = NUMBER_NAMES.toArray(new String[0]);
+    ImmutableSortedSet<String> set = ImmutableSortedSet.copyOf(strings);
+    Arrays.sort(strings);
+    for (int i = 0; i < strings.length; i++) {
+      for (int j = i; j < strings.length; j++) {
+        ASSERT.that(set.subSet(strings[i], false, strings[j], true))
+            .hasContentsInOrder(sortedNumberNames(i + 1, j + 1));
+      }
+    }
+  }
+
+  public void testSubSetInclusiveInclusive() {
+    String[] strings = NUMBER_NAMES.toArray(new String[0]);
+    ImmutableSortedSet<String> set = ImmutableSortedSet.copyOf(strings);
+    Arrays.sort(strings);
+    for (int i = 0; i < strings.length; i++) {
+      for (int j = i; j < strings.length; j++) {
+        ASSERT.that(set.subSet(strings[i], true, strings[j], true))
+            .hasContentsInOrder(sortedNumberNames(i, j + 1));
+      }
+    }
+  }
+
+  private static String[] sortedNumberNames(int i, int j) {
+    return SORTED_NUMBER_NAMES.subList(i, j).toArray(new String[0]);
+  }
+
+  private static final ImmutableList<String> NUMBER_NAMES =
+      ImmutableList.of("one", "two", "three", "four", "five", "six", "seven");
+
+  private static final ImmutableList<String> SORTED_NUMBER_NAMES =
+      Ordering.natural().immutableSortedCopy(NUMBER_NAMES);
+
+}
diff --git a/guava-tests/test/com/google/common/collect/ImmutableTableTest.java b/guava-tests/test/com/google/common/collect/ImmutableTableTest.java
new file mode 100644
index 0000000..6311b68
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/ImmutableTableTest.java
@@ -0,0 +1,347 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+/**
+ * Tests common methods in {@link ImmutableTable}
+ *
+ * @author gak@google.com (Gregory Kick)
+ */
+public class ImmutableTableTest extends AbstractTableReadTest {
+  @Override protected Table<String, Integer, Character> create(Object... data) {
+    ImmutableTable.Builder<String, Integer, Character> builder =
+        ImmutableTable.builder();
+    for (int i = 0; i < data.length; i = i + 3) {
+      builder.put((String) data[i], (Integer) data[i + 1],
+          (Character) data[i + 2]);
+    }
+    return builder.build();
+  }
+
+  public void testBuilder() {
+    ImmutableTable.Builder<Character, Integer, String> builder =
+        new ImmutableTable.Builder<Character, Integer, String>();
+    assertEquals(ImmutableTable.of(), builder.build());
+    assertEquals(ImmutableTable.of('a', 1, "foo"), builder
+        .put('a', 1, "foo")
+        .build());
+    Table<Character, Integer, String> expectedTable = HashBasedTable.create();
+    expectedTable.put('a', 1, "foo");
+    expectedTable.put('b', 1, "bar");
+    expectedTable.put('a', 2, "baz");
+    Table<Character, Integer, String> otherTable = HashBasedTable.create();
+    otherTable.put('b', 1, "bar");
+    otherTable.put('a', 2, "baz");
+    assertEquals(expectedTable, builder
+        .putAll(otherTable)
+        .build());
+  }
+
+  public void testBuilder_withImmutableCell() {
+    ImmutableTable.Builder<Character, Integer, String> builder =
+        new ImmutableTable.Builder<Character, Integer, String>();
+    assertEquals(ImmutableTable.of('a', 1, "foo"), builder
+        .put(Tables.immutableCell('a', 1, "foo"))
+        .build());
+  }
+
+  public void testBuilder_withImmutableCellAndNullContents() {
+    ImmutableTable.Builder<Character, Integer, String> builder =
+        new ImmutableTable.Builder<Character, Integer, String>();
+    try {
+      builder.put(Tables.immutableCell((Character) null, 1, "foo"));
+      fail();
+    } catch (NullPointerException e) {
+      // success
+    }
+    try {
+      builder.put(Tables.immutableCell('a', (Integer) null, "foo"));
+      fail();
+    } catch (NullPointerException e) {
+      // success
+    }
+    try {
+      builder.put(Tables.immutableCell('a', 1, (String) null));
+      fail();
+    } catch (NullPointerException e) {
+      // success
+    }
+  }
+
+  private static class StringHolder {
+    String string;
+  }
+
+  public void testBuilder_withMutableCell() {
+    ImmutableTable.Builder<Character, Integer, String> builder =
+        new ImmutableTable.Builder<Character, Integer, String>();
+
+    final StringHolder holder = new StringHolder();
+    holder.string = "foo";
+    Table.Cell<Character, Integer, String> mutableCell =
+        new Tables.AbstractCell<Character, Integer, String>() {
+          @Override public Character getRowKey() {
+            return 'K';
+          }
+          @Override public Integer getColumnKey() {
+            return 42;
+          }
+          @Override public String getValue() {
+            return holder.string;
+          }
+        };
+
+    // Add the mutable cell to the builder
+    builder.put(mutableCell);
+
+    // Mutate the value
+    holder.string = "bar";
+
+    // Make sure it uses the original value.
+    assertEquals(ImmutableTable.of('K', 42, "foo"), builder.build());
+  }
+
+  public void testBuilder_noDuplicates() {
+    ImmutableTable.Builder<Character, Integer, String> builder =
+        new ImmutableTable.Builder<Character, Integer, String>()
+            .put('a', 1, "foo")
+            .put('a', 1, "bar");
+    try {
+      builder.build();
+      fail();
+    } catch (IllegalArgumentException e) {
+      // success
+    }
+  }
+
+  public void testBuilder_noNulls() {
+    ImmutableTable.Builder<Character, Integer, String> builder =
+        new ImmutableTable.Builder<Character, Integer, String>();
+    try {
+      builder.put(null, 1, "foo");
+      fail();
+    } catch (NullPointerException e) {
+      // success
+    }
+    try {
+      builder.put('a', null, "foo");
+      fail();
+    } catch (NullPointerException e) {
+      // success
+    }
+    try {
+      builder.put('a', 1, null);
+      fail();
+    } catch (NullPointerException e) {
+      // success
+    }
+  }
+
+  private static <R, C, V> void validateTableCopies(Table<R, C, V> original) {
+    Table<R, C, V> copy = ImmutableTable.copyOf(original);
+    assertEquals(original, copy);
+    validateViewOrdering(original, copy);
+
+    Table<R, C, V> built
+        = ImmutableTable.<R, C, V>builder().putAll(original).build();
+    assertEquals(original, built);
+    validateViewOrdering(original, built);
+  }
+
+  private static <R, C, V> void validateViewOrdering(
+      Table<R, C, V> original, Table<R, C, V> copy) {
+    assertTrue(Iterables.elementsEqual(original.cellSet(), copy.cellSet()));
+    assertTrue(Iterables.elementsEqual(original.rowKeySet(), copy.rowKeySet()));
+    assertTrue(Iterables.elementsEqual(original.values(), copy.values()));
+  }
+
+  public void testCopyOf() {
+    Table<Character, Integer, String> table = TreeBasedTable.create();
+    validateTableCopies(table);
+    table.put('b', 2, "foo");
+    validateTableCopies(table);
+    table.put('b', 1, "bar");
+    table.put('a', 2, "baz");
+    validateTableCopies(table);
+    // Even though rowKeySet, columnKeySet, and cellSet have the same
+    // iteration ordering, row has an inconsistent ordering.
+    ASSERT.that(table.row('b').keySet()).hasContentsInOrder(1, 2);
+    ASSERT.that(ImmutableTable.copyOf(table).row('b').keySet())
+        .hasContentsInOrder(2, 1);
+  }
+
+  public void testCopyOfSparse() {
+    Table<Character, Integer, String> table = TreeBasedTable.create();
+    table.put('x', 2, "foo");
+    table.put('r', 1, "bar");
+    table.put('c', 3, "baz");
+    table.put('b', 7, "cat");
+    table.put('e', 5, "dog");
+    table.put('c', 0, "axe");
+    table.put('e', 3, "tub");
+    table.put('r', 4, "foo");
+    table.put('x', 5, "bar");
+    validateTableCopies(table);
+  }
+
+  public void testCopyOfDense() {
+    Table<Character, Integer, String> table = TreeBasedTable.create();
+    table.put('c', 3, "foo");
+    table.put('c', 2, "bar");
+    table.put('c', 1, "baz");
+    table.put('b', 3, "cat");
+    table.put('b', 1, "dog");
+    table.put('a', 3, "foo");
+    table.put('a', 2, "bar");
+    table.put('a', 1, "baz");
+    validateTableCopies(table);
+  }
+
+  public void testBuilder_orderRowsAndColumnsBy_putAll() {
+    Table<Character, Integer, String> table = HashBasedTable.create();
+    table.put('b', 2, "foo");
+    table.put('b', 1, "bar");
+    table.put('a', 2, "baz");
+    ImmutableTable.Builder<Character, Integer, String> builder
+        = ImmutableTable.builder();
+    Table<Character, Integer, String> copy
+        = builder.orderRowsBy(Ordering.natural())
+            .orderColumnsBy(Ordering.natural())
+            .putAll(table).build();
+    ASSERT.that(copy.rowKeySet()).hasContentsInOrder('a', 'b');
+    ASSERT.that(copy.columnKeySet()).hasContentsInOrder(1, 2);
+    ASSERT.that(copy.values()).hasContentsInOrder("baz", "bar", "foo");
+    ASSERT.that(copy.row('b').keySet()).hasContentsInOrder(1, 2);
+  }
+
+  public void testBuilder_orderRowsAndColumnsBy_sparse() {
+    ImmutableTable.Builder<Character, Integer, String> builder
+        = ImmutableTable.builder();
+    builder.orderRowsBy(Ordering.natural());
+    builder.orderColumnsBy(Ordering.natural());
+    builder.put('x', 2, "foo");
+    builder.put('r', 1, "bar");
+    builder.put('c', 3, "baz");
+    builder.put('b', 7, "cat");
+    builder.put('e', 5, "dog");
+    builder.put('c', 0, "axe");
+    builder.put('e', 3, "tub");
+    builder.put('r', 4, "foo");
+    builder.put('x', 5, "bar");
+    Table<Character, Integer, String> table = builder.build();
+    ASSERT.that(table.rowKeySet()).hasContentsInOrder('b', 'c', 'e', 'r', 'x');
+    ASSERT.that(table.columnKeySet()).hasContentsInOrder(0, 1, 2, 3, 4, 5, 7);
+    ASSERT.that(table.values()).hasContentsInOrder("cat", "axe", "baz", "tub",
+        "dog", "bar", "foo", "foo", "bar");
+    ASSERT.that(table.row('c').keySet()).hasContentsInOrder(0, 3);
+    ASSERT.that(table.column(5).keySet()).hasContentsInOrder('e', 'x');
+  }
+
+  public void testBuilder_orderRowsAndColumnsBy_dense() {
+    ImmutableTable.Builder<Character, Integer, String> builder
+        = ImmutableTable.builder();
+    builder.orderRowsBy(Ordering.natural());
+    builder.orderColumnsBy(Ordering.natural());
+    builder.put('c', 3, "foo");
+    builder.put('c', 2, "bar");
+    builder.put('c', 1, "baz");
+    builder.put('b', 3, "cat");
+    builder.put('b', 1, "dog");
+    builder.put('a', 3, "foo");
+    builder.put('a', 2, "bar");
+    builder.put('a', 1, "baz");
+    Table<Character, Integer, String> table = builder.build();
+    ASSERT.that(table.rowKeySet()).hasContentsInOrder('a', 'b', 'c');
+    ASSERT.that(table.columnKeySet()).hasContentsInOrder(1, 2, 3);
+    ASSERT.that(table.values()).hasContentsInOrder("baz", "bar", "foo", "dog",
+        "cat", "baz", "bar", "foo");
+    ASSERT.that(table.row('c').keySet()).hasContentsInOrder(1, 2, 3);
+    ASSERT.that(table.column(1).keySet()).hasContentsInOrder('a', 'b', 'c');
+  }
+
+  public void testBuilder_orderRowsBy_sparse() {
+    ImmutableTable.Builder<Character, Integer, String> builder
+        = ImmutableTable.builder();
+    builder.orderRowsBy(Ordering.natural());
+    builder.put('x', 2, "foo");
+    builder.put('r', 1, "bar");
+    builder.put('c', 3, "baz");
+    builder.put('b', 7, "cat");
+    builder.put('e', 5, "dog");
+    builder.put('c', 0, "axe");
+    builder.put('e', 3, "tub");
+    builder.put('r', 4, "foo");
+    builder.put('x', 5, "bar");
+    Table<Character, Integer, String> table = builder.build();
+    ASSERT.that(table.rowKeySet()).hasContentsInOrder('b', 'c', 'e', 'r', 'x');
+    ASSERT.that(table.column(5).keySet()).hasContentsInOrder('e', 'x');
+  }
+
+  public void testBuilder_orderRowsBy_dense() {
+    ImmutableTable.Builder<Character, Integer, String> builder
+        = ImmutableTable.builder();
+    builder.orderRowsBy(Ordering.natural());
+    builder.put('c', 3, "foo");
+    builder.put('c', 2, "bar");
+    builder.put('c', 1, "baz");
+    builder.put('b', 3, "cat");
+    builder.put('b', 1, "dog");
+    builder.put('a', 3, "foo");
+    builder.put('a', 2, "bar");
+    builder.put('a', 1, "baz");
+    Table<Character, Integer, String> table = builder.build();
+    ASSERT.that(table.rowKeySet()).hasContentsInOrder('a', 'b', 'c');
+    ASSERT.that(table.column(1).keySet()).hasContentsInOrder('a', 'b', 'c');
+  }
+
+  public void testBuilder_orderColumnsBy_sparse() {
+    ImmutableTable.Builder<Character, Integer, String> builder
+        = ImmutableTable.builder();
+    builder.orderColumnsBy(Ordering.natural());
+    builder.put('x', 2, "foo");
+    builder.put('r', 1, "bar");
+    builder.put('c', 3, "baz");
+    builder.put('b', 7, "cat");
+    builder.put('e', 5, "dog");
+    builder.put('c', 0, "axe");
+    builder.put('e', 3, "tub");
+    builder.put('r', 4, "foo");
+    builder.put('x', 5, "bar");
+    Table<Character, Integer, String> table = builder.build();
+    ASSERT.that(table.columnKeySet()).hasContentsInOrder(0, 1, 2, 3, 4, 5, 7);
+    ASSERT.that(table.row('c').keySet()).hasContentsInOrder(0, 3);
+  }
+
+  public void testBuilder_orderColumnsBy_dense() {
+    ImmutableTable.Builder<Character, Integer, String> builder
+        = ImmutableTable.builder();
+    builder.orderColumnsBy(Ordering.natural());
+    builder.put('c', 3, "foo");
+    builder.put('c', 2, "bar");
+    builder.put('c', 1, "baz");
+    builder.put('b', 3, "cat");
+    builder.put('b', 1, "dog");
+    builder.put('a', 3, "foo");
+    builder.put('a', 2, "bar");
+    builder.put('a', 1, "baz");
+    Table<Character, Integer, String> table = builder.build();
+    ASSERT.that(table.columnKeySet()).hasContentsInOrder(1, 2, 3);
+    ASSERT.that(table.row('c').keySet()).hasContentsInOrder(1, 2, 3);
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/InternersTest.java b/guava-tests/test/com/google/common/collect/InternersTest.java
new file mode 100644
index 0000000..db11ad2
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/InternersTest.java
@@ -0,0 +1,102 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.base.Function;
+import com.google.common.testing.NullPointerTester;
+
+import junit.framework.TestCase;
+
+import java.lang.ref.WeakReference;
+
+/**
+ * Unit test for {@link Interners}.
+ *
+ * @author Kevin Bourrillion
+ */
+public class InternersTest extends TestCase {
+
+  public void testStrong_simplistic() {
+    String canonical = "a";
+    String not = new String("a");
+
+    Interner<String> pool = Interners.newStrongInterner();
+    assertSame(canonical, pool.intern(canonical));
+    assertSame(canonical, pool.intern(not));
+  }
+
+  public void testStrong_null() {
+    Interner<String> pool = Interners.newStrongInterner();
+    try {
+      pool.intern(null);
+      fail();
+    } catch (NullPointerException ok) {}
+  }
+
+  public void testWeak_simplistic() {
+    String canonical = "a";
+    String not = new String("a");
+
+    Interner<String> pool = Interners.newWeakInterner();
+    assertSame(canonical, pool.intern(canonical));
+    assertSame(canonical, pool.intern(not));
+  }
+
+  public void testWeak_null() {
+    Interner<String> pool = Interners.newWeakInterner();
+    try {
+      pool.intern(null);
+      fail();
+    } catch (NullPointerException ok) {}
+  }
+
+  public void testWeak_afterGC() throws InterruptedException {
+    Integer canonical = new Integer(5);
+    Integer not = new Integer(5);
+
+    Interner<Integer> pool = Interners.newWeakInterner();
+    assertSame(canonical, pool.intern(canonical));
+
+    WeakReference<Integer> signal = new WeakReference<Integer>(canonical);
+    canonical = null;
+
+    for (int i = 0; i < 3000; i++) {
+      System.gc();
+      if (signal.get() == null) { // it was collected
+        assertSame(not, pool.intern(not));
+        return;
+      }
+      Thread.sleep(1);
+    }
+    fail("reference didn't get cleaned up");
+  }
+
+  public void testAsFunction_simplistic() {
+    String canonical = "a";
+    String not = new String("a");
+
+    Function<String, String> internerFunction =
+        Interners.asFunction(Interners.<String>newStrongInterner());
+
+    assertSame(canonical, internerFunction.apply(canonical));
+    assertSame(canonical, internerFunction.apply(not));
+  }
+
+  public void testNullPointerExceptions() throws Exception {
+    new NullPointerTester().testAllPublicStaticMethods(Interners.class);
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/InverseBiMapTest.java b/guava-tests/test/com/google/common/collect/InverseBiMapTest.java
new file mode 100644
index 0000000..637b629
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/InverseBiMapTest.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+/**
+ * Unit test covering the inverse view of a {@code BiMap}.
+ *
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible
+public class InverseBiMapTest extends AbstractBiMapTest {
+  @Override protected BiMap<Integer, String> create() {
+    BiMap<String, Integer> inverse = HashBiMap.create();
+    return inverse.inverse();
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/IterablesTest.java b/guava-tests/test/com/google/common/collect/IterablesTest.java
new file mode 100644
index 0000000..b0ea688
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/IterablesTest.java
@@ -0,0 +1,1375 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.collect.Iterables.skip;
+import static com.google.common.collect.Lists.newArrayList;
+import static com.google.common.collect.Sets.newLinkedHashSet;
+import static com.google.common.collect.testing.IteratorFeature.MODIFIABLE;
+import static com.google.common.collect.testing.IteratorFeature.UNMODIFIABLE;
+import static java.util.Arrays.asList;
+import static java.util.Collections.emptyList;
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.base.Function;
+import com.google.common.base.Optional;
+import com.google.common.base.Predicate;
+import com.google.common.base.Predicates;
+import com.google.common.collect.testing.IteratorTester;
+import com.google.common.testing.NullPointerTester;
+
+import junit.framework.TestCase;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.ConcurrentModificationException;
+import java.util.Iterator;
+import java.util.List;
+import java.util.NoSuchElementException;
+import java.util.Queue;
+import java.util.RandomAccess;
+import java.util.Set;
+import java.util.SortedSet;
+import java.util.TreeSet;
+
+/**
+ * Unit test for {@code Iterables}.
+ *
+ * @author Kevin Bourrillion
+ * @author Jared Levy
+ */
+@GwtCompatible(emulated = true)
+public class IterablesTest extends TestCase {
+
+  public void testSize0() {
+    Iterable<String> iterable = Collections.emptySet();
+    assertEquals(0, Iterables.size(iterable));
+  }
+
+  public void testSize1Collection() {
+    Iterable<String> iterable = Collections.singleton("a");
+    assertEquals(1, Iterables.size(iterable));
+  }
+
+  public void testSize2NonCollection() {
+    Iterable<Integer> iterable = new Iterable<Integer>() {
+      @Override
+      public Iterator<Integer> iterator() {
+        return asList(0, 1).iterator();
+      }
+    };
+    assertEquals(2, Iterables.size(iterable));
+  }
+
+  @SuppressWarnings("serial")
+  public void testSize_collection_doesntIterate() {
+    List<Integer> nums = asList(1, 2, 3, 4, 5);
+    List<Integer> collection = new ArrayList<Integer>(nums) {
+      @Override public Iterator<Integer> iterator() {
+        fail("Don't iterate me!");
+        return null;
+      }
+    };
+    assertEquals(5, Iterables.size(collection));
+  }
+
+  private static Iterable<String> iterable(String... elements) {
+    final List<String> list = asList(elements);
+    return new Iterable<String>() {
+      @Override
+      public Iterator<String> iterator() {
+        return list.iterator();
+      }
+    };
+  }
+
+  public void test_contains_null_set_yes() {
+    Iterable<String> set = Sets.newHashSet("a", null, "b");
+    assertTrue(Iterables.contains(set, null));
+  }
+
+  public void test_contains_null_set_no() {
+    Iterable<String> set = Sets.newHashSet("a", "b");
+    assertFalse(Iterables.contains(set, null));
+  }
+
+  public void test_contains_null_iterable_yes() {
+    Iterable<String> set = iterable("a", null, "b");
+    assertTrue(Iterables.contains(set, null));
+  }
+
+  public void test_contains_null_iterable_no() {
+    Iterable<String> set = iterable("a", "b");
+    assertFalse(Iterables.contains(set, null));
+  }
+
+  public void test_contains_nonnull_set_yes() {
+    Iterable<String> set = Sets.newHashSet("a", null, "b");
+    assertTrue(Iterables.contains(set, "b"));
+  }
+
+  public void test_contains_nonnull_set_no() {
+    Iterable<String> set = Sets.newHashSet("a", "b");
+    assertFalse(Iterables.contains(set, "c"));
+  }
+
+  public void test_contains_nonnull_iterable_yes() {
+    Iterable<String> set = iterable("a", null, "b");
+    assertTrue(Iterables.contains(set, "b"));
+  }
+
+  public void test_contains_nonnull_iterable_no() {
+    Iterable<String> set = iterable("a", "b");
+    assertFalse(Iterables.contains(set, "c"));
+  }
+
+  public void testGetOnlyElement_noDefault_valid() {
+    Iterable<String> iterable = Collections.singletonList("foo");
+    assertEquals("foo", Iterables.getOnlyElement(iterable));
+  }
+
+  public void testGetOnlyElement_noDefault_empty() {
+    Iterable<String> iterable = Collections.emptyList();
+    try {
+      Iterables.getOnlyElement(iterable);
+      fail();
+    } catch (NoSuchElementException expected) {
+    }
+  }
+
+  public void testGetOnlyElement_noDefault_multiple() {
+    Iterable<String> iterable = asList("foo", "bar");
+    try {
+      Iterables.getOnlyElement(iterable);
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  public void testGetOnlyElement_withDefault_singleton() {
+    Iterable<String> iterable = Collections.singletonList("foo");
+    assertEquals("foo", Iterables.getOnlyElement(iterable, "bar"));
+  }
+
+  public void testGetOnlyElement_withDefault_empty() {
+    Iterable<String> iterable = Collections.emptyList();
+    assertEquals("bar", Iterables.getOnlyElement(iterable, "bar"));
+  }
+
+  public void testGetOnlyElement_withDefault_empty_null() {
+    Iterable<String> iterable = Collections.emptyList();
+    assertNull(Iterables.getOnlyElement(iterable, null));
+  }
+
+  public void testGetOnlyElement_withDefault_multiple() {
+    Iterable<String> iterable = asList("foo", "bar");
+    try {
+      Iterables.getOnlyElement(iterable, "x");
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  @GwtIncompatible("Iterables.toArray(Iterable, Class)")
+  public void testToArrayEmpty() {
+    Iterable<String> iterable = Collections.emptyList();
+    String[] array = Iterables.toArray(iterable, String.class);
+    assertTrue(Arrays.equals(new String[0], array));
+  }
+
+  @GwtIncompatible("Iterables.toArray(Iterable, Class)")
+  public void testToArraySingleton() {
+    Iterable<String> iterable = Collections.singletonList("a");
+    String[] array = Iterables.toArray(iterable, String.class);
+    assertTrue(Arrays.equals(new String[] {"a"}, array));
+  }
+
+  @GwtIncompatible("Iterables.toArray(Iterable, Class)")
+  public void testToArray() {
+    String[] sourceArray = new String[] {"a", "b", "c"};
+    Iterable<String> iterable = asList(sourceArray);
+    String[] newArray = Iterables.toArray(iterable, String.class);
+    assertTrue(Arrays.equals(sourceArray, newArray));
+  }
+
+  public void testFilter() {
+    Iterable<String> unfiltered = newArrayList("foo", "bar");
+    Iterable<String> filtered = Iterables.filter(unfiltered,
+                                                 Predicates.equalTo("foo"));
+
+    List<String> expected = Collections.singletonList("foo");
+    List<String> actual = newArrayList(filtered);
+    assertEquals(expected, actual);
+    assertCanIterateAgain(filtered);
+    assertEquals("[foo]", filtered.toString());
+  }
+
+  public void testAny() {
+    List<String> list = newArrayList();
+    Predicate<String> predicate = Predicates.equalTo("pants");
+
+    assertFalse(Iterables.any(list, predicate));
+    list.add("cool");
+    assertFalse(Iterables.any(list, predicate));
+    list.add("pants");
+    assertTrue(Iterables.any(list, predicate));
+  }
+
+  public void testAll() {
+    List<String> list = newArrayList();
+    Predicate<String> predicate = Predicates.equalTo("cool");
+
+    assertTrue(Iterables.all(list, predicate));
+    list.add("cool");
+    assertTrue(Iterables.all(list, predicate));
+    list.add("pants");
+    assertFalse(Iterables.all(list, predicate));
+  }
+
+  public void testFind() {
+    Iterable<String> list = newArrayList("cool", "pants");
+    assertEquals("cool", Iterables.find(list, Predicates.equalTo("cool")));
+    assertEquals("pants", Iterables.find(list, Predicates.equalTo("pants")));
+    try {
+      Iterables.find(list, Predicates.alwaysFalse());
+      fail();
+    } catch (NoSuchElementException e) {
+    }
+    assertEquals("cool", Iterables.find(list, Predicates.alwaysTrue()));
+    assertCanIterateAgain(list);
+  }
+
+  public void testFind_withDefault() {
+    Iterable<String> list = Lists.newArrayList("cool", "pants");
+    assertEquals("cool",
+        Iterables.find(list, Predicates.equalTo("cool"), "woot"));
+    assertEquals("pants",
+        Iterables.find(list, Predicates.equalTo("pants"), "woot"));
+    assertEquals("woot", Iterables.find(list,
+        Predicates.alwaysFalse(), "woot"));
+    assertNull(Iterables.find(list, Predicates.alwaysFalse(), null));
+    assertEquals("cool",
+        Iterables.find(list, Predicates.alwaysTrue(), "woot"));
+    assertCanIterateAgain(list);
+  }
+
+  public void testTryFind() {
+    Iterable<String> list = newArrayList("cool", "pants");
+    assertEquals(Optional.of("cool"),
+        Iterables.tryFind(list, Predicates.equalTo("cool")));
+    assertEquals(Optional.of("pants"),
+        Iterables.tryFind(list, Predicates.equalTo("pants")));
+    assertEquals(Optional.of("cool"),
+        Iterables.tryFind(list, Predicates.alwaysTrue()));
+    assertEquals(Optional.absent(),
+        Iterables.tryFind(list, Predicates.alwaysFalse()));
+    assertCanIterateAgain(list);
+  }
+
+  private static class TypeA {}
+  private interface TypeB {}
+  private static class HasBoth extends TypeA implements TypeB {}
+
+  @GwtIncompatible("Iterables.filter(Iterable, Class)")
+  public void testFilterByType() throws Exception {
+    HasBoth hasBoth = new HasBoth();
+    Iterable<TypeA> alist = Lists
+        .newArrayList(new TypeA(), new TypeA(), hasBoth, new TypeA());
+    Iterable<TypeB> blist = Iterables.filter(alist, TypeB.class);
+    ASSERT.that(blist).hasContentsInOrder(hasBoth);
+  }
+
+  public void testTransform() {
+    List<String> input = asList("1", "2", "3");
+    Iterable<Integer> result = Iterables.transform(input,
+        new Function<String, Integer>() {
+          @Override
+          public Integer apply(String from) {
+            return Integer.valueOf(from);
+          }
+        });
+
+    List<Integer> actual = newArrayList(result);
+    List<Integer> expected = asList(1, 2, 3);
+    assertEquals(expected, actual);
+    assertCanIterateAgain(result);
+    assertEquals("[1, 2, 3]", result.toString());
+  }
+
+  public void testPoorlyBehavedTransform() {
+    List<String> input = asList("1", null, "3");
+    Iterable<Integer> result = Iterables.transform(input,
+        new Function<String, Integer>() {
+          @Override
+          public Integer apply(String from) {
+            return Integer.valueOf(from);
+          }
+        });
+
+    Iterator<Integer> resultIterator = result.iterator();
+    resultIterator.next();
+
+    try {
+      resultIterator.next();
+      fail("Expected NFE");
+    } catch (NumberFormatException nfe) {
+      // Expected to fail.
+    }
+  }
+
+  public void testNullFriendlyTransform() {
+    List<Integer> input = asList(1, 2, null, 3);
+    Iterable<String> result = Iterables.transform(input,
+        new Function<Integer, String>() {
+          @Override
+          public String apply(Integer from) {
+            return String.valueOf(from);
+          }
+        });
+
+    List<String> actual = newArrayList(result);
+    List<String> expected = asList("1", "2", "null", "3");
+    assertEquals(expected, actual);
+  }
+
+  // Far less exhaustive than the tests in IteratorsTest
+  public void testCycle() {
+    Iterable<String> cycle = Iterables.cycle("a", "b");
+
+    int howManyChecked = 0;
+    for (String string : cycle) {
+      String expected = (howManyChecked % 2 == 0) ? "a" : "b";
+      assertEquals(expected, string);
+      if (howManyChecked++ == 5) {
+        break;
+      }
+    }
+
+    // We left the last iterator pointing to "b". But a new iterator should
+    // always point to "a".
+    for (String string : cycle) {
+      assertEquals("a", string);
+      break;
+    }
+
+    assertEquals("[a, b] (cycled)", cycle.toString());
+  }
+
+  // Again, the exhaustive tests are in IteratorsTest
+  public void testConcatIterable() {
+    List<Integer> list1 = newArrayList(1);
+    List<Integer> list2 = newArrayList(4);
+
+    @SuppressWarnings("unchecked")
+    List<List<Integer>> input = newArrayList(list1, list2);
+
+    Iterable<Integer> result = Iterables.concat(input);
+    assertEquals(asList(1, 4), newArrayList(result));
+
+    // Now change the inputs and see result dynamically change as well
+
+    list1.add(2);
+    List<Integer> list3 = newArrayList(3);
+    input.add(1, list3);
+
+    assertEquals(asList(1, 2, 3, 4), newArrayList(result));
+    assertEquals("[1, 2, 3, 4]", result.toString());
+  }
+
+  public void testConcatVarargs() {
+    List<Integer> list1 = newArrayList(1);
+    List<Integer> list2 = newArrayList(4);
+    List<Integer> list3 = newArrayList(7, 8);
+    List<Integer> list4 = newArrayList(9);
+    List<Integer> list5 = newArrayList(10);
+    @SuppressWarnings("unchecked")
+    Iterable<Integer> result =
+        Iterables.concat(list1, list2, list3, list4, list5);
+    assertEquals(asList(1, 4, 7, 8, 9, 10), newArrayList(result));
+    assertEquals("[1, 4, 7, 8, 9, 10]", result.toString());
+  }
+
+  public void testConcatNullPointerException() {
+    List<Integer> list1 = newArrayList(1);
+    List<Integer> list2 = newArrayList(4);
+
+    try {
+      Iterables.concat(list1, null, list2);
+      fail();
+    } catch (NullPointerException expected) {}
+  }
+
+  public void testConcatPeformingFiniteCycle() {
+    Iterable<Integer> iterable = asList(1, 2, 3);
+    int n = 4;
+    Iterable<Integer> repeated
+        = Iterables.concat(Collections.nCopies(n, iterable));
+    ASSERT.that(repeated).hasContentsInOrder(
+        1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3);
+  }
+
+  public void testPartition_badSize() {
+    Iterable<Integer> source = Collections.singleton(1);
+    try {
+      Iterables.partition(source, 0);
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  public void testPartition_empty() {
+    Iterable<Integer> source = Collections.emptySet();
+    Iterable<List<Integer>> partitions = Iterables.partition(source, 1);
+    assertTrue(Iterables.isEmpty(partitions));
+  }
+
+  public void testPartition_singleton1() {
+    Iterable<Integer> source = Collections.singleton(1);
+    Iterable<List<Integer>> partitions = Iterables.partition(source, 1);
+    assertEquals(1, Iterables.size(partitions));
+    assertEquals(Collections.singletonList(1), partitions.iterator().next());
+  }
+
+  public void testPartition_view() {
+    List<Integer> list = asList(1, 2);
+    Iterable<List<Integer>> partitions = Iterables.partition(list, 2);
+
+    // Changes before the partition is retrieved are reflected
+    list.set(0, 3);
+
+    Iterator<List<Integer>> iterator = partitions.iterator();
+
+    // Changes before the partition is retrieved are reflected
+    list.set(1, 4);
+
+    List<Integer> first = iterator.next();
+
+    // Changes after are not
+    list.set(0, 5);
+
+    assertEquals(ImmutableList.of(3, 4), first);
+  }
+
+  @GwtIncompatible("?")
+  // TODO: Figure out why this is failing in GWT.
+  public void testPartitionRandomAccessInput() {
+    Iterable<Integer> source = asList(1, 2, 3);
+    Iterable<List<Integer>> partitions = Iterables.partition(source, 2);
+    Iterator<List<Integer>> iterator = partitions.iterator();
+    assertTrue(iterator.next() instanceof RandomAccess);
+    assertTrue(iterator.next() instanceof RandomAccess);
+  }
+
+  @GwtIncompatible("?")
+  // TODO: Figure out why this is failing in GWT.
+  public void testPartitionNonRandomAccessInput() {
+    Iterable<Integer> source = Lists.newLinkedList(asList(1, 2, 3));
+    Iterable<List<Integer>> partitions = Iterables.partition(source, 2);
+    Iterator<List<Integer>> iterator = partitions.iterator();
+    // Even though the input list doesn't implement RandomAccess, the output
+    // lists do.
+    assertTrue(iterator.next() instanceof RandomAccess);
+    assertTrue(iterator.next() instanceof RandomAccess);
+  }
+
+  public void testPaddedPartition_basic() {
+    List<Integer> list = asList(1, 2, 3, 4, 5);
+    Iterable<List<Integer>> partitions = Iterables.paddedPartition(list, 2);
+    assertEquals(3, Iterables.size(partitions));
+    assertEquals(asList(5, null), Iterables.getLast(partitions));
+  }
+
+  public void testPaddedPartitionRandomAccessInput() {
+    Iterable<Integer> source = asList(1, 2, 3);
+    Iterable<List<Integer>> partitions = Iterables.paddedPartition(source, 2);
+    Iterator<List<Integer>> iterator = partitions.iterator();
+    assertTrue(iterator.next() instanceof RandomAccess);
+    assertTrue(iterator.next() instanceof RandomAccess);
+  }
+
+  public void testPaddedPartitionNonRandomAccessInput() {
+    Iterable<Integer> source = Lists.newLinkedList(asList(1, 2, 3));
+    Iterable<List<Integer>> partitions = Iterables.paddedPartition(source, 2);
+    Iterator<List<Integer>> iterator = partitions.iterator();
+    // Even though the input list doesn't implement RandomAccess, the output
+    // lists do.
+    assertTrue(iterator.next() instanceof RandomAccess);
+    assertTrue(iterator.next() instanceof RandomAccess);
+  }
+
+  // More tests in IteratorsTest
+  public void testAddAllToList() {
+    List<String> alreadyThere = newArrayList("already", "there");
+    List<String> freshlyAdded = newArrayList("freshly", "added");
+
+    boolean changed = Iterables.addAll(alreadyThere, freshlyAdded);
+    ASSERT.that(alreadyThere).hasContentsInOrder(
+        "already", "there", "freshly", "added");
+    assertTrue(changed);
+  }
+
+  private static void assertCanIterateAgain(Iterable<?> iterable) {
+    for (@SuppressWarnings("unused") Object obj : iterable) {
+    }
+  }
+
+  @GwtIncompatible("NullPointerTester")
+  public void testNullPointerExceptions() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.testAllPublicStaticMethods(Iterables.class);
+  }
+
+  // More exhaustive tests are in IteratorsTest.
+  public void testElementsEqual() throws Exception {
+    Iterable<?> a;
+    Iterable<?> b;
+
+    // A few elements.
+    a = asList(4, 8, 15, 16, 23, 42);
+    b = asList(4, 8, 15, 16, 23, 42);
+    assertTrue(Iterables.elementsEqual(a, b));
+
+    // An element differs.
+    a = asList(4, 8, 15, 12, 23, 42);
+    b = asList(4, 8, 15, 16, 23, 42);
+    assertFalse(Iterables.elementsEqual(a, b));
+
+    // null versus non-null.
+    a = asList(4, 8, 15, null, 23, 42);
+    b = asList(4, 8, 15, 16, 23, 42);
+    assertFalse(Iterables.elementsEqual(a, b));
+    assertFalse(Iterables.elementsEqual(b, a));
+
+    // Different lengths.
+    a = asList(4, 8, 15, 16, 23);
+    b = asList(4, 8, 15, 16, 23, 42);
+    assertFalse(Iterables.elementsEqual(a, b));
+    assertFalse(Iterables.elementsEqual(b, a));
+  }
+
+  @GwtIncompatible("slow (~30s)")
+  @SuppressWarnings("deprecation") // test of a deprecated method
+  public void testReversePassesIteratorsTester() {
+    new IteratorTester<Integer>(5, MODIFIABLE, newArrayList(2, 4, 6, 8),
+        IteratorTester.KnownOrder.KNOWN_ORDER) {
+      @Override protected Iterator<Integer> newTargetIterator() {
+        return Iterables.reverse(newArrayList(8, 6, 4, 2)).iterator();
+      }
+    }.test();
+  }
+
+  @SuppressWarnings("deprecation") // test of a deprecated method
+  public void testReverseWorksAsExpected() {
+    String[] testStrs = new String[] {"foo", "bar", "baz"};
+    String[] expected = new String[] {"baz", "bar", "foo"};
+
+    List<String> stuff = ImmutableList.copyOf(testStrs);
+
+    Iterable<String> reversed = Iterables.reverse(stuff);
+    ASSERT.that(reversed).hasContentsInOrder(expected);
+    assertEquals("[baz, bar, foo]", reversed.toString());
+
+    List<String> removable = newArrayList("foo", "bar", "bad", "baz");
+
+    reversed = Iterables.reverse(removable);
+    ASSERT.that(reversed).hasContentsInOrder("baz", "bad", "bar", "foo");
+
+    Iterator<String> reverseIter = reversed.iterator();
+    assertEquals("baz", reverseIter.next());
+    assertEquals("bad", reverseIter.next());
+    reverseIter.remove();
+
+    ASSERT.that(reversed).hasContentsInOrder(expected);
+    ASSERT.that(reversed).hasContentsInOrder(expected);
+  }
+
+  public void testToString() {
+    List<String> list = Collections.emptyList();
+    assertEquals("[]", Iterables.toString(list));
+
+    list = newArrayList("yam", "bam", "jam", "ham");
+    assertEquals("[yam, bam, jam, ham]", Iterables.toString(list));
+  }
+
+  public void testLimit() {
+    Iterable<String> iterable = newArrayList("foo", "bar", "baz");
+    Iterable<String> limited = Iterables.limit(iterable, 2);
+
+    List<String> expected = ImmutableList.of("foo", "bar");
+    List<String> actual = newArrayList(limited);
+    assertEquals(expected, actual);
+    assertCanIterateAgain(limited);
+    assertEquals("[foo, bar]", limited.toString());
+  }
+
+  public void testLimit_illegalArgument() {
+    List<String> list = newArrayList("a", "b", "c");
+    try {
+      Iterables.limit(list, -1);
+      fail();
+    } catch (IllegalArgumentException expected) {}
+  }
+
+  public void testIsEmpty() {
+    Iterable<String> emptyList = Collections.emptyList();
+    assertTrue(Iterables.isEmpty(emptyList));
+
+    Iterable<String> singletonList = Collections.singletonList("foo");
+    assertFalse(Iterables.isEmpty(singletonList));
+  }
+
+  public void testSkip_simple() {
+    Collection<String> set = ImmutableSet.of("a", "b", "c", "d", "e");
+    assertEquals(newArrayList("c", "d", "e"), newArrayList(skip(set, 2)));
+    assertEquals("[c, d, e]", skip(set, 2).toString());
+  }
+
+  public void testSkip_simpleList() {
+    Collection<String> list = newArrayList("a", "b", "c", "d", "e");
+    assertEquals(newArrayList("c", "d", "e"), newArrayList(skip(list, 2)));
+    assertEquals("[c, d, e]", skip(list, 2).toString());
+  }
+
+  public void testSkip_pastEnd() {
+    Collection<String> set = ImmutableSet.of("a", "b");
+    assertEquals(emptyList(), newArrayList(skip(set, 20)));
+  }
+
+  public void testSkip_pastEndList() {
+    Collection<String> list = newArrayList("a", "b");
+    assertEquals(emptyList(), newArrayList(skip(list, 20)));
+  }
+
+  public void testSkip_skipNone() {
+    Collection<String> set = ImmutableSet.of("a", "b");
+    assertEquals(newArrayList("a", "b"), newArrayList(skip(set, 0)));
+  }
+
+  public void testSkip_skipNoneList() {
+    Collection<String> list = newArrayList("a", "b");
+    assertEquals(newArrayList("a", "b"), newArrayList(skip(list, 0)));
+  }
+
+  @GwtIncompatible("slow (~35s)")
+  public void testSkip_iterator() {
+    new IteratorTester<Integer>(5, MODIFIABLE, newArrayList(2, 3),
+        IteratorTester.KnownOrder.KNOWN_ORDER) {
+      @Override protected Iterator<Integer> newTargetIterator() {
+        return skip(newLinkedHashSet(asList(1, 2, 3)), 1).iterator();
+      }
+    }.test();
+  }
+
+  @GwtIncompatible("slow (~35s)")
+  public void testSkip_iteratorList() {
+    new IteratorTester<Integer>(5, MODIFIABLE, newArrayList(2, 3),
+        IteratorTester.KnownOrder.KNOWN_ORDER) {
+      @Override protected Iterator<Integer> newTargetIterator() {
+        return skip(newArrayList(1, 2, 3), 1).iterator();
+      }
+    }.test();
+  }
+
+  public void testSkip_nonStructurallyModifiedList() throws Exception {
+    List<String> list = newArrayList("a", "b", "c");
+    Iterable<String> tail = skip(list, 1);
+    Iterator<String> tailIterator = tail.iterator();
+    list.set(2, "C");
+    assertEquals("b", tailIterator.next());
+    assertEquals("C", tailIterator.next());
+    assertFalse(tailIterator.hasNext());
+  }
+
+  public void testSkip_structurallyModifiedSkipSome() throws Exception {
+    Collection<String> set = newLinkedHashSet(asList("a", "b", "c"));
+    Iterable<String> tail = skip(set, 1);
+    set.remove("b");
+    set.addAll(newArrayList("A", "B", "C"));
+    ASSERT.that(tail).hasContentsInOrder("c", "A", "B", "C");
+  }
+
+  public void testSkip_structurallyModifiedSkipSomeList() throws Exception {
+    List<String> list = newArrayList("a", "b", "c");
+    Iterable<String> tail = skip(list, 1);
+    list.subList(1, 3).clear();
+    list.addAll(0, newArrayList("A", "B", "C"));
+    ASSERT.that(tail).hasContentsInOrder("B", "C", "a");
+  }
+
+  public void testSkip_structurallyModifiedSkipAll() throws Exception {
+    Collection<String> set = newLinkedHashSet(asList("a", "b", "c"));
+    Iterable<String> tail = skip(set, 2);
+    set.remove("a");
+    set.remove("b");
+    assertFalse(tail.iterator().hasNext());
+  }
+
+  public void testSkip_structurallyModifiedSkipAllList() throws Exception {
+    List<String> list = newArrayList("a", "b", "c");
+    Iterable<String> tail = skip(list, 2);
+    list.subList(0, 2).clear();
+    assertTrue(Iterables.isEmpty(tail));
+  }
+
+  public void testSkip_illegalArgument() {
+    List<String> list = newArrayList("a", "b", "c");
+    try {
+      skip(list, -1);
+      fail();
+    } catch (IllegalArgumentException expected) {}
+  }
+
+  private void testGetOnAbc(Iterable<String> iterable) {
+    try {
+      Iterables.get(iterable, -1);
+      fail();
+    } catch (IndexOutOfBoundsException expected) {}
+    assertEquals("a", Iterables.get(iterable, 0));
+    assertEquals("b", Iterables.get(iterable, 1));
+    assertEquals("c", Iterables.get(iterable, 2));
+    try {
+      Iterables.get(iterable, 3);
+      fail();
+    } catch (IndexOutOfBoundsException nsee) {}
+    try {
+      Iterables.get(iterable, 4);
+      fail();
+    } catch (IndexOutOfBoundsException nsee) {}
+  }
+
+  private void testGetOnEmpty(Iterable<String> iterable) {
+    try {
+      Iterables.get(iterable, 0);
+      fail();
+    } catch (IndexOutOfBoundsException expected) {}
+  }
+
+  public void testGet_list() {
+    testGetOnAbc(newArrayList("a", "b", "c"));
+  }
+
+  public void testGet_emptyList() {
+    testGetOnEmpty(Collections.<String>emptyList());
+  }
+
+  public void testGet_sortedSet() {
+    testGetOnAbc(ImmutableSortedSet.of("b", "c", "a"));
+  }
+
+  public void testGet_emptySortedSet() {
+    testGetOnEmpty(ImmutableSortedSet.<String>of());
+  }
+
+  public void testGet_iterable() {
+    testGetOnAbc(ImmutableSet.of("a", "b", "c"));
+  }
+
+  public void testGet_emptyIterable() {
+    testGetOnEmpty(Sets.<String>newHashSet());
+  }
+
+  public void testGet_withDefault_negativePosition() {
+    try {
+      Iterables.get(newArrayList("a", "b", "c"), -1, "d");
+      fail();
+    } catch (IndexOutOfBoundsException expected) {
+      // pass
+    }
+  }
+
+  public void testGet_withDefault_simple() {
+    ArrayList<String> list = newArrayList("a", "b", "c");
+    assertEquals("b", Iterables.get(list, 1, "d"));
+  }
+
+  public void testGet_withDefault_iterable() {
+    Set<String> set = ImmutableSet.of("a", "b", "c");
+    assertEquals("b", Iterables.get(set, 1, "d"));
+  }
+
+  public void testGet_withDefault_last() {
+    ArrayList<String> list = newArrayList("a", "b", "c");
+    assertEquals("c", Iterables.get(list, 2, "d"));
+  }
+
+  public void testGet_withDefault_lastPlusOne() {
+    ArrayList<String> list = newArrayList("a", "b", "c");
+    assertEquals("d", Iterables.get(list, 3, "d"));
+  }
+
+  public void testGet_withDefault_doesntIterate() {
+    List<String> list = new DiesOnIteratorArrayList();
+    list.add("a");
+    assertEquals("a", Iterables.get(list, 0, "b"));
+  }
+
+  public void testGetFirst_withDefault_singleton() {
+    Iterable<String> iterable = Collections.singletonList("foo");
+    assertEquals("foo", Iterables.getFirst(iterable, "bar"));
+  }
+
+  public void testGetFirst_withDefault_empty() {
+    Iterable<String> iterable = Collections.emptyList();
+    assertEquals("bar", Iterables.getFirst(iterable, "bar"));
+  }
+
+  public void testGetFirst_withDefault_empty_null() {
+    Iterable<String> iterable = Collections.emptyList();
+    assertNull(Iterables.getFirst(iterable, null));
+  }
+
+  public void testGetFirst_withDefault_multiple() {
+    Iterable<String> iterable = asList("foo", "bar");
+    assertEquals("foo", Iterables.getFirst(iterable, "qux"));
+  }
+
+  public void testGetLast_list() {
+    List<String> list = newArrayList("a", "b", "c");
+    assertEquals("c", Iterables.getLast(list));
+  }
+
+  public void testGetLast_emptyList() {
+    List<String> list = Collections.emptyList();
+    try {
+      Iterables.getLast(list);
+      fail();
+    } catch (NoSuchElementException e) {}
+  }
+
+  public void testGetLast_sortedSet() {
+    SortedSet<String> sortedSet = ImmutableSortedSet.of("b", "c", "a");
+    assertEquals("c", Iterables.getLast(sortedSet));
+  }
+
+  public void testGetLast_withDefault_singleton() {
+    Iterable<String> iterable = Collections.singletonList("foo");
+    assertEquals("foo", Iterables.getLast(iterable, "bar"));
+  }
+
+  public void testGetLast_withDefault_empty() {
+    Iterable<String> iterable = Collections.emptyList();
+    assertEquals("bar", Iterables.getLast(iterable, "bar"));
+  }
+
+  public void testGetLast_withDefault_empty_null() {
+    Iterable<String> iterable = Collections.emptyList();
+    assertNull(Iterables.getLast(iterable, null));
+  }
+
+  public void testGetLast_withDefault_multiple() {
+    Iterable<String> iterable = asList("foo", "bar");
+    assertEquals("bar", Iterables.getLast(iterable, "qux"));
+  }
+
+  /**
+   * {@link ArrayList} extension that forbids the use of
+   * {@link Collection#iterator} for tests that need to prove that it isn't
+   * called.
+   */
+  private static class DiesOnIteratorArrayList extends ArrayList<String> {
+    /**
+     * @throws UnsupportedOperationException all the time
+     */
+    @Override
+    public Iterator<String> iterator() {
+      throw new UnsupportedOperationException();
+    }
+  }
+
+  public void testGetLast_withDefault_not_empty_list() {
+    // TODO: verify that this is the best testing strategy.
+    List<String> diesOnIteratorList = new DiesOnIteratorArrayList();
+    diesOnIteratorList.add("bar");
+
+    assertEquals("bar", Iterables.getLast(diesOnIteratorList, "qux"));
+  }
+
+  /**
+   * {@link TreeSet} extension that forbids the use of
+   * {@link Collection#iterator} for tests that need to prove that it isn't
+   * called.
+   */
+  private static final class DiesOnIteratorTreeSet extends TreeSet<String> {
+    /**
+     * @throws UnsupportedOperationException all the time
+     */
+    @Override
+    public Iterator<String> iterator() {
+      throw new UnsupportedOperationException();
+    }
+  }
+
+  public void testGetLast_withDefault_not_empty_sortedSet() {
+    // TODO: verify that this is the best testing strategy.
+    SortedSet<String> diesOnIteratorSortedSet = new DiesOnIteratorTreeSet();
+    diesOnIteratorSortedSet.add("bar");
+
+    assertEquals("bar", Iterables.getLast(diesOnIteratorSortedSet, "qux"));
+  }
+
+  public void testGetLast_emptySortedSet() {
+    SortedSet<String> sortedSet = ImmutableSortedSet.of();
+    try {
+      Iterables.getLast(sortedSet);
+      fail();
+    } catch (NoSuchElementException e) {}
+  }
+
+  public void testGetLast_iterable() {
+    Set<String> set = ImmutableSet.of("a", "b", "c");
+    assertEquals("c", Iterables.getLast(set));
+  }
+
+  public void testGetLast_emptyIterable() {
+    Set<String> set = Sets.newHashSet();
+    try {
+      Iterables.getLast(set);
+      fail();
+    } catch (NoSuchElementException e) {}
+  }
+
+  public void testUnmodifiableIterable() {
+    List<String> list = newArrayList("a", "b", "c");
+    Iterable<String> iterable = Iterables.unmodifiableIterable(list);
+    Iterator<String> iterator = iterable.iterator();
+    iterator.next();
+    try {
+      iterator.remove();
+      fail();
+    } catch (UnsupportedOperationException expected) {}
+    assertEquals("[a, b, c]", iterable.toString());
+  }
+
+  @SuppressWarnings("deprecation") // test of deprecated method
+  public void testUnmodifiableIterableShortCircuit() {
+    List<String> list = newArrayList("a", "b", "c");
+    Iterable<String> iterable = Iterables.unmodifiableIterable(list);
+    Iterable<String> iterable2 = Iterables.unmodifiableIterable(iterable);
+    assertSame(iterable, iterable2);
+    ImmutableList<String> immutableList = ImmutableList.of("a", "b", "c");
+    assertSame(immutableList, Iterables.unmodifiableIterable(immutableList));
+    assertSame(immutableList,
+        Iterables.unmodifiableIterable((List<String>) immutableList));
+  }
+
+  public void testFrequency_multiset() {
+    Multiset<String> multiset
+        = ImmutableMultiset.of("a", "b", "a", "c", "b", "a");
+    assertEquals(3, Iterables.frequency(multiset, "a"));
+    assertEquals(2, Iterables.frequency(multiset, "b"));
+    assertEquals(1, Iterables.frequency(multiset, "c"));
+    assertEquals(0, Iterables.frequency(multiset, "d"));
+    assertEquals(0, Iterables.frequency(multiset, 4.2));
+    assertEquals(0, Iterables.frequency(multiset, null));
+  }
+
+  public void testFrequency_set() {
+    Set<String> set = Sets.newHashSet("a", "b", "c");
+    assertEquals(1, Iterables.frequency(set, "a"));
+    assertEquals(1, Iterables.frequency(set, "b"));
+    assertEquals(1, Iterables.frequency(set, "c"));
+    assertEquals(0, Iterables.frequency(set, "d"));
+    assertEquals(0, Iterables.frequency(set, 4.2));
+    assertEquals(0, Iterables.frequency(set, null));
+  }
+
+  public void testFrequency_list() {
+    List<String> list = newArrayList("a", "b", "a", "c", "b", "a");
+    assertEquals(3, Iterables.frequency(list, "a"));
+    assertEquals(2, Iterables.frequency(list, "b"));
+    assertEquals(1, Iterables.frequency(list, "c"));
+    assertEquals(0, Iterables.frequency(list, "d"));
+    assertEquals(0, Iterables.frequency(list, 4.2));
+    assertEquals(0, Iterables.frequency(list, null));
+  }
+
+  public void testRemoveAll_collection() {
+    List<String> list = newArrayList("a", "b", "c", "d", "e");
+    assertTrue(Iterables.removeAll(list, newArrayList("b", "d", "f")));
+    assertEquals(newArrayList("a", "c", "e"), list);
+    assertFalse(Iterables.removeAll(list, newArrayList("x", "y", "z")));
+    assertEquals(newArrayList("a", "c", "e"), list);
+  }
+
+  public void testRemoveAll_iterable() {
+    final List<String> list = newArrayList("a", "b", "c", "d", "e");
+    Iterable<String> iterable = new Iterable<String>() {
+      @Override
+      public Iterator<String> iterator() {
+        return list.iterator();
+      }
+    };
+    assertTrue(Iterables.removeAll(iterable, newArrayList("b", "d", "f")));
+    assertEquals(newArrayList("a", "c", "e"), list);
+    assertFalse(Iterables.removeAll(iterable, newArrayList("x", "y", "z")));
+    assertEquals(newArrayList("a", "c", "e"), list);
+  }
+
+  public void testRetainAll_collection() {
+    List<String> list = newArrayList("a", "b", "c", "d", "e");
+    assertTrue(Iterables.retainAll(list, newArrayList("b", "d", "f")));
+    assertEquals(newArrayList("b", "d"), list);
+    assertFalse(Iterables.retainAll(list, newArrayList("b", "e", "d")));
+    assertEquals(newArrayList("b", "d"), list);
+  }
+
+  public void testRetainAll_iterable() {
+    final List<String> list = newArrayList("a", "b", "c", "d", "e");
+    Iterable<String> iterable = new Iterable<String>() {
+      @Override
+      public Iterator<String> iterator() {
+        return list.iterator();
+      }
+    };
+    assertTrue(Iterables.retainAll(iterable, newArrayList("b", "d", "f")));
+    assertEquals(newArrayList("b", "d"), list);
+    assertFalse(Iterables.retainAll(iterable, newArrayList("b", "e", "d")));
+    assertEquals(newArrayList("b", "d"), list);
+  }
+
+  public void testRemoveIf_randomAccess() {
+    List<String> list = newArrayList("a", "b", "c", "d", "e");
+    assertTrue(Iterables.removeIf(list,
+        new Predicate<String>() {
+          @Override
+          public boolean apply(String s) {
+            return s.equals("b") || s.equals("d") || s.equals("f");
+          }
+        }));
+    assertEquals(newArrayList("a", "c", "e"), list);
+    assertFalse(Iterables.removeIf(list,
+        new Predicate<String>() {
+          @Override
+          public boolean apply(String s) {
+            return s.equals("x") || s.equals("y") || s.equals("z");
+          }
+        }));
+    assertEquals(newArrayList("a", "c", "e"), list);
+  }
+
+  public void testRemoveIf_transformedList() {
+    List<String> list = newArrayList("1", "2", "3", "4", "5");
+    List<Integer> transformed = Lists.transform(list,
+        new Function<String, Integer>() {
+          @Override
+          public Integer apply(String s) {
+            return Integer.valueOf(s);
+          }
+        });
+    assertTrue(Iterables.removeIf(transformed,
+        new Predicate<Integer>() {
+          @Override
+          public boolean apply(Integer n) {
+            return (n & 1) == 0;  // isEven()
+          }
+        }));
+    assertEquals(newArrayList("1", "3", "5"), list);
+    assertFalse(Iterables.removeIf(transformed,
+        new Predicate<Integer>() {
+          @Override
+          public boolean apply(Integer n) {
+            return (n & 1) == 0;  // isEven()
+          }
+        }));
+    assertEquals(newArrayList("1", "3", "5"), list);
+  }
+
+  public void testRemoveIf_noRandomAccess() {
+    List<String> list = Lists.newLinkedList(asList("a", "b", "c", "d", "e"));
+    assertTrue(Iterables.removeIf(list,
+        new Predicate<String>() {
+          @Override
+          public boolean apply(String s) {
+            return s.equals("b") || s.equals("d") || s.equals("f");
+          }
+        }));
+    assertEquals(newArrayList("a", "c", "e"), list);
+    assertFalse(Iterables.removeIf(list,
+        new Predicate<String>() {
+          @Override
+          public boolean apply(String s) {
+            return s.equals("x") || s.equals("y") || s.equals("z");
+          }
+        }));
+    assertEquals(newArrayList("a", "c", "e"), list);
+  }
+
+  // The Maps returned by Maps.filterEntries(), Maps.filterKeys(), and
+  // Maps.filterValues() are not tested with removeIf() since Maps are not
+  // Iterable.  Those returned by Iterators.filter() and Iterables.filter()
+  // are not tested because they are unmodifiable.
+
+  public void testIterableWithToString() {
+    assertEquals("[]", create().toString());
+    assertEquals("[a]", create("a").toString());
+    assertEquals("[a, b, c]", create("a", "b", "c").toString());
+    assertEquals("[c, a, a]", create("c", "a", "a").toString());
+  }
+
+  public void testIterableWithToStringNull() {
+    assertEquals("[null]", create((String) null).toString());
+    assertEquals("[null, null]", create(null, null).toString());
+    assertEquals("[, null, a]", create("", null, "a").toString());
+  }
+
+  /** Returns a new iterable over the specified strings. */
+  private static Iterable<String> create(String... strings) {
+    final List<String> list = asList(strings);
+    return new Iterables.IterableWithToString<String>() {
+      @Override
+      public Iterator<String> iterator() {
+        return list.iterator();
+      }
+    };
+  }
+
+  public void testConsumingIterable() {
+    // Test data
+    List<String> list = Lists.newArrayList(asList("a", "b"));
+
+    // Test & Verify
+    Iterable<String> consumingIterable = Iterables.consumingIterable(list);
+    Iterator<String> consumingIterator = consumingIterable.iterator();
+
+    ASSERT.that(list).hasContentsInOrder("a", "b");
+
+    assertTrue(consumingIterator.hasNext());
+    ASSERT.that(list).hasContentsInOrder("a", "b");
+    assertEquals("a", consumingIterator.next());
+    ASSERT.that(list).hasContentsInOrder("b");
+
+    assertTrue(consumingIterator.hasNext());
+    assertEquals("b", consumingIterator.next());
+    ASSERT.that(list).isEmpty();
+
+    assertFalse(consumingIterator.hasNext());
+  }
+
+  @GwtIncompatible("?")
+  // TODO: Figure out why this is failing in GWT.
+  public void testConsumingIterable_duelingIterators() {
+    // Test data
+    List<String> list = Lists.newArrayList(asList("a", "b"));
+
+    // Test & Verify
+    Iterator<String> i1 = Iterables.consumingIterable(list).iterator();
+    Iterator<String> i2 = Iterables.consumingIterable(list).iterator();
+
+    i1.next();
+    try {
+      i2.next();
+      fail("Concurrent modification should throw an exception.");
+    } catch (ConcurrentModificationException cme) {
+      // Pass
+    }
+  }
+
+  public void testConsumingIterable_queue_iterator() {
+    final List<Integer> items = ImmutableList.of(4, 8, 15, 16, 23, 42);
+    new IteratorTester<Integer>(
+        3,
+        UNMODIFIABLE,
+        items,
+        IteratorTester.KnownOrder.KNOWN_ORDER) {
+      @Override protected Iterator<Integer> newTargetIterator() {
+        return Iterables.consumingIterable(Lists.newLinkedList(items))
+            .iterator();
+      }
+    }.test();
+  }
+
+  public void testConsumingIterable_queue_removesFromQueue() {
+    Queue<Integer> queue = Lists.newLinkedList(asList(5, 14));
+
+    Iterator<Integer> consumingIterator =
+        Iterables.consumingIterable(queue).iterator();
+
+    assertEquals(5, queue.peek().intValue());
+    assertEquals(5, consumingIterator.next().intValue());
+
+    assertEquals(14, queue.peek().intValue());
+    assertTrue(consumingIterator.hasNext());
+    assertTrue(queue.isEmpty());
+  }
+
+  public void testConsumingIterable_noIteratorCall() {
+    Queue<Integer> queue =
+        new UnIterableQueue<Integer>(Lists.newLinkedList(asList(5, 14)));
+
+    Iterator<Integer> consumingIterator =
+        Iterables.consumingIterable(queue).iterator();
+    /*
+     * Make sure that we can get an element off without calling
+     * UnIterableQueue.iterator().
+     */
+    assertEquals(5, consumingIterator.next().intValue());
+  }
+
+  private static class UnIterableQueue<T> extends ForwardingQueue<T> {
+    private Queue<T> queue;
+
+    UnIterableQueue(Queue<T> queue) {
+      this.queue = queue;
+    }
+
+    @Override public Iterator<T> iterator() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override protected Queue<T> delegate() {
+      return queue;
+    }
+  }
+
+  public void testIndexOf_empty() {
+    List<String> list = new ArrayList<String>();
+    assertEquals(-1, Iterables.indexOf(list, Predicates.equalTo("")));
+  }
+
+  public void testIndexOf_oneElement() {
+    List<String> list = Lists.newArrayList("bob");
+    assertEquals(0, Iterables.indexOf(list, Predicates.equalTo("bob")));
+    assertEquals(-1, Iterables.indexOf(list, Predicates.equalTo("jack")));
+  }
+
+  public void testIndexOf_twoElements() {
+    List<String> list = Lists.newArrayList("mary", "bob");
+    assertEquals(0, Iterables.indexOf(list, Predicates.equalTo("mary")));
+    assertEquals(1, Iterables.indexOf(list, Predicates.equalTo("bob")));
+    assertEquals(-1, Iterables.indexOf(list, Predicates.equalTo("jack")));
+  }
+
+  public void testIndexOf_withDuplicates() {
+    List<String> list =
+        Lists.newArrayList("mary", "bob", "bob", "bob", "sam");
+    assertEquals(0, Iterables.indexOf(list, Predicates.equalTo("mary")));
+    assertEquals(1, Iterables.indexOf(list, Predicates.equalTo("bob")));
+    assertEquals(4, Iterables.indexOf(list, Predicates.equalTo("sam")));
+    assertEquals(-1, Iterables.indexOf(list, Predicates.equalTo("jack")));
+  }
+
+  private static final Predicate<CharSequence> STARTSWITH_A =
+      new Predicate<CharSequence>() {
+        @Override public boolean apply(CharSequence input) {
+          return (input.length() > 0) && (input.charAt(0) == 'a');
+        }
+      };
+
+  public void testIndexOf_genericPredicate() {
+    List<CharSequence> sequences = Lists.newArrayList();
+    sequences.add("bob");
+    sequences.add(new StringBuilder("charlie"));
+    sequences.add(new StringBuffer("henry"));
+    sequences.add(new StringBuilder("apple"));
+    sequences.add("lemon");
+
+    assertEquals(3, Iterables.indexOf(sequences, STARTSWITH_A));
+  }
+
+  public void testIndexOf_genericPredicate2() {
+    List<String> sequences =
+        Lists.newArrayList("bob", "charlie", "henry", "apple", "lemon");
+    assertEquals(3, Iterables.indexOf(sequences, STARTSWITH_A));
+  }
+
+  public void testMergeSorted_empty() {
+    // Setup
+    Iterable<Iterable<Integer>> elements = ImmutableList.of();
+
+    // Test
+    Iterable<Integer> iterable =
+        Iterables.mergeSorted(elements, Ordering.natural());
+
+    // Verify
+    Iterator<Integer> iterator = iterable.iterator();
+    assertFalse(iterator.hasNext());
+    try {
+      iterator.next();
+      fail("next() on empty iterator should throw NoSuchElementException");
+    } catch (NoSuchElementException e) {
+      // Huzzah!
+    }
+  }
+
+  public void testMergeSorted_single_empty() {
+    // Setup
+    Iterable<Integer> iterable0 = ImmutableList.of();
+    Iterable<Iterable<Integer>> iterables = ImmutableList.of(iterable0);
+
+    // Test & Verify
+    verifyMergeSorted(iterables, ImmutableList.<Integer>of());
+  }
+
+  public void testMergeSorted_single() {
+    // Setup
+    Iterable<Integer> iterable0 = ImmutableList.of(1, 2, 3);
+    Iterable<Iterable<Integer>> iterables = ImmutableList.of(iterable0);
+
+    // Test & Verify
+    verifyMergeSorted(iterables, iterable0);
+  }
+
+  public void testMergeSorted_pyramid() {
+    List<Iterable<Integer>> iterables = Lists.newLinkedList();
+    List<Integer> allIntegers = Lists.newArrayList();
+
+    // Creates iterators like: {{}, {0}, {0, 1}, {0, 1, 2}, ...}
+    for (int i = 0; i < 10; i++) {
+      List<Integer> list = Lists.newLinkedList();
+      for (int j = 0; j < i; j++) {
+        list.add(j);
+        allIntegers.add(j);
+      }
+      iterables.add(Ordering.natural().sortedCopy(list));
+    }
+
+    verifyMergeSorted(iterables, allIntegers);
+  }
+
+  // Like the pyramid, but creates more unique values, along with repeated ones.
+  public void testMergeSorted_skipping_pyramid() {
+    List<Iterable<Integer>> iterables = Lists.newLinkedList();
+    List<Integer> allIntegers = Lists.newArrayList();
+
+    for (int i = 0; i < 20; i++) {
+      List<Integer> list = Lists.newLinkedList();
+      for (int j = 0; j < i; j++) {
+        list.add(j * i);
+        allIntegers.add(j * i);
+      }
+      iterables.add(Ordering.natural().sortedCopy(list));
+    }
+
+    verifyMergeSorted(iterables, allIntegers);
+  }
+
+  private void verifyMergeSorted(Iterable<Iterable<Integer>> iterables,
+      Iterable<Integer> unsortedExpected) {
+    Iterable<Integer> expected =
+        Ordering.natural().sortedCopy(unsortedExpected);
+
+    Iterable<Integer> mergedIterator =
+        Iterables.mergeSorted(iterables, Ordering.natural());
+
+    assertEquals(Lists.newLinkedList(expected),
+        Lists.newLinkedList(mergedIterator));
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/IteratorsTest.java b/guava-tests/test/com/google/common/collect/IteratorsTest.java
new file mode 100644
index 0000000..60f3a3a
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/IteratorsTest.java
@@ -0,0 +1,1543 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.collect.Iterators.get;
+import static com.google.common.collect.Iterators.getLast;
+import static com.google.common.collect.Iterators.skip;
+import static com.google.common.collect.Lists.newArrayList;
+import static com.google.common.collect.testing.IteratorFeature.MODIFIABLE;
+import static com.google.common.collect.testing.IteratorFeature.UNMODIFIABLE;
+import static java.util.Arrays.asList;
+import static java.util.Collections.singleton;
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.base.Function;
+import com.google.common.base.Predicate;
+import com.google.common.base.Predicates;
+import com.google.common.collect.testing.IteratorFeature;
+import com.google.common.collect.testing.IteratorTester;
+import com.google.common.collect.testing.ListTestSuiteBuilder;
+import com.google.common.collect.testing.TestStringListGenerator;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.ListFeature;
+import com.google.common.testing.NullPointerTester;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.ConcurrentModificationException;
+import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.List;
+import java.util.NoSuchElementException;
+import java.util.RandomAccess;
+import java.util.Set;
+import java.util.Vector;
+
+/**
+ * Unit test for {@code Iterators}.
+ *
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible(emulated = true)
+public class IteratorsTest extends TestCase {
+
+  @GwtIncompatible("suite")
+  public static Test suite() {
+    TestSuite suite = new TestSuite(IteratorsTest.class.getSimpleName());
+    suite.addTest(testsForRemoveAllAndRetainAll());
+    suite.addTestSuite(IteratorsTest.class);
+    return suite;
+  }
+
+  public void testEmptyIterator() {
+    Iterator<String> iterator = Iterators.emptyIterator();
+    assertFalse(iterator.hasNext());
+    try {
+      iterator.next();
+      fail("no exception thrown");
+    } catch (NoSuchElementException expected) {
+    }
+    try {
+      iterator.remove();
+      fail("no exception thrown");
+    } catch (UnsupportedOperationException expected) {
+    }
+  }
+
+  public void testSize0() {
+    Iterator<String> iterator = Iterators.emptyIterator();
+    assertEquals(0, Iterators.size(iterator));
+  }
+
+  public void testSize1() {
+    Iterator<Integer> iterator = Collections.singleton(0).iterator();
+    assertEquals(1, Iterators.size(iterator));
+  }
+
+  public void testSize_partiallyConsumed() {
+    Iterator<Integer> iterator = asList(1, 2, 3, 4, 5).iterator();
+    iterator.next();
+    iterator.next();
+    assertEquals(3, Iterators.size(iterator));
+  }
+
+  public void test_contains_nonnull_yes() {
+    Iterator<String> set = asList("a", null, "b").iterator();
+    assertTrue(Iterators.contains(set, "b"));
+  }
+
+  public void test_contains_nonnull_no() {
+    Iterator<String> set = asList("a", "b").iterator();
+    assertFalse(Iterators.contains(set, "c"));
+  }
+
+  public void test_contains_null_yes() {
+    Iterator<String> set = asList("a", null, "b").iterator();
+    assertTrue(Iterators.contains(set, null));
+  }
+
+  public void test_contains_null_no() {
+    Iterator<String> set = asList("a", "b").iterator();
+    assertFalse(Iterators.contains(set, null));
+  }
+
+  public void testGetOnlyElement_noDefault_valid() {
+    Iterator<String> iterator = Collections.singletonList("foo").iterator();
+    assertEquals("foo", Iterators.getOnlyElement(iterator));
+  }
+
+  public void testGetOnlyElement_noDefault_empty() {
+    Iterator<String> iterator = Iterators.emptyIterator();
+    try {
+      Iterators.getOnlyElement(iterator);
+      fail();
+    } catch (NoSuchElementException expected) {
+    }
+  }
+
+  public void testGetOnlyElement_noDefault_moreThanOneLessThanFiveElements() {
+    Iterator<String> iterator = asList("one", "two").iterator();
+    try {
+      Iterators.getOnlyElement(iterator);
+      fail();
+    } catch (IllegalArgumentException expected) {
+      assertEquals("expected one element but was: <one, two>",
+                   expected.getMessage());
+    }
+  }
+
+  public void testGetOnlyElement_noDefault_fiveElements() {
+    Iterator<String> iterator =
+        asList("one", "two", "three", "four", "five").iterator();
+    try {
+      Iterators.getOnlyElement(iterator);
+      fail();
+    } catch (IllegalArgumentException expected) {
+      assertEquals("expected one element but was: "
+                   + "<one, two, three, four, five>",
+                   expected.getMessage());
+    }
+  }
+
+  public void testGetOnlyElement_noDefault_moreThanFiveElements() {
+    Iterator<String> iterator =
+        asList("one", "two", "three", "four", "five", "six").iterator();
+    try {
+      Iterators.getOnlyElement(iterator);
+      fail();
+    } catch (IllegalArgumentException expected) {
+      assertEquals("expected one element but was: "
+                   + "<one, two, three, four, five, ...>",
+                   expected.getMessage());
+    }
+  }
+
+  public void testGetOnlyElement_withDefault_singleton() {
+    Iterator<String> iterator = Collections.singletonList("foo").iterator();
+    assertEquals("foo", Iterators.getOnlyElement(iterator, "bar"));
+  }
+
+  public void testGetOnlyElement_withDefault_empty() {
+    Iterator<String> iterator = Iterators.emptyIterator();
+    assertEquals("bar", Iterators.getOnlyElement(iterator, "bar"));
+  }
+
+  public void testGetOnlyElement_withDefault_empty_null() {
+    Iterator<String> iterator = Iterators.emptyIterator();
+    assertNull(Iterators.getOnlyElement(iterator, null));
+  }
+
+  public void testGetOnlyElement_withDefault_two() {
+    Iterator<String> iterator = asList("foo", "bar").iterator();
+    try {
+      Iterators.getOnlyElement(iterator, "x");
+      fail();
+    } catch (IllegalArgumentException expected) {
+      assertEquals("expected one element but was: <foo, bar>",
+                   expected.getMessage());
+    }
+  }
+
+  @GwtIncompatible("Iterators.toArray(Iterator, Class)")
+  public void testToArrayEmpty() {
+    Iterator<String> iterator = Collections.<String>emptyList().iterator();
+    String[] array = Iterators.toArray(iterator, String.class);
+    assertTrue(Arrays.equals(new String[0], array));
+  }
+
+  @GwtIncompatible("Iterators.toArray(Iterator, Class)")
+  public void testToArraySingleton() {
+    Iterator<String> iterator = Collections.singletonList("a").iterator();
+    String[] array = Iterators.toArray(iterator, String.class);
+    assertTrue(Arrays.equals(new String[] { "a" }, array));
+  }
+
+  @GwtIncompatible("Iterators.toArray(Iterator, Class)")
+  public void testToArray() {
+    String[] sourceArray = new String[] {"a", "b", "c"};
+    Iterator<String> iterator = asList(sourceArray).iterator();
+    String[] newArray = Iterators.toArray(iterator, String.class);
+    assertTrue(Arrays.equals(sourceArray, newArray));
+  }
+
+  public void testFilterSimple() {
+    Iterator<String> unfiltered = Lists.newArrayList("foo", "bar").iterator();
+    Iterator<String> filtered = Iterators.filter(unfiltered,
+                                                 Predicates.equalTo("foo"));
+    List<String> expected = Collections.singletonList("foo");
+    List<String> actual = Lists.newArrayList(filtered);
+    assertEquals(expected, actual);
+  }
+
+  public void testFilterNoMatch() {
+    Iterator<String> unfiltered = Lists.newArrayList("foo", "bar").iterator();
+    Iterator<String> filtered = Iterators.filter(unfiltered,
+                                                 Predicates.alwaysFalse());
+    List<String> expected = Collections.emptyList();
+    List<String> actual = Lists.newArrayList(filtered);
+    assertEquals(expected, actual);
+  }
+
+  public void testFilterMatchAll() {
+    Iterator<String> unfiltered = Lists.newArrayList("foo", "bar").iterator();
+    Iterator<String> filtered = Iterators.filter(unfiltered,
+                                                 Predicates.alwaysTrue());
+    List<String> expected = Lists.newArrayList("foo", "bar");
+    List<String> actual = Lists.newArrayList(filtered);
+    assertEquals(expected, actual);
+  }
+
+  public void testFilterNothing() {
+    Iterator<String> unfiltered = Collections.<String>emptyList().iterator();
+    Iterator<String> filtered = Iterators.filter(unfiltered,
+        new Predicate<String>() {
+          @Override
+          public boolean apply(String s) {
+            fail("Should never be evaluated");
+            return false;
+          }
+        });
+
+    List<String> expected = Collections.emptyList();
+    List<String> actual = Lists.newArrayList(filtered);
+    assertEquals(expected, actual);
+  }
+
+  @GwtIncompatible("unreasonable slow")
+  public void testFilterUsingIteratorTester() {
+    final List<Integer> list = asList(1, 2, 3, 4, 5);
+    final Predicate<Integer> isEven = new Predicate<Integer>() {
+      @Override
+      public boolean apply(Integer integer) {
+        return integer % 2 == 0;
+      }
+    };
+    new IteratorTester<Integer>(5, UNMODIFIABLE, asList(2, 4),
+        IteratorTester.KnownOrder.KNOWN_ORDER) {
+      @Override protected Iterator<Integer> newTargetIterator() {
+        return Iterators.filter(list.iterator(), isEven);
+      }
+    }.test();
+  }
+
+  public void testAny() {
+    List<String> list = Lists.newArrayList();
+    Predicate<String> predicate = Predicates.equalTo("pants");
+
+    assertFalse(Iterators.any(list.iterator(), predicate));
+    list.add("cool");
+    assertFalse(Iterators.any(list.iterator(), predicate));
+    list.add("pants");
+    assertTrue(Iterators.any(list.iterator(), predicate));
+  }
+
+  public void testAll() {
+    List<String> list = Lists.newArrayList();
+    Predicate<String> predicate = Predicates.equalTo("cool");
+
+    assertTrue(Iterators.all(list.iterator(), predicate));
+    list.add("cool");
+    assertTrue(Iterators.all(list.iterator(), predicate));
+    list.add("pants");
+    assertFalse(Iterators.all(list.iterator(), predicate));
+  }
+
+  public void testFind_firstElement() {
+    Iterable<String> list = Lists.newArrayList("cool", "pants");
+    Iterator<String> iterator = list.iterator();
+    assertEquals("cool", Iterators.find(iterator, Predicates.equalTo("cool")));
+    assertEquals("pants", iterator.next());
+  }
+
+  public void testFind_lastElement() {
+    Iterable<String> list = Lists.newArrayList("cool", "pants");
+    Iterator<String> iterator = list.iterator();
+    assertEquals("pants", Iterators.find(iterator,
+        Predicates.equalTo("pants")));
+    assertFalse(iterator.hasNext());
+  }
+
+  public void testFind_notPresent() {
+    Iterable<String> list = Lists.newArrayList("cool", "pants");
+    Iterator<String> iterator = list.iterator();
+    try {
+      Iterators.find(iterator, Predicates.alwaysFalse());
+      fail();
+    } catch (NoSuchElementException e) {
+    }
+    assertFalse(iterator.hasNext());
+  }
+
+  public void testFind_matchAlways() {
+    Iterable<String> list = Lists.newArrayList("cool", "pants");
+    Iterator<String> iterator = list.iterator();
+    assertEquals("cool", Iterators.find(iterator, Predicates.alwaysTrue()));
+  }
+
+  public void testFind_withDefault_first() {
+    Iterable<String> list = Lists.newArrayList("cool", "pants");
+    Iterator<String> iterator = list.iterator();
+    assertEquals("cool",
+        Iterators.find(iterator, Predicates.equalTo("cool"), "woot"));
+    assertEquals("pants", iterator.next());
+  }
+
+  public void testFind_withDefault_last() {
+    Iterable<String> list = Lists.newArrayList("cool", "pants");
+    Iterator<String> iterator = list.iterator();
+    assertEquals("pants",
+        Iterators.find(iterator, Predicates.equalTo("pants"), "woot"));
+    assertFalse(iterator.hasNext());
+  }
+
+  public void testFind_withDefault_notPresent() {
+    Iterable<String> list = Lists.newArrayList("cool", "pants");
+    Iterator<String> iterator = list.iterator();
+    assertEquals("woot",
+        Iterators.find(iterator, Predicates.alwaysFalse(), "woot"));
+    assertFalse(iterator.hasNext());
+  }
+
+  public void testFind_withDefault_notPresent_nullReturn() {
+    Iterable<String> list = Lists.newArrayList("cool", "pants");
+    Iterator<String> iterator = list.iterator();
+    assertNull(
+        Iterators.find(iterator, Predicates.alwaysFalse(), null));
+    assertFalse(iterator.hasNext());
+  }
+
+  public void testFind_withDefault_matchAlways() {
+    Iterable<String> list = Lists.newArrayList("cool", "pants");
+    Iterator<String> iterator = list.iterator();
+    assertEquals("cool",
+        Iterators.find(iterator, Predicates.alwaysTrue(), "woot"));
+    assertEquals("pants", iterator.next());
+  }
+
+  public void testTryFind_firstElement() {
+    Iterable<String> list = Lists.newArrayList("cool", "pants");
+    Iterator<String> iterator = list.iterator();
+    assertEquals("cool",
+        Iterators.tryFind(iterator, Predicates.equalTo("cool")).get());
+  }
+
+  public void testTryFind_lastElement() {
+    Iterable<String> list = Lists.newArrayList("cool", "pants");
+    Iterator<String> iterator = list.iterator();
+    assertEquals("pants",
+        Iterators.tryFind(iterator, Predicates.equalTo("pants")).get());
+  }
+
+  public void testTryFind_alwaysTrue() {
+    Iterable<String> list = Lists.newArrayList("cool", "pants");
+    Iterator<String> iterator = list.iterator();
+    assertEquals("cool",
+        Iterators.tryFind(iterator, Predicates.alwaysTrue()).get());
+  }
+
+  public void testTryFind_alwaysFalse_orDefault() {
+    Iterable<String> list = Lists.newArrayList("cool", "pants");
+    Iterator<String> iterator = list.iterator();
+    assertEquals("woot",
+        Iterators.tryFind(iterator, Predicates.alwaysFalse()).or("woot"));
+    assertFalse(iterator.hasNext());
+  }
+
+  public void testTryFind_alwaysFalse_isPresent() {
+    Iterable<String> list = Lists.newArrayList("cool", "pants");
+    Iterator<String> iterator = list.iterator();
+    assertFalse(
+        Iterators.tryFind(iterator, Predicates.alwaysFalse()).isPresent());
+    assertFalse(iterator.hasNext());
+  }
+
+  public void testTransform() {
+    Iterator<String> input = asList("1", "2", "3").iterator();
+    Iterator<Integer> result = Iterators.transform(input,
+        new Function<String, Integer>() {
+          @Override
+          public Integer apply(String from) {
+            return Integer.valueOf(from);
+          }
+        });
+
+    List<Integer> actual = Lists.newArrayList(result);
+    List<Integer> expected = asList(1, 2, 3);
+    assertEquals(expected, actual);
+  }
+
+  public void testTransformRemove() {
+    List<String> list = Lists.newArrayList("1", "2", "3");
+    Iterator<String> input = list.iterator();
+    Iterator<Integer> iterator = Iterators.transform(input,
+        new Function<String, Integer>() {
+          @Override
+          public Integer apply(String from) {
+            return Integer.valueOf(from);
+          }
+        });
+
+    assertEquals(Integer.valueOf(1), iterator.next());
+    assertEquals(Integer.valueOf(2), iterator.next());
+    iterator.remove();
+    assertEquals(asList("1", "3"), list);
+  }
+
+  public void testPoorlyBehavedTransform() {
+    Iterator<String> input = asList("1", null, "3").iterator();
+    Iterator<Integer> result = Iterators.transform(input,
+        new Function<String, Integer>() {
+          @Override
+          public Integer apply(String from) {
+            return Integer.valueOf(from);
+          }
+        });
+
+    result.next();
+    try {
+      result.next();
+      fail("Expected NFE");
+    } catch (NumberFormatException nfe) {
+      // Expected to fail.
+    }
+  }
+
+  public void testNullFriendlyTransform() {
+    Iterator<Integer> input = asList(1, 2, null, 3).iterator();
+    Iterator<String> result = Iterators.transform(input,
+        new Function<Integer, String>() {
+          @Override
+          public String apply(Integer from) {
+            return String.valueOf(from);
+          }
+        });
+
+    List<String> actual = Lists.newArrayList(result);
+    List<String> expected = asList("1", "2", "null", "3");
+    assertEquals(expected, actual);
+  }
+
+  public void testCycleOfEmpty() {
+    // "<String>" for javac 1.5.
+    Iterator<String> cycle = Iterators.<String>cycle();
+    assertFalse(cycle.hasNext());
+  }
+
+  public void testCycleOfOne() {
+    Iterator<String> cycle = Iterators.cycle("a");
+    for (int i = 0; i < 3; i++) {
+      assertTrue(cycle.hasNext());
+      assertEquals("a", cycle.next());
+    }
+  }
+
+  public void testCycleOfOneWithRemove() {
+    Iterable<String> iterable = Lists.newArrayList("a");
+    Iterator<String> cycle = Iterators.cycle(iterable);
+    assertTrue(cycle.hasNext());
+    assertEquals("a", cycle.next());
+    cycle.remove();
+    assertEquals(Collections.emptyList(), iterable);
+    assertFalse(cycle.hasNext());
+  }
+
+  public void testCycleOfTwo() {
+    Iterator<String> cycle = Iterators.cycle("a", "b");
+    for (int i = 0; i < 3; i++) {
+      assertTrue(cycle.hasNext());
+      assertEquals("a", cycle.next());
+      assertTrue(cycle.hasNext());
+      assertEquals("b", cycle.next());
+    }
+  }
+
+  public void testCycleOfTwoWithRemove() {
+    Iterable<String> iterable = Lists.newArrayList("a", "b");
+    Iterator<String> cycle = Iterators.cycle(iterable);
+    assertTrue(cycle.hasNext());
+    assertEquals("a", cycle.next());
+    assertTrue(cycle.hasNext());
+    assertEquals("b", cycle.next());
+    assertTrue(cycle.hasNext());
+    assertEquals("a", cycle.next());
+    cycle.remove();
+    assertEquals(Collections.singletonList("b"), iterable);
+    assertTrue(cycle.hasNext());
+    assertEquals("b", cycle.next());
+    assertTrue(cycle.hasNext());
+    assertEquals("b", cycle.next());
+    cycle.remove();
+    assertEquals(Collections.emptyList(), iterable);
+    assertFalse(cycle.hasNext());
+  }
+
+  public void testCycleRemoveWithoutNext() {
+    Iterator<String> cycle = Iterators.cycle("a", "b");
+    assertTrue(cycle.hasNext());
+    try {
+      cycle.remove();
+      fail("no exception thrown");
+    } catch (IllegalStateException expected) {
+    }
+  }
+
+  public void testCycleRemoveSameElementTwice() {
+    Iterator<String> cycle = Iterators.cycle("a", "b");
+    cycle.next();
+    cycle.remove();
+    try {
+      cycle.remove();
+      fail("no exception thrown");
+    } catch (IllegalStateException expected) {
+    }
+  }
+
+  public void testCycleWhenRemoveIsNotSupported() {
+    Iterable<String> iterable = asList("a", "b");
+    Iterator<String> cycle = Iterators.cycle(iterable);
+    cycle.next();
+    try {
+      cycle.remove();
+      fail("no exception thrown");
+    } catch (UnsupportedOperationException expected) {
+    }
+  }
+
+  public void testCycleRemoveAfterHasNext() {
+    Iterable<String> iterable = Lists.newArrayList("a");
+    Iterator<String> cycle = Iterators.cycle(iterable);
+    assertTrue(cycle.hasNext());
+    assertEquals("a", cycle.next());
+    assertTrue(cycle.hasNext());
+    cycle.remove();
+    assertEquals(Collections.emptyList(), iterable);
+    assertFalse(cycle.hasNext());
+  }
+
+  public void testCycleNoSuchElementException() {
+    Iterable<String> iterable = Lists.newArrayList("a");
+    Iterator<String> cycle = Iterators.cycle(iterable);
+    assertTrue(cycle.hasNext());
+    assertEquals("a", cycle.next());
+    cycle.remove();
+    assertFalse(cycle.hasNext());
+    try {
+      cycle.next();
+      fail();
+    } catch (NoSuchElementException expected) {}
+  }
+
+  @GwtIncompatible("unreasonable slow")
+  public void testCycleUsingIteratorTester() {
+    new IteratorTester<Integer>(5, UNMODIFIABLE, asList(1, 2, 1, 2, 1,
+        2, 1, 2, 1, 2, 1, 2), IteratorTester.KnownOrder.KNOWN_ORDER) {
+      @Override protected Iterator<Integer> newTargetIterator() {
+        return Iterators.cycle(asList(1, 2));
+      }
+    }.test();
+  }
+
+  @GwtIncompatible("slow (~5s)")
+  public void testConcatNoIteratorsYieldsEmpty() {
+    new EmptyIteratorTester() {
+      @SuppressWarnings("unchecked")
+      @Override protected Iterator<Integer> newTargetIterator() {
+        return Iterators.concat();
+      }
+    }.test();
+  }
+
+  @GwtIncompatible("slow (~5s)")
+  public void testConcatOneEmptyIteratorYieldsEmpty() {
+    new EmptyIteratorTester() {
+      @SuppressWarnings("unchecked")
+      @Override protected Iterator<Integer> newTargetIterator() {
+        return Iterators.concat(iterateOver());
+      }
+    }.test();
+  }
+
+  @GwtIncompatible("slow (~5s)")
+  public void testConcatMultipleEmptyIteratorsYieldsEmpty() {
+    new EmptyIteratorTester() {
+      @Override protected Iterator<Integer> newTargetIterator() {
+        return Iterators.concat(iterateOver(), iterateOver());
+      }
+    }.test();
+  }
+
+  @GwtIncompatible("slow (~3s)")
+  public void testConcatSingletonYieldsSingleton() {
+    new SingletonIteratorTester() {
+      @SuppressWarnings("unchecked")
+      @Override protected Iterator<Integer> newTargetIterator() {
+        return Iterators.concat(iterateOver(1));
+      }
+    }.test();
+  }
+
+  @GwtIncompatible("slow (~5s)")
+  public void testConcatEmptyAndSingletonAndEmptyYieldsSingleton() {
+    new SingletonIteratorTester() {
+      @Override protected Iterator<Integer> newTargetIterator() {
+        return Iterators.concat(iterateOver(), iterateOver(1), iterateOver());
+      }
+    }.test();
+  }
+
+  @GwtIncompatible("fairly slow (~40s)")
+  public void testConcatSingletonAndSingletonYieldsDoubleton() {
+    new DoubletonIteratorTester() {
+      @Override protected Iterator<Integer> newTargetIterator() {
+        return Iterators.concat(iterateOver(1), iterateOver(2));
+      }
+    }.test();
+  }
+
+  @GwtIncompatible("fairly slow (~40s)")
+  public void testConcatSingletonAndSingletonWithEmptiesYieldsDoubleton() {
+    new DoubletonIteratorTester() {
+      @Override protected Iterator<Integer> newTargetIterator() {
+        return Iterators.concat(
+            iterateOver(1), iterateOver(), iterateOver(), iterateOver(2));
+      }
+    }.test();
+  }
+
+  @GwtIncompatible("fairly slow (~50s)")
+  public void testConcatUnmodifiable() {
+    new IteratorTester<Integer>(5, UNMODIFIABLE, asList(1, 2),
+        IteratorTester.KnownOrder.KNOWN_ORDER) {
+      @Override protected Iterator<Integer> newTargetIterator() {
+        return Iterators.concat(asList(1).iterator(),
+            Arrays.<Integer>asList().iterator(), asList(2).iterator());
+      }
+    }.test();
+  }
+
+  /**
+   * Illustrates the somewhat bizarre behavior when a null is passed in.
+   */
+  public void testConcatContainingNull() {
+    @SuppressWarnings("unchecked")
+    Iterator<Iterator<Integer>> input
+        = asList(iterateOver(1, 2), null, iterateOver(3)).iterator();
+    Iterator<Integer> result = Iterators.concat(input);
+    assertEquals(1, (int) result.next());
+    assertEquals(2, (int) result.next());
+    try {
+      result.hasNext();
+      fail("no exception thrown");
+    } catch (NullPointerException e) {
+    }
+    try {
+      result.next();
+      fail("no exception thrown");
+    } catch (NullPointerException e) {
+    }
+    // There is no way to get "through" to the 3.  Buh-bye
+  }
+
+  @SuppressWarnings("unchecked")
+  public void testConcatVarArgsContainingNull() {
+    try {
+      Iterators.concat(iterateOver(1, 2), null, iterateOver(3), iterateOver(4),
+          iterateOver(5));
+      fail("no exception thrown");
+    } catch (NullPointerException e) {
+    }
+  }
+
+  public void testAddAllWithEmptyIterator() {
+    List<String> alreadyThere = Lists.newArrayList("already", "there");
+
+    boolean changed = Iterators.addAll(alreadyThere,
+                                       Iterators.<String>emptyIterator());
+    ASSERT.that(alreadyThere).hasContentsInOrder("already", "there");
+    assertFalse(changed);
+  }
+
+  public void testAddAllToList() {
+    List<String> alreadyThere = Lists.newArrayList("already", "there");
+    List<String> freshlyAdded = Lists.newArrayList("freshly", "added");
+
+    boolean changed = Iterators.addAll(alreadyThere, freshlyAdded.iterator());
+
+    ASSERT.that(alreadyThere).hasContentsInOrder("already", "there", "freshly", "added");
+    assertTrue(changed);
+  }
+
+  public void testAddAllToSet() {
+    Set<String> alreadyThere
+        = Sets.newLinkedHashSet(asList("already", "there"));
+    List<String> oneMore = Lists.newArrayList("there");
+
+    boolean changed = Iterators.addAll(alreadyThere, oneMore.iterator());
+    ASSERT.that(alreadyThere).hasContentsInOrder("already", "there");
+    assertFalse(changed);
+  }
+
+  @GwtIncompatible("NullPointerTester")
+  public void testNullPointerExceptions() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.testAllPublicStaticMethods(Iterators.class);
+  }
+
+  @GwtIncompatible("Only used by @GwtIncompatible code")
+  private static abstract class EmptyIteratorTester
+      extends IteratorTester<Integer> {
+    protected EmptyIteratorTester() {
+      super(3, MODIFIABLE, Collections.<Integer>emptySet(),
+          IteratorTester.KnownOrder.KNOWN_ORDER);
+    }
+  }
+
+  @GwtIncompatible("Only used by @GwtIncompatible code")
+  private static abstract class SingletonIteratorTester
+      extends IteratorTester<Integer> {
+    protected SingletonIteratorTester() {
+      super(3, MODIFIABLE, singleton(1), IteratorTester.KnownOrder.KNOWN_ORDER);
+    }
+  }
+
+  @GwtIncompatible("Only used by @GwtIncompatible code")
+  private static abstract class DoubletonIteratorTester
+      extends IteratorTester<Integer> {
+    protected DoubletonIteratorTester() {
+      super(5, MODIFIABLE, newArrayList(1, 2),
+          IteratorTester.KnownOrder.KNOWN_ORDER);
+    }
+  }
+
+  private static Iterator<Integer> iterateOver(final Integer... values) {
+    return newArrayList(values).iterator();
+  }
+
+  public void testElementsEqual() {
+    Iterable<?> a;
+    Iterable<?> b;
+
+    // Base case.
+    a = Lists.newArrayList();
+    b = Collections.emptySet();
+    assertTrue(Iterators.elementsEqual(a.iterator(), b.iterator()));
+
+    // A few elements.
+    a = asList(4, 8, 15, 16, 23, 42);
+    b = asList(4, 8, 15, 16, 23, 42);
+    assertTrue(Iterators.elementsEqual(a.iterator(), b.iterator()));
+
+    // The same, but with nulls.
+    a = asList(4, 8, null, 16, 23, 42);
+    b = asList(4, 8, null, 16, 23, 42);
+    assertTrue(Iterators.elementsEqual(a.iterator(), b.iterator()));
+
+    // Different Iterable types (still equal elements, though).
+    a = ImmutableList.of(4, 8, 15, 16, 23, 42);
+    b = asList(4, 8, 15, 16, 23, 42);
+    assertTrue(Iterators.elementsEqual(a.iterator(), b.iterator()));
+
+    // An element differs.
+    a = asList(4, 8, 15, 12, 23, 42);
+    b = asList(4, 8, 15, 16, 23, 42);
+    assertFalse(Iterators.elementsEqual(a.iterator(), b.iterator()));
+
+    // null versus non-null.
+    a = asList(4, 8, 15, null, 23, 42);
+    b = asList(4, 8, 15, 16, 23, 42);
+    assertFalse(Iterators.elementsEqual(a.iterator(), b.iterator()));
+    assertFalse(Iterators.elementsEqual(b.iterator(), a.iterator()));
+
+    // Different lengths.
+    a = asList(4, 8, 15, 16, 23);
+    b = asList(4, 8, 15, 16, 23, 42);
+    assertFalse(Iterators.elementsEqual(a.iterator(), b.iterator()));
+    assertFalse(Iterators.elementsEqual(b.iterator(), a.iterator()));
+
+    // Different lengths, one is empty.
+    a = Collections.emptySet();
+    b = asList(4, 8, 15, 16, 23, 42);
+    assertFalse(Iterators.elementsEqual(a.iterator(), b.iterator()));
+    assertFalse(Iterators.elementsEqual(b.iterator(), a.iterator()));
+  }
+
+  public void testPartition_badSize() {
+    Iterator<Integer> source = Iterators.singletonIterator(1);
+    try {
+      Iterators.partition(source, 0);
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  public void testPartition_empty() {
+    Iterator<Integer> source = Iterators.emptyIterator();
+    Iterator<List<Integer>> partitions = Iterators.partition(source, 1);
+    assertFalse(partitions.hasNext());
+  }
+
+  public void testPartition_singleton1() {
+    Iterator<Integer> source = Iterators.singletonIterator(1);
+    Iterator<List<Integer>> partitions = Iterators.partition(source, 1);
+    assertTrue(partitions.hasNext());
+    assertTrue(partitions.hasNext());
+    assertEquals(ImmutableList.of(1), partitions.next());
+    assertFalse(partitions.hasNext());
+  }
+
+  public void testPartition_singleton2() {
+    Iterator<Integer> source = Iterators.singletonIterator(1);
+    Iterator<List<Integer>> partitions = Iterators.partition(source, 2);
+    assertTrue(partitions.hasNext());
+    assertTrue(partitions.hasNext());
+    assertEquals(ImmutableList.of(1), partitions.next());
+    assertFalse(partitions.hasNext());
+  }
+
+  @GwtIncompatible("fairly slow (~50s)")
+  public void testPartition_general() {
+    new IteratorTester<List<Integer>>(5,
+        IteratorFeature.UNMODIFIABLE,
+        ImmutableList.of(
+            asList(1, 2, 3),
+            asList(4, 5, 6),
+            asList(7)),
+        IteratorTester.KnownOrder.KNOWN_ORDER) {
+      @Override protected Iterator<List<Integer>> newTargetIterator() {
+        Iterator<Integer> source = Iterators.forArray(1, 2, 3, 4, 5, 6, 7);
+        return Iterators.partition(source, 3);
+      }
+    }.test();
+  }
+
+  public void testPartition_view() {
+    List<Integer> list = asList(1, 2);
+    Iterator<List<Integer>> partitions
+        = Iterators.partition(list.iterator(), 1);
+
+    // Changes before the partition is retrieved are reflected
+    list.set(0, 3);
+    List<Integer> first = partitions.next();
+
+    // Changes after are not
+    list.set(0, 4);
+
+    assertEquals(ImmutableList.of(3), first);
+  }
+
+  @GwtIncompatible("?")
+  // TODO: Figure out why this is failing in GWT.
+  public void testPartitionRandomAccess() {
+    Iterator<Integer> source = asList(1, 2, 3).iterator();
+    Iterator<List<Integer>> partitions = Iterators.partition(source, 2);
+    assertTrue(partitions.next() instanceof RandomAccess);
+    assertTrue(partitions.next() instanceof RandomAccess);
+  }
+
+  public void testPaddedPartition_badSize() {
+    Iterator<Integer> source = Iterators.singletonIterator(1);
+    try {
+      Iterators.paddedPartition(source, 0);
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  public void testPaddedPartition_empty() {
+    Iterator<Integer> source = Iterators.emptyIterator();
+    Iterator<List<Integer>> partitions = Iterators.paddedPartition(source, 1);
+    assertFalse(partitions.hasNext());
+  }
+
+  public void testPaddedPartition_singleton1() {
+    Iterator<Integer> source = Iterators.singletonIterator(1);
+    Iterator<List<Integer>> partitions = Iterators.paddedPartition(source, 1);
+    assertTrue(partitions.hasNext());
+    assertTrue(partitions.hasNext());
+    assertEquals(ImmutableList.of(1), partitions.next());
+    assertFalse(partitions.hasNext());
+  }
+
+  public void testPaddedPartition_singleton2() {
+    Iterator<Integer> source = Iterators.singletonIterator(1);
+    Iterator<List<Integer>> partitions = Iterators.paddedPartition(source, 2);
+    assertTrue(partitions.hasNext());
+    assertTrue(partitions.hasNext());
+    assertEquals(asList(1, null), partitions.next());
+    assertFalse(partitions.hasNext());
+  }
+
+  @GwtIncompatible("fairly slow (~50s)")
+  public void testPaddedPartition_general() {
+    new IteratorTester<List<Integer>>(5,
+        IteratorFeature.UNMODIFIABLE,
+        ImmutableList.of(
+            asList(1, 2, 3),
+            asList(4, 5, 6),
+            asList(7, null, null)),
+        IteratorTester.KnownOrder.KNOWN_ORDER) {
+      @Override protected Iterator<List<Integer>> newTargetIterator() {
+        Iterator<Integer> source = Iterators.forArray(1, 2, 3, 4, 5, 6, 7);
+        return Iterators.paddedPartition(source, 3);
+      }
+    }.test();
+  }
+
+  public void testPaddedPartition_view() {
+    List<Integer> list = asList(1, 2);
+    Iterator<List<Integer>> partitions
+        = Iterators.paddedPartition(list.iterator(), 1);
+
+    // Changes before the PaddedPartition is retrieved are reflected
+    list.set(0, 3);
+    List<Integer> first = partitions.next();
+
+    // Changes after are not
+    list.set(0, 4);
+
+    assertEquals(ImmutableList.of(3), first);
+  }
+
+  public void testPaddedPartitionRandomAccess() {
+    Iterator<Integer> source = asList(1, 2, 3).iterator();
+    Iterator<List<Integer>> partitions = Iterators.paddedPartition(source, 2);
+    assertTrue(partitions.next() instanceof RandomAccess);
+    assertTrue(partitions.next() instanceof RandomAccess);
+  }
+
+  public void testForArrayEmpty() {
+    String[] array = new String[0];
+    Iterator<String> iterator = Iterators.forArray(array);
+    assertFalse(iterator.hasNext());
+    try {
+      iterator.next();
+      fail();
+    } catch (NoSuchElementException expected) {}
+  }
+
+  public void testForArrayTypical() {
+    String[] array = {"foo", "bar"};
+    Iterator<String> iterator = Iterators.forArray(array);
+    assertTrue(iterator.hasNext());
+    assertEquals("foo", iterator.next());
+    assertTrue(iterator.hasNext());
+    try {
+      iterator.remove();
+      fail();
+    } catch (UnsupportedOperationException expected) {}
+    assertEquals("bar", iterator.next());
+    assertFalse(iterator.hasNext());
+    try {
+      iterator.next();
+      fail();
+    } catch (NoSuchElementException expected) {}
+  }
+
+  public void testForArrayOffset() {
+    String[] array = {"foo", "bar", "cat", "dog"};
+    Iterator<String> iterator = Iterators.forArray(array, 1, 2);
+    assertTrue(iterator.hasNext());
+    assertEquals("bar", iterator.next());
+    assertTrue(iterator.hasNext());
+    assertEquals("cat", iterator.next());
+    assertFalse(iterator.hasNext());
+    try {
+      Iterators.forArray(array, 2, 3);
+      fail();
+    } catch (IndexOutOfBoundsException expected) {}
+  }
+
+  public void testForArrayLength0() {
+    String[] array = {"foo", "bar"};
+    assertFalse(Iterators.forArray(array, 0, 0).hasNext());
+    assertFalse(Iterators.forArray(array, 1, 0).hasNext());
+    assertFalse(Iterators.forArray(array, 2, 0).hasNext());
+    try {
+      Iterators.forArray(array, -1, 0);
+      fail();
+    } catch (IndexOutOfBoundsException expected) {}
+    try {
+      Iterators.forArray(array, 3, 0);
+      fail();
+    } catch (IndexOutOfBoundsException expected) {}
+  }
+
+  @GwtIncompatible("unreasonable slow")
+  public void testForArrayUsingTester() {
+    new IteratorTester<Integer>(6, UNMODIFIABLE, asList(1, 2, 3),
+        IteratorTester.KnownOrder.KNOWN_ORDER) {
+      @Override protected Iterator<Integer> newTargetIterator() {
+        return Iterators.forArray(1, 2, 3);
+      }
+    }.test();
+  }
+
+  @GwtIncompatible("unreasonable slow")
+  public void testForArrayWithOffsetUsingTester() {
+    new IteratorTester<Integer>(6, UNMODIFIABLE, asList(1, 2, 3),
+        IteratorTester.KnownOrder.KNOWN_ORDER) {
+      @Override protected Iterator<Integer> newTargetIterator() {
+        return Iterators.forArray(new Integer[] { 0, 1, 2, 3, 4 }, 1, 3);
+      }
+    }.test();
+  }
+
+  public void testForEnumerationEmpty() {
+    Enumeration<Integer> enumer = enumerate();
+    Iterator<Integer> iter = Iterators.forEnumeration(enumer);
+
+    assertFalse(iter.hasNext());
+    try {
+      iter.next();
+      fail();
+    } catch (NoSuchElementException expected) {
+    }
+  }
+
+  public void testForEnumerationSingleton() {
+    Enumeration<Integer> enumer = enumerate(1);
+    Iterator<Integer> iter = Iterators.forEnumeration(enumer);
+
+    assertTrue(iter.hasNext());
+    assertTrue(iter.hasNext());
+    assertEquals(1, (int) iter.next());
+    try {
+      iter.remove();
+      fail();
+    } catch (UnsupportedOperationException expected) {
+    }
+    assertFalse(iter.hasNext());
+    try {
+      iter.next();
+      fail();
+    } catch (NoSuchElementException expected) {
+    }
+  }
+
+  public void testForEnumerationTypical() {
+    Enumeration<Integer> enumer = enumerate(1, 2, 3);
+    Iterator<Integer> iter = Iterators.forEnumeration(enumer);
+
+    assertTrue(iter.hasNext());
+    assertEquals(1, (int) iter.next());
+    assertTrue(iter.hasNext());
+    assertEquals(2, (int) iter.next());
+    assertTrue(iter.hasNext());
+    assertEquals(3, (int) iter.next());
+    assertFalse(iter.hasNext());
+  }
+
+  public void testAsEnumerationEmpty() {
+    Iterator<Integer> iter = Iterators.emptyIterator();
+    Enumeration<Integer> enumer = Iterators.asEnumeration(iter);
+
+    assertFalse(enumer.hasMoreElements());
+    try {
+      enumer.nextElement();
+      fail();
+    } catch (NoSuchElementException expected) {
+    }
+  }
+
+  public void testAsEnumerationSingleton() {
+    Iterator<Integer> iter = ImmutableList.of(1).iterator();
+    Enumeration<Integer> enumer = Iterators.asEnumeration(iter);
+
+    assertTrue(enumer.hasMoreElements());
+    assertTrue(enumer.hasMoreElements());
+    assertEquals(1, (int) enumer.nextElement());
+    assertFalse(enumer.hasMoreElements());
+    try {
+      enumer.nextElement();
+      fail();
+    } catch (NoSuchElementException expected) {
+    }
+  }
+
+  public void testAsEnumerationTypical() {
+    Iterator<Integer> iter = ImmutableList.of(1, 2, 3).iterator();
+    Enumeration<Integer> enumer = Iterators.asEnumeration(iter);
+
+    assertTrue(enumer.hasMoreElements());
+    assertEquals(1, (int) enumer.nextElement());
+    assertTrue(enumer.hasMoreElements());
+    assertEquals(2, (int) enumer.nextElement());
+    assertTrue(enumer.hasMoreElements());
+    assertEquals(3, (int) enumer.nextElement());
+    assertFalse(enumer.hasMoreElements());
+  }
+
+  private static Enumeration<Integer> enumerate(Integer... ints) {
+    Vector<Integer> vector = new Vector<Integer>();
+    vector.addAll(asList(ints));
+    return vector.elements();
+  }
+
+  public void testToString() {
+    List<String> list = Collections.emptyList();
+    assertEquals("[]", Iterators.toString(list.iterator()));
+
+    list = Lists.newArrayList("yam", "bam", "jam", "ham");
+    assertEquals("[yam, bam, jam, ham]", Iterators.toString(list.iterator()));
+  }
+
+  public void testLimit() {
+    List<String> list = newArrayList();
+    try {
+      Iterators.limit(list.iterator(), -1);
+      fail("expected exception");
+    } catch (IllegalArgumentException expected) {
+      // expected
+    }
+
+    assertFalse(Iterators.limit(list.iterator(), 0).hasNext());
+    assertFalse(Iterators.limit(list.iterator(), 1).hasNext());
+
+    list.add("cool");
+    assertFalse(Iterators.limit(list.iterator(), 0).hasNext());
+    assertEquals(list, newArrayList(Iterators.limit(list.iterator(), 1)));
+    assertEquals(list, newArrayList(Iterators.limit(list.iterator(), 2)));
+
+    list.add("pants");
+    assertFalse(Iterators.limit(list.iterator(), 0).hasNext());
+    assertEquals(ImmutableList.of("cool"),
+        newArrayList(Iterators.limit(list.iterator(), 1)));
+    assertEquals(list, newArrayList(Iterators.limit(list.iterator(), 2)));
+    assertEquals(list, newArrayList(Iterators.limit(list.iterator(), 3)));
+  }
+
+  public void testLimitRemove() {
+    List<String> list = newArrayList();
+    list.add("cool");
+    list.add("pants");
+    Iterator<String> iterator = Iterators.limit(list.iterator(), 1);
+    iterator.next();
+    iterator.remove();
+    assertFalse(iterator.hasNext());
+    assertEquals(1, list.size());
+    assertEquals("pants", list.get(0));
+  }
+
+  @GwtIncompatible("fairly slow (~30s)")
+  public void testLimitUsingIteratorTester() {
+    final List<Integer> list = Lists.newArrayList(1, 2, 3, 4, 5);
+    new IteratorTester<Integer>(5, MODIFIABLE, newArrayList(1, 2, 3),
+        IteratorTester.KnownOrder.KNOWN_ORDER) {
+      @Override protected Iterator<Integer> newTargetIterator() {
+        return Iterators.limit(Lists.newArrayList(list).iterator(), 3);
+      }
+    }.test();
+  }
+
+  public void testGetNext_withDefault_singleton() {
+    Iterator<String> iterator = Collections.singletonList("foo").iterator();
+    assertEquals("foo", Iterators.getNext(iterator, "bar"));
+  }
+
+  public void testGetNext_withDefault_empty() {
+    Iterator<String> iterator = Iterators.emptyIterator();
+    assertEquals("bar", Iterators.getNext(iterator, "bar"));
+  }
+
+  public void testGetNext_withDefault_empty_null() {
+    Iterator<String> iterator = Iterators.emptyIterator();
+    assertNull(Iterators.getNext(iterator, null));
+  }
+
+  public void testGetNext_withDefault_two() {
+    Iterator<String> iterator = asList("foo", "bar").iterator();
+    assertEquals("foo", Iterators.getNext(iterator, "x"));
+  }
+
+  public void testGetLast_basic() {
+    List<String> list = newArrayList();
+    list.add("a");
+    list.add("b");
+    assertEquals("b", getLast(list.iterator()));
+  }
+
+  public void testGetLast_exception() {
+    List<String> list = newArrayList();
+    try {
+      getLast(list.iterator());
+      fail();
+    } catch (NoSuchElementException expected) {
+    }
+  }
+
+  public void testGetLast_withDefault_singleton() {
+    Iterator<String> iterator = Collections.singletonList("foo").iterator();
+    assertEquals("foo", Iterators.getLast(iterator, "bar"));
+  }
+
+  public void testGetLast_withDefault_empty() {
+    Iterator<String> iterator = Iterators.emptyIterator();
+    assertEquals("bar", Iterators.getLast(iterator, "bar"));
+  }
+
+  public void testGetLast_withDefault_empty_null() {
+    Iterator<String> iterator = Iterators.emptyIterator();
+    assertNull(Iterators.getLast(iterator, null));
+  }
+
+  public void testGetLast_withDefault_two() {
+    Iterator<String> iterator = asList("foo", "bar").iterator();
+    assertEquals("bar", Iterators.getLast(iterator, "x"));
+  }
+
+  public void testGet_basic() {
+    List<String> list = newArrayList();
+    list.add("a");
+    list.add("b");
+    Iterator<String> iterator = list.iterator();
+    assertEquals("b", get(iterator, 1));
+    assertFalse(iterator.hasNext());
+  }
+
+  public void testGet_atSize() {
+    List<String> list = newArrayList();
+    list.add("a");
+    list.add("b");
+    Iterator<String> iterator = list.iterator();
+    try {
+      get(iterator, 2);
+      fail();
+    } catch (IndexOutOfBoundsException expected) {}
+    assertFalse(iterator.hasNext());
+  }
+
+  public void testGet_pastEnd() {
+    List<String> list = newArrayList();
+    list.add("a");
+    list.add("b");
+    Iterator<String> iterator = list.iterator();
+    try {
+      get(iterator, 5);
+      fail();
+    } catch (IndexOutOfBoundsException expected) {}
+    assertFalse(iterator.hasNext());
+  }
+
+  public void testGet_empty() {
+    List<String> list = newArrayList();
+    Iterator<String> iterator = list.iterator();
+    try {
+      get(iterator, 0);
+      fail();
+    } catch (IndexOutOfBoundsException expected) {}
+    assertFalse(iterator.hasNext());
+  }
+
+  public void testGet_negativeIndex() {
+    List<String> list = newArrayList("a", "b", "c");
+    Iterator<String> iterator = list.iterator();
+    try {
+      get(iterator, -1);
+      fail();
+    } catch (IndexOutOfBoundsException expected) {}
+  }
+
+  public void testGet_withDefault_basic() {
+    List<String> list = newArrayList();
+    list.add("a");
+    list.add("b");
+    Iterator<String> iterator = list.iterator();
+    assertEquals("a", get(iterator, 0, "c"));
+    assertTrue(iterator.hasNext());
+  }
+
+  public void testGet_withDefault_atSize() {
+    List<String> list = newArrayList();
+    list.add("a");
+    list.add("b");
+    Iterator<String> iterator = list.iterator();
+    assertEquals("c", get(iterator, 2, "c"));
+    assertFalse(iterator.hasNext());
+  }
+
+  public void testGet_withDefault_pastEnd() {
+    List<String> list = newArrayList();
+    list.add("a");
+    list.add("b");
+    Iterator<String> iterator = list.iterator();
+    assertEquals("c", get(iterator, 3, "c"));
+    assertFalse(iterator.hasNext());
+  }
+
+  public void testGet_withDefault_negativeIndex() {
+    List<String> list = newArrayList();
+    list.add("a");
+    list.add("b");
+    Iterator<String> iterator = list.iterator();
+    try {
+      get(iterator, -1, "c");
+      fail();
+    } catch (IndexOutOfBoundsException expected) {
+      // pass
+    }
+    assertTrue(iterator.hasNext());
+  }
+
+  public void testSkip_basic() {
+    List<String> list = newArrayList();
+    list.add("a");
+    list.add("b");
+    Iterator<String> iterator = list.iterator();
+    skip(iterator, 1);
+    assertEquals("b", iterator.next());
+  }
+
+  public void testSkip_pastEnd() {
+    List<String> list = newArrayList();
+    list.add("a");
+    list.add("b");
+    Iterator<String> iterator = list.iterator();
+    skip(iterator, 5);
+    assertFalse(iterator.hasNext());
+  }
+
+  public void testSkip_illegalArgument() {
+    List<String> list = newArrayList("a", "b", "c");
+    Iterator<String> iterator = list.iterator();
+    try {
+      skip(iterator, -1);
+      fail();
+    } catch (IllegalArgumentException expected) {}
+  }
+
+  public void testFrequency() {
+    List<String> list = newArrayList("a", null, "b", null, "a", null);
+    assertEquals(2, Iterators.frequency(list.iterator(), "a"));
+    assertEquals(1, Iterators.frequency(list.iterator(), "b"));
+    assertEquals(0, Iterators.frequency(list.iterator(), "c"));
+    assertEquals(0, Iterators.frequency(list.iterator(), 4.2));
+    assertEquals(3, Iterators.frequency(list.iterator(), null));
+  }
+
+  @GwtIncompatible("slow (~4s)")
+  public void testSingletonIterator() {
+    new IteratorTester<Integer>(
+        3, UNMODIFIABLE, singleton(1), IteratorTester.KnownOrder.KNOWN_ORDER) {
+      @Override protected Iterator<Integer> newTargetIterator() {
+        return Iterators.singletonIterator(1);
+      }
+    }.test();
+  }
+
+  public void testRemoveAll() {
+    List<String> list = newArrayList("a", "b", "c", "d", "e");
+    assertTrue(Iterators.removeAll(
+        list.iterator(), newArrayList("b", "d", "f")));
+    assertEquals(newArrayList("a", "c", "e"), list);
+    assertFalse(Iterators.removeAll(
+        list.iterator(), newArrayList("x", "y", "z")));
+    assertEquals(newArrayList("a", "c", "e"), list);
+  }
+
+  public void testRemoveIf() {
+    List<String> list = newArrayList("a", "b", "c", "d", "e");
+    assertTrue(Iterators.removeIf(
+        list.iterator(),
+        new Predicate<String>() {
+          @Override
+          public boolean apply(String s) {
+            return s.equals("b") || s.equals("d") || s.equals("f");
+          }
+        }));
+    assertEquals(newArrayList("a", "c", "e"), list);
+    assertFalse(Iterators.removeIf(
+        list.iterator(),
+        new Predicate<String>() {
+          @Override
+          public boolean apply(String s) {
+            return s.equals("x") || s.equals("y") || s.equals("z");
+          }
+        }));
+    assertEquals(newArrayList("a", "c", "e"), list);
+  }
+
+  public void testRetainAll() {
+    List<String> list = newArrayList("a", "b", "c", "d", "e");
+    assertTrue(Iterators.retainAll(
+        list.iterator(), newArrayList("b", "d", "f")));
+    assertEquals(newArrayList("b", "d"), list);
+    assertFalse(Iterators.retainAll(
+        list.iterator(), newArrayList("b", "e", "d")));
+    assertEquals(newArrayList("b", "d"), list);
+  }
+
+  @GwtIncompatible("ListTestSuiteBuilder")
+  private static Test testsForRemoveAllAndRetainAll() {
+    return ListTestSuiteBuilder.using(new TestStringListGenerator() {
+          @Override public List<String> create(final String[] elements) {
+            final List<String> delegate = newArrayList(elements);
+            return new ForwardingList<String>() {
+              @Override protected List<String> delegate() {
+                return delegate;
+              }
+
+              @Override public boolean removeAll(Collection<?> c) {
+                return Iterators.removeAll(iterator(), c);
+              }
+
+              @Override public boolean retainAll(Collection<?> c) {
+                return Iterators.retainAll(iterator(), c);
+              }
+            };
+          }
+        })
+        .named("ArrayList with Iterators.removeAll and retainAll")
+        .withFeatures(
+            ListFeature.GENERAL_PURPOSE,
+            CollectionFeature.ALLOWS_NULL_VALUES,
+            CollectionSize.ANY)
+        .createTestSuite();
+  }
+
+  public void testConsumingIterator() {
+    // Test data
+    List<String> list = Lists.newArrayList("a", "b");
+
+    // Test & Verify
+    Iterator<String> consumingIterator =
+        Iterators.consumingIterator(list.iterator());
+
+    ASSERT.that(list).hasContentsInOrder("a", "b");
+
+    assertTrue(consumingIterator.hasNext());
+    ASSERT.that(list).hasContentsInOrder("a", "b");
+    assertEquals("a", consumingIterator.next());
+    ASSERT.that(list).hasContentsInOrder("b");
+
+    assertTrue(consumingIterator.hasNext());
+    assertEquals("b", consumingIterator.next());
+    ASSERT.that(list).isEmpty();
+
+    assertFalse(consumingIterator.hasNext());
+  }
+
+  @GwtIncompatible("?")
+  // TODO: Figure out why this is failing in GWT.
+  public void testConsumingIterator_duelingIterators() {
+    // Test data
+    List<String> list = Lists.newArrayList("a", "b");
+
+    // Test & Verify
+    Iterator<String> i1 = Iterators.consumingIterator(list.iterator());
+    Iterator<String> i2 = Iterators.consumingIterator(list.iterator());
+
+    i1.next();
+    try {
+      i2.next();
+      fail("Concurrent modification should throw an exception.");
+    } catch (ConcurrentModificationException cme) {
+      // Pass
+    }
+  }
+
+  public void testIndexOf_consumedData() {
+    Iterator<String> iterator =
+        Lists.newArrayList("manny", "mo", "jack").iterator();
+    assertEquals(1, Iterators.indexOf(iterator, Predicates.equalTo("mo")));
+    assertEquals("jack", iterator.next());
+    assertFalse(iterator.hasNext());
+  }
+
+  public void testIndexOf_consumedDataWithDuplicates() {
+    Iterator<String> iterator =
+        Lists.newArrayList("manny", "mo", "mo", "jack").iterator();
+    assertEquals(1, Iterators.indexOf(iterator, Predicates.equalTo("mo")));
+    assertEquals("mo", iterator.next());
+    assertEquals("jack", iterator.next());
+    assertFalse(iterator.hasNext());
+  }
+
+  public void testIndexOf_consumedDataNoMatch() {
+    Iterator<String> iterator =
+        Lists.newArrayList("manny", "mo", "mo", "jack").iterator();
+    assertEquals(-1, Iterators.indexOf(iterator, Predicates.equalTo("bob")));
+    assertFalse(iterator.hasNext());
+  }
+
+  @SuppressWarnings("deprecation")
+  public void testUnmodifiableIteratorShortCircuit() {
+    Iterator<String> mod = Lists.newArrayList("a", "b", "c").iterator();
+    UnmodifiableIterator<String> unmod = Iterators.unmodifiableIterator(mod);
+    assertNotSame(mod, unmod);
+    assertSame(unmod, Iterators.unmodifiableIterator(unmod));
+    assertSame(unmod, Iterators.unmodifiableIterator((Iterator<String>) unmod));
+  }
+
+  @SuppressWarnings("deprecation")
+  public void testPeekingIteratorShortCircuit() {
+    Iterator<String> nonpeek = Lists.newArrayList("a", "b", "c").iterator();
+    PeekingIterator<String> peek = Iterators.peekingIterator(nonpeek);
+    assertNotSame(peek, nonpeek);
+    assertSame(peek, Iterators.peekingIterator(peek));
+    assertSame(peek, Iterators.peekingIterator((Iterator<String>) peek));
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/LegacyComparable.java b/guava-tests/test/com/google/common/collect/LegacyComparable.java
new file mode 100644
index 0000000..0021321
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/LegacyComparable.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.io.Serializable;
+import java.util.Arrays;
+
+/**
+ * A class that implements {@code Comparable} without generics, such as those
+ * found in libraries that support Java 1.4 and before. Our library needs to
+ * do the bare minimum to accommodate such types, though their use may still
+ * require an explicit type parameter and/or warning suppression.
+ *
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible
+class LegacyComparable implements Comparable, Serializable {
+  static final LegacyComparable X = new LegacyComparable("x");
+  static final LegacyComparable Y = new LegacyComparable("y");
+  static final LegacyComparable Z = new LegacyComparable("z");
+
+  static final Iterable<LegacyComparable> VALUES_FORWARD
+      = Arrays.asList(X, Y, Z);
+  static final Iterable<LegacyComparable> VALUES_BACKWARD
+      = Arrays.asList(Z, Y, X);
+
+  private final String value;
+
+  LegacyComparable(String value) {
+    this.value = value;
+  }
+
+  @Override
+  public int compareTo(Object object) {
+    // This method is spec'd to throw CCE if object is of the wrong type
+    LegacyComparable that = (LegacyComparable) object;
+    return this.value.compareTo(that.value);
+  }
+
+  @Override public boolean equals(Object object) {
+    if (object instanceof LegacyComparable) {
+      LegacyComparable that = (LegacyComparable) object;
+      return this.value.equals(that.value);
+    }
+    return false;
+  }
+
+  @Override public int hashCode() {
+    return value.hashCode();
+  }
+
+  private static final long serialVersionUID = 0;
+}
diff --git a/guava-tests/test/com/google/common/collect/LenientSerializableTester.java b/guava-tests/test/com/google/common/collect/LenientSerializableTester.java
new file mode 100644
index 0000000..5f4f771
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/LenientSerializableTester.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.testing.SerializableTester.reserialize;
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertTrue;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.testing.SerializableTester;
+
+import java.util.Set;
+
+/**
+ * Variant of {@link SerializableTester} that does not require the reserialized object's class to be
+ * identical to the original.
+ *
+ * @author Chris Povirk
+ */
+/*
+ * The whole thing is really @GwtIncompatible, but GwtJUnitConvertedTestModule doesn't have a
+ * parameter for non-GWT, non-test files, and it didn't seem worth adding one for this unusual case.
+ */
+@GwtCompatible(emulated = true)
+final class LenientSerializableTester {
+  /*
+   * TODO(cpovirk): move this to c.g.c.testing if we allow for c.g.c.annotations dependencies so
+   * that it can be GWTified?
+   */
+  @GwtIncompatible("SerializableTester")
+  static <E> Set<E> reserializeAndAssertLenient(Set<E> original) {
+    Set<E> copy = reserialize(original);
+    assertEquals(original, copy);
+    assertTrue(copy instanceof ImmutableSet);
+    return copy;
+  }
+
+  private LenientSerializableTester() {}
+}
diff --git a/guava-tests/test/com/google/common/collect/LinkedHashMultimapTest.java b/guava-tests/test/com/google/common/collect/LinkedHashMultimapTest.java
new file mode 100644
index 0000000..fb728b3
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/LinkedHashMultimapTest.java
@@ -0,0 +1,358 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.collect.Lists.newArrayList;
+import static com.google.common.collect.Sets.newHashSet;
+import static com.google.common.collect.Sets.newLinkedHashSet;
+import static com.google.common.collect.testing.IteratorFeature.MODIFIABLE;
+import static java.util.Arrays.asList;
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.collect.testing.IteratorTester;
+import com.google.common.testing.SerializableTester;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+/**
+ * Unit tests for {@code LinkedHashMultimap}.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible(emulated = true)
+public class LinkedHashMultimapTest extends AbstractSetMultimapTest {
+
+  @Override protected Multimap<String, Integer> create() {
+    return LinkedHashMultimap.create();
+  }
+
+  private Multimap<String, Integer> initializeMultimap5() {
+    Multimap<String, Integer> multimap = getMultimap();
+    multimap.put("foo", 5);
+    multimap.put("bar", 4);
+    multimap.put("foo", 3);
+    multimap.put("cow", 2);
+    multimap.put("bar", 1);
+    return multimap;
+  }
+
+  public void testToString() {
+    assertEquals("{foo=[3, -1, 2, 4, 1], bar=[1, 2, 3]}",
+        createSample().toString());
+  }
+
+  public void testOrderingReadOnly() {
+    Multimap<String, Integer> multimap = initializeMultimap5();
+    assertOrderingReadOnly(multimap);
+  }
+
+  public void testOrderingUnmodifiable() {
+    Multimap<String, Integer> multimap = initializeMultimap5();
+    assertOrderingReadOnly(Multimaps.unmodifiableMultimap(multimap));
+  }
+
+  public void testOrderingSynchronized() {
+    Multimap<String, Integer> multimap = initializeMultimap5();
+    assertOrderingReadOnly(Multimaps.synchronizedMultimap(multimap));
+  }
+
+  @GwtIncompatible("SeriazableTester")
+  public void testSerializationOrdering() {
+    Multimap<String, Integer> multimap = initializeMultimap5();
+    Multimap<String, Integer> copy
+        = SerializableTester.reserializeAndAssert(multimap);
+    assertOrderingReadOnly(copy);
+  }
+
+  private void assertOrderingReadOnly(Multimap<String, Integer> multimap) {
+    ASSERT.that(multimap.get("foo")).hasContentsInOrder(5, 3);
+    ASSERT.that(multimap.get("bar")).hasContentsInOrder(4, 1);
+    ASSERT.that(multimap.get("cow")).hasContentsInOrder(2);
+
+    ASSERT.that(multimap.keySet()).hasContentsInOrder("foo", "bar", "cow");
+    ASSERT.that(multimap.values()).hasContentsInOrder(5, 4, 3, 2, 1);
+
+    Iterator<Map.Entry<String, Integer>> entryIterator =
+        multimap.entries().iterator();
+    assertEquals(Maps.immutableEntry("foo", 5), entryIterator.next());
+    assertEquals(Maps.immutableEntry("bar", 4), entryIterator.next());
+    assertEquals(Maps.immutableEntry("foo", 3), entryIterator.next());
+    assertEquals(Maps.immutableEntry("cow", 2), entryIterator.next());
+    assertEquals(Maps.immutableEntry("bar", 1), entryIterator.next());
+
+    Iterator<Map.Entry<String, Collection<Integer>>> collectionIterator =
+        multimap.asMap().entrySet().iterator();
+    Map.Entry<String, Collection<Integer>> entry = collectionIterator.next();
+    assertEquals("foo", entry.getKey());
+    ASSERT.that(entry.getValue()).hasContentsInOrder(5, 3);
+    entry = collectionIterator.next();
+    assertEquals("bar", entry.getKey());
+    ASSERT.that(entry.getValue()).hasContentsInOrder(4, 1);
+    entry = collectionIterator.next();
+    assertEquals("cow", entry.getKey());
+    ASSERT.that(entry.getValue()).hasContentsInOrder(2);
+  }
+
+  public void testOrderingUpdates() {
+    Multimap<String, Integer> multimap = initializeMultimap5();
+
+    ASSERT.that(multimap.replaceValues("foo", asList(6, 7))).hasContentsInOrder(5, 3);
+    ASSERT.that(multimap.keySet()).hasContentsInOrder("foo", "bar", "cow");
+    ASSERT.that(multimap.removeAll("foo")).hasContentsInOrder(6, 7);
+    ASSERT.that(multimap.keySet()).hasContentsInOrder("bar", "cow");
+    assertTrue(multimap.remove("bar", 4));
+    ASSERT.that(multimap.keySet()).hasContentsInOrder("bar", "cow");
+    assertTrue(multimap.remove("bar", 1));
+    ASSERT.that(multimap.keySet()).hasContentsInOrder("cow");
+    multimap.put("bar", 9);
+    ASSERT.that(multimap.keySet()).hasContentsInOrder("cow", "bar");
+  }
+
+  public void testToStringNullExact() {
+    Multimap<String, Integer> multimap = getMultimap();
+
+    multimap.put("foo", 3);
+    multimap.put("foo", -1);
+    multimap.put(null, null);
+    multimap.put("bar", 1);
+    multimap.put("foo", 2);
+    multimap.put(null, 0);
+    multimap.put("bar", 2);
+    multimap.put("bar", null);
+    multimap.put("foo", null);
+    multimap.put("foo", 4);
+    multimap.put(null, -1);
+    multimap.put("bar", 3);
+    multimap.put("bar", 1);
+    multimap.put("foo", 1);
+
+    assertEquals(
+        "{foo=[3, -1, 2, null, 4, 1], null=[null, 0, -1], bar=[1, 2, null, 3]}",
+        multimap.toString());
+  }
+
+  public void testPutMultimapOrdered() {
+    Multimap<String, Integer> multimap = LinkedHashMultimap.create();
+    multimap.putAll(initializeMultimap5());
+    assertOrderingReadOnly(multimap);
+  }
+
+  public void testKeysToString_ordering() {
+    Multimap<String, Integer> multimap = initializeMultimap5();
+    assertEquals("[foo x 2, bar x 2, cow]", multimap.keys().toString());
+  }
+
+  public void testCreate() {
+    LinkedHashMultimap<String, Integer> multimap = LinkedHashMultimap.create();
+    multimap.put("foo", 1);
+    multimap.put("bar", 2);
+    multimap.put("foo", 3);
+    assertEquals(ImmutableSet.of(1, 3), multimap.get("foo"));
+    assertEquals(8, multimap.expectedValuesPerKey);
+  }
+
+  public void testCreateFromMultimap() {
+    Multimap<String, Integer> multimap = createSample();
+    LinkedHashMultimap<String, Integer> copy =
+        LinkedHashMultimap.create(multimap);
+    assertEquals(multimap, copy);
+    assertEquals(8, copy.expectedValuesPerKey);
+  }
+
+  public void testCreateFromSizes() {
+    LinkedHashMultimap<String, Integer> multimap
+        = LinkedHashMultimap.create(20, 15);
+    multimap.put("foo", 1);
+    multimap.put("bar", 2);
+    multimap.put("foo", 3);
+    assertEquals(ImmutableSet.of(1, 3), multimap.get("foo"));
+    assertEquals(15, multimap.expectedValuesPerKey);
+  }
+
+  public void testCreateFromIllegalSizes() {
+    try {
+      LinkedHashMultimap.create(-20, 15);
+      fail();
+    } catch (IllegalArgumentException expected) {}
+
+    try {
+      LinkedHashMultimap.create(20, -15);
+      fail();
+    } catch (IllegalArgumentException expected) {}
+  }
+
+  @GwtIncompatible("unreasonable slow")
+  public void testGetIteration() {
+    new IteratorTester<Integer>(6, MODIFIABLE,
+        newLinkedHashSet(asList(2, 3, 4, 7, 8)),
+        IteratorTester.KnownOrder.KNOWN_ORDER) {
+      private Multimap<String, Integer> multimap;
+
+      @Override protected Iterator<Integer> newTargetIterator() {
+        multimap = create();
+        multimap.putAll("foo", asList(2, 3, 4));
+        multimap.putAll("bar", asList(5, 6));
+        multimap.putAll("foo", asList(7, 8));
+        return multimap.get("foo").iterator();
+      }
+
+      @Override protected void verify(List<Integer> elements) {
+        assertEquals(newHashSet(elements), multimap.get("foo"));
+      }
+    }.test();
+  }
+
+  @GwtIncompatible("unreasonable slow")
+  public void testEntriesIteration() {
+    @SuppressWarnings("unchecked")
+    Set<Entry<String, Integer>> set = Sets.newLinkedHashSet(asList(
+        Maps.immutableEntry("foo", 2),
+        Maps.immutableEntry("foo", 3),
+        Maps.immutableEntry("bar", 4),
+        Maps.immutableEntry("bar", 5),
+        Maps.immutableEntry("foo", 6)));
+
+    new IteratorTester<Entry<String, Integer>>(6, MODIFIABLE, set,
+        IteratorTester.KnownOrder.KNOWN_ORDER) {
+      private Multimap<String, Integer> multimap;
+
+      @Override protected Iterator<Entry<String, Integer>> newTargetIterator() {
+        multimap = create();
+        multimap.putAll("foo", asList(2, 3));
+        multimap.putAll("bar", asList(4, 5));
+        multimap.putAll("foo", asList(6));
+        return multimap.entries().iterator();
+      }
+
+      @Override protected void verify(List<Entry<String, Integer>> elements) {
+        assertEquals(newHashSet(elements), multimap.entries());
+      }
+    }.test();
+  }
+
+  @GwtIncompatible("unreasonable slow")
+  public void testKeysIteration() {
+    new IteratorTester<String>(6, MODIFIABLE, newArrayList("foo", "foo", "bar",
+        "bar", "foo"), IteratorTester.KnownOrder.KNOWN_ORDER) {
+      private Multimap<String, Integer> multimap;
+
+      @Override protected Iterator<String> newTargetIterator() {
+        multimap = create();
+        multimap.putAll("foo", asList(2, 3));
+        multimap.putAll("bar", asList(4, 5));
+        multimap.putAll("foo", asList(6));
+        return multimap.keys().iterator();
+      }
+
+      @Override protected void verify(List<String> elements) {
+        assertEquals(elements, Lists.newArrayList(multimap.keys()));
+      }
+    }.test();
+  }
+
+  @GwtIncompatible("unreasonable slow")
+  public void testValuesIteration() {
+    new IteratorTester<Integer>(6, MODIFIABLE, newArrayList(2, 3, 4, 5, 6),
+        IteratorTester.KnownOrder.KNOWN_ORDER) {
+      private Multimap<String, Integer> multimap;
+
+      @Override protected Iterator<Integer> newTargetIterator() {
+        multimap = create();
+        multimap.putAll("foo", asList(2, 3));
+        multimap.putAll("bar", asList(4, 5));
+        multimap.putAll("foo", asList(6));
+        return multimap.values().iterator();
+      }
+
+      @Override protected void verify(List<Integer> elements) {
+        assertEquals(elements, Lists.newArrayList(multimap.values()));
+      }
+    }.test();
+  }
+
+  @GwtIncompatible("unreasonable slow")
+  public void testKeySetIteration() {
+    new IteratorTester<String>(6, MODIFIABLE, newLinkedHashSet(asList(
+        "foo", "bar", "baz", "dog", "cat")),
+        IteratorTester.KnownOrder.KNOWN_ORDER) {
+      private Multimap<String, Integer> multimap;
+
+      @Override protected Iterator<String> newTargetIterator() {
+        multimap = create();
+        multimap.putAll("foo", asList(2, 3));
+        multimap.putAll("bar", asList(4, 5));
+        multimap.putAll("foo", asList(6));
+        multimap.putAll("baz", asList(7, 8));
+        multimap.putAll("dog", asList(9));
+        multimap.putAll("bar", asList(10, 11));
+        multimap.putAll("cat", asList(12, 13, 14));
+        return multimap.keySet().iterator();
+      }
+
+      @Override protected void verify(List<String> elements) {
+        assertEquals(newHashSet(elements), multimap.keySet());
+      }
+    }.test();
+  }
+
+  @GwtIncompatible("unreasonable slow")
+  public void testAsSetIteration() {
+    @SuppressWarnings("unchecked")
+    Set<Entry<String, Collection<Integer>>> set = newLinkedHashSet(asList(
+        Maps.immutableEntry("foo",
+            (Collection<Integer>) Sets.newHashSet(2, 3, 6)),
+        Maps.immutableEntry("bar",
+            (Collection<Integer>) Sets.newHashSet(4, 5, 10, 11)),
+        Maps.immutableEntry("baz",
+            (Collection<Integer>) Sets.newHashSet(7, 8)),
+        Maps.immutableEntry("dog",
+            (Collection<Integer>) Sets.newHashSet(9)),
+        Maps.immutableEntry("cat",
+            (Collection<Integer>) Sets.newHashSet(12, 13, 14))
+    ));
+    new IteratorTester<Entry<String, Collection<Integer>>>(6, MODIFIABLE, set,
+        IteratorTester.KnownOrder.KNOWN_ORDER) {
+      private Multimap<String, Integer> multimap;
+
+      @Override protected Iterator<Entry<String, Collection<Integer>>>
+          newTargetIterator() {
+        multimap = create();
+        multimap.putAll("foo", asList(2, 3));
+        multimap.putAll("bar", asList(4, 5));
+        multimap.putAll("foo", asList(6));
+        multimap.putAll("baz", asList(7, 8));
+        multimap.putAll("dog", asList(9));
+        multimap.putAll("bar", asList(10, 11));
+        multimap.putAll("cat", asList(12, 13, 14));
+        return multimap.asMap().entrySet().iterator();
+      }
+
+      @Override protected void verify(
+          List<Entry<String, Collection<Integer>>> elements) {
+        assertEquals(newHashSet(elements), multimap.asMap().entrySet());
+      }
+    }.test();
+  }
+
+}
diff --git a/guava-tests/test/com/google/common/collect/LinkedHashMultisetTest.java b/guava-tests/test/com/google/common/collect/LinkedHashMultisetTest.java
new file mode 100644
index 0000000..dee3760
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/LinkedHashMultisetTest.java
@@ -0,0 +1,134 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.collect.Lists.newArrayList;
+import static com.google.common.collect.testing.IteratorFeature.MODIFIABLE;
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.collect.testing.IteratorTester;
+
+import java.util.Arrays;
+import java.util.ConcurrentModificationException;
+import java.util.Iterator;
+
+/**
+ * Unit test for {@link LinkedHashMultiset}.
+ *
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible(emulated = true)
+public class LinkedHashMultisetTest extends AbstractMultisetTest {
+  @Override protected <E> Multiset<E> create() {
+    return LinkedHashMultiset.create();
+  }
+
+  public void testCreate() {
+    Multiset<String> multiset = LinkedHashMultiset.create();
+    multiset.add("foo", 2);
+    multiset.add("bar");
+    assertEquals(3, multiset.size());
+    assertEquals(2, multiset.count("foo"));
+    assertEquals("[foo x 2, bar]", multiset.toString());
+  }
+
+  public void testCreateWithSize() {
+    Multiset<String> multiset = LinkedHashMultiset.create(50);
+    multiset.add("foo", 2);
+    multiset.add("bar");
+    assertEquals(3, multiset.size());
+    assertEquals(2, multiset.count("foo"));
+    assertEquals("[foo x 2, bar]", multiset.toString());
+  }
+
+  public void testCreateFromIterable() {
+    Multiset<String> multiset
+        = LinkedHashMultiset.create(Arrays.asList("foo", "bar", "foo"));
+    assertEquals(3, multiset.size());
+    assertEquals(2, multiset.count("foo"));
+    assertEquals("[foo x 2, bar]", multiset.toString());
+  }
+
+  @GwtIncompatible("unreasonable slow")
+  public void testIteratorBashing() {
+    ms = createSample();
+    IteratorTester<String> tester =
+        new IteratorTester<String>(6, MODIFIABLE, newArrayList(ms),
+            IteratorTester.KnownOrder.KNOWN_ORDER) {
+          @Override protected Iterator<String> newTargetIterator() {
+            return createSample().iterator();
+          }
+        };
+    tester.test();
+  }
+
+  @GwtIncompatible("slow (~30s)")
+  public void testElementSetIteratorBashing() {
+    IteratorTester<String> tester =
+        new IteratorTester<String>(5, MODIFIABLE, newArrayList("a", "c", "b"),
+            IteratorTester.KnownOrder.KNOWN_ORDER) {
+          @Override protected Iterator<String> newTargetIterator() {
+            Multiset<String> multiset = create();
+            multiset.add("a", 3);
+            multiset.add("c", 1);
+            multiset.add("b", 2);
+            return multiset.elementSet().iterator();
+          }
+        };
+    tester.test();
+  }
+
+  public void testToString() {
+    ms.add("a", 3);
+    ms.add("c", 1);
+    ms.add("b", 2);
+
+    assertEquals("[a x 3, c, b x 2]", ms.toString());
+  }
+
+  public void testLosesPlaceInLine() throws Exception {
+    ms.add("a");
+    ms.add("b", 2);
+    ms.add("c");
+    ASSERT.that(ms.elementSet()).hasContentsInOrder("a", "b", "c");
+    ms.remove("b");
+    ASSERT.that(ms.elementSet()).hasContentsInOrder("a", "b", "c");
+    ms.add("b");
+    ASSERT.that(ms.elementSet()).hasContentsInOrder("a", "b", "c");
+    ms.remove("b", 2);
+    ms.add("b");
+    ASSERT.that(ms.elementSet()).hasContentsInOrder("a", "c", "b");
+  }
+
+  public void testIteratorRemoveConcurrentModification() {
+    ms.add("a");
+    ms.add("b");
+    Iterator<String> iterator = ms.iterator();
+    iterator.next();
+    ms.remove("a");
+    assertEquals(1, ms.size());
+    assertTrue(ms.contains("b"));
+    try {
+      iterator.remove();
+      fail();
+    } catch (ConcurrentModificationException expected) {}
+    assertEquals(1, ms.size());
+    assertTrue(ms.contains("b"));
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/LinkedListMultimapTest.java b/guava-tests/test/com/google/common/collect/LinkedListMultimapTest.java
new file mode 100644
index 0000000..fd19386
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/LinkedListMultimapTest.java
@@ -0,0 +1,473 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.collect.Lists.newArrayList;
+import static com.google.common.collect.Sets.newHashSet;
+import static com.google.common.collect.Sets.newLinkedHashSet;
+import static com.google.common.collect.testing.IteratorFeature.MODIFIABLE;
+import static com.google.common.collect.testing.IteratorFeature.SUPPORTS_REMOVE;
+import static com.google.common.collect.testing.IteratorFeature.SUPPORTS_SET;
+import static java.util.Arrays.asList;
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.collect.testing.IteratorTester;
+import com.google.common.collect.testing.ListIteratorTester;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.RandomAccess;
+import java.util.Set;
+
+/**
+ * Tests for {@code LinkedListMultimap}.
+ *
+ * @author Mike Bostock
+ */
+@GwtCompatible(emulated = true)
+public class LinkedListMultimapTest extends AbstractListMultimapTest {
+
+  @Override protected LinkedListMultimap<String, Integer> create() {
+    return LinkedListMultimap.create();
+  }
+
+  /**
+   * Confirm that get() returns a List that doesn't implement RandomAccess.
+   */
+  public void testGetRandomAccess() {
+    Multimap<String, Integer> multimap = create();
+    multimap.put("foo", 1);
+    multimap.put("foo", 3);
+    assertFalse(multimap.get("foo") instanceof RandomAccess);
+    assertFalse(multimap.get("bar") instanceof RandomAccess);
+  }
+
+  /**
+   * Confirm that removeAll() returns a List that implements RandomAccess, even
+   * though get() doesn't.
+   */
+  public void testRemoveAllRandomAccess() {
+    Multimap<String, Integer> multimap = create();
+    multimap.put("foo", 1);
+    multimap.put("foo", 3);
+    assertTrue(multimap.removeAll("foo") instanceof RandomAccess);
+    assertTrue(multimap.removeAll("bar") instanceof RandomAccess);
+  }
+
+  /**
+   * Confirm that replaceValues() returns a List that implements RandomAccess,
+   * even though get() doesn't.
+   */
+  public void testReplaceValuesRandomAccess() {
+    Multimap<String, Integer> multimap = create();
+    multimap.put("foo", 1);
+    multimap.put("foo", 3);
+    assertTrue(multimap.replaceValues("foo", Arrays.asList(2, 4))
+        instanceof RandomAccess);
+    assertTrue(multimap.replaceValues("bar", Arrays.asList(2, 4))
+        instanceof RandomAccess);
+  }
+
+  public void testCreateFromMultimap() {
+    Multimap<String, Integer> multimap = createSample();
+    LinkedListMultimap<String, Integer> copy =
+        LinkedListMultimap.create(multimap);
+    assertEquals(multimap, copy);
+  }
+
+  public void testCreateFromSize() {
+    LinkedListMultimap<String, Integer> multimap
+        = LinkedListMultimap.create(20);
+    multimap.put("foo", 1);
+    multimap.put("bar", 2);
+    multimap.put("foo", 3);
+    assertEquals(ImmutableList.of(1, 3), multimap.get("foo"));
+  }
+
+  public void testCreateFromIllegalSize() {
+    try {
+      LinkedListMultimap.create(-20);
+      fail();
+    } catch (IllegalArgumentException expected) {}
+  }
+
+  /* "Linked" prefix avoids collision with AbstractMultimapTest. */
+
+  public void testLinkedToString() {
+    assertEquals("{foo=[3, -1, 2, 4, 1], bar=[1, 2, 3, 1]}",
+        createSample().toString());
+  }
+
+  public void testLinkedGetAdd() {
+    LinkedListMultimap<String, Integer> map = create();
+    map.put("bar", 1);
+    Collection<Integer> foos = map.get("foo");
+    foos.add(2);
+    foos.add(3);
+    map.put("bar", 4);
+    map.put("foo", 5);
+    assertEquals("{bar=[1, 4], foo=[2, 3, 5]}", map.toString());
+    assertEquals("[bar=1, foo=2, foo=3, bar=4, foo=5]",
+        map.entries().toString());
+  }
+
+  public void testLinkedGetInsert() {
+    ListMultimap<String, Integer> map = create();
+    map.put("bar", 1);
+    List<Integer> foos = map.get("foo");
+    foos.add(2);
+    foos.add(0, 3);
+    map.put("bar", 4);
+    map.put("foo", 5);
+    assertEquals("{bar=[1, 4], foo=[3, 2, 5]}", map.toString());
+    assertEquals("[bar=1, foo=3, foo=2, bar=4, foo=5]",
+        map.entries().toString());
+  }
+
+  public void testLinkedPutInOrder() {
+    Multimap<String, Integer> map = create();
+    map.put("foo", 1);
+    map.put("bar", 2);
+    map.put("bar", 3);
+    assertEquals("{foo=[1], bar=[2, 3]}", map.toString());
+    assertEquals("[foo=1, bar=2, bar=3]", map.entries().toString());
+  }
+
+  public void testLinkedPutOutOfOrder() {
+    Multimap<String, Integer> map = create();
+    map.put("bar", 1);
+    map.put("foo", 2);
+    map.put("bar", 3);
+    assertEquals("{bar=[1, 3], foo=[2]}", map.toString());
+    assertEquals("[bar=1, foo=2, bar=3]", map.entries().toString());
+  }
+
+  public void testLinkedPutAllMultimap() {
+    Multimap<String, Integer> src = create();
+    src.put("bar", 1);
+    src.put("foo", 2);
+    src.put("bar", 3);
+    Multimap<String, Integer> dst = create();
+    dst.putAll(src);
+    assertEquals("{bar=[1, 3], foo=[2]}", dst.toString());
+    assertEquals("[bar=1, foo=2, bar=3]", src.entries().toString());
+  }
+
+  public void testLinkedReplaceValues() {
+    Multimap<String, Integer> map = create();
+    map.put("bar", 1);
+    map.put("foo", 2);
+    map.put("bar", 3);
+    map.put("bar", 4);
+    assertEquals("{bar=[1, 3, 4], foo=[2]}", map.toString());
+    map.replaceValues("bar", asList(1, 2));
+    assertEquals("[bar=1, foo=2, bar=2]", map.entries().toString());
+    assertEquals("{bar=[1, 2], foo=[2]}", map.toString());
+  }
+
+  public void testLinkedClear() {
+    ListMultimap<String, Integer> map = create();
+    map.put("foo", 1);
+    map.put("foo", 2);
+    map.put("bar", 3);
+    List<Integer> foos = map.get("foo");
+    Collection<Integer> values = map.values();
+    assertEquals(asList(1, 2), foos);
+    ASSERT.that(values).hasContentsInOrder(1, 2, 3);
+    map.clear();
+    assertEquals(Collections.emptyList(), foos);
+    ASSERT.that(values).hasContentsInOrder();
+    assertEquals("[]", map.entries().toString());
+    assertEquals("{}", map.toString());
+  }
+
+  public void testLinkedKeySet() {
+    Multimap<String, Integer> map = create();
+    map.put("bar", 1);
+    map.put("foo", 2);
+    map.put("bar", 3);
+    map.put("bar", 4);
+    assertEquals("[bar, foo]", map.keySet().toString());
+    map.keySet().remove("bar");
+    assertEquals("{foo=[2]}", map.toString());
+  }
+
+  public void testLinkedKeys() {
+    Multimap<String, Integer> map = create();
+    map.put("bar", 1);
+    map.put("foo", 2);
+    map.put("bar", 3);
+    map.put("bar", 4);
+    assertEquals("[bar=1, foo=2, bar=3, bar=4]",
+        map.entries().toString());
+    ASSERT.that(map.keys()).hasContentsInOrder("bar", "foo", "bar", "bar");
+    map.keys().remove("bar"); // bar is no longer the first key!
+    assertEquals("{foo=[2], bar=[3, 4]}", map.toString());
+  }
+
+  public void testLinkedValues() {
+    Multimap<String, Integer> map = create();
+    map.put("bar", 1);
+    map.put("foo", 2);
+    map.put("bar", 3);
+    map.put("bar", 4);
+    assertEquals("[1, 2, 3, 4]", map.values().toString());
+    map.values().remove(2);
+    assertEquals("{bar=[1, 3, 4]}", map.toString());
+  }
+
+  public void testLinkedEntries() {
+    Multimap<String, Integer> map = create();
+    map.put("bar", 1);
+    map.put("foo", 2);
+    map.put("bar", 3);
+    Iterator<Map.Entry<String, Integer>> entries = map.entries().iterator();
+    Map.Entry<String, Integer> entry = entries.next();
+    assertEquals("bar", entry.getKey());
+    assertEquals(1, (int) entry.getValue());
+    entry = entries.next();
+    assertEquals("foo", entry.getKey());
+    assertEquals(2, (int) entry.getValue());
+    entry.setValue(4);
+    entry = entries.next();
+    assertEquals("bar", entry.getKey());
+    assertEquals(3, (int) entry.getValue());
+    assertFalse(entries.hasNext());
+    entries.remove();
+    assertEquals("{bar=[1], foo=[4]}", map.toString());
+  }
+
+  public void testLinkedAsMapEntries() {
+    Multimap<String, Integer> map = create();
+    map.put("bar", 1);
+    map.put("foo", 2);
+    map.put("bar", 3);
+    Iterator<Map.Entry<String, Collection<Integer>>> entries
+        = map.asMap().entrySet().iterator();
+    Map.Entry<String, Collection<Integer>> entry = entries.next();
+    assertEquals("bar", entry.getKey());
+    ASSERT.that(entry.getValue()).hasContentsInOrder(1, 3);
+    try {
+      entry.setValue(Arrays.<Integer>asList());
+      fail("UnsupportedOperationException expected");
+    } catch (UnsupportedOperationException expected) {}
+    entries.remove(); // clear
+    entry = entries.next();
+    assertEquals("foo", entry.getKey());
+    ASSERT.that(entry.getValue()).hasContentsInOrder(2);
+    assertFalse(entries.hasNext());
+    assertEquals("{foo=[2]}", map.toString());
+  }
+
+  /**
+   * Test calling setValue() on an entry returned by multimap.entries().
+   */
+  @Override public void testEntrySetValue() {
+    ListMultimap<String, Integer> multimap = create();
+    multimap.put("foo", 1);
+    multimap.put("bar", 3);
+    Collection<Map.Entry<String, Integer>> entries = multimap.entries();
+    Iterator<Map.Entry<String, Integer>> iterator = entries.iterator();
+    Map.Entry<String, Integer> entrya = iterator.next();
+    Map.Entry<String, Integer> entryb = iterator.next();
+
+    int oldValue = entrya.setValue(2);
+    assertEquals(1, oldValue);
+    assertFalse(multimap.containsEntry("foo", 1));
+    assertTrue(multimap.containsEntry("foo", 2));
+    assertTrue(multimap.containsEntry("bar", 3));
+    assertEquals(2, (int) entrya.getValue());
+    assertEquals(3, (int) entryb.getValue());
+  }
+
+  public void testEntriesAfterMultimapUpdate() {
+    ListMultimap<String, Integer> multimap = create();
+    multimap.put("foo", 2);
+    multimap.put("bar", 3);
+    Collection<Map.Entry<String, Integer>> entries = multimap.entries();
+    Iterator<Map.Entry<String, Integer>> iterator = entries.iterator();
+    Map.Entry<String, Integer> entrya = iterator.next();
+    Map.Entry<String, Integer> entryb = iterator.next();
+
+    assertEquals(2, (int) multimap.get("foo").set(0, 4));
+    assertFalse(multimap.containsEntry("foo", 2));
+    assertTrue(multimap.containsEntry("foo", 4));
+    assertTrue(multimap.containsEntry("bar", 3));
+    assertEquals(4, (int) entrya.getValue());
+    assertEquals(3, (int) entryb.getValue());
+
+    assertTrue(multimap.put("foo", 5));
+    assertTrue(multimap.containsEntry("foo", 5));
+    assertTrue(multimap.containsEntry("foo", 4));
+    assertTrue(multimap.containsEntry("bar", 3));
+    assertEquals(4, (int) entrya.getValue());
+    assertEquals(3, (int) entryb.getValue());
+  }
+
+  @SuppressWarnings("unchecked")
+  @GwtIncompatible("unreasonable slow")
+  public void testEntriesIteration() {
+    List<Entry<String, Integer>> addItems = ImmutableList.of(
+        Maps.immutableEntry("foo", 99),
+        Maps.immutableEntry("foo", 88),
+        Maps.immutableEntry("bar", 77));
+
+    for (final int startIndex : new int[] {0, 3, 5}) {
+      List<Entry<String, Integer>> list = Lists.newArrayList(
+          Maps.immutableEntry("foo", 2),
+          Maps.immutableEntry("foo", 3),
+          Maps.immutableEntry("bar", 4),
+          Maps.immutableEntry("bar", 5),
+          Maps.immutableEntry("foo", 6));
+      new ListIteratorTester<Entry<String, Integer>>(3, addItems,
+          ImmutableList.of(SUPPORTS_REMOVE), list, startIndex) {
+        private LinkedListMultimap<String, Integer> multimap;
+
+        @Override protected ListIterator<Entry<String, Integer>> newTargetIterator() {
+          multimap = create();
+          multimap.putAll("foo", asList(2, 3));
+          multimap.putAll("bar", asList(4, 5));
+          multimap.put("foo", 6);
+          return multimap.entries().listIterator(startIndex);
+        }
+
+        @Override protected void verify(List<Entry<String, Integer>> elements) {
+          assertEquals(elements, multimap.entries());
+        }
+      }.test();
+    }
+  }
+
+  @GwtIncompatible("unreasonable slow")
+  public void testKeysIteration() {
+    new IteratorTester<String>(6, MODIFIABLE, newArrayList("foo", "foo", "bar",
+        "bar", "foo"), IteratorTester.KnownOrder.KNOWN_ORDER) {
+      private Multimap<String, Integer> multimap;
+
+      @Override protected Iterator<String> newTargetIterator() {
+        multimap = create();
+        multimap.putAll("foo", asList(2, 3));
+        multimap.putAll("bar", asList(4, 5));
+        multimap.putAll("foo", asList(6));
+        return multimap.keys().iterator();
+      }
+
+      @Override protected void verify(List<String> elements) {
+        assertEquals(elements, Lists.newArrayList(multimap.keys()));
+      }
+    }.test();
+  }
+
+  @GwtIncompatible("unreasonable slow")
+  public void testValuesIteration() {
+    List<Integer> addItems = ImmutableList.of(99, 88, 77);
+
+    for (final int startIndex : new int[] {0, 3, 5}) {
+      new ListIteratorTester<Integer>(3, addItems,
+          ImmutableList.of(SUPPORTS_REMOVE, SUPPORTS_SET),
+          Lists.newArrayList(2, 3, 4, 5, 6), startIndex) {
+        private LinkedListMultimap<String, Integer> multimap;
+
+        @Override protected ListIterator<Integer> newTargetIterator() {
+          multimap = create();
+          multimap.put("bar", 2);
+          multimap.putAll("foo", Arrays.asList(3, 4));
+          multimap.put("bar", 5);
+          multimap.put("foo", 6);
+          return multimap.values().listIterator(startIndex);
+        }
+
+        @Override protected void verify(List<Integer> elements) {
+          assertEquals(elements, multimap.values());
+        }
+      }.test();
+    }
+  }
+
+  @GwtIncompatible("unreasonable slow")
+  public void testKeySetIteration() {
+    new IteratorTester<String>(6, MODIFIABLE, newLinkedHashSet(asList(
+        "foo", "bar", "baz", "dog", "cat")),
+        IteratorTester.KnownOrder.KNOWN_ORDER) {
+      private Multimap<String, Integer> multimap;
+
+      @Override protected Iterator<String> newTargetIterator() {
+        multimap = create();
+        multimap.putAll("foo", asList(2, 3));
+        multimap.putAll("bar", asList(4, 5));
+        multimap.putAll("foo", asList(6));
+        multimap.putAll("baz", asList(7, 8));
+        multimap.putAll("dog", asList(9));
+        multimap.putAll("bar", asList(10, 11));
+        multimap.putAll("cat", asList(12, 13, 14));
+        return multimap.keySet().iterator();
+      }
+
+      @Override protected void verify(List<String> elements) {
+        assertEquals(newHashSet(elements), multimap.keySet());
+      }
+    }.test();
+  }
+
+  @SuppressWarnings("unchecked")
+  @GwtIncompatible("unreasonable slow")
+  public void testAsSetIteration() {
+    Set<Entry<String, Collection<Integer>>> set = Sets.newLinkedHashSet(asList(
+        Maps.immutableEntry("foo",
+            (Collection<Integer>) asList(2, 3, 6)),
+        Maps.immutableEntry("bar",
+            (Collection<Integer>) asList(4, 5, 10, 11)),
+        Maps.immutableEntry("baz",
+            (Collection<Integer>) asList(7, 8)),
+        Maps.immutableEntry("dog",
+            (Collection<Integer>) asList(9)),
+        Maps.immutableEntry("cat",
+            (Collection<Integer>) asList(12, 13, 14))
+    ));
+
+    new IteratorTester<Entry<String, Collection<Integer>>>(6, MODIFIABLE, set,
+        IteratorTester.KnownOrder.KNOWN_ORDER) {
+      private Multimap<String, Integer> multimap;
+
+      @Override protected Iterator<Entry<String, Collection<Integer>>>
+          newTargetIterator() {
+        multimap = create();
+        multimap.putAll("foo", asList(2, 3));
+        multimap.putAll("bar", asList(4, 5));
+        multimap.putAll("foo", asList(6));
+        multimap.putAll("baz", asList(7, 8));
+        multimap.putAll("dog", asList(9));
+        multimap.putAll("bar", asList(10, 11));
+        multimap.putAll("cat", asList(12, 13, 14));
+        return multimap.asMap().entrySet().iterator();
+      }
+
+      @Override protected void verify(
+          List<Entry<String, Collection<Integer>>> elements) {
+        assertEquals(newHashSet(elements), multimap.asMap().entrySet());
+      }
+    }.test();
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/ListsTest.java b/guava-tests/test/com/google/common/collect/ListsTest.java
new file mode 100644
index 0000000..cd7f710
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/ListsTest.java
@@ -0,0 +1,862 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.collect.testing.IteratorFeature.UNMODIFIABLE;
+import static java.util.Arrays.asList;
+import static java.util.Collections.singletonList;
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.base.Function;
+import com.google.common.base.Functions;
+import com.google.common.collect.testing.IteratorTester;
+import com.google.common.collect.testing.ListTestSuiteBuilder;
+import com.google.common.collect.testing.SampleElements;
+import com.google.common.collect.testing.TestListGenerator;
+import com.google.common.collect.testing.TestStringListGenerator;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.ListFeature;
+import com.google.common.testing.NullPointerTester;
+import com.google.common.testing.SerializableTester;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import org.easymock.EasyMock;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.NoSuchElementException;
+import java.util.RandomAccess;
+
+/**
+ * Unit test for {@code Lists}.
+ *
+ * @author Kevin Bourrillion
+ * @author Mike Bostock
+ * @author Jared Levy
+ */
+@GwtCompatible(emulated = true)
+public class ListsTest extends TestCase {
+
+  private static final Collection<Integer> SOME_COLLECTION
+      = asList(0, 1, 1);
+
+  private static final Iterable<Integer> SOME_ITERABLE = new SomeIterable();
+
+  private static class SomeIterable implements Iterable<Integer>, Serializable {
+    @Override
+    public Iterator<Integer> iterator() {
+      return SOME_COLLECTION.iterator();
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  private static final List<Integer> SOME_LIST
+      = Lists.newArrayList(1, 2, 3, 4);
+
+  private static final List<Integer> SOME_SEQUENTIAL_LIST
+      = Lists.newLinkedList(asList(1, 2, 3, 4));
+
+  private static final List<String> SOME_STRING_LIST
+      = asList("1", "2", "3", "4");
+
+  private static final Function<Number, String> SOME_FUNCTION
+      = new SomeFunction();
+
+  private static class SomeFunction
+      implements Function<Number, String>, Serializable {
+    @Override
+    public String apply(Number n) {
+      return String.valueOf(n);
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  @GwtIncompatible("suite")
+  public static Test suite() {
+    TestSuite suite = new TestSuite();
+    suite.addTestSuite(ListsTest.class);
+
+    suite.addTest(ListTestSuiteBuilder.using(new TestStringListGenerator() {
+          @Override protected List<String> create(String[] elements) {
+            String[] rest = new String[elements.length - 1];
+            Platform.unsafeArrayCopy(elements, 1, rest, 0, elements.length - 1);
+            return Lists.asList(elements[0], rest);
+          }
+        })
+        .named("Lists.asList, 2 parameter")
+        .withFeatures(CollectionSize.SEVERAL, CollectionSize.ONE,
+            CollectionFeature.ALLOWS_NULL_VALUES)
+        .createTestSuite());
+
+    suite.addTest(ListTestSuiteBuilder.using(new TestStringListGenerator() {
+          @Override protected List<String> create(String[] elements) {
+            String[] rest = new String[elements.length - 2];
+            Platform.unsafeArrayCopy(elements, 2, rest, 0, elements.length - 2);
+            return Lists.asList(elements[0], elements[1], rest);
+          }
+        })
+        .named("Lists.asList, 3 parameter")
+        .withFeatures(CollectionSize.SEVERAL,
+            CollectionFeature.ALLOWS_NULL_VALUES)
+        .createTestSuite());
+
+    final Function<String, String> removeFirst
+        = new Function<String, String>() {
+            @Override
+            public String apply(String from) {
+              return (from.length() == 0) ? from : from.substring(1);
+            }
+          };
+
+    suite.addTest(ListTestSuiteBuilder.using(new TestStringListGenerator() {
+          @Override protected List<String> create(String[] elements) {
+            List<String> fromList = Lists.newArrayList();
+            for (String element : elements) {
+              fromList.add("q" + checkNotNull(element));
+            }
+            return Lists.transform(fromList, removeFirst);
+          }
+        })
+        .named("Lists.transform, random access, no nulls")
+        .withFeatures(CollectionSize.ANY,
+            ListFeature.REMOVE_OPERATIONS,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .createTestSuite());
+
+    suite.addTest(ListTestSuiteBuilder.using(new TestStringListGenerator() {
+          @Override protected List<String> create(String[] elements) {
+            List<String> fromList = Lists.newLinkedList();
+            for (String element : elements) {
+              fromList.add("q" + checkNotNull(element));
+            }
+            return Lists.transform(fromList, removeFirst);
+          }
+        })
+        .named("Lists.transform, sequential access, no nulls")
+        .withFeatures(CollectionSize.ANY,
+            ListFeature.REMOVE_OPERATIONS,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .createTestSuite());
+
+    suite.addTest(ListTestSuiteBuilder.using(new TestStringListGenerator() {
+          @Override protected List<String> create(String[] elements) {
+            List<String> fromList = Lists.newArrayList(elements);
+            return Lists.transform(fromList, Functions.<String>identity());
+          }
+        })
+        .named("Lists.transform, random access, nulls")
+        .withFeatures(CollectionSize.ANY,
+            ListFeature.REMOVE_OPERATIONS,
+            CollectionFeature.ALLOWS_NULL_VALUES)
+        .createTestSuite());
+
+    suite.addTest(ListTestSuiteBuilder.using(new TestStringListGenerator() {
+          @Override protected List<String> create(String[] elements) {
+            List<String> fromList =
+                Lists.newLinkedList(asList(elements));
+            return Lists.transform(fromList, Functions.<String>identity());
+          }
+        })
+        .named("Lists.transform, sequential access, nulls")
+        .withFeatures(CollectionSize.ANY,
+            ListFeature.REMOVE_OPERATIONS,
+            CollectionFeature.ALLOWS_NULL_VALUES)
+        .createTestSuite());
+
+    suite.addTest(ListTestSuiteBuilder.using(new TestStringListGenerator() {
+      @Override protected List<String> create(String[] elements) {
+        List<String> list = Lists.newArrayList();
+        for (int i = elements.length - 1; i >= 0; i--)
+          list.add(elements[i]);
+        return Lists.reverse(list);
+      }
+    }).named("Lists.reverse[ArrayList]").withFeatures(CollectionSize.ANY,
+        CollectionFeature.ALLOWS_NULL_VALUES, ListFeature.GENERAL_PURPOSE)
+        .createTestSuite());
+
+    suite.addTest(ListTestSuiteBuilder.using(new TestStringListGenerator() {
+      @Override protected List<String> create(String[] elements) {
+        String[] reverseElements = new String[elements.length];
+        for (int i = elements.length - 1, j = 0; i >= 0; i--, j++)
+          reverseElements[j] = elements[i];
+        return Lists.reverse(asList(reverseElements));
+      }
+    }).named("Lists.reverse[Arrays.asList]").withFeatures(CollectionSize.ANY,
+        CollectionFeature.ALLOWS_NULL_VALUES, ListFeature.SUPPORTS_SET)
+        .createTestSuite());
+
+    suite.addTest(ListTestSuiteBuilder.using(new TestStringListGenerator() {
+      @Override protected List<String> create(String[] elements) {
+        List<String> list = Lists.newLinkedList();
+        for (int i = elements.length - 1; i >= 0; i--)
+          list.add(elements[i]);
+        return Lists.reverse(list);
+      }
+    }).named("Lists.reverse[LinkedList]").withFeatures(CollectionSize.ANY,
+        CollectionFeature.ALLOWS_NULL_VALUES, ListFeature.GENERAL_PURPOSE)
+        .createTestSuite());
+
+    suite.addTest(ListTestSuiteBuilder.using(new TestStringListGenerator() {
+      @Override protected List<String> create(String[] elements) {
+        ImmutableList.Builder<String> builder = ImmutableList.builder();
+        for (int i = elements.length - 1; i >= 0; i--)
+          builder.add(elements[i]);
+        return Lists.reverse(builder.build());
+      }
+    }).named("Lists.reverse[ImmutableList]").withFeatures(CollectionSize.ANY,
+        CollectionFeature.ALLOWS_NULL_QUERIES)
+        .createTestSuite());
+
+    suite.addTest(
+        ListTestSuiteBuilder.using(new TestListGenerator<Character>() {
+          @Override public List<Character> create(Object... elements) {
+            char[] chars = new char[elements.length];
+            for (int i = 0; i < elements.length; i++)
+              chars[i] = (Character) elements[i];
+            return Lists.charactersOf(String.copyValueOf(chars));
+          }
+
+          @Override public Character[] createArray(int length) {
+            return new Character[length];
+          }
+
+          @Override public Iterable<Character> order(
+              List<Character> insertionOrder) {
+            return ImmutableList.copyOf(insertionOrder);
+          }
+
+          @Override public SampleElements<Character> samples() {
+            return new SampleElements<Character>('a', 'b', 'c', 'd', 'e');
+          }
+        }).named("Lists.charactersOf[String]").withFeatures(
+            CollectionSize.ANY, CollectionFeature.ALLOWS_NULL_QUERIES)
+            .createTestSuite());
+
+    suite.addTest(
+        ListTestSuiteBuilder.using(new TestListGenerator<Character>() {
+          @Override public List<Character> create(Object... elements) {
+            char[] chars = new char[elements.length];
+            for (int i = 0; i < elements.length; i++)
+              chars[i] = (Character) elements[i];
+            StringBuilder str = new StringBuilder();
+            str.append(chars);
+            return Lists.charactersOf(str);
+          }
+
+          @Override public Character[] createArray(int length) {
+            return new Character[length];
+          }
+
+          @Override public Iterable<Character> order(
+              List<Character> insertionOrder) {
+            return ImmutableList.copyOf(insertionOrder);
+          }
+
+          @Override public SampleElements<Character> samples() {
+            return new SampleElements<Character>('a', 'b', 'c', 'd', 'e');
+          }
+        }).named("Lists.charactersOf[CharSequence]").withFeatures(
+            CollectionSize.ANY, CollectionFeature.ALLOWS_NULL_QUERIES)
+            .createTestSuite());
+
+    return suite;
+  }
+
+  public void testCharactersOfIsView() {
+    StringBuilder builder = new StringBuilder("abc");
+    List<Character> chars = Lists.charactersOf(builder);
+    assertEquals(asList('a', 'b', 'c'), chars);
+    builder.append("def");
+    assertEquals(
+        asList('a', 'b', 'c', 'd', 'e', 'f'), chars);
+    builder.deleteCharAt(5);
+    assertEquals(
+        asList('a', 'b', 'c', 'd', 'e'), chars);
+  }
+
+  public void testNewArrayListEmpty() {
+    ArrayList<Integer> list = Lists.newArrayList();
+    assertEquals(Collections.emptyList(), list);
+  }
+
+  public void testNewArrayListWithCapacity() {
+    ArrayList<Integer> list = Lists.newArrayListWithCapacity(0);
+    assertEquals(Collections.emptyList(), list);
+
+    ArrayList<Integer> bigger = Lists.newArrayListWithCapacity(256);
+    assertEquals(Collections.emptyList(), bigger);
+  }
+
+  public void testNewArrayListWithCapacity_negative() {
+    try {
+      Lists.newArrayListWithCapacity(-1);
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  public void testNewArrayListWithExpectedSize() {
+    ArrayList<Integer> list = Lists.newArrayListWithExpectedSize(0);
+    assertEquals(Collections.emptyList(), list);
+
+    ArrayList<Integer> bigger = Lists.newArrayListWithExpectedSize(256);
+    assertEquals(Collections.emptyList(), bigger);
+  }
+
+  public void testNewArrayListWithExpectedSize_negative() {
+    try {
+      Lists.newArrayListWithExpectedSize(-1);
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  public void testNewArrayListVarArgs() {
+    ArrayList<Integer> list = Lists.newArrayList(0, 1, 1);
+    assertEquals(SOME_COLLECTION, list);
+  }
+
+  public void testComputeArrayListCapacity() {
+    assertEquals(5, Lists.computeArrayListCapacity(0));
+    assertEquals(13, Lists.computeArrayListCapacity(8));
+    assertEquals(89, Lists.computeArrayListCapacity(77));
+    assertEquals(22000005, Lists.computeArrayListCapacity(20000000));
+    assertEquals(Integer.MAX_VALUE,
+        Lists.computeArrayListCapacity(Integer.MAX_VALUE - 1000));
+  }
+
+  public void testNewArrayListFromCollection() {
+    ArrayList<Integer> list = Lists.newArrayList(SOME_COLLECTION);
+    assertEquals(SOME_COLLECTION, list);
+  }
+
+  public void testNewArrayListFromIterable() {
+    ArrayList<Integer> list = Lists.newArrayList(SOME_ITERABLE);
+    assertEquals(SOME_COLLECTION, list);
+  }
+
+  public void testNewArrayListFromIterator() {
+    ArrayList<Integer> list = Lists.newArrayList(SOME_COLLECTION.iterator());
+    assertEquals(SOME_COLLECTION, list);
+  }
+
+  public void testNewLinkedListEmpty() {
+    LinkedList<Integer> list = Lists.newLinkedList();
+    assertEquals(Collections.emptyList(), list);
+  }
+
+  public void testNewLinkedListFromCollection() {
+    LinkedList<Integer> list = Lists.newLinkedList(SOME_COLLECTION);
+    assertEquals(SOME_COLLECTION, list);
+  }
+
+  public void testNewLinkedListFromIterable() {
+    LinkedList<Integer> list = Lists.newLinkedList(SOME_ITERABLE);
+    assertEquals(SOME_COLLECTION, list);
+  }
+
+  @GwtIncompatible("NullPointerTester")
+  public void testNullPointerExceptions() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.testAllPublicStaticMethods(Lists.class);
+  }
+
+  /**
+   * This is just here to illustrate how {@code Arrays#asList} differs from
+   * {@code Lists#newArrayList}.
+   */
+  public void testArraysAsList() {
+    List<String> ourWay = Lists.newArrayList("foo", "bar", "baz");
+    List<String> otherWay = asList("foo", "bar", "baz");
+
+    // They're logically equal
+    assertEquals(ourWay, otherWay);
+
+    // The result of Arrays.asList() is mutable
+    otherWay.set(0, "FOO");
+    assertEquals("FOO", otherWay.get(0));
+
+    // But it can't grow
+    try {
+      otherWay.add("nope");
+      fail("no exception thrown");
+    } catch (UnsupportedOperationException expected) {
+    }
+
+    // And it can't shrink
+    try {
+      otherWay.remove(2);
+      fail("no exception thrown");
+    } catch (UnsupportedOperationException expected) {
+    }
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testAsList1() {
+    List<String> list = Lists.asList("foo", new String[] { "bar", "baz" });
+    checkFooBarBazList(list);
+    SerializableTester.reserializeAndAssert(list);
+    assertTrue(list instanceof RandomAccess);
+
+    new IteratorTester<String>(5, UNMODIFIABLE,
+        asList("foo", "bar", "baz"),
+        IteratorTester.KnownOrder.KNOWN_ORDER) {
+      @Override protected Iterator<String> newTargetIterator() {
+        return Lists.asList("foo", new String[] {"bar", "baz"}).iterator();
+      }
+    }.test();
+  }
+
+  private void checkFooBarBazList(List<String> list) {
+    ASSERT.that(list).hasContentsInOrder("foo", "bar", "baz");
+    assertEquals(3, list.size());
+    assertIndexIsOutOfBounds(list, -1);
+    assertEquals("foo", list.get(0));
+    assertEquals("bar", list.get(1));
+    assertEquals("baz", list.get(2));
+    assertIndexIsOutOfBounds(list, 3);
+  }
+
+  public void testAsList1Small() {
+    List<String> list = Lists.asList("foo", new String[0]);
+    ASSERT.that(list).hasContentsInOrder("foo");
+    assertEquals(1, list.size());
+    assertIndexIsOutOfBounds(list, -1);
+    assertEquals("foo", list.get(0));
+    assertIndexIsOutOfBounds(list, 1);
+    assertTrue(list instanceof RandomAccess);
+
+    new IteratorTester<String>(3, UNMODIFIABLE, singletonList("foo"),
+        IteratorTester.KnownOrder.KNOWN_ORDER) {
+      @Override protected Iterator<String> newTargetIterator() {
+        return Lists.asList("foo", new String[0]).iterator();
+      }
+    }.test();
+  }
+
+  public void testAsList2() {
+    List<String> list = Lists.asList("foo", "bar", new String[] { "baz" });
+    checkFooBarBazList(list);
+    assertTrue(list instanceof RandomAccess);
+
+    new IteratorTester<String>(5, UNMODIFIABLE, asList("foo", "bar",
+        "baz"), IteratorTester.KnownOrder.KNOWN_ORDER) {
+      @Override protected Iterator<String> newTargetIterator() {
+        return Lists.asList("foo", "bar", new String[] {"baz"}).iterator();
+      }
+    }.test();
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testAsList2Small() {
+    List<String> list = Lists.asList("foo", "bar", new String[0]);
+    ASSERT.that(list).hasContentsInOrder("foo", "bar");
+    assertEquals(2, list.size());
+    assertIndexIsOutOfBounds(list, -1);
+    assertEquals("foo", list.get(0));
+    assertEquals("bar", list.get(1));
+    assertIndexIsOutOfBounds(list, 2);
+    SerializableTester.reserializeAndAssert(list);
+    assertTrue(list instanceof RandomAccess);
+
+    new IteratorTester<String>(5, UNMODIFIABLE, asList("foo", "bar"),
+        IteratorTester.KnownOrder.KNOWN_ORDER) {
+      @Override protected Iterator<String> newTargetIterator() {
+        return Lists.asList("foo", "bar", new String[0]).iterator();
+      }
+    }.test();
+  }
+
+  private static void assertIndexIsOutOfBounds(List<String> list, int index) {
+    try {
+      list.get(index);
+      fail();
+    } catch (IndexOutOfBoundsException expected) {
+    }
+  }
+
+  public void testReverseViewRandomAccess() {
+    List<Integer> fromList = Lists.newArrayList(SOME_LIST);
+    List<Integer> toList = Lists.reverse(fromList);
+    assertReverseView(fromList, toList);
+  }
+
+  public void testReverseViewSequential() {
+    List<Integer> fromList = Lists.newLinkedList(SOME_SEQUENTIAL_LIST);
+    List<Integer> toList = Lists.reverse(fromList);
+    assertReverseView(fromList, toList);
+  }
+
+  private static void assertReverseView(List<Integer> fromList,
+      List<Integer> toList) {
+    /* fromList modifications reflected in toList */
+    fromList.set(0, 5);
+    assertEquals(asList(4, 3, 2, 5), toList);
+    fromList.add(6);
+    assertEquals(asList(6, 4, 3, 2, 5), toList);
+    fromList.add(2, 9);
+    assertEquals(asList(6, 4, 3, 9, 2, 5), toList);
+    fromList.remove(Integer.valueOf(2));
+    assertEquals(asList(6, 4, 3, 9, 5), toList);
+    fromList.remove(3);
+    assertEquals(asList(6, 3, 9, 5), toList);
+
+    /* toList modifications reflected in fromList */
+    toList.remove(0);
+    assertEquals(asList(5, 9, 3), fromList);
+    toList.add(7);
+    assertEquals(asList(7, 5, 9, 3), fromList);
+    toList.add(5);
+    assertEquals(asList(5, 7, 5, 9, 3), fromList);
+    toList.remove(Integer.valueOf(5));
+    assertEquals(asList(5, 7, 9, 3), fromList);
+    toList.set(1, 8);
+    assertEquals(asList(5, 7, 8, 3), fromList);
+    toList.clear();
+    assertEquals(Collections.emptyList(), fromList);
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testTransformEqualityRandomAccess() {
+    List<String> list = Lists.transform(SOME_LIST, SOME_FUNCTION);
+    assertEquals(SOME_STRING_LIST, list);
+    SerializableTester.reserializeAndAssert(list);
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testTransformEqualitySequential() {
+    List<String> list = Lists.transform(SOME_SEQUENTIAL_LIST, SOME_FUNCTION);
+    assertEquals(SOME_STRING_LIST, list);
+    SerializableTester.reserializeAndAssert(list);
+  }
+
+  public void testTransformHashCodeRandomAccess() {
+    List<String> list = Lists.transform(SOME_LIST, SOME_FUNCTION);
+    assertEquals(SOME_STRING_LIST.hashCode(), list.hashCode());
+  }
+
+  public void testTransformHashCodeSequential() {
+    List<String> list = Lists.transform(SOME_SEQUENTIAL_LIST, SOME_FUNCTION);
+    assertEquals(SOME_STRING_LIST.hashCode(), list.hashCode());
+  }
+
+  public void testTransformModifiableRandomAccess() {
+    List<Integer> fromList = Lists.newArrayList(SOME_LIST);
+    List<String> list = Lists.transform(fromList, SOME_FUNCTION);
+    assertTransformModifiable(list);
+  }
+
+  public void testTransformModifiableSequential() {
+    List<Integer> fromList = Lists.newLinkedList(SOME_SEQUENTIAL_LIST);
+    List<String> list = Lists.transform(fromList, SOME_FUNCTION);
+    assertTransformModifiable(list);
+  }
+
+  private static void assertTransformModifiable(List<String> list) {
+    try {
+      list.add("5");
+      fail("transformed list is addable");
+    } catch (UnsupportedOperationException expected) {}
+    list.remove(0);
+    assertEquals(asList("2", "3", "4"), list);
+    list.remove("3");
+    assertEquals(asList("2", "4"), list);
+    try {
+      list.set(0, "5");
+      fail("transformed list is setable");
+    } catch (UnsupportedOperationException expected) {}
+    list.clear();
+    assertEquals(Collections.emptyList(), list);
+  }
+
+  public void testTransformViewRandomAccess() {
+    List<Integer> fromList = Lists.newArrayList(SOME_LIST);
+    List<String> toList = Lists.transform(fromList, SOME_FUNCTION);
+    assertTransformView(fromList, toList);
+  }
+
+  public void testTransformViewSequential() {
+    List<Integer> fromList = Lists.newLinkedList(SOME_SEQUENTIAL_LIST);
+    List<String> toList = Lists.transform(fromList, SOME_FUNCTION);
+    assertTransformView(fromList, toList);
+  }
+
+  private static void assertTransformView(List<Integer> fromList,
+      List<String> toList) {
+    /* fromList modifications reflected in toList */
+    fromList.set(0, 5);
+    assertEquals(asList("5", "2", "3", "4"), toList);
+    fromList.add(6);
+    assertEquals(asList("5", "2", "3", "4", "6"), toList);
+    fromList.remove(Integer.valueOf(2));
+    assertEquals(asList("5", "3", "4", "6"), toList);
+    fromList.remove(2);
+    assertEquals(asList("5", "3", "6"), toList);
+
+    /* toList modifications reflected in fromList */
+    toList.remove(2);
+    assertEquals(asList(5, 3), fromList);
+    toList.remove("5");
+    assertEquals(asList(3), fromList);
+    toList.clear();
+    assertEquals(Collections.emptyList(), fromList);
+  }
+
+  public void testTransformRandomAccess() {
+    List<String> list = Lists.transform(SOME_LIST, SOME_FUNCTION);
+    assertTrue(list instanceof RandomAccess);
+  }
+
+  public void testTransformSequential() {
+    List<String> list = Lists.transform(SOME_SEQUENTIAL_LIST, SOME_FUNCTION);
+    assertFalse(list instanceof RandomAccess);
+  }
+
+  public void testTransformListIteratorRandomAccess() {
+    List<Integer> fromList = Lists.newArrayList(SOME_LIST);
+    List<String> list = Lists.transform(fromList, SOME_FUNCTION);
+    assertTransformListIterator(list);
+  }
+
+  public void testTransformListIteratorSequential() {
+    List<Integer> fromList = Lists.newLinkedList(SOME_SEQUENTIAL_LIST);
+    List<String> list = Lists.transform(fromList, SOME_FUNCTION);
+    assertTransformListIterator(list);
+  }
+
+  private static void assertTransformListIterator(List<String> list) {
+    ListIterator<String> iterator = list.listIterator(1);
+    assertEquals(1, iterator.nextIndex());
+    assertEquals("2", iterator.next());
+    assertEquals("3", iterator.next());
+    assertEquals("4", iterator.next());
+    assertEquals(4, iterator.nextIndex());
+    try {
+      iterator.next();
+      fail("did not detect end of list");
+    } catch (NoSuchElementException expected) {}
+    assertEquals(3, iterator.previousIndex());
+    assertEquals("4", iterator.previous());
+    assertEquals("3", iterator.previous());
+    assertEquals("2", iterator.previous());
+    assertTrue(iterator.hasPrevious());
+    assertEquals("1", iterator.previous());
+    assertFalse(iterator.hasPrevious());
+    assertEquals(-1, iterator.previousIndex());
+    try {
+      iterator.previous();
+      fail("did not detect beginning of list");
+    } catch (NoSuchElementException expected) {}
+    iterator.remove();
+    assertEquals(asList("2", "3", "4"), list);
+    assertFalse(list.isEmpty());
+
+    // An UnsupportedOperationException or IllegalStateException may occur.
+    try {
+      iterator.add("1");
+      fail("transformed list iterator is addable");
+    } catch (UnsupportedOperationException expected) {
+    } catch (IllegalStateException expected) {}
+    try {
+      iterator.set("1");
+      fail("transformed list iterator is settable");
+    } catch (UnsupportedOperationException expected) {
+    } catch (IllegalStateException expected) {}
+  }
+
+  public void testTransformIteratorRandomAccess() {
+    List<Integer> fromList = Lists.newArrayList(SOME_LIST);
+    List<String> list = Lists.transform(fromList, SOME_FUNCTION);
+    assertTransformIterator(list);
+  }
+
+  public void testTransformIteratorSequential() {
+    List<Integer> fromList = Lists.newLinkedList(SOME_SEQUENTIAL_LIST);
+    List<String> list = Lists.transform(fromList, SOME_FUNCTION);
+    assertTransformIterator(list);
+  }
+
+  /**
+   * We use this class to avoid the need to suppress generics checks with
+   * easy mock.
+   */
+  private interface IntegerList extends List<Integer> {}
+
+  /**
+   * This test depends on the fact that {@code AbstractSequentialList.iterator}
+   * transforms the {@code iterator()} call into a call on {@code
+   * listIterator(int)}. This is fine because the behavior is clearly
+   * documented so it's not expected to change.
+   */
+  @GwtIncompatible("EsayMock")
+  public void testTransformedSequentialIterationUsesBackingListIterationOnly() {
+    List<Integer> randomAccessList = Lists.newArrayList(SOME_SEQUENTIAL_LIST);
+    ListIterator<Integer> sampleListIterator =
+        SOME_SEQUENTIAL_LIST.listIterator();
+    List<Integer> listMock = EasyMock.createMock(IntegerList.class);
+    EasyMock.expect(listMock.listIterator(0)).andReturn(sampleListIterator);
+    EasyMock.replay(listMock);
+    List<String> transform = Lists.transform(listMock, SOME_FUNCTION);
+    assertTrue(Iterables.elementsEqual(
+        transform, Lists.transform(randomAccessList, SOME_FUNCTION)));
+    EasyMock.verify(listMock);
+  }
+
+  private static void assertTransformIterator(List<String> list) {
+    Iterator<String> iterator = list.iterator();
+    assertTrue(iterator.hasNext());
+    assertEquals("1", iterator.next());
+    assertTrue(iterator.hasNext());
+    assertEquals("2", iterator.next());
+    assertTrue(iterator.hasNext());
+    assertEquals("3", iterator.next());
+    assertTrue(iterator.hasNext());
+    assertEquals("4", iterator.next());
+    assertFalse(iterator.hasNext());
+    try {
+      iterator.next();
+      fail("did not detect end of list");
+    } catch (NoSuchElementException expected) {}
+    iterator.remove();
+    assertEquals(asList("1", "2", "3"), list);
+    assertFalse(iterator.hasNext());
+  }
+
+  public void testPartition_badSize() {
+    List<Integer> source = Collections.singletonList(1);
+    try {
+      Lists.partition(source, 0);
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  public void testPartition_empty() {
+    List<Integer> source = Collections.emptyList();
+    List<List<Integer>> partitions = Lists.partition(source, 1);
+    assertTrue(partitions.isEmpty());
+    assertEquals(0, partitions.size());
+  }
+
+  public void testPartition_1_1() {
+    List<Integer> source = Collections.singletonList(1);
+    List<List<Integer>> partitions = Lists.partition(source, 1);
+    assertEquals(1, partitions.size());
+    assertEquals(Collections.singletonList(1), partitions.get(0));
+  }
+
+  public void testPartition_1_2() {
+    List<Integer> source = Collections.singletonList(1);
+    List<List<Integer>> partitions = Lists.partition(source, 2);
+    assertEquals(1, partitions.size());
+    assertEquals(Collections.singletonList(1), partitions.get(0));
+  }
+
+  public void testPartition_2_1() {
+    List<Integer> source = asList(1, 2);
+    List<List<Integer>> partitions = Lists.partition(source, 1);
+    assertEquals(2, partitions.size());
+    assertEquals(Collections.singletonList(1), partitions.get(0));
+    assertEquals(Collections.singletonList(2), partitions.get(1));
+  }
+
+  public void testPartition_3_2() {
+    List<Integer> source = asList(1, 2, 3);
+    List<List<Integer>> partitions = Lists.partition(source, 2);
+    assertEquals(2, partitions.size());
+    assertEquals(asList(1, 2), partitions.get(0));
+    assertEquals(asList(3), partitions.get(1));
+  }
+
+  @GwtIncompatible("ArrayList.subList doesn't implement RandomAccess in GWT.")
+  public void testPartitionRandomAccessTrue() {
+    List<Integer> source = asList(1, 2, 3);
+    List<List<Integer>> partitions = Lists.partition(source, 2);
+
+    assertTrue("partition should be RandomAccess, but not: "
+        + partitions.getClass(),
+        partitions instanceof RandomAccess);
+
+    assertTrue("partition[0] should be RandomAccess, but not: "
+        + partitions.get(0).getClass(),
+        partitions.get(0) instanceof RandomAccess);
+
+    assertTrue("partition[1] should be RandomAccess, but not: "
+        + partitions.get(1).getClass(),
+        partitions.get(1) instanceof RandomAccess);
+  }
+
+  public void testPartitionRandomAccessFalse() {
+    List<Integer> source = Lists.newLinkedList(asList(1, 2, 3));
+    List<List<Integer>> partitions = Lists.partition(source, 2);
+    assertFalse(partitions instanceof RandomAccess);
+    assertFalse(partitions.get(0) instanceof RandomAccess);
+    assertFalse(partitions.get(1) instanceof RandomAccess);
+  }
+
+  // TODO: use the ListTestSuiteBuilder
+
+  public void testPartition_view() {
+    List<Integer> list = asList(1, 2, 3);
+    List<List<Integer>> partitions = Lists.partition(list, 3);
+
+    // Changes before the partition is retrieved are reflected
+    list.set(0, 3);
+
+    Iterator<List<Integer>> iterator = partitions.iterator();
+
+    // Changes before the partition is retrieved are reflected
+    list.set(1, 4);
+
+    List<Integer> first = iterator.next();
+
+    // Changes after are too (unlike Iterables.partition)
+    list.set(2, 5);
+
+    assertEquals(asList(3, 4, 5), first);
+
+    // Changes to a sublist also write through to the original list
+    first.set(1, 6);
+    assertEquals(asList(3, 6, 5), list);
+  }
+
+  public void testPartitionSize_1() {
+    List<Integer> list = asList(1, 2, 3);
+    assertEquals(1, Lists.partition(list, Integer.MAX_VALUE).size());
+    assertEquals(1, Lists.partition(list, Integer.MAX_VALUE - 1).size());
+  }
+
+  @GwtIncompatible("cannot do such a big explicit copy")
+  public void testPartitionSize_2() {
+    assertEquals(2, Lists.partition(Collections.nCopies(0x40000001, 1), 0x40000000).size());
+  }
+
+  // These tests are quick and basic and don't actually show unmodifiability...
+}
diff --git a/guava-tests/test/com/google/common/collect/MapConstraintsTest.java b/guava-tests/test/com/google/common/collect/MapConstraintsTest.java
new file mode 100644
index 0000000..6cf647b
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/MapConstraintsTest.java
@@ -0,0 +1,663 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.collect.testing.Helpers.nefariousMapEntry;
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.base.Supplier;
+import com.google.common.testing.SerializableTester;
+
+import junit.framework.TestCase;
+
+import java.io.Serializable;
+import java.util.AbstractMap;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Queue;
+import java.util.RandomAccess;
+import java.util.Set;
+import java.util.SortedSet;
+
+/**
+ * Tests for {@code MapConstraints}.
+ *
+ * @author Mike Bostock
+ * @author Jared Levy
+ */
+@GwtCompatible(emulated = true)
+public class MapConstraintsTest extends TestCase {
+
+  private static final String TEST_KEY = "test";
+
+  private static final Integer TEST_VALUE = 42;
+
+  static final class TestKeyException extends IllegalArgumentException {
+    private static final long serialVersionUID = 0;
+  }
+
+  static final class TestValueException extends IllegalArgumentException {
+    private static final long serialVersionUID = 0;
+  }
+
+  static final MapConstraint<String, Integer> TEST_CONSTRAINT
+      = new TestConstraint();
+
+  private static final class TestConstraint
+      implements MapConstraint<String, Integer>, Serializable {
+    @Override
+    public void checkKeyValue(String key, Integer value) {
+      if (TEST_KEY.equals(key)) {
+        throw new TestKeyException();
+      }
+      if (TEST_VALUE.equals(value)) {
+        throw new TestValueException();
+      }
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  public void testNotNull() {
+    MapConstraint<Object, Object> constraint = MapConstraints.notNull();
+    constraint.checkKeyValue("foo", 1);
+    assertEquals("Not null", constraint.toString());
+    try {
+      constraint.checkKeyValue(null, 1);
+      fail("NullPointerException expected");
+    } catch (NullPointerException expected) {}
+    try {
+      constraint.checkKeyValue("foo", null);
+      fail("NullPointerException expected");
+    } catch (NullPointerException expected) {}
+    try {
+      constraint.checkKeyValue(null, null);
+      fail("NullPointerException expected");
+    } catch (NullPointerException expected) {}
+  }
+
+  public void testConstrainedMapLegal() {
+    Map<String, Integer> map = Maps.newLinkedHashMap();
+    Map<String, Integer> constrained = MapConstraints.constrainedMap(
+        map, TEST_CONSTRAINT);
+    map.put(TEST_KEY, TEST_VALUE);
+    constrained.put("foo", 1);
+    map.putAll(ImmutableMap.of("bar", 2));
+    constrained.putAll(ImmutableMap.of("baz", 3));
+    assertTrue(map.equals(constrained));
+    assertTrue(constrained.equals(map));
+    assertEquals(map.entrySet(), constrained.entrySet());
+    assertEquals(map.keySet(), constrained.keySet());
+    assertEquals(HashMultiset.create(map.values()),
+        HashMultiset.create(constrained.values()));
+    assertFalse(map.values() instanceof Serializable);
+    assertEquals(map.toString(), constrained.toString());
+    assertEquals(map.hashCode(), constrained.hashCode());
+    ASSERT.that(map.entrySet()).hasContentsInOrder(
+        Maps.immutableEntry(TEST_KEY, TEST_VALUE),
+        Maps.immutableEntry("foo", 1),
+        Maps.immutableEntry("bar", 2),
+        Maps.immutableEntry("baz", 3));
+  }
+
+  public void testConstrainedMapIllegal() {
+    Map<String, Integer> map = Maps.newLinkedHashMap();
+    Map<String, Integer> constrained = MapConstraints.constrainedMap(
+        map, TEST_CONSTRAINT);
+    try {
+      constrained.put(TEST_KEY, TEST_VALUE);
+      fail("TestKeyException expected");
+    } catch (TestKeyException expected) {}
+    try {
+      constrained.put("baz", TEST_VALUE);
+      fail("TestValueException expected");
+    } catch (TestValueException expected) {}
+    try {
+      constrained.put(TEST_KEY, 3);
+      fail("TestKeyException expected");
+    } catch (TestKeyException expected) {}
+    try {
+      constrained.putAll(ImmutableMap.of("baz", 3, TEST_KEY, 4));
+      fail("TestKeyException expected");
+    } catch (TestKeyException expected) {}
+    assertEquals(Collections.emptySet(), map.entrySet());
+    assertEquals(Collections.emptySet(), constrained.entrySet());
+  }
+
+  public void testConstrainedBiMapLegal() {
+    BiMap<String, Integer> map = new AbstractBiMap<String, Integer>(
+        Maps.<String, Integer>newLinkedHashMap(),
+        Maps.<Integer, String>newLinkedHashMap()) {};
+    BiMap<String, Integer> constrained = MapConstraints.constrainedBiMap(
+        map, TEST_CONSTRAINT);
+    map.put(TEST_KEY, TEST_VALUE);
+    constrained.put("foo", 1);
+    map.putAll(ImmutableMap.of("bar", 2));
+    constrained.putAll(ImmutableMap.of("baz", 3));
+    assertTrue(map.equals(constrained));
+    assertTrue(constrained.equals(map));
+    assertEquals(map.entrySet(), constrained.entrySet());
+    assertEquals(map.keySet(), constrained.keySet());
+    assertEquals(map.values(), constrained.values());
+    assertEquals(map.toString(), constrained.toString());
+    assertEquals(map.hashCode(), constrained.hashCode());
+    ASSERT.that(map.entrySet()).hasContentsInOrder(
+        Maps.immutableEntry(TEST_KEY, TEST_VALUE),
+        Maps.immutableEntry("foo", 1),
+        Maps.immutableEntry("bar", 2),
+        Maps.immutableEntry("baz", 3));
+  }
+
+  public void testConstrainedBiMapIllegal() {
+    BiMap<String, Integer> map = new AbstractBiMap<String, Integer>(
+        Maps.<String, Integer>newLinkedHashMap(),
+        Maps.<Integer, String>newLinkedHashMap()) {};
+    BiMap<String, Integer> constrained = MapConstraints.constrainedBiMap(
+        map, TEST_CONSTRAINT);
+    try {
+      constrained.put(TEST_KEY, TEST_VALUE);
+      fail("TestKeyException expected");
+    } catch (TestKeyException expected) {}
+    try {
+      constrained.put("baz", TEST_VALUE);
+      fail("TestValueException expected");
+    } catch (TestValueException expected) {}
+    try {
+      constrained.put(TEST_KEY, 3);
+      fail("TestKeyException expected");
+    } catch (TestKeyException expected) {}
+    try {
+      constrained.putAll(ImmutableMap.of("baz", 3, TEST_KEY, 4));
+      fail("TestKeyException expected");
+    } catch (TestKeyException expected) {}
+    try {
+      constrained.forcePut(TEST_KEY, 3);
+      fail("TestKeyException expected");
+    } catch (TestKeyException expected) {}
+    try {
+      constrained.inverse().forcePut(TEST_VALUE, "baz");
+      fail("TestValueException expected");
+    } catch (TestValueException expected) {}
+    try {
+      constrained.inverse().forcePut(3, TEST_KEY);
+      fail("TestKeyException expected");
+    } catch (TestKeyException expected) {}
+    assertEquals(Collections.emptySet(), map.entrySet());
+    assertEquals(Collections.emptySet(), constrained.entrySet());
+  }
+
+  public void testConstrainedMultimapLegal() {
+    Multimap<String, Integer> multimap = LinkedListMultimap.create();
+    Multimap<String, Integer> constrained = MapConstraints.constrainedMultimap(
+        multimap, TEST_CONSTRAINT);
+    multimap.put(TEST_KEY, TEST_VALUE);
+    constrained.put("foo", 1);
+    multimap.get("bar").add(2);
+    constrained.get("baz").add(3);
+    multimap.get("qux").addAll(Arrays.asList(4));
+    constrained.get("zig").addAll(Arrays.asList(5));
+    multimap.putAll("zag", Arrays.asList(6));
+    constrained.putAll("bee", Arrays.asList(7));
+    multimap.putAll(new ImmutableMultimap.Builder<String, Integer>()
+        .put("bim", 8).build());
+    constrained.putAll(new ImmutableMultimap.Builder<String, Integer>()
+        .put("bop", 9).build());
+    multimap.putAll(new ImmutableMultimap.Builder<String, Integer>()
+        .put("dig", 10).build());
+    constrained.putAll(new ImmutableMultimap.Builder<String, Integer>()
+        .put("dag", 11).build());
+    assertTrue(multimap.equals(constrained));
+    assertTrue(constrained.equals(multimap));
+    ASSERT.that(ImmutableList.copyOf(multimap.entries()))
+        .is(ImmutableList.copyOf(constrained.entries()));
+    ASSERT.that(constrained.asMap().get("foo")).hasContentsInOrder(1);
+    assertNull(constrained.asMap().get("missing"));
+    assertEquals(multimap.asMap(), constrained.asMap());
+    assertEquals(multimap.values(), constrained.values());
+    assertEquals(multimap.keys(), constrained.keys());
+    assertEquals(multimap.keySet(), constrained.keySet());
+    assertEquals(multimap.toString(), constrained.toString());
+    assertEquals(multimap.hashCode(), constrained.hashCode());
+    ASSERT.that(multimap.entries()).hasContentsInOrder(
+        Maps.immutableEntry(TEST_KEY, TEST_VALUE),
+        Maps.immutableEntry("foo", 1),
+        Maps.immutableEntry("bar", 2),
+        Maps.immutableEntry("baz", 3),
+        Maps.immutableEntry("qux", 4),
+        Maps.immutableEntry("zig", 5),
+        Maps.immutableEntry("zag", 6),
+        Maps.immutableEntry("bee", 7),
+        Maps.immutableEntry("bim", 8),
+        Maps.immutableEntry("bop", 9),
+        Maps.immutableEntry("dig", 10),
+        Maps.immutableEntry("dag", 11));
+    assertFalse(constrained.asMap().values() instanceof Serializable);
+    Iterator<Collection<Integer>> iterator =
+        constrained.asMap().values().iterator();
+    iterator.next();
+    iterator.next().add(12);
+    assertTrue(multimap.containsEntry("foo", 12));
+  }
+
+  public void testConstrainedTypePreservingList() {
+    ListMultimap<String, Integer> multimap
+        = MapConstraints.constrainedListMultimap(
+            LinkedListMultimap.<String, Integer>create(),
+            TEST_CONSTRAINT);
+    multimap.put("foo", 1);
+    Map.Entry<String, Collection<Integer>> entry
+        = multimap.asMap().entrySet().iterator().next();
+    assertTrue(entry.getValue() instanceof List);
+    assertFalse(multimap.entries() instanceof Set);
+    assertFalse(multimap.get("foo") instanceof RandomAccess);
+  }
+
+  public void testConstrainedTypePreservingRandomAccessList() {
+    ListMultimap<String, Integer> multimap
+        = MapConstraints.constrainedListMultimap(
+            ArrayListMultimap.<String, Integer>create(),
+            TEST_CONSTRAINT);
+    multimap.put("foo", 1);
+    Map.Entry<String, Collection<Integer>> entry
+        = multimap.asMap().entrySet().iterator().next();
+    assertTrue(entry.getValue() instanceof List);
+    assertFalse(multimap.entries() instanceof Set);
+    assertTrue(multimap.get("foo") instanceof RandomAccess);
+  }
+
+  public void testConstrainedTypePreservingSet() {
+    SetMultimap<String, Integer> multimap
+        = MapConstraints.constrainedSetMultimap(
+            LinkedHashMultimap.<String, Integer>create(),
+            TEST_CONSTRAINT);
+    multimap.put("foo", 1);
+    Map.Entry<String, Collection<Integer>> entry
+        = multimap.asMap().entrySet().iterator().next();
+    assertTrue(entry.getValue() instanceof Set);
+  }
+
+  public void testConstrainedTypePreservingSortedSet() {
+    Comparator<Integer> comparator = Collections.reverseOrder();
+    SortedSetMultimap<String, Integer> delegate
+        = TreeMultimap.create(Ordering.<String>natural(), comparator);
+    SortedSetMultimap<String, Integer> multimap
+        = MapConstraints.constrainedSortedSetMultimap(delegate,
+            TEST_CONSTRAINT);
+    multimap.put("foo", 1);
+    Map.Entry<String, Collection<Integer>> entry
+        = multimap.asMap().entrySet().iterator().next();
+    assertTrue(entry.getValue() instanceof SortedSet);
+    assertSame(comparator, multimap.valueComparator());
+    assertSame(comparator, multimap.get("foo").comparator());
+  }
+
+  @SuppressWarnings("unchecked")
+  public void testConstrainedMultimapIllegal() {
+    Multimap<String, Integer> multimap = LinkedListMultimap.create();
+    Multimap<String, Integer> constrained = MapConstraints.constrainedMultimap(
+        multimap, TEST_CONSTRAINT);
+    try {
+      constrained.put(TEST_KEY, 1);
+      fail("TestKeyException expected");
+    } catch (TestKeyException expected) {}
+    try {
+      constrained.put("foo", TEST_VALUE);
+      fail("TestValueException expected");
+    } catch (TestValueException expected) {}
+    try {
+      constrained.put(TEST_KEY, TEST_VALUE);
+      fail("TestKeyException expected");
+    } catch (TestKeyException expected) {}
+    try {
+      constrained.get(TEST_KEY).add(1);
+      fail("TestKeyException expected");
+    } catch (TestKeyException expected) {}
+    try {
+      constrained.get("foo").add(TEST_VALUE);
+      fail("TestValueException expected");
+    } catch (TestValueException expected) {}
+    try {
+      constrained.get(TEST_KEY).add(TEST_VALUE);
+      fail("TestKeyException expected");
+    } catch (TestKeyException expected) {}
+    try {
+      constrained.get(TEST_KEY).addAll(Arrays.asList(1));
+      fail("TestKeyException expected");
+    } catch (TestKeyException expected) {}
+    try {
+      constrained.get("foo").addAll(Arrays.asList(1, TEST_VALUE));
+      fail("TestValueException expected");
+    } catch (TestValueException expected) {}
+    try {
+      constrained.get(TEST_KEY).addAll(Arrays.asList(1, TEST_VALUE));
+      fail("TestKeyException expected");
+    } catch (TestKeyException expected) {}
+    try {
+      constrained.putAll(TEST_KEY, Arrays.asList(1));
+      fail("TestKeyException expected");
+    } catch (TestKeyException expected) {}
+    try {
+      constrained.putAll("foo", Arrays.asList(1, TEST_VALUE));
+      fail("TestValueException expected");
+    } catch (TestValueException expected) {}
+    try {
+      constrained.putAll(TEST_KEY, Arrays.asList(1, TEST_VALUE));
+      fail("TestKeyException expected");
+    } catch (TestKeyException expected) {}
+    try {
+      constrained.putAll(new ImmutableMultimap.Builder<String, Integer>()
+          .put(TEST_KEY, 2).put("foo", 1).build());
+      fail("TestKeyException expected");
+    } catch (TestKeyException expected) {}
+    try {
+      constrained.putAll(new ImmutableMultimap.Builder<String, Integer>()
+          .put("bar", TEST_VALUE).put("foo", 1).build());
+      fail("TestValueException expected");
+    } catch (TestValueException expected) {}
+    try {
+      constrained.putAll(new ImmutableMultimap.Builder<String, Integer>()
+          .put(TEST_KEY, TEST_VALUE).put("foo", 1).build());
+      fail("TestKeyException expected");
+    } catch (TestKeyException expected) {}
+    try {
+      constrained.entries().add(Maps.immutableEntry(TEST_KEY, 1));
+      fail("UnsupportedOperationException expected");
+    } catch (UnsupportedOperationException expected) {}
+    try {
+      constrained.entries().addAll(Arrays.asList(
+          Maps.immutableEntry("foo", 1),
+          Maps.immutableEntry(TEST_KEY, 2)));
+      fail("UnsupportedOperationException expected");
+    } catch (UnsupportedOperationException expected) {}
+    assertTrue(multimap.isEmpty());
+    assertTrue(constrained.isEmpty());
+    constrained.put("foo", 1);
+    try {
+      constrained.asMap().get("foo").add(TEST_VALUE);
+      fail("TestValueException expected");
+    } catch (TestValueException expected) {}
+    try {
+      constrained.asMap().values().iterator().next().add(TEST_VALUE);
+      fail("TestValueException expected");
+    } catch (TestValueException expected) {}
+    try {
+      ((Collection<Integer>) constrained.asMap().values().toArray()[0])
+          .add(TEST_VALUE);
+      fail("TestValueException expected");
+    } catch (TestValueException expected) {}
+    ASSERT.that(ImmutableList.copyOf(multimap.entries()))
+        .is(ImmutableList.copyOf(constrained.entries()));
+    assertEquals(multimap.asMap(), constrained.asMap());
+    assertEquals(multimap.values(), constrained.values());
+    assertEquals(multimap.keys(), constrained.keys());
+    assertEquals(multimap.keySet(), constrained.keySet());
+    assertEquals(multimap.toString(), constrained.toString());
+    assertEquals(multimap.hashCode(), constrained.hashCode());
+  }
+
+  private static class QueueSupplier implements Supplier<Queue<Integer>> {
+    @Override
+    public Queue<Integer> get() {
+      return new LinkedList<Integer>();
+    }
+  }
+
+  public void testConstrainedMultimapQueue() {
+    Multimap<String, Integer> multimap = Multimaps.newMultimap(
+        new HashMap<String, Collection<Integer>>(), new QueueSupplier());
+    Multimap<String, Integer> constrained = MapConstraints.constrainedMultimap(
+        multimap, TEST_CONSTRAINT);
+    constrained.put("foo", 1);
+    assertTrue(constrained.get("foo").contains(1));
+    assertTrue(multimap.get("foo").contains(1));
+    try {
+      constrained.put(TEST_KEY, 1);
+      fail("TestKeyException expected");
+    } catch (TestKeyException expected) {}
+    try {
+      constrained.put("foo", TEST_VALUE);
+      fail("TestValueException expected");
+    } catch (TestValueException expected) {}
+    try {
+      constrained.get("foo").add(TEST_VALUE);
+      fail("TestKeyException expected");
+    } catch (TestValueException expected) {}
+    try {
+      constrained.get(TEST_KEY).add(1);
+      fail("TestValueException expected");
+    } catch (TestKeyException expected) {}
+    assertEquals(1, constrained.size());
+    assertEquals(1, multimap.size());
+  }
+
+  public void testMapEntrySetToArray() {
+    Map<String, Integer> map = Maps.newLinkedHashMap();
+    Map<String, Integer> constrained
+        = MapConstraints.constrainedMap(map, TEST_CONSTRAINT);
+    map.put("foo", 1);
+    @SuppressWarnings("unchecked")
+    Map.Entry<String, Integer> entry
+        = (Map.Entry) constrained.entrySet().toArray()[0];
+    try {
+      entry.setValue(TEST_VALUE);
+      fail("TestValueException expected");
+    } catch (TestValueException expected) {}
+    assertFalse(map.containsValue(TEST_VALUE));
+  }
+
+  public void testMapEntrySetContainsNefariousEntry() {
+    Map<String, Integer> map = Maps.newTreeMap();
+    Map<String, Integer> constrained
+        = MapConstraints.constrainedMap(map, TEST_CONSTRAINT);
+    map.put("foo", 1);
+    Map.Entry<String, Integer> nefariousEntry
+        = nefariousMapEntry(TEST_KEY, TEST_VALUE);
+    Set<Map.Entry<String, Integer>> entries = constrained.entrySet();
+    assertFalse(entries.contains(nefariousEntry));
+    assertFalse(map.containsValue(TEST_VALUE));
+    assertFalse(entries.containsAll(Collections.singleton(nefariousEntry)));
+    assertFalse(map.containsValue(TEST_VALUE));
+  }
+
+  public void testMultimapAsMapEntriesToArray() {
+    Multimap<String, Integer> multimap = LinkedListMultimap.create();
+    Multimap<String, Integer> constrained
+        = MapConstraints.constrainedMultimap(multimap, TEST_CONSTRAINT);
+    multimap.put("foo", 1);
+    @SuppressWarnings("unchecked")
+    Map.Entry<String, Collection<Integer>> entry
+        = (Map.Entry<String, Collection<Integer>>)
+            constrained.asMap().entrySet().toArray()[0];
+    try {
+      entry.setValue(Collections.<Integer>emptySet());
+      fail("UnsupportedOperationException expected");
+    } catch (UnsupportedOperationException expected) {}
+    try {
+      entry.getValue().add(TEST_VALUE);
+      fail("TestValueException expected");
+    } catch (TestValueException expected) {}
+    assertFalse(multimap.containsValue(TEST_VALUE));
+  }
+
+  public void testMultimapAsMapValuesToArray() {
+    Multimap<String, Integer> multimap = LinkedListMultimap.create();
+    Multimap<String, Integer> constrained
+        = MapConstraints.constrainedMultimap(multimap, TEST_CONSTRAINT);
+    multimap.put("foo", 1);
+    @SuppressWarnings("unchecked")
+    Collection<Integer> collection
+        = (Collection<Integer>) constrained.asMap().values().toArray()[0];
+    try {
+      collection.add(TEST_VALUE);
+      fail("TestValueException expected");
+    } catch (TestValueException expected) {}
+    assertFalse(multimap.containsValue(TEST_VALUE));
+  }
+
+  public void testMultimapEntriesContainsNefariousEntry() {
+    Multimap<String, Integer> multimap = LinkedListMultimap.create();
+    Multimap<String, Integer> constrained
+        = MapConstraints.constrainedMultimap(multimap, TEST_CONSTRAINT);
+    multimap.put("foo", 1);
+    Map.Entry<String, Integer> nefariousEntry
+        = nefariousMapEntry(TEST_KEY, TEST_VALUE);
+    Collection<Map.Entry<String, Integer>> entries = constrained.entries();
+    assertFalse(entries.contains(nefariousEntry));
+    assertFalse(multimap.containsValue(TEST_VALUE));
+    assertFalse(entries.containsAll(Collections.singleton(nefariousEntry)));
+    assertFalse(multimap.containsValue(TEST_VALUE));
+  }
+
+  public void testMultimapEntriesRemoveNefariousEntry() {
+    Multimap<String, Integer> multimap = LinkedListMultimap.create();
+    Multimap<String, Integer> constrained
+        = MapConstraints.constrainedMultimap(multimap, TEST_CONSTRAINT);
+    multimap.put("foo", 1);
+    Map.Entry<String, Integer> nefariousEntry
+        = nefariousMapEntry(TEST_KEY, TEST_VALUE);
+    Collection<Map.Entry<String, Integer>> entries = constrained.entries();
+    assertFalse(entries.remove(nefariousEntry));
+    assertFalse(multimap.containsValue(TEST_VALUE));
+    assertFalse(entries.removeAll(Collections.singleton(nefariousEntry)));
+    assertFalse(multimap.containsValue(TEST_VALUE));
+  }
+
+  public void testMultimapAsMapEntriesContainsNefariousEntry() {
+    Multimap<String, Integer> multimap = LinkedListMultimap.create();
+    Multimap<String, Integer> constrained
+        = MapConstraints.constrainedMultimap(multimap, TEST_CONSTRAINT);
+    multimap.put("foo", 1);
+    Map.Entry<String, ? extends Collection<Integer>> nefariousEntry
+        = nefariousMapEntry(TEST_KEY, Collections.singleton(TEST_VALUE));
+    Set<Map.Entry<String, Collection<Integer>>> entries
+        = constrained.asMap().entrySet();
+    assertFalse(entries.contains(nefariousEntry));
+    assertFalse(multimap.containsValue(TEST_VALUE));
+    assertFalse(entries.containsAll(Collections.singleton(nefariousEntry)));
+    assertFalse(multimap.containsValue(TEST_VALUE));
+  }
+
+  public void testMultimapAsMapEntriesRemoveNefariousEntry() {
+    Multimap<String, Integer> multimap = LinkedListMultimap.create();
+    Multimap<String, Integer> constrained
+        = MapConstraints.constrainedMultimap(multimap, TEST_CONSTRAINT);
+    multimap.put("foo", 1);
+    Map.Entry<String, ? extends Collection<Integer>> nefariousEntry
+        = nefariousMapEntry(TEST_KEY, Collections.singleton(TEST_VALUE));
+    Set<Map.Entry<String, Collection<Integer>>> entries
+        = constrained.asMap().entrySet();
+    assertFalse(entries.remove(nefariousEntry));
+    assertFalse(multimap.containsValue(TEST_VALUE));
+    assertFalse(entries.removeAll(Collections.singleton(nefariousEntry)));
+    assertFalse(multimap.containsValue(TEST_VALUE));
+  }
+
+  public void testNefariousMapPutAll() {
+    Map<String, Integer> map = Maps.newLinkedHashMap();
+    Map<String, Integer> constrained = MapConstraints.constrainedMap(
+        map, TEST_CONSTRAINT);
+    Map<String, Integer> onceIterable = onceIterableMap("foo", 1);
+    constrained.putAll(onceIterable);
+    assertEquals((Integer) 1, constrained.get("foo"));
+  }
+
+  public void testNefariousMultimapPutAllIterable() {
+    Multimap<String, Integer> multimap = LinkedListMultimap.create();
+    Multimap<String, Integer> constrained = MapConstraints.constrainedMultimap(
+        multimap, TEST_CONSTRAINT);
+    Collection<Integer> onceIterable
+        = ConstraintsTest.onceIterableCollection(1);
+    constrained.putAll("foo", onceIterable);
+    assertEquals(ImmutableList.of(1), constrained.get("foo"));
+  }
+
+  public void testNefariousMultimapPutAllMultimap() {
+    Multimap<String, Integer> multimap = LinkedListMultimap.create();
+    Multimap<String, Integer> constrained = MapConstraints.constrainedMultimap(
+        multimap, TEST_CONSTRAINT);
+    Multimap<String, Integer> onceIterable
+        = Multimaps.forMap(onceIterableMap("foo", 1));
+    constrained.putAll(onceIterable);
+    assertEquals(ImmutableList.of(1), constrained.get("foo"));
+  }
+
+  public void testNefariousMultimapGetAddAll() {
+    Multimap<String, Integer> multimap = LinkedListMultimap.create();
+    Multimap<String, Integer> constrained = MapConstraints.constrainedMultimap(
+        multimap, TEST_CONSTRAINT);
+    Collection<Integer> onceIterable
+        = ConstraintsTest.onceIterableCollection(1);
+    constrained.get("foo").addAll(onceIterable);
+    assertEquals(ImmutableList.of(1), constrained.get("foo"));
+  }
+
+  /**
+   * Returns a "nefarious" map, which permits only one call to its views'
+   * iterator() methods. This verifies that the constrained map uses a
+   * defensive copy instead of potentially checking the elements in one snapshot
+   * and adding the elements from another.
+   *
+   * @param key the key to be contained in the map
+   * @param value the value to be contained in the map
+   */
+  static <K, V> Map<K, V> onceIterableMap(K key, V value) {
+    final Map.Entry<K, V> entry = Maps.immutableEntry(key, value);
+    return new AbstractMap<K, V>() {
+      boolean iteratorCalled;
+      @Override public int size() {
+        /*
+         * We could make the map empty, but that seems more likely to trigger
+         * special cases (so maybe we should test both empty and nonempty...).
+         */
+        return 1;
+      }
+      @Override public Set<Entry<K, V>> entrySet() {
+        return new ForwardingSet<Entry<K, V>>() {
+          @Override protected Set<Entry<K, V>> delegate() {
+            return Collections.singleton(entry);
+          }
+          @Override public Iterator<Entry<K, V>> iterator() {
+            assertFalse("Expected only one call to iterator()", iteratorCalled);
+            iteratorCalled = true;
+            return super.iterator();
+          }
+        };
+      }
+      @Override public Set<K> keySet() {
+        throw new UnsupportedOperationException();
+      }
+      @Override public Collection<V> values() {
+        throw new UnsupportedOperationException();
+      }
+    };
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testSerialization() {
+    // TODO: Test serialization of constrained collections.
+    assertSame(MapConstraints.notNull(),
+        SerializableTester.reserialize(MapConstraints.notNull()));
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/MapMakerInternalMapTest.java b/guava-tests/test/com/google/common/collect/MapMakerInternalMapTest.java
new file mode 100644
index 0000000..443a8a8
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/MapMakerInternalMapTest.java
@@ -0,0 +1,1890 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.collect.Lists.newArrayList;
+import static com.google.common.collect.MapMakerInternalMap.DISCARDING_QUEUE;
+import static com.google.common.collect.MapMakerInternalMap.DRAIN_THRESHOLD;
+import static com.google.common.collect.MapMakerInternalMap.nullEntry;
+import static com.google.common.collect.MapMakerInternalMap.unset;
+import static java.util.concurrent.TimeUnit.SECONDS;
+
+import com.google.common.base.Equivalence;
+import com.google.common.base.Ticker;
+import com.google.common.collect.MapMaker.RemovalCause;
+import com.google.common.collect.MapMaker.RemovalListener;
+import com.google.common.collect.MapMaker.RemovalNotification;
+import com.google.common.collect.MapMakerInternalMap.EntryFactory;
+import com.google.common.collect.MapMakerInternalMap.ReferenceEntry;
+import com.google.common.collect.MapMakerInternalMap.Segment;
+import com.google.common.collect.MapMakerInternalMap.Strength;
+import com.google.common.collect.MapMakerInternalMap.ValueReference;
+import com.google.common.testing.NullPointerTester;
+
+import junit.framework.TestCase;
+
+import java.lang.ref.Reference;
+import java.lang.ref.ReferenceQueue;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
+import java.util.concurrent.ConcurrentLinkedQueue;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicReferenceArray;
+
+/**
+ * @author Charles Fry
+ */
+@SuppressWarnings("deprecation") // many tests of deprecated methods
+public class MapMakerInternalMapTest extends TestCase {
+
+  static final int SMALL_MAX_SIZE = DRAIN_THRESHOLD * 5;
+
+  private static <K, V> MapMakerInternalMap<K, V> makeMap(GenericMapMaker<K, V> maker) {
+    return new MapMakerInternalMap<K, V>((MapMaker) maker);
+  }
+
+  private static <K, V> MapMakerInternalMap<K, V> makeMap(MapMaker maker) {
+    return new MapMakerInternalMap<K, V>(maker);
+  }
+
+  private static MapMaker createMapMaker() {
+    MapMaker maker = new MapMaker();
+    maker.useCustomMap = true;
+    return maker;
+  }
+
+  // constructor tests
+
+  public void testDefaults() {
+    MapMakerInternalMap<Object, Object> map = makeMap(createMapMaker());
+
+    assertSame(Strength.STRONG, map.keyStrength);
+    assertSame(Strength.STRONG, map.valueStrength);
+    assertSame(map.keyStrength.defaultEquivalence(), map.keyEquivalence);
+    assertSame(map.valueStrength.defaultEquivalence(), map.valueEquivalence);
+
+    assertEquals(0, map.expireAfterAccessNanos);
+    assertEquals(0, map.expireAfterWriteNanos);
+    assertEquals(MapMaker.UNSET_INT, map.maximumSize);
+
+    assertSame(EntryFactory.STRONG, map.entryFactory);
+    assertSame(MapMaker.NullListener.INSTANCE, map.removalListener);
+    assertSame(DISCARDING_QUEUE, map.removalNotificationQueue);
+    assertSame(Ticker.systemTicker(), map.ticker);
+
+    assertEquals(4, map.concurrencyLevel);
+
+    // concurrency level
+    assertEquals(4, map.segments.length);
+    // initial capacity / concurrency level
+    assertEquals(16 / map.segments.length, map.segments[0].table.length());
+
+    assertFalse(map.evictsBySize());
+    assertFalse(map.expires());
+    assertFalse(map.expiresAfterWrite());
+    assertFalse(map.expiresAfterAccess());
+  }
+
+  public void testSetKeyEquivalence() {
+    Equivalence<Object> testEquivalence = new Equivalence<Object>() {
+      @Override
+      protected boolean doEquivalent(Object a, Object b) {
+        return false;
+      }
+
+      @Override
+      protected int doHash(Object t) {
+        return 0;
+      }
+    };
+
+    MapMakerInternalMap<Object, Object> map =
+        makeMap(createMapMaker().keyEquivalence(testEquivalence));
+    assertSame(testEquivalence, map.keyEquivalence);
+    assertSame(map.valueStrength.defaultEquivalence(), map.valueEquivalence);
+  }
+
+  public void testSetValueEquivalence() {
+    Equivalence<Object> testEquivalence = new Equivalence<Object>() {
+      @Override
+      protected boolean doEquivalent(Object a, Object b) {
+        return false;
+      }
+
+      @Override
+      protected int doHash(Object t) {
+        return 0;
+      }
+    };
+
+    MapMakerInternalMap<Object, Object> map =
+        makeMap(createMapMaker().valueEquivalence(testEquivalence));
+    assertSame(testEquivalence, map.valueEquivalence);
+    assertSame(map.keyStrength.defaultEquivalence(), map.keyEquivalence);
+  }
+
+  public void testSetConcurrencyLevel() {
+    // round up to nearest power of two
+
+    checkConcurrencyLevel(1, 1);
+    checkConcurrencyLevel(2, 2);
+    checkConcurrencyLevel(3, 4);
+    checkConcurrencyLevel(4, 4);
+    checkConcurrencyLevel(5, 8);
+    checkConcurrencyLevel(6, 8);
+    checkConcurrencyLevel(7, 8);
+    checkConcurrencyLevel(8, 8);
+  }
+
+  private static void checkConcurrencyLevel(int concurrencyLevel, int segmentCount) {
+    MapMakerInternalMap<Object, Object> map =
+        makeMap(createMapMaker().concurrencyLevel(concurrencyLevel));
+    assertEquals(segmentCount, map.segments.length);
+  }
+
+  public void testSetInitialCapacity() {
+    // share capacity over each segment, then round up to nearest power of two
+
+    checkInitialCapacity(1, 0, 1);
+    checkInitialCapacity(1, 1, 1);
+    checkInitialCapacity(1, 2, 2);
+    checkInitialCapacity(1, 3, 4);
+    checkInitialCapacity(1, 4, 4);
+    checkInitialCapacity(1, 5, 8);
+    checkInitialCapacity(1, 6, 8);
+    checkInitialCapacity(1, 7, 8);
+    checkInitialCapacity(1, 8, 8);
+
+    checkInitialCapacity(2, 0, 1);
+    checkInitialCapacity(2, 1, 1);
+    checkInitialCapacity(2, 2, 1);
+    checkInitialCapacity(2, 3, 2);
+    checkInitialCapacity(2, 4, 2);
+    checkInitialCapacity(2, 5, 4);
+    checkInitialCapacity(2, 6, 4);
+    checkInitialCapacity(2, 7, 4);
+    checkInitialCapacity(2, 8, 4);
+
+    checkInitialCapacity(4, 0, 1);
+    checkInitialCapacity(4, 1, 1);
+    checkInitialCapacity(4, 2, 1);
+    checkInitialCapacity(4, 3, 1);
+    checkInitialCapacity(4, 4, 1);
+    checkInitialCapacity(4, 5, 2);
+    checkInitialCapacity(4, 6, 2);
+    checkInitialCapacity(4, 7, 2);
+    checkInitialCapacity(4, 8, 2);
+  }
+
+  private static void checkInitialCapacity(
+      int concurrencyLevel, int initialCapacity, int segmentSize) {
+    MapMakerInternalMap<Object, Object> map = makeMap(
+        createMapMaker().concurrencyLevel(concurrencyLevel).initialCapacity(initialCapacity));
+    for (int i = 0; i < map.segments.length; i++) {
+      assertEquals(segmentSize, map.segments[i].table.length());
+    }
+  }
+
+  public void testSetMaximumSize() {
+    // vary maximumSize wrt concurrencyLevel
+
+    for (int maxSize = 1; maxSize < 8; maxSize++) {
+      checkMaximumSize(1, 8, maxSize);
+      checkMaximumSize(2, 8, maxSize);
+      checkMaximumSize(4, 8, maxSize);
+      checkMaximumSize(8, 8, maxSize);
+    }
+
+    checkMaximumSize(1, 8, Integer.MAX_VALUE);
+    checkMaximumSize(2, 8, Integer.MAX_VALUE);
+    checkMaximumSize(4, 8, Integer.MAX_VALUE);
+    checkMaximumSize(8, 8, Integer.MAX_VALUE);
+
+    // vary initial capacity wrt maximumSize
+
+    for (int capacity = 0; capacity < 8; capacity++) {
+      checkMaximumSize(1, capacity, 4);
+      checkMaximumSize(2, capacity, 4);
+      checkMaximumSize(4, capacity, 4);
+      checkMaximumSize(8, capacity, 4);
+    }
+  }
+
+  private static void checkMaximumSize(int concurrencyLevel, int initialCapacity, int maxSize) {
+    MapMakerInternalMap<Object, Object> map = makeMap(createMapMaker()
+        .concurrencyLevel(concurrencyLevel)
+        .initialCapacity(initialCapacity)
+        .maximumSize(maxSize));
+    int totalCapacity = 0;
+    for (int i = 0; i < map.segments.length; i++) {
+      totalCapacity += map.segments[i].maxSegmentSize;
+    }
+    assertTrue("totalCapcity=" + totalCapacity + ", maxSize=" + maxSize, totalCapacity <= maxSize);
+  }
+
+  public void testSetWeakKeys() {
+    MapMakerInternalMap<Object, Object> map = makeMap(createMapMaker().weakKeys());
+    checkStrength(map, Strength.WEAK, Strength.STRONG);
+    assertSame(EntryFactory.WEAK, map.entryFactory);
+  }
+
+  @SuppressWarnings("deprecation")
+  public void testSetSoftKeys() {
+    MapMakerInternalMap<Object, Object> map = makeMap(createMapMaker().softKeys());
+    checkStrength(map, Strength.SOFT, Strength.STRONG);
+    assertSame(EntryFactory.SOFT, map.entryFactory);
+  }
+
+  public void testSetWeakValues() {
+    MapMakerInternalMap<Object, Object> map = makeMap(createMapMaker().weakValues());
+    checkStrength(map, Strength.STRONG, Strength.WEAK);
+    assertSame(EntryFactory.STRONG, map.entryFactory);
+  }
+
+  public void testSetSoftValues() {
+    MapMakerInternalMap<Object, Object> map = makeMap(createMapMaker().softValues());
+    checkStrength(map, Strength.STRONG, Strength.SOFT);
+    assertSame(EntryFactory.STRONG, map.entryFactory);
+  }
+
+  private static void checkStrength(
+      MapMakerInternalMap<Object, Object> map, Strength keyStrength, Strength valueStrength) {
+    assertSame(keyStrength, map.keyStrength);
+    assertSame(valueStrength, map.valueStrength);
+    assertSame(keyStrength.defaultEquivalence(), map.keyEquivalence);
+    assertSame(valueStrength.defaultEquivalence(), map.valueEquivalence);
+  }
+
+  public void testSetExpireAfterWrite() {
+    long duration = 42;
+    TimeUnit unit = SECONDS;
+    MapMakerInternalMap<Object, Object> map =
+        makeMap(createMapMaker().expireAfterWrite(duration, unit));
+    assertEquals(unit.toNanos(duration), map.expireAfterWriteNanos);
+  }
+
+  public void testSetExpireAfterAccess() {
+    long duration = 42;
+    TimeUnit unit = SECONDS;
+    MapMakerInternalMap<Object, Object> map =
+        makeMap(createMapMaker().expireAfterAccess(duration, unit));
+    assertEquals(unit.toNanos(duration), map.expireAfterAccessNanos);
+  }
+
+  public void testSetRemovalListener() {
+    RemovalListener<Object, Object> testListener = new RemovalListener<Object, Object>() {
+      @Override
+      public void onRemoval(RemovalNotification<Object, Object> notification) {}
+    };
+    MapMakerInternalMap<Object, Object> map =
+        makeMap(createMapMaker().removalListener(testListener));
+    assertSame(testListener, map.removalListener);
+  }
+
+  // Removal listener tests
+
+  public void testRemovalListener_explicit() {
+    QueuingRemovalListener<Object, Object> listener =
+        new QueuingRemovalListener<Object, Object>();
+    MapMakerInternalMap<Object, Object> map = makeMap(createMapMaker()
+        .removalListener(listener));
+    assertTrue(listener.isEmpty());
+
+    Object one = new Object();
+    Object two = new Object();
+    Object three = new Object();
+    Object four = new Object();
+    Object five = new Object();
+    Object six = new Object();
+
+    map.put(one, two);
+    map.remove(one);
+    assertNotified(listener, one, two, RemovalCause.EXPLICIT);
+
+    map.put(two, three);
+    map.remove(two, three);
+    assertNotified(listener, two, three, RemovalCause.EXPLICIT);
+
+    map.put(three, four);
+    Iterator<?> i = map.entrySet().iterator();
+    i.next();
+    i.remove();
+    assertNotified(listener, three, four, RemovalCause.EXPLICIT);
+
+    map.put(four, five);
+    i = map.keySet().iterator();
+    i.next();
+    i.remove();
+    assertNotified(listener, four, five, RemovalCause.EXPLICIT);
+
+    map.put(five, six);
+    i = map.values().iterator();
+    i.next();
+    i.remove();
+    assertNotified(listener, five, six, RemovalCause.EXPLICIT);
+
+    assertTrue(listener.isEmpty());
+  }
+
+  public void testRemovalListener_replaced() {
+    QueuingRemovalListener<Object, Object> listener =
+        new QueuingRemovalListener<Object, Object>();
+    MapMakerInternalMap<Object, Object> map = makeMap(createMapMaker()
+        .removalListener(listener));
+    assertTrue(listener.isEmpty());
+
+    Object one = new Object();
+    Object two = new Object();
+    Object three = new Object();
+    Object four = new Object();
+    Object five = new Object();
+    Object six = new Object();
+
+    map.put(one, two);
+    map.put(one, three);
+    assertNotified(listener, one, two, RemovalCause.REPLACED);
+
+    Map<Object, Object> newMap = ImmutableMap.of(one, four);
+    map.putAll(newMap);
+    assertNotified(listener, one, three, RemovalCause.REPLACED);
+
+    map.replace(one, five);
+    assertNotified(listener, one, four, RemovalCause.REPLACED);
+
+    map.replace(one, five, six);
+    assertNotified(listener, one, five, RemovalCause.REPLACED);
+  }
+
+  public void testRemovalListener_collected() {
+    QueuingRemovalListener<Object, Object> listener =
+        new QueuingRemovalListener<Object, Object>();
+    MapMakerInternalMap<Object, Object> map = makeMap(createMapMaker()
+        .concurrencyLevel(1)
+        .softValues()
+        .removalListener(listener));
+    Segment<Object, Object> segment = map.segments[0];
+    assertTrue(listener.isEmpty());
+
+    Object one = new Object();
+    Object two = new Object();
+    Object three = new Object();
+
+    map.put(one, two);
+    map.put(two, three);
+    assertTrue(listener.isEmpty());
+
+    int hash = map.hash(one);
+    ReferenceEntry<Object, Object> entry = segment.getEntry(one, hash);
+    map.reclaimValue(entry.getValueReference());
+    assertNotified(listener, one, two, RemovalCause.COLLECTED);
+
+    assertTrue(listener.isEmpty());
+  }
+
+  public void testRemovalListener_size() {
+    QueuingRemovalListener<Object, Object> listener =
+        new QueuingRemovalListener<Object, Object>();
+    MapMakerInternalMap<Object, Object> map = makeMap(createMapMaker()
+        .concurrencyLevel(1)
+        .maximumSize(2)
+        .removalListener(listener));
+    assertTrue(listener.isEmpty());
+
+    Object one = new Object();
+    Object two = new Object();
+    Object three = new Object();
+    Object four = new Object();
+
+    map.put(one, two);
+    map.put(two, three);
+    assertTrue(listener.isEmpty());
+    map.put(three, four);
+    assertNotified(listener, one, two, RemovalCause.SIZE);
+
+    assertTrue(listener.isEmpty());
+  }
+
+  static <K, V> void assertNotified(
+      QueuingRemovalListener<K, V> listener, K key, V value, RemovalCause cause) {
+    RemovalNotification<K, V> notification = listener.remove();
+    assertSame(key, notification.getKey());
+    assertSame(value, notification.getValue());
+    assertSame(cause, notification.getCause());
+  }
+
+  // Segment core tests
+
+  public void testNewEntry() {
+    for (MapMaker maker : allEntryTypeMakers()) {
+      MapMakerInternalMap<Object, Object> map = makeMap(maker);
+
+      Object keyOne = new Object();
+      Object valueOne = new Object();
+      int hashOne = map.hash(keyOne);
+      ReferenceEntry<Object, Object> entryOne = map.newEntry(keyOne, hashOne, null);
+      ValueReference<Object, Object> valueRefOne = map.newValueReference(entryOne, valueOne);
+      assertSame(valueOne, valueRefOne.get());
+      entryOne.setValueReference(valueRefOne);
+
+      assertSame(keyOne, entryOne.getKey());
+      assertEquals(hashOne, entryOne.getHash());
+      assertNull(entryOne.getNext());
+      assertSame(valueRefOne, entryOne.getValueReference());
+
+      Object keyTwo = new Object();
+      Object valueTwo = new Object();
+      int hashTwo = map.hash(keyTwo);
+      ReferenceEntry<Object, Object> entryTwo = map.newEntry(keyTwo, hashTwo, entryOne);
+      ValueReference<Object, Object> valueRefTwo = map.newValueReference(entryTwo, valueTwo);
+      assertSame(valueTwo, valueRefTwo.get());
+      entryTwo.setValueReference(valueRefTwo);
+
+      assertSame(keyTwo, entryTwo.getKey());
+      assertEquals(hashTwo, entryTwo.getHash());
+      assertSame(entryOne, entryTwo.getNext());
+      assertSame(valueRefTwo, entryTwo.getValueReference());
+    }
+  }
+
+  public void testCopyEntry() {
+    for (MapMaker maker : allEntryTypeMakers()) {
+      MapMakerInternalMap<Object, Object> map = makeMap(maker);
+
+      Object keyOne = new Object();
+      Object valueOne = new Object();
+      int hashOne = map.hash(keyOne);
+      ReferenceEntry<Object, Object> entryOne = map.newEntry(keyOne, hashOne, null);
+      entryOne.setValueReference(map.newValueReference(entryOne, valueOne));
+
+      Object keyTwo = new Object();
+      Object valueTwo = new Object();
+      int hashTwo = map.hash(keyTwo);
+      ReferenceEntry<Object, Object> entryTwo = map.newEntry(keyTwo, hashTwo, entryOne);
+      entryTwo.setValueReference(map.newValueReference(entryTwo, valueTwo));
+      if (map.evictsBySize()) {
+        MapMakerInternalMap.connectEvictables(entryOne, entryTwo);
+      }
+      if (map.expires()) {
+        MapMakerInternalMap.connectExpirables(entryOne, entryTwo);
+      }
+      assertConnected(map, entryOne, entryTwo);
+
+      ReferenceEntry<Object, Object> copyOne = map.copyEntry(entryOne, null);
+      assertSame(keyOne, entryOne.getKey());
+      assertEquals(hashOne, entryOne.getHash());
+      assertNull(entryOne.getNext());
+      assertSame(valueOne, copyOne.getValueReference().get());
+      assertConnected(map, copyOne, entryTwo);
+
+      ReferenceEntry<Object, Object> copyTwo = map.copyEntry(entryTwo, copyOne);
+      assertSame(keyTwo, copyTwo.getKey());
+      assertEquals(hashTwo, copyTwo.getHash());
+      assertSame(copyOne, copyTwo.getNext());
+      assertSame(valueTwo, copyTwo.getValueReference().get());
+      assertConnected(map, copyOne, copyTwo);
+    }
+  }
+
+  private static <K, V> void assertConnected(
+      MapMakerInternalMap<K, V> map, ReferenceEntry<K, V> one, ReferenceEntry<K, V> two) {
+    if (map.evictsBySize()) {
+      assertSame(two, one.getNextEvictable());
+    }
+    if (map.expires()) {
+      assertSame(two, one.getNextExpirable());
+    }
+  }
+
+  public void testSegmentGetAndContains() {
+    MapMakerInternalMap<Object, Object> map =
+        makeMap(createMapMaker().concurrencyLevel(1).expireAfterAccess(99999, SECONDS));
+    Segment<Object, Object> segment = map.segments[0];
+    // TODO(fry): check recency ordering
+
+    Object key = new Object();
+    int hash = map.hash(key);
+    Object value = new Object();
+    AtomicReferenceArray<ReferenceEntry<Object, Object>> table = segment.table;
+    int index = hash & (table.length() - 1);
+
+    ReferenceEntry<Object, Object> entry = map.newEntry(key, hash, null);
+    ValueReference<Object, Object> valueRef = map.newValueReference(entry, value);
+    entry.setValueReference(valueRef);
+
+    assertNull(segment.get(key, hash));
+
+    // count == 0
+    table.set(index, entry);
+    assertNull(segment.get(key, hash));
+    assertFalse(segment.containsKey(key, hash));
+    assertFalse(segment.containsValue(value));
+
+    // count == 1
+    segment.count++;
+    assertSame(value, segment.get(key, hash));
+    assertTrue(segment.containsKey(key, hash));
+    assertTrue(segment.containsValue(value));
+    // don't see absent values now that count > 0
+    assertNull(segment.get(new Object(), hash));
+
+    // null key
+    DummyEntry<Object, Object> nullEntry = DummyEntry.create(null, hash, entry);
+    Object nullValue = new Object();
+    ValueReference<Object, Object> nullValueRef = map.newValueReference(nullEntry, nullValue);
+    nullEntry.setValueReference(nullValueRef);
+    table.set(index, nullEntry);
+    // skip the null key
+    assertSame(value, segment.get(key, hash));
+    assertTrue(segment.containsKey(key, hash));
+    assertTrue(segment.containsValue(value));
+    assertFalse(segment.containsValue(nullValue));
+
+    // hash collision
+    DummyEntry<Object, Object> dummy = DummyEntry.create(new Object(), hash, entry);
+    Object dummyValue = new Object();
+    ValueReference<Object, Object> dummyValueRef = map.newValueReference(dummy, dummyValue);
+    dummy.setValueReference(dummyValueRef);
+    table.set(index, dummy);
+    assertSame(value, segment.get(key, hash));
+    assertTrue(segment.containsKey(key, hash));
+    assertTrue(segment.containsValue(value));
+    assertTrue(segment.containsValue(dummyValue));
+
+    // key collision
+    dummy = DummyEntry.create(key, hash, entry);
+    dummyValue = new Object();
+    dummyValueRef = map.newValueReference(dummy, dummyValue);
+    dummy.setValueReference(dummyValueRef);
+    table.set(index, dummy);
+    // returns the most recent entry
+    assertSame(dummyValue, segment.get(key, hash));
+    assertTrue(segment.containsKey(key, hash));
+    assertTrue(segment.containsValue(value));
+    assertTrue(segment.containsValue(dummyValue));
+
+    // expired
+    dummy.setExpirationTime(0);
+    assertNull(segment.get(key, hash));
+    assertFalse(segment.containsKey(key, hash));
+    assertTrue(segment.containsValue(value));
+    assertFalse(segment.containsValue(dummyValue));
+  }
+
+  public void testSegmentReplaceValue() {
+    MapMakerInternalMap<Object, Object> map =
+        makeMap(createMapMaker().concurrencyLevel(1).expireAfterAccess(99999, SECONDS));
+    Segment<Object, Object> segment = map.segments[0];
+    // TODO(fry): check recency ordering
+
+    Object key = new Object();
+    int hash = map.hash(key);
+    Object oldValue = new Object();
+    Object newValue = new Object();
+    AtomicReferenceArray<ReferenceEntry<Object, Object>> table = segment.table;
+    int index = hash & (table.length() - 1);
+
+    DummyEntry<Object, Object> entry = DummyEntry.create(key, hash, null);
+    DummyValueReference<Object, Object> oldValueRef = DummyValueReference.create(oldValue, entry);
+    entry.setValueReference(oldValueRef);
+
+    // no entry
+    assertFalse(segment.replace(key, hash, oldValue, newValue));
+    assertEquals(0, segment.count);
+
+    // same value
+    table.set(index, entry);
+    segment.count++;
+    assertEquals(1, segment.count);
+    assertSame(oldValue, segment.get(key, hash));
+    assertTrue(segment.replace(key, hash, oldValue, newValue));
+    assertEquals(1, segment.count);
+    assertSame(newValue, segment.get(key, hash));
+
+    // different value
+    assertFalse(segment.replace(key, hash, oldValue, newValue));
+    assertEquals(1, segment.count);
+    assertSame(newValue, segment.get(key, hash));
+
+    // cleared
+    entry.setValueReference(oldValueRef);
+    assertSame(oldValue, segment.get(key, hash));
+    oldValueRef.clear(null);
+    assertFalse(segment.replace(key, hash, oldValue, newValue));
+    assertEquals(0, segment.count);
+    assertNull(segment.get(key, hash));
+  }
+
+  public void testSegmentReplace() {
+    MapMakerInternalMap<Object, Object> map =
+        makeMap(createMapMaker().concurrencyLevel(1).expireAfterAccess(99999, SECONDS));
+    Segment<Object, Object> segment = map.segments[0];
+    // TODO(fry): check recency ordering
+
+    Object key = new Object();
+    int hash = map.hash(key);
+    Object oldValue = new Object();
+    Object newValue = new Object();
+    AtomicReferenceArray<ReferenceEntry<Object, Object>> table = segment.table;
+    int index = hash & (table.length() - 1);
+
+    DummyEntry<Object, Object> entry = DummyEntry.create(key, hash, null);
+    DummyValueReference<Object, Object> oldValueRef = DummyValueReference.create(oldValue, entry);
+    entry.setValueReference(oldValueRef);
+
+    // no entry
+    assertNull(segment.replace(key, hash, newValue));
+    assertEquals(0, segment.count);
+
+    // same key
+    table.set(index, entry);
+    segment.count++;
+    assertEquals(1, segment.count);
+    assertSame(oldValue, segment.get(key, hash));
+    assertSame(oldValue, segment.replace(key, hash, newValue));
+    assertEquals(1, segment.count);
+    assertSame(newValue, segment.get(key, hash));
+
+    // cleared
+    entry.setValueReference(oldValueRef);
+    assertSame(oldValue, segment.get(key, hash));
+    oldValueRef.clear(null);
+    assertNull(segment.replace(key, hash, newValue));
+    assertEquals(0, segment.count);
+    assertNull(segment.get(key, hash));
+  }
+
+  public void testSegmentPut() {
+    MapMakerInternalMap<Object, Object> map =
+        makeMap(createMapMaker().concurrencyLevel(1).expireAfterAccess(99999, SECONDS));
+    Segment<Object, Object> segment = map.segments[0];
+    // TODO(fry): check recency ordering
+
+    Object key = new Object();
+    int hash = map.hash(key);
+    Object oldValue = new Object();
+    Object newValue = new Object();
+
+    // no entry
+    assertEquals(0, segment.count);
+    assertNull(segment.put(key, hash, oldValue, false));
+    assertEquals(1, segment.count);
+
+    // same key
+    assertSame(oldValue, segment.put(key, hash, newValue, false));
+    assertEquals(1, segment.count);
+    assertSame(newValue, segment.get(key, hash));
+
+    // cleared
+    ReferenceEntry<Object, Object> entry = segment.getEntry(key, hash);
+    DummyValueReference<Object, Object> oldValueRef = DummyValueReference.create(oldValue, entry);
+    entry.setValueReference(oldValueRef);
+    assertSame(oldValue, segment.get(key, hash));
+    oldValueRef.clear(null);
+    assertNull(segment.put(key, hash, newValue, false));
+    assertEquals(1, segment.count);
+    assertSame(newValue, segment.get(key, hash));
+  }
+
+  public void testSegmentPutIfAbsent() {
+    MapMakerInternalMap<Object, Object> map =
+        makeMap(createMapMaker().concurrencyLevel(1).expireAfterAccess(99999, SECONDS));
+    Segment<Object, Object> segment = map.segments[0];
+    // TODO(fry): check recency ordering
+
+    Object key = new Object();
+    int hash = map.hash(key);
+    Object oldValue = new Object();
+    Object newValue = new Object();
+
+    // no entry
+    assertEquals(0, segment.count);
+    assertNull(segment.put(key, hash, oldValue, true));
+    assertEquals(1, segment.count);
+
+    // same key
+    assertSame(oldValue, segment.put(key, hash, newValue, true));
+    assertEquals(1, segment.count);
+    assertSame(oldValue, segment.get(key, hash));
+
+    // cleared
+    ReferenceEntry<Object, Object> entry = segment.getEntry(key, hash);
+    DummyValueReference<Object, Object> oldValueRef = DummyValueReference.create(oldValue, entry);
+    entry.setValueReference(oldValueRef);
+    assertSame(oldValue, segment.get(key, hash));
+    oldValueRef.clear(null);
+    assertNull(segment.put(key, hash, newValue, true));
+    assertEquals(1, segment.count);
+    assertSame(newValue, segment.get(key, hash));
+  }
+
+  public void testSegmentPut_expand() {
+    MapMakerInternalMap<Object, Object> map =
+        makeMap(createMapMaker().concurrencyLevel(1).initialCapacity(1));
+    Segment<Object, Object> segment = map.segments[0];
+    assertEquals(1, segment.table.length());
+
+    int count = 1024;
+    for (int i = 0; i < count; i++) {
+      Object key = new Object();
+      Object value = new Object();
+      int hash = map.hash(key);
+      assertNull(segment.put(key, hash, value, false));
+      assertTrue(segment.table.length() > i);
+    }
+  }
+
+  public void testSegmentPut_evict() {
+    int maxSize = 10;
+    MapMakerInternalMap<Object, Object> map =
+        makeMap(createMapMaker().concurrencyLevel(1).maximumSize(maxSize));
+
+    // manually add elements to avoid eviction
+    int originalCount = 1024;
+    LinkedHashMap<Object, Object> originalMap = Maps.newLinkedHashMap();
+    for (int i = 0; i < originalCount; i++) {
+      Object key = new Object();
+      Object value = new Object();
+      map.put(key, value);
+      originalMap.put(key, value);
+      if (i >= maxSize) {
+        Iterator<Object> it = originalMap.keySet().iterator();
+        it.next();
+        it.remove();
+      }
+      assertEquals(originalMap, map);
+    }
+  }
+
+  public void testSegmentRemove() {
+    MapMakerInternalMap<Object, Object> map = makeMap(createMapMaker().concurrencyLevel(1));
+    Segment<Object, Object> segment = map.segments[0];
+
+    Object key = new Object();
+    int hash = map.hash(key);
+    Object oldValue = new Object();
+    AtomicReferenceArray<ReferenceEntry<Object, Object>> table = segment.table;
+    int index = hash & (table.length() - 1);
+
+    DummyEntry<Object, Object> entry = DummyEntry.create(key, hash, null);
+    DummyValueReference<Object, Object> oldValueRef = DummyValueReference.create(oldValue, entry);
+    entry.setValueReference(oldValueRef);
+
+    // no entry
+    assertEquals(0, segment.count);
+    assertNull(segment.remove(key, hash));
+    assertEquals(0, segment.count);
+
+    // same key
+    table.set(index, entry);
+    segment.count++;
+    assertEquals(1, segment.count);
+    assertSame(oldValue, segment.get(key, hash));
+    assertSame(oldValue, segment.remove(key, hash));
+    assertEquals(0, segment.count);
+    assertNull(segment.get(key, hash));
+
+    // cleared
+    table.set(index, entry);
+    segment.count++;
+    assertEquals(1, segment.count);
+    assertSame(oldValue, segment.get(key, hash));
+    oldValueRef.clear(null);
+    assertNull(segment.remove(key, hash));
+    assertEquals(0, segment.count);
+    assertNull(segment.get(key, hash));
+  }
+
+  public void testSegmentRemoveValue() {
+    MapMakerInternalMap<Object, Object> map = makeMap(createMapMaker().concurrencyLevel(1));
+    Segment<Object, Object> segment = map.segments[0];
+
+    Object key = new Object();
+    int hash = map.hash(key);
+    Object oldValue = new Object();
+    Object newValue = new Object();
+    AtomicReferenceArray<ReferenceEntry<Object, Object>> table = segment.table;
+    int index = hash & (table.length() - 1);
+
+    DummyEntry<Object, Object> entry = DummyEntry.create(key, hash, null);
+    DummyValueReference<Object, Object> oldValueRef = DummyValueReference.create(oldValue, entry);
+    entry.setValueReference(oldValueRef);
+
+    // no entry
+    assertEquals(0, segment.count);
+    assertNull(segment.remove(key, hash));
+    assertEquals(0, segment.count);
+
+    // same value
+    table.set(index, entry);
+    segment.count++;
+    assertEquals(1, segment.count);
+    assertSame(oldValue, segment.get(key, hash));
+    assertTrue(segment.remove(key, hash, oldValue));
+    assertEquals(0, segment.count);
+    assertNull(segment.get(key, hash));
+
+    // different value
+    table.set(index, entry);
+    segment.count++;
+    assertEquals(1, segment.count);
+    assertSame(oldValue, segment.get(key, hash));
+    assertFalse(segment.remove(key, hash, newValue));
+    assertEquals(1, segment.count);
+    assertSame(oldValue, segment.get(key, hash));
+
+    // cleared
+    assertSame(oldValue, segment.get(key, hash));
+    oldValueRef.clear(null);
+    assertFalse(segment.remove(key, hash, oldValue));
+    assertEquals(0, segment.count);
+    assertNull(segment.get(key, hash));
+  }
+
+  public void testExpand() {
+    MapMakerInternalMap<Object, Object> map =
+        makeMap(createMapMaker().concurrencyLevel(1).initialCapacity(1));
+    Segment<Object, Object> segment = map.segments[0];
+    assertEquals(1, segment.table.length());
+
+    // manually add elements to avoid expansion
+    int originalCount = 1024;
+    ReferenceEntry<Object, Object> entry = null;
+    for (int i = 0; i < originalCount; i++) {
+      Object key = new Object();
+      Object value = new Object();
+      int hash = map.hash(key);
+      // chain all entries together as we only have a single bucket
+      entry = map.newEntry(key, hash, entry);
+      ValueReference<Object, Object> valueRef = map.newValueReference(entry, value);
+      entry.setValueReference(valueRef);
+    }
+    segment.table.set(0, entry);
+    segment.count = originalCount;
+    ImmutableMap<Object, Object> originalMap = ImmutableMap.copyOf(map);
+    assertEquals(originalCount, originalMap.size());
+    assertEquals(originalMap, map);
+
+    for (int i = 1; i <= originalCount * 2; i *= 2) {
+      if (i > 1) {
+        segment.expand();
+      }
+      assertEquals(i, segment.table.length());
+      assertEquals(originalCount, countLiveEntries(map));
+      assertEquals(originalCount, segment.count);
+      assertEquals(originalMap, map);
+    }
+  }
+
+  public void testReclaimKey() {
+    CountingRemovalListener<Object, Object> listener =
+        new CountingRemovalListener<Object, Object>();
+    MapMakerInternalMap<Object, Object> map = makeMap(createMapMaker()
+        .concurrencyLevel(1)
+        .initialCapacity(1)
+        .maximumSize(SMALL_MAX_SIZE)
+        .expireAfterWrite(99999, SECONDS)
+        .removalListener(listener));
+    Segment<Object, Object> segment = map.segments[0];
+    AtomicReferenceArray<ReferenceEntry<Object, Object>> table = segment.table;
+    assertEquals(1, table.length());
+
+    // create 3 objects and chain them together
+    Object keyOne = new Object();
+    Object valueOne = new Object();
+    int hashOne = map.hash(keyOne);
+    DummyEntry<Object, Object> entryOne = createDummyEntry(keyOne, hashOne, valueOne, null);
+    Object keyTwo = new Object();
+    Object valueTwo = new Object();
+    int hashTwo = map.hash(keyTwo);
+    DummyEntry<Object, Object> entryTwo = createDummyEntry(keyTwo, hashTwo, valueTwo, entryOne);
+    Object keyThree = new Object();
+    Object valueThree = new Object();
+    int hashThree = map.hash(keyThree);
+    DummyEntry<Object, Object> entryThree =
+        createDummyEntry(keyThree, hashThree, valueThree, entryTwo);
+
+    // absent
+    assertEquals(0, listener.getCount());
+    assertFalse(segment.reclaimKey(entryOne, hashOne));
+    assertEquals(0, listener.getCount());
+    table.set(0, entryOne);
+    assertFalse(segment.reclaimKey(entryTwo, hashTwo));
+    assertEquals(0, listener.getCount());
+    table.set(0, entryTwo);
+    assertFalse(segment.reclaimKey(entryThree, hashThree));
+    assertEquals(0, listener.getCount());
+
+    // present
+    table.set(0, entryOne);
+    segment.count = 1;
+    assertTrue(segment.reclaimKey(entryOne, hashOne));
+    assertEquals(1, listener.getCount());
+    assertSame(keyOne, listener.getLastEvictedKey());
+    assertSame(valueOne, listener.getLastEvictedValue());
+    assertTrue(map.removalNotificationQueue.isEmpty());
+    assertFalse(segment.evictionQueue.contains(entryOne));
+    assertFalse(segment.expirationQueue.contains(entryOne));
+    assertEquals(0, segment.count);
+    assertNull(table.get(0));
+  }
+
+  public void testRemoveFromChain() {
+    MapMakerInternalMap<Object, Object> map = makeMap(createMapMaker().concurrencyLevel(1));
+    Segment<Object, Object> segment = map.segments[0];
+
+    // create 3 objects and chain them together
+    Object keyOne = new Object();
+    Object valueOne = new Object();
+    int hashOne = map.hash(keyOne);
+    DummyEntry<Object, Object> entryOne = createDummyEntry(keyOne, hashOne, valueOne, null);
+    Object keyTwo = new Object();
+    Object valueTwo = new Object();
+    int hashTwo = map.hash(keyTwo);
+    DummyEntry<Object, Object> entryTwo = createDummyEntry(keyTwo, hashTwo, valueTwo, entryOne);
+    Object keyThree = new Object();
+    Object valueThree = new Object();
+    int hashThree = map.hash(keyThree);
+    DummyEntry<Object, Object> entryThree =
+        createDummyEntry(keyThree, hashThree, valueThree, entryTwo);
+
+    // alone
+    assertNull(segment.removeFromChain(entryOne, entryOne));
+
+    // head
+    assertSame(entryOne, segment.removeFromChain(entryTwo, entryTwo));
+
+    // middle
+    ReferenceEntry<Object, Object> newFirst = segment.removeFromChain(entryThree, entryTwo);
+    assertSame(keyThree, newFirst.getKey());
+    assertSame(valueThree, newFirst.getValueReference().get());
+    assertEquals(hashThree, newFirst.getHash());
+    assertSame(entryOne, newFirst.getNext());
+
+    // tail (remaining entries are copied in reverse order)
+    newFirst = segment.removeFromChain(entryThree, entryOne);
+    assertSame(keyTwo, newFirst.getKey());
+    assertSame(valueTwo, newFirst.getValueReference().get());
+    assertEquals(hashTwo, newFirst.getHash());
+    newFirst = newFirst.getNext();
+    assertSame(keyThree, newFirst.getKey());
+    assertSame(valueThree, newFirst.getValueReference().get());
+    assertEquals(hashThree, newFirst.getHash());
+    assertNull(newFirst.getNext());
+  }
+
+  public void testExpand_cleanup() {
+    MapMakerInternalMap<Object, Object> map =
+        makeMap(createMapMaker().concurrencyLevel(1).initialCapacity(1));
+    Segment<Object, Object> segment = map.segments[0];
+    assertEquals(1, segment.table.length());
+
+    // manually add elements to avoid expansion
+    // 1/3 null keys, 1/3 null values
+    int originalCount = 1024;
+    ReferenceEntry<Object, Object> entry = null;
+    for (int i = 0; i < originalCount; i++) {
+      Object key = new Object();
+      Object value = (i % 3 == 0) ? null : new Object();
+      int hash = map.hash(key);
+      if (i % 3 == 1) {
+        key = null;
+      }
+      // chain all entries together as we only have a single bucket
+      entry = DummyEntry.create(key, hash, entry);
+      ValueReference<Object, Object> valueRef = DummyValueReference.create(value, entry);
+      entry.setValueReference(valueRef);
+    }
+    segment.table.set(0, entry);
+    segment.count = originalCount;
+    int liveCount = originalCount / 3;
+    assertEquals(1, segment.table.length());
+    assertEquals(liveCount, countLiveEntries(map));
+    ImmutableMap<Object, Object> originalMap = ImmutableMap.copyOf(map);
+    assertEquals(liveCount, originalMap.size());
+    // can't compare map contents until cleanup occurs
+
+    for (int i = 1; i <= originalCount * 2; i *= 2) {
+      if (i > 1) {
+        segment.expand();
+      }
+      assertEquals(i, segment.table.length());
+      assertEquals(liveCount, countLiveEntries(map));
+      // expansion cleanup is sloppy, with a goal of avoiding unnecessary copies
+      assertTrue(segment.count >= liveCount);
+      assertTrue(segment.count <= originalCount);
+      assertEquals(originalMap, ImmutableMap.copyOf(map));
+    }
+  }
+
+  private static <K, V> int countLiveEntries(MapMakerInternalMap<K, V> map) {
+    int result = 0;
+    for (Segment<K, V> segment : map.segments) {
+      AtomicReferenceArray<ReferenceEntry<K, V>> table = segment.table;
+      for (int i = 0; i < table.length(); i++) {
+        for (ReferenceEntry<K, V> e = table.get(i); e != null; e = e.getNext()) {
+          if (map.isLive(e)) {
+            result++;
+          }
+        }
+      }
+    }
+    return result;
+  }
+
+  public void testClear() {
+    MapMakerInternalMap<Object, Object> map = makeMap(createMapMaker()
+        .concurrencyLevel(1)
+        .initialCapacity(1)
+        .maximumSize(SMALL_MAX_SIZE)
+        .expireAfterWrite(99999, SECONDS));
+    Segment<Object, Object> segment = map.segments[0];
+    AtomicReferenceArray<ReferenceEntry<Object, Object>> table = segment.table;
+    assertEquals(1, table.length());
+
+    Object key = new Object();
+    Object value = new Object();
+    int hash = map.hash(key);
+    DummyEntry<Object, Object> entry = createDummyEntry(key, hash, value, null);
+    segment.recordWrite(entry);
+    segment.table.set(0, entry);
+    segment.readCount.incrementAndGet();
+    segment.count = 1;
+
+    assertSame(entry, table.get(0));
+    assertSame(entry, segment.evictionQueue.peek());
+    assertSame(entry, segment.expirationQueue.peek());
+
+    segment.clear();
+    assertNull(table.get(0));
+    assertTrue(segment.evictionQueue.isEmpty());
+    assertTrue(segment.expirationQueue.isEmpty());
+    assertEquals(0, segment.readCount.get());
+    assertEquals(0, segment.count);
+  }
+
+  public void testRemoveEntry() {
+    MapMakerInternalMap<Object, Object> map = makeMap(createMapMaker()
+        .concurrencyLevel(1)
+        .initialCapacity(1)
+        .maximumSize(SMALL_MAX_SIZE)
+        .expireAfterWrite(99999, SECONDS)
+        .removalListener(new CountingRemovalListener<Object, Object>()));
+    Segment<Object, Object> segment = map.segments[0];
+    AtomicReferenceArray<ReferenceEntry<Object, Object>> table = segment.table;
+    assertEquals(1, table.length());
+
+    Object key = new Object();
+    Object value = new Object();
+    int hash = map.hash(key);
+    DummyEntry<Object, Object> entry = createDummyEntry(key, hash, value, null);
+
+    // remove absent
+    assertFalse(segment.removeEntry(entry, hash, RemovalCause.COLLECTED));
+
+    // remove live
+    segment.recordWrite(entry);
+    table.set(0, entry);
+    segment.count = 1;
+    assertTrue(segment.removeEntry(entry, hash, RemovalCause.COLLECTED));
+    assertNotificationEnqueued(map, key, value, hash);
+    assertTrue(map.removalNotificationQueue.isEmpty());
+    assertFalse(segment.evictionQueue.contains(entry));
+    assertFalse(segment.expirationQueue.contains(entry));
+    assertEquals(0, segment.count);
+    assertNull(table.get(0));
+  }
+
+  public void testReclaimValue() {
+    CountingRemovalListener<Object, Object> listener =
+        new CountingRemovalListener<Object, Object>();
+    MapMakerInternalMap<Object, Object> map = makeMap(createMapMaker()
+        .concurrencyLevel(1)
+        .initialCapacity(1)
+        .maximumSize(SMALL_MAX_SIZE)
+        .expireAfterWrite(99999, SECONDS)
+        .removalListener(listener));
+    Segment<Object, Object> segment = map.segments[0];
+    AtomicReferenceArray<ReferenceEntry<Object, Object>> table = segment.table;
+    assertEquals(1, table.length());
+
+    Object key = new Object();
+    Object value = new Object();
+    int hash = map.hash(key);
+    DummyEntry<Object, Object> entry = DummyEntry.create(key, hash, null);
+    DummyValueReference<Object, Object> valueRef = DummyValueReference.create(value, entry);
+    entry.setValueReference(valueRef);
+
+    // reclaim absent
+    assertFalse(segment.reclaimValue(key, hash, valueRef));
+
+    // reclaim live
+    segment.recordWrite(entry);
+    table.set(0, entry);
+    segment.count = 1;
+    assertTrue(segment.reclaimValue(key, hash, valueRef));
+    assertEquals(1, listener.getCount());
+    assertSame(key, listener.getLastEvictedKey());
+    assertSame(value, listener.getLastEvictedValue());
+    assertTrue(map.removalNotificationQueue.isEmpty());
+    assertFalse(segment.evictionQueue.contains(entry));
+    assertFalse(segment.expirationQueue.contains(entry));
+    assertEquals(0, segment.count);
+    assertNull(table.get(0));
+
+    // reclaim wrong value reference
+    table.set(0, entry);
+    DummyValueReference<Object, Object> otherValueRef = DummyValueReference.create(value, entry);
+    entry.setValueReference(otherValueRef);
+    assertFalse(segment.reclaimValue(key, hash, valueRef));
+    assertEquals(1, listener.getCount());
+    assertTrue(segment.reclaimValue(key, hash, otherValueRef));
+    assertEquals(2, listener.getCount());
+    assertSame(key, listener.getLastEvictedKey());
+    assertSame(value, listener.getLastEvictedValue());
+  }
+
+  public void testClearValue() {
+    MapMakerInternalMap<Object, Object> map = makeMap(createMapMaker()
+        .concurrencyLevel(1)
+        .initialCapacity(1)
+        .maximumSize(SMALL_MAX_SIZE)
+        .expireAfterWrite(99999, SECONDS)
+        .removalListener(new CountingRemovalListener<Object, Object>()));
+    Segment<Object, Object> segment = map.segments[0];
+    AtomicReferenceArray<ReferenceEntry<Object, Object>> table = segment.table;
+    assertEquals(1, table.length());
+
+    Object key = new Object();
+    Object value = new Object();
+    int hash = map.hash(key);
+    DummyEntry<Object, Object> entry = DummyEntry.create(key, hash, null);
+    DummyValueReference<Object, Object> valueRef = DummyValueReference.create(value, entry);
+    entry.setValueReference(valueRef);
+
+    // clear absent
+    assertFalse(segment.clearValue(key, hash, valueRef));
+
+    // clear live
+    segment.recordWrite(entry);
+    table.set(0, entry);
+    // don't increment count; this is used during computation
+    assertTrue(segment.clearValue(key, hash, valueRef));
+    // no notification sent with clearValue
+    assertTrue(map.removalNotificationQueue.isEmpty());
+    assertFalse(segment.evictionQueue.contains(entry));
+    assertFalse(segment.expirationQueue.contains(entry));
+    assertEquals(0, segment.count);
+    assertNull(table.get(0));
+
+    // clear wrong value reference
+    table.set(0, entry);
+    DummyValueReference<Object, Object> otherValueRef = DummyValueReference.create(value, entry);
+    entry.setValueReference(otherValueRef);
+    assertFalse(segment.clearValue(key, hash, valueRef));
+    entry.setValueReference(valueRef);
+    assertTrue(segment.clearValue(key, hash, valueRef));
+  }
+
+  private static <K, V> void assertNotificationEnqueued(
+      MapMakerInternalMap<K, V> map, K key, V value, int hash) {
+    RemovalNotification<K, V> notification = map.removalNotificationQueue.poll();
+    assertSame(key, notification.getKey());
+    assertSame(value, notification.getValue());
+  }
+
+  // Segment eviction tests
+
+  public void testDrainRecencyQueueOnWrite() {
+    for (MapMaker maker : allEvictingMakers()) {
+      MapMakerInternalMap<Object, Object> map = makeMap(maker.concurrencyLevel(1));
+      Segment<Object, Object> segment = map.segments[0];
+
+      if (segment.recencyQueue != DISCARDING_QUEUE) {
+        Object keyOne = new Object();
+        Object valueOne = new Object();
+        Object keyTwo = new Object();
+        Object valueTwo = new Object();
+
+        map.put(keyOne, valueOne);
+        assertTrue(segment.recencyQueue.isEmpty());
+
+        for (int i = 0; i < DRAIN_THRESHOLD / 2; i++) {
+          map.get(keyOne);
+        }
+        assertFalse(segment.recencyQueue.isEmpty());
+
+        map.put(keyTwo, valueTwo);
+        assertTrue(segment.recencyQueue.isEmpty());
+      }
+    }
+  }
+
+  public void testDrainRecencyQueueOnRead() {
+    for (MapMaker maker : allEvictingMakers()) {
+      MapMakerInternalMap<Object, Object> map = makeMap(maker.concurrencyLevel(1));
+      Segment<Object, Object> segment = map.segments[0];
+
+      if (segment.recencyQueue != DISCARDING_QUEUE) {
+        Object keyOne = new Object();
+        Object valueOne = new Object();
+
+        // repeated get of the same key
+
+        map.put(keyOne, valueOne);
+        assertTrue(segment.recencyQueue.isEmpty());
+
+        for (int i = 0; i < DRAIN_THRESHOLD / 2; i++) {
+          map.get(keyOne);
+        }
+        assertFalse(segment.recencyQueue.isEmpty());
+
+        for (int i = 0; i < DRAIN_THRESHOLD * 2; i++) {
+          map.get(keyOne);
+          assertTrue(segment.recencyQueue.size() <= DRAIN_THRESHOLD);
+        }
+
+        // get over many different keys
+
+        for (int i = 0; i < DRAIN_THRESHOLD * 2; i++) {
+          map.put(new Object(), new Object());
+        }
+        assertTrue(segment.recencyQueue.isEmpty());
+
+        for (int i = 0; i < DRAIN_THRESHOLD / 2; i++) {
+          map.get(keyOne);
+        }
+        assertFalse(segment.recencyQueue.isEmpty());
+
+        for (Object key : map.keySet()) {
+          map.get(key);
+          assertTrue(segment.recencyQueue.size() <= DRAIN_THRESHOLD);
+        }
+      }
+    }
+  }
+
+  public void testRecordRead() {
+    for (MapMaker maker : allEvictingMakers()) {
+      MapMakerInternalMap<Object, Object> map = makeMap(maker.concurrencyLevel(1));
+      Segment<Object, Object> segment = map.segments[0];
+      List<ReferenceEntry<Object, Object>> writeOrder = Lists.newLinkedList();
+      List<ReferenceEntry<Object, Object>> readOrder = Lists.newLinkedList();
+      for (int i = 0; i < DRAIN_THRESHOLD * 2; i++) {
+        Object key = new Object();
+        int hash = map.hash(key);
+        Object value = new Object();
+
+        ReferenceEntry<Object, Object> entry = createDummyEntry(key, hash, value, null);
+        // must recordRead for drainRecencyQueue to believe this entry is live
+        segment.recordWrite(entry);
+        writeOrder.add(entry);
+        readOrder.add(entry);
+      }
+
+      checkEvictionQueues(map, segment, readOrder, writeOrder);
+      checkExpirationTimes(map);
+
+      // access some of the elements
+      Random random = new Random();
+      List<ReferenceEntry<Object, Object>> reads = Lists.newArrayList();
+      Iterator<ReferenceEntry<Object, Object>> i = readOrder.iterator();
+      while (i.hasNext()) {
+        ReferenceEntry<Object, Object> entry = i.next();
+        if (random.nextBoolean()) {
+          segment.recordRead(entry);
+          reads.add(entry);
+          i.remove();
+        }
+      }
+      checkAndDrainRecencyQueue(map, segment, reads);
+      readOrder.addAll(reads);
+
+      checkEvictionQueues(map, segment, readOrder, writeOrder);
+      checkExpirationTimes(map);
+    }
+  }
+
+  public void testRecordReadOnGet() {
+    for (MapMaker maker : allEvictingMakers()) {
+      MapMakerInternalMap<Object, Object> map = makeMap(maker.concurrencyLevel(1));
+      Segment<Object, Object> segment = map.segments[0];
+      List<ReferenceEntry<Object, Object>> writeOrder = Lists.newLinkedList();
+      List<ReferenceEntry<Object, Object>> readOrder = Lists.newLinkedList();
+      for (int i = 0; i < DRAIN_THRESHOLD * 2; i++) {
+        Object key = new Object();
+        int hash = map.hash(key);
+        Object value = new Object();
+
+        map.put(key, value);
+        ReferenceEntry<Object, Object> entry = segment.getEntry(key, hash);
+        writeOrder.add(entry);
+        readOrder.add(entry);
+      }
+
+      checkEvictionQueues(map, segment, readOrder, writeOrder);
+      checkExpirationTimes(map);
+      assertTrue(segment.recencyQueue.isEmpty());
+
+      // access some of the elements
+      Random random = new Random();
+      List<ReferenceEntry<Object, Object>> reads = Lists.newArrayList();
+      Iterator<ReferenceEntry<Object, Object>> i = readOrder.iterator();
+      while (i.hasNext()) {
+        ReferenceEntry<Object, Object> entry = i.next();
+        if (random.nextBoolean()) {
+          map.get(entry.getKey());
+          reads.add(entry);
+          i.remove();
+          assertTrue(segment.recencyQueue.size() <= DRAIN_THRESHOLD);
+        }
+      }
+      int undrainedIndex = reads.size() - segment.recencyQueue.size();
+      checkAndDrainRecencyQueue(map, segment, reads.subList(undrainedIndex, reads.size()));
+      readOrder.addAll(reads);
+
+      checkEvictionQueues(map, segment, readOrder, writeOrder);
+      checkExpirationTimes(map);
+    }
+  }
+
+  public void testRecordWrite() {
+    for (MapMaker maker : allEvictingMakers()) {
+      MapMakerInternalMap<Object, Object> map = makeMap(maker.concurrencyLevel(1));
+      Segment<Object, Object> segment = map.segments[0];
+      List<ReferenceEntry<Object, Object>> writeOrder = Lists.newLinkedList();
+      for (int i = 0; i < DRAIN_THRESHOLD * 2; i++) {
+        Object key = new Object();
+        int hash = map.hash(key);
+        Object value = new Object();
+
+        ReferenceEntry<Object, Object> entry = createDummyEntry(key, hash, value, null);
+        // must recordRead for drainRecencyQueue to believe this entry is live
+        segment.recordWrite(entry);
+        writeOrder.add(entry);
+      }
+
+      checkEvictionQueues(map, segment, writeOrder, writeOrder);
+      checkExpirationTimes(map);
+
+      // access some of the elements
+      Random random = new Random();
+      List<ReferenceEntry<Object, Object>> writes = Lists.newArrayList();
+      Iterator<ReferenceEntry<Object, Object>> i = writeOrder.iterator();
+      while (i.hasNext()) {
+        ReferenceEntry<Object, Object> entry = i.next();
+        if (random.nextBoolean()) {
+          segment.recordWrite(entry);
+          writes.add(entry);
+          i.remove();
+        }
+      }
+      writeOrder.addAll(writes);
+
+      checkEvictionQueues(map, segment, writeOrder, writeOrder);
+      checkExpirationTimes(map);
+    }
+  }
+
+  static <K, V> void checkAndDrainRecencyQueue(MapMakerInternalMap<K, V> map,
+      Segment<K, V> segment, List<ReferenceEntry<K, V>> reads) {
+    if (map.evictsBySize() || map.expiresAfterAccess()) {
+      assertSameEntries(reads, ImmutableList.copyOf(segment.recencyQueue));
+    }
+    segment.drainRecencyQueue();
+  }
+
+  static <K, V> void checkEvictionQueues(MapMakerInternalMap<K, V> map,
+      Segment<K, V> segment, List<ReferenceEntry<K, V>> readOrder,
+      List<ReferenceEntry<K, V>> writeOrder) {
+    if (map.evictsBySize()) {
+      assertSameEntries(readOrder, ImmutableList.copyOf(segment.evictionQueue));
+    }
+    if (map.expiresAfterAccess()) {
+      assertSameEntries(readOrder, ImmutableList.copyOf(segment.expirationQueue));
+    }
+    if (map.expiresAfterWrite()) {
+      assertSameEntries(writeOrder, ImmutableList.copyOf(segment.expirationQueue));
+    }
+  }
+
+  private static <K, V> void assertSameEntries(List<ReferenceEntry<K, V>> expectedEntries,
+      List<ReferenceEntry<K, V>> actualEntries) {
+    int size = expectedEntries.size();
+    assertEquals(size, actualEntries.size());
+    for (int i = 0; i < size; i++) {
+      ReferenceEntry<K, V> expectedEntry = expectedEntries.get(0);
+      ReferenceEntry<K, V> actualEntry = actualEntries.get(0);
+      assertSame(expectedEntry.getKey(), actualEntry.getKey());
+      assertSame(expectedEntry.getValueReference().get(), actualEntry.getValueReference().get());
+    }
+  }
+
+  static <K, V> void checkExpirationTimes(MapMakerInternalMap<K, V> map) {
+    if (!map.expires()) {
+      return;
+    }
+
+    for (Segment<K, V> segment : map.segments) {
+      long lastExpirationTime = 0;
+      for (ReferenceEntry<K, V> e : segment.recencyQueue) {
+        long expirationTime = e.getExpirationTime();
+        assertTrue(expirationTime >= lastExpirationTime);
+        lastExpirationTime = expirationTime;
+      }
+
+      lastExpirationTime = 0;
+      for (ReferenceEntry<K, V> e : segment.expirationQueue) {
+        long expirationTime = e.getExpirationTime();
+        assertTrue(expirationTime >= lastExpirationTime);
+        lastExpirationTime = expirationTime;
+      }
+    }
+  }
+
+  public void testEvictEntries() {
+    int maxSize = 10;
+    MapMakerInternalMap<Object, Object> map =
+        makeMap(createMapMaker().concurrencyLevel(1).maximumSize(maxSize));
+    Segment<Object, Object> segment = map.segments[0];
+
+    // manually add elements to avoid eviction
+    int originalCount = 1024;
+    ReferenceEntry<Object, Object> entry = null;
+    LinkedHashMap<Object, Object> originalMap = Maps.newLinkedHashMap();
+    for (int i = 0; i < originalCount; i++) {
+      Object key = new Object();
+      Object value = new Object();
+      AtomicReferenceArray<ReferenceEntry<Object, Object>> table = segment.table;
+      int hash = map.hash(key);
+      int index = hash & (table.length() - 1);
+      ReferenceEntry<Object, Object> first = table.get(index);
+      entry = map.newEntry(key, hash, first);
+      ValueReference<Object, Object> valueRef = map.newValueReference(entry, value);
+      entry.setValueReference(valueRef);
+      segment.recordWrite(entry);
+      table.set(index, entry);
+      originalMap.put(key, value);
+    }
+    segment.count = originalCount;
+    assertEquals(originalCount, originalMap.size());
+    assertEquals(originalMap, map);
+
+    for (int i = maxSize - 1; i < originalCount; i++) {
+      assertTrue(segment.evictEntries());
+      Iterator<Object> it = originalMap.keySet().iterator();
+      it.next();
+      it.remove();
+      assertEquals(originalMap, map);
+    }
+    assertFalse(segment.evictEntries());
+  }
+
+  // reference queues
+
+  public void testDrainKeyReferenceQueueOnWrite() {
+    for (MapMaker maker : allKeyValueStrengthMakers()) {
+      MapMakerInternalMap<Object, Object> map =
+          makeMap(maker.concurrencyLevel(1));
+      if (map.usesKeyReferences()) {
+        Segment<Object, Object> segment = map.segments[0];
+
+        Object keyOne = new Object();
+        int hashOne = map.hash(keyOne);
+        Object valueOne = new Object();
+        Object keyTwo = new Object();
+        Object valueTwo = new Object();
+
+        map.put(keyOne, valueOne);
+        ReferenceEntry<Object, Object> entry = segment.getEntry(keyOne, hashOne);
+
+        @SuppressWarnings("unchecked")
+        Reference<Object> reference = (Reference) entry;
+        reference.enqueue();
+
+        map.put(keyTwo, valueTwo);
+        assertFalse(map.containsKey(keyOne));
+        assertFalse(map.containsValue(valueOne));
+        assertNull(map.get(keyOne));
+        assertEquals(1, map.size());
+        assertNull(segment.keyReferenceQueue.poll());
+      }
+    }
+  }
+
+  public void testDrainValueReferenceQueueOnWrite() {
+    for (MapMaker maker : allKeyValueStrengthMakers()) {
+      MapMakerInternalMap<Object, Object> map =
+          makeMap(maker.concurrencyLevel(1));
+      if (map.usesValueReferences()) {
+        Segment<Object, Object> segment = map.segments[0];
+
+        Object keyOne = new Object();
+        int hashOne = map.hash(keyOne);
+        Object valueOne = new Object();
+        Object keyTwo = new Object();
+        Object valueTwo = new Object();
+
+        map.put(keyOne, valueOne);
+        ReferenceEntry<Object, Object> entry = segment.getEntry(keyOne, hashOne);
+        ValueReference<Object, Object> valueReference = entry.getValueReference();
+
+        @SuppressWarnings("unchecked")
+        Reference<Object> reference = (Reference) valueReference;
+        reference.enqueue();
+
+        map.put(keyTwo, valueTwo);
+        assertFalse(map.containsKey(keyOne));
+        assertFalse(map.containsValue(valueOne));
+        assertNull(map.get(keyOne));
+        assertEquals(1, map.size());
+        assertNull(segment.valueReferenceQueue.poll());
+      }
+    }
+  }
+
+  public void testDrainKeyReferenceQueueOnRead() {
+    for (MapMaker maker : allKeyValueStrengthMakers()) {
+      MapMakerInternalMap<Object, Object> map =
+          makeMap(maker.concurrencyLevel(1));
+      if (map.usesKeyReferences()) {
+        Segment<Object, Object> segment = map.segments[0];
+
+        Object keyOne = new Object();
+        int hashOne = map.hash(keyOne);
+        Object valueOne = new Object();
+        Object keyTwo = new Object();
+
+        map.put(keyOne, valueOne);
+        ReferenceEntry<Object, Object> entry = segment.getEntry(keyOne, hashOne);
+
+        @SuppressWarnings("unchecked")
+        Reference<Object> reference = (Reference) entry;
+        reference.enqueue();
+
+        for (int i = 0; i < SMALL_MAX_SIZE; i++) {
+          map.get(keyTwo);
+        }
+        assertFalse(map.containsKey(keyOne));
+        assertFalse(map.containsValue(valueOne));
+        assertNull(map.get(keyOne));
+        assertEquals(0, map.size());
+        assertNull(segment.keyReferenceQueue.poll());
+      }
+    }
+  }
+
+  public void testDrainValueReferenceQueueOnRead() {
+    for (MapMaker maker : allKeyValueStrengthMakers()) {
+      MapMakerInternalMap<Object, Object> map =
+          makeMap(maker.concurrencyLevel(1));
+      if (map.usesValueReferences()) {
+        Segment<Object, Object> segment = map.segments[0];
+
+        Object keyOne = new Object();
+        int hashOne = map.hash(keyOne);
+        Object valueOne = new Object();
+        Object keyTwo = new Object();
+
+        map.put(keyOne, valueOne);
+        ReferenceEntry<Object, Object> entry = segment.getEntry(keyOne, hashOne);
+        ValueReference<Object, Object> valueReference = entry.getValueReference();
+
+        @SuppressWarnings("unchecked")
+        Reference<Object> reference = (Reference) valueReference;
+        reference.enqueue();
+
+        for (int i = 0; i < SMALL_MAX_SIZE; i++) {
+          map.get(keyTwo);
+        }
+        assertFalse(map.containsKey(keyOne));
+        assertFalse(map.containsValue(valueOne));
+        assertNull(map.get(keyOne));
+        assertEquals(0, map.size());
+        assertNull(segment.valueReferenceQueue.poll());
+      }
+    }
+  }
+
+  // utility methods
+
+  /**
+   * Returns an iterable containing all combinations of maximumSize, expireAfterAccess/Write,
+   * weak/softKeys and weak/softValues.
+   */
+  private static Iterable<MapMaker> allEntryTypeMakers() {
+    List<MapMaker> result = newArrayList(allKeyValueStrengthMakers());
+    for (MapMaker maker : allKeyValueStrengthMakers()) {
+      result.add(maker.maximumSize(SMALL_MAX_SIZE));
+    }
+    for (MapMaker maker : allKeyValueStrengthMakers()) {
+      result.add(maker.expireAfterAccess(99999, SECONDS));
+    }
+    for (MapMaker maker : allKeyValueStrengthMakers()) {
+      result.add(maker.expireAfterWrite(99999, SECONDS));
+    }
+    for (MapMaker maker : allKeyValueStrengthMakers()) {
+      result.add(maker.maximumSize(SMALL_MAX_SIZE).expireAfterAccess(99999, SECONDS));
+    }
+    for (MapMaker maker : allKeyValueStrengthMakers()) {
+      result.add(maker.maximumSize(SMALL_MAX_SIZE).expireAfterWrite(99999, SECONDS));
+    }
+    return result;
+  }
+
+  /**
+   * Returns an iterable containing all combinations of maximumSize and expireAfterAccess/Write.
+   */
+  static Iterable<MapMaker> allEvictingMakers() {
+    return ImmutableList.of(createMapMaker().maximumSize(SMALL_MAX_SIZE),
+        createMapMaker().expireAfterAccess(99999, SECONDS),
+        createMapMaker().expireAfterWrite(99999, SECONDS),
+        createMapMaker()
+            .maximumSize(SMALL_MAX_SIZE)
+            .expireAfterAccess(SMALL_MAX_SIZE, TimeUnit.SECONDS),
+        createMapMaker()
+            .maximumSize(SMALL_MAX_SIZE)
+            .expireAfterWrite(SMALL_MAX_SIZE, TimeUnit.SECONDS));
+  }
+
+  /**
+   * Returns an iterable containing all combinations weak/softKeys and weak/softValues.
+   */
+  @SuppressWarnings("deprecation")
+  private static Iterable<MapMaker> allKeyValueStrengthMakers() {
+    return ImmutableList.of(createMapMaker(),
+        createMapMaker().weakValues(),
+        createMapMaker().softValues(),
+        createMapMaker().weakKeys(),
+        createMapMaker().weakKeys().weakValues(),
+        createMapMaker().weakKeys().softValues(),
+        createMapMaker().softKeys(),
+        createMapMaker().softKeys().weakValues(),
+        createMapMaker().softKeys().softValues());
+  }
+
+  // listeners
+
+  private static class CountingRemovalListener<K, V> implements RemovalListener<K, V> {
+    private final AtomicInteger count = new AtomicInteger();
+    private K lastKey;
+    private V lastValue;
+
+    @Override
+    public void onRemoval(RemovalNotification<K, V> notification) {
+      count.incrementAndGet();
+      lastKey = notification.getKey();
+      lastValue = notification.getValue();
+    }
+
+    public int getCount() {
+      return count.get();
+    }
+
+    public K getLastEvictedKey() {
+      return lastKey;
+    }
+
+    public V getLastEvictedValue() {
+      return lastValue;
+    }
+  }
+
+  static class QueuingRemovalListener<K, V>
+      extends ConcurrentLinkedQueue<RemovalNotification<K, V>> implements RemovalListener<K, V> {
+    @Override
+    public void onRemoval(RemovalNotification<K, V> notification) {
+      add(notification);
+    }
+  }
+
+  // entries and values
+
+  private static <K, V> DummyEntry<K, V> createDummyEntry(
+      K key, int hash, V value, ReferenceEntry<K, V> next) {
+    DummyEntry<K, V> entry = DummyEntry.create(key, hash, next);
+    DummyValueReference<K, V> valueRef = DummyValueReference.create(value, entry);
+    entry.setValueReference(valueRef);
+    return entry;
+  }
+
+  static class DummyEntry<K, V> implements ReferenceEntry<K, V> {
+    private K key;
+    private final int hash;
+    private final ReferenceEntry<K, V> next;
+
+    public DummyEntry(K key, int hash, ReferenceEntry<K, V> next) {
+      this.key = key;
+      this.hash = hash;
+      this.next = next;
+    }
+
+    public static <K, V> DummyEntry<K, V> create(K key, int hash, ReferenceEntry<K, V> next) {
+      return new DummyEntry<K, V>(key, hash, next);
+    }
+
+    public void clearKey() {
+      this.key = null;
+    }
+
+    private ValueReference<K, V> valueReference = unset();
+
+    @Override
+    public ValueReference<K, V> getValueReference() {
+      return valueReference;
+    }
+
+    @Override
+    public void setValueReference(ValueReference<K, V> valueReference) {
+      this.valueReference = valueReference;
+    }
+
+    @Override
+    public ReferenceEntry<K, V> getNext() {
+      return next;
+    }
+
+    @Override
+    public int getHash() {
+      return hash;
+    }
+
+    @Override
+    public K getKey() {
+      return key;
+    }
+
+    private long expirationTime = Long.MAX_VALUE;
+
+    @Override
+    public long getExpirationTime() {
+      return expirationTime;
+    }
+
+    @Override
+    public void setExpirationTime(long time) {
+      this.expirationTime = time;
+    }
+
+    private ReferenceEntry<K, V> nextExpirable = nullEntry();
+
+    @Override
+    public ReferenceEntry<K, V> getNextExpirable() {
+      return nextExpirable;
+    }
+
+    @Override
+    public void setNextExpirable(ReferenceEntry<K, V> next) {
+      this.nextExpirable = next;
+    }
+
+    private ReferenceEntry<K, V> previousExpirable = nullEntry();
+
+    @Override
+    public ReferenceEntry<K, V> getPreviousExpirable() {
+      return previousExpirable;
+    }
+
+    @Override
+    public void setPreviousExpirable(ReferenceEntry<K, V> previous) {
+      this.previousExpirable = previous;
+    }
+
+    private ReferenceEntry<K, V> nextEvictable = nullEntry();
+
+    @Override
+    public ReferenceEntry<K, V> getNextEvictable() {
+      return nextEvictable;
+    }
+
+    @Override
+    public void setNextEvictable(ReferenceEntry<K, V> next) {
+      this.nextEvictable = next;
+    }
+
+    private ReferenceEntry<K, V> previousEvictable = nullEntry();
+
+    @Override
+    public ReferenceEntry<K, V> getPreviousEvictable() {
+      return previousEvictable;
+    }
+
+    @Override
+    public void setPreviousEvictable(ReferenceEntry<K, V> previous) {
+      this.previousEvictable = previous;
+    }
+  }
+
+  static class DummyValueReference<K, V> implements ValueReference<K, V> {
+    final ReferenceEntry<K, V> entry;
+    private V value;
+
+    public DummyValueReference(V value, ReferenceEntry<K, V> entry) {
+      this.value = value;
+      this.entry = entry;
+    }
+
+    public static <K, V> DummyValueReference<K, V> create(V value, ReferenceEntry<K, V> entry) {
+      return new DummyValueReference<K, V>(value, entry);
+    }
+
+    @Override
+    public V get() {
+      return value;
+    }
+
+    @Override
+    public ReferenceEntry<K, V> getEntry() {
+      return entry;
+    }
+
+    @Override
+    public ValueReference<K, V> copyFor(ReferenceQueue<V> queue, ReferenceEntry<K, V> entry) {
+      return new DummyValueReference<K, V>(value, entry);
+    }
+
+    boolean computing = false;
+
+    public void setComputing(boolean computing) {
+      this.computing = computing;
+    }
+
+    @Override
+    public boolean isComputingReference() {
+      return computing;
+    }
+
+    @Override
+    public V waitForValue() {
+      return get();
+    }
+
+    @Override
+    public void clear(ValueReference<K, V> newValue) {
+      value = null;
+    }
+  }
+
+  public void testNullParameters() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.testAllPublicInstanceMethods(makeMap(createMapMaker()));
+  }
+
+}
diff --git a/guava-tests/test/com/google/common/collect/MapMakerTest.java b/guava-tests/test/com/google/common/collect/MapMakerTest.java
new file mode 100644
index 0000000..f3d977a
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/MapMakerTest.java
@@ -0,0 +1,185 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.util.concurrent.Uninterruptibles.awaitUninterruptibly;
+
+import com.google.common.base.Function;
+import com.google.common.collect.MapMaker.RemovalNotification;
+import com.google.common.collect.MapMakerInternalMapTest.QueuingRemovalListener;
+import com.google.common.testing.NullPointerTester;
+
+import junit.framework.TestCase;
+
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ * @author Charles Fry
+ */
+public class MapMakerTest extends TestCase {
+
+  public void testNullParameters() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.testAllPublicInstanceMethods(new MapMaker());
+  }
+
+  public void testRemovalNotification_clear() throws InterruptedException {
+    // If a clear() happens while a computation is pending, we should not get a removal
+    // notification.
+
+    final CountDownLatch computingLatch = new CountDownLatch(1);
+    Function<String, String> computingFunction = new DelayingIdentityLoader(computingLatch);
+    QueuingRemovalListener<String, String> listener = new QueuingRemovalListener<String, String>();
+
+    @SuppressWarnings("deprecation") // test of deprecated code
+    final ConcurrentMap<String, String> map = new MapMaker()
+        .concurrencyLevel(1)
+        .removalListener(listener)
+        .makeComputingMap(computingFunction);
+
+    // seed the map, so its segment's count > 0
+    map.put("a", "a");
+
+    final CountDownLatch computationStarted = new CountDownLatch(1);
+    final CountDownLatch computationComplete = new CountDownLatch(1);
+    new Thread(new Runnable() {
+      @Override public void run() {
+        computationStarted.countDown();
+        map.get("b");
+        computationComplete.countDown();
+      }
+    }).start();
+
+    // wait for the computingEntry to be created
+    computationStarted.await();
+    map.clear();
+    // let the computation proceed
+    computingLatch.countDown();
+    // don't check map.size() until we know the get("b") call is complete
+    computationComplete.await();
+
+    // At this point, the listener should be holding the seed value (a -> a), and the map should
+    // contain the computed value (b -> b), since the clear() happened before the computation
+    // completed.
+    assertEquals(1, listener.size());
+    RemovalNotification<String, String> notification = listener.remove();
+    assertEquals("a", notification.getKey());
+    assertEquals("a", notification.getValue());
+    assertEquals(1, map.size());
+    assertEquals("b", map.get("b"));
+  }
+
+  // "Basher tests", where we throw a bunch of stuff at a Cache and check basic invariants.
+
+  /**
+   * This is a less carefully-controlled version of {@link #testRemovalNotification_clear} - this is
+   * a black-box test that tries to create lots of different thread-interleavings, and asserts that
+   * each computation is affected by a call to {@code clear()} (and therefore gets passed to the
+   * removal listener), or else is not affected by the {@code clear()} (and therefore exists in the
+   * map afterward).
+   */
+
+  public void testRemovalNotification_clear_basher() throws InterruptedException {
+    // If a clear() happens close to the end of computation, one of two things should happen:
+    // - computation ends first: the removal listener is called, and the map does not contain the
+    //   key/value pair
+    // - clear() happens first: the removal listener is not called, and the map contains the pair
+    CountDownLatch computationLatch = new CountDownLatch(1);
+    QueuingRemovalListener<String, String> listener = new QueuingRemovalListener<String, String>();
+
+    @SuppressWarnings("deprecation") // test of deprecated code
+    final Map<String, String> map = new MapMaker()
+        .removalListener(listener)
+        .concurrencyLevel(20)
+        .makeComputingMap(new DelayingIdentityLoader<String>(computationLatch));
+
+    int nThreads = 100;
+    int nTasks = 1000;
+    int nSeededEntries = 100;
+    Set<String> expectedKeys = Sets.newHashSetWithExpectedSize(nTasks + nSeededEntries);
+    // seed the map, so its segments have a count>0; otherwise, clear() won't visit the in-progress
+    // entries
+    for (int i = 0; i < nSeededEntries; i++) {
+      String s = "b" + i;
+      map.put(s, s);
+      expectedKeys.add(s);
+    }
+
+    final AtomicInteger computedCount = new AtomicInteger();
+    ExecutorService threadPool = Executors.newFixedThreadPool(nThreads);
+    final CountDownLatch tasksFinished = new CountDownLatch(nTasks);
+    for (int i = 0; i < nTasks; i++) {
+      final String s = "a" + i;
+      threadPool.submit(new Runnable() {
+        @Override public void run() {
+          map.get(s);
+          computedCount.incrementAndGet();
+          tasksFinished.countDown();
+        }
+      });
+      expectedKeys.add(s);
+    }
+
+    computationLatch.countDown();
+    // let some computations complete
+    while (computedCount.get() < nThreads) {
+      Thread.yield();
+    }
+    map.clear();
+    tasksFinished.await();
+
+    // Check all of the removal notifications we received: they should have had correctly-associated
+    // keys and values. (An earlier bug saw removal notifications for in-progress computations,
+    // which had real keys with null values.)
+    Map<String, String> removalNotifications = Maps.newHashMap();
+    for (RemovalNotification<String, String> notification : listener) {
+      removalNotifications.put(notification.getKey(), notification.getValue());
+      assertEquals("Unexpected key/value pair passed to removalListener",
+          notification.getKey(), notification.getValue());
+    }
+
+    // All of the seed values should have been visible, so we should have gotten removal
+    // notifications for all of them.
+    for (int i = 0; i < nSeededEntries; i++) {
+      assertEquals("b" + i, removalNotifications.get("b" + i));
+    }
+
+    // Each of the values added to the map should either still be there, or have seen a removal
+    // notification.
+    assertEquals(expectedKeys, Sets.union(map.keySet(), removalNotifications.keySet()));
+    assertTrue(Sets.intersection(map.keySet(), removalNotifications.keySet()).isEmpty());
+  }
+
+  static final class DelayingIdentityLoader<T> implements Function<T, T> {
+    private final CountDownLatch delayLatch;
+
+    DelayingIdentityLoader(CountDownLatch delayLatch) {
+      this.delayLatch = delayLatch;
+    }
+
+    @Override public T apply(T key) {
+      awaitUninterruptibly(delayLatch);
+      return key;
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/MapsSortedTransformValuesTest.java b/guava-tests/test/com/google/common/collect/MapsSortedTransformValuesTest.java
new file mode 100644
index 0000000..34768ea
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/MapsSortedTransformValuesTest.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import java.util.Map;
+import java.util.SortedMap;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Function;
+import com.google.common.base.Functions;
+
+/**
+ * Tests for {@link Maps#transformValues(SortedMap, Function)}.
+ * 
+ * @author Louis Wasserman
+ */
+@GwtCompatible
+public class MapsSortedTransformValuesTest extends MapsTransformValuesTest {
+
+  @Override
+  protected SortedMap<String, String> makeEmptyMap() {
+    return Maps.transformValues(Maps.<String, String>newTreeMap(),
+        Functions.<String>identity());
+  }
+
+  @Override
+  protected SortedMap<String, String> makePopulatedMap() {
+    SortedMap<String, Integer> underlying = Maps.newTreeMap();
+    underlying.put("a", 1);
+    underlying.put("b", 2);
+    underlying.put("c", 3);
+    return Maps.transformValues(underlying, Functions.toStringFunction());
+  }
+
+  public void testTransformValuesSecretlySortedMap() {
+    Map<String, String> sortedMap = Maps.newTreeMap();
+    assertTrue(Maps.transformValues(sortedMap, Functions.<String>identity())
+        instanceof SortedMap);
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/MapsTest.java b/guava-tests/test/com/google/common/collect/MapsTest.java
new file mode 100644
index 0000000..823afa7
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/MapsTest.java
@@ -0,0 +1,1519 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.collect.Maps.transformEntries;
+import static com.google.common.collect.testing.testers.CollectionIteratorTester.getIteratorUnknownOrderRemoveSupportedMethod;
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.base.Equivalence;
+import com.google.common.base.Equivalences;
+import com.google.common.base.Function;
+import com.google.common.base.Functions;
+import com.google.common.base.Predicate;
+import com.google.common.base.Predicates;
+import com.google.common.collect.Maps.EntryTransformer;
+import com.google.common.collect.Maps.ValueDifferenceImpl;
+import com.google.common.collect.SetsTest.Derived;
+import com.google.common.collect.testing.MapTestSuiteBuilder;
+import com.google.common.collect.testing.SortedMapInterfaceTest;
+import com.google.common.collect.testing.TestStringMapGenerator;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.MapFeature;
+import com.google.common.testing.EqualsTester;
+import com.google.common.testing.NullPointerTester;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import java.io.IOException;
+import java.lang.reflect.Field;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.EnumMap;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.IdentityHashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Properties;
+import java.util.Set;
+import java.util.SortedMap;
+import java.util.TreeMap;
+import java.util.concurrent.ConcurrentMap;
+
+/**
+ * Unit test for {@code Maps}.
+ *
+ * @author Kevin Bourrillion
+ * @author Mike Bostock
+ * @author Jared Levy
+ */
+@GwtCompatible(emulated = true)
+public class MapsTest extends TestCase {
+
+  private static final Comparator<Integer> SOME_COMPARATOR =
+      Collections.reverseOrder();
+
+  public void testHashMap() {
+    HashMap<Integer, Integer> map = Maps.newHashMap();
+    assertEquals(Collections.emptyMap(), map);
+  }
+
+  public void testHashMapWithInitialMap() {
+    Map<String, Integer> original = new TreeMap<String, Integer>();
+    original.put("a", 1);
+    original.put("b", 2);
+    original.put("c", 3);
+    HashMap<String, Integer> map = Maps.newHashMap(original);
+    assertEquals(original, map);
+  }
+
+  public void testHashMapGeneralizesTypes() {
+    Map<String, Integer> original = new TreeMap<String, Integer>();
+    original.put("a", 1);
+    original.put("b", 2);
+    original.put("c", 3);
+    HashMap<Object, Object> map =
+        Maps.newHashMap((Map<? extends Object, ? extends Object>) original);
+    assertEquals(original, map);
+  }
+
+  public void testCapacityForNegativeSizeFails() {
+    try {
+      Maps.capacity(-1);
+      fail("Negative expected size must result in IllegalArgumentException");
+    } catch (IllegalArgumentException ex) {
+    }
+  }
+
+  /**
+   * Tests that nHMWES makes hash maps large enough that adding the expected
+   * number of elements won't cause a rehash.
+   *
+   * This test may fail miserably on non-OpenJDK environments...
+   */
+  @GwtIncompatible("reflection")
+  public void testNewHashMapWithExpectedSize_wontGrow() throws Exception {
+    for (int size = 0; size < 200; size++) {
+      HashMap<Integer, Void> map1 = Maps.newHashMapWithExpectedSize(size);
+
+      int startSize = sizeOf(map1);
+
+      for (int i = 0; i < size; i++) {
+        map1.put(i, null);
+      }
+      assertEquals("table size after adding " + size + "elements",
+          startSize, sizeOf(map1));
+
+      /*
+       * Something slightly different happens when the entries are added all at
+       * once; make sure that passes too.
+       */
+      HashMap<Integer, Void> map2 = Maps.newHashMapWithExpectedSize(size);
+      map2.putAll(map1);
+      assertEquals("table size after adding " + size + "elements",
+          startSize, sizeOf(map2));
+    }
+  }
+
+  @GwtIncompatible("reflection")
+  private static int sizeOf(HashMap<?, ?> hashMap) throws Exception {
+    Field tableField = HashMap.class.getDeclaredField("table");
+    tableField.setAccessible(true);
+    Object[] table = (Object[]) tableField.get(hashMap);
+    return table.length;
+  }
+
+  public void testCapacityForLargeSizes() {
+    int[] largeExpectedSizes = new int[] {
+      Integer.MAX_VALUE / 2 - 1,
+      Integer.MAX_VALUE / 2,
+      Integer.MAX_VALUE / 2 + 1,
+      Integer.MAX_VALUE - 1,
+      Integer.MAX_VALUE};
+    for (int expectedSize : largeExpectedSizes) {
+      int capacity = Maps.capacity(expectedSize);
+      assertTrue(
+          "capacity (" + capacity + ") must be >= expectedSize (" + expectedSize + ")",
+          capacity >= expectedSize);
+    }
+  }
+
+  public void testLinkedHashMap() {
+    LinkedHashMap<Integer, Integer> map = Maps.newLinkedHashMap();
+    assertEquals(Collections.emptyMap(), map);
+  }
+
+  @SuppressWarnings("serial")
+  public void testLinkedHashMapWithInitialMap() {
+    Map<String, String> map = new LinkedHashMap<String, String>() {{
+      put("Hello", "World");
+      put("first", "second");
+      put("polygene", "lubricants");
+      put("alpha", "betical");
+    }};
+
+    LinkedHashMap<String, String> copy = Maps.newLinkedHashMap(map);
+
+    Iterator<Entry<String, String>> iter = copy.entrySet().iterator();
+    assertTrue(iter.hasNext());
+    Entry<String, String> entry = iter.next();
+    assertEquals("Hello", entry.getKey());
+    assertEquals("World", entry.getValue());
+    assertTrue(iter.hasNext());
+
+    entry = iter.next();
+    assertEquals("first", entry.getKey());
+    assertEquals("second", entry.getValue());
+    assertTrue(iter.hasNext());
+
+    entry = iter.next();
+    assertEquals("polygene", entry.getKey());
+    assertEquals("lubricants", entry.getValue());
+    assertTrue(iter.hasNext());
+
+    entry = iter.next();
+    assertEquals("alpha", entry.getKey());
+    assertEquals("betical", entry.getValue());
+    assertFalse(iter.hasNext());
+  }
+
+  public void testLinkedHashMapGeneralizesTypes() {
+    Map<String, Integer> original = new LinkedHashMap<String, Integer>();
+    original.put("a", 1);
+    original.put("b", 2);
+    original.put("c", 3);
+    HashMap<Object, Object> map
+        = Maps.<Object, Object>newLinkedHashMap(original);
+    assertEquals(original, map);
+  }
+
+  public void testIdentityHashMap() {
+    IdentityHashMap<Integer, Integer> map = Maps.newIdentityHashMap();
+    assertEquals(Collections.emptyMap(), map);
+  }
+
+  public void testConcurrentMap() {
+    ConcurrentMap<Integer, Integer> map = Maps.newConcurrentMap();
+    assertEquals(Collections.emptyMap(), map);
+  }
+
+  public void testTreeMap() {
+    TreeMap<Integer, Integer> map = Maps.newTreeMap();
+    assertEquals(Collections.emptyMap(), map);
+    assertNull(map.comparator());
+  }
+
+  public void testTreeMapDerived() {
+    TreeMap<Derived, Integer> map = Maps.newTreeMap();
+    assertEquals(Collections.emptyMap(), map);
+    map.put(new Derived("foo"), 1);
+    map.put(new Derived("bar"), 2);
+    ASSERT.that(map.keySet()).hasContentsInOrder(
+        new Derived("bar"), new Derived("foo"));
+    ASSERT.that(map.values()).hasContentsInOrder(2, 1);
+    assertNull(map.comparator());
+  }
+
+  public void testTreeMapNonGeneric() {
+    TreeMap<LegacyComparable, Integer> map = Maps.newTreeMap();
+    assertEquals(Collections.emptyMap(), map);
+    map.put(new LegacyComparable("foo"), 1);
+    map.put(new LegacyComparable("bar"), 2);
+    ASSERT.that(map.keySet()).hasContentsInOrder(
+        new LegacyComparable("bar"), new LegacyComparable("foo"));
+    ASSERT.that(map.values()).hasContentsInOrder(2, 1);
+    assertNull(map.comparator());
+  }
+
+  public void testTreeMapWithComparator() {
+    TreeMap<Integer, Integer> map = Maps.newTreeMap(SOME_COMPARATOR);
+    assertEquals(Collections.emptyMap(), map);
+    assertSame(SOME_COMPARATOR, map.comparator());
+  }
+
+  public void testTreeMapWithInitialMap() {
+    SortedMap<Integer, Integer> map = Maps.newTreeMap();
+    map.put(5, 10);
+    map.put(3, 20);
+    map.put(1, 30);
+    TreeMap<Integer, Integer> copy = Maps.newTreeMap(map);
+    assertEquals(copy, map);
+    assertSame(copy.comparator(), map.comparator());
+  }
+
+  public enum SomeEnum { SOME_INSTANCE }
+
+  public void testEnumMap() {
+    EnumMap<SomeEnum, Integer> map = Maps.newEnumMap(SomeEnum.class);
+    assertEquals(Collections.emptyMap(), map);
+    map.put(SomeEnum.SOME_INSTANCE, 0);
+    assertEquals(Collections.singletonMap(SomeEnum.SOME_INSTANCE, 0), map);
+  }
+
+  public void testEnumMapNullClass() {
+    try {
+      Maps.<SomeEnum, Long>newEnumMap((Class<MapsTest.SomeEnum>) null);
+      fail("no exception thrown");
+    } catch (NullPointerException expected) {
+    }
+  }
+
+  public void testEnumMapWithInitialEnumMap() {
+    EnumMap<SomeEnum, Integer> original = Maps.newEnumMap(SomeEnum.class);
+    original.put(SomeEnum.SOME_INSTANCE, 0);
+    EnumMap<SomeEnum, Integer> copy = Maps.newEnumMap(original);
+    assertEquals(original, copy);
+  }
+
+  public void testEnumMapWithInitialEmptyEnumMap() {
+    EnumMap<SomeEnum, Integer> original = Maps.newEnumMap(SomeEnum.class);
+    EnumMap<SomeEnum, Integer> copy = Maps.newEnumMap(original);
+    assertEquals(original, copy);
+    assertNotSame(original, copy);
+  }
+
+  public void testEnumMapWithInitialMap() {
+    HashMap<SomeEnum, Integer> original = Maps.newHashMap();
+    original.put(SomeEnum.SOME_INSTANCE, 0);
+    EnumMap<SomeEnum, Integer> copy = Maps.newEnumMap(original);
+    assertEquals(original, copy);
+  }
+
+  public void testEnumMapWithInitialEmptyMap() {
+    Map<SomeEnum, Integer> original = Maps.newHashMap();
+    try {
+      Maps.newEnumMap(original);
+      fail("Empty map must result in an IllegalArgumentException");
+    } catch (IllegalArgumentException expected) {}
+  }
+
+  @GwtIncompatible("NullPointerTester")
+  public void testNullPointerExceptions() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.setDefault(BiMap.class, ImmutableBiMap.of());
+    tester.setDefault(EntryTransformer.class, ALWAYS_NULL);
+    tester.setDefault(Equivalence.class, Equivalences.equals());
+    tester.setDefault(SortedMap.class, Maps.newTreeMap());
+    tester.ignore(Maps.class.getDeclaredMethod("uniqueIndex", Object.class, Function.class));
+    tester.testAllPublicStaticMethods(Maps.class);
+  }
+
+  private static final EntryTransformer<Object, Object, Object> ALWAYS_NULL =
+      new EntryTransformer<Object, Object, Object>() {
+        @Override
+        public Object transformEntry(Object k, Object v1) {
+          return null;
+        }
+      };
+
+  private static final Map<Integer, Integer> EMPTY
+      = Collections.emptyMap();
+  private static final Map<Integer, Integer> SINGLETON
+      = Collections.singletonMap(1, 2);
+
+  public void testMapDifferenceEmptyEmpty() {
+    MapDifference<Integer, Integer> diff = Maps.difference(EMPTY, EMPTY);
+    assertTrue(diff.areEqual());
+    assertEquals(EMPTY, diff.entriesOnlyOnLeft());
+    assertEquals(EMPTY, diff.entriesOnlyOnRight());
+    assertEquals(EMPTY, diff.entriesInCommon());
+    assertEquals(EMPTY, diff.entriesDiffering());
+    assertEquals("equal", diff.toString());
+  }
+
+  public void testMapDifferenceEmptySingleton() {
+    MapDifference<Integer, Integer> diff = Maps.difference(EMPTY, SINGLETON);
+    assertFalse(diff.areEqual());
+    assertEquals(EMPTY, diff.entriesOnlyOnLeft());
+    assertEquals(SINGLETON, diff.entriesOnlyOnRight());
+    assertEquals(EMPTY, diff.entriesInCommon());
+    assertEquals(EMPTY, diff.entriesDiffering());
+    assertEquals("not equal: only on right={1=2}", diff.toString());
+  }
+
+  public void testMapDifferenceSingletonEmpty() {
+    MapDifference<Integer, Integer> diff = Maps.difference(SINGLETON, EMPTY);
+    assertFalse(diff.areEqual());
+    assertEquals(SINGLETON, diff.entriesOnlyOnLeft());
+    assertEquals(EMPTY, diff.entriesOnlyOnRight());
+    assertEquals(EMPTY, diff.entriesInCommon());
+    assertEquals(EMPTY, diff.entriesDiffering());
+    assertEquals("not equal: only on left={1=2}", diff.toString());
+  }
+
+  public void testMapDifferenceTypical() {
+    Map<Integer, String> left = ImmutableMap.of(
+        1, "a", 2, "b", 3, "c", 4, "d", 5, "e");
+    Map<Integer, String> right = ImmutableMap.of(
+        1, "a", 3, "f", 5, "g", 6, "z");
+
+    MapDifference<Integer, String> diff1 = Maps.difference(left, right);
+    assertFalse(diff1.areEqual());
+    assertEquals(ImmutableMap.of(2, "b", 4, "d"), diff1.entriesOnlyOnLeft());
+    assertEquals(ImmutableMap.of(6, "z"), diff1.entriesOnlyOnRight());
+    assertEquals(ImmutableMap.of(1, "a"), diff1.entriesInCommon());
+    assertEquals(ImmutableMap.of(3,
+        ValueDifferenceImpl.create("c", "f"), 5,
+        ValueDifferenceImpl.create("e", "g")),
+        diff1.entriesDiffering());
+    assertEquals("not equal: only on left={2=b, 4=d}: only on right={6=z}: "
+        + "value differences={3=(c, f), 5=(e, g)}", diff1.toString());
+
+    MapDifference<Integer, String> diff2 = Maps.difference(right, left);
+    assertFalse(diff2.areEqual());
+    assertEquals(ImmutableMap.of(6, "z"), diff2.entriesOnlyOnLeft());
+    assertEquals(ImmutableMap.of(2, "b", 4, "d"), diff2.entriesOnlyOnRight());
+    assertEquals(ImmutableMap.of(1, "a"), diff2.entriesInCommon());
+    assertEquals(ImmutableMap.of(3,
+        ValueDifferenceImpl.create("f", "c"), 5,
+        ValueDifferenceImpl.create("g", "e")),
+        diff2.entriesDiffering());
+    assertEquals("not equal: only on left={6=z}: only on right={2=b, 4=d}: "
+        + "value differences={3=(f, c), 5=(g, e)}", diff2.toString());
+  }
+
+  public void testMapDifferenceEquals() {
+    Map<Integer, String> left = ImmutableMap.of(
+        1, "a", 2, "b", 3, "c", 4, "d", 5, "e");
+    Map<Integer, String> right = ImmutableMap.of(
+        1, "a", 3, "f", 5, "g", 6, "z");
+    Map<Integer, String> right2 = ImmutableMap.of(
+        1, "a", 3, "h", 5, "g", 6, "z");
+    MapDifference<Integer, String> original = Maps.difference(left, right);
+    MapDifference<Integer, String> same = Maps.difference(left, right);
+    MapDifference<Integer, String> reverse = Maps.difference(right, left);
+    MapDifference<Integer, String> diff2 = Maps.difference(left, right2);
+
+    new EqualsTester()
+        .addEqualityGroup(original, same)
+        .addEqualityGroup(reverse)
+        .addEqualityGroup(diff2)
+        .testEquals();
+  }
+
+  public void testMapDifferencePredicateTypical() {
+    Map<Integer, String> left = ImmutableMap.of(
+        1, "a", 2, "b", 3, "c", 4, "d", 5, "e");
+    Map<Integer, String> right = ImmutableMap.of(
+        1, "A", 3, "F", 5, "G", 6, "Z");
+
+    // TODO(kevinb): replace with Ascii.caseInsensitiveEquivalence() when it
+    // exists
+    Equivalence<String> caseInsensitiveEquivalence = Equivalences.equals().onResultOf(
+        new Function<String, String>() {
+          @Override public String apply(String input) {
+            return input.toLowerCase();
+          }
+        });
+
+    MapDifference<Integer, String> diff1 = Maps.difference(left, right,
+        caseInsensitiveEquivalence);
+    assertFalse(diff1.areEqual());
+    assertEquals(ImmutableMap.of(2, "b", 4, "d"), diff1.entriesOnlyOnLeft());
+    assertEquals(ImmutableMap.of(6, "Z"), diff1.entriesOnlyOnRight());
+    assertEquals(ImmutableMap.of(1, "a"), diff1.entriesInCommon());
+    assertEquals(ImmutableMap.of(3,
+        ValueDifferenceImpl.create("c", "F"), 5,
+        ValueDifferenceImpl.create("e", "G")),
+        diff1.entriesDiffering());
+    assertEquals("not equal: only on left={2=b, 4=d}: only on right={6=Z}: "
+        + "value differences={3=(c, F), 5=(e, G)}", diff1.toString());
+
+    MapDifference<Integer, String> diff2 = Maps.difference(right, left,
+        caseInsensitiveEquivalence);
+    assertFalse(diff2.areEqual());
+    assertEquals(ImmutableMap.of(6, "Z"), diff2.entriesOnlyOnLeft());
+    assertEquals(ImmutableMap.of(2, "b", 4, "d"), diff2.entriesOnlyOnRight());
+    assertEquals(ImmutableMap.of(1, "A"), diff2.entriesInCommon());
+    assertEquals(ImmutableMap.of(3,
+        ValueDifferenceImpl.create("F", "c"), 5,
+        ValueDifferenceImpl.create("G", "e")),
+        diff2.entriesDiffering());
+    assertEquals("not equal: only on left={6=Z}: only on right={2=b, 4=d}: "
+        + "value differences={3=(F, c), 5=(G, e)}", diff2.toString());
+  }
+
+  private static final SortedMap<Integer, Integer> SORTED_EMPTY = Maps.newTreeMap();
+  private static final SortedMap<Integer, Integer> SORTED_SINGLETON =
+      ImmutableSortedMap.of(1, 2);
+
+  public void testMapDifferenceOfSortedMapIsSorted() {
+    Map<Integer, Integer> map = SORTED_SINGLETON;
+    MapDifference<Integer, Integer> difference = Maps.difference(map, EMPTY);
+    assertTrue(difference instanceof SortedMapDifference);
+  }
+
+  public void testSortedMapDifferenceEmptyEmpty() {
+    SortedMapDifference<Integer, Integer> diff =
+        Maps.difference(SORTED_EMPTY, SORTED_EMPTY);
+    assertTrue(diff.areEqual());
+    assertEquals(SORTED_EMPTY, diff.entriesOnlyOnLeft());
+    assertEquals(SORTED_EMPTY, diff.entriesOnlyOnRight());
+    assertEquals(SORTED_EMPTY, diff.entriesInCommon());
+    assertEquals(SORTED_EMPTY, diff.entriesDiffering());
+    assertEquals("equal", diff.toString());
+  }
+
+  public void testSortedMapDifferenceEmptySingleton() {
+    SortedMapDifference<Integer, Integer> diff =
+        Maps.difference(SORTED_EMPTY, SORTED_SINGLETON);
+    assertFalse(diff.areEqual());
+    assertEquals(SORTED_EMPTY, diff.entriesOnlyOnLeft());
+    assertEquals(SORTED_SINGLETON, diff.entriesOnlyOnRight());
+    assertEquals(SORTED_EMPTY, diff.entriesInCommon());
+    assertEquals(SORTED_EMPTY, diff.entriesDiffering());
+    assertEquals("not equal: only on right={1=2}", diff.toString());
+  }
+
+  public void testSortedMapDifferenceSingletonEmpty() {
+    SortedMapDifference<Integer, Integer> diff =
+        Maps.difference(SORTED_SINGLETON, SORTED_EMPTY);
+    assertFalse(diff.areEqual());
+    assertEquals(SORTED_SINGLETON, diff.entriesOnlyOnLeft());
+    assertEquals(SORTED_EMPTY, diff.entriesOnlyOnRight());
+    assertEquals(SORTED_EMPTY, diff.entriesInCommon());
+    assertEquals(SORTED_EMPTY, diff.entriesDiffering());
+    assertEquals("not equal: only on left={1=2}", diff.toString());
+  }
+
+  public void testSortedMapDifferenceTypical() {
+    SortedMap<Integer, String> left =
+        ImmutableSortedMap.<Integer, String>reverseOrder()
+        .put(1, "a").put(2, "b").put(3, "c").put(4, "d").put(5, "e")
+        .build();
+
+    SortedMap<Integer, String> right =
+        ImmutableSortedMap.of(1, "a", 3, "f", 5, "g", 6, "z");
+
+    SortedMapDifference<Integer, String> diff1 =
+        Maps.difference(left, right);
+    assertFalse(diff1.areEqual());
+    ASSERT.that(diff1.entriesOnlyOnLeft().entrySet()).hasContentsInOrder(
+        Maps.immutableEntry(4, "d"), Maps.immutableEntry(2, "b"));
+    ASSERT.that(diff1.entriesOnlyOnRight().entrySet()).hasContentsInOrder(
+        Maps.immutableEntry(6, "z"));
+    ASSERT.that(diff1.entriesInCommon().entrySet()).hasContentsInOrder(
+        Maps.immutableEntry(1, "a"));
+    ASSERT.that(diff1.entriesDiffering().entrySet()).hasContentsInOrder(
+        Maps.immutableEntry(5, ValueDifferenceImpl.create("e", "g")),
+        Maps.immutableEntry(3, ValueDifferenceImpl.create("c", "f")));
+    assertEquals("not equal: only on left={4=d, 2=b}: only on right={6=z}: "
+        + "value differences={5=(e, g), 3=(c, f)}", diff1.toString());
+
+    SortedMapDifference<Integer, String> diff2 =
+        Maps.difference(right, left);
+    assertFalse(diff2.areEqual());
+    ASSERT.that(diff2.entriesOnlyOnLeft().entrySet()).hasContentsInOrder(
+        Maps.immutableEntry(6, "z"));
+    ASSERT.that(diff2.entriesOnlyOnRight().entrySet()).hasContentsInOrder(
+        Maps.immutableEntry(2, "b"), Maps.immutableEntry(4, "d"));
+    ASSERT.that(diff1.entriesInCommon().entrySet()).hasContentsInOrder(
+        Maps.immutableEntry(1, "a"));
+    assertEquals(ImmutableMap.of(
+            3, ValueDifferenceImpl.create("f", "c"),
+            5, ValueDifferenceImpl.create("g", "e")),
+        diff2.entriesDiffering());
+    assertEquals("not equal: only on left={6=z}: only on right={2=b, 4=d}: "
+        + "value differences={3=(f, c), 5=(g, e)}", diff2.toString());
+  }
+
+  public void testSortedMapDifferenceImmutable() {
+    SortedMap<Integer, String> left = Maps.newTreeMap(
+        ImmutableSortedMap.of(1, "a", 2, "b", 3, "c", 4, "d", 5, "e"));
+    SortedMap<Integer, String> right =
+        Maps.newTreeMap(ImmutableSortedMap.of(1, "a", 3, "f", 5, "g", 6, "z"));
+
+    SortedMapDifference<Integer, String> diff1 =
+        Maps.difference(left, right);
+    left.put(6, "z");
+    assertFalse(diff1.areEqual());
+    ASSERT.that(diff1.entriesOnlyOnLeft().entrySet()).hasContentsInOrder(
+        Maps.immutableEntry(2, "b"), Maps.immutableEntry(4, "d"));
+    ASSERT.that(diff1.entriesOnlyOnRight().entrySet()).hasContentsInOrder(
+        Maps.immutableEntry(6, "z"));
+    ASSERT.that(diff1.entriesInCommon().entrySet()).hasContentsInOrder(
+        Maps.immutableEntry(1, "a"));
+    ASSERT.that(diff1.entriesDiffering().entrySet()).hasContentsInOrder(
+        Maps.immutableEntry(3, ValueDifferenceImpl.create("c", "f")),
+        Maps.immutableEntry(5, ValueDifferenceImpl.create("e", "g")));
+    try {
+      diff1.entriesInCommon().put(7, "x");
+      fail();
+    } catch (UnsupportedOperationException expected) {
+    }
+    try {
+      diff1.entriesOnlyOnLeft().put(7, "x");
+      fail();
+    } catch (UnsupportedOperationException expected) {
+    }
+    try {
+      diff1.entriesOnlyOnRight().put(7, "x");
+      fail();
+    } catch (UnsupportedOperationException expected) {
+    }
+  }
+
+  public void testSortedMapDifferenceEquals() {
+    SortedMap<Integer, String> left =
+        ImmutableSortedMap.of(1, "a", 2, "b", 3, "c", 4, "d", 5, "e");
+    SortedMap<Integer, String> right =
+        ImmutableSortedMap.of(1, "a", 3, "f", 5, "g", 6, "z");
+    SortedMap<Integer, String> right2 =
+        ImmutableSortedMap.of(1, "a", 3, "h", 5, "g", 6, "z");
+    SortedMapDifference<Integer, String> original =
+        Maps.difference(left, right);
+    SortedMapDifference<Integer, String> same =
+        Maps.difference(left, right);
+    SortedMapDifference<Integer, String> reverse =
+        Maps.difference(right, left);
+    SortedMapDifference<Integer, String> diff2 =
+        Maps.difference(left, right2);
+
+    new EqualsTester()
+        .addEqualityGroup(original, same)
+        .addEqualityGroup(reverse)
+        .addEqualityGroup(diff2)
+        .testEquals();
+  }
+
+  private static final BiMap<Integer, String> INT_TO_STRING_MAP =
+      new ImmutableBiMap.Builder<Integer, String>()
+          .put(1, "one")
+          .put(2, "two")
+          .put(3, "three")
+          .build();
+
+  public void testUniqueIndexCollection() {
+    ImmutableMap<Integer, String> outputMap =
+        Maps.uniqueIndex(INT_TO_STRING_MAP.values(),
+            Functions.forMap(INT_TO_STRING_MAP.inverse()));
+    assertEquals(INT_TO_STRING_MAP, outputMap);
+  }
+
+  public void testUniqueIndexIterable() {
+    ImmutableMap<Integer, String> outputMap =
+        Maps.uniqueIndex(new Iterable<String>() {
+          @Override
+          public Iterator<String> iterator() {
+            return INT_TO_STRING_MAP.values().iterator();
+          }
+        },
+        Functions.forMap(INT_TO_STRING_MAP.inverse()));
+    assertEquals(INT_TO_STRING_MAP, outputMap);
+  }
+
+  // NOTE: evil, never do this
+  private abstract static class IterableIterator<T>
+      extends ForwardingIterator<T> implements Iterable<T> {
+    @Override
+    public Iterator<T> iterator() {
+      return this;
+    }
+  }
+
+  @SuppressWarnings("deprecation") // that is the purpose of this test
+  public void testUniqueIndexIterableIterator() {
+    ImmutableMap<Integer, String> outputMap =
+        Maps.uniqueIndex(new IterableIterator<String>() {
+          private final Iterator<String> iterator = INT_TO_STRING_MAP.values().iterator();
+
+          public Iterator<String> delegate() {
+            return iterator;
+          }
+        },
+        Functions.forMap(INT_TO_STRING_MAP.inverse()));
+    assertEquals(INT_TO_STRING_MAP, outputMap);
+  }
+
+  public void testUniqueIndexIterator() {
+    ImmutableMap<Integer, String> outputMap =
+        Maps.uniqueIndex(INT_TO_STRING_MAP.values().iterator(),
+            Functions.forMap(INT_TO_STRING_MAP.inverse()));
+    assertEquals(INT_TO_STRING_MAP, outputMap);
+  }
+
+  /** Can't create the map if more than one value maps to the same key. */
+  public void testUniqueIndexDuplicates() {
+    try {
+      Maps.uniqueIndex(ImmutableSet.of("one", "uno"), Functions.constant(1));
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  /** Null values are not allowed. */
+  public void testUniqueIndexNullValue() {
+    List<String> listWithNull = Lists.newArrayList((String) null);
+    try {
+      Maps.uniqueIndex(listWithNull, Functions.constant(1));
+      fail();
+    } catch (NullPointerException expected) {
+    }
+  }
+
+  /** Null keys aren't allowed either. */
+  public void testUniqueIndexNullKey() {
+    List<String> oneStringList = Lists.newArrayList("foo");
+    try {
+      Maps.uniqueIndex(oneStringList, Functions.constant(null));
+      fail();
+    } catch (NullPointerException expected) {
+    }
+  }
+
+  @GwtIncompatible("Maps.fromProperties")
+  @SuppressWarnings("deprecation") // StringBufferInputStream
+  public void testFromProperties() throws IOException {
+    Properties testProp = new Properties();
+
+    Map<String, String> result = Maps.fromProperties(testProp);
+    assertTrue(result.isEmpty());
+    testProp.setProperty("first", "true");
+
+    result = Maps.fromProperties(testProp);
+    assertEquals("true", result.get("first"));
+    assertEquals(1, result.size());
+    testProp.setProperty("second", "null");
+
+    result = Maps.fromProperties(testProp);
+    assertEquals("true", result.get("first"));
+    assertEquals("null", result.get("second"));
+    assertEquals(2, result.size());
+
+    // Now test values loaded from a stream.
+    String props = "test\n second = 2\n Third item :   a short  phrase   ";
+
+    // TODO: change to StringReader in Java 1.6
+    testProp.load(new java.io.StringBufferInputStream(props));
+
+    result = Maps.fromProperties(testProp);
+    assertEquals(4, result.size());
+    assertEquals("true", result.get("first"));
+    assertEquals("", result.get("test"));
+    assertEquals("2", result.get("second"));
+    assertEquals("item :   a short  phrase   ", result.get("Third"));
+    assertFalse(result.containsKey("not here"));
+
+    // Test loading system properties
+    result = Maps.fromProperties(System.getProperties());
+    assertTrue(result.containsKey("java.version"));
+
+    // Test that defaults work, too.
+    testProp = new Properties(System.getProperties());
+    String override = "test\njava.version : hidden";
+
+    // TODO: change to StringReader in Java 1.6
+    testProp.load(new java.io.StringBufferInputStream(override));
+
+    result = Maps.fromProperties(testProp);
+    assertTrue(result.size() > 2);
+    assertEquals("", result.get("test"));
+    assertEquals("hidden", result.get("java.version"));
+    assertNotSame(System.getProperty("java.version"),
+                  result.get("java.version"));
+  }
+
+  @GwtIncompatible("Maps.fromProperties")
+  @SuppressWarnings("serial") // never serialized
+  public void testFromPropertiesNullKey() {
+    Properties properties = new Properties() {
+      @Override public Enumeration<?> propertyNames() {
+        return Iterators.asEnumeration(
+            Arrays.asList(null, "first", "second").iterator());
+      }
+    };
+    properties.setProperty("first", "true");
+    properties.setProperty("second", "null");
+
+    try {
+      Maps.fromProperties(properties);
+      fail();
+    } catch (NullPointerException expected) {}
+  }
+
+  @GwtIncompatible("Maps.fromProperties")
+  @SuppressWarnings("serial") // never serialized
+  public void testFromPropertiesNonStringKeys() {
+    Properties properties = new Properties() {
+      @Override public Enumeration<?> propertyNames() {
+        return Iterators.asEnumeration(
+            Arrays.<Object>asList(Integer.valueOf(123), "first").iterator());
+      }
+    };
+
+    try {
+      Maps.fromProperties(properties);
+      fail();
+    } catch (ClassCastException expected) {}
+  }
+
+  /**
+   * Constructs a "nefarious" map entry with the specified key and value,
+   * meaning an entry that is suitable for testing that map entries cannot be
+   * modified via a nefarious implementation of equals. This is used for testing
+   * unmodifiable collections of map entries; for example, it should not be
+   * possible to access the raw (modifiable) map entry via a nefarious equals
+   * method.
+   */
+  public static <K, V> Map.Entry<K, V> nefariousEntry(
+      final K key, final V value) {
+    return new AbstractMapEntry<K, V>() {
+        @Override public K getKey() {
+          return key;
+        }
+        @Override public V getValue() {
+          return value;
+        }
+        @Override public V setValue(V value) {
+          throw new UnsupportedOperationException();
+        }
+        @SuppressWarnings("unchecked")
+        @Override public boolean equals(Object o) {
+          if (o instanceof Map.Entry<?, ?>) {
+            Map.Entry<K, V> e = (Map.Entry<K, V>) o;
+            e.setValue(value); // muhahaha!
+          }
+          return super.equals(o);
+        }
+      };
+  }
+
+  public void testUnmodifiableBiMap() {
+    BiMap<Integer, String> mod = HashBiMap.create();
+    mod.put(1, "one");
+    mod.put(2, "two");
+    mod.put(3, "three");
+
+    BiMap<Number, String> unmod = Maps.<Number, String>unmodifiableBiMap(mod);
+
+    /* No aliasing on inverse operations. */
+    assertSame(unmod.inverse(), unmod.inverse());
+    assertSame(unmod, unmod.inverse().inverse());
+
+    /* Unmodifiable is a view. */
+    mod.put(4, "four");
+    assertEquals(true, unmod.get(4).equals("four"));
+    assertEquals(true, unmod.inverse().get("four").equals(4));
+
+    /* UnsupportedOperationException on direct modifications. */
+    try {
+      unmod.put(4, "four");
+      fail("UnsupportedOperationException expected");
+    } catch (UnsupportedOperationException expected) {}
+    try {
+      unmod.forcePut(4, "four");
+      fail("UnsupportedOperationException expected");
+    } catch (UnsupportedOperationException expected) {}
+    try {
+      unmod.putAll(Collections.singletonMap(4, "four"));
+      fail("UnsupportedOperationException expected");
+    } catch (UnsupportedOperationException expected) {}
+
+    /* UnsupportedOperationException on indirect modifications. */
+    BiMap<String, Number> inverse = unmod.inverse();
+    try {
+      inverse.put("four", 4);
+      fail("UnsupportedOperationException expected");
+    } catch (UnsupportedOperationException expected) {}
+    try {
+      inverse.forcePut("four", 4);
+      fail("UnsupportedOperationException expected");
+    } catch (UnsupportedOperationException expected) {}
+    try {
+      inverse.putAll(Collections.singletonMap("four", 4));
+      fail("UnsupportedOperationException expected");
+    } catch (UnsupportedOperationException expected) {}
+    Set<String> values = unmod.values();
+    try {
+      values.remove("four");
+      fail("UnsupportedOperationException expected");
+    } catch (UnsupportedOperationException expected) {}
+    Set<Map.Entry<Number, String>> entries = unmod.entrySet();
+    Map.Entry<Number, String> entry = entries.iterator().next();
+    try {
+      entry.setValue("four");
+      fail("UnsupportedOperationException expected");
+    } catch (UnsupportedOperationException expected) {}
+    @SuppressWarnings("unchecked")
+    Map.Entry<Integer, String> entry2
+        = (Map.Entry<Integer, String>) entries.toArray()[0];
+    try {
+      entry2.setValue("four");
+      fail("UnsupportedOperationException expected");
+    } catch (UnsupportedOperationException expected) {}
+  }
+
+  public void testBiMapEntrySetIteratorRemove() {
+    BiMap<Integer, String> map = HashBiMap.create();
+    map.put(1, "one");
+    Set<Map.Entry<Integer, String>> entries = map.entrySet();
+    Iterator<Map.Entry<Integer, String>> iterator = entries.iterator();
+    Map.Entry<Integer, String> entry = iterator.next();
+    entry.setValue("two"); // changes the iterator's current entry value
+    assertEquals("two", map.get(1));
+    iterator.remove(); // removes the updated entry
+    assertTrue(map.isEmpty());
+  }
+
+  public void testImmutableEntry() {
+    Map.Entry<String, Integer> e = Maps.immutableEntry("foo", 1);
+    assertEquals("foo", e.getKey());
+    assertEquals(1, (int) e.getValue());
+    try {
+      e.setValue(2);
+      fail("UnsupportedOperationException expected");
+    } catch (UnsupportedOperationException expected) {}
+    assertEquals("foo=1", e.toString());
+    assertEquals(101575, e.hashCode());
+  }
+
+  public void testImmutableEntryNull() {
+    Map.Entry<String, Integer> e
+        = Maps.immutableEntry((String) null, (Integer) null);
+    assertNull(e.getKey());
+    assertNull(e.getValue());
+    try {
+      e.setValue(null);
+      fail("UnsupportedOperationException expected");
+    } catch (UnsupportedOperationException expected) {}
+    assertEquals("null=null", e.toString());
+    assertEquals(0, e.hashCode());
+  }
+
+  /** See {@link SynchronizedBiMapTest} for more tests. */
+  public void testSynchronizedBiMap() {
+    BiMap<String, Integer> bimap = HashBiMap.create();
+    bimap.put("one", 1);
+    BiMap<String, Integer> sync = Maps.synchronizedBiMap(bimap);
+    bimap.put("two", 2);
+    sync.put("three", 3);
+    assertEquals(ImmutableSet.of(1, 2, 3), bimap.inverse().keySet());
+    assertEquals(ImmutableSet.of(1, 2, 3), sync.inverse().keySet());
+  }
+
+  private static final Predicate<String> NOT_LENGTH_3
+      = new Predicate<String>() {
+        @Override
+        public boolean apply(String input) {
+          return input == null || input.length() != 3;
+        }
+      };
+
+  private static final Predicate<Integer> EVEN
+      = new Predicate<Integer>() {
+        @Override
+        public boolean apply(Integer input) {
+          return input == null || input % 2 == 0;
+        }
+      };
+
+  private static final Predicate<Entry<String, Integer>> CORRECT_LENGTH
+      = new Predicate<Entry<String, Integer>>() {
+        @Override
+        public boolean apply(Entry<String, Integer> input) {
+          return input.getKey().length() == input.getValue();
+        }
+      };
+
+  public void testFilteredKeysIllegalPut() {
+    Map<String, Integer> unfiltered = Maps.newHashMap();
+    Map<String, Integer> filtered = Maps.filterKeys(unfiltered, NOT_LENGTH_3);
+    filtered.put("a", 1);
+    filtered.put("b", 2);
+    assertEquals(ImmutableMap.of("a", 1, "b", 2), filtered);
+
+    try {
+      filtered.put("yyy", 3);
+      fail();
+    } catch (IllegalArgumentException expected) {}
+
+    try {
+      filtered.putAll(ImmutableMap.of("c", 3, "zzz", 4, "b", 5));
+      fail();
+    } catch (IllegalArgumentException expected) {}
+
+    assertEquals(ImmutableMap.of("a", 1, "b", 2), filtered);
+  }
+
+  public void testFilteredKeysChangeFiltered() {
+    Map<String, Integer> unfiltered = Maps.newHashMap();
+    Map<String, Integer> filtered = Maps.filterKeys(unfiltered, NOT_LENGTH_3);
+    unfiltered.put("two", 2);
+    unfiltered.put("three", 3);
+    unfiltered.put("four", 4);
+    assertEquals(ImmutableMap.of("two", 2, "three", 3, "four", 4), unfiltered);
+    assertEquals(ImmutableMap.of("three", 3, "four", 4), filtered);
+
+    unfiltered.remove("three");
+    assertEquals(ImmutableMap.of("two", 2, "four", 4), unfiltered);
+    assertEquals(ImmutableMap.of("four", 4), filtered);
+
+    unfiltered.clear();
+    assertEquals(ImmutableMap.of(), unfiltered);
+    assertEquals(ImmutableMap.of(), filtered);
+  }
+
+  public void testFilteredKeysChangeUnfiltered() {
+    Map<String, Integer> unfiltered = Maps.newHashMap();
+    Map<String, Integer> filtered = Maps.filterKeys(unfiltered, NOT_LENGTH_3);
+    unfiltered.put("two", 2);
+    unfiltered.put("three", 3);
+    unfiltered.put("four", 4);
+    assertEquals(ImmutableMap.of("two", 2, "three", 3, "four", 4), unfiltered);
+    assertEquals(ImmutableMap.of("three", 3, "four", 4), filtered);
+
+    filtered.remove("three");
+    assertEquals(ImmutableMap.of("two", 2, "four", 4), unfiltered);
+    assertEquals(ImmutableMap.of("four", 4), filtered);
+
+    filtered.clear();
+    assertEquals(ImmutableMap.of("two", 2), unfiltered);
+    assertEquals(ImmutableMap.of(), filtered);
+  }
+
+  public void testFilteredValuesIllegalPut() {
+    Map<String, Integer> unfiltered = Maps.newHashMap();
+    Map<String, Integer> filtered = Maps.filterValues(unfiltered, EVEN);
+    filtered.put("a", 2);
+    unfiltered.put("b", 4);
+    unfiltered.put("c", 5);
+    assertEquals(ImmutableMap.of("a", 2, "b", 4), filtered);
+
+    try {
+      filtered.put("yyy", 3);
+      fail();
+    } catch (IllegalArgumentException expected) {}
+
+    try {
+      filtered.putAll(ImmutableMap.of("c", 4, "zzz", 5, "b", 6));
+      fail();
+    } catch (IllegalArgumentException expected) {}
+
+    assertEquals(ImmutableMap.of("a", 2, "b", 4), filtered);
+  }
+
+  public void testFilteredValuesIllegalSetValue() {
+    Map<String, Integer> unfiltered = Maps.newHashMap();
+    Map<String, Integer> filtered = Maps.filterValues(unfiltered, EVEN);
+    filtered.put("a", 2);
+    filtered.put("b", 4);
+    assertEquals(ImmutableMap.of("a", 2, "b", 4), filtered);
+
+    Entry<String, Integer> entry = filtered.entrySet().iterator().next();
+    try {
+      entry.setValue(5);
+      fail();
+    } catch (IllegalArgumentException expected) {}
+
+    assertEquals(ImmutableMap.of("a", 2, "b", 4), filtered);
+  }
+
+  public void testFilteredValuesClear() {
+    Map<String, Integer> unfiltered = Maps.newHashMap();
+    unfiltered.put("one", 1);
+    unfiltered.put("two", 2);
+    unfiltered.put("three", 3);
+    unfiltered.put("four", 4);
+    Map<String, Integer> filtered = Maps.filterValues(unfiltered, EVEN);
+    assertEquals(ImmutableMap.of("one", 1, "two", 2, "three", 3, "four", 4),
+        unfiltered);
+    assertEquals(ImmutableMap.of("two", 2, "four", 4), filtered);
+
+    filtered.clear();
+    assertEquals(ImmutableMap.of("one", 1, "three", 3), unfiltered);
+    assertTrue(filtered.isEmpty());
+  }
+
+  public void testFilteredEntriesIllegalPut() {
+    Map<String, Integer> unfiltered = Maps.newHashMap();
+    unfiltered.put("cat", 3);
+    unfiltered.put("dog", 2);
+    unfiltered.put("horse", 5);
+    Map<String, Integer> filtered
+        = Maps.filterEntries(unfiltered, CORRECT_LENGTH);
+    assertEquals(ImmutableMap.of("cat", 3, "horse", 5), filtered);
+
+    filtered.put("chicken", 7);
+    assertEquals(ImmutableMap.of("cat", 3, "horse", 5, "chicken", 7), filtered);
+
+    try {
+      filtered.put("cow", 7);
+      fail();
+    } catch (IllegalArgumentException expected) {}
+    assertEquals(ImmutableMap.of("cat", 3, "horse", 5, "chicken", 7), filtered);
+
+    try {
+      filtered.putAll(ImmutableMap.of("sheep", 5, "cow", 7));
+      fail();
+    } catch (IllegalArgumentException expected) {}
+    assertEquals(ImmutableMap.of("cat", 3, "horse", 5, "chicken", 7), filtered);
+  }
+
+  public void testFilteredEntriesObjectPredicate() {
+    Map<String, Integer> unfiltered = Maps.newHashMap();
+    unfiltered.put("cat", 3);
+    unfiltered.put("dog", 2);
+    unfiltered.put("horse", 5);
+    Predicate<Object> predicate = Predicates.alwaysFalse();
+    Map<String, Integer> filtered
+        = Maps.filterEntries(unfiltered, predicate);
+    assertTrue(filtered.isEmpty());
+  }
+
+  public void testFilteredEntriesWildCardEntryPredicate() {
+    Map<String, Integer> unfiltered = Maps.newHashMap();
+    unfiltered.put("cat", 3);
+    unfiltered.put("dog", 2);
+    unfiltered.put("horse", 5);
+    Predicate<Entry<?, ?>> predicate = new Predicate<Entry<?, ?>>() {
+      @Override
+      public boolean apply(Entry<?, ?> input) {
+        return "cat".equals(input.getKey())
+            || Integer.valueOf(2) == input.getValue();
+      }
+    };
+    Map<String, Integer> filtered
+        = Maps.filterEntries(unfiltered, predicate);
+    assertEquals(ImmutableMap.of("cat", 3, "dog", 2), filtered);
+  }
+
+  public void testTransformValues() {
+    Map<String, Integer> map = ImmutableMap.of("a", 4, "b", 9);
+    Function<Integer, Double> sqrt = new Function<Integer, Double>() {
+      @Override
+      public Double apply(Integer in) {
+        return Math.sqrt(in);
+      }
+    };
+    Map<String, Double> transformed = Maps.transformValues(map, sqrt);
+
+    assertEquals(ImmutableMap.of("a", 2.0, "b", 3.0), transformed);
+  }
+
+  public void testTransformValuesSecretlySorted() {
+    Map<String, Integer> map = ImmutableSortedMap.of("a", 4, "b", 9);
+    Function<Integer, Double> sqrt = new Function<Integer, Double>() {
+      @Override
+      public Double apply(Integer in) {
+        return Math.sqrt(in);
+      }
+    };
+    Map<String, Double> transformed = Maps.transformValues(map, sqrt);
+
+    assertEquals(ImmutableMap.of("a", 2.0, "b", 3.0), transformed);
+    assertTrue(transformed instanceof SortedMap);
+  }
+
+  public void testTransformEntries() {
+    Map<String, String> map = ImmutableMap.of("a", "4", "b", "9");
+    EntryTransformer<String, String, String> concat =
+        new EntryTransformer<String, String, String>() {
+          @Override
+          public String transformEntry(String key, String value) {
+            return key + value;
+          }
+        };
+    Map<String, String> transformed = Maps.transformEntries(map, concat);
+
+    assertEquals(ImmutableMap.of("a", "a4", "b", "b9"), transformed);
+  }
+
+  public void testTransformEntriesSecretlySorted() {
+    Map<String, String> map = ImmutableSortedMap.of("a", "4", "b", "9");
+    EntryTransformer<String, String, String> concat =
+        new EntryTransformer<String, String, String>() {
+          @Override
+          public String transformEntry(String key, String value) {
+            return key + value;
+          }
+        };
+    Map<String, String> transformed = Maps.transformEntries(map, concat);
+
+    assertEquals(ImmutableMap.of("a", "a4", "b", "b9"), transformed);
+    assertTrue(transformed instanceof SortedMap);
+  }
+
+  public void testTransformEntriesGenerics() {
+    Map<Object, Object> map1 = ImmutableMap.<Object, Object>of(1, 2);
+    Map<Object, Number> map2 = ImmutableMap.<Object, Number>of(1, 2);
+    Map<Object, Integer> map3 = ImmutableMap.<Object, Integer>of(1, 2);
+    Map<Number, Object> map4 = ImmutableMap.<Number, Object>of(1, 2);
+    Map<Number, Number> map5 = ImmutableMap.<Number, Number>of(1, 2);
+    Map<Number, Integer> map6 = ImmutableMap.<Number, Integer>of(1, 2);
+    Map<Integer, Object> map7 = ImmutableMap.<Integer, Object>of(1, 2);
+    Map<Integer, Number> map8 = ImmutableMap.<Integer, Number>of(1, 2);
+    Map<Integer, Integer> map9 = ImmutableMap.<Integer, Integer>of(1, 2);
+    Map<? extends Number, ? extends Number> map0 = ImmutableMap.of(1, 2);
+
+    EntryTransformer<Number, Number, Double> transformer =
+        new EntryTransformer<Number, Number, Double>() {
+          @Override
+          public Double transformEntry(Number key, Number value) {
+            return key.doubleValue() + value.doubleValue();
+          }
+        };
+
+    Map<Object, Double> objectKeyed;
+    Map<Number, Double> numberKeyed;
+    Map<Integer, Double> integerKeyed;
+
+    numberKeyed = transformEntries(map5, transformer);
+    numberKeyed = transformEntries(map6, transformer);
+    integerKeyed = transformEntries(map8, transformer);
+    integerKeyed = transformEntries(map9, transformer);
+
+    Map<? extends Number, Double> wildcarded = transformEntries(map0, transformer);
+
+    // Can't loosen the key type:
+    // objectKeyed = transformEntries(map5, transformer);
+    // objectKeyed = transformEntries(map6, transformer);
+    // objectKeyed = transformEntries(map8, transformer);
+    // objectKeyed = transformEntries(map9, transformer);
+    // numberKeyed = transformEntries(map8, transformer);
+    // numberKeyed = transformEntries(map9, transformer);
+
+    // Can't loosen the value type:
+    // Map<Number, Number> looseValued1 = transformEntries(map5, transformer);
+    // Map<Number, Number> looseValued2 = transformEntries(map6, transformer);
+    // Map<Integer, Number> looseValued3 = transformEntries(map8, transformer);
+    // Map<Integer, Number> looseValued4 = transformEntries(map9, transformer);
+
+    // Can't call with too loose a key:
+    // transformEntries(map1, transformer);
+    // transformEntries(map2, transformer);
+    // transformEntries(map3, transformer);
+
+    // Can't call with too loose a value:
+    // transformEntries(map1, transformer);
+    // transformEntries(map4, transformer);
+    // transformEntries(map7, transformer);
+  }
+
+  public void testTransformEntriesExample() {
+    Map<String, Boolean> options =
+        ImmutableMap.of("verbose", true, "sort", false);
+    EntryTransformer<String, Boolean, String> flagPrefixer =
+        new EntryTransformer<String, Boolean, String>() {
+          @Override
+          public String transformEntry(String key, Boolean value) {
+            return value ? key : "no" + key;
+          }
+        };
+    Map<String, String> transformed =
+        Maps.transformEntries(options, flagPrefixer);
+    assertEquals("{verbose=verbose, sort=nosort}", transformed.toString());
+  }
+
+  // TestStringMapGenerator uses entries of the form "one=January" and so forth.
+  // To test the filtered collections, we'll create a map containing the entries
+  // they ask for, plus some bogus numeric entries. Then our predicates will
+  // simply filter numeric entries back out.
+
+  private static ImmutableMap<String, String> ENTRIES_TO_FILTER_OUT =
+      new ImmutableMap.Builder<String, String>()
+          .put("0", "0")
+          .put("1", "1")
+          .put("2", "2")
+          .build();
+
+  @GwtIncompatible("suite")
+  public static class FilteredMapTests extends TestCase {
+    public static Test suite() {
+      TestSuite suite = new TestSuite();
+
+      suite.addTest(MapTestSuiteBuilder.using(
+          new TestStringMapGenerator() {
+            @Override protected Map<String, String> create(
+                Entry<String, String>[] entries) {
+              Map<String, String> map = Maps.newHashMap();
+              for (Entry<String, String> entry : entries) {
+                map.put(entry.getKey(), entry.getValue());
+              }
+              map.putAll(ENTRIES_TO_FILTER_OUT);
+              return Maps.filterKeys(map, new Predicate<String>() {
+                @Override
+                public boolean apply(String input) {
+                  return input == null
+                      || (input.charAt(0) >= 'a' && input.charAt(0) <= 'z');
+                }
+              });
+            }
+          })
+          .named("Maps.filterKeys")
+          .withFeatures(
+              CollectionSize.ANY,
+              MapFeature.ALLOWS_NULL_KEYS,
+              MapFeature.ALLOWS_NULL_VALUES,
+              MapFeature.GENERAL_PURPOSE)
+          .suppressing(getIteratorUnknownOrderRemoveSupportedMethod())
+          .createTestSuite());
+
+      suite.addTest(MapTestSuiteBuilder.using(
+          new TestStringMapGenerator() {
+            @Override protected Map<String, String> create(
+                Entry<String, String>[] entries) {
+              Map<String, String> map = Maps.newHashMap();
+              for (Entry<String, String> entry : entries) {
+                map.put(entry.getKey(), entry.getValue());
+              }
+              map.putAll(ENTRIES_TO_FILTER_OUT);
+              return Maps.filterValues(map, new Predicate<String>() {
+                @Override
+                public boolean apply(String input) {
+                  return input == null
+                      || (input.charAt(0) >= 'A' && input.charAt(0) <= 'Z');
+                }
+              });
+            }
+          })
+          .named("Maps.filterValues")
+          .withFeatures(
+              CollectionSize.ANY,
+              MapFeature.ALLOWS_NULL_KEYS,
+              MapFeature.ALLOWS_NULL_VALUES,
+              MapFeature.GENERAL_PURPOSE)
+          .suppressing(getIteratorUnknownOrderRemoveSupportedMethod())
+          .createTestSuite());
+
+      suite.addTest(MapTestSuiteBuilder.using(
+          new TestStringMapGenerator() {
+            @Override protected Map<String, String> create(
+                Entry<String, String>[] entries) {
+              Map<String, String> map = Maps.newHashMap();
+              for (Entry<String, String> entry : entries) {
+                map.put(entry.getKey(), entry.getValue());
+              }
+              map.putAll(ENTRIES_TO_FILTER_OUT);
+              return Maps.filterEntries(map,
+                  new Predicate<Entry<String, String>>() {
+                    @Override
+                    public boolean apply(Entry<String, String> entry) {
+                      String input = entry.getKey();
+                      return input == null
+                          || (input.charAt(0) >= 'a' && input.charAt(0) <= 'z');
+                    }
+                  });
+            }
+          })
+          .named("Maps.filterEntries")
+          .withFeatures(
+              CollectionSize.ANY,
+              MapFeature.ALLOWS_NULL_KEYS,
+              MapFeature.ALLOWS_NULL_VALUES,
+              MapFeature.GENERAL_PURPOSE)
+          .suppressing(getIteratorUnknownOrderRemoveSupportedMethod())
+          .createTestSuite());
+
+      suite.addTest(MapTestSuiteBuilder.using(
+          new TestStringMapGenerator() {
+            @Override protected Map<String, String> create(
+                Entry<String, String>[] entries) {
+              Map<String, String> map = Maps.newHashMap();
+              for (Entry<String, String> entry : entries) {
+                map.put(entry.getKey(), entry.getValue());
+              }
+              map.putAll(ENTRIES_TO_FILTER_OUT);
+              map.put("", "weird");
+              Map<String, String> withoutEmptyKey = Maps.filterKeys(map,
+                  new Predicate<String>() {
+                    @Override
+                    public boolean apply(String input) {
+                      return input == null || input.length() != 0;
+                    }
+                  });
+              return Maps.filterKeys(withoutEmptyKey, new Predicate<String>() {
+                @Override
+                public boolean apply(String input) {
+                  return input == null
+                      || (input.charAt(0) >= 'a' && input.charAt(0) <= 'z');
+                }
+              });
+              // note: these filters were deliberately chosen so that an
+              // element somehow getting around the first filter would cause
+              // an exception in the second
+            }
+          })
+          .named("Maps.filterKeys, chained")
+          .withFeatures(
+              CollectionSize.ANY,
+              MapFeature.ALLOWS_NULL_KEYS,
+              MapFeature.ALLOWS_NULL_VALUES,
+              MapFeature.GENERAL_PURPOSE)
+          .suppressing(getIteratorUnknownOrderRemoveSupportedMethod())
+          .createTestSuite());
+
+      return suite;
+    }
+  }
+
+  public void testSortedMapTransformValues() {
+    SortedMap<String, Integer> map = ImmutableSortedMap.of("a", 4, "b", 9);
+    Function<Integer, Double> sqrt = new Function<Integer, Double>() {
+      @Override
+      public Double apply(Integer in) {
+        return Math.sqrt(in);
+      }
+    };
+    SortedMap<String, Double> transformed =
+        Maps.transformValues(map, sqrt);
+
+    assertEquals(ImmutableSortedMap.of("a", 2.0, "b", 3.0), transformed);
+  }
+
+  public void testSortedMapTransformEntries() {
+    SortedMap<String, String> map = ImmutableSortedMap.of("a", "4", "b", "9");
+    EntryTransformer<String, String, String> concat =
+        new EntryTransformer<String, String, String>() {
+          @Override
+          public String transformEntry(String key, String value) {
+            return key + value;
+          }
+        };
+    SortedMap<String, String> transformed =
+        Maps.transformEntries(map, concat);
+
+    assertEquals(ImmutableSortedMap.of("a", "a4", "b", "b9"), transformed);
+  }
+
+  /*
+   * Not testing Map methods of Maps.filter*(SortedMap), since the
+   * implementation doesn't override Maps.FilteredEntryMap, which is already
+   * tested.
+   */
+  
+  public void testSortedMapFilterKeys() {
+    Comparator<Integer> comparator = Ordering.natural();
+    SortedMap<Integer, String> unfiltered = Maps.newTreeMap(comparator);
+    unfiltered.put(1, "one");
+    unfiltered.put(2, "two");
+    unfiltered.put(3, "three");
+    unfiltered.put(4, "four");
+    unfiltered.put(5, "five");
+    unfiltered.put(6, "six");
+    unfiltered.put(7, "seven");
+    SortedMap<Integer, String> filtered 
+        = Maps.filterKeys(unfiltered, EVEN);
+    ASSERT.that(filtered.keySet()).hasContentsInOrder(2, 4, 6);
+    assertSame(comparator, filtered.comparator());
+    assertEquals((Integer) 2, filtered.firstKey());
+    assertEquals((Integer) 6, filtered.lastKey());
+    ASSERT.that(filtered.headMap(5).keySet()).hasContentsInOrder(2, 4);
+    ASSERT.that(filtered.tailMap(3).keySet()).hasContentsInOrder(4, 6);
+    ASSERT.that(filtered.subMap(3, 5).keySet()).hasContentsInOrder(4);
+  }
+  
+  public void testSortedMapFilterValues() {
+    Comparator<Integer> comparator = Ordering.natural();
+    SortedMap<Integer, String> unfiltered = Maps.newTreeMap(comparator);
+    unfiltered.put(1, "one");
+    unfiltered.put(2, "two");
+    unfiltered.put(3, "three");
+    unfiltered.put(4, "four");
+    unfiltered.put(5, "five");
+    unfiltered.put(6, "six");
+    unfiltered.put(7, "seven");
+    SortedMap<Integer, String> filtered 
+        = Maps.filterValues(unfiltered, NOT_LENGTH_3);
+    ASSERT.that(filtered.keySet()).hasContentsInOrder(3, 4, 5, 7);
+    assertSame(comparator, filtered.comparator());
+    assertEquals((Integer) 3, filtered.firstKey());
+    assertEquals((Integer) 7, filtered.lastKey());
+    ASSERT.that(filtered.headMap(5).keySet()).hasContentsInOrder(3, 4);
+    ASSERT.that(filtered.tailMap(4).keySet()).hasContentsInOrder(4, 5, 7);
+    ASSERT.that(filtered.subMap(4, 6).keySet()).hasContentsInOrder(4, 5);
+  }
+
+  private static final Predicate<Map.Entry<Integer, String>>
+      EVEN_AND_LENGTH_3 = new Predicate<Map.Entry<Integer, String>>() {
+        @Override public boolean apply(Entry<Integer, String> entry) {
+          return (entry.getKey() == null || entry.getKey() % 2 == 0) 
+              && (entry.getValue() == null || entry.getValue().length() == 3);
+        }   
+    };
+    
+  private static class ContainsKeySafeSortedMap 
+      extends ForwardingSortedMap<Integer, String> {
+    SortedMap<Integer, String> delegate 
+        = Maps.newTreeMap(Ordering.natural().nullsFirst());
+    
+    @Override protected SortedMap<Integer, String> delegate() {
+      return delegate;
+    }
+    
+    // Needed by MapInterfaceTest.testContainsKey()
+    @Override public boolean containsKey(Object key) {
+      try {
+        return super.containsKey(key);
+      } catch (ClassCastException e) {
+        return false;
+      }
+    }
+  }
+  
+  public static class FilteredEntriesSortedMapInterfaceTest 
+      extends SortedMapInterfaceTest<Integer, String> {
+    public FilteredEntriesSortedMapInterfaceTest() {
+      super(true, true, true, true, true);      
+    }
+
+    @Override protected SortedMap<Integer, String> makeEmptyMap() {
+      SortedMap<Integer, String> unfiltered = new ContainsKeySafeSortedMap();
+      unfiltered.put(1, "one");
+      unfiltered.put(3, "three");
+      unfiltered.put(4, "four");         
+      unfiltered.put(5, "five");
+      return Maps.filterEntries(unfiltered, EVEN_AND_LENGTH_3);
+    }
+
+    @Override protected SortedMap<Integer, String> makePopulatedMap() {
+      SortedMap<Integer, String> unfiltered = new ContainsKeySafeSortedMap();
+      unfiltered.put(1, "one");
+      unfiltered.put(2, "two");
+      unfiltered.put(3, "three");
+      unfiltered.put(4, "four");
+      unfiltered.put(5, "five");
+      unfiltered.put(6, "six");
+      return Maps.filterEntries(unfiltered, EVEN_AND_LENGTH_3);
+    }
+
+    @Override protected Integer getKeyNotInPopulatedMap() {
+      return 10;
+    }
+
+    @Override protected String getValueNotInPopulatedMap() {
+      return "ten";
+    }
+    
+    // Iterators don't support remove.
+    @Override public void testEntrySetIteratorRemove() {}
+    @Override public void testValuesIteratorRemove() {}
+    
+    // These tests fail on GWT.
+    // TODO: Investigate why.
+    @Override public void testEntrySetRemoveAll() {}
+    @Override public void testEntrySetRetainAll() {}
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/MapsTransformValuesTest.java b/guava-tests/test/com/google/common/collect/MapsTransformValuesTest.java
new file mode 100644
index 0000000..549cb52
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/MapsTransformValuesTest.java
@@ -0,0 +1,306 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Function;
+import com.google.common.base.Functions;
+import com.google.common.collect.testing.MapInterfaceTest;
+
+/**
+ * Tests for {@link Maps#transformValues}.
+ *
+ * @author Isaac Shum
+ */
+@GwtCompatible
+public class MapsTransformValuesTest extends MapInterfaceTest<String, String> {
+
+  /**
+   * Constructor that assigns {@code supportsIteratorRemove} the same value as
+   * {@code supportsRemove}.
+   */
+  protected MapsTransformValuesTest(
+      boolean allowsNullKeys,
+      boolean allowsNullValues,
+      boolean supportsPut,
+      boolean supportsRemove,
+      boolean supportsClear) {
+    super(allowsNullKeys, allowsNullValues, supportsPut, supportsRemove,
+        supportsClear, supportsRemove);
+  }
+
+  public MapsTransformValuesTest() {
+    super(false, true, false, true, true);
+  }
+
+  protected Map<String, String> makeEmptyMap() {
+    return Maps.transformValues(Maps.<String, String>newHashMap(), 
+        Functions.<String>identity());
+  }
+
+  @Override
+  protected Map<String, String> makePopulatedMap() {
+    Map<String, Integer> underlying = Maps.newHashMap();
+    underlying.put("a", 1);
+    underlying.put("b", 2);
+    underlying.put("c", 3);
+    return Maps.transformValues(underlying, Functions.toStringFunction());
+  }
+
+  @Override protected String getKeyNotInPopulatedMap()
+      throws UnsupportedOperationException {
+    return "z";
+  }
+
+  @Override protected String getValueNotInPopulatedMap()
+      throws UnsupportedOperationException {
+    return "26";
+  }
+
+  /** Helper assertion comparing two maps */
+  private void assertMapsEqual(Map<?, ?> expected, Map<?, ?> map) {
+    assertEquals(expected, map);
+    assertEquals(expected.hashCode(), map.hashCode());
+    assertEquals(expected.entrySet(), map.entrySet());
+
+    // Assert that expectedValues > mapValues and that
+    // mapValues > expectedValues; i.e. that expectedValues == mapValues.
+    Collection<?> expectedValues = expected.values();
+    Collection<?> mapValues = map.values();
+    assertEquals(expectedValues.size(), mapValues.size());
+    assertTrue(expectedValues.containsAll(mapValues));
+    assertTrue(mapValues.containsAll(expectedValues));
+  }
+
+  public void testTransformEmptyMapEquality() {
+    Map<String, String> map = Maps.transformValues(
+        ImmutableMap.<String, Integer>of(), Functions.toStringFunction());
+    assertMapsEqual(Maps.newHashMap(), map);
+  }
+
+  public void testTransformSingletonMapEquality() {
+    Map<String, String> map = Maps.transformValues(
+        ImmutableMap.of("a", 1), Functions.toStringFunction());
+    Map<String, String> expected = ImmutableMap.of("a", "1");
+    assertMapsEqual(expected, map);
+    assertEquals(expected.get("a"), map.get("a"));
+  }
+
+  public void testTransformIdentityFunctionEquality() {
+    Map<String, Integer> underlying = ImmutableMap.of("a", 1);
+    Map<String, Integer> map = Maps.transformValues(
+        underlying, Functions.<Integer>identity());
+    assertMapsEqual(underlying, map);
+  }
+
+  public void testTransformPutEntryIsUnsupported() {
+    Map<String, String> map = Maps.transformValues(
+        ImmutableMap.of("a", 1), Functions.toStringFunction());
+    try {
+      map.put("b", "2");
+      fail();
+    } catch (UnsupportedOperationException expected) {
+    }
+
+    try {
+      map.putAll(ImmutableMap.of("b", "2"));
+      fail();
+    } catch (UnsupportedOperationException expected) {
+    }
+
+    try {
+      map.entrySet().iterator().next().setValue("one");
+      fail();
+    } catch (UnsupportedOperationException expected) {
+    }
+  }
+
+  public void testTransformRemoveEntry() {
+    Map<String, Integer> underlying = Maps.newHashMap();
+    underlying.put("a", 1);
+    Map<String, String> map
+        = Maps.transformValues(underlying, Functions.toStringFunction());
+    assertEquals("1", map.remove("a"));
+    assertNull(map.remove("b"));
+  }
+
+  public void testTransformEqualityOfMapsWithNullValues() {
+    Map<String, String> underlying = Maps.newHashMap();
+    underlying.put("a", null);
+    underlying.put("b", "");
+
+    Map<String, Boolean> map = Maps.transformValues(underlying,
+        new Function<String, Boolean>() {
+          @Override
+          public Boolean apply(@Nullable String from) {
+            return from == null;
+          }
+        }
+    );
+    Map<String, Boolean> expected = ImmutableMap.of("a", true, "b", false);
+    assertMapsEqual(expected, map);
+    assertEquals(expected.get("a"), map.get("a"));
+    assertEquals(expected.containsKey("a"), map.containsKey("a"));
+    assertEquals(expected.get("b"), map.get("b"));
+    assertEquals(expected.containsKey("b"), map.containsKey("b"));
+    assertEquals(expected.get("c"), map.get("c"));
+    assertEquals(expected.containsKey("c"), map.containsKey("c"));
+  }
+
+  public void testTransformReflectsUnderlyingMap() {
+    Map<String, Integer> underlying = Maps.newHashMap();
+    underlying.put("a", 1);
+    underlying.put("b", 2);
+    underlying.put("c", 3);
+    Map<String, String> map
+        = Maps.transformValues(underlying, Functions.toStringFunction());
+    assertEquals(underlying.size(), map.size());
+
+    underlying.put("d", 4);
+    assertEquals(underlying.size(), map.size());
+    assertEquals("4", map.get("d"));
+
+    underlying.remove("c");
+    assertEquals(underlying.size(), map.size());
+    assertFalse(map.containsKey("c"));
+
+    underlying.clear();
+    assertEquals(underlying.size(), map.size());
+  }
+
+  public void testTransformChangesAreReflectedInUnderlyingMap() {
+    Map<String, Integer> underlying = Maps.newLinkedHashMap();
+    underlying.put("a", 1);
+    underlying.put("b", 2);
+    underlying.put("c", 3);
+    underlying.put("d", 4);
+    underlying.put("e", 5);
+    underlying.put("f", 6);
+    underlying.put("g", 7);
+    Map<String, String> map
+        = Maps.transformValues(underlying, Functions.toStringFunction());
+
+    map.remove("a");
+    assertFalse(underlying.containsKey("a"));
+
+    Set<String> keys = map.keySet();
+    keys.remove("b");
+    assertFalse(underlying.containsKey("b"));
+
+    Iterator<String> keyIterator = keys.iterator();
+    keyIterator.next();
+    keyIterator.remove();
+    assertFalse(underlying.containsKey("c"));
+
+    Collection<String> values = map.values();
+    values.remove("4");
+    assertFalse(underlying.containsKey("d"));
+
+    Iterator<String> valueIterator = values.iterator();
+    valueIterator.next();
+    valueIterator.remove();
+    assertFalse(underlying.containsKey("e"));
+
+    Set<Map.Entry<String, String>> entries = map.entrySet();
+    Map.Entry<String, String> firstEntry = entries.iterator().next();
+    entries.remove(firstEntry);
+    assertFalse(underlying.containsKey("f"));
+
+    Iterator<Map.Entry<String, String>> entryIterator = entries.iterator();
+    entryIterator.next();
+    entryIterator.remove();
+    assertFalse(underlying.containsKey("g"));
+
+    assertTrue(underlying.isEmpty());
+    assertTrue(map.isEmpty());
+    assertTrue(keys.isEmpty());
+    assertTrue(values.isEmpty());
+    assertTrue(entries.isEmpty());
+  }
+
+  public void testTransformEquals() {
+    Map<String, Integer> underlying = ImmutableMap.of("a", 0, "b", 1, "c", 2);
+    Map<String, Integer> expected
+        = Maps.transformValues(underlying, Functions.<Integer>identity());
+
+    assertMapsEqual(expected, expected);
+
+    Map<String, Integer> equalToUnderlying = Maps.newTreeMap();
+    equalToUnderlying.putAll(underlying);
+    Map<String, Integer> map = Maps.transformValues(
+        equalToUnderlying, Functions.<Integer>identity());
+    assertMapsEqual(expected, map);
+
+    map = Maps.transformValues(ImmutableMap.of("a", 1, "b", 2, "c", 3),
+        new Function<Integer, Integer>() {
+          @Override
+          public Integer apply(Integer from) {
+            return from - 1;
+          }
+        }
+    );
+    assertMapsEqual(expected, map);
+  }
+
+  public void testTransformEntrySetContains() {
+    Map<String, Boolean> underlying = Maps.newHashMap();
+    underlying.put("a", null);
+    underlying.put("b", true);
+    underlying.put(null, true);
+
+    Map<String, Boolean> map = Maps.transformValues(
+        underlying, new Function<Boolean, Boolean>() {
+          @Override
+          public Boolean apply(@Nullable Boolean from) {
+            return (from == null) ? true : null;
+          }
+        }
+    );
+
+    Set<Map.Entry<String, Boolean>> entries = map.entrySet();
+    assertTrue(entries.contains(Maps.immutableEntry("a", true)));
+    assertTrue(entries.contains(Maps.immutableEntry("b", (Boolean) null)));
+    assertTrue(entries.contains(
+        Maps.immutableEntry((String) null, (Boolean) null)));
+
+    assertFalse(entries.contains(Maps.immutableEntry("c", (Boolean) null)));
+    assertFalse(entries.contains(Maps.immutableEntry((String) null, true)));
+  }
+
+  @Override public void testKeySetRemoveAllNullFromEmpty() {
+    try {
+      super.testKeySetRemoveAllNullFromEmpty();
+    } catch (RuntimeException tolerated) {
+      // GWT's HashMap.keySet().removeAll(null) doesn't throws NPE.
+    }
+  }
+
+  @Override public void testEntrySetRemoveAllNullFromEmpty() {
+    try {
+      super.testEntrySetRemoveAllNullFromEmpty();
+    } catch (RuntimeException tolerated) {
+      // GWT's HashMap.entrySet().removeAll(null) doesn't throws NPE.
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/MapsTransformValuesUnmodifiableIteratorTest.java b/guava-tests/test/com/google/common/collect/MapsTransformValuesUnmodifiableIteratorTest.java
new file mode 100644
index 0000000..ba17c5c
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/MapsTransformValuesUnmodifiableIteratorTest.java
@@ -0,0 +1,359 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Function;
+import com.google.common.base.Functions;
+import com.google.common.collect.testing.MapInterfaceTest;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * Tests for {@link Maps#transformValues} when the backing map's views
+ * have iterators that don't support {@code remove()}.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible
+public class MapsTransformValuesUnmodifiableIteratorTest extends MapInterfaceTest<String, String> {
+  // TODO(jlevy): Move shared code of this class and MapsTransformValuesTest
+  // to a superclass.
+
+  public MapsTransformValuesUnmodifiableIteratorTest() {
+    super(true, true, false /*supportsPut*/, true, true, false);
+  }
+
+  private static class UnmodifiableIteratorMap<K, V> extends ForwardingMap<K, V> {
+    final Map<K, V> delegate;
+
+    UnmodifiableIteratorMap(Map<K, V> delegate) {
+      this.delegate = delegate;
+    }
+
+    @Override protected Map<K, V> delegate() {
+      return delegate;
+    }
+
+    @Override public Set<K> keySet() {
+      return new ForwardingSet<K>() {
+        @Override protected Set<K> delegate() {
+          return delegate.keySet();
+        }
+        @Override public Iterator<K> iterator() {
+          return Iterators.unmodifiableIterator(delegate.keySet().iterator());
+        }
+        @Override public boolean removeAll(Collection<?> c) {
+          return delegate.keySet().removeAll(c);
+        }
+        @Override public boolean retainAll(Collection<?> c) {
+          return delegate.keySet().retainAll(c);
+        }
+      };
+    }
+
+    @Override public Collection<V> values() {
+      return new ForwardingCollection<V>() {
+        @Override protected Collection<V> delegate() {
+          return delegate.values();
+        }
+        @Override public Iterator<V> iterator() {
+          return Iterators.unmodifiableIterator(delegate.values().iterator());
+        }
+        @Override public boolean removeAll(Collection<?> c) {
+          return delegate.values().removeAll(c);
+        }
+        @Override public boolean retainAll(Collection<?> c) {
+          return delegate.values().retainAll(c);
+        }
+      };
+    }
+
+    @Override public Set<Entry<K, V>> entrySet() {
+      return new ForwardingSet<Entry<K, V>>() {
+        @Override protected Set<Entry<K, V>> delegate() {
+          return delegate.entrySet();
+        }
+        @Override public Iterator<Entry<K, V>> iterator() {
+          return Iterators.unmodifiableIterator(delegate.entrySet().iterator());
+        }
+        @Override public boolean removeAll(Collection<?> c) {
+          return delegate.entrySet().removeAll(c);
+        }
+        @Override public boolean retainAll(Collection<?> c) {
+          return delegate.entrySet().retainAll(c);
+        }
+      };
+    }
+  }
+
+  @Override protected Map<String, String> makeEmptyMap() {
+    Map<String, Integer> underlying = Maps.newHashMap();
+    return Maps.transformValues(
+        new UnmodifiableIteratorMap<String, Integer>(underlying), Functions.toStringFunction());
+  }
+
+  @Override protected Map<String, String> makePopulatedMap() {
+    Map<String, Integer> underlying = Maps.newHashMap();
+    underlying.put("a", 1);
+    underlying.put("b", 2);
+    underlying.put("c", 3);
+    return Maps.transformValues(
+        new UnmodifiableIteratorMap<String, Integer>(underlying), Functions.toStringFunction());
+  }
+
+  @Override protected String getKeyNotInPopulatedMap()
+      throws UnsupportedOperationException {
+    return "z";
+  }
+
+  @Override protected String getValueNotInPopulatedMap()
+      throws UnsupportedOperationException {
+    return "26";
+  }
+
+  /** Helper assertion comparing two maps */
+  private void assertMapsEqual(Map<?, ?> expected, Map<?, ?> map) {
+    assertEquals(expected, map);
+    assertEquals(expected.hashCode(), map.hashCode());
+    assertEquals(expected.entrySet(), map.entrySet());
+
+    // Assert that expectedValues > mapValues and that
+    // mapValues > expectedValues; i.e. that expectedValues == mapValues.
+    Collection<?> expectedValues = expected.values();
+    Collection<?> mapValues = map.values();
+    assertEquals(expectedValues.size(), mapValues.size());
+    assertTrue(expectedValues.containsAll(mapValues));
+    assertTrue(mapValues.containsAll(expectedValues));
+  }
+
+  public void testTransformEmptyMapEquality() {
+    Map<String, String> map = Maps.transformValues(
+        ImmutableMap.<String, Integer>of(), Functions.toStringFunction());
+    assertMapsEqual(Maps.newHashMap(), map);
+  }
+
+  public void testTransformSingletonMapEquality() {
+    Map<String, String> map = Maps.transformValues(
+        ImmutableMap.of("a", 1), Functions.toStringFunction());
+    Map<String, String> expected = ImmutableMap.of("a", "1");
+    assertMapsEqual(expected, map);
+    assertEquals(expected.get("a"), map.get("a"));
+  }
+
+  public void testTransformIdentityFunctionEquality() {
+    Map<String, Integer> underlying = ImmutableMap.of("a", 1);
+    Map<String, Integer> map = Maps.transformValues(
+        underlying, Functions.<Integer>identity());
+    assertMapsEqual(underlying, map);
+  }
+
+  public void testTransformPutEntryIsUnsupported() {
+    Map<String, String> map = Maps.transformValues(
+        ImmutableMap.of("a", 1), Functions.toStringFunction());
+    try {
+      map.put("b", "2");
+      fail();
+    } catch (UnsupportedOperationException expected) {
+    }
+
+    try {
+      map.putAll(ImmutableMap.of("b", "2"));
+      fail();
+    } catch (UnsupportedOperationException expected) {
+    }
+
+    try {
+      map.entrySet().iterator().next().setValue("one");
+      fail();
+    } catch (UnsupportedOperationException expected) {
+    }
+  }
+
+  public void testTransformRemoveEntry() {
+    Map<String, Integer> underlying = Maps.newHashMap();
+    underlying.put("a", 1);
+    Map<String, String> map
+        = Maps.transformValues(underlying, Functions.toStringFunction());
+    assertEquals("1", map.remove("a"));
+    assertNull(map.remove("b"));
+  }
+
+  public void testTransformEqualityOfMapsWithNullValues() {
+    Map<String, String> underlying = Maps.newHashMap();
+    underlying.put("a", null);
+    underlying.put("b", "");
+
+    Map<String, Boolean> map = Maps.transformValues(underlying,
+        new Function<String, Boolean>() {
+          @Override
+          public Boolean apply(@Nullable String from) {
+            return from == null;
+          }
+        }
+    );
+    Map<String, Boolean> expected = ImmutableMap.of("a", true, "b", false);
+    assertMapsEqual(expected, map);
+    assertEquals(expected.get("a"), map.get("a"));
+    assertEquals(expected.containsKey("a"), map.containsKey("a"));
+    assertEquals(expected.get("b"), map.get("b"));
+    assertEquals(expected.containsKey("b"), map.containsKey("b"));
+    assertEquals(expected.get("c"), map.get("c"));
+    assertEquals(expected.containsKey("c"), map.containsKey("c"));
+  }
+
+  public void testTransformReflectsUnderlyingMap() {
+    Map<String, Integer> underlying = Maps.newHashMap();
+    underlying.put("a", 1);
+    underlying.put("b", 2);
+    underlying.put("c", 3);
+    Map<String, String> map
+        = Maps.transformValues(underlying, Functions.toStringFunction());
+    assertEquals(underlying.size(), map.size());
+
+    underlying.put("d", 4);
+    assertEquals(underlying.size(), map.size());
+    assertEquals("4", map.get("d"));
+
+    underlying.remove("c");
+    assertEquals(underlying.size(), map.size());
+    assertFalse(map.containsKey("c"));
+
+    underlying.clear();
+    assertEquals(underlying.size(), map.size());
+  }
+
+  public void testTransformChangesAreReflectedInUnderlyingMap() {
+    Map<String, Integer> underlying = Maps.newLinkedHashMap();
+    underlying.put("a", 1);
+    underlying.put("b", 2);
+    underlying.put("c", 3);
+    underlying.put("d", 4);
+    underlying.put("e", 5);
+    underlying.put("f", 6);
+    underlying.put("g", 7);
+    Map<String, String> map
+        = Maps.transformValues(underlying, Functions.toStringFunction());
+
+    map.remove("a");
+    assertFalse(underlying.containsKey("a"));
+
+    Set<String> keys = map.keySet();
+    keys.remove("b");
+    assertFalse(underlying.containsKey("b"));
+
+    Iterator<String> keyIterator = keys.iterator();
+    keyIterator.next();
+    keyIterator.remove();
+    assertFalse(underlying.containsKey("c"));
+
+    Collection<String> values = map.values();
+    values.remove("4");
+    assertFalse(underlying.containsKey("d"));
+
+    Iterator<String> valueIterator = values.iterator();
+    valueIterator.next();
+    valueIterator.remove();
+    assertFalse(underlying.containsKey("e"));
+
+    Set<Map.Entry<String, String>> entries = map.entrySet();
+    Map.Entry<String, String> firstEntry = entries.iterator().next();
+    entries.remove(firstEntry);
+    assertFalse(underlying.containsKey("f"));
+
+    Iterator<Map.Entry<String, String>> entryIterator = entries.iterator();
+    entryIterator.next();
+    entryIterator.remove();
+    assertFalse(underlying.containsKey("g"));
+
+    assertTrue(underlying.isEmpty());
+    assertTrue(map.isEmpty());
+    assertTrue(keys.isEmpty());
+    assertTrue(values.isEmpty());
+    assertTrue(entries.isEmpty());
+  }
+
+  public void testTransformEquals() {
+    Map<String, Integer> underlying = ImmutableMap.of("a", 0, "b", 1, "c", 2);
+    Map<String, Integer> expected
+        = Maps.transformValues(underlying, Functions.<Integer>identity());
+
+    assertMapsEqual(expected, expected);
+
+    Map<String, Integer> equalToUnderlying = Maps.newTreeMap();
+    equalToUnderlying.putAll(underlying);
+    Map<String, Integer> map = Maps.transformValues(
+        equalToUnderlying, Functions.<Integer>identity());
+    assertMapsEqual(expected, map);
+
+    map = Maps.transformValues(ImmutableMap.of("a", 1, "b", 2, "c", 3),
+        new Function<Integer, Integer>() {
+          @Override
+          public Integer apply(Integer from) {
+            return from - 1;
+          }
+        }
+    );
+    assertMapsEqual(expected, map);
+  }
+
+  public void testTransformEntrySetContains() {
+    Map<String, Boolean> underlying = Maps.newHashMap();
+    underlying.put("a", null);
+    underlying.put("b", true);
+    underlying.put(null, true);
+
+    Map<String, Boolean> map = Maps.transformValues(
+        underlying, new Function<Boolean, Boolean>() {
+          @Override
+          public Boolean apply(@Nullable Boolean from) {
+            return (from == null) ? true : null;
+          }
+        }
+    );
+
+    Set<Map.Entry<String, Boolean>> entries = map.entrySet();
+    assertTrue(entries.contains(Maps.immutableEntry("a", true)));
+    assertTrue(entries.contains(Maps.immutableEntry("b", (Boolean) null)));
+    assertTrue(entries.contains(
+        Maps.immutableEntry((String) null, (Boolean) null)));
+
+    assertFalse(entries.contains(Maps.immutableEntry("c", (Boolean) null)));
+    assertFalse(entries.contains(Maps.immutableEntry((String) null, true)));
+  }
+
+  @Override public void testKeySetRemoveAllNullFromEmpty() {
+    try {
+      super.testKeySetRemoveAllNullFromEmpty();
+    } catch (RuntimeException tolerated) {
+      // GWT's HashMap.keySet().removeAll(null) doesn't throws NPE.
+    }
+  }
+
+  @Override public void testEntrySetRemoveAllNullFromEmpty() {
+    try {
+      super.testEntrySetRemoveAllNullFromEmpty();
+    } catch (RuntimeException tolerated) {
+      // GWT's HashMap.entrySet().removeAll(null) doesn't throws NPE.
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/MinMaxPriorityQueueTest.java b/guava-tests/test/com/google/common/collect/MinMaxPriorityQueueTest.java
new file mode 100644
index 0000000..8cc8559
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/MinMaxPriorityQueueTest.java
@@ -0,0 +1,829 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import com.google.common.collect.testing.IteratorFeature;
+import com.google.common.collect.testing.IteratorTester;
+import com.google.common.testing.NullPointerTester;
+
+import junit.framework.TestCase;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.ConcurrentModificationException;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.NoSuchElementException;
+import java.util.PriorityQueue;
+import java.util.Random;
+import java.util.SortedMap;
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ * Unit test for {@link MinMaxPriorityQueue}.
+ *
+ * @author Alexei Stolboushkin
+ * @author Sverre Sundsdal
+ */
+public class MinMaxPriorityQueueTest extends TestCase {
+  private Ordering<Integer> SOME_COMPARATOR = Ordering.natural().reverse();
+
+  // Overkill alert!  Test all combinations of 0-2 options during creation.
+
+  public void testCreation_simple() {
+    MinMaxPriorityQueue<Integer> queue = MinMaxPriorityQueue
+        .create();
+    assertEquals(11, queue.capacity());
+    checkUnbounded(queue);
+    checkNatural(queue);
+  }
+
+  public void testCreation_comparator() {
+    MinMaxPriorityQueue<Integer> queue = MinMaxPriorityQueue
+        .orderedBy(SOME_COMPARATOR)
+        .create();
+    assertEquals(11, queue.capacity());
+    checkUnbounded(queue);
+    assertSame(SOME_COMPARATOR, queue.comparator());
+  }
+
+  public void testCreation_expectedSize() {
+    MinMaxPriorityQueue<Integer> queue = MinMaxPriorityQueue
+        .expectedSize(8)
+        .create();
+    assertEquals(8, queue.capacity());
+    checkUnbounded(queue);
+    checkNatural(queue);
+  }
+
+  public void testCreation_expectedSize_comparator() {
+    MinMaxPriorityQueue<Integer> queue = MinMaxPriorityQueue
+        .orderedBy(SOME_COMPARATOR)
+        .expectedSize(8)
+        .create();
+    assertEquals(8, queue.capacity());
+    checkUnbounded(queue);
+    assertSame(SOME_COMPARATOR, queue.comparator());
+  }
+
+  public void testCreation_maximumSize() {
+    MinMaxPriorityQueue<Integer> queue = MinMaxPriorityQueue
+        .maximumSize(42)
+        .create();
+    assertEquals(11, queue.capacity());
+    assertEquals(42, queue.maximumSize);
+    checkNatural(queue);
+  }
+
+  public void testCreation_comparator_maximumSize() {
+    MinMaxPriorityQueue<Integer> queue = MinMaxPriorityQueue
+        .orderedBy(SOME_COMPARATOR)
+        .maximumSize(42)
+        .create();
+    assertEquals(11, queue.capacity());
+    assertEquals(42, queue.maximumSize);
+    assertSame(SOME_COMPARATOR, queue.comparator());
+  }
+
+  public void testCreation_expectedSize_maximumSize() {
+    MinMaxPriorityQueue<Integer> queue = MinMaxPriorityQueue
+        .expectedSize(8)
+        .maximumSize(42)
+        .create();
+    assertEquals(8, queue.capacity());
+    assertEquals(42, queue.maximumSize);
+    checkNatural(queue);
+  }
+
+  private static final List<Integer> NUMBERS =
+      ImmutableList.of(4, 8, 15, 16, 23, 42);
+
+  public void testCreation_withContents() {
+    MinMaxPriorityQueue<Integer> queue = MinMaxPriorityQueue
+        .create(NUMBERS);
+    assertEquals(6, queue.size());
+    assertEquals(11, queue.capacity());
+    checkUnbounded(queue);
+    checkNatural(queue);
+  }
+
+  public void testCreation_comparator_withContents() {
+    MinMaxPriorityQueue<Integer> queue = MinMaxPriorityQueue
+        .orderedBy(SOME_COMPARATOR)
+        .create(NUMBERS);
+    assertEquals(6, queue.size());
+    assertEquals(11, queue.capacity());
+    checkUnbounded(queue);
+    assertSame(SOME_COMPARATOR, queue.comparator());
+  }
+
+  public void testCreation_expectedSize_withContents() {
+    MinMaxPriorityQueue<Integer> queue = MinMaxPriorityQueue
+        .expectedSize(8)
+        .create(NUMBERS);
+    assertEquals(6, queue.size());
+    assertEquals(8, queue.capacity());
+    checkUnbounded(queue);
+    checkNatural(queue);
+  }
+
+  public void testCreation_maximumSize_withContents() {
+    MinMaxPriorityQueue<Integer> queue = MinMaxPriorityQueue
+        .maximumSize(42)
+        .create(NUMBERS);
+    assertEquals(6, queue.size());
+    assertEquals(11, queue.capacity());
+    assertEquals(42, queue.maximumSize);
+    checkNatural(queue);
+  }
+
+  // Now test everything at once
+
+  public void testCreation_allOptions() {
+    MinMaxPriorityQueue<Integer> queue = MinMaxPriorityQueue
+        .orderedBy(SOME_COMPARATOR)
+        .expectedSize(8)
+        .maximumSize(42)
+        .create(NUMBERS);
+    assertEquals(6, queue.size());
+    assertEquals(8, queue.capacity());
+    assertEquals(42, queue.maximumSize);
+    assertSame(SOME_COMPARATOR, queue.comparator());
+  }
+
+  // TODO: tests that check the weird interplay between expected size,
+  // maximum size, size of initial contents, default capacity...
+
+  private static void checkNatural(MinMaxPriorityQueue<Integer> queue) {
+    assertSame(Ordering.natural(), queue.comparator());
+  }
+
+  private static void checkUnbounded(MinMaxPriorityQueue<Integer> queue) {
+    assertEquals(Integer.MAX_VALUE, queue.maximumSize);
+  }
+
+  public void testHeapIntact() {
+    Random random = new Random(0);
+    int heapSize = 999;
+    int numberOfModifications = 500;
+    MinMaxPriorityQueue<Integer> mmHeap =
+        MinMaxPriorityQueue.expectedSize(heapSize).create();
+    /*
+     * this map would contain the same exact elements as the MinMaxHeap; the
+     * value in the map is the number of occurrences of the key.
+     */
+    SortedMap<Integer, AtomicInteger> replica = Maps.newTreeMap();
+    assertTrue("Empty heap should be OK", mmHeap.isIntact());
+    for (int i = 0; i < heapSize; i++) {
+      int randomInt = random.nextInt();
+      mmHeap.offer(randomInt);
+      insertIntoReplica(replica, randomInt);
+    }
+    assertTrue("MinMaxHeap not intact after " + heapSize + " insertions",
+        mmHeap.isIntact());
+    assertEquals(heapSize, mmHeap.size());
+    int currentHeapSize = heapSize;
+    for (int i = 0; i < numberOfModifications; i++) {
+      if (random.nextBoolean()) {
+        /* insert a new element */
+        int randomInt = random.nextInt();
+        mmHeap.offer(randomInt);
+        insertIntoReplica(replica, randomInt);
+        currentHeapSize++;
+      } else {
+        /* remove either min or max */
+        if (random.nextBoolean()) {
+          removeMinFromReplica(replica, mmHeap.poll());
+        } else {
+          removeMaxFromReplica(replica, mmHeap.pollLast());
+        }
+        for (Integer v : replica.keySet()) {
+          assertTrue("MinMax queue has lost " + v, mmHeap.contains(v));
+        }
+        assertTrue(mmHeap.isIntact());
+        currentHeapSize--;
+        assertEquals(currentHeapSize, mmHeap.size());
+      }
+    }
+    assertEquals(currentHeapSize, mmHeap.size());
+    assertTrue("Heap not intact after " + numberOfModifications +
+        " random mixture of operations", mmHeap.isIntact());
+  }
+
+  public void testSmall() {
+    MinMaxPriorityQueue<Integer> mmHeap = MinMaxPriorityQueue.create();
+    mmHeap.add(1);
+    mmHeap.add(4);
+    mmHeap.add(2);
+    mmHeap.add(3);
+    assertEquals(4, (int) mmHeap.pollLast());
+    assertEquals(3, (int) mmHeap.peekLast());
+    assertEquals(3, (int) mmHeap.pollLast());
+    assertEquals(1, (int) mmHeap.peek());
+    assertEquals(2, (int) mmHeap.peekLast());
+    assertEquals(2, (int) mmHeap.pollLast());
+    assertEquals(1, (int) mmHeap.peek());
+    assertEquals(1, (int) mmHeap.peekLast());
+    assertEquals(1, (int) mmHeap.pollLast());
+    assertNull(mmHeap.peek());
+    assertNull(mmHeap.peekLast());
+    assertNull(mmHeap.pollLast());
+  }
+
+  public void testSmallMinHeap() {
+    MinMaxPriorityQueue<Integer> mmHeap = MinMaxPriorityQueue.create();
+    mmHeap.add(1);
+    mmHeap.add(3);
+    mmHeap.add(2);
+    assertEquals(1, (int) mmHeap.peek());
+    assertEquals(1, (int) mmHeap.poll());
+    assertEquals(3, (int) mmHeap.peekLast());
+    assertEquals(2, (int) mmHeap.peek());
+    assertEquals(2, (int) mmHeap.poll());
+    assertEquals(3, (int) mmHeap.peekLast());
+    assertEquals(3, (int) mmHeap.peek());
+    assertEquals(3, (int) mmHeap.poll());
+    assertNull(mmHeap.peekLast());
+    assertNull(mmHeap.peek());
+    assertNull(mmHeap.poll());
+  }
+
+  public void testRemove() {
+    MinMaxPriorityQueue<Integer> mmHeap = MinMaxPriorityQueue.create();
+    mmHeap.addAll(Lists.newArrayList(1, 2, 3, 4, 47, 1, 5, 3, 0));
+    assertTrue("Heap is not intact initally", mmHeap.isIntact());
+    assertEquals(9, mmHeap.size());
+    mmHeap.remove(5);
+    assertEquals(8, mmHeap.size());
+    assertTrue("Heap is not intact after remove()", mmHeap.isIntact());
+    assertEquals(47, (int) mmHeap.pollLast());
+    assertEquals(4, (int) mmHeap.pollLast());
+    mmHeap.removeAll(Lists.newArrayList(2, 3));
+    assertEquals(3, mmHeap.size());
+    assertTrue("Heap is not intact after removeAll()", mmHeap.isIntact());
+  }
+
+  public void testContains() {
+    MinMaxPriorityQueue<Integer> mmHeap = MinMaxPriorityQueue.create();
+    mmHeap.addAll(Lists.newArrayList(1, 1, 2));
+    assertEquals(3, mmHeap.size());
+    assertFalse("Heap does not contain null", mmHeap.contains(null));
+    assertFalse("Heap does not contain 3", mmHeap.contains(3));
+    assertFalse("Heap does not contain 3", mmHeap.remove(3));
+    assertEquals(3, mmHeap.size());
+    assertTrue("Heap is not intact after remove()", mmHeap.isIntact());
+    assertTrue("Heap contains two 1's", mmHeap.contains(1));
+    assertTrue("Heap contains two 1's", mmHeap.remove(1));
+    assertTrue("Heap contains 1", mmHeap.contains(1));
+    assertTrue("Heap contains 1", mmHeap.remove(1));
+    assertFalse("Heap does not contain 1", mmHeap.contains(1));
+    assertTrue("Heap contains 2", mmHeap.remove(2));
+    assertEquals(0, mmHeap.size());
+    assertFalse("Heap does not contain anything", mmHeap.contains(1));
+    assertFalse("Heap does not contain anything", mmHeap.remove(2));
+  }
+
+  public void testIteratorPastEndException() {
+    MinMaxPriorityQueue<Integer> mmHeap = MinMaxPriorityQueue.create();
+    mmHeap.addAll(Lists.newArrayList(1, 2));
+    Iterator<Integer> it = mmHeap.iterator();
+    assertTrue("Iterator has reached end prematurely", it.hasNext());
+    it.next();
+    it.next();
+    try {
+      it.next();
+      fail("No exception thrown when iterating past end of heap");
+    } catch (NoSuchElementException e) {
+      // expected error
+    }
+  }
+
+  public void testIteratorConcurrentModification() {
+    MinMaxPriorityQueue<Integer> mmHeap = MinMaxPriorityQueue.create();
+    mmHeap.addAll(Lists.newArrayList(1, 2, 3, 4));
+    Iterator<Integer> it = mmHeap.iterator();
+    assertTrue("Iterator has reached end prematurely", it.hasNext());
+    it.next();
+    it.next();
+    mmHeap.remove(4);
+    try {
+      it.next();
+      fail("No exception thrown when iterating a modified heap");
+    } catch (ConcurrentModificationException e) {
+      // expected error
+    }
+  }
+
+  /**
+   * Tests a failure caused by fix to childless uncle issue.
+   */
+  public void testIteratorRegressionChildlessUncle() {
+    final ArrayList<Integer> initial = Lists.newArrayList(
+        1, 15, 13, 8, 9, 10, 11, 14);
+    MinMaxPriorityQueue<Integer> q = MinMaxPriorityQueue.create(initial);
+    assertTrue("State " + Arrays.toString(q.toArray()), q.isIntact());
+    q.remove(9);
+    q.remove(11);
+    q.remove(10);
+    // Now we're in the critical state: [1, 15, 13, 8, 14]
+    // Removing 8 while iterating caused duplicates in iteration result.
+    List<Integer> result = Lists.newArrayListWithCapacity(initial.size());
+    for (Iterator<Integer> iter = q.iterator(); iter.hasNext();) {
+      Integer value = iter.next();
+      result.add(value);
+      if (value == 8) {
+        iter.remove();
+      }
+    }
+    assertTrue(q.isIntact());
+    ASSERT.that(result).hasContentsAnyOrder(1, 15, 13, 8, 14);
+  }
+
+  /**
+   * This tests a special case of the removeAt() call. Moving an element
+   * sideways on the heap could break the invariants. Sometimes we need to
+   * bubble an element up instead of trickling down. See implementation.
+   */
+  public void testInvalidatingRemove() {
+    MinMaxPriorityQueue<Integer> mmHeap = MinMaxPriorityQueue.create();
+    mmHeap.addAll(Lists.newArrayList(
+            1, 20, 1000, 2, 3, 30, 40, 10, 11, 12, 13, 300, 400, 500, 600));
+    assertEquals(15, mmHeap.size());
+    assertTrue("Heap is not intact initially", mmHeap.isIntact());
+    mmHeap.remove(12);
+    assertEquals(14, mmHeap.size());
+    assertTrue("Heap is not intact after remove()", mmHeap.isIntact());
+  }
+
+  /**
+   * This tests a more obscure special case, but otherwise similar to above.
+   */
+  public void testInvalidatingRemove2() {
+    MinMaxPriorityQueue<Integer> mmHeap = MinMaxPriorityQueue.create();
+    List<Integer> values = Lists.newArrayList(
+        1, 20, 1000, 2, 3, 30, 40, 10, 11, 12, 13, 300, 400, 500, 600, 4, 5,
+        6, 7, 8, 9, 4, 5, 200, 250);
+    mmHeap.addAll(values);
+    assertEquals(25, mmHeap.size());
+    assertTrue("Heap is not intact initially", mmHeap.isIntact());
+    mmHeap.remove(2);
+    assertEquals(24, mmHeap.size());
+    assertTrue("Heap is not intact after remove()", mmHeap.isIntact());
+    values.removeAll(Lists.newArrayList(2));
+    assertEquals(values.size(), mmHeap.size());
+    assertTrue(values.containsAll(mmHeap));
+    assertTrue(mmHeap.containsAll(values));
+  }
+
+  public void testIteratorInvalidatingIteratorRemove() {
+    MinMaxPriorityQueue<Integer> mmHeap = MinMaxPriorityQueue.create();
+    mmHeap.addAll(Lists.newArrayList(
+            1, 20, 100, 2, 3, 30, 40));
+    assertEquals(7, mmHeap.size());
+    assertTrue("Heap is not intact initially", mmHeap.isIntact());
+    Iterator<Integer> it = mmHeap.iterator();
+    assertEquals((Integer) 1, it.next());
+    assertEquals((Integer) 20, it.next());
+    assertEquals((Integer) 100, it.next());
+    assertEquals((Integer) 2, it.next());
+    it.remove();
+    assertFalse(mmHeap.contains(2));
+    assertTrue(it.hasNext());
+    assertEquals((Integer) 3, it.next());
+    assertTrue(it.hasNext());
+    assertEquals((Integer) 30, it.next());
+    assertTrue(it.hasNext());
+    assertEquals((Integer) 40, it.next());
+    assertFalse(it.hasNext());
+    assertEquals(6, mmHeap.size());
+    assertTrue("Heap is not intact after remove()", mmHeap.isIntact());
+    assertFalse(mmHeap.contains(2));
+
+    // This tests that it.remove() above actually changed the order. It
+    // indicates that the value 40 was stored in forgetMeNot, so it is
+    // returned in the last call to it.next(). Without it, 30 should be the last
+    // item returned by the iterator.
+    Integer lastItem = 0;
+    for (Integer tmp : mmHeap) {
+      lastItem = tmp;
+    }
+    assertEquals((Integer) 30, lastItem);
+  }
+
+  /**
+   * This tests a special case where removeAt has to trickle an element
+   * first down one level from a min to a max level, then up one level above
+   * the index of the removed element.
+   * It also tests that skipMe in the iterator plays nicely with
+   * forgetMeNot.
+   */
+  public void testIteratorInvalidatingIteratorRemove2() {
+    MinMaxPriorityQueue<Integer> mmHeap = MinMaxPriorityQueue.create();
+    mmHeap.addAll(Lists.newArrayList(
+        1, 20, 1000, 2, 3, 30, 40, 10, 11, 12, 13, 200, 300, 500, 400));
+    assertTrue("Heap is not intact initially", mmHeap.isIntact());
+    Iterator<Integer> it = mmHeap.iterator();
+    assertEquals((Integer) 1, it.next());
+    assertEquals((Integer) 20, it.next());
+    assertEquals((Integer) 1000, it.next());
+    assertEquals((Integer) 2, it.next());
+    it.remove();
+    assertTrue("Heap is not intact after remove", mmHeap.isIntact());
+    assertEquals((Integer) 10, it.next());
+    assertEquals((Integer) 3, it.next());
+    it.remove();
+    assertTrue("Heap is not intact after remove", mmHeap.isIntact());
+    assertEquals((Integer) 12, it.next());
+    assertEquals((Integer) 30, it.next());
+    assertEquals((Integer) 40, it.next());
+    // Skipping 20
+    assertEquals((Integer) 11, it.next());
+    // Skipping 400
+    assertEquals((Integer) 13, it.next());
+    assertEquals((Integer) 200, it.next());
+    assertEquals((Integer) 300, it.next());
+    // Last two from forgetMeNot.
+    assertEquals((Integer) 400, it.next());
+    assertEquals((Integer) 500, it.next());
+  }
+
+  public void testRemoveFromStringHeap() {
+    MinMaxPriorityQueue<String> mmHeap =
+        MinMaxPriorityQueue.expectedSize(5).create();
+    Collections.addAll(mmHeap,
+        "foo", "bar", "foobar", "barfoo", "larry", "sergey", "eric");
+    assertTrue("Heap is not intact initially", mmHeap.isIntact());
+    assertEquals("bar", mmHeap.peek());
+    assertEquals("sergey", mmHeap.peekLast());
+    assertEquals(7, mmHeap.size());
+    assertTrue("Could not remove larry", mmHeap.remove("larry"));
+    assertEquals(6, mmHeap.size());
+    assertFalse("heap contains larry which has been removed",
+        mmHeap.contains("larry"));
+    assertTrue("heap does not contain sergey",
+        mmHeap.contains("sergey"));
+    assertTrue("Could not remove larry", mmHeap.removeAll(
+        Lists.newArrayList("sergey", "eric")));
+    assertFalse("Could remove nikesh which is not in the heap",
+        mmHeap.remove("nikesh"));
+    assertEquals(4, mmHeap.size());
+  }
+
+  public void testCreateWithOrdering() {
+    MinMaxPriorityQueue<String> mmHeap =
+        MinMaxPriorityQueue.orderedBy(Ordering.natural().reverse()).create();
+    Collections.addAll(mmHeap,
+        "foo", "bar", "foobar", "barfoo", "larry", "sergey", "eric");
+    assertTrue("Heap is not intact initially", mmHeap.isIntact());
+    assertEquals("sergey", mmHeap.peek());
+    assertEquals("bar", mmHeap.peekLast());
+  }
+
+  public void testCreateWithCapacityAndOrdering() {
+    MinMaxPriorityQueue<Integer> mmHeap = MinMaxPriorityQueue.orderedBy(
+        Ordering.natural().reverse()).expectedSize(5).create();
+    Collections.addAll(mmHeap, 1, 7, 2, 56, 2, 5, 23, 68, 0, 3);
+    assertTrue("Heap is not intact initially", mmHeap.isIntact());
+    assertEquals(68, (int) mmHeap.peek());
+    assertEquals(0, (int) mmHeap.peekLast());
+  }
+
+  private <T extends Comparable<T>> void runIterator(
+      final List<T> values, int steps) throws Exception {
+    IteratorTester<T> tester =
+        new IteratorTester<T>(
+            steps,
+            IteratorFeature.MODIFIABLE,
+            Lists.newLinkedList(values),
+            IteratorTester.KnownOrder.UNKNOWN_ORDER) {
+          private MinMaxPriorityQueue<T> mmHeap;
+          @Override protected Iterator<T> newTargetIterator() {
+            mmHeap = MinMaxPriorityQueue.create(values);
+            return mmHeap.iterator();
+          }
+          @Override protected void verify(List<T> elements) {
+            assertEquals(Sets.newHashSet(elements),
+                Sets.newHashSet(mmHeap.iterator()));
+            assertTrue("Invalid MinMaxHeap: " + mmHeap.toString(),
+                mmHeap.isIntact());
+          }
+        };
+    tester.ignoreSunJavaBug6529795();
+    tester.test();
+  }
+
+  public void testIteratorTester() throws Exception {
+    Random random = new Random(0);
+    List<Integer> list = Lists.newArrayList();
+    for (int i = 0; i < 3; i++) {
+      list.add(random.nextInt());
+    }
+    runIterator(list, 6);
+  }
+
+  public void testIteratorTesterLarger() throws Exception {
+    runIterator(Lists.newArrayList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), 5);
+  }
+
+  public void testRemoveAt() {
+    long seed = new Random().nextLong();
+    Random random = new Random(seed);
+    int heapSize = 999;
+    int numberOfModifications = 500;
+    MinMaxPriorityQueue<Integer> mmHeap =
+        MinMaxPriorityQueue.expectedSize(heapSize).create();
+    for (int i = 0; i < heapSize; i++) {
+      mmHeap.add(random.nextInt());
+    }
+    for (int i = 0; i < numberOfModifications; i++) {
+      mmHeap.removeAt(random.nextInt(mmHeap.size()));
+      assertTrue("Modification " + i + " of seed " + seed, mmHeap.isIntact());
+      mmHeap.add(random.nextInt());
+      assertTrue("Modification " + i + " of seed " + seed, mmHeap.isIntact());
+    }
+  }
+
+  /**
+   * Regression test for bug found.
+   */
+  public void testCorrectOrdering_regression() {
+    MinMaxPriorityQueue<Integer> q = MinMaxPriorityQueue
+        .create(ImmutableList.of(3, 5, 1, 4, 7));
+    List<Integer> expected = ImmutableList.of(1, 3, 4, 5, 7);
+    List<Integer> actual = new ArrayList<Integer>(5);
+    for (int i = 0; i < expected.size(); i++) {
+      actual.add(q.pollFirst());
+    }
+    assertEquals(expected, actual);
+  }
+
+  public void testCorrectOrdering_smallHeapsPollFirst() {
+    for (int size = 2; size < 16; size++) {
+      for (int attempts = 0; attempts < size * (size - 1); attempts++) {
+        ArrayList<Integer> elements = createOrderedList(size);
+        List<Integer> expected = ImmutableList.copyOf(elements);
+        MinMaxPriorityQueue<Integer> q = MinMaxPriorityQueue.create();
+        long seed = insertRandomly(elements, q);
+        while (!q.isEmpty()) {
+          elements.add(q.pollFirst());
+        }
+        assertEquals("Using seed " + seed, expected, elements);
+      }
+    }
+  }
+
+  public void testCorrectOrdering_smallHeapsPollLast() {
+    for (int size = 2; size < 16; size++) {
+      for (int attempts = 0; attempts < size * (size - 1); attempts++) {
+        ArrayList<Integer> elements = createOrderedList(size);
+        List<Integer> expected = ImmutableList.copyOf(elements);
+        MinMaxPriorityQueue<Integer> q = MinMaxPriorityQueue.create();
+        long seed = insertRandomly(elements, q);
+        while (!q.isEmpty()) {
+          elements.add(0, q.pollLast());
+        }
+        assertEquals("Using seed " + seed, expected, elements);
+      }
+    }
+  }
+
+  public void testCorrectOrdering_mediumHeapsPollFirst() {
+    for (int attempts = 0; attempts < 5000; attempts++) {
+      int size = new Random().nextInt(256) + 16;
+      ArrayList<Integer> elements = createOrderedList(size);
+      List<Integer> expected = ImmutableList.copyOf(elements);
+      MinMaxPriorityQueue<Integer> q = MinMaxPriorityQueue.create();
+      long seed = insertRandomly(elements, q);
+      while (!q.isEmpty()) {
+        elements.add(q.pollFirst());
+      }
+      assertEquals("Using seed " + seed, expected, elements);
+    }
+  }
+
+  /**
+   * Regression test for bug found in random testing.
+   */
+  public void testCorrectOrdering_73ElementBug() {
+    int size = 73;
+    long seed = 7522346378524621981L;
+    ArrayList<Integer> elements = createOrderedList(size);
+    List<Integer> expected = ImmutableList.copyOf(elements);
+    MinMaxPriorityQueue<Integer> q = MinMaxPriorityQueue.create();
+    insertRandomly(elements, q, new Random(seed));
+    assertTrue(q.isIntact());
+    while (!q.isEmpty()) {
+      elements.add(q.pollFirst());
+      assertTrue("State " + Arrays.toString(q.toArray()), q.isIntact());
+    }
+    assertEquals("Using seed " + seed, expected, elements);
+  }
+
+  public void testCorrectOrdering_mediumHeapsPollLast() {
+    for (int attempts = 0; attempts < 5000; attempts++) {
+      int size = new Random().nextInt(256) + 16;
+      ArrayList<Integer> elements = createOrderedList(size);
+      List<Integer> expected = ImmutableList.copyOf(elements);
+      MinMaxPriorityQueue<Integer> q = MinMaxPriorityQueue.create();
+      long seed = insertRandomly(elements, q);
+      while (!q.isEmpty()) {
+        elements.add(0, q.pollLast());
+      }
+      assertEquals("Using seed " + seed, expected, elements);
+    }
+  }
+
+  public void testCorrectOrdering_randomAccess() {
+    long seed = new Random().nextLong();
+    Random random = new Random(seed);
+    PriorityQueue<Integer> control = new PriorityQueue<Integer>();
+    MinMaxPriorityQueue<Integer> q = MinMaxPriorityQueue.create();
+    for (int i = 0; i < 73; i++) { // 73 is a childless uncle case.
+      Integer element = random.nextInt();
+      control.add(element);
+      assertTrue(q.add(element));
+    }
+    assertTrue("State " + Arrays.toString(q.toArray()), q.isIntact());
+    for (int i = 0; i < 500000; i++) {
+      if (random.nextBoolean()) {
+        Integer element = random.nextInt();
+        control.add(element);
+        q.add(element);
+      } else {
+        assertEquals("Using seed " + seed, control.poll(), q.pollFirst());
+      }
+    }
+    while (!control.isEmpty()) {
+      assertEquals("Using seed " + seed, control.poll(), q.pollFirst());
+    }
+    assertTrue(q.isEmpty());
+  }
+
+  /**
+   * Regression test for b/4124577
+   */
+  public void testRegression_dataCorruption() {
+    int size = 8;
+    List<Integer> expected = createOrderedList(size);
+    MinMaxPriorityQueue<Integer> q = MinMaxPriorityQueue.create(expected);
+    List<Integer> contents = Lists.newArrayList(expected);
+    List<Integer> elements = Lists.newArrayListWithCapacity(size);
+    while (!q.isEmpty()) {
+      ASSERT.that(q).hasContentsAnyOrder(contents.toArray(new Integer[0]));
+      Integer next = q.pollFirst();
+      contents.remove(next);
+      ASSERT.that(q).hasContentsAnyOrder(contents.toArray(new Integer[0]));
+      for (int i = 0; i <= size; i++) {
+        q.add(i);
+        contents.add(i);
+        ASSERT.that(q).hasContentsAnyOrder(contents.toArray(new Integer[0]));
+        q.add(next);
+        contents.add(next);
+        ASSERT.that(q).hasContentsAnyOrder(contents.toArray(new Integer[0]));
+        q.remove(i);
+        assertTrue(contents.remove(Integer.valueOf(i)));
+        ASSERT.that(q).hasContentsAnyOrder(contents.toArray(new Integer[0]));
+        assertEquals(next, q.poll());
+        contents.remove(next);
+        ASSERT.that(q).hasContentsAnyOrder(contents.toArray(new Integer[0]));
+      }
+      elements.add(next);
+    }
+    assertEquals(expected, elements);
+  }
+
+  /**
+   * Returns the seed used for the randomization.
+   */
+  private long insertRandomly(ArrayList<Integer> elements,
+      MinMaxPriorityQueue<Integer> q) {
+    long seed = new Random().nextLong();
+    Random random = new Random(seed);
+    insertRandomly(elements, q, random);
+    return seed;
+  }
+
+  private void insertRandomly(ArrayList<Integer> elements, MinMaxPriorityQueue<Integer> q,
+      Random random) {
+    while (!elements.isEmpty()) {
+      int selectedIndex = random.nextInt(elements.size());
+      q.offer(elements.remove(selectedIndex));
+    }
+  }
+
+  private ArrayList<Integer> createOrderedList(int size) {
+    ArrayList<Integer> elements = new ArrayList<Integer>(size);
+    for (int i = 0; i < size; i++) {
+      elements.add(i);
+    }
+    return elements;
+  }
+
+  public void testIsEvenLevel() {
+    assertTrue(MinMaxPriorityQueue.isEvenLevel(0));
+    assertFalse(MinMaxPriorityQueue.isEvenLevel(1));
+    assertFalse(MinMaxPriorityQueue.isEvenLevel(2));
+    assertTrue(MinMaxPriorityQueue.isEvenLevel(3));
+
+    assertFalse(MinMaxPriorityQueue.isEvenLevel((1 << 10) - 2));
+    assertTrue(MinMaxPriorityQueue.isEvenLevel((1 << 10) - 1));
+
+    int i = 1 << 29;
+    assertTrue(MinMaxPriorityQueue.isEvenLevel(i - 2));
+    assertFalse(MinMaxPriorityQueue.isEvenLevel(i - 1));
+    assertFalse(MinMaxPriorityQueue.isEvenLevel(i));
+
+    i = 1 << 30;
+    assertFalse(MinMaxPriorityQueue.isEvenLevel(i - 2));
+    assertTrue(MinMaxPriorityQueue.isEvenLevel(i - 1));
+    assertTrue(MinMaxPriorityQueue.isEvenLevel(i));
+
+    // 1 << 31 is negative because of overflow, 1 << 31 - 1 is positive
+    // since isEvenLevel adds 1, we need to do - 2.
+    assertTrue(MinMaxPriorityQueue.isEvenLevel((1 << 31) - 2));
+    assertTrue(MinMaxPriorityQueue.isEvenLevel(Integer.MAX_VALUE - 1));
+    try {
+      MinMaxPriorityQueue.isEvenLevel((1 << 31) - 1);
+      fail("Should overflow");
+    } catch (IllegalStateException e) {
+      // expected
+    }
+    try {
+      MinMaxPriorityQueue.isEvenLevel(Integer.MAX_VALUE);
+      fail("Should overflow");
+    } catch (IllegalStateException e) {
+      // expected
+    }
+    try {
+      MinMaxPriorityQueue.isEvenLevel(1 << 31);
+      fail("Should be negative");
+    } catch (IllegalStateException e) {
+      // expected
+    }
+    try {
+      MinMaxPriorityQueue.isEvenLevel(Integer.MIN_VALUE);
+      fail("Should be negative");
+    } catch (IllegalStateException e) {
+      // expected
+    }
+  }
+
+  public void testNullPointers() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.testAllPublicConstructors(MinMaxPriorityQueue.class);
+    tester.testAllPublicStaticMethods(MinMaxPriorityQueue.class);
+    tester.testAllPublicInstanceMethods(MinMaxPriorityQueue.<String>create());
+  }
+
+  private static void insertIntoReplica(
+      Map<Integer, AtomicInteger> replica,
+      int newValue) {
+    if (replica.containsKey(newValue)) {
+      replica.get(newValue).incrementAndGet();
+    } else {
+      replica.put(newValue, new AtomicInteger(1));
+    }
+  }
+
+  private static void removeMinFromReplica(
+      SortedMap<Integer, AtomicInteger> replica,
+      int minValue) {
+    Integer replicatedMinValue = replica.firstKey();
+    assertEquals(replicatedMinValue, (Integer) minValue);
+    removeFromReplica(replica, replicatedMinValue);
+  }
+
+  private static void removeMaxFromReplica(
+      SortedMap<Integer, AtomicInteger> replica,
+      int maxValue) {
+    Integer replicatedMaxValue = replica.lastKey();
+    assertTrue("maxValue is incorrect", replicatedMaxValue == maxValue);
+    removeFromReplica(replica, replicatedMaxValue);
+  }
+
+  private static void removeFromReplica(
+      Map<Integer, AtomicInteger> replica, int value) {
+    AtomicInteger numOccur = replica.get(value);
+    if (numOccur.decrementAndGet() == 0) {
+      replica.remove(value);
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/MultimapCollectionTest.java b/guava-tests/test/com/google/common/collect/MultimapCollectionTest.java
new file mode 100644
index 0000000..886dfd1
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/MultimapCollectionTest.java
@@ -0,0 +1,978 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.collect.Maps.newHashMap;
+import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES;
+import static com.google.common.collect.testing.features.CollectionFeature.REMOVE_OPERATIONS;
+import static com.google.common.collect.testing.google.AbstractMultisetSetCountTester.getSetCountDuplicateInitializingMethods;
+import static com.google.common.collect.testing.google.MultisetIteratorTester.getIteratorDuplicateInitializingMethods;
+import static com.google.common.collect.testing.google.MultisetReadsTester.getReadsDuplicateInitializingMethods;
+import static java.lang.reflect.Proxy.newProxyInstance;
+
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.base.Functions;
+import com.google.common.base.Predicate;
+import com.google.common.base.Supplier;
+import com.google.common.collect.testing.CollectionTestSuiteBuilder;
+import com.google.common.collect.testing.ListTestSuiteBuilder;
+import com.google.common.collect.testing.SampleElements;
+import com.google.common.collect.testing.SetTestSuiteBuilder;
+import com.google.common.collect.testing.TestCollectionGenerator;
+import com.google.common.collect.testing.TestListGenerator;
+import com.google.common.collect.testing.TestStringCollectionGenerator;
+import com.google.common.collect.testing.TestStringListGenerator;
+import com.google.common.collect.testing.TestStringSetGenerator;
+import com.google.common.collect.testing.TestStringSortedSetGenerator;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.Feature;
+import com.google.common.collect.testing.features.ListFeature;
+import com.google.common.collect.testing.google.MultisetTestSuiteBuilder;
+import com.google.common.collect.testing.google.MultisetWritesTester;
+import com.google.common.collect.testing.google.TestStringMultisetGenerator;
+import com.google.common.collect.testing.testers.CollectionIteratorTester;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.SortedSet;
+import java.util.TreeSet;
+
+/**
+ * Run collection tests on {@link Multimap} implementations.
+ *
+ * @author Jared Levy
+ */
+@GwtIncompatible("suite") // TODO(cpovirk): set up collect/gwt/suites version
+public class MultimapCollectionTest extends TestCase {
+
+  private static final Feature<?>[] COLLECTION_FEATURES = {
+    CollectionSize.ANY,
+    CollectionFeature.ALLOWS_NULL_VALUES,
+    CollectionFeature.GENERAL_PURPOSE
+  };
+
+  static final Feature<?>[] COLLECTION_FEATURES_ORDER = {
+    CollectionSize.ANY,
+    CollectionFeature.ALLOWS_NULL_VALUES,
+    CollectionFeature.KNOWN_ORDER,
+    CollectionFeature.GENERAL_PURPOSE
+  };
+  static final Feature<?>[] COLLECTION_FEATURES_REMOVE = {
+    CollectionSize.ANY,
+    CollectionFeature.ALLOWS_NULL_VALUES,
+    CollectionFeature.REMOVE_OPERATIONS
+  };
+
+  static final Feature<?>[] COLLECTION_FEATURES_REMOVE_ORDER = {
+    CollectionSize.ANY,
+    CollectionFeature.ALLOWS_NULL_VALUES,
+    CollectionFeature.KNOWN_ORDER,
+    CollectionFeature.REMOVE_OPERATIONS
+  };
+
+  private static final Feature<?>[] LIST_FEATURES = {
+    CollectionSize.ANY,
+    CollectionFeature.ALLOWS_NULL_VALUES,
+    ListFeature.GENERAL_PURPOSE
+  };
+
+  private static final Feature<?>[] LIST_FEATURES_REMOVE_SET = {
+    CollectionSize.ANY,
+    CollectionFeature.ALLOWS_NULL_VALUES,
+    ListFeature.REMOVE_OPERATIONS,
+    ListFeature.SUPPORTS_SET
+  };
+
+  private static final Feature<?>[] FOR_MAP_FEATURES_ONE = {
+    CollectionSize.ONE,
+    ALLOWS_NULL_VALUES,
+    REMOVE_OPERATIONS,
+  };
+
+  private static final Feature<?>[] FOR_MAP_FEATURES_ANY = {
+    CollectionSize.ANY,
+    ALLOWS_NULL_VALUES,
+    REMOVE_OPERATIONS,
+  };
+
+  static final Supplier<TreeSet<String>> STRING_TREESET_FACTORY
+      = new Supplier<TreeSet<String>>() {
+        @Override
+        public TreeSet<String> get() {
+          return new TreeSet<String>(Ordering.natural().nullsLast());
+        }
+      };
+
+  static void populateMultimapForGet(
+      Multimap<Integer, String> multimap, String[] elements) {
+    multimap.put(2, "foo");
+    for (String element : elements) {
+      multimap.put(3, element);
+    }
+  }
+
+  static void populateMultimapForKeySet(
+      Multimap<String, Integer> multimap, String[] elements) {
+    for (String element : elements) {
+      multimap.put(element, 2);
+      multimap.put(element, 3);
+    }
+  }
+
+  static void populateMultimapForValues(
+      Multimap<Integer, String> multimap, String[] elements) {
+    for (int i = 0; i < elements.length; i++) {
+      multimap.put(i % 2, elements[i]);
+    }
+  }
+
+  static void populateMultimapForKeys(
+      Multimap<String, Integer> multimap, String[] elements) {
+    for (int i = 0; i < elements.length; i++) {
+      multimap.put(elements[i], i);
+    }
+  }
+
+  /**
+   * Implements {@code Multimap.put()} -- and no other methods -- for a {@code
+   * Map} by ignoring all but the latest value for each key. This class exists
+   * only so that we can use
+   * {@link MultimapCollectionTest#populateMultimapForGet(Multimap, String[])}
+   * and similar methods to populate a map to be passed to
+   * {@link Multimaps#forMap(Map)}. All tests should run against the result of
+   * {@link #build()}.
+   */
+  private static final class PopulatableMapAsMultimap<K, V>
+      extends ForwardingMultimap<K, V> {
+    final Map<K, V> map;
+    final SetMultimap<K, V> unusableDelegate;
+
+    static <K, V> PopulatableMapAsMultimap<K, V> create() {
+      return new PopulatableMapAsMultimap<K, V>();
+    }
+
+    @SuppressWarnings("unchecked") // all methods throw immediately
+    PopulatableMapAsMultimap() {
+      this.map = newHashMap();
+      this.unusableDelegate = (SetMultimap<K, V>) newProxyInstance(
+          SetMultimap.class.getClassLoader(),
+          new Class<?>[] {SetMultimap.class},
+          new InvocationHandler() {
+            @Override
+            public Object invoke(Object proxy, Method method, Object[] args)
+                throws Throwable {
+              throw new UnsupportedOperationException();
+            }
+          });
+    }
+
+    @Override protected Multimap<K, V> delegate() {
+      return unusableDelegate;
+    }
+
+    @Override public boolean put(K key, V value) {
+      map.put(key, value);
+      return true;
+    }
+
+    SetMultimap<K, V> build() {
+      return Multimaps.forMap(map);
+    }
+  }
+
+  static abstract class TestEntriesGenerator
+      implements TestCollectionGenerator<Entry<String, Integer>> {
+    @Override
+    public SampleElements<Entry<String, Integer>> samples() {
+      return new SampleElements<Entry<String, Integer>>(
+          Maps.immutableEntry("bar", 1),
+          Maps.immutableEntry("bar", 2),
+          Maps.immutableEntry("foo", 3),
+          Maps.immutableEntry("bar", 3),
+          Maps.immutableEntry("cat", 2));
+    }
+
+    @Override
+    public Collection<Entry<String, Integer>> create(Object... elements) {
+      Multimap<String, Integer> multimap = createMultimap();
+      for (Object element : elements) {
+        @SuppressWarnings("unchecked")
+        Entry<String, Integer> entry = (Entry<String, Integer>) element;
+        multimap.put(entry.getKey(), entry.getValue());
+      }
+      return multimap.entries();
+    }
+
+    abstract Multimap<String, Integer> createMultimap();
+
+    @Override
+    @SuppressWarnings("unchecked")
+    public Entry<String, Integer>[] createArray(int length) {
+      return (Entry<String, Integer>[]) new Entry<?, ?>[length];
+    }
+
+    @Override
+    public List<Entry<String, Integer>> order(
+        List<Entry<String, Integer>> insertionOrder) {
+      return insertionOrder;
+    }
+  }
+
+  public static abstract class TestEntriesListGenerator
+      extends TestEntriesGenerator
+      implements TestListGenerator<Entry<String, Integer>> {
+    @Override public List<Entry<String, Integer>> create(Object... elements) {
+      return (List<Entry<String, Integer>>) super.create(elements);
+    }
+  }
+
+  private static abstract class TestEntrySetGenerator
+      extends TestEntriesGenerator {
+    @Override abstract SetMultimap<String, Integer> createMultimap();
+
+    @Override public Set<Entry<String, Integer>> create(Object... elements) {
+      return (Set<Entry<String, Integer>>) super.create(elements);
+    }
+  }
+
+  private static final Predicate<Map.Entry<Integer, String>> FILTER_GET_PREDICATE
+      = new Predicate<Map.Entry<Integer, String>>() {
+        @Override public boolean apply(Entry<Integer, String> entry) {
+          return !"badvalue".equals(entry.getValue()) && 55556 != entry.getKey();
+        }
+    };
+
+  private static final Predicate<Map.Entry<String, Integer>> FILTER_KEYSET_PREDICATE
+    = new Predicate<Map.Entry<String, Integer>>() {
+      @Override public boolean apply(Entry<String, Integer> entry) {
+        return !"badkey".equals(entry.getKey()) && 55556 != entry.getValue();
+      }
+  };
+
+  public static Test suite() {
+    TestSuite suite = new TestSuite();
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+          @Override protected Set<String> create(String[] elements) {
+            SetMultimap<Integer, String> multimap = HashMultimap.create();
+            populateMultimapForGet(multimap, elements);
+            return multimap.get(3);
+          }
+        })
+        .named("HashMultimap.get")
+        .withFeatures(COLLECTION_FEATURES)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+          @Override protected Set<String> create(String[] elements) {
+            SetMultimap<Integer, String> multimap
+                = LinkedHashMultimap.create();
+            populateMultimapForGet(multimap, elements);
+            return multimap.get(3);
+          }
+        })
+        .named("LinkedHashMultimap.get")
+        .withFeatures(COLLECTION_FEATURES_ORDER)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(
+        new TestStringSortedSetGenerator() {
+          @Override protected SortedSet<String> create(String[] elements) {
+            SortedSetMultimap<Integer, String> multimap =
+                TreeMultimap.create(Ordering.natural().nullsFirst(),
+                    Ordering.natural().nullsLast());
+            populateMultimapForGet(multimap, elements);
+            return multimap.get(3);
+          }
+        })
+        .named("TreeMultimap.get")
+        .withFeatures(COLLECTION_FEATURES_ORDER)
+        .createTestSuite());
+
+    suite.addTest(ListTestSuiteBuilder.using(new TestStringListGenerator() {
+          @Override protected List<String> create(String[] elements) {
+            ListMultimap<Integer, String> multimap
+                = ArrayListMultimap.create();
+            populateMultimapForGet(multimap, elements);
+            return multimap.get(3);
+          }
+        })
+        .named("ArrayListMultimap.get")
+        .withFeatures(LIST_FEATURES)
+        .createTestSuite());
+
+    suite.addTest(ListTestSuiteBuilder.using(new TestStringListGenerator() {
+          @Override protected List<String> create(String[] elements) {
+            ListMultimap<Integer, String> multimap
+                = Multimaps.synchronizedListMultimap(
+                ArrayListMultimap.<Integer, String>create());
+            populateMultimapForGet(multimap, elements);
+            return multimap.get(3);
+          }
+        })
+        .named("synchronized ArrayListMultimap.get")
+        .withFeatures(LIST_FEATURES)
+        .createTestSuite());
+
+    suite.addTest(ListTestSuiteBuilder.using(new TestStringListGenerator() {
+          @Override protected List<String> create(String[] elements) {
+            ListMultimap<Integer, String> multimap
+                = LinkedListMultimap.create();
+            populateMultimapForGet(multimap, elements);
+            return multimap.get(3);
+          }
+        })
+        .named("LinkedListMultimap.get")
+        .withFeatures(LIST_FEATURES)
+        .createTestSuite());
+
+    suite.addTest(ListTestSuiteBuilder.using(new TestStringListGenerator() {
+          @Override protected List<String> create(String[] elements) {
+            ImmutableListMultimap.Builder<Integer, String> builder
+                = ImmutableListMultimap.builder();
+            ListMultimap<Integer, String> multimap
+                = builder.put(2, "foo")
+                .putAll(3, elements)
+                .build();
+            return multimap.get(3);
+          }
+        })
+        .named("ImmutableListMultimap.get")
+        .withFeatures(CollectionSize.ANY)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(
+        new TestStringSetGenerator() {
+          @Override protected Set<String> create(String[] elements) {
+            PopulatableMapAsMultimap<Integer, String> multimap
+                = PopulatableMapAsMultimap.create();
+            populateMultimapForGet(multimap, elements);
+            return multimap.build().get(3);
+          }
+        })
+        .named("Multimaps.forMap.get")
+        .withFeatures(FOR_MAP_FEATURES_ONE)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+          @Override protected Set<String> create(String[] elements) {
+            SetMultimap<Integer, String> multimap
+                = LinkedHashMultimap.create();
+            populateMultimapForGet(multimap, elements);
+            multimap.put(3, "badvalue");
+            multimap.put(55556, "foo");
+            return (Set<String>) Multimaps.filterEntries(multimap, FILTER_GET_PREDICATE).get(3);
+          }
+        })
+        .named("Multimaps.filterEntries.get")
+        .withFeatures(COLLECTION_FEATURES_ORDER)
+        .suppressing(CollectionIteratorTester.getIteratorKnownOrderRemoveSupportedMethod())
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+          @Override protected Set<String> create(String[] elements) {
+            Multimap<String, Integer> multimap = HashMultimap.create();
+            populateMultimapForKeySet(multimap, elements);
+            return multimap.keySet();
+          }
+        })
+        .named("HashMultimap.keySet")
+        .withFeatures(COLLECTION_FEATURES_REMOVE)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+          @Override protected Set<String> create(String[] elements) {
+            Multimap<String, Integer> multimap
+                = LinkedHashMultimap.create();
+            populateMultimapForKeySet(multimap, elements);
+            return multimap.keySet();
+          }
+        })
+        .named("LinkedHashMultimap.keySet")
+        .withFeatures(COLLECTION_FEATURES_REMOVE_ORDER)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(
+        new TestStringSortedSetGenerator() {
+          @Override protected SortedSet<String> create(String[] elements) {
+            TreeMultimap<String, Integer> multimap =
+                TreeMultimap.create(Ordering.natural().nullsFirst(),
+                    Ordering.natural().nullsLast());
+            populateMultimapForKeySet(multimap, elements);
+            return multimap.keySet();
+          }
+        })
+        .named("TreeMultimap.keySet")
+        .withFeatures(COLLECTION_FEATURES_REMOVE_ORDER)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+          @Override protected Set<String> create(String[] elements) {
+            Multimap<String, Integer> multimap
+                = ArrayListMultimap.create();
+            populateMultimapForKeySet(multimap, elements);
+            return multimap.keySet();
+          }
+        })
+        .named("ArrayListMultimap.keySet")
+        .withFeatures(COLLECTION_FEATURES_REMOVE)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+          @Override protected Set<String> create(String[] elements) {
+            Multimap<String, Integer> multimap
+                = LinkedListMultimap.create();
+            populateMultimapForKeySet(multimap, elements);
+            return multimap.keySet();
+          }
+        })
+        .named("LinkedListMultimap.keySet")
+        .withFeatures(COLLECTION_FEATURES_REMOVE_ORDER)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+          @Override protected Set<String> create(String[] elements) {
+            ImmutableListMultimap.Builder<String, Integer> builder
+                = ImmutableListMultimap.builder();
+            for (String element : elements) {
+              builder.put(element, 2);
+              builder.put(element, 3);
+            }
+            Multimap<String, Integer> multimap = builder.build();
+            return multimap.keySet();
+          }
+        })
+        .named("ImmutableListMultimap.keySet")
+        .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(
+        new TestStringSetGenerator() {
+          @Override protected Set<String> create(String[] elements) {
+            PopulatableMapAsMultimap<String, Integer> multimap
+                = PopulatableMapAsMultimap.create();
+            populateMultimapForKeySet(multimap, elements);
+            return multimap.build().keySet();
+          }
+        })
+        .named("Multimaps.forMap.keySet")
+        .withFeatures(FOR_MAP_FEATURES_ANY)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(
+        new TestStringSetGenerator() {
+        @Override protected Set<String> create(String[] elements) {
+          SetMultimap<String, Integer> multimap = LinkedHashMultimap.create();
+          populateMultimapForKeySet(multimap, elements);
+          multimap.put("badkey", 3);
+          multimap.put("a", 55556);
+          return Multimaps.filterEntries(multimap, FILTER_KEYSET_PREDICATE).keySet();
+          }
+        })
+        .named("Multimaps.filterEntries.keySet")
+        .withFeatures(COLLECTION_FEATURES_REMOVE_ORDER)
+        .suppressing(CollectionIteratorTester.getIteratorKnownOrderRemoveSupportedMethod())
+        .createTestSuite());
+
+    suite.addTest(CollectionTestSuiteBuilder.using(
+        new TestStringCollectionGenerator() {
+          @Override public Collection<String> create(String[] elements) {
+            Multimap<Integer, String> multimap = HashMultimap.create();
+            populateMultimapForValues(multimap, elements);
+            return multimap.values();
+          }
+        })
+        .named("HashMultimap.values")
+        .withFeatures(COLLECTION_FEATURES_REMOVE)
+        .createTestSuite());
+
+    suite.addTest(CollectionTestSuiteBuilder.using(
+        new TestStringCollectionGenerator() {
+          @Override public Collection<String> create(String[] elements) {
+            Multimap<Integer, String> multimap
+                = LinkedHashMultimap.create();
+            populateMultimapForValues(multimap, elements);
+            return multimap.values();
+          }
+        })
+        .named("LinkedHashMultimap.values")
+        .withFeatures(COLLECTION_FEATURES_REMOVE_ORDER)
+        .createTestSuite());
+
+    suite.addTest(CollectionTestSuiteBuilder.using(
+        new TestStringCollectionGenerator() {
+          @Override public Collection<String> create(String[] elements) {
+            Multimap<Integer, String> multimap
+                = TreeMultimap.create(Ordering.natural().nullsFirst(),
+                    Ordering.natural().nullsLast());
+            populateMultimapForValues(multimap, elements);
+            return multimap.values();
+          }
+        })
+        .named("TreeMultimap.values")
+        .withFeatures(COLLECTION_FEATURES_REMOVE)
+        .createTestSuite());
+
+    suite.addTest(CollectionTestSuiteBuilder.using(
+        new TestStringCollectionGenerator() {
+          @Override public Collection<String> create(String[] elements) {
+            Multimap<Integer, String> multimap
+                = ArrayListMultimap.create();
+            populateMultimapForValues(multimap, elements);
+            return multimap.values();
+          }
+        })
+        .named("ArrayListMultimap.values")
+        .withFeatures(COLLECTION_FEATURES_REMOVE)
+        .createTestSuite());
+
+    suite.addTest(ListTestSuiteBuilder.using(
+        new TestStringListGenerator() {
+          @Override public List<String> create(String[] elements) {
+            LinkedListMultimap<Integer, String> multimap
+                = LinkedListMultimap.create();
+            populateMultimapForValues(multimap, elements);
+            return multimap.values();
+          }
+        })
+        .named("LinkedListMultimap.values")
+        .withFeatures(LIST_FEATURES_REMOVE_SET)
+        .createTestSuite());
+
+    suite.addTest(CollectionTestSuiteBuilder.using(
+        new TestStringCollectionGenerator() {
+          @Override public Collection<String> create(String[] elements) {
+            ImmutableListMultimap.Builder<Integer, String> builder
+                = ImmutableListMultimap.builder();
+            for (int i = 0; i < elements.length; i++) {
+              builder.put(i % 2, elements[i]);
+            }
+            return builder.build().values();
+          }
+        })
+        .named("ImmutableListMultimap.values")
+        .withFeatures(CollectionSize.ANY)
+        .createTestSuite());
+
+    suite.addTest(CollectionTestSuiteBuilder.using(
+        new TestStringCollectionGenerator() {
+          @Override public Collection<String> create(String[] elements) {
+            Multimap<Integer, String> multimap
+                = LinkedHashMultimap.create();
+            populateMultimapForValues(multimap, elements);
+            multimap.put(3, "badvalue");
+            multimap.put(55556, "foo");
+            return Multimaps.filterEntries(multimap, FILTER_GET_PREDICATE).values();
+          }
+        })
+        .named("Multimaps.filterEntries.values")
+        .withFeatures(COLLECTION_FEATURES_REMOVE_ORDER)
+        .suppressing(CollectionIteratorTester.getIteratorKnownOrderRemoveSupportedMethod())
+        .createTestSuite());
+
+    // TODO: use collection testers on Multimaps.forMap.values
+
+    suite.addTest(MultisetTestSuiteBuilder.using(
+        new TestStringMultisetGenerator() {
+          @Override protected Multiset<String> create(String[] elements) {
+            Multimap<String, Integer> multimap = HashMultimap.create();
+            populateMultimapForKeys(multimap, elements);
+            return multimap.keys();
+          }
+        })
+        .named("HashMultimap.keys")
+        .withFeatures(COLLECTION_FEATURES_REMOVE)
+        .createTestSuite());
+
+    suite.addTest(MultisetTestSuiteBuilder.using(
+        new TestStringMultisetGenerator() {
+          @Override protected Multiset<String> create(String[] elements) {
+            Multimap<String, Integer> multimap
+                = LinkedHashMultimap.create();
+            populateMultimapForKeys(multimap, elements);
+            return multimap.keys();
+          }
+        })
+        .named("LinkedHashMultimap.keys")
+        .withFeatures(COLLECTION_FEATURES_REMOVE_ORDER)
+        .createTestSuite());
+
+    suite.addTest(MultisetTestSuiteBuilder.using(
+        new TestStringMultisetGenerator() {
+          @Override protected Multiset<String> create(String[] elements) {
+            Multimap<String, Integer> multimap
+                = TreeMultimap.create(Ordering.natural().nullsFirst(),
+                    Ordering.natural().nullsLast());
+            populateMultimapForKeys(multimap, elements);
+            return multimap.keys();
+          }
+
+          @Override public List<String> order(List<String> insertionOrder) {
+            Collections.sort(insertionOrder, Ordering.natural().nullsFirst());
+            return insertionOrder;
+          }
+        })
+        .named("TreeMultimap.keys")
+        .withFeatures(COLLECTION_FEATURES_REMOVE_ORDER)
+        .createTestSuite());
+
+    suite.addTest(MultisetTestSuiteBuilder.using(
+        new TestStringMultisetGenerator() {
+          @Override protected Multiset<String> create(String[] elements) {
+            Multimap<String, Integer> multimap
+                = ArrayListMultimap.create();
+            populateMultimapForKeys(multimap, elements);
+            return multimap.keys();
+          }
+        })
+        .named("ArrayListMultimap.keys")
+        .withFeatures(COLLECTION_FEATURES_REMOVE)
+        .createTestSuite());
+
+    suite.addTest(MultisetTestSuiteBuilder.using(
+        new TestStringMultisetGenerator() {
+          @Override protected Multiset<String> create(String[] elements) {
+            Multimap<String, Integer> multimap
+                = Multimaps.synchronizedListMultimap(
+                    ArrayListMultimap.<String, Integer>create());
+            populateMultimapForKeys(multimap, elements);
+            return multimap.keys();
+          }
+        })
+        .named("synchronized ArrayListMultimap.keys")
+        .withFeatures(COLLECTION_FEATURES_REMOVE)
+        .createTestSuite());
+
+    suite.addTest(MultisetTestSuiteBuilder.using(
+        new TestStringMultisetGenerator() {
+          @Override protected Multiset<String> create(String[] elements) {
+            Multimap<String, Integer> multimap
+                = LinkedListMultimap.create();
+            populateMultimapForKeys(multimap, elements);
+            return multimap.keys();
+          }
+        })
+        .named("LinkedListMultimap.keys")
+        .withFeatures(COLLECTION_FEATURES_REMOVE_ORDER)
+        .createTestSuite());
+
+    suite.addTest(MultisetTestSuiteBuilder.using(
+        new TestStringMultisetGenerator() {
+          @Override protected Multiset<String> create(String[] elements) {
+            ImmutableListMultimap.Builder<String, Integer> builder
+                = ImmutableListMultimap.builder();
+            for (int i = 0; i < elements.length; i++) {
+              builder.put(elements[i], i);
+            }
+            Multimap<String, Integer> multimap = builder.build();
+            return multimap.keys();
+          }
+        })
+        .named("ImmutableListMultimap.keys")
+        .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER)
+        .createTestSuite());
+
+    suite.addTest(MultisetTestSuiteBuilder.using(
+        new TestStringMultisetGenerator() {
+          @Override protected Multiset<String> create(String[] elements) {
+            PopulatableMapAsMultimap<String, Integer> multimap
+                = PopulatableMapAsMultimap.create();
+            populateMultimapForKeys(multimap, elements);
+            return multimap.build().keys();
+          }
+        })
+        .named("Multimaps.forMap.keys")
+        .withFeatures(FOR_MAP_FEATURES_ANY)
+        .suppressing(getReadsDuplicateInitializingMethods())
+        .suppressing(getSetCountDuplicateInitializingMethods())
+        .suppressing(getIteratorDuplicateInitializingMethods())
+        .createTestSuite());
+
+    suite.addTest(MultisetTestSuiteBuilder.using(
+        new TestStringMultisetGenerator() {
+        @Override protected Multiset<String> create(String[] elements) {
+          SetMultimap<String, Integer> multimap = LinkedHashMultimap.create();
+          populateMultimapForKeys(multimap, elements);
+          multimap.put("badkey", 3);
+          multimap.put("a", 55556);
+          return Multimaps.filterEntries(multimap, FILTER_KEYSET_PREDICATE).keys();
+          }
+        })
+        .named("Multimaps.filterEntries.keys")
+        .withFeatures(COLLECTION_FEATURES_REMOVE_ORDER)
+        .suppressing(CollectionIteratorTester.getIteratorKnownOrderRemoveSupportedMethod())
+        .suppressing(MultisetWritesTester.getEntrySetIteratorMethod())
+        .suppressing(getIteratorDuplicateInitializingMethods())
+        .createTestSuite());
+
+    suite.addTest(CollectionTestSuiteBuilder.using(
+        new TestEntrySetGenerator() {
+          @Override SetMultimap<String, Integer> createMultimap() {
+            return HashMultimap.create();
+          }
+        })
+        .named("HashMultimap.entries")
+        .withFeatures(CollectionSize.ANY, CollectionFeature.REMOVE_OPERATIONS)
+        .createTestSuite());
+
+    suite.addTest(CollectionTestSuiteBuilder.using(
+        new TestEntrySetGenerator() {
+          @Override SetMultimap<String, Integer> createMultimap() {
+            return LinkedHashMultimap.create();
+          }
+        })
+        .named("LinkedHashMultimap.entries")
+        .withFeatures(CollectionSize.ANY, CollectionFeature.REMOVE_OPERATIONS,
+            CollectionFeature.KNOWN_ORDER)
+        .createTestSuite());
+
+    suite.addTest(CollectionTestSuiteBuilder.using(
+        new TestEntrySetGenerator() {
+          @Override SetMultimap<String, Integer> createMultimap() {
+            return TreeMultimap.create(Ordering.natural().nullsFirst(),
+                Ordering.natural().nullsLast());
+          }
+        })
+        .named("TreeMultimap.entries")
+        .withFeatures(CollectionSize.ANY, CollectionFeature.REMOVE_OPERATIONS,
+            CollectionFeature.KNOWN_ORDER)
+        .createTestSuite());
+
+    suite.addTest(CollectionTestSuiteBuilder.using(
+        new TestEntriesGenerator() {
+          @Override Multimap<String, Integer> createMultimap() {
+            return ArrayListMultimap.create();
+          }
+        })
+        .named("ArrayListMultimap.entries")
+        .withFeatures(CollectionSize.ANY, CollectionFeature.REMOVE_OPERATIONS)
+        .createTestSuite());
+
+    suite.addTest(CollectionTestSuiteBuilder.using(
+        new TestEntriesGenerator() {
+          @Override Multimap<String, Integer> createMultimap() {
+            return Multimaps.synchronizedListMultimap(
+                ArrayListMultimap.<String, Integer>create());
+          }
+        })
+        .named("synchronized ArrayListMultimap.entries")
+        .withFeatures(CollectionSize.ANY, CollectionFeature.REMOVE_OPERATIONS)
+        .createTestSuite());
+
+    suite.addTest(ListTestSuiteBuilder.using(
+        new TestEntriesListGenerator() {
+          @Override Multimap<String, Integer> createMultimap() {
+            return LinkedListMultimap.create();
+          }
+        })
+        .named("LinkedListMultimap.entries")
+        .withFeatures(CollectionSize.ANY, ListFeature.REMOVE_OPERATIONS,
+            CollectionFeature.KNOWN_ORDER)
+        .createTestSuite());
+
+    suite.addTest(CollectionTestSuiteBuilder.using(
+        new TestEntriesGenerator() {
+          @Override Multimap<String, Integer> createMultimap() {
+            return ImmutableListMultimap.of();
+          }
+
+          @Override public Collection<Entry<String, Integer>> create(
+              Object... elements) {
+            ImmutableListMultimap.Builder<String, Integer> builder
+                = ImmutableListMultimap.builder();
+            for (Object element : elements) {
+              @SuppressWarnings("unchecked")
+              Entry<String, Integer> entry = (Entry<String, Integer>) element;
+              builder.put(entry.getKey(), entry.getValue());
+            }
+            return builder.build().entries();
+          }
+        })
+        .named("ImmutableListMultimap.entries")
+        .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER)
+        .createTestSuite());
+
+    suite.addTest(CollectionTestSuiteBuilder.using(
+        new TestEntriesGenerator() {
+          @Override Multimap<String, Integer> createMultimap() {
+            Multimap<String, Integer> multimap = LinkedHashMultimap.create();
+            multimap.put("badkey", 3);
+            multimap.put("a", 55556);
+            return Multimaps.filterEntries(multimap, FILTER_KEYSET_PREDICATE);
+          }
+        })
+        .named("Multimap.filterEntries.entries")
+        .withFeatures(CollectionSize.ANY, CollectionFeature.REMOVE_OPERATIONS,
+            CollectionFeature.KNOWN_ORDER)
+        .suppressing(CollectionIteratorTester.getIteratorKnownOrderRemoveSupportedMethod())
+        .createTestSuite());
+
+    suite.addTest(ListTestSuiteBuilder.using(new TestStringListGenerator() {
+      @Override protected List<String> create(String[] elements) {
+        ListMultimap<Integer, String> multimap = ArrayListMultimap.create();
+        populateMultimapForGet(multimap, elements);
+        return Multimaps.transformValues(
+            multimap, Functions.<String> identity()).get(3);
+      }
+    }).named("Multimaps.transformValues[ListMultimap].get").withFeatures(
+        CollectionSize.ANY, CollectionFeature.ALLOWS_NULL_VALUES,
+        CollectionFeature.REMOVE_OPERATIONS,
+        ListFeature.SUPPORTS_REMOVE_WITH_INDEX).createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+      @Override protected Set<String> create(String[] elements) {
+        ListMultimap<String, Integer> multimap = ArrayListMultimap.create();
+        populateMultimapForKeySet(multimap, elements);
+        return Multimaps.transformValues(
+            multimap, Functions.<Integer> identity()).keySet();
+      }
+    }).named("Multimaps.transformValues[ListMultimap].keySet").withFeatures(
+        CollectionSize.ANY, CollectionFeature.ALLOWS_NULL_VALUES,
+        CollectionFeature.REMOVE_OPERATIONS).createTestSuite());
+
+    suite.addTest(MultisetTestSuiteBuilder.using(
+        new TestStringMultisetGenerator() {
+          @Override protected Multiset<String> create(String[] elements) {
+            ListMultimap<String, Integer> multimap
+                = ArrayListMultimap.create();
+            populateMultimapForKeys(multimap, elements);
+            return Multimaps.transformValues(
+                multimap, Functions.<Integer> identity()).keys();
+          }
+        })
+        .named("Multimaps.transform[ListMultimap].keys")
+        .withFeatures(COLLECTION_FEATURES_REMOVE)
+        .createTestSuite());
+
+    suite.addTest(
+        CollectionTestSuiteBuilder.using(new TestStringCollectionGenerator() {
+          @Override public Collection<String> create(String[] elements) {
+            ListMultimap<Integer, String> multimap = ArrayListMultimap.create();
+            populateMultimapForValues(multimap, elements);
+            return Multimaps.transformValues(
+                multimap, Functions.<String> identity()).values();
+          }
+        }).named("Multimaps.transformValues[ListMultimap].values").withFeatures(
+            COLLECTION_FEATURES_REMOVE).createTestSuite());
+
+    suite.addTest(CollectionTestSuiteBuilder.using(new TestEntriesGenerator() {
+      @Override public Collection<Entry<String, Integer>> create(
+          Object... elements) {
+        ListMultimap<String, Integer> multimap = ArrayListMultimap.create();
+        for (Object element : elements) {
+          @SuppressWarnings("unchecked")
+          Entry<String, Integer> entry = (Entry<String, Integer>) element;
+          multimap.put(entry.getKey(), entry.getValue());
+        }
+        return Multimaps.transformValues(
+            multimap, Functions.<Integer> identity()).entries();
+      }
+
+      @Override Multimap<String, Integer> createMultimap() {
+        return Multimaps.transformValues(
+            ArrayListMultimap.<String, Integer> create(),
+            Functions.<Integer> identity());
+      }
+    }).named("Multimaps.transformValues[ListMultimap].entries")
+        .withFeatures(CollectionSize.ANY, CollectionFeature.REMOVE_OPERATIONS)
+        .createTestSuite());
+
+    suite.addTest(
+        CollectionTestSuiteBuilder.using(new TestStringCollectionGenerator() {
+          @Override protected Collection<String> create(String[] elements) {
+            Multimap<Integer, String> multimap = ArrayListMultimap.create();
+            populateMultimapForGet(multimap, elements);
+            return Multimaps.transformValues(
+                multimap, Functions.<String> identity()).get(3);
+          }
+        }).named("Multimaps.transformValues[Multimap].get").withFeatures(
+            CollectionSize.ANY, CollectionFeature.ALLOWS_NULL_VALUES,
+            CollectionFeature.REMOVE_OPERATIONS).createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+      @Override protected Set<String> create(String[] elements) {
+        Multimap<String, Integer> multimap = ArrayListMultimap.create();
+        populateMultimapForKeySet(multimap, elements);
+        return Multimaps.transformValues(
+            multimap, Functions.<Integer> identity()).keySet();
+      }
+    }).named("Multimaps.transformValues[Multimap].keySet").withFeatures(
+        COLLECTION_FEATURES_REMOVE).createTestSuite());
+
+    suite.addTest(MultisetTestSuiteBuilder.using(
+        new TestStringMultisetGenerator() {
+          @Override protected Multiset<String> create(String[] elements) {
+            Multimap<String, Integer> multimap
+                = ArrayListMultimap.create();
+            populateMultimapForKeys(multimap, elements);
+            return Multimaps.transformValues(
+                multimap, Functions.<Integer> identity()).keys();
+          }
+        })
+        .named("Multimaps.transformValues[Multimap].keys")
+        .withFeatures(COLLECTION_FEATURES_REMOVE)
+        .createTestSuite());
+
+    suite.addTest(
+        CollectionTestSuiteBuilder.using(new TestStringCollectionGenerator() {
+          @Override public Collection<String> create(String[] elements) {
+            Multimap<Integer, String> multimap = ArrayListMultimap.create();
+            populateMultimapForValues(multimap, elements);
+            return Multimaps.transformValues(
+                multimap, Functions.<String> identity()).values();
+          }
+        }).named("Multimaps.transformValues[Multimap].values").withFeatures(
+            COLLECTION_FEATURES_REMOVE).createTestSuite());
+
+    suite.addTest(CollectionTestSuiteBuilder.using(new TestEntriesGenerator() {
+      @Override public Collection<Entry<String, Integer>> create(
+          Object... elements) {
+        Multimap<String, Integer> multimap = ArrayListMultimap.create();
+        for (Object element : elements) {
+          @SuppressWarnings("unchecked")
+          Entry<String, Integer> entry = (Entry<String, Integer>) element;
+          multimap.put(entry.getKey(), entry.getValue());
+        }
+        return Multimaps.transformValues(
+            multimap, Functions.<Integer> identity()).entries();
+      }
+     @Override Multimap<String, Integer> createMultimap() {
+       return Multimaps.transformValues(
+           (Multimap<String, Integer>)
+                ArrayListMultimap.<String, Integer> create(),
+                Functions.<Integer> identity());
+      }
+    }).named("Multimaps.transformValues[Multimap].entries")
+        .withFeatures(CollectionSize.ANY, CollectionFeature.REMOVE_OPERATIONS)
+        .createTestSuite());
+
+    // TODO: use collection testers on Multimaps.forMap.entries
+
+    return suite;
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/MultimapsFilterEntriesAsMapTest.java b/guava-tests/test/com/google/common/collect/MultimapsFilterEntriesAsMapTest.java
new file mode 100644
index 0000000..2d78406
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/MultimapsFilterEntriesAsMapTest.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.base.Predicate;
+
+import java.util.Collection;
+import java.util.Map;
+import java.util.Map.Entry;
+
+/**
+ * Tests for Multimaps.filterEntries().asMap().
+ *
+ * @author Jared Levy
+ */
+@GwtIncompatible(value = "untested")
+public class MultimapsFilterEntriesAsMapTest
+    extends AbstractMultimapAsMapImplementsMapTest {
+  private static final Predicate<Map.Entry<String, Integer>> PREDICATE
+      = new Predicate<Map.Entry<String, Integer>>() {
+        @Override public boolean apply(Entry<String, Integer> entry) {
+          return !"badkey".equals(entry.getKey()) && 55556 != entry.getValue();
+        }
+      };
+
+  public MultimapsFilterEntriesAsMapTest() {
+    super(true, true, false);
+  }
+
+  private Multimap<String, Integer> createMultimap() {
+    Multimap<String, Integer> unfiltered = HashMultimap.create();
+    unfiltered.put("zero", 55556);
+    unfiltered.put("one", 55556);
+    unfiltered.put("badkey", 1);
+    return Multimaps.filterEntries(unfiltered, PREDICATE);
+  }
+
+  @Override protected Map<String, Collection<Integer>> makeEmptyMap() {
+    Multimap<String, Integer> multimap = createMultimap();
+    return multimap.asMap();
+  }
+
+  @Override protected Map<String, Collection<Integer>> makePopulatedMap() {
+    Multimap<String, Integer> multimap = createMultimap();
+    populate(multimap);
+    return multimap.asMap();
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/MultimapsTest.java b/guava-tests/test/com/google/common/collect/MultimapsTest.java
new file mode 100644
index 0000000..5ba5180
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/MultimapsTest.java
@@ -0,0 +1,887 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.collect.Maps.immutableEntry;
+import static com.google.common.collect.Sets.newHashSet;
+import static com.google.common.collect.testing.Helpers.nefariousMapEntry;
+import static com.google.common.collect.testing.IteratorFeature.MODIFIABLE;
+import static java.util.Arrays.asList;
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.base.Function;
+import com.google.common.base.Functions;
+import com.google.common.base.Supplier;
+import com.google.common.collect.Maps.EntryTransformer;
+import com.google.common.collect.testing.IteratorTester;
+import com.google.common.collect.testing.google.UnmodifiableCollectionTests;
+import com.google.common.testing.NullPointerTester;
+import com.google.common.testing.SerializableTester;
+
+import java.io.Serializable;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Queue;
+import java.util.RandomAccess;
+import java.util.Set;
+import java.util.SortedMap;
+import java.util.SortedSet;
+import java.util.TreeSet;
+
+import javax.annotation.Nullable;
+
+/**
+ * Unit test for {@code Multimaps}.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible(emulated = true)
+public class MultimapsTest extends AbstractMultimapTest {
+  private static final Comparator<Integer> INT_COMPARATOR =
+      Ordering.<Integer>natural().reverse().nullsFirst();
+
+  private static final EntryTransformer<Object, Object, Object> ALWAYS_NULL =
+      new EntryTransformer<Object, Object, Object>() {
+        @Override
+        public Object transformEntry(Object k, Object v1) {
+          return null;
+        }
+      };
+
+  @Override protected Multimap<String, Integer> create() {
+    return Multimaps.synchronizedSetMultimap(
+        HashMultimap.<String, Integer>create());
+  }
+
+  @SuppressWarnings("deprecation")
+  public void testUnmodifiableListMultimapShortCircuit(){
+    ListMultimap<String, Integer> mod = ArrayListMultimap.create();
+    ListMultimap<String, Integer> unmod = Multimaps.unmodifiableListMultimap(mod);
+    assertNotSame(mod, unmod);
+    assertSame(unmod, Multimaps.unmodifiableListMultimap(unmod));
+    ImmutableListMultimap<String, Integer> immutable =
+        ImmutableListMultimap.of("a", 1, "b", 2, "a", 3);
+    assertSame(immutable, Multimaps.unmodifiableListMultimap(immutable));
+    assertSame(
+        immutable, Multimaps.unmodifiableListMultimap((ListMultimap<String, Integer>) immutable));
+  }
+
+  @SuppressWarnings("deprecation")
+  public void testUnmodifiableSetMultimapShortCircuit(){
+    SetMultimap<String, Integer> mod = HashMultimap.create();
+    SetMultimap<String, Integer> unmod = Multimaps.unmodifiableSetMultimap(mod);
+    assertNotSame(mod, unmod);
+    assertSame(unmod, Multimaps.unmodifiableSetMultimap(unmod));
+    ImmutableSetMultimap<String, Integer> immutable =
+        ImmutableSetMultimap.of("a", 1, "b", 2, "a", 3);
+    assertSame(immutable, Multimaps.unmodifiableSetMultimap(immutable));
+    assertSame(
+        immutable, Multimaps.unmodifiableSetMultimap((SetMultimap<String, Integer>) immutable));
+  }
+
+  @SuppressWarnings("deprecation")
+  public void testUnmodifiableMultimapShortCircuit(){
+    Multimap<String, Integer> mod = HashMultimap.create();
+    Multimap<String, Integer> unmod = Multimaps.unmodifiableMultimap(mod);
+    assertNotSame(mod, unmod);
+    assertSame(unmod, Multimaps.unmodifiableMultimap(unmod));
+    ImmutableMultimap<String, Integer> immutable = ImmutableMultimap.of("a", 1, "b", 2, "a", 3);
+    assertSame(immutable, Multimaps.unmodifiableMultimap(immutable));
+    assertSame(immutable, Multimaps.unmodifiableMultimap((Multimap<String, Integer>) immutable));
+  }
+
+  @GwtIncompatible("slow (~10s)")
+  public void testUnmodifiableArrayListMultimap() {
+    checkUnmodifiableMultimap(
+        ArrayListMultimap.<String, Integer>create(), true);
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testSerializingUnmodifiableArrayListMultimap() {
+    Multimap<String, Integer> unmodifiable =
+        prepareUnmodifiableTests(ArrayListMultimap.<String, Integer>create(), true, null, null);
+    SerializableTester.reserializeAndAssert(unmodifiable);
+  }
+
+  public void testUnmodifiableArrayListMultimapRandomAccess() {
+    ListMultimap<String, Integer> delegate = ArrayListMultimap.create();
+    delegate.put("foo", 1);
+    delegate.put("foo", 3);
+    ListMultimap<String, Integer> multimap
+        = Multimaps.unmodifiableListMultimap(delegate);
+    assertTrue(multimap.get("foo") instanceof RandomAccess);
+    assertTrue(multimap.get("bar") instanceof RandomAccess);
+  }
+
+  public void testUnmodifiableLinkedListMultimapRandomAccess() {
+    ListMultimap<String, Integer> delegate = LinkedListMultimap.create();
+    delegate.put("foo", 1);
+    delegate.put("foo", 3);
+    ListMultimap<String, Integer> multimap
+        = Multimaps.unmodifiableListMultimap(delegate);
+    assertFalse(multimap.get("foo") instanceof RandomAccess);
+    assertFalse(multimap.get("bar") instanceof RandomAccess);
+  }
+
+  @GwtIncompatible("slow (~10s)")
+  public void testUnmodifiableHashMultimap() {
+    checkUnmodifiableMultimap(HashMultimap.<String, Integer>create(), false);
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testSerializingUnmodifiableHashMultimap() {
+    Multimap<String, Integer> unmodifiable =
+        prepareUnmodifiableTests(HashMultimap.<String, Integer>create(), false, null, null);
+    SerializableTester.reserializeAndAssert(unmodifiable);
+  }
+
+  @GwtIncompatible("slow (~10s)")
+  public void testUnmodifiableTreeMultimap() {
+    checkUnmodifiableMultimap(
+        TreeMultimap.<String, Integer>create(), false, "null", 42);
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testSerializingUnmodifiableTreeMultimap() {
+    Multimap<String, Integer> unmodifiable =
+        prepareUnmodifiableTests(TreeMultimap.<String, Integer>create(), false, "null", 42);
+    SerializableTester.reserializeAndAssert(unmodifiable);
+  }
+
+  @GwtIncompatible("slow (~10s)")
+  public void testUnmodifiableSynchronizedArrayListMultimap() {
+    checkUnmodifiableMultimap(Multimaps.synchronizedListMultimap(
+        ArrayListMultimap.<String, Integer>create()), true);
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testSerializingUnmodifiableSynchronizedArrayListMultimap() {
+    Multimap<String, Integer> unmodifiable =
+        prepareUnmodifiableTests(Multimaps.synchronizedListMultimap(
+          ArrayListMultimap.<String, Integer>create()), true, null, null);
+    SerializableTester.reserializeAndAssert(unmodifiable);
+  }
+
+  @GwtIncompatible("slow (~10s)")
+  public void testUnmodifiableSynchronizedHashMultimap() {
+    checkUnmodifiableMultimap(Multimaps.synchronizedSetMultimap(
+        HashMultimap.<String, Integer>create()), false);
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testSerializingUnmodifiableSynchronizedHashMultimap() {
+    Multimap<String, Integer> unmodifiable =
+        prepareUnmodifiableTests(Multimaps.synchronizedSetMultimap(
+        HashMultimap.<String, Integer>create()), false, null, null);
+    SerializableTester.reserializeAndAssert(unmodifiable);
+  }
+
+  @GwtIncompatible("slow (~10s)")
+  public void testUnmodifiableSynchronizedTreeMultimap() {
+    TreeMultimap<String, Integer> delegate
+        = TreeMultimap.create(Ordering.<String>natural(), INT_COMPARATOR);
+    SortedSetMultimap<String, Integer> multimap
+        = Multimaps.synchronizedSortedSetMultimap(delegate);
+    checkUnmodifiableMultimap(multimap, false, "null", 42);
+    assertSame(INT_COMPARATOR, multimap.valueComparator());
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testSerializingUnmodifiableSynchronizedTreeMultimap() {
+    TreeMultimap<String, Integer> delegate =
+        TreeMultimap.create(Ordering.<String>natural(), INT_COMPARATOR);
+    SortedSetMultimap<String, Integer> multimap =
+        Multimaps.synchronizedSortedSetMultimap(delegate);
+    Multimap<String, Integer> unmodifiable =
+        prepareUnmodifiableTests(multimap, false, "null", 42);
+    SerializableTester.reserializeAndAssert(unmodifiable);
+    assertSame(INT_COMPARATOR, multimap.valueComparator());
+  }
+
+  public void testUnmodifiableMultimapIsView() {
+    Multimap<String, Integer> mod = HashMultimap.create();
+    Multimap<String, Integer> unmod = Multimaps.unmodifiableMultimap(mod);
+    assertEquals(mod, unmod);
+    mod.put("foo", 1);
+    assertTrue(unmod.containsEntry("foo", 1));
+    assertEquals(mod, unmod);
+  }
+  
+  @SuppressWarnings("unchecked")
+  public void testUnmodifiableMultimapEntries() {
+    Multimap<String, Integer> mod = HashMultimap.create();
+    Multimap<String, Integer> unmod = Multimaps.unmodifiableMultimap(mod);
+    mod.put("foo", 1);
+    Entry<String, Integer> entry = unmod.entries().iterator().next();
+    try {
+      entry.setValue(2);
+      fail("UnsupportedOperationException expected");
+    } catch (UnsupportedOperationException expected) {}
+    entry = (Entry<String, Integer>) unmod.entries().toArray()[0];
+    try {
+      entry.setValue(2);
+      fail("UnsupportedOperationException expected");
+    } catch (UnsupportedOperationException expected) {}
+    Entry<String, Integer>[] array
+        = (Entry<String, Integer>[]) new Entry<?, ?>[2];
+    assertSame(array, unmod.entries().toArray(array));
+    try {
+      array[0].setValue(2);
+      fail("UnsupportedOperationException expected");
+    } catch (UnsupportedOperationException expected) {}
+    assertFalse(unmod.entries().contains(nefariousMapEntry("pwnd", 2)));
+    assertFalse(unmod.keys().contains("pwnd"));
+  }
+
+  /**
+   * The supplied multimap will be mutated and an unmodifiable instance used
+   * in its stead. The multimap must support null keys and values.
+   */
+  private static void checkUnmodifiableMultimap(
+      Multimap<String, Integer> multimap, boolean permitsDuplicates) {
+    checkUnmodifiableMultimap(multimap, permitsDuplicates, null, null);
+  }
+
+  /**
+   * The supplied multimap will be mutated and an unmodifiable instance used
+   * in its stead. If the multimap does not support null keys or values,
+   * alternatives may be specified for tests involving nulls.
+   */
+  private static void checkUnmodifiableMultimap(
+      Multimap<String, Integer> multimap, boolean permitsDuplicates,
+      @Nullable String nullKey, @Nullable Integer nullValue) {
+    Multimap<String, Integer> unmodifiable =
+        prepareUnmodifiableTests(multimap, permitsDuplicates, nullKey, nullValue);
+
+    UnmodifiableCollectionTests.assertMultimapIsUnmodifiable(
+        unmodifiable, "test", 123);
+
+    assertUnmodifiableIterableInTandem(
+        unmodifiable.keys(), multimap.keys());
+
+    assertUnmodifiableIterableInTandem(
+        unmodifiable.keySet(), multimap.keySet());
+
+    assertUnmodifiableIterableInTandem(
+        unmodifiable.entries(), multimap.entries());
+
+    assertUnmodifiableIterableInTandem(
+        unmodifiable.asMap().entrySet(), multimap.asMap().entrySet());
+
+    assertEquals(multimap.toString(), unmodifiable.toString());
+    assertEquals(multimap.hashCode(), unmodifiable.hashCode());
+    assertEquals(multimap, unmodifiable);
+
+    ASSERT.that(unmodifiable.asMap().get("bar")).hasContentsAnyOrder(5, -1);
+    assertNull(unmodifiable.asMap().get("missing"));
+
+    assertFalse(unmodifiable.entries() instanceof Serializable);
+    assertFalse(unmodifiable.asMap().values() instanceof Serializable);
+  }
+
+  /**
+   * Prepares the multimap for unmodifiable tests, returning an unmodifiable view
+   * of the map.
+   */
+  private static Multimap<String, Integer> prepareUnmodifiableTests(
+      Multimap<String, Integer> multimap, boolean permitsDuplicates,
+      @Nullable String nullKey, @Nullable Integer nullValue) {
+    multimap.clear();
+    multimap.put("foo", 1);
+    multimap.put("foo", 2);
+    multimap.put("foo", 3);
+    multimap.put("bar", 5);
+    multimap.put("bar", -1);
+    multimap.put(nullKey, nullValue);
+    multimap.put("foo", nullValue);
+    multimap.put(nullKey, 5);
+    multimap.put("foo", 2);
+
+    if (permitsDuplicates) {
+      assertEquals(9, multimap.size());
+    } else {
+      assertEquals(8, multimap.size());
+    }
+
+    Multimap<String, Integer> unmodifiable;
+    if (multimap instanceof SortedSetMultimap) {
+      unmodifiable = Multimaps.unmodifiableSortedSetMultimap(
+          (SortedSetMultimap<String, Integer>) multimap);
+    } else if (multimap instanceof SetMultimap) {
+      unmodifiable = Multimaps.unmodifiableSetMultimap(
+          (SetMultimap<String, Integer>) multimap);
+    } else if (multimap instanceof ListMultimap) {
+      unmodifiable = Multimaps.unmodifiableListMultimap(
+          (ListMultimap<String, Integer>) multimap);
+    } else {
+      unmodifiable = Multimaps.unmodifiableMultimap(multimap);
+    }
+    return unmodifiable;
+  }
+
+  private static <T> void assertUnmodifiableIterableInTandem(
+      Iterable<T> unmodifiable, Iterable<T> modifiable) {
+    UnmodifiableCollectionTests.assertIteratorIsUnmodifiable(
+        unmodifiable.iterator());
+    UnmodifiableCollectionTests.assertIteratorsInOrder(
+        unmodifiable.iterator(), modifiable.iterator());
+  }
+
+  public void testInvertFrom() {
+    ImmutableMultimap<Integer, String> empty = ImmutableMultimap.of();
+
+    // typical usage example - sad that ArrayListMultimap.create() won't work
+    Multimap<String, Integer> multimap = Multimaps.invertFrom(empty,
+        ArrayListMultimap.<String, Integer>create());
+    assertTrue(multimap.isEmpty());
+
+    ImmutableMultimap<Integer, String> single
+        = new ImmutableMultimap.Builder<Integer, String>()
+            .put(1, "one")
+            .put(2, "two")
+            .build();
+
+    // copy into existing multimap
+    assertSame(multimap, Multimaps.invertFrom(single, multimap));
+
+    ImmutableMultimap<String, Integer> expected
+        = new ImmutableMultimap.Builder<String, Integer>()
+        .put("one", 1)
+        .put("two", 2)
+        .build();
+
+    assertEquals(expected, multimap);
+  }
+
+  public void testForMap() {
+    Map<String, Integer> map = Maps.newHashMap();
+    map.put("foo", 1);
+    map.put("bar", 2);
+    Multimap<String, Integer> multimap = HashMultimap.create();
+    multimap.put("foo", 1);
+    multimap.put("bar", 2);
+    Multimap<String, Integer> multimapView = Multimaps.forMap(map);
+    assertTrue(multimap.equals(multimapView));
+    assertTrue(multimapView.equals(multimap));
+    assertTrue(multimapView.equals(multimapView));
+    assertFalse(multimapView.equals(map));
+    Multimap<String, Integer> multimap2 = HashMultimap.create();
+    multimap2.put("foo", 1);
+    assertFalse(multimapView.equals(multimap2));
+    multimap2.put("bar", 1);
+    assertFalse(multimapView.equals(multimap2));
+    ListMultimap<String, Integer> listMultimap
+        = new ImmutableListMultimap.Builder<String, Integer>()
+            .put("foo", 1).put("bar", 2).build();
+    assertFalse("SetMultimap equals ListMultimap",
+        multimapView.equals(listMultimap));
+    assertEquals(multimap.toString(), multimapView.toString());
+    assertEquals(multimap.hashCode(), multimapView.hashCode());
+    assertEquals(multimap.size(), multimapView.size());
+    assertTrue(multimapView.containsKey("foo"));
+    assertTrue(multimapView.containsValue(1));
+    assertTrue(multimapView.containsEntry("bar", 2));
+    assertEquals(Collections.singleton(1), multimapView.get("foo"));
+    assertEquals(Collections.singleton(2), multimapView.get("bar"));
+    try {
+      multimapView.put("baz", 3);
+      fail("UnsupportedOperationException expected");
+    } catch (UnsupportedOperationException expected) {}
+    try {
+      multimapView.putAll("baz", Collections.singleton(3));
+      fail("UnsupportedOperationException expected");
+    } catch (UnsupportedOperationException expected) {}
+    try {
+      multimapView.putAll(multimap);
+      fail("UnsupportedOperationException expected");
+    } catch (UnsupportedOperationException expected) {}
+    try {
+      multimapView.replaceValues("foo", Collections.<Integer>emptySet());
+      fail("UnsupportedOperationException expected");
+    } catch (UnsupportedOperationException expected) {}
+    multimapView.remove("bar", 2);
+    assertFalse(multimapView.containsKey("bar"));
+    assertFalse(map.containsKey("bar"));
+    assertEquals(map.keySet(), multimapView.keySet());
+    assertEquals(map.keySet(), multimapView.keys().elementSet());
+    ASSERT.that(multimapView.keys()).hasContentsAnyOrder("foo");
+    ASSERT.that(multimapView.values()).hasContentsAnyOrder(1);
+    ASSERT.that(multimapView.entries()).hasContentsAnyOrder(
+        Maps.immutableEntry("foo", 1));
+    ASSERT.that(multimapView.asMap().entrySet()).hasContentsAnyOrder(
+        Maps.immutableEntry(
+            "foo", (Collection<Integer>) Collections.singleton(1)));
+    multimapView.clear();
+    assertFalse(multimapView.containsKey("foo"));
+    assertFalse(map.containsKey("foo"));
+    assertTrue(map.isEmpty());
+    assertTrue(multimapView.isEmpty());
+    multimap.clear();
+    assertEquals(multimap.toString(), multimapView.toString());
+    assertEquals(multimap.hashCode(), multimapView.hashCode());
+    assertEquals(multimap.size(), multimapView.size());
+    assertEquals(multimapView, ArrayListMultimap.create());
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testForMapSerialization() {
+    Map<String, Integer> map = Maps.newHashMap();
+    map.put("foo", 1);
+    map.put("bar", 2);
+    Multimap<String, Integer> multimapView = Multimaps.forMap(map);
+    SerializableTester.reserializeAndAssert(multimapView);
+  }
+
+  public void testForMapRemoveAll() {
+    Map<String, Integer> map = Maps.newHashMap();
+    map.put("foo", 1);
+    map.put("bar", 2);
+    map.put("cow", 3);
+    Multimap<String, Integer> multimap = Multimaps.forMap(map);
+    assertEquals(3, multimap.size());
+    assertEquals(Collections.emptySet(), multimap.removeAll("dog"));
+    assertEquals(3, multimap.size());
+    assertTrue(multimap.containsKey("bar"));
+    assertEquals(Collections.singleton(2), multimap.removeAll("bar"));
+    assertEquals(2, multimap.size());
+    assertFalse(multimap.containsKey("bar"));
+  }
+
+  public void testForMapAsMap() {
+    Map<String, Integer> map = Maps.newHashMap();
+    map.put("foo", 1);
+    map.put("bar", 2);
+    Map<String, Collection<Integer>> asMap = Multimaps.forMap(map).asMap();
+    assertEquals(Collections.singleton(1), asMap.get("foo"));
+    assertNull(asMap.get("cow"));
+    assertTrue(asMap.containsKey("foo"));
+    assertFalse(asMap.containsKey("cow"));
+
+    Set<Entry<String, Collection<Integer>>> entries = asMap.entrySet();
+    assertFalse(entries.contains(4.5));
+    assertFalse(entries.remove(4.5));
+    assertFalse(entries.contains(Maps.immutableEntry("foo",
+        Collections.singletonList(1))));
+    assertFalse(entries.remove(Maps.immutableEntry("foo",
+        Collections.singletonList(1))));
+    assertFalse(entries.contains(Maps.immutableEntry("foo",
+        Sets.newLinkedHashSet(asList(1, 2)))));
+    assertFalse(entries.remove(Maps.immutableEntry("foo",
+        Sets.newLinkedHashSet(asList(1, 2)))));
+    assertFalse(entries.contains(Maps.immutableEntry("foo",
+        Collections.singleton(2))));
+    assertFalse(entries.remove(Maps.immutableEntry("foo",
+        Collections.singleton(2))));
+    assertTrue(map.containsKey("foo"));
+    assertTrue(entries.contains(Maps.immutableEntry("foo",
+        Collections.singleton(1))));
+    assertTrue(entries.remove(Maps.immutableEntry("foo",
+        Collections.singleton(1))));
+    assertFalse(map.containsKey("foo"));
+  }
+
+  public void testForMapGetIteration() {
+    IteratorTester<Integer> tester =
+        new IteratorTester<Integer>(4, MODIFIABLE, newHashSet(1),
+            IteratorTester.KnownOrder.KNOWN_ORDER) {
+          private Multimap<String, Integer> multimap;
+
+          @Override protected Iterator<Integer> newTargetIterator() {
+            Map<String, Integer> map = Maps.newHashMap();
+            map.put("foo", 1);
+            map.put("bar", 2);
+            multimap = Multimaps.forMap(map);
+            return multimap.get("foo").iterator();
+          }
+
+          @Override protected void verify(List<Integer> elements) {
+            assertEquals(newHashSet(elements), multimap.get("foo"));
+          }
+        };
+
+    tester.ignoreSunJavaBug6529795();
+    tester.test();
+  }
+
+  private enum Color {BLUE, RED, YELLOW, GREEN}
+
+  private static abstract class CountingSupplier<E>
+      implements Supplier<E>, Serializable {
+    int count;
+
+    abstract E getImpl();
+
+    @Override
+    public E get() {
+      count++;
+      return getImpl();
+    }
+  }
+
+  private static class QueueSupplier extends CountingSupplier<Queue<Integer>> {
+    @Override public Queue<Integer> getImpl() {
+      return new LinkedList<Integer>();
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  public void testNewMultimap() {
+    // The ubiquitous EnumArrayBlockingQueueMultimap
+    CountingSupplier<Queue<Integer>> factory = new QueueSupplier();
+
+    Map<Color, Collection<Integer>> map = Maps.newEnumMap(Color.class);
+    Multimap<Color, Integer> multimap = Multimaps.newMultimap(map, factory);
+    assertEquals(0, factory.count);
+    multimap.putAll(Color.BLUE, asList(3, 1, 4));
+    assertEquals(1, factory.count);
+    multimap.putAll(Color.RED, asList(2, 7, 1, 8));
+    assertEquals(2, factory.count);
+    assertEquals("[3, 1, 4]", multimap.get(Color.BLUE).toString());
+
+    Multimap<Color, Integer> ummodifiable =
+        Multimaps.unmodifiableMultimap(multimap);
+    assertEquals("[3, 1, 4]", ummodifiable.get(Color.BLUE).toString());
+
+    Collection<Integer> collection = multimap.get(Color.BLUE);
+    assertEquals(collection, collection);
+
+    assertFalse(multimap.keySet() instanceof SortedSet);
+    assertFalse(multimap.asMap() instanceof SortedMap);
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testNewMultimapSerialization() {
+    CountingSupplier<Queue<Integer>> factory = new QueueSupplier();
+    Map<Color, Collection<Integer>> map = Maps.newEnumMap(Color.class);
+    Multimap<Color, Integer> multimap = Multimaps.newMultimap(map, factory);
+    multimap.putAll(Color.BLUE, asList(3, 1, 4));
+    multimap.putAll(Color.RED, asList(2, 7, 1, 8));
+    SerializableTester.reserializeAndAssert(multimap);
+  }
+
+  private static class ListSupplier extends
+      CountingSupplier<LinkedList<Integer>> {
+    @Override public LinkedList<Integer> getImpl() {
+      return new LinkedList<Integer>();
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  public void testNewListMultimap() {
+    CountingSupplier<LinkedList<Integer>> factory = new ListSupplier();
+    Map<Color, Collection<Integer>> map = Maps.newTreeMap();
+    ListMultimap<Color, Integer> multimap =
+        Multimaps.newListMultimap(map, factory);
+    assertEquals(0, factory.count);
+    multimap.putAll(Color.BLUE, asList(3, 1, 4, 1));
+    assertEquals(1, factory.count);
+    multimap.putAll(Color.RED, asList(2, 7, 1, 8));
+    assertEquals(2, factory.count);
+    assertEquals("{BLUE=[3, 1, 4, 1], RED=[2, 7, 1, 8]}", multimap.toString());
+    assertFalse(multimap.get(Color.BLUE) instanceof RandomAccess);
+
+    assertTrue(multimap.keySet() instanceof SortedSet);
+    assertTrue(multimap.asMap() instanceof SortedMap);
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testNewListMultimapSerialization() {
+    CountingSupplier<LinkedList<Integer>> factory = new ListSupplier();
+    Map<Color, Collection<Integer>> map = Maps.newTreeMap();
+    ListMultimap<Color, Integer> multimap = Multimaps.newListMultimap(map, factory);
+    multimap.putAll(Color.BLUE, asList(3, 1, 4, 1));
+    multimap.putAll(Color.RED, asList(2, 7, 1, 8));
+    SerializableTester.reserializeAndAssert(multimap);
+  }
+
+  private static class SetSupplier extends CountingSupplier<HashSet<Integer>> {
+    @Override public HashSet<Integer> getImpl() {
+      return new HashSet<Integer>(4);
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  public void testNewSetMultimap() {
+    CountingSupplier<HashSet<Integer>> factory = new SetSupplier();
+    Map<Color, Collection<Integer>> map = Maps.newHashMap();
+    SetMultimap<Color, Integer> multimap =
+        Multimaps.newSetMultimap(map, factory);
+    assertEquals(0, factory.count);
+    multimap.putAll(Color.BLUE, asList(3, 1, 4));
+    assertEquals(1, factory.count);
+    multimap.putAll(Color.RED, asList(2, 7, 1, 8));
+    assertEquals(2, factory.count);
+    assertEquals(Sets.newHashSet(4, 3, 1), multimap.get(Color.BLUE));
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testNewSetMultimapSerialization() {
+    CountingSupplier<HashSet<Integer>> factory = new SetSupplier();
+    Map<Color, Collection<Integer>> map = Maps.newHashMap();
+    SetMultimap<Color, Integer> multimap = Multimaps.newSetMultimap(map, factory);
+    multimap.putAll(Color.BLUE, asList(3, 1, 4));
+    multimap.putAll(Color.RED, asList(2, 7, 1, 8));
+    SerializableTester.reserializeAndAssert(multimap);
+  }
+
+  private static class SortedSetSupplier extends
+      CountingSupplier<TreeSet<Integer>> {
+    @Override public TreeSet<Integer> getImpl() {
+      return Sets.newTreeSet(INT_COMPARATOR);
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  public void testNewSortedSetMultimap() {
+    CountingSupplier<TreeSet<Integer>> factory = new SortedSetSupplier();
+    Map<Color, Collection<Integer>> map = Maps.newEnumMap(Color.class);
+    SortedSetMultimap<Color, Integer> multimap =
+        Multimaps.newSortedSetMultimap(map, factory);
+    // newSortedSetMultimap calls the factory once to determine the comparator.
+    assertEquals(1, factory.count);
+    multimap.putAll(Color.BLUE, asList(3, 1, 4));
+    assertEquals(2, factory.count);
+    multimap.putAll(Color.RED, asList(2, 7, 1, 8));
+    assertEquals(3, factory.count);
+    assertEquals("[4, 3, 1]", multimap.get(Color.BLUE).toString());
+    assertEquals(INT_COMPARATOR, multimap.valueComparator());
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testNewSortedSetMultimapSerialization() {
+    CountingSupplier<TreeSet<Integer>> factory = new SortedSetSupplier();
+    Map<Color, Collection<Integer>> map = Maps.newEnumMap(Color.class);
+    SortedSetMultimap<Color, Integer> multimap = Multimaps.newSortedSetMultimap(map, factory);
+    multimap.putAll(Color.BLUE, asList(3, 1, 4));
+    multimap.putAll(Color.RED, asList(2, 7, 1, 8));
+    SerializableTester.reserializeAndAssert(multimap);
+    assertEquals(INT_COMPARATOR, multimap.valueComparator());
+  }
+
+  public void testIndex() {
+    final Multimap<String, Object> stringToObject =
+        new ImmutableMultimap.Builder<String, Object>()
+            .put("1", 1)
+            .put("1", 1L)
+            .put("1", "1")
+            .put("2", 2)
+            .put("2", 2L)
+            .build();
+
+    ImmutableMultimap<String, Object> outputMap =
+        Multimaps.index(stringToObject.values(),
+            Functions.toStringFunction());
+    assertEquals(stringToObject, outputMap);
+  }
+
+  public void testIndexIterator() {
+    final Multimap<String, Object> stringToObject =
+        new ImmutableMultimap.Builder<String, Object>()
+            .put("1", 1)
+            .put("1", 1L)
+            .put("1", "1")
+            .put("2", 2)
+            .put("2", 2L)
+            .build();
+
+    ImmutableMultimap<String, Object> outputMap =
+        Multimaps.index(stringToObject.values().iterator(),
+            Functions.toStringFunction());
+    assertEquals(stringToObject, outputMap);
+  }
+
+  // NOTE: evil, never do this
+  private abstract static class IterableIterator<T>
+      extends ForwardingIterator<T> implements Iterable<T> {
+    @Override
+    public Iterator<T> iterator() {
+      return this;
+    }
+  }
+
+  @SuppressWarnings("deprecation") // that is the purpose of this test
+  public void testIndexIterableIterator() {
+    final Multimap<String, Object> stringToObject =
+        new ImmutableMultimap.Builder<String, Object>()
+            .put("1", 1)
+            .put("1", 1L)
+            .put("1", "1")
+            .put("2", 2)
+            .put("2", 2L)
+            .build();
+
+    IterableIterator<Object> iterIter = new IterableIterator<Object>() {
+      private final Iterator<Object> iterator = stringToObject.values().iterator();
+
+      public Iterator<Object> delegate() {
+        return iterator;
+      }
+    };
+
+    ImmutableMultimap<String, Object> outputMap =
+        Multimaps.index(iterIter, Functions.toStringFunction());
+    assertEquals(stringToObject, outputMap);
+  }
+
+  public void testIndex_ordering() {
+    final Multimap<Integer, String> expectedIndex =
+        new ImmutableListMultimap.Builder<Integer, String>()
+            .put(4, "Inky")
+            .put(6, "Blinky")
+            .put(5, "Pinky")
+            .put(5, "Pinky")
+            .put(5, "Clyde")
+            .build();
+
+    final List<String> badGuys =
+        Arrays.asList("Inky", "Blinky", "Pinky", "Pinky", "Clyde");
+    final Function<String, Integer> stringLengthFunction =
+        new Function<String, Integer>() {
+          @Override
+          public Integer apply(String input) {
+            return input.length();
+          }
+        };
+
+    Multimap<Integer, String> index =
+        Multimaps.index(badGuys, stringLengthFunction);
+
+    assertEquals(expectedIndex, index);
+  }
+
+  public void testIndex_nullValue() {
+    List<Integer> values = Arrays.asList(1, null);
+    try {
+      Multimaps.index(values, Functions.identity());
+      fail();
+    } catch (NullPointerException e) {}
+  }
+
+  public void testIndex_nullKey() {
+    List<Integer> values = Arrays.asList(1, 2);
+    try {
+      Multimaps.index(values, Functions.constant(null));
+      fail();
+    } catch (NullPointerException e) {}
+  }
+
+  @GwtIncompatible(value = "untested")
+  public void testTransformValues() {
+    SetMultimap<String, Integer> multimap =
+        ImmutableSetMultimap.of("a", 2, "b", -3, "b", 3, "a", 4, "c", 6);
+    Function<Integer, Integer> square = new Function<Integer, Integer>() {
+      @Override
+      public Integer apply(Integer in) {
+        return in * in;
+      }
+    };
+    Multimap<String, Integer> transformed =
+        Multimaps.transformValues(multimap, square);
+    ASSERT.that(transformed.entries()).hasContentsInOrder(immutableEntry("a", 4),
+        immutableEntry("a", 16), immutableEntry("b", 9), immutableEntry("b", 9),
+        immutableEntry("c", 36));
+  }
+
+  @GwtIncompatible(value = "untested")
+  public void testTransformValuesIsView() {
+    Multimap<String, String> multimap = LinkedListMultimap.create();
+    multimap.put("a", "a");
+    Multimap<String, Integer> transformed =
+        Multimaps.transformValues(multimap, new Function<String, Integer>() {
+
+          @Override public Integer apply(String str) {
+            return str.length();
+          }
+        });
+    Entry<String, String> entry = multimap.entries().iterator().next();
+    entry.setValue("bbb");
+    ASSERT.that(transformed.entries()).hasContentsInOrder(immutableEntry("a", 3));
+  }
+
+  @GwtIncompatible(value = "untested")
+  public void testTransformListValues() {
+    ListMultimap<String, Integer> multimap =
+        ImmutableListMultimap.of("a", 2, "b", -3, "b", 3, "a", 4, "c", 6);
+    Function<Integer, Integer> square = new Function<Integer, Integer>() {
+      @Override
+      public Integer apply(Integer in) {
+        return in * in;
+      }
+    };
+    ListMultimap<String, Integer> transformed =
+        Multimaps.transformValues(multimap, square);
+    ASSERT.that(transformed.entries()).hasContentsInOrder(immutableEntry("a", 4),
+        immutableEntry("a", 16), immutableEntry("b", 9), immutableEntry("b", 9),
+        immutableEntry("c", 36));
+  }
+
+  @GwtIncompatible(value = "untested")
+  public void testTransformEntries() {
+    SetMultimap<String, Integer> multimap =
+        ImmutableSetMultimap.of("a", 1, "a", 4, "b", -6);
+    EntryTransformer<String, Integer, String> transformer =
+        new EntryTransformer<String, Integer, String>() {
+          @Override
+          public String transformEntry(String key, Integer value) {
+            return (value >= 0) ? key : "no" + key;
+          }
+        };
+    Multimap<String, String> transformed =
+        Multimaps.transformEntries(multimap, transformer);
+    ASSERT.that(transformed.entries()).hasContentsInOrder(immutableEntry("a", "a"),
+        immutableEntry("a", "a"), immutableEntry("b", "nob"));
+  }
+
+  @GwtIncompatible(value = "untested")
+  public void testTransformListEntries() {
+    ListMultimap<String, Integer> multimap =
+        ImmutableListMultimap.of("a", 1, "a", 4, "b", 6, "a", 4);
+    EntryTransformer<String, Integer, String> transformer =
+        new EntryTransformer<String, Integer, String>() {
+          @Override
+          public String transformEntry(String key, Integer value) {
+            return key + value;
+          }
+        };
+    ListMultimap<String, String> transformed =
+        Multimaps.transformEntries(multimap, transformer);
+    assertEquals(
+        ImmutableListMultimap.of("a", "a1", "a", "a4", "a", "a4", "b", "b6"),
+        transformed);
+    assertEquals("{a=[a1, a4, a4], b=[b6]}", transformed.toString());
+  }
+
+  @GwtIncompatible("NullPointerTester")
+  public void testNullPointers() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.setDefault(Multimap.class, ImmutableMultimap.of());
+    tester.setDefault(ListMultimap.class, ImmutableListMultimap.of());
+    tester.setDefault(EntryTransformer.class, ALWAYS_NULL);
+    tester.ignore(Multimaps.class.getDeclaredMethod("index", Object.class, Function.class));
+    tester.testAllPublicStaticMethods(Multimaps.class);
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/MultimapsTransformValuesAsMapTest.java b/guava-tests/test/com/google/common/collect/MultimapsTransformValuesAsMapTest.java
new file mode 100644
index 0000000..1acd440
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/MultimapsTransformValuesAsMapTest.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Functions;
+
+import java.util.Collection;
+import java.util.Map;
+
+/**
+ * Tests for Multimaps.transformValues().asMap().
+ *
+ * @author Louis Wasserman
+ */
+@GwtCompatible
+public class MultimapsTransformValuesAsMapTest
+    extends AbstractMultimapAsMapImplementsMapTest {
+
+  public MultimapsTransformValuesAsMapTest() {
+    super(true, true, true);
+  }
+
+  @Override protected Map<String, Collection<Integer>> makeEmptyMap() {
+    return Multimaps.transformValues(
+        ArrayListMultimap.<String, Integer> create(),
+        Functions.<Integer> identity()).asMap();
+  }
+
+  @Override protected Map<String, Collection<Integer>> makePopulatedMap() {
+    ListMultimap<String, Integer> delegate = ArrayListMultimap.create();
+    populate(delegate);
+    return Multimaps
+        .transformValues(delegate, Functions.<Integer> identity()).asMap();
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/MultisetCollectionTest.java b/guava-tests/test/com/google/common/collect/MultisetCollectionTest.java
new file mode 100644
index 0000000..47a94d3
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/MultisetCollectionTest.java
@@ -0,0 +1,234 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.collect.testing.google.AbstractMultisetSetCountTester.getSetCountDuplicateInitializingMethods;
+import static com.google.common.collect.testing.google.MultisetIteratorTester.getIteratorDuplicateInitializingMethods;
+import static com.google.common.collect.testing.google.MultisetReadsTester.getReadsDuplicateInitializingMethods;
+import static java.util.Arrays.asList;
+
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.collect.testing.AnEnum;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.google.MultisetTestSuiteBuilder;
+import com.google.common.collect.testing.google.SortedMultisetTestSuiteBuilder;
+import com.google.common.collect.testing.google.TestEnumMultisetGenerator;
+import com.google.common.collect.testing.google.TestStringMultisetGenerator;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * Collection tests for {@link Multiset} implementations.
+ *
+ * @author Jared Levy
+ */
+@GwtIncompatible("suite") // TODO(cpovirk): set up collect/gwt/suites version
+public class MultisetCollectionTest extends TestCase {
+
+  public static Test suite() {
+    TestSuite suite = new TestSuite();
+
+    suite.addTest(MultisetTestSuiteBuilder.using(hashMultisetGenerator())
+        .withFeatures(CollectionSize.ANY,
+            CollectionFeature.ALLOWS_NULL_VALUES,
+            CollectionFeature.GENERAL_PURPOSE)
+        .named("HashMultiset")
+        .createTestSuite());
+
+    suite.addTest(MultisetTestSuiteBuilder.using(
+        unmodifiableMultisetGenerator())
+        .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .named("UnmodifiableTreeMultiset")
+        .createTestSuite());
+
+    suite.addTest(SortedMultisetTestSuiteBuilder
+        .using(new TestStringMultisetGenerator() {
+          @Override
+          protected Multiset<String> create(String[] elements) {
+            return TreeMultiset.create(Arrays.asList(elements));
+          }
+
+          @Override
+          public List<String> order(List<String> insertionOrder) {
+            return Ordering.natural().sortedCopy(insertionOrder);
+          }
+        })
+        .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER,
+            CollectionFeature.GENERAL_PURPOSE,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .named("TreeMultiset, Ordering.natural")
+        .createTestSuite());
+    
+
+    suite.addTest(SortedMultisetTestSuiteBuilder
+        .using(new TestStringMultisetGenerator() {
+          @Override
+          protected Multiset<String> create(String[] elements) {
+            Multiset<String> result = TreeMultiset.create(Ordering.natural().nullsFirst());
+            result.addAll(Arrays.asList(elements));
+            return result;
+          }
+
+          @Override
+          public List<String> order(List<String> insertionOrder) {
+            return Ordering.natural().nullsFirst().sortedCopy(insertionOrder);
+          }
+        })
+        .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER,
+            CollectionFeature.GENERAL_PURPOSE,
+            CollectionFeature.ALLOWS_NULL_VALUES)
+        .named("TreeMultiset, Ordering.natural.nullsFirst")
+        .createTestSuite());
+
+    suite.addTest(MultisetTestSuiteBuilder.using(forSetGenerator())
+        .withFeatures(CollectionSize.ANY, CollectionFeature.ALLOWS_NULL_VALUES,
+            CollectionFeature.REMOVE_OPERATIONS)
+        .suppressing(getReadsDuplicateInitializingMethods())
+        .suppressing(getSetCountDuplicateInitializingMethods())
+        .suppressing(getIteratorDuplicateInitializingMethods())
+        .named("ForSetMultiset")
+        .createTestSuite());
+
+    suite.addTest(MultisetTestSuiteBuilder.using(
+        concurrentMultisetGenerator())
+        .withFeatures(CollectionSize.ANY,
+            CollectionFeature.GENERAL_PURPOSE,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .named("ConcurrentHashMultiset")
+        .createTestSuite());
+
+    suite.addTest(MultisetTestSuiteBuilder.using(enumMultisetGenerator())
+        .withFeatures(CollectionSize.ANY,
+            CollectionFeature.KNOWN_ORDER,
+            CollectionFeature.GENERAL_PURPOSE,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .named("EnumMultiset")
+        .createTestSuite());
+
+    suite.addTest(MultisetTestSuiteBuilder.using(intersectionGenerator())
+        .withFeatures(CollectionSize.ANY,
+            CollectionFeature.ALLOWS_NULL_VALUES,
+            CollectionFeature.KNOWN_ORDER)
+        .named("IntersectionMultiset")
+        .createTestSuite());
+
+    suite.addTest(SortedMultisetTestSuiteBuilder.using(unmodifiableSortedMultisetGenerator())
+        .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .named("UnmodifiableSortedTreeMultiset")
+        .createTestSuite());
+
+    return suite;
+  }
+
+  private static TestStringMultisetGenerator hashMultisetGenerator() {
+    return new TestStringMultisetGenerator() {
+      @Override protected Multiset<String> create(String[] elements) {
+        return HashMultiset.create(asList(elements));
+      }
+    };
+  }
+
+  private static TestStringMultisetGenerator unmodifiableMultisetGenerator() {
+    return new TestStringMultisetGenerator() {
+      @Override protected Multiset<String> create(String[] elements) {
+        return Multisets.unmodifiableMultiset(
+            TreeMultiset.create(asList(elements)));
+      }
+      @Override public List<String> order(List<String> insertionOrder) {
+        Collections.sort(insertionOrder);
+        return insertionOrder;
+      }
+    };
+  }
+
+  private static TestStringMultisetGenerator unmodifiableSortedMultisetGenerator() {
+    return new TestStringMultisetGenerator() {
+      @Override protected Multiset<String> create(String[] elements) {
+        return Multisets.unmodifiableSortedMultiset(
+            TreeMultiset.create(asList(elements)));
+      }
+      @Override public List<String> order(List<String> insertionOrder) {
+        Collections.sort(insertionOrder);
+        return insertionOrder;
+      }
+    };
+  }
+
+  private static TestStringMultisetGenerator forSetGenerator() {
+    return new TestStringMultisetGenerator() {
+      @Override protected Multiset<String> create(String[] elements) {
+        return Multisets.forSet(Sets.newHashSet(elements));
+      }
+    };
+  }
+
+  private static TestStringMultisetGenerator concurrentMultisetGenerator() {
+    return new TestStringMultisetGenerator() {
+      @Override protected Multiset<String> create(String[] elements) {
+        return ConcurrentHashMultiset.create(asList(elements));
+      }
+    };
+  }
+
+  private static TestEnumMultisetGenerator enumMultisetGenerator() {
+    return new TestEnumMultisetGenerator() {
+      @Override protected Multiset<AnEnum> create(AnEnum[] elements) {
+        return (elements.length == 0)
+            ? EnumMultiset.create(AnEnum.class)
+            : EnumMultiset.create(asList(elements));
+      }
+    };
+  }
+
+  private static TestStringMultisetGenerator intersectionGenerator() {
+    return new TestStringMultisetGenerator() {
+      @Override protected Multiset<String> create(String[] elements) {
+        Multiset<String> multiset1 = LinkedHashMultiset.create();
+        Multiset<String> multiset2 = LinkedHashMultiset.create();
+        multiset1.add("only1");
+        multiset2.add("only2");
+        for (int i = 0; i < elements.length; i++) {
+          multiset1.add(elements[i]);
+          multiset2.add(elements[elements.length - 1 - i]);
+        }
+        if (elements.length > 0) {
+          multiset1.add(elements[0]);
+        }
+        if (elements.length > 1) {
+          /*
+           * When a test requests a multiset with duplicates, our plan of
+           * "add an extra item 0 to A and an extra item 1 to B" really means
+           * "add an extra item 0 to A and B," which isn't what we want.
+           */
+          if (!elements[0].equals(elements[1])) {
+            multiset2.add(elements[1], 2);
+          }
+        }
+        return Multisets.intersection(multiset1, multiset2);
+      }
+    };
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/MultisetsImmutableEntryTest.java b/guava-tests/test/com/google/common/collect/MultisetsImmutableEntryTest.java
new file mode 100644
index 0000000..4d4aadc
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/MultisetsImmutableEntryTest.java
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.collect.Multiset.Entry;
+
+import junit.framework.TestCase;
+
+import java.util.Collections;
+
+/**
+ * Tests for {@link Multisets#immutableEntry}.
+ *
+ * @author Mike Bostock
+ */
+@GwtCompatible
+public class MultisetsImmutableEntryTest extends TestCase {
+  private static final String NE = null;
+
+  private static <E> Entry<E> entry(final E element, final int count) {
+    return Multisets.immutableEntry(element, count);
+  }
+
+  private static <E> Entry<E> control(E element, int count) {
+    return HashMultiset.create(Collections.nCopies(count, element))
+        .entrySet().iterator().next();
+  }
+
+  public void testToString() {
+    assertEquals("foo", entry("foo", 1).toString());
+    assertEquals("bar x 2", entry("bar", 2).toString());
+  }
+
+  public void testToStringNull() {
+    assertEquals("null", entry(NE, 1).toString());
+    assertEquals("null x 2", entry(NE, 2).toString());
+  }
+
+  public void testEquals() {
+    assertEquals(control("foo", 1), entry("foo", 1));
+    assertEquals(control("bar", 2), entry("bar", 2));
+    assertFalse(control("foo", 1).equals(entry("foo", 2)));
+    assertFalse(entry("foo", 1).equals(control("bar", 1)));
+    assertFalse(entry("foo", 1).equals(new Object()));
+    assertFalse(entry("foo", 1).equals(null));
+  }
+
+  public void testEqualsNull() {
+    assertEquals(control(NE, 1), entry(NE, 1));
+    assertFalse(control(NE, 1).equals(entry(NE, 2)));
+    assertFalse(entry(NE, 1).equals(control("bar", 1)));
+    assertFalse(entry(NE, 1).equals(new Object()));
+    assertFalse(entry(NE, 1).equals(null));
+  }
+
+  public void testHashCode() {
+    assertEquals(control("foo", 1).hashCode(), entry("foo", 1).hashCode());
+    assertEquals(control("bar", 2).hashCode(), entry("bar", 2).hashCode());
+  }
+
+  public void testHashCodeNull() {
+    assertEquals(control(NE, 1).hashCode(), entry(NE, 1).hashCode());
+  }
+
+  public void testNegativeCount() {
+    try {
+      entry("foo", -1);
+      fail();
+    } catch (IllegalArgumentException expected) {}
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/MultisetsTest.java b/guava-tests/test/com/google/common/collect/MultisetsTest.java
new file mode 100644
index 0000000..214d736
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/MultisetsTest.java
@@ -0,0 +1,256 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static org.junit.contrib.truth.Truth.ASSERT;
+import static com.google.common.testing.SerializableTester.reserializeAndAssert;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+
+import junit.framework.TestCase;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.collect.testing.DerivedComparable;
+import com.google.common.testing.NullPointerTester;
+
+/**
+ * Tests for {@link Multisets}.
+ *
+ * @author Mike Bostock
+ * @author Jared Levy
+ * @author Louis Wasserman
+ */
+@GwtCompatible(emulated = true)
+public class MultisetsTest extends TestCase {
+
+  /* See MultisetsImmutableEntryTest for immutableEntry() tests. */
+
+  public void testForSet() {
+    Set<String> set = new HashSet<String>();
+    set.add("foo");
+    set.add("bar");
+    set.add(null);
+    Multiset<String> multiset = HashMultiset.create();
+    multiset.addAll(set);
+    Multiset<String> multisetView = Multisets.forSet(set);
+    assertTrue(multiset.equals(multisetView));
+    assertTrue(multisetView.equals(multiset));
+    assertEquals(multiset.toString(), multisetView.toString());
+    assertEquals(multiset.hashCode(), multisetView.hashCode());
+    assertEquals(multiset.size(), multisetView.size());
+    assertTrue(multisetView.contains("foo"));
+    assertEquals(set, multisetView.elementSet());
+    assertEquals(multisetView.elementSet(), set);
+    assertEquals(multiset.elementSet(), multisetView.elementSet());
+    assertEquals(multisetView.elementSet(), multiset.elementSet());
+    try {
+      multisetView.add("baz");
+      fail("UnsupportedOperationException expected");
+    } catch (UnsupportedOperationException expected) {}
+    try {
+      multisetView.addAll(Collections.singleton("baz"));
+      fail("UnsupportedOperationException expected");
+    } catch (UnsupportedOperationException expected) {}
+    try {
+      multisetView.elementSet().add("baz");
+      fail("UnsupportedOperationException expected");
+    } catch (UnsupportedOperationException expected) {}
+    try {
+      multisetView.elementSet().addAll(Collections.singleton("baz"));
+      fail("UnsupportedOperationException expected");
+    } catch (UnsupportedOperationException expected) {}
+    multisetView.remove("bar");
+    assertFalse(multisetView.contains("bar"));
+    assertFalse(set.contains("bar"));
+    assertEquals(set, multisetView.elementSet());
+    ASSERT.that(multisetView.elementSet()).hasContentsAnyOrder("foo", null);
+    ASSERT.that(multisetView.entrySet()).hasContentsAnyOrder(
+        Multisets.immutableEntry("foo", 1), Multisets.immutableEntry((String) null, 1));
+    multisetView.clear();
+    assertFalse(multisetView.contains("foo"));
+    assertFalse(set.contains("foo"));
+    assertTrue(set.isEmpty());
+    assertTrue(multisetView.isEmpty());
+    multiset.clear();
+    assertEquals(multiset.toString(), multisetView.toString());
+    assertEquals(multiset.hashCode(), multisetView.hashCode());
+    assertEquals(multiset.size(), multisetView.size());
+  }
+  
+  @GwtIncompatible("SerializableTester")
+  public void testForSetSerialization() {
+    Set<String> set = new HashSet<String>();
+    set.add("foo");
+    set.add("bar");
+    set.add(null);
+    Multiset<String> multiset = HashMultiset.create();
+    multiset.addAll(set);
+    Multiset<String> multisetView = Multisets.forSet(set);
+    assertTrue(multiset.equals(multisetView));
+    reserializeAndAssert(multisetView);
+  }
+
+  public void testNewTreeMultisetDerived() {
+    TreeMultiset<DerivedComparable> set = TreeMultiset.create();
+    assertTrue(set.isEmpty());
+    set.add(new DerivedComparable("foo"), 2);
+    set.add(new DerivedComparable("bar"), 3);
+    ASSERT.that(set).hasContentsInOrder(
+        new DerivedComparable("bar"), new DerivedComparable("bar"), new DerivedComparable("bar"),
+        new DerivedComparable("foo"), new DerivedComparable("foo"));
+  }
+
+  public void testNewTreeMultisetNonGeneric() {
+    TreeMultiset<LegacyComparable> set = TreeMultiset.create();
+    assertTrue(set.isEmpty());
+    set.add(new LegacyComparable("foo"), 2);
+    set.add(new LegacyComparable("bar"), 3);
+    ASSERT.that(set).hasContentsInOrder(new LegacyComparable("bar"),
+        new LegacyComparable("bar"), new LegacyComparable("bar"),
+        new LegacyComparable("foo"), new LegacyComparable("foo"));
+  }
+
+  public void testNewTreeMultisetComparator() {
+    TreeMultiset<String> multiset
+        = TreeMultiset.create(Collections.reverseOrder());
+    multiset.add("bar", 3);
+    multiset.add("foo", 2);
+    ASSERT.that(multiset).hasContentsInOrder("foo", "foo", "bar", "bar", "bar");
+  }
+
+  public void testRetainOccurrencesEmpty() {
+    Multiset<String> multiset = HashMultiset.create();
+    Multiset<String> toRetain =
+        HashMultiset.create(Arrays.asList("a", "b", "a"));
+    assertFalse(Multisets.retainOccurrences(multiset, toRetain));
+    ASSERT.that(multiset).hasContentsInOrder();
+  }
+
+  public void testRemoveOccurrencesEmpty() {
+    Multiset<String> multiset = HashMultiset.create();
+    Multiset<String> toRemove =
+        HashMultiset.create(Arrays.asList("a", "b", "a"));
+    assertFalse(Multisets.retainOccurrences(multiset, toRemove));
+    assertTrue(multiset.isEmpty());
+  }
+
+  public void testIntersectEmptyNonempty() {
+    Multiset<String> ms1 = HashMultiset.create();
+    Multiset<String> ms2 = HashMultiset.create(Arrays.asList("a", "b", "a"));
+    ASSERT.that(Multisets.intersection(ms1, ms2)).hasContentsInOrder();
+  }
+
+  public void testIntersectNonemptyEmpty() {
+    Multiset<String> ms1 = HashMultiset.create(Arrays.asList("a", "b", "a"));
+    Multiset<String> ms2 = HashMultiset.create();
+    ASSERT.that(Multisets.intersection(ms1, ms2)).hasContentsInOrder();
+  }
+  
+  public void testContainsOccurrencesEmpty() {
+    Multiset<String> superMultiset = HashMultiset.create(Arrays.asList("a", "b", "a"));
+    Multiset<String> subMultiset = HashMultiset.create();
+    assertTrue(Multisets.containsOccurrences(superMultiset, subMultiset));
+    assertFalse(Multisets.containsOccurrences(subMultiset, superMultiset));
+  }
+
+  public void testContainsOccurrences() {
+    Multiset<String> superMultiset = HashMultiset.create(Arrays.asList("a", "b", "a"));
+    Multiset<String> subMultiset = HashMultiset.create(Arrays.asList("a", "b"));
+    assertTrue(Multisets.containsOccurrences(superMultiset, subMultiset));
+    assertFalse(Multisets.containsOccurrences(subMultiset, superMultiset));
+    Multiset<String> diffMultiset = HashMultiset.create(Arrays.asList("a", "b", "c"));
+    assertFalse(Multisets.containsOccurrences(superMultiset, diffMultiset));
+    assertTrue(Multisets.containsOccurrences(diffMultiset, subMultiset));
+  }
+  
+  public void testRetainEmptyOccurrences() {
+    Multiset<String> multiset =
+        HashMultiset.create(Arrays.asList("a", "b", "a"));
+    Multiset<String> toRetain = HashMultiset.create();
+    assertTrue(Multisets.retainOccurrences(multiset, toRetain));
+    assertTrue(multiset.isEmpty());
+  }
+
+  public void testRetainOccurrences() {
+    Multiset<String> multiset =
+        TreeMultiset.create(Arrays.asList("a", "b", "a", "c"));
+    Multiset<String> toRetain =
+        HashMultiset.create(Arrays.asList("a", "b", "b"));
+    assertTrue(Multisets.retainOccurrences(multiset, toRetain));
+    ASSERT.that(multiset).hasContentsInOrder("a", "b");
+  }
+
+  public void testRemoveEmptyOccurrences() {
+    Multiset<String> multiset =
+        TreeMultiset.create(Arrays.asList("a", "b", "a"));
+    Multiset<String> toRemove = HashMultiset.create();
+    assertFalse(Multisets.removeOccurrences(multiset, toRemove));
+    ASSERT.that(multiset).hasContentsInOrder("a", "a", "b");
+  }
+
+  public void testRemoveOccurrences() {
+    Multiset<String> multiset =
+        TreeMultiset.create(Arrays.asList("a", "b", "a", "c"));
+    Multiset<String> toRemove =
+        HashMultiset.create(Arrays.asList("a", "b", "b"));
+    assertTrue(Multisets.removeOccurrences(multiset, toRemove));
+    ASSERT.that(multiset).hasContentsInOrder("a", "c");
+  }
+
+  @SuppressWarnings("deprecation")
+  public void testUnmodifiableMultisetShortCircuit(){
+    Multiset<String> mod = HashMultiset.create();
+    Multiset<String> unmod = Multisets.unmodifiableMultiset(mod);
+    assertNotSame(mod, unmod);
+    assertSame(unmod, Multisets.unmodifiableMultiset(unmod));
+    ImmutableMultiset<String> immutable = ImmutableMultiset.of("a", "a", "b", "a");
+    assertSame(immutable, Multisets.unmodifiableMultiset(immutable));
+    assertSame(immutable, Multisets.unmodifiableMultiset((Multiset<String>) immutable));
+  }
+  
+  public void testHighestCountFirst() {
+    Multiset<String> multiset = HashMultiset.create(
+        Arrays.asList("a", "a", "a", "b", "c", "c"));
+    ImmutableMultiset<String> sortedMultiset = 
+        Multisets.copyHighestCountFirst(multiset);
+
+    ASSERT.that(sortedMultiset.entrySet()).hasContentsInOrder(
+        Multisets.immutableEntry("a", 3), Multisets.immutableEntry("c", 2),
+        Multisets.immutableEntry("b", 1));
+
+    ASSERT.that(sortedMultiset).hasContentsInOrder(
+        "a",
+        "a",
+        "a",
+        "c",
+        "c",
+        "b");
+    
+    ASSERT.that(Multisets.copyHighestCountFirst(ImmutableMultiset.of())).isEmpty();
+  }
+  
+  @GwtIncompatible("NullPointerTester")
+  public void testNullPointers() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.setDefault(Multiset.class, ImmutableMultiset.of());
+    tester.testAllPublicStaticMethods(Multisets.class);
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/MutableClassToInstanceMapTest.java b/guava-tests/test/com/google/common/collect/MutableClassToInstanceMapTest.java
new file mode 100644
index 0000000..b47a6af
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/MutableClassToInstanceMapTest.java
@@ -0,0 +1,152 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.collect.ImmutableClassToInstanceMapTest.TestClassToInstanceMapGenerator;
+import com.google.common.collect.testing.MapTestSuiteBuilder;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.MapFeature;
+import com.google.common.collect.testing.testers.MapPutTester;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import java.lang.reflect.Method;
+import java.util.Map;
+import java.util.Map.Entry;
+
+/**
+ * Unit test of {@link MutableClassToInstanceMap}.
+ *
+ * @author Kevin Bourrillion
+ */
+public class MutableClassToInstanceMapTest extends TestCase {
+  public static Test suite() {
+    TestSuite suite = new TestSuite();
+    suite.addTestSuite(MutableClassToInstanceMapTest.class);
+
+    // Suppress this one because the tester framework doesn't understand that
+    // *some* remappings will be allowed and others not.
+    Method remapTest = null;
+    try {
+      remapTest = MapPutTester.class.getMethod(
+          "testPut_replaceNullValueWithNonNullSupported");
+    } catch (NoSuchMethodException e) {
+      throw new AssertionError();
+    }
+
+    suite.addTest(MapTestSuiteBuilder
+        .using(new TestClassToInstanceMapGenerator() {
+          // Other tests will verify what real, warning-free usage looks like
+          // but here we have to do some serious fudging
+          @Override
+          @SuppressWarnings("unchecked")
+          public Map<Class, Number> create(Object... elements) {
+            MutableClassToInstanceMap<Number> map
+                = MutableClassToInstanceMap.create();
+            for (Object object : elements) {
+              Entry<Class, Number> entry = (Entry<Class, Number>) object;
+              map.putInstance(entry.getKey(), entry.getValue());
+            }
+            return (Map) map;
+          }
+        })
+        .named("MutableClassToInstanceMap")
+        .withFeatures(
+            MapFeature.GENERAL_PURPOSE,
+            MapFeature.RESTRICTS_KEYS,
+            MapFeature.ALLOWS_NULL_VALUES,
+            CollectionSize.ANY,
+            MapFeature.ALLOWS_NULL_QUERIES)
+        .suppressing(remapTest)
+        .createTestSuite());
+
+    return suite;
+  }
+
+  private ClassToInstanceMap<Number> map;
+
+  @Override protected void setUp() throws Exception {
+    map = MutableClassToInstanceMap.create();
+  }
+
+  public void testConstraint() {
+
+    /**
+     * We'll give ourselves a pass on testing all the possible ways of
+     * breaking the constraint, because we know that newClassMap() is
+     * implemented using ConstrainedMap which is itself well-tested.
+     * A purist would object to this, but what can I say, we're dirty
+     * cheaters.
+     */
+
+    map.put(Integer.class, new Integer(5));
+    try {
+      map.put(Double.class, new Long(42));
+      fail();
+    } catch (ClassCastException expected) {
+    }
+    // Won't compile: map.put(String.class, "x");
+  }
+
+  public void testPutAndGetInstance() {
+    assertNull(map.putInstance(Integer.class, new Integer(5)));
+
+    Integer oldValue = map.putInstance(Integer.class, new Integer(7));
+    assertEquals(5, (int) oldValue);
+
+    Integer newValue = map.getInstance(Integer.class);
+    assertEquals(7, (int) newValue);
+
+    // Won't compile: map.putInstance(Double.class, new Long(42));
+  }
+
+  public void testNull() {
+    try {
+      map.put(null, new Integer(1));
+      fail();
+    } catch (NullPointerException expected) {
+    }
+    map.putInstance(Integer.class, null);
+    assertNull(map.get(Integer.class));
+    assertNull(map.getInstance(Integer.class));
+
+    map.put(Long.class, null);
+    assertNull(map.get(Long.class));
+    assertNull(map.getInstance(Long.class));
+  }
+
+  public void testPrimitiveAndWrapper() {
+    assertNull(map.getInstance(int.class));
+    assertNull(map.getInstance(Integer.class));
+
+    assertNull(map.putInstance(int.class, 0));
+    assertNull(map.putInstance(Integer.class, 1));
+    assertEquals(2, map.size());
+
+    assertEquals(0, (int) map.getInstance(int.class));
+    assertEquals(1, (int) map.getInstance(Integer.class));
+
+    assertEquals(0, (int) map.putInstance(int.class, null));
+    assertEquals(1, (int) map.putInstance(Integer.class, null));
+
+    assertNull(map.getInstance(int.class));
+    assertNull(map.getInstance(Integer.class));
+    assertEquals(2, map.size());
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/NewCustomTableTest.java b/guava-tests/test/com/google/common/collect/NewCustomTableTest.java
new file mode 100644
index 0000000..a491b71
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/NewCustomTableTest.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Supplier;
+
+import java.util.Map;
+import java.util.TreeMap;
+
+/**
+ * Test cases for {@link Tables#newCustomTable}.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible
+public class NewCustomTableTest extends AbstractTableTest {
+
+  @Override protected Table<String, Integer, Character> create(
+      Object... data) {
+    Supplier<TreeMap<Integer, Character>> factory
+        = new Supplier<TreeMap<Integer, Character>>() {
+          @Override
+          public TreeMap<Integer, Character> get() {
+            return Maps.newTreeMap();
+          }
+        };
+    Map<String, Map<Integer, Character>> backingMap
+        = Maps.newLinkedHashMap();
+    Table<String, Integer, Character> table
+        = Tables.newCustomTable(backingMap, factory);
+    populate(table, data);
+    return table;
+  }
+
+  public void testRowKeySetOrdering() {
+    table = create("foo", 3, 'a', "bar", 1, 'b', "foo", 2, 'c');
+    ASSERT.that(table.rowKeySet()).hasContentsInOrder("foo", "bar");
+  }
+
+  public void testRowOrdering() {
+    table = create("foo", 3, 'a', "bar", 1, 'b', "foo", 2, 'c');
+    ASSERT.that(table.row("foo").keySet()).hasContentsInOrder(2, 3);
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/ObjectArraysTest.java b/guava-tests/test/com/google/common/collect/ObjectArraysTest.java
new file mode 100644
index 0000000..8fa1009
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/ObjectArraysTest.java
@@ -0,0 +1,200 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.testing.NullPointerTester;
+
+import junit.framework.TestCase;
+
+import java.io.Serializable;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Unit test for {@code ObjectArrays}.
+ *
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible(emulated = true)
+public class ObjectArraysTest extends TestCase {
+
+  @GwtIncompatible("NullPointerTester")
+  public void testNullPointerExceptions() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.testAllPublicStaticMethods(ObjectArrays.class);
+  }
+
+  @GwtIncompatible("ObjectArrays.newArray(Class, int)")
+  public void testNewArray_fromClass_Empty() {
+    String[] empty = ObjectArrays.newArray(String.class, 0);
+    assertEquals(String[].class, empty.getClass());
+    assertEquals(0, empty.length);
+  }
+
+  @GwtIncompatible("ObjectArrays.newArray(Class, int)")
+  public void testNewArray_fromClass_Nonempty() {
+    String[] array = ObjectArrays.newArray(String.class, 2);
+    assertEquals(String[].class, array.getClass());
+    assertEquals(2, array.length);
+    assertNull(array[0]);
+  }
+
+  @GwtIncompatible("ObjectArrays.newArray(Class, int)")
+  public void testNewArray_fromClass_OfArray() {
+    String[][] array = ObjectArrays.newArray(String[].class, 1);
+    assertEquals(String[][].class, array.getClass());
+    assertEquals(1, array.length);
+    assertNull(array[0]);
+  }
+
+  public void testNewArray_fromArray_Empty() {
+    String[] in = new String[0];
+    String[] empty = ObjectArrays.newArray(in, 0);
+    assertEquals(0, empty.length);
+  }
+
+  public void testNewArray_fromArray_Nonempty() {
+    String[] array = ObjectArrays.newArray(new String[0], 2);
+    assertEquals(String[].class, array.getClass());
+    assertEquals(2, array.length);
+    assertNull(array[0]);
+  }
+
+  public void testNewArray_fromArray_OfArray() {
+    String[][] array = ObjectArrays.newArray(new String[0][0], 1);
+    assertEquals(String[][].class, array.getClass());
+    assertEquals(1, array.length);
+    assertNull(array[0]);
+  }
+
+  @GwtIncompatible("ObjectArrays.concat(Object[], Object[], Class)")
+  public void testConcatEmptyEmpty() {
+    String[] result
+        = ObjectArrays.concat(new String[0], new String[0], String.class);
+    assertEquals(String[].class, result.getClass());
+    assertEquals(0, result.length);
+  }
+
+  @GwtIncompatible("ObjectArrays.concat(Object[], Object[], Class)")
+  public void testConcatEmptyNonempty() {
+    String[] result = ObjectArrays.concat(
+        new String[0], new String[] { "a", "b" }, String.class);
+    assertEquals(String[].class, result.getClass());
+    ASSERT.that(result).hasContentsInOrder("a", "b");
+  }
+
+  @GwtIncompatible("ObjectArrays.concat(Object[], Object[], Class)")
+  public void testConcatNonemptyEmpty() {
+    String[] result = ObjectArrays.concat(
+        new String[] { "a", "b" }, new String[0], String.class);
+    assertEquals(String[].class, result.getClass());
+    ASSERT.that(result).hasContentsInOrder("a", "b");
+  }
+
+  @GwtIncompatible("ObjectArrays.concat(Object[], Object[], Class)")
+  public void testConcatBasic() {
+    String[] result = ObjectArrays.concat(
+        new String[] { "a", "b" }, new String[] { "c", "d" }, String.class);
+    assertEquals(String[].class, result.getClass());
+    ASSERT.that(result).hasContentsInOrder("a", "b", "c", "d");
+  }
+
+  @GwtIncompatible("ObjectArrays.concat(Object[], Object[], Class)")
+  public void testConcatWithMoreGeneralType() {
+    Serializable[] result
+        = ObjectArrays.concat(new String[0], new String[0], Serializable.class);
+    assertEquals(Serializable[].class, result.getClass());
+  }
+
+  public void testToArrayImpl1() {
+    doTestToArrayImpl1(Lists.<Integer>newArrayList());
+    doTestToArrayImpl1(Lists.newArrayList(1));
+    doTestToArrayImpl1(Lists.newArrayList(1, null, 3));
+  }
+
+  private void doTestToArrayImpl1(List<Integer> list) {
+    Object[] reference = list.toArray();
+    Object[] target = ObjectArrays.toArrayImpl(list);
+    assertEquals(reference.getClass(), target.getClass());
+    assertTrue(Arrays.equals(reference, target));
+  }
+
+  public void testToArrayImpl2() {
+    doTestToArrayImpl2(Lists.<Integer>newArrayList(), new Integer[0], false);
+    doTestToArrayImpl2(Lists.<Integer>newArrayList(), new Integer[1], true);
+
+    doTestToArrayImpl2(Lists.newArrayList(1), new Integer[0], false);
+    doTestToArrayImpl2(Lists.newArrayList(1), new Integer[1], true);
+    doTestToArrayImpl2(Lists.newArrayList(1), new Integer[] { 2, 3 }, true);
+
+    doTestToArrayImpl2(Lists.newArrayList(1, null, 3), new Integer[0], false);
+    doTestToArrayImpl2(Lists.newArrayList(1, null, 3), new Integer[2], false);
+    doTestToArrayImpl2(Lists.newArrayList(1, null, 3), new Integer[3], true);
+  }
+
+  private void doTestToArrayImpl2(List<Integer> list, Integer[] array1,
+      boolean expectModify) {
+    Integer[] starting = Platform.clone(array1);
+    Integer[] array2 = Platform.clone(array1);
+    Object[] reference = list.toArray(array1);
+
+    Object[] target = ObjectArrays.toArrayImpl(list, array2);
+
+    assertEquals(reference.getClass(), target.getClass());
+    assertTrue(Arrays.equals(reference, target));
+    assertTrue(Arrays.equals(reference, target));
+
+    Object[] expectedArray1 = expectModify ? reference : starting;
+    Object[] expectedArray2 = expectModify ? target : starting;
+    assertTrue(Arrays.equals(expectedArray1, array1));
+    assertTrue(Arrays.equals(expectedArray2, array2));
+  }
+
+  public void testPrependZeroElements() {
+    String[] result = ObjectArrays.concat("foo", new String[] {});
+    ASSERT.that(result).hasContentsInOrder("foo");
+  }
+
+  public void testPrependOneElement() {
+    String[] result = ObjectArrays.concat("foo", new String[]{ "bar" });
+    ASSERT.that(result).hasContentsInOrder("foo", "bar");
+  }
+
+  public void testPrependTwoElements() {
+    String[] result = ObjectArrays.concat("foo", new String[]{ "bar", "baz" });
+    ASSERT.that(result).hasContentsInOrder("foo", "bar", "baz");
+  }
+
+  public void testAppendZeroElements() {
+    String[] result = ObjectArrays.concat(new String[] {}, "foo");
+    ASSERT.that(result).hasContentsInOrder("foo");
+  }
+
+  public void testAppendOneElement() {
+    String[] result = ObjectArrays.concat(new String[]{ "foo" }, "bar");
+    ASSERT.that(result).hasContentsInOrder("foo", "bar");
+  }
+
+  public void testAppendTwoElements() {
+    String[] result = ObjectArrays.concat(new String[]{ "foo", "bar" }, "baz");
+    ASSERT.that(result).hasContentsInOrder("foo", "bar", "baz");
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/OrderingTest.java b/guava-tests/test/com/google/common/collect/OrderingTest.java
new file mode 100644
index 0000000..142c8b9
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/OrderingTest.java
@@ -0,0 +1,894 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.collect.Lists.newArrayList;
+import static com.google.common.testing.SerializableTester.reserialize;
+import static com.google.common.testing.SerializableTester.reserializeAndAssert;
+import static java.util.Arrays.asList;
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.base.Function;
+import com.google.common.base.Functions;
+import com.google.common.collect.Ordering.ArbitraryOrdering;
+import com.google.common.collect.Ordering.IncomparableValueException;
+import com.google.common.collect.testing.Helpers;
+import com.google.common.testing.EqualsTester;
+import com.google.common.testing.NullPointerTester;
+
+import junit.framework.TestCase;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Random;
+import java.util.RandomAccess;
+
+import javax.annotation.Nullable;
+
+/**
+ * Unit tests for {@code Ordering}.
+ *
+ * @author Jesse Wilson
+ */
+@GwtCompatible(emulated = true)
+public class OrderingTest extends TestCase {
+  // TODO(cpovirk): some of these are inexplicably slow (20-30s) under GWT
+
+  private final Ordering<Number> numberOrdering = new NumberOrdering();
+
+  public void testNatural() {
+    Ordering<Integer> comparator = Ordering.natural();
+    Helpers.testComparator(comparator,
+        Integer.MIN_VALUE, -1, 0, 1, Integer.MAX_VALUE);
+    try {
+      comparator.compare(1, null);
+      fail();
+    } catch (NullPointerException expected) {}
+    try {
+      comparator.compare(null, 2);
+      fail();
+    } catch (NullPointerException expected) {}
+    try {
+      comparator.compare(null, null);
+      fail();
+    } catch (NullPointerException expected) {}
+    assertSame(comparator, reserialize(comparator));
+    assertEquals("Ordering.natural()", comparator.toString());
+  }
+
+  public void testFrom() {
+    Ordering<String> caseInsensitiveOrdering
+        = Ordering.from(String.CASE_INSENSITIVE_ORDER);
+    assertEquals(0, caseInsensitiveOrdering.compare("A", "a"));
+    assertTrue(caseInsensitiveOrdering.compare("a", "B") < 0);
+    assertTrue(caseInsensitiveOrdering.compare("B", "a") > 0);
+
+    @SuppressWarnings("deprecation") // test of deprecated method
+    Ordering<String> orderingFromOrdering =
+        Ordering.from(Ordering.<String>natural());
+    new EqualsTester()
+        .addEqualityGroup(caseInsensitiveOrdering, Ordering.from(String.CASE_INSENSITIVE_ORDER))
+        .addEqualityGroup(orderingFromOrdering, Ordering.natural())
+        .testEquals();
+  }
+
+  public void testExplicit_none() {
+    Comparator<Integer> c
+        = Ordering.explicit(Collections.<Integer>emptyList());
+    try {
+      c.compare(0, 0);
+      fail();
+    } catch (IncomparableValueException expected) {
+      assertEquals(0, expected.value);
+    }
+    reserializeAndAssert(c);
+  }
+
+  public void testExplicit_one() {
+    Comparator<Integer> c = Ordering.explicit(0);
+    assertEquals(0, c.compare(0, 0));
+    try {
+      c.compare(0, 1);
+      fail();
+    } catch (IncomparableValueException expected) {
+      assertEquals(1, expected.value);
+    }
+    reserializeAndAssert(c);
+    assertEquals("Ordering.explicit([0])", c.toString());
+  }
+
+  public void testExplicit_two() {
+    Comparator<Integer> c = Ordering.explicit(42, 5);
+    assertEquals(0, c.compare(5, 5));
+    assertTrue(c.compare(5, 42) > 0);
+    assertTrue(c.compare(42, 5) < 0);
+    try {
+      c.compare(5, 666);
+      fail();
+    } catch (IncomparableValueException expected) {
+      assertEquals(666, expected.value);
+    }
+    new EqualsTester()
+        .addEqualityGroup(c, Ordering.explicit(42, 5))
+        .addEqualityGroup(Ordering.explicit(5, 42))
+        .addEqualityGroup(Ordering.explicit(42))
+        .testEquals();
+    reserializeAndAssert(c);
+  }
+
+  public void testExplicit_sortingExample() {
+    Comparator<Integer> c
+        = Ordering.explicit(2, 8, 6, 1, 7, 5, 3, 4, 0, 9);
+    List<Integer> list = Arrays.asList(0, 3, 5, 6, 7, 8, 9);
+    Collections.sort(list, c);
+    ASSERT.that(list).hasContentsInOrder(8, 6, 7, 5, 3, 0, 9);
+    reserializeAndAssert(c);
+  }
+
+  public void testExplicit_withDuplicates() {
+    try {
+      Ordering.explicit(1, 2, 3, 4, 2);
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  // A more limited test than the one that follows, but this one uses the
+  // actual public API.
+  public void testArbitrary_withoutCollisions() {
+    List<Object> list = Lists.newArrayList();
+    for (int i = 0; i < 50; i++) {
+      list.add(new Object());
+    }
+
+    Ordering<Object> arbitrary = Ordering.arbitrary();
+    Collections.sort(list, arbitrary);
+
+    // Now we don't care what order it's put the list in, only that
+    // comparing any pair of elements gives the answer we expect.
+    Helpers.testComparator(arbitrary, list);
+
+    assertEquals("Ordering.arbitrary()", arbitrary.toString());
+  }
+
+  public void testArbitrary_withCollisions() {
+    List<Integer> list = Lists.newArrayList();
+    for (int i = 0; i < 50; i++) {
+      list.add(i);
+    }
+
+    Ordering<Object> arbitrary = new ArbitraryOrdering() {
+      @Override int identityHashCode(Object object) {
+        return ((Integer) object) % 5; // fake tons of collisions!
+      }
+    };
+
+    // Don't let the elements be in such a predictable order
+    list = shuffledCopy(list, new Random(1));
+
+    Collections.sort(list, arbitrary);
+
+    // Now we don't care what order it's put the list in, only that
+    // comparing any pair of elements gives the answer we expect.
+    Helpers.testComparator(arbitrary, list);
+  }
+
+  public void testUsingToString() {
+    Ordering<Object> ordering = Ordering.usingToString();
+    Helpers.testComparator(ordering, 1, 12, 124, 2);
+    assertEquals("Ordering.usingToString()", ordering.toString());
+    assertSame(ordering, reserialize(ordering));
+  }
+
+  // use an enum to get easy serializability
+  private enum CharAtFunction implements Function<String, Character> {
+    AT0(0),
+    AT1(1),
+    AT2(2),
+    AT3(3),
+    AT4(4),
+    AT5(5),
+    ;
+
+    final int index;
+    CharAtFunction(int index) {
+      this.index = index;
+    }
+    @Override
+    public Character apply(String string) {
+      return string.charAt(index);
+    }
+  }
+
+  private static Ordering<String> byCharAt(int index) {
+    return Ordering.natural().onResultOf(CharAtFunction.values()[index]);
+  }
+
+  public void testCompound_static() {
+    Comparator<String> comparator = Ordering.compound(asList(
+        byCharAt(0), byCharAt(1), byCharAt(2),
+        byCharAt(3), byCharAt(4), byCharAt(5)));
+    Helpers.testComparator(comparator, ImmutableList.of(
+        "applesauce",
+        "apricot",
+        "artichoke",
+        "banality",
+        "banana",
+        "banquet",
+        "tangelo",
+        "tangerine"));
+    reserializeAndAssert(comparator);
+  }
+
+  public void testCompound_instance() {
+    Comparator<String> comparator = byCharAt(1).compound(byCharAt(0));
+    Helpers.testComparator(comparator, ImmutableList.of(
+        "red",
+        "yellow",
+        "violet",
+        "blue",
+        "indigo",
+        "green",
+        "orange"));
+  }
+
+  public void testCompound_instance_generics() {
+    Ordering<Object> objects = Ordering.explicit((Object) 1);
+    Ordering<Number> numbers = Ordering.explicit((Number) 1);
+    Ordering<Integer> integers = Ordering.explicit(1);
+
+    // Like by like equals like
+    Ordering<Number> a = numbers.compound(numbers);
+
+    // The compound takes the more specific type of the two, regardless of order
+
+    Ordering<Number> b = numbers.compound(objects);
+    Ordering<Number> c = objects.compound(numbers);
+
+    Ordering<Integer> d = numbers.compound(integers);
+    Ordering<Integer> e = integers.compound(numbers);
+
+    // This works with three levels too (IDEA falsely reports errors as noted
+    // below. Both javac and eclipse handle these cases correctly.)
+
+    Ordering<Number> f = numbers.compound(objects).compound(objects); //bad IDEA
+    Ordering<Number> g = objects.compound(numbers).compound(objects);
+    Ordering<Number> h = objects.compound(objects).compound(numbers);
+
+    Ordering<Number> i = numbers.compound(objects.compound(objects));
+    Ordering<Number> j = objects.compound(numbers.compound(objects)); //bad IDEA
+    Ordering<Number> k = objects.compound(objects.compound(numbers));
+
+    // You can also arbitrarily assign a more restricted type - not an intended
+    // feature, exactly, but unavoidable (I think) and harmless
+    Ordering<Integer> l = objects.compound(numbers);
+
+    // This correctly doesn't work:
+    // Ordering<Object> m = numbers.compound(objects);
+
+    // Sadly, the following works in javac 1.6, but at least it fails for
+    // eclipse, and is *correctly* highlighted red in IDEA.
+    // Ordering<Object> n = objects.compound(numbers);
+  }
+
+  public void testReverse() {
+    Ordering<Number> reverseOrder = numberOrdering.reverse();
+    Helpers.testComparator(reverseOrder,
+        Integer.MAX_VALUE, 1, 0, -1, Integer.MIN_VALUE);
+
+    new EqualsTester()
+        .addEqualityGroup(reverseOrder, numberOrdering.reverse())
+        .addEqualityGroup(Ordering.natural().reverse())
+        .addEqualityGroup(Collections.reverseOrder())
+        .testEquals();
+  }
+
+  public void testReverseOfReverseSameAsForward() {
+    // Not guaranteed by spec, but it works, and saves us from testing
+    // exhaustively
+    assertSame(numberOrdering, numberOrdering.reverse().reverse());
+  }
+
+  private enum StringLengthFunction implements Function<String, Integer> {
+    StringLength;
+
+    @Override
+    public Integer apply(String string) {
+      return string.length();
+    }
+  }
+
+  private static final Ordering<Integer> DECREASING_INTEGER
+      = Ordering.natural().reverse();
+
+  public void testOnResultOf_natural() {
+    Comparator<String> comparator
+        = Ordering.natural().onResultOf(StringLengthFunction.StringLength);
+    assertTrue(comparator.compare("to", "be") == 0);
+    assertTrue(comparator.compare("or", "not") < 0);
+    assertTrue(comparator.compare("that", "to") > 0);
+
+    new EqualsTester()
+        .addEqualityGroup(
+            comparator,
+            Ordering.natural().onResultOf(StringLengthFunction.StringLength))
+        .addEqualityGroup(DECREASING_INTEGER)
+        .testEquals();
+    reserializeAndAssert(comparator);
+    assertEquals("Ordering.natural().onResultOf(StringLength)",
+        comparator.toString());
+  }
+
+  public void testOnResultOf_chained() {
+    Comparator<String> comparator = DECREASING_INTEGER.onResultOf(
+        StringLengthFunction.StringLength);
+    assertTrue(comparator.compare("to", "be") == 0);
+    assertTrue(comparator.compare("not", "or") < 0);
+    assertTrue(comparator.compare("to", "that") > 0);
+
+    new EqualsTester()
+        .addEqualityGroup(
+            comparator,
+            DECREASING_INTEGER.onResultOf(StringLengthFunction.StringLength))
+        .addEqualityGroup(
+            DECREASING_INTEGER.onResultOf(Functions.constant(1)))
+        .addEqualityGroup(Ordering.natural())
+        .testEquals();
+    reserializeAndAssert(comparator);
+    assertEquals("Ordering.natural().reverse().onResultOf(StringLength)",
+        comparator.toString());
+  }
+
+  @SuppressWarnings("unchecked") // dang varargs
+  public void testLexicographical() {
+    Ordering<String> ordering = Ordering.natural();
+    Ordering<Iterable<String>> lexy = ordering.lexicographical();
+
+    ImmutableList<String> empty = ImmutableList.of();
+    ImmutableList<String> a = ImmutableList.of("a");
+    ImmutableList<String> aa = ImmutableList.of("a", "a");
+    ImmutableList<String> ab = ImmutableList.of("a", "b");
+    ImmutableList<String> b = ImmutableList.of("b");
+
+    Helpers.testComparator(lexy, empty, a, aa, ab, b);
+  }
+
+  public void testNullsFirst() {
+    Ordering<Integer> ordering = Ordering.natural().nullsFirst();
+    Helpers.testComparator(ordering, null, Integer.MIN_VALUE, 0, 1);
+  }
+
+  public void testNullsLast() {
+    Ordering<Integer> ordering = Ordering.natural().nullsLast();
+    Helpers.testComparator(ordering, 0, 1, Integer.MAX_VALUE, null);
+  }
+
+  public void testBinarySearch() {
+    List<Integer> ints = Lists.newArrayList(0, 2, 3, 5, 7, 9);
+    assertEquals(4, numberOrdering.binarySearch(ints, 7));
+  }
+
+  public void testSortedCopy() {
+    List<Integer> unsortedInts = Collections.unmodifiableList(
+        Arrays.asList(5, 0, 3, null, 0, 9));
+    List<Integer> sortedInts =
+        numberOrdering.nullsLast().sortedCopy(unsortedInts);
+    assertEquals(Arrays.asList(0, 0, 3, 5, 9, null), sortedInts);
+
+    assertEquals(Collections.emptyList(),
+        numberOrdering.sortedCopy(Collections.<Integer>emptyList()));
+  }
+
+  public void testImmutableSortedCopy() {
+    ImmutableList<Integer> unsortedInts = ImmutableList.of(5, 3, 0, 9, 3);
+    ImmutableList<Integer> sortedInts
+        = numberOrdering.immutableSortedCopy(unsortedInts);
+    assertEquals(Arrays.asList(0, 3, 3, 5, 9), sortedInts);
+
+    assertEquals(Collections.<Integer>emptyList(),
+        numberOrdering.immutableSortedCopy(Collections.<Integer>emptyList()));
+
+    List<Integer> listWithNull = Arrays.asList(5, 3, null, 9);
+    try {
+      Ordering.natural().nullsFirst().immutableSortedCopy(listWithNull);
+      fail();
+    } catch (NullPointerException expected) {
+    }
+  }
+
+  public void testIsOrdered() {
+    assertFalse(numberOrdering.isOrdered(asList(5, 3, 0, 9)));
+    assertFalse(numberOrdering.isOrdered(asList(0, 5, 3, 9)));
+    assertTrue(numberOrdering.isOrdered(asList(0, 3, 5, 9)));
+    assertTrue(numberOrdering.isOrdered(asList(0, 0, 3, 3)));
+    assertTrue(numberOrdering.isOrdered(asList(0, 3)));
+    assertTrue(numberOrdering.isOrdered(Collections.singleton(1)));
+    assertTrue(numberOrdering.isOrdered(Collections.<Integer>emptyList()));
+  }
+
+  public void testIsStrictlyOrdered() {
+    assertFalse(numberOrdering.isStrictlyOrdered(asList(5, 3, 0, 9)));
+    assertFalse(numberOrdering.isStrictlyOrdered(asList(0, 5, 3, 9)));
+    assertTrue(numberOrdering.isStrictlyOrdered(asList(0, 3, 5, 9)));
+    assertFalse(numberOrdering.isStrictlyOrdered(asList(0, 0, 3, 3)));
+    assertTrue(numberOrdering.isStrictlyOrdered(asList(0, 3)));
+    assertTrue(numberOrdering.isStrictlyOrdered(Collections.singleton(1)));
+    assertTrue(numberOrdering.isStrictlyOrdered(
+        Collections.<Integer>emptyList()));
+  }
+
+  public void testLeastOf_emptyList_0() {
+    List<Integer> result = numberOrdering.leastOf(Arrays.<Integer>asList(), 0);
+    assertTrue(result instanceof RandomAccess);
+    assertListImmutable(result);
+    assertEquals(ImmutableList.<Integer>of(), result);
+  }
+
+  public void testLeastOf_emptyList_1() {
+    List<Integer> result = numberOrdering.leastOf(Arrays.<Integer>asList(), 1);
+    assertTrue(result instanceof RandomAccess);
+    assertListImmutable(result);
+    assertEquals(ImmutableList.<Integer>of(), result);
+  }
+
+  public void testLeastOf_simple_negativeOne() {
+    try {
+      numberOrdering.leastOf(Arrays.asList(3, 4, 5, -1), -1);
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  public void testLeastOf_singletonList_0() {
+    List<Integer> result = numberOrdering.leastOf(Arrays.asList(3), 0);
+    assertTrue(result instanceof RandomAccess);
+    assertListImmutable(result);
+    assertEquals(ImmutableList.<Integer>of(), result);
+  }
+
+  public void testLeastOf_simple_0() {
+    List<Integer> result = numberOrdering.leastOf(Arrays.asList(3, 4, 5, -1), 0);
+    assertTrue(result instanceof RandomAccess);
+    assertListImmutable(result);
+    assertEquals(ImmutableList.<Integer>of(), result);
+  }
+
+  public void testLeastOf_simple_1() {
+    List<Integer> result = numberOrdering.leastOf(Arrays.asList(3, 4, 5, -1), 1);
+    assertTrue(result instanceof RandomAccess);
+    assertListImmutable(result);
+    assertEquals(ImmutableList.of(-1), result);
+  }
+
+  public void testLeastOf_simple_nMinusOne() {
+    List<Integer> list = Arrays.asList(3, 4, 5, -1);
+    List<Integer> result = numberOrdering.leastOf(list, list.size() - 1);
+    assertTrue(result instanceof RandomAccess);
+    assertListImmutable(result);
+    assertEquals(ImmutableList.of(-1, 3, 4), result);
+  }
+
+  public void testLeastOf_simple_n() {
+    List<Integer> list = Arrays.asList(3, 4, 5, -1);
+    List<Integer> result = numberOrdering.leastOf(list, list.size());
+    assertTrue(result instanceof RandomAccess);
+    assertListImmutable(result);
+    assertEquals(ImmutableList.of(-1, 3, 4, 5), result);
+  }
+
+  public void testLeastOf_simple_nPlusOne() {
+    List<Integer> list = Arrays.asList(3, 4, 5, -1);
+    List<Integer> result = numberOrdering.leastOf(list, list.size() + 1);
+    assertTrue(result instanceof RandomAccess);
+    assertListImmutable(result);
+    assertEquals(ImmutableList.of(-1, 3, 4, 5), result);
+  }
+
+  public void testLeastOf_ties() {
+    Integer foo = new Integer(Integer.MAX_VALUE - 10);
+    Integer bar = new Integer(Integer.MAX_VALUE - 10);
+
+    assertNotSame(foo, bar);
+    assertEquals(foo, bar);
+
+    List<Integer> list = Arrays.asList(3, foo, bar, -1);
+    List<Integer> result = numberOrdering.leastOf(list, list.size());
+    assertEquals(ImmutableList.of(-1, 3, foo, bar), result);
+  }
+
+  @GwtIncompatible("slow")
+  public void testLeastOf_reconcileAgainstSortAndSublist() {
+    runLeastOfComparison(1000, 300, 20);
+  }
+
+  public void testLeastOf_reconcileAgainstSortAndSublistSmall() {
+    runLeastOfComparison(10, 30, 2);
+  }
+
+  private static void runLeastOfComparison(
+      int iterations, int elements, int seeds) {
+    Random random = new Random(42);
+    Ordering<Integer> ordering = Ordering.natural();
+
+    for (int i = 0; i < iterations; i++) {
+      List<Integer> list = Lists.newArrayList();
+      for (int j = 0; j < elements; j++) {
+        list.add(random.nextInt(10 * i + j + 1));
+      }
+
+      for (int seed = 1; seed < seeds; seed++) {
+        int k = random.nextInt(10 * seed);
+        assertEquals(ordering.sortedCopy(list).subList(0, k),
+            ordering.leastOf(list, k));
+      }
+    }
+  }
+
+  public void testGreatestOf_simple() {
+    /*
+     * If greatestOf() promised to be implemented as reverse().leastOf(), this
+     * test would be enough. It doesn't... but we'll cheat and act like it does
+     * anyway. There's a comment there to remind us to fix this if we change it.
+     */
+    List<Integer> list = Arrays.asList(3, 1, 3, 2, 4, 2, 4, 3);
+    assertEquals(Arrays.asList(4, 4, 3, 3), numberOrdering.greatestOf(list, 4));
+  }
+
+  private static void assertListImmutable(List<Integer> result) {
+    try {
+      result.set(0, 1);
+      fail();
+    } catch (UnsupportedOperationException expected) {
+      // pass
+    }
+  }
+
+  public void testIteratorMinAndMax() {
+    List<Integer> ints = Lists.newArrayList(5, 3, 0, 9);
+    assertEquals(9, (int) numberOrdering.max(ints.iterator()));
+    assertEquals(0, (int) numberOrdering.min(ints.iterator()));
+
+    // when the values are the same, the first argument should be returned
+    Integer a = new Integer(4);
+    Integer b = new Integer(4);
+    ints = Lists.newArrayList(a, b, b);
+    assertSame(a, numberOrdering.max(ints.iterator()));
+    assertSame(a, numberOrdering.min(ints.iterator()));
+  }
+
+  public void testIteratorMinExhaustsIterator() {
+    List<Integer> ints = Lists.newArrayList(9, 0, 3, 5);
+    Iterator<Integer> iterator = ints.iterator();
+    assertEquals(0, (int) numberOrdering.min(iterator));
+    assertFalse(iterator.hasNext());
+  }
+
+  public void testIteratorMaxExhaustsIterator() {
+    List<Integer> ints = Lists.newArrayList(9, 0, 3, 5);
+    Iterator<Integer> iterator = ints.iterator();
+    assertEquals(9, (int) numberOrdering.max(iterator));
+    assertFalse(iterator.hasNext());
+  }
+
+  public void testIterableMinAndMax() {
+    List<Integer> ints = Lists.newArrayList(5, 3, 0, 9);
+    assertEquals(9, (int) numberOrdering.max(ints));
+    assertEquals(0, (int) numberOrdering.min(ints));
+
+    // when the values are the same, the first argument should be returned
+    Integer a = new Integer(4);
+    Integer b = new Integer(4);
+    ints = Lists.newArrayList(a, b, b);
+    assertSame(a, numberOrdering.max(ints));
+    assertSame(a, numberOrdering.min(ints));
+  }
+
+  public void testVarargsMinAndMax() {
+    // try the min and max values in all positions, since some values are proper
+    // parameters and others are from the varargs array
+    assertEquals(9, (int) numberOrdering.max(9, 3, 0, 5, 8));
+    assertEquals(9, (int) numberOrdering.max(5, 9, 0, 3, 8));
+    assertEquals(9, (int) numberOrdering.max(5, 3, 9, 0, 8));
+    assertEquals(9, (int) numberOrdering.max(5, 3, 0, 9, 8));
+    assertEquals(9, (int) numberOrdering.max(5, 3, 0, 8, 9));
+    assertEquals(0, (int) numberOrdering.min(0, 3, 5, 9, 8));
+    assertEquals(0, (int) numberOrdering.min(5, 0, 3, 9, 8));
+    assertEquals(0, (int) numberOrdering.min(5, 3, 0, 9, 8));
+    assertEquals(0, (int) numberOrdering.min(5, 3, 9, 0, 8));
+    assertEquals(0, (int) numberOrdering.min(5, 3, 0, 9, 0));
+
+    // when the values are the same, the first argument should be returned
+    Integer a = new Integer(4);
+    Integer b = new Integer(4);
+    assertSame(a, numberOrdering.max(a, b, b));
+    assertSame(a, numberOrdering.min(a, b, b));
+  }
+
+  public void testParameterMinAndMax() {
+    assertEquals(5, (int) numberOrdering.max(3, 5));
+    assertEquals(5, (int) numberOrdering.max(5, 3));
+    assertEquals(3, (int) numberOrdering.min(3, 5));
+    assertEquals(3, (int) numberOrdering.min(5, 3));
+
+    // when the values are the same, the first argument should be returned
+    Integer a = new Integer(4);
+    Integer b = new Integer(4);
+    assertSame(a, numberOrdering.max(a, b));
+    assertSame(a, numberOrdering.min(a, b));
+  }
+
+  private static class NumberOrdering extends Ordering<Number> {
+    @Override public int compare(Number a, Number b) {
+      return ((Double) a.doubleValue()).compareTo(b.doubleValue());
+    }
+    @Override public int hashCode() {
+      return NumberOrdering.class.hashCode();
+    }
+    @Override public boolean equals(Object other) {
+      return other instanceof NumberOrdering;
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  /*
+   * Now we have monster tests that create hundreds of Orderings using different
+   * combinations of methods, then checks compare(), binarySearch() and so
+   * forth on each one.
+   */
+
+  // should periodically try increasing this, but it makes the test run long
+  private static final int RECURSE_DEPTH = 2;
+
+  public void testCombinationsExhaustively_startingFromNatural() {
+    testExhaustively(Ordering.<String>natural(), Arrays.asList("a", "b"));
+  }
+
+  public void testCombinationsExhaustively_startingFromExplicit() {
+    testExhaustively(Ordering.explicit("a", "b", "c", "d"),
+        Arrays.asList("b", "d"));
+  }
+
+  public void testCombinationsExhaustively_startingFromUsingToString() {
+    testExhaustively(Ordering.usingToString(), Arrays.asList(1, 12, 2));
+  }
+
+  public void testCombinationsExhaustively_startingFromArbitrary() {
+    Ordering<Object> arbitrary = Ordering.arbitrary();
+    List<Object> list = Arrays.asList(1, "foo", new Object());
+
+    // There's no way to tell what the order should be except empirically
+    Collections.sort(list, arbitrary);
+    testExhaustively(arbitrary, list);
+  }
+
+  private static <T> void testExhaustively(
+      Ordering<? super T> ordering, List<T> list) {
+    // shoot me, but I didn't want to deal with wildcards through the whole test
+    @SuppressWarnings("unchecked")
+    Scenario<T> starter = new Scenario<T>((Ordering) ordering, list);
+    verifyScenario(starter, 0);
+  }
+
+  private static <T> void verifyScenario(Scenario<T> scenario, int level) {
+    scenario.testCompareTo();
+    scenario.testIsOrdered();
+    scenario.testMinAndMax();
+    scenario.testBinarySearch();
+
+    if (level < RECURSE_DEPTH) {
+      for (OrderingMutation alteration : OrderingMutation.values()) {
+        verifyScenario(alteration.mutate(scenario), level + 1);
+      }
+    }
+  }
+
+  /**
+   * An aggregation of an ordering with a list (of size > 1) that should prove
+   * to be in strictly increasing order according to that ordering.
+   */
+  private static class Scenario<T> {
+    final Ordering<T> ordering;
+    final List<T> strictlyOrderedList;
+
+    Scenario(Ordering<T> ordering, List<T> strictlyOrderedList) {
+      this.ordering = ordering;
+      this.strictlyOrderedList = strictlyOrderedList;
+    }
+
+    void testCompareTo() {
+      Helpers.testComparator(ordering, strictlyOrderedList);
+    }
+
+    void testIsOrdered() {
+      assertTrue(ordering.isOrdered(strictlyOrderedList));
+      assertTrue(ordering.isStrictlyOrdered(strictlyOrderedList));
+    }
+
+    void testMinAndMax() {
+      List<T> shuffledList = Lists.newArrayList(strictlyOrderedList);
+      shuffledList = shuffledCopy(shuffledList, new Random(5));
+
+      assertEquals(strictlyOrderedList.get(0), ordering.min(shuffledList));
+      assertEquals(strictlyOrderedList.get(strictlyOrderedList.size() - 1),
+          ordering.max(shuffledList));
+    }
+
+    void testBinarySearch() {
+      for (int i = 0; i < strictlyOrderedList.size(); i++) {
+        assertEquals(i, ordering.binarySearch(
+            strictlyOrderedList, strictlyOrderedList.get(i)));
+      }
+      List<T> newList = Lists.newArrayList(strictlyOrderedList);
+      T valueNotInList = newList.remove(1);
+      assertEquals(-2, ordering.binarySearch(newList, valueNotInList));
+    }
+  }
+
+  /**
+   * A means for changing an Ordering into another Ordering. Each instance is
+   * responsible for creating the alternate Ordering, and providing a List that
+   * is known to be ordered, based on an input List known to be ordered
+   * according to the input Ordering.
+   */
+  private enum OrderingMutation {
+    REVERSE {
+      @Override <T> Scenario<?> mutate(Scenario<T> scenario) {
+        List<T> newList = Lists.newArrayList(scenario.strictlyOrderedList);
+        Collections.reverse(newList);
+        return new Scenario<T>(scenario.ordering.reverse(), newList);
+      }
+    },
+    NULLS_FIRST {
+      @Override <T> Scenario<?> mutate(Scenario<T> scenario) {
+        @SuppressWarnings("unchecked")
+        List<T> newList = Lists.newArrayList((T) null);
+        for (T t : scenario.strictlyOrderedList) {
+          if (t != null) {
+            newList.add(t);
+          }
+        }
+        return new Scenario<T>(scenario.ordering.nullsFirst(), newList);
+      }
+    },
+    NULLS_LAST {
+      @Override <T> Scenario<?> mutate(Scenario<T> scenario) {
+        List<T> newList = Lists.newArrayList();
+        for (T t : scenario.strictlyOrderedList) {
+          if (t != null) {
+            newList.add(t);
+          }
+        }
+        newList.add(null);
+        return new Scenario<T>(scenario.ordering.nullsLast(), newList);
+      }
+    },
+    ON_RESULT_OF {
+      @Override <T> Scenario<?> mutate(final Scenario<T> scenario) {
+        Ordering<Integer> ordering = scenario.ordering.onResultOf(
+            new Function<Integer, T>() {
+              @Override
+              public T apply(@Nullable Integer from) {
+                return scenario.strictlyOrderedList.get(from);
+              }
+            });
+        List<Integer> list = Lists.newArrayList();
+        for (int i = 0; i < scenario.strictlyOrderedList.size(); i++) {
+          list.add(i);
+        }
+        return new Scenario<Integer>(ordering, list);
+      }
+    },
+    COMPOUND_THIS_WITH_NATURAL {
+      @Override <T> Scenario<?> mutate(Scenario<T> scenario) {
+        List<Composite<T>> composites = Lists.newArrayList();
+        for (T t : scenario.strictlyOrderedList) {
+          composites.add(new Composite<T>(t, 1));
+          composites.add(new Composite<T>(t, 2));
+        }
+        Ordering<Composite<T>> ordering =
+            scenario.ordering.onResultOf(Composite.<T>getValueFunction())
+                .compound(Ordering.natural());
+        return new Scenario<Composite<T>>(ordering, composites);
+      }
+    },
+    COMPOUND_NATURAL_WITH_THIS {
+      @Override <T> Scenario<?> mutate(Scenario<T> scenario) {
+        List<Composite<T>> composites = Lists.newArrayList();
+        for (T t : scenario.strictlyOrderedList) {
+          composites.add(new Composite<T>(t, 1));
+        }
+        for (T t : scenario.strictlyOrderedList) {
+          composites.add(new Composite<T>(t, 2));
+        }
+        Ordering<Composite<T>> ordering = Ordering.natural().compound(
+            scenario.ordering.onResultOf(Composite.<T>getValueFunction()));
+        return new Scenario<Composite<T>>(ordering, composites);
+      }
+    },
+    LEXICOGRAPHICAL {
+      @SuppressWarnings("unchecked") // dang varargs
+      @Override <T> Scenario<?> mutate(Scenario<T> scenario) {
+        List<Iterable<T>> words = Lists.newArrayList();
+        words.add(Collections.<T>emptyList());
+        for (T t : scenario.strictlyOrderedList) {
+          words.add(Arrays.asList(t));
+          for (T s : scenario.strictlyOrderedList) {
+            words.add(Arrays.asList(t, s));
+          }
+        }
+        return new Scenario<Iterable<T>>(
+            scenario.ordering.lexicographical(), words);
+      }
+    },
+    ;
+
+    abstract <T> Scenario<?> mutate(Scenario<T> scenario);
+  }
+
+  /**
+   * A dummy object we create so that we can have something meaningful to have
+   * a compound ordering over.
+   */
+  private static class Composite<T> implements Comparable<Composite<T>> {
+    final T value;
+    final int rank;
+
+    Composite(T value, int rank) {
+      this.value = value;
+      this.rank = rank;
+    }
+
+    // natural order is by rank only; the test will compound() this with the
+    // order of 't'.
+    @Override
+    public int compareTo(Composite<T> that) {
+      return rank < that.rank ? -1 : rank > that.rank ? 1 : 0;
+    }
+
+    static <T> Function<Composite<T>, T> getValueFunction() {
+      return new Function<Composite<T>, T>() {
+        @Override
+        public T apply(Composite<T> from) {
+          return from.value;
+        }
+      };
+    }
+  }
+
+  @GwtIncompatible("NullPointerTester")
+  public void testNullPointerExceptions() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.testAllPublicStaticMethods(Ordering.class);
+
+    // any Ordering<Object> instance that accepts nulls should be good enough
+    tester.testAllPublicInstanceMethods(Ordering.usingToString().nullsFirst());
+  }
+
+  private static <T> List<T> shuffledCopy(List<T> in, Random random) {
+    List<T> mutable = newArrayList(in);
+    List<T> out = newArrayList();
+    while (!mutable.isEmpty()) {
+      out.add(mutable.remove(random.nextInt(mutable.size())));
+    }
+    return out;
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/PeekingIteratorTest.java b/guava-tests/test/com/google/common/collect/PeekingIteratorTest.java
new file mode 100644
index 0000000..85cf9dd
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/PeekingIteratorTest.java
@@ -0,0 +1,249 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.collect.Iterators.peekingIterator;
+import static com.google.common.collect.testing.IteratorFeature.MODIFIABLE;
+import static com.google.common.collect.testing.IteratorFeature.UNMODIFIABLE;
+import static java.util.Collections.emptyList;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.collect.testing.IteratorTester;
+
+import junit.framework.TestCase;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.NoSuchElementException;
+
+/**
+  * Unit test for {@link PeekingIterator}.
+  *
+  * @author Mick Killianey
+  */
+@SuppressWarnings("serial") // No serialization is used in this test
+@GwtCompatible(emulated = true)
+public class PeekingIteratorTest extends TestCase {
+
+  /**
+   * Version of {@link IteratorTester} that compares an iterator over
+   * a given collection of elements (used as the reference iterator)
+   * against a {@code PeekingIterator} that *wraps* such an iterator
+   * (used as the target iterator).
+   *
+   * <p>This IteratorTester makes copies of the master so that it can
+   * later verify that {@link PeekingIterator#remove()} removes the
+   * same elements as the reference's iterator {@code #remove()}.
+   */
+  private static class PeekingIteratorTester<T> extends IteratorTester<T> {
+    private Iterable<T> master;
+    private List<T> targetList;
+
+    public PeekingIteratorTester(Collection<T> master) {
+      super(master.size() + 3, MODIFIABLE, master,
+          IteratorTester.KnownOrder.KNOWN_ORDER);
+      this.master = master;
+    }
+    @Override protected Iterator<T> newTargetIterator() {
+      // make copy from master to verify later
+      targetList = Lists.newArrayList(master);
+      Iterator<T> iterator = targetList.iterator();
+      return Iterators.peekingIterator(iterator);
+    }
+    @Override protected void verify(List<T> elements) {
+      // verify same objects were removed from reference and target
+      assertEquals(elements, targetList);
+    }
+  }
+
+  private <T> void actsLikeIteratorHelper(final List<T> list) {
+    // Check with modifiable copies of the list
+    new PeekingIteratorTester<T>(list).test();
+
+    // Check with unmodifiable lists
+    new IteratorTester<T>(list.size() * 2 + 2, UNMODIFIABLE, list,
+        IteratorTester.KnownOrder.KNOWN_ORDER) {
+      @Override protected Iterator<T> newTargetIterator() {
+        Iterator<T> iterator = Collections.unmodifiableList(list).iterator();
+        return Iterators.peekingIterator(iterator);
+      }
+    }.test();
+  }
+
+  public void testPeekingIteratorBehavesLikeIteratorOnEmptyIterable() {
+    actsLikeIteratorHelper(Collections.emptyList());
+  }
+
+  public void testPeekingIteratorBehavesLikeIteratorOnSingletonIterable() {
+    actsLikeIteratorHelper(Collections.singletonList(new Object()));
+  }
+
+  // TODO(cpovirk): instead of skipping, use a smaller number of steps
+  @GwtIncompatible("works but takes 5 minutes to run")
+  public void testPeekingIteratorBehavesLikeIteratorOnThreeElementIterable() {
+    actsLikeIteratorHelper(Lists.newArrayList("A", "B", "C"));
+  }
+
+  @GwtIncompatible("works but takes 5 minutes to run")
+  public void testPeekingIteratorAcceptsNullElements() {
+    actsLikeIteratorHelper(Lists.newArrayList(null, "A", null));
+  }
+
+  public void testPeekOnEmptyList() {
+    List<?> list = Collections.emptyList();
+    Iterator<?> iterator = list.iterator();
+    PeekingIterator<?> peekingIterator = Iterators.peekingIterator(iterator);
+
+    try {
+      peekingIterator.peek();
+      fail("Should throw NoSuchElementException if nothing to peek()");
+    } catch (NoSuchElementException e) { /* expected */ }
+  }
+
+  public void testPeekDoesntChangeIteration() {
+    List<?> list = Lists.newArrayList("A", "B", "C");
+    Iterator<?> iterator = list.iterator();
+    PeekingIterator<?> peekingIterator =
+        Iterators.peekingIterator(iterator);
+
+    assertEquals("Should be able to peek() at first element",
+        "A", peekingIterator.peek());
+    assertEquals("Should be able to peek() first element multiple times",
+        "A", peekingIterator.peek());
+    assertEquals("next() should still return first element after peeking",
+        "A", peekingIterator.next());
+
+    assertEquals("Should be able to peek() at middle element",
+        "B", peekingIterator.peek());
+    assertEquals("Should be able to peek() middle element multiple times",
+        "B", peekingIterator.peek());
+    assertEquals("next() should still return middle element after peeking",
+        "B", peekingIterator.next());
+
+    assertEquals("Should be able to peek() at last element",
+        "C", peekingIterator.peek());
+    assertEquals("Should be able to peek() last element multiple times",
+        "C", peekingIterator.peek());
+    assertEquals("next() should still return last element after peeking",
+        "C", peekingIterator.next());
+
+    try {
+      peekingIterator.peek();
+      fail("Should throw exception if no next to peek()");
+    } catch (NoSuchElementException e) { /* expected */ }
+    try {
+      peekingIterator.peek();
+      fail("Should continue to throw exception if no next to peek()");
+    } catch (NoSuchElementException e) { /* expected */ }
+    try {
+      peekingIterator.next();
+      fail("next() should still throw exception after the end of iteration");
+    } catch (NoSuchElementException e) { /* expected */ }
+  }
+
+  public void testCantRemoveAfterPeek() {
+    List<String> list = Lists.newArrayList("A", "B", "C");
+    Iterator<String> iterator = list.iterator();
+    PeekingIterator<?> peekingIterator = Iterators.peekingIterator(iterator);
+
+    assertEquals("A", peekingIterator.next());
+    assertEquals("B", peekingIterator.peek());
+
+    /* Should complain on attempt to remove() after peek(). */
+    try {
+      peekingIterator.remove();
+      fail("remove() should throw IllegalStateException after a peek()");
+    } catch (IllegalStateException e) { /* expected */ }
+
+    assertEquals("After remove() throws exception, peek should still be ok",
+        "B", peekingIterator.peek());
+
+    /* Should recover to be able to remove() after next(). */
+    assertEquals("B", peekingIterator.next());
+    peekingIterator.remove();
+    assertEquals("Should have removed an element", 2, list.size());
+    assertFalse("Second element should be gone", list.contains("B"));
+  }
+
+  static class ThrowsAtEndException extends RuntimeException { /* nothing */ }
+
+  /**
+    * This Iterator claims to have more elements than the underlying
+    * iterable, but when you try to fetch the extra elements, it throws
+    * an unchecked exception.
+    */
+  static class ThrowsAtEndIterator<E> implements Iterator<E> {
+    Iterator<E> iterator;
+    public ThrowsAtEndIterator(Iterable<E> iterable) {
+      this.iterator = iterable.iterator();
+    }
+    @Override
+    public boolean hasNext() {
+      return true;  // pretend that you have more...
+    }
+    @Override
+    public E next() {
+      // ...but throw an unchecked exception when you ask for it.
+      if (!iterator.hasNext()) {
+        throw new ThrowsAtEndException();
+      }
+      return iterator.next();
+    }
+    @Override
+    public void remove() {
+      iterator.remove();
+    }
+  }
+
+  public void testPeekingIteratorDoesntAdvancePrematurely() throws Exception {
+    /*
+     * This test will catch problems where the underlying iterator
+     * throws a RuntimeException when retrieving the nth element.
+     *
+     * If the PeekingIterator is caching elements too aggressively,
+     * it may throw the exception on the (n-1)th element (oops!).
+     */
+
+    /* Checks the case where the first element throws an exception. */
+
+    List<Integer> list = emptyList();
+    Iterator<Integer> iterator =
+        peekingIterator(new ThrowsAtEndIterator<Integer>(list));
+    assertNextThrows(iterator);
+
+    /* Checks the case where a later element throws an exception. */
+
+    list = Lists.newArrayList(1, 2);
+    iterator = peekingIterator(new ThrowsAtEndIterator<Integer>(list));
+    assertTrue(iterator.hasNext());
+    iterator.next();
+    assertTrue(iterator.hasNext());
+    iterator.next();
+    assertNextThrows(iterator);
+  }
+
+  private void assertNextThrows(Iterator<?> iterator) {
+    try {
+      iterator.next();
+      fail();
+    } catch (ThrowsAtEndException expected) {
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/QueuesTest.java b/guava-tests/test/com/google/common/collect/QueuesTest.java
new file mode 100644
index 0000000..bffcb39
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/QueuesTest.java
@@ -0,0 +1,307 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.util.concurrent.Uninterruptibles;
+
+import junit.framework.TestCase;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.concurrent.ArrayBlockingQueue;
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.PriorityBlockingQueue;
+import java.util.concurrent.SynchronousQueue;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Tests for {@link Queues}.
+ *
+ * @author Dimitris Andreou
+ */
+
+public class QueuesTest extends TestCase {
+  /*
+   * All the following tests relate to BlockingQueue methods in Queues.
+   */
+
+  public static List<BlockingQueue<Object>> blockingQueues() {
+    return ImmutableList.<BlockingQueue<Object>>of(
+        new LinkedBlockingQueue<Object>(),
+        new LinkedBlockingQueue<Object>(10),
+        new SynchronousQueue<Object>(),
+        new ArrayBlockingQueue<Object>(10),
+        new PriorityBlockingQueue<Object>(10, Ordering.arbitrary()));
+  }
+
+  private ExecutorService threadPool;
+
+  @Override
+  public void setUp() {
+    threadPool = Executors.newCachedThreadPool();
+  }
+
+  @Override
+  public void tearDown() throws InterruptedException {
+    // notice that if a Producer is interrupted (a bug), the Producer will go into an infinite
+    // loop, which will be noticed here
+    threadPool.shutdown();
+    assertTrue("Some worker didn't finish in time",
+        threadPool.awaitTermination(1, TimeUnit.SECONDS));
+  }
+
+  private static <T> int drain(BlockingQueue<T> q, Collection<? super T> buffer, int maxElements,
+      long timeout, TimeUnit unit, boolean interruptibly) throws InterruptedException {
+    return interruptibly
+        ? Queues.drain(q, buffer, maxElements, timeout, unit)
+        : Queues.drainUninterruptibly(q, buffer, maxElements, timeout, unit);
+  }
+
+  public void testMultipleProducers() throws Exception {
+    for (BlockingQueue<Object> q : blockingQueues()) {
+      testMultipleProducers(q);
+    }
+  }
+
+  private void testMultipleProducers(BlockingQueue<Object> q)
+      throws InterruptedException {
+    for (boolean interruptibly : new boolean[] { true, false }) {
+      threadPool.submit(new Producer(q, 20));
+      threadPool.submit(new Producer(q, 20));
+      threadPool.submit(new Producer(q, 20));
+      threadPool.submit(new Producer(q, 20));
+      threadPool.submit(new Producer(q, 20));
+
+      List<Object> buf = Lists.newArrayList();
+      int elements = drain(q, buf, 100, Long.MAX_VALUE, TimeUnit.NANOSECONDS, interruptibly);
+      assertEquals(100, elements);
+      assertEquals(100, buf.size());
+      assertDrained(q);
+    }
+  }
+
+  public void testDrainTimesOut() throws Exception {
+    for (BlockingQueue<Object> q : blockingQueues()) {
+      testDrainTimesOut(q);
+    }
+  }
+
+  private void testDrainTimesOut(BlockingQueue<Object> q) throws Exception {
+    for (boolean interruptibly : new boolean[] { true, false }) {
+      assertEquals(0, Queues.drain(q, ImmutableList.of(), 1, 10, TimeUnit.MILLISECONDS));
+
+      // producing one, will ask for two
+      Future<?> submitter = threadPool.submit(new Producer(q, 1));
+
+      // make sure we time out
+      long startTime = System.nanoTime();
+
+      int drained = drain(q, Lists.newArrayList(), 2, 10, TimeUnit.MILLISECONDS, interruptibly);
+      assertTrue(drained <= 1);
+
+      assertTrue((System.nanoTime() - startTime) >= TimeUnit.MILLISECONDS.toNanos(10));
+
+      // If even the first one wasn't there, clean up so that the next test doesn't see an element.
+      submitter.get();
+      if (drained == 0) {
+        assertNotNull(q.poll());
+      }
+    }
+  }
+
+  public void testZeroElements() throws Exception {
+    for (BlockingQueue<Object> q : blockingQueues()) {
+      testZeroElements(q);
+    }
+  }
+
+  private void testZeroElements(BlockingQueue<Object> q) throws InterruptedException {
+    for (boolean interruptibly : new boolean[] { true, false }) {
+      // asking to drain zero elements
+      assertEquals(0, drain(q, ImmutableList.of(), 0, 10, TimeUnit.MILLISECONDS, interruptibly));
+    }
+  }
+
+  public void testEmpty() throws Exception {
+    for (BlockingQueue<Object> q : blockingQueues()) {
+      testEmpty(q);
+    }
+  }
+
+  private void testEmpty(BlockingQueue<Object> q) {
+    assertDrained(q);
+  }
+
+  public void testNegativeMaxElements() throws Exception {
+    for (BlockingQueue<Object> q : blockingQueues()) {
+      testNegativeMaxElements(q);
+    }
+  }
+
+  private void testNegativeMaxElements(BlockingQueue<Object> q) throws InterruptedException {
+    threadPool.submit(new Producer(q, 1));
+
+    List<Object> buf = Lists.newArrayList();
+    int elements = Queues.drain(q, buf, -1, Long.MAX_VALUE, TimeUnit.NANOSECONDS);
+    assertEquals(elements, 0);
+    assertTrue(buf.isEmpty());
+
+    // Clean up produced element to free the producer thread, otherwise it will complain
+    // when we shutdown the threadpool.
+    Queues.drain(q, buf, 1, Long.MAX_VALUE, TimeUnit.NANOSECONDS);
+  }
+
+  public void testDrain_throws() throws Exception {
+    for (BlockingQueue<Object> q : blockingQueues()) {
+      testDrain_throws(q);
+    }
+  }
+
+  private void testDrain_throws(BlockingQueue<Object> q) {
+    threadPool.submit(new Interrupter(Thread.currentThread()));
+    try {
+      Queues.drain(q, ImmutableList.of(), 100, Long.MAX_VALUE, TimeUnit.NANOSECONDS);
+      fail();
+    } catch (InterruptedException expected) {
+    }
+  }
+
+  public void testDrainUninterruptibly_doesNotThrow() throws Exception {
+    for (BlockingQueue<Object> q : blockingQueues()) {
+      testDrainUninterruptibly_doesNotThrow(q);
+    }
+  }
+
+  private void testDrainUninterruptibly_doesNotThrow(final BlockingQueue<Object> q) {
+    final Thread mainThread = Thread.currentThread();
+    threadPool.submit(new Runnable() {
+      public void run() {
+        new Producer(q, 50).run();
+        new Interrupter(mainThread).run();
+        new Producer(q, 50).run();
+      }
+    });
+    List<Object> buf = Lists.newArrayList();
+    int elements =
+        Queues.drainUninterruptibly(q, buf, 100, Long.MAX_VALUE, TimeUnit.NANOSECONDS);
+    // so when this drains all elements, we know the thread has also been interrupted in between
+    assertTrue(Thread.interrupted());
+    assertEquals(100, elements);
+    assertEquals(100, buf.size());
+  }
+
+  public void testNewLinkedBlockingQueueCapacity() {
+    try {
+      Queues.newLinkedBlockingQueue(0);
+      fail("Should have thrown IllegalArgumentException");
+    } catch (IllegalArgumentException expected) {
+      // any capacity less than 1 should throw IllegalArgumentException
+    }
+    assertEquals(1, Queues.newLinkedBlockingQueue(1).remainingCapacity());
+    assertEquals(11, Queues.newLinkedBlockingQueue(11).remainingCapacity());
+  }
+
+  /**
+   * Checks that #drain() invocations behave correctly for a drained (empty) queue.
+   */
+  private void assertDrained(BlockingQueue<Object> q) {
+    assertNull(q.peek());
+    assertInterruptibleDrained(q);
+    assertUninterruptibleDrained(q);
+  }
+
+  private void assertInterruptibleDrained(BlockingQueue<Object> q) {
+    // nothing to drain, thus this should wait doing nothing
+    try {
+      assertEquals(0, Queues.drain(q, ImmutableList.of(), 0, 10, TimeUnit.MILLISECONDS));
+    } catch (InterruptedException e) {
+      throw new AssertionError();
+    }
+
+    // but does the wait actually occurs?
+    threadPool.submit(new Interrupter(Thread.currentThread()));
+    try {
+      // if waiting works, this should get stuck
+      Queues.drain(q, Lists.newArrayList(), 1, Long.MAX_VALUE, TimeUnit.NANOSECONDS);
+      fail();
+    } catch (InterruptedException expected) {
+      // we indeed waited; a slow thread had enough time to interrupt us
+    }
+  }
+
+  // same as above; uninterruptible version
+  private void assertUninterruptibleDrained(BlockingQueue<Object> q) {
+    assertEquals(0,
+        Queues.drainUninterruptibly(q, ImmutableList.of(), 0, 10, TimeUnit.MILLISECONDS));
+
+    // but does the wait actually occurs?
+    threadPool.submit(new Interrupter(Thread.currentThread()));
+
+    long startTime = System.nanoTime();
+    Queues.drainUninterruptibly(
+        q, Lists.newArrayList(), 1, 10, TimeUnit.MILLISECONDS);
+    assertTrue((System.nanoTime() - startTime) >= TimeUnit.MILLISECONDS.toNanos(10));
+    // wait for interrupted status and clear it
+    while (!Thread.interrupted()) { Thread.yield(); }
+  }
+
+  private static class Producer implements Runnable {
+    final BlockingQueue<Object> q;
+    final int elements;
+
+    Producer(BlockingQueue<Object> q, int elements) {
+      this.q = q;
+      this.elements = elements;
+    }
+
+    @Override public void run() {
+      try {
+        for (int i = 0; i < elements; i++) {
+          q.put(new Object());
+        }
+      } catch (InterruptedException e) {
+        // TODO(user): replace this when there is a better way to spawn threads in tests and
+        // have threads propagate their errors back to the test thread.
+        e.printStackTrace();
+        // never returns, so that #tearDown() notices that one worker isn't done
+        Uninterruptibles.sleepUninterruptibly(Long.MAX_VALUE, TimeUnit.MILLISECONDS);
+      }
+    }
+  }
+
+  private static class Interrupter implements Runnable {
+    final Thread threadToInterrupt;
+
+    Interrupter(Thread threadToInterrupt) {
+      this.threadToInterrupt = threadToInterrupt;
+    }
+
+    @Override public void run() {
+      try {
+        Thread.sleep(100);
+      } catch (InterruptedException e) {
+        throw new AssertionError();
+      } finally {
+        threadToInterrupt.interrupt();
+      }
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/RangeNonGwtTest.java b/guava-tests/test/com/google/common/collect/RangeNonGwtTest.java
new file mode 100644
index 0000000..7b1d297
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/RangeNonGwtTest.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.testing.NullPointerTester;
+
+import junit.framework.TestCase;
+
+/**
+ * Test cases for {@link Range} which cannot run as GWT tests.
+ *
+ * @author Gregory Kick
+ * @see RangeTest
+ */
+public class RangeNonGwtTest extends TestCase {
+
+  public void testNullPointers() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.setDefault(BoundType.class, BoundType.OPEN);
+    tester.setDefault(Comparable.class, 0);
+
+    tester.testAllPublicStaticMethods(Range.class);
+    tester.testAllPublicStaticMethods(Ranges.class);
+
+    tester.testAllPublicInstanceMethods(Ranges.all());
+    tester.testAllPublicInstanceMethods(Ranges.open(1, 3));
+  }
+
+}
diff --git a/guava-tests/test/com/google/common/collect/RangeTest.java b/guava-tests/test/com/google/common/collect/RangeTest.java
new file mode 100644
index 0000000..9b74b0e
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/RangeTest.java
@@ -0,0 +1,604 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.collect.BoundType.CLOSED;
+import static com.google.common.collect.BoundType.OPEN;
+import static com.google.common.collect.DiscreteDomains.integers;
+import static com.google.common.testing.SerializableTester.reserializeAndAssert;
+import static java.util.Arrays.asList;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Predicate;
+import com.google.common.collect.testing.Helpers;
+import com.google.common.testing.EqualsTester;
+
+import junit.framework.TestCase;
+
+import java.util.Collections;
+
+/**
+ * Unit test for {@link Range}.
+ *
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible
+public class RangeTest extends TestCase {
+  public void testOpen() {
+    Range<Integer> range = Ranges.open(4, 8);
+    checkContains(range);
+    assertTrue(range.hasLowerBound());
+    assertEquals(4, (int) range.lowerEndpoint());
+    assertEquals(OPEN, range.lowerBoundType());
+    assertTrue(range.hasUpperBound());
+    assertEquals(8, (int) range.upperEndpoint());
+    assertEquals(OPEN, range.upperBoundType());
+    assertFalse(range.isEmpty());
+    assertEquals("(4\u20258)", range.toString());
+    reserializeAndAssert(range);
+  }
+
+  public void testOpen_invalid() {
+    try {
+      Ranges.open(4, 3);
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+    try {
+      Ranges.open(3, 3);
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  public void testClosed() {
+    Range<Integer> range = Ranges.closed(5, 7);
+    checkContains(range);
+    assertTrue(range.hasLowerBound());
+    assertEquals(5, (int) range.lowerEndpoint());
+    assertEquals(CLOSED, range.lowerBoundType());
+    assertTrue(range.hasUpperBound());
+    assertEquals(7, (int) range.upperEndpoint());
+    assertEquals(CLOSED, range.upperBoundType());
+    assertFalse(range.isEmpty());
+    assertEquals("[5\u20257]", range.toString());
+    reserializeAndAssert(range);
+  }
+
+  public void testClosed_invalid() {
+    try {
+      Ranges.closed(4, 3);
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  public void testOpenClosed() {
+    Range<Integer> range = Ranges.openClosed(4, 7);
+    checkContains(range);
+    assertTrue(range.hasLowerBound());
+    assertEquals(4, (int) range.lowerEndpoint());
+    assertEquals(OPEN, range.lowerBoundType());
+    assertTrue(range.hasUpperBound());
+    assertEquals(7, (int) range.upperEndpoint());
+    assertEquals(CLOSED, range.upperBoundType());
+    assertFalse(range.isEmpty());
+    assertEquals("(4\u20257]", range.toString());
+    reserializeAndAssert(range);
+  }
+
+  public void testClosedOpen() {
+    Range<Integer> range = Ranges.closedOpen(5, 8);
+    checkContains(range);
+    assertTrue(range.hasLowerBound());
+    assertEquals(5, (int) range.lowerEndpoint());
+    assertEquals(CLOSED, range.lowerBoundType());
+    assertTrue(range.hasUpperBound());
+    assertEquals(8, (int) range.upperEndpoint());
+    assertEquals(OPEN, range.upperBoundType());
+    assertFalse(range.isEmpty());
+    assertEquals("[5\u20258)", range.toString());
+    reserializeAndAssert(range);
+  }
+
+  public void testIsConnected() {
+    assertTrue(Ranges.closed(3, 5).isConnected(Ranges.open(5, 6)));
+    assertTrue(Ranges.closed(3, 5).isConnected(Ranges.openClosed(5, 5)));
+    assertTrue(Ranges.open(3, 5).isConnected(Ranges.closed(5, 6)));
+    assertTrue(Ranges.closed(3, 7).isConnected(Ranges.open(6, 8)));
+    assertTrue(Ranges.open(3, 7).isConnected(Ranges.closed(5, 6)));
+    assertFalse(Ranges.closed(3, 5).isConnected(Ranges.closed(7, 8)));
+    assertFalse(Ranges.closed(3, 5).isConnected(Ranges.closedOpen(7, 7)));
+  }
+
+  private static void checkContains(Range<Integer> range) {
+    assertFalse(range.contains(4));
+    assertTrue(range.contains(5));
+    assertTrue(range.contains(7));
+    assertFalse(range.contains(8));
+  }
+
+  public void testSingleton() {
+    Range<Integer> range = Ranges.closed(4, 4);
+    assertFalse(range.contains(3));
+    assertTrue(range.contains(4));
+    assertFalse(range.contains(5));
+    assertTrue(range.hasLowerBound());
+    assertEquals(4, (int) range.lowerEndpoint());
+    assertEquals(CLOSED, range.lowerBoundType());
+    assertTrue(range.hasUpperBound());
+    assertEquals(4, (int) range.upperEndpoint());
+    assertEquals(CLOSED, range.upperBoundType());
+    assertFalse(range.isEmpty());
+    assertEquals("[4\u20254]", range.toString());
+    reserializeAndAssert(range);
+  }
+
+  public void testEmpty1() {
+    Range<Integer> range = Ranges.closedOpen(4, 4);
+    assertFalse(range.contains(3));
+    assertFalse(range.contains(4));
+    assertFalse(range.contains(5));
+    assertTrue(range.hasLowerBound());
+    assertEquals(4, (int) range.lowerEndpoint());
+    assertEquals(CLOSED, range.lowerBoundType());
+    assertTrue(range.hasUpperBound());
+    assertEquals(4, (int) range.upperEndpoint());
+    assertEquals(OPEN, range.upperBoundType());
+    assertTrue(range.isEmpty());
+    assertEquals("[4\u20254)", range.toString());
+    reserializeAndAssert(range);
+  }
+
+  public void testEmpty2() {
+    Range<Integer> range = Ranges.openClosed(4, 4);
+    assertFalse(range.contains(3));
+    assertFalse(range.contains(4));
+    assertFalse(range.contains(5));
+    assertTrue(range.hasLowerBound());
+    assertEquals(4, (int) range.lowerEndpoint());
+    assertEquals(OPEN, range.lowerBoundType());
+    assertTrue(range.hasUpperBound());
+    assertEquals(4, (int) range.upperEndpoint());
+    assertEquals(CLOSED, range.upperBoundType());
+    assertTrue(range.isEmpty());
+    assertEquals("(4\u20254]", range.toString());
+    reserializeAndAssert(range);
+  }
+
+  public void testLessThan() {
+    Range<Integer> range = Ranges.lessThan(5);
+    assertTrue(range.contains(Integer.MIN_VALUE));
+    assertTrue(range.contains(4));
+    assertFalse(range.contains(5));
+    assertUnboundedBelow(range);
+    assertTrue(range.hasUpperBound());
+    assertEquals(5, (int) range.upperEndpoint());
+    assertEquals(OPEN, range.upperBoundType());
+    assertFalse(range.isEmpty());
+    assertEquals("(-\u221e\u20255)", range.toString());
+    reserializeAndAssert(range);
+  }
+
+  public void testGreaterThan() {
+    Range<Integer> range = Ranges.greaterThan(5);
+    assertFalse(range.contains(5));
+    assertTrue(range.contains(6));
+    assertTrue(range.contains(Integer.MAX_VALUE));
+    assertTrue(range.hasLowerBound());
+    assertEquals(5, (int) range.lowerEndpoint());
+    assertEquals(OPEN, range.lowerBoundType());
+    assertUnboundedAbove(range);
+    assertFalse(range.isEmpty());
+    assertEquals("(5\u2025+\u221e)", range.toString());
+    reserializeAndAssert(range);
+  }
+
+  public void testAtLeast() {
+    Range<Integer> range = Ranges.atLeast(6);
+    assertFalse(range.contains(5));
+    assertTrue(range.contains(6));
+    assertTrue(range.contains(Integer.MAX_VALUE));
+    assertTrue(range.hasLowerBound());
+    assertEquals(6, (int) range.lowerEndpoint());
+    assertEquals(CLOSED, range.lowerBoundType());
+    assertUnboundedAbove(range);
+    assertFalse(range.isEmpty());
+    assertEquals("[6\u2025+\u221e)", range.toString());
+    reserializeAndAssert(range);
+  }
+
+  public void testAtMost() {
+    Range<Integer> range = Ranges.atMost(4);
+    assertTrue(range.contains(Integer.MIN_VALUE));
+    assertTrue(range.contains(4));
+    assertFalse(range.contains(5));
+    assertUnboundedBelow(range);
+    assertTrue(range.hasUpperBound());
+    assertEquals(4, (int) range.upperEndpoint());
+    assertEquals(CLOSED, range.upperBoundType());
+    assertFalse(range.isEmpty());
+    assertEquals("(-\u221e\u20254]", range.toString());
+    reserializeAndAssert(range);
+  }
+
+  public void testAll() {
+    Range<Integer> range = Ranges.all();
+    assertTrue(range.contains(Integer.MIN_VALUE));
+    assertTrue(range.contains(Integer.MAX_VALUE));
+    assertUnboundedBelow(range);
+    assertUnboundedAbove(range);
+    assertFalse(range.isEmpty());
+    assertEquals("(-\u221e\u2025+\u221e)", range.toString());
+    reserializeAndAssert(range);
+  }
+
+  private static void assertUnboundedBelow(Range<Integer> range) {
+    assertFalse(range.hasLowerBound());
+    try {
+      range.lowerEndpoint();
+      fail();
+    } catch (IllegalStateException expected) {
+    }
+    try {
+      range.lowerBoundType();
+      fail();
+    } catch (IllegalStateException expected) {
+    }
+  }
+
+  private static void assertUnboundedAbove(Range<Integer> range) {
+    assertFalse(range.hasUpperBound());
+    try {
+      range.upperEndpoint();
+      fail();
+    } catch (IllegalStateException expected) {
+    }
+    try {
+      range.upperBoundType();
+      fail();
+    } catch (IllegalStateException expected) {
+    }
+  }
+
+  public void testOrderingCuts() {
+    Cut<Integer> a = Ranges.lessThan(0).lowerBound;
+    Cut<Integer> b = Ranges.atLeast(0).lowerBound;
+    Cut<Integer> c = Ranges.greaterThan(0).lowerBound;
+    Cut<Integer> d = Ranges.atLeast(1).lowerBound;
+    Cut<Integer> e = Ranges.greaterThan(1).lowerBound;
+    Cut<Integer> f = Ranges.greaterThan(1).upperBound;
+
+    Helpers.testCompareToAndEquals(ImmutableList.of(a, b, c, d, e, f));
+  }
+
+  public void testContainsAll() {
+    Range<Integer> range = Ranges.closed(3, 5);
+    assertTrue(range.containsAll(asList(3, 3, 4, 5)));
+    assertFalse(range.containsAll(asList(3, 3, 4, 5, 6)));
+
+    // We happen to know that natural-order sorted sets use a different code
+    // path, so we test that separately
+    assertTrue(range.containsAll(ImmutableSortedSet.of(3, 3, 4, 5)));
+    assertTrue(range.containsAll(ImmutableSortedSet.of(3)));
+    assertTrue(range.containsAll(ImmutableSortedSet.<Integer>of()));
+    assertFalse(range.containsAll(ImmutableSortedSet.of(3, 3, 4, 5, 6)));
+
+    assertTrue(Ranges.openClosed(3, 3).containsAll(
+        Collections.<Integer>emptySet()));
+  }
+
+  public void testEncloses_open() {
+    Range<Integer> range = Ranges.open(2, 5);
+    assertTrue(range.encloses(range));
+    assertTrue(range.encloses(Ranges.open(2, 4)));
+    assertTrue(range.encloses(Ranges.open(3, 5)));
+    assertTrue(range.encloses(Ranges.closed(3, 4)));
+
+    assertFalse(range.encloses(Ranges.openClosed(2, 5)));
+    assertFalse(range.encloses(Ranges.closedOpen(2, 5)));
+    assertFalse(range.encloses(Ranges.closed(1, 4)));
+    assertFalse(range.encloses(Ranges.closed(3, 6)));
+    assertFalse(range.encloses(Ranges.greaterThan(3)));
+    assertFalse(range.encloses(Ranges.lessThan(3)));
+    assertFalse(range.encloses(Ranges.atLeast(3)));
+    assertFalse(range.encloses(Ranges.atMost(3)));
+    assertFalse(range.encloses(Ranges.<Integer>all()));
+  }
+
+  public void testEncloses_closed() {
+    Range<Integer> range = Ranges.closed(2, 5);
+    assertTrue(range.encloses(range));
+    assertTrue(range.encloses(Ranges.open(2, 5)));
+    assertTrue(range.encloses(Ranges.openClosed(2, 5)));
+    assertTrue(range.encloses(Ranges.closedOpen(2, 5)));
+    assertTrue(range.encloses(Ranges.closed(3, 5)));
+    assertTrue(range.encloses(Ranges.closed(2, 4)));
+
+    assertFalse(range.encloses(Ranges.open(1, 6)));
+    assertFalse(range.encloses(Ranges.greaterThan(3)));
+    assertFalse(range.encloses(Ranges.lessThan(3)));
+    assertFalse(range.encloses(Ranges.atLeast(3)));
+    assertFalse(range.encloses(Ranges.atMost(3)));
+    assertFalse(range.encloses(Ranges.<Integer>all()));
+  }
+
+  public void testIntersection_empty() {
+    Range<Integer> range = Ranges.closedOpen(3, 3);
+    assertEquals(range, range.intersection(range));
+
+    try {
+      range.intersection(Ranges.open(3, 5));
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+    try {
+      range.intersection(Ranges.closed(0, 2));
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  public void testIntersection_deFactoEmpty() {
+    Range<Integer> range = Ranges.open(3, 4);
+    assertEquals(range, range.intersection(range));
+
+    assertEquals(Ranges.openClosed(3, 3),
+        range.intersection(Ranges.atMost(3)));
+    assertEquals(Ranges.closedOpen(4, 4),
+        range.intersection(Ranges.atLeast(4)));
+    
+    try {
+      range.intersection(Ranges.lessThan(3));
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+    try {
+      range.intersection(Ranges.greaterThan(4));
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+
+    range = Ranges.closed(3, 4);
+    assertEquals(Ranges.openClosed(4, 4),
+        range.intersection(Ranges.greaterThan(4)));
+  }
+
+  public void testIntersection_singleton() {
+    Range<Integer> range = Ranges.closed(3, 3);
+    assertEquals(range, range.intersection(range));
+
+    assertEquals(range, range.intersection(Ranges.atMost(4)));
+    assertEquals(range, range.intersection(Ranges.atMost(3)));
+    assertEquals(range, range.intersection(Ranges.atLeast(3)));
+    assertEquals(range, range.intersection(Ranges.atLeast(2)));
+
+    assertEquals(Ranges.closedOpen(3, 3),
+        range.intersection(Ranges.lessThan(3)));
+    assertEquals(Ranges.openClosed(3, 3),
+        range.intersection(Ranges.greaterThan(3)));
+
+    try {
+      range.intersection(Ranges.atLeast(4));
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+    try {
+      range.intersection(Ranges.atMost(2));
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  public void testIntersection_general() {
+    Range<Integer> range = Ranges.closed(4, 8);
+
+    // separate below
+    try {
+      range.intersection(Ranges.closed(0, 2));
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+
+    // adjacent below
+    assertEquals(Ranges.closedOpen(4, 4),
+        range.intersection(Ranges.closedOpen(2, 4)));
+
+    // overlap below
+    assertEquals(Ranges.closed(4, 6), range.intersection(Ranges.closed(2, 6)));
+
+    // enclosed with same start
+    assertEquals(Ranges.closed(4, 6), range.intersection(Ranges.closed(4, 6)));
+
+    // enclosed, interior
+    assertEquals(Ranges.closed(5, 7), range.intersection(Ranges.closed(5, 7)));
+
+    // enclosed with same end
+    assertEquals(Ranges.closed(6, 8), range.intersection(Ranges.closed(6, 8)));
+
+    // equal
+    assertEquals(range, range.intersection(range));
+
+    // enclosing with same start
+    assertEquals(range, range.intersection(Ranges.closed(4, 10)));
+
+    // enclosing with same end
+    assertEquals(range, range.intersection(Ranges.closed(2, 8)));
+
+    // enclosing, exterior
+    assertEquals(range, range.intersection(Ranges.closed(2, 10)));
+
+    // overlap above
+    assertEquals(Ranges.closed(6, 8), range.intersection(Ranges.closed(6, 10)));
+
+    // adjacent above
+    assertEquals(Ranges.openClosed(8, 8),
+        range.intersection(Ranges.openClosed(8, 10)));
+
+    // separate above
+    try {
+      range.intersection(Ranges.closed(10, 12));
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  public void testSpan_general() {
+    Range<Integer> range = Ranges.closed(4, 8);
+
+    // separate below
+    assertEquals(Ranges.closed(0, 8), range.span(Ranges.closed(0, 2)));
+    assertEquals(Ranges.atMost(8), range.span(Ranges.atMost(2)));
+
+    // adjacent below
+    assertEquals(Ranges.closed(2, 8), range.span(Ranges.closedOpen(2, 4)));
+    assertEquals(Ranges.atMost(8), range.span(Ranges.lessThan(4)));
+
+    // overlap below
+    assertEquals(Ranges.closed(2, 8), range.span(Ranges.closed(2, 6)));
+    assertEquals(Ranges.atMost(8), range.span(Ranges.atMost(6)));
+
+    // enclosed with same start
+    assertEquals(range, range.span(Ranges.closed(4, 6)));
+
+    // enclosed, interior
+    assertEquals(range, range.span(Ranges.closed(5, 7)));
+
+    // enclosed with same end
+    assertEquals(range, range.span(Ranges.closed(6, 8)));
+
+    // equal
+    assertEquals(range, range.span(range));
+
+    // enclosing with same start
+    assertEquals(Ranges.closed(4, 10), range.span(Ranges.closed(4, 10)));
+    assertEquals(Ranges.atLeast(4), range.span(Ranges.atLeast(4)));
+
+    // enclosing with same end
+    assertEquals(Ranges.closed(2, 8), range.span(Ranges.closed(2, 8)));
+    assertEquals(Ranges.atMost(8), range.span(Ranges.atMost(8)));
+
+    // enclosing, exterior
+    assertEquals(Ranges.closed(2, 10), range.span(Ranges.closed(2, 10)));
+    assertEquals(Ranges.<Integer>all(), range.span(Ranges.<Integer>all()));
+
+    // overlap above
+    assertEquals(Ranges.closed(4, 10), range.span(Ranges.closed(6, 10)));
+    assertEquals(Ranges.atLeast(4), range.span(Ranges.atLeast(6)));
+
+    // adjacent above
+    assertEquals(Ranges.closed(4, 10), range.span(Ranges.openClosed(8, 10)));
+    assertEquals(Ranges.atLeast(4), range.span(Ranges.greaterThan(8)));
+
+    // separate above
+    assertEquals(Ranges.closed(4, 12), range.span(Ranges.closed(10, 12)));
+    assertEquals(Ranges.atLeast(4), range.span(Ranges.atLeast(10)));
+  }
+
+  public void testApply() {
+    Predicate<Integer> predicate = Ranges.closed(2, 3);
+    assertFalse(predicate.apply(1));
+    assertTrue(predicate.apply(2));
+    assertTrue(predicate.apply(3));
+    assertFalse(predicate.apply(4));
+  }
+
+  public void testEquals() {
+    new EqualsTester()
+        .addEqualityGroup(Ranges.open(1, 5),
+            Ranges.range(1, OPEN, 5, OPEN))
+        .addEqualityGroup(Ranges.greaterThan(2), Ranges.greaterThan(2))
+        .addEqualityGroup(Ranges.all(), Ranges.all())
+        .addEqualityGroup("Phil")
+        .testEquals();
+  }
+
+  public void testLegacyComparable() {
+    Range<LegacyComparable> range
+        = Ranges.closed(LegacyComparable.X, LegacyComparable.Y);
+  }
+
+  private static final DiscreteDomain<Integer> UNBOUNDED_DOMAIN =
+      new DiscreteDomain<Integer>() {
+        @Override public Integer next(Integer value) {
+          return DiscreteDomains.integers().next(value);
+        }
+
+        @Override public Integer previous(Integer value) {
+          return DiscreteDomains.integers().previous(value);
+        }
+
+        @Override public long distance(Integer start, Integer end) {
+          return DiscreteDomains.integers().distance(start, end);
+        }
+      };
+
+  public void testAsSet_noMin() {
+    Range<Integer> range = Ranges.lessThan(0);
+    try {
+      range.asSet(UNBOUNDED_DOMAIN);
+      fail();
+    } catch (IllegalArgumentException expected) {}
+  }
+
+  public void testAsSet_noMax() {
+    Range<Integer> range = Ranges.greaterThan(0);
+    try {
+      range.asSet(UNBOUNDED_DOMAIN);
+      fail();
+    } catch (IllegalArgumentException expected) {}
+  }
+
+  public void testAsSet_empty() {
+    assertEquals(ImmutableSet.of(), Ranges.closedOpen(1, 1).asSet(integers()));
+    assertEquals(ImmutableSet.of(), Ranges.openClosed(5, 5).asSet(integers()));
+    assertEquals(ImmutableSet.of(), Ranges.lessThan(Integer.MIN_VALUE).asSet(integers()));
+    assertEquals(ImmutableSet.of(), Ranges.greaterThan(Integer.MAX_VALUE).asSet(integers()));
+  }
+
+  public void testCanonical() {
+    assertEquals(Ranges.closedOpen(1, 5),
+        Ranges.closed(1, 4).canonical(integers()));
+    assertEquals(Ranges.closedOpen(1, 5),
+        Ranges.open(0, 5).canonical(integers()));
+    assertEquals(Ranges.closedOpen(1, 5),
+        Ranges.closedOpen(1, 5).canonical(integers()));
+    assertEquals(Ranges.closedOpen(1, 5),
+        Ranges.openClosed(0, 4).canonical(integers()));
+
+    assertEquals(Ranges.closedOpen(Integer.MIN_VALUE, 0),
+        Ranges.closedOpen(Integer.MIN_VALUE, 0).canonical(integers()));
+
+    assertEquals(Ranges.closedOpen(Integer.MIN_VALUE, 0),
+        Ranges.lessThan(0).canonical(integers()));
+    assertEquals(Ranges.closedOpen(Integer.MIN_VALUE, 1),
+        Ranges.atMost(0).canonical(integers()));
+    assertEquals(Ranges.atLeast(0), Ranges.atLeast(0).canonical(integers()));
+    assertEquals(Ranges.atLeast(1), Ranges.greaterThan(0).canonical(integers()));
+
+    assertEquals(Ranges.atLeast(Integer.MIN_VALUE), Ranges.<Integer>all().canonical(integers()));
+  }
+
+  public void testCanonical_unboundedDomain() {
+    assertEquals(Ranges.lessThan(0), Ranges.lessThan(0).canonical(UNBOUNDED_DOMAIN));
+    assertEquals(Ranges.lessThan(1), Ranges.atMost(0).canonical(UNBOUNDED_DOMAIN));
+    assertEquals(Ranges.atLeast(0), Ranges.atLeast(0).canonical(UNBOUNDED_DOMAIN));
+    assertEquals(Ranges.atLeast(1), Ranges.greaterThan(0).canonical(UNBOUNDED_DOMAIN));
+
+    assertEquals(Ranges.all(), Ranges.<Integer>all().canonical(UNBOUNDED_DOMAIN));
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/RangesTest.java b/guava-tests/test/com/google/common/collect/RangesTest.java
new file mode 100644
index 0000000..a7caf67
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/RangesTest.java
@@ -0,0 +1,96 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.collect.BoundType.CLOSED;
+import static com.google.common.collect.BoundType.OPEN;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.testing.EqualsTester;
+
+import junit.framework.TestCase;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.NoSuchElementException;
+
+/**
+ * @author Gregory Kick
+ */
+@GwtCompatible
+public class RangesTest extends TestCase {
+  public void testSingleton() {
+    assertEquals(Ranges.closed(0, 0), Ranges.singleton(0));
+    assertEquals(Ranges.closed(9, 9), Ranges.singleton(9));
+  }
+
+  public void testEncloseAll() {
+    assertEquals(Ranges.closed(0, 0), Ranges.encloseAll(Arrays.asList(0)));
+    assertEquals(Ranges.closed(-3, 5), Ranges.encloseAll(Arrays.asList(5, -3)));
+    assertEquals(Ranges.closed(-3, 5), Ranges.encloseAll(Arrays.asList(1, 2, 2, 2, 5, -3, 0, -1)));
+  }
+
+  public void testEncloseAll_empty() {
+    try {
+      Ranges.encloseAll(ImmutableSet.<Integer>of());
+      fail();
+    } catch (NoSuchElementException expected) {}
+  }
+
+  public void testEncloseAll_nullValue() {
+    List<Integer> nullFirst = Lists.newArrayList(null, 0);
+    try {
+      Ranges.encloseAll(nullFirst);
+      fail();
+    } catch (NullPointerException expected) {}
+    List<Integer> nullNotFirst = Lists.newArrayList(0, null);
+    try {
+      Ranges.encloseAll(nullNotFirst);
+      fail();
+    } catch (NullPointerException expected) {}
+  }
+
+  public void testEquivalentFactories() {
+    new EqualsTester()
+        .addEqualityGroup(Ranges.all())
+        .addEqualityGroup(
+            Ranges.atLeast(1),
+            Ranges.downTo(1, CLOSED))
+        .addEqualityGroup(
+            Ranges.greaterThan(1),
+            Ranges.downTo(1, OPEN))
+        .addEqualityGroup(
+            Ranges.atMost(7),
+            Ranges.upTo(7, CLOSED))
+        .addEqualityGroup(
+            Ranges.lessThan(7),
+            Ranges.upTo(7, OPEN))
+        .addEqualityGroup(
+            Ranges.open(1, 7),
+            Ranges.range(1, OPEN, 7, OPEN))
+        .addEqualityGroup(
+            Ranges.openClosed(1, 7),
+            Ranges.range(1, OPEN, 7, CLOSED))
+        .addEqualityGroup(
+            Ranges.closed(1, 7),
+            Ranges.range(1, CLOSED, 7, CLOSED))
+        .addEqualityGroup(
+            Ranges.closedOpen(1, 7),
+            Ranges.range(1, CLOSED, 7, OPEN))
+        .testEquals();
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/RegularImmutableTableTest.java b/guava-tests/test/com/google/common/collect/RegularImmutableTableTest.java
new file mode 100644
index 0000000..13332a5
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/RegularImmutableTableTest.java
@@ -0,0 +1,193 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import com.google.common.collect.RegularImmutableTable.DenseImmutableTable;
+import com.google.common.collect.RegularImmutableTable.SparseImmutableTable;
+import com.google.common.collect.Table.Cell;
+
+/**
+ * @author gak@google.com (Gregory Kick)
+ */
+public class RegularImmutableTableTest extends AbstractImmutableTableTest {
+  private static final ImmutableSet<Cell<Character, Integer, String>> CELLS =
+    ImmutableSet.of(
+        Tables.immutableCell('a', 1, "foo"),
+        Tables.immutableCell('b', 1, "bar"),
+        Tables.immutableCell('a', 2, "baz"));
+
+  private static final ImmutableSet<Character> ROW_SPACE =
+      ImmutableSet.of('a', 'b');
+
+  private static final ImmutableSet<Integer> COLUMN_SPACE =
+      ImmutableSet.of(1, 2);
+
+  private static final SparseImmutableTable<Character, Integer, String> SPARSE =
+      new SparseImmutableTable<Character, Integer, String>(CELLS, ROW_SPACE,
+          COLUMN_SPACE);
+
+  private static final DenseImmutableTable<Character, Integer, String> DENSE =
+      new DenseImmutableTable<Character, Integer, String>(CELLS, ROW_SPACE,
+          COLUMN_SPACE);
+
+  @Override Iterable<ImmutableTable<Character, Integer, String>>
+      getTestInstances() {
+    return ImmutableList.<ImmutableTable<Character, Integer, String>>of(SPARSE,
+        DENSE);
+  }
+
+  public void testCellSet() {
+    for (ImmutableTable<Character, Integer, String> testInstance :
+        getTestInstances()) {
+      assertEquals(CELLS, testInstance.cellSet());
+    }
+  }
+
+  public void testValues() {
+    for (ImmutableTable<Character, Integer, String> testInstance :
+        getTestInstances()) {
+      ASSERT.that(testInstance.values()).hasContentsInOrder("foo", "bar",
+          "baz");
+    }
+  }
+
+  public void testSize() {
+    for (ImmutableTable<Character, Integer, String> testInstance :
+        getTestInstances()) {
+      assertEquals(3, testInstance.size());
+    }
+  }
+
+  public void testContainsValue() {
+    for (ImmutableTable<Character, Integer, String> testInstance :
+        getTestInstances()) {
+      assertTrue(testInstance.containsValue("foo"));
+      assertTrue(testInstance.containsValue("bar"));
+      assertTrue(testInstance.containsValue("baz"));
+      assertFalse(testInstance.containsValue("blah"));
+    }
+  }
+
+  public void testIsEmpty() {
+    for (ImmutableTable<Character, Integer, String> testInstance :
+        getTestInstances()) {
+      assertFalse(testInstance.isEmpty());
+    }
+  }
+
+  public void testForCells() {
+    assertTrue(RegularImmutableTable.forCells(CELLS) instanceof
+        DenseImmutableTable<?, ?, ?>);
+    assertTrue(RegularImmutableTable.forCells(ImmutableSet.of(
+        Tables.immutableCell('a', 1, "blah"),
+        Tables.immutableCell('b', 2, "blah"),
+        Tables.immutableCell('c', 3, "blah"))) instanceof
+        SparseImmutableTable<?, ?, ?>);
+  }
+
+  public void testGet() {
+    for (ImmutableTable<Character, Integer, String> testInstance :
+        getTestInstances()) {
+      assertEquals("foo", testInstance.get('a', 1));
+      assertEquals("bar", testInstance.get('b', 1));
+      assertEquals("baz", testInstance.get('a', 2));
+      assertNull(testInstance.get('b', 2));
+      assertNull(testInstance.get('c', 3));
+    }
+  }
+
+  public void testColumn() {
+    for (ImmutableTable<Character, Integer, String> testInstance :
+        getTestInstances()) {
+      assertEquals(ImmutableMap.of('a', "foo", 'b', "bar"),
+          testInstance.column(1));
+      assertEquals(ImmutableMap.of('a', "baz"), testInstance.column(2));
+      assertEquals(ImmutableMap.of(), testInstance.column(3));
+    }
+  }
+
+  public void testColumnKeySet() {
+    for (ImmutableTable<Character, Integer, String> testInstance :
+        getTestInstances()) {
+      assertEquals(ImmutableSet.of(1, 2), testInstance.columnKeySet());
+    }
+  }
+
+  public void testColumnMap() {
+    for (ImmutableTable<Character, Integer, String> testInstance :
+        getTestInstances()) {
+      assertEquals(ImmutableMap.of(1, ImmutableMap.of('a', "foo", 'b', "bar"),
+          2, ImmutableMap.of('a', "baz")), testInstance.columnMap());
+    }
+  }
+
+  public void testContains() {
+    for (ImmutableTable<Character, Integer, String> testInstance :
+        getTestInstances()) {
+      assertTrue(testInstance.contains('a', 1));
+      assertTrue(testInstance.contains('b', 1));
+      assertTrue(testInstance.contains('a', 2));
+      assertFalse(testInstance.contains('b', 2));
+      assertFalse(testInstance.contains('c', 3));
+    }
+  }
+
+  public void testContainsColumn() {
+    for (ImmutableTable<Character, Integer, String> testInstance :
+        getTestInstances()) {
+      assertTrue(testInstance.containsColumn(1));
+      assertTrue(testInstance.containsColumn(2));
+      assertFalse(testInstance.containsColumn(3));
+    }
+  }
+
+  public void testContainsRow() {
+    for (ImmutableTable<Character, Integer, String> testInstance :
+        getTestInstances()) {
+      assertTrue(testInstance.containsRow('a'));
+      assertTrue(testInstance.containsRow('b'));
+      assertFalse(testInstance.containsRow('c'));
+    }
+  }
+
+  public void testRow() {
+    for (ImmutableTable<Character, Integer, String> testInstance :
+        getTestInstances()) {
+      assertEquals(ImmutableMap.of(1, "foo", 2, "baz"),
+          testInstance.row('a'));
+      assertEquals(ImmutableMap.of(1, "bar"), testInstance.row('b'));
+      assertEquals(ImmutableMap.of(), testInstance.row('c'));
+    }
+  }
+
+  public void testRowKeySet() {
+    for (ImmutableTable<Character, Integer, String> testInstance :
+        getTestInstances()) {
+      assertEquals(ImmutableSet.of('a', 'b'), testInstance.rowKeySet());
+    }
+  }
+
+  public void testRowMap() {
+    for (ImmutableTable<Character, Integer, String> testInstance :
+        getTestInstances()) {
+      assertEquals(ImmutableMap.of('a', ImmutableMap.of(1, "foo", 2, "baz"),
+          'b', ImmutableMap.of(1, "bar")), testInstance.rowMap());
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/SetOperationsTest.java b/guava-tests/test/com/google/common/collect/SetOperationsTest.java
new file mode 100644
index 0000000..4b43c0a
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/SetOperationsTest.java
@@ -0,0 +1,350 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static java.util.Arrays.asList;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.collect.testing.SetTestSuiteBuilder;
+import com.google.common.collect.testing.TestStringSetGenerator;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * Unit tests for {@link Sets#union}, {@link Sets#intersection} and
+ * {@link Sets#difference}.
+ *
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible
+public class SetOperationsTest extends TestCase {
+  public static Test suite() {
+    TestSuite suite = new TestSuite();
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+          @Override protected Set<String> create(String[] elements) {
+            return Sets.union(
+                Sets.<String>newHashSet(), Sets.<String>newHashSet());
+          }
+        })
+        .named("empty U empty")
+        .withFeatures(CollectionSize.ZERO, CollectionFeature.NONE,
+            CollectionFeature.ALLOWS_NULL_VALUES)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+          @Override protected Set<String> create(String[] elements) {
+            checkArgument(elements.length == 1);
+            return Sets.union(
+                Sets.<String>newHashSet(elements), Sets.newHashSet(elements));
+          }
+        })
+        .named("singleton U itself")
+        .withFeatures(CollectionSize.ONE, CollectionFeature.ALLOWS_NULL_VALUES)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+          @Override protected Set<String> create(String[] elements) {
+            return Sets.union(
+                Sets.<String>newHashSet(), Sets.newHashSet(elements));
+          }
+        })
+        .named("empty U set")
+        .withFeatures(CollectionSize.ONE, CollectionSize.SEVERAL,
+            CollectionFeature.ALLOWS_NULL_VALUES)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+          @Override protected Set<String> create(String[] elements) {
+            return Sets.union(
+                Sets.newHashSet(elements), Sets.<String>newHashSet());
+          }
+        })
+        .named("set U empty")
+        .withFeatures(CollectionSize.ONE, CollectionSize.SEVERAL,
+            CollectionFeature.ALLOWS_NULL_VALUES)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+          @Override protected Set<String> create(String[] elements) {
+            checkArgument(elements.length == 3);
+            // Put the sets in different orders for the hell of it
+            return Sets.union(
+                Sets.newLinkedHashSet(asList(elements)),
+                Sets.newLinkedHashSet(
+                    asList(elements[1], elements[0], elements[2])));
+          }
+        })
+        .named("set U itself")
+        .withFeatures(CollectionSize.SEVERAL,
+            CollectionFeature.ALLOWS_NULL_VALUES)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+          @Override protected Set<String> create(String[] elements) {
+            checkArgument(elements.length == 3);
+            return Sets.union(
+                Sets.newHashSet(elements[0]),
+                Sets.newHashSet(elements[1], elements[2]));
+          }
+        })
+        .named("union of disjoint")
+        .withFeatures(CollectionSize.SEVERAL,
+            CollectionFeature.ALLOWS_NULL_VALUES)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+          @Override protected Set<String> create(String[] elements) {
+            return Sets.union(
+                Sets.<String>newHashSet(elements[0], elements[1]),
+                Sets.newHashSet(elements[1], elements[2]));
+          }
+        })
+        .named("venn")
+        .withFeatures(CollectionSize.SEVERAL,
+            CollectionFeature.ALLOWS_NULL_VALUES)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+          @Override protected Set<String> create(String[] elements) {
+            return Sets.intersection(
+                Sets.<String>newHashSet(), Sets.<String>newHashSet());
+          }
+        })
+        .named("empty & empty")
+        .withFeatures(CollectionSize.ZERO, CollectionFeature.NONE,
+            CollectionFeature.ALLOWS_NULL_VALUES)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+          @Override protected Set<String> create(String[] elements) {
+            return Sets.intersection(
+                Sets.<String>newHashSet(), Sets.newHashSet((String) null));
+          }
+        })
+        .named("empty & singleton")
+        .withFeatures(CollectionSize.ZERO, CollectionFeature.NONE,
+            CollectionFeature.ALLOWS_NULL_VALUES)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+          @Override protected Set<String> create(String[] elements) {
+            return Sets.intersection(
+                Sets.newHashSet("a", "b"), Sets.newHashSet("c", "d"));
+          }
+        })
+        .named("intersection of disjoint")
+        .withFeatures(CollectionSize.ZERO, CollectionFeature.NONE,
+            CollectionFeature.ALLOWS_NULL_VALUES)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+          @Override protected Set<String> create(String[] elements) {
+            return Sets.intersection(
+                Sets.newHashSet(elements), Sets.newHashSet(elements));
+          }
+        })
+        .named("set & itself")
+        .withFeatures(CollectionSize.ONE, CollectionSize.SEVERAL,
+            CollectionFeature.ALLOWS_NULL_VALUES)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+          @Override protected Set<String> create(String[] elements) {
+            return Sets.intersection(
+                Sets.newHashSet("a", elements[0], "b"),
+                Sets.newHashSet("c", elements[0], "d"));
+          }
+        })
+        .named("intersection with overlap of one")
+        .withFeatures(CollectionSize.ONE, CollectionFeature.ALLOWS_NULL_VALUES)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+          @Override protected Set<String> create(String[] elements) {
+            return Sets.difference(
+                Sets.<String>newHashSet(), Sets.<String>newHashSet());
+          }
+        })
+        .named("empty - empty")
+        .withFeatures(CollectionSize.ZERO, CollectionFeature.NONE,
+            CollectionFeature.ALLOWS_NULL_VALUES)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+          @Override protected Set<String> create(String[] elements) {
+            return Sets.difference(Sets.newHashSet("a"), Sets.newHashSet("a"));
+          }
+        })
+        .named("singleton - itself")
+        .withFeatures(CollectionSize.ZERO, CollectionFeature.NONE,
+            CollectionFeature.ALLOWS_NULL_VALUES)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+          @Override protected Set<String> create(String[] elements) {
+            Set<String> set = Sets.newHashSet("b", "c");
+            Set<String> other = Sets.newHashSet("a", "b", "c", "d");
+            return Sets.difference(set, other);
+          }
+        })
+        .named("set - superset")
+        .withFeatures(CollectionSize.ZERO, CollectionFeature.NONE,
+            CollectionFeature.ALLOWS_NULL_VALUES)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+          @Override protected Set<String> create(String[] elements) {
+            Set<String> set = Sets.newHashSet(elements);
+            Set<String> other = Sets.newHashSet("wz", "xq");
+            set.addAll(other);
+            other.add("pq");
+            return Sets.difference(set, other);
+          }
+        })
+        .named("set - set")
+        .withFeatures(CollectionSize.ANY, CollectionFeature.ALLOWS_NULL_VALUES,
+            CollectionFeature.ALLOWS_NULL_VALUES)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+          @Override protected Set<String> create(String[] elements) {
+            return Sets.difference(
+                Sets.newHashSet(elements), Sets.newHashSet());
+          }
+        })
+        .named("set - empty")
+        .withFeatures(CollectionSize.ONE, CollectionSize.SEVERAL,
+            CollectionFeature.ALLOWS_NULL_VALUES)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+          @Override protected Set<String> create(String[] elements) {
+            return Sets.difference(
+                Sets.<String>newHashSet(elements), Sets.newHashSet("xx", "xq"));
+          }
+        })
+        .named("set - disjoint")
+        .withFeatures(CollectionSize.ANY, CollectionFeature.ALLOWS_NULL_VALUES)
+        .createTestSuite());
+
+    suite.addTestSuite(MoreTests.class);
+    return suite;
+  }
+
+  public static class MoreTests extends TestCase {
+    Set<String> friends;
+    Set<String> enemies;
+
+    @Override public void setUp() {
+      friends = Sets.newHashSet("Tom", "Joe", "Dave");
+      enemies = Sets.newHashSet("Dick", "Harry", "Tom");
+    }
+
+    public void testUnion() {
+      Set<String> all = Sets.union(friends, enemies);
+      assertEquals(5, all.size());
+
+      ImmutableSet<String> immut = Sets.union(friends, enemies).immutableCopy();
+      HashSet<String> mut
+          = Sets.union(friends, enemies).copyInto(new HashSet<String>());
+
+      enemies.add("Buck");
+      assertEquals(6, all.size());
+      assertEquals(5, immut.size());
+      assertEquals(5, mut.size());
+    }
+
+    public void testIntersection() {
+      Set<String> friends = Sets.newHashSet("Tom", "Joe", "Dave");
+      Set<String> enemies = Sets.newHashSet("Dick", "Harry", "Tom");
+
+      Set<String> frenemies = Sets.intersection(friends, enemies);
+      assertEquals(1, frenemies.size());
+
+      ImmutableSet<String> immut
+          = Sets.intersection(friends, enemies).immutableCopy();
+      HashSet<String> mut
+          = Sets.intersection(friends, enemies).copyInto(new HashSet<String>());
+
+      enemies.add("Joe");
+      assertEquals(2, frenemies.size());
+      assertEquals(1, immut.size());
+      assertEquals(1, mut.size());
+    }
+
+    public void testDifference() {
+      Set<String> friends = Sets.newHashSet("Tom", "Joe", "Dave");
+      Set<String> enemies = Sets.newHashSet("Dick", "Harry", "Tom");
+
+      Set<String> goodFriends = Sets.difference(friends, enemies);
+      assertEquals(2, goodFriends.size());
+
+      ImmutableSet<String> immut
+          = Sets.difference(friends, enemies).immutableCopy();
+      HashSet<String> mut
+          = Sets.difference(friends, enemies).copyInto(new HashSet<String>());
+
+      enemies.add("Dave");
+      assertEquals(1, goodFriends.size());
+      assertEquals(2, immut.size());
+      assertEquals(2, mut.size());
+    }
+
+    public void testSymmetricDifference() {
+      Set<String> friends = Sets.newHashSet("Tom", "Joe", "Dave");
+      Set<String> enemies = Sets.newHashSet("Dick", "Harry", "Tom");
+
+      Set<String> symmetricDifferenceFriendsFirst = Sets.symmetricDifference(
+          friends, enemies);
+      assertEquals(4, symmetricDifferenceFriendsFirst.size());
+
+      Set<String> symmetricDifferenceEnemiesFirst = Sets.symmetricDifference(
+          enemies, friends);
+      assertEquals(4, symmetricDifferenceEnemiesFirst.size());
+
+      assertEquals(symmetricDifferenceFriendsFirst,
+          symmetricDifferenceEnemiesFirst);
+
+      ImmutableSet<String> immut
+          = Sets.symmetricDifference(friends, enemies).immutableCopy();
+      HashSet<String> mut = Sets.symmetricDifference(friends, enemies)
+          .copyInto(new HashSet<String>());
+
+      enemies.add("Dave");
+      assertEquals(3, symmetricDifferenceFriendsFirst.size());
+      assertEquals(4, immut.size());
+      assertEquals(4, mut.size());
+
+      immut = Sets.symmetricDifference(enemies, friends).immutableCopy();
+      mut = Sets.symmetricDifference(enemies, friends).
+          copyInto(new HashSet<String>());
+      friends.add("Harry");
+      assertEquals(2, symmetricDifferenceEnemiesFirst.size());
+      assertEquals(3, immut.size());
+      assertEquals(3, mut.size());
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/SetsTest.java b/guava-tests/test/com/google/common/collect/SetsTest.java
new file mode 100644
index 0000000..4dc847b
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/SetsTest.java
@@ -0,0 +1,1101 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.collect.Iterables.unmodifiableIterable;
+import static com.google.common.collect.Sets.newEnumSet;
+import static com.google.common.collect.Sets.newHashSet;
+import static com.google.common.collect.Sets.powerSet;
+import static com.google.common.collect.testing.IteratorFeature.UNMODIFIABLE;
+import static com.google.common.collect.testing.testers.CollectionIteratorTester.getIteratorKnownOrderRemoveSupportedMethod;
+import static java.io.ObjectStreamConstants.TC_REFERENCE;
+import static java.io.ObjectStreamConstants.baseWireHandle;
+import static java.util.Collections.emptySet;
+import static java.util.Collections.singleton;
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.base.Predicate;
+import com.google.common.base.Predicates;
+import com.google.common.collect.testing.AnEnum;
+import com.google.common.collect.testing.IteratorTester;
+import com.google.common.collect.testing.MinimalIterable;
+import com.google.common.collect.testing.SetTestSuiteBuilder;
+import com.google.common.collect.testing.TestEnumSetGenerator;
+import com.google.common.collect.testing.TestStringSetGenerator;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.SetFeature;
+import com.google.common.testing.EqualsTester;
+import com.google.common.testing.NullPointerTester;
+import com.google.common.testing.SerializableTester;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.EnumSet;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.NoSuchElementException;
+import java.util.Set;
+import java.util.SortedSet;
+import java.util.TreeSet;
+
+import javax.annotation.Nullable;
+
+/**
+ * Unit test for {@code Sets}.
+ *
+ * @author Kevin Bourrillion
+ * @author Jared Levy
+ */
+@GwtCompatible(emulated = true)
+public class SetsTest extends TestCase {
+
+  private static final IteratorTester.KnownOrder KNOWN_ORDER =
+      IteratorTester.KnownOrder.KNOWN_ORDER;
+
+  private static final Collection<Integer> EMPTY_COLLECTION
+      = Arrays.<Integer>asList();
+
+  private static final Collection<Integer> SOME_COLLECTION
+      = Arrays.asList(0, 1, 1);
+
+  private static final Iterable<Integer> SOME_ITERABLE
+      = new Iterable<Integer>() {
+        @Override
+        public Iterator<Integer> iterator() {
+          return SOME_COLLECTION.iterator();
+        }
+      };
+
+  private static final List<Integer> LONGER_LIST
+      = Arrays.asList(8, 6, 7, 5, 3, 0, 9);
+
+  private static final Comparator<Integer> SOME_COMPARATOR
+      = Collections.reverseOrder();
+
+  @GwtIncompatible("suite")
+  public static Test suite() {
+    TestSuite suite = new TestSuite();
+    suite.addTestSuite(SetsTest.class);
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+          @Override protected Set<String> create(String[] elements) {
+            int size = elements.length;
+            // Remove last element, if size > 1
+            Set<String> set1 = (size > 1)
+                ? Sets.newHashSet(
+                    Arrays.asList(elements).subList(0, size - 1))
+                : Sets.newHashSet(elements);
+            // Remove first element, if size > 0
+            Set<String> set2 = (size > 0)
+                ? Sets.newHashSet(
+                    Arrays.asList(elements).subList(1, size))
+                : Sets.<String>newHashSet();
+            return Sets.union(set1, set2);
+          }
+        })
+        .named("Sets.union")
+        .withFeatures(CollectionSize.ANY, CollectionFeature.ALLOWS_NULL_VALUES)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+          @Override protected Set<String> create(String[] elements) {
+            Set<String> set1 = Sets.newHashSet(elements);
+            set1.add(samples().e3);
+            Set<String> set2 = Sets.newHashSet(elements);
+            set2.add(samples().e4);
+            return Sets.intersection(set1, set2);
+          }
+        })
+        .named("Sets.intersection")
+        .withFeatures(CollectionSize.ANY, CollectionFeature.ALLOWS_NULL_VALUES)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+          @Override protected Set<String> create(String[] elements) {
+            Set<String> set1 = Sets.newHashSet(elements);
+            set1.add(samples().e3);
+            Set<String> set2 = Sets.newHashSet(samples().e3);
+            return Sets.difference(set1, set2);
+          }
+        })
+        .named("Sets.difference")
+        .withFeatures(CollectionSize.ANY, CollectionFeature.ALLOWS_NULL_VALUES)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestEnumSetGenerator() {
+          @Override protected Set<AnEnum> create(AnEnum[] elements) {
+            AnEnum[] otherElements = new AnEnum[elements.length - 1];
+            System.arraycopy(
+                elements, 1, otherElements, 0, otherElements.length);
+            return Sets.immutableEnumSet(elements[0], otherElements);
+          }
+        })
+        .named("Sets.immutableEnumSet")
+        .withFeatures(CollectionSize.ONE, CollectionSize.SEVERAL,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .createTestSuite());
+
+    suite.addTest(testsForFilter());
+    suite.addTest(testsForFilterNoNulls());
+    suite.addTest(testsForFilterFiltered());
+
+    return suite;
+  }
+
+  @GwtIncompatible("suite")
+  private static Test testsForFilter() {
+    return SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+          @Override public Set<String> create(String[] elements) {
+            Set<String> unfiltered = Sets.newLinkedHashSet();
+            unfiltered.add("yyy");
+            unfiltered.addAll(Arrays.asList(elements));
+            unfiltered.add("zzz");
+            return Sets.filter(unfiltered, Collections2Test.NOT_YYY_ZZZ);
+          }
+        })
+        .named("Sets.filter")
+        .withFeatures(
+            SetFeature.GENERAL_PURPOSE,
+            CollectionFeature.ALLOWS_NULL_VALUES,
+            CollectionFeature.KNOWN_ORDER,
+            CollectionSize.ANY)
+        .suppressing(getIteratorKnownOrderRemoveSupportedMethod())
+        .createTestSuite();
+  }
+
+  @GwtIncompatible("suite")
+  private static Test testsForFilterNoNulls() {
+    return SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+          @Override public Set<String> create(String[] elements) {
+            Set<String> unfiltered = Sets.newLinkedHashSet();
+            unfiltered.add("yyy");
+            unfiltered.addAll(ImmutableList.copyOf(elements));
+            unfiltered.add("zzz");
+            return Sets.filter(unfiltered, Collections2Test.LENGTH_1);
+          }
+        })
+        .named("Sets.filter, no nulls")
+        .withFeatures(
+            SetFeature.GENERAL_PURPOSE,
+            CollectionFeature.KNOWN_ORDER,
+            CollectionSize.ANY,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .suppressing(getIteratorKnownOrderRemoveSupportedMethod())
+        .createTestSuite();
+  }
+
+  @GwtIncompatible("suite")
+  private static Test testsForFilterFiltered() {
+    return SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+          @Override public Set<String> create(String[] elements) {
+            Set<String> unfiltered = Sets.newLinkedHashSet();
+            unfiltered.add("yyy");
+            unfiltered.addAll(ImmutableList.copyOf(elements));
+            unfiltered.add("zzz");
+            unfiltered.add("abc");
+            return Sets.filter(
+                Sets.filter(unfiltered, Collections2Test.LENGTH_1),
+                Collections2Test.NOT_YYY_ZZZ);
+          }
+        })
+        .named("Sets.filter, filtered input")
+        .withFeatures(
+            SetFeature.GENERAL_PURPOSE,
+            CollectionFeature.KNOWN_ORDER,
+            CollectionSize.ANY,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .suppressing(getIteratorKnownOrderRemoveSupportedMethod())
+        .createTestSuite();
+  }
+
+  private enum SomeEnum { A, B, C, D }
+
+  public void testImmutableEnumSet() {
+    Set<SomeEnum> units = Sets.immutableEnumSet(SomeEnum.D, SomeEnum.B);
+
+    ASSERT.that(units).hasContentsInOrder(SomeEnum.B, SomeEnum.D);
+    try {
+      units.remove(SomeEnum.B);
+      fail("ImmutableEnumSet should throw an exception on remove()");
+    } catch (UnsupportedOperationException expected) {}
+    try {
+      units.add(SomeEnum.C);
+      fail("ImmutableEnumSet should throw an exception on add()");
+    } catch (UnsupportedOperationException expected) {}
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testImmutableEnumSet_serialized() {
+    Set<SomeEnum> units = Sets.immutableEnumSet(SomeEnum.D, SomeEnum.B);
+
+    ASSERT.that(units).hasContentsInOrder(SomeEnum.B, SomeEnum.D);
+
+    Set<SomeEnum> copy = SerializableTester.reserializeAndAssert(units);
+    assertTrue(copy instanceof ImmutableEnumSet);
+  }
+
+  public void testImmutableEnumSet_fromIterable() {
+    ImmutableSet<SomeEnum> none
+        = Sets.immutableEnumSet(MinimalIterable.<SomeEnum>of());
+    ASSERT.that(none).hasContentsInOrder();
+
+    ImmutableSet<SomeEnum> one
+        = Sets.immutableEnumSet(MinimalIterable.of(SomeEnum.B));
+    ASSERT.that(one).hasContentsInOrder(SomeEnum.B);
+
+    ImmutableSet<SomeEnum> two
+        = Sets.immutableEnumSet(MinimalIterable.of(SomeEnum.D, SomeEnum.B));
+    ASSERT.that(two).hasContentsInOrder(SomeEnum.B, SomeEnum.D);
+  }
+
+  @GwtIncompatible("java serialization not supported in GWT.")
+  public void testImmutableEnumSet_deserializationMakesDefensiveCopy()
+      throws Exception {
+    ImmutableSet<SomeEnum> original =
+        Sets.immutableEnumSet(SomeEnum.A, SomeEnum.B);
+    int handleOffset = 6;
+    byte[] serializedForm = serializeWithBackReference(original, handleOffset);
+    ObjectInputStream in =
+        new ObjectInputStream(new ByteArrayInputStream(serializedForm));
+
+    ImmutableSet<?> deserialized = (ImmutableSet<?>) in.readObject();
+    EnumSet<?> delegate = (EnumSet<?>) in.readObject();
+
+    assertEquals(original, deserialized);
+    assertTrue(delegate.remove(SomeEnum.A));
+    assertTrue(deserialized.contains(SomeEnum.A));
+  }
+
+  @GwtIncompatible("java serialization not supported in GWT.")
+  private static byte[] serializeWithBackReference(
+      Object original, int handleOffset) throws IOException {
+    ByteArrayOutputStream bos = new ByteArrayOutputStream();
+    ObjectOutputStream out = new ObjectOutputStream(bos);
+
+    out.writeObject(original);
+
+    byte[] handle = toByteArray(baseWireHandle + handleOffset);
+    byte[] ref = prepended(TC_REFERENCE, handle);
+    bos.write(ref);
+
+    return bos.toByteArray();
+  }
+
+  private static byte[] prepended(byte b, byte[] array) {
+    byte[] out = new byte[array.length + 1];
+    out[0] = b;
+    System.arraycopy(array, 0, out, 1, array.length);
+    return out;
+  }
+
+  @GwtIncompatible("java.nio.ByteBuffer")
+  private static byte[] toByteArray(int h) {
+    return ByteBuffer.allocate(4).putInt(h).array();
+  }
+
+  public void testNewEnumSet_empty() {
+    EnumSet<SomeEnum> copy =
+        newEnumSet(Collections.<SomeEnum>emptySet(), SomeEnum.class);
+    assertEquals(EnumSet.noneOf(SomeEnum.class), copy);
+  }
+
+  public void testNewEnumSet_enumSet() {
+    EnumSet<SomeEnum> set = EnumSet.of(SomeEnum.A, SomeEnum.D);
+    assertEquals(set, newEnumSet(set, SomeEnum.class));
+  }
+
+  public void testNewEnumSet_collection() {
+    Set<SomeEnum> set = ImmutableSet.of(SomeEnum.B, SomeEnum.C);
+    assertEquals(set, newEnumSet(set, SomeEnum.class));
+  }
+
+  public void testNewEnumSet_iterable() {
+    Set<SomeEnum> set = ImmutableSet.of(SomeEnum.A, SomeEnum.B, SomeEnum.C);
+    assertEquals(set, newEnumSet(unmodifiableIterable(set), SomeEnum.class));
+  }
+
+  public void testNewHashSetEmpty() {
+    HashSet<Integer> set = Sets.newHashSet();
+    verifySetContents(set, EMPTY_COLLECTION);
+  }
+
+  public void testNewHashSetVarArgs() {
+    HashSet<Integer> set = Sets.newHashSet(0, 1, 1);
+    verifySetContents(set, Arrays.asList(0, 1));
+  }
+
+  public void testNewHashSetFromCollection() {
+    HashSet<Integer> set = Sets.newHashSet(SOME_COLLECTION);
+    verifySetContents(set, SOME_COLLECTION);
+  }
+
+  public void testNewHashSetFromIterable() {
+    HashSet<Integer> set = Sets.newHashSet(SOME_ITERABLE);
+    verifySetContents(set, SOME_ITERABLE);
+  }
+
+  public void testNewHashSetWithExpectedSizeSmall() {
+    HashSet<Integer> set = Sets.newHashSetWithExpectedSize(0);
+    verifySetContents(set, EMPTY_COLLECTION);
+  }
+
+  public void testNewHashSetWithExpectedSizeLarge() {
+    HashSet<Integer> set = Sets.newHashSetWithExpectedSize(1000);
+    verifySetContents(set, EMPTY_COLLECTION);
+  }
+
+  public void testNewHashSetFromIterator() {
+    HashSet<Integer> set = Sets.newHashSet(SOME_COLLECTION.iterator());
+    verifySetContents(set, SOME_COLLECTION);
+  }
+
+  public void testNewLinkedHashSetEmpty() {
+    LinkedHashSet<Integer> set = Sets.newLinkedHashSet();
+    verifyLinkedHashSetContents(set, EMPTY_COLLECTION);
+  }
+
+  public void testNewLinkedHashSetFromCollection() {
+    LinkedHashSet<Integer> set = Sets.newLinkedHashSet(LONGER_LIST);
+    verifyLinkedHashSetContents(set, LONGER_LIST);
+  }
+
+  public void testNewLinkedHashSetFromIterable() {
+    LinkedHashSet<Integer> set = Sets.newLinkedHashSet(new Iterable<Integer>()
+    {
+      @Override
+      public Iterator<Integer> iterator() {
+        return LONGER_LIST.iterator();
+      }
+    });
+    verifyLinkedHashSetContents(set, LONGER_LIST);
+  }
+
+  public void testNewLinkedHashSetWithExpectedSizeSmall() {
+    LinkedHashSet<Integer> set = Sets.newLinkedHashSetWithExpectedSize(0);
+    verifySetContents(set, EMPTY_COLLECTION);
+  }
+
+  public void testNewLinkedHashSetWithExpectedSizeLarge() {
+    LinkedHashSet<Integer> set = Sets.newLinkedHashSetWithExpectedSize(1000);
+    verifySetContents(set, EMPTY_COLLECTION);
+  }
+
+  public void testNewTreeSetEmpty() {
+    TreeSet<Integer> set = Sets.newTreeSet();
+    verifySortedSetContents(set, EMPTY_COLLECTION, null);
+  }
+
+  public void testNewTreeSetEmptyDerived() {
+    TreeSet<Derived> set = Sets.newTreeSet();
+    assertTrue(set.isEmpty());
+    set.add(new Derived("foo"));
+    set.add(new Derived("bar"));
+    ASSERT.that(set).hasContentsInOrder(new Derived("bar"), new Derived("foo"));
+  }
+
+  public void testNewTreeSetEmptyNonGeneric() {
+    TreeSet<LegacyComparable> set = Sets.newTreeSet();
+    assertTrue(set.isEmpty());
+    set.add(new LegacyComparable("foo"));
+    set.add(new LegacyComparable("bar"));
+    ASSERT.that(set).hasContentsInOrder(new LegacyComparable("bar"), new LegacyComparable("foo"));
+  }
+
+  public void testNewTreeSetFromCollection() {
+    TreeSet<Integer> set = Sets.newTreeSet(SOME_COLLECTION);
+    verifySortedSetContents(set, SOME_COLLECTION, null);
+  }
+
+  public void testNewTreeSetFromIterable() {
+    TreeSet<Integer> set = Sets.newTreeSet(SOME_ITERABLE);
+    verifySortedSetContents(set, SOME_ITERABLE, null);
+  }
+
+  public void testNewTreeSetFromIterableDerived() {
+    Iterable<Derived> iterable =
+        Arrays.asList(new Derived("foo"), new Derived("bar"));
+    TreeSet<Derived> set = Sets.newTreeSet(iterable);
+    ASSERT.that(set).hasContentsInOrder(
+        new Derived("bar"), new Derived("foo"));
+  }
+
+  public void testNewTreeSetFromIterableNonGeneric() {
+    Iterable<LegacyComparable> iterable =
+        Arrays.asList(new LegacyComparable("foo"), new LegacyComparable("bar"));
+    TreeSet<LegacyComparable> set = Sets.newTreeSet(iterable);
+    ASSERT.that(set).hasContentsInOrder(
+        new LegacyComparable("bar"), new LegacyComparable("foo"));
+  }
+
+  public void testNewTreeSetEmptyWithComparator() {
+    TreeSet<Integer> set = Sets.newTreeSet(SOME_COMPARATOR);
+    verifySortedSetContents(set, EMPTY_COLLECTION, SOME_COMPARATOR);
+  }
+
+  public void testNewIdentityHashSet() {
+    Set<Integer> set = Sets.newIdentityHashSet();
+    Integer value1 = new Integer(12357);
+    Integer value2 = new Integer(12357);
+    assertTrue(set.add(value1));
+    assertFalse(set.contains(value2));
+    assertTrue(set.contains(value1));
+    assertTrue(set.add(value2));
+    assertEquals(2, set.size());
+  }
+
+  public void testComplementOfEnumSet() {
+    Set<SomeEnum> units = EnumSet.of(SomeEnum.B, SomeEnum.D);
+    EnumSet<SomeEnum> otherUnits = Sets.complementOf(units);
+    verifySetContents(otherUnits, EnumSet.of(SomeEnum.A, SomeEnum.C));
+  }
+
+  public void testComplementOfEnumSetWithType() {
+    Set<SomeEnum> units = EnumSet.of(SomeEnum.B, SomeEnum.D);
+    EnumSet<SomeEnum> otherUnits = Sets.complementOf(units, SomeEnum.class);
+    verifySetContents(otherUnits, EnumSet.of(SomeEnum.A, SomeEnum.C));
+  }
+
+  public void testComplementOfRegularSet() {
+    Set<SomeEnum> units = Sets.newHashSet(SomeEnum.B, SomeEnum.D);
+    EnumSet<SomeEnum> otherUnits = Sets.complementOf(units);
+    verifySetContents(otherUnits, EnumSet.of(SomeEnum.A, SomeEnum.C));
+  }
+
+  public void testComplementOfRegularSetWithType() {
+    Set<SomeEnum> units = Sets.newHashSet(SomeEnum.B, SomeEnum.D);
+    EnumSet<SomeEnum> otherUnits = Sets.complementOf(units, SomeEnum.class);
+    verifySetContents(otherUnits, EnumSet.of(SomeEnum.A, SomeEnum.C));
+  }
+
+  public void testComplementOfEmptySet() {
+    Set<SomeEnum> noUnits = Collections.emptySet();
+    EnumSet<SomeEnum> allUnits = Sets.complementOf(noUnits, SomeEnum.class);
+    verifySetContents(EnumSet.allOf(SomeEnum.class), allUnits);
+  }
+
+  public void testComplementOfFullSet() {
+    Set<SomeEnum> allUnits = Sets.newHashSet(SomeEnum.values());
+    EnumSet<SomeEnum> noUnits = Sets.complementOf(allUnits, SomeEnum.class);
+    verifySetContents(noUnits, EnumSet.noneOf(SomeEnum.class));
+  }
+
+  public void testComplementOfEmptyEnumSetWithoutType() {
+    Set<SomeEnum> noUnits = EnumSet.noneOf(SomeEnum.class);
+    EnumSet<SomeEnum> allUnits = Sets.complementOf(noUnits);
+    verifySetContents(allUnits, EnumSet.allOf(SomeEnum.class));
+  }
+
+  public void testComplementOfEmptySetWithoutTypeDoesntWork() {
+    Set<SomeEnum> set = Collections.emptySet();
+    try {
+      Sets.complementOf(set);
+      fail();
+    } catch (IllegalArgumentException expected) {}
+  }
+
+  @GwtIncompatible("NullPointerTester")
+  public void testNullPointerExceptions() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.setDefault(Enum.class, SomeEnum.A);
+
+    // TODO: make NPT create empty arrays for defaults automatically
+    tester.setDefault(Collection[].class, new Collection[0]);
+    tester.setDefault(Enum[].class, new Enum[0]);
+    tester.setDefault(Set[].class, new Set[0]);
+    tester.testAllPublicStaticMethods(Sets.class);
+  }
+
+  public void testNewSetFromMap() {
+    Set<Integer> set = Sets.newSetFromMap(new HashMap<Integer, Boolean>());
+    set.addAll(SOME_COLLECTION);
+    verifySetContents(set, SOME_COLLECTION);
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testNewSetFromMapSerialization() {
+    Set<Integer> set =
+        Sets.newSetFromMap(new LinkedHashMap<Integer, Boolean>());
+    set.addAll(SOME_COLLECTION);
+    Set<Integer> copy = SerializableTester.reserializeAndAssert(set);
+    ASSERT.that(copy).hasContentsInOrder(0, 1);
+  }
+
+  public void testNewSetFromMapIllegal() {
+    Map<Integer, Boolean> map = new LinkedHashMap<Integer, Boolean>();
+    map.put(2, true);
+    try {
+      Sets.newSetFromMap(map);
+      fail();
+    } catch (IllegalArgumentException expected) {}
+  }
+
+  // TODO: the overwhelming number of suppressions below suggests that maybe
+  // it's not worth having a varargs form of this method at all...
+
+  /**
+   * The 0-ary cartesian product is a single empty list.
+   */
+  @SuppressWarnings("unchecked") // varargs!
+  public void testCartesianProduct_zeroary() {
+    ASSERT.that(Sets.cartesianProduct()).hasContentsAnyOrder(list());
+  }
+
+  /**
+   * A unary cartesian product is one list of size 1 for each element in the
+   * input set.
+   */
+  @SuppressWarnings("unchecked") // varargs!
+  public void testCartesianProduct_unary() {
+    ASSERT.that(Sets.cartesianProduct(set(1, 2))).hasContentsAnyOrder(list(1), list(2));
+  }
+
+  @SuppressWarnings("unchecked") // varargs!
+  public void testCartesianProduct_binary0x0() {
+    Set<Integer> mt = emptySet();
+    assertEmpty(Sets.cartesianProduct(mt, mt));
+  }
+
+  @SuppressWarnings("unchecked") // varargs!
+  public void testCartesianProduct_binary0x1() {
+    Set<Integer> mt = emptySet();
+    assertEmpty(Sets.cartesianProduct(mt, set(1)));
+  }
+
+  @SuppressWarnings("unchecked") // varargs!
+  public void testCartesianProduct_binary1x0() {
+    Set<Integer> mt = emptySet();
+    assertEmpty(Sets.cartesianProduct(set(1), mt));
+  }
+
+  private static void assertEmpty(Set<? extends List<?>> set) {
+    assertTrue(set.isEmpty());
+    assertEquals(0, set.size());
+    assertFalse(set.iterator().hasNext());
+  }
+
+  @SuppressWarnings("unchecked") // varargs!
+  public void testCartesianProduct_binary1x1() {
+    ASSERT.that(Sets.cartesianProduct(set(1), set(2))).hasContentsAnyOrder(list(1, 2));
+  }
+
+  @SuppressWarnings("unchecked") // varargs!
+  public void testCartesianProduct_binary1x2() {
+    ASSERT.that(Sets.cartesianProduct(set(1), set(2, 3))).hasContentsAnyOrder(
+        list(1, 2), list(1, 3));
+  }
+
+  @SuppressWarnings("unchecked") // varargs!
+  public void testCartesianProduct_binary2x2() {
+    ASSERT.that(Sets.cartesianProduct(set(1, 2), set(3, 4))).hasContentsAnyOrder(
+        list(1, 3), list(1, 4), list(2, 3), list(2, 4));
+  }
+
+  @SuppressWarnings("unchecked") // varargs!
+  public void testCartesianProduct_2x2x2() {
+    ASSERT.that(Sets.cartesianProduct(set(0, 1), set(0, 1), set(0, 1))).hasContentsAnyOrder(
+        list(0, 0, 0), list(0, 0, 1), list(0, 1, 0), list(0, 1, 1),
+        list(1, 0, 0), list(1, 0, 1), list(1, 1, 0), list(1, 1, 1));
+  }
+
+  @SuppressWarnings("unchecked") // varargs!
+  public void testCartesianProduct_contains() {
+    Set<List<Integer>> actual = Sets.cartesianProduct(set(1, 2), set(3, 4));
+    assertTrue(actual.contains(list(1, 3)));
+    assertTrue(actual.contains(list(1, 4)));
+    assertTrue(actual.contains(list(2, 3)));
+    assertTrue(actual.contains(list(2, 4)));
+    assertFalse(actual.contains(list(3, 1)));
+  }
+
+  @SuppressWarnings("unchecked") // varargs!
+  public void testCartesianProduct_unrelatedTypes() {
+    Set<Integer> x = set(1, 2);
+    Set<String> y = set("3", "4");
+
+    List<Object> exp1 = list((Object) 1, "3");
+    List<Object> exp2 = list((Object) 1, "4");
+    List<Object> exp3 = list((Object) 2, "3");
+    List<Object> exp4 = list((Object) 2, "4");
+
+    ASSERT.that(Sets.<Object>cartesianProduct(x, y)).hasContentsAnyOrder(exp1, exp2, exp3, exp4);
+  }
+
+  @SuppressWarnings("unchecked") // varargs!
+  public void testCartesianProductTooBig() {
+    Set<Integer> set = Ranges.closed(0, 10000).asSet(DiscreteDomains.integers());
+    try {
+      Set<List<Integer>> productSet = Sets.cartesianProduct(set, set, set, set, set);
+      fail("Expected IAE");
+    } catch (IllegalArgumentException expected) {}
+  }
+
+  @SuppressWarnings("unchecked") // varargs!
+  public void testCartesianProduct_hashCode() {
+    // Run through the same cartesian products we tested above
+
+    Set<List<Integer>> degenerate = Sets.cartesianProduct();
+    checkHashCode(degenerate);
+
+    checkHashCode(Sets.cartesianProduct(set(1, 2)));
+
+    int num = Integer.MAX_VALUE / 3 * 2; // tickle overflow-related problems
+    checkHashCode(Sets.cartesianProduct(set(1, 2, num)));
+
+    Set<Integer> mt = emptySet();
+    checkHashCode(Sets.cartesianProduct(mt, mt));
+    checkHashCode(Sets.cartesianProduct(mt, set(num)));
+    checkHashCode(Sets.cartesianProduct(set(num), mt));
+    checkHashCode(Sets.cartesianProduct(set(num), set(1)));
+    checkHashCode(Sets.cartesianProduct(set(1), set(2, num)));
+    checkHashCode(Sets.cartesianProduct(set(1, num), set(2, num - 1)));
+    checkHashCode(Sets.cartesianProduct(
+        set(1, num), set(2, num - 1), set(3, num + 1)));
+
+    // a bigger one
+    checkHashCode(Sets.cartesianProduct(
+        set(1, num, num + 1), set(2), set(3, num + 2), set(4, 5, 6, 7, 8)));
+  }
+
+  public void testPowerSetEmpty() {
+    ImmutableSet<Integer> elements = ImmutableSet.of();
+    Set<Set<Integer>> powerSet = powerSet(elements);
+    assertEquals(1, powerSet.size());
+    assertEquals(ImmutableSet.of(ImmutableSet.of()), powerSet);
+    assertEquals(0, powerSet.hashCode());
+  }
+
+  public void testPowerSetContents() {
+    ImmutableSet<Integer> elements = ImmutableSet.of(1, 2, 3);
+    Set<Set<Integer>> powerSet = powerSet(elements);
+    assertEquals(8, powerSet.size());
+    assertEquals(4 * 1 + 4 * 2 + 4 * 3, powerSet.hashCode());
+
+    Set<Set<Integer>> expected = newHashSet();
+    expected.add(ImmutableSet.<Integer>of());
+    expected.add(ImmutableSet.of(1));
+    expected.add(ImmutableSet.of(2));
+    expected.add(ImmutableSet.of(3));
+    expected.add(ImmutableSet.of(1, 2));
+    expected.add(ImmutableSet.of(1, 3));
+    expected.add(ImmutableSet.of(2, 3));
+    expected.add(ImmutableSet.of(1, 2, 3));
+
+    Set<Set<Integer>> almostPowerSet = newHashSet(expected);
+    almostPowerSet.remove(ImmutableSet.of(1, 2, 3));
+    almostPowerSet.add(ImmutableSet.of(1, 2, 4));
+
+    new EqualsTester()
+        .addEqualityGroup(expected, powerSet)
+        .addEqualityGroup(ImmutableSet.of(1, 2, 3))
+        .addEqualityGroup(almostPowerSet)
+        .testEquals();
+
+    for (Set<Integer> subset : expected) {
+      assertTrue(powerSet.contains(subset));
+    }
+    assertFalse(powerSet.contains(ImmutableSet.of(1, 2, 4)));
+    assertFalse(powerSet.contains(singleton(null)));
+    assertFalse(powerSet.contains(null));
+    assertFalse(powerSet.contains("notASet"));
+  }
+
+  public void testPowerSetIteration_manual() {
+    ImmutableSet<Integer> elements = ImmutableSet.of(1, 2, 3);
+    Set<Set<Integer>> powerSet = powerSet(elements);
+    // The API doesn't promise this iteration order, but it's convenient here.
+    Iterator<Set<Integer>> i = powerSet.iterator();
+    assertEquals(ImmutableSet.of(), i.next());
+    assertEquals(ImmutableSet.of(1), i.next());
+    assertEquals(ImmutableSet.of(2), i.next());
+    assertEquals(ImmutableSet.of(2, 1), i.next());
+    assertEquals(ImmutableSet.of(3), i.next());
+    assertEquals(ImmutableSet.of(3, 1), i.next());
+    assertEquals(ImmutableSet.of(3, 2), i.next());
+    assertEquals(ImmutableSet.of(3, 2, 1), i.next());
+    assertFalse(i.hasNext());
+    try {
+      i.next();
+      fail();
+    } catch (NoSuchElementException expected) {
+    }
+  }
+
+  @GwtIncompatible("too slow for GWT")
+  public void testPowerSetIteration_iteratorTester() {
+    ImmutableSet<Integer> elements = ImmutableSet.of(1, 2);
+
+    Set<Set<Integer>> expected = newHashSet();
+    expected.add(ImmutableSet.<Integer>of());
+    expected.add(ImmutableSet.of(1));
+    expected.add(ImmutableSet.of(2));
+    expected.add(ImmutableSet.of(1, 2));
+
+    final Set<Set<Integer>> powerSet = powerSet(elements);
+    new IteratorTester<Set<Integer>>(6, UNMODIFIABLE, expected, KNOWN_ORDER) {
+      @Override protected Iterator<Set<Integer>> newTargetIterator() {
+        return powerSet.iterator();
+      }
+    }.test();
+  }
+
+  public void testPowerSetIteration_iteratorTester_fast() {
+    ImmutableSet<Integer> elements = ImmutableSet.of(1, 2);
+
+    Set<Set<Integer>> expected = newHashSet();
+    expected.add(ImmutableSet.<Integer>of());
+    expected.add(ImmutableSet.of(1));
+    expected.add(ImmutableSet.of(2));
+    expected.add(ImmutableSet.of(1, 2));
+
+    final Set<Set<Integer>> powerSet = powerSet(elements);
+    new IteratorTester<Set<Integer>>(4, UNMODIFIABLE, expected, KNOWN_ORDER) {
+      @Override protected Iterator<Set<Integer>> newTargetIterator() {
+        return powerSet.iterator();
+      }
+    }.test();
+  }
+
+  public void testPowerSetSize() {
+    assertPowerSetSize(1);
+    assertPowerSetSize(2, 'a');
+    assertPowerSetSize(4, 'a', 'b');
+    assertPowerSetSize(8, 'a', 'b', 'c');
+    assertPowerSetSize(16, 'a', 'b', 'd', 'e');
+    assertPowerSetSize(1 << 30,
+        'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
+        'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2',
+        '3', '4');
+  }
+
+  public void testPowerSetCreationErrors() {
+    try {
+      powerSet(newHashSet('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
+          'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x',
+          'y', 'z', '1', '2', '3', '4', '5'));
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+
+    try {
+      powerSet(singleton(null));
+      fail();
+    } catch (NullPointerException expected) {
+    }
+  }
+
+  public void testPowerSetEqualsAndHashCode_verifyAgainstHashSet() {
+    ImmutableList<Integer> allElements = ImmutableList.of(4233352, 3284593,
+        3794208, 3849533, 4013967, 2902658, 1886275, 2131109, 985872, 1843868);
+    for (int i = 0; i < allElements.size(); i++) {
+      Set<Integer> elements = newHashSet(allElements.subList(0, i));
+      Set<Set<Integer>> powerSet1 = powerSet(elements);
+      Set<Set<Integer>> powerSet2 = powerSet(elements);
+      new EqualsTester()
+          .addEqualityGroup(powerSet1, powerSet2, toHashSets(powerSet1))
+          .addEqualityGroup(ImmutableSet.of())
+          .addEqualityGroup(ImmutableSet.of(9999999))
+          .addEqualityGroup("notASet")
+          .testEquals();
+      assertEquals(toHashSets(powerSet1).hashCode(), powerSet1.hashCode());
+    }
+  }
+
+  /**
+   * Test that a hash code miscomputed by "input.hashCode() * tooFarValue / 2"
+   * is correct under our {@code hashCode} implementation.
+   */
+  public void testPowerSetHashCode_inputHashCodeTimesTooFarValueIsZero() {
+    Set<Object> sumToEighthMaxIntElements =
+        newHashSet(objectWithHashCode(1 << 29), objectWithHashCode(0));
+    assertPowerSetHashCode(1 << 30, sumToEighthMaxIntElements);
+
+    Set<Object> sumToQuarterMaxIntElements =
+        newHashSet(objectWithHashCode(1 << 30), objectWithHashCode(0));
+    assertPowerSetHashCode(1 << 31, sumToQuarterMaxIntElements);
+  }
+
+  public void testPowerSetShowOff() {
+    Set<Object> zero = ImmutableSet.of();
+    Set<Set<Object>> one = powerSet(zero);
+    Set<Set<Set<Object>>> two = powerSet(one);
+    Set<Set<Set<Set<Object>>>> four = powerSet(two);
+    Set<Set<Set<Set<Set<Object>>>>> sixteen = powerSet(four);
+    Set<Set<Set<Set<Set<Set<Object>>>>>> sixtyFiveThousandish =
+        powerSet(sixteen);
+    assertEquals(1 << 16, sixtyFiveThousandish.size());
+
+    assertTrue(powerSet(makeSetOfZeroToTwentyNine())
+        .contains(makeSetOfZeroToTwentyNine()));
+    assertFalse(powerSet(makeSetOfZeroToTwentyNine())
+        .contains(ImmutableSet.of(30)));
+  }
+
+  private static Set<Integer> makeSetOfZeroToTwentyNine() {
+    // TODO: use Range once it's publicly available
+    Set<Integer> zeroToTwentyNine = newHashSet();
+    for (int i = 0; i < 30; i++) {
+      zeroToTwentyNine.add(i);
+    }
+    return zeroToTwentyNine;
+  }
+
+  private static <E> Set<Set<E>> toHashSets(Set<Set<E>> powerSet) {
+    Set<Set<E>> result = newHashSet();
+    for (Set<E> subset : powerSet) {
+      result.add(new HashSet<E>(subset));
+    }
+    return result;
+  }
+
+  private static Object objectWithHashCode(final int hashCode) {
+    return new Object() {
+      @Override public int hashCode() {
+        return hashCode;
+      }
+    };
+  }
+
+  private static void assertPowerSetHashCode(int expected, Set<?> elements) {
+    assertEquals(expected, powerSet(elements).hashCode());
+  }
+
+  private static void assertPowerSetSize(int i, Object... elements) {
+    assertEquals(i, powerSet(newHashSet(elements)).size());
+  }
+
+  private static void checkHashCode(Set<?> set) {
+    assertEquals(Sets.newHashSet(set).hashCode(), set.hashCode());
+  }
+
+  private static <E> Set<E> set(E... elements) {
+    return ImmutableSet.copyOf(elements);
+  }
+
+  private static <E> List<E> list(E... elements) {
+    return ImmutableList.copyOf(elements);
+  }
+
+  /**
+   * Utility method to verify that the given LinkedHashSet is equal to and
+   * hashes identically to a set constructed with the elements in the given
+   * collection.  Also verifies that the ordering in the set is the same
+   * as the ordering of the given contents.
+   */
+  private static <E> void verifyLinkedHashSetContents(
+      LinkedHashSet<E> set, Collection<E> contents) {
+    assertEquals("LinkedHashSet should have preserved order for iteration",
+        new ArrayList<E>(set), new ArrayList<E>(contents));
+    verifySetContents(set, contents);
+  }
+
+  /**
+   * Utility method to verify that the given SortedSet is equal to and
+   * hashes identically to a set constructed with the elements in the
+   * given iterable.  Also verifies that the comparator is the same as the
+   * given comparator.
+   */
+  private static <E> void verifySortedSetContents(
+      SortedSet<E> set, Iterable<E> iterable,
+      @Nullable Comparator<E> comparator) {
+    assertSame(comparator, set.comparator());
+    verifySetContents(set, iterable);
+  }
+
+  /**
+   * Utility method that verifies that the given set is equal to and hashes
+   * identically to a set constructed with the elements in the given iterable.
+   */
+  private static <E> void verifySetContents(Set<E> set, Iterable<E> contents) {
+    Set<E> expected = null;
+    if (contents instanceof Set) {
+      expected = (Set<E>) contents;
+    } else {
+      expected = new HashSet<E>();
+      for (E element : contents) {
+        expected.add(element);
+      }
+    }
+    assertEquals(expected, set);
+  }
+
+  /**
+   * Simple base class to verify that we handle generics correctly.
+   */
+  static class Base implements Comparable<Base>, Serializable {
+    private final String s;
+
+    public Base(String s) {
+      this.s = s;
+    }
+
+    @Override public int hashCode() { // delegate to 's'
+      return s.hashCode();
+    }
+
+    @Override public boolean equals(Object other) {
+      if (other == null) {
+        return false;
+      } else if (other instanceof Base) {
+        return s.equals(((Base) other).s);
+      } else {
+        return false;
+      }
+    }
+
+    @Override
+    public int compareTo(Base o) {
+      return s.compareTo(o.s);
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  /**
+   * Simple derived class to verify that we handle generics correctly.
+   */
+  static class Derived extends Base {
+    public Derived(String s) {
+      super(s);
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  public void testFilterFiltered() {
+    Set<String> unfiltered = Sets.newHashSet();
+    Set<String> filtered = Sets.filter(
+        Sets.filter(unfiltered, Collections2Test.LENGTH_1),
+        Collections2Test.STARTS_WITH_VOWEL);
+    unfiltered.add("a");
+    unfiltered.add("b");
+    unfiltered.add("apple");
+    unfiltered.add("banana");
+    unfiltered.add("e");
+    assertEquals(ImmutableSet.of("a", "e"), filtered);
+    assertEquals(ImmutableSet.of("a", "b", "apple", "banana", "e"), unfiltered);
+
+    try {
+      filtered.add("d");
+      fail();
+    } catch (IllegalArgumentException expected) {}
+    try {
+      filtered.add("egg");
+      fail();
+    } catch (IllegalArgumentException expected) {}
+    assertEquals(ImmutableSet.of("a", "e"), filtered);
+    assertEquals(ImmutableSet.of("a", "b", "apple", "banana", "e"), unfiltered);
+
+    filtered.clear();
+    assertTrue(filtered.isEmpty());
+    assertEquals(ImmutableSet.of("b", "apple", "banana"), unfiltered);
+  }
+
+  public void testFilterSorted() {
+    SortedSet<Long> sorted = Sets.newTreeSet();
+    for (long i = 1; i < 11; i++) {
+      sorted.add(i);
+    }
+    SortedSet<Long> filteredEven = Sets.filter(sorted, new Predicate<Long>() {
+      @Override
+      public boolean apply(Long input) {
+        return input % 2 == 0;
+      }
+    });
+
+    assertEquals("filteredSortedSet", ImmutableSet.of(2L, 4L, 6L, 8L, 10L), filteredEven);
+    assertEquals("First", 2L, filteredEven.first().longValue());
+    assertEquals("Last", 10L, filteredEven.last().longValue());
+    assertEquals("subSet", ImmutableSet.of(4L, 6L), filteredEven.subSet(4L, 8L));
+    assertEquals("headSet", ImmutableSet.of(2L, 4L), filteredEven.headSet(5L));
+    assertEquals("tailSet", ImmutableSet.of(8L, 10L), filteredEven.tailSet(7L));
+    assertEquals("comparator", sorted.comparator(), filteredEven.comparator());
+
+    sorted.add(12L);
+    sorted.add(0L);
+    assertEquals("addingElementsToSet", ImmutableSet.of(0L, 2L, 4L, 6L, 8L, 10L, 12L),
+        filteredEven);
+    assertEquals("FirstOnModifiedSortedSet", 0L, filteredEven.first().longValue());
+    assertEquals("LastOnModifiedSortedSet", 12L, filteredEven.last().longValue());
+  }
+
+  static SortedSet<Long> filteredEmpty = Sets.filter(new TreeSet<Long>(), Predicates.alwaysTrue());
+  public void testFilteredSortedEmpty_size() {
+    assertEquals("filterEmptySize", 0, filteredEmpty.size());
+  }
+
+  public void testFilteredSortedEmpty_first() {
+    try {
+      filteredEmpty.first();
+      fail("CallFirstOnEmptySetThrowsException");
+    } catch (NoSuchElementException expected) {}
+  }
+
+  public void testFilteredSortedEmpty_last() {
+    try {
+      filteredEmpty.last();
+      fail("CallLastOnEmptySetThrowsException");
+    } catch (NoSuchElementException expected) {}
+  }
+
+  static SortedSet<Long> sorted = Sets.newTreeSet();
+  static {
+    for (long i = 1; i < 11; i++) {
+      sorted.add(i);
+    }
+  }
+  static SortedSet<Long> filterAllElements = Sets.filter(sorted, Predicates.alwaysFalse());
+
+  public void testFilteredSortedAllFiltered_size() {
+    assertEquals("filterAllElementsSize", 0, filterAllElements.size());
+  }
+
+  public void testFilteredSortedAllFiltered_first() {
+    try {
+      filterAllElements.first();
+      fail("CallFirstOnSetWithAllElementsFilteredThrowsException");
+    } catch (NoSuchElementException expected) {}
+  }
+
+  public void testFilteredSortedAllFiltered_last() {
+    try {
+      filterAllElements.last();
+      fail("CallLastOnSetWithAllElementsFilteredThrowsException");
+    } catch (NoSuchElementException expected) {}
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/SimpleAbstractMultisetTest.java b/guava-tests/test/com/google/common/collect/SimpleAbstractMultisetTest.java
new file mode 100644
index 0000000..608fbae
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/SimpleAbstractMultisetTest.java
@@ -0,0 +1,138 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ * 
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkArgument;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.collect.Multiset.Entry;
+
+import java.io.Serializable;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ * Unit test for {@link AbstractMultiset}.
+ *
+ * @author Kevin Bourrillion
+ * @author Louis Wasserman
+ */
+@SuppressWarnings("serial") // No serialization is used in this test
+@GwtCompatible
+public class SimpleAbstractMultisetTest extends AbstractMultisetTest {
+
+  @Override protected <E> Multiset<E> create() {
+    return new SimpleAbstractMultiset<E>();
+  }
+
+  public void testFastAddAllMultiset() {
+    final AtomicInteger addCalls = new AtomicInteger();
+    Multiset<String> multiset = new NoRemoveMultiset<String>() {
+      @Override
+      public int add(String element, int occurrences) {
+        addCalls.incrementAndGet();
+        return super.add(element, occurrences);
+      }
+    };
+    ImmutableMultiset<String> adds =
+        new ImmutableMultiset.Builder<String>().addCopies("x", 10).build();
+    multiset.addAll(adds);
+    assertEquals(addCalls.get(), 1);
+  }
+
+  public void testRemoveUnsupported() {
+    Multiset<String> multiset = new NoRemoveMultiset<String>();
+    multiset.add("a");
+    try {
+      multiset.remove("a");
+      fail();
+    } catch (UnsupportedOperationException expected) {}
+    assertTrue(multiset.contains("a"));
+  }
+
+  private static class NoRemoveMultiset<E> extends AbstractMultiset<E>
+      implements Serializable {
+    final Map<E, Integer> backingMap = Maps.newHashMap();
+
+    @Override public int add(E element, int occurrences) {
+      checkArgument(occurrences >= 0);
+      Integer frequency = backingMap.get(element);
+      if (frequency == null) {
+        frequency = 0;
+      }
+      if (occurrences == 0) {
+        return frequency;
+      }
+      checkArgument(occurrences <= Integer.MAX_VALUE - frequency);
+      backingMap.put(element, frequency + occurrences);
+      return frequency;
+    }
+
+    @Override
+    Iterator<Entry<E>> entryIterator() {
+      final Iterator<Map.Entry<E, Integer>> backingEntries = backingMap.entrySet().iterator();
+      return new Iterator<Multiset.Entry<E>>() {
+        @Override
+        public boolean hasNext() {
+          return backingEntries.hasNext();
+        }
+
+        @Override
+        public Multiset.Entry<E> next() {
+          final Map.Entry<E, Integer> mapEntry = backingEntries.next();
+          return new Multisets.AbstractEntry<E>() {
+            @Override
+            public E getElement() {
+              return mapEntry.getKey();
+            }
+
+            @Override
+            public int getCount() {
+              Integer frequency = backingMap.get(getElement());
+              return (frequency == null) ? 0 : frequency;
+            }
+          };
+        }
+
+        @Override
+        public void remove() {
+          backingEntries.remove();
+        }
+      };
+    }
+
+    @Override
+    int distinctElements() {
+      return backingMap.size();
+    }
+  }
+
+  private static class SimpleAbstractMultiset<E> extends NoRemoveMultiset<E> {
+    @SuppressWarnings("unchecked")
+    @Override public int remove(Object element, int occurrences) {
+      checkArgument(occurrences >= 0);
+      Integer count = backingMap.get(element);
+      if (count == null) {
+        return 0;
+      } else if (count > occurrences) {
+        backingMap.put((E) element, count - occurrences);
+        return count;
+      } else {
+        return backingMap.remove(element);
+      }
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/SingletonImmutableTableTest.java b/guava-tests/test/com/google/common/collect/SingletonImmutableTableTest.java
new file mode 100644
index 0000000..36b8159
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/SingletonImmutableTableTest.java
@@ -0,0 +1,129 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import com.google.common.base.Objects;
+import com.google.common.testing.EqualsTester;
+
+/**
+ * Tests {@link SingletonImmutableTable}.
+ *
+ * @author gak@google.com (Gregory Kick)
+ */
+public class SingletonImmutableTableTest extends AbstractImmutableTableTest {
+  private final ImmutableTable<Character, Integer, String> testTable =
+      new SingletonImmutableTable<Character, Integer, String>('a', 1, "blah");
+
+  public void testHashCode() {
+    assertEquals(Objects.hashCode('a', 1, "blah"), testTable.hashCode());
+  }
+
+  public void testCellSet() {
+    assertEquals(ImmutableSet.of(Tables.immutableCell('a', 1, "blah")),
+        testTable.cellSet());
+  }
+
+  public void testColumn() {
+    assertEquals(ImmutableMap.of(), testTable.column(0));
+    assertEquals(ImmutableMap.of('a', "blah"), testTable.column(1));
+  }
+
+  public void testColumnKeySet() {
+    assertEquals(ImmutableSet.of(1), testTable.columnKeySet());
+  }
+
+  public void testColumnMap() {
+    assertEquals(ImmutableMap.of(1, ImmutableMap.of('a', "blah")),
+        testTable.columnMap());
+  }
+
+  public void testRow() {
+    assertEquals(ImmutableMap.of(), testTable.row('A'));
+    assertEquals(ImmutableMap.of(1, "blah"), testTable.row('a'));
+  }
+
+  public void testRowKeySet() {
+    assertEquals(ImmutableSet.of('a'), testTable.rowKeySet());
+  }
+
+  public void testRowMap() {
+    assertEquals(ImmutableMap.of('a', ImmutableMap.of(1, "blah")),
+        testTable.rowMap());
+  }
+
+  public void testEqualsObject() {
+    new EqualsTester()
+        .addEqualityGroup(testTable, ArrayTable.create(testTable),
+            HashBasedTable.create(testTable))
+        .addEqualityGroup(EmptyImmutableTable.INSTANCE,
+            HashBasedTable.create())
+        .addEqualityGroup(HashBasedTable.create(ImmutableTable.of('A', 2, "")))
+        .testEquals();
+  }
+
+  public void testToString() {
+    assertEquals("{a={1=blah}}", testTable.toString());
+  }
+
+  public void testContains() {
+    assertTrue(testTable.contains('a', 1));
+    assertFalse(testTable.contains('a', 2));
+    assertFalse(testTable.contains('A', 1));
+    assertFalse(testTable.contains('A', 2));
+  }
+
+  public void testContainsColumn() {
+    assertTrue(testTable.containsColumn(1));
+    assertFalse(testTable.containsColumn(2));
+  }
+
+  public void testContainsRow() {
+    assertTrue(testTable.containsRow('a'));
+    assertFalse(testTable.containsRow('A'));
+  }
+
+  public void testContainsValue() {
+    assertTrue(testTable.containsValue("blah"));
+    assertFalse(testTable.containsValue(""));
+  }
+
+  public void testGet() {
+    assertEquals("blah", testTable.get('a', 1));
+    assertNull(testTable.get('a', 2));
+    assertNull(testTable.get('A', 1));
+    assertNull(testTable.get('A', 2));
+  }
+
+  public void testIsEmpty() {
+    assertFalse(testTable.isEmpty());
+  }
+
+  public void testSize() {
+    assertEquals(1, testTable.size());
+  }
+
+  public void testValues() {
+    ASSERT.that(testTable.values()).hasContentsInOrder("blah");
+  }
+
+  @Override Iterable<ImmutableTable<Character, Integer, String>>
+      getTestInstances() {
+    return ImmutableSet.of(testTable);
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/SortedIterablesTest.java b/guava-tests/test/com/google/common/collect/SortedIterablesTest.java
new file mode 100644
index 0000000..e16a75a
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/SortedIterablesTest.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ * 
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import com.google.common.annotations.GwtCompatible;
+
+import junit.framework.TestCase;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.SortedSet;
+
+/**
+ * Unit tests for {@code SortedIterables}.
+ * 
+ * @author Louis Wasserman
+ */
+@GwtCompatible
+public class SortedIterablesTest extends TestCase {
+  @SuppressWarnings("unchecked")
+  public void testSortedCounts() {
+    List<Integer> list = Arrays.asList(3, 9, 8, 4, 5, 2, 2, 8);
+    ASSERT.that(SortedIterables.sortedCounts(Ordering.natural(), list))
+        .hasContentsInOrder(
+            Multisets.immutableEntry(2, 2), Multisets.immutableEntry(3, 1),
+            Multisets.immutableEntry(4, 1), Multisets.immutableEntry(5, 1),
+            Multisets.immutableEntry(8, 2), Multisets.immutableEntry(9, 1));
+  }
+
+  @SuppressWarnings("unchecked")
+  public void testSortedCountsIterator() {
+    List<Integer> list = Arrays.asList(3, 9, 8, 4, 5, 2, 2, 8);
+    ASSERT.that(SortedIterables.sortedCounts(Ordering.natural(), list.iterator()))
+        .hasContentsInOrder(
+            Multisets.immutableEntry(2, 2), Multisets.immutableEntry(3, 1),
+            Multisets.immutableEntry(4, 1), Multisets.immutableEntry(5, 1),
+            Multisets.immutableEntry(8, 2), Multisets.immutableEntry(9, 1));
+  }
+
+  public void testSameComparator() {
+    assertTrue(SortedIterables.hasSameComparator(Ordering.natural(), Sets.newTreeSet()));
+    // Before JDK6 (including under GWT), the TreeMap keySet is a plain Set.
+    if (Maps.newTreeMap().keySet() instanceof SortedSet) {
+      assertTrue(
+          SortedIterables.hasSameComparator(Ordering.natural(), Maps.newTreeMap().keySet()));
+    }
+    assertTrue(SortedIterables.hasSameComparator(Ordering.natural().reverse(),
+        Sets.newTreeSet(Ordering.natural().reverse())));
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/SortedListsTest.java b/guava-tests/test/com/google/common/collect/SortedListsTest.java
new file mode 100644
index 0000000..884f5f9
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/SortedListsTest.java
@@ -0,0 +1,131 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.base.Function;
+import com.google.common.base.Functions;
+import com.google.common.collect.SortedLists.KeyAbsentBehavior;
+import com.google.common.collect.SortedLists.KeyPresentBehavior;
+import com.google.common.testing.NullPointerTester;
+
+import junit.framework.TestCase;
+
+import java.util.List;
+
+/**
+ * Tests for SortedLists.
+ *
+ * @author Louis Wasserman
+ */
+@GwtCompatible(emulated = true)
+public class SortedListsTest extends TestCase {
+  private static final ImmutableList<Integer> LIST_WITH_DUPS =
+      ImmutableList.of(1, 1, 2, 4, 4, 4, 8);
+
+  private static final ImmutableList<Integer> LIST_WITHOUT_DUPS = ImmutableList.of(1, 2, 4, 8);
+
+  void assertModelAgrees(List<Integer> list, Integer key, int answer,
+      KeyPresentBehavior presentBehavior, KeyAbsentBehavior absentBehavior) {
+    switch (presentBehavior) {
+      case FIRST_PRESENT:
+        if (list.contains(key)) {
+          assertEquals(list.indexOf(key), answer);
+          return;
+        }
+        break;
+      case LAST_PRESENT:
+        if (list.contains(key)) {
+          assertEquals(list.lastIndexOf(key), answer);
+          return;
+        }
+        break;
+      case ANY_PRESENT:
+        if (list.contains(key)) {
+          assertEquals(key, list.get(answer));
+          return;
+        }
+        break;
+      case FIRST_AFTER:
+        if (list.contains(key)) {
+          assertEquals(list.lastIndexOf(key) + 1, answer);
+          return;
+        }
+        break;
+      case LAST_BEFORE:
+        if (list.contains(key)) {
+          assertEquals(list.indexOf(key) - 1, answer);
+          return;
+        }
+        break;
+      default:
+        throw new AssertionError();
+    }
+    // key is not present
+    int nextHigherIndex = list.size();
+    for (int i = list.size() - 1; i >= 0 && list.get(i) > key; i--) {
+      nextHigherIndex = i;
+    }
+    switch (absentBehavior) {
+      case NEXT_LOWER:
+        assertEquals(nextHigherIndex - 1, answer);
+        return;
+      case NEXT_HIGHER:
+        assertEquals(nextHigherIndex, answer);
+        return;
+      case INVERTED_INSERTION_INDEX:
+        assertEquals(-1 - nextHigherIndex, answer);
+        return;
+      default:
+        throw new AssertionError();
+    }
+  }
+
+  public void testWithoutDups() {
+    for (KeyPresentBehavior presentBehavior : KeyPresentBehavior.values()) {
+      for (KeyAbsentBehavior absentBehavior : KeyAbsentBehavior.values()) {
+        for (int key = 0; key <= 10; key++) {
+          assertModelAgrees(LIST_WITHOUT_DUPS, key,
+              SortedLists.binarySearch(LIST_WITHOUT_DUPS, key, presentBehavior, absentBehavior),
+              presentBehavior, absentBehavior);
+        }
+      }
+    }
+  }
+
+  public void testWithDups() {
+    for (KeyPresentBehavior presentBehavior : KeyPresentBehavior.values()) {
+      for (KeyAbsentBehavior absentBehavior : KeyAbsentBehavior.values()) {
+        for (int key = 0; key <= 10; key++) {
+          assertModelAgrees(LIST_WITH_DUPS, key,
+              SortedLists.binarySearch(LIST_WITH_DUPS, key, presentBehavior, absentBehavior),
+              presentBehavior, absentBehavior);
+        }
+      }
+    }
+  }
+
+  @GwtIncompatible("NullPointerTester")
+  public void testNulls() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.setDefault(Function.class, Functions.identity());
+    tester.setDefault(List.class, LIST_WITH_DUPS);
+    tester.setDefault(Comparable.class, 2);
+    tester.setDefault(KeyPresentBehavior.class, KeyPresentBehavior.ANY_PRESENT);
+    tester.setDefault(KeyAbsentBehavior.class, KeyAbsentBehavior.NEXT_HIGHER);
+    tester.testAllPublicStaticMethods(SortedLists.class);
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/SortedMapsTest.java b/guava-tests/test/com/google/common/collect/SortedMapsTest.java
new file mode 100644
index 0000000..5529521
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/SortedMapsTest.java
@@ -0,0 +1,222 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.base.Function;
+import com.google.common.base.Predicate;
+import com.google.common.collect.Maps.EntryTransformer;
+import com.google.common.collect.testing.SortedMapInterfaceTest;
+import com.google.common.testing.NullPointerTester;
+
+import junit.framework.TestCase;
+
+import java.util.Comparator;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.SortedMap;
+
+/**
+ * Tests for SortedMaps.
+ *
+ * @author Louis Wasserman
+ */
+@GwtCompatible(emulated = true)
+@SuppressWarnings("deprecation")
+public class SortedMapsTest extends TestCase {
+
+  private static final EntryTransformer<Object, Object, Object> ALWAYS_NULL =
+      new EntryTransformer<Object, Object, Object>() {
+        @Override
+        public Object transformEntry(Object k, Object v1) {
+          return null;
+        }
+      };
+
+  @GwtIncompatible("NullPointerTester")
+  public void testNullPointer() throws Exception {
+    NullPointerTester nullPointerTester = new NullPointerTester();
+    nullPointerTester.setDefault(EntryTransformer.class, ALWAYS_NULL);
+    nullPointerTester.setDefault(
+        SortedMap.class, Maps.<String, String>newTreeMap());
+    nullPointerTester.testAllPublicStaticMethods(SortedMaps.class);
+  }
+
+  public void testTransformSortedValues() {
+    SortedMap<String, Integer> map = ImmutableSortedMap.of("a", 4, "b", 9);
+    Function<Integer, Double> sqrt = new Function<Integer, Double>() {
+      @Override
+      public Double apply(Integer in) {
+        return Math.sqrt(in);
+      }
+    };
+    SortedMap<String, Double> transformed =
+        SortedMaps.transformValues(map, sqrt);
+
+    assertEquals(ImmutableSortedMap.of("a", 2.0, "b", 3.0), transformed);
+  }
+
+  public void testTransformSortedEntries() {
+    SortedMap<String, String> map = ImmutableSortedMap.of("a", "4", "b", "9");
+    EntryTransformer<String, String, String> concat =
+        new EntryTransformer<String, String, String>() {
+          @Override
+          public String transformEntry(String key, String value) {
+            return key + value;
+          }
+        };
+    SortedMap<String, String> transformed =
+        SortedMaps.transformEntries(map, concat);
+
+    assertEquals(ImmutableSortedMap.of("a", "a4", "b", "b9"), transformed);
+  }
+
+  // Not testing Map methods of SortedMaps.filter*, since the implementation
+  // doesn't override Maps.FilteredEntryMap, which is already tested.
+  
+  private static final Predicate<Integer> EVEN =
+      new Predicate<Integer>() {
+        @Override
+        public boolean apply(Integer input) {
+          return input % 2 == 0;
+        }
+      };
+  
+  public void testFilterKeys() {
+    Comparator<Integer> comparator = Ordering.natural();
+    SortedMap<Integer, String> unfiltered = Maps.newTreeMap(comparator);
+    unfiltered.put(1, "one");
+    unfiltered.put(2, "two");
+    unfiltered.put(3, "three");
+    unfiltered.put(4, "four");
+    unfiltered.put(5, "five");
+    unfiltered.put(6, "six");
+    unfiltered.put(7, "seven");
+    SortedMap<Integer, String> filtered 
+        = SortedMaps.filterKeys(unfiltered, EVEN);
+    ASSERT.that(filtered.keySet()).hasContentsInOrder(2, 4, 6);
+    assertSame(comparator, filtered.comparator());
+    assertEquals((Integer) 2, filtered.firstKey());
+    assertEquals((Integer) 6, filtered.lastKey());
+    ASSERT.that(filtered.headMap(5).keySet()).hasContentsInOrder(2, 4);
+    ASSERT.that(filtered.tailMap(3).keySet()).hasContentsInOrder(4, 6);
+    ASSERT.that(filtered.subMap(3, 5).keySet()).hasContentsInOrder(4);
+  }
+  
+  private static final Predicate<String> NOT_LENGTH_3 =
+      new Predicate<String>() {
+        @Override
+        public boolean apply(String input) {
+          return input == null || input.length() != 3;
+        }
+      };
+
+  public void testFilterValues() {
+    Comparator<Integer> comparator = Ordering.natural();
+    SortedMap<Integer, String> unfiltered = Maps.newTreeMap(comparator);
+    unfiltered.put(1, "one");
+    unfiltered.put(2, "two");
+    unfiltered.put(3, "three");
+    unfiltered.put(4, "four");
+    unfiltered.put(5, "five");
+    unfiltered.put(6, "six");
+    unfiltered.put(7, "seven");
+    SortedMap<Integer, String> filtered 
+        = SortedMaps.filterValues(unfiltered, NOT_LENGTH_3);
+    ASSERT.that(filtered.keySet()).hasContentsInOrder(3, 4, 5, 7);
+    assertSame(comparator, filtered.comparator());
+    assertEquals((Integer) 3, filtered.firstKey());
+    assertEquals((Integer) 7, filtered.lastKey());
+    ASSERT.that(filtered.headMap(5).keySet()).hasContentsInOrder(3, 4);
+    ASSERT.that(filtered.tailMap(4).keySet()).hasContentsInOrder(4, 5, 7);
+    ASSERT.that(filtered.subMap(4, 6).keySet()).hasContentsInOrder(4, 5);
+  }
+
+  private static final Predicate<Map.Entry<Integer, String>>
+      EVEN_AND_LENGTH_3 = new Predicate<Map.Entry<Integer, String>>() {
+        @Override public boolean apply(Entry<Integer, String> entry) {
+          return (entry.getKey() == null || entry.getKey() % 2 == 0) 
+              && (entry.getValue() == null || entry.getValue().length() == 3);
+        }   
+    };
+    
+  private static class ContainsKeySafeSortedMap 
+      extends ForwardingSortedMap<Integer, String> {
+    SortedMap<Integer, String> delegate 
+        = Maps.newTreeMap(Ordering.natural().nullsFirst());
+    
+    @Override protected SortedMap<Integer, String> delegate() {
+      return delegate;
+    }
+    
+    // Needed by MapInterfaceTest.testContainsKey()
+    @Override public boolean containsKey(Object key) {
+      try {
+        return super.containsKey(key);
+      } catch (ClassCastException e) {
+        return false;
+      }
+    }
+  }
+  
+  public static class FilteredEntriesSortedMapInterfaceTest 
+      extends SortedMapInterfaceTest<Integer, String> {
+    public FilteredEntriesSortedMapInterfaceTest() {
+      super(true, true, true, true, true);      
+    }
+
+    @Override protected SortedMap<Integer, String> makeEmptyMap() {
+      SortedMap<Integer, String> unfiltered = new ContainsKeySafeSortedMap();
+      unfiltered.put(1, "one");
+      unfiltered.put(3, "three");
+      unfiltered.put(4, "four");         
+      unfiltered.put(5, "five");
+      return SortedMaps.filterEntries(unfiltered, EVEN_AND_LENGTH_3);
+    }
+
+    @Override protected SortedMap<Integer, String> makePopulatedMap() {
+      SortedMap<Integer, String> unfiltered = new ContainsKeySafeSortedMap();
+      unfiltered.put(1, "one");
+      unfiltered.put(2, "two");
+      unfiltered.put(3, "three");
+      unfiltered.put(4, "four");
+      unfiltered.put(5, "five");
+      unfiltered.put(6, "six");
+      return SortedMaps.filterEntries(unfiltered, EVEN_AND_LENGTH_3);
+    }
+
+    @Override protected Integer getKeyNotInPopulatedMap() {
+      return 10;
+    }
+
+    @Override protected String getValueNotInPopulatedMap() {
+      return "ten";
+    }
+    
+    // Iterators don't support remove.
+    @Override public void testEntrySetIteratorRemove() {}
+    @Override public void testValuesIteratorRemove() {}
+    
+    // These tests fail on GWT.
+    // TODO: Investigate why.
+    @Override public void testEntrySetRemoveAll() {}
+    @Override public void testEntrySetRetainAll() {}
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/SubMapMultimapAsMapImplementsMapTest.java b/guava-tests/test/com/google/common/collect/SubMapMultimapAsMapImplementsMapTest.java
new file mode 100644
index 0000000..1237f24
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/SubMapMultimapAsMapImplementsMapTest.java
@@ -0,0 +1,117 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.collect.testing.MapInterfaceTest;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Map;
+
+/**
+ * Test {@code TreeMultimap.asMap().subMap()} with {@link MapInterfaceTest}.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible
+public class SubMapMultimapAsMapImplementsMapTest
+    extends AbstractMultimapAsMapImplementsMapTest {
+
+  public SubMapMultimapAsMapImplementsMapTest() {
+    super(true, true, true);
+  }
+
+  private TreeMultimap<String, Integer> createMultimap() {
+    TreeMultimap<String, Integer> multimap
+        = TreeMultimap.create(Ordering.<String>natural().nullsFirst(),
+            Ordering.<Integer>natural().nullsFirst());
+    multimap.put("a", -1);
+    multimap.put("a", -3);
+    multimap.put("z", -2);
+    return multimap;
+  }
+
+  @Override protected Map<String, Collection<Integer>> makeEmptyMap() {
+    return createMultimap().asMap().subMap("e", "p");
+  }
+
+  @Override protected Map<String, Collection<Integer>> makePopulatedMap() {
+    TreeMultimap<String, Integer> multimap = createMultimap();
+    multimap.put("f", 1);
+    multimap.put("f", 2);
+    multimap.put("g", 3);
+    multimap.put("h", 4);
+    return multimap.asMap().subMap("e", "p");
+  }
+
+  @Override protected String getKeyNotInPopulatedMap() {
+    return "a";
+  }
+
+  @Override protected Collection<Integer> getValueNotInPopulatedMap() {
+    return Collections.singleton(-2);
+  }
+
+  @Override public void testEntrySetRemoveAllNullFromEmpty() {
+    try {
+      super.testEntrySetRemoveAllNullFromEmpty();
+    } catch (RuntimeException tolerated) {
+      // GWT's TreeMap.entrySet().removeAll(null) doesn't throws NPE.
+    }
+  }
+
+  @Override public void testEntrySetRetainAllNullFromEmpty() {
+    try {
+      super.testEntrySetRetainAllNullFromEmpty();
+    } catch (RuntimeException tolerated) {
+      // GWT's TreeMap.entrySet().retainAll(null) doesn't throws NPE.
+    }
+  }
+
+  @Override public void testKeySetRemoveAllNullFromEmpty() {
+    try {
+      super.testKeySetRemoveAllNullFromEmpty();
+    } catch (RuntimeException tolerated) {
+      // GWT's TreeMap.keySet().removeAll(null) doesn't throws NPE.
+    }
+  }
+
+  @Override public void testKeySetRetainAllNullFromEmpty() {
+    try {
+      super.testKeySetRetainAllNullFromEmpty();
+    } catch (RuntimeException tolerated) {
+      // GWT's TreeMap.keySet().retainAll(null) doesn't throws NPE.
+    }
+  }
+
+  @Override public void testValuesRemoveAllNullFromEmpty() {
+    try {
+      super.testValuesRemoveAllNullFromEmpty();
+    } catch (RuntimeException tolerated) {
+      // GWT's TreeMap.values().removeAll(null) doesn't throws NPE.
+    }
+  }
+
+  @Override public void testValuesRetainAllNullFromEmpty() {
+    try {
+      super.testValuesRemoveAllNullFromEmpty();
+    } catch (RuntimeException tolerated) {
+      // GWT's TreeMap.values().retainAll(null) doesn't throws NPE.
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/SynchronizedBiMapTest.java b/guava-tests/test/com/google/common/collect/SynchronizedBiMapTest.java
new file mode 100644
index 0000000..7e99f71
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/SynchronizedBiMapTest.java
@@ -0,0 +1,114 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.collect.Synchronized.SynchronizedBiMap;
+import com.google.common.collect.Synchronized.SynchronizedSet;
+
+import junit.framework.TestSuite;
+
+import java.util.Set;
+
+/**
+ * Tests for {@code Synchronized#biMap}.
+ *
+ * @author Mike Bostock
+ */
+public class SynchronizedBiMapTest extends SynchronizedMapTest {
+
+  public static TestSuite suite() {
+    TestSuite suite = new TestSuite(SynchronizedBiMapTest.class);
+    suite.addTestSuite(AbstractBiMapTests.class);
+    return suite;
+  }
+
+  @Override protected <K, V> BiMap<K, V> create() {
+    TestBiMap<K, V> inner =
+        new TestBiMap<K, V>(HashBiMap.<K, V>create(), mutex);
+    BiMap<K, V> outer = Synchronized.biMap(inner, mutex);
+    return outer;
+  }
+
+  static class TestBiMap<K, V> extends TestMap<K, V> implements BiMap<K, V> {
+    private final BiMap<K, V> delegate;
+
+    public TestBiMap(BiMap<K, V> delegate, Object mutex) {
+      super(delegate, mutex);
+      this.delegate = delegate;
+    }
+
+    @Override
+    public V forcePut(K key, V value) {
+      assertTrue(Thread.holdsLock(mutex));
+      return delegate.forcePut(key, value);
+    }
+
+    @Override
+    public BiMap<V, K> inverse() {
+      assertTrue(Thread.holdsLock(mutex));
+      return delegate.inverse();
+    }
+
+    @Override public Set<V> values() {
+      assertTrue(Thread.holdsLock(mutex));
+      return delegate.values();
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  public void testForcePut() {
+    create().forcePut(null, null);
+  }
+
+  public void testInverse() {
+    BiMap<String, Integer> bimap = create();
+    BiMap<Integer, String> inverse = bimap.inverse();
+    assertSame(bimap, inverse.inverse());
+    assertTrue(inverse instanceof SynchronizedBiMap);
+    assertSame(mutex, ((SynchronizedBiMap<?, ?>) inverse).mutex);
+  }
+
+  @Override public void testValues() {
+    BiMap<String, Integer> map = create();
+    Set<Integer> values = map.values();
+    assertTrue(values instanceof SynchronizedSet);
+    assertSame(mutex, ((SynchronizedSet<?>) values).mutex);
+  }
+
+  public static class AbstractBiMapTests extends AbstractBiMapTest {
+    public final Object mutex = new Integer(1); // something Serializable
+
+    @Override protected BiMap<Integer, String> create() {
+      TestBiMap<Integer, String> inner = new TestBiMap<Integer, String>(
+          HashBiMap.<Integer, String>create(), mutex);
+      BiMap<Integer, String> outer = Synchronized.biMap(inner, mutex);
+      return outer;
+    }
+
+    /**
+     * If you serialize a synchronized bimap and its inverse together, the
+     * reserialized bimaps will have backing maps that stay in sync, as shown
+     * by the {@code testSerializationWithInverseEqual()} test. However, the
+     * inverse of one won't be the same as the other.
+     *
+     * To make them the same, the inverse synchronized bimap would need a custom
+     * serialized form, similar to what {@code AbstractBiMap.Inverse} does.
+     */
+    @Override public void testSerializationWithInverseSame() {}
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/SynchronizedMapTest.java b/guava-tests/test/com/google/common/collect/SynchronizedMapTest.java
new file mode 100644
index 0000000..4df3e5f
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/SynchronizedMapTest.java
@@ -0,0 +1,218 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.collect.Synchronized.SynchronizedCollection;
+import com.google.common.collect.Synchronized.SynchronizedSet;
+import com.google.common.testing.SerializableTester;
+
+import junit.framework.TestCase;
+
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Tests for {@code Synchronized#map}.
+ *
+ * @author Mike Bostock
+ */
+public class SynchronizedMapTest extends TestCase {
+  public final Object mutex = new Integer(1); // something Serializable
+
+  protected <K, V> Map<K, V> create() {
+    TestMap<K, V> inner = new TestMap<K, V>(new HashMap<K, V>(), mutex);
+    Map<K, V> outer = Synchronized.map(inner, mutex);
+    return outer;
+  }
+
+  static class TestMap<K, V> extends ForwardingMap<K, V>
+      implements Serializable {
+    public final Object mutex;
+    private Map<K, V> delegate;
+    public TestMap(Map<K, V> delegate, Object mutex) {
+      checkNotNull(mutex);
+      this.delegate = delegate;
+      this.mutex = mutex;
+    }
+
+    @Override protected Map<K, V> delegate() {
+      return delegate;
+    }
+
+    @Override public int size() {
+      assertTrue(Thread.holdsLock(mutex));
+      return super.size();
+    }
+
+    @Override public boolean isEmpty() {
+      assertTrue(Thread.holdsLock(mutex));
+      return super.isEmpty();
+    }
+
+    @Override public V remove(Object object) {
+      assertTrue(Thread.holdsLock(mutex));
+      return super.remove(object);
+    }
+
+    @Override public void clear() {
+      assertTrue(Thread.holdsLock(mutex));
+      super.clear();
+    }
+
+    @Override public boolean containsKey(Object key) {
+      assertTrue(Thread.holdsLock(mutex));
+      return super.containsKey(key);
+    }
+
+    @Override public boolean containsValue(Object value) {
+      assertTrue(Thread.holdsLock(mutex));
+      return super.containsValue(value);
+    }
+
+    @Override public V get(Object key) {
+      assertTrue(Thread.holdsLock(mutex));
+      return super.get(key);
+    }
+
+    @Override public V put(K key, V value) {
+      assertTrue(Thread.holdsLock(mutex));
+      return super.put(key, value);
+    }
+
+    @Override public void putAll(Map<? extends K, ? extends V> map) {
+      assertTrue(Thread.holdsLock(mutex));
+      super.putAll(map);
+    }
+
+    @Override public Set<K> keySet() {
+      assertTrue(Thread.holdsLock(mutex));
+      return super.keySet();
+    }
+
+    @Override public Collection<V> values() {
+      assertTrue(Thread.holdsLock(mutex));
+      return super.values();
+    }
+
+    @Override public Set<Entry<K, V>> entrySet() {
+      assertTrue(Thread.holdsLock(mutex));
+      return super.entrySet();
+    }
+
+    @Override public boolean equals(Object obj) {
+      assertTrue(Thread.holdsLock(mutex));
+      return super.equals(obj);
+    }
+
+    @Override public int hashCode() {
+      assertTrue(Thread.holdsLock(mutex));
+      return super.hashCode();
+    }
+
+    @Override public String toString() {
+      assertTrue(Thread.holdsLock(mutex));
+      return super.toString();
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  /*
+   * This is somewhat of a weak test; we verify that all of the methods are
+   * correct, but not that they're actually forwarding correctly. We also rely
+   * on the other tests (e.g., SynchronizedSetTest) to verify that the
+   * collection views are synchronized correctly.
+   */
+
+  public void testSize() {
+    create().size();
+  }
+
+  public void testIsEmpty() {
+    create().isEmpty();
+  }
+
+  public void testRemove() {
+    create().remove(null);
+  }
+
+  public void testClear() {
+    create().clear();
+  }
+
+  public void testContainsKey() {
+    create().containsKey(null);
+  }
+
+  public void testContainsValue() {
+    create().containsValue(null);
+  }
+
+  public void testGet() {
+    create().get(null);
+  }
+
+  public void testPut() {
+    create().put(null, null);
+  }
+
+  public void testPutAll() {
+    create().putAll(new HashMap<String, Integer>());
+  }
+
+  public void testKeySet() {
+    Map<String, Integer> map = create();
+    Set<String> keySet = map.keySet();
+    assertTrue(keySet instanceof SynchronizedSet);
+    assertSame(mutex, ((SynchronizedSet<?>) keySet).mutex);
+  }
+
+  public void testValues() {
+    Map<String, Integer> map = create();
+    Collection<Integer> values = map.values();
+    assertTrue(values instanceof SynchronizedCollection);
+    assertSame(mutex, ((SynchronizedCollection<?>) values).mutex);
+  }
+
+  public void testEntrySet() {
+    Map<String, Integer> map = create();
+    Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
+    assertTrue(entrySet instanceof SynchronizedSet);
+    assertSame(mutex, ((SynchronizedSet<?>) entrySet).mutex);
+  }
+
+  public void testEquals() {
+    create().equals(new HashMap<String, Integer>());
+  }
+
+  public void testHashCode() {
+    create().hashCode();
+  }
+
+  public void testToString() {
+    create().toString();
+  }
+
+  public void testSerialization() {
+    SerializableTester.reserializeAndAssert(create());
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/SynchronizedMultimapTest.java b/guava-tests/test/com/google/common/collect/SynchronizedMultimapTest.java
new file mode 100644
index 0000000..9e8ee22
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/SynchronizedMultimapTest.java
@@ -0,0 +1,215 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import java.io.Serializable;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Map;
+import java.util.RandomAccess;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * Tests for {@code Synchronized#multimap}.
+ *
+ * @author Mike Bostock
+ */
+public class SynchronizedMultimapTest extends AbstractSetMultimapTest {
+
+  @Override protected Multimap<String, Integer> create() {
+    TestMultimap<String, Integer> inner = new TestMultimap<String, Integer>();
+    Multimap<String, Integer> outer = Synchronized.multimap(inner, inner.mutex);
+    return outer;
+  }
+
+  private static final class TestMultimap<K, V> extends ForwardingMultimap<K, V>
+      implements Serializable {
+    final Multimap<K, V> delegate = HashMultimap.create();
+    public final Object mutex = new Integer(1); // something Serializable
+
+    @Override protected Multimap<K, V> delegate() {
+      return delegate;
+    }
+
+    @Override public String toString() {
+      assertTrue(Thread.holdsLock(mutex));
+      return super.toString();
+    }
+
+    @Override public boolean equals(@Nullable Object o) {
+      assertTrue(Thread.holdsLock(mutex));
+      return super.equals(o);
+    }
+
+    @Override public int hashCode() {
+      assertTrue(Thread.holdsLock(mutex));
+      return super.hashCode();
+    }
+
+    @Override public int size() {
+      assertTrue(Thread.holdsLock(mutex));
+      return super.size();
+    }
+
+    @Override public boolean isEmpty() {
+      assertTrue(Thread.holdsLock(mutex));
+      return super.isEmpty();
+    }
+
+    @Override public boolean containsKey(@Nullable Object key) {
+      assertTrue(Thread.holdsLock(mutex));
+      return super.containsKey(key);
+    }
+
+    @Override public boolean containsValue(@Nullable Object value) {
+      assertTrue(Thread.holdsLock(mutex));
+      return super.containsValue(value);
+    }
+
+    @Override public boolean containsEntry(@Nullable Object key,
+        @Nullable Object value) {
+      assertTrue(Thread.holdsLock(mutex));
+      return super.containsEntry(key, value);
+    }
+
+    @Override public Collection<V> get(@Nullable K key) {
+      assertTrue(Thread.holdsLock(mutex));
+      /* TODO: verify that the Collection is also synchronized? */
+      return super.get(key);
+    }
+
+    @Override public boolean put(K key, V value) {
+      assertTrue(Thread.holdsLock(mutex));
+      return super.put(key, value);
+    }
+
+    @Override public boolean putAll(@Nullable K key,
+        Iterable<? extends V> values) {
+      assertTrue(Thread.holdsLock(mutex));
+      return super.putAll(key, values);
+    }
+
+    @Override public boolean putAll(Multimap<? extends K, ? extends V> map) {
+      assertTrue(Thread.holdsLock(mutex));
+      return super.putAll(map);
+    }
+
+    @Override public Collection<V> replaceValues(@Nullable K key,
+        Iterable<? extends V> values) {
+      assertTrue(Thread.holdsLock(mutex));
+      return super.replaceValues(key, values);
+    }
+
+    @Override public boolean remove(@Nullable Object key,
+        @Nullable Object value) {
+      assertTrue(Thread.holdsLock(mutex));
+      return super.remove(key, value);
+    }
+
+    @Override public Collection<V> removeAll(@Nullable Object key) {
+      assertTrue(Thread.holdsLock(mutex));
+      return super.removeAll(key);
+    }
+
+    @Override public void clear() {
+      assertTrue(Thread.holdsLock(mutex));
+      super.clear();
+    }
+
+    @Override public Set<K> keySet() {
+      assertTrue(Thread.holdsLock(mutex));
+      /* TODO: verify that the Set is also synchronized? */
+      return super.keySet();
+    }
+
+    @Override public Multiset<K> keys() {
+      assertTrue(Thread.holdsLock(mutex));
+      /* TODO: verify that the Set is also synchronized? */
+      return super.keys();
+    }
+
+    @Override public Collection<V> values() {
+      assertTrue(Thread.holdsLock(mutex));
+      /* TODO: verify that the Collection is also synchronized? */
+      return super.values();
+    }
+
+    @Override public Collection<Map.Entry<K, V>> entries() {
+      assertTrue(Thread.holdsLock(mutex));
+      /* TODO: verify that the Collection is also synchronized? */
+      return super.entries();
+    }
+
+    @Override public Map<K, Collection<V>> asMap() {
+      assertTrue(Thread.holdsLock(mutex));
+      /* TODO: verify that the Map is also synchronized? */
+      return super.asMap();
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  public void testSynchronizedListMultimap() {
+    ListMultimap<String, Integer> multimap
+        = Multimaps.synchronizedListMultimap(
+            ArrayListMultimap.<String, Integer>create());
+    multimap.putAll("foo", Arrays.asList(3, -1, 2, 4, 1));
+    multimap.putAll("bar", Arrays.asList(1, 2, 3, 1));
+    ASSERT.that(multimap.removeAll("foo")).hasContentsInOrder(3, -1, 2, 4, 1);
+    assertFalse(multimap.containsKey("foo"));
+    ASSERT.that(multimap.replaceValues("bar", Arrays.asList(6, 5)))
+        .hasContentsInOrder(1, 2, 3, 1);
+    ASSERT.that(multimap.get("bar")).hasContentsInOrder(6, 5);
+  }
+
+  public void testSynchronizedSortedSetMultimap() {
+    SortedSetMultimap<String, Integer> multimap
+        = Multimaps.synchronizedSortedSetMultimap(
+            TreeMultimap.<String, Integer>create());
+    multimap.putAll("foo", Arrays.asList(3, -1, 2, 4, 1));
+    multimap.putAll("bar", Arrays.asList(1, 2, 3, 1));
+    ASSERT.that(multimap.removeAll("foo")).hasContentsInOrder(-1, 1, 2, 3, 4);
+    assertFalse(multimap.containsKey("foo"));
+    ASSERT.that(multimap.replaceValues("bar", Arrays.asList(6, 5)))
+        .hasContentsInOrder(1, 2, 3);
+    ASSERT.that(multimap.get("bar")).hasContentsInOrder(5, 6);
+  }
+
+  public void testSynchronizedArrayListMultimapRandomAccess() {
+    ListMultimap<String, Integer> delegate = ArrayListMultimap.create();
+    delegate.put("foo", 1);
+    delegate.put("foo", 3);
+    ListMultimap<String, Integer> multimap
+        = Multimaps.synchronizedListMultimap(delegate);
+    assertTrue(multimap.get("foo") instanceof RandomAccess);
+    assertTrue(multimap.get("bar") instanceof RandomAccess);
+  }
+
+  public void testSynchronizedLinkedListMultimapRandomAccess() {
+    ListMultimap<String, Integer> delegate = LinkedListMultimap.create();
+    delegate.put("foo", 1);
+    delegate.put("foo", 3);
+    ListMultimap<String, Integer> multimap
+        = Multimaps.synchronizedListMultimap(delegate);
+    assertFalse(multimap.get("foo") instanceof RandomAccess);
+    assertFalse(multimap.get("bar") instanceof RandomAccess);
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/SynchronizedSetTest.java b/guava-tests/test/com/google/common/collect/SynchronizedSetTest.java
new file mode 100644
index 0000000..a33d0b7
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/SynchronizedSetTest.java
@@ -0,0 +1,145 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.testing.SerializableTester;
+
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * Tests for {@code Synchronized#set}.
+ *
+ * @author Mike Bostock
+ */
+public class SynchronizedSetTest extends AbstractCollectionTest {
+  public final Object mutex = new Integer(1); // something Serializable
+
+  @Override protected <E> Set<E> create() {
+    TestSet<E> inner = new TestSet<E>(new HashSet<E>(), mutex);
+    Set<E> outer = Synchronized.set(inner, inner.mutex);
+    return outer;
+  }
+
+  @Override public void testNullPointerExceptions() throws Exception {
+    /* Skip this test, as SynchronizedSet is not a public class. */
+  }
+
+  public void testSerialization() {
+    SerializableTester.reserializeAndAssert(create());
+  }
+
+  static class TestSet<E> extends ForwardingSet<E> implements Serializable {
+    final Set<E> delegate;
+    public final Object mutex;
+
+    public TestSet(Set<E> delegate, Object mutex) {
+      checkNotNull(mutex);
+      this.delegate = delegate;
+      this.mutex = mutex;
+    }
+
+    @Override protected Set<E> delegate() {
+      return delegate;
+    }
+
+    @Override public String toString() {
+      assertTrue(Thread.holdsLock(mutex));
+      return super.toString();
+    }
+
+    @Override public boolean equals(@Nullable Object o) {
+      assertTrue(Thread.holdsLock(mutex));
+      return super.equals(o);
+    }
+
+    @Override public int hashCode() {
+      assertTrue(Thread.holdsLock(mutex));
+      return super.hashCode();
+    }
+
+    @Override public boolean add(@Nullable E o) {
+      assertTrue(Thread.holdsLock(mutex));
+      return super.add(o);
+    }
+
+    @Override public boolean addAll(Collection<? extends E> c) {
+      assertTrue(Thread.holdsLock(mutex));
+      return super.addAll(c);
+    }
+
+    @Override public void clear() {
+      assertTrue(Thread.holdsLock(mutex));
+      super.clear();
+    }
+
+    @Override public boolean contains(@Nullable Object o) {
+      assertTrue(Thread.holdsLock(mutex));
+      return super.contains(o);
+    }
+
+    @Override public boolean containsAll(Collection<?> c) {
+      assertTrue(Thread.holdsLock(mutex));
+      return super.containsAll(c);
+    }
+
+    @Override public boolean isEmpty() {
+      assertTrue(Thread.holdsLock(mutex));
+      return super.isEmpty();
+    }
+
+    /* Don't test iterator(); it may or may not hold the mutex. */
+
+    @Override public boolean remove(@Nullable Object o) {
+      assertTrue(Thread.holdsLock(mutex));
+      return super.remove(o);
+    }
+
+    @Override public boolean removeAll(Collection<?> c) {
+      assertTrue(Thread.holdsLock(mutex));
+      return super.removeAll(c);
+    }
+
+    @Override public boolean retainAll(Collection<?> c) {
+      assertTrue(Thread.holdsLock(mutex));
+      return super.retainAll(c);
+    }
+
+    @Override public int size() {
+      assertTrue(Thread.holdsLock(mutex));
+      return super.size();
+    }
+
+    @Override public Object[] toArray() {
+      assertTrue(Thread.holdsLock(mutex));
+      return super.toArray();
+    }
+
+    @Override public <T> T[] toArray(T[] a) {
+      assertTrue(Thread.holdsLock(mutex));
+      return super.toArray(a);
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/TableCollectionTest.java b/guava-tests/test/com/google/common/collect/TableCollectionTest.java
new file mode 100644
index 0000000..9eed028
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/TableCollectionTest.java
@@ -0,0 +1,1381 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.collect.testing.testers.CollectionIteratorTester.getIteratorKnownOrderRemoveSupportedMethod;
+import static com.google.common.collect.testing.testers.CollectionIteratorTester.getIteratorUnknownOrderRemoveSupportedMethod;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.base.Function;
+import com.google.common.base.Functions;
+import com.google.common.collect.Table.Cell;
+import com.google.common.collect.testing.CollectionTestSuiteBuilder;
+import com.google.common.collect.testing.MapInterfaceTest;
+import com.google.common.collect.testing.SampleElements;
+import com.google.common.collect.testing.SetTestSuiteBuilder;
+import com.google.common.collect.testing.TestSetGenerator;
+import com.google.common.collect.testing.TestStringCollectionGenerator;
+import com.google.common.collect.testing.TestStringSetGenerator;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.Feature;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.SortedMap;
+
+/**
+ * Collection tests for {@link Table} implementations.
+ *
+ * @author Jared Levy
+ * @author Louis Wasserman
+ */
+@GwtCompatible(emulated = true)
+public class TableCollectionTest extends TestCase {
+
+  private static final Feature<?>[] COLLECTION_FEATURES = {
+    CollectionSize.ANY,
+    CollectionFeature.ALLOWS_NULL_QUERIES
+  };
+
+  private static final Feature<?>[] COLLECTION_FEATURES_ORDER = {
+    CollectionSize.ANY,
+    CollectionFeature.KNOWN_ORDER,
+    CollectionFeature.ALLOWS_NULL_QUERIES
+  };
+
+  private static final Feature<?>[] COLLECTION_FEATURES_REMOVE = {
+    CollectionSize.ANY,
+    CollectionFeature.REMOVE_OPERATIONS,
+    CollectionFeature.ALLOWS_NULL_QUERIES
+  };
+
+  private static final Feature<?>[] COLLECTION_FEATURES_REMOVE_ORDER = {
+    CollectionSize.ANY,
+    CollectionFeature.KNOWN_ORDER,
+    CollectionFeature.REMOVE_OPERATIONS,
+    CollectionFeature.ALLOWS_NULL_QUERIES
+  };
+
+  @GwtIncompatible("suite")
+  public static Test suite() {
+    TestSuite suite = new TestSuite();
+    suite.addTestSuite(ArrayRowTests.class);
+    suite.addTestSuite(HashRowTests.class);
+    suite.addTestSuite(TreeRowTests.class);
+    suite.addTestSuite(TransposeRowTests.class);
+    suite.addTestSuite(TransformValueRowTests.class);
+    suite.addTestSuite(UnmodifiableHashRowTests.class);
+    suite.addTestSuite(UnmodifiableTreeRowTests.class);
+    suite.addTestSuite(ArrayColumnTests.class);
+    suite.addTestSuite(HashColumnTests.class);
+    suite.addTestSuite(TreeColumnTests.class);
+    suite.addTestSuite(TransposeColumnTests.class);
+    suite.addTestSuite(TransformValueColumnTests.class);
+    suite.addTestSuite(UnmodifiableHashColumnTests.class);
+    suite.addTestSuite(UnmodifiableTreeColumnTests.class);
+    suite.addTestSuite(ArrayRowMapTests.class);
+    suite.addTestSuite(HashRowMapTests.class);
+    suite.addTestSuite(TreeRowMapTests.class);
+    suite.addTestSuite(TreeRowMapHeadMapTests.class);
+    suite.addTestSuite(TreeRowMapTailMapTests.class);
+    suite.addTestSuite(TreeRowMapSubMapTests.class);
+    suite.addTestSuite(TransformValueRowMapTests.class);
+    suite.addTestSuite(UnmodifiableHashRowMapTests.class);
+    suite.addTestSuite(UnmodifiableTreeRowMapTests.class);
+    suite.addTestSuite(ArrayColumnMapTests.class);
+    suite.addTestSuite(HashColumnMapTests.class);
+    suite.addTestSuite(TreeColumnMapTests.class);
+    suite.addTestSuite(TransformValueColumnMapTests.class);
+    suite.addTestSuite(UnmodifiableHashColumnMapTests.class);
+    suite.addTestSuite(UnmodifiableTreeColumnMapTests.class);
+
+    // Not testing rowKeySet() or columnKeySet() of Table.transformValues()
+    // since the transformation doesn't affect the row and column key sets.
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+          @Override protected Set<String> create(String[] elements) {
+            Table<String, Integer, Character> table
+                = ArrayTable.create(
+                    ImmutableList.copyOf(elements), ImmutableList.of(1, 2));
+            populateForRowKeySet(table, elements);
+            return table.rowKeySet();
+          }
+        })
+        .named("ArrayTable.rowKeySet")
+        .withFeatures(CollectionSize.ONE, CollectionSize.SEVERAL,
+            CollectionFeature.KNOWN_ORDER,
+            CollectionFeature.REJECTS_DUPLICATES_AT_CREATION,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+          @Override protected Set<String> create(String[] elements) {
+            Table<String, Integer, Character> table = HashBasedTable.create();
+            populateForRowKeySet(table, elements);
+            return table.rowKeySet();
+          }
+        })
+        .named("HashBasedTable.rowKeySet")
+        .withFeatures(COLLECTION_FEATURES_REMOVE)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+          @Override protected Set<String> create(String[] elements) {
+            Table<String, Integer, Character> table = TreeBasedTable.create();
+            populateForRowKeySet(table, elements);
+            return table.rowKeySet();
+          }
+
+          @Override public List<String> order(List<String> insertionOrder) {
+            Collections.sort(insertionOrder);
+            return insertionOrder;
+          }
+        })
+        .named("TreeBasedTable.rowKeySet")
+        .withFeatures(COLLECTION_FEATURES_REMOVE_ORDER)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+          @Override protected Set<String> create(String[] elements) {
+            TreeBasedTable<String, Integer, Character> table
+                = TreeBasedTable.create();
+            populateForRowKeySet(table, elements);
+            table.put("z", 1, 'a');
+            return table.rowKeySet().headSet("x");
+          }
+
+          @Override public List<String> order(List<String> insertionOrder) {
+            Collections.sort(insertionOrder);
+            return insertionOrder;
+          }
+        })
+        .named("TreeBasedTable.rowKeySet.headSet")
+        .withFeatures(COLLECTION_FEATURES_REMOVE_ORDER)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+          @Override protected Set<String> create(String[] elements) {
+            TreeBasedTable<String, Integer, Character> table
+                = TreeBasedTable.create();
+            populateForRowKeySet(table, elements);
+            table.put("\0", 1, 'a');
+            return table.rowKeySet().tailSet("a");
+          }
+
+          @Override public List<String> order(List<String> insertionOrder) {
+            Collections.sort(insertionOrder);
+            return insertionOrder;
+          }
+        })
+        .named("TreeBasedTable.rowKeySet.tailSet")
+        .withFeatures(COLLECTION_FEATURES_REMOVE_ORDER)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+          @Override protected Set<String> create(String[] elements) {
+            TreeBasedTable<String, Integer, Character> table
+                = TreeBasedTable.create();
+            populateForRowKeySet(table, elements);
+            table.put("\0", 1, 'a');
+            table.put("z", 1, 'a');
+            return table.rowKeySet().subSet("a", "x");
+          }
+
+          @Override public List<String> order(List<String> insertionOrder) {
+            Collections.sort(insertionOrder);
+            return insertionOrder;
+          }
+        })
+        .named("TreeBasedTable.rowKeySet.subSet")
+        .withFeatures(COLLECTION_FEATURES_REMOVE_ORDER)
+        .createTestSuite());
+    
+    suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+          @Override protected Set<String> create(String[] elements) {
+            Table<String, Integer, Character> table = HashBasedTable.create();
+            populateForRowKeySet(table, elements);
+            return Tables.unmodifiableTable(table).rowKeySet();
+          }
+        })
+        .named("unmodifiableTable[HashBasedTable].rowKeySet")
+        .withFeatures(COLLECTION_FEATURES)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+          @Override protected Set<String> create(String[] elements) {
+            RowSortedTable<String, Integer, Character> table = TreeBasedTable.create();
+            populateForRowKeySet(table, elements);
+            return Tables.unmodifiableRowSortedTable(table).rowKeySet();
+          }
+
+          @Override public List<String> order(List<String> insertionOrder) {
+            Collections.sort(insertionOrder);
+            return insertionOrder;
+          }
+        })
+        .named("unmodifiableRowSortedTable[TreeBasedTable].rowKeySet")
+        .withFeatures(COLLECTION_FEATURES_ORDER)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+          @Override protected Set<String> create(String[] elements) {
+            Table<Integer, String, Character> table
+                = ArrayTable.create(
+                    ImmutableList.of(1, 2), ImmutableList.copyOf(elements));
+            populateForColumnKeySet(table, elements);
+            return table.columnKeySet();
+          }
+        })
+        .named("ArrayTable.columnKeySet")
+        .withFeatures(CollectionSize.ONE, CollectionSize.SEVERAL,
+            CollectionFeature.KNOWN_ORDER,
+            CollectionFeature.REJECTS_DUPLICATES_AT_CREATION,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+          @Override protected Set<String> create(String[] elements) {
+            Table<Integer, String, Character> table = HashBasedTable.create();
+            populateForColumnKeySet(table, elements);
+            return table.columnKeySet();
+          }
+        })
+        .named("HashBasedTable.columnKeySet")
+        .withFeatures(COLLECTION_FEATURES_REMOVE)
+        .suppressing(getIteratorUnknownOrderRemoveSupportedMethod())
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+          @Override protected Set<String> create(String[] elements) {
+            Table<Integer, String, Character> table = TreeBasedTable.create();
+            populateForColumnKeySet(table, elements);
+            return table.columnKeySet();
+          }
+
+          @Override public List<String> order(List<String> insertionOrder) {
+            Collections.sort(insertionOrder);
+            return insertionOrder;
+          }
+        })
+        .named("TreeBasedTable.columnKeySet")
+        .withFeatures(COLLECTION_FEATURES_REMOVE_ORDER)
+        .suppressing(getIteratorKnownOrderRemoveSupportedMethod())
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+          @Override protected Set<String> create(String[] elements) {
+            Table<Integer, String, Character> table = HashBasedTable.create();
+            populateForColumnKeySet(table, elements);
+            return Tables.unmodifiableTable(table).columnKeySet();
+          }
+        })
+        .named("unmodifiableTable[HashBasedTable].columnKeySet")
+        .withFeatures(COLLECTION_FEATURES)
+        .suppressing(getIteratorUnknownOrderRemoveSupportedMethod())
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+          @Override protected Set<String> create(String[] elements) {
+            RowSortedTable<Integer, String, Character> table = TreeBasedTable.create();
+            populateForColumnKeySet(table, elements);
+            return Tables.unmodifiableRowSortedTable(table).columnKeySet();
+          }
+
+          @Override public List<String> order(List<String> insertionOrder) {
+            Collections.sort(insertionOrder);
+            return insertionOrder;
+          }
+        })
+        .named("unmodifiableRowSortedTable[TreeBasedTable].columnKeySet")
+        .withFeatures(COLLECTION_FEATURES_ORDER)
+        .suppressing(getIteratorKnownOrderRemoveSupportedMethod())
+        .createTestSuite());
+
+    suite.addTest(CollectionTestSuiteBuilder.using(
+        new TestStringCollectionGenerator() {
+          @Override protected Collection<String> create(String[] elements) {
+            List<Integer> rowKeys = Lists.newArrayList();
+            for (int i = 0; i < elements.length; i++) {
+              rowKeys.add(i);
+            }
+            Table<Integer, Character, String> table
+                = ArrayTable.create(rowKeys, ImmutableList.of('a'));
+            populateForValues(table, elements);
+            return table.values();
+          }
+        })
+        .named("ArrayTable.values")
+        .withFeatures(CollectionSize.ONE, CollectionSize.SEVERAL,
+            CollectionFeature.ALLOWS_NULL_VALUES,
+            CollectionFeature.KNOWN_ORDER)
+        .createTestSuite());
+
+    suite.addTest(CollectionTestSuiteBuilder.using(
+        new TestStringCollectionGenerator() {
+          @Override protected Collection<String> create(String[] elements) {
+            Table<Integer, Character, String> table = HashBasedTable.create();
+            table.put(1, 'a', "foo");
+            table.clear();
+            populateForValues(table, elements);
+            return table.values();
+          }
+        })
+        .named("HashBasedTable.values")
+        .withFeatures(COLLECTION_FEATURES_REMOVE)
+        .createTestSuite());
+
+    suite.addTest(CollectionTestSuiteBuilder.using(
+        new TestStringCollectionGenerator() {
+          @Override protected Collection<String> create(String[] elements) {
+            Table<Integer, Character, String> table = TreeBasedTable.create();
+            table.put(1, 'a', "foo");
+            table.clear();
+            populateForValues(table, elements);
+            return table.values();
+          }
+        })
+        .named("TreeBasedTable.values")
+        .withFeatures(COLLECTION_FEATURES_REMOVE_ORDER)
+        .createTestSuite());
+
+    final Function<String, String> removeFirstCharacter
+        = new Function<String, String>() {
+          @Override public String apply(String input) {
+            return input.substring(1);
+          }
+        };
+
+    suite.addTest(CollectionTestSuiteBuilder.using(
+        new TestStringCollectionGenerator() {
+          @Override protected Collection<String> create(String[] elements) {
+            Table<Integer, Character, String> table = HashBasedTable.create();
+            for (int i = 0; i < elements.length; i++) {
+              table.put(i, 'a', "x" + checkNotNull(elements[i]));
+            }
+            return Tables.transformValues(table, removeFirstCharacter).values();
+          }
+        })
+        .named("TransformValues.values")
+        .withFeatures(COLLECTION_FEATURES_REMOVE)
+        .createTestSuite());
+
+    suite.addTest(CollectionTestSuiteBuilder.using(
+        new TestStringCollectionGenerator() {
+          @Override protected Collection<String> create(String[] elements) {
+            Table<Integer, Character, String> table = HashBasedTable.create();
+            table.put(1, 'a', "foo");
+            table.clear();
+            populateForValues(table, elements);
+            return Tables.unmodifiableTable(table).values();
+          }
+        })
+        .named("unmodifiableTable[HashBasedTable].values")
+        .withFeatures(COLLECTION_FEATURES)
+        .createTestSuite());
+
+    suite.addTest(CollectionTestSuiteBuilder.using(
+        new TestStringCollectionGenerator() {
+          @Override protected Collection<String> create(String[] elements) {
+            RowSortedTable<Integer, Character, String> table = TreeBasedTable.create();
+            table.put(1, 'a', "foo");
+            table.clear();
+            populateForValues(table, elements);
+            return Tables.unmodifiableRowSortedTable(table).values();
+          }
+        })
+        .named("unmodifiableTable[TreeBasedTable].values")
+        .withFeatures(COLLECTION_FEATURES_ORDER)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestCellSetGenerator() {
+          @Override public SampleElements<Cell<String, Integer, Character>>
+              samples() {
+            return new SampleElements<Cell<String, Integer, Character>>(
+                Tables.immutableCell("bar", 1, 'a'),
+                Tables.immutableCell("bar", 2, 'b'),
+                Tables.immutableCell("bar", 3, (Character) null),
+                Tables.immutableCell("bar", 4, 'b'),
+                Tables.immutableCell("bar", 5, 'b'));
+          }
+          @Override public Set<Cell<String, Integer, Character>> create(
+              Object... elements) {
+            List<Integer> columnKeys = Lists.newArrayList();
+            for (Object element : elements) {
+              @SuppressWarnings("unchecked")
+              Cell<String, Integer, Character> cell
+                  = (Cell<String, Integer, Character>) element;
+              columnKeys.add(cell.getColumnKey());
+            }
+            Table<String, Integer, Character> table
+                = ArrayTable.create(ImmutableList.of("bar"), columnKeys);
+            for (Object element : elements) {
+              @SuppressWarnings("unchecked")
+              Cell<String, Integer, Character> cell
+                  = (Cell<String, Integer, Character>) element;
+              table.put(cell.getRowKey(), cell.getColumnKey(), cell.getValue());
+            }
+            return table.cellSet();
+          }
+          @Override Table<String, Integer, Character> createTable() {
+            throw new UnsupportedOperationException();
+          }
+        })
+        .named("ArrayTable.cellSet")
+        .withFeatures(CollectionSize.ONE, CollectionSize.SEVERAL,
+            CollectionFeature.KNOWN_ORDER,
+            CollectionFeature.REJECTS_DUPLICATES_AT_CREATION,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestCellSetGenerator() {
+          @Override Table<String, Integer, Character> createTable() {
+            return HashBasedTable.create();
+          }
+        })
+        .named("HashBasedTable.cellSet")
+        .withFeatures(CollectionSize.ANY, CollectionFeature.REMOVE_OPERATIONS,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestCellSetGenerator() {
+          @Override Table<String, Integer, Character> createTable() {
+            return TreeBasedTable.create();
+          }
+        })
+        .named("TreeBasedTable.cellSet")
+        .withFeatures(CollectionSize.ANY, CollectionFeature.REMOVE_OPERATIONS,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestCellSetGenerator() {
+          @Override Table<String, Integer, Character> createTable() {
+            Table<Integer, String, Character> original
+                = TreeBasedTable.create();
+            return Tables.transpose(original);
+          }
+        })
+        .named("TransposedTable.cellSet")
+        .withFeatures(CollectionSize.ANY, CollectionFeature.REMOVE_OPERATIONS,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestCellSetGenerator() {
+          @Override Table<String, Integer, Character> createTable() {
+            return HashBasedTable.create();
+          }
+          @Override
+          public Set<Cell<String, Integer, Character>> create(
+              Object... elements) {
+            Table<String, Integer, Character> table = createTable();
+            for (Object element : elements) {
+              @SuppressWarnings("unchecked")
+              Cell<String, Integer, Character> cell
+                  = (Cell<String, Integer, Character>) element;
+              table.put(cell.getRowKey(), cell.getColumnKey(), cell.getValue());
+            }
+            return Tables.transformValues(table, Functions.<Character>identity()).cellSet();
+          }
+        })
+        .named("TransformValues.cellSet")
+        .withFeatures(CollectionSize.ANY, CollectionFeature.ALLOWS_NULL_QUERIES)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestCellSetGenerator() {
+          @Override Table<String, Integer, Character> createTable() {
+            return Tables.unmodifiableTable(HashBasedTable.<String, Integer, Character> create());
+          }
+          @Override
+          public Set<Cell<String, Integer, Character>> create(
+              Object... elements) {
+            Table<String, Integer, Character> table = HashBasedTable.create();
+            for (Object element : elements) {
+              @SuppressWarnings("unchecked")
+              Cell<String, Integer, Character> cell
+                  = (Cell<String, Integer, Character>) element;
+              table.put(cell.getRowKey(), cell.getColumnKey(), cell.getValue());
+            }
+            return Tables.unmodifiableTable(table).cellSet();
+          }
+        })
+        .named("unmodifiableTable[HashBasedTable].cellSet")
+        .withFeatures(CollectionSize.ANY, CollectionFeature.ALLOWS_NULL_QUERIES)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestCellSetGenerator() {
+          @Override RowSortedTable<String, Integer, Character> createTable() {
+            return Tables.unmodifiableRowSortedTable(TreeBasedTable
+                .<String, Integer, Character> create());
+          }
+          @Override
+          public Set<Cell<String, Integer, Character>> create(
+              Object... elements) {
+            RowSortedTable<String, Integer, Character> table = TreeBasedTable.create();
+            for (Object element : elements) {
+              @SuppressWarnings("unchecked")
+              Cell<String, Integer, Character> cell
+                  = (Cell<String, Integer, Character>) element;
+              table.put(cell.getRowKey(), cell.getColumnKey(), cell.getValue());
+            }
+            return Tables.unmodifiableRowSortedTable(table).cellSet();
+          }
+        })
+        .named("unmodifiableRowSortedTable[TreeBasedTable].cellSet")
+        .withFeatures(CollectionSize.ANY, CollectionFeature.ALLOWS_NULL_QUERIES)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+          @Override protected Set<String> create(String[] elements) {
+            Iterable<String> rowKeys = ImmutableSet.copyOf(elements);
+            Iterable<Integer> columnKeys = ImmutableList.of(1, 2, 3);
+            Table<String, Integer, Character> table
+                = ArrayTable.create(rowKeys, columnKeys);
+            populateForRowKeySet(table, elements);
+            return table.column(1).keySet();
+          }
+        })
+        .named("ArrayTable.column.keySet")
+        .withFeatures(CollectionSize.ONE, CollectionSize.SEVERAL,
+            CollectionFeature.KNOWN_ORDER,
+            CollectionFeature.ALLOWS_NULL_QUERIES)
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+          @Override protected Set<String> create(String[] elements) {
+            Table<String, Integer, Character> table = HashBasedTable.create();
+            populateForRowKeySet(table, elements);
+            return table.column(1).keySet();
+          }
+        })
+        .named("HashBasedTable.column.keySet")
+        .withFeatures(COLLECTION_FEATURES_REMOVE)
+        .suppressing(getIteratorUnknownOrderRemoveSupportedMethod())
+    .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+          @Override protected Set<String> create(String[] elements) {
+            Table<String, Integer, Character> table = TreeBasedTable.create();
+            populateForRowKeySet(table, elements);
+            return table.column(1).keySet();
+          }
+          @Override public List<String> order(List<String> insertionOrder) {
+            Collections.sort(insertionOrder);
+            return insertionOrder;
+          }
+        })
+        .named("TreeBasedTable.column.keySet")
+        .withFeatures(COLLECTION_FEATURES_REMOVE_ORDER)
+        .suppressing(getIteratorKnownOrderRemoveSupportedMethod())
+        .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+          @Override protected Set<String> create(String[] elements) {
+            Table<String, Integer, Character> table = HashBasedTable.create();
+            populateForRowKeySet(table, elements);
+            return Tables.transformValues(table, Functions.toStringFunction()).column(1).keySet();
+          }
+        })
+        .named("TransformValues.column.keySet")
+        .withFeatures(COLLECTION_FEATURES_REMOVE)
+        .suppressing(getIteratorUnknownOrderRemoveSupportedMethod())
+    .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+          @Override protected Set<String> create(String[] elements) {
+            Table<String, Integer, Character> table = HashBasedTable.create();
+            populateForRowKeySet(table, elements);
+            return Tables.unmodifiableTable(table).column(1).keySet();
+          }
+        })
+        .named("unmodifiableTable[HashBasedTable].column.keySet")
+        .withFeatures(COLLECTION_FEATURES)
+        .suppressing(getIteratorUnknownOrderRemoveSupportedMethod())
+    .createTestSuite());
+
+    suite.addTest(SetTestSuiteBuilder.using(new TestStringSetGenerator() {
+          @Override protected Set<String> create(String[] elements) {
+            RowSortedTable<String, Integer, Character> table = TreeBasedTable.create();
+            populateForRowKeySet(table, elements);
+            return Tables.unmodifiableRowSortedTable(table).column(1).keySet();
+          }
+          @Override public List<String> order(List<String> insertionOrder) {
+            Collections.sort(insertionOrder);
+            return insertionOrder;
+          }
+        })
+        .named("unmodifiableRowSortedTable[TreeBasedTable].column.keySet")
+        .withFeatures(COLLECTION_FEATURES_ORDER)
+        .suppressing(getIteratorKnownOrderRemoveSupportedMethod())
+        .createTestSuite());
+
+    return suite;
+  }
+
+  private static void populateForRowKeySet(
+      Table<String, Integer, Character> table, String[] elements) {
+    for (String row : elements) {
+      table.put(row, 1, 'a');
+      table.put(row, 2, 'b');
+    }
+  }
+
+  private static void populateForColumnKeySet(
+      Table<Integer, String, Character> table, String[] elements) {
+    for (String column : elements) {
+      table.put(1, column, 'a');
+      table.put(2, column, 'b');
+    }
+  }
+
+  private static void populateForValues(
+      Table<Integer, Character, String> table, String[] elements) {
+    for (int i = 0; i < elements.length; i++) {
+      table.put(i, 'a', elements[i]);
+    }
+  }
+
+  private static abstract class TestCellSetGenerator
+      implements TestSetGenerator<Cell<String, Integer, Character>> {
+    @Override
+    public SampleElements<Cell<String, Integer, Character>> samples() {
+      return new SampleElements<Cell<String, Integer, Character>>(
+          Tables.immutableCell("bar", 1, 'a'),
+          Tables.immutableCell("bar", 2, 'b'),
+          Tables.immutableCell("foo", 3, 'c'),
+          Tables.immutableCell("bar", 1, 'b'),
+          Tables.immutableCell("cat", 2, 'b'));
+    }
+
+    @Override
+    public Set<Cell<String, Integer, Character>> create(
+        Object... elements) {
+      Table<String, Integer, Character> table = createTable();
+      for (Object element : elements) {
+        @SuppressWarnings("unchecked")
+        Cell<String, Integer, Character> cell
+            = (Cell<String, Integer, Character>) element;
+        table.put(cell.getRowKey(), cell.getColumnKey(), cell.getValue());
+      }
+      return table.cellSet();
+    }
+
+    abstract Table<String, Integer, Character> createTable();
+
+    @Override
+    @SuppressWarnings("unchecked")
+    public Cell<String, Integer, Character>[] createArray(int length) {
+      return (Cell<String, Integer, Character>[]) new Cell<?, ?, ?>[length];
+    }
+
+    @Override
+    public List<Cell<String, Integer, Character>> order(
+        List<Cell<String, Integer, Character>> insertionOrder) {
+      return insertionOrder;
+    }
+  }
+
+  private static abstract class MapTests
+      extends MapInterfaceTest<String, Integer> {
+
+    MapTests(boolean allowsNullValues, boolean supportsPut, boolean supportsRemove,
+        boolean supportsClear, boolean supportsIteratorRemove) {
+      super(false, allowsNullValues, supportsPut, supportsRemove, supportsClear,
+          supportsIteratorRemove);
+    }
+
+    @Override protected String getKeyNotInPopulatedMap() {
+      return "four";
+    }
+
+    @Override protected Integer getValueNotInPopulatedMap() {
+      return 4;
+    }
+  }
+
+  private static abstract class RowTests extends MapTests {
+    RowTests(boolean allowsNullValues, boolean supportsPut, boolean supportsRemove,
+        boolean supportsClear, boolean supportsIteratorRemove) {
+      super(allowsNullValues, supportsPut, supportsRemove, supportsClear,
+          supportsIteratorRemove);
+    }
+
+    abstract Table<Character, String, Integer> makeTable();
+
+    @Override protected Map<String, Integer> makeEmptyMap() {
+      return makeTable().row('a');
+    }
+
+    @Override protected Map<String, Integer> makePopulatedMap() {
+      Table<Character, String, Integer> table = makeTable();
+      table.put('a', "one", 1);
+      table.put('a', "two", 2);
+      table.put('a', "three", 3);
+      table.put('b', "four", 4);
+      return table.row('a');
+    }
+  }
+
+  @GwtIncompatible("TODO(hhchan): ArrayTable")
+  public static class ArrayRowTests extends RowTests {
+    public ArrayRowTests() {
+      super(true, true, false, false, false);
+    }
+
+    @Override protected String getKeyNotInPopulatedMap() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override protected Map<String, Integer> makeEmptyMap() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override protected Table<Character, String, Integer> makeTable() {
+      return ArrayTable.create(Arrays.asList('a', 'b', 'c'),
+          Arrays.asList("one", "two", "three", "four"));
+    }
+  }
+
+  public static class HashRowTests extends RowTests {
+    public HashRowTests() {
+      super(false, true, true, true, true);
+    }
+
+    @Override Table<Character, String, Integer> makeTable() {
+      return HashBasedTable.create();
+    }
+  }
+
+  public static class TreeRowTests extends RowTests {
+    public TreeRowTests() {
+      super(false, true, true, true, true);
+    }
+
+    @Override Table<Character, String, Integer> makeTable() {
+      return TreeBasedTable.create();
+    }
+  }
+
+  public static class TransposeRowTests extends RowTests {
+    public TransposeRowTests() {
+      super(false, true, true, true, false);
+    }
+
+    @Override Table<Character, String, Integer> makeTable() {
+      Table<String, Character, Integer> original = TreeBasedTable.create();
+      return Tables.transpose(original);
+    }
+  }
+
+  private static final Function<Integer, Integer> DIVIDE_BY_2
+      = new Function<Integer, Integer>() {
+        @Override public Integer apply(Integer input) {
+          return (input == null) ? null : input / 2;
+        }
+  };
+
+  public static class TransformValueRowTests extends RowTests {
+    public TransformValueRowTests() {
+      super(false, false, true, true, true);
+    }
+
+    @Override Table<Character, String, Integer> makeTable() {
+      Table<Character, String, Integer> table = HashBasedTable.create();
+      return Tables.transformValues(table, DIVIDE_BY_2);
+    }
+
+    @Override protected Map<String, Integer> makePopulatedMap() {
+      Table<Character, String, Integer> table = HashBasedTable.create();
+      table.put('a', "one", 2);
+      table.put('a', "two", 4);
+      table.put('a', "three", 6);
+      table.put('b', "four", 8);
+      return Tables.transformValues(table, DIVIDE_BY_2).row('a');
+    }
+  }
+
+  public static class UnmodifiableHashRowTests extends RowTests {
+    public UnmodifiableHashRowTests() {
+      super(false, false, false, false, false);
+    }
+
+    @Override Table<Character, String, Integer> makeTable() {
+      Table<Character, String, Integer> table = HashBasedTable.create();
+      return Tables.unmodifiableTable(table);
+    }
+
+    @Override protected Map<String, Integer> makePopulatedMap() {
+      Table<Character, String, Integer> table = HashBasedTable.create();
+      table.put('a', "one", 1);
+      table.put('a', "two", 2);
+      table.put('a', "three", 3);
+      table.put('b', "four", 4);
+      return Tables.unmodifiableTable(table).row('a');
+    }
+  }
+
+  public static class UnmodifiableTreeRowTests extends RowTests {
+    public UnmodifiableTreeRowTests() {
+      super(false, false, false, false, false);
+    }
+
+    @Override Table<Character, String, Integer> makeTable() {
+      RowSortedTable<Character, String, Integer> table = TreeBasedTable.create();
+      return Tables.unmodifiableRowSortedTable(table);
+    }
+
+    @Override protected Map<String, Integer> makePopulatedMap() {
+      RowSortedTable<Character, String, Integer> table = TreeBasedTable.create();
+      table.put('a', "one", 1);
+      table.put('a', "two", 2);
+      table.put('a', "three", 3);
+      table.put('b', "four", 4);
+      return Tables.unmodifiableRowSortedTable(table).row('a');
+    }
+  }
+
+  private static abstract class ColumnTests extends MapTests {
+    ColumnTests(boolean allowsNullValues, boolean supportsPut, boolean supportsRemove,
+        boolean supportsClear, boolean supportsIteratorRemove) {
+      super(allowsNullValues, supportsPut, supportsRemove, supportsClear,
+          supportsIteratorRemove);
+    }
+
+    abstract Table<String, Character, Integer> makeTable();
+
+    @Override protected Map<String, Integer> makeEmptyMap() {
+      return makeTable().column('a');
+    }
+
+    @Override protected Map<String, Integer> makePopulatedMap() {
+      Table<String, Character, Integer> table = makeTable();
+      table.put("one", 'a', 1);
+      table.put("two", 'a', 2);
+      table.put("three", 'a', 3);
+      table.put("four", 'b', 4);
+      return table.column('a');
+    }
+  }
+
+  @GwtIncompatible("TODO(hhchan): ArrayTable")
+  public static class ArrayColumnTests extends ColumnTests {
+    public ArrayColumnTests() {
+      super(true, true, false, false, false);
+    }
+
+    @Override protected String getKeyNotInPopulatedMap() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override protected Map<String, Integer> makeEmptyMap() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override Table<String, Character, Integer> makeTable() {
+      return ArrayTable.create(Arrays.asList("one", "two", "three", "four"),
+          Arrays.asList('a', 'b', 'c'));
+    }
+  }
+
+  public static class HashColumnTests extends ColumnTests {
+    public HashColumnTests() {
+      super(false, true, true, true, false);
+    }
+
+    @Override Table<String, Character, Integer> makeTable() {
+      return HashBasedTable.create();
+    }
+  }
+
+  public static class TreeColumnTests extends ColumnTests {
+    public TreeColumnTests() {
+      super(false, true, true, true, false);
+    }
+
+    @Override Table<String, Character, Integer> makeTable() {
+      return TreeBasedTable.create();
+    }
+  }
+
+  public static class TransposeColumnTests extends ColumnTests {
+    public TransposeColumnTests() {
+      super(false, true, true, true, true);
+    }
+
+    @Override Table<String, Character, Integer> makeTable() {
+      Table<Character, String, Integer> original = TreeBasedTable.create();
+      return Tables.transpose(original);
+    }
+  }
+
+  public static class TransformValueColumnTests extends ColumnTests {
+    public TransformValueColumnTests() {
+      super(false, false, true, true, false);
+    }
+
+    @Override Table<String, Character, Integer> makeTable() {
+      Table<String, Character, Integer> table = HashBasedTable.create();
+      return Tables.transformValues(table, DIVIDE_BY_2);
+    }
+
+    @Override protected Map<String, Integer> makePopulatedMap() {
+      Table<String, Character, Integer> table = HashBasedTable.create();
+      table.put("one", 'a', 1);
+      table.put("two", 'a', 2);
+      table.put("three", 'a', 3);
+      table.put("four", 'b', 4);
+      return Tables.transformValues(table, DIVIDE_BY_2).column('a');
+    }
+  }
+
+  public static class UnmodifiableHashColumnTests extends ColumnTests {
+    public UnmodifiableHashColumnTests() {
+      super(false, false, false, false, false);
+    }
+
+    @Override Table<String, Character, Integer> makeTable() {
+      Table<String, Character, Integer> table = HashBasedTable.create();
+      return Tables.unmodifiableTable(table);
+    }
+
+    @Override protected Map<String, Integer> makePopulatedMap() {
+      Table<String, Character, Integer> table = HashBasedTable.create();
+      table.put("one", 'a', 1);
+      table.put("two", 'a', 2);
+      table.put("three", 'a', 3);
+      table.put("four", 'b', 4);
+      return Tables.unmodifiableTable(table).column('a');
+    }
+  }
+
+  public static class UnmodifiableTreeColumnTests extends ColumnTests {
+    public UnmodifiableTreeColumnTests() {
+      super(false, false, false, false, false);
+    }
+
+    @Override Table<String, Character, Integer> makeTable() {
+      RowSortedTable<String, Character, Integer> table = TreeBasedTable.create();
+      return Tables.unmodifiableRowSortedTable(table);
+    }
+
+    @Override protected Map<String, Integer> makePopulatedMap() {
+      RowSortedTable<String, Character, Integer> table = TreeBasedTable.create();
+      table.put("one", 'a', 1);
+      table.put("two", 'a', 2);
+      table.put("three", 'a', 3);
+      table.put("four", 'b', 4);
+      return Tables.unmodifiableRowSortedTable(table).column('a');
+    }
+  }
+
+  private static abstract class MapMapTests
+      extends MapInterfaceTest<String, Map<Integer, Character>> {
+
+    MapMapTests(boolean allowsNullValues, boolean supportsRemove,
+        boolean supportsClear, boolean supportsIteratorRemove) {
+      super(false, allowsNullValues, false, supportsRemove, supportsClear,
+          supportsIteratorRemove);
+    }
+
+    @Override protected String getKeyNotInPopulatedMap() {
+      return "cat";
+    }
+
+    @Override protected Map<Integer, Character> getValueNotInPopulatedMap() {
+      return ImmutableMap.of();
+    }
+
+    /**
+     * The version of this test supplied by {@link MapInterfaceTest} fails for
+     * this particular map implementation, because {@code map.get()} returns a
+     * view collection that changes in the course of a call to {@code remove()}.
+     * Thus, the expectation doesn't hold that {@code map.remove(x)} returns the
+     * same value which {@code map.get(x)} did immediately beforehand.
+     */
+    @Override public void testRemove() {
+      final Map<String, Map<Integer, Character>> map;
+      final String keyToRemove;
+      try {
+        map = makePopulatedMap();
+      } catch (UnsupportedOperationException e) {
+        return;
+      }
+      keyToRemove = map.keySet().iterator().next();
+      if (supportsRemove) {
+        int initialSize = map.size();
+        map.get(keyToRemove);
+        map.remove(keyToRemove);
+        // This line doesn't hold - see the Javadoc comments above.
+        // assertEquals(expectedValue, oldValue);
+        assertFalse(map.containsKey(keyToRemove));
+        assertEquals(initialSize - 1, map.size());
+      } else {
+        try {
+          map.remove(keyToRemove);
+          fail("Expected UnsupportedOperationException.");
+        } catch (UnsupportedOperationException e) {
+          // Expected.
+        }
+      }
+      assertInvariants(map);
+    }
+  }
+
+  private static abstract class RowMapTests extends MapMapTests {
+    RowMapTests(boolean allowsNullValues, boolean supportsRemove,
+        boolean supportsClear, boolean supportsIteratorRemove) {
+      super(allowsNullValues, supportsRemove, supportsClear,
+          supportsIteratorRemove);
+    }
+
+    abstract Table<String, Integer, Character> makeTable();
+
+    @Override protected Map<String, Map<Integer, Character>>
+        makePopulatedMap() {
+      Table<String, Integer, Character> table = makeTable();
+      populateTable(table);
+      return table.rowMap();
+    }
+
+    void populateTable(Table<String, Integer, Character> table) {
+      table.put("foo", 1, 'a');
+      table.put("bar", 1, 'b');
+      table.put("foo", 3, 'c');
+    }
+
+    @Override protected Map<String, Map<Integer, Character>> makeEmptyMap() {
+      return makeTable().rowMap();
+    }
+  }
+
+  @GwtIncompatible("TODO(hhchan): ArrayTable")
+  public static class ArrayRowMapTests extends RowMapTests {
+    public ArrayRowMapTests() {
+      super(true, false, false, false);
+    }
+
+    @Override Table<String, Integer, Character> makeTable() {
+      return ArrayTable.create(Arrays.asList("foo", "bar", "dog"),
+          Arrays.asList(1, 2, 3));
+    }
+
+    @Override protected Map<String, Map<Integer, Character>> makeEmptyMap() {
+      throw new UnsupportedOperationException();
+    }
+  }
+
+  public static class HashRowMapTests extends RowMapTests {
+    public HashRowMapTests() {
+      super(false, true, true, true);
+    }
+
+    @Override Table<String, Integer, Character> makeTable() {
+      return HashBasedTable.create();
+    }
+  }
+
+  public static class TreeRowMapTests extends RowMapTests {
+    public TreeRowMapTests() {
+      super(false, true, true, true);
+    }
+
+    @Override Table<String, Integer, Character> makeTable() {
+      return TreeBasedTable.create();
+    }
+  }
+
+  public static class TreeRowMapHeadMapTests extends RowMapTests {
+    public TreeRowMapHeadMapTests() {
+      super(false, true, true, true);
+    }
+
+    @Override TreeBasedTable<String, Integer, Character> makeTable() {
+      TreeBasedTable<String, Integer, Character> table =
+          TreeBasedTable.create();
+      table.put("z", 1, 'a');
+      return table;
+    }
+
+    @Override protected Map<String, Map<Integer, Character>>
+        makePopulatedMap() {
+      TreeBasedTable<String, Integer, Character> table = makeTable();
+      populateTable(table);
+      return table.rowMap().headMap("x");
+    }
+
+    @Override protected Map<String, Map<Integer, Character>> makeEmptyMap() {
+      return makeTable().rowMap().headMap("x");
+    }
+
+    @Override protected String getKeyNotInPopulatedMap() {
+      return "z";
+    }
+  }
+
+  public static class TreeRowMapTailMapTests extends RowMapTests {
+    public TreeRowMapTailMapTests() {
+      super(false, true, true, true);
+    }
+
+    @Override TreeBasedTable<String, Integer, Character> makeTable() {
+      TreeBasedTable<String, Integer, Character> table =
+          TreeBasedTable.create();
+      table.put("a", 1, 'a');
+      return table;
+    }
+
+    @Override protected Map<String, Map<Integer, Character>>
+        makePopulatedMap() {
+      TreeBasedTable<String, Integer, Character> table = makeTable();
+      populateTable(table);
+      return table.rowMap().tailMap("b");
+    }
+
+    @Override protected Map<String, Map<Integer, Character>> makeEmptyMap() {
+      return makeTable().rowMap().tailMap("b");
+    }
+
+    @Override protected String getKeyNotInPopulatedMap() {
+      return "a";
+    }
+  }
+
+  public static class TreeRowMapSubMapTests extends RowMapTests {
+    public TreeRowMapSubMapTests() {
+      super(false, true, true, true);
+    }
+
+    @Override TreeBasedTable<String, Integer, Character> makeTable() {
+      TreeBasedTable<String, Integer, Character> table =
+          TreeBasedTable.create();
+      table.put("a", 1, 'a');
+      table.put("z", 1, 'a');
+      return table;
+    }
+
+    @Override protected Map<String, Map<Integer, Character>>
+        makePopulatedMap() {
+      TreeBasedTable<String, Integer, Character> table = makeTable();
+      populateTable(table);
+      return table.rowMap().subMap("b", "x");
+    }
+
+    @Override protected Map<String, Map<Integer, Character>> makeEmptyMap() {
+      return makeTable().rowMap().subMap("b", "x");
+    }
+
+    @Override protected String getKeyNotInPopulatedMap() {
+      return "z";
+    }
+  }
+
+  private static final Function<String, Character> FIRST_CHARACTER =
+      new Function<String, Character>() {
+        @Override
+        public Character apply(String input) {
+          return input == null ? null : input.charAt(0);
+        }
+      };
+
+  public static class TransformValueRowMapTests extends RowMapTests {
+    public TransformValueRowMapTests() {
+      super(false, true, true, true);
+    }
+
+    @Override Table<String, Integer, Character> makeTable() {
+      Table<String, Integer, String> original = HashBasedTable.create();
+      return Tables.transformValues(original, FIRST_CHARACTER);
+    }
+
+    @Override
+    protected Map<String, Map<Integer, Character>> makePopulatedMap() {
+      Table<String, Integer, String> table = HashBasedTable.create();
+      table.put("foo", 1, "apple");
+      table.put("bar", 1, "banana");
+      table.put("foo", 3, "cat");
+      return Tables.transformValues(table, FIRST_CHARACTER).rowMap();
+    }
+  }
+
+  public static class UnmodifiableHashRowMapTests extends RowMapTests {
+    public UnmodifiableHashRowMapTests() {
+      super(false, false, false, false);
+    }
+
+    @Override Table<String, Integer, Character> makeTable() {
+      Table<String, Integer, Character> original = HashBasedTable.create();
+      return Tables.unmodifiableTable(original);
+    }
+
+    @Override
+    protected Map<String, Map<Integer, Character>> makePopulatedMap() {
+      Table<String, Integer, Character> table = HashBasedTable.create();
+      table.put("foo", 1, 'a');
+      table.put("bar", 1, 'b');
+      table.put("foo", 3, 'c');
+      return Tables.unmodifiableTable(table).rowMap();
+    }
+  }
+
+  public static class UnmodifiableTreeRowMapTests extends RowMapTests {
+    public UnmodifiableTreeRowMapTests() {
+      super(false, false, false, false);
+    }
+
+    @Override RowSortedTable<String, Integer, Character> makeTable() {
+      RowSortedTable<String, Integer, Character> original = TreeBasedTable.create();
+      return Tables.unmodifiableRowSortedTable(original);
+    }
+
+    @Override
+    protected SortedMap<String, Map<Integer, Character>> makePopulatedMap() {
+      RowSortedTable<String, Integer, Character> table = TreeBasedTable.create();
+      table.put("foo", 1, 'a');
+      table.put("bar", 1, 'b');
+      table.put("foo", 3, 'c');
+      return Tables.unmodifiableRowSortedTable(table).rowMap();
+    }
+  }
+
+  private static abstract class ColumnMapTests extends MapMapTests {
+    ColumnMapTests(boolean allowsNullValues, boolean supportsRemove,
+        boolean supportsClear, boolean supportsIteratorRemove) {
+      super(allowsNullValues, supportsRemove, supportsClear,
+          supportsIteratorRemove);
+    }
+
+    abstract Table<Integer, String, Character> makeTable();
+
+    @Override protected Map<String, Map<Integer, Character>>
+        makePopulatedMap() {
+      Table<Integer, String, Character> table = makeTable();
+      table.put(1, "foo", 'a');
+      table.put(1, "bar", 'b');
+      table.put(3, "foo", 'c');
+      return table.columnMap();
+    }
+
+    @Override protected Map<String, Map<Integer, Character>> makeEmptyMap() {
+      return makeTable().columnMap();
+    }
+  }
+
+  @GwtIncompatible("TODO(hhchan): ArrayTable")
+  public static class ArrayColumnMapTests extends ColumnMapTests {
+    public ArrayColumnMapTests() {
+      super(true, false, false, false);
+    }
+
+    @Override Table<Integer, String, Character> makeTable() {
+      return ArrayTable.create(Arrays.asList(1, 2, 3),
+          Arrays.asList("foo", "bar", "dog"));
+    }
+
+    @Override protected Map<String, Map<Integer, Character>> makeEmptyMap() {
+      throw new UnsupportedOperationException();
+    }
+  }
+
+  public static class HashColumnMapTests extends ColumnMapTests {
+    public HashColumnMapTests() {
+      super(false, true, true, false);
+    }
+
+    @Override Table<Integer, String, Character> makeTable() {
+      return HashBasedTable.create();
+    }
+  }
+
+  public static class TreeColumnMapTests extends ColumnMapTests {
+    public TreeColumnMapTests() {
+      super(false, true, true, false);
+    }
+
+    @Override Table<Integer, String, Character> makeTable() {
+      return TreeBasedTable.create();
+    }
+  }
+
+  public static class TransformValueColumnMapTests extends ColumnMapTests {
+    public TransformValueColumnMapTests() {
+      super(false, true, true, false);
+    }
+
+    @Override Table<Integer, String, Character> makeTable() {
+      Table<Integer, String, String> original = HashBasedTable.create();
+      return Tables.transformValues(original, FIRST_CHARACTER);
+    }
+
+    @Override
+    protected Map<String, Map<Integer, Character>> makePopulatedMap() {
+      Table<Integer, String, String> table = HashBasedTable.create();
+      table.put(1, "foo", "apple");
+      table.put(1, "bar", "banana");
+      table.put(3, "foo", "cat");
+      return Tables.transformValues(table, FIRST_CHARACTER).columnMap();
+    }
+  }
+
+  public static class UnmodifiableHashColumnMapTests extends ColumnMapTests {
+    public UnmodifiableHashColumnMapTests() {
+      super(false, false, false, false);
+    }
+
+    @Override Table<Integer, String, Character> makeTable() {
+      Table<Integer, String, Character> original = HashBasedTable.create();
+      return Tables.unmodifiableTable(original);
+    }
+
+    @Override
+    protected Map<String, Map<Integer, Character>> makePopulatedMap() {
+      Table<Integer, String, Character> table = HashBasedTable.create();
+      table.put(1, "foo", 'a');
+      table.put(1, "bar", 'b');
+      table.put(3, "foo", 'c');
+      return Tables.unmodifiableTable(table).columnMap();
+    }
+  }
+
+  public static class UnmodifiableTreeColumnMapTests extends ColumnMapTests {
+    public UnmodifiableTreeColumnMapTests() {
+      super(false, false, false, false);
+    }
+
+    @Override Table<Integer, String, Character> makeTable() {
+      RowSortedTable<Integer, String, Character> original = TreeBasedTable.create();
+      return Tables.unmodifiableRowSortedTable(original);
+    }
+
+    @Override
+    protected Map<String, Map<Integer, Character>> makePopulatedMap() {
+      RowSortedTable<Integer, String, Character> table = TreeBasedTable.create();
+      table.put(1, "foo", 'a');
+      table.put(1, "bar", 'b');
+      table.put(3, "foo", 'c');
+      return Tables.unmodifiableRowSortedTable(table).columnMap();
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/TablesTest.java b/guava-tests/test/com/google/common/collect/TablesTest.java
new file mode 100644
index 0000000..85f0d36
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/TablesTest.java
@@ -0,0 +1,77 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.collect.Table.Cell;
+import com.google.common.testing.EqualsTester;
+import com.google.common.testing.SerializableTester;
+
+import junit.framework.TestCase;
+
+/**
+ * Tests for {@link Tables}.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible(emulated = true)
+public class TablesTest extends TestCase {
+
+  @GwtIncompatible("SerializableTester")
+  public void testImmutableEntrySerialization() {
+    Cell<String, Integer, Character> entry
+        = Tables.immutableCell("foo", 1, 'a');
+    SerializableTester.reserializeAndAssert(entry);
+  }
+  
+  public void testImmutableEntryToString() {
+    Cell<String, Integer, Character> entry
+        = Tables.immutableCell("foo", 1, 'a');
+    assertEquals("(foo,1)=a", entry.toString());
+    
+    Cell<String, Integer, Character> nullEntry
+        = Tables.immutableCell(null, null, null);
+    assertEquals("(null,null)=null", nullEntry.toString());
+  }
+  
+  public void testEntryEquals() {
+    Cell<String, Integer, Character> entry
+        = Tables.immutableCell("foo", 1, 'a');
+    
+    new EqualsTester()
+        .addEqualityGroup(entry, Tables.immutableCell("foo", 1, 'a'))
+        .addEqualityGroup(Tables.immutableCell("bar", 1, 'a'))
+        .addEqualityGroup(Tables.immutableCell("foo", 2, 'a'))
+        .addEqualityGroup(Tables.immutableCell("foo", 1, 'b'))
+        .addEqualityGroup(Tables.immutableCell(null, null, null))
+        .testEquals();
+  }
+  
+  public void testEntryEqualsNull() {
+    Cell<String, Integer, Character> entry
+        = Tables.immutableCell(null, null, null);
+    
+    new EqualsTester()
+        .addEqualityGroup(entry, Tables.immutableCell(null, null, null))
+        .addEqualityGroup(Tables.immutableCell("bar", null, null))
+        .addEqualityGroup(Tables.immutableCell(null, 2, null))
+        .addEqualityGroup(Tables.immutableCell(null, null, 'b'))
+        .addEqualityGroup(Tables.immutableCell("foo", 1, 'a'))
+        .testEquals();
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/TablesTransformValuesTest.java b/guava-tests/test/com/google/common/collect/TablesTransformValuesTest.java
new file mode 100644
index 0000000..99787a9
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/TablesTransformValuesTest.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkArgument;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.base.Function;
+
+/**
+ * Test cases for {@link Tables#transformValues}.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible(emulated = true)
+public class TablesTransformValuesTest extends AbstractTableTest {
+
+  private static final Function<String, Character> FIRST_CHARACTER
+    = new Function<String, Character>() {
+      @Override public Character apply(String input) {
+        return input == null ? null : input.charAt(0);
+      }
+  };
+
+  @Override protected Table<String, Integer, Character> create(
+      Object... data) {
+    Table<String, Integer, String> table = HashBasedTable.create();
+    checkArgument(data.length % 3 == 0);
+    for (int i = 0; i < data.length; i+= 3) {
+      String value = (data[i+2] == null) ? null : data[i+2].toString() + "transformed";
+      table.put((String) data[i], (Integer) data[i+1], value);
+    }
+    return Tables.transformValues(table, FIRST_CHARACTER);
+  }
+
+  // Null support depends on the underlying table and function.
+  @GwtIncompatible("NullPointerTester")
+  @Override public void testNullPointerInstance() throws Exception {}
+
+  // put() and putAll() aren't supported.
+  @Override public void testPut() {
+    try {
+      table.put("foo", 1, 'a');
+      fail("Expected UnsupportedOperationException");
+    } catch (UnsupportedOperationException expected) {}
+    assertSize(0);
+  }
+
+  @Override public void testPutAllTable() {
+    table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
+    Table<String, Integer, Character> other = HashBasedTable.create();
+    other.put("foo", 1, 'd');
+    other.put("bar", 2, 'e');
+    other.put("cat", 2, 'f');
+    try {
+      table.putAll(other);
+      fail("Expected UnsupportedOperationException");
+    } catch (UnsupportedOperationException expected) {}
+    assertEquals((Character) 'a', table.get("foo", 1));
+    assertEquals((Character) 'b', table.get("bar", 1));
+    assertEquals((Character) 'c', table.get("foo", 3));
+    assertSize(3);
+  }
+
+  @Override public void testPutNull() {}
+  @Override public void testPutNullReplace() {}
+  @Override public void testRowClearAndPut() {}
+}
diff --git a/guava-tests/test/com/google/common/collect/TransformedImmutableListTest.java b/guava-tests/test/com/google/common/collect/TransformedImmutableListTest.java
new file mode 100644
index 0000000..03c2f6e
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/TransformedImmutableListTest.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.collect.testing.ListTestSuiteBuilder;
+import com.google.common.collect.testing.TestStringListGenerator;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+
+import java.util.List;
+
+@GwtCompatible
+public class TransformedImmutableListTest extends TestCase {
+  @GwtIncompatible("suite")
+  public static Test suite() {
+    return ListTestSuiteBuilder.using(new TestStringListGenerator() {
+
+      @SuppressWarnings("serial")
+      @Override protected List<String> create(String[] elements) {
+        return new TransformedImmutableList<String, String>(
+            ImmutableList.copyOf(elements)) {
+
+          @Override String transform(String str) {
+            return str;
+          }
+        };
+      }
+    }).named("TransformedImmutableList identity").withFeatures(
+        CollectionSize.ANY,
+        CollectionFeature.ALLOWS_NULL_QUERIES).createTestSuite();
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/TransformedSetTest.java b/guava-tests/test/com/google/common/collect/TransformedSetTest.java
new file mode 100644
index 0000000..8a26ed8
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/TransformedSetTest.java
@@ -0,0 +1,126 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.collect.testing.SampleElements;
+import com.google.common.collect.testing.SetTestSuiteBuilder;
+import com.google.common.collect.testing.TestSetGenerator;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.SetFeature;
+
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Tests for {@link Sets#transform(Set, Sets.InvertibleFunction)}.
+ * 
+ * @author Dimitris Andreou
+ */
+@GwtCompatible(emulated = true)
+public class TransformedSetTest extends TestCase {
+  // Negates each integer. This is a true bijection, even considering MIN_VALUE
+  private static final Sets.InvertibleFunction<Integer, Integer> integerBijection = 
+      new Sets.InvertibleFunction<Integer, Integer>() {
+        @Override public Integer apply(Integer integer) {
+          return integer != null ? -integer : null;
+        }
+
+        @Override
+        public Integer invert(Integer integer) {
+          return integer != null ? -integer : null;
+        }
+      };
+
+  @GwtIncompatible("suite")
+  public static TestSuite suite() {
+    TestSuite suite = new TestSuite();
+    suite.addTest(SetTestSuiteBuilder
+        .using(new TransformedIntegerSetGenerator())
+        .named("TransformedSet")
+        .withFeatures(
+        SetFeature.GENERAL_PURPOSE,
+        CollectionFeature.ALLOWS_NULL_VALUES,
+        CollectionSize.SEVERAL)
+      .createTestSuite());
+    return suite;
+  }
+  
+  public void testSimpleCases() {
+    Set<Integer> original = Sets.newHashSet(0, 1, 2, 3);
+    Set<Integer> transformed = Sets.transform(original, integerBijection);
+    
+    assertEquals(ImmutableSet.of(0, -1, -2, -3), transformed);
+    
+    // adding/removing to the original, see if transformed is affected
+    assertTrue(original.remove(2));
+    assertTrue(original.add(4));
+    assertEquals(ImmutableSet.of(0,  1,  3,  4), original);
+    assertEquals(ImmutableSet.of(0, -1, -3, -4), transformed);
+    
+    // adding/removing to the transformed, see if original is affected
+    assertTrue(transformed.remove(-1));
+    assertTrue(transformed.add(-5));
+    assertEquals(ImmutableSet.of(0, -3, -4, -5), transformed);
+    assertEquals(ImmutableSet.of(0,  3,  4,  5), original);
+    
+    // redoing the same actions as above; no effect
+    assertFalse(transformed.remove(-1));
+    assertFalse(transformed.add(-5));
+    
+    // they should always have the same size
+    assertEquals(original.size(), transformed.size());
+    
+    transformed.clear();
+    assertTrue(original.isEmpty());
+    assertTrue(transformed.isEmpty());
+  }
+
+  public static class TransformedIntegerSetGenerator implements TestSetGenerator<Integer> {
+    @Override public Set<Integer> create(Object... elements) {
+      // Would use Collections#checkedCollection, but I get:
+      // [ERROR] The method checkedCollection(Collection, Class<Integer>)
+      // is undefined for the type Collections
+      @SuppressWarnings("unchecked")  
+      Iterable<Integer> integers = (Iterable) Arrays.asList(elements);
+      
+      // I invert these before adding, so that the transformed set will have
+      // the expected elements themselves, not their image under the bijection
+      Set<Integer> invertedIntegers = Sets.newHashSet(Iterables.transform(integers,
+          integerBijection.inverse()));
+      return Sets.transform(invertedIntegers, integerBijection);
+    }
+
+    @Override public Integer[] createArray(int length) {
+      return new Integer[length];
+    }
+
+    @Override public SampleElements<Integer> samples() {
+      return new SampleElements<Integer>(-1, 0, 1, 2, 3);
+    }
+    
+    @Override public Iterable<Integer> order(List<Integer> insertionOrder) {
+      throw new AssertionError();
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/TransposedTableTest.java b/guava-tests/test/com/google/common/collect/TransposedTableTest.java
new file mode 100644
index 0000000..20f5156
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/TransposedTableTest.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+/**
+ * Test cases for {@link Tables#transpose}.
+ * 
+ * @author Jared Levy
+ */
+@GwtCompatible
+public class TransposedTableTest extends AbstractTableTest {
+
+  @Override protected Table<String, Integer, Character> create(
+      Object... data) {
+    Table<Integer, String, Character> original = HashBasedTable.create();
+    Table<String, Integer, Character> table = Tables.transpose(original);
+    table.clear();
+    populate(table, data);
+    return table;
+  }
+  
+  public void testTransposeTransposed() {
+    Table<Integer, String, Character> original = HashBasedTable.create();
+    assertSame(original, Tables.transpose(Tables.transpose(original)));
+  }
+  
+  public void testPutOriginalModifiesTranspose() {
+    Table<Integer, String, Character> original = HashBasedTable.create();
+    Table<String, Integer, Character> transpose = Tables.transpose(original);
+    original.put(1, "foo", 'a');
+    assertEquals((Character) 'a', transpose.get("foo", 1));
+  }
+  
+  public void testPutTransposeModifiesOriginal() {
+    Table<Integer, String, Character> original = HashBasedTable.create();
+    Table<String, Integer, Character> transpose = Tables.transpose(original);
+    transpose.put("foo", 1, 'a');
+    assertEquals((Character) 'a', original.get(1, "foo"));
+  }
+  
+  public void testTransposedViews() {
+    Table<Integer, String, Character> original = HashBasedTable.create();
+    Table<String, Integer, Character> transpose = Tables.transpose(original);
+    original.put(1, "foo", 'a');
+    assertSame(original.columnKeySet(), transpose.rowKeySet());
+    assertSame(original.rowKeySet(), transpose.columnKeySet());
+    assertSame(original.columnMap(), transpose.rowMap());
+    assertSame(original.rowMap(), transpose.columnMap());
+    assertSame(original.values(), transpose.values());    
+    assertEquals(original.row(1), transpose.column(1));
+    assertEquals(original.row(2), transpose.column(2));
+    assertEquals(original.column("foo"), transpose.row("foo"));
+    assertEquals(original.column("bar"), transpose.row("bar"));
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/TreeBasedTableTest.java b/guava-tests/test/com/google/common/collect/TreeBasedTableTest.java
new file mode 100644
index 0000000..f4469ca
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/TreeBasedTableTest.java
@@ -0,0 +1,447 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.collect.testing.MapTestSuiteBuilder;
+import com.google.common.collect.testing.SortedMapInterfaceTest;
+import com.google.common.collect.testing.TestStringMapGenerator;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.MapFeature;
+import com.google.common.testing.SerializableTester;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.SortedMap;
+
+/**
+ * Test cases for {@link TreeBasedTable}.
+ * 
+ * @author Jared Levy
+ * @author Louis Wasserman
+ */
+@GwtCompatible(emulated = true)
+public class TreeBasedTableTest extends AbstractTableTest {
+  public static Test suite(){
+    TestSuite suite = new TestSuite();
+    suite.addTestSuite(TreeBasedTableTest.class);
+    suite.addTestSuite(TreeRowTest.class);
+    suite.addTest(MapTestSuiteBuilder
+        .using(new TestStringMapGenerator() {
+          @Override protected Map<String, String> create(
+              Entry<String, String>[] entries) {
+            TreeBasedTable<String, String, String> table =
+                TreeBasedTable.create();
+            table.put("a", "b", "c");
+            table.put("c", "b", "a");
+            table.put("a", "a", "d");
+            for (Entry<String, String> entry : entries) {
+              table.put("b", entry.getKey(), entry.getValue());
+            }
+            return table.row("b");
+          }
+        }).withFeatures(MapFeature.GENERAL_PURPOSE, CollectionSize.ANY)
+        .named("RowMapTestSuite").createTestSuite());
+    return suite;
+  }
+  
+  public static class TreeRowTest extends
+      SortedMapInterfaceTest<String, String> {
+    public TreeRowTest() {
+      super(false, false, true, true, true);
+    }
+
+    @Override protected SortedMap<String, String> makeEmptyMap() {
+      TreeBasedTable<String, String, String> table = TreeBasedTable.create();
+      table.put("a", "b", "c");
+      table.put("c", "b", "a");
+      table.put("a", "a", "d");
+      return table.row("b");
+    }
+
+    @Override protected SortedMap<String, String> makePopulatedMap() {
+      TreeBasedTable<String, String, String> table = TreeBasedTable.create();
+      table.put("a", "b", "c");
+      table.put("c", "b", "a");
+      table.put("b", "b", "x");
+      table.put("b", "c", "y");
+      table.put("b", "x", "n");
+      table.put("a", "a", "d");
+      return table.row("b");
+    }
+
+    @Override protected String getKeyNotInPopulatedMap() {
+      return "q";
+    }
+
+    @Override protected String getValueNotInPopulatedMap() {
+      return "p";
+    }
+
+    public void testClearSubMapOfRowMap() {
+      TreeBasedTable<String, String, String> table = TreeBasedTable.create();
+      table.put("a", "b", "c");
+      table.put("c", "b", "a");
+      table.put("b", "b", "x");
+      table.put("b", "c", "y");
+      table.put("b", "x", "n");
+      table.put("a", "a", "d");
+      table.row("b").subMap("c", "x").clear();
+      assertEquals(table.row("b"), ImmutableMap.of("b", "x", "x", "n"));
+      table.row("b").subMap("b", "y").clear();
+      assertEquals(table.row("b"), ImmutableMap.of());
+      assertFalse(table.backingMap.containsKey("b"));
+    }
+  }
+
+  private TreeBasedTable<String, Integer, Character> sortedTable;
+  
+  protected TreeBasedTable<String, Integer, Character> create(
+    Comparator<? super String> rowComparator,
+    Comparator<? super Integer> columnComparator,
+    Object... data) {
+    TreeBasedTable<String, Integer, Character> table =
+        TreeBasedTable.create(rowComparator, columnComparator);
+    table.put("foo", 4, 'a');
+    table.put("cat", 1, 'b');
+    table.clear();
+    populate(table, data);
+    return table;
+  }
+  
+  @Override protected TreeBasedTable<String, Integer, Character> create(
+      Object... data) {
+    TreeBasedTable<String, Integer, Character> table = TreeBasedTable.create();
+    table.put("foo", 4, 'a');
+    table.put("cat", 1, 'b');
+    table.clear();
+    populate(table, data);
+    return table;
+  }  
+  
+  public void testCreateExplicitComparators() {
+    table = TreeBasedTable.create(
+        Collections.reverseOrder(), Ordering.usingToString());
+    table.put("foo", 3, 'a');
+    table.put("foo", 12, 'b');
+    table.put("bar", 5, 'c');
+    table.put("cat", 8, 'd');
+    ASSERT.that(table.rowKeySet()).hasContentsInOrder("foo", "cat", "bar");
+    ASSERT.that(table.row("foo").keySet()).hasContentsInOrder(12, 3);
+  }
+  
+  public void testCreateCopy() {
+    TreeBasedTable<String, Integer, Character> original = TreeBasedTable.create(
+        Collections.reverseOrder(), Ordering.usingToString());
+    original.put("foo", 3, 'a');
+    original.put("foo", 12, 'b');
+    original.put("bar", 5, 'c');
+    original.put("cat", 8, 'd');
+    table = TreeBasedTable.create(original);
+    ASSERT.that(table.rowKeySet()).hasContentsInOrder("foo", "cat", "bar");
+    ASSERT.that(table.row("foo").keySet()).hasContentsInOrder(12, 3);
+    assertEquals(original, table);
+  }
+  
+  @GwtIncompatible("SerializableTester")
+  public void testSerialization() {
+    table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
+    SerializableTester.reserializeAndAssert(table);
+  }
+  
+  public void testToString_ordered() {
+    table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
+    assertEquals("{bar={1=b}, foo={1=a, 3=c}}", table.toString());
+    assertEquals("{bar={1=b}, foo={1=a, 3=c}}", table.rowMap().toString());
+  }
+  
+  public void testCellSetToString_ordered() {
+    table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
+    assertEquals("[(bar,1)=b, (foo,1)=a, (foo,3)=c]",
+        table.cellSet().toString());    
+  }
+  
+  public void testRowKeySetToString_ordered() {
+    table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
+    assertEquals("[bar, foo]", table.rowKeySet().toString());    
+  }
+  
+  public void testValuesToString_ordered() {
+    table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
+    assertEquals("[b, a, c]", table.values().toString());    
+  }
+  
+  public void testRowComparator() {
+    sortedTable = TreeBasedTable.create();
+    assertSame(Ordering.natural(), sortedTable.rowComparator());
+    
+    sortedTable = TreeBasedTable.create(
+        Collections.reverseOrder(), Ordering.usingToString());
+    assertSame(Collections.reverseOrder(), sortedTable.rowComparator());
+  }
+  
+  public void testColumnComparator() {
+    sortedTable = TreeBasedTable.create();
+    assertSame(Ordering.natural(), sortedTable.columnComparator());
+    
+    sortedTable = TreeBasedTable.create(
+        Collections.reverseOrder(), Ordering.usingToString());
+    assertSame(Ordering.usingToString(), sortedTable.columnComparator());
+  }
+  
+  public void testRowKeySetComparator() {
+    sortedTable = TreeBasedTable.create();
+    assertSame(Ordering.natural(),
+        sortedTable.rowKeySet().comparator());
+    
+    sortedTable = TreeBasedTable.create(
+        Collections.reverseOrder(), Ordering.usingToString());
+    assertSame(Collections.reverseOrder(),
+        sortedTable.rowKeySet().comparator());
+  }
+  
+  public void testRowKeySetFirst() {
+    sortedTable = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');  
+    assertSame("bar", sortedTable.rowKeySet().first());    
+  }  
+  
+  public void testRowKeySetLast() {
+    sortedTable = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');  
+    assertSame("foo", sortedTable.rowKeySet().last());    
+  }  
+  
+  public void testRowKeySetHeadSet() {
+    sortedTable = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');  
+    Set<String> set = sortedTable.rowKeySet().headSet("cat");
+    assertEquals(Collections.singleton("bar"), set);
+    set.clear();
+    assertTrue(set.isEmpty());
+    assertEquals(Collections.singleton("foo"), sortedTable.rowKeySet());
+  }  
+  
+  public void testRowKeySetTailSet() {
+    sortedTable = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');  
+    Set<String> set = sortedTable.rowKeySet().tailSet("cat");
+    assertEquals(Collections.singleton("foo"), set);
+    set.clear();
+    assertTrue(set.isEmpty());
+    assertEquals(Collections.singleton("bar"), sortedTable.rowKeySet());
+  }
+  
+  public void testRowKeySetSubSet() {
+    sortedTable = create(
+        "foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c', "dog", 2, 'd');  
+    Set<String> set = sortedTable.rowKeySet().subSet("cat", "egg");
+    assertEquals(Collections.singleton("dog"), set);
+    set.clear();
+    assertTrue(set.isEmpty());
+    assertEquals(ImmutableSet.of("bar", "foo"), sortedTable.rowKeySet());
+  }
+  
+  public void testRowMapComparator() {
+    sortedTable = TreeBasedTable.create();
+    assertSame(Ordering.natural(), sortedTable.rowMap().comparator());
+    
+    sortedTable = TreeBasedTable.create(
+        Collections.reverseOrder(), Ordering.usingToString());
+    assertSame(Collections.reverseOrder(), sortedTable.rowMap().comparator());
+  }  
+  
+  public void testRowMapFirstKey() {
+    sortedTable = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');  
+    assertSame("bar", sortedTable.rowMap().firstKey());    
+  }  
+  
+  public void testRowMapLastKey() {
+    sortedTable = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');  
+    assertSame("foo", sortedTable.rowMap().lastKey());    
+  }
+  
+  public void testRowKeyMapHeadMap() {
+    sortedTable = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');  
+    Map<String, Map<Integer, Character>> map
+        = sortedTable.rowMap().headMap("cat");
+    assertEquals(1, map.size());
+    assertEquals(ImmutableMap.of(1, 'b'), map.get("bar"));
+    map.clear();
+    assertTrue(map.isEmpty());
+    assertEquals(Collections.singleton("foo"), sortedTable.rowKeySet());
+  }  
+  
+  public void testRowKeyMapTailMap() {
+    sortedTable = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');  
+    Map<String, Map<Integer, Character>> map
+        = sortedTable.rowMap().tailMap("cat");
+    assertEquals(1, map.size());
+    assertEquals(ImmutableMap.of(1, 'a', 3, 'c'), map.get("foo"));
+    map.clear();
+    assertTrue(map.isEmpty());
+    assertEquals(Collections.singleton("bar"), sortedTable.rowKeySet());
+  }
+  
+  public void testRowKeyMapSubMap() {
+    sortedTable = create(
+        "foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c', "dog", 2, 'd');  
+    Map<String, Map<Integer, Character>> map
+        = sortedTable.rowMap().subMap("cat", "egg");
+    assertEquals(ImmutableMap.of(2, 'd'), map.get("dog"));
+    map.clear();
+    assertTrue(map.isEmpty());
+    assertEquals(ImmutableSet.of("bar", "foo"), sortedTable.rowKeySet());
+  }
+  
+  public void testRowMapValuesAreSorted(){
+    sortedTable = create(
+        "foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c', "dog", 2, 'd');
+    assertTrue(sortedTable.rowMap().get("foo") instanceof SortedMap);
+  }
+  
+  public void testColumnKeySet_isSorted() {
+    table = create("a", 2,  'X',
+                   "a", 2,  'X',
+                   "b", 3,  'X',
+                   "b", 2,  'X',
+                   "c", 10, 'X',
+                   "c", 10, 'X',
+                   "c", 20, 'X',
+                   "d", 15, 'X',
+                   "d", 20, 'X',
+                   "d", 1,  'X',
+                   "e", 5,  'X'
+                  );
+    assertEquals("[1, 2, 3, 5, 10, 15, 20]", table.columnKeySet().toString());
+  }
+  
+  public void testColumnKeySet_isSortedWithRealComparator() {
+    table = create(String.CASE_INSENSITIVE_ORDER,
+                   Ordering.natural().reverse(),
+                   "a", 2,  'X',
+                   "a", 2,  'X',
+                   "b", 3,  'X',
+                   "b", 2,  'X',
+                   "c", 10, 'X',
+                   "c", 10, 'X',
+                   "c", 20, 'X',
+                   "d", 15, 'X',
+                   "d", 20, 'X',
+                   "d", 1,  'X',
+                   "e", 5,  'X'
+                  );
+    assertEquals("[20, 15, 10, 5, 3, 2, 1]", table.columnKeySet().toString());
+  }  
+  
+  public void testColumnKeySet_empty() {
+    table = create();
+    assertEquals("[]", table.columnKeySet().toString());
+  }
+  
+  public void testColumnKeySet_oneRow() {
+    table = create("a", 2,  'X',
+                   "a", 1,  'X'
+                  );
+    assertEquals("[1, 2]", table.columnKeySet().toString());
+  }
+  
+  public void testColumnKeySet_oneColumn() {
+    table = create("a", 1,  'X',
+                   "b", 1,  'X'
+                  );
+    assertEquals("[1]", table.columnKeySet().toString());
+  }
+  
+  public void testColumnKeySet_oneEntry() {
+    table = create("a", 1,  'X');
+    assertEquals("[1]", table.columnKeySet().toString());
+  }
+
+  public void testRowEntrySetContains(){
+    table =
+        sortedTable =
+            create("a", 2, 'X', "a", 2, 'X', "b", 3, 'X', "b", 2, 'X', "c", 10,
+                'X', "c", 10, 'X', "c", 20, 'X', "d", 15, 'X', "d", 20, 'X',
+                "d", 1, 'X', "e", 5, 'X');
+    SortedMap<Integer, Character> row = sortedTable.row("c");
+    Set<Map.Entry<Integer, Character>> entrySet = row.entrySet();
+    assertTrue(entrySet.contains(Maps.immutableEntry(10, 'X')));
+    assertTrue(entrySet.contains(Maps.immutableEntry(20, 'X')));
+    assertFalse(entrySet.contains(Maps.immutableEntry(15, 'X')));
+    entrySet = row.tailMap(15).entrySet();
+    assertFalse(entrySet.contains(Maps.immutableEntry(10, 'X')));
+    assertTrue(entrySet.contains(Maps.immutableEntry(20, 'X')));
+    assertFalse(entrySet.contains(Maps.immutableEntry(15, 'X')));
+  }
+
+  public void testRowEntrySetRemove(){
+    table =
+        sortedTable =
+            create("a", 2, 'X', "a", 2, 'X', "b", 3, 'X', "b", 2, 'X', "c", 10,
+                'X', "c", 10, 'X', "c", 20, 'X', "d", 15, 'X', "d", 20, 'X',
+                "d", 1, 'X', "e", 5, 'X');
+    SortedMap<Integer, Character> row = sortedTable.row("c");
+    Set<Map.Entry<Integer, Character>> entrySet = row.tailMap(15).entrySet();
+    assertFalse(entrySet.remove(Maps.immutableEntry(10, 'X')));
+    assertTrue(entrySet.remove(Maps.immutableEntry(20, 'X')));
+    assertFalse(entrySet.remove(Maps.immutableEntry(15, 'X')));
+    entrySet = row.entrySet();
+    assertTrue(entrySet.remove(Maps.immutableEntry(10, 'X')));
+    assertFalse(entrySet.remove(Maps.immutableEntry(20, 'X')));
+    assertFalse(entrySet.remove(Maps.immutableEntry(15, 'X')));
+  }
+  
+  public void testRowSize(){
+    table =
+        sortedTable =
+            create("a", 2, 'X', "a", 2, 'X', "b", 3, 'X', "b", 2, 'X', "c", 10,
+                'X', "c", 10, 'X', "c", 20, 'X', "d", 15, 'X', "d", 20, 'X',
+                "d", 1, 'X', "e", 5, 'X');
+    SortedMap<Integer, Character> row = sortedTable.row("c");
+    assertEquals(row.size(), 2);
+    assertEquals(row.tailMap(15).size(), 1);
+  }
+
+  public void testSubRowClearAndPut() {
+    table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c');
+    SortedMap<Integer, Character> row = (SortedMap<Integer, Character>) table.row("foo");
+    SortedMap<Integer, Character> subRow = row.tailMap(2);
+    assertEquals(ImmutableMap.of(1, 'a', 3, 'c'), row);
+    assertEquals(ImmutableMap.of(3, 'c'), subRow);
+    table.remove("foo", 3);
+    assertEquals(ImmutableMap.of(1, 'a'), row);
+    assertEquals(ImmutableMap.of(), subRow);
+    table.remove("foo", 1);
+    assertEquals(ImmutableMap.of(), row);
+    assertEquals(ImmutableMap.of(), subRow);
+    table.put("foo", 2, 'b');
+    assertEquals(ImmutableMap.of(2, 'b'), row);
+    assertEquals(ImmutableMap.of(2, 'b'), subRow);
+    row.clear();
+    assertEquals(ImmutableMap.of(), row);
+    assertEquals(ImmutableMap.of(), subRow);
+    table.put("foo", 5, 'x');
+    assertEquals(ImmutableMap.of(5, 'x'), row);
+    assertEquals(ImmutableMap.of(5, 'x'), subRow);
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/TreeMultimapExplicitTest.java b/guava-tests/test/com/google/common/collect/TreeMultimapExplicitTest.java
new file mode 100644
index 0000000..bc9b68f
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/TreeMultimapExplicitTest.java
@@ -0,0 +1,204 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.testing.SerializableTester;
+
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.SortedSet;
+
+/**
+ * Unit tests for {@code TreeMultimap} with explicit comparators.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible(emulated = true)
+public class TreeMultimapExplicitTest extends AbstractSetMultimapTest {
+
+  /**
+   * Compare strings lengths, and if the lengths are equal compare the strings.
+   * A {@code null} is less than any non-null value.
+   */
+  private enum StringLength implements Comparator<String> {
+    COMPARATOR;
+
+    @Override
+    public int compare(String first, String second) {
+      if (first == second) {
+        return 0;
+      } else if (first == null) {
+        return -1;
+      } else if (second == null) {
+        return 1;
+      } else if (first.length() != second.length()) {
+        return first.length() - second.length();
+      } else {
+        return first.compareTo(second);
+      }
+    }
+  }
+
+  /**
+   * Decreasing integer values. A {@code null} comes before any non-null value.
+   */
+  private static final Comparator<Integer> DECREASING_INT_COMPARATOR =
+      Ordering.<Integer>natural().reverse().nullsFirst();
+
+  @Override protected Multimap<String, Integer> create() {
+    return TreeMultimap.create(
+        StringLength.COMPARATOR, DECREASING_INT_COMPARATOR);
+  }
+
+  /**
+   * Create and populate a {@code TreeMultimap} with explicit comparators.
+   */
+  private TreeMultimap<String, Integer> createPopulate() {
+    TreeMultimap<String, Integer> multimap = TreeMultimap.create(
+        StringLength.COMPARATOR, DECREASING_INT_COMPARATOR);
+    multimap.put("google", 2);
+    multimap.put("google", 6);
+    multimap.put(null, 3);
+    multimap.put(null, 1);
+    multimap.put(null, 7);
+    multimap.put("tree", 0);
+    multimap.put("tree", null);
+    return multimap;
+  }
+
+  /**
+   * Test that a TreeMultimap created from another uses the natural ordering.
+   */
+  public void testMultimapCreateFromTreeMultimap() {
+    TreeMultimap<String, Integer> tree = TreeMultimap.create(
+        StringLength.COMPARATOR, DECREASING_INT_COMPARATOR);
+    tree.put("google", 2);
+    tree.put("google", 6);
+    tree.put("tree", 0);
+    tree.put("tree", 3);
+    ASSERT.that(tree.keySet()).hasContentsInOrder("tree", "google");
+    ASSERT.that(tree.get("google")).hasContentsInOrder(6, 2);
+
+    TreeMultimap<String, Integer> copy = TreeMultimap.create(tree);
+    assertEquals(tree, copy);
+    ASSERT.that(copy.keySet()).hasContentsInOrder("google", "tree");
+    ASSERT.that(copy.get("google")).hasContentsInOrder(2, 6);
+    assertEquals(Ordering.natural(), copy.keyComparator());
+    assertEquals(Ordering.natural(), copy.valueComparator());
+    assertEquals(Ordering.natural(), copy.get("google").comparator());
+  }
+
+  public void testToString() {
+    assertEquals("{bar=[3, 2, 1], foo=[4, 3, 2, 1, -1]}",
+        createSample().toString());
+  }
+
+  public void testGetComparator() {
+    TreeMultimap<String, Integer> multimap = createPopulate();
+    assertEquals(StringLength.COMPARATOR, multimap.keyComparator());
+    assertEquals(DECREASING_INT_COMPARATOR, multimap.valueComparator());
+  }
+
+  public void testOrderedGet() {
+    TreeMultimap<String, Integer> multimap = createPopulate();
+    ASSERT.that(multimap.get(null)).hasContentsInOrder(7, 3, 1);
+    ASSERT.that(multimap.get("google")).hasContentsInOrder(6, 2);
+    ASSERT.that(multimap.get("tree")).hasContentsInOrder(null, 0);
+  }
+
+  public void testOrderedKeySet() {
+    TreeMultimap<String, Integer> multimap = createPopulate();
+    ASSERT.that(multimap.keySet()).hasContentsInOrder(null, "tree", "google");
+  }
+
+  public void testOrderedAsMapEntries() {
+    TreeMultimap<String, Integer> multimap = createPopulate();
+    Iterator<Map.Entry<String, Collection<Integer>>> iterator =
+        multimap.asMap().entrySet().iterator();
+    Map.Entry<String, Collection<Integer>> entry = iterator.next();
+    assertEquals(null, entry.getKey());
+    ASSERT.that(entry.getValue()).hasContentsAnyOrder(7, 3, 1);
+    entry = iterator.next();
+    assertEquals("tree", entry.getKey());
+    ASSERT.that(entry.getValue()).hasContentsAnyOrder(null, 0);
+    entry = iterator.next();
+    assertEquals("google", entry.getKey());
+    ASSERT.that(entry.getValue()).hasContentsAnyOrder(6, 2);
+  }
+
+  public void testOrderedEntries() {
+    TreeMultimap<String, Integer> multimap = createPopulate();
+    ASSERT.that(multimap.entries()).hasContentsInOrder(
+        Maps.immutableEntry((String) null, 7),
+        Maps.immutableEntry((String) null, 3),
+        Maps.immutableEntry((String) null, 1),
+        Maps.immutableEntry("tree", (Integer) null),
+        Maps.immutableEntry("tree", 0),
+        Maps.immutableEntry("google", 6), Maps.immutableEntry("google", 2));
+  }
+
+  public void testOrderedValues() {
+    TreeMultimap<String, Integer> multimap = createPopulate();
+    ASSERT.that(multimap.values()).hasContentsInOrder(7, 3, 1, null, 0, 6, 2);
+  }
+
+  public void testComparator() {
+    TreeMultimap<String, Integer> multimap = createPopulate();
+    assertEquals(DECREASING_INT_COMPARATOR, multimap.get("foo").comparator());
+    assertEquals(DECREASING_INT_COMPARATOR,
+        multimap.get("missing").comparator());
+  }
+
+  public void testMultimapComparators() {
+    Multimap<String, Integer> multimap = createSample();
+    TreeMultimap<String, Integer> copy =
+        TreeMultimap.create(StringLength.COMPARATOR, DECREASING_INT_COMPARATOR);
+    copy.putAll(multimap);
+    assertEquals(multimap, copy);
+    assertEquals(StringLength.COMPARATOR, copy.keyComparator());
+    assertEquals(DECREASING_INT_COMPARATOR, copy.valueComparator());
+  }
+
+  public void testSortedKeySet() {
+    TreeMultimap<String, Integer> multimap = createPopulate();
+    SortedSet<String> keySet = multimap.keySet();
+
+    assertEquals(null, keySet.first());
+    assertEquals("google", keySet.last());
+    assertEquals(StringLength.COMPARATOR, keySet.comparator());
+    assertEquals(Sets.newHashSet(null, "tree"), keySet.headSet("yahoo"));
+    assertEquals(Sets.newHashSet("google"), keySet.tailSet("yahoo"));
+    assertEquals(Sets.newHashSet("tree"), keySet.subSet("ask", "yahoo"));
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testExplicitComparatorSerialization() {
+    TreeMultimap<String, Integer> multimap = createPopulate();
+    TreeMultimap<String, Integer> copy
+        = SerializableTester.reserializeAndAssert(multimap);
+    ASSERT.that(copy.values()).hasContentsInOrder(7, 3, 1, null, 0, 6, 2);
+    ASSERT.that(copy.keySet()).hasContentsInOrder(null, "tree", "google");
+    assertEquals(multimap.keyComparator(), copy.keyComparator());
+    assertEquals(multimap.valueComparator(), copy.valueComparator());
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/TreeMultimapNaturalTest.java b/guava-tests/test/com/google/common/collect/TreeMultimapNaturalTest.java
new file mode 100644
index 0000000..5416a1d
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/TreeMultimapNaturalTest.java
@@ -0,0 +1,549 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.collect.Lists.newArrayList;
+import static com.google.common.collect.Sets.newHashSet;
+import static com.google.common.collect.testing.IteratorFeature.MODIFIABLE;
+import static java.util.Arrays.asList;
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.collect.testing.DerivedComparable;
+import com.google.common.collect.testing.IteratorTester;
+import com.google.common.testing.SerializableTester;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.NoSuchElementException;
+import java.util.Set;
+import java.util.SortedMap;
+import java.util.SortedSet;
+
+/**
+ * Unit tests for {@code TreeMultimap} with natural ordering.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible(emulated = true)
+public class TreeMultimapNaturalTest<E> extends AbstractSetMultimapTest {
+  @Override protected Multimap<String, Integer> create() {
+    return TreeMultimap.create();
+  }
+
+  /* Null keys and values aren't supported. */
+  @Override protected String nullKey() {
+    return "null";
+  }
+
+  @Override protected Integer nullValue() {
+    return 42;
+  }
+
+  /**
+   * Create and populate a {@code TreeMultimap} with the natural ordering of
+   * keys and values.
+   */
+  private TreeMultimap<String, Integer> createPopulate() {
+    TreeMultimap<String, Integer> multimap = TreeMultimap.create();
+    multimap.put("google", 2);
+    multimap.put("google", 6);
+    multimap.put("foo", 3);
+    multimap.put("foo", 1);
+    multimap.put("foo", 7);
+    multimap.put("tree", 4);
+    multimap.put("tree", 0);
+    return multimap;
+  }
+
+  public void testToString() {
+    assertEquals("{bar=[1, 2, 3], foo=[-1, 1, 2, 3, 4]}",
+        createSample().toString());
+  }
+
+  public void testOrderedGet() {
+    TreeMultimap<String, Integer> multimap = createPopulate();
+    ASSERT.that(multimap.get("foo")).hasContentsInOrder(1, 3, 7);
+    ASSERT.that(multimap.get("google")).hasContentsInOrder(2, 6);
+    ASSERT.that(multimap.get("tree")).hasContentsInOrder(0, 4);
+  }
+
+  public void testOrderedKeySet() {
+    TreeMultimap<String, Integer> multimap = createPopulate();
+    ASSERT.that(multimap.keySet()).hasContentsInOrder("foo", "google", "tree");
+  }
+
+  public void testOrderedAsMapEntries() {
+    TreeMultimap<String, Integer> multimap = createPopulate();
+    Iterator<Map.Entry<String, Collection<Integer>>> iterator =
+        multimap.asMap().entrySet().iterator();
+    Map.Entry<String, Collection<Integer>> entry = iterator.next();
+    assertEquals("foo", entry.getKey());
+    ASSERT.that(entry.getValue()).hasContentsAnyOrder(1, 3, 7);
+    entry = iterator.next();
+    assertEquals("google", entry.getKey());
+    ASSERT.that(entry.getValue()).hasContentsAnyOrder(2, 6);
+    entry = iterator.next();
+    assertEquals("tree", entry.getKey());
+    ASSERT.that(entry.getValue()).hasContentsAnyOrder(0, 4);
+  }
+
+  public void testOrderedEntries() {
+    TreeMultimap<String, Integer> multimap = createPopulate();
+    ASSERT.that(multimap.entries()).hasContentsInOrder(
+        Maps.immutableEntry("foo", 1),
+        Maps.immutableEntry("foo", 3),
+        Maps.immutableEntry("foo", 7),
+        Maps.immutableEntry("google", 2),
+        Maps.immutableEntry("google", 6),
+        Maps.immutableEntry("tree", 0),
+        Maps.immutableEntry("tree", 4));
+  }
+
+  public void testOrderedValues() {
+    TreeMultimap<String, Integer> multimap = createPopulate();
+    ASSERT.that(multimap.values()).hasContentsInOrder(
+        1, 3, 7, 2, 6, 0, 4);
+  }
+
+  public void testFirst() {
+    TreeMultimap<String, Integer> multimap = createPopulate();
+    assertEquals(Integer.valueOf(1), multimap.get("foo").first());
+    try {
+      multimap.get("missing").first();
+      fail("Expected NoSuchElementException");
+    } catch (NoSuchElementException expected) {}
+  }
+
+  public void testLast() {
+    TreeMultimap<String, Integer> multimap = createPopulate();
+    assertEquals(Integer.valueOf(7), multimap.get("foo").last());
+    try {
+      multimap.get("missing").last();
+      fail("Expected NoSuchElementException");
+    } catch (NoSuchElementException expected) {}
+  }
+
+  public void testComparatorFromGet() {
+    TreeMultimap<String, Integer> multimap = createPopulate();
+    assertSame(Ordering.natural(), multimap.get("foo").comparator());
+    assertSame(Ordering.natural(), multimap.get("missing").comparator());
+  }
+
+  public void testHeadSet() {
+    TreeMultimap<String, Integer> multimap = createPopulate();
+    Set<Integer> fooSet = multimap.get("foo").headSet(4);
+    assertEquals(Sets.newHashSet(1, 3), fooSet);
+    Set<Integer> missingSet = multimap.get("missing").headSet(4);
+    assertEquals(Sets.newHashSet(), missingSet);
+
+    multimap.put("foo", 0);
+    assertEquals(Sets.newHashSet(0, 1, 3), fooSet);
+
+    missingSet.add(2);
+    assertEquals(Sets.newHashSet(2), multimap.get("missing"));
+  }
+
+  public void testTailSet() {
+    TreeMultimap<String, Integer> multimap = createPopulate();
+    Set<Integer> fooSet = multimap.get("foo").tailSet(2);
+    assertEquals(Sets.newHashSet(3, 7), fooSet);
+    Set<Integer> missingSet = multimap.get("missing").tailSet(4);
+    assertEquals(Sets.newHashSet(), missingSet);
+
+    multimap.put("foo", 6);
+    assertEquals(Sets.newHashSet(3, 6, 7), fooSet);
+
+    missingSet.add(9);
+    assertEquals(Sets.newHashSet(9), multimap.get("missing"));
+  }
+
+  public void testSubSet() {
+    TreeMultimap<String, Integer> multimap = createPopulate();
+    Set<Integer> fooSet = multimap.get("foo").subSet(2, 6);
+    assertEquals(Sets.newHashSet(3), fooSet);
+
+    multimap.put("foo", 5);
+    assertEquals(Sets.newHashSet(3, 5), fooSet);
+
+    fooSet.add(4);
+    assertEquals(Sets.newHashSet(1, 3, 4, 5, 7), multimap.get("foo"));
+  }
+
+  public void testMultimapConstructor() {
+    Multimap<String, Integer> multimap = createSample();
+    TreeMultimap<String, Integer> copy = TreeMultimap.create(multimap);
+    assertEquals(multimap, copy);
+  }
+
+  private static final Comparator<Double> KEY_COMPARATOR = 
+      Ordering.natural();
+
+  private static final Comparator<Double> VALUE_COMPARATOR =
+      Ordering.natural().reverse().nullsFirst();
+
+  /**
+   * Test that creating one TreeMultimap from another does not copy the
+   * comparators from the source TreeMultimap.
+   */
+  public void testCreateFromTreeMultimap() {
+    Multimap<Double, Double> tree = TreeMultimap.create(KEY_COMPARATOR, VALUE_COMPARATOR);
+    tree.put(1.0, 2.0);
+    tree.put(2.0, 3.0);
+    tree.put(3.0, 4.0);
+    tree.put(4.0, 5.0);
+
+    TreeMultimap<Double, Double> copyFromTree = TreeMultimap.create(tree);
+    assertEquals(tree, copyFromTree);
+    assertSame(Ordering.natural(), copyFromTree.keyComparator());
+    assertSame(Ordering.natural(), copyFromTree.valueComparator());
+    assertSame(Ordering.natural(), copyFromTree.get(1.0).comparator());
+  }
+
+  /**
+   * Test that creating one TreeMultimap from a non-TreeMultimap
+   * results in natural ordering.
+   */
+  public void testCreateFromHashMultimap() {
+    Multimap<Double, Double> hash = HashMultimap.create();
+    hash.put(1.0, 2.0);
+    hash.put(2.0, 3.0);
+    hash.put(3.0, 4.0);
+    hash.put(4.0, 5.0);
+
+    TreeMultimap<Double, Double> copyFromHash = TreeMultimap.create(hash);
+    assertEquals(hash, copyFromHash);
+    assertEquals(Ordering.natural(), copyFromHash.keyComparator());
+    assertEquals(Ordering.natural(), copyFromHash.valueComparator());
+  }
+
+  /**
+   * Test that creating one TreeMultimap from a SortedSetMultimap uses natural
+   * ordering.
+   */
+  public void testCreateFromSortedSetMultimap() {
+    SortedSetMultimap<Double, Double> tree = TreeMultimap.create(KEY_COMPARATOR, VALUE_COMPARATOR);
+    tree.put(1.0, 2.0);
+    tree.put(2.0, 3.0);
+    tree.put(3.0, 4.0);
+    tree.put(4.0, 5.0);
+
+    SortedSetMultimap<Double, Double> sorted = Multimaps.unmodifiableSortedSetMultimap(tree);
+    TreeMultimap<Double, Double> copyFromSorted = TreeMultimap.create(sorted);
+    assertEquals(tree, copyFromSorted);
+    assertSame(Ordering.natural(), copyFromSorted.keyComparator());
+    assertSame(Ordering.natural(), copyFromSorted.valueComparator());
+    assertSame(Ordering.natural(), copyFromSorted.get(1.0).comparator());
+  }
+
+  public void testComparators() {
+    TreeMultimap<String, Integer> multimap = TreeMultimap.create();
+    assertEquals(Ordering.natural(), multimap.keyComparator());
+    assertEquals(Ordering.natural(), multimap.valueComparator());
+  }
+
+  public void testSortedKeySet() {
+    TreeMultimap<String, Integer> multimap = createPopulate();
+    SortedSet<String> keySet = multimap.keySet();
+
+    assertEquals("foo", keySet.first());
+    assertEquals("tree", keySet.last());
+    assertEquals(Ordering.natural(), keySet.comparator());
+    assertEquals(ImmutableSet.of("foo", "google"), keySet.headSet("hi"));
+    assertEquals(ImmutableSet.of("tree"), keySet.tailSet("hi"));
+    assertEquals(ImmutableSet.of("google"), keySet.subSet("gap", "hi"));
+  }
+
+  public void testKeySetSubSet() {
+    TreeMultimap<String, Integer> multimap = createPopulate();
+    SortedSet<String> keySet = multimap.keySet();
+    SortedSet<String> subSet = keySet.subSet("gap", "hi");
+
+    assertEquals(1, subSet.size());
+    assertTrue(subSet.contains("google"));
+    assertFalse(subSet.contains("foo"));
+    assertTrue(subSet.containsAll(Collections.singleton("google")));
+    assertFalse(subSet.containsAll(Collections.singleton("foo")));
+
+    Iterator<String> iterator = subSet.iterator();
+    assertTrue(iterator.hasNext());
+    assertEquals("google", iterator.next());
+    assertFalse(iterator.hasNext());
+
+    assertFalse(subSet.remove("foo"));
+    assertTrue(multimap.containsKey("foo"));
+    assertEquals(7, multimap.size());
+    assertTrue(subSet.remove("google"));
+    assertFalse(multimap.containsKey("google"));
+    assertEquals(5, multimap.size());
+  }
+
+  @GwtIncompatible("unreasonable slow")
+  public void testGetIteration() {
+    new IteratorTester<Integer>(6, MODIFIABLE,
+        Sets.newTreeSet(asList(2, 3, 4, 7, 8)),
+        IteratorTester.KnownOrder.KNOWN_ORDER) {
+      private Multimap<String, Integer> multimap;
+
+      @Override protected Iterator<Integer> newTargetIterator() {
+        multimap = create();
+        multimap.putAll("foo", asList(3, 8, 4));
+        multimap.putAll("bar", asList(5, 6));
+        multimap.putAll("foo", asList(7, 2));
+        return multimap.get("foo").iterator();
+      }
+
+      @Override protected void verify(List<Integer> elements) {
+        assertEquals(newHashSet(elements), multimap.get("foo"));
+      }
+    }.test();
+  }
+
+  @SuppressWarnings("unchecked")
+  @GwtIncompatible("unreasonable slow")
+  public void testEntriesIteration() {
+    Set<Entry<String, Integer>> set = Sets.newLinkedHashSet(asList(
+        Maps.immutableEntry("bar", 4),
+        Maps.immutableEntry("bar", 5),
+        Maps.immutableEntry("foo", 2),
+        Maps.immutableEntry("foo", 3),
+        Maps.immutableEntry("foo", 6)));
+    new IteratorTester<Entry<String, Integer>>(6, MODIFIABLE, set,
+        IteratorTester.KnownOrder.KNOWN_ORDER) {
+      private Multimap<String, Integer> multimap;
+
+      @Override protected Iterator<Entry<String, Integer>> newTargetIterator() {
+        multimap = create();
+        multimap.putAll("foo", asList(6, 3));
+        multimap.putAll("bar", asList(4, 5));
+        multimap.putAll("foo", asList(2));
+        return multimap.entries().iterator();
+      }
+
+      @Override protected void verify(List<Entry<String, Integer>> elements) {
+        assertEquals(newHashSet(elements), multimap.entries());
+      }
+    }.test();
+  }
+
+  @GwtIncompatible("unreasonable slow")
+  public void testKeysIteration() {
+    new IteratorTester<String>(6, MODIFIABLE, Lists.newArrayList("bar", "bar",
+        "foo", "foo", "foo"), IteratorTester.KnownOrder.KNOWN_ORDER) {
+      private Multimap<String, Integer> multimap;
+
+      @Override protected Iterator<String> newTargetIterator() {
+        multimap = create();
+        multimap.putAll("foo", asList(2, 3));
+        multimap.putAll("bar", asList(4, 5));
+        multimap.putAll("foo", asList(6));
+        return multimap.keys().iterator();
+      }
+
+      @Override protected void verify(List<String> elements) {
+        assertEquals(elements, Lists.newArrayList(multimap.keys()));
+      }
+    }.test();
+  }
+
+  @GwtIncompatible("unreasonable slow")
+  public void testValuesIteration() {
+    new IteratorTester<Integer>(6, MODIFIABLE, newArrayList(4, 5, 2, 3, 6),
+        IteratorTester.KnownOrder.KNOWN_ORDER) {
+      private Multimap<String, Integer> multimap;
+
+      @Override protected Iterator<Integer> newTargetIterator() {
+        multimap = create();
+        multimap.putAll("foo", asList(2, 3));
+        multimap.putAll("bar", asList(4, 5));
+        multimap.putAll("foo", asList(6));
+        return multimap.values().iterator();
+      }
+
+      @Override protected void verify(List<Integer> elements) {
+        assertEquals(elements, Lists.newArrayList(multimap.values()));
+      }
+    }.test();
+  }
+
+  @GwtIncompatible("unreasonable slow")
+  public void testKeySetIteration() {
+    new IteratorTester<String>(6, MODIFIABLE,
+        Sets.newTreeSet(asList("bar", "baz", "cat", "dog", "foo")),
+        IteratorTester.KnownOrder.KNOWN_ORDER) {
+      private Multimap<String, Integer> multimap;
+
+      @Override protected Iterator<String> newTargetIterator() {
+        multimap = create();
+        multimap.putAll("foo", asList(2, 3));
+        multimap.putAll("bar", asList(4, 5));
+        multimap.putAll("foo", asList(6));
+        multimap.putAll("baz", asList(7, 8));
+        multimap.putAll("dog", asList(9));
+        multimap.putAll("bar", asList(10, 11));
+        multimap.putAll("cat", asList(12, 13, 14));
+        return multimap.keySet().iterator();
+      }
+
+      @Override protected void verify(List<String> elements) {
+        assertEquals(newHashSet(elements), multimap.keySet());
+      }
+    }.test();
+  }
+
+  @SuppressWarnings("unchecked")
+  @GwtIncompatible("unreasonable slow")
+  public void testAsSetIteration() {
+    Set<Entry<String, Collection<Integer>>> set = Sets.newTreeSet(
+        new Comparator<Entry<String, ?>>() {
+          @Override
+          public int compare(Entry<String, ?> o1, Entry<String, ?> o2) {
+            return o1.getKey().compareTo(o2.getKey());
+          }
+        });
+    Collections.addAll(set,
+        Maps.immutableEntry("bar",
+            (Collection<Integer>) Sets.newHashSet(4, 5, 10, 11)),
+        Maps.immutableEntry("baz",
+            (Collection<Integer>) Sets.newHashSet(7, 8)),
+        Maps.immutableEntry("cat",
+            (Collection<Integer>) Sets.newHashSet(12, 13, 14)),
+        Maps.immutableEntry("dog",
+            (Collection<Integer>) Sets.newHashSet(9)),
+        Maps.immutableEntry("foo",
+            (Collection<Integer>) Sets.newHashSet(2, 3, 6))
+    );
+
+    new IteratorTester<Entry<String, Collection<Integer>>>(6, MODIFIABLE, set,
+        IteratorTester.KnownOrder.KNOWN_ORDER) {
+      private Multimap<String, Integer> multimap;
+
+      @Override protected Iterator<Entry<String, Collection<Integer>>>
+          newTargetIterator() {
+        multimap = create();
+        multimap.putAll("foo", asList(2, 3));
+        multimap.putAll("bar", asList(4, 5));
+        multimap.putAll("foo", asList(6));
+        multimap.putAll("baz", asList(7, 8));
+        multimap.putAll("dog", asList(9));
+        multimap.putAll("bar", asList(10, 11));
+        multimap.putAll("cat", asList(12, 13, 14));
+        return multimap.asMap().entrySet().iterator();
+      }
+
+      @Override protected void verify(
+          List<Entry<String, Collection<Integer>>> elements) {
+        assertEquals(newHashSet(elements), multimap.asMap().entrySet());
+      }
+    }.test();
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testExplicitComparatorSerialization() {
+    TreeMultimap<String, Integer> multimap = createPopulate();
+    TreeMultimap<String, Integer> copy
+        = SerializableTester.reserializeAndAssert(multimap);
+    ASSERT.that(copy.values()).hasContentsInOrder(1, 3, 7, 2, 6, 0, 4);
+    ASSERT.that(copy.keySet()).hasContentsInOrder("foo", "google", "tree");
+    assertEquals(multimap.keyComparator(), copy.keyComparator());
+    assertEquals(multimap.valueComparator(), copy.valueComparator());
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testTreeMultimapDerived() {
+    TreeMultimap<DerivedComparable, DerivedComparable> multimap = TreeMultimap.create();
+    assertEquals(ImmutableMultimap.of(), multimap);
+    multimap.put(new DerivedComparable("foo"), new DerivedComparable("f"));
+    multimap.put(new DerivedComparable("foo"), new DerivedComparable("o"));
+    multimap.put(new DerivedComparable("foo"), new DerivedComparable("o"));
+    multimap.put(new DerivedComparable("bar"), new DerivedComparable("b"));
+    multimap.put(new DerivedComparable("bar"), new DerivedComparable("a"));
+    multimap.put(new DerivedComparable("bar"), new DerivedComparable("r"));
+    ASSERT.that(multimap.keySet()).hasContentsInOrder(
+        new DerivedComparable("bar"), new DerivedComparable("foo"));
+    ASSERT.that(multimap.values()).hasContentsInOrder(
+        new DerivedComparable("a"), new DerivedComparable("b"), new DerivedComparable("r"),
+        new DerivedComparable("f"), new DerivedComparable("o"));
+    assertEquals(Ordering.natural(), multimap.keyComparator());
+    assertEquals(Ordering.natural(), multimap.valueComparator());
+    SerializableTester.reserializeAndAssert(multimap);
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testTreeMultimapNonGeneric() {
+    TreeMultimap<LegacyComparable, LegacyComparable> multimap
+        = TreeMultimap.create();
+    assertEquals(ImmutableMultimap.of(), multimap);
+    multimap.put(new LegacyComparable("foo"), new LegacyComparable("f"));
+    multimap.put(new LegacyComparable("foo"), new LegacyComparable("o"));
+    multimap.put(new LegacyComparable("foo"), new LegacyComparable("o"));
+    multimap.put(new LegacyComparable("bar"), new LegacyComparable("b"));
+    multimap.put(new LegacyComparable("bar"), new LegacyComparable("a"));
+    multimap.put(new LegacyComparable("bar"), new LegacyComparable("r"));
+    ASSERT.that(multimap.keySet()).hasContentsInOrder(
+        new LegacyComparable("bar"), new LegacyComparable("foo"));
+    ASSERT.that(multimap.values()).hasContentsInOrder(
+        new LegacyComparable("a"),
+        new LegacyComparable("b"),
+        new LegacyComparable("r"),
+        new LegacyComparable("f"),
+        new LegacyComparable("o"));
+    assertEquals(Ordering.natural(), multimap.keyComparator());
+    assertEquals(Ordering.natural(), multimap.valueComparator());
+    SerializableTester.reserializeAndAssert(multimap);
+  }
+
+  public void testTreeMultimapAsMapSorted() {
+    TreeMultimap<String, Integer> multimap = createPopulate();
+    SortedMap<String, Collection<Integer>> asMap = multimap.asMap();
+    assertEquals(Ordering.natural(), asMap.comparator());
+    assertEquals("foo", asMap.firstKey());
+    assertEquals("tree", asMap.lastKey());
+    Set<Integer> fooValues = ImmutableSet.of(1, 3, 7);
+    Set<Integer> googleValues = ImmutableSet.of(2, 6);
+    Set<Integer> treeValues = ImmutableSet.of(4, 0);
+    assertEquals(ImmutableMap.of("google", googleValues, "tree", treeValues),
+        asMap.tailMap("g"));
+    assertEquals(ImmutableMap.of("google", googleValues, "foo", fooValues),
+        asMap.headMap("h"));
+    assertEquals(ImmutableMap.of("google", googleValues),
+        asMap.subMap("g", "h"));
+  }
+
+  public void testTailSetClear() {
+    TreeMultimap<String, Integer> multimap = TreeMultimap.create();
+    multimap.put("a", 1);
+    multimap.put("a", 11);
+    multimap.put("b", 2);
+    multimap.put("c", 3);
+    multimap.put("d", 4);
+    multimap.put("e", 5);
+    multimap.put("e", 55);
+
+    multimap.keySet().tailSet("d").clear();
+    assertEquals(ImmutableSet.of("a", "b", "c"), multimap.keySet());
+    assertEquals(4, multimap.size());
+    assertEquals(4, multimap.values().size());
+    assertEquals(4, multimap.keys().size());
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/TreeMultisetTest.java b/guava-tests/test/com/google/common/collect/TreeMultisetTest.java
new file mode 100644
index 0000000..2d70307
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/TreeMultisetTest.java
@@ -0,0 +1,336 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.collect.BoundType.CLOSED;
+import static com.google.common.collect.Lists.newArrayList;
+import static com.google.common.collect.testing.IteratorFeature.MODIFIABLE;
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+import java.util.SortedSet;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.collect.testing.IteratorTester;
+
+/**
+ * Unit test for {@link TreeMultiset}.
+ *
+ * @author Neal Kanodia
+ */
+@GwtCompatible(emulated = true)
+public class TreeMultisetTest extends AbstractMultisetTest {
+  @SuppressWarnings("unchecked")
+  @Override protected <E> Multiset<E> create() {
+    return (Multiset) TreeMultiset.create();
+  }
+
+  public void testCreate() {
+    TreeMultiset<String> multiset = TreeMultiset.create();
+    multiset.add("foo", 2);
+    multiset.add("bar");
+    assertEquals(3, multiset.size());
+    assertEquals(2, multiset.count("foo"));
+    assertEquals(Ordering.natural(), multiset.comparator());
+    assertEquals("[bar, foo x 2]", multiset.toString());
+  }
+
+  public void testCreateWithComparator() {
+    Multiset<String> multiset = TreeMultiset.create(Collections.reverseOrder());
+    multiset.add("foo", 2);
+    multiset.add("bar");
+    assertEquals(3, multiset.size());
+    assertEquals(2, multiset.count("foo"));
+    assertEquals("[foo x 2, bar]", multiset.toString());
+  }
+
+  public void testCreateFromIterable() {
+    Multiset<String> multiset
+        = TreeMultiset.create(Arrays.asList("foo", "bar", "foo"));
+    assertEquals(3, multiset.size());
+    assertEquals(2, multiset.count("foo"));
+    assertEquals("[bar, foo x 2]", multiset.toString());
+  }
+
+  public void testToString() {
+    ms.add("a", 3);
+    ms.add("c", 1);
+    ms.add("b", 2);
+
+    assertEquals("[a x 3, b x 2, c]", ms.toString());
+  }
+
+  @GwtIncompatible("unreasonable slow")
+  public void testIteratorBashing() {
+    IteratorTester<String> tester =
+        new IteratorTester<String>(createSample().size() + 2, MODIFIABLE,
+            newArrayList(createSample()),
+            IteratorTester.KnownOrder.KNOWN_ORDER) {
+          private Multiset<String> targetMultiset;
+
+          @Override protected Iterator<String> newTargetIterator() {
+            targetMultiset = createSample();
+            return targetMultiset.iterator();
+          }
+
+          @Override protected void verify(List<String> elements) {
+            assertEquals(elements, Lists.newArrayList(targetMultiset));
+          }
+        };
+
+    /* This next line added as a stopgap until JDK6 bug is fixed. */
+    tester.ignoreSunJavaBug6529795();
+
+    tester.test();
+  }
+
+  @GwtIncompatible("slow (~30s)")
+  public void testElementSetIteratorBashing() {
+    IteratorTester<String> tester = new IteratorTester<String>(5, MODIFIABLE,
+        newArrayList("a", "b", "c"), IteratorTester.KnownOrder.KNOWN_ORDER) {
+      private Set<String> targetSet;
+      @Override protected Iterator<String> newTargetIterator() {
+        Multiset<String> multiset = create();
+        multiset.add("a", 3);
+        multiset.add("c", 1);
+        multiset.add("b", 2);
+        targetSet = multiset.elementSet();
+        return targetSet.iterator();
+      }
+      @Override protected void verify(List<String> elements) {
+        assertEquals(elements, Lists.newArrayList(targetSet));
+      }
+    };
+
+    /* This next line added as a stopgap until JDK6 bug is fixed. */
+    tester.ignoreSunJavaBug6529795();
+
+    tester.test();
+  }
+
+  public void testElementSetSortedSetMethods() {
+    TreeMultiset<String> ms = TreeMultiset.create();
+    ms.add("c", 1);
+    ms.add("a", 3);
+    ms.add("b", 2);
+    SortedSet<String> elementSet = ms.elementSet();
+
+    assertEquals("a", elementSet.first());
+    assertEquals("c", elementSet.last());
+    assertEquals(Ordering.natural(), elementSet.comparator());
+
+    ASSERT.that(elementSet.headSet("b")).hasContentsInOrder("a");
+    ASSERT.that(elementSet.tailSet("b")).hasContentsInOrder("b", "c");
+    ASSERT.that(elementSet.subSet("a", "c")).hasContentsInOrder("a", "b");
+  }
+
+  public void testElementSetSubsetRemove() {
+    TreeMultiset<String> ms = TreeMultiset.create();
+    ms.add("a", 1);
+    ms.add("b", 3);
+    ms.add("c", 2);
+    ms.add("d", 1);
+    ms.add("e", 3);
+    ms.add("f", 2);
+
+    SortedSet<String> elementSet = ms.elementSet();
+    ASSERT.that(elementSet).hasContentsInOrder("a", "b", "c", "d", "e", "f");
+    SortedSet<String> subset = elementSet.subSet("b", "f");
+    ASSERT.that(subset).hasContentsInOrder("b", "c", "d", "e");
+
+    assertTrue(subset.remove("c"));
+    ASSERT.that(elementSet).hasContentsInOrder("a", "b", "d", "e", "f");
+    ASSERT.that(subset).hasContentsInOrder("b", "d", "e");
+    assertEquals(10, ms.size());
+
+    assertFalse(subset.remove("a"));
+    ASSERT.that(elementSet).hasContentsInOrder("a", "b", "d", "e", "f");
+    ASSERT.that(subset).hasContentsInOrder("b", "d", "e");
+    assertEquals(10, ms.size());
+  }
+
+  public void testElementSetSubsetRemoveAll() {
+    TreeMultiset<String> ms = TreeMultiset.create();
+    ms.add("a", 1);
+    ms.add("b", 3);
+    ms.add("c", 2);
+    ms.add("d", 1);
+    ms.add("e", 3);
+    ms.add("f", 2);
+
+    SortedSet<String> elementSet = ms.elementSet();
+    ASSERT.that(elementSet).hasContentsInOrder("a", "b", "c", "d", "e", "f");
+    SortedSet<String> subset = elementSet.subSet("b", "f");
+    ASSERT.that(subset).hasContentsInOrder("b", "c", "d", "e");
+
+    assertTrue(subset.removeAll(Arrays.asList("a", "c")));
+    ASSERT.that(elementSet).hasContentsInOrder("a", "b", "d", "e", "f");
+    ASSERT.that(subset).hasContentsInOrder("b", "d", "e");
+    assertEquals(10, ms.size());
+  }
+
+  public void testElementSetSubsetRetainAll() {
+    TreeMultiset<String> ms = TreeMultiset.create();
+    ms.add("a", 1);
+    ms.add("b", 3);
+    ms.add("c", 2);
+    ms.add("d", 1);
+    ms.add("e", 3);
+    ms.add("f", 2);
+
+    SortedSet<String> elementSet = ms.elementSet();
+    ASSERT.that(elementSet).hasContentsInOrder("a", "b", "c", "d", "e", "f");
+    SortedSet<String> subset = elementSet.subSet("b", "f");
+    ASSERT.that(subset).hasContentsInOrder("b", "c", "d", "e");
+
+    assertTrue(subset.retainAll(Arrays.asList("a", "c")));
+    ASSERT.that(elementSet).hasContentsInOrder("a", "c", "f");
+    ASSERT.that(subset).hasContentsInOrder("c");
+    assertEquals(5, ms.size());
+  }
+
+  public void testElementSetSubsetClear() {
+    TreeMultiset<String> ms = TreeMultiset.create();
+    ms.add("a", 1);
+    ms.add("b", 3);
+    ms.add("c", 2);
+    ms.add("d", 1);
+    ms.add("e", 3);
+    ms.add("f", 2);
+
+    SortedSet<String> elementSet = ms.elementSet();
+    ASSERT.that(elementSet).hasContentsInOrder("a", "b", "c", "d", "e", "f");
+    SortedSet<String> subset = elementSet.subSet("b", "f");
+    ASSERT.that(subset).hasContentsInOrder("b", "c", "d", "e");
+
+    subset.clear();
+    ASSERT.that(elementSet).hasContentsInOrder("a", "f");
+    ASSERT.that(subset).hasContentsInOrder();
+    assertEquals(3, ms.size());
+  }
+
+  public void testCustomComparator() throws Exception {
+    Comparator<String> comparator = new Comparator<String>() {
+      @Override
+      public int compare(String o1, String o2) {
+        return o2.compareTo(o1);
+      }
+    };
+    TreeMultiset<String> ms = TreeMultiset.create(comparator);
+
+    ms.add("b");
+    ms.add("c");
+    ms.add("a");
+    ms.add("b");
+    ms.add("d");
+
+    ASSERT.that(ms).hasContentsInOrder("d", "c", "b", "b", "a");
+
+    SortedSet<String> elementSet = ms.elementSet();
+    assertEquals("d", elementSet.first());
+    assertEquals("a", elementSet.last());
+    assertEquals(comparator, elementSet.comparator());
+  }
+
+  public void testNullAcceptingComparator() throws Exception {
+    Comparator<String> comparator = Ordering.<String>natural().nullsFirst();
+    TreeMultiset<String> ms = TreeMultiset.create(comparator);
+
+    ms.add("b");
+    ms.add(null);
+    ms.add("a");
+    ms.add("b");
+    ms.add(null, 2);
+
+    ASSERT.that(ms).hasContentsInOrder(null, null, null, "a", "b", "b");
+    assertEquals(3, ms.count(null));
+
+    SortedSet<String> elementSet = ms.elementSet();
+    assertEquals(null, elementSet.first());
+    assertEquals("b", elementSet.last());
+    assertEquals(comparator, elementSet.comparator());
+  }
+
+  private static final Comparator<String> DEGENERATE_COMPARATOR =
+      new Comparator<String>() {
+        @Override
+        public int compare(String o1, String o2) {
+          return o1.length() - o2.length();
+        }
+      };
+
+  /**
+   * Test a TreeMultiset with a comparator that can return 0 when comparing
+   * unequal values.
+   */
+  public void testDegenerateComparator() throws Exception {
+    TreeMultiset<String> ms = TreeMultiset.create(DEGENERATE_COMPARATOR);
+
+    ms.add("foo");
+    ms.add("a");
+    ms.add("bar");
+    ms.add("b");
+    ms.add("c");
+
+    assertEquals(2, ms.count("bar"));
+    assertEquals(3, ms.count("b"));
+
+    Multiset<String> ms2 = TreeMultiset.create(DEGENERATE_COMPARATOR);
+
+    ms2.add("cat", 2);
+    ms2.add("x", 3);
+
+    assertEquals(ms, ms2);
+    assertEquals(ms2, ms);
+
+    SortedSet<String> elementSet = ms.elementSet();
+    assertEquals("a", elementSet.first());
+    assertEquals("foo", elementSet.last());
+    assertEquals(DEGENERATE_COMPARATOR, elementSet.comparator());
+  }
+
+  public void testSubMultisetSize() {
+    TreeMultiset<String> ms = TreeMultiset.create();
+    ms.add("a", Integer.MAX_VALUE);
+    ms.add("b", Integer.MAX_VALUE);
+    ms.add("c", 3);
+
+    assertEquals(Integer.MAX_VALUE, ms.count("a"));
+    assertEquals(Integer.MAX_VALUE, ms.count("b"));
+    assertEquals(3, ms.count("c"));
+
+    assertEquals(Integer.MAX_VALUE, ms.headMultiset("c", CLOSED).size());
+    assertEquals(Integer.MAX_VALUE, ms.headMultiset("b", CLOSED).size());
+    assertEquals(Integer.MAX_VALUE, ms.headMultiset("a", CLOSED).size());
+
+    assertEquals(3, ms.tailMultiset("c", CLOSED).size());
+    assertEquals(Integer.MAX_VALUE, ms.tailMultiset("b", CLOSED).size());
+    assertEquals(Integer.MAX_VALUE, ms.tailMultiset("a", CLOSED).size());
+  }
+
+  @Override public void testToStringNull() {
+    c = ms = TreeMultiset.create(Ordering.natural().nullsFirst());
+    super.testToStringNull();
+  }
+}
+
diff --git a/guava-tests/test/com/google/common/collect/UnmodifiableIteratorTest.java b/guava-tests/test/com/google/common/collect/UnmodifiableIteratorTest.java
new file mode 100644
index 0000000..8cc7f32
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/UnmodifiableIteratorTest.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import junit.framework.TestCase;
+
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+
+/**
+ * Tests for {@link UnmodifiableIterator}.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible
+public class UnmodifiableIteratorTest extends TestCase {
+
+  public void testRemove() {
+    final String[] array = {"a", "b", "c"};
+
+    Iterator<String> iterator = new UnmodifiableIterator<String>() {
+      int i;
+      @Override
+      public boolean hasNext() {
+        return i < array.length;
+      }
+      @Override
+      public String next() {
+        if (!hasNext()) {
+          throw new NoSuchElementException();
+        }
+        return array[i++];
+      }
+    };
+
+    assertTrue(iterator.hasNext());
+    assertEquals("a", iterator.next());
+    try {
+      iterator.remove();
+      fail();
+    } catch (UnsupportedOperationException expected) {}
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/UnmodifiableListIteratorTest.java b/guava-tests/test/com/google/common/collect/UnmodifiableListIteratorTest.java
new file mode 100644
index 0000000..879affc
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/UnmodifiableListIteratorTest.java
@@ -0,0 +1,103 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import junit.framework.TestCase;
+
+import java.util.Iterator;
+import java.util.ListIterator;
+import java.util.NoSuchElementException;
+
+/**
+ * Tests for UnmodifiableListIterator.
+ * 
+ * @author Louis Wasserman
+ */
+@GwtCompatible
+public class UnmodifiableListIteratorTest extends TestCase {
+  public void testRemove() {
+    Iterator<String> iterator = create();
+
+    assertTrue(iterator.hasNext());
+    assertEquals("a", iterator.next());
+    try {
+      iterator.remove();
+      fail();
+    } catch (UnsupportedOperationException expected) {}
+  }
+  
+  public void testAdd() {
+    ListIterator<String> iterator = create();
+
+    assertTrue(iterator.hasNext());
+    assertEquals("a", iterator.next());
+    assertEquals("b", iterator.next());
+    assertEquals("b", iterator.previous());
+    try {
+      iterator.add("c");
+      fail();
+    } catch (UnsupportedOperationException expected) {}
+  }
+  
+  public void testSet() {
+    ListIterator<String> iterator = create();
+
+    assertTrue(iterator.hasNext());
+    assertEquals("a", iterator.next());
+    assertEquals("b", iterator.next());
+    assertEquals("b", iterator.previous());
+    try {
+      iterator.set("c");
+      fail();
+    } catch (UnsupportedOperationException expected) {}
+  }
+
+  UnmodifiableListIterator<String> create() {
+    final String[] array = {"a", "b", "c"};
+
+    return new UnmodifiableListIterator<String>() {
+      int i;
+      @Override
+      public boolean hasNext() {
+        return i < array.length;
+      }
+      @Override
+      public String next() {
+        if (!hasNext()) {
+          throw new NoSuchElementException();
+        }
+        return array[i++];
+      }
+      @Override public boolean hasPrevious() {
+        return i > 0;
+      }
+      @Override public int nextIndex() {
+        return i;
+      }
+      @Override public String previous() {
+        if(!hasPrevious())
+          throw new NoSuchElementException();
+        return array[--i];
+      }
+      @Override public int previousIndex() {
+        return i-1;
+      }
+    };
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/UnmodifiableMultimapAsMapImplementsMapTest.java b/guava-tests/test/com/google/common/collect/UnmodifiableMultimapAsMapImplementsMapTest.java
new file mode 100644
index 0000000..5eda226
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/UnmodifiableMultimapAsMapImplementsMapTest.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.collect.testing.MapInterfaceTest;
+
+import java.util.Collection;
+import java.util.Map;
+
+/**
+ * Test {@link Multimap#asMap()} for an unmodifiable multimap with
+ * {@link MapInterfaceTest}.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible
+public class UnmodifiableMultimapAsMapImplementsMapTest
+    extends AbstractMultimapAsMapImplementsMapTest {
+
+  public UnmodifiableMultimapAsMapImplementsMapTest() {
+    super(false, true, false);
+  }
+
+  @Override protected Map<String, Collection<Integer>> makeEmptyMap() {
+    return Multimaps.unmodifiableMultimap(
+        LinkedHashMultimap.<String, Integer>create()).asMap();
+  }
+
+  @Override protected Map<String, Collection<Integer>> makePopulatedMap() {
+    Multimap<String, Integer> delegate = LinkedHashMultimap.create();
+    populate(delegate);
+    return Multimaps.unmodifiableMultimap(delegate).asMap();
+  }
+}
diff --git a/guava-tests/test/com/google/common/collect/WellBehavedMapTest.java b/guava-tests/test/com/google/common/collect/WellBehavedMapTest.java
new file mode 100644
index 0000000..d20e998
--- /dev/null
+++ b/guava-tests/test/com/google/common/collect/WellBehavedMapTest.java
@@ -0,0 +1,107 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import junit.framework.TestCase;
+
+import java.util.EnumMap;
+import java.util.Map;
+import java.util.Set;
+
+@GwtCompatible
+public class WellBehavedMapTest extends TestCase {
+  enum Foo {
+    X, Y, Z, T
+  }
+  
+  public void testEntrySet_contain() {
+    WellBehavedMap<Foo, Integer> map = WellBehavedMap.wrap(
+        new EnumMap<Foo, Integer>(Foo.class));
+    map.putAll(ImmutableMap.of(Foo.X, 1, Foo.Y, 2, Foo.Z, 3));
+
+    // testing with the exact entry
+    assertTrue(map.entrySet().contains(Maps.immutableEntry(Foo.X, 1)));
+    assertTrue(map.entrySet().contains(Maps.immutableEntry(Foo.Y, new Integer(2))));
+    
+    // testing an entry with a contained key, but not the same value
+    assertFalse(map.entrySet().contains(Maps.immutableEntry(Foo.X, 5)));
+
+    // testing a non-existent key
+    assertFalse(map.entrySet().contains(Maps.immutableEntry(Foo.T, 0)));
+  }
+  
+  public void testEntry_setValue() {
+    WellBehavedMap<Foo, Integer> map = WellBehavedMap.wrap(
+        new EnumMap<Foo, Integer>(Foo.class));
+    map.putAll(ImmutableMap.of(Foo.X, 1, Foo.Y, 2, Foo.Z, 3));
+    
+    for (Map.Entry<Foo, Integer> entry : map.entrySet()) {
+      entry.setValue(entry.getValue() + 5);
+    }
+    
+    assertEquals(ImmutableMap.of(Foo.X, 6, Foo.Y, 7, Foo.Z, 8), map);
+  }
+
+  public void testEntriesAreMutableAndConsistent() {
+    WellBehavedMap<Foo, Integer> map = WellBehavedMap.wrap(
+        new EnumMap<Foo, Integer>(Foo.class));
+    map.putAll(ImmutableMap.of(Foo.X, 1));
+    
+    Map.Entry<Foo, Integer> entry1 = Iterables.getOnlyElement(map.entrySet());
+    Map.Entry<Foo, Integer> entry2 = Iterables.getOnlyElement(map.entrySet());
+    
+    // the entries are constructed and forgotten, thus different
+    assertNotSame(entry1, entry2);
+    
+    Set<Map.Entry<Foo, Integer>> entrySet = map.entrySet();
+    
+    assertTrue(entrySet.contains(entry1));
+    assertTrue(entrySet.contains(entry2));
+    
+    // mutating entry
+    entry1.setValue(2);
+    
+    // entry2 is also modified
+    assertEquals(entry1.getValue(), entry2.getValue());
+    
+    // and both are still contained in the set
+    assertTrue(entrySet.contains(entry1));
+    assertTrue(entrySet.contains(entry2));
+  }
+  
+  public void testEntrySet_remove() {
+    WellBehavedMap<Foo, Integer> map = WellBehavedMap.wrap(
+        new EnumMap<Foo, Integer>(Foo.class));
+    map.putAll(ImmutableMap.of(Foo.X, 1, Foo.Y, 2, Foo.Z, 3));
+    Set<Map.Entry<Foo, Integer>> entrySet = map.entrySet();
+    
+    // removing an existing entry, verifying consistency
+    Map.Entry<Foo, Integer> entry = Maps.immutableEntry(Foo.Y, 2); 
+    assertTrue(entrySet.remove(entry));
+    assertFalse(map.containsKey(Foo.Y));
+    assertNull(map.get(Foo.Y));
+    assertFalse(entrySet.contains(entry));
+    
+    // we didn't have that entry, not removed
+    assertFalse(entrySet.remove(Maps.immutableEntry(Foo.T, 4)));
+    
+    // we didn't have that entry, only <Z, 3>, must not remove
+    assertFalse(entrySet.remove(Maps.immutableEntry(Foo.Z, 5)));
+  }
+}
diff --git a/guava-tests/test/com/google/common/eventbus/AsyncEventBusTest.java b/guava-tests/test/com/google/common/eventbus/AsyncEventBusTest.java
new file mode 100644
index 0000000..79862c7
--- /dev/null
+++ b/guava-tests/test/com/google/common/eventbus/AsyncEventBusTest.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.eventbus;
+
+import com.google.common.collect.Lists;
+import java.util.List;
+import java.util.concurrent.Executor;
+import junit.framework.TestCase;
+
+/**
+ * Test case for {@link AsyncEventBus}.
+ *
+ * @author Cliff Biffle
+ */
+public class AsyncEventBusTest extends TestCase {
+  private static final String EVENT = "Hello";
+
+  /** The executor we use to fake asynchronicity. */
+  private FakeExecutor executor;
+  private AsyncEventBus bus;
+
+  @Override protected void setUp() throws Exception {
+    super.setUp();
+    executor = new FakeExecutor();
+    bus = new AsyncEventBus(executor);
+  }
+
+  public void testBasicDistribution() {
+    StringCatcher catcher = new StringCatcher();
+    bus.register(catcher);
+
+    // We post the event, but our Executor will not deliver it until instructed.
+    bus.post(EVENT);
+
+    List<String> events = catcher.getEvents();
+    assertTrue("No events should be delivered synchronously.",
+        events.isEmpty());
+
+    // Now we find the task in our Executor and explicitly activate it.
+    List<Runnable> tasks = executor.getTasks();
+    assertEquals("One event dispatch task should be queued.", 1, tasks.size());
+
+    tasks.get(0).run();
+
+    assertEquals("One event should be delivered.", 1, events.size());
+    assertEquals("Correct string should be delivered.", EVENT, events.get(0));
+  }
+
+  /**
+   * An {@link Executor} wanna-be that simply records the tasks it's given.
+   * Arguably the Worst Executor Ever.
+   *
+   * @author cbiffle
+   *
+   */
+  public static class FakeExecutor implements Executor {
+    List<Runnable> tasks = Lists.newArrayList();
+
+    @Override
+    public void execute(Runnable task) {
+      tasks.add(task);
+    }
+
+    public List<Runnable> getTasks() {
+      return tasks;
+    }
+  }
+
+}
diff --git a/guava-tests/test/com/google/common/eventbus/EventBusTest.java b/guava-tests/test/com/google/common/eventbus/EventBusTest.java
new file mode 100644
index 0000000..2a11784
--- /dev/null
+++ b/guava-tests/test/com/google/common/eventbus/EventBusTest.java
@@ -0,0 +1,254 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.eventbus;
+
+import com.google.common.collect.Lists;
+import java.util.Collection;
+import java.util.List;
+import java.util.Set;
+import junit.framework.TestCase;
+
+/**
+ * Test case for {@link EventBus}.
+ *
+ * @author Cliff Biffle
+ */
+public class EventBusTest extends TestCase {
+  private static final String EVENT = "Hello";
+  private static final String BUS_IDENTIFIER = "test-bus";
+
+  private EventBus bus;
+
+  @Override protected void setUp() throws Exception {
+    super.setUp();
+    bus = new EventBus(BUS_IDENTIFIER);
+  }
+
+  public void testBasicCatcherDistribution() {
+    StringCatcher catcher = new StringCatcher();
+    bus.register(catcher);
+
+    Set<EventHandler> wrappers = bus.getHandlersForEventType(String.class);
+    assertNotNull("Should have at least one method registered.", wrappers);
+    assertEquals("One method should be registered.", 1, wrappers.size());
+
+    bus.post(EVENT);
+
+    List<String> events = catcher.getEvents();
+    assertEquals("Only one event should be delivered.", 1, events.size());
+    assertEquals("Correct string should be delivered.", EVENT, events.get(0));
+  }
+
+  /**
+   * Tests that events are distributed to any subscribers to their type or any
+   * supertype, including interfaces and superclasses.
+   *
+   * Also checks delivery ordering in such cases.
+   */
+  public void testPolymorphicDistribution() {
+    // Three catchers for related types String, Object, and Comparable<?>.
+    // String isa Object
+    // String isa Comparable<?>
+    // Comparable<?> isa Object
+    StringCatcher stringCatcher = new StringCatcher();
+
+    final List<Object> objectEvents = Lists.newArrayList();
+    Object objCatcher = new Object() {
+      @SuppressWarnings("unused")
+      @Subscribe public void eat(Object food) {
+        objectEvents.add(food);
+      }
+    };
+
+    final List<Comparable<?>> compEvents = Lists.newArrayList();
+    Object compCatcher = new Object() {
+      @SuppressWarnings("unused")
+      @Subscribe public void eat(Comparable<?> food) {
+        compEvents.add(food);
+      }
+    };
+    bus.register(stringCatcher);
+    bus.register(objCatcher);
+    bus.register(compCatcher);
+
+    // Two additional event types: Object and Comparable<?> (played by Integer)
+    final Object OBJ_EVENT = new Object();
+    final Object COMP_EVENT = new Integer(6);
+
+    bus.post(EVENT);
+    bus.post(OBJ_EVENT);
+    bus.post(COMP_EVENT);
+
+    // Check the StringCatcher...
+    List<String> stringEvents = stringCatcher.getEvents();
+    assertEquals("Only one String should be delivered.",
+        1, stringEvents.size());
+    assertEquals("Correct string should be delivered.",
+        EVENT, stringEvents.get(0));
+
+    // Check the Catcher<Object>...
+    assertEquals("Three Objects should be delivered.",
+        3, objectEvents.size());
+    assertEquals("String fixture must be first object delivered.",
+        EVENT, objectEvents.get(0));
+    assertEquals("Object fixture must be second object delivered.",
+        OBJ_EVENT, objectEvents.get(1));
+    assertEquals("Comparable fixture must be thirdobject delivered.",
+        COMP_EVENT, objectEvents.get(2));
+
+    // Check the Catcher<Comparable<?>>...
+    assertEquals("Two Comparable<?>s should be delivered.",
+        2, compEvents.size());
+    assertEquals("String fixture must be first comparable delivered.",
+        EVENT, compEvents.get(0));
+    assertEquals("Comparable fixture must be second comparable delivered.",
+        COMP_EVENT, compEvents.get(1));
+  }
+
+  public void testDeadEventForwarding() {
+    GhostCatcher catcher = new GhostCatcher();
+    bus.register(catcher);
+
+    // A String -- an event for which noone has registered.
+    bus.post(EVENT);
+
+    List<DeadEvent> events = catcher.getEvents();
+    assertEquals("One dead event should be delivered.", 1, events.size());
+    assertEquals("The dead event should wrap the original event.",
+        EVENT, events.get(0).getEvent());
+  }
+
+  public void testDeadEventPosting() {
+    GhostCatcher catcher = new GhostCatcher();
+    bus.register(catcher);
+
+    bus.post(new DeadEvent(this, EVENT));
+
+    List<DeadEvent> events = catcher.getEvents();
+    assertEquals("The explicit DeadEvent should be delivered.",
+        1, events.size());
+    assertEquals("The dead event must not be re-wrapped.",
+        EVENT, events.get(0).getEvent());
+  }
+
+  public void testFlattenHierarchy() {
+    HierarchyFixture fixture = new HierarchyFixture();
+    Set<Class<?>> hierarchy = bus.flattenHierarchy(fixture.getClass());
+
+    assertEquals(5, hierarchy.size());
+    assertContains(Object.class, hierarchy);
+    assertContains(HierarchyFixtureInterface.class, hierarchy);
+    assertContains(HierarchyFixtureSubinterface.class, hierarchy);
+    assertContains(HierarchyFixtureParent.class, hierarchy);
+    assertContains(HierarchyFixture.class, hierarchy);
+  }
+
+  public void testMissingSubscribe() {
+    bus.register(new Object());
+  }
+
+  public void testUnregister() {
+    StringCatcher catcher1 = new StringCatcher();
+    StringCatcher catcher2 = new StringCatcher();
+    try {
+      bus.unregister(catcher1);
+      fail("Attempting to unregister an unregistered object succeeded");
+    } catch (IllegalArgumentException expected) {
+      // OK.
+    }
+
+    bus.register(catcher1);
+    bus.post(EVENT);
+    bus.register(catcher2);
+    bus.post(EVENT);
+
+    List<String> expectedEvents = Lists.newArrayList();
+    expectedEvents.add(EVENT);
+    expectedEvents.add(EVENT);
+
+    assertEquals("Two correct events should be delivered.",
+                 expectedEvents, catcher1.getEvents());
+
+    assertEquals("One correct event should be delivered.",
+                 Lists.newArrayList(EVENT), catcher2.getEvents());
+
+    bus.unregister(catcher1);
+    bus.post(EVENT);
+
+    assertEquals("Shouldn't catch any more events when unregistered.",
+                 expectedEvents, catcher1.getEvents());
+    assertEquals("Two correct events should be delivered.",
+                 expectedEvents, catcher2.getEvents());
+
+    try {
+      bus.unregister(catcher1);
+      fail("Attempting to unregister an unregistered object succeeded");
+    } catch (IllegalArgumentException expected) {
+      // OK.
+    }
+
+    bus.unregister(catcher2);
+    bus.post(EVENT);
+    assertEquals("Shouldn't catch any more events when unregistered.",
+                 expectedEvents, catcher1.getEvents());
+    assertEquals("Shouldn't catch any more events when unregistered.",
+                 expectedEvents, catcher2.getEvents());
+  }
+
+  private <T> void assertContains(T element, Collection<T> collection) {
+    assertTrue("Collection must contain " + element,
+        collection.contains(element));
+  }
+
+  /**
+   * A collector for DeadEvents.
+   *
+   * @author cbiffle
+   *
+   */
+  public static class GhostCatcher {
+    private List<DeadEvent> events = Lists.newArrayList();
+
+    @Subscribe
+    public void ohNoesIHaveDied(DeadEvent event) {
+      events.add(event);
+    }
+
+    public List<DeadEvent> getEvents() {
+      return events;
+    }
+  }
+
+  public interface HierarchyFixtureInterface {
+    // Exists only for hierarchy mapping; no members.
+  }
+
+  public interface HierarchyFixtureSubinterface
+      extends HierarchyFixtureInterface {
+    // Exists only for hierarchy mapping; no members.
+  }
+
+  public static class HierarchyFixtureParent
+      implements HierarchyFixtureSubinterface {
+    // Exists only for hierarchy mapping; no members.
+  }
+
+  public static class HierarchyFixture extends HierarchyFixtureParent {
+    // Exists only for hierarchy mapping; no members.
+  }
+
+}
diff --git a/guava-tests/test/com/google/common/eventbus/EventHandlerTest.java b/guava-tests/test/com/google/common/eventbus/EventHandlerTest.java
new file mode 100644
index 0000000..00a189a
--- /dev/null
+++ b/guava-tests/test/com/google/common/eventbus/EventHandlerTest.java
@@ -0,0 +1,208 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.eventbus;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import junit.framework.TestCase;
+
+/**
+ * Test case for {@link EventHandler}.
+ *
+ * @author Cliff Biffle
+ */
+public class EventHandlerTest extends TestCase {
+
+  private static final Object FIXTURE_ARGUMENT = new Object();
+
+  private boolean methodCalled;
+  private Object methodArgument;
+
+  @Override protected void setUp() throws Exception {
+    super.setUp();
+
+    methodCalled = false;
+    methodArgument = null;
+  }
+
+  /**
+   * Checks that a no-frills, no-issues method call is properly executed.
+   *
+   * @throws Exception  if the aforementioned proper execution is not to be had.
+   */
+  public void testBasicMethodCall() throws Exception {
+    Method method = getRecordingMethod();
+
+    EventHandler handler = new EventHandler(this, method);
+
+    handler.handleEvent(FIXTURE_ARGUMENT);
+
+    assertTrue("Handler must call provided method.", methodCalled);
+    assertTrue("Handler argument must be *exactly* the provided object.",
+        methodArgument == FIXTURE_ARGUMENT);
+  }
+
+  /**
+   * Checks that EventHandler's constructor disallows null methods.
+   */
+  public void testRejectionOfNullMethods() {
+    try {
+      new EventHandler(this, null);
+      fail("EventHandler must immediately reject null methods.");
+    } catch (NullPointerException e) {
+      // Hooray!
+    }
+  }
+
+  /**
+   * Checks that EventHandler's constructor disallows null targets.
+   */
+  public void testRejectionOfNullTargets() {
+    Method method = getRecordingMethod();
+    try {
+      new EventHandler(null, method);
+      fail("EventHandler must immediately reject null targets.");
+    } catch (NullPointerException e) {
+      // Huzzah!
+    }
+  }
+
+  public void testExceptionWrapping() {
+    Method method = getExceptionThrowingMethod();
+    EventHandler handler = new EventHandler(this, method);
+
+    try {
+      handler.handleEvent(new Object());
+      fail("Handlers whose methods throw must throw InvocationTargetException");
+    } catch (InvocationTargetException e) {
+      assertTrue("Expected exception must be wrapped.",
+          e.getCause() instanceof IntentionalException);
+    }
+  }
+
+  public void testErrorPassthrough() throws InvocationTargetException {
+    Method method = getErrorThrowingMethod();
+    EventHandler handler = new EventHandler(this, method);
+
+    try {
+      handler.handleEvent(new Object());
+      fail("Handlers whose methods throw Errors must rethrow them");
+    } catch (JudgmentError e) {
+      // Expected.
+    }
+  }
+
+  /**
+   * Gets a reference to {@link #recordingMethod(Object)}.
+   *
+   * @return a Method wrapping {@link #recordingMethod(Object)}.
+   * @throws IllegalStateException if executed in a context where reflection is
+   *         unavailable.
+   * @throws AssertionError if something odd has happened to
+   *         {@link #recordingMethod(Object)}.
+   */
+  private Method getRecordingMethod() {
+    Method method;
+    try {
+      method = getClass().getMethod("recordingMethod", Object.class);
+    } catch (SecurityException e) {
+      throw new IllegalStateException("This test needs access to reflection.");
+    } catch (NoSuchMethodException e) {
+      throw new AssertionError(
+          "Someone changed EventHandlerTest#recordingMethod's visibility, " +
+          "signature, or removed it entirely.  (Must be public.)");
+    }
+    return method;
+  }
+
+  /**
+   * Gets a reference to {@link #exceptionThrowingMethod(Object)}.
+   *
+   * @return a Method wrapping {@link #exceptionThrowingMethod(Object)}.
+   * @throws IllegalStateException if executed in a context where reflection is
+   *         unavailable.
+   * @throws AssertionError if something odd has happened to
+   *         {@link #exceptionThrowingMethod(Object)}.
+   */
+  private Method getExceptionThrowingMethod() {
+    Method method;
+    try {
+      method = getClass().getMethod("exceptionThrowingMethod", Object.class);
+    } catch (SecurityException e) {
+      throw new IllegalStateException("This test needs access to reflection.");
+    } catch (NoSuchMethodException e) {
+      throw new AssertionError(
+          "Someone changed EventHandlerTest#exceptionThrowingMethod's " +
+          "visibility, signature, or removed it entirely.  (Must be public.)");
+    }
+    return method;
+  }
+
+  /**
+   * Gets a reference to {@link #errorThrowingMethod(Object)}.
+   *
+   * @return a Method wrapping {@link #errorThrowingMethod(Object)}.
+   * @throws IllegalStateException if executed in a context where reflection is
+   *         unavailable.
+   * @throws AssertionError if something odd has happened to
+   *         {@link #errorThrowingMethod(Object)}.
+   */
+  private Method getErrorThrowingMethod() {
+    Method method;
+    try {
+      method = getClass().getMethod("errorThrowingMethod", Object.class);
+    } catch (SecurityException e) {
+      throw new IllegalStateException("This test needs access to reflection.");
+    } catch (NoSuchMethodException e) {
+      throw new AssertionError(
+          "Someone changed EventHandlerTest#errorThrowingMethod's " +
+          "visibility, signature, or removed it entirely.  (Must be public.)");
+    }
+    return method;
+  }
+
+  /**
+   * Records the provided object in {@link #methodArgument} and sets
+   * {@link #methodCalled}.  This method is called reflectively by EventHandler
+   * during tests, and must remain public.
+   *
+   * @param arg  argument to record.
+   */
+  public void recordingMethod(Object arg) {
+    if (methodCalled == true) {
+      throw new IllegalStateException("Method called more than once.");
+    }
+    methodCalled = true;
+    methodArgument = arg;
+  }
+
+  public void exceptionThrowingMethod(Object arg) throws Exception {
+    throw new IntentionalException();
+  }
+  /** Local exception subclass to check variety of exception thrown. */
+  class IntentionalException extends Exception {
+    private static final long serialVersionUID = -2500191180248181379L;
+  }
+
+  public void errorThrowingMethod(Object arg) {
+    throw new JudgmentError();
+  }
+  /** Local Error subclass to check variety of error thrown. */
+  class JudgmentError extends Error {
+    private static final long serialVersionUID = 634248373797713373L;
+  }
+}
diff --git a/guava-tests/test/com/google/common/eventbus/ReentrantEventsTest.java b/guava-tests/test/com/google/common/eventbus/ReentrantEventsTest.java
new file mode 100644
index 0000000..3f23050
--- /dev/null
+++ b/guava-tests/test/com/google/common/eventbus/ReentrantEventsTest.java
@@ -0,0 +1,93 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.eventbus;
+
+import com.google.common.collect.Lists;
+import java.util.List;
+import junit.framework.TestCase;
+
+/**
+ * Validate that {@link EventBus} behaves carefully when listeners publish
+ * their own events.
+ *
+ * @author Jesse Wilson
+ */
+public class ReentrantEventsTest extends TestCase {
+
+  static final String FIRST = "one";
+  static final Double SECOND = 2.0d;
+
+  final EventBus bus = new EventBus();
+
+  public void testNoReentrantEvents() {
+    ReentrantEventsHater hater = new ReentrantEventsHater();
+    bus.register(hater);
+
+    bus.post(FIRST);
+
+    assertEquals("ReentrantEventHater expected 2 events",
+        Lists.<Object>newArrayList(FIRST, SECOND), hater.eventsReceived);
+  }
+
+  public class ReentrantEventsHater {
+    boolean ready = true;
+    List<Object> eventsReceived = Lists.newArrayList();
+
+    @Subscribe
+    public void listenForStrings(String event) {
+      eventsReceived.add(event);
+      ready = false;
+      try {
+        bus.post(SECOND);
+      } finally {
+        ready = true;
+      }
+    }
+
+    @Subscribe
+    public void listenForDoubles(Double event) {
+      assertTrue("I received an event when I wasn't ready!", ready);
+      eventsReceived.add(event);
+    }
+  }
+
+  public void testEventOrderingIsPredictable() {
+    EventProcessor processor = new EventProcessor();
+    bus.register(processor);
+
+    EventRecorder recorder = new EventRecorder();
+    bus.register(recorder);
+
+    bus.post(FIRST);
+
+    assertEquals("EventRecorder expected events in order",
+        Lists.<Object>newArrayList(FIRST, SECOND), recorder.eventsReceived);
+  }
+
+  public class EventProcessor {
+    @Subscribe public void listenForStrings(String event) {
+      bus.post(SECOND);
+    }
+  }
+
+  public class EventRecorder {
+    List<Object> eventsReceived = Lists.newArrayList();
+    @Subscribe public void listenForEverything(Object event) {
+      eventsReceived.add(event);
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/eventbus/StringCatcher.java b/guava-tests/test/com/google/common/eventbus/StringCatcher.java
new file mode 100644
index 0000000..fa2e446
--- /dev/null
+++ b/guava-tests/test/com/google/common/eventbus/StringCatcher.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.eventbus;
+
+import com.google.common.collect.Lists;
+import java.util.List;
+import junit.framework.Assert;
+
+/**
+ * A simple EventHandler mock that records Strings.
+ *
+ * For testing fun, also includes a landmine method that EventBus tests are
+ * required <em>not</em> to call ({@link #methodWithoutAnnotation(String)}).
+ *
+ * @author Cliff Biffle
+ */
+public class StringCatcher {
+  private List<String> events = Lists.newArrayList();
+
+  @Subscribe
+  public void hereHaveAString(String string) {
+    events.add(string);
+  }
+
+  public void methodWithoutAnnotation(String string) {
+    Assert.fail("Event bus must not call methods without @Subscribe!");
+  }
+
+  public List<String> getEvents() {
+    return events;
+  }
+}
diff --git a/guava-tests/test/com/google/common/hash/AbstractNonStreamingHashFunctionTest.java b/guava-tests/test/com/google/common/hash/AbstractNonStreamingHashFunctionTest.java
new file mode 100644
index 0000000..b4edf42
--- /dev/null
+++ b/guava-tests/test/com/google/common/hash/AbstractNonStreamingHashFunctionTest.java
@@ -0,0 +1,107 @@
+// Copyright 2011 Google Inc. All Rights Reserved.
+
+package com.google.common.hash;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.hash.HashTestUtils.RandomHasherAction;
+
+import junit.framework.TestCase;
+
+import java.io.ByteArrayOutputStream;
+import java.nio.ByteBuffer;
+import java.nio.charset.Charset;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Random;
+
+/**
+ * Tests for AbstractNonStreamingHashFunction.
+ */
+public class AbstractNonStreamingHashFunctionTest extends TestCase {
+  /**
+   * Constructs two trivial HashFunctions (output := input), one streaming and one non-streaming,
+   * and checks that their results are identical, no matter which newHasher version we used.
+   */
+  public void test() {
+    List<Hasher> hashers = ImmutableList.of( 
+        new StreamingVersion().newHasher(),
+        new StreamingVersion().newHasher(52),
+        new NonStreamingVersion().newHasher(),
+        new NonStreamingVersion().newHasher(123));
+    Random random = new Random(0);
+    for (int i = 0; i < 200; i++) {
+      RandomHasherAction.pickAtRandom(random).performAction(random, hashers);
+    }
+    HashCode[] codes = new HashCode[hashers.size()];
+    for (int i = 0; i < hashers.size(); i++) {
+      codes[i] = hashers.get(i).hash();
+    }
+    for (int i = 1; i < codes.length; i++) {
+      assertEquals(codes[i - 1], codes[i]);
+    }
+  }
+  
+  static class StreamingVersion extends AbstractStreamingHashFunction {
+    @Override
+    public int bits() {
+      return 32;
+    }
+
+    @Override
+    public Hasher newHasher() {
+      return new AbstractStreamingHasher(4, 4) {
+        final ByteArrayOutputStream out = new ByteArrayOutputStream();
+        @Override
+        HashCode makeHash() {
+          return HashCodes.fromBytes(out.toByteArray());
+        }
+
+        @Override
+        protected void process(ByteBuffer bb) {
+          while (bb.hasRemaining()) {
+            out.write(bb.get());
+          }
+        }
+
+        @Override
+        protected void processRemaining(ByteBuffer bb) {
+          while (bb.hasRemaining()) {
+            out.write(bb.get());
+          }
+        }
+      };
+    }
+  }
+  
+  static class NonStreamingVersion extends AbstractNonStreamingHashFunction {
+    @Override
+    public int bits() {
+      return 32;
+    }
+
+    @Override
+    public HashCode hashBytes(byte[] input) {
+      return HashCodes.fromBytes(input);
+    }
+
+    @Override
+    public HashCode hashBytes(byte[] input, int off, int len) {
+      return HashCodes.fromBytes(Arrays.copyOfRange(input, off, off + len));
+    }
+    
+    @Override
+    public HashCode hashString(CharSequence input) {
+      throw new UnsupportedOperationException();
+    }
+    
+    @Override
+    public HashCode hashString(CharSequence input, Charset charset) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public HashCode hashLong(long input) {
+      throw new UnsupportedOperationException();
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/hash/AbstractStreamingHasherTest.java b/guava-tests/test/com/google/common/hash/AbstractStreamingHasherTest.java
new file mode 100644
index 0000000..8f1cbb4
--- /dev/null
+++ b/guava-tests/test/com/google/common/hash/AbstractStreamingHasherTest.java
@@ -0,0 +1,249 @@
+// Copyright 2011 Google Inc. All Rights Reserved.
+
+package com.google.common.hash;
+
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
+import com.google.common.hash.AbstractStreamingHashFunction.AbstractStreamingHasher;
+import com.google.common.hash.HashTestUtils.RandomHasherAction;
+
+import junit.framework.TestCase;
+
+import java.io.ByteArrayOutputStream;
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.nio.charset.Charset;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Random;
+
+/**
+ * Tests for AbstractHashSink.
+ * 
+ * @author andreou@google.com (Dimitris Andreou)
+ */
+public class AbstractStreamingHasherTest extends TestCase {
+  /** Test we get the HashCode that is created by the sink. Later we ignore the result */
+  public void testSanity() { 
+    Sink sink = new Sink(4);
+    assertEquals(0xDeadBeef, sink.makeHash().asInt());
+  }
+  
+  public void testBytes() {
+    Sink sink = new Sink(4); // byte order insignificant here
+    byte[] expected = { 1, 2, 3, 4, 5, 6, 7, 8 };
+    sink.putByte((byte) 1);
+    sink.putBytes(new byte[] { 2, 3, 4, 5, 6 });
+    sink.putByte((byte) 7);
+    sink.putBytes(new byte[] { });
+    sink.putBytes(new byte[] { 8 });
+    sink.hash();
+    sink.assertInvariants(8);
+    sink.assertBytes(expected);
+  }
+  
+  public void testShort() {
+    Sink sink = new Sink(4);
+    sink.putShort((short) 0x0201);
+    sink.hash();
+    sink.assertInvariants(2);
+    sink.assertBytes(new byte[] { 1, 2, 0, 0 }); // padded with zeros
+  }
+  
+  public void testInt() {
+    Sink sink = new Sink(4);
+    sink.putInt(0x04030201);
+    sink.hash();
+    sink.assertInvariants(4);
+    sink.assertBytes(new byte[] { 1, 2, 3, 4 });
+  }
+  
+  public void testLong() {
+    Sink sink = new Sink(8);
+    sink.putLong(0x0807060504030201L);
+    sink.hash();
+    sink.assertInvariants(8);
+    sink.assertBytes(new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 });
+  }
+  
+  public void testChar() {
+    Sink sink = new Sink(4);
+    sink.putChar((char) 0x0201);
+    sink.hash();
+    sink.assertInvariants(2);
+    sink.assertBytes(new byte[] { 1, 2, 0, 0  }); // padded with zeros
+  }
+  
+  public void testFloat() {
+    Sink sink = new Sink(4);
+    sink.putFloat(Float.intBitsToFloat(0x04030201));
+    sink.hash();
+    sink.assertInvariants(4);
+    sink.assertBytes(new byte[] { 1, 2, 3, 4 });
+  }
+  
+  public void testDouble() {
+    Sink sink = new Sink(8);
+    sink.putDouble(Double.longBitsToDouble(0x0807060504030201L));
+    sink.hash();
+    sink.assertInvariants(8);
+    sink.assertBytes(new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 });
+  }
+  
+  public void testCorrectExceptions() {
+    Sink sink = new Sink(4);
+    try {
+      sink.putBytes(new byte[8], -1, 4);
+      fail();
+    } catch (IndexOutOfBoundsException ok) {}
+    try {
+      sink.putBytes(new byte[8], 0, 16);
+      fail();
+    } catch (IndexOutOfBoundsException ok) {}
+    try {
+      sink.putBytes(new byte[8], 0, -1);
+      fail();
+    } catch (IndexOutOfBoundsException ok) {}
+  }
+  
+  /**
+   * This test creates a long random sequence of inputs, then a lot of differently configured
+   * sinks process it; all should produce the same answer, the only difference should be the
+   * number of process()/processRemaining() invocations, due to alignment.  
+   */
+  public void testExhaustive() throws Exception {
+    Random random = new Random(0); // will iteratively make more debuggable, each time it breaks
+    for (int totalInsertions = 0; totalInsertions < 200; totalInsertions++) {
+      
+      List<Sink> sinks = Lists.newArrayList();
+      for (int chunkSize = 4; chunkSize <= 32; chunkSize++) {
+        for (int bufferSize = chunkSize; bufferSize <= chunkSize * 4; bufferSize += chunkSize) {
+          // yes, that's a lot of sinks!
+          sinks.add(new Sink(chunkSize, bufferSize));
+          // For convenience, testing only with big endianness, to match DataOutputStream.
+          // I regard highly unlikely that both the little endianness tests above and this one
+          // passes, and there is still a little endianness bug lurking around. 
+        }
+      }
+      
+      Control control = new Control();
+      Hasher controlSink = control.newHasher(1024);
+      
+      Iterable<Hasher> sinksAndControl = Iterables.concat(
+          sinks, Collections.singleton(controlSink));
+      for (int insertion = 0; insertion < totalInsertions; insertion++) {
+        RandomHasherAction.pickAtRandom(random).performAction(random, sinksAndControl); 
+      }
+      for (Sink sink : sinks) {
+        sink.hash();
+      }
+      
+      byte[] expected = controlSink.hash().asBytes();
+      for (Sink sink : sinks) {
+        sink.assertInvariants(expected.length);
+        sink.assertBytes(expected);
+      }
+    }
+  }
+  
+  private static class Sink extends AbstractStreamingHasher {
+    final int chunkSize;
+    final int bufferSize;
+    final ByteArrayOutputStream out = new ByteArrayOutputStream();
+    
+    int processCalled = 0;
+    boolean remainingCalled = false;
+    
+    Sink(int chunkSize, int bufferSize) {
+      super(chunkSize, bufferSize);
+      this.chunkSize = chunkSize;
+      this.bufferSize = bufferSize;
+    }
+
+    Sink(int chunkSize) {
+      super(chunkSize);
+      this.chunkSize = chunkSize;
+      this.bufferSize = chunkSize;
+    }
+
+    @Override HashCode makeHash() {
+      return HashCodes.fromInt(0xDeadBeef);
+    }
+
+    @Override protected void process(ByteBuffer bb) {
+      processCalled++;
+      assertEquals(ByteOrder.LITTLE_ENDIAN, bb.order());
+      assertTrue(bb.remaining() >= chunkSize);
+      for (int i = 0; i < chunkSize; i++) {
+        out.write(bb.get());
+      }
+    }
+    
+    @Override protected void processRemaining(ByteBuffer bb) {
+      assertFalse(remainingCalled);
+      remainingCalled = true;
+      assertEquals(ByteOrder.LITTLE_ENDIAN, bb.order());
+      assertTrue(bb.remaining() > 0);
+      assertTrue(bb.remaining() < bufferSize);
+      int before = processCalled;
+      super.processRemaining(bb);
+      int after = processCalled;
+      assertEquals(before + 1, after); // default implementation pads and calls process()
+      processCalled--; // don't count the tail invocation (makes tests a bit more understandable)
+    }
+    
+    // ensures that the number of invocations looks sane
+    void assertInvariants(int expectedBytes) {
+      // we should have seen as many bytes as the next multiple of chunk after expectedBytes - 1 
+      assertEquals(out.toByteArray().length, ceilToMultiple(expectedBytes, chunkSize));
+      assertEquals(expectedBytes / chunkSize, processCalled);
+      assertEquals(expectedBytes % chunkSize != 0, remainingCalled);
+    }
+    
+    // returns the minimum x such as x >= a && (x % b) == 0
+    private static int ceilToMultiple(int a, int b) {
+      int remainder = a % b;
+      return remainder == 0 ? a : a + b - remainder;
+    }
+    
+    void assertBytes(byte[] expected) {
+      byte[] got = out.toByteArray();
+      for (int i = 0; i < expected.length; i++) {
+        assertEquals(expected[i], got[i]);
+      }
+    }
+  }
+  
+  private static class Control extends AbstractNonStreamingHashFunction {
+    @Override
+    public HashCode hashBytes(byte[] input) {
+      return HashCodes.fromBytes(input);
+    }
+    
+    @Override
+    public HashCode hashBytes(byte[] input, int off, int len) {
+      return hashBytes(Arrays.copyOfRange(input, off, off + len));
+    }
+
+    @Override
+    public int bits() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public HashCode hashString(CharSequence input) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public HashCode hashString(CharSequence input, Charset charset) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public HashCode hashLong(long input) {
+      throw new UnsupportedOperationException();
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/hash/BloomFilterTest.java b/guava-tests/test/com/google/common/hash/BloomFilterTest.java
new file mode 100644
index 0000000..26b7641
--- /dev/null
+++ b/guava-tests/test/com/google/common/hash/BloomFilterTest.java
@@ -0,0 +1,81 @@
+// Copyright 2011 Google Inc. All Rights Reserved.
+
+package com.google.common.hash;
+
+import com.google.common.primitives.Ints;
+import com.google.common.testing.SerializableTester;
+
+import junit.framework.TestCase;
+
+import java.util.Random;
+
+/**
+ * Tests for SimpleGenericBloomFilter and derived BloomFilter views.
+ * 
+ * @author andreou@google.com (Dimitris Andreou)
+ */
+public class BloomFilterTest extends TestCase {
+  /**
+   * Sanity checking with many combinations of false positive rates and expected insertions
+   */
+  public void testBasic() {
+    for (double fpr = 0.0000001; fpr < 0.1; fpr *= 10) {
+      for (int expectedInsertions = 1; expectedInsertions <= 10000; expectedInsertions *= 10) {
+        checkSanity(BloomFilter.create(HashTestUtils.BAD_FUNNEL, expectedInsertions, fpr));
+      }
+    }
+  }
+  
+  /**
+   * Tests that we never get an optimal hashes number of zero. 
+   */
+  public void testOptimalHashes() {
+    for (int n = 1; n < 1000; n++) {
+      for (int m = 0; m < 1000; m++) {
+        assertTrue(BloomFilter.optimalNumOfHashFunctions(n, m) > 0);
+      }
+    }
+  }
+  
+  /**
+   * Tests that we always get a non-negative optimal size.  
+   */
+  public void testOptimalSize() {
+    for (int n = 1; n < 1000; n++) {
+      for (double fpp = Double.MIN_VALUE; fpp < 1.0; fpp += 0.001) {
+        assertTrue(BloomFilter.optimalNumOfBits(n, fpp) >= 0);
+      }
+    }
+    
+    // some random values
+    Random random = new Random(0); 
+    for (int repeats = 0; repeats < 10000; repeats++) {
+      assertTrue(BloomFilter.optimalNumOfBits(random.nextInt(1 << 16), random.nextDouble()) >= 0);
+    }
+    
+    // and some crazy values
+    assertEquals(Integer.MAX_VALUE, BloomFilter.optimalNumOfBits(
+        Integer.MAX_VALUE, Double.MIN_VALUE));
+  }
+  
+  private void checkSanity(BloomFilter<Object> bf) {
+    assertFalse(bf.mightContain(new Object()));
+    for (int i = 0; i < 100; i++) {
+      Object o = new Object();
+      bf.put(o);
+      assertTrue(bf.mightContain(o));
+    }
+  }
+  
+  public void testSerialization() {
+    BloomFilter<byte[]> bf = BloomFilter.create(Funnels.byteArrayFunnel(), 100);
+    for (int i = 0; i < 10; i++) {
+      bf.put(Ints.toByteArray(i));
+    }
+    
+    bf = SerializableTester.reserialize(bf);
+    for (int i = 0; i < 10; i++) {
+      assertTrue(bf.mightContain(Ints.toByteArray(i)));
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/hash/FunnelsTest.java b/guava-tests/test/com/google/common/hash/FunnelsTest.java
new file mode 100644
index 0000000..698549a
--- /dev/null
+++ b/guava-tests/test/com/google/common/hash/FunnelsTest.java
@@ -0,0 +1,66 @@
+// Copyright 2011 Google Inc. All Rights Reserved.
+
+package com.google.common.hash;
+
+import com.google.common.hash.AbstractStreamingHashFunction.AbstractStreamingHasher;
+
+import junit.framework.TestCase;
+
+import org.easymock.EasyMock;
+
+import java.nio.ByteBuffer;
+
+/**
+ * Tests for HashExtractors.
+ * 
+ * @author andreou@google.com (Dimitris Andreou)
+ */
+public class FunnelsTest extends TestCase {
+  public void testForBytes() {
+    Sink byteSink = EasyMock.createMock(Sink.class);
+
+    EasyMock.expect(byteSink.putBytes(EasyMock.aryEq(new byte[] { 4, 3, 2, 1})))
+        .andReturn(byteSink).once();
+    EasyMock.replay(byteSink);
+
+    Funnels.byteArrayFunnel().funnel(new byte[]{4, 3, 2, 1}, byteSink);
+
+    EasyMock.verify(byteSink);
+  }
+
+  public void testForBytes_null() {
+    assertNullsThrowException(Funnels.byteArrayFunnel());
+  }
+
+  public void testForStrings() {
+
+    Sink byteSink = EasyMock.createMock(Sink.class);
+    
+    EasyMock.expect(byteSink.putString("test")).andReturn(byteSink).once();
+    EasyMock.replay(byteSink);
+    
+    Funnels.stringFunnel().funnel("test", byteSink);
+    
+    EasyMock.verify(byteSink);
+  }
+  
+  public void testForStrings_null() {
+    assertNullsThrowException(Funnels.stringFunnel());
+  }
+  
+  private static void assertNullsThrowException(Funnel<?> funnel) {
+    Sink byteSink = new AbstractStreamingHasher(4, 4) {
+      @Override HashCode makeHash() { throw new UnsupportedOperationException(); }
+
+      @Override protected void process(ByteBuffer bb) {
+        while (bb.hasRemaining()) {
+          bb.get();
+        }
+      }
+    };
+    try {
+      funnel.funnel(null, byteSink);
+      fail();
+    } catch (NullPointerException ok) {}
+  }
+}
diff --git a/guava-tests/test/com/google/common/hash/HashCodesTest.java b/guava-tests/test/com/google/common/hash/HashCodesTest.java
new file mode 100644
index 0000000..2b483ac
--- /dev/null
+++ b/guava-tests/test/com/google/common/hash/HashCodesTest.java
@@ -0,0 +1,124 @@
+// Copyright 2011 Google Inc. All Rights Reserved.
+
+package com.google.common.hash;
+
+import com.google.common.collect.ImmutableList;
+
+import junit.framework.TestCase;
+
+import java.util.Arrays;
+
+/**
+ * Tests for HashCodes, especially making sure that their endianness promises (big-endian)
+ * are upheld. 
+ *  
+ * @author andreou@google.com (Dimitris Andreou)
+ */
+public class HashCodesTest extends TestCase {
+  // note: asInt(), asLong() are in little endian
+  private static final ImmutableList<ExpectedHashCode> expectedHashCodes = ImmutableList.of(
+      new ExpectedHashCode(new byte[] { 
+        (byte) 0xef, (byte) 0xcd, (byte) 0xab, (byte) 0x89,
+        (byte) 0x67, (byte) 0x45, (byte) 0x23, (byte) 0x01},
+        0x89abcdef, 0x0123456789abcdefL, "efcdab8967452301"),
+        
+      new ExpectedHashCode(new byte[] { 
+        (byte) 0xef, (byte) 0xcd, (byte) 0xab, (byte) 0x89,
+        (byte) 0x67, (byte) 0x45, (byte) 0x23, (byte) 0x01, // up to here, same bytes as above
+        (byte) 0x01, (byte) 0x02, (byte) 0x03, (byte) 0x04,
+        (byte) 0x05, (byte) 0x06, (byte) 0x07, (byte) 0x08},
+        0x89abcdef, 0x0123456789abcdefL, // asInt/asLong as above, due to equal eight first bytes
+        "efcdab89674523010102030405060708"), 
+        
+      new ExpectedHashCode(new byte[] { (byte) 0xdf, (byte) 0x9b, (byte) 0x57, (byte) 0x13 },
+        0x13579bdf, null, "df9b5713"),
+        
+      new ExpectedHashCode(new byte[] { 
+          (byte) 0xcd, (byte) 0xab, (byte) 0x00, (byte) 0x00},
+          0x0000abcd, null, "cdab0000"),
+      
+      new ExpectedHashCode(new byte[] { 
+          (byte) 0xef, (byte) 0xcd, (byte) 0xab, (byte) 0x00,
+          (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00},
+          0x00abcdef, 0x0000000000abcdefL, "efcdab0000000000")
+    );
+  
+  // expectedHashCodes must contain at least one hash code with 4 bytes
+  public void testFromInt() {
+    for (ExpectedHashCode expected : expectedHashCodes) {
+      if (expected.bytes.length == 4) { 
+        HashCode fromInt = HashCodes.fromInt(expected.asInt);
+        assertExpectedHashCode(expected, fromInt);
+      }
+    }
+  }
+  
+  // expectedHashCodes must contain at least one hash code with 8 bytes
+  public void testFromLong() {
+    for (ExpectedHashCode expected : expectedHashCodes) {
+      if (expected.bytes.length == 8) { 
+        HashCode fromLong = HashCodes.fromLong(expected.asLong);
+        assertExpectedHashCode(expected, fromLong);
+      }
+    }
+  }
+  
+  public void testFromBytes() {
+    for (ExpectedHashCode expected : expectedHashCodes) {
+      HashCode fromBytes = HashCodes.fromBytes(expected.bytes);
+      assertExpectedHashCode(expected, fromBytes);
+    }
+  }
+  
+  private void assertExpectedHashCode(ExpectedHashCode expected, HashCode hash) {
+    assertTrue(Arrays.equals(expected.bytes, hash.asBytes()));
+    byte[] bb = new byte[hash.bits() / 8];
+    hash.writeBytesTo(bb, 0, bb.length);
+    assertTrue(Arrays.equals(expected.bytes, bb));
+    assertEquals(expected.asInt, hash.asInt());
+    if (expected.asLong == null) {
+      try {
+        hash.asLong();
+        fail();
+      } catch (IllegalStateException ok) {}
+    } else {
+      assertEquals(expected.asLong.longValue(), hash.asLong());
+    }
+    assertEquals(expected.toString, hash.toString());
+    assertSideEffectFree(hash);
+    assertReadableBytes(hash);
+  }
+  
+  private void assertSideEffectFree(HashCode hash) {
+    byte[] original = hash.asBytes();
+    byte[] mutated = hash.asBytes();
+    mutated[0]++;
+    assertTrue(Arrays.equals(original, hash.asBytes()));
+  }
+  
+  private void assertReadableBytes(HashCode hashCode) {
+    assertTrue(hashCode.bits() >= 32); // sanity
+    byte[] hashBytes = hashCode.asBytes();
+    int totalBytes = hashCode.bits() / 8;
+    
+    for (int bytes = 0; bytes < totalBytes; bytes++) {
+      byte[] bb = new byte[bytes];
+      hashCode.writeBytesTo(bb, 0, bb.length);
+      
+      assertTrue(Arrays.equals(Arrays.copyOf(hashBytes, bytes), bb));
+    }
+  }
+  
+  private static class ExpectedHashCode {
+    final byte[] bytes;
+    final int asInt;
+    final Long asLong; // null means that asLong should throw an exception
+    final String toString;
+    ExpectedHashCode(byte[] bytes, int asInt, Long asLong, String toString) {
+      this.bytes = bytes;
+      this.asInt = asInt;
+      this.asLong = asLong;
+      this.toString = toString;
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/hash/HashFunctionsTest.java b/guava-tests/test/com/google/common/hash/HashFunctionsTest.java
new file mode 100644
index 0000000..f9fd6c4
--- /dev/null
+++ b/guava-tests/test/com/google/common/hash/HashFunctionsTest.java
@@ -0,0 +1,74 @@
+// Copyright 2011 Google Inc. All Rights Reserved.
+
+package com.google.common.hash;
+
+import com.google.common.collect.Sets;
+
+import junit.framework.TestCase;
+
+import java.util.Set;
+
+/**
+ * Tests for HashFunctions.
+ *
+ * @author andreou@google.com (Dimitris Andreou)
+ */
+public class HashFunctionsTest extends TestCase {
+  public void testMd5() {
+    assertInvariants(Hashing.md5());
+  }
+
+  public void testMurmur3_138() {
+    assertInvariants(Hashing.murmur3_128());
+  }
+
+  public void testMurmur3_32() {
+    assertInvariants(Hashing.murmur3_32());
+  }
+
+  public void testGoodFastHash() {
+    for (int i = 1; i < 500; i++) {
+      HashFunction hasher = Hashing.goodFastHash(i);
+      assertTrue(hasher.bits() >= i);
+      assertInvariants(hasher);
+    }
+  }
+
+  /**
+   * Checks that a Hasher returns the same HashCode when given the same input, and also
+   * that the collision rate looks sane.
+   */
+  private static void assertInvariants(HashFunction hashFunction) {
+    int objects = 100;
+    Set<HashCode> hashcodes = Sets.newHashSetWithExpectedSize(objects);
+    for (int i = 0; i < objects; i++) {
+      Object o = new Object();
+      HashCode hashcode1 = hashFunction.newHasher().putObject(o, HashTestUtils.BAD_FUNNEL).hash();
+      HashCode hashcode2 = hashFunction.newHasher().putObject(o, HashTestUtils.BAD_FUNNEL).hash();
+      assertEquals(hashcode1, hashcode2); // idempotent
+      assertEquals(hashFunction.bits(), hashcode1.bits());
+      assertEquals(hashFunction.bits(), hashcode1.asBytes().length * 8);
+      hashcodes.add(hashcode1);
+    }
+    assertTrue(hashcodes.size() > objects * 0.95); // quite relaxed test
+
+    assertHashBytesThrowsCorrectExceptions(hashFunction);
+  }
+
+  private static void assertHashBytesThrowsCorrectExceptions(HashFunction hashFunction) {
+    hashFunction.hashBytes(new byte[64], 0, 0);
+
+    try {
+      hashFunction.hashBytes(new byte[128], -1, 128);
+      fail();
+    } catch (IndexOutOfBoundsException ok) {}
+    try {
+      hashFunction.hashBytes(new byte[128], 64, 256 /* too long len */);
+      fail();
+    } catch (IndexOutOfBoundsException ok) {}
+    try {
+      hashFunction.hashBytes(new byte[64], 0, -1);
+      fail();
+    } catch (IndexOutOfBoundsException ok) {}
+  }
+}
diff --git a/guava-tests/test/com/google/common/hash/HashTestUtils.java b/guava-tests/test/com/google/common/hash/HashTestUtils.java
new file mode 100644
index 0000000..a857a79
--- /dev/null
+++ b/guava-tests/test/com/google/common/hash/HashTestUtils.java
@@ -0,0 +1,178 @@
+// Copyright 2011 Google Inc. All Rights Reserved.
+
+package com.google.common.hash;
+
+import com.google.common.primitives.Ints;
+
+import org.junit.Assert;
+
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.util.Arrays;
+import java.util.Random;
+
+/**
+ * @author andreou@google.com (Dimitris Andreou)
+ */
+class HashTestUtils {
+  private HashTestUtils() {}
+
+  /**
+   * Converts a string, which should contain only ascii-representable characters, to a byte[].
+   */
+  static byte[] ascii(String string) {
+    byte[] bytes = new byte[string.length()];
+    for (int i = 0; i < string.length(); i++) {
+      bytes[i] = (byte) string.charAt(i);
+    }
+    return bytes;
+  }
+
+  /**
+   * Returns a byte array representation for a sequence of longs, in big-endian order. 
+   */
+  static byte[] toBytes(ByteOrder bo, long... longs) {
+    ByteBuffer bb = ByteBuffer.wrap(new byte[longs.length * 8]).order(bo);
+    for (long x : longs) {
+      bb.putLong(x);
+    }
+    return bb.array();
+  }
+
+  interface HashFn {
+    byte[] hash(byte[] input, int seed);
+  }
+
+  static void verifyHashFunction(HashFn hashFunction, int hashbits, int expected) {
+    int hashBytes = hashbits / 8;
+
+    byte[] key = new byte[256];
+    byte[] hashes = new byte[hashBytes * 256];
+
+    // Hash keys of the form {}, {0}, {0,1}, {0,1,2}... up to N=255,using 256-N as the seed
+    for (int i = 0; i < 256; i++) {
+      key[i] = (byte) i;
+      int seed = 256 - i;
+      byte[] hash = hashFunction.hash(Arrays.copyOf(key, i), seed);
+      System.arraycopy(hash, 0, hashes, i * hashBytes, hash.length);
+    }
+    
+    // Then hash the result array
+    byte[] result = hashFunction.hash(hashes, 0);
+    
+    // interpreted in little-endian order.
+    int verification = Integer.reverseBytes(Ints.fromByteArray(result)); 
+
+    if (expected != verification) {
+      throw new AssertionError("Expected: " + Integer.toHexString(expected)
+          + " got: " + Integer.toHexString(verification));
+    }
+  }
+  
+  static void assertEqualHashes(byte[] expectedHash, byte[] actualHash) {
+    if (!Arrays.equals(expectedHash, actualHash)) {
+      Assert.fail(String.format("Should be: %x, was %x", expectedHash, actualHash));
+    }
+  }
+  
+  static final Funnel<Object> BAD_FUNNEL = new Funnel<Object>() {
+    @Override public void funnel(Object object, Sink byteSink) {
+      byteSink.putInt(object.hashCode());
+    }
+  };
+  
+  static enum RandomHasherAction {
+    PUT_BOOLEAN() {
+      @Override void performAction(Random random, Iterable<? extends Sink> sinks) {
+        boolean value = random.nextBoolean();
+        for (Sink sink : sinks) {
+          sink.putBoolean(value);
+        }
+      }
+    },
+    PUT_BYTE() {
+      @Override void performAction(Random random, Iterable<? extends Sink> sinks) {
+        int value = random.nextInt();
+        for (Sink sink : sinks) {
+          sink.putByte((byte) value);
+        }
+      }
+    },
+    PUT_SHORT() {
+      @Override void performAction(Random random, Iterable<? extends Sink> sinks) {
+        short value = (short) random.nextInt();
+        for (Sink sink : sinks) {
+          sink.putShort(value);
+        }
+      }
+    },
+    PUT_CHAR() {
+      @Override void performAction(Random random, Iterable<? extends Sink> sinks) {
+        char value = (char) random.nextInt();
+        for (Sink sink : sinks) {
+          sink.putChar(value);
+        }
+      }
+    },
+    PUT_INT() {
+      @Override void performAction(Random random, Iterable<? extends Sink> sinks) {
+        int value = random.nextInt();
+        for (Sink sink : sinks) {
+          sink.putInt(value);
+        }
+      }
+    },
+    PUT_LONG() {
+      @Override void performAction(Random random, Iterable<? extends Sink> sinks) {
+        long value = random.nextLong();
+        for (Sink sink : sinks) {
+          sink.putLong(value);
+        }
+      }
+    },
+    PUT_FLOAT() {
+      @Override void performAction(Random random, Iterable<? extends Sink> sinks) {
+        float value = random.nextFloat();
+        for (Sink sink : sinks) {
+          sink.putFloat(value);
+        }
+      }
+    },
+    PUT_DOUBLE() {
+      @Override void performAction(Random random, Iterable<? extends Sink> sinks) {
+        double value = random.nextDouble();
+        for (Sink sink : sinks) {
+          sink.putDouble(value);
+        }
+      }
+    },
+    PUT_BYTES() {
+      @Override void performAction(Random random, Iterable<? extends Sink> sinks) {
+        byte[] value = new byte[random.nextInt(128)];
+        random.nextBytes(value);
+        for (Sink sink : sinks) {
+          sink.putBytes(value);
+        }
+      }
+    },
+    PUT_BYTES_INT_INT() {
+      @Override void performAction(Random random, Iterable<? extends Sink> sinks) {
+        byte[] value = new byte[random.nextInt(128)];
+        random.nextBytes(value);
+        int off = random.nextInt(value.length + 1);
+        int len = random.nextInt(value.length - off + 1);
+        for (Sink sink : sinks) {
+          sink.putBytes(value);
+        }
+      }
+    };
+    
+    abstract void performAction(Random random, Iterable<? extends Sink> sinks);
+    
+    private static final RandomHasherAction[] actions = values();
+    
+    static RandomHasherAction pickAtRandom(Random random) {
+      return actions[random.nextInt(actions.length)];
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/hash/HashingTest.java b/guava-tests/test/com/google/common/hash/HashingTest.java
new file mode 100644
index 0000000..547d5a3
--- /dev/null
+++ b/guava-tests/test/com/google/common/hash/HashingTest.java
@@ -0,0 +1,204 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.hash;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Lists;
+import com.google.common.util.concurrent.AtomicLongMap;
+
+import junit.framework.TestCase;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Random;
+
+/**
+ * Unit tests for functions of {@code Hashing} that don't have their own tests.
+ */
+public class HashingTest extends TestCase {
+  public void testPadToLong() {
+    assertEquals(0x1111111111111111L, Hashing.padToLong(HashCodes.fromLong(0x1111111111111111L)));
+    assertEquals(0x9999999999999999L, Hashing.padToLong(HashCodes.fromLong(0x9999999999999999L)));
+    assertEquals(0x0000000011111111L, Hashing.padToLong(HashCodes.fromInt(0x11111111)));
+    assertEquals(0x0000000099999999L, Hashing.padToLong(HashCodes.fromInt(0x99999999)));
+  }
+
+  public void testConsistentHash_correctness() {
+    long[] interestingValues = { -1, 0, 1, 2, Long.MAX_VALUE, Long.MIN_VALUE };
+    for (long h : interestingValues) {
+      checkConsistentHashCorrectness(h);
+    }
+    Random r = new Random(7);
+    for (int i = 0; i < 20; i++) {
+      checkConsistentHashCorrectness(r.nextLong());
+    }
+  }
+
+  private void checkConsistentHashCorrectness(long hashCode) {
+    int last = 0;
+    for (int shards = 1; shards <= 100000; shards++) {
+      int b = Hashing.consistentHash(hashCode, shards);
+      if (b != last) {
+        assertEquals(shards - 1, b);
+        last = b;
+      }
+    }
+  }
+
+  public void testConsistentHash_probabilities() {
+    AtomicLongMap<Integer> map = AtomicLongMap.create();
+    Random r = new Random(9);
+    for (int i = 0; i < ITERS; i++) {
+      countRemaps(r.nextLong(), map);
+    }
+    for (int shard = 2; shard <= MAX_SHARDS; shard++) {
+      // Rough: don't exceed 1.2x the expected number of remaps by more than 20
+      assertTrue(map.get(shard) <= 1.2 * ITERS / shard + 20);
+    }
+  }
+
+  private void countRemaps(long h, AtomicLongMap<Integer> map) {
+    int last = 0;
+    for (int shards = 2; shards <= MAX_SHARDS; shards++) {
+      int chosen = Hashing.consistentHash(h, shards);
+      if (chosen != last) {
+        map.incrementAndGet(shards);
+        last = chosen;
+      }
+    }
+  }
+
+  private static final int ITERS = 10000;
+  private static final int MAX_SHARDS = 500;
+
+  public void testConsistentHash_outOfRange() {
+    try {
+      Hashing.consistentHash(5L, 0);
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  public void testConsistentHash_ofHashCode() {
+    checkSameResult(HashCodes.fromLong(1), 1);
+    checkSameResult(HashCodes.fromLong(0x9999999999999999L), 0x9999999999999999L);
+    checkSameResult(HashCodes.fromInt(0x99999999), 0x0000000099999999L);
+  }
+
+  public void checkSameResult(HashCode hashCode, long equivLong) {
+    assertEquals(Hashing.consistentHash(equivLong, 5555), Hashing.consistentHash(hashCode, 5555));
+  }
+
+  public void testCombineOrdered_null() {
+    try {
+      Hashing.combineOrdered(null);
+      fail();
+    } catch (NullPointerException expected) {
+    }
+  }
+
+  public void testCombineOrdered_empty() {
+    try {
+      Hashing.combineOrdered(Collections.<HashCode>emptySet());
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  public void testCombineOrdered_differentBitLengths() {
+    try {
+      Hashing.combineOrdered(ImmutableList.of(HashCodes.fromInt(32), HashCodes.fromLong(32L)));
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  public void testCombineOrdered() {
+    HashCode hash31 = HashCodes.fromInt(31);
+    HashCode hash32 = HashCodes.fromInt(32);
+    assertEquals(hash32, Hashing.combineOrdered(ImmutableList.of(hash32)));
+    assertEquals(HashCodes.fromBytes(new byte[] { (byte) 0x80, 0, 0, 0 }),
+        Hashing.combineOrdered(ImmutableList.of(hash32, hash32)));
+    assertEquals(HashCodes.fromBytes(new byte[] { (byte) 0xa0, 0, 0, 0 }),
+        Hashing.combineOrdered(ImmutableList.of(hash32, hash32, hash32)));
+    assertFalse(
+        Hashing.combineOrdered(ImmutableList.of(hash31, hash32)).equals(
+        Hashing.combineOrdered(ImmutableList.of(hash32, hash31))));
+  }
+
+  public void testCombineOrdered_randomHashCodes() {
+    Random random = new Random(7);
+    List<HashCode> hashCodes = Lists.newArrayList();
+    for (int i = 0; i < 10; i++) {
+      hashCodes.add(HashCodes.fromLong(random.nextLong()));
+    }
+    HashCode hashCode1 = Hashing.combineOrdered(hashCodes);
+    Collections.shuffle(hashCodes, random);
+    HashCode hashCode2 = Hashing.combineOrdered(hashCodes);
+
+    assertFalse(hashCode1.equals(hashCode2));
+  }
+
+  public void testCombineUnordered_null() {
+    try {
+      Hashing.combineUnordered(null);
+      fail();
+    } catch (NullPointerException expected) {
+    }
+  }
+
+  public void testCombineUnordered_empty() {
+    try {
+      Hashing.combineUnordered(Collections.<HashCode>emptySet());
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  public void testCombineUnordered_differentBitLengths() {
+    try {
+      Hashing.combineUnordered(ImmutableList.of(HashCodes.fromInt(32), HashCodes.fromLong(32L)));
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  public void testCombineUnordered() {
+    HashCode hash31 = HashCodes.fromInt(31);
+    HashCode hash32 = HashCodes.fromInt(32);
+    assertEquals(hash32, Hashing.combineUnordered(ImmutableList.of(hash32)));
+    assertEquals(HashCodes.fromInt(64), Hashing.combineUnordered(ImmutableList.of(hash32, hash32)));
+    assertEquals(HashCodes.fromInt(96),
+        Hashing.combineUnordered(ImmutableList.of(hash32, hash32, hash32)));
+    assertEquals(
+        Hashing.combineUnordered(ImmutableList.of(hash31, hash32)),
+        Hashing.combineUnordered(ImmutableList.of(hash32, hash31)));
+  }
+
+  public void testCombineUnordered_randomHashCodes() {
+    Random random = new Random();
+    List<HashCode> hashCodes = Lists.newArrayList();
+    for (int i = 0; i < 10; i++) {
+      hashCodes.add(HashCodes.fromLong(random.nextLong()));
+    }
+    HashCode hashCode1 = Hashing.combineUnordered(hashCodes);
+    Collections.shuffle(hashCodes);
+    HashCode hashCode2 = Hashing.combineUnordered(hashCodes);
+
+    assertEquals(hashCode1, hashCode2);
+  }
+}
diff --git a/guava-tests/test/com/google/common/hash/MessageDigestHashFunctionTest.java b/guava-tests/test/com/google/common/hash/MessageDigestHashFunctionTest.java
new file mode 100644
index 0000000..a70466e
--- /dev/null
+++ b/guava-tests/test/com/google/common/hash/MessageDigestHashFunctionTest.java
@@ -0,0 +1,34 @@
+// Copyright 2011 Google Inc. All Rights Reserved.
+
+package com.google.common.hash;
+
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+import junit.framework.TestCase;
+
+/**
+ * Tests for the MessageDigestHashFunction.
+ *
+ * @author kak@google.com (Kurt Alfred Kluever)
+ */
+public class MessageDigestHashFunctionTest extends TestCase {
+  public void testMd5Hashing() throws Exception {
+    assertMessageDigestHashing(HashTestUtils.ascii(""), "MD5");
+    assertMessageDigestHashing(HashTestUtils.ascii("Z"), "MD5");
+    assertMessageDigestHashing(HashTestUtils.ascii("foobar"), "MD5");
+  }
+
+  public void testSha1Hashing() throws Exception {
+    assertMessageDigestHashing(HashTestUtils.ascii(""), "SHA1");
+    assertMessageDigestHashing(HashTestUtils.ascii("Z"), "SHA1");
+    assertMessageDigestHashing(HashTestUtils.ascii("foobar"), "SHA1");
+  }
+
+  private static void assertMessageDigestHashing(byte[] input, String algorithmName) 
+      throws NoSuchAlgorithmException {
+    HashTestUtils.assertEqualHashes(
+        MessageDigest.getInstance(algorithmName).digest(input),
+        new MessageDigestHashFunction(algorithmName).hashBytes(input).asBytes());
+  }
+}
diff --git a/guava-tests/test/com/google/common/hash/Murmur3Hash128Test.java b/guava-tests/test/com/google/common/hash/Murmur3Hash128Test.java
new file mode 100644
index 0000000..4a4eea7
--- /dev/null
+++ b/guava-tests/test/com/google/common/hash/Murmur3Hash128Test.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.hash;
+
+import static com.google.common.hash.HashTestUtils.ascii;
+import static com.google.common.hash.HashTestUtils.toBytes;
+import static com.google.common.hash.Hashing.murmur3_128;
+import static java.nio.ByteOrder.LITTLE_ENDIAN;
+
+import com.google.common.hash.Funnels;
+import com.google.common.hash.HashTestUtils.HashFn;
+
+import junit.framework.TestCase;
+
+import java.util.Arrays;
+
+/**
+ * Tests for Murmur3Hash128.
+ */
+public class Murmur3Hash128Test extends TestCase {
+  public void testCompatibilityWithCPlusPlus() {
+    assertHash(0, toBytes(LITTLE_ENDIAN, 0x629942693e10f867L, 0x92db0b82baeb5347L),
+        ascii("hell"));
+    assertHash(1, toBytes(LITTLE_ENDIAN, 0xa78ddff5adae8d10L, 0x128900ef20900135L),
+        ascii("hello"));
+    assertHash(2, toBytes(LITTLE_ENDIAN, 0x8a486b23f422e826L, 0xf962a2c58947765fL),
+        ascii("hello "));
+    assertHash(3, toBytes(LITTLE_ENDIAN, 0x2ea59f466f6bed8cL, 0xc610990acc428a17L),
+        ascii("hello w"));
+    assertHash(4, toBytes(LITTLE_ENDIAN, 0x79f6305a386c572cL, 0x46305aed3483b94eL),
+        ascii("hello wo"));
+    assertHash(5, toBytes(LITTLE_ENDIAN, 0xc2219d213ec1f1b5L, 0xa1d8e2e0a52785bdL),
+        ascii("hello wor"));
+    assertHash(0, toBytes(LITTLE_ENDIAN, 0xe34bbc7bbc071b6cL, 0x7a433ca9c49a9347L),
+        ascii("The quick brown fox jumps over the lazy dog"));
+    assertHash(0, toBytes(LITTLE_ENDIAN, 0x658ca970ff85269aL, 0x43fee3eaa68e5c3eL),
+        ascii("The quick brown fox jumps over the lazy cog"));
+  }
+  
+  private static void assertHash(int seed, byte[] expectedHash, byte[] input) {
+    byte[] hash = murmur3_128(seed).newHasher().putBytes(input).hash().asBytes();
+    assertTrue(Arrays.equals(expectedHash, hash));
+  }
+
+  public void testParanoid() {
+    HashFn hf = new HashFn() {
+      @Override public byte[] hash(byte[] input, int seed) {
+        Hasher hasher = murmur3_128(seed).newHasher();
+        Funnels.byteArrayFunnel().funnel(input, hasher);
+        return hasher.hash().asBytes();
+      }
+    };
+    // the magic number comes from:
+    // http://code.google.com/p/smhasher/source/browse/trunk/main.cpp, #74
+    HashTestUtils.verifyHashFunction(hf, 128, 0x6384BA69);
+  }
+}
diff --git a/guava-tests/test/com/google/common/hash/Murmur3Hash32Test.java b/guava-tests/test/com/google/common/hash/Murmur3Hash32Test.java
new file mode 100644
index 0000000..541b53a
--- /dev/null
+++ b/guava-tests/test/com/google/common/hash/Murmur3Hash32Test.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.hash;
+
+import static com.google.common.hash.Hashing.murmur3_32;
+
+import com.google.common.hash.Funnels;
+import com.google.common.hash.HashTestUtils.HashFn;
+
+import junit.framework.TestCase;
+
+/**
+ * Tests for Murmur3Hash32.
+ */
+public class Murmur3Hash32Test extends TestCase {
+  public void testParanoid() {
+    HashFn hf = new HashFn() {
+      @Override public byte[] hash(byte[] input, int seed) {
+        Hasher hasher = murmur3_32(seed).newHasher();
+        Funnels.byteArrayFunnel().funnel(input, hasher);
+        return hasher.hash().asBytes();
+      }
+    };
+    // the magic number comes from:
+    // http://code.google.com/p/smhasher/source/browse/trunk/main.cpp, #72
+    HashTestUtils.verifyHashFunction(hf, 32, 0xB0F57EE3);
+  }
+}
diff --git a/guava-tests/test/com/google/common/io/AppendableWriterTest.java b/guava-tests/test/com/google/common/io/AppendableWriterTest.java
new file mode 100644
index 0000000..efc7212
--- /dev/null
+++ b/guava-tests/test/com/google/common/io/AppendableWriterTest.java
@@ -0,0 +1,128 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.io;
+
+import java.io.Closeable;
+import java.io.Flushable;
+import java.io.IOException;
+import java.io.Writer;
+
+/**
+ * Unit test for {@link AppendableWriter}.
+ * 
+ * @author Alan Green
+ */
+public class AppendableWriterTest extends IoTestCase {
+
+  /** Helper class for testing behavior with Flushable and Closeable targets. */
+  private static class SpyAppendable implements Appendable, Flushable, Closeable {
+    boolean flushed;
+    boolean closed;
+    StringBuilder result = new StringBuilder();
+
+    @Override public Appendable append(CharSequence csq) {
+      result.append(csq);
+      return this;
+    }
+
+    @Override public Appendable append(char c) {
+      result.append(c);
+      return this;
+    }
+
+    @Override public Appendable append(CharSequence csq, int start, int end) {
+      result.append(csq, start, end);
+      return this;
+    }
+
+    @Override public void flush() {
+      flushed = true;
+    }
+
+    @Override public void close() {
+      closed = true;
+    }
+  }
+
+  public void testWriteMethods() throws IOException {
+    StringBuilder builder = new StringBuilder();
+    Writer writer = new AppendableWriter(builder);
+
+    writer.write("Hello".toCharArray());
+    writer.write(',');
+    writer.write(0xBEEF0020); // only lower 16 bits are important
+    writer.write("Wo");
+    writer.write("Whirled".toCharArray(), 3, 2);
+    writer.write("Mad! Mad, I say", 2, 2);
+
+    assertEquals("Hello, World!", builder.toString());
+  }
+
+  public void testAppendMethods() throws IOException {
+    StringBuilder builder = new StringBuilder();
+    Writer writer = new AppendableWriter(builder);
+
+    writer.append("Hello,");
+    writer.append(' ');
+    writer.append("The World Wide Web", 4, 9);
+    writer.append("!");
+
+    assertEquals("Hello, World!", builder.toString());
+  }
+
+  public void testCloseFlush() throws IOException {
+    SpyAppendable spy = new SpyAppendable();
+    Writer writer = new AppendableWriter(spy);
+
+    writer.write("Hello");
+    assertFalse(spy.flushed);
+    assertFalse(spy.closed);
+
+    writer.flush();
+    assertTrue(spy.flushed);
+    assertFalse(spy.closed);
+
+    writer.close();
+    assertTrue(spy.flushed);
+    assertTrue(spy.closed);
+  }
+
+  public void testCloseIsFinal() throws IOException {
+    StringBuilder builder = new StringBuilder();
+    Writer writer = new AppendableWriter(builder);
+
+    writer.write("Hi");
+    writer.close();
+
+    try {
+      writer.write(" Greg");
+      fail("Should have thrown IOException due to writer already closed");
+    } catch (IOException es) {
+      // expected
+    }
+
+    try {
+      writer.flush();
+      fail("Should have thrown IOException due to writer already closed");
+    } catch (IOException es) {
+      // expected
+    }
+
+    // close()ing already closed writer is allowed
+    writer.close();
+  }
+}
diff --git a/guava-tests/test/com/google/common/io/ByteStreamsTest.java b/guava-tests/test/com/google/common/io/ByteStreamsTest.java
new file mode 100644
index 0000000..ff0497a
--- /dev/null
+++ b/guava-tests/test/com/google/common/io/ByteStreamsTest.java
@@ -0,0 +1,882 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.io;
+
+import static com.google.common.io.ByteStreams.copy;
+import static com.google.common.io.ByteStreams.newInputStreamSupplier;
+
+import com.google.common.base.Charsets;
+import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.primitives.Bytes;
+import com.google.common.testing.TestLogHandler;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.EOFException;
+import java.io.FilterInputStream;
+import java.io.FilterOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.nio.channels.Channels;
+import java.nio.channels.ReadableByteChannel;
+import java.nio.channels.WritableByteChannel;
+import java.util.Arrays;
+import java.util.Random;
+
+/**
+ * Unit test for {@link ByteStreams}.
+ *
+ * @author Chris Nokleberg
+ */
+public class ByteStreamsTest extends IoTestCase {
+
+  /** Provides an InputStream that throws an IOException on every read. */
+  static final InputSupplier<InputStream> BROKEN_READ
+      = new InputSupplier<InputStream>() {
+        @Override
+        public InputStream getInput() {
+          return new InputStream() {
+            @Override public int read() throws IOException {
+              throw new IOException("broken read");
+            }
+          };
+        }
+      };
+
+  /** Provides an OutputStream that throws an IOException on every write. */
+  static final OutputSupplier<OutputStream> BROKEN_WRITE
+      = new OutputSupplier<OutputStream>() {
+        @Override
+        public OutputStream getOutput() {
+          return new OutputStream() {
+            @Override public void write(int b) throws IOException {
+              throw new IOException("broken write");
+            }
+          };
+        }
+      };
+
+  /** Provides an InputStream that throws an IOException on close. */
+  static final InputSupplier<InputStream> BROKEN_CLOSE_INPUT =
+      new InputSupplier<InputStream>() {
+        @Override
+        public InputStream getInput() {
+          return new FilterInputStream(new ByteArrayInputStream(new byte[10])) {
+            @Override public void close() throws IOException {
+              throw new IOException("broken close input");
+            }
+          };
+        }
+      };
+
+  /** Provides an OutputStream that throws an IOException on every close. */
+  static final OutputSupplier<OutputStream> BROKEN_CLOSE_OUTPUT =
+      new OutputSupplier<OutputStream>() {
+        @Override
+        public OutputStream getOutput() {
+          return new FilterOutputStream(new ByteArrayOutputStream()) {
+            @Override public void close() throws IOException {
+              throw new IOException("broken close output");
+            }
+          };
+        }
+      };
+
+  /** Throws an IOException from getInput. */
+  static final InputSupplier<InputStream> BROKEN_GET_INPUT =
+      new InputSupplier<InputStream>() {
+        @Override
+        public InputStream getInput() throws IOException {
+          throw new IOException("broken get input");
+        }
+      };
+
+  /** Throws an IOException from getOutput. */
+  static final OutputSupplier<OutputStream> BROKEN_GET_OUTPUT =
+      new OutputSupplier<OutputStream>() {
+        @Override
+        public OutputStream getOutput() throws IOException {
+          throw new IOException("broken get output");
+        }
+      };
+
+  private static final ImmutableSet<InputSupplier<InputStream>> BROKEN_INPUTS =
+      ImmutableSet.of(BROKEN_CLOSE_INPUT, BROKEN_GET_INPUT, BROKEN_READ);
+  private static final ImmutableSet<OutputSupplier<OutputStream>> BROKEN_OUTPUTS
+      = ImmutableSet.of(BROKEN_CLOSE_OUTPUT, BROKEN_GET_OUTPUT, BROKEN_WRITE);
+
+  public void testByteSuppliers() throws IOException {
+    byte[] range = newPreFilledByteArray(200);
+    assertTrue(Arrays.equals(range,
+        ByteStreams.toByteArray(ByteStreams.newInputStreamSupplier(range))));
+
+    byte[] subRange = ByteStreams.toByteArray(
+        ByteStreams.newInputStreamSupplier(range, 100, 50));
+    assertEquals(50, subRange.length);
+    assertEquals(100, subRange[0]);
+    assertEquals((byte) 149, subRange[subRange.length - 1]);
+  }
+
+  public void testEqual() throws IOException {
+    equalHelper(false, 0, 1);
+    equalHelper(false, 400, 10000);
+    equalHelper(false, 0x2000, 0x2001);
+    equalHelper(false, new byte[]{ 0 }, new byte[]{ 1 });
+
+    byte[] mutate = newPreFilledByteArray(10000);
+    mutate[9000] = 0;
+    equalHelper(false, mutate, newPreFilledByteArray(10000));
+
+    equalHelper(true, 0, 0);
+    equalHelper(true, 1, 1);
+    equalHelper(true, 400, 400);
+
+    final byte[] tenK = newPreFilledByteArray(10000);
+    equalHelper(true, tenK, tenK);
+    assertTrue(ByteStreams.equal(ByteStreams.newInputStreamSupplier(tenK),
+        new InputSupplier<InputStream>() {
+          @Override
+          public InputStream getInput() {
+            return new RandomAmountInputStream(new ByteArrayInputStream(tenK),
+                new Random(301));
+          }
+        }));
+  }
+
+  private void equalHelper(boolean expect, int size1, int size2)
+      throws IOException {
+    equalHelper(expect, newPreFilledByteArray(size1),
+        newPreFilledByteArray(size2));
+  }
+
+  private void equalHelper(boolean expect, byte[] a, byte[] b)
+      throws IOException {
+    assertEquals(expect, ByteStreams.equal(
+        ByteStreams.newInputStreamSupplier(a),
+        ByteStreams.newInputStreamSupplier(b)));
+  }
+
+  public void testAlwaysCloses() throws IOException {
+    byte[] range = newPreFilledByteArray(100);
+    CheckCloseSupplier.Input<InputStream> okRead
+        = newCheckInput(ByteStreams.newInputStreamSupplier(range));
+    CheckCloseSupplier.Output<OutputStream> okWrite
+        = newCheckOutput(new OutputSupplier<OutputStream>() {
+          @Override
+          public OutputStream getOutput() {
+            return new ByteArrayOutputStream();
+          }
+        });
+
+    CheckCloseSupplier.Input<InputStream> brokenRead
+        = newCheckInput(BROKEN_READ);
+    CheckCloseSupplier.Output<OutputStream> brokenWrite
+        = newCheckOutput(BROKEN_WRITE);
+
+    // copy, both suppliers
+    ByteStreams.copy(okRead, okWrite);
+    assertTrue(okRead.areClosed());
+    assertTrue(okWrite.areClosed());
+
+    try {
+      ByteStreams.copy(okRead, brokenWrite);
+      fail("expected exception");
+    } catch (IOException e) {
+      assertEquals("broken write", e.getMessage());
+    }
+    assertTrue(okRead.areClosed());
+    assertTrue(brokenWrite.areClosed());
+
+    try {
+      ByteStreams.copy(brokenRead, okWrite);
+      fail("expected exception");
+    } catch (IOException e) {
+      assertEquals("broken read", e.getMessage());
+    }
+    assertTrue(brokenRead.areClosed());
+    assertTrue(okWrite.areClosed());
+
+    try {
+      ByteStreams.copy(brokenRead, brokenWrite);
+      fail("expected exception");
+    } catch (IOException e) {
+      assertEquals("broken read", e.getMessage());
+    }
+    assertTrue(brokenRead.areClosed());
+    assertTrue(brokenWrite.areClosed());
+
+    // copy, input supplier
+    OutputStream out = okWrite.getOutput();
+    ByteStreams.copy(okRead, out);
+    assertTrue(okRead.areClosed());
+    assertFalse(okWrite.areClosed());
+    out.close();
+
+    out = brokenWrite.getOutput();
+    try {
+      ByteStreams.copy(okRead, out);
+      fail("expected exception");
+    } catch (IOException e) {
+      assertEquals("broken write", e.getMessage());
+    }
+    assertTrue(okRead.areClosed());
+    assertFalse(brokenWrite.areClosed());
+    out.close();
+
+    out = okWrite.getOutput();
+    try {
+      ByteStreams.copy(brokenRead, out);
+      fail("expected exception");
+    } catch (IOException e) {
+      assertEquals("broken read", e.getMessage());
+    }
+    assertTrue(brokenRead.areClosed());
+    assertFalse(okWrite.areClosed());
+    out.close();
+
+    out = brokenWrite.getOutput();
+    try {
+      ByteStreams.copy(brokenRead, out);
+      fail("expected exception");
+    } catch (IOException e) {
+      assertEquals("broken read", e.getMessage());
+    }
+    assertTrue(brokenRead.areClosed());
+    assertFalse(brokenWrite.areClosed());
+    out.close();
+
+    // copy, output supplier
+    InputStream in = okRead.getInput();
+    ByteStreams.copy(in, okWrite);
+    assertFalse(okRead.areClosed());
+    assertTrue(okWrite.areClosed());
+    in.close();
+
+    in = okRead.getInput();
+    try {
+      ByteStreams.copy(in, brokenWrite);
+      fail("expected exception");
+    } catch (IOException e) {
+      assertEquals("broken write", e.getMessage());
+    }
+    assertFalse(okRead.areClosed());
+    assertTrue(brokenWrite.areClosed());
+    in.close();
+
+    in = brokenRead.getInput();
+    try {
+      ByteStreams.copy(in, okWrite);
+      fail("expected exception");
+    } catch (IOException e) {
+      assertEquals("broken read", e.getMessage());
+    }
+    assertFalse(brokenRead.areClosed());
+    assertTrue(okWrite.areClosed());
+    in.close();
+
+    in = brokenRead.getInput();
+    try {
+      ByteStreams.copy(in, brokenWrite);
+      fail("expected exception");
+    } catch (IOException e) {
+      assertEquals("broken read", e.getMessage());
+    }
+    assertFalse(brokenRead.areClosed());
+    assertTrue(brokenWrite.areClosed());
+    in.close();
+
+    // toByteArray
+    assertTrue(Arrays.equals(range, ByteStreams.toByteArray(okRead)));
+    assertTrue(okRead.areClosed());
+
+    try {
+      ByteStreams.toByteArray(brokenRead);
+      fail("expected exception");
+    } catch (IOException e) {
+      assertEquals("broken read", e.getMessage());
+    }
+    assertTrue(brokenRead.areClosed());
+
+    // equal
+    try {
+      ByteStreams.equal(brokenRead, okRead);
+      fail("expected exception");
+    } catch (IOException e) {
+      assertEquals("broken read", e.getMessage());
+    }
+    assertTrue(brokenRead.areClosed());
+
+    try {
+      ByteStreams.equal(okRead, brokenRead);
+      fail("expected exception");
+    } catch (IOException e) {
+      assertEquals("broken read", e.getMessage());
+    }
+    assertTrue(brokenRead.areClosed());
+
+    // write
+    try {
+      ByteStreams.write(new byte[10], brokenWrite);
+      fail("expected exception");
+    } catch (IOException e) {
+      assertEquals("broken write", e.getMessage());
+    }
+    assertTrue(brokenWrite.areClosed());
+  }
+
+  private static int getAndResetRecords(TestLogHandler logHandler) {
+    int records = logHandler.getStoredLogRecords().size();
+    logHandler.clear();
+    return records;
+  }
+
+  private static void runFailureTest(
+      InputSupplier<? extends InputStream> in, OutputSupplier<OutputStream> out) {
+    try {
+      copy(in, out);
+      fail();
+    } catch (IOException expected) {
+    }
+  }
+
+  private static OutputSupplier<OutputStream> newByteArrayOutputStreamSupplier() {
+    return new OutputSupplier<OutputStream>() {
+      @Override public OutputStream getOutput() {
+        return new ByteArrayOutputStream();
+      }
+    };
+  }
+
+  public void testWriteBytes() throws IOException {
+    final ByteArrayOutputStream out = new ByteArrayOutputStream();
+    byte[] expected = newPreFilledByteArray(100);
+    ByteStreams.write(expected, new OutputSupplier<OutputStream>() {
+      @Override public OutputStream getOutput() {
+        return out;
+      }
+    });
+    assertTrue(Arrays.equals(expected, out.toByteArray()));
+  }
+
+  public void testCopy() throws Exception {
+    ByteArrayOutputStream out = new ByteArrayOutputStream();
+    byte[] expected = newPreFilledByteArray(100);
+    long num = ByteStreams.copy(new ByteArrayInputStream(expected), out);
+    assertEquals(100, num);
+    assertTrue(Arrays.equals(expected, out.toByteArray()));
+  }
+
+  public void testCopyChannel() throws IOException {
+    byte[] expected = newPreFilledByteArray(100);
+    ByteArrayOutputStream out = new ByteArrayOutputStream();
+    WritableByteChannel outChannel = Channels.newChannel(out);
+
+    ReadableByteChannel inChannel =
+        Channels.newChannel(new ByteArrayInputStream(expected));
+    ByteStreams.copy(inChannel, outChannel);
+    assertTrue(Arrays.equals(expected, out.toByteArray()));
+  }
+
+  public void testReadFully() throws IOException {
+    byte[] b = new byte[10];
+
+    try {
+      ByteStreams.readFully(newTestStream(10), null, 0, 10);
+      fail("expected exception");
+    } catch (NullPointerException e) {
+    }
+
+    try {
+      ByteStreams.readFully(null, b, 0, 10);
+      fail("expected exception");
+    } catch (NullPointerException e) {
+    }
+
+    try {
+      ByteStreams.readFully(newTestStream(10), b, -1, 10);
+      fail("expected exception");
+    } catch (IndexOutOfBoundsException e) {
+    }
+
+    try {
+      ByteStreams.readFully(newTestStream(10), b, 0, -1);
+      fail("expected exception");
+    } catch (IndexOutOfBoundsException e) {
+    }
+
+    try {
+      ByteStreams.readFully(newTestStream(10), b, 0, -1);
+      fail("expected exception");
+    } catch (IndexOutOfBoundsException e) {
+    }
+
+    try {
+      ByteStreams.readFully(newTestStream(10), b, 2, 10);
+      fail("expected exception");
+    } catch (IndexOutOfBoundsException e) {
+    }
+
+    try {
+      ByteStreams.readFully(newTestStream(5), b, 0, 10);
+      fail("expected exception");
+    } catch (EOFException e) {
+    }
+
+    Arrays.fill(b, (byte) 0);
+    ByteStreams.readFully(newTestStream(10), b, 0, 0);
+    assertTrue(Arrays.equals(new byte[10], b));
+
+    Arrays.fill(b, (byte) 0);
+    ByteStreams.readFully(newTestStream(10), b, 0, 10);
+    assertTrue(Arrays.equals(newPreFilledByteArray(10), b));
+
+    Arrays.fill(b, (byte) 0);
+    ByteStreams.readFully(newTestStream(10), b, 0, 5);
+    assertTrue(Arrays.equals(new byte[]{0, 1, 2, 3, 4, 0, 0, 0, 0, 0}, b));
+  }
+
+  public void testSkipFully() throws IOException {
+    byte[] bytes = newPreFilledByteArray(100);
+    skipHelper(0, 0, new ByteArrayInputStream(bytes));
+    skipHelper(50, 50, new ByteArrayInputStream(bytes));
+    skipHelper(50, 50, new SlowSkipper(new ByteArrayInputStream(bytes), 1));
+    skipHelper(50, 50, new SlowSkipper(new ByteArrayInputStream(bytes), 0));
+    skipHelper(100, -1, new ByteArrayInputStream(bytes));
+    try {
+      skipHelper(101, 0, new ByteArrayInputStream(bytes));
+      fail("expected exception");
+    } catch (EOFException e) {
+    }
+  }
+
+  private void skipHelper(long n, int expect, InputStream in)
+      throws IOException {
+    ByteStreams.skipFully(in, n);
+    assertEquals(expect, in.read());
+    in.close();
+  }
+
+  // TODO(user): rename; violates rule that only immutable things can be all caps
+  private static final byte[] BYTES = new byte[] {
+      0x12, 0x34, 0x56, 0x78, 0x76, 0x54, 0x32, 0x10 };
+
+  public void testNewDataInput_empty() {
+    byte[] b = new byte[0];
+    ByteArrayDataInput in = ByteStreams.newDataInput(b);
+    try {
+      in.readInt();
+      fail();
+    } catch (IllegalStateException expected) {
+    }
+  }
+
+  public void testNewDataInput_normal() {
+    ByteArrayDataInput in = ByteStreams.newDataInput(BYTES);
+    assertEquals(0x12345678, in.readInt());
+    assertEquals(0x76543210, in.readInt());
+    try {
+      in.readInt();
+      fail();
+    } catch (IllegalStateException expected) {
+    }
+  }
+
+  public void testNewDataInput_readFully() {
+    ByteArrayDataInput in = ByteStreams.newDataInput(BYTES);
+    byte[] actual = new byte[BYTES.length];
+    in.readFully(actual);
+    assertEquals(BYTES, actual);
+  }
+
+  public void testNewDataInput_readFullyAndThenSome() {
+    ByteArrayDataInput in = ByteStreams.newDataInput(BYTES);
+    byte[] actual = new byte[BYTES.length * 2];
+    try {
+      in.readFully(actual);
+      fail();
+    } catch (IllegalStateException ex) {
+      assertTrue(ex.getCause() instanceof EOFException);
+    }
+  }
+
+  public void testNewDataInput_readFullyWithOffset() {
+    ByteArrayDataInput in = ByteStreams.newDataInput(BYTES);
+    byte[] actual = new byte[4];
+    in.readFully(actual, 2, 2);
+    assertEquals(0, actual[0]);
+    assertEquals(0, actual[1]);
+    assertEquals(BYTES[0], actual[2]);
+    assertEquals(BYTES[1], actual[3]);
+  }
+
+  public void testNewDataInput_readLine() {
+    ByteArrayDataInput in = ByteStreams.newDataInput(
+        "This is a line\r\nThis too\rand this\nand also this".getBytes(Charsets.UTF_8));
+    assertEquals("This is a line", in.readLine());
+    assertEquals("This too", in.readLine());
+    assertEquals("and this", in.readLine());
+    assertEquals("and also this", in.readLine());
+  }
+
+  public void testNewDataInput_readFloat() {
+    byte[] data = {0x12, 0x34, 0x56, 0x78, 0x76, 0x54, 0x32, 0x10};
+    ByteArrayDataInput in = ByteStreams.newDataInput(data);
+    assertEquals(Float.intBitsToFloat(0x12345678), in.readFloat(), 0.0);
+    assertEquals(Float.intBitsToFloat(0x76543210), in.readFloat(), 0.0);
+  }
+
+  public void testNewDataInput_readDouble() {
+    byte[] data = {0x12, 0x34, 0x56, 0x78, 0x76, 0x54, 0x32, 0x10};
+    ByteArrayDataInput in = ByteStreams.newDataInput(data);
+    assertEquals(Double.longBitsToDouble(0x1234567876543210L), in.readDouble(), 0.0);
+  }
+
+  public void testNewDataInput_readUTF() {
+    byte[] data = new byte[17];
+    data[1] = 15;
+    System.arraycopy("Kilroy was here".getBytes(Charsets.UTF_8), 0, data, 2, 15);
+    ByteArrayDataInput in = ByteStreams.newDataInput(data);
+    assertEquals("Kilroy was here", in.readUTF());
+  }
+
+  public void testNewDataInput_readChar() {
+    byte[] data = "qed".getBytes(Charsets.UTF_16BE);
+    ByteArrayDataInput in = ByteStreams.newDataInput(data);
+    assertEquals('q', in.readChar());
+    assertEquals('e', in.readChar());
+    assertEquals('d', in.readChar());
+  }
+
+  public void testNewDataInput_readUnsignedShort() {
+    byte[] data = {0, 0, 0, 1, (byte) 0xFF, (byte) 0xFF, 0x12, 0x34};
+    ByteArrayDataInput in = ByteStreams.newDataInput(data);
+    assertEquals(0, in.readUnsignedShort());
+    assertEquals(1, in.readUnsignedShort());
+    assertEquals(65535, in.readUnsignedShort());
+    assertEquals(0x1234, in.readUnsignedShort());
+  }
+
+  public void testNewDataInput_readLong() {
+    byte[] data = {0x12, 0x34, 0x56, 0x78, 0x76, 0x54, 0x32, 0x10};
+    ByteArrayDataInput in = ByteStreams.newDataInput(data);
+    assertEquals(0x1234567876543210L, in.readLong());
+  }
+
+  public void testNewDataInput_readBoolean() {
+    ByteArrayDataInput in = ByteStreams.newDataInput(BYTES);
+    assertTrue(in.readBoolean());
+  }
+
+  public void testNewDataInput_readByte() {
+    ByteArrayDataInput in = ByteStreams.newDataInput(BYTES);
+    for (int i = 0; i < BYTES.length; i++) {
+      assertEquals(BYTES[i], in.readByte());
+    }
+    try {
+      in.readByte();
+      fail();
+    } catch (IllegalStateException ex) {
+      assertTrue(ex.getCause() instanceof EOFException);
+    }
+  }
+
+  public void testNewDataInput_readUnsignedByte() {
+    ByteArrayDataInput in = ByteStreams.newDataInput(BYTES);
+    for (int i = 0; i < BYTES.length; i++) {
+      assertEquals(BYTES[i], in.readUnsignedByte());
+    }
+    try {
+      in.readUnsignedByte();
+      fail();
+    } catch (IllegalStateException ex) {
+      assertTrue(ex.getCause() instanceof EOFException);
+    }
+  }
+
+  public void testNewDataInput_offset() {
+    ByteArrayDataInput in = ByteStreams.newDataInput(BYTES, 2);
+    assertEquals(0x56787654, in.readInt());
+    try {
+      in.readInt();
+      fail();
+    } catch (IllegalStateException expected) {
+    }
+  }
+
+  public void testNewDataInput_skip() {
+    ByteArrayDataInput in = ByteStreams.newDataInput(new byte[2]);
+    in.skipBytes(2);
+    try {
+      in.skipBytes(1);
+    } catch (IllegalStateException expected) {
+    }
+  }
+
+  public void testNewDataOutput_empty() {
+    ByteArrayDataOutput out = ByteStreams.newDataOutput();
+    assertEquals(0, out.toByteArray().length);
+  }
+
+  public void testNewDataOutput_writeInt() {
+    ByteArrayDataOutput out = ByteStreams.newDataOutput();
+    out.writeInt(0x12345678);
+    out.writeInt(0x76543210);
+    assertTrue(Arrays.equals(BYTES, out.toByteArray()));
+  }
+
+  public void testNewDataOutput_sized() {
+    ByteArrayDataOutput out = ByteStreams.newDataOutput(4);
+    out.writeInt(0x12345678);
+    out.writeInt(0x76543210);
+    assertTrue(Arrays.equals(BYTES, out.toByteArray()));
+  }
+
+  public void testNewDataOutput_writeLong() {
+    ByteArrayDataOutput out = ByteStreams.newDataOutput();
+    out.writeLong(0x1234567876543210L);
+    assertTrue(Arrays.equals(BYTES, out.toByteArray()));
+  }
+
+  public void testNewDataOutput_writeByteArray() {
+    ByteArrayDataOutput out = ByteStreams.newDataOutput();
+    out.write(BYTES);
+    assertTrue(Arrays.equals(BYTES, out.toByteArray()));
+  }
+
+  public void testNewDataOutput_writeByte() {
+    ByteArrayDataOutput out = ByteStreams.newDataOutput();
+    out.write(0x12);
+    out.writeByte(0x34);
+    assertTrue(Arrays.equals(new byte[] {0x12, 0x34}, out.toByteArray()));
+  }
+
+  public void testNewDataOutput_writeByteOffset() {
+    ByteArrayDataOutput out = ByteStreams.newDataOutput();
+    out.write(BYTES, 4, 2);
+    byte[] expected = {BYTES[4], BYTES[5]};
+    assertEquals(expected, out.toByteArray());
+  }
+
+  public void testNewDataOutput_writeBoolean() {
+    ByteArrayDataOutput out = ByteStreams.newDataOutput();
+    out.writeBoolean(true);
+    out.writeBoolean(false);
+    byte[] expected = {(byte) 1, (byte) 0};
+    assertEquals(expected, out.toByteArray());
+  }
+
+  public void testNewDataOutput_writeChar() {
+    ByteArrayDataOutput out = ByteStreams.newDataOutput();
+    out.writeChar('a');
+    assertTrue(Arrays.equals(new byte[] {0, 97}, out.toByteArray()));
+  }
+
+  public void testNewDataOutput_writeChars() {
+    ByteArrayDataOutput out = ByteStreams.newDataOutput();
+    out.writeChars("r\u00C9sum\u00C9");
+    // need to remove byte order mark before comparing
+    byte[] expected = Arrays.copyOfRange("r\u00C9sum\u00C9".getBytes(Charsets.UTF_16), 2, 14);
+    assertEquals(expected, out.toByteArray());
+  }
+
+  public void testNewDataOutput_writeUTF() {
+    ByteArrayDataOutput out = ByteStreams.newDataOutput();
+    out.writeUTF("r\u00C9sum\u00C9");
+    byte[] expected ="r\u00C9sum\u00C9".getBytes(Charsets.UTF_8);
+    byte[] actual = out.toByteArray();
+    // writeUTF writes the length of the string in 2 bytes
+    assertEquals(0, actual[0]);
+    assertEquals(expected.length, actual[1]);
+    assertEquals(expected, Arrays.copyOfRange(actual, 2, actual.length));
+  }
+
+  public void testNewDataOutput_writeShort() {
+    ByteArrayDataOutput out = ByteStreams.newDataOutput();
+    out.writeShort(0x1234);
+    assertTrue(Arrays.equals(new byte[] {0x12, 0x34}, out.toByteArray()));
+  }
+
+  public void testNewDataOutput_writeDouble() {
+    ByteArrayDataOutput out = ByteStreams.newDataOutput();
+    out.writeDouble(Double.longBitsToDouble(0x1234567876543210L));
+    assertEquals(BYTES, out.toByteArray());
+  }
+
+  public void testNewDataOutput_writeFloat() {
+    ByteArrayDataOutput out = ByteStreams.newDataOutput();
+    out.writeFloat(Float.intBitsToFloat(0x12345678));
+    out.writeFloat(Float.intBitsToFloat(0x76543210));
+    assertEquals(BYTES, out.toByteArray());
+  }
+
+  public void testLength() throws IOException {
+    lengthHelper(Long.MAX_VALUE);
+    lengthHelper(7);
+    lengthHelper(1);
+    lengthHelper(0);
+
+    assertEquals(0, ByteStreams.length(
+        ByteStreams.newInputStreamSupplier(new byte[0])));
+  }
+
+  private void lengthHelper(final long skipLimit) throws IOException {
+    assertEquals(100, ByteStreams.length(new InputSupplier<InputStream>() {
+      @Override
+      public InputStream getInput() {
+        return new SlowSkipper(new ByteArrayInputStream(new byte[100]),
+            skipLimit);
+      }
+    }));
+  }
+
+  public void testSlice() throws IOException {
+    // Test preconditions
+    InputSupplier<? extends InputStream> supplier
+        = ByteStreams.newInputStreamSupplier(newPreFilledByteArray(100));
+    try {
+      ByteStreams.slice(supplier, -1, 10);
+      fail("expected exception");
+    } catch (IllegalArgumentException expected) {
+    }
+
+    try {
+      ByteStreams.slice(supplier, 0, -1);
+      fail("expected exception");
+    } catch (IllegalArgumentException expected) {
+    }
+
+    try {
+      ByteStreams.slice(null, 0, 10);
+      fail("expected exception");
+    } catch (NullPointerException expected) {
+    }
+
+    sliceHelper(0, 0, 0, 0);
+    sliceHelper(0, 0, 1, 0);
+    sliceHelper(100, 0, 10, 10);
+    sliceHelper(100, 0, 100, 100);
+    sliceHelper(100, 5, 10, 10);
+    sliceHelper(100, 5, 100, 95);
+    sliceHelper(100, 100, 0, 0);
+    sliceHelper(100, 100, 10, 0);
+
+    try {
+      sliceHelper(100, 101, 10, 0);
+      fail("expected exception");
+    } catch (EOFException expected) {
+    }
+  }
+
+  /**
+   * @param input the size of the input stream
+   * @param offset the first argument to {@link ByteStreams#slice}
+   * @param length the second argument to {@link ByteStreams#slice}
+   * @param expectRead the number of bytes we expect to read
+   */
+  private static void sliceHelper(
+      int input, int offset, long length, int expectRead) throws IOException {
+    Preconditions.checkArgument(expectRead == (int)
+        Math.max(0, Math.min(input, offset + length) - offset));
+    InputSupplier<? extends InputStream> supplier
+        = ByteStreams.newInputStreamSupplier(newPreFilledByteArray(input));
+    assertTrue(Arrays.equals(
+        newPreFilledByteArray(offset, expectRead),
+        ByteStreams.toByteArray(ByteStreams.slice(supplier, offset, length))));
+  }
+
+  private static InputStream newTestStream(int n) {
+    return new ByteArrayInputStream(newPreFilledByteArray(n));
+  }
+
+  private static CheckCloseSupplier.Input<InputStream> newCheckInput(
+      InputSupplier<? extends InputStream> delegate) {
+    return new CheckCloseSupplier.Input<InputStream>(delegate) {
+      @Override protected InputStream wrap(InputStream object,
+          final Callback callback) {
+        return new FilterInputStream(object) {
+          @Override public void close() throws IOException {
+            callback.delegateClosed();
+            super.close();
+          }
+        };
+      }
+    };
+  }
+
+  private static CheckCloseSupplier.Output<OutputStream> newCheckOutput(
+      OutputSupplier<? extends OutputStream> delegate) {
+    return new CheckCloseSupplier.Output<OutputStream>(delegate) {
+      @Override protected OutputStream wrap(OutputStream object,
+          final Callback callback) {
+        return new FilterOutputStream(object) {
+          @Override public void close() throws IOException {
+            callback.delegateClosed();
+            super.close();
+          }
+        };
+      }
+    };
+  }
+
+  /** Stream that will skip a maximum number of bytes at a time. */
+  private static class SlowSkipper extends FilterInputStream {
+    private final long max;
+
+    public SlowSkipper(InputStream in, long max) {
+      super(in);
+      this.max = max;
+    }
+
+    @Override public long skip(long n) throws IOException {
+      return super.skip(Math.min(max, n));
+    }
+  }
+
+  public void testByteProcessorStopEarly() throws IOException {
+    byte[] array = newPreFilledByteArray(6000);
+    assertEquals((Integer) 42,
+        ByteStreams.readBytes(ByteStreams.newInputStreamSupplier(array),
+            new ByteProcessor<Integer>() {
+              @Override
+              public boolean processBytes(byte[] buf, int off, int len) {
+                assertTrue(Arrays.equals(
+                    copyOfRange(buf, off, off + len),
+                    newPreFilledByteArray(4096)));
+                return false;
+              }
+
+              @Override
+              public Integer getResult() {
+                return 42;
+              }
+            }));
+  }
+
+  private static byte[] copyOfRange(byte[] in, int from, int to) {
+    byte[] out = new byte[to - from];
+    for (int i = 0; i < to - from; i++) {
+      out[i] = in[from + i];
+    }
+    return out;
+  }
+
+  private static void assertEquals(byte[] expected, byte[] actual) {
+    assertEquals(Bytes.asList(expected), Bytes.asList(actual));
+  }
+}
diff --git a/guava-tests/test/com/google/common/io/CharStreamsTest.java b/guava-tests/test/com/google/common/io/CharStreamsTest.java
new file mode 100644
index 0000000..c628afb
--- /dev/null
+++ b/guava-tests/test/com/google/common/io/CharStreamsTest.java
@@ -0,0 +1,318 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.io;
+
+import static com.google.common.base.Charsets.UTF_8;
+import static com.google.common.io.CharStreams.copy;
+import static com.google.common.io.CharStreams.newReaderSupplier;
+
+import com.google.common.base.Charsets;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.testing.TestLogHandler;
+
+import java.io.ByteArrayInputStream;
+import java.io.EOFException;
+import java.io.FilterReader;
+import java.io.FilterWriter;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.io.Writer;
+import java.util.List;
+
+/**
+ * Unit test for {@link CharStreams}.
+ *
+ * @author Chris Nokleberg
+ */
+public class CharStreamsTest extends IoTestCase {
+  private static final String TEXT
+      = "The quick brown fox jumped over the lazy dog.";
+
+  static final InputSupplier<? extends Reader> BROKEN_READ
+      = CharStreams.newReaderSupplier(ByteStreamsTest.BROKEN_READ, UTF_8);
+
+  static final OutputSupplier<? extends Writer> BROKEN_WRITE
+      = CharStreams.newWriterSupplier(ByteStreamsTest.BROKEN_WRITE, UTF_8);
+
+  static final InputSupplier<? extends Reader> BROKEN_CLOSE_INPUT
+      = CharStreams.newReaderSupplier(ByteStreamsTest.BROKEN_CLOSE_INPUT, UTF_8);
+
+  static final OutputSupplier<? extends Writer> BROKEN_CLOSE_OUTPUT
+      = CharStreams.newWriterSupplier(ByteStreamsTest.BROKEN_CLOSE_OUTPUT, UTF_8);
+
+  static final InputSupplier<? extends Reader> BROKEN_GET_INPUT
+      = CharStreams.newReaderSupplier(ByteStreamsTest.BROKEN_GET_INPUT, UTF_8);
+
+  static final OutputSupplier<? extends Writer> BROKEN_GET_OUTPUT
+      = CharStreams.newWriterSupplier(ByteStreamsTest.BROKEN_GET_OUTPUT, UTF_8);
+
+  private static final ImmutableSet<InputSupplier<? extends Reader>> BROKEN_INPUTS =
+      ImmutableSet.of(BROKEN_CLOSE_INPUT, BROKEN_GET_INPUT, BROKEN_READ);
+  private static final ImmutableSet<OutputSupplier<? extends Writer>> BROKEN_OUTPUTS
+      = ImmutableSet.of(BROKEN_CLOSE_OUTPUT, BROKEN_GET_OUTPUT, BROKEN_WRITE);
+
+  public void testToString() throws IOException {
+    assertEquals(TEXT, CharStreams.toString(new StringReader(TEXT)));
+    assertEquals(TEXT,
+        CharStreams.toString(CharStreams.newReaderSupplier(TEXT)));
+  }
+
+  public void testSkipFully_blockingRead() throws IOException {
+    Reader reader = new NonSkippingReader("abcdef");
+    CharStreams.skipFully(reader, 6);
+    assertEquals(-1, reader.read());
+  }
+
+  private static class NonSkippingReader extends StringReader {
+    NonSkippingReader(String s) {
+      super(s);
+    }
+
+    @Override
+    public long skip(long n) {
+      return 0;
+    }
+  }
+
+  public void testReadLines_fromReadable() throws IOException {
+    byte[] bytes = "a\nb\nc".getBytes(Charsets.UTF_8.name());
+    List<String> lines = CharStreams.readLines(
+        new InputStreamReader(new ByteArrayInputStream(bytes), Charsets.UTF_8));
+    assertEquals(ImmutableList.of("a", "b", "c"), lines);
+  }
+
+  public void testReadLines_withLineProcessor() throws IOException {
+    InputSupplier<StringReader> r = CharStreams.newReaderSupplier("a\nb\nc");
+
+    // Test a LineProcessor that always returns false.
+    LineProcessor<Integer> alwaysFalse = new LineProcessor<Integer>() {
+      int seen;
+      @Override
+      public boolean processLine(String line) {
+        seen++;
+        return false;
+      }
+      @Override
+      public Integer getResult() {
+        return seen;
+      }
+    };
+    assertEquals("processLine was called more than once", 1,
+        CharStreams.readLines(r, alwaysFalse).intValue());
+
+    // Test a LineProcessor that always returns true.
+    LineProcessor<Integer> alwaysTrue = new LineProcessor<Integer>() {
+      int seen;
+      @Override
+      public boolean processLine(String line) {
+        seen++;
+        return true;
+      }
+      @Override
+      public Integer getResult() {
+        return seen;
+      }
+    };
+    assertEquals("processLine was not called for all the lines", 3,
+        CharStreams.readLines(r, alwaysTrue).intValue());
+
+    // Test a LineProcessor that is conditional.
+    final StringBuilder sb = new StringBuilder();
+    LineProcessor<Integer> conditional = new LineProcessor<Integer>() {
+      int seen;
+      @Override
+      public boolean processLine(String line) {
+        seen++;
+        sb.append(line);
+        return seen < 2;
+      }
+      @Override
+      public Integer getResult() {
+        return seen;
+      }
+    };
+    assertEquals(2, CharStreams.readLines(r, conditional).intValue());
+    assertEquals("ab", sb.toString());
+  }
+
+  public void testAlwaysCloses() throws IOException {
+    CheckCloseSupplier.Input<Reader> okRead
+        = newCheckReader(CharStreams.newReaderSupplier(TEXT));
+    CheckCloseSupplier.Output<Writer> okWrite
+        = newCheckWriter(new OutputSupplier<Writer>() {
+          @Override
+          public Writer getOutput() {
+            return new StringWriter();
+          }
+        });
+    CheckCloseSupplier.Input<Reader> brokenRead = newCheckReader(BROKEN_READ);
+    CheckCloseSupplier.Output<Writer> brokenWrite
+        = newCheckWriter(BROKEN_WRITE);
+
+    CharStreams.copy(okRead, okWrite);
+    assertTrue(okRead.areClosed());
+    assertTrue(okWrite.areClosed());
+
+    try {
+      CharStreams.copy(okRead, brokenWrite);
+      fail("expected exception");
+    } catch (Exception e) {
+      assertEquals("broken write", e.getMessage());
+    }
+    assertTrue(okRead.areClosed());
+    assertTrue(brokenWrite.areClosed());
+
+    try {
+      CharStreams.copy(brokenRead, okWrite);
+      fail("expected exception");
+    } catch (Exception e) {
+      assertEquals("broken read", e.getMessage());
+    }
+    assertTrue(brokenRead.areClosed());
+    assertTrue(okWrite.areClosed());
+
+    try {
+      CharStreams.copy(brokenRead, brokenWrite);
+      fail("expected exception");
+    } catch (Exception e) {
+      assertEquals("broken read", e.getMessage());
+    }
+    assertTrue(brokenRead.areClosed());
+    assertTrue(brokenWrite.areClosed());
+
+    assertEquals(TEXT, CharStreams.toString(okRead));
+    assertTrue(okRead.areClosed());
+
+    try {
+      CharStreams.toString(brokenRead);
+      fail("expected exception");
+    } catch (Exception e) {
+      assertEquals("broken read", e.getMessage());
+    }
+    assertTrue(brokenRead.areClosed());
+
+    try {
+      CharStreams.write("hello world", brokenWrite);
+      fail("expected exception");
+    } catch (Exception e) {
+      assertEquals("broken write", e.getMessage());
+    }
+    assertTrue(brokenWrite.areClosed());
+  }
+
+  private static int getAndResetRecords(TestLogHandler logHandler) {
+    int records = logHandler.getStoredLogRecords().size();
+    logHandler.clear();
+    return records;
+  }
+
+  private static void runFailureTest(
+      InputSupplier<? extends Reader> in, OutputSupplier<? extends Writer> out) {
+    try {
+      copy(in, out);
+      fail();
+    } catch (IOException expected) {
+    }
+  }
+
+  private static OutputSupplier<Writer> newStringWriterSupplier() {
+    return new OutputSupplier<Writer>() {
+      @Override public Writer getOutput() {
+        return new StringWriter();
+      }
+    };
+  }
+
+  public void testSkipFully_EOF() throws IOException {
+    Reader reader = new StringReader("abcde");
+    try {
+      CharStreams.skipFully(reader, 6);
+      fail("expected EOFException");
+    } catch (EOFException e) {
+      // expected
+    }
+  }
+
+  public void testSkipFully() throws IOException {
+    String testString = "abcdef";
+    Reader reader = new StringReader(testString);
+
+    assertEquals(testString.charAt(0), reader.read());
+    CharStreams.skipFully(reader, 1);
+    assertEquals(testString.charAt(2), reader.read());
+    CharStreams.skipFully(reader, 2);
+    assertEquals(testString.charAt(5), reader.read());
+
+    assertEquals(-1, reader.read());
+  }
+
+  public void testAsWriter() {
+    // Should wrap Appendable in a new object
+    Appendable plainAppendable = new StringBuilder();
+    Writer result = CharStreams.asWriter(plainAppendable);
+    assertNotSame(plainAppendable, result);
+    assertNotNull(result);
+
+    // A Writer should not be wrapped
+    Appendable secretlyAWriter = new StringWriter();
+    result = CharStreams.asWriter(secretlyAWriter);
+    assertSame(secretlyAWriter, result);
+  }
+
+  public void testWriteString() throws IOException {
+    final StringWriter sw = new StringWriter();
+    String expected = "foo";
+    CharStreams.write(expected, new OutputSupplier<Writer>() {
+      @Override public Writer getOutput() {
+        return sw;
+      }
+    });
+    assertEquals(expected, sw.toString());
+  }
+
+  private static CheckCloseSupplier.Input<Reader> newCheckReader(
+      InputSupplier<? extends Reader> delegate) {
+    return new CheckCloseSupplier.Input<Reader>(delegate) {
+      @Override protected Reader wrap(Reader object, final Callback callback) {
+        return new FilterReader(object) {
+          @Override public void close() throws IOException {
+            callback.delegateClosed();
+            super.close();
+          }
+        };
+      }
+    };
+  }
+
+  private static CheckCloseSupplier.Output<Writer> newCheckWriter(
+      OutputSupplier<? extends Writer> delegate) {
+    return new CheckCloseSupplier.Output<Writer>(delegate) {
+      @Override protected Writer wrap(Writer object, final Callback callback) {
+        return new FilterWriter(object) {
+          @Override public void close() throws IOException {
+            callback.delegateClosed();
+            super.close();
+          }
+        };
+      }
+    };
+  }
+}
diff --git a/guava-tests/test/com/google/common/io/CheckCloseSupplier.java b/guava-tests/test/com/google/common/io/CheckCloseSupplier.java
new file mode 100644
index 0000000..12711f7
--- /dev/null
+++ b/guava-tests/test/com/google/common/io/CheckCloseSupplier.java
@@ -0,0 +1,93 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.io;
+
+import com.google.common.collect.Sets;
+
+import java.io.IOException;
+import java.util.Set;
+
+/**
+ * The purpose of the CheckCloseSupplier is to report when all closeable objects
+ * supplied by the delegate supplier are closed. To do this, the factory method
+ * returns a decorated version of the {@code delegate} supplied in the
+ * constructor. The decoration mechanism is left up to the subclass via the
+ * abstract {@link #wrap} method.
+ *
+ * <p>The decorated object returned from {@link #wrap} should ideally override
+ * its {@code close} method to not only call {@code super.close()} but to also
+ * call {@code callback.delegateClosed()}.
+ *
+ * @author Chris Nokleberg
+ */
+abstract class CheckCloseSupplier<T> {
+  private final Set<Callback> open = Sets.newHashSet();
+
+  abstract static class Input<T> extends CheckCloseSupplier<T>
+      implements InputSupplier<T> {
+    private final InputSupplier<? extends T> delegate;
+
+    public Input(InputSupplier<? extends T> delegate) {
+      this.delegate = delegate;
+    }
+
+    @Override public T getInput() throws IOException {
+      return wrap(delegate.getInput(), newCallback());
+    }
+  }
+
+  abstract static class Output<T> extends CheckCloseSupplier<T>
+      implements OutputSupplier<T> {
+    private final OutputSupplier<? extends T> delegate;
+
+    public Output(OutputSupplier<? extends T> delegate) {
+      this.delegate = delegate;
+    }
+
+    @Override public T getOutput() throws IOException {
+      return wrap(delegate.getOutput(), newCallback());
+    }
+  }
+
+  public final class Callback {
+    public void delegateClosed() {
+      open.remove(this);
+    }
+  }
+
+  protected Callback newCallback() {
+    Callback callback = new Callback();
+    open.add(callback);
+    return callback;
+  }
+
+  /**
+   * Subclasses should wrap the given object and call
+   * {@link Callback#delegateClosed} when the close method of the delegate is
+   * called, to inform the supplier that the underlying
+   * {@code Closeable} is not longer open.
+   *
+   * @param object the object to wrap.
+   * @param callback the object that the wrapper should call to signal that the
+   */
+  protected abstract T wrap(T object, Callback callback);
+
+  /** Returns true if all the closeables have been closed closed */
+  public boolean areClosed() {
+    return open.isEmpty();
+  }
+}
diff --git a/guava-tests/test/com/google/common/io/CloseablesTest.java b/guava-tests/test/com/google/common/io/CloseablesTest.java
new file mode 100644
index 0000000..f75d4dc
--- /dev/null
+++ b/guava-tests/test/com/google/common/io/CloseablesTest.java
@@ -0,0 +1,186 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.io;
+
+import static org.easymock.EasyMock.createStrictMock;
+import static org.easymock.EasyMock.expectLastCall;
+import static org.easymock.EasyMock.replay;
+import static org.easymock.EasyMock.reset;
+import static org.easymock.EasyMock.verify;
+
+import junit.framework.TestCase;
+
+import java.io.Closeable;
+import java.io.Flushable;
+import java.io.IOException;
+
+/**
+ * Unit tests for {@link Closeables} and {@link Flushables}.
+ *
+ * <p>Checks proper closing and flushing behavior, and ensures that
+ * IOExceptions on Closeable.close() or Flushable.flush() are not
+ * propagated out from the {@link Closeables#close} method if {@code
+ * swallowException} is true.
+ *
+ * @author Michael Lancaster
+ */
+public class CloseablesTest extends TestCase {
+  private Closeable mockCloseable;
+  private Flushable mockFlushable;
+
+  public void testClose_closeableClean() throws IOException {
+    // make sure that no exception is thrown regardless of value of
+    // 'swallowException' when the mock does not throw an exception.
+    setupCloseable(false);
+    doClose(mockCloseable, false, false);
+
+    setupCloseable(false);
+    doClose(mockCloseable, true, false);
+  }
+
+  public void testClose_closeableWithEatenException() throws IOException {
+    // make sure that no exception is thrown if 'swallowException' is true
+    // when the mock does throw an exception.
+    setupCloseable(true);
+    doClose(mockCloseable, true);
+  }
+
+  public void testClose_closeableWithThrownException() throws IOException {
+    // make sure that the exception is thrown if 'swallowException' is false
+    // when the mock does throw an exception.
+    setupCloseable(true);
+    doClose(mockCloseable, false);
+  }
+
+  public void testCloseQuietly_closeableWithEatenException()
+      throws IOException {
+    // make sure that no exception is thrown by CloseQuietly when the mock does
+    // throw an exception, either on close, on flush, or both.
+    setupCloseable(true);
+    Closeables.closeQuietly(mockCloseable);
+  }
+
+  public void testFlush_clean() throws IOException {
+    // make sure that no exception is thrown regardless of value of
+    // 'swallowException' when the mock does not throw an exception.
+    setupFlushable(false);
+    doFlush(mockFlushable, false, false);
+
+    setupFlushable(false);
+    doFlush(mockFlushable, true, false);
+  }
+
+  public void testFlush_flushableWithEatenException() throws IOException {
+    // make sure that no exception is thrown if 'swallowException' is true
+    // when the mock does throw an exception on flush.
+    setupFlushable(true);
+    doFlush(mockFlushable, true, false);
+  }
+
+  public void testFlush_flushableWithThrownException() throws IOException {
+    // make sure that the exception is thrown if 'swallowException' is false
+    // when the mock does throw an exception on flush.
+    setupFlushable(true);
+    doFlush(mockFlushable, false, true);
+  }
+
+  public void testFlushQuietly_flushableWithEatenException()
+      throws IOException {
+    // make sure that no exception is thrown by CloseQuietly when the mock does
+    // throw an exception on flush.
+    setupFlushable(true);
+    Flushables.flushQuietly(mockFlushable);
+  }
+
+  public void testCloseNull() throws IOException {
+    Closeables.close(null, true);
+    Closeables.close(null, false);
+    Closeables.closeQuietly(null);
+  }
+
+  @Override protected void setUp() throws Exception {
+    mockCloseable = createStrictMock(Closeable.class);
+    mockFlushable = createStrictMock(Flushable.class);
+  }
+
+  private void expectThrown() {
+    expectLastCall().andThrow(new IOException("This should only appear in the "
+        + "logs. It should not be rethrown."));
+  }
+
+  // Set up a closeable to expect to be closed, and optionally to throw an
+  // exception.
+  private void setupCloseable(boolean shouldThrow) throws IOException {
+    reset(mockCloseable);
+    mockCloseable.close();
+    if (shouldThrow) {
+      expectThrown();
+    }
+    replay(mockCloseable);
+  }
+
+  // Set up a flushable to expect to be flushed and closed, and optionally to
+  // throw an exception.
+  private void setupFlushable(boolean shouldThrowOnFlush) throws IOException {
+    reset(mockFlushable);
+    mockFlushable.flush();
+    if (shouldThrowOnFlush) {
+      expectThrown();
+    }
+    replay(mockFlushable);
+  }
+
+  private void doClose(Closeable closeable, boolean swallowException) {
+    doClose(closeable, swallowException, !swallowException);
+  }
+
+  // Close the closeable using the Closeables, passing in the swallowException
+  // parameter. expectThrown determines whether we expect an exception to
+  // be thrown by Closeables.close;
+  private void doClose(Closeable closeable, boolean swallowException,
+      boolean expectThrown) {
+    try {
+      Closeables.close(closeable, swallowException);
+      if (expectThrown) {
+        fail("Didn't throw exception.");
+      }
+    } catch (IOException e) {
+      if (!expectThrown) {
+        fail("Threw exception");
+      }
+    }
+    verify(closeable);
+  }
+
+  // Flush the flushable using the Flushables, passing in the swallowException
+  // parameter. expectThrown determines whether we expect an exception to
+  // be thrown by Flushables.flush;
+  private void doFlush(Flushable flushable, boolean swallowException,
+      boolean expectThrown) {
+    try {
+      Flushables.flush(flushable, swallowException);
+      if (expectThrown) {
+        fail("Didn't throw exception.");
+      }
+    } catch (IOException e) {
+      if (!expectThrown) {
+        fail("Threw exception");
+      }
+    }
+    verify(flushable);
+  }
+}
diff --git a/guava-tests/test/com/google/common/io/CountingInputStreamTest.java b/guava-tests/test/com/google/common/io/CountingInputStreamTest.java
new file mode 100644
index 0000000..9e06fef
--- /dev/null
+++ b/guava-tests/test/com/google/common/io/CountingInputStreamTest.java
@@ -0,0 +1,119 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.io;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+/**
+ * Unit tests for {@link CountingInputStream}.
+ *
+ * @author Chris Nokleberg
+ */
+public class CountingInputStreamTest extends IoTestCase {
+  private CountingInputStream counter;
+
+  @Override protected void setUp() throws Exception {
+    super.setUp();
+    counter = new CountingInputStream(new ByteArrayInputStream(new byte[20]));
+  }
+
+  public void testReadSingleByte() throws IOException {
+    assertEquals(0, counter.getCount());
+    assertEquals(0, counter.read());
+    assertEquals(1, counter.getCount());
+  }
+
+  public void testReadArray() throws IOException {
+    assertEquals(10, counter.read(new byte[10]));
+    assertEquals(10, counter.getCount());
+  }
+
+  public void testReadArrayRange() throws IOException {
+    assertEquals(3, counter.read(new byte[10], 1, 3));
+    assertEquals(3, counter.getCount());
+  }
+
+  public void testSkip() throws IOException {
+    assertEquals(10, counter.skip(10));
+    assertEquals(10, counter.getCount());
+  }
+
+  public void testSkipEOF() throws IOException {
+    assertEquals(20, counter.skip(30));
+    assertEquals(20, counter.getCount());
+    assertEquals(0, counter.skip(20));
+    assertEquals(20, counter.getCount());
+
+    // Test reading a single byte while we're in the right state
+    assertEquals(-1, counter.read());
+    assertEquals(20, counter.getCount());
+  }
+
+  public void testReadArrayEOF() throws IOException {
+    assertEquals(20, counter.read(new byte[30]));
+    assertEquals(20, counter.getCount());
+    assertEquals(-1, counter.read(new byte[30]));
+    assertEquals(20, counter.getCount());
+  }
+
+  public void testMark() throws Exception {
+    assertTrue(counter.markSupported());
+    assertEquals(10, counter.read(new byte[10]));
+    assertEquals(10, counter.getCount());
+    counter.mark(5);
+    counter.read();
+    assertEquals(11, counter.getCount());
+    counter.reset();
+    assertEquals(10, counter.getCount());
+    assertEquals(10, counter.skip(100));
+    assertEquals(20, counter.getCount());
+  }
+  
+  public void testMarkNotSet() {
+    try {
+      counter.reset();
+      fail();
+    } catch (IOException expected) {
+      assertEquals("Mark not set", expected.getMessage());
+    }
+  }
+  
+  public void testMarkNotSupported() {
+    counter = new CountingInputStream(new UnmarkableInputStream());
+
+    try {
+      counter.reset();
+      fail();
+    } catch (IOException expected) {
+      assertEquals("Mark not supported", expected.getMessage());
+    }
+  }
+  
+  private static class UnmarkableInputStream extends InputStream {
+    @Override
+    public int read() throws IOException {
+      return 0;
+    }
+    
+    @Override
+    public boolean markSupported() {
+      return false;
+    }    
+  }
+}
diff --git a/guava-tests/test/com/google/common/io/CountingOutputStreamTest.java b/guava-tests/test/com/google/common/io/CountingOutputStreamTest.java
new file mode 100644
index 0000000..870692b
--- /dev/null
+++ b/guava-tests/test/com/google/common/io/CountingOutputStreamTest.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.io;
+
+import java.io.ByteArrayOutputStream;
+
+/**
+ * Unit tests for {@link CountingOutputStream}.
+ *
+ * @author Chris Nokleberg
+ */
+public class CountingOutputStreamTest extends IoTestCase {
+
+  public void testCount() throws Exception {
+    int written = 0;
+    ByteArrayOutputStream out = new ByteArrayOutputStream();
+    CountingOutputStream counter = new CountingOutputStream(out);
+    assertEquals(written, out.size());
+    assertEquals(written, counter.getCount());
+
+    counter.write(0);
+    written += 1;
+    assertEquals(written, out.size());
+    assertEquals(written, counter.getCount());
+
+    byte[] data = new byte[10];
+    counter.write(data);
+    written += 10;
+    assertEquals(written, out.size());
+    assertEquals(written, counter.getCount());
+
+    counter.write(data, 0, 5);
+    written += 5;
+    assertEquals(written, out.size());
+    assertEquals(written, counter.getCount());
+
+    counter.write(data, 2, 5);
+    written += 5;
+    assertEquals(written, out.size());
+    assertEquals(written, counter.getCount());
+
+    // Test that illegal arguments do not affect count
+    try {
+      counter.write(data, 0, data.length + 1);
+      fail("expected exception");
+    } catch (IndexOutOfBoundsException expected) {
+    }
+    assertEquals(written, out.size());
+    assertEquals(written, counter.getCount());
+  }
+}
diff --git a/guava-tests/test/com/google/common/io/FileBackedOutputStreamTest.java b/guava-tests/test/com/google/common/io/FileBackedOutputStreamTest.java
new file mode 100644
index 0000000..ce698e4
--- /dev/null
+++ b/guava-tests/test/com/google/common/io/FileBackedOutputStreamTest.java
@@ -0,0 +1,166 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.io;
+
+import com.google.common.testing.GcFinalization;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.Arrays;
+
+/**
+ * Unit tests for {@link FileBackedOutputStream}.
+ *
+ * @author Chris Nokleberg
+ */
+public class FileBackedOutputStreamTest extends IoTestCase {
+
+  public void testThreshold() throws Exception {
+    testThreshold(0, 100, true, false);
+    testThreshold(10, 100, true, false);
+    testThreshold(100, 100, true, false);
+    testThreshold(1000, 100, true, false);
+    testThreshold(0, 100, false, false);
+    testThreshold(10, 100, false, false);
+    testThreshold(100, 100, false, false);
+    testThreshold(1000, 100, false, false);
+  }
+
+  public void testFinalizeDeletesFile() throws Exception {
+    byte[] data = newPreFilledByteArray(100);
+    FileBackedOutputStream out = new FileBackedOutputStream(0, true);
+
+    write(out, data, 0, 100, true);
+    final File file = out.getFile();
+    assertEquals(100, file.length());
+    assertTrue(file.exists());
+    out.close();
+
+    // Make sure that finalize deletes the file
+    out = null;
+
+    // times out and throws RuntimeException on failure
+    GcFinalization.awaitDone(new GcFinalization.FinalizationPredicate() {
+      @Override
+      public boolean isDone() {
+        return !file.exists();
+      }
+    });
+  }
+
+  public void testThreshold_resetOnFinalize() throws Exception {
+    testThreshold(0, 100, true, true);
+    testThreshold(10, 100, true, true);
+    testThreshold(100, 100, true, true);
+    testThreshold(1000, 100, true, true);
+    testThreshold(0, 100, false, true);
+    testThreshold(10, 100, false, true);
+    testThreshold(100, 100, false, true);
+    testThreshold(1000, 100, false, true);
+  }
+
+  private void testThreshold(int fileThreshold, int dataSize, boolean singleByte,
+      boolean resetOnFinalize) throws IOException {
+    byte[] data = newPreFilledByteArray(dataSize);
+    FileBackedOutputStream out = new FileBackedOutputStream(fileThreshold, resetOnFinalize);
+    InputSupplier<InputStream> supplier = out.getSupplier();
+    int chunk1 = Math.min(dataSize, fileThreshold);
+    int chunk2 = dataSize - chunk1;
+
+    // Write just enough to not trip the threshold
+    if (chunk1 > 0) {
+      write(out, data, 0, chunk1, singleByte);
+      assertTrue(ByteStreams.equal(
+          ByteStreams.newInputStreamSupplier(data, 0, chunk1), supplier));
+    }
+    File file = out.getFile();
+    assertNull(file);
+
+    // Write data to go over the threshold
+    if (chunk2 > 0) {
+      write(out, data, chunk1, chunk2, singleByte);
+      file = out.getFile();
+      assertEquals(dataSize, file.length());
+      assertTrue(file.exists());
+    }
+    out.close();
+
+    // Check that supplier returns the right data
+    assertTrue(Arrays.equals(data, ByteStreams.toByteArray(supplier)));
+
+    // Make sure that reset deleted the file
+    out.reset();
+    if (file != null) {
+      assertFalse(file.exists());
+    }
+  }
+
+  private static void write(
+      OutputStream out, byte[] b, int off, int len, boolean singleByte)
+      throws IOException {
+    if (singleByte) {
+      for (int i = off; i < off + len; i++) {
+        out.write(b[i]);
+      }
+    } else {
+      out.write(b, off, len);
+    }
+    out.flush(); // for coverage
+  }
+
+  // TODO(chrisn): only works if we ensure we have crossed file threshold
+
+  public void testWriteErrorAfterClose() throws Exception {
+    byte[] data = newPreFilledByteArray(100);
+    FileBackedOutputStream out = new FileBackedOutputStream(50);
+    InputSupplier<InputStream> supplier = out.getSupplier();
+
+    out.write(data);
+    assertTrue(Arrays.equals(data, ByteStreams.toByteArray(supplier)));
+
+    out.close();
+    try {
+      out.write(42);
+      fail("expected exception");
+    } catch (IOException expected) {
+      // expected
+    }
+
+    // Verify that write had no effect
+    assertTrue(Arrays.equals(data, ByteStreams.toByteArray(supplier)));
+    out.reset();
+  }
+
+  public void testReset() throws Exception {
+    byte[] data = newPreFilledByteArray(100);
+    FileBackedOutputStream out = new FileBackedOutputStream(Integer.MAX_VALUE);
+    InputSupplier<InputStream> supplier = out.getSupplier();
+
+    out.write(data);
+    assertTrue(Arrays.equals(data, ByteStreams.toByteArray(supplier)));
+
+    out.reset();
+    assertTrue(Arrays.equals(new byte[0], ByteStreams.toByteArray(supplier)));
+
+    out.write(data);
+    assertTrue(Arrays.equals(data, ByteStreams.toByteArray(supplier)));
+
+    out.close();
+  }
+}
diff --git a/guava-tests/test/com/google/common/io/FilesSimplifyPathTest.java b/guava-tests/test/com/google/common/io/FilesSimplifyPathTest.java
new file mode 100644
index 0000000..212ad61
--- /dev/null
+++ b/guava-tests/test/com/google/common/io/FilesSimplifyPathTest.java
@@ -0,0 +1,307 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.io;
+
+import static com.google.common.base.Charsets.UTF_8;
+import static com.google.common.io.Files.simplifyPath;
+
+import com.google.common.base.CharMatcher;
+import com.google.common.base.Splitter;
+
+import junit.framework.TestCase;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.Iterator;
+
+/**
+ * Unit tests for {@link Files#simplifyPath}.
+ *
+ * @author Pablo Bellver
+ */
+public class FilesSimplifyPathTest extends TestCase {
+
+  public void testSimplifyEmptyString() {
+    assertEquals(".", simplifyPath(""));
+  }
+
+  public void testSimplifyDot() {
+    assertEquals(".", simplifyPath("."));
+  }
+  
+  public void testSimplifyWhiteSpace() {
+    assertEquals(" ", simplifyPath(" "));
+  }
+
+  public void testSimplify2() {
+    assertEquals("x", simplifyPath("x"));
+  }
+
+  public void testSimplify3() {
+    assertEquals("/a/b/c/d", simplifyPath("/a/b/c/d"));
+  }
+
+  public void testSimplify4() {
+    assertEquals("/a/b/c/d", simplifyPath("/a/b/c/d/"));
+  }
+
+  public void testSimplify5() {
+    assertEquals("/a/b", simplifyPath("/a//b"));
+  }
+
+  public void testSimplify6() {
+    assertEquals("/a/b", simplifyPath("//a//b/"));
+  }
+
+  public void testSimplify7() {
+    assertEquals("/", simplifyPath("/.."));
+  }
+
+  public void testSimplify8() {
+    assertEquals("/", simplifyPath("/././././"));
+  }
+
+  public void testSimplify9() {
+    assertEquals("/a", simplifyPath("/a/b/.."));
+  }
+
+  public void testSimplify10() {
+    assertEquals("/", simplifyPath("/a/b/../../.."));
+  }
+
+  public void testSimplify11() {
+    assertEquals("/", simplifyPath("//a//b/..////../..//"));
+  }
+
+  public void testSimplify12() {
+    assertEquals("/x", simplifyPath("//a//../x//"));
+  }
+  
+  public void testSimplify13() {
+    assertEquals("../c", simplifyPath("a/b/../../../c"));
+  }
+  
+  public void testSimplifyDotDot() {
+    assertEquals("..", simplifyPath(".."));
+  }
+
+  public void testSimplifyDotDotSlash() {
+    assertEquals("..", simplifyPath("../"));
+    assertEquals("..", simplifyPath("a/../.."));
+    assertEquals("..", simplifyPath("a/../../"));
+  }
+  
+  public void testSimplifyDotDots() {
+    assertEquals("../..", simplifyPath("a/../../.."));
+    assertEquals("../../..", simplifyPath("a/../../../.."));
+  }
+  
+  public void testSimplifyRootedDotDots() {
+    assertEquals("/", simplifyPath("/../../.."));
+    assertEquals("/", simplifyPath("/../../../"));
+  }
+  
+  // b/4558855
+  public void testMadbotsBug() {
+    assertEquals("../this", simplifyPath("../this"));
+    assertEquals("../this/is/ok", simplifyPath("../this/is/ok"));
+    assertEquals("../ok", simplifyPath("../this/../ok"));
+  }
+  
+  // https://code.google.com/p/guava-libraries/issues/detail?id=705
+  public void test705() {
+    assertEquals("../b", simplifyPath("x/../../b"));
+    assertEquals("b", simplifyPath("x/../b"));
+  }
+  
+  // https://code.google.com/p/guava-libraries/issues/detail?id=716
+  public void test716() {
+    assertEquals("b", simplifyPath("./b"));
+    assertEquals("b", simplifyPath("./b/."));
+    assertEquals("b", simplifyPath("././b/./."));
+    assertEquals("b", simplifyPath("././b"));
+    assertEquals("a/b", simplifyPath("./a/b"));
+  }
+  
+  public void testHiddenFiles() {
+    assertEquals(".b", simplifyPath(".b"));
+    assertEquals(".b", simplifyPath("./.b"));
+    assertEquals(".metadata/b", simplifyPath(".metadata/b"));
+    assertEquals(".metadata/b", simplifyPath("./.metadata/b"));
+  }
+  
+  // https://code.google.com/p/guava-libraries/issues/detail?id=716
+  public void testMultipleDotFilenames() {
+    assertEquals("..a", simplifyPath("..a"));
+    assertEquals("/..a", simplifyPath("/..a"));
+    assertEquals("/..a/..b", simplifyPath("/..a/..b"));
+    assertEquals("/.....a/..b", simplifyPath("/.....a/..b"));
+    assertEquals("..../....", simplifyPath("..../...."));
+    assertEquals("..a../..b..", simplifyPath("..a../..b.."));
+  }
+
+  public void testSlashDot() {
+    assertEquals("/", simplifyPath("/."));    
+  }
+
+  // http://code.google.com/p/guava-libraries/issues/detail?id=722
+  public void testInitialSlashDotDot() {
+    assertEquals("/c", simplifyPath("/../c"));
+  }
+    
+  // http://code.google.com/p/guava-libraries/issues/detail?id=722
+  public void testInitialSlashDot() {  
+    assertEquals("/a", simplifyPath("/./a"));
+    assertEquals("/.a", simplifyPath("/.a/a/.."));
+  }
+
+  // http://code.google.com/p/guava-libraries/issues/detail?id=722
+  public void testConsecutiveParentsAfterPresent() {
+    assertEquals("../..", simplifyPath("./../../"));
+    assertEquals("../..", simplifyPath("./.././../"));
+  }
+
+  /*
+   * We co-opt some URI resolution tests for our purposes.
+   * Some of the tests have queries and anchors that are a little silly here.
+   */
+  
+  /** http://gbiv.com/protocols/uri/rfc/rfc2396.html#rfc.section.C.1 */
+  public void testRfc2396Normal() {
+    assertEquals("/a/b/c/g", simplifyPath("/a/b/c/g"));
+    assertEquals("/a/b/c/g", simplifyPath("/a/b/c/./g"));
+    assertEquals("/a/b/c/g", simplifyPath("/a/b/c/g/"));
+
+    assertEquals("/a/b/c/g?y", simplifyPath("/a/b/c/g?y"));
+    assertEquals("/a/b/c/g#s", simplifyPath("/a/b/c/g#s"));
+    assertEquals("/a/b/c/g?y#s", simplifyPath("/a/b/c/g?y#s"));
+    assertEquals("/a/b/c/;x", simplifyPath("/a/b/c/;x"));
+    assertEquals("/a/b/c/g;x", simplifyPath("/a/b/c/g;x"));
+    assertEquals("/a/b/c/g;x?y#s", simplifyPath("/a/b/c/g;x?y#s"));
+    assertEquals("/a/b/c", simplifyPath("/a/b/c/."));
+    assertEquals("/a/b/c", simplifyPath("/a/b/c/./"));
+    assertEquals("/a/b", simplifyPath("/a/b/c/.."));
+    assertEquals("/a/b", simplifyPath("/a/b/c/../"));
+    assertEquals("/a/b/g", simplifyPath("/a/b/c/../g"));
+    assertEquals("/a", simplifyPath("/a/b/c/../.."));
+    assertEquals("/a", simplifyPath("/a/b/c/../../"));
+    assertEquals("/a/g", simplifyPath("/a/b/c/../../g"));
+  }
+
+  /** http://gbiv.com/protocols/uri/rfc/rfc2396.html#rfc.section.C.2 */
+  public void testRfc2396Abnormal() {
+    assertEquals("/a/b/c/g.", simplifyPath("/a/b/c/g."));
+    assertEquals("/a/b/c/.g", simplifyPath("/a/b/c/.g"));
+    assertEquals("/a/b/c/g..", simplifyPath("/a/b/c/g.."));
+    assertEquals("/a/b/c/..g", simplifyPath("/a/b/c/..g"));
+    assertEquals("/a/b/g", simplifyPath("/a/b/c/./../g"));
+    assertEquals("/a/b/c/g", simplifyPath("/a/b/c/./g/."));
+    assertEquals("/a/b/c/g/h", simplifyPath("/a/b/c/g/./h"));
+    assertEquals("/a/b/c/h", simplifyPath("/a/b/c/g/../h"));
+    assertEquals("/a/b/c/g;x=1/y", simplifyPath("/a/b/c/g;x=1/./y"));
+    assertEquals("/a/b/c/y", simplifyPath("/a/b/c/g;x=1/../y"));
+  }
+
+  /** http://gbiv.com/protocols/uri/rfc/rfc3986.html#relative-normal */
+  public void testRfc3986Normal() {
+    assertEquals("/a/b/c/g", simplifyPath("/a/b/c/g"));
+    assertEquals("/a/b/c/g", simplifyPath("/a/b/c/./g"));
+    assertEquals("/a/b/c/g", simplifyPath("/a/b/c/g/"));
+
+    assertEquals("/a/b/c/g?y", simplifyPath("/a/b/c/g?y"));
+    assertEquals("/a/b/c/g#s", simplifyPath("/a/b/c/g#s"));
+    assertEquals("/a/b/c/g?y#s", simplifyPath("/a/b/c/g?y#s"));
+    assertEquals("/a/b/c/;x", simplifyPath("/a/b/c/;x"));
+    assertEquals("/a/b/c/g;x", simplifyPath("/a/b/c/g;x"));
+    assertEquals("/a/b/c/g;x?y#s", simplifyPath("/a/b/c/g;x?y#s"));
+
+    assertEquals("/a/b/c", simplifyPath("/a/b/c/."));
+    assertEquals("/a/b/c", simplifyPath("/a/b/c/./"));
+    assertEquals("/a/b", simplifyPath("/a/b/c/.."));
+    assertEquals("/a/b", simplifyPath("/a/b/c/../"));
+    assertEquals("/a/b/g", simplifyPath("/a/b/c/../g"));
+    assertEquals("/a", simplifyPath("/a/b/c/../.."));
+    assertEquals("/a", simplifyPath("/a/b/c/../../"));
+    assertEquals("/a/g", simplifyPath("/a/b/c/../../g"));
+  }
+
+  /** http://gbiv.com/protocols/uri/rfc/rfc3986.html#relative-abnormal */
+  public void testRfc3986Abnormal() {
+    assertEquals("/g", simplifyPath("/a/b/c/../../../g"));
+    assertEquals("/g", simplifyPath("/a/b/c/../../../../g"));
+
+    assertEquals("/a/b/c/g.", simplifyPath("/a/b/c/g."));
+    assertEquals("/a/b/c/.g", simplifyPath("/a/b/c/.g"));
+    assertEquals("/a/b/c/g..", simplifyPath("/a/b/c/g.."));
+    assertEquals("/a/b/c/..g", simplifyPath("/a/b/c/..g"));
+    assertEquals("/a/b/g", simplifyPath("/a/b/c/./../g"));
+    assertEquals("/a/b/c/g", simplifyPath("/a/b/c/./g/."));
+    assertEquals("/a/b/c/g/h", simplifyPath("/a/b/c/g/./h"));
+    assertEquals("/a/b/c/h", simplifyPath("/a/b/c/g/../h"));
+    assertEquals("/a/b/c/g;x=1/y", simplifyPath("/a/b/c/g;x=1/./y"));
+    assertEquals("/a/b/c/y", simplifyPath("/a/b/c/g;x=1/../y"));
+  }
+
+  public void testExtensiveWithAbsolutePrefix() throws IOException {
+    // Inputs are /b/c/<every possible 10-character string of characters "a./">
+    // Expected outputs are from realpath -s.
+    doExtensiveTest("testdata/simplifypathwithabsoluteprefixtests.txt");
+  }
+
+  public void testExtensiveNoPrefix() throws IOException {
+    /*
+     * Inputs are <every possible 10-character string of characters "a./">
+     *
+     * Expected outputs are generated by the code itself, but they've been
+     * checked against the inputs under Bash in order to confirm that the two
+     * forms are equivalent (though not necessarily minimal, though we hope this
+     * to be the case). Thus, this test is more of a regression test.
+     *
+     * Rough instructions to regenerate the test outputs and verify correctness:
+     * - Temporarily change this test:
+     * --- Comment out assertEquals.
+     * --- System.out.println(input + " " + simplifyPath(input));
+     * --- fail(). (If the test were to pass, its output would be hidden.)
+     * - Run the test.
+     * - Pull the relevant lines of output from the test into a testcases file.
+     * - Test the output:
+     * --- cat testcases | while read L; do
+     *       X=($L)
+     *       A=$( cd /b/c && sudo mkdir -p ${X[0]} && cd ${X[0]} && pwd |
+     *           sed -e 's#^//*#/#' )
+     *       B=$( cd /b/c && cd ${X[1]} && pwd )
+     *       cmp -s <(echo $A) <(echo $B) || echo "$X[0] -> $A vs. $B"
+     *     done | tee testoutput
+     * - Move that testcases file to the appropriate name under testdata.
+     *
+     * The last test will take hours, and if it passes, the output will be empty.
+     */
+    doExtensiveTest("testdata/simplifypathnoprefixtests.txt");
+  }
+
+  private void doExtensiveTest(String resourceName) throws IOException {
+    Splitter splitter = Splitter.on(CharMatcher.WHITESPACE);
+    URL url = getClass().getResource(resourceName);
+    for (String line : Resources.readLines(url, UTF_8)) {
+      Iterator<String> iterator = splitter.split(line).iterator();
+      String input = iterator.next();
+      String expectedOutput = iterator.next();
+      assertFalse(iterator.hasNext());
+      assertEquals(expectedOutput, simplifyPath(input));
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/io/IoTestCase.java b/guava-tests/test/com/google/common/io/IoTestCase.java
new file mode 100644
index 0000000..1d16cdb
--- /dev/null
+++ b/guava-tests/test/com/google/common/io/IoTestCase.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.io;
+
+import junit.framework.TestCase;
+
+/**
+ * Base test case class for I/O tests.
+ *
+ * @author Chris Nokleberg
+ */
+public abstract class IoTestCase extends TestCase {
+
+  static final String I18N
+      = "\u00CE\u00F1\u0163\u00E9\u0072\u00F1\u00E5\u0163\u00EE\u00F6"
+      + "\u00F1\u00E5\u013C\u00EE\u017E\u00E5\u0163\u00EE\u00F6\u00F1";
+
+  static final String ASCII
+      = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+      + "[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~";
+
+  /** Returns a byte array of length size that has values 0 .. size - 1. */
+  protected static byte[] newPreFilledByteArray(int size) {
+    return newPreFilledByteArray(0, size);
+  }
+
+  /**
+   * Returns a byte array of length size that has values
+   *    offset .. offset + size - 1.
+   */
+  protected static byte[] newPreFilledByteArray(int offset, int size) {
+    byte[] array = new byte[size];
+    for (int i = 0; i < size; i++) {
+      array[i] = (byte) (offset + i);
+    }
+    return array;
+  }
+}
diff --git a/guava-tests/test/com/google/common/io/LimitInputStreamTest.java b/guava-tests/test/com/google/common/io/LimitInputStreamTest.java
new file mode 100644
index 0000000..30d8850
--- /dev/null
+++ b/guava-tests/test/com/google/common/io/LimitInputStreamTest.java
@@ -0,0 +1,133 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.io;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+/**
+ * @author Charles Fry
+ */
+public class LimitInputStreamTest extends IoTestCase {
+
+  public void testLimit() throws Exception {
+    byte[] big = newPreFilledByteArray(5);
+    InputStream bin = new ByteArrayInputStream(big);
+    InputStream lin = new LimitInputStream(bin, 2);
+
+    // also test available
+    lin.mark(2);
+    assertEquals(2, lin.available());
+    int read = lin.read();
+    assertEquals(big[0], read);
+    assertEquals(1, lin.available());
+    read = lin.read();
+    assertEquals(big[1], read);
+    assertEquals(0, lin.available());
+    read = lin.read();
+    assertEquals(-1, read);
+
+    lin.reset();
+    byte[] small = new byte[5];
+    read = lin.read(small);
+    assertEquals(2, read);
+    assertEquals(big[0], small[0]);
+    assertEquals(big[1], small[1]);
+
+    lin.reset();
+    read = lin.read(small, 2, 3);
+    assertEquals(2, read);
+    assertEquals(big[0], small[2]);
+    assertEquals(big[1], small[3]);
+  }
+
+  public void testMark() throws Exception {
+    byte[] big = newPreFilledByteArray(5);
+    InputStream bin = new ByteArrayInputStream(big);
+    InputStream lin = new LimitInputStream(bin, 2);
+
+    int read = lin.read();
+    assertEquals(big[0], read);
+    lin.mark(2);
+
+    read = lin.read();
+    assertEquals(big[1], read);
+    read = lin.read();
+    assertEquals(-1, read);
+
+    lin.reset();
+    read = lin.read();
+    assertEquals(big[1], read);
+    read = lin.read();
+    assertEquals(-1, read);
+  }
+
+  public void testSkip() throws Exception {
+    byte[] big = newPreFilledByteArray(5);
+    InputStream bin = new ByteArrayInputStream(big);
+    InputStream lin = new LimitInputStream(bin, 2);
+
+    // also test available
+    lin.mark(2);
+    assertEquals(2, lin.available());
+    lin.skip(1);
+    assertEquals(1, lin.available());
+
+    lin.reset();
+    assertEquals(2, lin.available());
+    lin.skip(3);
+    assertEquals(0, lin.available());
+  }
+  
+  
+  public void testMarkNotSet() {
+    byte[] big = newPreFilledByteArray(5);
+    InputStream bin = new ByteArrayInputStream(big);
+    InputStream lin = new LimitInputStream(bin, 2);
+
+    try {
+      lin.reset();
+      fail();
+    } catch (IOException expected) {
+      assertEquals("Mark not set", expected.getMessage());
+    }
+  }
+  
+  public void testMarkNotSupported() {
+    InputStream lin = new LimitInputStream(new UnmarkableInputStream(), 2);
+
+    try {
+      lin.reset();
+      fail();
+    } catch (IOException expected) {
+      assertEquals("Mark not supported", expected.getMessage());
+    }
+  }
+  
+  private static class UnmarkableInputStream extends InputStream {
+    @Override
+    public int read() throws IOException {
+      return 0;
+    }
+    
+    @Override
+    public boolean markSupported() {
+      return false;
+    }    
+  }
+}
diff --git a/guava-tests/test/com/google/common/io/LineBufferTest.java b/guava-tests/test/com/google/common/io/LineBufferTest.java
new file mode 100644
index 0000000..eb3077d
--- /dev/null
+++ b/guava-tests/test/com/google/common/io/LineBufferTest.java
@@ -0,0 +1,146 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.io;
+
+import com.google.common.base.Function;
+import com.google.common.collect.Lists;
+
+import java.io.BufferedReader;
+import java.io.FilterReader;
+import java.io.IOException;
+import java.io.Reader;
+import java.io.StringReader;
+import java.nio.CharBuffer;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Unit tests for {@link LineBuffer} and {@link LineReader}.
+ *
+ * @author Chris Nokleberg
+ */
+public class LineBufferTest extends IoTestCase {
+
+  public void testProcess() throws IOException {
+    bufferHelper("");
+    bufferHelper("\n", "\n");
+    bufferHelper("\r\n", "\r\n");
+    bufferHelper("\n\r", "\n", "\r");
+    bufferHelper("\r", "\r");
+    bufferHelper("\n\n", "\n", "\n");
+    bufferHelper("\r\n\r\n", "\r\n", "\r\n");
+    bufferHelper("\r\r", "\r", "\r");
+    bufferHelper("\ra\r\n\n\r\r", "\r", "a\r\n", "\n", "\r", "\r");
+    bufferHelper("no newlines at all", "no newlines at all");
+    bufferHelper("two lines\nbut no newline at end",
+        "two lines\n", "but no newline at end");
+    bufferHelper("\nempty first line\nno newline at end",
+        "\n", "empty first line\n", "no newline at end");
+    bufferHelper("three\rlines\rno newline at end",
+        "three\r", "lines\r", "no newline at end");
+    bufferHelper("mixed\nline\rendings\r\n",
+        "mixed\n", "line\r", "endings\r\n");
+  }
+
+  private static final int[] CHUNK_SIZES = { 1, 2, 3, Integer.MAX_VALUE };
+
+  private static void bufferHelper(String input, String... expect)
+      throws IOException {
+
+    List<String> expectProcess = Arrays.asList(expect);
+    List<String> expectRead = Lists.transform(expectProcess,
+        new Function<String, String>() {
+          @Override
+          public String apply(String value) {
+            return value.replaceAll("[\\r\\n]", "");
+          }
+        });
+
+    for (int chunk : CHUNK_SIZES) {
+      chunk = Math.max(1, Math.min(chunk, input.length()));
+      assertEquals(expectProcess, bufferHelper(input, chunk));
+      assertEquals(expectRead, readUsingJava(input, chunk));
+      assertEquals(expectRead, readUsingReader(input, chunk, true));
+      assertEquals(expectRead, readUsingReader(input, chunk, false));
+    }
+  }
+
+  private static List<String> bufferHelper(String input, int chunk)
+      throws IOException {
+    final List<String> lines = Lists.newArrayList();
+    LineBuffer lineBuf = new LineBuffer() {
+      @Override protected void handleLine(String line, String end) {
+        lines.add(line + end);
+      }
+    };
+    char[] chars = input.toCharArray();
+    int off = 0;
+    while (off < chars.length) {
+      int len = Math.min(chars.length, off + chunk) - off;
+      lineBuf.add(chars, off, len);
+      off += len;
+    }
+    lineBuf.finish();
+    return lines;
+  }
+
+  private static List<String> readUsingJava(String input, int chunk)
+      throws IOException {
+    BufferedReader r = new BufferedReader(getChunkedReader(input, chunk));
+    List<String> lines = Lists.newArrayList();
+    String line;
+    while ((line = r.readLine()) != null) {
+      lines.add(line);
+    }
+    r.close();
+    return lines;
+  }
+
+  private static List<String> readUsingReader(String input, int chunk,
+      boolean asReader) throws IOException {
+    Readable readable = asReader
+        ? getChunkedReader(input, chunk)
+        : getChunkedReadable(input, chunk);
+    LineReader r = new LineReader(readable);
+    List<String> lines = Lists.newArrayList();
+    String line;
+    while ((line = r.readLine()) != null) {
+      lines.add(line);
+    }
+    return lines;
+  }
+
+  // Returns a Readable that is *not* a Reader.
+  private static Readable getChunkedReadable(String input, int chunk) {
+    final Reader reader = getChunkedReader(input, chunk);
+    return new Readable() {
+      @Override
+      public int read(CharBuffer cbuf) throws IOException {
+        return reader.read(cbuf);
+      }
+    };
+  }
+
+  private static Reader getChunkedReader(String input, final int chunk) {
+    return new FilterReader(new StringReader(input)) {
+      @Override public int read(char[] cbuf, int off, int len)
+          throws IOException {
+        return super.read(cbuf, off, Math.min(chunk, len));
+      }
+    };
+  }
+}
diff --git a/guava-tests/test/com/google/common/io/LittleEndianDataInputStreamTest.java b/guava-tests/test/com/google/common/io/LittleEndianDataInputStreamTest.java
new file mode 100644
index 0000000..d794ad6
--- /dev/null
+++ b/guava-tests/test/com/google/common/io/LittleEndianDataInputStreamTest.java
@@ -0,0 +1,151 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.io;
+
+import com.google.common.primitives.Bytes;
+
+import junit.framework.TestCase;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.DataInput;
+import java.io.DataOutputStream;
+import java.io.EOFException;
+import java.io.IOException;
+
+/**
+ * Test class for {@link LittleEndianDataInputStream}.
+ *
+ * @author Chris Nokleberg
+ */
+public class LittleEndianDataInputStreamTest extends TestCase {
+  
+  private byte[] data;
+
+  @Override
+  protected void setUp() throws Exception {
+    super.setUp();
+    
+    ByteArrayOutputStream baos = new ByteArrayOutputStream();
+    DataOutputStream out = new DataOutputStream(baos);
+
+    initializeData(out);
+
+    data = baos.toByteArray();
+  }
+
+  private void initializeData(DataOutputStream out) throws IOException {
+    /* Write out various test values NORMALLY */
+    out.write(new byte[] { -100, 100 });
+    out.writeBoolean(true);
+    out.writeBoolean(false);
+    out.writeByte(100);
+    out.writeByte(-100);
+    out.writeByte((byte) 200);
+    out.writeChar('a'); 
+    out.writeShort((short) -30000);
+    out.writeShort((short) 50000);
+    out.writeInt(0xCAFEBABE);
+    out.writeLong(0xDEADBEEFCAFEBABEL);
+    out.writeUTF("Herby Derby");
+    out.writeFloat(Float.intBitsToFloat(0xCAFEBABE));
+    out.writeDouble(Double.longBitsToDouble(0xDEADBEEFCAFEBABEL));
+  }
+  
+  public void testReadFully() throws IOException {
+    DataInput in = new LittleEndianDataInputStream(new ByteArrayInputStream(data));
+    byte[] b = new byte[data.length];
+    in.readFully(b);
+    assertEquals(Bytes.asList(data), Bytes.asList(b));
+  }
+  
+  public void testReadUnsignedByte_eof() throws IOException {
+    DataInput in = new LittleEndianDataInputStream(new ByteArrayInputStream(new byte[0]));
+    try {
+      in.readUnsignedByte();
+      fail();
+    } catch (EOFException expected) {
+    }
+  }
+  
+  public void testReadUnsignedShort_eof() throws IOException {
+    byte[] buf = {23};
+    DataInput in = new LittleEndianDataInputStream(new ByteArrayInputStream(buf));
+    try {
+      in.readUnsignedShort();
+      fail();
+    } catch (EOFException expected) {}
+  }
+  
+  public void testReadLine() throws IOException {
+    DataInput in = new LittleEndianDataInputStream(new ByteArrayInputStream(data));
+    try {
+      in.readLine();
+      fail();
+    } catch (UnsupportedOperationException expected) {
+      assertEquals("readLine is not supported", expected.getMessage()); 
+    }
+  }
+  
+  public void testReadLittleEndian() throws IOException {
+    DataInput in = new LittleEndianDataInputStream(new ByteArrayInputStream(data));
+
+    /* Read in various values in LITTLE ENDIAN FORMAT */
+    byte[] b = new byte[2];
+    in.readFully(b);
+    assertEquals(-100, b[0]);
+    assertEquals(100, b[1]);
+    assertEquals(true, in.readBoolean());
+    assertEquals(false, in.readBoolean());
+    assertEquals(100, in.readByte());
+    assertEquals(-100, in.readByte());
+    assertEquals(200, in.readUnsignedByte());
+    assertEquals('\u6100', in.readChar());
+    assertEquals(-12150, in.readShort());
+    assertEquals(20675, in.readUnsignedShort());
+    assertEquals(0xBEBAFECA, in.readInt());
+    assertEquals(0xBEBAFECAEFBEADDEL, in.readLong());
+    assertEquals("Herby Derby", in.readUTF());
+    assertEquals(0xBEBAFECA, Float.floatToIntBits(in.readFloat()));
+    assertEquals(0xBEBAFECAEFBEADDEL, Double.doubleToLongBits(in.readDouble()));
+  }
+  
+  public void testSkipBytes() throws IOException {
+    ByteArrayOutputStream baos = new ByteArrayOutputStream();
+    DataOutputStream out = new DataOutputStream(baos);
+
+    /* Write out various test values NORMALLY */
+    out.write(new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9}); // 10 bytes of junk to skip
+    initializeData(out);
+
+    byte[] data = baos.toByteArray();
+
+    DataInput in = new LittleEndianDataInputStream(new ByteArrayInputStream(data));
+    int bytesSkipped = 0;
+    while (bytesSkipped < 10) {
+      bytesSkipped += in.skipBytes(10 - bytesSkipped);
+    }
+    
+    /* Read in various values in LITTLE ENDIAN FORMAT */
+    byte[] b = new byte[2];
+    in.readFully(b);
+    assertEquals(-100, b[0]);
+    assertEquals(100, b[1]);
+    assertTrue(in.readBoolean());
+    assertFalse(in.readBoolean());
+  }
+}
diff --git a/guava-tests/test/com/google/common/io/LittleEndianDataOutputStreamTest.java b/guava-tests/test/com/google/common/io/LittleEndianDataOutputStreamTest.java
new file mode 100644
index 0000000..93e9809
--- /dev/null
+++ b/guava-tests/test/com/google/common/io/LittleEndianDataOutputStreamTest.java
@@ -0,0 +1,148 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.io;
+
+import com.google.common.base.Charsets;
+import com.google.common.primitives.Bytes;
+
+import junit.framework.TestCase;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.DataInput;
+import java.io.DataInputStream;
+import java.io.IOException;
+
+/**
+ * Test class for {@link LittleEndianDataOutputStream}.
+ *
+ * @author Keith Bottner
+ */
+public class LittleEndianDataOutputStreamTest extends TestCase {
+
+  private ByteArrayOutputStream baos = new ByteArrayOutputStream();
+  private LittleEndianDataOutputStream out = new LittleEndianDataOutputStream(baos);
+  
+  public void testWriteLittleEndian() throws IOException {
+
+    /* Write out various test values in LITTLE ENDIAN FORMAT */
+    out.write(new byte[] { -100, 100 });
+    out.writeBoolean(true);
+    out.writeBoolean(false);
+    out.writeByte(100);
+    out.writeByte(-100);
+    out.writeByte((byte) 200);
+    out.writeChar('a');
+    out.writeShort((short) -30000);
+    out.writeShort((short) 50000);
+    out.writeInt(0xCAFEBABE);
+    out.writeLong(0xDEADBEEFCAFEBABEL);
+    out.writeUTF("Herby Derby");
+    out.writeFloat(Float.intBitsToFloat(0xCAFEBABE));
+    out.writeDouble(Double.longBitsToDouble(0xDEADBEEFCAFEBABEL));
+
+    byte[] data = baos.toByteArray();
+
+    /* Setup input streams */
+    DataInput in = new DataInputStream(new ByteArrayInputStream(data));
+
+    /* Read in various values NORMALLY */
+    byte[] b = new byte[2];
+    in.readFully(b);
+    assertEquals(-100, b[0]);
+    assertEquals(100, b[1]);
+    assertEquals(true, in.readBoolean());
+    assertEquals(false, in.readBoolean());
+    assertEquals(100, in.readByte());
+    assertEquals(-100, in.readByte());
+    assertEquals(200, in.readUnsignedByte());
+    assertEquals('\u6100', in.readChar());
+    assertEquals(-12150, in.readShort());
+    assertEquals(20675, in.readUnsignedShort());
+    assertEquals(0xBEBAFECA, in.readInt());
+    assertEquals(0xBEBAFECAEFBEADDEL, in.readLong());
+    assertEquals("Herby Derby", in.readUTF());
+    assertEquals(0xBEBAFECA, Float.floatToIntBits(in.readFloat()));
+    assertEquals(0xBEBAFECAEFBEADDEL, Double.doubleToLongBits(in.readDouble()));
+  }
+  
+  @SuppressWarnings("deprecation") // testing a deprecated method
+  public void testWriteBytes() throws IOException {
+    
+    /* Write out various test values in LITTLE ENDIAN FORMAT */
+    out.writeBytes("r\u00C9sum\u00C9");
+
+    byte[] data = baos.toByteArray();
+
+    /* Setup input streams */
+    DataInput in = new DataInputStream(new ByteArrayInputStream(data));
+
+    /* Read in various values NORMALLY */
+    byte[] b = new byte[6];
+    in.readFully(b);
+    assertEquals("r\u00C9sum\u00C9".getBytes(Charsets.ISO_8859_1), b);
+  }
+  
+  @SuppressWarnings("deprecation") // testing a deprecated method
+  public void testWriteBytes_discardHighOrderBytes() throws IOException {
+    
+    /* Write out various test values in LITTLE ENDIAN FORMAT */
+    out.writeBytes("\uAAAA\uAABB\uAACC");
+
+    byte[] data = baos.toByteArray();
+
+    /* Setup input streams */
+    DataInput in = new DataInputStream(new ByteArrayInputStream(data));
+
+    /* Read in various values NORMALLY */
+    byte[] b = new byte[3];
+    in.readFully(b);
+    byte[] expected = {(byte) 0xAA, (byte) 0xBB, (byte) 0xCC};
+    assertEquals(expected, b);
+  }
+
+  public void testWriteChars() throws IOException {
+
+    /* Write out various test values in LITTLE ENDIAN FORMAT */
+    out.writeChars("r\u00C9sum\u00C9");
+
+    byte[] data = baos.toByteArray();
+
+    /* Setup input streams */
+    DataInput in = new DataInputStream(new ByteArrayInputStream(data));
+
+    /* Read in various values NORMALLY */
+    byte[] actual = new byte[12];
+    in.readFully(actual);
+    assertEquals('r', actual[0]);
+    assertEquals(0, actual[1]);
+    assertEquals((byte) 0xC9, actual[2]);
+    assertEquals(0, actual[3]);
+    assertEquals('s', actual[4]);
+    assertEquals(0, actual[5]);
+    assertEquals('u', actual[6]);
+    assertEquals(0, actual[7]);
+    assertEquals('m', actual[8]);
+    assertEquals(0, actual[9]);
+    assertEquals((byte) 0xC9, actual[10]);
+    assertEquals(0, actual[11]);
+  }
+
+  private static void assertEquals(byte[] expected, byte[] actual) {
+    assertEquals(Bytes.asList(expected), Bytes.asList(actual));
+  }
+}
diff --git a/guava-tests/test/com/google/common/io/MultiInputStreamTest.java b/guava-tests/test/com/google/common/io/MultiInputStreamTest.java
new file mode 100644
index 0000000..06ad254
--- /dev/null
+++ b/guava-tests/test/com/google/common/io/MultiInputStreamTest.java
@@ -0,0 +1,125 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.io;
+
+import com.google.common.collect.Lists;
+
+import java.io.ByteArrayInputStream;
+import java.io.FilterInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * Test class for {@link MultiInputStream}.
+ *
+ * @author Chris Nokleberg
+ */
+public class MultiInputStreamTest extends IoTestCase {
+
+  public void testJoin() throws Exception {
+    joinHelper(0);
+    joinHelper(1);
+    joinHelper(0, 0, 0);
+    joinHelper(10, 20);
+    joinHelper(10, 0, 20);
+    joinHelper(0, 10, 20);
+    joinHelper(10, 20, 0);
+    joinHelper(10, 20, 1);
+    joinHelper(1, 1, 1, 1, 1, 1, 1, 1);
+    joinHelper(1, 0, 1, 0, 1, 0, 1, 0);
+  }
+
+  public void testOnlyOneOpen() throws Exception {
+    final InputSupplier<InputStream> supplier = newByteSupplier(0, 50);
+    final int[] counter = new int[1];
+    InputSupplier<InputStream> checker = new InputSupplier<InputStream>() {
+      @Override
+      public InputStream getInput() throws IOException {
+        if (counter[0]++ != 0) {
+          throw new IllegalStateException("More than one supplier open");
+        }
+        return new FilterInputStream(supplier.getInput()) {
+          @Override public void close() throws IOException {
+            super.close();
+            counter[0]--;
+          }
+        };
+      }
+    };
+    @SuppressWarnings("unchecked")
+    byte[] result = ByteStreams.toByteArray(
+        ByteStreams.join(checker, checker, checker));
+    assertEquals(150, result.length);
+  }
+
+  private void joinHelper(Integer... spans) throws Exception {
+    List<InputSupplier<InputStream>> suppliers = Lists.newArrayList();
+    int start = 0;
+    for (Integer span : spans) {
+      suppliers.add(newByteSupplier(start, span));
+      start += span;
+    }
+    InputSupplier<InputStream> joined = ByteStreams.join(suppliers);
+    assertTrue(ByteStreams.equal(newByteSupplier(0, start), joined));
+  }
+
+  public void testReadSingleByte() throws Exception {
+    InputSupplier<InputStream> supplier = newByteSupplier(0, 10);
+    @SuppressWarnings("unchecked")
+    InputSupplier<InputStream> joined = ByteStreams.join(supplier, supplier);
+    assertEquals(20, ByteStreams.length(joined));
+    InputStream in = joined.getInput();
+    assertFalse(in.markSupported());
+    assertEquals(10, in.available());
+    int total = 0;
+    while (in.read() != -1) {
+      total++;
+    }
+    assertEquals(0, in.available());
+    assertEquals(20, total);
+  }
+
+  public void testSkip() throws Exception {
+    MultiInputStream multi = new MultiInputStream(
+        Collections.singleton(new InputSupplier<InputStream>() {
+          @Override
+          public InputStream getInput() {
+            return new ByteArrayInputStream(newPreFilledByteArray(0, 50)) {
+              @Override public long skip(long n) {
+                return 0;
+              }
+            };
+          }
+        }).iterator());
+    multi.skip(-1);
+    multi.skip(-1);
+    multi.skip(0);
+    ByteStreams.skipFully(multi, 20);
+    assertEquals(20, multi.read());
+  }
+
+  private static InputSupplier<InputStream> newByteSupplier(final int start, final int size) {
+    return new InputSupplier<InputStream>() {
+      @Override
+      public InputStream getInput() {
+        return new ByteArrayInputStream(newPreFilledByteArray(start, size));
+      }
+    };
+  }
+}
diff --git a/guava-tests/test/com/google/common/io/MultiReaderTest.java b/guava-tests/test/com/google/common/io/MultiReaderTest.java
new file mode 100644
index 0000000..fa70432
--- /dev/null
+++ b/guava-tests/test/com/google/common/io/MultiReaderTest.java
@@ -0,0 +1,116 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.io;
+
+import com.google.common.collect.ImmutableList;
+
+import junit.framework.TestCase;
+
+import java.io.FilterReader;
+import java.io.IOException;
+import java.io.Reader;
+import java.io.StringReader;
+
+/**
+ * @author ricebin
+ */
+public class MultiReaderTest extends TestCase {
+
+  public void testOnlyOneOpen() throws Exception {
+    String testString = "abcdefgh";
+    final InputSupplier<Reader> supplier = newReader(testString);
+    final int[] counter = new int[1];
+    InputSupplier<Reader> reader = new InputSupplier<Reader>() {
+      @Override
+      public Reader getInput() throws IOException {
+        if (counter[0]++ != 0) {
+          throw new IllegalStateException("More than one supplier open");
+        }
+        return new FilterReader(supplier.getInput()) {
+          @Override public void close() throws IOException {
+            super.close();
+            counter[0]--;
+          }
+        };
+      }
+    };
+    @SuppressWarnings("unchecked")
+    Reader joinedReader = CharStreams.join(reader, reader, reader).getInput();
+    String result = CharStreams.toString(joinedReader);
+    assertEquals(testString.length() * 3, result.length());
+  }
+
+  public void testReady() throws Exception {
+    InputSupplier<Reader> supplier = newReader("a");
+    Iterable<? extends InputSupplier<? extends Reader>> list = ImmutableList.of(supplier, supplier);
+    Reader joinedReader = CharStreams.join(list).getInput();
+
+    assertTrue(joinedReader.ready());
+    assertEquals('a', joinedReader.read());
+    assertEquals('a', joinedReader.read());
+    assertEquals(-1, joinedReader.read());
+    assertFalse(joinedReader.ready());    
+  }
+
+  public void testSimple() throws Exception {
+    String testString = "abcdefgh";
+    InputSupplier<Reader> supplier = newReader(testString);
+    @SuppressWarnings("unchecked")
+    Reader joinedReader = CharStreams.join(supplier, supplier).getInput();
+
+    String expectedString = testString + testString;
+    assertEquals(expectedString, CharStreams.toString(joinedReader));
+  }
+
+  
+  private static InputSupplier<Reader> newReader(final String text) {
+    return new InputSupplier<Reader>() {
+      @Override
+      public Reader getInput() {
+        return new StringReader(text);
+      }
+    };
+  }
+
+  public void testSkip() throws Exception {
+    String begin = "abcde";
+    String end = "fghij";
+    @SuppressWarnings("unchecked")
+    Reader joinedReader =
+        CharStreams.join(newReader(begin), newReader(end)).getInput();
+
+    String expected = begin + end;
+    assertEquals(expected.charAt(0), joinedReader.read());
+    CharStreams.skipFully(joinedReader, 1);
+    assertEquals(expected.charAt(2), joinedReader.read());
+    CharStreams.skipFully(joinedReader, 4);
+    assertEquals(expected.charAt(7), joinedReader.read());
+    CharStreams.skipFully(joinedReader, 1);
+    assertEquals(expected.charAt(9), joinedReader.read());
+    assertEquals(-1, joinedReader.read());
+  }
+  
+  public void testSkipZero() throws Exception {
+    InputSupplier<Reader> supplier = newReader("a");
+    Iterable<? extends InputSupplier<? extends Reader>> list = ImmutableList.of(supplier, supplier);
+    Reader joinedReader = CharStreams.join(list).getInput();
+
+    assertEquals(0, joinedReader.skip(0));
+    assertEquals('a', joinedReader.read());
+  }
+
+}
diff --git a/guava-tests/test/com/google/common/io/NullOutputStreamTest.java b/guava-tests/test/com/google/common/io/NullOutputStreamTest.java
new file mode 100644
index 0000000..edbdfc9
--- /dev/null
+++ b/guava-tests/test/com/google/common/io/NullOutputStreamTest.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2002 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.io;
+
+import junit.framework.TestCase;
+
+/**
+ * Unit tests for {@link NullOutputStream}.
+ *
+ * @author Spencer Kimball
+ */
+public class NullOutputStreamTest extends TestCase {
+
+  public void testBasicOperation() throws Exception {
+    // create a null output stream
+    NullOutputStream nos = new NullOutputStream();
+    assertNotNull(nos);
+    // write to the output stream
+    nos.write('n');
+    String test = "Test string for NullOutputStream";
+    nos.write(test.getBytes());
+    nos.write(test.getBytes(), 2, 10);
+  }
+}
diff --git a/guava-tests/test/com/google/common/io/PatternFilenameFilterTest.java b/guava-tests/test/com/google/common/io/PatternFilenameFilterTest.java
new file mode 100644
index 0000000..6a89011
--- /dev/null
+++ b/guava-tests/test/com/google/common/io/PatternFilenameFilterTest.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.io;
+
+import junit.framework.TestCase;
+
+import java.io.File;
+import java.io.FilenameFilter;
+import java.util.regex.PatternSyntaxException;
+
+/**
+ * Unit test for {@link PatternFilenameFilter}.
+ *
+ * @author Chris Nokleberg
+ */
+public class PatternFilenameFilterTest extends TestCase {
+
+  public void testSyntaxException() {
+    try {
+      new PatternFilenameFilter("(");
+      fail("expected exception");
+    } catch (PatternSyntaxException e) {
+      // expected
+    }
+  }
+
+  public void testAccept() {
+    File dir = new File("foo");
+    FilenameFilter filter = new PatternFilenameFilter("a+");
+    assertTrue(filter.accept(dir, "a"));
+    assertTrue(filter.accept(dir, "aaaa"));
+    assertFalse(filter.accept(dir, "b"));
+
+    // Show that dir is ignored
+    assertTrue(filter.accept(null, "a"));
+  }
+}
diff --git a/guava-tests/test/com/google/common/io/RandomAmountInputStream.java b/guava-tests/test/com/google/common/io/RandomAmountInputStream.java
new file mode 100644
index 0000000..2ffeea7
--- /dev/null
+++ b/guava-tests/test/com/google/common/io/RandomAmountInputStream.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.io;
+
+import java.io.FilterInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Random;
+
+/** Returns a random portion of the requested bytes on each call. */
+class RandomAmountInputStream extends FilterInputStream {
+  private final Random random;
+
+  public RandomAmountInputStream(InputStream in, Random random) {
+    super(in);
+    this.random = random;
+  }
+
+  @Override public int read(byte[] b, int off, int len) throws IOException {
+    return super.read(b, off, random.nextInt(len) + 1);
+  }
+}
diff --git a/guava-tests/test/com/google/common/io/ResourcesTest.java b/guava-tests/test/com/google/common/io/ResourcesTest.java
new file mode 100644
index 0000000..8aedfa3
--- /dev/null
+++ b/guava-tests/test/com/google/common/io/ResourcesTest.java
@@ -0,0 +1,135 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.io;
+
+import static com.google.common.base.CharMatcher.WHITESPACE;
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import com.google.common.base.Charsets;
+import com.google.common.collect.ImmutableList;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.DataInputStream;
+import java.io.IOException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Unit test for {@link Resources}.
+ *
+ * @author Chris Nokleberg
+ */
+public class ResourcesTest extends IoTestCase {
+
+  public void testUrlSupplier() throws IOException {
+    try {
+      Resources.newInputStreamSupplier(null);
+      fail("expected NPE");
+    } catch (NullPointerException expected) {
+      // expected
+    }
+
+    URL url = getClass().getResource("/com/google/common/io/Resources.class");
+    byte[] data = ByteStreams.toByteArray(
+        Resources.newInputStreamSupplier(url));
+    assertEquals(0xCAFEBABE,
+        new DataInputStream(new ByteArrayInputStream(data)).readInt());
+  }
+
+  public void testToString() throws IOException {
+    URL resource = getClass().getResource("testdata/i18n.txt");
+    assertEquals(I18N, Resources.toString(resource, Charsets.UTF_8));
+    ASSERT.that(Resources.toString(resource, Charsets.US_ASCII))
+        .isNotEqualTo(I18N);
+  }
+  
+  public void testToToByteArray() throws IOException {
+    URL url = getClass().getResource("/com/google/common/io/Resources.class");
+    byte[] data = Resources.toByteArray(url);
+    assertEquals(0xCAFEBABE,
+        new DataInputStream(new ByteArrayInputStream(data)).readInt());
+  }
+
+  public void testReadLines() throws IOException {
+    // TODO(chrisn): Check in a better resource
+    URL resource = getClass().getResource("testdata/i18n.txt");
+    assertEquals(ImmutableList.of(I18N),
+        Resources.readLines(resource, Charsets.UTF_8));
+  }
+
+  public void testReadLines_withLineProcessor() throws IOException {
+    URL resource = getClass().getResource("testdata/alice_in_wonderland.txt");
+    LineProcessor<List<String>> collectAndLowercaseAndTrim =
+        new LineProcessor<List<String>>() {
+          List<String> collector = new ArrayList<String>();
+          @Override
+          public boolean processLine(String line) {
+            collector.add(WHITESPACE.trimFrom(line));
+            return true;
+          }
+
+          @Override
+          public List<String> getResult() {
+            return collector;
+          }
+        };
+    List<String> result = Resources.readLines(resource, Charsets.US_ASCII,
+        collectAndLowercaseAndTrim);
+    assertEquals(3600, result.size());
+    assertEquals("ALICE'S ADVENTURES IN WONDERLAND", result.get(0));
+    assertEquals("THE END", result.get(result.size() - 1));
+  }
+
+  public void testCopyToOutputStream() throws IOException {
+    ByteArrayOutputStream out = new ByteArrayOutputStream();
+    URL resource = getClass().getResource("testdata/i18n.txt");
+    Resources.copy(resource, out);
+    assertEquals(I18N, out.toString("UTF-8"));
+  }
+  
+  public void testGetResource_notFound() {
+    try {
+      Resources.getResource("no such resource");
+      fail();
+    } catch (IllegalArgumentException e) {
+      assertEquals("resource no such resource not found.", e.getMessage());
+    }
+  }
+  
+  public void testGetResource() {
+    assertNotNull(
+        Resources.getResource("com/google/common/io/testdata/i18n.txt"));
+  }
+  
+  public void testGetResource_relativePath_notFound() {
+    try {
+      Resources.getResource(
+          getClass(), "com/google/common/io/testdata/i18n.txt");
+      fail();
+    } catch (IllegalArgumentException e) {
+      assertEquals("resource com/google/common/io/testdata/i18n.txt" +
+          " relative to com.google.common.io.ResourcesTest not found.",
+          e.getMessage());
+    }
+  }
+  
+  public void testGetResource_relativePath() {
+    assertNotNull(Resources.getResource(getClass(), "testdata/i18n.txt"));
+  }
+}
diff --git a/guava-tests/test/com/google/common/io/testdata/alice_in_wonderland.txt b/guava-tests/test/com/google/common/io/testdata/alice_in_wonderland.txt
new file mode 100644
index 0000000..638d1d4
--- /dev/null
+++ b/guava-tests/test/com/google/common/io/testdata/alice_in_wonderland.txt
@@ -0,0 +1,3600 @@
+                ALICE'S ADVENTURES IN WONDERLAND
+
+                          by Lewis Carroll
+
+First published in 1865.
+
+This text was produced by Project Gutenberg www.gutenberg.org,
+an organization that produces free electronic books, mostly of
+works old enough that they have passed into the public domain.
+
+
+                            CHAPTER I
+
+                      Down the Rabbit-Hole
+
+
+  Alice was beginning to get very tired of sitting by her sister
+on the bank, and of having nothing to do:  once or twice she had
+peeped into the book her sister was reading, but it had no
+pictures or conversations in it, `and what is the use of a book,'
+thought Alice `without pictures or conversation?'
+
+  So she was considering in her own mind (as well as she could,
+for the hot day made her feel very sleepy and stupid), whether
+the pleasure of making a daisy-chain would be worth the trouble
+of getting up and picking the daisies, when suddenly a White
+Rabbit with pink eyes ran close by her.
+
+  There was nothing so VERY remarkable in that; nor did Alice
+think it so VERY much out of the way to hear the Rabbit say to
+itself, `Oh dear!  Oh dear!  I shall be late!'  (when she thought
+it over afterwards, it occurred to her that she ought to have
+wondered at this, but at the time it all seemed quite natural);
+but when the Rabbit actually TOOK A WATCH OUT OF ITS WAISTCOAT-
+POCKET, and looked at it, and then hurried on, Alice started to
+her feet, for it flashed across her mind that she had never
+before seen a rabbit with either a waistcoat-pocket, or a watch to
+take out of it, and burning with curiosity, she ran across the
+field after it, and fortunately was just in time to see it pop
+down a large rabbit-hole under the hedge.
+
+  In another moment down went Alice after it, never once
+considering how in the world she was to get out again.
+
+  The rabbit-hole went straight on like a tunnel for some way,
+and then dipped suddenly down, so suddenly that Alice had not a
+moment to think about stopping herself before she found herself
+falling down a very deep well.
+
+  Either the well was very deep, or she fell very slowly, for she
+had plenty of time as she went down to look about her and to
+wonder what was going to happen next.  First, she tried to look
+down and make out what she was coming to, but it was too dark to
+see anything; then she looked at the sides of the well, and
+noticed that they were filled with cupboards and book-shelves;
+here and there she saw maps and pictures hung upon pegs.  She
+took down a jar from one of the shelves as she passed; it was
+labelled `ORANGE MARMALADE', but to her great disappointment it
+was empty:  she did not like to drop the jar for fear of killing
+somebody, so managed to put it into one of the cupboards as she
+fell past it.
+
+  `Well!' thought Alice to herself, `after such a fall as this, I
+shall think nothing of tumbling down stairs!  How brave they'll
+all think me at home!  Why, I wouldn't say anything about it,
+even if I fell off the top of the house!' (Which was very likely
+true.)
+
+  Down, down, down.  Would the fall NEVER come to an end!  `I
+wonder how many miles I've fallen by this time?' she said aloud.
+`I must be getting somewhere near the centre of the earth.  Let
+me see:  that would be four thousand miles down, I think--' (for,
+you see, Alice had learnt several things of this sort in her
+lessons in the schoolroom, and though this was not a VERY good
+opportunity for showing off her knowledge, as there was no one to
+listen to her, still it was good practice to say it over) `--yes,
+that's about the right distance--but then I wonder what Latitude
+or Longitude I've got to?'  (Alice had no idea what Latitude was,
+or Longitude either, but thought they were nice grand words to
+say.)
+
+  Presently she began again.  `I wonder if I shall fall right
+THROUGH the earth!  How funny it'll seem to come out among the
+people that walk with their heads downward!  The Antipathies, I
+think--' (she was rather glad there WAS no one listening, this
+time, as it didn't sound at all the right word) `--but I shall
+have to ask them what the name of the country is, you know.
+Please, Ma'am, is this New Zealand or Australia?' (and she tried
+to curtsey as she spoke--fancy CURTSEYING as you're falling
+through the air!  Do you think you could manage it?)  `And what
+an ignorant little girl she'll think me for asking!  No, it'll
+never do to ask:  perhaps I shall see it written up somewhere.'
+
+  Down, down, down.  There was nothing else to do, so Alice soon
+began talking again.  `Dinah'll miss me very much to-night, I
+should think!'  (Dinah was the cat.)  `I hope they'll remember
+her saucer of milk at tea-time.  Dinah my dear!  I wish you were
+down here with me!  There are no mice in the air, I'm afraid, but
+you might catch a bat, and that's very like a mouse, you know.
+But do cats eat bats, I wonder?'  And here Alice began to get
+rather sleepy, and went on saying to herself, in a dreamy sort of
+way, `Do cats eat bats?  Do cats eat bats?' and sometimes, `Do
+bats eat cats?' for, you see, as she couldn't answer either
+question, it didn't much matter which way she put it.  She felt
+that she was dozing off, and had just begun to dream that she
+was walking hand in hand with Dinah, and saying to her very
+earnestly, `Now, Dinah, tell me the truth:  did you ever eat a
+bat?' when suddenly, thump! thump! down she came upon a heap of
+sticks and dry leaves, and the fall was over.
+
+  Alice was not a bit hurt, and she jumped up on to her feet in a
+moment:  she looked up, but it was all dark overhead; before her
+was another long passage, and the White Rabbit was still in
+sight, hurrying down it.  There was not a moment to be lost:
+away went Alice like the wind, and was just in time to hear it
+say, as it turned a corner, `Oh my ears and whiskers, how late
+it's getting!'  She was close behind it when she turned the
+corner, but the Rabbit was no longer to be seen:  she found
+herself in a long, low hall, which was lit up by a row of lamps
+hanging from the roof.
+
+  There were doors all round the hall, but they were all locked;
+and when Alice had been all the way down one side and up the
+other, trying every door, she walked sadly down the middle,
+wondering how she was ever to get out again.
+
+  Suddenly she came upon a little three-legged table, all made of
+solid glass; there was nothing on it except a tiny golden key,
+and Alice's first thought was that it might belong to one of the
+doors of the hall; but, alas! either the locks were too large, or
+the key was too small, but at any rate it would not open any of
+them.  However, on the second time round, she came upon a low
+curtain she had not noticed before, and behind it was a little
+door about fifteen inches high:  she tried the little golden key
+in the lock, and to her great delight it fitted!
+
+  Alice opened the door and found that it led into a small
+passage, not much larger than a rat-hole:  she knelt down and
+looked along the passage into the loveliest garden you ever saw.
+How she longed to get out of that dark hall, and wander about
+among those beds of bright flowers and those cool fountains, but
+she could not even get her head though the doorway; `and even if
+my head would go through,' thought poor Alice, `it would be of
+very little use without my shoulders.  Oh, how I wish
+I could shut up like a telescope!  I think I could, if I only
+know how to begin.'  For, you see, so many out-of-the-way things
+had happened lately, that Alice had begun to think that very few
+things indeed were really impossible.
+
+  There seemed to be no use in waiting by the little door, so she
+went back to the table, half hoping she might find another key on
+it, or at any rate a book of rules for shutting people up like
+telescopes:  this time she found a little bottle on it, (`which
+certainly was not here before,' said Alice,) and round the neck
+of the bottle was a paper label, with the words `DRINK ME'
+beautifully printed on it in large letters.
+
+  It was all very well to say `Drink me,' but the wise little
+Alice was not going to do THAT in a hurry.  `No, I'll look
+first,' she said, `and see whether it's marked "poison" or not';
+for she had read several nice little histories about children who
+had got burnt, and eaten up by wild beasts and other unpleasant
+things, all because they WOULD not remember the simple rules
+their friends had taught them:  such as, that a red-hot poker
+will burn you if you hold it too long; and that if you cut your
+finger VERY deeply with a knife, it usually bleeds; and she had
+never forgotten that, if you drink much from a bottle marked
+`poison,' it is almost certain to disagree with you, sooner or
+later.
+
+  However, this bottle was NOT marked `poison,' so Alice ventured
+to taste it, and finding it very nice, (it had, in fact, a sort
+of mixed flavour of cherry-tart, custard, pine-apple, roast
+turkey, toffee, and hot buttered toast,) she very soon finished
+it off.
+
+     *       *       *       *       *       *       *
+
+         *       *       *       *       *       *
+
+     *       *       *       *       *       *       *
+
+  `What a curious feeling!' said Alice; `I must be shutting up
+like a telescope.'
+
+  And so it was indeed:  she was now only ten inches high, and
+her face brightened up at the thought that she was now the right
+size for going through the little door into that lovely garden.
+First, however, she waited for a few minutes to see if she was
+going to shrink any further:  she felt a little nervous about
+this; `for it might end, you know,' said Alice to herself, `in my
+going out altogether, like a candle.  I wonder what I should be
+like then?'  And she tried to fancy what the flame of a candle is
+like after the candle is blown out, for she could not remember
+ever having seen such a thing.
+
+  After a while, finding that nothing more happened, she decided
+on going into the garden at once; but, alas for poor Alice!
+when she got to the door, she found she had forgotten the
+little golden key, and when she went back to the table for it,
+she found she could not possibly reach it:  she could see it
+quite plainly through the glass, and she tried her best to climb
+up one of the legs of the table, but it was too slippery;
+and when she had tired herself out with trying,
+the poor little thing sat down and cried.
+
+  `Come, there's no use in crying like that!' said Alice to
+herself, rather sharply; `I advise you to leave off this minute!'
+She generally gave herself very good advice, (though she very
+seldom followed it), and sometimes she scolded herself so
+severely as to bring tears into her eyes; and once she remembered
+trying to box her own ears for having cheated herself in a game
+of croquet she was playing against herself, for this curious
+child was very fond of pretending to be two people.  `But it's no
+use now,' thought poor Alice, `to pretend to be two people!  Why,
+there's hardly enough of me left to make ONE respectable
+person!'
+
+  Soon her eye fell on a little glass box that was lying under
+the table:  she opened it, and found in it a very small cake, on
+which the words `EAT ME' were beautifully marked in currants.
+`Well, I'll eat it,' said Alice, `and if it makes me grow larger,
+I can reach the key; and if it makes me grow smaller, I can creep
+under the door; so either way I'll get into the garden, and I
+don't care which happens!'
+
+  She ate a little bit, and said anxiously to herself, `Which
+way?  Which way?', holding her hand on the top of her head to
+feel which way it was growing, and she was quite surprised to
+find that she remained the same size:  to be sure, this generally
+happens when one eats cake, but Alice had got so much into the
+way of expecting nothing but out-of-the-way things to happen,
+that it seemed quite dull and stupid for life to go on in the
+common way.
+
+  So she set to work, and very soon finished off the cake.
+
+     *       *       *       *       *       *       *
+
+         *       *       *       *       *       *
+
+     *       *       *       *       *       *       *
+
+
+
+
+                           CHAPTER II
+
+                        The Pool of Tears
+
+
+  `Curiouser and curiouser!' cried Alice (she was so much
+surprised, that for the moment she quite forgot how to speak good
+English); `now I'm opening out like the largest telescope that
+ever was!  Good-bye, feet!' (for when she looked down at her
+feet, they seemed to be almost out of sight, they were getting so
+far off).  `Oh, my poor little feet, I wonder who will put on
+your shoes and stockings for you now, dears?  I'm sure _I_ shan't
+be able!  I shall be a great deal too far off to trouble myself
+about you:  you must manage the best way you can; --but I must be
+kind to them,' thought Alice, `or perhaps they won't walk the
+way I want to go!  Let me see:  I'll give them a new pair of
+boots every Christmas.'
+
+  And she went on planning to herself how she would manage it.
+`They must go by the carrier,' she thought; `and how funny it'll
+seem, sending presents to one's own feet!  And how odd the
+directions will look!
+
+            ALICE'S RIGHT FOOT, ESQ.
+                HEARTHRUG,
+                    NEAR THE FENDER,
+                        (WITH ALICE'S LOVE).
+
+Oh dear, what nonsense I'm talking!'
+
+  Just then her head struck against the roof of the hall:  in
+fact she was now more than nine feet high, and she at once took
+up the little golden key and hurried off to the garden door.
+
+  Poor Alice!  It was as much as she could do, lying down on one
+side, to look through into the garden with one eye; but to get
+through was more hopeless than ever:  she sat down and began to
+cry again.
+
+  `You ought to be ashamed of yourself,' said Alice, `a great
+girl like you,' (she might well say this), `to go on crying in
+this way!  Stop this moment, I tell you!'  But she went on all
+the same, shedding gallons of tears, until there was a large pool
+all round her, about four inches deep and reaching half down the
+hall.
+
+  After a time she heard a little pattering of feet in the
+distance, and she hastily dried her eyes to see what was coming.
+It was the White Rabbit returning, splendidly dressed, with a
+pair of white kid gloves in one hand and a large fan in the
+other:  he came trotting along in a great hurry, muttering to
+himself as he came, `Oh! the Duchess, the Duchess! Oh! won't she
+be savage if I've kept her waiting!'  Alice felt so desperate
+that she was ready to ask help of any one; so, when the Rabbit
+came near her, she began, in a low, timid voice, `If you please,
+sir--'  The Rabbit started violently, dropped the white kid
+gloves and the fan, and skurried away into the darkness as hard
+as he could go.
+
+  Alice took up the fan and gloves, and, as the hall was very
+hot, she kept fanning herself all the time she went on talking:
+`Dear, dear!  How queer everything is to-day!  And yesterday
+things went on just as usual.  I wonder if I've been changed in
+the night?  Let me think:  was I the same when I got up this
+morning?  I almost think I can remember feeling a little
+different.  But if I'm not the same, the next question is, Who in
+the world am I?  Ah, THAT'S the great puzzle!'  And she began
+thinking over all the children she knew that were of the same age
+as herself, to see if she could have been changed for any of
+them.
+
+  `I'm sure I'm not Ada,' she said, `for her hair goes in such
+long ringlets, and mine doesn't go in ringlets at all; and I'm
+sure I can't be Mabel, for I know all sorts of things, and she,
+oh! she knows such a very little!  Besides, SHE'S she, and I'm I,
+and--oh dear, how puzzling it all is!  I'll try if I know all the
+things I used to know.  Let me see:  four times five is twelve,
+and four times six is thirteen, and four times seven is--oh dear!
+I shall never get to twenty at that rate!  However, the
+Multiplication Table doesn't signify:  let's try Geography.
+London is the capital of Paris, and Paris is the capital of Rome,
+and Rome--no, THAT'S all wrong, I'm certain!  I must have been
+changed for Mabel!  I'll try and say "How doth the little--"'
+and she crossed her hands on her lap as if she were saying lessons,
+and began to repeat it, but her voice sounded hoarse and
+strange, and the words did not come the same as they used to do:--
+
+            `How doth the little crocodile
+              Improve his shining tail,
+            And pour the waters of the Nile
+              On every golden scale!
+
+            `How cheerfully he seems to grin,
+              How neatly spread his claws,
+            And welcome little fishes in
+              With gently smiling jaws!'
+
+  `I'm sure those are not the right words,' said poor Alice, and
+her eyes filled with tears again as she went on, `I must be Mabel
+after all, and I shall have to go and live in that poky little
+house, and have next to no toys to play with, and oh! ever so
+many lessons to learn!  No, I've made up my mind about it; if I'm
+Mabel, I'll stay down here!  It'll be no use their putting their
+heads down and saying "Come up again, dear!"  I shall only look
+up and say "Who am I then?  Tell me that first, and then, if I
+like being that person, I'll come up:  if not, I'll stay down
+here till I'm somebody else"--but, oh dear!' cried Alice, with a
+sudden burst of tears, `I do wish they WOULD put their heads
+down!  I am so VERY tired of being all alone here!'
+
+  As she said this she looked down at her hands, and was
+surprised to see that she had put on one of the Rabbit's little
+white kid gloves while she was talking.  `How CAN I have done
+that?' she thought.  `I must be growing small again.'  She got up
+and went to the table to measure herself by it, and found that,
+as nearly as she could guess, she was now about two feet high,
+and was going on shrinking rapidly:  she soon found out that the
+cause of this was the fan she was holding, and she dropped it
+hastily, just in time to avoid shrinking away altogether.
+
+`That WAS a narrow escape!' said Alice, a good deal frightened at
+the sudden change, but very glad to find herself still in
+existence; `and now for the garden!' and she ran with all speed
+back to the little door:  but, alas! the little door was shut
+again, and the little golden key was lying on the glass table as
+before, `and things are worse than ever,' thought the poor child,
+`for I never was so small as this before, never!  And I declare
+it's too bad, that it is!'
+
+  As she said these words her foot slipped, and in another
+moment, splash! she was up to her chin in salt water.  Her first
+idea was that she had somehow fallen into the sea, `and in that
+case I can go back by railway,' she said to herself.  (Alice had
+been to the seaside once in her life, and had come to the general
+conclusion, that wherever you go to on the English coast you find
+a number of bathing machines in the sea, some children digging in
+the sand with wooden spades, then a row of lodging houses, and
+behind them a railway station.)  However, she soon made out that
+she was in the pool of tears which she had wept when she was nine
+feet high.
+
+  `I wish I hadn't cried so much!' said Alice, as she swam about,
+trying to find her way out.  `I shall be punished for it now, I
+suppose, by being drowned in my own tears!  That WILL be a queer
+thing, to be sure!  However, everything is queer to-day.'
+
+  Just then she heard something splashing about in the pool a
+little way off, and she swam nearer to make out what it was:  at
+first she thought it must be a walrus or hippopotamus, but then
+she remembered how small she was now, and she soon made out that
+it was only a mouse that had slipped in like herself.
+
+  `Would it be of any use, now,' thought Alice, `to speak to this
+mouse?  Everything is so out-of-the-way down here, that I should
+think very likely it can talk:  at any rate, there's no harm in
+trying.'  So she began:  `O Mouse, do you know the way out of
+this pool?  I am very tired of swimming about here, O Mouse!'
+(Alice thought this must be the right way of speaking to a mouse:
+she had never done such a thing before, but she remembered having
+seen in her brother's Latin Grammar, `A mouse--of a mouse--to a
+mouse--a mouse--O mouse!'  The Mouse looked at her rather
+inquisitively, and seemed to her to wink with one of its little
+eyes, but it said nothing.
+
+  `Perhaps it doesn't understand English,' thought Alice; `I
+daresay it's a French mouse, come over with William the
+Conqueror.'  (For, with all her knowledge of history, Alice had
+no very clear notion how long ago anything had happened.)  So she
+began again:  `Ou est ma chatte?' which was the first sentence in
+her French lesson-book.  The Mouse gave a sudden leap out of the
+water, and seemed to quiver all over with fright.  `Oh, I beg
+your pardon!' cried Alice hastily, afraid that she had hurt the
+poor animal's feelings.  `I quite forgot you didn't like cats.'
+
+  `Not like cats!' cried the Mouse, in a shrill, passionate
+voice.  `Would YOU like cats if you were me?'
+
+  `Well, perhaps not,' said Alice in a soothing tone:  `don't be
+angry about it.  And yet I wish I could show you our cat Dinah:
+I think you'd take a fancy to cats if you could only see her.
+She is such a dear quiet thing,' Alice went on, half to herself,
+as she swam lazily about in the pool, `and she sits purring so
+nicely by the fire, licking her paws and washing her face--and
+she is such a nice soft thing to nurse--and she's such a capital
+one for catching mice--oh, I beg your pardon!' cried Alice again,
+for this time the Mouse was bristling all over, and she felt
+certain it must be really offended.  `We won't talk about her any
+more if you'd rather not.'
+
+  `We indeed!' cried the Mouse, who was trembling down to the end
+of his tail.  `As if I would talk on such a subject!  Our family
+always HATED cats:  nasty, low, vulgar things!  Don't let me hear
+the name again!'
+
+  `I won't indeed!' said Alice, in a great hurry to change the
+subject of conversation.  `Are you--are you fond--of--of dogs?'
+The Mouse did not answer, so Alice went on eagerly:  `There is
+such a nice little dog near our house I should like to show you!
+A little bright-eyed terrier, you know, with oh, such long curly
+brown hair!  And it'll fetch things when you throw them, and
+it'll sit up and beg for its dinner, and all sorts of things--I
+can't remember half of them--and it belongs to a farmer, you
+know, and he says it's so useful, it's worth a hundred pounds!
+He says it kills all the rats and--oh dear!' cried Alice in a
+sorrowful tone, `I'm afraid I've offended it again!'  For the
+Mouse was swimming away from her as hard as it could go, and
+making quite a commotion in the pool as it went.
+
+  So she called softly after it, `Mouse dear!  Do come back
+again, and we won't talk about cats or dogs either, if you don't
+like them!'  When the Mouse heard this, it turned round and swam
+slowly back to her:  its face was quite pale (with passion, Alice
+thought), and it said in a low trembling voice, `Let us get to
+the shore, and then I'll tell you my history, and you'll
+understand why it is I hate cats and dogs.'
+
+  It was high time to go, for the pool was getting quite crowded
+with the birds and animals that had fallen into it:  there were a
+Duck and a Dodo, a Lory and an Eaglet, and several other curious
+creatures.  Alice led the way, and the whole party swam to the
+shore.
+
+
+
+                           CHAPTER III
+
+                  A Caucus-Race and a Long Tale
+
+
+  They were indeed a queer-looking party that assembled on the
+bank--the birds with draggled feathers, the animals with their
+fur clinging close to them, and all dripping wet, cross, and
+uncomfortable.
+
+  The first question of course was, how to get dry again:  they
+had a consultation about this, and after a few minutes it seemed
+quite natural to Alice to find herself talking familiarly with
+them, as if she had known them all her life.  Indeed, she had
+quite a long argument with the Lory, who at last turned sulky,
+and would only say, `I am older than you, and must know better';
+and this Alice would not allow without knowing how old it was,
+and, as the Lory positively refused to tell its age, there was no
+more to be said.
+
+  At last the Mouse, who seemed to be a person of authority among
+them, called out, `Sit down, all of you, and listen to me!  I'LL
+soon make you dry enough!'  They all sat down at once, in a large
+ring, with the Mouse in the middle.  Alice kept her eyes
+anxiously fixed on it, for she felt sure she would catch a bad
+cold if she did not get dry very soon.
+
+  `Ahem!' said the Mouse with an important air, `are you all ready?
+This is the driest thing I know.  Silence all round, if you please!
+"William the Conqueror, whose cause was favoured by the pope, was
+soon submitted to by the English, who wanted leaders, and had been
+of late much accustomed to usurpation and conquest.  Edwin and
+Morcar, the earls of Mercia and Northumbria--"'
+
+  `Ugh!' said the Lory, with a shiver.
+
+  `I beg your pardon!' said the Mouse, frowning, but very
+politely:  `Did you speak?'
+
+  `Not I!' said the Lory hastily.
+
+  `I thought you did,' said the Mouse.  `--I proceed.  "Edwin and
+Morcar, the earls of Mercia and Northumbria, declared for him:
+and even Stigand, the patriotic archbishop of Canterbury, found
+it advisable--"'
+
+  `Found WHAT?' said the Duck.
+
+  `Found IT,' the Mouse replied rather crossly:  `of course you
+know what "it" means.'
+
+  `I know what "it" means well enough, when I find a thing,' said
+the Duck:  `it's generally a frog or a worm.  The question is,
+what did the archbishop find?'
+
+  The Mouse did not notice this question, but hurriedly went on,
+`"--found it advisable to go with Edgar Atheling to meet William
+and offer him the crown.  William's conduct at first was
+moderate.  But the insolence of his Normans--"  How are you
+getting on now, my dear?' it continued, turning to Alice as it
+spoke.
+
+  `As wet as ever,' said Alice in a melancholy tone:  `it doesn't
+seem to dry me at all.'
+
+  `In that case,' said the Dodo solemnly, rising to its feet, `I
+move that the meeting adjourn, for the immediate adoption of more
+energetic remedies--'
+
+  `Speak English!' said the Eaglet.  `I don't know the meaning of
+half those long words, and, what's more, I don't believe you do
+either!'  And the Eaglet bent down its head to hide a smile:
+some of the other birds tittered audibly.
+
+  `What I was going to say,' said the Dodo in an offended tone,
+`was, that the best thing to get us dry would be a Caucus-race.'
+
+  `What IS a Caucus-race?' said Alice; not that she wanted much
+to know, but the Dodo had paused as if it thought that SOMEBODY
+ought to speak, and no one else seemed inclined to say anything.
+
+  `Why,' said the Dodo, `the best way to explain it is to do it.'
+(And, as you might like to try the thing yourself, some winter
+day, I will tell you how the Dodo managed it.)
+
+  First it marked out a race-course, in a sort of circle, (`the
+exact shape doesn't matter,' it said,) and then all the party
+were placed along the course, here and there.  There was no `One,
+two, three, and away,' but they began running when they liked,
+and left off when they liked, so that it was not easy to know
+when the race was over.  However, when they had been running half
+an hour or so, and were quite dry again, the Dodo suddenly called
+out `The race is over!' and they all crowded round it, panting,
+and asking, `But who has won?'
+
+  This question the Dodo could not answer without a great deal of
+thought, and it sat for a long time with one finger pressed upon
+its forehead (the position in which you usually see Shakespeare,
+in the pictures of him), while the rest waited in silence.  At
+last the Dodo said, `EVERYBODY has won, and all must have
+prizes.'
+
+  `But who is to give the prizes?' quite a chorus of voices
+asked.
+
+  `Why, SHE, of course,' said the Dodo, pointing to Alice with
+one finger; and the whole party at once crowded round her,
+calling out in a confused way, `Prizes! Prizes!'
+
+  Alice had no idea what to do, and in despair she put her hand
+in her pocket, and pulled out a box of comfits, (luckily the salt
+water had not got into it), and handed them round as prizes.
+There was exactly one a-piece all round.
+
+  `But she must have a prize herself, you know,' said the Mouse.
+
+  `Of course,' the Dodo replied very gravely.  `What else have
+you got in your pocket?' he went on, turning to Alice.
+
+  `Only a thimble,' said Alice sadly.
+
+  `Hand it over here,' said the Dodo.
+
+  Then they all crowded round her once more, while the Dodo
+solemnly presented the thimble, saying `We beg your acceptance of
+this elegant thimble'; and, when it had finished this short
+speech, they all cheered.
+
+  Alice thought the whole thing very absurd, but they all looked
+so grave that she did not dare to laugh; and, as she could not
+think of anything to say, she simply bowed, and took the thimble,
+looking as solemn as she could.
+
+  The next thing was to eat the comfits:  this caused some noise
+and confusion, as the large birds complained that they could not
+taste theirs, and the small ones choked and had to be patted on
+the back.  However, it was over at last, and they sat down again
+in a ring, and begged the Mouse to tell them something more.
+
+  `You promised to tell me your history, you know,' said Alice,
+`and why it is you hate--C and D,' she added in a whisper, half
+afraid that it would be offended again.
+
+  `Mine is a long and a sad tale!' said the Mouse, turning to
+Alice, and sighing.
+
+  `It IS a long tail, certainly,' said Alice, looking down with
+wonder at the Mouse's tail; `but why do you call it sad?'  And
+she kept on puzzling about it while the Mouse was speaking, so
+that her idea of the tale was something like this:--
+
+                    `Fury said to a
+                   mouse, That he
+                 met in the
+               house,
+            "Let us
+              both go to
+                law:  I will
+                  prosecute
+                    YOU.  --Come,
+                       I'll take no
+                        denial; We
+                     must have a
+                 trial:  For
+              really this
+           morning I've
+          nothing
+         to do."
+           Said the
+             mouse to the
+               cur, "Such
+                 a trial,
+                   dear Sir,
+                         With
+                     no jury
+                  or judge,
+                would be
+              wasting
+             our
+              breath."
+               "I'll be
+                 judge, I'll
+                   be jury,"
+                         Said
+                    cunning
+                      old Fury:
+                     "I'll
+                      try the
+                         whole
+                          cause,
+                             and
+                        condemn
+                       you
+                      to
+                       death."'
+
+
+  `You are not attending!' said the Mouse to Alice severely.
+`What are you thinking of?'
+
+  `I beg your pardon,' said Alice very humbly:  `you had got to
+the fifth bend, I think?'
+
+  `I had NOT!' cried the Mouse, sharply and very angrily.
+
+  `A knot!' said Alice, always ready to make herself useful, and
+looking anxiously about her.  `Oh, do let me help to undo it!'
+
+  `I shall do nothing of the sort,' said the Mouse, getting up
+and walking away.  `You insult me by talking such nonsense!'
+
+  `I didn't mean it!' pleaded poor Alice.  `But you're so easily
+offended, you know!'
+
+  The Mouse only growled in reply.
+
+  `Please come back and finish your story!' Alice called after
+it; and the others all joined in chorus, `Yes, please do!' but
+the Mouse only shook its head impatiently, and walked a little
+quicker.
+
+  `What a pity it wouldn't stay!' sighed the Lory, as soon as it
+was quite out of sight; and an old Crab took the opportunity of
+saying to her daughter `Ah, my dear!  Let this be a lesson to you
+never to lose YOUR temper!'  `Hold your tongue, Ma!' said the
+young Crab, a little snappishly.  `You're enough to try the
+patience of an oyster!'
+
+  `I wish I had our Dinah here, I know I do!' said Alice aloud,
+addressing nobody in particular.  `She'd soon fetch it back!'
+
+  `And who is Dinah, if I might venture to ask the question?'
+said the Lory.
+
+  Alice replied eagerly, for she was always ready to talk about
+her pet:  `Dinah's our cat.  And she's such a capital one for
+catching mice you can't think!  And oh, I wish you could see her
+after the birds!  Why, she'll eat a little bird as soon as look
+at it!'
+
+  This speech caused a remarkable sensation among the party.
+Some of the birds hurried off at once:  one old Magpie began
+wrapping itself up very carefully, remarking, `I really must be
+getting home; the night-air doesn't suit my throat!' and a Canary
+called out in a trembling voice to its children, `Come away, my
+dears!  It's high time you were all in bed!'  On various pretexts
+they all moved off, and Alice was soon left alone.
+
+  `I wish I hadn't mentioned Dinah!' she said to herself in a
+melancholy tone.  `Nobody seems to like her, down here, and I'm
+sure she's the best cat in the world!  Oh, my dear Dinah!  I
+wonder if I shall ever see you any more!'  And here poor Alice
+began to cry again, for she felt very lonely and low-spirited.
+In a little while, however, she again heard a little pattering of
+footsteps in the distance, and she looked up eagerly, half hoping
+that the Mouse had changed his mind, and was coming back to
+finish his story.
+
+
+
+                           CHAPTER IV
+
+                The Rabbit Sends in a Little Bill
+
+
+  It was the White Rabbit, trotting slowly back again, and
+looking anxiously about as it went, as if it had lost something;
+and she heard it muttering to itself `The Duchess!  The Duchess!
+Oh my dear paws!  Oh my fur and whiskers!  She'll get me
+executed, as sure as ferrets are ferrets!  Where CAN I have
+dropped them, I wonder?'  Alice guessed in a moment that it was
+looking for the fan and the pair of white kid gloves, and she
+very good-naturedly began hunting about for them, but they were
+nowhere to be seen--everything seemed to have changed since her
+swim in the pool, and the great hall, with the glass table and
+the little door, had vanished completely.
+
+  Very soon the Rabbit noticed Alice, as she went hunting about,
+and called out to her in an angry tone, `Why, Mary Ann, what ARE
+you doing out here?  Run home this moment, and fetch me a pair of
+gloves and a fan!  Quick, now!'  And Alice was so much frightened
+that she ran off at once in the direction it pointed to, without
+trying to explain the mistake it had made.
+
+  `He took me for his housemaid,' she said to herself as she ran.
+`How surprised he'll be when he finds out who I am!  But I'd
+better take him his fan and gloves--that is, if I can find them.'
+As she said this, she came upon a neat little house, on the door
+of which was a bright brass plate with the name `W. RABBIT'
+engraved upon it.  She went in without knocking, and hurried
+upstairs, in great fear lest she should meet the real Mary Ann,
+and be turned out of the house before she had found the fan and
+gloves.
+
+  `How queer it seems,' Alice said to herself, `to be going
+messages for a rabbit!  I suppose Dinah'll be sending me on
+messages next!'  And she began fancying the sort of thing that
+would happen:  `"Miss Alice!  Come here directly, and get ready
+for your walk!" "Coming in a minute, nurse!  But I've got to see
+that the mouse doesn't get out."  Only I don't think,' Alice went
+on, `that they'd let Dinah stop in the house if it began ordering
+people about like that!'
+
+  By this time she had found her way into a tidy little room with
+a table in the window, and on it (as she had hoped) a fan and two
+or three pairs of tiny white kid gloves:  she took up the fan and
+a pair of the gloves, and was just going to leave the room, when
+her eye fell upon a little bottle that stood near the looking-
+glass.  There was no label this time with the words `DRINK ME,'
+but nevertheless she uncorked it and put it to her lips.  `I know
+SOMETHING interesting is sure to happen,' she said to herself,
+`whenever I eat or drink anything; so I'll just see what this
+bottle does.  I do hope it'll make me grow large again, for
+really I'm quite tired of being such a tiny little thing!'
+
+  It did so indeed, and much sooner than she had expected:
+before she had drunk half the bottle, she found her head pressing
+against the ceiling, and had to stoop to save her neck from being
+broken.  She hastily put down the bottle, saying to herself
+`That's quite enough--I hope I shan't grow any more--As it is, I
+can't get out at the door--I do wish I hadn't drunk quite so
+much!'
+
+  Alas! it was too late to wish that!  She went on growing, and
+growing, and very soon had to kneel down on the floor:  in
+another minute there was not even room for this, and she tried
+the effect of lying down with one elbow against the door, and the
+other arm curled round her head.  Still she went on growing, and,
+as a last resource, she put one arm out of the window, and one
+foot up the chimney, and said to herself `Now I can do no more,
+whatever happens.  What WILL become of me?'
+
+  Luckily for Alice, the little magic bottle had now had its full
+effect, and she grew no larger:  still it was very uncomfortable,
+and, as there seemed to be no sort of chance of her ever getting
+out of the room again, no wonder she felt unhappy.
+
+  `It was much pleasanter at home,' thought poor Alice, `when one
+wasn't always growing larger and smaller, and being ordered about
+by mice and rabbits.  I almost wish I hadn't gone down that
+rabbit-hole--and yet--and yet--it's rather curious, you know,
+this sort of life!  I do wonder what CAN have happened to me!
+When I used to read fairy-tales, I fancied that kind of thing
+never happened, and now here I am in the middle of one!  There
+ought to be a book written about me, that there ought!  And when
+I grow up, I'll write one--but I'm grown up now,' she added in a
+sorrowful tone; `at least there's no room to grow up any more
+HERE.'
+
+  `But then,' thought Alice, `shall I NEVER get any older than I
+am now?  That'll be a comfort, one way--never to be an old woman--
+but then--always to have lessons to learn!  Oh, I shouldn't like THAT!'
+
+  `Oh, you foolish Alice!' she answered herself.  `How can you
+learn lessons in here?  Why, there's hardly room for YOU, and no
+room at all for any lesson-books!'
+
+  And so she went on, taking first one side and then the other,
+and making quite a conversation of it altogether; but after a few
+minutes she heard a voice outside, and stopped to listen.
+
+  `Mary Ann!  Mary Ann!' said the voice.  `Fetch me my gloves
+this moment!'  Then came a little pattering of feet on the
+stairs.  Alice knew it was the Rabbit coming to look for her, and
+she trembled till she shook the house, quite forgetting that she
+was now about a thousand times as large as the Rabbit, and had no
+reason to be afraid of it.
+
+  Presently the Rabbit came up to the door, and tried to open it;
+but, as the door opened inwards, and Alice's elbow was pressed
+hard against it, that attempt proved a failure.  Alice heard it
+say to itself `Then I'll go round and get in at the window.'
+
+  `THAT you won't' thought Alice, and, after waiting till she
+fancied she heard the Rabbit just under the window, she suddenly
+spread out her hand, and made a snatch in the air.  She did not
+get hold of anything, but she heard a little shriek and a fall,
+and a crash of broken glass, from which she concluded that it was
+just possible it had fallen into a cucumber-frame, or something
+of the sort.
+
+  Next came an angry voice--the Rabbit's--`Pat! Pat!  Where are
+you?'  And then a voice she had never heard before, `Sure then
+I'm here!  Digging for apples, yer honour!'
+
+  `Digging for apples, indeed!' said the Rabbit angrily.  `Here!
+Come and help me out of THIS!'  (Sounds of more broken glass.)
+
+  `Now tell me, Pat, what's that in the window?'
+
+  `Sure, it's an arm, yer honour!'  (He pronounced it `arrum.')
+
+  `An arm, you goose!   Who ever saw one that size?  Why, it
+fills the whole window!'
+
+  `Sure, it does, yer honour:  but it's an arm for all that.'
+
+  `Well, it's got no business there, at any rate:  go and take it
+away!'
+
+  There was a long silence after this, and Alice could only hear
+whispers now and then; such as, `Sure, I don't like it, yer
+honour, at all, at all!'  `Do as I tell you, you coward!' and at
+last she spread out her hand again, and made another snatch in
+the air.  This time there were TWO little shrieks, and more
+sounds of broken glass.  `What a number of cucumber-frames there
+must be!' thought Alice.  `I wonder what they'll do next!  As for
+pulling me out of the window, I only wish they COULD!  I'm sure I
+don't want to stay in here any longer!'
+
+  She waited for some time without hearing anything more:  at
+last came a rumbling of little cartwheels, and the sound of a
+good many voices all talking together:  she made out the words:
+`Where's the other ladder?--Why, I hadn't to bring but one;
+Bill's got the other--Bill! fetch it here, lad!--Here, put 'em up
+at this corner--No, tie 'em together first--they don't reach half
+high enough yet--Oh! they'll do well enough; don't be particular--
+Here, Bill! catch hold of this rope--Will the roof bear?--Mind
+that loose slate--Oh, it's coming down!  Heads below!' (a loud
+crash)--`Now, who did that?--It was Bill, I fancy--Who's to go
+down the chimney?--Nay, I shan't! YOU do it!--That I won't,
+then!--Bill's to go down--Here, Bill! the master says you're to
+go down the chimney!'
+
+  `Oh! So Bill's got to come down the chimney, has he?' said
+Alice to herself.  `Shy, they seem to put everything upon Bill!
+I wouldn't be in Bill's place for a good deal:  this fireplace is
+narrow, to be sure; but I THINK I can kick a little!'
+
+  She drew her foot as far down the chimney as she could, and
+waited till she heard a little animal (she couldn't guess of what
+sort it was) scratching and scrambling about in the chimney close
+above her:  then, saying to herself `This is Bill,' she gave one
+sharp kick, and waited to see what would happen next.
+
+  The first thing she heard was a general chorus of `There goes
+Bill!' then the Rabbit's voice along--`Catch him, you by the
+hedge!' then silence, and then another confusion of voices--`Hold
+up his head--Brandy now--Don't choke him--How was it, old fellow?
+What happened to you?  Tell us all about it!'
+
+  Last came a little feeble, squeaking voice, (`That's Bill,'
+thought Alice,) `Well, I hardly know--No more, thank ye; I'm
+better now--but I'm a deal too flustered to tell you--all I know
+is, something comes at me like a Jack-in-the-box, and up I goes
+like a sky-rocket!'
+
+  `So you did, old fellow!' said the others.
+
+  `We must burn the house down!' said the Rabbit's voice; and
+Alice called out as loud as she could, `If you do.  I'll set
+Dinah at you!'
+
+  There was a dead silence instantly, and Alice thought to
+herself, `I wonder what they WILL do next!  If they had any
+sense, they'd take the roof off.'  After a minute or two, they
+began moving about again, and Alice heard the Rabbit say, `A
+barrowful will do, to begin with.'
+
+  `A barrowful of WHAT?' thought Alice; but she had not long to
+doubt, for the next moment a shower of little pebbles came
+rattling in at the window, and some of them hit her in the face.
+`I'll put a stop to this,' she said to herself, and shouted out,
+`You'd better not do that again!' which produced another dead
+silence.
+
+  Alice noticed with some surprise that the pebbles were all
+turning into little cakes as they lay on the floor, and a bright
+idea came into her head.  `If I eat one of these cakes,' she
+thought, `it's sure to make SOME change in my size; and as it
+can't possibly make me larger, it must make me smaller, I
+suppose.'
+
+  So she swallowed one of the cakes, and was delighted to find
+that she began shrinking directly.  As soon as she was small
+enough to get through the door, she ran out of the house, and
+found quite a crowd of little animals and birds waiting outside.
+The poor little Lizard, Bill, was in the middle, being held up by
+two guinea-pigs, who were giving it something out of a bottle.
+They all made a rush at Alice the moment she appeared; but she
+ran off as hard as she could, and soon found herself safe in a
+thick wood.
+
+  `The first thing I've got to do,' said Alice to herself, as she
+wandered about in the wood, `is to grow to my right size again;
+and the second thing is to find my way into that lovely garden.
+I think that will be the best plan.'
+
+  It sounded an excellent plan, no doubt, and very neatly and
+simply arranged; the only difficulty was, that she had not the
+smallest idea how to set about it; and while she was peering
+about anxiously among the trees, a little sharp bark just over
+her head made her look up in a great hurry.
+
+  An enormous puppy was looking down at her with large round
+eyes, and feebly stretching out one paw, trying to touch her.
+`Poor little thing!' said Alice, in a coaxing tone, and she tried
+hard to whistle to it; but she was terribly frightened all the
+time at the thought that it might be hungry, in which case it
+would be very likely to eat her up in spite of all her coaxing.
+
+  Hardly knowing what she did, she picked up a little bit of
+stick, and held it out to the puppy; whereupon the puppy jumped
+into the air off all its feet at once, with a yelp of delight,
+and rushed at the stick, and made believe to worry it; then Alice
+dodged behind a great thistle, to keep herself from being run
+over; and the moment she appeared on the other side, the puppy
+made another rush at the stick, and tumbled head over heels in
+its hurry to get hold of it; then Alice, thinking it was very
+like having a game of play with a cart-horse, and expecting every
+moment to be trampled under its feet, ran round the thistle
+again; then the puppy began a series of short charges at the
+stick, running a very little way forwards each time and a long
+way back, and barking hoarsely all the while, till at last it sat
+down a good way off, panting, with its tongue hanging out of its
+mouth, and its great eyes half shut.
+
+  This seemed to Alice a good opportunity for making her escape;
+so she set off at once, and ran till she was quite tired and out
+of breath, and till the puppy's bark sounded quite faint in the
+distance.
+
+  `And yet what a dear little puppy it was!' said Alice, as she
+leant against a buttercup to rest herself, and fanned herself
+with one of the leaves:  `I should have liked teaching it tricks
+very much, if--if I'd only been the right size to do it!  Oh
+dear!  I'd nearly forgotten that I've got to grow up again!  Let
+me see--how IS it to be managed?  I suppose I ought to eat or
+drink something or other; but the great question is, what?'
+
+  The great question certainly was, what?  Alice looked all round
+her at the flowers and the blades of grass, but she did not see
+anything that looked like the right thing to eat or drink under
+the circumstances.  There was a large mushroom growing near her,
+about the same height as herself; and when she had looked under
+it, and on both sides of it, and behind it, it occurred to her
+that she might as well look and see what was on the top of it.
+
+  She stretched herself up on tiptoe, and peeped over the edge of
+the mushroom, and her eyes immediately met those of a large
+caterpillar, that was sitting on the top with its arms folded,
+quietly smoking a long hookah, and taking not the smallest notice
+of her or of anything else.
+
+
+
+                            CHAPTER V
+
+                    Advice from a Caterpillar
+
+
+  The Caterpillar and Alice looked at each other for some time in
+silence:  at last the Caterpillar took the hookah out of its
+mouth, and addressed her in a languid, sleepy voice.
+
+  `Who are YOU?' said the Caterpillar.
+
+  This was not an encouraging opening for a conversation.  Alice
+replied, rather shyly, `I--I hardly know, sir, just at present--
+at least I know who I WAS when I got up this morning, but I think
+I must have been changed several times since then.'
+
+  `What do you mean by that?' said the Caterpillar sternly.
+`Explain yourself!'
+
+  `I can't explain MYSELF, I'm afraid, sir' said Alice, `because
+I'm not myself, you see.'
+
+  `I don't see,' said the Caterpillar.
+
+  `I'm afraid I can't put it more clearly,' Alice replied very
+politely, `for I can't understand it myself to begin with; and
+being so many different sizes in a day is very confusing.'
+
+  `It isn't,' said the Caterpillar.
+
+  `Well, perhaps you haven't found it so yet,' said Alice; `but
+when you have to turn into a chrysalis--you will some day, you
+know--and then after that into a butterfly, I should think you'll
+feel it a little queer, won't you?'
+
+  `Not a bit,' said the Caterpillar.
+
+  `Well, perhaps your feelings may be different,' said Alice;
+`all I know is, it would feel very queer to ME.'
+
+  `You!' said the Caterpillar contemptuously.  `Who are YOU?'
+
+  Which brought them back again to the beginning of the
+conversation.  Alice felt a little irritated at the Caterpillar's
+making such VERY short remarks, and she drew herself up and said,
+very gravely, `I think, you ought to tell me who YOU are, first.'
+
+  `Why?' said the Caterpillar.
+
+  Here was another puzzling question; and as Alice could not
+think of any good reason, and as the Caterpillar seemed to be in
+a VERY unpleasant state of mind, she turned away.
+
+  `Come back!' the Caterpillar called after her.  `I've something
+important to say!'
+
+  This sounded promising, certainly:  Alice turned and came back
+again.
+
+  `Keep your temper,' said the Caterpillar.
+
+  `Is that all?' said Alice, swallowing down her anger as well as
+she could.
+
+  `No,' said the Caterpillar.
+
+  Alice thought she might as well wait, as she had nothing else
+to do, and perhaps after all it might tell her something worth
+hearing.  For some minutes it puffed away without speaking, but
+at last it unfolded its arms, took the hookah out of its mouth
+again, and said, `So you think you're changed, do you?'
+
+  `I'm afraid I am, sir,' said Alice; `I can't remember things as
+I used--and I don't keep the same size for ten minutes together!'
+
+  `Can't remember WHAT things?' said the Caterpillar.
+
+  `Well, I've tried to say "HOW DOTH THE LITTLE BUSY BEE," but it
+all came different!' Alice replied in a very melancholy voice.
+
+  `Repeat, "YOU ARE OLD, FATHER WILLIAM,"' said the Caterpillar.
+
+  Alice folded her hands, and began:--
+
+    `You are old, Father William,' the young man said,
+      `And your hair has become very white;
+    And yet you incessantly stand on your head--
+      Do you think, at your age, it is right?'
+
+    `In my youth,' Father William replied to his son,
+      `I feared it might injure the brain;
+    But, now that I'm perfectly sure I have none,
+      Why, I do it again and again.'
+
+    `You are old,' said the youth, `as I mentioned before,
+      And have grown most uncommonly fat;
+    Yet you turned a back-somersault in at the door--
+      Pray, what is the reason of that?'
+
+    `In my youth,' said the sage, as he shook his grey locks,
+      `I kept all my limbs very supple
+    By the use of this ointment--one shilling the box--
+      Allow me to sell you a couple?'
+
+    `You are old,' said the youth, `and your jaws are too weak
+      For anything tougher than suet;
+    Yet you finished the goose, with the bones and the beak--
+      Pray how did you manage to do it?'
+
+    `In my youth,' said his father, `I took to the law,
+      And argued each case with my wife;
+    And the muscular strength, which it gave to my jaw,
+      Has lasted the rest of my life.'
+
+    `You are old,' said the youth, `one would hardly suppose
+      That your eye was as steady as ever;
+    Yet you balanced an eel on the end of your nose--
+      What made you so awfully clever?'
+
+    `I have answered three questions, and that is enough,'
+      Said his father; `don't give yourself airs!
+    Do you think I can listen all day to such stuff?
+      Be off, or I'll kick you down stairs!'
+
+
+  `That is not said right,' said the Caterpillar.
+
+  `Not QUITE right, I'm afraid,' said Alice, timidly; `some of the
+words have got altered.'
+
+  `It is wrong from beginning to end,' said the Caterpillar
+decidedly, and there was silence for some minutes.
+
+  The Caterpillar was the first to speak.
+
+  `What size do you want to be?' it asked.
+
+  `Oh, I'm not particular as to size,' Alice hastily replied;
+`only one doesn't like changing so often, you know.'
+
+  `I DON'T know,' said the Caterpillar.
+
+  Alice said nothing:  she had never been so much contradicted in
+her life before, and she felt that she was losing her temper.
+
+  `Are you content now?' said the Caterpillar.
+
+  `Well, I should like to be a LITTLE larger, sir, if you
+wouldn't mind,' said Alice:  `three inches is such a wretched
+height to be.'
+
+  `It is a very good height indeed!' said the Caterpillar
+angrily, rearing itself upright as it spoke (it was exactly three
+inches high).
+
+  `But I'm not used to it!' pleaded poor Alice in a piteous tone.
+And she thought of herself, `I wish the creatures wouldn't be so
+easily offended!'
+
+  `You'll get used to it in time,' said the Caterpillar; and it
+put the hookah into its mouth and began smoking again.
+
+  This time Alice waited patiently until it chose to speak again.
+In a minute or two the Caterpillar took the hookah out of its
+mouth and yawned once or twice, and shook itself.  Then it got
+down off the mushroom, and crawled away in the grass, merely
+remarking as it went, `One side will make you grow taller, and
+the other side will make you grow shorter.'
+
+  `One side of WHAT?  The other side of WHAT?' thought Alice to
+herself.
+
+  `Of the mushroom,' said the Caterpillar, just as if she had
+asked it aloud; and in another moment it was out of sight.
+
+  Alice remained looking thoughtfully at the mushroom for a
+minute, trying to make out which were the two sides of it; and as
+it was perfectly round, she found this a very difficult question.
+However, at last she stretched her arms round it as far as they
+would go, and broke off a bit of the edge with each hand.
+
+  `And now which is which?' she said to herself, and nibbled a
+little of the right-hand bit to try the effect:  the next moment
+she felt a violent blow underneath her chin:  it had struck her
+foot!
+
+  She was a good deal frightened by this very sudden change, but
+she felt that there was no time to be lost, as she was shrinking
+rapidly; so she set to work at once to eat some of the other bit.
+Her chin was pressed so closely against her foot, that there was
+hardly room to open her mouth; but she did it at last, and
+managed to swallow a morsel of the lefthand bit.
+
+
+     *       *       *       *       *       *       *
+
+         *       *       *       *       *       *
+
+     *       *       *       *       *       *       *
+
+  `Come, my head's free at last!' said Alice in a tone of
+delight, which changed into alarm in another moment, when she
+found that her shoulders were nowhere to be found:  all she could
+see, when she looked down, was an immense length of neck, which
+seemed to rise like a stalk out of a sea of green leaves that lay
+far below her.
+
+  `What CAN all that green stuff be?' said Alice.  `And where
+HAVE my shoulders got to?  And oh, my poor hands, how is it I
+can't see you?'  She was moving them about as she spoke, but no
+result seemed to follow, except a little shaking among the
+distant green leaves.
+
+  As there seemed to be no chance of getting her hands up to her
+head, she tried to get her head down to them, and was delighted
+to find that her neck would bend about easily in any direction,
+like a serpent.  She had just succeeded in curving it down into a
+graceful zigzag, and was going to dive in among the leaves, which
+she found to be nothing but the tops of the trees under which she
+had been wandering, when a sharp hiss made her draw back in a
+hurry:  a large pigeon had flown into her face, and was beating
+her violently with its wings.
+
+  `Serpent!' screamed the Pigeon.
+
+  `I'm NOT a serpent!' said Alice indignantly.  `Let me alone!'
+
+  `Serpent, I say again!' repeated the Pigeon, but in a more
+subdued tone, and added with a kind of sob, `I've tried every
+way, and nothing seems to suit them!'
+
+  `I haven't the least idea what you're talking about,' said
+Alice.
+
+  `I've tried the roots of trees, and I've tried banks, and I've
+tried hedges,' the Pigeon went on, without attending to her; `but
+those serpents!  There's no pleasing them!'
+
+  Alice was more and more puzzled, but she thought there was no
+use in saying anything more till the Pigeon had finished.
+
+  `As if it wasn't trouble enough hatching the eggs,' said the
+Pigeon; `but I must be on the look-out for serpents night and
+day!  Why, I haven't had a wink of sleep these three weeks!'
+
+  `I'm very sorry you've been annoyed,' said Alice, who was
+beginning to see its meaning.
+
+  `And just as I'd taken the highest tree in the wood,' continued
+the Pigeon, raising its voice to a shriek, `and just as I was
+thinking I should be free of them at last, they must needs come
+wriggling down from the sky!  Ugh, Serpent!'
+
+  `But I'm NOT a serpent, I tell you!' said Alice.  `I'm a--I'm
+a--'
+
+  `Well!  WHAT are you?' said the Pigeon.  `I can see you're
+trying to invent something!'
+
+  `I--I'm a little girl,' said Alice, rather doubtfully, as she
+remembered the number of changes she had gone through that day.
+
+  `A likely story indeed!' said the Pigeon in a tone of the
+deepest contempt.  `I've seen a good many little girls in my
+time, but never ONE with such a neck as that!  No, no!  You're a
+serpent; and there's no use denying it.  I suppose you'll be
+telling me next that you never tasted an egg!'
+
+  `I HAVE tasted eggs, certainly,' said Alice, who was a very
+truthful child; `but little girls eat eggs quite as much as
+serpents do, you know.'
+
+  `I don't believe it,' said the Pigeon; `but if they do, why
+then they're a kind of serpent, that's all I can say.'
+
+  This was such a new idea to Alice, that she was quite silent
+for a minute or two, which gave the Pigeon the opportunity of
+adding, `You're looking for eggs, I know THAT well enough; and
+what does it matter to me whether you're a little girl or a
+serpent?'
+
+  `It matters a good deal to ME,' said Alice hastily; `but I'm
+not looking for eggs, as it happens; and if I was, I shouldn't
+want YOURS:  I don't like them raw.'
+
+  `Well, be off, then!' said the Pigeon in a sulky tone, as it
+settled down again into its nest.  Alice crouched down among the
+trees as well as she could, for her neck kept getting entangled
+among the branches, and every now and then she had to stop and
+untwist it.  After a while she remembered that she still held the
+pieces of mushroom in her hands, and she set to work very
+carefully, nibbling first at one and then at the other, and
+growing sometimes taller and sometimes shorter, until she had
+succeeded in bringing herself down to her usual height.
+
+  It was so long since she had been anything near the right size,
+that it felt quite strange at first; but she got used to it in a
+few minutes, and began talking to herself, as usual.  `Come,
+there's half my plan done now!  How puzzling all these changes
+are!  I'm never sure what I'm going to be, from one minute to
+another!  However, I've got back to my right size:  the next
+thing is, to get into that beautiful garden--how IS that to be
+done, I wonder?'  As she said this, she came suddenly upon an
+open place, with a little house in it about four feet high.
+`Whoever lives there,' thought Alice, `it'll never do to come
+upon them THIS size:  why, I should frighten them out of their
+wits!'  So she began nibbling at the righthand bit again, and did
+not venture to go near the house till she had brought herself
+down to nine inches high.
+
+
+
+                           CHAPTER VI
+
+                         Pig and Pepper
+
+
+  For a minute or two she stood looking at the house, and
+wondering what to do next, when suddenly a footman in livery came
+running out of the wood--(she considered him to be a footman
+because he was in livery:  otherwise, judging by his face only,
+she would have called him a fish)--and rapped loudly at the door
+with his knuckles.  It was opened by another footman in livery,
+with a round face, and large eyes like a frog; and both footmen,
+Alice noticed, had powdered hair that curled all over their
+heads.  She felt very curious to know what it was all about, and
+crept a little way out of the wood to listen.
+
+  The Fish-Footman began by producing from under his arm a great
+letter, nearly as large as himself, and this he handed over to
+the other, saying, in a solemn tone, `For the Duchess.  An
+invitation from the Queen to play croquet.'  The Frog-Footman
+repeated, in the same solemn tone, only changing the order of the
+words a little, `From the Queen.  An invitation for the Duchess
+to play croquet.'
+
+  Then they both bowed low, and their curls got entangled
+together.
+
+  Alice laughed so much at this, that she had to run back into
+the wood for fear of their hearing her; and when she next peeped
+out the Fish-Footman was gone, and the other was sitting on the
+ground near the door, staring stupidly up into the sky.
+
+  Alice went timidly up to the door, and knocked.
+
+  `There's no sort of use in knocking,' said the Footman, `and
+that for two reasons.  First, because I'm on the same side of the
+door as you are; secondly, because they're making such a noise
+inside, no one could possibly hear you.'  And certainly there was
+a most extraordinary noise going on within--a constant howling
+and sneezing, and every now and then a great crash, as if a dish
+or kettle had been broken to pieces.
+
+  `Please, then,' said Alice, `how am I to get in?'
+
+  `There might be some sense in your knocking,' the Footman went
+on without attending to her, `if we had the door between us.  For
+instance, if you were INSIDE, you might knock, and I could let
+you out, you know.'  He was looking up into the sky all the time
+he was speaking, and this Alice thought decidedly uncivil.  `But
+perhaps he can't help it,' she said to herself; `his eyes are so
+VERY nearly at the top of his head.  But at any rate he might
+answer questions.--How am I to get in?' she repeated, aloud.
+
+  `I shall sit here,' the Footman remarked, `till tomorrow--'
+
+  At this moment the door of the house opened, and a large plate
+came skimming out, straight at the Footman's head:  it just
+grazed his nose, and broke to pieces against one of the trees
+behind him.
+
+  `--or next day, maybe,' the Footman continued in the same tone,
+exactly as if nothing had happened.
+
+  `How am I to get in?' asked Alice again, in a louder tone.
+
+  `ARE you to get in at all?' said the Footman.  `That's the
+first question, you know.'
+
+  It was, no doubt:  only Alice did not like to be told so.
+`It's really dreadful,' she muttered to herself, `the way all the
+creatures argue.  It's enough to drive one crazy!'
+
+  The Footman seemed to think this a good opportunity for
+repeating his remark, with variations.  `I shall sit here,' he
+said, `on and off, for days and days.'
+
+  `But what am I to do?' said Alice.
+
+  `Anything you like,' said the Footman, and began whistling.
+
+  `Oh, there's no use in talking to him,' said Alice desperately:
+`he's perfectly idiotic!'  And she opened the door and went in.
+
+  The door led right into a large kitchen, which was full of
+smoke from one end to the other:  the Duchess was sitting on a
+three-legged stool in the middle, nursing a baby; the cook was
+leaning over the fire, stirring a large cauldron which seemed to
+be full of soup.
+
+  `There's certainly too much pepper in that soup!' Alice said to
+herself, as well as she could for sneezing.
+
+  There was certainly too much of it in the air.  Even the
+Duchess sneezed occasionally; and as for the baby, it was
+sneezing and howling alternately without a moment's pause.  The
+only things in the kitchen that did not sneeze, were the cook,
+and a large cat which was sitting on the hearth and grinning from
+ear to ear.
+
+  `Please would you tell me,' said Alice, a little timidly, for
+she was not quite sure whether it was good manners for her to
+speak first, `why your cat grins like that?'
+
+  `It's a Cheshire cat,' said the Duchess, `and that's why.  Pig!'
+
+  She said the last word with such sudden violence that Alice
+quite jumped; but she saw in another moment that it was addressed
+to the baby, and not to her, so she took courage, and went on
+again:--
+
+  `I didn't know that Cheshire cats always grinned; in fact, I
+didn't know that cats COULD grin.'
+
+  `They all can,' said the Duchess; `and most of 'em do.'
+
+  `I don't know of any that do,' Alice said very politely,
+feeling quite pleased to have got into a conversation.
+
+  `You don't know much,' said the Duchess; `and that's a fact.'
+
+  Alice did not at all like the tone of this remark, and thought
+it would be as well to introduce some other subject of
+conversation.  While she was trying to fix on one, the cook took
+the cauldron of soup off the fire, and at once set to work
+throwing everything within her reach at the Duchess and the baby
+--the fire-irons came first; then followed a shower of saucepans,
+plates, and dishes.  The Duchess took no notice of them even when
+they hit her; and the baby was howling so much already, that it
+was quite impossible to say whether the blows hurt it or not.
+
+  `Oh, PLEASE mind what you're doing!' cried Alice, jumping up
+and down in an agony of terror.  `Oh, there goes his PRECIOUS
+nose'; as an unusually large saucepan flew close by it, and very
+nearly carried it off.
+
+  `If everybody minded their own business,' the Duchess said in a
+hoarse growl, `the world would go round a deal faster than it
+does.'
+
+  `Which would NOT be an advantage,' said Alice, who felt very
+glad to get an opportunity of showing off a little of her
+knowledge.  `Just think of what work it would make with the day
+and night!  You see the earth takes twenty-four hours to turn
+round on its axis--'
+
+  `Talking of axes,' said the Duchess, `chop off her head!'
+
+  Alice glanced rather anxiously at the cook, to see if she meant
+to take the hint; but the cook was busily stirring the soup, and
+seemed not to be listening, so she went on again:  `Twenty-four
+hours, I THINK; or is it twelve?  I--'
+
+  `Oh, don't bother ME,' said the Duchess; `I never could abide
+figures!'  And with that she began nursing her child again,
+singing a sort of lullaby to it as she did so, and giving it a
+violent shake at the end of every line:
+
+        `Speak roughly to your little boy,
+          And beat him when he sneezes:
+        He only does it to annoy,
+          Because he knows it teases.'
+
+                    CHORUS.
+
+    (In which the cook and the baby joined):--
+
+                `Wow! wow! wow!'
+
+  While the Duchess sang the second verse of the song, she kept
+tossing the baby violently up and down, and the poor little thing
+howled so, that Alice could hardly hear the words:--
+
+        `I speak severely to my boy,
+          I beat him when he sneezes;
+        For he can thoroughly enjoy
+          The pepper when he pleases!'
+
+                    CHORUS.
+
+                `Wow! wow! wow!'
+
+  `Here! you may nurse it a bit, if you like!' the Duchess said
+to Alice, flinging the baby at her as she spoke.  `I must go and
+get ready to play croquet with the Queen,' and she hurried out of
+the room.  The cook threw a frying-pan after her as she went out,
+but it just missed her.
+
+  Alice caught the baby with some difficulty, as it was a queer-
+shaped little creature, and held out its arms and legs in all
+directions, `just like a star-fish,' thought Alice.  The poor
+little thing was snorting like a steam-engine when she caught it,
+and kept doubling itself up and straightening itself out again,
+so that altogether, for the first minute or two, it was as much
+as she could do to hold it.
+
+  As soon as she had made out the proper way of nursing it,
+(which was to twist it up into a sort of knot, and then keep
+tight hold of its right ear and left foot, so as to prevent its
+undoing itself,) she carried it out into the open air.  `IF I
+don't take this child away with me,' thought Alice, `they're sure
+to kill it in a day or two:  wouldn't it be murder to leave it
+behind?'  She said the last words out loud, and the little thing
+grunted in reply (it had left off sneezing by this time).  `Don't
+grunt,' said Alice; `that's not at all a proper way of expressing
+yourself.'
+
+  The baby grunted again, and Alice looked very anxiously into
+its face to see what was the matter with it.  There could be no
+doubt that it had a VERY turn-up nose, much more like a snout
+than a real nose; also its eyes were getting extremely small for
+a baby:  altogether Alice did not like the look of the thing at
+all.  `But perhaps it was only sobbing,' she thought, and looked
+into its eyes again, to see if there were any tears.
+
+  No, there were no tears.  `If you're going to turn into a pig,
+my dear,' said Alice, seriously, `I'll have nothing more to do
+with you.  Mind now!'  The poor little thing sobbed again (or
+grunted, it was impossible to say which), and they went on for
+some while in silence.
+
+  Alice was just beginning to think to herself, `Now, what am I
+to do with this creature when I get it home?' when it grunted
+again, so violently, that she looked down into its face in some
+alarm.  This time there could be NO mistake about it:  it was
+neither more nor less than a pig, and she felt that it would be
+quite absurd for her to carry it further.
+
+  So she set the little creature down, and felt quite relieved to
+see it trot away quietly into the wood.  `If it had grown up,'
+she said to herself, `it would have made a dreadfully ugly child:
+but it makes rather a handsome pig, I think.'  And she began
+thinking over other children she knew, who might do very well as
+pigs, and was just saying to herself, `if one only knew the right
+way to change them--' when she was a little startled by seeing
+the Cheshire Cat sitting on a bough of a tree a few yards off.
+
+  The Cat only grinned when it saw Alice.  It looked good-
+natured, she thought:  still it had VERY long claws and a great
+many teeth, so she felt that it ought to be treated with respect.
+
+  `Cheshire Puss,' she began, rather timidly, as she did not at
+all know whether it would like the name:  however, it only
+grinned a little wider.  `Come, it's pleased so far,' thought
+Alice, and she went on.  `Would you tell me, please, which way I
+ought to go from here?'
+
+  `That depends a good deal on where you want to get to,' said
+the Cat.
+
+  `I don't much care where--' said Alice.
+
+  `Then it doesn't matter which way you go,' said the Cat.
+
+  `--so long as I get SOMEWHERE,' Alice added as an explanation.
+
+  `Oh, you're sure to do that,' said the Cat, `if you only walk
+long enough.'
+
+  Alice felt that this could not be denied, so she tried another
+question.  `What sort of people live about here?'
+
+  `In THAT direction,' the Cat said, waving its right paw round,
+`lives a Hatter:  and in THAT direction,' waving the other paw,
+`lives a March Hare.  Visit either you like:  they're both mad.'
+
+  `But I don't want to go among mad people,' Alice remarked.
+
+  `Oh, you can't help that,' said the Cat:  `we're all mad here.
+I'm mad.  You're mad.'
+
+  `How do you know I'm mad?' said Alice.
+
+  `You must be,' said the Cat, `or you wouldn't have come here.'
+
+  Alice didn't think that proved it at all; however, she went on
+`And how do you know that you're mad?'
+
+  `To begin with,' said the Cat, `a dog's not mad.  You grant
+that?'
+
+  `I suppose so,' said Alice.
+
+  `Well, then,' the Cat went on, `you see, a dog growls when it's
+angry, and wags its tail when it's pleased.  Now I growl when I'm
+pleased, and wag my tail when I'm angry.  Therefore I'm mad.'
+
+  `I call it purring, not growling,' said Alice.
+
+  `Call it what you like,' said the Cat.  `Do you play croquet
+with the Queen to-day?'
+
+  `I should like it very much,' said Alice, `but I haven't been
+invited yet.'
+
+  `You'll see me there,' said the Cat, and vanished.
+
+  Alice was not much surprised at this, she was getting so used
+to queer things happening.  While she was looking at the place
+where it had been, it suddenly appeared again.
+
+  `By-the-bye, what became of the baby?' said the Cat.  `I'd
+nearly forgotten to ask.'
+
+  `It turned into a pig,' Alice quietly said, just as if it had
+come back in a natural way.
+
+  `I thought it would,' said the Cat, and vanished again.
+
+  Alice waited a little, half expecting to see it again, but it
+did not appear, and after a minute or two she walked on in the
+direction in which the March Hare was said to live.  `I've seen
+hatters before,' she said to herself; `the March Hare will be
+much the most interesting, and perhaps as this is May it won't be
+raving mad--at least not so mad as it was in March.'  As she said
+this, she looked up, and there was the Cat again, sitting on a
+branch of a tree.
+
+  `Did you say pig, or fig?' said the Cat.
+
+  `I said pig,' replied Alice; `and I wish you wouldn't keep
+appearing and vanishing so suddenly:  you make one quite giddy.'
+
+  `All right,' said the Cat; and this time it vanished quite slowly,
+beginning with the end of the tail, and ending with the grin,
+which remained some time after the rest of it had gone.
+
+  `Well!  I've often seen a cat without a grin,' thought Alice;
+`but a grin without a cat!  It's the most curious thing I ever
+saw in my life!'
+
+  She had not gone much farther before she came in sight of the
+house of the March Hare:  she thought it must be the right house,
+because the chimneys were shaped like ears and the roof was
+thatched with fur.  It was so large a house, that she did not
+like to go nearer till she had nibbled some more of the lefthand
+bit of mushroom, and raised herself to about two feet high:  even
+then she walked up towards it rather timidly, saying to herself
+`Suppose it should be raving mad after all!  I almost wish I'd
+gone to see the Hatter instead!'
+
+
+
+                           CHAPTER VII
+
+                         A Mad Tea-Party
+
+
+  There was a table set out under a tree in front of the house,
+and the March Hare and the Hatter were having tea at it:  a
+Dormouse was sitting between them, fast asleep, and the other two
+were using it as a cushion, resting their elbows on it, and talking
+over its head.  `Very uncomfortable for the Dormouse,' thought Alice;
+`only, as it's asleep, I suppose it doesn't mind.'
+
+  The table was a large one, but the three were all crowded
+together at one corner of it:  `No room!  No room!' they cried
+out when they saw Alice coming.  `There's PLENTY of room!' said
+Alice indignantly, and she sat down in a large arm-chair at one
+end of the table.
+
+  `Have some wine,' the March Hare said in an encouraging tone.
+
+  Alice looked all round the table, but there was nothing on it
+but tea.  `I don't see any wine,' she remarked.
+
+  `There isn't any,' said the March Hare.
+
+  `Then it wasn't very civil of you to offer it,' said Alice
+angrily.
+
+  `It wasn't very civil of you to sit down without being
+invited,' said the March Hare.
+
+  `I didn't know it was YOUR table,' said Alice; `it's laid for a
+great many more than three.'
+
+  `Your hair wants cutting,' said the Hatter.  He had been
+looking at Alice for some time with great curiosity, and this was
+his first speech.
+
+  `You should learn not to make personal remarks,' Alice said
+with some severity; `it's very rude.'
+
+  The Hatter opened his eyes very wide on hearing this; but all
+he SAID was, `Why is a raven like a writing-desk?'
+
+  `Come, we shall have some fun now!' thought Alice.  `I'm glad
+they've begun asking riddles.--I believe I can guess that,' she
+added aloud.
+
+  `Do you mean that you think you can find out the answer to it?'
+said the March Hare.
+
+  `Exactly so,' said Alice.
+
+  `Then you should say what you mean,' the March Hare went on.
+
+  `I do,' Alice hastily replied; `at least--at least I mean what
+I say--that's the same thing, you know.'
+
+  `Not the same thing a bit!' said the Hatter.  `You might just
+as well say that "I see what I eat" is the same thing as "I eat
+what I see"!'
+
+  `You might just as well say,' added the March Hare, `that "I
+like what I get" is the same thing as "I get what I like"!'
+
+  `You might just as well say,' added the Dormouse, who seemed to
+be talking in his sleep, `that "I breathe when I sleep" is the
+same thing as "I sleep when I breathe"!'
+
+  `It IS the same thing with you,' said the Hatter, and here the
+conversation dropped, and the party sat silent for a minute,
+while Alice thought over all she could remember about ravens and
+writing-desks, which wasn't much.
+
+  The Hatter was the first to break the silence.  `What day of
+the month is it?' he said, turning to Alice:  he had taken his
+watch out of his pocket, and was looking at it uneasily, shaking
+it every now and then, and holding it to his ear.
+
+  Alice considered a little, and then said `The fourth.'
+
+  `Two days wrong!' sighed the Hatter.  `I told you butter
+wouldn't suit the works!' he added looking angrily at the March
+Hare.
+
+  `It was the BEST butter,' the March Hare meekly replied.
+
+  `Yes, but some crumbs must have got in as well,' the Hatter
+grumbled:  `you shouldn't have put it in with the bread-knife.'
+
+  The March Hare took the watch and looked at it gloomily:  then
+he dipped it into his cup of tea, and looked at it again:  but he
+could think of nothing better to say than his first remark, `It
+was the BEST butter, you know.'
+
+  Alice had been looking over his shoulder with some curiosity.
+`What a funny watch!' she remarked.  `It tells the day of the
+month, and doesn't tell what o'clock it is!'
+
+  `Why should it?' muttered the Hatter.  `Does YOUR watch tell
+you what year it is?'
+
+  `Of course not,' Alice replied very readily:  `but that's
+because it stays the same year for such a long time together.'
+
+  `Which is just the case with MINE,' said the Hatter.
+
+  Alice felt dreadfully puzzled.  The Hatter's remark seemed to
+have no sort of meaning in it, and yet it was certainly English.
+`I don't quite understand you,' she said, as politely as she
+could.
+
+  `The Dormouse is asleep again,' said the Hatter, and he poured
+a little hot tea upon its nose.
+
+  The Dormouse shook its head impatiently, and said, without
+opening its eyes, `Of course, of course; just what I was going to
+remark myself.'
+
+  `Have you guessed the riddle yet?' the Hatter said, turning to
+Alice again.
+
+  `No, I give it up,' Alice replied:  `what's the answer?'
+
+  `I haven't the slightest idea,' said the Hatter.
+
+  `Nor I,' said the March Hare.
+
+  Alice sighed wearily.  `I think you might do something better
+with the time,' she said, `than waste it in asking riddles that
+have no answers.'
+
+  `If you knew Time as well as I do,' said the Hatter, `you
+wouldn't talk about wasting IT.  It's HIM.'
+
+  `I don't know what you mean,' said Alice.
+
+  `Of course you don't!' the Hatter said, tossing his head
+contemptuously.  `I dare say you never even spoke to Time!'
+
+  `Perhaps not,' Alice cautiously replied:  `but I know I have to
+beat time when I learn music.'
+
+  `Ah! that accounts for it,' said the Hatter.  `He won't stand
+beating.  Now, if you only kept on good terms with him, he'd do
+almost anything you liked with the clock.  For instance, suppose
+it were nine o'clock in the morning, just time to begin lessons:
+you'd only have to whisper a hint to Time, and round goes the
+clock in a twinkling!  Half-past one, time for dinner!'
+
+  (`I only wish it was,' the March Hare said to itself in a
+whisper.)
+
+  `That would be grand, certainly,' said Alice thoughtfully:
+`but then--I shouldn't be hungry for it, you know.'
+
+  `Not at first, perhaps,' said the Hatter:  `but you could keep
+it to half-past one as long as you liked.'
+
+  `Is that the way YOU manage?' Alice asked.
+
+  The Hatter shook his head mournfully.  `Not I!' he replied.
+`We quarrelled last March--just before HE went mad, you know--'
+(pointing with his tea spoon at the March Hare,) `--it was at the
+great concert given by the Queen of Hearts, and I had to sing
+
+            "Twinkle, twinkle, little bat!
+            How I wonder what you're at!"
+
+You know the song, perhaps?'
+
+  `I've heard something like it,' said Alice.
+
+  `It goes on, you know,' the Hatter continued, `in this way:--
+
+            "Up above the world you fly,
+            Like a tea-tray in the sky.
+                    Twinkle, twinkle--"'
+
+Here the Dormouse shook itself, and began singing in its sleep
+`Twinkle, twinkle, twinkle, twinkle--' and went on so long that
+they had to pinch it to make it stop.
+
+  `Well, I'd hardly finished the first verse,' said the Hatter,
+`when the Queen jumped up and bawled out, "He's murdering the
+time!  Off with his head!"'
+
+  `How dreadfully savage!' exclaimed Alice.
+
+  `And ever since that,' the Hatter went on in a mournful tone,
+`he won't do a thing I ask!  It's always six o'clock now.'
+
+  A bright idea came into Alice's head.  `Is that the reason so
+many tea-things are put out here?' she asked.
+
+  `Yes, that's it,' said the Hatter with a sigh:  `it's always
+tea-time, and we've no time to wash the things between whiles.'
+
+  `Then you keep moving round, I suppose?' said Alice.
+
+  `Exactly so,' said the Hatter:  `as the things get used up.'
+
+  `But what happens when you come to the beginning again?' Alice
+ventured to ask.
+
+  `Suppose we change the subject,' the March Hare interrupted,
+yawning.  `I'm getting tired of this.  I vote the young lady
+tells us a story.'
+
+  `I'm afraid I don't know one,' said Alice, rather alarmed at
+the proposal.
+
+  `Then the Dormouse shall!' they both cried.  `Wake up,
+Dormouse!'  And they pinched it on both sides at once.
+
+  The Dormouse slowly opened his eyes.  `I wasn't asleep,' he
+said in a hoarse, feeble voice:  `I heard every word you fellows
+were saying.'
+
+  `Tell us a story!' said the March Hare.
+
+  `Yes, please do!' pleaded Alice.
+
+  `And be quick about it,' added the Hatter, `or you'll be asleep
+again before it's done.'
+
+  `Once upon a time there were three little sisters,' the
+Dormouse began in a great hurry; `and their names were Elsie,
+Lacie, and Tillie; and they lived at the bottom of a well--'
+
+  `What did they live on?' said Alice, who always took a great
+interest in questions of eating and drinking.
+
+  `They lived on treacle,' said the Dormouse, after thinking a
+minute or two.
+
+  `They couldn't have done that, you know,' Alice gently
+remarked; `they'd have been ill.'
+
+  `So they were,' said the Dormouse; `VERY ill.'
+
+  Alice tried to fancy to herself what such an extraordinary ways
+of living would be like, but it puzzled her too much, so she went
+on:  `But why did they live at the bottom of a well?'
+
+  `Take some more tea,' the March Hare said to Alice, very
+earnestly.
+
+  `I've had nothing yet,' Alice replied in an offended tone, `so
+I can't take more.'
+
+  `You mean you can't take LESS,' said the Hatter:  `it's very
+easy to take MORE than nothing.'
+
+  `Nobody asked YOUR opinion,' said Alice.
+
+  `Who's making personal remarks now?' the Hatter asked
+triumphantly.
+
+  Alice did not quite know what to say to this:  so she helped
+herself to some tea and bread-and-butter, and then turned to the
+Dormouse, and repeated her question.  `Why did they live at the
+bottom of a well?'
+
+  The Dormouse again took a minute or two to think about it, and
+then said, `It was a treacle-well.'
+
+  `There's no such thing!'  Alice was beginning very angrily, but
+the Hatter and the March Hare went `Sh! sh!' and the Dormouse
+sulkily remarked, `If you can't be civil, you'd better finish the
+story for yourself.'
+
+  `No, please go on!' Alice said very humbly; `I won't interrupt
+again.  I dare say there may be ONE.'
+
+  `One, indeed!' said the Dormouse indignantly.  However, he
+consented to go on.  `And so these three little sisters--they
+were learning to draw, you know--'
+
+  `What did they draw?' said Alice, quite forgetting her promise.
+
+  `Treacle,' said the Dormouse, without considering at all this
+time.
+
+  `I want a clean cup,' interrupted the Hatter:  `let's all move
+one place on.'
+
+  He moved on as he spoke, and the Dormouse followed him:  the
+March Hare moved into the Dormouse's place, and Alice rather
+unwillingly took the place of the March Hare.  The Hatter was the
+only one who got any advantage from the change:  and Alice was a
+good deal worse off than before, as the March Hare had just upset
+the milk-jug into his plate.
+
+  Alice did not wish to offend the Dormouse again, so she began
+very cautiously:  `But I don't understand.  Where did they draw
+the treacle from?'
+
+  `You can draw water out of a water-well,' said the Hatter; `so
+I should think you could draw treacle out of a treacle-well--eh,
+stupid?'
+
+  `But they were IN the well,' Alice said to the Dormouse, not
+choosing to notice this last remark.
+
+  `Of course they were', said the Dormouse; `--well in.'
+
+  This answer so confused poor Alice, that she let the Dormouse
+go on for some time without interrupting it.
+
+  `They were learning to draw,' the Dormouse went on, yawning and
+rubbing its eyes, for it was getting very sleepy; `and they drew
+all manner of things--everything that begins with an M--'
+
+  `Why with an M?' said Alice.
+
+  `Why not?' said the March Hare.
+
+  Alice was silent.
+
+  The Dormouse had closed its eyes by this time, and was going
+off into a doze; but, on being pinched by the Hatter, it woke up
+again with a little shriek, and went on:  `--that begins with an
+M, such as mouse-traps, and the moon, and memory, and muchness--
+you know you say things are "much of a muchness"--did you ever
+see such a thing as a drawing of a muchness?'
+
+  `Really, now you ask me,' said Alice, very much confused, `I
+don't think--'
+
+  `Then you shouldn't talk,' said the Hatter.
+
+  This piece of rudeness was more than Alice could bear:  she got
+up in great disgust, and walked off; the Dormouse fell asleep
+instantly, and neither of the others took the least notice of her
+going, though she looked back once or twice, half hoping that
+they would call after her:  the last time she saw them, they were
+trying to put the Dormouse into the teapot.
+
+  `At any rate I'll never go THERE again!' said Alice as she
+picked her way through the wood.  `It's the stupidest tea-party I
+ever was at in all my life!'
+
+  Just as she said this, she noticed that one of the trees had a
+door leading right into it.  `That's very curious!' she thought.
+`But everything's curious today.  I think I may as well go in at once.'
+And in she went.
+
+  Once more she found herself in the long hall, and close to the
+little glass table.  `Now, I'll manage better this time,'
+she said to herself, and began by taking the little golden key,
+and unlocking the door that led into the garden.  Then she went
+to work nibbling at the mushroom (she had kept a piece of it
+in her pocket) till she was about a foot high:  then she walked down
+the little passage:  and THEN--she found herself at last in the
+beautiful garden, among the bright flower-beds and the cool fountains.
+
+
+
+                          CHAPTER VIII
+
+                   The Queen's Croquet-Ground
+
+
+  A large rose-tree stood near the entrance of the garden:  the
+roses growing on it were white, but there were three gardeners at
+it, busily painting them red.  Alice thought this a very curious
+thing, and she went nearer to watch them, and just as she came up
+to them she heard one of them say, `Look out now, Five!  Don't go
+splashing paint over me like that!'
+
+  `I couldn't help it,' said Five, in a sulky tone; `Seven jogged
+my elbow.'
+
+  On which Seven looked up and said, `That's right, Five!  Always
+lay the blame on others!'
+
+  `YOU'D better not talk!' said Five.  `I heard the Queen say only
+yesterday you deserved to be beheaded!'
+
+  `What for?' said the one who had spoken first.
+
+  `That's none of YOUR business, Two!' said Seven.
+
+  `Yes, it IS his business!' said Five, `and I'll tell him--it
+was for bringing the cook tulip-roots instead of onions.'
+
+  Seven flung down his brush, and had just begun `Well, of all
+the unjust things--' when his eye chanced to fall upon Alice, as
+she stood watching them, and he checked himself suddenly:  the
+others looked round also, and all of them bowed low.
+
+  `Would you tell me,' said Alice, a little timidly, `why you are
+painting those roses?'
+
+  Five and Seven said nothing, but looked at Two.  Two began in a
+low voice, `Why the fact is, you see, Miss, this here ought to
+have been a RED rose-tree, and we put a white one in by mistake;
+and if the Queen was to find it out, we should all have our heads
+cut off, you know.  So you see, Miss, we're doing our best, afore
+she comes, to--'  At this moment Five, who had been anxiously
+looking across the garden, called out `The Queen!  The Queen!'
+and the three gardeners instantly threw themselves flat upon
+their faces.  There was a sound of many footsteps, and Alice
+looked round, eager to see the Queen.
+
+  First came ten soldiers carrying clubs; these were all shaped
+like the three gardeners, oblong and flat, with their hands and
+feet at the corners:  next the ten courtiers; these were
+ornamented all over with diamonds, and walked two and two, as the
+soldiers did.  After these came the royal children; there were
+ten of them, and the little dears came jumping merrily along hand
+in hand, in couples:  they were all ornamented with hearts.  Next
+came the guests, mostly Kings and Queens, and among them Alice
+recognised the White Rabbit:  it was talking in a hurried nervous
+manner, smiling at everything that was said, and went by without
+noticing her.  Then followed the Knave of Hearts, carrying the
+King's crown on a crimson velvet cushion; and, last of all this
+grand procession, came THE KING AND QUEEN OF HEARTS.
+
+  Alice was rather doubtful whether she ought not to lie down on
+her face like the three gardeners, but she could not remember
+ever having heard of such a rule at processions; `and besides,
+what would be the use of a procession,' thought she, `if people
+had all to lie down upon their faces, so that they couldn't see it?'
+So she stood still where she was, and waited.
+
+  When the procession came opposite to Alice, they all stopped
+and looked at her, and the Queen said severely `Who is this?'
+She said it to the Knave of Hearts, who only bowed and smiled in reply.
+
+  `Idiot!' said the Queen, tossing her head impatiently; and,
+turning to Alice, she went on, `What's your name, child?'
+
+  `My name is Alice, so please your Majesty,' said Alice very
+politely; but she added, to herself, `Why, they're only a pack of
+cards, after all.  I needn't be afraid of them!'
+
+  `And who are THESE?' said the Queen, pointing to the three
+gardeners who were lying round the rosetree; for, you see, as
+they were lying on their faces, and the pattern on their backs
+was the same as the rest of the pack, she could not tell whether
+they were gardeners, or soldiers, or courtiers, or three of her
+own children.
+
+  `How should I know?' said Alice, surprised at her own courage.
+`It's no business of MINE.'
+
+  The Queen turned crimson with fury, and, after glaring at her
+for a moment like a wild beast, screamed `Off with her head!
+Off--'
+
+  `Nonsense!' said Alice, very loudly and decidedly, and the
+Queen was silent.
+
+  The King laid his hand upon her arm, and timidly said
+`Consider, my dear:  she is only a child!'
+
+  The Queen turned angrily away from him, and said to the Knave
+`Turn them over!'
+
+  The Knave did so, very carefully, with one foot.
+
+  `Get up!' said the Queen, in a shrill, loud voice, and the
+three gardeners instantly jumped up, and began bowing to the
+King, the Queen, the royal children, and everybody else.
+
+  `Leave off that!' screamed the Queen.  `You make me giddy.'
+And then, turning to the rose-tree, she went on, `What HAVE you
+been doing here?'
+
+  `May it please your Majesty,' said Two, in a very humble tone,
+going down on one knee as he spoke, `we were trying--'
+
+  `I see!' said the Queen, who had meanwhile been examining the
+roses.  `Off with their heads!' and the procession moved on,
+three of the soldiers remaining behind to execute the unfortunate
+gardeners, who ran to Alice for protection.
+
+  `You shan't be beheaded!' said Alice, and she put them into a
+large flower-pot that stood near.  The three soldiers wandered
+about for a minute or two, looking for them, and then quietly
+marched off after the others.
+
+  `Are their heads off?' shouted the Queen.
+
+  `Their heads are gone, if it please your Majesty!' the soldiers
+shouted in reply.
+
+  `That's right!' shouted the Queen.  `Can you play croquet?'
+
+  The soldiers were silent, and looked at Alice, as the question
+was evidently meant for her.
+
+  `Yes!' shouted Alice.
+
+  `Come on, then!' roared the Queen, and Alice joined the
+procession, wondering very much what would happen next.
+
+  `It's--it's a very fine day!' said a timid voice at her side.
+She was walking by the White Rabbit, who was peeping anxiously
+into her face.
+
+  `Very,' said Alice:  `--where's the Duchess?'
+
+  `Hush!  Hush!' said the Rabbit in a low, hurried tone.  He
+looked anxiously over his shoulder as he spoke, and then raised
+himself upon tiptoe, put his mouth close to her ear, and
+whispered `She's under sentence of execution.'
+
+  `What for?' said Alice.
+
+  `Did you say "What a pity!"?' the Rabbit asked.
+
+  `No, I didn't,' said Alice:  `I don't think it's at all a pity.
+I said "What for?"'
+
+  `She boxed the Queen's ears--' the Rabbit began.  Alice gave a
+little scream of laughter.  `Oh, hush!' the Rabbit whispered in a
+frightened tone.  `The Queen will hear you!  You see, she came
+rather late, and the Queen said--'
+
+  `Get to your places!' shouted the Queen in a voice of thunder,
+and people began running about in all directions, tumbling up
+against each other; however, they got settled down in a minute or
+two, and the game began.  Alice thought she had never seen such a
+curious croquet-ground in her life; it was all ridges and
+furrows; the balls were live hedgehogs, the mallets live
+flamingoes, and the soldiers had to double themselves up and to
+stand on their hands and feet, to make the arches.
+
+  The chief difficulty Alice found at first was in managing her
+flamingo:  she succeeded in getting its body tucked away,
+comfortably enough, under her arm, with its legs hanging down,
+but generally, just as she had got its neck nicely straightened
+out, and was going to give the hedgehog a blow with its head, it
+WOULD twist itself round and look up in her face, with such a
+puzzled expression that she could not help bursting out laughing:
+and when she had got its head down, and was going to begin again,
+it was very provoking to find that the hedgehog had unrolled
+itself, and was in the act of crawling away:  besides all this,
+there was generally a ridge or furrow in the way wherever she
+wanted to send the hedgehog to, and, as the doubled-up soldiers
+were always getting up and walking off to other parts of the
+ground, Alice soon came to the conclusion that it was a very
+difficult game indeed.
+
+  The players all played at once without waiting for turns,
+quarrelling all the while, and fighting for the hedgehogs; and in
+a very short time the Queen was in a furious passion, and went
+stamping about, and shouting `Off with his head!' or `Off with
+her head!' about once in a minute.
+
+  Alice began to feel very uneasy:  to be sure, she had not as
+yet had any dispute with the Queen, but she knew that it might
+happen any minute, `and then,' thought she, `what would become of
+me?  They're dreadfully fond of beheading people here; the great
+wonder is, that there's any one left alive!'
+
+  She was looking about for some way of escape, and wondering
+whether she could get away without being seen, when she noticed a
+curious appearance in the air:  it puzzled her very much at
+first, but, after watching it a minute or two, she made it out to
+be a grin, and she said to herself `It's the Cheshire Cat:  now I
+shall have somebody to talk to.'
+
+  `How are you getting on?' said the Cat, as soon as there was
+mouth enough for it to speak with.
+
+  Alice waited till the eyes appeared, and then nodded.  `It's no
+use speaking to it,' she thought, `till its ears have come, or at
+least one of them.'  In another minute the whole head appeared,
+and then Alice put down her flamingo, and began an account of the
+game, feeling very glad she had someone to listen to her.  The
+Cat seemed to think that there was enough of it now in sight, and
+no more of it appeared.
+
+  `I don't think they play at all fairly,' Alice began, in rather
+a complaining tone, `and they all quarrel so dreadfully one can't
+hear oneself speak--and they don't seem to have any rules in
+particular; at least, if there are, nobody attends to them--and
+you've no idea how confusing it is all the things being alive;
+for instance, there's the arch I've got to go through next
+walking about at the other end of the ground--and I should have
+croqueted the Queen's hedgehog just now, only it ran away when it
+saw mine coming!'
+
+  `How do you like the Queen?' said the Cat in a low voice.
+
+  `Not at all,' said Alice:  `she's so extremely--'  Just then
+she noticed that the Queen was close behind her, listening:  so
+she went on, `--likely to win, that it's hardly worth while
+finishing the game.'
+
+  The Queen smiled and passed on.
+
+  `Who ARE you talking to?' said the King, going up to Alice, and
+looking at the Cat's head with great curiosity.
+
+  `It's a friend of mine--a Cheshire Cat,' said Alice:  `allow me
+to introduce it.'
+
+  `I don't like the look of it at all,' said the King:
+`however, it may kiss my hand if it likes.'
+
+  `I'd rather not,' the Cat remarked.
+
+  `Don't be impertinent,' said the King, `and don't look at me
+like that!'  He got behind Alice as he spoke.
+
+  `A cat may look at a king,' said Alice.  `I've read that in
+some book, but I don't remember where.'
+
+  `Well, it must be removed,' said the King very decidedly, and
+he called the Queen, who was passing at the moment, `My dear!  I
+wish you would have this cat removed!'
+
+  The Queen had only one way of settling all difficulties, great
+or small.  `Off with his head!' she said, without even looking
+round.
+
+  `I'll fetch the executioner myself,' said the King eagerly, and
+he hurried off.
+
+  Alice thought she might as well go back, and see how the game
+was going on, as she heard the Queen's voice in the distance,
+screaming with passion.  She had already heard her sentence three
+of the players to be executed for having missed their turns, and
+she did not like the look of things at all, as the game was in
+such confusion that she never knew whether it was her turn or
+not.  So she went in search of her hedgehog.
+
+  The hedgehog was engaged in a fight with another hedgehog,
+which seemed to Alice an excellent opportunity for croqueting one
+of them with the other:  the only difficulty was, that her
+flamingo was gone across to the other side of the garden, where
+Alice could see it trying in a helpless sort of way to fly up
+into a tree.
+
+  By the time she had caught the flamingo and brought it back,
+the fight was over, and both the hedgehogs were out of sight:
+`but it doesn't matter much,' thought Alice, `as all the arches
+are gone from this side of the ground.'  So she tucked it away
+under her arm, that it might not escape again, and went back for
+a little more conversation with her friend.
+
+  When she got back to the Cheshire Cat, she was surprised to
+find quite a large crowd collected round it:  there was a dispute
+going on between the executioner, the King, and the Queen, who
+were all talking at once, while all the rest were quite silent,
+and looked very uncomfortable.
+
+  The moment Alice appeared, she was appealed to by all three to
+settle the question, and they repeated their arguments to her,
+though, as they all spoke at once, she found it very hard indeed
+to make out exactly what they said.
+
+  The executioner's argument was, that you couldn't cut off a
+head unless there was a body to cut it off from:  that he had
+never had to do such a thing before, and he wasn't going to begin
+at HIS time of life.
+
+  The King's argument was, that anything that had a head could be
+beheaded, and that you weren't to talk nonsense.
+
+  The Queen's argument was, that if something wasn't done about
+it in less than no time she'd have everybody executed, all round.
+(It was this last remark that had made the whole party look so
+grave and anxious.)
+
+  Alice could think of nothing else to say but `It belongs to the
+Duchess:  you'd better ask HER about it.'
+
+  `She's in prison,' the Queen said to the executioner:  `fetch
+her here.'  And the executioner went off like an arrow.
+
+   The Cat's head began fading away the moment he was gone, and,
+by the time he had come back with the Dutchess, it had entirely
+disappeared; so the King and the executioner ran wildly up and down
+looking for it, while the rest of the party went back to the game.
+
+
+
+                           CHAPTER IX
+
+                     The Mock Turtle's Story
+
+
+  `You can't think how glad I am to see you again, you dear old
+thing!' said the Duchess, as she tucked her arm affectionately
+into Alice's, and they walked off together.
+
+  Alice was very glad to find her in such a pleasant temper, and
+thought to herself that perhaps it was only the pepper that had
+made her so savage when they met in the kitchen.
+
+  `When I'M a Duchess,' she said to herself, (not in a very
+hopeful tone though), `I won't have any pepper in my kitchen AT
+ALL.  Soup does very well without--Maybe it's always pepper that
+makes people hot-tempered,' she went on, very much pleased at
+having found out a new kind of rule, `and vinegar that makes them
+sour--and camomile that makes them bitter--and--and barley-sugar
+and such things that make children sweet-tempered.  I only wish
+people knew that:  then they wouldn't be so stingy about it, you
+know--'
+
+  She had quite forgotten the Duchess by this time, and was a
+little startled when she heard her voice close to her ear.
+`You're thinking about something, my dear, and that makes you
+forget to talk.  I can't tell you just now what the moral of that
+is, but I shall remember it in a bit.'
+
+  `Perhaps it hasn't one,' Alice ventured to remark.
+
+  `Tut, tut, child!' said the Duchess.  `Everything's got a
+moral, if only you can find it.'  And she squeezed herself up
+closer to Alice's side as she spoke.
+
+  Alice did not much like keeping so close to her:  first,
+because the Duchess was VERY ugly; and secondly, because she was
+exactly the right height to rest her chin upon Alice's shoulder,
+and it was an uncomfortably sharp chin.  However, she did not
+like to be rude, so she bore it as well as she could.
+
+  `The game's going on rather better now,' she said, by way of
+keeping up the conversation a little.
+
+  `'Tis so,' said the Duchess:  `and the moral of that is--"Oh,
+'tis love, 'tis love, that makes the world go round!"'
+
+  `Somebody said,' Alice whispered, `that it's done by everybody
+minding their own business!'
+
+  `Ah, well!  It means much the same thing,' said the Duchess,
+digging her sharp little chin into Alice's shoulder as she added,
+`and the moral of THAT is--"Take care of the sense, and the
+sounds will take care of themselves."'
+
+  `How fond she is of finding morals in things!' Alice thought to
+herself.
+
+  `I dare say you're wondering why I don't put my arm round your
+waist,' the Duchess said after a pause:  `the reason is, that I'm
+doubtful about the temper of your flamingo.  Shall I try the
+experiment?'
+
+  `HE might bite,' Alice cautiously replied, not feeling at all
+anxious to have the experiment tried.
+
+  `Very true,' said the Duchess:  `flamingoes and mustard both
+bite.  And the moral of that is--"Birds of a feather flock
+together."'
+
+  `Only mustard isn't a bird,' Alice remarked.
+
+  `Right, as usual,' said the Duchess:  `what a clear way you
+have of putting things!'
+
+  `It's a mineral, I THINK,' said Alice.
+
+  `Of course it is,' said the Duchess, who seemed ready to agree
+to everything that Alice said; `there's a large mustard-mine near
+here.  And the moral of that is--"The more there is of mine, the
+less there is of yours."'
+
+  `Oh, I know!' exclaimed Alice, who had not attended to this
+last remark, `it's a vegetable.  It doesn't look like one, but it
+is.'
+
+  `I quite agree with you,' said the Duchess; `and the moral of
+that is--"Be what you would seem to be"--or if you'd like it put
+more simply--"Never imagine yourself not to be otherwise than
+what it might appear to others that what you were or might have
+been was not otherwise than what you had been would have appeared
+to them to be otherwise."'
+
+  `I think I should understand that better,' Alice said very
+politely, `if I had it written down:  but I can't quite follow it
+as you say it.'
+
+  `That's nothing to what I could say if I chose,' the Duchess
+replied, in a pleased tone.
+
+  `Pray don't trouble yourself to say it any longer than that,'
+said Alice.
+
+  `Oh, don't talk about trouble!' said the Duchess.  `I make you
+a present of everything I've said as yet.'
+
+  `A cheap sort of present!' thought Alice.  `I'm glad they don't
+give birthday presents like that!'  But she did not venture to
+say it out loud.
+
+  `Thinking again?' the Duchess asked, with another dig of her
+sharp little chin.
+
+  `I've a right to think,' said Alice sharply, for she was
+beginning to feel a little worried.
+
+  `Just about as much right,' said the Duchess, `as pigs have to fly;
+and the m--'
+
+  But here, to Alice's great surprise, the Duchess's voice died
+away, even in the middle of her favourite word `moral,' and the
+arm that was linked into hers began to tremble.  Alice looked up,
+and there stood the Queen in front of them, with her arms folded,
+frowning like a thunderstorm.
+
+  `A fine day, your Majesty!' the Duchess began in a low, weak
+voice.
+
+  `Now, I give you fair warning,' shouted the Queen, stamping on
+the ground as she spoke; `either you or your head must be off,
+and that in about half no time!  Take your choice!'
+
+  The Duchess took her choice, and was gone in a moment.
+
+  `Let's go on with the game,' the Queen said to Alice; and Alice
+was too much frightened to say a word, but slowly followed her
+back to the croquet-ground.
+
+  The other guests had taken advantage of the Queen's absence,
+and were resting in the shade:  however, the moment they saw her,
+they hurried back to the game, the Queen merely remarking that a
+moment's delay would cost them their lives.
+
+  All the time they were playing the Queen never left off
+quarrelling with the other players, and shouting `Off with his
+head!' or `Off with her head!'  Those whom she sentenced were
+taken into custody by the soldiers, who of course had to leave
+off being arches to do this, so that by the end of half an hour
+or so there were no arches left, and all the players, except the
+King, the Queen, and Alice, were in custody and under sentence of
+execution.
+
+  Then the Queen left off, quite out of breath, and said to
+Alice, `Have you seen the Mock Turtle yet?'
+
+  `No,' said Alice.  `I don't even know what a Mock Turtle is.'
+
+  `It's the thing Mock Turtle Soup is made from,' said the Queen.
+
+  `I never saw one, or heard of one,' said Alice.
+
+  `Come on, then,' said the Queen, `and he shall tell you his
+history,'
+
+  As they walked off together, Alice heard the King say in a low
+voice, to the company generally, `You are all pardoned.'  `Come,
+THAT'S a good thing!' she said to herself, for she had felt quite
+unhappy at the number of executions the Queen had ordered.
+
+  They very soon came upon a Gryphon, lying fast asleep in the
+sun.  (IF you don't know what a Gryphon is, look at the picture.)
+`Up, lazy thing!' said the Queen, `and take this young lady to
+see the Mock Turtle, and to hear his history.  I must go back and
+see after some executions I have ordered'; and she walked off,
+leaving Alice alone with the Gryphon.  Alice did not quite like
+the look of the creature, but on the whole she thought it would
+be quite as safe to stay with it as to go after that savage
+Queen:  so she waited.
+
+  The Gryphon sat up and rubbed its eyes:  then it watched the
+Queen till she was out of sight:  then it chuckled.  `What fun!'
+said the Gryphon, half to itself, half to Alice.
+
+  `What IS the fun?' said Alice.
+
+  `Why, SHE,' said the Gryphon.  `It's all her fancy, that:  they
+never executes nobody, you know.  Come on!'
+
+  `Everybody says "come on!" here,' thought Alice, as she went
+slowly after it:  `I never was so ordered about in all my life,
+never!'
+
+  They had not gone far before they saw the Mock Turtle in the
+distance, sitting sad and lonely on a little ledge of rock, and,
+as they came nearer, Alice could hear him sighing as if his heart
+would break.  She pitied him deeply.  `What is his sorrow?' she
+asked the Gryphon, and the Gryphon answered, very nearly in the
+same words as before, `It's all his fancy, that:  he hasn't got
+no sorrow, you know.  Come on!'
+
+  So they went up to the Mock Turtle, who looked at them with
+large eyes full of tears, but said nothing.
+
+  `This here young lady,' said the Gryphon, `she wants for to
+know your history, she do.'
+
+  `I'll tell it her,' said the Mock Turtle in a deep, hollow
+tone:  `sit down, both of you, and don't speak a word till I've
+finished.'
+
+  So they sat down, and nobody spoke for some minutes.  Alice
+thought to herself, `I don't see how he can EVEN finish, if he
+doesn't begin.'  But she waited patiently.
+
+  `Once,' said the Mock Turtle at last, with a deep sigh, `I was
+a real Turtle.'
+
+  These words were followed by a very long silence, broken only
+by an occasional exclamation of `Hjckrrh!' from the Gryphon, and
+the constant heavy sobbing of the Mock Turtle.  Alice was very
+nearly getting up and saying, `Thank you, sir, for your
+interesting story,' but she could not help thinking there MUST be
+more to come, so she sat still and said nothing.
+
+  `When we were little,' the Mock Turtle went on at last, more
+calmly, though still sobbing a little now and then, `we went to
+school in the sea.  The master was an old Turtle--we used to call
+him Tortoise--'
+
+  `Why did you call him Tortoise, if he wasn't one?' Alice asked.
+
+  `We called him Tortoise because he taught us,' said the Mock
+Turtle angrily:  `really you are very dull!'
+
+  `You ought to be ashamed of yourself for asking such a simple
+question,' added the Gryphon; and then they both sat silent and
+looked at poor Alice, who felt ready to sink into the earth.  At
+last the Gryphon said to the Mock Turtle, `Drive on, old fellow!
+Don't be all day about it!' and he went on in these words:
+
+  `Yes, we went to school in the sea, though you mayn't believe
+it--'
+
+  `I never said I didn't!' interrupted Alice.
+
+  `You did,' said the Mock Turtle.
+
+  `Hold your tongue!' added the Gryphon, before Alice could speak
+again.  The Mock Turtle went on.
+
+  `We had the best of educations--in fact, we went to school
+every day--'
+
+  `I'VE been to a day-school, too,' said Alice; `you needn't be
+so proud as all that.'
+
+  `With extras?' asked the Mock Turtle a little anxiously.
+
+  `Yes,' said Alice, `we learned French and music.'
+
+  `And washing?' said the Mock Turtle.
+
+  `Certainly not!' said Alice indignantly.
+
+  `Ah! then yours wasn't a really good school,' said the Mock
+Turtle in a tone of great relief.  `Now at OURS they had at the
+end of the bill, "French, music, AND WASHING--extra."'
+
+  `You couldn't have wanted it much,' said Alice; `living at the
+bottom of the sea.'
+
+  `I couldn't afford to learn it.' said the Mock Turtle with a
+sigh.  `I only took the regular course.'
+
+  `What was that?' inquired Alice.
+
+  `Reeling and Writhing, of course, to begin with,' the Mock
+Turtle replied; `and then the different branches of Arithmetic--
+Ambition, Distraction, Uglification, and Derision.'
+
+  `I never heard of "Uglification,"' Alice ventured to say.  `What is it?'
+
+  The Gryphon lifted up both its paws in surprise.  `What!  Never
+heard of uglifying!' it exclaimed.  `You know what to beautify is,
+I suppose?'
+
+  `Yes,' said Alice doubtfully:  `it means--to--make--anything--prettier.'
+
+  `Well, then,' the Gryphon went on, `if you don't know what to
+uglify is, you ARE a simpleton.'
+
+  Alice did not feel encouraged to ask any more questions about
+it, so she turned to the Mock Turtle, and said `What else had you
+to learn?'
+
+  `Well, there was Mystery,' the Mock Turtle replied, counting
+off the subjects on his flappers, `--Mystery, ancient and modern,
+with Seaography:  then Drawling--the Drawling-master was an old
+conger-eel, that used to come once a week:  HE taught us
+Drawling, Stretching, and Fainting in Coils.'
+
+  `What was THAT like?' said Alice.
+
+  `Well, I can't show it you myself,' the Mock Turtle said:  `I'm
+too stiff.  And the Gryphon never learnt it.'
+
+  `Hadn't time,' said the Gryphon:  `I went to the Classics
+master, though.  He was an old crab, HE was.'
+
+  `I never went to him,' the Mock Turtle said with a sigh:  `he
+taught Laughing and Grief, they used to say.'
+
+  `So he did, so he did,' said the Gryphon, sighing in his turn;
+and both creatures hid their faces in their paws.
+
+  `And how many hours a day did you do lessons?' said Alice, in a
+hurry to change the subject.
+
+  `Ten hours the first day,' said the Mock Turtle: `nine the
+next, and so on.'
+
+  `What a curious plan!' exclaimed Alice.
+
+  `That's the reason they're called lessons,' the Gryphon
+remarked:  `because they lessen from day to day.'
+
+  This was quite a new idea to Alice, and she thought it over a
+little before she made her next remark.  `Then the eleventh day
+must have been a holiday?'
+
+  `Of course it was,' said the Mock Turtle.
+
+  `And how did you manage on the twelfth?' Alice went on eagerly.
+
+  `That's enough about lessons,' the Gryphon interrupted in a
+very decided tone:  `tell her something about the games now.'
+
+
+
+                            CHAPTER X
+
+                      The Lobster Quadrille
+
+
+  The Mock Turtle sighed deeply, and drew the back of one flapper
+across his eyes.  He looked at Alice, and tried to speak, but for
+a minute or two sobs choked his voice.  `Same as if he had a bone
+in his throat,' said the Gryphon:  and it set to work shaking him
+and punching him in the back.  At last the Mock Turtle recovered
+his voice, and, with tears running down his cheeks, he went on
+again:--
+
+  `You may not have lived much under the sea--' (`I haven't,' said Alice)--
+`and perhaps you were never even introduced to a lobster--'
+(Alice began to say `I once tasted--' but checked herself hastily,
+and said `No, never') `--so you can have no idea what a delightful
+thing a Lobster Quadrille is!'
+
+  `No, indeed,' said Alice.  `What sort of a dance is it?'
+
+  `Why,' said the Gryphon, `you first form into a line along the sea-shore--'
+
+  `Two lines!' cried the Mock Turtle.  `Seals, turtles, salmon, and so on;
+then, when you've cleared all the jelly-fish out of the way--'
+
+  `THAT generally takes some time,' interrupted the Gryphon.
+
+  `--you advance twice--'
+
+  `Each with a lobster as a partner!' cried the Gryphon.
+
+  `Of course,' the Mock Turtle said:  `advance twice, set to
+partners--'
+
+  `--change lobsters, and retire in same order,' continued the
+Gryphon.
+
+  `Then, you know,' the Mock Turtle went on, `you throw the--'
+
+  `The lobsters!' shouted the Gryphon, with a bound into the air.
+
+  `--as far out to sea as you can--'
+
+  `Swim after them!' screamed the Gryphon.
+
+  `Turn a somersault in the sea!' cried the Mock Turtle,
+capering wildly about.
+
+  `Change lobster's again!' yelled the Gryphon at the top of its voice.
+
+  `Back to land again, and that's all the first figure,' said the
+Mock Turtle, suddenly dropping his voice; and the two creatures,
+who had been jumping about like mad things all this time, sat
+down again very sadly and quietly, and looked at Alice.
+
+  `It must be a very pretty dance,' said Alice timidly.
+
+  `Would you like to see a little of it?' said the Mock Turtle.
+
+  `Very much indeed,' said Alice.
+
+  `Come, let's try the first figure!' said the Mock Turtle to the
+Gryphon.  `We can do without lobsters, you know.  Which shall
+sing?'
+
+  `Oh, YOU sing,' said the Gryphon.  `I've forgotten the words.'
+
+  So they began solemnly dancing round and round Alice, every now
+and then treading on her toes when they passed too close, and
+waving their forepaws to mark the time, while the Mock Turtle
+sang this, very slowly and sadly:--
+
+
+`"Will you walk a little faster?" said a whiting to a snail.
+"There's a porpoise close behind us, and he's treading on my
+ tail.
+See how eagerly the lobsters and the turtles all advance!
+They are waiting on the shingle--will you come and join the
+dance?
+
+Will you, won't you, will you, won't you, will you join the
+dance?
+Will you, won't you, will you, won't you, won't you join the
+dance?
+
+
+"You can really have no notion how delightful it will be
+When they take us up and throw us, with the lobsters, out to
+                                                      sea!"
+But the snail replied "Too far, too far!" and gave a look
+                                                       askance--
+Said he thanked the whiting kindly, but he would not join the
+   dance.
+    Would not, could not, would not, could not, would not join
+        the dance.
+    Would not, could not, would not, could not, could not join
+        the dance.
+
+`"What matters it how far we go?" his scaly friend replied.
+"There is another shore, you know, upon the other side.
+The further off from England the nearer is to France--
+Then turn not pale, beloved snail, but come and join the dance.
+
+    Will you, won't you, will you, won't you, will you join the
+         dance?
+    Will you, won't you, will you, won't you, won't you join the
+         dance?"'
+
+
+
+  `Thank you, it's a very interesting dance to watch,' said
+Alice, feeling very glad that it was over at last:  `and I do so
+like that curious song about the whiting!'
+
+  `Oh, as to the whiting,' said the Mock Turtle, `they--you've
+seen them, of course?'
+
+  `Yes,' said Alice, `I've often seen them at dinn--' she
+checked herself hastily.
+
+  `I don't know where Dinn may be,' said the Mock Turtle, `but
+if you've seen them so often, of course you know what they're
+like.'
+
+  `I believe so,' Alice replied thoughtfully.  `They have their
+tails in their mouths--and they're all over crumbs.'
+
+  `You're wrong about the crumbs,' said the Mock Turtle:
+`crumbs would all wash off in the sea.  But they HAVE their tails
+in their mouths; and the reason is--' here the Mock Turtle
+yawned and shut his eyes.--`Tell her about the reason and all
+that,' he said to the Gryphon.
+
+  `The reason is,' said the Gryphon, `that they WOULD go with
+the lobsters to the dance.  So they got thrown out to sea.  So
+they had to fall a long way.  So they got their tails fast in
+their mouths.  So they couldn't get them out again.  That's all.'
+
+  `Thank you,' said Alice, `it's very interesting.  I never knew
+so much about a whiting before.'
+
+  `I can tell you more than that, if you like,' said the
+Gryphon.  `Do you know why it's called a whiting?'
+
+  `I never thought about it,' said Alice.  `Why?'
+
+  `IT DOES THE BOOTS AND SHOES.' the Gryphon replied very
+solemnly.
+
+  Alice was thoroughly puzzled.  `Does the boots and shoes!' she
+repeated in a wondering tone.
+
+  `Why, what are YOUR shoes done with?' said the Gryphon.  `I
+mean, what makes them so shiny?'
+
+  Alice looked down at them, and considered a little before she
+gave her answer.  `They're done with blacking, I believe.'
+
+  `Boots and shoes under the sea,' the Gryphon went on in a deep
+voice, `are done with a whiting.  Now you know.'
+
+  `And what are they made of?' Alice asked in a tone of great
+curiosity.
+
+  `Soles and eels, of course,' the Gryphon replied rather
+impatiently:  `any shrimp could have told you that.'
+
+  `If I'd been the whiting,' said Alice, whose thoughts were
+still running on the song, `I'd have said to the porpoise, "Keep
+back, please:  we don't want YOU with us!"'
+
+  `They were obliged to have him with them,' the Mock Turtle
+said:  `no wise fish would go anywhere without a porpoise.'
+
+  `Wouldn't it really?' said Alice in a tone of great surprise.
+
+  `Of course not,' said the Mock Turtle:  `why, if a fish came
+to ME, and told me he was going a journey, I should say "With
+what porpoise?"'
+
+  `Don't you mean "purpose"?' said Alice.
+
+  `I mean what I say,' the Mock Turtle replied in an offended
+tone.  And the Gryphon added `Come, let's hear some of YOUR
+adventures.'
+
+  `I could tell you my adventures--beginning from this morning,'
+said Alice a little timidly:  `but it's no use going back to
+yesterday, because I was a different person then.'
+
+  `Explain all that,' said the Mock Turtle.
+
+  `No, no!  The adventures first,' said the Gryphon in an
+impatient tone:  `explanations take such a dreadful time.'
+
+  So Alice began telling them her adventures from the time when
+she first saw the White Rabbit.  She was a little nervous about
+it just at first, the two creatures got so close to her, one on
+each side, and opened their eyes and mouths so VERY wide, but she
+gained courage as she went on.  Her listeners were perfectly
+quiet till she got to the part about her repeating `YOU ARE OLD,
+FATHER WILLIAM,' to the Caterpillar, and the words all coming
+different, and then the Mock Turtle drew a long breath, and said
+`That's very curious.'
+
+  `It's all about as curious as it can be,' said the Gryphon.
+
+  `It all came different!' the Mock Turtle repeated
+thoughtfully.  `I should like to hear her try and repeat
+something now.  Tell her to begin.'  He looked at the Gryphon as
+if he thought it had some kind of authority over Alice.
+
+  `Stand up and repeat "'TIS THE VOICE OF THE SLUGGARD,"' said
+the Gryphon.
+
+  `How the creatures order one about, and make one repeat
+lessons!' thought Alice; `I might as well be at school at once.'
+However, she got up, and began to repeat it, but her head was so
+full of the Lobster Quadrille, that she hardly knew what she was
+saying, and the words came very queer indeed:--
+
+    `'Tis the voice of the Lobster; I heard him declare,
+    "You have baked me too brown, I must sugar my hair."
+    As a duck with its eyelids, so he with his nose
+    Trims his belt and his buttons, and turns out his toes.'
+
+              [later editions continued as follows
+    When the sands are all dry, he is gay as a lark,
+    And will talk in contemptuous tones of the Shark,
+    But, when the tide rises and sharks are around,
+    His voice has a timid and tremulous sound.]
+
+  `That's different from what I used to say when I was a child,'
+said the Gryphon.
+
+  `Well, I never heard it before,' said the Mock Turtle; `but it
+sounds uncommon nonsense.'
+
+  Alice said nothing; she had sat down with her face in her
+hands, wondering if anything would EVER happen in a natural way
+again.
+
+  `I should like to have it explained,' said the Mock Turtle.
+
+  `She can't explain it,' said the Gryphon hastily.  `Go on with
+the next verse.'
+
+  `But about his toes?' the Mock Turtle persisted.  `How COULD
+he turn them out with his nose, you know?'
+
+  `It's the first position in dancing.' Alice said; but was
+dreadfully puzzled by the whole thing, and longed to change the
+subject.
+
+  `Go on with the next verse,' the Gryphon repeated impatiently:
+`it begins "I passed by his garden."'
+
+  Alice did not dare to disobey, though she felt sure it would
+all come wrong, and she went on in a trembling voice:--
+
+    `I passed by his garden, and marked, with one eye,
+    How the Owl and the Panther were sharing a pie--'
+
+        [later editions continued as follows
+    The Panther took pie-crust, and gravy, and meat,
+    While the Owl had the dish as its share of the treat.
+    When the pie was all finished, the Owl, as a boon,
+    Was kindly permitted to pocket the spoon:
+    While the Panther received knife and fork with a growl,
+    And concluded the banquet--]
+
+  `What IS the use of repeating all that stuff,' the Mock Turtle
+interrupted, `if you don't explain it as you go on?  It's by far
+the most confusing thing I ever heard!'
+
+  `Yes, I think you'd better leave off,' said the Gryphon:  and
+Alice was only too glad to do so.
+
+  `Shall we try another figure of the Lobster Quadrille?' the
+Gryphon went on.  `Or would you like the Mock Turtle to sing you
+a song?'
+
+  `Oh, a song, please, if the Mock Turtle would be so kind,'
+Alice replied, so eagerly that the Gryphon said, in a rather
+offended tone, `Hm!  No accounting for tastes!  Sing her
+"Turtle Soup," will you, old fellow?'
+
+  The Mock Turtle sighed deeply, and began, in a voice sometimes
+choked with sobs, to sing this:--
+
+
+    `Beautiful Soup, so rich and green,
+    Waiting in a hot tureen!
+    Who for such dainties would not stoop?
+    Soup of the evening, beautiful Soup!
+    Soup of the evening, beautiful Soup!
+        Beau--ootiful Soo--oop!
+        Beau--ootiful Soo--oop!
+    Soo--oop of the e--e--evening,
+        Beautiful, beautiful Soup!
+
+    `Beautiful Soup!  Who cares for fish,
+    Game, or any other dish?
+    Who would not give all else for two
+    Pennyworth only of beautiful Soup?
+    Pennyworth only of beautiful Soup?
+        Beau--ootiful Soo--oop!
+        Beau--ootiful Soo--oop!
+    Soo--oop of the e--e--evening,
+        Beautiful, beauti--FUL SOUP!'
+
+  `Chorus again!' cried the Gryphon, and the Mock Turtle had
+just begun to repeat it, when a cry of `The trial's beginning!'
+was heard in the distance.
+
+  `Come on!' cried the Gryphon, and, taking Alice by the hand,
+it hurried off, without waiting for the end of the song.
+
+  `What trial is it?' Alice panted as she ran; but the Gryphon
+only answered `Come on!' and ran the faster, while more and more
+faintly came, carried on the breeze that followed them, the
+melancholy words:--
+
+    `Soo--oop of the e--e--evening,
+        Beautiful, beautiful Soup!'
+
+
+
+                           CHAPTER XI
+
+                      Who Stole the Tarts?
+
+
+  The King and Queen of Hearts were seated on their throne when
+they arrived, with a great crowd assembled about them--all sorts
+of little birds and beasts, as well as the whole pack of cards:
+the Knave was standing before them, in chains, with a soldier on
+each side to guard him; and near the King was the White Rabbit,
+with a trumpet in one hand, and a scroll of parchment in the
+other.  In the very middle of the court was a table, with a large
+dish of tarts upon it:  they looked so good, that it made Alice
+quite hungry to look at them--`I wish they'd get the trial done,'
+she thought, `and hand round the refreshments!'  But there seemed
+to be no chance of this, so she began looking at everything about
+her, to pass away the time.
+
+  Alice had never been in a court of justice before, but she had
+read about them in books, and she was quite pleased to find that
+she knew the name of nearly everything there.  `That's the
+judge,' she said to herself, `because of his great wig.'
+
+  The judge, by the way, was the King; and as he wore his crown
+over the wig, (look at the frontispiece if you want to see how he
+did it,) he did not look at all comfortable, and it was certainly
+not becoming.
+
+  `And that's the jury-box,' thought Alice, `and those twelve
+creatures,' (she was obliged to say `creatures,' you see, because
+some of them were animals, and some were birds,) `I suppose they
+are the jurors.'  She said this last word two or three times over
+to herself, being rather proud of it:  for she thought, and
+rightly too, that very few little girls of her age knew the
+meaning of it at all.  However, `jury-men' would have done just
+as well.
+
+  The twelve jurors were all writing very busily on slates.
+`What are they doing?'  Alice whispered to the Gryphon.  `They
+can't have anything to put down yet, before the trial's begun.'
+
+  `They're putting down their names,' the Gryphon whispered in
+reply, `for fear they should forget them before the end of the
+trial.'
+
+  `Stupid things!' Alice began in a loud, indignant voice, but
+she stopped hastily, for the White Rabbit cried out, `Silence in
+the court!' and the King put on his spectacles and looked
+anxiously round, to make out who was talking.
+
+  Alice could see, as well as if she were looking over their
+shoulders, that all the jurors were writing down `stupid things!'
+on their slates, and she could even make out that one of them
+didn't know how to spell `stupid,' and that he had to ask his
+neighbour to tell him.  `A nice muddle their slates'll be in
+before the trial's over!' thought Alice.
+
+  One of the jurors had a pencil that squeaked.  This of course,
+Alice could not stand, and she went round the court and got
+behind him, and very soon found an opportunity of taking it
+away.  She did it so quickly that the poor little juror (it was
+Bill, the Lizard) could not make out at all what had become of
+it; so, after hunting all about for it, he was obliged to write
+with one finger for the rest of the day; and this was of very
+little use, as it left no mark on the slate.
+
+  `Herald, read the accusation!' said the King.
+
+  On this the White Rabbit blew three blasts on the trumpet, and
+then unrolled the parchment scroll, and read as follows:--
+
+    `The Queen of Hearts, she made some tarts,
+          All on a summer day:
+      The Knave of Hearts, he stole those tarts,
+          And took them quite away!'
+
+  `Consider your verdict,' the King said to the jury.
+
+  `Not yet, not yet!' the Rabbit hastily interrupted.  `There's
+a great deal to come before that!'
+
+  `Call the first witness,' said the King; and the White Rabbit
+blew three blasts on the trumpet, and called out, `First
+witness!'
+
+  The first witness was the Hatter.  He came in with a teacup in
+one hand and a piece of bread-and-butter in the other.  `I beg
+pardon, your Majesty,' he began, `for bringing these in:  but I
+hadn't quite finished my tea when I was sent for.'
+
+  `You ought to have finished,' said the King.  `When did you
+begin?'
+
+  The Hatter looked at the March Hare, who had followed him into
+the court, arm-in-arm with the Dormouse.  `Fourteenth of March, I
+think it was,' he said.
+
+  `Fifteenth,' said the March Hare.
+
+  `Sixteenth,' added the Dormouse.
+
+  `Write that down,' the King said to the jury, and the jury
+eagerly wrote down all three dates on their slates, and then
+added them up, and reduced the answer to shillings and pence.
+
+  `Take off your hat,' the King said to the Hatter.
+
+  `It isn't mine,' said the Hatter.
+
+  `Stolen!' the King exclaimed, turning to the jury, who
+instantly made a memorandum of the fact.
+
+  `I keep them to sell,' the Hatter added as an explanation;
+`I've none of my own.  I'm a hatter.'
+
+  Here the Queen put on her spectacles, and began staring at the
+Hatter, who turned pale and fidgeted.
+
+  `Give your evidence,' said the King; `and don't be nervous, or
+I'll have you executed on the spot.'
+
+  This did not seem to encourage the witness at all:  he kept
+shifting from one foot to the other, looking uneasily at the
+Queen, and in his confusion he bit a large piece out of his
+teacup instead of the bread-and-butter.
+
+  Just at this moment Alice felt a very curious sensation, which
+puzzled her a good deal until she made out what it was:  she was
+beginning to grow larger again, and she thought at first she
+would get up and leave the court; but on second thoughts she
+decided to remain where she was as long as there was room for
+her.
+
+  `I wish you wouldn't squeeze so.' said the Dormouse, who was
+sitting next to her.  `I can hardly breathe.'
+
+  `I can't help it,' said Alice very meekly:  `I'm growing.'
+
+  `You've no right to grow here,' said the Dormouse.
+
+  `Don't talk nonsense,' said Alice more boldly:  `you know
+you're growing too.'
+
+  `Yes, but I grow at a reasonable pace,' said the Dormouse:
+`not in that ridiculous fashion.'  And he got up very sulkily
+and crossed over to the other side of the court.
+
+  All this time the Queen had never left off staring at the
+Hatter, and, just as the Dormouse crossed the court, she said to
+one of the officers of the court, `Bring me the list of the
+singers in the last concert!' on which the wretched Hatter
+trembled so, that he shook both his shoes off.
+
+  `Give your evidence,' the King repeated angrily, `or I'll have
+you executed, whether you're nervous or not.'
+
+  `I'm a poor man, your Majesty,' the Hatter began, in a
+trembling voice, `--and I hadn't begun my tea--not above a week
+or so--and what with the bread-and-butter getting so thin--and
+the twinkling of the tea--'
+
+  `The twinkling of the what?' said the King.
+
+  `It began with the tea,' the Hatter replied.
+
+  `Of course twinkling begins with a T!' said the King sharply.
+`Do you take me for a dunce?  Go on!'
+
+  `I'm a poor man,' the Hatter went on, `and most things
+twinkled after that--only the March Hare said--'
+
+  `I didn't!' the March Hare interrupted in a great hurry.
+
+  `You did!' said the Hatter.
+
+  `I deny it!' said the March Hare.
+
+  `He denies it,' said the King:  `leave out that part.'
+
+  `Well, at any rate, the Dormouse said--' the Hatter went on,
+looking anxiously round to see if he would deny it too:  but the
+Dormouse denied nothing, being fast asleep.
+
+  `After that,' continued the Hatter, `I cut some more bread-
+and-butter--'
+
+  `But what did the Dormouse say?' one of the jury asked.
+
+  `That I can't remember,' said the Hatter.
+
+  `You MUST remember,' remarked the King, `or I'll have you
+executed.'
+
+  The miserable Hatter dropped his teacup and bread-and-butter,
+and went down on one knee.  `I'm a poor man, your Majesty,' he
+began.
+
+  `You're a very poor speaker,' said the King.
+
+  Here one of the guinea-pigs cheered, and was immediately
+suppressed by the officers of the court.  (As that is rather a
+hard word, I will just explain to you how it was done.  They had
+a large canvas bag, which tied up at the mouth with strings:
+into this they slipped the guinea-pig, head first, and then sat
+upon it.)
+
+  `I'm glad I've seen that done,' thought Alice.  `I've so often
+read in the newspapers, at the end of trials, "There was some
+attempts at applause, which was immediately suppressed by the
+officers of the court," and I never understood what it meant
+till now.'
+
+  `If that's all you know about it, you may stand down,'
+continued the King.
+
+  `I can't go no lower,' said the Hatter:  `I'm on the floor, as
+it is.'
+
+  `Then you may SIT down,' the King replied.
+
+  Here the other guinea-pig cheered, and was suppressed.
+
+  `Come, that finished the guinea-pigs!' thought Alice.  `Now we
+shall get on better.'
+
+  `I'd rather finish my tea,' said the Hatter, with an anxious
+look at the Queen, who was reading the list of singers.
+
+  `You may go,' said the King, and the Hatter hurriedly left the
+court, without even waiting to put his shoes on.
+
+  `--and just take his head off outside,' the Queen added to one
+of the officers:  but the Hatter was out of sight before the
+officer could get to the door.
+
+  `Call the next witness!' said the King.
+
+  The next witness was the Duchess's cook.  She carried the
+pepper-box in her hand, and Alice guessed who it was, even before
+she got into the court, by the way the people near the door began
+sneezing all at once.
+
+  `Give your evidence,' said the King.
+
+  `Shan't,' said the cook.
+
+  The King looked anxiously at the White Rabbit, who said in a
+low voice, `Your Majesty must cross-examine THIS witness.'
+
+  `Well, if I must, I must,' the King said, with a melancholy
+air, and, after folding his arms and frowning at the cook till
+his eyes were nearly out of sight, he said in a deep voice, `What
+are tarts made of?'
+
+  `Pepper, mostly,' said the cook.
+
+  `Treacle,' said a sleepy voice behind her.
+
+  `Collar that Dormouse,' the Queen shrieked out.  `Behead that
+Dormouse!  Turn that Dormouse out of court!  Suppress him!  Pinch
+him!  Off with his whiskers!'
+
+  For some minutes the whole court was in confusion, getting the
+Dormouse turned out, and, by the time they had settled down
+again, the cook had disappeared.
+
+  `Never mind!' said the King, with an air of great relief.
+`Call the next witness.'  And he added in an undertone to the
+Queen, `Really, my dear, YOU must cross-examine the next witness.
+It quite makes my forehead ache!'
+
+  Alice watched the White Rabbit as he fumbled over the list,
+feeling very curious to see what the next witness would be like,
+`--for they haven't got much evidence YET,' she said to herself.
+Imagine her surprise, when the White Rabbit read out, at the top
+of his shrill little voice, the name `Alice!'
+
+
+
+                           CHAPTER XII
+
+                        Alice's Evidence
+
+
+  `Here!' cried Alice, quite forgetting in the flurry of the
+moment how large she had grown in the last few minutes, and she
+jumped up in such a hurry that she tipped over the jury-box with
+the edge of her skirt, upsetting all the jurymen on to the heads
+of the crowd below, and there they lay sprawling about, reminding
+her very much of a globe of goldfish she had accidentally upset
+the week before.
+
+  `Oh, I BEG your pardon!' she exclaimed in a tone of great
+dismay, and began picking them up again as quickly as she could,
+for the accident of the goldfish kept running in her head, and
+she had a vague sort of idea that they must be collected at once
+and put back into the jury-box, or they would die.
+
+  `The trial cannot proceed,' said the King in a very grave
+voice, `until all the jurymen are back in their proper places--
+ALL,' he repeated with great emphasis, looking hard at Alice as
+he said do.
+
+  Alice looked at the jury-box, and saw that, in her haste, she
+had put the Lizard in head downwards, and the poor little thing
+was waving its tail about in a melancholy way, being quite unable
+to move.  She soon got it out again, and put it right; `not that
+it signifies much,' she said to herself; `I should think it
+would be QUITE as much use in the trial one way up as the other.'
+
+  As soon as the jury had a little recovered from the shock of
+being upset, and their slates and pencils had been found and
+handed back to them, they set to work very diligently to write
+out a history of the accident, all except the Lizard, who seemed
+too much overcome to do anything but sit with its mouth open,
+gazing up into the roof of the court.
+
+  `What do you know about this business?' the King said to
+Alice.
+
+  `Nothing,' said Alice.
+
+  `Nothing WHATEVER?' persisted the King.
+
+  `Nothing whatever,' said Alice.
+
+  `That's very important,' the King said, turning to the jury.
+They were just beginning to write this down on their slates, when
+the White Rabbit interrupted:  `UNimportant, your Majesty means,
+of course,' he said in a very respectful tone, but frowning and
+making faces at him as he spoke.
+
+  `UNimportant, of course, I meant,' the King hastily said, and
+went on to himself in an undertone, `important--unimportant--
+unimportant--important--' as if he were trying which word
+sounded best.
+
+  Some of the jury wrote it down `important,' and some
+`unimportant.'  Alice could see this, as she was near enough to
+look over their slates; `but it doesn't matter a bit,' she
+thought to herself.
+
+  At this moment the King, who had been for some time busily
+writing in his note-book, cackled out `Silence!' and read out
+from his book, `Rule Forty-two.  ALL PERSONS MORE THAN A MILE
+HIGH TO LEAVE THE COURT.'
+
+  Everybody looked at Alice.
+
+  `I'M not a mile high,' said Alice.
+
+  `You are,' said the King.
+
+  `Nearly two miles high,' added the Queen.
+
+  `Well, I shan't go, at any rate,' said Alice:  `besides,
+that's not a regular rule:  you invented it just now.'
+
+  `It's the oldest rule in the book,' said the King.
+
+  `Then it ought to be Number One,' said Alice.
+
+  The King turned pale, and shut his note-book hastily.
+`Consider your verdict,' he said to the jury, in a low, trembling
+voice.
+
+  `There's more evidence to come yet, please your Majesty,' said
+the White Rabbit, jumping up in a great hurry; `this paper has
+just been picked up.'
+
+  `What's in it?' said the Queen.
+
+  `I haven't opened it yet,' said the White Rabbit, `but it seems
+to be a letter, written by the prisoner to--to somebody.'
+
+  `It must have been that,' said the King, `unless it was
+written to nobody, which isn't usual, you know.'
+
+  `Who is it directed to?' said one of the jurymen.
+
+  `It isn't directed at all,' said the White Rabbit; `in fact,
+there's nothing written on the OUTSIDE.'  He unfolded the paper
+as he spoke, and added `It isn't a letter, after all:  it's a set
+of verses.'
+
+  `Are they in the prisoner's handwriting?' asked another of
+the jurymen.
+
+  `No, they're not,' said the White Rabbit, `and that's the
+queerest thing about it.'  (The jury all looked puzzled.)
+
+  `He must have imitated somebody else's hand,' said the King.
+(The jury all brightened up again.)
+
+  `Please your Majesty,' said the Knave, `I didn't write it, and
+they can't prove I did:  there's no name signed at the end.'
+
+  `If you didn't sign it,' said the King, `that only makes the
+matter worse.  You MUST have meant some mischief, or else you'd
+have signed your name like an honest man.'
+
+  There was a general clapping of hands at this:  it was the
+first really clever thing the King had said that day.
+
+  `That PROVES his guilt,' said the Queen.
+
+  `It proves nothing of the sort!' said Alice.  `Why, you don't
+even know what they're about!'
+
+  `Read them,' said the King.
+
+  The White Rabbit put on his spectacles.  `Where shall I begin,
+please your Majesty?' he asked.
+
+  `Begin at the beginning,' the King said gravely, `and go on
+till you come to the end:  then stop.'
+
+  These were the verses the White Rabbit read:--
+
+        `They told me you had been to her,
+          And mentioned me to him:
+        She gave me a good character,
+          But said I could not swim.
+
+        He sent them word I had not gone
+          (We know it to be true):
+        If she should push the matter on,
+          What would become of you?
+
+        I gave her one, they gave him two,
+          You gave us three or more;
+        They all returned from him to you,
+          Though they were mine before.
+
+        If I or she should chance to be
+          Involved in this affair,
+        He trusts to you to set them free,
+          Exactly as we were.
+
+        My notion was that you had been
+          (Before she had this fit)
+        An obstacle that came between
+          Him, and ourselves, and it.
+
+        Don't let him know she liked them best,
+          For this must ever be
+        A secret, kept from all the rest,
+          Between yourself and me.'
+
+  `That's the most important piece of evidence we've heard yet,'
+said the King, rubbing his hands; `so now let the jury--'
+
+  `If any one of them can explain it,' said Alice, (she had
+grown so large in the last few minutes that she wasn't a bit
+afraid of interrupting him,) `I'll give him sixpence.  _I_ don't
+believe there's an atom of meaning in it.'
+
+  The jury all wrote down on their slates, `SHE doesn't believe
+there's an atom of meaning in it,' but none of them attempted to
+explain the paper.
+
+  `If there's no meaning in it,' said the King, `that saves a
+world of trouble, you know, as we needn't try to find any.  And
+yet I don't know,' he went on, spreading out the verses on his
+knee, and looking at them with one eye; `I seem to see some
+meaning in them, after all.  "--SAID I COULD NOT SWIM--" you
+can't swim, can you?' he added, turning to the Knave.
+
+  The Knave shook his head sadly.  `Do I look like it?' he said.
+(Which he certainly did NOT, being made entirely of cardboard.)
+
+  `All right, so far,' said the King, and he went on muttering
+over the verses to himself:  `"WE KNOW IT TO BE TRUE--" that's
+the jury, of course-- "I GAVE HER ONE, THEY GAVE HIM TWO--" why,
+that must be what he did with the tarts, you know--'
+
+  `But, it goes on "THEY ALL RETURNED FROM HIM TO YOU,"' said
+Alice.
+
+  `Why, there they are!' said the King triumphantly, pointing to
+the tarts on the table.  `Nothing can be clearer than THAT.
+Then again--"BEFORE SHE HAD THIS FIT--"  you never had fits, my
+dear, I think?' he said to the Queen.
+
+  `Never!' said the Queen furiously, throwing an inkstand at the
+Lizard as she spoke.  (The unfortunate little Bill had left off
+writing on his slate with one finger, as he found it made no
+mark; but he now hastily began again, using the ink, that was
+trickling down his face, as long as it lasted.)
+
+  `Then the words don't FIT you,' said the King, looking round
+the court with a smile.  There was a dead silence.
+
+  `It's a pun!' the King added in an offended tone, and
+everybody laughed, `Let the jury consider their verdict,' the
+King said, for about the twentieth time that day.
+
+  `No, no!' said the Queen.  `Sentence first--verdict afterwards.'
+
+  `Stuff and nonsense!' said Alice loudly.  `The idea of having
+the sentence first!'
+
+  `Hold your tongue!' said the Queen, turning purple.
+
+  `I won't!' said Alice.
+
+  `Off with her head!' the Queen shouted at the top of her voice.
+Nobody moved.
+
+  `Who cares for you?' said Alice, (she had grown to her full
+size by this time.)  `You're nothing but a pack of cards!'
+
+  At this the whole pack rose up into the air, and came flying
+down upon her:  she gave a little scream, half of fright and half
+of anger, and tried to beat them off, and found herself lying on
+the bank, with her head in the lap of her sister, who was gently
+brushing away some dead leaves that had fluttered down from the
+trees upon her face.
+
+  `Wake up, Alice dear!' said her sister; `Why, what a long
+sleep you've had!'
+
+  `Oh, I've had such a curious dream!' said Alice, and she told
+her sister, as well as she could remember them, all these strange
+Adventures of hers that you have just been reading about; and
+when she had finished, her sister kissed her, and said, `It WAS a
+curious dream, dear, certainly:  but now run in to your tea; it's
+getting late.'  So Alice got up and ran off, thinking while she
+ran, as well she might, what a wonderful dream it had been.
+
+  But her sister sat still just as she left her, leaning her
+head on her hand, watching the setting sun, and thinking of
+little Alice and all her wonderful Adventures, till she too began
+dreaming after a fashion, and this was her dream:--
+
+  First, she dreamed of little Alice herself, and once again the
+tiny hands were clasped upon her knee, and the bright eager eyes
+were looking up into hers--she could hear the very tones of her
+voice, and see that queer little toss of her head to keep back
+the wandering hair that WOULD always get into her eyes--and
+still as she listened, or seemed to listen, the whole place
+around her became alive the strange creatures of her little
+sister's dream.
+
+  The long grass rustled at her feet as the White Rabbit hurried
+by--the frightened Mouse splashed his way through the
+neighbouring pool--she could hear the rattle of the teacups as
+the March Hare and his friends shared their never-ending meal,
+and the shrill voice of the Queen ordering off her unfortunate
+guests to execution--once more the pig-baby was sneezing on the
+Duchess's knee, while plates and dishes crashed around it--once
+more the shriek of the Gryphon, the squeaking of the Lizard's
+slate-pencil, and the choking of the suppressed guinea-pigs,
+filled the air, mixed up with the distant sobs of the miserable
+Mock Turtle.
+
+  So she sat on, with closed eyes, and half believed herself in
+Wonderland, though she knew she had but to open them again, and
+all would change to dull reality--the grass would be only
+rustling in the wind, and the pool rippling to the waving of the
+reeds--the rattling teacups would change to tinkling sheep-
+bells, and the Queen's shrill cries to the voice of the shepherd
+boy--and the sneeze of the baby, the shriek of the Gryphon, and
+all thy other queer noises, would change (she knew) to the
+confused clamour of the busy farm-yard--while the lowing of the
+cattle in the distance would take the place of the Mock Turtle's
+heavy sobs.
+
+  Lastly, she pictured to herself how this same little sister of
+hers would, in the after-time, be herself a grown woman; and how
+she would keep, through all her riper years, the simple and
+loving heart of her childhood:  and how she would gather about
+her other little children, and make THEIR eyes bright and eager
+with many a strange tale, perhaps even with the dream of
+Wonderland of long ago:  and how she would feel with all their
+simple sorrows, and find a pleasure in all their simple joys,
+remembering her own child-life, and the happy summer days.
+
+                             THE END
diff --git a/guava-tests/test/com/google/common/io/testdata/i18n.txt b/guava-tests/test/com/google/common/io/testdata/i18n.txt
new file mode 100644
index 0000000..1f6c1cd
--- /dev/null
+++ b/guava-tests/test/com/google/common/io/testdata/i18n.txt
@@ -0,0 +1 @@
+ÎñÅ£érñåÅ£îöñåļîžåÅ£îöñ
\ No newline at end of file
diff --git a/guava-tests/test/com/google/common/io/testdata/simplifypathnoprefixtests.txt b/guava-tests/test/com/google/common/io/testdata/simplifypathnoprefixtests.txt
new file mode 100644
index 0000000..4478d83
--- /dev/null
+++ b/guava-tests/test/com/google/common/io/testdata/simplifypathnoprefixtests.txt
@@ -0,0 +1,59049 @@
+aaaaaaaaaa aaaaaaaaaa
+aaaaaaaaa. aaaaaaaaa.
+aaaaaaaaa/ aaaaaaaaa
+aaaaaaaa.a aaaaaaaa.a
+aaaaaaaa.. aaaaaaaa..
+aaaaaaaa./ aaaaaaaa.
+aaaaaaaa/a aaaaaaaa/a
+aaaaaaaa/. aaaaaaaa
+aaaaaaaa// aaaaaaaa
+aaaaaaa.aa aaaaaaa.aa
+aaaaaaa.a. aaaaaaa.a.
+aaaaaaa.a/ aaaaaaa.a
+aaaaaaa..a aaaaaaa..a
+aaaaaaa... aaaaaaa...
+aaaaaaa../ aaaaaaa..
+aaaaaaa./a aaaaaaa./a
+aaaaaaa./. aaaaaaa.
+aaaaaaa.// aaaaaaa.
+aaaaaaa/aa aaaaaaa/aa
+aaaaaaa/a. aaaaaaa/a.
+aaaaaaa/a/ aaaaaaa/a
+aaaaaaa/.a aaaaaaa/.a
+aaaaaaa/.. .
+aaaaaaa/./ aaaaaaa
+aaaaaaa//a aaaaaaa/a
+aaaaaaa//. aaaaaaa
+aaaaaaa/// aaaaaaa
+aaaaaa.aaa aaaaaa.aaa
+aaaaaa.aa. aaaaaa.aa.
+aaaaaa.aa/ aaaaaa.aa
+aaaaaa.a.a aaaaaa.a.a
+aaaaaa.a.. aaaaaa.a..
+aaaaaa.a./ aaaaaa.a.
+aaaaaa.a/a aaaaaa.a/a
+aaaaaa.a/. aaaaaa.a
+aaaaaa.a// aaaaaa.a
+aaaaaa..aa aaaaaa..aa
+aaaaaa..a. aaaaaa..a.
+aaaaaa..a/ aaaaaa..a
+aaaaaa...a aaaaaa...a
+aaaaaa.... aaaaaa....
+aaaaaa.../ aaaaaa...
+aaaaaa../a aaaaaa../a
+aaaaaa../. aaaaaa..
+aaaaaa..// aaaaaa..
+aaaaaa./aa aaaaaa./aa
+aaaaaa./a. aaaaaa./a.
+aaaaaa./a/ aaaaaa./a
+aaaaaa./.a aaaaaa./.a
+aaaaaa./.. .
+aaaaaa././ aaaaaa.
+aaaaaa.//a aaaaaa./a
+aaaaaa.//. aaaaaa.
+aaaaaa./// aaaaaa.
+aaaaaa/aaa aaaaaa/aaa
+aaaaaa/aa. aaaaaa/aa.
+aaaaaa/aa/ aaaaaa/aa
+aaaaaa/a.a aaaaaa/a.a
+aaaaaa/a.. aaaaaa/a..
+aaaaaa/a./ aaaaaa/a.
+aaaaaa/a/a aaaaaa/a/a
+aaaaaa/a/. aaaaaa/a
+aaaaaa/a// aaaaaa/a
+aaaaaa/.aa aaaaaa/.aa
+aaaaaa/.a. aaaaaa/.a.
+aaaaaa/.a/ aaaaaa/.a
+aaaaaa/..a aaaaaa/..a
+aaaaaa/... aaaaaa/...
+aaaaaa/../ .
+aaaaaa/./a aaaaaa/a
+aaaaaa/./. aaaaaa
+aaaaaa/.// aaaaaa
+aaaaaa//aa aaaaaa/aa
+aaaaaa//a. aaaaaa/a.
+aaaaaa//a/ aaaaaa/a
+aaaaaa//.a aaaaaa/.a
+aaaaaa//.. .
+aaaaaa//./ aaaaaa
+aaaaaa///a aaaaaa/a
+aaaaaa///. aaaaaa
+aaaaaa//// aaaaaa
+aaaaa.aaaa aaaaa.aaaa
+aaaaa.aaa. aaaaa.aaa.
+aaaaa.aaa/ aaaaa.aaa
+aaaaa.aa.a aaaaa.aa.a
+aaaaa.aa.. aaaaa.aa..
+aaaaa.aa./ aaaaa.aa.
+aaaaa.aa/a aaaaa.aa/a
+aaaaa.aa/. aaaaa.aa
+aaaaa.aa// aaaaa.aa
+aaaaa.a.aa aaaaa.a.aa
+aaaaa.a.a. aaaaa.a.a.
+aaaaa.a.a/ aaaaa.a.a
+aaaaa.a..a aaaaa.a..a
+aaaaa.a... aaaaa.a...
+aaaaa.a../ aaaaa.a..
+aaaaa.a./a aaaaa.a./a
+aaaaa.a./. aaaaa.a.
+aaaaa.a.// aaaaa.a.
+aaaaa.a/aa aaaaa.a/aa
+aaaaa.a/a. aaaaa.a/a.
+aaaaa.a/a/ aaaaa.a/a
+aaaaa.a/.a aaaaa.a/.a
+aaaaa.a/.. .
+aaaaa.a/./ aaaaa.a
+aaaaa.a//a aaaaa.a/a
+aaaaa.a//. aaaaa.a
+aaaaa.a/// aaaaa.a
+aaaaa..aaa aaaaa..aaa
+aaaaa..aa. aaaaa..aa.
+aaaaa..aa/ aaaaa..aa
+aaaaa..a.a aaaaa..a.a
+aaaaa..a.. aaaaa..a..
+aaaaa..a./ aaaaa..a.
+aaaaa..a/a aaaaa..a/a
+aaaaa..a/. aaaaa..a
+aaaaa..a// aaaaa..a
+aaaaa...aa aaaaa...aa
+aaaaa...a. aaaaa...a.
+aaaaa...a/ aaaaa...a
+aaaaa....a aaaaa....a
+aaaaa..... aaaaa.....
+aaaaa..../ aaaaa....
+aaaaa.../a aaaaa.../a
+aaaaa.../. aaaaa...
+aaaaa...// aaaaa...
+aaaaa../aa aaaaa../aa
+aaaaa../a. aaaaa../a.
+aaaaa../a/ aaaaa../a
+aaaaa../.a aaaaa../.a
+aaaaa../.. .
+aaaaa.././ aaaaa..
+aaaaa..//a aaaaa../a
+aaaaa..//. aaaaa..
+aaaaa../// aaaaa..
+aaaaa./aaa aaaaa./aaa
+aaaaa./aa. aaaaa./aa.
+aaaaa./aa/ aaaaa./aa
+aaaaa./a.a aaaaa./a.a
+aaaaa./a.. aaaaa./a..
+aaaaa./a./ aaaaa./a.
+aaaaa./a/a aaaaa./a/a
+aaaaa./a/. aaaaa./a
+aaaaa./a// aaaaa./a
+aaaaa./.aa aaaaa./.aa
+aaaaa./.a. aaaaa./.a.
+aaaaa./.a/ aaaaa./.a
+aaaaa./..a aaaaa./..a
+aaaaa./... aaaaa./...
+aaaaa./../ .
+aaaaa././a aaaaa./a
+aaaaa././. aaaaa.
+aaaaa./.// aaaaa.
+aaaaa.//aa aaaaa./aa
+aaaaa.//a. aaaaa./a.
+aaaaa.//a/ aaaaa./a
+aaaaa.//.a aaaaa./.a
+aaaaa.//.. .
+aaaaa.//./ aaaaa.
+aaaaa.///a aaaaa./a
+aaaaa.///. aaaaa.
+aaaaa.//// aaaaa.
+aaaaa/aaaa aaaaa/aaaa
+aaaaa/aaa. aaaaa/aaa.
+aaaaa/aaa/ aaaaa/aaa
+aaaaa/aa.a aaaaa/aa.a
+aaaaa/aa.. aaaaa/aa..
+aaaaa/aa./ aaaaa/aa.
+aaaaa/aa/a aaaaa/aa/a
+aaaaa/aa/. aaaaa/aa
+aaaaa/aa// aaaaa/aa
+aaaaa/a.aa aaaaa/a.aa
+aaaaa/a.a. aaaaa/a.a.
+aaaaa/a.a/ aaaaa/a.a
+aaaaa/a..a aaaaa/a..a
+aaaaa/a... aaaaa/a...
+aaaaa/a../ aaaaa/a..
+aaaaa/a./a aaaaa/a./a
+aaaaa/a./. aaaaa/a.
+aaaaa/a.// aaaaa/a.
+aaaaa/a/aa aaaaa/a/aa
+aaaaa/a/a. aaaaa/a/a.
+aaaaa/a/a/ aaaaa/a/a
+aaaaa/a/.a aaaaa/a/.a
+aaaaa/a/.. aaaaa
+aaaaa/a/./ aaaaa/a
+aaaaa/a//a aaaaa/a/a
+aaaaa/a//. aaaaa/a
+aaaaa/a/// aaaaa/a
+aaaaa/.aaa aaaaa/.aaa
+aaaaa/.aa. aaaaa/.aa.
+aaaaa/.aa/ aaaaa/.aa
+aaaaa/.a.a aaaaa/.a.a
+aaaaa/.a.. aaaaa/.a..
+aaaaa/.a./ aaaaa/.a.
+aaaaa/.a/a aaaaa/.a/a
+aaaaa/.a/. aaaaa/.a
+aaaaa/.a// aaaaa/.a
+aaaaa/..aa aaaaa/..aa
+aaaaa/..a. aaaaa/..a.
+aaaaa/..a/ aaaaa/..a
+aaaaa/...a aaaaa/...a
+aaaaa/.... aaaaa/....
+aaaaa/.../ aaaaa/...
+aaaaa/../a a
+aaaaa/../. .
+aaaaa/..// .
+aaaaa/./aa aaaaa/aa
+aaaaa/./a. aaaaa/a.
+aaaaa/./a/ aaaaa/a
+aaaaa/./.a aaaaa/.a
+aaaaa/./.. .
+aaaaa/././ aaaaa
+aaaaa/.//a aaaaa/a
+aaaaa/.//. aaaaa
+aaaaa/./// aaaaa
+aaaaa//aaa aaaaa/aaa
+aaaaa//aa. aaaaa/aa.
+aaaaa//aa/ aaaaa/aa
+aaaaa//a.a aaaaa/a.a
+aaaaa//a.. aaaaa/a..
+aaaaa//a./ aaaaa/a.
+aaaaa//a/a aaaaa/a/a
+aaaaa//a/. aaaaa/a
+aaaaa//a// aaaaa/a
+aaaaa//.aa aaaaa/.aa
+aaaaa//.a. aaaaa/.a.
+aaaaa//.a/ aaaaa/.a
+aaaaa//..a aaaaa/..a
+aaaaa//... aaaaa/...
+aaaaa//../ .
+aaaaa//./a aaaaa/a
+aaaaa//./. aaaaa
+aaaaa//.// aaaaa
+aaaaa///aa aaaaa/aa
+aaaaa///a. aaaaa/a.
+aaaaa///a/ aaaaa/a
+aaaaa///.a aaaaa/.a
+aaaaa///.. .
+aaaaa///./ aaaaa
+aaaaa////a aaaaa/a
+aaaaa////. aaaaa
+aaaaa///// aaaaa
+aaaa.aaaaa aaaa.aaaaa
+aaaa.aaaa. aaaa.aaaa.
+aaaa.aaaa/ aaaa.aaaa
+aaaa.aaa.a aaaa.aaa.a
+aaaa.aaa.. aaaa.aaa..
+aaaa.aaa./ aaaa.aaa.
+aaaa.aaa/a aaaa.aaa/a
+aaaa.aaa/. aaaa.aaa
+aaaa.aaa// aaaa.aaa
+aaaa.aa.aa aaaa.aa.aa
+aaaa.aa.a. aaaa.aa.a.
+aaaa.aa.a/ aaaa.aa.a
+aaaa.aa..a aaaa.aa..a
+aaaa.aa... aaaa.aa...
+aaaa.aa../ aaaa.aa..
+aaaa.aa./a aaaa.aa./a
+aaaa.aa./. aaaa.aa.
+aaaa.aa.// aaaa.aa.
+aaaa.aa/aa aaaa.aa/aa
+aaaa.aa/a. aaaa.aa/a.
+aaaa.aa/a/ aaaa.aa/a
+aaaa.aa/.a aaaa.aa/.a
+aaaa.aa/.. .
+aaaa.aa/./ aaaa.aa
+aaaa.aa//a aaaa.aa/a
+aaaa.aa//. aaaa.aa
+aaaa.aa/// aaaa.aa
+aaaa.a.aaa aaaa.a.aaa
+aaaa.a.aa. aaaa.a.aa.
+aaaa.a.aa/ aaaa.a.aa
+aaaa.a.a.a aaaa.a.a.a
+aaaa.a.a.. aaaa.a.a..
+aaaa.a.a./ aaaa.a.a.
+aaaa.a.a/a aaaa.a.a/a
+aaaa.a.a/. aaaa.a.a
+aaaa.a.a// aaaa.a.a
+aaaa.a..aa aaaa.a..aa
+aaaa.a..a. aaaa.a..a.
+aaaa.a..a/ aaaa.a..a
+aaaa.a...a aaaa.a...a
+aaaa.a.... aaaa.a....
+aaaa.a.../ aaaa.a...
+aaaa.a../a aaaa.a../a
+aaaa.a../. aaaa.a..
+aaaa.a..// aaaa.a..
+aaaa.a./aa aaaa.a./aa
+aaaa.a./a. aaaa.a./a.
+aaaa.a./a/ aaaa.a./a
+aaaa.a./.a aaaa.a./.a
+aaaa.a./.. .
+aaaa.a././ aaaa.a.
+aaaa.a.//a aaaa.a./a
+aaaa.a.//. aaaa.a.
+aaaa.a./// aaaa.a.
+aaaa.a/aaa aaaa.a/aaa
+aaaa.a/aa. aaaa.a/aa.
+aaaa.a/aa/ aaaa.a/aa
+aaaa.a/a.a aaaa.a/a.a
+aaaa.a/a.. aaaa.a/a..
+aaaa.a/a./ aaaa.a/a.
+aaaa.a/a/a aaaa.a/a/a
+aaaa.a/a/. aaaa.a/a
+aaaa.a/a// aaaa.a/a
+aaaa.a/.aa aaaa.a/.aa
+aaaa.a/.a. aaaa.a/.a.
+aaaa.a/.a/ aaaa.a/.a
+aaaa.a/..a aaaa.a/..a
+aaaa.a/... aaaa.a/...
+aaaa.a/../ .
+aaaa.a/./a aaaa.a/a
+aaaa.a/./. aaaa.a
+aaaa.a/.// aaaa.a
+aaaa.a//aa aaaa.a/aa
+aaaa.a//a. aaaa.a/a.
+aaaa.a//a/ aaaa.a/a
+aaaa.a//.a aaaa.a/.a
+aaaa.a//.. .
+aaaa.a//./ aaaa.a
+aaaa.a///a aaaa.a/a
+aaaa.a///. aaaa.a
+aaaa.a//// aaaa.a
+aaaa..aaaa aaaa..aaaa
+aaaa..aaa. aaaa..aaa.
+aaaa..aaa/ aaaa..aaa
+aaaa..aa.a aaaa..aa.a
+aaaa..aa.. aaaa..aa..
+aaaa..aa./ aaaa..aa.
+aaaa..aa/a aaaa..aa/a
+aaaa..aa/. aaaa..aa
+aaaa..aa// aaaa..aa
+aaaa..a.aa aaaa..a.aa
+aaaa..a.a. aaaa..a.a.
+aaaa..a.a/ aaaa..a.a
+aaaa..a..a aaaa..a..a
+aaaa..a... aaaa..a...
+aaaa..a../ aaaa..a..
+aaaa..a./a aaaa..a./a
+aaaa..a./. aaaa..a.
+aaaa..a.// aaaa..a.
+aaaa..a/aa aaaa..a/aa
+aaaa..a/a. aaaa..a/a.
+aaaa..a/a/ aaaa..a/a
+aaaa..a/.a aaaa..a/.a
+aaaa..a/.. .
+aaaa..a/./ aaaa..a
+aaaa..a//a aaaa..a/a
+aaaa..a//. aaaa..a
+aaaa..a/// aaaa..a
+aaaa...aaa aaaa...aaa
+aaaa...aa. aaaa...aa.
+aaaa...aa/ aaaa...aa
+aaaa...a.a aaaa...a.a
+aaaa...a.. aaaa...a..
+aaaa...a./ aaaa...a.
+aaaa...a/a aaaa...a/a
+aaaa...a/. aaaa...a
+aaaa...a// aaaa...a
+aaaa....aa aaaa....aa
+aaaa....a. aaaa....a.
+aaaa....a/ aaaa....a
+aaaa.....a aaaa.....a
+aaaa...... aaaa......
+aaaa...../ aaaa.....
+aaaa..../a aaaa..../a
+aaaa..../. aaaa....
+aaaa....// aaaa....
+aaaa.../aa aaaa.../aa
+aaaa.../a. aaaa.../a.
+aaaa.../a/ aaaa.../a
+aaaa.../.a aaaa.../.a
+aaaa.../.. .
+aaaa..././ aaaa...
+aaaa...//a aaaa.../a
+aaaa...//. aaaa...
+aaaa.../// aaaa...
+aaaa../aaa aaaa../aaa
+aaaa../aa. aaaa../aa.
+aaaa../aa/ aaaa../aa
+aaaa../a.a aaaa../a.a
+aaaa../a.. aaaa../a..
+aaaa../a./ aaaa../a.
+aaaa../a/a aaaa../a/a
+aaaa../a/. aaaa../a
+aaaa../a// aaaa../a
+aaaa../.aa aaaa../.aa
+aaaa../.a. aaaa../.a.
+aaaa../.a/ aaaa../.a
+aaaa../..a aaaa../..a
+aaaa../... aaaa../...
+aaaa../../ .
+aaaa.././a aaaa../a
+aaaa.././. aaaa..
+aaaa../.// aaaa..
+aaaa..//aa aaaa../aa
+aaaa..//a. aaaa../a.
+aaaa..//a/ aaaa../a
+aaaa..//.a aaaa../.a
+aaaa..//.. .
+aaaa..//./ aaaa..
+aaaa..///a aaaa../a
+aaaa..///. aaaa..
+aaaa..//// aaaa..
+aaaa./aaaa aaaa./aaaa
+aaaa./aaa. aaaa./aaa.
+aaaa./aaa/ aaaa./aaa
+aaaa./aa.a aaaa./aa.a
+aaaa./aa.. aaaa./aa..
+aaaa./aa./ aaaa./aa.
+aaaa./aa/a aaaa./aa/a
+aaaa./aa/. aaaa./aa
+aaaa./aa// aaaa./aa
+aaaa./a.aa aaaa./a.aa
+aaaa./a.a. aaaa./a.a.
+aaaa./a.a/ aaaa./a.a
+aaaa./a..a aaaa./a..a
+aaaa./a... aaaa./a...
+aaaa./a../ aaaa./a..
+aaaa./a./a aaaa./a./a
+aaaa./a./. aaaa./a.
+aaaa./a.// aaaa./a.
+aaaa./a/aa aaaa./a/aa
+aaaa./a/a. aaaa./a/a.
+aaaa./a/a/ aaaa./a/a
+aaaa./a/.a aaaa./a/.a
+aaaa./a/.. aaaa.
+aaaa./a/./ aaaa./a
+aaaa./a//a aaaa./a/a
+aaaa./a//. aaaa./a
+aaaa./a/// aaaa./a
+aaaa./.aaa aaaa./.aaa
+aaaa./.aa. aaaa./.aa.
+aaaa./.aa/ aaaa./.aa
+aaaa./.a.a aaaa./.a.a
+aaaa./.a.. aaaa./.a..
+aaaa./.a./ aaaa./.a.
+aaaa./.a/a aaaa./.a/a
+aaaa./.a/. aaaa./.a
+aaaa./.a// aaaa./.a
+aaaa./..aa aaaa./..aa
+aaaa./..a. aaaa./..a.
+aaaa./..a/ aaaa./..a
+aaaa./...a aaaa./...a
+aaaa./.... aaaa./....
+aaaa./.../ aaaa./...
+aaaa./../a a
+aaaa./../. .
+aaaa./..// .
+aaaa././aa aaaa./aa
+aaaa././a. aaaa./a.
+aaaa././a/ aaaa./a
+aaaa././.a aaaa./.a
+aaaa././.. .
+aaaa./././ aaaa.
+aaaa././/a aaaa./a
+aaaa././/. aaaa.
+aaaa././// aaaa.
+aaaa.//aaa aaaa./aaa
+aaaa.//aa. aaaa./aa.
+aaaa.//aa/ aaaa./aa
+aaaa.//a.a aaaa./a.a
+aaaa.//a.. aaaa./a..
+aaaa.//a./ aaaa./a.
+aaaa.//a/a aaaa./a/a
+aaaa.//a/. aaaa./a
+aaaa.//a// aaaa./a
+aaaa.//.aa aaaa./.aa
+aaaa.//.a. aaaa./.a.
+aaaa.//.a/ aaaa./.a
+aaaa.//..a aaaa./..a
+aaaa.//... aaaa./...
+aaaa.//../ .
+aaaa.//./a aaaa./a
+aaaa.//./. aaaa.
+aaaa.//.// aaaa.
+aaaa.///aa aaaa./aa
+aaaa.///a. aaaa./a.
+aaaa.///a/ aaaa./a
+aaaa.///.a aaaa./.a
+aaaa.///.. .
+aaaa.///./ aaaa.
+aaaa.////a aaaa./a
+aaaa.////. aaaa.
+aaaa.///// aaaa.
+aaaa/aaaaa aaaa/aaaaa
+aaaa/aaaa. aaaa/aaaa.
+aaaa/aaaa/ aaaa/aaaa
+aaaa/aaa.a aaaa/aaa.a
+aaaa/aaa.. aaaa/aaa..
+aaaa/aaa./ aaaa/aaa.
+aaaa/aaa/a aaaa/aaa/a
+aaaa/aaa/. aaaa/aaa
+aaaa/aaa// aaaa/aaa
+aaaa/aa.aa aaaa/aa.aa
+aaaa/aa.a. aaaa/aa.a.
+aaaa/aa.a/ aaaa/aa.a
+aaaa/aa..a aaaa/aa..a
+aaaa/aa... aaaa/aa...
+aaaa/aa../ aaaa/aa..
+aaaa/aa./a aaaa/aa./a
+aaaa/aa./. aaaa/aa.
+aaaa/aa.// aaaa/aa.
+aaaa/aa/aa aaaa/aa/aa
+aaaa/aa/a. aaaa/aa/a.
+aaaa/aa/a/ aaaa/aa/a
+aaaa/aa/.a aaaa/aa/.a
+aaaa/aa/.. aaaa
+aaaa/aa/./ aaaa/aa
+aaaa/aa//a aaaa/aa/a
+aaaa/aa//. aaaa/aa
+aaaa/aa/// aaaa/aa
+aaaa/a.aaa aaaa/a.aaa
+aaaa/a.aa. aaaa/a.aa.
+aaaa/a.aa/ aaaa/a.aa
+aaaa/a.a.a aaaa/a.a.a
+aaaa/a.a.. aaaa/a.a..
+aaaa/a.a./ aaaa/a.a.
+aaaa/a.a/a aaaa/a.a/a
+aaaa/a.a/. aaaa/a.a
+aaaa/a.a// aaaa/a.a
+aaaa/a..aa aaaa/a..aa
+aaaa/a..a. aaaa/a..a.
+aaaa/a..a/ aaaa/a..a
+aaaa/a...a aaaa/a...a
+aaaa/a.... aaaa/a....
+aaaa/a.../ aaaa/a...
+aaaa/a../a aaaa/a../a
+aaaa/a../. aaaa/a..
+aaaa/a..// aaaa/a..
+aaaa/a./aa aaaa/a./aa
+aaaa/a./a. aaaa/a./a.
+aaaa/a./a/ aaaa/a./a
+aaaa/a./.a aaaa/a./.a
+aaaa/a./.. aaaa
+aaaa/a././ aaaa/a.
+aaaa/a.//a aaaa/a./a
+aaaa/a.//. aaaa/a.
+aaaa/a./// aaaa/a.
+aaaa/a/aaa aaaa/a/aaa
+aaaa/a/aa. aaaa/a/aa.
+aaaa/a/aa/ aaaa/a/aa
+aaaa/a/a.a aaaa/a/a.a
+aaaa/a/a.. aaaa/a/a..
+aaaa/a/a./ aaaa/a/a.
+aaaa/a/a/a aaaa/a/a/a
+aaaa/a/a/. aaaa/a/a
+aaaa/a/a// aaaa/a/a
+aaaa/a/.aa aaaa/a/.aa
+aaaa/a/.a. aaaa/a/.a.
+aaaa/a/.a/ aaaa/a/.a
+aaaa/a/..a aaaa/a/..a
+aaaa/a/... aaaa/a/...
+aaaa/a/../ aaaa
+aaaa/a/./a aaaa/a/a
+aaaa/a/./. aaaa/a
+aaaa/a/.// aaaa/a
+aaaa/a//aa aaaa/a/aa
+aaaa/a//a. aaaa/a/a.
+aaaa/a//a/ aaaa/a/a
+aaaa/a//.a aaaa/a/.a
+aaaa/a//.. aaaa
+aaaa/a//./ aaaa/a
+aaaa/a///a aaaa/a/a
+aaaa/a///. aaaa/a
+aaaa/a//// aaaa/a
+aaaa/.aaaa aaaa/.aaaa
+aaaa/.aaa. aaaa/.aaa.
+aaaa/.aaa/ aaaa/.aaa
+aaaa/.aa.a aaaa/.aa.a
+aaaa/.aa.. aaaa/.aa..
+aaaa/.aa./ aaaa/.aa.
+aaaa/.aa/a aaaa/.aa/a
+aaaa/.aa/. aaaa/.aa
+aaaa/.aa// aaaa/.aa
+aaaa/.a.aa aaaa/.a.aa
+aaaa/.a.a. aaaa/.a.a.
+aaaa/.a.a/ aaaa/.a.a
+aaaa/.a..a aaaa/.a..a
+aaaa/.a... aaaa/.a...
+aaaa/.a../ aaaa/.a..
+aaaa/.a./a aaaa/.a./a
+aaaa/.a./. aaaa/.a.
+aaaa/.a.// aaaa/.a.
+aaaa/.a/aa aaaa/.a/aa
+aaaa/.a/a. aaaa/.a/a.
+aaaa/.a/a/ aaaa/.a/a
+aaaa/.a/.a aaaa/.a/.a
+aaaa/.a/.. aaaa
+aaaa/.a/./ aaaa/.a
+aaaa/.a//a aaaa/.a/a
+aaaa/.a//. aaaa/.a
+aaaa/.a/// aaaa/.a
+aaaa/..aaa aaaa/..aaa
+aaaa/..aa. aaaa/..aa.
+aaaa/..aa/ aaaa/..aa
+aaaa/..a.a aaaa/..a.a
+aaaa/..a.. aaaa/..a..
+aaaa/..a./ aaaa/..a.
+aaaa/..a/a aaaa/..a/a
+aaaa/..a/. aaaa/..a
+aaaa/..a// aaaa/..a
+aaaa/...aa aaaa/...aa
+aaaa/...a. aaaa/...a.
+aaaa/...a/ aaaa/...a
+aaaa/....a aaaa/....a
+aaaa/..... aaaa/.....
+aaaa/..../ aaaa/....
+aaaa/.../a aaaa/.../a
+aaaa/.../. aaaa/...
+aaaa/...// aaaa/...
+aaaa/../aa aa
+aaaa/../a. a.
+aaaa/../a/ a
+aaaa/../.a .a
+aaaa/../.. ..
+aaaa/.././ .
+aaaa/..//a a
+aaaa/..//. .
+aaaa/../// .
+aaaa/./aaa aaaa/aaa
+aaaa/./aa. aaaa/aa.
+aaaa/./aa/ aaaa/aa
+aaaa/./a.a aaaa/a.a
+aaaa/./a.. aaaa/a..
+aaaa/./a./ aaaa/a.
+aaaa/./a/a aaaa/a/a
+aaaa/./a/. aaaa/a
+aaaa/./a// aaaa/a
+aaaa/./.aa aaaa/.aa
+aaaa/./.a. aaaa/.a.
+aaaa/./.a/ aaaa/.a
+aaaa/./..a aaaa/..a
+aaaa/./... aaaa/...
+aaaa/./../ .
+aaaa/././a aaaa/a
+aaaa/././. aaaa
+aaaa/./.// aaaa
+aaaa/.//aa aaaa/aa
+aaaa/.//a. aaaa/a.
+aaaa/.//a/ aaaa/a
+aaaa/.//.a aaaa/.a
+aaaa/.//.. .
+aaaa/.//./ aaaa
+aaaa/.///a aaaa/a
+aaaa/.///. aaaa
+aaaa/.//// aaaa
+aaaa//aaaa aaaa/aaaa
+aaaa//aaa. aaaa/aaa.
+aaaa//aaa/ aaaa/aaa
+aaaa//aa.a aaaa/aa.a
+aaaa//aa.. aaaa/aa..
+aaaa//aa./ aaaa/aa.
+aaaa//aa/a aaaa/aa/a
+aaaa//aa/. aaaa/aa
+aaaa//aa// aaaa/aa
+aaaa//a.aa aaaa/a.aa
+aaaa//a.a. aaaa/a.a.
+aaaa//a.a/ aaaa/a.a
+aaaa//a..a aaaa/a..a
+aaaa//a... aaaa/a...
+aaaa//a../ aaaa/a..
+aaaa//a./a aaaa/a./a
+aaaa//a./. aaaa/a.
+aaaa//a.// aaaa/a.
+aaaa//a/aa aaaa/a/aa
+aaaa//a/a. aaaa/a/a.
+aaaa//a/a/ aaaa/a/a
+aaaa//a/.a aaaa/a/.a
+aaaa//a/.. aaaa
+aaaa//a/./ aaaa/a
+aaaa//a//a aaaa/a/a
+aaaa//a//. aaaa/a
+aaaa//a/// aaaa/a
+aaaa//.aaa aaaa/.aaa
+aaaa//.aa. aaaa/.aa.
+aaaa//.aa/ aaaa/.aa
+aaaa//.a.a aaaa/.a.a
+aaaa//.a.. aaaa/.a..
+aaaa//.a./ aaaa/.a.
+aaaa//.a/a aaaa/.a/a
+aaaa//.a/. aaaa/.a
+aaaa//.a// aaaa/.a
+aaaa//..aa aaaa/..aa
+aaaa//..a. aaaa/..a.
+aaaa//..a/ aaaa/..a
+aaaa//...a aaaa/...a
+aaaa//.... aaaa/....
+aaaa//.../ aaaa/...
+aaaa//../a a
+aaaa//../. .
+aaaa//..// .
+aaaa//./aa aaaa/aa
+aaaa//./a. aaaa/a.
+aaaa//./a/ aaaa/a
+aaaa//./.a aaaa/.a
+aaaa//./.. .
+aaaa//././ aaaa
+aaaa//.//a aaaa/a
+aaaa//.//. aaaa
+aaaa//./// aaaa
+aaaa///aaa aaaa/aaa
+aaaa///aa. aaaa/aa.
+aaaa///aa/ aaaa/aa
+aaaa///a.a aaaa/a.a
+aaaa///a.. aaaa/a..
+aaaa///a./ aaaa/a.
+aaaa///a/a aaaa/a/a
+aaaa///a/. aaaa/a
+aaaa///a// aaaa/a
+aaaa///.aa aaaa/.aa
+aaaa///.a. aaaa/.a.
+aaaa///.a/ aaaa/.a
+aaaa///..a aaaa/..a
+aaaa///... aaaa/...
+aaaa///../ .
+aaaa///./a aaaa/a
+aaaa///./. aaaa
+aaaa///.// aaaa
+aaaa////aa aaaa/aa
+aaaa////a. aaaa/a.
+aaaa////a/ aaaa/a
+aaaa////.a aaaa/.a
+aaaa////.. .
+aaaa////./ aaaa
+aaaa/////a aaaa/a
+aaaa/////. aaaa
+aaaa////// aaaa
+aaa.aaaaaa aaa.aaaaaa
+aaa.aaaaa. aaa.aaaaa.
+aaa.aaaaa/ aaa.aaaaa
+aaa.aaaa.a aaa.aaaa.a
+aaa.aaaa.. aaa.aaaa..
+aaa.aaaa./ aaa.aaaa.
+aaa.aaaa/a aaa.aaaa/a
+aaa.aaaa/. aaa.aaaa
+aaa.aaaa// aaa.aaaa
+aaa.aaa.aa aaa.aaa.aa
+aaa.aaa.a. aaa.aaa.a.
+aaa.aaa.a/ aaa.aaa.a
+aaa.aaa..a aaa.aaa..a
+aaa.aaa... aaa.aaa...
+aaa.aaa../ aaa.aaa..
+aaa.aaa./a aaa.aaa./a
+aaa.aaa./. aaa.aaa.
+aaa.aaa.// aaa.aaa.
+aaa.aaa/aa aaa.aaa/aa
+aaa.aaa/a. aaa.aaa/a.
+aaa.aaa/a/ aaa.aaa/a
+aaa.aaa/.a aaa.aaa/.a
+aaa.aaa/.. .
+aaa.aaa/./ aaa.aaa
+aaa.aaa//a aaa.aaa/a
+aaa.aaa//. aaa.aaa
+aaa.aaa/// aaa.aaa
+aaa.aa.aaa aaa.aa.aaa
+aaa.aa.aa. aaa.aa.aa.
+aaa.aa.aa/ aaa.aa.aa
+aaa.aa.a.a aaa.aa.a.a
+aaa.aa.a.. aaa.aa.a..
+aaa.aa.a./ aaa.aa.a.
+aaa.aa.a/a aaa.aa.a/a
+aaa.aa.a/. aaa.aa.a
+aaa.aa.a// aaa.aa.a
+aaa.aa..aa aaa.aa..aa
+aaa.aa..a. aaa.aa..a.
+aaa.aa..a/ aaa.aa..a
+aaa.aa...a aaa.aa...a
+aaa.aa.... aaa.aa....
+aaa.aa.../ aaa.aa...
+aaa.aa../a aaa.aa../a
+aaa.aa../. aaa.aa..
+aaa.aa..// aaa.aa..
+aaa.aa./aa aaa.aa./aa
+aaa.aa./a. aaa.aa./a.
+aaa.aa./a/ aaa.aa./a
+aaa.aa./.a aaa.aa./.a
+aaa.aa./.. .
+aaa.aa././ aaa.aa.
+aaa.aa.//a aaa.aa./a
+aaa.aa.//. aaa.aa.
+aaa.aa./// aaa.aa.
+aaa.aa/aaa aaa.aa/aaa
+aaa.aa/aa. aaa.aa/aa.
+aaa.aa/aa/ aaa.aa/aa
+aaa.aa/a.a aaa.aa/a.a
+aaa.aa/a.. aaa.aa/a..
+aaa.aa/a./ aaa.aa/a.
+aaa.aa/a/a aaa.aa/a/a
+aaa.aa/a/. aaa.aa/a
+aaa.aa/a// aaa.aa/a
+aaa.aa/.aa aaa.aa/.aa
+aaa.aa/.a. aaa.aa/.a.
+aaa.aa/.a/ aaa.aa/.a
+aaa.aa/..a aaa.aa/..a
+aaa.aa/... aaa.aa/...
+aaa.aa/../ .
+aaa.aa/./a aaa.aa/a
+aaa.aa/./. aaa.aa
+aaa.aa/.// aaa.aa
+aaa.aa//aa aaa.aa/aa
+aaa.aa//a. aaa.aa/a.
+aaa.aa//a/ aaa.aa/a
+aaa.aa//.a aaa.aa/.a
+aaa.aa//.. .
+aaa.aa//./ aaa.aa
+aaa.aa///a aaa.aa/a
+aaa.aa///. aaa.aa
+aaa.aa//// aaa.aa
+aaa.a.aaaa aaa.a.aaaa
+aaa.a.aaa. aaa.a.aaa.
+aaa.a.aaa/ aaa.a.aaa
+aaa.a.aa.a aaa.a.aa.a
+aaa.a.aa.. aaa.a.aa..
+aaa.a.aa./ aaa.a.aa.
+aaa.a.aa/a aaa.a.aa/a
+aaa.a.aa/. aaa.a.aa
+aaa.a.aa// aaa.a.aa
+aaa.a.a.aa aaa.a.a.aa
+aaa.a.a.a. aaa.a.a.a.
+aaa.a.a.a/ aaa.a.a.a
+aaa.a.a..a aaa.a.a..a
+aaa.a.a... aaa.a.a...
+aaa.a.a../ aaa.a.a..
+aaa.a.a./a aaa.a.a./a
+aaa.a.a./. aaa.a.a.
+aaa.a.a.// aaa.a.a.
+aaa.a.a/aa aaa.a.a/aa
+aaa.a.a/a. aaa.a.a/a.
+aaa.a.a/a/ aaa.a.a/a
+aaa.a.a/.a aaa.a.a/.a
+aaa.a.a/.. .
+aaa.a.a/./ aaa.a.a
+aaa.a.a//a aaa.a.a/a
+aaa.a.a//. aaa.a.a
+aaa.a.a/// aaa.a.a
+aaa.a..aaa aaa.a..aaa
+aaa.a..aa. aaa.a..aa.
+aaa.a..aa/ aaa.a..aa
+aaa.a..a.a aaa.a..a.a
+aaa.a..a.. aaa.a..a..
+aaa.a..a./ aaa.a..a.
+aaa.a..a/a aaa.a..a/a
+aaa.a..a/. aaa.a..a
+aaa.a..a// aaa.a..a
+aaa.a...aa aaa.a...aa
+aaa.a...a. aaa.a...a.
+aaa.a...a/ aaa.a...a
+aaa.a....a aaa.a....a
+aaa.a..... aaa.a.....
+aaa.a..../ aaa.a....
+aaa.a.../a aaa.a.../a
+aaa.a.../. aaa.a...
+aaa.a...// aaa.a...
+aaa.a../aa aaa.a../aa
+aaa.a../a. aaa.a../a.
+aaa.a../a/ aaa.a../a
+aaa.a../.a aaa.a../.a
+aaa.a../.. .
+aaa.a.././ aaa.a..
+aaa.a..//a aaa.a../a
+aaa.a..//. aaa.a..
+aaa.a../// aaa.a..
+aaa.a./aaa aaa.a./aaa
+aaa.a./aa. aaa.a./aa.
+aaa.a./aa/ aaa.a./aa
+aaa.a./a.a aaa.a./a.a
+aaa.a./a.. aaa.a./a..
+aaa.a./a./ aaa.a./a.
+aaa.a./a/a aaa.a./a/a
+aaa.a./a/. aaa.a./a
+aaa.a./a// aaa.a./a
+aaa.a./.aa aaa.a./.aa
+aaa.a./.a. aaa.a./.a.
+aaa.a./.a/ aaa.a./.a
+aaa.a./..a aaa.a./..a
+aaa.a./... aaa.a./...
+aaa.a./../ .
+aaa.a././a aaa.a./a
+aaa.a././. aaa.a.
+aaa.a./.// aaa.a.
+aaa.a.//aa aaa.a./aa
+aaa.a.//a. aaa.a./a.
+aaa.a.//a/ aaa.a./a
+aaa.a.//.a aaa.a./.a
+aaa.a.//.. .
+aaa.a.//./ aaa.a.
+aaa.a.///a aaa.a./a
+aaa.a.///. aaa.a.
+aaa.a.//// aaa.a.
+aaa.a/aaaa aaa.a/aaaa
+aaa.a/aaa. aaa.a/aaa.
+aaa.a/aaa/ aaa.a/aaa
+aaa.a/aa.a aaa.a/aa.a
+aaa.a/aa.. aaa.a/aa..
+aaa.a/aa./ aaa.a/aa.
+aaa.a/aa/a aaa.a/aa/a
+aaa.a/aa/. aaa.a/aa
+aaa.a/aa// aaa.a/aa
+aaa.a/a.aa aaa.a/a.aa
+aaa.a/a.a. aaa.a/a.a.
+aaa.a/a.a/ aaa.a/a.a
+aaa.a/a..a aaa.a/a..a
+aaa.a/a... aaa.a/a...
+aaa.a/a../ aaa.a/a..
+aaa.a/a./a aaa.a/a./a
+aaa.a/a./. aaa.a/a.
+aaa.a/a.// aaa.a/a.
+aaa.a/a/aa aaa.a/a/aa
+aaa.a/a/a. aaa.a/a/a.
+aaa.a/a/a/ aaa.a/a/a
+aaa.a/a/.a aaa.a/a/.a
+aaa.a/a/.. aaa.a
+aaa.a/a/./ aaa.a/a
+aaa.a/a//a aaa.a/a/a
+aaa.a/a//. aaa.a/a
+aaa.a/a/// aaa.a/a
+aaa.a/.aaa aaa.a/.aaa
+aaa.a/.aa. aaa.a/.aa.
+aaa.a/.aa/ aaa.a/.aa
+aaa.a/.a.a aaa.a/.a.a
+aaa.a/.a.. aaa.a/.a..
+aaa.a/.a./ aaa.a/.a.
+aaa.a/.a/a aaa.a/.a/a
+aaa.a/.a/. aaa.a/.a
+aaa.a/.a// aaa.a/.a
+aaa.a/..aa aaa.a/..aa
+aaa.a/..a. aaa.a/..a.
+aaa.a/..a/ aaa.a/..a
+aaa.a/...a aaa.a/...a
+aaa.a/.... aaa.a/....
+aaa.a/.../ aaa.a/...
+aaa.a/../a a
+aaa.a/../. .
+aaa.a/..// .
+aaa.a/./aa aaa.a/aa
+aaa.a/./a. aaa.a/a.
+aaa.a/./a/ aaa.a/a
+aaa.a/./.a aaa.a/.a
+aaa.a/./.. .
+aaa.a/././ aaa.a
+aaa.a/.//a aaa.a/a
+aaa.a/.//. aaa.a
+aaa.a/./// aaa.a
+aaa.a//aaa aaa.a/aaa
+aaa.a//aa. aaa.a/aa.
+aaa.a//aa/ aaa.a/aa
+aaa.a//a.a aaa.a/a.a
+aaa.a//a.. aaa.a/a..
+aaa.a//a./ aaa.a/a.
+aaa.a//a/a aaa.a/a/a
+aaa.a//a/. aaa.a/a
+aaa.a//a// aaa.a/a
+aaa.a//.aa aaa.a/.aa
+aaa.a//.a. aaa.a/.a.
+aaa.a//.a/ aaa.a/.a
+aaa.a//..a aaa.a/..a
+aaa.a//... aaa.a/...
+aaa.a//../ .
+aaa.a//./a aaa.a/a
+aaa.a//./. aaa.a
+aaa.a//.// aaa.a
+aaa.a///aa aaa.a/aa
+aaa.a///a. aaa.a/a.
+aaa.a///a/ aaa.a/a
+aaa.a///.a aaa.a/.a
+aaa.a///.. .
+aaa.a///./ aaa.a
+aaa.a////a aaa.a/a
+aaa.a////. aaa.a
+aaa.a///// aaa.a
+aaa..aaaaa aaa..aaaaa
+aaa..aaaa. aaa..aaaa.
+aaa..aaaa/ aaa..aaaa
+aaa..aaa.a aaa..aaa.a
+aaa..aaa.. aaa..aaa..
+aaa..aaa./ aaa..aaa.
+aaa..aaa/a aaa..aaa/a
+aaa..aaa/. aaa..aaa
+aaa..aaa// aaa..aaa
+aaa..aa.aa aaa..aa.aa
+aaa..aa.a. aaa..aa.a.
+aaa..aa.a/ aaa..aa.a
+aaa..aa..a aaa..aa..a
+aaa..aa... aaa..aa...
+aaa..aa../ aaa..aa..
+aaa..aa./a aaa..aa./a
+aaa..aa./. aaa..aa.
+aaa..aa.// aaa..aa.
+aaa..aa/aa aaa..aa/aa
+aaa..aa/a. aaa..aa/a.
+aaa..aa/a/ aaa..aa/a
+aaa..aa/.a aaa..aa/.a
+aaa..aa/.. .
+aaa..aa/./ aaa..aa
+aaa..aa//a aaa..aa/a
+aaa..aa//. aaa..aa
+aaa..aa/// aaa..aa
+aaa..a.aaa aaa..a.aaa
+aaa..a.aa. aaa..a.aa.
+aaa..a.aa/ aaa..a.aa
+aaa..a.a.a aaa..a.a.a
+aaa..a.a.. aaa..a.a..
+aaa..a.a./ aaa..a.a.
+aaa..a.a/a aaa..a.a/a
+aaa..a.a/. aaa..a.a
+aaa..a.a// aaa..a.a
+aaa..a..aa aaa..a..aa
+aaa..a..a. aaa..a..a.
+aaa..a..a/ aaa..a..a
+aaa..a...a aaa..a...a
+aaa..a.... aaa..a....
+aaa..a.../ aaa..a...
+aaa..a../a aaa..a../a
+aaa..a../. aaa..a..
+aaa..a..// aaa..a..
+aaa..a./aa aaa..a./aa
+aaa..a./a. aaa..a./a.
+aaa..a./a/ aaa..a./a
+aaa..a./.a aaa..a./.a
+aaa..a./.. .
+aaa..a././ aaa..a.
+aaa..a.//a aaa..a./a
+aaa..a.//. aaa..a.
+aaa..a./// aaa..a.
+aaa..a/aaa aaa..a/aaa
+aaa..a/aa. aaa..a/aa.
+aaa..a/aa/ aaa..a/aa
+aaa..a/a.a aaa..a/a.a
+aaa..a/a.. aaa..a/a..
+aaa..a/a./ aaa..a/a.
+aaa..a/a/a aaa..a/a/a
+aaa..a/a/. aaa..a/a
+aaa..a/a// aaa..a/a
+aaa..a/.aa aaa..a/.aa
+aaa..a/.a. aaa..a/.a.
+aaa..a/.a/ aaa..a/.a
+aaa..a/..a aaa..a/..a
+aaa..a/... aaa..a/...
+aaa..a/../ .
+aaa..a/./a aaa..a/a
+aaa..a/./. aaa..a
+aaa..a/.// aaa..a
+aaa..a//aa aaa..a/aa
+aaa..a//a. aaa..a/a.
+aaa..a//a/ aaa..a/a
+aaa..a//.a aaa..a/.a
+aaa..a//.. .
+aaa..a//./ aaa..a
+aaa..a///a aaa..a/a
+aaa..a///. aaa..a
+aaa..a//// aaa..a
+aaa...aaaa aaa...aaaa
+aaa...aaa. aaa...aaa.
+aaa...aaa/ aaa...aaa
+aaa...aa.a aaa...aa.a
+aaa...aa.. aaa...aa..
+aaa...aa./ aaa...aa.
+aaa...aa/a aaa...aa/a
+aaa...aa/. aaa...aa
+aaa...aa// aaa...aa
+aaa...a.aa aaa...a.aa
+aaa...a.a. aaa...a.a.
+aaa...a.a/ aaa...a.a
+aaa...a..a aaa...a..a
+aaa...a... aaa...a...
+aaa...a../ aaa...a..
+aaa...a./a aaa...a./a
+aaa...a./. aaa...a.
+aaa...a.// aaa...a.
+aaa...a/aa aaa...a/aa
+aaa...a/a. aaa...a/a.
+aaa...a/a/ aaa...a/a
+aaa...a/.a aaa...a/.a
+aaa...a/.. .
+aaa...a/./ aaa...a
+aaa...a//a aaa...a/a
+aaa...a//. aaa...a
+aaa...a/// aaa...a
+aaa....aaa aaa....aaa
+aaa....aa. aaa....aa.
+aaa....aa/ aaa....aa
+aaa....a.a aaa....a.a
+aaa....a.. aaa....a..
+aaa....a./ aaa....a.
+aaa....a/a aaa....a/a
+aaa....a/. aaa....a
+aaa....a// aaa....a
+aaa.....aa aaa.....aa
+aaa.....a. aaa.....a.
+aaa.....a/ aaa.....a
+aaa......a aaa......a
+aaa....... aaa.......
+aaa....../ aaa......
+aaa...../a aaa...../a
+aaa...../. aaa.....
+aaa.....// aaa.....
+aaa..../aa aaa..../aa
+aaa..../a. aaa..../a.
+aaa..../a/ aaa..../a
+aaa..../.a aaa..../.a
+aaa..../.. .
+aaa...././ aaa....
+aaa....//a aaa..../a
+aaa....//. aaa....
+aaa..../// aaa....
+aaa.../aaa aaa.../aaa
+aaa.../aa. aaa.../aa.
+aaa.../aa/ aaa.../aa
+aaa.../a.a aaa.../a.a
+aaa.../a.. aaa.../a..
+aaa.../a./ aaa.../a.
+aaa.../a/a aaa.../a/a
+aaa.../a/. aaa.../a
+aaa.../a// aaa.../a
+aaa.../.aa aaa.../.aa
+aaa.../.a. aaa.../.a.
+aaa.../.a/ aaa.../.a
+aaa.../..a aaa.../..a
+aaa.../... aaa.../...
+aaa.../../ .
+aaa..././a aaa.../a
+aaa..././. aaa...
+aaa.../.// aaa...
+aaa...//aa aaa.../aa
+aaa...//a. aaa.../a.
+aaa...//a/ aaa.../a
+aaa...//.a aaa.../.a
+aaa...//.. .
+aaa...//./ aaa...
+aaa...///a aaa.../a
+aaa...///. aaa...
+aaa...//// aaa...
+aaa../aaaa aaa../aaaa
+aaa../aaa. aaa../aaa.
+aaa../aaa/ aaa../aaa
+aaa../aa.a aaa../aa.a
+aaa../aa.. aaa../aa..
+aaa../aa./ aaa../aa.
+aaa../aa/a aaa../aa/a
+aaa../aa/. aaa../aa
+aaa../aa// aaa../aa
+aaa../a.aa aaa../a.aa
+aaa../a.a. aaa../a.a.
+aaa../a.a/ aaa../a.a
+aaa../a..a aaa../a..a
+aaa../a... aaa../a...
+aaa../a../ aaa../a..
+aaa../a./a aaa../a./a
+aaa../a./. aaa../a.
+aaa../a.// aaa../a.
+aaa../a/aa aaa../a/aa
+aaa../a/a. aaa../a/a.
+aaa../a/a/ aaa../a/a
+aaa../a/.a aaa../a/.a
+aaa../a/.. aaa..
+aaa../a/./ aaa../a
+aaa../a//a aaa../a/a
+aaa../a//. aaa../a
+aaa../a/// aaa../a
+aaa../.aaa aaa../.aaa
+aaa../.aa. aaa../.aa.
+aaa../.aa/ aaa../.aa
+aaa../.a.a aaa../.a.a
+aaa../.a.. aaa../.a..
+aaa../.a./ aaa../.a.
+aaa../.a/a aaa../.a/a
+aaa../.a/. aaa../.a
+aaa../.a// aaa../.a
+aaa../..aa aaa../..aa
+aaa../..a. aaa../..a.
+aaa../..a/ aaa../..a
+aaa../...a aaa../...a
+aaa../.... aaa../....
+aaa../.../ aaa../...
+aaa../../a a
+aaa../../. .
+aaa../..// .
+aaa.././aa aaa../aa
+aaa.././a. aaa../a.
+aaa.././a/ aaa../a
+aaa.././.a aaa../.a
+aaa.././.. .
+aaa../././ aaa..
+aaa.././/a aaa../a
+aaa.././/. aaa..
+aaa.././// aaa..
+aaa..//aaa aaa../aaa
+aaa..//aa. aaa../aa.
+aaa..//aa/ aaa../aa
+aaa..//a.a aaa../a.a
+aaa..//a.. aaa../a..
+aaa..//a./ aaa../a.
+aaa..//a/a aaa../a/a
+aaa..//a/. aaa../a
+aaa..//a// aaa../a
+aaa..//.aa aaa../.aa
+aaa..//.a. aaa../.a.
+aaa..//.a/ aaa../.a
+aaa..//..a aaa../..a
+aaa..//... aaa../...
+aaa..//../ .
+aaa..//./a aaa../a
+aaa..//./. aaa..
+aaa..//.// aaa..
+aaa..///aa aaa../aa
+aaa..///a. aaa../a.
+aaa..///a/ aaa../a
+aaa..///.a aaa../.a
+aaa..///.. .
+aaa..///./ aaa..
+aaa..////a aaa../a
+aaa..////. aaa..
+aaa..///// aaa..
+aaa./aaaaa aaa./aaaaa
+aaa./aaaa. aaa./aaaa.
+aaa./aaaa/ aaa./aaaa
+aaa./aaa.a aaa./aaa.a
+aaa./aaa.. aaa./aaa..
+aaa./aaa./ aaa./aaa.
+aaa./aaa/a aaa./aaa/a
+aaa./aaa/. aaa./aaa
+aaa./aaa// aaa./aaa
+aaa./aa.aa aaa./aa.aa
+aaa./aa.a. aaa./aa.a.
+aaa./aa.a/ aaa./aa.a
+aaa./aa..a aaa./aa..a
+aaa./aa... aaa./aa...
+aaa./aa../ aaa./aa..
+aaa./aa./a aaa./aa./a
+aaa./aa./. aaa./aa.
+aaa./aa.// aaa./aa.
+aaa./aa/aa aaa./aa/aa
+aaa./aa/a. aaa./aa/a.
+aaa./aa/a/ aaa./aa/a
+aaa./aa/.a aaa./aa/.a
+aaa./aa/.. aaa.
+aaa./aa/./ aaa./aa
+aaa./aa//a aaa./aa/a
+aaa./aa//. aaa./aa
+aaa./aa/// aaa./aa
+aaa./a.aaa aaa./a.aaa
+aaa./a.aa. aaa./a.aa.
+aaa./a.aa/ aaa./a.aa
+aaa./a.a.a aaa./a.a.a
+aaa./a.a.. aaa./a.a..
+aaa./a.a./ aaa./a.a.
+aaa./a.a/a aaa./a.a/a
+aaa./a.a/. aaa./a.a
+aaa./a.a// aaa./a.a
+aaa./a..aa aaa./a..aa
+aaa./a..a. aaa./a..a.
+aaa./a..a/ aaa./a..a
+aaa./a...a aaa./a...a
+aaa./a.... aaa./a....
+aaa./a.../ aaa./a...
+aaa./a../a aaa./a../a
+aaa./a../. aaa./a..
+aaa./a..// aaa./a..
+aaa./a./aa aaa./a./aa
+aaa./a./a. aaa./a./a.
+aaa./a./a/ aaa./a./a
+aaa./a./.a aaa./a./.a
+aaa./a./.. aaa.
+aaa./a././ aaa./a.
+aaa./a.//a aaa./a./a
+aaa./a.//. aaa./a.
+aaa./a./// aaa./a.
+aaa./a/aaa aaa./a/aaa
+aaa./a/aa. aaa./a/aa.
+aaa./a/aa/ aaa./a/aa
+aaa./a/a.a aaa./a/a.a
+aaa./a/a.. aaa./a/a..
+aaa./a/a./ aaa./a/a.
+aaa./a/a/a aaa./a/a/a
+aaa./a/a/. aaa./a/a
+aaa./a/a// aaa./a/a
+aaa./a/.aa aaa./a/.aa
+aaa./a/.a. aaa./a/.a.
+aaa./a/.a/ aaa./a/.a
+aaa./a/..a aaa./a/..a
+aaa./a/... aaa./a/...
+aaa./a/../ aaa.
+aaa./a/./a aaa./a/a
+aaa./a/./. aaa./a
+aaa./a/.// aaa./a
+aaa./a//aa aaa./a/aa
+aaa./a//a. aaa./a/a.
+aaa./a//a/ aaa./a/a
+aaa./a//.a aaa./a/.a
+aaa./a//.. aaa.
+aaa./a//./ aaa./a
+aaa./a///a aaa./a/a
+aaa./a///. aaa./a
+aaa./a//// aaa./a
+aaa./.aaaa aaa./.aaaa
+aaa./.aaa. aaa./.aaa.
+aaa./.aaa/ aaa./.aaa
+aaa./.aa.a aaa./.aa.a
+aaa./.aa.. aaa./.aa..
+aaa./.aa./ aaa./.aa.
+aaa./.aa/a aaa./.aa/a
+aaa./.aa/. aaa./.aa
+aaa./.aa// aaa./.aa
+aaa./.a.aa aaa./.a.aa
+aaa./.a.a. aaa./.a.a.
+aaa./.a.a/ aaa./.a.a
+aaa./.a..a aaa./.a..a
+aaa./.a... aaa./.a...
+aaa./.a../ aaa./.a..
+aaa./.a./a aaa./.a./a
+aaa./.a./. aaa./.a.
+aaa./.a.// aaa./.a.
+aaa./.a/aa aaa./.a/aa
+aaa./.a/a. aaa./.a/a.
+aaa./.a/a/ aaa./.a/a
+aaa./.a/.a aaa./.a/.a
+aaa./.a/.. aaa.
+aaa./.a/./ aaa./.a
+aaa./.a//a aaa./.a/a
+aaa./.a//. aaa./.a
+aaa./.a/// aaa./.a
+aaa./..aaa aaa./..aaa
+aaa./..aa. aaa./..aa.
+aaa./..aa/ aaa./..aa
+aaa./..a.a aaa./..a.a
+aaa./..a.. aaa./..a..
+aaa./..a./ aaa./..a.
+aaa./..a/a aaa./..a/a
+aaa./..a/. aaa./..a
+aaa./..a// aaa./..a
+aaa./...aa aaa./...aa
+aaa./...a. aaa./...a.
+aaa./...a/ aaa./...a
+aaa./....a aaa./....a
+aaa./..... aaa./.....
+aaa./..../ aaa./....
+aaa./.../a aaa./.../a
+aaa./.../. aaa./...
+aaa./...// aaa./...
+aaa./../aa aa
+aaa./../a. a.
+aaa./../a/ a
+aaa./../.a .a
+aaa./../.. ..
+aaa./.././ .
+aaa./..//a a
+aaa./..//. .
+aaa./../// .
+aaa././aaa aaa./aaa
+aaa././aa. aaa./aa.
+aaa././aa/ aaa./aa
+aaa././a.a aaa./a.a
+aaa././a.. aaa./a..
+aaa././a./ aaa./a.
+aaa././a/a aaa./a/a
+aaa././a/. aaa./a
+aaa././a// aaa./a
+aaa././.aa aaa./.aa
+aaa././.a. aaa./.a.
+aaa././.a/ aaa./.a
+aaa././..a aaa./..a
+aaa././... aaa./...
+aaa././../ .
+aaa./././a aaa./a
+aaa./././. aaa.
+aaa././.// aaa.
+aaa././/aa aaa./aa
+aaa././/a. aaa./a.
+aaa././/a/ aaa./a
+aaa././/.a aaa./.a
+aaa././/.. .
+aaa././/./ aaa.
+aaa././//a aaa./a
+aaa././//. aaa.
+aaa././/// aaa.
+aaa.//aaaa aaa./aaaa
+aaa.//aaa. aaa./aaa.
+aaa.//aaa/ aaa./aaa
+aaa.//aa.a aaa./aa.a
+aaa.//aa.. aaa./aa..
+aaa.//aa./ aaa./aa.
+aaa.//aa/a aaa./aa/a
+aaa.//aa/. aaa./aa
+aaa.//aa// aaa./aa
+aaa.//a.aa aaa./a.aa
+aaa.//a.a. aaa./a.a.
+aaa.//a.a/ aaa./a.a
+aaa.//a..a aaa./a..a
+aaa.//a... aaa./a...
+aaa.//a../ aaa./a..
+aaa.//a./a aaa./a./a
+aaa.//a./. aaa./a.
+aaa.//a.// aaa./a.
+aaa.//a/aa aaa./a/aa
+aaa.//a/a. aaa./a/a.
+aaa.//a/a/ aaa./a/a
+aaa.//a/.a aaa./a/.a
+aaa.//a/.. aaa.
+aaa.//a/./ aaa./a
+aaa.//a//a aaa./a/a
+aaa.//a//. aaa./a
+aaa.//a/// aaa./a
+aaa.//.aaa aaa./.aaa
+aaa.//.aa. aaa./.aa.
+aaa.//.aa/ aaa./.aa
+aaa.//.a.a aaa./.a.a
+aaa.//.a.. aaa./.a..
+aaa.//.a./ aaa./.a.
+aaa.//.a/a aaa./.a/a
+aaa.//.a/. aaa./.a
+aaa.//.a// aaa./.a
+aaa.//..aa aaa./..aa
+aaa.//..a. aaa./..a.
+aaa.//..a/ aaa./..a
+aaa.//...a aaa./...a
+aaa.//.... aaa./....
+aaa.//.../ aaa./...
+aaa.//../a a
+aaa.//../. .
+aaa.//..// .
+aaa.//./aa aaa./aa
+aaa.//./a. aaa./a.
+aaa.//./a/ aaa./a
+aaa.//./.a aaa./.a
+aaa.//./.. .
+aaa.//././ aaa.
+aaa.//.//a aaa./a
+aaa.//.//. aaa.
+aaa.//./// aaa.
+aaa.///aaa aaa./aaa
+aaa.///aa. aaa./aa.
+aaa.///aa/ aaa./aa
+aaa.///a.a aaa./a.a
+aaa.///a.. aaa./a..
+aaa.///a./ aaa./a.
+aaa.///a/a aaa./a/a
+aaa.///a/. aaa./a
+aaa.///a// aaa./a
+aaa.///.aa aaa./.aa
+aaa.///.a. aaa./.a.
+aaa.///.a/ aaa./.a
+aaa.///..a aaa./..a
+aaa.///... aaa./...
+aaa.///../ .
+aaa.///./a aaa./a
+aaa.///./. aaa.
+aaa.///.// aaa.
+aaa.////aa aaa./aa
+aaa.////a. aaa./a.
+aaa.////a/ aaa./a
+aaa.////.a aaa./.a
+aaa.////.. .
+aaa.////./ aaa.
+aaa./////a aaa./a
+aaa./////. aaa.
+aaa.////// aaa.
+aaa/aaaaaa aaa/aaaaaa
+aaa/aaaaa. aaa/aaaaa.
+aaa/aaaaa/ aaa/aaaaa
+aaa/aaaa.a aaa/aaaa.a
+aaa/aaaa.. aaa/aaaa..
+aaa/aaaa./ aaa/aaaa.
+aaa/aaaa/a aaa/aaaa/a
+aaa/aaaa/. aaa/aaaa
+aaa/aaaa// aaa/aaaa
+aaa/aaa.aa aaa/aaa.aa
+aaa/aaa.a. aaa/aaa.a.
+aaa/aaa.a/ aaa/aaa.a
+aaa/aaa..a aaa/aaa..a
+aaa/aaa... aaa/aaa...
+aaa/aaa../ aaa/aaa..
+aaa/aaa./a aaa/aaa./a
+aaa/aaa./. aaa/aaa.
+aaa/aaa.// aaa/aaa.
+aaa/aaa/aa aaa/aaa/aa
+aaa/aaa/a. aaa/aaa/a.
+aaa/aaa/a/ aaa/aaa/a
+aaa/aaa/.a aaa/aaa/.a
+aaa/aaa/.. aaa
+aaa/aaa/./ aaa/aaa
+aaa/aaa//a aaa/aaa/a
+aaa/aaa//. aaa/aaa
+aaa/aaa/// aaa/aaa
+aaa/aa.aaa aaa/aa.aaa
+aaa/aa.aa. aaa/aa.aa.
+aaa/aa.aa/ aaa/aa.aa
+aaa/aa.a.a aaa/aa.a.a
+aaa/aa.a.. aaa/aa.a..
+aaa/aa.a./ aaa/aa.a.
+aaa/aa.a/a aaa/aa.a/a
+aaa/aa.a/. aaa/aa.a
+aaa/aa.a// aaa/aa.a
+aaa/aa..aa aaa/aa..aa
+aaa/aa..a. aaa/aa..a.
+aaa/aa..a/ aaa/aa..a
+aaa/aa...a aaa/aa...a
+aaa/aa.... aaa/aa....
+aaa/aa.../ aaa/aa...
+aaa/aa../a aaa/aa../a
+aaa/aa../. aaa/aa..
+aaa/aa..// aaa/aa..
+aaa/aa./aa aaa/aa./aa
+aaa/aa./a. aaa/aa./a.
+aaa/aa./a/ aaa/aa./a
+aaa/aa./.a aaa/aa./.a
+aaa/aa./.. aaa
+aaa/aa././ aaa/aa.
+aaa/aa.//a aaa/aa./a
+aaa/aa.//. aaa/aa.
+aaa/aa./// aaa/aa.
+aaa/aa/aaa aaa/aa/aaa
+aaa/aa/aa. aaa/aa/aa.
+aaa/aa/aa/ aaa/aa/aa
+aaa/aa/a.a aaa/aa/a.a
+aaa/aa/a.. aaa/aa/a..
+aaa/aa/a./ aaa/aa/a.
+aaa/aa/a/a aaa/aa/a/a
+aaa/aa/a/. aaa/aa/a
+aaa/aa/a// aaa/aa/a
+aaa/aa/.aa aaa/aa/.aa
+aaa/aa/.a. aaa/aa/.a.
+aaa/aa/.a/ aaa/aa/.a
+aaa/aa/..a aaa/aa/..a
+aaa/aa/... aaa/aa/...
+aaa/aa/../ aaa
+aaa/aa/./a aaa/aa/a
+aaa/aa/./. aaa/aa
+aaa/aa/.// aaa/aa
+aaa/aa//aa aaa/aa/aa
+aaa/aa//a. aaa/aa/a.
+aaa/aa//a/ aaa/aa/a
+aaa/aa//.a aaa/aa/.a
+aaa/aa//.. aaa
+aaa/aa//./ aaa/aa
+aaa/aa///a aaa/aa/a
+aaa/aa///. aaa/aa
+aaa/aa//// aaa/aa
+aaa/a.aaaa aaa/a.aaaa
+aaa/a.aaa. aaa/a.aaa.
+aaa/a.aaa/ aaa/a.aaa
+aaa/a.aa.a aaa/a.aa.a
+aaa/a.aa.. aaa/a.aa..
+aaa/a.aa./ aaa/a.aa.
+aaa/a.aa/a aaa/a.aa/a
+aaa/a.aa/. aaa/a.aa
+aaa/a.aa// aaa/a.aa
+aaa/a.a.aa aaa/a.a.aa
+aaa/a.a.a. aaa/a.a.a.
+aaa/a.a.a/ aaa/a.a.a
+aaa/a.a..a aaa/a.a..a
+aaa/a.a... aaa/a.a...
+aaa/a.a../ aaa/a.a..
+aaa/a.a./a aaa/a.a./a
+aaa/a.a./. aaa/a.a.
+aaa/a.a.// aaa/a.a.
+aaa/a.a/aa aaa/a.a/aa
+aaa/a.a/a. aaa/a.a/a.
+aaa/a.a/a/ aaa/a.a/a
+aaa/a.a/.a aaa/a.a/.a
+aaa/a.a/.. aaa
+aaa/a.a/./ aaa/a.a
+aaa/a.a//a aaa/a.a/a
+aaa/a.a//. aaa/a.a
+aaa/a.a/// aaa/a.a
+aaa/a..aaa aaa/a..aaa
+aaa/a..aa. aaa/a..aa.
+aaa/a..aa/ aaa/a..aa
+aaa/a..a.a aaa/a..a.a
+aaa/a..a.. aaa/a..a..
+aaa/a..a./ aaa/a..a.
+aaa/a..a/a aaa/a..a/a
+aaa/a..a/. aaa/a..a
+aaa/a..a// aaa/a..a
+aaa/a...aa aaa/a...aa
+aaa/a...a. aaa/a...a.
+aaa/a...a/ aaa/a...a
+aaa/a....a aaa/a....a
+aaa/a..... aaa/a.....
+aaa/a..../ aaa/a....
+aaa/a.../a aaa/a.../a
+aaa/a.../. aaa/a...
+aaa/a...// aaa/a...
+aaa/a../aa aaa/a../aa
+aaa/a../a. aaa/a../a.
+aaa/a../a/ aaa/a../a
+aaa/a../.a aaa/a../.a
+aaa/a../.. aaa
+aaa/a.././ aaa/a..
+aaa/a..//a aaa/a../a
+aaa/a..//. aaa/a..
+aaa/a../// aaa/a..
+aaa/a./aaa aaa/a./aaa
+aaa/a./aa. aaa/a./aa.
+aaa/a./aa/ aaa/a./aa
+aaa/a./a.a aaa/a./a.a
+aaa/a./a.. aaa/a./a..
+aaa/a./a./ aaa/a./a.
+aaa/a./a/a aaa/a./a/a
+aaa/a./a/. aaa/a./a
+aaa/a./a// aaa/a./a
+aaa/a./.aa aaa/a./.aa
+aaa/a./.a. aaa/a./.a.
+aaa/a./.a/ aaa/a./.a
+aaa/a./..a aaa/a./..a
+aaa/a./... aaa/a./...
+aaa/a./../ aaa
+aaa/a././a aaa/a./a
+aaa/a././. aaa/a.
+aaa/a./.// aaa/a.
+aaa/a.//aa aaa/a./aa
+aaa/a.//a. aaa/a./a.
+aaa/a.//a/ aaa/a./a
+aaa/a.//.a aaa/a./.a
+aaa/a.//.. aaa
+aaa/a.//./ aaa/a.
+aaa/a.///a aaa/a./a
+aaa/a.///. aaa/a.
+aaa/a.//// aaa/a.
+aaa/a/aaaa aaa/a/aaaa
+aaa/a/aaa. aaa/a/aaa.
+aaa/a/aaa/ aaa/a/aaa
+aaa/a/aa.a aaa/a/aa.a
+aaa/a/aa.. aaa/a/aa..
+aaa/a/aa./ aaa/a/aa.
+aaa/a/aa/a aaa/a/aa/a
+aaa/a/aa/. aaa/a/aa
+aaa/a/aa// aaa/a/aa
+aaa/a/a.aa aaa/a/a.aa
+aaa/a/a.a. aaa/a/a.a.
+aaa/a/a.a/ aaa/a/a.a
+aaa/a/a..a aaa/a/a..a
+aaa/a/a... aaa/a/a...
+aaa/a/a../ aaa/a/a..
+aaa/a/a./a aaa/a/a./a
+aaa/a/a./. aaa/a/a.
+aaa/a/a.// aaa/a/a.
+aaa/a/a/aa aaa/a/a/aa
+aaa/a/a/a. aaa/a/a/a.
+aaa/a/a/a/ aaa/a/a/a
+aaa/a/a/.a aaa/a/a/.a
+aaa/a/a/.. aaa/a
+aaa/a/a/./ aaa/a/a
+aaa/a/a//a aaa/a/a/a
+aaa/a/a//. aaa/a/a
+aaa/a/a/// aaa/a/a
+aaa/a/.aaa aaa/a/.aaa
+aaa/a/.aa. aaa/a/.aa.
+aaa/a/.aa/ aaa/a/.aa
+aaa/a/.a.a aaa/a/.a.a
+aaa/a/.a.. aaa/a/.a..
+aaa/a/.a./ aaa/a/.a.
+aaa/a/.a/a aaa/a/.a/a
+aaa/a/.a/. aaa/a/.a
+aaa/a/.a// aaa/a/.a
+aaa/a/..aa aaa/a/..aa
+aaa/a/..a. aaa/a/..a.
+aaa/a/..a/ aaa/a/..a
+aaa/a/...a aaa/a/...a
+aaa/a/.... aaa/a/....
+aaa/a/.../ aaa/a/...
+aaa/a/../a aaa/a
+aaa/a/../. aaa
+aaa/a/..// aaa
+aaa/a/./aa aaa/a/aa
+aaa/a/./a. aaa/a/a.
+aaa/a/./a/ aaa/a/a
+aaa/a/./.a aaa/a/.a
+aaa/a/./.. aaa
+aaa/a/././ aaa/a
+aaa/a/.//a aaa/a/a
+aaa/a/.//. aaa/a
+aaa/a/./// aaa/a
+aaa/a//aaa aaa/a/aaa
+aaa/a//aa. aaa/a/aa.
+aaa/a//aa/ aaa/a/aa
+aaa/a//a.a aaa/a/a.a
+aaa/a//a.. aaa/a/a..
+aaa/a//a./ aaa/a/a.
+aaa/a//a/a aaa/a/a/a
+aaa/a//a/. aaa/a/a
+aaa/a//a// aaa/a/a
+aaa/a//.aa aaa/a/.aa
+aaa/a//.a. aaa/a/.a.
+aaa/a//.a/ aaa/a/.a
+aaa/a//..a aaa/a/..a
+aaa/a//... aaa/a/...
+aaa/a//../ aaa
+aaa/a//./a aaa/a/a
+aaa/a//./. aaa/a
+aaa/a//.// aaa/a
+aaa/a///aa aaa/a/aa
+aaa/a///a. aaa/a/a.
+aaa/a///a/ aaa/a/a
+aaa/a///.a aaa/a/.a
+aaa/a///.. aaa
+aaa/a///./ aaa/a
+aaa/a////a aaa/a/a
+aaa/a////. aaa/a
+aaa/a///// aaa/a
+aaa/.aaaaa aaa/.aaaaa
+aaa/.aaaa. aaa/.aaaa.
+aaa/.aaaa/ aaa/.aaaa
+aaa/.aaa.a aaa/.aaa.a
+aaa/.aaa.. aaa/.aaa..
+aaa/.aaa./ aaa/.aaa.
+aaa/.aaa/a aaa/.aaa/a
+aaa/.aaa/. aaa/.aaa
+aaa/.aaa// aaa/.aaa
+aaa/.aa.aa aaa/.aa.aa
+aaa/.aa.a. aaa/.aa.a.
+aaa/.aa.a/ aaa/.aa.a
+aaa/.aa..a aaa/.aa..a
+aaa/.aa... aaa/.aa...
+aaa/.aa../ aaa/.aa..
+aaa/.aa./a aaa/.aa./a
+aaa/.aa./. aaa/.aa.
+aaa/.aa.// aaa/.aa.
+aaa/.aa/aa aaa/.aa/aa
+aaa/.aa/a. aaa/.aa/a.
+aaa/.aa/a/ aaa/.aa/a
+aaa/.aa/.a aaa/.aa/.a
+aaa/.aa/.. aaa
+aaa/.aa/./ aaa/.aa
+aaa/.aa//a aaa/.aa/a
+aaa/.aa//. aaa/.aa
+aaa/.aa/// aaa/.aa
+aaa/.a.aaa aaa/.a.aaa
+aaa/.a.aa. aaa/.a.aa.
+aaa/.a.aa/ aaa/.a.aa
+aaa/.a.a.a aaa/.a.a.a
+aaa/.a.a.. aaa/.a.a..
+aaa/.a.a./ aaa/.a.a.
+aaa/.a.a/a aaa/.a.a/a
+aaa/.a.a/. aaa/.a.a
+aaa/.a.a// aaa/.a.a
+aaa/.a..aa aaa/.a..aa
+aaa/.a..a. aaa/.a..a.
+aaa/.a..a/ aaa/.a..a
+aaa/.a...a aaa/.a...a
+aaa/.a.... aaa/.a....
+aaa/.a.../ aaa/.a...
+aaa/.a../a aaa/.a../a
+aaa/.a../. aaa/.a..
+aaa/.a..// aaa/.a..
+aaa/.a./aa aaa/.a./aa
+aaa/.a./a. aaa/.a./a.
+aaa/.a./a/ aaa/.a./a
+aaa/.a./.a aaa/.a./.a
+aaa/.a./.. aaa
+aaa/.a././ aaa/.a.
+aaa/.a.//a aaa/.a./a
+aaa/.a.//. aaa/.a.
+aaa/.a./// aaa/.a.
+aaa/.a/aaa aaa/.a/aaa
+aaa/.a/aa. aaa/.a/aa.
+aaa/.a/aa/ aaa/.a/aa
+aaa/.a/a.a aaa/.a/a.a
+aaa/.a/a.. aaa/.a/a..
+aaa/.a/a./ aaa/.a/a.
+aaa/.a/a/a aaa/.a/a/a
+aaa/.a/a/. aaa/.a/a
+aaa/.a/a// aaa/.a/a
+aaa/.a/.aa aaa/.a/.aa
+aaa/.a/.a. aaa/.a/.a.
+aaa/.a/.a/ aaa/.a/.a
+aaa/.a/..a aaa/.a/..a
+aaa/.a/... aaa/.a/...
+aaa/.a/../ aaa
+aaa/.a/./a aaa/.a/a
+aaa/.a/./. aaa/.a
+aaa/.a/.// aaa/.a
+aaa/.a//aa aaa/.a/aa
+aaa/.a//a. aaa/.a/a.
+aaa/.a//a/ aaa/.a/a
+aaa/.a//.a aaa/.a/.a
+aaa/.a//.. aaa
+aaa/.a//./ aaa/.a
+aaa/.a///a aaa/.a/a
+aaa/.a///. aaa/.a
+aaa/.a//// aaa/.a
+aaa/..aaaa aaa/..aaaa
+aaa/..aaa. aaa/..aaa.
+aaa/..aaa/ aaa/..aaa
+aaa/..aa.a aaa/..aa.a
+aaa/..aa.. aaa/..aa..
+aaa/..aa./ aaa/..aa.
+aaa/..aa/a aaa/..aa/a
+aaa/..aa/. aaa/..aa
+aaa/..aa// aaa/..aa
+aaa/..a.aa aaa/..a.aa
+aaa/..a.a. aaa/..a.a.
+aaa/..a.a/ aaa/..a.a
+aaa/..a..a aaa/..a..a
+aaa/..a... aaa/..a...
+aaa/..a../ aaa/..a..
+aaa/..a./a aaa/..a./a
+aaa/..a./. aaa/..a.
+aaa/..a.// aaa/..a.
+aaa/..a/aa aaa/..a/aa
+aaa/..a/a. aaa/..a/a.
+aaa/..a/a/ aaa/..a/a
+aaa/..a/.a aaa/..a/.a
+aaa/..a/.. aaa
+aaa/..a/./ aaa/..a
+aaa/..a//a aaa/..a/a
+aaa/..a//. aaa/..a
+aaa/..a/// aaa/..a
+aaa/...aaa aaa/...aaa
+aaa/...aa. aaa/...aa.
+aaa/...aa/ aaa/...aa
+aaa/...a.a aaa/...a.a
+aaa/...a.. aaa/...a..
+aaa/...a./ aaa/...a.
+aaa/...a/a aaa/...a/a
+aaa/...a/. aaa/...a
+aaa/...a// aaa/...a
+aaa/....aa aaa/....aa
+aaa/....a. aaa/....a.
+aaa/....a/ aaa/....a
+aaa/.....a aaa/.....a
+aaa/...... aaa/......
+aaa/...../ aaa/.....
+aaa/..../a aaa/..../a
+aaa/..../. aaa/....
+aaa/....// aaa/....
+aaa/.../aa aaa/.../aa
+aaa/.../a. aaa/.../a.
+aaa/.../a/ aaa/.../a
+aaa/.../.a aaa/.../.a
+aaa/.../.. aaa
+aaa/..././ aaa/...
+aaa/...//a aaa/.../a
+aaa/...//. aaa/...
+aaa/.../// aaa/...
+aaa/../aaa aaa
+aaa/../aa. aa.
+aaa/../aa/ aa
+aaa/../a.a a.a
+aaa/../a.. a..
+aaa/../a./ a.
+aaa/../a/a a/a
+aaa/../a/. a
+aaa/../a// a
+aaa/../.aa .aa
+aaa/../.a. .a.
+aaa/../.a/ .a
+aaa/../..a ..a
+aaa/../... ...
+aaa/../../ ..
+aaa/.././a a
+aaa/.././. .
+aaa/../.// .
+aaa/..//aa aa
+aaa/..//a. a.
+aaa/..//a/ a
+aaa/..//.a .a
+aaa/..//.. ..
+aaa/..//./ .
+aaa/..///a a
+aaa/..///. .
+aaa/..//// .
+aaa/./aaaa aaa/aaaa
+aaa/./aaa. aaa/aaa.
+aaa/./aaa/ aaa/aaa
+aaa/./aa.a aaa/aa.a
+aaa/./aa.. aaa/aa..
+aaa/./aa./ aaa/aa.
+aaa/./aa/a aaa/aa/a
+aaa/./aa/. aaa/aa
+aaa/./aa// aaa/aa
+aaa/./a.aa aaa/a.aa
+aaa/./a.a. aaa/a.a.
+aaa/./a.a/ aaa/a.a
+aaa/./a..a aaa/a..a
+aaa/./a... aaa/a...
+aaa/./a../ aaa/a..
+aaa/./a./a aaa/a./a
+aaa/./a./. aaa/a.
+aaa/./a.// aaa/a.
+aaa/./a/aa aaa/a/aa
+aaa/./a/a. aaa/a/a.
+aaa/./a/a/ aaa/a/a
+aaa/./a/.a aaa/a/.a
+aaa/./a/.. aaa
+aaa/./a/./ aaa/a
+aaa/./a//a aaa/a/a
+aaa/./a//. aaa/a
+aaa/./a/// aaa/a
+aaa/./.aaa aaa/.aaa
+aaa/./.aa. aaa/.aa.
+aaa/./.aa/ aaa/.aa
+aaa/./.a.a aaa/.a.a
+aaa/./.a.. aaa/.a..
+aaa/./.a./ aaa/.a.
+aaa/./.a/a aaa/.a/a
+aaa/./.a/. aaa/.a
+aaa/./.a// aaa/.a
+aaa/./..aa aaa/..aa
+aaa/./..a. aaa/..a.
+aaa/./..a/ aaa/..a
+aaa/./...a aaa/...a
+aaa/./.... aaa/....
+aaa/./.../ aaa/...
+aaa/./../a a
+aaa/./../. .
+aaa/./..// .
+aaa/././aa aaa/aa
+aaa/././a. aaa/a.
+aaa/././a/ aaa/a
+aaa/././.a aaa/.a
+aaa/././.. .
+aaa/./././ aaa
+aaa/././/a aaa/a
+aaa/././/. aaa
+aaa/././// aaa
+aaa/.//aaa aaa/aaa
+aaa/.//aa. aaa/aa.
+aaa/.//aa/ aaa/aa
+aaa/.//a.a aaa/a.a
+aaa/.//a.. aaa/a..
+aaa/.//a./ aaa/a.
+aaa/.//a/a aaa/a/a
+aaa/.//a/. aaa/a
+aaa/.//a// aaa/a
+aaa/.//.aa aaa/.aa
+aaa/.//.a. aaa/.a.
+aaa/.//.a/ aaa/.a
+aaa/.//..a aaa/..a
+aaa/.//... aaa/...
+aaa/.//../ .
+aaa/.//./a aaa/a
+aaa/.//./. aaa
+aaa/.//.// aaa
+aaa/.///aa aaa/aa
+aaa/.///a. aaa/a.
+aaa/.///a/ aaa/a
+aaa/.///.a aaa/.a
+aaa/.///.. .
+aaa/.///./ aaa
+aaa/.////a aaa/a
+aaa/.////. aaa
+aaa/.///// aaa
+aaa//aaaaa aaa/aaaaa
+aaa//aaaa. aaa/aaaa.
+aaa//aaaa/ aaa/aaaa
+aaa//aaa.a aaa/aaa.a
+aaa//aaa.. aaa/aaa..
+aaa//aaa./ aaa/aaa.
+aaa//aaa/a aaa/aaa/a
+aaa//aaa/. aaa/aaa
+aaa//aaa// aaa/aaa
+aaa//aa.aa aaa/aa.aa
+aaa//aa.a. aaa/aa.a.
+aaa//aa.a/ aaa/aa.a
+aaa//aa..a aaa/aa..a
+aaa//aa... aaa/aa...
+aaa//aa../ aaa/aa..
+aaa//aa./a aaa/aa./a
+aaa//aa./. aaa/aa.
+aaa//aa.// aaa/aa.
+aaa//aa/aa aaa/aa/aa
+aaa//aa/a. aaa/aa/a.
+aaa//aa/a/ aaa/aa/a
+aaa//aa/.a aaa/aa/.a
+aaa//aa/.. aaa
+aaa//aa/./ aaa/aa
+aaa//aa//a aaa/aa/a
+aaa//aa//. aaa/aa
+aaa//aa/// aaa/aa
+aaa//a.aaa aaa/a.aaa
+aaa//a.aa. aaa/a.aa.
+aaa//a.aa/ aaa/a.aa
+aaa//a.a.a aaa/a.a.a
+aaa//a.a.. aaa/a.a..
+aaa//a.a./ aaa/a.a.
+aaa//a.a/a aaa/a.a/a
+aaa//a.a/. aaa/a.a
+aaa//a.a// aaa/a.a
+aaa//a..aa aaa/a..aa
+aaa//a..a. aaa/a..a.
+aaa//a..a/ aaa/a..a
+aaa//a...a aaa/a...a
+aaa//a.... aaa/a....
+aaa//a.../ aaa/a...
+aaa//a../a aaa/a../a
+aaa//a../. aaa/a..
+aaa//a..// aaa/a..
+aaa//a./aa aaa/a./aa
+aaa//a./a. aaa/a./a.
+aaa//a./a/ aaa/a./a
+aaa//a./.a aaa/a./.a
+aaa//a./.. aaa
+aaa//a././ aaa/a.
+aaa//a.//a aaa/a./a
+aaa//a.//. aaa/a.
+aaa//a./// aaa/a.
+aaa//a/aaa aaa/a/aaa
+aaa//a/aa. aaa/a/aa.
+aaa//a/aa/ aaa/a/aa
+aaa//a/a.a aaa/a/a.a
+aaa//a/a.. aaa/a/a..
+aaa//a/a./ aaa/a/a.
+aaa//a/a/a aaa/a/a/a
+aaa//a/a/. aaa/a/a
+aaa//a/a// aaa/a/a
+aaa//a/.aa aaa/a/.aa
+aaa//a/.a. aaa/a/.a.
+aaa//a/.a/ aaa/a/.a
+aaa//a/..a aaa/a/..a
+aaa//a/... aaa/a/...
+aaa//a/../ aaa
+aaa//a/./a aaa/a/a
+aaa//a/./. aaa/a
+aaa//a/.// aaa/a
+aaa//a//aa aaa/a/aa
+aaa//a//a. aaa/a/a.
+aaa//a//a/ aaa/a/a
+aaa//a//.a aaa/a/.a
+aaa//a//.. aaa
+aaa//a//./ aaa/a
+aaa//a///a aaa/a/a
+aaa//a///. aaa/a
+aaa//a//// aaa/a
+aaa//.aaaa aaa/.aaaa
+aaa//.aaa. aaa/.aaa.
+aaa//.aaa/ aaa/.aaa
+aaa//.aa.a aaa/.aa.a
+aaa//.aa.. aaa/.aa..
+aaa//.aa./ aaa/.aa.
+aaa//.aa/a aaa/.aa/a
+aaa//.aa/. aaa/.aa
+aaa//.aa// aaa/.aa
+aaa//.a.aa aaa/.a.aa
+aaa//.a.a. aaa/.a.a.
+aaa//.a.a/ aaa/.a.a
+aaa//.a..a aaa/.a..a
+aaa//.a... aaa/.a...
+aaa//.a../ aaa/.a..
+aaa//.a./a aaa/.a./a
+aaa//.a./. aaa/.a.
+aaa//.a.// aaa/.a.
+aaa//.a/aa aaa/.a/aa
+aaa//.a/a. aaa/.a/a.
+aaa//.a/a/ aaa/.a/a
+aaa//.a/.a aaa/.a/.a
+aaa//.a/.. aaa
+aaa//.a/./ aaa/.a
+aaa//.a//a aaa/.a/a
+aaa//.a//. aaa/.a
+aaa//.a/// aaa/.a
+aaa//..aaa aaa/..aaa
+aaa//..aa. aaa/..aa.
+aaa//..aa/ aaa/..aa
+aaa//..a.a aaa/..a.a
+aaa//..a.. aaa/..a..
+aaa//..a./ aaa/..a.
+aaa//..a/a aaa/..a/a
+aaa//..a/. aaa/..a
+aaa//..a// aaa/..a
+aaa//...aa aaa/...aa
+aaa//...a. aaa/...a.
+aaa//...a/ aaa/...a
+aaa//....a aaa/....a
+aaa//..... aaa/.....
+aaa//..../ aaa/....
+aaa//.../a aaa/.../a
+aaa//.../. aaa/...
+aaa//...// aaa/...
+aaa//../aa aa
+aaa//../a. a.
+aaa//../a/ a
+aaa//../.a .a
+aaa//../.. ..
+aaa//.././ .
+aaa//..//a a
+aaa//..//. .
+aaa//../// .
+aaa//./aaa aaa/aaa
+aaa//./aa. aaa/aa.
+aaa//./aa/ aaa/aa
+aaa//./a.a aaa/a.a
+aaa//./a.. aaa/a..
+aaa//./a./ aaa/a.
+aaa//./a/a aaa/a/a
+aaa//./a/. aaa/a
+aaa//./a// aaa/a
+aaa//./.aa aaa/.aa
+aaa//./.a. aaa/.a.
+aaa//./.a/ aaa/.a
+aaa//./..a aaa/..a
+aaa//./... aaa/...
+aaa//./../ .
+aaa//././a aaa/a
+aaa//././. aaa
+aaa//./.// aaa
+aaa//.//aa aaa/aa
+aaa//.//a. aaa/a.
+aaa//.//a/ aaa/a
+aaa//.//.a aaa/.a
+aaa//.//.. .
+aaa//.//./ aaa
+aaa//.///a aaa/a
+aaa//.///. aaa
+aaa//.//// aaa
+aaa///aaaa aaa/aaaa
+aaa///aaa. aaa/aaa.
+aaa///aaa/ aaa/aaa
+aaa///aa.a aaa/aa.a
+aaa///aa.. aaa/aa..
+aaa///aa./ aaa/aa.
+aaa///aa/a aaa/aa/a
+aaa///aa/. aaa/aa
+aaa///aa// aaa/aa
+aaa///a.aa aaa/a.aa
+aaa///a.a. aaa/a.a.
+aaa///a.a/ aaa/a.a
+aaa///a..a aaa/a..a
+aaa///a... aaa/a...
+aaa///a../ aaa/a..
+aaa///a./a aaa/a./a
+aaa///a./. aaa/a.
+aaa///a.// aaa/a.
+aaa///a/aa aaa/a/aa
+aaa///a/a. aaa/a/a.
+aaa///a/a/ aaa/a/a
+aaa///a/.a aaa/a/.a
+aaa///a/.. aaa
+aaa///a/./ aaa/a
+aaa///a//a aaa/a/a
+aaa///a//. aaa/a
+aaa///a/// aaa/a
+aaa///.aaa aaa/.aaa
+aaa///.aa. aaa/.aa.
+aaa///.aa/ aaa/.aa
+aaa///.a.a aaa/.a.a
+aaa///.a.. aaa/.a..
+aaa///.a./ aaa/.a.
+aaa///.a/a aaa/.a/a
+aaa///.a/. aaa/.a
+aaa///.a// aaa/.a
+aaa///..aa aaa/..aa
+aaa///..a. aaa/..a.
+aaa///..a/ aaa/..a
+aaa///...a aaa/...a
+aaa///.... aaa/....
+aaa///.../ aaa/...
+aaa///../a a
+aaa///../. .
+aaa///..// .
+aaa///./aa aaa/aa
+aaa///./a. aaa/a.
+aaa///./a/ aaa/a
+aaa///./.a aaa/.a
+aaa///./.. .
+aaa///././ aaa
+aaa///.//a aaa/a
+aaa///.//. aaa
+aaa///./// aaa
+aaa////aaa aaa/aaa
+aaa////aa. aaa/aa.
+aaa////aa/ aaa/aa
+aaa////a.a aaa/a.a
+aaa////a.. aaa/a..
+aaa////a./ aaa/a.
+aaa////a/a aaa/a/a
+aaa////a/. aaa/a
+aaa////a// aaa/a
+aaa////.aa aaa/.aa
+aaa////.a. aaa/.a.
+aaa////.a/ aaa/.a
+aaa////..a aaa/..a
+aaa////... aaa/...
+aaa////../ .
+aaa////./a aaa/a
+aaa////./. aaa
+aaa////.// aaa
+aaa/////aa aaa/aa
+aaa/////a. aaa/a.
+aaa/////a/ aaa/a
+aaa/////.a aaa/.a
+aaa/////.. .
+aaa/////./ aaa
+aaa//////a aaa/a
+aaa//////. aaa
+aaa/////// aaa
+aa.aaaaaaa aa.aaaaaaa
+aa.aaaaaa. aa.aaaaaa.
+aa.aaaaaa/ aa.aaaaaa
+aa.aaaaa.a aa.aaaaa.a
+aa.aaaaa.. aa.aaaaa..
+aa.aaaaa./ aa.aaaaa.
+aa.aaaaa/a aa.aaaaa/a
+aa.aaaaa/. aa.aaaaa
+aa.aaaaa// aa.aaaaa
+aa.aaaa.aa aa.aaaa.aa
+aa.aaaa.a. aa.aaaa.a.
+aa.aaaa.a/ aa.aaaa.a
+aa.aaaa..a aa.aaaa..a
+aa.aaaa... aa.aaaa...
+aa.aaaa../ aa.aaaa..
+aa.aaaa./a aa.aaaa./a
+aa.aaaa./. aa.aaaa.
+aa.aaaa.// aa.aaaa.
+aa.aaaa/aa aa.aaaa/aa
+aa.aaaa/a. aa.aaaa/a.
+aa.aaaa/a/ aa.aaaa/a
+aa.aaaa/.a aa.aaaa/.a
+aa.aaaa/.. .
+aa.aaaa/./ aa.aaaa
+aa.aaaa//a aa.aaaa/a
+aa.aaaa//. aa.aaaa
+aa.aaaa/// aa.aaaa
+aa.aaa.aaa aa.aaa.aaa
+aa.aaa.aa. aa.aaa.aa.
+aa.aaa.aa/ aa.aaa.aa
+aa.aaa.a.a aa.aaa.a.a
+aa.aaa.a.. aa.aaa.a..
+aa.aaa.a./ aa.aaa.a.
+aa.aaa.a/a aa.aaa.a/a
+aa.aaa.a/. aa.aaa.a
+aa.aaa.a// aa.aaa.a
+aa.aaa..aa aa.aaa..aa
+aa.aaa..a. aa.aaa..a.
+aa.aaa..a/ aa.aaa..a
+aa.aaa...a aa.aaa...a
+aa.aaa.... aa.aaa....
+aa.aaa.../ aa.aaa...
+aa.aaa../a aa.aaa../a
+aa.aaa../. aa.aaa..
+aa.aaa..// aa.aaa..
+aa.aaa./aa aa.aaa./aa
+aa.aaa./a. aa.aaa./a.
+aa.aaa./a/ aa.aaa./a
+aa.aaa./.a aa.aaa./.a
+aa.aaa./.. .
+aa.aaa././ aa.aaa.
+aa.aaa.//a aa.aaa./a
+aa.aaa.//. aa.aaa.
+aa.aaa./// aa.aaa.
+aa.aaa/aaa aa.aaa/aaa
+aa.aaa/aa. aa.aaa/aa.
+aa.aaa/aa/ aa.aaa/aa
+aa.aaa/a.a aa.aaa/a.a
+aa.aaa/a.. aa.aaa/a..
+aa.aaa/a./ aa.aaa/a.
+aa.aaa/a/a aa.aaa/a/a
+aa.aaa/a/. aa.aaa/a
+aa.aaa/a// aa.aaa/a
+aa.aaa/.aa aa.aaa/.aa
+aa.aaa/.a. aa.aaa/.a.
+aa.aaa/.a/ aa.aaa/.a
+aa.aaa/..a aa.aaa/..a
+aa.aaa/... aa.aaa/...
+aa.aaa/../ .
+aa.aaa/./a aa.aaa/a
+aa.aaa/./. aa.aaa
+aa.aaa/.// aa.aaa
+aa.aaa//aa aa.aaa/aa
+aa.aaa//a. aa.aaa/a.
+aa.aaa//a/ aa.aaa/a
+aa.aaa//.a aa.aaa/.a
+aa.aaa//.. .
+aa.aaa//./ aa.aaa
+aa.aaa///a aa.aaa/a
+aa.aaa///. aa.aaa
+aa.aaa//// aa.aaa
+aa.aa.aaaa aa.aa.aaaa
+aa.aa.aaa. aa.aa.aaa.
+aa.aa.aaa/ aa.aa.aaa
+aa.aa.aa.a aa.aa.aa.a
+aa.aa.aa.. aa.aa.aa..
+aa.aa.aa./ aa.aa.aa.
+aa.aa.aa/a aa.aa.aa/a
+aa.aa.aa/. aa.aa.aa
+aa.aa.aa// aa.aa.aa
+aa.aa.a.aa aa.aa.a.aa
+aa.aa.a.a. aa.aa.a.a.
+aa.aa.a.a/ aa.aa.a.a
+aa.aa.a..a aa.aa.a..a
+aa.aa.a... aa.aa.a...
+aa.aa.a../ aa.aa.a..
+aa.aa.a./a aa.aa.a./a
+aa.aa.a./. aa.aa.a.
+aa.aa.a.// aa.aa.a.
+aa.aa.a/aa aa.aa.a/aa
+aa.aa.a/a. aa.aa.a/a.
+aa.aa.a/a/ aa.aa.a/a
+aa.aa.a/.a aa.aa.a/.a
+aa.aa.a/.. .
+aa.aa.a/./ aa.aa.a
+aa.aa.a//a aa.aa.a/a
+aa.aa.a//. aa.aa.a
+aa.aa.a/// aa.aa.a
+aa.aa..aaa aa.aa..aaa
+aa.aa..aa. aa.aa..aa.
+aa.aa..aa/ aa.aa..aa
+aa.aa..a.a aa.aa..a.a
+aa.aa..a.. aa.aa..a..
+aa.aa..a./ aa.aa..a.
+aa.aa..a/a aa.aa..a/a
+aa.aa..a/. aa.aa..a
+aa.aa..a// aa.aa..a
+aa.aa...aa aa.aa...aa
+aa.aa...a. aa.aa...a.
+aa.aa...a/ aa.aa...a
+aa.aa....a aa.aa....a
+aa.aa..... aa.aa.....
+aa.aa..../ aa.aa....
+aa.aa.../a aa.aa.../a
+aa.aa.../. aa.aa...
+aa.aa...// aa.aa...
+aa.aa../aa aa.aa../aa
+aa.aa../a. aa.aa../a.
+aa.aa../a/ aa.aa../a
+aa.aa../.a aa.aa../.a
+aa.aa../.. .
+aa.aa.././ aa.aa..
+aa.aa..//a aa.aa../a
+aa.aa..//. aa.aa..
+aa.aa../// aa.aa..
+aa.aa./aaa aa.aa./aaa
+aa.aa./aa. aa.aa./aa.
+aa.aa./aa/ aa.aa./aa
+aa.aa./a.a aa.aa./a.a
+aa.aa./a.. aa.aa./a..
+aa.aa./a./ aa.aa./a.
+aa.aa./a/a aa.aa./a/a
+aa.aa./a/. aa.aa./a
+aa.aa./a// aa.aa./a
+aa.aa./.aa aa.aa./.aa
+aa.aa./.a. aa.aa./.a.
+aa.aa./.a/ aa.aa./.a
+aa.aa./..a aa.aa./..a
+aa.aa./... aa.aa./...
+aa.aa./../ .
+aa.aa././a aa.aa./a
+aa.aa././. aa.aa.
+aa.aa./.// aa.aa.
+aa.aa.//aa aa.aa./aa
+aa.aa.//a. aa.aa./a.
+aa.aa.//a/ aa.aa./a
+aa.aa.//.a aa.aa./.a
+aa.aa.//.. .
+aa.aa.//./ aa.aa.
+aa.aa.///a aa.aa./a
+aa.aa.///. aa.aa.
+aa.aa.//// aa.aa.
+aa.aa/aaaa aa.aa/aaaa
+aa.aa/aaa. aa.aa/aaa.
+aa.aa/aaa/ aa.aa/aaa
+aa.aa/aa.a aa.aa/aa.a
+aa.aa/aa.. aa.aa/aa..
+aa.aa/aa./ aa.aa/aa.
+aa.aa/aa/a aa.aa/aa/a
+aa.aa/aa/. aa.aa/aa
+aa.aa/aa// aa.aa/aa
+aa.aa/a.aa aa.aa/a.aa
+aa.aa/a.a. aa.aa/a.a.
+aa.aa/a.a/ aa.aa/a.a
+aa.aa/a..a aa.aa/a..a
+aa.aa/a... aa.aa/a...
+aa.aa/a../ aa.aa/a..
+aa.aa/a./a aa.aa/a./a
+aa.aa/a./. aa.aa/a.
+aa.aa/a.// aa.aa/a.
+aa.aa/a/aa aa.aa/a/aa
+aa.aa/a/a. aa.aa/a/a.
+aa.aa/a/a/ aa.aa/a/a
+aa.aa/a/.a aa.aa/a/.a
+aa.aa/a/.. aa.aa
+aa.aa/a/./ aa.aa/a
+aa.aa/a//a aa.aa/a/a
+aa.aa/a//. aa.aa/a
+aa.aa/a/// aa.aa/a
+aa.aa/.aaa aa.aa/.aaa
+aa.aa/.aa. aa.aa/.aa.
+aa.aa/.aa/ aa.aa/.aa
+aa.aa/.a.a aa.aa/.a.a
+aa.aa/.a.. aa.aa/.a..
+aa.aa/.a./ aa.aa/.a.
+aa.aa/.a/a aa.aa/.a/a
+aa.aa/.a/. aa.aa/.a
+aa.aa/.a// aa.aa/.a
+aa.aa/..aa aa.aa/..aa
+aa.aa/..a. aa.aa/..a.
+aa.aa/..a/ aa.aa/..a
+aa.aa/...a aa.aa/...a
+aa.aa/.... aa.aa/....
+aa.aa/.../ aa.aa/...
+aa.aa/../a a
+aa.aa/../. .
+aa.aa/..// .
+aa.aa/./aa aa.aa/aa
+aa.aa/./a. aa.aa/a.
+aa.aa/./a/ aa.aa/a
+aa.aa/./.a aa.aa/.a
+aa.aa/./.. .
+aa.aa/././ aa.aa
+aa.aa/.//a aa.aa/a
+aa.aa/.//. aa.aa
+aa.aa/./// aa.aa
+aa.aa//aaa aa.aa/aaa
+aa.aa//aa. aa.aa/aa.
+aa.aa//aa/ aa.aa/aa
+aa.aa//a.a aa.aa/a.a
+aa.aa//a.. aa.aa/a..
+aa.aa//a./ aa.aa/a.
+aa.aa//a/a aa.aa/a/a
+aa.aa//a/. aa.aa/a
+aa.aa//a// aa.aa/a
+aa.aa//.aa aa.aa/.aa
+aa.aa//.a. aa.aa/.a.
+aa.aa//.a/ aa.aa/.a
+aa.aa//..a aa.aa/..a
+aa.aa//... aa.aa/...
+aa.aa//../ .
+aa.aa//./a aa.aa/a
+aa.aa//./. aa.aa
+aa.aa//.// aa.aa
+aa.aa///aa aa.aa/aa
+aa.aa///a. aa.aa/a.
+aa.aa///a/ aa.aa/a
+aa.aa///.a aa.aa/.a
+aa.aa///.. .
+aa.aa///./ aa.aa
+aa.aa////a aa.aa/a
+aa.aa////. aa.aa
+aa.aa///// aa.aa
+aa.a.aaaaa aa.a.aaaaa
+aa.a.aaaa. aa.a.aaaa.
+aa.a.aaaa/ aa.a.aaaa
+aa.a.aaa.a aa.a.aaa.a
+aa.a.aaa.. aa.a.aaa..
+aa.a.aaa./ aa.a.aaa.
+aa.a.aaa/a aa.a.aaa/a
+aa.a.aaa/. aa.a.aaa
+aa.a.aaa// aa.a.aaa
+aa.a.aa.aa aa.a.aa.aa
+aa.a.aa.a. aa.a.aa.a.
+aa.a.aa.a/ aa.a.aa.a
+aa.a.aa..a aa.a.aa..a
+aa.a.aa... aa.a.aa...
+aa.a.aa../ aa.a.aa..
+aa.a.aa./a aa.a.aa./a
+aa.a.aa./. aa.a.aa.
+aa.a.aa.// aa.a.aa.
+aa.a.aa/aa aa.a.aa/aa
+aa.a.aa/a. aa.a.aa/a.
+aa.a.aa/a/ aa.a.aa/a
+aa.a.aa/.a aa.a.aa/.a
+aa.a.aa/.. .
+aa.a.aa/./ aa.a.aa
+aa.a.aa//a aa.a.aa/a
+aa.a.aa//. aa.a.aa
+aa.a.aa/// aa.a.aa
+aa.a.a.aaa aa.a.a.aaa
+aa.a.a.aa. aa.a.a.aa.
+aa.a.a.aa/ aa.a.a.aa
+aa.a.a.a.a aa.a.a.a.a
+aa.a.a.a.. aa.a.a.a..
+aa.a.a.a./ aa.a.a.a.
+aa.a.a.a/a aa.a.a.a/a
+aa.a.a.a/. aa.a.a.a
+aa.a.a.a// aa.a.a.a
+aa.a.a..aa aa.a.a..aa
+aa.a.a..a. aa.a.a..a.
+aa.a.a..a/ aa.a.a..a
+aa.a.a...a aa.a.a...a
+aa.a.a.... aa.a.a....
+aa.a.a.../ aa.a.a...
+aa.a.a../a aa.a.a../a
+aa.a.a../. aa.a.a..
+aa.a.a..// aa.a.a..
+aa.a.a./aa aa.a.a./aa
+aa.a.a./a. aa.a.a./a.
+aa.a.a./a/ aa.a.a./a
+aa.a.a./.a aa.a.a./.a
+aa.a.a./.. .
+aa.a.a././ aa.a.a.
+aa.a.a.//a aa.a.a./a
+aa.a.a.//. aa.a.a.
+aa.a.a./// aa.a.a.
+aa.a.a/aaa aa.a.a/aaa
+aa.a.a/aa. aa.a.a/aa.
+aa.a.a/aa/ aa.a.a/aa
+aa.a.a/a.a aa.a.a/a.a
+aa.a.a/a.. aa.a.a/a..
+aa.a.a/a./ aa.a.a/a.
+aa.a.a/a/a aa.a.a/a/a
+aa.a.a/a/. aa.a.a/a
+aa.a.a/a// aa.a.a/a
+aa.a.a/.aa aa.a.a/.aa
+aa.a.a/.a. aa.a.a/.a.
+aa.a.a/.a/ aa.a.a/.a
+aa.a.a/..a aa.a.a/..a
+aa.a.a/... aa.a.a/...
+aa.a.a/../ .
+aa.a.a/./a aa.a.a/a
+aa.a.a/./. aa.a.a
+aa.a.a/.// aa.a.a
+aa.a.a//aa aa.a.a/aa
+aa.a.a//a. aa.a.a/a.
+aa.a.a//a/ aa.a.a/a
+aa.a.a//.a aa.a.a/.a
+aa.a.a//.. .
+aa.a.a//./ aa.a.a
+aa.a.a///a aa.a.a/a
+aa.a.a///. aa.a.a
+aa.a.a//// aa.a.a
+aa.a..aaaa aa.a..aaaa
+aa.a..aaa. aa.a..aaa.
+aa.a..aaa/ aa.a..aaa
+aa.a..aa.a aa.a..aa.a
+aa.a..aa.. aa.a..aa..
+aa.a..aa./ aa.a..aa.
+aa.a..aa/a aa.a..aa/a
+aa.a..aa/. aa.a..aa
+aa.a..aa// aa.a..aa
+aa.a..a.aa aa.a..a.aa
+aa.a..a.a. aa.a..a.a.
+aa.a..a.a/ aa.a..a.a
+aa.a..a..a aa.a..a..a
+aa.a..a... aa.a..a...
+aa.a..a../ aa.a..a..
+aa.a..a./a aa.a..a./a
+aa.a..a./. aa.a..a.
+aa.a..a.// aa.a..a.
+aa.a..a/aa aa.a..a/aa
+aa.a..a/a. aa.a..a/a.
+aa.a..a/a/ aa.a..a/a
+aa.a..a/.a aa.a..a/.a
+aa.a..a/.. .
+aa.a..a/./ aa.a..a
+aa.a..a//a aa.a..a/a
+aa.a..a//. aa.a..a
+aa.a..a/// aa.a..a
+aa.a...aaa aa.a...aaa
+aa.a...aa. aa.a...aa.
+aa.a...aa/ aa.a...aa
+aa.a...a.a aa.a...a.a
+aa.a...a.. aa.a...a..
+aa.a...a./ aa.a...a.
+aa.a...a/a aa.a...a/a
+aa.a...a/. aa.a...a
+aa.a...a// aa.a...a
+aa.a....aa aa.a....aa
+aa.a....a. aa.a....a.
+aa.a....a/ aa.a....a
+aa.a.....a aa.a.....a
+aa.a...... aa.a......
+aa.a...../ aa.a.....
+aa.a..../a aa.a..../a
+aa.a..../. aa.a....
+aa.a....// aa.a....
+aa.a.../aa aa.a.../aa
+aa.a.../a. aa.a.../a.
+aa.a.../a/ aa.a.../a
+aa.a.../.a aa.a.../.a
+aa.a.../.. .
+aa.a..././ aa.a...
+aa.a...//a aa.a.../a
+aa.a...//. aa.a...
+aa.a.../// aa.a...
+aa.a../aaa aa.a../aaa
+aa.a../aa. aa.a../aa.
+aa.a../aa/ aa.a../aa
+aa.a../a.a aa.a../a.a
+aa.a../a.. aa.a../a..
+aa.a../a./ aa.a../a.
+aa.a../a/a aa.a../a/a
+aa.a../a/. aa.a../a
+aa.a../a// aa.a../a
+aa.a../.aa aa.a../.aa
+aa.a../.a. aa.a../.a.
+aa.a../.a/ aa.a../.a
+aa.a../..a aa.a../..a
+aa.a../... aa.a../...
+aa.a../../ .
+aa.a.././a aa.a../a
+aa.a.././. aa.a..
+aa.a../.// aa.a..
+aa.a..//aa aa.a../aa
+aa.a..//a. aa.a../a.
+aa.a..//a/ aa.a../a
+aa.a..//.a aa.a../.a
+aa.a..//.. .
+aa.a..//./ aa.a..
+aa.a..///a aa.a../a
+aa.a..///. aa.a..
+aa.a..//// aa.a..
+aa.a./aaaa aa.a./aaaa
+aa.a./aaa. aa.a./aaa.
+aa.a./aaa/ aa.a./aaa
+aa.a./aa.a aa.a./aa.a
+aa.a./aa.. aa.a./aa..
+aa.a./aa./ aa.a./aa.
+aa.a./aa/a aa.a./aa/a
+aa.a./aa/. aa.a./aa
+aa.a./aa// aa.a./aa
+aa.a./a.aa aa.a./a.aa
+aa.a./a.a. aa.a./a.a.
+aa.a./a.a/ aa.a./a.a
+aa.a./a..a aa.a./a..a
+aa.a./a... aa.a./a...
+aa.a./a../ aa.a./a..
+aa.a./a./a aa.a./a./a
+aa.a./a./. aa.a./a.
+aa.a./a.// aa.a./a.
+aa.a./a/aa aa.a./a/aa
+aa.a./a/a. aa.a./a/a.
+aa.a./a/a/ aa.a./a/a
+aa.a./a/.a aa.a./a/.a
+aa.a./a/.. aa.a.
+aa.a./a/./ aa.a./a
+aa.a./a//a aa.a./a/a
+aa.a./a//. aa.a./a
+aa.a./a/// aa.a./a
+aa.a./.aaa aa.a./.aaa
+aa.a./.aa. aa.a./.aa.
+aa.a./.aa/ aa.a./.aa
+aa.a./.a.a aa.a./.a.a
+aa.a./.a.. aa.a./.a..
+aa.a./.a./ aa.a./.a.
+aa.a./.a/a aa.a./.a/a
+aa.a./.a/. aa.a./.a
+aa.a./.a// aa.a./.a
+aa.a./..aa aa.a./..aa
+aa.a./..a. aa.a./..a.
+aa.a./..a/ aa.a./..a
+aa.a./...a aa.a./...a
+aa.a./.... aa.a./....
+aa.a./.../ aa.a./...
+aa.a./../a a
+aa.a./../. .
+aa.a./..// .
+aa.a././aa aa.a./aa
+aa.a././a. aa.a./a.
+aa.a././a/ aa.a./a
+aa.a././.a aa.a./.a
+aa.a././.. .
+aa.a./././ aa.a.
+aa.a././/a aa.a./a
+aa.a././/. aa.a.
+aa.a././// aa.a.
+aa.a.//aaa aa.a./aaa
+aa.a.//aa. aa.a./aa.
+aa.a.//aa/ aa.a./aa
+aa.a.//a.a aa.a./a.a
+aa.a.//a.. aa.a./a..
+aa.a.//a./ aa.a./a.
+aa.a.//a/a aa.a./a/a
+aa.a.//a/. aa.a./a
+aa.a.//a// aa.a./a
+aa.a.//.aa aa.a./.aa
+aa.a.//.a. aa.a./.a.
+aa.a.//.a/ aa.a./.a
+aa.a.//..a aa.a./..a
+aa.a.//... aa.a./...
+aa.a.//../ .
+aa.a.//./a aa.a./a
+aa.a.//./. aa.a.
+aa.a.//.// aa.a.
+aa.a.///aa aa.a./aa
+aa.a.///a. aa.a./a.
+aa.a.///a/ aa.a./a
+aa.a.///.a aa.a./.a
+aa.a.///.. .
+aa.a.///./ aa.a.
+aa.a.////a aa.a./a
+aa.a.////. aa.a.
+aa.a.///// aa.a.
+aa.a/aaaaa aa.a/aaaaa
+aa.a/aaaa. aa.a/aaaa.
+aa.a/aaaa/ aa.a/aaaa
+aa.a/aaa.a aa.a/aaa.a
+aa.a/aaa.. aa.a/aaa..
+aa.a/aaa./ aa.a/aaa.
+aa.a/aaa/a aa.a/aaa/a
+aa.a/aaa/. aa.a/aaa
+aa.a/aaa// aa.a/aaa
+aa.a/aa.aa aa.a/aa.aa
+aa.a/aa.a. aa.a/aa.a.
+aa.a/aa.a/ aa.a/aa.a
+aa.a/aa..a aa.a/aa..a
+aa.a/aa... aa.a/aa...
+aa.a/aa../ aa.a/aa..
+aa.a/aa./a aa.a/aa./a
+aa.a/aa./. aa.a/aa.
+aa.a/aa.// aa.a/aa.
+aa.a/aa/aa aa.a/aa/aa
+aa.a/aa/a. aa.a/aa/a.
+aa.a/aa/a/ aa.a/aa/a
+aa.a/aa/.a aa.a/aa/.a
+aa.a/aa/.. aa.a
+aa.a/aa/./ aa.a/aa
+aa.a/aa//a aa.a/aa/a
+aa.a/aa//. aa.a/aa
+aa.a/aa/// aa.a/aa
+aa.a/a.aaa aa.a/a.aaa
+aa.a/a.aa. aa.a/a.aa.
+aa.a/a.aa/ aa.a/a.aa
+aa.a/a.a.a aa.a/a.a.a
+aa.a/a.a.. aa.a/a.a..
+aa.a/a.a./ aa.a/a.a.
+aa.a/a.a/a aa.a/a.a/a
+aa.a/a.a/. aa.a/a.a
+aa.a/a.a// aa.a/a.a
+aa.a/a..aa aa.a/a..aa
+aa.a/a..a. aa.a/a..a.
+aa.a/a..a/ aa.a/a..a
+aa.a/a...a aa.a/a...a
+aa.a/a.... aa.a/a....
+aa.a/a.../ aa.a/a...
+aa.a/a../a aa.a/a../a
+aa.a/a../. aa.a/a..
+aa.a/a..// aa.a/a..
+aa.a/a./aa aa.a/a./aa
+aa.a/a./a. aa.a/a./a.
+aa.a/a./a/ aa.a/a./a
+aa.a/a./.a aa.a/a./.a
+aa.a/a./.. aa.a
+aa.a/a././ aa.a/a.
+aa.a/a.//a aa.a/a./a
+aa.a/a.//. aa.a/a.
+aa.a/a./// aa.a/a.
+aa.a/a/aaa aa.a/a/aaa
+aa.a/a/aa. aa.a/a/aa.
+aa.a/a/aa/ aa.a/a/aa
+aa.a/a/a.a aa.a/a/a.a
+aa.a/a/a.. aa.a/a/a..
+aa.a/a/a./ aa.a/a/a.
+aa.a/a/a/a aa.a/a/a/a
+aa.a/a/a/. aa.a/a/a
+aa.a/a/a// aa.a/a/a
+aa.a/a/.aa aa.a/a/.aa
+aa.a/a/.a. aa.a/a/.a.
+aa.a/a/.a/ aa.a/a/.a
+aa.a/a/..a aa.a/a/..a
+aa.a/a/... aa.a/a/...
+aa.a/a/../ aa.a
+aa.a/a/./a aa.a/a/a
+aa.a/a/./. aa.a/a
+aa.a/a/.// aa.a/a
+aa.a/a//aa aa.a/a/aa
+aa.a/a//a. aa.a/a/a.
+aa.a/a//a/ aa.a/a/a
+aa.a/a//.a aa.a/a/.a
+aa.a/a//.. aa.a
+aa.a/a//./ aa.a/a
+aa.a/a///a aa.a/a/a
+aa.a/a///. aa.a/a
+aa.a/a//// aa.a/a
+aa.a/.aaaa aa.a/.aaaa
+aa.a/.aaa. aa.a/.aaa.
+aa.a/.aaa/ aa.a/.aaa
+aa.a/.aa.a aa.a/.aa.a
+aa.a/.aa.. aa.a/.aa..
+aa.a/.aa./ aa.a/.aa.
+aa.a/.aa/a aa.a/.aa/a
+aa.a/.aa/. aa.a/.aa
+aa.a/.aa// aa.a/.aa
+aa.a/.a.aa aa.a/.a.aa
+aa.a/.a.a. aa.a/.a.a.
+aa.a/.a.a/ aa.a/.a.a
+aa.a/.a..a aa.a/.a..a
+aa.a/.a... aa.a/.a...
+aa.a/.a../ aa.a/.a..
+aa.a/.a./a aa.a/.a./a
+aa.a/.a./. aa.a/.a.
+aa.a/.a.// aa.a/.a.
+aa.a/.a/aa aa.a/.a/aa
+aa.a/.a/a. aa.a/.a/a.
+aa.a/.a/a/ aa.a/.a/a
+aa.a/.a/.a aa.a/.a/.a
+aa.a/.a/.. aa.a
+aa.a/.a/./ aa.a/.a
+aa.a/.a//a aa.a/.a/a
+aa.a/.a//. aa.a/.a
+aa.a/.a/// aa.a/.a
+aa.a/..aaa aa.a/..aaa
+aa.a/..aa. aa.a/..aa.
+aa.a/..aa/ aa.a/..aa
+aa.a/..a.a aa.a/..a.a
+aa.a/..a.. aa.a/..a..
+aa.a/..a./ aa.a/..a.
+aa.a/..a/a aa.a/..a/a
+aa.a/..a/. aa.a/..a
+aa.a/..a// aa.a/..a
+aa.a/...aa aa.a/...aa
+aa.a/...a. aa.a/...a.
+aa.a/...a/ aa.a/...a
+aa.a/....a aa.a/....a
+aa.a/..... aa.a/.....
+aa.a/..../ aa.a/....
+aa.a/.../a aa.a/.../a
+aa.a/.../. aa.a/...
+aa.a/...// aa.a/...
+aa.a/../aa aa
+aa.a/../a. a.
+aa.a/../a/ a
+aa.a/../.a .a
+aa.a/../.. ..
+aa.a/.././ .
+aa.a/..//a a
+aa.a/..//. .
+aa.a/../// .
+aa.a/./aaa aa.a/aaa
+aa.a/./aa. aa.a/aa.
+aa.a/./aa/ aa.a/aa
+aa.a/./a.a aa.a/a.a
+aa.a/./a.. aa.a/a..
+aa.a/./a./ aa.a/a.
+aa.a/./a/a aa.a/a/a
+aa.a/./a/. aa.a/a
+aa.a/./a// aa.a/a
+aa.a/./.aa aa.a/.aa
+aa.a/./.a. aa.a/.a.
+aa.a/./.a/ aa.a/.a
+aa.a/./..a aa.a/..a
+aa.a/./... aa.a/...
+aa.a/./../ .
+aa.a/././a aa.a/a
+aa.a/././. aa.a
+aa.a/./.// aa.a
+aa.a/.//aa aa.a/aa
+aa.a/.//a. aa.a/a.
+aa.a/.//a/ aa.a/a
+aa.a/.//.a aa.a/.a
+aa.a/.//.. .
+aa.a/.//./ aa.a
+aa.a/.///a aa.a/a
+aa.a/.///. aa.a
+aa.a/.//// aa.a
+aa.a//aaaa aa.a/aaaa
+aa.a//aaa. aa.a/aaa.
+aa.a//aaa/ aa.a/aaa
+aa.a//aa.a aa.a/aa.a
+aa.a//aa.. aa.a/aa..
+aa.a//aa./ aa.a/aa.
+aa.a//aa/a aa.a/aa/a
+aa.a//aa/. aa.a/aa
+aa.a//aa// aa.a/aa
+aa.a//a.aa aa.a/a.aa
+aa.a//a.a. aa.a/a.a.
+aa.a//a.a/ aa.a/a.a
+aa.a//a..a aa.a/a..a
+aa.a//a... aa.a/a...
+aa.a//a../ aa.a/a..
+aa.a//a./a aa.a/a./a
+aa.a//a./. aa.a/a.
+aa.a//a.// aa.a/a.
+aa.a//a/aa aa.a/a/aa
+aa.a//a/a. aa.a/a/a.
+aa.a//a/a/ aa.a/a/a
+aa.a//a/.a aa.a/a/.a
+aa.a//a/.. aa.a
+aa.a//a/./ aa.a/a
+aa.a//a//a aa.a/a/a
+aa.a//a//. aa.a/a
+aa.a//a/// aa.a/a
+aa.a//.aaa aa.a/.aaa
+aa.a//.aa. aa.a/.aa.
+aa.a//.aa/ aa.a/.aa
+aa.a//.a.a aa.a/.a.a
+aa.a//.a.. aa.a/.a..
+aa.a//.a./ aa.a/.a.
+aa.a//.a/a aa.a/.a/a
+aa.a//.a/. aa.a/.a
+aa.a//.a// aa.a/.a
+aa.a//..aa aa.a/..aa
+aa.a//..a. aa.a/..a.
+aa.a//..a/ aa.a/..a
+aa.a//...a aa.a/...a
+aa.a//.... aa.a/....
+aa.a//.../ aa.a/...
+aa.a//../a a
+aa.a//../. .
+aa.a//..// .
+aa.a//./aa aa.a/aa
+aa.a//./a. aa.a/a.
+aa.a//./a/ aa.a/a
+aa.a//./.a aa.a/.a
+aa.a//./.. .
+aa.a//././ aa.a
+aa.a//.//a aa.a/a
+aa.a//.//. aa.a
+aa.a//./// aa.a
+aa.a///aaa aa.a/aaa
+aa.a///aa. aa.a/aa.
+aa.a///aa/ aa.a/aa
+aa.a///a.a aa.a/a.a
+aa.a///a.. aa.a/a..
+aa.a///a./ aa.a/a.
+aa.a///a/a aa.a/a/a
+aa.a///a/. aa.a/a
+aa.a///a// aa.a/a
+aa.a///.aa aa.a/.aa
+aa.a///.a. aa.a/.a.
+aa.a///.a/ aa.a/.a
+aa.a///..a aa.a/..a
+aa.a///... aa.a/...
+aa.a///../ .
+aa.a///./a aa.a/a
+aa.a///./. aa.a
+aa.a///.// aa.a
+aa.a////aa aa.a/aa
+aa.a////a. aa.a/a.
+aa.a////a/ aa.a/a
+aa.a////.a aa.a/.a
+aa.a////.. .
+aa.a////./ aa.a
+aa.a/////a aa.a/a
+aa.a/////. aa.a
+aa.a////// aa.a
+aa..aaaaaa aa..aaaaaa
+aa..aaaaa. aa..aaaaa.
+aa..aaaaa/ aa..aaaaa
+aa..aaaa.a aa..aaaa.a
+aa..aaaa.. aa..aaaa..
+aa..aaaa./ aa..aaaa.
+aa..aaaa/a aa..aaaa/a
+aa..aaaa/. aa..aaaa
+aa..aaaa// aa..aaaa
+aa..aaa.aa aa..aaa.aa
+aa..aaa.a. aa..aaa.a.
+aa..aaa.a/ aa..aaa.a
+aa..aaa..a aa..aaa..a
+aa..aaa... aa..aaa...
+aa..aaa../ aa..aaa..
+aa..aaa./a aa..aaa./a
+aa..aaa./. aa..aaa.
+aa..aaa.// aa..aaa.
+aa..aaa/aa aa..aaa/aa
+aa..aaa/a. aa..aaa/a.
+aa..aaa/a/ aa..aaa/a
+aa..aaa/.a aa..aaa/.a
+aa..aaa/.. .
+aa..aaa/./ aa..aaa
+aa..aaa//a aa..aaa/a
+aa..aaa//. aa..aaa
+aa..aaa/// aa..aaa
+aa..aa.aaa aa..aa.aaa
+aa..aa.aa. aa..aa.aa.
+aa..aa.aa/ aa..aa.aa
+aa..aa.a.a aa..aa.a.a
+aa..aa.a.. aa..aa.a..
+aa..aa.a./ aa..aa.a.
+aa..aa.a/a aa..aa.a/a
+aa..aa.a/. aa..aa.a
+aa..aa.a// aa..aa.a
+aa..aa..aa aa..aa..aa
+aa..aa..a. aa..aa..a.
+aa..aa..a/ aa..aa..a
+aa..aa...a aa..aa...a
+aa..aa.... aa..aa....
+aa..aa.../ aa..aa...
+aa..aa../a aa..aa../a
+aa..aa../. aa..aa..
+aa..aa..// aa..aa..
+aa..aa./aa aa..aa./aa
+aa..aa./a. aa..aa./a.
+aa..aa./a/ aa..aa./a
+aa..aa./.a aa..aa./.a
+aa..aa./.. .
+aa..aa././ aa..aa.
+aa..aa.//a aa..aa./a
+aa..aa.//. aa..aa.
+aa..aa./// aa..aa.
+aa..aa/aaa aa..aa/aaa
+aa..aa/aa. aa..aa/aa.
+aa..aa/aa/ aa..aa/aa
+aa..aa/a.a aa..aa/a.a
+aa..aa/a.. aa..aa/a..
+aa..aa/a./ aa..aa/a.
+aa..aa/a/a aa..aa/a/a
+aa..aa/a/. aa..aa/a
+aa..aa/a// aa..aa/a
+aa..aa/.aa aa..aa/.aa
+aa..aa/.a. aa..aa/.a.
+aa..aa/.a/ aa..aa/.a
+aa..aa/..a aa..aa/..a
+aa..aa/... aa..aa/...
+aa..aa/../ .
+aa..aa/./a aa..aa/a
+aa..aa/./. aa..aa
+aa..aa/.// aa..aa
+aa..aa//aa aa..aa/aa
+aa..aa//a. aa..aa/a.
+aa..aa//a/ aa..aa/a
+aa..aa//.a aa..aa/.a
+aa..aa//.. .
+aa..aa//./ aa..aa
+aa..aa///a aa..aa/a
+aa..aa///. aa..aa
+aa..aa//// aa..aa
+aa..a.aaaa aa..a.aaaa
+aa..a.aaa. aa..a.aaa.
+aa..a.aaa/ aa..a.aaa
+aa..a.aa.a aa..a.aa.a
+aa..a.aa.. aa..a.aa..
+aa..a.aa./ aa..a.aa.
+aa..a.aa/a aa..a.aa/a
+aa..a.aa/. aa..a.aa
+aa..a.aa// aa..a.aa
+aa..a.a.aa aa..a.a.aa
+aa..a.a.a. aa..a.a.a.
+aa..a.a.a/ aa..a.a.a
+aa..a.a..a aa..a.a..a
+aa..a.a... aa..a.a...
+aa..a.a../ aa..a.a..
+aa..a.a./a aa..a.a./a
+aa..a.a./. aa..a.a.
+aa..a.a.// aa..a.a.
+aa..a.a/aa aa..a.a/aa
+aa..a.a/a. aa..a.a/a.
+aa..a.a/a/ aa..a.a/a
+aa..a.a/.a aa..a.a/.a
+aa..a.a/.. .
+aa..a.a/./ aa..a.a
+aa..a.a//a aa..a.a/a
+aa..a.a//. aa..a.a
+aa..a.a/// aa..a.a
+aa..a..aaa aa..a..aaa
+aa..a..aa. aa..a..aa.
+aa..a..aa/ aa..a..aa
+aa..a..a.a aa..a..a.a
+aa..a..a.. aa..a..a..
+aa..a..a./ aa..a..a.
+aa..a..a/a aa..a..a/a
+aa..a..a/. aa..a..a
+aa..a..a// aa..a..a
+aa..a...aa aa..a...aa
+aa..a...a. aa..a...a.
+aa..a...a/ aa..a...a
+aa..a....a aa..a....a
+aa..a..... aa..a.....
+aa..a..../ aa..a....
+aa..a.../a aa..a.../a
+aa..a.../. aa..a...
+aa..a...// aa..a...
+aa..a../aa aa..a../aa
+aa..a../a. aa..a../a.
+aa..a../a/ aa..a../a
+aa..a../.a aa..a../.a
+aa..a../.. .
+aa..a.././ aa..a..
+aa..a..//a aa..a../a
+aa..a..//. aa..a..
+aa..a../// aa..a..
+aa..a./aaa aa..a./aaa
+aa..a./aa. aa..a./aa.
+aa..a./aa/ aa..a./aa
+aa..a./a.a aa..a./a.a
+aa..a./a.. aa..a./a..
+aa..a./a./ aa..a./a.
+aa..a./a/a aa..a./a/a
+aa..a./a/. aa..a./a
+aa..a./a// aa..a./a
+aa..a./.aa aa..a./.aa
+aa..a./.a. aa..a./.a.
+aa..a./.a/ aa..a./.a
+aa..a./..a aa..a./..a
+aa..a./... aa..a./...
+aa..a./../ .
+aa..a././a aa..a./a
+aa..a././. aa..a.
+aa..a./.// aa..a.
+aa..a.//aa aa..a./aa
+aa..a.//a. aa..a./a.
+aa..a.//a/ aa..a./a
+aa..a.//.a aa..a./.a
+aa..a.//.. .
+aa..a.//./ aa..a.
+aa..a.///a aa..a./a
+aa..a.///. aa..a.
+aa..a.//// aa..a.
+aa..a/aaaa aa..a/aaaa
+aa..a/aaa. aa..a/aaa.
+aa..a/aaa/ aa..a/aaa
+aa..a/aa.a aa..a/aa.a
+aa..a/aa.. aa..a/aa..
+aa..a/aa./ aa..a/aa.
+aa..a/aa/a aa..a/aa/a
+aa..a/aa/. aa..a/aa
+aa..a/aa// aa..a/aa
+aa..a/a.aa aa..a/a.aa
+aa..a/a.a. aa..a/a.a.
+aa..a/a.a/ aa..a/a.a
+aa..a/a..a aa..a/a..a
+aa..a/a... aa..a/a...
+aa..a/a../ aa..a/a..
+aa..a/a./a aa..a/a./a
+aa..a/a./. aa..a/a.
+aa..a/a.// aa..a/a.
+aa..a/a/aa aa..a/a/aa
+aa..a/a/a. aa..a/a/a.
+aa..a/a/a/ aa..a/a/a
+aa..a/a/.a aa..a/a/.a
+aa..a/a/.. aa..a
+aa..a/a/./ aa..a/a
+aa..a/a//a aa..a/a/a
+aa..a/a//. aa..a/a
+aa..a/a/// aa..a/a
+aa..a/.aaa aa..a/.aaa
+aa..a/.aa. aa..a/.aa.
+aa..a/.aa/ aa..a/.aa
+aa..a/.a.a aa..a/.a.a
+aa..a/.a.. aa..a/.a..
+aa..a/.a./ aa..a/.a.
+aa..a/.a/a aa..a/.a/a
+aa..a/.a/. aa..a/.a
+aa..a/.a// aa..a/.a
+aa..a/..aa aa..a/..aa
+aa..a/..a. aa..a/..a.
+aa..a/..a/ aa..a/..a
+aa..a/...a aa..a/...a
+aa..a/.... aa..a/....
+aa..a/.../ aa..a/...
+aa..a/../a a
+aa..a/../. .
+aa..a/..// .
+aa..a/./aa aa..a/aa
+aa..a/./a. aa..a/a.
+aa..a/./a/ aa..a/a
+aa..a/./.a aa..a/.a
+aa..a/./.. .
+aa..a/././ aa..a
+aa..a/.//a aa..a/a
+aa..a/.//. aa..a
+aa..a/./// aa..a
+aa..a//aaa aa..a/aaa
+aa..a//aa. aa..a/aa.
+aa..a//aa/ aa..a/aa
+aa..a//a.a aa..a/a.a
+aa..a//a.. aa..a/a..
+aa..a//a./ aa..a/a.
+aa..a//a/a aa..a/a/a
+aa..a//a/. aa..a/a
+aa..a//a// aa..a/a
+aa..a//.aa aa..a/.aa
+aa..a//.a. aa..a/.a.
+aa..a//.a/ aa..a/.a
+aa..a//..a aa..a/..a
+aa..a//... aa..a/...
+aa..a//../ .
+aa..a//./a aa..a/a
+aa..a//./. aa..a
+aa..a//.// aa..a
+aa..a///aa aa..a/aa
+aa..a///a. aa..a/a.
+aa..a///a/ aa..a/a
+aa..a///.a aa..a/.a
+aa..a///.. .
+aa..a///./ aa..a
+aa..a////a aa..a/a
+aa..a////. aa..a
+aa..a///// aa..a
+aa...aaaaa aa...aaaaa
+aa...aaaa. aa...aaaa.
+aa...aaaa/ aa...aaaa
+aa...aaa.a aa...aaa.a
+aa...aaa.. aa...aaa..
+aa...aaa./ aa...aaa.
+aa...aaa/a aa...aaa/a
+aa...aaa/. aa...aaa
+aa...aaa// aa...aaa
+aa...aa.aa aa...aa.aa
+aa...aa.a. aa...aa.a.
+aa...aa.a/ aa...aa.a
+aa...aa..a aa...aa..a
+aa...aa... aa...aa...
+aa...aa../ aa...aa..
+aa...aa./a aa...aa./a
+aa...aa./. aa...aa.
+aa...aa.// aa...aa.
+aa...aa/aa aa...aa/aa
+aa...aa/a. aa...aa/a.
+aa...aa/a/ aa...aa/a
+aa...aa/.a aa...aa/.a
+aa...aa/.. .
+aa...aa/./ aa...aa
+aa...aa//a aa...aa/a
+aa...aa//. aa...aa
+aa...aa/// aa...aa
+aa...a.aaa aa...a.aaa
+aa...a.aa. aa...a.aa.
+aa...a.aa/ aa...a.aa
+aa...a.a.a aa...a.a.a
+aa...a.a.. aa...a.a..
+aa...a.a./ aa...a.a.
+aa...a.a/a aa...a.a/a
+aa...a.a/. aa...a.a
+aa...a.a// aa...a.a
+aa...a..aa aa...a..aa
+aa...a..a. aa...a..a.
+aa...a..a/ aa...a..a
+aa...a...a aa...a...a
+aa...a.... aa...a....
+aa...a.../ aa...a...
+aa...a../a aa...a../a
+aa...a../. aa...a..
+aa...a..// aa...a..
+aa...a./aa aa...a./aa
+aa...a./a. aa...a./a.
+aa...a./a/ aa...a./a
+aa...a./.a aa...a./.a
+aa...a./.. .
+aa...a././ aa...a.
+aa...a.//a aa...a./a
+aa...a.//. aa...a.
+aa...a./// aa...a.
+aa...a/aaa aa...a/aaa
+aa...a/aa. aa...a/aa.
+aa...a/aa/ aa...a/aa
+aa...a/a.a aa...a/a.a
+aa...a/a.. aa...a/a..
+aa...a/a./ aa...a/a.
+aa...a/a/a aa...a/a/a
+aa...a/a/. aa...a/a
+aa...a/a// aa...a/a
+aa...a/.aa aa...a/.aa
+aa...a/.a. aa...a/.a.
+aa...a/.a/ aa...a/.a
+aa...a/..a aa...a/..a
+aa...a/... aa...a/...
+aa...a/../ .
+aa...a/./a aa...a/a
+aa...a/./. aa...a
+aa...a/.// aa...a
+aa...a//aa aa...a/aa
+aa...a//a. aa...a/a.
+aa...a//a/ aa...a/a
+aa...a//.a aa...a/.a
+aa...a//.. .
+aa...a//./ aa...a
+aa...a///a aa...a/a
+aa...a///. aa...a
+aa...a//// aa...a
+aa....aaaa aa....aaaa
+aa....aaa. aa....aaa.
+aa....aaa/ aa....aaa
+aa....aa.a aa....aa.a
+aa....aa.. aa....aa..
+aa....aa./ aa....aa.
+aa....aa/a aa....aa/a
+aa....aa/. aa....aa
+aa....aa// aa....aa
+aa....a.aa aa....a.aa
+aa....a.a. aa....a.a.
+aa....a.a/ aa....a.a
+aa....a..a aa....a..a
+aa....a... aa....a...
+aa....a../ aa....a..
+aa....a./a aa....a./a
+aa....a./. aa....a.
+aa....a.// aa....a.
+aa....a/aa aa....a/aa
+aa....a/a. aa....a/a.
+aa....a/a/ aa....a/a
+aa....a/.a aa....a/.a
+aa....a/.. .
+aa....a/./ aa....a
+aa....a//a aa....a/a
+aa....a//. aa....a
+aa....a/// aa....a
+aa.....aaa aa.....aaa
+aa.....aa. aa.....aa.
+aa.....aa/ aa.....aa
+aa.....a.a aa.....a.a
+aa.....a.. aa.....a..
+aa.....a./ aa.....a.
+aa.....a/a aa.....a/a
+aa.....a/. aa.....a
+aa.....a// aa.....a
+aa......aa aa......aa
+aa......a. aa......a.
+aa......a/ aa......a
+aa.......a aa.......a
+aa........ aa........
+aa......./ aa.......
+aa....../a aa....../a
+aa....../. aa......
+aa......// aa......
+aa...../aa aa...../aa
+aa...../a. aa...../a.
+aa...../a/ aa...../a
+aa...../.a aa...../.a
+aa...../.. .
+aa....././ aa.....
+aa.....//a aa...../a
+aa.....//. aa.....
+aa...../// aa.....
+aa..../aaa aa..../aaa
+aa..../aa. aa..../aa.
+aa..../aa/ aa..../aa
+aa..../a.a aa..../a.a
+aa..../a.. aa..../a..
+aa..../a./ aa..../a.
+aa..../a/a aa..../a/a
+aa..../a/. aa..../a
+aa..../a// aa..../a
+aa..../.aa aa..../.aa
+aa..../.a. aa..../.a.
+aa..../.a/ aa..../.a
+aa..../..a aa..../..a
+aa..../... aa..../...
+aa..../../ .
+aa...././a aa..../a
+aa...././. aa....
+aa..../.// aa....
+aa....//aa aa..../aa
+aa....//a. aa..../a.
+aa....//a/ aa..../a
+aa....//.a aa..../.a
+aa....//.. .
+aa....//./ aa....
+aa....///a aa..../a
+aa....///. aa....
+aa....//// aa....
+aa.../aaaa aa.../aaaa
+aa.../aaa. aa.../aaa.
+aa.../aaa/ aa.../aaa
+aa.../aa.a aa.../aa.a
+aa.../aa.. aa.../aa..
+aa.../aa./ aa.../aa.
+aa.../aa/a aa.../aa/a
+aa.../aa/. aa.../aa
+aa.../aa// aa.../aa
+aa.../a.aa aa.../a.aa
+aa.../a.a. aa.../a.a.
+aa.../a.a/ aa.../a.a
+aa.../a..a aa.../a..a
+aa.../a... aa.../a...
+aa.../a../ aa.../a..
+aa.../a./a aa.../a./a
+aa.../a./. aa.../a.
+aa.../a.// aa.../a.
+aa.../a/aa aa.../a/aa
+aa.../a/a. aa.../a/a.
+aa.../a/a/ aa.../a/a
+aa.../a/.a aa.../a/.a
+aa.../a/.. aa...
+aa.../a/./ aa.../a
+aa.../a//a aa.../a/a
+aa.../a//. aa.../a
+aa.../a/// aa.../a
+aa.../.aaa aa.../.aaa
+aa.../.aa. aa.../.aa.
+aa.../.aa/ aa.../.aa
+aa.../.a.a aa.../.a.a
+aa.../.a.. aa.../.a..
+aa.../.a./ aa.../.a.
+aa.../.a/a aa.../.a/a
+aa.../.a/. aa.../.a
+aa.../.a// aa.../.a
+aa.../..aa aa.../..aa
+aa.../..a. aa.../..a.
+aa.../..a/ aa.../..a
+aa.../...a aa.../...a
+aa.../.... aa.../....
+aa.../.../ aa.../...
+aa.../../a a
+aa.../../. .
+aa.../..// .
+aa..././aa aa.../aa
+aa..././a. aa.../a.
+aa..././a/ aa.../a
+aa..././.a aa.../.a
+aa..././.. .
+aa.../././ aa...
+aa..././/a aa.../a
+aa..././/. aa...
+aa..././// aa...
+aa...//aaa aa.../aaa
+aa...//aa. aa.../aa.
+aa...//aa/ aa.../aa
+aa...//a.a aa.../a.a
+aa...//a.. aa.../a..
+aa...//a./ aa.../a.
+aa...//a/a aa.../a/a
+aa...//a/. aa.../a
+aa...//a// aa.../a
+aa...//.aa aa.../.aa
+aa...//.a. aa.../.a.
+aa...//.a/ aa.../.a
+aa...//..a aa.../..a
+aa...//... aa.../...
+aa...//../ .
+aa...//./a aa.../a
+aa...//./. aa...
+aa...//.// aa...
+aa...///aa aa.../aa
+aa...///a. aa.../a.
+aa...///a/ aa.../a
+aa...///.a aa.../.a
+aa...///.. .
+aa...///./ aa...
+aa...////a aa.../a
+aa...////. aa...
+aa...///// aa...
+aa../aaaaa aa../aaaaa
+aa../aaaa. aa../aaaa.
+aa../aaaa/ aa../aaaa
+aa../aaa.a aa../aaa.a
+aa../aaa.. aa../aaa..
+aa../aaa./ aa../aaa.
+aa../aaa/a aa../aaa/a
+aa../aaa/. aa../aaa
+aa../aaa// aa../aaa
+aa../aa.aa aa../aa.aa
+aa../aa.a. aa../aa.a.
+aa../aa.a/ aa../aa.a
+aa../aa..a aa../aa..a
+aa../aa... aa../aa...
+aa../aa../ aa../aa..
+aa../aa./a aa../aa./a
+aa../aa./. aa../aa.
+aa../aa.// aa../aa.
+aa../aa/aa aa../aa/aa
+aa../aa/a. aa../aa/a.
+aa../aa/a/ aa../aa/a
+aa../aa/.a aa../aa/.a
+aa../aa/.. aa..
+aa../aa/./ aa../aa
+aa../aa//a aa../aa/a
+aa../aa//. aa../aa
+aa../aa/// aa../aa
+aa../a.aaa aa../a.aaa
+aa../a.aa. aa../a.aa.
+aa../a.aa/ aa../a.aa
+aa../a.a.a aa../a.a.a
+aa../a.a.. aa../a.a..
+aa../a.a./ aa../a.a.
+aa../a.a/a aa../a.a/a
+aa../a.a/. aa../a.a
+aa../a.a// aa../a.a
+aa../a..aa aa../a..aa
+aa../a..a. aa../a..a.
+aa../a..a/ aa../a..a
+aa../a...a aa../a...a
+aa../a.... aa../a....
+aa../a.../ aa../a...
+aa../a../a aa../a../a
+aa../a../. aa../a..
+aa../a..// aa../a..
+aa../a./aa aa../a./aa
+aa../a./a. aa../a./a.
+aa../a./a/ aa../a./a
+aa../a./.a aa../a./.a
+aa../a./.. aa..
+aa../a././ aa../a.
+aa../a.//a aa../a./a
+aa../a.//. aa../a.
+aa../a./// aa../a.
+aa../a/aaa aa../a/aaa
+aa../a/aa. aa../a/aa.
+aa../a/aa/ aa../a/aa
+aa../a/a.a aa../a/a.a
+aa../a/a.. aa../a/a..
+aa../a/a./ aa../a/a.
+aa../a/a/a aa../a/a/a
+aa../a/a/. aa../a/a
+aa../a/a// aa../a/a
+aa../a/.aa aa../a/.aa
+aa../a/.a. aa../a/.a.
+aa../a/.a/ aa../a/.a
+aa../a/..a aa../a/..a
+aa../a/... aa../a/...
+aa../a/../ aa..
+aa../a/./a aa../a/a
+aa../a/./. aa../a
+aa../a/.// aa../a
+aa../a//aa aa../a/aa
+aa../a//a. aa../a/a.
+aa../a//a/ aa../a/a
+aa../a//.a aa../a/.a
+aa../a//.. aa..
+aa../a//./ aa../a
+aa../a///a aa../a/a
+aa../a///. aa../a
+aa../a//// aa../a
+aa../.aaaa aa../.aaaa
+aa../.aaa. aa../.aaa.
+aa../.aaa/ aa../.aaa
+aa../.aa.a aa../.aa.a
+aa../.aa.. aa../.aa..
+aa../.aa./ aa../.aa.
+aa../.aa/a aa../.aa/a
+aa../.aa/. aa../.aa
+aa../.aa// aa../.aa
+aa../.a.aa aa../.a.aa
+aa../.a.a. aa../.a.a.
+aa../.a.a/ aa../.a.a
+aa../.a..a aa../.a..a
+aa../.a... aa../.a...
+aa../.a../ aa../.a..
+aa../.a./a aa../.a./a
+aa../.a./. aa../.a.
+aa../.a.// aa../.a.
+aa../.a/aa aa../.a/aa
+aa../.a/a. aa../.a/a.
+aa../.a/a/ aa../.a/a
+aa../.a/.a aa../.a/.a
+aa../.a/.. aa..
+aa../.a/./ aa../.a
+aa../.a//a aa../.a/a
+aa../.a//. aa../.a
+aa../.a/// aa../.a
+aa../..aaa aa../..aaa
+aa../..aa. aa../..aa.
+aa../..aa/ aa../..aa
+aa../..a.a aa../..a.a
+aa../..a.. aa../..a..
+aa../..a./ aa../..a.
+aa../..a/a aa../..a/a
+aa../..a/. aa../..a
+aa../..a// aa../..a
+aa../...aa aa../...aa
+aa../...a. aa../...a.
+aa../...a/ aa../...a
+aa../....a aa../....a
+aa../..... aa../.....
+aa../..../ aa../....
+aa../.../a aa../.../a
+aa../.../. aa../...
+aa../...// aa../...
+aa../../aa aa
+aa../../a. a.
+aa../../a/ a
+aa../../.a .a
+aa../../.. ..
+aa../.././ .
+aa../..//a a
+aa../..//. .
+aa../../// .
+aa.././aaa aa../aaa
+aa.././aa. aa../aa.
+aa.././aa/ aa../aa
+aa.././a.a aa../a.a
+aa.././a.. aa../a..
+aa.././a./ aa../a.
+aa.././a/a aa../a/a
+aa.././a/. aa../a
+aa.././a// aa../a
+aa.././.aa aa../.aa
+aa.././.a. aa../.a.
+aa.././.a/ aa../.a
+aa.././..a aa../..a
+aa.././... aa../...
+aa.././../ .
+aa../././a aa../a
+aa../././. aa..
+aa.././.// aa..
+aa.././/aa aa../aa
+aa.././/a. aa../a.
+aa.././/a/ aa../a
+aa.././/.a aa../.a
+aa.././/.. .
+aa.././/./ aa..
+aa.././//a aa../a
+aa.././//. aa..
+aa.././/// aa..
+aa..//aaaa aa../aaaa
+aa..//aaa. aa../aaa.
+aa..//aaa/ aa../aaa
+aa..//aa.a aa../aa.a
+aa..//aa.. aa../aa..
+aa..//aa./ aa../aa.
+aa..//aa/a aa../aa/a
+aa..//aa/. aa../aa
+aa..//aa// aa../aa
+aa..//a.aa aa../a.aa
+aa..//a.a. aa../a.a.
+aa..//a.a/ aa../a.a
+aa..//a..a aa../a..a
+aa..//a... aa../a...
+aa..//a../ aa../a..
+aa..//a./a aa../a./a
+aa..//a./. aa../a.
+aa..//a.// aa../a.
+aa..//a/aa aa../a/aa
+aa..//a/a. aa../a/a.
+aa..//a/a/ aa../a/a
+aa..//a/.a aa../a/.a
+aa..//a/.. aa..
+aa..//a/./ aa../a
+aa..//a//a aa../a/a
+aa..//a//. aa../a
+aa..//a/// aa../a
+aa..//.aaa aa../.aaa
+aa..//.aa. aa../.aa.
+aa..//.aa/ aa../.aa
+aa..//.a.a aa../.a.a
+aa..//.a.. aa../.a..
+aa..//.a./ aa../.a.
+aa..//.a/a aa../.a/a
+aa..//.a/. aa../.a
+aa..//.a// aa../.a
+aa..//..aa aa../..aa
+aa..//..a. aa../..a.
+aa..//..a/ aa../..a
+aa..//...a aa../...a
+aa..//.... aa../....
+aa..//.../ aa../...
+aa..//../a a
+aa..//../. .
+aa..//..// .
+aa..//./aa aa../aa
+aa..//./a. aa../a.
+aa..//./a/ aa../a
+aa..//./.a aa../.a
+aa..//./.. .
+aa..//././ aa..
+aa..//.//a aa../a
+aa..//.//. aa..
+aa..//./// aa..
+aa..///aaa aa../aaa
+aa..///aa. aa../aa.
+aa..///aa/ aa../aa
+aa..///a.a aa../a.a
+aa..///a.. aa../a..
+aa..///a./ aa../a.
+aa..///a/a aa../a/a
+aa..///a/. aa../a
+aa..///a// aa../a
+aa..///.aa aa../.aa
+aa..///.a. aa../.a.
+aa..///.a/ aa../.a
+aa..///..a aa../..a
+aa..///... aa../...
+aa..///../ .
+aa..///./a aa../a
+aa..///./. aa..
+aa..///.// aa..
+aa..////aa aa../aa
+aa..////a. aa../a.
+aa..////a/ aa../a
+aa..////.a aa../.a
+aa..////.. .
+aa..////./ aa..
+aa../////a aa../a
+aa../////. aa..
+aa..////// aa..
+aa./aaaaaa aa./aaaaaa
+aa./aaaaa. aa./aaaaa.
+aa./aaaaa/ aa./aaaaa
+aa./aaaa.a aa./aaaa.a
+aa./aaaa.. aa./aaaa..
+aa./aaaa./ aa./aaaa.
+aa./aaaa/a aa./aaaa/a
+aa./aaaa/. aa./aaaa
+aa./aaaa// aa./aaaa
+aa./aaa.aa aa./aaa.aa
+aa./aaa.a. aa./aaa.a.
+aa./aaa.a/ aa./aaa.a
+aa./aaa..a aa./aaa..a
+aa./aaa... aa./aaa...
+aa./aaa../ aa./aaa..
+aa./aaa./a aa./aaa./a
+aa./aaa./. aa./aaa.
+aa./aaa.// aa./aaa.
+aa./aaa/aa aa./aaa/aa
+aa./aaa/a. aa./aaa/a.
+aa./aaa/a/ aa./aaa/a
+aa./aaa/.a aa./aaa/.a
+aa./aaa/.. aa.
+aa./aaa/./ aa./aaa
+aa./aaa//a aa./aaa/a
+aa./aaa//. aa./aaa
+aa./aaa/// aa./aaa
+aa./aa.aaa aa./aa.aaa
+aa./aa.aa. aa./aa.aa.
+aa./aa.aa/ aa./aa.aa
+aa./aa.a.a aa./aa.a.a
+aa./aa.a.. aa./aa.a..
+aa./aa.a./ aa./aa.a.
+aa./aa.a/a aa./aa.a/a
+aa./aa.a/. aa./aa.a
+aa./aa.a// aa./aa.a
+aa./aa..aa aa./aa..aa
+aa./aa..a. aa./aa..a.
+aa./aa..a/ aa./aa..a
+aa./aa...a aa./aa...a
+aa./aa.... aa./aa....
+aa./aa.../ aa./aa...
+aa./aa../a aa./aa../a
+aa./aa../. aa./aa..
+aa./aa..// aa./aa..
+aa./aa./aa aa./aa./aa
+aa./aa./a. aa./aa./a.
+aa./aa./a/ aa./aa./a
+aa./aa./.a aa./aa./.a
+aa./aa./.. aa.
+aa./aa././ aa./aa.
+aa./aa.//a aa./aa./a
+aa./aa.//. aa./aa.
+aa./aa./// aa./aa.
+aa./aa/aaa aa./aa/aaa
+aa./aa/aa. aa./aa/aa.
+aa./aa/aa/ aa./aa/aa
+aa./aa/a.a aa./aa/a.a
+aa./aa/a.. aa./aa/a..
+aa./aa/a./ aa./aa/a.
+aa./aa/a/a aa./aa/a/a
+aa./aa/a/. aa./aa/a
+aa./aa/a// aa./aa/a
+aa./aa/.aa aa./aa/.aa
+aa./aa/.a. aa./aa/.a.
+aa./aa/.a/ aa./aa/.a
+aa./aa/..a aa./aa/..a
+aa./aa/... aa./aa/...
+aa./aa/../ aa.
+aa./aa/./a aa./aa/a
+aa./aa/./. aa./aa
+aa./aa/.// aa./aa
+aa./aa//aa aa./aa/aa
+aa./aa//a. aa./aa/a.
+aa./aa//a/ aa./aa/a
+aa./aa//.a aa./aa/.a
+aa./aa//.. aa.
+aa./aa//./ aa./aa
+aa./aa///a aa./aa/a
+aa./aa///. aa./aa
+aa./aa//// aa./aa
+aa./a.aaaa aa./a.aaaa
+aa./a.aaa. aa./a.aaa.
+aa./a.aaa/ aa./a.aaa
+aa./a.aa.a aa./a.aa.a
+aa./a.aa.. aa./a.aa..
+aa./a.aa./ aa./a.aa.
+aa./a.aa/a aa./a.aa/a
+aa./a.aa/. aa./a.aa
+aa./a.aa// aa./a.aa
+aa./a.a.aa aa./a.a.aa
+aa./a.a.a. aa./a.a.a.
+aa./a.a.a/ aa./a.a.a
+aa./a.a..a aa./a.a..a
+aa./a.a... aa./a.a...
+aa./a.a../ aa./a.a..
+aa./a.a./a aa./a.a./a
+aa./a.a./. aa./a.a.
+aa./a.a.// aa./a.a.
+aa./a.a/aa aa./a.a/aa
+aa./a.a/a. aa./a.a/a.
+aa./a.a/a/ aa./a.a/a
+aa./a.a/.a aa./a.a/.a
+aa./a.a/.. aa.
+aa./a.a/./ aa./a.a
+aa./a.a//a aa./a.a/a
+aa./a.a//. aa./a.a
+aa./a.a/// aa./a.a
+aa./a..aaa aa./a..aaa
+aa./a..aa. aa./a..aa.
+aa./a..aa/ aa./a..aa
+aa./a..a.a aa./a..a.a
+aa./a..a.. aa./a..a..
+aa./a..a./ aa./a..a.
+aa./a..a/a aa./a..a/a
+aa./a..a/. aa./a..a
+aa./a..a// aa./a..a
+aa./a...aa aa./a...aa
+aa./a...a. aa./a...a.
+aa./a...a/ aa./a...a
+aa./a....a aa./a....a
+aa./a..... aa./a.....
+aa./a..../ aa./a....
+aa./a.../a aa./a.../a
+aa./a.../. aa./a...
+aa./a...// aa./a...
+aa./a../aa aa./a../aa
+aa./a../a. aa./a../a.
+aa./a../a/ aa./a../a
+aa./a../.a aa./a../.a
+aa./a../.. aa.
+aa./a.././ aa./a..
+aa./a..//a aa./a../a
+aa./a..//. aa./a..
+aa./a../// aa./a..
+aa./a./aaa aa./a./aaa
+aa./a./aa. aa./a./aa.
+aa./a./aa/ aa./a./aa
+aa./a./a.a aa./a./a.a
+aa./a./a.. aa./a./a..
+aa./a./a./ aa./a./a.
+aa./a./a/a aa./a./a/a
+aa./a./a/. aa./a./a
+aa./a./a// aa./a./a
+aa./a./.aa aa./a./.aa
+aa./a./.a. aa./a./.a.
+aa./a./.a/ aa./a./.a
+aa./a./..a aa./a./..a
+aa./a./... aa./a./...
+aa./a./../ aa.
+aa./a././a aa./a./a
+aa./a././. aa./a.
+aa./a./.// aa./a.
+aa./a.//aa aa./a./aa
+aa./a.//a. aa./a./a.
+aa./a.//a/ aa./a./a
+aa./a.//.a aa./a./.a
+aa./a.//.. aa.
+aa./a.//./ aa./a.
+aa./a.///a aa./a./a
+aa./a.///. aa./a.
+aa./a.//// aa./a.
+aa./a/aaaa aa./a/aaaa
+aa./a/aaa. aa./a/aaa.
+aa./a/aaa/ aa./a/aaa
+aa./a/aa.a aa./a/aa.a
+aa./a/aa.. aa./a/aa..
+aa./a/aa./ aa./a/aa.
+aa./a/aa/a aa./a/aa/a
+aa./a/aa/. aa./a/aa
+aa./a/aa// aa./a/aa
+aa./a/a.aa aa./a/a.aa
+aa./a/a.a. aa./a/a.a.
+aa./a/a.a/ aa./a/a.a
+aa./a/a..a aa./a/a..a
+aa./a/a... aa./a/a...
+aa./a/a../ aa./a/a..
+aa./a/a./a aa./a/a./a
+aa./a/a./. aa./a/a.
+aa./a/a.// aa./a/a.
+aa./a/a/aa aa./a/a/aa
+aa./a/a/a. aa./a/a/a.
+aa./a/a/a/ aa./a/a/a
+aa./a/a/.a aa./a/a/.a
+aa./a/a/.. aa./a
+aa./a/a/./ aa./a/a
+aa./a/a//a aa./a/a/a
+aa./a/a//. aa./a/a
+aa./a/a/// aa./a/a
+aa./a/.aaa aa./a/.aaa
+aa./a/.aa. aa./a/.aa.
+aa./a/.aa/ aa./a/.aa
+aa./a/.a.a aa./a/.a.a
+aa./a/.a.. aa./a/.a..
+aa./a/.a./ aa./a/.a.
+aa./a/.a/a aa./a/.a/a
+aa./a/.a/. aa./a/.a
+aa./a/.a// aa./a/.a
+aa./a/..aa aa./a/..aa
+aa./a/..a. aa./a/..a.
+aa./a/..a/ aa./a/..a
+aa./a/...a aa./a/...a
+aa./a/.... aa./a/....
+aa./a/.../ aa./a/...
+aa./a/../a aa./a
+aa./a/../. aa.
+aa./a/..// aa.
+aa./a/./aa aa./a/aa
+aa./a/./a. aa./a/a.
+aa./a/./a/ aa./a/a
+aa./a/./.a aa./a/.a
+aa./a/./.. aa.
+aa./a/././ aa./a
+aa./a/.//a aa./a/a
+aa./a/.//. aa./a
+aa./a/./// aa./a
+aa./a//aaa aa./a/aaa
+aa./a//aa. aa./a/aa.
+aa./a//aa/ aa./a/aa
+aa./a//a.a aa./a/a.a
+aa./a//a.. aa./a/a..
+aa./a//a./ aa./a/a.
+aa./a//a/a aa./a/a/a
+aa./a//a/. aa./a/a
+aa./a//a// aa./a/a
+aa./a//.aa aa./a/.aa
+aa./a//.a. aa./a/.a.
+aa./a//.a/ aa./a/.a
+aa./a//..a aa./a/..a
+aa./a//... aa./a/...
+aa./a//../ aa.
+aa./a//./a aa./a/a
+aa./a//./. aa./a
+aa./a//.// aa./a
+aa./a///aa aa./a/aa
+aa./a///a. aa./a/a.
+aa./a///a/ aa./a/a
+aa./a///.a aa./a/.a
+aa./a///.. aa.
+aa./a///./ aa./a
+aa./a////a aa./a/a
+aa./a////. aa./a
+aa./a///// aa./a
+aa./.aaaaa aa./.aaaaa
+aa./.aaaa. aa./.aaaa.
+aa./.aaaa/ aa./.aaaa
+aa./.aaa.a aa./.aaa.a
+aa./.aaa.. aa./.aaa..
+aa./.aaa./ aa./.aaa.
+aa./.aaa/a aa./.aaa/a
+aa./.aaa/. aa./.aaa
+aa./.aaa// aa./.aaa
+aa./.aa.aa aa./.aa.aa
+aa./.aa.a. aa./.aa.a.
+aa./.aa.a/ aa./.aa.a
+aa./.aa..a aa./.aa..a
+aa./.aa... aa./.aa...
+aa./.aa../ aa./.aa..
+aa./.aa./a aa./.aa./a
+aa./.aa./. aa./.aa.
+aa./.aa.// aa./.aa.
+aa./.aa/aa aa./.aa/aa
+aa./.aa/a. aa./.aa/a.
+aa./.aa/a/ aa./.aa/a
+aa./.aa/.a aa./.aa/.a
+aa./.aa/.. aa.
+aa./.aa/./ aa./.aa
+aa./.aa//a aa./.aa/a
+aa./.aa//. aa./.aa
+aa./.aa/// aa./.aa
+aa./.a.aaa aa./.a.aaa
+aa./.a.aa. aa./.a.aa.
+aa./.a.aa/ aa./.a.aa
+aa./.a.a.a aa./.a.a.a
+aa./.a.a.. aa./.a.a..
+aa./.a.a./ aa./.a.a.
+aa./.a.a/a aa./.a.a/a
+aa./.a.a/. aa./.a.a
+aa./.a.a// aa./.a.a
+aa./.a..aa aa./.a..aa
+aa./.a..a. aa./.a..a.
+aa./.a..a/ aa./.a..a
+aa./.a...a aa./.a...a
+aa./.a.... aa./.a....
+aa./.a.../ aa./.a...
+aa./.a../a aa./.a../a
+aa./.a../. aa./.a..
+aa./.a..// aa./.a..
+aa./.a./aa aa./.a./aa
+aa./.a./a. aa./.a./a.
+aa./.a./a/ aa./.a./a
+aa./.a./.a aa./.a./.a
+aa./.a./.. aa.
+aa./.a././ aa./.a.
+aa./.a.//a aa./.a./a
+aa./.a.//. aa./.a.
+aa./.a./// aa./.a.
+aa./.a/aaa aa./.a/aaa
+aa./.a/aa. aa./.a/aa.
+aa./.a/aa/ aa./.a/aa
+aa./.a/a.a aa./.a/a.a
+aa./.a/a.. aa./.a/a..
+aa./.a/a./ aa./.a/a.
+aa./.a/a/a aa./.a/a/a
+aa./.a/a/. aa./.a/a
+aa./.a/a// aa./.a/a
+aa./.a/.aa aa./.a/.aa
+aa./.a/.a. aa./.a/.a.
+aa./.a/.a/ aa./.a/.a
+aa./.a/..a aa./.a/..a
+aa./.a/... aa./.a/...
+aa./.a/../ aa.
+aa./.a/./a aa./.a/a
+aa./.a/./. aa./.a
+aa./.a/.// aa./.a
+aa./.a//aa aa./.a/aa
+aa./.a//a. aa./.a/a.
+aa./.a//a/ aa./.a/a
+aa./.a//.a aa./.a/.a
+aa./.a//.. aa.
+aa./.a//./ aa./.a
+aa./.a///a aa./.a/a
+aa./.a///. aa./.a
+aa./.a//// aa./.a
+aa./..aaaa aa./..aaaa
+aa./..aaa. aa./..aaa.
+aa./..aaa/ aa./..aaa
+aa./..aa.a aa./..aa.a
+aa./..aa.. aa./..aa..
+aa./..aa./ aa./..aa.
+aa./..aa/a aa./..aa/a
+aa./..aa/. aa./..aa
+aa./..aa// aa./..aa
+aa./..a.aa aa./..a.aa
+aa./..a.a. aa./..a.a.
+aa./..a.a/ aa./..a.a
+aa./..a..a aa./..a..a
+aa./..a... aa./..a...
+aa./..a../ aa./..a..
+aa./..a./a aa./..a./a
+aa./..a./. aa./..a.
+aa./..a.// aa./..a.
+aa./..a/aa aa./..a/aa
+aa./..a/a. aa./..a/a.
+aa./..a/a/ aa./..a/a
+aa./..a/.a aa./..a/.a
+aa./..a/.. aa.
+aa./..a/./ aa./..a
+aa./..a//a aa./..a/a
+aa./..a//. aa./..a
+aa./..a/// aa./..a
+aa./...aaa aa./...aaa
+aa./...aa. aa./...aa.
+aa./...aa/ aa./...aa
+aa./...a.a aa./...a.a
+aa./...a.. aa./...a..
+aa./...a./ aa./...a.
+aa./...a/a aa./...a/a
+aa./...a/. aa./...a
+aa./...a// aa./...a
+aa./....aa aa./....aa
+aa./....a. aa./....a.
+aa./....a/ aa./....a
+aa./.....a aa./.....a
+aa./...... aa./......
+aa./...../ aa./.....
+aa./..../a aa./..../a
+aa./..../. aa./....
+aa./....// aa./....
+aa./.../aa aa./.../aa
+aa./.../a. aa./.../a.
+aa./.../a/ aa./.../a
+aa./.../.a aa./.../.a
+aa./.../.. aa.
+aa./..././ aa./...
+aa./...//a aa./.../a
+aa./...//. aa./...
+aa./.../// aa./...
+aa./../aaa aaa
+aa./../aa. aa.
+aa./../aa/ aa
+aa./../a.a a.a
+aa./../a.. a..
+aa./../a./ a.
+aa./../a/a a/a
+aa./../a/. a
+aa./../a// a
+aa./../.aa .aa
+aa./../.a. .a.
+aa./../.a/ .a
+aa./../..a ..a
+aa./../... ...
+aa./../../ ..
+aa./.././a a
+aa./.././. .
+aa./../.// .
+aa./..//aa aa
+aa./..//a. a.
+aa./..//a/ a
+aa./..//.a .a
+aa./..//.. ..
+aa./..//./ .
+aa./..///a a
+aa./..///. .
+aa./..//// .
+aa././aaaa aa./aaaa
+aa././aaa. aa./aaa.
+aa././aaa/ aa./aaa
+aa././aa.a aa./aa.a
+aa././aa.. aa./aa..
+aa././aa./ aa./aa.
+aa././aa/a aa./aa/a
+aa././aa/. aa./aa
+aa././aa// aa./aa
+aa././a.aa aa./a.aa
+aa././a.a. aa./a.a.
+aa././a.a/ aa./a.a
+aa././a..a aa./a..a
+aa././a... aa./a...
+aa././a../ aa./a..
+aa././a./a aa./a./a
+aa././a./. aa./a.
+aa././a.// aa./a.
+aa././a/aa aa./a/aa
+aa././a/a. aa./a/a.
+aa././a/a/ aa./a/a
+aa././a/.a aa./a/.a
+aa././a/.. aa.
+aa././a/./ aa./a
+aa././a//a aa./a/a
+aa././a//. aa./a
+aa././a/// aa./a
+aa././.aaa aa./.aaa
+aa././.aa. aa./.aa.
+aa././.aa/ aa./.aa
+aa././.a.a aa./.a.a
+aa././.a.. aa./.a..
+aa././.a./ aa./.a.
+aa././.a/a aa./.a/a
+aa././.a/. aa./.a
+aa././.a// aa./.a
+aa././..aa aa./..aa
+aa././..a. aa./..a.
+aa././..a/ aa./..a
+aa././...a aa./...a
+aa././.... aa./....
+aa././.../ aa./...
+aa././../a a
+aa././../. .
+aa././..// .
+aa./././aa aa./aa
+aa./././a. aa./a.
+aa./././a/ aa./a
+aa./././.a aa./.a
+aa./././.. .
+aa././././ aa.
+aa./././/a aa./a
+aa./././/. aa.
+aa./././// aa.
+aa././/aaa aa./aaa
+aa././/aa. aa./aa.
+aa././/aa/ aa./aa
+aa././/a.a aa./a.a
+aa././/a.. aa./a..
+aa././/a./ aa./a.
+aa././/a/a aa./a/a
+aa././/a/. aa./a
+aa././/a// aa./a
+aa././/.aa aa./.aa
+aa././/.a. aa./.a.
+aa././/.a/ aa./.a
+aa././/..a aa./..a
+aa././/... aa./...
+aa././/../ .
+aa././/./a aa./a
+aa././/./. aa.
+aa././/.// aa.
+aa././//aa aa./aa
+aa././//a. aa./a.
+aa././//a/ aa./a
+aa././//.a aa./.a
+aa././//.. .
+aa././//./ aa.
+aa././///a aa./a
+aa././///. aa.
+aa././//// aa.
+aa.//aaaaa aa./aaaaa
+aa.//aaaa. aa./aaaa.
+aa.//aaaa/ aa./aaaa
+aa.//aaa.a aa./aaa.a
+aa.//aaa.. aa./aaa..
+aa.//aaa./ aa./aaa.
+aa.//aaa/a aa./aaa/a
+aa.//aaa/. aa./aaa
+aa.//aaa// aa./aaa
+aa.//aa.aa aa./aa.aa
+aa.//aa.a. aa./aa.a.
+aa.//aa.a/ aa./aa.a
+aa.//aa..a aa./aa..a
+aa.//aa... aa./aa...
+aa.//aa../ aa./aa..
+aa.//aa./a aa./aa./a
+aa.//aa./. aa./aa.
+aa.//aa.// aa./aa.
+aa.//aa/aa aa./aa/aa
+aa.//aa/a. aa./aa/a.
+aa.//aa/a/ aa./aa/a
+aa.//aa/.a aa./aa/.a
+aa.//aa/.. aa.
+aa.//aa/./ aa./aa
+aa.//aa//a aa./aa/a
+aa.//aa//. aa./aa
+aa.//aa/// aa./aa
+aa.//a.aaa aa./a.aaa
+aa.//a.aa. aa./a.aa.
+aa.//a.aa/ aa./a.aa
+aa.//a.a.a aa./a.a.a
+aa.//a.a.. aa./a.a..
+aa.//a.a./ aa./a.a.
+aa.//a.a/a aa./a.a/a
+aa.//a.a/. aa./a.a
+aa.//a.a// aa./a.a
+aa.//a..aa aa./a..aa
+aa.//a..a. aa./a..a.
+aa.//a..a/ aa./a..a
+aa.//a...a aa./a...a
+aa.//a.... aa./a....
+aa.//a.../ aa./a...
+aa.//a../a aa./a../a
+aa.//a../. aa./a..
+aa.//a..// aa./a..
+aa.//a./aa aa./a./aa
+aa.//a./a. aa./a./a.
+aa.//a./a/ aa./a./a
+aa.//a./.a aa./a./.a
+aa.//a./.. aa.
+aa.//a././ aa./a.
+aa.//a.//a aa./a./a
+aa.//a.//. aa./a.
+aa.//a./// aa./a.
+aa.//a/aaa aa./a/aaa
+aa.//a/aa. aa./a/aa.
+aa.//a/aa/ aa./a/aa
+aa.//a/a.a aa./a/a.a
+aa.//a/a.. aa./a/a..
+aa.//a/a./ aa./a/a.
+aa.//a/a/a aa./a/a/a
+aa.//a/a/. aa./a/a
+aa.//a/a// aa./a/a
+aa.//a/.aa aa./a/.aa
+aa.//a/.a. aa./a/.a.
+aa.//a/.a/ aa./a/.a
+aa.//a/..a aa./a/..a
+aa.//a/... aa./a/...
+aa.//a/../ aa.
+aa.//a/./a aa./a/a
+aa.//a/./. aa./a
+aa.//a/.// aa./a
+aa.//a//aa aa./a/aa
+aa.//a//a. aa./a/a.
+aa.//a//a/ aa./a/a
+aa.//a//.a aa./a/.a
+aa.//a//.. aa.
+aa.//a//./ aa./a
+aa.//a///a aa./a/a
+aa.//a///. aa./a
+aa.//a//// aa./a
+aa.//.aaaa aa./.aaaa
+aa.//.aaa. aa./.aaa.
+aa.//.aaa/ aa./.aaa
+aa.//.aa.a aa./.aa.a
+aa.//.aa.. aa./.aa..
+aa.//.aa./ aa./.aa.
+aa.//.aa/a aa./.aa/a
+aa.//.aa/. aa./.aa
+aa.//.aa// aa./.aa
+aa.//.a.aa aa./.a.aa
+aa.//.a.a. aa./.a.a.
+aa.//.a.a/ aa./.a.a
+aa.//.a..a aa./.a..a
+aa.//.a... aa./.a...
+aa.//.a../ aa./.a..
+aa.//.a./a aa./.a./a
+aa.//.a./. aa./.a.
+aa.//.a.// aa./.a.
+aa.//.a/aa aa./.a/aa
+aa.//.a/a. aa./.a/a.
+aa.//.a/a/ aa./.a/a
+aa.//.a/.a aa./.a/.a
+aa.//.a/.. aa.
+aa.//.a/./ aa./.a
+aa.//.a//a aa./.a/a
+aa.//.a//. aa./.a
+aa.//.a/// aa./.a
+aa.//..aaa aa./..aaa
+aa.//..aa. aa./..aa.
+aa.//..aa/ aa./..aa
+aa.//..a.a aa./..a.a
+aa.//..a.. aa./..a..
+aa.//..a./ aa./..a.
+aa.//..a/a aa./..a/a
+aa.//..a/. aa./..a
+aa.//..a// aa./..a
+aa.//...aa aa./...aa
+aa.//...a. aa./...a.
+aa.//...a/ aa./...a
+aa.//....a aa./....a
+aa.//..... aa./.....
+aa.//..../ aa./....
+aa.//.../a aa./.../a
+aa.//.../. aa./...
+aa.//...// aa./...
+aa.//../aa aa
+aa.//../a. a.
+aa.//../a/ a
+aa.//../.a .a
+aa.//../.. ..
+aa.//.././ .
+aa.//..//a a
+aa.//..//. .
+aa.//../// .
+aa.//./aaa aa./aaa
+aa.//./aa. aa./aa.
+aa.//./aa/ aa./aa
+aa.//./a.a aa./a.a
+aa.//./a.. aa./a..
+aa.//./a./ aa./a.
+aa.//./a/a aa./a/a
+aa.//./a/. aa./a
+aa.//./a// aa./a
+aa.//./.aa aa./.aa
+aa.//./.a. aa./.a.
+aa.//./.a/ aa./.a
+aa.//./..a aa./..a
+aa.//./... aa./...
+aa.//./../ .
+aa.//././a aa./a
+aa.//././. aa.
+aa.//./.// aa.
+aa.//.//aa aa./aa
+aa.//.//a. aa./a.
+aa.//.//a/ aa./a
+aa.//.//.a aa./.a
+aa.//.//.. .
+aa.//.//./ aa.
+aa.//.///a aa./a
+aa.//.///. aa.
+aa.//.//// aa.
+aa.///aaaa aa./aaaa
+aa.///aaa. aa./aaa.
+aa.///aaa/ aa./aaa
+aa.///aa.a aa./aa.a
+aa.///aa.. aa./aa..
+aa.///aa./ aa./aa.
+aa.///aa/a aa./aa/a
+aa.///aa/. aa./aa
+aa.///aa// aa./aa
+aa.///a.aa aa./a.aa
+aa.///a.a. aa./a.a.
+aa.///a.a/ aa./a.a
+aa.///a..a aa./a..a
+aa.///a... aa./a...
+aa.///a../ aa./a..
+aa.///a./a aa./a./a
+aa.///a./. aa./a.
+aa.///a.// aa./a.
+aa.///a/aa aa./a/aa
+aa.///a/a. aa./a/a.
+aa.///a/a/ aa./a/a
+aa.///a/.a aa./a/.a
+aa.///a/.. aa.
+aa.///a/./ aa./a
+aa.///a//a aa./a/a
+aa.///a//. aa./a
+aa.///a/// aa./a
+aa.///.aaa aa./.aaa
+aa.///.aa. aa./.aa.
+aa.///.aa/ aa./.aa
+aa.///.a.a aa./.a.a
+aa.///.a.. aa./.a..
+aa.///.a./ aa./.a.
+aa.///.a/a aa./.a/a
+aa.///.a/. aa./.a
+aa.///.a// aa./.a
+aa.///..aa aa./..aa
+aa.///..a. aa./..a.
+aa.///..a/ aa./..a
+aa.///...a aa./...a
+aa.///.... aa./....
+aa.///.../ aa./...
+aa.///../a a
+aa.///../. .
+aa.///..// .
+aa.///./aa aa./aa
+aa.///./a. aa./a.
+aa.///./a/ aa./a
+aa.///./.a aa./.a
+aa.///./.. .
+aa.///././ aa.
+aa.///.//a aa./a
+aa.///.//. aa.
+aa.///./// aa.
+aa.////aaa aa./aaa
+aa.////aa. aa./aa.
+aa.////aa/ aa./aa
+aa.////a.a aa./a.a
+aa.////a.. aa./a..
+aa.////a./ aa./a.
+aa.////a/a aa./a/a
+aa.////a/. aa./a
+aa.////a// aa./a
+aa.////.aa aa./.aa
+aa.////.a. aa./.a.
+aa.////.a/ aa./.a
+aa.////..a aa./..a
+aa.////... aa./...
+aa.////../ .
+aa.////./a aa./a
+aa.////./. aa.
+aa.////.// aa.
+aa./////aa aa./aa
+aa./////a. aa./a.
+aa./////a/ aa./a
+aa./////.a aa./.a
+aa./////.. .
+aa./////./ aa.
+aa.//////a aa./a
+aa.//////. aa.
+aa./////// aa.
+aa/aaaaaaa aa/aaaaaaa
+aa/aaaaaa. aa/aaaaaa.
+aa/aaaaaa/ aa/aaaaaa
+aa/aaaaa.a aa/aaaaa.a
+aa/aaaaa.. aa/aaaaa..
+aa/aaaaa./ aa/aaaaa.
+aa/aaaaa/a aa/aaaaa/a
+aa/aaaaa/. aa/aaaaa
+aa/aaaaa// aa/aaaaa
+aa/aaaa.aa aa/aaaa.aa
+aa/aaaa.a. aa/aaaa.a.
+aa/aaaa.a/ aa/aaaa.a
+aa/aaaa..a aa/aaaa..a
+aa/aaaa... aa/aaaa...
+aa/aaaa../ aa/aaaa..
+aa/aaaa./a aa/aaaa./a
+aa/aaaa./. aa/aaaa.
+aa/aaaa.// aa/aaaa.
+aa/aaaa/aa aa/aaaa/aa
+aa/aaaa/a. aa/aaaa/a.
+aa/aaaa/a/ aa/aaaa/a
+aa/aaaa/.a aa/aaaa/.a
+aa/aaaa/.. aa
+aa/aaaa/./ aa/aaaa
+aa/aaaa//a aa/aaaa/a
+aa/aaaa//. aa/aaaa
+aa/aaaa/// aa/aaaa
+aa/aaa.aaa aa/aaa.aaa
+aa/aaa.aa. aa/aaa.aa.
+aa/aaa.aa/ aa/aaa.aa
+aa/aaa.a.a aa/aaa.a.a
+aa/aaa.a.. aa/aaa.a..
+aa/aaa.a./ aa/aaa.a.
+aa/aaa.a/a aa/aaa.a/a
+aa/aaa.a/. aa/aaa.a
+aa/aaa.a// aa/aaa.a
+aa/aaa..aa aa/aaa..aa
+aa/aaa..a. aa/aaa..a.
+aa/aaa..a/ aa/aaa..a
+aa/aaa...a aa/aaa...a
+aa/aaa.... aa/aaa....
+aa/aaa.../ aa/aaa...
+aa/aaa../a aa/aaa../a
+aa/aaa../. aa/aaa..
+aa/aaa..// aa/aaa..
+aa/aaa./aa aa/aaa./aa
+aa/aaa./a. aa/aaa./a.
+aa/aaa./a/ aa/aaa./a
+aa/aaa./.a aa/aaa./.a
+aa/aaa./.. aa
+aa/aaa././ aa/aaa.
+aa/aaa.//a aa/aaa./a
+aa/aaa.//. aa/aaa.
+aa/aaa./// aa/aaa.
+aa/aaa/aaa aa/aaa/aaa
+aa/aaa/aa. aa/aaa/aa.
+aa/aaa/aa/ aa/aaa/aa
+aa/aaa/a.a aa/aaa/a.a
+aa/aaa/a.. aa/aaa/a..
+aa/aaa/a./ aa/aaa/a.
+aa/aaa/a/a aa/aaa/a/a
+aa/aaa/a/. aa/aaa/a
+aa/aaa/a// aa/aaa/a
+aa/aaa/.aa aa/aaa/.aa
+aa/aaa/.a. aa/aaa/.a.
+aa/aaa/.a/ aa/aaa/.a
+aa/aaa/..a aa/aaa/..a
+aa/aaa/... aa/aaa/...
+aa/aaa/../ aa
+aa/aaa/./a aa/aaa/a
+aa/aaa/./. aa/aaa
+aa/aaa/.// aa/aaa
+aa/aaa//aa aa/aaa/aa
+aa/aaa//a. aa/aaa/a.
+aa/aaa//a/ aa/aaa/a
+aa/aaa//.a aa/aaa/.a
+aa/aaa//.. aa
+aa/aaa//./ aa/aaa
+aa/aaa///a aa/aaa/a
+aa/aaa///. aa/aaa
+aa/aaa//// aa/aaa
+aa/aa.aaaa aa/aa.aaaa
+aa/aa.aaa. aa/aa.aaa.
+aa/aa.aaa/ aa/aa.aaa
+aa/aa.aa.a aa/aa.aa.a
+aa/aa.aa.. aa/aa.aa..
+aa/aa.aa./ aa/aa.aa.
+aa/aa.aa/a aa/aa.aa/a
+aa/aa.aa/. aa/aa.aa
+aa/aa.aa// aa/aa.aa
+aa/aa.a.aa aa/aa.a.aa
+aa/aa.a.a. aa/aa.a.a.
+aa/aa.a.a/ aa/aa.a.a
+aa/aa.a..a aa/aa.a..a
+aa/aa.a... aa/aa.a...
+aa/aa.a../ aa/aa.a..
+aa/aa.a./a aa/aa.a./a
+aa/aa.a./. aa/aa.a.
+aa/aa.a.// aa/aa.a.
+aa/aa.a/aa aa/aa.a/aa
+aa/aa.a/a. aa/aa.a/a.
+aa/aa.a/a/ aa/aa.a/a
+aa/aa.a/.a aa/aa.a/.a
+aa/aa.a/.. aa
+aa/aa.a/./ aa/aa.a
+aa/aa.a//a aa/aa.a/a
+aa/aa.a//. aa/aa.a
+aa/aa.a/// aa/aa.a
+aa/aa..aaa aa/aa..aaa
+aa/aa..aa. aa/aa..aa.
+aa/aa..aa/ aa/aa..aa
+aa/aa..a.a aa/aa..a.a
+aa/aa..a.. aa/aa..a..
+aa/aa..a./ aa/aa..a.
+aa/aa..a/a aa/aa..a/a
+aa/aa..a/. aa/aa..a
+aa/aa..a// aa/aa..a
+aa/aa...aa aa/aa...aa
+aa/aa...a. aa/aa...a.
+aa/aa...a/ aa/aa...a
+aa/aa....a aa/aa....a
+aa/aa..... aa/aa.....
+aa/aa..../ aa/aa....
+aa/aa.../a aa/aa.../a
+aa/aa.../. aa/aa...
+aa/aa...// aa/aa...
+aa/aa../aa aa/aa../aa
+aa/aa../a. aa/aa../a.
+aa/aa../a/ aa/aa../a
+aa/aa../.a aa/aa../.a
+aa/aa../.. aa
+aa/aa.././ aa/aa..
+aa/aa..//a aa/aa../a
+aa/aa..//. aa/aa..
+aa/aa../// aa/aa..
+aa/aa./aaa aa/aa./aaa
+aa/aa./aa. aa/aa./aa.
+aa/aa./aa/ aa/aa./aa
+aa/aa./a.a aa/aa./a.a
+aa/aa./a.. aa/aa./a..
+aa/aa./a./ aa/aa./a.
+aa/aa./a/a aa/aa./a/a
+aa/aa./a/. aa/aa./a
+aa/aa./a// aa/aa./a
+aa/aa./.aa aa/aa./.aa
+aa/aa./.a. aa/aa./.a.
+aa/aa./.a/ aa/aa./.a
+aa/aa./..a aa/aa./..a
+aa/aa./... aa/aa./...
+aa/aa./../ aa
+aa/aa././a aa/aa./a
+aa/aa././. aa/aa.
+aa/aa./.// aa/aa.
+aa/aa.//aa aa/aa./aa
+aa/aa.//a. aa/aa./a.
+aa/aa.//a/ aa/aa./a
+aa/aa.//.a aa/aa./.a
+aa/aa.//.. aa
+aa/aa.//./ aa/aa.
+aa/aa.///a aa/aa./a
+aa/aa.///. aa/aa.
+aa/aa.//// aa/aa.
+aa/aa/aaaa aa/aa/aaaa
+aa/aa/aaa. aa/aa/aaa.
+aa/aa/aaa/ aa/aa/aaa
+aa/aa/aa.a aa/aa/aa.a
+aa/aa/aa.. aa/aa/aa..
+aa/aa/aa./ aa/aa/aa.
+aa/aa/aa/a aa/aa/aa/a
+aa/aa/aa/. aa/aa/aa
+aa/aa/aa// aa/aa/aa
+aa/aa/a.aa aa/aa/a.aa
+aa/aa/a.a. aa/aa/a.a.
+aa/aa/a.a/ aa/aa/a.a
+aa/aa/a..a aa/aa/a..a
+aa/aa/a... aa/aa/a...
+aa/aa/a../ aa/aa/a..
+aa/aa/a./a aa/aa/a./a
+aa/aa/a./. aa/aa/a.
+aa/aa/a.// aa/aa/a.
+aa/aa/a/aa aa/aa/a/aa
+aa/aa/a/a. aa/aa/a/a.
+aa/aa/a/a/ aa/aa/a/a
+aa/aa/a/.a aa/aa/a/.a
+aa/aa/a/.. aa/aa
+aa/aa/a/./ aa/aa/a
+aa/aa/a//a aa/aa/a/a
+aa/aa/a//. aa/aa/a
+aa/aa/a/// aa/aa/a
+aa/aa/.aaa aa/aa/.aaa
+aa/aa/.aa. aa/aa/.aa.
+aa/aa/.aa/ aa/aa/.aa
+aa/aa/.a.a aa/aa/.a.a
+aa/aa/.a.. aa/aa/.a..
+aa/aa/.a./ aa/aa/.a.
+aa/aa/.a/a aa/aa/.a/a
+aa/aa/.a/. aa/aa/.a
+aa/aa/.a// aa/aa/.a
+aa/aa/..aa aa/aa/..aa
+aa/aa/..a. aa/aa/..a.
+aa/aa/..a/ aa/aa/..a
+aa/aa/...a aa/aa/...a
+aa/aa/.... aa/aa/....
+aa/aa/.../ aa/aa/...
+aa/aa/../a aa/a
+aa/aa/../. aa
+aa/aa/..// aa
+aa/aa/./aa aa/aa/aa
+aa/aa/./a. aa/aa/a.
+aa/aa/./a/ aa/aa/a
+aa/aa/./.a aa/aa/.a
+aa/aa/./.. aa
+aa/aa/././ aa/aa
+aa/aa/.//a aa/aa/a
+aa/aa/.//. aa/aa
+aa/aa/./// aa/aa
+aa/aa//aaa aa/aa/aaa
+aa/aa//aa. aa/aa/aa.
+aa/aa//aa/ aa/aa/aa
+aa/aa//a.a aa/aa/a.a
+aa/aa//a.. aa/aa/a..
+aa/aa//a./ aa/aa/a.
+aa/aa//a/a aa/aa/a/a
+aa/aa//a/. aa/aa/a
+aa/aa//a// aa/aa/a
+aa/aa//.aa aa/aa/.aa
+aa/aa//.a. aa/aa/.a.
+aa/aa//.a/ aa/aa/.a
+aa/aa//..a aa/aa/..a
+aa/aa//... aa/aa/...
+aa/aa//../ aa
+aa/aa//./a aa/aa/a
+aa/aa//./. aa/aa
+aa/aa//.// aa/aa
+aa/aa///aa aa/aa/aa
+aa/aa///a. aa/aa/a.
+aa/aa///a/ aa/aa/a
+aa/aa///.a aa/aa/.a
+aa/aa///.. aa
+aa/aa///./ aa/aa
+aa/aa////a aa/aa/a
+aa/aa////. aa/aa
+aa/aa///// aa/aa
+aa/a.aaaaa aa/a.aaaaa
+aa/a.aaaa. aa/a.aaaa.
+aa/a.aaaa/ aa/a.aaaa
+aa/a.aaa.a aa/a.aaa.a
+aa/a.aaa.. aa/a.aaa..
+aa/a.aaa./ aa/a.aaa.
+aa/a.aaa/a aa/a.aaa/a
+aa/a.aaa/. aa/a.aaa
+aa/a.aaa// aa/a.aaa
+aa/a.aa.aa aa/a.aa.aa
+aa/a.aa.a. aa/a.aa.a.
+aa/a.aa.a/ aa/a.aa.a
+aa/a.aa..a aa/a.aa..a
+aa/a.aa... aa/a.aa...
+aa/a.aa../ aa/a.aa..
+aa/a.aa./a aa/a.aa./a
+aa/a.aa./. aa/a.aa.
+aa/a.aa.// aa/a.aa.
+aa/a.aa/aa aa/a.aa/aa
+aa/a.aa/a. aa/a.aa/a.
+aa/a.aa/a/ aa/a.aa/a
+aa/a.aa/.a aa/a.aa/.a
+aa/a.aa/.. aa
+aa/a.aa/./ aa/a.aa
+aa/a.aa//a aa/a.aa/a
+aa/a.aa//. aa/a.aa
+aa/a.aa/// aa/a.aa
+aa/a.a.aaa aa/a.a.aaa
+aa/a.a.aa. aa/a.a.aa.
+aa/a.a.aa/ aa/a.a.aa
+aa/a.a.a.a aa/a.a.a.a
+aa/a.a.a.. aa/a.a.a..
+aa/a.a.a./ aa/a.a.a.
+aa/a.a.a/a aa/a.a.a/a
+aa/a.a.a/. aa/a.a.a
+aa/a.a.a// aa/a.a.a
+aa/a.a..aa aa/a.a..aa
+aa/a.a..a. aa/a.a..a.
+aa/a.a..a/ aa/a.a..a
+aa/a.a...a aa/a.a...a
+aa/a.a.... aa/a.a....
+aa/a.a.../ aa/a.a...
+aa/a.a../a aa/a.a../a
+aa/a.a../. aa/a.a..
+aa/a.a..// aa/a.a..
+aa/a.a./aa aa/a.a./aa
+aa/a.a./a. aa/a.a./a.
+aa/a.a./a/ aa/a.a./a
+aa/a.a./.a aa/a.a./.a
+aa/a.a./.. aa
+aa/a.a././ aa/a.a.
+aa/a.a.//a aa/a.a./a
+aa/a.a.//. aa/a.a.
+aa/a.a./// aa/a.a.
+aa/a.a/aaa aa/a.a/aaa
+aa/a.a/aa. aa/a.a/aa.
+aa/a.a/aa/ aa/a.a/aa
+aa/a.a/a.a aa/a.a/a.a
+aa/a.a/a.. aa/a.a/a..
+aa/a.a/a./ aa/a.a/a.
+aa/a.a/a/a aa/a.a/a/a
+aa/a.a/a/. aa/a.a/a
+aa/a.a/a// aa/a.a/a
+aa/a.a/.aa aa/a.a/.aa
+aa/a.a/.a. aa/a.a/.a.
+aa/a.a/.a/ aa/a.a/.a
+aa/a.a/..a aa/a.a/..a
+aa/a.a/... aa/a.a/...
+aa/a.a/../ aa
+aa/a.a/./a aa/a.a/a
+aa/a.a/./. aa/a.a
+aa/a.a/.// aa/a.a
+aa/a.a//aa aa/a.a/aa
+aa/a.a//a. aa/a.a/a.
+aa/a.a//a/ aa/a.a/a
+aa/a.a//.a aa/a.a/.a
+aa/a.a//.. aa
+aa/a.a//./ aa/a.a
+aa/a.a///a aa/a.a/a
+aa/a.a///. aa/a.a
+aa/a.a//// aa/a.a
+aa/a..aaaa aa/a..aaaa
+aa/a..aaa. aa/a..aaa.
+aa/a..aaa/ aa/a..aaa
+aa/a..aa.a aa/a..aa.a
+aa/a..aa.. aa/a..aa..
+aa/a..aa./ aa/a..aa.
+aa/a..aa/a aa/a..aa/a
+aa/a..aa/. aa/a..aa
+aa/a..aa// aa/a..aa
+aa/a..a.aa aa/a..a.aa
+aa/a..a.a. aa/a..a.a.
+aa/a..a.a/ aa/a..a.a
+aa/a..a..a aa/a..a..a
+aa/a..a... aa/a..a...
+aa/a..a../ aa/a..a..
+aa/a..a./a aa/a..a./a
+aa/a..a./. aa/a..a.
+aa/a..a.// aa/a..a.
+aa/a..a/aa aa/a..a/aa
+aa/a..a/a. aa/a..a/a.
+aa/a..a/a/ aa/a..a/a
+aa/a..a/.a aa/a..a/.a
+aa/a..a/.. aa
+aa/a..a/./ aa/a..a
+aa/a..a//a aa/a..a/a
+aa/a..a//. aa/a..a
+aa/a..a/// aa/a..a
+aa/a...aaa aa/a...aaa
+aa/a...aa. aa/a...aa.
+aa/a...aa/ aa/a...aa
+aa/a...a.a aa/a...a.a
+aa/a...a.. aa/a...a..
+aa/a...a./ aa/a...a.
+aa/a...a/a aa/a...a/a
+aa/a...a/. aa/a...a
+aa/a...a// aa/a...a
+aa/a....aa aa/a....aa
+aa/a....a. aa/a....a.
+aa/a....a/ aa/a....a
+aa/a.....a aa/a.....a
+aa/a...... aa/a......
+aa/a...../ aa/a.....
+aa/a..../a aa/a..../a
+aa/a..../. aa/a....
+aa/a....// aa/a....
+aa/a.../aa aa/a.../aa
+aa/a.../a. aa/a.../a.
+aa/a.../a/ aa/a.../a
+aa/a.../.a aa/a.../.a
+aa/a.../.. aa
+aa/a..././ aa/a...
+aa/a...//a aa/a.../a
+aa/a...//. aa/a...
+aa/a.../// aa/a...
+aa/a../aaa aa/a../aaa
+aa/a../aa. aa/a../aa.
+aa/a../aa/ aa/a../aa
+aa/a../a.a aa/a../a.a
+aa/a../a.. aa/a../a..
+aa/a../a./ aa/a../a.
+aa/a../a/a aa/a../a/a
+aa/a../a/. aa/a../a
+aa/a../a// aa/a../a
+aa/a../.aa aa/a../.aa
+aa/a../.a. aa/a../.a.
+aa/a../.a/ aa/a../.a
+aa/a../..a aa/a../..a
+aa/a../... aa/a../...
+aa/a../../ aa
+aa/a.././a aa/a../a
+aa/a.././. aa/a..
+aa/a../.// aa/a..
+aa/a..//aa aa/a../aa
+aa/a..//a. aa/a../a.
+aa/a..//a/ aa/a../a
+aa/a..//.a aa/a../.a
+aa/a..//.. aa
+aa/a..//./ aa/a..
+aa/a..///a aa/a../a
+aa/a..///. aa/a..
+aa/a..//// aa/a..
+aa/a./aaaa aa/a./aaaa
+aa/a./aaa. aa/a./aaa.
+aa/a./aaa/ aa/a./aaa
+aa/a./aa.a aa/a./aa.a
+aa/a./aa.. aa/a./aa..
+aa/a./aa./ aa/a./aa.
+aa/a./aa/a aa/a./aa/a
+aa/a./aa/. aa/a./aa
+aa/a./aa// aa/a./aa
+aa/a./a.aa aa/a./a.aa
+aa/a./a.a. aa/a./a.a.
+aa/a./a.a/ aa/a./a.a
+aa/a./a..a aa/a./a..a
+aa/a./a... aa/a./a...
+aa/a./a../ aa/a./a..
+aa/a./a./a aa/a./a./a
+aa/a./a./. aa/a./a.
+aa/a./a.// aa/a./a.
+aa/a./a/aa aa/a./a/aa
+aa/a./a/a. aa/a./a/a.
+aa/a./a/a/ aa/a./a/a
+aa/a./a/.a aa/a./a/.a
+aa/a./a/.. aa/a.
+aa/a./a/./ aa/a./a
+aa/a./a//a aa/a./a/a
+aa/a./a//. aa/a./a
+aa/a./a/// aa/a./a
+aa/a./.aaa aa/a./.aaa
+aa/a./.aa. aa/a./.aa.
+aa/a./.aa/ aa/a./.aa
+aa/a./.a.a aa/a./.a.a
+aa/a./.a.. aa/a./.a..
+aa/a./.a./ aa/a./.a.
+aa/a./.a/a aa/a./.a/a
+aa/a./.a/. aa/a./.a
+aa/a./.a// aa/a./.a
+aa/a./..aa aa/a./..aa
+aa/a./..a. aa/a./..a.
+aa/a./..a/ aa/a./..a
+aa/a./...a aa/a./...a
+aa/a./.... aa/a./....
+aa/a./.../ aa/a./...
+aa/a./../a aa/a
+aa/a./../. aa
+aa/a./..// aa
+aa/a././aa aa/a./aa
+aa/a././a. aa/a./a.
+aa/a././a/ aa/a./a
+aa/a././.a aa/a./.a
+aa/a././.. aa
+aa/a./././ aa/a.
+aa/a././/a aa/a./a
+aa/a././/. aa/a.
+aa/a././// aa/a.
+aa/a.//aaa aa/a./aaa
+aa/a.//aa. aa/a./aa.
+aa/a.//aa/ aa/a./aa
+aa/a.//a.a aa/a./a.a
+aa/a.//a.. aa/a./a..
+aa/a.//a./ aa/a./a.
+aa/a.//a/a aa/a./a/a
+aa/a.//a/. aa/a./a
+aa/a.//a// aa/a./a
+aa/a.//.aa aa/a./.aa
+aa/a.//.a. aa/a./.a.
+aa/a.//.a/ aa/a./.a
+aa/a.//..a aa/a./..a
+aa/a.//... aa/a./...
+aa/a.//../ aa
+aa/a.//./a aa/a./a
+aa/a.//./. aa/a.
+aa/a.//.// aa/a.
+aa/a.///aa aa/a./aa
+aa/a.///a. aa/a./a.
+aa/a.///a/ aa/a./a
+aa/a.///.a aa/a./.a
+aa/a.///.. aa
+aa/a.///./ aa/a.
+aa/a.////a aa/a./a
+aa/a.////. aa/a.
+aa/a.///// aa/a.
+aa/a/aaaaa aa/a/aaaaa
+aa/a/aaaa. aa/a/aaaa.
+aa/a/aaaa/ aa/a/aaaa
+aa/a/aaa.a aa/a/aaa.a
+aa/a/aaa.. aa/a/aaa..
+aa/a/aaa./ aa/a/aaa.
+aa/a/aaa/a aa/a/aaa/a
+aa/a/aaa/. aa/a/aaa
+aa/a/aaa// aa/a/aaa
+aa/a/aa.aa aa/a/aa.aa
+aa/a/aa.a. aa/a/aa.a.
+aa/a/aa.a/ aa/a/aa.a
+aa/a/aa..a aa/a/aa..a
+aa/a/aa... aa/a/aa...
+aa/a/aa../ aa/a/aa..
+aa/a/aa./a aa/a/aa./a
+aa/a/aa./. aa/a/aa.
+aa/a/aa.// aa/a/aa.
+aa/a/aa/aa aa/a/aa/aa
+aa/a/aa/a. aa/a/aa/a.
+aa/a/aa/a/ aa/a/aa/a
+aa/a/aa/.a aa/a/aa/.a
+aa/a/aa/.. aa/a
+aa/a/aa/./ aa/a/aa
+aa/a/aa//a aa/a/aa/a
+aa/a/aa//. aa/a/aa
+aa/a/aa/// aa/a/aa
+aa/a/a.aaa aa/a/a.aaa
+aa/a/a.aa. aa/a/a.aa.
+aa/a/a.aa/ aa/a/a.aa
+aa/a/a.a.a aa/a/a.a.a
+aa/a/a.a.. aa/a/a.a..
+aa/a/a.a./ aa/a/a.a.
+aa/a/a.a/a aa/a/a.a/a
+aa/a/a.a/. aa/a/a.a
+aa/a/a.a// aa/a/a.a
+aa/a/a..aa aa/a/a..aa
+aa/a/a..a. aa/a/a..a.
+aa/a/a..a/ aa/a/a..a
+aa/a/a...a aa/a/a...a
+aa/a/a.... aa/a/a....
+aa/a/a.../ aa/a/a...
+aa/a/a../a aa/a/a../a
+aa/a/a../. aa/a/a..
+aa/a/a..// aa/a/a..
+aa/a/a./aa aa/a/a./aa
+aa/a/a./a. aa/a/a./a.
+aa/a/a./a/ aa/a/a./a
+aa/a/a./.a aa/a/a./.a
+aa/a/a./.. aa/a
+aa/a/a././ aa/a/a.
+aa/a/a.//a aa/a/a./a
+aa/a/a.//. aa/a/a.
+aa/a/a./// aa/a/a.
+aa/a/a/aaa aa/a/a/aaa
+aa/a/a/aa. aa/a/a/aa.
+aa/a/a/aa/ aa/a/a/aa
+aa/a/a/a.a aa/a/a/a.a
+aa/a/a/a.. aa/a/a/a..
+aa/a/a/a./ aa/a/a/a.
+aa/a/a/a/a aa/a/a/a/a
+aa/a/a/a/. aa/a/a/a
+aa/a/a/a// aa/a/a/a
+aa/a/a/.aa aa/a/a/.aa
+aa/a/a/.a. aa/a/a/.a.
+aa/a/a/.a/ aa/a/a/.a
+aa/a/a/..a aa/a/a/..a
+aa/a/a/... aa/a/a/...
+aa/a/a/../ aa/a
+aa/a/a/./a aa/a/a/a
+aa/a/a/./. aa/a/a
+aa/a/a/.// aa/a/a
+aa/a/a//aa aa/a/a/aa
+aa/a/a//a. aa/a/a/a.
+aa/a/a//a/ aa/a/a/a
+aa/a/a//.a aa/a/a/.a
+aa/a/a//.. aa/a
+aa/a/a//./ aa/a/a
+aa/a/a///a aa/a/a/a
+aa/a/a///. aa/a/a
+aa/a/a//// aa/a/a
+aa/a/.aaaa aa/a/.aaaa
+aa/a/.aaa. aa/a/.aaa.
+aa/a/.aaa/ aa/a/.aaa
+aa/a/.aa.a aa/a/.aa.a
+aa/a/.aa.. aa/a/.aa..
+aa/a/.aa./ aa/a/.aa.
+aa/a/.aa/a aa/a/.aa/a
+aa/a/.aa/. aa/a/.aa
+aa/a/.aa// aa/a/.aa
+aa/a/.a.aa aa/a/.a.aa
+aa/a/.a.a. aa/a/.a.a.
+aa/a/.a.a/ aa/a/.a.a
+aa/a/.a..a aa/a/.a..a
+aa/a/.a... aa/a/.a...
+aa/a/.a../ aa/a/.a..
+aa/a/.a./a aa/a/.a./a
+aa/a/.a./. aa/a/.a.
+aa/a/.a.// aa/a/.a.
+aa/a/.a/aa aa/a/.a/aa
+aa/a/.a/a. aa/a/.a/a.
+aa/a/.a/a/ aa/a/.a/a
+aa/a/.a/.a aa/a/.a/.a
+aa/a/.a/.. aa/a
+aa/a/.a/./ aa/a/.a
+aa/a/.a//a aa/a/.a/a
+aa/a/.a//. aa/a/.a
+aa/a/.a/// aa/a/.a
+aa/a/..aaa aa/a/..aaa
+aa/a/..aa. aa/a/..aa.
+aa/a/..aa/ aa/a/..aa
+aa/a/..a.a aa/a/..a.a
+aa/a/..a.. aa/a/..a..
+aa/a/..a./ aa/a/..a.
+aa/a/..a/a aa/a/..a/a
+aa/a/..a/. aa/a/..a
+aa/a/..a// aa/a/..a
+aa/a/...aa aa/a/...aa
+aa/a/...a. aa/a/...a.
+aa/a/...a/ aa/a/...a
+aa/a/....a aa/a/....a
+aa/a/..... aa/a/.....
+aa/a/..../ aa/a/....
+aa/a/.../a aa/a/.../a
+aa/a/.../. aa/a/...
+aa/a/...// aa/a/...
+aa/a/../aa aa/aa
+aa/a/../a. aa/a.
+aa/a/../a/ aa/a
+aa/a/../.a aa/.a
+aa/a/../.. .
+aa/a/.././ aa
+aa/a/..//a aa/a
+aa/a/..//. aa
+aa/a/../// aa
+aa/a/./aaa aa/a/aaa
+aa/a/./aa. aa/a/aa.
+aa/a/./aa/ aa/a/aa
+aa/a/./a.a aa/a/a.a
+aa/a/./a.. aa/a/a..
+aa/a/./a./ aa/a/a.
+aa/a/./a/a aa/a/a/a
+aa/a/./a/. aa/a/a
+aa/a/./a// aa/a/a
+aa/a/./.aa aa/a/.aa
+aa/a/./.a. aa/a/.a.
+aa/a/./.a/ aa/a/.a
+aa/a/./..a aa/a/..a
+aa/a/./... aa/a/...
+aa/a/./../ aa
+aa/a/././a aa/a/a
+aa/a/././. aa/a
+aa/a/./.// aa/a
+aa/a/.//aa aa/a/aa
+aa/a/.//a. aa/a/a.
+aa/a/.//a/ aa/a/a
+aa/a/.//.a aa/a/.a
+aa/a/.//.. aa
+aa/a/.//./ aa/a
+aa/a/.///a aa/a/a
+aa/a/.///. aa/a
+aa/a/.//// aa/a
+aa/a//aaaa aa/a/aaaa
+aa/a//aaa. aa/a/aaa.
+aa/a//aaa/ aa/a/aaa
+aa/a//aa.a aa/a/aa.a
+aa/a//aa.. aa/a/aa..
+aa/a//aa./ aa/a/aa.
+aa/a//aa/a aa/a/aa/a
+aa/a//aa/. aa/a/aa
+aa/a//aa// aa/a/aa
+aa/a//a.aa aa/a/a.aa
+aa/a//a.a. aa/a/a.a.
+aa/a//a.a/ aa/a/a.a
+aa/a//a..a aa/a/a..a
+aa/a//a... aa/a/a...
+aa/a//a../ aa/a/a..
+aa/a//a./a aa/a/a./a
+aa/a//a./. aa/a/a.
+aa/a//a.// aa/a/a.
+aa/a//a/aa aa/a/a/aa
+aa/a//a/a. aa/a/a/a.
+aa/a//a/a/ aa/a/a/a
+aa/a//a/.a aa/a/a/.a
+aa/a//a/.. aa/a
+aa/a//a/./ aa/a/a
+aa/a//a//a aa/a/a/a
+aa/a//a//. aa/a/a
+aa/a//a/// aa/a/a
+aa/a//.aaa aa/a/.aaa
+aa/a//.aa. aa/a/.aa.
+aa/a//.aa/ aa/a/.aa
+aa/a//.a.a aa/a/.a.a
+aa/a//.a.. aa/a/.a..
+aa/a//.a./ aa/a/.a.
+aa/a//.a/a aa/a/.a/a
+aa/a//.a/. aa/a/.a
+aa/a//.a// aa/a/.a
+aa/a//..aa aa/a/..aa
+aa/a//..a. aa/a/..a.
+aa/a//..a/ aa/a/..a
+aa/a//...a aa/a/...a
+aa/a//.... aa/a/....
+aa/a//.../ aa/a/...
+aa/a//../a aa/a
+aa/a//../. aa
+aa/a//..// aa
+aa/a//./aa aa/a/aa
+aa/a//./a. aa/a/a.
+aa/a//./a/ aa/a/a
+aa/a//./.a aa/a/.a
+aa/a//./.. aa
+aa/a//././ aa/a
+aa/a//.//a aa/a/a
+aa/a//.//. aa/a
+aa/a//./// aa/a
+aa/a///aaa aa/a/aaa
+aa/a///aa. aa/a/aa.
+aa/a///aa/ aa/a/aa
+aa/a///a.a aa/a/a.a
+aa/a///a.. aa/a/a..
+aa/a///a./ aa/a/a.
+aa/a///a/a aa/a/a/a
+aa/a///a/. aa/a/a
+aa/a///a// aa/a/a
+aa/a///.aa aa/a/.aa
+aa/a///.a. aa/a/.a.
+aa/a///.a/ aa/a/.a
+aa/a///..a aa/a/..a
+aa/a///... aa/a/...
+aa/a///../ aa
+aa/a///./a aa/a/a
+aa/a///./. aa/a
+aa/a///.// aa/a
+aa/a////aa aa/a/aa
+aa/a////a. aa/a/a.
+aa/a////a/ aa/a/a
+aa/a////.a aa/a/.a
+aa/a////.. aa
+aa/a////./ aa/a
+aa/a/////a aa/a/a
+aa/a/////. aa/a
+aa/a////// aa/a
+aa/.aaaaaa aa/.aaaaaa
+aa/.aaaaa. aa/.aaaaa.
+aa/.aaaaa/ aa/.aaaaa
+aa/.aaaa.a aa/.aaaa.a
+aa/.aaaa.. aa/.aaaa..
+aa/.aaaa./ aa/.aaaa.
+aa/.aaaa/a aa/.aaaa/a
+aa/.aaaa/. aa/.aaaa
+aa/.aaaa// aa/.aaaa
+aa/.aaa.aa aa/.aaa.aa
+aa/.aaa.a. aa/.aaa.a.
+aa/.aaa.a/ aa/.aaa.a
+aa/.aaa..a aa/.aaa..a
+aa/.aaa... aa/.aaa...
+aa/.aaa../ aa/.aaa..
+aa/.aaa./a aa/.aaa./a
+aa/.aaa./. aa/.aaa.
+aa/.aaa.// aa/.aaa.
+aa/.aaa/aa aa/.aaa/aa
+aa/.aaa/a. aa/.aaa/a.
+aa/.aaa/a/ aa/.aaa/a
+aa/.aaa/.a aa/.aaa/.a
+aa/.aaa/.. aa
+aa/.aaa/./ aa/.aaa
+aa/.aaa//a aa/.aaa/a
+aa/.aaa//. aa/.aaa
+aa/.aaa/// aa/.aaa
+aa/.aa.aaa aa/.aa.aaa
+aa/.aa.aa. aa/.aa.aa.
+aa/.aa.aa/ aa/.aa.aa
+aa/.aa.a.a aa/.aa.a.a
+aa/.aa.a.. aa/.aa.a..
+aa/.aa.a./ aa/.aa.a.
+aa/.aa.a/a aa/.aa.a/a
+aa/.aa.a/. aa/.aa.a
+aa/.aa.a// aa/.aa.a
+aa/.aa..aa aa/.aa..aa
+aa/.aa..a. aa/.aa..a.
+aa/.aa..a/ aa/.aa..a
+aa/.aa...a aa/.aa...a
+aa/.aa.... aa/.aa....
+aa/.aa.../ aa/.aa...
+aa/.aa../a aa/.aa../a
+aa/.aa../. aa/.aa..
+aa/.aa..// aa/.aa..
+aa/.aa./aa aa/.aa./aa
+aa/.aa./a. aa/.aa./a.
+aa/.aa./a/ aa/.aa./a
+aa/.aa./.a aa/.aa./.a
+aa/.aa./.. aa
+aa/.aa././ aa/.aa.
+aa/.aa.//a aa/.aa./a
+aa/.aa.//. aa/.aa.
+aa/.aa./// aa/.aa.
+aa/.aa/aaa aa/.aa/aaa
+aa/.aa/aa. aa/.aa/aa.
+aa/.aa/aa/ aa/.aa/aa
+aa/.aa/a.a aa/.aa/a.a
+aa/.aa/a.. aa/.aa/a..
+aa/.aa/a./ aa/.aa/a.
+aa/.aa/a/a aa/.aa/a/a
+aa/.aa/a/. aa/.aa/a
+aa/.aa/a// aa/.aa/a
+aa/.aa/.aa aa/.aa/.aa
+aa/.aa/.a. aa/.aa/.a.
+aa/.aa/.a/ aa/.aa/.a
+aa/.aa/..a aa/.aa/..a
+aa/.aa/... aa/.aa/...
+aa/.aa/../ aa
+aa/.aa/./a aa/.aa/a
+aa/.aa/./. aa/.aa
+aa/.aa/.// aa/.aa
+aa/.aa//aa aa/.aa/aa
+aa/.aa//a. aa/.aa/a.
+aa/.aa//a/ aa/.aa/a
+aa/.aa//.a aa/.aa/.a
+aa/.aa//.. aa
+aa/.aa//./ aa/.aa
+aa/.aa///a aa/.aa/a
+aa/.aa///. aa/.aa
+aa/.aa//// aa/.aa
+aa/.a.aaaa aa/.a.aaaa
+aa/.a.aaa. aa/.a.aaa.
+aa/.a.aaa/ aa/.a.aaa
+aa/.a.aa.a aa/.a.aa.a
+aa/.a.aa.. aa/.a.aa..
+aa/.a.aa./ aa/.a.aa.
+aa/.a.aa/a aa/.a.aa/a
+aa/.a.aa/. aa/.a.aa
+aa/.a.aa// aa/.a.aa
+aa/.a.a.aa aa/.a.a.aa
+aa/.a.a.a. aa/.a.a.a.
+aa/.a.a.a/ aa/.a.a.a
+aa/.a.a..a aa/.a.a..a
+aa/.a.a... aa/.a.a...
+aa/.a.a../ aa/.a.a..
+aa/.a.a./a aa/.a.a./a
+aa/.a.a./. aa/.a.a.
+aa/.a.a.// aa/.a.a.
+aa/.a.a/aa aa/.a.a/aa
+aa/.a.a/a. aa/.a.a/a.
+aa/.a.a/a/ aa/.a.a/a
+aa/.a.a/.a aa/.a.a/.a
+aa/.a.a/.. aa
+aa/.a.a/./ aa/.a.a
+aa/.a.a//a aa/.a.a/a
+aa/.a.a//. aa/.a.a
+aa/.a.a/// aa/.a.a
+aa/.a..aaa aa/.a..aaa
+aa/.a..aa. aa/.a..aa.
+aa/.a..aa/ aa/.a..aa
+aa/.a..a.a aa/.a..a.a
+aa/.a..a.. aa/.a..a..
+aa/.a..a./ aa/.a..a.
+aa/.a..a/a aa/.a..a/a
+aa/.a..a/. aa/.a..a
+aa/.a..a// aa/.a..a
+aa/.a...aa aa/.a...aa
+aa/.a...a. aa/.a...a.
+aa/.a...a/ aa/.a...a
+aa/.a....a aa/.a....a
+aa/.a..... aa/.a.....
+aa/.a..../ aa/.a....
+aa/.a.../a aa/.a.../a
+aa/.a.../. aa/.a...
+aa/.a...// aa/.a...
+aa/.a../aa aa/.a../aa
+aa/.a../a. aa/.a../a.
+aa/.a../a/ aa/.a../a
+aa/.a../.a aa/.a../.a
+aa/.a../.. aa
+aa/.a.././ aa/.a..
+aa/.a..//a aa/.a../a
+aa/.a..//. aa/.a..
+aa/.a../// aa/.a..
+aa/.a./aaa aa/.a./aaa
+aa/.a./aa. aa/.a./aa.
+aa/.a./aa/ aa/.a./aa
+aa/.a./a.a aa/.a./a.a
+aa/.a./a.. aa/.a./a..
+aa/.a./a./ aa/.a./a.
+aa/.a./a/a aa/.a./a/a
+aa/.a./a/. aa/.a./a
+aa/.a./a// aa/.a./a
+aa/.a./.aa aa/.a./.aa
+aa/.a./.a. aa/.a./.a.
+aa/.a./.a/ aa/.a./.a
+aa/.a./..a aa/.a./..a
+aa/.a./... aa/.a./...
+aa/.a./../ aa
+aa/.a././a aa/.a./a
+aa/.a././. aa/.a.
+aa/.a./.// aa/.a.
+aa/.a.//aa aa/.a./aa
+aa/.a.//a. aa/.a./a.
+aa/.a.//a/ aa/.a./a
+aa/.a.//.a aa/.a./.a
+aa/.a.//.. aa
+aa/.a.//./ aa/.a.
+aa/.a.///a aa/.a./a
+aa/.a.///. aa/.a.
+aa/.a.//// aa/.a.
+aa/.a/aaaa aa/.a/aaaa
+aa/.a/aaa. aa/.a/aaa.
+aa/.a/aaa/ aa/.a/aaa
+aa/.a/aa.a aa/.a/aa.a
+aa/.a/aa.. aa/.a/aa..
+aa/.a/aa./ aa/.a/aa.
+aa/.a/aa/a aa/.a/aa/a
+aa/.a/aa/. aa/.a/aa
+aa/.a/aa// aa/.a/aa
+aa/.a/a.aa aa/.a/a.aa
+aa/.a/a.a. aa/.a/a.a.
+aa/.a/a.a/ aa/.a/a.a
+aa/.a/a..a aa/.a/a..a
+aa/.a/a... aa/.a/a...
+aa/.a/a../ aa/.a/a..
+aa/.a/a./a aa/.a/a./a
+aa/.a/a./. aa/.a/a.
+aa/.a/a.// aa/.a/a.
+aa/.a/a/aa aa/.a/a/aa
+aa/.a/a/a. aa/.a/a/a.
+aa/.a/a/a/ aa/.a/a/a
+aa/.a/a/.a aa/.a/a/.a
+aa/.a/a/.. aa/.a
+aa/.a/a/./ aa/.a/a
+aa/.a/a//a aa/.a/a/a
+aa/.a/a//. aa/.a/a
+aa/.a/a/// aa/.a/a
+aa/.a/.aaa aa/.a/.aaa
+aa/.a/.aa. aa/.a/.aa.
+aa/.a/.aa/ aa/.a/.aa
+aa/.a/.a.a aa/.a/.a.a
+aa/.a/.a.. aa/.a/.a..
+aa/.a/.a./ aa/.a/.a.
+aa/.a/.a/a aa/.a/.a/a
+aa/.a/.a/. aa/.a/.a
+aa/.a/.a// aa/.a/.a
+aa/.a/..aa aa/.a/..aa
+aa/.a/..a. aa/.a/..a.
+aa/.a/..a/ aa/.a/..a
+aa/.a/...a aa/.a/...a
+aa/.a/.... aa/.a/....
+aa/.a/.../ aa/.a/...
+aa/.a/../a aa/a
+aa/.a/../. aa
+aa/.a/..// aa
+aa/.a/./aa aa/.a/aa
+aa/.a/./a. aa/.a/a.
+aa/.a/./a/ aa/.a/a
+aa/.a/./.a aa/.a/.a
+aa/.a/./.. aa
+aa/.a/././ aa/.a
+aa/.a/.//a aa/.a/a
+aa/.a/.//. aa/.a
+aa/.a/./// aa/.a
+aa/.a//aaa aa/.a/aaa
+aa/.a//aa. aa/.a/aa.
+aa/.a//aa/ aa/.a/aa
+aa/.a//a.a aa/.a/a.a
+aa/.a//a.. aa/.a/a..
+aa/.a//a./ aa/.a/a.
+aa/.a//a/a aa/.a/a/a
+aa/.a//a/. aa/.a/a
+aa/.a//a// aa/.a/a
+aa/.a//.aa aa/.a/.aa
+aa/.a//.a. aa/.a/.a.
+aa/.a//.a/ aa/.a/.a
+aa/.a//..a aa/.a/..a
+aa/.a//... aa/.a/...
+aa/.a//../ aa
+aa/.a//./a aa/.a/a
+aa/.a//./. aa/.a
+aa/.a//.// aa/.a
+aa/.a///aa aa/.a/aa
+aa/.a///a. aa/.a/a.
+aa/.a///a/ aa/.a/a
+aa/.a///.a aa/.a/.a
+aa/.a///.. aa
+aa/.a///./ aa/.a
+aa/.a////a aa/.a/a
+aa/.a////. aa/.a
+aa/.a///// aa/.a
+aa/..aaaaa aa/..aaaaa
+aa/..aaaa. aa/..aaaa.
+aa/..aaaa/ aa/..aaaa
+aa/..aaa.a aa/..aaa.a
+aa/..aaa.. aa/..aaa..
+aa/..aaa./ aa/..aaa.
+aa/..aaa/a aa/..aaa/a
+aa/..aaa/. aa/..aaa
+aa/..aaa// aa/..aaa
+aa/..aa.aa aa/..aa.aa
+aa/..aa.a. aa/..aa.a.
+aa/..aa.a/ aa/..aa.a
+aa/..aa..a aa/..aa..a
+aa/..aa... aa/..aa...
+aa/..aa../ aa/..aa..
+aa/..aa./a aa/..aa./a
+aa/..aa./. aa/..aa.
+aa/..aa.// aa/..aa.
+aa/..aa/aa aa/..aa/aa
+aa/..aa/a. aa/..aa/a.
+aa/..aa/a/ aa/..aa/a
+aa/..aa/.a aa/..aa/.a
+aa/..aa/.. aa
+aa/..aa/./ aa/..aa
+aa/..aa//a aa/..aa/a
+aa/..aa//. aa/..aa
+aa/..aa/// aa/..aa
+aa/..a.aaa aa/..a.aaa
+aa/..a.aa. aa/..a.aa.
+aa/..a.aa/ aa/..a.aa
+aa/..a.a.a aa/..a.a.a
+aa/..a.a.. aa/..a.a..
+aa/..a.a./ aa/..a.a.
+aa/..a.a/a aa/..a.a/a
+aa/..a.a/. aa/..a.a
+aa/..a.a// aa/..a.a
+aa/..a..aa aa/..a..aa
+aa/..a..a. aa/..a..a.
+aa/..a..a/ aa/..a..a
+aa/..a...a aa/..a...a
+aa/..a.... aa/..a....
+aa/..a.../ aa/..a...
+aa/..a../a aa/..a../a
+aa/..a../. aa/..a..
+aa/..a..// aa/..a..
+aa/..a./aa aa/..a./aa
+aa/..a./a. aa/..a./a.
+aa/..a./a/ aa/..a./a
+aa/..a./.a aa/..a./.a
+aa/..a./.. aa
+aa/..a././ aa/..a.
+aa/..a.//a aa/..a./a
+aa/..a.//. aa/..a.
+aa/..a./// aa/..a.
+aa/..a/aaa aa/..a/aaa
+aa/..a/aa. aa/..a/aa.
+aa/..a/aa/ aa/..a/aa
+aa/..a/a.a aa/..a/a.a
+aa/..a/a.. aa/..a/a..
+aa/..a/a./ aa/..a/a.
+aa/..a/a/a aa/..a/a/a
+aa/..a/a/. aa/..a/a
+aa/..a/a// aa/..a/a
+aa/..a/.aa aa/..a/.aa
+aa/..a/.a. aa/..a/.a.
+aa/..a/.a/ aa/..a/.a
+aa/..a/..a aa/..a/..a
+aa/..a/... aa/..a/...
+aa/..a/../ aa
+aa/..a/./a aa/..a/a
+aa/..a/./. aa/..a
+aa/..a/.// aa/..a
+aa/..a//aa aa/..a/aa
+aa/..a//a. aa/..a/a.
+aa/..a//a/ aa/..a/a
+aa/..a//.a aa/..a/.a
+aa/..a//.. aa
+aa/..a//./ aa/..a
+aa/..a///a aa/..a/a
+aa/..a///. aa/..a
+aa/..a//// aa/..a
+aa/...aaaa aa/...aaaa
+aa/...aaa. aa/...aaa.
+aa/...aaa/ aa/...aaa
+aa/...aa.a aa/...aa.a
+aa/...aa.. aa/...aa..
+aa/...aa./ aa/...aa.
+aa/...aa/a aa/...aa/a
+aa/...aa/. aa/...aa
+aa/...aa// aa/...aa
+aa/...a.aa aa/...a.aa
+aa/...a.a. aa/...a.a.
+aa/...a.a/ aa/...a.a
+aa/...a..a aa/...a..a
+aa/...a... aa/...a...
+aa/...a../ aa/...a..
+aa/...a./a aa/...a./a
+aa/...a./. aa/...a.
+aa/...a.// aa/...a.
+aa/...a/aa aa/...a/aa
+aa/...a/a. aa/...a/a.
+aa/...a/a/ aa/...a/a
+aa/...a/.a aa/...a/.a
+aa/...a/.. aa
+aa/...a/./ aa/...a
+aa/...a//a aa/...a/a
+aa/...a//. aa/...a
+aa/...a/// aa/...a
+aa/....aaa aa/....aaa
+aa/....aa. aa/....aa.
+aa/....aa/ aa/....aa
+aa/....a.a aa/....a.a
+aa/....a.. aa/....a..
+aa/....a./ aa/....a.
+aa/....a/a aa/....a/a
+aa/....a/. aa/....a
+aa/....a// aa/....a
+aa/.....aa aa/.....aa
+aa/.....a. aa/.....a.
+aa/.....a/ aa/.....a
+aa/......a aa/......a
+aa/....... aa/.......
+aa/....../ aa/......
+aa/...../a aa/...../a
+aa/...../. aa/.....
+aa/.....// aa/.....
+aa/..../aa aa/..../aa
+aa/..../a. aa/..../a.
+aa/..../a/ aa/..../a
+aa/..../.a aa/..../.a
+aa/..../.. aa
+aa/...././ aa/....
+aa/....//a aa/..../a
+aa/....//. aa/....
+aa/..../// aa/....
+aa/.../aaa aa/.../aaa
+aa/.../aa. aa/.../aa.
+aa/.../aa/ aa/.../aa
+aa/.../a.a aa/.../a.a
+aa/.../a.. aa/.../a..
+aa/.../a./ aa/.../a.
+aa/.../a/a aa/.../a/a
+aa/.../a/. aa/.../a
+aa/.../a// aa/.../a
+aa/.../.aa aa/.../.aa
+aa/.../.a. aa/.../.a.
+aa/.../.a/ aa/.../.a
+aa/.../..a aa/.../..a
+aa/.../... aa/.../...
+aa/.../../ aa
+aa/..././a aa/.../a
+aa/..././. aa/...
+aa/.../.// aa/...
+aa/...//aa aa/.../aa
+aa/...//a. aa/.../a.
+aa/...//a/ aa/.../a
+aa/...//.a aa/.../.a
+aa/...//.. aa
+aa/...//./ aa/...
+aa/...///a aa/.../a
+aa/...///. aa/...
+aa/...//// aa/...
+aa/../aaaa aaaa
+aa/../aaa. aaa.
+aa/../aaa/ aaa
+aa/../aa.a aa.a
+aa/../aa.. aa..
+aa/../aa./ aa.
+aa/../aa/a aa/a
+aa/../aa/. aa
+aa/../aa// aa
+aa/../a.aa a.aa
+aa/../a.a. a.a.
+aa/../a.a/ a.a
+aa/../a..a a..a
+aa/../a... a...
+aa/../a../ a..
+aa/../a./a a./a
+aa/../a./. a.
+aa/../a.// a.
+aa/../a/aa a/aa
+aa/../a/a. a/a.
+aa/../a/a/ a/a
+aa/../a/.a a/.a
+aa/../a/.. .
+aa/../a/./ a
+aa/../a//a a/a
+aa/../a//. a
+aa/../a/// a
+aa/../.aaa .aaa
+aa/../.aa. .aa.
+aa/../.aa/ .aa
+aa/../.a.a .a.a
+aa/../.a.. .a..
+aa/../.a./ .a.
+aa/../.a/a .a/a
+aa/../.a/. .a
+aa/../.a// .a
+aa/../..aa ..aa
+aa/../..a. ..a.
+aa/../..a/ ..a
+aa/../...a ...a
+aa/../.... ....
+aa/../.../ ...
+aa/../../a ../a
+aa/../../. ..
+aa/../..// ..
+aa/.././aa aa
+aa/.././a. a.
+aa/.././a/ a
+aa/.././.a .a
+aa/.././.. ..
+aa/../././ .
+aa/.././/a a
+aa/.././/. .
+aa/.././// .
+aa/..//aaa aaa
+aa/..//aa. aa.
+aa/..//aa/ aa
+aa/..//a.a a.a
+aa/..//a.. a..
+aa/..//a./ a.
+aa/..//a/a a/a
+aa/..//a/. a
+aa/..//a// a
+aa/..//.aa .aa
+aa/..//.a. .a.
+aa/..//.a/ .a
+aa/..//..a ..a
+aa/..//... ...
+aa/..//../ ..
+aa/..//./a a
+aa/..//./. .
+aa/..//.// .
+aa/..///aa aa
+aa/..///a. a.
+aa/..///a/ a
+aa/..///.a .a
+aa/..///.. ..
+aa/..///./ .
+aa/..////a a
+aa/..////. .
+aa/..///// .
+aa/./aaaaa aa/aaaaa
+aa/./aaaa. aa/aaaa.
+aa/./aaaa/ aa/aaaa
+aa/./aaa.a aa/aaa.a
+aa/./aaa.. aa/aaa..
+aa/./aaa./ aa/aaa.
+aa/./aaa/a aa/aaa/a
+aa/./aaa/. aa/aaa
+aa/./aaa// aa/aaa
+aa/./aa.aa aa/aa.aa
+aa/./aa.a. aa/aa.a.
+aa/./aa.a/ aa/aa.a
+aa/./aa..a aa/aa..a
+aa/./aa... aa/aa...
+aa/./aa../ aa/aa..
+aa/./aa./a aa/aa./a
+aa/./aa./. aa/aa.
+aa/./aa.// aa/aa.
+aa/./aa/aa aa/aa/aa
+aa/./aa/a. aa/aa/a.
+aa/./aa/a/ aa/aa/a
+aa/./aa/.a aa/aa/.a
+aa/./aa/.. aa
+aa/./aa/./ aa/aa
+aa/./aa//a aa/aa/a
+aa/./aa//. aa/aa
+aa/./aa/// aa/aa
+aa/./a.aaa aa/a.aaa
+aa/./a.aa. aa/a.aa.
+aa/./a.aa/ aa/a.aa
+aa/./a.a.a aa/a.a.a
+aa/./a.a.. aa/a.a..
+aa/./a.a./ aa/a.a.
+aa/./a.a/a aa/a.a/a
+aa/./a.a/. aa/a.a
+aa/./a.a// aa/a.a
+aa/./a..aa aa/a..aa
+aa/./a..a. aa/a..a.
+aa/./a..a/ aa/a..a
+aa/./a...a aa/a...a
+aa/./a.... aa/a....
+aa/./a.../ aa/a...
+aa/./a../a aa/a../a
+aa/./a../. aa/a..
+aa/./a..// aa/a..
+aa/./a./aa aa/a./aa
+aa/./a./a. aa/a./a.
+aa/./a./a/ aa/a./a
+aa/./a./.a aa/a./.a
+aa/./a./.. aa
+aa/./a././ aa/a.
+aa/./a.//a aa/a./a
+aa/./a.//. aa/a.
+aa/./a./// aa/a.
+aa/./a/aaa aa/a/aaa
+aa/./a/aa. aa/a/aa.
+aa/./a/aa/ aa/a/aa
+aa/./a/a.a aa/a/a.a
+aa/./a/a.. aa/a/a..
+aa/./a/a./ aa/a/a.
+aa/./a/a/a aa/a/a/a
+aa/./a/a/. aa/a/a
+aa/./a/a// aa/a/a
+aa/./a/.aa aa/a/.aa
+aa/./a/.a. aa/a/.a.
+aa/./a/.a/ aa/a/.a
+aa/./a/..a aa/a/..a
+aa/./a/... aa/a/...
+aa/./a/../ aa
+aa/./a/./a aa/a/a
+aa/./a/./. aa/a
+aa/./a/.// aa/a
+aa/./a//aa aa/a/aa
+aa/./a//a. aa/a/a.
+aa/./a//a/ aa/a/a
+aa/./a//.a aa/a/.a
+aa/./a//.. aa
+aa/./a//./ aa/a
+aa/./a///a aa/a/a
+aa/./a///. aa/a
+aa/./a//// aa/a
+aa/./.aaaa aa/.aaaa
+aa/./.aaa. aa/.aaa.
+aa/./.aaa/ aa/.aaa
+aa/./.aa.a aa/.aa.a
+aa/./.aa.. aa/.aa..
+aa/./.aa./ aa/.aa.
+aa/./.aa/a aa/.aa/a
+aa/./.aa/. aa/.aa
+aa/./.aa// aa/.aa
+aa/./.a.aa aa/.a.aa
+aa/./.a.a. aa/.a.a.
+aa/./.a.a/ aa/.a.a
+aa/./.a..a aa/.a..a
+aa/./.a... aa/.a...
+aa/./.a../ aa/.a..
+aa/./.a./a aa/.a./a
+aa/./.a./. aa/.a.
+aa/./.a.// aa/.a.
+aa/./.a/aa aa/.a/aa
+aa/./.a/a. aa/.a/a.
+aa/./.a/a/ aa/.a/a
+aa/./.a/.a aa/.a/.a
+aa/./.a/.. aa
+aa/./.a/./ aa/.a
+aa/./.a//a aa/.a/a
+aa/./.a//. aa/.a
+aa/./.a/// aa/.a
+aa/./..aaa aa/..aaa
+aa/./..aa. aa/..aa.
+aa/./..aa/ aa/..aa
+aa/./..a.a aa/..a.a
+aa/./..a.. aa/..a..
+aa/./..a./ aa/..a.
+aa/./..a/a aa/..a/a
+aa/./..a/. aa/..a
+aa/./..a// aa/..a
+aa/./...aa aa/...aa
+aa/./...a. aa/...a.
+aa/./...a/ aa/...a
+aa/./....a aa/....a
+aa/./..... aa/.....
+aa/./..../ aa/....
+aa/./.../a aa/.../a
+aa/./.../. aa/...
+aa/./...// aa/...
+aa/./../aa aa
+aa/./../a. a.
+aa/./../a/ a
+aa/./../.a .a
+aa/./../.. ..
+aa/./.././ .
+aa/./..//a a
+aa/./..//. .
+aa/./../// .
+aa/././aaa aa/aaa
+aa/././aa. aa/aa.
+aa/././aa/ aa/aa
+aa/././a.a aa/a.a
+aa/././a.. aa/a..
+aa/././a./ aa/a.
+aa/././a/a aa/a/a
+aa/././a/. aa/a
+aa/././a// aa/a
+aa/././.aa aa/.aa
+aa/././.a. aa/.a.
+aa/././.a/ aa/.a
+aa/././..a aa/..a
+aa/././... aa/...
+aa/././../ .
+aa/./././a aa/a
+aa/./././. aa
+aa/././.// aa
+aa/././/aa aa/aa
+aa/././/a. aa/a.
+aa/././/a/ aa/a
+aa/././/.a aa/.a
+aa/././/.. .
+aa/././/./ aa
+aa/././//a aa/a
+aa/././//. aa
+aa/././/// aa
+aa/.//aaaa aa/aaaa
+aa/.//aaa. aa/aaa.
+aa/.//aaa/ aa/aaa
+aa/.//aa.a aa/aa.a
+aa/.//aa.. aa/aa..
+aa/.//aa./ aa/aa.
+aa/.//aa/a aa/aa/a
+aa/.//aa/. aa/aa
+aa/.//aa// aa/aa
+aa/.//a.aa aa/a.aa
+aa/.//a.a. aa/a.a.
+aa/.//a.a/ aa/a.a
+aa/.//a..a aa/a..a
+aa/.//a... aa/a...
+aa/.//a../ aa/a..
+aa/.//a./a aa/a./a
+aa/.//a./. aa/a.
+aa/.//a.// aa/a.
+aa/.//a/aa aa/a/aa
+aa/.//a/a. aa/a/a.
+aa/.//a/a/ aa/a/a
+aa/.//a/.a aa/a/.a
+aa/.//a/.. aa
+aa/.//a/./ aa/a
+aa/.//a//a aa/a/a
+aa/.//a//. aa/a
+aa/.//a/// aa/a
+aa/.//.aaa aa/.aaa
+aa/.//.aa. aa/.aa.
+aa/.//.aa/ aa/.aa
+aa/.//.a.a aa/.a.a
+aa/.//.a.. aa/.a..
+aa/.//.a./ aa/.a.
+aa/.//.a/a aa/.a/a
+aa/.//.a/. aa/.a
+aa/.//.a// aa/.a
+aa/.//..aa aa/..aa
+aa/.//..a. aa/..a.
+aa/.//..a/ aa/..a
+aa/.//...a aa/...a
+aa/.//.... aa/....
+aa/.//.../ aa/...
+aa/.//../a a
+aa/.//../. .
+aa/.//..// .
+aa/.//./aa aa/aa
+aa/.//./a. aa/a.
+aa/.//./a/ aa/a
+aa/.//./.a aa/.a
+aa/.//./.. .
+aa/.//././ aa
+aa/.//.//a aa/a
+aa/.//.//. aa
+aa/.//./// aa
+aa/.///aaa aa/aaa
+aa/.///aa. aa/aa.
+aa/.///aa/ aa/aa
+aa/.///a.a aa/a.a
+aa/.///a.. aa/a..
+aa/.///a./ aa/a.
+aa/.///a/a aa/a/a
+aa/.///a/. aa/a
+aa/.///a// aa/a
+aa/.///.aa aa/.aa
+aa/.///.a. aa/.a.
+aa/.///.a/ aa/.a
+aa/.///..a aa/..a
+aa/.///... aa/...
+aa/.///../ .
+aa/.///./a aa/a
+aa/.///./. aa
+aa/.///.// aa
+aa/.////aa aa/aa
+aa/.////a. aa/a.
+aa/.////a/ aa/a
+aa/.////.a aa/.a
+aa/.////.. .
+aa/.////./ aa
+aa/./////a aa/a
+aa/./////. aa
+aa/.////// aa
+aa//aaaaaa aa/aaaaaa
+aa//aaaaa. aa/aaaaa.
+aa//aaaaa/ aa/aaaaa
+aa//aaaa.a aa/aaaa.a
+aa//aaaa.. aa/aaaa..
+aa//aaaa./ aa/aaaa.
+aa//aaaa/a aa/aaaa/a
+aa//aaaa/. aa/aaaa
+aa//aaaa// aa/aaaa
+aa//aaa.aa aa/aaa.aa
+aa//aaa.a. aa/aaa.a.
+aa//aaa.a/ aa/aaa.a
+aa//aaa..a aa/aaa..a
+aa//aaa... aa/aaa...
+aa//aaa../ aa/aaa..
+aa//aaa./a aa/aaa./a
+aa//aaa./. aa/aaa.
+aa//aaa.// aa/aaa.
+aa//aaa/aa aa/aaa/aa
+aa//aaa/a. aa/aaa/a.
+aa//aaa/a/ aa/aaa/a
+aa//aaa/.a aa/aaa/.a
+aa//aaa/.. aa
+aa//aaa/./ aa/aaa
+aa//aaa//a aa/aaa/a
+aa//aaa//. aa/aaa
+aa//aaa/// aa/aaa
+aa//aa.aaa aa/aa.aaa
+aa//aa.aa. aa/aa.aa.
+aa//aa.aa/ aa/aa.aa
+aa//aa.a.a aa/aa.a.a
+aa//aa.a.. aa/aa.a..
+aa//aa.a./ aa/aa.a.
+aa//aa.a/a aa/aa.a/a
+aa//aa.a/. aa/aa.a
+aa//aa.a// aa/aa.a
+aa//aa..aa aa/aa..aa
+aa//aa..a. aa/aa..a.
+aa//aa..a/ aa/aa..a
+aa//aa...a aa/aa...a
+aa//aa.... aa/aa....
+aa//aa.../ aa/aa...
+aa//aa../a aa/aa../a
+aa//aa../. aa/aa..
+aa//aa..// aa/aa..
+aa//aa./aa aa/aa./aa
+aa//aa./a. aa/aa./a.
+aa//aa./a/ aa/aa./a
+aa//aa./.a aa/aa./.a
+aa//aa./.. aa
+aa//aa././ aa/aa.
+aa//aa.//a aa/aa./a
+aa//aa.//. aa/aa.
+aa//aa./// aa/aa.
+aa//aa/aaa aa/aa/aaa
+aa//aa/aa. aa/aa/aa.
+aa//aa/aa/ aa/aa/aa
+aa//aa/a.a aa/aa/a.a
+aa//aa/a.. aa/aa/a..
+aa//aa/a./ aa/aa/a.
+aa//aa/a/a aa/aa/a/a
+aa//aa/a/. aa/aa/a
+aa//aa/a// aa/aa/a
+aa//aa/.aa aa/aa/.aa
+aa//aa/.a. aa/aa/.a.
+aa//aa/.a/ aa/aa/.a
+aa//aa/..a aa/aa/..a
+aa//aa/... aa/aa/...
+aa//aa/../ aa
+aa//aa/./a aa/aa/a
+aa//aa/./. aa/aa
+aa//aa/.// aa/aa
+aa//aa//aa aa/aa/aa
+aa//aa//a. aa/aa/a.
+aa//aa//a/ aa/aa/a
+aa//aa//.a aa/aa/.a
+aa//aa//.. aa
+aa//aa//./ aa/aa
+aa//aa///a aa/aa/a
+aa//aa///. aa/aa
+aa//aa//// aa/aa
+aa//a.aaaa aa/a.aaaa
+aa//a.aaa. aa/a.aaa.
+aa//a.aaa/ aa/a.aaa
+aa//a.aa.a aa/a.aa.a
+aa//a.aa.. aa/a.aa..
+aa//a.aa./ aa/a.aa.
+aa//a.aa/a aa/a.aa/a
+aa//a.aa/. aa/a.aa
+aa//a.aa// aa/a.aa
+aa//a.a.aa aa/a.a.aa
+aa//a.a.a. aa/a.a.a.
+aa//a.a.a/ aa/a.a.a
+aa//a.a..a aa/a.a..a
+aa//a.a... aa/a.a...
+aa//a.a../ aa/a.a..
+aa//a.a./a aa/a.a./a
+aa//a.a./. aa/a.a.
+aa//a.a.// aa/a.a.
+aa//a.a/aa aa/a.a/aa
+aa//a.a/a. aa/a.a/a.
+aa//a.a/a/ aa/a.a/a
+aa//a.a/.a aa/a.a/.a
+aa//a.a/.. aa
+aa//a.a/./ aa/a.a
+aa//a.a//a aa/a.a/a
+aa//a.a//. aa/a.a
+aa//a.a/// aa/a.a
+aa//a..aaa aa/a..aaa
+aa//a..aa. aa/a..aa.
+aa//a..aa/ aa/a..aa
+aa//a..a.a aa/a..a.a
+aa//a..a.. aa/a..a..
+aa//a..a./ aa/a..a.
+aa//a..a/a aa/a..a/a
+aa//a..a/. aa/a..a
+aa//a..a// aa/a..a
+aa//a...aa aa/a...aa
+aa//a...a. aa/a...a.
+aa//a...a/ aa/a...a
+aa//a....a aa/a....a
+aa//a..... aa/a.....
+aa//a..../ aa/a....
+aa//a.../a aa/a.../a
+aa//a.../. aa/a...
+aa//a...// aa/a...
+aa//a../aa aa/a../aa
+aa//a../a. aa/a../a.
+aa//a../a/ aa/a../a
+aa//a../.a aa/a../.a
+aa//a../.. aa
+aa//a.././ aa/a..
+aa//a..//a aa/a../a
+aa//a..//. aa/a..
+aa//a../// aa/a..
+aa//a./aaa aa/a./aaa
+aa//a./aa. aa/a./aa.
+aa//a./aa/ aa/a./aa
+aa//a./a.a aa/a./a.a
+aa//a./a.. aa/a./a..
+aa//a./a./ aa/a./a.
+aa//a./a/a aa/a./a/a
+aa//a./a/. aa/a./a
+aa//a./a// aa/a./a
+aa//a./.aa aa/a./.aa
+aa//a./.a. aa/a./.a.
+aa//a./.a/ aa/a./.a
+aa//a./..a aa/a./..a
+aa//a./... aa/a./...
+aa//a./../ aa
+aa//a././a aa/a./a
+aa//a././. aa/a.
+aa//a./.// aa/a.
+aa//a.//aa aa/a./aa
+aa//a.//a. aa/a./a.
+aa//a.//a/ aa/a./a
+aa//a.//.a aa/a./.a
+aa//a.//.. aa
+aa//a.//./ aa/a.
+aa//a.///a aa/a./a
+aa//a.///. aa/a.
+aa//a.//// aa/a.
+aa//a/aaaa aa/a/aaaa
+aa//a/aaa. aa/a/aaa.
+aa//a/aaa/ aa/a/aaa
+aa//a/aa.a aa/a/aa.a
+aa//a/aa.. aa/a/aa..
+aa//a/aa./ aa/a/aa.
+aa//a/aa/a aa/a/aa/a
+aa//a/aa/. aa/a/aa
+aa//a/aa// aa/a/aa
+aa//a/a.aa aa/a/a.aa
+aa//a/a.a. aa/a/a.a.
+aa//a/a.a/ aa/a/a.a
+aa//a/a..a aa/a/a..a
+aa//a/a... aa/a/a...
+aa//a/a../ aa/a/a..
+aa//a/a./a aa/a/a./a
+aa//a/a./. aa/a/a.
+aa//a/a.// aa/a/a.
+aa//a/a/aa aa/a/a/aa
+aa//a/a/a. aa/a/a/a.
+aa//a/a/a/ aa/a/a/a
+aa//a/a/.a aa/a/a/.a
+aa//a/a/.. aa/a
+aa//a/a/./ aa/a/a
+aa//a/a//a aa/a/a/a
+aa//a/a//. aa/a/a
+aa//a/a/// aa/a/a
+aa//a/.aaa aa/a/.aaa
+aa//a/.aa. aa/a/.aa.
+aa//a/.aa/ aa/a/.aa
+aa//a/.a.a aa/a/.a.a
+aa//a/.a.. aa/a/.a..
+aa//a/.a./ aa/a/.a.
+aa//a/.a/a aa/a/.a/a
+aa//a/.a/. aa/a/.a
+aa//a/.a// aa/a/.a
+aa//a/..aa aa/a/..aa
+aa//a/..a. aa/a/..a.
+aa//a/..a/ aa/a/..a
+aa//a/...a aa/a/...a
+aa//a/.... aa/a/....
+aa//a/.../ aa/a/...
+aa//a/../a aa/a
+aa//a/../. aa
+aa//a/..// aa
+aa//a/./aa aa/a/aa
+aa//a/./a. aa/a/a.
+aa//a/./a/ aa/a/a
+aa//a/./.a aa/a/.a
+aa//a/./.. aa
+aa//a/././ aa/a
+aa//a/.//a aa/a/a
+aa//a/.//. aa/a
+aa//a/./// aa/a
+aa//a//aaa aa/a/aaa
+aa//a//aa. aa/a/aa.
+aa//a//aa/ aa/a/aa
+aa//a//a.a aa/a/a.a
+aa//a//a.. aa/a/a..
+aa//a//a./ aa/a/a.
+aa//a//a/a aa/a/a/a
+aa//a//a/. aa/a/a
+aa//a//a// aa/a/a
+aa//a//.aa aa/a/.aa
+aa//a//.a. aa/a/.a.
+aa//a//.a/ aa/a/.a
+aa//a//..a aa/a/..a
+aa//a//... aa/a/...
+aa//a//../ aa
+aa//a//./a aa/a/a
+aa//a//./. aa/a
+aa//a//.// aa/a
+aa//a///aa aa/a/aa
+aa//a///a. aa/a/a.
+aa//a///a/ aa/a/a
+aa//a///.a aa/a/.a
+aa//a///.. aa
+aa//a///./ aa/a
+aa//a////a aa/a/a
+aa//a////. aa/a
+aa//a///// aa/a
+aa//.aaaaa aa/.aaaaa
+aa//.aaaa. aa/.aaaa.
+aa//.aaaa/ aa/.aaaa
+aa//.aaa.a aa/.aaa.a
+aa//.aaa.. aa/.aaa..
+aa//.aaa./ aa/.aaa.
+aa//.aaa/a aa/.aaa/a
+aa//.aaa/. aa/.aaa
+aa//.aaa// aa/.aaa
+aa//.aa.aa aa/.aa.aa
+aa//.aa.a. aa/.aa.a.
+aa//.aa.a/ aa/.aa.a
+aa//.aa..a aa/.aa..a
+aa//.aa... aa/.aa...
+aa//.aa../ aa/.aa..
+aa//.aa./a aa/.aa./a
+aa//.aa./. aa/.aa.
+aa//.aa.// aa/.aa.
+aa//.aa/aa aa/.aa/aa
+aa//.aa/a. aa/.aa/a.
+aa//.aa/a/ aa/.aa/a
+aa//.aa/.a aa/.aa/.a
+aa//.aa/.. aa
+aa//.aa/./ aa/.aa
+aa//.aa//a aa/.aa/a
+aa//.aa//. aa/.aa
+aa//.aa/// aa/.aa
+aa//.a.aaa aa/.a.aaa
+aa//.a.aa. aa/.a.aa.
+aa//.a.aa/ aa/.a.aa
+aa//.a.a.a aa/.a.a.a
+aa//.a.a.. aa/.a.a..
+aa//.a.a./ aa/.a.a.
+aa//.a.a/a aa/.a.a/a
+aa//.a.a/. aa/.a.a
+aa//.a.a// aa/.a.a
+aa//.a..aa aa/.a..aa
+aa//.a..a. aa/.a..a.
+aa//.a..a/ aa/.a..a
+aa//.a...a aa/.a...a
+aa//.a.... aa/.a....
+aa//.a.../ aa/.a...
+aa//.a../a aa/.a../a
+aa//.a../. aa/.a..
+aa//.a..// aa/.a..
+aa//.a./aa aa/.a./aa
+aa//.a./a. aa/.a./a.
+aa//.a./a/ aa/.a./a
+aa//.a./.a aa/.a./.a
+aa//.a./.. aa
+aa//.a././ aa/.a.
+aa//.a.//a aa/.a./a
+aa//.a.//. aa/.a.
+aa//.a./// aa/.a.
+aa//.a/aaa aa/.a/aaa
+aa//.a/aa. aa/.a/aa.
+aa//.a/aa/ aa/.a/aa
+aa//.a/a.a aa/.a/a.a
+aa//.a/a.. aa/.a/a..
+aa//.a/a./ aa/.a/a.
+aa//.a/a/a aa/.a/a/a
+aa//.a/a/. aa/.a/a
+aa//.a/a// aa/.a/a
+aa//.a/.aa aa/.a/.aa
+aa//.a/.a. aa/.a/.a.
+aa//.a/.a/ aa/.a/.a
+aa//.a/..a aa/.a/..a
+aa//.a/... aa/.a/...
+aa//.a/../ aa
+aa//.a/./a aa/.a/a
+aa//.a/./. aa/.a
+aa//.a/.// aa/.a
+aa//.a//aa aa/.a/aa
+aa//.a//a. aa/.a/a.
+aa//.a//a/ aa/.a/a
+aa//.a//.a aa/.a/.a
+aa//.a//.. aa
+aa//.a//./ aa/.a
+aa//.a///a aa/.a/a
+aa//.a///. aa/.a
+aa//.a//// aa/.a
+aa//..aaaa aa/..aaaa
+aa//..aaa. aa/..aaa.
+aa//..aaa/ aa/..aaa
+aa//..aa.a aa/..aa.a
+aa//..aa.. aa/..aa..
+aa//..aa./ aa/..aa.
+aa//..aa/a aa/..aa/a
+aa//..aa/. aa/..aa
+aa//..aa// aa/..aa
+aa//..a.aa aa/..a.aa
+aa//..a.a. aa/..a.a.
+aa//..a.a/ aa/..a.a
+aa//..a..a aa/..a..a
+aa//..a... aa/..a...
+aa//..a../ aa/..a..
+aa//..a./a aa/..a./a
+aa//..a./. aa/..a.
+aa//..a.// aa/..a.
+aa//..a/aa aa/..a/aa
+aa//..a/a. aa/..a/a.
+aa//..a/a/ aa/..a/a
+aa//..a/.a aa/..a/.a
+aa//..a/.. aa
+aa//..a/./ aa/..a
+aa//..a//a aa/..a/a
+aa//..a//. aa/..a
+aa//..a/// aa/..a
+aa//...aaa aa/...aaa
+aa//...aa. aa/...aa.
+aa//...aa/ aa/...aa
+aa//...a.a aa/...a.a
+aa//...a.. aa/...a..
+aa//...a./ aa/...a.
+aa//...a/a aa/...a/a
+aa//...a/. aa/...a
+aa//...a// aa/...a
+aa//....aa aa/....aa
+aa//....a. aa/....a.
+aa//....a/ aa/....a
+aa//.....a aa/.....a
+aa//...... aa/......
+aa//...../ aa/.....
+aa//..../a aa/..../a
+aa//..../. aa/....
+aa//....// aa/....
+aa//.../aa aa/.../aa
+aa//.../a. aa/.../a.
+aa//.../a/ aa/.../a
+aa//.../.a aa/.../.a
+aa//.../.. aa
+aa//..././ aa/...
+aa//...//a aa/.../a
+aa//...//. aa/...
+aa//.../// aa/...
+aa//../aaa aaa
+aa//../aa. aa.
+aa//../aa/ aa
+aa//../a.a a.a
+aa//../a.. a..
+aa//../a./ a.
+aa//../a/a a/a
+aa//../a/. a
+aa//../a// a
+aa//../.aa .aa
+aa//../.a. .a.
+aa//../.a/ .a
+aa//../..a ..a
+aa//../... ...
+aa//../../ ..
+aa//.././a a
+aa//.././. .
+aa//../.// .
+aa//..//aa aa
+aa//..//a. a.
+aa//..//a/ a
+aa//..//.a .a
+aa//..//.. ..
+aa//..//./ .
+aa//..///a a
+aa//..///. .
+aa//..//// .
+aa//./aaaa aa/aaaa
+aa//./aaa. aa/aaa.
+aa//./aaa/ aa/aaa
+aa//./aa.a aa/aa.a
+aa//./aa.. aa/aa..
+aa//./aa./ aa/aa.
+aa//./aa/a aa/aa/a
+aa//./aa/. aa/aa
+aa//./aa// aa/aa
+aa//./a.aa aa/a.aa
+aa//./a.a. aa/a.a.
+aa//./a.a/ aa/a.a
+aa//./a..a aa/a..a
+aa//./a... aa/a...
+aa//./a../ aa/a..
+aa//./a./a aa/a./a
+aa//./a./. aa/a.
+aa//./a.// aa/a.
+aa//./a/aa aa/a/aa
+aa//./a/a. aa/a/a.
+aa//./a/a/ aa/a/a
+aa//./a/.a aa/a/.a
+aa//./a/.. aa
+aa//./a/./ aa/a
+aa//./a//a aa/a/a
+aa//./a//. aa/a
+aa//./a/// aa/a
+aa//./.aaa aa/.aaa
+aa//./.aa. aa/.aa.
+aa//./.aa/ aa/.aa
+aa//./.a.a aa/.a.a
+aa//./.a.. aa/.a..
+aa//./.a./ aa/.a.
+aa//./.a/a aa/.a/a
+aa//./.a/. aa/.a
+aa//./.a// aa/.a
+aa//./..aa aa/..aa
+aa//./..a. aa/..a.
+aa//./..a/ aa/..a
+aa//./...a aa/...a
+aa//./.... aa/....
+aa//./.../ aa/...
+aa//./../a a
+aa//./../. .
+aa//./..// .
+aa//././aa aa/aa
+aa//././a. aa/a.
+aa//././a/ aa/a
+aa//././.a aa/.a
+aa//././.. .
+aa//./././ aa
+aa//././/a aa/a
+aa//././/. aa
+aa//././// aa
+aa//.//aaa aa/aaa
+aa//.//aa. aa/aa.
+aa//.//aa/ aa/aa
+aa//.//a.a aa/a.a
+aa//.//a.. aa/a..
+aa//.//a./ aa/a.
+aa//.//a/a aa/a/a
+aa//.//a/. aa/a
+aa//.//a// aa/a
+aa//.//.aa aa/.aa
+aa//.//.a. aa/.a.
+aa//.//.a/ aa/.a
+aa//.//..a aa/..a
+aa//.//... aa/...
+aa//.//../ .
+aa//.//./a aa/a
+aa//.//./. aa
+aa//.//.// aa
+aa//.///aa aa/aa
+aa//.///a. aa/a.
+aa//.///a/ aa/a
+aa//.///.a aa/.a
+aa//.///.. .
+aa//.///./ aa
+aa//.////a aa/a
+aa//.////. aa
+aa//.///// aa
+aa///aaaaa aa/aaaaa
+aa///aaaa. aa/aaaa.
+aa///aaaa/ aa/aaaa
+aa///aaa.a aa/aaa.a
+aa///aaa.. aa/aaa..
+aa///aaa./ aa/aaa.
+aa///aaa/a aa/aaa/a
+aa///aaa/. aa/aaa
+aa///aaa// aa/aaa
+aa///aa.aa aa/aa.aa
+aa///aa.a. aa/aa.a.
+aa///aa.a/ aa/aa.a
+aa///aa..a aa/aa..a
+aa///aa... aa/aa...
+aa///aa../ aa/aa..
+aa///aa./a aa/aa./a
+aa///aa./. aa/aa.
+aa///aa.// aa/aa.
+aa///aa/aa aa/aa/aa
+aa///aa/a. aa/aa/a.
+aa///aa/a/ aa/aa/a
+aa///aa/.a aa/aa/.a
+aa///aa/.. aa
+aa///aa/./ aa/aa
+aa///aa//a aa/aa/a
+aa///aa//. aa/aa
+aa///aa/// aa/aa
+aa///a.aaa aa/a.aaa
+aa///a.aa. aa/a.aa.
+aa///a.aa/ aa/a.aa
+aa///a.a.a aa/a.a.a
+aa///a.a.. aa/a.a..
+aa///a.a./ aa/a.a.
+aa///a.a/a aa/a.a/a
+aa///a.a/. aa/a.a
+aa///a.a// aa/a.a
+aa///a..aa aa/a..aa
+aa///a..a. aa/a..a.
+aa///a..a/ aa/a..a
+aa///a...a aa/a...a
+aa///a.... aa/a....
+aa///a.../ aa/a...
+aa///a../a aa/a../a
+aa///a../. aa/a..
+aa///a..// aa/a..
+aa///a./aa aa/a./aa
+aa///a./a. aa/a./a.
+aa///a./a/ aa/a./a
+aa///a./.a aa/a./.a
+aa///a./.. aa
+aa///a././ aa/a.
+aa///a.//a aa/a./a
+aa///a.//. aa/a.
+aa///a./// aa/a.
+aa///a/aaa aa/a/aaa
+aa///a/aa. aa/a/aa.
+aa///a/aa/ aa/a/aa
+aa///a/a.a aa/a/a.a
+aa///a/a.. aa/a/a..
+aa///a/a./ aa/a/a.
+aa///a/a/a aa/a/a/a
+aa///a/a/. aa/a/a
+aa///a/a// aa/a/a
+aa///a/.aa aa/a/.aa
+aa///a/.a. aa/a/.a.
+aa///a/.a/ aa/a/.a
+aa///a/..a aa/a/..a
+aa///a/... aa/a/...
+aa///a/../ aa
+aa///a/./a aa/a/a
+aa///a/./. aa/a
+aa///a/.// aa/a
+aa///a//aa aa/a/aa
+aa///a//a. aa/a/a.
+aa///a//a/ aa/a/a
+aa///a//.a aa/a/.a
+aa///a//.. aa
+aa///a//./ aa/a
+aa///a///a aa/a/a
+aa///a///. aa/a
+aa///a//// aa/a
+aa///.aaaa aa/.aaaa
+aa///.aaa. aa/.aaa.
+aa///.aaa/ aa/.aaa
+aa///.aa.a aa/.aa.a
+aa///.aa.. aa/.aa..
+aa///.aa./ aa/.aa.
+aa///.aa/a aa/.aa/a
+aa///.aa/. aa/.aa
+aa///.aa// aa/.aa
+aa///.a.aa aa/.a.aa
+aa///.a.a. aa/.a.a.
+aa///.a.a/ aa/.a.a
+aa///.a..a aa/.a..a
+aa///.a... aa/.a...
+aa///.a../ aa/.a..
+aa///.a./a aa/.a./a
+aa///.a./. aa/.a.
+aa///.a.// aa/.a.
+aa///.a/aa aa/.a/aa
+aa///.a/a. aa/.a/a.
+aa///.a/a/ aa/.a/a
+aa///.a/.a aa/.a/.a
+aa///.a/.. aa
+aa///.a/./ aa/.a
+aa///.a//a aa/.a/a
+aa///.a//. aa/.a
+aa///.a/// aa/.a
+aa///..aaa aa/..aaa
+aa///..aa. aa/..aa.
+aa///..aa/ aa/..aa
+aa///..a.a aa/..a.a
+aa///..a.. aa/..a..
+aa///..a./ aa/..a.
+aa///..a/a aa/..a/a
+aa///..a/. aa/..a
+aa///..a// aa/..a
+aa///...aa aa/...aa
+aa///...a. aa/...a.
+aa///...a/ aa/...a
+aa///....a aa/....a
+aa///..... aa/.....
+aa///..../ aa/....
+aa///.../a aa/.../a
+aa///.../. aa/...
+aa///...// aa/...
+aa///../aa aa
+aa///../a. a.
+aa///../a/ a
+aa///../.a .a
+aa///../.. ..
+aa///.././ .
+aa///..//a a
+aa///..//. .
+aa///../// .
+aa///./aaa aa/aaa
+aa///./aa. aa/aa.
+aa///./aa/ aa/aa
+aa///./a.a aa/a.a
+aa///./a.. aa/a..
+aa///./a./ aa/a.
+aa///./a/a aa/a/a
+aa///./a/. aa/a
+aa///./a// aa/a
+aa///./.aa aa/.aa
+aa///./.a. aa/.a.
+aa///./.a/ aa/.a
+aa///./..a aa/..a
+aa///./... aa/...
+aa///./../ .
+aa///././a aa/a
+aa///././. aa
+aa///./.// aa
+aa///.//aa aa/aa
+aa///.//a. aa/a.
+aa///.//a/ aa/a
+aa///.//.a aa/.a
+aa///.//.. .
+aa///.//./ aa
+aa///.///a aa/a
+aa///.///. aa
+aa///.//// aa
+aa////aaaa aa/aaaa
+aa////aaa. aa/aaa.
+aa////aaa/ aa/aaa
+aa////aa.a aa/aa.a
+aa////aa.. aa/aa..
+aa////aa./ aa/aa.
+aa////aa/a aa/aa/a
+aa////aa/. aa/aa
+aa////aa// aa/aa
+aa////a.aa aa/a.aa
+aa////a.a. aa/a.a.
+aa////a.a/ aa/a.a
+aa////a..a aa/a..a
+aa////a... aa/a...
+aa////a../ aa/a..
+aa////a./a aa/a./a
+aa////a./. aa/a.
+aa////a.// aa/a.
+aa////a/aa aa/a/aa
+aa////a/a. aa/a/a.
+aa////a/a/ aa/a/a
+aa////a/.a aa/a/.a
+aa////a/.. aa
+aa////a/./ aa/a
+aa////a//a aa/a/a
+aa////a//. aa/a
+aa////a/// aa/a
+aa////.aaa aa/.aaa
+aa////.aa. aa/.aa.
+aa////.aa/ aa/.aa
+aa////.a.a aa/.a.a
+aa////.a.. aa/.a..
+aa////.a./ aa/.a.
+aa////.a/a aa/.a/a
+aa////.a/. aa/.a
+aa////.a// aa/.a
+aa////..aa aa/..aa
+aa////..a. aa/..a.
+aa////..a/ aa/..a
+aa////...a aa/...a
+aa////.... aa/....
+aa////.../ aa/...
+aa////../a a
+aa////../. .
+aa////..// .
+aa////./aa aa/aa
+aa////./a. aa/a.
+aa////./a/ aa/a
+aa////./.a aa/.a
+aa////./.. .
+aa////././ aa
+aa////.//a aa/a
+aa////.//. aa
+aa////./// aa
+aa/////aaa aa/aaa
+aa/////aa. aa/aa.
+aa/////aa/ aa/aa
+aa/////a.a aa/a.a
+aa/////a.. aa/a..
+aa/////a./ aa/a.
+aa/////a/a aa/a/a
+aa/////a/. aa/a
+aa/////a// aa/a
+aa/////.aa aa/.aa
+aa/////.a. aa/.a.
+aa/////.a/ aa/.a
+aa/////..a aa/..a
+aa/////... aa/...
+aa/////../ .
+aa/////./a aa/a
+aa/////./. aa
+aa/////.// aa
+aa//////aa aa/aa
+aa//////a. aa/a.
+aa//////a/ aa/a
+aa//////.a aa/.a
+aa//////.. .
+aa//////./ aa
+aa///////a aa/a
+aa///////. aa
+aa//////// aa
+a.aaaaaaaa a.aaaaaaaa
+a.aaaaaaa. a.aaaaaaa.
+a.aaaaaaa/ a.aaaaaaa
+a.aaaaaa.a a.aaaaaa.a
+a.aaaaaa.. a.aaaaaa..
+a.aaaaaa./ a.aaaaaa.
+a.aaaaaa/a a.aaaaaa/a
+a.aaaaaa/. a.aaaaaa
+a.aaaaaa// a.aaaaaa
+a.aaaaa.aa a.aaaaa.aa
+a.aaaaa.a. a.aaaaa.a.
+a.aaaaa.a/ a.aaaaa.a
+a.aaaaa..a a.aaaaa..a
+a.aaaaa... a.aaaaa...
+a.aaaaa../ a.aaaaa..
+a.aaaaa./a a.aaaaa./a
+a.aaaaa./. a.aaaaa.
+a.aaaaa.// a.aaaaa.
+a.aaaaa/aa a.aaaaa/aa
+a.aaaaa/a. a.aaaaa/a.
+a.aaaaa/a/ a.aaaaa/a
+a.aaaaa/.a a.aaaaa/.a
+a.aaaaa/.. .
+a.aaaaa/./ a.aaaaa
+a.aaaaa//a a.aaaaa/a
+a.aaaaa//. a.aaaaa
+a.aaaaa/// a.aaaaa
+a.aaaa.aaa a.aaaa.aaa
+a.aaaa.aa. a.aaaa.aa.
+a.aaaa.aa/ a.aaaa.aa
+a.aaaa.a.a a.aaaa.a.a
+a.aaaa.a.. a.aaaa.a..
+a.aaaa.a./ a.aaaa.a.
+a.aaaa.a/a a.aaaa.a/a
+a.aaaa.a/. a.aaaa.a
+a.aaaa.a// a.aaaa.a
+a.aaaa..aa a.aaaa..aa
+a.aaaa..a. a.aaaa..a.
+a.aaaa..a/ a.aaaa..a
+a.aaaa...a a.aaaa...a
+a.aaaa.... a.aaaa....
+a.aaaa.../ a.aaaa...
+a.aaaa../a a.aaaa../a
+a.aaaa../. a.aaaa..
+a.aaaa..// a.aaaa..
+a.aaaa./aa a.aaaa./aa
+a.aaaa./a. a.aaaa./a.
+a.aaaa./a/ a.aaaa./a
+a.aaaa./.a a.aaaa./.a
+a.aaaa./.. .
+a.aaaa././ a.aaaa.
+a.aaaa.//a a.aaaa./a
+a.aaaa.//. a.aaaa.
+a.aaaa./// a.aaaa.
+a.aaaa/aaa a.aaaa/aaa
+a.aaaa/aa. a.aaaa/aa.
+a.aaaa/aa/ a.aaaa/aa
+a.aaaa/a.a a.aaaa/a.a
+a.aaaa/a.. a.aaaa/a..
+a.aaaa/a./ a.aaaa/a.
+a.aaaa/a/a a.aaaa/a/a
+a.aaaa/a/. a.aaaa/a
+a.aaaa/a// a.aaaa/a
+a.aaaa/.aa a.aaaa/.aa
+a.aaaa/.a. a.aaaa/.a.
+a.aaaa/.a/ a.aaaa/.a
+a.aaaa/..a a.aaaa/..a
+a.aaaa/... a.aaaa/...
+a.aaaa/../ .
+a.aaaa/./a a.aaaa/a
+a.aaaa/./. a.aaaa
+a.aaaa/.// a.aaaa
+a.aaaa//aa a.aaaa/aa
+a.aaaa//a. a.aaaa/a.
+a.aaaa//a/ a.aaaa/a
+a.aaaa//.a a.aaaa/.a
+a.aaaa//.. .
+a.aaaa//./ a.aaaa
+a.aaaa///a a.aaaa/a
+a.aaaa///. a.aaaa
+a.aaaa//// a.aaaa
+a.aaa.aaaa a.aaa.aaaa
+a.aaa.aaa. a.aaa.aaa.
+a.aaa.aaa/ a.aaa.aaa
+a.aaa.aa.a a.aaa.aa.a
+a.aaa.aa.. a.aaa.aa..
+a.aaa.aa./ a.aaa.aa.
+a.aaa.aa/a a.aaa.aa/a
+a.aaa.aa/. a.aaa.aa
+a.aaa.aa// a.aaa.aa
+a.aaa.a.aa a.aaa.a.aa
+a.aaa.a.a. a.aaa.a.a.
+a.aaa.a.a/ a.aaa.a.a
+a.aaa.a..a a.aaa.a..a
+a.aaa.a... a.aaa.a...
+a.aaa.a../ a.aaa.a..
+a.aaa.a./a a.aaa.a./a
+a.aaa.a./. a.aaa.a.
+a.aaa.a.// a.aaa.a.
+a.aaa.a/aa a.aaa.a/aa
+a.aaa.a/a. a.aaa.a/a.
+a.aaa.a/a/ a.aaa.a/a
+a.aaa.a/.a a.aaa.a/.a
+a.aaa.a/.. .
+a.aaa.a/./ a.aaa.a
+a.aaa.a//a a.aaa.a/a
+a.aaa.a//. a.aaa.a
+a.aaa.a/// a.aaa.a
+a.aaa..aaa a.aaa..aaa
+a.aaa..aa. a.aaa..aa.
+a.aaa..aa/ a.aaa..aa
+a.aaa..a.a a.aaa..a.a
+a.aaa..a.. a.aaa..a..
+a.aaa..a./ a.aaa..a.
+a.aaa..a/a a.aaa..a/a
+a.aaa..a/. a.aaa..a
+a.aaa..a// a.aaa..a
+a.aaa...aa a.aaa...aa
+a.aaa...a. a.aaa...a.
+a.aaa...a/ a.aaa...a
+a.aaa....a a.aaa....a
+a.aaa..... a.aaa.....
+a.aaa..../ a.aaa....
+a.aaa.../a a.aaa.../a
+a.aaa.../. a.aaa...
+a.aaa...// a.aaa...
+a.aaa../aa a.aaa../aa
+a.aaa../a. a.aaa../a.
+a.aaa../a/ a.aaa../a
+a.aaa../.a a.aaa../.a
+a.aaa../.. .
+a.aaa.././ a.aaa..
+a.aaa..//a a.aaa../a
+a.aaa..//. a.aaa..
+a.aaa../// a.aaa..
+a.aaa./aaa a.aaa./aaa
+a.aaa./aa. a.aaa./aa.
+a.aaa./aa/ a.aaa./aa
+a.aaa./a.a a.aaa./a.a
+a.aaa./a.. a.aaa./a..
+a.aaa./a./ a.aaa./a.
+a.aaa./a/a a.aaa./a/a
+a.aaa./a/. a.aaa./a
+a.aaa./a// a.aaa./a
+a.aaa./.aa a.aaa./.aa
+a.aaa./.a. a.aaa./.a.
+a.aaa./.a/ a.aaa./.a
+a.aaa./..a a.aaa./..a
+a.aaa./... a.aaa./...
+a.aaa./../ .
+a.aaa././a a.aaa./a
+a.aaa././. a.aaa.
+a.aaa./.// a.aaa.
+a.aaa.//aa a.aaa./aa
+a.aaa.//a. a.aaa./a.
+a.aaa.//a/ a.aaa./a
+a.aaa.//.a a.aaa./.a
+a.aaa.//.. .
+a.aaa.//./ a.aaa.
+a.aaa.///a a.aaa./a
+a.aaa.///. a.aaa.
+a.aaa.//// a.aaa.
+a.aaa/aaaa a.aaa/aaaa
+a.aaa/aaa. a.aaa/aaa.
+a.aaa/aaa/ a.aaa/aaa
+a.aaa/aa.a a.aaa/aa.a
+a.aaa/aa.. a.aaa/aa..
+a.aaa/aa./ a.aaa/aa.
+a.aaa/aa/a a.aaa/aa/a
+a.aaa/aa/. a.aaa/aa
+a.aaa/aa// a.aaa/aa
+a.aaa/a.aa a.aaa/a.aa
+a.aaa/a.a. a.aaa/a.a.
+a.aaa/a.a/ a.aaa/a.a
+a.aaa/a..a a.aaa/a..a
+a.aaa/a... a.aaa/a...
+a.aaa/a../ a.aaa/a..
+a.aaa/a./a a.aaa/a./a
+a.aaa/a./. a.aaa/a.
+a.aaa/a.// a.aaa/a.
+a.aaa/a/aa a.aaa/a/aa
+a.aaa/a/a. a.aaa/a/a.
+a.aaa/a/a/ a.aaa/a/a
+a.aaa/a/.a a.aaa/a/.a
+a.aaa/a/.. a.aaa
+a.aaa/a/./ a.aaa/a
+a.aaa/a//a a.aaa/a/a
+a.aaa/a//. a.aaa/a
+a.aaa/a/// a.aaa/a
+a.aaa/.aaa a.aaa/.aaa
+a.aaa/.aa. a.aaa/.aa.
+a.aaa/.aa/ a.aaa/.aa
+a.aaa/.a.a a.aaa/.a.a
+a.aaa/.a.. a.aaa/.a..
+a.aaa/.a./ a.aaa/.a.
+a.aaa/.a/a a.aaa/.a/a
+a.aaa/.a/. a.aaa/.a
+a.aaa/.a// a.aaa/.a
+a.aaa/..aa a.aaa/..aa
+a.aaa/..a. a.aaa/..a.
+a.aaa/..a/ a.aaa/..a
+a.aaa/...a a.aaa/...a
+a.aaa/.... a.aaa/....
+a.aaa/.../ a.aaa/...
+a.aaa/../a a
+a.aaa/../. .
+a.aaa/..// .
+a.aaa/./aa a.aaa/aa
+a.aaa/./a. a.aaa/a.
+a.aaa/./a/ a.aaa/a
+a.aaa/./.a a.aaa/.a
+a.aaa/./.. .
+a.aaa/././ a.aaa
+a.aaa/.//a a.aaa/a
+a.aaa/.//. a.aaa
+a.aaa/./// a.aaa
+a.aaa//aaa a.aaa/aaa
+a.aaa//aa. a.aaa/aa.
+a.aaa//aa/ a.aaa/aa
+a.aaa//a.a a.aaa/a.a
+a.aaa//a.. a.aaa/a..
+a.aaa//a./ a.aaa/a.
+a.aaa//a/a a.aaa/a/a
+a.aaa//a/. a.aaa/a
+a.aaa//a// a.aaa/a
+a.aaa//.aa a.aaa/.aa
+a.aaa//.a. a.aaa/.a.
+a.aaa//.a/ a.aaa/.a
+a.aaa//..a a.aaa/..a
+a.aaa//... a.aaa/...
+a.aaa//../ .
+a.aaa//./a a.aaa/a
+a.aaa//./. a.aaa
+a.aaa//.// a.aaa
+a.aaa///aa a.aaa/aa
+a.aaa///a. a.aaa/a.
+a.aaa///a/ a.aaa/a
+a.aaa///.a a.aaa/.a
+a.aaa///.. .
+a.aaa///./ a.aaa
+a.aaa////a a.aaa/a
+a.aaa////. a.aaa
+a.aaa///// a.aaa
+a.aa.aaaaa a.aa.aaaaa
+a.aa.aaaa. a.aa.aaaa.
+a.aa.aaaa/ a.aa.aaaa
+a.aa.aaa.a a.aa.aaa.a
+a.aa.aaa.. a.aa.aaa..
+a.aa.aaa./ a.aa.aaa.
+a.aa.aaa/a a.aa.aaa/a
+a.aa.aaa/. a.aa.aaa
+a.aa.aaa// a.aa.aaa
+a.aa.aa.aa a.aa.aa.aa
+a.aa.aa.a. a.aa.aa.a.
+a.aa.aa.a/ a.aa.aa.a
+a.aa.aa..a a.aa.aa..a
+a.aa.aa... a.aa.aa...
+a.aa.aa../ a.aa.aa..
+a.aa.aa./a a.aa.aa./a
+a.aa.aa./. a.aa.aa.
+a.aa.aa.// a.aa.aa.
+a.aa.aa/aa a.aa.aa/aa
+a.aa.aa/a. a.aa.aa/a.
+a.aa.aa/a/ a.aa.aa/a
+a.aa.aa/.a a.aa.aa/.a
+a.aa.aa/.. .
+a.aa.aa/./ a.aa.aa
+a.aa.aa//a a.aa.aa/a
+a.aa.aa//. a.aa.aa
+a.aa.aa/// a.aa.aa
+a.aa.a.aaa a.aa.a.aaa
+a.aa.a.aa. a.aa.a.aa.
+a.aa.a.aa/ a.aa.a.aa
+a.aa.a.a.a a.aa.a.a.a
+a.aa.a.a.. a.aa.a.a..
+a.aa.a.a./ a.aa.a.a.
+a.aa.a.a/a a.aa.a.a/a
+a.aa.a.a/. a.aa.a.a
+a.aa.a.a// a.aa.a.a
+a.aa.a..aa a.aa.a..aa
+a.aa.a..a. a.aa.a..a.
+a.aa.a..a/ a.aa.a..a
+a.aa.a...a a.aa.a...a
+a.aa.a.... a.aa.a....
+a.aa.a.../ a.aa.a...
+a.aa.a../a a.aa.a../a
+a.aa.a../. a.aa.a..
+a.aa.a..// a.aa.a..
+a.aa.a./aa a.aa.a./aa
+a.aa.a./a. a.aa.a./a.
+a.aa.a./a/ a.aa.a./a
+a.aa.a./.a a.aa.a./.a
+a.aa.a./.. .
+a.aa.a././ a.aa.a.
+a.aa.a.//a a.aa.a./a
+a.aa.a.//. a.aa.a.
+a.aa.a./// a.aa.a.
+a.aa.a/aaa a.aa.a/aaa
+a.aa.a/aa. a.aa.a/aa.
+a.aa.a/aa/ a.aa.a/aa
+a.aa.a/a.a a.aa.a/a.a
+a.aa.a/a.. a.aa.a/a..
+a.aa.a/a./ a.aa.a/a.
+a.aa.a/a/a a.aa.a/a/a
+a.aa.a/a/. a.aa.a/a
+a.aa.a/a// a.aa.a/a
+a.aa.a/.aa a.aa.a/.aa
+a.aa.a/.a. a.aa.a/.a.
+a.aa.a/.a/ a.aa.a/.a
+a.aa.a/..a a.aa.a/..a
+a.aa.a/... a.aa.a/...
+a.aa.a/../ .
+a.aa.a/./a a.aa.a/a
+a.aa.a/./. a.aa.a
+a.aa.a/.// a.aa.a
+a.aa.a//aa a.aa.a/aa
+a.aa.a//a. a.aa.a/a.
+a.aa.a//a/ a.aa.a/a
+a.aa.a//.a a.aa.a/.a
+a.aa.a//.. .
+a.aa.a//./ a.aa.a
+a.aa.a///a a.aa.a/a
+a.aa.a///. a.aa.a
+a.aa.a//// a.aa.a
+a.aa..aaaa a.aa..aaaa
+a.aa..aaa. a.aa..aaa.
+a.aa..aaa/ a.aa..aaa
+a.aa..aa.a a.aa..aa.a
+a.aa..aa.. a.aa..aa..
+a.aa..aa./ a.aa..aa.
+a.aa..aa/a a.aa..aa/a
+a.aa..aa/. a.aa..aa
+a.aa..aa// a.aa..aa
+a.aa..a.aa a.aa..a.aa
+a.aa..a.a. a.aa..a.a.
+a.aa..a.a/ a.aa..a.a
+a.aa..a..a a.aa..a..a
+a.aa..a... a.aa..a...
+a.aa..a../ a.aa..a..
+a.aa..a./a a.aa..a./a
+a.aa..a./. a.aa..a.
+a.aa..a.// a.aa..a.
+a.aa..a/aa a.aa..a/aa
+a.aa..a/a. a.aa..a/a.
+a.aa..a/a/ a.aa..a/a
+a.aa..a/.a a.aa..a/.a
+a.aa..a/.. .
+a.aa..a/./ a.aa..a
+a.aa..a//a a.aa..a/a
+a.aa..a//. a.aa..a
+a.aa..a/// a.aa..a
+a.aa...aaa a.aa...aaa
+a.aa...aa. a.aa...aa.
+a.aa...aa/ a.aa...aa
+a.aa...a.a a.aa...a.a
+a.aa...a.. a.aa...a..
+a.aa...a./ a.aa...a.
+a.aa...a/a a.aa...a/a
+a.aa...a/. a.aa...a
+a.aa...a// a.aa...a
+a.aa....aa a.aa....aa
+a.aa....a. a.aa....a.
+a.aa....a/ a.aa....a
+a.aa.....a a.aa.....a
+a.aa...... a.aa......
+a.aa...../ a.aa.....
+a.aa..../a a.aa..../a
+a.aa..../. a.aa....
+a.aa....// a.aa....
+a.aa.../aa a.aa.../aa
+a.aa.../a. a.aa.../a.
+a.aa.../a/ a.aa.../a
+a.aa.../.a a.aa.../.a
+a.aa.../.. .
+a.aa..././ a.aa...
+a.aa...//a a.aa.../a
+a.aa...//. a.aa...
+a.aa.../// a.aa...
+a.aa../aaa a.aa../aaa
+a.aa../aa. a.aa../aa.
+a.aa../aa/ a.aa../aa
+a.aa../a.a a.aa../a.a
+a.aa../a.. a.aa../a..
+a.aa../a./ a.aa../a.
+a.aa../a/a a.aa../a/a
+a.aa../a/. a.aa../a
+a.aa../a// a.aa../a
+a.aa../.aa a.aa../.aa
+a.aa../.a. a.aa../.a.
+a.aa../.a/ a.aa../.a
+a.aa../..a a.aa../..a
+a.aa../... a.aa../...
+a.aa../../ .
+a.aa.././a a.aa../a
+a.aa.././. a.aa..
+a.aa../.// a.aa..
+a.aa..//aa a.aa../aa
+a.aa..//a. a.aa../a.
+a.aa..//a/ a.aa../a
+a.aa..//.a a.aa../.a
+a.aa..//.. .
+a.aa..//./ a.aa..
+a.aa..///a a.aa../a
+a.aa..///. a.aa..
+a.aa..//// a.aa..
+a.aa./aaaa a.aa./aaaa
+a.aa./aaa. a.aa./aaa.
+a.aa./aaa/ a.aa./aaa
+a.aa./aa.a a.aa./aa.a
+a.aa./aa.. a.aa./aa..
+a.aa./aa./ a.aa./aa.
+a.aa./aa/a a.aa./aa/a
+a.aa./aa/. a.aa./aa
+a.aa./aa// a.aa./aa
+a.aa./a.aa a.aa./a.aa
+a.aa./a.a. a.aa./a.a.
+a.aa./a.a/ a.aa./a.a
+a.aa./a..a a.aa./a..a
+a.aa./a... a.aa./a...
+a.aa./a../ a.aa./a..
+a.aa./a./a a.aa./a./a
+a.aa./a./. a.aa./a.
+a.aa./a.// a.aa./a.
+a.aa./a/aa a.aa./a/aa
+a.aa./a/a. a.aa./a/a.
+a.aa./a/a/ a.aa./a/a
+a.aa./a/.a a.aa./a/.a
+a.aa./a/.. a.aa.
+a.aa./a/./ a.aa./a
+a.aa./a//a a.aa./a/a
+a.aa./a//. a.aa./a
+a.aa./a/// a.aa./a
+a.aa./.aaa a.aa./.aaa
+a.aa./.aa. a.aa./.aa.
+a.aa./.aa/ a.aa./.aa
+a.aa./.a.a a.aa./.a.a
+a.aa./.a.. a.aa./.a..
+a.aa./.a./ a.aa./.a.
+a.aa./.a/a a.aa./.a/a
+a.aa./.a/. a.aa./.a
+a.aa./.a// a.aa./.a
+a.aa./..aa a.aa./..aa
+a.aa./..a. a.aa./..a.
+a.aa./..a/ a.aa./..a
+a.aa./...a a.aa./...a
+a.aa./.... a.aa./....
+a.aa./.../ a.aa./...
+a.aa./../a a
+a.aa./../. .
+a.aa./..// .
+a.aa././aa a.aa./aa
+a.aa././a. a.aa./a.
+a.aa././a/ a.aa./a
+a.aa././.a a.aa./.a
+a.aa././.. .
+a.aa./././ a.aa.
+a.aa././/a a.aa./a
+a.aa././/. a.aa.
+a.aa././// a.aa.
+a.aa.//aaa a.aa./aaa
+a.aa.//aa. a.aa./aa.
+a.aa.//aa/ a.aa./aa
+a.aa.//a.a a.aa./a.a
+a.aa.//a.. a.aa./a..
+a.aa.//a./ a.aa./a.
+a.aa.//a/a a.aa./a/a
+a.aa.//a/. a.aa./a
+a.aa.//a// a.aa./a
+a.aa.//.aa a.aa./.aa
+a.aa.//.a. a.aa./.a.
+a.aa.//.a/ a.aa./.a
+a.aa.//..a a.aa./..a
+a.aa.//... a.aa./...
+a.aa.//../ .
+a.aa.//./a a.aa./a
+a.aa.//./. a.aa.
+a.aa.//.// a.aa.
+a.aa.///aa a.aa./aa
+a.aa.///a. a.aa./a.
+a.aa.///a/ a.aa./a
+a.aa.///.a a.aa./.a
+a.aa.///.. .
+a.aa.///./ a.aa.
+a.aa.////a a.aa./a
+a.aa.////. a.aa.
+a.aa.///// a.aa.
+a.aa/aaaaa a.aa/aaaaa
+a.aa/aaaa. a.aa/aaaa.
+a.aa/aaaa/ a.aa/aaaa
+a.aa/aaa.a a.aa/aaa.a
+a.aa/aaa.. a.aa/aaa..
+a.aa/aaa./ a.aa/aaa.
+a.aa/aaa/a a.aa/aaa/a
+a.aa/aaa/. a.aa/aaa
+a.aa/aaa// a.aa/aaa
+a.aa/aa.aa a.aa/aa.aa
+a.aa/aa.a. a.aa/aa.a.
+a.aa/aa.a/ a.aa/aa.a
+a.aa/aa..a a.aa/aa..a
+a.aa/aa... a.aa/aa...
+a.aa/aa../ a.aa/aa..
+a.aa/aa./a a.aa/aa./a
+a.aa/aa./. a.aa/aa.
+a.aa/aa.// a.aa/aa.
+a.aa/aa/aa a.aa/aa/aa
+a.aa/aa/a. a.aa/aa/a.
+a.aa/aa/a/ a.aa/aa/a
+a.aa/aa/.a a.aa/aa/.a
+a.aa/aa/.. a.aa
+a.aa/aa/./ a.aa/aa
+a.aa/aa//a a.aa/aa/a
+a.aa/aa//. a.aa/aa
+a.aa/aa/// a.aa/aa
+a.aa/a.aaa a.aa/a.aaa
+a.aa/a.aa. a.aa/a.aa.
+a.aa/a.aa/ a.aa/a.aa
+a.aa/a.a.a a.aa/a.a.a
+a.aa/a.a.. a.aa/a.a..
+a.aa/a.a./ a.aa/a.a.
+a.aa/a.a/a a.aa/a.a/a
+a.aa/a.a/. a.aa/a.a
+a.aa/a.a// a.aa/a.a
+a.aa/a..aa a.aa/a..aa
+a.aa/a..a. a.aa/a..a.
+a.aa/a..a/ a.aa/a..a
+a.aa/a...a a.aa/a...a
+a.aa/a.... a.aa/a....
+a.aa/a.../ a.aa/a...
+a.aa/a../a a.aa/a../a
+a.aa/a../. a.aa/a..
+a.aa/a..// a.aa/a..
+a.aa/a./aa a.aa/a./aa
+a.aa/a./a. a.aa/a./a.
+a.aa/a./a/ a.aa/a./a
+a.aa/a./.a a.aa/a./.a
+a.aa/a./.. a.aa
+a.aa/a././ a.aa/a.
+a.aa/a.//a a.aa/a./a
+a.aa/a.//. a.aa/a.
+a.aa/a./// a.aa/a.
+a.aa/a/aaa a.aa/a/aaa
+a.aa/a/aa. a.aa/a/aa.
+a.aa/a/aa/ a.aa/a/aa
+a.aa/a/a.a a.aa/a/a.a
+a.aa/a/a.. a.aa/a/a..
+a.aa/a/a./ a.aa/a/a.
+a.aa/a/a/a a.aa/a/a/a
+a.aa/a/a/. a.aa/a/a
+a.aa/a/a// a.aa/a/a
+a.aa/a/.aa a.aa/a/.aa
+a.aa/a/.a. a.aa/a/.a.
+a.aa/a/.a/ a.aa/a/.a
+a.aa/a/..a a.aa/a/..a
+a.aa/a/... a.aa/a/...
+a.aa/a/../ a.aa
+a.aa/a/./a a.aa/a/a
+a.aa/a/./. a.aa/a
+a.aa/a/.// a.aa/a
+a.aa/a//aa a.aa/a/aa
+a.aa/a//a. a.aa/a/a.
+a.aa/a//a/ a.aa/a/a
+a.aa/a//.a a.aa/a/.a
+a.aa/a//.. a.aa
+a.aa/a//./ a.aa/a
+a.aa/a///a a.aa/a/a
+a.aa/a///. a.aa/a
+a.aa/a//// a.aa/a
+a.aa/.aaaa a.aa/.aaaa
+a.aa/.aaa. a.aa/.aaa.
+a.aa/.aaa/ a.aa/.aaa
+a.aa/.aa.a a.aa/.aa.a
+a.aa/.aa.. a.aa/.aa..
+a.aa/.aa./ a.aa/.aa.
+a.aa/.aa/a a.aa/.aa/a
+a.aa/.aa/. a.aa/.aa
+a.aa/.aa// a.aa/.aa
+a.aa/.a.aa a.aa/.a.aa
+a.aa/.a.a. a.aa/.a.a.
+a.aa/.a.a/ a.aa/.a.a
+a.aa/.a..a a.aa/.a..a
+a.aa/.a... a.aa/.a...
+a.aa/.a../ a.aa/.a..
+a.aa/.a./a a.aa/.a./a
+a.aa/.a./. a.aa/.a.
+a.aa/.a.// a.aa/.a.
+a.aa/.a/aa a.aa/.a/aa
+a.aa/.a/a. a.aa/.a/a.
+a.aa/.a/a/ a.aa/.a/a
+a.aa/.a/.a a.aa/.a/.a
+a.aa/.a/.. a.aa
+a.aa/.a/./ a.aa/.a
+a.aa/.a//a a.aa/.a/a
+a.aa/.a//. a.aa/.a
+a.aa/.a/// a.aa/.a
+a.aa/..aaa a.aa/..aaa
+a.aa/..aa. a.aa/..aa.
+a.aa/..aa/ a.aa/..aa
+a.aa/..a.a a.aa/..a.a
+a.aa/..a.. a.aa/..a..
+a.aa/..a./ a.aa/..a.
+a.aa/..a/a a.aa/..a/a
+a.aa/..a/. a.aa/..a
+a.aa/..a// a.aa/..a
+a.aa/...aa a.aa/...aa
+a.aa/...a. a.aa/...a.
+a.aa/...a/ a.aa/...a
+a.aa/....a a.aa/....a
+a.aa/..... a.aa/.....
+a.aa/..../ a.aa/....
+a.aa/.../a a.aa/.../a
+a.aa/.../. a.aa/...
+a.aa/...// a.aa/...
+a.aa/../aa aa
+a.aa/../a. a.
+a.aa/../a/ a
+a.aa/../.a .a
+a.aa/../.. ..
+a.aa/.././ .
+a.aa/..//a a
+a.aa/..//. .
+a.aa/../// .
+a.aa/./aaa a.aa/aaa
+a.aa/./aa. a.aa/aa.
+a.aa/./aa/ a.aa/aa
+a.aa/./a.a a.aa/a.a
+a.aa/./a.. a.aa/a..
+a.aa/./a./ a.aa/a.
+a.aa/./a/a a.aa/a/a
+a.aa/./a/. a.aa/a
+a.aa/./a// a.aa/a
+a.aa/./.aa a.aa/.aa
+a.aa/./.a. a.aa/.a.
+a.aa/./.a/ a.aa/.a
+a.aa/./..a a.aa/..a
+a.aa/./... a.aa/...
+a.aa/./../ .
+a.aa/././a a.aa/a
+a.aa/././. a.aa
+a.aa/./.// a.aa
+a.aa/.//aa a.aa/aa
+a.aa/.//a. a.aa/a.
+a.aa/.//a/ a.aa/a
+a.aa/.//.a a.aa/.a
+a.aa/.//.. .
+a.aa/.//./ a.aa
+a.aa/.///a a.aa/a
+a.aa/.///. a.aa
+a.aa/.//// a.aa
+a.aa//aaaa a.aa/aaaa
+a.aa//aaa. a.aa/aaa.
+a.aa//aaa/ a.aa/aaa
+a.aa//aa.a a.aa/aa.a
+a.aa//aa.. a.aa/aa..
+a.aa//aa./ a.aa/aa.
+a.aa//aa/a a.aa/aa/a
+a.aa//aa/. a.aa/aa
+a.aa//aa// a.aa/aa
+a.aa//a.aa a.aa/a.aa
+a.aa//a.a. a.aa/a.a.
+a.aa//a.a/ a.aa/a.a
+a.aa//a..a a.aa/a..a
+a.aa//a... a.aa/a...
+a.aa//a../ a.aa/a..
+a.aa//a./a a.aa/a./a
+a.aa//a./. a.aa/a.
+a.aa//a.// a.aa/a.
+a.aa//a/aa a.aa/a/aa
+a.aa//a/a. a.aa/a/a.
+a.aa//a/a/ a.aa/a/a
+a.aa//a/.a a.aa/a/.a
+a.aa//a/.. a.aa
+a.aa//a/./ a.aa/a
+a.aa//a//a a.aa/a/a
+a.aa//a//. a.aa/a
+a.aa//a/// a.aa/a
+a.aa//.aaa a.aa/.aaa
+a.aa//.aa. a.aa/.aa.
+a.aa//.aa/ a.aa/.aa
+a.aa//.a.a a.aa/.a.a
+a.aa//.a.. a.aa/.a..
+a.aa//.a./ a.aa/.a.
+a.aa//.a/a a.aa/.a/a
+a.aa//.a/. a.aa/.a
+a.aa//.a// a.aa/.a
+a.aa//..aa a.aa/..aa
+a.aa//..a. a.aa/..a.
+a.aa//..a/ a.aa/..a
+a.aa//...a a.aa/...a
+a.aa//.... a.aa/....
+a.aa//.../ a.aa/...
+a.aa//../a a
+a.aa//../. .
+a.aa//..// .
+a.aa//./aa a.aa/aa
+a.aa//./a. a.aa/a.
+a.aa//./a/ a.aa/a
+a.aa//./.a a.aa/.a
+a.aa//./.. .
+a.aa//././ a.aa
+a.aa//.//a a.aa/a
+a.aa//.//. a.aa
+a.aa//./// a.aa
+a.aa///aaa a.aa/aaa
+a.aa///aa. a.aa/aa.
+a.aa///aa/ a.aa/aa
+a.aa///a.a a.aa/a.a
+a.aa///a.. a.aa/a..
+a.aa///a./ a.aa/a.
+a.aa///a/a a.aa/a/a
+a.aa///a/. a.aa/a
+a.aa///a// a.aa/a
+a.aa///.aa a.aa/.aa
+a.aa///.a. a.aa/.a.
+a.aa///.a/ a.aa/.a
+a.aa///..a a.aa/..a
+a.aa///... a.aa/...
+a.aa///../ .
+a.aa///./a a.aa/a
+a.aa///./. a.aa
+a.aa///.// a.aa
+a.aa////aa a.aa/aa
+a.aa////a. a.aa/a.
+a.aa////a/ a.aa/a
+a.aa////.a a.aa/.a
+a.aa////.. .
+a.aa////./ a.aa
+a.aa/////a a.aa/a
+a.aa/////. a.aa
+a.aa////// a.aa
+a.a.aaaaaa a.a.aaaaaa
+a.a.aaaaa. a.a.aaaaa.
+a.a.aaaaa/ a.a.aaaaa
+a.a.aaaa.a a.a.aaaa.a
+a.a.aaaa.. a.a.aaaa..
+a.a.aaaa./ a.a.aaaa.
+a.a.aaaa/a a.a.aaaa/a
+a.a.aaaa/. a.a.aaaa
+a.a.aaaa// a.a.aaaa
+a.a.aaa.aa a.a.aaa.aa
+a.a.aaa.a. a.a.aaa.a.
+a.a.aaa.a/ a.a.aaa.a
+a.a.aaa..a a.a.aaa..a
+a.a.aaa... a.a.aaa...
+a.a.aaa../ a.a.aaa..
+a.a.aaa./a a.a.aaa./a
+a.a.aaa./. a.a.aaa.
+a.a.aaa.// a.a.aaa.
+a.a.aaa/aa a.a.aaa/aa
+a.a.aaa/a. a.a.aaa/a.
+a.a.aaa/a/ a.a.aaa/a
+a.a.aaa/.a a.a.aaa/.a
+a.a.aaa/.. .
+a.a.aaa/./ a.a.aaa
+a.a.aaa//a a.a.aaa/a
+a.a.aaa//. a.a.aaa
+a.a.aaa/// a.a.aaa
+a.a.aa.aaa a.a.aa.aaa
+a.a.aa.aa. a.a.aa.aa.
+a.a.aa.aa/ a.a.aa.aa
+a.a.aa.a.a a.a.aa.a.a
+a.a.aa.a.. a.a.aa.a..
+a.a.aa.a./ a.a.aa.a.
+a.a.aa.a/a a.a.aa.a/a
+a.a.aa.a/. a.a.aa.a
+a.a.aa.a// a.a.aa.a
+a.a.aa..aa a.a.aa..aa
+a.a.aa..a. a.a.aa..a.
+a.a.aa..a/ a.a.aa..a
+a.a.aa...a a.a.aa...a
+a.a.aa.... a.a.aa....
+a.a.aa.../ a.a.aa...
+a.a.aa../a a.a.aa../a
+a.a.aa../. a.a.aa..
+a.a.aa..// a.a.aa..
+a.a.aa./aa a.a.aa./aa
+a.a.aa./a. a.a.aa./a.
+a.a.aa./a/ a.a.aa./a
+a.a.aa./.a a.a.aa./.a
+a.a.aa./.. .
+a.a.aa././ a.a.aa.
+a.a.aa.//a a.a.aa./a
+a.a.aa.//. a.a.aa.
+a.a.aa./// a.a.aa.
+a.a.aa/aaa a.a.aa/aaa
+a.a.aa/aa. a.a.aa/aa.
+a.a.aa/aa/ a.a.aa/aa
+a.a.aa/a.a a.a.aa/a.a
+a.a.aa/a.. a.a.aa/a..
+a.a.aa/a./ a.a.aa/a.
+a.a.aa/a/a a.a.aa/a/a
+a.a.aa/a/. a.a.aa/a
+a.a.aa/a// a.a.aa/a
+a.a.aa/.aa a.a.aa/.aa
+a.a.aa/.a. a.a.aa/.a.
+a.a.aa/.a/ a.a.aa/.a
+a.a.aa/..a a.a.aa/..a
+a.a.aa/... a.a.aa/...
+a.a.aa/../ .
+a.a.aa/./a a.a.aa/a
+a.a.aa/./. a.a.aa
+a.a.aa/.// a.a.aa
+a.a.aa//aa a.a.aa/aa
+a.a.aa//a. a.a.aa/a.
+a.a.aa//a/ a.a.aa/a
+a.a.aa//.a a.a.aa/.a
+a.a.aa//.. .
+a.a.aa//./ a.a.aa
+a.a.aa///a a.a.aa/a
+a.a.aa///. a.a.aa
+a.a.aa//// a.a.aa
+a.a.a.aaaa a.a.a.aaaa
+a.a.a.aaa. a.a.a.aaa.
+a.a.a.aaa/ a.a.a.aaa
+a.a.a.aa.a a.a.a.aa.a
+a.a.a.aa.. a.a.a.aa..
+a.a.a.aa./ a.a.a.aa.
+a.a.a.aa/a a.a.a.aa/a
+a.a.a.aa/. a.a.a.aa
+a.a.a.aa// a.a.a.aa
+a.a.a.a.aa a.a.a.a.aa
+a.a.a.a.a. a.a.a.a.a.
+a.a.a.a.a/ a.a.a.a.a
+a.a.a.a..a a.a.a.a..a
+a.a.a.a... a.a.a.a...
+a.a.a.a../ a.a.a.a..
+a.a.a.a./a a.a.a.a./a
+a.a.a.a./. a.a.a.a.
+a.a.a.a.// a.a.a.a.
+a.a.a.a/aa a.a.a.a/aa
+a.a.a.a/a. a.a.a.a/a.
+a.a.a.a/a/ a.a.a.a/a
+a.a.a.a/.a a.a.a.a/.a
+a.a.a.a/.. .
+a.a.a.a/./ a.a.a.a
+a.a.a.a//a a.a.a.a/a
+a.a.a.a//. a.a.a.a
+a.a.a.a/// a.a.a.a
+a.a.a..aaa a.a.a..aaa
+a.a.a..aa. a.a.a..aa.
+a.a.a..aa/ a.a.a..aa
+a.a.a..a.a a.a.a..a.a
+a.a.a..a.. a.a.a..a..
+a.a.a..a./ a.a.a..a.
+a.a.a..a/a a.a.a..a/a
+a.a.a..a/. a.a.a..a
+a.a.a..a// a.a.a..a
+a.a.a...aa a.a.a...aa
+a.a.a...a. a.a.a...a.
+a.a.a...a/ a.a.a...a
+a.a.a....a a.a.a....a
+a.a.a..... a.a.a.....
+a.a.a..../ a.a.a....
+a.a.a.../a a.a.a.../a
+a.a.a.../. a.a.a...
+a.a.a...// a.a.a...
+a.a.a../aa a.a.a../aa
+a.a.a../a. a.a.a../a.
+a.a.a../a/ a.a.a../a
+a.a.a../.a a.a.a../.a
+a.a.a../.. .
+a.a.a.././ a.a.a..
+a.a.a..//a a.a.a../a
+a.a.a..//. a.a.a..
+a.a.a../// a.a.a..
+a.a.a./aaa a.a.a./aaa
+a.a.a./aa. a.a.a./aa.
+a.a.a./aa/ a.a.a./aa
+a.a.a./a.a a.a.a./a.a
+a.a.a./a.. a.a.a./a..
+a.a.a./a./ a.a.a./a.
+a.a.a./a/a a.a.a./a/a
+a.a.a./a/. a.a.a./a
+a.a.a./a// a.a.a./a
+a.a.a./.aa a.a.a./.aa
+a.a.a./.a. a.a.a./.a.
+a.a.a./.a/ a.a.a./.a
+a.a.a./..a a.a.a./..a
+a.a.a./... a.a.a./...
+a.a.a./../ .
+a.a.a././a a.a.a./a
+a.a.a././. a.a.a.
+a.a.a./.// a.a.a.
+a.a.a.//aa a.a.a./aa
+a.a.a.//a. a.a.a./a.
+a.a.a.//a/ a.a.a./a
+a.a.a.//.a a.a.a./.a
+a.a.a.//.. .
+a.a.a.//./ a.a.a.
+a.a.a.///a a.a.a./a
+a.a.a.///. a.a.a.
+a.a.a.//// a.a.a.
+a.a.a/aaaa a.a.a/aaaa
+a.a.a/aaa. a.a.a/aaa.
+a.a.a/aaa/ a.a.a/aaa
+a.a.a/aa.a a.a.a/aa.a
+a.a.a/aa.. a.a.a/aa..
+a.a.a/aa./ a.a.a/aa.
+a.a.a/aa/a a.a.a/aa/a
+a.a.a/aa/. a.a.a/aa
+a.a.a/aa// a.a.a/aa
+a.a.a/a.aa a.a.a/a.aa
+a.a.a/a.a. a.a.a/a.a.
+a.a.a/a.a/ a.a.a/a.a
+a.a.a/a..a a.a.a/a..a
+a.a.a/a... a.a.a/a...
+a.a.a/a../ a.a.a/a..
+a.a.a/a./a a.a.a/a./a
+a.a.a/a./. a.a.a/a.
+a.a.a/a.// a.a.a/a.
+a.a.a/a/aa a.a.a/a/aa
+a.a.a/a/a. a.a.a/a/a.
+a.a.a/a/a/ a.a.a/a/a
+a.a.a/a/.a a.a.a/a/.a
+a.a.a/a/.. a.a.a
+a.a.a/a/./ a.a.a/a
+a.a.a/a//a a.a.a/a/a
+a.a.a/a//. a.a.a/a
+a.a.a/a/// a.a.a/a
+a.a.a/.aaa a.a.a/.aaa
+a.a.a/.aa. a.a.a/.aa.
+a.a.a/.aa/ a.a.a/.aa
+a.a.a/.a.a a.a.a/.a.a
+a.a.a/.a.. a.a.a/.a..
+a.a.a/.a./ a.a.a/.a.
+a.a.a/.a/a a.a.a/.a/a
+a.a.a/.a/. a.a.a/.a
+a.a.a/.a// a.a.a/.a
+a.a.a/..aa a.a.a/..aa
+a.a.a/..a. a.a.a/..a.
+a.a.a/..a/ a.a.a/..a
+a.a.a/...a a.a.a/...a
+a.a.a/.... a.a.a/....
+a.a.a/.../ a.a.a/...
+a.a.a/../a a
+a.a.a/../. .
+a.a.a/..// .
+a.a.a/./aa a.a.a/aa
+a.a.a/./a. a.a.a/a.
+a.a.a/./a/ a.a.a/a
+a.a.a/./.a a.a.a/.a
+a.a.a/./.. .
+a.a.a/././ a.a.a
+a.a.a/.//a a.a.a/a
+a.a.a/.//. a.a.a
+a.a.a/./// a.a.a
+a.a.a//aaa a.a.a/aaa
+a.a.a//aa. a.a.a/aa.
+a.a.a//aa/ a.a.a/aa
+a.a.a//a.a a.a.a/a.a
+a.a.a//a.. a.a.a/a..
+a.a.a//a./ a.a.a/a.
+a.a.a//a/a a.a.a/a/a
+a.a.a//a/. a.a.a/a
+a.a.a//a// a.a.a/a
+a.a.a//.aa a.a.a/.aa
+a.a.a//.a. a.a.a/.a.
+a.a.a//.a/ a.a.a/.a
+a.a.a//..a a.a.a/..a
+a.a.a//... a.a.a/...
+a.a.a//../ .
+a.a.a//./a a.a.a/a
+a.a.a//./. a.a.a
+a.a.a//.// a.a.a
+a.a.a///aa a.a.a/aa
+a.a.a///a. a.a.a/a.
+a.a.a///a/ a.a.a/a
+a.a.a///.a a.a.a/.a
+a.a.a///.. .
+a.a.a///./ a.a.a
+a.a.a////a a.a.a/a
+a.a.a////. a.a.a
+a.a.a///// a.a.a
+a.a..aaaaa a.a..aaaaa
+a.a..aaaa. a.a..aaaa.
+a.a..aaaa/ a.a..aaaa
+a.a..aaa.a a.a..aaa.a
+a.a..aaa.. a.a..aaa..
+a.a..aaa./ a.a..aaa.
+a.a..aaa/a a.a..aaa/a
+a.a..aaa/. a.a..aaa
+a.a..aaa// a.a..aaa
+a.a..aa.aa a.a..aa.aa
+a.a..aa.a. a.a..aa.a.
+a.a..aa.a/ a.a..aa.a
+a.a..aa..a a.a..aa..a
+a.a..aa... a.a..aa...
+a.a..aa../ a.a..aa..
+a.a..aa./a a.a..aa./a
+a.a..aa./. a.a..aa.
+a.a..aa.// a.a..aa.
+a.a..aa/aa a.a..aa/aa
+a.a..aa/a. a.a..aa/a.
+a.a..aa/a/ a.a..aa/a
+a.a..aa/.a a.a..aa/.a
+a.a..aa/.. .
+a.a..aa/./ a.a..aa
+a.a..aa//a a.a..aa/a
+a.a..aa//. a.a..aa
+a.a..aa/// a.a..aa
+a.a..a.aaa a.a..a.aaa
+a.a..a.aa. a.a..a.aa.
+a.a..a.aa/ a.a..a.aa
+a.a..a.a.a a.a..a.a.a
+a.a..a.a.. a.a..a.a..
+a.a..a.a./ a.a..a.a.
+a.a..a.a/a a.a..a.a/a
+a.a..a.a/. a.a..a.a
+a.a..a.a// a.a..a.a
+a.a..a..aa a.a..a..aa
+a.a..a..a. a.a..a..a.
+a.a..a..a/ a.a..a..a
+a.a..a...a a.a..a...a
+a.a..a.... a.a..a....
+a.a..a.../ a.a..a...
+a.a..a../a a.a..a../a
+a.a..a../. a.a..a..
+a.a..a..// a.a..a..
+a.a..a./aa a.a..a./aa
+a.a..a./a. a.a..a./a.
+a.a..a./a/ a.a..a./a
+a.a..a./.a a.a..a./.a
+a.a..a./.. .
+a.a..a././ a.a..a.
+a.a..a.//a a.a..a./a
+a.a..a.//. a.a..a.
+a.a..a./// a.a..a.
+a.a..a/aaa a.a..a/aaa
+a.a..a/aa. a.a..a/aa.
+a.a..a/aa/ a.a..a/aa
+a.a..a/a.a a.a..a/a.a
+a.a..a/a.. a.a..a/a..
+a.a..a/a./ a.a..a/a.
+a.a..a/a/a a.a..a/a/a
+a.a..a/a/. a.a..a/a
+a.a..a/a// a.a..a/a
+a.a..a/.aa a.a..a/.aa
+a.a..a/.a. a.a..a/.a.
+a.a..a/.a/ a.a..a/.a
+a.a..a/..a a.a..a/..a
+a.a..a/... a.a..a/...
+a.a..a/../ .
+a.a..a/./a a.a..a/a
+a.a..a/./. a.a..a
+a.a..a/.// a.a..a
+a.a..a//aa a.a..a/aa
+a.a..a//a. a.a..a/a.
+a.a..a//a/ a.a..a/a
+a.a..a//.a a.a..a/.a
+a.a..a//.. .
+a.a..a//./ a.a..a
+a.a..a///a a.a..a/a
+a.a..a///. a.a..a
+a.a..a//// a.a..a
+a.a...aaaa a.a...aaaa
+a.a...aaa. a.a...aaa.
+a.a...aaa/ a.a...aaa
+a.a...aa.a a.a...aa.a
+a.a...aa.. a.a...aa..
+a.a...aa./ a.a...aa.
+a.a...aa/a a.a...aa/a
+a.a...aa/. a.a...aa
+a.a...aa// a.a...aa
+a.a...a.aa a.a...a.aa
+a.a...a.a. a.a...a.a.
+a.a...a.a/ a.a...a.a
+a.a...a..a a.a...a..a
+a.a...a... a.a...a...
+a.a...a../ a.a...a..
+a.a...a./a a.a...a./a
+a.a...a./. a.a...a.
+a.a...a.// a.a...a.
+a.a...a/aa a.a...a/aa
+a.a...a/a. a.a...a/a.
+a.a...a/a/ a.a...a/a
+a.a...a/.a a.a...a/.a
+a.a...a/.. .
+a.a...a/./ a.a...a
+a.a...a//a a.a...a/a
+a.a...a//. a.a...a
+a.a...a/// a.a...a
+a.a....aaa a.a....aaa
+a.a....aa. a.a....aa.
+a.a....aa/ a.a....aa
+a.a....a.a a.a....a.a
+a.a....a.. a.a....a..
+a.a....a./ a.a....a.
+a.a....a/a a.a....a/a
+a.a....a/. a.a....a
+a.a....a// a.a....a
+a.a.....aa a.a.....aa
+a.a.....a. a.a.....a.
+a.a.....a/ a.a.....a
+a.a......a a.a......a
+a.a....... a.a.......
+a.a....../ a.a......
+a.a...../a a.a...../a
+a.a...../. a.a.....
+a.a.....// a.a.....
+a.a..../aa a.a..../aa
+a.a..../a. a.a..../a.
+a.a..../a/ a.a..../a
+a.a..../.a a.a..../.a
+a.a..../.. .
+a.a...././ a.a....
+a.a....//a a.a..../a
+a.a....//. a.a....
+a.a..../// a.a....
+a.a.../aaa a.a.../aaa
+a.a.../aa. a.a.../aa.
+a.a.../aa/ a.a.../aa
+a.a.../a.a a.a.../a.a
+a.a.../a.. a.a.../a..
+a.a.../a./ a.a.../a.
+a.a.../a/a a.a.../a/a
+a.a.../a/. a.a.../a
+a.a.../a// a.a.../a
+a.a.../.aa a.a.../.aa
+a.a.../.a. a.a.../.a.
+a.a.../.a/ a.a.../.a
+a.a.../..a a.a.../..a
+a.a.../... a.a.../...
+a.a.../../ .
+a.a..././a a.a.../a
+a.a..././. a.a...
+a.a.../.// a.a...
+a.a...//aa a.a.../aa
+a.a...//a. a.a.../a.
+a.a...//a/ a.a.../a
+a.a...//.a a.a.../.a
+a.a...//.. .
+a.a...//./ a.a...
+a.a...///a a.a.../a
+a.a...///. a.a...
+a.a...//// a.a...
+a.a../aaaa a.a../aaaa
+a.a../aaa. a.a../aaa.
+a.a../aaa/ a.a../aaa
+a.a../aa.a a.a../aa.a
+a.a../aa.. a.a../aa..
+a.a../aa./ a.a../aa.
+a.a../aa/a a.a../aa/a
+a.a../aa/. a.a../aa
+a.a../aa// a.a../aa
+a.a../a.aa a.a../a.aa
+a.a../a.a. a.a../a.a.
+a.a../a.a/ a.a../a.a
+a.a../a..a a.a../a..a
+a.a../a... a.a../a...
+a.a../a../ a.a../a..
+a.a../a./a a.a../a./a
+a.a../a./. a.a../a.
+a.a../a.// a.a../a.
+a.a../a/aa a.a../a/aa
+a.a../a/a. a.a../a/a.
+a.a../a/a/ a.a../a/a
+a.a../a/.a a.a../a/.a
+a.a../a/.. a.a..
+a.a../a/./ a.a../a
+a.a../a//a a.a../a/a
+a.a../a//. a.a../a
+a.a../a/// a.a../a
+a.a../.aaa a.a../.aaa
+a.a../.aa. a.a../.aa.
+a.a../.aa/ a.a../.aa
+a.a../.a.a a.a../.a.a
+a.a../.a.. a.a../.a..
+a.a../.a./ a.a../.a.
+a.a../.a/a a.a../.a/a
+a.a../.a/. a.a../.a
+a.a../.a// a.a../.a
+a.a../..aa a.a../..aa
+a.a../..a. a.a../..a.
+a.a../..a/ a.a../..a
+a.a../...a a.a../...a
+a.a../.... a.a../....
+a.a../.../ a.a../...
+a.a../../a a
+a.a../../. .
+a.a../..// .
+a.a.././aa a.a../aa
+a.a.././a. a.a../a.
+a.a.././a/ a.a../a
+a.a.././.a a.a../.a
+a.a.././.. .
+a.a../././ a.a..
+a.a.././/a a.a../a
+a.a.././/. a.a..
+a.a.././// a.a..
+a.a..//aaa a.a../aaa
+a.a..//aa. a.a../aa.
+a.a..//aa/ a.a../aa
+a.a..//a.a a.a../a.a
+a.a..//a.. a.a../a..
+a.a..//a./ a.a../a.
+a.a..//a/a a.a../a/a
+a.a..//a/. a.a../a
+a.a..//a// a.a../a
+a.a..//.aa a.a../.aa
+a.a..//.a. a.a../.a.
+a.a..//.a/ a.a../.a
+a.a..//..a a.a../..a
+a.a..//... a.a../...
+a.a..//../ .
+a.a..//./a a.a../a
+a.a..//./. a.a..
+a.a..//.// a.a..
+a.a..///aa a.a../aa
+a.a..///a. a.a../a.
+a.a..///a/ a.a../a
+a.a..///.a a.a../.a
+a.a..///.. .
+a.a..///./ a.a..
+a.a..////a a.a../a
+a.a..////. a.a..
+a.a..///// a.a..
+a.a./aaaaa a.a./aaaaa
+a.a./aaaa. a.a./aaaa.
+a.a./aaaa/ a.a./aaaa
+a.a./aaa.a a.a./aaa.a
+a.a./aaa.. a.a./aaa..
+a.a./aaa./ a.a./aaa.
+a.a./aaa/a a.a./aaa/a
+a.a./aaa/. a.a./aaa
+a.a./aaa// a.a./aaa
+a.a./aa.aa a.a./aa.aa
+a.a./aa.a. a.a./aa.a.
+a.a./aa.a/ a.a./aa.a
+a.a./aa..a a.a./aa..a
+a.a./aa... a.a./aa...
+a.a./aa../ a.a./aa..
+a.a./aa./a a.a./aa./a
+a.a./aa./. a.a./aa.
+a.a./aa.// a.a./aa.
+a.a./aa/aa a.a./aa/aa
+a.a./aa/a. a.a./aa/a.
+a.a./aa/a/ a.a./aa/a
+a.a./aa/.a a.a./aa/.a
+a.a./aa/.. a.a.
+a.a./aa/./ a.a./aa
+a.a./aa//a a.a./aa/a
+a.a./aa//. a.a./aa
+a.a./aa/// a.a./aa
+a.a./a.aaa a.a./a.aaa
+a.a./a.aa. a.a./a.aa.
+a.a./a.aa/ a.a./a.aa
+a.a./a.a.a a.a./a.a.a
+a.a./a.a.. a.a./a.a..
+a.a./a.a./ a.a./a.a.
+a.a./a.a/a a.a./a.a/a
+a.a./a.a/. a.a./a.a
+a.a./a.a// a.a./a.a
+a.a./a..aa a.a./a..aa
+a.a./a..a. a.a./a..a.
+a.a./a..a/ a.a./a..a
+a.a./a...a a.a./a...a
+a.a./a.... a.a./a....
+a.a./a.../ a.a./a...
+a.a./a../a a.a./a../a
+a.a./a../. a.a./a..
+a.a./a..// a.a./a..
+a.a./a./aa a.a./a./aa
+a.a./a./a. a.a./a./a.
+a.a./a./a/ a.a./a./a
+a.a./a./.a a.a./a./.a
+a.a./a./.. a.a.
+a.a./a././ a.a./a.
+a.a./a.//a a.a./a./a
+a.a./a.//. a.a./a.
+a.a./a./// a.a./a.
+a.a./a/aaa a.a./a/aaa
+a.a./a/aa. a.a./a/aa.
+a.a./a/aa/ a.a./a/aa
+a.a./a/a.a a.a./a/a.a
+a.a./a/a.. a.a./a/a..
+a.a./a/a./ a.a./a/a.
+a.a./a/a/a a.a./a/a/a
+a.a./a/a/. a.a./a/a
+a.a./a/a// a.a./a/a
+a.a./a/.aa a.a./a/.aa
+a.a./a/.a. a.a./a/.a.
+a.a./a/.a/ a.a./a/.a
+a.a./a/..a a.a./a/..a
+a.a./a/... a.a./a/...
+a.a./a/../ a.a.
+a.a./a/./a a.a./a/a
+a.a./a/./. a.a./a
+a.a./a/.// a.a./a
+a.a./a//aa a.a./a/aa
+a.a./a//a. a.a./a/a.
+a.a./a//a/ a.a./a/a
+a.a./a//.a a.a./a/.a
+a.a./a//.. a.a.
+a.a./a//./ a.a./a
+a.a./a///a a.a./a/a
+a.a./a///. a.a./a
+a.a./a//// a.a./a
+a.a./.aaaa a.a./.aaaa
+a.a./.aaa. a.a./.aaa.
+a.a./.aaa/ a.a./.aaa
+a.a./.aa.a a.a./.aa.a
+a.a./.aa.. a.a./.aa..
+a.a./.aa./ a.a./.aa.
+a.a./.aa/a a.a./.aa/a
+a.a./.aa/. a.a./.aa
+a.a./.aa// a.a./.aa
+a.a./.a.aa a.a./.a.aa
+a.a./.a.a. a.a./.a.a.
+a.a./.a.a/ a.a./.a.a
+a.a./.a..a a.a./.a..a
+a.a./.a... a.a./.a...
+a.a./.a../ a.a./.a..
+a.a./.a./a a.a./.a./a
+a.a./.a./. a.a./.a.
+a.a./.a.// a.a./.a.
+a.a./.a/aa a.a./.a/aa
+a.a./.a/a. a.a./.a/a.
+a.a./.a/a/ a.a./.a/a
+a.a./.a/.a a.a./.a/.a
+a.a./.a/.. a.a.
+a.a./.a/./ a.a./.a
+a.a./.a//a a.a./.a/a
+a.a./.a//. a.a./.a
+a.a./.a/// a.a./.a
+a.a./..aaa a.a./..aaa
+a.a./..aa. a.a./..aa.
+a.a./..aa/ a.a./..aa
+a.a./..a.a a.a./..a.a
+a.a./..a.. a.a./..a..
+a.a./..a./ a.a./..a.
+a.a./..a/a a.a./..a/a
+a.a./..a/. a.a./..a
+a.a./..a// a.a./..a
+a.a./...aa a.a./...aa
+a.a./...a. a.a./...a.
+a.a./...a/ a.a./...a
+a.a./....a a.a./....a
+a.a./..... a.a./.....
+a.a./..../ a.a./....
+a.a./.../a a.a./.../a
+a.a./.../. a.a./...
+a.a./...// a.a./...
+a.a./../aa aa
+a.a./../a. a.
+a.a./../a/ a
+a.a./../.a .a
+a.a./../.. ..
+a.a./.././ .
+a.a./..//a a
+a.a./..//. .
+a.a./../// .
+a.a././aaa a.a./aaa
+a.a././aa. a.a./aa.
+a.a././aa/ a.a./aa
+a.a././a.a a.a./a.a
+a.a././a.. a.a./a..
+a.a././a./ a.a./a.
+a.a././a/a a.a./a/a
+a.a././a/. a.a./a
+a.a././a// a.a./a
+a.a././.aa a.a./.aa
+a.a././.a. a.a./.a.
+a.a././.a/ a.a./.a
+a.a././..a a.a./..a
+a.a././... a.a./...
+a.a././../ .
+a.a./././a a.a./a
+a.a./././. a.a.
+a.a././.// a.a.
+a.a././/aa a.a./aa
+a.a././/a. a.a./a.
+a.a././/a/ a.a./a
+a.a././/.a a.a./.a
+a.a././/.. .
+a.a././/./ a.a.
+a.a././//a a.a./a
+a.a././//. a.a.
+a.a././/// a.a.
+a.a.//aaaa a.a./aaaa
+a.a.//aaa. a.a./aaa.
+a.a.//aaa/ a.a./aaa
+a.a.//aa.a a.a./aa.a
+a.a.//aa.. a.a./aa..
+a.a.//aa./ a.a./aa.
+a.a.//aa/a a.a./aa/a
+a.a.//aa/. a.a./aa
+a.a.//aa// a.a./aa
+a.a.//a.aa a.a./a.aa
+a.a.//a.a. a.a./a.a.
+a.a.//a.a/ a.a./a.a
+a.a.//a..a a.a./a..a
+a.a.//a... a.a./a...
+a.a.//a../ a.a./a..
+a.a.//a./a a.a./a./a
+a.a.//a./. a.a./a.
+a.a.//a.// a.a./a.
+a.a.//a/aa a.a./a/aa
+a.a.//a/a. a.a./a/a.
+a.a.//a/a/ a.a./a/a
+a.a.//a/.a a.a./a/.a
+a.a.//a/.. a.a.
+a.a.//a/./ a.a./a
+a.a.//a//a a.a./a/a
+a.a.//a//. a.a./a
+a.a.//a/// a.a./a
+a.a.//.aaa a.a./.aaa
+a.a.//.aa. a.a./.aa.
+a.a.//.aa/ a.a./.aa
+a.a.//.a.a a.a./.a.a
+a.a.//.a.. a.a./.a..
+a.a.//.a./ a.a./.a.
+a.a.//.a/a a.a./.a/a
+a.a.//.a/. a.a./.a
+a.a.//.a// a.a./.a
+a.a.//..aa a.a./..aa
+a.a.//..a. a.a./..a.
+a.a.//..a/ a.a./..a
+a.a.//...a a.a./...a
+a.a.//.... a.a./....
+a.a.//.../ a.a./...
+a.a.//../a a
+a.a.//../. .
+a.a.//..// .
+a.a.//./aa a.a./aa
+a.a.//./a. a.a./a.
+a.a.//./a/ a.a./a
+a.a.//./.a a.a./.a
+a.a.//./.. .
+a.a.//././ a.a.
+a.a.//.//a a.a./a
+a.a.//.//. a.a.
+a.a.//./// a.a.
+a.a.///aaa a.a./aaa
+a.a.///aa. a.a./aa.
+a.a.///aa/ a.a./aa
+a.a.///a.a a.a./a.a
+a.a.///a.. a.a./a..
+a.a.///a./ a.a./a.
+a.a.///a/a a.a./a/a
+a.a.///a/. a.a./a
+a.a.///a// a.a./a
+a.a.///.aa a.a./.aa
+a.a.///.a. a.a./.a.
+a.a.///.a/ a.a./.a
+a.a.///..a a.a./..a
+a.a.///... a.a./...
+a.a.///../ .
+a.a.///./a a.a./a
+a.a.///./. a.a.
+a.a.///.// a.a.
+a.a.////aa a.a./aa
+a.a.////a. a.a./a.
+a.a.////a/ a.a./a
+a.a.////.a a.a./.a
+a.a.////.. .
+a.a.////./ a.a.
+a.a./////a a.a./a
+a.a./////. a.a.
+a.a.////// a.a.
+a.a/aaaaaa a.a/aaaaaa
+a.a/aaaaa. a.a/aaaaa.
+a.a/aaaaa/ a.a/aaaaa
+a.a/aaaa.a a.a/aaaa.a
+a.a/aaaa.. a.a/aaaa..
+a.a/aaaa./ a.a/aaaa.
+a.a/aaaa/a a.a/aaaa/a
+a.a/aaaa/. a.a/aaaa
+a.a/aaaa// a.a/aaaa
+a.a/aaa.aa a.a/aaa.aa
+a.a/aaa.a. a.a/aaa.a.
+a.a/aaa.a/ a.a/aaa.a
+a.a/aaa..a a.a/aaa..a
+a.a/aaa... a.a/aaa...
+a.a/aaa../ a.a/aaa..
+a.a/aaa./a a.a/aaa./a
+a.a/aaa./. a.a/aaa.
+a.a/aaa.// a.a/aaa.
+a.a/aaa/aa a.a/aaa/aa
+a.a/aaa/a. a.a/aaa/a.
+a.a/aaa/a/ a.a/aaa/a
+a.a/aaa/.a a.a/aaa/.a
+a.a/aaa/.. a.a
+a.a/aaa/./ a.a/aaa
+a.a/aaa//a a.a/aaa/a
+a.a/aaa//. a.a/aaa
+a.a/aaa/// a.a/aaa
+a.a/aa.aaa a.a/aa.aaa
+a.a/aa.aa. a.a/aa.aa.
+a.a/aa.aa/ a.a/aa.aa
+a.a/aa.a.a a.a/aa.a.a
+a.a/aa.a.. a.a/aa.a..
+a.a/aa.a./ a.a/aa.a.
+a.a/aa.a/a a.a/aa.a/a
+a.a/aa.a/. a.a/aa.a
+a.a/aa.a// a.a/aa.a
+a.a/aa..aa a.a/aa..aa
+a.a/aa..a. a.a/aa..a.
+a.a/aa..a/ a.a/aa..a
+a.a/aa...a a.a/aa...a
+a.a/aa.... a.a/aa....
+a.a/aa.../ a.a/aa...
+a.a/aa../a a.a/aa../a
+a.a/aa../. a.a/aa..
+a.a/aa..// a.a/aa..
+a.a/aa./aa a.a/aa./aa
+a.a/aa./a. a.a/aa./a.
+a.a/aa./a/ a.a/aa./a
+a.a/aa./.a a.a/aa./.a
+a.a/aa./.. a.a
+a.a/aa././ a.a/aa.
+a.a/aa.//a a.a/aa./a
+a.a/aa.//. a.a/aa.
+a.a/aa./// a.a/aa.
+a.a/aa/aaa a.a/aa/aaa
+a.a/aa/aa. a.a/aa/aa.
+a.a/aa/aa/ a.a/aa/aa
+a.a/aa/a.a a.a/aa/a.a
+a.a/aa/a.. a.a/aa/a..
+a.a/aa/a./ a.a/aa/a.
+a.a/aa/a/a a.a/aa/a/a
+a.a/aa/a/. a.a/aa/a
+a.a/aa/a// a.a/aa/a
+a.a/aa/.aa a.a/aa/.aa
+a.a/aa/.a. a.a/aa/.a.
+a.a/aa/.a/ a.a/aa/.a
+a.a/aa/..a a.a/aa/..a
+a.a/aa/... a.a/aa/...
+a.a/aa/../ a.a
+a.a/aa/./a a.a/aa/a
+a.a/aa/./. a.a/aa
+a.a/aa/.// a.a/aa
+a.a/aa//aa a.a/aa/aa
+a.a/aa//a. a.a/aa/a.
+a.a/aa//a/ a.a/aa/a
+a.a/aa//.a a.a/aa/.a
+a.a/aa//.. a.a
+a.a/aa//./ a.a/aa
+a.a/aa///a a.a/aa/a
+a.a/aa///. a.a/aa
+a.a/aa//// a.a/aa
+a.a/a.aaaa a.a/a.aaaa
+a.a/a.aaa. a.a/a.aaa.
+a.a/a.aaa/ a.a/a.aaa
+a.a/a.aa.a a.a/a.aa.a
+a.a/a.aa.. a.a/a.aa..
+a.a/a.aa./ a.a/a.aa.
+a.a/a.aa/a a.a/a.aa/a
+a.a/a.aa/. a.a/a.aa
+a.a/a.aa// a.a/a.aa
+a.a/a.a.aa a.a/a.a.aa
+a.a/a.a.a. a.a/a.a.a.
+a.a/a.a.a/ a.a/a.a.a
+a.a/a.a..a a.a/a.a..a
+a.a/a.a... a.a/a.a...
+a.a/a.a../ a.a/a.a..
+a.a/a.a./a a.a/a.a./a
+a.a/a.a./. a.a/a.a.
+a.a/a.a.// a.a/a.a.
+a.a/a.a/aa a.a/a.a/aa
+a.a/a.a/a. a.a/a.a/a.
+a.a/a.a/a/ a.a/a.a/a
+a.a/a.a/.a a.a/a.a/.a
+a.a/a.a/.. a.a
+a.a/a.a/./ a.a/a.a
+a.a/a.a//a a.a/a.a/a
+a.a/a.a//. a.a/a.a
+a.a/a.a/// a.a/a.a
+a.a/a..aaa a.a/a..aaa
+a.a/a..aa. a.a/a..aa.
+a.a/a..aa/ a.a/a..aa
+a.a/a..a.a a.a/a..a.a
+a.a/a..a.. a.a/a..a..
+a.a/a..a./ a.a/a..a.
+a.a/a..a/a a.a/a..a/a
+a.a/a..a/. a.a/a..a
+a.a/a..a// a.a/a..a
+a.a/a...aa a.a/a...aa
+a.a/a...a. a.a/a...a.
+a.a/a...a/ a.a/a...a
+a.a/a....a a.a/a....a
+a.a/a..... a.a/a.....
+a.a/a..../ a.a/a....
+a.a/a.../a a.a/a.../a
+a.a/a.../. a.a/a...
+a.a/a...// a.a/a...
+a.a/a../aa a.a/a../aa
+a.a/a../a. a.a/a../a.
+a.a/a../a/ a.a/a../a
+a.a/a../.a a.a/a../.a
+a.a/a../.. a.a
+a.a/a.././ a.a/a..
+a.a/a..//a a.a/a../a
+a.a/a..//. a.a/a..
+a.a/a../// a.a/a..
+a.a/a./aaa a.a/a./aaa
+a.a/a./aa. a.a/a./aa.
+a.a/a./aa/ a.a/a./aa
+a.a/a./a.a a.a/a./a.a
+a.a/a./a.. a.a/a./a..
+a.a/a./a./ a.a/a./a.
+a.a/a./a/a a.a/a./a/a
+a.a/a./a/. a.a/a./a
+a.a/a./a// a.a/a./a
+a.a/a./.aa a.a/a./.aa
+a.a/a./.a. a.a/a./.a.
+a.a/a./.a/ a.a/a./.a
+a.a/a./..a a.a/a./..a
+a.a/a./... a.a/a./...
+a.a/a./../ a.a
+a.a/a././a a.a/a./a
+a.a/a././. a.a/a.
+a.a/a./.// a.a/a.
+a.a/a.//aa a.a/a./aa
+a.a/a.//a. a.a/a./a.
+a.a/a.//a/ a.a/a./a
+a.a/a.//.a a.a/a./.a
+a.a/a.//.. a.a
+a.a/a.//./ a.a/a.
+a.a/a.///a a.a/a./a
+a.a/a.///. a.a/a.
+a.a/a.//// a.a/a.
+a.a/a/aaaa a.a/a/aaaa
+a.a/a/aaa. a.a/a/aaa.
+a.a/a/aaa/ a.a/a/aaa
+a.a/a/aa.a a.a/a/aa.a
+a.a/a/aa.. a.a/a/aa..
+a.a/a/aa./ a.a/a/aa.
+a.a/a/aa/a a.a/a/aa/a
+a.a/a/aa/. a.a/a/aa
+a.a/a/aa// a.a/a/aa
+a.a/a/a.aa a.a/a/a.aa
+a.a/a/a.a. a.a/a/a.a.
+a.a/a/a.a/ a.a/a/a.a
+a.a/a/a..a a.a/a/a..a
+a.a/a/a... a.a/a/a...
+a.a/a/a../ a.a/a/a..
+a.a/a/a./a a.a/a/a./a
+a.a/a/a./. a.a/a/a.
+a.a/a/a.// a.a/a/a.
+a.a/a/a/aa a.a/a/a/aa
+a.a/a/a/a. a.a/a/a/a.
+a.a/a/a/a/ a.a/a/a/a
+a.a/a/a/.a a.a/a/a/.a
+a.a/a/a/.. a.a/a
+a.a/a/a/./ a.a/a/a
+a.a/a/a//a a.a/a/a/a
+a.a/a/a//. a.a/a/a
+a.a/a/a/// a.a/a/a
+a.a/a/.aaa a.a/a/.aaa
+a.a/a/.aa. a.a/a/.aa.
+a.a/a/.aa/ a.a/a/.aa
+a.a/a/.a.a a.a/a/.a.a
+a.a/a/.a.. a.a/a/.a..
+a.a/a/.a./ a.a/a/.a.
+a.a/a/.a/a a.a/a/.a/a
+a.a/a/.a/. a.a/a/.a
+a.a/a/.a// a.a/a/.a
+a.a/a/..aa a.a/a/..aa
+a.a/a/..a. a.a/a/..a.
+a.a/a/..a/ a.a/a/..a
+a.a/a/...a a.a/a/...a
+a.a/a/.... a.a/a/....
+a.a/a/.../ a.a/a/...
+a.a/a/../a a.a/a
+a.a/a/../. a.a
+a.a/a/..// a.a
+a.a/a/./aa a.a/a/aa
+a.a/a/./a. a.a/a/a.
+a.a/a/./a/ a.a/a/a
+a.a/a/./.a a.a/a/.a
+a.a/a/./.. a.a
+a.a/a/././ a.a/a
+a.a/a/.//a a.a/a/a
+a.a/a/.//. a.a/a
+a.a/a/./// a.a/a
+a.a/a//aaa a.a/a/aaa
+a.a/a//aa. a.a/a/aa.
+a.a/a//aa/ a.a/a/aa
+a.a/a//a.a a.a/a/a.a
+a.a/a//a.. a.a/a/a..
+a.a/a//a./ a.a/a/a.
+a.a/a//a/a a.a/a/a/a
+a.a/a//a/. a.a/a/a
+a.a/a//a// a.a/a/a
+a.a/a//.aa a.a/a/.aa
+a.a/a//.a. a.a/a/.a.
+a.a/a//.a/ a.a/a/.a
+a.a/a//..a a.a/a/..a
+a.a/a//... a.a/a/...
+a.a/a//../ a.a
+a.a/a//./a a.a/a/a
+a.a/a//./. a.a/a
+a.a/a//.// a.a/a
+a.a/a///aa a.a/a/aa
+a.a/a///a. a.a/a/a.
+a.a/a///a/ a.a/a/a
+a.a/a///.a a.a/a/.a
+a.a/a///.. a.a
+a.a/a///./ a.a/a
+a.a/a////a a.a/a/a
+a.a/a////. a.a/a
+a.a/a///// a.a/a
+a.a/.aaaaa a.a/.aaaaa
+a.a/.aaaa. a.a/.aaaa.
+a.a/.aaaa/ a.a/.aaaa
+a.a/.aaa.a a.a/.aaa.a
+a.a/.aaa.. a.a/.aaa..
+a.a/.aaa./ a.a/.aaa.
+a.a/.aaa/a a.a/.aaa/a
+a.a/.aaa/. a.a/.aaa
+a.a/.aaa// a.a/.aaa
+a.a/.aa.aa a.a/.aa.aa
+a.a/.aa.a. a.a/.aa.a.
+a.a/.aa.a/ a.a/.aa.a
+a.a/.aa..a a.a/.aa..a
+a.a/.aa... a.a/.aa...
+a.a/.aa../ a.a/.aa..
+a.a/.aa./a a.a/.aa./a
+a.a/.aa./. a.a/.aa.
+a.a/.aa.// a.a/.aa.
+a.a/.aa/aa a.a/.aa/aa
+a.a/.aa/a. a.a/.aa/a.
+a.a/.aa/a/ a.a/.aa/a
+a.a/.aa/.a a.a/.aa/.a
+a.a/.aa/.. a.a
+a.a/.aa/./ a.a/.aa
+a.a/.aa//a a.a/.aa/a
+a.a/.aa//. a.a/.aa
+a.a/.aa/// a.a/.aa
+a.a/.a.aaa a.a/.a.aaa
+a.a/.a.aa. a.a/.a.aa.
+a.a/.a.aa/ a.a/.a.aa
+a.a/.a.a.a a.a/.a.a.a
+a.a/.a.a.. a.a/.a.a..
+a.a/.a.a./ a.a/.a.a.
+a.a/.a.a/a a.a/.a.a/a
+a.a/.a.a/. a.a/.a.a
+a.a/.a.a// a.a/.a.a
+a.a/.a..aa a.a/.a..aa
+a.a/.a..a. a.a/.a..a.
+a.a/.a..a/ a.a/.a..a
+a.a/.a...a a.a/.a...a
+a.a/.a.... a.a/.a....
+a.a/.a.../ a.a/.a...
+a.a/.a../a a.a/.a../a
+a.a/.a../. a.a/.a..
+a.a/.a..// a.a/.a..
+a.a/.a./aa a.a/.a./aa
+a.a/.a./a. a.a/.a./a.
+a.a/.a./a/ a.a/.a./a
+a.a/.a./.a a.a/.a./.a
+a.a/.a./.. a.a
+a.a/.a././ a.a/.a.
+a.a/.a.//a a.a/.a./a
+a.a/.a.//. a.a/.a.
+a.a/.a./// a.a/.a.
+a.a/.a/aaa a.a/.a/aaa
+a.a/.a/aa. a.a/.a/aa.
+a.a/.a/aa/ a.a/.a/aa
+a.a/.a/a.a a.a/.a/a.a
+a.a/.a/a.. a.a/.a/a..
+a.a/.a/a./ a.a/.a/a.
+a.a/.a/a/a a.a/.a/a/a
+a.a/.a/a/. a.a/.a/a
+a.a/.a/a// a.a/.a/a
+a.a/.a/.aa a.a/.a/.aa
+a.a/.a/.a. a.a/.a/.a.
+a.a/.a/.a/ a.a/.a/.a
+a.a/.a/..a a.a/.a/..a
+a.a/.a/... a.a/.a/...
+a.a/.a/../ a.a
+a.a/.a/./a a.a/.a/a
+a.a/.a/./. a.a/.a
+a.a/.a/.// a.a/.a
+a.a/.a//aa a.a/.a/aa
+a.a/.a//a. a.a/.a/a.
+a.a/.a//a/ a.a/.a/a
+a.a/.a//.a a.a/.a/.a
+a.a/.a//.. a.a
+a.a/.a//./ a.a/.a
+a.a/.a///a a.a/.a/a
+a.a/.a///. a.a/.a
+a.a/.a//// a.a/.a
+a.a/..aaaa a.a/..aaaa
+a.a/..aaa. a.a/..aaa.
+a.a/..aaa/ a.a/..aaa
+a.a/..aa.a a.a/..aa.a
+a.a/..aa.. a.a/..aa..
+a.a/..aa./ a.a/..aa.
+a.a/..aa/a a.a/..aa/a
+a.a/..aa/. a.a/..aa
+a.a/..aa// a.a/..aa
+a.a/..a.aa a.a/..a.aa
+a.a/..a.a. a.a/..a.a.
+a.a/..a.a/ a.a/..a.a
+a.a/..a..a a.a/..a..a
+a.a/..a... a.a/..a...
+a.a/..a../ a.a/..a..
+a.a/..a./a a.a/..a./a
+a.a/..a./. a.a/..a.
+a.a/..a.// a.a/..a.
+a.a/..a/aa a.a/..a/aa
+a.a/..a/a. a.a/..a/a.
+a.a/..a/a/ a.a/..a/a
+a.a/..a/.a a.a/..a/.a
+a.a/..a/.. a.a
+a.a/..a/./ a.a/..a
+a.a/..a//a a.a/..a/a
+a.a/..a//. a.a/..a
+a.a/..a/// a.a/..a
+a.a/...aaa a.a/...aaa
+a.a/...aa. a.a/...aa.
+a.a/...aa/ a.a/...aa
+a.a/...a.a a.a/...a.a
+a.a/...a.. a.a/...a..
+a.a/...a./ a.a/...a.
+a.a/...a/a a.a/...a/a
+a.a/...a/. a.a/...a
+a.a/...a// a.a/...a
+a.a/....aa a.a/....aa
+a.a/....a. a.a/....a.
+a.a/....a/ a.a/....a
+a.a/.....a a.a/.....a
+a.a/...... a.a/......
+a.a/...../ a.a/.....
+a.a/..../a a.a/..../a
+a.a/..../. a.a/....
+a.a/....// a.a/....
+a.a/.../aa a.a/.../aa
+a.a/.../a. a.a/.../a.
+a.a/.../a/ a.a/.../a
+a.a/.../.a a.a/.../.a
+a.a/.../.. a.a
+a.a/..././ a.a/...
+a.a/...//a a.a/.../a
+a.a/...//. a.a/...
+a.a/.../// a.a/...
+a.a/../aaa aaa
+a.a/../aa. aa.
+a.a/../aa/ aa
+a.a/../a.a a.a
+a.a/../a.. a..
+a.a/../a./ a.
+a.a/../a/a a/a
+a.a/../a/. a
+a.a/../a// a
+a.a/../.aa .aa
+a.a/../.a. .a.
+a.a/../.a/ .a
+a.a/../..a ..a
+a.a/../... ...
+a.a/../../ ..
+a.a/.././a a
+a.a/.././. .
+a.a/../.// .
+a.a/..//aa aa
+a.a/..//a. a.
+a.a/..//a/ a
+a.a/..//.a .a
+a.a/..//.. ..
+a.a/..//./ .
+a.a/..///a a
+a.a/..///. .
+a.a/..//// .
+a.a/./aaaa a.a/aaaa
+a.a/./aaa. a.a/aaa.
+a.a/./aaa/ a.a/aaa
+a.a/./aa.a a.a/aa.a
+a.a/./aa.. a.a/aa..
+a.a/./aa./ a.a/aa.
+a.a/./aa/a a.a/aa/a
+a.a/./aa/. a.a/aa
+a.a/./aa// a.a/aa
+a.a/./a.aa a.a/a.aa
+a.a/./a.a. a.a/a.a.
+a.a/./a.a/ a.a/a.a
+a.a/./a..a a.a/a..a
+a.a/./a... a.a/a...
+a.a/./a../ a.a/a..
+a.a/./a./a a.a/a./a
+a.a/./a./. a.a/a.
+a.a/./a.// a.a/a.
+a.a/./a/aa a.a/a/aa
+a.a/./a/a. a.a/a/a.
+a.a/./a/a/ a.a/a/a
+a.a/./a/.a a.a/a/.a
+a.a/./a/.. a.a
+a.a/./a/./ a.a/a
+a.a/./a//a a.a/a/a
+a.a/./a//. a.a/a
+a.a/./a/// a.a/a
+a.a/./.aaa a.a/.aaa
+a.a/./.aa. a.a/.aa.
+a.a/./.aa/ a.a/.aa
+a.a/./.a.a a.a/.a.a
+a.a/./.a.. a.a/.a..
+a.a/./.a./ a.a/.a.
+a.a/./.a/a a.a/.a/a
+a.a/./.a/. a.a/.a
+a.a/./.a// a.a/.a
+a.a/./..aa a.a/..aa
+a.a/./..a. a.a/..a.
+a.a/./..a/ a.a/..a
+a.a/./...a a.a/...a
+a.a/./.... a.a/....
+a.a/./.../ a.a/...
+a.a/./../a a
+a.a/./../. .
+a.a/./..// .
+a.a/././aa a.a/aa
+a.a/././a. a.a/a.
+a.a/././a/ a.a/a
+a.a/././.a a.a/.a
+a.a/././.. .
+a.a/./././ a.a
+a.a/././/a a.a/a
+a.a/././/. a.a
+a.a/././// a.a
+a.a/.//aaa a.a/aaa
+a.a/.//aa. a.a/aa.
+a.a/.//aa/ a.a/aa
+a.a/.//a.a a.a/a.a
+a.a/.//a.. a.a/a..
+a.a/.//a./ a.a/a.
+a.a/.//a/a a.a/a/a
+a.a/.//a/. a.a/a
+a.a/.//a// a.a/a
+a.a/.//.aa a.a/.aa
+a.a/.//.a. a.a/.a.
+a.a/.//.a/ a.a/.a
+a.a/.//..a a.a/..a
+a.a/.//... a.a/...
+a.a/.//../ .
+a.a/.//./a a.a/a
+a.a/.//./. a.a
+a.a/.//.// a.a
+a.a/.///aa a.a/aa
+a.a/.///a. a.a/a.
+a.a/.///a/ a.a/a
+a.a/.///.a a.a/.a
+a.a/.///.. .
+a.a/.///./ a.a
+a.a/.////a a.a/a
+a.a/.////. a.a
+a.a/.///// a.a
+a.a//aaaaa a.a/aaaaa
+a.a//aaaa. a.a/aaaa.
+a.a//aaaa/ a.a/aaaa
+a.a//aaa.a a.a/aaa.a
+a.a//aaa.. a.a/aaa..
+a.a//aaa./ a.a/aaa.
+a.a//aaa/a a.a/aaa/a
+a.a//aaa/. a.a/aaa
+a.a//aaa// a.a/aaa
+a.a//aa.aa a.a/aa.aa
+a.a//aa.a. a.a/aa.a.
+a.a//aa.a/ a.a/aa.a
+a.a//aa..a a.a/aa..a
+a.a//aa... a.a/aa...
+a.a//aa../ a.a/aa..
+a.a//aa./a a.a/aa./a
+a.a//aa./. a.a/aa.
+a.a//aa.// a.a/aa.
+a.a//aa/aa a.a/aa/aa
+a.a//aa/a. a.a/aa/a.
+a.a//aa/a/ a.a/aa/a
+a.a//aa/.a a.a/aa/.a
+a.a//aa/.. a.a
+a.a//aa/./ a.a/aa
+a.a//aa//a a.a/aa/a
+a.a//aa//. a.a/aa
+a.a//aa/// a.a/aa
+a.a//a.aaa a.a/a.aaa
+a.a//a.aa. a.a/a.aa.
+a.a//a.aa/ a.a/a.aa
+a.a//a.a.a a.a/a.a.a
+a.a//a.a.. a.a/a.a..
+a.a//a.a./ a.a/a.a.
+a.a//a.a/a a.a/a.a/a
+a.a//a.a/. a.a/a.a
+a.a//a.a// a.a/a.a
+a.a//a..aa a.a/a..aa
+a.a//a..a. a.a/a..a.
+a.a//a..a/ a.a/a..a
+a.a//a...a a.a/a...a
+a.a//a.... a.a/a....
+a.a//a.../ a.a/a...
+a.a//a../a a.a/a../a
+a.a//a../. a.a/a..
+a.a//a..// a.a/a..
+a.a//a./aa a.a/a./aa
+a.a//a./a. a.a/a./a.
+a.a//a./a/ a.a/a./a
+a.a//a./.a a.a/a./.a
+a.a//a./.. a.a
+a.a//a././ a.a/a.
+a.a//a.//a a.a/a./a
+a.a//a.//. a.a/a.
+a.a//a./// a.a/a.
+a.a//a/aaa a.a/a/aaa
+a.a//a/aa. a.a/a/aa.
+a.a//a/aa/ a.a/a/aa
+a.a//a/a.a a.a/a/a.a
+a.a//a/a.. a.a/a/a..
+a.a//a/a./ a.a/a/a.
+a.a//a/a/a a.a/a/a/a
+a.a//a/a/. a.a/a/a
+a.a//a/a// a.a/a/a
+a.a//a/.aa a.a/a/.aa
+a.a//a/.a. a.a/a/.a.
+a.a//a/.a/ a.a/a/.a
+a.a//a/..a a.a/a/..a
+a.a//a/... a.a/a/...
+a.a//a/../ a.a
+a.a//a/./a a.a/a/a
+a.a//a/./. a.a/a
+a.a//a/.// a.a/a
+a.a//a//aa a.a/a/aa
+a.a//a//a. a.a/a/a.
+a.a//a//a/ a.a/a/a
+a.a//a//.a a.a/a/.a
+a.a//a//.. a.a
+a.a//a//./ a.a/a
+a.a//a///a a.a/a/a
+a.a//a///. a.a/a
+a.a//a//// a.a/a
+a.a//.aaaa a.a/.aaaa
+a.a//.aaa. a.a/.aaa.
+a.a//.aaa/ a.a/.aaa
+a.a//.aa.a a.a/.aa.a
+a.a//.aa.. a.a/.aa..
+a.a//.aa./ a.a/.aa.
+a.a//.aa/a a.a/.aa/a
+a.a//.aa/. a.a/.aa
+a.a//.aa// a.a/.aa
+a.a//.a.aa a.a/.a.aa
+a.a//.a.a. a.a/.a.a.
+a.a//.a.a/ a.a/.a.a
+a.a//.a..a a.a/.a..a
+a.a//.a... a.a/.a...
+a.a//.a../ a.a/.a..
+a.a//.a./a a.a/.a./a
+a.a//.a./. a.a/.a.
+a.a//.a.// a.a/.a.
+a.a//.a/aa a.a/.a/aa
+a.a//.a/a. a.a/.a/a.
+a.a//.a/a/ a.a/.a/a
+a.a//.a/.a a.a/.a/.a
+a.a//.a/.. a.a
+a.a//.a/./ a.a/.a
+a.a//.a//a a.a/.a/a
+a.a//.a//. a.a/.a
+a.a//.a/// a.a/.a
+a.a//..aaa a.a/..aaa
+a.a//..aa. a.a/..aa.
+a.a//..aa/ a.a/..aa
+a.a//..a.a a.a/..a.a
+a.a//..a.. a.a/..a..
+a.a//..a./ a.a/..a.
+a.a//..a/a a.a/..a/a
+a.a//..a/. a.a/..a
+a.a//..a// a.a/..a
+a.a//...aa a.a/...aa
+a.a//...a. a.a/...a.
+a.a//...a/ a.a/...a
+a.a//....a a.a/....a
+a.a//..... a.a/.....
+a.a//..../ a.a/....
+a.a//.../a a.a/.../a
+a.a//.../. a.a/...
+a.a//...// a.a/...
+a.a//../aa aa
+a.a//../a. a.
+a.a//../a/ a
+a.a//../.a .a
+a.a//../.. ..
+a.a//.././ .
+a.a//..//a a
+a.a//..//. .
+a.a//../// .
+a.a//./aaa a.a/aaa
+a.a//./aa. a.a/aa.
+a.a//./aa/ a.a/aa
+a.a//./a.a a.a/a.a
+a.a//./a.. a.a/a..
+a.a//./a./ a.a/a.
+a.a//./a/a a.a/a/a
+a.a//./a/. a.a/a
+a.a//./a// a.a/a
+a.a//./.aa a.a/.aa
+a.a//./.a. a.a/.a.
+a.a//./.a/ a.a/.a
+a.a//./..a a.a/..a
+a.a//./... a.a/...
+a.a//./../ .
+a.a//././a a.a/a
+a.a//././. a.a
+a.a//./.// a.a
+a.a//.//aa a.a/aa
+a.a//.//a. a.a/a.
+a.a//.//a/ a.a/a
+a.a//.//.a a.a/.a
+a.a//.//.. .
+a.a//.//./ a.a
+a.a//.///a a.a/a
+a.a//.///. a.a
+a.a//.//// a.a
+a.a///aaaa a.a/aaaa
+a.a///aaa. a.a/aaa.
+a.a///aaa/ a.a/aaa
+a.a///aa.a a.a/aa.a
+a.a///aa.. a.a/aa..
+a.a///aa./ a.a/aa.
+a.a///aa/a a.a/aa/a
+a.a///aa/. a.a/aa
+a.a///aa// a.a/aa
+a.a///a.aa a.a/a.aa
+a.a///a.a. a.a/a.a.
+a.a///a.a/ a.a/a.a
+a.a///a..a a.a/a..a
+a.a///a... a.a/a...
+a.a///a../ a.a/a..
+a.a///a./a a.a/a./a
+a.a///a./. a.a/a.
+a.a///a.// a.a/a.
+a.a///a/aa a.a/a/aa
+a.a///a/a. a.a/a/a.
+a.a///a/a/ a.a/a/a
+a.a///a/.a a.a/a/.a
+a.a///a/.. a.a
+a.a///a/./ a.a/a
+a.a///a//a a.a/a/a
+a.a///a//. a.a/a
+a.a///a/// a.a/a
+a.a///.aaa a.a/.aaa
+a.a///.aa. a.a/.aa.
+a.a///.aa/ a.a/.aa
+a.a///.a.a a.a/.a.a
+a.a///.a.. a.a/.a..
+a.a///.a./ a.a/.a.
+a.a///.a/a a.a/.a/a
+a.a///.a/. a.a/.a
+a.a///.a// a.a/.a
+a.a///..aa a.a/..aa
+a.a///..a. a.a/..a.
+a.a///..a/ a.a/..a
+a.a///...a a.a/...a
+a.a///.... a.a/....
+a.a///.../ a.a/...
+a.a///../a a
+a.a///../. .
+a.a///..// .
+a.a///./aa a.a/aa
+a.a///./a. a.a/a.
+a.a///./a/ a.a/a
+a.a///./.a a.a/.a
+a.a///./.. .
+a.a///././ a.a
+a.a///.//a a.a/a
+a.a///.//. a.a
+a.a///./// a.a
+a.a////aaa a.a/aaa
+a.a////aa. a.a/aa.
+a.a////aa/ a.a/aa
+a.a////a.a a.a/a.a
+a.a////a.. a.a/a..
+a.a////a./ a.a/a.
+a.a////a/a a.a/a/a
+a.a////a/. a.a/a
+a.a////a// a.a/a
+a.a////.aa a.a/.aa
+a.a////.a. a.a/.a.
+a.a////.a/ a.a/.a
+a.a////..a a.a/..a
+a.a////... a.a/...
+a.a////../ .
+a.a////./a a.a/a
+a.a////./. a.a
+a.a////.// a.a
+a.a/////aa a.a/aa
+a.a/////a. a.a/a.
+a.a/////a/ a.a/a
+a.a/////.a a.a/.a
+a.a/////.. .
+a.a/////./ a.a
+a.a//////a a.a/a
+a.a//////. a.a
+a.a/////// a.a
+a..aaaaaaa a..aaaaaaa
+a..aaaaaa. a..aaaaaa.
+a..aaaaaa/ a..aaaaaa
+a..aaaaa.a a..aaaaa.a
+a..aaaaa.. a..aaaaa..
+a..aaaaa./ a..aaaaa.
+a..aaaaa/a a..aaaaa/a
+a..aaaaa/. a..aaaaa
+a..aaaaa// a..aaaaa
+a..aaaa.aa a..aaaa.aa
+a..aaaa.a. a..aaaa.a.
+a..aaaa.a/ a..aaaa.a
+a..aaaa..a a..aaaa..a
+a..aaaa... a..aaaa...
+a..aaaa../ a..aaaa..
+a..aaaa./a a..aaaa./a
+a..aaaa./. a..aaaa.
+a..aaaa.// a..aaaa.
+a..aaaa/aa a..aaaa/aa
+a..aaaa/a. a..aaaa/a.
+a..aaaa/a/ a..aaaa/a
+a..aaaa/.a a..aaaa/.a
+a..aaaa/.. .
+a..aaaa/./ a..aaaa
+a..aaaa//a a..aaaa/a
+a..aaaa//. a..aaaa
+a..aaaa/// a..aaaa
+a..aaa.aaa a..aaa.aaa
+a..aaa.aa. a..aaa.aa.
+a..aaa.aa/ a..aaa.aa
+a..aaa.a.a a..aaa.a.a
+a..aaa.a.. a..aaa.a..
+a..aaa.a./ a..aaa.a.
+a..aaa.a/a a..aaa.a/a
+a..aaa.a/. a..aaa.a
+a..aaa.a// a..aaa.a
+a..aaa..aa a..aaa..aa
+a..aaa..a. a..aaa..a.
+a..aaa..a/ a..aaa..a
+a..aaa...a a..aaa...a
+a..aaa.... a..aaa....
+a..aaa.../ a..aaa...
+a..aaa../a a..aaa../a
+a..aaa../. a..aaa..
+a..aaa..// a..aaa..
+a..aaa./aa a..aaa./aa
+a..aaa./a. a..aaa./a.
+a..aaa./a/ a..aaa./a
+a..aaa./.a a..aaa./.a
+a..aaa./.. .
+a..aaa././ a..aaa.
+a..aaa.//a a..aaa./a
+a..aaa.//. a..aaa.
+a..aaa./// a..aaa.
+a..aaa/aaa a..aaa/aaa
+a..aaa/aa. a..aaa/aa.
+a..aaa/aa/ a..aaa/aa
+a..aaa/a.a a..aaa/a.a
+a..aaa/a.. a..aaa/a..
+a..aaa/a./ a..aaa/a.
+a..aaa/a/a a..aaa/a/a
+a..aaa/a/. a..aaa/a
+a..aaa/a// a..aaa/a
+a..aaa/.aa a..aaa/.aa
+a..aaa/.a. a..aaa/.a.
+a..aaa/.a/ a..aaa/.a
+a..aaa/..a a..aaa/..a
+a..aaa/... a..aaa/...
+a..aaa/../ .
+a..aaa/./a a..aaa/a
+a..aaa/./. a..aaa
+a..aaa/.// a..aaa
+a..aaa//aa a..aaa/aa
+a..aaa//a. a..aaa/a.
+a..aaa//a/ a..aaa/a
+a..aaa//.a a..aaa/.a
+a..aaa//.. .
+a..aaa//./ a..aaa
+a..aaa///a a..aaa/a
+a..aaa///. a..aaa
+a..aaa//// a..aaa
+a..aa.aaaa a..aa.aaaa
+a..aa.aaa. a..aa.aaa.
+a..aa.aaa/ a..aa.aaa
+a..aa.aa.a a..aa.aa.a
+a..aa.aa.. a..aa.aa..
+a..aa.aa./ a..aa.aa.
+a..aa.aa/a a..aa.aa/a
+a..aa.aa/. a..aa.aa
+a..aa.aa// a..aa.aa
+a..aa.a.aa a..aa.a.aa
+a..aa.a.a. a..aa.a.a.
+a..aa.a.a/ a..aa.a.a
+a..aa.a..a a..aa.a..a
+a..aa.a... a..aa.a...
+a..aa.a../ a..aa.a..
+a..aa.a./a a..aa.a./a
+a..aa.a./. a..aa.a.
+a..aa.a.// a..aa.a.
+a..aa.a/aa a..aa.a/aa
+a..aa.a/a. a..aa.a/a.
+a..aa.a/a/ a..aa.a/a
+a..aa.a/.a a..aa.a/.a
+a..aa.a/.. .
+a..aa.a/./ a..aa.a
+a..aa.a//a a..aa.a/a
+a..aa.a//. a..aa.a
+a..aa.a/// a..aa.a
+a..aa..aaa a..aa..aaa
+a..aa..aa. a..aa..aa.
+a..aa..aa/ a..aa..aa
+a..aa..a.a a..aa..a.a
+a..aa..a.. a..aa..a..
+a..aa..a./ a..aa..a.
+a..aa..a/a a..aa..a/a
+a..aa..a/. a..aa..a
+a..aa..a// a..aa..a
+a..aa...aa a..aa...aa
+a..aa...a. a..aa...a.
+a..aa...a/ a..aa...a
+a..aa....a a..aa....a
+a..aa..... a..aa.....
+a..aa..../ a..aa....
+a..aa.../a a..aa.../a
+a..aa.../. a..aa...
+a..aa...// a..aa...
+a..aa../aa a..aa../aa
+a..aa../a. a..aa../a.
+a..aa../a/ a..aa../a
+a..aa../.a a..aa../.a
+a..aa../.. .
+a..aa.././ a..aa..
+a..aa..//a a..aa../a
+a..aa..//. a..aa..
+a..aa../// a..aa..
+a..aa./aaa a..aa./aaa
+a..aa./aa. a..aa./aa.
+a..aa./aa/ a..aa./aa
+a..aa./a.a a..aa./a.a
+a..aa./a.. a..aa./a..
+a..aa./a./ a..aa./a.
+a..aa./a/a a..aa./a/a
+a..aa./a/. a..aa./a
+a..aa./a// a..aa./a
+a..aa./.aa a..aa./.aa
+a..aa./.a. a..aa./.a.
+a..aa./.a/ a..aa./.a
+a..aa./..a a..aa./..a
+a..aa./... a..aa./...
+a..aa./../ .
+a..aa././a a..aa./a
+a..aa././. a..aa.
+a..aa./.// a..aa.
+a..aa.//aa a..aa./aa
+a..aa.//a. a..aa./a.
+a..aa.//a/ a..aa./a
+a..aa.//.a a..aa./.a
+a..aa.//.. .
+a..aa.//./ a..aa.
+a..aa.///a a..aa./a
+a..aa.///. a..aa.
+a..aa.//// a..aa.
+a..aa/aaaa a..aa/aaaa
+a..aa/aaa. a..aa/aaa.
+a..aa/aaa/ a..aa/aaa
+a..aa/aa.a a..aa/aa.a
+a..aa/aa.. a..aa/aa..
+a..aa/aa./ a..aa/aa.
+a..aa/aa/a a..aa/aa/a
+a..aa/aa/. a..aa/aa
+a..aa/aa// a..aa/aa
+a..aa/a.aa a..aa/a.aa
+a..aa/a.a. a..aa/a.a.
+a..aa/a.a/ a..aa/a.a
+a..aa/a..a a..aa/a..a
+a..aa/a... a..aa/a...
+a..aa/a../ a..aa/a..
+a..aa/a./a a..aa/a./a
+a..aa/a./. a..aa/a.
+a..aa/a.// a..aa/a.
+a..aa/a/aa a..aa/a/aa
+a..aa/a/a. a..aa/a/a.
+a..aa/a/a/ a..aa/a/a
+a..aa/a/.a a..aa/a/.a
+a..aa/a/.. a..aa
+a..aa/a/./ a..aa/a
+a..aa/a//a a..aa/a/a
+a..aa/a//. a..aa/a
+a..aa/a/// a..aa/a
+a..aa/.aaa a..aa/.aaa
+a..aa/.aa. a..aa/.aa.
+a..aa/.aa/ a..aa/.aa
+a..aa/.a.a a..aa/.a.a
+a..aa/.a.. a..aa/.a..
+a..aa/.a./ a..aa/.a.
+a..aa/.a/a a..aa/.a/a
+a..aa/.a/. a..aa/.a
+a..aa/.a// a..aa/.a
+a..aa/..aa a..aa/..aa
+a..aa/..a. a..aa/..a.
+a..aa/..a/ a..aa/..a
+a..aa/...a a..aa/...a
+a..aa/.... a..aa/....
+a..aa/.../ a..aa/...
+a..aa/../a a
+a..aa/../. .
+a..aa/..// .
+a..aa/./aa a..aa/aa
+a..aa/./a. a..aa/a.
+a..aa/./a/ a..aa/a
+a..aa/./.a a..aa/.a
+a..aa/./.. .
+a..aa/././ a..aa
+a..aa/.//a a..aa/a
+a..aa/.//. a..aa
+a..aa/./// a..aa
+a..aa//aaa a..aa/aaa
+a..aa//aa. a..aa/aa.
+a..aa//aa/ a..aa/aa
+a..aa//a.a a..aa/a.a
+a..aa//a.. a..aa/a..
+a..aa//a./ a..aa/a.
+a..aa//a/a a..aa/a/a
+a..aa//a/. a..aa/a
+a..aa//a// a..aa/a
+a..aa//.aa a..aa/.aa
+a..aa//.a. a..aa/.a.
+a..aa//.a/ a..aa/.a
+a..aa//..a a..aa/..a
+a..aa//... a..aa/...
+a..aa//../ .
+a..aa//./a a..aa/a
+a..aa//./. a..aa
+a..aa//.// a..aa
+a..aa///aa a..aa/aa
+a..aa///a. a..aa/a.
+a..aa///a/ a..aa/a
+a..aa///.a a..aa/.a
+a..aa///.. .
+a..aa///./ a..aa
+a..aa////a a..aa/a
+a..aa////. a..aa
+a..aa///// a..aa
+a..a.aaaaa a..a.aaaaa
+a..a.aaaa. a..a.aaaa.
+a..a.aaaa/ a..a.aaaa
+a..a.aaa.a a..a.aaa.a
+a..a.aaa.. a..a.aaa..
+a..a.aaa./ a..a.aaa.
+a..a.aaa/a a..a.aaa/a
+a..a.aaa/. a..a.aaa
+a..a.aaa// a..a.aaa
+a..a.aa.aa a..a.aa.aa
+a..a.aa.a. a..a.aa.a.
+a..a.aa.a/ a..a.aa.a
+a..a.aa..a a..a.aa..a
+a..a.aa... a..a.aa...
+a..a.aa../ a..a.aa..
+a..a.aa./a a..a.aa./a
+a..a.aa./. a..a.aa.
+a..a.aa.// a..a.aa.
+a..a.aa/aa a..a.aa/aa
+a..a.aa/a. a..a.aa/a.
+a..a.aa/a/ a..a.aa/a
+a..a.aa/.a a..a.aa/.a
+a..a.aa/.. .
+a..a.aa/./ a..a.aa
+a..a.aa//a a..a.aa/a
+a..a.aa//. a..a.aa
+a..a.aa/// a..a.aa
+a..a.a.aaa a..a.a.aaa
+a..a.a.aa. a..a.a.aa.
+a..a.a.aa/ a..a.a.aa
+a..a.a.a.a a..a.a.a.a
+a..a.a.a.. a..a.a.a..
+a..a.a.a./ a..a.a.a.
+a..a.a.a/a a..a.a.a/a
+a..a.a.a/. a..a.a.a
+a..a.a.a// a..a.a.a
+a..a.a..aa a..a.a..aa
+a..a.a..a. a..a.a..a.
+a..a.a..a/ a..a.a..a
+a..a.a...a a..a.a...a
+a..a.a.... a..a.a....
+a..a.a.../ a..a.a...
+a..a.a../a a..a.a../a
+a..a.a../. a..a.a..
+a..a.a..// a..a.a..
+a..a.a./aa a..a.a./aa
+a..a.a./a. a..a.a./a.
+a..a.a./a/ a..a.a./a
+a..a.a./.a a..a.a./.a
+a..a.a./.. .
+a..a.a././ a..a.a.
+a..a.a.//a a..a.a./a
+a..a.a.//. a..a.a.
+a..a.a./// a..a.a.
+a..a.a/aaa a..a.a/aaa
+a..a.a/aa. a..a.a/aa.
+a..a.a/aa/ a..a.a/aa
+a..a.a/a.a a..a.a/a.a
+a..a.a/a.. a..a.a/a..
+a..a.a/a./ a..a.a/a.
+a..a.a/a/a a..a.a/a/a
+a..a.a/a/. a..a.a/a
+a..a.a/a// a..a.a/a
+a..a.a/.aa a..a.a/.aa
+a..a.a/.a. a..a.a/.a.
+a..a.a/.a/ a..a.a/.a
+a..a.a/..a a..a.a/..a
+a..a.a/... a..a.a/...
+a..a.a/../ .
+a..a.a/./a a..a.a/a
+a..a.a/./. a..a.a
+a..a.a/.// a..a.a
+a..a.a//aa a..a.a/aa
+a..a.a//a. a..a.a/a.
+a..a.a//a/ a..a.a/a
+a..a.a//.a a..a.a/.a
+a..a.a//.. .
+a..a.a//./ a..a.a
+a..a.a///a a..a.a/a
+a..a.a///. a..a.a
+a..a.a//// a..a.a
+a..a..aaaa a..a..aaaa
+a..a..aaa. a..a..aaa.
+a..a..aaa/ a..a..aaa
+a..a..aa.a a..a..aa.a
+a..a..aa.. a..a..aa..
+a..a..aa./ a..a..aa.
+a..a..aa/a a..a..aa/a
+a..a..aa/. a..a..aa
+a..a..aa// a..a..aa
+a..a..a.aa a..a..a.aa
+a..a..a.a. a..a..a.a.
+a..a..a.a/ a..a..a.a
+a..a..a..a a..a..a..a
+a..a..a... a..a..a...
+a..a..a../ a..a..a..
+a..a..a./a a..a..a./a
+a..a..a./. a..a..a.
+a..a..a.// a..a..a.
+a..a..a/aa a..a..a/aa
+a..a..a/a. a..a..a/a.
+a..a..a/a/ a..a..a/a
+a..a..a/.a a..a..a/.a
+a..a..a/.. .
+a..a..a/./ a..a..a
+a..a..a//a a..a..a/a
+a..a..a//. a..a..a
+a..a..a/// a..a..a
+a..a...aaa a..a...aaa
+a..a...aa. a..a...aa.
+a..a...aa/ a..a...aa
+a..a...a.a a..a...a.a
+a..a...a.. a..a...a..
+a..a...a./ a..a...a.
+a..a...a/a a..a...a/a
+a..a...a/. a..a...a
+a..a...a// a..a...a
+a..a....aa a..a....aa
+a..a....a. a..a....a.
+a..a....a/ a..a....a
+a..a.....a a..a.....a
+a..a...... a..a......
+a..a...../ a..a.....
+a..a..../a a..a..../a
+a..a..../. a..a....
+a..a....// a..a....
+a..a.../aa a..a.../aa
+a..a.../a. a..a.../a.
+a..a.../a/ a..a.../a
+a..a.../.a a..a.../.a
+a..a.../.. .
+a..a..././ a..a...
+a..a...//a a..a.../a
+a..a...//. a..a...
+a..a.../// a..a...
+a..a../aaa a..a../aaa
+a..a../aa. a..a../aa.
+a..a../aa/ a..a../aa
+a..a../a.a a..a../a.a
+a..a../a.. a..a../a..
+a..a../a./ a..a../a.
+a..a../a/a a..a../a/a
+a..a../a/. a..a../a
+a..a../a// a..a../a
+a..a../.aa a..a../.aa
+a..a../.a. a..a../.a.
+a..a../.a/ a..a../.a
+a..a../..a a..a../..a
+a..a../... a..a../...
+a..a../../ .
+a..a.././a a..a../a
+a..a.././. a..a..
+a..a../.// a..a..
+a..a..//aa a..a../aa
+a..a..//a. a..a../a.
+a..a..//a/ a..a../a
+a..a..//.a a..a../.a
+a..a..//.. .
+a..a..//./ a..a..
+a..a..///a a..a../a
+a..a..///. a..a..
+a..a..//// a..a..
+a..a./aaaa a..a./aaaa
+a..a./aaa. a..a./aaa.
+a..a./aaa/ a..a./aaa
+a..a./aa.a a..a./aa.a
+a..a./aa.. a..a./aa..
+a..a./aa./ a..a./aa.
+a..a./aa/a a..a./aa/a
+a..a./aa/. a..a./aa
+a..a./aa// a..a./aa
+a..a./a.aa a..a./a.aa
+a..a./a.a. a..a./a.a.
+a..a./a.a/ a..a./a.a
+a..a./a..a a..a./a..a
+a..a./a... a..a./a...
+a..a./a../ a..a./a..
+a..a./a./a a..a./a./a
+a..a./a./. a..a./a.
+a..a./a.// a..a./a.
+a..a./a/aa a..a./a/aa
+a..a./a/a. a..a./a/a.
+a..a./a/a/ a..a./a/a
+a..a./a/.a a..a./a/.a
+a..a./a/.. a..a.
+a..a./a/./ a..a./a
+a..a./a//a a..a./a/a
+a..a./a//. a..a./a
+a..a./a/// a..a./a
+a..a./.aaa a..a./.aaa
+a..a./.aa. a..a./.aa.
+a..a./.aa/ a..a./.aa
+a..a./.a.a a..a./.a.a
+a..a./.a.. a..a./.a..
+a..a./.a./ a..a./.a.
+a..a./.a/a a..a./.a/a
+a..a./.a/. a..a./.a
+a..a./.a// a..a./.a
+a..a./..aa a..a./..aa
+a..a./..a. a..a./..a.
+a..a./..a/ a..a./..a
+a..a./...a a..a./...a
+a..a./.... a..a./....
+a..a./.../ a..a./...
+a..a./../a a
+a..a./../. .
+a..a./..// .
+a..a././aa a..a./aa
+a..a././a. a..a./a.
+a..a././a/ a..a./a
+a..a././.a a..a./.a
+a..a././.. .
+a..a./././ a..a.
+a..a././/a a..a./a
+a..a././/. a..a.
+a..a././// a..a.
+a..a.//aaa a..a./aaa
+a..a.//aa. a..a./aa.
+a..a.//aa/ a..a./aa
+a..a.//a.a a..a./a.a
+a..a.//a.. a..a./a..
+a..a.//a./ a..a./a.
+a..a.//a/a a..a./a/a
+a..a.//a/. a..a./a
+a..a.//a// a..a./a
+a..a.//.aa a..a./.aa
+a..a.//.a. a..a./.a.
+a..a.//.a/ a..a./.a
+a..a.//..a a..a./..a
+a..a.//... a..a./...
+a..a.//../ .
+a..a.//./a a..a./a
+a..a.//./. a..a.
+a..a.//.// a..a.
+a..a.///aa a..a./aa
+a..a.///a. a..a./a.
+a..a.///a/ a..a./a
+a..a.///.a a..a./.a
+a..a.///.. .
+a..a.///./ a..a.
+a..a.////a a..a./a
+a..a.////. a..a.
+a..a.///// a..a.
+a..a/aaaaa a..a/aaaaa
+a..a/aaaa. a..a/aaaa.
+a..a/aaaa/ a..a/aaaa
+a..a/aaa.a a..a/aaa.a
+a..a/aaa.. a..a/aaa..
+a..a/aaa./ a..a/aaa.
+a..a/aaa/a a..a/aaa/a
+a..a/aaa/. a..a/aaa
+a..a/aaa// a..a/aaa
+a..a/aa.aa a..a/aa.aa
+a..a/aa.a. a..a/aa.a.
+a..a/aa.a/ a..a/aa.a
+a..a/aa..a a..a/aa..a
+a..a/aa... a..a/aa...
+a..a/aa../ a..a/aa..
+a..a/aa./a a..a/aa./a
+a..a/aa./. a..a/aa.
+a..a/aa.// a..a/aa.
+a..a/aa/aa a..a/aa/aa
+a..a/aa/a. a..a/aa/a.
+a..a/aa/a/ a..a/aa/a
+a..a/aa/.a a..a/aa/.a
+a..a/aa/.. a..a
+a..a/aa/./ a..a/aa
+a..a/aa//a a..a/aa/a
+a..a/aa//. a..a/aa
+a..a/aa/// a..a/aa
+a..a/a.aaa a..a/a.aaa
+a..a/a.aa. a..a/a.aa.
+a..a/a.aa/ a..a/a.aa
+a..a/a.a.a a..a/a.a.a
+a..a/a.a.. a..a/a.a..
+a..a/a.a./ a..a/a.a.
+a..a/a.a/a a..a/a.a/a
+a..a/a.a/. a..a/a.a
+a..a/a.a// a..a/a.a
+a..a/a..aa a..a/a..aa
+a..a/a..a. a..a/a..a.
+a..a/a..a/ a..a/a..a
+a..a/a...a a..a/a...a
+a..a/a.... a..a/a....
+a..a/a.../ a..a/a...
+a..a/a../a a..a/a../a
+a..a/a../. a..a/a..
+a..a/a..// a..a/a..
+a..a/a./aa a..a/a./aa
+a..a/a./a. a..a/a./a.
+a..a/a./a/ a..a/a./a
+a..a/a./.a a..a/a./.a
+a..a/a./.. a..a
+a..a/a././ a..a/a.
+a..a/a.//a a..a/a./a
+a..a/a.//. a..a/a.
+a..a/a./// a..a/a.
+a..a/a/aaa a..a/a/aaa
+a..a/a/aa. a..a/a/aa.
+a..a/a/aa/ a..a/a/aa
+a..a/a/a.a a..a/a/a.a
+a..a/a/a.. a..a/a/a..
+a..a/a/a./ a..a/a/a.
+a..a/a/a/a a..a/a/a/a
+a..a/a/a/. a..a/a/a
+a..a/a/a// a..a/a/a
+a..a/a/.aa a..a/a/.aa
+a..a/a/.a. a..a/a/.a.
+a..a/a/.a/ a..a/a/.a
+a..a/a/..a a..a/a/..a
+a..a/a/... a..a/a/...
+a..a/a/../ a..a
+a..a/a/./a a..a/a/a
+a..a/a/./. a..a/a
+a..a/a/.// a..a/a
+a..a/a//aa a..a/a/aa
+a..a/a//a. a..a/a/a.
+a..a/a//a/ a..a/a/a
+a..a/a//.a a..a/a/.a
+a..a/a//.. a..a
+a..a/a//./ a..a/a
+a..a/a///a a..a/a/a
+a..a/a///. a..a/a
+a..a/a//// a..a/a
+a..a/.aaaa a..a/.aaaa
+a..a/.aaa. a..a/.aaa.
+a..a/.aaa/ a..a/.aaa
+a..a/.aa.a a..a/.aa.a
+a..a/.aa.. a..a/.aa..
+a..a/.aa./ a..a/.aa.
+a..a/.aa/a a..a/.aa/a
+a..a/.aa/. a..a/.aa
+a..a/.aa// a..a/.aa
+a..a/.a.aa a..a/.a.aa
+a..a/.a.a. a..a/.a.a.
+a..a/.a.a/ a..a/.a.a
+a..a/.a..a a..a/.a..a
+a..a/.a... a..a/.a...
+a..a/.a../ a..a/.a..
+a..a/.a./a a..a/.a./a
+a..a/.a./. a..a/.a.
+a..a/.a.// a..a/.a.
+a..a/.a/aa a..a/.a/aa
+a..a/.a/a. a..a/.a/a.
+a..a/.a/a/ a..a/.a/a
+a..a/.a/.a a..a/.a/.a
+a..a/.a/.. a..a
+a..a/.a/./ a..a/.a
+a..a/.a//a a..a/.a/a
+a..a/.a//. a..a/.a
+a..a/.a/// a..a/.a
+a..a/..aaa a..a/..aaa
+a..a/..aa. a..a/..aa.
+a..a/..aa/ a..a/..aa
+a..a/..a.a a..a/..a.a
+a..a/..a.. a..a/..a..
+a..a/..a./ a..a/..a.
+a..a/..a/a a..a/..a/a
+a..a/..a/. a..a/..a
+a..a/..a// a..a/..a
+a..a/...aa a..a/...aa
+a..a/...a. a..a/...a.
+a..a/...a/ a..a/...a
+a..a/....a a..a/....a
+a..a/..... a..a/.....
+a..a/..../ a..a/....
+a..a/.../a a..a/.../a
+a..a/.../. a..a/...
+a..a/...// a..a/...
+a..a/../aa aa
+a..a/../a. a.
+a..a/../a/ a
+a..a/../.a .a
+a..a/../.. ..
+a..a/.././ .
+a..a/..//a a
+a..a/..//. .
+a..a/../// .
+a..a/./aaa a..a/aaa
+a..a/./aa. a..a/aa.
+a..a/./aa/ a..a/aa
+a..a/./a.a a..a/a.a
+a..a/./a.. a..a/a..
+a..a/./a./ a..a/a.
+a..a/./a/a a..a/a/a
+a..a/./a/. a..a/a
+a..a/./a// a..a/a
+a..a/./.aa a..a/.aa
+a..a/./.a. a..a/.a.
+a..a/./.a/ a..a/.a
+a..a/./..a a..a/..a
+a..a/./... a..a/...
+a..a/./../ .
+a..a/././a a..a/a
+a..a/././. a..a
+a..a/./.// a..a
+a..a/.//aa a..a/aa
+a..a/.//a. a..a/a.
+a..a/.//a/ a..a/a
+a..a/.//.a a..a/.a
+a..a/.//.. .
+a..a/.//./ a..a
+a..a/.///a a..a/a
+a..a/.///. a..a
+a..a/.//// a..a
+a..a//aaaa a..a/aaaa
+a..a//aaa. a..a/aaa.
+a..a//aaa/ a..a/aaa
+a..a//aa.a a..a/aa.a
+a..a//aa.. a..a/aa..
+a..a//aa./ a..a/aa.
+a..a//aa/a a..a/aa/a
+a..a//aa/. a..a/aa
+a..a//aa// a..a/aa
+a..a//a.aa a..a/a.aa
+a..a//a.a. a..a/a.a.
+a..a//a.a/ a..a/a.a
+a..a//a..a a..a/a..a
+a..a//a... a..a/a...
+a..a//a../ a..a/a..
+a..a//a./a a..a/a./a
+a..a//a./. a..a/a.
+a..a//a.// a..a/a.
+a..a//a/aa a..a/a/aa
+a..a//a/a. a..a/a/a.
+a..a//a/a/ a..a/a/a
+a..a//a/.a a..a/a/.a
+a..a//a/.. a..a
+a..a//a/./ a..a/a
+a..a//a//a a..a/a/a
+a..a//a//. a..a/a
+a..a//a/// a..a/a
+a..a//.aaa a..a/.aaa
+a..a//.aa. a..a/.aa.
+a..a//.aa/ a..a/.aa
+a..a//.a.a a..a/.a.a
+a..a//.a.. a..a/.a..
+a..a//.a./ a..a/.a.
+a..a//.a/a a..a/.a/a
+a..a//.a/. a..a/.a
+a..a//.a// a..a/.a
+a..a//..aa a..a/..aa
+a..a//..a. a..a/..a.
+a..a//..a/ a..a/..a
+a..a//...a a..a/...a
+a..a//.... a..a/....
+a..a//.../ a..a/...
+a..a//../a a
+a..a//../. .
+a..a//..// .
+a..a//./aa a..a/aa
+a..a//./a. a..a/a.
+a..a//./a/ a..a/a
+a..a//./.a a..a/.a
+a..a//./.. .
+a..a//././ a..a
+a..a//.//a a..a/a
+a..a//.//. a..a
+a..a//./// a..a
+a..a///aaa a..a/aaa
+a..a///aa. a..a/aa.
+a..a///aa/ a..a/aa
+a..a///a.a a..a/a.a
+a..a///a.. a..a/a..
+a..a///a./ a..a/a.
+a..a///a/a a..a/a/a
+a..a///a/. a..a/a
+a..a///a// a..a/a
+a..a///.aa a..a/.aa
+a..a///.a. a..a/.a.
+a..a///.a/ a..a/.a
+a..a///..a a..a/..a
+a..a///... a..a/...
+a..a///../ .
+a..a///./a a..a/a
+a..a///./. a..a
+a..a///.// a..a
+a..a////aa a..a/aa
+a..a////a. a..a/a.
+a..a////a/ a..a/a
+a..a////.a a..a/.a
+a..a////.. .
+a..a////./ a..a
+a..a/////a a..a/a
+a..a/////. a..a
+a..a////// a..a
+a...aaaaaa a...aaaaaa
+a...aaaaa. a...aaaaa.
+a...aaaaa/ a...aaaaa
+a...aaaa.a a...aaaa.a
+a...aaaa.. a...aaaa..
+a...aaaa./ a...aaaa.
+a...aaaa/a a...aaaa/a
+a...aaaa/. a...aaaa
+a...aaaa// a...aaaa
+a...aaa.aa a...aaa.aa
+a...aaa.a. a...aaa.a.
+a...aaa.a/ a...aaa.a
+a...aaa..a a...aaa..a
+a...aaa... a...aaa...
+a...aaa../ a...aaa..
+a...aaa./a a...aaa./a
+a...aaa./. a...aaa.
+a...aaa.// a...aaa.
+a...aaa/aa a...aaa/aa
+a...aaa/a. a...aaa/a.
+a...aaa/a/ a...aaa/a
+a...aaa/.a a...aaa/.a
+a...aaa/.. .
+a...aaa/./ a...aaa
+a...aaa//a a...aaa/a
+a...aaa//. a...aaa
+a...aaa/// a...aaa
+a...aa.aaa a...aa.aaa
+a...aa.aa. a...aa.aa.
+a...aa.aa/ a...aa.aa
+a...aa.a.a a...aa.a.a
+a...aa.a.. a...aa.a..
+a...aa.a./ a...aa.a.
+a...aa.a/a a...aa.a/a
+a...aa.a/. a...aa.a
+a...aa.a// a...aa.a
+a...aa..aa a...aa..aa
+a...aa..a. a...aa..a.
+a...aa..a/ a...aa..a
+a...aa...a a...aa...a
+a...aa.... a...aa....
+a...aa.../ a...aa...
+a...aa../a a...aa../a
+a...aa../. a...aa..
+a...aa..// a...aa..
+a...aa./aa a...aa./aa
+a...aa./a. a...aa./a.
+a...aa./a/ a...aa./a
+a...aa./.a a...aa./.a
+a...aa./.. .
+a...aa././ a...aa.
+a...aa.//a a...aa./a
+a...aa.//. a...aa.
+a...aa./// a...aa.
+a...aa/aaa a...aa/aaa
+a...aa/aa. a...aa/aa.
+a...aa/aa/ a...aa/aa
+a...aa/a.a a...aa/a.a
+a...aa/a.. a...aa/a..
+a...aa/a./ a...aa/a.
+a...aa/a/a a...aa/a/a
+a...aa/a/. a...aa/a
+a...aa/a// a...aa/a
+a...aa/.aa a...aa/.aa
+a...aa/.a. a...aa/.a.
+a...aa/.a/ a...aa/.a
+a...aa/..a a...aa/..a
+a...aa/... a...aa/...
+a...aa/../ .
+a...aa/./a a...aa/a
+a...aa/./. a...aa
+a...aa/.// a...aa
+a...aa//aa a...aa/aa
+a...aa//a. a...aa/a.
+a...aa//a/ a...aa/a
+a...aa//.a a...aa/.a
+a...aa//.. .
+a...aa//./ a...aa
+a...aa///a a...aa/a
+a...aa///. a...aa
+a...aa//// a...aa
+a...a.aaaa a...a.aaaa
+a...a.aaa. a...a.aaa.
+a...a.aaa/ a...a.aaa
+a...a.aa.a a...a.aa.a
+a...a.aa.. a...a.aa..
+a...a.aa./ a...a.aa.
+a...a.aa/a a...a.aa/a
+a...a.aa/. a...a.aa
+a...a.aa// a...a.aa
+a...a.a.aa a...a.a.aa
+a...a.a.a. a...a.a.a.
+a...a.a.a/ a...a.a.a
+a...a.a..a a...a.a..a
+a...a.a... a...a.a...
+a...a.a../ a...a.a..
+a...a.a./a a...a.a./a
+a...a.a./. a...a.a.
+a...a.a.// a...a.a.
+a...a.a/aa a...a.a/aa
+a...a.a/a. a...a.a/a.
+a...a.a/a/ a...a.a/a
+a...a.a/.a a...a.a/.a
+a...a.a/.. .
+a...a.a/./ a...a.a
+a...a.a//a a...a.a/a
+a...a.a//. a...a.a
+a...a.a/// a...a.a
+a...a..aaa a...a..aaa
+a...a..aa. a...a..aa.
+a...a..aa/ a...a..aa
+a...a..a.a a...a..a.a
+a...a..a.. a...a..a..
+a...a..a./ a...a..a.
+a...a..a/a a...a..a/a
+a...a..a/. a...a..a
+a...a..a// a...a..a
+a...a...aa a...a...aa
+a...a...a. a...a...a.
+a...a...a/ a...a...a
+a...a....a a...a....a
+a...a..... a...a.....
+a...a..../ a...a....
+a...a.../a a...a.../a
+a...a.../. a...a...
+a...a...// a...a...
+a...a../aa a...a../aa
+a...a../a. a...a../a.
+a...a../a/ a...a../a
+a...a../.a a...a../.a
+a...a../.. .
+a...a.././ a...a..
+a...a..//a a...a../a
+a...a..//. a...a..
+a...a../// a...a..
+a...a./aaa a...a./aaa
+a...a./aa. a...a./aa.
+a...a./aa/ a...a./aa
+a...a./a.a a...a./a.a
+a...a./a.. a...a./a..
+a...a./a./ a...a./a.
+a...a./a/a a...a./a/a
+a...a./a/. a...a./a
+a...a./a// a...a./a
+a...a./.aa a...a./.aa
+a...a./.a. a...a./.a.
+a...a./.a/ a...a./.a
+a...a./..a a...a./..a
+a...a./... a...a./...
+a...a./../ .
+a...a././a a...a./a
+a...a././. a...a.
+a...a./.// a...a.
+a...a.//aa a...a./aa
+a...a.//a. a...a./a.
+a...a.//a/ a...a./a
+a...a.//.a a...a./.a
+a...a.//.. .
+a...a.//./ a...a.
+a...a.///a a...a./a
+a...a.///. a...a.
+a...a.//// a...a.
+a...a/aaaa a...a/aaaa
+a...a/aaa. a...a/aaa.
+a...a/aaa/ a...a/aaa
+a...a/aa.a a...a/aa.a
+a...a/aa.. a...a/aa..
+a...a/aa./ a...a/aa.
+a...a/aa/a a...a/aa/a
+a...a/aa/. a...a/aa
+a...a/aa// a...a/aa
+a...a/a.aa a...a/a.aa
+a...a/a.a. a...a/a.a.
+a...a/a.a/ a...a/a.a
+a...a/a..a a...a/a..a
+a...a/a... a...a/a...
+a...a/a../ a...a/a..
+a...a/a./a a...a/a./a
+a...a/a./. a...a/a.
+a...a/a.// a...a/a.
+a...a/a/aa a...a/a/aa
+a...a/a/a. a...a/a/a.
+a...a/a/a/ a...a/a/a
+a...a/a/.a a...a/a/.a
+a...a/a/.. a...a
+a...a/a/./ a...a/a
+a...a/a//a a...a/a/a
+a...a/a//. a...a/a
+a...a/a/// a...a/a
+a...a/.aaa a...a/.aaa
+a...a/.aa. a...a/.aa.
+a...a/.aa/ a...a/.aa
+a...a/.a.a a...a/.a.a
+a...a/.a.. a...a/.a..
+a...a/.a./ a...a/.a.
+a...a/.a/a a...a/.a/a
+a...a/.a/. a...a/.a
+a...a/.a// a...a/.a
+a...a/..aa a...a/..aa
+a...a/..a. a...a/..a.
+a...a/..a/ a...a/..a
+a...a/...a a...a/...a
+a...a/.... a...a/....
+a...a/.../ a...a/...
+a...a/../a a
+a...a/../. .
+a...a/..// .
+a...a/./aa a...a/aa
+a...a/./a. a...a/a.
+a...a/./a/ a...a/a
+a...a/./.a a...a/.a
+a...a/./.. .
+a...a/././ a...a
+a...a/.//a a...a/a
+a...a/.//. a...a
+a...a/./// a...a
+a...a//aaa a...a/aaa
+a...a//aa. a...a/aa.
+a...a//aa/ a...a/aa
+a...a//a.a a...a/a.a
+a...a//a.. a...a/a..
+a...a//a./ a...a/a.
+a...a//a/a a...a/a/a
+a...a//a/. a...a/a
+a...a//a// a...a/a
+a...a//.aa a...a/.aa
+a...a//.a. a...a/.a.
+a...a//.a/ a...a/.a
+a...a//..a a...a/..a
+a...a//... a...a/...
+a...a//../ .
+a...a//./a a...a/a
+a...a//./. a...a
+a...a//.// a...a
+a...a///aa a...a/aa
+a...a///a. a...a/a.
+a...a///a/ a...a/a
+a...a///.a a...a/.a
+a...a///.. .
+a...a///./ a...a
+a...a////a a...a/a
+a...a////. a...a
+a...a///// a...a
+a....aaaaa a....aaaaa
+a....aaaa. a....aaaa.
+a....aaaa/ a....aaaa
+a....aaa.a a....aaa.a
+a....aaa.. a....aaa..
+a....aaa./ a....aaa.
+a....aaa/a a....aaa/a
+a....aaa/. a....aaa
+a....aaa// a....aaa
+a....aa.aa a....aa.aa
+a....aa.a. a....aa.a.
+a....aa.a/ a....aa.a
+a....aa..a a....aa..a
+a....aa... a....aa...
+a....aa../ a....aa..
+a....aa./a a....aa./a
+a....aa./. a....aa.
+a....aa.// a....aa.
+a....aa/aa a....aa/aa
+a....aa/a. a....aa/a.
+a....aa/a/ a....aa/a
+a....aa/.a a....aa/.a
+a....aa/.. .
+a....aa/./ a....aa
+a....aa//a a....aa/a
+a....aa//. a....aa
+a....aa/// a....aa
+a....a.aaa a....a.aaa
+a....a.aa. a....a.aa.
+a....a.aa/ a....a.aa
+a....a.a.a a....a.a.a
+a....a.a.. a....a.a..
+a....a.a./ a....a.a.
+a....a.a/a a....a.a/a
+a....a.a/. a....a.a
+a....a.a// a....a.a
+a....a..aa a....a..aa
+a....a..a. a....a..a.
+a....a..a/ a....a..a
+a....a...a a....a...a
+a....a.... a....a....
+a....a.../ a....a...
+a....a../a a....a../a
+a....a../. a....a..
+a....a..// a....a..
+a....a./aa a....a./aa
+a....a./a. a....a./a.
+a....a./a/ a....a./a
+a....a./.a a....a./.a
+a....a./.. .
+a....a././ a....a.
+a....a.//a a....a./a
+a....a.//. a....a.
+a....a./// a....a.
+a....a/aaa a....a/aaa
+a....a/aa. a....a/aa.
+a....a/aa/ a....a/aa
+a....a/a.a a....a/a.a
+a....a/a.. a....a/a..
+a....a/a./ a....a/a.
+a....a/a/a a....a/a/a
+a....a/a/. a....a/a
+a....a/a// a....a/a
+a....a/.aa a....a/.aa
+a....a/.a. a....a/.a.
+a....a/.a/ a....a/.a
+a....a/..a a....a/..a
+a....a/... a....a/...
+a....a/../ .
+a....a/./a a....a/a
+a....a/./. a....a
+a....a/.// a....a
+a....a//aa a....a/aa
+a....a//a. a....a/a.
+a....a//a/ a....a/a
+a....a//.a a....a/.a
+a....a//.. .
+a....a//./ a....a
+a....a///a a....a/a
+a....a///. a....a
+a....a//// a....a
+a.....aaaa a.....aaaa
+a.....aaa. a.....aaa.
+a.....aaa/ a.....aaa
+a.....aa.a a.....aa.a
+a.....aa.. a.....aa..
+a.....aa./ a.....aa.
+a.....aa/a a.....aa/a
+a.....aa/. a.....aa
+a.....aa// a.....aa
+a.....a.aa a.....a.aa
+a.....a.a. a.....a.a.
+a.....a.a/ a.....a.a
+a.....a..a a.....a..a
+a.....a... a.....a...
+a.....a../ a.....a..
+a.....a./a a.....a./a
+a.....a./. a.....a.
+a.....a.// a.....a.
+a.....a/aa a.....a/aa
+a.....a/a. a.....a/a.
+a.....a/a/ a.....a/a
+a.....a/.a a.....a/.a
+a.....a/.. .
+a.....a/./ a.....a
+a.....a//a a.....a/a
+a.....a//. a.....a
+a.....a/// a.....a
+a......aaa a......aaa
+a......aa. a......aa.
+a......aa/ a......aa
+a......a.a a......a.a
+a......a.. a......a..
+a......a./ a......a.
+a......a/a a......a/a
+a......a/. a......a
+a......a// a......a
+a.......aa a.......aa
+a.......a. a.......a.
+a.......a/ a.......a
+a........a a........a
+a......... a.........
+a......../ a........
+a......./a a......./a
+a......./. a.......
+a.......// a.......
+a....../aa a....../aa
+a....../a. a....../a.
+a....../a/ a....../a
+a....../.a a....../.a
+a....../.. .
+a.....././ a......
+a......//a a....../a
+a......//. a......
+a....../// a......
+a...../aaa a...../aaa
+a...../aa. a...../aa.
+a...../aa/ a...../aa
+a...../a.a a...../a.a
+a...../a.. a...../a..
+a...../a./ a...../a.
+a...../a/a a...../a/a
+a...../a/. a...../a
+a...../a// a...../a
+a...../.aa a...../.aa
+a...../.a. a...../.a.
+a...../.a/ a...../.a
+a...../..a a...../..a
+a...../... a...../...
+a...../../ .
+a....././a a...../a
+a....././. a.....
+a...../.// a.....
+a.....//aa a...../aa
+a.....//a. a...../a.
+a.....//a/ a...../a
+a.....//.a a...../.a
+a.....//.. .
+a.....//./ a.....
+a.....///a a...../a
+a.....///. a.....
+a.....//// a.....
+a..../aaaa a..../aaaa
+a..../aaa. a..../aaa.
+a..../aaa/ a..../aaa
+a..../aa.a a..../aa.a
+a..../aa.. a..../aa..
+a..../aa./ a..../aa.
+a..../aa/a a..../aa/a
+a..../aa/. a..../aa
+a..../aa// a..../aa
+a..../a.aa a..../a.aa
+a..../a.a. a..../a.a.
+a..../a.a/ a..../a.a
+a..../a..a a..../a..a
+a..../a... a..../a...
+a..../a../ a..../a..
+a..../a./a a..../a./a
+a..../a./. a..../a.
+a..../a.// a..../a.
+a..../a/aa a..../a/aa
+a..../a/a. a..../a/a.
+a..../a/a/ a..../a/a
+a..../a/.a a..../a/.a
+a..../a/.. a....
+a..../a/./ a..../a
+a..../a//a a..../a/a
+a..../a//. a..../a
+a..../a/// a..../a
+a..../.aaa a..../.aaa
+a..../.aa. a..../.aa.
+a..../.aa/ a..../.aa
+a..../.a.a a..../.a.a
+a..../.a.. a..../.a..
+a..../.a./ a..../.a.
+a..../.a/a a..../.a/a
+a..../.a/. a..../.a
+a..../.a// a..../.a
+a..../..aa a..../..aa
+a..../..a. a..../..a.
+a..../..a/ a..../..a
+a..../...a a..../...a
+a..../.... a..../....
+a..../.../ a..../...
+a..../../a a
+a..../../. .
+a..../..// .
+a...././aa a..../aa
+a...././a. a..../a.
+a...././a/ a..../a
+a...././.a a..../.a
+a...././.. .
+a..../././ a....
+a...././/a a..../a
+a...././/. a....
+a...././// a....
+a....//aaa a..../aaa
+a....//aa. a..../aa.
+a....//aa/ a..../aa
+a....//a.a a..../a.a
+a....//a.. a..../a..
+a....//a./ a..../a.
+a....//a/a a..../a/a
+a....//a/. a..../a
+a....//a// a..../a
+a....//.aa a..../.aa
+a....//.a. a..../.a.
+a....//.a/ a..../.a
+a....//..a a..../..a
+a....//... a..../...
+a....//../ .
+a....//./a a..../a
+a....//./. a....
+a....//.// a....
+a....///aa a..../aa
+a....///a. a..../a.
+a....///a/ a..../a
+a....///.a a..../.a
+a....///.. .
+a....///./ a....
+a....////a a..../a
+a....////. a....
+a....///// a....
+a.../aaaaa a.../aaaaa
+a.../aaaa. a.../aaaa.
+a.../aaaa/ a.../aaaa
+a.../aaa.a a.../aaa.a
+a.../aaa.. a.../aaa..
+a.../aaa./ a.../aaa.
+a.../aaa/a a.../aaa/a
+a.../aaa/. a.../aaa
+a.../aaa// a.../aaa
+a.../aa.aa a.../aa.aa
+a.../aa.a. a.../aa.a.
+a.../aa.a/ a.../aa.a
+a.../aa..a a.../aa..a
+a.../aa... a.../aa...
+a.../aa../ a.../aa..
+a.../aa./a a.../aa./a
+a.../aa./. a.../aa.
+a.../aa.// a.../aa.
+a.../aa/aa a.../aa/aa
+a.../aa/a. a.../aa/a.
+a.../aa/a/ a.../aa/a
+a.../aa/.a a.../aa/.a
+a.../aa/.. a...
+a.../aa/./ a.../aa
+a.../aa//a a.../aa/a
+a.../aa//. a.../aa
+a.../aa/// a.../aa
+a.../a.aaa a.../a.aaa
+a.../a.aa. a.../a.aa.
+a.../a.aa/ a.../a.aa
+a.../a.a.a a.../a.a.a
+a.../a.a.. a.../a.a..
+a.../a.a./ a.../a.a.
+a.../a.a/a a.../a.a/a
+a.../a.a/. a.../a.a
+a.../a.a// a.../a.a
+a.../a..aa a.../a..aa
+a.../a..a. a.../a..a.
+a.../a..a/ a.../a..a
+a.../a...a a.../a...a
+a.../a.... a.../a....
+a.../a.../ a.../a...
+a.../a../a a.../a../a
+a.../a../. a.../a..
+a.../a..// a.../a..
+a.../a./aa a.../a./aa
+a.../a./a. a.../a./a.
+a.../a./a/ a.../a./a
+a.../a./.a a.../a./.a
+a.../a./.. a...
+a.../a././ a.../a.
+a.../a.//a a.../a./a
+a.../a.//. a.../a.
+a.../a./// a.../a.
+a.../a/aaa a.../a/aaa
+a.../a/aa. a.../a/aa.
+a.../a/aa/ a.../a/aa
+a.../a/a.a a.../a/a.a
+a.../a/a.. a.../a/a..
+a.../a/a./ a.../a/a.
+a.../a/a/a a.../a/a/a
+a.../a/a/. a.../a/a
+a.../a/a// a.../a/a
+a.../a/.aa a.../a/.aa
+a.../a/.a. a.../a/.a.
+a.../a/.a/ a.../a/.a
+a.../a/..a a.../a/..a
+a.../a/... a.../a/...
+a.../a/../ a...
+a.../a/./a a.../a/a
+a.../a/./. a.../a
+a.../a/.// a.../a
+a.../a//aa a.../a/aa
+a.../a//a. a.../a/a.
+a.../a//a/ a.../a/a
+a.../a//.a a.../a/.a
+a.../a//.. a...
+a.../a//./ a.../a
+a.../a///a a.../a/a
+a.../a///. a.../a
+a.../a//// a.../a
+a.../.aaaa a.../.aaaa
+a.../.aaa. a.../.aaa.
+a.../.aaa/ a.../.aaa
+a.../.aa.a a.../.aa.a
+a.../.aa.. a.../.aa..
+a.../.aa./ a.../.aa.
+a.../.aa/a a.../.aa/a
+a.../.aa/. a.../.aa
+a.../.aa// a.../.aa
+a.../.a.aa a.../.a.aa
+a.../.a.a. a.../.a.a.
+a.../.a.a/ a.../.a.a
+a.../.a..a a.../.a..a
+a.../.a... a.../.a...
+a.../.a../ a.../.a..
+a.../.a./a a.../.a./a
+a.../.a./. a.../.a.
+a.../.a.// a.../.a.
+a.../.a/aa a.../.a/aa
+a.../.a/a. a.../.a/a.
+a.../.a/a/ a.../.a/a
+a.../.a/.a a.../.a/.a
+a.../.a/.. a...
+a.../.a/./ a.../.a
+a.../.a//a a.../.a/a
+a.../.a//. a.../.a
+a.../.a/// a.../.a
+a.../..aaa a.../..aaa
+a.../..aa. a.../..aa.
+a.../..aa/ a.../..aa
+a.../..a.a a.../..a.a
+a.../..a.. a.../..a..
+a.../..a./ a.../..a.
+a.../..a/a a.../..a/a
+a.../..a/. a.../..a
+a.../..a// a.../..a
+a.../...aa a.../...aa
+a.../...a. a.../...a.
+a.../...a/ a.../...a
+a.../....a a.../....a
+a.../..... a.../.....
+a.../..../ a.../....
+a.../.../a a.../.../a
+a.../.../. a.../...
+a.../...// a.../...
+a.../../aa aa
+a.../../a. a.
+a.../../a/ a
+a.../../.a .a
+a.../../.. ..
+a.../.././ .
+a.../..//a a
+a.../..//. .
+a.../../// .
+a..././aaa a.../aaa
+a..././aa. a.../aa.
+a..././aa/ a.../aa
+a..././a.a a.../a.a
+a..././a.. a.../a..
+a..././a./ a.../a.
+a..././a/a a.../a/a
+a..././a/. a.../a
+a..././a// a.../a
+a..././.aa a.../.aa
+a..././.a. a.../.a.
+a..././.a/ a.../.a
+a..././..a a.../..a
+a..././... a.../...
+a..././../ .
+a.../././a a.../a
+a.../././. a...
+a..././.// a...
+a..././/aa a.../aa
+a..././/a. a.../a.
+a..././/a/ a.../a
+a..././/.a a.../.a
+a..././/.. .
+a..././/./ a...
+a..././//a a.../a
+a..././//. a...
+a..././/// a...
+a...//aaaa a.../aaaa
+a...//aaa. a.../aaa.
+a...//aaa/ a.../aaa
+a...//aa.a a.../aa.a
+a...//aa.. a.../aa..
+a...//aa./ a.../aa.
+a...//aa/a a.../aa/a
+a...//aa/. a.../aa
+a...//aa// a.../aa
+a...//a.aa a.../a.aa
+a...//a.a. a.../a.a.
+a...//a.a/ a.../a.a
+a...//a..a a.../a..a
+a...//a... a.../a...
+a...//a../ a.../a..
+a...//a./a a.../a./a
+a...//a./. a.../a.
+a...//a.// a.../a.
+a...//a/aa a.../a/aa
+a...//a/a. a.../a/a.
+a...//a/a/ a.../a/a
+a...//a/.a a.../a/.a
+a...//a/.. a...
+a...//a/./ a.../a
+a...//a//a a.../a/a
+a...//a//. a.../a
+a...//a/// a.../a
+a...//.aaa a.../.aaa
+a...//.aa. a.../.aa.
+a...//.aa/ a.../.aa
+a...//.a.a a.../.a.a
+a...//.a.. a.../.a..
+a...//.a./ a.../.a.
+a...//.a/a a.../.a/a
+a...//.a/. a.../.a
+a...//.a// a.../.a
+a...//..aa a.../..aa
+a...//..a. a.../..a.
+a...//..a/ a.../..a
+a...//...a a.../...a
+a...//.... a.../....
+a...//.../ a.../...
+a...//../a a
+a...//../. .
+a...//..// .
+a...//./aa a.../aa
+a...//./a. a.../a.
+a...//./a/ a.../a
+a...//./.a a.../.a
+a...//./.. .
+a...//././ a...
+a...//.//a a.../a
+a...//.//. a...
+a...//./// a...
+a...///aaa a.../aaa
+a...///aa. a.../aa.
+a...///aa/ a.../aa
+a...///a.a a.../a.a
+a...///a.. a.../a..
+a...///a./ a.../a.
+a...///a/a a.../a/a
+a...///a/. a.../a
+a...///a// a.../a
+a...///.aa a.../.aa
+a...///.a. a.../.a.
+a...///.a/ a.../.a
+a...///..a a.../..a
+a...///... a.../...
+a...///../ .
+a...///./a a.../a
+a...///./. a...
+a...///.// a...
+a...////aa a.../aa
+a...////a. a.../a.
+a...////a/ a.../a
+a...////.a a.../.a
+a...////.. .
+a...////./ a...
+a.../////a a.../a
+a.../////. a...
+a...////// a...
+a../aaaaaa a../aaaaaa
+a../aaaaa. a../aaaaa.
+a../aaaaa/ a../aaaaa
+a../aaaa.a a../aaaa.a
+a../aaaa.. a../aaaa..
+a../aaaa./ a../aaaa.
+a../aaaa/a a../aaaa/a
+a../aaaa/. a../aaaa
+a../aaaa// a../aaaa
+a../aaa.aa a../aaa.aa
+a../aaa.a. a../aaa.a.
+a../aaa.a/ a../aaa.a
+a../aaa..a a../aaa..a
+a../aaa... a../aaa...
+a../aaa../ a../aaa..
+a../aaa./a a../aaa./a
+a../aaa./. a../aaa.
+a../aaa.// a../aaa.
+a../aaa/aa a../aaa/aa
+a../aaa/a. a../aaa/a.
+a../aaa/a/ a../aaa/a
+a../aaa/.a a../aaa/.a
+a../aaa/.. a..
+a../aaa/./ a../aaa
+a../aaa//a a../aaa/a
+a../aaa//. a../aaa
+a../aaa/// a../aaa
+a../aa.aaa a../aa.aaa
+a../aa.aa. a../aa.aa.
+a../aa.aa/ a../aa.aa
+a../aa.a.a a../aa.a.a
+a../aa.a.. a../aa.a..
+a../aa.a./ a../aa.a.
+a../aa.a/a a../aa.a/a
+a../aa.a/. a../aa.a
+a../aa.a// a../aa.a
+a../aa..aa a../aa..aa
+a../aa..a. a../aa..a.
+a../aa..a/ a../aa..a
+a../aa...a a../aa...a
+a../aa.... a../aa....
+a../aa.../ a../aa...
+a../aa../a a../aa../a
+a../aa../. a../aa..
+a../aa..// a../aa..
+a../aa./aa a../aa./aa
+a../aa./a. a../aa./a.
+a../aa./a/ a../aa./a
+a../aa./.a a../aa./.a
+a../aa./.. a..
+a../aa././ a../aa.
+a../aa.//a a../aa./a
+a../aa.//. a../aa.
+a../aa./// a../aa.
+a../aa/aaa a../aa/aaa
+a../aa/aa. a../aa/aa.
+a../aa/aa/ a../aa/aa
+a../aa/a.a a../aa/a.a
+a../aa/a.. a../aa/a..
+a../aa/a./ a../aa/a.
+a../aa/a/a a../aa/a/a
+a../aa/a/. a../aa/a
+a../aa/a// a../aa/a
+a../aa/.aa a../aa/.aa
+a../aa/.a. a../aa/.a.
+a../aa/.a/ a../aa/.a
+a../aa/..a a../aa/..a
+a../aa/... a../aa/...
+a../aa/../ a..
+a../aa/./a a../aa/a
+a../aa/./. a../aa
+a../aa/.// a../aa
+a../aa//aa a../aa/aa
+a../aa//a. a../aa/a.
+a../aa//a/ a../aa/a
+a../aa//.a a../aa/.a
+a../aa//.. a..
+a../aa//./ a../aa
+a../aa///a a../aa/a
+a../aa///. a../aa
+a../aa//// a../aa
+a../a.aaaa a../a.aaaa
+a../a.aaa. a../a.aaa.
+a../a.aaa/ a../a.aaa
+a../a.aa.a a../a.aa.a
+a../a.aa.. a../a.aa..
+a../a.aa./ a../a.aa.
+a../a.aa/a a../a.aa/a
+a../a.aa/. a../a.aa
+a../a.aa// a../a.aa
+a../a.a.aa a../a.a.aa
+a../a.a.a. a../a.a.a.
+a../a.a.a/ a../a.a.a
+a../a.a..a a../a.a..a
+a../a.a... a../a.a...
+a../a.a../ a../a.a..
+a../a.a./a a../a.a./a
+a../a.a./. a../a.a.
+a../a.a.// a../a.a.
+a../a.a/aa a../a.a/aa
+a../a.a/a. a../a.a/a.
+a../a.a/a/ a../a.a/a
+a../a.a/.a a../a.a/.a
+a../a.a/.. a..
+a../a.a/./ a../a.a
+a../a.a//a a../a.a/a
+a../a.a//. a../a.a
+a../a.a/// a../a.a
+a../a..aaa a../a..aaa
+a../a..aa. a../a..aa.
+a../a..aa/ a../a..aa
+a../a..a.a a../a..a.a
+a../a..a.. a../a..a..
+a../a..a./ a../a..a.
+a../a..a/a a../a..a/a
+a../a..a/. a../a..a
+a../a..a// a../a..a
+a../a...aa a../a...aa
+a../a...a. a../a...a.
+a../a...a/ a../a...a
+a../a....a a../a....a
+a../a..... a../a.....
+a../a..../ a../a....
+a../a.../a a../a.../a
+a../a.../. a../a...
+a../a...// a../a...
+a../a../aa a../a../aa
+a../a../a. a../a../a.
+a../a../a/ a../a../a
+a../a../.a a../a../.a
+a../a../.. a..
+a../a.././ a../a..
+a../a..//a a../a../a
+a../a..//. a../a..
+a../a../// a../a..
+a../a./aaa a../a./aaa
+a../a./aa. a../a./aa.
+a../a./aa/ a../a./aa
+a../a./a.a a../a./a.a
+a../a./a.. a../a./a..
+a../a./a./ a../a./a.
+a../a./a/a a../a./a/a
+a../a./a/. a../a./a
+a../a./a// a../a./a
+a../a./.aa a../a./.aa
+a../a./.a. a../a./.a.
+a../a./.a/ a../a./.a
+a../a./..a a../a./..a
+a../a./... a../a./...
+a../a./../ a..
+a../a././a a../a./a
+a../a././. a../a.
+a../a./.// a../a.
+a../a.//aa a../a./aa
+a../a.//a. a../a./a.
+a../a.//a/ a../a./a
+a../a.//.a a../a./.a
+a../a.//.. a..
+a../a.//./ a../a.
+a../a.///a a../a./a
+a../a.///. a../a.
+a../a.//// a../a.
+a../a/aaaa a../a/aaaa
+a../a/aaa. a../a/aaa.
+a../a/aaa/ a../a/aaa
+a../a/aa.a a../a/aa.a
+a../a/aa.. a../a/aa..
+a../a/aa./ a../a/aa.
+a../a/aa/a a../a/aa/a
+a../a/aa/. a../a/aa
+a../a/aa// a../a/aa
+a../a/a.aa a../a/a.aa
+a../a/a.a. a../a/a.a.
+a../a/a.a/ a../a/a.a
+a../a/a..a a../a/a..a
+a../a/a... a../a/a...
+a../a/a../ a../a/a..
+a../a/a./a a../a/a./a
+a../a/a./. a../a/a.
+a../a/a.// a../a/a.
+a../a/a/aa a../a/a/aa
+a../a/a/a. a../a/a/a.
+a../a/a/a/ a../a/a/a
+a../a/a/.a a../a/a/.a
+a../a/a/.. a../a
+a../a/a/./ a../a/a
+a../a/a//a a../a/a/a
+a../a/a//. a../a/a
+a../a/a/// a../a/a
+a../a/.aaa a../a/.aaa
+a../a/.aa. a../a/.aa.
+a../a/.aa/ a../a/.aa
+a../a/.a.a a../a/.a.a
+a../a/.a.. a../a/.a..
+a../a/.a./ a../a/.a.
+a../a/.a/a a../a/.a/a
+a../a/.a/. a../a/.a
+a../a/.a// a../a/.a
+a../a/..aa a../a/..aa
+a../a/..a. a../a/..a.
+a../a/..a/ a../a/..a
+a../a/...a a../a/...a
+a../a/.... a../a/....
+a../a/.../ a../a/...
+a../a/../a a../a
+a../a/../. a..
+a../a/..// a..
+a../a/./aa a../a/aa
+a../a/./a. a../a/a.
+a../a/./a/ a../a/a
+a../a/./.a a../a/.a
+a../a/./.. a..
+a../a/././ a../a
+a../a/.//a a../a/a
+a../a/.//. a../a
+a../a/./// a../a
+a../a//aaa a../a/aaa
+a../a//aa. a../a/aa.
+a../a//aa/ a../a/aa
+a../a//a.a a../a/a.a
+a../a//a.. a../a/a..
+a../a//a./ a../a/a.
+a../a//a/a a../a/a/a
+a../a//a/. a../a/a
+a../a//a// a../a/a
+a../a//.aa a../a/.aa
+a../a//.a. a../a/.a.
+a../a//.a/ a../a/.a
+a../a//..a a../a/..a
+a../a//... a../a/...
+a../a//../ a..
+a../a//./a a../a/a
+a../a//./. a../a
+a../a//.// a../a
+a../a///aa a../a/aa
+a../a///a. a../a/a.
+a../a///a/ a../a/a
+a../a///.a a../a/.a
+a../a///.. a..
+a../a///./ a../a
+a../a////a a../a/a
+a../a////. a../a
+a../a///// a../a
+a../.aaaaa a../.aaaaa
+a../.aaaa. a../.aaaa.
+a../.aaaa/ a../.aaaa
+a../.aaa.a a../.aaa.a
+a../.aaa.. a../.aaa..
+a../.aaa./ a../.aaa.
+a../.aaa/a a../.aaa/a
+a../.aaa/. a../.aaa
+a../.aaa// a../.aaa
+a../.aa.aa a../.aa.aa
+a../.aa.a. a../.aa.a.
+a../.aa.a/ a../.aa.a
+a../.aa..a a../.aa..a
+a../.aa... a../.aa...
+a../.aa../ a../.aa..
+a../.aa./a a../.aa./a
+a../.aa./. a../.aa.
+a../.aa.// a../.aa.
+a../.aa/aa a../.aa/aa
+a../.aa/a. a../.aa/a.
+a../.aa/a/ a../.aa/a
+a../.aa/.a a../.aa/.a
+a../.aa/.. a..
+a../.aa/./ a../.aa
+a../.aa//a a../.aa/a
+a../.aa//. a../.aa
+a../.aa/// a../.aa
+a../.a.aaa a../.a.aaa
+a../.a.aa. a../.a.aa.
+a../.a.aa/ a../.a.aa
+a../.a.a.a a../.a.a.a
+a../.a.a.. a../.a.a..
+a../.a.a./ a../.a.a.
+a../.a.a/a a../.a.a/a
+a../.a.a/. a../.a.a
+a../.a.a// a../.a.a
+a../.a..aa a../.a..aa
+a../.a..a. a../.a..a.
+a../.a..a/ a../.a..a
+a../.a...a a../.a...a
+a../.a.... a../.a....
+a../.a.../ a../.a...
+a../.a../a a../.a../a
+a../.a../. a../.a..
+a../.a..// a../.a..
+a../.a./aa a../.a./aa
+a../.a./a. a../.a./a.
+a../.a./a/ a../.a./a
+a../.a./.a a../.a./.a
+a../.a./.. a..
+a../.a././ a../.a.
+a../.a.//a a../.a./a
+a../.a.//. a../.a.
+a../.a./// a../.a.
+a../.a/aaa a../.a/aaa
+a../.a/aa. a../.a/aa.
+a../.a/aa/ a../.a/aa
+a../.a/a.a a../.a/a.a
+a../.a/a.. a../.a/a..
+a../.a/a./ a../.a/a.
+a../.a/a/a a../.a/a/a
+a../.a/a/. a../.a/a
+a../.a/a// a../.a/a
+a../.a/.aa a../.a/.aa
+a../.a/.a. a../.a/.a.
+a../.a/.a/ a../.a/.a
+a../.a/..a a../.a/..a
+a../.a/... a../.a/...
+a../.a/../ a..
+a../.a/./a a../.a/a
+a../.a/./. a../.a
+a../.a/.// a../.a
+a../.a//aa a../.a/aa
+a../.a//a. a../.a/a.
+a../.a//a/ a../.a/a
+a../.a//.a a../.a/.a
+a../.a//.. a..
+a../.a//./ a../.a
+a../.a///a a../.a/a
+a../.a///. a../.a
+a../.a//// a../.a
+a../..aaaa a../..aaaa
+a../..aaa. a../..aaa.
+a../..aaa/ a../..aaa
+a../..aa.a a../..aa.a
+a../..aa.. a../..aa..
+a../..aa./ a../..aa.
+a../..aa/a a../..aa/a
+a../..aa/. a../..aa
+a../..aa// a../..aa
+a../..a.aa a../..a.aa
+a../..a.a. a../..a.a.
+a../..a.a/ a../..a.a
+a../..a..a a../..a..a
+a../..a... a../..a...
+a../..a../ a../..a..
+a../..a./a a../..a./a
+a../..a./. a../..a.
+a../..a.// a../..a.
+a../..a/aa a../..a/aa
+a../..a/a. a../..a/a.
+a../..a/a/ a../..a/a
+a../..a/.a a../..a/.a
+a../..a/.. a..
+a../..a/./ a../..a
+a../..a//a a../..a/a
+a../..a//. a../..a
+a../..a/// a../..a
+a../...aaa a../...aaa
+a../...aa. a../...aa.
+a../...aa/ a../...aa
+a../...a.a a../...a.a
+a../...a.. a../...a..
+a../...a./ a../...a.
+a../...a/a a../...a/a
+a../...a/. a../...a
+a../...a// a../...a
+a../....aa a../....aa
+a../....a. a../....a.
+a../....a/ a../....a
+a../.....a a../.....a
+a../...... a../......
+a../...../ a../.....
+a../..../a a../..../a
+a../..../. a../....
+a../....// a../....
+a../.../aa a../.../aa
+a../.../a. a../.../a.
+a../.../a/ a../.../a
+a../.../.a a../.../.a
+a../.../.. a..
+a../..././ a../...
+a../...//a a../.../a
+a../...//. a../...
+a../.../// a../...
+a../../aaa aaa
+a../../aa. aa.
+a../../aa/ aa
+a../../a.a a.a
+a../../a.. a..
+a../../a./ a.
+a../../a/a a/a
+a../../a/. a
+a../../a// a
+a../../.aa .aa
+a../../.a. .a.
+a../../.a/ .a
+a../../..a ..a
+a../../... ...
+a../../../ ..
+a../.././a a
+a../.././. .
+a../../.// .
+a../..//aa aa
+a../..//a. a.
+a../..//a/ a
+a../..//.a .a
+a../..//.. ..
+a../..//./ .
+a../..///a a
+a../..///. .
+a../..//// .
+a.././aaaa a../aaaa
+a.././aaa. a../aaa.
+a.././aaa/ a../aaa
+a.././aa.a a../aa.a
+a.././aa.. a../aa..
+a.././aa./ a../aa.
+a.././aa/a a../aa/a
+a.././aa/. a../aa
+a.././aa// a../aa
+a.././a.aa a../a.aa
+a.././a.a. a../a.a.
+a.././a.a/ a../a.a
+a.././a..a a../a..a
+a.././a... a../a...
+a.././a../ a../a..
+a.././a./a a../a./a
+a.././a./. a../a.
+a.././a.// a../a.
+a.././a/aa a../a/aa
+a.././a/a. a../a/a.
+a.././a/a/ a../a/a
+a.././a/.a a../a/.a
+a.././a/.. a..
+a.././a/./ a../a
+a.././a//a a../a/a
+a.././a//. a../a
+a.././a/// a../a
+a.././.aaa a../.aaa
+a.././.aa. a../.aa.
+a.././.aa/ a../.aa
+a.././.a.a a../.a.a
+a.././.a.. a../.a..
+a.././.a./ a../.a.
+a.././.a/a a../.a/a
+a.././.a/. a../.a
+a.././.a// a../.a
+a.././..aa a../..aa
+a.././..a. a../..a.
+a.././..a/ a../..a
+a.././...a a../...a
+a.././.... a../....
+a.././.../ a../...
+a.././../a a
+a.././../. .
+a.././..// .
+a../././aa a../aa
+a../././a. a../a.
+a../././a/ a../a
+a../././.a a../.a
+a../././.. .
+a.././././ a..
+a../././/a a../a
+a../././/. a..
+a../././// a..
+a.././/aaa a../aaa
+a.././/aa. a../aa.
+a.././/aa/ a../aa
+a.././/a.a a../a.a
+a.././/a.. a../a..
+a.././/a./ a../a.
+a.././/a/a a../a/a
+a.././/a/. a../a
+a.././/a// a../a
+a.././/.aa a../.aa
+a.././/.a. a../.a.
+a.././/.a/ a../.a
+a.././/..a a../..a
+a.././/... a../...
+a.././/../ .
+a.././/./a a../a
+a.././/./. a..
+a.././/.// a..
+a.././//aa a../aa
+a.././//a. a../a.
+a.././//a/ a../a
+a.././//.a a../.a
+a.././//.. .
+a.././//./ a..
+a.././///a a../a
+a.././///. a..
+a.././//// a..
+a..//aaaaa a../aaaaa
+a..//aaaa. a../aaaa.
+a..//aaaa/ a../aaaa
+a..//aaa.a a../aaa.a
+a..//aaa.. a../aaa..
+a..//aaa./ a../aaa.
+a..//aaa/a a../aaa/a
+a..//aaa/. a../aaa
+a..//aaa// a../aaa
+a..//aa.aa a../aa.aa
+a..//aa.a. a../aa.a.
+a..//aa.a/ a../aa.a
+a..//aa..a a../aa..a
+a..//aa... a../aa...
+a..//aa../ a../aa..
+a..//aa./a a../aa./a
+a..//aa./. a../aa.
+a..//aa.// a../aa.
+a..//aa/aa a../aa/aa
+a..//aa/a. a../aa/a.
+a..//aa/a/ a../aa/a
+a..//aa/.a a../aa/.a
+a..//aa/.. a..
+a..//aa/./ a../aa
+a..//aa//a a../aa/a
+a..//aa//. a../aa
+a..//aa/// a../aa
+a..//a.aaa a../a.aaa
+a..//a.aa. a../a.aa.
+a..//a.aa/ a../a.aa
+a..//a.a.a a../a.a.a
+a..//a.a.. a../a.a..
+a..//a.a./ a../a.a.
+a..//a.a/a a../a.a/a
+a..//a.a/. a../a.a
+a..//a.a// a../a.a
+a..//a..aa a../a..aa
+a..//a..a. a../a..a.
+a..//a..a/ a../a..a
+a..//a...a a../a...a
+a..//a.... a../a....
+a..//a.../ a../a...
+a..//a../a a../a../a
+a..//a../. a../a..
+a..//a..// a../a..
+a..//a./aa a../a./aa
+a..//a./a. a../a./a.
+a..//a./a/ a../a./a
+a..//a./.a a../a./.a
+a..//a./.. a..
+a..//a././ a../a.
+a..//a.//a a../a./a
+a..//a.//. a../a.
+a..//a./// a../a.
+a..//a/aaa a../a/aaa
+a..//a/aa. a../a/aa.
+a..//a/aa/ a../a/aa
+a..//a/a.a a../a/a.a
+a..//a/a.. a../a/a..
+a..//a/a./ a../a/a.
+a..//a/a/a a../a/a/a
+a..//a/a/. a../a/a
+a..//a/a// a../a/a
+a..//a/.aa a../a/.aa
+a..//a/.a. a../a/.a.
+a..//a/.a/ a../a/.a
+a..//a/..a a../a/..a
+a..//a/... a../a/...
+a..//a/../ a..
+a..//a/./a a../a/a
+a..//a/./. a../a
+a..//a/.// a../a
+a..//a//aa a../a/aa
+a..//a//a. a../a/a.
+a..//a//a/ a../a/a
+a..//a//.a a../a/.a
+a..//a//.. a..
+a..//a//./ a../a
+a..//a///a a../a/a
+a..//a///. a../a
+a..//a//// a../a
+a..//.aaaa a../.aaaa
+a..//.aaa. a../.aaa.
+a..//.aaa/ a../.aaa
+a..//.aa.a a../.aa.a
+a..//.aa.. a../.aa..
+a..//.aa./ a../.aa.
+a..//.aa/a a../.aa/a
+a..//.aa/. a../.aa
+a..//.aa// a../.aa
+a..//.a.aa a../.a.aa
+a..//.a.a. a../.a.a.
+a..//.a.a/ a../.a.a
+a..//.a..a a../.a..a
+a..//.a... a../.a...
+a..//.a../ a../.a..
+a..//.a./a a../.a./a
+a..//.a./. a../.a.
+a..//.a.// a../.a.
+a..//.a/aa a../.a/aa
+a..//.a/a. a../.a/a.
+a..//.a/a/ a../.a/a
+a..//.a/.a a../.a/.a
+a..//.a/.. a..
+a..//.a/./ a../.a
+a..//.a//a a../.a/a
+a..//.a//. a../.a
+a..//.a/// a../.a
+a..//..aaa a../..aaa
+a..//..aa. a../..aa.
+a..//..aa/ a../..aa
+a..//..a.a a../..a.a
+a..//..a.. a../..a..
+a..//..a./ a../..a.
+a..//..a/a a../..a/a
+a..//..a/. a../..a
+a..//..a// a../..a
+a..//...aa a../...aa
+a..//...a. a../...a.
+a..//...a/ a../...a
+a..//....a a../....a
+a..//..... a../.....
+a..//..../ a../....
+a..//.../a a../.../a
+a..//.../. a../...
+a..//...// a../...
+a..//../aa aa
+a..//../a. a.
+a..//../a/ a
+a..//../.a .a
+a..//../.. ..
+a..//.././ .
+a..//..//a a
+a..//..//. .
+a..//../// .
+a..//./aaa a../aaa
+a..//./aa. a../aa.
+a..//./aa/ a../aa
+a..//./a.a a../a.a
+a..//./a.. a../a..
+a..//./a./ a../a.
+a..//./a/a a../a/a
+a..//./a/. a../a
+a..//./a// a../a
+a..//./.aa a../.aa
+a..//./.a. a../.a.
+a..//./.a/ a../.a
+a..//./..a a../..a
+a..//./... a../...
+a..//./../ .
+a..//././a a../a
+a..//././. a..
+a..//./.// a..
+a..//.//aa a../aa
+a..//.//a. a../a.
+a..//.//a/ a../a
+a..//.//.a a../.a
+a..//.//.. .
+a..//.//./ a..
+a..//.///a a../a
+a..//.///. a..
+a..//.//// a..
+a..///aaaa a../aaaa
+a..///aaa. a../aaa.
+a..///aaa/ a../aaa
+a..///aa.a a../aa.a
+a..///aa.. a../aa..
+a..///aa./ a../aa.
+a..///aa/a a../aa/a
+a..///aa/. a../aa
+a..///aa// a../aa
+a..///a.aa a../a.aa
+a..///a.a. a../a.a.
+a..///a.a/ a../a.a
+a..///a..a a../a..a
+a..///a... a../a...
+a..///a../ a../a..
+a..///a./a a../a./a
+a..///a./. a../a.
+a..///a.// a../a.
+a..///a/aa a../a/aa
+a..///a/a. a../a/a.
+a..///a/a/ a../a/a
+a..///a/.a a../a/.a
+a..///a/.. a..
+a..///a/./ a../a
+a..///a//a a../a/a
+a..///a//. a../a
+a..///a/// a../a
+a..///.aaa a../.aaa
+a..///.aa. a../.aa.
+a..///.aa/ a../.aa
+a..///.a.a a../.a.a
+a..///.a.. a../.a..
+a..///.a./ a../.a.
+a..///.a/a a../.a/a
+a..///.a/. a../.a
+a..///.a// a../.a
+a..///..aa a../..aa
+a..///..a. a../..a.
+a..///..a/ a../..a
+a..///...a a../...a
+a..///.... a../....
+a..///.../ a../...
+a..///../a a
+a..///../. .
+a..///..// .
+a..///./aa a../aa
+a..///./a. a../a.
+a..///./a/ a../a
+a..///./.a a../.a
+a..///./.. .
+a..///././ a..
+a..///.//a a../a
+a..///.//. a..
+a..///./// a..
+a..////aaa a../aaa
+a..////aa. a../aa.
+a..////aa/ a../aa
+a..////a.a a../a.a
+a..////a.. a../a..
+a..////a./ a../a.
+a..////a/a a../a/a
+a..////a/. a../a
+a..////a// a../a
+a..////.aa a../.aa
+a..////.a. a../.a.
+a..////.a/ a../.a
+a..////..a a../..a
+a..////... a../...
+a..////../ .
+a..////./a a../a
+a..////./. a..
+a..////.// a..
+a../////aa a../aa
+a../////a. a../a.
+a../////a/ a../a
+a../////.a a../.a
+a../////.. .
+a../////./ a..
+a..//////a a../a
+a..//////. a..
+a../////// a..
+a./aaaaaaa a./aaaaaaa
+a./aaaaaa. a./aaaaaa.
+a./aaaaaa/ a./aaaaaa
+a./aaaaa.a a./aaaaa.a
+a./aaaaa.. a./aaaaa..
+a./aaaaa./ a./aaaaa.
+a./aaaaa/a a./aaaaa/a
+a./aaaaa/. a./aaaaa
+a./aaaaa// a./aaaaa
+a./aaaa.aa a./aaaa.aa
+a./aaaa.a. a./aaaa.a.
+a./aaaa.a/ a./aaaa.a
+a./aaaa..a a./aaaa..a
+a./aaaa... a./aaaa...
+a./aaaa../ a./aaaa..
+a./aaaa./a a./aaaa./a
+a./aaaa./. a./aaaa.
+a./aaaa.// a./aaaa.
+a./aaaa/aa a./aaaa/aa
+a./aaaa/a. a./aaaa/a.
+a./aaaa/a/ a./aaaa/a
+a./aaaa/.a a./aaaa/.a
+a./aaaa/.. a.
+a./aaaa/./ a./aaaa
+a./aaaa//a a./aaaa/a
+a./aaaa//. a./aaaa
+a./aaaa/// a./aaaa
+a./aaa.aaa a./aaa.aaa
+a./aaa.aa. a./aaa.aa.
+a./aaa.aa/ a./aaa.aa
+a./aaa.a.a a./aaa.a.a
+a./aaa.a.. a./aaa.a..
+a./aaa.a./ a./aaa.a.
+a./aaa.a/a a./aaa.a/a
+a./aaa.a/. a./aaa.a
+a./aaa.a// a./aaa.a
+a./aaa..aa a./aaa..aa
+a./aaa..a. a./aaa..a.
+a./aaa..a/ a./aaa..a
+a./aaa...a a./aaa...a
+a./aaa.... a./aaa....
+a./aaa.../ a./aaa...
+a./aaa../a a./aaa../a
+a./aaa../. a./aaa..
+a./aaa..// a./aaa..
+a./aaa./aa a./aaa./aa
+a./aaa./a. a./aaa./a.
+a./aaa./a/ a./aaa./a
+a./aaa./.a a./aaa./.a
+a./aaa./.. a.
+a./aaa././ a./aaa.
+a./aaa.//a a./aaa./a
+a./aaa.//. a./aaa.
+a./aaa./// a./aaa.
+a./aaa/aaa a./aaa/aaa
+a./aaa/aa. a./aaa/aa.
+a./aaa/aa/ a./aaa/aa
+a./aaa/a.a a./aaa/a.a
+a./aaa/a.. a./aaa/a..
+a./aaa/a./ a./aaa/a.
+a./aaa/a/a a./aaa/a/a
+a./aaa/a/. a./aaa/a
+a./aaa/a// a./aaa/a
+a./aaa/.aa a./aaa/.aa
+a./aaa/.a. a./aaa/.a.
+a./aaa/.a/ a./aaa/.a
+a./aaa/..a a./aaa/..a
+a./aaa/... a./aaa/...
+a./aaa/../ a.
+a./aaa/./a a./aaa/a
+a./aaa/./. a./aaa
+a./aaa/.// a./aaa
+a./aaa//aa a./aaa/aa
+a./aaa//a. a./aaa/a.
+a./aaa//a/ a./aaa/a
+a./aaa//.a a./aaa/.a
+a./aaa//.. a.
+a./aaa//./ a./aaa
+a./aaa///a a./aaa/a
+a./aaa///. a./aaa
+a./aaa//// a./aaa
+a./aa.aaaa a./aa.aaaa
+a./aa.aaa. a./aa.aaa.
+a./aa.aaa/ a./aa.aaa
+a./aa.aa.a a./aa.aa.a
+a./aa.aa.. a./aa.aa..
+a./aa.aa./ a./aa.aa.
+a./aa.aa/a a./aa.aa/a
+a./aa.aa/. a./aa.aa
+a./aa.aa// a./aa.aa
+a./aa.a.aa a./aa.a.aa
+a./aa.a.a. a./aa.a.a.
+a./aa.a.a/ a./aa.a.a
+a./aa.a..a a./aa.a..a
+a./aa.a... a./aa.a...
+a./aa.a../ a./aa.a..
+a./aa.a./a a./aa.a./a
+a./aa.a./. a./aa.a.
+a./aa.a.// a./aa.a.
+a./aa.a/aa a./aa.a/aa
+a./aa.a/a. a./aa.a/a.
+a./aa.a/a/ a./aa.a/a
+a./aa.a/.a a./aa.a/.a
+a./aa.a/.. a.
+a./aa.a/./ a./aa.a
+a./aa.a//a a./aa.a/a
+a./aa.a//. a./aa.a
+a./aa.a/// a./aa.a
+a./aa..aaa a./aa..aaa
+a./aa..aa. a./aa..aa.
+a./aa..aa/ a./aa..aa
+a./aa..a.a a./aa..a.a
+a./aa..a.. a./aa..a..
+a./aa..a./ a./aa..a.
+a./aa..a/a a./aa..a/a
+a./aa..a/. a./aa..a
+a./aa..a// a./aa..a
+a./aa...aa a./aa...aa
+a./aa...a. a./aa...a.
+a./aa...a/ a./aa...a
+a./aa....a a./aa....a
+a./aa..... a./aa.....
+a./aa..../ a./aa....
+a./aa.../a a./aa.../a
+a./aa.../. a./aa...
+a./aa...// a./aa...
+a./aa../aa a./aa../aa
+a./aa../a. a./aa../a.
+a./aa../a/ a./aa../a
+a./aa../.a a./aa../.a
+a./aa../.. a.
+a./aa.././ a./aa..
+a./aa..//a a./aa../a
+a./aa..//. a./aa..
+a./aa../// a./aa..
+a./aa./aaa a./aa./aaa
+a./aa./aa. a./aa./aa.
+a./aa./aa/ a./aa./aa
+a./aa./a.a a./aa./a.a
+a./aa./a.. a./aa./a..
+a./aa./a./ a./aa./a.
+a./aa./a/a a./aa./a/a
+a./aa./a/. a./aa./a
+a./aa./a// a./aa./a
+a./aa./.aa a./aa./.aa
+a./aa./.a. a./aa./.a.
+a./aa./.a/ a./aa./.a
+a./aa./..a a./aa./..a
+a./aa./... a./aa./...
+a./aa./../ a.
+a./aa././a a./aa./a
+a./aa././. a./aa.
+a./aa./.// a./aa.
+a./aa.//aa a./aa./aa
+a./aa.//a. a./aa./a.
+a./aa.//a/ a./aa./a
+a./aa.//.a a./aa./.a
+a./aa.//.. a.
+a./aa.//./ a./aa.
+a./aa.///a a./aa./a
+a./aa.///. a./aa.
+a./aa.//// a./aa.
+a./aa/aaaa a./aa/aaaa
+a./aa/aaa. a./aa/aaa.
+a./aa/aaa/ a./aa/aaa
+a./aa/aa.a a./aa/aa.a
+a./aa/aa.. a./aa/aa..
+a./aa/aa./ a./aa/aa.
+a./aa/aa/a a./aa/aa/a
+a./aa/aa/. a./aa/aa
+a./aa/aa// a./aa/aa
+a./aa/a.aa a./aa/a.aa
+a./aa/a.a. a./aa/a.a.
+a./aa/a.a/ a./aa/a.a
+a./aa/a..a a./aa/a..a
+a./aa/a... a./aa/a...
+a./aa/a../ a./aa/a..
+a./aa/a./a a./aa/a./a
+a./aa/a./. a./aa/a.
+a./aa/a.// a./aa/a.
+a./aa/a/aa a./aa/a/aa
+a./aa/a/a. a./aa/a/a.
+a./aa/a/a/ a./aa/a/a
+a./aa/a/.a a./aa/a/.a
+a./aa/a/.. a./aa
+a./aa/a/./ a./aa/a
+a./aa/a//a a./aa/a/a
+a./aa/a//. a./aa/a
+a./aa/a/// a./aa/a
+a./aa/.aaa a./aa/.aaa
+a./aa/.aa. a./aa/.aa.
+a./aa/.aa/ a./aa/.aa
+a./aa/.a.a a./aa/.a.a
+a./aa/.a.. a./aa/.a..
+a./aa/.a./ a./aa/.a.
+a./aa/.a/a a./aa/.a/a
+a./aa/.a/. a./aa/.a
+a./aa/.a// a./aa/.a
+a./aa/..aa a./aa/..aa
+a./aa/..a. a./aa/..a.
+a./aa/..a/ a./aa/..a
+a./aa/...a a./aa/...a
+a./aa/.... a./aa/....
+a./aa/.../ a./aa/...
+a./aa/../a a./a
+a./aa/../. a.
+a./aa/..// a.
+a./aa/./aa a./aa/aa
+a./aa/./a. a./aa/a.
+a./aa/./a/ a./aa/a
+a./aa/./.a a./aa/.a
+a./aa/./.. a.
+a./aa/././ a./aa
+a./aa/.//a a./aa/a
+a./aa/.//. a./aa
+a./aa/./// a./aa
+a./aa//aaa a./aa/aaa
+a./aa//aa. a./aa/aa.
+a./aa//aa/ a./aa/aa
+a./aa//a.a a./aa/a.a
+a./aa//a.. a./aa/a..
+a./aa//a./ a./aa/a.
+a./aa//a/a a./aa/a/a
+a./aa//a/. a./aa/a
+a./aa//a// a./aa/a
+a./aa//.aa a./aa/.aa
+a./aa//.a. a./aa/.a.
+a./aa//.a/ a./aa/.a
+a./aa//..a a./aa/..a
+a./aa//... a./aa/...
+a./aa//../ a.
+a./aa//./a a./aa/a
+a./aa//./. a./aa
+a./aa//.// a./aa
+a./aa///aa a./aa/aa
+a./aa///a. a./aa/a.
+a./aa///a/ a./aa/a
+a./aa///.a a./aa/.a
+a./aa///.. a.
+a./aa///./ a./aa
+a./aa////a a./aa/a
+a./aa////. a./aa
+a./aa///// a./aa
+a./a.aaaaa a./a.aaaaa
+a./a.aaaa. a./a.aaaa.
+a./a.aaaa/ a./a.aaaa
+a./a.aaa.a a./a.aaa.a
+a./a.aaa.. a./a.aaa..
+a./a.aaa./ a./a.aaa.
+a./a.aaa/a a./a.aaa/a
+a./a.aaa/. a./a.aaa
+a./a.aaa// a./a.aaa
+a./a.aa.aa a./a.aa.aa
+a./a.aa.a. a./a.aa.a.
+a./a.aa.a/ a./a.aa.a
+a./a.aa..a a./a.aa..a
+a./a.aa... a./a.aa...
+a./a.aa../ a./a.aa..
+a./a.aa./a a./a.aa./a
+a./a.aa./. a./a.aa.
+a./a.aa.// a./a.aa.
+a./a.aa/aa a./a.aa/aa
+a./a.aa/a. a./a.aa/a.
+a./a.aa/a/ a./a.aa/a
+a./a.aa/.a a./a.aa/.a
+a./a.aa/.. a.
+a./a.aa/./ a./a.aa
+a./a.aa//a a./a.aa/a
+a./a.aa//. a./a.aa
+a./a.aa/// a./a.aa
+a./a.a.aaa a./a.a.aaa
+a./a.a.aa. a./a.a.aa.
+a./a.a.aa/ a./a.a.aa
+a./a.a.a.a a./a.a.a.a
+a./a.a.a.. a./a.a.a..
+a./a.a.a./ a./a.a.a.
+a./a.a.a/a a./a.a.a/a
+a./a.a.a/. a./a.a.a
+a./a.a.a// a./a.a.a
+a./a.a..aa a./a.a..aa
+a./a.a..a. a./a.a..a.
+a./a.a..a/ a./a.a..a
+a./a.a...a a./a.a...a
+a./a.a.... a./a.a....
+a./a.a.../ a./a.a...
+a./a.a../a a./a.a../a
+a./a.a../. a./a.a..
+a./a.a..// a./a.a..
+a./a.a./aa a./a.a./aa
+a./a.a./a. a./a.a./a.
+a./a.a./a/ a./a.a./a
+a./a.a./.a a./a.a./.a
+a./a.a./.. a.
+a./a.a././ a./a.a.
+a./a.a.//a a./a.a./a
+a./a.a.//. a./a.a.
+a./a.a./// a./a.a.
+a./a.a/aaa a./a.a/aaa
+a./a.a/aa. a./a.a/aa.
+a./a.a/aa/ a./a.a/aa
+a./a.a/a.a a./a.a/a.a
+a./a.a/a.. a./a.a/a..
+a./a.a/a./ a./a.a/a.
+a./a.a/a/a a./a.a/a/a
+a./a.a/a/. a./a.a/a
+a./a.a/a// a./a.a/a
+a./a.a/.aa a./a.a/.aa
+a./a.a/.a. a./a.a/.a.
+a./a.a/.a/ a./a.a/.a
+a./a.a/..a a./a.a/..a
+a./a.a/... a./a.a/...
+a./a.a/../ a.
+a./a.a/./a a./a.a/a
+a./a.a/./. a./a.a
+a./a.a/.// a./a.a
+a./a.a//aa a./a.a/aa
+a./a.a//a. a./a.a/a.
+a./a.a//a/ a./a.a/a
+a./a.a//.a a./a.a/.a
+a./a.a//.. a.
+a./a.a//./ a./a.a
+a./a.a///a a./a.a/a
+a./a.a///. a./a.a
+a./a.a//// a./a.a
+a./a..aaaa a./a..aaaa
+a./a..aaa. a./a..aaa.
+a./a..aaa/ a./a..aaa
+a./a..aa.a a./a..aa.a
+a./a..aa.. a./a..aa..
+a./a..aa./ a./a..aa.
+a./a..aa/a a./a..aa/a
+a./a..aa/. a./a..aa
+a./a..aa// a./a..aa
+a./a..a.aa a./a..a.aa
+a./a..a.a. a./a..a.a.
+a./a..a.a/ a./a..a.a
+a./a..a..a a./a..a..a
+a./a..a... a./a..a...
+a./a..a../ a./a..a..
+a./a..a./a a./a..a./a
+a./a..a./. a./a..a.
+a./a..a.// a./a..a.
+a./a..a/aa a./a..a/aa
+a./a..a/a. a./a..a/a.
+a./a..a/a/ a./a..a/a
+a./a..a/.a a./a..a/.a
+a./a..a/.. a.
+a./a..a/./ a./a..a
+a./a..a//a a./a..a/a
+a./a..a//. a./a..a
+a./a..a/// a./a..a
+a./a...aaa a./a...aaa
+a./a...aa. a./a...aa.
+a./a...aa/ a./a...aa
+a./a...a.a a./a...a.a
+a./a...a.. a./a...a..
+a./a...a./ a./a...a.
+a./a...a/a a./a...a/a
+a./a...a/. a./a...a
+a./a...a// a./a...a
+a./a....aa a./a....aa
+a./a....a. a./a....a.
+a./a....a/ a./a....a
+a./a.....a a./a.....a
+a./a...... a./a......
+a./a...../ a./a.....
+a./a..../a a./a..../a
+a./a..../. a./a....
+a./a....// a./a....
+a./a.../aa a./a.../aa
+a./a.../a. a./a.../a.
+a./a.../a/ a./a.../a
+a./a.../.a a./a.../.a
+a./a.../.. a.
+a./a..././ a./a...
+a./a...//a a./a.../a
+a./a...//. a./a...
+a./a.../// a./a...
+a./a../aaa a./a../aaa
+a./a../aa. a./a../aa.
+a./a../aa/ a./a../aa
+a./a../a.a a./a../a.a
+a./a../a.. a./a../a..
+a./a../a./ a./a../a.
+a./a../a/a a./a../a/a
+a./a../a/. a./a../a
+a./a../a// a./a../a
+a./a../.aa a./a../.aa
+a./a../.a. a./a../.a.
+a./a../.a/ a./a../.a
+a./a../..a a./a../..a
+a./a../... a./a../...
+a./a../../ a.
+a./a.././a a./a../a
+a./a.././. a./a..
+a./a../.// a./a..
+a./a..//aa a./a../aa
+a./a..//a. a./a../a.
+a./a..//a/ a./a../a
+a./a..//.a a./a../.a
+a./a..//.. a.
+a./a..//./ a./a..
+a./a..///a a./a../a
+a./a..///. a./a..
+a./a..//// a./a..
+a./a./aaaa a./a./aaaa
+a./a./aaa. a./a./aaa.
+a./a./aaa/ a./a./aaa
+a./a./aa.a a./a./aa.a
+a./a./aa.. a./a./aa..
+a./a./aa./ a./a./aa.
+a./a./aa/a a./a./aa/a
+a./a./aa/. a./a./aa
+a./a./aa// a./a./aa
+a./a./a.aa a./a./a.aa
+a./a./a.a. a./a./a.a.
+a./a./a.a/ a./a./a.a
+a./a./a..a a./a./a..a
+a./a./a... a./a./a...
+a./a./a../ a./a./a..
+a./a./a./a a./a./a./a
+a./a./a./. a./a./a.
+a./a./a.// a./a./a.
+a./a./a/aa a./a./a/aa
+a./a./a/a. a./a./a/a.
+a./a./a/a/ a./a./a/a
+a./a./a/.a a./a./a/.a
+a./a./a/.. a./a.
+a./a./a/./ a./a./a
+a./a./a//a a./a./a/a
+a./a./a//. a./a./a
+a./a./a/// a./a./a
+a./a./.aaa a./a./.aaa
+a./a./.aa. a./a./.aa.
+a./a./.aa/ a./a./.aa
+a./a./.a.a a./a./.a.a
+a./a./.a.. a./a./.a..
+a./a./.a./ a./a./.a.
+a./a./.a/a a./a./.a/a
+a./a./.a/. a./a./.a
+a./a./.a// a./a./.a
+a./a./..aa a./a./..aa
+a./a./..a. a./a./..a.
+a./a./..a/ a./a./..a
+a./a./...a a./a./...a
+a./a./.... a./a./....
+a./a./.../ a./a./...
+a./a./../a a./a
+a./a./../. a.
+a./a./..// a.
+a./a././aa a./a./aa
+a./a././a. a./a./a.
+a./a././a/ a./a./a
+a./a././.a a./a./.a
+a./a././.. a.
+a./a./././ a./a.
+a./a././/a a./a./a
+a./a././/. a./a.
+a./a././// a./a.
+a./a.//aaa a./a./aaa
+a./a.//aa. a./a./aa.
+a./a.//aa/ a./a./aa
+a./a.//a.a a./a./a.a
+a./a.//a.. a./a./a..
+a./a.//a./ a./a./a.
+a./a.//a/a a./a./a/a
+a./a.//a/. a./a./a
+a./a.//a// a./a./a
+a./a.//.aa a./a./.aa
+a./a.//.a. a./a./.a.
+a./a.//.a/ a./a./.a
+a./a.//..a a./a./..a
+a./a.//... a./a./...
+a./a.//../ a.
+a./a.//./a a./a./a
+a./a.//./. a./a.
+a./a.//.// a./a.
+a./a.///aa a./a./aa
+a./a.///a. a./a./a.
+a./a.///a/ a./a./a
+a./a.///.a a./a./.a
+a./a.///.. a.
+a./a.///./ a./a.
+a./a.////a a./a./a
+a./a.////. a./a.
+a./a.///// a./a.
+a./a/aaaaa a./a/aaaaa
+a./a/aaaa. a./a/aaaa.
+a./a/aaaa/ a./a/aaaa
+a./a/aaa.a a./a/aaa.a
+a./a/aaa.. a./a/aaa..
+a./a/aaa./ a./a/aaa.
+a./a/aaa/a a./a/aaa/a
+a./a/aaa/. a./a/aaa
+a./a/aaa// a./a/aaa
+a./a/aa.aa a./a/aa.aa
+a./a/aa.a. a./a/aa.a.
+a./a/aa.a/ a./a/aa.a
+a./a/aa..a a./a/aa..a
+a./a/aa... a./a/aa...
+a./a/aa../ a./a/aa..
+a./a/aa./a a./a/aa./a
+a./a/aa./. a./a/aa.
+a./a/aa.// a./a/aa.
+a./a/aa/aa a./a/aa/aa
+a./a/aa/a. a./a/aa/a.
+a./a/aa/a/ a./a/aa/a
+a./a/aa/.a a./a/aa/.a
+a./a/aa/.. a./a
+a./a/aa/./ a./a/aa
+a./a/aa//a a./a/aa/a
+a./a/aa//. a./a/aa
+a./a/aa/// a./a/aa
+a./a/a.aaa a./a/a.aaa
+a./a/a.aa. a./a/a.aa.
+a./a/a.aa/ a./a/a.aa
+a./a/a.a.a a./a/a.a.a
+a./a/a.a.. a./a/a.a..
+a./a/a.a./ a./a/a.a.
+a./a/a.a/a a./a/a.a/a
+a./a/a.a/. a./a/a.a
+a./a/a.a// a./a/a.a
+a./a/a..aa a./a/a..aa
+a./a/a..a. a./a/a..a.
+a./a/a..a/ a./a/a..a
+a./a/a...a a./a/a...a
+a./a/a.... a./a/a....
+a./a/a.../ a./a/a...
+a./a/a../a a./a/a../a
+a./a/a../. a./a/a..
+a./a/a..// a./a/a..
+a./a/a./aa a./a/a./aa
+a./a/a./a. a./a/a./a.
+a./a/a./a/ a./a/a./a
+a./a/a./.a a./a/a./.a
+a./a/a./.. a./a
+a./a/a././ a./a/a.
+a./a/a.//a a./a/a./a
+a./a/a.//. a./a/a.
+a./a/a./// a./a/a.
+a./a/a/aaa a./a/a/aaa
+a./a/a/aa. a./a/a/aa.
+a./a/a/aa/ a./a/a/aa
+a./a/a/a.a a./a/a/a.a
+a./a/a/a.. a./a/a/a..
+a./a/a/a./ a./a/a/a.
+a./a/a/a/a a./a/a/a/a
+a./a/a/a/. a./a/a/a
+a./a/a/a// a./a/a/a
+a./a/a/.aa a./a/a/.aa
+a./a/a/.a. a./a/a/.a.
+a./a/a/.a/ a./a/a/.a
+a./a/a/..a a./a/a/..a
+a./a/a/... a./a/a/...
+a./a/a/../ a./a
+a./a/a/./a a./a/a/a
+a./a/a/./. a./a/a
+a./a/a/.// a./a/a
+a./a/a//aa a./a/a/aa
+a./a/a//a. a./a/a/a.
+a./a/a//a/ a./a/a/a
+a./a/a//.a a./a/a/.a
+a./a/a//.. a./a
+a./a/a//./ a./a/a
+a./a/a///a a./a/a/a
+a./a/a///. a./a/a
+a./a/a//// a./a/a
+a./a/.aaaa a./a/.aaaa
+a./a/.aaa. a./a/.aaa.
+a./a/.aaa/ a./a/.aaa
+a./a/.aa.a a./a/.aa.a
+a./a/.aa.. a./a/.aa..
+a./a/.aa./ a./a/.aa.
+a./a/.aa/a a./a/.aa/a
+a./a/.aa/. a./a/.aa
+a./a/.aa// a./a/.aa
+a./a/.a.aa a./a/.a.aa
+a./a/.a.a. a./a/.a.a.
+a./a/.a.a/ a./a/.a.a
+a./a/.a..a a./a/.a..a
+a./a/.a... a./a/.a...
+a./a/.a../ a./a/.a..
+a./a/.a./a a./a/.a./a
+a./a/.a./. a./a/.a.
+a./a/.a.// a./a/.a.
+a./a/.a/aa a./a/.a/aa
+a./a/.a/a. a./a/.a/a.
+a./a/.a/a/ a./a/.a/a
+a./a/.a/.a a./a/.a/.a
+a./a/.a/.. a./a
+a./a/.a/./ a./a/.a
+a./a/.a//a a./a/.a/a
+a./a/.a//. a./a/.a
+a./a/.a/// a./a/.a
+a./a/..aaa a./a/..aaa
+a./a/..aa. a./a/..aa.
+a./a/..aa/ a./a/..aa
+a./a/..a.a a./a/..a.a
+a./a/..a.. a./a/..a..
+a./a/..a./ a./a/..a.
+a./a/..a/a a./a/..a/a
+a./a/..a/. a./a/..a
+a./a/..a// a./a/..a
+a./a/...aa a./a/...aa
+a./a/...a. a./a/...a.
+a./a/...a/ a./a/...a
+a./a/....a a./a/....a
+a./a/..... a./a/.....
+a./a/..../ a./a/....
+a./a/.../a a./a/.../a
+a./a/.../. a./a/...
+a./a/...// a./a/...
+a./a/../aa a./aa
+a./a/../a. a./a.
+a./a/../a/ a./a
+a./a/../.a a./.a
+a./a/../.. .
+a./a/.././ a.
+a./a/..//a a./a
+a./a/..//. a.
+a./a/../// a.
+a./a/./aaa a./a/aaa
+a./a/./aa. a./a/aa.
+a./a/./aa/ a./a/aa
+a./a/./a.a a./a/a.a
+a./a/./a.. a./a/a..
+a./a/./a./ a./a/a.
+a./a/./a/a a./a/a/a
+a./a/./a/. a./a/a
+a./a/./a// a./a/a
+a./a/./.aa a./a/.aa
+a./a/./.a. a./a/.a.
+a./a/./.a/ a./a/.a
+a./a/./..a a./a/..a
+a./a/./... a./a/...
+a./a/./../ a.
+a./a/././a a./a/a
+a./a/././. a./a
+a./a/./.// a./a
+a./a/.//aa a./a/aa
+a./a/.//a. a./a/a.
+a./a/.//a/ a./a/a
+a./a/.//.a a./a/.a
+a./a/.//.. a.
+a./a/.//./ a./a
+a./a/.///a a./a/a
+a./a/.///. a./a
+a./a/.//// a./a
+a./a//aaaa a./a/aaaa
+a./a//aaa. a./a/aaa.
+a./a//aaa/ a./a/aaa
+a./a//aa.a a./a/aa.a
+a./a//aa.. a./a/aa..
+a./a//aa./ a./a/aa.
+a./a//aa/a a./a/aa/a
+a./a//aa/. a./a/aa
+a./a//aa// a./a/aa
+a./a//a.aa a./a/a.aa
+a./a//a.a. a./a/a.a.
+a./a//a.a/ a./a/a.a
+a./a//a..a a./a/a..a
+a./a//a... a./a/a...
+a./a//a../ a./a/a..
+a./a//a./a a./a/a./a
+a./a//a./. a./a/a.
+a./a//a.// a./a/a.
+a./a//a/aa a./a/a/aa
+a./a//a/a. a./a/a/a.
+a./a//a/a/ a./a/a/a
+a./a//a/.a a./a/a/.a
+a./a//a/.. a./a
+a./a//a/./ a./a/a
+a./a//a//a a./a/a/a
+a./a//a//. a./a/a
+a./a//a/// a./a/a
+a./a//.aaa a./a/.aaa
+a./a//.aa. a./a/.aa.
+a./a//.aa/ a./a/.aa
+a./a//.a.a a./a/.a.a
+a./a//.a.. a./a/.a..
+a./a//.a./ a./a/.a.
+a./a//.a/a a./a/.a/a
+a./a//.a/. a./a/.a
+a./a//.a// a./a/.a
+a./a//..aa a./a/..aa
+a./a//..a. a./a/..a.
+a./a//..a/ a./a/..a
+a./a//...a a./a/...a
+a./a//.... a./a/....
+a./a//.../ a./a/...
+a./a//../a a./a
+a./a//../. a.
+a./a//..// a.
+a./a//./aa a./a/aa
+a./a//./a. a./a/a.
+a./a//./a/ a./a/a
+a./a//./.a a./a/.a
+a./a//./.. a.
+a./a//././ a./a
+a./a//.//a a./a/a
+a./a//.//. a./a
+a./a//./// a./a
+a./a///aaa a./a/aaa
+a./a///aa. a./a/aa.
+a./a///aa/ a./a/aa
+a./a///a.a a./a/a.a
+a./a///a.. a./a/a..
+a./a///a./ a./a/a.
+a./a///a/a a./a/a/a
+a./a///a/. a./a/a
+a./a///a// a./a/a
+a./a///.aa a./a/.aa
+a./a///.a. a./a/.a.
+a./a///.a/ a./a/.a
+a./a///..a a./a/..a
+a./a///... a./a/...
+a./a///../ a.
+a./a///./a a./a/a
+a./a///./. a./a
+a./a///.// a./a
+a./a////aa a./a/aa
+a./a////a. a./a/a.
+a./a////a/ a./a/a
+a./a////.a a./a/.a
+a./a////.. a.
+a./a////./ a./a
+a./a/////a a./a/a
+a./a/////. a./a
+a./a////// a./a
+a./.aaaaaa a./.aaaaaa
+a./.aaaaa. a./.aaaaa.
+a./.aaaaa/ a./.aaaaa
+a./.aaaa.a a./.aaaa.a
+a./.aaaa.. a./.aaaa..
+a./.aaaa./ a./.aaaa.
+a./.aaaa/a a./.aaaa/a
+a./.aaaa/. a./.aaaa
+a./.aaaa// a./.aaaa
+a./.aaa.aa a./.aaa.aa
+a./.aaa.a. a./.aaa.a.
+a./.aaa.a/ a./.aaa.a
+a./.aaa..a a./.aaa..a
+a./.aaa... a./.aaa...
+a./.aaa../ a./.aaa..
+a./.aaa./a a./.aaa./a
+a./.aaa./. a./.aaa.
+a./.aaa.// a./.aaa.
+a./.aaa/aa a./.aaa/aa
+a./.aaa/a. a./.aaa/a.
+a./.aaa/a/ a./.aaa/a
+a./.aaa/.a a./.aaa/.a
+a./.aaa/.. a.
+a./.aaa/./ a./.aaa
+a./.aaa//a a./.aaa/a
+a./.aaa//. a./.aaa
+a./.aaa/// a./.aaa
+a./.aa.aaa a./.aa.aaa
+a./.aa.aa. a./.aa.aa.
+a./.aa.aa/ a./.aa.aa
+a./.aa.a.a a./.aa.a.a
+a./.aa.a.. a./.aa.a..
+a./.aa.a./ a./.aa.a.
+a./.aa.a/a a./.aa.a/a
+a./.aa.a/. a./.aa.a
+a./.aa.a// a./.aa.a
+a./.aa..aa a./.aa..aa
+a./.aa..a. a./.aa..a.
+a./.aa..a/ a./.aa..a
+a./.aa...a a./.aa...a
+a./.aa.... a./.aa....
+a./.aa.../ a./.aa...
+a./.aa../a a./.aa../a
+a./.aa../. a./.aa..
+a./.aa..// a./.aa..
+a./.aa./aa a./.aa./aa
+a./.aa./a. a./.aa./a.
+a./.aa./a/ a./.aa./a
+a./.aa./.a a./.aa./.a
+a./.aa./.. a.
+a./.aa././ a./.aa.
+a./.aa.//a a./.aa./a
+a./.aa.//. a./.aa.
+a./.aa./// a./.aa.
+a./.aa/aaa a./.aa/aaa
+a./.aa/aa. a./.aa/aa.
+a./.aa/aa/ a./.aa/aa
+a./.aa/a.a a./.aa/a.a
+a./.aa/a.. a./.aa/a..
+a./.aa/a./ a./.aa/a.
+a./.aa/a/a a./.aa/a/a
+a./.aa/a/. a./.aa/a
+a./.aa/a// a./.aa/a
+a./.aa/.aa a./.aa/.aa
+a./.aa/.a. a./.aa/.a.
+a./.aa/.a/ a./.aa/.a
+a./.aa/..a a./.aa/..a
+a./.aa/... a./.aa/...
+a./.aa/../ a.
+a./.aa/./a a./.aa/a
+a./.aa/./. a./.aa
+a./.aa/.// a./.aa
+a./.aa//aa a./.aa/aa
+a./.aa//a. a./.aa/a.
+a./.aa//a/ a./.aa/a
+a./.aa//.a a./.aa/.a
+a./.aa//.. a.
+a./.aa//./ a./.aa
+a./.aa///a a./.aa/a
+a./.aa///. a./.aa
+a./.aa//// a./.aa
+a./.a.aaaa a./.a.aaaa
+a./.a.aaa. a./.a.aaa.
+a./.a.aaa/ a./.a.aaa
+a./.a.aa.a a./.a.aa.a
+a./.a.aa.. a./.a.aa..
+a./.a.aa./ a./.a.aa.
+a./.a.aa/a a./.a.aa/a
+a./.a.aa/. a./.a.aa
+a./.a.aa// a./.a.aa
+a./.a.a.aa a./.a.a.aa
+a./.a.a.a. a./.a.a.a.
+a./.a.a.a/ a./.a.a.a
+a./.a.a..a a./.a.a..a
+a./.a.a... a./.a.a...
+a./.a.a../ a./.a.a..
+a./.a.a./a a./.a.a./a
+a./.a.a./. a./.a.a.
+a./.a.a.// a./.a.a.
+a./.a.a/aa a./.a.a/aa
+a./.a.a/a. a./.a.a/a.
+a./.a.a/a/ a./.a.a/a
+a./.a.a/.a a./.a.a/.a
+a./.a.a/.. a.
+a./.a.a/./ a./.a.a
+a./.a.a//a a./.a.a/a
+a./.a.a//. a./.a.a
+a./.a.a/// a./.a.a
+a./.a..aaa a./.a..aaa
+a./.a..aa. a./.a..aa.
+a./.a..aa/ a./.a..aa
+a./.a..a.a a./.a..a.a
+a./.a..a.. a./.a..a..
+a./.a..a./ a./.a..a.
+a./.a..a/a a./.a..a/a
+a./.a..a/. a./.a..a
+a./.a..a// a./.a..a
+a./.a...aa a./.a...aa
+a./.a...a. a./.a...a.
+a./.a...a/ a./.a...a
+a./.a....a a./.a....a
+a./.a..... a./.a.....
+a./.a..../ a./.a....
+a./.a.../a a./.a.../a
+a./.a.../. a./.a...
+a./.a...// a./.a...
+a./.a../aa a./.a../aa
+a./.a../a. a./.a../a.
+a./.a../a/ a./.a../a
+a./.a../.a a./.a../.a
+a./.a../.. a.
+a./.a.././ a./.a..
+a./.a..//a a./.a../a
+a./.a..//. a./.a..
+a./.a../// a./.a..
+a./.a./aaa a./.a./aaa
+a./.a./aa. a./.a./aa.
+a./.a./aa/ a./.a./aa
+a./.a./a.a a./.a./a.a
+a./.a./a.. a./.a./a..
+a./.a./a./ a./.a./a.
+a./.a./a/a a./.a./a/a
+a./.a./a/. a./.a./a
+a./.a./a// a./.a./a
+a./.a./.aa a./.a./.aa
+a./.a./.a. a./.a./.a.
+a./.a./.a/ a./.a./.a
+a./.a./..a a./.a./..a
+a./.a./... a./.a./...
+a./.a./../ a.
+a./.a././a a./.a./a
+a./.a././. a./.a.
+a./.a./.// a./.a.
+a./.a.//aa a./.a./aa
+a./.a.//a. a./.a./a.
+a./.a.//a/ a./.a./a
+a./.a.//.a a./.a./.a
+a./.a.//.. a.
+a./.a.//./ a./.a.
+a./.a.///a a./.a./a
+a./.a.///. a./.a.
+a./.a.//// a./.a.
+a./.a/aaaa a./.a/aaaa
+a./.a/aaa. a./.a/aaa.
+a./.a/aaa/ a./.a/aaa
+a./.a/aa.a a./.a/aa.a
+a./.a/aa.. a./.a/aa..
+a./.a/aa./ a./.a/aa.
+a./.a/aa/a a./.a/aa/a
+a./.a/aa/. a./.a/aa
+a./.a/aa// a./.a/aa
+a./.a/a.aa a./.a/a.aa
+a./.a/a.a. a./.a/a.a.
+a./.a/a.a/ a./.a/a.a
+a./.a/a..a a./.a/a..a
+a./.a/a... a./.a/a...
+a./.a/a../ a./.a/a..
+a./.a/a./a a./.a/a./a
+a./.a/a./. a./.a/a.
+a./.a/a.// a./.a/a.
+a./.a/a/aa a./.a/a/aa
+a./.a/a/a. a./.a/a/a.
+a./.a/a/a/ a./.a/a/a
+a./.a/a/.a a./.a/a/.a
+a./.a/a/.. a./.a
+a./.a/a/./ a./.a/a
+a./.a/a//a a./.a/a/a
+a./.a/a//. a./.a/a
+a./.a/a/// a./.a/a
+a./.a/.aaa a./.a/.aaa
+a./.a/.aa. a./.a/.aa.
+a./.a/.aa/ a./.a/.aa
+a./.a/.a.a a./.a/.a.a
+a./.a/.a.. a./.a/.a..
+a./.a/.a./ a./.a/.a.
+a./.a/.a/a a./.a/.a/a
+a./.a/.a/. a./.a/.a
+a./.a/.a// a./.a/.a
+a./.a/..aa a./.a/..aa
+a./.a/..a. a./.a/..a.
+a./.a/..a/ a./.a/..a
+a./.a/...a a./.a/...a
+a./.a/.... a./.a/....
+a./.a/.../ a./.a/...
+a./.a/../a a./a
+a./.a/../. a.
+a./.a/..// a.
+a./.a/./aa a./.a/aa
+a./.a/./a. a./.a/a.
+a./.a/./a/ a./.a/a
+a./.a/./.a a./.a/.a
+a./.a/./.. a.
+a./.a/././ a./.a
+a./.a/.//a a./.a/a
+a./.a/.//. a./.a
+a./.a/./// a./.a
+a./.a//aaa a./.a/aaa
+a./.a//aa. a./.a/aa.
+a./.a//aa/ a./.a/aa
+a./.a//a.a a./.a/a.a
+a./.a//a.. a./.a/a..
+a./.a//a./ a./.a/a.
+a./.a//a/a a./.a/a/a
+a./.a//a/. a./.a/a
+a./.a//a// a./.a/a
+a./.a//.aa a./.a/.aa
+a./.a//.a. a./.a/.a.
+a./.a//.a/ a./.a/.a
+a./.a//..a a./.a/..a
+a./.a//... a./.a/...
+a./.a//../ a.
+a./.a//./a a./.a/a
+a./.a//./. a./.a
+a./.a//.// a./.a
+a./.a///aa a./.a/aa
+a./.a///a. a./.a/a.
+a./.a///a/ a./.a/a
+a./.a///.a a./.a/.a
+a./.a///.. a.
+a./.a///./ a./.a
+a./.a////a a./.a/a
+a./.a////. a./.a
+a./.a///// a./.a
+a./..aaaaa a./..aaaaa
+a./..aaaa. a./..aaaa.
+a./..aaaa/ a./..aaaa
+a./..aaa.a a./..aaa.a
+a./..aaa.. a./..aaa..
+a./..aaa./ a./..aaa.
+a./..aaa/a a./..aaa/a
+a./..aaa/. a./..aaa
+a./..aaa// a./..aaa
+a./..aa.aa a./..aa.aa
+a./..aa.a. a./..aa.a.
+a./..aa.a/ a./..aa.a
+a./..aa..a a./..aa..a
+a./..aa... a./..aa...
+a./..aa../ a./..aa..
+a./..aa./a a./..aa./a
+a./..aa./. a./..aa.
+a./..aa.// a./..aa.
+a./..aa/aa a./..aa/aa
+a./..aa/a. a./..aa/a.
+a./..aa/a/ a./..aa/a
+a./..aa/.a a./..aa/.a
+a./..aa/.. a.
+a./..aa/./ a./..aa
+a./..aa//a a./..aa/a
+a./..aa//. a./..aa
+a./..aa/// a./..aa
+a./..a.aaa a./..a.aaa
+a./..a.aa. a./..a.aa.
+a./..a.aa/ a./..a.aa
+a./..a.a.a a./..a.a.a
+a./..a.a.. a./..a.a..
+a./..a.a./ a./..a.a.
+a./..a.a/a a./..a.a/a
+a./..a.a/. a./..a.a
+a./..a.a// a./..a.a
+a./..a..aa a./..a..aa
+a./..a..a. a./..a..a.
+a./..a..a/ a./..a..a
+a./..a...a a./..a...a
+a./..a.... a./..a....
+a./..a.../ a./..a...
+a./..a../a a./..a../a
+a./..a../. a./..a..
+a./..a..// a./..a..
+a./..a./aa a./..a./aa
+a./..a./a. a./..a./a.
+a./..a./a/ a./..a./a
+a./..a./.a a./..a./.a
+a./..a./.. a.
+a./..a././ a./..a.
+a./..a.//a a./..a./a
+a./..a.//. a./..a.
+a./..a./// a./..a.
+a./..a/aaa a./..a/aaa
+a./..a/aa. a./..a/aa.
+a./..a/aa/ a./..a/aa
+a./..a/a.a a./..a/a.a
+a./..a/a.. a./..a/a..
+a./..a/a./ a./..a/a.
+a./..a/a/a a./..a/a/a
+a./..a/a/. a./..a/a
+a./..a/a// a./..a/a
+a./..a/.aa a./..a/.aa
+a./..a/.a. a./..a/.a.
+a./..a/.a/ a./..a/.a
+a./..a/..a a./..a/..a
+a./..a/... a./..a/...
+a./..a/../ a.
+a./..a/./a a./..a/a
+a./..a/./. a./..a
+a./..a/.// a./..a
+a./..a//aa a./..a/aa
+a./..a//a. a./..a/a.
+a./..a//a/ a./..a/a
+a./..a//.a a./..a/.a
+a./..a//.. a.
+a./..a//./ a./..a
+a./..a///a a./..a/a
+a./..a///. a./..a
+a./..a//// a./..a
+a./...aaaa a./...aaaa
+a./...aaa. a./...aaa.
+a./...aaa/ a./...aaa
+a./...aa.a a./...aa.a
+a./...aa.. a./...aa..
+a./...aa./ a./...aa.
+a./...aa/a a./...aa/a
+a./...aa/. a./...aa
+a./...aa// a./...aa
+a./...a.aa a./...a.aa
+a./...a.a. a./...a.a.
+a./...a.a/ a./...a.a
+a./...a..a a./...a..a
+a./...a... a./...a...
+a./...a../ a./...a..
+a./...a./a a./...a./a
+a./...a./. a./...a.
+a./...a.// a./...a.
+a./...a/aa a./...a/aa
+a./...a/a. a./...a/a.
+a./...a/a/ a./...a/a
+a./...a/.a a./...a/.a
+a./...a/.. a.
+a./...a/./ a./...a
+a./...a//a a./...a/a
+a./...a//. a./...a
+a./...a/// a./...a
+a./....aaa a./....aaa
+a./....aa. a./....aa.
+a./....aa/ a./....aa
+a./....a.a a./....a.a
+a./....a.. a./....a..
+a./....a./ a./....a.
+a./....a/a a./....a/a
+a./....a/. a./....a
+a./....a// a./....a
+a./.....aa a./.....aa
+a./.....a. a./.....a.
+a./.....a/ a./.....a
+a./......a a./......a
+a./....... a./.......
+a./....../ a./......
+a./...../a a./...../a
+a./...../. a./.....
+a./.....// a./.....
+a./..../aa a./..../aa
+a./..../a. a./..../a.
+a./..../a/ a./..../a
+a./..../.a a./..../.a
+a./..../.. a.
+a./...././ a./....
+a./....//a a./..../a
+a./....//. a./....
+a./..../// a./....
+a./.../aaa a./.../aaa
+a./.../aa. a./.../aa.
+a./.../aa/ a./.../aa
+a./.../a.a a./.../a.a
+a./.../a.. a./.../a..
+a./.../a./ a./.../a.
+a./.../a/a a./.../a/a
+a./.../a/. a./.../a
+a./.../a// a./.../a
+a./.../.aa a./.../.aa
+a./.../.a. a./.../.a.
+a./.../.a/ a./.../.a
+a./.../..a a./.../..a
+a./.../... a./.../...
+a./.../../ a.
+a./..././a a./.../a
+a./..././. a./...
+a./.../.// a./...
+a./...//aa a./.../aa
+a./...//a. a./.../a.
+a./...//a/ a./.../a
+a./...//.a a./.../.a
+a./...//.. a.
+a./...//./ a./...
+a./...///a a./.../a
+a./...///. a./...
+a./...//// a./...
+a./../aaaa aaaa
+a./../aaa. aaa.
+a./../aaa/ aaa
+a./../aa.a aa.a
+a./../aa.. aa..
+a./../aa./ aa.
+a./../aa/a aa/a
+a./../aa/. aa
+a./../aa// aa
+a./../a.aa a.aa
+a./../a.a. a.a.
+a./../a.a/ a.a
+a./../a..a a..a
+a./../a... a...
+a./../a../ a..
+a./../a./a a./a
+a./../a./. a.
+a./../a.// a.
+a./../a/aa a/aa
+a./../a/a. a/a.
+a./../a/a/ a/a
+a./../a/.a a/.a
+a./../a/.. .
+a./../a/./ a
+a./../a//a a/a
+a./../a//. a
+a./../a/// a
+a./../.aaa .aaa
+a./../.aa. .aa.
+a./../.aa/ .aa
+a./../.a.a .a.a
+a./../.a.. .a..
+a./../.a./ .a.
+a./../.a/a .a/a
+a./../.a/. .a
+a./../.a// .a
+a./../..aa ..aa
+a./../..a. ..a.
+a./../..a/ ..a
+a./../...a ...a
+a./../.... ....
+a./../.../ ...
+a./../../a ../a
+a./../../. ..
+a./../..// ..
+a./.././aa aa
+a./.././a. a.
+a./.././a/ a
+a./.././.a .a
+a./.././.. ..
+a./../././ .
+a./.././/a a
+a./.././/. .
+a./.././// .
+a./..//aaa aaa
+a./..//aa. aa.
+a./..//aa/ aa
+a./..//a.a a.a
+a./..//a.. a..
+a./..//a./ a.
+a./..//a/a a/a
+a./..//a/. a
+a./..//a// a
+a./..//.aa .aa
+a./..//.a. .a.
+a./..//.a/ .a
+a./..//..a ..a
+a./..//... ...
+a./..//../ ..
+a./..//./a a
+a./..//./. .
+a./..//.// .
+a./..///aa aa
+a./..///a. a.
+a./..///a/ a
+a./..///.a .a
+a./..///.. ..
+a./..///./ .
+a./..////a a
+a./..////. .
+a./..///// .
+a././aaaaa a./aaaaa
+a././aaaa. a./aaaa.
+a././aaaa/ a./aaaa
+a././aaa.a a./aaa.a
+a././aaa.. a./aaa..
+a././aaa./ a./aaa.
+a././aaa/a a./aaa/a
+a././aaa/. a./aaa
+a././aaa// a./aaa
+a././aa.aa a./aa.aa
+a././aa.a. a./aa.a.
+a././aa.a/ a./aa.a
+a././aa..a a./aa..a
+a././aa... a./aa...
+a././aa../ a./aa..
+a././aa./a a./aa./a
+a././aa./. a./aa.
+a././aa.// a./aa.
+a././aa/aa a./aa/aa
+a././aa/a. a./aa/a.
+a././aa/a/ a./aa/a
+a././aa/.a a./aa/.a
+a././aa/.. a.
+a././aa/./ a./aa
+a././aa//a a./aa/a
+a././aa//. a./aa
+a././aa/// a./aa
+a././a.aaa a./a.aaa
+a././a.aa. a./a.aa.
+a././a.aa/ a./a.aa
+a././a.a.a a./a.a.a
+a././a.a.. a./a.a..
+a././a.a./ a./a.a.
+a././a.a/a a./a.a/a
+a././a.a/. a./a.a
+a././a.a// a./a.a
+a././a..aa a./a..aa
+a././a..a. a./a..a.
+a././a..a/ a./a..a
+a././a...a a./a...a
+a././a.... a./a....
+a././a.../ a./a...
+a././a../a a./a../a
+a././a../. a./a..
+a././a..// a./a..
+a././a./aa a./a./aa
+a././a./a. a./a./a.
+a././a./a/ a./a./a
+a././a./.a a./a./.a
+a././a./.. a.
+a././a././ a./a.
+a././a.//a a./a./a
+a././a.//. a./a.
+a././a./// a./a.
+a././a/aaa a./a/aaa
+a././a/aa. a./a/aa.
+a././a/aa/ a./a/aa
+a././a/a.a a./a/a.a
+a././a/a.. a./a/a..
+a././a/a./ a./a/a.
+a././a/a/a a./a/a/a
+a././a/a/. a./a/a
+a././a/a// a./a/a
+a././a/.aa a./a/.aa
+a././a/.a. a./a/.a.
+a././a/.a/ a./a/.a
+a././a/..a a./a/..a
+a././a/... a./a/...
+a././a/../ a.
+a././a/./a a./a/a
+a././a/./. a./a
+a././a/.// a./a
+a././a//aa a./a/aa
+a././a//a. a./a/a.
+a././a//a/ a./a/a
+a././a//.a a./a/.a
+a././a//.. a.
+a././a//./ a./a
+a././a///a a./a/a
+a././a///. a./a
+a././a//// a./a
+a././.aaaa a./.aaaa
+a././.aaa. a./.aaa.
+a././.aaa/ a./.aaa
+a././.aa.a a./.aa.a
+a././.aa.. a./.aa..
+a././.aa./ a./.aa.
+a././.aa/a a./.aa/a
+a././.aa/. a./.aa
+a././.aa// a./.aa
+a././.a.aa a./.a.aa
+a././.a.a. a./.a.a.
+a././.a.a/ a./.a.a
+a././.a..a a./.a..a
+a././.a... a./.a...
+a././.a../ a./.a..
+a././.a./a a./.a./a
+a././.a./. a./.a.
+a././.a.// a./.a.
+a././.a/aa a./.a/aa
+a././.a/a. a./.a/a.
+a././.a/a/ a./.a/a
+a././.a/.a a./.a/.a
+a././.a/.. a.
+a././.a/./ a./.a
+a././.a//a a./.a/a
+a././.a//. a./.a
+a././.a/// a./.a
+a././..aaa a./..aaa
+a././..aa. a./..aa.
+a././..aa/ a./..aa
+a././..a.a a./..a.a
+a././..a.. a./..a..
+a././..a./ a./..a.
+a././..a/a a./..a/a
+a././..a/. a./..a
+a././..a// a./..a
+a././...aa a./...aa
+a././...a. a./...a.
+a././...a/ a./...a
+a././....a a./....a
+a././..... a./.....
+a././..../ a./....
+a././.../a a./.../a
+a././.../. a./...
+a././...// a./...
+a././../aa aa
+a././../a. a.
+a././../a/ a
+a././../.a .a
+a././../.. ..
+a././.././ .
+a././..//a a
+a././..//. .
+a././../// .
+a./././aaa a./aaa
+a./././aa. a./aa.
+a./././aa/ a./aa
+a./././a.a a./a.a
+a./././a.. a./a..
+a./././a./ a./a.
+a./././a/a a./a/a
+a./././a/. a./a
+a./././a// a./a
+a./././.aa a./.aa
+a./././.a. a./.a.
+a./././.a/ a./.a
+a./././..a a./..a
+a./././... a./...
+a./././../ .
+a././././a a./a
+a././././. a.
+a./././.// a.
+a./././/aa a./aa
+a./././/a. a./a.
+a./././/a/ a./a
+a./././/.a a./.a
+a./././/.. .
+a./././/./ a.
+a./././//a a./a
+a./././//. a.
+a./././/// a.
+a././/aaaa a./aaaa
+a././/aaa. a./aaa.
+a././/aaa/ a./aaa
+a././/aa.a a./aa.a
+a././/aa.. a./aa..
+a././/aa./ a./aa.
+a././/aa/a a./aa/a
+a././/aa/. a./aa
+a././/aa// a./aa
+a././/a.aa a./a.aa
+a././/a.a. a./a.a.
+a././/a.a/ a./a.a
+a././/a..a a./a..a
+a././/a... a./a...
+a././/a../ a./a..
+a././/a./a a./a./a
+a././/a./. a./a.
+a././/a.// a./a.
+a././/a/aa a./a/aa
+a././/a/a. a./a/a.
+a././/a/a/ a./a/a
+a././/a/.a a./a/.a
+a././/a/.. a.
+a././/a/./ a./a
+a././/a//a a./a/a
+a././/a//. a./a
+a././/a/// a./a
+a././/.aaa a./.aaa
+a././/.aa. a./.aa.
+a././/.aa/ a./.aa
+a././/.a.a a./.a.a
+a././/.a.. a./.a..
+a././/.a./ a./.a.
+a././/.a/a a./.a/a
+a././/.a/. a./.a
+a././/.a// a./.a
+a././/..aa a./..aa
+a././/..a. a./..a.
+a././/..a/ a./..a
+a././/...a a./...a
+a././/.... a./....
+a././/.../ a./...
+a././/../a a
+a././/../. .
+a././/..// .
+a././/./aa a./aa
+a././/./a. a./a.
+a././/./a/ a./a
+a././/./.a a./.a
+a././/./.. .
+a././/././ a.
+a././/.//a a./a
+a././/.//. a.
+a././/./// a.
+a././//aaa a./aaa
+a././//aa. a./aa.
+a././//aa/ a./aa
+a././//a.a a./a.a
+a././//a.. a./a..
+a././//a./ a./a.
+a././//a/a a./a/a
+a././//a/. a./a
+a././//a// a./a
+a././//.aa a./.aa
+a././//.a. a./.a.
+a././//.a/ a./.a
+a././//..a a./..a
+a././//... a./...
+a././//../ .
+a././//./a a./a
+a././//./. a.
+a././//.// a.
+a././///aa a./aa
+a././///a. a./a.
+a././///a/ a./a
+a././///.a a./.a
+a././///.. .
+a././///./ a.
+a././////a a./a
+a././////. a.
+a././///// a.
+a.//aaaaaa a./aaaaaa
+a.//aaaaa. a./aaaaa.
+a.//aaaaa/ a./aaaaa
+a.//aaaa.a a./aaaa.a
+a.//aaaa.. a./aaaa..
+a.//aaaa./ a./aaaa.
+a.//aaaa/a a./aaaa/a
+a.//aaaa/. a./aaaa
+a.//aaaa// a./aaaa
+a.//aaa.aa a./aaa.aa
+a.//aaa.a. a./aaa.a.
+a.//aaa.a/ a./aaa.a
+a.//aaa..a a./aaa..a
+a.//aaa... a./aaa...
+a.//aaa../ a./aaa..
+a.//aaa./a a./aaa./a
+a.//aaa./. a./aaa.
+a.//aaa.// a./aaa.
+a.//aaa/aa a./aaa/aa
+a.//aaa/a. a./aaa/a.
+a.//aaa/a/ a./aaa/a
+a.//aaa/.a a./aaa/.a
+a.//aaa/.. a.
+a.//aaa/./ a./aaa
+a.//aaa//a a./aaa/a
+a.//aaa//. a./aaa
+a.//aaa/// a./aaa
+a.//aa.aaa a./aa.aaa
+a.//aa.aa. a./aa.aa.
+a.//aa.aa/ a./aa.aa
+a.//aa.a.a a./aa.a.a
+a.//aa.a.. a./aa.a..
+a.//aa.a./ a./aa.a.
+a.//aa.a/a a./aa.a/a
+a.//aa.a/. a./aa.a
+a.//aa.a// a./aa.a
+a.//aa..aa a./aa..aa
+a.//aa..a. a./aa..a.
+a.//aa..a/ a./aa..a
+a.//aa...a a./aa...a
+a.//aa.... a./aa....
+a.//aa.../ a./aa...
+a.//aa../a a./aa../a
+a.//aa../. a./aa..
+a.//aa..// a./aa..
+a.//aa./aa a./aa./aa
+a.//aa./a. a./aa./a.
+a.//aa./a/ a./aa./a
+a.//aa./.a a./aa./.a
+a.//aa./.. a.
+a.//aa././ a./aa.
+a.//aa.//a a./aa./a
+a.//aa.//. a./aa.
+a.//aa./// a./aa.
+a.//aa/aaa a./aa/aaa
+a.//aa/aa. a./aa/aa.
+a.//aa/aa/ a./aa/aa
+a.//aa/a.a a./aa/a.a
+a.//aa/a.. a./aa/a..
+a.//aa/a./ a./aa/a.
+a.//aa/a/a a./aa/a/a
+a.//aa/a/. a./aa/a
+a.//aa/a// a./aa/a
+a.//aa/.aa a./aa/.aa
+a.//aa/.a. a./aa/.a.
+a.//aa/.a/ a./aa/.a
+a.//aa/..a a./aa/..a
+a.//aa/... a./aa/...
+a.//aa/../ a.
+a.//aa/./a a./aa/a
+a.//aa/./. a./aa
+a.//aa/.// a./aa
+a.//aa//aa a./aa/aa
+a.//aa//a. a./aa/a.
+a.//aa//a/ a./aa/a
+a.//aa//.a a./aa/.a
+a.//aa//.. a.
+a.//aa//./ a./aa
+a.//aa///a a./aa/a
+a.//aa///. a./aa
+a.//aa//// a./aa
+a.//a.aaaa a./a.aaaa
+a.//a.aaa. a./a.aaa.
+a.//a.aaa/ a./a.aaa
+a.//a.aa.a a./a.aa.a
+a.//a.aa.. a./a.aa..
+a.//a.aa./ a./a.aa.
+a.//a.aa/a a./a.aa/a
+a.//a.aa/. a./a.aa
+a.//a.aa// a./a.aa
+a.//a.a.aa a./a.a.aa
+a.//a.a.a. a./a.a.a.
+a.//a.a.a/ a./a.a.a
+a.//a.a..a a./a.a..a
+a.//a.a... a./a.a...
+a.//a.a../ a./a.a..
+a.//a.a./a a./a.a./a
+a.//a.a./. a./a.a.
+a.//a.a.// a./a.a.
+a.//a.a/aa a./a.a/aa
+a.//a.a/a. a./a.a/a.
+a.//a.a/a/ a./a.a/a
+a.//a.a/.a a./a.a/.a
+a.//a.a/.. a.
+a.//a.a/./ a./a.a
+a.//a.a//a a./a.a/a
+a.//a.a//. a./a.a
+a.//a.a/// a./a.a
+a.//a..aaa a./a..aaa
+a.//a..aa. a./a..aa.
+a.//a..aa/ a./a..aa
+a.//a..a.a a./a..a.a
+a.//a..a.. a./a..a..
+a.//a..a./ a./a..a.
+a.//a..a/a a./a..a/a
+a.//a..a/. a./a..a
+a.//a..a// a./a..a
+a.//a...aa a./a...aa
+a.//a...a. a./a...a.
+a.//a...a/ a./a...a
+a.//a....a a./a....a
+a.//a..... a./a.....
+a.//a..../ a./a....
+a.//a.../a a./a.../a
+a.//a.../. a./a...
+a.//a...// a./a...
+a.//a../aa a./a../aa
+a.//a../a. a./a../a.
+a.//a../a/ a./a../a
+a.//a../.a a./a../.a
+a.//a../.. a.
+a.//a.././ a./a..
+a.//a..//a a./a../a
+a.//a..//. a./a..
+a.//a../// a./a..
+a.//a./aaa a./a./aaa
+a.//a./aa. a./a./aa.
+a.//a./aa/ a./a./aa
+a.//a./a.a a./a./a.a
+a.//a./a.. a./a./a..
+a.//a./a./ a./a./a.
+a.//a./a/a a./a./a/a
+a.//a./a/. a./a./a
+a.//a./a// a./a./a
+a.//a./.aa a./a./.aa
+a.//a./.a. a./a./.a.
+a.//a./.a/ a./a./.a
+a.//a./..a a./a./..a
+a.//a./... a./a./...
+a.//a./../ a.
+a.//a././a a./a./a
+a.//a././. a./a.
+a.//a./.// a./a.
+a.//a.//aa a./a./aa
+a.//a.//a. a./a./a.
+a.//a.//a/ a./a./a
+a.//a.//.a a./a./.a
+a.//a.//.. a.
+a.//a.//./ a./a.
+a.//a.///a a./a./a
+a.//a.///. a./a.
+a.//a.//// a./a.
+a.//a/aaaa a./a/aaaa
+a.//a/aaa. a./a/aaa.
+a.//a/aaa/ a./a/aaa
+a.//a/aa.a a./a/aa.a
+a.//a/aa.. a./a/aa..
+a.//a/aa./ a./a/aa.
+a.//a/aa/a a./a/aa/a
+a.//a/aa/. a./a/aa
+a.//a/aa// a./a/aa
+a.//a/a.aa a./a/a.aa
+a.//a/a.a. a./a/a.a.
+a.//a/a.a/ a./a/a.a
+a.//a/a..a a./a/a..a
+a.//a/a... a./a/a...
+a.//a/a../ a./a/a..
+a.//a/a./a a./a/a./a
+a.//a/a./. a./a/a.
+a.//a/a.// a./a/a.
+a.//a/a/aa a./a/a/aa
+a.//a/a/a. a./a/a/a.
+a.//a/a/a/ a./a/a/a
+a.//a/a/.a a./a/a/.a
+a.//a/a/.. a./a
+a.//a/a/./ a./a/a
+a.//a/a//a a./a/a/a
+a.//a/a//. a./a/a
+a.//a/a/// a./a/a
+a.//a/.aaa a./a/.aaa
+a.//a/.aa. a./a/.aa.
+a.//a/.aa/ a./a/.aa
+a.//a/.a.a a./a/.a.a
+a.//a/.a.. a./a/.a..
+a.//a/.a./ a./a/.a.
+a.//a/.a/a a./a/.a/a
+a.//a/.a/. a./a/.a
+a.//a/.a// a./a/.a
+a.//a/..aa a./a/..aa
+a.//a/..a. a./a/..a.
+a.//a/..a/ a./a/..a
+a.//a/...a a./a/...a
+a.//a/.... a./a/....
+a.//a/.../ a./a/...
+a.//a/../a a./a
+a.//a/../. a.
+a.//a/..// a.
+a.//a/./aa a./a/aa
+a.//a/./a. a./a/a.
+a.//a/./a/ a./a/a
+a.//a/./.a a./a/.a
+a.//a/./.. a.
+a.//a/././ a./a
+a.//a/.//a a./a/a
+a.//a/.//. a./a
+a.//a/./// a./a
+a.//a//aaa a./a/aaa
+a.//a//aa. a./a/aa.
+a.//a//aa/ a./a/aa
+a.//a//a.a a./a/a.a
+a.//a//a.. a./a/a..
+a.//a//a./ a./a/a.
+a.//a//a/a a./a/a/a
+a.//a//a/. a./a/a
+a.//a//a// a./a/a
+a.//a//.aa a./a/.aa
+a.//a//.a. a./a/.a.
+a.//a//.a/ a./a/.a
+a.//a//..a a./a/..a
+a.//a//... a./a/...
+a.//a//../ a.
+a.//a//./a a./a/a
+a.//a//./. a./a
+a.//a//.// a./a
+a.//a///aa a./a/aa
+a.//a///a. a./a/a.
+a.//a///a/ a./a/a
+a.//a///.a a./a/.a
+a.//a///.. a.
+a.//a///./ a./a
+a.//a////a a./a/a
+a.//a////. a./a
+a.//a///// a./a
+a.//.aaaaa a./.aaaaa
+a.//.aaaa. a./.aaaa.
+a.//.aaaa/ a./.aaaa
+a.//.aaa.a a./.aaa.a
+a.//.aaa.. a./.aaa..
+a.//.aaa./ a./.aaa.
+a.//.aaa/a a./.aaa/a
+a.//.aaa/. a./.aaa
+a.//.aaa// a./.aaa
+a.//.aa.aa a./.aa.aa
+a.//.aa.a. a./.aa.a.
+a.//.aa.a/ a./.aa.a
+a.//.aa..a a./.aa..a
+a.//.aa... a./.aa...
+a.//.aa../ a./.aa..
+a.//.aa./a a./.aa./a
+a.//.aa./. a./.aa.
+a.//.aa.// a./.aa.
+a.//.aa/aa a./.aa/aa
+a.//.aa/a. a./.aa/a.
+a.//.aa/a/ a./.aa/a
+a.//.aa/.a a./.aa/.a
+a.//.aa/.. a.
+a.//.aa/./ a./.aa
+a.//.aa//a a./.aa/a
+a.//.aa//. a./.aa
+a.//.aa/// a./.aa
+a.//.a.aaa a./.a.aaa
+a.//.a.aa. a./.a.aa.
+a.//.a.aa/ a./.a.aa
+a.//.a.a.a a./.a.a.a
+a.//.a.a.. a./.a.a..
+a.//.a.a./ a./.a.a.
+a.//.a.a/a a./.a.a/a
+a.//.a.a/. a./.a.a
+a.//.a.a// a./.a.a
+a.//.a..aa a./.a..aa
+a.//.a..a. a./.a..a.
+a.//.a..a/ a./.a..a
+a.//.a...a a./.a...a
+a.//.a.... a./.a....
+a.//.a.../ a./.a...
+a.//.a../a a./.a../a
+a.//.a../. a./.a..
+a.//.a..// a./.a..
+a.//.a./aa a./.a./aa
+a.//.a./a. a./.a./a.
+a.//.a./a/ a./.a./a
+a.//.a./.a a./.a./.a
+a.//.a./.. a.
+a.//.a././ a./.a.
+a.//.a.//a a./.a./a
+a.//.a.//. a./.a.
+a.//.a./// a./.a.
+a.//.a/aaa a./.a/aaa
+a.//.a/aa. a./.a/aa.
+a.//.a/aa/ a./.a/aa
+a.//.a/a.a a./.a/a.a
+a.//.a/a.. a./.a/a..
+a.//.a/a./ a./.a/a.
+a.//.a/a/a a./.a/a/a
+a.//.a/a/. a./.a/a
+a.//.a/a// a./.a/a
+a.//.a/.aa a./.a/.aa
+a.//.a/.a. a./.a/.a.
+a.//.a/.a/ a./.a/.a
+a.//.a/..a a./.a/..a
+a.//.a/... a./.a/...
+a.//.a/../ a.
+a.//.a/./a a./.a/a
+a.//.a/./. a./.a
+a.//.a/.// a./.a
+a.//.a//aa a./.a/aa
+a.//.a//a. a./.a/a.
+a.//.a//a/ a./.a/a
+a.//.a//.a a./.a/.a
+a.//.a//.. a.
+a.//.a//./ a./.a
+a.//.a///a a./.a/a
+a.//.a///. a./.a
+a.//.a//// a./.a
+a.//..aaaa a./..aaaa
+a.//..aaa. a./..aaa.
+a.//..aaa/ a./..aaa
+a.//..aa.a a./..aa.a
+a.//..aa.. a./..aa..
+a.//..aa./ a./..aa.
+a.//..aa/a a./..aa/a
+a.//..aa/. a./..aa
+a.//..aa// a./..aa
+a.//..a.aa a./..a.aa
+a.//..a.a. a./..a.a.
+a.//..a.a/ a./..a.a
+a.//..a..a a./..a..a
+a.//..a... a./..a...
+a.//..a../ a./..a..
+a.//..a./a a./..a./a
+a.//..a./. a./..a.
+a.//..a.// a./..a.
+a.//..a/aa a./..a/aa
+a.//..a/a. a./..a/a.
+a.//..a/a/ a./..a/a
+a.//..a/.a a./..a/.a
+a.//..a/.. a.
+a.//..a/./ a./..a
+a.//..a//a a./..a/a
+a.//..a//. a./..a
+a.//..a/// a./..a
+a.//...aaa a./...aaa
+a.//...aa. a./...aa.
+a.//...aa/ a./...aa
+a.//...a.a a./...a.a
+a.//...a.. a./...a..
+a.//...a./ a./...a.
+a.//...a/a a./...a/a
+a.//...a/. a./...a
+a.//...a// a./...a
+a.//....aa a./....aa
+a.//....a. a./....a.
+a.//....a/ a./....a
+a.//.....a a./.....a
+a.//...... a./......
+a.//...../ a./.....
+a.//..../a a./..../a
+a.//..../. a./....
+a.//....// a./....
+a.//.../aa a./.../aa
+a.//.../a. a./.../a.
+a.//.../a/ a./.../a
+a.//.../.a a./.../.a
+a.//.../.. a.
+a.//..././ a./...
+a.//...//a a./.../a
+a.//...//. a./...
+a.//.../// a./...
+a.//../aaa aaa
+a.//../aa. aa.
+a.//../aa/ aa
+a.//../a.a a.a
+a.//../a.. a..
+a.//../a./ a.
+a.//../a/a a/a
+a.//../a/. a
+a.//../a// a
+a.//../.aa .aa
+a.//../.a. .a.
+a.//../.a/ .a
+a.//../..a ..a
+a.//../... ...
+a.//../../ ..
+a.//.././a a
+a.//.././. .
+a.//../.// .
+a.//..//aa aa
+a.//..//a. a.
+a.//..//a/ a
+a.//..//.a .a
+a.//..//.. ..
+a.//..//./ .
+a.//..///a a
+a.//..///. .
+a.//..//// .
+a.//./aaaa a./aaaa
+a.//./aaa. a./aaa.
+a.//./aaa/ a./aaa
+a.//./aa.a a./aa.a
+a.//./aa.. a./aa..
+a.//./aa./ a./aa.
+a.//./aa/a a./aa/a
+a.//./aa/. a./aa
+a.//./aa// a./aa
+a.//./a.aa a./a.aa
+a.//./a.a. a./a.a.
+a.//./a.a/ a./a.a
+a.//./a..a a./a..a
+a.//./a... a./a...
+a.//./a../ a./a..
+a.//./a./a a./a./a
+a.//./a./. a./a.
+a.//./a.// a./a.
+a.//./a/aa a./a/aa
+a.//./a/a. a./a/a.
+a.//./a/a/ a./a/a
+a.//./a/.a a./a/.a
+a.//./a/.. a.
+a.//./a/./ a./a
+a.//./a//a a./a/a
+a.//./a//. a./a
+a.//./a/// a./a
+a.//./.aaa a./.aaa
+a.//./.aa. a./.aa.
+a.//./.aa/ a./.aa
+a.//./.a.a a./.a.a
+a.//./.a.. a./.a..
+a.//./.a./ a./.a.
+a.//./.a/a a./.a/a
+a.//./.a/. a./.a
+a.//./.a// a./.a
+a.//./..aa a./..aa
+a.//./..a. a./..a.
+a.//./..a/ a./..a
+a.//./...a a./...a
+a.//./.... a./....
+a.//./.../ a./...
+a.//./../a a
+a.//./../. .
+a.//./..// .
+a.//././aa a./aa
+a.//././a. a./a.
+a.//././a/ a./a
+a.//././.a a./.a
+a.//././.. .
+a.//./././ a.
+a.//././/a a./a
+a.//././/. a.
+a.//././// a.
+a.//.//aaa a./aaa
+a.//.//aa. a./aa.
+a.//.//aa/ a./aa
+a.//.//a.a a./a.a
+a.//.//a.. a./a..
+a.//.//a./ a./a.
+a.//.//a/a a./a/a
+a.//.//a/. a./a
+a.//.//a// a./a
+a.//.//.aa a./.aa
+a.//.//.a. a./.a.
+a.//.//.a/ a./.a
+a.//.//..a a./..a
+a.//.//... a./...
+a.//.//../ .
+a.//.//./a a./a
+a.//.//./. a.
+a.//.//.// a.
+a.//.///aa a./aa
+a.//.///a. a./a.
+a.//.///a/ a./a
+a.//.///.a a./.a
+a.//.///.. .
+a.//.///./ a.
+a.//.////a a./a
+a.//.////. a.
+a.//.///// a.
+a.///aaaaa a./aaaaa
+a.///aaaa. a./aaaa.
+a.///aaaa/ a./aaaa
+a.///aaa.a a./aaa.a
+a.///aaa.. a./aaa..
+a.///aaa./ a./aaa.
+a.///aaa/a a./aaa/a
+a.///aaa/. a./aaa
+a.///aaa// a./aaa
+a.///aa.aa a./aa.aa
+a.///aa.a. a./aa.a.
+a.///aa.a/ a./aa.a
+a.///aa..a a./aa..a
+a.///aa... a./aa...
+a.///aa../ a./aa..
+a.///aa./a a./aa./a
+a.///aa./. a./aa.
+a.///aa.// a./aa.
+a.///aa/aa a./aa/aa
+a.///aa/a. a./aa/a.
+a.///aa/a/ a./aa/a
+a.///aa/.a a./aa/.a
+a.///aa/.. a.
+a.///aa/./ a./aa
+a.///aa//a a./aa/a
+a.///aa//. a./aa
+a.///aa/// a./aa
+a.///a.aaa a./a.aaa
+a.///a.aa. a./a.aa.
+a.///a.aa/ a./a.aa
+a.///a.a.a a./a.a.a
+a.///a.a.. a./a.a..
+a.///a.a./ a./a.a.
+a.///a.a/a a./a.a/a
+a.///a.a/. a./a.a
+a.///a.a// a./a.a
+a.///a..aa a./a..aa
+a.///a..a. a./a..a.
+a.///a..a/ a./a..a
+a.///a...a a./a...a
+a.///a.... a./a....
+a.///a.../ a./a...
+a.///a../a a./a../a
+a.///a../. a./a..
+a.///a..// a./a..
+a.///a./aa a./a./aa
+a.///a./a. a./a./a.
+a.///a./a/ a./a./a
+a.///a./.a a./a./.a
+a.///a./.. a.
+a.///a././ a./a.
+a.///a.//a a./a./a
+a.///a.//. a./a.
+a.///a./// a./a.
+a.///a/aaa a./a/aaa
+a.///a/aa. a./a/aa.
+a.///a/aa/ a./a/aa
+a.///a/a.a a./a/a.a
+a.///a/a.. a./a/a..
+a.///a/a./ a./a/a.
+a.///a/a/a a./a/a/a
+a.///a/a/. a./a/a
+a.///a/a// a./a/a
+a.///a/.aa a./a/.aa
+a.///a/.a. a./a/.a.
+a.///a/.a/ a./a/.a
+a.///a/..a a./a/..a
+a.///a/... a./a/...
+a.///a/../ a.
+a.///a/./a a./a/a
+a.///a/./. a./a
+a.///a/.// a./a
+a.///a//aa a./a/aa
+a.///a//a. a./a/a.
+a.///a//a/ a./a/a
+a.///a//.a a./a/.a
+a.///a//.. a.
+a.///a//./ a./a
+a.///a///a a./a/a
+a.///a///. a./a
+a.///a//// a./a
+a.///.aaaa a./.aaaa
+a.///.aaa. a./.aaa.
+a.///.aaa/ a./.aaa
+a.///.aa.a a./.aa.a
+a.///.aa.. a./.aa..
+a.///.aa./ a./.aa.
+a.///.aa/a a./.aa/a
+a.///.aa/. a./.aa
+a.///.aa// a./.aa
+a.///.a.aa a./.a.aa
+a.///.a.a. a./.a.a.
+a.///.a.a/ a./.a.a
+a.///.a..a a./.a..a
+a.///.a... a./.a...
+a.///.a../ a./.a..
+a.///.a./a a./.a./a
+a.///.a./. a./.a.
+a.///.a.// a./.a.
+a.///.a/aa a./.a/aa
+a.///.a/a. a./.a/a.
+a.///.a/a/ a./.a/a
+a.///.a/.a a./.a/.a
+a.///.a/.. a.
+a.///.a/./ a./.a
+a.///.a//a a./.a/a
+a.///.a//. a./.a
+a.///.a/// a./.a
+a.///..aaa a./..aaa
+a.///..aa. a./..aa.
+a.///..aa/ a./..aa
+a.///..a.a a./..a.a
+a.///..a.. a./..a..
+a.///..a./ a./..a.
+a.///..a/a a./..a/a
+a.///..a/. a./..a
+a.///..a// a./..a
+a.///...aa a./...aa
+a.///...a. a./...a.
+a.///...a/ a./...a
+a.///....a a./....a
+a.///..... a./.....
+a.///..../ a./....
+a.///.../a a./.../a
+a.///.../. a./...
+a.///...// a./...
+a.///../aa aa
+a.///../a. a.
+a.///../a/ a
+a.///../.a .a
+a.///../.. ..
+a.///.././ .
+a.///..//a a
+a.///..//. .
+a.///../// .
+a.///./aaa a./aaa
+a.///./aa. a./aa.
+a.///./aa/ a./aa
+a.///./a.a a./a.a
+a.///./a.. a./a..
+a.///./a./ a./a.
+a.///./a/a a./a/a
+a.///./a/. a./a
+a.///./a// a./a
+a.///./.aa a./.aa
+a.///./.a. a./.a.
+a.///./.a/ a./.a
+a.///./..a a./..a
+a.///./... a./...
+a.///./../ .
+a.///././a a./a
+a.///././. a.
+a.///./.// a.
+a.///.//aa a./aa
+a.///.//a. a./a.
+a.///.//a/ a./a
+a.///.//.a a./.a
+a.///.//.. .
+a.///.//./ a.
+a.///.///a a./a
+a.///.///. a.
+a.///.//// a.
+a.////aaaa a./aaaa
+a.////aaa. a./aaa.
+a.////aaa/ a./aaa
+a.////aa.a a./aa.a
+a.////aa.. a./aa..
+a.////aa./ a./aa.
+a.////aa/a a./aa/a
+a.////aa/. a./aa
+a.////aa// a./aa
+a.////a.aa a./a.aa
+a.////a.a. a./a.a.
+a.////a.a/ a./a.a
+a.////a..a a./a..a
+a.////a... a./a...
+a.////a../ a./a..
+a.////a./a a./a./a
+a.////a./. a./a.
+a.////a.// a./a.
+a.////a/aa a./a/aa
+a.////a/a. a./a/a.
+a.////a/a/ a./a/a
+a.////a/.a a./a/.a
+a.////a/.. a.
+a.////a/./ a./a
+a.////a//a a./a/a
+a.////a//. a./a
+a.////a/// a./a
+a.////.aaa a./.aaa
+a.////.aa. a./.aa.
+a.////.aa/ a./.aa
+a.////.a.a a./.a.a
+a.////.a.. a./.a..
+a.////.a./ a./.a.
+a.////.a/a a./.a/a
+a.////.a/. a./.a
+a.////.a// a./.a
+a.////..aa a./..aa
+a.////..a. a./..a.
+a.////..a/ a./..a
+a.////...a a./...a
+a.////.... a./....
+a.////.../ a./...
+a.////../a a
+a.////../. .
+a.////..// .
+a.////./aa a./aa
+a.////./a. a./a.
+a.////./a/ a./a
+a.////./.a a./.a
+a.////./.. .
+a.////././ a.
+a.////.//a a./a
+a.////.//. a.
+a.////./// a.
+a./////aaa a./aaa
+a./////aa. a./aa.
+a./////aa/ a./aa
+a./////a.a a./a.a
+a./////a.. a./a..
+a./////a./ a./a.
+a./////a/a a./a/a
+a./////a/. a./a
+a./////a// a./a
+a./////.aa a./.aa
+a./////.a. a./.a.
+a./////.a/ a./.a
+a./////..a a./..a
+a./////... a./...
+a./////../ .
+a./////./a a./a
+a./////./. a.
+a./////.// a.
+a.//////aa a./aa
+a.//////a. a./a.
+a.//////a/ a./a
+a.//////.a a./.a
+a.//////.. .
+a.//////./ a.
+a.///////a a./a
+a.///////. a.
+a.//////// a.
+a/aaaaaaaa a/aaaaaaaa
+a/aaaaaaa. a/aaaaaaa.
+a/aaaaaaa/ a/aaaaaaa
+a/aaaaaa.a a/aaaaaa.a
+a/aaaaaa.. a/aaaaaa..
+a/aaaaaa./ a/aaaaaa.
+a/aaaaaa/a a/aaaaaa/a
+a/aaaaaa/. a/aaaaaa
+a/aaaaaa// a/aaaaaa
+a/aaaaa.aa a/aaaaa.aa
+a/aaaaa.a. a/aaaaa.a.
+a/aaaaa.a/ a/aaaaa.a
+a/aaaaa..a a/aaaaa..a
+a/aaaaa... a/aaaaa...
+a/aaaaa../ a/aaaaa..
+a/aaaaa./a a/aaaaa./a
+a/aaaaa./. a/aaaaa.
+a/aaaaa.// a/aaaaa.
+a/aaaaa/aa a/aaaaa/aa
+a/aaaaa/a. a/aaaaa/a.
+a/aaaaa/a/ a/aaaaa/a
+a/aaaaa/.a a/aaaaa/.a
+a/aaaaa/.. a
+a/aaaaa/./ a/aaaaa
+a/aaaaa//a a/aaaaa/a
+a/aaaaa//. a/aaaaa
+a/aaaaa/// a/aaaaa
+a/aaaa.aaa a/aaaa.aaa
+a/aaaa.aa. a/aaaa.aa.
+a/aaaa.aa/ a/aaaa.aa
+a/aaaa.a.a a/aaaa.a.a
+a/aaaa.a.. a/aaaa.a..
+a/aaaa.a./ a/aaaa.a.
+a/aaaa.a/a a/aaaa.a/a
+a/aaaa.a/. a/aaaa.a
+a/aaaa.a// a/aaaa.a
+a/aaaa..aa a/aaaa..aa
+a/aaaa..a. a/aaaa..a.
+a/aaaa..a/ a/aaaa..a
+a/aaaa...a a/aaaa...a
+a/aaaa.... a/aaaa....
+a/aaaa.../ a/aaaa...
+a/aaaa../a a/aaaa../a
+a/aaaa../. a/aaaa..
+a/aaaa..// a/aaaa..
+a/aaaa./aa a/aaaa./aa
+a/aaaa./a. a/aaaa./a.
+a/aaaa./a/ a/aaaa./a
+a/aaaa./.a a/aaaa./.a
+a/aaaa./.. a
+a/aaaa././ a/aaaa.
+a/aaaa.//a a/aaaa./a
+a/aaaa.//. a/aaaa.
+a/aaaa./// a/aaaa.
+a/aaaa/aaa a/aaaa/aaa
+a/aaaa/aa. a/aaaa/aa.
+a/aaaa/aa/ a/aaaa/aa
+a/aaaa/a.a a/aaaa/a.a
+a/aaaa/a.. a/aaaa/a..
+a/aaaa/a./ a/aaaa/a.
+a/aaaa/a/a a/aaaa/a/a
+a/aaaa/a/. a/aaaa/a
+a/aaaa/a// a/aaaa/a
+a/aaaa/.aa a/aaaa/.aa
+a/aaaa/.a. a/aaaa/.a.
+a/aaaa/.a/ a/aaaa/.a
+a/aaaa/..a a/aaaa/..a
+a/aaaa/... a/aaaa/...
+a/aaaa/../ a
+a/aaaa/./a a/aaaa/a
+a/aaaa/./. a/aaaa
+a/aaaa/.// a/aaaa
+a/aaaa//aa a/aaaa/aa
+a/aaaa//a. a/aaaa/a.
+a/aaaa//a/ a/aaaa/a
+a/aaaa//.a a/aaaa/.a
+a/aaaa//.. a
+a/aaaa//./ a/aaaa
+a/aaaa///a a/aaaa/a
+a/aaaa///. a/aaaa
+a/aaaa//// a/aaaa
+a/aaa.aaaa a/aaa.aaaa
+a/aaa.aaa. a/aaa.aaa.
+a/aaa.aaa/ a/aaa.aaa
+a/aaa.aa.a a/aaa.aa.a
+a/aaa.aa.. a/aaa.aa..
+a/aaa.aa./ a/aaa.aa.
+a/aaa.aa/a a/aaa.aa/a
+a/aaa.aa/. a/aaa.aa
+a/aaa.aa// a/aaa.aa
+a/aaa.a.aa a/aaa.a.aa
+a/aaa.a.a. a/aaa.a.a.
+a/aaa.a.a/ a/aaa.a.a
+a/aaa.a..a a/aaa.a..a
+a/aaa.a... a/aaa.a...
+a/aaa.a../ a/aaa.a..
+a/aaa.a./a a/aaa.a./a
+a/aaa.a./. a/aaa.a.
+a/aaa.a.// a/aaa.a.
+a/aaa.a/aa a/aaa.a/aa
+a/aaa.a/a. a/aaa.a/a.
+a/aaa.a/a/ a/aaa.a/a
+a/aaa.a/.a a/aaa.a/.a
+a/aaa.a/.. a
+a/aaa.a/./ a/aaa.a
+a/aaa.a//a a/aaa.a/a
+a/aaa.a//. a/aaa.a
+a/aaa.a/// a/aaa.a
+a/aaa..aaa a/aaa..aaa
+a/aaa..aa. a/aaa..aa.
+a/aaa..aa/ a/aaa..aa
+a/aaa..a.a a/aaa..a.a
+a/aaa..a.. a/aaa..a..
+a/aaa..a./ a/aaa..a.
+a/aaa..a/a a/aaa..a/a
+a/aaa..a/. a/aaa..a
+a/aaa..a// a/aaa..a
+a/aaa...aa a/aaa...aa
+a/aaa...a. a/aaa...a.
+a/aaa...a/ a/aaa...a
+a/aaa....a a/aaa....a
+a/aaa..... a/aaa.....
+a/aaa..../ a/aaa....
+a/aaa.../a a/aaa.../a
+a/aaa.../. a/aaa...
+a/aaa...// a/aaa...
+a/aaa../aa a/aaa../aa
+a/aaa../a. a/aaa../a.
+a/aaa../a/ a/aaa../a
+a/aaa../.a a/aaa../.a
+a/aaa../.. a
+a/aaa.././ a/aaa..
+a/aaa..//a a/aaa../a
+a/aaa..//. a/aaa..
+a/aaa../// a/aaa..
+a/aaa./aaa a/aaa./aaa
+a/aaa./aa. a/aaa./aa.
+a/aaa./aa/ a/aaa./aa
+a/aaa./a.a a/aaa./a.a
+a/aaa./a.. a/aaa./a..
+a/aaa./a./ a/aaa./a.
+a/aaa./a/a a/aaa./a/a
+a/aaa./a/. a/aaa./a
+a/aaa./a// a/aaa./a
+a/aaa./.aa a/aaa./.aa
+a/aaa./.a. a/aaa./.a.
+a/aaa./.a/ a/aaa./.a
+a/aaa./..a a/aaa./..a
+a/aaa./... a/aaa./...
+a/aaa./../ a
+a/aaa././a a/aaa./a
+a/aaa././. a/aaa.
+a/aaa./.// a/aaa.
+a/aaa.//aa a/aaa./aa
+a/aaa.//a. a/aaa./a.
+a/aaa.//a/ a/aaa./a
+a/aaa.//.a a/aaa./.a
+a/aaa.//.. a
+a/aaa.//./ a/aaa.
+a/aaa.///a a/aaa./a
+a/aaa.///. a/aaa.
+a/aaa.//// a/aaa.
+a/aaa/aaaa a/aaa/aaaa
+a/aaa/aaa. a/aaa/aaa.
+a/aaa/aaa/ a/aaa/aaa
+a/aaa/aa.a a/aaa/aa.a
+a/aaa/aa.. a/aaa/aa..
+a/aaa/aa./ a/aaa/aa.
+a/aaa/aa/a a/aaa/aa/a
+a/aaa/aa/. a/aaa/aa
+a/aaa/aa// a/aaa/aa
+a/aaa/a.aa a/aaa/a.aa
+a/aaa/a.a. a/aaa/a.a.
+a/aaa/a.a/ a/aaa/a.a
+a/aaa/a..a a/aaa/a..a
+a/aaa/a... a/aaa/a...
+a/aaa/a../ a/aaa/a..
+a/aaa/a./a a/aaa/a./a
+a/aaa/a./. a/aaa/a.
+a/aaa/a.// a/aaa/a.
+a/aaa/a/aa a/aaa/a/aa
+a/aaa/a/a. a/aaa/a/a.
+a/aaa/a/a/ a/aaa/a/a
+a/aaa/a/.a a/aaa/a/.a
+a/aaa/a/.. a/aaa
+a/aaa/a/./ a/aaa/a
+a/aaa/a//a a/aaa/a/a
+a/aaa/a//. a/aaa/a
+a/aaa/a/// a/aaa/a
+a/aaa/.aaa a/aaa/.aaa
+a/aaa/.aa. a/aaa/.aa.
+a/aaa/.aa/ a/aaa/.aa
+a/aaa/.a.a a/aaa/.a.a
+a/aaa/.a.. a/aaa/.a..
+a/aaa/.a./ a/aaa/.a.
+a/aaa/.a/a a/aaa/.a/a
+a/aaa/.a/. a/aaa/.a
+a/aaa/.a// a/aaa/.a
+a/aaa/..aa a/aaa/..aa
+a/aaa/..a. a/aaa/..a.
+a/aaa/..a/ a/aaa/..a
+a/aaa/...a a/aaa/...a
+a/aaa/.... a/aaa/....
+a/aaa/.../ a/aaa/...
+a/aaa/../a a/a
+a/aaa/../. a
+a/aaa/..// a
+a/aaa/./aa a/aaa/aa
+a/aaa/./a. a/aaa/a.
+a/aaa/./a/ a/aaa/a
+a/aaa/./.a a/aaa/.a
+a/aaa/./.. a
+a/aaa/././ a/aaa
+a/aaa/.//a a/aaa/a
+a/aaa/.//. a/aaa
+a/aaa/./// a/aaa
+a/aaa//aaa a/aaa/aaa
+a/aaa//aa. a/aaa/aa.
+a/aaa//aa/ a/aaa/aa
+a/aaa//a.a a/aaa/a.a
+a/aaa//a.. a/aaa/a..
+a/aaa//a./ a/aaa/a.
+a/aaa//a/a a/aaa/a/a
+a/aaa//a/. a/aaa/a
+a/aaa//a// a/aaa/a
+a/aaa//.aa a/aaa/.aa
+a/aaa//.a. a/aaa/.a.
+a/aaa//.a/ a/aaa/.a
+a/aaa//..a a/aaa/..a
+a/aaa//... a/aaa/...
+a/aaa//../ a
+a/aaa//./a a/aaa/a
+a/aaa//./. a/aaa
+a/aaa//.// a/aaa
+a/aaa///aa a/aaa/aa
+a/aaa///a. a/aaa/a.
+a/aaa///a/ a/aaa/a
+a/aaa///.a a/aaa/.a
+a/aaa///.. a
+a/aaa///./ a/aaa
+a/aaa////a a/aaa/a
+a/aaa////. a/aaa
+a/aaa///// a/aaa
+a/aa.aaaaa a/aa.aaaaa
+a/aa.aaaa. a/aa.aaaa.
+a/aa.aaaa/ a/aa.aaaa
+a/aa.aaa.a a/aa.aaa.a
+a/aa.aaa.. a/aa.aaa..
+a/aa.aaa./ a/aa.aaa.
+a/aa.aaa/a a/aa.aaa/a
+a/aa.aaa/. a/aa.aaa
+a/aa.aaa// a/aa.aaa
+a/aa.aa.aa a/aa.aa.aa
+a/aa.aa.a. a/aa.aa.a.
+a/aa.aa.a/ a/aa.aa.a
+a/aa.aa..a a/aa.aa..a
+a/aa.aa... a/aa.aa...
+a/aa.aa../ a/aa.aa..
+a/aa.aa./a a/aa.aa./a
+a/aa.aa./. a/aa.aa.
+a/aa.aa.// a/aa.aa.
+a/aa.aa/aa a/aa.aa/aa
+a/aa.aa/a. a/aa.aa/a.
+a/aa.aa/a/ a/aa.aa/a
+a/aa.aa/.a a/aa.aa/.a
+a/aa.aa/.. a
+a/aa.aa/./ a/aa.aa
+a/aa.aa//a a/aa.aa/a
+a/aa.aa//. a/aa.aa
+a/aa.aa/// a/aa.aa
+a/aa.a.aaa a/aa.a.aaa
+a/aa.a.aa. a/aa.a.aa.
+a/aa.a.aa/ a/aa.a.aa
+a/aa.a.a.a a/aa.a.a.a
+a/aa.a.a.. a/aa.a.a..
+a/aa.a.a./ a/aa.a.a.
+a/aa.a.a/a a/aa.a.a/a
+a/aa.a.a/. a/aa.a.a
+a/aa.a.a// a/aa.a.a
+a/aa.a..aa a/aa.a..aa
+a/aa.a..a. a/aa.a..a.
+a/aa.a..a/ a/aa.a..a
+a/aa.a...a a/aa.a...a
+a/aa.a.... a/aa.a....
+a/aa.a.../ a/aa.a...
+a/aa.a../a a/aa.a../a
+a/aa.a../. a/aa.a..
+a/aa.a..// a/aa.a..
+a/aa.a./aa a/aa.a./aa
+a/aa.a./a. a/aa.a./a.
+a/aa.a./a/ a/aa.a./a
+a/aa.a./.a a/aa.a./.a
+a/aa.a./.. a
+a/aa.a././ a/aa.a.
+a/aa.a.//a a/aa.a./a
+a/aa.a.//. a/aa.a.
+a/aa.a./// a/aa.a.
+a/aa.a/aaa a/aa.a/aaa
+a/aa.a/aa. a/aa.a/aa.
+a/aa.a/aa/ a/aa.a/aa
+a/aa.a/a.a a/aa.a/a.a
+a/aa.a/a.. a/aa.a/a..
+a/aa.a/a./ a/aa.a/a.
+a/aa.a/a/a a/aa.a/a/a
+a/aa.a/a/. a/aa.a/a
+a/aa.a/a// a/aa.a/a
+a/aa.a/.aa a/aa.a/.aa
+a/aa.a/.a. a/aa.a/.a.
+a/aa.a/.a/ a/aa.a/.a
+a/aa.a/..a a/aa.a/..a
+a/aa.a/... a/aa.a/...
+a/aa.a/../ a
+a/aa.a/./a a/aa.a/a
+a/aa.a/./. a/aa.a
+a/aa.a/.// a/aa.a
+a/aa.a//aa a/aa.a/aa
+a/aa.a//a. a/aa.a/a.
+a/aa.a//a/ a/aa.a/a
+a/aa.a//.a a/aa.a/.a
+a/aa.a//.. a
+a/aa.a//./ a/aa.a
+a/aa.a///a a/aa.a/a
+a/aa.a///. a/aa.a
+a/aa.a//// a/aa.a
+a/aa..aaaa a/aa..aaaa
+a/aa..aaa. a/aa..aaa.
+a/aa..aaa/ a/aa..aaa
+a/aa..aa.a a/aa..aa.a
+a/aa..aa.. a/aa..aa..
+a/aa..aa./ a/aa..aa.
+a/aa..aa/a a/aa..aa/a
+a/aa..aa/. a/aa..aa
+a/aa..aa// a/aa..aa
+a/aa..a.aa a/aa..a.aa
+a/aa..a.a. a/aa..a.a.
+a/aa..a.a/ a/aa..a.a
+a/aa..a..a a/aa..a..a
+a/aa..a... a/aa..a...
+a/aa..a../ a/aa..a..
+a/aa..a./a a/aa..a./a
+a/aa..a./. a/aa..a.
+a/aa..a.// a/aa..a.
+a/aa..a/aa a/aa..a/aa
+a/aa..a/a. a/aa..a/a.
+a/aa..a/a/ a/aa..a/a
+a/aa..a/.a a/aa..a/.a
+a/aa..a/.. a
+a/aa..a/./ a/aa..a
+a/aa..a//a a/aa..a/a
+a/aa..a//. a/aa..a
+a/aa..a/// a/aa..a
+a/aa...aaa a/aa...aaa
+a/aa...aa. a/aa...aa.
+a/aa...aa/ a/aa...aa
+a/aa...a.a a/aa...a.a
+a/aa...a.. a/aa...a..
+a/aa...a./ a/aa...a.
+a/aa...a/a a/aa...a/a
+a/aa...a/. a/aa...a
+a/aa...a// a/aa...a
+a/aa....aa a/aa....aa
+a/aa....a. a/aa....a.
+a/aa....a/ a/aa....a
+a/aa.....a a/aa.....a
+a/aa...... a/aa......
+a/aa...../ a/aa.....
+a/aa..../a a/aa..../a
+a/aa..../. a/aa....
+a/aa....// a/aa....
+a/aa.../aa a/aa.../aa
+a/aa.../a. a/aa.../a.
+a/aa.../a/ a/aa.../a
+a/aa.../.a a/aa.../.a
+a/aa.../.. a
+a/aa..././ a/aa...
+a/aa...//a a/aa.../a
+a/aa...//. a/aa...
+a/aa.../// a/aa...
+a/aa../aaa a/aa../aaa
+a/aa../aa. a/aa../aa.
+a/aa../aa/ a/aa../aa
+a/aa../a.a a/aa../a.a
+a/aa../a.. a/aa../a..
+a/aa../a./ a/aa../a.
+a/aa../a/a a/aa../a/a
+a/aa../a/. a/aa../a
+a/aa../a// a/aa../a
+a/aa../.aa a/aa../.aa
+a/aa../.a. a/aa../.a.
+a/aa../.a/ a/aa../.a
+a/aa../..a a/aa../..a
+a/aa../... a/aa../...
+a/aa../../ a
+a/aa.././a a/aa../a
+a/aa.././. a/aa..
+a/aa../.// a/aa..
+a/aa..//aa a/aa../aa
+a/aa..//a. a/aa../a.
+a/aa..//a/ a/aa../a
+a/aa..//.a a/aa../.a
+a/aa..//.. a
+a/aa..//./ a/aa..
+a/aa..///a a/aa../a
+a/aa..///. a/aa..
+a/aa..//// a/aa..
+a/aa./aaaa a/aa./aaaa
+a/aa./aaa. a/aa./aaa.
+a/aa./aaa/ a/aa./aaa
+a/aa./aa.a a/aa./aa.a
+a/aa./aa.. a/aa./aa..
+a/aa./aa./ a/aa./aa.
+a/aa./aa/a a/aa./aa/a
+a/aa./aa/. a/aa./aa
+a/aa./aa// a/aa./aa
+a/aa./a.aa a/aa./a.aa
+a/aa./a.a. a/aa./a.a.
+a/aa./a.a/ a/aa./a.a
+a/aa./a..a a/aa./a..a
+a/aa./a... a/aa./a...
+a/aa./a../ a/aa./a..
+a/aa./a./a a/aa./a./a
+a/aa./a./. a/aa./a.
+a/aa./a.// a/aa./a.
+a/aa./a/aa a/aa./a/aa
+a/aa./a/a. a/aa./a/a.
+a/aa./a/a/ a/aa./a/a
+a/aa./a/.a a/aa./a/.a
+a/aa./a/.. a/aa.
+a/aa./a/./ a/aa./a
+a/aa./a//a a/aa./a/a
+a/aa./a//. a/aa./a
+a/aa./a/// a/aa./a
+a/aa./.aaa a/aa./.aaa
+a/aa./.aa. a/aa./.aa.
+a/aa./.aa/ a/aa./.aa
+a/aa./.a.a a/aa./.a.a
+a/aa./.a.. a/aa./.a..
+a/aa./.a./ a/aa./.a.
+a/aa./.a/a a/aa./.a/a
+a/aa./.a/. a/aa./.a
+a/aa./.a// a/aa./.a
+a/aa./..aa a/aa./..aa
+a/aa./..a. a/aa./..a.
+a/aa./..a/ a/aa./..a
+a/aa./...a a/aa./...a
+a/aa./.... a/aa./....
+a/aa./.../ a/aa./...
+a/aa./../a a/a
+a/aa./../. a
+a/aa./..// a
+a/aa././aa a/aa./aa
+a/aa././a. a/aa./a.
+a/aa././a/ a/aa./a
+a/aa././.a a/aa./.a
+a/aa././.. a
+a/aa./././ a/aa.
+a/aa././/a a/aa./a
+a/aa././/. a/aa.
+a/aa././// a/aa.
+a/aa.//aaa a/aa./aaa
+a/aa.//aa. a/aa./aa.
+a/aa.//aa/ a/aa./aa
+a/aa.//a.a a/aa./a.a
+a/aa.//a.. a/aa./a..
+a/aa.//a./ a/aa./a.
+a/aa.//a/a a/aa./a/a
+a/aa.//a/. a/aa./a
+a/aa.//a// a/aa./a
+a/aa.//.aa a/aa./.aa
+a/aa.//.a. a/aa./.a.
+a/aa.//.a/ a/aa./.a
+a/aa.//..a a/aa./..a
+a/aa.//... a/aa./...
+a/aa.//../ a
+a/aa.//./a a/aa./a
+a/aa.//./. a/aa.
+a/aa.//.// a/aa.
+a/aa.///aa a/aa./aa
+a/aa.///a. a/aa./a.
+a/aa.///a/ a/aa./a
+a/aa.///.a a/aa./.a
+a/aa.///.. a
+a/aa.///./ a/aa.
+a/aa.////a a/aa./a
+a/aa.////. a/aa.
+a/aa.///// a/aa.
+a/aa/aaaaa a/aa/aaaaa
+a/aa/aaaa. a/aa/aaaa.
+a/aa/aaaa/ a/aa/aaaa
+a/aa/aaa.a a/aa/aaa.a
+a/aa/aaa.. a/aa/aaa..
+a/aa/aaa./ a/aa/aaa.
+a/aa/aaa/a a/aa/aaa/a
+a/aa/aaa/. a/aa/aaa
+a/aa/aaa// a/aa/aaa
+a/aa/aa.aa a/aa/aa.aa
+a/aa/aa.a. a/aa/aa.a.
+a/aa/aa.a/ a/aa/aa.a
+a/aa/aa..a a/aa/aa..a
+a/aa/aa... a/aa/aa...
+a/aa/aa../ a/aa/aa..
+a/aa/aa./a a/aa/aa./a
+a/aa/aa./. a/aa/aa.
+a/aa/aa.// a/aa/aa.
+a/aa/aa/aa a/aa/aa/aa
+a/aa/aa/a. a/aa/aa/a.
+a/aa/aa/a/ a/aa/aa/a
+a/aa/aa/.a a/aa/aa/.a
+a/aa/aa/.. a/aa
+a/aa/aa/./ a/aa/aa
+a/aa/aa//a a/aa/aa/a
+a/aa/aa//. a/aa/aa
+a/aa/aa/// a/aa/aa
+a/aa/a.aaa a/aa/a.aaa
+a/aa/a.aa. a/aa/a.aa.
+a/aa/a.aa/ a/aa/a.aa
+a/aa/a.a.a a/aa/a.a.a
+a/aa/a.a.. a/aa/a.a..
+a/aa/a.a./ a/aa/a.a.
+a/aa/a.a/a a/aa/a.a/a
+a/aa/a.a/. a/aa/a.a
+a/aa/a.a// a/aa/a.a
+a/aa/a..aa a/aa/a..aa
+a/aa/a..a. a/aa/a..a.
+a/aa/a..a/ a/aa/a..a
+a/aa/a...a a/aa/a...a
+a/aa/a.... a/aa/a....
+a/aa/a.../ a/aa/a...
+a/aa/a../a a/aa/a../a
+a/aa/a../. a/aa/a..
+a/aa/a..// a/aa/a..
+a/aa/a./aa a/aa/a./aa
+a/aa/a./a. a/aa/a./a.
+a/aa/a./a/ a/aa/a./a
+a/aa/a./.a a/aa/a./.a
+a/aa/a./.. a/aa
+a/aa/a././ a/aa/a.
+a/aa/a.//a a/aa/a./a
+a/aa/a.//. a/aa/a.
+a/aa/a./// a/aa/a.
+a/aa/a/aaa a/aa/a/aaa
+a/aa/a/aa. a/aa/a/aa.
+a/aa/a/aa/ a/aa/a/aa
+a/aa/a/a.a a/aa/a/a.a
+a/aa/a/a.. a/aa/a/a..
+a/aa/a/a./ a/aa/a/a.
+a/aa/a/a/a a/aa/a/a/a
+a/aa/a/a/. a/aa/a/a
+a/aa/a/a// a/aa/a/a
+a/aa/a/.aa a/aa/a/.aa
+a/aa/a/.a. a/aa/a/.a.
+a/aa/a/.a/ a/aa/a/.a
+a/aa/a/..a a/aa/a/..a
+a/aa/a/... a/aa/a/...
+a/aa/a/../ a/aa
+a/aa/a/./a a/aa/a/a
+a/aa/a/./. a/aa/a
+a/aa/a/.// a/aa/a
+a/aa/a//aa a/aa/a/aa
+a/aa/a//a. a/aa/a/a.
+a/aa/a//a/ a/aa/a/a
+a/aa/a//.a a/aa/a/.a
+a/aa/a//.. a/aa
+a/aa/a//./ a/aa/a
+a/aa/a///a a/aa/a/a
+a/aa/a///. a/aa/a
+a/aa/a//// a/aa/a
+a/aa/.aaaa a/aa/.aaaa
+a/aa/.aaa. a/aa/.aaa.
+a/aa/.aaa/ a/aa/.aaa
+a/aa/.aa.a a/aa/.aa.a
+a/aa/.aa.. a/aa/.aa..
+a/aa/.aa./ a/aa/.aa.
+a/aa/.aa/a a/aa/.aa/a
+a/aa/.aa/. a/aa/.aa
+a/aa/.aa// a/aa/.aa
+a/aa/.a.aa a/aa/.a.aa
+a/aa/.a.a. a/aa/.a.a.
+a/aa/.a.a/ a/aa/.a.a
+a/aa/.a..a a/aa/.a..a
+a/aa/.a... a/aa/.a...
+a/aa/.a../ a/aa/.a..
+a/aa/.a./a a/aa/.a./a
+a/aa/.a./. a/aa/.a.
+a/aa/.a.// a/aa/.a.
+a/aa/.a/aa a/aa/.a/aa
+a/aa/.a/a. a/aa/.a/a.
+a/aa/.a/a/ a/aa/.a/a
+a/aa/.a/.a a/aa/.a/.a
+a/aa/.a/.. a/aa
+a/aa/.a/./ a/aa/.a
+a/aa/.a//a a/aa/.a/a
+a/aa/.a//. a/aa/.a
+a/aa/.a/// a/aa/.a
+a/aa/..aaa a/aa/..aaa
+a/aa/..aa. a/aa/..aa.
+a/aa/..aa/ a/aa/..aa
+a/aa/..a.a a/aa/..a.a
+a/aa/..a.. a/aa/..a..
+a/aa/..a./ a/aa/..a.
+a/aa/..a/a a/aa/..a/a
+a/aa/..a/. a/aa/..a
+a/aa/..a// a/aa/..a
+a/aa/...aa a/aa/...aa
+a/aa/...a. a/aa/...a.
+a/aa/...a/ a/aa/...a
+a/aa/....a a/aa/....a
+a/aa/..... a/aa/.....
+a/aa/..../ a/aa/....
+a/aa/.../a a/aa/.../a
+a/aa/.../. a/aa/...
+a/aa/...// a/aa/...
+a/aa/../aa a/aa
+a/aa/../a. a/a.
+a/aa/../a/ a/a
+a/aa/../.a a/.a
+a/aa/../.. .
+a/aa/.././ a
+a/aa/..//a a/a
+a/aa/..//. a
+a/aa/../// a
+a/aa/./aaa a/aa/aaa
+a/aa/./aa. a/aa/aa.
+a/aa/./aa/ a/aa/aa
+a/aa/./a.a a/aa/a.a
+a/aa/./a.. a/aa/a..
+a/aa/./a./ a/aa/a.
+a/aa/./a/a a/aa/a/a
+a/aa/./a/. a/aa/a
+a/aa/./a// a/aa/a
+a/aa/./.aa a/aa/.aa
+a/aa/./.a. a/aa/.a.
+a/aa/./.a/ a/aa/.a
+a/aa/./..a a/aa/..a
+a/aa/./... a/aa/...
+a/aa/./../ a
+a/aa/././a a/aa/a
+a/aa/././. a/aa
+a/aa/./.// a/aa
+a/aa/.//aa a/aa/aa
+a/aa/.//a. a/aa/a.
+a/aa/.//a/ a/aa/a
+a/aa/.//.a a/aa/.a
+a/aa/.//.. a
+a/aa/.//./ a/aa
+a/aa/.///a a/aa/a
+a/aa/.///. a/aa
+a/aa/.//// a/aa
+a/aa//aaaa a/aa/aaaa
+a/aa//aaa. a/aa/aaa.
+a/aa//aaa/ a/aa/aaa
+a/aa//aa.a a/aa/aa.a
+a/aa//aa.. a/aa/aa..
+a/aa//aa./ a/aa/aa.
+a/aa//aa/a a/aa/aa/a
+a/aa//aa/. a/aa/aa
+a/aa//aa// a/aa/aa
+a/aa//a.aa a/aa/a.aa
+a/aa//a.a. a/aa/a.a.
+a/aa//a.a/ a/aa/a.a
+a/aa//a..a a/aa/a..a
+a/aa//a... a/aa/a...
+a/aa//a../ a/aa/a..
+a/aa//a./a a/aa/a./a
+a/aa//a./. a/aa/a.
+a/aa//a.// a/aa/a.
+a/aa//a/aa a/aa/a/aa
+a/aa//a/a. a/aa/a/a.
+a/aa//a/a/ a/aa/a/a
+a/aa//a/.a a/aa/a/.a
+a/aa//a/.. a/aa
+a/aa//a/./ a/aa/a
+a/aa//a//a a/aa/a/a
+a/aa//a//. a/aa/a
+a/aa//a/// a/aa/a
+a/aa//.aaa a/aa/.aaa
+a/aa//.aa. a/aa/.aa.
+a/aa//.aa/ a/aa/.aa
+a/aa//.a.a a/aa/.a.a
+a/aa//.a.. a/aa/.a..
+a/aa//.a./ a/aa/.a.
+a/aa//.a/a a/aa/.a/a
+a/aa//.a/. a/aa/.a
+a/aa//.a// a/aa/.a
+a/aa//..aa a/aa/..aa
+a/aa//..a. a/aa/..a.
+a/aa//..a/ a/aa/..a
+a/aa//...a a/aa/...a
+a/aa//.... a/aa/....
+a/aa//.../ a/aa/...
+a/aa//../a a/a
+a/aa//../. a
+a/aa//..// a
+a/aa//./aa a/aa/aa
+a/aa//./a. a/aa/a.
+a/aa//./a/ a/aa/a
+a/aa//./.a a/aa/.a
+a/aa//./.. a
+a/aa//././ a/aa
+a/aa//.//a a/aa/a
+a/aa//.//. a/aa
+a/aa//./// a/aa
+a/aa///aaa a/aa/aaa
+a/aa///aa. a/aa/aa.
+a/aa///aa/ a/aa/aa
+a/aa///a.a a/aa/a.a
+a/aa///a.. a/aa/a..
+a/aa///a./ a/aa/a.
+a/aa///a/a a/aa/a/a
+a/aa///a/. a/aa/a
+a/aa///a// a/aa/a
+a/aa///.aa a/aa/.aa
+a/aa///.a. a/aa/.a.
+a/aa///.a/ a/aa/.a
+a/aa///..a a/aa/..a
+a/aa///... a/aa/...
+a/aa///../ a
+a/aa///./a a/aa/a
+a/aa///./. a/aa
+a/aa///.// a/aa
+a/aa////aa a/aa/aa
+a/aa////a. a/aa/a.
+a/aa////a/ a/aa/a
+a/aa////.a a/aa/.a
+a/aa////.. a
+a/aa////./ a/aa
+a/aa/////a a/aa/a
+a/aa/////. a/aa
+a/aa////// a/aa
+a/a.aaaaaa a/a.aaaaaa
+a/a.aaaaa. a/a.aaaaa.
+a/a.aaaaa/ a/a.aaaaa
+a/a.aaaa.a a/a.aaaa.a
+a/a.aaaa.. a/a.aaaa..
+a/a.aaaa./ a/a.aaaa.
+a/a.aaaa/a a/a.aaaa/a
+a/a.aaaa/. a/a.aaaa
+a/a.aaaa// a/a.aaaa
+a/a.aaa.aa a/a.aaa.aa
+a/a.aaa.a. a/a.aaa.a.
+a/a.aaa.a/ a/a.aaa.a
+a/a.aaa..a a/a.aaa..a
+a/a.aaa... a/a.aaa...
+a/a.aaa../ a/a.aaa..
+a/a.aaa./a a/a.aaa./a
+a/a.aaa./. a/a.aaa.
+a/a.aaa.// a/a.aaa.
+a/a.aaa/aa a/a.aaa/aa
+a/a.aaa/a. a/a.aaa/a.
+a/a.aaa/a/ a/a.aaa/a
+a/a.aaa/.a a/a.aaa/.a
+a/a.aaa/.. a
+a/a.aaa/./ a/a.aaa
+a/a.aaa//a a/a.aaa/a
+a/a.aaa//. a/a.aaa
+a/a.aaa/// a/a.aaa
+a/a.aa.aaa a/a.aa.aaa
+a/a.aa.aa. a/a.aa.aa.
+a/a.aa.aa/ a/a.aa.aa
+a/a.aa.a.a a/a.aa.a.a
+a/a.aa.a.. a/a.aa.a..
+a/a.aa.a./ a/a.aa.a.
+a/a.aa.a/a a/a.aa.a/a
+a/a.aa.a/. a/a.aa.a
+a/a.aa.a// a/a.aa.a
+a/a.aa..aa a/a.aa..aa
+a/a.aa..a. a/a.aa..a.
+a/a.aa..a/ a/a.aa..a
+a/a.aa...a a/a.aa...a
+a/a.aa.... a/a.aa....
+a/a.aa.../ a/a.aa...
+a/a.aa../a a/a.aa../a
+a/a.aa../. a/a.aa..
+a/a.aa..// a/a.aa..
+a/a.aa./aa a/a.aa./aa
+a/a.aa./a. a/a.aa./a.
+a/a.aa./a/ a/a.aa./a
+a/a.aa./.a a/a.aa./.a
+a/a.aa./.. a
+a/a.aa././ a/a.aa.
+a/a.aa.//a a/a.aa./a
+a/a.aa.//. a/a.aa.
+a/a.aa./// a/a.aa.
+a/a.aa/aaa a/a.aa/aaa
+a/a.aa/aa. a/a.aa/aa.
+a/a.aa/aa/ a/a.aa/aa
+a/a.aa/a.a a/a.aa/a.a
+a/a.aa/a.. a/a.aa/a..
+a/a.aa/a./ a/a.aa/a.
+a/a.aa/a/a a/a.aa/a/a
+a/a.aa/a/. a/a.aa/a
+a/a.aa/a// a/a.aa/a
+a/a.aa/.aa a/a.aa/.aa
+a/a.aa/.a. a/a.aa/.a.
+a/a.aa/.a/ a/a.aa/.a
+a/a.aa/..a a/a.aa/..a
+a/a.aa/... a/a.aa/...
+a/a.aa/../ a
+a/a.aa/./a a/a.aa/a
+a/a.aa/./. a/a.aa
+a/a.aa/.// a/a.aa
+a/a.aa//aa a/a.aa/aa
+a/a.aa//a. a/a.aa/a.
+a/a.aa//a/ a/a.aa/a
+a/a.aa//.a a/a.aa/.a
+a/a.aa//.. a
+a/a.aa//./ a/a.aa
+a/a.aa///a a/a.aa/a
+a/a.aa///. a/a.aa
+a/a.aa//// a/a.aa
+a/a.a.aaaa a/a.a.aaaa
+a/a.a.aaa. a/a.a.aaa.
+a/a.a.aaa/ a/a.a.aaa
+a/a.a.aa.a a/a.a.aa.a
+a/a.a.aa.. a/a.a.aa..
+a/a.a.aa./ a/a.a.aa.
+a/a.a.aa/a a/a.a.aa/a
+a/a.a.aa/. a/a.a.aa
+a/a.a.aa// a/a.a.aa
+a/a.a.a.aa a/a.a.a.aa
+a/a.a.a.a. a/a.a.a.a.
+a/a.a.a.a/ a/a.a.a.a
+a/a.a.a..a a/a.a.a..a
+a/a.a.a... a/a.a.a...
+a/a.a.a../ a/a.a.a..
+a/a.a.a./a a/a.a.a./a
+a/a.a.a./. a/a.a.a.
+a/a.a.a.// a/a.a.a.
+a/a.a.a/aa a/a.a.a/aa
+a/a.a.a/a. a/a.a.a/a.
+a/a.a.a/a/ a/a.a.a/a
+a/a.a.a/.a a/a.a.a/.a
+a/a.a.a/.. a
+a/a.a.a/./ a/a.a.a
+a/a.a.a//a a/a.a.a/a
+a/a.a.a//. a/a.a.a
+a/a.a.a/// a/a.a.a
+a/a.a..aaa a/a.a..aaa
+a/a.a..aa. a/a.a..aa.
+a/a.a..aa/ a/a.a..aa
+a/a.a..a.a a/a.a..a.a
+a/a.a..a.. a/a.a..a..
+a/a.a..a./ a/a.a..a.
+a/a.a..a/a a/a.a..a/a
+a/a.a..a/. a/a.a..a
+a/a.a..a// a/a.a..a
+a/a.a...aa a/a.a...aa
+a/a.a...a. a/a.a...a.
+a/a.a...a/ a/a.a...a
+a/a.a....a a/a.a....a
+a/a.a..... a/a.a.....
+a/a.a..../ a/a.a....
+a/a.a.../a a/a.a.../a
+a/a.a.../. a/a.a...
+a/a.a...// a/a.a...
+a/a.a../aa a/a.a../aa
+a/a.a../a. a/a.a../a.
+a/a.a../a/ a/a.a../a
+a/a.a../.a a/a.a../.a
+a/a.a../.. a
+a/a.a.././ a/a.a..
+a/a.a..//a a/a.a../a
+a/a.a..//. a/a.a..
+a/a.a../// a/a.a..
+a/a.a./aaa a/a.a./aaa
+a/a.a./aa. a/a.a./aa.
+a/a.a./aa/ a/a.a./aa
+a/a.a./a.a a/a.a./a.a
+a/a.a./a.. a/a.a./a..
+a/a.a./a./ a/a.a./a.
+a/a.a./a/a a/a.a./a/a
+a/a.a./a/. a/a.a./a
+a/a.a./a// a/a.a./a
+a/a.a./.aa a/a.a./.aa
+a/a.a./.a. a/a.a./.a.
+a/a.a./.a/ a/a.a./.a
+a/a.a./..a a/a.a./..a
+a/a.a./... a/a.a./...
+a/a.a./../ a
+a/a.a././a a/a.a./a
+a/a.a././. a/a.a.
+a/a.a./.// a/a.a.
+a/a.a.//aa a/a.a./aa
+a/a.a.//a. a/a.a./a.
+a/a.a.//a/ a/a.a./a
+a/a.a.//.a a/a.a./.a
+a/a.a.//.. a
+a/a.a.//./ a/a.a.
+a/a.a.///a a/a.a./a
+a/a.a.///. a/a.a.
+a/a.a.//// a/a.a.
+a/a.a/aaaa a/a.a/aaaa
+a/a.a/aaa. a/a.a/aaa.
+a/a.a/aaa/ a/a.a/aaa
+a/a.a/aa.a a/a.a/aa.a
+a/a.a/aa.. a/a.a/aa..
+a/a.a/aa./ a/a.a/aa.
+a/a.a/aa/a a/a.a/aa/a
+a/a.a/aa/. a/a.a/aa
+a/a.a/aa// a/a.a/aa
+a/a.a/a.aa a/a.a/a.aa
+a/a.a/a.a. a/a.a/a.a.
+a/a.a/a.a/ a/a.a/a.a
+a/a.a/a..a a/a.a/a..a
+a/a.a/a... a/a.a/a...
+a/a.a/a../ a/a.a/a..
+a/a.a/a./a a/a.a/a./a
+a/a.a/a./. a/a.a/a.
+a/a.a/a.// a/a.a/a.
+a/a.a/a/aa a/a.a/a/aa
+a/a.a/a/a. a/a.a/a/a.
+a/a.a/a/a/ a/a.a/a/a
+a/a.a/a/.a a/a.a/a/.a
+a/a.a/a/.. a/a.a
+a/a.a/a/./ a/a.a/a
+a/a.a/a//a a/a.a/a/a
+a/a.a/a//. a/a.a/a
+a/a.a/a/// a/a.a/a
+a/a.a/.aaa a/a.a/.aaa
+a/a.a/.aa. a/a.a/.aa.
+a/a.a/.aa/ a/a.a/.aa
+a/a.a/.a.a a/a.a/.a.a
+a/a.a/.a.. a/a.a/.a..
+a/a.a/.a./ a/a.a/.a.
+a/a.a/.a/a a/a.a/.a/a
+a/a.a/.a/. a/a.a/.a
+a/a.a/.a// a/a.a/.a
+a/a.a/..aa a/a.a/..aa
+a/a.a/..a. a/a.a/..a.
+a/a.a/..a/ a/a.a/..a
+a/a.a/...a a/a.a/...a
+a/a.a/.... a/a.a/....
+a/a.a/.../ a/a.a/...
+a/a.a/../a a/a
+a/a.a/../. a
+a/a.a/..// a
+a/a.a/./aa a/a.a/aa
+a/a.a/./a. a/a.a/a.
+a/a.a/./a/ a/a.a/a
+a/a.a/./.a a/a.a/.a
+a/a.a/./.. a
+a/a.a/././ a/a.a
+a/a.a/.//a a/a.a/a
+a/a.a/.//. a/a.a
+a/a.a/./// a/a.a
+a/a.a//aaa a/a.a/aaa
+a/a.a//aa. a/a.a/aa.
+a/a.a//aa/ a/a.a/aa
+a/a.a//a.a a/a.a/a.a
+a/a.a//a.. a/a.a/a..
+a/a.a//a./ a/a.a/a.
+a/a.a//a/a a/a.a/a/a
+a/a.a//a/. a/a.a/a
+a/a.a//a// a/a.a/a
+a/a.a//.aa a/a.a/.aa
+a/a.a//.a. a/a.a/.a.
+a/a.a//.a/ a/a.a/.a
+a/a.a//..a a/a.a/..a
+a/a.a//... a/a.a/...
+a/a.a//../ a
+a/a.a//./a a/a.a/a
+a/a.a//./. a/a.a
+a/a.a//.// a/a.a
+a/a.a///aa a/a.a/aa
+a/a.a///a. a/a.a/a.
+a/a.a///a/ a/a.a/a
+a/a.a///.a a/a.a/.a
+a/a.a///.. a
+a/a.a///./ a/a.a
+a/a.a////a a/a.a/a
+a/a.a////. a/a.a
+a/a.a///// a/a.a
+a/a..aaaaa a/a..aaaaa
+a/a..aaaa. a/a..aaaa.
+a/a..aaaa/ a/a..aaaa
+a/a..aaa.a a/a..aaa.a
+a/a..aaa.. a/a..aaa..
+a/a..aaa./ a/a..aaa.
+a/a..aaa/a a/a..aaa/a
+a/a..aaa/. a/a..aaa
+a/a..aaa// a/a..aaa
+a/a..aa.aa a/a..aa.aa
+a/a..aa.a. a/a..aa.a.
+a/a..aa.a/ a/a..aa.a
+a/a..aa..a a/a..aa..a
+a/a..aa... a/a..aa...
+a/a..aa../ a/a..aa..
+a/a..aa./a a/a..aa./a
+a/a..aa./. a/a..aa.
+a/a..aa.// a/a..aa.
+a/a..aa/aa a/a..aa/aa
+a/a..aa/a. a/a..aa/a.
+a/a..aa/a/ a/a..aa/a
+a/a..aa/.a a/a..aa/.a
+a/a..aa/.. a
+a/a..aa/./ a/a..aa
+a/a..aa//a a/a..aa/a
+a/a..aa//. a/a..aa
+a/a..aa/// a/a..aa
+a/a..a.aaa a/a..a.aaa
+a/a..a.aa. a/a..a.aa.
+a/a..a.aa/ a/a..a.aa
+a/a..a.a.a a/a..a.a.a
+a/a..a.a.. a/a..a.a..
+a/a..a.a./ a/a..a.a.
+a/a..a.a/a a/a..a.a/a
+a/a..a.a/. a/a..a.a
+a/a..a.a// a/a..a.a
+a/a..a..aa a/a..a..aa
+a/a..a..a. a/a..a..a.
+a/a..a..a/ a/a..a..a
+a/a..a...a a/a..a...a
+a/a..a.... a/a..a....
+a/a..a.../ a/a..a...
+a/a..a../a a/a..a../a
+a/a..a../. a/a..a..
+a/a..a..// a/a..a..
+a/a..a./aa a/a..a./aa
+a/a..a./a. a/a..a./a.
+a/a..a./a/ a/a..a./a
+a/a..a./.a a/a..a./.a
+a/a..a./.. a
+a/a..a././ a/a..a.
+a/a..a.//a a/a..a./a
+a/a..a.//. a/a..a.
+a/a..a./// a/a..a.
+a/a..a/aaa a/a..a/aaa
+a/a..a/aa. a/a..a/aa.
+a/a..a/aa/ a/a..a/aa
+a/a..a/a.a a/a..a/a.a
+a/a..a/a.. a/a..a/a..
+a/a..a/a./ a/a..a/a.
+a/a..a/a/a a/a..a/a/a
+a/a..a/a/. a/a..a/a
+a/a..a/a// a/a..a/a
+a/a..a/.aa a/a..a/.aa
+a/a..a/.a. a/a..a/.a.
+a/a..a/.a/ a/a..a/.a
+a/a..a/..a a/a..a/..a
+a/a..a/... a/a..a/...
+a/a..a/../ a
+a/a..a/./a a/a..a/a
+a/a..a/./. a/a..a
+a/a..a/.// a/a..a
+a/a..a//aa a/a..a/aa
+a/a..a//a. a/a..a/a.
+a/a..a//a/ a/a..a/a
+a/a..a//.a a/a..a/.a
+a/a..a//.. a
+a/a..a//./ a/a..a
+a/a..a///a a/a..a/a
+a/a..a///. a/a..a
+a/a..a//// a/a..a
+a/a...aaaa a/a...aaaa
+a/a...aaa. a/a...aaa.
+a/a...aaa/ a/a...aaa
+a/a...aa.a a/a...aa.a
+a/a...aa.. a/a...aa..
+a/a...aa./ a/a...aa.
+a/a...aa/a a/a...aa/a
+a/a...aa/. a/a...aa
+a/a...aa// a/a...aa
+a/a...a.aa a/a...a.aa
+a/a...a.a. a/a...a.a.
+a/a...a.a/ a/a...a.a
+a/a...a..a a/a...a..a
+a/a...a... a/a...a...
+a/a...a../ a/a...a..
+a/a...a./a a/a...a./a
+a/a...a./. a/a...a.
+a/a...a.// a/a...a.
+a/a...a/aa a/a...a/aa
+a/a...a/a. a/a...a/a.
+a/a...a/a/ a/a...a/a
+a/a...a/.a a/a...a/.a
+a/a...a/.. a
+a/a...a/./ a/a...a
+a/a...a//a a/a...a/a
+a/a...a//. a/a...a
+a/a...a/// a/a...a
+a/a....aaa a/a....aaa
+a/a....aa. a/a....aa.
+a/a....aa/ a/a....aa
+a/a....a.a a/a....a.a
+a/a....a.. a/a....a..
+a/a....a./ a/a....a.
+a/a....a/a a/a....a/a
+a/a....a/. a/a....a
+a/a....a// a/a....a
+a/a.....aa a/a.....aa
+a/a.....a. a/a.....a.
+a/a.....a/ a/a.....a
+a/a......a a/a......a
+a/a....... a/a.......
+a/a....../ a/a......
+a/a...../a a/a...../a
+a/a...../. a/a.....
+a/a.....// a/a.....
+a/a..../aa a/a..../aa
+a/a..../a. a/a..../a.
+a/a..../a/ a/a..../a
+a/a..../.a a/a..../.a
+a/a..../.. a
+a/a...././ a/a....
+a/a....//a a/a..../a
+a/a....//. a/a....
+a/a..../// a/a....
+a/a.../aaa a/a.../aaa
+a/a.../aa. a/a.../aa.
+a/a.../aa/ a/a.../aa
+a/a.../a.a a/a.../a.a
+a/a.../a.. a/a.../a..
+a/a.../a./ a/a.../a.
+a/a.../a/a a/a.../a/a
+a/a.../a/. a/a.../a
+a/a.../a// a/a.../a
+a/a.../.aa a/a.../.aa
+a/a.../.a. a/a.../.a.
+a/a.../.a/ a/a.../.a
+a/a.../..a a/a.../..a
+a/a.../... a/a.../...
+a/a.../../ a
+a/a..././a a/a.../a
+a/a..././. a/a...
+a/a.../.// a/a...
+a/a...//aa a/a.../aa
+a/a...//a. a/a.../a.
+a/a...//a/ a/a.../a
+a/a...//.a a/a.../.a
+a/a...//.. a
+a/a...//./ a/a...
+a/a...///a a/a.../a
+a/a...///. a/a...
+a/a...//// a/a...
+a/a../aaaa a/a../aaaa
+a/a../aaa. a/a../aaa.
+a/a../aaa/ a/a../aaa
+a/a../aa.a a/a../aa.a
+a/a../aa.. a/a../aa..
+a/a../aa./ a/a../aa.
+a/a../aa/a a/a../aa/a
+a/a../aa/. a/a../aa
+a/a../aa// a/a../aa
+a/a../a.aa a/a../a.aa
+a/a../a.a. a/a../a.a.
+a/a../a.a/ a/a../a.a
+a/a../a..a a/a../a..a
+a/a../a... a/a../a...
+a/a../a../ a/a../a..
+a/a../a./a a/a../a./a
+a/a../a./. a/a../a.
+a/a../a.// a/a../a.
+a/a../a/aa a/a../a/aa
+a/a../a/a. a/a../a/a.
+a/a../a/a/ a/a../a/a
+a/a../a/.a a/a../a/.a
+a/a../a/.. a/a..
+a/a../a/./ a/a../a
+a/a../a//a a/a../a/a
+a/a../a//. a/a../a
+a/a../a/// a/a../a
+a/a../.aaa a/a../.aaa
+a/a../.aa. a/a../.aa.
+a/a../.aa/ a/a../.aa
+a/a../.a.a a/a../.a.a
+a/a../.a.. a/a../.a..
+a/a../.a./ a/a../.a.
+a/a../.a/a a/a../.a/a
+a/a../.a/. a/a../.a
+a/a../.a// a/a../.a
+a/a../..aa a/a../..aa
+a/a../..a. a/a../..a.
+a/a../..a/ a/a../..a
+a/a../...a a/a../...a
+a/a../.... a/a../....
+a/a../.../ a/a../...
+a/a../../a a/a
+a/a../../. a
+a/a../..// a
+a/a.././aa a/a../aa
+a/a.././a. a/a../a.
+a/a.././a/ a/a../a
+a/a.././.a a/a../.a
+a/a.././.. a
+a/a../././ a/a..
+a/a.././/a a/a../a
+a/a.././/. a/a..
+a/a.././// a/a..
+a/a..//aaa a/a../aaa
+a/a..//aa. a/a../aa.
+a/a..//aa/ a/a../aa
+a/a..//a.a a/a../a.a
+a/a..//a.. a/a../a..
+a/a..//a./ a/a../a.
+a/a..//a/a a/a../a/a
+a/a..//a/. a/a../a
+a/a..//a// a/a../a
+a/a..//.aa a/a../.aa
+a/a..//.a. a/a../.a.
+a/a..//.a/ a/a../.a
+a/a..//..a a/a../..a
+a/a..//... a/a../...
+a/a..//../ a
+a/a..//./a a/a../a
+a/a..//./. a/a..
+a/a..//.// a/a..
+a/a..///aa a/a../aa
+a/a..///a. a/a../a.
+a/a..///a/ a/a../a
+a/a..///.a a/a../.a
+a/a..///.. a
+a/a..///./ a/a..
+a/a..////a a/a../a
+a/a..////. a/a..
+a/a..///// a/a..
+a/a./aaaaa a/a./aaaaa
+a/a./aaaa. a/a./aaaa.
+a/a./aaaa/ a/a./aaaa
+a/a./aaa.a a/a./aaa.a
+a/a./aaa.. a/a./aaa..
+a/a./aaa./ a/a./aaa.
+a/a./aaa/a a/a./aaa/a
+a/a./aaa/. a/a./aaa
+a/a./aaa// a/a./aaa
+a/a./aa.aa a/a./aa.aa
+a/a./aa.a. a/a./aa.a.
+a/a./aa.a/ a/a./aa.a
+a/a./aa..a a/a./aa..a
+a/a./aa... a/a./aa...
+a/a./aa../ a/a./aa..
+a/a./aa./a a/a./aa./a
+a/a./aa./. a/a./aa.
+a/a./aa.// a/a./aa.
+a/a./aa/aa a/a./aa/aa
+a/a./aa/a. a/a./aa/a.
+a/a./aa/a/ a/a./aa/a
+a/a./aa/.a a/a./aa/.a
+a/a./aa/.. a/a.
+a/a./aa/./ a/a./aa
+a/a./aa//a a/a./aa/a
+a/a./aa//. a/a./aa
+a/a./aa/// a/a./aa
+a/a./a.aaa a/a./a.aaa
+a/a./a.aa. a/a./a.aa.
+a/a./a.aa/ a/a./a.aa
+a/a./a.a.a a/a./a.a.a
+a/a./a.a.. a/a./a.a..
+a/a./a.a./ a/a./a.a.
+a/a./a.a/a a/a./a.a/a
+a/a./a.a/. a/a./a.a
+a/a./a.a// a/a./a.a
+a/a./a..aa a/a./a..aa
+a/a./a..a. a/a./a..a.
+a/a./a..a/ a/a./a..a
+a/a./a...a a/a./a...a
+a/a./a.... a/a./a....
+a/a./a.../ a/a./a...
+a/a./a../a a/a./a../a
+a/a./a../. a/a./a..
+a/a./a..// a/a./a..
+a/a./a./aa a/a./a./aa
+a/a./a./a. a/a./a./a.
+a/a./a./a/ a/a./a./a
+a/a./a./.a a/a./a./.a
+a/a./a./.. a/a.
+a/a./a././ a/a./a.
+a/a./a.//a a/a./a./a
+a/a./a.//. a/a./a.
+a/a./a./// a/a./a.
+a/a./a/aaa a/a./a/aaa
+a/a./a/aa. a/a./a/aa.
+a/a./a/aa/ a/a./a/aa
+a/a./a/a.a a/a./a/a.a
+a/a./a/a.. a/a./a/a..
+a/a./a/a./ a/a./a/a.
+a/a./a/a/a a/a./a/a/a
+a/a./a/a/. a/a./a/a
+a/a./a/a// a/a./a/a
+a/a./a/.aa a/a./a/.aa
+a/a./a/.a. a/a./a/.a.
+a/a./a/.a/ a/a./a/.a
+a/a./a/..a a/a./a/..a
+a/a./a/... a/a./a/...
+a/a./a/../ a/a.
+a/a./a/./a a/a./a/a
+a/a./a/./. a/a./a
+a/a./a/.// a/a./a
+a/a./a//aa a/a./a/aa
+a/a./a//a. a/a./a/a.
+a/a./a//a/ a/a./a/a
+a/a./a//.a a/a./a/.a
+a/a./a//.. a/a.
+a/a./a//./ a/a./a
+a/a./a///a a/a./a/a
+a/a./a///. a/a./a
+a/a./a//// a/a./a
+a/a./.aaaa a/a./.aaaa
+a/a./.aaa. a/a./.aaa.
+a/a./.aaa/ a/a./.aaa
+a/a./.aa.a a/a./.aa.a
+a/a./.aa.. a/a./.aa..
+a/a./.aa./ a/a./.aa.
+a/a./.aa/a a/a./.aa/a
+a/a./.aa/. a/a./.aa
+a/a./.aa// a/a./.aa
+a/a./.a.aa a/a./.a.aa
+a/a./.a.a. a/a./.a.a.
+a/a./.a.a/ a/a./.a.a
+a/a./.a..a a/a./.a..a
+a/a./.a... a/a./.a...
+a/a./.a../ a/a./.a..
+a/a./.a./a a/a./.a./a
+a/a./.a./. a/a./.a.
+a/a./.a.// a/a./.a.
+a/a./.a/aa a/a./.a/aa
+a/a./.a/a. a/a./.a/a.
+a/a./.a/a/ a/a./.a/a
+a/a./.a/.a a/a./.a/.a
+a/a./.a/.. a/a.
+a/a./.a/./ a/a./.a
+a/a./.a//a a/a./.a/a
+a/a./.a//. a/a./.a
+a/a./.a/// a/a./.a
+a/a./..aaa a/a./..aaa
+a/a./..aa. a/a./..aa.
+a/a./..aa/ a/a./..aa
+a/a./..a.a a/a./..a.a
+a/a./..a.. a/a./..a..
+a/a./..a./ a/a./..a.
+a/a./..a/a a/a./..a/a
+a/a./..a/. a/a./..a
+a/a./..a// a/a./..a
+a/a./...aa a/a./...aa
+a/a./...a. a/a./...a.
+a/a./...a/ a/a./...a
+a/a./....a a/a./....a
+a/a./..... a/a./.....
+a/a./..../ a/a./....
+a/a./.../a a/a./.../a
+a/a./.../. a/a./...
+a/a./...// a/a./...
+a/a./../aa a/aa
+a/a./../a. a/a.
+a/a./../a/ a/a
+a/a./../.a a/.a
+a/a./../.. .
+a/a./.././ a
+a/a./..//a a/a
+a/a./..//. a
+a/a./../// a
+a/a././aaa a/a./aaa
+a/a././aa. a/a./aa.
+a/a././aa/ a/a./aa
+a/a././a.a a/a./a.a
+a/a././a.. a/a./a..
+a/a././a./ a/a./a.
+a/a././a/a a/a./a/a
+a/a././a/. a/a./a
+a/a././a// a/a./a
+a/a././.aa a/a./.aa
+a/a././.a. a/a./.a.
+a/a././.a/ a/a./.a
+a/a././..a a/a./..a
+a/a././... a/a./...
+a/a././../ a
+a/a./././a a/a./a
+a/a./././. a/a.
+a/a././.// a/a.
+a/a././/aa a/a./aa
+a/a././/a. a/a./a.
+a/a././/a/ a/a./a
+a/a././/.a a/a./.a
+a/a././/.. a
+a/a././/./ a/a.
+a/a././//a a/a./a
+a/a././//. a/a.
+a/a././/// a/a.
+a/a.//aaaa a/a./aaaa
+a/a.//aaa. a/a./aaa.
+a/a.//aaa/ a/a./aaa
+a/a.//aa.a a/a./aa.a
+a/a.//aa.. a/a./aa..
+a/a.//aa./ a/a./aa.
+a/a.//aa/a a/a./aa/a
+a/a.//aa/. a/a./aa
+a/a.//aa// a/a./aa
+a/a.//a.aa a/a./a.aa
+a/a.//a.a. a/a./a.a.
+a/a.//a.a/ a/a./a.a
+a/a.//a..a a/a./a..a
+a/a.//a... a/a./a...
+a/a.//a../ a/a./a..
+a/a.//a./a a/a./a./a
+a/a.//a./. a/a./a.
+a/a.//a.// a/a./a.
+a/a.//a/aa a/a./a/aa
+a/a.//a/a. a/a./a/a.
+a/a.//a/a/ a/a./a/a
+a/a.//a/.a a/a./a/.a
+a/a.//a/.. a/a.
+a/a.//a/./ a/a./a
+a/a.//a//a a/a./a/a
+a/a.//a//. a/a./a
+a/a.//a/// a/a./a
+a/a.//.aaa a/a./.aaa
+a/a.//.aa. a/a./.aa.
+a/a.//.aa/ a/a./.aa
+a/a.//.a.a a/a./.a.a
+a/a.//.a.. a/a./.a..
+a/a.//.a./ a/a./.a.
+a/a.//.a/a a/a./.a/a
+a/a.//.a/. a/a./.a
+a/a.//.a// a/a./.a
+a/a.//..aa a/a./..aa
+a/a.//..a. a/a./..a.
+a/a.//..a/ a/a./..a
+a/a.//...a a/a./...a
+a/a.//.... a/a./....
+a/a.//.../ a/a./...
+a/a.//../a a/a
+a/a.//../. a
+a/a.//..// a
+a/a.//./aa a/a./aa
+a/a.//./a. a/a./a.
+a/a.//./a/ a/a./a
+a/a.//./.a a/a./.a
+a/a.//./.. a
+a/a.//././ a/a.
+a/a.//.//a a/a./a
+a/a.//.//. a/a.
+a/a.//./// a/a.
+a/a.///aaa a/a./aaa
+a/a.///aa. a/a./aa.
+a/a.///aa/ a/a./aa
+a/a.///a.a a/a./a.a
+a/a.///a.. a/a./a..
+a/a.///a./ a/a./a.
+a/a.///a/a a/a./a/a
+a/a.///a/. a/a./a
+a/a.///a// a/a./a
+a/a.///.aa a/a./.aa
+a/a.///.a. a/a./.a.
+a/a.///.a/ a/a./.a
+a/a.///..a a/a./..a
+a/a.///... a/a./...
+a/a.///../ a
+a/a.///./a a/a./a
+a/a.///./. a/a.
+a/a.///.// a/a.
+a/a.////aa a/a./aa
+a/a.////a. a/a./a.
+a/a.////a/ a/a./a
+a/a.////.a a/a./.a
+a/a.////.. a
+a/a.////./ a/a.
+a/a./////a a/a./a
+a/a./////. a/a.
+a/a.////// a/a.
+a/a/aaaaaa a/a/aaaaaa
+a/a/aaaaa. a/a/aaaaa.
+a/a/aaaaa/ a/a/aaaaa
+a/a/aaaa.a a/a/aaaa.a
+a/a/aaaa.. a/a/aaaa..
+a/a/aaaa./ a/a/aaaa.
+a/a/aaaa/a a/a/aaaa/a
+a/a/aaaa/. a/a/aaaa
+a/a/aaaa// a/a/aaaa
+a/a/aaa.aa a/a/aaa.aa
+a/a/aaa.a. a/a/aaa.a.
+a/a/aaa.a/ a/a/aaa.a
+a/a/aaa..a a/a/aaa..a
+a/a/aaa... a/a/aaa...
+a/a/aaa../ a/a/aaa..
+a/a/aaa./a a/a/aaa./a
+a/a/aaa./. a/a/aaa.
+a/a/aaa.// a/a/aaa.
+a/a/aaa/aa a/a/aaa/aa
+a/a/aaa/a. a/a/aaa/a.
+a/a/aaa/a/ a/a/aaa/a
+a/a/aaa/.a a/a/aaa/.a
+a/a/aaa/.. a/a
+a/a/aaa/./ a/a/aaa
+a/a/aaa//a a/a/aaa/a
+a/a/aaa//. a/a/aaa
+a/a/aaa/// a/a/aaa
+a/a/aa.aaa a/a/aa.aaa
+a/a/aa.aa. a/a/aa.aa.
+a/a/aa.aa/ a/a/aa.aa
+a/a/aa.a.a a/a/aa.a.a
+a/a/aa.a.. a/a/aa.a..
+a/a/aa.a./ a/a/aa.a.
+a/a/aa.a/a a/a/aa.a/a
+a/a/aa.a/. a/a/aa.a
+a/a/aa.a// a/a/aa.a
+a/a/aa..aa a/a/aa..aa
+a/a/aa..a. a/a/aa..a.
+a/a/aa..a/ a/a/aa..a
+a/a/aa...a a/a/aa...a
+a/a/aa.... a/a/aa....
+a/a/aa.../ a/a/aa...
+a/a/aa../a a/a/aa../a
+a/a/aa../. a/a/aa..
+a/a/aa..// a/a/aa..
+a/a/aa./aa a/a/aa./aa
+a/a/aa./a. a/a/aa./a.
+a/a/aa./a/ a/a/aa./a
+a/a/aa./.a a/a/aa./.a
+a/a/aa./.. a/a
+a/a/aa././ a/a/aa.
+a/a/aa.//a a/a/aa./a
+a/a/aa.//. a/a/aa.
+a/a/aa./// a/a/aa.
+a/a/aa/aaa a/a/aa/aaa
+a/a/aa/aa. a/a/aa/aa.
+a/a/aa/aa/ a/a/aa/aa
+a/a/aa/a.a a/a/aa/a.a
+a/a/aa/a.. a/a/aa/a..
+a/a/aa/a./ a/a/aa/a.
+a/a/aa/a/a a/a/aa/a/a
+a/a/aa/a/. a/a/aa/a
+a/a/aa/a// a/a/aa/a
+a/a/aa/.aa a/a/aa/.aa
+a/a/aa/.a. a/a/aa/.a.
+a/a/aa/.a/ a/a/aa/.a
+a/a/aa/..a a/a/aa/..a
+a/a/aa/... a/a/aa/...
+a/a/aa/../ a/a
+a/a/aa/./a a/a/aa/a
+a/a/aa/./. a/a/aa
+a/a/aa/.// a/a/aa
+a/a/aa//aa a/a/aa/aa
+a/a/aa//a. a/a/aa/a.
+a/a/aa//a/ a/a/aa/a
+a/a/aa//.a a/a/aa/.a
+a/a/aa//.. a/a
+a/a/aa//./ a/a/aa
+a/a/aa///a a/a/aa/a
+a/a/aa///. a/a/aa
+a/a/aa//// a/a/aa
+a/a/a.aaaa a/a/a.aaaa
+a/a/a.aaa. a/a/a.aaa.
+a/a/a.aaa/ a/a/a.aaa
+a/a/a.aa.a a/a/a.aa.a
+a/a/a.aa.. a/a/a.aa..
+a/a/a.aa./ a/a/a.aa.
+a/a/a.aa/a a/a/a.aa/a
+a/a/a.aa/. a/a/a.aa
+a/a/a.aa// a/a/a.aa
+a/a/a.a.aa a/a/a.a.aa
+a/a/a.a.a. a/a/a.a.a.
+a/a/a.a.a/ a/a/a.a.a
+a/a/a.a..a a/a/a.a..a
+a/a/a.a... a/a/a.a...
+a/a/a.a../ a/a/a.a..
+a/a/a.a./a a/a/a.a./a
+a/a/a.a./. a/a/a.a.
+a/a/a.a.// a/a/a.a.
+a/a/a.a/aa a/a/a.a/aa
+a/a/a.a/a. a/a/a.a/a.
+a/a/a.a/a/ a/a/a.a/a
+a/a/a.a/.a a/a/a.a/.a
+a/a/a.a/.. a/a
+a/a/a.a/./ a/a/a.a
+a/a/a.a//a a/a/a.a/a
+a/a/a.a//. a/a/a.a
+a/a/a.a/// a/a/a.a
+a/a/a..aaa a/a/a..aaa
+a/a/a..aa. a/a/a..aa.
+a/a/a..aa/ a/a/a..aa
+a/a/a..a.a a/a/a..a.a
+a/a/a..a.. a/a/a..a..
+a/a/a..a./ a/a/a..a.
+a/a/a..a/a a/a/a..a/a
+a/a/a..a/. a/a/a..a
+a/a/a..a// a/a/a..a
+a/a/a...aa a/a/a...aa
+a/a/a...a. a/a/a...a.
+a/a/a...a/ a/a/a...a
+a/a/a....a a/a/a....a
+a/a/a..... a/a/a.....
+a/a/a..../ a/a/a....
+a/a/a.../a a/a/a.../a
+a/a/a.../. a/a/a...
+a/a/a...// a/a/a...
+a/a/a../aa a/a/a../aa
+a/a/a../a. a/a/a../a.
+a/a/a../a/ a/a/a../a
+a/a/a../.a a/a/a../.a
+a/a/a../.. a/a
+a/a/a.././ a/a/a..
+a/a/a..//a a/a/a../a
+a/a/a..//. a/a/a..
+a/a/a../// a/a/a..
+a/a/a./aaa a/a/a./aaa
+a/a/a./aa. a/a/a./aa.
+a/a/a./aa/ a/a/a./aa
+a/a/a./a.a a/a/a./a.a
+a/a/a./a.. a/a/a./a..
+a/a/a./a./ a/a/a./a.
+a/a/a./a/a a/a/a./a/a
+a/a/a./a/. a/a/a./a
+a/a/a./a// a/a/a./a
+a/a/a./.aa a/a/a./.aa
+a/a/a./.a. a/a/a./.a.
+a/a/a./.a/ a/a/a./.a
+a/a/a./..a a/a/a./..a
+a/a/a./... a/a/a./...
+a/a/a./../ a/a
+a/a/a././a a/a/a./a
+a/a/a././. a/a/a.
+a/a/a./.// a/a/a.
+a/a/a.//aa a/a/a./aa
+a/a/a.//a. a/a/a./a.
+a/a/a.//a/ a/a/a./a
+a/a/a.//.a a/a/a./.a
+a/a/a.//.. a/a
+a/a/a.//./ a/a/a.
+a/a/a.///a a/a/a./a
+a/a/a.///. a/a/a.
+a/a/a.//// a/a/a.
+a/a/a/aaaa a/a/a/aaaa
+a/a/a/aaa. a/a/a/aaa.
+a/a/a/aaa/ a/a/a/aaa
+a/a/a/aa.a a/a/a/aa.a
+a/a/a/aa.. a/a/a/aa..
+a/a/a/aa./ a/a/a/aa.
+a/a/a/aa/a a/a/a/aa/a
+a/a/a/aa/. a/a/a/aa
+a/a/a/aa// a/a/a/aa
+a/a/a/a.aa a/a/a/a.aa
+a/a/a/a.a. a/a/a/a.a.
+a/a/a/a.a/ a/a/a/a.a
+a/a/a/a..a a/a/a/a..a
+a/a/a/a... a/a/a/a...
+a/a/a/a../ a/a/a/a..
+a/a/a/a./a a/a/a/a./a
+a/a/a/a./. a/a/a/a.
+a/a/a/a.// a/a/a/a.
+a/a/a/a/aa a/a/a/a/aa
+a/a/a/a/a. a/a/a/a/a.
+a/a/a/a/a/ a/a/a/a/a
+a/a/a/a/.a a/a/a/a/.a
+a/a/a/a/.. a/a/a
+a/a/a/a/./ a/a/a/a
+a/a/a/a//a a/a/a/a/a
+a/a/a/a//. a/a/a/a
+a/a/a/a/// a/a/a/a
+a/a/a/.aaa a/a/a/.aaa
+a/a/a/.aa. a/a/a/.aa.
+a/a/a/.aa/ a/a/a/.aa
+a/a/a/.a.a a/a/a/.a.a
+a/a/a/.a.. a/a/a/.a..
+a/a/a/.a./ a/a/a/.a.
+a/a/a/.a/a a/a/a/.a/a
+a/a/a/.a/. a/a/a/.a
+a/a/a/.a// a/a/a/.a
+a/a/a/..aa a/a/a/..aa
+a/a/a/..a. a/a/a/..a.
+a/a/a/..a/ a/a/a/..a
+a/a/a/...a a/a/a/...a
+a/a/a/.... a/a/a/....
+a/a/a/.../ a/a/a/...
+a/a/a/../a a/a/a
+a/a/a/../. a/a
+a/a/a/..// a/a
+a/a/a/./aa a/a/a/aa
+a/a/a/./a. a/a/a/a.
+a/a/a/./a/ a/a/a/a
+a/a/a/./.a a/a/a/.a
+a/a/a/./.. a/a
+a/a/a/././ a/a/a
+a/a/a/.//a a/a/a/a
+a/a/a/.//. a/a/a
+a/a/a/./// a/a/a
+a/a/a//aaa a/a/a/aaa
+a/a/a//aa. a/a/a/aa.
+a/a/a//aa/ a/a/a/aa
+a/a/a//a.a a/a/a/a.a
+a/a/a//a.. a/a/a/a..
+a/a/a//a./ a/a/a/a.
+a/a/a//a/a a/a/a/a/a
+a/a/a//a/. a/a/a/a
+a/a/a//a// a/a/a/a
+a/a/a//.aa a/a/a/.aa
+a/a/a//.a. a/a/a/.a.
+a/a/a//.a/ a/a/a/.a
+a/a/a//..a a/a/a/..a
+a/a/a//... a/a/a/...
+a/a/a//../ a/a
+a/a/a//./a a/a/a/a
+a/a/a//./. a/a/a
+a/a/a//.// a/a/a
+a/a/a///aa a/a/a/aa
+a/a/a///a. a/a/a/a.
+a/a/a///a/ a/a/a/a
+a/a/a///.a a/a/a/.a
+a/a/a///.. a/a
+a/a/a///./ a/a/a
+a/a/a////a a/a/a/a
+a/a/a////. a/a/a
+a/a/a///// a/a/a
+a/a/.aaaaa a/a/.aaaaa
+a/a/.aaaa. a/a/.aaaa.
+a/a/.aaaa/ a/a/.aaaa
+a/a/.aaa.a a/a/.aaa.a
+a/a/.aaa.. a/a/.aaa..
+a/a/.aaa./ a/a/.aaa.
+a/a/.aaa/a a/a/.aaa/a
+a/a/.aaa/. a/a/.aaa
+a/a/.aaa// a/a/.aaa
+a/a/.aa.aa a/a/.aa.aa
+a/a/.aa.a. a/a/.aa.a.
+a/a/.aa.a/ a/a/.aa.a
+a/a/.aa..a a/a/.aa..a
+a/a/.aa... a/a/.aa...
+a/a/.aa../ a/a/.aa..
+a/a/.aa./a a/a/.aa./a
+a/a/.aa./. a/a/.aa.
+a/a/.aa.// a/a/.aa.
+a/a/.aa/aa a/a/.aa/aa
+a/a/.aa/a. a/a/.aa/a.
+a/a/.aa/a/ a/a/.aa/a
+a/a/.aa/.a a/a/.aa/.a
+a/a/.aa/.. a/a
+a/a/.aa/./ a/a/.aa
+a/a/.aa//a a/a/.aa/a
+a/a/.aa//. a/a/.aa
+a/a/.aa/// a/a/.aa
+a/a/.a.aaa a/a/.a.aaa
+a/a/.a.aa. a/a/.a.aa.
+a/a/.a.aa/ a/a/.a.aa
+a/a/.a.a.a a/a/.a.a.a
+a/a/.a.a.. a/a/.a.a..
+a/a/.a.a./ a/a/.a.a.
+a/a/.a.a/a a/a/.a.a/a
+a/a/.a.a/. a/a/.a.a
+a/a/.a.a// a/a/.a.a
+a/a/.a..aa a/a/.a..aa
+a/a/.a..a. a/a/.a..a.
+a/a/.a..a/ a/a/.a..a
+a/a/.a...a a/a/.a...a
+a/a/.a.... a/a/.a....
+a/a/.a.../ a/a/.a...
+a/a/.a../a a/a/.a../a
+a/a/.a../. a/a/.a..
+a/a/.a..// a/a/.a..
+a/a/.a./aa a/a/.a./aa
+a/a/.a./a. a/a/.a./a.
+a/a/.a./a/ a/a/.a./a
+a/a/.a./.a a/a/.a./.a
+a/a/.a./.. a/a
+a/a/.a././ a/a/.a.
+a/a/.a.//a a/a/.a./a
+a/a/.a.//. a/a/.a.
+a/a/.a./// a/a/.a.
+a/a/.a/aaa a/a/.a/aaa
+a/a/.a/aa. a/a/.a/aa.
+a/a/.a/aa/ a/a/.a/aa
+a/a/.a/a.a a/a/.a/a.a
+a/a/.a/a.. a/a/.a/a..
+a/a/.a/a./ a/a/.a/a.
+a/a/.a/a/a a/a/.a/a/a
+a/a/.a/a/. a/a/.a/a
+a/a/.a/a// a/a/.a/a
+a/a/.a/.aa a/a/.a/.aa
+a/a/.a/.a. a/a/.a/.a.
+a/a/.a/.a/ a/a/.a/.a
+a/a/.a/..a a/a/.a/..a
+a/a/.a/... a/a/.a/...
+a/a/.a/../ a/a
+a/a/.a/./a a/a/.a/a
+a/a/.a/./. a/a/.a
+a/a/.a/.// a/a/.a
+a/a/.a//aa a/a/.a/aa
+a/a/.a//a. a/a/.a/a.
+a/a/.a//a/ a/a/.a/a
+a/a/.a//.a a/a/.a/.a
+a/a/.a//.. a/a
+a/a/.a//./ a/a/.a
+a/a/.a///a a/a/.a/a
+a/a/.a///. a/a/.a
+a/a/.a//// a/a/.a
+a/a/..aaaa a/a/..aaaa
+a/a/..aaa. a/a/..aaa.
+a/a/..aaa/ a/a/..aaa
+a/a/..aa.a a/a/..aa.a
+a/a/..aa.. a/a/..aa..
+a/a/..aa./ a/a/..aa.
+a/a/..aa/a a/a/..aa/a
+a/a/..aa/. a/a/..aa
+a/a/..aa// a/a/..aa
+a/a/..a.aa a/a/..a.aa
+a/a/..a.a. a/a/..a.a.
+a/a/..a.a/ a/a/..a.a
+a/a/..a..a a/a/..a..a
+a/a/..a... a/a/..a...
+a/a/..a../ a/a/..a..
+a/a/..a./a a/a/..a./a
+a/a/..a./. a/a/..a.
+a/a/..a.// a/a/..a.
+a/a/..a/aa a/a/..a/aa
+a/a/..a/a. a/a/..a/a.
+a/a/..a/a/ a/a/..a/a
+a/a/..a/.a a/a/..a/.a
+a/a/..a/.. a/a
+a/a/..a/./ a/a/..a
+a/a/..a//a a/a/..a/a
+a/a/..a//. a/a/..a
+a/a/..a/// a/a/..a
+a/a/...aaa a/a/...aaa
+a/a/...aa. a/a/...aa.
+a/a/...aa/ a/a/...aa
+a/a/...a.a a/a/...a.a
+a/a/...a.. a/a/...a..
+a/a/...a./ a/a/...a.
+a/a/...a/a a/a/...a/a
+a/a/...a/. a/a/...a
+a/a/...a// a/a/...a
+a/a/....aa a/a/....aa
+a/a/....a. a/a/....a.
+a/a/....a/ a/a/....a
+a/a/.....a a/a/.....a
+a/a/...... a/a/......
+a/a/...../ a/a/.....
+a/a/..../a a/a/..../a
+a/a/..../. a/a/....
+a/a/....// a/a/....
+a/a/.../aa a/a/.../aa
+a/a/.../a. a/a/.../a.
+a/a/.../a/ a/a/.../a
+a/a/.../.a a/a/.../.a
+a/a/.../.. a/a
+a/a/..././ a/a/...
+a/a/...//a a/a/.../a
+a/a/...//. a/a/...
+a/a/.../// a/a/...
+a/a/../aaa a/aaa
+a/a/../aa. a/aa.
+a/a/../aa/ a/aa
+a/a/../a.a a/a.a
+a/a/../a.. a/a..
+a/a/../a./ a/a.
+a/a/../a/a a/a/a
+a/a/../a/. a/a
+a/a/../a// a/a
+a/a/../.aa a/.aa
+a/a/../.a. a/.a.
+a/a/../.a/ a/.a
+a/a/../..a a/..a
+a/a/../... a/...
+a/a/../../ .
+a/a/.././a a/a
+a/a/.././. a
+a/a/../.// a
+a/a/..//aa a/aa
+a/a/..//a. a/a.
+a/a/..//a/ a/a
+a/a/..//.a a/.a
+a/a/..//.. .
+a/a/..//./ a
+a/a/..///a a/a
+a/a/..///. a
+a/a/..//// a
+a/a/./aaaa a/a/aaaa
+a/a/./aaa. a/a/aaa.
+a/a/./aaa/ a/a/aaa
+a/a/./aa.a a/a/aa.a
+a/a/./aa.. a/a/aa..
+a/a/./aa./ a/a/aa.
+a/a/./aa/a a/a/aa/a
+a/a/./aa/. a/a/aa
+a/a/./aa// a/a/aa
+a/a/./a.aa a/a/a.aa
+a/a/./a.a. a/a/a.a.
+a/a/./a.a/ a/a/a.a
+a/a/./a..a a/a/a..a
+a/a/./a... a/a/a...
+a/a/./a../ a/a/a..
+a/a/./a./a a/a/a./a
+a/a/./a./. a/a/a.
+a/a/./a.// a/a/a.
+a/a/./a/aa a/a/a/aa
+a/a/./a/a. a/a/a/a.
+a/a/./a/a/ a/a/a/a
+a/a/./a/.a a/a/a/.a
+a/a/./a/.. a/a
+a/a/./a/./ a/a/a
+a/a/./a//a a/a/a/a
+a/a/./a//. a/a/a
+a/a/./a/// a/a/a
+a/a/./.aaa a/a/.aaa
+a/a/./.aa. a/a/.aa.
+a/a/./.aa/ a/a/.aa
+a/a/./.a.a a/a/.a.a
+a/a/./.a.. a/a/.a..
+a/a/./.a./ a/a/.a.
+a/a/./.a/a a/a/.a/a
+a/a/./.a/. a/a/.a
+a/a/./.a// a/a/.a
+a/a/./..aa a/a/..aa
+a/a/./..a. a/a/..a.
+a/a/./..a/ a/a/..a
+a/a/./...a a/a/...a
+a/a/./.... a/a/....
+a/a/./.../ a/a/...
+a/a/./../a a/a
+a/a/./../. a
+a/a/./..// a
+a/a/././aa a/a/aa
+a/a/././a. a/a/a.
+a/a/././a/ a/a/a
+a/a/././.a a/a/.a
+a/a/././.. a
+a/a/./././ a/a
+a/a/././/a a/a/a
+a/a/././/. a/a
+a/a/././// a/a
+a/a/.//aaa a/a/aaa
+a/a/.//aa. a/a/aa.
+a/a/.//aa/ a/a/aa
+a/a/.//a.a a/a/a.a
+a/a/.//a.. a/a/a..
+a/a/.//a./ a/a/a.
+a/a/.//a/a a/a/a/a
+a/a/.//a/. a/a/a
+a/a/.//a// a/a/a
+a/a/.//.aa a/a/.aa
+a/a/.//.a. a/a/.a.
+a/a/.//.a/ a/a/.a
+a/a/.//..a a/a/..a
+a/a/.//... a/a/...
+a/a/.//../ a
+a/a/.//./a a/a/a
+a/a/.//./. a/a
+a/a/.//.// a/a
+a/a/.///aa a/a/aa
+a/a/.///a. a/a/a.
+a/a/.///a/ a/a/a
+a/a/.///.a a/a/.a
+a/a/.///.. a
+a/a/.///./ a/a
+a/a/.////a a/a/a
+a/a/.////. a/a
+a/a/.///// a/a
+a/a//aaaaa a/a/aaaaa
+a/a//aaaa. a/a/aaaa.
+a/a//aaaa/ a/a/aaaa
+a/a//aaa.a a/a/aaa.a
+a/a//aaa.. a/a/aaa..
+a/a//aaa./ a/a/aaa.
+a/a//aaa/a a/a/aaa/a
+a/a//aaa/. a/a/aaa
+a/a//aaa// a/a/aaa
+a/a//aa.aa a/a/aa.aa
+a/a//aa.a. a/a/aa.a.
+a/a//aa.a/ a/a/aa.a
+a/a//aa..a a/a/aa..a
+a/a//aa... a/a/aa...
+a/a//aa../ a/a/aa..
+a/a//aa./a a/a/aa./a
+a/a//aa./. a/a/aa.
+a/a//aa.// a/a/aa.
+a/a//aa/aa a/a/aa/aa
+a/a//aa/a. a/a/aa/a.
+a/a//aa/a/ a/a/aa/a
+a/a//aa/.a a/a/aa/.a
+a/a//aa/.. a/a
+a/a//aa/./ a/a/aa
+a/a//aa//a a/a/aa/a
+a/a//aa//. a/a/aa
+a/a//aa/// a/a/aa
+a/a//a.aaa a/a/a.aaa
+a/a//a.aa. a/a/a.aa.
+a/a//a.aa/ a/a/a.aa
+a/a//a.a.a a/a/a.a.a
+a/a//a.a.. a/a/a.a..
+a/a//a.a./ a/a/a.a.
+a/a//a.a/a a/a/a.a/a
+a/a//a.a/. a/a/a.a
+a/a//a.a// a/a/a.a
+a/a//a..aa a/a/a..aa
+a/a//a..a. a/a/a..a.
+a/a//a..a/ a/a/a..a
+a/a//a...a a/a/a...a
+a/a//a.... a/a/a....
+a/a//a.../ a/a/a...
+a/a//a../a a/a/a../a
+a/a//a../. a/a/a..
+a/a//a..// a/a/a..
+a/a//a./aa a/a/a./aa
+a/a//a./a. a/a/a./a.
+a/a//a./a/ a/a/a./a
+a/a//a./.a a/a/a./.a
+a/a//a./.. a/a
+a/a//a././ a/a/a.
+a/a//a.//a a/a/a./a
+a/a//a.//. a/a/a.
+a/a//a./// a/a/a.
+a/a//a/aaa a/a/a/aaa
+a/a//a/aa. a/a/a/aa.
+a/a//a/aa/ a/a/a/aa
+a/a//a/a.a a/a/a/a.a
+a/a//a/a.. a/a/a/a..
+a/a//a/a./ a/a/a/a.
+a/a//a/a/a a/a/a/a/a
+a/a//a/a/. a/a/a/a
+a/a//a/a// a/a/a/a
+a/a//a/.aa a/a/a/.aa
+a/a//a/.a. a/a/a/.a.
+a/a//a/.a/ a/a/a/.a
+a/a//a/..a a/a/a/..a
+a/a//a/... a/a/a/...
+a/a//a/../ a/a
+a/a//a/./a a/a/a/a
+a/a//a/./. a/a/a
+a/a//a/.// a/a/a
+a/a//a//aa a/a/a/aa
+a/a//a//a. a/a/a/a.
+a/a//a//a/ a/a/a/a
+a/a//a//.a a/a/a/.a
+a/a//a//.. a/a
+a/a//a//./ a/a/a
+a/a//a///a a/a/a/a
+a/a//a///. a/a/a
+a/a//a//// a/a/a
+a/a//.aaaa a/a/.aaaa
+a/a//.aaa. a/a/.aaa.
+a/a//.aaa/ a/a/.aaa
+a/a//.aa.a a/a/.aa.a
+a/a//.aa.. a/a/.aa..
+a/a//.aa./ a/a/.aa.
+a/a//.aa/a a/a/.aa/a
+a/a//.aa/. a/a/.aa
+a/a//.aa// a/a/.aa
+a/a//.a.aa a/a/.a.aa
+a/a//.a.a. a/a/.a.a.
+a/a//.a.a/ a/a/.a.a
+a/a//.a..a a/a/.a..a
+a/a//.a... a/a/.a...
+a/a//.a../ a/a/.a..
+a/a//.a./a a/a/.a./a
+a/a//.a./. a/a/.a.
+a/a//.a.// a/a/.a.
+a/a//.a/aa a/a/.a/aa
+a/a//.a/a. a/a/.a/a.
+a/a//.a/a/ a/a/.a/a
+a/a//.a/.a a/a/.a/.a
+a/a//.a/.. a/a
+a/a//.a/./ a/a/.a
+a/a//.a//a a/a/.a/a
+a/a//.a//. a/a/.a
+a/a//.a/// a/a/.a
+a/a//..aaa a/a/..aaa
+a/a//..aa. a/a/..aa.
+a/a//..aa/ a/a/..aa
+a/a//..a.a a/a/..a.a
+a/a//..a.. a/a/..a..
+a/a//..a./ a/a/..a.
+a/a//..a/a a/a/..a/a
+a/a//..a/. a/a/..a
+a/a//..a// a/a/..a
+a/a//...aa a/a/...aa
+a/a//...a. a/a/...a.
+a/a//...a/ a/a/...a
+a/a//....a a/a/....a
+a/a//..... a/a/.....
+a/a//..../ a/a/....
+a/a//.../a a/a/.../a
+a/a//.../. a/a/...
+a/a//...// a/a/...
+a/a//../aa a/aa
+a/a//../a. a/a.
+a/a//../a/ a/a
+a/a//../.a a/.a
+a/a//../.. .
+a/a//.././ a
+a/a//..//a a/a
+a/a//..//. a
+a/a//../// a
+a/a//./aaa a/a/aaa
+a/a//./aa. a/a/aa.
+a/a//./aa/ a/a/aa
+a/a//./a.a a/a/a.a
+a/a//./a.. a/a/a..
+a/a//./a./ a/a/a.
+a/a//./a/a a/a/a/a
+a/a//./a/. a/a/a
+a/a//./a// a/a/a
+a/a//./.aa a/a/.aa
+a/a//./.a. a/a/.a.
+a/a//./.a/ a/a/.a
+a/a//./..a a/a/..a
+a/a//./... a/a/...
+a/a//./../ a
+a/a//././a a/a/a
+a/a//././. a/a
+a/a//./.// a/a
+a/a//.//aa a/a/aa
+a/a//.//a. a/a/a.
+a/a//.//a/ a/a/a
+a/a//.//.a a/a/.a
+a/a//.//.. a
+a/a//.//./ a/a
+a/a//.///a a/a/a
+a/a//.///. a/a
+a/a//.//// a/a
+a/a///aaaa a/a/aaaa
+a/a///aaa. a/a/aaa.
+a/a///aaa/ a/a/aaa
+a/a///aa.a a/a/aa.a
+a/a///aa.. a/a/aa..
+a/a///aa./ a/a/aa.
+a/a///aa/a a/a/aa/a
+a/a///aa/. a/a/aa
+a/a///aa// a/a/aa
+a/a///a.aa a/a/a.aa
+a/a///a.a. a/a/a.a.
+a/a///a.a/ a/a/a.a
+a/a///a..a a/a/a..a
+a/a///a... a/a/a...
+a/a///a../ a/a/a..
+a/a///a./a a/a/a./a
+a/a///a./. a/a/a.
+a/a///a.// a/a/a.
+a/a///a/aa a/a/a/aa
+a/a///a/a. a/a/a/a.
+a/a///a/a/ a/a/a/a
+a/a///a/.a a/a/a/.a
+a/a///a/.. a/a
+a/a///a/./ a/a/a
+a/a///a//a a/a/a/a
+a/a///a//. a/a/a
+a/a///a/// a/a/a
+a/a///.aaa a/a/.aaa
+a/a///.aa. a/a/.aa.
+a/a///.aa/ a/a/.aa
+a/a///.a.a a/a/.a.a
+a/a///.a.. a/a/.a..
+a/a///.a./ a/a/.a.
+a/a///.a/a a/a/.a/a
+a/a///.a/. a/a/.a
+a/a///.a// a/a/.a
+a/a///..aa a/a/..aa
+a/a///..a. a/a/..a.
+a/a///..a/ a/a/..a
+a/a///...a a/a/...a
+a/a///.... a/a/....
+a/a///.../ a/a/...
+a/a///../a a/a
+a/a///../. a
+a/a///..// a
+a/a///./aa a/a/aa
+a/a///./a. a/a/a.
+a/a///./a/ a/a/a
+a/a///./.a a/a/.a
+a/a///./.. a
+a/a///././ a/a
+a/a///.//a a/a/a
+a/a///.//. a/a
+a/a///./// a/a
+a/a////aaa a/a/aaa
+a/a////aa. a/a/aa.
+a/a////aa/ a/a/aa
+a/a////a.a a/a/a.a
+a/a////a.. a/a/a..
+a/a////a./ a/a/a.
+a/a////a/a a/a/a/a
+a/a////a/. a/a/a
+a/a////a// a/a/a
+a/a////.aa a/a/.aa
+a/a////.a. a/a/.a.
+a/a////.a/ a/a/.a
+a/a////..a a/a/..a
+a/a////... a/a/...
+a/a////../ a
+a/a////./a a/a/a
+a/a////./. a/a
+a/a////.// a/a
+a/a/////aa a/a/aa
+a/a/////a. a/a/a.
+a/a/////a/ a/a/a
+a/a/////.a a/a/.a
+a/a/////.. a
+a/a/////./ a/a
+a/a//////a a/a/a
+a/a//////. a/a
+a/a/////// a/a
+a/.aaaaaaa a/.aaaaaaa
+a/.aaaaaa. a/.aaaaaa.
+a/.aaaaaa/ a/.aaaaaa
+a/.aaaaa.a a/.aaaaa.a
+a/.aaaaa.. a/.aaaaa..
+a/.aaaaa./ a/.aaaaa.
+a/.aaaaa/a a/.aaaaa/a
+a/.aaaaa/. a/.aaaaa
+a/.aaaaa// a/.aaaaa
+a/.aaaa.aa a/.aaaa.aa
+a/.aaaa.a. a/.aaaa.a.
+a/.aaaa.a/ a/.aaaa.a
+a/.aaaa..a a/.aaaa..a
+a/.aaaa... a/.aaaa...
+a/.aaaa../ a/.aaaa..
+a/.aaaa./a a/.aaaa./a
+a/.aaaa./. a/.aaaa.
+a/.aaaa.// a/.aaaa.
+a/.aaaa/aa a/.aaaa/aa
+a/.aaaa/a. a/.aaaa/a.
+a/.aaaa/a/ a/.aaaa/a
+a/.aaaa/.a a/.aaaa/.a
+a/.aaaa/.. a
+a/.aaaa/./ a/.aaaa
+a/.aaaa//a a/.aaaa/a
+a/.aaaa//. a/.aaaa
+a/.aaaa/// a/.aaaa
+a/.aaa.aaa a/.aaa.aaa
+a/.aaa.aa. a/.aaa.aa.
+a/.aaa.aa/ a/.aaa.aa
+a/.aaa.a.a a/.aaa.a.a
+a/.aaa.a.. a/.aaa.a..
+a/.aaa.a./ a/.aaa.a.
+a/.aaa.a/a a/.aaa.a/a
+a/.aaa.a/. a/.aaa.a
+a/.aaa.a// a/.aaa.a
+a/.aaa..aa a/.aaa..aa
+a/.aaa..a. a/.aaa..a.
+a/.aaa..a/ a/.aaa..a
+a/.aaa...a a/.aaa...a
+a/.aaa.... a/.aaa....
+a/.aaa.../ a/.aaa...
+a/.aaa../a a/.aaa../a
+a/.aaa../. a/.aaa..
+a/.aaa..// a/.aaa..
+a/.aaa./aa a/.aaa./aa
+a/.aaa./a. a/.aaa./a.
+a/.aaa./a/ a/.aaa./a
+a/.aaa./.a a/.aaa./.a
+a/.aaa./.. a
+a/.aaa././ a/.aaa.
+a/.aaa.//a a/.aaa./a
+a/.aaa.//. a/.aaa.
+a/.aaa./// a/.aaa.
+a/.aaa/aaa a/.aaa/aaa
+a/.aaa/aa. a/.aaa/aa.
+a/.aaa/aa/ a/.aaa/aa
+a/.aaa/a.a a/.aaa/a.a
+a/.aaa/a.. a/.aaa/a..
+a/.aaa/a./ a/.aaa/a.
+a/.aaa/a/a a/.aaa/a/a
+a/.aaa/a/. a/.aaa/a
+a/.aaa/a// a/.aaa/a
+a/.aaa/.aa a/.aaa/.aa
+a/.aaa/.a. a/.aaa/.a.
+a/.aaa/.a/ a/.aaa/.a
+a/.aaa/..a a/.aaa/..a
+a/.aaa/... a/.aaa/...
+a/.aaa/../ a
+a/.aaa/./a a/.aaa/a
+a/.aaa/./. a/.aaa
+a/.aaa/.// a/.aaa
+a/.aaa//aa a/.aaa/aa
+a/.aaa//a. a/.aaa/a.
+a/.aaa//a/ a/.aaa/a
+a/.aaa//.a a/.aaa/.a
+a/.aaa//.. a
+a/.aaa//./ a/.aaa
+a/.aaa///a a/.aaa/a
+a/.aaa///. a/.aaa
+a/.aaa//// a/.aaa
+a/.aa.aaaa a/.aa.aaaa
+a/.aa.aaa. a/.aa.aaa.
+a/.aa.aaa/ a/.aa.aaa
+a/.aa.aa.a a/.aa.aa.a
+a/.aa.aa.. a/.aa.aa..
+a/.aa.aa./ a/.aa.aa.
+a/.aa.aa/a a/.aa.aa/a
+a/.aa.aa/. a/.aa.aa
+a/.aa.aa// a/.aa.aa
+a/.aa.a.aa a/.aa.a.aa
+a/.aa.a.a. a/.aa.a.a.
+a/.aa.a.a/ a/.aa.a.a
+a/.aa.a..a a/.aa.a..a
+a/.aa.a... a/.aa.a...
+a/.aa.a../ a/.aa.a..
+a/.aa.a./a a/.aa.a./a
+a/.aa.a./. a/.aa.a.
+a/.aa.a.// a/.aa.a.
+a/.aa.a/aa a/.aa.a/aa
+a/.aa.a/a. a/.aa.a/a.
+a/.aa.a/a/ a/.aa.a/a
+a/.aa.a/.a a/.aa.a/.a
+a/.aa.a/.. a
+a/.aa.a/./ a/.aa.a
+a/.aa.a//a a/.aa.a/a
+a/.aa.a//. a/.aa.a
+a/.aa.a/// a/.aa.a
+a/.aa..aaa a/.aa..aaa
+a/.aa..aa. a/.aa..aa.
+a/.aa..aa/ a/.aa..aa
+a/.aa..a.a a/.aa..a.a
+a/.aa..a.. a/.aa..a..
+a/.aa..a./ a/.aa..a.
+a/.aa..a/a a/.aa..a/a
+a/.aa..a/. a/.aa..a
+a/.aa..a// a/.aa..a
+a/.aa...aa a/.aa...aa
+a/.aa...a. a/.aa...a.
+a/.aa...a/ a/.aa...a
+a/.aa....a a/.aa....a
+a/.aa..... a/.aa.....
+a/.aa..../ a/.aa....
+a/.aa.../a a/.aa.../a
+a/.aa.../. a/.aa...
+a/.aa...// a/.aa...
+a/.aa../aa a/.aa../aa
+a/.aa../a. a/.aa../a.
+a/.aa../a/ a/.aa../a
+a/.aa../.a a/.aa../.a
+a/.aa../.. a
+a/.aa.././ a/.aa..
+a/.aa..//a a/.aa../a
+a/.aa..//. a/.aa..
+a/.aa../// a/.aa..
+a/.aa./aaa a/.aa./aaa
+a/.aa./aa. a/.aa./aa.
+a/.aa./aa/ a/.aa./aa
+a/.aa./a.a a/.aa./a.a
+a/.aa./a.. a/.aa./a..
+a/.aa./a./ a/.aa./a.
+a/.aa./a/a a/.aa./a/a
+a/.aa./a/. a/.aa./a
+a/.aa./a// a/.aa./a
+a/.aa./.aa a/.aa./.aa
+a/.aa./.a. a/.aa./.a.
+a/.aa./.a/ a/.aa./.a
+a/.aa./..a a/.aa./..a
+a/.aa./... a/.aa./...
+a/.aa./../ a
+a/.aa././a a/.aa./a
+a/.aa././. a/.aa.
+a/.aa./.// a/.aa.
+a/.aa.//aa a/.aa./aa
+a/.aa.//a. a/.aa./a.
+a/.aa.//a/ a/.aa./a
+a/.aa.//.a a/.aa./.a
+a/.aa.//.. a
+a/.aa.//./ a/.aa.
+a/.aa.///a a/.aa./a
+a/.aa.///. a/.aa.
+a/.aa.//// a/.aa.
+a/.aa/aaaa a/.aa/aaaa
+a/.aa/aaa. a/.aa/aaa.
+a/.aa/aaa/ a/.aa/aaa
+a/.aa/aa.a a/.aa/aa.a
+a/.aa/aa.. a/.aa/aa..
+a/.aa/aa./ a/.aa/aa.
+a/.aa/aa/a a/.aa/aa/a
+a/.aa/aa/. a/.aa/aa
+a/.aa/aa// a/.aa/aa
+a/.aa/a.aa a/.aa/a.aa
+a/.aa/a.a. a/.aa/a.a.
+a/.aa/a.a/ a/.aa/a.a
+a/.aa/a..a a/.aa/a..a
+a/.aa/a... a/.aa/a...
+a/.aa/a../ a/.aa/a..
+a/.aa/a./a a/.aa/a./a
+a/.aa/a./. a/.aa/a.
+a/.aa/a.// a/.aa/a.
+a/.aa/a/aa a/.aa/a/aa
+a/.aa/a/a. a/.aa/a/a.
+a/.aa/a/a/ a/.aa/a/a
+a/.aa/a/.a a/.aa/a/.a
+a/.aa/a/.. a/.aa
+a/.aa/a/./ a/.aa/a
+a/.aa/a//a a/.aa/a/a
+a/.aa/a//. a/.aa/a
+a/.aa/a/// a/.aa/a
+a/.aa/.aaa a/.aa/.aaa
+a/.aa/.aa. a/.aa/.aa.
+a/.aa/.aa/ a/.aa/.aa
+a/.aa/.a.a a/.aa/.a.a
+a/.aa/.a.. a/.aa/.a..
+a/.aa/.a./ a/.aa/.a.
+a/.aa/.a/a a/.aa/.a/a
+a/.aa/.a/. a/.aa/.a
+a/.aa/.a// a/.aa/.a
+a/.aa/..aa a/.aa/..aa
+a/.aa/..a. a/.aa/..a.
+a/.aa/..a/ a/.aa/..a
+a/.aa/...a a/.aa/...a
+a/.aa/.... a/.aa/....
+a/.aa/.../ a/.aa/...
+a/.aa/../a a/a
+a/.aa/../. a
+a/.aa/..// a
+a/.aa/./aa a/.aa/aa
+a/.aa/./a. a/.aa/a.
+a/.aa/./a/ a/.aa/a
+a/.aa/./.a a/.aa/.a
+a/.aa/./.. a
+a/.aa/././ a/.aa
+a/.aa/.//a a/.aa/a
+a/.aa/.//. a/.aa
+a/.aa/./// a/.aa
+a/.aa//aaa a/.aa/aaa
+a/.aa//aa. a/.aa/aa.
+a/.aa//aa/ a/.aa/aa
+a/.aa//a.a a/.aa/a.a
+a/.aa//a.. a/.aa/a..
+a/.aa//a./ a/.aa/a.
+a/.aa//a/a a/.aa/a/a
+a/.aa//a/. a/.aa/a
+a/.aa//a// a/.aa/a
+a/.aa//.aa a/.aa/.aa
+a/.aa//.a. a/.aa/.a.
+a/.aa//.a/ a/.aa/.a
+a/.aa//..a a/.aa/..a
+a/.aa//... a/.aa/...
+a/.aa//../ a
+a/.aa//./a a/.aa/a
+a/.aa//./. a/.aa
+a/.aa//.// a/.aa
+a/.aa///aa a/.aa/aa
+a/.aa///a. a/.aa/a.
+a/.aa///a/ a/.aa/a
+a/.aa///.a a/.aa/.a
+a/.aa///.. a
+a/.aa///./ a/.aa
+a/.aa////a a/.aa/a
+a/.aa////. a/.aa
+a/.aa///// a/.aa
+a/.a.aaaaa a/.a.aaaaa
+a/.a.aaaa. a/.a.aaaa.
+a/.a.aaaa/ a/.a.aaaa
+a/.a.aaa.a a/.a.aaa.a
+a/.a.aaa.. a/.a.aaa..
+a/.a.aaa./ a/.a.aaa.
+a/.a.aaa/a a/.a.aaa/a
+a/.a.aaa/. a/.a.aaa
+a/.a.aaa// a/.a.aaa
+a/.a.aa.aa a/.a.aa.aa
+a/.a.aa.a. a/.a.aa.a.
+a/.a.aa.a/ a/.a.aa.a
+a/.a.aa..a a/.a.aa..a
+a/.a.aa... a/.a.aa...
+a/.a.aa../ a/.a.aa..
+a/.a.aa./a a/.a.aa./a
+a/.a.aa./. a/.a.aa.
+a/.a.aa.// a/.a.aa.
+a/.a.aa/aa a/.a.aa/aa
+a/.a.aa/a. a/.a.aa/a.
+a/.a.aa/a/ a/.a.aa/a
+a/.a.aa/.a a/.a.aa/.a
+a/.a.aa/.. a
+a/.a.aa/./ a/.a.aa
+a/.a.aa//a a/.a.aa/a
+a/.a.aa//. a/.a.aa
+a/.a.aa/// a/.a.aa
+a/.a.a.aaa a/.a.a.aaa
+a/.a.a.aa. a/.a.a.aa.
+a/.a.a.aa/ a/.a.a.aa
+a/.a.a.a.a a/.a.a.a.a
+a/.a.a.a.. a/.a.a.a..
+a/.a.a.a./ a/.a.a.a.
+a/.a.a.a/a a/.a.a.a/a
+a/.a.a.a/. a/.a.a.a
+a/.a.a.a// a/.a.a.a
+a/.a.a..aa a/.a.a..aa
+a/.a.a..a. a/.a.a..a.
+a/.a.a..a/ a/.a.a..a
+a/.a.a...a a/.a.a...a
+a/.a.a.... a/.a.a....
+a/.a.a.../ a/.a.a...
+a/.a.a../a a/.a.a../a
+a/.a.a../. a/.a.a..
+a/.a.a..// a/.a.a..
+a/.a.a./aa a/.a.a./aa
+a/.a.a./a. a/.a.a./a.
+a/.a.a./a/ a/.a.a./a
+a/.a.a./.a a/.a.a./.a
+a/.a.a./.. a
+a/.a.a././ a/.a.a.
+a/.a.a.//a a/.a.a./a
+a/.a.a.//. a/.a.a.
+a/.a.a./// a/.a.a.
+a/.a.a/aaa a/.a.a/aaa
+a/.a.a/aa. a/.a.a/aa.
+a/.a.a/aa/ a/.a.a/aa
+a/.a.a/a.a a/.a.a/a.a
+a/.a.a/a.. a/.a.a/a..
+a/.a.a/a./ a/.a.a/a.
+a/.a.a/a/a a/.a.a/a/a
+a/.a.a/a/. a/.a.a/a
+a/.a.a/a// a/.a.a/a
+a/.a.a/.aa a/.a.a/.aa
+a/.a.a/.a. a/.a.a/.a.
+a/.a.a/.a/ a/.a.a/.a
+a/.a.a/..a a/.a.a/..a
+a/.a.a/... a/.a.a/...
+a/.a.a/../ a
+a/.a.a/./a a/.a.a/a
+a/.a.a/./. a/.a.a
+a/.a.a/.// a/.a.a
+a/.a.a//aa a/.a.a/aa
+a/.a.a//a. a/.a.a/a.
+a/.a.a//a/ a/.a.a/a
+a/.a.a//.a a/.a.a/.a
+a/.a.a//.. a
+a/.a.a//./ a/.a.a
+a/.a.a///a a/.a.a/a
+a/.a.a///. a/.a.a
+a/.a.a//// a/.a.a
+a/.a..aaaa a/.a..aaaa
+a/.a..aaa. a/.a..aaa.
+a/.a..aaa/ a/.a..aaa
+a/.a..aa.a a/.a..aa.a
+a/.a..aa.. a/.a..aa..
+a/.a..aa./ a/.a..aa.
+a/.a..aa/a a/.a..aa/a
+a/.a..aa/. a/.a..aa
+a/.a..aa// a/.a..aa
+a/.a..a.aa a/.a..a.aa
+a/.a..a.a. a/.a..a.a.
+a/.a..a.a/ a/.a..a.a
+a/.a..a..a a/.a..a..a
+a/.a..a... a/.a..a...
+a/.a..a../ a/.a..a..
+a/.a..a./a a/.a..a./a
+a/.a..a./. a/.a..a.
+a/.a..a.// a/.a..a.
+a/.a..a/aa a/.a..a/aa
+a/.a..a/a. a/.a..a/a.
+a/.a..a/a/ a/.a..a/a
+a/.a..a/.a a/.a..a/.a
+a/.a..a/.. a
+a/.a..a/./ a/.a..a
+a/.a..a//a a/.a..a/a
+a/.a..a//. a/.a..a
+a/.a..a/// a/.a..a
+a/.a...aaa a/.a...aaa
+a/.a...aa. a/.a...aa.
+a/.a...aa/ a/.a...aa
+a/.a...a.a a/.a...a.a
+a/.a...a.. a/.a...a..
+a/.a...a./ a/.a...a.
+a/.a...a/a a/.a...a/a
+a/.a...a/. a/.a...a
+a/.a...a// a/.a...a
+a/.a....aa a/.a....aa
+a/.a....a. a/.a....a.
+a/.a....a/ a/.a....a
+a/.a.....a a/.a.....a
+a/.a...... a/.a......
+a/.a...../ a/.a.....
+a/.a..../a a/.a..../a
+a/.a..../. a/.a....
+a/.a....// a/.a....
+a/.a.../aa a/.a.../aa
+a/.a.../a. a/.a.../a.
+a/.a.../a/ a/.a.../a
+a/.a.../.a a/.a.../.a
+a/.a.../.. a
+a/.a..././ a/.a...
+a/.a...//a a/.a.../a
+a/.a...//. a/.a...
+a/.a.../// a/.a...
+a/.a../aaa a/.a../aaa
+a/.a../aa. a/.a../aa.
+a/.a../aa/ a/.a../aa
+a/.a../a.a a/.a../a.a
+a/.a../a.. a/.a../a..
+a/.a../a./ a/.a../a.
+a/.a../a/a a/.a../a/a
+a/.a../a/. a/.a../a
+a/.a../a// a/.a../a
+a/.a../.aa a/.a../.aa
+a/.a../.a. a/.a../.a.
+a/.a../.a/ a/.a../.a
+a/.a../..a a/.a../..a
+a/.a../... a/.a../...
+a/.a../../ a
+a/.a.././a a/.a../a
+a/.a.././. a/.a..
+a/.a../.// a/.a..
+a/.a..//aa a/.a../aa
+a/.a..//a. a/.a../a.
+a/.a..//a/ a/.a../a
+a/.a..//.a a/.a../.a
+a/.a..//.. a
+a/.a..//./ a/.a..
+a/.a..///a a/.a../a
+a/.a..///. a/.a..
+a/.a..//// a/.a..
+a/.a./aaaa a/.a./aaaa
+a/.a./aaa. a/.a./aaa.
+a/.a./aaa/ a/.a./aaa
+a/.a./aa.a a/.a./aa.a
+a/.a./aa.. a/.a./aa..
+a/.a./aa./ a/.a./aa.
+a/.a./aa/a a/.a./aa/a
+a/.a./aa/. a/.a./aa
+a/.a./aa// a/.a./aa
+a/.a./a.aa a/.a./a.aa
+a/.a./a.a. a/.a./a.a.
+a/.a./a.a/ a/.a./a.a
+a/.a./a..a a/.a./a..a
+a/.a./a... a/.a./a...
+a/.a./a../ a/.a./a..
+a/.a./a./a a/.a./a./a
+a/.a./a./. a/.a./a.
+a/.a./a.// a/.a./a.
+a/.a./a/aa a/.a./a/aa
+a/.a./a/a. a/.a./a/a.
+a/.a./a/a/ a/.a./a/a
+a/.a./a/.a a/.a./a/.a
+a/.a./a/.. a/.a.
+a/.a./a/./ a/.a./a
+a/.a./a//a a/.a./a/a
+a/.a./a//. a/.a./a
+a/.a./a/// a/.a./a
+a/.a./.aaa a/.a./.aaa
+a/.a./.aa. a/.a./.aa.
+a/.a./.aa/ a/.a./.aa
+a/.a./.a.a a/.a./.a.a
+a/.a./.a.. a/.a./.a..
+a/.a./.a./ a/.a./.a.
+a/.a./.a/a a/.a./.a/a
+a/.a./.a/. a/.a./.a
+a/.a./.a// a/.a./.a
+a/.a./..aa a/.a./..aa
+a/.a./..a. a/.a./..a.
+a/.a./..a/ a/.a./..a
+a/.a./...a a/.a./...a
+a/.a./.... a/.a./....
+a/.a./.../ a/.a./...
+a/.a./../a a/a
+a/.a./../. a
+a/.a./..// a
+a/.a././aa a/.a./aa
+a/.a././a. a/.a./a.
+a/.a././a/ a/.a./a
+a/.a././.a a/.a./.a
+a/.a././.. a
+a/.a./././ a/.a.
+a/.a././/a a/.a./a
+a/.a././/. a/.a.
+a/.a././// a/.a.
+a/.a.//aaa a/.a./aaa
+a/.a.//aa. a/.a./aa.
+a/.a.//aa/ a/.a./aa
+a/.a.//a.a a/.a./a.a
+a/.a.//a.. a/.a./a..
+a/.a.//a./ a/.a./a.
+a/.a.//a/a a/.a./a/a
+a/.a.//a/. a/.a./a
+a/.a.//a// a/.a./a
+a/.a.//.aa a/.a./.aa
+a/.a.//.a. a/.a./.a.
+a/.a.//.a/ a/.a./.a
+a/.a.//..a a/.a./..a
+a/.a.//... a/.a./...
+a/.a.//../ a
+a/.a.//./a a/.a./a
+a/.a.//./. a/.a.
+a/.a.//.// a/.a.
+a/.a.///aa a/.a./aa
+a/.a.///a. a/.a./a.
+a/.a.///a/ a/.a./a
+a/.a.///.a a/.a./.a
+a/.a.///.. a
+a/.a.///./ a/.a.
+a/.a.////a a/.a./a
+a/.a.////. a/.a.
+a/.a.///// a/.a.
+a/.a/aaaaa a/.a/aaaaa
+a/.a/aaaa. a/.a/aaaa.
+a/.a/aaaa/ a/.a/aaaa
+a/.a/aaa.a a/.a/aaa.a
+a/.a/aaa.. a/.a/aaa..
+a/.a/aaa./ a/.a/aaa.
+a/.a/aaa/a a/.a/aaa/a
+a/.a/aaa/. a/.a/aaa
+a/.a/aaa// a/.a/aaa
+a/.a/aa.aa a/.a/aa.aa
+a/.a/aa.a. a/.a/aa.a.
+a/.a/aa.a/ a/.a/aa.a
+a/.a/aa..a a/.a/aa..a
+a/.a/aa... a/.a/aa...
+a/.a/aa../ a/.a/aa..
+a/.a/aa./a a/.a/aa./a
+a/.a/aa./. a/.a/aa.
+a/.a/aa.// a/.a/aa.
+a/.a/aa/aa a/.a/aa/aa
+a/.a/aa/a. a/.a/aa/a.
+a/.a/aa/a/ a/.a/aa/a
+a/.a/aa/.a a/.a/aa/.a
+a/.a/aa/.. a/.a
+a/.a/aa/./ a/.a/aa
+a/.a/aa//a a/.a/aa/a
+a/.a/aa//. a/.a/aa
+a/.a/aa/// a/.a/aa
+a/.a/a.aaa a/.a/a.aaa
+a/.a/a.aa. a/.a/a.aa.
+a/.a/a.aa/ a/.a/a.aa
+a/.a/a.a.a a/.a/a.a.a
+a/.a/a.a.. a/.a/a.a..
+a/.a/a.a./ a/.a/a.a.
+a/.a/a.a/a a/.a/a.a/a
+a/.a/a.a/. a/.a/a.a
+a/.a/a.a// a/.a/a.a
+a/.a/a..aa a/.a/a..aa
+a/.a/a..a. a/.a/a..a.
+a/.a/a..a/ a/.a/a..a
+a/.a/a...a a/.a/a...a
+a/.a/a.... a/.a/a....
+a/.a/a.../ a/.a/a...
+a/.a/a../a a/.a/a../a
+a/.a/a../. a/.a/a..
+a/.a/a..// a/.a/a..
+a/.a/a./aa a/.a/a./aa
+a/.a/a./a. a/.a/a./a.
+a/.a/a./a/ a/.a/a./a
+a/.a/a./.a a/.a/a./.a
+a/.a/a./.. a/.a
+a/.a/a././ a/.a/a.
+a/.a/a.//a a/.a/a./a
+a/.a/a.//. a/.a/a.
+a/.a/a./// a/.a/a.
+a/.a/a/aaa a/.a/a/aaa
+a/.a/a/aa. a/.a/a/aa.
+a/.a/a/aa/ a/.a/a/aa
+a/.a/a/a.a a/.a/a/a.a
+a/.a/a/a.. a/.a/a/a..
+a/.a/a/a./ a/.a/a/a.
+a/.a/a/a/a a/.a/a/a/a
+a/.a/a/a/. a/.a/a/a
+a/.a/a/a// a/.a/a/a
+a/.a/a/.aa a/.a/a/.aa
+a/.a/a/.a. a/.a/a/.a.
+a/.a/a/.a/ a/.a/a/.a
+a/.a/a/..a a/.a/a/..a
+a/.a/a/... a/.a/a/...
+a/.a/a/../ a/.a
+a/.a/a/./a a/.a/a/a
+a/.a/a/./. a/.a/a
+a/.a/a/.// a/.a/a
+a/.a/a//aa a/.a/a/aa
+a/.a/a//a. a/.a/a/a.
+a/.a/a//a/ a/.a/a/a
+a/.a/a//.a a/.a/a/.a
+a/.a/a//.. a/.a
+a/.a/a//./ a/.a/a
+a/.a/a///a a/.a/a/a
+a/.a/a///. a/.a/a
+a/.a/a//// a/.a/a
+a/.a/.aaaa a/.a/.aaaa
+a/.a/.aaa. a/.a/.aaa.
+a/.a/.aaa/ a/.a/.aaa
+a/.a/.aa.a a/.a/.aa.a
+a/.a/.aa.. a/.a/.aa..
+a/.a/.aa./ a/.a/.aa.
+a/.a/.aa/a a/.a/.aa/a
+a/.a/.aa/. a/.a/.aa
+a/.a/.aa// a/.a/.aa
+a/.a/.a.aa a/.a/.a.aa
+a/.a/.a.a. a/.a/.a.a.
+a/.a/.a.a/ a/.a/.a.a
+a/.a/.a..a a/.a/.a..a
+a/.a/.a... a/.a/.a...
+a/.a/.a../ a/.a/.a..
+a/.a/.a./a a/.a/.a./a
+a/.a/.a./. a/.a/.a.
+a/.a/.a.// a/.a/.a.
+a/.a/.a/aa a/.a/.a/aa
+a/.a/.a/a. a/.a/.a/a.
+a/.a/.a/a/ a/.a/.a/a
+a/.a/.a/.a a/.a/.a/.a
+a/.a/.a/.. a/.a
+a/.a/.a/./ a/.a/.a
+a/.a/.a//a a/.a/.a/a
+a/.a/.a//. a/.a/.a
+a/.a/.a/// a/.a/.a
+a/.a/..aaa a/.a/..aaa
+a/.a/..aa. a/.a/..aa.
+a/.a/..aa/ a/.a/..aa
+a/.a/..a.a a/.a/..a.a
+a/.a/..a.. a/.a/..a..
+a/.a/..a./ a/.a/..a.
+a/.a/..a/a a/.a/..a/a
+a/.a/..a/. a/.a/..a
+a/.a/..a// a/.a/..a
+a/.a/...aa a/.a/...aa
+a/.a/...a. a/.a/...a.
+a/.a/...a/ a/.a/...a
+a/.a/....a a/.a/....a
+a/.a/..... a/.a/.....
+a/.a/..../ a/.a/....
+a/.a/.../a a/.a/.../a
+a/.a/.../. a/.a/...
+a/.a/...// a/.a/...
+a/.a/../aa a/aa
+a/.a/../a. a/a.
+a/.a/../a/ a/a
+a/.a/../.a a/.a
+a/.a/../.. .
+a/.a/.././ a
+a/.a/..//a a/a
+a/.a/..//. a
+a/.a/../// a
+a/.a/./aaa a/.a/aaa
+a/.a/./aa. a/.a/aa.
+a/.a/./aa/ a/.a/aa
+a/.a/./a.a a/.a/a.a
+a/.a/./a.. a/.a/a..
+a/.a/./a./ a/.a/a.
+a/.a/./a/a a/.a/a/a
+a/.a/./a/. a/.a/a
+a/.a/./a// a/.a/a
+a/.a/./.aa a/.a/.aa
+a/.a/./.a. a/.a/.a.
+a/.a/./.a/ a/.a/.a
+a/.a/./..a a/.a/..a
+a/.a/./... a/.a/...
+a/.a/./../ a
+a/.a/././a a/.a/a
+a/.a/././. a/.a
+a/.a/./.// a/.a
+a/.a/.//aa a/.a/aa
+a/.a/.//a. a/.a/a.
+a/.a/.//a/ a/.a/a
+a/.a/.//.a a/.a/.a
+a/.a/.//.. a
+a/.a/.//./ a/.a
+a/.a/.///a a/.a/a
+a/.a/.///. a/.a
+a/.a/.//// a/.a
+a/.a//aaaa a/.a/aaaa
+a/.a//aaa. a/.a/aaa.
+a/.a//aaa/ a/.a/aaa
+a/.a//aa.a a/.a/aa.a
+a/.a//aa.. a/.a/aa..
+a/.a//aa./ a/.a/aa.
+a/.a//aa/a a/.a/aa/a
+a/.a//aa/. a/.a/aa
+a/.a//aa// a/.a/aa
+a/.a//a.aa a/.a/a.aa
+a/.a//a.a. a/.a/a.a.
+a/.a//a.a/ a/.a/a.a
+a/.a//a..a a/.a/a..a
+a/.a//a... a/.a/a...
+a/.a//a../ a/.a/a..
+a/.a//a./a a/.a/a./a
+a/.a//a./. a/.a/a.
+a/.a//a.// a/.a/a.
+a/.a//a/aa a/.a/a/aa
+a/.a//a/a. a/.a/a/a.
+a/.a//a/a/ a/.a/a/a
+a/.a//a/.a a/.a/a/.a
+a/.a//a/.. a/.a
+a/.a//a/./ a/.a/a
+a/.a//a//a a/.a/a/a
+a/.a//a//. a/.a/a
+a/.a//a/// a/.a/a
+a/.a//.aaa a/.a/.aaa
+a/.a//.aa. a/.a/.aa.
+a/.a//.aa/ a/.a/.aa
+a/.a//.a.a a/.a/.a.a
+a/.a//.a.. a/.a/.a..
+a/.a//.a./ a/.a/.a.
+a/.a//.a/a a/.a/.a/a
+a/.a//.a/. a/.a/.a
+a/.a//.a// a/.a/.a
+a/.a//..aa a/.a/..aa
+a/.a//..a. a/.a/..a.
+a/.a//..a/ a/.a/..a
+a/.a//...a a/.a/...a
+a/.a//.... a/.a/....
+a/.a//.../ a/.a/...
+a/.a//../a a/a
+a/.a//../. a
+a/.a//..// a
+a/.a//./aa a/.a/aa
+a/.a//./a. a/.a/a.
+a/.a//./a/ a/.a/a
+a/.a//./.a a/.a/.a
+a/.a//./.. a
+a/.a//././ a/.a
+a/.a//.//a a/.a/a
+a/.a//.//. a/.a
+a/.a//./// a/.a
+a/.a///aaa a/.a/aaa
+a/.a///aa. a/.a/aa.
+a/.a///aa/ a/.a/aa
+a/.a///a.a a/.a/a.a
+a/.a///a.. a/.a/a..
+a/.a///a./ a/.a/a.
+a/.a///a/a a/.a/a/a
+a/.a///a/. a/.a/a
+a/.a///a// a/.a/a
+a/.a///.aa a/.a/.aa
+a/.a///.a. a/.a/.a.
+a/.a///.a/ a/.a/.a
+a/.a///..a a/.a/..a
+a/.a///... a/.a/...
+a/.a///../ a
+a/.a///./a a/.a/a
+a/.a///./. a/.a
+a/.a///.// a/.a
+a/.a////aa a/.a/aa
+a/.a////a. a/.a/a.
+a/.a////a/ a/.a/a
+a/.a////.a a/.a/.a
+a/.a////.. a
+a/.a////./ a/.a
+a/.a/////a a/.a/a
+a/.a/////. a/.a
+a/.a////// a/.a
+a/..aaaaaa a/..aaaaaa
+a/..aaaaa. a/..aaaaa.
+a/..aaaaa/ a/..aaaaa
+a/..aaaa.a a/..aaaa.a
+a/..aaaa.. a/..aaaa..
+a/..aaaa./ a/..aaaa.
+a/..aaaa/a a/..aaaa/a
+a/..aaaa/. a/..aaaa
+a/..aaaa// a/..aaaa
+a/..aaa.aa a/..aaa.aa
+a/..aaa.a. a/..aaa.a.
+a/..aaa.a/ a/..aaa.a
+a/..aaa..a a/..aaa..a
+a/..aaa... a/..aaa...
+a/..aaa../ a/..aaa..
+a/..aaa./a a/..aaa./a
+a/..aaa./. a/..aaa.
+a/..aaa.// a/..aaa.
+a/..aaa/aa a/..aaa/aa
+a/..aaa/a. a/..aaa/a.
+a/..aaa/a/ a/..aaa/a
+a/..aaa/.a a/..aaa/.a
+a/..aaa/.. a
+a/..aaa/./ a/..aaa
+a/..aaa//a a/..aaa/a
+a/..aaa//. a/..aaa
+a/..aaa/// a/..aaa
+a/..aa.aaa a/..aa.aaa
+a/..aa.aa. a/..aa.aa.
+a/..aa.aa/ a/..aa.aa
+a/..aa.a.a a/..aa.a.a
+a/..aa.a.. a/..aa.a..
+a/..aa.a./ a/..aa.a.
+a/..aa.a/a a/..aa.a/a
+a/..aa.a/. a/..aa.a
+a/..aa.a// a/..aa.a
+a/..aa..aa a/..aa..aa
+a/..aa..a. a/..aa..a.
+a/..aa..a/ a/..aa..a
+a/..aa...a a/..aa...a
+a/..aa.... a/..aa....
+a/..aa.../ a/..aa...
+a/..aa../a a/..aa../a
+a/..aa../. a/..aa..
+a/..aa..// a/..aa..
+a/..aa./aa a/..aa./aa
+a/..aa./a. a/..aa./a.
+a/..aa./a/ a/..aa./a
+a/..aa./.a a/..aa./.a
+a/..aa./.. a
+a/..aa././ a/..aa.
+a/..aa.//a a/..aa./a
+a/..aa.//. a/..aa.
+a/..aa./// a/..aa.
+a/..aa/aaa a/..aa/aaa
+a/..aa/aa. a/..aa/aa.
+a/..aa/aa/ a/..aa/aa
+a/..aa/a.a a/..aa/a.a
+a/..aa/a.. a/..aa/a..
+a/..aa/a./ a/..aa/a.
+a/..aa/a/a a/..aa/a/a
+a/..aa/a/. a/..aa/a
+a/..aa/a// a/..aa/a
+a/..aa/.aa a/..aa/.aa
+a/..aa/.a. a/..aa/.a.
+a/..aa/.a/ a/..aa/.a
+a/..aa/..a a/..aa/..a
+a/..aa/... a/..aa/...
+a/..aa/../ a
+a/..aa/./a a/..aa/a
+a/..aa/./. a/..aa
+a/..aa/.// a/..aa
+a/..aa//aa a/..aa/aa
+a/..aa//a. a/..aa/a.
+a/..aa//a/ a/..aa/a
+a/..aa//.a a/..aa/.a
+a/..aa//.. a
+a/..aa//./ a/..aa
+a/..aa///a a/..aa/a
+a/..aa///. a/..aa
+a/..aa//// a/..aa
+a/..a.aaaa a/..a.aaaa
+a/..a.aaa. a/..a.aaa.
+a/..a.aaa/ a/..a.aaa
+a/..a.aa.a a/..a.aa.a
+a/..a.aa.. a/..a.aa..
+a/..a.aa./ a/..a.aa.
+a/..a.aa/a a/..a.aa/a
+a/..a.aa/. a/..a.aa
+a/..a.aa// a/..a.aa
+a/..a.a.aa a/..a.a.aa
+a/..a.a.a. a/..a.a.a.
+a/..a.a.a/ a/..a.a.a
+a/..a.a..a a/..a.a..a
+a/..a.a... a/..a.a...
+a/..a.a../ a/..a.a..
+a/..a.a./a a/..a.a./a
+a/..a.a./. a/..a.a.
+a/..a.a.// a/..a.a.
+a/..a.a/aa a/..a.a/aa
+a/..a.a/a. a/..a.a/a.
+a/..a.a/a/ a/..a.a/a
+a/..a.a/.a a/..a.a/.a
+a/..a.a/.. a
+a/..a.a/./ a/..a.a
+a/..a.a//a a/..a.a/a
+a/..a.a//. a/..a.a
+a/..a.a/// a/..a.a
+a/..a..aaa a/..a..aaa
+a/..a..aa. a/..a..aa.
+a/..a..aa/ a/..a..aa
+a/..a..a.a a/..a..a.a
+a/..a..a.. a/..a..a..
+a/..a..a./ a/..a..a.
+a/..a..a/a a/..a..a/a
+a/..a..a/. a/..a..a
+a/..a..a// a/..a..a
+a/..a...aa a/..a...aa
+a/..a...a. a/..a...a.
+a/..a...a/ a/..a...a
+a/..a....a a/..a....a
+a/..a..... a/..a.....
+a/..a..../ a/..a....
+a/..a.../a a/..a.../a
+a/..a.../. a/..a...
+a/..a...// a/..a...
+a/..a../aa a/..a../aa
+a/..a../a. a/..a../a.
+a/..a../a/ a/..a../a
+a/..a../.a a/..a../.a
+a/..a../.. a
+a/..a.././ a/..a..
+a/..a..//a a/..a../a
+a/..a..//. a/..a..
+a/..a../// a/..a..
+a/..a./aaa a/..a./aaa
+a/..a./aa. a/..a./aa.
+a/..a./aa/ a/..a./aa
+a/..a./a.a a/..a./a.a
+a/..a./a.. a/..a./a..
+a/..a./a./ a/..a./a.
+a/..a./a/a a/..a./a/a
+a/..a./a/. a/..a./a
+a/..a./a// a/..a./a
+a/..a./.aa a/..a./.aa
+a/..a./.a. a/..a./.a.
+a/..a./.a/ a/..a./.a
+a/..a./..a a/..a./..a
+a/..a./... a/..a./...
+a/..a./../ a
+a/..a././a a/..a./a
+a/..a././. a/..a.
+a/..a./.// a/..a.
+a/..a.//aa a/..a./aa
+a/..a.//a. a/..a./a.
+a/..a.//a/ a/..a./a
+a/..a.//.a a/..a./.a
+a/..a.//.. a
+a/..a.//./ a/..a.
+a/..a.///a a/..a./a
+a/..a.///. a/..a.
+a/..a.//// a/..a.
+a/..a/aaaa a/..a/aaaa
+a/..a/aaa. a/..a/aaa.
+a/..a/aaa/ a/..a/aaa
+a/..a/aa.a a/..a/aa.a
+a/..a/aa.. a/..a/aa..
+a/..a/aa./ a/..a/aa.
+a/..a/aa/a a/..a/aa/a
+a/..a/aa/. a/..a/aa
+a/..a/aa// a/..a/aa
+a/..a/a.aa a/..a/a.aa
+a/..a/a.a. a/..a/a.a.
+a/..a/a.a/ a/..a/a.a
+a/..a/a..a a/..a/a..a
+a/..a/a... a/..a/a...
+a/..a/a../ a/..a/a..
+a/..a/a./a a/..a/a./a
+a/..a/a./. a/..a/a.
+a/..a/a.// a/..a/a.
+a/..a/a/aa a/..a/a/aa
+a/..a/a/a. a/..a/a/a.
+a/..a/a/a/ a/..a/a/a
+a/..a/a/.a a/..a/a/.a
+a/..a/a/.. a/..a
+a/..a/a/./ a/..a/a
+a/..a/a//a a/..a/a/a
+a/..a/a//. a/..a/a
+a/..a/a/// a/..a/a
+a/..a/.aaa a/..a/.aaa
+a/..a/.aa. a/..a/.aa.
+a/..a/.aa/ a/..a/.aa
+a/..a/.a.a a/..a/.a.a
+a/..a/.a.. a/..a/.a..
+a/..a/.a./ a/..a/.a.
+a/..a/.a/a a/..a/.a/a
+a/..a/.a/. a/..a/.a
+a/..a/.a// a/..a/.a
+a/..a/..aa a/..a/..aa
+a/..a/..a. a/..a/..a.
+a/..a/..a/ a/..a/..a
+a/..a/...a a/..a/...a
+a/..a/.... a/..a/....
+a/..a/.../ a/..a/...
+a/..a/../a a/a
+a/..a/../. a
+a/..a/..// a
+a/..a/./aa a/..a/aa
+a/..a/./a. a/..a/a.
+a/..a/./a/ a/..a/a
+a/..a/./.a a/..a/.a
+a/..a/./.. a
+a/..a/././ a/..a
+a/..a/.//a a/..a/a
+a/..a/.//. a/..a
+a/..a/./// a/..a
+a/..a//aaa a/..a/aaa
+a/..a//aa. a/..a/aa.
+a/..a//aa/ a/..a/aa
+a/..a//a.a a/..a/a.a
+a/..a//a.. a/..a/a..
+a/..a//a./ a/..a/a.
+a/..a//a/a a/..a/a/a
+a/..a//a/. a/..a/a
+a/..a//a// a/..a/a
+a/..a//.aa a/..a/.aa
+a/..a//.a. a/..a/.a.
+a/..a//.a/ a/..a/.a
+a/..a//..a a/..a/..a
+a/..a//... a/..a/...
+a/..a//../ a
+a/..a//./a a/..a/a
+a/..a//./. a/..a
+a/..a//.// a/..a
+a/..a///aa a/..a/aa
+a/..a///a. a/..a/a.
+a/..a///a/ a/..a/a
+a/..a///.a a/..a/.a
+a/..a///.. a
+a/..a///./ a/..a
+a/..a////a a/..a/a
+a/..a////. a/..a
+a/..a///// a/..a
+a/...aaaaa a/...aaaaa
+a/...aaaa. a/...aaaa.
+a/...aaaa/ a/...aaaa
+a/...aaa.a a/...aaa.a
+a/...aaa.. a/...aaa..
+a/...aaa./ a/...aaa.
+a/...aaa/a a/...aaa/a
+a/...aaa/. a/...aaa
+a/...aaa// a/...aaa
+a/...aa.aa a/...aa.aa
+a/...aa.a. a/...aa.a.
+a/...aa.a/ a/...aa.a
+a/...aa..a a/...aa..a
+a/...aa... a/...aa...
+a/...aa../ a/...aa..
+a/...aa./a a/...aa./a
+a/...aa./. a/...aa.
+a/...aa.// a/...aa.
+a/...aa/aa a/...aa/aa
+a/...aa/a. a/...aa/a.
+a/...aa/a/ a/...aa/a
+a/...aa/.a a/...aa/.a
+a/...aa/.. a
+a/...aa/./ a/...aa
+a/...aa//a a/...aa/a
+a/...aa//. a/...aa
+a/...aa/// a/...aa
+a/...a.aaa a/...a.aaa
+a/...a.aa. a/...a.aa.
+a/...a.aa/ a/...a.aa
+a/...a.a.a a/...a.a.a
+a/...a.a.. a/...a.a..
+a/...a.a./ a/...a.a.
+a/...a.a/a a/...a.a/a
+a/...a.a/. a/...a.a
+a/...a.a// a/...a.a
+a/...a..aa a/...a..aa
+a/...a..a. a/...a..a.
+a/...a..a/ a/...a..a
+a/...a...a a/...a...a
+a/...a.... a/...a....
+a/...a.../ a/...a...
+a/...a../a a/...a../a
+a/...a../. a/...a..
+a/...a..// a/...a..
+a/...a./aa a/...a./aa
+a/...a./a. a/...a./a.
+a/...a./a/ a/...a./a
+a/...a./.a a/...a./.a
+a/...a./.. a
+a/...a././ a/...a.
+a/...a.//a a/...a./a
+a/...a.//. a/...a.
+a/...a./// a/...a.
+a/...a/aaa a/...a/aaa
+a/...a/aa. a/...a/aa.
+a/...a/aa/ a/...a/aa
+a/...a/a.a a/...a/a.a
+a/...a/a.. a/...a/a..
+a/...a/a./ a/...a/a.
+a/...a/a/a a/...a/a/a
+a/...a/a/. a/...a/a
+a/...a/a// a/...a/a
+a/...a/.aa a/...a/.aa
+a/...a/.a. a/...a/.a.
+a/...a/.a/ a/...a/.a
+a/...a/..a a/...a/..a
+a/...a/... a/...a/...
+a/...a/../ a
+a/...a/./a a/...a/a
+a/...a/./. a/...a
+a/...a/.// a/...a
+a/...a//aa a/...a/aa
+a/...a//a. a/...a/a.
+a/...a//a/ a/...a/a
+a/...a//.a a/...a/.a
+a/...a//.. a
+a/...a//./ a/...a
+a/...a///a a/...a/a
+a/...a///. a/...a
+a/...a//// a/...a
+a/....aaaa a/....aaaa
+a/....aaa. a/....aaa.
+a/....aaa/ a/....aaa
+a/....aa.a a/....aa.a
+a/....aa.. a/....aa..
+a/....aa./ a/....aa.
+a/....aa/a a/....aa/a
+a/....aa/. a/....aa
+a/....aa// a/....aa
+a/....a.aa a/....a.aa
+a/....a.a. a/....a.a.
+a/....a.a/ a/....a.a
+a/....a..a a/....a..a
+a/....a... a/....a...
+a/....a../ a/....a..
+a/....a./a a/....a./a
+a/....a./. a/....a.
+a/....a.// a/....a.
+a/....a/aa a/....a/aa
+a/....a/a. a/....a/a.
+a/....a/a/ a/....a/a
+a/....a/.a a/....a/.a
+a/....a/.. a
+a/....a/./ a/....a
+a/....a//a a/....a/a
+a/....a//. a/....a
+a/....a/// a/....a
+a/.....aaa a/.....aaa
+a/.....aa. a/.....aa.
+a/.....aa/ a/.....aa
+a/.....a.a a/.....a.a
+a/.....a.. a/.....a..
+a/.....a./ a/.....a.
+a/.....a/a a/.....a/a
+a/.....a/. a/.....a
+a/.....a// a/.....a
+a/......aa a/......aa
+a/......a. a/......a.
+a/......a/ a/......a
+a/.......a a/.......a
+a/........ a/........
+a/......./ a/.......
+a/....../a a/....../a
+a/....../. a/......
+a/......// a/......
+a/...../aa a/...../aa
+a/...../a. a/...../a.
+a/...../a/ a/...../a
+a/...../.a a/...../.a
+a/...../.. a
+a/....././ a/.....
+a/.....//a a/...../a
+a/.....//. a/.....
+a/...../// a/.....
+a/..../aaa a/..../aaa
+a/..../aa. a/..../aa.
+a/..../aa/ a/..../aa
+a/..../a.a a/..../a.a
+a/..../a.. a/..../a..
+a/..../a./ a/..../a.
+a/..../a/a a/..../a/a
+a/..../a/. a/..../a
+a/..../a// a/..../a
+a/..../.aa a/..../.aa
+a/..../.a. a/..../.a.
+a/..../.a/ a/..../.a
+a/..../..a a/..../..a
+a/..../... a/..../...
+a/..../../ a
+a/...././a a/..../a
+a/...././. a/....
+a/..../.// a/....
+a/....//aa a/..../aa
+a/....//a. a/..../a.
+a/....//a/ a/..../a
+a/....//.a a/..../.a
+a/....//.. a
+a/....//./ a/....
+a/....///a a/..../a
+a/....///. a/....
+a/....//// a/....
+a/.../aaaa a/.../aaaa
+a/.../aaa. a/.../aaa.
+a/.../aaa/ a/.../aaa
+a/.../aa.a a/.../aa.a
+a/.../aa.. a/.../aa..
+a/.../aa./ a/.../aa.
+a/.../aa/a a/.../aa/a
+a/.../aa/. a/.../aa
+a/.../aa// a/.../aa
+a/.../a.aa a/.../a.aa
+a/.../a.a. a/.../a.a.
+a/.../a.a/ a/.../a.a
+a/.../a..a a/.../a..a
+a/.../a... a/.../a...
+a/.../a../ a/.../a..
+a/.../a./a a/.../a./a
+a/.../a./. a/.../a.
+a/.../a.// a/.../a.
+a/.../a/aa a/.../a/aa
+a/.../a/a. a/.../a/a.
+a/.../a/a/ a/.../a/a
+a/.../a/.a a/.../a/.a
+a/.../a/.. a/...
+a/.../a/./ a/.../a
+a/.../a//a a/.../a/a
+a/.../a//. a/.../a
+a/.../a/// a/.../a
+a/.../.aaa a/.../.aaa
+a/.../.aa. a/.../.aa.
+a/.../.aa/ a/.../.aa
+a/.../.a.a a/.../.a.a
+a/.../.a.. a/.../.a..
+a/.../.a./ a/.../.a.
+a/.../.a/a a/.../.a/a
+a/.../.a/. a/.../.a
+a/.../.a// a/.../.a
+a/.../..aa a/.../..aa
+a/.../..a. a/.../..a.
+a/.../..a/ a/.../..a
+a/.../...a a/.../...a
+a/.../.... a/.../....
+a/.../.../ a/.../...
+a/.../../a a/a
+a/.../../. a
+a/.../..// a
+a/..././aa a/.../aa
+a/..././a. a/.../a.
+a/..././a/ a/.../a
+a/..././.a a/.../.a
+a/..././.. a
+a/.../././ a/...
+a/..././/a a/.../a
+a/..././/. a/...
+a/..././// a/...
+a/...//aaa a/.../aaa
+a/...//aa. a/.../aa.
+a/...//aa/ a/.../aa
+a/...//a.a a/.../a.a
+a/...//a.. a/.../a..
+a/...//a./ a/.../a.
+a/...//a/a a/.../a/a
+a/...//a/. a/.../a
+a/...//a// a/.../a
+a/...//.aa a/.../.aa
+a/...//.a. a/.../.a.
+a/...//.a/ a/.../.a
+a/...//..a a/.../..a
+a/...//... a/.../...
+a/...//../ a
+a/...//./a a/.../a
+a/...//./. a/...
+a/...//.// a/...
+a/...///aa a/.../aa
+a/...///a. a/.../a.
+a/...///a/ a/.../a
+a/...///.a a/.../.a
+a/...///.. a
+a/...///./ a/...
+a/...////a a/.../a
+a/...////. a/...
+a/...///// a/...
+a/../aaaaa aaaaa
+a/../aaaa. aaaa.
+a/../aaaa/ aaaa
+a/../aaa.a aaa.a
+a/../aaa.. aaa..
+a/../aaa./ aaa.
+a/../aaa/a aaa/a
+a/../aaa/. aaa
+a/../aaa// aaa
+a/../aa.aa aa.aa
+a/../aa.a. aa.a.
+a/../aa.a/ aa.a
+a/../aa..a aa..a
+a/../aa... aa...
+a/../aa../ aa..
+a/../aa./a aa./a
+a/../aa./. aa.
+a/../aa.// aa.
+a/../aa/aa aa/aa
+a/../aa/a. aa/a.
+a/../aa/a/ aa/a
+a/../aa/.a aa/.a
+a/../aa/.. .
+a/../aa/./ aa
+a/../aa//a aa/a
+a/../aa//. aa
+a/../aa/// aa
+a/../a.aaa a.aaa
+a/../a.aa. a.aa.
+a/../a.aa/ a.aa
+a/../a.a.a a.a.a
+a/../a.a.. a.a..
+a/../a.a./ a.a.
+a/../a.a/a a.a/a
+a/../a.a/. a.a
+a/../a.a// a.a
+a/../a..aa a..aa
+a/../a..a. a..a.
+a/../a..a/ a..a
+a/../a...a a...a
+a/../a.... a....
+a/../a.../ a...
+a/../a../a a../a
+a/../a../. a..
+a/../a..// a..
+a/../a./aa a./aa
+a/../a./a. a./a.
+a/../a./a/ a./a
+a/../a./.a a./.a
+a/../a./.. .
+a/../a././ a.
+a/../a.//a a./a
+a/../a.//. a.
+a/../a./// a.
+a/../a/aaa a/aaa
+a/../a/aa. a/aa.
+a/../a/aa/ a/aa
+a/../a/a.a a/a.a
+a/../a/a.. a/a..
+a/../a/a./ a/a.
+a/../a/a/a a/a/a
+a/../a/a/. a/a
+a/../a/a// a/a
+a/../a/.aa a/.aa
+a/../a/.a. a/.a.
+a/../a/.a/ a/.a
+a/../a/..a a/..a
+a/../a/... a/...
+a/../a/../ .
+a/../a/./a a/a
+a/../a/./. a
+a/../a/.// a
+a/../a//aa a/aa
+a/../a//a. a/a.
+a/../a//a/ a/a
+a/../a//.a a/.a
+a/../a//.. .
+a/../a//./ a
+a/../a///a a/a
+a/../a///. a
+a/../a//// a
+a/../.aaaa .aaaa
+a/../.aaa. .aaa.
+a/../.aaa/ .aaa
+a/../.aa.a .aa.a
+a/../.aa.. .aa..
+a/../.aa./ .aa.
+a/../.aa/a .aa/a
+a/../.aa/. .aa
+a/../.aa// .aa
+a/../.a.aa .a.aa
+a/../.a.a. .a.a.
+a/../.a.a/ .a.a
+a/../.a..a .a..a
+a/../.a... .a...
+a/../.a../ .a..
+a/../.a./a .a./a
+a/../.a./. .a.
+a/../.a.// .a.
+a/../.a/aa .a/aa
+a/../.a/a. .a/a.
+a/../.a/a/ .a/a
+a/../.a/.a .a/.a
+a/../.a/.. .
+a/../.a/./ .a
+a/../.a//a .a/a
+a/../.a//. .a
+a/../.a/// .a
+a/../..aaa ..aaa
+a/../..aa. ..aa.
+a/../..aa/ ..aa
+a/../..a.a ..a.a
+a/../..a.. ..a..
+a/../..a./ ..a.
+a/../..a/a ..a/a
+a/../..a/. ..a
+a/../..a// ..a
+a/../...aa ...aa
+a/../...a. ...a.
+a/../...a/ ...a
+a/../....a ....a
+a/../..... .....
+a/../..../ ....
+a/../.../a .../a
+a/../.../. ...
+a/../...// ...
+a/../../aa ../aa
+a/../../a. ../a.
+a/../../a/ ../a
+a/../../.a ../.a
+a/../../.. ../..
+a/../.././ ..
+a/../..//a ../a
+a/../..//. ..
+a/../../// ..
+a/.././aaa aaa
+a/.././aa. aa.
+a/.././aa/ aa
+a/.././a.a a.a
+a/.././a.. a..
+a/.././a./ a.
+a/.././a/a a/a
+a/.././a/. a
+a/.././a// a
+a/.././.aa .aa
+a/.././.a. .a.
+a/.././.a/ .a
+a/.././..a ..a
+a/.././... ...
+a/.././../ ..
+a/../././a a
+a/../././. .
+a/.././.// .
+a/.././/aa aa
+a/.././/a. a.
+a/.././/a/ a
+a/.././/.a .a
+a/.././/.. ..
+a/.././/./ .
+a/.././//a a
+a/.././//. .
+a/.././/// .
+a/..//aaaa aaaa
+a/..//aaa. aaa.
+a/..//aaa/ aaa
+a/..//aa.a aa.a
+a/..//aa.. aa..
+a/..//aa./ aa.
+a/..//aa/a aa/a
+a/..//aa/. aa
+a/..//aa// aa
+a/..//a.aa a.aa
+a/..//a.a. a.a.
+a/..//a.a/ a.a
+a/..//a..a a..a
+a/..//a... a...
+a/..//a../ a..
+a/..//a./a a./a
+a/..//a./. a.
+a/..//a.// a.
+a/..//a/aa a/aa
+a/..//a/a. a/a.
+a/..//a/a/ a/a
+a/..//a/.a a/.a
+a/..//a/.. .
+a/..//a/./ a
+a/..//a//a a/a
+a/..//a//. a
+a/..//a/// a
+a/..//.aaa .aaa
+a/..//.aa. .aa.
+a/..//.aa/ .aa
+a/..//.a.a .a.a
+a/..//.a.. .a..
+a/..//.a./ .a.
+a/..//.a/a .a/a
+a/..//.a/. .a
+a/..//.a// .a
+a/..//..aa ..aa
+a/..//..a. ..a.
+a/..//..a/ ..a
+a/..//...a ...a
+a/..//.... ....
+a/..//.../ ...
+a/..//../a ../a
+a/..//../. ..
+a/..//..// ..
+a/..//./aa aa
+a/..//./a. a.
+a/..//./a/ a
+a/..//./.a .a
+a/..//./.. ..
+a/..//././ .
+a/..//.//a a
+a/..//.//. .
+a/..//./// .
+a/..///aaa aaa
+a/..///aa. aa.
+a/..///aa/ aa
+a/..///a.a a.a
+a/..///a.. a..
+a/..///a./ a.
+a/..///a/a a/a
+a/..///a/. a
+a/..///a// a
+a/..///.aa .aa
+a/..///.a. .a.
+a/..///.a/ .a
+a/..///..a ..a
+a/..///... ...
+a/..///../ ..
+a/..///./a a
+a/..///./. .
+a/..///.// .
+a/..////aa aa
+a/..////a. a.
+a/..////a/ a
+a/..////.a .a
+a/..////.. ..
+a/..////./ .
+a/../////a a
+a/../////. .
+a/..////// .
+a/./aaaaaa a/aaaaaa
+a/./aaaaa. a/aaaaa.
+a/./aaaaa/ a/aaaaa
+a/./aaaa.a a/aaaa.a
+a/./aaaa.. a/aaaa..
+a/./aaaa./ a/aaaa.
+a/./aaaa/a a/aaaa/a
+a/./aaaa/. a/aaaa
+a/./aaaa// a/aaaa
+a/./aaa.aa a/aaa.aa
+a/./aaa.a. a/aaa.a.
+a/./aaa.a/ a/aaa.a
+a/./aaa..a a/aaa..a
+a/./aaa... a/aaa...
+a/./aaa../ a/aaa..
+a/./aaa./a a/aaa./a
+a/./aaa./. a/aaa.
+a/./aaa.// a/aaa.
+a/./aaa/aa a/aaa/aa
+a/./aaa/a. a/aaa/a.
+a/./aaa/a/ a/aaa/a
+a/./aaa/.a a/aaa/.a
+a/./aaa/.. a
+a/./aaa/./ a/aaa
+a/./aaa//a a/aaa/a
+a/./aaa//. a/aaa
+a/./aaa/// a/aaa
+a/./aa.aaa a/aa.aaa
+a/./aa.aa. a/aa.aa.
+a/./aa.aa/ a/aa.aa
+a/./aa.a.a a/aa.a.a
+a/./aa.a.. a/aa.a..
+a/./aa.a./ a/aa.a.
+a/./aa.a/a a/aa.a/a
+a/./aa.a/. a/aa.a
+a/./aa.a// a/aa.a
+a/./aa..aa a/aa..aa
+a/./aa..a. a/aa..a.
+a/./aa..a/ a/aa..a
+a/./aa...a a/aa...a
+a/./aa.... a/aa....
+a/./aa.../ a/aa...
+a/./aa../a a/aa../a
+a/./aa../. a/aa..
+a/./aa..// a/aa..
+a/./aa./aa a/aa./aa
+a/./aa./a. a/aa./a.
+a/./aa./a/ a/aa./a
+a/./aa./.a a/aa./.a
+a/./aa./.. a
+a/./aa././ a/aa.
+a/./aa.//a a/aa./a
+a/./aa.//. a/aa.
+a/./aa./// a/aa.
+a/./aa/aaa a/aa/aaa
+a/./aa/aa. a/aa/aa.
+a/./aa/aa/ a/aa/aa
+a/./aa/a.a a/aa/a.a
+a/./aa/a.. a/aa/a..
+a/./aa/a./ a/aa/a.
+a/./aa/a/a a/aa/a/a
+a/./aa/a/. a/aa/a
+a/./aa/a// a/aa/a
+a/./aa/.aa a/aa/.aa
+a/./aa/.a. a/aa/.a.
+a/./aa/.a/ a/aa/.a
+a/./aa/..a a/aa/..a
+a/./aa/... a/aa/...
+a/./aa/../ a
+a/./aa/./a a/aa/a
+a/./aa/./. a/aa
+a/./aa/.// a/aa
+a/./aa//aa a/aa/aa
+a/./aa//a. a/aa/a.
+a/./aa//a/ a/aa/a
+a/./aa//.a a/aa/.a
+a/./aa//.. a
+a/./aa//./ a/aa
+a/./aa///a a/aa/a
+a/./aa///. a/aa
+a/./aa//// a/aa
+a/./a.aaaa a/a.aaaa
+a/./a.aaa. a/a.aaa.
+a/./a.aaa/ a/a.aaa
+a/./a.aa.a a/a.aa.a
+a/./a.aa.. a/a.aa..
+a/./a.aa./ a/a.aa.
+a/./a.aa/a a/a.aa/a
+a/./a.aa/. a/a.aa
+a/./a.aa// a/a.aa
+a/./a.a.aa a/a.a.aa
+a/./a.a.a. a/a.a.a.
+a/./a.a.a/ a/a.a.a
+a/./a.a..a a/a.a..a
+a/./a.a... a/a.a...
+a/./a.a../ a/a.a..
+a/./a.a./a a/a.a./a
+a/./a.a./. a/a.a.
+a/./a.a.// a/a.a.
+a/./a.a/aa a/a.a/aa
+a/./a.a/a. a/a.a/a.
+a/./a.a/a/ a/a.a/a
+a/./a.a/.a a/a.a/.a
+a/./a.a/.. a
+a/./a.a/./ a/a.a
+a/./a.a//a a/a.a/a
+a/./a.a//. a/a.a
+a/./a.a/// a/a.a
+a/./a..aaa a/a..aaa
+a/./a..aa. a/a..aa.
+a/./a..aa/ a/a..aa
+a/./a..a.a a/a..a.a
+a/./a..a.. a/a..a..
+a/./a..a./ a/a..a.
+a/./a..a/a a/a..a/a
+a/./a..a/. a/a..a
+a/./a..a// a/a..a
+a/./a...aa a/a...aa
+a/./a...a. a/a...a.
+a/./a...a/ a/a...a
+a/./a....a a/a....a
+a/./a..... a/a.....
+a/./a..../ a/a....
+a/./a.../a a/a.../a
+a/./a.../. a/a...
+a/./a...// a/a...
+a/./a../aa a/a../aa
+a/./a../a. a/a../a.
+a/./a../a/ a/a../a
+a/./a../.a a/a../.a
+a/./a../.. a
+a/./a.././ a/a..
+a/./a..//a a/a../a
+a/./a..//. a/a..
+a/./a../// a/a..
+a/./a./aaa a/a./aaa
+a/./a./aa. a/a./aa.
+a/./a./aa/ a/a./aa
+a/./a./a.a a/a./a.a
+a/./a./a.. a/a./a..
+a/./a./a./ a/a./a.
+a/./a./a/a a/a./a/a
+a/./a./a/. a/a./a
+a/./a./a// a/a./a
+a/./a./.aa a/a./.aa
+a/./a./.a. a/a./.a.
+a/./a./.a/ a/a./.a
+a/./a./..a a/a./..a
+a/./a./... a/a./...
+a/./a./../ a
+a/./a././a a/a./a
+a/./a././. a/a.
+a/./a./.// a/a.
+a/./a.//aa a/a./aa
+a/./a.//a. a/a./a.
+a/./a.//a/ a/a./a
+a/./a.//.a a/a./.a
+a/./a.//.. a
+a/./a.//./ a/a.
+a/./a.///a a/a./a
+a/./a.///. a/a.
+a/./a.//// a/a.
+a/./a/aaaa a/a/aaaa
+a/./a/aaa. a/a/aaa.
+a/./a/aaa/ a/a/aaa
+a/./a/aa.a a/a/aa.a
+a/./a/aa.. a/a/aa..
+a/./a/aa./ a/a/aa.
+a/./a/aa/a a/a/aa/a
+a/./a/aa/. a/a/aa
+a/./a/aa// a/a/aa
+a/./a/a.aa a/a/a.aa
+a/./a/a.a. a/a/a.a.
+a/./a/a.a/ a/a/a.a
+a/./a/a..a a/a/a..a
+a/./a/a... a/a/a...
+a/./a/a../ a/a/a..
+a/./a/a./a a/a/a./a
+a/./a/a./. a/a/a.
+a/./a/a.// a/a/a.
+a/./a/a/aa a/a/a/aa
+a/./a/a/a. a/a/a/a.
+a/./a/a/a/ a/a/a/a
+a/./a/a/.a a/a/a/.a
+a/./a/a/.. a/a
+a/./a/a/./ a/a/a
+a/./a/a//a a/a/a/a
+a/./a/a//. a/a/a
+a/./a/a/// a/a/a
+a/./a/.aaa a/a/.aaa
+a/./a/.aa. a/a/.aa.
+a/./a/.aa/ a/a/.aa
+a/./a/.a.a a/a/.a.a
+a/./a/.a.. a/a/.a..
+a/./a/.a./ a/a/.a.
+a/./a/.a/a a/a/.a/a
+a/./a/.a/. a/a/.a
+a/./a/.a// a/a/.a
+a/./a/..aa a/a/..aa
+a/./a/..a. a/a/..a.
+a/./a/..a/ a/a/..a
+a/./a/...a a/a/...a
+a/./a/.... a/a/....
+a/./a/.../ a/a/...
+a/./a/../a a/a
+a/./a/../. a
+a/./a/..// a
+a/./a/./aa a/a/aa
+a/./a/./a. a/a/a.
+a/./a/./a/ a/a/a
+a/./a/./.a a/a/.a
+a/./a/./.. a
+a/./a/././ a/a
+a/./a/.//a a/a/a
+a/./a/.//. a/a
+a/./a/./// a/a
+a/./a//aaa a/a/aaa
+a/./a//aa. a/a/aa.
+a/./a//aa/ a/a/aa
+a/./a//a.a a/a/a.a
+a/./a//a.. a/a/a..
+a/./a//a./ a/a/a.
+a/./a//a/a a/a/a/a
+a/./a//a/. a/a/a
+a/./a//a// a/a/a
+a/./a//.aa a/a/.aa
+a/./a//.a. a/a/.a.
+a/./a//.a/ a/a/.a
+a/./a//..a a/a/..a
+a/./a//... a/a/...
+a/./a//../ a
+a/./a//./a a/a/a
+a/./a//./. a/a
+a/./a//.// a/a
+a/./a///aa a/a/aa
+a/./a///a. a/a/a.
+a/./a///a/ a/a/a
+a/./a///.a a/a/.a
+a/./a///.. a
+a/./a///./ a/a
+a/./a////a a/a/a
+a/./a////. a/a
+a/./a///// a/a
+a/./.aaaaa a/.aaaaa
+a/./.aaaa. a/.aaaa.
+a/./.aaaa/ a/.aaaa
+a/./.aaa.a a/.aaa.a
+a/./.aaa.. a/.aaa..
+a/./.aaa./ a/.aaa.
+a/./.aaa/a a/.aaa/a
+a/./.aaa/. a/.aaa
+a/./.aaa// a/.aaa
+a/./.aa.aa a/.aa.aa
+a/./.aa.a. a/.aa.a.
+a/./.aa.a/ a/.aa.a
+a/./.aa..a a/.aa..a
+a/./.aa... a/.aa...
+a/./.aa../ a/.aa..
+a/./.aa./a a/.aa./a
+a/./.aa./. a/.aa.
+a/./.aa.// a/.aa.
+a/./.aa/aa a/.aa/aa
+a/./.aa/a. a/.aa/a.
+a/./.aa/a/ a/.aa/a
+a/./.aa/.a a/.aa/.a
+a/./.aa/.. a
+a/./.aa/./ a/.aa
+a/./.aa//a a/.aa/a
+a/./.aa//. a/.aa
+a/./.aa/// a/.aa
+a/./.a.aaa a/.a.aaa
+a/./.a.aa. a/.a.aa.
+a/./.a.aa/ a/.a.aa
+a/./.a.a.a a/.a.a.a
+a/./.a.a.. a/.a.a..
+a/./.a.a./ a/.a.a.
+a/./.a.a/a a/.a.a/a
+a/./.a.a/. a/.a.a
+a/./.a.a// a/.a.a
+a/./.a..aa a/.a..aa
+a/./.a..a. a/.a..a.
+a/./.a..a/ a/.a..a
+a/./.a...a a/.a...a
+a/./.a.... a/.a....
+a/./.a.../ a/.a...
+a/./.a../a a/.a../a
+a/./.a../. a/.a..
+a/./.a..// a/.a..
+a/./.a./aa a/.a./aa
+a/./.a./a. a/.a./a.
+a/./.a./a/ a/.a./a
+a/./.a./.a a/.a./.a
+a/./.a./.. a
+a/./.a././ a/.a.
+a/./.a.//a a/.a./a
+a/./.a.//. a/.a.
+a/./.a./// a/.a.
+a/./.a/aaa a/.a/aaa
+a/./.a/aa. a/.a/aa.
+a/./.a/aa/ a/.a/aa
+a/./.a/a.a a/.a/a.a
+a/./.a/a.. a/.a/a..
+a/./.a/a./ a/.a/a.
+a/./.a/a/a a/.a/a/a
+a/./.a/a/. a/.a/a
+a/./.a/a// a/.a/a
+a/./.a/.aa a/.a/.aa
+a/./.a/.a. a/.a/.a.
+a/./.a/.a/ a/.a/.a
+a/./.a/..a a/.a/..a
+a/./.a/... a/.a/...
+a/./.a/../ a
+a/./.a/./a a/.a/a
+a/./.a/./. a/.a
+a/./.a/.// a/.a
+a/./.a//aa a/.a/aa
+a/./.a//a. a/.a/a.
+a/./.a//a/ a/.a/a
+a/./.a//.a a/.a/.a
+a/./.a//.. a
+a/./.a//./ a/.a
+a/./.a///a a/.a/a
+a/./.a///. a/.a
+a/./.a//// a/.a
+a/./..aaaa a/..aaaa
+a/./..aaa. a/..aaa.
+a/./..aaa/ a/..aaa
+a/./..aa.a a/..aa.a
+a/./..aa.. a/..aa..
+a/./..aa./ a/..aa.
+a/./..aa/a a/..aa/a
+a/./..aa/. a/..aa
+a/./..aa// a/..aa
+a/./..a.aa a/..a.aa
+a/./..a.a. a/..a.a.
+a/./..a.a/ a/..a.a
+a/./..a..a a/..a..a
+a/./..a... a/..a...
+a/./..a../ a/..a..
+a/./..a./a a/..a./a
+a/./..a./. a/..a.
+a/./..a.// a/..a.
+a/./..a/aa a/..a/aa
+a/./..a/a. a/..a/a.
+a/./..a/a/ a/..a/a
+a/./..a/.a a/..a/.a
+a/./..a/.. a
+a/./..a/./ a/..a
+a/./..a//a a/..a/a
+a/./..a//. a/..a
+a/./..a/// a/..a
+a/./...aaa a/...aaa
+a/./...aa. a/...aa.
+a/./...aa/ a/...aa
+a/./...a.a a/...a.a
+a/./...a.. a/...a..
+a/./...a./ a/...a.
+a/./...a/a a/...a/a
+a/./...a/. a/...a
+a/./...a// a/...a
+a/./....aa a/....aa
+a/./....a. a/....a.
+a/./....a/ a/....a
+a/./.....a a/.....a
+a/./...... a/......
+a/./...../ a/.....
+a/./..../a a/..../a
+a/./..../. a/....
+a/./....// a/....
+a/./.../aa a/.../aa
+a/./.../a. a/.../a.
+a/./.../a/ a/.../a
+a/./.../.a a/.../.a
+a/./.../.. a
+a/./..././ a/...
+a/./...//a a/.../a
+a/./...//. a/...
+a/./.../// a/...
+a/./../aaa aaa
+a/./../aa. aa.
+a/./../aa/ aa
+a/./../a.a a.a
+a/./../a.. a..
+a/./../a./ a.
+a/./../a/a a/a
+a/./../a/. a
+a/./../a// a
+a/./../.aa .aa
+a/./../.a. .a.
+a/./../.a/ .a
+a/./../..a ..a
+a/./../... ...
+a/./../../ ..
+a/./.././a a
+a/./.././. .
+a/./../.// .
+a/./..//aa aa
+a/./..//a. a.
+a/./..//a/ a
+a/./..//.a .a
+a/./..//.. ..
+a/./..//./ .
+a/./..///a a
+a/./..///. .
+a/./..//// .
+a/././aaaa a/aaaa
+a/././aaa. a/aaa.
+a/././aaa/ a/aaa
+a/././aa.a a/aa.a
+a/././aa.. a/aa..
+a/././aa./ a/aa.
+a/././aa/a a/aa/a
+a/././aa/. a/aa
+a/././aa// a/aa
+a/././a.aa a/a.aa
+a/././a.a. a/a.a.
+a/././a.a/ a/a.a
+a/././a..a a/a..a
+a/././a... a/a...
+a/././a../ a/a..
+a/././a./a a/a./a
+a/././a./. a/a.
+a/././a.// a/a.
+a/././a/aa a/a/aa
+a/././a/a. a/a/a.
+a/././a/a/ a/a/a
+a/././a/.a a/a/.a
+a/././a/.. a
+a/././a/./ a/a
+a/././a//a a/a/a
+a/././a//. a/a
+a/././a/// a/a
+a/././.aaa a/.aaa
+a/././.aa. a/.aa.
+a/././.aa/ a/.aa
+a/././.a.a a/.a.a
+a/././.a.. a/.a..
+a/././.a./ a/.a.
+a/././.a/a a/.a/a
+a/././.a/. a/.a
+a/././.a// a/.a
+a/././..aa a/..aa
+a/././..a. a/..a.
+a/././..a/ a/..a
+a/././...a a/...a
+a/././.... a/....
+a/././.../ a/...
+a/././../a a
+a/././../. .
+a/././..// .
+a/./././aa a/aa
+a/./././a. a/a.
+a/./././a/ a/a
+a/./././.a a/.a
+a/./././.. .
+a/././././ a
+a/./././/a a/a
+a/./././/. a
+a/./././// a
+a/././/aaa a/aaa
+a/././/aa. a/aa.
+a/././/aa/ a/aa
+a/././/a.a a/a.a
+a/././/a.. a/a..
+a/././/a./ a/a.
+a/././/a/a a/a/a
+a/././/a/. a/a
+a/././/a// a/a
+a/././/.aa a/.aa
+a/././/.a. a/.a.
+a/././/.a/ a/.a
+a/././/..a a/..a
+a/././/... a/...
+a/././/../ .
+a/././/./a a/a
+a/././/./. a
+a/././/.// a
+a/././//aa a/aa
+a/././//a. a/a.
+a/././//a/ a/a
+a/././//.a a/.a
+a/././//.. .
+a/././//./ a
+a/././///a a/a
+a/././///. a
+a/././//// a
+a/.//aaaaa a/aaaaa
+a/.//aaaa. a/aaaa.
+a/.//aaaa/ a/aaaa
+a/.//aaa.a a/aaa.a
+a/.//aaa.. a/aaa..
+a/.//aaa./ a/aaa.
+a/.//aaa/a a/aaa/a
+a/.//aaa/. a/aaa
+a/.//aaa// a/aaa
+a/.//aa.aa a/aa.aa
+a/.//aa.a. a/aa.a.
+a/.//aa.a/ a/aa.a
+a/.//aa..a a/aa..a
+a/.//aa... a/aa...
+a/.//aa../ a/aa..
+a/.//aa./a a/aa./a
+a/.//aa./. a/aa.
+a/.//aa.// a/aa.
+a/.//aa/aa a/aa/aa
+a/.//aa/a. a/aa/a.
+a/.//aa/a/ a/aa/a
+a/.//aa/.a a/aa/.a
+a/.//aa/.. a
+a/.//aa/./ a/aa
+a/.//aa//a a/aa/a
+a/.//aa//. a/aa
+a/.//aa/// a/aa
+a/.//a.aaa a/a.aaa
+a/.//a.aa. a/a.aa.
+a/.//a.aa/ a/a.aa
+a/.//a.a.a a/a.a.a
+a/.//a.a.. a/a.a..
+a/.//a.a./ a/a.a.
+a/.//a.a/a a/a.a/a
+a/.//a.a/. a/a.a
+a/.//a.a// a/a.a
+a/.//a..aa a/a..aa
+a/.//a..a. a/a..a.
+a/.//a..a/ a/a..a
+a/.//a...a a/a...a
+a/.//a.... a/a....
+a/.//a.../ a/a...
+a/.//a../a a/a../a
+a/.//a../. a/a..
+a/.//a..// a/a..
+a/.//a./aa a/a./aa
+a/.//a./a. a/a./a.
+a/.//a./a/ a/a./a
+a/.//a./.a a/a./.a
+a/.//a./.. a
+a/.//a././ a/a.
+a/.//a.//a a/a./a
+a/.//a.//. a/a.
+a/.//a./// a/a.
+a/.//a/aaa a/a/aaa
+a/.//a/aa. a/a/aa.
+a/.//a/aa/ a/a/aa
+a/.//a/a.a a/a/a.a
+a/.//a/a.. a/a/a..
+a/.//a/a./ a/a/a.
+a/.//a/a/a a/a/a/a
+a/.//a/a/. a/a/a
+a/.//a/a// a/a/a
+a/.//a/.aa a/a/.aa
+a/.//a/.a. a/a/.a.
+a/.//a/.a/ a/a/.a
+a/.//a/..a a/a/..a
+a/.//a/... a/a/...
+a/.//a/../ a
+a/.//a/./a a/a/a
+a/.//a/./. a/a
+a/.//a/.// a/a
+a/.//a//aa a/a/aa
+a/.//a//a. a/a/a.
+a/.//a//a/ a/a/a
+a/.//a//.a a/a/.a
+a/.//a//.. a
+a/.//a//./ a/a
+a/.//a///a a/a/a
+a/.//a///. a/a
+a/.//a//// a/a
+a/.//.aaaa a/.aaaa
+a/.//.aaa. a/.aaa.
+a/.//.aaa/ a/.aaa
+a/.//.aa.a a/.aa.a
+a/.//.aa.. a/.aa..
+a/.//.aa./ a/.aa.
+a/.//.aa/a a/.aa/a
+a/.//.aa/. a/.aa
+a/.//.aa// a/.aa
+a/.//.a.aa a/.a.aa
+a/.//.a.a. a/.a.a.
+a/.//.a.a/ a/.a.a
+a/.//.a..a a/.a..a
+a/.//.a... a/.a...
+a/.//.a../ a/.a..
+a/.//.a./a a/.a./a
+a/.//.a./. a/.a.
+a/.//.a.// a/.a.
+a/.//.a/aa a/.a/aa
+a/.//.a/a. a/.a/a.
+a/.//.a/a/ a/.a/a
+a/.//.a/.a a/.a/.a
+a/.//.a/.. a
+a/.//.a/./ a/.a
+a/.//.a//a a/.a/a
+a/.//.a//. a/.a
+a/.//.a/// a/.a
+a/.//..aaa a/..aaa
+a/.//..aa. a/..aa.
+a/.//..aa/ a/..aa
+a/.//..a.a a/..a.a
+a/.//..a.. a/..a..
+a/.//..a./ a/..a.
+a/.//..a/a a/..a/a
+a/.//..a/. a/..a
+a/.//..a// a/..a
+a/.//...aa a/...aa
+a/.//...a. a/...a.
+a/.//...a/ a/...a
+a/.//....a a/....a
+a/.//..... a/.....
+a/.//..../ a/....
+a/.//.../a a/.../a
+a/.//.../. a/...
+a/.//...// a/...
+a/.//../aa aa
+a/.//../a. a.
+a/.//../a/ a
+a/.//../.a .a
+a/.//../.. ..
+a/.//.././ .
+a/.//..//a a
+a/.//..//. .
+a/.//../// .
+a/.//./aaa a/aaa
+a/.//./aa. a/aa.
+a/.//./aa/ a/aa
+a/.//./a.a a/a.a
+a/.//./a.. a/a..
+a/.//./a./ a/a.
+a/.//./a/a a/a/a
+a/.//./a/. a/a
+a/.//./a// a/a
+a/.//./.aa a/.aa
+a/.//./.a. a/.a.
+a/.//./.a/ a/.a
+a/.//./..a a/..a
+a/.//./... a/...
+a/.//./../ .
+a/.//././a a/a
+a/.//././. a
+a/.//./.// a
+a/.//.//aa a/aa
+a/.//.//a. a/a.
+a/.//.//a/ a/a
+a/.//.//.a a/.a
+a/.//.//.. .
+a/.//.//./ a
+a/.//.///a a/a
+a/.//.///. a
+a/.//.//// a
+a/.///aaaa a/aaaa
+a/.///aaa. a/aaa.
+a/.///aaa/ a/aaa
+a/.///aa.a a/aa.a
+a/.///aa.. a/aa..
+a/.///aa./ a/aa.
+a/.///aa/a a/aa/a
+a/.///aa/. a/aa
+a/.///aa// a/aa
+a/.///a.aa a/a.aa
+a/.///a.a. a/a.a.
+a/.///a.a/ a/a.a
+a/.///a..a a/a..a
+a/.///a... a/a...
+a/.///a../ a/a..
+a/.///a./a a/a./a
+a/.///a./. a/a.
+a/.///a.// a/a.
+a/.///a/aa a/a/aa
+a/.///a/a. a/a/a.
+a/.///a/a/ a/a/a
+a/.///a/.a a/a/.a
+a/.///a/.. a
+a/.///a/./ a/a
+a/.///a//a a/a/a
+a/.///a//. a/a
+a/.///a/// a/a
+a/.///.aaa a/.aaa
+a/.///.aa. a/.aa.
+a/.///.aa/ a/.aa
+a/.///.a.a a/.a.a
+a/.///.a.. a/.a..
+a/.///.a./ a/.a.
+a/.///.a/a a/.a/a
+a/.///.a/. a/.a
+a/.///.a// a/.a
+a/.///..aa a/..aa
+a/.///..a. a/..a.
+a/.///..a/ a/..a
+a/.///...a a/...a
+a/.///.... a/....
+a/.///.../ a/...
+a/.///../a a
+a/.///../. .
+a/.///..// .
+a/.///./aa a/aa
+a/.///./a. a/a.
+a/.///./a/ a/a
+a/.///./.a a/.a
+a/.///./.. .
+a/.///././ a
+a/.///.//a a/a
+a/.///.//. a
+a/.///./// a
+a/.////aaa a/aaa
+a/.////aa. a/aa.
+a/.////aa/ a/aa
+a/.////a.a a/a.a
+a/.////a.. a/a..
+a/.////a./ a/a.
+a/.////a/a a/a/a
+a/.////a/. a/a
+a/.////a// a/a
+a/.////.aa a/.aa
+a/.////.a. a/.a.
+a/.////.a/ a/.a
+a/.////..a a/..a
+a/.////... a/...
+a/.////../ .
+a/.////./a a/a
+a/.////./. a
+a/.////.// a
+a/./////aa a/aa
+a/./////a. a/a.
+a/./////a/ a/a
+a/./////.a a/.a
+a/./////.. .
+a/./////./ a
+a/.//////a a/a
+a/.//////. a
+a/./////// a
+a//aaaaaaa a/aaaaaaa
+a//aaaaaa. a/aaaaaa.
+a//aaaaaa/ a/aaaaaa
+a//aaaaa.a a/aaaaa.a
+a//aaaaa.. a/aaaaa..
+a//aaaaa./ a/aaaaa.
+a//aaaaa/a a/aaaaa/a
+a//aaaaa/. a/aaaaa
+a//aaaaa// a/aaaaa
+a//aaaa.aa a/aaaa.aa
+a//aaaa.a. a/aaaa.a.
+a//aaaa.a/ a/aaaa.a
+a//aaaa..a a/aaaa..a
+a//aaaa... a/aaaa...
+a//aaaa../ a/aaaa..
+a//aaaa./a a/aaaa./a
+a//aaaa./. a/aaaa.
+a//aaaa.// a/aaaa.
+a//aaaa/aa a/aaaa/aa
+a//aaaa/a. a/aaaa/a.
+a//aaaa/a/ a/aaaa/a
+a//aaaa/.a a/aaaa/.a
+a//aaaa/.. a
+a//aaaa/./ a/aaaa
+a//aaaa//a a/aaaa/a
+a//aaaa//. a/aaaa
+a//aaaa/// a/aaaa
+a//aaa.aaa a/aaa.aaa
+a//aaa.aa. a/aaa.aa.
+a//aaa.aa/ a/aaa.aa
+a//aaa.a.a a/aaa.a.a
+a//aaa.a.. a/aaa.a..
+a//aaa.a./ a/aaa.a.
+a//aaa.a/a a/aaa.a/a
+a//aaa.a/. a/aaa.a
+a//aaa.a// a/aaa.a
+a//aaa..aa a/aaa..aa
+a//aaa..a. a/aaa..a.
+a//aaa..a/ a/aaa..a
+a//aaa...a a/aaa...a
+a//aaa.... a/aaa....
+a//aaa.../ a/aaa...
+a//aaa../a a/aaa../a
+a//aaa../. a/aaa..
+a//aaa..// a/aaa..
+a//aaa./aa a/aaa./aa
+a//aaa./a. a/aaa./a.
+a//aaa./a/ a/aaa./a
+a//aaa./.a a/aaa./.a
+a//aaa./.. a
+a//aaa././ a/aaa.
+a//aaa.//a a/aaa./a
+a//aaa.//. a/aaa.
+a//aaa./// a/aaa.
+a//aaa/aaa a/aaa/aaa
+a//aaa/aa. a/aaa/aa.
+a//aaa/aa/ a/aaa/aa
+a//aaa/a.a a/aaa/a.a
+a//aaa/a.. a/aaa/a..
+a//aaa/a./ a/aaa/a.
+a//aaa/a/a a/aaa/a/a
+a//aaa/a/. a/aaa/a
+a//aaa/a// a/aaa/a
+a//aaa/.aa a/aaa/.aa
+a//aaa/.a. a/aaa/.a.
+a//aaa/.a/ a/aaa/.a
+a//aaa/..a a/aaa/..a
+a//aaa/... a/aaa/...
+a//aaa/../ a
+a//aaa/./a a/aaa/a
+a//aaa/./. a/aaa
+a//aaa/.// a/aaa
+a//aaa//aa a/aaa/aa
+a//aaa//a. a/aaa/a.
+a//aaa//a/ a/aaa/a
+a//aaa//.a a/aaa/.a
+a//aaa//.. a
+a//aaa//./ a/aaa
+a//aaa///a a/aaa/a
+a//aaa///. a/aaa
+a//aaa//// a/aaa
+a//aa.aaaa a/aa.aaaa
+a//aa.aaa. a/aa.aaa.
+a//aa.aaa/ a/aa.aaa
+a//aa.aa.a a/aa.aa.a
+a//aa.aa.. a/aa.aa..
+a//aa.aa./ a/aa.aa.
+a//aa.aa/a a/aa.aa/a
+a//aa.aa/. a/aa.aa
+a//aa.aa// a/aa.aa
+a//aa.a.aa a/aa.a.aa
+a//aa.a.a. a/aa.a.a.
+a//aa.a.a/ a/aa.a.a
+a//aa.a..a a/aa.a..a
+a//aa.a... a/aa.a...
+a//aa.a../ a/aa.a..
+a//aa.a./a a/aa.a./a
+a//aa.a./. a/aa.a.
+a//aa.a.// a/aa.a.
+a//aa.a/aa a/aa.a/aa
+a//aa.a/a. a/aa.a/a.
+a//aa.a/a/ a/aa.a/a
+a//aa.a/.a a/aa.a/.a
+a//aa.a/.. a
+a//aa.a/./ a/aa.a
+a//aa.a//a a/aa.a/a
+a//aa.a//. a/aa.a
+a//aa.a/// a/aa.a
+a//aa..aaa a/aa..aaa
+a//aa..aa. a/aa..aa.
+a//aa..aa/ a/aa..aa
+a//aa..a.a a/aa..a.a
+a//aa..a.. a/aa..a..
+a//aa..a./ a/aa..a.
+a//aa..a/a a/aa..a/a
+a//aa..a/. a/aa..a
+a//aa..a// a/aa..a
+a//aa...aa a/aa...aa
+a//aa...a. a/aa...a.
+a//aa...a/ a/aa...a
+a//aa....a a/aa....a
+a//aa..... a/aa.....
+a//aa..../ a/aa....
+a//aa.../a a/aa.../a
+a//aa.../. a/aa...
+a//aa...// a/aa...
+a//aa../aa a/aa../aa
+a//aa../a. a/aa../a.
+a//aa../a/ a/aa../a
+a//aa../.a a/aa../.a
+a//aa../.. a
+a//aa.././ a/aa..
+a//aa..//a a/aa../a
+a//aa..//. a/aa..
+a//aa../// a/aa..
+a//aa./aaa a/aa./aaa
+a//aa./aa. a/aa./aa.
+a//aa./aa/ a/aa./aa
+a//aa./a.a a/aa./a.a
+a//aa./a.. a/aa./a..
+a//aa./a./ a/aa./a.
+a//aa./a/a a/aa./a/a
+a//aa./a/. a/aa./a
+a//aa./a// a/aa./a
+a//aa./.aa a/aa./.aa
+a//aa./.a. a/aa./.a.
+a//aa./.a/ a/aa./.a
+a//aa./..a a/aa./..a
+a//aa./... a/aa./...
+a//aa./../ a
+a//aa././a a/aa./a
+a//aa././. a/aa.
+a//aa./.// a/aa.
+a//aa.//aa a/aa./aa
+a//aa.//a. a/aa./a.
+a//aa.//a/ a/aa./a
+a//aa.//.a a/aa./.a
+a//aa.//.. a
+a//aa.//./ a/aa.
+a//aa.///a a/aa./a
+a//aa.///. a/aa.
+a//aa.//// a/aa.
+a//aa/aaaa a/aa/aaaa
+a//aa/aaa. a/aa/aaa.
+a//aa/aaa/ a/aa/aaa
+a//aa/aa.a a/aa/aa.a
+a//aa/aa.. a/aa/aa..
+a//aa/aa./ a/aa/aa.
+a//aa/aa/a a/aa/aa/a
+a//aa/aa/. a/aa/aa
+a//aa/aa// a/aa/aa
+a//aa/a.aa a/aa/a.aa
+a//aa/a.a. a/aa/a.a.
+a//aa/a.a/ a/aa/a.a
+a//aa/a..a a/aa/a..a
+a//aa/a... a/aa/a...
+a//aa/a../ a/aa/a..
+a//aa/a./a a/aa/a./a
+a//aa/a./. a/aa/a.
+a//aa/a.// a/aa/a.
+a//aa/a/aa a/aa/a/aa
+a//aa/a/a. a/aa/a/a.
+a//aa/a/a/ a/aa/a/a
+a//aa/a/.a a/aa/a/.a
+a//aa/a/.. a/aa
+a//aa/a/./ a/aa/a
+a//aa/a//a a/aa/a/a
+a//aa/a//. a/aa/a
+a//aa/a/// a/aa/a
+a//aa/.aaa a/aa/.aaa
+a//aa/.aa. a/aa/.aa.
+a//aa/.aa/ a/aa/.aa
+a//aa/.a.a a/aa/.a.a
+a//aa/.a.. a/aa/.a..
+a//aa/.a./ a/aa/.a.
+a//aa/.a/a a/aa/.a/a
+a//aa/.a/. a/aa/.a
+a//aa/.a// a/aa/.a
+a//aa/..aa a/aa/..aa
+a//aa/..a. a/aa/..a.
+a//aa/..a/ a/aa/..a
+a//aa/...a a/aa/...a
+a//aa/.... a/aa/....
+a//aa/.../ a/aa/...
+a//aa/../a a/a
+a//aa/../. a
+a//aa/..// a
+a//aa/./aa a/aa/aa
+a//aa/./a. a/aa/a.
+a//aa/./a/ a/aa/a
+a//aa/./.a a/aa/.a
+a//aa/./.. a
+a//aa/././ a/aa
+a//aa/.//a a/aa/a
+a//aa/.//. a/aa
+a//aa/./// a/aa
+a//aa//aaa a/aa/aaa
+a//aa//aa. a/aa/aa.
+a//aa//aa/ a/aa/aa
+a//aa//a.a a/aa/a.a
+a//aa//a.. a/aa/a..
+a//aa//a./ a/aa/a.
+a//aa//a/a a/aa/a/a
+a//aa//a/. a/aa/a
+a//aa//a// a/aa/a
+a//aa//.aa a/aa/.aa
+a//aa//.a. a/aa/.a.
+a//aa//.a/ a/aa/.a
+a//aa//..a a/aa/..a
+a//aa//... a/aa/...
+a//aa//../ a
+a//aa//./a a/aa/a
+a//aa//./. a/aa
+a//aa//.// a/aa
+a//aa///aa a/aa/aa
+a//aa///a. a/aa/a.
+a//aa///a/ a/aa/a
+a//aa///.a a/aa/.a
+a//aa///.. a
+a//aa///./ a/aa
+a//aa////a a/aa/a
+a//aa////. a/aa
+a//aa///// a/aa
+a//a.aaaaa a/a.aaaaa
+a//a.aaaa. a/a.aaaa.
+a//a.aaaa/ a/a.aaaa
+a//a.aaa.a a/a.aaa.a
+a//a.aaa.. a/a.aaa..
+a//a.aaa./ a/a.aaa.
+a//a.aaa/a a/a.aaa/a
+a//a.aaa/. a/a.aaa
+a//a.aaa// a/a.aaa
+a//a.aa.aa a/a.aa.aa
+a//a.aa.a. a/a.aa.a.
+a//a.aa.a/ a/a.aa.a
+a//a.aa..a a/a.aa..a
+a//a.aa... a/a.aa...
+a//a.aa../ a/a.aa..
+a//a.aa./a a/a.aa./a
+a//a.aa./. a/a.aa.
+a//a.aa.// a/a.aa.
+a//a.aa/aa a/a.aa/aa
+a//a.aa/a. a/a.aa/a.
+a//a.aa/a/ a/a.aa/a
+a//a.aa/.a a/a.aa/.a
+a//a.aa/.. a
+a//a.aa/./ a/a.aa
+a//a.aa//a a/a.aa/a
+a//a.aa//. a/a.aa
+a//a.aa/// a/a.aa
+a//a.a.aaa a/a.a.aaa
+a//a.a.aa. a/a.a.aa.
+a//a.a.aa/ a/a.a.aa
+a//a.a.a.a a/a.a.a.a
+a//a.a.a.. a/a.a.a..
+a//a.a.a./ a/a.a.a.
+a//a.a.a/a a/a.a.a/a
+a//a.a.a/. a/a.a.a
+a//a.a.a// a/a.a.a
+a//a.a..aa a/a.a..aa
+a//a.a..a. a/a.a..a.
+a//a.a..a/ a/a.a..a
+a//a.a...a a/a.a...a
+a//a.a.... a/a.a....
+a//a.a.../ a/a.a...
+a//a.a../a a/a.a../a
+a//a.a../. a/a.a..
+a//a.a..// a/a.a..
+a//a.a./aa a/a.a./aa
+a//a.a./a. a/a.a./a.
+a//a.a./a/ a/a.a./a
+a//a.a./.a a/a.a./.a
+a//a.a./.. a
+a//a.a././ a/a.a.
+a//a.a.//a a/a.a./a
+a//a.a.//. a/a.a.
+a//a.a./// a/a.a.
+a//a.a/aaa a/a.a/aaa
+a//a.a/aa. a/a.a/aa.
+a//a.a/aa/ a/a.a/aa
+a//a.a/a.a a/a.a/a.a
+a//a.a/a.. a/a.a/a..
+a//a.a/a./ a/a.a/a.
+a//a.a/a/a a/a.a/a/a
+a//a.a/a/. a/a.a/a
+a//a.a/a// a/a.a/a
+a//a.a/.aa a/a.a/.aa
+a//a.a/.a. a/a.a/.a.
+a//a.a/.a/ a/a.a/.a
+a//a.a/..a a/a.a/..a
+a//a.a/... a/a.a/...
+a//a.a/../ a
+a//a.a/./a a/a.a/a
+a//a.a/./. a/a.a
+a//a.a/.// a/a.a
+a//a.a//aa a/a.a/aa
+a//a.a//a. a/a.a/a.
+a//a.a//a/ a/a.a/a
+a//a.a//.a a/a.a/.a
+a//a.a//.. a
+a//a.a//./ a/a.a
+a//a.a///a a/a.a/a
+a//a.a///. a/a.a
+a//a.a//// a/a.a
+a//a..aaaa a/a..aaaa
+a//a..aaa. a/a..aaa.
+a//a..aaa/ a/a..aaa
+a//a..aa.a a/a..aa.a
+a//a..aa.. a/a..aa..
+a//a..aa./ a/a..aa.
+a//a..aa/a a/a..aa/a
+a//a..aa/. a/a..aa
+a//a..aa// a/a..aa
+a//a..a.aa a/a..a.aa
+a//a..a.a. a/a..a.a.
+a//a..a.a/ a/a..a.a
+a//a..a..a a/a..a..a
+a//a..a... a/a..a...
+a//a..a../ a/a..a..
+a//a..a./a a/a..a./a
+a//a..a./. a/a..a.
+a//a..a.// a/a..a.
+a//a..a/aa a/a..a/aa
+a//a..a/a. a/a..a/a.
+a//a..a/a/ a/a..a/a
+a//a..a/.a a/a..a/.a
+a//a..a/.. a
+a//a..a/./ a/a..a
+a//a..a//a a/a..a/a
+a//a..a//. a/a..a
+a//a..a/// a/a..a
+a//a...aaa a/a...aaa
+a//a...aa. a/a...aa.
+a//a...aa/ a/a...aa
+a//a...a.a a/a...a.a
+a//a...a.. a/a...a..
+a//a...a./ a/a...a.
+a//a...a/a a/a...a/a
+a//a...a/. a/a...a
+a//a...a// a/a...a
+a//a....aa a/a....aa
+a//a....a. a/a....a.
+a//a....a/ a/a....a
+a//a.....a a/a.....a
+a//a...... a/a......
+a//a...../ a/a.....
+a//a..../a a/a..../a
+a//a..../. a/a....
+a//a....// a/a....
+a//a.../aa a/a.../aa
+a//a.../a. a/a.../a.
+a//a.../a/ a/a.../a
+a//a.../.a a/a.../.a
+a//a.../.. a
+a//a..././ a/a...
+a//a...//a a/a.../a
+a//a...//. a/a...
+a//a.../// a/a...
+a//a../aaa a/a../aaa
+a//a../aa. a/a../aa.
+a//a../aa/ a/a../aa
+a//a../a.a a/a../a.a
+a//a../a.. a/a../a..
+a//a../a./ a/a../a.
+a//a../a/a a/a../a/a
+a//a../a/. a/a../a
+a//a../a// a/a../a
+a//a../.aa a/a../.aa
+a//a../.a. a/a../.a.
+a//a../.a/ a/a../.a
+a//a../..a a/a../..a
+a//a../... a/a../...
+a//a../../ a
+a//a.././a a/a../a
+a//a.././. a/a..
+a//a../.// a/a..
+a//a..//aa a/a../aa
+a//a..//a. a/a../a.
+a//a..//a/ a/a../a
+a//a..//.a a/a../.a
+a//a..//.. a
+a//a..//./ a/a..
+a//a..///a a/a../a
+a//a..///. a/a..
+a//a..//// a/a..
+a//a./aaaa a/a./aaaa
+a//a./aaa. a/a./aaa.
+a//a./aaa/ a/a./aaa
+a//a./aa.a a/a./aa.a
+a//a./aa.. a/a./aa..
+a//a./aa./ a/a./aa.
+a//a./aa/a a/a./aa/a
+a//a./aa/. a/a./aa
+a//a./aa// a/a./aa
+a//a./a.aa a/a./a.aa
+a//a./a.a. a/a./a.a.
+a//a./a.a/ a/a./a.a
+a//a./a..a a/a./a..a
+a//a./a... a/a./a...
+a//a./a../ a/a./a..
+a//a./a./a a/a./a./a
+a//a./a./. a/a./a.
+a//a./a.// a/a./a.
+a//a./a/aa a/a./a/aa
+a//a./a/a. a/a./a/a.
+a//a./a/a/ a/a./a/a
+a//a./a/.a a/a./a/.a
+a//a./a/.. a/a.
+a//a./a/./ a/a./a
+a//a./a//a a/a./a/a
+a//a./a//. a/a./a
+a//a./a/// a/a./a
+a//a./.aaa a/a./.aaa
+a//a./.aa. a/a./.aa.
+a//a./.aa/ a/a./.aa
+a//a./.a.a a/a./.a.a
+a//a./.a.. a/a./.a..
+a//a./.a./ a/a./.a.
+a//a./.a/a a/a./.a/a
+a//a./.a/. a/a./.a
+a//a./.a// a/a./.a
+a//a./..aa a/a./..aa
+a//a./..a. a/a./..a.
+a//a./..a/ a/a./..a
+a//a./...a a/a./...a
+a//a./.... a/a./....
+a//a./.../ a/a./...
+a//a./../a a/a
+a//a./../. a
+a//a./..// a
+a//a././aa a/a./aa
+a//a././a. a/a./a.
+a//a././a/ a/a./a
+a//a././.a a/a./.a
+a//a././.. a
+a//a./././ a/a.
+a//a././/a a/a./a
+a//a././/. a/a.
+a//a././// a/a.
+a//a.//aaa a/a./aaa
+a//a.//aa. a/a./aa.
+a//a.//aa/ a/a./aa
+a//a.//a.a a/a./a.a
+a//a.//a.. a/a./a..
+a//a.//a./ a/a./a.
+a//a.//a/a a/a./a/a
+a//a.//a/. a/a./a
+a//a.//a// a/a./a
+a//a.//.aa a/a./.aa
+a//a.//.a. a/a./.a.
+a//a.//.a/ a/a./.a
+a//a.//..a a/a./..a
+a//a.//... a/a./...
+a//a.//../ a
+a//a.//./a a/a./a
+a//a.//./. a/a.
+a//a.//.// a/a.
+a//a.///aa a/a./aa
+a//a.///a. a/a./a.
+a//a.///a/ a/a./a
+a//a.///.a a/a./.a
+a//a.///.. a
+a//a.///./ a/a.
+a//a.////a a/a./a
+a//a.////. a/a.
+a//a.///// a/a.
+a//a/aaaaa a/a/aaaaa
+a//a/aaaa. a/a/aaaa.
+a//a/aaaa/ a/a/aaaa
+a//a/aaa.a a/a/aaa.a
+a//a/aaa.. a/a/aaa..
+a//a/aaa./ a/a/aaa.
+a//a/aaa/a a/a/aaa/a
+a//a/aaa/. a/a/aaa
+a//a/aaa// a/a/aaa
+a//a/aa.aa a/a/aa.aa
+a//a/aa.a. a/a/aa.a.
+a//a/aa.a/ a/a/aa.a
+a//a/aa..a a/a/aa..a
+a//a/aa... a/a/aa...
+a//a/aa../ a/a/aa..
+a//a/aa./a a/a/aa./a
+a//a/aa./. a/a/aa.
+a//a/aa.// a/a/aa.
+a//a/aa/aa a/a/aa/aa
+a//a/aa/a. a/a/aa/a.
+a//a/aa/a/ a/a/aa/a
+a//a/aa/.a a/a/aa/.a
+a//a/aa/.. a/a
+a//a/aa/./ a/a/aa
+a//a/aa//a a/a/aa/a
+a//a/aa//. a/a/aa
+a//a/aa/// a/a/aa
+a//a/a.aaa a/a/a.aaa
+a//a/a.aa. a/a/a.aa.
+a//a/a.aa/ a/a/a.aa
+a//a/a.a.a a/a/a.a.a
+a//a/a.a.. a/a/a.a..
+a//a/a.a./ a/a/a.a.
+a//a/a.a/a a/a/a.a/a
+a//a/a.a/. a/a/a.a
+a//a/a.a// a/a/a.a
+a//a/a..aa a/a/a..aa
+a//a/a..a. a/a/a..a.
+a//a/a..a/ a/a/a..a
+a//a/a...a a/a/a...a
+a//a/a.... a/a/a....
+a//a/a.../ a/a/a...
+a//a/a../a a/a/a../a
+a//a/a../. a/a/a..
+a//a/a..// a/a/a..
+a//a/a./aa a/a/a./aa
+a//a/a./a. a/a/a./a.
+a//a/a./a/ a/a/a./a
+a//a/a./.a a/a/a./.a
+a//a/a./.. a/a
+a//a/a././ a/a/a.
+a//a/a.//a a/a/a./a
+a//a/a.//. a/a/a.
+a//a/a./// a/a/a.
+a//a/a/aaa a/a/a/aaa
+a//a/a/aa. a/a/a/aa.
+a//a/a/aa/ a/a/a/aa
+a//a/a/a.a a/a/a/a.a
+a//a/a/a.. a/a/a/a..
+a//a/a/a./ a/a/a/a.
+a//a/a/a/a a/a/a/a/a
+a//a/a/a/. a/a/a/a
+a//a/a/a// a/a/a/a
+a//a/a/.aa a/a/a/.aa
+a//a/a/.a. a/a/a/.a.
+a//a/a/.a/ a/a/a/.a
+a//a/a/..a a/a/a/..a
+a//a/a/... a/a/a/...
+a//a/a/../ a/a
+a//a/a/./a a/a/a/a
+a//a/a/./. a/a/a
+a//a/a/.// a/a/a
+a//a/a//aa a/a/a/aa
+a//a/a//a. a/a/a/a.
+a//a/a//a/ a/a/a/a
+a//a/a//.a a/a/a/.a
+a//a/a//.. a/a
+a//a/a//./ a/a/a
+a//a/a///a a/a/a/a
+a//a/a///. a/a/a
+a//a/a//// a/a/a
+a//a/.aaaa a/a/.aaaa
+a//a/.aaa. a/a/.aaa.
+a//a/.aaa/ a/a/.aaa
+a//a/.aa.a a/a/.aa.a
+a//a/.aa.. a/a/.aa..
+a//a/.aa./ a/a/.aa.
+a//a/.aa/a a/a/.aa/a
+a//a/.aa/. a/a/.aa
+a//a/.aa// a/a/.aa
+a//a/.a.aa a/a/.a.aa
+a//a/.a.a. a/a/.a.a.
+a//a/.a.a/ a/a/.a.a
+a//a/.a..a a/a/.a..a
+a//a/.a... a/a/.a...
+a//a/.a../ a/a/.a..
+a//a/.a./a a/a/.a./a
+a//a/.a./. a/a/.a.
+a//a/.a.// a/a/.a.
+a//a/.a/aa a/a/.a/aa
+a//a/.a/a. a/a/.a/a.
+a//a/.a/a/ a/a/.a/a
+a//a/.a/.a a/a/.a/.a
+a//a/.a/.. a/a
+a//a/.a/./ a/a/.a
+a//a/.a//a a/a/.a/a
+a//a/.a//. a/a/.a
+a//a/.a/// a/a/.a
+a//a/..aaa a/a/..aaa
+a//a/..aa. a/a/..aa.
+a//a/..aa/ a/a/..aa
+a//a/..a.a a/a/..a.a
+a//a/..a.. a/a/..a..
+a//a/..a./ a/a/..a.
+a//a/..a/a a/a/..a/a
+a//a/..a/. a/a/..a
+a//a/..a// a/a/..a
+a//a/...aa a/a/...aa
+a//a/...a. a/a/...a.
+a//a/...a/ a/a/...a
+a//a/....a a/a/....a
+a//a/..... a/a/.....
+a//a/..../ a/a/....
+a//a/.../a a/a/.../a
+a//a/.../. a/a/...
+a//a/...// a/a/...
+a//a/../aa a/aa
+a//a/../a. a/a.
+a//a/../a/ a/a
+a//a/../.a a/.a
+a//a/../.. .
+a//a/.././ a
+a//a/..//a a/a
+a//a/..//. a
+a//a/../// a
+a//a/./aaa a/a/aaa
+a//a/./aa. a/a/aa.
+a//a/./aa/ a/a/aa
+a//a/./a.a a/a/a.a
+a//a/./a.. a/a/a..
+a//a/./a./ a/a/a.
+a//a/./a/a a/a/a/a
+a//a/./a/. a/a/a
+a//a/./a// a/a/a
+a//a/./.aa a/a/.aa
+a//a/./.a. a/a/.a.
+a//a/./.a/ a/a/.a
+a//a/./..a a/a/..a
+a//a/./... a/a/...
+a//a/./../ a
+a//a/././a a/a/a
+a//a/././. a/a
+a//a/./.// a/a
+a//a/.//aa a/a/aa
+a//a/.//a. a/a/a.
+a//a/.//a/ a/a/a
+a//a/.//.a a/a/.a
+a//a/.//.. a
+a//a/.//./ a/a
+a//a/.///a a/a/a
+a//a/.///. a/a
+a//a/.//// a/a
+a//a//aaaa a/a/aaaa
+a//a//aaa. a/a/aaa.
+a//a//aaa/ a/a/aaa
+a//a//aa.a a/a/aa.a
+a//a//aa.. a/a/aa..
+a//a//aa./ a/a/aa.
+a//a//aa/a a/a/aa/a
+a//a//aa/. a/a/aa
+a//a//aa// a/a/aa
+a//a//a.aa a/a/a.aa
+a//a//a.a. a/a/a.a.
+a//a//a.a/ a/a/a.a
+a//a//a..a a/a/a..a
+a//a//a... a/a/a...
+a//a//a../ a/a/a..
+a//a//a./a a/a/a./a
+a//a//a./. a/a/a.
+a//a//a.// a/a/a.
+a//a//a/aa a/a/a/aa
+a//a//a/a. a/a/a/a.
+a//a//a/a/ a/a/a/a
+a//a//a/.a a/a/a/.a
+a//a//a/.. a/a
+a//a//a/./ a/a/a
+a//a//a//a a/a/a/a
+a//a//a//. a/a/a
+a//a//a/// a/a/a
+a//a//.aaa a/a/.aaa
+a//a//.aa. a/a/.aa.
+a//a//.aa/ a/a/.aa
+a//a//.a.a a/a/.a.a
+a//a//.a.. a/a/.a..
+a//a//.a./ a/a/.a.
+a//a//.a/a a/a/.a/a
+a//a//.a/. a/a/.a
+a//a//.a// a/a/.a
+a//a//..aa a/a/..aa
+a//a//..a. a/a/..a.
+a//a//..a/ a/a/..a
+a//a//...a a/a/...a
+a//a//.... a/a/....
+a//a//.../ a/a/...
+a//a//../a a/a
+a//a//../. a
+a//a//..// a
+a//a//./aa a/a/aa
+a//a//./a. a/a/a.
+a//a//./a/ a/a/a
+a//a//./.a a/a/.a
+a//a//./.. a
+a//a//././ a/a
+a//a//.//a a/a/a
+a//a//.//. a/a
+a//a//./// a/a
+a//a///aaa a/a/aaa
+a//a///aa. a/a/aa.
+a//a///aa/ a/a/aa
+a//a///a.a a/a/a.a
+a//a///a.. a/a/a..
+a//a///a./ a/a/a.
+a//a///a/a a/a/a/a
+a//a///a/. a/a/a
+a//a///a// a/a/a
+a//a///.aa a/a/.aa
+a//a///.a. a/a/.a.
+a//a///.a/ a/a/.a
+a//a///..a a/a/..a
+a//a///... a/a/...
+a//a///../ a
+a//a///./a a/a/a
+a//a///./. a/a
+a//a///.// a/a
+a//a////aa a/a/aa
+a//a////a. a/a/a.
+a//a////a/ a/a/a
+a//a////.a a/a/.a
+a//a////.. a
+a//a////./ a/a
+a//a/////a a/a/a
+a//a/////. a/a
+a//a////// a/a
+a//.aaaaaa a/.aaaaaa
+a//.aaaaa. a/.aaaaa.
+a//.aaaaa/ a/.aaaaa
+a//.aaaa.a a/.aaaa.a
+a//.aaaa.. a/.aaaa..
+a//.aaaa./ a/.aaaa.
+a//.aaaa/a a/.aaaa/a
+a//.aaaa/. a/.aaaa
+a//.aaaa// a/.aaaa
+a//.aaa.aa a/.aaa.aa
+a//.aaa.a. a/.aaa.a.
+a//.aaa.a/ a/.aaa.a
+a//.aaa..a a/.aaa..a
+a//.aaa... a/.aaa...
+a//.aaa../ a/.aaa..
+a//.aaa./a a/.aaa./a
+a//.aaa./. a/.aaa.
+a//.aaa.// a/.aaa.
+a//.aaa/aa a/.aaa/aa
+a//.aaa/a. a/.aaa/a.
+a//.aaa/a/ a/.aaa/a
+a//.aaa/.a a/.aaa/.a
+a//.aaa/.. a
+a//.aaa/./ a/.aaa
+a//.aaa//a a/.aaa/a
+a//.aaa//. a/.aaa
+a//.aaa/// a/.aaa
+a//.aa.aaa a/.aa.aaa
+a//.aa.aa. a/.aa.aa.
+a//.aa.aa/ a/.aa.aa
+a//.aa.a.a a/.aa.a.a
+a//.aa.a.. a/.aa.a..
+a//.aa.a./ a/.aa.a.
+a//.aa.a/a a/.aa.a/a
+a//.aa.a/. a/.aa.a
+a//.aa.a// a/.aa.a
+a//.aa..aa a/.aa..aa
+a//.aa..a. a/.aa..a.
+a//.aa..a/ a/.aa..a
+a//.aa...a a/.aa...a
+a//.aa.... a/.aa....
+a//.aa.../ a/.aa...
+a//.aa../a a/.aa../a
+a//.aa../. a/.aa..
+a//.aa..// a/.aa..
+a//.aa./aa a/.aa./aa
+a//.aa./a. a/.aa./a.
+a//.aa./a/ a/.aa./a
+a//.aa./.a a/.aa./.a
+a//.aa./.. a
+a//.aa././ a/.aa.
+a//.aa.//a a/.aa./a
+a//.aa.//. a/.aa.
+a//.aa./// a/.aa.
+a//.aa/aaa a/.aa/aaa
+a//.aa/aa. a/.aa/aa.
+a//.aa/aa/ a/.aa/aa
+a//.aa/a.a a/.aa/a.a
+a//.aa/a.. a/.aa/a..
+a//.aa/a./ a/.aa/a.
+a//.aa/a/a a/.aa/a/a
+a//.aa/a/. a/.aa/a
+a//.aa/a// a/.aa/a
+a//.aa/.aa a/.aa/.aa
+a//.aa/.a. a/.aa/.a.
+a//.aa/.a/ a/.aa/.a
+a//.aa/..a a/.aa/..a
+a//.aa/... a/.aa/...
+a//.aa/../ a
+a//.aa/./a a/.aa/a
+a//.aa/./. a/.aa
+a//.aa/.// a/.aa
+a//.aa//aa a/.aa/aa
+a//.aa//a. a/.aa/a.
+a//.aa//a/ a/.aa/a
+a//.aa//.a a/.aa/.a
+a//.aa//.. a
+a//.aa//./ a/.aa
+a//.aa///a a/.aa/a
+a//.aa///. a/.aa
+a//.aa//// a/.aa
+a//.a.aaaa a/.a.aaaa
+a//.a.aaa. a/.a.aaa.
+a//.a.aaa/ a/.a.aaa
+a//.a.aa.a a/.a.aa.a
+a//.a.aa.. a/.a.aa..
+a//.a.aa./ a/.a.aa.
+a//.a.aa/a a/.a.aa/a
+a//.a.aa/. a/.a.aa
+a//.a.aa// a/.a.aa
+a//.a.a.aa a/.a.a.aa
+a//.a.a.a. a/.a.a.a.
+a//.a.a.a/ a/.a.a.a
+a//.a.a..a a/.a.a..a
+a//.a.a... a/.a.a...
+a//.a.a../ a/.a.a..
+a//.a.a./a a/.a.a./a
+a//.a.a./. a/.a.a.
+a//.a.a.// a/.a.a.
+a//.a.a/aa a/.a.a/aa
+a//.a.a/a. a/.a.a/a.
+a//.a.a/a/ a/.a.a/a
+a//.a.a/.a a/.a.a/.a
+a//.a.a/.. a
+a//.a.a/./ a/.a.a
+a//.a.a//a a/.a.a/a
+a//.a.a//. a/.a.a
+a//.a.a/// a/.a.a
+a//.a..aaa a/.a..aaa
+a//.a..aa. a/.a..aa.
+a//.a..aa/ a/.a..aa
+a//.a..a.a a/.a..a.a
+a//.a..a.. a/.a..a..
+a//.a..a./ a/.a..a.
+a//.a..a/a a/.a..a/a
+a//.a..a/. a/.a..a
+a//.a..a// a/.a..a
+a//.a...aa a/.a...aa
+a//.a...a. a/.a...a.
+a//.a...a/ a/.a...a
+a//.a....a a/.a....a
+a//.a..... a/.a.....
+a//.a..../ a/.a....
+a//.a.../a a/.a.../a
+a//.a.../. a/.a...
+a//.a...// a/.a...
+a//.a../aa a/.a../aa
+a//.a../a. a/.a../a.
+a//.a../a/ a/.a../a
+a//.a../.a a/.a../.a
+a//.a../.. a
+a//.a.././ a/.a..
+a//.a..//a a/.a../a
+a//.a..//. a/.a..
+a//.a../// a/.a..
+a//.a./aaa a/.a./aaa
+a//.a./aa. a/.a./aa.
+a//.a./aa/ a/.a./aa
+a//.a./a.a a/.a./a.a
+a//.a./a.. a/.a./a..
+a//.a./a./ a/.a./a.
+a//.a./a/a a/.a./a/a
+a//.a./a/. a/.a./a
+a//.a./a// a/.a./a
+a//.a./.aa a/.a./.aa
+a//.a./.a. a/.a./.a.
+a//.a./.a/ a/.a./.a
+a//.a./..a a/.a./..a
+a//.a./... a/.a./...
+a//.a./../ a
+a//.a././a a/.a./a
+a//.a././. a/.a.
+a//.a./.// a/.a.
+a//.a.//aa a/.a./aa
+a//.a.//a. a/.a./a.
+a//.a.//a/ a/.a./a
+a//.a.//.a a/.a./.a
+a//.a.//.. a
+a//.a.//./ a/.a.
+a//.a.///a a/.a./a
+a//.a.///. a/.a.
+a//.a.//// a/.a.
+a//.a/aaaa a/.a/aaaa
+a//.a/aaa. a/.a/aaa.
+a//.a/aaa/ a/.a/aaa
+a//.a/aa.a a/.a/aa.a
+a//.a/aa.. a/.a/aa..
+a//.a/aa./ a/.a/aa.
+a//.a/aa/a a/.a/aa/a
+a//.a/aa/. a/.a/aa
+a//.a/aa// a/.a/aa
+a//.a/a.aa a/.a/a.aa
+a//.a/a.a. a/.a/a.a.
+a//.a/a.a/ a/.a/a.a
+a//.a/a..a a/.a/a..a
+a//.a/a... a/.a/a...
+a//.a/a../ a/.a/a..
+a//.a/a./a a/.a/a./a
+a//.a/a./. a/.a/a.
+a//.a/a.// a/.a/a.
+a//.a/a/aa a/.a/a/aa
+a//.a/a/a. a/.a/a/a.
+a//.a/a/a/ a/.a/a/a
+a//.a/a/.a a/.a/a/.a
+a//.a/a/.. a/.a
+a//.a/a/./ a/.a/a
+a//.a/a//a a/.a/a/a
+a//.a/a//. a/.a/a
+a//.a/a/// a/.a/a
+a//.a/.aaa a/.a/.aaa
+a//.a/.aa. a/.a/.aa.
+a//.a/.aa/ a/.a/.aa
+a//.a/.a.a a/.a/.a.a
+a//.a/.a.. a/.a/.a..
+a//.a/.a./ a/.a/.a.
+a//.a/.a/a a/.a/.a/a
+a//.a/.a/. a/.a/.a
+a//.a/.a// a/.a/.a
+a//.a/..aa a/.a/..aa
+a//.a/..a. a/.a/..a.
+a//.a/..a/ a/.a/..a
+a//.a/...a a/.a/...a
+a//.a/.... a/.a/....
+a//.a/.../ a/.a/...
+a//.a/../a a/a
+a//.a/../. a
+a//.a/..// a
+a//.a/./aa a/.a/aa
+a//.a/./a. a/.a/a.
+a//.a/./a/ a/.a/a
+a//.a/./.a a/.a/.a
+a//.a/./.. a
+a//.a/././ a/.a
+a//.a/.//a a/.a/a
+a//.a/.//. a/.a
+a//.a/./// a/.a
+a//.a//aaa a/.a/aaa
+a//.a//aa. a/.a/aa.
+a//.a//aa/ a/.a/aa
+a//.a//a.a a/.a/a.a
+a//.a//a.. a/.a/a..
+a//.a//a./ a/.a/a.
+a//.a//a/a a/.a/a/a
+a//.a//a/. a/.a/a
+a//.a//a// a/.a/a
+a//.a//.aa a/.a/.aa
+a//.a//.a. a/.a/.a.
+a//.a//.a/ a/.a/.a
+a//.a//..a a/.a/..a
+a//.a//... a/.a/...
+a//.a//../ a
+a//.a//./a a/.a/a
+a//.a//./. a/.a
+a//.a//.// a/.a
+a//.a///aa a/.a/aa
+a//.a///a. a/.a/a.
+a//.a///a/ a/.a/a
+a//.a///.a a/.a/.a
+a//.a///.. a
+a//.a///./ a/.a
+a//.a////a a/.a/a
+a//.a////. a/.a
+a//.a///// a/.a
+a//..aaaaa a/..aaaaa
+a//..aaaa. a/..aaaa.
+a//..aaaa/ a/..aaaa
+a//..aaa.a a/..aaa.a
+a//..aaa.. a/..aaa..
+a//..aaa./ a/..aaa.
+a//..aaa/a a/..aaa/a
+a//..aaa/. a/..aaa
+a//..aaa// a/..aaa
+a//..aa.aa a/..aa.aa
+a//..aa.a. a/..aa.a.
+a//..aa.a/ a/..aa.a
+a//..aa..a a/..aa..a
+a//..aa... a/..aa...
+a//..aa../ a/..aa..
+a//..aa./a a/..aa./a
+a//..aa./. a/..aa.
+a//..aa.// a/..aa.
+a//..aa/aa a/..aa/aa
+a//..aa/a. a/..aa/a.
+a//..aa/a/ a/..aa/a
+a//..aa/.a a/..aa/.a
+a//..aa/.. a
+a//..aa/./ a/..aa
+a//..aa//a a/..aa/a
+a//..aa//. a/..aa
+a//..aa/// a/..aa
+a//..a.aaa a/..a.aaa
+a//..a.aa. a/..a.aa.
+a//..a.aa/ a/..a.aa
+a//..a.a.a a/..a.a.a
+a//..a.a.. a/..a.a..
+a//..a.a./ a/..a.a.
+a//..a.a/a a/..a.a/a
+a//..a.a/. a/..a.a
+a//..a.a// a/..a.a
+a//..a..aa a/..a..aa
+a//..a..a. a/..a..a.
+a//..a..a/ a/..a..a
+a//..a...a a/..a...a
+a//..a.... a/..a....
+a//..a.../ a/..a...
+a//..a../a a/..a../a
+a//..a../. a/..a..
+a//..a..// a/..a..
+a//..a./aa a/..a./aa
+a//..a./a. a/..a./a.
+a//..a./a/ a/..a./a
+a//..a./.a a/..a./.a
+a//..a./.. a
+a//..a././ a/..a.
+a//..a.//a a/..a./a
+a//..a.//. a/..a.
+a//..a./// a/..a.
+a//..a/aaa a/..a/aaa
+a//..a/aa. a/..a/aa.
+a//..a/aa/ a/..a/aa
+a//..a/a.a a/..a/a.a
+a//..a/a.. a/..a/a..
+a//..a/a./ a/..a/a.
+a//..a/a/a a/..a/a/a
+a//..a/a/. a/..a/a
+a//..a/a// a/..a/a
+a//..a/.aa a/..a/.aa
+a//..a/.a. a/..a/.a.
+a//..a/.a/ a/..a/.a
+a//..a/..a a/..a/..a
+a//..a/... a/..a/...
+a//..a/../ a
+a//..a/./a a/..a/a
+a//..a/./. a/..a
+a//..a/.// a/..a
+a//..a//aa a/..a/aa
+a//..a//a. a/..a/a.
+a//..a//a/ a/..a/a
+a//..a//.a a/..a/.a
+a//..a//.. a
+a//..a//./ a/..a
+a//..a///a a/..a/a
+a//..a///. a/..a
+a//..a//// a/..a
+a//...aaaa a/...aaaa
+a//...aaa. a/...aaa.
+a//...aaa/ a/...aaa
+a//...aa.a a/...aa.a
+a//...aa.. a/...aa..
+a//...aa./ a/...aa.
+a//...aa/a a/...aa/a
+a//...aa/. a/...aa
+a//...aa// a/...aa
+a//...a.aa a/...a.aa
+a//...a.a. a/...a.a.
+a//...a.a/ a/...a.a
+a//...a..a a/...a..a
+a//...a... a/...a...
+a//...a../ a/...a..
+a//...a./a a/...a./a
+a//...a./. a/...a.
+a//...a.// a/...a.
+a//...a/aa a/...a/aa
+a//...a/a. a/...a/a.
+a//...a/a/ a/...a/a
+a//...a/.a a/...a/.a
+a//...a/.. a
+a//...a/./ a/...a
+a//...a//a a/...a/a
+a//...a//. a/...a
+a//...a/// a/...a
+a//....aaa a/....aaa
+a//....aa. a/....aa.
+a//....aa/ a/....aa
+a//....a.a a/....a.a
+a//....a.. a/....a..
+a//....a./ a/....a.
+a//....a/a a/....a/a
+a//....a/. a/....a
+a//....a// a/....a
+a//.....aa a/.....aa
+a//.....a. a/.....a.
+a//.....a/ a/.....a
+a//......a a/......a
+a//....... a/.......
+a//....../ a/......
+a//...../a a/...../a
+a//...../. a/.....
+a//.....// a/.....
+a//..../aa a/..../aa
+a//..../a. a/..../a.
+a//..../a/ a/..../a
+a//..../.a a/..../.a
+a//..../.. a
+a//...././ a/....
+a//....//a a/..../a
+a//....//. a/....
+a//..../// a/....
+a//.../aaa a/.../aaa
+a//.../aa. a/.../aa.
+a//.../aa/ a/.../aa
+a//.../a.a a/.../a.a
+a//.../a.. a/.../a..
+a//.../a./ a/.../a.
+a//.../a/a a/.../a/a
+a//.../a/. a/.../a
+a//.../a// a/.../a
+a//.../.aa a/.../.aa
+a//.../.a. a/.../.a.
+a//.../.a/ a/.../.a
+a//.../..a a/.../..a
+a//.../... a/.../...
+a//.../../ a
+a//..././a a/.../a
+a//..././. a/...
+a//.../.// a/...
+a//...//aa a/.../aa
+a//...//a. a/.../a.
+a//...//a/ a/.../a
+a//...//.a a/.../.a
+a//...//.. a
+a//...//./ a/...
+a//...///a a/.../a
+a//...///. a/...
+a//...//// a/...
+a//../aaaa aaaa
+a//../aaa. aaa.
+a//../aaa/ aaa
+a//../aa.a aa.a
+a//../aa.. aa..
+a//../aa./ aa.
+a//../aa/a aa/a
+a//../aa/. aa
+a//../aa// aa
+a//../a.aa a.aa
+a//../a.a. a.a.
+a//../a.a/ a.a
+a//../a..a a..a
+a//../a... a...
+a//../a../ a..
+a//../a./a a./a
+a//../a./. a.
+a//../a.// a.
+a//../a/aa a/aa
+a//../a/a. a/a.
+a//../a/a/ a/a
+a//../a/.a a/.a
+a//../a/.. .
+a//../a/./ a
+a//../a//a a/a
+a//../a//. a
+a//../a/// a
+a//../.aaa .aaa
+a//../.aa. .aa.
+a//../.aa/ .aa
+a//../.a.a .a.a
+a//../.a.. .a..
+a//../.a./ .a.
+a//../.a/a .a/a
+a//../.a/. .a
+a//../.a// .a
+a//../..aa ..aa
+a//../..a. ..a.
+a//../..a/ ..a
+a//../...a ...a
+a//../.... ....
+a//../.../ ...
+a//../../a ../a
+a//../../. ..
+a//../..// ..
+a//.././aa aa
+a//.././a. a.
+a//.././a/ a
+a//.././.a .a
+a//.././.. ..
+a//../././ .
+a//.././/a a
+a//.././/. .
+a//.././// .
+a//..//aaa aaa
+a//..//aa. aa.
+a//..//aa/ aa
+a//..//a.a a.a
+a//..//a.. a..
+a//..//a./ a.
+a//..//a/a a/a
+a//..//a/. a
+a//..//a// a
+a//..//.aa .aa
+a//..//.a. .a.
+a//..//.a/ .a
+a//..//..a ..a
+a//..//... ...
+a//..//../ ..
+a//..//./a a
+a//..//./. .
+a//..//.// .
+a//..///aa aa
+a//..///a. a.
+a//..///a/ a
+a//..///.a .a
+a//..///.. ..
+a//..///./ .
+a//..////a a
+a//..////. .
+a//..///// .
+a//./aaaaa a/aaaaa
+a//./aaaa. a/aaaa.
+a//./aaaa/ a/aaaa
+a//./aaa.a a/aaa.a
+a//./aaa.. a/aaa..
+a//./aaa./ a/aaa.
+a//./aaa/a a/aaa/a
+a//./aaa/. a/aaa
+a//./aaa// a/aaa
+a//./aa.aa a/aa.aa
+a//./aa.a. a/aa.a.
+a//./aa.a/ a/aa.a
+a//./aa..a a/aa..a
+a//./aa... a/aa...
+a//./aa../ a/aa..
+a//./aa./a a/aa./a
+a//./aa./. a/aa.
+a//./aa.// a/aa.
+a//./aa/aa a/aa/aa
+a//./aa/a. a/aa/a.
+a//./aa/a/ a/aa/a
+a//./aa/.a a/aa/.a
+a//./aa/.. a
+a//./aa/./ a/aa
+a//./aa//a a/aa/a
+a//./aa//. a/aa
+a//./aa/// a/aa
+a//./a.aaa a/a.aaa
+a//./a.aa. a/a.aa.
+a//./a.aa/ a/a.aa
+a//./a.a.a a/a.a.a
+a//./a.a.. a/a.a..
+a//./a.a./ a/a.a.
+a//./a.a/a a/a.a/a
+a//./a.a/. a/a.a
+a//./a.a// a/a.a
+a//./a..aa a/a..aa
+a//./a..a. a/a..a.
+a//./a..a/ a/a..a
+a//./a...a a/a...a
+a//./a.... a/a....
+a//./a.../ a/a...
+a//./a../a a/a../a
+a//./a../. a/a..
+a//./a..// a/a..
+a//./a./aa a/a./aa
+a//./a./a. a/a./a.
+a//./a./a/ a/a./a
+a//./a./.a a/a./.a
+a//./a./.. a
+a//./a././ a/a.
+a//./a.//a a/a./a
+a//./a.//. a/a.
+a//./a./// a/a.
+a//./a/aaa a/a/aaa
+a//./a/aa. a/a/aa.
+a//./a/aa/ a/a/aa
+a//./a/a.a a/a/a.a
+a//./a/a.. a/a/a..
+a//./a/a./ a/a/a.
+a//./a/a/a a/a/a/a
+a//./a/a/. a/a/a
+a//./a/a// a/a/a
+a//./a/.aa a/a/.aa
+a//./a/.a. a/a/.a.
+a//./a/.a/ a/a/.a
+a//./a/..a a/a/..a
+a//./a/... a/a/...
+a//./a/../ a
+a//./a/./a a/a/a
+a//./a/./. a/a
+a//./a/.// a/a
+a//./a//aa a/a/aa
+a//./a//a. a/a/a.
+a//./a//a/ a/a/a
+a//./a//.a a/a/.a
+a//./a//.. a
+a//./a//./ a/a
+a//./a///a a/a/a
+a//./a///. a/a
+a//./a//// a/a
+a//./.aaaa a/.aaaa
+a//./.aaa. a/.aaa.
+a//./.aaa/ a/.aaa
+a//./.aa.a a/.aa.a
+a//./.aa.. a/.aa..
+a//./.aa./ a/.aa.
+a//./.aa/a a/.aa/a
+a//./.aa/. a/.aa
+a//./.aa// a/.aa
+a//./.a.aa a/.a.aa
+a//./.a.a. a/.a.a.
+a//./.a.a/ a/.a.a
+a//./.a..a a/.a..a
+a//./.a... a/.a...
+a//./.a../ a/.a..
+a//./.a./a a/.a./a
+a//./.a./. a/.a.
+a//./.a.// a/.a.
+a//./.a/aa a/.a/aa
+a//./.a/a. a/.a/a.
+a//./.a/a/ a/.a/a
+a//./.a/.a a/.a/.a
+a//./.a/.. a
+a//./.a/./ a/.a
+a//./.a//a a/.a/a
+a//./.a//. a/.a
+a//./.a/// a/.a
+a//./..aaa a/..aaa
+a//./..aa. a/..aa.
+a//./..aa/ a/..aa
+a//./..a.a a/..a.a
+a//./..a.. a/..a..
+a//./..a./ a/..a.
+a//./..a/a a/..a/a
+a//./..a/. a/..a
+a//./..a// a/..a
+a//./...aa a/...aa
+a//./...a. a/...a.
+a//./...a/ a/...a
+a//./....a a/....a
+a//./..... a/.....
+a//./..../ a/....
+a//./.../a a/.../a
+a//./.../. a/...
+a//./...// a/...
+a//./../aa aa
+a//./../a. a.
+a//./../a/ a
+a//./../.a .a
+a//./../.. ..
+a//./.././ .
+a//./..//a a
+a//./..//. .
+a//./../// .
+a//././aaa a/aaa
+a//././aa. a/aa.
+a//././aa/ a/aa
+a//././a.a a/a.a
+a//././a.. a/a..
+a//././a./ a/a.
+a//././a/a a/a/a
+a//././a/. a/a
+a//././a// a/a
+a//././.aa a/.aa
+a//././.a. a/.a.
+a//././.a/ a/.a
+a//././..a a/..a
+a//././... a/...
+a//././../ .
+a//./././a a/a
+a//./././. a
+a//././.// a
+a//././/aa a/aa
+a//././/a. a/a.
+a//././/a/ a/a
+a//././/.a a/.a
+a//././/.. .
+a//././/./ a
+a//././//a a/a
+a//././//. a
+a//././/// a
+a//.//aaaa a/aaaa
+a//.//aaa. a/aaa.
+a//.//aaa/ a/aaa
+a//.//aa.a a/aa.a
+a//.//aa.. a/aa..
+a//.//aa./ a/aa.
+a//.//aa/a a/aa/a
+a//.//aa/. a/aa
+a//.//aa// a/aa
+a//.//a.aa a/a.aa
+a//.//a.a. a/a.a.
+a//.//a.a/ a/a.a
+a//.//a..a a/a..a
+a//.//a... a/a...
+a//.//a../ a/a..
+a//.//a./a a/a./a
+a//.//a./. a/a.
+a//.//a.// a/a.
+a//.//a/aa a/a/aa
+a//.//a/a. a/a/a.
+a//.//a/a/ a/a/a
+a//.//a/.a a/a/.a
+a//.//a/.. a
+a//.//a/./ a/a
+a//.//a//a a/a/a
+a//.//a//. a/a
+a//.//a/// a/a
+a//.//.aaa a/.aaa
+a//.//.aa. a/.aa.
+a//.//.aa/ a/.aa
+a//.//.a.a a/.a.a
+a//.//.a.. a/.a..
+a//.//.a./ a/.a.
+a//.//.a/a a/.a/a
+a//.//.a/. a/.a
+a//.//.a// a/.a
+a//.//..aa a/..aa
+a//.//..a. a/..a.
+a//.//..a/ a/..a
+a//.//...a a/...a
+a//.//.... a/....
+a//.//.../ a/...
+a//.//../a a
+a//.//../. .
+a//.//..// .
+a//.//./aa a/aa
+a//.//./a. a/a.
+a//.//./a/ a/a
+a//.//./.a a/.a
+a//.//./.. .
+a//.//././ a
+a//.//.//a a/a
+a//.//.//. a
+a//.//./// a
+a//.///aaa a/aaa
+a//.///aa. a/aa.
+a//.///aa/ a/aa
+a//.///a.a a/a.a
+a//.///a.. a/a..
+a//.///a./ a/a.
+a//.///a/a a/a/a
+a//.///a/. a/a
+a//.///a// a/a
+a//.///.aa a/.aa
+a//.///.a. a/.a.
+a//.///.a/ a/.a
+a//.///..a a/..a
+a//.///... a/...
+a//.///../ .
+a//.///./a a/a
+a//.///./. a
+a//.///.// a
+a//.////aa a/aa
+a//.////a. a/a.
+a//.////a/ a/a
+a//.////.a a/.a
+a//.////.. .
+a//.////./ a
+a//./////a a/a
+a//./////. a
+a//.////// a
+a///aaaaaa a/aaaaaa
+a///aaaaa. a/aaaaa.
+a///aaaaa/ a/aaaaa
+a///aaaa.a a/aaaa.a
+a///aaaa.. a/aaaa..
+a///aaaa./ a/aaaa.
+a///aaaa/a a/aaaa/a
+a///aaaa/. a/aaaa
+a///aaaa// a/aaaa
+a///aaa.aa a/aaa.aa
+a///aaa.a. a/aaa.a.
+a///aaa.a/ a/aaa.a
+a///aaa..a a/aaa..a
+a///aaa... a/aaa...
+a///aaa../ a/aaa..
+a///aaa./a a/aaa./a
+a///aaa./. a/aaa.
+a///aaa.// a/aaa.
+a///aaa/aa a/aaa/aa
+a///aaa/a. a/aaa/a.
+a///aaa/a/ a/aaa/a
+a///aaa/.a a/aaa/.a
+a///aaa/.. a
+a///aaa/./ a/aaa
+a///aaa//a a/aaa/a
+a///aaa//. a/aaa
+a///aaa/// a/aaa
+a///aa.aaa a/aa.aaa
+a///aa.aa. a/aa.aa.
+a///aa.aa/ a/aa.aa
+a///aa.a.a a/aa.a.a
+a///aa.a.. a/aa.a..
+a///aa.a./ a/aa.a.
+a///aa.a/a a/aa.a/a
+a///aa.a/. a/aa.a
+a///aa.a// a/aa.a
+a///aa..aa a/aa..aa
+a///aa..a. a/aa..a.
+a///aa..a/ a/aa..a
+a///aa...a a/aa...a
+a///aa.... a/aa....
+a///aa.../ a/aa...
+a///aa../a a/aa../a
+a///aa../. a/aa..
+a///aa..// a/aa..
+a///aa./aa a/aa./aa
+a///aa./a. a/aa./a.
+a///aa./a/ a/aa./a
+a///aa./.a a/aa./.a
+a///aa./.. a
+a///aa././ a/aa.
+a///aa.//a a/aa./a
+a///aa.//. a/aa.
+a///aa./// a/aa.
+a///aa/aaa a/aa/aaa
+a///aa/aa. a/aa/aa.
+a///aa/aa/ a/aa/aa
+a///aa/a.a a/aa/a.a
+a///aa/a.. a/aa/a..
+a///aa/a./ a/aa/a.
+a///aa/a/a a/aa/a/a
+a///aa/a/. a/aa/a
+a///aa/a// a/aa/a
+a///aa/.aa a/aa/.aa
+a///aa/.a. a/aa/.a.
+a///aa/.a/ a/aa/.a
+a///aa/..a a/aa/..a
+a///aa/... a/aa/...
+a///aa/../ a
+a///aa/./a a/aa/a
+a///aa/./. a/aa
+a///aa/.// a/aa
+a///aa//aa a/aa/aa
+a///aa//a. a/aa/a.
+a///aa//a/ a/aa/a
+a///aa//.a a/aa/.a
+a///aa//.. a
+a///aa//./ a/aa
+a///aa///a a/aa/a
+a///aa///. a/aa
+a///aa//// a/aa
+a///a.aaaa a/a.aaaa
+a///a.aaa. a/a.aaa.
+a///a.aaa/ a/a.aaa
+a///a.aa.a a/a.aa.a
+a///a.aa.. a/a.aa..
+a///a.aa./ a/a.aa.
+a///a.aa/a a/a.aa/a
+a///a.aa/. a/a.aa
+a///a.aa// a/a.aa
+a///a.a.aa a/a.a.aa
+a///a.a.a. a/a.a.a.
+a///a.a.a/ a/a.a.a
+a///a.a..a a/a.a..a
+a///a.a... a/a.a...
+a///a.a../ a/a.a..
+a///a.a./a a/a.a./a
+a///a.a./. a/a.a.
+a///a.a.// a/a.a.
+a///a.a/aa a/a.a/aa
+a///a.a/a. a/a.a/a.
+a///a.a/a/ a/a.a/a
+a///a.a/.a a/a.a/.a
+a///a.a/.. a
+a///a.a/./ a/a.a
+a///a.a//a a/a.a/a
+a///a.a//. a/a.a
+a///a.a/// a/a.a
+a///a..aaa a/a..aaa
+a///a..aa. a/a..aa.
+a///a..aa/ a/a..aa
+a///a..a.a a/a..a.a
+a///a..a.. a/a..a..
+a///a..a./ a/a..a.
+a///a..a/a a/a..a/a
+a///a..a/. a/a..a
+a///a..a// a/a..a
+a///a...aa a/a...aa
+a///a...a. a/a...a.
+a///a...a/ a/a...a
+a///a....a a/a....a
+a///a..... a/a.....
+a///a..../ a/a....
+a///a.../a a/a.../a
+a///a.../. a/a...
+a///a...// a/a...
+a///a../aa a/a../aa
+a///a../a. a/a../a.
+a///a../a/ a/a../a
+a///a../.a a/a../.a
+a///a../.. a
+a///a.././ a/a..
+a///a..//a a/a../a
+a///a..//. a/a..
+a///a../// a/a..
+a///a./aaa a/a./aaa
+a///a./aa. a/a./aa.
+a///a./aa/ a/a./aa
+a///a./a.a a/a./a.a
+a///a./a.. a/a./a..
+a///a./a./ a/a./a.
+a///a./a/a a/a./a/a
+a///a./a/. a/a./a
+a///a./a// a/a./a
+a///a./.aa a/a./.aa
+a///a./.a. a/a./.a.
+a///a./.a/ a/a./.a
+a///a./..a a/a./..a
+a///a./... a/a./...
+a///a./../ a
+a///a././a a/a./a
+a///a././. a/a.
+a///a./.// a/a.
+a///a.//aa a/a./aa
+a///a.//a. a/a./a.
+a///a.//a/ a/a./a
+a///a.//.a a/a./.a
+a///a.//.. a
+a///a.//./ a/a.
+a///a.///a a/a./a
+a///a.///. a/a.
+a///a.//// a/a.
+a///a/aaaa a/a/aaaa
+a///a/aaa. a/a/aaa.
+a///a/aaa/ a/a/aaa
+a///a/aa.a a/a/aa.a
+a///a/aa.. a/a/aa..
+a///a/aa./ a/a/aa.
+a///a/aa/a a/a/aa/a
+a///a/aa/. a/a/aa
+a///a/aa// a/a/aa
+a///a/a.aa a/a/a.aa
+a///a/a.a. a/a/a.a.
+a///a/a.a/ a/a/a.a
+a///a/a..a a/a/a..a
+a///a/a... a/a/a...
+a///a/a../ a/a/a..
+a///a/a./a a/a/a./a
+a///a/a./. a/a/a.
+a///a/a.// a/a/a.
+a///a/a/aa a/a/a/aa
+a///a/a/a. a/a/a/a.
+a///a/a/a/ a/a/a/a
+a///a/a/.a a/a/a/.a
+a///a/a/.. a/a
+a///a/a/./ a/a/a
+a///a/a//a a/a/a/a
+a///a/a//. a/a/a
+a///a/a/// a/a/a
+a///a/.aaa a/a/.aaa
+a///a/.aa. a/a/.aa.
+a///a/.aa/ a/a/.aa
+a///a/.a.a a/a/.a.a
+a///a/.a.. a/a/.a..
+a///a/.a./ a/a/.a.
+a///a/.a/a a/a/.a/a
+a///a/.a/. a/a/.a
+a///a/.a// a/a/.a
+a///a/..aa a/a/..aa
+a///a/..a. a/a/..a.
+a///a/..a/ a/a/..a
+a///a/...a a/a/...a
+a///a/.... a/a/....
+a///a/.../ a/a/...
+a///a/../a a/a
+a///a/../. a
+a///a/..// a
+a///a/./aa a/a/aa
+a///a/./a. a/a/a.
+a///a/./a/ a/a/a
+a///a/./.a a/a/.a
+a///a/./.. a
+a///a/././ a/a
+a///a/.//a a/a/a
+a///a/.//. a/a
+a///a/./// a/a
+a///a//aaa a/a/aaa
+a///a//aa. a/a/aa.
+a///a//aa/ a/a/aa
+a///a//a.a a/a/a.a
+a///a//a.. a/a/a..
+a///a//a./ a/a/a.
+a///a//a/a a/a/a/a
+a///a//a/. a/a/a
+a///a//a// a/a/a
+a///a//.aa a/a/.aa
+a///a//.a. a/a/.a.
+a///a//.a/ a/a/.a
+a///a//..a a/a/..a
+a///a//... a/a/...
+a///a//../ a
+a///a//./a a/a/a
+a///a//./. a/a
+a///a//.// a/a
+a///a///aa a/a/aa
+a///a///a. a/a/a.
+a///a///a/ a/a/a
+a///a///.a a/a/.a
+a///a///.. a
+a///a///./ a/a
+a///a////a a/a/a
+a///a////. a/a
+a///a///// a/a
+a///.aaaaa a/.aaaaa
+a///.aaaa. a/.aaaa.
+a///.aaaa/ a/.aaaa
+a///.aaa.a a/.aaa.a
+a///.aaa.. a/.aaa..
+a///.aaa./ a/.aaa.
+a///.aaa/a a/.aaa/a
+a///.aaa/. a/.aaa
+a///.aaa// a/.aaa
+a///.aa.aa a/.aa.aa
+a///.aa.a. a/.aa.a.
+a///.aa.a/ a/.aa.a
+a///.aa..a a/.aa..a
+a///.aa... a/.aa...
+a///.aa../ a/.aa..
+a///.aa./a a/.aa./a
+a///.aa./. a/.aa.
+a///.aa.// a/.aa.
+a///.aa/aa a/.aa/aa
+a///.aa/a. a/.aa/a.
+a///.aa/a/ a/.aa/a
+a///.aa/.a a/.aa/.a
+a///.aa/.. a
+a///.aa/./ a/.aa
+a///.aa//a a/.aa/a
+a///.aa//. a/.aa
+a///.aa/// a/.aa
+a///.a.aaa a/.a.aaa
+a///.a.aa. a/.a.aa.
+a///.a.aa/ a/.a.aa
+a///.a.a.a a/.a.a.a
+a///.a.a.. a/.a.a..
+a///.a.a./ a/.a.a.
+a///.a.a/a a/.a.a/a
+a///.a.a/. a/.a.a
+a///.a.a// a/.a.a
+a///.a..aa a/.a..aa
+a///.a..a. a/.a..a.
+a///.a..a/ a/.a..a
+a///.a...a a/.a...a
+a///.a.... a/.a....
+a///.a.../ a/.a...
+a///.a../a a/.a../a
+a///.a../. a/.a..
+a///.a..// a/.a..
+a///.a./aa a/.a./aa
+a///.a./a. a/.a./a.
+a///.a./a/ a/.a./a
+a///.a./.a a/.a./.a
+a///.a./.. a
+a///.a././ a/.a.
+a///.a.//a a/.a./a
+a///.a.//. a/.a.
+a///.a./// a/.a.
+a///.a/aaa a/.a/aaa
+a///.a/aa. a/.a/aa.
+a///.a/aa/ a/.a/aa
+a///.a/a.a a/.a/a.a
+a///.a/a.. a/.a/a..
+a///.a/a./ a/.a/a.
+a///.a/a/a a/.a/a/a
+a///.a/a/. a/.a/a
+a///.a/a// a/.a/a
+a///.a/.aa a/.a/.aa
+a///.a/.a. a/.a/.a.
+a///.a/.a/ a/.a/.a
+a///.a/..a a/.a/..a
+a///.a/... a/.a/...
+a///.a/../ a
+a///.a/./a a/.a/a
+a///.a/./. a/.a
+a///.a/.// a/.a
+a///.a//aa a/.a/aa
+a///.a//a. a/.a/a.
+a///.a//a/ a/.a/a
+a///.a//.a a/.a/.a
+a///.a//.. a
+a///.a//./ a/.a
+a///.a///a a/.a/a
+a///.a///. a/.a
+a///.a//// a/.a
+a///..aaaa a/..aaaa
+a///..aaa. a/..aaa.
+a///..aaa/ a/..aaa
+a///..aa.a a/..aa.a
+a///..aa.. a/..aa..
+a///..aa./ a/..aa.
+a///..aa/a a/..aa/a
+a///..aa/. a/..aa
+a///..aa// a/..aa
+a///..a.aa a/..a.aa
+a///..a.a. a/..a.a.
+a///..a.a/ a/..a.a
+a///..a..a a/..a..a
+a///..a... a/..a...
+a///..a../ a/..a..
+a///..a./a a/..a./a
+a///..a./. a/..a.
+a///..a.// a/..a.
+a///..a/aa a/..a/aa
+a///..a/a. a/..a/a.
+a///..a/a/ a/..a/a
+a///..a/.a a/..a/.a
+a///..a/.. a
+a///..a/./ a/..a
+a///..a//a a/..a/a
+a///..a//. a/..a
+a///..a/// a/..a
+a///...aaa a/...aaa
+a///...aa. a/...aa.
+a///...aa/ a/...aa
+a///...a.a a/...a.a
+a///...a.. a/...a..
+a///...a./ a/...a.
+a///...a/a a/...a/a
+a///...a/. a/...a
+a///...a// a/...a
+a///....aa a/....aa
+a///....a. a/....a.
+a///....a/ a/....a
+a///.....a a/.....a
+a///...... a/......
+a///...../ a/.....
+a///..../a a/..../a
+a///..../. a/....
+a///....// a/....
+a///.../aa a/.../aa
+a///.../a. a/.../a.
+a///.../a/ a/.../a
+a///.../.a a/.../.a
+a///.../.. a
+a///..././ a/...
+a///...//a a/.../a
+a///...//. a/...
+a///.../// a/...
+a///../aaa aaa
+a///../aa. aa.
+a///../aa/ aa
+a///../a.a a.a
+a///../a.. a..
+a///../a./ a.
+a///../a/a a/a
+a///../a/. a
+a///../a// a
+a///../.aa .aa
+a///../.a. .a.
+a///../.a/ .a
+a///../..a ..a
+a///../... ...
+a///../../ ..
+a///.././a a
+a///.././. .
+a///../.// .
+a///..//aa aa
+a///..//a. a.
+a///..//a/ a
+a///..//.a .a
+a///..//.. ..
+a///..//./ .
+a///..///a a
+a///..///. .
+a///..//// .
+a///./aaaa a/aaaa
+a///./aaa. a/aaa.
+a///./aaa/ a/aaa
+a///./aa.a a/aa.a
+a///./aa.. a/aa..
+a///./aa./ a/aa.
+a///./aa/a a/aa/a
+a///./aa/. a/aa
+a///./aa// a/aa
+a///./a.aa a/a.aa
+a///./a.a. a/a.a.
+a///./a.a/ a/a.a
+a///./a..a a/a..a
+a///./a... a/a...
+a///./a../ a/a..
+a///./a./a a/a./a
+a///./a./. a/a.
+a///./a.// a/a.
+a///./a/aa a/a/aa
+a///./a/a. a/a/a.
+a///./a/a/ a/a/a
+a///./a/.a a/a/.a
+a///./a/.. a
+a///./a/./ a/a
+a///./a//a a/a/a
+a///./a//. a/a
+a///./a/// a/a
+a///./.aaa a/.aaa
+a///./.aa. a/.aa.
+a///./.aa/ a/.aa
+a///./.a.a a/.a.a
+a///./.a.. a/.a..
+a///./.a./ a/.a.
+a///./.a/a a/.a/a
+a///./.a/. a/.a
+a///./.a// a/.a
+a///./..aa a/..aa
+a///./..a. a/..a.
+a///./..a/ a/..a
+a///./...a a/...a
+a///./.... a/....
+a///./.../ a/...
+a///./../a a
+a///./../. .
+a///./..// .
+a///././aa a/aa
+a///././a. a/a.
+a///././a/ a/a
+a///././.a a/.a
+a///././.. .
+a///./././ a
+a///././/a a/a
+a///././/. a
+a///././// a
+a///.//aaa a/aaa
+a///.//aa. a/aa.
+a///.//aa/ a/aa
+a///.//a.a a/a.a
+a///.//a.. a/a..
+a///.//a./ a/a.
+a///.//a/a a/a/a
+a///.//a/. a/a
+a///.//a// a/a
+a///.//.aa a/.aa
+a///.//.a. a/.a.
+a///.//.a/ a/.a
+a///.//..a a/..a
+a///.//... a/...
+a///.//../ .
+a///.//./a a/a
+a///.//./. a
+a///.//.// a
+a///.///aa a/aa
+a///.///a. a/a.
+a///.///a/ a/a
+a///.///.a a/.a
+a///.///.. .
+a///.///./ a
+a///.////a a/a
+a///.////. a
+a///.///// a
+a////aaaaa a/aaaaa
+a////aaaa. a/aaaa.
+a////aaaa/ a/aaaa
+a////aaa.a a/aaa.a
+a////aaa.. a/aaa..
+a////aaa./ a/aaa.
+a////aaa/a a/aaa/a
+a////aaa/. a/aaa
+a////aaa// a/aaa
+a////aa.aa a/aa.aa
+a////aa.a. a/aa.a.
+a////aa.a/ a/aa.a
+a////aa..a a/aa..a
+a////aa... a/aa...
+a////aa../ a/aa..
+a////aa./a a/aa./a
+a////aa./. a/aa.
+a////aa.// a/aa.
+a////aa/aa a/aa/aa
+a////aa/a. a/aa/a.
+a////aa/a/ a/aa/a
+a////aa/.a a/aa/.a
+a////aa/.. a
+a////aa/./ a/aa
+a////aa//a a/aa/a
+a////aa//. a/aa
+a////aa/// a/aa
+a////a.aaa a/a.aaa
+a////a.aa. a/a.aa.
+a////a.aa/ a/a.aa
+a////a.a.a a/a.a.a
+a////a.a.. a/a.a..
+a////a.a./ a/a.a.
+a////a.a/a a/a.a/a
+a////a.a/. a/a.a
+a////a.a// a/a.a
+a////a..aa a/a..aa
+a////a..a. a/a..a.
+a////a..a/ a/a..a
+a////a...a a/a...a
+a////a.... a/a....
+a////a.../ a/a...
+a////a../a a/a../a
+a////a../. a/a..
+a////a..// a/a..
+a////a./aa a/a./aa
+a////a./a. a/a./a.
+a////a./a/ a/a./a
+a////a./.a a/a./.a
+a////a./.. a
+a////a././ a/a.
+a////a.//a a/a./a
+a////a.//. a/a.
+a////a./// a/a.
+a////a/aaa a/a/aaa
+a////a/aa. a/a/aa.
+a////a/aa/ a/a/aa
+a////a/a.a a/a/a.a
+a////a/a.. a/a/a..
+a////a/a./ a/a/a.
+a////a/a/a a/a/a/a
+a////a/a/. a/a/a
+a////a/a// a/a/a
+a////a/.aa a/a/.aa
+a////a/.a. a/a/.a.
+a////a/.a/ a/a/.a
+a////a/..a a/a/..a
+a////a/... a/a/...
+a////a/../ a
+a////a/./a a/a/a
+a////a/./. a/a
+a////a/.// a/a
+a////a//aa a/a/aa
+a////a//a. a/a/a.
+a////a//a/ a/a/a
+a////a//.a a/a/.a
+a////a//.. a
+a////a//./ a/a
+a////a///a a/a/a
+a////a///. a/a
+a////a//// a/a
+a////.aaaa a/.aaaa
+a////.aaa. a/.aaa.
+a////.aaa/ a/.aaa
+a////.aa.a a/.aa.a
+a////.aa.. a/.aa..
+a////.aa./ a/.aa.
+a////.aa/a a/.aa/a
+a////.aa/. a/.aa
+a////.aa// a/.aa
+a////.a.aa a/.a.aa
+a////.a.a. a/.a.a.
+a////.a.a/ a/.a.a
+a////.a..a a/.a..a
+a////.a... a/.a...
+a////.a../ a/.a..
+a////.a./a a/.a./a
+a////.a./. a/.a.
+a////.a.// a/.a.
+a////.a/aa a/.a/aa
+a////.a/a. a/.a/a.
+a////.a/a/ a/.a/a
+a////.a/.a a/.a/.a
+a////.a/.. a
+a////.a/./ a/.a
+a////.a//a a/.a/a
+a////.a//. a/.a
+a////.a/// a/.a
+a////..aaa a/..aaa
+a////..aa. a/..aa.
+a////..aa/ a/..aa
+a////..a.a a/..a.a
+a////..a.. a/..a..
+a////..a./ a/..a.
+a////..a/a a/..a/a
+a////..a/. a/..a
+a////..a// a/..a
+a////...aa a/...aa
+a////...a. a/...a.
+a////...a/ a/...a
+a////....a a/....a
+a////..... a/.....
+a////..../ a/....
+a////.../a a/.../a
+a////.../. a/...
+a////...// a/...
+a////../aa aa
+a////../a. a.
+a////../a/ a
+a////../.a .a
+a////../.. ..
+a////.././ .
+a////..//a a
+a////..//. .
+a////../// .
+a////./aaa a/aaa
+a////./aa. a/aa.
+a////./aa/ a/aa
+a////./a.a a/a.a
+a////./a.. a/a..
+a////./a./ a/a.
+a////./a/a a/a/a
+a////./a/. a/a
+a////./a// a/a
+a////./.aa a/.aa
+a////./.a. a/.a.
+a////./.a/ a/.a
+a////./..a a/..a
+a////./... a/...
+a////./../ .
+a////././a a/a
+a////././. a
+a////./.// a
+a////.//aa a/aa
+a////.//a. a/a.
+a////.//a/ a/a
+a////.//.a a/.a
+a////.//.. .
+a////.//./ a
+a////.///a a/a
+a////.///. a
+a////.//// a
+a/////aaaa a/aaaa
+a/////aaa. a/aaa.
+a/////aaa/ a/aaa
+a/////aa.a a/aa.a
+a/////aa.. a/aa..
+a/////aa./ a/aa.
+a/////aa/a a/aa/a
+a/////aa/. a/aa
+a/////aa// a/aa
+a/////a.aa a/a.aa
+a/////a.a. a/a.a.
+a/////a.a/ a/a.a
+a/////a..a a/a..a
+a/////a... a/a...
+a/////a../ a/a..
+a/////a./a a/a./a
+a/////a./. a/a.
+a/////a.// a/a.
+a/////a/aa a/a/aa
+a/////a/a. a/a/a.
+a/////a/a/ a/a/a
+a/////a/.a a/a/.a
+a/////a/.. a
+a/////a/./ a/a
+a/////a//a a/a/a
+a/////a//. a/a
+a/////a/// a/a
+a/////.aaa a/.aaa
+a/////.aa. a/.aa.
+a/////.aa/ a/.aa
+a/////.a.a a/.a.a
+a/////.a.. a/.a..
+a/////.a./ a/.a.
+a/////.a/a a/.a/a
+a/////.a/. a/.a
+a/////.a// a/.a
+a/////..aa a/..aa
+a/////..a. a/..a.
+a/////..a/ a/..a
+a/////...a a/...a
+a/////.... a/....
+a/////.../ a/...
+a/////../a a
+a/////../. .
+a/////..// .
+a/////./aa a/aa
+a/////./a. a/a.
+a/////./a/ a/a
+a/////./.a a/.a
+a/////./.. .
+a/////././ a
+a/////.//a a/a
+a/////.//. a
+a/////./// a
+a//////aaa a/aaa
+a//////aa. a/aa.
+a//////aa/ a/aa
+a//////a.a a/a.a
+a//////a.. a/a..
+a//////a./ a/a.
+a//////a/a a/a/a
+a//////a/. a/a
+a//////a// a/a
+a//////.aa a/.aa
+a//////.a. a/.a.
+a//////.a/ a/.a
+a//////..a a/..a
+a//////... a/...
+a//////../ .
+a//////./a a/a
+a//////./. a
+a//////.// a
+a///////aa a/aa
+a///////a. a/a.
+a///////a/ a/a
+a///////.a a/.a
+a///////.. .
+a///////./ a
+a////////a a/a
+a////////. a
+a///////// a
+.aaaaaaaaa .aaaaaaaaa
+.aaaaaaaa. .aaaaaaaa.
+.aaaaaaaa/ .aaaaaaaa
+.aaaaaaa.a .aaaaaaa.a
+.aaaaaaa.. .aaaaaaa..
+.aaaaaaa./ .aaaaaaa.
+.aaaaaaa/a .aaaaaaa/a
+.aaaaaaa/. .aaaaaaa
+.aaaaaaa// .aaaaaaa
+.aaaaaa.aa .aaaaaa.aa
+.aaaaaa.a. .aaaaaa.a.
+.aaaaaa.a/ .aaaaaa.a
+.aaaaaa..a .aaaaaa..a
+.aaaaaa... .aaaaaa...
+.aaaaaa../ .aaaaaa..
+.aaaaaa./a .aaaaaa./a
+.aaaaaa./. .aaaaaa.
+.aaaaaa.// .aaaaaa.
+.aaaaaa/aa .aaaaaa/aa
+.aaaaaa/a. .aaaaaa/a.
+.aaaaaa/a/ .aaaaaa/a
+.aaaaaa/.a .aaaaaa/.a
+.aaaaaa/.. .
+.aaaaaa/./ .aaaaaa
+.aaaaaa//a .aaaaaa/a
+.aaaaaa//. .aaaaaa
+.aaaaaa/// .aaaaaa
+.aaaaa.aaa .aaaaa.aaa
+.aaaaa.aa. .aaaaa.aa.
+.aaaaa.aa/ .aaaaa.aa
+.aaaaa.a.a .aaaaa.a.a
+.aaaaa.a.. .aaaaa.a..
+.aaaaa.a./ .aaaaa.a.
+.aaaaa.a/a .aaaaa.a/a
+.aaaaa.a/. .aaaaa.a
+.aaaaa.a// .aaaaa.a
+.aaaaa..aa .aaaaa..aa
+.aaaaa..a. .aaaaa..a.
+.aaaaa..a/ .aaaaa..a
+.aaaaa...a .aaaaa...a
+.aaaaa.... .aaaaa....
+.aaaaa.../ .aaaaa...
+.aaaaa../a .aaaaa../a
+.aaaaa../. .aaaaa..
+.aaaaa..// .aaaaa..
+.aaaaa./aa .aaaaa./aa
+.aaaaa./a. .aaaaa./a.
+.aaaaa./a/ .aaaaa./a
+.aaaaa./.a .aaaaa./.a
+.aaaaa./.. .
+.aaaaa././ .aaaaa.
+.aaaaa.//a .aaaaa./a
+.aaaaa.//. .aaaaa.
+.aaaaa./// .aaaaa.
+.aaaaa/aaa .aaaaa/aaa
+.aaaaa/aa. .aaaaa/aa.
+.aaaaa/aa/ .aaaaa/aa
+.aaaaa/a.a .aaaaa/a.a
+.aaaaa/a.. .aaaaa/a..
+.aaaaa/a./ .aaaaa/a.
+.aaaaa/a/a .aaaaa/a/a
+.aaaaa/a/. .aaaaa/a
+.aaaaa/a// .aaaaa/a
+.aaaaa/.aa .aaaaa/.aa
+.aaaaa/.a. .aaaaa/.a.
+.aaaaa/.a/ .aaaaa/.a
+.aaaaa/..a .aaaaa/..a
+.aaaaa/... .aaaaa/...
+.aaaaa/../ .
+.aaaaa/./a .aaaaa/a
+.aaaaa/./. .aaaaa
+.aaaaa/.// .aaaaa
+.aaaaa//aa .aaaaa/aa
+.aaaaa//a. .aaaaa/a.
+.aaaaa//a/ .aaaaa/a
+.aaaaa//.a .aaaaa/.a
+.aaaaa//.. .
+.aaaaa//./ .aaaaa
+.aaaaa///a .aaaaa/a
+.aaaaa///. .aaaaa
+.aaaaa//// .aaaaa
+.aaaa.aaaa .aaaa.aaaa
+.aaaa.aaa. .aaaa.aaa.
+.aaaa.aaa/ .aaaa.aaa
+.aaaa.aa.a .aaaa.aa.a
+.aaaa.aa.. .aaaa.aa..
+.aaaa.aa./ .aaaa.aa.
+.aaaa.aa/a .aaaa.aa/a
+.aaaa.aa/. .aaaa.aa
+.aaaa.aa// .aaaa.aa
+.aaaa.a.aa .aaaa.a.aa
+.aaaa.a.a. .aaaa.a.a.
+.aaaa.a.a/ .aaaa.a.a
+.aaaa.a..a .aaaa.a..a
+.aaaa.a... .aaaa.a...
+.aaaa.a../ .aaaa.a..
+.aaaa.a./a .aaaa.a./a
+.aaaa.a./. .aaaa.a.
+.aaaa.a.// .aaaa.a.
+.aaaa.a/aa .aaaa.a/aa
+.aaaa.a/a. .aaaa.a/a.
+.aaaa.a/a/ .aaaa.a/a
+.aaaa.a/.a .aaaa.a/.a
+.aaaa.a/.. .
+.aaaa.a/./ .aaaa.a
+.aaaa.a//a .aaaa.a/a
+.aaaa.a//. .aaaa.a
+.aaaa.a/// .aaaa.a
+.aaaa..aaa .aaaa..aaa
+.aaaa..aa. .aaaa..aa.
+.aaaa..aa/ .aaaa..aa
+.aaaa..a.a .aaaa..a.a
+.aaaa..a.. .aaaa..a..
+.aaaa..a./ .aaaa..a.
+.aaaa..a/a .aaaa..a/a
+.aaaa..a/. .aaaa..a
+.aaaa..a// .aaaa..a
+.aaaa...aa .aaaa...aa
+.aaaa...a. .aaaa...a.
+.aaaa...a/ .aaaa...a
+.aaaa....a .aaaa....a
+.aaaa..... .aaaa.....
+.aaaa..../ .aaaa....
+.aaaa.../a .aaaa.../a
+.aaaa.../. .aaaa...
+.aaaa...// .aaaa...
+.aaaa../aa .aaaa../aa
+.aaaa../a. .aaaa../a.
+.aaaa../a/ .aaaa../a
+.aaaa../.a .aaaa../.a
+.aaaa../.. .
+.aaaa.././ .aaaa..
+.aaaa..//a .aaaa../a
+.aaaa..//. .aaaa..
+.aaaa../// .aaaa..
+.aaaa./aaa .aaaa./aaa
+.aaaa./aa. .aaaa./aa.
+.aaaa./aa/ .aaaa./aa
+.aaaa./a.a .aaaa./a.a
+.aaaa./a.. .aaaa./a..
+.aaaa./a./ .aaaa./a.
+.aaaa./a/a .aaaa./a/a
+.aaaa./a/. .aaaa./a
+.aaaa./a// .aaaa./a
+.aaaa./.aa .aaaa./.aa
+.aaaa./.a. .aaaa./.a.
+.aaaa./.a/ .aaaa./.a
+.aaaa./..a .aaaa./..a
+.aaaa./... .aaaa./...
+.aaaa./../ .
+.aaaa././a .aaaa./a
+.aaaa././. .aaaa.
+.aaaa./.// .aaaa.
+.aaaa.//aa .aaaa./aa
+.aaaa.//a. .aaaa./a.
+.aaaa.//a/ .aaaa./a
+.aaaa.//.a .aaaa./.a
+.aaaa.//.. .
+.aaaa.//./ .aaaa.
+.aaaa.///a .aaaa./a
+.aaaa.///. .aaaa.
+.aaaa.//// .aaaa.
+.aaaa/aaaa .aaaa/aaaa
+.aaaa/aaa. .aaaa/aaa.
+.aaaa/aaa/ .aaaa/aaa
+.aaaa/aa.a .aaaa/aa.a
+.aaaa/aa.. .aaaa/aa..
+.aaaa/aa./ .aaaa/aa.
+.aaaa/aa/a .aaaa/aa/a
+.aaaa/aa/. .aaaa/aa
+.aaaa/aa// .aaaa/aa
+.aaaa/a.aa .aaaa/a.aa
+.aaaa/a.a. .aaaa/a.a.
+.aaaa/a.a/ .aaaa/a.a
+.aaaa/a..a .aaaa/a..a
+.aaaa/a... .aaaa/a...
+.aaaa/a../ .aaaa/a..
+.aaaa/a./a .aaaa/a./a
+.aaaa/a./. .aaaa/a.
+.aaaa/a.// .aaaa/a.
+.aaaa/a/aa .aaaa/a/aa
+.aaaa/a/a. .aaaa/a/a.
+.aaaa/a/a/ .aaaa/a/a
+.aaaa/a/.a .aaaa/a/.a
+.aaaa/a/.. .aaaa
+.aaaa/a/./ .aaaa/a
+.aaaa/a//a .aaaa/a/a
+.aaaa/a//. .aaaa/a
+.aaaa/a/// .aaaa/a
+.aaaa/.aaa .aaaa/.aaa
+.aaaa/.aa. .aaaa/.aa.
+.aaaa/.aa/ .aaaa/.aa
+.aaaa/.a.a .aaaa/.a.a
+.aaaa/.a.. .aaaa/.a..
+.aaaa/.a./ .aaaa/.a.
+.aaaa/.a/a .aaaa/.a/a
+.aaaa/.a/. .aaaa/.a
+.aaaa/.a// .aaaa/.a
+.aaaa/..aa .aaaa/..aa
+.aaaa/..a. .aaaa/..a.
+.aaaa/..a/ .aaaa/..a
+.aaaa/...a .aaaa/...a
+.aaaa/.... .aaaa/....
+.aaaa/.../ .aaaa/...
+.aaaa/../a a
+.aaaa/../. .
+.aaaa/..// .
+.aaaa/./aa .aaaa/aa
+.aaaa/./a. .aaaa/a.
+.aaaa/./a/ .aaaa/a
+.aaaa/./.a .aaaa/.a
+.aaaa/./.. .
+.aaaa/././ .aaaa
+.aaaa/.//a .aaaa/a
+.aaaa/.//. .aaaa
+.aaaa/./// .aaaa
+.aaaa//aaa .aaaa/aaa
+.aaaa//aa. .aaaa/aa.
+.aaaa//aa/ .aaaa/aa
+.aaaa//a.a .aaaa/a.a
+.aaaa//a.. .aaaa/a..
+.aaaa//a./ .aaaa/a.
+.aaaa//a/a .aaaa/a/a
+.aaaa//a/. .aaaa/a
+.aaaa//a// .aaaa/a
+.aaaa//.aa .aaaa/.aa
+.aaaa//.a. .aaaa/.a.
+.aaaa//.a/ .aaaa/.a
+.aaaa//..a .aaaa/..a
+.aaaa//... .aaaa/...
+.aaaa//../ .
+.aaaa//./a .aaaa/a
+.aaaa//./. .aaaa
+.aaaa//.// .aaaa
+.aaaa///aa .aaaa/aa
+.aaaa///a. .aaaa/a.
+.aaaa///a/ .aaaa/a
+.aaaa///.a .aaaa/.a
+.aaaa///.. .
+.aaaa///./ .aaaa
+.aaaa////a .aaaa/a
+.aaaa////. .aaaa
+.aaaa///// .aaaa
+.aaa.aaaaa .aaa.aaaaa
+.aaa.aaaa. .aaa.aaaa.
+.aaa.aaaa/ .aaa.aaaa
+.aaa.aaa.a .aaa.aaa.a
+.aaa.aaa.. .aaa.aaa..
+.aaa.aaa./ .aaa.aaa.
+.aaa.aaa/a .aaa.aaa/a
+.aaa.aaa/. .aaa.aaa
+.aaa.aaa// .aaa.aaa
+.aaa.aa.aa .aaa.aa.aa
+.aaa.aa.a. .aaa.aa.a.
+.aaa.aa.a/ .aaa.aa.a
+.aaa.aa..a .aaa.aa..a
+.aaa.aa... .aaa.aa...
+.aaa.aa../ .aaa.aa..
+.aaa.aa./a .aaa.aa./a
+.aaa.aa./. .aaa.aa.
+.aaa.aa.// .aaa.aa.
+.aaa.aa/aa .aaa.aa/aa
+.aaa.aa/a. .aaa.aa/a.
+.aaa.aa/a/ .aaa.aa/a
+.aaa.aa/.a .aaa.aa/.a
+.aaa.aa/.. .
+.aaa.aa/./ .aaa.aa
+.aaa.aa//a .aaa.aa/a
+.aaa.aa//. .aaa.aa
+.aaa.aa/// .aaa.aa
+.aaa.a.aaa .aaa.a.aaa
+.aaa.a.aa. .aaa.a.aa.
+.aaa.a.aa/ .aaa.a.aa
+.aaa.a.a.a .aaa.a.a.a
+.aaa.a.a.. .aaa.a.a..
+.aaa.a.a./ .aaa.a.a.
+.aaa.a.a/a .aaa.a.a/a
+.aaa.a.a/. .aaa.a.a
+.aaa.a.a// .aaa.a.a
+.aaa.a..aa .aaa.a..aa
+.aaa.a..a. .aaa.a..a.
+.aaa.a..a/ .aaa.a..a
+.aaa.a...a .aaa.a...a
+.aaa.a.... .aaa.a....
+.aaa.a.../ .aaa.a...
+.aaa.a../a .aaa.a../a
+.aaa.a../. .aaa.a..
+.aaa.a..// .aaa.a..
+.aaa.a./aa .aaa.a./aa
+.aaa.a./a. .aaa.a./a.
+.aaa.a./a/ .aaa.a./a
+.aaa.a./.a .aaa.a./.a
+.aaa.a./.. .
+.aaa.a././ .aaa.a.
+.aaa.a.//a .aaa.a./a
+.aaa.a.//. .aaa.a.
+.aaa.a./// .aaa.a.
+.aaa.a/aaa .aaa.a/aaa
+.aaa.a/aa. .aaa.a/aa.
+.aaa.a/aa/ .aaa.a/aa
+.aaa.a/a.a .aaa.a/a.a
+.aaa.a/a.. .aaa.a/a..
+.aaa.a/a./ .aaa.a/a.
+.aaa.a/a/a .aaa.a/a/a
+.aaa.a/a/. .aaa.a/a
+.aaa.a/a// .aaa.a/a
+.aaa.a/.aa .aaa.a/.aa
+.aaa.a/.a. .aaa.a/.a.
+.aaa.a/.a/ .aaa.a/.a
+.aaa.a/..a .aaa.a/..a
+.aaa.a/... .aaa.a/...
+.aaa.a/../ .
+.aaa.a/./a .aaa.a/a
+.aaa.a/./. .aaa.a
+.aaa.a/.// .aaa.a
+.aaa.a//aa .aaa.a/aa
+.aaa.a//a. .aaa.a/a.
+.aaa.a//a/ .aaa.a/a
+.aaa.a//.a .aaa.a/.a
+.aaa.a//.. .
+.aaa.a//./ .aaa.a
+.aaa.a///a .aaa.a/a
+.aaa.a///. .aaa.a
+.aaa.a//// .aaa.a
+.aaa..aaaa .aaa..aaaa
+.aaa..aaa. .aaa..aaa.
+.aaa..aaa/ .aaa..aaa
+.aaa..aa.a .aaa..aa.a
+.aaa..aa.. .aaa..aa..
+.aaa..aa./ .aaa..aa.
+.aaa..aa/a .aaa..aa/a
+.aaa..aa/. .aaa..aa
+.aaa..aa// .aaa..aa
+.aaa..a.aa .aaa..a.aa
+.aaa..a.a. .aaa..a.a.
+.aaa..a.a/ .aaa..a.a
+.aaa..a..a .aaa..a..a
+.aaa..a... .aaa..a...
+.aaa..a../ .aaa..a..
+.aaa..a./a .aaa..a./a
+.aaa..a./. .aaa..a.
+.aaa..a.// .aaa..a.
+.aaa..a/aa .aaa..a/aa
+.aaa..a/a. .aaa..a/a.
+.aaa..a/a/ .aaa..a/a
+.aaa..a/.a .aaa..a/.a
+.aaa..a/.. .
+.aaa..a/./ .aaa..a
+.aaa..a//a .aaa..a/a
+.aaa..a//. .aaa..a
+.aaa..a/// .aaa..a
+.aaa...aaa .aaa...aaa
+.aaa...aa. .aaa...aa.
+.aaa...aa/ .aaa...aa
+.aaa...a.a .aaa...a.a
+.aaa...a.. .aaa...a..
+.aaa...a./ .aaa...a.
+.aaa...a/a .aaa...a/a
+.aaa...a/. .aaa...a
+.aaa...a// .aaa...a
+.aaa....aa .aaa....aa
+.aaa....a. .aaa....a.
+.aaa....a/ .aaa....a
+.aaa.....a .aaa.....a
+.aaa...... .aaa......
+.aaa...../ .aaa.....
+.aaa..../a .aaa..../a
+.aaa..../. .aaa....
+.aaa....// .aaa....
+.aaa.../aa .aaa.../aa
+.aaa.../a. .aaa.../a.
+.aaa.../a/ .aaa.../a
+.aaa.../.a .aaa.../.a
+.aaa.../.. .
+.aaa..././ .aaa...
+.aaa...//a .aaa.../a
+.aaa...//. .aaa...
+.aaa.../// .aaa...
+.aaa../aaa .aaa../aaa
+.aaa../aa. .aaa../aa.
+.aaa../aa/ .aaa../aa
+.aaa../a.a .aaa../a.a
+.aaa../a.. .aaa../a..
+.aaa../a./ .aaa../a.
+.aaa../a/a .aaa../a/a
+.aaa../a/. .aaa../a
+.aaa../a// .aaa../a
+.aaa../.aa .aaa../.aa
+.aaa../.a. .aaa../.a.
+.aaa../.a/ .aaa../.a
+.aaa../..a .aaa../..a
+.aaa../... .aaa../...
+.aaa../../ .
+.aaa.././a .aaa../a
+.aaa.././. .aaa..
+.aaa../.// .aaa..
+.aaa..//aa .aaa../aa
+.aaa..//a. .aaa../a.
+.aaa..//a/ .aaa../a
+.aaa..//.a .aaa../.a
+.aaa..//.. .
+.aaa..//./ .aaa..
+.aaa..///a .aaa../a
+.aaa..///. .aaa..
+.aaa..//// .aaa..
+.aaa./aaaa .aaa./aaaa
+.aaa./aaa. .aaa./aaa.
+.aaa./aaa/ .aaa./aaa
+.aaa./aa.a .aaa./aa.a
+.aaa./aa.. .aaa./aa..
+.aaa./aa./ .aaa./aa.
+.aaa./aa/a .aaa./aa/a
+.aaa./aa/. .aaa./aa
+.aaa./aa// .aaa./aa
+.aaa./a.aa .aaa./a.aa
+.aaa./a.a. .aaa./a.a.
+.aaa./a.a/ .aaa./a.a
+.aaa./a..a .aaa./a..a
+.aaa./a... .aaa./a...
+.aaa./a../ .aaa./a..
+.aaa./a./a .aaa./a./a
+.aaa./a./. .aaa./a.
+.aaa./a.// .aaa./a.
+.aaa./a/aa .aaa./a/aa
+.aaa./a/a. .aaa./a/a.
+.aaa./a/a/ .aaa./a/a
+.aaa./a/.a .aaa./a/.a
+.aaa./a/.. .aaa.
+.aaa./a/./ .aaa./a
+.aaa./a//a .aaa./a/a
+.aaa./a//. .aaa./a
+.aaa./a/// .aaa./a
+.aaa./.aaa .aaa./.aaa
+.aaa./.aa. .aaa./.aa.
+.aaa./.aa/ .aaa./.aa
+.aaa./.a.a .aaa./.a.a
+.aaa./.a.. .aaa./.a..
+.aaa./.a./ .aaa./.a.
+.aaa./.a/a .aaa./.a/a
+.aaa./.a/. .aaa./.a
+.aaa./.a// .aaa./.a
+.aaa./..aa .aaa./..aa
+.aaa./..a. .aaa./..a.
+.aaa./..a/ .aaa./..a
+.aaa./...a .aaa./...a
+.aaa./.... .aaa./....
+.aaa./.../ .aaa./...
+.aaa./../a a
+.aaa./../. .
+.aaa./..// .
+.aaa././aa .aaa./aa
+.aaa././a. .aaa./a.
+.aaa././a/ .aaa./a
+.aaa././.a .aaa./.a
+.aaa././.. .
+.aaa./././ .aaa.
+.aaa././/a .aaa./a
+.aaa././/. .aaa.
+.aaa././// .aaa.
+.aaa.//aaa .aaa./aaa
+.aaa.//aa. .aaa./aa.
+.aaa.//aa/ .aaa./aa
+.aaa.//a.a .aaa./a.a
+.aaa.//a.. .aaa./a..
+.aaa.//a./ .aaa./a.
+.aaa.//a/a .aaa./a/a
+.aaa.//a/. .aaa./a
+.aaa.//a// .aaa./a
+.aaa.//.aa .aaa./.aa
+.aaa.//.a. .aaa./.a.
+.aaa.//.a/ .aaa./.a
+.aaa.//..a .aaa./..a
+.aaa.//... .aaa./...
+.aaa.//../ .
+.aaa.//./a .aaa./a
+.aaa.//./. .aaa.
+.aaa.//.// .aaa.
+.aaa.///aa .aaa./aa
+.aaa.///a. .aaa./a.
+.aaa.///a/ .aaa./a
+.aaa.///.a .aaa./.a
+.aaa.///.. .
+.aaa.///./ .aaa.
+.aaa.////a .aaa./a
+.aaa.////. .aaa.
+.aaa.///// .aaa.
+.aaa/aaaaa .aaa/aaaaa
+.aaa/aaaa. .aaa/aaaa.
+.aaa/aaaa/ .aaa/aaaa
+.aaa/aaa.a .aaa/aaa.a
+.aaa/aaa.. .aaa/aaa..
+.aaa/aaa./ .aaa/aaa.
+.aaa/aaa/a .aaa/aaa/a
+.aaa/aaa/. .aaa/aaa
+.aaa/aaa// .aaa/aaa
+.aaa/aa.aa .aaa/aa.aa
+.aaa/aa.a. .aaa/aa.a.
+.aaa/aa.a/ .aaa/aa.a
+.aaa/aa..a .aaa/aa..a
+.aaa/aa... .aaa/aa...
+.aaa/aa../ .aaa/aa..
+.aaa/aa./a .aaa/aa./a
+.aaa/aa./. .aaa/aa.
+.aaa/aa.// .aaa/aa.
+.aaa/aa/aa .aaa/aa/aa
+.aaa/aa/a. .aaa/aa/a.
+.aaa/aa/a/ .aaa/aa/a
+.aaa/aa/.a .aaa/aa/.a
+.aaa/aa/.. .aaa
+.aaa/aa/./ .aaa/aa
+.aaa/aa//a .aaa/aa/a
+.aaa/aa//. .aaa/aa
+.aaa/aa/// .aaa/aa
+.aaa/a.aaa .aaa/a.aaa
+.aaa/a.aa. .aaa/a.aa.
+.aaa/a.aa/ .aaa/a.aa
+.aaa/a.a.a .aaa/a.a.a
+.aaa/a.a.. .aaa/a.a..
+.aaa/a.a./ .aaa/a.a.
+.aaa/a.a/a .aaa/a.a/a
+.aaa/a.a/. .aaa/a.a
+.aaa/a.a// .aaa/a.a
+.aaa/a..aa .aaa/a..aa
+.aaa/a..a. .aaa/a..a.
+.aaa/a..a/ .aaa/a..a
+.aaa/a...a .aaa/a...a
+.aaa/a.... .aaa/a....
+.aaa/a.../ .aaa/a...
+.aaa/a../a .aaa/a../a
+.aaa/a../. .aaa/a..
+.aaa/a..// .aaa/a..
+.aaa/a./aa .aaa/a./aa
+.aaa/a./a. .aaa/a./a.
+.aaa/a./a/ .aaa/a./a
+.aaa/a./.a .aaa/a./.a
+.aaa/a./.. .aaa
+.aaa/a././ .aaa/a.
+.aaa/a.//a .aaa/a./a
+.aaa/a.//. .aaa/a.
+.aaa/a./// .aaa/a.
+.aaa/a/aaa .aaa/a/aaa
+.aaa/a/aa. .aaa/a/aa.
+.aaa/a/aa/ .aaa/a/aa
+.aaa/a/a.a .aaa/a/a.a
+.aaa/a/a.. .aaa/a/a..
+.aaa/a/a./ .aaa/a/a.
+.aaa/a/a/a .aaa/a/a/a
+.aaa/a/a/. .aaa/a/a
+.aaa/a/a// .aaa/a/a
+.aaa/a/.aa .aaa/a/.aa
+.aaa/a/.a. .aaa/a/.a.
+.aaa/a/.a/ .aaa/a/.a
+.aaa/a/..a .aaa/a/..a
+.aaa/a/... .aaa/a/...
+.aaa/a/../ .aaa
+.aaa/a/./a .aaa/a/a
+.aaa/a/./. .aaa/a
+.aaa/a/.// .aaa/a
+.aaa/a//aa .aaa/a/aa
+.aaa/a//a. .aaa/a/a.
+.aaa/a//a/ .aaa/a/a
+.aaa/a//.a .aaa/a/.a
+.aaa/a//.. .aaa
+.aaa/a//./ .aaa/a
+.aaa/a///a .aaa/a/a
+.aaa/a///. .aaa/a
+.aaa/a//// .aaa/a
+.aaa/.aaaa .aaa/.aaaa
+.aaa/.aaa. .aaa/.aaa.
+.aaa/.aaa/ .aaa/.aaa
+.aaa/.aa.a .aaa/.aa.a
+.aaa/.aa.. .aaa/.aa..
+.aaa/.aa./ .aaa/.aa.
+.aaa/.aa/a .aaa/.aa/a
+.aaa/.aa/. .aaa/.aa
+.aaa/.aa// .aaa/.aa
+.aaa/.a.aa .aaa/.a.aa
+.aaa/.a.a. .aaa/.a.a.
+.aaa/.a.a/ .aaa/.a.a
+.aaa/.a..a .aaa/.a..a
+.aaa/.a... .aaa/.a...
+.aaa/.a../ .aaa/.a..
+.aaa/.a./a .aaa/.a./a
+.aaa/.a./. .aaa/.a.
+.aaa/.a.// .aaa/.a.
+.aaa/.a/aa .aaa/.a/aa
+.aaa/.a/a. .aaa/.a/a.
+.aaa/.a/a/ .aaa/.a/a
+.aaa/.a/.a .aaa/.a/.a
+.aaa/.a/.. .aaa
+.aaa/.a/./ .aaa/.a
+.aaa/.a//a .aaa/.a/a
+.aaa/.a//. .aaa/.a
+.aaa/.a/// .aaa/.a
+.aaa/..aaa .aaa/..aaa
+.aaa/..aa. .aaa/..aa.
+.aaa/..aa/ .aaa/..aa
+.aaa/..a.a .aaa/..a.a
+.aaa/..a.. .aaa/..a..
+.aaa/..a./ .aaa/..a.
+.aaa/..a/a .aaa/..a/a
+.aaa/..a/. .aaa/..a
+.aaa/..a// .aaa/..a
+.aaa/...aa .aaa/...aa
+.aaa/...a. .aaa/...a.
+.aaa/...a/ .aaa/...a
+.aaa/....a .aaa/....a
+.aaa/..... .aaa/.....
+.aaa/..../ .aaa/....
+.aaa/.../a .aaa/.../a
+.aaa/.../. .aaa/...
+.aaa/...// .aaa/...
+.aaa/../aa aa
+.aaa/../a. a.
+.aaa/../a/ a
+.aaa/../.a .a
+.aaa/../.. ..
+.aaa/.././ .
+.aaa/..//a a
+.aaa/..//. .
+.aaa/../// .
+.aaa/./aaa .aaa/aaa
+.aaa/./aa. .aaa/aa.
+.aaa/./aa/ .aaa/aa
+.aaa/./a.a .aaa/a.a
+.aaa/./a.. .aaa/a..
+.aaa/./a./ .aaa/a.
+.aaa/./a/a .aaa/a/a
+.aaa/./a/. .aaa/a
+.aaa/./a// .aaa/a
+.aaa/./.aa .aaa/.aa
+.aaa/./.a. .aaa/.a.
+.aaa/./.a/ .aaa/.a
+.aaa/./..a .aaa/..a
+.aaa/./... .aaa/...
+.aaa/./../ .
+.aaa/././a .aaa/a
+.aaa/././. .aaa
+.aaa/./.// .aaa
+.aaa/.//aa .aaa/aa
+.aaa/.//a. .aaa/a.
+.aaa/.//a/ .aaa/a
+.aaa/.//.a .aaa/.a
+.aaa/.//.. .
+.aaa/.//./ .aaa
+.aaa/.///a .aaa/a
+.aaa/.///. .aaa
+.aaa/.//// .aaa
+.aaa//aaaa .aaa/aaaa
+.aaa//aaa. .aaa/aaa.
+.aaa//aaa/ .aaa/aaa
+.aaa//aa.a .aaa/aa.a
+.aaa//aa.. .aaa/aa..
+.aaa//aa./ .aaa/aa.
+.aaa//aa/a .aaa/aa/a
+.aaa//aa/. .aaa/aa
+.aaa//aa// .aaa/aa
+.aaa//a.aa .aaa/a.aa
+.aaa//a.a. .aaa/a.a.
+.aaa//a.a/ .aaa/a.a
+.aaa//a..a .aaa/a..a
+.aaa//a... .aaa/a...
+.aaa//a../ .aaa/a..
+.aaa//a./a .aaa/a./a
+.aaa//a./. .aaa/a.
+.aaa//a.// .aaa/a.
+.aaa//a/aa .aaa/a/aa
+.aaa//a/a. .aaa/a/a.
+.aaa//a/a/ .aaa/a/a
+.aaa//a/.a .aaa/a/.a
+.aaa//a/.. .aaa
+.aaa//a/./ .aaa/a
+.aaa//a//a .aaa/a/a
+.aaa//a//. .aaa/a
+.aaa//a/// .aaa/a
+.aaa//.aaa .aaa/.aaa
+.aaa//.aa. .aaa/.aa.
+.aaa//.aa/ .aaa/.aa
+.aaa//.a.a .aaa/.a.a
+.aaa//.a.. .aaa/.a..
+.aaa//.a./ .aaa/.a.
+.aaa//.a/a .aaa/.a/a
+.aaa//.a/. .aaa/.a
+.aaa//.a// .aaa/.a
+.aaa//..aa .aaa/..aa
+.aaa//..a. .aaa/..a.
+.aaa//..a/ .aaa/..a
+.aaa//...a .aaa/...a
+.aaa//.... .aaa/....
+.aaa//.../ .aaa/...
+.aaa//../a a
+.aaa//../. .
+.aaa//..// .
+.aaa//./aa .aaa/aa
+.aaa//./a. .aaa/a.
+.aaa//./a/ .aaa/a
+.aaa//./.a .aaa/.a
+.aaa//./.. .
+.aaa//././ .aaa
+.aaa//.//a .aaa/a
+.aaa//.//. .aaa
+.aaa//./// .aaa
+.aaa///aaa .aaa/aaa
+.aaa///aa. .aaa/aa.
+.aaa///aa/ .aaa/aa
+.aaa///a.a .aaa/a.a
+.aaa///a.. .aaa/a..
+.aaa///a./ .aaa/a.
+.aaa///a/a .aaa/a/a
+.aaa///a/. .aaa/a
+.aaa///a// .aaa/a
+.aaa///.aa .aaa/.aa
+.aaa///.a. .aaa/.a.
+.aaa///.a/ .aaa/.a
+.aaa///..a .aaa/..a
+.aaa///... .aaa/...
+.aaa///../ .
+.aaa///./a .aaa/a
+.aaa///./. .aaa
+.aaa///.// .aaa
+.aaa////aa .aaa/aa
+.aaa////a. .aaa/a.
+.aaa////a/ .aaa/a
+.aaa////.a .aaa/.a
+.aaa////.. .
+.aaa////./ .aaa
+.aaa/////a .aaa/a
+.aaa/////. .aaa
+.aaa////// .aaa
+.aa.aaaaaa .aa.aaaaaa
+.aa.aaaaa. .aa.aaaaa.
+.aa.aaaaa/ .aa.aaaaa
+.aa.aaaa.a .aa.aaaa.a
+.aa.aaaa.. .aa.aaaa..
+.aa.aaaa./ .aa.aaaa.
+.aa.aaaa/a .aa.aaaa/a
+.aa.aaaa/. .aa.aaaa
+.aa.aaaa// .aa.aaaa
+.aa.aaa.aa .aa.aaa.aa
+.aa.aaa.a. .aa.aaa.a.
+.aa.aaa.a/ .aa.aaa.a
+.aa.aaa..a .aa.aaa..a
+.aa.aaa... .aa.aaa...
+.aa.aaa../ .aa.aaa..
+.aa.aaa./a .aa.aaa./a
+.aa.aaa./. .aa.aaa.
+.aa.aaa.// .aa.aaa.
+.aa.aaa/aa .aa.aaa/aa
+.aa.aaa/a. .aa.aaa/a.
+.aa.aaa/a/ .aa.aaa/a
+.aa.aaa/.a .aa.aaa/.a
+.aa.aaa/.. .
+.aa.aaa/./ .aa.aaa
+.aa.aaa//a .aa.aaa/a
+.aa.aaa//. .aa.aaa
+.aa.aaa/// .aa.aaa
+.aa.aa.aaa .aa.aa.aaa
+.aa.aa.aa. .aa.aa.aa.
+.aa.aa.aa/ .aa.aa.aa
+.aa.aa.a.a .aa.aa.a.a
+.aa.aa.a.. .aa.aa.a..
+.aa.aa.a./ .aa.aa.a.
+.aa.aa.a/a .aa.aa.a/a
+.aa.aa.a/. .aa.aa.a
+.aa.aa.a// .aa.aa.a
+.aa.aa..aa .aa.aa..aa
+.aa.aa..a. .aa.aa..a.
+.aa.aa..a/ .aa.aa..a
+.aa.aa...a .aa.aa...a
+.aa.aa.... .aa.aa....
+.aa.aa.../ .aa.aa...
+.aa.aa../a .aa.aa../a
+.aa.aa../. .aa.aa..
+.aa.aa..// .aa.aa..
+.aa.aa./aa .aa.aa./aa
+.aa.aa./a. .aa.aa./a.
+.aa.aa./a/ .aa.aa./a
+.aa.aa./.a .aa.aa./.a
+.aa.aa./.. .
+.aa.aa././ .aa.aa.
+.aa.aa.//a .aa.aa./a
+.aa.aa.//. .aa.aa.
+.aa.aa./// .aa.aa.
+.aa.aa/aaa .aa.aa/aaa
+.aa.aa/aa. .aa.aa/aa.
+.aa.aa/aa/ .aa.aa/aa
+.aa.aa/a.a .aa.aa/a.a
+.aa.aa/a.. .aa.aa/a..
+.aa.aa/a./ .aa.aa/a.
+.aa.aa/a/a .aa.aa/a/a
+.aa.aa/a/. .aa.aa/a
+.aa.aa/a// .aa.aa/a
+.aa.aa/.aa .aa.aa/.aa
+.aa.aa/.a. .aa.aa/.a.
+.aa.aa/.a/ .aa.aa/.a
+.aa.aa/..a .aa.aa/..a
+.aa.aa/... .aa.aa/...
+.aa.aa/../ .
+.aa.aa/./a .aa.aa/a
+.aa.aa/./. .aa.aa
+.aa.aa/.// .aa.aa
+.aa.aa//aa .aa.aa/aa
+.aa.aa//a. .aa.aa/a.
+.aa.aa//a/ .aa.aa/a
+.aa.aa//.a .aa.aa/.a
+.aa.aa//.. .
+.aa.aa//./ .aa.aa
+.aa.aa///a .aa.aa/a
+.aa.aa///. .aa.aa
+.aa.aa//// .aa.aa
+.aa.a.aaaa .aa.a.aaaa
+.aa.a.aaa. .aa.a.aaa.
+.aa.a.aaa/ .aa.a.aaa
+.aa.a.aa.a .aa.a.aa.a
+.aa.a.aa.. .aa.a.aa..
+.aa.a.aa./ .aa.a.aa.
+.aa.a.aa/a .aa.a.aa/a
+.aa.a.aa/. .aa.a.aa
+.aa.a.aa// .aa.a.aa
+.aa.a.a.aa .aa.a.a.aa
+.aa.a.a.a. .aa.a.a.a.
+.aa.a.a.a/ .aa.a.a.a
+.aa.a.a..a .aa.a.a..a
+.aa.a.a... .aa.a.a...
+.aa.a.a../ .aa.a.a..
+.aa.a.a./a .aa.a.a./a
+.aa.a.a./. .aa.a.a.
+.aa.a.a.// .aa.a.a.
+.aa.a.a/aa .aa.a.a/aa
+.aa.a.a/a. .aa.a.a/a.
+.aa.a.a/a/ .aa.a.a/a
+.aa.a.a/.a .aa.a.a/.a
+.aa.a.a/.. .
+.aa.a.a/./ .aa.a.a
+.aa.a.a//a .aa.a.a/a
+.aa.a.a//. .aa.a.a
+.aa.a.a/// .aa.a.a
+.aa.a..aaa .aa.a..aaa
+.aa.a..aa. .aa.a..aa.
+.aa.a..aa/ .aa.a..aa
+.aa.a..a.a .aa.a..a.a
+.aa.a..a.. .aa.a..a..
+.aa.a..a./ .aa.a..a.
+.aa.a..a/a .aa.a..a/a
+.aa.a..a/. .aa.a..a
+.aa.a..a// .aa.a..a
+.aa.a...aa .aa.a...aa
+.aa.a...a. .aa.a...a.
+.aa.a...a/ .aa.a...a
+.aa.a....a .aa.a....a
+.aa.a..... .aa.a.....
+.aa.a..../ .aa.a....
+.aa.a.../a .aa.a.../a
+.aa.a.../. .aa.a...
+.aa.a...// .aa.a...
+.aa.a../aa .aa.a../aa
+.aa.a../a. .aa.a../a.
+.aa.a../a/ .aa.a../a
+.aa.a../.a .aa.a../.a
+.aa.a../.. .
+.aa.a.././ .aa.a..
+.aa.a..//a .aa.a../a
+.aa.a..//. .aa.a..
+.aa.a../// .aa.a..
+.aa.a./aaa .aa.a./aaa
+.aa.a./aa. .aa.a./aa.
+.aa.a./aa/ .aa.a./aa
+.aa.a./a.a .aa.a./a.a
+.aa.a./a.. .aa.a./a..
+.aa.a./a./ .aa.a./a.
+.aa.a./a/a .aa.a./a/a
+.aa.a./a/. .aa.a./a
+.aa.a./a// .aa.a./a
+.aa.a./.aa .aa.a./.aa
+.aa.a./.a. .aa.a./.a.
+.aa.a./.a/ .aa.a./.a
+.aa.a./..a .aa.a./..a
+.aa.a./... .aa.a./...
+.aa.a./../ .
+.aa.a././a .aa.a./a
+.aa.a././. .aa.a.
+.aa.a./.// .aa.a.
+.aa.a.//aa .aa.a./aa
+.aa.a.//a. .aa.a./a.
+.aa.a.//a/ .aa.a./a
+.aa.a.//.a .aa.a./.a
+.aa.a.//.. .
+.aa.a.//./ .aa.a.
+.aa.a.///a .aa.a./a
+.aa.a.///. .aa.a.
+.aa.a.//// .aa.a.
+.aa.a/aaaa .aa.a/aaaa
+.aa.a/aaa. .aa.a/aaa.
+.aa.a/aaa/ .aa.a/aaa
+.aa.a/aa.a .aa.a/aa.a
+.aa.a/aa.. .aa.a/aa..
+.aa.a/aa./ .aa.a/aa.
+.aa.a/aa/a .aa.a/aa/a
+.aa.a/aa/. .aa.a/aa
+.aa.a/aa// .aa.a/aa
+.aa.a/a.aa .aa.a/a.aa
+.aa.a/a.a. .aa.a/a.a.
+.aa.a/a.a/ .aa.a/a.a
+.aa.a/a..a .aa.a/a..a
+.aa.a/a... .aa.a/a...
+.aa.a/a../ .aa.a/a..
+.aa.a/a./a .aa.a/a./a
+.aa.a/a./. .aa.a/a.
+.aa.a/a.// .aa.a/a.
+.aa.a/a/aa .aa.a/a/aa
+.aa.a/a/a. .aa.a/a/a.
+.aa.a/a/a/ .aa.a/a/a
+.aa.a/a/.a .aa.a/a/.a
+.aa.a/a/.. .aa.a
+.aa.a/a/./ .aa.a/a
+.aa.a/a//a .aa.a/a/a
+.aa.a/a//. .aa.a/a
+.aa.a/a/// .aa.a/a
+.aa.a/.aaa .aa.a/.aaa
+.aa.a/.aa. .aa.a/.aa.
+.aa.a/.aa/ .aa.a/.aa
+.aa.a/.a.a .aa.a/.a.a
+.aa.a/.a.. .aa.a/.a..
+.aa.a/.a./ .aa.a/.a.
+.aa.a/.a/a .aa.a/.a/a
+.aa.a/.a/. .aa.a/.a
+.aa.a/.a// .aa.a/.a
+.aa.a/..aa .aa.a/..aa
+.aa.a/..a. .aa.a/..a.
+.aa.a/..a/ .aa.a/..a
+.aa.a/...a .aa.a/...a
+.aa.a/.... .aa.a/....
+.aa.a/.../ .aa.a/...
+.aa.a/../a a
+.aa.a/../. .
+.aa.a/..// .
+.aa.a/./aa .aa.a/aa
+.aa.a/./a. .aa.a/a.
+.aa.a/./a/ .aa.a/a
+.aa.a/./.a .aa.a/.a
+.aa.a/./.. .
+.aa.a/././ .aa.a
+.aa.a/.//a .aa.a/a
+.aa.a/.//. .aa.a
+.aa.a/./// .aa.a
+.aa.a//aaa .aa.a/aaa
+.aa.a//aa. .aa.a/aa.
+.aa.a//aa/ .aa.a/aa
+.aa.a//a.a .aa.a/a.a
+.aa.a//a.. .aa.a/a..
+.aa.a//a./ .aa.a/a.
+.aa.a//a/a .aa.a/a/a
+.aa.a//a/. .aa.a/a
+.aa.a//a// .aa.a/a
+.aa.a//.aa .aa.a/.aa
+.aa.a//.a. .aa.a/.a.
+.aa.a//.a/ .aa.a/.a
+.aa.a//..a .aa.a/..a
+.aa.a//... .aa.a/...
+.aa.a//../ .
+.aa.a//./a .aa.a/a
+.aa.a//./. .aa.a
+.aa.a//.// .aa.a
+.aa.a///aa .aa.a/aa
+.aa.a///a. .aa.a/a.
+.aa.a///a/ .aa.a/a
+.aa.a///.a .aa.a/.a
+.aa.a///.. .
+.aa.a///./ .aa.a
+.aa.a////a .aa.a/a
+.aa.a////. .aa.a
+.aa.a///// .aa.a
+.aa..aaaaa .aa..aaaaa
+.aa..aaaa. .aa..aaaa.
+.aa..aaaa/ .aa..aaaa
+.aa..aaa.a .aa..aaa.a
+.aa..aaa.. .aa..aaa..
+.aa..aaa./ .aa..aaa.
+.aa..aaa/a .aa..aaa/a
+.aa..aaa/. .aa..aaa
+.aa..aaa// .aa..aaa
+.aa..aa.aa .aa..aa.aa
+.aa..aa.a. .aa..aa.a.
+.aa..aa.a/ .aa..aa.a
+.aa..aa..a .aa..aa..a
+.aa..aa... .aa..aa...
+.aa..aa../ .aa..aa..
+.aa..aa./a .aa..aa./a
+.aa..aa./. .aa..aa.
+.aa..aa.// .aa..aa.
+.aa..aa/aa .aa..aa/aa
+.aa..aa/a. .aa..aa/a.
+.aa..aa/a/ .aa..aa/a
+.aa..aa/.a .aa..aa/.a
+.aa..aa/.. .
+.aa..aa/./ .aa..aa
+.aa..aa//a .aa..aa/a
+.aa..aa//. .aa..aa
+.aa..aa/// .aa..aa
+.aa..a.aaa .aa..a.aaa
+.aa..a.aa. .aa..a.aa.
+.aa..a.aa/ .aa..a.aa
+.aa..a.a.a .aa..a.a.a
+.aa..a.a.. .aa..a.a..
+.aa..a.a./ .aa..a.a.
+.aa..a.a/a .aa..a.a/a
+.aa..a.a/. .aa..a.a
+.aa..a.a// .aa..a.a
+.aa..a..aa .aa..a..aa
+.aa..a..a. .aa..a..a.
+.aa..a..a/ .aa..a..a
+.aa..a...a .aa..a...a
+.aa..a.... .aa..a....
+.aa..a.../ .aa..a...
+.aa..a../a .aa..a../a
+.aa..a../. .aa..a..
+.aa..a..// .aa..a..
+.aa..a./aa .aa..a./aa
+.aa..a./a. .aa..a./a.
+.aa..a./a/ .aa..a./a
+.aa..a./.a .aa..a./.a
+.aa..a./.. .
+.aa..a././ .aa..a.
+.aa..a.//a .aa..a./a
+.aa..a.//. .aa..a.
+.aa..a./// .aa..a.
+.aa..a/aaa .aa..a/aaa
+.aa..a/aa. .aa..a/aa.
+.aa..a/aa/ .aa..a/aa
+.aa..a/a.a .aa..a/a.a
+.aa..a/a.. .aa..a/a..
+.aa..a/a./ .aa..a/a.
+.aa..a/a/a .aa..a/a/a
+.aa..a/a/. .aa..a/a
+.aa..a/a// .aa..a/a
+.aa..a/.aa .aa..a/.aa
+.aa..a/.a. .aa..a/.a.
+.aa..a/.a/ .aa..a/.a
+.aa..a/..a .aa..a/..a
+.aa..a/... .aa..a/...
+.aa..a/../ .
+.aa..a/./a .aa..a/a
+.aa..a/./. .aa..a
+.aa..a/.// .aa..a
+.aa..a//aa .aa..a/aa
+.aa..a//a. .aa..a/a.
+.aa..a//a/ .aa..a/a
+.aa..a//.a .aa..a/.a
+.aa..a//.. .
+.aa..a//./ .aa..a
+.aa..a///a .aa..a/a
+.aa..a///. .aa..a
+.aa..a//// .aa..a
+.aa...aaaa .aa...aaaa
+.aa...aaa. .aa...aaa.
+.aa...aaa/ .aa...aaa
+.aa...aa.a .aa...aa.a
+.aa...aa.. .aa...aa..
+.aa...aa./ .aa...aa.
+.aa...aa/a .aa...aa/a
+.aa...aa/. .aa...aa
+.aa...aa// .aa...aa
+.aa...a.aa .aa...a.aa
+.aa...a.a. .aa...a.a.
+.aa...a.a/ .aa...a.a
+.aa...a..a .aa...a..a
+.aa...a... .aa...a...
+.aa...a../ .aa...a..
+.aa...a./a .aa...a./a
+.aa...a./. .aa...a.
+.aa...a.// .aa...a.
+.aa...a/aa .aa...a/aa
+.aa...a/a. .aa...a/a.
+.aa...a/a/ .aa...a/a
+.aa...a/.a .aa...a/.a
+.aa...a/.. .
+.aa...a/./ .aa...a
+.aa...a//a .aa...a/a
+.aa...a//. .aa...a
+.aa...a/// .aa...a
+.aa....aaa .aa....aaa
+.aa....aa. .aa....aa.
+.aa....aa/ .aa....aa
+.aa....a.a .aa....a.a
+.aa....a.. .aa....a..
+.aa....a./ .aa....a.
+.aa....a/a .aa....a/a
+.aa....a/. .aa....a
+.aa....a// .aa....a
+.aa.....aa .aa.....aa
+.aa.....a. .aa.....a.
+.aa.....a/ .aa.....a
+.aa......a .aa......a
+.aa....... .aa.......
+.aa....../ .aa......
+.aa...../a .aa...../a
+.aa...../. .aa.....
+.aa.....// .aa.....
+.aa..../aa .aa..../aa
+.aa..../a. .aa..../a.
+.aa..../a/ .aa..../a
+.aa..../.a .aa..../.a
+.aa..../.. .
+.aa...././ .aa....
+.aa....//a .aa..../a
+.aa....//. .aa....
+.aa..../// .aa....
+.aa.../aaa .aa.../aaa
+.aa.../aa. .aa.../aa.
+.aa.../aa/ .aa.../aa
+.aa.../a.a .aa.../a.a
+.aa.../a.. .aa.../a..
+.aa.../a./ .aa.../a.
+.aa.../a/a .aa.../a/a
+.aa.../a/. .aa.../a
+.aa.../a// .aa.../a
+.aa.../.aa .aa.../.aa
+.aa.../.a. .aa.../.a.
+.aa.../.a/ .aa.../.a
+.aa.../..a .aa.../..a
+.aa.../... .aa.../...
+.aa.../../ .
+.aa..././a .aa.../a
+.aa..././. .aa...
+.aa.../.// .aa...
+.aa...//aa .aa.../aa
+.aa...//a. .aa.../a.
+.aa...//a/ .aa.../a
+.aa...//.a .aa.../.a
+.aa...//.. .
+.aa...//./ .aa...
+.aa...///a .aa.../a
+.aa...///. .aa...
+.aa...//// .aa...
+.aa../aaaa .aa../aaaa
+.aa../aaa. .aa../aaa.
+.aa../aaa/ .aa../aaa
+.aa../aa.a .aa../aa.a
+.aa../aa.. .aa../aa..
+.aa../aa./ .aa../aa.
+.aa../aa/a .aa../aa/a
+.aa../aa/. .aa../aa
+.aa../aa// .aa../aa
+.aa../a.aa .aa../a.aa
+.aa../a.a. .aa../a.a.
+.aa../a.a/ .aa../a.a
+.aa../a..a .aa../a..a
+.aa../a... .aa../a...
+.aa../a../ .aa../a..
+.aa../a./a .aa../a./a
+.aa../a./. .aa../a.
+.aa../a.// .aa../a.
+.aa../a/aa .aa../a/aa
+.aa../a/a. .aa../a/a.
+.aa../a/a/ .aa../a/a
+.aa../a/.a .aa../a/.a
+.aa../a/.. .aa..
+.aa../a/./ .aa../a
+.aa../a//a .aa../a/a
+.aa../a//. .aa../a
+.aa../a/// .aa../a
+.aa../.aaa .aa../.aaa
+.aa../.aa. .aa../.aa.
+.aa../.aa/ .aa../.aa
+.aa../.a.a .aa../.a.a
+.aa../.a.. .aa../.a..
+.aa../.a./ .aa../.a.
+.aa../.a/a .aa../.a/a
+.aa../.a/. .aa../.a
+.aa../.a// .aa../.a
+.aa../..aa .aa../..aa
+.aa../..a. .aa../..a.
+.aa../..a/ .aa../..a
+.aa../...a .aa../...a
+.aa../.... .aa../....
+.aa../.../ .aa../...
+.aa../../a a
+.aa../../. .
+.aa../..// .
+.aa.././aa .aa../aa
+.aa.././a. .aa../a.
+.aa.././a/ .aa../a
+.aa.././.a .aa../.a
+.aa.././.. .
+.aa../././ .aa..
+.aa.././/a .aa../a
+.aa.././/. .aa..
+.aa.././// .aa..
+.aa..//aaa .aa../aaa
+.aa..//aa. .aa../aa.
+.aa..//aa/ .aa../aa
+.aa..//a.a .aa../a.a
+.aa..//a.. .aa../a..
+.aa..//a./ .aa../a.
+.aa..//a/a .aa../a/a
+.aa..//a/. .aa../a
+.aa..//a// .aa../a
+.aa..//.aa .aa../.aa
+.aa..//.a. .aa../.a.
+.aa..//.a/ .aa../.a
+.aa..//..a .aa../..a
+.aa..//... .aa../...
+.aa..//../ .
+.aa..//./a .aa../a
+.aa..//./. .aa..
+.aa..//.// .aa..
+.aa..///aa .aa../aa
+.aa..///a. .aa../a.
+.aa..///a/ .aa../a
+.aa..///.a .aa../.a
+.aa..///.. .
+.aa..///./ .aa..
+.aa..////a .aa../a
+.aa..////. .aa..
+.aa..///// .aa..
+.aa./aaaaa .aa./aaaaa
+.aa./aaaa. .aa./aaaa.
+.aa./aaaa/ .aa./aaaa
+.aa./aaa.a .aa./aaa.a
+.aa./aaa.. .aa./aaa..
+.aa./aaa./ .aa./aaa.
+.aa./aaa/a .aa./aaa/a
+.aa./aaa/. .aa./aaa
+.aa./aaa// .aa./aaa
+.aa./aa.aa .aa./aa.aa
+.aa./aa.a. .aa./aa.a.
+.aa./aa.a/ .aa./aa.a
+.aa./aa..a .aa./aa..a
+.aa./aa... .aa./aa...
+.aa./aa../ .aa./aa..
+.aa./aa./a .aa./aa./a
+.aa./aa./. .aa./aa.
+.aa./aa.// .aa./aa.
+.aa./aa/aa .aa./aa/aa
+.aa./aa/a. .aa./aa/a.
+.aa./aa/a/ .aa./aa/a
+.aa./aa/.a .aa./aa/.a
+.aa./aa/.. .aa.
+.aa./aa/./ .aa./aa
+.aa./aa//a .aa./aa/a
+.aa./aa//. .aa./aa
+.aa./aa/// .aa./aa
+.aa./a.aaa .aa./a.aaa
+.aa./a.aa. .aa./a.aa.
+.aa./a.aa/ .aa./a.aa
+.aa./a.a.a .aa./a.a.a
+.aa./a.a.. .aa./a.a..
+.aa./a.a./ .aa./a.a.
+.aa./a.a/a .aa./a.a/a
+.aa./a.a/. .aa./a.a
+.aa./a.a// .aa./a.a
+.aa./a..aa .aa./a..aa
+.aa./a..a. .aa./a..a.
+.aa./a..a/ .aa./a..a
+.aa./a...a .aa./a...a
+.aa./a.... .aa./a....
+.aa./a.../ .aa./a...
+.aa./a../a .aa./a../a
+.aa./a../. .aa./a..
+.aa./a..// .aa./a..
+.aa./a./aa .aa./a./aa
+.aa./a./a. .aa./a./a.
+.aa./a./a/ .aa./a./a
+.aa./a./.a .aa./a./.a
+.aa./a./.. .aa.
+.aa./a././ .aa./a.
+.aa./a.//a .aa./a./a
+.aa./a.//. .aa./a.
+.aa./a./// .aa./a.
+.aa./a/aaa .aa./a/aaa
+.aa./a/aa. .aa./a/aa.
+.aa./a/aa/ .aa./a/aa
+.aa./a/a.a .aa./a/a.a
+.aa./a/a.. .aa./a/a..
+.aa./a/a./ .aa./a/a.
+.aa./a/a/a .aa./a/a/a
+.aa./a/a/. .aa./a/a
+.aa./a/a// .aa./a/a
+.aa./a/.aa .aa./a/.aa
+.aa./a/.a. .aa./a/.a.
+.aa./a/.a/ .aa./a/.a
+.aa./a/..a .aa./a/..a
+.aa./a/... .aa./a/...
+.aa./a/../ .aa.
+.aa./a/./a .aa./a/a
+.aa./a/./. .aa./a
+.aa./a/.// .aa./a
+.aa./a//aa .aa./a/aa
+.aa./a//a. .aa./a/a.
+.aa./a//a/ .aa./a/a
+.aa./a//.a .aa./a/.a
+.aa./a//.. .aa.
+.aa./a//./ .aa./a
+.aa./a///a .aa./a/a
+.aa./a///. .aa./a
+.aa./a//// .aa./a
+.aa./.aaaa .aa./.aaaa
+.aa./.aaa. .aa./.aaa.
+.aa./.aaa/ .aa./.aaa
+.aa./.aa.a .aa./.aa.a
+.aa./.aa.. .aa./.aa..
+.aa./.aa./ .aa./.aa.
+.aa./.aa/a .aa./.aa/a
+.aa./.aa/. .aa./.aa
+.aa./.aa// .aa./.aa
+.aa./.a.aa .aa./.a.aa
+.aa./.a.a. .aa./.a.a.
+.aa./.a.a/ .aa./.a.a
+.aa./.a..a .aa./.a..a
+.aa./.a... .aa./.a...
+.aa./.a../ .aa./.a..
+.aa./.a./a .aa./.a./a
+.aa./.a./. .aa./.a.
+.aa./.a.// .aa./.a.
+.aa./.a/aa .aa./.a/aa
+.aa./.a/a. .aa./.a/a.
+.aa./.a/a/ .aa./.a/a
+.aa./.a/.a .aa./.a/.a
+.aa./.a/.. .aa.
+.aa./.a/./ .aa./.a
+.aa./.a//a .aa./.a/a
+.aa./.a//. .aa./.a
+.aa./.a/// .aa./.a
+.aa./..aaa .aa./..aaa
+.aa./..aa. .aa./..aa.
+.aa./..aa/ .aa./..aa
+.aa./..a.a .aa./..a.a
+.aa./..a.. .aa./..a..
+.aa./..a./ .aa./..a.
+.aa./..a/a .aa./..a/a
+.aa./..a/. .aa./..a
+.aa./..a// .aa./..a
+.aa./...aa .aa./...aa
+.aa./...a. .aa./...a.
+.aa./...a/ .aa./...a
+.aa./....a .aa./....a
+.aa./..... .aa./.....
+.aa./..../ .aa./....
+.aa./.../a .aa./.../a
+.aa./.../. .aa./...
+.aa./...// .aa./...
+.aa./../aa aa
+.aa./../a. a.
+.aa./../a/ a
+.aa./../.a .a
+.aa./../.. ..
+.aa./.././ .
+.aa./..//a a
+.aa./..//. .
+.aa./../// .
+.aa././aaa .aa./aaa
+.aa././aa. .aa./aa.
+.aa././aa/ .aa./aa
+.aa././a.a .aa./a.a
+.aa././a.. .aa./a..
+.aa././a./ .aa./a.
+.aa././a/a .aa./a/a
+.aa././a/. .aa./a
+.aa././a// .aa./a
+.aa././.aa .aa./.aa
+.aa././.a. .aa./.a.
+.aa././.a/ .aa./.a
+.aa././..a .aa./..a
+.aa././... .aa./...
+.aa././../ .
+.aa./././a .aa./a
+.aa./././. .aa.
+.aa././.// .aa.
+.aa././/aa .aa./aa
+.aa././/a. .aa./a.
+.aa././/a/ .aa./a
+.aa././/.a .aa./.a
+.aa././/.. .
+.aa././/./ .aa.
+.aa././//a .aa./a
+.aa././//. .aa.
+.aa././/// .aa.
+.aa.//aaaa .aa./aaaa
+.aa.//aaa. .aa./aaa.
+.aa.//aaa/ .aa./aaa
+.aa.//aa.a .aa./aa.a
+.aa.//aa.. .aa./aa..
+.aa.//aa./ .aa./aa.
+.aa.//aa/a .aa./aa/a
+.aa.//aa/. .aa./aa
+.aa.//aa// .aa./aa
+.aa.//a.aa .aa./a.aa
+.aa.//a.a. .aa./a.a.
+.aa.//a.a/ .aa./a.a
+.aa.//a..a .aa./a..a
+.aa.//a... .aa./a...
+.aa.//a../ .aa./a..
+.aa.//a./a .aa./a./a
+.aa.//a./. .aa./a.
+.aa.//a.// .aa./a.
+.aa.//a/aa .aa./a/aa
+.aa.//a/a. .aa./a/a.
+.aa.//a/a/ .aa./a/a
+.aa.//a/.a .aa./a/.a
+.aa.//a/.. .aa.
+.aa.//a/./ .aa./a
+.aa.//a//a .aa./a/a
+.aa.//a//. .aa./a
+.aa.//a/// .aa./a
+.aa.//.aaa .aa./.aaa
+.aa.//.aa. .aa./.aa.
+.aa.//.aa/ .aa./.aa
+.aa.//.a.a .aa./.a.a
+.aa.//.a.. .aa./.a..
+.aa.//.a./ .aa./.a.
+.aa.//.a/a .aa./.a/a
+.aa.//.a/. .aa./.a
+.aa.//.a// .aa./.a
+.aa.//..aa .aa./..aa
+.aa.//..a. .aa./..a.
+.aa.//..a/ .aa./..a
+.aa.//...a .aa./...a
+.aa.//.... .aa./....
+.aa.//.../ .aa./...
+.aa.//../a a
+.aa.//../. .
+.aa.//..// .
+.aa.//./aa .aa./aa
+.aa.//./a. .aa./a.
+.aa.//./a/ .aa./a
+.aa.//./.a .aa./.a
+.aa.//./.. .
+.aa.//././ .aa.
+.aa.//.//a .aa./a
+.aa.//.//. .aa.
+.aa.//./// .aa.
+.aa.///aaa .aa./aaa
+.aa.///aa. .aa./aa.
+.aa.///aa/ .aa./aa
+.aa.///a.a .aa./a.a
+.aa.///a.. .aa./a..
+.aa.///a./ .aa./a.
+.aa.///a/a .aa./a/a
+.aa.///a/. .aa./a
+.aa.///a// .aa./a
+.aa.///.aa .aa./.aa
+.aa.///.a. .aa./.a.
+.aa.///.a/ .aa./.a
+.aa.///..a .aa./..a
+.aa.///... .aa./...
+.aa.///../ .
+.aa.///./a .aa./a
+.aa.///./. .aa.
+.aa.///.// .aa.
+.aa.////aa .aa./aa
+.aa.////a. .aa./a.
+.aa.////a/ .aa./a
+.aa.////.a .aa./.a
+.aa.////.. .
+.aa.////./ .aa.
+.aa./////a .aa./a
+.aa./////. .aa.
+.aa.////// .aa.
+.aa/aaaaaa .aa/aaaaaa
+.aa/aaaaa. .aa/aaaaa.
+.aa/aaaaa/ .aa/aaaaa
+.aa/aaaa.a .aa/aaaa.a
+.aa/aaaa.. .aa/aaaa..
+.aa/aaaa./ .aa/aaaa.
+.aa/aaaa/a .aa/aaaa/a
+.aa/aaaa/. .aa/aaaa
+.aa/aaaa// .aa/aaaa
+.aa/aaa.aa .aa/aaa.aa
+.aa/aaa.a. .aa/aaa.a.
+.aa/aaa.a/ .aa/aaa.a
+.aa/aaa..a .aa/aaa..a
+.aa/aaa... .aa/aaa...
+.aa/aaa../ .aa/aaa..
+.aa/aaa./a .aa/aaa./a
+.aa/aaa./. .aa/aaa.
+.aa/aaa.// .aa/aaa.
+.aa/aaa/aa .aa/aaa/aa
+.aa/aaa/a. .aa/aaa/a.
+.aa/aaa/a/ .aa/aaa/a
+.aa/aaa/.a .aa/aaa/.a
+.aa/aaa/.. .aa
+.aa/aaa/./ .aa/aaa
+.aa/aaa//a .aa/aaa/a
+.aa/aaa//. .aa/aaa
+.aa/aaa/// .aa/aaa
+.aa/aa.aaa .aa/aa.aaa
+.aa/aa.aa. .aa/aa.aa.
+.aa/aa.aa/ .aa/aa.aa
+.aa/aa.a.a .aa/aa.a.a
+.aa/aa.a.. .aa/aa.a..
+.aa/aa.a./ .aa/aa.a.
+.aa/aa.a/a .aa/aa.a/a
+.aa/aa.a/. .aa/aa.a
+.aa/aa.a// .aa/aa.a
+.aa/aa..aa .aa/aa..aa
+.aa/aa..a. .aa/aa..a.
+.aa/aa..a/ .aa/aa..a
+.aa/aa...a .aa/aa...a
+.aa/aa.... .aa/aa....
+.aa/aa.../ .aa/aa...
+.aa/aa../a .aa/aa../a
+.aa/aa../. .aa/aa..
+.aa/aa..// .aa/aa..
+.aa/aa./aa .aa/aa./aa
+.aa/aa./a. .aa/aa./a.
+.aa/aa./a/ .aa/aa./a
+.aa/aa./.a .aa/aa./.a
+.aa/aa./.. .aa
+.aa/aa././ .aa/aa.
+.aa/aa.//a .aa/aa./a
+.aa/aa.//. .aa/aa.
+.aa/aa./// .aa/aa.
+.aa/aa/aaa .aa/aa/aaa
+.aa/aa/aa. .aa/aa/aa.
+.aa/aa/aa/ .aa/aa/aa
+.aa/aa/a.a .aa/aa/a.a
+.aa/aa/a.. .aa/aa/a..
+.aa/aa/a./ .aa/aa/a.
+.aa/aa/a/a .aa/aa/a/a
+.aa/aa/a/. .aa/aa/a
+.aa/aa/a// .aa/aa/a
+.aa/aa/.aa .aa/aa/.aa
+.aa/aa/.a. .aa/aa/.a.
+.aa/aa/.a/ .aa/aa/.a
+.aa/aa/..a .aa/aa/..a
+.aa/aa/... .aa/aa/...
+.aa/aa/../ .aa
+.aa/aa/./a .aa/aa/a
+.aa/aa/./. .aa/aa
+.aa/aa/.// .aa/aa
+.aa/aa//aa .aa/aa/aa
+.aa/aa//a. .aa/aa/a.
+.aa/aa//a/ .aa/aa/a
+.aa/aa//.a .aa/aa/.a
+.aa/aa//.. .aa
+.aa/aa//./ .aa/aa
+.aa/aa///a .aa/aa/a
+.aa/aa///. .aa/aa
+.aa/aa//// .aa/aa
+.aa/a.aaaa .aa/a.aaaa
+.aa/a.aaa. .aa/a.aaa.
+.aa/a.aaa/ .aa/a.aaa
+.aa/a.aa.a .aa/a.aa.a
+.aa/a.aa.. .aa/a.aa..
+.aa/a.aa./ .aa/a.aa.
+.aa/a.aa/a .aa/a.aa/a
+.aa/a.aa/. .aa/a.aa
+.aa/a.aa// .aa/a.aa
+.aa/a.a.aa .aa/a.a.aa
+.aa/a.a.a. .aa/a.a.a.
+.aa/a.a.a/ .aa/a.a.a
+.aa/a.a..a .aa/a.a..a
+.aa/a.a... .aa/a.a...
+.aa/a.a../ .aa/a.a..
+.aa/a.a./a .aa/a.a./a
+.aa/a.a./. .aa/a.a.
+.aa/a.a.// .aa/a.a.
+.aa/a.a/aa .aa/a.a/aa
+.aa/a.a/a. .aa/a.a/a.
+.aa/a.a/a/ .aa/a.a/a
+.aa/a.a/.a .aa/a.a/.a
+.aa/a.a/.. .aa
+.aa/a.a/./ .aa/a.a
+.aa/a.a//a .aa/a.a/a
+.aa/a.a//. .aa/a.a
+.aa/a.a/// .aa/a.a
+.aa/a..aaa .aa/a..aaa
+.aa/a..aa. .aa/a..aa.
+.aa/a..aa/ .aa/a..aa
+.aa/a..a.a .aa/a..a.a
+.aa/a..a.. .aa/a..a..
+.aa/a..a./ .aa/a..a.
+.aa/a..a/a .aa/a..a/a
+.aa/a..a/. .aa/a..a
+.aa/a..a// .aa/a..a
+.aa/a...aa .aa/a...aa
+.aa/a...a. .aa/a...a.
+.aa/a...a/ .aa/a...a
+.aa/a....a .aa/a....a
+.aa/a..... .aa/a.....
+.aa/a..../ .aa/a....
+.aa/a.../a .aa/a.../a
+.aa/a.../. .aa/a...
+.aa/a...// .aa/a...
+.aa/a../aa .aa/a../aa
+.aa/a../a. .aa/a../a.
+.aa/a../a/ .aa/a../a
+.aa/a../.a .aa/a../.a
+.aa/a../.. .aa
+.aa/a.././ .aa/a..
+.aa/a..//a .aa/a../a
+.aa/a..//. .aa/a..
+.aa/a../// .aa/a..
+.aa/a./aaa .aa/a./aaa
+.aa/a./aa. .aa/a./aa.
+.aa/a./aa/ .aa/a./aa
+.aa/a./a.a .aa/a./a.a
+.aa/a./a.. .aa/a./a..
+.aa/a./a./ .aa/a./a.
+.aa/a./a/a .aa/a./a/a
+.aa/a./a/. .aa/a./a
+.aa/a./a// .aa/a./a
+.aa/a./.aa .aa/a./.aa
+.aa/a./.a. .aa/a./.a.
+.aa/a./.a/ .aa/a./.a
+.aa/a./..a .aa/a./..a
+.aa/a./... .aa/a./...
+.aa/a./../ .aa
+.aa/a././a .aa/a./a
+.aa/a././. .aa/a.
+.aa/a./.// .aa/a.
+.aa/a.//aa .aa/a./aa
+.aa/a.//a. .aa/a./a.
+.aa/a.//a/ .aa/a./a
+.aa/a.//.a .aa/a./.a
+.aa/a.//.. .aa
+.aa/a.//./ .aa/a.
+.aa/a.///a .aa/a./a
+.aa/a.///. .aa/a.
+.aa/a.//// .aa/a.
+.aa/a/aaaa .aa/a/aaaa
+.aa/a/aaa. .aa/a/aaa.
+.aa/a/aaa/ .aa/a/aaa
+.aa/a/aa.a .aa/a/aa.a
+.aa/a/aa.. .aa/a/aa..
+.aa/a/aa./ .aa/a/aa.
+.aa/a/aa/a .aa/a/aa/a
+.aa/a/aa/. .aa/a/aa
+.aa/a/aa// .aa/a/aa
+.aa/a/a.aa .aa/a/a.aa
+.aa/a/a.a. .aa/a/a.a.
+.aa/a/a.a/ .aa/a/a.a
+.aa/a/a..a .aa/a/a..a
+.aa/a/a... .aa/a/a...
+.aa/a/a../ .aa/a/a..
+.aa/a/a./a .aa/a/a./a
+.aa/a/a./. .aa/a/a.
+.aa/a/a.// .aa/a/a.
+.aa/a/a/aa .aa/a/a/aa
+.aa/a/a/a. .aa/a/a/a.
+.aa/a/a/a/ .aa/a/a/a
+.aa/a/a/.a .aa/a/a/.a
+.aa/a/a/.. .aa/a
+.aa/a/a/./ .aa/a/a
+.aa/a/a//a .aa/a/a/a
+.aa/a/a//. .aa/a/a
+.aa/a/a/// .aa/a/a
+.aa/a/.aaa .aa/a/.aaa
+.aa/a/.aa. .aa/a/.aa.
+.aa/a/.aa/ .aa/a/.aa
+.aa/a/.a.a .aa/a/.a.a
+.aa/a/.a.. .aa/a/.a..
+.aa/a/.a./ .aa/a/.a.
+.aa/a/.a/a .aa/a/.a/a
+.aa/a/.a/. .aa/a/.a
+.aa/a/.a// .aa/a/.a
+.aa/a/..aa .aa/a/..aa
+.aa/a/..a. .aa/a/..a.
+.aa/a/..a/ .aa/a/..a
+.aa/a/...a .aa/a/...a
+.aa/a/.... .aa/a/....
+.aa/a/.../ .aa/a/...
+.aa/a/../a .aa/a
+.aa/a/../. .aa
+.aa/a/..// .aa
+.aa/a/./aa .aa/a/aa
+.aa/a/./a. .aa/a/a.
+.aa/a/./a/ .aa/a/a
+.aa/a/./.a .aa/a/.a
+.aa/a/./.. .aa
+.aa/a/././ .aa/a
+.aa/a/.//a .aa/a/a
+.aa/a/.//. .aa/a
+.aa/a/./// .aa/a
+.aa/a//aaa .aa/a/aaa
+.aa/a//aa. .aa/a/aa.
+.aa/a//aa/ .aa/a/aa
+.aa/a//a.a .aa/a/a.a
+.aa/a//a.. .aa/a/a..
+.aa/a//a./ .aa/a/a.
+.aa/a//a/a .aa/a/a/a
+.aa/a//a/. .aa/a/a
+.aa/a//a// .aa/a/a
+.aa/a//.aa .aa/a/.aa
+.aa/a//.a. .aa/a/.a.
+.aa/a//.a/ .aa/a/.a
+.aa/a//..a .aa/a/..a
+.aa/a//... .aa/a/...
+.aa/a//../ .aa
+.aa/a//./a .aa/a/a
+.aa/a//./. .aa/a
+.aa/a//.// .aa/a
+.aa/a///aa .aa/a/aa
+.aa/a///a. .aa/a/a.
+.aa/a///a/ .aa/a/a
+.aa/a///.a .aa/a/.a
+.aa/a///.. .aa
+.aa/a///./ .aa/a
+.aa/a////a .aa/a/a
+.aa/a////. .aa/a
+.aa/a///// .aa/a
+.aa/.aaaaa .aa/.aaaaa
+.aa/.aaaa. .aa/.aaaa.
+.aa/.aaaa/ .aa/.aaaa
+.aa/.aaa.a .aa/.aaa.a
+.aa/.aaa.. .aa/.aaa..
+.aa/.aaa./ .aa/.aaa.
+.aa/.aaa/a .aa/.aaa/a
+.aa/.aaa/. .aa/.aaa
+.aa/.aaa// .aa/.aaa
+.aa/.aa.aa .aa/.aa.aa
+.aa/.aa.a. .aa/.aa.a.
+.aa/.aa.a/ .aa/.aa.a
+.aa/.aa..a .aa/.aa..a
+.aa/.aa... .aa/.aa...
+.aa/.aa../ .aa/.aa..
+.aa/.aa./a .aa/.aa./a
+.aa/.aa./. .aa/.aa.
+.aa/.aa.// .aa/.aa.
+.aa/.aa/aa .aa/.aa/aa
+.aa/.aa/a. .aa/.aa/a.
+.aa/.aa/a/ .aa/.aa/a
+.aa/.aa/.a .aa/.aa/.a
+.aa/.aa/.. .aa
+.aa/.aa/./ .aa/.aa
+.aa/.aa//a .aa/.aa/a
+.aa/.aa//. .aa/.aa
+.aa/.aa/// .aa/.aa
+.aa/.a.aaa .aa/.a.aaa
+.aa/.a.aa. .aa/.a.aa.
+.aa/.a.aa/ .aa/.a.aa
+.aa/.a.a.a .aa/.a.a.a
+.aa/.a.a.. .aa/.a.a..
+.aa/.a.a./ .aa/.a.a.
+.aa/.a.a/a .aa/.a.a/a
+.aa/.a.a/. .aa/.a.a
+.aa/.a.a// .aa/.a.a
+.aa/.a..aa .aa/.a..aa
+.aa/.a..a. .aa/.a..a.
+.aa/.a..a/ .aa/.a..a
+.aa/.a...a .aa/.a...a
+.aa/.a.... .aa/.a....
+.aa/.a.../ .aa/.a...
+.aa/.a../a .aa/.a../a
+.aa/.a../. .aa/.a..
+.aa/.a..// .aa/.a..
+.aa/.a./aa .aa/.a./aa
+.aa/.a./a. .aa/.a./a.
+.aa/.a./a/ .aa/.a./a
+.aa/.a./.a .aa/.a./.a
+.aa/.a./.. .aa
+.aa/.a././ .aa/.a.
+.aa/.a.//a .aa/.a./a
+.aa/.a.//. .aa/.a.
+.aa/.a./// .aa/.a.
+.aa/.a/aaa .aa/.a/aaa
+.aa/.a/aa. .aa/.a/aa.
+.aa/.a/aa/ .aa/.a/aa
+.aa/.a/a.a .aa/.a/a.a
+.aa/.a/a.. .aa/.a/a..
+.aa/.a/a./ .aa/.a/a.
+.aa/.a/a/a .aa/.a/a/a
+.aa/.a/a/. .aa/.a/a
+.aa/.a/a// .aa/.a/a
+.aa/.a/.aa .aa/.a/.aa
+.aa/.a/.a. .aa/.a/.a.
+.aa/.a/.a/ .aa/.a/.a
+.aa/.a/..a .aa/.a/..a
+.aa/.a/... .aa/.a/...
+.aa/.a/../ .aa
+.aa/.a/./a .aa/.a/a
+.aa/.a/./. .aa/.a
+.aa/.a/.// .aa/.a
+.aa/.a//aa .aa/.a/aa
+.aa/.a//a. .aa/.a/a.
+.aa/.a//a/ .aa/.a/a
+.aa/.a//.a .aa/.a/.a
+.aa/.a//.. .aa
+.aa/.a//./ .aa/.a
+.aa/.a///a .aa/.a/a
+.aa/.a///. .aa/.a
+.aa/.a//// .aa/.a
+.aa/..aaaa .aa/..aaaa
+.aa/..aaa. .aa/..aaa.
+.aa/..aaa/ .aa/..aaa
+.aa/..aa.a .aa/..aa.a
+.aa/..aa.. .aa/..aa..
+.aa/..aa./ .aa/..aa.
+.aa/..aa/a .aa/..aa/a
+.aa/..aa/. .aa/..aa
+.aa/..aa// .aa/..aa
+.aa/..a.aa .aa/..a.aa
+.aa/..a.a. .aa/..a.a.
+.aa/..a.a/ .aa/..a.a
+.aa/..a..a .aa/..a..a
+.aa/..a... .aa/..a...
+.aa/..a../ .aa/..a..
+.aa/..a./a .aa/..a./a
+.aa/..a./. .aa/..a.
+.aa/..a.// .aa/..a.
+.aa/..a/aa .aa/..a/aa
+.aa/..a/a. .aa/..a/a.
+.aa/..a/a/ .aa/..a/a
+.aa/..a/.a .aa/..a/.a
+.aa/..a/.. .aa
+.aa/..a/./ .aa/..a
+.aa/..a//a .aa/..a/a
+.aa/..a//. .aa/..a
+.aa/..a/// .aa/..a
+.aa/...aaa .aa/...aaa
+.aa/...aa. .aa/...aa.
+.aa/...aa/ .aa/...aa
+.aa/...a.a .aa/...a.a
+.aa/...a.. .aa/...a..
+.aa/...a./ .aa/...a.
+.aa/...a/a .aa/...a/a
+.aa/...a/. .aa/...a
+.aa/...a// .aa/...a
+.aa/....aa .aa/....aa
+.aa/....a. .aa/....a.
+.aa/....a/ .aa/....a
+.aa/.....a .aa/.....a
+.aa/...... .aa/......
+.aa/...../ .aa/.....
+.aa/..../a .aa/..../a
+.aa/..../. .aa/....
+.aa/....// .aa/....
+.aa/.../aa .aa/.../aa
+.aa/.../a. .aa/.../a.
+.aa/.../a/ .aa/.../a
+.aa/.../.a .aa/.../.a
+.aa/.../.. .aa
+.aa/..././ .aa/...
+.aa/...//a .aa/.../a
+.aa/...//. .aa/...
+.aa/.../// .aa/...
+.aa/../aaa aaa
+.aa/../aa. aa.
+.aa/../aa/ aa
+.aa/../a.a a.a
+.aa/../a.. a..
+.aa/../a./ a.
+.aa/../a/a a/a
+.aa/../a/. a
+.aa/../a// a
+.aa/../.aa .aa
+.aa/../.a. .a.
+.aa/../.a/ .a
+.aa/../..a ..a
+.aa/../... ...
+.aa/../../ ..
+.aa/.././a a
+.aa/.././. .
+.aa/../.// .
+.aa/..//aa aa
+.aa/..//a. a.
+.aa/..//a/ a
+.aa/..//.a .a
+.aa/..//.. ..
+.aa/..//./ .
+.aa/..///a a
+.aa/..///. .
+.aa/..//// .
+.aa/./aaaa .aa/aaaa
+.aa/./aaa. .aa/aaa.
+.aa/./aaa/ .aa/aaa
+.aa/./aa.a .aa/aa.a
+.aa/./aa.. .aa/aa..
+.aa/./aa./ .aa/aa.
+.aa/./aa/a .aa/aa/a
+.aa/./aa/. .aa/aa
+.aa/./aa// .aa/aa
+.aa/./a.aa .aa/a.aa
+.aa/./a.a. .aa/a.a.
+.aa/./a.a/ .aa/a.a
+.aa/./a..a .aa/a..a
+.aa/./a... .aa/a...
+.aa/./a../ .aa/a..
+.aa/./a./a .aa/a./a
+.aa/./a./. .aa/a.
+.aa/./a.// .aa/a.
+.aa/./a/aa .aa/a/aa
+.aa/./a/a. .aa/a/a.
+.aa/./a/a/ .aa/a/a
+.aa/./a/.a .aa/a/.a
+.aa/./a/.. .aa
+.aa/./a/./ .aa/a
+.aa/./a//a .aa/a/a
+.aa/./a//. .aa/a
+.aa/./a/// .aa/a
+.aa/./.aaa .aa/.aaa
+.aa/./.aa. .aa/.aa.
+.aa/./.aa/ .aa/.aa
+.aa/./.a.a .aa/.a.a
+.aa/./.a.. .aa/.a..
+.aa/./.a./ .aa/.a.
+.aa/./.a/a .aa/.a/a
+.aa/./.a/. .aa/.a
+.aa/./.a// .aa/.a
+.aa/./..aa .aa/..aa
+.aa/./..a. .aa/..a.
+.aa/./..a/ .aa/..a
+.aa/./...a .aa/...a
+.aa/./.... .aa/....
+.aa/./.../ .aa/...
+.aa/./../a a
+.aa/./../. .
+.aa/./..// .
+.aa/././aa .aa/aa
+.aa/././a. .aa/a.
+.aa/././a/ .aa/a
+.aa/././.a .aa/.a
+.aa/././.. .
+.aa/./././ .aa
+.aa/././/a .aa/a
+.aa/././/. .aa
+.aa/././// .aa
+.aa/.//aaa .aa/aaa
+.aa/.//aa. .aa/aa.
+.aa/.//aa/ .aa/aa
+.aa/.//a.a .aa/a.a
+.aa/.//a.. .aa/a..
+.aa/.//a./ .aa/a.
+.aa/.//a/a .aa/a/a
+.aa/.//a/. .aa/a
+.aa/.//a// .aa/a
+.aa/.//.aa .aa/.aa
+.aa/.//.a. .aa/.a.
+.aa/.//.a/ .aa/.a
+.aa/.//..a .aa/..a
+.aa/.//... .aa/...
+.aa/.//../ .
+.aa/.//./a .aa/a
+.aa/.//./. .aa
+.aa/.//.// .aa
+.aa/.///aa .aa/aa
+.aa/.///a. .aa/a.
+.aa/.///a/ .aa/a
+.aa/.///.a .aa/.a
+.aa/.///.. .
+.aa/.///./ .aa
+.aa/.////a .aa/a
+.aa/.////. .aa
+.aa/.///// .aa
+.aa//aaaaa .aa/aaaaa
+.aa//aaaa. .aa/aaaa.
+.aa//aaaa/ .aa/aaaa
+.aa//aaa.a .aa/aaa.a
+.aa//aaa.. .aa/aaa..
+.aa//aaa./ .aa/aaa.
+.aa//aaa/a .aa/aaa/a
+.aa//aaa/. .aa/aaa
+.aa//aaa// .aa/aaa
+.aa//aa.aa .aa/aa.aa
+.aa//aa.a. .aa/aa.a.
+.aa//aa.a/ .aa/aa.a
+.aa//aa..a .aa/aa..a
+.aa//aa... .aa/aa...
+.aa//aa../ .aa/aa..
+.aa//aa./a .aa/aa./a
+.aa//aa./. .aa/aa.
+.aa//aa.// .aa/aa.
+.aa//aa/aa .aa/aa/aa
+.aa//aa/a. .aa/aa/a.
+.aa//aa/a/ .aa/aa/a
+.aa//aa/.a .aa/aa/.a
+.aa//aa/.. .aa
+.aa//aa/./ .aa/aa
+.aa//aa//a .aa/aa/a
+.aa//aa//. .aa/aa
+.aa//aa/// .aa/aa
+.aa//a.aaa .aa/a.aaa
+.aa//a.aa. .aa/a.aa.
+.aa//a.aa/ .aa/a.aa
+.aa//a.a.a .aa/a.a.a
+.aa//a.a.. .aa/a.a..
+.aa//a.a./ .aa/a.a.
+.aa//a.a/a .aa/a.a/a
+.aa//a.a/. .aa/a.a
+.aa//a.a// .aa/a.a
+.aa//a..aa .aa/a..aa
+.aa//a..a. .aa/a..a.
+.aa//a..a/ .aa/a..a
+.aa//a...a .aa/a...a
+.aa//a.... .aa/a....
+.aa//a.../ .aa/a...
+.aa//a../a .aa/a../a
+.aa//a../. .aa/a..
+.aa//a..// .aa/a..
+.aa//a./aa .aa/a./aa
+.aa//a./a. .aa/a./a.
+.aa//a./a/ .aa/a./a
+.aa//a./.a .aa/a./.a
+.aa//a./.. .aa
+.aa//a././ .aa/a.
+.aa//a.//a .aa/a./a
+.aa//a.//. .aa/a.
+.aa//a./// .aa/a.
+.aa//a/aaa .aa/a/aaa
+.aa//a/aa. .aa/a/aa.
+.aa//a/aa/ .aa/a/aa
+.aa//a/a.a .aa/a/a.a
+.aa//a/a.. .aa/a/a..
+.aa//a/a./ .aa/a/a.
+.aa//a/a/a .aa/a/a/a
+.aa//a/a/. .aa/a/a
+.aa//a/a// .aa/a/a
+.aa//a/.aa .aa/a/.aa
+.aa//a/.a. .aa/a/.a.
+.aa//a/.a/ .aa/a/.a
+.aa//a/..a .aa/a/..a
+.aa//a/... .aa/a/...
+.aa//a/../ .aa
+.aa//a/./a .aa/a/a
+.aa//a/./. .aa/a
+.aa//a/.// .aa/a
+.aa//a//aa .aa/a/aa
+.aa//a//a. .aa/a/a.
+.aa//a//a/ .aa/a/a
+.aa//a//.a .aa/a/.a
+.aa//a//.. .aa
+.aa//a//./ .aa/a
+.aa//a///a .aa/a/a
+.aa//a///. .aa/a
+.aa//a//// .aa/a
+.aa//.aaaa .aa/.aaaa
+.aa//.aaa. .aa/.aaa.
+.aa//.aaa/ .aa/.aaa
+.aa//.aa.a .aa/.aa.a
+.aa//.aa.. .aa/.aa..
+.aa//.aa./ .aa/.aa.
+.aa//.aa/a .aa/.aa/a
+.aa//.aa/. .aa/.aa
+.aa//.aa// .aa/.aa
+.aa//.a.aa .aa/.a.aa
+.aa//.a.a. .aa/.a.a.
+.aa//.a.a/ .aa/.a.a
+.aa//.a..a .aa/.a..a
+.aa//.a... .aa/.a...
+.aa//.a../ .aa/.a..
+.aa//.a./a .aa/.a./a
+.aa//.a./. .aa/.a.
+.aa//.a.// .aa/.a.
+.aa//.a/aa .aa/.a/aa
+.aa//.a/a. .aa/.a/a.
+.aa//.a/a/ .aa/.a/a
+.aa//.a/.a .aa/.a/.a
+.aa//.a/.. .aa
+.aa//.a/./ .aa/.a
+.aa//.a//a .aa/.a/a
+.aa//.a//. .aa/.a
+.aa//.a/// .aa/.a
+.aa//..aaa .aa/..aaa
+.aa//..aa. .aa/..aa.
+.aa//..aa/ .aa/..aa
+.aa//..a.a .aa/..a.a
+.aa//..a.. .aa/..a..
+.aa//..a./ .aa/..a.
+.aa//..a/a .aa/..a/a
+.aa//..a/. .aa/..a
+.aa//..a// .aa/..a
+.aa//...aa .aa/...aa
+.aa//...a. .aa/...a.
+.aa//...a/ .aa/...a
+.aa//....a .aa/....a
+.aa//..... .aa/.....
+.aa//..../ .aa/....
+.aa//.../a .aa/.../a
+.aa//.../. .aa/...
+.aa//...// .aa/...
+.aa//../aa aa
+.aa//../a. a.
+.aa//../a/ a
+.aa//../.a .a
+.aa//../.. ..
+.aa//.././ .
+.aa//..//a a
+.aa//..//. .
+.aa//../// .
+.aa//./aaa .aa/aaa
+.aa//./aa. .aa/aa.
+.aa//./aa/ .aa/aa
+.aa//./a.a .aa/a.a
+.aa//./a.. .aa/a..
+.aa//./a./ .aa/a.
+.aa//./a/a .aa/a/a
+.aa//./a/. .aa/a
+.aa//./a// .aa/a
+.aa//./.aa .aa/.aa
+.aa//./.a. .aa/.a.
+.aa//./.a/ .aa/.a
+.aa//./..a .aa/..a
+.aa//./... .aa/...
+.aa//./../ .
+.aa//././a .aa/a
+.aa//././. .aa
+.aa//./.// .aa
+.aa//.//aa .aa/aa
+.aa//.//a. .aa/a.
+.aa//.//a/ .aa/a
+.aa//.//.a .aa/.a
+.aa//.//.. .
+.aa//.//./ .aa
+.aa//.///a .aa/a
+.aa//.///. .aa
+.aa//.//// .aa
+.aa///aaaa .aa/aaaa
+.aa///aaa. .aa/aaa.
+.aa///aaa/ .aa/aaa
+.aa///aa.a .aa/aa.a
+.aa///aa.. .aa/aa..
+.aa///aa./ .aa/aa.
+.aa///aa/a .aa/aa/a
+.aa///aa/. .aa/aa
+.aa///aa// .aa/aa
+.aa///a.aa .aa/a.aa
+.aa///a.a. .aa/a.a.
+.aa///a.a/ .aa/a.a
+.aa///a..a .aa/a..a
+.aa///a... .aa/a...
+.aa///a../ .aa/a..
+.aa///a./a .aa/a./a
+.aa///a./. .aa/a.
+.aa///a.// .aa/a.
+.aa///a/aa .aa/a/aa
+.aa///a/a. .aa/a/a.
+.aa///a/a/ .aa/a/a
+.aa///a/.a .aa/a/.a
+.aa///a/.. .aa
+.aa///a/./ .aa/a
+.aa///a//a .aa/a/a
+.aa///a//. .aa/a
+.aa///a/// .aa/a
+.aa///.aaa .aa/.aaa
+.aa///.aa. .aa/.aa.
+.aa///.aa/ .aa/.aa
+.aa///.a.a .aa/.a.a
+.aa///.a.. .aa/.a..
+.aa///.a./ .aa/.a.
+.aa///.a/a .aa/.a/a
+.aa///.a/. .aa/.a
+.aa///.a// .aa/.a
+.aa///..aa .aa/..aa
+.aa///..a. .aa/..a.
+.aa///..a/ .aa/..a
+.aa///...a .aa/...a
+.aa///.... .aa/....
+.aa///.../ .aa/...
+.aa///../a a
+.aa///../. .
+.aa///..// .
+.aa///./aa .aa/aa
+.aa///./a. .aa/a.
+.aa///./a/ .aa/a
+.aa///./.a .aa/.a
+.aa///./.. .
+.aa///././ .aa
+.aa///.//a .aa/a
+.aa///.//. .aa
+.aa///./// .aa
+.aa////aaa .aa/aaa
+.aa////aa. .aa/aa.
+.aa////aa/ .aa/aa
+.aa////a.a .aa/a.a
+.aa////a.. .aa/a..
+.aa////a./ .aa/a.
+.aa////a/a .aa/a/a
+.aa////a/. .aa/a
+.aa////a// .aa/a
+.aa////.aa .aa/.aa
+.aa////.a. .aa/.a.
+.aa////.a/ .aa/.a
+.aa////..a .aa/..a
+.aa////... .aa/...
+.aa////../ .
+.aa////./a .aa/a
+.aa////./. .aa
+.aa////.// .aa
+.aa/////aa .aa/aa
+.aa/////a. .aa/a.
+.aa/////a/ .aa/a
+.aa/////.a .aa/.a
+.aa/////.. .
+.aa/////./ .aa
+.aa//////a .aa/a
+.aa//////. .aa
+.aa/////// .aa
+.a.aaaaaaa .a.aaaaaaa
+.a.aaaaaa. .a.aaaaaa.
+.a.aaaaaa/ .a.aaaaaa
+.a.aaaaa.a .a.aaaaa.a
+.a.aaaaa.. .a.aaaaa..
+.a.aaaaa./ .a.aaaaa.
+.a.aaaaa/a .a.aaaaa/a
+.a.aaaaa/. .a.aaaaa
+.a.aaaaa// .a.aaaaa
+.a.aaaa.aa .a.aaaa.aa
+.a.aaaa.a. .a.aaaa.a.
+.a.aaaa.a/ .a.aaaa.a
+.a.aaaa..a .a.aaaa..a
+.a.aaaa... .a.aaaa...
+.a.aaaa../ .a.aaaa..
+.a.aaaa./a .a.aaaa./a
+.a.aaaa./. .a.aaaa.
+.a.aaaa.// .a.aaaa.
+.a.aaaa/aa .a.aaaa/aa
+.a.aaaa/a. .a.aaaa/a.
+.a.aaaa/a/ .a.aaaa/a
+.a.aaaa/.a .a.aaaa/.a
+.a.aaaa/.. .
+.a.aaaa/./ .a.aaaa
+.a.aaaa//a .a.aaaa/a
+.a.aaaa//. .a.aaaa
+.a.aaaa/// .a.aaaa
+.a.aaa.aaa .a.aaa.aaa
+.a.aaa.aa. .a.aaa.aa.
+.a.aaa.aa/ .a.aaa.aa
+.a.aaa.a.a .a.aaa.a.a
+.a.aaa.a.. .a.aaa.a..
+.a.aaa.a./ .a.aaa.a.
+.a.aaa.a/a .a.aaa.a/a
+.a.aaa.a/. .a.aaa.a
+.a.aaa.a// .a.aaa.a
+.a.aaa..aa .a.aaa..aa
+.a.aaa..a. .a.aaa..a.
+.a.aaa..a/ .a.aaa..a
+.a.aaa...a .a.aaa...a
+.a.aaa.... .a.aaa....
+.a.aaa.../ .a.aaa...
+.a.aaa../a .a.aaa../a
+.a.aaa../. .a.aaa..
+.a.aaa..// .a.aaa..
+.a.aaa./aa .a.aaa./aa
+.a.aaa./a. .a.aaa./a.
+.a.aaa./a/ .a.aaa./a
+.a.aaa./.a .a.aaa./.a
+.a.aaa./.. .
+.a.aaa././ .a.aaa.
+.a.aaa.//a .a.aaa./a
+.a.aaa.//. .a.aaa.
+.a.aaa./// .a.aaa.
+.a.aaa/aaa .a.aaa/aaa
+.a.aaa/aa. .a.aaa/aa.
+.a.aaa/aa/ .a.aaa/aa
+.a.aaa/a.a .a.aaa/a.a
+.a.aaa/a.. .a.aaa/a..
+.a.aaa/a./ .a.aaa/a.
+.a.aaa/a/a .a.aaa/a/a
+.a.aaa/a/. .a.aaa/a
+.a.aaa/a// .a.aaa/a
+.a.aaa/.aa .a.aaa/.aa
+.a.aaa/.a. .a.aaa/.a.
+.a.aaa/.a/ .a.aaa/.a
+.a.aaa/..a .a.aaa/..a
+.a.aaa/... .a.aaa/...
+.a.aaa/../ .
+.a.aaa/./a .a.aaa/a
+.a.aaa/./. .a.aaa
+.a.aaa/.// .a.aaa
+.a.aaa//aa .a.aaa/aa
+.a.aaa//a. .a.aaa/a.
+.a.aaa//a/ .a.aaa/a
+.a.aaa//.a .a.aaa/.a
+.a.aaa//.. .
+.a.aaa//./ .a.aaa
+.a.aaa///a .a.aaa/a
+.a.aaa///. .a.aaa
+.a.aaa//// .a.aaa
+.a.aa.aaaa .a.aa.aaaa
+.a.aa.aaa. .a.aa.aaa.
+.a.aa.aaa/ .a.aa.aaa
+.a.aa.aa.a .a.aa.aa.a
+.a.aa.aa.. .a.aa.aa..
+.a.aa.aa./ .a.aa.aa.
+.a.aa.aa/a .a.aa.aa/a
+.a.aa.aa/. .a.aa.aa
+.a.aa.aa// .a.aa.aa
+.a.aa.a.aa .a.aa.a.aa
+.a.aa.a.a. .a.aa.a.a.
+.a.aa.a.a/ .a.aa.a.a
+.a.aa.a..a .a.aa.a..a
+.a.aa.a... .a.aa.a...
+.a.aa.a../ .a.aa.a..
+.a.aa.a./a .a.aa.a./a
+.a.aa.a./. .a.aa.a.
+.a.aa.a.// .a.aa.a.
+.a.aa.a/aa .a.aa.a/aa
+.a.aa.a/a. .a.aa.a/a.
+.a.aa.a/a/ .a.aa.a/a
+.a.aa.a/.a .a.aa.a/.a
+.a.aa.a/.. .
+.a.aa.a/./ .a.aa.a
+.a.aa.a//a .a.aa.a/a
+.a.aa.a//. .a.aa.a
+.a.aa.a/// .a.aa.a
+.a.aa..aaa .a.aa..aaa
+.a.aa..aa. .a.aa..aa.
+.a.aa..aa/ .a.aa..aa
+.a.aa..a.a .a.aa..a.a
+.a.aa..a.. .a.aa..a..
+.a.aa..a./ .a.aa..a.
+.a.aa..a/a .a.aa..a/a
+.a.aa..a/. .a.aa..a
+.a.aa..a// .a.aa..a
+.a.aa...aa .a.aa...aa
+.a.aa...a. .a.aa...a.
+.a.aa...a/ .a.aa...a
+.a.aa....a .a.aa....a
+.a.aa..... .a.aa.....
+.a.aa..../ .a.aa....
+.a.aa.../a .a.aa.../a
+.a.aa.../. .a.aa...
+.a.aa...// .a.aa...
+.a.aa../aa .a.aa../aa
+.a.aa../a. .a.aa../a.
+.a.aa../a/ .a.aa../a
+.a.aa../.a .a.aa../.a
+.a.aa../.. .
+.a.aa.././ .a.aa..
+.a.aa..//a .a.aa../a
+.a.aa..//. .a.aa..
+.a.aa../// .a.aa..
+.a.aa./aaa .a.aa./aaa
+.a.aa./aa. .a.aa./aa.
+.a.aa./aa/ .a.aa./aa
+.a.aa./a.a .a.aa./a.a
+.a.aa./a.. .a.aa./a..
+.a.aa./a./ .a.aa./a.
+.a.aa./a/a .a.aa./a/a
+.a.aa./a/. .a.aa./a
+.a.aa./a// .a.aa./a
+.a.aa./.aa .a.aa./.aa
+.a.aa./.a. .a.aa./.a.
+.a.aa./.a/ .a.aa./.a
+.a.aa./..a .a.aa./..a
+.a.aa./... .a.aa./...
+.a.aa./../ .
+.a.aa././a .a.aa./a
+.a.aa././. .a.aa.
+.a.aa./.// .a.aa.
+.a.aa.//aa .a.aa./aa
+.a.aa.//a. .a.aa./a.
+.a.aa.//a/ .a.aa./a
+.a.aa.//.a .a.aa./.a
+.a.aa.//.. .
+.a.aa.//./ .a.aa.
+.a.aa.///a .a.aa./a
+.a.aa.///. .a.aa.
+.a.aa.//// .a.aa.
+.a.aa/aaaa .a.aa/aaaa
+.a.aa/aaa. .a.aa/aaa.
+.a.aa/aaa/ .a.aa/aaa
+.a.aa/aa.a .a.aa/aa.a
+.a.aa/aa.. .a.aa/aa..
+.a.aa/aa./ .a.aa/aa.
+.a.aa/aa/a .a.aa/aa/a
+.a.aa/aa/. .a.aa/aa
+.a.aa/aa// .a.aa/aa
+.a.aa/a.aa .a.aa/a.aa
+.a.aa/a.a. .a.aa/a.a.
+.a.aa/a.a/ .a.aa/a.a
+.a.aa/a..a .a.aa/a..a
+.a.aa/a... .a.aa/a...
+.a.aa/a../ .a.aa/a..
+.a.aa/a./a .a.aa/a./a
+.a.aa/a./. .a.aa/a.
+.a.aa/a.// .a.aa/a.
+.a.aa/a/aa .a.aa/a/aa
+.a.aa/a/a. .a.aa/a/a.
+.a.aa/a/a/ .a.aa/a/a
+.a.aa/a/.a .a.aa/a/.a
+.a.aa/a/.. .a.aa
+.a.aa/a/./ .a.aa/a
+.a.aa/a//a .a.aa/a/a
+.a.aa/a//. .a.aa/a
+.a.aa/a/// .a.aa/a
+.a.aa/.aaa .a.aa/.aaa
+.a.aa/.aa. .a.aa/.aa.
+.a.aa/.aa/ .a.aa/.aa
+.a.aa/.a.a .a.aa/.a.a
+.a.aa/.a.. .a.aa/.a..
+.a.aa/.a./ .a.aa/.a.
+.a.aa/.a/a .a.aa/.a/a
+.a.aa/.a/. .a.aa/.a
+.a.aa/.a// .a.aa/.a
+.a.aa/..aa .a.aa/..aa
+.a.aa/..a. .a.aa/..a.
+.a.aa/..a/ .a.aa/..a
+.a.aa/...a .a.aa/...a
+.a.aa/.... .a.aa/....
+.a.aa/.../ .a.aa/...
+.a.aa/../a a
+.a.aa/../. .
+.a.aa/..// .
+.a.aa/./aa .a.aa/aa
+.a.aa/./a. .a.aa/a.
+.a.aa/./a/ .a.aa/a
+.a.aa/./.a .a.aa/.a
+.a.aa/./.. .
+.a.aa/././ .a.aa
+.a.aa/.//a .a.aa/a
+.a.aa/.//. .a.aa
+.a.aa/./// .a.aa
+.a.aa//aaa .a.aa/aaa
+.a.aa//aa. .a.aa/aa.
+.a.aa//aa/ .a.aa/aa
+.a.aa//a.a .a.aa/a.a
+.a.aa//a.. .a.aa/a..
+.a.aa//a./ .a.aa/a.
+.a.aa//a/a .a.aa/a/a
+.a.aa//a/. .a.aa/a
+.a.aa//a// .a.aa/a
+.a.aa//.aa .a.aa/.aa
+.a.aa//.a. .a.aa/.a.
+.a.aa//.a/ .a.aa/.a
+.a.aa//..a .a.aa/..a
+.a.aa//... .a.aa/...
+.a.aa//../ .
+.a.aa//./a .a.aa/a
+.a.aa//./. .a.aa
+.a.aa//.// .a.aa
+.a.aa///aa .a.aa/aa
+.a.aa///a. .a.aa/a.
+.a.aa///a/ .a.aa/a
+.a.aa///.a .a.aa/.a
+.a.aa///.. .
+.a.aa///./ .a.aa
+.a.aa////a .a.aa/a
+.a.aa////. .a.aa
+.a.aa///// .a.aa
+.a.a.aaaaa .a.a.aaaaa
+.a.a.aaaa. .a.a.aaaa.
+.a.a.aaaa/ .a.a.aaaa
+.a.a.aaa.a .a.a.aaa.a
+.a.a.aaa.. .a.a.aaa..
+.a.a.aaa./ .a.a.aaa.
+.a.a.aaa/a .a.a.aaa/a
+.a.a.aaa/. .a.a.aaa
+.a.a.aaa// .a.a.aaa
+.a.a.aa.aa .a.a.aa.aa
+.a.a.aa.a. .a.a.aa.a.
+.a.a.aa.a/ .a.a.aa.a
+.a.a.aa..a .a.a.aa..a
+.a.a.aa... .a.a.aa...
+.a.a.aa../ .a.a.aa..
+.a.a.aa./a .a.a.aa./a
+.a.a.aa./. .a.a.aa.
+.a.a.aa.// .a.a.aa.
+.a.a.aa/aa .a.a.aa/aa
+.a.a.aa/a. .a.a.aa/a.
+.a.a.aa/a/ .a.a.aa/a
+.a.a.aa/.a .a.a.aa/.a
+.a.a.aa/.. .
+.a.a.aa/./ .a.a.aa
+.a.a.aa//a .a.a.aa/a
+.a.a.aa//. .a.a.aa
+.a.a.aa/// .a.a.aa
+.a.a.a.aaa .a.a.a.aaa
+.a.a.a.aa. .a.a.a.aa.
+.a.a.a.aa/ .a.a.a.aa
+.a.a.a.a.a .a.a.a.a.a
+.a.a.a.a.. .a.a.a.a..
+.a.a.a.a./ .a.a.a.a.
+.a.a.a.a/a .a.a.a.a/a
+.a.a.a.a/. .a.a.a.a
+.a.a.a.a// .a.a.a.a
+.a.a.a..aa .a.a.a..aa
+.a.a.a..a. .a.a.a..a.
+.a.a.a..a/ .a.a.a..a
+.a.a.a...a .a.a.a...a
+.a.a.a.... .a.a.a....
+.a.a.a.../ .a.a.a...
+.a.a.a../a .a.a.a../a
+.a.a.a../. .a.a.a..
+.a.a.a..// .a.a.a..
+.a.a.a./aa .a.a.a./aa
+.a.a.a./a. .a.a.a./a.
+.a.a.a./a/ .a.a.a./a
+.a.a.a./.a .a.a.a./.a
+.a.a.a./.. .
+.a.a.a././ .a.a.a.
+.a.a.a.//a .a.a.a./a
+.a.a.a.//. .a.a.a.
+.a.a.a./// .a.a.a.
+.a.a.a/aaa .a.a.a/aaa
+.a.a.a/aa. .a.a.a/aa.
+.a.a.a/aa/ .a.a.a/aa
+.a.a.a/a.a .a.a.a/a.a
+.a.a.a/a.. .a.a.a/a..
+.a.a.a/a./ .a.a.a/a.
+.a.a.a/a/a .a.a.a/a/a
+.a.a.a/a/. .a.a.a/a
+.a.a.a/a// .a.a.a/a
+.a.a.a/.aa .a.a.a/.aa
+.a.a.a/.a. .a.a.a/.a.
+.a.a.a/.a/ .a.a.a/.a
+.a.a.a/..a .a.a.a/..a
+.a.a.a/... .a.a.a/...
+.a.a.a/../ .
+.a.a.a/./a .a.a.a/a
+.a.a.a/./. .a.a.a
+.a.a.a/.// .a.a.a
+.a.a.a//aa .a.a.a/aa
+.a.a.a//a. .a.a.a/a.
+.a.a.a//a/ .a.a.a/a
+.a.a.a//.a .a.a.a/.a
+.a.a.a//.. .
+.a.a.a//./ .a.a.a
+.a.a.a///a .a.a.a/a
+.a.a.a///. .a.a.a
+.a.a.a//// .a.a.a
+.a.a..aaaa .a.a..aaaa
+.a.a..aaa. .a.a..aaa.
+.a.a..aaa/ .a.a..aaa
+.a.a..aa.a .a.a..aa.a
+.a.a..aa.. .a.a..aa..
+.a.a..aa./ .a.a..aa.
+.a.a..aa/a .a.a..aa/a
+.a.a..aa/. .a.a..aa
+.a.a..aa// .a.a..aa
+.a.a..a.aa .a.a..a.aa
+.a.a..a.a. .a.a..a.a.
+.a.a..a.a/ .a.a..a.a
+.a.a..a..a .a.a..a..a
+.a.a..a... .a.a..a...
+.a.a..a../ .a.a..a..
+.a.a..a./a .a.a..a./a
+.a.a..a./. .a.a..a.
+.a.a..a.// .a.a..a.
+.a.a..a/aa .a.a..a/aa
+.a.a..a/a. .a.a..a/a.
+.a.a..a/a/ .a.a..a/a
+.a.a..a/.a .a.a..a/.a
+.a.a..a/.. .
+.a.a..a/./ .a.a..a
+.a.a..a//a .a.a..a/a
+.a.a..a//. .a.a..a
+.a.a..a/// .a.a..a
+.a.a...aaa .a.a...aaa
+.a.a...aa. .a.a...aa.
+.a.a...aa/ .a.a...aa
+.a.a...a.a .a.a...a.a
+.a.a...a.. .a.a...a..
+.a.a...a./ .a.a...a.
+.a.a...a/a .a.a...a/a
+.a.a...a/. .a.a...a
+.a.a...a// .a.a...a
+.a.a....aa .a.a....aa
+.a.a....a. .a.a....a.
+.a.a....a/ .a.a....a
+.a.a.....a .a.a.....a
+.a.a...... .a.a......
+.a.a...../ .a.a.....
+.a.a..../a .a.a..../a
+.a.a..../. .a.a....
+.a.a....// .a.a....
+.a.a.../aa .a.a.../aa
+.a.a.../a. .a.a.../a.
+.a.a.../a/ .a.a.../a
+.a.a.../.a .a.a.../.a
+.a.a.../.. .
+.a.a..././ .a.a...
+.a.a...//a .a.a.../a
+.a.a...//. .a.a...
+.a.a.../// .a.a...
+.a.a../aaa .a.a../aaa
+.a.a../aa. .a.a../aa.
+.a.a../aa/ .a.a../aa
+.a.a../a.a .a.a../a.a
+.a.a../a.. .a.a../a..
+.a.a../a./ .a.a../a.
+.a.a../a/a .a.a../a/a
+.a.a../a/. .a.a../a
+.a.a../a// .a.a../a
+.a.a../.aa .a.a../.aa
+.a.a../.a. .a.a../.a.
+.a.a../.a/ .a.a../.a
+.a.a../..a .a.a../..a
+.a.a../... .a.a../...
+.a.a../../ .
+.a.a.././a .a.a../a
+.a.a.././. .a.a..
+.a.a../.// .a.a..
+.a.a..//aa .a.a../aa
+.a.a..//a. .a.a../a.
+.a.a..//a/ .a.a../a
+.a.a..//.a .a.a../.a
+.a.a..//.. .
+.a.a..//./ .a.a..
+.a.a..///a .a.a../a
+.a.a..///. .a.a..
+.a.a..//// .a.a..
+.a.a./aaaa .a.a./aaaa
+.a.a./aaa. .a.a./aaa.
+.a.a./aaa/ .a.a./aaa
+.a.a./aa.a .a.a./aa.a
+.a.a./aa.. .a.a./aa..
+.a.a./aa./ .a.a./aa.
+.a.a./aa/a .a.a./aa/a
+.a.a./aa/. .a.a./aa
+.a.a./aa// .a.a./aa
+.a.a./a.aa .a.a./a.aa
+.a.a./a.a. .a.a./a.a.
+.a.a./a.a/ .a.a./a.a
+.a.a./a..a .a.a./a..a
+.a.a./a... .a.a./a...
+.a.a./a../ .a.a./a..
+.a.a./a./a .a.a./a./a
+.a.a./a./. .a.a./a.
+.a.a./a.// .a.a./a.
+.a.a./a/aa .a.a./a/aa
+.a.a./a/a. .a.a./a/a.
+.a.a./a/a/ .a.a./a/a
+.a.a./a/.a .a.a./a/.a
+.a.a./a/.. .a.a.
+.a.a./a/./ .a.a./a
+.a.a./a//a .a.a./a/a
+.a.a./a//. .a.a./a
+.a.a./a/// .a.a./a
+.a.a./.aaa .a.a./.aaa
+.a.a./.aa. .a.a./.aa.
+.a.a./.aa/ .a.a./.aa
+.a.a./.a.a .a.a./.a.a
+.a.a./.a.. .a.a./.a..
+.a.a./.a./ .a.a./.a.
+.a.a./.a/a .a.a./.a/a
+.a.a./.a/. .a.a./.a
+.a.a./.a// .a.a./.a
+.a.a./..aa .a.a./..aa
+.a.a./..a. .a.a./..a.
+.a.a./..a/ .a.a./..a
+.a.a./...a .a.a./...a
+.a.a./.... .a.a./....
+.a.a./.../ .a.a./...
+.a.a./../a a
+.a.a./../. .
+.a.a./..// .
+.a.a././aa .a.a./aa
+.a.a././a. .a.a./a.
+.a.a././a/ .a.a./a
+.a.a././.a .a.a./.a
+.a.a././.. .
+.a.a./././ .a.a.
+.a.a././/a .a.a./a
+.a.a././/. .a.a.
+.a.a././// .a.a.
+.a.a.//aaa .a.a./aaa
+.a.a.//aa. .a.a./aa.
+.a.a.//aa/ .a.a./aa
+.a.a.//a.a .a.a./a.a
+.a.a.//a.. .a.a./a..
+.a.a.//a./ .a.a./a.
+.a.a.//a/a .a.a./a/a
+.a.a.//a/. .a.a./a
+.a.a.//a// .a.a./a
+.a.a.//.aa .a.a./.aa
+.a.a.//.a. .a.a./.a.
+.a.a.//.a/ .a.a./.a
+.a.a.//..a .a.a./..a
+.a.a.//... .a.a./...
+.a.a.//../ .
+.a.a.//./a .a.a./a
+.a.a.//./. .a.a.
+.a.a.//.// .a.a.
+.a.a.///aa .a.a./aa
+.a.a.///a. .a.a./a.
+.a.a.///a/ .a.a./a
+.a.a.///.a .a.a./.a
+.a.a.///.. .
+.a.a.///./ .a.a.
+.a.a.////a .a.a./a
+.a.a.////. .a.a.
+.a.a.///// .a.a.
+.a.a/aaaaa .a.a/aaaaa
+.a.a/aaaa. .a.a/aaaa.
+.a.a/aaaa/ .a.a/aaaa
+.a.a/aaa.a .a.a/aaa.a
+.a.a/aaa.. .a.a/aaa..
+.a.a/aaa./ .a.a/aaa.
+.a.a/aaa/a .a.a/aaa/a
+.a.a/aaa/. .a.a/aaa
+.a.a/aaa// .a.a/aaa
+.a.a/aa.aa .a.a/aa.aa
+.a.a/aa.a. .a.a/aa.a.
+.a.a/aa.a/ .a.a/aa.a
+.a.a/aa..a .a.a/aa..a
+.a.a/aa... .a.a/aa...
+.a.a/aa../ .a.a/aa..
+.a.a/aa./a .a.a/aa./a
+.a.a/aa./. .a.a/aa.
+.a.a/aa.// .a.a/aa.
+.a.a/aa/aa .a.a/aa/aa
+.a.a/aa/a. .a.a/aa/a.
+.a.a/aa/a/ .a.a/aa/a
+.a.a/aa/.a .a.a/aa/.a
+.a.a/aa/.. .a.a
+.a.a/aa/./ .a.a/aa
+.a.a/aa//a .a.a/aa/a
+.a.a/aa//. .a.a/aa
+.a.a/aa/// .a.a/aa
+.a.a/a.aaa .a.a/a.aaa
+.a.a/a.aa. .a.a/a.aa.
+.a.a/a.aa/ .a.a/a.aa
+.a.a/a.a.a .a.a/a.a.a
+.a.a/a.a.. .a.a/a.a..
+.a.a/a.a./ .a.a/a.a.
+.a.a/a.a/a .a.a/a.a/a
+.a.a/a.a/. .a.a/a.a
+.a.a/a.a// .a.a/a.a
+.a.a/a..aa .a.a/a..aa
+.a.a/a..a. .a.a/a..a.
+.a.a/a..a/ .a.a/a..a
+.a.a/a...a .a.a/a...a
+.a.a/a.... .a.a/a....
+.a.a/a.../ .a.a/a...
+.a.a/a../a .a.a/a../a
+.a.a/a../. .a.a/a..
+.a.a/a..// .a.a/a..
+.a.a/a./aa .a.a/a./aa
+.a.a/a./a. .a.a/a./a.
+.a.a/a./a/ .a.a/a./a
+.a.a/a./.a .a.a/a./.a
+.a.a/a./.. .a.a
+.a.a/a././ .a.a/a.
+.a.a/a.//a .a.a/a./a
+.a.a/a.//. .a.a/a.
+.a.a/a./// .a.a/a.
+.a.a/a/aaa .a.a/a/aaa
+.a.a/a/aa. .a.a/a/aa.
+.a.a/a/aa/ .a.a/a/aa
+.a.a/a/a.a .a.a/a/a.a
+.a.a/a/a.. .a.a/a/a..
+.a.a/a/a./ .a.a/a/a.
+.a.a/a/a/a .a.a/a/a/a
+.a.a/a/a/. .a.a/a/a
+.a.a/a/a// .a.a/a/a
+.a.a/a/.aa .a.a/a/.aa
+.a.a/a/.a. .a.a/a/.a.
+.a.a/a/.a/ .a.a/a/.a
+.a.a/a/..a .a.a/a/..a
+.a.a/a/... .a.a/a/...
+.a.a/a/../ .a.a
+.a.a/a/./a .a.a/a/a
+.a.a/a/./. .a.a/a
+.a.a/a/.// .a.a/a
+.a.a/a//aa .a.a/a/aa
+.a.a/a//a. .a.a/a/a.
+.a.a/a//a/ .a.a/a/a
+.a.a/a//.a .a.a/a/.a
+.a.a/a//.. .a.a
+.a.a/a//./ .a.a/a
+.a.a/a///a .a.a/a/a
+.a.a/a///. .a.a/a
+.a.a/a//// .a.a/a
+.a.a/.aaaa .a.a/.aaaa
+.a.a/.aaa. .a.a/.aaa.
+.a.a/.aaa/ .a.a/.aaa
+.a.a/.aa.a .a.a/.aa.a
+.a.a/.aa.. .a.a/.aa..
+.a.a/.aa./ .a.a/.aa.
+.a.a/.aa/a .a.a/.aa/a
+.a.a/.aa/. .a.a/.aa
+.a.a/.aa// .a.a/.aa
+.a.a/.a.aa .a.a/.a.aa
+.a.a/.a.a. .a.a/.a.a.
+.a.a/.a.a/ .a.a/.a.a
+.a.a/.a..a .a.a/.a..a
+.a.a/.a... .a.a/.a...
+.a.a/.a../ .a.a/.a..
+.a.a/.a./a .a.a/.a./a
+.a.a/.a./. .a.a/.a.
+.a.a/.a.// .a.a/.a.
+.a.a/.a/aa .a.a/.a/aa
+.a.a/.a/a. .a.a/.a/a.
+.a.a/.a/a/ .a.a/.a/a
+.a.a/.a/.a .a.a/.a/.a
+.a.a/.a/.. .a.a
+.a.a/.a/./ .a.a/.a
+.a.a/.a//a .a.a/.a/a
+.a.a/.a//. .a.a/.a
+.a.a/.a/// .a.a/.a
+.a.a/..aaa .a.a/..aaa
+.a.a/..aa. .a.a/..aa.
+.a.a/..aa/ .a.a/..aa
+.a.a/..a.a .a.a/..a.a
+.a.a/..a.. .a.a/..a..
+.a.a/..a./ .a.a/..a.
+.a.a/..a/a .a.a/..a/a
+.a.a/..a/. .a.a/..a
+.a.a/..a// .a.a/..a
+.a.a/...aa .a.a/...aa
+.a.a/...a. .a.a/...a.
+.a.a/...a/ .a.a/...a
+.a.a/....a .a.a/....a
+.a.a/..... .a.a/.....
+.a.a/..../ .a.a/....
+.a.a/.../a .a.a/.../a
+.a.a/.../. .a.a/...
+.a.a/...// .a.a/...
+.a.a/../aa aa
+.a.a/../a. a.
+.a.a/../a/ a
+.a.a/../.a .a
+.a.a/../.. ..
+.a.a/.././ .
+.a.a/..//a a
+.a.a/..//. .
+.a.a/../// .
+.a.a/./aaa .a.a/aaa
+.a.a/./aa. .a.a/aa.
+.a.a/./aa/ .a.a/aa
+.a.a/./a.a .a.a/a.a
+.a.a/./a.. .a.a/a..
+.a.a/./a./ .a.a/a.
+.a.a/./a/a .a.a/a/a
+.a.a/./a/. .a.a/a
+.a.a/./a// .a.a/a
+.a.a/./.aa .a.a/.aa
+.a.a/./.a. .a.a/.a.
+.a.a/./.a/ .a.a/.a
+.a.a/./..a .a.a/..a
+.a.a/./... .a.a/...
+.a.a/./../ .
+.a.a/././a .a.a/a
+.a.a/././. .a.a
+.a.a/./.// .a.a
+.a.a/.//aa .a.a/aa
+.a.a/.//a. .a.a/a.
+.a.a/.//a/ .a.a/a
+.a.a/.//.a .a.a/.a
+.a.a/.//.. .
+.a.a/.//./ .a.a
+.a.a/.///a .a.a/a
+.a.a/.///. .a.a
+.a.a/.//// .a.a
+.a.a//aaaa .a.a/aaaa
+.a.a//aaa. .a.a/aaa.
+.a.a//aaa/ .a.a/aaa
+.a.a//aa.a .a.a/aa.a
+.a.a//aa.. .a.a/aa..
+.a.a//aa./ .a.a/aa.
+.a.a//aa/a .a.a/aa/a
+.a.a//aa/. .a.a/aa
+.a.a//aa// .a.a/aa
+.a.a//a.aa .a.a/a.aa
+.a.a//a.a. .a.a/a.a.
+.a.a//a.a/ .a.a/a.a
+.a.a//a..a .a.a/a..a
+.a.a//a... .a.a/a...
+.a.a//a../ .a.a/a..
+.a.a//a./a .a.a/a./a
+.a.a//a./. .a.a/a.
+.a.a//a.// .a.a/a.
+.a.a//a/aa .a.a/a/aa
+.a.a//a/a. .a.a/a/a.
+.a.a//a/a/ .a.a/a/a
+.a.a//a/.a .a.a/a/.a
+.a.a//a/.. .a.a
+.a.a//a/./ .a.a/a
+.a.a//a//a .a.a/a/a
+.a.a//a//. .a.a/a
+.a.a//a/// .a.a/a
+.a.a//.aaa .a.a/.aaa
+.a.a//.aa. .a.a/.aa.
+.a.a//.aa/ .a.a/.aa
+.a.a//.a.a .a.a/.a.a
+.a.a//.a.. .a.a/.a..
+.a.a//.a./ .a.a/.a.
+.a.a//.a/a .a.a/.a/a
+.a.a//.a/. .a.a/.a
+.a.a//.a// .a.a/.a
+.a.a//..aa .a.a/..aa
+.a.a//..a. .a.a/..a.
+.a.a//..a/ .a.a/..a
+.a.a//...a .a.a/...a
+.a.a//.... .a.a/....
+.a.a//.../ .a.a/...
+.a.a//../a a
+.a.a//../. .
+.a.a//..// .
+.a.a//./aa .a.a/aa
+.a.a//./a. .a.a/a.
+.a.a//./a/ .a.a/a
+.a.a//./.a .a.a/.a
+.a.a//./.. .
+.a.a//././ .a.a
+.a.a//.//a .a.a/a
+.a.a//.//. .a.a
+.a.a//./// .a.a
+.a.a///aaa .a.a/aaa
+.a.a///aa. .a.a/aa.
+.a.a///aa/ .a.a/aa
+.a.a///a.a .a.a/a.a
+.a.a///a.. .a.a/a..
+.a.a///a./ .a.a/a.
+.a.a///a/a .a.a/a/a
+.a.a///a/. .a.a/a
+.a.a///a// .a.a/a
+.a.a///.aa .a.a/.aa
+.a.a///.a. .a.a/.a.
+.a.a///.a/ .a.a/.a
+.a.a///..a .a.a/..a
+.a.a///... .a.a/...
+.a.a///../ .
+.a.a///./a .a.a/a
+.a.a///./. .a.a
+.a.a///.// .a.a
+.a.a////aa .a.a/aa
+.a.a////a. .a.a/a.
+.a.a////a/ .a.a/a
+.a.a////.a .a.a/.a
+.a.a////.. .
+.a.a////./ .a.a
+.a.a/////a .a.a/a
+.a.a/////. .a.a
+.a.a////// .a.a
+.a..aaaaaa .a..aaaaaa
+.a..aaaaa. .a..aaaaa.
+.a..aaaaa/ .a..aaaaa
+.a..aaaa.a .a..aaaa.a
+.a..aaaa.. .a..aaaa..
+.a..aaaa./ .a..aaaa.
+.a..aaaa/a .a..aaaa/a
+.a..aaaa/. .a..aaaa
+.a..aaaa// .a..aaaa
+.a..aaa.aa .a..aaa.aa
+.a..aaa.a. .a..aaa.a.
+.a..aaa.a/ .a..aaa.a
+.a..aaa..a .a..aaa..a
+.a..aaa... .a..aaa...
+.a..aaa../ .a..aaa..
+.a..aaa./a .a..aaa./a
+.a..aaa./. .a..aaa.
+.a..aaa.// .a..aaa.
+.a..aaa/aa .a..aaa/aa
+.a..aaa/a. .a..aaa/a.
+.a..aaa/a/ .a..aaa/a
+.a..aaa/.a .a..aaa/.a
+.a..aaa/.. .
+.a..aaa/./ .a..aaa
+.a..aaa//a .a..aaa/a
+.a..aaa//. .a..aaa
+.a..aaa/// .a..aaa
+.a..aa.aaa .a..aa.aaa
+.a..aa.aa. .a..aa.aa.
+.a..aa.aa/ .a..aa.aa
+.a..aa.a.a .a..aa.a.a
+.a..aa.a.. .a..aa.a..
+.a..aa.a./ .a..aa.a.
+.a..aa.a/a .a..aa.a/a
+.a..aa.a/. .a..aa.a
+.a..aa.a// .a..aa.a
+.a..aa..aa .a..aa..aa
+.a..aa..a. .a..aa..a.
+.a..aa..a/ .a..aa..a
+.a..aa...a .a..aa...a
+.a..aa.... .a..aa....
+.a..aa.../ .a..aa...
+.a..aa../a .a..aa../a
+.a..aa../. .a..aa..
+.a..aa..// .a..aa..
+.a..aa./aa .a..aa./aa
+.a..aa./a. .a..aa./a.
+.a..aa./a/ .a..aa./a
+.a..aa./.a .a..aa./.a
+.a..aa./.. .
+.a..aa././ .a..aa.
+.a..aa.//a .a..aa./a
+.a..aa.//. .a..aa.
+.a..aa./// .a..aa.
+.a..aa/aaa .a..aa/aaa
+.a..aa/aa. .a..aa/aa.
+.a..aa/aa/ .a..aa/aa
+.a..aa/a.a .a..aa/a.a
+.a..aa/a.. .a..aa/a..
+.a..aa/a./ .a..aa/a.
+.a..aa/a/a .a..aa/a/a
+.a..aa/a/. .a..aa/a
+.a..aa/a// .a..aa/a
+.a..aa/.aa .a..aa/.aa
+.a..aa/.a. .a..aa/.a.
+.a..aa/.a/ .a..aa/.a
+.a..aa/..a .a..aa/..a
+.a..aa/... .a..aa/...
+.a..aa/../ .
+.a..aa/./a .a..aa/a
+.a..aa/./. .a..aa
+.a..aa/.// .a..aa
+.a..aa//aa .a..aa/aa
+.a..aa//a. .a..aa/a.
+.a..aa//a/ .a..aa/a
+.a..aa//.a .a..aa/.a
+.a..aa//.. .
+.a..aa//./ .a..aa
+.a..aa///a .a..aa/a
+.a..aa///. .a..aa
+.a..aa//// .a..aa
+.a..a.aaaa .a..a.aaaa
+.a..a.aaa. .a..a.aaa.
+.a..a.aaa/ .a..a.aaa
+.a..a.aa.a .a..a.aa.a
+.a..a.aa.. .a..a.aa..
+.a..a.aa./ .a..a.aa.
+.a..a.aa/a .a..a.aa/a
+.a..a.aa/. .a..a.aa
+.a..a.aa// .a..a.aa
+.a..a.a.aa .a..a.a.aa
+.a..a.a.a. .a..a.a.a.
+.a..a.a.a/ .a..a.a.a
+.a..a.a..a .a..a.a..a
+.a..a.a... .a..a.a...
+.a..a.a../ .a..a.a..
+.a..a.a./a .a..a.a./a
+.a..a.a./. .a..a.a.
+.a..a.a.// .a..a.a.
+.a..a.a/aa .a..a.a/aa
+.a..a.a/a. .a..a.a/a.
+.a..a.a/a/ .a..a.a/a
+.a..a.a/.a .a..a.a/.a
+.a..a.a/.. .
+.a..a.a/./ .a..a.a
+.a..a.a//a .a..a.a/a
+.a..a.a//. .a..a.a
+.a..a.a/// .a..a.a
+.a..a..aaa .a..a..aaa
+.a..a..aa. .a..a..aa.
+.a..a..aa/ .a..a..aa
+.a..a..a.a .a..a..a.a
+.a..a..a.. .a..a..a..
+.a..a..a./ .a..a..a.
+.a..a..a/a .a..a..a/a
+.a..a..a/. .a..a..a
+.a..a..a// .a..a..a
+.a..a...aa .a..a...aa
+.a..a...a. .a..a...a.
+.a..a...a/ .a..a...a
+.a..a....a .a..a....a
+.a..a..... .a..a.....
+.a..a..../ .a..a....
+.a..a.../a .a..a.../a
+.a..a.../. .a..a...
+.a..a...// .a..a...
+.a..a../aa .a..a../aa
+.a..a../a. .a..a../a.
+.a..a../a/ .a..a../a
+.a..a../.a .a..a../.a
+.a..a../.. .
+.a..a.././ .a..a..
+.a..a..//a .a..a../a
+.a..a..//. .a..a..
+.a..a../// .a..a..
+.a..a./aaa .a..a./aaa
+.a..a./aa. .a..a./aa.
+.a..a./aa/ .a..a./aa
+.a..a./a.a .a..a./a.a
+.a..a./a.. .a..a./a..
+.a..a./a./ .a..a./a.
+.a..a./a/a .a..a./a/a
+.a..a./a/. .a..a./a
+.a..a./a// .a..a./a
+.a..a./.aa .a..a./.aa
+.a..a./.a. .a..a./.a.
+.a..a./.a/ .a..a./.a
+.a..a./..a .a..a./..a
+.a..a./... .a..a./...
+.a..a./../ .
+.a..a././a .a..a./a
+.a..a././. .a..a.
+.a..a./.// .a..a.
+.a..a.//aa .a..a./aa
+.a..a.//a. .a..a./a.
+.a..a.//a/ .a..a./a
+.a..a.//.a .a..a./.a
+.a..a.//.. .
+.a..a.//./ .a..a.
+.a..a.///a .a..a./a
+.a..a.///. .a..a.
+.a..a.//// .a..a.
+.a..a/aaaa .a..a/aaaa
+.a..a/aaa. .a..a/aaa.
+.a..a/aaa/ .a..a/aaa
+.a..a/aa.a .a..a/aa.a
+.a..a/aa.. .a..a/aa..
+.a..a/aa./ .a..a/aa.
+.a..a/aa/a .a..a/aa/a
+.a..a/aa/. .a..a/aa
+.a..a/aa// .a..a/aa
+.a..a/a.aa .a..a/a.aa
+.a..a/a.a. .a..a/a.a.
+.a..a/a.a/ .a..a/a.a
+.a..a/a..a .a..a/a..a
+.a..a/a... .a..a/a...
+.a..a/a../ .a..a/a..
+.a..a/a./a .a..a/a./a
+.a..a/a./. .a..a/a.
+.a..a/a.// .a..a/a.
+.a..a/a/aa .a..a/a/aa
+.a..a/a/a. .a..a/a/a.
+.a..a/a/a/ .a..a/a/a
+.a..a/a/.a .a..a/a/.a
+.a..a/a/.. .a..a
+.a..a/a/./ .a..a/a
+.a..a/a//a .a..a/a/a
+.a..a/a//. .a..a/a
+.a..a/a/// .a..a/a
+.a..a/.aaa .a..a/.aaa
+.a..a/.aa. .a..a/.aa.
+.a..a/.aa/ .a..a/.aa
+.a..a/.a.a .a..a/.a.a
+.a..a/.a.. .a..a/.a..
+.a..a/.a./ .a..a/.a.
+.a..a/.a/a .a..a/.a/a
+.a..a/.a/. .a..a/.a
+.a..a/.a// .a..a/.a
+.a..a/..aa .a..a/..aa
+.a..a/..a. .a..a/..a.
+.a..a/..a/ .a..a/..a
+.a..a/...a .a..a/...a
+.a..a/.... .a..a/....
+.a..a/.../ .a..a/...
+.a..a/../a a
+.a..a/../. .
+.a..a/..// .
+.a..a/./aa .a..a/aa
+.a..a/./a. .a..a/a.
+.a..a/./a/ .a..a/a
+.a..a/./.a .a..a/.a
+.a..a/./.. .
+.a..a/././ .a..a
+.a..a/.//a .a..a/a
+.a..a/.//. .a..a
+.a..a/./// .a..a
+.a..a//aaa .a..a/aaa
+.a..a//aa. .a..a/aa.
+.a..a//aa/ .a..a/aa
+.a..a//a.a .a..a/a.a
+.a..a//a.. .a..a/a..
+.a..a//a./ .a..a/a.
+.a..a//a/a .a..a/a/a
+.a..a//a/. .a..a/a
+.a..a//a// .a..a/a
+.a..a//.aa .a..a/.aa
+.a..a//.a. .a..a/.a.
+.a..a//.a/ .a..a/.a
+.a..a//..a .a..a/..a
+.a..a//... .a..a/...
+.a..a//../ .
+.a..a//./a .a..a/a
+.a..a//./. .a..a
+.a..a//.// .a..a
+.a..a///aa .a..a/aa
+.a..a///a. .a..a/a.
+.a..a///a/ .a..a/a
+.a..a///.a .a..a/.a
+.a..a///.. .
+.a..a///./ .a..a
+.a..a////a .a..a/a
+.a..a////. .a..a
+.a..a///// .a..a
+.a...aaaaa .a...aaaaa
+.a...aaaa. .a...aaaa.
+.a...aaaa/ .a...aaaa
+.a...aaa.a .a...aaa.a
+.a...aaa.. .a...aaa..
+.a...aaa./ .a...aaa.
+.a...aaa/a .a...aaa/a
+.a...aaa/. .a...aaa
+.a...aaa// .a...aaa
+.a...aa.aa .a...aa.aa
+.a...aa.a. .a...aa.a.
+.a...aa.a/ .a...aa.a
+.a...aa..a .a...aa..a
+.a...aa... .a...aa...
+.a...aa../ .a...aa..
+.a...aa./a .a...aa./a
+.a...aa./. .a...aa.
+.a...aa.// .a...aa.
+.a...aa/aa .a...aa/aa
+.a...aa/a. .a...aa/a.
+.a...aa/a/ .a...aa/a
+.a...aa/.a .a...aa/.a
+.a...aa/.. .
+.a...aa/./ .a...aa
+.a...aa//a .a...aa/a
+.a...aa//. .a...aa
+.a...aa/// .a...aa
+.a...a.aaa .a...a.aaa
+.a...a.aa. .a...a.aa.
+.a...a.aa/ .a...a.aa
+.a...a.a.a .a...a.a.a
+.a...a.a.. .a...a.a..
+.a...a.a./ .a...a.a.
+.a...a.a/a .a...a.a/a
+.a...a.a/. .a...a.a
+.a...a.a// .a...a.a
+.a...a..aa .a...a..aa
+.a...a..a. .a...a..a.
+.a...a..a/ .a...a..a
+.a...a...a .a...a...a
+.a...a.... .a...a....
+.a...a.../ .a...a...
+.a...a../a .a...a../a
+.a...a../. .a...a..
+.a...a..// .a...a..
+.a...a./aa .a...a./aa
+.a...a./a. .a...a./a.
+.a...a./a/ .a...a./a
+.a...a./.a .a...a./.a
+.a...a./.. .
+.a...a././ .a...a.
+.a...a.//a .a...a./a
+.a...a.//. .a...a.
+.a...a./// .a...a.
+.a...a/aaa .a...a/aaa
+.a...a/aa. .a...a/aa.
+.a...a/aa/ .a...a/aa
+.a...a/a.a .a...a/a.a
+.a...a/a.. .a...a/a..
+.a...a/a./ .a...a/a.
+.a...a/a/a .a...a/a/a
+.a...a/a/. .a...a/a
+.a...a/a// .a...a/a
+.a...a/.aa .a...a/.aa
+.a...a/.a. .a...a/.a.
+.a...a/.a/ .a...a/.a
+.a...a/..a .a...a/..a
+.a...a/... .a...a/...
+.a...a/../ .
+.a...a/./a .a...a/a
+.a...a/./. .a...a
+.a...a/.// .a...a
+.a...a//aa .a...a/aa
+.a...a//a. .a...a/a.
+.a...a//a/ .a...a/a
+.a...a//.a .a...a/.a
+.a...a//.. .
+.a...a//./ .a...a
+.a...a///a .a...a/a
+.a...a///. .a...a
+.a...a//// .a...a
+.a....aaaa .a....aaaa
+.a....aaa. .a....aaa.
+.a....aaa/ .a....aaa
+.a....aa.a .a....aa.a
+.a....aa.. .a....aa..
+.a....aa./ .a....aa.
+.a....aa/a .a....aa/a
+.a....aa/. .a....aa
+.a....aa// .a....aa
+.a....a.aa .a....a.aa
+.a....a.a. .a....a.a.
+.a....a.a/ .a....a.a
+.a....a..a .a....a..a
+.a....a... .a....a...
+.a....a../ .a....a..
+.a....a./a .a....a./a
+.a....a./. .a....a.
+.a....a.// .a....a.
+.a....a/aa .a....a/aa
+.a....a/a. .a....a/a.
+.a....a/a/ .a....a/a
+.a....a/.a .a....a/.a
+.a....a/.. .
+.a....a/./ .a....a
+.a....a//a .a....a/a
+.a....a//. .a....a
+.a....a/// .a....a
+.a.....aaa .a.....aaa
+.a.....aa. .a.....aa.
+.a.....aa/ .a.....aa
+.a.....a.a .a.....a.a
+.a.....a.. .a.....a..
+.a.....a./ .a.....a.
+.a.....a/a .a.....a/a
+.a.....a/. .a.....a
+.a.....a// .a.....a
+.a......aa .a......aa
+.a......a. .a......a.
+.a......a/ .a......a
+.a.......a .a.......a
+.a........ .a........
+.a......./ .a.......
+.a....../a .a....../a
+.a....../. .a......
+.a......// .a......
+.a...../aa .a...../aa
+.a...../a. .a...../a.
+.a...../a/ .a...../a
+.a...../.a .a...../.a
+.a...../.. .
+.a....././ .a.....
+.a.....//a .a...../a
+.a.....//. .a.....
+.a...../// .a.....
+.a..../aaa .a..../aaa
+.a..../aa. .a..../aa.
+.a..../aa/ .a..../aa
+.a..../a.a .a..../a.a
+.a..../a.. .a..../a..
+.a..../a./ .a..../a.
+.a..../a/a .a..../a/a
+.a..../a/. .a..../a
+.a..../a// .a..../a
+.a..../.aa .a..../.aa
+.a..../.a. .a..../.a.
+.a..../.a/ .a..../.a
+.a..../..a .a..../..a
+.a..../... .a..../...
+.a..../../ .
+.a...././a .a..../a
+.a...././. .a....
+.a..../.// .a....
+.a....//aa .a..../aa
+.a....//a. .a..../a.
+.a....//a/ .a..../a
+.a....//.a .a..../.a
+.a....//.. .
+.a....//./ .a....
+.a....///a .a..../a
+.a....///. .a....
+.a....//// .a....
+.a.../aaaa .a.../aaaa
+.a.../aaa. .a.../aaa.
+.a.../aaa/ .a.../aaa
+.a.../aa.a .a.../aa.a
+.a.../aa.. .a.../aa..
+.a.../aa./ .a.../aa.
+.a.../aa/a .a.../aa/a
+.a.../aa/. .a.../aa
+.a.../aa// .a.../aa
+.a.../a.aa .a.../a.aa
+.a.../a.a. .a.../a.a.
+.a.../a.a/ .a.../a.a
+.a.../a..a .a.../a..a
+.a.../a... .a.../a...
+.a.../a../ .a.../a..
+.a.../a./a .a.../a./a
+.a.../a./. .a.../a.
+.a.../a.// .a.../a.
+.a.../a/aa .a.../a/aa
+.a.../a/a. .a.../a/a.
+.a.../a/a/ .a.../a/a
+.a.../a/.a .a.../a/.a
+.a.../a/.. .a...
+.a.../a/./ .a.../a
+.a.../a//a .a.../a/a
+.a.../a//. .a.../a
+.a.../a/// .a.../a
+.a.../.aaa .a.../.aaa
+.a.../.aa. .a.../.aa.
+.a.../.aa/ .a.../.aa
+.a.../.a.a .a.../.a.a
+.a.../.a.. .a.../.a..
+.a.../.a./ .a.../.a.
+.a.../.a/a .a.../.a/a
+.a.../.a/. .a.../.a
+.a.../.a// .a.../.a
+.a.../..aa .a.../..aa
+.a.../..a. .a.../..a.
+.a.../..a/ .a.../..a
+.a.../...a .a.../...a
+.a.../.... .a.../....
+.a.../.../ .a.../...
+.a.../../a a
+.a.../../. .
+.a.../..// .
+.a..././aa .a.../aa
+.a..././a. .a.../a.
+.a..././a/ .a.../a
+.a..././.a .a.../.a
+.a..././.. .
+.a.../././ .a...
+.a..././/a .a.../a
+.a..././/. .a...
+.a..././// .a...
+.a...//aaa .a.../aaa
+.a...//aa. .a.../aa.
+.a...//aa/ .a.../aa
+.a...//a.a .a.../a.a
+.a...//a.. .a.../a..
+.a...//a./ .a.../a.
+.a...//a/a .a.../a/a
+.a...//a/. .a.../a
+.a...//a// .a.../a
+.a...//.aa .a.../.aa
+.a...//.a. .a.../.a.
+.a...//.a/ .a.../.a
+.a...//..a .a.../..a
+.a...//... .a.../...
+.a...//../ .
+.a...//./a .a.../a
+.a...//./. .a...
+.a...//.// .a...
+.a...///aa .a.../aa
+.a...///a. .a.../a.
+.a...///a/ .a.../a
+.a...///.a .a.../.a
+.a...///.. .
+.a...///./ .a...
+.a...////a .a.../a
+.a...////. .a...
+.a...///// .a...
+.a../aaaaa .a../aaaaa
+.a../aaaa. .a../aaaa.
+.a../aaaa/ .a../aaaa
+.a../aaa.a .a../aaa.a
+.a../aaa.. .a../aaa..
+.a../aaa./ .a../aaa.
+.a../aaa/a .a../aaa/a
+.a../aaa/. .a../aaa
+.a../aaa// .a../aaa
+.a../aa.aa .a../aa.aa
+.a../aa.a. .a../aa.a.
+.a../aa.a/ .a../aa.a
+.a../aa..a .a../aa..a
+.a../aa... .a../aa...
+.a../aa../ .a../aa..
+.a../aa./a .a../aa./a
+.a../aa./. .a../aa.
+.a../aa.// .a../aa.
+.a../aa/aa .a../aa/aa
+.a../aa/a. .a../aa/a.
+.a../aa/a/ .a../aa/a
+.a../aa/.a .a../aa/.a
+.a../aa/.. .a..
+.a../aa/./ .a../aa
+.a../aa//a .a../aa/a
+.a../aa//. .a../aa
+.a../aa/// .a../aa
+.a../a.aaa .a../a.aaa
+.a../a.aa. .a../a.aa.
+.a../a.aa/ .a../a.aa
+.a../a.a.a .a../a.a.a
+.a../a.a.. .a../a.a..
+.a../a.a./ .a../a.a.
+.a../a.a/a .a../a.a/a
+.a../a.a/. .a../a.a
+.a../a.a// .a../a.a
+.a../a..aa .a../a..aa
+.a../a..a. .a../a..a.
+.a../a..a/ .a../a..a
+.a../a...a .a../a...a
+.a../a.... .a../a....
+.a../a.../ .a../a...
+.a../a../a .a../a../a
+.a../a../. .a../a..
+.a../a..// .a../a..
+.a../a./aa .a../a./aa
+.a../a./a. .a../a./a.
+.a../a./a/ .a../a./a
+.a../a./.a .a../a./.a
+.a../a./.. .a..
+.a../a././ .a../a.
+.a../a.//a .a../a./a
+.a../a.//. .a../a.
+.a../a./// .a../a.
+.a../a/aaa .a../a/aaa
+.a../a/aa. .a../a/aa.
+.a../a/aa/ .a../a/aa
+.a../a/a.a .a../a/a.a
+.a../a/a.. .a../a/a..
+.a../a/a./ .a../a/a.
+.a../a/a/a .a../a/a/a
+.a../a/a/. .a../a/a
+.a../a/a// .a../a/a
+.a../a/.aa .a../a/.aa
+.a../a/.a. .a../a/.a.
+.a../a/.a/ .a../a/.a
+.a../a/..a .a../a/..a
+.a../a/... .a../a/...
+.a../a/../ .a..
+.a../a/./a .a../a/a
+.a../a/./. .a../a
+.a../a/.// .a../a
+.a../a//aa .a../a/aa
+.a../a//a. .a../a/a.
+.a../a//a/ .a../a/a
+.a../a//.a .a../a/.a
+.a../a//.. .a..
+.a../a//./ .a../a
+.a../a///a .a../a/a
+.a../a///. .a../a
+.a../a//// .a../a
+.a../.aaaa .a../.aaaa
+.a../.aaa. .a../.aaa.
+.a../.aaa/ .a../.aaa
+.a../.aa.a .a../.aa.a
+.a../.aa.. .a../.aa..
+.a../.aa./ .a../.aa.
+.a../.aa/a .a../.aa/a
+.a../.aa/. .a../.aa
+.a../.aa// .a../.aa
+.a../.a.aa .a../.a.aa
+.a../.a.a. .a../.a.a.
+.a../.a.a/ .a../.a.a
+.a../.a..a .a../.a..a
+.a../.a... .a../.a...
+.a../.a../ .a../.a..
+.a../.a./a .a../.a./a
+.a../.a./. .a../.a.
+.a../.a.// .a../.a.
+.a../.a/aa .a../.a/aa
+.a../.a/a. .a../.a/a.
+.a../.a/a/ .a../.a/a
+.a../.a/.a .a../.a/.a
+.a../.a/.. .a..
+.a../.a/./ .a../.a
+.a../.a//a .a../.a/a
+.a../.a//. .a../.a
+.a../.a/// .a../.a
+.a../..aaa .a../..aaa
+.a../..aa. .a../..aa.
+.a../..aa/ .a../..aa
+.a../..a.a .a../..a.a
+.a../..a.. .a../..a..
+.a../..a./ .a../..a.
+.a../..a/a .a../..a/a
+.a../..a/. .a../..a
+.a../..a// .a../..a
+.a../...aa .a../...aa
+.a../...a. .a../...a.
+.a../...a/ .a../...a
+.a../....a .a../....a
+.a../..... .a../.....
+.a../..../ .a../....
+.a../.../a .a../.../a
+.a../.../. .a../...
+.a../...// .a../...
+.a../../aa aa
+.a../../a. a.
+.a../../a/ a
+.a../../.a .a
+.a../../.. ..
+.a../.././ .
+.a../..//a a
+.a../..//. .
+.a../../// .
+.a.././aaa .a../aaa
+.a.././aa. .a../aa.
+.a.././aa/ .a../aa
+.a.././a.a .a../a.a
+.a.././a.. .a../a..
+.a.././a./ .a../a.
+.a.././a/a .a../a/a
+.a.././a/. .a../a
+.a.././a// .a../a
+.a.././.aa .a../.aa
+.a.././.a. .a../.a.
+.a.././.a/ .a../.a
+.a.././..a .a../..a
+.a.././... .a../...
+.a.././../ .
+.a../././a .a../a
+.a../././. .a..
+.a.././.// .a..
+.a.././/aa .a../aa
+.a.././/a. .a../a.
+.a.././/a/ .a../a
+.a.././/.a .a../.a
+.a.././/.. .
+.a.././/./ .a..
+.a.././//a .a../a
+.a.././//. .a..
+.a.././/// .a..
+.a..//aaaa .a../aaaa
+.a..//aaa. .a../aaa.
+.a..//aaa/ .a../aaa
+.a..//aa.a .a../aa.a
+.a..//aa.. .a../aa..
+.a..//aa./ .a../aa.
+.a..//aa/a .a../aa/a
+.a..//aa/. .a../aa
+.a..//aa// .a../aa
+.a..//a.aa .a../a.aa
+.a..//a.a. .a../a.a.
+.a..//a.a/ .a../a.a
+.a..//a..a .a../a..a
+.a..//a... .a../a...
+.a..//a../ .a../a..
+.a..//a./a .a../a./a
+.a..//a./. .a../a.
+.a..//a.// .a../a.
+.a..//a/aa .a../a/aa
+.a..//a/a. .a../a/a.
+.a..//a/a/ .a../a/a
+.a..//a/.a .a../a/.a
+.a..//a/.. .a..
+.a..//a/./ .a../a
+.a..//a//a .a../a/a
+.a..//a//. .a../a
+.a..//a/// .a../a
+.a..//.aaa .a../.aaa
+.a..//.aa. .a../.aa.
+.a..//.aa/ .a../.aa
+.a..//.a.a .a../.a.a
+.a..//.a.. .a../.a..
+.a..//.a./ .a../.a.
+.a..//.a/a .a../.a/a
+.a..//.a/. .a../.a
+.a..//.a// .a../.a
+.a..//..aa .a../..aa
+.a..//..a. .a../..a.
+.a..//..a/ .a../..a
+.a..//...a .a../...a
+.a..//.... .a../....
+.a..//.../ .a../...
+.a..//../a a
+.a..//../. .
+.a..//..// .
+.a..//./aa .a../aa
+.a..//./a. .a../a.
+.a..//./a/ .a../a
+.a..//./.a .a../.a
+.a..//./.. .
+.a..//././ .a..
+.a..//.//a .a../a
+.a..//.//. .a..
+.a..//./// .a..
+.a..///aaa .a../aaa
+.a..///aa. .a../aa.
+.a..///aa/ .a../aa
+.a..///a.a .a../a.a
+.a..///a.. .a../a..
+.a..///a./ .a../a.
+.a..///a/a .a../a/a
+.a..///a/. .a../a
+.a..///a// .a../a
+.a..///.aa .a../.aa
+.a..///.a. .a../.a.
+.a..///.a/ .a../.a
+.a..///..a .a../..a
+.a..///... .a../...
+.a..///../ .
+.a..///./a .a../a
+.a..///./. .a..
+.a..///.// .a..
+.a..////aa .a../aa
+.a..////a. .a../a.
+.a..////a/ .a../a
+.a..////.a .a../.a
+.a..////.. .
+.a..////./ .a..
+.a../////a .a../a
+.a../////. .a..
+.a..////// .a..
+.a./aaaaaa .a./aaaaaa
+.a./aaaaa. .a./aaaaa.
+.a./aaaaa/ .a./aaaaa
+.a./aaaa.a .a./aaaa.a
+.a./aaaa.. .a./aaaa..
+.a./aaaa./ .a./aaaa.
+.a./aaaa/a .a./aaaa/a
+.a./aaaa/. .a./aaaa
+.a./aaaa// .a./aaaa
+.a./aaa.aa .a./aaa.aa
+.a./aaa.a. .a./aaa.a.
+.a./aaa.a/ .a./aaa.a
+.a./aaa..a .a./aaa..a
+.a./aaa... .a./aaa...
+.a./aaa../ .a./aaa..
+.a./aaa./a .a./aaa./a
+.a./aaa./. .a./aaa.
+.a./aaa.// .a./aaa.
+.a./aaa/aa .a./aaa/aa
+.a./aaa/a. .a./aaa/a.
+.a./aaa/a/ .a./aaa/a
+.a./aaa/.a .a./aaa/.a
+.a./aaa/.. .a.
+.a./aaa/./ .a./aaa
+.a./aaa//a .a./aaa/a
+.a./aaa//. .a./aaa
+.a./aaa/// .a./aaa
+.a./aa.aaa .a./aa.aaa
+.a./aa.aa. .a./aa.aa.
+.a./aa.aa/ .a./aa.aa
+.a./aa.a.a .a./aa.a.a
+.a./aa.a.. .a./aa.a..
+.a./aa.a./ .a./aa.a.
+.a./aa.a/a .a./aa.a/a
+.a./aa.a/. .a./aa.a
+.a./aa.a// .a./aa.a
+.a./aa..aa .a./aa..aa
+.a./aa..a. .a./aa..a.
+.a./aa..a/ .a./aa..a
+.a./aa...a .a./aa...a
+.a./aa.... .a./aa....
+.a./aa.../ .a./aa...
+.a./aa../a .a./aa../a
+.a./aa../. .a./aa..
+.a./aa..// .a./aa..
+.a./aa./aa .a./aa./aa
+.a./aa./a. .a./aa./a.
+.a./aa./a/ .a./aa./a
+.a./aa./.a .a./aa./.a
+.a./aa./.. .a.
+.a./aa././ .a./aa.
+.a./aa.//a .a./aa./a
+.a./aa.//. .a./aa.
+.a./aa./// .a./aa.
+.a./aa/aaa .a./aa/aaa
+.a./aa/aa. .a./aa/aa.
+.a./aa/aa/ .a./aa/aa
+.a./aa/a.a .a./aa/a.a
+.a./aa/a.. .a./aa/a..
+.a./aa/a./ .a./aa/a.
+.a./aa/a/a .a./aa/a/a
+.a./aa/a/. .a./aa/a
+.a./aa/a// .a./aa/a
+.a./aa/.aa .a./aa/.aa
+.a./aa/.a. .a./aa/.a.
+.a./aa/.a/ .a./aa/.a
+.a./aa/..a .a./aa/..a
+.a./aa/... .a./aa/...
+.a./aa/../ .a.
+.a./aa/./a .a./aa/a
+.a./aa/./. .a./aa
+.a./aa/.// .a./aa
+.a./aa//aa .a./aa/aa
+.a./aa//a. .a./aa/a.
+.a./aa//a/ .a./aa/a
+.a./aa//.a .a./aa/.a
+.a./aa//.. .a.
+.a./aa//./ .a./aa
+.a./aa///a .a./aa/a
+.a./aa///. .a./aa
+.a./aa//// .a./aa
+.a./a.aaaa .a./a.aaaa
+.a./a.aaa. .a./a.aaa.
+.a./a.aaa/ .a./a.aaa
+.a./a.aa.a .a./a.aa.a
+.a./a.aa.. .a./a.aa..
+.a./a.aa./ .a./a.aa.
+.a./a.aa/a .a./a.aa/a
+.a./a.aa/. .a./a.aa
+.a./a.aa// .a./a.aa
+.a./a.a.aa .a./a.a.aa
+.a./a.a.a. .a./a.a.a.
+.a./a.a.a/ .a./a.a.a
+.a./a.a..a .a./a.a..a
+.a./a.a... .a./a.a...
+.a./a.a../ .a./a.a..
+.a./a.a./a .a./a.a./a
+.a./a.a./. .a./a.a.
+.a./a.a.// .a./a.a.
+.a./a.a/aa .a./a.a/aa
+.a./a.a/a. .a./a.a/a.
+.a./a.a/a/ .a./a.a/a
+.a./a.a/.a .a./a.a/.a
+.a./a.a/.. .a.
+.a./a.a/./ .a./a.a
+.a./a.a//a .a./a.a/a
+.a./a.a//. .a./a.a
+.a./a.a/// .a./a.a
+.a./a..aaa .a./a..aaa
+.a./a..aa. .a./a..aa.
+.a./a..aa/ .a./a..aa
+.a./a..a.a .a./a..a.a
+.a./a..a.. .a./a..a..
+.a./a..a./ .a./a..a.
+.a./a..a/a .a./a..a/a
+.a./a..a/. .a./a..a
+.a./a..a// .a./a..a
+.a./a...aa .a./a...aa
+.a./a...a. .a./a...a.
+.a./a...a/ .a./a...a
+.a./a....a .a./a....a
+.a./a..... .a./a.....
+.a./a..../ .a./a....
+.a./a.../a .a./a.../a
+.a./a.../. .a./a...
+.a./a...// .a./a...
+.a./a../aa .a./a../aa
+.a./a../a. .a./a../a.
+.a./a../a/ .a./a../a
+.a./a../.a .a./a../.a
+.a./a../.. .a.
+.a./a.././ .a./a..
+.a./a..//a .a./a../a
+.a./a..//. .a./a..
+.a./a../// .a./a..
+.a./a./aaa .a./a./aaa
+.a./a./aa. .a./a./aa.
+.a./a./aa/ .a./a./aa
+.a./a./a.a .a./a./a.a
+.a./a./a.. .a./a./a..
+.a./a./a./ .a./a./a.
+.a./a./a/a .a./a./a/a
+.a./a./a/. .a./a./a
+.a./a./a// .a./a./a
+.a./a./.aa .a./a./.aa
+.a./a./.a. .a./a./.a.
+.a./a./.a/ .a./a./.a
+.a./a./..a .a./a./..a
+.a./a./... .a./a./...
+.a./a./../ .a.
+.a./a././a .a./a./a
+.a./a././. .a./a.
+.a./a./.// .a./a.
+.a./a.//aa .a./a./aa
+.a./a.//a. .a./a./a.
+.a./a.//a/ .a./a./a
+.a./a.//.a .a./a./.a
+.a./a.//.. .a.
+.a./a.//./ .a./a.
+.a./a.///a .a./a./a
+.a./a.///. .a./a.
+.a./a.//// .a./a.
+.a./a/aaaa .a./a/aaaa
+.a./a/aaa. .a./a/aaa.
+.a./a/aaa/ .a./a/aaa
+.a./a/aa.a .a./a/aa.a
+.a./a/aa.. .a./a/aa..
+.a./a/aa./ .a./a/aa.
+.a./a/aa/a .a./a/aa/a
+.a./a/aa/. .a./a/aa
+.a./a/aa// .a./a/aa
+.a./a/a.aa .a./a/a.aa
+.a./a/a.a. .a./a/a.a.
+.a./a/a.a/ .a./a/a.a
+.a./a/a..a .a./a/a..a
+.a./a/a... .a./a/a...
+.a./a/a../ .a./a/a..
+.a./a/a./a .a./a/a./a
+.a./a/a./. .a./a/a.
+.a./a/a.// .a./a/a.
+.a./a/a/aa .a./a/a/aa
+.a./a/a/a. .a./a/a/a.
+.a./a/a/a/ .a./a/a/a
+.a./a/a/.a .a./a/a/.a
+.a./a/a/.. .a./a
+.a./a/a/./ .a./a/a
+.a./a/a//a .a./a/a/a
+.a./a/a//. .a./a/a
+.a./a/a/// .a./a/a
+.a./a/.aaa .a./a/.aaa
+.a./a/.aa. .a./a/.aa.
+.a./a/.aa/ .a./a/.aa
+.a./a/.a.a .a./a/.a.a
+.a./a/.a.. .a./a/.a..
+.a./a/.a./ .a./a/.a.
+.a./a/.a/a .a./a/.a/a
+.a./a/.a/. .a./a/.a
+.a./a/.a// .a./a/.a
+.a./a/..aa .a./a/..aa
+.a./a/..a. .a./a/..a.
+.a./a/..a/ .a./a/..a
+.a./a/...a .a./a/...a
+.a./a/.... .a./a/....
+.a./a/.../ .a./a/...
+.a./a/../a .a./a
+.a./a/../. .a.
+.a./a/..// .a.
+.a./a/./aa .a./a/aa
+.a./a/./a. .a./a/a.
+.a./a/./a/ .a./a/a
+.a./a/./.a .a./a/.a
+.a./a/./.. .a.
+.a./a/././ .a./a
+.a./a/.//a .a./a/a
+.a./a/.//. .a./a
+.a./a/./// .a./a
+.a./a//aaa .a./a/aaa
+.a./a//aa. .a./a/aa.
+.a./a//aa/ .a./a/aa
+.a./a//a.a .a./a/a.a
+.a./a//a.. .a./a/a..
+.a./a//a./ .a./a/a.
+.a./a//a/a .a./a/a/a
+.a./a//a/. .a./a/a
+.a./a//a// .a./a/a
+.a./a//.aa .a./a/.aa
+.a./a//.a. .a./a/.a.
+.a./a//.a/ .a./a/.a
+.a./a//..a .a./a/..a
+.a./a//... .a./a/...
+.a./a//../ .a.
+.a./a//./a .a./a/a
+.a./a//./. .a./a
+.a./a//.// .a./a
+.a./a///aa .a./a/aa
+.a./a///a. .a./a/a.
+.a./a///a/ .a./a/a
+.a./a///.a .a./a/.a
+.a./a///.. .a.
+.a./a///./ .a./a
+.a./a////a .a./a/a
+.a./a////. .a./a
+.a./a///// .a./a
+.a./.aaaaa .a./.aaaaa
+.a./.aaaa. .a./.aaaa.
+.a./.aaaa/ .a./.aaaa
+.a./.aaa.a .a./.aaa.a
+.a./.aaa.. .a./.aaa..
+.a./.aaa./ .a./.aaa.
+.a./.aaa/a .a./.aaa/a
+.a./.aaa/. .a./.aaa
+.a./.aaa// .a./.aaa
+.a./.aa.aa .a./.aa.aa
+.a./.aa.a. .a./.aa.a.
+.a./.aa.a/ .a./.aa.a
+.a./.aa..a .a./.aa..a
+.a./.aa... .a./.aa...
+.a./.aa../ .a./.aa..
+.a./.aa./a .a./.aa./a
+.a./.aa./. .a./.aa.
+.a./.aa.// .a./.aa.
+.a./.aa/aa .a./.aa/aa
+.a./.aa/a. .a./.aa/a.
+.a./.aa/a/ .a./.aa/a
+.a./.aa/.a .a./.aa/.a
+.a./.aa/.. .a.
+.a./.aa/./ .a./.aa
+.a./.aa//a .a./.aa/a
+.a./.aa//. .a./.aa
+.a./.aa/// .a./.aa
+.a./.a.aaa .a./.a.aaa
+.a./.a.aa. .a./.a.aa.
+.a./.a.aa/ .a./.a.aa
+.a./.a.a.a .a./.a.a.a
+.a./.a.a.. .a./.a.a..
+.a./.a.a./ .a./.a.a.
+.a./.a.a/a .a./.a.a/a
+.a./.a.a/. .a./.a.a
+.a./.a.a// .a./.a.a
+.a./.a..aa .a./.a..aa
+.a./.a..a. .a./.a..a.
+.a./.a..a/ .a./.a..a
+.a./.a...a .a./.a...a
+.a./.a.... .a./.a....
+.a./.a.../ .a./.a...
+.a./.a../a .a./.a../a
+.a./.a../. .a./.a..
+.a./.a..// .a./.a..
+.a./.a./aa .a./.a./aa
+.a./.a./a. .a./.a./a.
+.a./.a./a/ .a./.a./a
+.a./.a./.a .a./.a./.a
+.a./.a./.. .a.
+.a./.a././ .a./.a.
+.a./.a.//a .a./.a./a
+.a./.a.//. .a./.a.
+.a./.a./// .a./.a.
+.a./.a/aaa .a./.a/aaa
+.a./.a/aa. .a./.a/aa.
+.a./.a/aa/ .a./.a/aa
+.a./.a/a.a .a./.a/a.a
+.a./.a/a.. .a./.a/a..
+.a./.a/a./ .a./.a/a.
+.a./.a/a/a .a./.a/a/a
+.a./.a/a/. .a./.a/a
+.a./.a/a// .a./.a/a
+.a./.a/.aa .a./.a/.aa
+.a./.a/.a. .a./.a/.a.
+.a./.a/.a/ .a./.a/.a
+.a./.a/..a .a./.a/..a
+.a./.a/... .a./.a/...
+.a./.a/../ .a.
+.a./.a/./a .a./.a/a
+.a./.a/./. .a./.a
+.a./.a/.// .a./.a
+.a./.a//aa .a./.a/aa
+.a./.a//a. .a./.a/a.
+.a./.a//a/ .a./.a/a
+.a./.a//.a .a./.a/.a
+.a./.a//.. .a.
+.a./.a//./ .a./.a
+.a./.a///a .a./.a/a
+.a./.a///. .a./.a
+.a./.a//// .a./.a
+.a./..aaaa .a./..aaaa
+.a./..aaa. .a./..aaa.
+.a./..aaa/ .a./..aaa
+.a./..aa.a .a./..aa.a
+.a./..aa.. .a./..aa..
+.a./..aa./ .a./..aa.
+.a./..aa/a .a./..aa/a
+.a./..aa/. .a./..aa
+.a./..aa// .a./..aa
+.a./..a.aa .a./..a.aa
+.a./..a.a. .a./..a.a.
+.a./..a.a/ .a./..a.a
+.a./..a..a .a./..a..a
+.a./..a... .a./..a...
+.a./..a../ .a./..a..
+.a./..a./a .a./..a./a
+.a./..a./. .a./..a.
+.a./..a.// .a./..a.
+.a./..a/aa .a./..a/aa
+.a./..a/a. .a./..a/a.
+.a./..a/a/ .a./..a/a
+.a./..a/.a .a./..a/.a
+.a./..a/.. .a.
+.a./..a/./ .a./..a
+.a./..a//a .a./..a/a
+.a./..a//. .a./..a
+.a./..a/// .a./..a
+.a./...aaa .a./...aaa
+.a./...aa. .a./...aa.
+.a./...aa/ .a./...aa
+.a./...a.a .a./...a.a
+.a./...a.. .a./...a..
+.a./...a./ .a./...a.
+.a./...a/a .a./...a/a
+.a./...a/. .a./...a
+.a./...a// .a./...a
+.a./....aa .a./....aa
+.a./....a. .a./....a.
+.a./....a/ .a./....a
+.a./.....a .a./.....a
+.a./...... .a./......
+.a./...../ .a./.....
+.a./..../a .a./..../a
+.a./..../. .a./....
+.a./....// .a./....
+.a./.../aa .a./.../aa
+.a./.../a. .a./.../a.
+.a./.../a/ .a./.../a
+.a./.../.a .a./.../.a
+.a./.../.. .a.
+.a./..././ .a./...
+.a./...//a .a./.../a
+.a./...//. .a./...
+.a./.../// .a./...
+.a./../aaa aaa
+.a./../aa. aa.
+.a./../aa/ aa
+.a./../a.a a.a
+.a./../a.. a..
+.a./../a./ a.
+.a./../a/a a/a
+.a./../a/. a
+.a./../a// a
+.a./../.aa .aa
+.a./../.a. .a.
+.a./../.a/ .a
+.a./../..a ..a
+.a./../... ...
+.a./../../ ..
+.a./.././a a
+.a./.././. .
+.a./../.// .
+.a./..//aa aa
+.a./..//a. a.
+.a./..//a/ a
+.a./..//.a .a
+.a./..//.. ..
+.a./..//./ .
+.a./..///a a
+.a./..///. .
+.a./..//// .
+.a././aaaa .a./aaaa
+.a././aaa. .a./aaa.
+.a././aaa/ .a./aaa
+.a././aa.a .a./aa.a
+.a././aa.. .a./aa..
+.a././aa./ .a./aa.
+.a././aa/a .a./aa/a
+.a././aa/. .a./aa
+.a././aa// .a./aa
+.a././a.aa .a./a.aa
+.a././a.a. .a./a.a.
+.a././a.a/ .a./a.a
+.a././a..a .a./a..a
+.a././a... .a./a...
+.a././a../ .a./a..
+.a././a./a .a./a./a
+.a././a./. .a./a.
+.a././a.// .a./a.
+.a././a/aa .a./a/aa
+.a././a/a. .a./a/a.
+.a././a/a/ .a./a/a
+.a././a/.a .a./a/.a
+.a././a/.. .a.
+.a././a/./ .a./a
+.a././a//a .a./a/a
+.a././a//. .a./a
+.a././a/// .a./a
+.a././.aaa .a./.aaa
+.a././.aa. .a./.aa.
+.a././.aa/ .a./.aa
+.a././.a.a .a./.a.a
+.a././.a.. .a./.a..
+.a././.a./ .a./.a.
+.a././.a/a .a./.a/a
+.a././.a/. .a./.a
+.a././.a// .a./.a
+.a././..aa .a./..aa
+.a././..a. .a./..a.
+.a././..a/ .a./..a
+.a././...a .a./...a
+.a././.... .a./....
+.a././.../ .a./...
+.a././../a a
+.a././../. .
+.a././..// .
+.a./././aa .a./aa
+.a./././a. .a./a.
+.a./././a/ .a./a
+.a./././.a .a./.a
+.a./././.. .
+.a././././ .a.
+.a./././/a .a./a
+.a./././/. .a.
+.a./././// .a.
+.a././/aaa .a./aaa
+.a././/aa. .a./aa.
+.a././/aa/ .a./aa
+.a././/a.a .a./a.a
+.a././/a.. .a./a..
+.a././/a./ .a./a.
+.a././/a/a .a./a/a
+.a././/a/. .a./a
+.a././/a// .a./a
+.a././/.aa .a./.aa
+.a././/.a. .a./.a.
+.a././/.a/ .a./.a
+.a././/..a .a./..a
+.a././/... .a./...
+.a././/../ .
+.a././/./a .a./a
+.a././/./. .a.
+.a././/.// .a.
+.a././//aa .a./aa
+.a././//a. .a./a.
+.a././//a/ .a./a
+.a././//.a .a./.a
+.a././//.. .
+.a././//./ .a.
+.a././///a .a./a
+.a././///. .a.
+.a././//// .a.
+.a.//aaaaa .a./aaaaa
+.a.//aaaa. .a./aaaa.
+.a.//aaaa/ .a./aaaa
+.a.//aaa.a .a./aaa.a
+.a.//aaa.. .a./aaa..
+.a.//aaa./ .a./aaa.
+.a.//aaa/a .a./aaa/a
+.a.//aaa/. .a./aaa
+.a.//aaa// .a./aaa
+.a.//aa.aa .a./aa.aa
+.a.//aa.a. .a./aa.a.
+.a.//aa.a/ .a./aa.a
+.a.//aa..a .a./aa..a
+.a.//aa... .a./aa...
+.a.//aa../ .a./aa..
+.a.//aa./a .a./aa./a
+.a.//aa./. .a./aa.
+.a.//aa.// .a./aa.
+.a.//aa/aa .a./aa/aa
+.a.//aa/a. .a./aa/a.
+.a.//aa/a/ .a./aa/a
+.a.//aa/.a .a./aa/.a
+.a.//aa/.. .a.
+.a.//aa/./ .a./aa
+.a.//aa//a .a./aa/a
+.a.//aa//. .a./aa
+.a.//aa/// .a./aa
+.a.//a.aaa .a./a.aaa
+.a.//a.aa. .a./a.aa.
+.a.//a.aa/ .a./a.aa
+.a.//a.a.a .a./a.a.a
+.a.//a.a.. .a./a.a..
+.a.//a.a./ .a./a.a.
+.a.//a.a/a .a./a.a/a
+.a.//a.a/. .a./a.a
+.a.//a.a// .a./a.a
+.a.//a..aa .a./a..aa
+.a.//a..a. .a./a..a.
+.a.//a..a/ .a./a..a
+.a.//a...a .a./a...a
+.a.//a.... .a./a....
+.a.//a.../ .a./a...
+.a.//a../a .a./a../a
+.a.//a../. .a./a..
+.a.//a..// .a./a..
+.a.//a./aa .a./a./aa
+.a.//a./a. .a./a./a.
+.a.//a./a/ .a./a./a
+.a.//a./.a .a./a./.a
+.a.//a./.. .a.
+.a.//a././ .a./a.
+.a.//a.//a .a./a./a
+.a.//a.//. .a./a.
+.a.//a./// .a./a.
+.a.//a/aaa .a./a/aaa
+.a.//a/aa. .a./a/aa.
+.a.//a/aa/ .a./a/aa
+.a.//a/a.a .a./a/a.a
+.a.//a/a.. .a./a/a..
+.a.//a/a./ .a./a/a.
+.a.//a/a/a .a./a/a/a
+.a.//a/a/. .a./a/a
+.a.//a/a// .a./a/a
+.a.//a/.aa .a./a/.aa
+.a.//a/.a. .a./a/.a.
+.a.//a/.a/ .a./a/.a
+.a.//a/..a .a./a/..a
+.a.//a/... .a./a/...
+.a.//a/../ .a.
+.a.//a/./a .a./a/a
+.a.//a/./. .a./a
+.a.//a/.// .a./a
+.a.//a//aa .a./a/aa
+.a.//a//a. .a./a/a.
+.a.//a//a/ .a./a/a
+.a.//a//.a .a./a/.a
+.a.//a//.. .a.
+.a.//a//./ .a./a
+.a.//a///a .a./a/a
+.a.//a///. .a./a
+.a.//a//// .a./a
+.a.//.aaaa .a./.aaaa
+.a.//.aaa. .a./.aaa.
+.a.//.aaa/ .a./.aaa
+.a.//.aa.a .a./.aa.a
+.a.//.aa.. .a./.aa..
+.a.//.aa./ .a./.aa.
+.a.//.aa/a .a./.aa/a
+.a.//.aa/. .a./.aa
+.a.//.aa// .a./.aa
+.a.//.a.aa .a./.a.aa
+.a.//.a.a. .a./.a.a.
+.a.//.a.a/ .a./.a.a
+.a.//.a..a .a./.a..a
+.a.//.a... .a./.a...
+.a.//.a../ .a./.a..
+.a.//.a./a .a./.a./a
+.a.//.a./. .a./.a.
+.a.//.a.// .a./.a.
+.a.//.a/aa .a./.a/aa
+.a.//.a/a. .a./.a/a.
+.a.//.a/a/ .a./.a/a
+.a.//.a/.a .a./.a/.a
+.a.//.a/.. .a.
+.a.//.a/./ .a./.a
+.a.//.a//a .a./.a/a
+.a.//.a//. .a./.a
+.a.//.a/// .a./.a
+.a.//..aaa .a./..aaa
+.a.//..aa. .a./..aa.
+.a.//..aa/ .a./..aa
+.a.//..a.a .a./..a.a
+.a.//..a.. .a./..a..
+.a.//..a./ .a./..a.
+.a.//..a/a .a./..a/a
+.a.//..a/. .a./..a
+.a.//..a// .a./..a
+.a.//...aa .a./...aa
+.a.//...a. .a./...a.
+.a.//...a/ .a./...a
+.a.//....a .a./....a
+.a.//..... .a./.....
+.a.//..../ .a./....
+.a.//.../a .a./.../a
+.a.//.../. .a./...
+.a.//...// .a./...
+.a.//../aa aa
+.a.//../a. a.
+.a.//../a/ a
+.a.//../.a .a
+.a.//../.. ..
+.a.//.././ .
+.a.//..//a a
+.a.//..//. .
+.a.//../// .
+.a.//./aaa .a./aaa
+.a.//./aa. .a./aa.
+.a.//./aa/ .a./aa
+.a.//./a.a .a./a.a
+.a.//./a.. .a./a..
+.a.//./a./ .a./a.
+.a.//./a/a .a./a/a
+.a.//./a/. .a./a
+.a.//./a// .a./a
+.a.//./.aa .a./.aa
+.a.//./.a. .a./.a.
+.a.//./.a/ .a./.a
+.a.//./..a .a./..a
+.a.//./... .a./...
+.a.//./../ .
+.a.//././a .a./a
+.a.//././. .a.
+.a.//./.// .a.
+.a.//.//aa .a./aa
+.a.//.//a. .a./a.
+.a.//.//a/ .a./a
+.a.//.//.a .a./.a
+.a.//.//.. .
+.a.//.//./ .a.
+.a.//.///a .a./a
+.a.//.///. .a.
+.a.//.//// .a.
+.a.///aaaa .a./aaaa
+.a.///aaa. .a./aaa.
+.a.///aaa/ .a./aaa
+.a.///aa.a .a./aa.a
+.a.///aa.. .a./aa..
+.a.///aa./ .a./aa.
+.a.///aa/a .a./aa/a
+.a.///aa/. .a./aa
+.a.///aa// .a./aa
+.a.///a.aa .a./a.aa
+.a.///a.a. .a./a.a.
+.a.///a.a/ .a./a.a
+.a.///a..a .a./a..a
+.a.///a... .a./a...
+.a.///a../ .a./a..
+.a.///a./a .a./a./a
+.a.///a./. .a./a.
+.a.///a.// .a./a.
+.a.///a/aa .a./a/aa
+.a.///a/a. .a./a/a.
+.a.///a/a/ .a./a/a
+.a.///a/.a .a./a/.a
+.a.///a/.. .a.
+.a.///a/./ .a./a
+.a.///a//a .a./a/a
+.a.///a//. .a./a
+.a.///a/// .a./a
+.a.///.aaa .a./.aaa
+.a.///.aa. .a./.aa.
+.a.///.aa/ .a./.aa
+.a.///.a.a .a./.a.a
+.a.///.a.. .a./.a..
+.a.///.a./ .a./.a.
+.a.///.a/a .a./.a/a
+.a.///.a/. .a./.a
+.a.///.a// .a./.a
+.a.///..aa .a./..aa
+.a.///..a. .a./..a.
+.a.///..a/ .a./..a
+.a.///...a .a./...a
+.a.///.... .a./....
+.a.///.../ .a./...
+.a.///../a a
+.a.///../. .
+.a.///..// .
+.a.///./aa .a./aa
+.a.///./a. .a./a.
+.a.///./a/ .a./a
+.a.///./.a .a./.a
+.a.///./.. .
+.a.///././ .a.
+.a.///.//a .a./a
+.a.///.//. .a.
+.a.///./// .a.
+.a.////aaa .a./aaa
+.a.////aa. .a./aa.
+.a.////aa/ .a./aa
+.a.////a.a .a./a.a
+.a.////a.. .a./a..
+.a.////a./ .a./a.
+.a.////a/a .a./a/a
+.a.////a/. .a./a
+.a.////a// .a./a
+.a.////.aa .a./.aa
+.a.////.a. .a./.a.
+.a.////.a/ .a./.a
+.a.////..a .a./..a
+.a.////... .a./...
+.a.////../ .
+.a.////./a .a./a
+.a.////./. .a.
+.a.////.// .a.
+.a./////aa .a./aa
+.a./////a. .a./a.
+.a./////a/ .a./a
+.a./////.a .a./.a
+.a./////.. .
+.a./////./ .a.
+.a.//////a .a./a
+.a.//////. .a.
+.a./////// .a.
+.a/aaaaaaa .a/aaaaaaa
+.a/aaaaaa. .a/aaaaaa.
+.a/aaaaaa/ .a/aaaaaa
+.a/aaaaa.a .a/aaaaa.a
+.a/aaaaa.. .a/aaaaa..
+.a/aaaaa./ .a/aaaaa.
+.a/aaaaa/a .a/aaaaa/a
+.a/aaaaa/. .a/aaaaa
+.a/aaaaa// .a/aaaaa
+.a/aaaa.aa .a/aaaa.aa
+.a/aaaa.a. .a/aaaa.a.
+.a/aaaa.a/ .a/aaaa.a
+.a/aaaa..a .a/aaaa..a
+.a/aaaa... .a/aaaa...
+.a/aaaa../ .a/aaaa..
+.a/aaaa./a .a/aaaa./a
+.a/aaaa./. .a/aaaa.
+.a/aaaa.// .a/aaaa.
+.a/aaaa/aa .a/aaaa/aa
+.a/aaaa/a. .a/aaaa/a.
+.a/aaaa/a/ .a/aaaa/a
+.a/aaaa/.a .a/aaaa/.a
+.a/aaaa/.. .a
+.a/aaaa/./ .a/aaaa
+.a/aaaa//a .a/aaaa/a
+.a/aaaa//. .a/aaaa
+.a/aaaa/// .a/aaaa
+.a/aaa.aaa .a/aaa.aaa
+.a/aaa.aa. .a/aaa.aa.
+.a/aaa.aa/ .a/aaa.aa
+.a/aaa.a.a .a/aaa.a.a
+.a/aaa.a.. .a/aaa.a..
+.a/aaa.a./ .a/aaa.a.
+.a/aaa.a/a .a/aaa.a/a
+.a/aaa.a/. .a/aaa.a
+.a/aaa.a// .a/aaa.a
+.a/aaa..aa .a/aaa..aa
+.a/aaa..a. .a/aaa..a.
+.a/aaa..a/ .a/aaa..a
+.a/aaa...a .a/aaa...a
+.a/aaa.... .a/aaa....
+.a/aaa.../ .a/aaa...
+.a/aaa../a .a/aaa../a
+.a/aaa../. .a/aaa..
+.a/aaa..// .a/aaa..
+.a/aaa./aa .a/aaa./aa
+.a/aaa./a. .a/aaa./a.
+.a/aaa./a/ .a/aaa./a
+.a/aaa./.a .a/aaa./.a
+.a/aaa./.. .a
+.a/aaa././ .a/aaa.
+.a/aaa.//a .a/aaa./a
+.a/aaa.//. .a/aaa.
+.a/aaa./// .a/aaa.
+.a/aaa/aaa .a/aaa/aaa
+.a/aaa/aa. .a/aaa/aa.
+.a/aaa/aa/ .a/aaa/aa
+.a/aaa/a.a .a/aaa/a.a
+.a/aaa/a.. .a/aaa/a..
+.a/aaa/a./ .a/aaa/a.
+.a/aaa/a/a .a/aaa/a/a
+.a/aaa/a/. .a/aaa/a
+.a/aaa/a// .a/aaa/a
+.a/aaa/.aa .a/aaa/.aa
+.a/aaa/.a. .a/aaa/.a.
+.a/aaa/.a/ .a/aaa/.a
+.a/aaa/..a .a/aaa/..a
+.a/aaa/... .a/aaa/...
+.a/aaa/../ .a
+.a/aaa/./a .a/aaa/a
+.a/aaa/./. .a/aaa
+.a/aaa/.// .a/aaa
+.a/aaa//aa .a/aaa/aa
+.a/aaa//a. .a/aaa/a.
+.a/aaa//a/ .a/aaa/a
+.a/aaa//.a .a/aaa/.a
+.a/aaa//.. .a
+.a/aaa//./ .a/aaa
+.a/aaa///a .a/aaa/a
+.a/aaa///. .a/aaa
+.a/aaa//// .a/aaa
+.a/aa.aaaa .a/aa.aaaa
+.a/aa.aaa. .a/aa.aaa.
+.a/aa.aaa/ .a/aa.aaa
+.a/aa.aa.a .a/aa.aa.a
+.a/aa.aa.. .a/aa.aa..
+.a/aa.aa./ .a/aa.aa.
+.a/aa.aa/a .a/aa.aa/a
+.a/aa.aa/. .a/aa.aa
+.a/aa.aa// .a/aa.aa
+.a/aa.a.aa .a/aa.a.aa
+.a/aa.a.a. .a/aa.a.a.
+.a/aa.a.a/ .a/aa.a.a
+.a/aa.a..a .a/aa.a..a
+.a/aa.a... .a/aa.a...
+.a/aa.a../ .a/aa.a..
+.a/aa.a./a .a/aa.a./a
+.a/aa.a./. .a/aa.a.
+.a/aa.a.// .a/aa.a.
+.a/aa.a/aa .a/aa.a/aa
+.a/aa.a/a. .a/aa.a/a.
+.a/aa.a/a/ .a/aa.a/a
+.a/aa.a/.a .a/aa.a/.a
+.a/aa.a/.. .a
+.a/aa.a/./ .a/aa.a
+.a/aa.a//a .a/aa.a/a
+.a/aa.a//. .a/aa.a
+.a/aa.a/// .a/aa.a
+.a/aa..aaa .a/aa..aaa
+.a/aa..aa. .a/aa..aa.
+.a/aa..aa/ .a/aa..aa
+.a/aa..a.a .a/aa..a.a
+.a/aa..a.. .a/aa..a..
+.a/aa..a./ .a/aa..a.
+.a/aa..a/a .a/aa..a/a
+.a/aa..a/. .a/aa..a
+.a/aa..a// .a/aa..a
+.a/aa...aa .a/aa...aa
+.a/aa...a. .a/aa...a.
+.a/aa...a/ .a/aa...a
+.a/aa....a .a/aa....a
+.a/aa..... .a/aa.....
+.a/aa..../ .a/aa....
+.a/aa.../a .a/aa.../a
+.a/aa.../. .a/aa...
+.a/aa...// .a/aa...
+.a/aa../aa .a/aa../aa
+.a/aa../a. .a/aa../a.
+.a/aa../a/ .a/aa../a
+.a/aa../.a .a/aa../.a
+.a/aa../.. .a
+.a/aa.././ .a/aa..
+.a/aa..//a .a/aa../a
+.a/aa..//. .a/aa..
+.a/aa../// .a/aa..
+.a/aa./aaa .a/aa./aaa
+.a/aa./aa. .a/aa./aa.
+.a/aa./aa/ .a/aa./aa
+.a/aa./a.a .a/aa./a.a
+.a/aa./a.. .a/aa./a..
+.a/aa./a./ .a/aa./a.
+.a/aa./a/a .a/aa./a/a
+.a/aa./a/. .a/aa./a
+.a/aa./a// .a/aa./a
+.a/aa./.aa .a/aa./.aa
+.a/aa./.a. .a/aa./.a.
+.a/aa./.a/ .a/aa./.a
+.a/aa./..a .a/aa./..a
+.a/aa./... .a/aa./...
+.a/aa./../ .a
+.a/aa././a .a/aa./a
+.a/aa././. .a/aa.
+.a/aa./.// .a/aa.
+.a/aa.//aa .a/aa./aa
+.a/aa.//a. .a/aa./a.
+.a/aa.//a/ .a/aa./a
+.a/aa.//.a .a/aa./.a
+.a/aa.//.. .a
+.a/aa.//./ .a/aa.
+.a/aa.///a .a/aa./a
+.a/aa.///. .a/aa.
+.a/aa.//// .a/aa.
+.a/aa/aaaa .a/aa/aaaa
+.a/aa/aaa. .a/aa/aaa.
+.a/aa/aaa/ .a/aa/aaa
+.a/aa/aa.a .a/aa/aa.a
+.a/aa/aa.. .a/aa/aa..
+.a/aa/aa./ .a/aa/aa.
+.a/aa/aa/a .a/aa/aa/a
+.a/aa/aa/. .a/aa/aa
+.a/aa/aa// .a/aa/aa
+.a/aa/a.aa .a/aa/a.aa
+.a/aa/a.a. .a/aa/a.a.
+.a/aa/a.a/ .a/aa/a.a
+.a/aa/a..a .a/aa/a..a
+.a/aa/a... .a/aa/a...
+.a/aa/a../ .a/aa/a..
+.a/aa/a./a .a/aa/a./a
+.a/aa/a./. .a/aa/a.
+.a/aa/a.// .a/aa/a.
+.a/aa/a/aa .a/aa/a/aa
+.a/aa/a/a. .a/aa/a/a.
+.a/aa/a/a/ .a/aa/a/a
+.a/aa/a/.a .a/aa/a/.a
+.a/aa/a/.. .a/aa
+.a/aa/a/./ .a/aa/a
+.a/aa/a//a .a/aa/a/a
+.a/aa/a//. .a/aa/a
+.a/aa/a/// .a/aa/a
+.a/aa/.aaa .a/aa/.aaa
+.a/aa/.aa. .a/aa/.aa.
+.a/aa/.aa/ .a/aa/.aa
+.a/aa/.a.a .a/aa/.a.a
+.a/aa/.a.. .a/aa/.a..
+.a/aa/.a./ .a/aa/.a.
+.a/aa/.a/a .a/aa/.a/a
+.a/aa/.a/. .a/aa/.a
+.a/aa/.a// .a/aa/.a
+.a/aa/..aa .a/aa/..aa
+.a/aa/..a. .a/aa/..a.
+.a/aa/..a/ .a/aa/..a
+.a/aa/...a .a/aa/...a
+.a/aa/.... .a/aa/....
+.a/aa/.../ .a/aa/...
+.a/aa/../a .a/a
+.a/aa/../. .a
+.a/aa/..// .a
+.a/aa/./aa .a/aa/aa
+.a/aa/./a. .a/aa/a.
+.a/aa/./a/ .a/aa/a
+.a/aa/./.a .a/aa/.a
+.a/aa/./.. .a
+.a/aa/././ .a/aa
+.a/aa/.//a .a/aa/a
+.a/aa/.//. .a/aa
+.a/aa/./// .a/aa
+.a/aa//aaa .a/aa/aaa
+.a/aa//aa. .a/aa/aa.
+.a/aa//aa/ .a/aa/aa
+.a/aa//a.a .a/aa/a.a
+.a/aa//a.. .a/aa/a..
+.a/aa//a./ .a/aa/a.
+.a/aa//a/a .a/aa/a/a
+.a/aa//a/. .a/aa/a
+.a/aa//a// .a/aa/a
+.a/aa//.aa .a/aa/.aa
+.a/aa//.a. .a/aa/.a.
+.a/aa//.a/ .a/aa/.a
+.a/aa//..a .a/aa/..a
+.a/aa//... .a/aa/...
+.a/aa//../ .a
+.a/aa//./a .a/aa/a
+.a/aa//./. .a/aa
+.a/aa//.// .a/aa
+.a/aa///aa .a/aa/aa
+.a/aa///a. .a/aa/a.
+.a/aa///a/ .a/aa/a
+.a/aa///.a .a/aa/.a
+.a/aa///.. .a
+.a/aa///./ .a/aa
+.a/aa////a .a/aa/a
+.a/aa////. .a/aa
+.a/aa///// .a/aa
+.a/a.aaaaa .a/a.aaaaa
+.a/a.aaaa. .a/a.aaaa.
+.a/a.aaaa/ .a/a.aaaa
+.a/a.aaa.a .a/a.aaa.a
+.a/a.aaa.. .a/a.aaa..
+.a/a.aaa./ .a/a.aaa.
+.a/a.aaa/a .a/a.aaa/a
+.a/a.aaa/. .a/a.aaa
+.a/a.aaa// .a/a.aaa
+.a/a.aa.aa .a/a.aa.aa
+.a/a.aa.a. .a/a.aa.a.
+.a/a.aa.a/ .a/a.aa.a
+.a/a.aa..a .a/a.aa..a
+.a/a.aa... .a/a.aa...
+.a/a.aa../ .a/a.aa..
+.a/a.aa./a .a/a.aa./a
+.a/a.aa./. .a/a.aa.
+.a/a.aa.// .a/a.aa.
+.a/a.aa/aa .a/a.aa/aa
+.a/a.aa/a. .a/a.aa/a.
+.a/a.aa/a/ .a/a.aa/a
+.a/a.aa/.a .a/a.aa/.a
+.a/a.aa/.. .a
+.a/a.aa/./ .a/a.aa
+.a/a.aa//a .a/a.aa/a
+.a/a.aa//. .a/a.aa
+.a/a.aa/// .a/a.aa
+.a/a.a.aaa .a/a.a.aaa
+.a/a.a.aa. .a/a.a.aa.
+.a/a.a.aa/ .a/a.a.aa
+.a/a.a.a.a .a/a.a.a.a
+.a/a.a.a.. .a/a.a.a..
+.a/a.a.a./ .a/a.a.a.
+.a/a.a.a/a .a/a.a.a/a
+.a/a.a.a/. .a/a.a.a
+.a/a.a.a// .a/a.a.a
+.a/a.a..aa .a/a.a..aa
+.a/a.a..a. .a/a.a..a.
+.a/a.a..a/ .a/a.a..a
+.a/a.a...a .a/a.a...a
+.a/a.a.... .a/a.a....
+.a/a.a.../ .a/a.a...
+.a/a.a../a .a/a.a../a
+.a/a.a../. .a/a.a..
+.a/a.a..// .a/a.a..
+.a/a.a./aa .a/a.a./aa
+.a/a.a./a. .a/a.a./a.
+.a/a.a./a/ .a/a.a./a
+.a/a.a./.a .a/a.a./.a
+.a/a.a./.. .a
+.a/a.a././ .a/a.a.
+.a/a.a.//a .a/a.a./a
+.a/a.a.//. .a/a.a.
+.a/a.a./// .a/a.a.
+.a/a.a/aaa .a/a.a/aaa
+.a/a.a/aa. .a/a.a/aa.
+.a/a.a/aa/ .a/a.a/aa
+.a/a.a/a.a .a/a.a/a.a
+.a/a.a/a.. .a/a.a/a..
+.a/a.a/a./ .a/a.a/a.
+.a/a.a/a/a .a/a.a/a/a
+.a/a.a/a/. .a/a.a/a
+.a/a.a/a// .a/a.a/a
+.a/a.a/.aa .a/a.a/.aa
+.a/a.a/.a. .a/a.a/.a.
+.a/a.a/.a/ .a/a.a/.a
+.a/a.a/..a .a/a.a/..a
+.a/a.a/... .a/a.a/...
+.a/a.a/../ .a
+.a/a.a/./a .a/a.a/a
+.a/a.a/./. .a/a.a
+.a/a.a/.// .a/a.a
+.a/a.a//aa .a/a.a/aa
+.a/a.a//a. .a/a.a/a.
+.a/a.a//a/ .a/a.a/a
+.a/a.a//.a .a/a.a/.a
+.a/a.a//.. .a
+.a/a.a//./ .a/a.a
+.a/a.a///a .a/a.a/a
+.a/a.a///. .a/a.a
+.a/a.a//// .a/a.a
+.a/a..aaaa .a/a..aaaa
+.a/a..aaa. .a/a..aaa.
+.a/a..aaa/ .a/a..aaa
+.a/a..aa.a .a/a..aa.a
+.a/a..aa.. .a/a..aa..
+.a/a..aa./ .a/a..aa.
+.a/a..aa/a .a/a..aa/a
+.a/a..aa/. .a/a..aa
+.a/a..aa// .a/a..aa
+.a/a..a.aa .a/a..a.aa
+.a/a..a.a. .a/a..a.a.
+.a/a..a.a/ .a/a..a.a
+.a/a..a..a .a/a..a..a
+.a/a..a... .a/a..a...
+.a/a..a../ .a/a..a..
+.a/a..a./a .a/a..a./a
+.a/a..a./. .a/a..a.
+.a/a..a.// .a/a..a.
+.a/a..a/aa .a/a..a/aa
+.a/a..a/a. .a/a..a/a.
+.a/a..a/a/ .a/a..a/a
+.a/a..a/.a .a/a..a/.a
+.a/a..a/.. .a
+.a/a..a/./ .a/a..a
+.a/a..a//a .a/a..a/a
+.a/a..a//. .a/a..a
+.a/a..a/// .a/a..a
+.a/a...aaa .a/a...aaa
+.a/a...aa. .a/a...aa.
+.a/a...aa/ .a/a...aa
+.a/a...a.a .a/a...a.a
+.a/a...a.. .a/a...a..
+.a/a...a./ .a/a...a.
+.a/a...a/a .a/a...a/a
+.a/a...a/. .a/a...a
+.a/a...a// .a/a...a
+.a/a....aa .a/a....aa
+.a/a....a. .a/a....a.
+.a/a....a/ .a/a....a
+.a/a.....a .a/a.....a
+.a/a...... .a/a......
+.a/a...../ .a/a.....
+.a/a..../a .a/a..../a
+.a/a..../. .a/a....
+.a/a....// .a/a....
+.a/a.../aa .a/a.../aa
+.a/a.../a. .a/a.../a.
+.a/a.../a/ .a/a.../a
+.a/a.../.a .a/a.../.a
+.a/a.../.. .a
+.a/a..././ .a/a...
+.a/a...//a .a/a.../a
+.a/a...//. .a/a...
+.a/a.../// .a/a...
+.a/a../aaa .a/a../aaa
+.a/a../aa. .a/a../aa.
+.a/a../aa/ .a/a../aa
+.a/a../a.a .a/a../a.a
+.a/a../a.. .a/a../a..
+.a/a../a./ .a/a../a.
+.a/a../a/a .a/a../a/a
+.a/a../a/. .a/a../a
+.a/a../a// .a/a../a
+.a/a../.aa .a/a../.aa
+.a/a../.a. .a/a../.a.
+.a/a../.a/ .a/a../.a
+.a/a../..a .a/a../..a
+.a/a../... .a/a../...
+.a/a../../ .a
+.a/a.././a .a/a../a
+.a/a.././. .a/a..
+.a/a../.// .a/a..
+.a/a..//aa .a/a../aa
+.a/a..//a. .a/a../a.
+.a/a..//a/ .a/a../a
+.a/a..//.a .a/a../.a
+.a/a..//.. .a
+.a/a..//./ .a/a..
+.a/a..///a .a/a../a
+.a/a..///. .a/a..
+.a/a..//// .a/a..
+.a/a./aaaa .a/a./aaaa
+.a/a./aaa. .a/a./aaa.
+.a/a./aaa/ .a/a./aaa
+.a/a./aa.a .a/a./aa.a
+.a/a./aa.. .a/a./aa..
+.a/a./aa./ .a/a./aa.
+.a/a./aa/a .a/a./aa/a
+.a/a./aa/. .a/a./aa
+.a/a./aa// .a/a./aa
+.a/a./a.aa .a/a./a.aa
+.a/a./a.a. .a/a./a.a.
+.a/a./a.a/ .a/a./a.a
+.a/a./a..a .a/a./a..a
+.a/a./a... .a/a./a...
+.a/a./a../ .a/a./a..
+.a/a./a./a .a/a./a./a
+.a/a./a./. .a/a./a.
+.a/a./a.// .a/a./a.
+.a/a./a/aa .a/a./a/aa
+.a/a./a/a. .a/a./a/a.
+.a/a./a/a/ .a/a./a/a
+.a/a./a/.a .a/a./a/.a
+.a/a./a/.. .a/a.
+.a/a./a/./ .a/a./a
+.a/a./a//a .a/a./a/a
+.a/a./a//. .a/a./a
+.a/a./a/// .a/a./a
+.a/a./.aaa .a/a./.aaa
+.a/a./.aa. .a/a./.aa.
+.a/a./.aa/ .a/a./.aa
+.a/a./.a.a .a/a./.a.a
+.a/a./.a.. .a/a./.a..
+.a/a./.a./ .a/a./.a.
+.a/a./.a/a .a/a./.a/a
+.a/a./.a/. .a/a./.a
+.a/a./.a// .a/a./.a
+.a/a./..aa .a/a./..aa
+.a/a./..a. .a/a./..a.
+.a/a./..a/ .a/a./..a
+.a/a./...a .a/a./...a
+.a/a./.... .a/a./....
+.a/a./.../ .a/a./...
+.a/a./../a .a/a
+.a/a./../. .a
+.a/a./..// .a
+.a/a././aa .a/a./aa
+.a/a././a. .a/a./a.
+.a/a././a/ .a/a./a
+.a/a././.a .a/a./.a
+.a/a././.. .a
+.a/a./././ .a/a.
+.a/a././/a .a/a./a
+.a/a././/. .a/a.
+.a/a././// .a/a.
+.a/a.//aaa .a/a./aaa
+.a/a.//aa. .a/a./aa.
+.a/a.//aa/ .a/a./aa
+.a/a.//a.a .a/a./a.a
+.a/a.//a.. .a/a./a..
+.a/a.//a./ .a/a./a.
+.a/a.//a/a .a/a./a/a
+.a/a.//a/. .a/a./a
+.a/a.//a// .a/a./a
+.a/a.//.aa .a/a./.aa
+.a/a.//.a. .a/a./.a.
+.a/a.//.a/ .a/a./.a
+.a/a.//..a .a/a./..a
+.a/a.//... .a/a./...
+.a/a.//../ .a
+.a/a.//./a .a/a./a
+.a/a.//./. .a/a.
+.a/a.//.// .a/a.
+.a/a.///aa .a/a./aa
+.a/a.///a. .a/a./a.
+.a/a.///a/ .a/a./a
+.a/a.///.a .a/a./.a
+.a/a.///.. .a
+.a/a.///./ .a/a.
+.a/a.////a .a/a./a
+.a/a.////. .a/a.
+.a/a.///// .a/a.
+.a/a/aaaaa .a/a/aaaaa
+.a/a/aaaa. .a/a/aaaa.
+.a/a/aaaa/ .a/a/aaaa
+.a/a/aaa.a .a/a/aaa.a
+.a/a/aaa.. .a/a/aaa..
+.a/a/aaa./ .a/a/aaa.
+.a/a/aaa/a .a/a/aaa/a
+.a/a/aaa/. .a/a/aaa
+.a/a/aaa// .a/a/aaa
+.a/a/aa.aa .a/a/aa.aa
+.a/a/aa.a. .a/a/aa.a.
+.a/a/aa.a/ .a/a/aa.a
+.a/a/aa..a .a/a/aa..a
+.a/a/aa... .a/a/aa...
+.a/a/aa../ .a/a/aa..
+.a/a/aa./a .a/a/aa./a
+.a/a/aa./. .a/a/aa.
+.a/a/aa.// .a/a/aa.
+.a/a/aa/aa .a/a/aa/aa
+.a/a/aa/a. .a/a/aa/a.
+.a/a/aa/a/ .a/a/aa/a
+.a/a/aa/.a .a/a/aa/.a
+.a/a/aa/.. .a/a
+.a/a/aa/./ .a/a/aa
+.a/a/aa//a .a/a/aa/a
+.a/a/aa//. .a/a/aa
+.a/a/aa/// .a/a/aa
+.a/a/a.aaa .a/a/a.aaa
+.a/a/a.aa. .a/a/a.aa.
+.a/a/a.aa/ .a/a/a.aa
+.a/a/a.a.a .a/a/a.a.a
+.a/a/a.a.. .a/a/a.a..
+.a/a/a.a./ .a/a/a.a.
+.a/a/a.a/a .a/a/a.a/a
+.a/a/a.a/. .a/a/a.a
+.a/a/a.a// .a/a/a.a
+.a/a/a..aa .a/a/a..aa
+.a/a/a..a. .a/a/a..a.
+.a/a/a..a/ .a/a/a..a
+.a/a/a...a .a/a/a...a
+.a/a/a.... .a/a/a....
+.a/a/a.../ .a/a/a...
+.a/a/a../a .a/a/a../a
+.a/a/a../. .a/a/a..
+.a/a/a..// .a/a/a..
+.a/a/a./aa .a/a/a./aa
+.a/a/a./a. .a/a/a./a.
+.a/a/a./a/ .a/a/a./a
+.a/a/a./.a .a/a/a./.a
+.a/a/a./.. .a/a
+.a/a/a././ .a/a/a.
+.a/a/a.//a .a/a/a./a
+.a/a/a.//. .a/a/a.
+.a/a/a./// .a/a/a.
+.a/a/a/aaa .a/a/a/aaa
+.a/a/a/aa. .a/a/a/aa.
+.a/a/a/aa/ .a/a/a/aa
+.a/a/a/a.a .a/a/a/a.a
+.a/a/a/a.. .a/a/a/a..
+.a/a/a/a./ .a/a/a/a.
+.a/a/a/a/a .a/a/a/a/a
+.a/a/a/a/. .a/a/a/a
+.a/a/a/a// .a/a/a/a
+.a/a/a/.aa .a/a/a/.aa
+.a/a/a/.a. .a/a/a/.a.
+.a/a/a/.a/ .a/a/a/.a
+.a/a/a/..a .a/a/a/..a
+.a/a/a/... .a/a/a/...
+.a/a/a/../ .a/a
+.a/a/a/./a .a/a/a/a
+.a/a/a/./. .a/a/a
+.a/a/a/.// .a/a/a
+.a/a/a//aa .a/a/a/aa
+.a/a/a//a. .a/a/a/a.
+.a/a/a//a/ .a/a/a/a
+.a/a/a//.a .a/a/a/.a
+.a/a/a//.. .a/a
+.a/a/a//./ .a/a/a
+.a/a/a///a .a/a/a/a
+.a/a/a///. .a/a/a
+.a/a/a//// .a/a/a
+.a/a/.aaaa .a/a/.aaaa
+.a/a/.aaa. .a/a/.aaa.
+.a/a/.aaa/ .a/a/.aaa
+.a/a/.aa.a .a/a/.aa.a
+.a/a/.aa.. .a/a/.aa..
+.a/a/.aa./ .a/a/.aa.
+.a/a/.aa/a .a/a/.aa/a
+.a/a/.aa/. .a/a/.aa
+.a/a/.aa// .a/a/.aa
+.a/a/.a.aa .a/a/.a.aa
+.a/a/.a.a. .a/a/.a.a.
+.a/a/.a.a/ .a/a/.a.a
+.a/a/.a..a .a/a/.a..a
+.a/a/.a... .a/a/.a...
+.a/a/.a../ .a/a/.a..
+.a/a/.a./a .a/a/.a./a
+.a/a/.a./. .a/a/.a.
+.a/a/.a.// .a/a/.a.
+.a/a/.a/aa .a/a/.a/aa
+.a/a/.a/a. .a/a/.a/a.
+.a/a/.a/a/ .a/a/.a/a
+.a/a/.a/.a .a/a/.a/.a
+.a/a/.a/.. .a/a
+.a/a/.a/./ .a/a/.a
+.a/a/.a//a .a/a/.a/a
+.a/a/.a//. .a/a/.a
+.a/a/.a/// .a/a/.a
+.a/a/..aaa .a/a/..aaa
+.a/a/..aa. .a/a/..aa.
+.a/a/..aa/ .a/a/..aa
+.a/a/..a.a .a/a/..a.a
+.a/a/..a.. .a/a/..a..
+.a/a/..a./ .a/a/..a.
+.a/a/..a/a .a/a/..a/a
+.a/a/..a/. .a/a/..a
+.a/a/..a// .a/a/..a
+.a/a/...aa .a/a/...aa
+.a/a/...a. .a/a/...a.
+.a/a/...a/ .a/a/...a
+.a/a/....a .a/a/....a
+.a/a/..... .a/a/.....
+.a/a/..../ .a/a/....
+.a/a/.../a .a/a/.../a
+.a/a/.../. .a/a/...
+.a/a/...// .a/a/...
+.a/a/../aa .a/aa
+.a/a/../a. .a/a.
+.a/a/../a/ .a/a
+.a/a/../.a .a/.a
+.a/a/../.. .
+.a/a/.././ .a
+.a/a/..//a .a/a
+.a/a/..//. .a
+.a/a/../// .a
+.a/a/./aaa .a/a/aaa
+.a/a/./aa. .a/a/aa.
+.a/a/./aa/ .a/a/aa
+.a/a/./a.a .a/a/a.a
+.a/a/./a.. .a/a/a..
+.a/a/./a./ .a/a/a.
+.a/a/./a/a .a/a/a/a
+.a/a/./a/. .a/a/a
+.a/a/./a// .a/a/a
+.a/a/./.aa .a/a/.aa
+.a/a/./.a. .a/a/.a.
+.a/a/./.a/ .a/a/.a
+.a/a/./..a .a/a/..a
+.a/a/./... .a/a/...
+.a/a/./../ .a
+.a/a/././a .a/a/a
+.a/a/././. .a/a
+.a/a/./.// .a/a
+.a/a/.//aa .a/a/aa
+.a/a/.//a. .a/a/a.
+.a/a/.//a/ .a/a/a
+.a/a/.//.a .a/a/.a
+.a/a/.//.. .a
+.a/a/.//./ .a/a
+.a/a/.///a .a/a/a
+.a/a/.///. .a/a
+.a/a/.//// .a/a
+.a/a//aaaa .a/a/aaaa
+.a/a//aaa. .a/a/aaa.
+.a/a//aaa/ .a/a/aaa
+.a/a//aa.a .a/a/aa.a
+.a/a//aa.. .a/a/aa..
+.a/a//aa./ .a/a/aa.
+.a/a//aa/a .a/a/aa/a
+.a/a//aa/. .a/a/aa
+.a/a//aa// .a/a/aa
+.a/a//a.aa .a/a/a.aa
+.a/a//a.a. .a/a/a.a.
+.a/a//a.a/ .a/a/a.a
+.a/a//a..a .a/a/a..a
+.a/a//a... .a/a/a...
+.a/a//a../ .a/a/a..
+.a/a//a./a .a/a/a./a
+.a/a//a./. .a/a/a.
+.a/a//a.// .a/a/a.
+.a/a//a/aa .a/a/a/aa
+.a/a//a/a. .a/a/a/a.
+.a/a//a/a/ .a/a/a/a
+.a/a//a/.a .a/a/a/.a
+.a/a//a/.. .a/a
+.a/a//a/./ .a/a/a
+.a/a//a//a .a/a/a/a
+.a/a//a//. .a/a/a
+.a/a//a/// .a/a/a
+.a/a//.aaa .a/a/.aaa
+.a/a//.aa. .a/a/.aa.
+.a/a//.aa/ .a/a/.aa
+.a/a//.a.a .a/a/.a.a
+.a/a//.a.. .a/a/.a..
+.a/a//.a./ .a/a/.a.
+.a/a//.a/a .a/a/.a/a
+.a/a//.a/. .a/a/.a
+.a/a//.a// .a/a/.a
+.a/a//..aa .a/a/..aa
+.a/a//..a. .a/a/..a.
+.a/a//..a/ .a/a/..a
+.a/a//...a .a/a/...a
+.a/a//.... .a/a/....
+.a/a//.../ .a/a/...
+.a/a//../a .a/a
+.a/a//../. .a
+.a/a//..// .a
+.a/a//./aa .a/a/aa
+.a/a//./a. .a/a/a.
+.a/a//./a/ .a/a/a
+.a/a//./.a .a/a/.a
+.a/a//./.. .a
+.a/a//././ .a/a
+.a/a//.//a .a/a/a
+.a/a//.//. .a/a
+.a/a//./// .a/a
+.a/a///aaa .a/a/aaa
+.a/a///aa. .a/a/aa.
+.a/a///aa/ .a/a/aa
+.a/a///a.a .a/a/a.a
+.a/a///a.. .a/a/a..
+.a/a///a./ .a/a/a.
+.a/a///a/a .a/a/a/a
+.a/a///a/. .a/a/a
+.a/a///a// .a/a/a
+.a/a///.aa .a/a/.aa
+.a/a///.a. .a/a/.a.
+.a/a///.a/ .a/a/.a
+.a/a///..a .a/a/..a
+.a/a///... .a/a/...
+.a/a///../ .a
+.a/a///./a .a/a/a
+.a/a///./. .a/a
+.a/a///.// .a/a
+.a/a////aa .a/a/aa
+.a/a////a. .a/a/a.
+.a/a////a/ .a/a/a
+.a/a////.a .a/a/.a
+.a/a////.. .a
+.a/a////./ .a/a
+.a/a/////a .a/a/a
+.a/a/////. .a/a
+.a/a////// .a/a
+.a/.aaaaaa .a/.aaaaaa
+.a/.aaaaa. .a/.aaaaa.
+.a/.aaaaa/ .a/.aaaaa
+.a/.aaaa.a .a/.aaaa.a
+.a/.aaaa.. .a/.aaaa..
+.a/.aaaa./ .a/.aaaa.
+.a/.aaaa/a .a/.aaaa/a
+.a/.aaaa/. .a/.aaaa
+.a/.aaaa// .a/.aaaa
+.a/.aaa.aa .a/.aaa.aa
+.a/.aaa.a. .a/.aaa.a.
+.a/.aaa.a/ .a/.aaa.a
+.a/.aaa..a .a/.aaa..a
+.a/.aaa... .a/.aaa...
+.a/.aaa../ .a/.aaa..
+.a/.aaa./a .a/.aaa./a
+.a/.aaa./. .a/.aaa.
+.a/.aaa.// .a/.aaa.
+.a/.aaa/aa .a/.aaa/aa
+.a/.aaa/a. .a/.aaa/a.
+.a/.aaa/a/ .a/.aaa/a
+.a/.aaa/.a .a/.aaa/.a
+.a/.aaa/.. .a
+.a/.aaa/./ .a/.aaa
+.a/.aaa//a .a/.aaa/a
+.a/.aaa//. .a/.aaa
+.a/.aaa/// .a/.aaa
+.a/.aa.aaa .a/.aa.aaa
+.a/.aa.aa. .a/.aa.aa.
+.a/.aa.aa/ .a/.aa.aa
+.a/.aa.a.a .a/.aa.a.a
+.a/.aa.a.. .a/.aa.a..
+.a/.aa.a./ .a/.aa.a.
+.a/.aa.a/a .a/.aa.a/a
+.a/.aa.a/. .a/.aa.a
+.a/.aa.a// .a/.aa.a
+.a/.aa..aa .a/.aa..aa
+.a/.aa..a. .a/.aa..a.
+.a/.aa..a/ .a/.aa..a
+.a/.aa...a .a/.aa...a
+.a/.aa.... .a/.aa....
+.a/.aa.../ .a/.aa...
+.a/.aa../a .a/.aa../a
+.a/.aa../. .a/.aa..
+.a/.aa..// .a/.aa..
+.a/.aa./aa .a/.aa./aa
+.a/.aa./a. .a/.aa./a.
+.a/.aa./a/ .a/.aa./a
+.a/.aa./.a .a/.aa./.a
+.a/.aa./.. .a
+.a/.aa././ .a/.aa.
+.a/.aa.//a .a/.aa./a
+.a/.aa.//. .a/.aa.
+.a/.aa./// .a/.aa.
+.a/.aa/aaa .a/.aa/aaa
+.a/.aa/aa. .a/.aa/aa.
+.a/.aa/aa/ .a/.aa/aa
+.a/.aa/a.a .a/.aa/a.a
+.a/.aa/a.. .a/.aa/a..
+.a/.aa/a./ .a/.aa/a.
+.a/.aa/a/a .a/.aa/a/a
+.a/.aa/a/. .a/.aa/a
+.a/.aa/a// .a/.aa/a
+.a/.aa/.aa .a/.aa/.aa
+.a/.aa/.a. .a/.aa/.a.
+.a/.aa/.a/ .a/.aa/.a
+.a/.aa/..a .a/.aa/..a
+.a/.aa/... .a/.aa/...
+.a/.aa/../ .a
+.a/.aa/./a .a/.aa/a
+.a/.aa/./. .a/.aa
+.a/.aa/.// .a/.aa
+.a/.aa//aa .a/.aa/aa
+.a/.aa//a. .a/.aa/a.
+.a/.aa//a/ .a/.aa/a
+.a/.aa//.a .a/.aa/.a
+.a/.aa//.. .a
+.a/.aa//./ .a/.aa
+.a/.aa///a .a/.aa/a
+.a/.aa///. .a/.aa
+.a/.aa//// .a/.aa
+.a/.a.aaaa .a/.a.aaaa
+.a/.a.aaa. .a/.a.aaa.
+.a/.a.aaa/ .a/.a.aaa
+.a/.a.aa.a .a/.a.aa.a
+.a/.a.aa.. .a/.a.aa..
+.a/.a.aa./ .a/.a.aa.
+.a/.a.aa/a .a/.a.aa/a
+.a/.a.aa/. .a/.a.aa
+.a/.a.aa// .a/.a.aa
+.a/.a.a.aa .a/.a.a.aa
+.a/.a.a.a. .a/.a.a.a.
+.a/.a.a.a/ .a/.a.a.a
+.a/.a.a..a .a/.a.a..a
+.a/.a.a... .a/.a.a...
+.a/.a.a../ .a/.a.a..
+.a/.a.a./a .a/.a.a./a
+.a/.a.a./. .a/.a.a.
+.a/.a.a.// .a/.a.a.
+.a/.a.a/aa .a/.a.a/aa
+.a/.a.a/a. .a/.a.a/a.
+.a/.a.a/a/ .a/.a.a/a
+.a/.a.a/.a .a/.a.a/.a
+.a/.a.a/.. .a
+.a/.a.a/./ .a/.a.a
+.a/.a.a//a .a/.a.a/a
+.a/.a.a//. .a/.a.a
+.a/.a.a/// .a/.a.a
+.a/.a..aaa .a/.a..aaa
+.a/.a..aa. .a/.a..aa.
+.a/.a..aa/ .a/.a..aa
+.a/.a..a.a .a/.a..a.a
+.a/.a..a.. .a/.a..a..
+.a/.a..a./ .a/.a..a.
+.a/.a..a/a .a/.a..a/a
+.a/.a..a/. .a/.a..a
+.a/.a..a// .a/.a..a
+.a/.a...aa .a/.a...aa
+.a/.a...a. .a/.a...a.
+.a/.a...a/ .a/.a...a
+.a/.a....a .a/.a....a
+.a/.a..... .a/.a.....
+.a/.a..../ .a/.a....
+.a/.a.../a .a/.a.../a
+.a/.a.../. .a/.a...
+.a/.a...// .a/.a...
+.a/.a../aa .a/.a../aa
+.a/.a../a. .a/.a../a.
+.a/.a../a/ .a/.a../a
+.a/.a../.a .a/.a../.a
+.a/.a../.. .a
+.a/.a.././ .a/.a..
+.a/.a..//a .a/.a../a
+.a/.a..//. .a/.a..
+.a/.a../// .a/.a..
+.a/.a./aaa .a/.a./aaa
+.a/.a./aa. .a/.a./aa.
+.a/.a./aa/ .a/.a./aa
+.a/.a./a.a .a/.a./a.a
+.a/.a./a.. .a/.a./a..
+.a/.a./a./ .a/.a./a.
+.a/.a./a/a .a/.a./a/a
+.a/.a./a/. .a/.a./a
+.a/.a./a// .a/.a./a
+.a/.a./.aa .a/.a./.aa
+.a/.a./.a. .a/.a./.a.
+.a/.a./.a/ .a/.a./.a
+.a/.a./..a .a/.a./..a
+.a/.a./... .a/.a./...
+.a/.a./../ .a
+.a/.a././a .a/.a./a
+.a/.a././. .a/.a.
+.a/.a./.// .a/.a.
+.a/.a.//aa .a/.a./aa
+.a/.a.//a. .a/.a./a.
+.a/.a.//a/ .a/.a./a
+.a/.a.//.a .a/.a./.a
+.a/.a.//.. .a
+.a/.a.//./ .a/.a.
+.a/.a.///a .a/.a./a
+.a/.a.///. .a/.a.
+.a/.a.//// .a/.a.
+.a/.a/aaaa .a/.a/aaaa
+.a/.a/aaa. .a/.a/aaa.
+.a/.a/aaa/ .a/.a/aaa
+.a/.a/aa.a .a/.a/aa.a
+.a/.a/aa.. .a/.a/aa..
+.a/.a/aa./ .a/.a/aa.
+.a/.a/aa/a .a/.a/aa/a
+.a/.a/aa/. .a/.a/aa
+.a/.a/aa// .a/.a/aa
+.a/.a/a.aa .a/.a/a.aa
+.a/.a/a.a. .a/.a/a.a.
+.a/.a/a.a/ .a/.a/a.a
+.a/.a/a..a .a/.a/a..a
+.a/.a/a... .a/.a/a...
+.a/.a/a../ .a/.a/a..
+.a/.a/a./a .a/.a/a./a
+.a/.a/a./. .a/.a/a.
+.a/.a/a.// .a/.a/a.
+.a/.a/a/aa .a/.a/a/aa
+.a/.a/a/a. .a/.a/a/a.
+.a/.a/a/a/ .a/.a/a/a
+.a/.a/a/.a .a/.a/a/.a
+.a/.a/a/.. .a/.a
+.a/.a/a/./ .a/.a/a
+.a/.a/a//a .a/.a/a/a
+.a/.a/a//. .a/.a/a
+.a/.a/a/// .a/.a/a
+.a/.a/.aaa .a/.a/.aaa
+.a/.a/.aa. .a/.a/.aa.
+.a/.a/.aa/ .a/.a/.aa
+.a/.a/.a.a .a/.a/.a.a
+.a/.a/.a.. .a/.a/.a..
+.a/.a/.a./ .a/.a/.a.
+.a/.a/.a/a .a/.a/.a/a
+.a/.a/.a/. .a/.a/.a
+.a/.a/.a// .a/.a/.a
+.a/.a/..aa .a/.a/..aa
+.a/.a/..a. .a/.a/..a.
+.a/.a/..a/ .a/.a/..a
+.a/.a/...a .a/.a/...a
+.a/.a/.... .a/.a/....
+.a/.a/.../ .a/.a/...
+.a/.a/../a .a/a
+.a/.a/../. .a
+.a/.a/..// .a
+.a/.a/./aa .a/.a/aa
+.a/.a/./a. .a/.a/a.
+.a/.a/./a/ .a/.a/a
+.a/.a/./.a .a/.a/.a
+.a/.a/./.. .a
+.a/.a/././ .a/.a
+.a/.a/.//a .a/.a/a
+.a/.a/.//. .a/.a
+.a/.a/./// .a/.a
+.a/.a//aaa .a/.a/aaa
+.a/.a//aa. .a/.a/aa.
+.a/.a//aa/ .a/.a/aa
+.a/.a//a.a .a/.a/a.a
+.a/.a//a.. .a/.a/a..
+.a/.a//a./ .a/.a/a.
+.a/.a//a/a .a/.a/a/a
+.a/.a//a/. .a/.a/a
+.a/.a//a// .a/.a/a
+.a/.a//.aa .a/.a/.aa
+.a/.a//.a. .a/.a/.a.
+.a/.a//.a/ .a/.a/.a
+.a/.a//..a .a/.a/..a
+.a/.a//... .a/.a/...
+.a/.a//../ .a
+.a/.a//./a .a/.a/a
+.a/.a//./. .a/.a
+.a/.a//.// .a/.a
+.a/.a///aa .a/.a/aa
+.a/.a///a. .a/.a/a.
+.a/.a///a/ .a/.a/a
+.a/.a///.a .a/.a/.a
+.a/.a///.. .a
+.a/.a///./ .a/.a
+.a/.a////a .a/.a/a
+.a/.a////. .a/.a
+.a/.a///// .a/.a
+.a/..aaaaa .a/..aaaaa
+.a/..aaaa. .a/..aaaa.
+.a/..aaaa/ .a/..aaaa
+.a/..aaa.a .a/..aaa.a
+.a/..aaa.. .a/..aaa..
+.a/..aaa./ .a/..aaa.
+.a/..aaa/a .a/..aaa/a
+.a/..aaa/. .a/..aaa
+.a/..aaa// .a/..aaa
+.a/..aa.aa .a/..aa.aa
+.a/..aa.a. .a/..aa.a.
+.a/..aa.a/ .a/..aa.a
+.a/..aa..a .a/..aa..a
+.a/..aa... .a/..aa...
+.a/..aa../ .a/..aa..
+.a/..aa./a .a/..aa./a
+.a/..aa./. .a/..aa.
+.a/..aa.// .a/..aa.
+.a/..aa/aa .a/..aa/aa
+.a/..aa/a. .a/..aa/a.
+.a/..aa/a/ .a/..aa/a
+.a/..aa/.a .a/..aa/.a
+.a/..aa/.. .a
+.a/..aa/./ .a/..aa
+.a/..aa//a .a/..aa/a
+.a/..aa//. .a/..aa
+.a/..aa/// .a/..aa
+.a/..a.aaa .a/..a.aaa
+.a/..a.aa. .a/..a.aa.
+.a/..a.aa/ .a/..a.aa
+.a/..a.a.a .a/..a.a.a
+.a/..a.a.. .a/..a.a..
+.a/..a.a./ .a/..a.a.
+.a/..a.a/a .a/..a.a/a
+.a/..a.a/. .a/..a.a
+.a/..a.a// .a/..a.a
+.a/..a..aa .a/..a..aa
+.a/..a..a. .a/..a..a.
+.a/..a..a/ .a/..a..a
+.a/..a...a .a/..a...a
+.a/..a.... .a/..a....
+.a/..a.../ .a/..a...
+.a/..a../a .a/..a../a
+.a/..a../. .a/..a..
+.a/..a..// .a/..a..
+.a/..a./aa .a/..a./aa
+.a/..a./a. .a/..a./a.
+.a/..a./a/ .a/..a./a
+.a/..a./.a .a/..a./.a
+.a/..a./.. .a
+.a/..a././ .a/..a.
+.a/..a.//a .a/..a./a
+.a/..a.//. .a/..a.
+.a/..a./// .a/..a.
+.a/..a/aaa .a/..a/aaa
+.a/..a/aa. .a/..a/aa.
+.a/..a/aa/ .a/..a/aa
+.a/..a/a.a .a/..a/a.a
+.a/..a/a.. .a/..a/a..
+.a/..a/a./ .a/..a/a.
+.a/..a/a/a .a/..a/a/a
+.a/..a/a/. .a/..a/a
+.a/..a/a// .a/..a/a
+.a/..a/.aa .a/..a/.aa
+.a/..a/.a. .a/..a/.a.
+.a/..a/.a/ .a/..a/.a
+.a/..a/..a .a/..a/..a
+.a/..a/... .a/..a/...
+.a/..a/../ .a
+.a/..a/./a .a/..a/a
+.a/..a/./. .a/..a
+.a/..a/.// .a/..a
+.a/..a//aa .a/..a/aa
+.a/..a//a. .a/..a/a.
+.a/..a//a/ .a/..a/a
+.a/..a//.a .a/..a/.a
+.a/..a//.. .a
+.a/..a//./ .a/..a
+.a/..a///a .a/..a/a
+.a/..a///. .a/..a
+.a/..a//// .a/..a
+.a/...aaaa .a/...aaaa
+.a/...aaa. .a/...aaa.
+.a/...aaa/ .a/...aaa
+.a/...aa.a .a/...aa.a
+.a/...aa.. .a/...aa..
+.a/...aa./ .a/...aa.
+.a/...aa/a .a/...aa/a
+.a/...aa/. .a/...aa
+.a/...aa// .a/...aa
+.a/...a.aa .a/...a.aa
+.a/...a.a. .a/...a.a.
+.a/...a.a/ .a/...a.a
+.a/...a..a .a/...a..a
+.a/...a... .a/...a...
+.a/...a../ .a/...a..
+.a/...a./a .a/...a./a
+.a/...a./. .a/...a.
+.a/...a.// .a/...a.
+.a/...a/aa .a/...a/aa
+.a/...a/a. .a/...a/a.
+.a/...a/a/ .a/...a/a
+.a/...a/.a .a/...a/.a
+.a/...a/.. .a
+.a/...a/./ .a/...a
+.a/...a//a .a/...a/a
+.a/...a//. .a/...a
+.a/...a/// .a/...a
+.a/....aaa .a/....aaa
+.a/....aa. .a/....aa.
+.a/....aa/ .a/....aa
+.a/....a.a .a/....a.a
+.a/....a.. .a/....a..
+.a/....a./ .a/....a.
+.a/....a/a .a/....a/a
+.a/....a/. .a/....a
+.a/....a// .a/....a
+.a/.....aa .a/.....aa
+.a/.....a. .a/.....a.
+.a/.....a/ .a/.....a
+.a/......a .a/......a
+.a/....... .a/.......
+.a/....../ .a/......
+.a/...../a .a/...../a
+.a/...../. .a/.....
+.a/.....// .a/.....
+.a/..../aa .a/..../aa
+.a/..../a. .a/..../a.
+.a/..../a/ .a/..../a
+.a/..../.a .a/..../.a
+.a/..../.. .a
+.a/...././ .a/....
+.a/....//a .a/..../a
+.a/....//. .a/....
+.a/..../// .a/....
+.a/.../aaa .a/.../aaa
+.a/.../aa. .a/.../aa.
+.a/.../aa/ .a/.../aa
+.a/.../a.a .a/.../a.a
+.a/.../a.. .a/.../a..
+.a/.../a./ .a/.../a.
+.a/.../a/a .a/.../a/a
+.a/.../a/. .a/.../a
+.a/.../a// .a/.../a
+.a/.../.aa .a/.../.aa
+.a/.../.a. .a/.../.a.
+.a/.../.a/ .a/.../.a
+.a/.../..a .a/.../..a
+.a/.../... .a/.../...
+.a/.../../ .a
+.a/..././a .a/.../a
+.a/..././. .a/...
+.a/.../.// .a/...
+.a/...//aa .a/.../aa
+.a/...//a. .a/.../a.
+.a/...//a/ .a/.../a
+.a/...//.a .a/.../.a
+.a/...//.. .a
+.a/...//./ .a/...
+.a/...///a .a/.../a
+.a/...///. .a/...
+.a/...//// .a/...
+.a/../aaaa aaaa
+.a/../aaa. aaa.
+.a/../aaa/ aaa
+.a/../aa.a aa.a
+.a/../aa.. aa..
+.a/../aa./ aa.
+.a/../aa/a aa/a
+.a/../aa/. aa
+.a/../aa// aa
+.a/../a.aa a.aa
+.a/../a.a. a.a.
+.a/../a.a/ a.a
+.a/../a..a a..a
+.a/../a... a...
+.a/../a../ a..
+.a/../a./a a./a
+.a/../a./. a.
+.a/../a.// a.
+.a/../a/aa a/aa
+.a/../a/a. a/a.
+.a/../a/a/ a/a
+.a/../a/.a a/.a
+.a/../a/.. .
+.a/../a/./ a
+.a/../a//a a/a
+.a/../a//. a
+.a/../a/// a
+.a/../.aaa .aaa
+.a/../.aa. .aa.
+.a/../.aa/ .aa
+.a/../.a.a .a.a
+.a/../.a.. .a..
+.a/../.a./ .a.
+.a/../.a/a .a/a
+.a/../.a/. .a
+.a/../.a// .a
+.a/../..aa ..aa
+.a/../..a. ..a.
+.a/../..a/ ..a
+.a/../...a ...a
+.a/../.... ....
+.a/../.../ ...
+.a/../../a ../a
+.a/../../. ..
+.a/../..// ..
+.a/.././aa aa
+.a/.././a. a.
+.a/.././a/ a
+.a/.././.a .a
+.a/.././.. ..
+.a/../././ .
+.a/.././/a a
+.a/.././/. .
+.a/.././// .
+.a/..//aaa aaa
+.a/..//aa. aa.
+.a/..//aa/ aa
+.a/..//a.a a.a
+.a/..//a.. a..
+.a/..//a./ a.
+.a/..//a/a a/a
+.a/..//a/. a
+.a/..//a// a
+.a/..//.aa .aa
+.a/..//.a. .a.
+.a/..//.a/ .a
+.a/..//..a ..a
+.a/..//... ...
+.a/..//../ ..
+.a/..//./a a
+.a/..//./. .
+.a/..//.// .
+.a/..///aa aa
+.a/..///a. a.
+.a/..///a/ a
+.a/..///.a .a
+.a/..///.. ..
+.a/..///./ .
+.a/..////a a
+.a/..////. .
+.a/..///// .
+.a/./aaaaa .a/aaaaa
+.a/./aaaa. .a/aaaa.
+.a/./aaaa/ .a/aaaa
+.a/./aaa.a .a/aaa.a
+.a/./aaa.. .a/aaa..
+.a/./aaa./ .a/aaa.
+.a/./aaa/a .a/aaa/a
+.a/./aaa/. .a/aaa
+.a/./aaa// .a/aaa
+.a/./aa.aa .a/aa.aa
+.a/./aa.a. .a/aa.a.
+.a/./aa.a/ .a/aa.a
+.a/./aa..a .a/aa..a
+.a/./aa... .a/aa...
+.a/./aa../ .a/aa..
+.a/./aa./a .a/aa./a
+.a/./aa./. .a/aa.
+.a/./aa.// .a/aa.
+.a/./aa/aa .a/aa/aa
+.a/./aa/a. .a/aa/a.
+.a/./aa/a/ .a/aa/a
+.a/./aa/.a .a/aa/.a
+.a/./aa/.. .a
+.a/./aa/./ .a/aa
+.a/./aa//a .a/aa/a
+.a/./aa//. .a/aa
+.a/./aa/// .a/aa
+.a/./a.aaa .a/a.aaa
+.a/./a.aa. .a/a.aa.
+.a/./a.aa/ .a/a.aa
+.a/./a.a.a .a/a.a.a
+.a/./a.a.. .a/a.a..
+.a/./a.a./ .a/a.a.
+.a/./a.a/a .a/a.a/a
+.a/./a.a/. .a/a.a
+.a/./a.a// .a/a.a
+.a/./a..aa .a/a..aa
+.a/./a..a. .a/a..a.
+.a/./a..a/ .a/a..a
+.a/./a...a .a/a...a
+.a/./a.... .a/a....
+.a/./a.../ .a/a...
+.a/./a../a .a/a../a
+.a/./a../. .a/a..
+.a/./a..// .a/a..
+.a/./a./aa .a/a./aa
+.a/./a./a. .a/a./a.
+.a/./a./a/ .a/a./a
+.a/./a./.a .a/a./.a
+.a/./a./.. .a
+.a/./a././ .a/a.
+.a/./a.//a .a/a./a
+.a/./a.//. .a/a.
+.a/./a./// .a/a.
+.a/./a/aaa .a/a/aaa
+.a/./a/aa. .a/a/aa.
+.a/./a/aa/ .a/a/aa
+.a/./a/a.a .a/a/a.a
+.a/./a/a.. .a/a/a..
+.a/./a/a./ .a/a/a.
+.a/./a/a/a .a/a/a/a
+.a/./a/a/. .a/a/a
+.a/./a/a// .a/a/a
+.a/./a/.aa .a/a/.aa
+.a/./a/.a. .a/a/.a.
+.a/./a/.a/ .a/a/.a
+.a/./a/..a .a/a/..a
+.a/./a/... .a/a/...
+.a/./a/../ .a
+.a/./a/./a .a/a/a
+.a/./a/./. .a/a
+.a/./a/.// .a/a
+.a/./a//aa .a/a/aa
+.a/./a//a. .a/a/a.
+.a/./a//a/ .a/a/a
+.a/./a//.a .a/a/.a
+.a/./a//.. .a
+.a/./a//./ .a/a
+.a/./a///a .a/a/a
+.a/./a///. .a/a
+.a/./a//// .a/a
+.a/./.aaaa .a/.aaaa
+.a/./.aaa. .a/.aaa.
+.a/./.aaa/ .a/.aaa
+.a/./.aa.a .a/.aa.a
+.a/./.aa.. .a/.aa..
+.a/./.aa./ .a/.aa.
+.a/./.aa/a .a/.aa/a
+.a/./.aa/. .a/.aa
+.a/./.aa// .a/.aa
+.a/./.a.aa .a/.a.aa
+.a/./.a.a. .a/.a.a.
+.a/./.a.a/ .a/.a.a
+.a/./.a..a .a/.a..a
+.a/./.a... .a/.a...
+.a/./.a../ .a/.a..
+.a/./.a./a .a/.a./a
+.a/./.a./. .a/.a.
+.a/./.a.// .a/.a.
+.a/./.a/aa .a/.a/aa
+.a/./.a/a. .a/.a/a.
+.a/./.a/a/ .a/.a/a
+.a/./.a/.a .a/.a/.a
+.a/./.a/.. .a
+.a/./.a/./ .a/.a
+.a/./.a//a .a/.a/a
+.a/./.a//. .a/.a
+.a/./.a/// .a/.a
+.a/./..aaa .a/..aaa
+.a/./..aa. .a/..aa.
+.a/./..aa/ .a/..aa
+.a/./..a.a .a/..a.a
+.a/./..a.. .a/..a..
+.a/./..a./ .a/..a.
+.a/./..a/a .a/..a/a
+.a/./..a/. .a/..a
+.a/./..a// .a/..a
+.a/./...aa .a/...aa
+.a/./...a. .a/...a.
+.a/./...a/ .a/...a
+.a/./....a .a/....a
+.a/./..... .a/.....
+.a/./..../ .a/....
+.a/./.../a .a/.../a
+.a/./.../. .a/...
+.a/./...// .a/...
+.a/./../aa aa
+.a/./../a. a.
+.a/./../a/ a
+.a/./../.a .a
+.a/./../.. ..
+.a/./.././ .
+.a/./..//a a
+.a/./..//. .
+.a/./../// .
+.a/././aaa .a/aaa
+.a/././aa. .a/aa.
+.a/././aa/ .a/aa
+.a/././a.a .a/a.a
+.a/././a.. .a/a..
+.a/././a./ .a/a.
+.a/././a/a .a/a/a
+.a/././a/. .a/a
+.a/././a// .a/a
+.a/././.aa .a/.aa
+.a/././.a. .a/.a.
+.a/././.a/ .a/.a
+.a/././..a .a/..a
+.a/././... .a/...
+.a/././../ .
+.a/./././a .a/a
+.a/./././. .a
+.a/././.// .a
+.a/././/aa .a/aa
+.a/././/a. .a/a.
+.a/././/a/ .a/a
+.a/././/.a .a/.a
+.a/././/.. .
+.a/././/./ .a
+.a/././//a .a/a
+.a/././//. .a
+.a/././/// .a
+.a/.//aaaa .a/aaaa
+.a/.//aaa. .a/aaa.
+.a/.//aaa/ .a/aaa
+.a/.//aa.a .a/aa.a
+.a/.//aa.. .a/aa..
+.a/.//aa./ .a/aa.
+.a/.//aa/a .a/aa/a
+.a/.//aa/. .a/aa
+.a/.//aa// .a/aa
+.a/.//a.aa .a/a.aa
+.a/.//a.a. .a/a.a.
+.a/.//a.a/ .a/a.a
+.a/.//a..a .a/a..a
+.a/.//a... .a/a...
+.a/.//a../ .a/a..
+.a/.//a./a .a/a./a
+.a/.//a./. .a/a.
+.a/.//a.// .a/a.
+.a/.//a/aa .a/a/aa
+.a/.//a/a. .a/a/a.
+.a/.//a/a/ .a/a/a
+.a/.//a/.a .a/a/.a
+.a/.//a/.. .a
+.a/.//a/./ .a/a
+.a/.//a//a .a/a/a
+.a/.//a//. .a/a
+.a/.//a/// .a/a
+.a/.//.aaa .a/.aaa
+.a/.//.aa. .a/.aa.
+.a/.//.aa/ .a/.aa
+.a/.//.a.a .a/.a.a
+.a/.//.a.. .a/.a..
+.a/.//.a./ .a/.a.
+.a/.//.a/a .a/.a/a
+.a/.//.a/. .a/.a
+.a/.//.a// .a/.a
+.a/.//..aa .a/..aa
+.a/.//..a. .a/..a.
+.a/.//..a/ .a/..a
+.a/.//...a .a/...a
+.a/.//.... .a/....
+.a/.//.../ .a/...
+.a/.//../a a
+.a/.//../. .
+.a/.//..// .
+.a/.//./aa .a/aa
+.a/.//./a. .a/a.
+.a/.//./a/ .a/a
+.a/.//./.a .a/.a
+.a/.//./.. .
+.a/.//././ .a
+.a/.//.//a .a/a
+.a/.//.//. .a
+.a/.//./// .a
+.a/.///aaa .a/aaa
+.a/.///aa. .a/aa.
+.a/.///aa/ .a/aa
+.a/.///a.a .a/a.a
+.a/.///a.. .a/a..
+.a/.///a./ .a/a.
+.a/.///a/a .a/a/a
+.a/.///a/. .a/a
+.a/.///a// .a/a
+.a/.///.aa .a/.aa
+.a/.///.a. .a/.a.
+.a/.///.a/ .a/.a
+.a/.///..a .a/..a
+.a/.///... .a/...
+.a/.///../ .
+.a/.///./a .a/a
+.a/.///./. .a
+.a/.///.// .a
+.a/.////aa .a/aa
+.a/.////a. .a/a.
+.a/.////a/ .a/a
+.a/.////.a .a/.a
+.a/.////.. .
+.a/.////./ .a
+.a/./////a .a/a
+.a/./////. .a
+.a/.////// .a
+.a//aaaaaa .a/aaaaaa
+.a//aaaaa. .a/aaaaa.
+.a//aaaaa/ .a/aaaaa
+.a//aaaa.a .a/aaaa.a
+.a//aaaa.. .a/aaaa..
+.a//aaaa./ .a/aaaa.
+.a//aaaa/a .a/aaaa/a
+.a//aaaa/. .a/aaaa
+.a//aaaa// .a/aaaa
+.a//aaa.aa .a/aaa.aa
+.a//aaa.a. .a/aaa.a.
+.a//aaa.a/ .a/aaa.a
+.a//aaa..a .a/aaa..a
+.a//aaa... .a/aaa...
+.a//aaa../ .a/aaa..
+.a//aaa./a .a/aaa./a
+.a//aaa./. .a/aaa.
+.a//aaa.// .a/aaa.
+.a//aaa/aa .a/aaa/aa
+.a//aaa/a. .a/aaa/a.
+.a//aaa/a/ .a/aaa/a
+.a//aaa/.a .a/aaa/.a
+.a//aaa/.. .a
+.a//aaa/./ .a/aaa
+.a//aaa//a .a/aaa/a
+.a//aaa//. .a/aaa
+.a//aaa/// .a/aaa
+.a//aa.aaa .a/aa.aaa
+.a//aa.aa. .a/aa.aa.
+.a//aa.aa/ .a/aa.aa
+.a//aa.a.a .a/aa.a.a
+.a//aa.a.. .a/aa.a..
+.a//aa.a./ .a/aa.a.
+.a//aa.a/a .a/aa.a/a
+.a//aa.a/. .a/aa.a
+.a//aa.a// .a/aa.a
+.a//aa..aa .a/aa..aa
+.a//aa..a. .a/aa..a.
+.a//aa..a/ .a/aa..a
+.a//aa...a .a/aa...a
+.a//aa.... .a/aa....
+.a//aa.../ .a/aa...
+.a//aa../a .a/aa../a
+.a//aa../. .a/aa..
+.a//aa..// .a/aa..
+.a//aa./aa .a/aa./aa
+.a//aa./a. .a/aa./a.
+.a//aa./a/ .a/aa./a
+.a//aa./.a .a/aa./.a
+.a//aa./.. .a
+.a//aa././ .a/aa.
+.a//aa.//a .a/aa./a
+.a//aa.//. .a/aa.
+.a//aa./// .a/aa.
+.a//aa/aaa .a/aa/aaa
+.a//aa/aa. .a/aa/aa.
+.a//aa/aa/ .a/aa/aa
+.a//aa/a.a .a/aa/a.a
+.a//aa/a.. .a/aa/a..
+.a//aa/a./ .a/aa/a.
+.a//aa/a/a .a/aa/a/a
+.a//aa/a/. .a/aa/a
+.a//aa/a// .a/aa/a
+.a//aa/.aa .a/aa/.aa
+.a//aa/.a. .a/aa/.a.
+.a//aa/.a/ .a/aa/.a
+.a//aa/..a .a/aa/..a
+.a//aa/... .a/aa/...
+.a//aa/../ .a
+.a//aa/./a .a/aa/a
+.a//aa/./. .a/aa
+.a//aa/.// .a/aa
+.a//aa//aa .a/aa/aa
+.a//aa//a. .a/aa/a.
+.a//aa//a/ .a/aa/a
+.a//aa//.a .a/aa/.a
+.a//aa//.. .a
+.a//aa//./ .a/aa
+.a//aa///a .a/aa/a
+.a//aa///. .a/aa
+.a//aa//// .a/aa
+.a//a.aaaa .a/a.aaaa
+.a//a.aaa. .a/a.aaa.
+.a//a.aaa/ .a/a.aaa
+.a//a.aa.a .a/a.aa.a
+.a//a.aa.. .a/a.aa..
+.a//a.aa./ .a/a.aa.
+.a//a.aa/a .a/a.aa/a
+.a//a.aa/. .a/a.aa
+.a//a.aa// .a/a.aa
+.a//a.a.aa .a/a.a.aa
+.a//a.a.a. .a/a.a.a.
+.a//a.a.a/ .a/a.a.a
+.a//a.a..a .a/a.a..a
+.a//a.a... .a/a.a...
+.a//a.a../ .a/a.a..
+.a//a.a./a .a/a.a./a
+.a//a.a./. .a/a.a.
+.a//a.a.// .a/a.a.
+.a//a.a/aa .a/a.a/aa
+.a//a.a/a. .a/a.a/a.
+.a//a.a/a/ .a/a.a/a
+.a//a.a/.a .a/a.a/.a
+.a//a.a/.. .a
+.a//a.a/./ .a/a.a
+.a//a.a//a .a/a.a/a
+.a//a.a//. .a/a.a
+.a//a.a/// .a/a.a
+.a//a..aaa .a/a..aaa
+.a//a..aa. .a/a..aa.
+.a//a..aa/ .a/a..aa
+.a//a..a.a .a/a..a.a
+.a//a..a.. .a/a..a..
+.a//a..a./ .a/a..a.
+.a//a..a/a .a/a..a/a
+.a//a..a/. .a/a..a
+.a//a..a// .a/a..a
+.a//a...aa .a/a...aa
+.a//a...a. .a/a...a.
+.a//a...a/ .a/a...a
+.a//a....a .a/a....a
+.a//a..... .a/a.....
+.a//a..../ .a/a....
+.a//a.../a .a/a.../a
+.a//a.../. .a/a...
+.a//a...// .a/a...
+.a//a../aa .a/a../aa
+.a//a../a. .a/a../a.
+.a//a../a/ .a/a../a
+.a//a../.a .a/a../.a
+.a//a../.. .a
+.a//a.././ .a/a..
+.a//a..//a .a/a../a
+.a//a..//. .a/a..
+.a//a../// .a/a..
+.a//a./aaa .a/a./aaa
+.a//a./aa. .a/a./aa.
+.a//a./aa/ .a/a./aa
+.a//a./a.a .a/a./a.a
+.a//a./a.. .a/a./a..
+.a//a./a./ .a/a./a.
+.a//a./a/a .a/a./a/a
+.a//a./a/. .a/a./a
+.a//a./a// .a/a./a
+.a//a./.aa .a/a./.aa
+.a//a./.a. .a/a./.a.
+.a//a./.a/ .a/a./.a
+.a//a./..a .a/a./..a
+.a//a./... .a/a./...
+.a//a./../ .a
+.a//a././a .a/a./a
+.a//a././. .a/a.
+.a//a./.// .a/a.
+.a//a.//aa .a/a./aa
+.a//a.//a. .a/a./a.
+.a//a.//a/ .a/a./a
+.a//a.//.a .a/a./.a
+.a//a.//.. .a
+.a//a.//./ .a/a.
+.a//a.///a .a/a./a
+.a//a.///. .a/a.
+.a//a.//// .a/a.
+.a//a/aaaa .a/a/aaaa
+.a//a/aaa. .a/a/aaa.
+.a//a/aaa/ .a/a/aaa
+.a//a/aa.a .a/a/aa.a
+.a//a/aa.. .a/a/aa..
+.a//a/aa./ .a/a/aa.
+.a//a/aa/a .a/a/aa/a
+.a//a/aa/. .a/a/aa
+.a//a/aa// .a/a/aa
+.a//a/a.aa .a/a/a.aa
+.a//a/a.a. .a/a/a.a.
+.a//a/a.a/ .a/a/a.a
+.a//a/a..a .a/a/a..a
+.a//a/a... .a/a/a...
+.a//a/a../ .a/a/a..
+.a//a/a./a .a/a/a./a
+.a//a/a./. .a/a/a.
+.a//a/a.// .a/a/a.
+.a//a/a/aa .a/a/a/aa
+.a//a/a/a. .a/a/a/a.
+.a//a/a/a/ .a/a/a/a
+.a//a/a/.a .a/a/a/.a
+.a//a/a/.. .a/a
+.a//a/a/./ .a/a/a
+.a//a/a//a .a/a/a/a
+.a//a/a//. .a/a/a
+.a//a/a/// .a/a/a
+.a//a/.aaa .a/a/.aaa
+.a//a/.aa. .a/a/.aa.
+.a//a/.aa/ .a/a/.aa
+.a//a/.a.a .a/a/.a.a
+.a//a/.a.. .a/a/.a..
+.a//a/.a./ .a/a/.a.
+.a//a/.a/a .a/a/.a/a
+.a//a/.a/. .a/a/.a
+.a//a/.a// .a/a/.a
+.a//a/..aa .a/a/..aa
+.a//a/..a. .a/a/..a.
+.a//a/..a/ .a/a/..a
+.a//a/...a .a/a/...a
+.a//a/.... .a/a/....
+.a//a/.../ .a/a/...
+.a//a/../a .a/a
+.a//a/../. .a
+.a//a/..// .a
+.a//a/./aa .a/a/aa
+.a//a/./a. .a/a/a.
+.a//a/./a/ .a/a/a
+.a//a/./.a .a/a/.a
+.a//a/./.. .a
+.a//a/././ .a/a
+.a//a/.//a .a/a/a
+.a//a/.//. .a/a
+.a//a/./// .a/a
+.a//a//aaa .a/a/aaa
+.a//a//aa. .a/a/aa.
+.a//a//aa/ .a/a/aa
+.a//a//a.a .a/a/a.a
+.a//a//a.. .a/a/a..
+.a//a//a./ .a/a/a.
+.a//a//a/a .a/a/a/a
+.a//a//a/. .a/a/a
+.a//a//a// .a/a/a
+.a//a//.aa .a/a/.aa
+.a//a//.a. .a/a/.a.
+.a//a//.a/ .a/a/.a
+.a//a//..a .a/a/..a
+.a//a//... .a/a/...
+.a//a//../ .a
+.a//a//./a .a/a/a
+.a//a//./. .a/a
+.a//a//.// .a/a
+.a//a///aa .a/a/aa
+.a//a///a. .a/a/a.
+.a//a///a/ .a/a/a
+.a//a///.a .a/a/.a
+.a//a///.. .a
+.a//a///./ .a/a
+.a//a////a .a/a/a
+.a//a////. .a/a
+.a//a///// .a/a
+.a//.aaaaa .a/.aaaaa
+.a//.aaaa. .a/.aaaa.
+.a//.aaaa/ .a/.aaaa
+.a//.aaa.a .a/.aaa.a
+.a//.aaa.. .a/.aaa..
+.a//.aaa./ .a/.aaa.
+.a//.aaa/a .a/.aaa/a
+.a//.aaa/. .a/.aaa
+.a//.aaa// .a/.aaa
+.a//.aa.aa .a/.aa.aa
+.a//.aa.a. .a/.aa.a.
+.a//.aa.a/ .a/.aa.a
+.a//.aa..a .a/.aa..a
+.a//.aa... .a/.aa...
+.a//.aa../ .a/.aa..
+.a//.aa./a .a/.aa./a
+.a//.aa./. .a/.aa.
+.a//.aa.// .a/.aa.
+.a//.aa/aa .a/.aa/aa
+.a//.aa/a. .a/.aa/a.
+.a//.aa/a/ .a/.aa/a
+.a//.aa/.a .a/.aa/.a
+.a//.aa/.. .a
+.a//.aa/./ .a/.aa
+.a//.aa//a .a/.aa/a
+.a//.aa//. .a/.aa
+.a//.aa/// .a/.aa
+.a//.a.aaa .a/.a.aaa
+.a//.a.aa. .a/.a.aa.
+.a//.a.aa/ .a/.a.aa
+.a//.a.a.a .a/.a.a.a
+.a//.a.a.. .a/.a.a..
+.a//.a.a./ .a/.a.a.
+.a//.a.a/a .a/.a.a/a
+.a//.a.a/. .a/.a.a
+.a//.a.a// .a/.a.a
+.a//.a..aa .a/.a..aa
+.a//.a..a. .a/.a..a.
+.a//.a..a/ .a/.a..a
+.a//.a...a .a/.a...a
+.a//.a.... .a/.a....
+.a//.a.../ .a/.a...
+.a//.a../a .a/.a../a
+.a//.a../. .a/.a..
+.a//.a..// .a/.a..
+.a//.a./aa .a/.a./aa
+.a//.a./a. .a/.a./a.
+.a//.a./a/ .a/.a./a
+.a//.a./.a .a/.a./.a
+.a//.a./.. .a
+.a//.a././ .a/.a.
+.a//.a.//a .a/.a./a
+.a//.a.//. .a/.a.
+.a//.a./// .a/.a.
+.a//.a/aaa .a/.a/aaa
+.a//.a/aa. .a/.a/aa.
+.a//.a/aa/ .a/.a/aa
+.a//.a/a.a .a/.a/a.a
+.a//.a/a.. .a/.a/a..
+.a//.a/a./ .a/.a/a.
+.a//.a/a/a .a/.a/a/a
+.a//.a/a/. .a/.a/a
+.a//.a/a// .a/.a/a
+.a//.a/.aa .a/.a/.aa
+.a//.a/.a. .a/.a/.a.
+.a//.a/.a/ .a/.a/.a
+.a//.a/..a .a/.a/..a
+.a//.a/... .a/.a/...
+.a//.a/../ .a
+.a//.a/./a .a/.a/a
+.a//.a/./. .a/.a
+.a//.a/.// .a/.a
+.a//.a//aa .a/.a/aa
+.a//.a//a. .a/.a/a.
+.a//.a//a/ .a/.a/a
+.a//.a//.a .a/.a/.a
+.a//.a//.. .a
+.a//.a//./ .a/.a
+.a//.a///a .a/.a/a
+.a//.a///. .a/.a
+.a//.a//// .a/.a
+.a//..aaaa .a/..aaaa
+.a//..aaa. .a/..aaa.
+.a//..aaa/ .a/..aaa
+.a//..aa.a .a/..aa.a
+.a//..aa.. .a/..aa..
+.a//..aa./ .a/..aa.
+.a//..aa/a .a/..aa/a
+.a//..aa/. .a/..aa
+.a//..aa// .a/..aa
+.a//..a.aa .a/..a.aa
+.a//..a.a. .a/..a.a.
+.a//..a.a/ .a/..a.a
+.a//..a..a .a/..a..a
+.a//..a... .a/..a...
+.a//..a../ .a/..a..
+.a//..a./a .a/..a./a
+.a//..a./. .a/..a.
+.a//..a.// .a/..a.
+.a//..a/aa .a/..a/aa
+.a//..a/a. .a/..a/a.
+.a//..a/a/ .a/..a/a
+.a//..a/.a .a/..a/.a
+.a//..a/.. .a
+.a//..a/./ .a/..a
+.a//..a//a .a/..a/a
+.a//..a//. .a/..a
+.a//..a/// .a/..a
+.a//...aaa .a/...aaa
+.a//...aa. .a/...aa.
+.a//...aa/ .a/...aa
+.a//...a.a .a/...a.a
+.a//...a.. .a/...a..
+.a//...a./ .a/...a.
+.a//...a/a .a/...a/a
+.a//...a/. .a/...a
+.a//...a// .a/...a
+.a//....aa .a/....aa
+.a//....a. .a/....a.
+.a//....a/ .a/....a
+.a//.....a .a/.....a
+.a//...... .a/......
+.a//...../ .a/.....
+.a//..../a .a/..../a
+.a//..../. .a/....
+.a//....// .a/....
+.a//.../aa .a/.../aa
+.a//.../a. .a/.../a.
+.a//.../a/ .a/.../a
+.a//.../.a .a/.../.a
+.a//.../.. .a
+.a//..././ .a/...
+.a//...//a .a/.../a
+.a//...//. .a/...
+.a//.../// .a/...
+.a//../aaa aaa
+.a//../aa. aa.
+.a//../aa/ aa
+.a//../a.a a.a
+.a//../a.. a..
+.a//../a./ a.
+.a//../a/a a/a
+.a//../a/. a
+.a//../a// a
+.a//../.aa .aa
+.a//../.a. .a.
+.a//../.a/ .a
+.a//../..a ..a
+.a//../... ...
+.a//../../ ..
+.a//.././a a
+.a//.././. .
+.a//../.// .
+.a//..//aa aa
+.a//..//a. a.
+.a//..//a/ a
+.a//..//.a .a
+.a//..//.. ..
+.a//..//./ .
+.a//..///a a
+.a//..///. .
+.a//..//// .
+.a//./aaaa .a/aaaa
+.a//./aaa. .a/aaa.
+.a//./aaa/ .a/aaa
+.a//./aa.a .a/aa.a
+.a//./aa.. .a/aa..
+.a//./aa./ .a/aa.
+.a//./aa/a .a/aa/a
+.a//./aa/. .a/aa
+.a//./aa// .a/aa
+.a//./a.aa .a/a.aa
+.a//./a.a. .a/a.a.
+.a//./a.a/ .a/a.a
+.a//./a..a .a/a..a
+.a//./a... .a/a...
+.a//./a../ .a/a..
+.a//./a./a .a/a./a
+.a//./a./. .a/a.
+.a//./a.// .a/a.
+.a//./a/aa .a/a/aa
+.a//./a/a. .a/a/a.
+.a//./a/a/ .a/a/a
+.a//./a/.a .a/a/.a
+.a//./a/.. .a
+.a//./a/./ .a/a
+.a//./a//a .a/a/a
+.a//./a//. .a/a
+.a//./a/// .a/a
+.a//./.aaa .a/.aaa
+.a//./.aa. .a/.aa.
+.a//./.aa/ .a/.aa
+.a//./.a.a .a/.a.a
+.a//./.a.. .a/.a..
+.a//./.a./ .a/.a.
+.a//./.a/a .a/.a/a
+.a//./.a/. .a/.a
+.a//./.a// .a/.a
+.a//./..aa .a/..aa
+.a//./..a. .a/..a.
+.a//./..a/ .a/..a
+.a//./...a .a/...a
+.a//./.... .a/....
+.a//./.../ .a/...
+.a//./../a a
+.a//./../. .
+.a//./..// .
+.a//././aa .a/aa
+.a//././a. .a/a.
+.a//././a/ .a/a
+.a//././.a .a/.a
+.a//././.. .
+.a//./././ .a
+.a//././/a .a/a
+.a//././/. .a
+.a//././// .a
+.a//.//aaa .a/aaa
+.a//.//aa. .a/aa.
+.a//.//aa/ .a/aa
+.a//.//a.a .a/a.a
+.a//.//a.. .a/a..
+.a//.//a./ .a/a.
+.a//.//a/a .a/a/a
+.a//.//a/. .a/a
+.a//.//a// .a/a
+.a//.//.aa .a/.aa
+.a//.//.a. .a/.a.
+.a//.//.a/ .a/.a
+.a//.//..a .a/..a
+.a//.//... .a/...
+.a//.//../ .
+.a//.//./a .a/a
+.a//.//./. .a
+.a//.//.// .a
+.a//.///aa .a/aa
+.a//.///a. .a/a.
+.a//.///a/ .a/a
+.a//.///.a .a/.a
+.a//.///.. .
+.a//.///./ .a
+.a//.////a .a/a
+.a//.////. .a
+.a//.///// .a
+.a///aaaaa .a/aaaaa
+.a///aaaa. .a/aaaa.
+.a///aaaa/ .a/aaaa
+.a///aaa.a .a/aaa.a
+.a///aaa.. .a/aaa..
+.a///aaa./ .a/aaa.
+.a///aaa/a .a/aaa/a
+.a///aaa/. .a/aaa
+.a///aaa// .a/aaa
+.a///aa.aa .a/aa.aa
+.a///aa.a. .a/aa.a.
+.a///aa.a/ .a/aa.a
+.a///aa..a .a/aa..a
+.a///aa... .a/aa...
+.a///aa../ .a/aa..
+.a///aa./a .a/aa./a
+.a///aa./. .a/aa.
+.a///aa.// .a/aa.
+.a///aa/aa .a/aa/aa
+.a///aa/a. .a/aa/a.
+.a///aa/a/ .a/aa/a
+.a///aa/.a .a/aa/.a
+.a///aa/.. .a
+.a///aa/./ .a/aa
+.a///aa//a .a/aa/a
+.a///aa//. .a/aa
+.a///aa/// .a/aa
+.a///a.aaa .a/a.aaa
+.a///a.aa. .a/a.aa.
+.a///a.aa/ .a/a.aa
+.a///a.a.a .a/a.a.a
+.a///a.a.. .a/a.a..
+.a///a.a./ .a/a.a.
+.a///a.a/a .a/a.a/a
+.a///a.a/. .a/a.a
+.a///a.a// .a/a.a
+.a///a..aa .a/a..aa
+.a///a..a. .a/a..a.
+.a///a..a/ .a/a..a
+.a///a...a .a/a...a
+.a///a.... .a/a....
+.a///a.../ .a/a...
+.a///a../a .a/a../a
+.a///a../. .a/a..
+.a///a..// .a/a..
+.a///a./aa .a/a./aa
+.a///a./a. .a/a./a.
+.a///a./a/ .a/a./a
+.a///a./.a .a/a./.a
+.a///a./.. .a
+.a///a././ .a/a.
+.a///a.//a .a/a./a
+.a///a.//. .a/a.
+.a///a./// .a/a.
+.a///a/aaa .a/a/aaa
+.a///a/aa. .a/a/aa.
+.a///a/aa/ .a/a/aa
+.a///a/a.a .a/a/a.a
+.a///a/a.. .a/a/a..
+.a///a/a./ .a/a/a.
+.a///a/a/a .a/a/a/a
+.a///a/a/. .a/a/a
+.a///a/a// .a/a/a
+.a///a/.aa .a/a/.aa
+.a///a/.a. .a/a/.a.
+.a///a/.a/ .a/a/.a
+.a///a/..a .a/a/..a
+.a///a/... .a/a/...
+.a///a/../ .a
+.a///a/./a .a/a/a
+.a///a/./. .a/a
+.a///a/.// .a/a
+.a///a//aa .a/a/aa
+.a///a//a. .a/a/a.
+.a///a//a/ .a/a/a
+.a///a//.a .a/a/.a
+.a///a//.. .a
+.a///a//./ .a/a
+.a///a///a .a/a/a
+.a///a///. .a/a
+.a///a//// .a/a
+.a///.aaaa .a/.aaaa
+.a///.aaa. .a/.aaa.
+.a///.aaa/ .a/.aaa
+.a///.aa.a .a/.aa.a
+.a///.aa.. .a/.aa..
+.a///.aa./ .a/.aa.
+.a///.aa/a .a/.aa/a
+.a///.aa/. .a/.aa
+.a///.aa// .a/.aa
+.a///.a.aa .a/.a.aa
+.a///.a.a. .a/.a.a.
+.a///.a.a/ .a/.a.a
+.a///.a..a .a/.a..a
+.a///.a... .a/.a...
+.a///.a../ .a/.a..
+.a///.a./a .a/.a./a
+.a///.a./. .a/.a.
+.a///.a.// .a/.a.
+.a///.a/aa .a/.a/aa
+.a///.a/a. .a/.a/a.
+.a///.a/a/ .a/.a/a
+.a///.a/.a .a/.a/.a
+.a///.a/.. .a
+.a///.a/./ .a/.a
+.a///.a//a .a/.a/a
+.a///.a//. .a/.a
+.a///.a/// .a/.a
+.a///..aaa .a/..aaa
+.a///..aa. .a/..aa.
+.a///..aa/ .a/..aa
+.a///..a.a .a/..a.a
+.a///..a.. .a/..a..
+.a///..a./ .a/..a.
+.a///..a/a .a/..a/a
+.a///..a/. .a/..a
+.a///..a// .a/..a
+.a///...aa .a/...aa
+.a///...a. .a/...a.
+.a///...a/ .a/...a
+.a///....a .a/....a
+.a///..... .a/.....
+.a///..../ .a/....
+.a///.../a .a/.../a
+.a///.../. .a/...
+.a///...// .a/...
+.a///../aa aa
+.a///../a. a.
+.a///../a/ a
+.a///../.a .a
+.a///../.. ..
+.a///.././ .
+.a///..//a a
+.a///..//. .
+.a///../// .
+.a///./aaa .a/aaa
+.a///./aa. .a/aa.
+.a///./aa/ .a/aa
+.a///./a.a .a/a.a
+.a///./a.. .a/a..
+.a///./a./ .a/a.
+.a///./a/a .a/a/a
+.a///./a/. .a/a
+.a///./a// .a/a
+.a///./.aa .a/.aa
+.a///./.a. .a/.a.
+.a///./.a/ .a/.a
+.a///./..a .a/..a
+.a///./... .a/...
+.a///./../ .
+.a///././a .a/a
+.a///././. .a
+.a///./.// .a
+.a///.//aa .a/aa
+.a///.//a. .a/a.
+.a///.//a/ .a/a
+.a///.//.a .a/.a
+.a///.//.. .
+.a///.//./ .a
+.a///.///a .a/a
+.a///.///. .a
+.a///.//// .a
+.a////aaaa .a/aaaa
+.a////aaa. .a/aaa.
+.a////aaa/ .a/aaa
+.a////aa.a .a/aa.a
+.a////aa.. .a/aa..
+.a////aa./ .a/aa.
+.a////aa/a .a/aa/a
+.a////aa/. .a/aa
+.a////aa// .a/aa
+.a////a.aa .a/a.aa
+.a////a.a. .a/a.a.
+.a////a.a/ .a/a.a
+.a////a..a .a/a..a
+.a////a... .a/a...
+.a////a../ .a/a..
+.a////a./a .a/a./a
+.a////a./. .a/a.
+.a////a.// .a/a.
+.a////a/aa .a/a/aa
+.a////a/a. .a/a/a.
+.a////a/a/ .a/a/a
+.a////a/.a .a/a/.a
+.a////a/.. .a
+.a////a/./ .a/a
+.a////a//a .a/a/a
+.a////a//. .a/a
+.a////a/// .a/a
+.a////.aaa .a/.aaa
+.a////.aa. .a/.aa.
+.a////.aa/ .a/.aa
+.a////.a.a .a/.a.a
+.a////.a.. .a/.a..
+.a////.a./ .a/.a.
+.a////.a/a .a/.a/a
+.a////.a/. .a/.a
+.a////.a// .a/.a
+.a////..aa .a/..aa
+.a////..a. .a/..a.
+.a////..a/ .a/..a
+.a////...a .a/...a
+.a////.... .a/....
+.a////.../ .a/...
+.a////../a a
+.a////../. .
+.a////..// .
+.a////./aa .a/aa
+.a////./a. .a/a.
+.a////./a/ .a/a
+.a////./.a .a/.a
+.a////./.. .
+.a////././ .a
+.a////.//a .a/a
+.a////.//. .a
+.a////./// .a
+.a/////aaa .a/aaa
+.a/////aa. .a/aa.
+.a/////aa/ .a/aa
+.a/////a.a .a/a.a
+.a/////a.. .a/a..
+.a/////a./ .a/a.
+.a/////a/a .a/a/a
+.a/////a/. .a/a
+.a/////a// .a/a
+.a/////.aa .a/.aa
+.a/////.a. .a/.a.
+.a/////.a/ .a/.a
+.a/////..a .a/..a
+.a/////... .a/...
+.a/////../ .
+.a/////./a .a/a
+.a/////./. .a
+.a/////.// .a
+.a//////aa .a/aa
+.a//////a. .a/a.
+.a//////a/ .a/a
+.a//////.a .a/.a
+.a//////.. .
+.a//////./ .a
+.a///////a .a/a
+.a///////. .a
+.a//////// .a
+..aaaaaaaa ..aaaaaaaa
+..aaaaaaa. ..aaaaaaa.
+..aaaaaaa/ ..aaaaaaa
+..aaaaaa.a ..aaaaaa.a
+..aaaaaa.. ..aaaaaa..
+..aaaaaa./ ..aaaaaa.
+..aaaaaa/a ..aaaaaa/a
+..aaaaaa/. ..aaaaaa
+..aaaaaa// ..aaaaaa
+..aaaaa.aa ..aaaaa.aa
+..aaaaa.a. ..aaaaa.a.
+..aaaaa.a/ ..aaaaa.a
+..aaaaa..a ..aaaaa..a
+..aaaaa... ..aaaaa...
+..aaaaa../ ..aaaaa..
+..aaaaa./a ..aaaaa./a
+..aaaaa./. ..aaaaa.
+..aaaaa.// ..aaaaa.
+..aaaaa/aa ..aaaaa/aa
+..aaaaa/a. ..aaaaa/a.
+..aaaaa/a/ ..aaaaa/a
+..aaaaa/.a ..aaaaa/.a
+..aaaaa/.. .
+..aaaaa/./ ..aaaaa
+..aaaaa//a ..aaaaa/a
+..aaaaa//. ..aaaaa
+..aaaaa/// ..aaaaa
+..aaaa.aaa ..aaaa.aaa
+..aaaa.aa. ..aaaa.aa.
+..aaaa.aa/ ..aaaa.aa
+..aaaa.a.a ..aaaa.a.a
+..aaaa.a.. ..aaaa.a..
+..aaaa.a./ ..aaaa.a.
+..aaaa.a/a ..aaaa.a/a
+..aaaa.a/. ..aaaa.a
+..aaaa.a// ..aaaa.a
+..aaaa..aa ..aaaa..aa
+..aaaa..a. ..aaaa..a.
+..aaaa..a/ ..aaaa..a
+..aaaa...a ..aaaa...a
+..aaaa.... ..aaaa....
+..aaaa.../ ..aaaa...
+..aaaa../a ..aaaa../a
+..aaaa../. ..aaaa..
+..aaaa..// ..aaaa..
+..aaaa./aa ..aaaa./aa
+..aaaa./a. ..aaaa./a.
+..aaaa./a/ ..aaaa./a
+..aaaa./.a ..aaaa./.a
+..aaaa./.. .
+..aaaa././ ..aaaa.
+..aaaa.//a ..aaaa./a
+..aaaa.//. ..aaaa.
+..aaaa./// ..aaaa.
+..aaaa/aaa ..aaaa/aaa
+..aaaa/aa. ..aaaa/aa.
+..aaaa/aa/ ..aaaa/aa
+..aaaa/a.a ..aaaa/a.a
+..aaaa/a.. ..aaaa/a..
+..aaaa/a./ ..aaaa/a.
+..aaaa/a/a ..aaaa/a/a
+..aaaa/a/. ..aaaa/a
+..aaaa/a// ..aaaa/a
+..aaaa/.aa ..aaaa/.aa
+..aaaa/.a. ..aaaa/.a.
+..aaaa/.a/ ..aaaa/.a
+..aaaa/..a ..aaaa/..a
+..aaaa/... ..aaaa/...
+..aaaa/../ .
+..aaaa/./a ..aaaa/a
+..aaaa/./. ..aaaa
+..aaaa/.// ..aaaa
+..aaaa//aa ..aaaa/aa
+..aaaa//a. ..aaaa/a.
+..aaaa//a/ ..aaaa/a
+..aaaa//.a ..aaaa/.a
+..aaaa//.. .
+..aaaa//./ ..aaaa
+..aaaa///a ..aaaa/a
+..aaaa///. ..aaaa
+..aaaa//// ..aaaa
+..aaa.aaaa ..aaa.aaaa
+..aaa.aaa. ..aaa.aaa.
+..aaa.aaa/ ..aaa.aaa
+..aaa.aa.a ..aaa.aa.a
+..aaa.aa.. ..aaa.aa..
+..aaa.aa./ ..aaa.aa.
+..aaa.aa/a ..aaa.aa/a
+..aaa.aa/. ..aaa.aa
+..aaa.aa// ..aaa.aa
+..aaa.a.aa ..aaa.a.aa
+..aaa.a.a. ..aaa.a.a.
+..aaa.a.a/ ..aaa.a.a
+..aaa.a..a ..aaa.a..a
+..aaa.a... ..aaa.a...
+..aaa.a../ ..aaa.a..
+..aaa.a./a ..aaa.a./a
+..aaa.a./. ..aaa.a.
+..aaa.a.// ..aaa.a.
+..aaa.a/aa ..aaa.a/aa
+..aaa.a/a. ..aaa.a/a.
+..aaa.a/a/ ..aaa.a/a
+..aaa.a/.a ..aaa.a/.a
+..aaa.a/.. .
+..aaa.a/./ ..aaa.a
+..aaa.a//a ..aaa.a/a
+..aaa.a//. ..aaa.a
+..aaa.a/// ..aaa.a
+..aaa..aaa ..aaa..aaa
+..aaa..aa. ..aaa..aa.
+..aaa..aa/ ..aaa..aa
+..aaa..a.a ..aaa..a.a
+..aaa..a.. ..aaa..a..
+..aaa..a./ ..aaa..a.
+..aaa..a/a ..aaa..a/a
+..aaa..a/. ..aaa..a
+..aaa..a// ..aaa..a
+..aaa...aa ..aaa...aa
+..aaa...a. ..aaa...a.
+..aaa...a/ ..aaa...a
+..aaa....a ..aaa....a
+..aaa..... ..aaa.....
+..aaa..../ ..aaa....
+..aaa.../a ..aaa.../a
+..aaa.../. ..aaa...
+..aaa...// ..aaa...
+..aaa../aa ..aaa../aa
+..aaa../a. ..aaa../a.
+..aaa../a/ ..aaa../a
+..aaa../.a ..aaa../.a
+..aaa../.. .
+..aaa.././ ..aaa..
+..aaa..//a ..aaa../a
+..aaa..//. ..aaa..
+..aaa../// ..aaa..
+..aaa./aaa ..aaa./aaa
+..aaa./aa. ..aaa./aa.
+..aaa./aa/ ..aaa./aa
+..aaa./a.a ..aaa./a.a
+..aaa./a.. ..aaa./a..
+..aaa./a./ ..aaa./a.
+..aaa./a/a ..aaa./a/a
+..aaa./a/. ..aaa./a
+..aaa./a// ..aaa./a
+..aaa./.aa ..aaa./.aa
+..aaa./.a. ..aaa./.a.
+..aaa./.a/ ..aaa./.a
+..aaa./..a ..aaa./..a
+..aaa./... ..aaa./...
+..aaa./../ .
+..aaa././a ..aaa./a
+..aaa././. ..aaa.
+..aaa./.// ..aaa.
+..aaa.//aa ..aaa./aa
+..aaa.//a. ..aaa./a.
+..aaa.//a/ ..aaa./a
+..aaa.//.a ..aaa./.a
+..aaa.//.. .
+..aaa.//./ ..aaa.
+..aaa.///a ..aaa./a
+..aaa.///. ..aaa.
+..aaa.//// ..aaa.
+..aaa/aaaa ..aaa/aaaa
+..aaa/aaa. ..aaa/aaa.
+..aaa/aaa/ ..aaa/aaa
+..aaa/aa.a ..aaa/aa.a
+..aaa/aa.. ..aaa/aa..
+..aaa/aa./ ..aaa/aa.
+..aaa/aa/a ..aaa/aa/a
+..aaa/aa/. ..aaa/aa
+..aaa/aa// ..aaa/aa
+..aaa/a.aa ..aaa/a.aa
+..aaa/a.a. ..aaa/a.a.
+..aaa/a.a/ ..aaa/a.a
+..aaa/a..a ..aaa/a..a
+..aaa/a... ..aaa/a...
+..aaa/a../ ..aaa/a..
+..aaa/a./a ..aaa/a./a
+..aaa/a./. ..aaa/a.
+..aaa/a.// ..aaa/a.
+..aaa/a/aa ..aaa/a/aa
+..aaa/a/a. ..aaa/a/a.
+..aaa/a/a/ ..aaa/a/a
+..aaa/a/.a ..aaa/a/.a
+..aaa/a/.. ..aaa
+..aaa/a/./ ..aaa/a
+..aaa/a//a ..aaa/a/a
+..aaa/a//. ..aaa/a
+..aaa/a/// ..aaa/a
+..aaa/.aaa ..aaa/.aaa
+..aaa/.aa. ..aaa/.aa.
+..aaa/.aa/ ..aaa/.aa
+..aaa/.a.a ..aaa/.a.a
+..aaa/.a.. ..aaa/.a..
+..aaa/.a./ ..aaa/.a.
+..aaa/.a/a ..aaa/.a/a
+..aaa/.a/. ..aaa/.a
+..aaa/.a// ..aaa/.a
+..aaa/..aa ..aaa/..aa
+..aaa/..a. ..aaa/..a.
+..aaa/..a/ ..aaa/..a
+..aaa/...a ..aaa/...a
+..aaa/.... ..aaa/....
+..aaa/.../ ..aaa/...
+..aaa/../a a
+..aaa/../. .
+..aaa/..// .
+..aaa/./aa ..aaa/aa
+..aaa/./a. ..aaa/a.
+..aaa/./a/ ..aaa/a
+..aaa/./.a ..aaa/.a
+..aaa/./.. .
+..aaa/././ ..aaa
+..aaa/.//a ..aaa/a
+..aaa/.//. ..aaa
+..aaa/./// ..aaa
+..aaa//aaa ..aaa/aaa
+..aaa//aa. ..aaa/aa.
+..aaa//aa/ ..aaa/aa
+..aaa//a.a ..aaa/a.a
+..aaa//a.. ..aaa/a..
+..aaa//a./ ..aaa/a.
+..aaa//a/a ..aaa/a/a
+..aaa//a/. ..aaa/a
+..aaa//a// ..aaa/a
+..aaa//.aa ..aaa/.aa
+..aaa//.a. ..aaa/.a.
+..aaa//.a/ ..aaa/.a
+..aaa//..a ..aaa/..a
+..aaa//... ..aaa/...
+..aaa//../ .
+..aaa//./a ..aaa/a
+..aaa//./. ..aaa
+..aaa//.// ..aaa
+..aaa///aa ..aaa/aa
+..aaa///a. ..aaa/a.
+..aaa///a/ ..aaa/a
+..aaa///.a ..aaa/.a
+..aaa///.. .
+..aaa///./ ..aaa
+..aaa////a ..aaa/a
+..aaa////. ..aaa
+..aaa///// ..aaa
+..aa.aaaaa ..aa.aaaaa
+..aa.aaaa. ..aa.aaaa.
+..aa.aaaa/ ..aa.aaaa
+..aa.aaa.a ..aa.aaa.a
+..aa.aaa.. ..aa.aaa..
+..aa.aaa./ ..aa.aaa.
+..aa.aaa/a ..aa.aaa/a
+..aa.aaa/. ..aa.aaa
+..aa.aaa// ..aa.aaa
+..aa.aa.aa ..aa.aa.aa
+..aa.aa.a. ..aa.aa.a.
+..aa.aa.a/ ..aa.aa.a
+..aa.aa..a ..aa.aa..a
+..aa.aa... ..aa.aa...
+..aa.aa../ ..aa.aa..
+..aa.aa./a ..aa.aa./a
+..aa.aa./. ..aa.aa.
+..aa.aa.// ..aa.aa.
+..aa.aa/aa ..aa.aa/aa
+..aa.aa/a. ..aa.aa/a.
+..aa.aa/a/ ..aa.aa/a
+..aa.aa/.a ..aa.aa/.a
+..aa.aa/.. .
+..aa.aa/./ ..aa.aa
+..aa.aa//a ..aa.aa/a
+..aa.aa//. ..aa.aa
+..aa.aa/// ..aa.aa
+..aa.a.aaa ..aa.a.aaa
+..aa.a.aa. ..aa.a.aa.
+..aa.a.aa/ ..aa.a.aa
+..aa.a.a.a ..aa.a.a.a
+..aa.a.a.. ..aa.a.a..
+..aa.a.a./ ..aa.a.a.
+..aa.a.a/a ..aa.a.a/a
+..aa.a.a/. ..aa.a.a
+..aa.a.a// ..aa.a.a
+..aa.a..aa ..aa.a..aa
+..aa.a..a. ..aa.a..a.
+..aa.a..a/ ..aa.a..a
+..aa.a...a ..aa.a...a
+..aa.a.... ..aa.a....
+..aa.a.../ ..aa.a...
+..aa.a../a ..aa.a../a
+..aa.a../. ..aa.a..
+..aa.a..// ..aa.a..
+..aa.a./aa ..aa.a./aa
+..aa.a./a. ..aa.a./a.
+..aa.a./a/ ..aa.a./a
+..aa.a./.a ..aa.a./.a
+..aa.a./.. .
+..aa.a././ ..aa.a.
+..aa.a.//a ..aa.a./a
+..aa.a.//. ..aa.a.
+..aa.a./// ..aa.a.
+..aa.a/aaa ..aa.a/aaa
+..aa.a/aa. ..aa.a/aa.
+..aa.a/aa/ ..aa.a/aa
+..aa.a/a.a ..aa.a/a.a
+..aa.a/a.. ..aa.a/a..
+..aa.a/a./ ..aa.a/a.
+..aa.a/a/a ..aa.a/a/a
+..aa.a/a/. ..aa.a/a
+..aa.a/a// ..aa.a/a
+..aa.a/.aa ..aa.a/.aa
+..aa.a/.a. ..aa.a/.a.
+..aa.a/.a/ ..aa.a/.a
+..aa.a/..a ..aa.a/..a
+..aa.a/... ..aa.a/...
+..aa.a/../ .
+..aa.a/./a ..aa.a/a
+..aa.a/./. ..aa.a
+..aa.a/.// ..aa.a
+..aa.a//aa ..aa.a/aa
+..aa.a//a. ..aa.a/a.
+..aa.a//a/ ..aa.a/a
+..aa.a//.a ..aa.a/.a
+..aa.a//.. .
+..aa.a//./ ..aa.a
+..aa.a///a ..aa.a/a
+..aa.a///. ..aa.a
+..aa.a//// ..aa.a
+..aa..aaaa ..aa..aaaa
+..aa..aaa. ..aa..aaa.
+..aa..aaa/ ..aa..aaa
+..aa..aa.a ..aa..aa.a
+..aa..aa.. ..aa..aa..
+..aa..aa./ ..aa..aa.
+..aa..aa/a ..aa..aa/a
+..aa..aa/. ..aa..aa
+..aa..aa// ..aa..aa
+..aa..a.aa ..aa..a.aa
+..aa..a.a. ..aa..a.a.
+..aa..a.a/ ..aa..a.a
+..aa..a..a ..aa..a..a
+..aa..a... ..aa..a...
+..aa..a../ ..aa..a..
+..aa..a./a ..aa..a./a
+..aa..a./. ..aa..a.
+..aa..a.// ..aa..a.
+..aa..a/aa ..aa..a/aa
+..aa..a/a. ..aa..a/a.
+..aa..a/a/ ..aa..a/a
+..aa..a/.a ..aa..a/.a
+..aa..a/.. .
+..aa..a/./ ..aa..a
+..aa..a//a ..aa..a/a
+..aa..a//. ..aa..a
+..aa..a/// ..aa..a
+..aa...aaa ..aa...aaa
+..aa...aa. ..aa...aa.
+..aa...aa/ ..aa...aa
+..aa...a.a ..aa...a.a
+..aa...a.. ..aa...a..
+..aa...a./ ..aa...a.
+..aa...a/a ..aa...a/a
+..aa...a/. ..aa...a
+..aa...a// ..aa...a
+..aa....aa ..aa....aa
+..aa....a. ..aa....a.
+..aa....a/ ..aa....a
+..aa.....a ..aa.....a
+..aa...... ..aa......
+..aa...../ ..aa.....
+..aa..../a ..aa..../a
+..aa..../. ..aa....
+..aa....// ..aa....
+..aa.../aa ..aa.../aa
+..aa.../a. ..aa.../a.
+..aa.../a/ ..aa.../a
+..aa.../.a ..aa.../.a
+..aa.../.. .
+..aa..././ ..aa...
+..aa...//a ..aa.../a
+..aa...//. ..aa...
+..aa.../// ..aa...
+..aa../aaa ..aa../aaa
+..aa../aa. ..aa../aa.
+..aa../aa/ ..aa../aa
+..aa../a.a ..aa../a.a
+..aa../a.. ..aa../a..
+..aa../a./ ..aa../a.
+..aa../a/a ..aa../a/a
+..aa../a/. ..aa../a
+..aa../a// ..aa../a
+..aa../.aa ..aa../.aa
+..aa../.a. ..aa../.a.
+..aa../.a/ ..aa../.a
+..aa../..a ..aa../..a
+..aa../... ..aa../...
+..aa../../ .
+..aa.././a ..aa../a
+..aa.././. ..aa..
+..aa../.// ..aa..
+..aa..//aa ..aa../aa
+..aa..//a. ..aa../a.
+..aa..//a/ ..aa../a
+..aa..//.a ..aa../.a
+..aa..//.. .
+..aa..//./ ..aa..
+..aa..///a ..aa../a
+..aa..///. ..aa..
+..aa..//// ..aa..
+..aa./aaaa ..aa./aaaa
+..aa./aaa. ..aa./aaa.
+..aa./aaa/ ..aa./aaa
+..aa./aa.a ..aa./aa.a
+..aa./aa.. ..aa./aa..
+..aa./aa./ ..aa./aa.
+..aa./aa/a ..aa./aa/a
+..aa./aa/. ..aa./aa
+..aa./aa// ..aa./aa
+..aa./a.aa ..aa./a.aa
+..aa./a.a. ..aa./a.a.
+..aa./a.a/ ..aa./a.a
+..aa./a..a ..aa./a..a
+..aa./a... ..aa./a...
+..aa./a../ ..aa./a..
+..aa./a./a ..aa./a./a
+..aa./a./. ..aa./a.
+..aa./a.// ..aa./a.
+..aa./a/aa ..aa./a/aa
+..aa./a/a. ..aa./a/a.
+..aa./a/a/ ..aa./a/a
+..aa./a/.a ..aa./a/.a
+..aa./a/.. ..aa.
+..aa./a/./ ..aa./a
+..aa./a//a ..aa./a/a
+..aa./a//. ..aa./a
+..aa./a/// ..aa./a
+..aa./.aaa ..aa./.aaa
+..aa./.aa. ..aa./.aa.
+..aa./.aa/ ..aa./.aa
+..aa./.a.a ..aa./.a.a
+..aa./.a.. ..aa./.a..
+..aa./.a./ ..aa./.a.
+..aa./.a/a ..aa./.a/a
+..aa./.a/. ..aa./.a
+..aa./.a// ..aa./.a
+..aa./..aa ..aa./..aa
+..aa./..a. ..aa./..a.
+..aa./..a/ ..aa./..a
+..aa./...a ..aa./...a
+..aa./.... ..aa./....
+..aa./.../ ..aa./...
+..aa./../a a
+..aa./../. .
+..aa./..// .
+..aa././aa ..aa./aa
+..aa././a. ..aa./a.
+..aa././a/ ..aa./a
+..aa././.a ..aa./.a
+..aa././.. .
+..aa./././ ..aa.
+..aa././/a ..aa./a
+..aa././/. ..aa.
+..aa././// ..aa.
+..aa.//aaa ..aa./aaa
+..aa.//aa. ..aa./aa.
+..aa.//aa/ ..aa./aa
+..aa.//a.a ..aa./a.a
+..aa.//a.. ..aa./a..
+..aa.//a./ ..aa./a.
+..aa.//a/a ..aa./a/a
+..aa.//a/. ..aa./a
+..aa.//a// ..aa./a
+..aa.//.aa ..aa./.aa
+..aa.//.a. ..aa./.a.
+..aa.//.a/ ..aa./.a
+..aa.//..a ..aa./..a
+..aa.//... ..aa./...
+..aa.//../ .
+..aa.//./a ..aa./a
+..aa.//./. ..aa.
+..aa.//.// ..aa.
+..aa.///aa ..aa./aa
+..aa.///a. ..aa./a.
+..aa.///a/ ..aa./a
+..aa.///.a ..aa./.a
+..aa.///.. .
+..aa.///./ ..aa.
+..aa.////a ..aa./a
+..aa.////. ..aa.
+..aa.///// ..aa.
+..aa/aaaaa ..aa/aaaaa
+..aa/aaaa. ..aa/aaaa.
+..aa/aaaa/ ..aa/aaaa
+..aa/aaa.a ..aa/aaa.a
+..aa/aaa.. ..aa/aaa..
+..aa/aaa./ ..aa/aaa.
+..aa/aaa/a ..aa/aaa/a
+..aa/aaa/. ..aa/aaa
+..aa/aaa// ..aa/aaa
+..aa/aa.aa ..aa/aa.aa
+..aa/aa.a. ..aa/aa.a.
+..aa/aa.a/ ..aa/aa.a
+..aa/aa..a ..aa/aa..a
+..aa/aa... ..aa/aa...
+..aa/aa../ ..aa/aa..
+..aa/aa./a ..aa/aa./a
+..aa/aa./. ..aa/aa.
+..aa/aa.// ..aa/aa.
+..aa/aa/aa ..aa/aa/aa
+..aa/aa/a. ..aa/aa/a.
+..aa/aa/a/ ..aa/aa/a
+..aa/aa/.a ..aa/aa/.a
+..aa/aa/.. ..aa
+..aa/aa/./ ..aa/aa
+..aa/aa//a ..aa/aa/a
+..aa/aa//. ..aa/aa
+..aa/aa/// ..aa/aa
+..aa/a.aaa ..aa/a.aaa
+..aa/a.aa. ..aa/a.aa.
+..aa/a.aa/ ..aa/a.aa
+..aa/a.a.a ..aa/a.a.a
+..aa/a.a.. ..aa/a.a..
+..aa/a.a./ ..aa/a.a.
+..aa/a.a/a ..aa/a.a/a
+..aa/a.a/. ..aa/a.a
+..aa/a.a// ..aa/a.a
+..aa/a..aa ..aa/a..aa
+..aa/a..a. ..aa/a..a.
+..aa/a..a/ ..aa/a..a
+..aa/a...a ..aa/a...a
+..aa/a.... ..aa/a....
+..aa/a.../ ..aa/a...
+..aa/a../a ..aa/a../a
+..aa/a../. ..aa/a..
+..aa/a..// ..aa/a..
+..aa/a./aa ..aa/a./aa
+..aa/a./a. ..aa/a./a.
+..aa/a./a/ ..aa/a./a
+..aa/a./.a ..aa/a./.a
+..aa/a./.. ..aa
+..aa/a././ ..aa/a.
+..aa/a.//a ..aa/a./a
+..aa/a.//. ..aa/a.
+..aa/a./// ..aa/a.
+..aa/a/aaa ..aa/a/aaa
+..aa/a/aa. ..aa/a/aa.
+..aa/a/aa/ ..aa/a/aa
+..aa/a/a.a ..aa/a/a.a
+..aa/a/a.. ..aa/a/a..
+..aa/a/a./ ..aa/a/a.
+..aa/a/a/a ..aa/a/a/a
+..aa/a/a/. ..aa/a/a
+..aa/a/a// ..aa/a/a
+..aa/a/.aa ..aa/a/.aa
+..aa/a/.a. ..aa/a/.a.
+..aa/a/.a/ ..aa/a/.a
+..aa/a/..a ..aa/a/..a
+..aa/a/... ..aa/a/...
+..aa/a/../ ..aa
+..aa/a/./a ..aa/a/a
+..aa/a/./. ..aa/a
+..aa/a/.// ..aa/a
+..aa/a//aa ..aa/a/aa
+..aa/a//a. ..aa/a/a.
+..aa/a//a/ ..aa/a/a
+..aa/a//.a ..aa/a/.a
+..aa/a//.. ..aa
+..aa/a//./ ..aa/a
+..aa/a///a ..aa/a/a
+..aa/a///. ..aa/a
+..aa/a//// ..aa/a
+..aa/.aaaa ..aa/.aaaa
+..aa/.aaa. ..aa/.aaa.
+..aa/.aaa/ ..aa/.aaa
+..aa/.aa.a ..aa/.aa.a
+..aa/.aa.. ..aa/.aa..
+..aa/.aa./ ..aa/.aa.
+..aa/.aa/a ..aa/.aa/a
+..aa/.aa/. ..aa/.aa
+..aa/.aa// ..aa/.aa
+..aa/.a.aa ..aa/.a.aa
+..aa/.a.a. ..aa/.a.a.
+..aa/.a.a/ ..aa/.a.a
+..aa/.a..a ..aa/.a..a
+..aa/.a... ..aa/.a...
+..aa/.a../ ..aa/.a..
+..aa/.a./a ..aa/.a./a
+..aa/.a./. ..aa/.a.
+..aa/.a.// ..aa/.a.
+..aa/.a/aa ..aa/.a/aa
+..aa/.a/a. ..aa/.a/a.
+..aa/.a/a/ ..aa/.a/a
+..aa/.a/.a ..aa/.a/.a
+..aa/.a/.. ..aa
+..aa/.a/./ ..aa/.a
+..aa/.a//a ..aa/.a/a
+..aa/.a//. ..aa/.a
+..aa/.a/// ..aa/.a
+..aa/..aaa ..aa/..aaa
+..aa/..aa. ..aa/..aa.
+..aa/..aa/ ..aa/..aa
+..aa/..a.a ..aa/..a.a
+..aa/..a.. ..aa/..a..
+..aa/..a./ ..aa/..a.
+..aa/..a/a ..aa/..a/a
+..aa/..a/. ..aa/..a
+..aa/..a// ..aa/..a
+..aa/...aa ..aa/...aa
+..aa/...a. ..aa/...a.
+..aa/...a/ ..aa/...a
+..aa/....a ..aa/....a
+..aa/..... ..aa/.....
+..aa/..../ ..aa/....
+..aa/.../a ..aa/.../a
+..aa/.../. ..aa/...
+..aa/...// ..aa/...
+..aa/../aa aa
+..aa/../a. a.
+..aa/../a/ a
+..aa/../.a .a
+..aa/../.. ..
+..aa/.././ .
+..aa/..//a a
+..aa/..//. .
+..aa/../// .
+..aa/./aaa ..aa/aaa
+..aa/./aa. ..aa/aa.
+..aa/./aa/ ..aa/aa
+..aa/./a.a ..aa/a.a
+..aa/./a.. ..aa/a..
+..aa/./a./ ..aa/a.
+..aa/./a/a ..aa/a/a
+..aa/./a/. ..aa/a
+..aa/./a// ..aa/a
+..aa/./.aa ..aa/.aa
+..aa/./.a. ..aa/.a.
+..aa/./.a/ ..aa/.a
+..aa/./..a ..aa/..a
+..aa/./... ..aa/...
+..aa/./../ .
+..aa/././a ..aa/a
+..aa/././. ..aa
+..aa/./.// ..aa
+..aa/.//aa ..aa/aa
+..aa/.//a. ..aa/a.
+..aa/.//a/ ..aa/a
+..aa/.//.a ..aa/.a
+..aa/.//.. .
+..aa/.//./ ..aa
+..aa/.///a ..aa/a
+..aa/.///. ..aa
+..aa/.//// ..aa
+..aa//aaaa ..aa/aaaa
+..aa//aaa. ..aa/aaa.
+..aa//aaa/ ..aa/aaa
+..aa//aa.a ..aa/aa.a
+..aa//aa.. ..aa/aa..
+..aa//aa./ ..aa/aa.
+..aa//aa/a ..aa/aa/a
+..aa//aa/. ..aa/aa
+..aa//aa// ..aa/aa
+..aa//a.aa ..aa/a.aa
+..aa//a.a. ..aa/a.a.
+..aa//a.a/ ..aa/a.a
+..aa//a..a ..aa/a..a
+..aa//a... ..aa/a...
+..aa//a../ ..aa/a..
+..aa//a./a ..aa/a./a
+..aa//a./. ..aa/a.
+..aa//a.// ..aa/a.
+..aa//a/aa ..aa/a/aa
+..aa//a/a. ..aa/a/a.
+..aa//a/a/ ..aa/a/a
+..aa//a/.a ..aa/a/.a
+..aa//a/.. ..aa
+..aa//a/./ ..aa/a
+..aa//a//a ..aa/a/a
+..aa//a//. ..aa/a
+..aa//a/// ..aa/a
+..aa//.aaa ..aa/.aaa
+..aa//.aa. ..aa/.aa.
+..aa//.aa/ ..aa/.aa
+..aa//.a.a ..aa/.a.a
+..aa//.a.. ..aa/.a..
+..aa//.a./ ..aa/.a.
+..aa//.a/a ..aa/.a/a
+..aa//.a/. ..aa/.a
+..aa//.a// ..aa/.a
+..aa//..aa ..aa/..aa
+..aa//..a. ..aa/..a.
+..aa//..a/ ..aa/..a
+..aa//...a ..aa/...a
+..aa//.... ..aa/....
+..aa//.../ ..aa/...
+..aa//../a a
+..aa//../. .
+..aa//..// .
+..aa//./aa ..aa/aa
+..aa//./a. ..aa/a.
+..aa//./a/ ..aa/a
+..aa//./.a ..aa/.a
+..aa//./.. .
+..aa//././ ..aa
+..aa//.//a ..aa/a
+..aa//.//. ..aa
+..aa//./// ..aa
+..aa///aaa ..aa/aaa
+..aa///aa. ..aa/aa.
+..aa///aa/ ..aa/aa
+..aa///a.a ..aa/a.a
+..aa///a.. ..aa/a..
+..aa///a./ ..aa/a.
+..aa///a/a ..aa/a/a
+..aa///a/. ..aa/a
+..aa///a// ..aa/a
+..aa///.aa ..aa/.aa
+..aa///.a. ..aa/.a.
+..aa///.a/ ..aa/.a
+..aa///..a ..aa/..a
+..aa///... ..aa/...
+..aa///../ .
+..aa///./a ..aa/a
+..aa///./. ..aa
+..aa///.// ..aa
+..aa////aa ..aa/aa
+..aa////a. ..aa/a.
+..aa////a/ ..aa/a
+..aa////.a ..aa/.a
+..aa////.. .
+..aa////./ ..aa
+..aa/////a ..aa/a
+..aa/////. ..aa
+..aa////// ..aa
+..a.aaaaaa ..a.aaaaaa
+..a.aaaaa. ..a.aaaaa.
+..a.aaaaa/ ..a.aaaaa
+..a.aaaa.a ..a.aaaa.a
+..a.aaaa.. ..a.aaaa..
+..a.aaaa./ ..a.aaaa.
+..a.aaaa/a ..a.aaaa/a
+..a.aaaa/. ..a.aaaa
+..a.aaaa// ..a.aaaa
+..a.aaa.aa ..a.aaa.aa
+..a.aaa.a. ..a.aaa.a.
+..a.aaa.a/ ..a.aaa.a
+..a.aaa..a ..a.aaa..a
+..a.aaa... ..a.aaa...
+..a.aaa../ ..a.aaa..
+..a.aaa./a ..a.aaa./a
+..a.aaa./. ..a.aaa.
+..a.aaa.// ..a.aaa.
+..a.aaa/aa ..a.aaa/aa
+..a.aaa/a. ..a.aaa/a.
+..a.aaa/a/ ..a.aaa/a
+..a.aaa/.a ..a.aaa/.a
+..a.aaa/.. .
+..a.aaa/./ ..a.aaa
+..a.aaa//a ..a.aaa/a
+..a.aaa//. ..a.aaa
+..a.aaa/// ..a.aaa
+..a.aa.aaa ..a.aa.aaa
+..a.aa.aa. ..a.aa.aa.
+..a.aa.aa/ ..a.aa.aa
+..a.aa.a.a ..a.aa.a.a
+..a.aa.a.. ..a.aa.a..
+..a.aa.a./ ..a.aa.a.
+..a.aa.a/a ..a.aa.a/a
+..a.aa.a/. ..a.aa.a
+..a.aa.a// ..a.aa.a
+..a.aa..aa ..a.aa..aa
+..a.aa..a. ..a.aa..a.
+..a.aa..a/ ..a.aa..a
+..a.aa...a ..a.aa...a
+..a.aa.... ..a.aa....
+..a.aa.../ ..a.aa...
+..a.aa../a ..a.aa../a
+..a.aa../. ..a.aa..
+..a.aa..// ..a.aa..
+..a.aa./aa ..a.aa./aa
+..a.aa./a. ..a.aa./a.
+..a.aa./a/ ..a.aa./a
+..a.aa./.a ..a.aa./.a
+..a.aa./.. .
+..a.aa././ ..a.aa.
+..a.aa.//a ..a.aa./a
+..a.aa.//. ..a.aa.
+..a.aa./// ..a.aa.
+..a.aa/aaa ..a.aa/aaa
+..a.aa/aa. ..a.aa/aa.
+..a.aa/aa/ ..a.aa/aa
+..a.aa/a.a ..a.aa/a.a
+..a.aa/a.. ..a.aa/a..
+..a.aa/a./ ..a.aa/a.
+..a.aa/a/a ..a.aa/a/a
+..a.aa/a/. ..a.aa/a
+..a.aa/a// ..a.aa/a
+..a.aa/.aa ..a.aa/.aa
+..a.aa/.a. ..a.aa/.a.
+..a.aa/.a/ ..a.aa/.a
+..a.aa/..a ..a.aa/..a
+..a.aa/... ..a.aa/...
+..a.aa/../ .
+..a.aa/./a ..a.aa/a
+..a.aa/./. ..a.aa
+..a.aa/.// ..a.aa
+..a.aa//aa ..a.aa/aa
+..a.aa//a. ..a.aa/a.
+..a.aa//a/ ..a.aa/a
+..a.aa//.a ..a.aa/.a
+..a.aa//.. .
+..a.aa//./ ..a.aa
+..a.aa///a ..a.aa/a
+..a.aa///. ..a.aa
+..a.aa//// ..a.aa
+..a.a.aaaa ..a.a.aaaa
+..a.a.aaa. ..a.a.aaa.
+..a.a.aaa/ ..a.a.aaa
+..a.a.aa.a ..a.a.aa.a
+..a.a.aa.. ..a.a.aa..
+..a.a.aa./ ..a.a.aa.
+..a.a.aa/a ..a.a.aa/a
+..a.a.aa/. ..a.a.aa
+..a.a.aa// ..a.a.aa
+..a.a.a.aa ..a.a.a.aa
+..a.a.a.a. ..a.a.a.a.
+..a.a.a.a/ ..a.a.a.a
+..a.a.a..a ..a.a.a..a
+..a.a.a... ..a.a.a...
+..a.a.a../ ..a.a.a..
+..a.a.a./a ..a.a.a./a
+..a.a.a./. ..a.a.a.
+..a.a.a.// ..a.a.a.
+..a.a.a/aa ..a.a.a/aa
+..a.a.a/a. ..a.a.a/a.
+..a.a.a/a/ ..a.a.a/a
+..a.a.a/.a ..a.a.a/.a
+..a.a.a/.. .
+..a.a.a/./ ..a.a.a
+..a.a.a//a ..a.a.a/a
+..a.a.a//. ..a.a.a
+..a.a.a/// ..a.a.a
+..a.a..aaa ..a.a..aaa
+..a.a..aa. ..a.a..aa.
+..a.a..aa/ ..a.a..aa
+..a.a..a.a ..a.a..a.a
+..a.a..a.. ..a.a..a..
+..a.a..a./ ..a.a..a.
+..a.a..a/a ..a.a..a/a
+..a.a..a/. ..a.a..a
+..a.a..a// ..a.a..a
+..a.a...aa ..a.a...aa
+..a.a...a. ..a.a...a.
+..a.a...a/ ..a.a...a
+..a.a....a ..a.a....a
+..a.a..... ..a.a.....
+..a.a..../ ..a.a....
+..a.a.../a ..a.a.../a
+..a.a.../. ..a.a...
+..a.a...// ..a.a...
+..a.a../aa ..a.a../aa
+..a.a../a. ..a.a../a.
+..a.a../a/ ..a.a../a
+..a.a../.a ..a.a../.a
+..a.a../.. .
+..a.a.././ ..a.a..
+..a.a..//a ..a.a../a
+..a.a..//. ..a.a..
+..a.a../// ..a.a..
+..a.a./aaa ..a.a./aaa
+..a.a./aa. ..a.a./aa.
+..a.a./aa/ ..a.a./aa
+..a.a./a.a ..a.a./a.a
+..a.a./a.. ..a.a./a..
+..a.a./a./ ..a.a./a.
+..a.a./a/a ..a.a./a/a
+..a.a./a/. ..a.a./a
+..a.a./a// ..a.a./a
+..a.a./.aa ..a.a./.aa
+..a.a./.a. ..a.a./.a.
+..a.a./.a/ ..a.a./.a
+..a.a./..a ..a.a./..a
+..a.a./... ..a.a./...
+..a.a./../ .
+..a.a././a ..a.a./a
+..a.a././. ..a.a.
+..a.a./.// ..a.a.
+..a.a.//aa ..a.a./aa
+..a.a.//a. ..a.a./a.
+..a.a.//a/ ..a.a./a
+..a.a.//.a ..a.a./.a
+..a.a.//.. .
+..a.a.//./ ..a.a.
+..a.a.///a ..a.a./a
+..a.a.///. ..a.a.
+..a.a.//// ..a.a.
+..a.a/aaaa ..a.a/aaaa
+..a.a/aaa. ..a.a/aaa.
+..a.a/aaa/ ..a.a/aaa
+..a.a/aa.a ..a.a/aa.a
+..a.a/aa.. ..a.a/aa..
+..a.a/aa./ ..a.a/aa.
+..a.a/aa/a ..a.a/aa/a
+..a.a/aa/. ..a.a/aa
+..a.a/aa// ..a.a/aa
+..a.a/a.aa ..a.a/a.aa
+..a.a/a.a. ..a.a/a.a.
+..a.a/a.a/ ..a.a/a.a
+..a.a/a..a ..a.a/a..a
+..a.a/a... ..a.a/a...
+..a.a/a../ ..a.a/a..
+..a.a/a./a ..a.a/a./a
+..a.a/a./. ..a.a/a.
+..a.a/a.// ..a.a/a.
+..a.a/a/aa ..a.a/a/aa
+..a.a/a/a. ..a.a/a/a.
+..a.a/a/a/ ..a.a/a/a
+..a.a/a/.a ..a.a/a/.a
+..a.a/a/.. ..a.a
+..a.a/a/./ ..a.a/a
+..a.a/a//a ..a.a/a/a
+..a.a/a//. ..a.a/a
+..a.a/a/// ..a.a/a
+..a.a/.aaa ..a.a/.aaa
+..a.a/.aa. ..a.a/.aa.
+..a.a/.aa/ ..a.a/.aa
+..a.a/.a.a ..a.a/.a.a
+..a.a/.a.. ..a.a/.a..
+..a.a/.a./ ..a.a/.a.
+..a.a/.a/a ..a.a/.a/a
+..a.a/.a/. ..a.a/.a
+..a.a/.a// ..a.a/.a
+..a.a/..aa ..a.a/..aa
+..a.a/..a. ..a.a/..a.
+..a.a/..a/ ..a.a/..a
+..a.a/...a ..a.a/...a
+..a.a/.... ..a.a/....
+..a.a/.../ ..a.a/...
+..a.a/../a a
+..a.a/../. .
+..a.a/..// .
+..a.a/./aa ..a.a/aa
+..a.a/./a. ..a.a/a.
+..a.a/./a/ ..a.a/a
+..a.a/./.a ..a.a/.a
+..a.a/./.. .
+..a.a/././ ..a.a
+..a.a/.//a ..a.a/a
+..a.a/.//. ..a.a
+..a.a/./// ..a.a
+..a.a//aaa ..a.a/aaa
+..a.a//aa. ..a.a/aa.
+..a.a//aa/ ..a.a/aa
+..a.a//a.a ..a.a/a.a
+..a.a//a.. ..a.a/a..
+..a.a//a./ ..a.a/a.
+..a.a//a/a ..a.a/a/a
+..a.a//a/. ..a.a/a
+..a.a//a// ..a.a/a
+..a.a//.aa ..a.a/.aa
+..a.a//.a. ..a.a/.a.
+..a.a//.a/ ..a.a/.a
+..a.a//..a ..a.a/..a
+..a.a//... ..a.a/...
+..a.a//../ .
+..a.a//./a ..a.a/a
+..a.a//./. ..a.a
+..a.a//.// ..a.a
+..a.a///aa ..a.a/aa
+..a.a///a. ..a.a/a.
+..a.a///a/ ..a.a/a
+..a.a///.a ..a.a/.a
+..a.a///.. .
+..a.a///./ ..a.a
+..a.a////a ..a.a/a
+..a.a////. ..a.a
+..a.a///// ..a.a
+..a..aaaaa ..a..aaaaa
+..a..aaaa. ..a..aaaa.
+..a..aaaa/ ..a..aaaa
+..a..aaa.a ..a..aaa.a
+..a..aaa.. ..a..aaa..
+..a..aaa./ ..a..aaa.
+..a..aaa/a ..a..aaa/a
+..a..aaa/. ..a..aaa
+..a..aaa// ..a..aaa
+..a..aa.aa ..a..aa.aa
+..a..aa.a. ..a..aa.a.
+..a..aa.a/ ..a..aa.a
+..a..aa..a ..a..aa..a
+..a..aa... ..a..aa...
+..a..aa../ ..a..aa..
+..a..aa./a ..a..aa./a
+..a..aa./. ..a..aa.
+..a..aa.// ..a..aa.
+..a..aa/aa ..a..aa/aa
+..a..aa/a. ..a..aa/a.
+..a..aa/a/ ..a..aa/a
+..a..aa/.a ..a..aa/.a
+..a..aa/.. .
+..a..aa/./ ..a..aa
+..a..aa//a ..a..aa/a
+..a..aa//. ..a..aa
+..a..aa/// ..a..aa
+..a..a.aaa ..a..a.aaa
+..a..a.aa. ..a..a.aa.
+..a..a.aa/ ..a..a.aa
+..a..a.a.a ..a..a.a.a
+..a..a.a.. ..a..a.a..
+..a..a.a./ ..a..a.a.
+..a..a.a/a ..a..a.a/a
+..a..a.a/. ..a..a.a
+..a..a.a// ..a..a.a
+..a..a..aa ..a..a..aa
+..a..a..a. ..a..a..a.
+..a..a..a/ ..a..a..a
+..a..a...a ..a..a...a
+..a..a.... ..a..a....
+..a..a.../ ..a..a...
+..a..a../a ..a..a../a
+..a..a../. ..a..a..
+..a..a..// ..a..a..
+..a..a./aa ..a..a./aa
+..a..a./a. ..a..a./a.
+..a..a./a/ ..a..a./a
+..a..a./.a ..a..a./.a
+..a..a./.. .
+..a..a././ ..a..a.
+..a..a.//a ..a..a./a
+..a..a.//. ..a..a.
+..a..a./// ..a..a.
+..a..a/aaa ..a..a/aaa
+..a..a/aa. ..a..a/aa.
+..a..a/aa/ ..a..a/aa
+..a..a/a.a ..a..a/a.a
+..a..a/a.. ..a..a/a..
+..a..a/a./ ..a..a/a.
+..a..a/a/a ..a..a/a/a
+..a..a/a/. ..a..a/a
+..a..a/a// ..a..a/a
+..a..a/.aa ..a..a/.aa
+..a..a/.a. ..a..a/.a.
+..a..a/.a/ ..a..a/.a
+..a..a/..a ..a..a/..a
+..a..a/... ..a..a/...
+..a..a/../ .
+..a..a/./a ..a..a/a
+..a..a/./. ..a..a
+..a..a/.// ..a..a
+..a..a//aa ..a..a/aa
+..a..a//a. ..a..a/a.
+..a..a//a/ ..a..a/a
+..a..a//.a ..a..a/.a
+..a..a//.. .
+..a..a//./ ..a..a
+..a..a///a ..a..a/a
+..a..a///. ..a..a
+..a..a//// ..a..a
+..a...aaaa ..a...aaaa
+..a...aaa. ..a...aaa.
+..a...aaa/ ..a...aaa
+..a...aa.a ..a...aa.a
+..a...aa.. ..a...aa..
+..a...aa./ ..a...aa.
+..a...aa/a ..a...aa/a
+..a...aa/. ..a...aa
+..a...aa// ..a...aa
+..a...a.aa ..a...a.aa
+..a...a.a. ..a...a.a.
+..a...a.a/ ..a...a.a
+..a...a..a ..a...a..a
+..a...a... ..a...a...
+..a...a../ ..a...a..
+..a...a./a ..a...a./a
+..a...a./. ..a...a.
+..a...a.// ..a...a.
+..a...a/aa ..a...a/aa
+..a...a/a. ..a...a/a.
+..a...a/a/ ..a...a/a
+..a...a/.a ..a...a/.a
+..a...a/.. .
+..a...a/./ ..a...a
+..a...a//a ..a...a/a
+..a...a//. ..a...a
+..a...a/// ..a...a
+..a....aaa ..a....aaa
+..a....aa. ..a....aa.
+..a....aa/ ..a....aa
+..a....a.a ..a....a.a
+..a....a.. ..a....a..
+..a....a./ ..a....a.
+..a....a/a ..a....a/a
+..a....a/. ..a....a
+..a....a// ..a....a
+..a.....aa ..a.....aa
+..a.....a. ..a.....a.
+..a.....a/ ..a.....a
+..a......a ..a......a
+..a....... ..a.......
+..a....../ ..a......
+..a...../a ..a...../a
+..a...../. ..a.....
+..a.....// ..a.....
+..a..../aa ..a..../aa
+..a..../a. ..a..../a.
+..a..../a/ ..a..../a
+..a..../.a ..a..../.a
+..a..../.. .
+..a...././ ..a....
+..a....//a ..a..../a
+..a....//. ..a....
+..a..../// ..a....
+..a.../aaa ..a.../aaa
+..a.../aa. ..a.../aa.
+..a.../aa/ ..a.../aa
+..a.../a.a ..a.../a.a
+..a.../a.. ..a.../a..
+..a.../a./ ..a.../a.
+..a.../a/a ..a.../a/a
+..a.../a/. ..a.../a
+..a.../a// ..a.../a
+..a.../.aa ..a.../.aa
+..a.../.a. ..a.../.a.
+..a.../.a/ ..a.../.a
+..a.../..a ..a.../..a
+..a.../... ..a.../...
+..a.../../ .
+..a..././a ..a.../a
+..a..././. ..a...
+..a.../.// ..a...
+..a...//aa ..a.../aa
+..a...//a. ..a.../a.
+..a...//a/ ..a.../a
+..a...//.a ..a.../.a
+..a...//.. .
+..a...//./ ..a...
+..a...///a ..a.../a
+..a...///. ..a...
+..a...//// ..a...
+..a../aaaa ..a../aaaa
+..a../aaa. ..a../aaa.
+..a../aaa/ ..a../aaa
+..a../aa.a ..a../aa.a
+..a../aa.. ..a../aa..
+..a../aa./ ..a../aa.
+..a../aa/a ..a../aa/a
+..a../aa/. ..a../aa
+..a../aa// ..a../aa
+..a../a.aa ..a../a.aa
+..a../a.a. ..a../a.a.
+..a../a.a/ ..a../a.a
+..a../a..a ..a../a..a
+..a../a... ..a../a...
+..a../a../ ..a../a..
+..a../a./a ..a../a./a
+..a../a./. ..a../a.
+..a../a.// ..a../a.
+..a../a/aa ..a../a/aa
+..a../a/a. ..a../a/a.
+..a../a/a/ ..a../a/a
+..a../a/.a ..a../a/.a
+..a../a/.. ..a..
+..a../a/./ ..a../a
+..a../a//a ..a../a/a
+..a../a//. ..a../a
+..a../a/// ..a../a
+..a../.aaa ..a../.aaa
+..a../.aa. ..a../.aa.
+..a../.aa/ ..a../.aa
+..a../.a.a ..a../.a.a
+..a../.a.. ..a../.a..
+..a../.a./ ..a../.a.
+..a../.a/a ..a../.a/a
+..a../.a/. ..a../.a
+..a../.a// ..a../.a
+..a../..aa ..a../..aa
+..a../..a. ..a../..a.
+..a../..a/ ..a../..a
+..a../...a ..a../...a
+..a../.... ..a../....
+..a../.../ ..a../...
+..a../../a a
+..a../../. .
+..a../..// .
+..a.././aa ..a../aa
+..a.././a. ..a../a.
+..a.././a/ ..a../a
+..a.././.a ..a../.a
+..a.././.. .
+..a../././ ..a..
+..a.././/a ..a../a
+..a.././/. ..a..
+..a.././// ..a..
+..a..//aaa ..a../aaa
+..a..//aa. ..a../aa.
+..a..//aa/ ..a../aa
+..a..//a.a ..a../a.a
+..a..//a.. ..a../a..
+..a..//a./ ..a../a.
+..a..//a/a ..a../a/a
+..a..//a/. ..a../a
+..a..//a// ..a../a
+..a..//.aa ..a../.aa
+..a..//.a. ..a../.a.
+..a..//.a/ ..a../.a
+..a..//..a ..a../..a
+..a..//... ..a../...
+..a..//../ .
+..a..//./a ..a../a
+..a..//./. ..a..
+..a..//.// ..a..
+..a..///aa ..a../aa
+..a..///a. ..a../a.
+..a..///a/ ..a../a
+..a..///.a ..a../.a
+..a..///.. .
+..a..///./ ..a..
+..a..////a ..a../a
+..a..////. ..a..
+..a..///// ..a..
+..a./aaaaa ..a./aaaaa
+..a./aaaa. ..a./aaaa.
+..a./aaaa/ ..a./aaaa
+..a./aaa.a ..a./aaa.a
+..a./aaa.. ..a./aaa..
+..a./aaa./ ..a./aaa.
+..a./aaa/a ..a./aaa/a
+..a./aaa/. ..a./aaa
+..a./aaa// ..a./aaa
+..a./aa.aa ..a./aa.aa
+..a./aa.a. ..a./aa.a.
+..a./aa.a/ ..a./aa.a
+..a./aa..a ..a./aa..a
+..a./aa... ..a./aa...
+..a./aa../ ..a./aa..
+..a./aa./a ..a./aa./a
+..a./aa./. ..a./aa.
+..a./aa.// ..a./aa.
+..a./aa/aa ..a./aa/aa
+..a./aa/a. ..a./aa/a.
+..a./aa/a/ ..a./aa/a
+..a./aa/.a ..a./aa/.a
+..a./aa/.. ..a.
+..a./aa/./ ..a./aa
+..a./aa//a ..a./aa/a
+..a./aa//. ..a./aa
+..a./aa/// ..a./aa
+..a./a.aaa ..a./a.aaa
+..a./a.aa. ..a./a.aa.
+..a./a.aa/ ..a./a.aa
+..a./a.a.a ..a./a.a.a
+..a./a.a.. ..a./a.a..
+..a./a.a./ ..a./a.a.
+..a./a.a/a ..a./a.a/a
+..a./a.a/. ..a./a.a
+..a./a.a// ..a./a.a
+..a./a..aa ..a./a..aa
+..a./a..a. ..a./a..a.
+..a./a..a/ ..a./a..a
+..a./a...a ..a./a...a
+..a./a.... ..a./a....
+..a./a.../ ..a./a...
+..a./a../a ..a./a../a
+..a./a../. ..a./a..
+..a./a..// ..a./a..
+..a./a./aa ..a./a./aa
+..a./a./a. ..a./a./a.
+..a./a./a/ ..a./a./a
+..a./a./.a ..a./a./.a
+..a./a./.. ..a.
+..a./a././ ..a./a.
+..a./a.//a ..a./a./a
+..a./a.//. ..a./a.
+..a./a./// ..a./a.
+..a./a/aaa ..a./a/aaa
+..a./a/aa. ..a./a/aa.
+..a./a/aa/ ..a./a/aa
+..a./a/a.a ..a./a/a.a
+..a./a/a.. ..a./a/a..
+..a./a/a./ ..a./a/a.
+..a./a/a/a ..a./a/a/a
+..a./a/a/. ..a./a/a
+..a./a/a// ..a./a/a
+..a./a/.aa ..a./a/.aa
+..a./a/.a. ..a./a/.a.
+..a./a/.a/ ..a./a/.a
+..a./a/..a ..a./a/..a
+..a./a/... ..a./a/...
+..a./a/../ ..a.
+..a./a/./a ..a./a/a
+..a./a/./. ..a./a
+..a./a/.// ..a./a
+..a./a//aa ..a./a/aa
+..a./a//a. ..a./a/a.
+..a./a//a/ ..a./a/a
+..a./a//.a ..a./a/.a
+..a./a//.. ..a.
+..a./a//./ ..a./a
+..a./a///a ..a./a/a
+..a./a///. ..a./a
+..a./a//// ..a./a
+..a./.aaaa ..a./.aaaa
+..a./.aaa. ..a./.aaa.
+..a./.aaa/ ..a./.aaa
+..a./.aa.a ..a./.aa.a
+..a./.aa.. ..a./.aa..
+..a./.aa./ ..a./.aa.
+..a./.aa/a ..a./.aa/a
+..a./.aa/. ..a./.aa
+..a./.aa// ..a./.aa
+..a./.a.aa ..a./.a.aa
+..a./.a.a. ..a./.a.a.
+..a./.a.a/ ..a./.a.a
+..a./.a..a ..a./.a..a
+..a./.a... ..a./.a...
+..a./.a../ ..a./.a..
+..a./.a./a ..a./.a./a
+..a./.a./. ..a./.a.
+..a./.a.// ..a./.a.
+..a./.a/aa ..a./.a/aa
+..a./.a/a. ..a./.a/a.
+..a./.a/a/ ..a./.a/a
+..a./.a/.a ..a./.a/.a
+..a./.a/.. ..a.
+..a./.a/./ ..a./.a
+..a./.a//a ..a./.a/a
+..a./.a//. ..a./.a
+..a./.a/// ..a./.a
+..a./..aaa ..a./..aaa
+..a./..aa. ..a./..aa.
+..a./..aa/ ..a./..aa
+..a./..a.a ..a./..a.a
+..a./..a.. ..a./..a..
+..a./..a./ ..a./..a.
+..a./..a/a ..a./..a/a
+..a./..a/. ..a./..a
+..a./..a// ..a./..a
+..a./...aa ..a./...aa
+..a./...a. ..a./...a.
+..a./...a/ ..a./...a
+..a./....a ..a./....a
+..a./..... ..a./.....
+..a./..../ ..a./....
+..a./.../a ..a./.../a
+..a./.../. ..a./...
+..a./...// ..a./...
+..a./../aa aa
+..a./../a. a.
+..a./../a/ a
+..a./../.a .a
+..a./../.. ..
+..a./.././ .
+..a./..//a a
+..a./..//. .
+..a./../// .
+..a././aaa ..a./aaa
+..a././aa. ..a./aa.
+..a././aa/ ..a./aa
+..a././a.a ..a./a.a
+..a././a.. ..a./a..
+..a././a./ ..a./a.
+..a././a/a ..a./a/a
+..a././a/. ..a./a
+..a././a// ..a./a
+..a././.aa ..a./.aa
+..a././.a. ..a./.a.
+..a././.a/ ..a./.a
+..a././..a ..a./..a
+..a././... ..a./...
+..a././../ .
+..a./././a ..a./a
+..a./././. ..a.
+..a././.// ..a.
+..a././/aa ..a./aa
+..a././/a. ..a./a.
+..a././/a/ ..a./a
+..a././/.a ..a./.a
+..a././/.. .
+..a././/./ ..a.
+..a././//a ..a./a
+..a././//. ..a.
+..a././/// ..a.
+..a.//aaaa ..a./aaaa
+..a.//aaa. ..a./aaa.
+..a.//aaa/ ..a./aaa
+..a.//aa.a ..a./aa.a
+..a.//aa.. ..a./aa..
+..a.//aa./ ..a./aa.
+..a.//aa/a ..a./aa/a
+..a.//aa/. ..a./aa
+..a.//aa// ..a./aa
+..a.//a.aa ..a./a.aa
+..a.//a.a. ..a./a.a.
+..a.//a.a/ ..a./a.a
+..a.//a..a ..a./a..a
+..a.//a... ..a./a...
+..a.//a../ ..a./a..
+..a.//a./a ..a./a./a
+..a.//a./. ..a./a.
+..a.//a.// ..a./a.
+..a.//a/aa ..a./a/aa
+..a.//a/a. ..a./a/a.
+..a.//a/a/ ..a./a/a
+..a.//a/.a ..a./a/.a
+..a.//a/.. ..a.
+..a.//a/./ ..a./a
+..a.//a//a ..a./a/a
+..a.//a//. ..a./a
+..a.//a/// ..a./a
+..a.//.aaa ..a./.aaa
+..a.//.aa. ..a./.aa.
+..a.//.aa/ ..a./.aa
+..a.//.a.a ..a./.a.a
+..a.//.a.. ..a./.a..
+..a.//.a./ ..a./.a.
+..a.//.a/a ..a./.a/a
+..a.//.a/. ..a./.a
+..a.//.a// ..a./.a
+..a.//..aa ..a./..aa
+..a.//..a. ..a./..a.
+..a.//..a/ ..a./..a
+..a.//...a ..a./...a
+..a.//.... ..a./....
+..a.//.../ ..a./...
+..a.//../a a
+..a.//../. .
+..a.//..// .
+..a.//./aa ..a./aa
+..a.//./a. ..a./a.
+..a.//./a/ ..a./a
+..a.//./.a ..a./.a
+..a.//./.. .
+..a.//././ ..a.
+..a.//.//a ..a./a
+..a.//.//. ..a.
+..a.//./// ..a.
+..a.///aaa ..a./aaa
+..a.///aa. ..a./aa.
+..a.///aa/ ..a./aa
+..a.///a.a ..a./a.a
+..a.///a.. ..a./a..
+..a.///a./ ..a./a.
+..a.///a/a ..a./a/a
+..a.///a/. ..a./a
+..a.///a// ..a./a
+..a.///.aa ..a./.aa
+..a.///.a. ..a./.a.
+..a.///.a/ ..a./.a
+..a.///..a ..a./..a
+..a.///... ..a./...
+..a.///../ .
+..a.///./a ..a./a
+..a.///./. ..a.
+..a.///.// ..a.
+..a.////aa ..a./aa
+..a.////a. ..a./a.
+..a.////a/ ..a./a
+..a.////.a ..a./.a
+..a.////.. .
+..a.////./ ..a.
+..a./////a ..a./a
+..a./////. ..a.
+..a.////// ..a.
+..a/aaaaaa ..a/aaaaaa
+..a/aaaaa. ..a/aaaaa.
+..a/aaaaa/ ..a/aaaaa
+..a/aaaa.a ..a/aaaa.a
+..a/aaaa.. ..a/aaaa..
+..a/aaaa./ ..a/aaaa.
+..a/aaaa/a ..a/aaaa/a
+..a/aaaa/. ..a/aaaa
+..a/aaaa// ..a/aaaa
+..a/aaa.aa ..a/aaa.aa
+..a/aaa.a. ..a/aaa.a.
+..a/aaa.a/ ..a/aaa.a
+..a/aaa..a ..a/aaa..a
+..a/aaa... ..a/aaa...
+..a/aaa../ ..a/aaa..
+..a/aaa./a ..a/aaa./a
+..a/aaa./. ..a/aaa.
+..a/aaa.// ..a/aaa.
+..a/aaa/aa ..a/aaa/aa
+..a/aaa/a. ..a/aaa/a.
+..a/aaa/a/ ..a/aaa/a
+..a/aaa/.a ..a/aaa/.a
+..a/aaa/.. ..a
+..a/aaa/./ ..a/aaa
+..a/aaa//a ..a/aaa/a
+..a/aaa//. ..a/aaa
+..a/aaa/// ..a/aaa
+..a/aa.aaa ..a/aa.aaa
+..a/aa.aa. ..a/aa.aa.
+..a/aa.aa/ ..a/aa.aa
+..a/aa.a.a ..a/aa.a.a
+..a/aa.a.. ..a/aa.a..
+..a/aa.a./ ..a/aa.a.
+..a/aa.a/a ..a/aa.a/a
+..a/aa.a/. ..a/aa.a
+..a/aa.a// ..a/aa.a
+..a/aa..aa ..a/aa..aa
+..a/aa..a. ..a/aa..a.
+..a/aa..a/ ..a/aa..a
+..a/aa...a ..a/aa...a
+..a/aa.... ..a/aa....
+..a/aa.../ ..a/aa...
+..a/aa../a ..a/aa../a
+..a/aa../. ..a/aa..
+..a/aa..// ..a/aa..
+..a/aa./aa ..a/aa./aa
+..a/aa./a. ..a/aa./a.
+..a/aa./a/ ..a/aa./a
+..a/aa./.a ..a/aa./.a
+..a/aa./.. ..a
+..a/aa././ ..a/aa.
+..a/aa.//a ..a/aa./a
+..a/aa.//. ..a/aa.
+..a/aa./// ..a/aa.
+..a/aa/aaa ..a/aa/aaa
+..a/aa/aa. ..a/aa/aa.
+..a/aa/aa/ ..a/aa/aa
+..a/aa/a.a ..a/aa/a.a
+..a/aa/a.. ..a/aa/a..
+..a/aa/a./ ..a/aa/a.
+..a/aa/a/a ..a/aa/a/a
+..a/aa/a/. ..a/aa/a
+..a/aa/a// ..a/aa/a
+..a/aa/.aa ..a/aa/.aa
+..a/aa/.a. ..a/aa/.a.
+..a/aa/.a/ ..a/aa/.a
+..a/aa/..a ..a/aa/..a
+..a/aa/... ..a/aa/...
+..a/aa/../ ..a
+..a/aa/./a ..a/aa/a
+..a/aa/./. ..a/aa
+..a/aa/.// ..a/aa
+..a/aa//aa ..a/aa/aa
+..a/aa//a. ..a/aa/a.
+..a/aa//a/ ..a/aa/a
+..a/aa//.a ..a/aa/.a
+..a/aa//.. ..a
+..a/aa//./ ..a/aa
+..a/aa///a ..a/aa/a
+..a/aa///. ..a/aa
+..a/aa//// ..a/aa
+..a/a.aaaa ..a/a.aaaa
+..a/a.aaa. ..a/a.aaa.
+..a/a.aaa/ ..a/a.aaa
+..a/a.aa.a ..a/a.aa.a
+..a/a.aa.. ..a/a.aa..
+..a/a.aa./ ..a/a.aa.
+..a/a.aa/a ..a/a.aa/a
+..a/a.aa/. ..a/a.aa
+..a/a.aa// ..a/a.aa
+..a/a.a.aa ..a/a.a.aa
+..a/a.a.a. ..a/a.a.a.
+..a/a.a.a/ ..a/a.a.a
+..a/a.a..a ..a/a.a..a
+..a/a.a... ..a/a.a...
+..a/a.a../ ..a/a.a..
+..a/a.a./a ..a/a.a./a
+..a/a.a./. ..a/a.a.
+..a/a.a.// ..a/a.a.
+..a/a.a/aa ..a/a.a/aa
+..a/a.a/a. ..a/a.a/a.
+..a/a.a/a/ ..a/a.a/a
+..a/a.a/.a ..a/a.a/.a
+..a/a.a/.. ..a
+..a/a.a/./ ..a/a.a
+..a/a.a//a ..a/a.a/a
+..a/a.a//. ..a/a.a
+..a/a.a/// ..a/a.a
+..a/a..aaa ..a/a..aaa
+..a/a..aa. ..a/a..aa.
+..a/a..aa/ ..a/a..aa
+..a/a..a.a ..a/a..a.a
+..a/a..a.. ..a/a..a..
+..a/a..a./ ..a/a..a.
+..a/a..a/a ..a/a..a/a
+..a/a..a/. ..a/a..a
+..a/a..a// ..a/a..a
+..a/a...aa ..a/a...aa
+..a/a...a. ..a/a...a.
+..a/a...a/ ..a/a...a
+..a/a....a ..a/a....a
+..a/a..... ..a/a.....
+..a/a..../ ..a/a....
+..a/a.../a ..a/a.../a
+..a/a.../. ..a/a...
+..a/a...// ..a/a...
+..a/a../aa ..a/a../aa
+..a/a../a. ..a/a../a.
+..a/a../a/ ..a/a../a
+..a/a../.a ..a/a../.a
+..a/a../.. ..a
+..a/a.././ ..a/a..
+..a/a..//a ..a/a../a
+..a/a..//. ..a/a..
+..a/a../// ..a/a..
+..a/a./aaa ..a/a./aaa
+..a/a./aa. ..a/a./aa.
+..a/a./aa/ ..a/a./aa
+..a/a./a.a ..a/a./a.a
+..a/a./a.. ..a/a./a..
+..a/a./a./ ..a/a./a.
+..a/a./a/a ..a/a./a/a
+..a/a./a/. ..a/a./a
+..a/a./a// ..a/a./a
+..a/a./.aa ..a/a./.aa
+..a/a./.a. ..a/a./.a.
+..a/a./.a/ ..a/a./.a
+..a/a./..a ..a/a./..a
+..a/a./... ..a/a./...
+..a/a./../ ..a
+..a/a././a ..a/a./a
+..a/a././. ..a/a.
+..a/a./.// ..a/a.
+..a/a.//aa ..a/a./aa
+..a/a.//a. ..a/a./a.
+..a/a.//a/ ..a/a./a
+..a/a.//.a ..a/a./.a
+..a/a.//.. ..a
+..a/a.//./ ..a/a.
+..a/a.///a ..a/a./a
+..a/a.///. ..a/a.
+..a/a.//// ..a/a.
+..a/a/aaaa ..a/a/aaaa
+..a/a/aaa. ..a/a/aaa.
+..a/a/aaa/ ..a/a/aaa
+..a/a/aa.a ..a/a/aa.a
+..a/a/aa.. ..a/a/aa..
+..a/a/aa./ ..a/a/aa.
+..a/a/aa/a ..a/a/aa/a
+..a/a/aa/. ..a/a/aa
+..a/a/aa// ..a/a/aa
+..a/a/a.aa ..a/a/a.aa
+..a/a/a.a. ..a/a/a.a.
+..a/a/a.a/ ..a/a/a.a
+..a/a/a..a ..a/a/a..a
+..a/a/a... ..a/a/a...
+..a/a/a../ ..a/a/a..
+..a/a/a./a ..a/a/a./a
+..a/a/a./. ..a/a/a.
+..a/a/a.// ..a/a/a.
+..a/a/a/aa ..a/a/a/aa
+..a/a/a/a. ..a/a/a/a.
+..a/a/a/a/ ..a/a/a/a
+..a/a/a/.a ..a/a/a/.a
+..a/a/a/.. ..a/a
+..a/a/a/./ ..a/a/a
+..a/a/a//a ..a/a/a/a
+..a/a/a//. ..a/a/a
+..a/a/a/// ..a/a/a
+..a/a/.aaa ..a/a/.aaa
+..a/a/.aa. ..a/a/.aa.
+..a/a/.aa/ ..a/a/.aa
+..a/a/.a.a ..a/a/.a.a
+..a/a/.a.. ..a/a/.a..
+..a/a/.a./ ..a/a/.a.
+..a/a/.a/a ..a/a/.a/a
+..a/a/.a/. ..a/a/.a
+..a/a/.a// ..a/a/.a
+..a/a/..aa ..a/a/..aa
+..a/a/..a. ..a/a/..a.
+..a/a/..a/ ..a/a/..a
+..a/a/...a ..a/a/...a
+..a/a/.... ..a/a/....
+..a/a/.../ ..a/a/...
+..a/a/../a ..a/a
+..a/a/../. ..a
+..a/a/..// ..a
+..a/a/./aa ..a/a/aa
+..a/a/./a. ..a/a/a.
+..a/a/./a/ ..a/a/a
+..a/a/./.a ..a/a/.a
+..a/a/./.. ..a
+..a/a/././ ..a/a
+..a/a/.//a ..a/a/a
+..a/a/.//. ..a/a
+..a/a/./// ..a/a
+..a/a//aaa ..a/a/aaa
+..a/a//aa. ..a/a/aa.
+..a/a//aa/ ..a/a/aa
+..a/a//a.a ..a/a/a.a
+..a/a//a.. ..a/a/a..
+..a/a//a./ ..a/a/a.
+..a/a//a/a ..a/a/a/a
+..a/a//a/. ..a/a/a
+..a/a//a// ..a/a/a
+..a/a//.aa ..a/a/.aa
+..a/a//.a. ..a/a/.a.
+..a/a//.a/ ..a/a/.a
+..a/a//..a ..a/a/..a
+..a/a//... ..a/a/...
+..a/a//../ ..a
+..a/a//./a ..a/a/a
+..a/a//./. ..a/a
+..a/a//.// ..a/a
+..a/a///aa ..a/a/aa
+..a/a///a. ..a/a/a.
+..a/a///a/ ..a/a/a
+..a/a///.a ..a/a/.a
+..a/a///.. ..a
+..a/a///./ ..a/a
+..a/a////a ..a/a/a
+..a/a////. ..a/a
+..a/a///// ..a/a
+..a/.aaaaa ..a/.aaaaa
+..a/.aaaa. ..a/.aaaa.
+..a/.aaaa/ ..a/.aaaa
+..a/.aaa.a ..a/.aaa.a
+..a/.aaa.. ..a/.aaa..
+..a/.aaa./ ..a/.aaa.
+..a/.aaa/a ..a/.aaa/a
+..a/.aaa/. ..a/.aaa
+..a/.aaa// ..a/.aaa
+..a/.aa.aa ..a/.aa.aa
+..a/.aa.a. ..a/.aa.a.
+..a/.aa.a/ ..a/.aa.a
+..a/.aa..a ..a/.aa..a
+..a/.aa... ..a/.aa...
+..a/.aa../ ..a/.aa..
+..a/.aa./a ..a/.aa./a
+..a/.aa./. ..a/.aa.
+..a/.aa.// ..a/.aa.
+..a/.aa/aa ..a/.aa/aa
+..a/.aa/a. ..a/.aa/a.
+..a/.aa/a/ ..a/.aa/a
+..a/.aa/.a ..a/.aa/.a
+..a/.aa/.. ..a
+..a/.aa/./ ..a/.aa
+..a/.aa//a ..a/.aa/a
+..a/.aa//. ..a/.aa
+..a/.aa/// ..a/.aa
+..a/.a.aaa ..a/.a.aaa
+..a/.a.aa. ..a/.a.aa.
+..a/.a.aa/ ..a/.a.aa
+..a/.a.a.a ..a/.a.a.a
+..a/.a.a.. ..a/.a.a..
+..a/.a.a./ ..a/.a.a.
+..a/.a.a/a ..a/.a.a/a
+..a/.a.a/. ..a/.a.a
+..a/.a.a// ..a/.a.a
+..a/.a..aa ..a/.a..aa
+..a/.a..a. ..a/.a..a.
+..a/.a..a/ ..a/.a..a
+..a/.a...a ..a/.a...a
+..a/.a.... ..a/.a....
+..a/.a.../ ..a/.a...
+..a/.a../a ..a/.a../a
+..a/.a../. ..a/.a..
+..a/.a..// ..a/.a..
+..a/.a./aa ..a/.a./aa
+..a/.a./a. ..a/.a./a.
+..a/.a./a/ ..a/.a./a
+..a/.a./.a ..a/.a./.a
+..a/.a./.. ..a
+..a/.a././ ..a/.a.
+..a/.a.//a ..a/.a./a
+..a/.a.//. ..a/.a.
+..a/.a./// ..a/.a.
+..a/.a/aaa ..a/.a/aaa
+..a/.a/aa. ..a/.a/aa.
+..a/.a/aa/ ..a/.a/aa
+..a/.a/a.a ..a/.a/a.a
+..a/.a/a.. ..a/.a/a..
+..a/.a/a./ ..a/.a/a.
+..a/.a/a/a ..a/.a/a/a
+..a/.a/a/. ..a/.a/a
+..a/.a/a// ..a/.a/a
+..a/.a/.aa ..a/.a/.aa
+..a/.a/.a. ..a/.a/.a.
+..a/.a/.a/ ..a/.a/.a
+..a/.a/..a ..a/.a/..a
+..a/.a/... ..a/.a/...
+..a/.a/../ ..a
+..a/.a/./a ..a/.a/a
+..a/.a/./. ..a/.a
+..a/.a/.// ..a/.a
+..a/.a//aa ..a/.a/aa
+..a/.a//a. ..a/.a/a.
+..a/.a//a/ ..a/.a/a
+..a/.a//.a ..a/.a/.a
+..a/.a//.. ..a
+..a/.a//./ ..a/.a
+..a/.a///a ..a/.a/a
+..a/.a///. ..a/.a
+..a/.a//// ..a/.a
+..a/..aaaa ..a/..aaaa
+..a/..aaa. ..a/..aaa.
+..a/..aaa/ ..a/..aaa
+..a/..aa.a ..a/..aa.a
+..a/..aa.. ..a/..aa..
+..a/..aa./ ..a/..aa.
+..a/..aa/a ..a/..aa/a
+..a/..aa/. ..a/..aa
+..a/..aa// ..a/..aa
+..a/..a.aa ..a/..a.aa
+..a/..a.a. ..a/..a.a.
+..a/..a.a/ ..a/..a.a
+..a/..a..a ..a/..a..a
+..a/..a... ..a/..a...
+..a/..a../ ..a/..a..
+..a/..a./a ..a/..a./a
+..a/..a./. ..a/..a.
+..a/..a.// ..a/..a.
+..a/..a/aa ..a/..a/aa
+..a/..a/a. ..a/..a/a.
+..a/..a/a/ ..a/..a/a
+..a/..a/.a ..a/..a/.a
+..a/..a/.. ..a
+..a/..a/./ ..a/..a
+..a/..a//a ..a/..a/a
+..a/..a//. ..a/..a
+..a/..a/// ..a/..a
+..a/...aaa ..a/...aaa
+..a/...aa. ..a/...aa.
+..a/...aa/ ..a/...aa
+..a/...a.a ..a/...a.a
+..a/...a.. ..a/...a..
+..a/...a./ ..a/...a.
+..a/...a/a ..a/...a/a
+..a/...a/. ..a/...a
+..a/...a// ..a/...a
+..a/....aa ..a/....aa
+..a/....a. ..a/....a.
+..a/....a/ ..a/....a
+..a/.....a ..a/.....a
+..a/...... ..a/......
+..a/...../ ..a/.....
+..a/..../a ..a/..../a
+..a/..../. ..a/....
+..a/....// ..a/....
+..a/.../aa ..a/.../aa
+..a/.../a. ..a/.../a.
+..a/.../a/ ..a/.../a
+..a/.../.a ..a/.../.a
+..a/.../.. ..a
+..a/..././ ..a/...
+..a/...//a ..a/.../a
+..a/...//. ..a/...
+..a/.../// ..a/...
+..a/../aaa aaa
+..a/../aa. aa.
+..a/../aa/ aa
+..a/../a.a a.a
+..a/../a.. a..
+..a/../a./ a.
+..a/../a/a a/a
+..a/../a/. a
+..a/../a// a
+..a/../.aa .aa
+..a/../.a. .a.
+..a/../.a/ .a
+..a/../..a ..a
+..a/../... ...
+..a/../../ ..
+..a/.././a a
+..a/.././. .
+..a/../.// .
+..a/..//aa aa
+..a/..//a. a.
+..a/..//a/ a
+..a/..//.a .a
+..a/..//.. ..
+..a/..//./ .
+..a/..///a a
+..a/..///. .
+..a/..//// .
+..a/./aaaa ..a/aaaa
+..a/./aaa. ..a/aaa.
+..a/./aaa/ ..a/aaa
+..a/./aa.a ..a/aa.a
+..a/./aa.. ..a/aa..
+..a/./aa./ ..a/aa.
+..a/./aa/a ..a/aa/a
+..a/./aa/. ..a/aa
+..a/./aa// ..a/aa
+..a/./a.aa ..a/a.aa
+..a/./a.a. ..a/a.a.
+..a/./a.a/ ..a/a.a
+..a/./a..a ..a/a..a
+..a/./a... ..a/a...
+..a/./a../ ..a/a..
+..a/./a./a ..a/a./a
+..a/./a./. ..a/a.
+..a/./a.// ..a/a.
+..a/./a/aa ..a/a/aa
+..a/./a/a. ..a/a/a.
+..a/./a/a/ ..a/a/a
+..a/./a/.a ..a/a/.a
+..a/./a/.. ..a
+..a/./a/./ ..a/a
+..a/./a//a ..a/a/a
+..a/./a//. ..a/a
+..a/./a/// ..a/a
+..a/./.aaa ..a/.aaa
+..a/./.aa. ..a/.aa.
+..a/./.aa/ ..a/.aa
+..a/./.a.a ..a/.a.a
+..a/./.a.. ..a/.a..
+..a/./.a./ ..a/.a.
+..a/./.a/a ..a/.a/a
+..a/./.a/. ..a/.a
+..a/./.a// ..a/.a
+..a/./..aa ..a/..aa
+..a/./..a. ..a/..a.
+..a/./..a/ ..a/..a
+..a/./...a ..a/...a
+..a/./.... ..a/....
+..a/./.../ ..a/...
+..a/./../a a
+..a/./../. .
+..a/./..// .
+..a/././aa ..a/aa
+..a/././a. ..a/a.
+..a/././a/ ..a/a
+..a/././.a ..a/.a
+..a/././.. .
+..a/./././ ..a
+..a/././/a ..a/a
+..a/././/. ..a
+..a/././// ..a
+..a/.//aaa ..a/aaa
+..a/.//aa. ..a/aa.
+..a/.//aa/ ..a/aa
+..a/.//a.a ..a/a.a
+..a/.//a.. ..a/a..
+..a/.//a./ ..a/a.
+..a/.//a/a ..a/a/a
+..a/.//a/. ..a/a
+..a/.//a// ..a/a
+..a/.//.aa ..a/.aa
+..a/.//.a. ..a/.a.
+..a/.//.a/ ..a/.a
+..a/.//..a ..a/..a
+..a/.//... ..a/...
+..a/.//../ .
+..a/.//./a ..a/a
+..a/.//./. ..a
+..a/.//.// ..a
+..a/.///aa ..a/aa
+..a/.///a. ..a/a.
+..a/.///a/ ..a/a
+..a/.///.a ..a/.a
+..a/.///.. .
+..a/.///./ ..a
+..a/.////a ..a/a
+..a/.////. ..a
+..a/.///// ..a
+..a//aaaaa ..a/aaaaa
+..a//aaaa. ..a/aaaa.
+..a//aaaa/ ..a/aaaa
+..a//aaa.a ..a/aaa.a
+..a//aaa.. ..a/aaa..
+..a//aaa./ ..a/aaa.
+..a//aaa/a ..a/aaa/a
+..a//aaa/. ..a/aaa
+..a//aaa// ..a/aaa
+..a//aa.aa ..a/aa.aa
+..a//aa.a. ..a/aa.a.
+..a//aa.a/ ..a/aa.a
+..a//aa..a ..a/aa..a
+..a//aa... ..a/aa...
+..a//aa../ ..a/aa..
+..a//aa./a ..a/aa./a
+..a//aa./. ..a/aa.
+..a//aa.// ..a/aa.
+..a//aa/aa ..a/aa/aa
+..a//aa/a. ..a/aa/a.
+..a//aa/a/ ..a/aa/a
+..a//aa/.a ..a/aa/.a
+..a//aa/.. ..a
+..a//aa/./ ..a/aa
+..a//aa//a ..a/aa/a
+..a//aa//. ..a/aa
+..a//aa/// ..a/aa
+..a//a.aaa ..a/a.aaa
+..a//a.aa. ..a/a.aa.
+..a//a.aa/ ..a/a.aa
+..a//a.a.a ..a/a.a.a
+..a//a.a.. ..a/a.a..
+..a//a.a./ ..a/a.a.
+..a//a.a/a ..a/a.a/a
+..a//a.a/. ..a/a.a
+..a//a.a// ..a/a.a
+..a//a..aa ..a/a..aa
+..a//a..a. ..a/a..a.
+..a//a..a/ ..a/a..a
+..a//a...a ..a/a...a
+..a//a.... ..a/a....
+..a//a.../ ..a/a...
+..a//a../a ..a/a../a
+..a//a../. ..a/a..
+..a//a..// ..a/a..
+..a//a./aa ..a/a./aa
+..a//a./a. ..a/a./a.
+..a//a./a/ ..a/a./a
+..a//a./.a ..a/a./.a
+..a//a./.. ..a
+..a//a././ ..a/a.
+..a//a.//a ..a/a./a
+..a//a.//. ..a/a.
+..a//a./// ..a/a.
+..a//a/aaa ..a/a/aaa
+..a//a/aa. ..a/a/aa.
+..a//a/aa/ ..a/a/aa
+..a//a/a.a ..a/a/a.a
+..a//a/a.. ..a/a/a..
+..a//a/a./ ..a/a/a.
+..a//a/a/a ..a/a/a/a
+..a//a/a/. ..a/a/a
+..a//a/a// ..a/a/a
+..a//a/.aa ..a/a/.aa
+..a//a/.a. ..a/a/.a.
+..a//a/.a/ ..a/a/.a
+..a//a/..a ..a/a/..a
+..a//a/... ..a/a/...
+..a//a/../ ..a
+..a//a/./a ..a/a/a
+..a//a/./. ..a/a
+..a//a/.// ..a/a
+..a//a//aa ..a/a/aa
+..a//a//a. ..a/a/a.
+..a//a//a/ ..a/a/a
+..a//a//.a ..a/a/.a
+..a//a//.. ..a
+..a//a//./ ..a/a
+..a//a///a ..a/a/a
+..a//a///. ..a/a
+..a//a//// ..a/a
+..a//.aaaa ..a/.aaaa
+..a//.aaa. ..a/.aaa.
+..a//.aaa/ ..a/.aaa
+..a//.aa.a ..a/.aa.a
+..a//.aa.. ..a/.aa..
+..a//.aa./ ..a/.aa.
+..a//.aa/a ..a/.aa/a
+..a//.aa/. ..a/.aa
+..a//.aa// ..a/.aa
+..a//.a.aa ..a/.a.aa
+..a//.a.a. ..a/.a.a.
+..a//.a.a/ ..a/.a.a
+..a//.a..a ..a/.a..a
+..a//.a... ..a/.a...
+..a//.a../ ..a/.a..
+..a//.a./a ..a/.a./a
+..a//.a./. ..a/.a.
+..a//.a.// ..a/.a.
+..a//.a/aa ..a/.a/aa
+..a//.a/a. ..a/.a/a.
+..a//.a/a/ ..a/.a/a
+..a//.a/.a ..a/.a/.a
+..a//.a/.. ..a
+..a//.a/./ ..a/.a
+..a//.a//a ..a/.a/a
+..a//.a//. ..a/.a
+..a//.a/// ..a/.a
+..a//..aaa ..a/..aaa
+..a//..aa. ..a/..aa.
+..a//..aa/ ..a/..aa
+..a//..a.a ..a/..a.a
+..a//..a.. ..a/..a..
+..a//..a./ ..a/..a.
+..a//..a/a ..a/..a/a
+..a//..a/. ..a/..a
+..a//..a// ..a/..a
+..a//...aa ..a/...aa
+..a//...a. ..a/...a.
+..a//...a/ ..a/...a
+..a//....a ..a/....a
+..a//..... ..a/.....
+..a//..../ ..a/....
+..a//.../a ..a/.../a
+..a//.../. ..a/...
+..a//...// ..a/...
+..a//../aa aa
+..a//../a. a.
+..a//../a/ a
+..a//../.a .a
+..a//../.. ..
+..a//.././ .
+..a//..//a a
+..a//..//. .
+..a//../// .
+..a//./aaa ..a/aaa
+..a//./aa. ..a/aa.
+..a//./aa/ ..a/aa
+..a//./a.a ..a/a.a
+..a//./a.. ..a/a..
+..a//./a./ ..a/a.
+..a//./a/a ..a/a/a
+..a//./a/. ..a/a
+..a//./a// ..a/a
+..a//./.aa ..a/.aa
+..a//./.a. ..a/.a.
+..a//./.a/ ..a/.a
+..a//./..a ..a/..a
+..a//./... ..a/...
+..a//./../ .
+..a//././a ..a/a
+..a//././. ..a
+..a//./.// ..a
+..a//.//aa ..a/aa
+..a//.//a. ..a/a.
+..a//.//a/ ..a/a
+..a//.//.a ..a/.a
+..a//.//.. .
+..a//.//./ ..a
+..a//.///a ..a/a
+..a//.///. ..a
+..a//.//// ..a
+..a///aaaa ..a/aaaa
+..a///aaa. ..a/aaa.
+..a///aaa/ ..a/aaa
+..a///aa.a ..a/aa.a
+..a///aa.. ..a/aa..
+..a///aa./ ..a/aa.
+..a///aa/a ..a/aa/a
+..a///aa/. ..a/aa
+..a///aa// ..a/aa
+..a///a.aa ..a/a.aa
+..a///a.a. ..a/a.a.
+..a///a.a/ ..a/a.a
+..a///a..a ..a/a..a
+..a///a... ..a/a...
+..a///a../ ..a/a..
+..a///a./a ..a/a./a
+..a///a./. ..a/a.
+..a///a.// ..a/a.
+..a///a/aa ..a/a/aa
+..a///a/a. ..a/a/a.
+..a///a/a/ ..a/a/a
+..a///a/.a ..a/a/.a
+..a///a/.. ..a
+..a///a/./ ..a/a
+..a///a//a ..a/a/a
+..a///a//. ..a/a
+..a///a/// ..a/a
+..a///.aaa ..a/.aaa
+..a///.aa. ..a/.aa.
+..a///.aa/ ..a/.aa
+..a///.a.a ..a/.a.a
+..a///.a.. ..a/.a..
+..a///.a./ ..a/.a.
+..a///.a/a ..a/.a/a
+..a///.a/. ..a/.a
+..a///.a// ..a/.a
+..a///..aa ..a/..aa
+..a///..a. ..a/..a.
+..a///..a/ ..a/..a
+..a///...a ..a/...a
+..a///.... ..a/....
+..a///.../ ..a/...
+..a///../a a
+..a///../. .
+..a///..// .
+..a///./aa ..a/aa
+..a///./a. ..a/a.
+..a///./a/ ..a/a
+..a///./.a ..a/.a
+..a///./.. .
+..a///././ ..a
+..a///.//a ..a/a
+..a///.//. ..a
+..a///./// ..a
+..a////aaa ..a/aaa
+..a////aa. ..a/aa.
+..a////aa/ ..a/aa
+..a////a.a ..a/a.a
+..a////a.. ..a/a..
+..a////a./ ..a/a.
+..a////a/a ..a/a/a
+..a////a/. ..a/a
+..a////a// ..a/a
+..a////.aa ..a/.aa
+..a////.a. ..a/.a.
+..a////.a/ ..a/.a
+..a////..a ..a/..a
+..a////... ..a/...
+..a////../ .
+..a////./a ..a/a
+..a////./. ..a
+..a////.// ..a
+..a/////aa ..a/aa
+..a/////a. ..a/a.
+..a/////a/ ..a/a
+..a/////.a ..a/.a
+..a/////.. .
+..a/////./ ..a
+..a//////a ..a/a
+..a//////. ..a
+..a/////// ..a
+...aaaaaaa ...aaaaaaa
+...aaaaaa. ...aaaaaa.
+...aaaaaa/ ...aaaaaa
+...aaaaa.a ...aaaaa.a
+...aaaaa.. ...aaaaa..
+...aaaaa./ ...aaaaa.
+...aaaaa/a ...aaaaa/a
+...aaaaa/. ...aaaaa
+...aaaaa// ...aaaaa
+...aaaa.aa ...aaaa.aa
+...aaaa.a. ...aaaa.a.
+...aaaa.a/ ...aaaa.a
+...aaaa..a ...aaaa..a
+...aaaa... ...aaaa...
+...aaaa../ ...aaaa..
+...aaaa./a ...aaaa./a
+...aaaa./. ...aaaa.
+...aaaa.// ...aaaa.
+...aaaa/aa ...aaaa/aa
+...aaaa/a. ...aaaa/a.
+...aaaa/a/ ...aaaa/a
+...aaaa/.a ...aaaa/.a
+...aaaa/.. .
+...aaaa/./ ...aaaa
+...aaaa//a ...aaaa/a
+...aaaa//. ...aaaa
+...aaaa/// ...aaaa
+...aaa.aaa ...aaa.aaa
+...aaa.aa. ...aaa.aa.
+...aaa.aa/ ...aaa.aa
+...aaa.a.a ...aaa.a.a
+...aaa.a.. ...aaa.a..
+...aaa.a./ ...aaa.a.
+...aaa.a/a ...aaa.a/a
+...aaa.a/. ...aaa.a
+...aaa.a// ...aaa.a
+...aaa..aa ...aaa..aa
+...aaa..a. ...aaa..a.
+...aaa..a/ ...aaa..a
+...aaa...a ...aaa...a
+...aaa.... ...aaa....
+...aaa.../ ...aaa...
+...aaa../a ...aaa../a
+...aaa../. ...aaa..
+...aaa..// ...aaa..
+...aaa./aa ...aaa./aa
+...aaa./a. ...aaa./a.
+...aaa./a/ ...aaa./a
+...aaa./.a ...aaa./.a
+...aaa./.. .
+...aaa././ ...aaa.
+...aaa.//a ...aaa./a
+...aaa.//. ...aaa.
+...aaa./// ...aaa.
+...aaa/aaa ...aaa/aaa
+...aaa/aa. ...aaa/aa.
+...aaa/aa/ ...aaa/aa
+...aaa/a.a ...aaa/a.a
+...aaa/a.. ...aaa/a..
+...aaa/a./ ...aaa/a.
+...aaa/a/a ...aaa/a/a
+...aaa/a/. ...aaa/a
+...aaa/a// ...aaa/a
+...aaa/.aa ...aaa/.aa
+...aaa/.a. ...aaa/.a.
+...aaa/.a/ ...aaa/.a
+...aaa/..a ...aaa/..a
+...aaa/... ...aaa/...
+...aaa/../ .
+...aaa/./a ...aaa/a
+...aaa/./. ...aaa
+...aaa/.// ...aaa
+...aaa//aa ...aaa/aa
+...aaa//a. ...aaa/a.
+...aaa//a/ ...aaa/a
+...aaa//.a ...aaa/.a
+...aaa//.. .
+...aaa//./ ...aaa
+...aaa///a ...aaa/a
+...aaa///. ...aaa
+...aaa//// ...aaa
+...aa.aaaa ...aa.aaaa
+...aa.aaa. ...aa.aaa.
+...aa.aaa/ ...aa.aaa
+...aa.aa.a ...aa.aa.a
+...aa.aa.. ...aa.aa..
+...aa.aa./ ...aa.aa.
+...aa.aa/a ...aa.aa/a
+...aa.aa/. ...aa.aa
+...aa.aa// ...aa.aa
+...aa.a.aa ...aa.a.aa
+...aa.a.a. ...aa.a.a.
+...aa.a.a/ ...aa.a.a
+...aa.a..a ...aa.a..a
+...aa.a... ...aa.a...
+...aa.a../ ...aa.a..
+...aa.a./a ...aa.a./a
+...aa.a./. ...aa.a.
+...aa.a.// ...aa.a.
+...aa.a/aa ...aa.a/aa
+...aa.a/a. ...aa.a/a.
+...aa.a/a/ ...aa.a/a
+...aa.a/.a ...aa.a/.a
+...aa.a/.. .
+...aa.a/./ ...aa.a
+...aa.a//a ...aa.a/a
+...aa.a//. ...aa.a
+...aa.a/// ...aa.a
+...aa..aaa ...aa..aaa
+...aa..aa. ...aa..aa.
+...aa..aa/ ...aa..aa
+...aa..a.a ...aa..a.a
+...aa..a.. ...aa..a..
+...aa..a./ ...aa..a.
+...aa..a/a ...aa..a/a
+...aa..a/. ...aa..a
+...aa..a// ...aa..a
+...aa...aa ...aa...aa
+...aa...a. ...aa...a.
+...aa...a/ ...aa...a
+...aa....a ...aa....a
+...aa..... ...aa.....
+...aa..../ ...aa....
+...aa.../a ...aa.../a
+...aa.../. ...aa...
+...aa...// ...aa...
+...aa../aa ...aa../aa
+...aa../a. ...aa../a.
+...aa../a/ ...aa../a
+...aa../.a ...aa../.a
+...aa../.. .
+...aa.././ ...aa..
+...aa..//a ...aa../a
+...aa..//. ...aa..
+...aa../// ...aa..
+...aa./aaa ...aa./aaa
+...aa./aa. ...aa./aa.
+...aa./aa/ ...aa./aa
+...aa./a.a ...aa./a.a
+...aa./a.. ...aa./a..
+...aa./a./ ...aa./a.
+...aa./a/a ...aa./a/a
+...aa./a/. ...aa./a
+...aa./a// ...aa./a
+...aa./.aa ...aa./.aa
+...aa./.a. ...aa./.a.
+...aa./.a/ ...aa./.a
+...aa./..a ...aa./..a
+...aa./... ...aa./...
+...aa./../ .
+...aa././a ...aa./a
+...aa././. ...aa.
+...aa./.// ...aa.
+...aa.//aa ...aa./aa
+...aa.//a. ...aa./a.
+...aa.//a/ ...aa./a
+...aa.//.a ...aa./.a
+...aa.//.. .
+...aa.//./ ...aa.
+...aa.///a ...aa./a
+...aa.///. ...aa.
+...aa.//// ...aa.
+...aa/aaaa ...aa/aaaa
+...aa/aaa. ...aa/aaa.
+...aa/aaa/ ...aa/aaa
+...aa/aa.a ...aa/aa.a
+...aa/aa.. ...aa/aa..
+...aa/aa./ ...aa/aa.
+...aa/aa/a ...aa/aa/a
+...aa/aa/. ...aa/aa
+...aa/aa// ...aa/aa
+...aa/a.aa ...aa/a.aa
+...aa/a.a. ...aa/a.a.
+...aa/a.a/ ...aa/a.a
+...aa/a..a ...aa/a..a
+...aa/a... ...aa/a...
+...aa/a../ ...aa/a..
+...aa/a./a ...aa/a./a
+...aa/a./. ...aa/a.
+...aa/a.// ...aa/a.
+...aa/a/aa ...aa/a/aa
+...aa/a/a. ...aa/a/a.
+...aa/a/a/ ...aa/a/a
+...aa/a/.a ...aa/a/.a
+...aa/a/.. ...aa
+...aa/a/./ ...aa/a
+...aa/a//a ...aa/a/a
+...aa/a//. ...aa/a
+...aa/a/// ...aa/a
+...aa/.aaa ...aa/.aaa
+...aa/.aa. ...aa/.aa.
+...aa/.aa/ ...aa/.aa
+...aa/.a.a ...aa/.a.a
+...aa/.a.. ...aa/.a..
+...aa/.a./ ...aa/.a.
+...aa/.a/a ...aa/.a/a
+...aa/.a/. ...aa/.a
+...aa/.a// ...aa/.a
+...aa/..aa ...aa/..aa
+...aa/..a. ...aa/..a.
+...aa/..a/ ...aa/..a
+...aa/...a ...aa/...a
+...aa/.... ...aa/....
+...aa/.../ ...aa/...
+...aa/../a a
+...aa/../. .
+...aa/..// .
+...aa/./aa ...aa/aa
+...aa/./a. ...aa/a.
+...aa/./a/ ...aa/a
+...aa/./.a ...aa/.a
+...aa/./.. .
+...aa/././ ...aa
+...aa/.//a ...aa/a
+...aa/.//. ...aa
+...aa/./// ...aa
+...aa//aaa ...aa/aaa
+...aa//aa. ...aa/aa.
+...aa//aa/ ...aa/aa
+...aa//a.a ...aa/a.a
+...aa//a.. ...aa/a..
+...aa//a./ ...aa/a.
+...aa//a/a ...aa/a/a
+...aa//a/. ...aa/a
+...aa//a// ...aa/a
+...aa//.aa ...aa/.aa
+...aa//.a. ...aa/.a.
+...aa//.a/ ...aa/.a
+...aa//..a ...aa/..a
+...aa//... ...aa/...
+...aa//../ .
+...aa//./a ...aa/a
+...aa//./. ...aa
+...aa//.// ...aa
+...aa///aa ...aa/aa
+...aa///a. ...aa/a.
+...aa///a/ ...aa/a
+...aa///.a ...aa/.a
+...aa///.. .
+...aa///./ ...aa
+...aa////a ...aa/a
+...aa////. ...aa
+...aa///// ...aa
+...a.aaaaa ...a.aaaaa
+...a.aaaa. ...a.aaaa.
+...a.aaaa/ ...a.aaaa
+...a.aaa.a ...a.aaa.a
+...a.aaa.. ...a.aaa..
+...a.aaa./ ...a.aaa.
+...a.aaa/a ...a.aaa/a
+...a.aaa/. ...a.aaa
+...a.aaa// ...a.aaa
+...a.aa.aa ...a.aa.aa
+...a.aa.a. ...a.aa.a.
+...a.aa.a/ ...a.aa.a
+...a.aa..a ...a.aa..a
+...a.aa... ...a.aa...
+...a.aa../ ...a.aa..
+...a.aa./a ...a.aa./a
+...a.aa./. ...a.aa.
+...a.aa.// ...a.aa.
+...a.aa/aa ...a.aa/aa
+...a.aa/a. ...a.aa/a.
+...a.aa/a/ ...a.aa/a
+...a.aa/.a ...a.aa/.a
+...a.aa/.. .
+...a.aa/./ ...a.aa
+...a.aa//a ...a.aa/a
+...a.aa//. ...a.aa
+...a.aa/// ...a.aa
+...a.a.aaa ...a.a.aaa
+...a.a.aa. ...a.a.aa.
+...a.a.aa/ ...a.a.aa
+...a.a.a.a ...a.a.a.a
+...a.a.a.. ...a.a.a..
+...a.a.a./ ...a.a.a.
+...a.a.a/a ...a.a.a/a
+...a.a.a/. ...a.a.a
+...a.a.a// ...a.a.a
+...a.a..aa ...a.a..aa
+...a.a..a. ...a.a..a.
+...a.a..a/ ...a.a..a
+...a.a...a ...a.a...a
+...a.a.... ...a.a....
+...a.a.../ ...a.a...
+...a.a../a ...a.a../a
+...a.a../. ...a.a..
+...a.a..// ...a.a..
+...a.a./aa ...a.a./aa
+...a.a./a. ...a.a./a.
+...a.a./a/ ...a.a./a
+...a.a./.a ...a.a./.a
+...a.a./.. .
+...a.a././ ...a.a.
+...a.a.//a ...a.a./a
+...a.a.//. ...a.a.
+...a.a./// ...a.a.
+...a.a/aaa ...a.a/aaa
+...a.a/aa. ...a.a/aa.
+...a.a/aa/ ...a.a/aa
+...a.a/a.a ...a.a/a.a
+...a.a/a.. ...a.a/a..
+...a.a/a./ ...a.a/a.
+...a.a/a/a ...a.a/a/a
+...a.a/a/. ...a.a/a
+...a.a/a// ...a.a/a
+...a.a/.aa ...a.a/.aa
+...a.a/.a. ...a.a/.a.
+...a.a/.a/ ...a.a/.a
+...a.a/..a ...a.a/..a
+...a.a/... ...a.a/...
+...a.a/../ .
+...a.a/./a ...a.a/a
+...a.a/./. ...a.a
+...a.a/.// ...a.a
+...a.a//aa ...a.a/aa
+...a.a//a. ...a.a/a.
+...a.a//a/ ...a.a/a
+...a.a//.a ...a.a/.a
+...a.a//.. .
+...a.a//./ ...a.a
+...a.a///a ...a.a/a
+...a.a///. ...a.a
+...a.a//// ...a.a
+...a..aaaa ...a..aaaa
+...a..aaa. ...a..aaa.
+...a..aaa/ ...a..aaa
+...a..aa.a ...a..aa.a
+...a..aa.. ...a..aa..
+...a..aa./ ...a..aa.
+...a..aa/a ...a..aa/a
+...a..aa/. ...a..aa
+...a..aa// ...a..aa
+...a..a.aa ...a..a.aa
+...a..a.a. ...a..a.a.
+...a..a.a/ ...a..a.a
+...a..a..a ...a..a..a
+...a..a... ...a..a...
+...a..a../ ...a..a..
+...a..a./a ...a..a./a
+...a..a./. ...a..a.
+...a..a.// ...a..a.
+...a..a/aa ...a..a/aa
+...a..a/a. ...a..a/a.
+...a..a/a/ ...a..a/a
+...a..a/.a ...a..a/.a
+...a..a/.. .
+...a..a/./ ...a..a
+...a..a//a ...a..a/a
+...a..a//. ...a..a
+...a..a/// ...a..a
+...a...aaa ...a...aaa
+...a...aa. ...a...aa.
+...a...aa/ ...a...aa
+...a...a.a ...a...a.a
+...a...a.. ...a...a..
+...a...a./ ...a...a.
+...a...a/a ...a...a/a
+...a...a/. ...a...a
+...a...a// ...a...a
+...a....aa ...a....aa
+...a....a. ...a....a.
+...a....a/ ...a....a
+...a.....a ...a.....a
+...a...... ...a......
+...a...../ ...a.....
+...a..../a ...a..../a
+...a..../. ...a....
+...a....// ...a....
+...a.../aa ...a.../aa
+...a.../a. ...a.../a.
+...a.../a/ ...a.../a
+...a.../.a ...a.../.a
+...a.../.. .
+...a..././ ...a...
+...a...//a ...a.../a
+...a...//. ...a...
+...a.../// ...a...
+...a../aaa ...a../aaa
+...a../aa. ...a../aa.
+...a../aa/ ...a../aa
+...a../a.a ...a../a.a
+...a../a.. ...a../a..
+...a../a./ ...a../a.
+...a../a/a ...a../a/a
+...a../a/. ...a../a
+...a../a// ...a../a
+...a../.aa ...a../.aa
+...a../.a. ...a../.a.
+...a../.a/ ...a../.a
+...a../..a ...a../..a
+...a../... ...a../...
+...a../../ .
+...a.././a ...a../a
+...a.././. ...a..
+...a../.// ...a..
+...a..//aa ...a../aa
+...a..//a. ...a../a.
+...a..//a/ ...a../a
+...a..//.a ...a../.a
+...a..//.. .
+...a..//./ ...a..
+...a..///a ...a../a
+...a..///. ...a..
+...a..//// ...a..
+...a./aaaa ...a./aaaa
+...a./aaa. ...a./aaa.
+...a./aaa/ ...a./aaa
+...a./aa.a ...a./aa.a
+...a./aa.. ...a./aa..
+...a./aa./ ...a./aa.
+...a./aa/a ...a./aa/a
+...a./aa/. ...a./aa
+...a./aa// ...a./aa
+...a./a.aa ...a./a.aa
+...a./a.a. ...a./a.a.
+...a./a.a/ ...a./a.a
+...a./a..a ...a./a..a
+...a./a... ...a./a...
+...a./a../ ...a./a..
+...a./a./a ...a./a./a
+...a./a./. ...a./a.
+...a./a.// ...a./a.
+...a./a/aa ...a./a/aa
+...a./a/a. ...a./a/a.
+...a./a/a/ ...a./a/a
+...a./a/.a ...a./a/.a
+...a./a/.. ...a.
+...a./a/./ ...a./a
+...a./a//a ...a./a/a
+...a./a//. ...a./a
+...a./a/// ...a./a
+...a./.aaa ...a./.aaa
+...a./.aa. ...a./.aa.
+...a./.aa/ ...a./.aa
+...a./.a.a ...a./.a.a
+...a./.a.. ...a./.a..
+...a./.a./ ...a./.a.
+...a./.a/a ...a./.a/a
+...a./.a/. ...a./.a
+...a./.a// ...a./.a
+...a./..aa ...a./..aa
+...a./..a. ...a./..a.
+...a./..a/ ...a./..a
+...a./...a ...a./...a
+...a./.... ...a./....
+...a./.../ ...a./...
+...a./../a a
+...a./../. .
+...a./..// .
+...a././aa ...a./aa
+...a././a. ...a./a.
+...a././a/ ...a./a
+...a././.a ...a./.a
+...a././.. .
+...a./././ ...a.
+...a././/a ...a./a
+...a././/. ...a.
+...a././// ...a.
+...a.//aaa ...a./aaa
+...a.//aa. ...a./aa.
+...a.//aa/ ...a./aa
+...a.//a.a ...a./a.a
+...a.//a.. ...a./a..
+...a.//a./ ...a./a.
+...a.//a/a ...a./a/a
+...a.//a/. ...a./a
+...a.//a// ...a./a
+...a.//.aa ...a./.aa
+...a.//.a. ...a./.a.
+...a.//.a/ ...a./.a
+...a.//..a ...a./..a
+...a.//... ...a./...
+...a.//../ .
+...a.//./a ...a./a
+...a.//./. ...a.
+...a.//.// ...a.
+...a.///aa ...a./aa
+...a.///a. ...a./a.
+...a.///a/ ...a./a
+...a.///.a ...a./.a
+...a.///.. .
+...a.///./ ...a.
+...a.////a ...a./a
+...a.////. ...a.
+...a.///// ...a.
+...a/aaaaa ...a/aaaaa
+...a/aaaa. ...a/aaaa.
+...a/aaaa/ ...a/aaaa
+...a/aaa.a ...a/aaa.a
+...a/aaa.. ...a/aaa..
+...a/aaa./ ...a/aaa.
+...a/aaa/a ...a/aaa/a
+...a/aaa/. ...a/aaa
+...a/aaa// ...a/aaa
+...a/aa.aa ...a/aa.aa
+...a/aa.a. ...a/aa.a.
+...a/aa.a/ ...a/aa.a
+...a/aa..a ...a/aa..a
+...a/aa... ...a/aa...
+...a/aa../ ...a/aa..
+...a/aa./a ...a/aa./a
+...a/aa./. ...a/aa.
+...a/aa.// ...a/aa.
+...a/aa/aa ...a/aa/aa
+...a/aa/a. ...a/aa/a.
+...a/aa/a/ ...a/aa/a
+...a/aa/.a ...a/aa/.a
+...a/aa/.. ...a
+...a/aa/./ ...a/aa
+...a/aa//a ...a/aa/a
+...a/aa//. ...a/aa
+...a/aa/// ...a/aa
+...a/a.aaa ...a/a.aaa
+...a/a.aa. ...a/a.aa.
+...a/a.aa/ ...a/a.aa
+...a/a.a.a ...a/a.a.a
+...a/a.a.. ...a/a.a..
+...a/a.a./ ...a/a.a.
+...a/a.a/a ...a/a.a/a
+...a/a.a/. ...a/a.a
+...a/a.a// ...a/a.a
+...a/a..aa ...a/a..aa
+...a/a..a. ...a/a..a.
+...a/a..a/ ...a/a..a
+...a/a...a ...a/a...a
+...a/a.... ...a/a....
+...a/a.../ ...a/a...
+...a/a../a ...a/a../a
+...a/a../. ...a/a..
+...a/a..// ...a/a..
+...a/a./aa ...a/a./aa
+...a/a./a. ...a/a./a.
+...a/a./a/ ...a/a./a
+...a/a./.a ...a/a./.a
+...a/a./.. ...a
+...a/a././ ...a/a.
+...a/a.//a ...a/a./a
+...a/a.//. ...a/a.
+...a/a./// ...a/a.
+...a/a/aaa ...a/a/aaa
+...a/a/aa. ...a/a/aa.
+...a/a/aa/ ...a/a/aa
+...a/a/a.a ...a/a/a.a
+...a/a/a.. ...a/a/a..
+...a/a/a./ ...a/a/a.
+...a/a/a/a ...a/a/a/a
+...a/a/a/. ...a/a/a
+...a/a/a// ...a/a/a
+...a/a/.aa ...a/a/.aa
+...a/a/.a. ...a/a/.a.
+...a/a/.a/ ...a/a/.a
+...a/a/..a ...a/a/..a
+...a/a/... ...a/a/...
+...a/a/../ ...a
+...a/a/./a ...a/a/a
+...a/a/./. ...a/a
+...a/a/.// ...a/a
+...a/a//aa ...a/a/aa
+...a/a//a. ...a/a/a.
+...a/a//a/ ...a/a/a
+...a/a//.a ...a/a/.a
+...a/a//.. ...a
+...a/a//./ ...a/a
+...a/a///a ...a/a/a
+...a/a///. ...a/a
+...a/a//// ...a/a
+...a/.aaaa ...a/.aaaa
+...a/.aaa. ...a/.aaa.
+...a/.aaa/ ...a/.aaa
+...a/.aa.a ...a/.aa.a
+...a/.aa.. ...a/.aa..
+...a/.aa./ ...a/.aa.
+...a/.aa/a ...a/.aa/a
+...a/.aa/. ...a/.aa
+...a/.aa// ...a/.aa
+...a/.a.aa ...a/.a.aa
+...a/.a.a. ...a/.a.a.
+...a/.a.a/ ...a/.a.a
+...a/.a..a ...a/.a..a
+...a/.a... ...a/.a...
+...a/.a../ ...a/.a..
+...a/.a./a ...a/.a./a
+...a/.a./. ...a/.a.
+...a/.a.// ...a/.a.
+...a/.a/aa ...a/.a/aa
+...a/.a/a. ...a/.a/a.
+...a/.a/a/ ...a/.a/a
+...a/.a/.a ...a/.a/.a
+...a/.a/.. ...a
+...a/.a/./ ...a/.a
+...a/.a//a ...a/.a/a
+...a/.a//. ...a/.a
+...a/.a/// ...a/.a
+...a/..aaa ...a/..aaa
+...a/..aa. ...a/..aa.
+...a/..aa/ ...a/..aa
+...a/..a.a ...a/..a.a
+...a/..a.. ...a/..a..
+...a/..a./ ...a/..a.
+...a/..a/a ...a/..a/a
+...a/..a/. ...a/..a
+...a/..a// ...a/..a
+...a/...aa ...a/...aa
+...a/...a. ...a/...a.
+...a/...a/ ...a/...a
+...a/....a ...a/....a
+...a/..... ...a/.....
+...a/..../ ...a/....
+...a/.../a ...a/.../a
+...a/.../. ...a/...
+...a/...// ...a/...
+...a/../aa aa
+...a/../a. a.
+...a/../a/ a
+...a/../.a .a
+...a/../.. ..
+...a/.././ .
+...a/..//a a
+...a/..//. .
+...a/../// .
+...a/./aaa ...a/aaa
+...a/./aa. ...a/aa.
+...a/./aa/ ...a/aa
+...a/./a.a ...a/a.a
+...a/./a.. ...a/a..
+...a/./a./ ...a/a.
+...a/./a/a ...a/a/a
+...a/./a/. ...a/a
+...a/./a// ...a/a
+...a/./.aa ...a/.aa
+...a/./.a. ...a/.a.
+...a/./.a/ ...a/.a
+...a/./..a ...a/..a
+...a/./... ...a/...
+...a/./../ .
+...a/././a ...a/a
+...a/././. ...a
+...a/./.// ...a
+...a/.//aa ...a/aa
+...a/.//a. ...a/a.
+...a/.//a/ ...a/a
+...a/.//.a ...a/.a
+...a/.//.. .
+...a/.//./ ...a
+...a/.///a ...a/a
+...a/.///. ...a
+...a/.//// ...a
+...a//aaaa ...a/aaaa
+...a//aaa. ...a/aaa.
+...a//aaa/ ...a/aaa
+...a//aa.a ...a/aa.a
+...a//aa.. ...a/aa..
+...a//aa./ ...a/aa.
+...a//aa/a ...a/aa/a
+...a//aa/. ...a/aa
+...a//aa// ...a/aa
+...a//a.aa ...a/a.aa
+...a//a.a. ...a/a.a.
+...a//a.a/ ...a/a.a
+...a//a..a ...a/a..a
+...a//a... ...a/a...
+...a//a../ ...a/a..
+...a//a./a ...a/a./a
+...a//a./. ...a/a.
+...a//a.// ...a/a.
+...a//a/aa ...a/a/aa
+...a//a/a. ...a/a/a.
+...a//a/a/ ...a/a/a
+...a//a/.a ...a/a/.a
+...a//a/.. ...a
+...a//a/./ ...a/a
+...a//a//a ...a/a/a
+...a//a//. ...a/a
+...a//a/// ...a/a
+...a//.aaa ...a/.aaa
+...a//.aa. ...a/.aa.
+...a//.aa/ ...a/.aa
+...a//.a.a ...a/.a.a
+...a//.a.. ...a/.a..
+...a//.a./ ...a/.a.
+...a//.a/a ...a/.a/a
+...a//.a/. ...a/.a
+...a//.a// ...a/.a
+...a//..aa ...a/..aa
+...a//..a. ...a/..a.
+...a//..a/ ...a/..a
+...a//...a ...a/...a
+...a//.... ...a/....
+...a//.../ ...a/...
+...a//../a a
+...a//../. .
+...a//..// .
+...a//./aa ...a/aa
+...a//./a. ...a/a.
+...a//./a/ ...a/a
+...a//./.a ...a/.a
+...a//./.. .
+...a//././ ...a
+...a//.//a ...a/a
+...a//.//. ...a
+...a//./// ...a
+...a///aaa ...a/aaa
+...a///aa. ...a/aa.
+...a///aa/ ...a/aa
+...a///a.a ...a/a.a
+...a///a.. ...a/a..
+...a///a./ ...a/a.
+...a///a/a ...a/a/a
+...a///a/. ...a/a
+...a///a// ...a/a
+...a///.aa ...a/.aa
+...a///.a. ...a/.a.
+...a///.a/ ...a/.a
+...a///..a ...a/..a
+...a///... ...a/...
+...a///../ .
+...a///./a ...a/a
+...a///./. ...a
+...a///.// ...a
+...a////aa ...a/aa
+...a////a. ...a/a.
+...a////a/ ...a/a
+...a////.a ...a/.a
+...a////.. .
+...a////./ ...a
+...a/////a ...a/a
+...a/////. ...a
+...a////// ...a
+....aaaaaa ....aaaaaa
+....aaaaa. ....aaaaa.
+....aaaaa/ ....aaaaa
+....aaaa.a ....aaaa.a
+....aaaa.. ....aaaa..
+....aaaa./ ....aaaa.
+....aaaa/a ....aaaa/a
+....aaaa/. ....aaaa
+....aaaa// ....aaaa
+....aaa.aa ....aaa.aa
+....aaa.a. ....aaa.a.
+....aaa.a/ ....aaa.a
+....aaa..a ....aaa..a
+....aaa... ....aaa...
+....aaa../ ....aaa..
+....aaa./a ....aaa./a
+....aaa./. ....aaa.
+....aaa.// ....aaa.
+....aaa/aa ....aaa/aa
+....aaa/a. ....aaa/a.
+....aaa/a/ ....aaa/a
+....aaa/.a ....aaa/.a
+....aaa/.. .
+....aaa/./ ....aaa
+....aaa//a ....aaa/a
+....aaa//. ....aaa
+....aaa/// ....aaa
+....aa.aaa ....aa.aaa
+....aa.aa. ....aa.aa.
+....aa.aa/ ....aa.aa
+....aa.a.a ....aa.a.a
+....aa.a.. ....aa.a..
+....aa.a./ ....aa.a.
+....aa.a/a ....aa.a/a
+....aa.a/. ....aa.a
+....aa.a// ....aa.a
+....aa..aa ....aa..aa
+....aa..a. ....aa..a.
+....aa..a/ ....aa..a
+....aa...a ....aa...a
+....aa.... ....aa....
+....aa.../ ....aa...
+....aa../a ....aa../a
+....aa../. ....aa..
+....aa..// ....aa..
+....aa./aa ....aa./aa
+....aa./a. ....aa./a.
+....aa./a/ ....aa./a
+....aa./.a ....aa./.a
+....aa./.. .
+....aa././ ....aa.
+....aa.//a ....aa./a
+....aa.//. ....aa.
+....aa./// ....aa.
+....aa/aaa ....aa/aaa
+....aa/aa. ....aa/aa.
+....aa/aa/ ....aa/aa
+....aa/a.a ....aa/a.a
+....aa/a.. ....aa/a..
+....aa/a./ ....aa/a.
+....aa/a/a ....aa/a/a
+....aa/a/. ....aa/a
+....aa/a// ....aa/a
+....aa/.aa ....aa/.aa
+....aa/.a. ....aa/.a.
+....aa/.a/ ....aa/.a
+....aa/..a ....aa/..a
+....aa/... ....aa/...
+....aa/../ .
+....aa/./a ....aa/a
+....aa/./. ....aa
+....aa/.// ....aa
+....aa//aa ....aa/aa
+....aa//a. ....aa/a.
+....aa//a/ ....aa/a
+....aa//.a ....aa/.a
+....aa//.. .
+....aa//./ ....aa
+....aa///a ....aa/a
+....aa///. ....aa
+....aa//// ....aa
+....a.aaaa ....a.aaaa
+....a.aaa. ....a.aaa.
+....a.aaa/ ....a.aaa
+....a.aa.a ....a.aa.a
+....a.aa.. ....a.aa..
+....a.aa./ ....a.aa.
+....a.aa/a ....a.aa/a
+....a.aa/. ....a.aa
+....a.aa// ....a.aa
+....a.a.aa ....a.a.aa
+....a.a.a. ....a.a.a.
+....a.a.a/ ....a.a.a
+....a.a..a ....a.a..a
+....a.a... ....a.a...
+....a.a../ ....a.a..
+....a.a./a ....a.a./a
+....a.a./. ....a.a.
+....a.a.// ....a.a.
+....a.a/aa ....a.a/aa
+....a.a/a. ....a.a/a.
+....a.a/a/ ....a.a/a
+....a.a/.a ....a.a/.a
+....a.a/.. .
+....a.a/./ ....a.a
+....a.a//a ....a.a/a
+....a.a//. ....a.a
+....a.a/// ....a.a
+....a..aaa ....a..aaa
+....a..aa. ....a..aa.
+....a..aa/ ....a..aa
+....a..a.a ....a..a.a
+....a..a.. ....a..a..
+....a..a./ ....a..a.
+....a..a/a ....a..a/a
+....a..a/. ....a..a
+....a..a// ....a..a
+....a...aa ....a...aa
+....a...a. ....a...a.
+....a...a/ ....a...a
+....a....a ....a....a
+....a..... ....a.....
+....a..../ ....a....
+....a.../a ....a.../a
+....a.../. ....a...
+....a...// ....a...
+....a../aa ....a../aa
+....a../a. ....a../a.
+....a../a/ ....a../a
+....a../.a ....a../.a
+....a../.. .
+....a.././ ....a..
+....a..//a ....a../a
+....a..//. ....a..
+....a../// ....a..
+....a./aaa ....a./aaa
+....a./aa. ....a./aa.
+....a./aa/ ....a./aa
+....a./a.a ....a./a.a
+....a./a.. ....a./a..
+....a./a./ ....a./a.
+....a./a/a ....a./a/a
+....a./a/. ....a./a
+....a./a// ....a./a
+....a./.aa ....a./.aa
+....a./.a. ....a./.a.
+....a./.a/ ....a./.a
+....a./..a ....a./..a
+....a./... ....a./...
+....a./../ .
+....a././a ....a./a
+....a././. ....a.
+....a./.// ....a.
+....a.//aa ....a./aa
+....a.//a. ....a./a.
+....a.//a/ ....a./a
+....a.//.a ....a./.a
+....a.//.. .
+....a.//./ ....a.
+....a.///a ....a./a
+....a.///. ....a.
+....a.//// ....a.
+....a/aaaa ....a/aaaa
+....a/aaa. ....a/aaa.
+....a/aaa/ ....a/aaa
+....a/aa.a ....a/aa.a
+....a/aa.. ....a/aa..
+....a/aa./ ....a/aa.
+....a/aa/a ....a/aa/a
+....a/aa/. ....a/aa
+....a/aa// ....a/aa
+....a/a.aa ....a/a.aa
+....a/a.a. ....a/a.a.
+....a/a.a/ ....a/a.a
+....a/a..a ....a/a..a
+....a/a... ....a/a...
+....a/a../ ....a/a..
+....a/a./a ....a/a./a
+....a/a./. ....a/a.
+....a/a.// ....a/a.
+....a/a/aa ....a/a/aa
+....a/a/a. ....a/a/a.
+....a/a/a/ ....a/a/a
+....a/a/.a ....a/a/.a
+....a/a/.. ....a
+....a/a/./ ....a/a
+....a/a//a ....a/a/a
+....a/a//. ....a/a
+....a/a/// ....a/a
+....a/.aaa ....a/.aaa
+....a/.aa. ....a/.aa.
+....a/.aa/ ....a/.aa
+....a/.a.a ....a/.a.a
+....a/.a.. ....a/.a..
+....a/.a./ ....a/.a.
+....a/.a/a ....a/.a/a
+....a/.a/. ....a/.a
+....a/.a// ....a/.a
+....a/..aa ....a/..aa
+....a/..a. ....a/..a.
+....a/..a/ ....a/..a
+....a/...a ....a/...a
+....a/.... ....a/....
+....a/.../ ....a/...
+....a/../a a
+....a/../. .
+....a/..// .
+....a/./aa ....a/aa
+....a/./a. ....a/a.
+....a/./a/ ....a/a
+....a/./.a ....a/.a
+....a/./.. .
+....a/././ ....a
+....a/.//a ....a/a
+....a/.//. ....a
+....a/./// ....a
+....a//aaa ....a/aaa
+....a//aa. ....a/aa.
+....a//aa/ ....a/aa
+....a//a.a ....a/a.a
+....a//a.. ....a/a..
+....a//a./ ....a/a.
+....a//a/a ....a/a/a
+....a//a/. ....a/a
+....a//a// ....a/a
+....a//.aa ....a/.aa
+....a//.a. ....a/.a.
+....a//.a/ ....a/.a
+....a//..a ....a/..a
+....a//... ....a/...
+....a//../ .
+....a//./a ....a/a
+....a//./. ....a
+....a//.// ....a
+....a///aa ....a/aa
+....a///a. ....a/a.
+....a///a/ ....a/a
+....a///.a ....a/.a
+....a///.. .
+....a///./ ....a
+....a////a ....a/a
+....a////. ....a
+....a///// ....a
+.....aaaaa .....aaaaa
+.....aaaa. .....aaaa.
+.....aaaa/ .....aaaa
+.....aaa.a .....aaa.a
+.....aaa.. .....aaa..
+.....aaa./ .....aaa.
+.....aaa/a .....aaa/a
+.....aaa/. .....aaa
+.....aaa// .....aaa
+.....aa.aa .....aa.aa
+.....aa.a. .....aa.a.
+.....aa.a/ .....aa.a
+.....aa..a .....aa..a
+.....aa... .....aa...
+.....aa../ .....aa..
+.....aa./a .....aa./a
+.....aa./. .....aa.
+.....aa.// .....aa.
+.....aa/aa .....aa/aa
+.....aa/a. .....aa/a.
+.....aa/a/ .....aa/a
+.....aa/.a .....aa/.a
+.....aa/.. .
+.....aa/./ .....aa
+.....aa//a .....aa/a
+.....aa//. .....aa
+.....aa/// .....aa
+.....a.aaa .....a.aaa
+.....a.aa. .....a.aa.
+.....a.aa/ .....a.aa
+.....a.a.a .....a.a.a
+.....a.a.. .....a.a..
+.....a.a./ .....a.a.
+.....a.a/a .....a.a/a
+.....a.a/. .....a.a
+.....a.a// .....a.a
+.....a..aa .....a..aa
+.....a..a. .....a..a.
+.....a..a/ .....a..a
+.....a...a .....a...a
+.....a.... .....a....
+.....a.../ .....a...
+.....a../a .....a../a
+.....a../. .....a..
+.....a..// .....a..
+.....a./aa .....a./aa
+.....a./a. .....a./a.
+.....a./a/ .....a./a
+.....a./.a .....a./.a
+.....a./.. .
+.....a././ .....a.
+.....a.//a .....a./a
+.....a.//. .....a.
+.....a./// .....a.
+.....a/aaa .....a/aaa
+.....a/aa. .....a/aa.
+.....a/aa/ .....a/aa
+.....a/a.a .....a/a.a
+.....a/a.. .....a/a..
+.....a/a./ .....a/a.
+.....a/a/a .....a/a/a
+.....a/a/. .....a/a
+.....a/a// .....a/a
+.....a/.aa .....a/.aa
+.....a/.a. .....a/.a.
+.....a/.a/ .....a/.a
+.....a/..a .....a/..a
+.....a/... .....a/...
+.....a/../ .
+.....a/./a .....a/a
+.....a/./. .....a
+.....a/.// .....a
+.....a//aa .....a/aa
+.....a//a. .....a/a.
+.....a//a/ .....a/a
+.....a//.a .....a/.a
+.....a//.. .
+.....a//./ .....a
+.....a///a .....a/a
+.....a///. .....a
+.....a//// .....a
+......aaaa ......aaaa
+......aaa. ......aaa.
+......aaa/ ......aaa
+......aa.a ......aa.a
+......aa.. ......aa..
+......aa./ ......aa.
+......aa/a ......aa/a
+......aa/. ......aa
+......aa// ......aa
+......a.aa ......a.aa
+......a.a. ......a.a.
+......a.a/ ......a.a
+......a..a ......a..a
+......a... ......a...
+......a../ ......a..
+......a./a ......a./a
+......a./. ......a.
+......a.// ......a.
+......a/aa ......a/aa
+......a/a. ......a/a.
+......a/a/ ......a/a
+......a/.a ......a/.a
+......a/.. .
+......a/./ ......a
+......a//a ......a/a
+......a//. ......a
+......a/// ......a
+.......aaa .......aaa
+.......aa. .......aa.
+.......aa/ .......aa
+.......a.a .......a.a
+.......a.. .......a..
+.......a./ .......a.
+.......a/a .......a/a
+.......a/. .......a
+.......a// .......a
+........aa ........aa
+........a. ........a.
+........a/ ........a
+.........a .........a
+.......... ..........
+........./ .........
+......../a ......../a
+......../. ........
+........// ........
+......./aa ......./aa
+......./a. ......./a.
+......./a/ ......./a
+......./.a ......./.a
+......./.. .
+......././ .......
+.......//a ......./a
+.......//. .......
+......./// .......
+....../aaa ....../aaa
+....../aa. ....../aa.
+....../aa/ ....../aa
+....../a.a ....../a.a
+....../a.. ....../a..
+....../a./ ....../a.
+....../a/a ....../a/a
+....../a/. ....../a
+....../a// ....../a
+....../.aa ....../.aa
+....../.a. ....../.a.
+....../.a/ ....../.a
+....../..a ....../..a
+....../... ....../...
+....../../ .
+.....././a ....../a
+.....././. ......
+....../.// ......
+......//aa ....../aa
+......//a. ....../a.
+......//a/ ....../a
+......//.a ....../.a
+......//.. .
+......//./ ......
+......///a ....../a
+......///. ......
+......//// ......
+...../aaaa ...../aaaa
+...../aaa. ...../aaa.
+...../aaa/ ...../aaa
+...../aa.a ...../aa.a
+...../aa.. ...../aa..
+...../aa./ ...../aa.
+...../aa/a ...../aa/a
+...../aa/. ...../aa
+...../aa// ...../aa
+...../a.aa ...../a.aa
+...../a.a. ...../a.a.
+...../a.a/ ...../a.a
+...../a..a ...../a..a
+...../a... ...../a...
+...../a../ ...../a..
+...../a./a ...../a./a
+...../a./. ...../a.
+...../a.// ...../a.
+...../a/aa ...../a/aa
+...../a/a. ...../a/a.
+...../a/a/ ...../a/a
+...../a/.a ...../a/.a
+...../a/.. .....
+...../a/./ ...../a
+...../a//a ...../a/a
+...../a//. ...../a
+...../a/// ...../a
+...../.aaa ...../.aaa
+...../.aa. ...../.aa.
+...../.aa/ ...../.aa
+...../.a.a ...../.a.a
+...../.a.. ...../.a..
+...../.a./ ...../.a.
+...../.a/a ...../.a/a
+...../.a/. ...../.a
+...../.a// ...../.a
+...../..aa ...../..aa
+...../..a. ...../..a.
+...../..a/ ...../..a
+...../...a ...../...a
+...../.... ...../....
+...../.../ ...../...
+...../../a a
+...../../. .
+...../..// .
+....././aa ...../aa
+....././a. ...../a.
+....././a/ ...../a
+....././.a ...../.a
+....././.. .
+...../././ .....
+....././/a ...../a
+....././/. .....
+....././// .....
+.....//aaa ...../aaa
+.....//aa. ...../aa.
+.....//aa/ ...../aa
+.....//a.a ...../a.a
+.....//a.. ...../a..
+.....//a./ ...../a.
+.....//a/a ...../a/a
+.....//a/. ...../a
+.....//a// ...../a
+.....//.aa ...../.aa
+.....//.a. ...../.a.
+.....//.a/ ...../.a
+.....//..a ...../..a
+.....//... ...../...
+.....//../ .
+.....//./a ...../a
+.....//./. .....
+.....//.// .....
+.....///aa ...../aa
+.....///a. ...../a.
+.....///a/ ...../a
+.....///.a ...../.a
+.....///.. .
+.....///./ .....
+.....////a ...../a
+.....////. .....
+.....///// .....
+..../aaaaa ..../aaaaa
+..../aaaa. ..../aaaa.
+..../aaaa/ ..../aaaa
+..../aaa.a ..../aaa.a
+..../aaa.. ..../aaa..
+..../aaa./ ..../aaa.
+..../aaa/a ..../aaa/a
+..../aaa/. ..../aaa
+..../aaa// ..../aaa
+..../aa.aa ..../aa.aa
+..../aa.a. ..../aa.a.
+..../aa.a/ ..../aa.a
+..../aa..a ..../aa..a
+..../aa... ..../aa...
+..../aa../ ..../aa..
+..../aa./a ..../aa./a
+..../aa./. ..../aa.
+..../aa.// ..../aa.
+..../aa/aa ..../aa/aa
+..../aa/a. ..../aa/a.
+..../aa/a/ ..../aa/a
+..../aa/.a ..../aa/.a
+..../aa/.. ....
+..../aa/./ ..../aa
+..../aa//a ..../aa/a
+..../aa//. ..../aa
+..../aa/// ..../aa
+..../a.aaa ..../a.aaa
+..../a.aa. ..../a.aa.
+..../a.aa/ ..../a.aa
+..../a.a.a ..../a.a.a
+..../a.a.. ..../a.a..
+..../a.a./ ..../a.a.
+..../a.a/a ..../a.a/a
+..../a.a/. ..../a.a
+..../a.a// ..../a.a
+..../a..aa ..../a..aa
+..../a..a. ..../a..a.
+..../a..a/ ..../a..a
+..../a...a ..../a...a
+..../a.... ..../a....
+..../a.../ ..../a...
+..../a../a ..../a../a
+..../a../. ..../a..
+..../a..// ..../a..
+..../a./aa ..../a./aa
+..../a./a. ..../a./a.
+..../a./a/ ..../a./a
+..../a./.a ..../a./.a
+..../a./.. ....
+..../a././ ..../a.
+..../a.//a ..../a./a
+..../a.//. ..../a.
+..../a./// ..../a.
+..../a/aaa ..../a/aaa
+..../a/aa. ..../a/aa.
+..../a/aa/ ..../a/aa
+..../a/a.a ..../a/a.a
+..../a/a.. ..../a/a..
+..../a/a./ ..../a/a.
+..../a/a/a ..../a/a/a
+..../a/a/. ..../a/a
+..../a/a// ..../a/a
+..../a/.aa ..../a/.aa
+..../a/.a. ..../a/.a.
+..../a/.a/ ..../a/.a
+..../a/..a ..../a/..a
+..../a/... ..../a/...
+..../a/../ ....
+..../a/./a ..../a/a
+..../a/./. ..../a
+..../a/.// ..../a
+..../a//aa ..../a/aa
+..../a//a. ..../a/a.
+..../a//a/ ..../a/a
+..../a//.a ..../a/.a
+..../a//.. ....
+..../a//./ ..../a
+..../a///a ..../a/a
+..../a///. ..../a
+..../a//// ..../a
+..../.aaaa ..../.aaaa
+..../.aaa. ..../.aaa.
+..../.aaa/ ..../.aaa
+..../.aa.a ..../.aa.a
+..../.aa.. ..../.aa..
+..../.aa./ ..../.aa.
+..../.aa/a ..../.aa/a
+..../.aa/. ..../.aa
+..../.aa// ..../.aa
+..../.a.aa ..../.a.aa
+..../.a.a. ..../.a.a.
+..../.a.a/ ..../.a.a
+..../.a..a ..../.a..a
+..../.a... ..../.a...
+..../.a../ ..../.a..
+..../.a./a ..../.a./a
+..../.a./. ..../.a.
+..../.a.// ..../.a.
+..../.a/aa ..../.a/aa
+..../.a/a. ..../.a/a.
+..../.a/a/ ..../.a/a
+..../.a/.a ..../.a/.a
+..../.a/.. ....
+..../.a/./ ..../.a
+..../.a//a ..../.a/a
+..../.a//. ..../.a
+..../.a/// ..../.a
+..../..aaa ..../..aaa
+..../..aa. ..../..aa.
+..../..aa/ ..../..aa
+..../..a.a ..../..a.a
+..../..a.. ..../..a..
+..../..a./ ..../..a.
+..../..a/a ..../..a/a
+..../..a/. ..../..a
+..../..a// ..../..a
+..../...aa ..../...aa
+..../...a. ..../...a.
+..../...a/ ..../...a
+..../....a ..../....a
+..../..... ..../.....
+..../..../ ..../....
+..../.../a ..../.../a
+..../.../. ..../...
+..../...// ..../...
+..../../aa aa
+..../../a. a.
+..../../a/ a
+..../../.a .a
+..../../.. ..
+..../.././ .
+..../..//a a
+..../..//. .
+..../../// .
+...././aaa ..../aaa
+...././aa. ..../aa.
+...././aa/ ..../aa
+...././a.a ..../a.a
+...././a.. ..../a..
+...././a./ ..../a.
+...././a/a ..../a/a
+...././a/. ..../a
+...././a// ..../a
+...././.aa ..../.aa
+...././.a. ..../.a.
+...././.a/ ..../.a
+...././..a ..../..a
+...././... ..../...
+...././../ .
+..../././a ..../a
+..../././. ....
+...././.// ....
+...././/aa ..../aa
+...././/a. ..../a.
+...././/a/ ..../a
+...././/.a ..../.a
+...././/.. .
+...././/./ ....
+...././//a ..../a
+...././//. ....
+...././/// ....
+....//aaaa ..../aaaa
+....//aaa. ..../aaa.
+....//aaa/ ..../aaa
+....//aa.a ..../aa.a
+....//aa.. ..../aa..
+....//aa./ ..../aa.
+....//aa/a ..../aa/a
+....//aa/. ..../aa
+....//aa// ..../aa
+....//a.aa ..../a.aa
+....//a.a. ..../a.a.
+....//a.a/ ..../a.a
+....//a..a ..../a..a
+....//a... ..../a...
+....//a../ ..../a..
+....//a./a ..../a./a
+....//a./. ..../a.
+....//a.// ..../a.
+....//a/aa ..../a/aa
+....//a/a. ..../a/a.
+....//a/a/ ..../a/a
+....//a/.a ..../a/.a
+....//a/.. ....
+....//a/./ ..../a
+....//a//a ..../a/a
+....//a//. ..../a
+....//a/// ..../a
+....//.aaa ..../.aaa
+....//.aa. ..../.aa.
+....//.aa/ ..../.aa
+....//.a.a ..../.a.a
+....//.a.. ..../.a..
+....//.a./ ..../.a.
+....//.a/a ..../.a/a
+....//.a/. ..../.a
+....//.a// ..../.a
+....//..aa ..../..aa
+....//..a. ..../..a.
+....//..a/ ..../..a
+....//...a ..../...a
+....//.... ..../....
+....//.../ ..../...
+....//../a a
+....//../. .
+....//..// .
+....//./aa ..../aa
+....//./a. ..../a.
+....//./a/ ..../a
+....//./.a ..../.a
+....//./.. .
+....//././ ....
+....//.//a ..../a
+....//.//. ....
+....//./// ....
+....///aaa ..../aaa
+....///aa. ..../aa.
+....///aa/ ..../aa
+....///a.a ..../a.a
+....///a.. ..../a..
+....///a./ ..../a.
+....///a/a ..../a/a
+....///a/. ..../a
+....///a// ..../a
+....///.aa ..../.aa
+....///.a. ..../.a.
+....///.a/ ..../.a
+....///..a ..../..a
+....///... ..../...
+....///../ .
+....///./a ..../a
+....///./. ....
+....///.// ....
+....////aa ..../aa
+....////a. ..../a.
+....////a/ ..../a
+....////.a ..../.a
+....////.. .
+....////./ ....
+..../////a ..../a
+..../////. ....
+....////// ....
+.../aaaaaa .../aaaaaa
+.../aaaaa. .../aaaaa.
+.../aaaaa/ .../aaaaa
+.../aaaa.a .../aaaa.a
+.../aaaa.. .../aaaa..
+.../aaaa./ .../aaaa.
+.../aaaa/a .../aaaa/a
+.../aaaa/. .../aaaa
+.../aaaa// .../aaaa
+.../aaa.aa .../aaa.aa
+.../aaa.a. .../aaa.a.
+.../aaa.a/ .../aaa.a
+.../aaa..a .../aaa..a
+.../aaa... .../aaa...
+.../aaa../ .../aaa..
+.../aaa./a .../aaa./a
+.../aaa./. .../aaa.
+.../aaa.// .../aaa.
+.../aaa/aa .../aaa/aa
+.../aaa/a. .../aaa/a.
+.../aaa/a/ .../aaa/a
+.../aaa/.a .../aaa/.a
+.../aaa/.. ...
+.../aaa/./ .../aaa
+.../aaa//a .../aaa/a
+.../aaa//. .../aaa
+.../aaa/// .../aaa
+.../aa.aaa .../aa.aaa
+.../aa.aa. .../aa.aa.
+.../aa.aa/ .../aa.aa
+.../aa.a.a .../aa.a.a
+.../aa.a.. .../aa.a..
+.../aa.a./ .../aa.a.
+.../aa.a/a .../aa.a/a
+.../aa.a/. .../aa.a
+.../aa.a// .../aa.a
+.../aa..aa .../aa..aa
+.../aa..a. .../aa..a.
+.../aa..a/ .../aa..a
+.../aa...a .../aa...a
+.../aa.... .../aa....
+.../aa.../ .../aa...
+.../aa../a .../aa../a
+.../aa../. .../aa..
+.../aa..// .../aa..
+.../aa./aa .../aa./aa
+.../aa./a. .../aa./a.
+.../aa./a/ .../aa./a
+.../aa./.a .../aa./.a
+.../aa./.. ...
+.../aa././ .../aa.
+.../aa.//a .../aa./a
+.../aa.//. .../aa.
+.../aa./// .../aa.
+.../aa/aaa .../aa/aaa
+.../aa/aa. .../aa/aa.
+.../aa/aa/ .../aa/aa
+.../aa/a.a .../aa/a.a
+.../aa/a.. .../aa/a..
+.../aa/a./ .../aa/a.
+.../aa/a/a .../aa/a/a
+.../aa/a/. .../aa/a
+.../aa/a// .../aa/a
+.../aa/.aa .../aa/.aa
+.../aa/.a. .../aa/.a.
+.../aa/.a/ .../aa/.a
+.../aa/..a .../aa/..a
+.../aa/... .../aa/...
+.../aa/../ ...
+.../aa/./a .../aa/a
+.../aa/./. .../aa
+.../aa/.// .../aa
+.../aa//aa .../aa/aa
+.../aa//a. .../aa/a.
+.../aa//a/ .../aa/a
+.../aa//.a .../aa/.a
+.../aa//.. ...
+.../aa//./ .../aa
+.../aa///a .../aa/a
+.../aa///. .../aa
+.../aa//// .../aa
+.../a.aaaa .../a.aaaa
+.../a.aaa. .../a.aaa.
+.../a.aaa/ .../a.aaa
+.../a.aa.a .../a.aa.a
+.../a.aa.. .../a.aa..
+.../a.aa./ .../a.aa.
+.../a.aa/a .../a.aa/a
+.../a.aa/. .../a.aa
+.../a.aa// .../a.aa
+.../a.a.aa .../a.a.aa
+.../a.a.a. .../a.a.a.
+.../a.a.a/ .../a.a.a
+.../a.a..a .../a.a..a
+.../a.a... .../a.a...
+.../a.a../ .../a.a..
+.../a.a./a .../a.a./a
+.../a.a./. .../a.a.
+.../a.a.// .../a.a.
+.../a.a/aa .../a.a/aa
+.../a.a/a. .../a.a/a.
+.../a.a/a/ .../a.a/a
+.../a.a/.a .../a.a/.a
+.../a.a/.. ...
+.../a.a/./ .../a.a
+.../a.a//a .../a.a/a
+.../a.a//. .../a.a
+.../a.a/// .../a.a
+.../a..aaa .../a..aaa
+.../a..aa. .../a..aa.
+.../a..aa/ .../a..aa
+.../a..a.a .../a..a.a
+.../a..a.. .../a..a..
+.../a..a./ .../a..a.
+.../a..a/a .../a..a/a
+.../a..a/. .../a..a
+.../a..a// .../a..a
+.../a...aa .../a...aa
+.../a...a. .../a...a.
+.../a...a/ .../a...a
+.../a....a .../a....a
+.../a..... .../a.....
+.../a..../ .../a....
+.../a.../a .../a.../a
+.../a.../. .../a...
+.../a...// .../a...
+.../a../aa .../a../aa
+.../a../a. .../a../a.
+.../a../a/ .../a../a
+.../a../.a .../a../.a
+.../a../.. ...
+.../a.././ .../a..
+.../a..//a .../a../a
+.../a..//. .../a..
+.../a../// .../a..
+.../a./aaa .../a./aaa
+.../a./aa. .../a./aa.
+.../a./aa/ .../a./aa
+.../a./a.a .../a./a.a
+.../a./a.. .../a./a..
+.../a./a./ .../a./a.
+.../a./a/a .../a./a/a
+.../a./a/. .../a./a
+.../a./a// .../a./a
+.../a./.aa .../a./.aa
+.../a./.a. .../a./.a.
+.../a./.a/ .../a./.a
+.../a./..a .../a./..a
+.../a./... .../a./...
+.../a./../ ...
+.../a././a .../a./a
+.../a././. .../a.
+.../a./.// .../a.
+.../a.//aa .../a./aa
+.../a.//a. .../a./a.
+.../a.//a/ .../a./a
+.../a.//.a .../a./.a
+.../a.//.. ...
+.../a.//./ .../a.
+.../a.///a .../a./a
+.../a.///. .../a.
+.../a.//// .../a.
+.../a/aaaa .../a/aaaa
+.../a/aaa. .../a/aaa.
+.../a/aaa/ .../a/aaa
+.../a/aa.a .../a/aa.a
+.../a/aa.. .../a/aa..
+.../a/aa./ .../a/aa.
+.../a/aa/a .../a/aa/a
+.../a/aa/. .../a/aa
+.../a/aa// .../a/aa
+.../a/a.aa .../a/a.aa
+.../a/a.a. .../a/a.a.
+.../a/a.a/ .../a/a.a
+.../a/a..a .../a/a..a
+.../a/a... .../a/a...
+.../a/a../ .../a/a..
+.../a/a./a .../a/a./a
+.../a/a./. .../a/a.
+.../a/a.// .../a/a.
+.../a/a/aa .../a/a/aa
+.../a/a/a. .../a/a/a.
+.../a/a/a/ .../a/a/a
+.../a/a/.a .../a/a/.a
+.../a/a/.. .../a
+.../a/a/./ .../a/a
+.../a/a//a .../a/a/a
+.../a/a//. .../a/a
+.../a/a/// .../a/a
+.../a/.aaa .../a/.aaa
+.../a/.aa. .../a/.aa.
+.../a/.aa/ .../a/.aa
+.../a/.a.a .../a/.a.a
+.../a/.a.. .../a/.a..
+.../a/.a./ .../a/.a.
+.../a/.a/a .../a/.a/a
+.../a/.a/. .../a/.a
+.../a/.a// .../a/.a
+.../a/..aa .../a/..aa
+.../a/..a. .../a/..a.
+.../a/..a/ .../a/..a
+.../a/...a .../a/...a
+.../a/.... .../a/....
+.../a/.../ .../a/...
+.../a/../a .../a
+.../a/../. ...
+.../a/..// ...
+.../a/./aa .../a/aa
+.../a/./a. .../a/a.
+.../a/./a/ .../a/a
+.../a/./.a .../a/.a
+.../a/./.. ...
+.../a/././ .../a
+.../a/.//a .../a/a
+.../a/.//. .../a
+.../a/./// .../a
+.../a//aaa .../a/aaa
+.../a//aa. .../a/aa.
+.../a//aa/ .../a/aa
+.../a//a.a .../a/a.a
+.../a//a.. .../a/a..
+.../a//a./ .../a/a.
+.../a//a/a .../a/a/a
+.../a//a/. .../a/a
+.../a//a// .../a/a
+.../a//.aa .../a/.aa
+.../a//.a. .../a/.a.
+.../a//.a/ .../a/.a
+.../a//..a .../a/..a
+.../a//... .../a/...
+.../a//../ ...
+.../a//./a .../a/a
+.../a//./. .../a
+.../a//.// .../a
+.../a///aa .../a/aa
+.../a///a. .../a/a.
+.../a///a/ .../a/a
+.../a///.a .../a/.a
+.../a///.. ...
+.../a///./ .../a
+.../a////a .../a/a
+.../a////. .../a
+.../a///// .../a
+.../.aaaaa .../.aaaaa
+.../.aaaa. .../.aaaa.
+.../.aaaa/ .../.aaaa
+.../.aaa.a .../.aaa.a
+.../.aaa.. .../.aaa..
+.../.aaa./ .../.aaa.
+.../.aaa/a .../.aaa/a
+.../.aaa/. .../.aaa
+.../.aaa// .../.aaa
+.../.aa.aa .../.aa.aa
+.../.aa.a. .../.aa.a.
+.../.aa.a/ .../.aa.a
+.../.aa..a .../.aa..a
+.../.aa... .../.aa...
+.../.aa../ .../.aa..
+.../.aa./a .../.aa./a
+.../.aa./. .../.aa.
+.../.aa.// .../.aa.
+.../.aa/aa .../.aa/aa
+.../.aa/a. .../.aa/a.
+.../.aa/a/ .../.aa/a
+.../.aa/.a .../.aa/.a
+.../.aa/.. ...
+.../.aa/./ .../.aa
+.../.aa//a .../.aa/a
+.../.aa//. .../.aa
+.../.aa/// .../.aa
+.../.a.aaa .../.a.aaa
+.../.a.aa. .../.a.aa.
+.../.a.aa/ .../.a.aa
+.../.a.a.a .../.a.a.a
+.../.a.a.. .../.a.a..
+.../.a.a./ .../.a.a.
+.../.a.a/a .../.a.a/a
+.../.a.a/. .../.a.a
+.../.a.a// .../.a.a
+.../.a..aa .../.a..aa
+.../.a..a. .../.a..a.
+.../.a..a/ .../.a..a
+.../.a...a .../.a...a
+.../.a.... .../.a....
+.../.a.../ .../.a...
+.../.a../a .../.a../a
+.../.a../. .../.a..
+.../.a..// .../.a..
+.../.a./aa .../.a./aa
+.../.a./a. .../.a./a.
+.../.a./a/ .../.a./a
+.../.a./.a .../.a./.a
+.../.a./.. ...
+.../.a././ .../.a.
+.../.a.//a .../.a./a
+.../.a.//. .../.a.
+.../.a./// .../.a.
+.../.a/aaa .../.a/aaa
+.../.a/aa. .../.a/aa.
+.../.a/aa/ .../.a/aa
+.../.a/a.a .../.a/a.a
+.../.a/a.. .../.a/a..
+.../.a/a./ .../.a/a.
+.../.a/a/a .../.a/a/a
+.../.a/a/. .../.a/a
+.../.a/a// .../.a/a
+.../.a/.aa .../.a/.aa
+.../.a/.a. .../.a/.a.
+.../.a/.a/ .../.a/.a
+.../.a/..a .../.a/..a
+.../.a/... .../.a/...
+.../.a/../ ...
+.../.a/./a .../.a/a
+.../.a/./. .../.a
+.../.a/.// .../.a
+.../.a//aa .../.a/aa
+.../.a//a. .../.a/a.
+.../.a//a/ .../.a/a
+.../.a//.a .../.a/.a
+.../.a//.. ...
+.../.a//./ .../.a
+.../.a///a .../.a/a
+.../.a///. .../.a
+.../.a//// .../.a
+.../..aaaa .../..aaaa
+.../..aaa. .../..aaa.
+.../..aaa/ .../..aaa
+.../..aa.a .../..aa.a
+.../..aa.. .../..aa..
+.../..aa./ .../..aa.
+.../..aa/a .../..aa/a
+.../..aa/. .../..aa
+.../..aa// .../..aa
+.../..a.aa .../..a.aa
+.../..a.a. .../..a.a.
+.../..a.a/ .../..a.a
+.../..a..a .../..a..a
+.../..a... .../..a...
+.../..a../ .../..a..
+.../..a./a .../..a./a
+.../..a./. .../..a.
+.../..a.// .../..a.
+.../..a/aa .../..a/aa
+.../..a/a. .../..a/a.
+.../..a/a/ .../..a/a
+.../..a/.a .../..a/.a
+.../..a/.. ...
+.../..a/./ .../..a
+.../..a//a .../..a/a
+.../..a//. .../..a
+.../..a/// .../..a
+.../...aaa .../...aaa
+.../...aa. .../...aa.
+.../...aa/ .../...aa
+.../...a.a .../...a.a
+.../...a.. .../...a..
+.../...a./ .../...a.
+.../...a/a .../...a/a
+.../...a/. .../...a
+.../...a// .../...a
+.../....aa .../....aa
+.../....a. .../....a.
+.../....a/ .../....a
+.../.....a .../.....a
+.../...... .../......
+.../...../ .../.....
+.../..../a .../..../a
+.../..../. .../....
+.../....// .../....
+.../.../aa .../.../aa
+.../.../a. .../.../a.
+.../.../a/ .../.../a
+.../.../.a .../.../.a
+.../.../.. ...
+.../..././ .../...
+.../...//a .../.../a
+.../...//. .../...
+.../.../// .../...
+.../../aaa aaa
+.../../aa. aa.
+.../../aa/ aa
+.../../a.a a.a
+.../../a.. a..
+.../../a./ a.
+.../../a/a a/a
+.../../a/. a
+.../../a// a
+.../../.aa .aa
+.../../.a. .a.
+.../../.a/ .a
+.../../..a ..a
+.../../... ...
+.../../../ ..
+.../.././a a
+.../.././. .
+.../../.// .
+.../..//aa aa
+.../..//a. a.
+.../..//a/ a
+.../..//.a .a
+.../..//.. ..
+.../..//./ .
+.../..///a a
+.../..///. .
+.../..//// .
+..././aaaa .../aaaa
+..././aaa. .../aaa.
+..././aaa/ .../aaa
+..././aa.a .../aa.a
+..././aa.. .../aa..
+..././aa./ .../aa.
+..././aa/a .../aa/a
+..././aa/. .../aa
+..././aa// .../aa
+..././a.aa .../a.aa
+..././a.a. .../a.a.
+..././a.a/ .../a.a
+..././a..a .../a..a
+..././a... .../a...
+..././a../ .../a..
+..././a./a .../a./a
+..././a./. .../a.
+..././a.// .../a.
+..././a/aa .../a/aa
+..././a/a. .../a/a.
+..././a/a/ .../a/a
+..././a/.a .../a/.a
+..././a/.. ...
+..././a/./ .../a
+..././a//a .../a/a
+..././a//. .../a
+..././a/// .../a
+..././.aaa .../.aaa
+..././.aa. .../.aa.
+..././.aa/ .../.aa
+..././.a.a .../.a.a
+..././.a.. .../.a..
+..././.a./ .../.a.
+..././.a/a .../.a/a
+..././.a/. .../.a
+..././.a// .../.a
+..././..aa .../..aa
+..././..a. .../..a.
+..././..a/ .../..a
+..././...a .../...a
+..././.... .../....
+..././.../ .../...
+..././../a a
+..././../. .
+..././..// .
+.../././aa .../aa
+.../././a. .../a.
+.../././a/ .../a
+.../././.a .../.a
+.../././.. .
+..././././ ...
+.../././/a .../a
+.../././/. ...
+.../././// ...
+..././/aaa .../aaa
+..././/aa. .../aa.
+..././/aa/ .../aa
+..././/a.a .../a.a
+..././/a.. .../a..
+..././/a./ .../a.
+..././/a/a .../a/a
+..././/a/. .../a
+..././/a// .../a
+..././/.aa .../.aa
+..././/.a. .../.a.
+..././/.a/ .../.a
+..././/..a .../..a
+..././/... .../...
+..././/../ .
+..././/./a .../a
+..././/./. ...
+..././/.// ...
+..././//aa .../aa
+..././//a. .../a.
+..././//a/ .../a
+..././//.a .../.a
+..././//.. .
+..././//./ ...
+..././///a .../a
+..././///. ...
+..././//// ...
+...//aaaaa .../aaaaa
+...//aaaa. .../aaaa.
+...//aaaa/ .../aaaa
+...//aaa.a .../aaa.a
+...//aaa.. .../aaa..
+...//aaa./ .../aaa.
+...//aaa/a .../aaa/a
+...//aaa/. .../aaa
+...//aaa// .../aaa
+...//aa.aa .../aa.aa
+...//aa.a. .../aa.a.
+...//aa.a/ .../aa.a
+...//aa..a .../aa..a
+...//aa... .../aa...
+...//aa../ .../aa..
+...//aa./a .../aa./a
+...//aa./. .../aa.
+...//aa.// .../aa.
+...//aa/aa .../aa/aa
+...//aa/a. .../aa/a.
+...//aa/a/ .../aa/a
+...//aa/.a .../aa/.a
+...//aa/.. ...
+...//aa/./ .../aa
+...//aa//a .../aa/a
+...//aa//. .../aa
+...//aa/// .../aa
+...//a.aaa .../a.aaa
+...//a.aa. .../a.aa.
+...//a.aa/ .../a.aa
+...//a.a.a .../a.a.a
+...//a.a.. .../a.a..
+...//a.a./ .../a.a.
+...//a.a/a .../a.a/a
+...//a.a/. .../a.a
+...//a.a// .../a.a
+...//a..aa .../a..aa
+...//a..a. .../a..a.
+...//a..a/ .../a..a
+...//a...a .../a...a
+...//a.... .../a....
+...//a.../ .../a...
+...//a../a .../a../a
+...//a../. .../a..
+...//a..// .../a..
+...//a./aa .../a./aa
+...//a./a. .../a./a.
+...//a./a/ .../a./a
+...//a./.a .../a./.a
+...//a./.. ...
+...//a././ .../a.
+...//a.//a .../a./a
+...//a.//. .../a.
+...//a./// .../a.
+...//a/aaa .../a/aaa
+...//a/aa. .../a/aa.
+...//a/aa/ .../a/aa
+...//a/a.a .../a/a.a
+...//a/a.. .../a/a..
+...//a/a./ .../a/a.
+...//a/a/a .../a/a/a
+...//a/a/. .../a/a
+...//a/a// .../a/a
+...//a/.aa .../a/.aa
+...//a/.a. .../a/.a.
+...//a/.a/ .../a/.a
+...//a/..a .../a/..a
+...//a/... .../a/...
+...//a/../ ...
+...//a/./a .../a/a
+...//a/./. .../a
+...//a/.// .../a
+...//a//aa .../a/aa
+...//a//a. .../a/a.
+...//a//a/ .../a/a
+...//a//.a .../a/.a
+...//a//.. ...
+...//a//./ .../a
+...//a///a .../a/a
+...//a///. .../a
+...//a//// .../a
+...//.aaaa .../.aaaa
+...//.aaa. .../.aaa.
+...//.aaa/ .../.aaa
+...//.aa.a .../.aa.a
+...//.aa.. .../.aa..
+...//.aa./ .../.aa.
+...//.aa/a .../.aa/a
+...//.aa/. .../.aa
+...//.aa// .../.aa
+...//.a.aa .../.a.aa
+...//.a.a. .../.a.a.
+...//.a.a/ .../.a.a
+...//.a..a .../.a..a
+...//.a... .../.a...
+...//.a../ .../.a..
+...//.a./a .../.a./a
+...//.a./. .../.a.
+...//.a.// .../.a.
+...//.a/aa .../.a/aa
+...//.a/a. .../.a/a.
+...//.a/a/ .../.a/a
+...//.a/.a .../.a/.a
+...//.a/.. ...
+...//.a/./ .../.a
+...//.a//a .../.a/a
+...//.a//. .../.a
+...//.a/// .../.a
+...//..aaa .../..aaa
+...//..aa. .../..aa.
+...//..aa/ .../..aa
+...//..a.a .../..a.a
+...//..a.. .../..a..
+...//..a./ .../..a.
+...//..a/a .../..a/a
+...//..a/. .../..a
+...//..a// .../..a
+...//...aa .../...aa
+...//...a. .../...a.
+...//...a/ .../...a
+...//....a .../....a
+...//..... .../.....
+...//..../ .../....
+...//.../a .../.../a
+...//.../. .../...
+...//...// .../...
+...//../aa aa
+...//../a. a.
+...//../a/ a
+...//../.a .a
+...//../.. ..
+...//.././ .
+...//..//a a
+...//..//. .
+...//../// .
+...//./aaa .../aaa
+...//./aa. .../aa.
+...//./aa/ .../aa
+...//./a.a .../a.a
+...//./a.. .../a..
+...//./a./ .../a.
+...//./a/a .../a/a
+...//./a/. .../a
+...//./a// .../a
+...//./.aa .../.aa
+...//./.a. .../.a.
+...//./.a/ .../.a
+...//./..a .../..a
+...//./... .../...
+...//./../ .
+...//././a .../a
+...//././. ...
+...//./.// ...
+...//.//aa .../aa
+...//.//a. .../a.
+...//.//a/ .../a
+...//.//.a .../.a
+...//.//.. .
+...//.//./ ...
+...//.///a .../a
+...//.///. ...
+...//.//// ...
+...///aaaa .../aaaa
+...///aaa. .../aaa.
+...///aaa/ .../aaa
+...///aa.a .../aa.a
+...///aa.. .../aa..
+...///aa./ .../aa.
+...///aa/a .../aa/a
+...///aa/. .../aa
+...///aa// .../aa
+...///a.aa .../a.aa
+...///a.a. .../a.a.
+...///a.a/ .../a.a
+...///a..a .../a..a
+...///a... .../a...
+...///a../ .../a..
+...///a./a .../a./a
+...///a./. .../a.
+...///a.// .../a.
+...///a/aa .../a/aa
+...///a/a. .../a/a.
+...///a/a/ .../a/a
+...///a/.a .../a/.a
+...///a/.. ...
+...///a/./ .../a
+...///a//a .../a/a
+...///a//. .../a
+...///a/// .../a
+...///.aaa .../.aaa
+...///.aa. .../.aa.
+...///.aa/ .../.aa
+...///.a.a .../.a.a
+...///.a.. .../.a..
+...///.a./ .../.a.
+...///.a/a .../.a/a
+...///.a/. .../.a
+...///.a// .../.a
+...///..aa .../..aa
+...///..a. .../..a.
+...///..a/ .../..a
+...///...a .../...a
+...///.... .../....
+...///.../ .../...
+...///../a a
+...///../. .
+...///..// .
+...///./aa .../aa
+...///./a. .../a.
+...///./a/ .../a
+...///./.a .../.a
+...///./.. .
+...///././ ...
+...///.//a .../a
+...///.//. ...
+...///./// ...
+...////aaa .../aaa
+...////aa. .../aa.
+...////aa/ .../aa
+...////a.a .../a.a
+...////a.. .../a..
+...////a./ .../a.
+...////a/a .../a/a
+...////a/. .../a
+...////a// .../a
+...////.aa .../.aa
+...////.a. .../.a.
+...////.a/ .../.a
+...////..a .../..a
+...////... .../...
+...////../ .
+...////./a .../a
+...////./. ...
+...////.// ...
+.../////aa .../aa
+.../////a. .../a.
+.../////a/ .../a
+.../////.a .../.a
+.../////.. .
+.../////./ ...
+...//////a .../a
+...//////. ...
+.../////// ...
+../aaaaaaa ../aaaaaaa
+../aaaaaa. ../aaaaaa.
+../aaaaaa/ ../aaaaaa
+../aaaaa.a ../aaaaa.a
+../aaaaa.. ../aaaaa..
+../aaaaa./ ../aaaaa.
+../aaaaa/a ../aaaaa/a
+../aaaaa/. ../aaaaa
+../aaaaa// ../aaaaa
+../aaaa.aa ../aaaa.aa
+../aaaa.a. ../aaaa.a.
+../aaaa.a/ ../aaaa.a
+../aaaa..a ../aaaa..a
+../aaaa... ../aaaa...
+../aaaa../ ../aaaa..
+../aaaa./a ../aaaa./a
+../aaaa./. ../aaaa.
+../aaaa.// ../aaaa.
+../aaaa/aa ../aaaa/aa
+../aaaa/a. ../aaaa/a.
+../aaaa/a/ ../aaaa/a
+../aaaa/.a ../aaaa/.a
+../aaaa/.. ..
+../aaaa/./ ../aaaa
+../aaaa//a ../aaaa/a
+../aaaa//. ../aaaa
+../aaaa/// ../aaaa
+../aaa.aaa ../aaa.aaa
+../aaa.aa. ../aaa.aa.
+../aaa.aa/ ../aaa.aa
+../aaa.a.a ../aaa.a.a
+../aaa.a.. ../aaa.a..
+../aaa.a./ ../aaa.a.
+../aaa.a/a ../aaa.a/a
+../aaa.a/. ../aaa.a
+../aaa.a// ../aaa.a
+../aaa..aa ../aaa..aa
+../aaa..a. ../aaa..a.
+../aaa..a/ ../aaa..a
+../aaa...a ../aaa...a
+../aaa.... ../aaa....
+../aaa.../ ../aaa...
+../aaa../a ../aaa../a
+../aaa../. ../aaa..
+../aaa..// ../aaa..
+../aaa./aa ../aaa./aa
+../aaa./a. ../aaa./a.
+../aaa./a/ ../aaa./a
+../aaa./.a ../aaa./.a
+../aaa./.. ..
+../aaa././ ../aaa.
+../aaa.//a ../aaa./a
+../aaa.//. ../aaa.
+../aaa./// ../aaa.
+../aaa/aaa ../aaa/aaa
+../aaa/aa. ../aaa/aa.
+../aaa/aa/ ../aaa/aa
+../aaa/a.a ../aaa/a.a
+../aaa/a.. ../aaa/a..
+../aaa/a./ ../aaa/a.
+../aaa/a/a ../aaa/a/a
+../aaa/a/. ../aaa/a
+../aaa/a// ../aaa/a
+../aaa/.aa ../aaa/.aa
+../aaa/.a. ../aaa/.a.
+../aaa/.a/ ../aaa/.a
+../aaa/..a ../aaa/..a
+../aaa/... ../aaa/...
+../aaa/../ ..
+../aaa/./a ../aaa/a
+../aaa/./. ../aaa
+../aaa/.// ../aaa
+../aaa//aa ../aaa/aa
+../aaa//a. ../aaa/a.
+../aaa//a/ ../aaa/a
+../aaa//.a ../aaa/.a
+../aaa//.. ..
+../aaa//./ ../aaa
+../aaa///a ../aaa/a
+../aaa///. ../aaa
+../aaa//// ../aaa
+../aa.aaaa ../aa.aaaa
+../aa.aaa. ../aa.aaa.
+../aa.aaa/ ../aa.aaa
+../aa.aa.a ../aa.aa.a
+../aa.aa.. ../aa.aa..
+../aa.aa./ ../aa.aa.
+../aa.aa/a ../aa.aa/a
+../aa.aa/. ../aa.aa
+../aa.aa// ../aa.aa
+../aa.a.aa ../aa.a.aa
+../aa.a.a. ../aa.a.a.
+../aa.a.a/ ../aa.a.a
+../aa.a..a ../aa.a..a
+../aa.a... ../aa.a...
+../aa.a../ ../aa.a..
+../aa.a./a ../aa.a./a
+../aa.a./. ../aa.a.
+../aa.a.// ../aa.a.
+../aa.a/aa ../aa.a/aa
+../aa.a/a. ../aa.a/a.
+../aa.a/a/ ../aa.a/a
+../aa.a/.a ../aa.a/.a
+../aa.a/.. ..
+../aa.a/./ ../aa.a
+../aa.a//a ../aa.a/a
+../aa.a//. ../aa.a
+../aa.a/// ../aa.a
+../aa..aaa ../aa..aaa
+../aa..aa. ../aa..aa.
+../aa..aa/ ../aa..aa
+../aa..a.a ../aa..a.a
+../aa..a.. ../aa..a..
+../aa..a./ ../aa..a.
+../aa..a/a ../aa..a/a
+../aa..a/. ../aa..a
+../aa..a// ../aa..a
+../aa...aa ../aa...aa
+../aa...a. ../aa...a.
+../aa...a/ ../aa...a
+../aa....a ../aa....a
+../aa..... ../aa.....
+../aa..../ ../aa....
+../aa.../a ../aa.../a
+../aa.../. ../aa...
+../aa...// ../aa...
+../aa../aa ../aa../aa
+../aa../a. ../aa../a.
+../aa../a/ ../aa../a
+../aa../.a ../aa../.a
+../aa../.. ..
+../aa.././ ../aa..
+../aa..//a ../aa../a
+../aa..//. ../aa..
+../aa../// ../aa..
+../aa./aaa ../aa./aaa
+../aa./aa. ../aa./aa.
+../aa./aa/ ../aa./aa
+../aa./a.a ../aa./a.a
+../aa./a.. ../aa./a..
+../aa./a./ ../aa./a.
+../aa./a/a ../aa./a/a
+../aa./a/. ../aa./a
+../aa./a// ../aa./a
+../aa./.aa ../aa./.aa
+../aa./.a. ../aa./.a.
+../aa./.a/ ../aa./.a
+../aa./..a ../aa./..a
+../aa./... ../aa./...
+../aa./../ ..
+../aa././a ../aa./a
+../aa././. ../aa.
+../aa./.// ../aa.
+../aa.//aa ../aa./aa
+../aa.//a. ../aa./a.
+../aa.//a/ ../aa./a
+../aa.//.a ../aa./.a
+../aa.//.. ..
+../aa.//./ ../aa.
+../aa.///a ../aa./a
+../aa.///. ../aa.
+../aa.//// ../aa.
+../aa/aaaa ../aa/aaaa
+../aa/aaa. ../aa/aaa.
+../aa/aaa/ ../aa/aaa
+../aa/aa.a ../aa/aa.a
+../aa/aa.. ../aa/aa..
+../aa/aa./ ../aa/aa.
+../aa/aa/a ../aa/aa/a
+../aa/aa/. ../aa/aa
+../aa/aa// ../aa/aa
+../aa/a.aa ../aa/a.aa
+../aa/a.a. ../aa/a.a.
+../aa/a.a/ ../aa/a.a
+../aa/a..a ../aa/a..a
+../aa/a... ../aa/a...
+../aa/a../ ../aa/a..
+../aa/a./a ../aa/a./a
+../aa/a./. ../aa/a.
+../aa/a.// ../aa/a.
+../aa/a/aa ../aa/a/aa
+../aa/a/a. ../aa/a/a.
+../aa/a/a/ ../aa/a/a
+../aa/a/.a ../aa/a/.a
+../aa/a/.. ../aa
+../aa/a/./ ../aa/a
+../aa/a//a ../aa/a/a
+../aa/a//. ../aa/a
+../aa/a/// ../aa/a
+../aa/.aaa ../aa/.aaa
+../aa/.aa. ../aa/.aa.
+../aa/.aa/ ../aa/.aa
+../aa/.a.a ../aa/.a.a
+../aa/.a.. ../aa/.a..
+../aa/.a./ ../aa/.a.
+../aa/.a/a ../aa/.a/a
+../aa/.a/. ../aa/.a
+../aa/.a// ../aa/.a
+../aa/..aa ../aa/..aa
+../aa/..a. ../aa/..a.
+../aa/..a/ ../aa/..a
+../aa/...a ../aa/...a
+../aa/.... ../aa/....
+../aa/.../ ../aa/...
+../aa/../a ../a
+../aa/../. ..
+../aa/..// ..
+../aa/./aa ../aa/aa
+../aa/./a. ../aa/a.
+../aa/./a/ ../aa/a
+../aa/./.a ../aa/.a
+../aa/./.. ..
+../aa/././ ../aa
+../aa/.//a ../aa/a
+../aa/.//. ../aa
+../aa/./// ../aa
+../aa//aaa ../aa/aaa
+../aa//aa. ../aa/aa.
+../aa//aa/ ../aa/aa
+../aa//a.a ../aa/a.a
+../aa//a.. ../aa/a..
+../aa//a./ ../aa/a.
+../aa//a/a ../aa/a/a
+../aa//a/. ../aa/a
+../aa//a// ../aa/a
+../aa//.aa ../aa/.aa
+../aa//.a. ../aa/.a.
+../aa//.a/ ../aa/.a
+../aa//..a ../aa/..a
+../aa//... ../aa/...
+../aa//../ ..
+../aa//./a ../aa/a
+../aa//./. ../aa
+../aa//.// ../aa
+../aa///aa ../aa/aa
+../aa///a. ../aa/a.
+../aa///a/ ../aa/a
+../aa///.a ../aa/.a
+../aa///.. ..
+../aa///./ ../aa
+../aa////a ../aa/a
+../aa////. ../aa
+../aa///// ../aa
+../a.aaaaa ../a.aaaaa
+../a.aaaa. ../a.aaaa.
+../a.aaaa/ ../a.aaaa
+../a.aaa.a ../a.aaa.a
+../a.aaa.. ../a.aaa..
+../a.aaa./ ../a.aaa.
+../a.aaa/a ../a.aaa/a
+../a.aaa/. ../a.aaa
+../a.aaa// ../a.aaa
+../a.aa.aa ../a.aa.aa
+../a.aa.a. ../a.aa.a.
+../a.aa.a/ ../a.aa.a
+../a.aa..a ../a.aa..a
+../a.aa... ../a.aa...
+../a.aa../ ../a.aa..
+../a.aa./a ../a.aa./a
+../a.aa./. ../a.aa.
+../a.aa.// ../a.aa.
+../a.aa/aa ../a.aa/aa
+../a.aa/a. ../a.aa/a.
+../a.aa/a/ ../a.aa/a
+../a.aa/.a ../a.aa/.a
+../a.aa/.. ..
+../a.aa/./ ../a.aa
+../a.aa//a ../a.aa/a
+../a.aa//. ../a.aa
+../a.aa/// ../a.aa
+../a.a.aaa ../a.a.aaa
+../a.a.aa. ../a.a.aa.
+../a.a.aa/ ../a.a.aa
+../a.a.a.a ../a.a.a.a
+../a.a.a.. ../a.a.a..
+../a.a.a./ ../a.a.a.
+../a.a.a/a ../a.a.a/a
+../a.a.a/. ../a.a.a
+../a.a.a// ../a.a.a
+../a.a..aa ../a.a..aa
+../a.a..a. ../a.a..a.
+../a.a..a/ ../a.a..a
+../a.a...a ../a.a...a
+../a.a.... ../a.a....
+../a.a.../ ../a.a...
+../a.a../a ../a.a../a
+../a.a../. ../a.a..
+../a.a..// ../a.a..
+../a.a./aa ../a.a./aa
+../a.a./a. ../a.a./a.
+../a.a./a/ ../a.a./a
+../a.a./.a ../a.a./.a
+../a.a./.. ..
+../a.a././ ../a.a.
+../a.a.//a ../a.a./a
+../a.a.//. ../a.a.
+../a.a./// ../a.a.
+../a.a/aaa ../a.a/aaa
+../a.a/aa. ../a.a/aa.
+../a.a/aa/ ../a.a/aa
+../a.a/a.a ../a.a/a.a
+../a.a/a.. ../a.a/a..
+../a.a/a./ ../a.a/a.
+../a.a/a/a ../a.a/a/a
+../a.a/a/. ../a.a/a
+../a.a/a// ../a.a/a
+../a.a/.aa ../a.a/.aa
+../a.a/.a. ../a.a/.a.
+../a.a/.a/ ../a.a/.a
+../a.a/..a ../a.a/..a
+../a.a/... ../a.a/...
+../a.a/../ ..
+../a.a/./a ../a.a/a
+../a.a/./. ../a.a
+../a.a/.// ../a.a
+../a.a//aa ../a.a/aa
+../a.a//a. ../a.a/a.
+../a.a//a/ ../a.a/a
+../a.a//.a ../a.a/.a
+../a.a//.. ..
+../a.a//./ ../a.a
+../a.a///a ../a.a/a
+../a.a///. ../a.a
+../a.a//// ../a.a
+../a..aaaa ../a..aaaa
+../a..aaa. ../a..aaa.
+../a..aaa/ ../a..aaa
+../a..aa.a ../a..aa.a
+../a..aa.. ../a..aa..
+../a..aa./ ../a..aa.
+../a..aa/a ../a..aa/a
+../a..aa/. ../a..aa
+../a..aa// ../a..aa
+../a..a.aa ../a..a.aa
+../a..a.a. ../a..a.a.
+../a..a.a/ ../a..a.a
+../a..a..a ../a..a..a
+../a..a... ../a..a...
+../a..a../ ../a..a..
+../a..a./a ../a..a./a
+../a..a./. ../a..a.
+../a..a.// ../a..a.
+../a..a/aa ../a..a/aa
+../a..a/a. ../a..a/a.
+../a..a/a/ ../a..a/a
+../a..a/.a ../a..a/.a
+../a..a/.. ..
+../a..a/./ ../a..a
+../a..a//a ../a..a/a
+../a..a//. ../a..a
+../a..a/// ../a..a
+../a...aaa ../a...aaa
+../a...aa. ../a...aa.
+../a...aa/ ../a...aa
+../a...a.a ../a...a.a
+../a...a.. ../a...a..
+../a...a./ ../a...a.
+../a...a/a ../a...a/a
+../a...a/. ../a...a
+../a...a// ../a...a
+../a....aa ../a....aa
+../a....a. ../a....a.
+../a....a/ ../a....a
+../a.....a ../a.....a
+../a...... ../a......
+../a...../ ../a.....
+../a..../a ../a..../a
+../a..../. ../a....
+../a....// ../a....
+../a.../aa ../a.../aa
+../a.../a. ../a.../a.
+../a.../a/ ../a.../a
+../a.../.a ../a.../.a
+../a.../.. ..
+../a..././ ../a...
+../a...//a ../a.../a
+../a...//. ../a...
+../a.../// ../a...
+../a../aaa ../a../aaa
+../a../aa. ../a../aa.
+../a../aa/ ../a../aa
+../a../a.a ../a../a.a
+../a../a.. ../a../a..
+../a../a./ ../a../a.
+../a../a/a ../a../a/a
+../a../a/. ../a../a
+../a../a// ../a../a
+../a../.aa ../a../.aa
+../a../.a. ../a../.a.
+../a../.a/ ../a../.a
+../a../..a ../a../..a
+../a../... ../a../...
+../a../../ ..
+../a.././a ../a../a
+../a.././. ../a..
+../a../.// ../a..
+../a..//aa ../a../aa
+../a..//a. ../a../a.
+../a..//a/ ../a../a
+../a..//.a ../a../.a
+../a..//.. ..
+../a..//./ ../a..
+../a..///a ../a../a
+../a..///. ../a..
+../a..//// ../a..
+../a./aaaa ../a./aaaa
+../a./aaa. ../a./aaa.
+../a./aaa/ ../a./aaa
+../a./aa.a ../a./aa.a
+../a./aa.. ../a./aa..
+../a./aa./ ../a./aa.
+../a./aa/a ../a./aa/a
+../a./aa/. ../a./aa
+../a./aa// ../a./aa
+../a./a.aa ../a./a.aa
+../a./a.a. ../a./a.a.
+../a./a.a/ ../a./a.a
+../a./a..a ../a./a..a
+../a./a... ../a./a...
+../a./a../ ../a./a..
+../a./a./a ../a./a./a
+../a./a./. ../a./a.
+../a./a.// ../a./a.
+../a./a/aa ../a./a/aa
+../a./a/a. ../a./a/a.
+../a./a/a/ ../a./a/a
+../a./a/.a ../a./a/.a
+../a./a/.. ../a.
+../a./a/./ ../a./a
+../a./a//a ../a./a/a
+../a./a//. ../a./a
+../a./a/// ../a./a
+../a./.aaa ../a./.aaa
+../a./.aa. ../a./.aa.
+../a./.aa/ ../a./.aa
+../a./.a.a ../a./.a.a
+../a./.a.. ../a./.a..
+../a./.a./ ../a./.a.
+../a./.a/a ../a./.a/a
+../a./.a/. ../a./.a
+../a./.a// ../a./.a
+../a./..aa ../a./..aa
+../a./..a. ../a./..a.
+../a./..a/ ../a./..a
+../a./...a ../a./...a
+../a./.... ../a./....
+../a./.../ ../a./...
+../a./../a ../a
+../a./../. ..
+../a./..// ..
+../a././aa ../a./aa
+../a././a. ../a./a.
+../a././a/ ../a./a
+../a././.a ../a./.a
+../a././.. ..
+../a./././ ../a.
+../a././/a ../a./a
+../a././/. ../a.
+../a././// ../a.
+../a.//aaa ../a./aaa
+../a.//aa. ../a./aa.
+../a.//aa/ ../a./aa
+../a.//a.a ../a./a.a
+../a.//a.. ../a./a..
+../a.//a./ ../a./a.
+../a.//a/a ../a./a/a
+../a.//a/. ../a./a
+../a.//a// ../a./a
+../a.//.aa ../a./.aa
+../a.//.a. ../a./.a.
+../a.//.a/ ../a./.a
+../a.//..a ../a./..a
+../a.//... ../a./...
+../a.//../ ..
+../a.//./a ../a./a
+../a.//./. ../a.
+../a.//.// ../a.
+../a.///aa ../a./aa
+../a.///a. ../a./a.
+../a.///a/ ../a./a
+../a.///.a ../a./.a
+../a.///.. ..
+../a.///./ ../a.
+../a.////a ../a./a
+../a.////. ../a.
+../a.///// ../a.
+../a/aaaaa ../a/aaaaa
+../a/aaaa. ../a/aaaa.
+../a/aaaa/ ../a/aaaa
+../a/aaa.a ../a/aaa.a
+../a/aaa.. ../a/aaa..
+../a/aaa./ ../a/aaa.
+../a/aaa/a ../a/aaa/a
+../a/aaa/. ../a/aaa
+../a/aaa// ../a/aaa
+../a/aa.aa ../a/aa.aa
+../a/aa.a. ../a/aa.a.
+../a/aa.a/ ../a/aa.a
+../a/aa..a ../a/aa..a
+../a/aa... ../a/aa...
+../a/aa../ ../a/aa..
+../a/aa./a ../a/aa./a
+../a/aa./. ../a/aa.
+../a/aa.// ../a/aa.
+../a/aa/aa ../a/aa/aa
+../a/aa/a. ../a/aa/a.
+../a/aa/a/ ../a/aa/a
+../a/aa/.a ../a/aa/.a
+../a/aa/.. ../a
+../a/aa/./ ../a/aa
+../a/aa//a ../a/aa/a
+../a/aa//. ../a/aa
+../a/aa/// ../a/aa
+../a/a.aaa ../a/a.aaa
+../a/a.aa. ../a/a.aa.
+../a/a.aa/ ../a/a.aa
+../a/a.a.a ../a/a.a.a
+../a/a.a.. ../a/a.a..
+../a/a.a./ ../a/a.a.
+../a/a.a/a ../a/a.a/a
+../a/a.a/. ../a/a.a
+../a/a.a// ../a/a.a
+../a/a..aa ../a/a..aa
+../a/a..a. ../a/a..a.
+../a/a..a/ ../a/a..a
+../a/a...a ../a/a...a
+../a/a.... ../a/a....
+../a/a.../ ../a/a...
+../a/a../a ../a/a../a
+../a/a../. ../a/a..
+../a/a..// ../a/a..
+../a/a./aa ../a/a./aa
+../a/a./a. ../a/a./a.
+../a/a./a/ ../a/a./a
+../a/a./.a ../a/a./.a
+../a/a./.. ../a
+../a/a././ ../a/a.
+../a/a.//a ../a/a./a
+../a/a.//. ../a/a.
+../a/a./// ../a/a.
+../a/a/aaa ../a/a/aaa
+../a/a/aa. ../a/a/aa.
+../a/a/aa/ ../a/a/aa
+../a/a/a.a ../a/a/a.a
+../a/a/a.. ../a/a/a..
+../a/a/a./ ../a/a/a.
+../a/a/a/a ../a/a/a/a
+../a/a/a/. ../a/a/a
+../a/a/a// ../a/a/a
+../a/a/.aa ../a/a/.aa
+../a/a/.a. ../a/a/.a.
+../a/a/.a/ ../a/a/.a
+../a/a/..a ../a/a/..a
+../a/a/... ../a/a/...
+../a/a/../ ../a
+../a/a/./a ../a/a/a
+../a/a/./. ../a/a
+../a/a/.// ../a/a
+../a/a//aa ../a/a/aa
+../a/a//a. ../a/a/a.
+../a/a//a/ ../a/a/a
+../a/a//.a ../a/a/.a
+../a/a//.. ../a
+../a/a//./ ../a/a
+../a/a///a ../a/a/a
+../a/a///. ../a/a
+../a/a//// ../a/a
+../a/.aaaa ../a/.aaaa
+../a/.aaa. ../a/.aaa.
+../a/.aaa/ ../a/.aaa
+../a/.aa.a ../a/.aa.a
+../a/.aa.. ../a/.aa..
+../a/.aa./ ../a/.aa.
+../a/.aa/a ../a/.aa/a
+../a/.aa/. ../a/.aa
+../a/.aa// ../a/.aa
+../a/.a.aa ../a/.a.aa
+../a/.a.a. ../a/.a.a.
+../a/.a.a/ ../a/.a.a
+../a/.a..a ../a/.a..a
+../a/.a... ../a/.a...
+../a/.a../ ../a/.a..
+../a/.a./a ../a/.a./a
+../a/.a./. ../a/.a.
+../a/.a.// ../a/.a.
+../a/.a/aa ../a/.a/aa
+../a/.a/a. ../a/.a/a.
+../a/.a/a/ ../a/.a/a
+../a/.a/.a ../a/.a/.a
+../a/.a/.. ../a
+../a/.a/./ ../a/.a
+../a/.a//a ../a/.a/a
+../a/.a//. ../a/.a
+../a/.a/// ../a/.a
+../a/..aaa ../a/..aaa
+../a/..aa. ../a/..aa.
+../a/..aa/ ../a/..aa
+../a/..a.a ../a/..a.a
+../a/..a.. ../a/..a..
+../a/..a./ ../a/..a.
+../a/..a/a ../a/..a/a
+../a/..a/. ../a/..a
+../a/..a// ../a/..a
+../a/...aa ../a/...aa
+../a/...a. ../a/...a.
+../a/...a/ ../a/...a
+../a/....a ../a/....a
+../a/..... ../a/.....
+../a/..../ ../a/....
+../a/.../a ../a/.../a
+../a/.../. ../a/...
+../a/...// ../a/...
+../a/../aa ../aa
+../a/../a. ../a.
+../a/../a/ ../a
+../a/../.a ../.a
+../a/../.. ../..
+../a/.././ ..
+../a/..//a ../a
+../a/..//. ..
+../a/../// ..
+../a/./aaa ../a/aaa
+../a/./aa. ../a/aa.
+../a/./aa/ ../a/aa
+../a/./a.a ../a/a.a
+../a/./a.. ../a/a..
+../a/./a./ ../a/a.
+../a/./a/a ../a/a/a
+../a/./a/. ../a/a
+../a/./a// ../a/a
+../a/./.aa ../a/.aa
+../a/./.a. ../a/.a.
+../a/./.a/ ../a/.a
+../a/./..a ../a/..a
+../a/./... ../a/...
+../a/./../ ..
+../a/././a ../a/a
+../a/././. ../a
+../a/./.// ../a
+../a/.//aa ../a/aa
+../a/.//a. ../a/a.
+../a/.//a/ ../a/a
+../a/.//.a ../a/.a
+../a/.//.. ..
+../a/.//./ ../a
+../a/.///a ../a/a
+../a/.///. ../a
+../a/.//// ../a
+../a//aaaa ../a/aaaa
+../a//aaa. ../a/aaa.
+../a//aaa/ ../a/aaa
+../a//aa.a ../a/aa.a
+../a//aa.. ../a/aa..
+../a//aa./ ../a/aa.
+../a//aa/a ../a/aa/a
+../a//aa/. ../a/aa
+../a//aa// ../a/aa
+../a//a.aa ../a/a.aa
+../a//a.a. ../a/a.a.
+../a//a.a/ ../a/a.a
+../a//a..a ../a/a..a
+../a//a... ../a/a...
+../a//a../ ../a/a..
+../a//a./a ../a/a./a
+../a//a./. ../a/a.
+../a//a.// ../a/a.
+../a//a/aa ../a/a/aa
+../a//a/a. ../a/a/a.
+../a//a/a/ ../a/a/a
+../a//a/.a ../a/a/.a
+../a//a/.. ../a
+../a//a/./ ../a/a
+../a//a//a ../a/a/a
+../a//a//. ../a/a
+../a//a/// ../a/a
+../a//.aaa ../a/.aaa
+../a//.aa. ../a/.aa.
+../a//.aa/ ../a/.aa
+../a//.a.a ../a/.a.a
+../a//.a.. ../a/.a..
+../a//.a./ ../a/.a.
+../a//.a/a ../a/.a/a
+../a//.a/. ../a/.a
+../a//.a// ../a/.a
+../a//..aa ../a/..aa
+../a//..a. ../a/..a.
+../a//..a/ ../a/..a
+../a//...a ../a/...a
+../a//.... ../a/....
+../a//.../ ../a/...
+../a//../a ../a
+../a//../. ..
+../a//..// ..
+../a//./aa ../a/aa
+../a//./a. ../a/a.
+../a//./a/ ../a/a
+../a//./.a ../a/.a
+../a//./.. ..
+../a//././ ../a
+../a//.//a ../a/a
+../a//.//. ../a
+../a//./// ../a
+../a///aaa ../a/aaa
+../a///aa. ../a/aa.
+../a///aa/ ../a/aa
+../a///a.a ../a/a.a
+../a///a.. ../a/a..
+../a///a./ ../a/a.
+../a///a/a ../a/a/a
+../a///a/. ../a/a
+../a///a// ../a/a
+../a///.aa ../a/.aa
+../a///.a. ../a/.a.
+../a///.a/ ../a/.a
+../a///..a ../a/..a
+../a///... ../a/...
+../a///../ ..
+../a///./a ../a/a
+../a///./. ../a
+../a///.// ../a
+../a////aa ../a/aa
+../a////a. ../a/a.
+../a////a/ ../a/a
+../a////.a ../a/.a
+../a////.. ..
+../a////./ ../a
+../a/////a ../a/a
+../a/////. ../a
+../a////// ../a
+../.aaaaaa ../.aaaaaa
+../.aaaaa. ../.aaaaa.
+../.aaaaa/ ../.aaaaa
+../.aaaa.a ../.aaaa.a
+../.aaaa.. ../.aaaa..
+../.aaaa./ ../.aaaa.
+../.aaaa/a ../.aaaa/a
+../.aaaa/. ../.aaaa
+../.aaaa// ../.aaaa
+../.aaa.aa ../.aaa.aa
+../.aaa.a. ../.aaa.a.
+../.aaa.a/ ../.aaa.a
+../.aaa..a ../.aaa..a
+../.aaa... ../.aaa...
+../.aaa../ ../.aaa..
+../.aaa./a ../.aaa./a
+../.aaa./. ../.aaa.
+../.aaa.// ../.aaa.
+../.aaa/aa ../.aaa/aa
+../.aaa/a. ../.aaa/a.
+../.aaa/a/ ../.aaa/a
+../.aaa/.a ../.aaa/.a
+../.aaa/.. ..
+../.aaa/./ ../.aaa
+../.aaa//a ../.aaa/a
+../.aaa//. ../.aaa
+../.aaa/// ../.aaa
+../.aa.aaa ../.aa.aaa
+../.aa.aa. ../.aa.aa.
+../.aa.aa/ ../.aa.aa
+../.aa.a.a ../.aa.a.a
+../.aa.a.. ../.aa.a..
+../.aa.a./ ../.aa.a.
+../.aa.a/a ../.aa.a/a
+../.aa.a/. ../.aa.a
+../.aa.a// ../.aa.a
+../.aa..aa ../.aa..aa
+../.aa..a. ../.aa..a.
+../.aa..a/ ../.aa..a
+../.aa...a ../.aa...a
+../.aa.... ../.aa....
+../.aa.../ ../.aa...
+../.aa../a ../.aa../a
+../.aa../. ../.aa..
+../.aa..// ../.aa..
+../.aa./aa ../.aa./aa
+../.aa./a. ../.aa./a.
+../.aa./a/ ../.aa./a
+../.aa./.a ../.aa./.a
+../.aa./.. ..
+../.aa././ ../.aa.
+../.aa.//a ../.aa./a
+../.aa.//. ../.aa.
+../.aa./// ../.aa.
+../.aa/aaa ../.aa/aaa
+../.aa/aa. ../.aa/aa.
+../.aa/aa/ ../.aa/aa
+../.aa/a.a ../.aa/a.a
+../.aa/a.. ../.aa/a..
+../.aa/a./ ../.aa/a.
+../.aa/a/a ../.aa/a/a
+../.aa/a/. ../.aa/a
+../.aa/a// ../.aa/a
+../.aa/.aa ../.aa/.aa
+../.aa/.a. ../.aa/.a.
+../.aa/.a/ ../.aa/.a
+../.aa/..a ../.aa/..a
+../.aa/... ../.aa/...
+../.aa/../ ..
+../.aa/./a ../.aa/a
+../.aa/./. ../.aa
+../.aa/.// ../.aa
+../.aa//aa ../.aa/aa
+../.aa//a. ../.aa/a.
+../.aa//a/ ../.aa/a
+../.aa//.a ../.aa/.a
+../.aa//.. ..
+../.aa//./ ../.aa
+../.aa///a ../.aa/a
+../.aa///. ../.aa
+../.aa//// ../.aa
+../.a.aaaa ../.a.aaaa
+../.a.aaa. ../.a.aaa.
+../.a.aaa/ ../.a.aaa
+../.a.aa.a ../.a.aa.a
+../.a.aa.. ../.a.aa..
+../.a.aa./ ../.a.aa.
+../.a.aa/a ../.a.aa/a
+../.a.aa/. ../.a.aa
+../.a.aa// ../.a.aa
+../.a.a.aa ../.a.a.aa
+../.a.a.a. ../.a.a.a.
+../.a.a.a/ ../.a.a.a
+../.a.a..a ../.a.a..a
+../.a.a... ../.a.a...
+../.a.a../ ../.a.a..
+../.a.a./a ../.a.a./a
+../.a.a./. ../.a.a.
+../.a.a.// ../.a.a.
+../.a.a/aa ../.a.a/aa
+../.a.a/a. ../.a.a/a.
+../.a.a/a/ ../.a.a/a
+../.a.a/.a ../.a.a/.a
+../.a.a/.. ..
+../.a.a/./ ../.a.a
+../.a.a//a ../.a.a/a
+../.a.a//. ../.a.a
+../.a.a/// ../.a.a
+../.a..aaa ../.a..aaa
+../.a..aa. ../.a..aa.
+../.a..aa/ ../.a..aa
+../.a..a.a ../.a..a.a
+../.a..a.. ../.a..a..
+../.a..a./ ../.a..a.
+../.a..a/a ../.a..a/a
+../.a..a/. ../.a..a
+../.a..a// ../.a..a
+../.a...aa ../.a...aa
+../.a...a. ../.a...a.
+../.a...a/ ../.a...a
+../.a....a ../.a....a
+../.a..... ../.a.....
+../.a..../ ../.a....
+../.a.../a ../.a.../a
+../.a.../. ../.a...
+../.a...// ../.a...
+../.a../aa ../.a../aa
+../.a../a. ../.a../a.
+../.a../a/ ../.a../a
+../.a../.a ../.a../.a
+../.a../.. ..
+../.a.././ ../.a..
+../.a..//a ../.a../a
+../.a..//. ../.a..
+../.a../// ../.a..
+../.a./aaa ../.a./aaa
+../.a./aa. ../.a./aa.
+../.a./aa/ ../.a./aa
+../.a./a.a ../.a./a.a
+../.a./a.. ../.a./a..
+../.a./a./ ../.a./a.
+../.a./a/a ../.a./a/a
+../.a./a/. ../.a./a
+../.a./a// ../.a./a
+../.a./.aa ../.a./.aa
+../.a./.a. ../.a./.a.
+../.a./.a/ ../.a./.a
+../.a./..a ../.a./..a
+../.a./... ../.a./...
+../.a./../ ..
+../.a././a ../.a./a
+../.a././. ../.a.
+../.a./.// ../.a.
+../.a.//aa ../.a./aa
+../.a.//a. ../.a./a.
+../.a.//a/ ../.a./a
+../.a.//.a ../.a./.a
+../.a.//.. ..
+../.a.//./ ../.a.
+../.a.///a ../.a./a
+../.a.///. ../.a.
+../.a.//// ../.a.
+../.a/aaaa ../.a/aaaa
+../.a/aaa. ../.a/aaa.
+../.a/aaa/ ../.a/aaa
+../.a/aa.a ../.a/aa.a
+../.a/aa.. ../.a/aa..
+../.a/aa./ ../.a/aa.
+../.a/aa/a ../.a/aa/a
+../.a/aa/. ../.a/aa
+../.a/aa// ../.a/aa
+../.a/a.aa ../.a/a.aa
+../.a/a.a. ../.a/a.a.
+../.a/a.a/ ../.a/a.a
+../.a/a..a ../.a/a..a
+../.a/a... ../.a/a...
+../.a/a../ ../.a/a..
+../.a/a./a ../.a/a./a
+../.a/a./. ../.a/a.
+../.a/a.// ../.a/a.
+../.a/a/aa ../.a/a/aa
+../.a/a/a. ../.a/a/a.
+../.a/a/a/ ../.a/a/a
+../.a/a/.a ../.a/a/.a
+../.a/a/.. ../.a
+../.a/a/./ ../.a/a
+../.a/a//a ../.a/a/a
+../.a/a//. ../.a/a
+../.a/a/// ../.a/a
+../.a/.aaa ../.a/.aaa
+../.a/.aa. ../.a/.aa.
+../.a/.aa/ ../.a/.aa
+../.a/.a.a ../.a/.a.a
+../.a/.a.. ../.a/.a..
+../.a/.a./ ../.a/.a.
+../.a/.a/a ../.a/.a/a
+../.a/.a/. ../.a/.a
+../.a/.a// ../.a/.a
+../.a/..aa ../.a/..aa
+../.a/..a. ../.a/..a.
+../.a/..a/ ../.a/..a
+../.a/...a ../.a/...a
+../.a/.... ../.a/....
+../.a/.../ ../.a/...
+../.a/../a ../a
+../.a/../. ..
+../.a/..// ..
+../.a/./aa ../.a/aa
+../.a/./a. ../.a/a.
+../.a/./a/ ../.a/a
+../.a/./.a ../.a/.a
+../.a/./.. ..
+../.a/././ ../.a
+../.a/.//a ../.a/a
+../.a/.//. ../.a
+../.a/./// ../.a
+../.a//aaa ../.a/aaa
+../.a//aa. ../.a/aa.
+../.a//aa/ ../.a/aa
+../.a//a.a ../.a/a.a
+../.a//a.. ../.a/a..
+../.a//a./ ../.a/a.
+../.a//a/a ../.a/a/a
+../.a//a/. ../.a/a
+../.a//a// ../.a/a
+../.a//.aa ../.a/.aa
+../.a//.a. ../.a/.a.
+../.a//.a/ ../.a/.a
+../.a//..a ../.a/..a
+../.a//... ../.a/...
+../.a//../ ..
+../.a//./a ../.a/a
+../.a//./. ../.a
+../.a//.// ../.a
+../.a///aa ../.a/aa
+../.a///a. ../.a/a.
+../.a///a/ ../.a/a
+../.a///.a ../.a/.a
+../.a///.. ..
+../.a///./ ../.a
+../.a////a ../.a/a
+../.a////. ../.a
+../.a///// ../.a
+../..aaaaa ../..aaaaa
+../..aaaa. ../..aaaa.
+../..aaaa/ ../..aaaa
+../..aaa.a ../..aaa.a
+../..aaa.. ../..aaa..
+../..aaa./ ../..aaa.
+../..aaa/a ../..aaa/a
+../..aaa/. ../..aaa
+../..aaa// ../..aaa
+../..aa.aa ../..aa.aa
+../..aa.a. ../..aa.a.
+../..aa.a/ ../..aa.a
+../..aa..a ../..aa..a
+../..aa... ../..aa...
+../..aa../ ../..aa..
+../..aa./a ../..aa./a
+../..aa./. ../..aa.
+../..aa.// ../..aa.
+../..aa/aa ../..aa/aa
+../..aa/a. ../..aa/a.
+../..aa/a/ ../..aa/a
+../..aa/.a ../..aa/.a
+../..aa/.. ..
+../..aa/./ ../..aa
+../..aa//a ../..aa/a
+../..aa//. ../..aa
+../..aa/// ../..aa
+../..a.aaa ../..a.aaa
+../..a.aa. ../..a.aa.
+../..a.aa/ ../..a.aa
+../..a.a.a ../..a.a.a
+../..a.a.. ../..a.a..
+../..a.a./ ../..a.a.
+../..a.a/a ../..a.a/a
+../..a.a/. ../..a.a
+../..a.a// ../..a.a
+../..a..aa ../..a..aa
+../..a..a. ../..a..a.
+../..a..a/ ../..a..a
+../..a...a ../..a...a
+../..a.... ../..a....
+../..a.../ ../..a...
+../..a../a ../..a../a
+../..a../. ../..a..
+../..a..// ../..a..
+../..a./aa ../..a./aa
+../..a./a. ../..a./a.
+../..a./a/ ../..a./a
+../..a./.a ../..a./.a
+../..a./.. ..
+../..a././ ../..a.
+../..a.//a ../..a./a
+../..a.//. ../..a.
+../..a./// ../..a.
+../..a/aaa ../..a/aaa
+../..a/aa. ../..a/aa.
+../..a/aa/ ../..a/aa
+../..a/a.a ../..a/a.a
+../..a/a.. ../..a/a..
+../..a/a./ ../..a/a.
+../..a/a/a ../..a/a/a
+../..a/a/. ../..a/a
+../..a/a// ../..a/a
+../..a/.aa ../..a/.aa
+../..a/.a. ../..a/.a.
+../..a/.a/ ../..a/.a
+../..a/..a ../..a/..a
+../..a/... ../..a/...
+../..a/../ ..
+../..a/./a ../..a/a
+../..a/./. ../..a
+../..a/.// ../..a
+../..a//aa ../..a/aa
+../..a//a. ../..a/a.
+../..a//a/ ../..a/a
+../..a//.a ../..a/.a
+../..a//.. ..
+../..a//./ ../..a
+../..a///a ../..a/a
+../..a///. ../..a
+../..a//// ../..a
+../...aaaa ../...aaaa
+../...aaa. ../...aaa.
+../...aaa/ ../...aaa
+../...aa.a ../...aa.a
+../...aa.. ../...aa..
+../...aa./ ../...aa.
+../...aa/a ../...aa/a
+../...aa/. ../...aa
+../...aa// ../...aa
+../...a.aa ../...a.aa
+../...a.a. ../...a.a.
+../...a.a/ ../...a.a
+../...a..a ../...a..a
+../...a... ../...a...
+../...a../ ../...a..
+../...a./a ../...a./a
+../...a./. ../...a.
+../...a.// ../...a.
+../...a/aa ../...a/aa
+../...a/a. ../...a/a.
+../...a/a/ ../...a/a
+../...a/.a ../...a/.a
+../...a/.. ..
+../...a/./ ../...a
+../...a//a ../...a/a
+../...a//. ../...a
+../...a/// ../...a
+../....aaa ../....aaa
+../....aa. ../....aa.
+../....aa/ ../....aa
+../....a.a ../....a.a
+../....a.. ../....a..
+../....a./ ../....a.
+../....a/a ../....a/a
+../....a/. ../....a
+../....a// ../....a
+../.....aa ../.....aa
+../.....a. ../.....a.
+../.....a/ ../.....a
+../......a ../......a
+../....... ../.......
+../....../ ../......
+../...../a ../...../a
+../...../. ../.....
+../.....// ../.....
+../..../aa ../..../aa
+../..../a. ../..../a.
+../..../a/ ../..../a
+../..../.a ../..../.a
+../..../.. ..
+../...././ ../....
+../....//a ../..../a
+../....//. ../....
+../..../// ../....
+../.../aaa ../.../aaa
+../.../aa. ../.../aa.
+../.../aa/ ../.../aa
+../.../a.a ../.../a.a
+../.../a.. ../.../a..
+../.../a./ ../.../a.
+../.../a/a ../.../a/a
+../.../a/. ../.../a
+../.../a// ../.../a
+../.../.aa ../.../.aa
+../.../.a. ../.../.a.
+../.../.a/ ../.../.a
+../.../..a ../.../..a
+../.../... ../.../...
+../.../../ ..
+../..././a ../.../a
+../..././. ../...
+../.../.// ../...
+../...//aa ../.../aa
+../...//a. ../.../a.
+../...//a/ ../.../a
+../...//.a ../.../.a
+../...//.. ..
+../...//./ ../...
+../...///a ../.../a
+../...///. ../...
+../...//// ../...
+../../aaaa ../../aaaa
+../../aaa. ../../aaa.
+../../aaa/ ../../aaa
+../../aa.a ../../aa.a
+../../aa.. ../../aa..
+../../aa./ ../../aa.
+../../aa/a ../../aa/a
+../../aa/. ../../aa
+../../aa// ../../aa
+../../a.aa ../../a.aa
+../../a.a. ../../a.a.
+../../a.a/ ../../a.a
+../../a..a ../../a..a
+../../a... ../../a...
+../../a../ ../../a..
+../../a./a ../../a./a
+../../a./. ../../a.
+../../a.// ../../a.
+../../a/aa ../../a/aa
+../../a/a. ../../a/a.
+../../a/a/ ../../a/a
+../../a/.a ../../a/.a
+../../a/.. ../..
+../../a/./ ../../a
+../../a//a ../../a/a
+../../a//. ../../a
+../../a/// ../../a
+../../.aaa ../../.aaa
+../../.aa. ../../.aa.
+../../.aa/ ../../.aa
+../../.a.a ../../.a.a
+../../.a.. ../../.a..
+../../.a./ ../../.a.
+../../.a/a ../../.a/a
+../../.a/. ../../.a
+../../.a// ../../.a
+../../..aa ../../..aa
+../../..a. ../../..a.
+../../..a/ ../../..a
+../../...a ../../...a
+../../.... ../../....
+../../.../ ../../...
+../../../a ../../../a
+../../../. ../../..
+../../..// ../../..
+../.././aa ../../aa
+../.././a. ../../a.
+../.././a/ ../../a
+../.././.a ../../.a
+../.././.. ../../..
+../../././ ../..
+../.././/a ../../a
+../.././/. ../..
+../.././// ../..
+../..//aaa ../../aaa
+../..//aa. ../../aa.
+../..//aa/ ../../aa
+../..//a.a ../../a.a
+../..//a.. ../../a..
+../..//a./ ../../a.
+../..//a/a ../../a/a
+../..//a/. ../../a
+../..//a// ../../a
+../..//.aa ../../.aa
+../..//.a. ../../.a.
+../..//.a/ ../../.a
+../..//..a ../../..a
+../..//... ../../...
+../..//../ ../../..
+../..//./a ../../a
+../..//./. ../..
+../..//.// ../..
+../..///aa ../../aa
+../..///a. ../../a.
+../..///a/ ../../a
+../..///.a ../../.a
+../..///.. ../../..
+../..///./ ../..
+../..////a ../../a
+../..////. ../..
+../..///// ../..
+.././aaaaa ../aaaaa
+.././aaaa. ../aaaa.
+.././aaaa/ ../aaaa
+.././aaa.a ../aaa.a
+.././aaa.. ../aaa..
+.././aaa./ ../aaa.
+.././aaa/a ../aaa/a
+.././aaa/. ../aaa
+.././aaa// ../aaa
+.././aa.aa ../aa.aa
+.././aa.a. ../aa.a.
+.././aa.a/ ../aa.a
+.././aa..a ../aa..a
+.././aa... ../aa...
+.././aa../ ../aa..
+.././aa./a ../aa./a
+.././aa./. ../aa.
+.././aa.// ../aa.
+.././aa/aa ../aa/aa
+.././aa/a. ../aa/a.
+.././aa/a/ ../aa/a
+.././aa/.a ../aa/.a
+.././aa/.. ..
+.././aa/./ ../aa
+.././aa//a ../aa/a
+.././aa//. ../aa
+.././aa/// ../aa
+.././a.aaa ../a.aaa
+.././a.aa. ../a.aa.
+.././a.aa/ ../a.aa
+.././a.a.a ../a.a.a
+.././a.a.. ../a.a..
+.././a.a./ ../a.a.
+.././a.a/a ../a.a/a
+.././a.a/. ../a.a
+.././a.a// ../a.a
+.././a..aa ../a..aa
+.././a..a. ../a..a.
+.././a..a/ ../a..a
+.././a...a ../a...a
+.././a.... ../a....
+.././a.../ ../a...
+.././a../a ../a../a
+.././a../. ../a..
+.././a..// ../a..
+.././a./aa ../a./aa
+.././a./a. ../a./a.
+.././a./a/ ../a./a
+.././a./.a ../a./.a
+.././a./.. ..
+.././a././ ../a.
+.././a.//a ../a./a
+.././a.//. ../a.
+.././a./// ../a.
+.././a/aaa ../a/aaa
+.././a/aa. ../a/aa.
+.././a/aa/ ../a/aa
+.././a/a.a ../a/a.a
+.././a/a.. ../a/a..
+.././a/a./ ../a/a.
+.././a/a/a ../a/a/a
+.././a/a/. ../a/a
+.././a/a// ../a/a
+.././a/.aa ../a/.aa
+.././a/.a. ../a/.a.
+.././a/.a/ ../a/.a
+.././a/..a ../a/..a
+.././a/... ../a/...
+.././a/../ ..
+.././a/./a ../a/a
+.././a/./. ../a
+.././a/.// ../a
+.././a//aa ../a/aa
+.././a//a. ../a/a.
+.././a//a/ ../a/a
+.././a//.a ../a/.a
+.././a//.. ..
+.././a//./ ../a
+.././a///a ../a/a
+.././a///. ../a
+.././a//// ../a
+.././.aaaa ../.aaaa
+.././.aaa. ../.aaa.
+.././.aaa/ ../.aaa
+.././.aa.a ../.aa.a
+.././.aa.. ../.aa..
+.././.aa./ ../.aa.
+.././.aa/a ../.aa/a
+.././.aa/. ../.aa
+.././.aa// ../.aa
+.././.a.aa ../.a.aa
+.././.a.a. ../.a.a.
+.././.a.a/ ../.a.a
+.././.a..a ../.a..a
+.././.a... ../.a...
+.././.a../ ../.a..
+.././.a./a ../.a./a
+.././.a./. ../.a.
+.././.a.// ../.a.
+.././.a/aa ../.a/aa
+.././.a/a. ../.a/a.
+.././.a/a/ ../.a/a
+.././.a/.a ../.a/.a
+.././.a/.. ..
+.././.a/./ ../.a
+.././.a//a ../.a/a
+.././.a//. ../.a
+.././.a/// ../.a
+.././..aaa ../..aaa
+.././..aa. ../..aa.
+.././..aa/ ../..aa
+.././..a.a ../..a.a
+.././..a.. ../..a..
+.././..a./ ../..a.
+.././..a/a ../..a/a
+.././..a/. ../..a
+.././..a// ../..a
+.././...aa ../...aa
+.././...a. ../...a.
+.././...a/ ../...a
+.././....a ../....a
+.././..... ../.....
+.././..../ ../....
+.././.../a ../.../a
+.././.../. ../...
+.././...// ../...
+.././../aa ../../aa
+.././../a. ../../a.
+.././../a/ ../../a
+.././../.a ../../.a
+.././../.. ../../..
+.././.././ ../..
+.././..//a ../../a
+.././..//. ../..
+.././../// ../..
+../././aaa ../aaa
+../././aa. ../aa.
+../././aa/ ../aa
+../././a.a ../a.a
+../././a.. ../a..
+../././a./ ../a.
+../././a/a ../a/a
+../././a/. ../a
+../././a// ../a
+../././.aa ../.aa
+../././.a. ../.a.
+../././.a/ ../.a
+../././..a ../..a
+../././... ../...
+../././../ ../..
+.././././a ../a
+.././././. ..
+../././.// ..
+../././/aa ../aa
+../././/a. ../a.
+../././/a/ ../a
+../././/.a ../.a
+../././/.. ../..
+../././/./ ..
+../././//a ../a
+../././//. ..
+../././/// ..
+.././/aaaa ../aaaa
+.././/aaa. ../aaa.
+.././/aaa/ ../aaa
+.././/aa.a ../aa.a
+.././/aa.. ../aa..
+.././/aa./ ../aa.
+.././/aa/a ../aa/a
+.././/aa/. ../aa
+.././/aa// ../aa
+.././/a.aa ../a.aa
+.././/a.a. ../a.a.
+.././/a.a/ ../a.a
+.././/a..a ../a..a
+.././/a... ../a...
+.././/a../ ../a..
+.././/a./a ../a./a
+.././/a./. ../a.
+.././/a.// ../a.
+.././/a/aa ../a/aa
+.././/a/a. ../a/a.
+.././/a/a/ ../a/a
+.././/a/.a ../a/.a
+.././/a/.. ..
+.././/a/./ ../a
+.././/a//a ../a/a
+.././/a//. ../a
+.././/a/// ../a
+.././/.aaa ../.aaa
+.././/.aa. ../.aa.
+.././/.aa/ ../.aa
+.././/.a.a ../.a.a
+.././/.a.. ../.a..
+.././/.a./ ../.a.
+.././/.a/a ../.a/a
+.././/.a/. ../.a
+.././/.a// ../.a
+.././/..aa ../..aa
+.././/..a. ../..a.
+.././/..a/ ../..a
+.././/...a ../...a
+.././/.... ../....
+.././/.../ ../...
+.././/../a ../../a
+.././/../. ../..
+.././/..// ../..
+.././/./aa ../aa
+.././/./a. ../a.
+.././/./a/ ../a
+.././/./.a ../.a
+.././/./.. ../..
+.././/././ ..
+.././/.//a ../a
+.././/.//. ..
+.././/./// ..
+.././//aaa ../aaa
+.././//aa. ../aa.
+.././//aa/ ../aa
+.././//a.a ../a.a
+.././//a.. ../a..
+.././//a./ ../a.
+.././//a/a ../a/a
+.././//a/. ../a
+.././//a// ../a
+.././//.aa ../.aa
+.././//.a. ../.a.
+.././//.a/ ../.a
+.././//..a ../..a
+.././//... ../...
+.././//../ ../..
+.././//./a ../a
+.././//./. ..
+.././//.// ..
+.././///aa ../aa
+.././///a. ../a.
+.././///a/ ../a
+.././///.a ../.a
+.././///.. ../..
+.././///./ ..
+.././////a ../a
+.././////. ..
+.././///// ..
+..//aaaaaa ../aaaaaa
+..//aaaaa. ../aaaaa.
+..//aaaaa/ ../aaaaa
+..//aaaa.a ../aaaa.a
+..//aaaa.. ../aaaa..
+..//aaaa./ ../aaaa.
+..//aaaa/a ../aaaa/a
+..//aaaa/. ../aaaa
+..//aaaa// ../aaaa
+..//aaa.aa ../aaa.aa
+..//aaa.a. ../aaa.a.
+..//aaa.a/ ../aaa.a
+..//aaa..a ../aaa..a
+..//aaa... ../aaa...
+..//aaa../ ../aaa..
+..//aaa./a ../aaa./a
+..//aaa./. ../aaa.
+..//aaa.// ../aaa.
+..//aaa/aa ../aaa/aa
+..//aaa/a. ../aaa/a.
+..//aaa/a/ ../aaa/a
+..//aaa/.a ../aaa/.a
+..//aaa/.. ..
+..//aaa/./ ../aaa
+..//aaa//a ../aaa/a
+..//aaa//. ../aaa
+..//aaa/// ../aaa
+..//aa.aaa ../aa.aaa
+..//aa.aa. ../aa.aa.
+..//aa.aa/ ../aa.aa
+..//aa.a.a ../aa.a.a
+..//aa.a.. ../aa.a..
+..//aa.a./ ../aa.a.
+..//aa.a/a ../aa.a/a
+..//aa.a/. ../aa.a
+..//aa.a// ../aa.a
+..//aa..aa ../aa..aa
+..//aa..a. ../aa..a.
+..//aa..a/ ../aa..a
+..//aa...a ../aa...a
+..//aa.... ../aa....
+..//aa.../ ../aa...
+..//aa../a ../aa../a
+..//aa../. ../aa..
+..//aa..// ../aa..
+..//aa./aa ../aa./aa
+..//aa./a. ../aa./a.
+..//aa./a/ ../aa./a
+..//aa./.a ../aa./.a
+..//aa./.. ..
+..//aa././ ../aa.
+..//aa.//a ../aa./a
+..//aa.//. ../aa.
+..//aa./// ../aa.
+..//aa/aaa ../aa/aaa
+..//aa/aa. ../aa/aa.
+..//aa/aa/ ../aa/aa
+..//aa/a.a ../aa/a.a
+..//aa/a.. ../aa/a..
+..//aa/a./ ../aa/a.
+..//aa/a/a ../aa/a/a
+..//aa/a/. ../aa/a
+..//aa/a// ../aa/a
+..//aa/.aa ../aa/.aa
+..//aa/.a. ../aa/.a.
+..//aa/.a/ ../aa/.a
+..//aa/..a ../aa/..a
+..//aa/... ../aa/...
+..//aa/../ ..
+..//aa/./a ../aa/a
+..//aa/./. ../aa
+..//aa/.// ../aa
+..//aa//aa ../aa/aa
+..//aa//a. ../aa/a.
+..//aa//a/ ../aa/a
+..//aa//.a ../aa/.a
+..//aa//.. ..
+..//aa//./ ../aa
+..//aa///a ../aa/a
+..//aa///. ../aa
+..//aa//// ../aa
+..//a.aaaa ../a.aaaa
+..//a.aaa. ../a.aaa.
+..//a.aaa/ ../a.aaa
+..//a.aa.a ../a.aa.a
+..//a.aa.. ../a.aa..
+..//a.aa./ ../a.aa.
+..//a.aa/a ../a.aa/a
+..//a.aa/. ../a.aa
+..//a.aa// ../a.aa
+..//a.a.aa ../a.a.aa
+..//a.a.a. ../a.a.a.
+..//a.a.a/ ../a.a.a
+..//a.a..a ../a.a..a
+..//a.a... ../a.a...
+..//a.a../ ../a.a..
+..//a.a./a ../a.a./a
+..//a.a./. ../a.a.
+..//a.a.// ../a.a.
+..//a.a/aa ../a.a/aa
+..//a.a/a. ../a.a/a.
+..//a.a/a/ ../a.a/a
+..//a.a/.a ../a.a/.a
+..//a.a/.. ..
+..//a.a/./ ../a.a
+..//a.a//a ../a.a/a
+..//a.a//. ../a.a
+..//a.a/// ../a.a
+..//a..aaa ../a..aaa
+..//a..aa. ../a..aa.
+..//a..aa/ ../a..aa
+..//a..a.a ../a..a.a
+..//a..a.. ../a..a..
+..//a..a./ ../a..a.
+..//a..a/a ../a..a/a
+..//a..a/. ../a..a
+..//a..a// ../a..a
+..//a...aa ../a...aa
+..//a...a. ../a...a.
+..//a...a/ ../a...a
+..//a....a ../a....a
+..//a..... ../a.....
+..//a..../ ../a....
+..//a.../a ../a.../a
+..//a.../. ../a...
+..//a...// ../a...
+..//a../aa ../a../aa
+..//a../a. ../a../a.
+..//a../a/ ../a../a
+..//a../.a ../a../.a
+..//a../.. ..
+..//a.././ ../a..
+..//a..//a ../a../a
+..//a..//. ../a..
+..//a../// ../a..
+..//a./aaa ../a./aaa
+..//a./aa. ../a./aa.
+..//a./aa/ ../a./aa
+..//a./a.a ../a./a.a
+..//a./a.. ../a./a..
+..//a./a./ ../a./a.
+..//a./a/a ../a./a/a
+..//a./a/. ../a./a
+..//a./a// ../a./a
+..//a./.aa ../a./.aa
+..//a./.a. ../a./.a.
+..//a./.a/ ../a./.a
+..//a./..a ../a./..a
+..//a./... ../a./...
+..//a./../ ..
+..//a././a ../a./a
+..//a././. ../a.
+..//a./.// ../a.
+..//a.//aa ../a./aa
+..//a.//a. ../a./a.
+..//a.//a/ ../a./a
+..//a.//.a ../a./.a
+..//a.//.. ..
+..//a.//./ ../a.
+..//a.///a ../a./a
+..//a.///. ../a.
+..//a.//// ../a.
+..//a/aaaa ../a/aaaa
+..//a/aaa. ../a/aaa.
+..//a/aaa/ ../a/aaa
+..//a/aa.a ../a/aa.a
+..//a/aa.. ../a/aa..
+..//a/aa./ ../a/aa.
+..//a/aa/a ../a/aa/a
+..//a/aa/. ../a/aa
+..//a/aa// ../a/aa
+..//a/a.aa ../a/a.aa
+..//a/a.a. ../a/a.a.
+..//a/a.a/ ../a/a.a
+..//a/a..a ../a/a..a
+..//a/a... ../a/a...
+..//a/a../ ../a/a..
+..//a/a./a ../a/a./a
+..//a/a./. ../a/a.
+..//a/a.// ../a/a.
+..//a/a/aa ../a/a/aa
+..//a/a/a. ../a/a/a.
+..//a/a/a/ ../a/a/a
+..//a/a/.a ../a/a/.a
+..//a/a/.. ../a
+..//a/a/./ ../a/a
+..//a/a//a ../a/a/a
+..//a/a//. ../a/a
+..//a/a/// ../a/a
+..//a/.aaa ../a/.aaa
+..//a/.aa. ../a/.aa.
+..//a/.aa/ ../a/.aa
+..//a/.a.a ../a/.a.a
+..//a/.a.. ../a/.a..
+..//a/.a./ ../a/.a.
+..//a/.a/a ../a/.a/a
+..//a/.a/. ../a/.a
+..//a/.a// ../a/.a
+..//a/..aa ../a/..aa
+..//a/..a. ../a/..a.
+..//a/..a/ ../a/..a
+..//a/...a ../a/...a
+..//a/.... ../a/....
+..//a/.../ ../a/...
+..//a/../a ../a
+..//a/../. ..
+..//a/..// ..
+..//a/./aa ../a/aa
+..//a/./a. ../a/a.
+..//a/./a/ ../a/a
+..//a/./.a ../a/.a
+..//a/./.. ..
+..//a/././ ../a
+..//a/.//a ../a/a
+..//a/.//. ../a
+..//a/./// ../a
+..//a//aaa ../a/aaa
+..//a//aa. ../a/aa.
+..//a//aa/ ../a/aa
+..//a//a.a ../a/a.a
+..//a//a.. ../a/a..
+..//a//a./ ../a/a.
+..//a//a/a ../a/a/a
+..//a//a/. ../a/a
+..//a//a// ../a/a
+..//a//.aa ../a/.aa
+..//a//.a. ../a/.a.
+..//a//.a/ ../a/.a
+..//a//..a ../a/..a
+..//a//... ../a/...
+..//a//../ ..
+..//a//./a ../a/a
+..//a//./. ../a
+..//a//.// ../a
+..//a///aa ../a/aa
+..//a///a. ../a/a.
+..//a///a/ ../a/a
+..//a///.a ../a/.a
+..//a///.. ..
+..//a///./ ../a
+..//a////a ../a/a
+..//a////. ../a
+..//a///// ../a
+..//.aaaaa ../.aaaaa
+..//.aaaa. ../.aaaa.
+..//.aaaa/ ../.aaaa
+..//.aaa.a ../.aaa.a
+..//.aaa.. ../.aaa..
+..//.aaa./ ../.aaa.
+..//.aaa/a ../.aaa/a
+..//.aaa/. ../.aaa
+..//.aaa// ../.aaa
+..//.aa.aa ../.aa.aa
+..//.aa.a. ../.aa.a.
+..//.aa.a/ ../.aa.a
+..//.aa..a ../.aa..a
+..//.aa... ../.aa...
+..//.aa../ ../.aa..
+..//.aa./a ../.aa./a
+..//.aa./. ../.aa.
+..//.aa.// ../.aa.
+..//.aa/aa ../.aa/aa
+..//.aa/a. ../.aa/a.
+..//.aa/a/ ../.aa/a
+..//.aa/.a ../.aa/.a
+..//.aa/.. ..
+..//.aa/./ ../.aa
+..//.aa//a ../.aa/a
+..//.aa//. ../.aa
+..//.aa/// ../.aa
+..//.a.aaa ../.a.aaa
+..//.a.aa. ../.a.aa.
+..//.a.aa/ ../.a.aa
+..//.a.a.a ../.a.a.a
+..//.a.a.. ../.a.a..
+..//.a.a./ ../.a.a.
+..//.a.a/a ../.a.a/a
+..//.a.a/. ../.a.a
+..//.a.a// ../.a.a
+..//.a..aa ../.a..aa
+..//.a..a. ../.a..a.
+..//.a..a/ ../.a..a
+..//.a...a ../.a...a
+..//.a.... ../.a....
+..//.a.../ ../.a...
+..//.a../a ../.a../a
+..//.a../. ../.a..
+..//.a..// ../.a..
+..//.a./aa ../.a./aa
+..//.a./a. ../.a./a.
+..//.a./a/ ../.a./a
+..//.a./.a ../.a./.a
+..//.a./.. ..
+..//.a././ ../.a.
+..//.a.//a ../.a./a
+..//.a.//. ../.a.
+..//.a./// ../.a.
+..//.a/aaa ../.a/aaa
+..//.a/aa. ../.a/aa.
+..//.a/aa/ ../.a/aa
+..//.a/a.a ../.a/a.a
+..//.a/a.. ../.a/a..
+..//.a/a./ ../.a/a.
+..//.a/a/a ../.a/a/a
+..//.a/a/. ../.a/a
+..//.a/a// ../.a/a
+..//.a/.aa ../.a/.aa
+..//.a/.a. ../.a/.a.
+..//.a/.a/ ../.a/.a
+..//.a/..a ../.a/..a
+..//.a/... ../.a/...
+..//.a/../ ..
+..//.a/./a ../.a/a
+..//.a/./. ../.a
+..//.a/.// ../.a
+..//.a//aa ../.a/aa
+..//.a//a. ../.a/a.
+..//.a//a/ ../.a/a
+..//.a//.a ../.a/.a
+..//.a//.. ..
+..//.a//./ ../.a
+..//.a///a ../.a/a
+..//.a///. ../.a
+..//.a//// ../.a
+..//..aaaa ../..aaaa
+..//..aaa. ../..aaa.
+..//..aaa/ ../..aaa
+..//..aa.a ../..aa.a
+..//..aa.. ../..aa..
+..//..aa./ ../..aa.
+..//..aa/a ../..aa/a
+..//..aa/. ../..aa
+..//..aa// ../..aa
+..//..a.aa ../..a.aa
+..//..a.a. ../..a.a.
+..//..a.a/ ../..a.a
+..//..a..a ../..a..a
+..//..a... ../..a...
+..//..a../ ../..a..
+..//..a./a ../..a./a
+..//..a./. ../..a.
+..//..a.// ../..a.
+..//..a/aa ../..a/aa
+..//..a/a. ../..a/a.
+..//..a/a/ ../..a/a
+..//..a/.a ../..a/.a
+..//..a/.. ..
+..//..a/./ ../..a
+..//..a//a ../..a/a
+..//..a//. ../..a
+..//..a/// ../..a
+..//...aaa ../...aaa
+..//...aa. ../...aa.
+..//...aa/ ../...aa
+..//...a.a ../...a.a
+..//...a.. ../...a..
+..//...a./ ../...a.
+..//...a/a ../...a/a
+..//...a/. ../...a
+..//...a// ../...a
+..//....aa ../....aa
+..//....a. ../....a.
+..//....a/ ../....a
+..//.....a ../.....a
+..//...... ../......
+..//...../ ../.....
+..//..../a ../..../a
+..//..../. ../....
+..//....// ../....
+..//.../aa ../.../aa
+..//.../a. ../.../a.
+..//.../a/ ../.../a
+..//.../.a ../.../.a
+..//.../.. ..
+..//..././ ../...
+..//...//a ../.../a
+..//...//. ../...
+..//.../// ../...
+..//../aaa ../../aaa
+..//../aa. ../../aa.
+..//../aa/ ../../aa
+..//../a.a ../../a.a
+..//../a.. ../../a..
+..//../a./ ../../a.
+..//../a/a ../../a/a
+..//../a/. ../../a
+..//../a// ../../a
+..//../.aa ../../.aa
+..//../.a. ../../.a.
+..//../.a/ ../../.a
+..//../..a ../../..a
+..//../... ../../...
+..//../../ ../../..
+..//.././a ../../a
+..//.././. ../..
+..//../.// ../..
+..//..//aa ../../aa
+..//..//a. ../../a.
+..//..//a/ ../../a
+..//..//.a ../../.a
+..//..//.. ../../..
+..//..//./ ../..
+..//..///a ../../a
+..//..///. ../..
+..//..//// ../..
+..//./aaaa ../aaaa
+..//./aaa. ../aaa.
+..//./aaa/ ../aaa
+..//./aa.a ../aa.a
+..//./aa.. ../aa..
+..//./aa./ ../aa.
+..//./aa/a ../aa/a
+..//./aa/. ../aa
+..//./aa// ../aa
+..//./a.aa ../a.aa
+..//./a.a. ../a.a.
+..//./a.a/ ../a.a
+..//./a..a ../a..a
+..//./a... ../a...
+..//./a../ ../a..
+..//./a./a ../a./a
+..//./a./. ../a.
+..//./a.// ../a.
+..//./a/aa ../a/aa
+..//./a/a. ../a/a.
+..//./a/a/ ../a/a
+..//./a/.a ../a/.a
+..//./a/.. ..
+..//./a/./ ../a
+..//./a//a ../a/a
+..//./a//. ../a
+..//./a/// ../a
+..//./.aaa ../.aaa
+..//./.aa. ../.aa.
+..//./.aa/ ../.aa
+..//./.a.a ../.a.a
+..//./.a.. ../.a..
+..//./.a./ ../.a.
+..//./.a/a ../.a/a
+..//./.a/. ../.a
+..//./.a// ../.a
+..//./..aa ../..aa
+..//./..a. ../..a.
+..//./..a/ ../..a
+..//./...a ../...a
+..//./.... ../....
+..//./.../ ../...
+..//./../a ../../a
+..//./../. ../..
+..//./..// ../..
+..//././aa ../aa
+..//././a. ../a.
+..//././a/ ../a
+..//././.a ../.a
+..//././.. ../..
+..//./././ ..
+..//././/a ../a
+..//././/. ..
+..//././// ..
+..//.//aaa ../aaa
+..//.//aa. ../aa.
+..//.//aa/ ../aa
+..//.//a.a ../a.a
+..//.//a.. ../a..
+..//.//a./ ../a.
+..//.//a/a ../a/a
+..//.//a/. ../a
+..//.//a// ../a
+..//.//.aa ../.aa
+..//.//.a. ../.a.
+..//.//.a/ ../.a
+..//.//..a ../..a
+..//.//... ../...
+..//.//../ ../..
+..//.//./a ../a
+..//.//./. ..
+..//.//.// ..
+..//.///aa ../aa
+..//.///a. ../a.
+..//.///a/ ../a
+..//.///.a ../.a
+..//.///.. ../..
+..//.///./ ..
+..//.////a ../a
+..//.////. ..
+..//.///// ..
+..///aaaaa ../aaaaa
+..///aaaa. ../aaaa.
+..///aaaa/ ../aaaa
+..///aaa.a ../aaa.a
+..///aaa.. ../aaa..
+..///aaa./ ../aaa.
+..///aaa/a ../aaa/a
+..///aaa/. ../aaa
+..///aaa// ../aaa
+..///aa.aa ../aa.aa
+..///aa.a. ../aa.a.
+..///aa.a/ ../aa.a
+..///aa..a ../aa..a
+..///aa... ../aa...
+..///aa../ ../aa..
+..///aa./a ../aa./a
+..///aa./. ../aa.
+..///aa.// ../aa.
+..///aa/aa ../aa/aa
+..///aa/a. ../aa/a.
+..///aa/a/ ../aa/a
+..///aa/.a ../aa/.a
+..///aa/.. ..
+..///aa/./ ../aa
+..///aa//a ../aa/a
+..///aa//. ../aa
+..///aa/// ../aa
+..///a.aaa ../a.aaa
+..///a.aa. ../a.aa.
+..///a.aa/ ../a.aa
+..///a.a.a ../a.a.a
+..///a.a.. ../a.a..
+..///a.a./ ../a.a.
+..///a.a/a ../a.a/a
+..///a.a/. ../a.a
+..///a.a// ../a.a
+..///a..aa ../a..aa
+..///a..a. ../a..a.
+..///a..a/ ../a..a
+..///a...a ../a...a
+..///a.... ../a....
+..///a.../ ../a...
+..///a../a ../a../a
+..///a../. ../a..
+..///a..// ../a..
+..///a./aa ../a./aa
+..///a./a. ../a./a.
+..///a./a/ ../a./a
+..///a./.a ../a./.a
+..///a./.. ..
+..///a././ ../a.
+..///a.//a ../a./a
+..///a.//. ../a.
+..///a./// ../a.
+..///a/aaa ../a/aaa
+..///a/aa. ../a/aa.
+..///a/aa/ ../a/aa
+..///a/a.a ../a/a.a
+..///a/a.. ../a/a..
+..///a/a./ ../a/a.
+..///a/a/a ../a/a/a
+..///a/a/. ../a/a
+..///a/a// ../a/a
+..///a/.aa ../a/.aa
+..///a/.a. ../a/.a.
+..///a/.a/ ../a/.a
+..///a/..a ../a/..a
+..///a/... ../a/...
+..///a/../ ..
+..///a/./a ../a/a
+..///a/./. ../a
+..///a/.// ../a
+..///a//aa ../a/aa
+..///a//a. ../a/a.
+..///a//a/ ../a/a
+..///a//.a ../a/.a
+..///a//.. ..
+..///a//./ ../a
+..///a///a ../a/a
+..///a///. ../a
+..///a//// ../a
+..///.aaaa ../.aaaa
+..///.aaa. ../.aaa.
+..///.aaa/ ../.aaa
+..///.aa.a ../.aa.a
+..///.aa.. ../.aa..
+..///.aa./ ../.aa.
+..///.aa/a ../.aa/a
+..///.aa/. ../.aa
+..///.aa// ../.aa
+..///.a.aa ../.a.aa
+..///.a.a. ../.a.a.
+..///.a.a/ ../.a.a
+..///.a..a ../.a..a
+..///.a... ../.a...
+..///.a../ ../.a..
+..///.a./a ../.a./a
+..///.a./. ../.a.
+..///.a.// ../.a.
+..///.a/aa ../.a/aa
+..///.a/a. ../.a/a.
+..///.a/a/ ../.a/a
+..///.a/.a ../.a/.a
+..///.a/.. ..
+..///.a/./ ../.a
+..///.a//a ../.a/a
+..///.a//. ../.a
+..///.a/// ../.a
+..///..aaa ../..aaa
+..///..aa. ../..aa.
+..///..aa/ ../..aa
+..///..a.a ../..a.a
+..///..a.. ../..a..
+..///..a./ ../..a.
+..///..a/a ../..a/a
+..///..a/. ../..a
+..///..a// ../..a
+..///...aa ../...aa
+..///...a. ../...a.
+..///...a/ ../...a
+..///....a ../....a
+..///..... ../.....
+..///..../ ../....
+..///.../a ../.../a
+..///.../. ../...
+..///...// ../...
+..///../aa ../../aa
+..///../a. ../../a.
+..///../a/ ../../a
+..///../.a ../../.a
+..///../.. ../../..
+..///.././ ../..
+..///..//a ../../a
+..///..//. ../..
+..///../// ../..
+..///./aaa ../aaa
+..///./aa. ../aa.
+..///./aa/ ../aa
+..///./a.a ../a.a
+..///./a.. ../a..
+..///./a./ ../a.
+..///./a/a ../a/a
+..///./a/. ../a
+..///./a// ../a
+..///./.aa ../.aa
+..///./.a. ../.a.
+..///./.a/ ../.a
+..///./..a ../..a
+..///./... ../...
+..///./../ ../..
+..///././a ../a
+..///././. ..
+..///./.// ..
+..///.//aa ../aa
+..///.//a. ../a.
+..///.//a/ ../a
+..///.//.a ../.a
+..///.//.. ../..
+..///.//./ ..
+..///.///a ../a
+..///.///. ..
+..///.//// ..
+..////aaaa ../aaaa
+..////aaa. ../aaa.
+..////aaa/ ../aaa
+..////aa.a ../aa.a
+..////aa.. ../aa..
+..////aa./ ../aa.
+..////aa/a ../aa/a
+..////aa/. ../aa
+..////aa// ../aa
+..////a.aa ../a.aa
+..////a.a. ../a.a.
+..////a.a/ ../a.a
+..////a..a ../a..a
+..////a... ../a...
+..////a../ ../a..
+..////a./a ../a./a
+..////a./. ../a.
+..////a.// ../a.
+..////a/aa ../a/aa
+..////a/a. ../a/a.
+..////a/a/ ../a/a
+..////a/.a ../a/.a
+..////a/.. ..
+..////a/./ ../a
+..////a//a ../a/a
+..////a//. ../a
+..////a/// ../a
+..////.aaa ../.aaa
+..////.aa. ../.aa.
+..////.aa/ ../.aa
+..////.a.a ../.a.a
+..////.a.. ../.a..
+..////.a./ ../.a.
+..////.a/a ../.a/a
+..////.a/. ../.a
+..////.a// ../.a
+..////..aa ../..aa
+..////..a. ../..a.
+..////..a/ ../..a
+..////...a ../...a
+..////.... ../....
+..////.../ ../...
+..////../a ../../a
+..////../. ../..
+..////..// ../..
+..////./aa ../aa
+..////./a. ../a.
+..////./a/ ../a
+..////./.a ../.a
+..////./.. ../..
+..////././ ..
+..////.//a ../a
+..////.//. ..
+..////./// ..
+../////aaa ../aaa
+../////aa. ../aa.
+../////aa/ ../aa
+../////a.a ../a.a
+../////a.. ../a..
+../////a./ ../a.
+../////a/a ../a/a
+../////a/. ../a
+../////a// ../a
+../////.aa ../.aa
+../////.a. ../.a.
+../////.a/ ../.a
+../////..a ../..a
+../////... ../...
+../////../ ../..
+../////./a ../a
+../////./. ..
+../////.// ..
+..//////aa ../aa
+..//////a. ../a.
+..//////a/ ../a
+..//////.a ../.a
+..//////.. ../..
+..//////./ ..
+..///////a ../a
+..///////. ..
+..//////// ..
+./aaaaaaaa aaaaaaaa
+./aaaaaaa. aaaaaaa.
+./aaaaaaa/ aaaaaaa
+./aaaaaa.a aaaaaa.a
+./aaaaaa.. aaaaaa..
+./aaaaaa./ aaaaaa.
+./aaaaaa/a aaaaaa/a
+./aaaaaa/. aaaaaa
+./aaaaaa// aaaaaa
+./aaaaa.aa aaaaa.aa
+./aaaaa.a. aaaaa.a.
+./aaaaa.a/ aaaaa.a
+./aaaaa..a aaaaa..a
+./aaaaa... aaaaa...
+./aaaaa../ aaaaa..
+./aaaaa./a aaaaa./a
+./aaaaa./. aaaaa.
+./aaaaa.// aaaaa.
+./aaaaa/aa aaaaa/aa
+./aaaaa/a. aaaaa/a.
+./aaaaa/a/ aaaaa/a
+./aaaaa/.a aaaaa/.a
+./aaaaa/.. .
+./aaaaa/./ aaaaa
+./aaaaa//a aaaaa/a
+./aaaaa//. aaaaa
+./aaaaa/// aaaaa
+./aaaa.aaa aaaa.aaa
+./aaaa.aa. aaaa.aa.
+./aaaa.aa/ aaaa.aa
+./aaaa.a.a aaaa.a.a
+./aaaa.a.. aaaa.a..
+./aaaa.a./ aaaa.a.
+./aaaa.a/a aaaa.a/a
+./aaaa.a/. aaaa.a
+./aaaa.a// aaaa.a
+./aaaa..aa aaaa..aa
+./aaaa..a. aaaa..a.
+./aaaa..a/ aaaa..a
+./aaaa...a aaaa...a
+./aaaa.... aaaa....
+./aaaa.../ aaaa...
+./aaaa../a aaaa../a
+./aaaa../. aaaa..
+./aaaa..// aaaa..
+./aaaa./aa aaaa./aa
+./aaaa./a. aaaa./a.
+./aaaa./a/ aaaa./a
+./aaaa./.a aaaa./.a
+./aaaa./.. .
+./aaaa././ aaaa.
+./aaaa.//a aaaa./a
+./aaaa.//. aaaa.
+./aaaa./// aaaa.
+./aaaa/aaa aaaa/aaa
+./aaaa/aa. aaaa/aa.
+./aaaa/aa/ aaaa/aa
+./aaaa/a.a aaaa/a.a
+./aaaa/a.. aaaa/a..
+./aaaa/a./ aaaa/a.
+./aaaa/a/a aaaa/a/a
+./aaaa/a/. aaaa/a
+./aaaa/a// aaaa/a
+./aaaa/.aa aaaa/.aa
+./aaaa/.a. aaaa/.a.
+./aaaa/.a/ aaaa/.a
+./aaaa/..a aaaa/..a
+./aaaa/... aaaa/...
+./aaaa/../ .
+./aaaa/./a aaaa/a
+./aaaa/./. aaaa
+./aaaa/.// aaaa
+./aaaa//aa aaaa/aa
+./aaaa//a. aaaa/a.
+./aaaa//a/ aaaa/a
+./aaaa//.a aaaa/.a
+./aaaa//.. .
+./aaaa//./ aaaa
+./aaaa///a aaaa/a
+./aaaa///. aaaa
+./aaaa//// aaaa
+./aaa.aaaa aaa.aaaa
+./aaa.aaa. aaa.aaa.
+./aaa.aaa/ aaa.aaa
+./aaa.aa.a aaa.aa.a
+./aaa.aa.. aaa.aa..
+./aaa.aa./ aaa.aa.
+./aaa.aa/a aaa.aa/a
+./aaa.aa/. aaa.aa
+./aaa.aa// aaa.aa
+./aaa.a.aa aaa.a.aa
+./aaa.a.a. aaa.a.a.
+./aaa.a.a/ aaa.a.a
+./aaa.a..a aaa.a..a
+./aaa.a... aaa.a...
+./aaa.a../ aaa.a..
+./aaa.a./a aaa.a./a
+./aaa.a./. aaa.a.
+./aaa.a.// aaa.a.
+./aaa.a/aa aaa.a/aa
+./aaa.a/a. aaa.a/a.
+./aaa.a/a/ aaa.a/a
+./aaa.a/.a aaa.a/.a
+./aaa.a/.. .
+./aaa.a/./ aaa.a
+./aaa.a//a aaa.a/a
+./aaa.a//. aaa.a
+./aaa.a/// aaa.a
+./aaa..aaa aaa..aaa
+./aaa..aa. aaa..aa.
+./aaa..aa/ aaa..aa
+./aaa..a.a aaa..a.a
+./aaa..a.. aaa..a..
+./aaa..a./ aaa..a.
+./aaa..a/a aaa..a/a
+./aaa..a/. aaa..a
+./aaa..a// aaa..a
+./aaa...aa aaa...aa
+./aaa...a. aaa...a.
+./aaa...a/ aaa...a
+./aaa....a aaa....a
+./aaa..... aaa.....
+./aaa..../ aaa....
+./aaa.../a aaa.../a
+./aaa.../. aaa...
+./aaa...// aaa...
+./aaa../aa aaa../aa
+./aaa../a. aaa../a.
+./aaa../a/ aaa../a
+./aaa../.a aaa../.a
+./aaa../.. .
+./aaa.././ aaa..
+./aaa..//a aaa../a
+./aaa..//. aaa..
+./aaa../// aaa..
+./aaa./aaa aaa./aaa
+./aaa./aa. aaa./aa.
+./aaa./aa/ aaa./aa
+./aaa./a.a aaa./a.a
+./aaa./a.. aaa./a..
+./aaa./a./ aaa./a.
+./aaa./a/a aaa./a/a
+./aaa./a/. aaa./a
+./aaa./a// aaa./a
+./aaa./.aa aaa./.aa
+./aaa./.a. aaa./.a.
+./aaa./.a/ aaa./.a
+./aaa./..a aaa./..a
+./aaa./... aaa./...
+./aaa./../ .
+./aaa././a aaa./a
+./aaa././. aaa.
+./aaa./.// aaa.
+./aaa.//aa aaa./aa
+./aaa.//a. aaa./a.
+./aaa.//a/ aaa./a
+./aaa.//.a aaa./.a
+./aaa.//.. .
+./aaa.//./ aaa.
+./aaa.///a aaa./a
+./aaa.///. aaa.
+./aaa.//// aaa.
+./aaa/aaaa aaa/aaaa
+./aaa/aaa. aaa/aaa.
+./aaa/aaa/ aaa/aaa
+./aaa/aa.a aaa/aa.a
+./aaa/aa.. aaa/aa..
+./aaa/aa./ aaa/aa.
+./aaa/aa/a aaa/aa/a
+./aaa/aa/. aaa/aa
+./aaa/aa// aaa/aa
+./aaa/a.aa aaa/a.aa
+./aaa/a.a. aaa/a.a.
+./aaa/a.a/ aaa/a.a
+./aaa/a..a aaa/a..a
+./aaa/a... aaa/a...
+./aaa/a../ aaa/a..
+./aaa/a./a aaa/a./a
+./aaa/a./. aaa/a.
+./aaa/a.// aaa/a.
+./aaa/a/aa aaa/a/aa
+./aaa/a/a. aaa/a/a.
+./aaa/a/a/ aaa/a/a
+./aaa/a/.a aaa/a/.a
+./aaa/a/.. aaa
+./aaa/a/./ aaa/a
+./aaa/a//a aaa/a/a
+./aaa/a//. aaa/a
+./aaa/a/// aaa/a
+./aaa/.aaa aaa/.aaa
+./aaa/.aa. aaa/.aa.
+./aaa/.aa/ aaa/.aa
+./aaa/.a.a aaa/.a.a
+./aaa/.a.. aaa/.a..
+./aaa/.a./ aaa/.a.
+./aaa/.a/a aaa/.a/a
+./aaa/.a/. aaa/.a
+./aaa/.a// aaa/.a
+./aaa/..aa aaa/..aa
+./aaa/..a. aaa/..a.
+./aaa/..a/ aaa/..a
+./aaa/...a aaa/...a
+./aaa/.... aaa/....
+./aaa/.../ aaa/...
+./aaa/../a a
+./aaa/../. .
+./aaa/..// .
+./aaa/./aa aaa/aa
+./aaa/./a. aaa/a.
+./aaa/./a/ aaa/a
+./aaa/./.a aaa/.a
+./aaa/./.. .
+./aaa/././ aaa
+./aaa/.//a aaa/a
+./aaa/.//. aaa
+./aaa/./// aaa
+./aaa//aaa aaa/aaa
+./aaa//aa. aaa/aa.
+./aaa//aa/ aaa/aa
+./aaa//a.a aaa/a.a
+./aaa//a.. aaa/a..
+./aaa//a./ aaa/a.
+./aaa//a/a aaa/a/a
+./aaa//a/. aaa/a
+./aaa//a// aaa/a
+./aaa//.aa aaa/.aa
+./aaa//.a. aaa/.a.
+./aaa//.a/ aaa/.a
+./aaa//..a aaa/..a
+./aaa//... aaa/...
+./aaa//../ .
+./aaa//./a aaa/a
+./aaa//./. aaa
+./aaa//.// aaa
+./aaa///aa aaa/aa
+./aaa///a. aaa/a.
+./aaa///a/ aaa/a
+./aaa///.a aaa/.a
+./aaa///.. .
+./aaa///./ aaa
+./aaa////a aaa/a
+./aaa////. aaa
+./aaa///// aaa
+./aa.aaaaa aa.aaaaa
+./aa.aaaa. aa.aaaa.
+./aa.aaaa/ aa.aaaa
+./aa.aaa.a aa.aaa.a
+./aa.aaa.. aa.aaa..
+./aa.aaa./ aa.aaa.
+./aa.aaa/a aa.aaa/a
+./aa.aaa/. aa.aaa
+./aa.aaa// aa.aaa
+./aa.aa.aa aa.aa.aa
+./aa.aa.a. aa.aa.a.
+./aa.aa.a/ aa.aa.a
+./aa.aa..a aa.aa..a
+./aa.aa... aa.aa...
+./aa.aa../ aa.aa..
+./aa.aa./a aa.aa./a
+./aa.aa./. aa.aa.
+./aa.aa.// aa.aa.
+./aa.aa/aa aa.aa/aa
+./aa.aa/a. aa.aa/a.
+./aa.aa/a/ aa.aa/a
+./aa.aa/.a aa.aa/.a
+./aa.aa/.. .
+./aa.aa/./ aa.aa
+./aa.aa//a aa.aa/a
+./aa.aa//. aa.aa
+./aa.aa/// aa.aa
+./aa.a.aaa aa.a.aaa
+./aa.a.aa. aa.a.aa.
+./aa.a.aa/ aa.a.aa
+./aa.a.a.a aa.a.a.a
+./aa.a.a.. aa.a.a..
+./aa.a.a./ aa.a.a.
+./aa.a.a/a aa.a.a/a
+./aa.a.a/. aa.a.a
+./aa.a.a// aa.a.a
+./aa.a..aa aa.a..aa
+./aa.a..a. aa.a..a.
+./aa.a..a/ aa.a..a
+./aa.a...a aa.a...a
+./aa.a.... aa.a....
+./aa.a.../ aa.a...
+./aa.a../a aa.a../a
+./aa.a../. aa.a..
+./aa.a..// aa.a..
+./aa.a./aa aa.a./aa
+./aa.a./a. aa.a./a.
+./aa.a./a/ aa.a./a
+./aa.a./.a aa.a./.a
+./aa.a./.. .
+./aa.a././ aa.a.
+./aa.a.//a aa.a./a
+./aa.a.//. aa.a.
+./aa.a./// aa.a.
+./aa.a/aaa aa.a/aaa
+./aa.a/aa. aa.a/aa.
+./aa.a/aa/ aa.a/aa
+./aa.a/a.a aa.a/a.a
+./aa.a/a.. aa.a/a..
+./aa.a/a./ aa.a/a.
+./aa.a/a/a aa.a/a/a
+./aa.a/a/. aa.a/a
+./aa.a/a// aa.a/a
+./aa.a/.aa aa.a/.aa
+./aa.a/.a. aa.a/.a.
+./aa.a/.a/ aa.a/.a
+./aa.a/..a aa.a/..a
+./aa.a/... aa.a/...
+./aa.a/../ .
+./aa.a/./a aa.a/a
+./aa.a/./. aa.a
+./aa.a/.// aa.a
+./aa.a//aa aa.a/aa
+./aa.a//a. aa.a/a.
+./aa.a//a/ aa.a/a
+./aa.a//.a aa.a/.a
+./aa.a//.. .
+./aa.a//./ aa.a
+./aa.a///a aa.a/a
+./aa.a///. aa.a
+./aa.a//// aa.a
+./aa..aaaa aa..aaaa
+./aa..aaa. aa..aaa.
+./aa..aaa/ aa..aaa
+./aa..aa.a aa..aa.a
+./aa..aa.. aa..aa..
+./aa..aa./ aa..aa.
+./aa..aa/a aa..aa/a
+./aa..aa/. aa..aa
+./aa..aa// aa..aa
+./aa..a.aa aa..a.aa
+./aa..a.a. aa..a.a.
+./aa..a.a/ aa..a.a
+./aa..a..a aa..a..a
+./aa..a... aa..a...
+./aa..a../ aa..a..
+./aa..a./a aa..a./a
+./aa..a./. aa..a.
+./aa..a.// aa..a.
+./aa..a/aa aa..a/aa
+./aa..a/a. aa..a/a.
+./aa..a/a/ aa..a/a
+./aa..a/.a aa..a/.a
+./aa..a/.. .
+./aa..a/./ aa..a
+./aa..a//a aa..a/a
+./aa..a//. aa..a
+./aa..a/// aa..a
+./aa...aaa aa...aaa
+./aa...aa. aa...aa.
+./aa...aa/ aa...aa
+./aa...a.a aa...a.a
+./aa...a.. aa...a..
+./aa...a./ aa...a.
+./aa...a/a aa...a/a
+./aa...a/. aa...a
+./aa...a// aa...a
+./aa....aa aa....aa
+./aa....a. aa....a.
+./aa....a/ aa....a
+./aa.....a aa.....a
+./aa...... aa......
+./aa...../ aa.....
+./aa..../a aa..../a
+./aa..../. aa....
+./aa....// aa....
+./aa.../aa aa.../aa
+./aa.../a. aa.../a.
+./aa.../a/ aa.../a
+./aa.../.a aa.../.a
+./aa.../.. .
+./aa..././ aa...
+./aa...//a aa.../a
+./aa...//. aa...
+./aa.../// aa...
+./aa../aaa aa../aaa
+./aa../aa. aa../aa.
+./aa../aa/ aa../aa
+./aa../a.a aa../a.a
+./aa../a.. aa../a..
+./aa../a./ aa../a.
+./aa../a/a aa../a/a
+./aa../a/. aa../a
+./aa../a// aa../a
+./aa../.aa aa../.aa
+./aa../.a. aa../.a.
+./aa../.a/ aa../.a
+./aa../..a aa../..a
+./aa../... aa../...
+./aa../../ .
+./aa.././a aa../a
+./aa.././. aa..
+./aa../.// aa..
+./aa..//aa aa../aa
+./aa..//a. aa../a.
+./aa..//a/ aa../a
+./aa..//.a aa../.a
+./aa..//.. .
+./aa..//./ aa..
+./aa..///a aa../a
+./aa..///. aa..
+./aa..//// aa..
+./aa./aaaa aa./aaaa
+./aa./aaa. aa./aaa.
+./aa./aaa/ aa./aaa
+./aa./aa.a aa./aa.a
+./aa./aa.. aa./aa..
+./aa./aa./ aa./aa.
+./aa./aa/a aa./aa/a
+./aa./aa/. aa./aa
+./aa./aa// aa./aa
+./aa./a.aa aa./a.aa
+./aa./a.a. aa./a.a.
+./aa./a.a/ aa./a.a
+./aa./a..a aa./a..a
+./aa./a... aa./a...
+./aa./a../ aa./a..
+./aa./a./a aa./a./a
+./aa./a./. aa./a.
+./aa./a.// aa./a.
+./aa./a/aa aa./a/aa
+./aa./a/a. aa./a/a.
+./aa./a/a/ aa./a/a
+./aa./a/.a aa./a/.a
+./aa./a/.. aa.
+./aa./a/./ aa./a
+./aa./a//a aa./a/a
+./aa./a//. aa./a
+./aa./a/// aa./a
+./aa./.aaa aa./.aaa
+./aa./.aa. aa./.aa.
+./aa./.aa/ aa./.aa
+./aa./.a.a aa./.a.a
+./aa./.a.. aa./.a..
+./aa./.a./ aa./.a.
+./aa./.a/a aa./.a/a
+./aa./.a/. aa./.a
+./aa./.a// aa./.a
+./aa./..aa aa./..aa
+./aa./..a. aa./..a.
+./aa./..a/ aa./..a
+./aa./...a aa./...a
+./aa./.... aa./....
+./aa./.../ aa./...
+./aa./../a a
+./aa./../. .
+./aa./..// .
+./aa././aa aa./aa
+./aa././a. aa./a.
+./aa././a/ aa./a
+./aa././.a aa./.a
+./aa././.. .
+./aa./././ aa.
+./aa././/a aa./a
+./aa././/. aa.
+./aa././// aa.
+./aa.//aaa aa./aaa
+./aa.//aa. aa./aa.
+./aa.//aa/ aa./aa
+./aa.//a.a aa./a.a
+./aa.//a.. aa./a..
+./aa.//a./ aa./a.
+./aa.//a/a aa./a/a
+./aa.//a/. aa./a
+./aa.//a// aa./a
+./aa.//.aa aa./.aa
+./aa.//.a. aa./.a.
+./aa.//.a/ aa./.a
+./aa.//..a aa./..a
+./aa.//... aa./...
+./aa.//../ .
+./aa.//./a aa./a
+./aa.//./. aa.
+./aa.//.// aa.
+./aa.///aa aa./aa
+./aa.///a. aa./a.
+./aa.///a/ aa./a
+./aa.///.a aa./.a
+./aa.///.. .
+./aa.///./ aa.
+./aa.////a aa./a
+./aa.////. aa.
+./aa.///// aa.
+./aa/aaaaa aa/aaaaa
+./aa/aaaa. aa/aaaa.
+./aa/aaaa/ aa/aaaa
+./aa/aaa.a aa/aaa.a
+./aa/aaa.. aa/aaa..
+./aa/aaa./ aa/aaa.
+./aa/aaa/a aa/aaa/a
+./aa/aaa/. aa/aaa
+./aa/aaa// aa/aaa
+./aa/aa.aa aa/aa.aa
+./aa/aa.a. aa/aa.a.
+./aa/aa.a/ aa/aa.a
+./aa/aa..a aa/aa..a
+./aa/aa... aa/aa...
+./aa/aa../ aa/aa..
+./aa/aa./a aa/aa./a
+./aa/aa./. aa/aa.
+./aa/aa.// aa/aa.
+./aa/aa/aa aa/aa/aa
+./aa/aa/a. aa/aa/a.
+./aa/aa/a/ aa/aa/a
+./aa/aa/.a aa/aa/.a
+./aa/aa/.. aa
+./aa/aa/./ aa/aa
+./aa/aa//a aa/aa/a
+./aa/aa//. aa/aa
+./aa/aa/// aa/aa
+./aa/a.aaa aa/a.aaa
+./aa/a.aa. aa/a.aa.
+./aa/a.aa/ aa/a.aa
+./aa/a.a.a aa/a.a.a
+./aa/a.a.. aa/a.a..
+./aa/a.a./ aa/a.a.
+./aa/a.a/a aa/a.a/a
+./aa/a.a/. aa/a.a
+./aa/a.a// aa/a.a
+./aa/a..aa aa/a..aa
+./aa/a..a. aa/a..a.
+./aa/a..a/ aa/a..a
+./aa/a...a aa/a...a
+./aa/a.... aa/a....
+./aa/a.../ aa/a...
+./aa/a../a aa/a../a
+./aa/a../. aa/a..
+./aa/a..// aa/a..
+./aa/a./aa aa/a./aa
+./aa/a./a. aa/a./a.
+./aa/a./a/ aa/a./a
+./aa/a./.a aa/a./.a
+./aa/a./.. aa
+./aa/a././ aa/a.
+./aa/a.//a aa/a./a
+./aa/a.//. aa/a.
+./aa/a./// aa/a.
+./aa/a/aaa aa/a/aaa
+./aa/a/aa. aa/a/aa.
+./aa/a/aa/ aa/a/aa
+./aa/a/a.a aa/a/a.a
+./aa/a/a.. aa/a/a..
+./aa/a/a./ aa/a/a.
+./aa/a/a/a aa/a/a/a
+./aa/a/a/. aa/a/a
+./aa/a/a// aa/a/a
+./aa/a/.aa aa/a/.aa
+./aa/a/.a. aa/a/.a.
+./aa/a/.a/ aa/a/.a
+./aa/a/..a aa/a/..a
+./aa/a/... aa/a/...
+./aa/a/../ aa
+./aa/a/./a aa/a/a
+./aa/a/./. aa/a
+./aa/a/.// aa/a
+./aa/a//aa aa/a/aa
+./aa/a//a. aa/a/a.
+./aa/a//a/ aa/a/a
+./aa/a//.a aa/a/.a
+./aa/a//.. aa
+./aa/a//./ aa/a
+./aa/a///a aa/a/a
+./aa/a///. aa/a
+./aa/a//// aa/a
+./aa/.aaaa aa/.aaaa
+./aa/.aaa. aa/.aaa.
+./aa/.aaa/ aa/.aaa
+./aa/.aa.a aa/.aa.a
+./aa/.aa.. aa/.aa..
+./aa/.aa./ aa/.aa.
+./aa/.aa/a aa/.aa/a
+./aa/.aa/. aa/.aa
+./aa/.aa// aa/.aa
+./aa/.a.aa aa/.a.aa
+./aa/.a.a. aa/.a.a.
+./aa/.a.a/ aa/.a.a
+./aa/.a..a aa/.a..a
+./aa/.a... aa/.a...
+./aa/.a../ aa/.a..
+./aa/.a./a aa/.a./a
+./aa/.a./. aa/.a.
+./aa/.a.// aa/.a.
+./aa/.a/aa aa/.a/aa
+./aa/.a/a. aa/.a/a.
+./aa/.a/a/ aa/.a/a
+./aa/.a/.a aa/.a/.a
+./aa/.a/.. aa
+./aa/.a/./ aa/.a
+./aa/.a//a aa/.a/a
+./aa/.a//. aa/.a
+./aa/.a/// aa/.a
+./aa/..aaa aa/..aaa
+./aa/..aa. aa/..aa.
+./aa/..aa/ aa/..aa
+./aa/..a.a aa/..a.a
+./aa/..a.. aa/..a..
+./aa/..a./ aa/..a.
+./aa/..a/a aa/..a/a
+./aa/..a/. aa/..a
+./aa/..a// aa/..a
+./aa/...aa aa/...aa
+./aa/...a. aa/...a.
+./aa/...a/ aa/...a
+./aa/....a aa/....a
+./aa/..... aa/.....
+./aa/..../ aa/....
+./aa/.../a aa/.../a
+./aa/.../. aa/...
+./aa/...// aa/...
+./aa/../aa aa
+./aa/../a. a.
+./aa/../a/ a
+./aa/../.a .a
+./aa/../.. ..
+./aa/.././ .
+./aa/..//a a
+./aa/..//. .
+./aa/../// .
+./aa/./aaa aa/aaa
+./aa/./aa. aa/aa.
+./aa/./aa/ aa/aa
+./aa/./a.a aa/a.a
+./aa/./a.. aa/a..
+./aa/./a./ aa/a.
+./aa/./a/a aa/a/a
+./aa/./a/. aa/a
+./aa/./a// aa/a
+./aa/./.aa aa/.aa
+./aa/./.a. aa/.a.
+./aa/./.a/ aa/.a
+./aa/./..a aa/..a
+./aa/./... aa/...
+./aa/./../ .
+./aa/././a aa/a
+./aa/././. aa
+./aa/./.// aa
+./aa/.//aa aa/aa
+./aa/.//a. aa/a.
+./aa/.//a/ aa/a
+./aa/.//.a aa/.a
+./aa/.//.. .
+./aa/.//./ aa
+./aa/.///a aa/a
+./aa/.///. aa
+./aa/.//// aa
+./aa//aaaa aa/aaaa
+./aa//aaa. aa/aaa.
+./aa//aaa/ aa/aaa
+./aa//aa.a aa/aa.a
+./aa//aa.. aa/aa..
+./aa//aa./ aa/aa.
+./aa//aa/a aa/aa/a
+./aa//aa/. aa/aa
+./aa//aa// aa/aa
+./aa//a.aa aa/a.aa
+./aa//a.a. aa/a.a.
+./aa//a.a/ aa/a.a
+./aa//a..a aa/a..a
+./aa//a... aa/a...
+./aa//a../ aa/a..
+./aa//a./a aa/a./a
+./aa//a./. aa/a.
+./aa//a.// aa/a.
+./aa//a/aa aa/a/aa
+./aa//a/a. aa/a/a.
+./aa//a/a/ aa/a/a
+./aa//a/.a aa/a/.a
+./aa//a/.. aa
+./aa//a/./ aa/a
+./aa//a//a aa/a/a
+./aa//a//. aa/a
+./aa//a/// aa/a
+./aa//.aaa aa/.aaa
+./aa//.aa. aa/.aa.
+./aa//.aa/ aa/.aa
+./aa//.a.a aa/.a.a
+./aa//.a.. aa/.a..
+./aa//.a./ aa/.a.
+./aa//.a/a aa/.a/a
+./aa//.a/. aa/.a
+./aa//.a// aa/.a
+./aa//..aa aa/..aa
+./aa//..a. aa/..a.
+./aa//..a/ aa/..a
+./aa//...a aa/...a
+./aa//.... aa/....
+./aa//.../ aa/...
+./aa//../a a
+./aa//../. .
+./aa//..// .
+./aa//./aa aa/aa
+./aa//./a. aa/a.
+./aa//./a/ aa/a
+./aa//./.a aa/.a
+./aa//./.. .
+./aa//././ aa
+./aa//.//a aa/a
+./aa//.//. aa
+./aa//./// aa
+./aa///aaa aa/aaa
+./aa///aa. aa/aa.
+./aa///aa/ aa/aa
+./aa///a.a aa/a.a
+./aa///a.. aa/a..
+./aa///a./ aa/a.
+./aa///a/a aa/a/a
+./aa///a/. aa/a
+./aa///a// aa/a
+./aa///.aa aa/.aa
+./aa///.a. aa/.a.
+./aa///.a/ aa/.a
+./aa///..a aa/..a
+./aa///... aa/...
+./aa///../ .
+./aa///./a aa/a
+./aa///./. aa
+./aa///.// aa
+./aa////aa aa/aa
+./aa////a. aa/a.
+./aa////a/ aa/a
+./aa////.a aa/.a
+./aa////.. .
+./aa////./ aa
+./aa/////a aa/a
+./aa/////. aa
+./aa////// aa
+./a.aaaaaa a.aaaaaa
+./a.aaaaa. a.aaaaa.
+./a.aaaaa/ a.aaaaa
+./a.aaaa.a a.aaaa.a
+./a.aaaa.. a.aaaa..
+./a.aaaa./ a.aaaa.
+./a.aaaa/a a.aaaa/a
+./a.aaaa/. a.aaaa
+./a.aaaa// a.aaaa
+./a.aaa.aa a.aaa.aa
+./a.aaa.a. a.aaa.a.
+./a.aaa.a/ a.aaa.a
+./a.aaa..a a.aaa..a
+./a.aaa... a.aaa...
+./a.aaa../ a.aaa..
+./a.aaa./a a.aaa./a
+./a.aaa./. a.aaa.
+./a.aaa.// a.aaa.
+./a.aaa/aa a.aaa/aa
+./a.aaa/a. a.aaa/a.
+./a.aaa/a/ a.aaa/a
+./a.aaa/.a a.aaa/.a
+./a.aaa/.. .
+./a.aaa/./ a.aaa
+./a.aaa//a a.aaa/a
+./a.aaa//. a.aaa
+./a.aaa/// a.aaa
+./a.aa.aaa a.aa.aaa
+./a.aa.aa. a.aa.aa.
+./a.aa.aa/ a.aa.aa
+./a.aa.a.a a.aa.a.a
+./a.aa.a.. a.aa.a..
+./a.aa.a./ a.aa.a.
+./a.aa.a/a a.aa.a/a
+./a.aa.a/. a.aa.a
+./a.aa.a// a.aa.a
+./a.aa..aa a.aa..aa
+./a.aa..a. a.aa..a.
+./a.aa..a/ a.aa..a
+./a.aa...a a.aa...a
+./a.aa.... a.aa....
+./a.aa.../ a.aa...
+./a.aa../a a.aa../a
+./a.aa../. a.aa..
+./a.aa..// a.aa..
+./a.aa./aa a.aa./aa
+./a.aa./a. a.aa./a.
+./a.aa./a/ a.aa./a
+./a.aa./.a a.aa./.a
+./a.aa./.. .
+./a.aa././ a.aa.
+./a.aa.//a a.aa./a
+./a.aa.//. a.aa.
+./a.aa./// a.aa.
+./a.aa/aaa a.aa/aaa
+./a.aa/aa. a.aa/aa.
+./a.aa/aa/ a.aa/aa
+./a.aa/a.a a.aa/a.a
+./a.aa/a.. a.aa/a..
+./a.aa/a./ a.aa/a.
+./a.aa/a/a a.aa/a/a
+./a.aa/a/. a.aa/a
+./a.aa/a// a.aa/a
+./a.aa/.aa a.aa/.aa
+./a.aa/.a. a.aa/.a.
+./a.aa/.a/ a.aa/.a
+./a.aa/..a a.aa/..a
+./a.aa/... a.aa/...
+./a.aa/../ .
+./a.aa/./a a.aa/a
+./a.aa/./. a.aa
+./a.aa/.// a.aa
+./a.aa//aa a.aa/aa
+./a.aa//a. a.aa/a.
+./a.aa//a/ a.aa/a
+./a.aa//.a a.aa/.a
+./a.aa//.. .
+./a.aa//./ a.aa
+./a.aa///a a.aa/a
+./a.aa///. a.aa
+./a.aa//// a.aa
+./a.a.aaaa a.a.aaaa
+./a.a.aaa. a.a.aaa.
+./a.a.aaa/ a.a.aaa
+./a.a.aa.a a.a.aa.a
+./a.a.aa.. a.a.aa..
+./a.a.aa./ a.a.aa.
+./a.a.aa/a a.a.aa/a
+./a.a.aa/. a.a.aa
+./a.a.aa// a.a.aa
+./a.a.a.aa a.a.a.aa
+./a.a.a.a. a.a.a.a.
+./a.a.a.a/ a.a.a.a
+./a.a.a..a a.a.a..a
+./a.a.a... a.a.a...
+./a.a.a../ a.a.a..
+./a.a.a./a a.a.a./a
+./a.a.a./. a.a.a.
+./a.a.a.// a.a.a.
+./a.a.a/aa a.a.a/aa
+./a.a.a/a. a.a.a/a.
+./a.a.a/a/ a.a.a/a
+./a.a.a/.a a.a.a/.a
+./a.a.a/.. .
+./a.a.a/./ a.a.a
+./a.a.a//a a.a.a/a
+./a.a.a//. a.a.a
+./a.a.a/// a.a.a
+./a.a..aaa a.a..aaa
+./a.a..aa. a.a..aa.
+./a.a..aa/ a.a..aa
+./a.a..a.a a.a..a.a
+./a.a..a.. a.a..a..
+./a.a..a./ a.a..a.
+./a.a..a/a a.a..a/a
+./a.a..a/. a.a..a
+./a.a..a// a.a..a
+./a.a...aa a.a...aa
+./a.a...a. a.a...a.
+./a.a...a/ a.a...a
+./a.a....a a.a....a
+./a.a..... a.a.....
+./a.a..../ a.a....
+./a.a.../a a.a.../a
+./a.a.../. a.a...
+./a.a...// a.a...
+./a.a../aa a.a../aa
+./a.a../a. a.a../a.
+./a.a../a/ a.a../a
+./a.a../.a a.a../.a
+./a.a../.. .
+./a.a.././ a.a..
+./a.a..//a a.a../a
+./a.a..//. a.a..
+./a.a../// a.a..
+./a.a./aaa a.a./aaa
+./a.a./aa. a.a./aa.
+./a.a./aa/ a.a./aa
+./a.a./a.a a.a./a.a
+./a.a./a.. a.a./a..
+./a.a./a./ a.a./a.
+./a.a./a/a a.a./a/a
+./a.a./a/. a.a./a
+./a.a./a// a.a./a
+./a.a./.aa a.a./.aa
+./a.a./.a. a.a./.a.
+./a.a./.a/ a.a./.a
+./a.a./..a a.a./..a
+./a.a./... a.a./...
+./a.a./../ .
+./a.a././a a.a./a
+./a.a././. a.a.
+./a.a./.// a.a.
+./a.a.//aa a.a./aa
+./a.a.//a. a.a./a.
+./a.a.//a/ a.a./a
+./a.a.//.a a.a./.a
+./a.a.//.. .
+./a.a.//./ a.a.
+./a.a.///a a.a./a
+./a.a.///. a.a.
+./a.a.//// a.a.
+./a.a/aaaa a.a/aaaa
+./a.a/aaa. a.a/aaa.
+./a.a/aaa/ a.a/aaa
+./a.a/aa.a a.a/aa.a
+./a.a/aa.. a.a/aa..
+./a.a/aa./ a.a/aa.
+./a.a/aa/a a.a/aa/a
+./a.a/aa/. a.a/aa
+./a.a/aa// a.a/aa
+./a.a/a.aa a.a/a.aa
+./a.a/a.a. a.a/a.a.
+./a.a/a.a/ a.a/a.a
+./a.a/a..a a.a/a..a
+./a.a/a... a.a/a...
+./a.a/a../ a.a/a..
+./a.a/a./a a.a/a./a
+./a.a/a./. a.a/a.
+./a.a/a.// a.a/a.
+./a.a/a/aa a.a/a/aa
+./a.a/a/a. a.a/a/a.
+./a.a/a/a/ a.a/a/a
+./a.a/a/.a a.a/a/.a
+./a.a/a/.. a.a
+./a.a/a/./ a.a/a
+./a.a/a//a a.a/a/a
+./a.a/a//. a.a/a
+./a.a/a/// a.a/a
+./a.a/.aaa a.a/.aaa
+./a.a/.aa. a.a/.aa.
+./a.a/.aa/ a.a/.aa
+./a.a/.a.a a.a/.a.a
+./a.a/.a.. a.a/.a..
+./a.a/.a./ a.a/.a.
+./a.a/.a/a a.a/.a/a
+./a.a/.a/. a.a/.a
+./a.a/.a// a.a/.a
+./a.a/..aa a.a/..aa
+./a.a/..a. a.a/..a.
+./a.a/..a/ a.a/..a
+./a.a/...a a.a/...a
+./a.a/.... a.a/....
+./a.a/.../ a.a/...
+./a.a/../a a
+./a.a/../. .
+./a.a/..// .
+./a.a/./aa a.a/aa
+./a.a/./a. a.a/a.
+./a.a/./a/ a.a/a
+./a.a/./.a a.a/.a
+./a.a/./.. .
+./a.a/././ a.a
+./a.a/.//a a.a/a
+./a.a/.//. a.a
+./a.a/./// a.a
+./a.a//aaa a.a/aaa
+./a.a//aa. a.a/aa.
+./a.a//aa/ a.a/aa
+./a.a//a.a a.a/a.a
+./a.a//a.. a.a/a..
+./a.a//a./ a.a/a.
+./a.a//a/a a.a/a/a
+./a.a//a/. a.a/a
+./a.a//a// a.a/a
+./a.a//.aa a.a/.aa
+./a.a//.a. a.a/.a.
+./a.a//.a/ a.a/.a
+./a.a//..a a.a/..a
+./a.a//... a.a/...
+./a.a//../ .
+./a.a//./a a.a/a
+./a.a//./. a.a
+./a.a//.// a.a
+./a.a///aa a.a/aa
+./a.a///a. a.a/a.
+./a.a///a/ a.a/a
+./a.a///.a a.a/.a
+./a.a///.. .
+./a.a///./ a.a
+./a.a////a a.a/a
+./a.a////. a.a
+./a.a///// a.a
+./a..aaaaa a..aaaaa
+./a..aaaa. a..aaaa.
+./a..aaaa/ a..aaaa
+./a..aaa.a a..aaa.a
+./a..aaa.. a..aaa..
+./a..aaa./ a..aaa.
+./a..aaa/a a..aaa/a
+./a..aaa/. a..aaa
+./a..aaa// a..aaa
+./a..aa.aa a..aa.aa
+./a..aa.a. a..aa.a.
+./a..aa.a/ a..aa.a
+./a..aa..a a..aa..a
+./a..aa... a..aa...
+./a..aa../ a..aa..
+./a..aa./a a..aa./a
+./a..aa./. a..aa.
+./a..aa.// a..aa.
+./a..aa/aa a..aa/aa
+./a..aa/a. a..aa/a.
+./a..aa/a/ a..aa/a
+./a..aa/.a a..aa/.a
+./a..aa/.. .
+./a..aa/./ a..aa
+./a..aa//a a..aa/a
+./a..aa//. a..aa
+./a..aa/// a..aa
+./a..a.aaa a..a.aaa
+./a..a.aa. a..a.aa.
+./a..a.aa/ a..a.aa
+./a..a.a.a a..a.a.a
+./a..a.a.. a..a.a..
+./a..a.a./ a..a.a.
+./a..a.a/a a..a.a/a
+./a..a.a/. a..a.a
+./a..a.a// a..a.a
+./a..a..aa a..a..aa
+./a..a..a. a..a..a.
+./a..a..a/ a..a..a
+./a..a...a a..a...a
+./a..a.... a..a....
+./a..a.../ a..a...
+./a..a../a a..a../a
+./a..a../. a..a..
+./a..a..// a..a..
+./a..a./aa a..a./aa
+./a..a./a. a..a./a.
+./a..a./a/ a..a./a
+./a..a./.a a..a./.a
+./a..a./.. .
+./a..a././ a..a.
+./a..a.//a a..a./a
+./a..a.//. a..a.
+./a..a./// a..a.
+./a..a/aaa a..a/aaa
+./a..a/aa. a..a/aa.
+./a..a/aa/ a..a/aa
+./a..a/a.a a..a/a.a
+./a..a/a.. a..a/a..
+./a..a/a./ a..a/a.
+./a..a/a/a a..a/a/a
+./a..a/a/. a..a/a
+./a..a/a// a..a/a
+./a..a/.aa a..a/.aa
+./a..a/.a. a..a/.a.
+./a..a/.a/ a..a/.a
+./a..a/..a a..a/..a
+./a..a/... a..a/...
+./a..a/../ .
+./a..a/./a a..a/a
+./a..a/./. a..a
+./a..a/.// a..a
+./a..a//aa a..a/aa
+./a..a//a. a..a/a.
+./a..a//a/ a..a/a
+./a..a//.a a..a/.a
+./a..a//.. .
+./a..a//./ a..a
+./a..a///a a..a/a
+./a..a///. a..a
+./a..a//// a..a
+./a...aaaa a...aaaa
+./a...aaa. a...aaa.
+./a...aaa/ a...aaa
+./a...aa.a a...aa.a
+./a...aa.. a...aa..
+./a...aa./ a...aa.
+./a...aa/a a...aa/a
+./a...aa/. a...aa
+./a...aa// a...aa
+./a...a.aa a...a.aa
+./a...a.a. a...a.a.
+./a...a.a/ a...a.a
+./a...a..a a...a..a
+./a...a... a...a...
+./a...a../ a...a..
+./a...a./a a...a./a
+./a...a./. a...a.
+./a...a.// a...a.
+./a...a/aa a...a/aa
+./a...a/a. a...a/a.
+./a...a/a/ a...a/a
+./a...a/.a a...a/.a
+./a...a/.. .
+./a...a/./ a...a
+./a...a//a a...a/a
+./a...a//. a...a
+./a...a/// a...a
+./a....aaa a....aaa
+./a....aa. a....aa.
+./a....aa/ a....aa
+./a....a.a a....a.a
+./a....a.. a....a..
+./a....a./ a....a.
+./a....a/a a....a/a
+./a....a/. a....a
+./a....a// a....a
+./a.....aa a.....aa
+./a.....a. a.....a.
+./a.....a/ a.....a
+./a......a a......a
+./a....... a.......
+./a....../ a......
+./a...../a a...../a
+./a...../. a.....
+./a.....// a.....
+./a..../aa a..../aa
+./a..../a. a..../a.
+./a..../a/ a..../a
+./a..../.a a..../.a
+./a..../.. .
+./a...././ a....
+./a....//a a..../a
+./a....//. a....
+./a..../// a....
+./a.../aaa a.../aaa
+./a.../aa. a.../aa.
+./a.../aa/ a.../aa
+./a.../a.a a.../a.a
+./a.../a.. a.../a..
+./a.../a./ a.../a.
+./a.../a/a a.../a/a
+./a.../a/. a.../a
+./a.../a// a.../a
+./a.../.aa a.../.aa
+./a.../.a. a.../.a.
+./a.../.a/ a.../.a
+./a.../..a a.../..a
+./a.../... a.../...
+./a.../../ .
+./a..././a a.../a
+./a..././. a...
+./a.../.// a...
+./a...//aa a.../aa
+./a...//a. a.../a.
+./a...//a/ a.../a
+./a...//.a a.../.a
+./a...//.. .
+./a...//./ a...
+./a...///a a.../a
+./a...///. a...
+./a...//// a...
+./a../aaaa a../aaaa
+./a../aaa. a../aaa.
+./a../aaa/ a../aaa
+./a../aa.a a../aa.a
+./a../aa.. a../aa..
+./a../aa./ a../aa.
+./a../aa/a a../aa/a
+./a../aa/. a../aa
+./a../aa// a../aa
+./a../a.aa a../a.aa
+./a../a.a. a../a.a.
+./a../a.a/ a../a.a
+./a../a..a a../a..a
+./a../a... a../a...
+./a../a../ a../a..
+./a../a./a a../a./a
+./a../a./. a../a.
+./a../a.// a../a.
+./a../a/aa a../a/aa
+./a../a/a. a../a/a.
+./a../a/a/ a../a/a
+./a../a/.a a../a/.a
+./a../a/.. a..
+./a../a/./ a../a
+./a../a//a a../a/a
+./a../a//. a../a
+./a../a/// a../a
+./a../.aaa a../.aaa
+./a../.aa. a../.aa.
+./a../.aa/ a../.aa
+./a../.a.a a../.a.a
+./a../.a.. a../.a..
+./a../.a./ a../.a.
+./a../.a/a a../.a/a
+./a../.a/. a../.a
+./a../.a// a../.a
+./a../..aa a../..aa
+./a../..a. a../..a.
+./a../..a/ a../..a
+./a../...a a../...a
+./a../.... a../....
+./a../.../ a../...
+./a../../a a
+./a../../. .
+./a../..// .
+./a.././aa a../aa
+./a.././a. a../a.
+./a.././a/ a../a
+./a.././.a a../.a
+./a.././.. .
+./a../././ a..
+./a.././/a a../a
+./a.././/. a..
+./a.././// a..
+./a..//aaa a../aaa
+./a..//aa. a../aa.
+./a..//aa/ a../aa
+./a..//a.a a../a.a
+./a..//a.. a../a..
+./a..//a./ a../a.
+./a..//a/a a../a/a
+./a..//a/. a../a
+./a..//a// a../a
+./a..//.aa a../.aa
+./a..//.a. a../.a.
+./a..//.a/ a../.a
+./a..//..a a../..a
+./a..//... a../...
+./a..//../ .
+./a..//./a a../a
+./a..//./. a..
+./a..//.// a..
+./a..///aa a../aa
+./a..///a. a../a.
+./a..///a/ a../a
+./a..///.a a../.a
+./a..///.. .
+./a..///./ a..
+./a..////a a../a
+./a..////. a..
+./a..///// a..
+./a./aaaaa a./aaaaa
+./a./aaaa. a./aaaa.
+./a./aaaa/ a./aaaa
+./a./aaa.a a./aaa.a
+./a./aaa.. a./aaa..
+./a./aaa./ a./aaa.
+./a./aaa/a a./aaa/a
+./a./aaa/. a./aaa
+./a./aaa// a./aaa
+./a./aa.aa a./aa.aa
+./a./aa.a. a./aa.a.
+./a./aa.a/ a./aa.a
+./a./aa..a a./aa..a
+./a./aa... a./aa...
+./a./aa../ a./aa..
+./a./aa./a a./aa./a
+./a./aa./. a./aa.
+./a./aa.// a./aa.
+./a./aa/aa a./aa/aa
+./a./aa/a. a./aa/a.
+./a./aa/a/ a./aa/a
+./a./aa/.a a./aa/.a
+./a./aa/.. a.
+./a./aa/./ a./aa
+./a./aa//a a./aa/a
+./a./aa//. a./aa
+./a./aa/// a./aa
+./a./a.aaa a./a.aaa
+./a./a.aa. a./a.aa.
+./a./a.aa/ a./a.aa
+./a./a.a.a a./a.a.a
+./a./a.a.. a./a.a..
+./a./a.a./ a./a.a.
+./a./a.a/a a./a.a/a
+./a./a.a/. a./a.a
+./a./a.a// a./a.a
+./a./a..aa a./a..aa
+./a./a..a. a./a..a.
+./a./a..a/ a./a..a
+./a./a...a a./a...a
+./a./a.... a./a....
+./a./a.../ a./a...
+./a./a../a a./a../a
+./a./a../. a./a..
+./a./a..// a./a..
+./a./a./aa a./a./aa
+./a./a./a. a./a./a.
+./a./a./a/ a./a./a
+./a./a./.a a./a./.a
+./a./a./.. a.
+./a./a././ a./a.
+./a./a.//a a./a./a
+./a./a.//. a./a.
+./a./a./// a./a.
+./a./a/aaa a./a/aaa
+./a./a/aa. a./a/aa.
+./a./a/aa/ a./a/aa
+./a./a/a.a a./a/a.a
+./a./a/a.. a./a/a..
+./a./a/a./ a./a/a.
+./a./a/a/a a./a/a/a
+./a./a/a/. a./a/a
+./a./a/a// a./a/a
+./a./a/.aa a./a/.aa
+./a./a/.a. a./a/.a.
+./a./a/.a/ a./a/.a
+./a./a/..a a./a/..a
+./a./a/... a./a/...
+./a./a/../ a.
+./a./a/./a a./a/a
+./a./a/./. a./a
+./a./a/.// a./a
+./a./a//aa a./a/aa
+./a./a//a. a./a/a.
+./a./a//a/ a./a/a
+./a./a//.a a./a/.a
+./a./a//.. a.
+./a./a//./ a./a
+./a./a///a a./a/a
+./a./a///. a./a
+./a./a//// a./a
+./a./.aaaa a./.aaaa
+./a./.aaa. a./.aaa.
+./a./.aaa/ a./.aaa
+./a./.aa.a a./.aa.a
+./a./.aa.. a./.aa..
+./a./.aa./ a./.aa.
+./a./.aa/a a./.aa/a
+./a./.aa/. a./.aa
+./a./.aa// a./.aa
+./a./.a.aa a./.a.aa
+./a./.a.a. a./.a.a.
+./a./.a.a/ a./.a.a
+./a./.a..a a./.a..a
+./a./.a... a./.a...
+./a./.a../ a./.a..
+./a./.a./a a./.a./a
+./a./.a./. a./.a.
+./a./.a.// a./.a.
+./a./.a/aa a./.a/aa
+./a./.a/a. a./.a/a.
+./a./.a/a/ a./.a/a
+./a./.a/.a a./.a/.a
+./a./.a/.. a.
+./a./.a/./ a./.a
+./a./.a//a a./.a/a
+./a./.a//. a./.a
+./a./.a/// a./.a
+./a./..aaa a./..aaa
+./a./..aa. a./..aa.
+./a./..aa/ a./..aa
+./a./..a.a a./..a.a
+./a./..a.. a./..a..
+./a./..a./ a./..a.
+./a./..a/a a./..a/a
+./a./..a/. a./..a
+./a./..a// a./..a
+./a./...aa a./...aa
+./a./...a. a./...a.
+./a./...a/ a./...a
+./a./....a a./....a
+./a./..... a./.....
+./a./..../ a./....
+./a./.../a a./.../a
+./a./.../. a./...
+./a./...// a./...
+./a./../aa aa
+./a./../a. a.
+./a./../a/ a
+./a./../.a .a
+./a./../.. ..
+./a./.././ .
+./a./..//a a
+./a./..//. .
+./a./../// .
+./a././aaa a./aaa
+./a././aa. a./aa.
+./a././aa/ a./aa
+./a././a.a a./a.a
+./a././a.. a./a..
+./a././a./ a./a.
+./a././a/a a./a/a
+./a././a/. a./a
+./a././a// a./a
+./a././.aa a./.aa
+./a././.a. a./.a.
+./a././.a/ a./.a
+./a././..a a./..a
+./a././... a./...
+./a././../ .
+./a./././a a./a
+./a./././. a.
+./a././.// a.
+./a././/aa a./aa
+./a././/a. a./a.
+./a././/a/ a./a
+./a././/.a a./.a
+./a././/.. .
+./a././/./ a.
+./a././//a a./a
+./a././//. a.
+./a././/// a.
+./a.//aaaa a./aaaa
+./a.//aaa. a./aaa.
+./a.//aaa/ a./aaa
+./a.//aa.a a./aa.a
+./a.//aa.. a./aa..
+./a.//aa./ a./aa.
+./a.//aa/a a./aa/a
+./a.//aa/. a./aa
+./a.//aa// a./aa
+./a.//a.aa a./a.aa
+./a.//a.a. a./a.a.
+./a.//a.a/ a./a.a
+./a.//a..a a./a..a
+./a.//a... a./a...
+./a.//a../ a./a..
+./a.//a./a a./a./a
+./a.//a./. a./a.
+./a.//a.// a./a.
+./a.//a/aa a./a/aa
+./a.//a/a. a./a/a.
+./a.//a/a/ a./a/a
+./a.//a/.a a./a/.a
+./a.//a/.. a.
+./a.//a/./ a./a
+./a.//a//a a./a/a
+./a.//a//. a./a
+./a.//a/// a./a
+./a.//.aaa a./.aaa
+./a.//.aa. a./.aa.
+./a.//.aa/ a./.aa
+./a.//.a.a a./.a.a
+./a.//.a.. a./.a..
+./a.//.a./ a./.a.
+./a.//.a/a a./.a/a
+./a.//.a/. a./.a
+./a.//.a// a./.a
+./a.//..aa a./..aa
+./a.//..a. a./..a.
+./a.//..a/ a./..a
+./a.//...a a./...a
+./a.//.... a./....
+./a.//.../ a./...
+./a.//../a a
+./a.//../. .
+./a.//..// .
+./a.//./aa a./aa
+./a.//./a. a./a.
+./a.//./a/ a./a
+./a.//./.a a./.a
+./a.//./.. .
+./a.//././ a.
+./a.//.//a a./a
+./a.//.//. a.
+./a.//./// a.
+./a.///aaa a./aaa
+./a.///aa. a./aa.
+./a.///aa/ a./aa
+./a.///a.a a./a.a
+./a.///a.. a./a..
+./a.///a./ a./a.
+./a.///a/a a./a/a
+./a.///a/. a./a
+./a.///a// a./a
+./a.///.aa a./.aa
+./a.///.a. a./.a.
+./a.///.a/ a./.a
+./a.///..a a./..a
+./a.///... a./...
+./a.///../ .
+./a.///./a a./a
+./a.///./. a.
+./a.///.// a.
+./a.////aa a./aa
+./a.////a. a./a.
+./a.////a/ a./a
+./a.////.a a./.a
+./a.////.. .
+./a.////./ a.
+./a./////a a./a
+./a./////. a.
+./a.////// a.
+./a/aaaaaa a/aaaaaa
+./a/aaaaa. a/aaaaa.
+./a/aaaaa/ a/aaaaa
+./a/aaaa.a a/aaaa.a
+./a/aaaa.. a/aaaa..
+./a/aaaa./ a/aaaa.
+./a/aaaa/a a/aaaa/a
+./a/aaaa/. a/aaaa
+./a/aaaa// a/aaaa
+./a/aaa.aa a/aaa.aa
+./a/aaa.a. a/aaa.a.
+./a/aaa.a/ a/aaa.a
+./a/aaa..a a/aaa..a
+./a/aaa... a/aaa...
+./a/aaa../ a/aaa..
+./a/aaa./a a/aaa./a
+./a/aaa./. a/aaa.
+./a/aaa.// a/aaa.
+./a/aaa/aa a/aaa/aa
+./a/aaa/a. a/aaa/a.
+./a/aaa/a/ a/aaa/a
+./a/aaa/.a a/aaa/.a
+./a/aaa/.. a
+./a/aaa/./ a/aaa
+./a/aaa//a a/aaa/a
+./a/aaa//. a/aaa
+./a/aaa/// a/aaa
+./a/aa.aaa a/aa.aaa
+./a/aa.aa. a/aa.aa.
+./a/aa.aa/ a/aa.aa
+./a/aa.a.a a/aa.a.a
+./a/aa.a.. a/aa.a..
+./a/aa.a./ a/aa.a.
+./a/aa.a/a a/aa.a/a
+./a/aa.a/. a/aa.a
+./a/aa.a// a/aa.a
+./a/aa..aa a/aa..aa
+./a/aa..a. a/aa..a.
+./a/aa..a/ a/aa..a
+./a/aa...a a/aa...a
+./a/aa.... a/aa....
+./a/aa.../ a/aa...
+./a/aa../a a/aa../a
+./a/aa../. a/aa..
+./a/aa..// a/aa..
+./a/aa./aa a/aa./aa
+./a/aa./a. a/aa./a.
+./a/aa./a/ a/aa./a
+./a/aa./.a a/aa./.a
+./a/aa./.. a
+./a/aa././ a/aa.
+./a/aa.//a a/aa./a
+./a/aa.//. a/aa.
+./a/aa./// a/aa.
+./a/aa/aaa a/aa/aaa
+./a/aa/aa. a/aa/aa.
+./a/aa/aa/ a/aa/aa
+./a/aa/a.a a/aa/a.a
+./a/aa/a.. a/aa/a..
+./a/aa/a./ a/aa/a.
+./a/aa/a/a a/aa/a/a
+./a/aa/a/. a/aa/a
+./a/aa/a// a/aa/a
+./a/aa/.aa a/aa/.aa
+./a/aa/.a. a/aa/.a.
+./a/aa/.a/ a/aa/.a
+./a/aa/..a a/aa/..a
+./a/aa/... a/aa/...
+./a/aa/../ a
+./a/aa/./a a/aa/a
+./a/aa/./. a/aa
+./a/aa/.// a/aa
+./a/aa//aa a/aa/aa
+./a/aa//a. a/aa/a.
+./a/aa//a/ a/aa/a
+./a/aa//.a a/aa/.a
+./a/aa//.. a
+./a/aa//./ a/aa
+./a/aa///a a/aa/a
+./a/aa///. a/aa
+./a/aa//// a/aa
+./a/a.aaaa a/a.aaaa
+./a/a.aaa. a/a.aaa.
+./a/a.aaa/ a/a.aaa
+./a/a.aa.a a/a.aa.a
+./a/a.aa.. a/a.aa..
+./a/a.aa./ a/a.aa.
+./a/a.aa/a a/a.aa/a
+./a/a.aa/. a/a.aa
+./a/a.aa// a/a.aa
+./a/a.a.aa a/a.a.aa
+./a/a.a.a. a/a.a.a.
+./a/a.a.a/ a/a.a.a
+./a/a.a..a a/a.a..a
+./a/a.a... a/a.a...
+./a/a.a../ a/a.a..
+./a/a.a./a a/a.a./a
+./a/a.a./. a/a.a.
+./a/a.a.// a/a.a.
+./a/a.a/aa a/a.a/aa
+./a/a.a/a. a/a.a/a.
+./a/a.a/a/ a/a.a/a
+./a/a.a/.a a/a.a/.a
+./a/a.a/.. a
+./a/a.a/./ a/a.a
+./a/a.a//a a/a.a/a
+./a/a.a//. a/a.a
+./a/a.a/// a/a.a
+./a/a..aaa a/a..aaa
+./a/a..aa. a/a..aa.
+./a/a..aa/ a/a..aa
+./a/a..a.a a/a..a.a
+./a/a..a.. a/a..a..
+./a/a..a./ a/a..a.
+./a/a..a/a a/a..a/a
+./a/a..a/. a/a..a
+./a/a..a// a/a..a
+./a/a...aa a/a...aa
+./a/a...a. a/a...a.
+./a/a...a/ a/a...a
+./a/a....a a/a....a
+./a/a..... a/a.....
+./a/a..../ a/a....
+./a/a.../a a/a.../a
+./a/a.../. a/a...
+./a/a...// a/a...
+./a/a../aa a/a../aa
+./a/a../a. a/a../a.
+./a/a../a/ a/a../a
+./a/a../.a a/a../.a
+./a/a../.. a
+./a/a.././ a/a..
+./a/a..//a a/a../a
+./a/a..//. a/a..
+./a/a../// a/a..
+./a/a./aaa a/a./aaa
+./a/a./aa. a/a./aa.
+./a/a./aa/ a/a./aa
+./a/a./a.a a/a./a.a
+./a/a./a.. a/a./a..
+./a/a./a./ a/a./a.
+./a/a./a/a a/a./a/a
+./a/a./a/. a/a./a
+./a/a./a// a/a./a
+./a/a./.aa a/a./.aa
+./a/a./.a. a/a./.a.
+./a/a./.a/ a/a./.a
+./a/a./..a a/a./..a
+./a/a./... a/a./...
+./a/a./../ a
+./a/a././a a/a./a
+./a/a././. a/a.
+./a/a./.// a/a.
+./a/a.//aa a/a./aa
+./a/a.//a. a/a./a.
+./a/a.//a/ a/a./a
+./a/a.//.a a/a./.a
+./a/a.//.. a
+./a/a.//./ a/a.
+./a/a.///a a/a./a
+./a/a.///. a/a.
+./a/a.//// a/a.
+./a/a/aaaa a/a/aaaa
+./a/a/aaa. a/a/aaa.
+./a/a/aaa/ a/a/aaa
+./a/a/aa.a a/a/aa.a
+./a/a/aa.. a/a/aa..
+./a/a/aa./ a/a/aa.
+./a/a/aa/a a/a/aa/a
+./a/a/aa/. a/a/aa
+./a/a/aa// a/a/aa
+./a/a/a.aa a/a/a.aa
+./a/a/a.a. a/a/a.a.
+./a/a/a.a/ a/a/a.a
+./a/a/a..a a/a/a..a
+./a/a/a... a/a/a...
+./a/a/a../ a/a/a..
+./a/a/a./a a/a/a./a
+./a/a/a./. a/a/a.
+./a/a/a.// a/a/a.
+./a/a/a/aa a/a/a/aa
+./a/a/a/a. a/a/a/a.
+./a/a/a/a/ a/a/a/a
+./a/a/a/.a a/a/a/.a
+./a/a/a/.. a/a
+./a/a/a/./ a/a/a
+./a/a/a//a a/a/a/a
+./a/a/a//. a/a/a
+./a/a/a/// a/a/a
+./a/a/.aaa a/a/.aaa
+./a/a/.aa. a/a/.aa.
+./a/a/.aa/ a/a/.aa
+./a/a/.a.a a/a/.a.a
+./a/a/.a.. a/a/.a..
+./a/a/.a./ a/a/.a.
+./a/a/.a/a a/a/.a/a
+./a/a/.a/. a/a/.a
+./a/a/.a// a/a/.a
+./a/a/..aa a/a/..aa
+./a/a/..a. a/a/..a.
+./a/a/..a/ a/a/..a
+./a/a/...a a/a/...a
+./a/a/.... a/a/....
+./a/a/.../ a/a/...
+./a/a/../a a/a
+./a/a/../. a
+./a/a/..// a
+./a/a/./aa a/a/aa
+./a/a/./a. a/a/a.
+./a/a/./a/ a/a/a
+./a/a/./.a a/a/.a
+./a/a/./.. a
+./a/a/././ a/a
+./a/a/.//a a/a/a
+./a/a/.//. a/a
+./a/a/./// a/a
+./a/a//aaa a/a/aaa
+./a/a//aa. a/a/aa.
+./a/a//aa/ a/a/aa
+./a/a//a.a a/a/a.a
+./a/a//a.. a/a/a..
+./a/a//a./ a/a/a.
+./a/a//a/a a/a/a/a
+./a/a//a/. a/a/a
+./a/a//a// a/a/a
+./a/a//.aa a/a/.aa
+./a/a//.a. a/a/.a.
+./a/a//.a/ a/a/.a
+./a/a//..a a/a/..a
+./a/a//... a/a/...
+./a/a//../ a
+./a/a//./a a/a/a
+./a/a//./. a/a
+./a/a//.// a/a
+./a/a///aa a/a/aa
+./a/a///a. a/a/a.
+./a/a///a/ a/a/a
+./a/a///.a a/a/.a
+./a/a///.. a
+./a/a///./ a/a
+./a/a////a a/a/a
+./a/a////. a/a
+./a/a///// a/a
+./a/.aaaaa a/.aaaaa
+./a/.aaaa. a/.aaaa.
+./a/.aaaa/ a/.aaaa
+./a/.aaa.a a/.aaa.a
+./a/.aaa.. a/.aaa..
+./a/.aaa./ a/.aaa.
+./a/.aaa/a a/.aaa/a
+./a/.aaa/. a/.aaa
+./a/.aaa// a/.aaa
+./a/.aa.aa a/.aa.aa
+./a/.aa.a. a/.aa.a.
+./a/.aa.a/ a/.aa.a
+./a/.aa..a a/.aa..a
+./a/.aa... a/.aa...
+./a/.aa../ a/.aa..
+./a/.aa./a a/.aa./a
+./a/.aa./. a/.aa.
+./a/.aa.// a/.aa.
+./a/.aa/aa a/.aa/aa
+./a/.aa/a. a/.aa/a.
+./a/.aa/a/ a/.aa/a
+./a/.aa/.a a/.aa/.a
+./a/.aa/.. a
+./a/.aa/./ a/.aa
+./a/.aa//a a/.aa/a
+./a/.aa//. a/.aa
+./a/.aa/// a/.aa
+./a/.a.aaa a/.a.aaa
+./a/.a.aa. a/.a.aa.
+./a/.a.aa/ a/.a.aa
+./a/.a.a.a a/.a.a.a
+./a/.a.a.. a/.a.a..
+./a/.a.a./ a/.a.a.
+./a/.a.a/a a/.a.a/a
+./a/.a.a/. a/.a.a
+./a/.a.a// a/.a.a
+./a/.a..aa a/.a..aa
+./a/.a..a. a/.a..a.
+./a/.a..a/ a/.a..a
+./a/.a...a a/.a...a
+./a/.a.... a/.a....
+./a/.a.../ a/.a...
+./a/.a../a a/.a../a
+./a/.a../. a/.a..
+./a/.a..// a/.a..
+./a/.a./aa a/.a./aa
+./a/.a./a. a/.a./a.
+./a/.a./a/ a/.a./a
+./a/.a./.a a/.a./.a
+./a/.a./.. a
+./a/.a././ a/.a.
+./a/.a.//a a/.a./a
+./a/.a.//. a/.a.
+./a/.a./// a/.a.
+./a/.a/aaa a/.a/aaa
+./a/.a/aa. a/.a/aa.
+./a/.a/aa/ a/.a/aa
+./a/.a/a.a a/.a/a.a
+./a/.a/a.. a/.a/a..
+./a/.a/a./ a/.a/a.
+./a/.a/a/a a/.a/a/a
+./a/.a/a/. a/.a/a
+./a/.a/a// a/.a/a
+./a/.a/.aa a/.a/.aa
+./a/.a/.a. a/.a/.a.
+./a/.a/.a/ a/.a/.a
+./a/.a/..a a/.a/..a
+./a/.a/... a/.a/...
+./a/.a/../ a
+./a/.a/./a a/.a/a
+./a/.a/./. a/.a
+./a/.a/.// a/.a
+./a/.a//aa a/.a/aa
+./a/.a//a. a/.a/a.
+./a/.a//a/ a/.a/a
+./a/.a//.a a/.a/.a
+./a/.a//.. a
+./a/.a//./ a/.a
+./a/.a///a a/.a/a
+./a/.a///. a/.a
+./a/.a//// a/.a
+./a/..aaaa a/..aaaa
+./a/..aaa. a/..aaa.
+./a/..aaa/ a/..aaa
+./a/..aa.a a/..aa.a
+./a/..aa.. a/..aa..
+./a/..aa./ a/..aa.
+./a/..aa/a a/..aa/a
+./a/..aa/. a/..aa
+./a/..aa// a/..aa
+./a/..a.aa a/..a.aa
+./a/..a.a. a/..a.a.
+./a/..a.a/ a/..a.a
+./a/..a..a a/..a..a
+./a/..a... a/..a...
+./a/..a../ a/..a..
+./a/..a./a a/..a./a
+./a/..a./. a/..a.
+./a/..a.// a/..a.
+./a/..a/aa a/..a/aa
+./a/..a/a. a/..a/a.
+./a/..a/a/ a/..a/a
+./a/..a/.a a/..a/.a
+./a/..a/.. a
+./a/..a/./ a/..a
+./a/..a//a a/..a/a
+./a/..a//. a/..a
+./a/..a/// a/..a
+./a/...aaa a/...aaa
+./a/...aa. a/...aa.
+./a/...aa/ a/...aa
+./a/...a.a a/...a.a
+./a/...a.. a/...a..
+./a/...a./ a/...a.
+./a/...a/a a/...a/a
+./a/...a/. a/...a
+./a/...a// a/...a
+./a/....aa a/....aa
+./a/....a. a/....a.
+./a/....a/ a/....a
+./a/.....a a/.....a
+./a/...... a/......
+./a/...../ a/.....
+./a/..../a a/..../a
+./a/..../. a/....
+./a/....// a/....
+./a/.../aa a/.../aa
+./a/.../a. a/.../a.
+./a/.../a/ a/.../a
+./a/.../.a a/.../.a
+./a/.../.. a
+./a/..././ a/...
+./a/...//a a/.../a
+./a/...//. a/...
+./a/.../// a/...
+./a/../aaa aaa
+./a/../aa. aa.
+./a/../aa/ aa
+./a/../a.a a.a
+./a/../a.. a..
+./a/../a./ a.
+./a/../a/a a/a
+./a/../a/. a
+./a/../a// a
+./a/../.aa .aa
+./a/../.a. .a.
+./a/../.a/ .a
+./a/../..a ..a
+./a/../... ...
+./a/../../ ..
+./a/.././a a
+./a/.././. .
+./a/../.// .
+./a/..//aa aa
+./a/..//a. a.
+./a/..//a/ a
+./a/..//.a .a
+./a/..//.. ..
+./a/..//./ .
+./a/..///a a
+./a/..///. .
+./a/..//// .
+./a/./aaaa a/aaaa
+./a/./aaa. a/aaa.
+./a/./aaa/ a/aaa
+./a/./aa.a a/aa.a
+./a/./aa.. a/aa..
+./a/./aa./ a/aa.
+./a/./aa/a a/aa/a
+./a/./aa/. a/aa
+./a/./aa// a/aa
+./a/./a.aa a/a.aa
+./a/./a.a. a/a.a.
+./a/./a.a/ a/a.a
+./a/./a..a a/a..a
+./a/./a... a/a...
+./a/./a../ a/a..
+./a/./a./a a/a./a
+./a/./a./. a/a.
+./a/./a.// a/a.
+./a/./a/aa a/a/aa
+./a/./a/a. a/a/a.
+./a/./a/a/ a/a/a
+./a/./a/.a a/a/.a
+./a/./a/.. a
+./a/./a/./ a/a
+./a/./a//a a/a/a
+./a/./a//. a/a
+./a/./a/// a/a
+./a/./.aaa a/.aaa
+./a/./.aa. a/.aa.
+./a/./.aa/ a/.aa
+./a/./.a.a a/.a.a
+./a/./.a.. a/.a..
+./a/./.a./ a/.a.
+./a/./.a/a a/.a/a
+./a/./.a/. a/.a
+./a/./.a// a/.a
+./a/./..aa a/..aa
+./a/./..a. a/..a.
+./a/./..a/ a/..a
+./a/./...a a/...a
+./a/./.... a/....
+./a/./.../ a/...
+./a/./../a a
+./a/./../. .
+./a/./..// .
+./a/././aa a/aa
+./a/././a. a/a.
+./a/././a/ a/a
+./a/././.a a/.a
+./a/././.. .
+./a/./././ a
+./a/././/a a/a
+./a/././/. a
+./a/././// a
+./a/.//aaa a/aaa
+./a/.//aa. a/aa.
+./a/.//aa/ a/aa
+./a/.//a.a a/a.a
+./a/.//a.. a/a..
+./a/.//a./ a/a.
+./a/.//a/a a/a/a
+./a/.//a/. a/a
+./a/.//a// a/a
+./a/.//.aa a/.aa
+./a/.//.a. a/.a.
+./a/.//.a/ a/.a
+./a/.//..a a/..a
+./a/.//... a/...
+./a/.//../ .
+./a/.//./a a/a
+./a/.//./. a
+./a/.//.// a
+./a/.///aa a/aa
+./a/.///a. a/a.
+./a/.///a/ a/a
+./a/.///.a a/.a
+./a/.///.. .
+./a/.///./ a
+./a/.////a a/a
+./a/.////. a
+./a/.///// a
+./a//aaaaa a/aaaaa
+./a//aaaa. a/aaaa.
+./a//aaaa/ a/aaaa
+./a//aaa.a a/aaa.a
+./a//aaa.. a/aaa..
+./a//aaa./ a/aaa.
+./a//aaa/a a/aaa/a
+./a//aaa/. a/aaa
+./a//aaa// a/aaa
+./a//aa.aa a/aa.aa
+./a//aa.a. a/aa.a.
+./a//aa.a/ a/aa.a
+./a//aa..a a/aa..a
+./a//aa... a/aa...
+./a//aa../ a/aa..
+./a//aa./a a/aa./a
+./a//aa./. a/aa.
+./a//aa.// a/aa.
+./a//aa/aa a/aa/aa
+./a//aa/a. a/aa/a.
+./a//aa/a/ a/aa/a
+./a//aa/.a a/aa/.a
+./a//aa/.. a
+./a//aa/./ a/aa
+./a//aa//a a/aa/a
+./a//aa//. a/aa
+./a//aa/// a/aa
+./a//a.aaa a/a.aaa
+./a//a.aa. a/a.aa.
+./a//a.aa/ a/a.aa
+./a//a.a.a a/a.a.a
+./a//a.a.. a/a.a..
+./a//a.a./ a/a.a.
+./a//a.a/a a/a.a/a
+./a//a.a/. a/a.a
+./a//a.a// a/a.a
+./a//a..aa a/a..aa
+./a//a..a. a/a..a.
+./a//a..a/ a/a..a
+./a//a...a a/a...a
+./a//a.... a/a....
+./a//a.../ a/a...
+./a//a../a a/a../a
+./a//a../. a/a..
+./a//a..// a/a..
+./a//a./aa a/a./aa
+./a//a./a. a/a./a.
+./a//a./a/ a/a./a
+./a//a./.a a/a./.a
+./a//a./.. a
+./a//a././ a/a.
+./a//a.//a a/a./a
+./a//a.//. a/a.
+./a//a./// a/a.
+./a//a/aaa a/a/aaa
+./a//a/aa. a/a/aa.
+./a//a/aa/ a/a/aa
+./a//a/a.a a/a/a.a
+./a//a/a.. a/a/a..
+./a//a/a./ a/a/a.
+./a//a/a/a a/a/a/a
+./a//a/a/. a/a/a
+./a//a/a// a/a/a
+./a//a/.aa a/a/.aa
+./a//a/.a. a/a/.a.
+./a//a/.a/ a/a/.a
+./a//a/..a a/a/..a
+./a//a/... a/a/...
+./a//a/../ a
+./a//a/./a a/a/a
+./a//a/./. a/a
+./a//a/.// a/a
+./a//a//aa a/a/aa
+./a//a//a. a/a/a.
+./a//a//a/ a/a/a
+./a//a//.a a/a/.a
+./a//a//.. a
+./a//a//./ a/a
+./a//a///a a/a/a
+./a//a///. a/a
+./a//a//// a/a
+./a//.aaaa a/.aaaa
+./a//.aaa. a/.aaa.
+./a//.aaa/ a/.aaa
+./a//.aa.a a/.aa.a
+./a//.aa.. a/.aa..
+./a//.aa./ a/.aa.
+./a//.aa/a a/.aa/a
+./a//.aa/. a/.aa
+./a//.aa// a/.aa
+./a//.a.aa a/.a.aa
+./a//.a.a. a/.a.a.
+./a//.a.a/ a/.a.a
+./a//.a..a a/.a..a
+./a//.a... a/.a...
+./a//.a../ a/.a..
+./a//.a./a a/.a./a
+./a//.a./. a/.a.
+./a//.a.// a/.a.
+./a//.a/aa a/.a/aa
+./a//.a/a. a/.a/a.
+./a//.a/a/ a/.a/a
+./a//.a/.a a/.a/.a
+./a//.a/.. a
+./a//.a/./ a/.a
+./a//.a//a a/.a/a
+./a//.a//. a/.a
+./a//.a/// a/.a
+./a//..aaa a/..aaa
+./a//..aa. a/..aa.
+./a//..aa/ a/..aa
+./a//..a.a a/..a.a
+./a//..a.. a/..a..
+./a//..a./ a/..a.
+./a//..a/a a/..a/a
+./a//..a/. a/..a
+./a//..a// a/..a
+./a//...aa a/...aa
+./a//...a. a/...a.
+./a//...a/ a/...a
+./a//....a a/....a
+./a//..... a/.....
+./a//..../ a/....
+./a//.../a a/.../a
+./a//.../. a/...
+./a//...// a/...
+./a//../aa aa
+./a//../a. a.
+./a//../a/ a
+./a//../.a .a
+./a//../.. ..
+./a//.././ .
+./a//..//a a
+./a//..//. .
+./a//../// .
+./a//./aaa a/aaa
+./a//./aa. a/aa.
+./a//./aa/ a/aa
+./a//./a.a a/a.a
+./a//./a.. a/a..
+./a//./a./ a/a.
+./a//./a/a a/a/a
+./a//./a/. a/a
+./a//./a// a/a
+./a//./.aa a/.aa
+./a//./.a. a/.a.
+./a//./.a/ a/.a
+./a//./..a a/..a
+./a//./... a/...
+./a//./../ .
+./a//././a a/a
+./a//././. a
+./a//./.// a
+./a//.//aa a/aa
+./a//.//a. a/a.
+./a//.//a/ a/a
+./a//.//.a a/.a
+./a//.//.. .
+./a//.//./ a
+./a//.///a a/a
+./a//.///. a
+./a//.//// a
+./a///aaaa a/aaaa
+./a///aaa. a/aaa.
+./a///aaa/ a/aaa
+./a///aa.a a/aa.a
+./a///aa.. a/aa..
+./a///aa./ a/aa.
+./a///aa/a a/aa/a
+./a///aa/. a/aa
+./a///aa// a/aa
+./a///a.aa a/a.aa
+./a///a.a. a/a.a.
+./a///a.a/ a/a.a
+./a///a..a a/a..a
+./a///a... a/a...
+./a///a../ a/a..
+./a///a./a a/a./a
+./a///a./. a/a.
+./a///a.// a/a.
+./a///a/aa a/a/aa
+./a///a/a. a/a/a.
+./a///a/a/ a/a/a
+./a///a/.a a/a/.a
+./a///a/.. a
+./a///a/./ a/a
+./a///a//a a/a/a
+./a///a//. a/a
+./a///a/// a/a
+./a///.aaa a/.aaa
+./a///.aa. a/.aa.
+./a///.aa/ a/.aa
+./a///.a.a a/.a.a
+./a///.a.. a/.a..
+./a///.a./ a/.a.
+./a///.a/a a/.a/a
+./a///.a/. a/.a
+./a///.a// a/.a
+./a///..aa a/..aa
+./a///..a. a/..a.
+./a///..a/ a/..a
+./a///...a a/...a
+./a///.... a/....
+./a///.../ a/...
+./a///../a a
+./a///../. .
+./a///..// .
+./a///./aa a/aa
+./a///./a. a/a.
+./a///./a/ a/a
+./a///./.a a/.a
+./a///./.. .
+./a///././ a
+./a///.//a a/a
+./a///.//. a
+./a///./// a
+./a////aaa a/aaa
+./a////aa. a/aa.
+./a////aa/ a/aa
+./a////a.a a/a.a
+./a////a.. a/a..
+./a////a./ a/a.
+./a////a/a a/a/a
+./a////a/. a/a
+./a////a// a/a
+./a////.aa a/.aa
+./a////.a. a/.a.
+./a////.a/ a/.a
+./a////..a a/..a
+./a////... a/...
+./a////../ .
+./a////./a a/a
+./a////./. a
+./a////.// a
+./a/////aa a/aa
+./a/////a. a/a.
+./a/////a/ a/a
+./a/////.a a/.a
+./a/////.. .
+./a/////./ a
+./a//////a a/a
+./a//////. a
+./a/////// a
+./.aaaaaaa .aaaaaaa
+./.aaaaaa. .aaaaaa.
+./.aaaaaa/ .aaaaaa
+./.aaaaa.a .aaaaa.a
+./.aaaaa.. .aaaaa..
+./.aaaaa./ .aaaaa.
+./.aaaaa/a .aaaaa/a
+./.aaaaa/. .aaaaa
+./.aaaaa// .aaaaa
+./.aaaa.aa .aaaa.aa
+./.aaaa.a. .aaaa.a.
+./.aaaa.a/ .aaaa.a
+./.aaaa..a .aaaa..a
+./.aaaa... .aaaa...
+./.aaaa../ .aaaa..
+./.aaaa./a .aaaa./a
+./.aaaa./. .aaaa.
+./.aaaa.// .aaaa.
+./.aaaa/aa .aaaa/aa
+./.aaaa/a. .aaaa/a.
+./.aaaa/a/ .aaaa/a
+./.aaaa/.a .aaaa/.a
+./.aaaa/.. .
+./.aaaa/./ .aaaa
+./.aaaa//a .aaaa/a
+./.aaaa//. .aaaa
+./.aaaa/// .aaaa
+./.aaa.aaa .aaa.aaa
+./.aaa.aa. .aaa.aa.
+./.aaa.aa/ .aaa.aa
+./.aaa.a.a .aaa.a.a
+./.aaa.a.. .aaa.a..
+./.aaa.a./ .aaa.a.
+./.aaa.a/a .aaa.a/a
+./.aaa.a/. .aaa.a
+./.aaa.a// .aaa.a
+./.aaa..aa .aaa..aa
+./.aaa..a. .aaa..a.
+./.aaa..a/ .aaa..a
+./.aaa...a .aaa...a
+./.aaa.... .aaa....
+./.aaa.../ .aaa...
+./.aaa../a .aaa../a
+./.aaa../. .aaa..
+./.aaa..// .aaa..
+./.aaa./aa .aaa./aa
+./.aaa./a. .aaa./a.
+./.aaa./a/ .aaa./a
+./.aaa./.a .aaa./.a
+./.aaa./.. .
+./.aaa././ .aaa.
+./.aaa.//a .aaa./a
+./.aaa.//. .aaa.
+./.aaa./// .aaa.
+./.aaa/aaa .aaa/aaa
+./.aaa/aa. .aaa/aa.
+./.aaa/aa/ .aaa/aa
+./.aaa/a.a .aaa/a.a
+./.aaa/a.. .aaa/a..
+./.aaa/a./ .aaa/a.
+./.aaa/a/a .aaa/a/a
+./.aaa/a/. .aaa/a
+./.aaa/a// .aaa/a
+./.aaa/.aa .aaa/.aa
+./.aaa/.a. .aaa/.a.
+./.aaa/.a/ .aaa/.a
+./.aaa/..a .aaa/..a
+./.aaa/... .aaa/...
+./.aaa/../ .
+./.aaa/./a .aaa/a
+./.aaa/./. .aaa
+./.aaa/.// .aaa
+./.aaa//aa .aaa/aa
+./.aaa//a. .aaa/a.
+./.aaa//a/ .aaa/a
+./.aaa//.a .aaa/.a
+./.aaa//.. .
+./.aaa//./ .aaa
+./.aaa///a .aaa/a
+./.aaa///. .aaa
+./.aaa//// .aaa
+./.aa.aaaa .aa.aaaa
+./.aa.aaa. .aa.aaa.
+./.aa.aaa/ .aa.aaa
+./.aa.aa.a .aa.aa.a
+./.aa.aa.. .aa.aa..
+./.aa.aa./ .aa.aa.
+./.aa.aa/a .aa.aa/a
+./.aa.aa/. .aa.aa
+./.aa.aa// .aa.aa
+./.aa.a.aa .aa.a.aa
+./.aa.a.a. .aa.a.a.
+./.aa.a.a/ .aa.a.a
+./.aa.a..a .aa.a..a
+./.aa.a... .aa.a...
+./.aa.a../ .aa.a..
+./.aa.a./a .aa.a./a
+./.aa.a./. .aa.a.
+./.aa.a.// .aa.a.
+./.aa.a/aa .aa.a/aa
+./.aa.a/a. .aa.a/a.
+./.aa.a/a/ .aa.a/a
+./.aa.a/.a .aa.a/.a
+./.aa.a/.. .
+./.aa.a/./ .aa.a
+./.aa.a//a .aa.a/a
+./.aa.a//. .aa.a
+./.aa.a/// .aa.a
+./.aa..aaa .aa..aaa
+./.aa..aa. .aa..aa.
+./.aa..aa/ .aa..aa
+./.aa..a.a .aa..a.a
+./.aa..a.. .aa..a..
+./.aa..a./ .aa..a.
+./.aa..a/a .aa..a/a
+./.aa..a/. .aa..a
+./.aa..a// .aa..a
+./.aa...aa .aa...aa
+./.aa...a. .aa...a.
+./.aa...a/ .aa...a
+./.aa....a .aa....a
+./.aa..... .aa.....
+./.aa..../ .aa....
+./.aa.../a .aa.../a
+./.aa.../. .aa...
+./.aa...// .aa...
+./.aa../aa .aa../aa
+./.aa../a. .aa../a.
+./.aa../a/ .aa../a
+./.aa../.a .aa../.a
+./.aa../.. .
+./.aa.././ .aa..
+./.aa..//a .aa../a
+./.aa..//. .aa..
+./.aa../// .aa..
+./.aa./aaa .aa./aaa
+./.aa./aa. .aa./aa.
+./.aa./aa/ .aa./aa
+./.aa./a.a .aa./a.a
+./.aa./a.. .aa./a..
+./.aa./a./ .aa./a.
+./.aa./a/a .aa./a/a
+./.aa./a/. .aa./a
+./.aa./a// .aa./a
+./.aa./.aa .aa./.aa
+./.aa./.a. .aa./.a.
+./.aa./.a/ .aa./.a
+./.aa./..a .aa./..a
+./.aa./... .aa./...
+./.aa./../ .
+./.aa././a .aa./a
+./.aa././. .aa.
+./.aa./.// .aa.
+./.aa.//aa .aa./aa
+./.aa.//a. .aa./a.
+./.aa.//a/ .aa./a
+./.aa.//.a .aa./.a
+./.aa.//.. .
+./.aa.//./ .aa.
+./.aa.///a .aa./a
+./.aa.///. .aa.
+./.aa.//// .aa.
+./.aa/aaaa .aa/aaaa
+./.aa/aaa. .aa/aaa.
+./.aa/aaa/ .aa/aaa
+./.aa/aa.a .aa/aa.a
+./.aa/aa.. .aa/aa..
+./.aa/aa./ .aa/aa.
+./.aa/aa/a .aa/aa/a
+./.aa/aa/. .aa/aa
+./.aa/aa// .aa/aa
+./.aa/a.aa .aa/a.aa
+./.aa/a.a. .aa/a.a.
+./.aa/a.a/ .aa/a.a
+./.aa/a..a .aa/a..a
+./.aa/a... .aa/a...
+./.aa/a../ .aa/a..
+./.aa/a./a .aa/a./a
+./.aa/a./. .aa/a.
+./.aa/a.// .aa/a.
+./.aa/a/aa .aa/a/aa
+./.aa/a/a. .aa/a/a.
+./.aa/a/a/ .aa/a/a
+./.aa/a/.a .aa/a/.a
+./.aa/a/.. .aa
+./.aa/a/./ .aa/a
+./.aa/a//a .aa/a/a
+./.aa/a//. .aa/a
+./.aa/a/// .aa/a
+./.aa/.aaa .aa/.aaa
+./.aa/.aa. .aa/.aa.
+./.aa/.aa/ .aa/.aa
+./.aa/.a.a .aa/.a.a
+./.aa/.a.. .aa/.a..
+./.aa/.a./ .aa/.a.
+./.aa/.a/a .aa/.a/a
+./.aa/.a/. .aa/.a
+./.aa/.a// .aa/.a
+./.aa/..aa .aa/..aa
+./.aa/..a. .aa/..a.
+./.aa/..a/ .aa/..a
+./.aa/...a .aa/...a
+./.aa/.... .aa/....
+./.aa/.../ .aa/...
+./.aa/../a a
+./.aa/../. .
+./.aa/..// .
+./.aa/./aa .aa/aa
+./.aa/./a. .aa/a.
+./.aa/./a/ .aa/a
+./.aa/./.a .aa/.a
+./.aa/./.. .
+./.aa/././ .aa
+./.aa/.//a .aa/a
+./.aa/.//. .aa
+./.aa/./// .aa
+./.aa//aaa .aa/aaa
+./.aa//aa. .aa/aa.
+./.aa//aa/ .aa/aa
+./.aa//a.a .aa/a.a
+./.aa//a.. .aa/a..
+./.aa//a./ .aa/a.
+./.aa//a/a .aa/a/a
+./.aa//a/. .aa/a
+./.aa//a// .aa/a
+./.aa//.aa .aa/.aa
+./.aa//.a. .aa/.a.
+./.aa//.a/ .aa/.a
+./.aa//..a .aa/..a
+./.aa//... .aa/...
+./.aa//../ .
+./.aa//./a .aa/a
+./.aa//./. .aa
+./.aa//.// .aa
+./.aa///aa .aa/aa
+./.aa///a. .aa/a.
+./.aa///a/ .aa/a
+./.aa///.a .aa/.a
+./.aa///.. .
+./.aa///./ .aa
+./.aa////a .aa/a
+./.aa////. .aa
+./.aa///// .aa
+./.a.aaaaa .a.aaaaa
+./.a.aaaa. .a.aaaa.
+./.a.aaaa/ .a.aaaa
+./.a.aaa.a .a.aaa.a
+./.a.aaa.. .a.aaa..
+./.a.aaa./ .a.aaa.
+./.a.aaa/a .a.aaa/a
+./.a.aaa/. .a.aaa
+./.a.aaa// .a.aaa
+./.a.aa.aa .a.aa.aa
+./.a.aa.a. .a.aa.a.
+./.a.aa.a/ .a.aa.a
+./.a.aa..a .a.aa..a
+./.a.aa... .a.aa...
+./.a.aa../ .a.aa..
+./.a.aa./a .a.aa./a
+./.a.aa./. .a.aa.
+./.a.aa.// .a.aa.
+./.a.aa/aa .a.aa/aa
+./.a.aa/a. .a.aa/a.
+./.a.aa/a/ .a.aa/a
+./.a.aa/.a .a.aa/.a
+./.a.aa/.. .
+./.a.aa/./ .a.aa
+./.a.aa//a .a.aa/a
+./.a.aa//. .a.aa
+./.a.aa/// .a.aa
+./.a.a.aaa .a.a.aaa
+./.a.a.aa. .a.a.aa.
+./.a.a.aa/ .a.a.aa
+./.a.a.a.a .a.a.a.a
+./.a.a.a.. .a.a.a..
+./.a.a.a./ .a.a.a.
+./.a.a.a/a .a.a.a/a
+./.a.a.a/. .a.a.a
+./.a.a.a// .a.a.a
+./.a.a..aa .a.a..aa
+./.a.a..a. .a.a..a.
+./.a.a..a/ .a.a..a
+./.a.a...a .a.a...a
+./.a.a.... .a.a....
+./.a.a.../ .a.a...
+./.a.a../a .a.a../a
+./.a.a../. .a.a..
+./.a.a..// .a.a..
+./.a.a./aa .a.a./aa
+./.a.a./a. .a.a./a.
+./.a.a./a/ .a.a./a
+./.a.a./.a .a.a./.a
+./.a.a./.. .
+./.a.a././ .a.a.
+./.a.a.//a .a.a./a
+./.a.a.//. .a.a.
+./.a.a./// .a.a.
+./.a.a/aaa .a.a/aaa
+./.a.a/aa. .a.a/aa.
+./.a.a/aa/ .a.a/aa
+./.a.a/a.a .a.a/a.a
+./.a.a/a.. .a.a/a..
+./.a.a/a./ .a.a/a.
+./.a.a/a/a .a.a/a/a
+./.a.a/a/. .a.a/a
+./.a.a/a// .a.a/a
+./.a.a/.aa .a.a/.aa
+./.a.a/.a. .a.a/.a.
+./.a.a/.a/ .a.a/.a
+./.a.a/..a .a.a/..a
+./.a.a/... .a.a/...
+./.a.a/../ .
+./.a.a/./a .a.a/a
+./.a.a/./. .a.a
+./.a.a/.// .a.a
+./.a.a//aa .a.a/aa
+./.a.a//a. .a.a/a.
+./.a.a//a/ .a.a/a
+./.a.a//.a .a.a/.a
+./.a.a//.. .
+./.a.a//./ .a.a
+./.a.a///a .a.a/a
+./.a.a///. .a.a
+./.a.a//// .a.a
+./.a..aaaa .a..aaaa
+./.a..aaa. .a..aaa.
+./.a..aaa/ .a..aaa
+./.a..aa.a .a..aa.a
+./.a..aa.. .a..aa..
+./.a..aa./ .a..aa.
+./.a..aa/a .a..aa/a
+./.a..aa/. .a..aa
+./.a..aa// .a..aa
+./.a..a.aa .a..a.aa
+./.a..a.a. .a..a.a.
+./.a..a.a/ .a..a.a
+./.a..a..a .a..a..a
+./.a..a... .a..a...
+./.a..a../ .a..a..
+./.a..a./a .a..a./a
+./.a..a./. .a..a.
+./.a..a.// .a..a.
+./.a..a/aa .a..a/aa
+./.a..a/a. .a..a/a.
+./.a..a/a/ .a..a/a
+./.a..a/.a .a..a/.a
+./.a..a/.. .
+./.a..a/./ .a..a
+./.a..a//a .a..a/a
+./.a..a//. .a..a
+./.a..a/// .a..a
+./.a...aaa .a...aaa
+./.a...aa. .a...aa.
+./.a...aa/ .a...aa
+./.a...a.a .a...a.a
+./.a...a.. .a...a..
+./.a...a./ .a...a.
+./.a...a/a .a...a/a
+./.a...a/. .a...a
+./.a...a// .a...a
+./.a....aa .a....aa
+./.a....a. .a....a.
+./.a....a/ .a....a
+./.a.....a .a.....a
+./.a...... .a......
+./.a...../ .a.....
+./.a..../a .a..../a
+./.a..../. .a....
+./.a....// .a....
+./.a.../aa .a.../aa
+./.a.../a. .a.../a.
+./.a.../a/ .a.../a
+./.a.../.a .a.../.a
+./.a.../.. .
+./.a..././ .a...
+./.a...//a .a.../a
+./.a...//. .a...
+./.a.../// .a...
+./.a../aaa .a../aaa
+./.a../aa. .a../aa.
+./.a../aa/ .a../aa
+./.a../a.a .a../a.a
+./.a../a.. .a../a..
+./.a../a./ .a../a.
+./.a../a/a .a../a/a
+./.a../a/. .a../a
+./.a../a// .a../a
+./.a../.aa .a../.aa
+./.a../.a. .a../.a.
+./.a../.a/ .a../.a
+./.a../..a .a../..a
+./.a../... .a../...
+./.a../../ .
+./.a.././a .a../a
+./.a.././. .a..
+./.a../.// .a..
+./.a..//aa .a../aa
+./.a..//a. .a../a.
+./.a..//a/ .a../a
+./.a..//.a .a../.a
+./.a..//.. .
+./.a..//./ .a..
+./.a..///a .a../a
+./.a..///. .a..
+./.a..//// .a..
+./.a./aaaa .a./aaaa
+./.a./aaa. .a./aaa.
+./.a./aaa/ .a./aaa
+./.a./aa.a .a./aa.a
+./.a./aa.. .a./aa..
+./.a./aa./ .a./aa.
+./.a./aa/a .a./aa/a
+./.a./aa/. .a./aa
+./.a./aa// .a./aa
+./.a./a.aa .a./a.aa
+./.a./a.a. .a./a.a.
+./.a./a.a/ .a./a.a
+./.a./a..a .a./a..a
+./.a./a... .a./a...
+./.a./a../ .a./a..
+./.a./a./a .a./a./a
+./.a./a./. .a./a.
+./.a./a.// .a./a.
+./.a./a/aa .a./a/aa
+./.a./a/a. .a./a/a.
+./.a./a/a/ .a./a/a
+./.a./a/.a .a./a/.a
+./.a./a/.. .a.
+./.a./a/./ .a./a
+./.a./a//a .a./a/a
+./.a./a//. .a./a
+./.a./a/// .a./a
+./.a./.aaa .a./.aaa
+./.a./.aa. .a./.aa.
+./.a./.aa/ .a./.aa
+./.a./.a.a .a./.a.a
+./.a./.a.. .a./.a..
+./.a./.a./ .a./.a.
+./.a./.a/a .a./.a/a
+./.a./.a/. .a./.a
+./.a./.a// .a./.a
+./.a./..aa .a./..aa
+./.a./..a. .a./..a.
+./.a./..a/ .a./..a
+./.a./...a .a./...a
+./.a./.... .a./....
+./.a./.../ .a./...
+./.a./../a a
+./.a./../. .
+./.a./..// .
+./.a././aa .a./aa
+./.a././a. .a./a.
+./.a././a/ .a./a
+./.a././.a .a./.a
+./.a././.. .
+./.a./././ .a.
+./.a././/a .a./a
+./.a././/. .a.
+./.a././// .a.
+./.a.//aaa .a./aaa
+./.a.//aa. .a./aa.
+./.a.//aa/ .a./aa
+./.a.//a.a .a./a.a
+./.a.//a.. .a./a..
+./.a.//a./ .a./a.
+./.a.//a/a .a./a/a
+./.a.//a/. .a./a
+./.a.//a// .a./a
+./.a.//.aa .a./.aa
+./.a.//.a. .a./.a.
+./.a.//.a/ .a./.a
+./.a.//..a .a./..a
+./.a.//... .a./...
+./.a.//../ .
+./.a.//./a .a./a
+./.a.//./. .a.
+./.a.//.// .a.
+./.a.///aa .a./aa
+./.a.///a. .a./a.
+./.a.///a/ .a./a
+./.a.///.a .a./.a
+./.a.///.. .
+./.a.///./ .a.
+./.a.////a .a./a
+./.a.////. .a.
+./.a.///// .a.
+./.a/aaaaa .a/aaaaa
+./.a/aaaa. .a/aaaa.
+./.a/aaaa/ .a/aaaa
+./.a/aaa.a .a/aaa.a
+./.a/aaa.. .a/aaa..
+./.a/aaa./ .a/aaa.
+./.a/aaa/a .a/aaa/a
+./.a/aaa/. .a/aaa
+./.a/aaa// .a/aaa
+./.a/aa.aa .a/aa.aa
+./.a/aa.a. .a/aa.a.
+./.a/aa.a/ .a/aa.a
+./.a/aa..a .a/aa..a
+./.a/aa... .a/aa...
+./.a/aa../ .a/aa..
+./.a/aa./a .a/aa./a
+./.a/aa./. .a/aa.
+./.a/aa.// .a/aa.
+./.a/aa/aa .a/aa/aa
+./.a/aa/a. .a/aa/a.
+./.a/aa/a/ .a/aa/a
+./.a/aa/.a .a/aa/.a
+./.a/aa/.. .a
+./.a/aa/./ .a/aa
+./.a/aa//a .a/aa/a
+./.a/aa//. .a/aa
+./.a/aa/// .a/aa
+./.a/a.aaa .a/a.aaa
+./.a/a.aa. .a/a.aa.
+./.a/a.aa/ .a/a.aa
+./.a/a.a.a .a/a.a.a
+./.a/a.a.. .a/a.a..
+./.a/a.a./ .a/a.a.
+./.a/a.a/a .a/a.a/a
+./.a/a.a/. .a/a.a
+./.a/a.a// .a/a.a
+./.a/a..aa .a/a..aa
+./.a/a..a. .a/a..a.
+./.a/a..a/ .a/a..a
+./.a/a...a .a/a...a
+./.a/a.... .a/a....
+./.a/a.../ .a/a...
+./.a/a../a .a/a../a
+./.a/a../. .a/a..
+./.a/a..// .a/a..
+./.a/a./aa .a/a./aa
+./.a/a./a. .a/a./a.
+./.a/a./a/ .a/a./a
+./.a/a./.a .a/a./.a
+./.a/a./.. .a
+./.a/a././ .a/a.
+./.a/a.//a .a/a./a
+./.a/a.//. .a/a.
+./.a/a./// .a/a.
+./.a/a/aaa .a/a/aaa
+./.a/a/aa. .a/a/aa.
+./.a/a/aa/ .a/a/aa
+./.a/a/a.a .a/a/a.a
+./.a/a/a.. .a/a/a..
+./.a/a/a./ .a/a/a.
+./.a/a/a/a .a/a/a/a
+./.a/a/a/. .a/a/a
+./.a/a/a// .a/a/a
+./.a/a/.aa .a/a/.aa
+./.a/a/.a. .a/a/.a.
+./.a/a/.a/ .a/a/.a
+./.a/a/..a .a/a/..a
+./.a/a/... .a/a/...
+./.a/a/../ .a
+./.a/a/./a .a/a/a
+./.a/a/./. .a/a
+./.a/a/.// .a/a
+./.a/a//aa .a/a/aa
+./.a/a//a. .a/a/a.
+./.a/a//a/ .a/a/a
+./.a/a//.a .a/a/.a
+./.a/a//.. .a
+./.a/a//./ .a/a
+./.a/a///a .a/a/a
+./.a/a///. .a/a
+./.a/a//// .a/a
+./.a/.aaaa .a/.aaaa
+./.a/.aaa. .a/.aaa.
+./.a/.aaa/ .a/.aaa
+./.a/.aa.a .a/.aa.a
+./.a/.aa.. .a/.aa..
+./.a/.aa./ .a/.aa.
+./.a/.aa/a .a/.aa/a
+./.a/.aa/. .a/.aa
+./.a/.aa// .a/.aa
+./.a/.a.aa .a/.a.aa
+./.a/.a.a. .a/.a.a.
+./.a/.a.a/ .a/.a.a
+./.a/.a..a .a/.a..a
+./.a/.a... .a/.a...
+./.a/.a../ .a/.a..
+./.a/.a./a .a/.a./a
+./.a/.a./. .a/.a.
+./.a/.a.// .a/.a.
+./.a/.a/aa .a/.a/aa
+./.a/.a/a. .a/.a/a.
+./.a/.a/a/ .a/.a/a
+./.a/.a/.a .a/.a/.a
+./.a/.a/.. .a
+./.a/.a/./ .a/.a
+./.a/.a//a .a/.a/a
+./.a/.a//. .a/.a
+./.a/.a/// .a/.a
+./.a/..aaa .a/..aaa
+./.a/..aa. .a/..aa.
+./.a/..aa/ .a/..aa
+./.a/..a.a .a/..a.a
+./.a/..a.. .a/..a..
+./.a/..a./ .a/..a.
+./.a/..a/a .a/..a/a
+./.a/..a/. .a/..a
+./.a/..a// .a/..a
+./.a/...aa .a/...aa
+./.a/...a. .a/...a.
+./.a/...a/ .a/...a
+./.a/....a .a/....a
+./.a/..... .a/.....
+./.a/..../ .a/....
+./.a/.../a .a/.../a
+./.a/.../. .a/...
+./.a/...// .a/...
+./.a/../aa aa
+./.a/../a. a.
+./.a/../a/ a
+./.a/../.a .a
+./.a/../.. ..
+./.a/.././ .
+./.a/..//a a
+./.a/..//. .
+./.a/../// .
+./.a/./aaa .a/aaa
+./.a/./aa. .a/aa.
+./.a/./aa/ .a/aa
+./.a/./a.a .a/a.a
+./.a/./a.. .a/a..
+./.a/./a./ .a/a.
+./.a/./a/a .a/a/a
+./.a/./a/. .a/a
+./.a/./a// .a/a
+./.a/./.aa .a/.aa
+./.a/./.a. .a/.a.
+./.a/./.a/ .a/.a
+./.a/./..a .a/..a
+./.a/./... .a/...
+./.a/./../ .
+./.a/././a .a/a
+./.a/././. .a
+./.a/./.// .a
+./.a/.//aa .a/aa
+./.a/.//a. .a/a.
+./.a/.//a/ .a/a
+./.a/.//.a .a/.a
+./.a/.//.. .
+./.a/.//./ .a
+./.a/.///a .a/a
+./.a/.///. .a
+./.a/.//// .a
+./.a//aaaa .a/aaaa
+./.a//aaa. .a/aaa.
+./.a//aaa/ .a/aaa
+./.a//aa.a .a/aa.a
+./.a//aa.. .a/aa..
+./.a//aa./ .a/aa.
+./.a//aa/a .a/aa/a
+./.a//aa/. .a/aa
+./.a//aa// .a/aa
+./.a//a.aa .a/a.aa
+./.a//a.a. .a/a.a.
+./.a//a.a/ .a/a.a
+./.a//a..a .a/a..a
+./.a//a... .a/a...
+./.a//a../ .a/a..
+./.a//a./a .a/a./a
+./.a//a./. .a/a.
+./.a//a.// .a/a.
+./.a//a/aa .a/a/aa
+./.a//a/a. .a/a/a.
+./.a//a/a/ .a/a/a
+./.a//a/.a .a/a/.a
+./.a//a/.. .a
+./.a//a/./ .a/a
+./.a//a//a .a/a/a
+./.a//a//. .a/a
+./.a//a/// .a/a
+./.a//.aaa .a/.aaa
+./.a//.aa. .a/.aa.
+./.a//.aa/ .a/.aa
+./.a//.a.a .a/.a.a
+./.a//.a.. .a/.a..
+./.a//.a./ .a/.a.
+./.a//.a/a .a/.a/a
+./.a//.a/. .a/.a
+./.a//.a// .a/.a
+./.a//..aa .a/..aa
+./.a//..a. .a/..a.
+./.a//..a/ .a/..a
+./.a//...a .a/...a
+./.a//.... .a/....
+./.a//.../ .a/...
+./.a//../a a
+./.a//../. .
+./.a//..// .
+./.a//./aa .a/aa
+./.a//./a. .a/a.
+./.a//./a/ .a/a
+./.a//./.a .a/.a
+./.a//./.. .
+./.a//././ .a
+./.a//.//a .a/a
+./.a//.//. .a
+./.a//./// .a
+./.a///aaa .a/aaa
+./.a///aa. .a/aa.
+./.a///aa/ .a/aa
+./.a///a.a .a/a.a
+./.a///a.. .a/a..
+./.a///a./ .a/a.
+./.a///a/a .a/a/a
+./.a///a/. .a/a
+./.a///a// .a/a
+./.a///.aa .a/.aa
+./.a///.a. .a/.a.
+./.a///.a/ .a/.a
+./.a///..a .a/..a
+./.a///... .a/...
+./.a///../ .
+./.a///./a .a/a
+./.a///./. .a
+./.a///.// .a
+./.a////aa .a/aa
+./.a////a. .a/a.
+./.a////a/ .a/a
+./.a////.a .a/.a
+./.a////.. .
+./.a////./ .a
+./.a/////a .a/a
+./.a/////. .a
+./.a////// .a
+./..aaaaaa ..aaaaaa
+./..aaaaa. ..aaaaa.
+./..aaaaa/ ..aaaaa
+./..aaaa.a ..aaaa.a
+./..aaaa.. ..aaaa..
+./..aaaa./ ..aaaa.
+./..aaaa/a ..aaaa/a
+./..aaaa/. ..aaaa
+./..aaaa// ..aaaa
+./..aaa.aa ..aaa.aa
+./..aaa.a. ..aaa.a.
+./..aaa.a/ ..aaa.a
+./..aaa..a ..aaa..a
+./..aaa... ..aaa...
+./..aaa../ ..aaa..
+./..aaa./a ..aaa./a
+./..aaa./. ..aaa.
+./..aaa.// ..aaa.
+./..aaa/aa ..aaa/aa
+./..aaa/a. ..aaa/a.
+./..aaa/a/ ..aaa/a
+./..aaa/.a ..aaa/.a
+./..aaa/.. .
+./..aaa/./ ..aaa
+./..aaa//a ..aaa/a
+./..aaa//. ..aaa
+./..aaa/// ..aaa
+./..aa.aaa ..aa.aaa
+./..aa.aa. ..aa.aa.
+./..aa.aa/ ..aa.aa
+./..aa.a.a ..aa.a.a
+./..aa.a.. ..aa.a..
+./..aa.a./ ..aa.a.
+./..aa.a/a ..aa.a/a
+./..aa.a/. ..aa.a
+./..aa.a// ..aa.a
+./..aa..aa ..aa..aa
+./..aa..a. ..aa..a.
+./..aa..a/ ..aa..a
+./..aa...a ..aa...a
+./..aa.... ..aa....
+./..aa.../ ..aa...
+./..aa../a ..aa../a
+./..aa../. ..aa..
+./..aa..// ..aa..
+./..aa./aa ..aa./aa
+./..aa./a. ..aa./a.
+./..aa./a/ ..aa./a
+./..aa./.a ..aa./.a
+./..aa./.. .
+./..aa././ ..aa.
+./..aa.//a ..aa./a
+./..aa.//. ..aa.
+./..aa./// ..aa.
+./..aa/aaa ..aa/aaa
+./..aa/aa. ..aa/aa.
+./..aa/aa/ ..aa/aa
+./..aa/a.a ..aa/a.a
+./..aa/a.. ..aa/a..
+./..aa/a./ ..aa/a.
+./..aa/a/a ..aa/a/a
+./..aa/a/. ..aa/a
+./..aa/a// ..aa/a
+./..aa/.aa ..aa/.aa
+./..aa/.a. ..aa/.a.
+./..aa/.a/ ..aa/.a
+./..aa/..a ..aa/..a
+./..aa/... ..aa/...
+./..aa/../ .
+./..aa/./a ..aa/a
+./..aa/./. ..aa
+./..aa/.// ..aa
+./..aa//aa ..aa/aa
+./..aa//a. ..aa/a.
+./..aa//a/ ..aa/a
+./..aa//.a ..aa/.a
+./..aa//.. .
+./..aa//./ ..aa
+./..aa///a ..aa/a
+./..aa///. ..aa
+./..aa//// ..aa
+./..a.aaaa ..a.aaaa
+./..a.aaa. ..a.aaa.
+./..a.aaa/ ..a.aaa
+./..a.aa.a ..a.aa.a
+./..a.aa.. ..a.aa..
+./..a.aa./ ..a.aa.
+./..a.aa/a ..a.aa/a
+./..a.aa/. ..a.aa
+./..a.aa// ..a.aa
+./..a.a.aa ..a.a.aa
+./..a.a.a. ..a.a.a.
+./..a.a.a/ ..a.a.a
+./..a.a..a ..a.a..a
+./..a.a... ..a.a...
+./..a.a../ ..a.a..
+./..a.a./a ..a.a./a
+./..a.a./. ..a.a.
+./..a.a.// ..a.a.
+./..a.a/aa ..a.a/aa
+./..a.a/a. ..a.a/a.
+./..a.a/a/ ..a.a/a
+./..a.a/.a ..a.a/.a
+./..a.a/.. .
+./..a.a/./ ..a.a
+./..a.a//a ..a.a/a
+./..a.a//. ..a.a
+./..a.a/// ..a.a
+./..a..aaa ..a..aaa
+./..a..aa. ..a..aa.
+./..a..aa/ ..a..aa
+./..a..a.a ..a..a.a
+./..a..a.. ..a..a..
+./..a..a./ ..a..a.
+./..a..a/a ..a..a/a
+./..a..a/. ..a..a
+./..a..a// ..a..a
+./..a...aa ..a...aa
+./..a...a. ..a...a.
+./..a...a/ ..a...a
+./..a....a ..a....a
+./..a..... ..a.....
+./..a..../ ..a....
+./..a.../a ..a.../a
+./..a.../. ..a...
+./..a...// ..a...
+./..a../aa ..a../aa
+./..a../a. ..a../a.
+./..a../a/ ..a../a
+./..a../.a ..a../.a
+./..a../.. .
+./..a.././ ..a..
+./..a..//a ..a../a
+./..a..//. ..a..
+./..a../// ..a..
+./..a./aaa ..a./aaa
+./..a./aa. ..a./aa.
+./..a./aa/ ..a./aa
+./..a./a.a ..a./a.a
+./..a./a.. ..a./a..
+./..a./a./ ..a./a.
+./..a./a/a ..a./a/a
+./..a./a/. ..a./a
+./..a./a// ..a./a
+./..a./.aa ..a./.aa
+./..a./.a. ..a./.a.
+./..a./.a/ ..a./.a
+./..a./..a ..a./..a
+./..a./... ..a./...
+./..a./../ .
+./..a././a ..a./a
+./..a././. ..a.
+./..a./.// ..a.
+./..a.//aa ..a./aa
+./..a.//a. ..a./a.
+./..a.//a/ ..a./a
+./..a.//.a ..a./.a
+./..a.//.. .
+./..a.//./ ..a.
+./..a.///a ..a./a
+./..a.///. ..a.
+./..a.//// ..a.
+./..a/aaaa ..a/aaaa
+./..a/aaa. ..a/aaa.
+./..a/aaa/ ..a/aaa
+./..a/aa.a ..a/aa.a
+./..a/aa.. ..a/aa..
+./..a/aa./ ..a/aa.
+./..a/aa/a ..a/aa/a
+./..a/aa/. ..a/aa
+./..a/aa// ..a/aa
+./..a/a.aa ..a/a.aa
+./..a/a.a. ..a/a.a.
+./..a/a.a/ ..a/a.a
+./..a/a..a ..a/a..a
+./..a/a... ..a/a...
+./..a/a../ ..a/a..
+./..a/a./a ..a/a./a
+./..a/a./. ..a/a.
+./..a/a.// ..a/a.
+./..a/a/aa ..a/a/aa
+./..a/a/a. ..a/a/a.
+./..a/a/a/ ..a/a/a
+./..a/a/.a ..a/a/.a
+./..a/a/.. ..a
+./..a/a/./ ..a/a
+./..a/a//a ..a/a/a
+./..a/a//. ..a/a
+./..a/a/// ..a/a
+./..a/.aaa ..a/.aaa
+./..a/.aa. ..a/.aa.
+./..a/.aa/ ..a/.aa
+./..a/.a.a ..a/.a.a
+./..a/.a.. ..a/.a..
+./..a/.a./ ..a/.a.
+./..a/.a/a ..a/.a/a
+./..a/.a/. ..a/.a
+./..a/.a// ..a/.a
+./..a/..aa ..a/..aa
+./..a/..a. ..a/..a.
+./..a/..a/ ..a/..a
+./..a/...a ..a/...a
+./..a/.... ..a/....
+./..a/.../ ..a/...
+./..a/../a a
+./..a/../. .
+./..a/..// .
+./..a/./aa ..a/aa
+./..a/./a. ..a/a.
+./..a/./a/ ..a/a
+./..a/./.a ..a/.a
+./..a/./.. .
+./..a/././ ..a
+./..a/.//a ..a/a
+./..a/.//. ..a
+./..a/./// ..a
+./..a//aaa ..a/aaa
+./..a//aa. ..a/aa.
+./..a//aa/ ..a/aa
+./..a//a.a ..a/a.a
+./..a//a.. ..a/a..
+./..a//a./ ..a/a.
+./..a//a/a ..a/a/a
+./..a//a/. ..a/a
+./..a//a// ..a/a
+./..a//.aa ..a/.aa
+./..a//.a. ..a/.a.
+./..a//.a/ ..a/.a
+./..a//..a ..a/..a
+./..a//... ..a/...
+./..a//../ .
+./..a//./a ..a/a
+./..a//./. ..a
+./..a//.// ..a
+./..a///aa ..a/aa
+./..a///a. ..a/a.
+./..a///a/ ..a/a
+./..a///.a ..a/.a
+./..a///.. .
+./..a///./ ..a
+./..a////a ..a/a
+./..a////. ..a
+./..a///// ..a
+./...aaaaa ...aaaaa
+./...aaaa. ...aaaa.
+./...aaaa/ ...aaaa
+./...aaa.a ...aaa.a
+./...aaa.. ...aaa..
+./...aaa./ ...aaa.
+./...aaa/a ...aaa/a
+./...aaa/. ...aaa
+./...aaa// ...aaa
+./...aa.aa ...aa.aa
+./...aa.a. ...aa.a.
+./...aa.a/ ...aa.a
+./...aa..a ...aa..a
+./...aa... ...aa...
+./...aa../ ...aa..
+./...aa./a ...aa./a
+./...aa./. ...aa.
+./...aa.// ...aa.
+./...aa/aa ...aa/aa
+./...aa/a. ...aa/a.
+./...aa/a/ ...aa/a
+./...aa/.a ...aa/.a
+./...aa/.. .
+./...aa/./ ...aa
+./...aa//a ...aa/a
+./...aa//. ...aa
+./...aa/// ...aa
+./...a.aaa ...a.aaa
+./...a.aa. ...a.aa.
+./...a.aa/ ...a.aa
+./...a.a.a ...a.a.a
+./...a.a.. ...a.a..
+./...a.a./ ...a.a.
+./...a.a/a ...a.a/a
+./...a.a/. ...a.a
+./...a.a// ...a.a
+./...a..aa ...a..aa
+./...a..a. ...a..a.
+./...a..a/ ...a..a
+./...a...a ...a...a
+./...a.... ...a....
+./...a.../ ...a...
+./...a../a ...a../a
+./...a../. ...a..
+./...a..// ...a..
+./...a./aa ...a./aa
+./...a./a. ...a./a.
+./...a./a/ ...a./a
+./...a./.a ...a./.a
+./...a./.. .
+./...a././ ...a.
+./...a.//a ...a./a
+./...a.//. ...a.
+./...a./// ...a.
+./...a/aaa ...a/aaa
+./...a/aa. ...a/aa.
+./...a/aa/ ...a/aa
+./...a/a.a ...a/a.a
+./...a/a.. ...a/a..
+./...a/a./ ...a/a.
+./...a/a/a ...a/a/a
+./...a/a/. ...a/a
+./...a/a// ...a/a
+./...a/.aa ...a/.aa
+./...a/.a. ...a/.a.
+./...a/.a/ ...a/.a
+./...a/..a ...a/..a
+./...a/... ...a/...
+./...a/../ .
+./...a/./a ...a/a
+./...a/./. ...a
+./...a/.// ...a
+./...a//aa ...a/aa
+./...a//a. ...a/a.
+./...a//a/ ...a/a
+./...a//.a ...a/.a
+./...a//.. .
+./...a//./ ...a
+./...a///a ...a/a
+./...a///. ...a
+./...a//// ...a
+./....aaaa ....aaaa
+./....aaa. ....aaa.
+./....aaa/ ....aaa
+./....aa.a ....aa.a
+./....aa.. ....aa..
+./....aa./ ....aa.
+./....aa/a ....aa/a
+./....aa/. ....aa
+./....aa// ....aa
+./....a.aa ....a.aa
+./....a.a. ....a.a.
+./....a.a/ ....a.a
+./....a..a ....a..a
+./....a... ....a...
+./....a../ ....a..
+./....a./a ....a./a
+./....a./. ....a.
+./....a.// ....a.
+./....a/aa ....a/aa
+./....a/a. ....a/a.
+./....a/a/ ....a/a
+./....a/.a ....a/.a
+./....a/.. .
+./....a/./ ....a
+./....a//a ....a/a
+./....a//. ....a
+./....a/// ....a
+./.....aaa .....aaa
+./.....aa. .....aa.
+./.....aa/ .....aa
+./.....a.a .....a.a
+./.....a.. .....a..
+./.....a./ .....a.
+./.....a/a .....a/a
+./.....a/. .....a
+./.....a// .....a
+./......aa ......aa
+./......a. ......a.
+./......a/ ......a
+./.......a .......a
+./........ ........
+./......./ .......
+./....../a ....../a
+./....../. ......
+./......// ......
+./...../aa ...../aa
+./...../a. ...../a.
+./...../a/ ...../a
+./...../.a ...../.a
+./...../.. .
+./....././ .....
+./.....//a ...../a
+./.....//. .....
+./...../// .....
+./..../aaa ..../aaa
+./..../aa. ..../aa.
+./..../aa/ ..../aa
+./..../a.a ..../a.a
+./..../a.. ..../a..
+./..../a./ ..../a.
+./..../a/a ..../a/a
+./..../a/. ..../a
+./..../a// ..../a
+./..../.aa ..../.aa
+./..../.a. ..../.a.
+./..../.a/ ..../.a
+./..../..a ..../..a
+./..../... ..../...
+./..../../ .
+./...././a ..../a
+./...././. ....
+./..../.// ....
+./....//aa ..../aa
+./....//a. ..../a.
+./....//a/ ..../a
+./....//.a ..../.a
+./....//.. .
+./....//./ ....
+./....///a ..../a
+./....///. ....
+./....//// ....
+./.../aaaa .../aaaa
+./.../aaa. .../aaa.
+./.../aaa/ .../aaa
+./.../aa.a .../aa.a
+./.../aa.. .../aa..
+./.../aa./ .../aa.
+./.../aa/a .../aa/a
+./.../aa/. .../aa
+./.../aa// .../aa
+./.../a.aa .../a.aa
+./.../a.a. .../a.a.
+./.../a.a/ .../a.a
+./.../a..a .../a..a
+./.../a... .../a...
+./.../a../ .../a..
+./.../a./a .../a./a
+./.../a./. .../a.
+./.../a.// .../a.
+./.../a/aa .../a/aa
+./.../a/a. .../a/a.
+./.../a/a/ .../a/a
+./.../a/.a .../a/.a
+./.../a/.. ...
+./.../a/./ .../a
+./.../a//a .../a/a
+./.../a//. .../a
+./.../a/// .../a
+./.../.aaa .../.aaa
+./.../.aa. .../.aa.
+./.../.aa/ .../.aa
+./.../.a.a .../.a.a
+./.../.a.. .../.a..
+./.../.a./ .../.a.
+./.../.a/a .../.a/a
+./.../.a/. .../.a
+./.../.a// .../.a
+./.../..aa .../..aa
+./.../..a. .../..a.
+./.../..a/ .../..a
+./.../...a .../...a
+./.../.... .../....
+./.../.../ .../...
+./.../../a a
+./.../../. .
+./.../..// .
+./..././aa .../aa
+./..././a. .../a.
+./..././a/ .../a
+./..././.a .../.a
+./..././.. .
+./.../././ ...
+./..././/a .../a
+./..././/. ...
+./..././// ...
+./...//aaa .../aaa
+./...//aa. .../aa.
+./...//aa/ .../aa
+./...//a.a .../a.a
+./...//a.. .../a..
+./...//a./ .../a.
+./...//a/a .../a/a
+./...//a/. .../a
+./...//a// .../a
+./...//.aa .../.aa
+./...//.a. .../.a.
+./...//.a/ .../.a
+./...//..a .../..a
+./...//... .../...
+./...//../ .
+./...//./a .../a
+./...//./. ...
+./...//.// ...
+./...///aa .../aa
+./...///a. .../a.
+./...///a/ .../a
+./...///.a .../.a
+./...///.. .
+./...///./ ...
+./...////a .../a
+./...////. ...
+./...///// ...
+./../aaaaa ../aaaaa
+./../aaaa. ../aaaa.
+./../aaaa/ ../aaaa
+./../aaa.a ../aaa.a
+./../aaa.. ../aaa..
+./../aaa./ ../aaa.
+./../aaa/a ../aaa/a
+./../aaa/. ../aaa
+./../aaa// ../aaa
+./../aa.aa ../aa.aa
+./../aa.a. ../aa.a.
+./../aa.a/ ../aa.a
+./../aa..a ../aa..a
+./../aa... ../aa...
+./../aa../ ../aa..
+./../aa./a ../aa./a
+./../aa./. ../aa.
+./../aa.// ../aa.
+./../aa/aa ../aa/aa
+./../aa/a. ../aa/a.
+./../aa/a/ ../aa/a
+./../aa/.a ../aa/.a
+./../aa/.. ..
+./../aa/./ ../aa
+./../aa//a ../aa/a
+./../aa//. ../aa
+./../aa/// ../aa
+./../a.aaa ../a.aaa
+./../a.aa. ../a.aa.
+./../a.aa/ ../a.aa
+./../a.a.a ../a.a.a
+./../a.a.. ../a.a..
+./../a.a./ ../a.a.
+./../a.a/a ../a.a/a
+./../a.a/. ../a.a
+./../a.a// ../a.a
+./../a..aa ../a..aa
+./../a..a. ../a..a.
+./../a..a/ ../a..a
+./../a...a ../a...a
+./../a.... ../a....
+./../a.../ ../a...
+./../a../a ../a../a
+./../a../. ../a..
+./../a..// ../a..
+./../a./aa ../a./aa
+./../a./a. ../a./a.
+./../a./a/ ../a./a
+./../a./.a ../a./.a
+./../a./.. ..
+./../a././ ../a.
+./../a.//a ../a./a
+./../a.//. ../a.
+./../a./// ../a.
+./../a/aaa ../a/aaa
+./../a/aa. ../a/aa.
+./../a/aa/ ../a/aa
+./../a/a.a ../a/a.a
+./../a/a.. ../a/a..
+./../a/a./ ../a/a.
+./../a/a/a ../a/a/a
+./../a/a/. ../a/a
+./../a/a// ../a/a
+./../a/.aa ../a/.aa
+./../a/.a. ../a/.a.
+./../a/.a/ ../a/.a
+./../a/..a ../a/..a
+./../a/... ../a/...
+./../a/../ ..
+./../a/./a ../a/a
+./../a/./. ../a
+./../a/.// ../a
+./../a//aa ../a/aa
+./../a//a. ../a/a.
+./../a//a/ ../a/a
+./../a//.a ../a/.a
+./../a//.. ..
+./../a//./ ../a
+./../a///a ../a/a
+./../a///. ../a
+./../a//// ../a
+./../.aaaa ../.aaaa
+./../.aaa. ../.aaa.
+./../.aaa/ ../.aaa
+./../.aa.a ../.aa.a
+./../.aa.. ../.aa..
+./../.aa./ ../.aa.
+./../.aa/a ../.aa/a
+./../.aa/. ../.aa
+./../.aa// ../.aa
+./../.a.aa ../.a.aa
+./../.a.a. ../.a.a.
+./../.a.a/ ../.a.a
+./../.a..a ../.a..a
+./../.a... ../.a...
+./../.a../ ../.a..
+./../.a./a ../.a./a
+./../.a./. ../.a.
+./../.a.// ../.a.
+./../.a/aa ../.a/aa
+./../.a/a. ../.a/a.
+./../.a/a/ ../.a/a
+./../.a/.a ../.a/.a
+./../.a/.. ..
+./../.a/./ ../.a
+./../.a//a ../.a/a
+./../.a//. ../.a
+./../.a/// ../.a
+./../..aaa ../..aaa
+./../..aa. ../..aa.
+./../..aa/ ../..aa
+./../..a.a ../..a.a
+./../..a.. ../..a..
+./../..a./ ../..a.
+./../..a/a ../..a/a
+./../..a/. ../..a
+./../..a// ../..a
+./../...aa ../...aa
+./../...a. ../...a.
+./../...a/ ../...a
+./../....a ../....a
+./../..... ../.....
+./../..../ ../....
+./../.../a ../.../a
+./../.../. ../...
+./../...// ../...
+./../../aa ../../aa
+./../../a. ../../a.
+./../../a/ ../../a
+./../../.a ../../.a
+./../../.. ../../..
+./../.././ ../..
+./../..//a ../../a
+./../..//. ../..
+./../../// ../..
+./.././aaa ../aaa
+./.././aa. ../aa.
+./.././aa/ ../aa
+./.././a.a ../a.a
+./.././a.. ../a..
+./.././a./ ../a.
+./.././a/a ../a/a
+./.././a/. ../a
+./.././a// ../a
+./.././.aa ../.aa
+./.././.a. ../.a.
+./.././.a/ ../.a
+./.././..a ../..a
+./.././... ../...
+./.././../ ../..
+./../././a ../a
+./../././. ..
+./.././.// ..
+./.././/aa ../aa
+./.././/a. ../a.
+./.././/a/ ../a
+./.././/.a ../.a
+./.././/.. ../..
+./.././/./ ..
+./.././//a ../a
+./.././//. ..
+./.././/// ..
+./..//aaaa ../aaaa
+./..//aaa. ../aaa.
+./..//aaa/ ../aaa
+./..//aa.a ../aa.a
+./..//aa.. ../aa..
+./..//aa./ ../aa.
+./..//aa/a ../aa/a
+./..//aa/. ../aa
+./..//aa// ../aa
+./..//a.aa ../a.aa
+./..//a.a. ../a.a.
+./..//a.a/ ../a.a
+./..//a..a ../a..a
+./..//a... ../a...
+./..//a../ ../a..
+./..//a./a ../a./a
+./..//a./. ../a.
+./..//a.// ../a.
+./..//a/aa ../a/aa
+./..//a/a. ../a/a.
+./..//a/a/ ../a/a
+./..//a/.a ../a/.a
+./..//a/.. ..
+./..//a/./ ../a
+./..//a//a ../a/a
+./..//a//. ../a
+./..//a/// ../a
+./..//.aaa ../.aaa
+./..//.aa. ../.aa.
+./..//.aa/ ../.aa
+./..//.a.a ../.a.a
+./..//.a.. ../.a..
+./..//.a./ ../.a.
+./..//.a/a ../.a/a
+./..//.a/. ../.a
+./..//.a// ../.a
+./..//..aa ../..aa
+./..//..a. ../..a.
+./..//..a/ ../..a
+./..//...a ../...a
+./..//.... ../....
+./..//.../ ../...
+./..//../a ../../a
+./..//../. ../..
+./..//..// ../..
+./..//./aa ../aa
+./..//./a. ../a.
+./..//./a/ ../a
+./..//./.a ../.a
+./..//./.. ../..
+./..//././ ..
+./..//.//a ../a
+./..//.//. ..
+./..//./// ..
+./..///aaa ../aaa
+./..///aa. ../aa.
+./..///aa/ ../aa
+./..///a.a ../a.a
+./..///a.. ../a..
+./..///a./ ../a.
+./..///a/a ../a/a
+./..///a/. ../a
+./..///a// ../a
+./..///.aa ../.aa
+./..///.a. ../.a.
+./..///.a/ ../.a
+./..///..a ../..a
+./..///... ../...
+./..///../ ../..
+./..///./a ../a
+./..///./. ..
+./..///.// ..
+./..////aa ../aa
+./..////a. ../a.
+./..////a/ ../a
+./..////.a ../.a
+./..////.. ../..
+./..////./ ..
+./../////a ../a
+./../////. ..
+./..////// ..
+././aaaaaa aaaaaa
+././aaaaa. aaaaa.
+././aaaaa/ aaaaa
+././aaaa.a aaaa.a
+././aaaa.. aaaa..
+././aaaa./ aaaa.
+././aaaa/a aaaa/a
+././aaaa/. aaaa
+././aaaa// aaaa
+././aaa.aa aaa.aa
+././aaa.a. aaa.a.
+././aaa.a/ aaa.a
+././aaa..a aaa..a
+././aaa... aaa...
+././aaa../ aaa..
+././aaa./a aaa./a
+././aaa./. aaa.
+././aaa.// aaa.
+././aaa/aa aaa/aa
+././aaa/a. aaa/a.
+././aaa/a/ aaa/a
+././aaa/.a aaa/.a
+././aaa/.. .
+././aaa/./ aaa
+././aaa//a aaa/a
+././aaa//. aaa
+././aaa/// aaa
+././aa.aaa aa.aaa
+././aa.aa. aa.aa.
+././aa.aa/ aa.aa
+././aa.a.a aa.a.a
+././aa.a.. aa.a..
+././aa.a./ aa.a.
+././aa.a/a aa.a/a
+././aa.a/. aa.a
+././aa.a// aa.a
+././aa..aa aa..aa
+././aa..a. aa..a.
+././aa..a/ aa..a
+././aa...a aa...a
+././aa.... aa....
+././aa.../ aa...
+././aa../a aa../a
+././aa../. aa..
+././aa..// aa..
+././aa./aa aa./aa
+././aa./a. aa./a.
+././aa./a/ aa./a
+././aa./.a aa./.a
+././aa./.. .
+././aa././ aa.
+././aa.//a aa./a
+././aa.//. aa.
+././aa./// aa.
+././aa/aaa aa/aaa
+././aa/aa. aa/aa.
+././aa/aa/ aa/aa
+././aa/a.a aa/a.a
+././aa/a.. aa/a..
+././aa/a./ aa/a.
+././aa/a/a aa/a/a
+././aa/a/. aa/a
+././aa/a// aa/a
+././aa/.aa aa/.aa
+././aa/.a. aa/.a.
+././aa/.a/ aa/.a
+././aa/..a aa/..a
+././aa/... aa/...
+././aa/../ .
+././aa/./a aa/a
+././aa/./. aa
+././aa/.// aa
+././aa//aa aa/aa
+././aa//a. aa/a.
+././aa//a/ aa/a
+././aa//.a aa/.a
+././aa//.. .
+././aa//./ aa
+././aa///a aa/a
+././aa///. aa
+././aa//// aa
+././a.aaaa a.aaaa
+././a.aaa. a.aaa.
+././a.aaa/ a.aaa
+././a.aa.a a.aa.a
+././a.aa.. a.aa..
+././a.aa./ a.aa.
+././a.aa/a a.aa/a
+././a.aa/. a.aa
+././a.aa// a.aa
+././a.a.aa a.a.aa
+././a.a.a. a.a.a.
+././a.a.a/ a.a.a
+././a.a..a a.a..a
+././a.a... a.a...
+././a.a../ a.a..
+././a.a./a a.a./a
+././a.a./. a.a.
+././a.a.// a.a.
+././a.a/aa a.a/aa
+././a.a/a. a.a/a.
+././a.a/a/ a.a/a
+././a.a/.a a.a/.a
+././a.a/.. .
+././a.a/./ a.a
+././a.a//a a.a/a
+././a.a//. a.a
+././a.a/// a.a
+././a..aaa a..aaa
+././a..aa. a..aa.
+././a..aa/ a..aa
+././a..a.a a..a.a
+././a..a.. a..a..
+././a..a./ a..a.
+././a..a/a a..a/a
+././a..a/. a..a
+././a..a// a..a
+././a...aa a...aa
+././a...a. a...a.
+././a...a/ a...a
+././a....a a....a
+././a..... a.....
+././a..../ a....
+././a.../a a.../a
+././a.../. a...
+././a...// a...
+././a../aa a../aa
+././a../a. a../a.
+././a../a/ a../a
+././a../.a a../.a
+././a../.. .
+././a.././ a..
+././a..//a a../a
+././a..//. a..
+././a../// a..
+././a./aaa a./aaa
+././a./aa. a./aa.
+././a./aa/ a./aa
+././a./a.a a./a.a
+././a./a.. a./a..
+././a./a./ a./a.
+././a./a/a a./a/a
+././a./a/. a./a
+././a./a// a./a
+././a./.aa a./.aa
+././a./.a. a./.a.
+././a./.a/ a./.a
+././a./..a a./..a
+././a./... a./...
+././a./../ .
+././a././a a./a
+././a././. a.
+././a./.// a.
+././a.//aa a./aa
+././a.//a. a./a.
+././a.//a/ a./a
+././a.//.a a./.a
+././a.//.. .
+././a.//./ a.
+././a.///a a./a
+././a.///. a.
+././a.//// a.
+././a/aaaa a/aaaa
+././a/aaa. a/aaa.
+././a/aaa/ a/aaa
+././a/aa.a a/aa.a
+././a/aa.. a/aa..
+././a/aa./ a/aa.
+././a/aa/a a/aa/a
+././a/aa/. a/aa
+././a/aa// a/aa
+././a/a.aa a/a.aa
+././a/a.a. a/a.a.
+././a/a.a/ a/a.a
+././a/a..a a/a..a
+././a/a... a/a...
+././a/a../ a/a..
+././a/a./a a/a./a
+././a/a./. a/a.
+././a/a.// a/a.
+././a/a/aa a/a/aa
+././a/a/a. a/a/a.
+././a/a/a/ a/a/a
+././a/a/.a a/a/.a
+././a/a/.. a
+././a/a/./ a/a
+././a/a//a a/a/a
+././a/a//. a/a
+././a/a/// a/a
+././a/.aaa a/.aaa
+././a/.aa. a/.aa.
+././a/.aa/ a/.aa
+././a/.a.a a/.a.a
+././a/.a.. a/.a..
+././a/.a./ a/.a.
+././a/.a/a a/.a/a
+././a/.a/. a/.a
+././a/.a// a/.a
+././a/..aa a/..aa
+././a/..a. a/..a.
+././a/..a/ a/..a
+././a/...a a/...a
+././a/.... a/....
+././a/.../ a/...
+././a/../a a
+././a/../. .
+././a/..// .
+././a/./aa a/aa
+././a/./a. a/a.
+././a/./a/ a/a
+././a/./.a a/.a
+././a/./.. .
+././a/././ a
+././a/.//a a/a
+././a/.//. a
+././a/./// a
+././a//aaa a/aaa
+././a//aa. a/aa.
+././a//aa/ a/aa
+././a//a.a a/a.a
+././a//a.. a/a..
+././a//a./ a/a.
+././a//a/a a/a/a
+././a//a/. a/a
+././a//a// a/a
+././a//.aa a/.aa
+././a//.a. a/.a.
+././a//.a/ a/.a
+././a//..a a/..a
+././a//... a/...
+././a//../ .
+././a//./a a/a
+././a//./. a
+././a//.// a
+././a///aa a/aa
+././a///a. a/a.
+././a///a/ a/a
+././a///.a a/.a
+././a///.. .
+././a///./ a
+././a////a a/a
+././a////. a
+././a///// a
+././.aaaaa .aaaaa
+././.aaaa. .aaaa.
+././.aaaa/ .aaaa
+././.aaa.a .aaa.a
+././.aaa.. .aaa..
+././.aaa./ .aaa.
+././.aaa/a .aaa/a
+././.aaa/. .aaa
+././.aaa// .aaa
+././.aa.aa .aa.aa
+././.aa.a. .aa.a.
+././.aa.a/ .aa.a
+././.aa..a .aa..a
+././.aa... .aa...
+././.aa../ .aa..
+././.aa./a .aa./a
+././.aa./. .aa.
+././.aa.// .aa.
+././.aa/aa .aa/aa
+././.aa/a. .aa/a.
+././.aa/a/ .aa/a
+././.aa/.a .aa/.a
+././.aa/.. .
+././.aa/./ .aa
+././.aa//a .aa/a
+././.aa//. .aa
+././.aa/// .aa
+././.a.aaa .a.aaa
+././.a.aa. .a.aa.
+././.a.aa/ .a.aa
+././.a.a.a .a.a.a
+././.a.a.. .a.a..
+././.a.a./ .a.a.
+././.a.a/a .a.a/a
+././.a.a/. .a.a
+././.a.a// .a.a
+././.a..aa .a..aa
+././.a..a. .a..a.
+././.a..a/ .a..a
+././.a...a .a...a
+././.a.... .a....
+././.a.../ .a...
+././.a../a .a../a
+././.a../. .a..
+././.a..// .a..
+././.a./aa .a./aa
+././.a./a. .a./a.
+././.a./a/ .a./a
+././.a./.a .a./.a
+././.a./.. .
+././.a././ .a.
+././.a.//a .a./a
+././.a.//. .a.
+././.a./// .a.
+././.a/aaa .a/aaa
+././.a/aa. .a/aa.
+././.a/aa/ .a/aa
+././.a/a.a .a/a.a
+././.a/a.. .a/a..
+././.a/a./ .a/a.
+././.a/a/a .a/a/a
+././.a/a/. .a/a
+././.a/a// .a/a
+././.a/.aa .a/.aa
+././.a/.a. .a/.a.
+././.a/.a/ .a/.a
+././.a/..a .a/..a
+././.a/... .a/...
+././.a/../ .
+././.a/./a .a/a
+././.a/./. .a
+././.a/.// .a
+././.a//aa .a/aa
+././.a//a. .a/a.
+././.a//a/ .a/a
+././.a//.a .a/.a
+././.a//.. .
+././.a//./ .a
+././.a///a .a/a
+././.a///. .a
+././.a//// .a
+././..aaaa ..aaaa
+././..aaa. ..aaa.
+././..aaa/ ..aaa
+././..aa.a ..aa.a
+././..aa.. ..aa..
+././..aa./ ..aa.
+././..aa/a ..aa/a
+././..aa/. ..aa
+././..aa// ..aa
+././..a.aa ..a.aa
+././..a.a. ..a.a.
+././..a.a/ ..a.a
+././..a..a ..a..a
+././..a... ..a...
+././..a../ ..a..
+././..a./a ..a./a
+././..a./. ..a.
+././..a.// ..a.
+././..a/aa ..a/aa
+././..a/a. ..a/a.
+././..a/a/ ..a/a
+././..a/.a ..a/.a
+././..a/.. .
+././..a/./ ..a
+././..a//a ..a/a
+././..a//. ..a
+././..a/// ..a
+././...aaa ...aaa
+././...aa. ...aa.
+././...aa/ ...aa
+././...a.a ...a.a
+././...a.. ...a..
+././...a./ ...a.
+././...a/a ...a/a
+././...a/. ...a
+././...a// ...a
+././....aa ....aa
+././....a. ....a.
+././....a/ ....a
+././.....a .....a
+././...... ......
+././...../ .....
+././..../a ..../a
+././..../. ....
+././....// ....
+././.../aa .../aa
+././.../a. .../a.
+././.../a/ .../a
+././.../.a .../.a
+././.../.. .
+././..././ ...
+././...//a .../a
+././...//. ...
+././.../// ...
+././../aaa ../aaa
+././../aa. ../aa.
+././../aa/ ../aa
+././../a.a ../a.a
+././../a.. ../a..
+././../a./ ../a.
+././../a/a ../a/a
+././../a/. ../a
+././../a// ../a
+././../.aa ../.aa
+././../.a. ../.a.
+././../.a/ ../.a
+././../..a ../..a
+././../... ../...
+././../../ ../..
+././.././a ../a
+././.././. ..
+././../.// ..
+././..//aa ../aa
+././..//a. ../a.
+././..//a/ ../a
+././..//.a ../.a
+././..//.. ../..
+././..//./ ..
+././..///a ../a
+././..///. ..
+././..//// ..
+./././aaaa aaaa
+./././aaa. aaa.
+./././aaa/ aaa
+./././aa.a aa.a
+./././aa.. aa..
+./././aa./ aa.
+./././aa/a aa/a
+./././aa/. aa
+./././aa// aa
+./././a.aa a.aa
+./././a.a. a.a.
+./././a.a/ a.a
+./././a..a a..a
+./././a... a...
+./././a../ a..
+./././a./a a./a
+./././a./. a.
+./././a.// a.
+./././a/aa a/aa
+./././a/a. a/a.
+./././a/a/ a/a
+./././a/.a a/.a
+./././a/.. .
+./././a/./ a
+./././a//a a/a
+./././a//. a
+./././a/// a
+./././.aaa .aaa
+./././.aa. .aa.
+./././.aa/ .aa
+./././.a.a .a.a
+./././.a.. .a..
+./././.a./ .a.
+./././.a/a .a/a
+./././.a/. .a
+./././.a// .a
+./././..aa ..aa
+./././..a. ..a.
+./././..a/ ..a
+./././...a ...a
+./././.... ....
+./././.../ ...
+./././../a ../a
+./././../. ..
+./././..// ..
+././././aa aa
+././././a. a.
+././././a/ a
+././././.a .a
+././././.. ..
+./././././ .
+././././/a a
+././././/. .
+././././// .
+./././/aaa aaa
+./././/aa. aa.
+./././/aa/ aa
+./././/a.a a.a
+./././/a.. a..
+./././/a./ a.
+./././/a/a a/a
+./././/a/. a
+./././/a// a
+./././/.aa .aa
+./././/.a. .a.
+./././/.a/ .a
+./././/..a ..a
+./././/... ...
+./././/../ ..
+./././/./a a
+./././/./. .
+./././/.// .
+./././//aa aa
+./././//a. a.
+./././//a/ a
+./././//.a .a
+./././//.. ..
+./././//./ .
+./././///a a
+./././///. .
+./././//// .
+././/aaaaa aaaaa
+././/aaaa. aaaa.
+././/aaaa/ aaaa
+././/aaa.a aaa.a
+././/aaa.. aaa..
+././/aaa./ aaa.
+././/aaa/a aaa/a
+././/aaa/. aaa
+././/aaa// aaa
+././/aa.aa aa.aa
+././/aa.a. aa.a.
+././/aa.a/ aa.a
+././/aa..a aa..a
+././/aa... aa...
+././/aa../ aa..
+././/aa./a aa./a
+././/aa./. aa.
+././/aa.// aa.
+././/aa/aa aa/aa
+././/aa/a. aa/a.
+././/aa/a/ aa/a
+././/aa/.a aa/.a
+././/aa/.. .
+././/aa/./ aa
+././/aa//a aa/a
+././/aa//. aa
+././/aa/// aa
+././/a.aaa a.aaa
+././/a.aa. a.aa.
+././/a.aa/ a.aa
+././/a.a.a a.a.a
+././/a.a.. a.a..
+././/a.a./ a.a.
+././/a.a/a a.a/a
+././/a.a/. a.a
+././/a.a// a.a
+././/a..aa a..aa
+././/a..a. a..a.
+././/a..a/ a..a
+././/a...a a...a
+././/a.... a....
+././/a.../ a...
+././/a../a a../a
+././/a../. a..
+././/a..// a..
+././/a./aa a./aa
+././/a./a. a./a.
+././/a./a/ a./a
+././/a./.a a./.a
+././/a./.. .
+././/a././ a.
+././/a.//a a./a
+././/a.//. a.
+././/a./// a.
+././/a/aaa a/aaa
+././/a/aa. a/aa.
+././/a/aa/ a/aa
+././/a/a.a a/a.a
+././/a/a.. a/a..
+././/a/a./ a/a.
+././/a/a/a a/a/a
+././/a/a/. a/a
+././/a/a// a/a
+././/a/.aa a/.aa
+././/a/.a. a/.a.
+././/a/.a/ a/.a
+././/a/..a a/..a
+././/a/... a/...
+././/a/../ .
+././/a/./a a/a
+././/a/./. a
+././/a/.// a
+././/a//aa a/aa
+././/a//a. a/a.
+././/a//a/ a/a
+././/a//.a a/.a
+././/a//.. .
+././/a//./ a
+././/a///a a/a
+././/a///. a
+././/a//// a
+././/.aaaa .aaaa
+././/.aaa. .aaa.
+././/.aaa/ .aaa
+././/.aa.a .aa.a
+././/.aa.. .aa..
+././/.aa./ .aa.
+././/.aa/a .aa/a
+././/.aa/. .aa
+././/.aa// .aa
+././/.a.aa .a.aa
+././/.a.a. .a.a.
+././/.a.a/ .a.a
+././/.a..a .a..a
+././/.a... .a...
+././/.a../ .a..
+././/.a./a .a./a
+././/.a./. .a.
+././/.a.// .a.
+././/.a/aa .a/aa
+././/.a/a. .a/a.
+././/.a/a/ .a/a
+././/.a/.a .a/.a
+././/.a/.. .
+././/.a/./ .a
+././/.a//a .a/a
+././/.a//. .a
+././/.a/// .a
+././/..aaa ..aaa
+././/..aa. ..aa.
+././/..aa/ ..aa
+././/..a.a ..a.a
+././/..a.. ..a..
+././/..a./ ..a.
+././/..a/a ..a/a
+././/..a/. ..a
+././/..a// ..a
+././/...aa ...aa
+././/...a. ...a.
+././/...a/ ...a
+././/....a ....a
+././/..... .....
+././/..../ ....
+././/.../a .../a
+././/.../. ...
+././/...// ...
+././/../aa ../aa
+././/../a. ../a.
+././/../a/ ../a
+././/../.a ../.a
+././/../.. ../..
+././/.././ ..
+././/..//a ../a
+././/..//. ..
+././/../// ..
+././/./aaa aaa
+././/./aa. aa.
+././/./aa/ aa
+././/./a.a a.a
+././/./a.. a..
+././/./a./ a.
+././/./a/a a/a
+././/./a/. a
+././/./a// a
+././/./.aa .aa
+././/./.a. .a.
+././/./.a/ .a
+././/./..a ..a
+././/./... ...
+././/./../ ..
+././/././a a
+././/././. .
+././/./.// .
+././/.//aa aa
+././/.//a. a.
+././/.//a/ a
+././/.//.a .a
+././/.//.. ..
+././/.//./ .
+././/.///a a
+././/.///. .
+././/.//// .
+././//aaaa aaaa
+././//aaa. aaa.
+././//aaa/ aaa
+././//aa.a aa.a
+././//aa.. aa..
+././//aa./ aa.
+././//aa/a aa/a
+././//aa/. aa
+././//aa// aa
+././//a.aa a.aa
+././//a.a. a.a.
+././//a.a/ a.a
+././//a..a a..a
+././//a... a...
+././//a../ a..
+././//a./a a./a
+././//a./. a.
+././//a.// a.
+././//a/aa a/aa
+././//a/a. a/a.
+././//a/a/ a/a
+././//a/.a a/.a
+././//a/.. .
+././//a/./ a
+././//a//a a/a
+././//a//. a
+././//a/// a
+././//.aaa .aaa
+././//.aa. .aa.
+././//.aa/ .aa
+././//.a.a .a.a
+././//.a.. .a..
+././//.a./ .a.
+././//.a/a .a/a
+././//.a/. .a
+././//.a// .a
+././//..aa ..aa
+././//..a. ..a.
+././//..a/ ..a
+././//...a ...a
+././//.... ....
+././//.../ ...
+././//../a ../a
+././//../. ..
+././//..// ..
+././//./aa aa
+././//./a. a.
+././//./a/ a
+././//./.a .a
+././//./.. ..
+././//././ .
+././//.//a a
+././//.//. .
+././//./// .
+././///aaa aaa
+././///aa. aa.
+././///aa/ aa
+././///a.a a.a
+././///a.. a..
+././///a./ a.
+././///a/a a/a
+././///a/. a
+././///a// a
+././///.aa .aa
+././///.a. .a.
+././///.a/ .a
+././///..a ..a
+././///... ...
+././///../ ..
+././///./a a
+././///./. .
+././///.// .
+././////aa aa
+././////a. a.
+././////a/ a
+././////.a .a
+././////.. ..
+././////./ .
+././/////a a
+././/////. .
+././////// .
+.//aaaaaaa aaaaaaa
+.//aaaaaa. aaaaaa.
+.//aaaaaa/ aaaaaa
+.//aaaaa.a aaaaa.a
+.//aaaaa.. aaaaa..
+.//aaaaa./ aaaaa.
+.//aaaaa/a aaaaa/a
+.//aaaaa/. aaaaa
+.//aaaaa// aaaaa
+.//aaaa.aa aaaa.aa
+.//aaaa.a. aaaa.a.
+.//aaaa.a/ aaaa.a
+.//aaaa..a aaaa..a
+.//aaaa... aaaa...
+.//aaaa../ aaaa..
+.//aaaa./a aaaa./a
+.//aaaa./. aaaa.
+.//aaaa.// aaaa.
+.//aaaa/aa aaaa/aa
+.//aaaa/a. aaaa/a.
+.//aaaa/a/ aaaa/a
+.//aaaa/.a aaaa/.a
+.//aaaa/.. .
+.//aaaa/./ aaaa
+.//aaaa//a aaaa/a
+.//aaaa//. aaaa
+.//aaaa/// aaaa
+.//aaa.aaa aaa.aaa
+.//aaa.aa. aaa.aa.
+.//aaa.aa/ aaa.aa
+.//aaa.a.a aaa.a.a
+.//aaa.a.. aaa.a..
+.//aaa.a./ aaa.a.
+.//aaa.a/a aaa.a/a
+.//aaa.a/. aaa.a
+.//aaa.a// aaa.a
+.//aaa..aa aaa..aa
+.//aaa..a. aaa..a.
+.//aaa..a/ aaa..a
+.//aaa...a aaa...a
+.//aaa.... aaa....
+.//aaa.../ aaa...
+.//aaa../a aaa../a
+.//aaa../. aaa..
+.//aaa..// aaa..
+.//aaa./aa aaa./aa
+.//aaa./a. aaa./a.
+.//aaa./a/ aaa./a
+.//aaa./.a aaa./.a
+.//aaa./.. .
+.//aaa././ aaa.
+.//aaa.//a aaa./a
+.//aaa.//. aaa.
+.//aaa./// aaa.
+.//aaa/aaa aaa/aaa
+.//aaa/aa. aaa/aa.
+.//aaa/aa/ aaa/aa
+.//aaa/a.a aaa/a.a
+.//aaa/a.. aaa/a..
+.//aaa/a./ aaa/a.
+.//aaa/a/a aaa/a/a
+.//aaa/a/. aaa/a
+.//aaa/a// aaa/a
+.//aaa/.aa aaa/.aa
+.//aaa/.a. aaa/.a.
+.//aaa/.a/ aaa/.a
+.//aaa/..a aaa/..a
+.//aaa/... aaa/...
+.//aaa/../ .
+.//aaa/./a aaa/a
+.//aaa/./. aaa
+.//aaa/.// aaa
+.//aaa//aa aaa/aa
+.//aaa//a. aaa/a.
+.//aaa//a/ aaa/a
+.//aaa//.a aaa/.a
+.//aaa//.. .
+.//aaa//./ aaa
+.//aaa///a aaa/a
+.//aaa///. aaa
+.//aaa//// aaa
+.//aa.aaaa aa.aaaa
+.//aa.aaa. aa.aaa.
+.//aa.aaa/ aa.aaa
+.//aa.aa.a aa.aa.a
+.//aa.aa.. aa.aa..
+.//aa.aa./ aa.aa.
+.//aa.aa/a aa.aa/a
+.//aa.aa/. aa.aa
+.//aa.aa// aa.aa
+.//aa.a.aa aa.a.aa
+.//aa.a.a. aa.a.a.
+.//aa.a.a/ aa.a.a
+.//aa.a..a aa.a..a
+.//aa.a... aa.a...
+.//aa.a../ aa.a..
+.//aa.a./a aa.a./a
+.//aa.a./. aa.a.
+.//aa.a.// aa.a.
+.//aa.a/aa aa.a/aa
+.//aa.a/a. aa.a/a.
+.//aa.a/a/ aa.a/a
+.//aa.a/.a aa.a/.a
+.//aa.a/.. .
+.//aa.a/./ aa.a
+.//aa.a//a aa.a/a
+.//aa.a//. aa.a
+.//aa.a/// aa.a
+.//aa..aaa aa..aaa
+.//aa..aa. aa..aa.
+.//aa..aa/ aa..aa
+.//aa..a.a aa..a.a
+.//aa..a.. aa..a..
+.//aa..a./ aa..a.
+.//aa..a/a aa..a/a
+.//aa..a/. aa..a
+.//aa..a// aa..a
+.//aa...aa aa...aa
+.//aa...a. aa...a.
+.//aa...a/ aa...a
+.//aa....a aa....a
+.//aa..... aa.....
+.//aa..../ aa....
+.//aa.../a aa.../a
+.//aa.../. aa...
+.//aa...// aa...
+.//aa../aa aa../aa
+.//aa../a. aa../a.
+.//aa../a/ aa../a
+.//aa../.a aa../.a
+.//aa../.. .
+.//aa.././ aa..
+.//aa..//a aa../a
+.//aa..//. aa..
+.//aa../// aa..
+.//aa./aaa aa./aaa
+.//aa./aa. aa./aa.
+.//aa./aa/ aa./aa
+.//aa./a.a aa./a.a
+.//aa./a.. aa./a..
+.//aa./a./ aa./a.
+.//aa./a/a aa./a/a
+.//aa./a/. aa./a
+.//aa./a// aa./a
+.//aa./.aa aa./.aa
+.//aa./.a. aa./.a.
+.//aa./.a/ aa./.a
+.//aa./..a aa./..a
+.//aa./... aa./...
+.//aa./../ .
+.//aa././a aa./a
+.//aa././. aa.
+.//aa./.// aa.
+.//aa.//aa aa./aa
+.//aa.//a. aa./a.
+.//aa.//a/ aa./a
+.//aa.//.a aa./.a
+.//aa.//.. .
+.//aa.//./ aa.
+.//aa.///a aa./a
+.//aa.///. aa.
+.//aa.//// aa.
+.//aa/aaaa aa/aaaa
+.//aa/aaa. aa/aaa.
+.//aa/aaa/ aa/aaa
+.//aa/aa.a aa/aa.a
+.//aa/aa.. aa/aa..
+.//aa/aa./ aa/aa.
+.//aa/aa/a aa/aa/a
+.//aa/aa/. aa/aa
+.//aa/aa// aa/aa
+.//aa/a.aa aa/a.aa
+.//aa/a.a. aa/a.a.
+.//aa/a.a/ aa/a.a
+.//aa/a..a aa/a..a
+.//aa/a... aa/a...
+.//aa/a../ aa/a..
+.//aa/a./a aa/a./a
+.//aa/a./. aa/a.
+.//aa/a.// aa/a.
+.//aa/a/aa aa/a/aa
+.//aa/a/a. aa/a/a.
+.//aa/a/a/ aa/a/a
+.//aa/a/.a aa/a/.a
+.//aa/a/.. aa
+.//aa/a/./ aa/a
+.//aa/a//a aa/a/a
+.//aa/a//. aa/a
+.//aa/a/// aa/a
+.//aa/.aaa aa/.aaa
+.//aa/.aa. aa/.aa.
+.//aa/.aa/ aa/.aa
+.//aa/.a.a aa/.a.a
+.//aa/.a.. aa/.a..
+.//aa/.a./ aa/.a.
+.//aa/.a/a aa/.a/a
+.//aa/.a/. aa/.a
+.//aa/.a// aa/.a
+.//aa/..aa aa/..aa
+.//aa/..a. aa/..a.
+.//aa/..a/ aa/..a
+.//aa/...a aa/...a
+.//aa/.... aa/....
+.//aa/.../ aa/...
+.//aa/../a a
+.//aa/../. .
+.//aa/..// .
+.//aa/./aa aa/aa
+.//aa/./a. aa/a.
+.//aa/./a/ aa/a
+.//aa/./.a aa/.a
+.//aa/./.. .
+.//aa/././ aa
+.//aa/.//a aa/a
+.//aa/.//. aa
+.//aa/./// aa
+.//aa//aaa aa/aaa
+.//aa//aa. aa/aa.
+.//aa//aa/ aa/aa
+.//aa//a.a aa/a.a
+.//aa//a.. aa/a..
+.//aa//a./ aa/a.
+.//aa//a/a aa/a/a
+.//aa//a/. aa/a
+.//aa//a// aa/a
+.//aa//.aa aa/.aa
+.//aa//.a. aa/.a.
+.//aa//.a/ aa/.a
+.//aa//..a aa/..a
+.//aa//... aa/...
+.//aa//../ .
+.//aa//./a aa/a
+.//aa//./. aa
+.//aa//.// aa
+.//aa///aa aa/aa
+.//aa///a. aa/a.
+.//aa///a/ aa/a
+.//aa///.a aa/.a
+.//aa///.. .
+.//aa///./ aa
+.//aa////a aa/a
+.//aa////. aa
+.//aa///// aa
+.//a.aaaaa a.aaaaa
+.//a.aaaa. a.aaaa.
+.//a.aaaa/ a.aaaa
+.//a.aaa.a a.aaa.a
+.//a.aaa.. a.aaa..
+.//a.aaa./ a.aaa.
+.//a.aaa/a a.aaa/a
+.//a.aaa/. a.aaa
+.//a.aaa// a.aaa
+.//a.aa.aa a.aa.aa
+.//a.aa.a. a.aa.a.
+.//a.aa.a/ a.aa.a
+.//a.aa..a a.aa..a
+.//a.aa... a.aa...
+.//a.aa../ a.aa..
+.//a.aa./a a.aa./a
+.//a.aa./. a.aa.
+.//a.aa.// a.aa.
+.//a.aa/aa a.aa/aa
+.//a.aa/a. a.aa/a.
+.//a.aa/a/ a.aa/a
+.//a.aa/.a a.aa/.a
+.//a.aa/.. .
+.//a.aa/./ a.aa
+.//a.aa//a a.aa/a
+.//a.aa//. a.aa
+.//a.aa/// a.aa
+.//a.a.aaa a.a.aaa
+.//a.a.aa. a.a.aa.
+.//a.a.aa/ a.a.aa
+.//a.a.a.a a.a.a.a
+.//a.a.a.. a.a.a..
+.//a.a.a./ a.a.a.
+.//a.a.a/a a.a.a/a
+.//a.a.a/. a.a.a
+.//a.a.a// a.a.a
+.//a.a..aa a.a..aa
+.//a.a..a. a.a..a.
+.//a.a..a/ a.a..a
+.//a.a...a a.a...a
+.//a.a.... a.a....
+.//a.a.../ a.a...
+.//a.a../a a.a../a
+.//a.a../. a.a..
+.//a.a..// a.a..
+.//a.a./aa a.a./aa
+.//a.a./a. a.a./a.
+.//a.a./a/ a.a./a
+.//a.a./.a a.a./.a
+.//a.a./.. .
+.//a.a././ a.a.
+.//a.a.//a a.a./a
+.//a.a.//. a.a.
+.//a.a./// a.a.
+.//a.a/aaa a.a/aaa
+.//a.a/aa. a.a/aa.
+.//a.a/aa/ a.a/aa
+.//a.a/a.a a.a/a.a
+.//a.a/a.. a.a/a..
+.//a.a/a./ a.a/a.
+.//a.a/a/a a.a/a/a
+.//a.a/a/. a.a/a
+.//a.a/a// a.a/a
+.//a.a/.aa a.a/.aa
+.//a.a/.a. a.a/.a.
+.//a.a/.a/ a.a/.a
+.//a.a/..a a.a/..a
+.//a.a/... a.a/...
+.//a.a/../ .
+.//a.a/./a a.a/a
+.//a.a/./. a.a
+.//a.a/.// a.a
+.//a.a//aa a.a/aa
+.//a.a//a. a.a/a.
+.//a.a//a/ a.a/a
+.//a.a//.a a.a/.a
+.//a.a//.. .
+.//a.a//./ a.a
+.//a.a///a a.a/a
+.//a.a///. a.a
+.//a.a//// a.a
+.//a..aaaa a..aaaa
+.//a..aaa. a..aaa.
+.//a..aaa/ a..aaa
+.//a..aa.a a..aa.a
+.//a..aa.. a..aa..
+.//a..aa./ a..aa.
+.//a..aa/a a..aa/a
+.//a..aa/. a..aa
+.//a..aa// a..aa
+.//a..a.aa a..a.aa
+.//a..a.a. a..a.a.
+.//a..a.a/ a..a.a
+.//a..a..a a..a..a
+.//a..a... a..a...
+.//a..a../ a..a..
+.//a..a./a a..a./a
+.//a..a./. a..a.
+.//a..a.// a..a.
+.//a..a/aa a..a/aa
+.//a..a/a. a..a/a.
+.//a..a/a/ a..a/a
+.//a..a/.a a..a/.a
+.//a..a/.. .
+.//a..a/./ a..a
+.//a..a//a a..a/a
+.//a..a//. a..a
+.//a..a/// a..a
+.//a...aaa a...aaa
+.//a...aa. a...aa.
+.//a...aa/ a...aa
+.//a...a.a a...a.a
+.//a...a.. a...a..
+.//a...a./ a...a.
+.//a...a/a a...a/a
+.//a...a/. a...a
+.//a...a// a...a
+.//a....aa a....aa
+.//a....a. a....a.
+.//a....a/ a....a
+.//a.....a a.....a
+.//a...... a......
+.//a...../ a.....
+.//a..../a a..../a
+.//a..../. a....
+.//a....// a....
+.//a.../aa a.../aa
+.//a.../a. a.../a.
+.//a.../a/ a.../a
+.//a.../.a a.../.a
+.//a.../.. .
+.//a..././ a...
+.//a...//a a.../a
+.//a...//. a...
+.//a.../// a...
+.//a../aaa a../aaa
+.//a../aa. a../aa.
+.//a../aa/ a../aa
+.//a../a.a a../a.a
+.//a../a.. a../a..
+.//a../a./ a../a.
+.//a../a/a a../a/a
+.//a../a/. a../a
+.//a../a// a../a
+.//a../.aa a../.aa
+.//a../.a. a../.a.
+.//a../.a/ a../.a
+.//a../..a a../..a
+.//a../... a../...
+.//a../../ .
+.//a.././a a../a
+.//a.././. a..
+.//a../.// a..
+.//a..//aa a../aa
+.//a..//a. a../a.
+.//a..//a/ a../a
+.//a..//.a a../.a
+.//a..//.. .
+.//a..//./ a..
+.//a..///a a../a
+.//a..///. a..
+.//a..//// a..
+.//a./aaaa a./aaaa
+.//a./aaa. a./aaa.
+.//a./aaa/ a./aaa
+.//a./aa.a a./aa.a
+.//a./aa.. a./aa..
+.//a./aa./ a./aa.
+.//a./aa/a a./aa/a
+.//a./aa/. a./aa
+.//a./aa// a./aa
+.//a./a.aa a./a.aa
+.//a./a.a. a./a.a.
+.//a./a.a/ a./a.a
+.//a./a..a a./a..a
+.//a./a... a./a...
+.//a./a../ a./a..
+.//a./a./a a./a./a
+.//a./a./. a./a.
+.//a./a.// a./a.
+.//a./a/aa a./a/aa
+.//a./a/a. a./a/a.
+.//a./a/a/ a./a/a
+.//a./a/.a a./a/.a
+.//a./a/.. a.
+.//a./a/./ a./a
+.//a./a//a a./a/a
+.//a./a//. a./a
+.//a./a/// a./a
+.//a./.aaa a./.aaa
+.//a./.aa. a./.aa.
+.//a./.aa/ a./.aa
+.//a./.a.a a./.a.a
+.//a./.a.. a./.a..
+.//a./.a./ a./.a.
+.//a./.a/a a./.a/a
+.//a./.a/. a./.a
+.//a./.a// a./.a
+.//a./..aa a./..aa
+.//a./..a. a./..a.
+.//a./..a/ a./..a
+.//a./...a a./...a
+.//a./.... a./....
+.//a./.../ a./...
+.//a./../a a
+.//a./../. .
+.//a./..// .
+.//a././aa a./aa
+.//a././a. a./a.
+.//a././a/ a./a
+.//a././.a a./.a
+.//a././.. .
+.//a./././ a.
+.//a././/a a./a
+.//a././/. a.
+.//a././// a.
+.//a.//aaa a./aaa
+.//a.//aa. a./aa.
+.//a.//aa/ a./aa
+.//a.//a.a a./a.a
+.//a.//a.. a./a..
+.//a.//a./ a./a.
+.//a.//a/a a./a/a
+.//a.//a/. a./a
+.//a.//a// a./a
+.//a.//.aa a./.aa
+.//a.//.a. a./.a.
+.//a.//.a/ a./.a
+.//a.//..a a./..a
+.//a.//... a./...
+.//a.//../ .
+.//a.//./a a./a
+.//a.//./. a.
+.//a.//.// a.
+.//a.///aa a./aa
+.//a.///a. a./a.
+.//a.///a/ a./a
+.//a.///.a a./.a
+.//a.///.. .
+.//a.///./ a.
+.//a.////a a./a
+.//a.////. a.
+.//a.///// a.
+.//a/aaaaa a/aaaaa
+.//a/aaaa. a/aaaa.
+.//a/aaaa/ a/aaaa
+.//a/aaa.a a/aaa.a
+.//a/aaa.. a/aaa..
+.//a/aaa./ a/aaa.
+.//a/aaa/a a/aaa/a
+.//a/aaa/. a/aaa
+.//a/aaa// a/aaa
+.//a/aa.aa a/aa.aa
+.//a/aa.a. a/aa.a.
+.//a/aa.a/ a/aa.a
+.//a/aa..a a/aa..a
+.//a/aa... a/aa...
+.//a/aa../ a/aa..
+.//a/aa./a a/aa./a
+.//a/aa./. a/aa.
+.//a/aa.// a/aa.
+.//a/aa/aa a/aa/aa
+.//a/aa/a. a/aa/a.
+.//a/aa/a/ a/aa/a
+.//a/aa/.a a/aa/.a
+.//a/aa/.. a
+.//a/aa/./ a/aa
+.//a/aa//a a/aa/a
+.//a/aa//. a/aa
+.//a/aa/// a/aa
+.//a/a.aaa a/a.aaa
+.//a/a.aa. a/a.aa.
+.//a/a.aa/ a/a.aa
+.//a/a.a.a a/a.a.a
+.//a/a.a.. a/a.a..
+.//a/a.a./ a/a.a.
+.//a/a.a/a a/a.a/a
+.//a/a.a/. a/a.a
+.//a/a.a// a/a.a
+.//a/a..aa a/a..aa
+.//a/a..a. a/a..a.
+.//a/a..a/ a/a..a
+.//a/a...a a/a...a
+.//a/a.... a/a....
+.//a/a.../ a/a...
+.//a/a../a a/a../a
+.//a/a../. a/a..
+.//a/a..// a/a..
+.//a/a./aa a/a./aa
+.//a/a./a. a/a./a.
+.//a/a./a/ a/a./a
+.//a/a./.a a/a./.a
+.//a/a./.. a
+.//a/a././ a/a.
+.//a/a.//a a/a./a
+.//a/a.//. a/a.
+.//a/a./// a/a.
+.//a/a/aaa a/a/aaa
+.//a/a/aa. a/a/aa.
+.//a/a/aa/ a/a/aa
+.//a/a/a.a a/a/a.a
+.//a/a/a.. a/a/a..
+.//a/a/a./ a/a/a.
+.//a/a/a/a a/a/a/a
+.//a/a/a/. a/a/a
+.//a/a/a// a/a/a
+.//a/a/.aa a/a/.aa
+.//a/a/.a. a/a/.a.
+.//a/a/.a/ a/a/.a
+.//a/a/..a a/a/..a
+.//a/a/... a/a/...
+.//a/a/../ a
+.//a/a/./a a/a/a
+.//a/a/./. a/a
+.//a/a/.// a/a
+.//a/a//aa a/a/aa
+.//a/a//a. a/a/a.
+.//a/a//a/ a/a/a
+.//a/a//.a a/a/.a
+.//a/a//.. a
+.//a/a//./ a/a
+.//a/a///a a/a/a
+.//a/a///. a/a
+.//a/a//// a/a
+.//a/.aaaa a/.aaaa
+.//a/.aaa. a/.aaa.
+.//a/.aaa/ a/.aaa
+.//a/.aa.a a/.aa.a
+.//a/.aa.. a/.aa..
+.//a/.aa./ a/.aa.
+.//a/.aa/a a/.aa/a
+.//a/.aa/. a/.aa
+.//a/.aa// a/.aa
+.//a/.a.aa a/.a.aa
+.//a/.a.a. a/.a.a.
+.//a/.a.a/ a/.a.a
+.//a/.a..a a/.a..a
+.//a/.a... a/.a...
+.//a/.a../ a/.a..
+.//a/.a./a a/.a./a
+.//a/.a./. a/.a.
+.//a/.a.// a/.a.
+.//a/.a/aa a/.a/aa
+.//a/.a/a. a/.a/a.
+.//a/.a/a/ a/.a/a
+.//a/.a/.a a/.a/.a
+.//a/.a/.. a
+.//a/.a/./ a/.a
+.//a/.a//a a/.a/a
+.//a/.a//. a/.a
+.//a/.a/// a/.a
+.//a/..aaa a/..aaa
+.//a/..aa. a/..aa.
+.//a/..aa/ a/..aa
+.//a/..a.a a/..a.a
+.//a/..a.. a/..a..
+.//a/..a./ a/..a.
+.//a/..a/a a/..a/a
+.//a/..a/. a/..a
+.//a/..a// a/..a
+.//a/...aa a/...aa
+.//a/...a. a/...a.
+.//a/...a/ a/...a
+.//a/....a a/....a
+.//a/..... a/.....
+.//a/..../ a/....
+.//a/.../a a/.../a
+.//a/.../. a/...
+.//a/...// a/...
+.//a/../aa aa
+.//a/../a. a.
+.//a/../a/ a
+.//a/../.a .a
+.//a/../.. ..
+.//a/.././ .
+.//a/..//a a
+.//a/..//. .
+.//a/../// .
+.//a/./aaa a/aaa
+.//a/./aa. a/aa.
+.//a/./aa/ a/aa
+.//a/./a.a a/a.a
+.//a/./a.. a/a..
+.//a/./a./ a/a.
+.//a/./a/a a/a/a
+.//a/./a/. a/a
+.//a/./a// a/a
+.//a/./.aa a/.aa
+.//a/./.a. a/.a.
+.//a/./.a/ a/.a
+.//a/./..a a/..a
+.//a/./... a/...
+.//a/./../ .
+.//a/././a a/a
+.//a/././. a
+.//a/./.// a
+.//a/.//aa a/aa
+.//a/.//a. a/a.
+.//a/.//a/ a/a
+.//a/.//.a a/.a
+.//a/.//.. .
+.//a/.//./ a
+.//a/.///a a/a
+.//a/.///. a
+.//a/.//// a
+.//a//aaaa a/aaaa
+.//a//aaa. a/aaa.
+.//a//aaa/ a/aaa
+.//a//aa.a a/aa.a
+.//a//aa.. a/aa..
+.//a//aa./ a/aa.
+.//a//aa/a a/aa/a
+.//a//aa/. a/aa
+.//a//aa// a/aa
+.//a//a.aa a/a.aa
+.//a//a.a. a/a.a.
+.//a//a.a/ a/a.a
+.//a//a..a a/a..a
+.//a//a... a/a...
+.//a//a../ a/a..
+.//a//a./a a/a./a
+.//a//a./. a/a.
+.//a//a.// a/a.
+.//a//a/aa a/a/aa
+.//a//a/a. a/a/a.
+.//a//a/a/ a/a/a
+.//a//a/.a a/a/.a
+.//a//a/.. a
+.//a//a/./ a/a
+.//a//a//a a/a/a
+.//a//a//. a/a
+.//a//a/// a/a
+.//a//.aaa a/.aaa
+.//a//.aa. a/.aa.
+.//a//.aa/ a/.aa
+.//a//.a.a a/.a.a
+.//a//.a.. a/.a..
+.//a//.a./ a/.a.
+.//a//.a/a a/.a/a
+.//a//.a/. a/.a
+.//a//.a// a/.a
+.//a//..aa a/..aa
+.//a//..a. a/..a.
+.//a//..a/ a/..a
+.//a//...a a/...a
+.//a//.... a/....
+.//a//.../ a/...
+.//a//../a a
+.//a//../. .
+.//a//..// .
+.//a//./aa a/aa
+.//a//./a. a/a.
+.//a//./a/ a/a
+.//a//./.a a/.a
+.//a//./.. .
+.//a//././ a
+.//a//.//a a/a
+.//a//.//. a
+.//a//./// a
+.//a///aaa a/aaa
+.//a///aa. a/aa.
+.//a///aa/ a/aa
+.//a///a.a a/a.a
+.//a///a.. a/a..
+.//a///a./ a/a.
+.//a///a/a a/a/a
+.//a///a/. a/a
+.//a///a// a/a
+.//a///.aa a/.aa
+.//a///.a. a/.a.
+.//a///.a/ a/.a
+.//a///..a a/..a
+.//a///... a/...
+.//a///../ .
+.//a///./a a/a
+.//a///./. a
+.//a///.// a
+.//a////aa a/aa
+.//a////a. a/a.
+.//a////a/ a/a
+.//a////.a a/.a
+.//a////.. .
+.//a////./ a
+.//a/////a a/a
+.//a/////. a
+.//a////// a
+.//.aaaaaa .aaaaaa
+.//.aaaaa. .aaaaa.
+.//.aaaaa/ .aaaaa
+.//.aaaa.a .aaaa.a
+.//.aaaa.. .aaaa..
+.//.aaaa./ .aaaa.
+.//.aaaa/a .aaaa/a
+.//.aaaa/. .aaaa
+.//.aaaa// .aaaa
+.//.aaa.aa .aaa.aa
+.//.aaa.a. .aaa.a.
+.//.aaa.a/ .aaa.a
+.//.aaa..a .aaa..a
+.//.aaa... .aaa...
+.//.aaa../ .aaa..
+.//.aaa./a .aaa./a
+.//.aaa./. .aaa.
+.//.aaa.// .aaa.
+.//.aaa/aa .aaa/aa
+.//.aaa/a. .aaa/a.
+.//.aaa/a/ .aaa/a
+.//.aaa/.a .aaa/.a
+.//.aaa/.. .
+.//.aaa/./ .aaa
+.//.aaa//a .aaa/a
+.//.aaa//. .aaa
+.//.aaa/// .aaa
+.//.aa.aaa .aa.aaa
+.//.aa.aa. .aa.aa.
+.//.aa.aa/ .aa.aa
+.//.aa.a.a .aa.a.a
+.//.aa.a.. .aa.a..
+.//.aa.a./ .aa.a.
+.//.aa.a/a .aa.a/a
+.//.aa.a/. .aa.a
+.//.aa.a// .aa.a
+.//.aa..aa .aa..aa
+.//.aa..a. .aa..a.
+.//.aa..a/ .aa..a
+.//.aa...a .aa...a
+.//.aa.... .aa....
+.//.aa.../ .aa...
+.//.aa../a .aa../a
+.//.aa../. .aa..
+.//.aa..// .aa..
+.//.aa./aa .aa./aa
+.//.aa./a. .aa./a.
+.//.aa./a/ .aa./a
+.//.aa./.a .aa./.a
+.//.aa./.. .
+.//.aa././ .aa.
+.//.aa.//a .aa./a
+.//.aa.//. .aa.
+.//.aa./// .aa.
+.//.aa/aaa .aa/aaa
+.//.aa/aa. .aa/aa.
+.//.aa/aa/ .aa/aa
+.//.aa/a.a .aa/a.a
+.//.aa/a.. .aa/a..
+.//.aa/a./ .aa/a.
+.//.aa/a/a .aa/a/a
+.//.aa/a/. .aa/a
+.//.aa/a// .aa/a
+.//.aa/.aa .aa/.aa
+.//.aa/.a. .aa/.a.
+.//.aa/.a/ .aa/.a
+.//.aa/..a .aa/..a
+.//.aa/... .aa/...
+.//.aa/../ .
+.//.aa/./a .aa/a
+.//.aa/./. .aa
+.//.aa/.// .aa
+.//.aa//aa .aa/aa
+.//.aa//a. .aa/a.
+.//.aa//a/ .aa/a
+.//.aa//.a .aa/.a
+.//.aa//.. .
+.//.aa//./ .aa
+.//.aa///a .aa/a
+.//.aa///. .aa
+.//.aa//// .aa
+.//.a.aaaa .a.aaaa
+.//.a.aaa. .a.aaa.
+.//.a.aaa/ .a.aaa
+.//.a.aa.a .a.aa.a
+.//.a.aa.. .a.aa..
+.//.a.aa./ .a.aa.
+.//.a.aa/a .a.aa/a
+.//.a.aa/. .a.aa
+.//.a.aa// .a.aa
+.//.a.a.aa .a.a.aa
+.//.a.a.a. .a.a.a.
+.//.a.a.a/ .a.a.a
+.//.a.a..a .a.a..a
+.//.a.a... .a.a...
+.//.a.a../ .a.a..
+.//.a.a./a .a.a./a
+.//.a.a./. .a.a.
+.//.a.a.// .a.a.
+.//.a.a/aa .a.a/aa
+.//.a.a/a. .a.a/a.
+.//.a.a/a/ .a.a/a
+.//.a.a/.a .a.a/.a
+.//.a.a/.. .
+.//.a.a/./ .a.a
+.//.a.a//a .a.a/a
+.//.a.a//. .a.a
+.//.a.a/// .a.a
+.//.a..aaa .a..aaa
+.//.a..aa. .a..aa.
+.//.a..aa/ .a..aa
+.//.a..a.a .a..a.a
+.//.a..a.. .a..a..
+.//.a..a./ .a..a.
+.//.a..a/a .a..a/a
+.//.a..a/. .a..a
+.//.a..a// .a..a
+.//.a...aa .a...aa
+.//.a...a. .a...a.
+.//.a...a/ .a...a
+.//.a....a .a....a
+.//.a..... .a.....
+.//.a..../ .a....
+.//.a.../a .a.../a
+.//.a.../. .a...
+.//.a...// .a...
+.//.a../aa .a../aa
+.//.a../a. .a../a.
+.//.a../a/ .a../a
+.//.a../.a .a../.a
+.//.a../.. .
+.//.a.././ .a..
+.//.a..//a .a../a
+.//.a..//. .a..
+.//.a../// .a..
+.//.a./aaa .a./aaa
+.//.a./aa. .a./aa.
+.//.a./aa/ .a./aa
+.//.a./a.a .a./a.a
+.//.a./a.. .a./a..
+.//.a./a./ .a./a.
+.//.a./a/a .a./a/a
+.//.a./a/. .a./a
+.//.a./a// .a./a
+.//.a./.aa .a./.aa
+.//.a./.a. .a./.a.
+.//.a./.a/ .a./.a
+.//.a./..a .a./..a
+.//.a./... .a./...
+.//.a./../ .
+.//.a././a .a./a
+.//.a././. .a.
+.//.a./.// .a.
+.//.a.//aa .a./aa
+.//.a.//a. .a./a.
+.//.a.//a/ .a./a
+.//.a.//.a .a./.a
+.//.a.//.. .
+.//.a.//./ .a.
+.//.a.///a .a./a
+.//.a.///. .a.
+.//.a.//// .a.
+.//.a/aaaa .a/aaaa
+.//.a/aaa. .a/aaa.
+.//.a/aaa/ .a/aaa
+.//.a/aa.a .a/aa.a
+.//.a/aa.. .a/aa..
+.//.a/aa./ .a/aa.
+.//.a/aa/a .a/aa/a
+.//.a/aa/. .a/aa
+.//.a/aa// .a/aa
+.//.a/a.aa .a/a.aa
+.//.a/a.a. .a/a.a.
+.//.a/a.a/ .a/a.a
+.//.a/a..a .a/a..a
+.//.a/a... .a/a...
+.//.a/a../ .a/a..
+.//.a/a./a .a/a./a
+.//.a/a./. .a/a.
+.//.a/a.// .a/a.
+.//.a/a/aa .a/a/aa
+.//.a/a/a. .a/a/a.
+.//.a/a/a/ .a/a/a
+.//.a/a/.a .a/a/.a
+.//.a/a/.. .a
+.//.a/a/./ .a/a
+.//.a/a//a .a/a/a
+.//.a/a//. .a/a
+.//.a/a/// .a/a
+.//.a/.aaa .a/.aaa
+.//.a/.aa. .a/.aa.
+.//.a/.aa/ .a/.aa
+.//.a/.a.a .a/.a.a
+.//.a/.a.. .a/.a..
+.//.a/.a./ .a/.a.
+.//.a/.a/a .a/.a/a
+.//.a/.a/. .a/.a
+.//.a/.a// .a/.a
+.//.a/..aa .a/..aa
+.//.a/..a. .a/..a.
+.//.a/..a/ .a/..a
+.//.a/...a .a/...a
+.//.a/.... .a/....
+.//.a/.../ .a/...
+.//.a/../a a
+.//.a/../. .
+.//.a/..// .
+.//.a/./aa .a/aa
+.//.a/./a. .a/a.
+.//.a/./a/ .a/a
+.//.a/./.a .a/.a
+.//.a/./.. .
+.//.a/././ .a
+.//.a/.//a .a/a
+.//.a/.//. .a
+.//.a/./// .a
+.//.a//aaa .a/aaa
+.//.a//aa. .a/aa.
+.//.a//aa/ .a/aa
+.//.a//a.a .a/a.a
+.//.a//a.. .a/a..
+.//.a//a./ .a/a.
+.//.a//a/a .a/a/a
+.//.a//a/. .a/a
+.//.a//a// .a/a
+.//.a//.aa .a/.aa
+.//.a//.a. .a/.a.
+.//.a//.a/ .a/.a
+.//.a//..a .a/..a
+.//.a//... .a/...
+.//.a//../ .
+.//.a//./a .a/a
+.//.a//./. .a
+.//.a//.// .a
+.//.a///aa .a/aa
+.//.a///a. .a/a.
+.//.a///a/ .a/a
+.//.a///.a .a/.a
+.//.a///.. .
+.//.a///./ .a
+.//.a////a .a/a
+.//.a////. .a
+.//.a///// .a
+.//..aaaaa ..aaaaa
+.//..aaaa. ..aaaa.
+.//..aaaa/ ..aaaa
+.//..aaa.a ..aaa.a
+.//..aaa.. ..aaa..
+.//..aaa./ ..aaa.
+.//..aaa/a ..aaa/a
+.//..aaa/. ..aaa
+.//..aaa// ..aaa
+.//..aa.aa ..aa.aa
+.//..aa.a. ..aa.a.
+.//..aa.a/ ..aa.a
+.//..aa..a ..aa..a
+.//..aa... ..aa...
+.//..aa../ ..aa..
+.//..aa./a ..aa./a
+.//..aa./. ..aa.
+.//..aa.// ..aa.
+.//..aa/aa ..aa/aa
+.//..aa/a. ..aa/a.
+.//..aa/a/ ..aa/a
+.//..aa/.a ..aa/.a
+.//..aa/.. .
+.//..aa/./ ..aa
+.//..aa//a ..aa/a
+.//..aa//. ..aa
+.//..aa/// ..aa
+.//..a.aaa ..a.aaa
+.//..a.aa. ..a.aa.
+.//..a.aa/ ..a.aa
+.//..a.a.a ..a.a.a
+.//..a.a.. ..a.a..
+.//..a.a./ ..a.a.
+.//..a.a/a ..a.a/a
+.//..a.a/. ..a.a
+.//..a.a// ..a.a
+.//..a..aa ..a..aa
+.//..a..a. ..a..a.
+.//..a..a/ ..a..a
+.//..a...a ..a...a
+.//..a.... ..a....
+.//..a.../ ..a...
+.//..a../a ..a../a
+.//..a../. ..a..
+.//..a..// ..a..
+.//..a./aa ..a./aa
+.//..a./a. ..a./a.
+.//..a./a/ ..a./a
+.//..a./.a ..a./.a
+.//..a./.. .
+.//..a././ ..a.
+.//..a.//a ..a./a
+.//..a.//. ..a.
+.//..a./// ..a.
+.//..a/aaa ..a/aaa
+.//..a/aa. ..a/aa.
+.//..a/aa/ ..a/aa
+.//..a/a.a ..a/a.a
+.//..a/a.. ..a/a..
+.//..a/a./ ..a/a.
+.//..a/a/a ..a/a/a
+.//..a/a/. ..a/a
+.//..a/a// ..a/a
+.//..a/.aa ..a/.aa
+.//..a/.a. ..a/.a.
+.//..a/.a/ ..a/.a
+.//..a/..a ..a/..a
+.//..a/... ..a/...
+.//..a/../ .
+.//..a/./a ..a/a
+.//..a/./. ..a
+.//..a/.// ..a
+.//..a//aa ..a/aa
+.//..a//a. ..a/a.
+.//..a//a/ ..a/a
+.//..a//.a ..a/.a
+.//..a//.. .
+.//..a//./ ..a
+.//..a///a ..a/a
+.//..a///. ..a
+.//..a//// ..a
+.//...aaaa ...aaaa
+.//...aaa. ...aaa.
+.//...aaa/ ...aaa
+.//...aa.a ...aa.a
+.//...aa.. ...aa..
+.//...aa./ ...aa.
+.//...aa/a ...aa/a
+.//...aa/. ...aa
+.//...aa// ...aa
+.//...a.aa ...a.aa
+.//...a.a. ...a.a.
+.//...a.a/ ...a.a
+.//...a..a ...a..a
+.//...a... ...a...
+.//...a../ ...a..
+.//...a./a ...a./a
+.//...a./. ...a.
+.//...a.// ...a.
+.//...a/aa ...a/aa
+.//...a/a. ...a/a.
+.//...a/a/ ...a/a
+.//...a/.a ...a/.a
+.//...a/.. .
+.//...a/./ ...a
+.//...a//a ...a/a
+.//...a//. ...a
+.//...a/// ...a
+.//....aaa ....aaa
+.//....aa. ....aa.
+.//....aa/ ....aa
+.//....a.a ....a.a
+.//....a.. ....a..
+.//....a./ ....a.
+.//....a/a ....a/a
+.//....a/. ....a
+.//....a// ....a
+.//.....aa .....aa
+.//.....a. .....a.
+.//.....a/ .....a
+.//......a ......a
+.//....... .......
+.//....../ ......
+.//...../a ...../a
+.//...../. .....
+.//.....// .....
+.//..../aa ..../aa
+.//..../a. ..../a.
+.//..../a/ ..../a
+.//..../.a ..../.a
+.//..../.. .
+.//...././ ....
+.//....//a ..../a
+.//....//. ....
+.//..../// ....
+.//.../aaa .../aaa
+.//.../aa. .../aa.
+.//.../aa/ .../aa
+.//.../a.a .../a.a
+.//.../a.. .../a..
+.//.../a./ .../a.
+.//.../a/a .../a/a
+.//.../a/. .../a
+.//.../a// .../a
+.//.../.aa .../.aa
+.//.../.a. .../.a.
+.//.../.a/ .../.a
+.//.../..a .../..a
+.//.../... .../...
+.//.../../ .
+.//..././a .../a
+.//..././. ...
+.//.../.// ...
+.//...//aa .../aa
+.//...//a. .../a.
+.//...//a/ .../a
+.//...//.a .../.a
+.//...//.. .
+.//...//./ ...
+.//...///a .../a
+.//...///. ...
+.//...//// ...
+.//../aaaa ../aaaa
+.//../aaa. ../aaa.
+.//../aaa/ ../aaa
+.//../aa.a ../aa.a
+.//../aa.. ../aa..
+.//../aa./ ../aa.
+.//../aa/a ../aa/a
+.//../aa/. ../aa
+.//../aa// ../aa
+.//../a.aa ../a.aa
+.//../a.a. ../a.a.
+.//../a.a/ ../a.a
+.//../a..a ../a..a
+.//../a... ../a...
+.//../a../ ../a..
+.//../a./a ../a./a
+.//../a./. ../a.
+.//../a.// ../a.
+.//../a/aa ../a/aa
+.//../a/a. ../a/a.
+.//../a/a/ ../a/a
+.//../a/.a ../a/.a
+.//../a/.. ..
+.//../a/./ ../a
+.//../a//a ../a/a
+.//../a//. ../a
+.//../a/// ../a
+.//../.aaa ../.aaa
+.//../.aa. ../.aa.
+.//../.aa/ ../.aa
+.//../.a.a ../.a.a
+.//../.a.. ../.a..
+.//../.a./ ../.a.
+.//../.a/a ../.a/a
+.//../.a/. ../.a
+.//../.a// ../.a
+.//../..aa ../..aa
+.//../..a. ../..a.
+.//../..a/ ../..a
+.//../...a ../...a
+.//../.... ../....
+.//../.../ ../...
+.//../../a ../../a
+.//../../. ../..
+.//../..// ../..
+.//.././aa ../aa
+.//.././a. ../a.
+.//.././a/ ../a
+.//.././.a ../.a
+.//.././.. ../..
+.//../././ ..
+.//.././/a ../a
+.//.././/. ..
+.//.././// ..
+.//..//aaa ../aaa
+.//..//aa. ../aa.
+.//..//aa/ ../aa
+.//..//a.a ../a.a
+.//..//a.. ../a..
+.//..//a./ ../a.
+.//..//a/a ../a/a
+.//..//a/. ../a
+.//..//a// ../a
+.//..//.aa ../.aa
+.//..//.a. ../.a.
+.//..//.a/ ../.a
+.//..//..a ../..a
+.//..//... ../...
+.//..//../ ../..
+.//..//./a ../a
+.//..//./. ..
+.//..//.// ..
+.//..///aa ../aa
+.//..///a. ../a.
+.//..///a/ ../a
+.//..///.a ../.a
+.//..///.. ../..
+.//..///./ ..
+.//..////a ../a
+.//..////. ..
+.//..///// ..
+.//./aaaaa aaaaa
+.//./aaaa. aaaa.
+.//./aaaa/ aaaa
+.//./aaa.a aaa.a
+.//./aaa.. aaa..
+.//./aaa./ aaa.
+.//./aaa/a aaa/a
+.//./aaa/. aaa
+.//./aaa// aaa
+.//./aa.aa aa.aa
+.//./aa.a. aa.a.
+.//./aa.a/ aa.a
+.//./aa..a aa..a
+.//./aa... aa...
+.//./aa../ aa..
+.//./aa./a aa./a
+.//./aa./. aa.
+.//./aa.// aa.
+.//./aa/aa aa/aa
+.//./aa/a. aa/a.
+.//./aa/a/ aa/a
+.//./aa/.a aa/.a
+.//./aa/.. .
+.//./aa/./ aa
+.//./aa//a aa/a
+.//./aa//. aa
+.//./aa/// aa
+.//./a.aaa a.aaa
+.//./a.aa. a.aa.
+.//./a.aa/ a.aa
+.//./a.a.a a.a.a
+.//./a.a.. a.a..
+.//./a.a./ a.a.
+.//./a.a/a a.a/a
+.//./a.a/. a.a
+.//./a.a// a.a
+.//./a..aa a..aa
+.//./a..a. a..a.
+.//./a..a/ a..a
+.//./a...a a...a
+.//./a.... a....
+.//./a.../ a...
+.//./a../a a../a
+.//./a../. a..
+.//./a..// a..
+.//./a./aa a./aa
+.//./a./a. a./a.
+.//./a./a/ a./a
+.//./a./.a a./.a
+.//./a./.. .
+.//./a././ a.
+.//./a.//a a./a
+.//./a.//. a.
+.//./a./// a.
+.//./a/aaa a/aaa
+.//./a/aa. a/aa.
+.//./a/aa/ a/aa
+.//./a/a.a a/a.a
+.//./a/a.. a/a..
+.//./a/a./ a/a.
+.//./a/a/a a/a/a
+.//./a/a/. a/a
+.//./a/a// a/a
+.//./a/.aa a/.aa
+.//./a/.a. a/.a.
+.//./a/.a/ a/.a
+.//./a/..a a/..a
+.//./a/... a/...
+.//./a/../ .
+.//./a/./a a/a
+.//./a/./. a
+.//./a/.// a
+.//./a//aa a/aa
+.//./a//a. a/a.
+.//./a//a/ a/a
+.//./a//.a a/.a
+.//./a//.. .
+.//./a//./ a
+.//./a///a a/a
+.//./a///. a
+.//./a//// a
+.//./.aaaa .aaaa
+.//./.aaa. .aaa.
+.//./.aaa/ .aaa
+.//./.aa.a .aa.a
+.//./.aa.. .aa..
+.//./.aa./ .aa.
+.//./.aa/a .aa/a
+.//./.aa/. .aa
+.//./.aa// .aa
+.//./.a.aa .a.aa
+.//./.a.a. .a.a.
+.//./.a.a/ .a.a
+.//./.a..a .a..a
+.//./.a... .a...
+.//./.a../ .a..
+.//./.a./a .a./a
+.//./.a./. .a.
+.//./.a.// .a.
+.//./.a/aa .a/aa
+.//./.a/a. .a/a.
+.//./.a/a/ .a/a
+.//./.a/.a .a/.a
+.//./.a/.. .
+.//./.a/./ .a
+.//./.a//a .a/a
+.//./.a//. .a
+.//./.a/// .a
+.//./..aaa ..aaa
+.//./..aa. ..aa.
+.//./..aa/ ..aa
+.//./..a.a ..a.a
+.//./..a.. ..a..
+.//./..a./ ..a.
+.//./..a/a ..a/a
+.//./..a/. ..a
+.//./..a// ..a
+.//./...aa ...aa
+.//./...a. ...a.
+.//./...a/ ...a
+.//./....a ....a
+.//./..... .....
+.//./..../ ....
+.//./.../a .../a
+.//./.../. ...
+.//./...// ...
+.//./../aa ../aa
+.//./../a. ../a.
+.//./../a/ ../a
+.//./../.a ../.a
+.//./../.. ../..
+.//./.././ ..
+.//./..//a ../a
+.//./..//. ..
+.//./../// ..
+.//././aaa aaa
+.//././aa. aa.
+.//././aa/ aa
+.//././a.a a.a
+.//././a.. a..
+.//././a./ a.
+.//././a/a a/a
+.//././a/. a
+.//././a// a
+.//././.aa .aa
+.//././.a. .a.
+.//././.a/ .a
+.//././..a ..a
+.//././... ...
+.//././../ ..
+.//./././a a
+.//./././. .
+.//././.// .
+.//././/aa aa
+.//././/a. a.
+.//././/a/ a
+.//././/.a .a
+.//././/.. ..
+.//././/./ .
+.//././//a a
+.//././//. .
+.//././/// .
+.//.//aaaa aaaa
+.//.//aaa. aaa.
+.//.//aaa/ aaa
+.//.//aa.a aa.a
+.//.//aa.. aa..
+.//.//aa./ aa.
+.//.//aa/a aa/a
+.//.//aa/. aa
+.//.//aa// aa
+.//.//a.aa a.aa
+.//.//a.a. a.a.
+.//.//a.a/ a.a
+.//.//a..a a..a
+.//.//a... a...
+.//.//a../ a..
+.//.//a./a a./a
+.//.//a./. a.
+.//.//a.// a.
+.//.//a/aa a/aa
+.//.//a/a. a/a.
+.//.//a/a/ a/a
+.//.//a/.a a/.a
+.//.//a/.. .
+.//.//a/./ a
+.//.//a//a a/a
+.//.//a//. a
+.//.//a/// a
+.//.//.aaa .aaa
+.//.//.aa. .aa.
+.//.//.aa/ .aa
+.//.//.a.a .a.a
+.//.//.a.. .a..
+.//.//.a./ .a.
+.//.//.a/a .a/a
+.//.//.a/. .a
+.//.//.a// .a
+.//.//..aa ..aa
+.//.//..a. ..a.
+.//.//..a/ ..a
+.//.//...a ...a
+.//.//.... ....
+.//.//.../ ...
+.//.//../a ../a
+.//.//../. ..
+.//.//..// ..
+.//.//./aa aa
+.//.//./a. a.
+.//.//./a/ a
+.//.//./.a .a
+.//.//./.. ..
+.//.//././ .
+.//.//.//a a
+.//.//.//. .
+.//.//./// .
+.//.///aaa aaa
+.//.///aa. aa.
+.//.///aa/ aa
+.//.///a.a a.a
+.//.///a.. a..
+.//.///a./ a.
+.//.///a/a a/a
+.//.///a/. a
+.//.///a// a
+.//.///.aa .aa
+.//.///.a. .a.
+.//.///.a/ .a
+.//.///..a ..a
+.//.///... ...
+.//.///../ ..
+.//.///./a a
+.//.///./. .
+.//.///.// .
+.//.////aa aa
+.//.////a. a.
+.//.////a/ a
+.//.////.a .a
+.//.////.. ..
+.//.////./ .
+.//./////a a
+.//./////. .
+.//.////// .
+.///aaaaaa aaaaaa
+.///aaaaa. aaaaa.
+.///aaaaa/ aaaaa
+.///aaaa.a aaaa.a
+.///aaaa.. aaaa..
+.///aaaa./ aaaa.
+.///aaaa/a aaaa/a
+.///aaaa/. aaaa
+.///aaaa// aaaa
+.///aaa.aa aaa.aa
+.///aaa.a. aaa.a.
+.///aaa.a/ aaa.a
+.///aaa..a aaa..a
+.///aaa... aaa...
+.///aaa../ aaa..
+.///aaa./a aaa./a
+.///aaa./. aaa.
+.///aaa.// aaa.
+.///aaa/aa aaa/aa
+.///aaa/a. aaa/a.
+.///aaa/a/ aaa/a
+.///aaa/.a aaa/.a
+.///aaa/.. .
+.///aaa/./ aaa
+.///aaa//a aaa/a
+.///aaa//. aaa
+.///aaa/// aaa
+.///aa.aaa aa.aaa
+.///aa.aa. aa.aa.
+.///aa.aa/ aa.aa
+.///aa.a.a aa.a.a
+.///aa.a.. aa.a..
+.///aa.a./ aa.a.
+.///aa.a/a aa.a/a
+.///aa.a/. aa.a
+.///aa.a// aa.a
+.///aa..aa aa..aa
+.///aa..a. aa..a.
+.///aa..a/ aa..a
+.///aa...a aa...a
+.///aa.... aa....
+.///aa.../ aa...
+.///aa../a aa../a
+.///aa../. aa..
+.///aa..// aa..
+.///aa./aa aa./aa
+.///aa./a. aa./a.
+.///aa./a/ aa./a
+.///aa./.a aa./.a
+.///aa./.. .
+.///aa././ aa.
+.///aa.//a aa./a
+.///aa.//. aa.
+.///aa./// aa.
+.///aa/aaa aa/aaa
+.///aa/aa. aa/aa.
+.///aa/aa/ aa/aa
+.///aa/a.a aa/a.a
+.///aa/a.. aa/a..
+.///aa/a./ aa/a.
+.///aa/a/a aa/a/a
+.///aa/a/. aa/a
+.///aa/a// aa/a
+.///aa/.aa aa/.aa
+.///aa/.a. aa/.a.
+.///aa/.a/ aa/.a
+.///aa/..a aa/..a
+.///aa/... aa/...
+.///aa/../ .
+.///aa/./a aa/a
+.///aa/./. aa
+.///aa/.// aa
+.///aa//aa aa/aa
+.///aa//a. aa/a.
+.///aa//a/ aa/a
+.///aa//.a aa/.a
+.///aa//.. .
+.///aa//./ aa
+.///aa///a aa/a
+.///aa///. aa
+.///aa//// aa
+.///a.aaaa a.aaaa
+.///a.aaa. a.aaa.
+.///a.aaa/ a.aaa
+.///a.aa.a a.aa.a
+.///a.aa.. a.aa..
+.///a.aa./ a.aa.
+.///a.aa/a a.aa/a
+.///a.aa/. a.aa
+.///a.aa// a.aa
+.///a.a.aa a.a.aa
+.///a.a.a. a.a.a.
+.///a.a.a/ a.a.a
+.///a.a..a a.a..a
+.///a.a... a.a...
+.///a.a../ a.a..
+.///a.a./a a.a./a
+.///a.a./. a.a.
+.///a.a.// a.a.
+.///a.a/aa a.a/aa
+.///a.a/a. a.a/a.
+.///a.a/a/ a.a/a
+.///a.a/.a a.a/.a
+.///a.a/.. .
+.///a.a/./ a.a
+.///a.a//a a.a/a
+.///a.a//. a.a
+.///a.a/// a.a
+.///a..aaa a..aaa
+.///a..aa. a..aa.
+.///a..aa/ a..aa
+.///a..a.a a..a.a
+.///a..a.. a..a..
+.///a..a./ a..a.
+.///a..a/a a..a/a
+.///a..a/. a..a
+.///a..a// a..a
+.///a...aa a...aa
+.///a...a. a...a.
+.///a...a/ a...a
+.///a....a a....a
+.///a..... a.....
+.///a..../ a....
+.///a.../a a.../a
+.///a.../. a...
+.///a...// a...
+.///a../aa a../aa
+.///a../a. a../a.
+.///a../a/ a../a
+.///a../.a a../.a
+.///a../.. .
+.///a.././ a..
+.///a..//a a../a
+.///a..//. a..
+.///a../// a..
+.///a./aaa a./aaa
+.///a./aa. a./aa.
+.///a./aa/ a./aa
+.///a./a.a a./a.a
+.///a./a.. a./a..
+.///a./a./ a./a.
+.///a./a/a a./a/a
+.///a./a/. a./a
+.///a./a// a./a
+.///a./.aa a./.aa
+.///a./.a. a./.a.
+.///a./.a/ a./.a
+.///a./..a a./..a
+.///a./... a./...
+.///a./../ .
+.///a././a a./a
+.///a././. a.
+.///a./.// a.
+.///a.//aa a./aa
+.///a.//a. a./a.
+.///a.//a/ a./a
+.///a.//.a a./.a
+.///a.//.. .
+.///a.//./ a.
+.///a.///a a./a
+.///a.///. a.
+.///a.//// a.
+.///a/aaaa a/aaaa
+.///a/aaa. a/aaa.
+.///a/aaa/ a/aaa
+.///a/aa.a a/aa.a
+.///a/aa.. a/aa..
+.///a/aa./ a/aa.
+.///a/aa/a a/aa/a
+.///a/aa/. a/aa
+.///a/aa// a/aa
+.///a/a.aa a/a.aa
+.///a/a.a. a/a.a.
+.///a/a.a/ a/a.a
+.///a/a..a a/a..a
+.///a/a... a/a...
+.///a/a../ a/a..
+.///a/a./a a/a./a
+.///a/a./. a/a.
+.///a/a.// a/a.
+.///a/a/aa a/a/aa
+.///a/a/a. a/a/a.
+.///a/a/a/ a/a/a
+.///a/a/.a a/a/.a
+.///a/a/.. a
+.///a/a/./ a/a
+.///a/a//a a/a/a
+.///a/a//. a/a
+.///a/a/// a/a
+.///a/.aaa a/.aaa
+.///a/.aa. a/.aa.
+.///a/.aa/ a/.aa
+.///a/.a.a a/.a.a
+.///a/.a.. a/.a..
+.///a/.a./ a/.a.
+.///a/.a/a a/.a/a
+.///a/.a/. a/.a
+.///a/.a// a/.a
+.///a/..aa a/..aa
+.///a/..a. a/..a.
+.///a/..a/ a/..a
+.///a/...a a/...a
+.///a/.... a/....
+.///a/.../ a/...
+.///a/../a a
+.///a/../. .
+.///a/..// .
+.///a/./aa a/aa
+.///a/./a. a/a.
+.///a/./a/ a/a
+.///a/./.a a/.a
+.///a/./.. .
+.///a/././ a
+.///a/.//a a/a
+.///a/.//. a
+.///a/./// a
+.///a//aaa a/aaa
+.///a//aa. a/aa.
+.///a//aa/ a/aa
+.///a//a.a a/a.a
+.///a//a.. a/a..
+.///a//a./ a/a.
+.///a//a/a a/a/a
+.///a//a/. a/a
+.///a//a// a/a
+.///a//.aa a/.aa
+.///a//.a. a/.a.
+.///a//.a/ a/.a
+.///a//..a a/..a
+.///a//... a/...
+.///a//../ .
+.///a//./a a/a
+.///a//./. a
+.///a//.// a
+.///a///aa a/aa
+.///a///a. a/a.
+.///a///a/ a/a
+.///a///.a a/.a
+.///a///.. .
+.///a///./ a
+.///a////a a/a
+.///a////. a
+.///a///// a
+.///.aaaaa .aaaaa
+.///.aaaa. .aaaa.
+.///.aaaa/ .aaaa
+.///.aaa.a .aaa.a
+.///.aaa.. .aaa..
+.///.aaa./ .aaa.
+.///.aaa/a .aaa/a
+.///.aaa/. .aaa
+.///.aaa// .aaa
+.///.aa.aa .aa.aa
+.///.aa.a. .aa.a.
+.///.aa.a/ .aa.a
+.///.aa..a .aa..a
+.///.aa... .aa...
+.///.aa../ .aa..
+.///.aa./a .aa./a
+.///.aa./. .aa.
+.///.aa.// .aa.
+.///.aa/aa .aa/aa
+.///.aa/a. .aa/a.
+.///.aa/a/ .aa/a
+.///.aa/.a .aa/.a
+.///.aa/.. .
+.///.aa/./ .aa
+.///.aa//a .aa/a
+.///.aa//. .aa
+.///.aa/// .aa
+.///.a.aaa .a.aaa
+.///.a.aa. .a.aa.
+.///.a.aa/ .a.aa
+.///.a.a.a .a.a.a
+.///.a.a.. .a.a..
+.///.a.a./ .a.a.
+.///.a.a/a .a.a/a
+.///.a.a/. .a.a
+.///.a.a// .a.a
+.///.a..aa .a..aa
+.///.a..a. .a..a.
+.///.a..a/ .a..a
+.///.a...a .a...a
+.///.a.... .a....
+.///.a.../ .a...
+.///.a../a .a../a
+.///.a../. .a..
+.///.a..// .a..
+.///.a./aa .a./aa
+.///.a./a. .a./a.
+.///.a./a/ .a./a
+.///.a./.a .a./.a
+.///.a./.. .
+.///.a././ .a.
+.///.a.//a .a./a
+.///.a.//. .a.
+.///.a./// .a.
+.///.a/aaa .a/aaa
+.///.a/aa. .a/aa.
+.///.a/aa/ .a/aa
+.///.a/a.a .a/a.a
+.///.a/a.. .a/a..
+.///.a/a./ .a/a.
+.///.a/a/a .a/a/a
+.///.a/a/. .a/a
+.///.a/a// .a/a
+.///.a/.aa .a/.aa
+.///.a/.a. .a/.a.
+.///.a/.a/ .a/.a
+.///.a/..a .a/..a
+.///.a/... .a/...
+.///.a/../ .
+.///.a/./a .a/a
+.///.a/./. .a
+.///.a/.// .a
+.///.a//aa .a/aa
+.///.a//a. .a/a.
+.///.a//a/ .a/a
+.///.a//.a .a/.a
+.///.a//.. .
+.///.a//./ .a
+.///.a///a .a/a
+.///.a///. .a
+.///.a//// .a
+.///..aaaa ..aaaa
+.///..aaa. ..aaa.
+.///..aaa/ ..aaa
+.///..aa.a ..aa.a
+.///..aa.. ..aa..
+.///..aa./ ..aa.
+.///..aa/a ..aa/a
+.///..aa/. ..aa
+.///..aa// ..aa
+.///..a.aa ..a.aa
+.///..a.a. ..a.a.
+.///..a.a/ ..a.a
+.///..a..a ..a..a
+.///..a... ..a...
+.///..a../ ..a..
+.///..a./a ..a./a
+.///..a./. ..a.
+.///..a.// ..a.
+.///..a/aa ..a/aa
+.///..a/a. ..a/a.
+.///..a/a/ ..a/a
+.///..a/.a ..a/.a
+.///..a/.. .
+.///..a/./ ..a
+.///..a//a ..a/a
+.///..a//. ..a
+.///..a/// ..a
+.///...aaa ...aaa
+.///...aa. ...aa.
+.///...aa/ ...aa
+.///...a.a ...a.a
+.///...a.. ...a..
+.///...a./ ...a.
+.///...a/a ...a/a
+.///...a/. ...a
+.///...a// ...a
+.///....aa ....aa
+.///....a. ....a.
+.///....a/ ....a
+.///.....a .....a
+.///...... ......
+.///...../ .....
+.///..../a ..../a
+.///..../. ....
+.///....// ....
+.///.../aa .../aa
+.///.../a. .../a.
+.///.../a/ .../a
+.///.../.a .../.a
+.///.../.. .
+.///..././ ...
+.///...//a .../a
+.///...//. ...
+.///.../// ...
+.///../aaa ../aaa
+.///../aa. ../aa.
+.///../aa/ ../aa
+.///../a.a ../a.a
+.///../a.. ../a..
+.///../a./ ../a.
+.///../a/a ../a/a
+.///../a/. ../a
+.///../a// ../a
+.///../.aa ../.aa
+.///../.a. ../.a.
+.///../.a/ ../.a
+.///../..a ../..a
+.///../... ../...
+.///../../ ../..
+.///.././a ../a
+.///.././. ..
+.///../.// ..
+.///..//aa ../aa
+.///..//a. ../a.
+.///..//a/ ../a
+.///..//.a ../.a
+.///..//.. ../..
+.///..//./ ..
+.///..///a ../a
+.///..///. ..
+.///..//// ..
+.///./aaaa aaaa
+.///./aaa. aaa.
+.///./aaa/ aaa
+.///./aa.a aa.a
+.///./aa.. aa..
+.///./aa./ aa.
+.///./aa/a aa/a
+.///./aa/. aa
+.///./aa// aa
+.///./a.aa a.aa
+.///./a.a. a.a.
+.///./a.a/ a.a
+.///./a..a a..a
+.///./a... a...
+.///./a../ a..
+.///./a./a a./a
+.///./a./. a.
+.///./a.// a.
+.///./a/aa a/aa
+.///./a/a. a/a.
+.///./a/a/ a/a
+.///./a/.a a/.a
+.///./a/.. .
+.///./a/./ a
+.///./a//a a/a
+.///./a//. a
+.///./a/// a
+.///./.aaa .aaa
+.///./.aa. .aa.
+.///./.aa/ .aa
+.///./.a.a .a.a
+.///./.a.. .a..
+.///./.a./ .a.
+.///./.a/a .a/a
+.///./.a/. .a
+.///./.a// .a
+.///./..aa ..aa
+.///./..a. ..a.
+.///./..a/ ..a
+.///./...a ...a
+.///./.... ....
+.///./.../ ...
+.///./../a ../a
+.///./../. ..
+.///./..// ..
+.///././aa aa
+.///././a. a.
+.///././a/ a
+.///././.a .a
+.///././.. ..
+.///./././ .
+.///././/a a
+.///././/. .
+.///././// .
+.///.//aaa aaa
+.///.//aa. aa.
+.///.//aa/ aa
+.///.//a.a a.a
+.///.//a.. a..
+.///.//a./ a.
+.///.//a/a a/a
+.///.//a/. a
+.///.//a// a
+.///.//.aa .aa
+.///.//.a. .a.
+.///.//.a/ .a
+.///.//..a ..a
+.///.//... ...
+.///.//../ ..
+.///.//./a a
+.///.//./. .
+.///.//.// .
+.///.///aa aa
+.///.///a. a.
+.///.///a/ a
+.///.///.a .a
+.///.///.. ..
+.///.///./ .
+.///.////a a
+.///.////. .
+.///.///// .
+.////aaaaa aaaaa
+.////aaaa. aaaa.
+.////aaaa/ aaaa
+.////aaa.a aaa.a
+.////aaa.. aaa..
+.////aaa./ aaa.
+.////aaa/a aaa/a
+.////aaa/. aaa
+.////aaa// aaa
+.////aa.aa aa.aa
+.////aa.a. aa.a.
+.////aa.a/ aa.a
+.////aa..a aa..a
+.////aa... aa...
+.////aa../ aa..
+.////aa./a aa./a
+.////aa./. aa.
+.////aa.// aa.
+.////aa/aa aa/aa
+.////aa/a. aa/a.
+.////aa/a/ aa/a
+.////aa/.a aa/.a
+.////aa/.. .
+.////aa/./ aa
+.////aa//a aa/a
+.////aa//. aa
+.////aa/// aa
+.////a.aaa a.aaa
+.////a.aa. a.aa.
+.////a.aa/ a.aa
+.////a.a.a a.a.a
+.////a.a.. a.a..
+.////a.a./ a.a.
+.////a.a/a a.a/a
+.////a.a/. a.a
+.////a.a// a.a
+.////a..aa a..aa
+.////a..a. a..a.
+.////a..a/ a..a
+.////a...a a...a
+.////a.... a....
+.////a.../ a...
+.////a../a a../a
+.////a../. a..
+.////a..// a..
+.////a./aa a./aa
+.////a./a. a./a.
+.////a./a/ a./a
+.////a./.a a./.a
+.////a./.. .
+.////a././ a.
+.////a.//a a./a
+.////a.//. a.
+.////a./// a.
+.////a/aaa a/aaa
+.////a/aa. a/aa.
+.////a/aa/ a/aa
+.////a/a.a a/a.a
+.////a/a.. a/a..
+.////a/a./ a/a.
+.////a/a/a a/a/a
+.////a/a/. a/a
+.////a/a// a/a
+.////a/.aa a/.aa
+.////a/.a. a/.a.
+.////a/.a/ a/.a
+.////a/..a a/..a
+.////a/... a/...
+.////a/../ .
+.////a/./a a/a
+.////a/./. a
+.////a/.// a
+.////a//aa a/aa
+.////a//a. a/a.
+.////a//a/ a/a
+.////a//.a a/.a
+.////a//.. .
+.////a//./ a
+.////a///a a/a
+.////a///. a
+.////a//// a
+.////.aaaa .aaaa
+.////.aaa. .aaa.
+.////.aaa/ .aaa
+.////.aa.a .aa.a
+.////.aa.. .aa..
+.////.aa./ .aa.
+.////.aa/a .aa/a
+.////.aa/. .aa
+.////.aa// .aa
+.////.a.aa .a.aa
+.////.a.a. .a.a.
+.////.a.a/ .a.a
+.////.a..a .a..a
+.////.a... .a...
+.////.a../ .a..
+.////.a./a .a./a
+.////.a./. .a.
+.////.a.// .a.
+.////.a/aa .a/aa
+.////.a/a. .a/a.
+.////.a/a/ .a/a
+.////.a/.a .a/.a
+.////.a/.. .
+.////.a/./ .a
+.////.a//a .a/a
+.////.a//. .a
+.////.a/// .a
+.////..aaa ..aaa
+.////..aa. ..aa.
+.////..aa/ ..aa
+.////..a.a ..a.a
+.////..a.. ..a..
+.////..a./ ..a.
+.////..a/a ..a/a
+.////..a/. ..a
+.////..a// ..a
+.////...aa ...aa
+.////...a. ...a.
+.////...a/ ...a
+.////....a ....a
+.////..... .....
+.////..../ ....
+.////.../a .../a
+.////.../. ...
+.////...// ...
+.////../aa ../aa
+.////../a. ../a.
+.////../a/ ../a
+.////../.a ../.a
+.////../.. ../..
+.////.././ ..
+.////..//a ../a
+.////..//. ..
+.////../// ..
+.////./aaa aaa
+.////./aa. aa.
+.////./aa/ aa
+.////./a.a a.a
+.////./a.. a..
+.////./a./ a.
+.////./a/a a/a
+.////./a/. a
+.////./a// a
+.////./.aa .aa
+.////./.a. .a.
+.////./.a/ .a
+.////./..a ..a
+.////./... ...
+.////./../ ..
+.////././a a
+.////././. .
+.////./.// .
+.////.//aa aa
+.////.//a. a.
+.////.//a/ a
+.////.//.a .a
+.////.//.. ..
+.////.//./ .
+.////.///a a
+.////.///. .
+.////.//// .
+./////aaaa aaaa
+./////aaa. aaa.
+./////aaa/ aaa
+./////aa.a aa.a
+./////aa.. aa..
+./////aa./ aa.
+./////aa/a aa/a
+./////aa/. aa
+./////aa// aa
+./////a.aa a.aa
+./////a.a. a.a.
+./////a.a/ a.a
+./////a..a a..a
+./////a... a...
+./////a../ a..
+./////a./a a./a
+./////a./. a.
+./////a.// a.
+./////a/aa a/aa
+./////a/a. a/a.
+./////a/a/ a/a
+./////a/.a a/.a
+./////a/.. .
+./////a/./ a
+./////a//a a/a
+./////a//. a
+./////a/// a
+./////.aaa .aaa
+./////.aa. .aa.
+./////.aa/ .aa
+./////.a.a .a.a
+./////.a.. .a..
+./////.a./ .a.
+./////.a/a .a/a
+./////.a/. .a
+./////.a// .a
+./////..aa ..aa
+./////..a. ..a.
+./////..a/ ..a
+./////...a ...a
+./////.... ....
+./////.../ ...
+./////../a ../a
+./////../. ..
+./////..// ..
+./////./aa aa
+./////./a. a.
+./////./a/ a
+./////./.a .a
+./////./.. ..
+./////././ .
+./////.//a a
+./////.//. .
+./////./// .
+.//////aaa aaa
+.//////aa. aa.
+.//////aa/ aa
+.//////a.a a.a
+.//////a.. a..
+.//////a./ a.
+.//////a/a a/a
+.//////a/. a
+.//////a// a
+.//////.aa .aa
+.//////.a. .a.
+.//////.a/ .a
+.//////..a ..a
+.//////... ...
+.//////../ ..
+.//////./a a
+.//////./. .
+.//////.// .
+.///////aa aa
+.///////a. a.
+.///////a/ a
+.///////.a .a
+.///////.. ..
+.///////./ .
+.////////a a
+.////////. .
+.///////// .
+/aaaaaaaaa /aaaaaaaaa
+/aaaaaaaa. /aaaaaaaa.
+/aaaaaaaa/ /aaaaaaaa
+/aaaaaaa.a /aaaaaaa.a
+/aaaaaaa.. /aaaaaaa..
+/aaaaaaa./ /aaaaaaa.
+/aaaaaaa/a /aaaaaaa/a
+/aaaaaaa/. /aaaaaaa
+/aaaaaaa// /aaaaaaa
+/aaaaaa.aa /aaaaaa.aa
+/aaaaaa.a. /aaaaaa.a.
+/aaaaaa.a/ /aaaaaa.a
+/aaaaaa..a /aaaaaa..a
+/aaaaaa... /aaaaaa...
+/aaaaaa../ /aaaaaa..
+/aaaaaa./a /aaaaaa./a
+/aaaaaa./. /aaaaaa.
+/aaaaaa.// /aaaaaa.
+/aaaaaa/aa /aaaaaa/aa
+/aaaaaa/a. /aaaaaa/a.
+/aaaaaa/a/ /aaaaaa/a
+/aaaaaa/.a /aaaaaa/.a
+/aaaaaa/.. /
+/aaaaaa/./ /aaaaaa
+/aaaaaa//a /aaaaaa/a
+/aaaaaa//. /aaaaaa
+/aaaaaa/// /aaaaaa
+/aaaaa.aaa /aaaaa.aaa
+/aaaaa.aa. /aaaaa.aa.
+/aaaaa.aa/ /aaaaa.aa
+/aaaaa.a.a /aaaaa.a.a
+/aaaaa.a.. /aaaaa.a..
+/aaaaa.a./ /aaaaa.a.
+/aaaaa.a/a /aaaaa.a/a
+/aaaaa.a/. /aaaaa.a
+/aaaaa.a// /aaaaa.a
+/aaaaa..aa /aaaaa..aa
+/aaaaa..a. /aaaaa..a.
+/aaaaa..a/ /aaaaa..a
+/aaaaa...a /aaaaa...a
+/aaaaa.... /aaaaa....
+/aaaaa.../ /aaaaa...
+/aaaaa../a /aaaaa../a
+/aaaaa../. /aaaaa..
+/aaaaa..// /aaaaa..
+/aaaaa./aa /aaaaa./aa
+/aaaaa./a. /aaaaa./a.
+/aaaaa./a/ /aaaaa./a
+/aaaaa./.a /aaaaa./.a
+/aaaaa./.. /
+/aaaaa././ /aaaaa.
+/aaaaa.//a /aaaaa./a
+/aaaaa.//. /aaaaa.
+/aaaaa./// /aaaaa.
+/aaaaa/aaa /aaaaa/aaa
+/aaaaa/aa. /aaaaa/aa.
+/aaaaa/aa/ /aaaaa/aa
+/aaaaa/a.a /aaaaa/a.a
+/aaaaa/a.. /aaaaa/a..
+/aaaaa/a./ /aaaaa/a.
+/aaaaa/a/a /aaaaa/a/a
+/aaaaa/a/. /aaaaa/a
+/aaaaa/a// /aaaaa/a
+/aaaaa/.aa /aaaaa/.aa
+/aaaaa/.a. /aaaaa/.a.
+/aaaaa/.a/ /aaaaa/.a
+/aaaaa/..a /aaaaa/..a
+/aaaaa/... /aaaaa/...
+/aaaaa/../ /
+/aaaaa/./a /aaaaa/a
+/aaaaa/./. /aaaaa
+/aaaaa/.// /aaaaa
+/aaaaa//aa /aaaaa/aa
+/aaaaa//a. /aaaaa/a.
+/aaaaa//a/ /aaaaa/a
+/aaaaa//.a /aaaaa/.a
+/aaaaa//.. /
+/aaaaa//./ /aaaaa
+/aaaaa///a /aaaaa/a
+/aaaaa///. /aaaaa
+/aaaaa//// /aaaaa
+/aaaa.aaaa /aaaa.aaaa
+/aaaa.aaa. /aaaa.aaa.
+/aaaa.aaa/ /aaaa.aaa
+/aaaa.aa.a /aaaa.aa.a
+/aaaa.aa.. /aaaa.aa..
+/aaaa.aa./ /aaaa.aa.
+/aaaa.aa/a /aaaa.aa/a
+/aaaa.aa/. /aaaa.aa
+/aaaa.aa// /aaaa.aa
+/aaaa.a.aa /aaaa.a.aa
+/aaaa.a.a. /aaaa.a.a.
+/aaaa.a.a/ /aaaa.a.a
+/aaaa.a..a /aaaa.a..a
+/aaaa.a... /aaaa.a...
+/aaaa.a../ /aaaa.a..
+/aaaa.a./a /aaaa.a./a
+/aaaa.a./. /aaaa.a.
+/aaaa.a.// /aaaa.a.
+/aaaa.a/aa /aaaa.a/aa
+/aaaa.a/a. /aaaa.a/a.
+/aaaa.a/a/ /aaaa.a/a
+/aaaa.a/.a /aaaa.a/.a
+/aaaa.a/.. /
+/aaaa.a/./ /aaaa.a
+/aaaa.a//a /aaaa.a/a
+/aaaa.a//. /aaaa.a
+/aaaa.a/// /aaaa.a
+/aaaa..aaa /aaaa..aaa
+/aaaa..aa. /aaaa..aa.
+/aaaa..aa/ /aaaa..aa
+/aaaa..a.a /aaaa..a.a
+/aaaa..a.. /aaaa..a..
+/aaaa..a./ /aaaa..a.
+/aaaa..a/a /aaaa..a/a
+/aaaa..a/. /aaaa..a
+/aaaa..a// /aaaa..a
+/aaaa...aa /aaaa...aa
+/aaaa...a. /aaaa...a.
+/aaaa...a/ /aaaa...a
+/aaaa....a /aaaa....a
+/aaaa..... /aaaa.....
+/aaaa..../ /aaaa....
+/aaaa.../a /aaaa.../a
+/aaaa.../. /aaaa...
+/aaaa...// /aaaa...
+/aaaa../aa /aaaa../aa
+/aaaa../a. /aaaa../a.
+/aaaa../a/ /aaaa../a
+/aaaa../.a /aaaa../.a
+/aaaa../.. /
+/aaaa.././ /aaaa..
+/aaaa..//a /aaaa../a
+/aaaa..//. /aaaa..
+/aaaa../// /aaaa..
+/aaaa./aaa /aaaa./aaa
+/aaaa./aa. /aaaa./aa.
+/aaaa./aa/ /aaaa./aa
+/aaaa./a.a /aaaa./a.a
+/aaaa./a.. /aaaa./a..
+/aaaa./a./ /aaaa./a.
+/aaaa./a/a /aaaa./a/a
+/aaaa./a/. /aaaa./a
+/aaaa./a// /aaaa./a
+/aaaa./.aa /aaaa./.aa
+/aaaa./.a. /aaaa./.a.
+/aaaa./.a/ /aaaa./.a
+/aaaa./..a /aaaa./..a
+/aaaa./... /aaaa./...
+/aaaa./../ /
+/aaaa././a /aaaa./a
+/aaaa././. /aaaa.
+/aaaa./.// /aaaa.
+/aaaa.//aa /aaaa./aa
+/aaaa.//a. /aaaa./a.
+/aaaa.//a/ /aaaa./a
+/aaaa.//.a /aaaa./.a
+/aaaa.//.. /
+/aaaa.//./ /aaaa.
+/aaaa.///a /aaaa./a
+/aaaa.///. /aaaa.
+/aaaa.//// /aaaa.
+/aaaa/aaaa /aaaa/aaaa
+/aaaa/aaa. /aaaa/aaa.
+/aaaa/aaa/ /aaaa/aaa
+/aaaa/aa.a /aaaa/aa.a
+/aaaa/aa.. /aaaa/aa..
+/aaaa/aa./ /aaaa/aa.
+/aaaa/aa/a /aaaa/aa/a
+/aaaa/aa/. /aaaa/aa
+/aaaa/aa// /aaaa/aa
+/aaaa/a.aa /aaaa/a.aa
+/aaaa/a.a. /aaaa/a.a.
+/aaaa/a.a/ /aaaa/a.a
+/aaaa/a..a /aaaa/a..a
+/aaaa/a... /aaaa/a...
+/aaaa/a../ /aaaa/a..
+/aaaa/a./a /aaaa/a./a
+/aaaa/a./. /aaaa/a.
+/aaaa/a.// /aaaa/a.
+/aaaa/a/aa /aaaa/a/aa
+/aaaa/a/a. /aaaa/a/a.
+/aaaa/a/a/ /aaaa/a/a
+/aaaa/a/.a /aaaa/a/.a
+/aaaa/a/.. /aaaa
+/aaaa/a/./ /aaaa/a
+/aaaa/a//a /aaaa/a/a
+/aaaa/a//. /aaaa/a
+/aaaa/a/// /aaaa/a
+/aaaa/.aaa /aaaa/.aaa
+/aaaa/.aa. /aaaa/.aa.
+/aaaa/.aa/ /aaaa/.aa
+/aaaa/.a.a /aaaa/.a.a
+/aaaa/.a.. /aaaa/.a..
+/aaaa/.a./ /aaaa/.a.
+/aaaa/.a/a /aaaa/.a/a
+/aaaa/.a/. /aaaa/.a
+/aaaa/.a// /aaaa/.a
+/aaaa/..aa /aaaa/..aa
+/aaaa/..a. /aaaa/..a.
+/aaaa/..a/ /aaaa/..a
+/aaaa/...a /aaaa/...a
+/aaaa/.... /aaaa/....
+/aaaa/.../ /aaaa/...
+/aaaa/../a /a
+/aaaa/../. /
+/aaaa/..// /
+/aaaa/./aa /aaaa/aa
+/aaaa/./a. /aaaa/a.
+/aaaa/./a/ /aaaa/a
+/aaaa/./.a /aaaa/.a
+/aaaa/./.. /
+/aaaa/././ /aaaa
+/aaaa/.//a /aaaa/a
+/aaaa/.//. /aaaa
+/aaaa/./// /aaaa
+/aaaa//aaa /aaaa/aaa
+/aaaa//aa. /aaaa/aa.
+/aaaa//aa/ /aaaa/aa
+/aaaa//a.a /aaaa/a.a
+/aaaa//a.. /aaaa/a..
+/aaaa//a./ /aaaa/a.
+/aaaa//a/a /aaaa/a/a
+/aaaa//a/. /aaaa/a
+/aaaa//a// /aaaa/a
+/aaaa//.aa /aaaa/.aa
+/aaaa//.a. /aaaa/.a.
+/aaaa//.a/ /aaaa/.a
+/aaaa//..a /aaaa/..a
+/aaaa//... /aaaa/...
+/aaaa//../ /
+/aaaa//./a /aaaa/a
+/aaaa//./. /aaaa
+/aaaa//.// /aaaa
+/aaaa///aa /aaaa/aa
+/aaaa///a. /aaaa/a.
+/aaaa///a/ /aaaa/a
+/aaaa///.a /aaaa/.a
+/aaaa///.. /
+/aaaa///./ /aaaa
+/aaaa////a /aaaa/a
+/aaaa////. /aaaa
+/aaaa///// /aaaa
+/aaa.aaaaa /aaa.aaaaa
+/aaa.aaaa. /aaa.aaaa.
+/aaa.aaaa/ /aaa.aaaa
+/aaa.aaa.a /aaa.aaa.a
+/aaa.aaa.. /aaa.aaa..
+/aaa.aaa./ /aaa.aaa.
+/aaa.aaa/a /aaa.aaa/a
+/aaa.aaa/. /aaa.aaa
+/aaa.aaa// /aaa.aaa
+/aaa.aa.aa /aaa.aa.aa
+/aaa.aa.a. /aaa.aa.a.
+/aaa.aa.a/ /aaa.aa.a
+/aaa.aa..a /aaa.aa..a
+/aaa.aa... /aaa.aa...
+/aaa.aa../ /aaa.aa..
+/aaa.aa./a /aaa.aa./a
+/aaa.aa./. /aaa.aa.
+/aaa.aa.// /aaa.aa.
+/aaa.aa/aa /aaa.aa/aa
+/aaa.aa/a. /aaa.aa/a.
+/aaa.aa/a/ /aaa.aa/a
+/aaa.aa/.a /aaa.aa/.a
+/aaa.aa/.. /
+/aaa.aa/./ /aaa.aa
+/aaa.aa//a /aaa.aa/a
+/aaa.aa//. /aaa.aa
+/aaa.aa/// /aaa.aa
+/aaa.a.aaa /aaa.a.aaa
+/aaa.a.aa. /aaa.a.aa.
+/aaa.a.aa/ /aaa.a.aa
+/aaa.a.a.a /aaa.a.a.a
+/aaa.a.a.. /aaa.a.a..
+/aaa.a.a./ /aaa.a.a.
+/aaa.a.a/a /aaa.a.a/a
+/aaa.a.a/. /aaa.a.a
+/aaa.a.a// /aaa.a.a
+/aaa.a..aa /aaa.a..aa
+/aaa.a..a. /aaa.a..a.
+/aaa.a..a/ /aaa.a..a
+/aaa.a...a /aaa.a...a
+/aaa.a.... /aaa.a....
+/aaa.a.../ /aaa.a...
+/aaa.a../a /aaa.a../a
+/aaa.a../. /aaa.a..
+/aaa.a..// /aaa.a..
+/aaa.a./aa /aaa.a./aa
+/aaa.a./a. /aaa.a./a.
+/aaa.a./a/ /aaa.a./a
+/aaa.a./.a /aaa.a./.a
+/aaa.a./.. /
+/aaa.a././ /aaa.a.
+/aaa.a.//a /aaa.a./a
+/aaa.a.//. /aaa.a.
+/aaa.a./// /aaa.a.
+/aaa.a/aaa /aaa.a/aaa
+/aaa.a/aa. /aaa.a/aa.
+/aaa.a/aa/ /aaa.a/aa
+/aaa.a/a.a /aaa.a/a.a
+/aaa.a/a.. /aaa.a/a..
+/aaa.a/a./ /aaa.a/a.
+/aaa.a/a/a /aaa.a/a/a
+/aaa.a/a/. /aaa.a/a
+/aaa.a/a// /aaa.a/a
+/aaa.a/.aa /aaa.a/.aa
+/aaa.a/.a. /aaa.a/.a.
+/aaa.a/.a/ /aaa.a/.a
+/aaa.a/..a /aaa.a/..a
+/aaa.a/... /aaa.a/...
+/aaa.a/../ /
+/aaa.a/./a /aaa.a/a
+/aaa.a/./. /aaa.a
+/aaa.a/.// /aaa.a
+/aaa.a//aa /aaa.a/aa
+/aaa.a//a. /aaa.a/a.
+/aaa.a//a/ /aaa.a/a
+/aaa.a//.a /aaa.a/.a
+/aaa.a//.. /
+/aaa.a//./ /aaa.a
+/aaa.a///a /aaa.a/a
+/aaa.a///. /aaa.a
+/aaa.a//// /aaa.a
+/aaa..aaaa /aaa..aaaa
+/aaa..aaa. /aaa..aaa.
+/aaa..aaa/ /aaa..aaa
+/aaa..aa.a /aaa..aa.a
+/aaa..aa.. /aaa..aa..
+/aaa..aa./ /aaa..aa.
+/aaa..aa/a /aaa..aa/a
+/aaa..aa/. /aaa..aa
+/aaa..aa// /aaa..aa
+/aaa..a.aa /aaa..a.aa
+/aaa..a.a. /aaa..a.a.
+/aaa..a.a/ /aaa..a.a
+/aaa..a..a /aaa..a..a
+/aaa..a... /aaa..a...
+/aaa..a../ /aaa..a..
+/aaa..a./a /aaa..a./a
+/aaa..a./. /aaa..a.
+/aaa..a.// /aaa..a.
+/aaa..a/aa /aaa..a/aa
+/aaa..a/a. /aaa..a/a.
+/aaa..a/a/ /aaa..a/a
+/aaa..a/.a /aaa..a/.a
+/aaa..a/.. /
+/aaa..a/./ /aaa..a
+/aaa..a//a /aaa..a/a
+/aaa..a//. /aaa..a
+/aaa..a/// /aaa..a
+/aaa...aaa /aaa...aaa
+/aaa...aa. /aaa...aa.
+/aaa...aa/ /aaa...aa
+/aaa...a.a /aaa...a.a
+/aaa...a.. /aaa...a..
+/aaa...a./ /aaa...a.
+/aaa...a/a /aaa...a/a
+/aaa...a/. /aaa...a
+/aaa...a// /aaa...a
+/aaa....aa /aaa....aa
+/aaa....a. /aaa....a.
+/aaa....a/ /aaa....a
+/aaa.....a /aaa.....a
+/aaa...... /aaa......
+/aaa...../ /aaa.....
+/aaa..../a /aaa..../a
+/aaa..../. /aaa....
+/aaa....// /aaa....
+/aaa.../aa /aaa.../aa
+/aaa.../a. /aaa.../a.
+/aaa.../a/ /aaa.../a
+/aaa.../.a /aaa.../.a
+/aaa.../.. /
+/aaa..././ /aaa...
+/aaa...//a /aaa.../a
+/aaa...//. /aaa...
+/aaa.../// /aaa...
+/aaa../aaa /aaa../aaa
+/aaa../aa. /aaa../aa.
+/aaa../aa/ /aaa../aa
+/aaa../a.a /aaa../a.a
+/aaa../a.. /aaa../a..
+/aaa../a./ /aaa../a.
+/aaa../a/a /aaa../a/a
+/aaa../a/. /aaa../a
+/aaa../a// /aaa../a
+/aaa../.aa /aaa../.aa
+/aaa../.a. /aaa../.a.
+/aaa../.a/ /aaa../.a
+/aaa../..a /aaa../..a
+/aaa../... /aaa../...
+/aaa../../ /
+/aaa.././a /aaa../a
+/aaa.././. /aaa..
+/aaa../.// /aaa..
+/aaa..//aa /aaa../aa
+/aaa..//a. /aaa../a.
+/aaa..//a/ /aaa../a
+/aaa..//.a /aaa../.a
+/aaa..//.. /
+/aaa..//./ /aaa..
+/aaa..///a /aaa../a
+/aaa..///. /aaa..
+/aaa..//// /aaa..
+/aaa./aaaa /aaa./aaaa
+/aaa./aaa. /aaa./aaa.
+/aaa./aaa/ /aaa./aaa
+/aaa./aa.a /aaa./aa.a
+/aaa./aa.. /aaa./aa..
+/aaa./aa./ /aaa./aa.
+/aaa./aa/a /aaa./aa/a
+/aaa./aa/. /aaa./aa
+/aaa./aa// /aaa./aa
+/aaa./a.aa /aaa./a.aa
+/aaa./a.a. /aaa./a.a.
+/aaa./a.a/ /aaa./a.a
+/aaa./a..a /aaa./a..a
+/aaa./a... /aaa./a...
+/aaa./a../ /aaa./a..
+/aaa./a./a /aaa./a./a
+/aaa./a./. /aaa./a.
+/aaa./a.// /aaa./a.
+/aaa./a/aa /aaa./a/aa
+/aaa./a/a. /aaa./a/a.
+/aaa./a/a/ /aaa./a/a
+/aaa./a/.a /aaa./a/.a
+/aaa./a/.. /aaa.
+/aaa./a/./ /aaa./a
+/aaa./a//a /aaa./a/a
+/aaa./a//. /aaa./a
+/aaa./a/// /aaa./a
+/aaa./.aaa /aaa./.aaa
+/aaa./.aa. /aaa./.aa.
+/aaa./.aa/ /aaa./.aa
+/aaa./.a.a /aaa./.a.a
+/aaa./.a.. /aaa./.a..
+/aaa./.a./ /aaa./.a.
+/aaa./.a/a /aaa./.a/a
+/aaa./.a/. /aaa./.a
+/aaa./.a// /aaa./.a
+/aaa./..aa /aaa./..aa
+/aaa./..a. /aaa./..a.
+/aaa./..a/ /aaa./..a
+/aaa./...a /aaa./...a
+/aaa./.... /aaa./....
+/aaa./.../ /aaa./...
+/aaa./../a /a
+/aaa./../. /
+/aaa./..// /
+/aaa././aa /aaa./aa
+/aaa././a. /aaa./a.
+/aaa././a/ /aaa./a
+/aaa././.a /aaa./.a
+/aaa././.. /
+/aaa./././ /aaa.
+/aaa././/a /aaa./a
+/aaa././/. /aaa.
+/aaa././// /aaa.
+/aaa.//aaa /aaa./aaa
+/aaa.//aa. /aaa./aa.
+/aaa.//aa/ /aaa./aa
+/aaa.//a.a /aaa./a.a
+/aaa.//a.. /aaa./a..
+/aaa.//a./ /aaa./a.
+/aaa.//a/a /aaa./a/a
+/aaa.//a/. /aaa./a
+/aaa.//a// /aaa./a
+/aaa.//.aa /aaa./.aa
+/aaa.//.a. /aaa./.a.
+/aaa.//.a/ /aaa./.a
+/aaa.//..a /aaa./..a
+/aaa.//... /aaa./...
+/aaa.//../ /
+/aaa.//./a /aaa./a
+/aaa.//./. /aaa.
+/aaa.//.// /aaa.
+/aaa.///aa /aaa./aa
+/aaa.///a. /aaa./a.
+/aaa.///a/ /aaa./a
+/aaa.///.a /aaa./.a
+/aaa.///.. /
+/aaa.///./ /aaa.
+/aaa.////a /aaa./a
+/aaa.////. /aaa.
+/aaa.///// /aaa.
+/aaa/aaaaa /aaa/aaaaa
+/aaa/aaaa. /aaa/aaaa.
+/aaa/aaaa/ /aaa/aaaa
+/aaa/aaa.a /aaa/aaa.a
+/aaa/aaa.. /aaa/aaa..
+/aaa/aaa./ /aaa/aaa.
+/aaa/aaa/a /aaa/aaa/a
+/aaa/aaa/. /aaa/aaa
+/aaa/aaa// /aaa/aaa
+/aaa/aa.aa /aaa/aa.aa
+/aaa/aa.a. /aaa/aa.a.
+/aaa/aa.a/ /aaa/aa.a
+/aaa/aa..a /aaa/aa..a
+/aaa/aa... /aaa/aa...
+/aaa/aa../ /aaa/aa..
+/aaa/aa./a /aaa/aa./a
+/aaa/aa./. /aaa/aa.
+/aaa/aa.// /aaa/aa.
+/aaa/aa/aa /aaa/aa/aa
+/aaa/aa/a. /aaa/aa/a.
+/aaa/aa/a/ /aaa/aa/a
+/aaa/aa/.a /aaa/aa/.a
+/aaa/aa/.. /aaa
+/aaa/aa/./ /aaa/aa
+/aaa/aa//a /aaa/aa/a
+/aaa/aa//. /aaa/aa
+/aaa/aa/// /aaa/aa
+/aaa/a.aaa /aaa/a.aaa
+/aaa/a.aa. /aaa/a.aa.
+/aaa/a.aa/ /aaa/a.aa
+/aaa/a.a.a /aaa/a.a.a
+/aaa/a.a.. /aaa/a.a..
+/aaa/a.a./ /aaa/a.a.
+/aaa/a.a/a /aaa/a.a/a
+/aaa/a.a/. /aaa/a.a
+/aaa/a.a// /aaa/a.a
+/aaa/a..aa /aaa/a..aa
+/aaa/a..a. /aaa/a..a.
+/aaa/a..a/ /aaa/a..a
+/aaa/a...a /aaa/a...a
+/aaa/a.... /aaa/a....
+/aaa/a.../ /aaa/a...
+/aaa/a../a /aaa/a../a
+/aaa/a../. /aaa/a..
+/aaa/a..// /aaa/a..
+/aaa/a./aa /aaa/a./aa
+/aaa/a./a. /aaa/a./a.
+/aaa/a./a/ /aaa/a./a
+/aaa/a./.a /aaa/a./.a
+/aaa/a./.. /aaa
+/aaa/a././ /aaa/a.
+/aaa/a.//a /aaa/a./a
+/aaa/a.//. /aaa/a.
+/aaa/a./// /aaa/a.
+/aaa/a/aaa /aaa/a/aaa
+/aaa/a/aa. /aaa/a/aa.
+/aaa/a/aa/ /aaa/a/aa
+/aaa/a/a.a /aaa/a/a.a
+/aaa/a/a.. /aaa/a/a..
+/aaa/a/a./ /aaa/a/a.
+/aaa/a/a/a /aaa/a/a/a
+/aaa/a/a/. /aaa/a/a
+/aaa/a/a// /aaa/a/a
+/aaa/a/.aa /aaa/a/.aa
+/aaa/a/.a. /aaa/a/.a.
+/aaa/a/.a/ /aaa/a/.a
+/aaa/a/..a /aaa/a/..a
+/aaa/a/... /aaa/a/...
+/aaa/a/../ /aaa
+/aaa/a/./a /aaa/a/a
+/aaa/a/./. /aaa/a
+/aaa/a/.// /aaa/a
+/aaa/a//aa /aaa/a/aa
+/aaa/a//a. /aaa/a/a.
+/aaa/a//a/ /aaa/a/a
+/aaa/a//.a /aaa/a/.a
+/aaa/a//.. /aaa
+/aaa/a//./ /aaa/a
+/aaa/a///a /aaa/a/a
+/aaa/a///. /aaa/a
+/aaa/a//// /aaa/a
+/aaa/.aaaa /aaa/.aaaa
+/aaa/.aaa. /aaa/.aaa.
+/aaa/.aaa/ /aaa/.aaa
+/aaa/.aa.a /aaa/.aa.a
+/aaa/.aa.. /aaa/.aa..
+/aaa/.aa./ /aaa/.aa.
+/aaa/.aa/a /aaa/.aa/a
+/aaa/.aa/. /aaa/.aa
+/aaa/.aa// /aaa/.aa
+/aaa/.a.aa /aaa/.a.aa
+/aaa/.a.a. /aaa/.a.a.
+/aaa/.a.a/ /aaa/.a.a
+/aaa/.a..a /aaa/.a..a
+/aaa/.a... /aaa/.a...
+/aaa/.a../ /aaa/.a..
+/aaa/.a./a /aaa/.a./a
+/aaa/.a./. /aaa/.a.
+/aaa/.a.// /aaa/.a.
+/aaa/.a/aa /aaa/.a/aa
+/aaa/.a/a. /aaa/.a/a.
+/aaa/.a/a/ /aaa/.a/a
+/aaa/.a/.a /aaa/.a/.a
+/aaa/.a/.. /aaa
+/aaa/.a/./ /aaa/.a
+/aaa/.a//a /aaa/.a/a
+/aaa/.a//. /aaa/.a
+/aaa/.a/// /aaa/.a
+/aaa/..aaa /aaa/..aaa
+/aaa/..aa. /aaa/..aa.
+/aaa/..aa/ /aaa/..aa
+/aaa/..a.a /aaa/..a.a
+/aaa/..a.. /aaa/..a..
+/aaa/..a./ /aaa/..a.
+/aaa/..a/a /aaa/..a/a
+/aaa/..a/. /aaa/..a
+/aaa/..a// /aaa/..a
+/aaa/...aa /aaa/...aa
+/aaa/...a. /aaa/...a.
+/aaa/...a/ /aaa/...a
+/aaa/....a /aaa/....a
+/aaa/..... /aaa/.....
+/aaa/..../ /aaa/....
+/aaa/.../a /aaa/.../a
+/aaa/.../. /aaa/...
+/aaa/...// /aaa/...
+/aaa/../aa /aa
+/aaa/../a. /a.
+/aaa/../a/ /a
+/aaa/../.a /.a
+/aaa/../.. /
+/aaa/.././ /
+/aaa/..//a /a
+/aaa/..//. /
+/aaa/../// /
+/aaa/./aaa /aaa/aaa
+/aaa/./aa. /aaa/aa.
+/aaa/./aa/ /aaa/aa
+/aaa/./a.a /aaa/a.a
+/aaa/./a.. /aaa/a..
+/aaa/./a./ /aaa/a.
+/aaa/./a/a /aaa/a/a
+/aaa/./a/. /aaa/a
+/aaa/./a// /aaa/a
+/aaa/./.aa /aaa/.aa
+/aaa/./.a. /aaa/.a.
+/aaa/./.a/ /aaa/.a
+/aaa/./..a /aaa/..a
+/aaa/./... /aaa/...
+/aaa/./../ /
+/aaa/././a /aaa/a
+/aaa/././. /aaa
+/aaa/./.// /aaa
+/aaa/.//aa /aaa/aa
+/aaa/.//a. /aaa/a.
+/aaa/.//a/ /aaa/a
+/aaa/.//.a /aaa/.a
+/aaa/.//.. /
+/aaa/.//./ /aaa
+/aaa/.///a /aaa/a
+/aaa/.///. /aaa
+/aaa/.//// /aaa
+/aaa//aaaa /aaa/aaaa
+/aaa//aaa. /aaa/aaa.
+/aaa//aaa/ /aaa/aaa
+/aaa//aa.a /aaa/aa.a
+/aaa//aa.. /aaa/aa..
+/aaa//aa./ /aaa/aa.
+/aaa//aa/a /aaa/aa/a
+/aaa//aa/. /aaa/aa
+/aaa//aa// /aaa/aa
+/aaa//a.aa /aaa/a.aa
+/aaa//a.a. /aaa/a.a.
+/aaa//a.a/ /aaa/a.a
+/aaa//a..a /aaa/a..a
+/aaa//a... /aaa/a...
+/aaa//a../ /aaa/a..
+/aaa//a./a /aaa/a./a
+/aaa//a./. /aaa/a.
+/aaa//a.// /aaa/a.
+/aaa//a/aa /aaa/a/aa
+/aaa//a/a. /aaa/a/a.
+/aaa//a/a/ /aaa/a/a
+/aaa//a/.a /aaa/a/.a
+/aaa//a/.. /aaa
+/aaa//a/./ /aaa/a
+/aaa//a//a /aaa/a/a
+/aaa//a//. /aaa/a
+/aaa//a/// /aaa/a
+/aaa//.aaa /aaa/.aaa
+/aaa//.aa. /aaa/.aa.
+/aaa//.aa/ /aaa/.aa
+/aaa//.a.a /aaa/.a.a
+/aaa//.a.. /aaa/.a..
+/aaa//.a./ /aaa/.a.
+/aaa//.a/a /aaa/.a/a
+/aaa//.a/. /aaa/.a
+/aaa//.a// /aaa/.a
+/aaa//..aa /aaa/..aa
+/aaa//..a. /aaa/..a.
+/aaa//..a/ /aaa/..a
+/aaa//...a /aaa/...a
+/aaa//.... /aaa/....
+/aaa//.../ /aaa/...
+/aaa//../a /a
+/aaa//../. /
+/aaa//..// /
+/aaa//./aa /aaa/aa
+/aaa//./a. /aaa/a.
+/aaa//./a/ /aaa/a
+/aaa//./.a /aaa/.a
+/aaa//./.. /
+/aaa//././ /aaa
+/aaa//.//a /aaa/a
+/aaa//.//. /aaa
+/aaa//./// /aaa
+/aaa///aaa /aaa/aaa
+/aaa///aa. /aaa/aa.
+/aaa///aa/ /aaa/aa
+/aaa///a.a /aaa/a.a
+/aaa///a.. /aaa/a..
+/aaa///a./ /aaa/a.
+/aaa///a/a /aaa/a/a
+/aaa///a/. /aaa/a
+/aaa///a// /aaa/a
+/aaa///.aa /aaa/.aa
+/aaa///.a. /aaa/.a.
+/aaa///.a/ /aaa/.a
+/aaa///..a /aaa/..a
+/aaa///... /aaa/...
+/aaa///../ /
+/aaa///./a /aaa/a
+/aaa///./. /aaa
+/aaa///.// /aaa
+/aaa////aa /aaa/aa
+/aaa////a. /aaa/a.
+/aaa////a/ /aaa/a
+/aaa////.a /aaa/.a
+/aaa////.. /
+/aaa////./ /aaa
+/aaa/////a /aaa/a
+/aaa/////. /aaa
+/aaa////// /aaa
+/aa.aaaaaa /aa.aaaaaa
+/aa.aaaaa. /aa.aaaaa.
+/aa.aaaaa/ /aa.aaaaa
+/aa.aaaa.a /aa.aaaa.a
+/aa.aaaa.. /aa.aaaa..
+/aa.aaaa./ /aa.aaaa.
+/aa.aaaa/a /aa.aaaa/a
+/aa.aaaa/. /aa.aaaa
+/aa.aaaa// /aa.aaaa
+/aa.aaa.aa /aa.aaa.aa
+/aa.aaa.a. /aa.aaa.a.
+/aa.aaa.a/ /aa.aaa.a
+/aa.aaa..a /aa.aaa..a
+/aa.aaa... /aa.aaa...
+/aa.aaa../ /aa.aaa..
+/aa.aaa./a /aa.aaa./a
+/aa.aaa./. /aa.aaa.
+/aa.aaa.// /aa.aaa.
+/aa.aaa/aa /aa.aaa/aa
+/aa.aaa/a. /aa.aaa/a.
+/aa.aaa/a/ /aa.aaa/a
+/aa.aaa/.a /aa.aaa/.a
+/aa.aaa/.. /
+/aa.aaa/./ /aa.aaa
+/aa.aaa//a /aa.aaa/a
+/aa.aaa//. /aa.aaa
+/aa.aaa/// /aa.aaa
+/aa.aa.aaa /aa.aa.aaa
+/aa.aa.aa. /aa.aa.aa.
+/aa.aa.aa/ /aa.aa.aa
+/aa.aa.a.a /aa.aa.a.a
+/aa.aa.a.. /aa.aa.a..
+/aa.aa.a./ /aa.aa.a.
+/aa.aa.a/a /aa.aa.a/a
+/aa.aa.a/. /aa.aa.a
+/aa.aa.a// /aa.aa.a
+/aa.aa..aa /aa.aa..aa
+/aa.aa..a. /aa.aa..a.
+/aa.aa..a/ /aa.aa..a
+/aa.aa...a /aa.aa...a
+/aa.aa.... /aa.aa....
+/aa.aa.../ /aa.aa...
+/aa.aa../a /aa.aa../a
+/aa.aa../. /aa.aa..
+/aa.aa..// /aa.aa..
+/aa.aa./aa /aa.aa./aa
+/aa.aa./a. /aa.aa./a.
+/aa.aa./a/ /aa.aa./a
+/aa.aa./.a /aa.aa./.a
+/aa.aa./.. /
+/aa.aa././ /aa.aa.
+/aa.aa.//a /aa.aa./a
+/aa.aa.//. /aa.aa.
+/aa.aa./// /aa.aa.
+/aa.aa/aaa /aa.aa/aaa
+/aa.aa/aa. /aa.aa/aa.
+/aa.aa/aa/ /aa.aa/aa
+/aa.aa/a.a /aa.aa/a.a
+/aa.aa/a.. /aa.aa/a..
+/aa.aa/a./ /aa.aa/a.
+/aa.aa/a/a /aa.aa/a/a
+/aa.aa/a/. /aa.aa/a
+/aa.aa/a// /aa.aa/a
+/aa.aa/.aa /aa.aa/.aa
+/aa.aa/.a. /aa.aa/.a.
+/aa.aa/.a/ /aa.aa/.a
+/aa.aa/..a /aa.aa/..a
+/aa.aa/... /aa.aa/...
+/aa.aa/../ /
+/aa.aa/./a /aa.aa/a
+/aa.aa/./. /aa.aa
+/aa.aa/.// /aa.aa
+/aa.aa//aa /aa.aa/aa
+/aa.aa//a. /aa.aa/a.
+/aa.aa//a/ /aa.aa/a
+/aa.aa//.a /aa.aa/.a
+/aa.aa//.. /
+/aa.aa//./ /aa.aa
+/aa.aa///a /aa.aa/a
+/aa.aa///. /aa.aa
+/aa.aa//// /aa.aa
+/aa.a.aaaa /aa.a.aaaa
+/aa.a.aaa. /aa.a.aaa.
+/aa.a.aaa/ /aa.a.aaa
+/aa.a.aa.a /aa.a.aa.a
+/aa.a.aa.. /aa.a.aa..
+/aa.a.aa./ /aa.a.aa.
+/aa.a.aa/a /aa.a.aa/a
+/aa.a.aa/. /aa.a.aa
+/aa.a.aa// /aa.a.aa
+/aa.a.a.aa /aa.a.a.aa
+/aa.a.a.a. /aa.a.a.a.
+/aa.a.a.a/ /aa.a.a.a
+/aa.a.a..a /aa.a.a..a
+/aa.a.a... /aa.a.a...
+/aa.a.a../ /aa.a.a..
+/aa.a.a./a /aa.a.a./a
+/aa.a.a./. /aa.a.a.
+/aa.a.a.// /aa.a.a.
+/aa.a.a/aa /aa.a.a/aa
+/aa.a.a/a. /aa.a.a/a.
+/aa.a.a/a/ /aa.a.a/a
+/aa.a.a/.a /aa.a.a/.a
+/aa.a.a/.. /
+/aa.a.a/./ /aa.a.a
+/aa.a.a//a /aa.a.a/a
+/aa.a.a//. /aa.a.a
+/aa.a.a/// /aa.a.a
+/aa.a..aaa /aa.a..aaa
+/aa.a..aa. /aa.a..aa.
+/aa.a..aa/ /aa.a..aa
+/aa.a..a.a /aa.a..a.a
+/aa.a..a.. /aa.a..a..
+/aa.a..a./ /aa.a..a.
+/aa.a..a/a /aa.a..a/a
+/aa.a..a/. /aa.a..a
+/aa.a..a// /aa.a..a
+/aa.a...aa /aa.a...aa
+/aa.a...a. /aa.a...a.
+/aa.a...a/ /aa.a...a
+/aa.a....a /aa.a....a
+/aa.a..... /aa.a.....
+/aa.a..../ /aa.a....
+/aa.a.../a /aa.a.../a
+/aa.a.../. /aa.a...
+/aa.a...// /aa.a...
+/aa.a../aa /aa.a../aa
+/aa.a../a. /aa.a../a.
+/aa.a../a/ /aa.a../a
+/aa.a../.a /aa.a../.a
+/aa.a../.. /
+/aa.a.././ /aa.a..
+/aa.a..//a /aa.a../a
+/aa.a..//. /aa.a..
+/aa.a../// /aa.a..
+/aa.a./aaa /aa.a./aaa
+/aa.a./aa. /aa.a./aa.
+/aa.a./aa/ /aa.a./aa
+/aa.a./a.a /aa.a./a.a
+/aa.a./a.. /aa.a./a..
+/aa.a./a./ /aa.a./a.
+/aa.a./a/a /aa.a./a/a
+/aa.a./a/. /aa.a./a
+/aa.a./a// /aa.a./a
+/aa.a./.aa /aa.a./.aa
+/aa.a./.a. /aa.a./.a.
+/aa.a./.a/ /aa.a./.a
+/aa.a./..a /aa.a./..a
+/aa.a./... /aa.a./...
+/aa.a./../ /
+/aa.a././a /aa.a./a
+/aa.a././. /aa.a.
+/aa.a./.// /aa.a.
+/aa.a.//aa /aa.a./aa
+/aa.a.//a. /aa.a./a.
+/aa.a.//a/ /aa.a./a
+/aa.a.//.a /aa.a./.a
+/aa.a.//.. /
+/aa.a.//./ /aa.a.
+/aa.a.///a /aa.a./a
+/aa.a.///. /aa.a.
+/aa.a.//// /aa.a.
+/aa.a/aaaa /aa.a/aaaa
+/aa.a/aaa. /aa.a/aaa.
+/aa.a/aaa/ /aa.a/aaa
+/aa.a/aa.a /aa.a/aa.a
+/aa.a/aa.. /aa.a/aa..
+/aa.a/aa./ /aa.a/aa.
+/aa.a/aa/a /aa.a/aa/a
+/aa.a/aa/. /aa.a/aa
+/aa.a/aa// /aa.a/aa
+/aa.a/a.aa /aa.a/a.aa
+/aa.a/a.a. /aa.a/a.a.
+/aa.a/a.a/ /aa.a/a.a
+/aa.a/a..a /aa.a/a..a
+/aa.a/a... /aa.a/a...
+/aa.a/a../ /aa.a/a..
+/aa.a/a./a /aa.a/a./a
+/aa.a/a./. /aa.a/a.
+/aa.a/a.// /aa.a/a.
+/aa.a/a/aa /aa.a/a/aa
+/aa.a/a/a. /aa.a/a/a.
+/aa.a/a/a/ /aa.a/a/a
+/aa.a/a/.a /aa.a/a/.a
+/aa.a/a/.. /aa.a
+/aa.a/a/./ /aa.a/a
+/aa.a/a//a /aa.a/a/a
+/aa.a/a//. /aa.a/a
+/aa.a/a/// /aa.a/a
+/aa.a/.aaa /aa.a/.aaa
+/aa.a/.aa. /aa.a/.aa.
+/aa.a/.aa/ /aa.a/.aa
+/aa.a/.a.a /aa.a/.a.a
+/aa.a/.a.. /aa.a/.a..
+/aa.a/.a./ /aa.a/.a.
+/aa.a/.a/a /aa.a/.a/a
+/aa.a/.a/. /aa.a/.a
+/aa.a/.a// /aa.a/.a
+/aa.a/..aa /aa.a/..aa
+/aa.a/..a. /aa.a/..a.
+/aa.a/..a/ /aa.a/..a
+/aa.a/...a /aa.a/...a
+/aa.a/.... /aa.a/....
+/aa.a/.../ /aa.a/...
+/aa.a/../a /a
+/aa.a/../. /
+/aa.a/..// /
+/aa.a/./aa /aa.a/aa
+/aa.a/./a. /aa.a/a.
+/aa.a/./a/ /aa.a/a
+/aa.a/./.a /aa.a/.a
+/aa.a/./.. /
+/aa.a/././ /aa.a
+/aa.a/.//a /aa.a/a
+/aa.a/.//. /aa.a
+/aa.a/./// /aa.a
+/aa.a//aaa /aa.a/aaa
+/aa.a//aa. /aa.a/aa.
+/aa.a//aa/ /aa.a/aa
+/aa.a//a.a /aa.a/a.a
+/aa.a//a.. /aa.a/a..
+/aa.a//a./ /aa.a/a.
+/aa.a//a/a /aa.a/a/a
+/aa.a//a/. /aa.a/a
+/aa.a//a// /aa.a/a
+/aa.a//.aa /aa.a/.aa
+/aa.a//.a. /aa.a/.a.
+/aa.a//.a/ /aa.a/.a
+/aa.a//..a /aa.a/..a
+/aa.a//... /aa.a/...
+/aa.a//../ /
+/aa.a//./a /aa.a/a
+/aa.a//./. /aa.a
+/aa.a//.// /aa.a
+/aa.a///aa /aa.a/aa
+/aa.a///a. /aa.a/a.
+/aa.a///a/ /aa.a/a
+/aa.a///.a /aa.a/.a
+/aa.a///.. /
+/aa.a///./ /aa.a
+/aa.a////a /aa.a/a
+/aa.a////. /aa.a
+/aa.a///// /aa.a
+/aa..aaaaa /aa..aaaaa
+/aa..aaaa. /aa..aaaa.
+/aa..aaaa/ /aa..aaaa
+/aa..aaa.a /aa..aaa.a
+/aa..aaa.. /aa..aaa..
+/aa..aaa./ /aa..aaa.
+/aa..aaa/a /aa..aaa/a
+/aa..aaa/. /aa..aaa
+/aa..aaa// /aa..aaa
+/aa..aa.aa /aa..aa.aa
+/aa..aa.a. /aa..aa.a.
+/aa..aa.a/ /aa..aa.a
+/aa..aa..a /aa..aa..a
+/aa..aa... /aa..aa...
+/aa..aa../ /aa..aa..
+/aa..aa./a /aa..aa./a
+/aa..aa./. /aa..aa.
+/aa..aa.// /aa..aa.
+/aa..aa/aa /aa..aa/aa
+/aa..aa/a. /aa..aa/a.
+/aa..aa/a/ /aa..aa/a
+/aa..aa/.a /aa..aa/.a
+/aa..aa/.. /
+/aa..aa/./ /aa..aa
+/aa..aa//a /aa..aa/a
+/aa..aa//. /aa..aa
+/aa..aa/// /aa..aa
+/aa..a.aaa /aa..a.aaa
+/aa..a.aa. /aa..a.aa.
+/aa..a.aa/ /aa..a.aa
+/aa..a.a.a /aa..a.a.a
+/aa..a.a.. /aa..a.a..
+/aa..a.a./ /aa..a.a.
+/aa..a.a/a /aa..a.a/a
+/aa..a.a/. /aa..a.a
+/aa..a.a// /aa..a.a
+/aa..a..aa /aa..a..aa
+/aa..a..a. /aa..a..a.
+/aa..a..a/ /aa..a..a
+/aa..a...a /aa..a...a
+/aa..a.... /aa..a....
+/aa..a.../ /aa..a...
+/aa..a../a /aa..a../a
+/aa..a../. /aa..a..
+/aa..a..// /aa..a..
+/aa..a./aa /aa..a./aa
+/aa..a./a. /aa..a./a.
+/aa..a./a/ /aa..a./a
+/aa..a./.a /aa..a./.a
+/aa..a./.. /
+/aa..a././ /aa..a.
+/aa..a.//a /aa..a./a
+/aa..a.//. /aa..a.
+/aa..a./// /aa..a.
+/aa..a/aaa /aa..a/aaa
+/aa..a/aa. /aa..a/aa.
+/aa..a/aa/ /aa..a/aa
+/aa..a/a.a /aa..a/a.a
+/aa..a/a.. /aa..a/a..
+/aa..a/a./ /aa..a/a.
+/aa..a/a/a /aa..a/a/a
+/aa..a/a/. /aa..a/a
+/aa..a/a// /aa..a/a
+/aa..a/.aa /aa..a/.aa
+/aa..a/.a. /aa..a/.a.
+/aa..a/.a/ /aa..a/.a
+/aa..a/..a /aa..a/..a
+/aa..a/... /aa..a/...
+/aa..a/../ /
+/aa..a/./a /aa..a/a
+/aa..a/./. /aa..a
+/aa..a/.// /aa..a
+/aa..a//aa /aa..a/aa
+/aa..a//a. /aa..a/a.
+/aa..a//a/ /aa..a/a
+/aa..a//.a /aa..a/.a
+/aa..a//.. /
+/aa..a//./ /aa..a
+/aa..a///a /aa..a/a
+/aa..a///. /aa..a
+/aa..a//// /aa..a
+/aa...aaaa /aa...aaaa
+/aa...aaa. /aa...aaa.
+/aa...aaa/ /aa...aaa
+/aa...aa.a /aa...aa.a
+/aa...aa.. /aa...aa..
+/aa...aa./ /aa...aa.
+/aa...aa/a /aa...aa/a
+/aa...aa/. /aa...aa
+/aa...aa// /aa...aa
+/aa...a.aa /aa...a.aa
+/aa...a.a. /aa...a.a.
+/aa...a.a/ /aa...a.a
+/aa...a..a /aa...a..a
+/aa...a... /aa...a...
+/aa...a../ /aa...a..
+/aa...a./a /aa...a./a
+/aa...a./. /aa...a.
+/aa...a.// /aa...a.
+/aa...a/aa /aa...a/aa
+/aa...a/a. /aa...a/a.
+/aa...a/a/ /aa...a/a
+/aa...a/.a /aa...a/.a
+/aa...a/.. /
+/aa...a/./ /aa...a
+/aa...a//a /aa...a/a
+/aa...a//. /aa...a
+/aa...a/// /aa...a
+/aa....aaa /aa....aaa
+/aa....aa. /aa....aa.
+/aa....aa/ /aa....aa
+/aa....a.a /aa....a.a
+/aa....a.. /aa....a..
+/aa....a./ /aa....a.
+/aa....a/a /aa....a/a
+/aa....a/. /aa....a
+/aa....a// /aa....a
+/aa.....aa /aa.....aa
+/aa.....a. /aa.....a.
+/aa.....a/ /aa.....a
+/aa......a /aa......a
+/aa....... /aa.......
+/aa....../ /aa......
+/aa...../a /aa...../a
+/aa...../. /aa.....
+/aa.....// /aa.....
+/aa..../aa /aa..../aa
+/aa..../a. /aa..../a.
+/aa..../a/ /aa..../a
+/aa..../.a /aa..../.a
+/aa..../.. /
+/aa...././ /aa....
+/aa....//a /aa..../a
+/aa....//. /aa....
+/aa..../// /aa....
+/aa.../aaa /aa.../aaa
+/aa.../aa. /aa.../aa.
+/aa.../aa/ /aa.../aa
+/aa.../a.a /aa.../a.a
+/aa.../a.. /aa.../a..
+/aa.../a./ /aa.../a.
+/aa.../a/a /aa.../a/a
+/aa.../a/. /aa.../a
+/aa.../a// /aa.../a
+/aa.../.aa /aa.../.aa
+/aa.../.a. /aa.../.a.
+/aa.../.a/ /aa.../.a
+/aa.../..a /aa.../..a
+/aa.../... /aa.../...
+/aa.../../ /
+/aa..././a /aa.../a
+/aa..././. /aa...
+/aa.../.// /aa...
+/aa...//aa /aa.../aa
+/aa...//a. /aa.../a.
+/aa...//a/ /aa.../a
+/aa...//.a /aa.../.a
+/aa...//.. /
+/aa...//./ /aa...
+/aa...///a /aa.../a
+/aa...///. /aa...
+/aa...//// /aa...
+/aa../aaaa /aa../aaaa
+/aa../aaa. /aa../aaa.
+/aa../aaa/ /aa../aaa
+/aa../aa.a /aa../aa.a
+/aa../aa.. /aa../aa..
+/aa../aa./ /aa../aa.
+/aa../aa/a /aa../aa/a
+/aa../aa/. /aa../aa
+/aa../aa// /aa../aa
+/aa../a.aa /aa../a.aa
+/aa../a.a. /aa../a.a.
+/aa../a.a/ /aa../a.a
+/aa../a..a /aa../a..a
+/aa../a... /aa../a...
+/aa../a../ /aa../a..
+/aa../a./a /aa../a./a
+/aa../a./. /aa../a.
+/aa../a.// /aa../a.
+/aa../a/aa /aa../a/aa
+/aa../a/a. /aa../a/a.
+/aa../a/a/ /aa../a/a
+/aa../a/.a /aa../a/.a
+/aa../a/.. /aa..
+/aa../a/./ /aa../a
+/aa../a//a /aa../a/a
+/aa../a//. /aa../a
+/aa../a/// /aa../a
+/aa../.aaa /aa../.aaa
+/aa../.aa. /aa../.aa.
+/aa../.aa/ /aa../.aa
+/aa../.a.a /aa../.a.a
+/aa../.a.. /aa../.a..
+/aa../.a./ /aa../.a.
+/aa../.a/a /aa../.a/a
+/aa../.a/. /aa../.a
+/aa../.a// /aa../.a
+/aa../..aa /aa../..aa
+/aa../..a. /aa../..a.
+/aa../..a/ /aa../..a
+/aa../...a /aa../...a
+/aa../.... /aa../....
+/aa../.../ /aa../...
+/aa../../a /a
+/aa../../. /
+/aa../..// /
+/aa.././aa /aa../aa
+/aa.././a. /aa../a.
+/aa.././a/ /aa../a
+/aa.././.a /aa../.a
+/aa.././.. /
+/aa../././ /aa..
+/aa.././/a /aa../a
+/aa.././/. /aa..
+/aa.././// /aa..
+/aa..//aaa /aa../aaa
+/aa..//aa. /aa../aa.
+/aa..//aa/ /aa../aa
+/aa..//a.a /aa../a.a
+/aa..//a.. /aa../a..
+/aa..//a./ /aa../a.
+/aa..//a/a /aa../a/a
+/aa..//a/. /aa../a
+/aa..//a// /aa../a
+/aa..//.aa /aa../.aa
+/aa..//.a. /aa../.a.
+/aa..//.a/ /aa../.a
+/aa..//..a /aa../..a
+/aa..//... /aa../...
+/aa..//../ /
+/aa..//./a /aa../a
+/aa..//./. /aa..
+/aa..//.// /aa..
+/aa..///aa /aa../aa
+/aa..///a. /aa../a.
+/aa..///a/ /aa../a
+/aa..///.a /aa../.a
+/aa..///.. /
+/aa..///./ /aa..
+/aa..////a /aa../a
+/aa..////. /aa..
+/aa..///// /aa..
+/aa./aaaaa /aa./aaaaa
+/aa./aaaa. /aa./aaaa.
+/aa./aaaa/ /aa./aaaa
+/aa./aaa.a /aa./aaa.a
+/aa./aaa.. /aa./aaa..
+/aa./aaa./ /aa./aaa.
+/aa./aaa/a /aa./aaa/a
+/aa./aaa/. /aa./aaa
+/aa./aaa// /aa./aaa
+/aa./aa.aa /aa./aa.aa
+/aa./aa.a. /aa./aa.a.
+/aa./aa.a/ /aa./aa.a
+/aa./aa..a /aa./aa..a
+/aa./aa... /aa./aa...
+/aa./aa../ /aa./aa..
+/aa./aa./a /aa./aa./a
+/aa./aa./. /aa./aa.
+/aa./aa.// /aa./aa.
+/aa./aa/aa /aa./aa/aa
+/aa./aa/a. /aa./aa/a.
+/aa./aa/a/ /aa./aa/a
+/aa./aa/.a /aa./aa/.a
+/aa./aa/.. /aa.
+/aa./aa/./ /aa./aa
+/aa./aa//a /aa./aa/a
+/aa./aa//. /aa./aa
+/aa./aa/// /aa./aa
+/aa./a.aaa /aa./a.aaa
+/aa./a.aa. /aa./a.aa.
+/aa./a.aa/ /aa./a.aa
+/aa./a.a.a /aa./a.a.a
+/aa./a.a.. /aa./a.a..
+/aa./a.a./ /aa./a.a.
+/aa./a.a/a /aa./a.a/a
+/aa./a.a/. /aa./a.a
+/aa./a.a// /aa./a.a
+/aa./a..aa /aa./a..aa
+/aa./a..a. /aa./a..a.
+/aa./a..a/ /aa./a..a
+/aa./a...a /aa./a...a
+/aa./a.... /aa./a....
+/aa./a.../ /aa./a...
+/aa./a../a /aa./a../a
+/aa./a../. /aa./a..
+/aa./a..// /aa./a..
+/aa./a./aa /aa./a./aa
+/aa./a./a. /aa./a./a.
+/aa./a./a/ /aa./a./a
+/aa./a./.a /aa./a./.a
+/aa./a./.. /aa.
+/aa./a././ /aa./a.
+/aa./a.//a /aa./a./a
+/aa./a.//. /aa./a.
+/aa./a./// /aa./a.
+/aa./a/aaa /aa./a/aaa
+/aa./a/aa. /aa./a/aa.
+/aa./a/aa/ /aa./a/aa
+/aa./a/a.a /aa./a/a.a
+/aa./a/a.. /aa./a/a..
+/aa./a/a./ /aa./a/a.
+/aa./a/a/a /aa./a/a/a
+/aa./a/a/. /aa./a/a
+/aa./a/a// /aa./a/a
+/aa./a/.aa /aa./a/.aa
+/aa./a/.a. /aa./a/.a.
+/aa./a/.a/ /aa./a/.a
+/aa./a/..a /aa./a/..a
+/aa./a/... /aa./a/...
+/aa./a/../ /aa.
+/aa./a/./a /aa./a/a
+/aa./a/./. /aa./a
+/aa./a/.// /aa./a
+/aa./a//aa /aa./a/aa
+/aa./a//a. /aa./a/a.
+/aa./a//a/ /aa./a/a
+/aa./a//.a /aa./a/.a
+/aa./a//.. /aa.
+/aa./a//./ /aa./a
+/aa./a///a /aa./a/a
+/aa./a///. /aa./a
+/aa./a//// /aa./a
+/aa./.aaaa /aa./.aaaa
+/aa./.aaa. /aa./.aaa.
+/aa./.aaa/ /aa./.aaa
+/aa./.aa.a /aa./.aa.a
+/aa./.aa.. /aa./.aa..
+/aa./.aa./ /aa./.aa.
+/aa./.aa/a /aa./.aa/a
+/aa./.aa/. /aa./.aa
+/aa./.aa// /aa./.aa
+/aa./.a.aa /aa./.a.aa
+/aa./.a.a. /aa./.a.a.
+/aa./.a.a/ /aa./.a.a
+/aa./.a..a /aa./.a..a
+/aa./.a... /aa./.a...
+/aa./.a../ /aa./.a..
+/aa./.a./a /aa./.a./a
+/aa./.a./. /aa./.a.
+/aa./.a.// /aa./.a.
+/aa./.a/aa /aa./.a/aa
+/aa./.a/a. /aa./.a/a.
+/aa./.a/a/ /aa./.a/a
+/aa./.a/.a /aa./.a/.a
+/aa./.a/.. /aa.
+/aa./.a/./ /aa./.a
+/aa./.a//a /aa./.a/a
+/aa./.a//. /aa./.a
+/aa./.a/// /aa./.a
+/aa./..aaa /aa./..aaa
+/aa./..aa. /aa./..aa.
+/aa./..aa/ /aa./..aa
+/aa./..a.a /aa./..a.a
+/aa./..a.. /aa./..a..
+/aa./..a./ /aa./..a.
+/aa./..a/a /aa./..a/a
+/aa./..a/. /aa./..a
+/aa./..a// /aa./..a
+/aa./...aa /aa./...aa
+/aa./...a. /aa./...a.
+/aa./...a/ /aa./...a
+/aa./....a /aa./....a
+/aa./..... /aa./.....
+/aa./..../ /aa./....
+/aa./.../a /aa./.../a
+/aa./.../. /aa./...
+/aa./...// /aa./...
+/aa./../aa /aa
+/aa./../a. /a.
+/aa./../a/ /a
+/aa./../.a /.a
+/aa./../.. /
+/aa./.././ /
+/aa./..//a /a
+/aa./..//. /
+/aa./../// /
+/aa././aaa /aa./aaa
+/aa././aa. /aa./aa.
+/aa././aa/ /aa./aa
+/aa././a.a /aa./a.a
+/aa././a.. /aa./a..
+/aa././a./ /aa./a.
+/aa././a/a /aa./a/a
+/aa././a/. /aa./a
+/aa././a// /aa./a
+/aa././.aa /aa./.aa
+/aa././.a. /aa./.a.
+/aa././.a/ /aa./.a
+/aa././..a /aa./..a
+/aa././... /aa./...
+/aa././../ /
+/aa./././a /aa./a
+/aa./././. /aa.
+/aa././.// /aa.
+/aa././/aa /aa./aa
+/aa././/a. /aa./a.
+/aa././/a/ /aa./a
+/aa././/.a /aa./.a
+/aa././/.. /
+/aa././/./ /aa.
+/aa././//a /aa./a
+/aa././//. /aa.
+/aa././/// /aa.
+/aa.//aaaa /aa./aaaa
+/aa.//aaa. /aa./aaa.
+/aa.//aaa/ /aa./aaa
+/aa.//aa.a /aa./aa.a
+/aa.//aa.. /aa./aa..
+/aa.//aa./ /aa./aa.
+/aa.//aa/a /aa./aa/a
+/aa.//aa/. /aa./aa
+/aa.//aa// /aa./aa
+/aa.//a.aa /aa./a.aa
+/aa.//a.a. /aa./a.a.
+/aa.//a.a/ /aa./a.a
+/aa.//a..a /aa./a..a
+/aa.//a... /aa./a...
+/aa.//a../ /aa./a..
+/aa.//a./a /aa./a./a
+/aa.//a./. /aa./a.
+/aa.//a.// /aa./a.
+/aa.//a/aa /aa./a/aa
+/aa.//a/a. /aa./a/a.
+/aa.//a/a/ /aa./a/a
+/aa.//a/.a /aa./a/.a
+/aa.//a/.. /aa.
+/aa.//a/./ /aa./a
+/aa.//a//a /aa./a/a
+/aa.//a//. /aa./a
+/aa.//a/// /aa./a
+/aa.//.aaa /aa./.aaa
+/aa.//.aa. /aa./.aa.
+/aa.//.aa/ /aa./.aa
+/aa.//.a.a /aa./.a.a
+/aa.//.a.. /aa./.a..
+/aa.//.a./ /aa./.a.
+/aa.//.a/a /aa./.a/a
+/aa.//.a/. /aa./.a
+/aa.//.a// /aa./.a
+/aa.//..aa /aa./..aa
+/aa.//..a. /aa./..a.
+/aa.//..a/ /aa./..a
+/aa.//...a /aa./...a
+/aa.//.... /aa./....
+/aa.//.../ /aa./...
+/aa.//../a /a
+/aa.//../. /
+/aa.//..// /
+/aa.//./aa /aa./aa
+/aa.//./a. /aa./a.
+/aa.//./a/ /aa./a
+/aa.//./.a /aa./.a
+/aa.//./.. /
+/aa.//././ /aa.
+/aa.//.//a /aa./a
+/aa.//.//. /aa.
+/aa.//./// /aa.
+/aa.///aaa /aa./aaa
+/aa.///aa. /aa./aa.
+/aa.///aa/ /aa./aa
+/aa.///a.a /aa./a.a
+/aa.///a.. /aa./a..
+/aa.///a./ /aa./a.
+/aa.///a/a /aa./a/a
+/aa.///a/. /aa./a
+/aa.///a// /aa./a
+/aa.///.aa /aa./.aa
+/aa.///.a. /aa./.a.
+/aa.///.a/ /aa./.a
+/aa.///..a /aa./..a
+/aa.///... /aa./...
+/aa.///../ /
+/aa.///./a /aa./a
+/aa.///./. /aa.
+/aa.///.// /aa.
+/aa.////aa /aa./aa
+/aa.////a. /aa./a.
+/aa.////a/ /aa./a
+/aa.////.a /aa./.a
+/aa.////.. /
+/aa.////./ /aa.
+/aa./////a /aa./a
+/aa./////. /aa.
+/aa.////// /aa.
+/aa/aaaaaa /aa/aaaaaa
+/aa/aaaaa. /aa/aaaaa.
+/aa/aaaaa/ /aa/aaaaa
+/aa/aaaa.a /aa/aaaa.a
+/aa/aaaa.. /aa/aaaa..
+/aa/aaaa./ /aa/aaaa.
+/aa/aaaa/a /aa/aaaa/a
+/aa/aaaa/. /aa/aaaa
+/aa/aaaa// /aa/aaaa
+/aa/aaa.aa /aa/aaa.aa
+/aa/aaa.a. /aa/aaa.a.
+/aa/aaa.a/ /aa/aaa.a
+/aa/aaa..a /aa/aaa..a
+/aa/aaa... /aa/aaa...
+/aa/aaa../ /aa/aaa..
+/aa/aaa./a /aa/aaa./a
+/aa/aaa./. /aa/aaa.
+/aa/aaa.// /aa/aaa.
+/aa/aaa/aa /aa/aaa/aa
+/aa/aaa/a. /aa/aaa/a.
+/aa/aaa/a/ /aa/aaa/a
+/aa/aaa/.a /aa/aaa/.a
+/aa/aaa/.. /aa
+/aa/aaa/./ /aa/aaa
+/aa/aaa//a /aa/aaa/a
+/aa/aaa//. /aa/aaa
+/aa/aaa/// /aa/aaa
+/aa/aa.aaa /aa/aa.aaa
+/aa/aa.aa. /aa/aa.aa.
+/aa/aa.aa/ /aa/aa.aa
+/aa/aa.a.a /aa/aa.a.a
+/aa/aa.a.. /aa/aa.a..
+/aa/aa.a./ /aa/aa.a.
+/aa/aa.a/a /aa/aa.a/a
+/aa/aa.a/. /aa/aa.a
+/aa/aa.a// /aa/aa.a
+/aa/aa..aa /aa/aa..aa
+/aa/aa..a. /aa/aa..a.
+/aa/aa..a/ /aa/aa..a
+/aa/aa...a /aa/aa...a
+/aa/aa.... /aa/aa....
+/aa/aa.../ /aa/aa...
+/aa/aa../a /aa/aa../a
+/aa/aa../. /aa/aa..
+/aa/aa..// /aa/aa..
+/aa/aa./aa /aa/aa./aa
+/aa/aa./a. /aa/aa./a.
+/aa/aa./a/ /aa/aa./a
+/aa/aa./.a /aa/aa./.a
+/aa/aa./.. /aa
+/aa/aa././ /aa/aa.
+/aa/aa.//a /aa/aa./a
+/aa/aa.//. /aa/aa.
+/aa/aa./// /aa/aa.
+/aa/aa/aaa /aa/aa/aaa
+/aa/aa/aa. /aa/aa/aa.
+/aa/aa/aa/ /aa/aa/aa
+/aa/aa/a.a /aa/aa/a.a
+/aa/aa/a.. /aa/aa/a..
+/aa/aa/a./ /aa/aa/a.
+/aa/aa/a/a /aa/aa/a/a
+/aa/aa/a/. /aa/aa/a
+/aa/aa/a// /aa/aa/a
+/aa/aa/.aa /aa/aa/.aa
+/aa/aa/.a. /aa/aa/.a.
+/aa/aa/.a/ /aa/aa/.a
+/aa/aa/..a /aa/aa/..a
+/aa/aa/... /aa/aa/...
+/aa/aa/../ /aa
+/aa/aa/./a /aa/aa/a
+/aa/aa/./. /aa/aa
+/aa/aa/.// /aa/aa
+/aa/aa//aa /aa/aa/aa
+/aa/aa//a. /aa/aa/a.
+/aa/aa//a/ /aa/aa/a
+/aa/aa//.a /aa/aa/.a
+/aa/aa//.. /aa
+/aa/aa//./ /aa/aa
+/aa/aa///a /aa/aa/a
+/aa/aa///. /aa/aa
+/aa/aa//// /aa/aa
+/aa/a.aaaa /aa/a.aaaa
+/aa/a.aaa. /aa/a.aaa.
+/aa/a.aaa/ /aa/a.aaa
+/aa/a.aa.a /aa/a.aa.a
+/aa/a.aa.. /aa/a.aa..
+/aa/a.aa./ /aa/a.aa.
+/aa/a.aa/a /aa/a.aa/a
+/aa/a.aa/. /aa/a.aa
+/aa/a.aa// /aa/a.aa
+/aa/a.a.aa /aa/a.a.aa
+/aa/a.a.a. /aa/a.a.a.
+/aa/a.a.a/ /aa/a.a.a
+/aa/a.a..a /aa/a.a..a
+/aa/a.a... /aa/a.a...
+/aa/a.a../ /aa/a.a..
+/aa/a.a./a /aa/a.a./a
+/aa/a.a./. /aa/a.a.
+/aa/a.a.// /aa/a.a.
+/aa/a.a/aa /aa/a.a/aa
+/aa/a.a/a. /aa/a.a/a.
+/aa/a.a/a/ /aa/a.a/a
+/aa/a.a/.a /aa/a.a/.a
+/aa/a.a/.. /aa
+/aa/a.a/./ /aa/a.a
+/aa/a.a//a /aa/a.a/a
+/aa/a.a//. /aa/a.a
+/aa/a.a/// /aa/a.a
+/aa/a..aaa /aa/a..aaa
+/aa/a..aa. /aa/a..aa.
+/aa/a..aa/ /aa/a..aa
+/aa/a..a.a /aa/a..a.a
+/aa/a..a.. /aa/a..a..
+/aa/a..a./ /aa/a..a.
+/aa/a..a/a /aa/a..a/a
+/aa/a..a/. /aa/a..a
+/aa/a..a// /aa/a..a
+/aa/a...aa /aa/a...aa
+/aa/a...a. /aa/a...a.
+/aa/a...a/ /aa/a...a
+/aa/a....a /aa/a....a
+/aa/a..... /aa/a.....
+/aa/a..../ /aa/a....
+/aa/a.../a /aa/a.../a
+/aa/a.../. /aa/a...
+/aa/a...// /aa/a...
+/aa/a../aa /aa/a../aa
+/aa/a../a. /aa/a../a.
+/aa/a../a/ /aa/a../a
+/aa/a../.a /aa/a../.a
+/aa/a../.. /aa
+/aa/a.././ /aa/a..
+/aa/a..//a /aa/a../a
+/aa/a..//. /aa/a..
+/aa/a../// /aa/a..
+/aa/a./aaa /aa/a./aaa
+/aa/a./aa. /aa/a./aa.
+/aa/a./aa/ /aa/a./aa
+/aa/a./a.a /aa/a./a.a
+/aa/a./a.. /aa/a./a..
+/aa/a./a./ /aa/a./a.
+/aa/a./a/a /aa/a./a/a
+/aa/a./a/. /aa/a./a
+/aa/a./a// /aa/a./a
+/aa/a./.aa /aa/a./.aa
+/aa/a./.a. /aa/a./.a.
+/aa/a./.a/ /aa/a./.a
+/aa/a./..a /aa/a./..a
+/aa/a./... /aa/a./...
+/aa/a./../ /aa
+/aa/a././a /aa/a./a
+/aa/a././. /aa/a.
+/aa/a./.// /aa/a.
+/aa/a.//aa /aa/a./aa
+/aa/a.//a. /aa/a./a.
+/aa/a.//a/ /aa/a./a
+/aa/a.//.a /aa/a./.a
+/aa/a.//.. /aa
+/aa/a.//./ /aa/a.
+/aa/a.///a /aa/a./a
+/aa/a.///. /aa/a.
+/aa/a.//// /aa/a.
+/aa/a/aaaa /aa/a/aaaa
+/aa/a/aaa. /aa/a/aaa.
+/aa/a/aaa/ /aa/a/aaa
+/aa/a/aa.a /aa/a/aa.a
+/aa/a/aa.. /aa/a/aa..
+/aa/a/aa./ /aa/a/aa.
+/aa/a/aa/a /aa/a/aa/a
+/aa/a/aa/. /aa/a/aa
+/aa/a/aa// /aa/a/aa
+/aa/a/a.aa /aa/a/a.aa
+/aa/a/a.a. /aa/a/a.a.
+/aa/a/a.a/ /aa/a/a.a
+/aa/a/a..a /aa/a/a..a
+/aa/a/a... /aa/a/a...
+/aa/a/a../ /aa/a/a..
+/aa/a/a./a /aa/a/a./a
+/aa/a/a./. /aa/a/a.
+/aa/a/a.// /aa/a/a.
+/aa/a/a/aa /aa/a/a/aa
+/aa/a/a/a. /aa/a/a/a.
+/aa/a/a/a/ /aa/a/a/a
+/aa/a/a/.a /aa/a/a/.a
+/aa/a/a/.. /aa/a
+/aa/a/a/./ /aa/a/a
+/aa/a/a//a /aa/a/a/a
+/aa/a/a//. /aa/a/a
+/aa/a/a/// /aa/a/a
+/aa/a/.aaa /aa/a/.aaa
+/aa/a/.aa. /aa/a/.aa.
+/aa/a/.aa/ /aa/a/.aa
+/aa/a/.a.a /aa/a/.a.a
+/aa/a/.a.. /aa/a/.a..
+/aa/a/.a./ /aa/a/.a.
+/aa/a/.a/a /aa/a/.a/a
+/aa/a/.a/. /aa/a/.a
+/aa/a/.a// /aa/a/.a
+/aa/a/..aa /aa/a/..aa
+/aa/a/..a. /aa/a/..a.
+/aa/a/..a/ /aa/a/..a
+/aa/a/...a /aa/a/...a
+/aa/a/.... /aa/a/....
+/aa/a/.../ /aa/a/...
+/aa/a/../a /aa/a
+/aa/a/../. /aa
+/aa/a/..// /aa
+/aa/a/./aa /aa/a/aa
+/aa/a/./a. /aa/a/a.
+/aa/a/./a/ /aa/a/a
+/aa/a/./.a /aa/a/.a
+/aa/a/./.. /aa
+/aa/a/././ /aa/a
+/aa/a/.//a /aa/a/a
+/aa/a/.//. /aa/a
+/aa/a/./// /aa/a
+/aa/a//aaa /aa/a/aaa
+/aa/a//aa. /aa/a/aa.
+/aa/a//aa/ /aa/a/aa
+/aa/a//a.a /aa/a/a.a
+/aa/a//a.. /aa/a/a..
+/aa/a//a./ /aa/a/a.
+/aa/a//a/a /aa/a/a/a
+/aa/a//a/. /aa/a/a
+/aa/a//a// /aa/a/a
+/aa/a//.aa /aa/a/.aa
+/aa/a//.a. /aa/a/.a.
+/aa/a//.a/ /aa/a/.a
+/aa/a//..a /aa/a/..a
+/aa/a//... /aa/a/...
+/aa/a//../ /aa
+/aa/a//./a /aa/a/a
+/aa/a//./. /aa/a
+/aa/a//.// /aa/a
+/aa/a///aa /aa/a/aa
+/aa/a///a. /aa/a/a.
+/aa/a///a/ /aa/a/a
+/aa/a///.a /aa/a/.a
+/aa/a///.. /aa
+/aa/a///./ /aa/a
+/aa/a////a /aa/a/a
+/aa/a////. /aa/a
+/aa/a///// /aa/a
+/aa/.aaaaa /aa/.aaaaa
+/aa/.aaaa. /aa/.aaaa.
+/aa/.aaaa/ /aa/.aaaa
+/aa/.aaa.a /aa/.aaa.a
+/aa/.aaa.. /aa/.aaa..
+/aa/.aaa./ /aa/.aaa.
+/aa/.aaa/a /aa/.aaa/a
+/aa/.aaa/. /aa/.aaa
+/aa/.aaa// /aa/.aaa
+/aa/.aa.aa /aa/.aa.aa
+/aa/.aa.a. /aa/.aa.a.
+/aa/.aa.a/ /aa/.aa.a
+/aa/.aa..a /aa/.aa..a
+/aa/.aa... /aa/.aa...
+/aa/.aa../ /aa/.aa..
+/aa/.aa./a /aa/.aa./a
+/aa/.aa./. /aa/.aa.
+/aa/.aa.// /aa/.aa.
+/aa/.aa/aa /aa/.aa/aa
+/aa/.aa/a. /aa/.aa/a.
+/aa/.aa/a/ /aa/.aa/a
+/aa/.aa/.a /aa/.aa/.a
+/aa/.aa/.. /aa
+/aa/.aa/./ /aa/.aa
+/aa/.aa//a /aa/.aa/a
+/aa/.aa//. /aa/.aa
+/aa/.aa/// /aa/.aa
+/aa/.a.aaa /aa/.a.aaa
+/aa/.a.aa. /aa/.a.aa.
+/aa/.a.aa/ /aa/.a.aa
+/aa/.a.a.a /aa/.a.a.a
+/aa/.a.a.. /aa/.a.a..
+/aa/.a.a./ /aa/.a.a.
+/aa/.a.a/a /aa/.a.a/a
+/aa/.a.a/. /aa/.a.a
+/aa/.a.a// /aa/.a.a
+/aa/.a..aa /aa/.a..aa
+/aa/.a..a. /aa/.a..a.
+/aa/.a..a/ /aa/.a..a
+/aa/.a...a /aa/.a...a
+/aa/.a.... /aa/.a....
+/aa/.a.../ /aa/.a...
+/aa/.a../a /aa/.a../a
+/aa/.a../. /aa/.a..
+/aa/.a..// /aa/.a..
+/aa/.a./aa /aa/.a./aa
+/aa/.a./a. /aa/.a./a.
+/aa/.a./a/ /aa/.a./a
+/aa/.a./.a /aa/.a./.a
+/aa/.a./.. /aa
+/aa/.a././ /aa/.a.
+/aa/.a.//a /aa/.a./a
+/aa/.a.//. /aa/.a.
+/aa/.a./// /aa/.a.
+/aa/.a/aaa /aa/.a/aaa
+/aa/.a/aa. /aa/.a/aa.
+/aa/.a/aa/ /aa/.a/aa
+/aa/.a/a.a /aa/.a/a.a
+/aa/.a/a.. /aa/.a/a..
+/aa/.a/a./ /aa/.a/a.
+/aa/.a/a/a /aa/.a/a/a
+/aa/.a/a/. /aa/.a/a
+/aa/.a/a// /aa/.a/a
+/aa/.a/.aa /aa/.a/.aa
+/aa/.a/.a. /aa/.a/.a.
+/aa/.a/.a/ /aa/.a/.a
+/aa/.a/..a /aa/.a/..a
+/aa/.a/... /aa/.a/...
+/aa/.a/../ /aa
+/aa/.a/./a /aa/.a/a
+/aa/.a/./. /aa/.a
+/aa/.a/.// /aa/.a
+/aa/.a//aa /aa/.a/aa
+/aa/.a//a. /aa/.a/a.
+/aa/.a//a/ /aa/.a/a
+/aa/.a//.a /aa/.a/.a
+/aa/.a//.. /aa
+/aa/.a//./ /aa/.a
+/aa/.a///a /aa/.a/a
+/aa/.a///. /aa/.a
+/aa/.a//// /aa/.a
+/aa/..aaaa /aa/..aaaa
+/aa/..aaa. /aa/..aaa.
+/aa/..aaa/ /aa/..aaa
+/aa/..aa.a /aa/..aa.a
+/aa/..aa.. /aa/..aa..
+/aa/..aa./ /aa/..aa.
+/aa/..aa/a /aa/..aa/a
+/aa/..aa/. /aa/..aa
+/aa/..aa// /aa/..aa
+/aa/..a.aa /aa/..a.aa
+/aa/..a.a. /aa/..a.a.
+/aa/..a.a/ /aa/..a.a
+/aa/..a..a /aa/..a..a
+/aa/..a... /aa/..a...
+/aa/..a../ /aa/..a..
+/aa/..a./a /aa/..a./a
+/aa/..a./. /aa/..a.
+/aa/..a.// /aa/..a.
+/aa/..a/aa /aa/..a/aa
+/aa/..a/a. /aa/..a/a.
+/aa/..a/a/ /aa/..a/a
+/aa/..a/.a /aa/..a/.a
+/aa/..a/.. /aa
+/aa/..a/./ /aa/..a
+/aa/..a//a /aa/..a/a
+/aa/..a//. /aa/..a
+/aa/..a/// /aa/..a
+/aa/...aaa /aa/...aaa
+/aa/...aa. /aa/...aa.
+/aa/...aa/ /aa/...aa
+/aa/...a.a /aa/...a.a
+/aa/...a.. /aa/...a..
+/aa/...a./ /aa/...a.
+/aa/...a/a /aa/...a/a
+/aa/...a/. /aa/...a
+/aa/...a// /aa/...a
+/aa/....aa /aa/....aa
+/aa/....a. /aa/....a.
+/aa/....a/ /aa/....a
+/aa/.....a /aa/.....a
+/aa/...... /aa/......
+/aa/...../ /aa/.....
+/aa/..../a /aa/..../a
+/aa/..../. /aa/....
+/aa/....// /aa/....
+/aa/.../aa /aa/.../aa
+/aa/.../a. /aa/.../a.
+/aa/.../a/ /aa/.../a
+/aa/.../.a /aa/.../.a
+/aa/.../.. /aa
+/aa/..././ /aa/...
+/aa/...//a /aa/.../a
+/aa/...//. /aa/...
+/aa/.../// /aa/...
+/aa/../aaa /aaa
+/aa/../aa. /aa.
+/aa/../aa/ /aa
+/aa/../a.a /a.a
+/aa/../a.. /a..
+/aa/../a./ /a.
+/aa/../a/a /a/a
+/aa/../a/. /a
+/aa/../a// /a
+/aa/../.aa /.aa
+/aa/../.a. /.a.
+/aa/../.a/ /.a
+/aa/../..a /..a
+/aa/../... /...
+/aa/../../ /
+/aa/.././a /a
+/aa/.././. /
+/aa/../.// /
+/aa/..//aa /aa
+/aa/..//a. /a.
+/aa/..//a/ /a
+/aa/..//.a /.a
+/aa/..//.. /
+/aa/..//./ /
+/aa/..///a /a
+/aa/..///. /
+/aa/..//// /
+/aa/./aaaa /aa/aaaa
+/aa/./aaa. /aa/aaa.
+/aa/./aaa/ /aa/aaa
+/aa/./aa.a /aa/aa.a
+/aa/./aa.. /aa/aa..
+/aa/./aa./ /aa/aa.
+/aa/./aa/a /aa/aa/a
+/aa/./aa/. /aa/aa
+/aa/./aa// /aa/aa
+/aa/./a.aa /aa/a.aa
+/aa/./a.a. /aa/a.a.
+/aa/./a.a/ /aa/a.a
+/aa/./a..a /aa/a..a
+/aa/./a... /aa/a...
+/aa/./a../ /aa/a..
+/aa/./a./a /aa/a./a
+/aa/./a./. /aa/a.
+/aa/./a.// /aa/a.
+/aa/./a/aa /aa/a/aa
+/aa/./a/a. /aa/a/a.
+/aa/./a/a/ /aa/a/a
+/aa/./a/.a /aa/a/.a
+/aa/./a/.. /aa
+/aa/./a/./ /aa/a
+/aa/./a//a /aa/a/a
+/aa/./a//. /aa/a
+/aa/./a/// /aa/a
+/aa/./.aaa /aa/.aaa
+/aa/./.aa. /aa/.aa.
+/aa/./.aa/ /aa/.aa
+/aa/./.a.a /aa/.a.a
+/aa/./.a.. /aa/.a..
+/aa/./.a./ /aa/.a.
+/aa/./.a/a /aa/.a/a
+/aa/./.a/. /aa/.a
+/aa/./.a// /aa/.a
+/aa/./..aa /aa/..aa
+/aa/./..a. /aa/..a.
+/aa/./..a/ /aa/..a
+/aa/./...a /aa/...a
+/aa/./.... /aa/....
+/aa/./.../ /aa/...
+/aa/./../a /a
+/aa/./../. /
+/aa/./..// /
+/aa/././aa /aa/aa
+/aa/././a. /aa/a.
+/aa/././a/ /aa/a
+/aa/././.a /aa/.a
+/aa/././.. /
+/aa/./././ /aa
+/aa/././/a /aa/a
+/aa/././/. /aa
+/aa/././// /aa
+/aa/.//aaa /aa/aaa
+/aa/.//aa. /aa/aa.
+/aa/.//aa/ /aa/aa
+/aa/.//a.a /aa/a.a
+/aa/.//a.. /aa/a..
+/aa/.//a./ /aa/a.
+/aa/.//a/a /aa/a/a
+/aa/.//a/. /aa/a
+/aa/.//a// /aa/a
+/aa/.//.aa /aa/.aa
+/aa/.//.a. /aa/.a.
+/aa/.//.a/ /aa/.a
+/aa/.//..a /aa/..a
+/aa/.//... /aa/...
+/aa/.//../ /
+/aa/.//./a /aa/a
+/aa/.//./. /aa
+/aa/.//.// /aa
+/aa/.///aa /aa/aa
+/aa/.///a. /aa/a.
+/aa/.///a/ /aa/a
+/aa/.///.a /aa/.a
+/aa/.///.. /
+/aa/.///./ /aa
+/aa/.////a /aa/a
+/aa/.////. /aa
+/aa/.///// /aa
+/aa//aaaaa /aa/aaaaa
+/aa//aaaa. /aa/aaaa.
+/aa//aaaa/ /aa/aaaa
+/aa//aaa.a /aa/aaa.a
+/aa//aaa.. /aa/aaa..
+/aa//aaa./ /aa/aaa.
+/aa//aaa/a /aa/aaa/a
+/aa//aaa/. /aa/aaa
+/aa//aaa// /aa/aaa
+/aa//aa.aa /aa/aa.aa
+/aa//aa.a. /aa/aa.a.
+/aa//aa.a/ /aa/aa.a
+/aa//aa..a /aa/aa..a
+/aa//aa... /aa/aa...
+/aa//aa../ /aa/aa..
+/aa//aa./a /aa/aa./a
+/aa//aa./. /aa/aa.
+/aa//aa.// /aa/aa.
+/aa//aa/aa /aa/aa/aa
+/aa//aa/a. /aa/aa/a.
+/aa//aa/a/ /aa/aa/a
+/aa//aa/.a /aa/aa/.a
+/aa//aa/.. /aa
+/aa//aa/./ /aa/aa
+/aa//aa//a /aa/aa/a
+/aa//aa//. /aa/aa
+/aa//aa/// /aa/aa
+/aa//a.aaa /aa/a.aaa
+/aa//a.aa. /aa/a.aa.
+/aa//a.aa/ /aa/a.aa
+/aa//a.a.a /aa/a.a.a
+/aa//a.a.. /aa/a.a..
+/aa//a.a./ /aa/a.a.
+/aa//a.a/a /aa/a.a/a
+/aa//a.a/. /aa/a.a
+/aa//a.a// /aa/a.a
+/aa//a..aa /aa/a..aa
+/aa//a..a. /aa/a..a.
+/aa//a..a/ /aa/a..a
+/aa//a...a /aa/a...a
+/aa//a.... /aa/a....
+/aa//a.../ /aa/a...
+/aa//a../a /aa/a../a
+/aa//a../. /aa/a..
+/aa//a..// /aa/a..
+/aa//a./aa /aa/a./aa
+/aa//a./a. /aa/a./a.
+/aa//a./a/ /aa/a./a
+/aa//a./.a /aa/a./.a
+/aa//a./.. /aa
+/aa//a././ /aa/a.
+/aa//a.//a /aa/a./a
+/aa//a.//. /aa/a.
+/aa//a./// /aa/a.
+/aa//a/aaa /aa/a/aaa
+/aa//a/aa. /aa/a/aa.
+/aa//a/aa/ /aa/a/aa
+/aa//a/a.a /aa/a/a.a
+/aa//a/a.. /aa/a/a..
+/aa//a/a./ /aa/a/a.
+/aa//a/a/a /aa/a/a/a
+/aa//a/a/. /aa/a/a
+/aa//a/a// /aa/a/a
+/aa//a/.aa /aa/a/.aa
+/aa//a/.a. /aa/a/.a.
+/aa//a/.a/ /aa/a/.a
+/aa//a/..a /aa/a/..a
+/aa//a/... /aa/a/...
+/aa//a/../ /aa
+/aa//a/./a /aa/a/a
+/aa//a/./. /aa/a
+/aa//a/.// /aa/a
+/aa//a//aa /aa/a/aa
+/aa//a//a. /aa/a/a.
+/aa//a//a/ /aa/a/a
+/aa//a//.a /aa/a/.a
+/aa//a//.. /aa
+/aa//a//./ /aa/a
+/aa//a///a /aa/a/a
+/aa//a///. /aa/a
+/aa//a//// /aa/a
+/aa//.aaaa /aa/.aaaa
+/aa//.aaa. /aa/.aaa.
+/aa//.aaa/ /aa/.aaa
+/aa//.aa.a /aa/.aa.a
+/aa//.aa.. /aa/.aa..
+/aa//.aa./ /aa/.aa.
+/aa//.aa/a /aa/.aa/a
+/aa//.aa/. /aa/.aa
+/aa//.aa// /aa/.aa
+/aa//.a.aa /aa/.a.aa
+/aa//.a.a. /aa/.a.a.
+/aa//.a.a/ /aa/.a.a
+/aa//.a..a /aa/.a..a
+/aa//.a... /aa/.a...
+/aa//.a../ /aa/.a..
+/aa//.a./a /aa/.a./a
+/aa//.a./. /aa/.a.
+/aa//.a.// /aa/.a.
+/aa//.a/aa /aa/.a/aa
+/aa//.a/a. /aa/.a/a.
+/aa//.a/a/ /aa/.a/a
+/aa//.a/.a /aa/.a/.a
+/aa//.a/.. /aa
+/aa//.a/./ /aa/.a
+/aa//.a//a /aa/.a/a
+/aa//.a//. /aa/.a
+/aa//.a/// /aa/.a
+/aa//..aaa /aa/..aaa
+/aa//..aa. /aa/..aa.
+/aa//..aa/ /aa/..aa
+/aa//..a.a /aa/..a.a
+/aa//..a.. /aa/..a..
+/aa//..a./ /aa/..a.
+/aa//..a/a /aa/..a/a
+/aa//..a/. /aa/..a
+/aa//..a// /aa/..a
+/aa//...aa /aa/...aa
+/aa//...a. /aa/...a.
+/aa//...a/ /aa/...a
+/aa//....a /aa/....a
+/aa//..... /aa/.....
+/aa//..../ /aa/....
+/aa//.../a /aa/.../a
+/aa//.../. /aa/...
+/aa//...// /aa/...
+/aa//../aa /aa
+/aa//../a. /a.
+/aa//../a/ /a
+/aa//../.a /.a
+/aa//../.. /
+/aa//.././ /
+/aa//..//a /a
+/aa//..//. /
+/aa//../// /
+/aa//./aaa /aa/aaa
+/aa//./aa. /aa/aa.
+/aa//./aa/ /aa/aa
+/aa//./a.a /aa/a.a
+/aa//./a.. /aa/a..
+/aa//./a./ /aa/a.
+/aa//./a/a /aa/a/a
+/aa//./a/. /aa/a
+/aa//./a// /aa/a
+/aa//./.aa /aa/.aa
+/aa//./.a. /aa/.a.
+/aa//./.a/ /aa/.a
+/aa//./..a /aa/..a
+/aa//./... /aa/...
+/aa//./../ /
+/aa//././a /aa/a
+/aa//././. /aa
+/aa//./.// /aa
+/aa//.//aa /aa/aa
+/aa//.//a. /aa/a.
+/aa//.//a/ /aa/a
+/aa//.//.a /aa/.a
+/aa//.//.. /
+/aa//.//./ /aa
+/aa//.///a /aa/a
+/aa//.///. /aa
+/aa//.//// /aa
+/aa///aaaa /aa/aaaa
+/aa///aaa. /aa/aaa.
+/aa///aaa/ /aa/aaa
+/aa///aa.a /aa/aa.a
+/aa///aa.. /aa/aa..
+/aa///aa./ /aa/aa.
+/aa///aa/a /aa/aa/a
+/aa///aa/. /aa/aa
+/aa///aa// /aa/aa
+/aa///a.aa /aa/a.aa
+/aa///a.a. /aa/a.a.
+/aa///a.a/ /aa/a.a
+/aa///a..a /aa/a..a
+/aa///a... /aa/a...
+/aa///a../ /aa/a..
+/aa///a./a /aa/a./a
+/aa///a./. /aa/a.
+/aa///a.// /aa/a.
+/aa///a/aa /aa/a/aa
+/aa///a/a. /aa/a/a.
+/aa///a/a/ /aa/a/a
+/aa///a/.a /aa/a/.a
+/aa///a/.. /aa
+/aa///a/./ /aa/a
+/aa///a//a /aa/a/a
+/aa///a//. /aa/a
+/aa///a/// /aa/a
+/aa///.aaa /aa/.aaa
+/aa///.aa. /aa/.aa.
+/aa///.aa/ /aa/.aa
+/aa///.a.a /aa/.a.a
+/aa///.a.. /aa/.a..
+/aa///.a./ /aa/.a.
+/aa///.a/a /aa/.a/a
+/aa///.a/. /aa/.a
+/aa///.a// /aa/.a
+/aa///..aa /aa/..aa
+/aa///..a. /aa/..a.
+/aa///..a/ /aa/..a
+/aa///...a /aa/...a
+/aa///.... /aa/....
+/aa///.../ /aa/...
+/aa///../a /a
+/aa///../. /
+/aa///..// /
+/aa///./aa /aa/aa
+/aa///./a. /aa/a.
+/aa///./a/ /aa/a
+/aa///./.a /aa/.a
+/aa///./.. /
+/aa///././ /aa
+/aa///.//a /aa/a
+/aa///.//. /aa
+/aa///./// /aa
+/aa////aaa /aa/aaa
+/aa////aa. /aa/aa.
+/aa////aa/ /aa/aa
+/aa////a.a /aa/a.a
+/aa////a.. /aa/a..
+/aa////a./ /aa/a.
+/aa////a/a /aa/a/a
+/aa////a/. /aa/a
+/aa////a// /aa/a
+/aa////.aa /aa/.aa
+/aa////.a. /aa/.a.
+/aa////.a/ /aa/.a
+/aa////..a /aa/..a
+/aa////... /aa/...
+/aa////../ /
+/aa////./a /aa/a
+/aa////./. /aa
+/aa////.// /aa
+/aa/////aa /aa/aa
+/aa/////a. /aa/a.
+/aa/////a/ /aa/a
+/aa/////.a /aa/.a
+/aa/////.. /
+/aa/////./ /aa
+/aa//////a /aa/a
+/aa//////. /aa
+/aa/////// /aa
+/a.aaaaaaa /a.aaaaaaa
+/a.aaaaaa. /a.aaaaaa.
+/a.aaaaaa/ /a.aaaaaa
+/a.aaaaa.a /a.aaaaa.a
+/a.aaaaa.. /a.aaaaa..
+/a.aaaaa./ /a.aaaaa.
+/a.aaaaa/a /a.aaaaa/a
+/a.aaaaa/. /a.aaaaa
+/a.aaaaa// /a.aaaaa
+/a.aaaa.aa /a.aaaa.aa
+/a.aaaa.a. /a.aaaa.a.
+/a.aaaa.a/ /a.aaaa.a
+/a.aaaa..a /a.aaaa..a
+/a.aaaa... /a.aaaa...
+/a.aaaa../ /a.aaaa..
+/a.aaaa./a /a.aaaa./a
+/a.aaaa./. /a.aaaa.
+/a.aaaa.// /a.aaaa.
+/a.aaaa/aa /a.aaaa/aa
+/a.aaaa/a. /a.aaaa/a.
+/a.aaaa/a/ /a.aaaa/a
+/a.aaaa/.a /a.aaaa/.a
+/a.aaaa/.. /
+/a.aaaa/./ /a.aaaa
+/a.aaaa//a /a.aaaa/a
+/a.aaaa//. /a.aaaa
+/a.aaaa/// /a.aaaa
+/a.aaa.aaa /a.aaa.aaa
+/a.aaa.aa. /a.aaa.aa.
+/a.aaa.aa/ /a.aaa.aa
+/a.aaa.a.a /a.aaa.a.a
+/a.aaa.a.. /a.aaa.a..
+/a.aaa.a./ /a.aaa.a.
+/a.aaa.a/a /a.aaa.a/a
+/a.aaa.a/. /a.aaa.a
+/a.aaa.a// /a.aaa.a
+/a.aaa..aa /a.aaa..aa
+/a.aaa..a. /a.aaa..a.
+/a.aaa..a/ /a.aaa..a
+/a.aaa...a /a.aaa...a
+/a.aaa.... /a.aaa....
+/a.aaa.../ /a.aaa...
+/a.aaa../a /a.aaa../a
+/a.aaa../. /a.aaa..
+/a.aaa..// /a.aaa..
+/a.aaa./aa /a.aaa./aa
+/a.aaa./a. /a.aaa./a.
+/a.aaa./a/ /a.aaa./a
+/a.aaa./.a /a.aaa./.a
+/a.aaa./.. /
+/a.aaa././ /a.aaa.
+/a.aaa.//a /a.aaa./a
+/a.aaa.//. /a.aaa.
+/a.aaa./// /a.aaa.
+/a.aaa/aaa /a.aaa/aaa
+/a.aaa/aa. /a.aaa/aa.
+/a.aaa/aa/ /a.aaa/aa
+/a.aaa/a.a /a.aaa/a.a
+/a.aaa/a.. /a.aaa/a..
+/a.aaa/a./ /a.aaa/a.
+/a.aaa/a/a /a.aaa/a/a
+/a.aaa/a/. /a.aaa/a
+/a.aaa/a// /a.aaa/a
+/a.aaa/.aa /a.aaa/.aa
+/a.aaa/.a. /a.aaa/.a.
+/a.aaa/.a/ /a.aaa/.a
+/a.aaa/..a /a.aaa/..a
+/a.aaa/... /a.aaa/...
+/a.aaa/../ /
+/a.aaa/./a /a.aaa/a
+/a.aaa/./. /a.aaa
+/a.aaa/.// /a.aaa
+/a.aaa//aa /a.aaa/aa
+/a.aaa//a. /a.aaa/a.
+/a.aaa//a/ /a.aaa/a
+/a.aaa//.a /a.aaa/.a
+/a.aaa//.. /
+/a.aaa//./ /a.aaa
+/a.aaa///a /a.aaa/a
+/a.aaa///. /a.aaa
+/a.aaa//// /a.aaa
+/a.aa.aaaa /a.aa.aaaa
+/a.aa.aaa. /a.aa.aaa.
+/a.aa.aaa/ /a.aa.aaa
+/a.aa.aa.a /a.aa.aa.a
+/a.aa.aa.. /a.aa.aa..
+/a.aa.aa./ /a.aa.aa.
+/a.aa.aa/a /a.aa.aa/a
+/a.aa.aa/. /a.aa.aa
+/a.aa.aa// /a.aa.aa
+/a.aa.a.aa /a.aa.a.aa
+/a.aa.a.a. /a.aa.a.a.
+/a.aa.a.a/ /a.aa.a.a
+/a.aa.a..a /a.aa.a..a
+/a.aa.a... /a.aa.a...
+/a.aa.a../ /a.aa.a..
+/a.aa.a./a /a.aa.a./a
+/a.aa.a./. /a.aa.a.
+/a.aa.a.// /a.aa.a.
+/a.aa.a/aa /a.aa.a/aa
+/a.aa.a/a. /a.aa.a/a.
+/a.aa.a/a/ /a.aa.a/a
+/a.aa.a/.a /a.aa.a/.a
+/a.aa.a/.. /
+/a.aa.a/./ /a.aa.a
+/a.aa.a//a /a.aa.a/a
+/a.aa.a//. /a.aa.a
+/a.aa.a/// /a.aa.a
+/a.aa..aaa /a.aa..aaa
+/a.aa..aa. /a.aa..aa.
+/a.aa..aa/ /a.aa..aa
+/a.aa..a.a /a.aa..a.a
+/a.aa..a.. /a.aa..a..
+/a.aa..a./ /a.aa..a.
+/a.aa..a/a /a.aa..a/a
+/a.aa..a/. /a.aa..a
+/a.aa..a// /a.aa..a
+/a.aa...aa /a.aa...aa
+/a.aa...a. /a.aa...a.
+/a.aa...a/ /a.aa...a
+/a.aa....a /a.aa....a
+/a.aa..... /a.aa.....
+/a.aa..../ /a.aa....
+/a.aa.../a /a.aa.../a
+/a.aa.../. /a.aa...
+/a.aa...// /a.aa...
+/a.aa../aa /a.aa../aa
+/a.aa../a. /a.aa../a.
+/a.aa../a/ /a.aa../a
+/a.aa../.a /a.aa../.a
+/a.aa../.. /
+/a.aa.././ /a.aa..
+/a.aa..//a /a.aa../a
+/a.aa..//. /a.aa..
+/a.aa../// /a.aa..
+/a.aa./aaa /a.aa./aaa
+/a.aa./aa. /a.aa./aa.
+/a.aa./aa/ /a.aa./aa
+/a.aa./a.a /a.aa./a.a
+/a.aa./a.. /a.aa./a..
+/a.aa./a./ /a.aa./a.
+/a.aa./a/a /a.aa./a/a
+/a.aa./a/. /a.aa./a
+/a.aa./a// /a.aa./a
+/a.aa./.aa /a.aa./.aa
+/a.aa./.a. /a.aa./.a.
+/a.aa./.a/ /a.aa./.a
+/a.aa./..a /a.aa./..a
+/a.aa./... /a.aa./...
+/a.aa./../ /
+/a.aa././a /a.aa./a
+/a.aa././. /a.aa.
+/a.aa./.// /a.aa.
+/a.aa.//aa /a.aa./aa
+/a.aa.//a. /a.aa./a.
+/a.aa.//a/ /a.aa./a
+/a.aa.//.a /a.aa./.a
+/a.aa.//.. /
+/a.aa.//./ /a.aa.
+/a.aa.///a /a.aa./a
+/a.aa.///. /a.aa.
+/a.aa.//// /a.aa.
+/a.aa/aaaa /a.aa/aaaa
+/a.aa/aaa. /a.aa/aaa.
+/a.aa/aaa/ /a.aa/aaa
+/a.aa/aa.a /a.aa/aa.a
+/a.aa/aa.. /a.aa/aa..
+/a.aa/aa./ /a.aa/aa.
+/a.aa/aa/a /a.aa/aa/a
+/a.aa/aa/. /a.aa/aa
+/a.aa/aa// /a.aa/aa
+/a.aa/a.aa /a.aa/a.aa
+/a.aa/a.a. /a.aa/a.a.
+/a.aa/a.a/ /a.aa/a.a
+/a.aa/a..a /a.aa/a..a
+/a.aa/a... /a.aa/a...
+/a.aa/a../ /a.aa/a..
+/a.aa/a./a /a.aa/a./a
+/a.aa/a./. /a.aa/a.
+/a.aa/a.// /a.aa/a.
+/a.aa/a/aa /a.aa/a/aa
+/a.aa/a/a. /a.aa/a/a.
+/a.aa/a/a/ /a.aa/a/a
+/a.aa/a/.a /a.aa/a/.a
+/a.aa/a/.. /a.aa
+/a.aa/a/./ /a.aa/a
+/a.aa/a//a /a.aa/a/a
+/a.aa/a//. /a.aa/a
+/a.aa/a/// /a.aa/a
+/a.aa/.aaa /a.aa/.aaa
+/a.aa/.aa. /a.aa/.aa.
+/a.aa/.aa/ /a.aa/.aa
+/a.aa/.a.a /a.aa/.a.a
+/a.aa/.a.. /a.aa/.a..
+/a.aa/.a./ /a.aa/.a.
+/a.aa/.a/a /a.aa/.a/a
+/a.aa/.a/. /a.aa/.a
+/a.aa/.a// /a.aa/.a
+/a.aa/..aa /a.aa/..aa
+/a.aa/..a. /a.aa/..a.
+/a.aa/..a/ /a.aa/..a
+/a.aa/...a /a.aa/...a
+/a.aa/.... /a.aa/....
+/a.aa/.../ /a.aa/...
+/a.aa/../a /a
+/a.aa/../. /
+/a.aa/..// /
+/a.aa/./aa /a.aa/aa
+/a.aa/./a. /a.aa/a.
+/a.aa/./a/ /a.aa/a
+/a.aa/./.a /a.aa/.a
+/a.aa/./.. /
+/a.aa/././ /a.aa
+/a.aa/.//a /a.aa/a
+/a.aa/.//. /a.aa
+/a.aa/./// /a.aa
+/a.aa//aaa /a.aa/aaa
+/a.aa//aa. /a.aa/aa.
+/a.aa//aa/ /a.aa/aa
+/a.aa//a.a /a.aa/a.a
+/a.aa//a.. /a.aa/a..
+/a.aa//a./ /a.aa/a.
+/a.aa//a/a /a.aa/a/a
+/a.aa//a/. /a.aa/a
+/a.aa//a// /a.aa/a
+/a.aa//.aa /a.aa/.aa
+/a.aa//.a. /a.aa/.a.
+/a.aa//.a/ /a.aa/.a
+/a.aa//..a /a.aa/..a
+/a.aa//... /a.aa/...
+/a.aa//../ /
+/a.aa//./a /a.aa/a
+/a.aa//./. /a.aa
+/a.aa//.// /a.aa
+/a.aa///aa /a.aa/aa
+/a.aa///a. /a.aa/a.
+/a.aa///a/ /a.aa/a
+/a.aa///.a /a.aa/.a
+/a.aa///.. /
+/a.aa///./ /a.aa
+/a.aa////a /a.aa/a
+/a.aa////. /a.aa
+/a.aa///// /a.aa
+/a.a.aaaaa /a.a.aaaaa
+/a.a.aaaa. /a.a.aaaa.
+/a.a.aaaa/ /a.a.aaaa
+/a.a.aaa.a /a.a.aaa.a
+/a.a.aaa.. /a.a.aaa..
+/a.a.aaa./ /a.a.aaa.
+/a.a.aaa/a /a.a.aaa/a
+/a.a.aaa/. /a.a.aaa
+/a.a.aaa// /a.a.aaa
+/a.a.aa.aa /a.a.aa.aa
+/a.a.aa.a. /a.a.aa.a.
+/a.a.aa.a/ /a.a.aa.a
+/a.a.aa..a /a.a.aa..a
+/a.a.aa... /a.a.aa...
+/a.a.aa../ /a.a.aa..
+/a.a.aa./a /a.a.aa./a
+/a.a.aa./. /a.a.aa.
+/a.a.aa.// /a.a.aa.
+/a.a.aa/aa /a.a.aa/aa
+/a.a.aa/a. /a.a.aa/a.
+/a.a.aa/a/ /a.a.aa/a
+/a.a.aa/.a /a.a.aa/.a
+/a.a.aa/.. /
+/a.a.aa/./ /a.a.aa
+/a.a.aa//a /a.a.aa/a
+/a.a.aa//. /a.a.aa
+/a.a.aa/// /a.a.aa
+/a.a.a.aaa /a.a.a.aaa
+/a.a.a.aa. /a.a.a.aa.
+/a.a.a.aa/ /a.a.a.aa
+/a.a.a.a.a /a.a.a.a.a
+/a.a.a.a.. /a.a.a.a..
+/a.a.a.a./ /a.a.a.a.
+/a.a.a.a/a /a.a.a.a/a
+/a.a.a.a/. /a.a.a.a
+/a.a.a.a// /a.a.a.a
+/a.a.a..aa /a.a.a..aa
+/a.a.a..a. /a.a.a..a.
+/a.a.a..a/ /a.a.a..a
+/a.a.a...a /a.a.a...a
+/a.a.a.... /a.a.a....
+/a.a.a.../ /a.a.a...
+/a.a.a../a /a.a.a../a
+/a.a.a../. /a.a.a..
+/a.a.a..// /a.a.a..
+/a.a.a./aa /a.a.a./aa
+/a.a.a./a. /a.a.a./a.
+/a.a.a./a/ /a.a.a./a
+/a.a.a./.a /a.a.a./.a
+/a.a.a./.. /
+/a.a.a././ /a.a.a.
+/a.a.a.//a /a.a.a./a
+/a.a.a.//. /a.a.a.
+/a.a.a./// /a.a.a.
+/a.a.a/aaa /a.a.a/aaa
+/a.a.a/aa. /a.a.a/aa.
+/a.a.a/aa/ /a.a.a/aa
+/a.a.a/a.a /a.a.a/a.a
+/a.a.a/a.. /a.a.a/a..
+/a.a.a/a./ /a.a.a/a.
+/a.a.a/a/a /a.a.a/a/a
+/a.a.a/a/. /a.a.a/a
+/a.a.a/a// /a.a.a/a
+/a.a.a/.aa /a.a.a/.aa
+/a.a.a/.a. /a.a.a/.a.
+/a.a.a/.a/ /a.a.a/.a
+/a.a.a/..a /a.a.a/..a
+/a.a.a/... /a.a.a/...
+/a.a.a/../ /
+/a.a.a/./a /a.a.a/a
+/a.a.a/./. /a.a.a
+/a.a.a/.// /a.a.a
+/a.a.a//aa /a.a.a/aa
+/a.a.a//a. /a.a.a/a.
+/a.a.a//a/ /a.a.a/a
+/a.a.a//.a /a.a.a/.a
+/a.a.a//.. /
+/a.a.a//./ /a.a.a
+/a.a.a///a /a.a.a/a
+/a.a.a///. /a.a.a
+/a.a.a//// /a.a.a
+/a.a..aaaa /a.a..aaaa
+/a.a..aaa. /a.a..aaa.
+/a.a..aaa/ /a.a..aaa
+/a.a..aa.a /a.a..aa.a
+/a.a..aa.. /a.a..aa..
+/a.a..aa./ /a.a..aa.
+/a.a..aa/a /a.a..aa/a
+/a.a..aa/. /a.a..aa
+/a.a..aa// /a.a..aa
+/a.a..a.aa /a.a..a.aa
+/a.a..a.a. /a.a..a.a.
+/a.a..a.a/ /a.a..a.a
+/a.a..a..a /a.a..a..a
+/a.a..a... /a.a..a...
+/a.a..a../ /a.a..a..
+/a.a..a./a /a.a..a./a
+/a.a..a./. /a.a..a.
+/a.a..a.// /a.a..a.
+/a.a..a/aa /a.a..a/aa
+/a.a..a/a. /a.a..a/a.
+/a.a..a/a/ /a.a..a/a
+/a.a..a/.a /a.a..a/.a
+/a.a..a/.. /
+/a.a..a/./ /a.a..a
+/a.a..a//a /a.a..a/a
+/a.a..a//. /a.a..a
+/a.a..a/// /a.a..a
+/a.a...aaa /a.a...aaa
+/a.a...aa. /a.a...aa.
+/a.a...aa/ /a.a...aa
+/a.a...a.a /a.a...a.a
+/a.a...a.. /a.a...a..
+/a.a...a./ /a.a...a.
+/a.a...a/a /a.a...a/a
+/a.a...a/. /a.a...a
+/a.a...a// /a.a...a
+/a.a....aa /a.a....aa
+/a.a....a. /a.a....a.
+/a.a....a/ /a.a....a
+/a.a.....a /a.a.....a
+/a.a...... /a.a......
+/a.a...../ /a.a.....
+/a.a..../a /a.a..../a
+/a.a..../. /a.a....
+/a.a....// /a.a....
+/a.a.../aa /a.a.../aa
+/a.a.../a. /a.a.../a.
+/a.a.../a/ /a.a.../a
+/a.a.../.a /a.a.../.a
+/a.a.../.. /
+/a.a..././ /a.a...
+/a.a...//a /a.a.../a
+/a.a...//. /a.a...
+/a.a.../// /a.a...
+/a.a../aaa /a.a../aaa
+/a.a../aa. /a.a../aa.
+/a.a../aa/ /a.a../aa
+/a.a../a.a /a.a../a.a
+/a.a../a.. /a.a../a..
+/a.a../a./ /a.a../a.
+/a.a../a/a /a.a../a/a
+/a.a../a/. /a.a../a
+/a.a../a// /a.a../a
+/a.a../.aa /a.a../.aa
+/a.a../.a. /a.a../.a.
+/a.a../.a/ /a.a../.a
+/a.a../..a /a.a../..a
+/a.a../... /a.a../...
+/a.a../../ /
+/a.a.././a /a.a../a
+/a.a.././. /a.a..
+/a.a../.// /a.a..
+/a.a..//aa /a.a../aa
+/a.a..//a. /a.a../a.
+/a.a..//a/ /a.a../a
+/a.a..//.a /a.a../.a
+/a.a..//.. /
+/a.a..//./ /a.a..
+/a.a..///a /a.a../a
+/a.a..///. /a.a..
+/a.a..//// /a.a..
+/a.a./aaaa /a.a./aaaa
+/a.a./aaa. /a.a./aaa.
+/a.a./aaa/ /a.a./aaa
+/a.a./aa.a /a.a./aa.a
+/a.a./aa.. /a.a./aa..
+/a.a./aa./ /a.a./aa.
+/a.a./aa/a /a.a./aa/a
+/a.a./aa/. /a.a./aa
+/a.a./aa// /a.a./aa
+/a.a./a.aa /a.a./a.aa
+/a.a./a.a. /a.a./a.a.
+/a.a./a.a/ /a.a./a.a
+/a.a./a..a /a.a./a..a
+/a.a./a... /a.a./a...
+/a.a./a../ /a.a./a..
+/a.a./a./a /a.a./a./a
+/a.a./a./. /a.a./a.
+/a.a./a.// /a.a./a.
+/a.a./a/aa /a.a./a/aa
+/a.a./a/a. /a.a./a/a.
+/a.a./a/a/ /a.a./a/a
+/a.a./a/.a /a.a./a/.a
+/a.a./a/.. /a.a.
+/a.a./a/./ /a.a./a
+/a.a./a//a /a.a./a/a
+/a.a./a//. /a.a./a
+/a.a./a/// /a.a./a
+/a.a./.aaa /a.a./.aaa
+/a.a./.aa. /a.a./.aa.
+/a.a./.aa/ /a.a./.aa
+/a.a./.a.a /a.a./.a.a
+/a.a./.a.. /a.a./.a..
+/a.a./.a./ /a.a./.a.
+/a.a./.a/a /a.a./.a/a
+/a.a./.a/. /a.a./.a
+/a.a./.a// /a.a./.a
+/a.a./..aa /a.a./..aa
+/a.a./..a. /a.a./..a.
+/a.a./..a/ /a.a./..a
+/a.a./...a /a.a./...a
+/a.a./.... /a.a./....
+/a.a./.../ /a.a./...
+/a.a./../a /a
+/a.a./../. /
+/a.a./..// /
+/a.a././aa /a.a./aa
+/a.a././a. /a.a./a.
+/a.a././a/ /a.a./a
+/a.a././.a /a.a./.a
+/a.a././.. /
+/a.a./././ /a.a.
+/a.a././/a /a.a./a
+/a.a././/. /a.a.
+/a.a././// /a.a.
+/a.a.//aaa /a.a./aaa
+/a.a.//aa. /a.a./aa.
+/a.a.//aa/ /a.a./aa
+/a.a.//a.a /a.a./a.a
+/a.a.//a.. /a.a./a..
+/a.a.//a./ /a.a./a.
+/a.a.//a/a /a.a./a/a
+/a.a.//a/. /a.a./a
+/a.a.//a// /a.a./a
+/a.a.//.aa /a.a./.aa
+/a.a.//.a. /a.a./.a.
+/a.a.//.a/ /a.a./.a
+/a.a.//..a /a.a./..a
+/a.a.//... /a.a./...
+/a.a.//../ /
+/a.a.//./a /a.a./a
+/a.a.//./. /a.a.
+/a.a.//.// /a.a.
+/a.a.///aa /a.a./aa
+/a.a.///a. /a.a./a.
+/a.a.///a/ /a.a./a
+/a.a.///.a /a.a./.a
+/a.a.///.. /
+/a.a.///./ /a.a.
+/a.a.////a /a.a./a
+/a.a.////. /a.a.
+/a.a.///// /a.a.
+/a.a/aaaaa /a.a/aaaaa
+/a.a/aaaa. /a.a/aaaa.
+/a.a/aaaa/ /a.a/aaaa
+/a.a/aaa.a /a.a/aaa.a
+/a.a/aaa.. /a.a/aaa..
+/a.a/aaa./ /a.a/aaa.
+/a.a/aaa/a /a.a/aaa/a
+/a.a/aaa/. /a.a/aaa
+/a.a/aaa// /a.a/aaa
+/a.a/aa.aa /a.a/aa.aa
+/a.a/aa.a. /a.a/aa.a.
+/a.a/aa.a/ /a.a/aa.a
+/a.a/aa..a /a.a/aa..a
+/a.a/aa... /a.a/aa...
+/a.a/aa../ /a.a/aa..
+/a.a/aa./a /a.a/aa./a
+/a.a/aa./. /a.a/aa.
+/a.a/aa.// /a.a/aa.
+/a.a/aa/aa /a.a/aa/aa
+/a.a/aa/a. /a.a/aa/a.
+/a.a/aa/a/ /a.a/aa/a
+/a.a/aa/.a /a.a/aa/.a
+/a.a/aa/.. /a.a
+/a.a/aa/./ /a.a/aa
+/a.a/aa//a /a.a/aa/a
+/a.a/aa//. /a.a/aa
+/a.a/aa/// /a.a/aa
+/a.a/a.aaa /a.a/a.aaa
+/a.a/a.aa. /a.a/a.aa.
+/a.a/a.aa/ /a.a/a.aa
+/a.a/a.a.a /a.a/a.a.a
+/a.a/a.a.. /a.a/a.a..
+/a.a/a.a./ /a.a/a.a.
+/a.a/a.a/a /a.a/a.a/a
+/a.a/a.a/. /a.a/a.a
+/a.a/a.a// /a.a/a.a
+/a.a/a..aa /a.a/a..aa
+/a.a/a..a. /a.a/a..a.
+/a.a/a..a/ /a.a/a..a
+/a.a/a...a /a.a/a...a
+/a.a/a.... /a.a/a....
+/a.a/a.../ /a.a/a...
+/a.a/a../a /a.a/a../a
+/a.a/a../. /a.a/a..
+/a.a/a..// /a.a/a..
+/a.a/a./aa /a.a/a./aa
+/a.a/a./a. /a.a/a./a.
+/a.a/a./a/ /a.a/a./a
+/a.a/a./.a /a.a/a./.a
+/a.a/a./.. /a.a
+/a.a/a././ /a.a/a.
+/a.a/a.//a /a.a/a./a
+/a.a/a.//. /a.a/a.
+/a.a/a./// /a.a/a.
+/a.a/a/aaa /a.a/a/aaa
+/a.a/a/aa. /a.a/a/aa.
+/a.a/a/aa/ /a.a/a/aa
+/a.a/a/a.a /a.a/a/a.a
+/a.a/a/a.. /a.a/a/a..
+/a.a/a/a./ /a.a/a/a.
+/a.a/a/a/a /a.a/a/a/a
+/a.a/a/a/. /a.a/a/a
+/a.a/a/a// /a.a/a/a
+/a.a/a/.aa /a.a/a/.aa
+/a.a/a/.a. /a.a/a/.a.
+/a.a/a/.a/ /a.a/a/.a
+/a.a/a/..a /a.a/a/..a
+/a.a/a/... /a.a/a/...
+/a.a/a/../ /a.a
+/a.a/a/./a /a.a/a/a
+/a.a/a/./. /a.a/a
+/a.a/a/.// /a.a/a
+/a.a/a//aa /a.a/a/aa
+/a.a/a//a. /a.a/a/a.
+/a.a/a//a/ /a.a/a/a
+/a.a/a//.a /a.a/a/.a
+/a.a/a//.. /a.a
+/a.a/a//./ /a.a/a
+/a.a/a///a /a.a/a/a
+/a.a/a///. /a.a/a
+/a.a/a//// /a.a/a
+/a.a/.aaaa /a.a/.aaaa
+/a.a/.aaa. /a.a/.aaa.
+/a.a/.aaa/ /a.a/.aaa
+/a.a/.aa.a /a.a/.aa.a
+/a.a/.aa.. /a.a/.aa..
+/a.a/.aa./ /a.a/.aa.
+/a.a/.aa/a /a.a/.aa/a
+/a.a/.aa/. /a.a/.aa
+/a.a/.aa// /a.a/.aa
+/a.a/.a.aa /a.a/.a.aa
+/a.a/.a.a. /a.a/.a.a.
+/a.a/.a.a/ /a.a/.a.a
+/a.a/.a..a /a.a/.a..a
+/a.a/.a... /a.a/.a...
+/a.a/.a../ /a.a/.a..
+/a.a/.a./a /a.a/.a./a
+/a.a/.a./. /a.a/.a.
+/a.a/.a.// /a.a/.a.
+/a.a/.a/aa /a.a/.a/aa
+/a.a/.a/a. /a.a/.a/a.
+/a.a/.a/a/ /a.a/.a/a
+/a.a/.a/.a /a.a/.a/.a
+/a.a/.a/.. /a.a
+/a.a/.a/./ /a.a/.a
+/a.a/.a//a /a.a/.a/a
+/a.a/.a//. /a.a/.a
+/a.a/.a/// /a.a/.a
+/a.a/..aaa /a.a/..aaa
+/a.a/..aa. /a.a/..aa.
+/a.a/..aa/ /a.a/..aa
+/a.a/..a.a /a.a/..a.a
+/a.a/..a.. /a.a/..a..
+/a.a/..a./ /a.a/..a.
+/a.a/..a/a /a.a/..a/a
+/a.a/..a/. /a.a/..a
+/a.a/..a// /a.a/..a
+/a.a/...aa /a.a/...aa
+/a.a/...a. /a.a/...a.
+/a.a/...a/ /a.a/...a
+/a.a/....a /a.a/....a
+/a.a/..... /a.a/.....
+/a.a/..../ /a.a/....
+/a.a/.../a /a.a/.../a
+/a.a/.../. /a.a/...
+/a.a/...// /a.a/...
+/a.a/../aa /aa
+/a.a/../a. /a.
+/a.a/../a/ /a
+/a.a/../.a /.a
+/a.a/../.. /
+/a.a/.././ /
+/a.a/..//a /a
+/a.a/..//. /
+/a.a/../// /
+/a.a/./aaa /a.a/aaa
+/a.a/./aa. /a.a/aa.
+/a.a/./aa/ /a.a/aa
+/a.a/./a.a /a.a/a.a
+/a.a/./a.. /a.a/a..
+/a.a/./a./ /a.a/a.
+/a.a/./a/a /a.a/a/a
+/a.a/./a/. /a.a/a
+/a.a/./a// /a.a/a
+/a.a/./.aa /a.a/.aa
+/a.a/./.a. /a.a/.a.
+/a.a/./.a/ /a.a/.a
+/a.a/./..a /a.a/..a
+/a.a/./... /a.a/...
+/a.a/./../ /
+/a.a/././a /a.a/a
+/a.a/././. /a.a
+/a.a/./.// /a.a
+/a.a/.//aa /a.a/aa
+/a.a/.//a. /a.a/a.
+/a.a/.//a/ /a.a/a
+/a.a/.//.a /a.a/.a
+/a.a/.//.. /
+/a.a/.//./ /a.a
+/a.a/.///a /a.a/a
+/a.a/.///. /a.a
+/a.a/.//// /a.a
+/a.a//aaaa /a.a/aaaa
+/a.a//aaa. /a.a/aaa.
+/a.a//aaa/ /a.a/aaa
+/a.a//aa.a /a.a/aa.a
+/a.a//aa.. /a.a/aa..
+/a.a//aa./ /a.a/aa.
+/a.a//aa/a /a.a/aa/a
+/a.a//aa/. /a.a/aa
+/a.a//aa// /a.a/aa
+/a.a//a.aa /a.a/a.aa
+/a.a//a.a. /a.a/a.a.
+/a.a//a.a/ /a.a/a.a
+/a.a//a..a /a.a/a..a
+/a.a//a... /a.a/a...
+/a.a//a../ /a.a/a..
+/a.a//a./a /a.a/a./a
+/a.a//a./. /a.a/a.
+/a.a//a.// /a.a/a.
+/a.a//a/aa /a.a/a/aa
+/a.a//a/a. /a.a/a/a.
+/a.a//a/a/ /a.a/a/a
+/a.a//a/.a /a.a/a/.a
+/a.a//a/.. /a.a
+/a.a//a/./ /a.a/a
+/a.a//a//a /a.a/a/a
+/a.a//a//. /a.a/a
+/a.a//a/// /a.a/a
+/a.a//.aaa /a.a/.aaa
+/a.a//.aa. /a.a/.aa.
+/a.a//.aa/ /a.a/.aa
+/a.a//.a.a /a.a/.a.a
+/a.a//.a.. /a.a/.a..
+/a.a//.a./ /a.a/.a.
+/a.a//.a/a /a.a/.a/a
+/a.a//.a/. /a.a/.a
+/a.a//.a// /a.a/.a
+/a.a//..aa /a.a/..aa
+/a.a//..a. /a.a/..a.
+/a.a//..a/ /a.a/..a
+/a.a//...a /a.a/...a
+/a.a//.... /a.a/....
+/a.a//.../ /a.a/...
+/a.a//../a /a
+/a.a//../. /
+/a.a//..// /
+/a.a//./aa /a.a/aa
+/a.a//./a. /a.a/a.
+/a.a//./a/ /a.a/a
+/a.a//./.a /a.a/.a
+/a.a//./.. /
+/a.a//././ /a.a
+/a.a//.//a /a.a/a
+/a.a//.//. /a.a
+/a.a//./// /a.a
+/a.a///aaa /a.a/aaa
+/a.a///aa. /a.a/aa.
+/a.a///aa/ /a.a/aa
+/a.a///a.a /a.a/a.a
+/a.a///a.. /a.a/a..
+/a.a///a./ /a.a/a.
+/a.a///a/a /a.a/a/a
+/a.a///a/. /a.a/a
+/a.a///a// /a.a/a
+/a.a///.aa /a.a/.aa
+/a.a///.a. /a.a/.a.
+/a.a///.a/ /a.a/.a
+/a.a///..a /a.a/..a
+/a.a///... /a.a/...
+/a.a///../ /
+/a.a///./a /a.a/a
+/a.a///./. /a.a
+/a.a///.// /a.a
+/a.a////aa /a.a/aa
+/a.a////a. /a.a/a.
+/a.a////a/ /a.a/a
+/a.a////.a /a.a/.a
+/a.a////.. /
+/a.a////./ /a.a
+/a.a/////a /a.a/a
+/a.a/////. /a.a
+/a.a////// /a.a
+/a..aaaaaa /a..aaaaaa
+/a..aaaaa. /a..aaaaa.
+/a..aaaaa/ /a..aaaaa
+/a..aaaa.a /a..aaaa.a
+/a..aaaa.. /a..aaaa..
+/a..aaaa./ /a..aaaa.
+/a..aaaa/a /a..aaaa/a
+/a..aaaa/. /a..aaaa
+/a..aaaa// /a..aaaa
+/a..aaa.aa /a..aaa.aa
+/a..aaa.a. /a..aaa.a.
+/a..aaa.a/ /a..aaa.a
+/a..aaa..a /a..aaa..a
+/a..aaa... /a..aaa...
+/a..aaa../ /a..aaa..
+/a..aaa./a /a..aaa./a
+/a..aaa./. /a..aaa.
+/a..aaa.// /a..aaa.
+/a..aaa/aa /a..aaa/aa
+/a..aaa/a. /a..aaa/a.
+/a..aaa/a/ /a..aaa/a
+/a..aaa/.a /a..aaa/.a
+/a..aaa/.. /
+/a..aaa/./ /a..aaa
+/a..aaa//a /a..aaa/a
+/a..aaa//. /a..aaa
+/a..aaa/// /a..aaa
+/a..aa.aaa /a..aa.aaa
+/a..aa.aa. /a..aa.aa.
+/a..aa.aa/ /a..aa.aa
+/a..aa.a.a /a..aa.a.a
+/a..aa.a.. /a..aa.a..
+/a..aa.a./ /a..aa.a.
+/a..aa.a/a /a..aa.a/a
+/a..aa.a/. /a..aa.a
+/a..aa.a// /a..aa.a
+/a..aa..aa /a..aa..aa
+/a..aa..a. /a..aa..a.
+/a..aa..a/ /a..aa..a
+/a..aa...a /a..aa...a
+/a..aa.... /a..aa....
+/a..aa.../ /a..aa...
+/a..aa../a /a..aa../a
+/a..aa../. /a..aa..
+/a..aa..// /a..aa..
+/a..aa./aa /a..aa./aa
+/a..aa./a. /a..aa./a.
+/a..aa./a/ /a..aa./a
+/a..aa./.a /a..aa./.a
+/a..aa./.. /
+/a..aa././ /a..aa.
+/a..aa.//a /a..aa./a
+/a..aa.//. /a..aa.
+/a..aa./// /a..aa.
+/a..aa/aaa /a..aa/aaa
+/a..aa/aa. /a..aa/aa.
+/a..aa/aa/ /a..aa/aa
+/a..aa/a.a /a..aa/a.a
+/a..aa/a.. /a..aa/a..
+/a..aa/a./ /a..aa/a.
+/a..aa/a/a /a..aa/a/a
+/a..aa/a/. /a..aa/a
+/a..aa/a// /a..aa/a
+/a..aa/.aa /a..aa/.aa
+/a..aa/.a. /a..aa/.a.
+/a..aa/.a/ /a..aa/.a
+/a..aa/..a /a..aa/..a
+/a..aa/... /a..aa/...
+/a..aa/../ /
+/a..aa/./a /a..aa/a
+/a..aa/./. /a..aa
+/a..aa/.// /a..aa
+/a..aa//aa /a..aa/aa
+/a..aa//a. /a..aa/a.
+/a..aa//a/ /a..aa/a
+/a..aa//.a /a..aa/.a
+/a..aa//.. /
+/a..aa//./ /a..aa
+/a..aa///a /a..aa/a
+/a..aa///. /a..aa
+/a..aa//// /a..aa
+/a..a.aaaa /a..a.aaaa
+/a..a.aaa. /a..a.aaa.
+/a..a.aaa/ /a..a.aaa
+/a..a.aa.a /a..a.aa.a
+/a..a.aa.. /a..a.aa..
+/a..a.aa./ /a..a.aa.
+/a..a.aa/a /a..a.aa/a
+/a..a.aa/. /a..a.aa
+/a..a.aa// /a..a.aa
+/a..a.a.aa /a..a.a.aa
+/a..a.a.a. /a..a.a.a.
+/a..a.a.a/ /a..a.a.a
+/a..a.a..a /a..a.a..a
+/a..a.a... /a..a.a...
+/a..a.a../ /a..a.a..
+/a..a.a./a /a..a.a./a
+/a..a.a./. /a..a.a.
+/a..a.a.// /a..a.a.
+/a..a.a/aa /a..a.a/aa
+/a..a.a/a. /a..a.a/a.
+/a..a.a/a/ /a..a.a/a
+/a..a.a/.a /a..a.a/.a
+/a..a.a/.. /
+/a..a.a/./ /a..a.a
+/a..a.a//a /a..a.a/a
+/a..a.a//. /a..a.a
+/a..a.a/// /a..a.a
+/a..a..aaa /a..a..aaa
+/a..a..aa. /a..a..aa.
+/a..a..aa/ /a..a..aa
+/a..a..a.a /a..a..a.a
+/a..a..a.. /a..a..a..
+/a..a..a./ /a..a..a.
+/a..a..a/a /a..a..a/a
+/a..a..a/. /a..a..a
+/a..a..a// /a..a..a
+/a..a...aa /a..a...aa
+/a..a...a. /a..a...a.
+/a..a...a/ /a..a...a
+/a..a....a /a..a....a
+/a..a..... /a..a.....
+/a..a..../ /a..a....
+/a..a.../a /a..a.../a
+/a..a.../. /a..a...
+/a..a...// /a..a...
+/a..a../aa /a..a../aa
+/a..a../a. /a..a../a.
+/a..a../a/ /a..a../a
+/a..a../.a /a..a../.a
+/a..a../.. /
+/a..a.././ /a..a..
+/a..a..//a /a..a../a
+/a..a..//. /a..a..
+/a..a../// /a..a..
+/a..a./aaa /a..a./aaa
+/a..a./aa. /a..a./aa.
+/a..a./aa/ /a..a./aa
+/a..a./a.a /a..a./a.a
+/a..a./a.. /a..a./a..
+/a..a./a./ /a..a./a.
+/a..a./a/a /a..a./a/a
+/a..a./a/. /a..a./a
+/a..a./a// /a..a./a
+/a..a./.aa /a..a./.aa
+/a..a./.a. /a..a./.a.
+/a..a./.a/ /a..a./.a
+/a..a./..a /a..a./..a
+/a..a./... /a..a./...
+/a..a./../ /
+/a..a././a /a..a./a
+/a..a././. /a..a.
+/a..a./.// /a..a.
+/a..a.//aa /a..a./aa
+/a..a.//a. /a..a./a.
+/a..a.//a/ /a..a./a
+/a..a.//.a /a..a./.a
+/a..a.//.. /
+/a..a.//./ /a..a.
+/a..a.///a /a..a./a
+/a..a.///. /a..a.
+/a..a.//// /a..a.
+/a..a/aaaa /a..a/aaaa
+/a..a/aaa. /a..a/aaa.
+/a..a/aaa/ /a..a/aaa
+/a..a/aa.a /a..a/aa.a
+/a..a/aa.. /a..a/aa..
+/a..a/aa./ /a..a/aa.
+/a..a/aa/a /a..a/aa/a
+/a..a/aa/. /a..a/aa
+/a..a/aa// /a..a/aa
+/a..a/a.aa /a..a/a.aa
+/a..a/a.a. /a..a/a.a.
+/a..a/a.a/ /a..a/a.a
+/a..a/a..a /a..a/a..a
+/a..a/a... /a..a/a...
+/a..a/a../ /a..a/a..
+/a..a/a./a /a..a/a./a
+/a..a/a./. /a..a/a.
+/a..a/a.// /a..a/a.
+/a..a/a/aa /a..a/a/aa
+/a..a/a/a. /a..a/a/a.
+/a..a/a/a/ /a..a/a/a
+/a..a/a/.a /a..a/a/.a
+/a..a/a/.. /a..a
+/a..a/a/./ /a..a/a
+/a..a/a//a /a..a/a/a
+/a..a/a//. /a..a/a
+/a..a/a/// /a..a/a
+/a..a/.aaa /a..a/.aaa
+/a..a/.aa. /a..a/.aa.
+/a..a/.aa/ /a..a/.aa
+/a..a/.a.a /a..a/.a.a
+/a..a/.a.. /a..a/.a..
+/a..a/.a./ /a..a/.a.
+/a..a/.a/a /a..a/.a/a
+/a..a/.a/. /a..a/.a
+/a..a/.a// /a..a/.a
+/a..a/..aa /a..a/..aa
+/a..a/..a. /a..a/..a.
+/a..a/..a/ /a..a/..a
+/a..a/...a /a..a/...a
+/a..a/.... /a..a/....
+/a..a/.../ /a..a/...
+/a..a/../a /a
+/a..a/../. /
+/a..a/..// /
+/a..a/./aa /a..a/aa
+/a..a/./a. /a..a/a.
+/a..a/./a/ /a..a/a
+/a..a/./.a /a..a/.a
+/a..a/./.. /
+/a..a/././ /a..a
+/a..a/.//a /a..a/a
+/a..a/.//. /a..a
+/a..a/./// /a..a
+/a..a//aaa /a..a/aaa
+/a..a//aa. /a..a/aa.
+/a..a//aa/ /a..a/aa
+/a..a//a.a /a..a/a.a
+/a..a//a.. /a..a/a..
+/a..a//a./ /a..a/a.
+/a..a//a/a /a..a/a/a
+/a..a//a/. /a..a/a
+/a..a//a// /a..a/a
+/a..a//.aa /a..a/.aa
+/a..a//.a. /a..a/.a.
+/a..a//.a/ /a..a/.a
+/a..a//..a /a..a/..a
+/a..a//... /a..a/...
+/a..a//../ /
+/a..a//./a /a..a/a
+/a..a//./. /a..a
+/a..a//.// /a..a
+/a..a///aa /a..a/aa
+/a..a///a. /a..a/a.
+/a..a///a/ /a..a/a
+/a..a///.a /a..a/.a
+/a..a///.. /
+/a..a///./ /a..a
+/a..a////a /a..a/a
+/a..a////. /a..a
+/a..a///// /a..a
+/a...aaaaa /a...aaaaa
+/a...aaaa. /a...aaaa.
+/a...aaaa/ /a...aaaa
+/a...aaa.a /a...aaa.a
+/a...aaa.. /a...aaa..
+/a...aaa./ /a...aaa.
+/a...aaa/a /a...aaa/a
+/a...aaa/. /a...aaa
+/a...aaa// /a...aaa
+/a...aa.aa /a...aa.aa
+/a...aa.a. /a...aa.a.
+/a...aa.a/ /a...aa.a
+/a...aa..a /a...aa..a
+/a...aa... /a...aa...
+/a...aa../ /a...aa..
+/a...aa./a /a...aa./a
+/a...aa./. /a...aa.
+/a...aa.// /a...aa.
+/a...aa/aa /a...aa/aa
+/a...aa/a. /a...aa/a.
+/a...aa/a/ /a...aa/a
+/a...aa/.a /a...aa/.a
+/a...aa/.. /
+/a...aa/./ /a...aa
+/a...aa//a /a...aa/a
+/a...aa//. /a...aa
+/a...aa/// /a...aa
+/a...a.aaa /a...a.aaa
+/a...a.aa. /a...a.aa.
+/a...a.aa/ /a...a.aa
+/a...a.a.a /a...a.a.a
+/a...a.a.. /a...a.a..
+/a...a.a./ /a...a.a.
+/a...a.a/a /a...a.a/a
+/a...a.a/. /a...a.a
+/a...a.a// /a...a.a
+/a...a..aa /a...a..aa
+/a...a..a. /a...a..a.
+/a...a..a/ /a...a..a
+/a...a...a /a...a...a
+/a...a.... /a...a....
+/a...a.../ /a...a...
+/a...a../a /a...a../a
+/a...a../. /a...a..
+/a...a..// /a...a..
+/a...a./aa /a...a./aa
+/a...a./a. /a...a./a.
+/a...a./a/ /a...a./a
+/a...a./.a /a...a./.a
+/a...a./.. /
+/a...a././ /a...a.
+/a...a.//a /a...a./a
+/a...a.//. /a...a.
+/a...a./// /a...a.
+/a...a/aaa /a...a/aaa
+/a...a/aa. /a...a/aa.
+/a...a/aa/ /a...a/aa
+/a...a/a.a /a...a/a.a
+/a...a/a.. /a...a/a..
+/a...a/a./ /a...a/a.
+/a...a/a/a /a...a/a/a
+/a...a/a/. /a...a/a
+/a...a/a// /a...a/a
+/a...a/.aa /a...a/.aa
+/a...a/.a. /a...a/.a.
+/a...a/.a/ /a...a/.a
+/a...a/..a /a...a/..a
+/a...a/... /a...a/...
+/a...a/../ /
+/a...a/./a /a...a/a
+/a...a/./. /a...a
+/a...a/.// /a...a
+/a...a//aa /a...a/aa
+/a...a//a. /a...a/a.
+/a...a//a/ /a...a/a
+/a...a//.a /a...a/.a
+/a...a//.. /
+/a...a//./ /a...a
+/a...a///a /a...a/a
+/a...a///. /a...a
+/a...a//// /a...a
+/a....aaaa /a....aaaa
+/a....aaa. /a....aaa.
+/a....aaa/ /a....aaa
+/a....aa.a /a....aa.a
+/a....aa.. /a....aa..
+/a....aa./ /a....aa.
+/a....aa/a /a....aa/a
+/a....aa/. /a....aa
+/a....aa// /a....aa
+/a....a.aa /a....a.aa
+/a....a.a. /a....a.a.
+/a....a.a/ /a....a.a
+/a....a..a /a....a..a
+/a....a... /a....a...
+/a....a../ /a....a..
+/a....a./a /a....a./a
+/a....a./. /a....a.
+/a....a.// /a....a.
+/a....a/aa /a....a/aa
+/a....a/a. /a....a/a.
+/a....a/a/ /a....a/a
+/a....a/.a /a....a/.a
+/a....a/.. /
+/a....a/./ /a....a
+/a....a//a /a....a/a
+/a....a//. /a....a
+/a....a/// /a....a
+/a.....aaa /a.....aaa
+/a.....aa. /a.....aa.
+/a.....aa/ /a.....aa
+/a.....a.a /a.....a.a
+/a.....a.. /a.....a..
+/a.....a./ /a.....a.
+/a.....a/a /a.....a/a
+/a.....a/. /a.....a
+/a.....a// /a.....a
+/a......aa /a......aa
+/a......a. /a......a.
+/a......a/ /a......a
+/a.......a /a.......a
+/a........ /a........
+/a......./ /a.......
+/a....../a /a....../a
+/a....../. /a......
+/a......// /a......
+/a...../aa /a...../aa
+/a...../a. /a...../a.
+/a...../a/ /a...../a
+/a...../.a /a...../.a
+/a...../.. /
+/a....././ /a.....
+/a.....//a /a...../a
+/a.....//. /a.....
+/a...../// /a.....
+/a..../aaa /a..../aaa
+/a..../aa. /a..../aa.
+/a..../aa/ /a..../aa
+/a..../a.a /a..../a.a
+/a..../a.. /a..../a..
+/a..../a./ /a..../a.
+/a..../a/a /a..../a/a
+/a..../a/. /a..../a
+/a..../a// /a..../a
+/a..../.aa /a..../.aa
+/a..../.a. /a..../.a.
+/a..../.a/ /a..../.a
+/a..../..a /a..../..a
+/a..../... /a..../...
+/a..../../ /
+/a...././a /a..../a
+/a...././. /a....
+/a..../.// /a....
+/a....//aa /a..../aa
+/a....//a. /a..../a.
+/a....//a/ /a..../a
+/a....//.a /a..../.a
+/a....//.. /
+/a....//./ /a....
+/a....///a /a..../a
+/a....///. /a....
+/a....//// /a....
+/a.../aaaa /a.../aaaa
+/a.../aaa. /a.../aaa.
+/a.../aaa/ /a.../aaa
+/a.../aa.a /a.../aa.a
+/a.../aa.. /a.../aa..
+/a.../aa./ /a.../aa.
+/a.../aa/a /a.../aa/a
+/a.../aa/. /a.../aa
+/a.../aa// /a.../aa
+/a.../a.aa /a.../a.aa
+/a.../a.a. /a.../a.a.
+/a.../a.a/ /a.../a.a
+/a.../a..a /a.../a..a
+/a.../a... /a.../a...
+/a.../a../ /a.../a..
+/a.../a./a /a.../a./a
+/a.../a./. /a.../a.
+/a.../a.// /a.../a.
+/a.../a/aa /a.../a/aa
+/a.../a/a. /a.../a/a.
+/a.../a/a/ /a.../a/a
+/a.../a/.a /a.../a/.a
+/a.../a/.. /a...
+/a.../a/./ /a.../a
+/a.../a//a /a.../a/a
+/a.../a//. /a.../a
+/a.../a/// /a.../a
+/a.../.aaa /a.../.aaa
+/a.../.aa. /a.../.aa.
+/a.../.aa/ /a.../.aa
+/a.../.a.a /a.../.a.a
+/a.../.a.. /a.../.a..
+/a.../.a./ /a.../.a.
+/a.../.a/a /a.../.a/a
+/a.../.a/. /a.../.a
+/a.../.a// /a.../.a
+/a.../..aa /a.../..aa
+/a.../..a. /a.../..a.
+/a.../..a/ /a.../..a
+/a.../...a /a.../...a
+/a.../.... /a.../....
+/a.../.../ /a.../...
+/a.../../a /a
+/a.../../. /
+/a.../..// /
+/a..././aa /a.../aa
+/a..././a. /a.../a.
+/a..././a/ /a.../a
+/a..././.a /a.../.a
+/a..././.. /
+/a.../././ /a...
+/a..././/a /a.../a
+/a..././/. /a...
+/a..././// /a...
+/a...//aaa /a.../aaa
+/a...//aa. /a.../aa.
+/a...//aa/ /a.../aa
+/a...//a.a /a.../a.a
+/a...//a.. /a.../a..
+/a...//a./ /a.../a.
+/a...//a/a /a.../a/a
+/a...//a/. /a.../a
+/a...//a// /a.../a
+/a...//.aa /a.../.aa
+/a...//.a. /a.../.a.
+/a...//.a/ /a.../.a
+/a...//..a /a.../..a
+/a...//... /a.../...
+/a...//../ /
+/a...//./a /a.../a
+/a...//./. /a...
+/a...//.// /a...
+/a...///aa /a.../aa
+/a...///a. /a.../a.
+/a...///a/ /a.../a
+/a...///.a /a.../.a
+/a...///.. /
+/a...///./ /a...
+/a...////a /a.../a
+/a...////. /a...
+/a...///// /a...
+/a../aaaaa /a../aaaaa
+/a../aaaa. /a../aaaa.
+/a../aaaa/ /a../aaaa
+/a../aaa.a /a../aaa.a
+/a../aaa.. /a../aaa..
+/a../aaa./ /a../aaa.
+/a../aaa/a /a../aaa/a
+/a../aaa/. /a../aaa
+/a../aaa// /a../aaa
+/a../aa.aa /a../aa.aa
+/a../aa.a. /a../aa.a.
+/a../aa.a/ /a../aa.a
+/a../aa..a /a../aa..a
+/a../aa... /a../aa...
+/a../aa../ /a../aa..
+/a../aa./a /a../aa./a
+/a../aa./. /a../aa.
+/a../aa.// /a../aa.
+/a../aa/aa /a../aa/aa
+/a../aa/a. /a../aa/a.
+/a../aa/a/ /a../aa/a
+/a../aa/.a /a../aa/.a
+/a../aa/.. /a..
+/a../aa/./ /a../aa
+/a../aa//a /a../aa/a
+/a../aa//. /a../aa
+/a../aa/// /a../aa
+/a../a.aaa /a../a.aaa
+/a../a.aa. /a../a.aa.
+/a../a.aa/ /a../a.aa
+/a../a.a.a /a../a.a.a
+/a../a.a.. /a../a.a..
+/a../a.a./ /a../a.a.
+/a../a.a/a /a../a.a/a
+/a../a.a/. /a../a.a
+/a../a.a// /a../a.a
+/a../a..aa /a../a..aa
+/a../a..a. /a../a..a.
+/a../a..a/ /a../a..a
+/a../a...a /a../a...a
+/a../a.... /a../a....
+/a../a.../ /a../a...
+/a../a../a /a../a../a
+/a../a../. /a../a..
+/a../a..// /a../a..
+/a../a./aa /a../a./aa
+/a../a./a. /a../a./a.
+/a../a./a/ /a../a./a
+/a../a./.a /a../a./.a
+/a../a./.. /a..
+/a../a././ /a../a.
+/a../a.//a /a../a./a
+/a../a.//. /a../a.
+/a../a./// /a../a.
+/a../a/aaa /a../a/aaa
+/a../a/aa. /a../a/aa.
+/a../a/aa/ /a../a/aa
+/a../a/a.a /a../a/a.a
+/a../a/a.. /a../a/a..
+/a../a/a./ /a../a/a.
+/a../a/a/a /a../a/a/a
+/a../a/a/. /a../a/a
+/a../a/a// /a../a/a
+/a../a/.aa /a../a/.aa
+/a../a/.a. /a../a/.a.
+/a../a/.a/ /a../a/.a
+/a../a/..a /a../a/..a
+/a../a/... /a../a/...
+/a../a/../ /a..
+/a../a/./a /a../a/a
+/a../a/./. /a../a
+/a../a/.// /a../a
+/a../a//aa /a../a/aa
+/a../a//a. /a../a/a.
+/a../a//a/ /a../a/a
+/a../a//.a /a../a/.a
+/a../a//.. /a..
+/a../a//./ /a../a
+/a../a///a /a../a/a
+/a../a///. /a../a
+/a../a//// /a../a
+/a../.aaaa /a../.aaaa
+/a../.aaa. /a../.aaa.
+/a../.aaa/ /a../.aaa
+/a../.aa.a /a../.aa.a
+/a../.aa.. /a../.aa..
+/a../.aa./ /a../.aa.
+/a../.aa/a /a../.aa/a
+/a../.aa/. /a../.aa
+/a../.aa// /a../.aa
+/a../.a.aa /a../.a.aa
+/a../.a.a. /a../.a.a.
+/a../.a.a/ /a../.a.a
+/a../.a..a /a../.a..a
+/a../.a... /a../.a...
+/a../.a../ /a../.a..
+/a../.a./a /a../.a./a
+/a../.a./. /a../.a.
+/a../.a.// /a../.a.
+/a../.a/aa /a../.a/aa
+/a../.a/a. /a../.a/a.
+/a../.a/a/ /a../.a/a
+/a../.a/.a /a../.a/.a
+/a../.a/.. /a..
+/a../.a/./ /a../.a
+/a../.a//a /a../.a/a
+/a../.a//. /a../.a
+/a../.a/// /a../.a
+/a../..aaa /a../..aaa
+/a../..aa. /a../..aa.
+/a../..aa/ /a../..aa
+/a../..a.a /a../..a.a
+/a../..a.. /a../..a..
+/a../..a./ /a../..a.
+/a../..a/a /a../..a/a
+/a../..a/. /a../..a
+/a../..a// /a../..a
+/a../...aa /a../...aa
+/a../...a. /a../...a.
+/a../...a/ /a../...a
+/a../....a /a../....a
+/a../..... /a../.....
+/a../..../ /a../....
+/a../.../a /a../.../a
+/a../.../. /a../...
+/a../...// /a../...
+/a../../aa /aa
+/a../../a. /a.
+/a../../a/ /a
+/a../../.a /.a
+/a../../.. /
+/a../.././ /
+/a../..//a /a
+/a../..//. /
+/a../../// /
+/a.././aaa /a../aaa
+/a.././aa. /a../aa.
+/a.././aa/ /a../aa
+/a.././a.a /a../a.a
+/a.././a.. /a../a..
+/a.././a./ /a../a.
+/a.././a/a /a../a/a
+/a.././a/. /a../a
+/a.././a// /a../a
+/a.././.aa /a../.aa
+/a.././.a. /a../.a.
+/a.././.a/ /a../.a
+/a.././..a /a../..a
+/a.././... /a../...
+/a.././../ /
+/a../././a /a../a
+/a../././. /a..
+/a.././.// /a..
+/a.././/aa /a../aa
+/a.././/a. /a../a.
+/a.././/a/ /a../a
+/a.././/.a /a../.a
+/a.././/.. /
+/a.././/./ /a..
+/a.././//a /a../a
+/a.././//. /a..
+/a.././/// /a..
+/a..//aaaa /a../aaaa
+/a..//aaa. /a../aaa.
+/a..//aaa/ /a../aaa
+/a..//aa.a /a../aa.a
+/a..//aa.. /a../aa..
+/a..//aa./ /a../aa.
+/a..//aa/a /a../aa/a
+/a..//aa/. /a../aa
+/a..//aa// /a../aa
+/a..//a.aa /a../a.aa
+/a..//a.a. /a../a.a.
+/a..//a.a/ /a../a.a
+/a..//a..a /a../a..a
+/a..//a... /a../a...
+/a..//a../ /a../a..
+/a..//a./a /a../a./a
+/a..//a./. /a../a.
+/a..//a.// /a../a.
+/a..//a/aa /a../a/aa
+/a..//a/a. /a../a/a.
+/a..//a/a/ /a../a/a
+/a..//a/.a /a../a/.a
+/a..//a/.. /a..
+/a..//a/./ /a../a
+/a..//a//a /a../a/a
+/a..//a//. /a../a
+/a..//a/// /a../a
+/a..//.aaa /a../.aaa
+/a..//.aa. /a../.aa.
+/a..//.aa/ /a../.aa
+/a..//.a.a /a../.a.a
+/a..//.a.. /a../.a..
+/a..//.a./ /a../.a.
+/a..//.a/a /a../.a/a
+/a..//.a/. /a../.a
+/a..//.a// /a../.a
+/a..//..aa /a../..aa
+/a..//..a. /a../..a.
+/a..//..a/ /a../..a
+/a..//...a /a../...a
+/a..//.... /a../....
+/a..//.../ /a../...
+/a..//../a /a
+/a..//../. /
+/a..//..// /
+/a..//./aa /a../aa
+/a..//./a. /a../a.
+/a..//./a/ /a../a
+/a..//./.a /a../.a
+/a..//./.. /
+/a..//././ /a..
+/a..//.//a /a../a
+/a..//.//. /a..
+/a..//./// /a..
+/a..///aaa /a../aaa
+/a..///aa. /a../aa.
+/a..///aa/ /a../aa
+/a..///a.a /a../a.a
+/a..///a.. /a../a..
+/a..///a./ /a../a.
+/a..///a/a /a../a/a
+/a..///a/. /a../a
+/a..///a// /a../a
+/a..///.aa /a../.aa
+/a..///.a. /a../.a.
+/a..///.a/ /a../.a
+/a..///..a /a../..a
+/a..///... /a../...
+/a..///../ /
+/a..///./a /a../a
+/a..///./. /a..
+/a..///.// /a..
+/a..////aa /a../aa
+/a..////a. /a../a.
+/a..////a/ /a../a
+/a..////.a /a../.a
+/a..////.. /
+/a..////./ /a..
+/a../////a /a../a
+/a../////. /a..
+/a..////// /a..
+/a./aaaaaa /a./aaaaaa
+/a./aaaaa. /a./aaaaa.
+/a./aaaaa/ /a./aaaaa
+/a./aaaa.a /a./aaaa.a
+/a./aaaa.. /a./aaaa..
+/a./aaaa./ /a./aaaa.
+/a./aaaa/a /a./aaaa/a
+/a./aaaa/. /a./aaaa
+/a./aaaa// /a./aaaa
+/a./aaa.aa /a./aaa.aa
+/a./aaa.a. /a./aaa.a.
+/a./aaa.a/ /a./aaa.a
+/a./aaa..a /a./aaa..a
+/a./aaa... /a./aaa...
+/a./aaa../ /a./aaa..
+/a./aaa./a /a./aaa./a
+/a./aaa./. /a./aaa.
+/a./aaa.// /a./aaa.
+/a./aaa/aa /a./aaa/aa
+/a./aaa/a. /a./aaa/a.
+/a./aaa/a/ /a./aaa/a
+/a./aaa/.a /a./aaa/.a
+/a./aaa/.. /a.
+/a./aaa/./ /a./aaa
+/a./aaa//a /a./aaa/a
+/a./aaa//. /a./aaa
+/a./aaa/// /a./aaa
+/a./aa.aaa /a./aa.aaa
+/a./aa.aa. /a./aa.aa.
+/a./aa.aa/ /a./aa.aa
+/a./aa.a.a /a./aa.a.a
+/a./aa.a.. /a./aa.a..
+/a./aa.a./ /a./aa.a.
+/a./aa.a/a /a./aa.a/a
+/a./aa.a/. /a./aa.a
+/a./aa.a// /a./aa.a
+/a./aa..aa /a./aa..aa
+/a./aa..a. /a./aa..a.
+/a./aa..a/ /a./aa..a
+/a./aa...a /a./aa...a
+/a./aa.... /a./aa....
+/a./aa.../ /a./aa...
+/a./aa../a /a./aa../a
+/a./aa../. /a./aa..
+/a./aa..// /a./aa..
+/a./aa./aa /a./aa./aa
+/a./aa./a. /a./aa./a.
+/a./aa./a/ /a./aa./a
+/a./aa./.a /a./aa./.a
+/a./aa./.. /a.
+/a./aa././ /a./aa.
+/a./aa.//a /a./aa./a
+/a./aa.//. /a./aa.
+/a./aa./// /a./aa.
+/a./aa/aaa /a./aa/aaa
+/a./aa/aa. /a./aa/aa.
+/a./aa/aa/ /a./aa/aa
+/a./aa/a.a /a./aa/a.a
+/a./aa/a.. /a./aa/a..
+/a./aa/a./ /a./aa/a.
+/a./aa/a/a /a./aa/a/a
+/a./aa/a/. /a./aa/a
+/a./aa/a// /a./aa/a
+/a./aa/.aa /a./aa/.aa
+/a./aa/.a. /a./aa/.a.
+/a./aa/.a/ /a./aa/.a
+/a./aa/..a /a./aa/..a
+/a./aa/... /a./aa/...
+/a./aa/../ /a.
+/a./aa/./a /a./aa/a
+/a./aa/./. /a./aa
+/a./aa/.// /a./aa
+/a./aa//aa /a./aa/aa
+/a./aa//a. /a./aa/a.
+/a./aa//a/ /a./aa/a
+/a./aa//.a /a./aa/.a
+/a./aa//.. /a.
+/a./aa//./ /a./aa
+/a./aa///a /a./aa/a
+/a./aa///. /a./aa
+/a./aa//// /a./aa
+/a./a.aaaa /a./a.aaaa
+/a./a.aaa. /a./a.aaa.
+/a./a.aaa/ /a./a.aaa
+/a./a.aa.a /a./a.aa.a
+/a./a.aa.. /a./a.aa..
+/a./a.aa./ /a./a.aa.
+/a./a.aa/a /a./a.aa/a
+/a./a.aa/. /a./a.aa
+/a./a.aa// /a./a.aa
+/a./a.a.aa /a./a.a.aa
+/a./a.a.a. /a./a.a.a.
+/a./a.a.a/ /a./a.a.a
+/a./a.a..a /a./a.a..a
+/a./a.a... /a./a.a...
+/a./a.a../ /a./a.a..
+/a./a.a./a /a./a.a./a
+/a./a.a./. /a./a.a.
+/a./a.a.// /a./a.a.
+/a./a.a/aa /a./a.a/aa
+/a./a.a/a. /a./a.a/a.
+/a./a.a/a/ /a./a.a/a
+/a./a.a/.a /a./a.a/.a
+/a./a.a/.. /a.
+/a./a.a/./ /a./a.a
+/a./a.a//a /a./a.a/a
+/a./a.a//. /a./a.a
+/a./a.a/// /a./a.a
+/a./a..aaa /a./a..aaa
+/a./a..aa. /a./a..aa.
+/a./a..aa/ /a./a..aa
+/a./a..a.a /a./a..a.a
+/a./a..a.. /a./a..a..
+/a./a..a./ /a./a..a.
+/a./a..a/a /a./a..a/a
+/a./a..a/. /a./a..a
+/a./a..a// /a./a..a
+/a./a...aa /a./a...aa
+/a./a...a. /a./a...a.
+/a./a...a/ /a./a...a
+/a./a....a /a./a....a
+/a./a..... /a./a.....
+/a./a..../ /a./a....
+/a./a.../a /a./a.../a
+/a./a.../. /a./a...
+/a./a...// /a./a...
+/a./a../aa /a./a../aa
+/a./a../a. /a./a../a.
+/a./a../a/ /a./a../a
+/a./a../.a /a./a../.a
+/a./a../.. /a.
+/a./a.././ /a./a..
+/a./a..//a /a./a../a
+/a./a..//. /a./a..
+/a./a../// /a./a..
+/a./a./aaa /a./a./aaa
+/a./a./aa. /a./a./aa.
+/a./a./aa/ /a./a./aa
+/a./a./a.a /a./a./a.a
+/a./a./a.. /a./a./a..
+/a./a./a./ /a./a./a.
+/a./a./a/a /a./a./a/a
+/a./a./a/. /a./a./a
+/a./a./a// /a./a./a
+/a./a./.aa /a./a./.aa
+/a./a./.a. /a./a./.a.
+/a./a./.a/ /a./a./.a
+/a./a./..a /a./a./..a
+/a./a./... /a./a./...
+/a./a./../ /a.
+/a./a././a /a./a./a
+/a./a././. /a./a.
+/a./a./.// /a./a.
+/a./a.//aa /a./a./aa
+/a./a.//a. /a./a./a.
+/a./a.//a/ /a./a./a
+/a./a.//.a /a./a./.a
+/a./a.//.. /a.
+/a./a.//./ /a./a.
+/a./a.///a /a./a./a
+/a./a.///. /a./a.
+/a./a.//// /a./a.
+/a./a/aaaa /a./a/aaaa
+/a./a/aaa. /a./a/aaa.
+/a./a/aaa/ /a./a/aaa
+/a./a/aa.a /a./a/aa.a
+/a./a/aa.. /a./a/aa..
+/a./a/aa./ /a./a/aa.
+/a./a/aa/a /a./a/aa/a
+/a./a/aa/. /a./a/aa
+/a./a/aa// /a./a/aa
+/a./a/a.aa /a./a/a.aa
+/a./a/a.a. /a./a/a.a.
+/a./a/a.a/ /a./a/a.a
+/a./a/a..a /a./a/a..a
+/a./a/a... /a./a/a...
+/a./a/a../ /a./a/a..
+/a./a/a./a /a./a/a./a
+/a./a/a./. /a./a/a.
+/a./a/a.// /a./a/a.
+/a./a/a/aa /a./a/a/aa
+/a./a/a/a. /a./a/a/a.
+/a./a/a/a/ /a./a/a/a
+/a./a/a/.a /a./a/a/.a
+/a./a/a/.. /a./a
+/a./a/a/./ /a./a/a
+/a./a/a//a /a./a/a/a
+/a./a/a//. /a./a/a
+/a./a/a/// /a./a/a
+/a./a/.aaa /a./a/.aaa
+/a./a/.aa. /a./a/.aa.
+/a./a/.aa/ /a./a/.aa
+/a./a/.a.a /a./a/.a.a
+/a./a/.a.. /a./a/.a..
+/a./a/.a./ /a./a/.a.
+/a./a/.a/a /a./a/.a/a
+/a./a/.a/. /a./a/.a
+/a./a/.a// /a./a/.a
+/a./a/..aa /a./a/..aa
+/a./a/..a. /a./a/..a.
+/a./a/..a/ /a./a/..a
+/a./a/...a /a./a/...a
+/a./a/.... /a./a/....
+/a./a/.../ /a./a/...
+/a./a/../a /a./a
+/a./a/../. /a.
+/a./a/..// /a.
+/a./a/./aa /a./a/aa
+/a./a/./a. /a./a/a.
+/a./a/./a/ /a./a/a
+/a./a/./.a /a./a/.a
+/a./a/./.. /a.
+/a./a/././ /a./a
+/a./a/.//a /a./a/a
+/a./a/.//. /a./a
+/a./a/./// /a./a
+/a./a//aaa /a./a/aaa
+/a./a//aa. /a./a/aa.
+/a./a//aa/ /a./a/aa
+/a./a//a.a /a./a/a.a
+/a./a//a.. /a./a/a..
+/a./a//a./ /a./a/a.
+/a./a//a/a /a./a/a/a
+/a./a//a/. /a./a/a
+/a./a//a// /a./a/a
+/a./a//.aa /a./a/.aa
+/a./a//.a. /a./a/.a.
+/a./a//.a/ /a./a/.a
+/a./a//..a /a./a/..a
+/a./a//... /a./a/...
+/a./a//../ /a.
+/a./a//./a /a./a/a
+/a./a//./. /a./a
+/a./a//.// /a./a
+/a./a///aa /a./a/aa
+/a./a///a. /a./a/a.
+/a./a///a/ /a./a/a
+/a./a///.a /a./a/.a
+/a./a///.. /a.
+/a./a///./ /a./a
+/a./a////a /a./a/a
+/a./a////. /a./a
+/a./a///// /a./a
+/a./.aaaaa /a./.aaaaa
+/a./.aaaa. /a./.aaaa.
+/a./.aaaa/ /a./.aaaa
+/a./.aaa.a /a./.aaa.a
+/a./.aaa.. /a./.aaa..
+/a./.aaa./ /a./.aaa.
+/a./.aaa/a /a./.aaa/a
+/a./.aaa/. /a./.aaa
+/a./.aaa// /a./.aaa
+/a./.aa.aa /a./.aa.aa
+/a./.aa.a. /a./.aa.a.
+/a./.aa.a/ /a./.aa.a
+/a./.aa..a /a./.aa..a
+/a./.aa... /a./.aa...
+/a./.aa../ /a./.aa..
+/a./.aa./a /a./.aa./a
+/a./.aa./. /a./.aa.
+/a./.aa.// /a./.aa.
+/a./.aa/aa /a./.aa/aa
+/a./.aa/a. /a./.aa/a.
+/a./.aa/a/ /a./.aa/a
+/a./.aa/.a /a./.aa/.a
+/a./.aa/.. /a.
+/a./.aa/./ /a./.aa
+/a./.aa//a /a./.aa/a
+/a./.aa//. /a./.aa
+/a./.aa/// /a./.aa
+/a./.a.aaa /a./.a.aaa
+/a./.a.aa. /a./.a.aa.
+/a./.a.aa/ /a./.a.aa
+/a./.a.a.a /a./.a.a.a
+/a./.a.a.. /a./.a.a..
+/a./.a.a./ /a./.a.a.
+/a./.a.a/a /a./.a.a/a
+/a./.a.a/. /a./.a.a
+/a./.a.a// /a./.a.a
+/a./.a..aa /a./.a..aa
+/a./.a..a. /a./.a..a.
+/a./.a..a/ /a./.a..a
+/a./.a...a /a./.a...a
+/a./.a.... /a./.a....
+/a./.a.../ /a./.a...
+/a./.a../a /a./.a../a
+/a./.a../. /a./.a..
+/a./.a..// /a./.a..
+/a./.a./aa /a./.a./aa
+/a./.a./a. /a./.a./a.
+/a./.a./a/ /a./.a./a
+/a./.a./.a /a./.a./.a
+/a./.a./.. /a.
+/a./.a././ /a./.a.
+/a./.a.//a /a./.a./a
+/a./.a.//. /a./.a.
+/a./.a./// /a./.a.
+/a./.a/aaa /a./.a/aaa
+/a./.a/aa. /a./.a/aa.
+/a./.a/aa/ /a./.a/aa
+/a./.a/a.a /a./.a/a.a
+/a./.a/a.. /a./.a/a..
+/a./.a/a./ /a./.a/a.
+/a./.a/a/a /a./.a/a/a
+/a./.a/a/. /a./.a/a
+/a./.a/a// /a./.a/a
+/a./.a/.aa /a./.a/.aa
+/a./.a/.a. /a./.a/.a.
+/a./.a/.a/ /a./.a/.a
+/a./.a/..a /a./.a/..a
+/a./.a/... /a./.a/...
+/a./.a/../ /a.
+/a./.a/./a /a./.a/a
+/a./.a/./. /a./.a
+/a./.a/.// /a./.a
+/a./.a//aa /a./.a/aa
+/a./.a//a. /a./.a/a.
+/a./.a//a/ /a./.a/a
+/a./.a//.a /a./.a/.a
+/a./.a//.. /a.
+/a./.a//./ /a./.a
+/a./.a///a /a./.a/a
+/a./.a///. /a./.a
+/a./.a//// /a./.a
+/a./..aaaa /a./..aaaa
+/a./..aaa. /a./..aaa.
+/a./..aaa/ /a./..aaa
+/a./..aa.a /a./..aa.a
+/a./..aa.. /a./..aa..
+/a./..aa./ /a./..aa.
+/a./..aa/a /a./..aa/a
+/a./..aa/. /a./..aa
+/a./..aa// /a./..aa
+/a./..a.aa /a./..a.aa
+/a./..a.a. /a./..a.a.
+/a./..a.a/ /a./..a.a
+/a./..a..a /a./..a..a
+/a./..a... /a./..a...
+/a./..a../ /a./..a..
+/a./..a./a /a./..a./a
+/a./..a./. /a./..a.
+/a./..a.// /a./..a.
+/a./..a/aa /a./..a/aa
+/a./..a/a. /a./..a/a.
+/a./..a/a/ /a./..a/a
+/a./..a/.a /a./..a/.a
+/a./..a/.. /a.
+/a./..a/./ /a./..a
+/a./..a//a /a./..a/a
+/a./..a//. /a./..a
+/a./..a/// /a./..a
+/a./...aaa /a./...aaa
+/a./...aa. /a./...aa.
+/a./...aa/ /a./...aa
+/a./...a.a /a./...a.a
+/a./...a.. /a./...a..
+/a./...a./ /a./...a.
+/a./...a/a /a./...a/a
+/a./...a/. /a./...a
+/a./...a// /a./...a
+/a./....aa /a./....aa
+/a./....a. /a./....a.
+/a./....a/ /a./....a
+/a./.....a /a./.....a
+/a./...... /a./......
+/a./...../ /a./.....
+/a./..../a /a./..../a
+/a./..../. /a./....
+/a./....// /a./....
+/a./.../aa /a./.../aa
+/a./.../a. /a./.../a.
+/a./.../a/ /a./.../a
+/a./.../.a /a./.../.a
+/a./.../.. /a.
+/a./..././ /a./...
+/a./...//a /a./.../a
+/a./...//. /a./...
+/a./.../// /a./...
+/a./../aaa /aaa
+/a./../aa. /aa.
+/a./../aa/ /aa
+/a./../a.a /a.a
+/a./../a.. /a..
+/a./../a./ /a.
+/a./../a/a /a/a
+/a./../a/. /a
+/a./../a// /a
+/a./../.aa /.aa
+/a./../.a. /.a.
+/a./../.a/ /.a
+/a./../..a /..a
+/a./../... /...
+/a./../../ /
+/a./.././a /a
+/a./.././. /
+/a./../.// /
+/a./..//aa /aa
+/a./..//a. /a.
+/a./..//a/ /a
+/a./..//.a /.a
+/a./..//.. /
+/a./..//./ /
+/a./..///a /a
+/a./..///. /
+/a./..//// /
+/a././aaaa /a./aaaa
+/a././aaa. /a./aaa.
+/a././aaa/ /a./aaa
+/a././aa.a /a./aa.a
+/a././aa.. /a./aa..
+/a././aa./ /a./aa.
+/a././aa/a /a./aa/a
+/a././aa/. /a./aa
+/a././aa// /a./aa
+/a././a.aa /a./a.aa
+/a././a.a. /a./a.a.
+/a././a.a/ /a./a.a
+/a././a..a /a./a..a
+/a././a... /a./a...
+/a././a../ /a./a..
+/a././a./a /a./a./a
+/a././a./. /a./a.
+/a././a.// /a./a.
+/a././a/aa /a./a/aa
+/a././a/a. /a./a/a.
+/a././a/a/ /a./a/a
+/a././a/.a /a./a/.a
+/a././a/.. /a.
+/a././a/./ /a./a
+/a././a//a /a./a/a
+/a././a//. /a./a
+/a././a/// /a./a
+/a././.aaa /a./.aaa
+/a././.aa. /a./.aa.
+/a././.aa/ /a./.aa
+/a././.a.a /a./.a.a
+/a././.a.. /a./.a..
+/a././.a./ /a./.a.
+/a././.a/a /a./.a/a
+/a././.a/. /a./.a
+/a././.a// /a./.a
+/a././..aa /a./..aa
+/a././..a. /a./..a.
+/a././..a/ /a./..a
+/a././...a /a./...a
+/a././.... /a./....
+/a././.../ /a./...
+/a././../a /a
+/a././../. /
+/a././..// /
+/a./././aa /a./aa
+/a./././a. /a./a.
+/a./././a/ /a./a
+/a./././.a /a./.a
+/a./././.. /
+/a././././ /a.
+/a./././/a /a./a
+/a./././/. /a.
+/a./././// /a.
+/a././/aaa /a./aaa
+/a././/aa. /a./aa.
+/a././/aa/ /a./aa
+/a././/a.a /a./a.a
+/a././/a.. /a./a..
+/a././/a./ /a./a.
+/a././/a/a /a./a/a
+/a././/a/. /a./a
+/a././/a// /a./a
+/a././/.aa /a./.aa
+/a././/.a. /a./.a.
+/a././/.a/ /a./.a
+/a././/..a /a./..a
+/a././/... /a./...
+/a././/../ /
+/a././/./a /a./a
+/a././/./. /a.
+/a././/.// /a.
+/a././//aa /a./aa
+/a././//a. /a./a.
+/a././//a/ /a./a
+/a././//.a /a./.a
+/a././//.. /
+/a././//./ /a.
+/a././///a /a./a
+/a././///. /a.
+/a././//// /a.
+/a.//aaaaa /a./aaaaa
+/a.//aaaa. /a./aaaa.
+/a.//aaaa/ /a./aaaa
+/a.//aaa.a /a./aaa.a
+/a.//aaa.. /a./aaa..
+/a.//aaa./ /a./aaa.
+/a.//aaa/a /a./aaa/a
+/a.//aaa/. /a./aaa
+/a.//aaa// /a./aaa
+/a.//aa.aa /a./aa.aa
+/a.//aa.a. /a./aa.a.
+/a.//aa.a/ /a./aa.a
+/a.//aa..a /a./aa..a
+/a.//aa... /a./aa...
+/a.//aa../ /a./aa..
+/a.//aa./a /a./aa./a
+/a.//aa./. /a./aa.
+/a.//aa.// /a./aa.
+/a.//aa/aa /a./aa/aa
+/a.//aa/a. /a./aa/a.
+/a.//aa/a/ /a./aa/a
+/a.//aa/.a /a./aa/.a
+/a.//aa/.. /a.
+/a.//aa/./ /a./aa
+/a.//aa//a /a./aa/a
+/a.//aa//. /a./aa
+/a.//aa/// /a./aa
+/a.//a.aaa /a./a.aaa
+/a.//a.aa. /a./a.aa.
+/a.//a.aa/ /a./a.aa
+/a.//a.a.a /a./a.a.a
+/a.//a.a.. /a./a.a..
+/a.//a.a./ /a./a.a.
+/a.//a.a/a /a./a.a/a
+/a.//a.a/. /a./a.a
+/a.//a.a// /a./a.a
+/a.//a..aa /a./a..aa
+/a.//a..a. /a./a..a.
+/a.//a..a/ /a./a..a
+/a.//a...a /a./a...a
+/a.//a.... /a./a....
+/a.//a.../ /a./a...
+/a.//a../a /a./a../a
+/a.//a../. /a./a..
+/a.//a..// /a./a..
+/a.//a./aa /a./a./aa
+/a.//a./a. /a./a./a.
+/a.//a./a/ /a./a./a
+/a.//a./.a /a./a./.a
+/a.//a./.. /a.
+/a.//a././ /a./a.
+/a.//a.//a /a./a./a
+/a.//a.//. /a./a.
+/a.//a./// /a./a.
+/a.//a/aaa /a./a/aaa
+/a.//a/aa. /a./a/aa.
+/a.//a/aa/ /a./a/aa
+/a.//a/a.a /a./a/a.a
+/a.//a/a.. /a./a/a..
+/a.//a/a./ /a./a/a.
+/a.//a/a/a /a./a/a/a
+/a.//a/a/. /a./a/a
+/a.//a/a// /a./a/a
+/a.//a/.aa /a./a/.aa
+/a.//a/.a. /a./a/.a.
+/a.//a/.a/ /a./a/.a
+/a.//a/..a /a./a/..a
+/a.//a/... /a./a/...
+/a.//a/../ /a.
+/a.//a/./a /a./a/a
+/a.//a/./. /a./a
+/a.//a/.// /a./a
+/a.//a//aa /a./a/aa
+/a.//a//a. /a./a/a.
+/a.//a//a/ /a./a/a
+/a.//a//.a /a./a/.a
+/a.//a//.. /a.
+/a.//a//./ /a./a
+/a.//a///a /a./a/a
+/a.//a///. /a./a
+/a.//a//// /a./a
+/a.//.aaaa /a./.aaaa
+/a.//.aaa. /a./.aaa.
+/a.//.aaa/ /a./.aaa
+/a.//.aa.a /a./.aa.a
+/a.//.aa.. /a./.aa..
+/a.//.aa./ /a./.aa.
+/a.//.aa/a /a./.aa/a
+/a.//.aa/. /a./.aa
+/a.//.aa// /a./.aa
+/a.//.a.aa /a./.a.aa
+/a.//.a.a. /a./.a.a.
+/a.//.a.a/ /a./.a.a
+/a.//.a..a /a./.a..a
+/a.//.a... /a./.a...
+/a.//.a../ /a./.a..
+/a.//.a./a /a./.a./a
+/a.//.a./. /a./.a.
+/a.//.a.// /a./.a.
+/a.//.a/aa /a./.a/aa
+/a.//.a/a. /a./.a/a.
+/a.//.a/a/ /a./.a/a
+/a.//.a/.a /a./.a/.a
+/a.//.a/.. /a.
+/a.//.a/./ /a./.a
+/a.//.a//a /a./.a/a
+/a.//.a//. /a./.a
+/a.//.a/// /a./.a
+/a.//..aaa /a./..aaa
+/a.//..aa. /a./..aa.
+/a.//..aa/ /a./..aa
+/a.//..a.a /a./..a.a
+/a.//..a.. /a./..a..
+/a.//..a./ /a./..a.
+/a.//..a/a /a./..a/a
+/a.//..a/. /a./..a
+/a.//..a// /a./..a
+/a.//...aa /a./...aa
+/a.//...a. /a./...a.
+/a.//...a/ /a./...a
+/a.//....a /a./....a
+/a.//..... /a./.....
+/a.//..../ /a./....
+/a.//.../a /a./.../a
+/a.//.../. /a./...
+/a.//...// /a./...
+/a.//../aa /aa
+/a.//../a. /a.
+/a.//../a/ /a
+/a.//../.a /.a
+/a.//../.. /
+/a.//.././ /
+/a.//..//a /a
+/a.//..//. /
+/a.//../// /
+/a.//./aaa /a./aaa
+/a.//./aa. /a./aa.
+/a.//./aa/ /a./aa
+/a.//./a.a /a./a.a
+/a.//./a.. /a./a..
+/a.//./a./ /a./a.
+/a.//./a/a /a./a/a
+/a.//./a/. /a./a
+/a.//./a// /a./a
+/a.//./.aa /a./.aa
+/a.//./.a. /a./.a.
+/a.//./.a/ /a./.a
+/a.//./..a /a./..a
+/a.//./... /a./...
+/a.//./../ /
+/a.//././a /a./a
+/a.//././. /a.
+/a.//./.// /a.
+/a.//.//aa /a./aa
+/a.//.//a. /a./a.
+/a.//.//a/ /a./a
+/a.//.//.a /a./.a
+/a.//.//.. /
+/a.//.//./ /a.
+/a.//.///a /a./a
+/a.//.///. /a.
+/a.//.//// /a.
+/a.///aaaa /a./aaaa
+/a.///aaa. /a./aaa.
+/a.///aaa/ /a./aaa
+/a.///aa.a /a./aa.a
+/a.///aa.. /a./aa..
+/a.///aa./ /a./aa.
+/a.///aa/a /a./aa/a
+/a.///aa/. /a./aa
+/a.///aa// /a./aa
+/a.///a.aa /a./a.aa
+/a.///a.a. /a./a.a.
+/a.///a.a/ /a./a.a
+/a.///a..a /a./a..a
+/a.///a... /a./a...
+/a.///a../ /a./a..
+/a.///a./a /a./a./a
+/a.///a./. /a./a.
+/a.///a.// /a./a.
+/a.///a/aa /a./a/aa
+/a.///a/a. /a./a/a.
+/a.///a/a/ /a./a/a
+/a.///a/.a /a./a/.a
+/a.///a/.. /a.
+/a.///a/./ /a./a
+/a.///a//a /a./a/a
+/a.///a//. /a./a
+/a.///a/// /a./a
+/a.///.aaa /a./.aaa
+/a.///.aa. /a./.aa.
+/a.///.aa/ /a./.aa
+/a.///.a.a /a./.a.a
+/a.///.a.. /a./.a..
+/a.///.a./ /a./.a.
+/a.///.a/a /a./.a/a
+/a.///.a/. /a./.a
+/a.///.a// /a./.a
+/a.///..aa /a./..aa
+/a.///..a. /a./..a.
+/a.///..a/ /a./..a
+/a.///...a /a./...a
+/a.///.... /a./....
+/a.///.../ /a./...
+/a.///../a /a
+/a.///../. /
+/a.///..// /
+/a.///./aa /a./aa
+/a.///./a. /a./a.
+/a.///./a/ /a./a
+/a.///./.a /a./.a
+/a.///./.. /
+/a.///././ /a.
+/a.///.//a /a./a
+/a.///.//. /a.
+/a.///./// /a.
+/a.////aaa /a./aaa
+/a.////aa. /a./aa.
+/a.////aa/ /a./aa
+/a.////a.a /a./a.a
+/a.////a.. /a./a..
+/a.////a./ /a./a.
+/a.////a/a /a./a/a
+/a.////a/. /a./a
+/a.////a// /a./a
+/a.////.aa /a./.aa
+/a.////.a. /a./.a.
+/a.////.a/ /a./.a
+/a.////..a /a./..a
+/a.////... /a./...
+/a.////../ /
+/a.////./a /a./a
+/a.////./. /a.
+/a.////.// /a.
+/a./////aa /a./aa
+/a./////a. /a./a.
+/a./////a/ /a./a
+/a./////.a /a./.a
+/a./////.. /
+/a./////./ /a.
+/a.//////a /a./a
+/a.//////. /a.
+/a./////// /a.
+/a/aaaaaaa /a/aaaaaaa
+/a/aaaaaa. /a/aaaaaa.
+/a/aaaaaa/ /a/aaaaaa
+/a/aaaaa.a /a/aaaaa.a
+/a/aaaaa.. /a/aaaaa..
+/a/aaaaa./ /a/aaaaa.
+/a/aaaaa/a /a/aaaaa/a
+/a/aaaaa/. /a/aaaaa
+/a/aaaaa// /a/aaaaa
+/a/aaaa.aa /a/aaaa.aa
+/a/aaaa.a. /a/aaaa.a.
+/a/aaaa.a/ /a/aaaa.a
+/a/aaaa..a /a/aaaa..a
+/a/aaaa... /a/aaaa...
+/a/aaaa../ /a/aaaa..
+/a/aaaa./a /a/aaaa./a
+/a/aaaa./. /a/aaaa.
+/a/aaaa.// /a/aaaa.
+/a/aaaa/aa /a/aaaa/aa
+/a/aaaa/a. /a/aaaa/a.
+/a/aaaa/a/ /a/aaaa/a
+/a/aaaa/.a /a/aaaa/.a
+/a/aaaa/.. /a
+/a/aaaa/./ /a/aaaa
+/a/aaaa//a /a/aaaa/a
+/a/aaaa//. /a/aaaa
+/a/aaaa/// /a/aaaa
+/a/aaa.aaa /a/aaa.aaa
+/a/aaa.aa. /a/aaa.aa.
+/a/aaa.aa/ /a/aaa.aa
+/a/aaa.a.a /a/aaa.a.a
+/a/aaa.a.. /a/aaa.a..
+/a/aaa.a./ /a/aaa.a.
+/a/aaa.a/a /a/aaa.a/a
+/a/aaa.a/. /a/aaa.a
+/a/aaa.a// /a/aaa.a
+/a/aaa..aa /a/aaa..aa
+/a/aaa..a. /a/aaa..a.
+/a/aaa..a/ /a/aaa..a
+/a/aaa...a /a/aaa...a
+/a/aaa.... /a/aaa....
+/a/aaa.../ /a/aaa...
+/a/aaa../a /a/aaa../a
+/a/aaa../. /a/aaa..
+/a/aaa..// /a/aaa..
+/a/aaa./aa /a/aaa./aa
+/a/aaa./a. /a/aaa./a.
+/a/aaa./a/ /a/aaa./a
+/a/aaa./.a /a/aaa./.a
+/a/aaa./.. /a
+/a/aaa././ /a/aaa.
+/a/aaa.//a /a/aaa./a
+/a/aaa.//. /a/aaa.
+/a/aaa./// /a/aaa.
+/a/aaa/aaa /a/aaa/aaa
+/a/aaa/aa. /a/aaa/aa.
+/a/aaa/aa/ /a/aaa/aa
+/a/aaa/a.a /a/aaa/a.a
+/a/aaa/a.. /a/aaa/a..
+/a/aaa/a./ /a/aaa/a.
+/a/aaa/a/a /a/aaa/a/a
+/a/aaa/a/. /a/aaa/a
+/a/aaa/a// /a/aaa/a
+/a/aaa/.aa /a/aaa/.aa
+/a/aaa/.a. /a/aaa/.a.
+/a/aaa/.a/ /a/aaa/.a
+/a/aaa/..a /a/aaa/..a
+/a/aaa/... /a/aaa/...
+/a/aaa/../ /a
+/a/aaa/./a /a/aaa/a
+/a/aaa/./. /a/aaa
+/a/aaa/.// /a/aaa
+/a/aaa//aa /a/aaa/aa
+/a/aaa//a. /a/aaa/a.
+/a/aaa//a/ /a/aaa/a
+/a/aaa//.a /a/aaa/.a
+/a/aaa//.. /a
+/a/aaa//./ /a/aaa
+/a/aaa///a /a/aaa/a
+/a/aaa///. /a/aaa
+/a/aaa//// /a/aaa
+/a/aa.aaaa /a/aa.aaaa
+/a/aa.aaa. /a/aa.aaa.
+/a/aa.aaa/ /a/aa.aaa
+/a/aa.aa.a /a/aa.aa.a
+/a/aa.aa.. /a/aa.aa..
+/a/aa.aa./ /a/aa.aa.
+/a/aa.aa/a /a/aa.aa/a
+/a/aa.aa/. /a/aa.aa
+/a/aa.aa// /a/aa.aa
+/a/aa.a.aa /a/aa.a.aa
+/a/aa.a.a. /a/aa.a.a.
+/a/aa.a.a/ /a/aa.a.a
+/a/aa.a..a /a/aa.a..a
+/a/aa.a... /a/aa.a...
+/a/aa.a../ /a/aa.a..
+/a/aa.a./a /a/aa.a./a
+/a/aa.a./. /a/aa.a.
+/a/aa.a.// /a/aa.a.
+/a/aa.a/aa /a/aa.a/aa
+/a/aa.a/a. /a/aa.a/a.
+/a/aa.a/a/ /a/aa.a/a
+/a/aa.a/.a /a/aa.a/.a
+/a/aa.a/.. /a
+/a/aa.a/./ /a/aa.a
+/a/aa.a//a /a/aa.a/a
+/a/aa.a//. /a/aa.a
+/a/aa.a/// /a/aa.a
+/a/aa..aaa /a/aa..aaa
+/a/aa..aa. /a/aa..aa.
+/a/aa..aa/ /a/aa..aa
+/a/aa..a.a /a/aa..a.a
+/a/aa..a.. /a/aa..a..
+/a/aa..a./ /a/aa..a.
+/a/aa..a/a /a/aa..a/a
+/a/aa..a/. /a/aa..a
+/a/aa..a// /a/aa..a
+/a/aa...aa /a/aa...aa
+/a/aa...a. /a/aa...a.
+/a/aa...a/ /a/aa...a
+/a/aa....a /a/aa....a
+/a/aa..... /a/aa.....
+/a/aa..../ /a/aa....
+/a/aa.../a /a/aa.../a
+/a/aa.../. /a/aa...
+/a/aa...// /a/aa...
+/a/aa../aa /a/aa../aa
+/a/aa../a. /a/aa../a.
+/a/aa../a/ /a/aa../a
+/a/aa../.a /a/aa../.a
+/a/aa../.. /a
+/a/aa.././ /a/aa..
+/a/aa..//a /a/aa../a
+/a/aa..//. /a/aa..
+/a/aa../// /a/aa..
+/a/aa./aaa /a/aa./aaa
+/a/aa./aa. /a/aa./aa.
+/a/aa./aa/ /a/aa./aa
+/a/aa./a.a /a/aa./a.a
+/a/aa./a.. /a/aa./a..
+/a/aa./a./ /a/aa./a.
+/a/aa./a/a /a/aa./a/a
+/a/aa./a/. /a/aa./a
+/a/aa./a// /a/aa./a
+/a/aa./.aa /a/aa./.aa
+/a/aa./.a. /a/aa./.a.
+/a/aa./.a/ /a/aa./.a
+/a/aa./..a /a/aa./..a
+/a/aa./... /a/aa./...
+/a/aa./../ /a
+/a/aa././a /a/aa./a
+/a/aa././. /a/aa.
+/a/aa./.// /a/aa.
+/a/aa.//aa /a/aa./aa
+/a/aa.//a. /a/aa./a.
+/a/aa.//a/ /a/aa./a
+/a/aa.//.a /a/aa./.a
+/a/aa.//.. /a
+/a/aa.//./ /a/aa.
+/a/aa.///a /a/aa./a
+/a/aa.///. /a/aa.
+/a/aa.//// /a/aa.
+/a/aa/aaaa /a/aa/aaaa
+/a/aa/aaa. /a/aa/aaa.
+/a/aa/aaa/ /a/aa/aaa
+/a/aa/aa.a /a/aa/aa.a
+/a/aa/aa.. /a/aa/aa..
+/a/aa/aa./ /a/aa/aa.
+/a/aa/aa/a /a/aa/aa/a
+/a/aa/aa/. /a/aa/aa
+/a/aa/aa// /a/aa/aa
+/a/aa/a.aa /a/aa/a.aa
+/a/aa/a.a. /a/aa/a.a.
+/a/aa/a.a/ /a/aa/a.a
+/a/aa/a..a /a/aa/a..a
+/a/aa/a... /a/aa/a...
+/a/aa/a../ /a/aa/a..
+/a/aa/a./a /a/aa/a./a
+/a/aa/a./. /a/aa/a.
+/a/aa/a.// /a/aa/a.
+/a/aa/a/aa /a/aa/a/aa
+/a/aa/a/a. /a/aa/a/a.
+/a/aa/a/a/ /a/aa/a/a
+/a/aa/a/.a /a/aa/a/.a
+/a/aa/a/.. /a/aa
+/a/aa/a/./ /a/aa/a
+/a/aa/a//a /a/aa/a/a
+/a/aa/a//. /a/aa/a
+/a/aa/a/// /a/aa/a
+/a/aa/.aaa /a/aa/.aaa
+/a/aa/.aa. /a/aa/.aa.
+/a/aa/.aa/ /a/aa/.aa
+/a/aa/.a.a /a/aa/.a.a
+/a/aa/.a.. /a/aa/.a..
+/a/aa/.a./ /a/aa/.a.
+/a/aa/.a/a /a/aa/.a/a
+/a/aa/.a/. /a/aa/.a
+/a/aa/.a// /a/aa/.a
+/a/aa/..aa /a/aa/..aa
+/a/aa/..a. /a/aa/..a.
+/a/aa/..a/ /a/aa/..a
+/a/aa/...a /a/aa/...a
+/a/aa/.... /a/aa/....
+/a/aa/.../ /a/aa/...
+/a/aa/../a /a/a
+/a/aa/../. /a
+/a/aa/..// /a
+/a/aa/./aa /a/aa/aa
+/a/aa/./a. /a/aa/a.
+/a/aa/./a/ /a/aa/a
+/a/aa/./.a /a/aa/.a
+/a/aa/./.. /a
+/a/aa/././ /a/aa
+/a/aa/.//a /a/aa/a
+/a/aa/.//. /a/aa
+/a/aa/./// /a/aa
+/a/aa//aaa /a/aa/aaa
+/a/aa//aa. /a/aa/aa.
+/a/aa//aa/ /a/aa/aa
+/a/aa//a.a /a/aa/a.a
+/a/aa//a.. /a/aa/a..
+/a/aa//a./ /a/aa/a.
+/a/aa//a/a /a/aa/a/a
+/a/aa//a/. /a/aa/a
+/a/aa//a// /a/aa/a
+/a/aa//.aa /a/aa/.aa
+/a/aa//.a. /a/aa/.a.
+/a/aa//.a/ /a/aa/.a
+/a/aa//..a /a/aa/..a
+/a/aa//... /a/aa/...
+/a/aa//../ /a
+/a/aa//./a /a/aa/a
+/a/aa//./. /a/aa
+/a/aa//.// /a/aa
+/a/aa///aa /a/aa/aa
+/a/aa///a. /a/aa/a.
+/a/aa///a/ /a/aa/a
+/a/aa///.a /a/aa/.a
+/a/aa///.. /a
+/a/aa///./ /a/aa
+/a/aa////a /a/aa/a
+/a/aa////. /a/aa
+/a/aa///// /a/aa
+/a/a.aaaaa /a/a.aaaaa
+/a/a.aaaa. /a/a.aaaa.
+/a/a.aaaa/ /a/a.aaaa
+/a/a.aaa.a /a/a.aaa.a
+/a/a.aaa.. /a/a.aaa..
+/a/a.aaa./ /a/a.aaa.
+/a/a.aaa/a /a/a.aaa/a
+/a/a.aaa/. /a/a.aaa
+/a/a.aaa// /a/a.aaa
+/a/a.aa.aa /a/a.aa.aa
+/a/a.aa.a. /a/a.aa.a.
+/a/a.aa.a/ /a/a.aa.a
+/a/a.aa..a /a/a.aa..a
+/a/a.aa... /a/a.aa...
+/a/a.aa../ /a/a.aa..
+/a/a.aa./a /a/a.aa./a
+/a/a.aa./. /a/a.aa.
+/a/a.aa.// /a/a.aa.
+/a/a.aa/aa /a/a.aa/aa
+/a/a.aa/a. /a/a.aa/a.
+/a/a.aa/a/ /a/a.aa/a
+/a/a.aa/.a /a/a.aa/.a
+/a/a.aa/.. /a
+/a/a.aa/./ /a/a.aa
+/a/a.aa//a /a/a.aa/a
+/a/a.aa//. /a/a.aa
+/a/a.aa/// /a/a.aa
+/a/a.a.aaa /a/a.a.aaa
+/a/a.a.aa. /a/a.a.aa.
+/a/a.a.aa/ /a/a.a.aa
+/a/a.a.a.a /a/a.a.a.a
+/a/a.a.a.. /a/a.a.a..
+/a/a.a.a./ /a/a.a.a.
+/a/a.a.a/a /a/a.a.a/a
+/a/a.a.a/. /a/a.a.a
+/a/a.a.a// /a/a.a.a
+/a/a.a..aa /a/a.a..aa
+/a/a.a..a. /a/a.a..a.
+/a/a.a..a/ /a/a.a..a
+/a/a.a...a /a/a.a...a
+/a/a.a.... /a/a.a....
+/a/a.a.../ /a/a.a...
+/a/a.a../a /a/a.a../a
+/a/a.a../. /a/a.a..
+/a/a.a..// /a/a.a..
+/a/a.a./aa /a/a.a./aa
+/a/a.a./a. /a/a.a./a.
+/a/a.a./a/ /a/a.a./a
+/a/a.a./.a /a/a.a./.a
+/a/a.a./.. /a
+/a/a.a././ /a/a.a.
+/a/a.a.//a /a/a.a./a
+/a/a.a.//. /a/a.a.
+/a/a.a./// /a/a.a.
+/a/a.a/aaa /a/a.a/aaa
+/a/a.a/aa. /a/a.a/aa.
+/a/a.a/aa/ /a/a.a/aa
+/a/a.a/a.a /a/a.a/a.a
+/a/a.a/a.. /a/a.a/a..
+/a/a.a/a./ /a/a.a/a.
+/a/a.a/a/a /a/a.a/a/a
+/a/a.a/a/. /a/a.a/a
+/a/a.a/a// /a/a.a/a
+/a/a.a/.aa /a/a.a/.aa
+/a/a.a/.a. /a/a.a/.a.
+/a/a.a/.a/ /a/a.a/.a
+/a/a.a/..a /a/a.a/..a
+/a/a.a/... /a/a.a/...
+/a/a.a/../ /a
+/a/a.a/./a /a/a.a/a
+/a/a.a/./. /a/a.a
+/a/a.a/.// /a/a.a
+/a/a.a//aa /a/a.a/aa
+/a/a.a//a. /a/a.a/a.
+/a/a.a//a/ /a/a.a/a
+/a/a.a//.a /a/a.a/.a
+/a/a.a//.. /a
+/a/a.a//./ /a/a.a
+/a/a.a///a /a/a.a/a
+/a/a.a///. /a/a.a
+/a/a.a//// /a/a.a
+/a/a..aaaa /a/a..aaaa
+/a/a..aaa. /a/a..aaa.
+/a/a..aaa/ /a/a..aaa
+/a/a..aa.a /a/a..aa.a
+/a/a..aa.. /a/a..aa..
+/a/a..aa./ /a/a..aa.
+/a/a..aa/a /a/a..aa/a
+/a/a..aa/. /a/a..aa
+/a/a..aa// /a/a..aa
+/a/a..a.aa /a/a..a.aa
+/a/a..a.a. /a/a..a.a.
+/a/a..a.a/ /a/a..a.a
+/a/a..a..a /a/a..a..a
+/a/a..a... /a/a..a...
+/a/a..a../ /a/a..a..
+/a/a..a./a /a/a..a./a
+/a/a..a./. /a/a..a.
+/a/a..a.// /a/a..a.
+/a/a..a/aa /a/a..a/aa
+/a/a..a/a. /a/a..a/a.
+/a/a..a/a/ /a/a..a/a
+/a/a..a/.a /a/a..a/.a
+/a/a..a/.. /a
+/a/a..a/./ /a/a..a
+/a/a..a//a /a/a..a/a
+/a/a..a//. /a/a..a
+/a/a..a/// /a/a..a
+/a/a...aaa /a/a...aaa
+/a/a...aa. /a/a...aa.
+/a/a...aa/ /a/a...aa
+/a/a...a.a /a/a...a.a
+/a/a...a.. /a/a...a..
+/a/a...a./ /a/a...a.
+/a/a...a/a /a/a...a/a
+/a/a...a/. /a/a...a
+/a/a...a// /a/a...a
+/a/a....aa /a/a....aa
+/a/a....a. /a/a....a.
+/a/a....a/ /a/a....a
+/a/a.....a /a/a.....a
+/a/a...... /a/a......
+/a/a...../ /a/a.....
+/a/a..../a /a/a..../a
+/a/a..../. /a/a....
+/a/a....// /a/a....
+/a/a.../aa /a/a.../aa
+/a/a.../a. /a/a.../a.
+/a/a.../a/ /a/a.../a
+/a/a.../.a /a/a.../.a
+/a/a.../.. /a
+/a/a..././ /a/a...
+/a/a...//a /a/a.../a
+/a/a...//. /a/a...
+/a/a.../// /a/a...
+/a/a../aaa /a/a../aaa
+/a/a../aa. /a/a../aa.
+/a/a../aa/ /a/a../aa
+/a/a../a.a /a/a../a.a
+/a/a../a.. /a/a../a..
+/a/a../a./ /a/a../a.
+/a/a../a/a /a/a../a/a
+/a/a../a/. /a/a../a
+/a/a../a// /a/a../a
+/a/a../.aa /a/a../.aa
+/a/a../.a. /a/a../.a.
+/a/a../.a/ /a/a../.a
+/a/a../..a /a/a../..a
+/a/a../... /a/a../...
+/a/a../../ /a
+/a/a.././a /a/a../a
+/a/a.././. /a/a..
+/a/a../.// /a/a..
+/a/a..//aa /a/a../aa
+/a/a..//a. /a/a../a.
+/a/a..//a/ /a/a../a
+/a/a..//.a /a/a../.a
+/a/a..//.. /a
+/a/a..//./ /a/a..
+/a/a..///a /a/a../a
+/a/a..///. /a/a..
+/a/a..//// /a/a..
+/a/a./aaaa /a/a./aaaa
+/a/a./aaa. /a/a./aaa.
+/a/a./aaa/ /a/a./aaa
+/a/a./aa.a /a/a./aa.a
+/a/a./aa.. /a/a./aa..
+/a/a./aa./ /a/a./aa.
+/a/a./aa/a /a/a./aa/a
+/a/a./aa/. /a/a./aa
+/a/a./aa// /a/a./aa
+/a/a./a.aa /a/a./a.aa
+/a/a./a.a. /a/a./a.a.
+/a/a./a.a/ /a/a./a.a
+/a/a./a..a /a/a./a..a
+/a/a./a... /a/a./a...
+/a/a./a../ /a/a./a..
+/a/a./a./a /a/a./a./a
+/a/a./a./. /a/a./a.
+/a/a./a.// /a/a./a.
+/a/a./a/aa /a/a./a/aa
+/a/a./a/a. /a/a./a/a.
+/a/a./a/a/ /a/a./a/a
+/a/a./a/.a /a/a./a/.a
+/a/a./a/.. /a/a.
+/a/a./a/./ /a/a./a
+/a/a./a//a /a/a./a/a
+/a/a./a//. /a/a./a
+/a/a./a/// /a/a./a
+/a/a./.aaa /a/a./.aaa
+/a/a./.aa. /a/a./.aa.
+/a/a./.aa/ /a/a./.aa
+/a/a./.a.a /a/a./.a.a
+/a/a./.a.. /a/a./.a..
+/a/a./.a./ /a/a./.a.
+/a/a./.a/a /a/a./.a/a
+/a/a./.a/. /a/a./.a
+/a/a./.a// /a/a./.a
+/a/a./..aa /a/a./..aa
+/a/a./..a. /a/a./..a.
+/a/a./..a/ /a/a./..a
+/a/a./...a /a/a./...a
+/a/a./.... /a/a./....
+/a/a./.../ /a/a./...
+/a/a./../a /a/a
+/a/a./../. /a
+/a/a./..// /a
+/a/a././aa /a/a./aa
+/a/a././a. /a/a./a.
+/a/a././a/ /a/a./a
+/a/a././.a /a/a./.a
+/a/a././.. /a
+/a/a./././ /a/a.
+/a/a././/a /a/a./a
+/a/a././/. /a/a.
+/a/a././// /a/a.
+/a/a.//aaa /a/a./aaa
+/a/a.//aa. /a/a./aa.
+/a/a.//aa/ /a/a./aa
+/a/a.//a.a /a/a./a.a
+/a/a.//a.. /a/a./a..
+/a/a.//a./ /a/a./a.
+/a/a.//a/a /a/a./a/a
+/a/a.//a/. /a/a./a
+/a/a.//a// /a/a./a
+/a/a.//.aa /a/a./.aa
+/a/a.//.a. /a/a./.a.
+/a/a.//.a/ /a/a./.a
+/a/a.//..a /a/a./..a
+/a/a.//... /a/a./...
+/a/a.//../ /a
+/a/a.//./a /a/a./a
+/a/a.//./. /a/a.
+/a/a.//.// /a/a.
+/a/a.///aa /a/a./aa
+/a/a.///a. /a/a./a.
+/a/a.///a/ /a/a./a
+/a/a.///.a /a/a./.a
+/a/a.///.. /a
+/a/a.///./ /a/a.
+/a/a.////a /a/a./a
+/a/a.////. /a/a.
+/a/a.///// /a/a.
+/a/a/aaaaa /a/a/aaaaa
+/a/a/aaaa. /a/a/aaaa.
+/a/a/aaaa/ /a/a/aaaa
+/a/a/aaa.a /a/a/aaa.a
+/a/a/aaa.. /a/a/aaa..
+/a/a/aaa./ /a/a/aaa.
+/a/a/aaa/a /a/a/aaa/a
+/a/a/aaa/. /a/a/aaa
+/a/a/aaa// /a/a/aaa
+/a/a/aa.aa /a/a/aa.aa
+/a/a/aa.a. /a/a/aa.a.
+/a/a/aa.a/ /a/a/aa.a
+/a/a/aa..a /a/a/aa..a
+/a/a/aa... /a/a/aa...
+/a/a/aa../ /a/a/aa..
+/a/a/aa./a /a/a/aa./a
+/a/a/aa./. /a/a/aa.
+/a/a/aa.// /a/a/aa.
+/a/a/aa/aa /a/a/aa/aa
+/a/a/aa/a. /a/a/aa/a.
+/a/a/aa/a/ /a/a/aa/a
+/a/a/aa/.a /a/a/aa/.a
+/a/a/aa/.. /a/a
+/a/a/aa/./ /a/a/aa
+/a/a/aa//a /a/a/aa/a
+/a/a/aa//. /a/a/aa
+/a/a/aa/// /a/a/aa
+/a/a/a.aaa /a/a/a.aaa
+/a/a/a.aa. /a/a/a.aa.
+/a/a/a.aa/ /a/a/a.aa
+/a/a/a.a.a /a/a/a.a.a
+/a/a/a.a.. /a/a/a.a..
+/a/a/a.a./ /a/a/a.a.
+/a/a/a.a/a /a/a/a.a/a
+/a/a/a.a/. /a/a/a.a
+/a/a/a.a// /a/a/a.a
+/a/a/a..aa /a/a/a..aa
+/a/a/a..a. /a/a/a..a.
+/a/a/a..a/ /a/a/a..a
+/a/a/a...a /a/a/a...a
+/a/a/a.... /a/a/a....
+/a/a/a.../ /a/a/a...
+/a/a/a../a /a/a/a../a
+/a/a/a../. /a/a/a..
+/a/a/a..// /a/a/a..
+/a/a/a./aa /a/a/a./aa
+/a/a/a./a. /a/a/a./a.
+/a/a/a./a/ /a/a/a./a
+/a/a/a./.a /a/a/a./.a
+/a/a/a./.. /a/a
+/a/a/a././ /a/a/a.
+/a/a/a.//a /a/a/a./a
+/a/a/a.//. /a/a/a.
+/a/a/a./// /a/a/a.
+/a/a/a/aaa /a/a/a/aaa
+/a/a/a/aa. /a/a/a/aa.
+/a/a/a/aa/ /a/a/a/aa
+/a/a/a/a.a /a/a/a/a.a
+/a/a/a/a.. /a/a/a/a..
+/a/a/a/a./ /a/a/a/a.
+/a/a/a/a/a /a/a/a/a/a
+/a/a/a/a/. /a/a/a/a
+/a/a/a/a// /a/a/a/a
+/a/a/a/.aa /a/a/a/.aa
+/a/a/a/.a. /a/a/a/.a.
+/a/a/a/.a/ /a/a/a/.a
+/a/a/a/..a /a/a/a/..a
+/a/a/a/... /a/a/a/...
+/a/a/a/../ /a/a
+/a/a/a/./a /a/a/a/a
+/a/a/a/./. /a/a/a
+/a/a/a/.// /a/a/a
+/a/a/a//aa /a/a/a/aa
+/a/a/a//a. /a/a/a/a.
+/a/a/a//a/ /a/a/a/a
+/a/a/a//.a /a/a/a/.a
+/a/a/a//.. /a/a
+/a/a/a//./ /a/a/a
+/a/a/a///a /a/a/a/a
+/a/a/a///. /a/a/a
+/a/a/a//// /a/a/a
+/a/a/.aaaa /a/a/.aaaa
+/a/a/.aaa. /a/a/.aaa.
+/a/a/.aaa/ /a/a/.aaa
+/a/a/.aa.a /a/a/.aa.a
+/a/a/.aa.. /a/a/.aa..
+/a/a/.aa./ /a/a/.aa.
+/a/a/.aa/a /a/a/.aa/a
+/a/a/.aa/. /a/a/.aa
+/a/a/.aa// /a/a/.aa
+/a/a/.a.aa /a/a/.a.aa
+/a/a/.a.a. /a/a/.a.a.
+/a/a/.a.a/ /a/a/.a.a
+/a/a/.a..a /a/a/.a..a
+/a/a/.a... /a/a/.a...
+/a/a/.a../ /a/a/.a..
+/a/a/.a./a /a/a/.a./a
+/a/a/.a./. /a/a/.a.
+/a/a/.a.// /a/a/.a.
+/a/a/.a/aa /a/a/.a/aa
+/a/a/.a/a. /a/a/.a/a.
+/a/a/.a/a/ /a/a/.a/a
+/a/a/.a/.a /a/a/.a/.a
+/a/a/.a/.. /a/a
+/a/a/.a/./ /a/a/.a
+/a/a/.a//a /a/a/.a/a
+/a/a/.a//. /a/a/.a
+/a/a/.a/// /a/a/.a
+/a/a/..aaa /a/a/..aaa
+/a/a/..aa. /a/a/..aa.
+/a/a/..aa/ /a/a/..aa
+/a/a/..a.a /a/a/..a.a
+/a/a/..a.. /a/a/..a..
+/a/a/..a./ /a/a/..a.
+/a/a/..a/a /a/a/..a/a
+/a/a/..a/. /a/a/..a
+/a/a/..a// /a/a/..a
+/a/a/...aa /a/a/...aa
+/a/a/...a. /a/a/...a.
+/a/a/...a/ /a/a/...a
+/a/a/....a /a/a/....a
+/a/a/..... /a/a/.....
+/a/a/..../ /a/a/....
+/a/a/.../a /a/a/.../a
+/a/a/.../. /a/a/...
+/a/a/...// /a/a/...
+/a/a/../aa /a/aa
+/a/a/../a. /a/a.
+/a/a/../a/ /a/a
+/a/a/../.a /a/.a
+/a/a/../.. /
+/a/a/.././ /a
+/a/a/..//a /a/a
+/a/a/..//. /a
+/a/a/../// /a
+/a/a/./aaa /a/a/aaa
+/a/a/./aa. /a/a/aa.
+/a/a/./aa/ /a/a/aa
+/a/a/./a.a /a/a/a.a
+/a/a/./a.. /a/a/a..
+/a/a/./a./ /a/a/a.
+/a/a/./a/a /a/a/a/a
+/a/a/./a/. /a/a/a
+/a/a/./a// /a/a/a
+/a/a/./.aa /a/a/.aa
+/a/a/./.a. /a/a/.a.
+/a/a/./.a/ /a/a/.a
+/a/a/./..a /a/a/..a
+/a/a/./... /a/a/...
+/a/a/./../ /a
+/a/a/././a /a/a/a
+/a/a/././. /a/a
+/a/a/./.// /a/a
+/a/a/.//aa /a/a/aa
+/a/a/.//a. /a/a/a.
+/a/a/.//a/ /a/a/a
+/a/a/.//.a /a/a/.a
+/a/a/.//.. /a
+/a/a/.//./ /a/a
+/a/a/.///a /a/a/a
+/a/a/.///. /a/a
+/a/a/.//// /a/a
+/a/a//aaaa /a/a/aaaa
+/a/a//aaa. /a/a/aaa.
+/a/a//aaa/ /a/a/aaa
+/a/a//aa.a /a/a/aa.a
+/a/a//aa.. /a/a/aa..
+/a/a//aa./ /a/a/aa.
+/a/a//aa/a /a/a/aa/a
+/a/a//aa/. /a/a/aa
+/a/a//aa// /a/a/aa
+/a/a//a.aa /a/a/a.aa
+/a/a//a.a. /a/a/a.a.
+/a/a//a.a/ /a/a/a.a
+/a/a//a..a /a/a/a..a
+/a/a//a... /a/a/a...
+/a/a//a../ /a/a/a..
+/a/a//a./a /a/a/a./a
+/a/a//a./. /a/a/a.
+/a/a//a.// /a/a/a.
+/a/a//a/aa /a/a/a/aa
+/a/a//a/a. /a/a/a/a.
+/a/a//a/a/ /a/a/a/a
+/a/a//a/.a /a/a/a/.a
+/a/a//a/.. /a/a
+/a/a//a/./ /a/a/a
+/a/a//a//a /a/a/a/a
+/a/a//a//. /a/a/a
+/a/a//a/// /a/a/a
+/a/a//.aaa /a/a/.aaa
+/a/a//.aa. /a/a/.aa.
+/a/a//.aa/ /a/a/.aa
+/a/a//.a.a /a/a/.a.a
+/a/a//.a.. /a/a/.a..
+/a/a//.a./ /a/a/.a.
+/a/a//.a/a /a/a/.a/a
+/a/a//.a/. /a/a/.a
+/a/a//.a// /a/a/.a
+/a/a//..aa /a/a/..aa
+/a/a//..a. /a/a/..a.
+/a/a//..a/ /a/a/..a
+/a/a//...a /a/a/...a
+/a/a//.... /a/a/....
+/a/a//.../ /a/a/...
+/a/a//../a /a/a
+/a/a//../. /a
+/a/a//..// /a
+/a/a//./aa /a/a/aa
+/a/a//./a. /a/a/a.
+/a/a//./a/ /a/a/a
+/a/a//./.a /a/a/.a
+/a/a//./.. /a
+/a/a//././ /a/a
+/a/a//.//a /a/a/a
+/a/a//.//. /a/a
+/a/a//./// /a/a
+/a/a///aaa /a/a/aaa
+/a/a///aa. /a/a/aa.
+/a/a///aa/ /a/a/aa
+/a/a///a.a /a/a/a.a
+/a/a///a.. /a/a/a..
+/a/a///a./ /a/a/a.
+/a/a///a/a /a/a/a/a
+/a/a///a/. /a/a/a
+/a/a///a// /a/a/a
+/a/a///.aa /a/a/.aa
+/a/a///.a. /a/a/.a.
+/a/a///.a/ /a/a/.a
+/a/a///..a /a/a/..a
+/a/a///... /a/a/...
+/a/a///../ /a
+/a/a///./a /a/a/a
+/a/a///./. /a/a
+/a/a///.// /a/a
+/a/a////aa /a/a/aa
+/a/a////a. /a/a/a.
+/a/a////a/ /a/a/a
+/a/a////.a /a/a/.a
+/a/a////.. /a
+/a/a////./ /a/a
+/a/a/////a /a/a/a
+/a/a/////. /a/a
+/a/a////// /a/a
+/a/.aaaaaa /a/.aaaaaa
+/a/.aaaaa. /a/.aaaaa.
+/a/.aaaaa/ /a/.aaaaa
+/a/.aaaa.a /a/.aaaa.a
+/a/.aaaa.. /a/.aaaa..
+/a/.aaaa./ /a/.aaaa.
+/a/.aaaa/a /a/.aaaa/a
+/a/.aaaa/. /a/.aaaa
+/a/.aaaa// /a/.aaaa
+/a/.aaa.aa /a/.aaa.aa
+/a/.aaa.a. /a/.aaa.a.
+/a/.aaa.a/ /a/.aaa.a
+/a/.aaa..a /a/.aaa..a
+/a/.aaa... /a/.aaa...
+/a/.aaa../ /a/.aaa..
+/a/.aaa./a /a/.aaa./a
+/a/.aaa./. /a/.aaa.
+/a/.aaa.// /a/.aaa.
+/a/.aaa/aa /a/.aaa/aa
+/a/.aaa/a. /a/.aaa/a.
+/a/.aaa/a/ /a/.aaa/a
+/a/.aaa/.a /a/.aaa/.a
+/a/.aaa/.. /a
+/a/.aaa/./ /a/.aaa
+/a/.aaa//a /a/.aaa/a
+/a/.aaa//. /a/.aaa
+/a/.aaa/// /a/.aaa
+/a/.aa.aaa /a/.aa.aaa
+/a/.aa.aa. /a/.aa.aa.
+/a/.aa.aa/ /a/.aa.aa
+/a/.aa.a.a /a/.aa.a.a
+/a/.aa.a.. /a/.aa.a..
+/a/.aa.a./ /a/.aa.a.
+/a/.aa.a/a /a/.aa.a/a
+/a/.aa.a/. /a/.aa.a
+/a/.aa.a// /a/.aa.a
+/a/.aa..aa /a/.aa..aa
+/a/.aa..a. /a/.aa..a.
+/a/.aa..a/ /a/.aa..a
+/a/.aa...a /a/.aa...a
+/a/.aa.... /a/.aa....
+/a/.aa.../ /a/.aa...
+/a/.aa../a /a/.aa../a
+/a/.aa../. /a/.aa..
+/a/.aa..// /a/.aa..
+/a/.aa./aa /a/.aa./aa
+/a/.aa./a. /a/.aa./a.
+/a/.aa./a/ /a/.aa./a
+/a/.aa./.a /a/.aa./.a
+/a/.aa./.. /a
+/a/.aa././ /a/.aa.
+/a/.aa.//a /a/.aa./a
+/a/.aa.//. /a/.aa.
+/a/.aa./// /a/.aa.
+/a/.aa/aaa /a/.aa/aaa
+/a/.aa/aa. /a/.aa/aa.
+/a/.aa/aa/ /a/.aa/aa
+/a/.aa/a.a /a/.aa/a.a
+/a/.aa/a.. /a/.aa/a..
+/a/.aa/a./ /a/.aa/a.
+/a/.aa/a/a /a/.aa/a/a
+/a/.aa/a/. /a/.aa/a
+/a/.aa/a// /a/.aa/a
+/a/.aa/.aa /a/.aa/.aa
+/a/.aa/.a. /a/.aa/.a.
+/a/.aa/.a/ /a/.aa/.a
+/a/.aa/..a /a/.aa/..a
+/a/.aa/... /a/.aa/...
+/a/.aa/../ /a
+/a/.aa/./a /a/.aa/a
+/a/.aa/./. /a/.aa
+/a/.aa/.// /a/.aa
+/a/.aa//aa /a/.aa/aa
+/a/.aa//a. /a/.aa/a.
+/a/.aa//a/ /a/.aa/a
+/a/.aa//.a /a/.aa/.a
+/a/.aa//.. /a
+/a/.aa//./ /a/.aa
+/a/.aa///a /a/.aa/a
+/a/.aa///. /a/.aa
+/a/.aa//// /a/.aa
+/a/.a.aaaa /a/.a.aaaa
+/a/.a.aaa. /a/.a.aaa.
+/a/.a.aaa/ /a/.a.aaa
+/a/.a.aa.a /a/.a.aa.a
+/a/.a.aa.. /a/.a.aa..
+/a/.a.aa./ /a/.a.aa.
+/a/.a.aa/a /a/.a.aa/a
+/a/.a.aa/. /a/.a.aa
+/a/.a.aa// /a/.a.aa
+/a/.a.a.aa /a/.a.a.aa
+/a/.a.a.a. /a/.a.a.a.
+/a/.a.a.a/ /a/.a.a.a
+/a/.a.a..a /a/.a.a..a
+/a/.a.a... /a/.a.a...
+/a/.a.a../ /a/.a.a..
+/a/.a.a./a /a/.a.a./a
+/a/.a.a./. /a/.a.a.
+/a/.a.a.// /a/.a.a.
+/a/.a.a/aa /a/.a.a/aa
+/a/.a.a/a. /a/.a.a/a.
+/a/.a.a/a/ /a/.a.a/a
+/a/.a.a/.a /a/.a.a/.a
+/a/.a.a/.. /a
+/a/.a.a/./ /a/.a.a
+/a/.a.a//a /a/.a.a/a
+/a/.a.a//. /a/.a.a
+/a/.a.a/// /a/.a.a
+/a/.a..aaa /a/.a..aaa
+/a/.a..aa. /a/.a..aa.
+/a/.a..aa/ /a/.a..aa
+/a/.a..a.a /a/.a..a.a
+/a/.a..a.. /a/.a..a..
+/a/.a..a./ /a/.a..a.
+/a/.a..a/a /a/.a..a/a
+/a/.a..a/. /a/.a..a
+/a/.a..a// /a/.a..a
+/a/.a...aa /a/.a...aa
+/a/.a...a. /a/.a...a.
+/a/.a...a/ /a/.a...a
+/a/.a....a /a/.a....a
+/a/.a..... /a/.a.....
+/a/.a..../ /a/.a....
+/a/.a.../a /a/.a.../a
+/a/.a.../. /a/.a...
+/a/.a...// /a/.a...
+/a/.a../aa /a/.a../aa
+/a/.a../a. /a/.a../a.
+/a/.a../a/ /a/.a../a
+/a/.a../.a /a/.a../.a
+/a/.a../.. /a
+/a/.a.././ /a/.a..
+/a/.a..//a /a/.a../a
+/a/.a..//. /a/.a..
+/a/.a../// /a/.a..
+/a/.a./aaa /a/.a./aaa
+/a/.a./aa. /a/.a./aa.
+/a/.a./aa/ /a/.a./aa
+/a/.a./a.a /a/.a./a.a
+/a/.a./a.. /a/.a./a..
+/a/.a./a./ /a/.a./a.
+/a/.a./a/a /a/.a./a/a
+/a/.a./a/. /a/.a./a
+/a/.a./a// /a/.a./a
+/a/.a./.aa /a/.a./.aa
+/a/.a./.a. /a/.a./.a.
+/a/.a./.a/ /a/.a./.a
+/a/.a./..a /a/.a./..a
+/a/.a./... /a/.a./...
+/a/.a./../ /a
+/a/.a././a /a/.a./a
+/a/.a././. /a/.a.
+/a/.a./.// /a/.a.
+/a/.a.//aa /a/.a./aa
+/a/.a.//a. /a/.a./a.
+/a/.a.//a/ /a/.a./a
+/a/.a.//.a /a/.a./.a
+/a/.a.//.. /a
+/a/.a.//./ /a/.a.
+/a/.a.///a /a/.a./a
+/a/.a.///. /a/.a.
+/a/.a.//// /a/.a.
+/a/.a/aaaa /a/.a/aaaa
+/a/.a/aaa. /a/.a/aaa.
+/a/.a/aaa/ /a/.a/aaa
+/a/.a/aa.a /a/.a/aa.a
+/a/.a/aa.. /a/.a/aa..
+/a/.a/aa./ /a/.a/aa.
+/a/.a/aa/a /a/.a/aa/a
+/a/.a/aa/. /a/.a/aa
+/a/.a/aa// /a/.a/aa
+/a/.a/a.aa /a/.a/a.aa
+/a/.a/a.a. /a/.a/a.a.
+/a/.a/a.a/ /a/.a/a.a
+/a/.a/a..a /a/.a/a..a
+/a/.a/a... /a/.a/a...
+/a/.a/a../ /a/.a/a..
+/a/.a/a./a /a/.a/a./a
+/a/.a/a./. /a/.a/a.
+/a/.a/a.// /a/.a/a.
+/a/.a/a/aa /a/.a/a/aa
+/a/.a/a/a. /a/.a/a/a.
+/a/.a/a/a/ /a/.a/a/a
+/a/.a/a/.a /a/.a/a/.a
+/a/.a/a/.. /a/.a
+/a/.a/a/./ /a/.a/a
+/a/.a/a//a /a/.a/a/a
+/a/.a/a//. /a/.a/a
+/a/.a/a/// /a/.a/a
+/a/.a/.aaa /a/.a/.aaa
+/a/.a/.aa. /a/.a/.aa.
+/a/.a/.aa/ /a/.a/.aa
+/a/.a/.a.a /a/.a/.a.a
+/a/.a/.a.. /a/.a/.a..
+/a/.a/.a./ /a/.a/.a.
+/a/.a/.a/a /a/.a/.a/a
+/a/.a/.a/. /a/.a/.a
+/a/.a/.a// /a/.a/.a
+/a/.a/..aa /a/.a/..aa
+/a/.a/..a. /a/.a/..a.
+/a/.a/..a/ /a/.a/..a
+/a/.a/...a /a/.a/...a
+/a/.a/.... /a/.a/....
+/a/.a/.../ /a/.a/...
+/a/.a/../a /a/a
+/a/.a/../. /a
+/a/.a/..// /a
+/a/.a/./aa /a/.a/aa
+/a/.a/./a. /a/.a/a.
+/a/.a/./a/ /a/.a/a
+/a/.a/./.a /a/.a/.a
+/a/.a/./.. /a
+/a/.a/././ /a/.a
+/a/.a/.//a /a/.a/a
+/a/.a/.//. /a/.a
+/a/.a/./// /a/.a
+/a/.a//aaa /a/.a/aaa
+/a/.a//aa. /a/.a/aa.
+/a/.a//aa/ /a/.a/aa
+/a/.a//a.a /a/.a/a.a
+/a/.a//a.. /a/.a/a..
+/a/.a//a./ /a/.a/a.
+/a/.a//a/a /a/.a/a/a
+/a/.a//a/. /a/.a/a
+/a/.a//a// /a/.a/a
+/a/.a//.aa /a/.a/.aa
+/a/.a//.a. /a/.a/.a.
+/a/.a//.a/ /a/.a/.a
+/a/.a//..a /a/.a/..a
+/a/.a//... /a/.a/...
+/a/.a//../ /a
+/a/.a//./a /a/.a/a
+/a/.a//./. /a/.a
+/a/.a//.// /a/.a
+/a/.a///aa /a/.a/aa
+/a/.a///a. /a/.a/a.
+/a/.a///a/ /a/.a/a
+/a/.a///.a /a/.a/.a
+/a/.a///.. /a
+/a/.a///./ /a/.a
+/a/.a////a /a/.a/a
+/a/.a////. /a/.a
+/a/.a///// /a/.a
+/a/..aaaaa /a/..aaaaa
+/a/..aaaa. /a/..aaaa.
+/a/..aaaa/ /a/..aaaa
+/a/..aaa.a /a/..aaa.a
+/a/..aaa.. /a/..aaa..
+/a/..aaa./ /a/..aaa.
+/a/..aaa/a /a/..aaa/a
+/a/..aaa/. /a/..aaa
+/a/..aaa// /a/..aaa
+/a/..aa.aa /a/..aa.aa
+/a/..aa.a. /a/..aa.a.
+/a/..aa.a/ /a/..aa.a
+/a/..aa..a /a/..aa..a
+/a/..aa... /a/..aa...
+/a/..aa../ /a/..aa..
+/a/..aa./a /a/..aa./a
+/a/..aa./. /a/..aa.
+/a/..aa.// /a/..aa.
+/a/..aa/aa /a/..aa/aa
+/a/..aa/a. /a/..aa/a.
+/a/..aa/a/ /a/..aa/a
+/a/..aa/.a /a/..aa/.a
+/a/..aa/.. /a
+/a/..aa/./ /a/..aa
+/a/..aa//a /a/..aa/a
+/a/..aa//. /a/..aa
+/a/..aa/// /a/..aa
+/a/..a.aaa /a/..a.aaa
+/a/..a.aa. /a/..a.aa.
+/a/..a.aa/ /a/..a.aa
+/a/..a.a.a /a/..a.a.a
+/a/..a.a.. /a/..a.a..
+/a/..a.a./ /a/..a.a.
+/a/..a.a/a /a/..a.a/a
+/a/..a.a/. /a/..a.a
+/a/..a.a// /a/..a.a
+/a/..a..aa /a/..a..aa
+/a/..a..a. /a/..a..a.
+/a/..a..a/ /a/..a..a
+/a/..a...a /a/..a...a
+/a/..a.... /a/..a....
+/a/..a.../ /a/..a...
+/a/..a../a /a/..a../a
+/a/..a../. /a/..a..
+/a/..a..// /a/..a..
+/a/..a./aa /a/..a./aa
+/a/..a./a. /a/..a./a.
+/a/..a./a/ /a/..a./a
+/a/..a./.a /a/..a./.a
+/a/..a./.. /a
+/a/..a././ /a/..a.
+/a/..a.//a /a/..a./a
+/a/..a.//. /a/..a.
+/a/..a./// /a/..a.
+/a/..a/aaa /a/..a/aaa
+/a/..a/aa. /a/..a/aa.
+/a/..a/aa/ /a/..a/aa
+/a/..a/a.a /a/..a/a.a
+/a/..a/a.. /a/..a/a..
+/a/..a/a./ /a/..a/a.
+/a/..a/a/a /a/..a/a/a
+/a/..a/a/. /a/..a/a
+/a/..a/a// /a/..a/a
+/a/..a/.aa /a/..a/.aa
+/a/..a/.a. /a/..a/.a.
+/a/..a/.a/ /a/..a/.a
+/a/..a/..a /a/..a/..a
+/a/..a/... /a/..a/...
+/a/..a/../ /a
+/a/..a/./a /a/..a/a
+/a/..a/./. /a/..a
+/a/..a/.// /a/..a
+/a/..a//aa /a/..a/aa
+/a/..a//a. /a/..a/a.
+/a/..a//a/ /a/..a/a
+/a/..a//.a /a/..a/.a
+/a/..a//.. /a
+/a/..a//./ /a/..a
+/a/..a///a /a/..a/a
+/a/..a///. /a/..a
+/a/..a//// /a/..a
+/a/...aaaa /a/...aaaa
+/a/...aaa. /a/...aaa.
+/a/...aaa/ /a/...aaa
+/a/...aa.a /a/...aa.a
+/a/...aa.. /a/...aa..
+/a/...aa./ /a/...aa.
+/a/...aa/a /a/...aa/a
+/a/...aa/. /a/...aa
+/a/...aa// /a/...aa
+/a/...a.aa /a/...a.aa
+/a/...a.a. /a/...a.a.
+/a/...a.a/ /a/...a.a
+/a/...a..a /a/...a..a
+/a/...a... /a/...a...
+/a/...a../ /a/...a..
+/a/...a./a /a/...a./a
+/a/...a./. /a/...a.
+/a/...a.// /a/...a.
+/a/...a/aa /a/...a/aa
+/a/...a/a. /a/...a/a.
+/a/...a/a/ /a/...a/a
+/a/...a/.a /a/...a/.a
+/a/...a/.. /a
+/a/...a/./ /a/...a
+/a/...a//a /a/...a/a
+/a/...a//. /a/...a
+/a/...a/// /a/...a
+/a/....aaa /a/....aaa
+/a/....aa. /a/....aa.
+/a/....aa/ /a/....aa
+/a/....a.a /a/....a.a
+/a/....a.. /a/....a..
+/a/....a./ /a/....a.
+/a/....a/a /a/....a/a
+/a/....a/. /a/....a
+/a/....a// /a/....a
+/a/.....aa /a/.....aa
+/a/.....a. /a/.....a.
+/a/.....a/ /a/.....a
+/a/......a /a/......a
+/a/....... /a/.......
+/a/....../ /a/......
+/a/...../a /a/...../a
+/a/...../. /a/.....
+/a/.....// /a/.....
+/a/..../aa /a/..../aa
+/a/..../a. /a/..../a.
+/a/..../a/ /a/..../a
+/a/..../.a /a/..../.a
+/a/..../.. /a
+/a/...././ /a/....
+/a/....//a /a/..../a
+/a/....//. /a/....
+/a/..../// /a/....
+/a/.../aaa /a/.../aaa
+/a/.../aa. /a/.../aa.
+/a/.../aa/ /a/.../aa
+/a/.../a.a /a/.../a.a
+/a/.../a.. /a/.../a..
+/a/.../a./ /a/.../a.
+/a/.../a/a /a/.../a/a
+/a/.../a/. /a/.../a
+/a/.../a// /a/.../a
+/a/.../.aa /a/.../.aa
+/a/.../.a. /a/.../.a.
+/a/.../.a/ /a/.../.a
+/a/.../..a /a/.../..a
+/a/.../... /a/.../...
+/a/.../../ /a
+/a/..././a /a/.../a
+/a/..././. /a/...
+/a/.../.// /a/...
+/a/...//aa /a/.../aa
+/a/...//a. /a/.../a.
+/a/...//a/ /a/.../a
+/a/...//.a /a/.../.a
+/a/...//.. /a
+/a/...//./ /a/...
+/a/...///a /a/.../a
+/a/...///. /a/...
+/a/...//// /a/...
+/a/../aaaa /aaaa
+/a/../aaa. /aaa.
+/a/../aaa/ /aaa
+/a/../aa.a /aa.a
+/a/../aa.. /aa..
+/a/../aa./ /aa.
+/a/../aa/a /aa/a
+/a/../aa/. /aa
+/a/../aa// /aa
+/a/../a.aa /a.aa
+/a/../a.a. /a.a.
+/a/../a.a/ /a.a
+/a/../a..a /a..a
+/a/../a... /a...
+/a/../a../ /a..
+/a/../a./a /a./a
+/a/../a./. /a.
+/a/../a.// /a.
+/a/../a/aa /a/aa
+/a/../a/a. /a/a.
+/a/../a/a/ /a/a
+/a/../a/.a /a/.a
+/a/../a/.. /
+/a/../a/./ /a
+/a/../a//a /a/a
+/a/../a//. /a
+/a/../a/// /a
+/a/../.aaa /.aaa
+/a/../.aa. /.aa.
+/a/../.aa/ /.aa
+/a/../.a.a /.a.a
+/a/../.a.. /.a..
+/a/../.a./ /.a.
+/a/../.a/a /.a/a
+/a/../.a/. /.a
+/a/../.a// /.a
+/a/../..aa /..aa
+/a/../..a. /..a.
+/a/../..a/ /..a
+/a/../...a /...a
+/a/../.... /....
+/a/../.../ /...
+/a/../../a /a
+/a/../../. /
+/a/../..// /
+/a/.././aa /aa
+/a/.././a. /a.
+/a/.././a/ /a
+/a/.././.a /.a
+/a/.././.. /
+/a/../././ /
+/a/.././/a /a
+/a/.././/. /
+/a/.././// /
+/a/..//aaa /aaa
+/a/..//aa. /aa.
+/a/..//aa/ /aa
+/a/..//a.a /a.a
+/a/..//a.. /a..
+/a/..//a./ /a.
+/a/..//a/a /a/a
+/a/..//a/. /a
+/a/..//a// /a
+/a/..//.aa /.aa
+/a/..//.a. /.a.
+/a/..//.a/ /.a
+/a/..//..a /..a
+/a/..//... /...
+/a/..//../ /
+/a/..//./a /a
+/a/..//./. /
+/a/..//.// /
+/a/..///aa /aa
+/a/..///a. /a.
+/a/..///a/ /a
+/a/..///.a /.a
+/a/..///.. /
+/a/..///./ /
+/a/..////a /a
+/a/..////. /
+/a/..///// /
+/a/./aaaaa /a/aaaaa
+/a/./aaaa. /a/aaaa.
+/a/./aaaa/ /a/aaaa
+/a/./aaa.a /a/aaa.a
+/a/./aaa.. /a/aaa..
+/a/./aaa./ /a/aaa.
+/a/./aaa/a /a/aaa/a
+/a/./aaa/. /a/aaa
+/a/./aaa// /a/aaa
+/a/./aa.aa /a/aa.aa
+/a/./aa.a. /a/aa.a.
+/a/./aa.a/ /a/aa.a
+/a/./aa..a /a/aa..a
+/a/./aa... /a/aa...
+/a/./aa../ /a/aa..
+/a/./aa./a /a/aa./a
+/a/./aa./. /a/aa.
+/a/./aa.// /a/aa.
+/a/./aa/aa /a/aa/aa
+/a/./aa/a. /a/aa/a.
+/a/./aa/a/ /a/aa/a
+/a/./aa/.a /a/aa/.a
+/a/./aa/.. /a
+/a/./aa/./ /a/aa
+/a/./aa//a /a/aa/a
+/a/./aa//. /a/aa
+/a/./aa/// /a/aa
+/a/./a.aaa /a/a.aaa
+/a/./a.aa. /a/a.aa.
+/a/./a.aa/ /a/a.aa
+/a/./a.a.a /a/a.a.a
+/a/./a.a.. /a/a.a..
+/a/./a.a./ /a/a.a.
+/a/./a.a/a /a/a.a/a
+/a/./a.a/. /a/a.a
+/a/./a.a// /a/a.a
+/a/./a..aa /a/a..aa
+/a/./a..a. /a/a..a.
+/a/./a..a/ /a/a..a
+/a/./a...a /a/a...a
+/a/./a.... /a/a....
+/a/./a.../ /a/a...
+/a/./a../a /a/a../a
+/a/./a../. /a/a..
+/a/./a..// /a/a..
+/a/./a./aa /a/a./aa
+/a/./a./a. /a/a./a.
+/a/./a./a/ /a/a./a
+/a/./a./.a /a/a./.a
+/a/./a./.. /a
+/a/./a././ /a/a.
+/a/./a.//a /a/a./a
+/a/./a.//. /a/a.
+/a/./a./// /a/a.
+/a/./a/aaa /a/a/aaa
+/a/./a/aa. /a/a/aa.
+/a/./a/aa/ /a/a/aa
+/a/./a/a.a /a/a/a.a
+/a/./a/a.. /a/a/a..
+/a/./a/a./ /a/a/a.
+/a/./a/a/a /a/a/a/a
+/a/./a/a/. /a/a/a
+/a/./a/a// /a/a/a
+/a/./a/.aa /a/a/.aa
+/a/./a/.a. /a/a/.a.
+/a/./a/.a/ /a/a/.a
+/a/./a/..a /a/a/..a
+/a/./a/... /a/a/...
+/a/./a/../ /a
+/a/./a/./a /a/a/a
+/a/./a/./. /a/a
+/a/./a/.// /a/a
+/a/./a//aa /a/a/aa
+/a/./a//a. /a/a/a.
+/a/./a//a/ /a/a/a
+/a/./a//.a /a/a/.a
+/a/./a//.. /a
+/a/./a//./ /a/a
+/a/./a///a /a/a/a
+/a/./a///. /a/a
+/a/./a//// /a/a
+/a/./.aaaa /a/.aaaa
+/a/./.aaa. /a/.aaa.
+/a/./.aaa/ /a/.aaa
+/a/./.aa.a /a/.aa.a
+/a/./.aa.. /a/.aa..
+/a/./.aa./ /a/.aa.
+/a/./.aa/a /a/.aa/a
+/a/./.aa/. /a/.aa
+/a/./.aa// /a/.aa
+/a/./.a.aa /a/.a.aa
+/a/./.a.a. /a/.a.a.
+/a/./.a.a/ /a/.a.a
+/a/./.a..a /a/.a..a
+/a/./.a... /a/.a...
+/a/./.a../ /a/.a..
+/a/./.a./a /a/.a./a
+/a/./.a./. /a/.a.
+/a/./.a.// /a/.a.
+/a/./.a/aa /a/.a/aa
+/a/./.a/a. /a/.a/a.
+/a/./.a/a/ /a/.a/a
+/a/./.a/.a /a/.a/.a
+/a/./.a/.. /a
+/a/./.a/./ /a/.a
+/a/./.a//a /a/.a/a
+/a/./.a//. /a/.a
+/a/./.a/// /a/.a
+/a/./..aaa /a/..aaa
+/a/./..aa. /a/..aa.
+/a/./..aa/ /a/..aa
+/a/./..a.a /a/..a.a
+/a/./..a.. /a/..a..
+/a/./..a./ /a/..a.
+/a/./..a/a /a/..a/a
+/a/./..a/. /a/..a
+/a/./..a// /a/..a
+/a/./...aa /a/...aa
+/a/./...a. /a/...a.
+/a/./...a/ /a/...a
+/a/./....a /a/....a
+/a/./..... /a/.....
+/a/./..../ /a/....
+/a/./.../a /a/.../a
+/a/./.../. /a/...
+/a/./...// /a/...
+/a/./../aa /aa
+/a/./../a. /a.
+/a/./../a/ /a
+/a/./../.a /.a
+/a/./../.. /
+/a/./.././ /
+/a/./..//a /a
+/a/./..//. /
+/a/./../// /
+/a/././aaa /a/aaa
+/a/././aa. /a/aa.
+/a/././aa/ /a/aa
+/a/././a.a /a/a.a
+/a/././a.. /a/a..
+/a/././a./ /a/a.
+/a/././a/a /a/a/a
+/a/././a/. /a/a
+/a/././a// /a/a
+/a/././.aa /a/.aa
+/a/././.a. /a/.a.
+/a/././.a/ /a/.a
+/a/././..a /a/..a
+/a/././... /a/...
+/a/././../ /
+/a/./././a /a/a
+/a/./././. /a
+/a/././.// /a
+/a/././/aa /a/aa
+/a/././/a. /a/a.
+/a/././/a/ /a/a
+/a/././/.a /a/.a
+/a/././/.. /
+/a/././/./ /a
+/a/././//a /a/a
+/a/././//. /a
+/a/././/// /a
+/a/.//aaaa /a/aaaa
+/a/.//aaa. /a/aaa.
+/a/.//aaa/ /a/aaa
+/a/.//aa.a /a/aa.a
+/a/.//aa.. /a/aa..
+/a/.//aa./ /a/aa.
+/a/.//aa/a /a/aa/a
+/a/.//aa/. /a/aa
+/a/.//aa// /a/aa
+/a/.//a.aa /a/a.aa
+/a/.//a.a. /a/a.a.
+/a/.//a.a/ /a/a.a
+/a/.//a..a /a/a..a
+/a/.//a... /a/a...
+/a/.//a../ /a/a..
+/a/.//a./a /a/a./a
+/a/.//a./. /a/a.
+/a/.//a.// /a/a.
+/a/.//a/aa /a/a/aa
+/a/.//a/a. /a/a/a.
+/a/.//a/a/ /a/a/a
+/a/.//a/.a /a/a/.a
+/a/.//a/.. /a
+/a/.//a/./ /a/a
+/a/.//a//a /a/a/a
+/a/.//a//. /a/a
+/a/.//a/// /a/a
+/a/.//.aaa /a/.aaa
+/a/.//.aa. /a/.aa.
+/a/.//.aa/ /a/.aa
+/a/.//.a.a /a/.a.a
+/a/.//.a.. /a/.a..
+/a/.//.a./ /a/.a.
+/a/.//.a/a /a/.a/a
+/a/.//.a/. /a/.a
+/a/.//.a// /a/.a
+/a/.//..aa /a/..aa
+/a/.//..a. /a/..a.
+/a/.//..a/ /a/..a
+/a/.//...a /a/...a
+/a/.//.... /a/....
+/a/.//.../ /a/...
+/a/.//../a /a
+/a/.//../. /
+/a/.//..// /
+/a/.//./aa /a/aa
+/a/.//./a. /a/a.
+/a/.//./a/ /a/a
+/a/.//./.a /a/.a
+/a/.//./.. /
+/a/.//././ /a
+/a/.//.//a /a/a
+/a/.//.//. /a
+/a/.//./// /a
+/a/.///aaa /a/aaa
+/a/.///aa. /a/aa.
+/a/.///aa/ /a/aa
+/a/.///a.a /a/a.a
+/a/.///a.. /a/a..
+/a/.///a./ /a/a.
+/a/.///a/a /a/a/a
+/a/.///a/. /a/a
+/a/.///a// /a/a
+/a/.///.aa /a/.aa
+/a/.///.a. /a/.a.
+/a/.///.a/ /a/.a
+/a/.///..a /a/..a
+/a/.///... /a/...
+/a/.///../ /
+/a/.///./a /a/a
+/a/.///./. /a
+/a/.///.// /a
+/a/.////aa /a/aa
+/a/.////a. /a/a.
+/a/.////a/ /a/a
+/a/.////.a /a/.a
+/a/.////.. /
+/a/.////./ /a
+/a/./////a /a/a
+/a/./////. /a
+/a/.////// /a
+/a//aaaaaa /a/aaaaaa
+/a//aaaaa. /a/aaaaa.
+/a//aaaaa/ /a/aaaaa
+/a//aaaa.a /a/aaaa.a
+/a//aaaa.. /a/aaaa..
+/a//aaaa./ /a/aaaa.
+/a//aaaa/a /a/aaaa/a
+/a//aaaa/. /a/aaaa
+/a//aaaa// /a/aaaa
+/a//aaa.aa /a/aaa.aa
+/a//aaa.a. /a/aaa.a.
+/a//aaa.a/ /a/aaa.a
+/a//aaa..a /a/aaa..a
+/a//aaa... /a/aaa...
+/a//aaa../ /a/aaa..
+/a//aaa./a /a/aaa./a
+/a//aaa./. /a/aaa.
+/a//aaa.// /a/aaa.
+/a//aaa/aa /a/aaa/aa
+/a//aaa/a. /a/aaa/a.
+/a//aaa/a/ /a/aaa/a
+/a//aaa/.a /a/aaa/.a
+/a//aaa/.. /a
+/a//aaa/./ /a/aaa
+/a//aaa//a /a/aaa/a
+/a//aaa//. /a/aaa
+/a//aaa/// /a/aaa
+/a//aa.aaa /a/aa.aaa
+/a//aa.aa. /a/aa.aa.
+/a//aa.aa/ /a/aa.aa
+/a//aa.a.a /a/aa.a.a
+/a//aa.a.. /a/aa.a..
+/a//aa.a./ /a/aa.a.
+/a//aa.a/a /a/aa.a/a
+/a//aa.a/. /a/aa.a
+/a//aa.a// /a/aa.a
+/a//aa..aa /a/aa..aa
+/a//aa..a. /a/aa..a.
+/a//aa..a/ /a/aa..a
+/a//aa...a /a/aa...a
+/a//aa.... /a/aa....
+/a//aa.../ /a/aa...
+/a//aa../a /a/aa../a
+/a//aa../. /a/aa..
+/a//aa..// /a/aa..
+/a//aa./aa /a/aa./aa
+/a//aa./a. /a/aa./a.
+/a//aa./a/ /a/aa./a
+/a//aa./.a /a/aa./.a
+/a//aa./.. /a
+/a//aa././ /a/aa.
+/a//aa.//a /a/aa./a
+/a//aa.//. /a/aa.
+/a//aa./// /a/aa.
+/a//aa/aaa /a/aa/aaa
+/a//aa/aa. /a/aa/aa.
+/a//aa/aa/ /a/aa/aa
+/a//aa/a.a /a/aa/a.a
+/a//aa/a.. /a/aa/a..
+/a//aa/a./ /a/aa/a.
+/a//aa/a/a /a/aa/a/a
+/a//aa/a/. /a/aa/a
+/a//aa/a// /a/aa/a
+/a//aa/.aa /a/aa/.aa
+/a//aa/.a. /a/aa/.a.
+/a//aa/.a/ /a/aa/.a
+/a//aa/..a /a/aa/..a
+/a//aa/... /a/aa/...
+/a//aa/../ /a
+/a//aa/./a /a/aa/a
+/a//aa/./. /a/aa
+/a//aa/.// /a/aa
+/a//aa//aa /a/aa/aa
+/a//aa//a. /a/aa/a.
+/a//aa//a/ /a/aa/a
+/a//aa//.a /a/aa/.a
+/a//aa//.. /a
+/a//aa//./ /a/aa
+/a//aa///a /a/aa/a
+/a//aa///. /a/aa
+/a//aa//// /a/aa
+/a//a.aaaa /a/a.aaaa
+/a//a.aaa. /a/a.aaa.
+/a//a.aaa/ /a/a.aaa
+/a//a.aa.a /a/a.aa.a
+/a//a.aa.. /a/a.aa..
+/a//a.aa./ /a/a.aa.
+/a//a.aa/a /a/a.aa/a
+/a//a.aa/. /a/a.aa
+/a//a.aa// /a/a.aa
+/a//a.a.aa /a/a.a.aa
+/a//a.a.a. /a/a.a.a.
+/a//a.a.a/ /a/a.a.a
+/a//a.a..a /a/a.a..a
+/a//a.a... /a/a.a...
+/a//a.a../ /a/a.a..
+/a//a.a./a /a/a.a./a
+/a//a.a./. /a/a.a.
+/a//a.a.// /a/a.a.
+/a//a.a/aa /a/a.a/aa
+/a//a.a/a. /a/a.a/a.
+/a//a.a/a/ /a/a.a/a
+/a//a.a/.a /a/a.a/.a
+/a//a.a/.. /a
+/a//a.a/./ /a/a.a
+/a//a.a//a /a/a.a/a
+/a//a.a//. /a/a.a
+/a//a.a/// /a/a.a
+/a//a..aaa /a/a..aaa
+/a//a..aa. /a/a..aa.
+/a//a..aa/ /a/a..aa
+/a//a..a.a /a/a..a.a
+/a//a..a.. /a/a..a..
+/a//a..a./ /a/a..a.
+/a//a..a/a /a/a..a/a
+/a//a..a/. /a/a..a
+/a//a..a// /a/a..a
+/a//a...aa /a/a...aa
+/a//a...a. /a/a...a.
+/a//a...a/ /a/a...a
+/a//a....a /a/a....a
+/a//a..... /a/a.....
+/a//a..../ /a/a....
+/a//a.../a /a/a.../a
+/a//a.../. /a/a...
+/a//a...// /a/a...
+/a//a../aa /a/a../aa
+/a//a../a. /a/a../a.
+/a//a../a/ /a/a../a
+/a//a../.a /a/a../.a
+/a//a../.. /a
+/a//a.././ /a/a..
+/a//a..//a /a/a../a
+/a//a..//. /a/a..
+/a//a../// /a/a..
+/a//a./aaa /a/a./aaa
+/a//a./aa. /a/a./aa.
+/a//a./aa/ /a/a./aa
+/a//a./a.a /a/a./a.a
+/a//a./a.. /a/a./a..
+/a//a./a./ /a/a./a.
+/a//a./a/a /a/a./a/a
+/a//a./a/. /a/a./a
+/a//a./a// /a/a./a
+/a//a./.aa /a/a./.aa
+/a//a./.a. /a/a./.a.
+/a//a./.a/ /a/a./.a
+/a//a./..a /a/a./..a
+/a//a./... /a/a./...
+/a//a./../ /a
+/a//a././a /a/a./a
+/a//a././. /a/a.
+/a//a./.// /a/a.
+/a//a.//aa /a/a./aa
+/a//a.//a. /a/a./a.
+/a//a.//a/ /a/a./a
+/a//a.//.a /a/a./.a
+/a//a.//.. /a
+/a//a.//./ /a/a.
+/a//a.///a /a/a./a
+/a//a.///. /a/a.
+/a//a.//// /a/a.
+/a//a/aaaa /a/a/aaaa
+/a//a/aaa. /a/a/aaa.
+/a//a/aaa/ /a/a/aaa
+/a//a/aa.a /a/a/aa.a
+/a//a/aa.. /a/a/aa..
+/a//a/aa./ /a/a/aa.
+/a//a/aa/a /a/a/aa/a
+/a//a/aa/. /a/a/aa
+/a//a/aa// /a/a/aa
+/a//a/a.aa /a/a/a.aa
+/a//a/a.a. /a/a/a.a.
+/a//a/a.a/ /a/a/a.a
+/a//a/a..a /a/a/a..a
+/a//a/a... /a/a/a...
+/a//a/a../ /a/a/a..
+/a//a/a./a /a/a/a./a
+/a//a/a./. /a/a/a.
+/a//a/a.// /a/a/a.
+/a//a/a/aa /a/a/a/aa
+/a//a/a/a. /a/a/a/a.
+/a//a/a/a/ /a/a/a/a
+/a//a/a/.a /a/a/a/.a
+/a//a/a/.. /a/a
+/a//a/a/./ /a/a/a
+/a//a/a//a /a/a/a/a
+/a//a/a//. /a/a/a
+/a//a/a/// /a/a/a
+/a//a/.aaa /a/a/.aaa
+/a//a/.aa. /a/a/.aa.
+/a//a/.aa/ /a/a/.aa
+/a//a/.a.a /a/a/.a.a
+/a//a/.a.. /a/a/.a..
+/a//a/.a./ /a/a/.a.
+/a//a/.a/a /a/a/.a/a
+/a//a/.a/. /a/a/.a
+/a//a/.a// /a/a/.a
+/a//a/..aa /a/a/..aa
+/a//a/..a. /a/a/..a.
+/a//a/..a/ /a/a/..a
+/a//a/...a /a/a/...a
+/a//a/.... /a/a/....
+/a//a/.../ /a/a/...
+/a//a/../a /a/a
+/a//a/../. /a
+/a//a/..// /a
+/a//a/./aa /a/a/aa
+/a//a/./a. /a/a/a.
+/a//a/./a/ /a/a/a
+/a//a/./.a /a/a/.a
+/a//a/./.. /a
+/a//a/././ /a/a
+/a//a/.//a /a/a/a
+/a//a/.//. /a/a
+/a//a/./// /a/a
+/a//a//aaa /a/a/aaa
+/a//a//aa. /a/a/aa.
+/a//a//aa/ /a/a/aa
+/a//a//a.a /a/a/a.a
+/a//a//a.. /a/a/a..
+/a//a//a./ /a/a/a.
+/a//a//a/a /a/a/a/a
+/a//a//a/. /a/a/a
+/a//a//a// /a/a/a
+/a//a//.aa /a/a/.aa
+/a//a//.a. /a/a/.a.
+/a//a//.a/ /a/a/.a
+/a//a//..a /a/a/..a
+/a//a//... /a/a/...
+/a//a//../ /a
+/a//a//./a /a/a/a
+/a//a//./. /a/a
+/a//a//.// /a/a
+/a//a///aa /a/a/aa
+/a//a///a. /a/a/a.
+/a//a///a/ /a/a/a
+/a//a///.a /a/a/.a
+/a//a///.. /a
+/a//a///./ /a/a
+/a//a////a /a/a/a
+/a//a////. /a/a
+/a//a///// /a/a
+/a//.aaaaa /a/.aaaaa
+/a//.aaaa. /a/.aaaa.
+/a//.aaaa/ /a/.aaaa
+/a//.aaa.a /a/.aaa.a
+/a//.aaa.. /a/.aaa..
+/a//.aaa./ /a/.aaa.
+/a//.aaa/a /a/.aaa/a
+/a//.aaa/. /a/.aaa
+/a//.aaa// /a/.aaa
+/a//.aa.aa /a/.aa.aa
+/a//.aa.a. /a/.aa.a.
+/a//.aa.a/ /a/.aa.a
+/a//.aa..a /a/.aa..a
+/a//.aa... /a/.aa...
+/a//.aa../ /a/.aa..
+/a//.aa./a /a/.aa./a
+/a//.aa./. /a/.aa.
+/a//.aa.// /a/.aa.
+/a//.aa/aa /a/.aa/aa
+/a//.aa/a. /a/.aa/a.
+/a//.aa/a/ /a/.aa/a
+/a//.aa/.a /a/.aa/.a
+/a//.aa/.. /a
+/a//.aa/./ /a/.aa
+/a//.aa//a /a/.aa/a
+/a//.aa//. /a/.aa
+/a//.aa/// /a/.aa
+/a//.a.aaa /a/.a.aaa
+/a//.a.aa. /a/.a.aa.
+/a//.a.aa/ /a/.a.aa
+/a//.a.a.a /a/.a.a.a
+/a//.a.a.. /a/.a.a..
+/a//.a.a./ /a/.a.a.
+/a//.a.a/a /a/.a.a/a
+/a//.a.a/. /a/.a.a
+/a//.a.a// /a/.a.a
+/a//.a..aa /a/.a..aa
+/a//.a..a. /a/.a..a.
+/a//.a..a/ /a/.a..a
+/a//.a...a /a/.a...a
+/a//.a.... /a/.a....
+/a//.a.../ /a/.a...
+/a//.a../a /a/.a../a
+/a//.a../. /a/.a..
+/a//.a..// /a/.a..
+/a//.a./aa /a/.a./aa
+/a//.a./a. /a/.a./a.
+/a//.a./a/ /a/.a./a
+/a//.a./.a /a/.a./.a
+/a//.a./.. /a
+/a//.a././ /a/.a.
+/a//.a.//a /a/.a./a
+/a//.a.//. /a/.a.
+/a//.a./// /a/.a.
+/a//.a/aaa /a/.a/aaa
+/a//.a/aa. /a/.a/aa.
+/a//.a/aa/ /a/.a/aa
+/a//.a/a.a /a/.a/a.a
+/a//.a/a.. /a/.a/a..
+/a//.a/a./ /a/.a/a.
+/a//.a/a/a /a/.a/a/a
+/a//.a/a/. /a/.a/a
+/a//.a/a// /a/.a/a
+/a//.a/.aa /a/.a/.aa
+/a//.a/.a. /a/.a/.a.
+/a//.a/.a/ /a/.a/.a
+/a//.a/..a /a/.a/..a
+/a//.a/... /a/.a/...
+/a//.a/../ /a
+/a//.a/./a /a/.a/a
+/a//.a/./. /a/.a
+/a//.a/.// /a/.a
+/a//.a//aa /a/.a/aa
+/a//.a//a. /a/.a/a.
+/a//.a//a/ /a/.a/a
+/a//.a//.a /a/.a/.a
+/a//.a//.. /a
+/a//.a//./ /a/.a
+/a//.a///a /a/.a/a
+/a//.a///. /a/.a
+/a//.a//// /a/.a
+/a//..aaaa /a/..aaaa
+/a//..aaa. /a/..aaa.
+/a//..aaa/ /a/..aaa
+/a//..aa.a /a/..aa.a
+/a//..aa.. /a/..aa..
+/a//..aa./ /a/..aa.
+/a//..aa/a /a/..aa/a
+/a//..aa/. /a/..aa
+/a//..aa// /a/..aa
+/a//..a.aa /a/..a.aa
+/a//..a.a. /a/..a.a.
+/a//..a.a/ /a/..a.a
+/a//..a..a /a/..a..a
+/a//..a... /a/..a...
+/a//..a../ /a/..a..
+/a//..a./a /a/..a./a
+/a//..a./. /a/..a.
+/a//..a.// /a/..a.
+/a//..a/aa /a/..a/aa
+/a//..a/a. /a/..a/a.
+/a//..a/a/ /a/..a/a
+/a//..a/.a /a/..a/.a
+/a//..a/.. /a
+/a//..a/./ /a/..a
+/a//..a//a /a/..a/a
+/a//..a//. /a/..a
+/a//..a/// /a/..a
+/a//...aaa /a/...aaa
+/a//...aa. /a/...aa.
+/a//...aa/ /a/...aa
+/a//...a.a /a/...a.a
+/a//...a.. /a/...a..
+/a//...a./ /a/...a.
+/a//...a/a /a/...a/a
+/a//...a/. /a/...a
+/a//...a// /a/...a
+/a//....aa /a/....aa
+/a//....a. /a/....a.
+/a//....a/ /a/....a
+/a//.....a /a/.....a
+/a//...... /a/......
+/a//...../ /a/.....
+/a//..../a /a/..../a
+/a//..../. /a/....
+/a//....// /a/....
+/a//.../aa /a/.../aa
+/a//.../a. /a/.../a.
+/a//.../a/ /a/.../a
+/a//.../.a /a/.../.a
+/a//.../.. /a
+/a//..././ /a/...
+/a//...//a /a/.../a
+/a//...//. /a/...
+/a//.../// /a/...
+/a//../aaa /aaa
+/a//../aa. /aa.
+/a//../aa/ /aa
+/a//../a.a /a.a
+/a//../a.. /a..
+/a//../a./ /a.
+/a//../a/a /a/a
+/a//../a/. /a
+/a//../a// /a
+/a//../.aa /.aa
+/a//../.a. /.a.
+/a//../.a/ /.a
+/a//../..a /..a
+/a//../... /...
+/a//../../ /
+/a//.././a /a
+/a//.././. /
+/a//../.// /
+/a//..//aa /aa
+/a//..//a. /a.
+/a//..//a/ /a
+/a//..//.a /.a
+/a//..//.. /
+/a//..//./ /
+/a//..///a /a
+/a//..///. /
+/a//..//// /
+/a//./aaaa /a/aaaa
+/a//./aaa. /a/aaa.
+/a//./aaa/ /a/aaa
+/a//./aa.a /a/aa.a
+/a//./aa.. /a/aa..
+/a//./aa./ /a/aa.
+/a//./aa/a /a/aa/a
+/a//./aa/. /a/aa
+/a//./aa// /a/aa
+/a//./a.aa /a/a.aa
+/a//./a.a. /a/a.a.
+/a//./a.a/ /a/a.a
+/a//./a..a /a/a..a
+/a//./a... /a/a...
+/a//./a../ /a/a..
+/a//./a./a /a/a./a
+/a//./a./. /a/a.
+/a//./a.// /a/a.
+/a//./a/aa /a/a/aa
+/a//./a/a. /a/a/a.
+/a//./a/a/ /a/a/a
+/a//./a/.a /a/a/.a
+/a//./a/.. /a
+/a//./a/./ /a/a
+/a//./a//a /a/a/a
+/a//./a//. /a/a
+/a//./a/// /a/a
+/a//./.aaa /a/.aaa
+/a//./.aa. /a/.aa.
+/a//./.aa/ /a/.aa
+/a//./.a.a /a/.a.a
+/a//./.a.. /a/.a..
+/a//./.a./ /a/.a.
+/a//./.a/a /a/.a/a
+/a//./.a/. /a/.a
+/a//./.a// /a/.a
+/a//./..aa /a/..aa
+/a//./..a. /a/..a.
+/a//./..a/ /a/..a
+/a//./...a /a/...a
+/a//./.... /a/....
+/a//./.../ /a/...
+/a//./../a /a
+/a//./../. /
+/a//./..// /
+/a//././aa /a/aa
+/a//././a. /a/a.
+/a//././a/ /a/a
+/a//././.a /a/.a
+/a//././.. /
+/a//./././ /a
+/a//././/a /a/a
+/a//././/. /a
+/a//././// /a
+/a//.//aaa /a/aaa
+/a//.//aa. /a/aa.
+/a//.//aa/ /a/aa
+/a//.//a.a /a/a.a
+/a//.//a.. /a/a..
+/a//.//a./ /a/a.
+/a//.//a/a /a/a/a
+/a//.//a/. /a/a
+/a//.//a// /a/a
+/a//.//.aa /a/.aa
+/a//.//.a. /a/.a.
+/a//.//.a/ /a/.a
+/a//.//..a /a/..a
+/a//.//... /a/...
+/a//.//../ /
+/a//.//./a /a/a
+/a//.//./. /a
+/a//.//.// /a
+/a//.///aa /a/aa
+/a//.///a. /a/a.
+/a//.///a/ /a/a
+/a//.///.a /a/.a
+/a//.///.. /
+/a//.///./ /a
+/a//.////a /a/a
+/a//.////. /a
+/a//.///// /a
+/a///aaaaa /a/aaaaa
+/a///aaaa. /a/aaaa.
+/a///aaaa/ /a/aaaa
+/a///aaa.a /a/aaa.a
+/a///aaa.. /a/aaa..
+/a///aaa./ /a/aaa.
+/a///aaa/a /a/aaa/a
+/a///aaa/. /a/aaa
+/a///aaa// /a/aaa
+/a///aa.aa /a/aa.aa
+/a///aa.a. /a/aa.a.
+/a///aa.a/ /a/aa.a
+/a///aa..a /a/aa..a
+/a///aa... /a/aa...
+/a///aa../ /a/aa..
+/a///aa./a /a/aa./a
+/a///aa./. /a/aa.
+/a///aa.// /a/aa.
+/a///aa/aa /a/aa/aa
+/a///aa/a. /a/aa/a.
+/a///aa/a/ /a/aa/a
+/a///aa/.a /a/aa/.a
+/a///aa/.. /a
+/a///aa/./ /a/aa
+/a///aa//a /a/aa/a
+/a///aa//. /a/aa
+/a///aa/// /a/aa
+/a///a.aaa /a/a.aaa
+/a///a.aa. /a/a.aa.
+/a///a.aa/ /a/a.aa
+/a///a.a.a /a/a.a.a
+/a///a.a.. /a/a.a..
+/a///a.a./ /a/a.a.
+/a///a.a/a /a/a.a/a
+/a///a.a/. /a/a.a
+/a///a.a// /a/a.a
+/a///a..aa /a/a..aa
+/a///a..a. /a/a..a.
+/a///a..a/ /a/a..a
+/a///a...a /a/a...a
+/a///a.... /a/a....
+/a///a.../ /a/a...
+/a///a../a /a/a../a
+/a///a../. /a/a..
+/a///a..// /a/a..
+/a///a./aa /a/a./aa
+/a///a./a. /a/a./a.
+/a///a./a/ /a/a./a
+/a///a./.a /a/a./.a
+/a///a./.. /a
+/a///a././ /a/a.
+/a///a.//a /a/a./a
+/a///a.//. /a/a.
+/a///a./// /a/a.
+/a///a/aaa /a/a/aaa
+/a///a/aa. /a/a/aa.
+/a///a/aa/ /a/a/aa
+/a///a/a.a /a/a/a.a
+/a///a/a.. /a/a/a..
+/a///a/a./ /a/a/a.
+/a///a/a/a /a/a/a/a
+/a///a/a/. /a/a/a
+/a///a/a// /a/a/a
+/a///a/.aa /a/a/.aa
+/a///a/.a. /a/a/.a.
+/a///a/.a/ /a/a/.a
+/a///a/..a /a/a/..a
+/a///a/... /a/a/...
+/a///a/../ /a
+/a///a/./a /a/a/a
+/a///a/./. /a/a
+/a///a/.// /a/a
+/a///a//aa /a/a/aa
+/a///a//a. /a/a/a.
+/a///a//a/ /a/a/a
+/a///a//.a /a/a/.a
+/a///a//.. /a
+/a///a//./ /a/a
+/a///a///a /a/a/a
+/a///a///. /a/a
+/a///a//// /a/a
+/a///.aaaa /a/.aaaa
+/a///.aaa. /a/.aaa.
+/a///.aaa/ /a/.aaa
+/a///.aa.a /a/.aa.a
+/a///.aa.. /a/.aa..
+/a///.aa./ /a/.aa.
+/a///.aa/a /a/.aa/a
+/a///.aa/. /a/.aa
+/a///.aa// /a/.aa
+/a///.a.aa /a/.a.aa
+/a///.a.a. /a/.a.a.
+/a///.a.a/ /a/.a.a
+/a///.a..a /a/.a..a
+/a///.a... /a/.a...
+/a///.a../ /a/.a..
+/a///.a./a /a/.a./a
+/a///.a./. /a/.a.
+/a///.a.// /a/.a.
+/a///.a/aa /a/.a/aa
+/a///.a/a. /a/.a/a.
+/a///.a/a/ /a/.a/a
+/a///.a/.a /a/.a/.a
+/a///.a/.. /a
+/a///.a/./ /a/.a
+/a///.a//a /a/.a/a
+/a///.a//. /a/.a
+/a///.a/// /a/.a
+/a///..aaa /a/..aaa
+/a///..aa. /a/..aa.
+/a///..aa/ /a/..aa
+/a///..a.a /a/..a.a
+/a///..a.. /a/..a..
+/a///..a./ /a/..a.
+/a///..a/a /a/..a/a
+/a///..a/. /a/..a
+/a///..a// /a/..a
+/a///...aa /a/...aa
+/a///...a. /a/...a.
+/a///...a/ /a/...a
+/a///....a /a/....a
+/a///..... /a/.....
+/a///..../ /a/....
+/a///.../a /a/.../a
+/a///.../. /a/...
+/a///...// /a/...
+/a///../aa /aa
+/a///../a. /a.
+/a///../a/ /a
+/a///../.a /.a
+/a///../.. /
+/a///.././ /
+/a///..//a /a
+/a///..//. /
+/a///../// /
+/a///./aaa /a/aaa
+/a///./aa. /a/aa.
+/a///./aa/ /a/aa
+/a///./a.a /a/a.a
+/a///./a.. /a/a..
+/a///./a./ /a/a.
+/a///./a/a /a/a/a
+/a///./a/. /a/a
+/a///./a// /a/a
+/a///./.aa /a/.aa
+/a///./.a. /a/.a.
+/a///./.a/ /a/.a
+/a///./..a /a/..a
+/a///./... /a/...
+/a///./../ /
+/a///././a /a/a
+/a///././. /a
+/a///./.// /a
+/a///.//aa /a/aa
+/a///.//a. /a/a.
+/a///.//a/ /a/a
+/a///.//.a /a/.a
+/a///.//.. /
+/a///.//./ /a
+/a///.///a /a/a
+/a///.///. /a
+/a///.//// /a
+/a////aaaa /a/aaaa
+/a////aaa. /a/aaa.
+/a////aaa/ /a/aaa
+/a////aa.a /a/aa.a
+/a////aa.. /a/aa..
+/a////aa./ /a/aa.
+/a////aa/a /a/aa/a
+/a////aa/. /a/aa
+/a////aa// /a/aa
+/a////a.aa /a/a.aa
+/a////a.a. /a/a.a.
+/a////a.a/ /a/a.a
+/a////a..a /a/a..a
+/a////a... /a/a...
+/a////a../ /a/a..
+/a////a./a /a/a./a
+/a////a./. /a/a.
+/a////a.// /a/a.
+/a////a/aa /a/a/aa
+/a////a/a. /a/a/a.
+/a////a/a/ /a/a/a
+/a////a/.a /a/a/.a
+/a////a/.. /a
+/a////a/./ /a/a
+/a////a//a /a/a/a
+/a////a//. /a/a
+/a////a/// /a/a
+/a////.aaa /a/.aaa
+/a////.aa. /a/.aa.
+/a////.aa/ /a/.aa
+/a////.a.a /a/.a.a
+/a////.a.. /a/.a..
+/a////.a./ /a/.a.
+/a////.a/a /a/.a/a
+/a////.a/. /a/.a
+/a////.a// /a/.a
+/a////..aa /a/..aa
+/a////..a. /a/..a.
+/a////..a/ /a/..a
+/a////...a /a/...a
+/a////.... /a/....
+/a////.../ /a/...
+/a////../a /a
+/a////../. /
+/a////..// /
+/a////./aa /a/aa
+/a////./a. /a/a.
+/a////./a/ /a/a
+/a////./.a /a/.a
+/a////./.. /
+/a////././ /a
+/a////.//a /a/a
+/a////.//. /a
+/a////./// /a
+/a/////aaa /a/aaa
+/a/////aa. /a/aa.
+/a/////aa/ /a/aa
+/a/////a.a /a/a.a
+/a/////a.. /a/a..
+/a/////a./ /a/a.
+/a/////a/a /a/a/a
+/a/////a/. /a/a
+/a/////a// /a/a
+/a/////.aa /a/.aa
+/a/////.a. /a/.a.
+/a/////.a/ /a/.a
+/a/////..a /a/..a
+/a/////... /a/...
+/a/////../ /
+/a/////./a /a/a
+/a/////./. /a
+/a/////.// /a
+/a//////aa /a/aa
+/a//////a. /a/a.
+/a//////a/ /a/a
+/a//////.a /a/.a
+/a//////.. /
+/a//////./ /a
+/a///////a /a/a
+/a///////. /a
+/a//////// /a
+/.aaaaaaaa /.aaaaaaaa
+/.aaaaaaa. /.aaaaaaa.
+/.aaaaaaa/ /.aaaaaaa
+/.aaaaaa.a /.aaaaaa.a
+/.aaaaaa.. /.aaaaaa..
+/.aaaaaa./ /.aaaaaa.
+/.aaaaaa/a /.aaaaaa/a
+/.aaaaaa/. /.aaaaaa
+/.aaaaaa// /.aaaaaa
+/.aaaaa.aa /.aaaaa.aa
+/.aaaaa.a. /.aaaaa.a.
+/.aaaaa.a/ /.aaaaa.a
+/.aaaaa..a /.aaaaa..a
+/.aaaaa... /.aaaaa...
+/.aaaaa../ /.aaaaa..
+/.aaaaa./a /.aaaaa./a
+/.aaaaa./. /.aaaaa.
+/.aaaaa.// /.aaaaa.
+/.aaaaa/aa /.aaaaa/aa
+/.aaaaa/a. /.aaaaa/a.
+/.aaaaa/a/ /.aaaaa/a
+/.aaaaa/.a /.aaaaa/.a
+/.aaaaa/.. /
+/.aaaaa/./ /.aaaaa
+/.aaaaa//a /.aaaaa/a
+/.aaaaa//. /.aaaaa
+/.aaaaa/// /.aaaaa
+/.aaaa.aaa /.aaaa.aaa
+/.aaaa.aa. /.aaaa.aa.
+/.aaaa.aa/ /.aaaa.aa
+/.aaaa.a.a /.aaaa.a.a
+/.aaaa.a.. /.aaaa.a..
+/.aaaa.a./ /.aaaa.a.
+/.aaaa.a/a /.aaaa.a/a
+/.aaaa.a/. /.aaaa.a
+/.aaaa.a// /.aaaa.a
+/.aaaa..aa /.aaaa..aa
+/.aaaa..a. /.aaaa..a.
+/.aaaa..a/ /.aaaa..a
+/.aaaa...a /.aaaa...a
+/.aaaa.... /.aaaa....
+/.aaaa.../ /.aaaa...
+/.aaaa../a /.aaaa../a
+/.aaaa../. /.aaaa..
+/.aaaa..// /.aaaa..
+/.aaaa./aa /.aaaa./aa
+/.aaaa./a. /.aaaa./a.
+/.aaaa./a/ /.aaaa./a
+/.aaaa./.a /.aaaa./.a
+/.aaaa./.. /
+/.aaaa././ /.aaaa.
+/.aaaa.//a /.aaaa./a
+/.aaaa.//. /.aaaa.
+/.aaaa./// /.aaaa.
+/.aaaa/aaa /.aaaa/aaa
+/.aaaa/aa. /.aaaa/aa.
+/.aaaa/aa/ /.aaaa/aa
+/.aaaa/a.a /.aaaa/a.a
+/.aaaa/a.. /.aaaa/a..
+/.aaaa/a./ /.aaaa/a.
+/.aaaa/a/a /.aaaa/a/a
+/.aaaa/a/. /.aaaa/a
+/.aaaa/a// /.aaaa/a
+/.aaaa/.aa /.aaaa/.aa
+/.aaaa/.a. /.aaaa/.a.
+/.aaaa/.a/ /.aaaa/.a
+/.aaaa/..a /.aaaa/..a
+/.aaaa/... /.aaaa/...
+/.aaaa/../ /
+/.aaaa/./a /.aaaa/a
+/.aaaa/./. /.aaaa
+/.aaaa/.// /.aaaa
+/.aaaa//aa /.aaaa/aa
+/.aaaa//a. /.aaaa/a.
+/.aaaa//a/ /.aaaa/a
+/.aaaa//.a /.aaaa/.a
+/.aaaa//.. /
+/.aaaa//./ /.aaaa
+/.aaaa///a /.aaaa/a
+/.aaaa///. /.aaaa
+/.aaaa//// /.aaaa
+/.aaa.aaaa /.aaa.aaaa
+/.aaa.aaa. /.aaa.aaa.
+/.aaa.aaa/ /.aaa.aaa
+/.aaa.aa.a /.aaa.aa.a
+/.aaa.aa.. /.aaa.aa..
+/.aaa.aa./ /.aaa.aa.
+/.aaa.aa/a /.aaa.aa/a
+/.aaa.aa/. /.aaa.aa
+/.aaa.aa// /.aaa.aa
+/.aaa.a.aa /.aaa.a.aa
+/.aaa.a.a. /.aaa.a.a.
+/.aaa.a.a/ /.aaa.a.a
+/.aaa.a..a /.aaa.a..a
+/.aaa.a... /.aaa.a...
+/.aaa.a../ /.aaa.a..
+/.aaa.a./a /.aaa.a./a
+/.aaa.a./. /.aaa.a.
+/.aaa.a.// /.aaa.a.
+/.aaa.a/aa /.aaa.a/aa
+/.aaa.a/a. /.aaa.a/a.
+/.aaa.a/a/ /.aaa.a/a
+/.aaa.a/.a /.aaa.a/.a
+/.aaa.a/.. /
+/.aaa.a/./ /.aaa.a
+/.aaa.a//a /.aaa.a/a
+/.aaa.a//. /.aaa.a
+/.aaa.a/// /.aaa.a
+/.aaa..aaa /.aaa..aaa
+/.aaa..aa. /.aaa..aa.
+/.aaa..aa/ /.aaa..aa
+/.aaa..a.a /.aaa..a.a
+/.aaa..a.. /.aaa..a..
+/.aaa..a./ /.aaa..a.
+/.aaa..a/a /.aaa..a/a
+/.aaa..a/. /.aaa..a
+/.aaa..a// /.aaa..a
+/.aaa...aa /.aaa...aa
+/.aaa...a. /.aaa...a.
+/.aaa...a/ /.aaa...a
+/.aaa....a /.aaa....a
+/.aaa..... /.aaa.....
+/.aaa..../ /.aaa....
+/.aaa.../a /.aaa.../a
+/.aaa.../. /.aaa...
+/.aaa...// /.aaa...
+/.aaa../aa /.aaa../aa
+/.aaa../a. /.aaa../a.
+/.aaa../a/ /.aaa../a
+/.aaa../.a /.aaa../.a
+/.aaa../.. /
+/.aaa.././ /.aaa..
+/.aaa..//a /.aaa../a
+/.aaa..//. /.aaa..
+/.aaa../// /.aaa..
+/.aaa./aaa /.aaa./aaa
+/.aaa./aa. /.aaa./aa.
+/.aaa./aa/ /.aaa./aa
+/.aaa./a.a /.aaa./a.a
+/.aaa./a.. /.aaa./a..
+/.aaa./a./ /.aaa./a.
+/.aaa./a/a /.aaa./a/a
+/.aaa./a/. /.aaa./a
+/.aaa./a// /.aaa./a
+/.aaa./.aa /.aaa./.aa
+/.aaa./.a. /.aaa./.a.
+/.aaa./.a/ /.aaa./.a
+/.aaa./..a /.aaa./..a
+/.aaa./... /.aaa./...
+/.aaa./../ /
+/.aaa././a /.aaa./a
+/.aaa././. /.aaa.
+/.aaa./.// /.aaa.
+/.aaa.//aa /.aaa./aa
+/.aaa.//a. /.aaa./a.
+/.aaa.//a/ /.aaa./a
+/.aaa.//.a /.aaa./.a
+/.aaa.//.. /
+/.aaa.//./ /.aaa.
+/.aaa.///a /.aaa./a
+/.aaa.///. /.aaa.
+/.aaa.//// /.aaa.
+/.aaa/aaaa /.aaa/aaaa
+/.aaa/aaa. /.aaa/aaa.
+/.aaa/aaa/ /.aaa/aaa
+/.aaa/aa.a /.aaa/aa.a
+/.aaa/aa.. /.aaa/aa..
+/.aaa/aa./ /.aaa/aa.
+/.aaa/aa/a /.aaa/aa/a
+/.aaa/aa/. /.aaa/aa
+/.aaa/aa// /.aaa/aa
+/.aaa/a.aa /.aaa/a.aa
+/.aaa/a.a. /.aaa/a.a.
+/.aaa/a.a/ /.aaa/a.a
+/.aaa/a..a /.aaa/a..a
+/.aaa/a... /.aaa/a...
+/.aaa/a../ /.aaa/a..
+/.aaa/a./a /.aaa/a./a
+/.aaa/a./. /.aaa/a.
+/.aaa/a.// /.aaa/a.
+/.aaa/a/aa /.aaa/a/aa
+/.aaa/a/a. /.aaa/a/a.
+/.aaa/a/a/ /.aaa/a/a
+/.aaa/a/.a /.aaa/a/.a
+/.aaa/a/.. /.aaa
+/.aaa/a/./ /.aaa/a
+/.aaa/a//a /.aaa/a/a
+/.aaa/a//. /.aaa/a
+/.aaa/a/// /.aaa/a
+/.aaa/.aaa /.aaa/.aaa
+/.aaa/.aa. /.aaa/.aa.
+/.aaa/.aa/ /.aaa/.aa
+/.aaa/.a.a /.aaa/.a.a
+/.aaa/.a.. /.aaa/.a..
+/.aaa/.a./ /.aaa/.a.
+/.aaa/.a/a /.aaa/.a/a
+/.aaa/.a/. /.aaa/.a
+/.aaa/.a// /.aaa/.a
+/.aaa/..aa /.aaa/..aa
+/.aaa/..a. /.aaa/..a.
+/.aaa/..a/ /.aaa/..a
+/.aaa/...a /.aaa/...a
+/.aaa/.... /.aaa/....
+/.aaa/.../ /.aaa/...
+/.aaa/../a /a
+/.aaa/../. /
+/.aaa/..// /
+/.aaa/./aa /.aaa/aa
+/.aaa/./a. /.aaa/a.
+/.aaa/./a/ /.aaa/a
+/.aaa/./.a /.aaa/.a
+/.aaa/./.. /
+/.aaa/././ /.aaa
+/.aaa/.//a /.aaa/a
+/.aaa/.//. /.aaa
+/.aaa/./// /.aaa
+/.aaa//aaa /.aaa/aaa
+/.aaa//aa. /.aaa/aa.
+/.aaa//aa/ /.aaa/aa
+/.aaa//a.a /.aaa/a.a
+/.aaa//a.. /.aaa/a..
+/.aaa//a./ /.aaa/a.
+/.aaa//a/a /.aaa/a/a
+/.aaa//a/. /.aaa/a
+/.aaa//a// /.aaa/a
+/.aaa//.aa /.aaa/.aa
+/.aaa//.a. /.aaa/.a.
+/.aaa//.a/ /.aaa/.a
+/.aaa//..a /.aaa/..a
+/.aaa//... /.aaa/...
+/.aaa//../ /
+/.aaa//./a /.aaa/a
+/.aaa//./. /.aaa
+/.aaa//.// /.aaa
+/.aaa///aa /.aaa/aa
+/.aaa///a. /.aaa/a.
+/.aaa///a/ /.aaa/a
+/.aaa///.a /.aaa/.a
+/.aaa///.. /
+/.aaa///./ /.aaa
+/.aaa////a /.aaa/a
+/.aaa////. /.aaa
+/.aaa///// /.aaa
+/.aa.aaaaa /.aa.aaaaa
+/.aa.aaaa. /.aa.aaaa.
+/.aa.aaaa/ /.aa.aaaa
+/.aa.aaa.a /.aa.aaa.a
+/.aa.aaa.. /.aa.aaa..
+/.aa.aaa./ /.aa.aaa.
+/.aa.aaa/a /.aa.aaa/a
+/.aa.aaa/. /.aa.aaa
+/.aa.aaa// /.aa.aaa
+/.aa.aa.aa /.aa.aa.aa
+/.aa.aa.a. /.aa.aa.a.
+/.aa.aa.a/ /.aa.aa.a
+/.aa.aa..a /.aa.aa..a
+/.aa.aa... /.aa.aa...
+/.aa.aa../ /.aa.aa..
+/.aa.aa./a /.aa.aa./a
+/.aa.aa./. /.aa.aa.
+/.aa.aa.// /.aa.aa.
+/.aa.aa/aa /.aa.aa/aa
+/.aa.aa/a. /.aa.aa/a.
+/.aa.aa/a/ /.aa.aa/a
+/.aa.aa/.a /.aa.aa/.a
+/.aa.aa/.. /
+/.aa.aa/./ /.aa.aa
+/.aa.aa//a /.aa.aa/a
+/.aa.aa//. /.aa.aa
+/.aa.aa/// /.aa.aa
+/.aa.a.aaa /.aa.a.aaa
+/.aa.a.aa. /.aa.a.aa.
+/.aa.a.aa/ /.aa.a.aa
+/.aa.a.a.a /.aa.a.a.a
+/.aa.a.a.. /.aa.a.a..
+/.aa.a.a./ /.aa.a.a.
+/.aa.a.a/a /.aa.a.a/a
+/.aa.a.a/. /.aa.a.a
+/.aa.a.a// /.aa.a.a
+/.aa.a..aa /.aa.a..aa
+/.aa.a..a. /.aa.a..a.
+/.aa.a..a/ /.aa.a..a
+/.aa.a...a /.aa.a...a
+/.aa.a.... /.aa.a....
+/.aa.a.../ /.aa.a...
+/.aa.a../a /.aa.a../a
+/.aa.a../. /.aa.a..
+/.aa.a..// /.aa.a..
+/.aa.a./aa /.aa.a./aa
+/.aa.a./a. /.aa.a./a.
+/.aa.a./a/ /.aa.a./a
+/.aa.a./.a /.aa.a./.a
+/.aa.a./.. /
+/.aa.a././ /.aa.a.
+/.aa.a.//a /.aa.a./a
+/.aa.a.//. /.aa.a.
+/.aa.a./// /.aa.a.
+/.aa.a/aaa /.aa.a/aaa
+/.aa.a/aa. /.aa.a/aa.
+/.aa.a/aa/ /.aa.a/aa
+/.aa.a/a.a /.aa.a/a.a
+/.aa.a/a.. /.aa.a/a..
+/.aa.a/a./ /.aa.a/a.
+/.aa.a/a/a /.aa.a/a/a
+/.aa.a/a/. /.aa.a/a
+/.aa.a/a// /.aa.a/a
+/.aa.a/.aa /.aa.a/.aa
+/.aa.a/.a. /.aa.a/.a.
+/.aa.a/.a/ /.aa.a/.a
+/.aa.a/..a /.aa.a/..a
+/.aa.a/... /.aa.a/...
+/.aa.a/../ /
+/.aa.a/./a /.aa.a/a
+/.aa.a/./. /.aa.a
+/.aa.a/.// /.aa.a
+/.aa.a//aa /.aa.a/aa
+/.aa.a//a. /.aa.a/a.
+/.aa.a//a/ /.aa.a/a
+/.aa.a//.a /.aa.a/.a
+/.aa.a//.. /
+/.aa.a//./ /.aa.a
+/.aa.a///a /.aa.a/a
+/.aa.a///. /.aa.a
+/.aa.a//// /.aa.a
+/.aa..aaaa /.aa..aaaa
+/.aa..aaa. /.aa..aaa.
+/.aa..aaa/ /.aa..aaa
+/.aa..aa.a /.aa..aa.a
+/.aa..aa.. /.aa..aa..
+/.aa..aa./ /.aa..aa.
+/.aa..aa/a /.aa..aa/a
+/.aa..aa/. /.aa..aa
+/.aa..aa// /.aa..aa
+/.aa..a.aa /.aa..a.aa
+/.aa..a.a. /.aa..a.a.
+/.aa..a.a/ /.aa..a.a
+/.aa..a..a /.aa..a..a
+/.aa..a... /.aa..a...
+/.aa..a../ /.aa..a..
+/.aa..a./a /.aa..a./a
+/.aa..a./. /.aa..a.
+/.aa..a.// /.aa..a.
+/.aa..a/aa /.aa..a/aa
+/.aa..a/a. /.aa..a/a.
+/.aa..a/a/ /.aa..a/a
+/.aa..a/.a /.aa..a/.a
+/.aa..a/.. /
+/.aa..a/./ /.aa..a
+/.aa..a//a /.aa..a/a
+/.aa..a//. /.aa..a
+/.aa..a/// /.aa..a
+/.aa...aaa /.aa...aaa
+/.aa...aa. /.aa...aa.
+/.aa...aa/ /.aa...aa
+/.aa...a.a /.aa...a.a
+/.aa...a.. /.aa...a..
+/.aa...a./ /.aa...a.
+/.aa...a/a /.aa...a/a
+/.aa...a/. /.aa...a
+/.aa...a// /.aa...a
+/.aa....aa /.aa....aa
+/.aa....a. /.aa....a.
+/.aa....a/ /.aa....a
+/.aa.....a /.aa.....a
+/.aa...... /.aa......
+/.aa...../ /.aa.....
+/.aa..../a /.aa..../a
+/.aa..../. /.aa....
+/.aa....// /.aa....
+/.aa.../aa /.aa.../aa
+/.aa.../a. /.aa.../a.
+/.aa.../a/ /.aa.../a
+/.aa.../.a /.aa.../.a
+/.aa.../.. /
+/.aa..././ /.aa...
+/.aa...//a /.aa.../a
+/.aa...//. /.aa...
+/.aa.../// /.aa...
+/.aa../aaa /.aa../aaa
+/.aa../aa. /.aa../aa.
+/.aa../aa/ /.aa../aa
+/.aa../a.a /.aa../a.a
+/.aa../a.. /.aa../a..
+/.aa../a./ /.aa../a.
+/.aa../a/a /.aa../a/a
+/.aa../a/. /.aa../a
+/.aa../a// /.aa../a
+/.aa../.aa /.aa../.aa
+/.aa../.a. /.aa../.a.
+/.aa../.a/ /.aa../.a
+/.aa../..a /.aa../..a
+/.aa../... /.aa../...
+/.aa../../ /
+/.aa.././a /.aa../a
+/.aa.././. /.aa..
+/.aa../.// /.aa..
+/.aa..//aa /.aa../aa
+/.aa..//a. /.aa../a.
+/.aa..//a/ /.aa../a
+/.aa..//.a /.aa../.a
+/.aa..//.. /
+/.aa..//./ /.aa..
+/.aa..///a /.aa../a
+/.aa..///. /.aa..
+/.aa..//// /.aa..
+/.aa./aaaa /.aa./aaaa
+/.aa./aaa. /.aa./aaa.
+/.aa./aaa/ /.aa./aaa
+/.aa./aa.a /.aa./aa.a
+/.aa./aa.. /.aa./aa..
+/.aa./aa./ /.aa./aa.
+/.aa./aa/a /.aa./aa/a
+/.aa./aa/. /.aa./aa
+/.aa./aa// /.aa./aa
+/.aa./a.aa /.aa./a.aa
+/.aa./a.a. /.aa./a.a.
+/.aa./a.a/ /.aa./a.a
+/.aa./a..a /.aa./a..a
+/.aa./a... /.aa./a...
+/.aa./a../ /.aa./a..
+/.aa./a./a /.aa./a./a
+/.aa./a./. /.aa./a.
+/.aa./a.// /.aa./a.
+/.aa./a/aa /.aa./a/aa
+/.aa./a/a. /.aa./a/a.
+/.aa./a/a/ /.aa./a/a
+/.aa./a/.a /.aa./a/.a
+/.aa./a/.. /.aa.
+/.aa./a/./ /.aa./a
+/.aa./a//a /.aa./a/a
+/.aa./a//. /.aa./a
+/.aa./a/// /.aa./a
+/.aa./.aaa /.aa./.aaa
+/.aa./.aa. /.aa./.aa.
+/.aa./.aa/ /.aa./.aa
+/.aa./.a.a /.aa./.a.a
+/.aa./.a.. /.aa./.a..
+/.aa./.a./ /.aa./.a.
+/.aa./.a/a /.aa./.a/a
+/.aa./.a/. /.aa./.a
+/.aa./.a// /.aa./.a
+/.aa./..aa /.aa./..aa
+/.aa./..a. /.aa./..a.
+/.aa./..a/ /.aa./..a
+/.aa./...a /.aa./...a
+/.aa./.... /.aa./....
+/.aa./.../ /.aa./...
+/.aa./../a /a
+/.aa./../. /
+/.aa./..// /
+/.aa././aa /.aa./aa
+/.aa././a. /.aa./a.
+/.aa././a/ /.aa./a
+/.aa././.a /.aa./.a
+/.aa././.. /
+/.aa./././ /.aa.
+/.aa././/a /.aa./a
+/.aa././/. /.aa.
+/.aa././// /.aa.
+/.aa.//aaa /.aa./aaa
+/.aa.//aa. /.aa./aa.
+/.aa.//aa/ /.aa./aa
+/.aa.//a.a /.aa./a.a
+/.aa.//a.. /.aa./a..
+/.aa.//a./ /.aa./a.
+/.aa.//a/a /.aa./a/a
+/.aa.//a/. /.aa./a
+/.aa.//a// /.aa./a
+/.aa.//.aa /.aa./.aa
+/.aa.//.a. /.aa./.a.
+/.aa.//.a/ /.aa./.a
+/.aa.//..a /.aa./..a
+/.aa.//... /.aa./...
+/.aa.//../ /
+/.aa.//./a /.aa./a
+/.aa.//./. /.aa.
+/.aa.//.// /.aa.
+/.aa.///aa /.aa./aa
+/.aa.///a. /.aa./a.
+/.aa.///a/ /.aa./a
+/.aa.///.a /.aa./.a
+/.aa.///.. /
+/.aa.///./ /.aa.
+/.aa.////a /.aa./a
+/.aa.////. /.aa.
+/.aa.///// /.aa.
+/.aa/aaaaa /.aa/aaaaa
+/.aa/aaaa. /.aa/aaaa.
+/.aa/aaaa/ /.aa/aaaa
+/.aa/aaa.a /.aa/aaa.a
+/.aa/aaa.. /.aa/aaa..
+/.aa/aaa./ /.aa/aaa.
+/.aa/aaa/a /.aa/aaa/a
+/.aa/aaa/. /.aa/aaa
+/.aa/aaa// /.aa/aaa
+/.aa/aa.aa /.aa/aa.aa
+/.aa/aa.a. /.aa/aa.a.
+/.aa/aa.a/ /.aa/aa.a
+/.aa/aa..a /.aa/aa..a
+/.aa/aa... /.aa/aa...
+/.aa/aa../ /.aa/aa..
+/.aa/aa./a /.aa/aa./a
+/.aa/aa./. /.aa/aa.
+/.aa/aa.// /.aa/aa.
+/.aa/aa/aa /.aa/aa/aa
+/.aa/aa/a. /.aa/aa/a.
+/.aa/aa/a/ /.aa/aa/a
+/.aa/aa/.a /.aa/aa/.a
+/.aa/aa/.. /.aa
+/.aa/aa/./ /.aa/aa
+/.aa/aa//a /.aa/aa/a
+/.aa/aa//. /.aa/aa
+/.aa/aa/// /.aa/aa
+/.aa/a.aaa /.aa/a.aaa
+/.aa/a.aa. /.aa/a.aa.
+/.aa/a.aa/ /.aa/a.aa
+/.aa/a.a.a /.aa/a.a.a
+/.aa/a.a.. /.aa/a.a..
+/.aa/a.a./ /.aa/a.a.
+/.aa/a.a/a /.aa/a.a/a
+/.aa/a.a/. /.aa/a.a
+/.aa/a.a// /.aa/a.a
+/.aa/a..aa /.aa/a..aa
+/.aa/a..a. /.aa/a..a.
+/.aa/a..a/ /.aa/a..a
+/.aa/a...a /.aa/a...a
+/.aa/a.... /.aa/a....
+/.aa/a.../ /.aa/a...
+/.aa/a../a /.aa/a../a
+/.aa/a../. /.aa/a..
+/.aa/a..// /.aa/a..
+/.aa/a./aa /.aa/a./aa
+/.aa/a./a. /.aa/a./a.
+/.aa/a./a/ /.aa/a./a
+/.aa/a./.a /.aa/a./.a
+/.aa/a./.. /.aa
+/.aa/a././ /.aa/a.
+/.aa/a.//a /.aa/a./a
+/.aa/a.//. /.aa/a.
+/.aa/a./// /.aa/a.
+/.aa/a/aaa /.aa/a/aaa
+/.aa/a/aa. /.aa/a/aa.
+/.aa/a/aa/ /.aa/a/aa
+/.aa/a/a.a /.aa/a/a.a
+/.aa/a/a.. /.aa/a/a..
+/.aa/a/a./ /.aa/a/a.
+/.aa/a/a/a /.aa/a/a/a
+/.aa/a/a/. /.aa/a/a
+/.aa/a/a// /.aa/a/a
+/.aa/a/.aa /.aa/a/.aa
+/.aa/a/.a. /.aa/a/.a.
+/.aa/a/.a/ /.aa/a/.a
+/.aa/a/..a /.aa/a/..a
+/.aa/a/... /.aa/a/...
+/.aa/a/../ /.aa
+/.aa/a/./a /.aa/a/a
+/.aa/a/./. /.aa/a
+/.aa/a/.// /.aa/a
+/.aa/a//aa /.aa/a/aa
+/.aa/a//a. /.aa/a/a.
+/.aa/a//a/ /.aa/a/a
+/.aa/a//.a /.aa/a/.a
+/.aa/a//.. /.aa
+/.aa/a//./ /.aa/a
+/.aa/a///a /.aa/a/a
+/.aa/a///. /.aa/a
+/.aa/a//// /.aa/a
+/.aa/.aaaa /.aa/.aaaa
+/.aa/.aaa. /.aa/.aaa.
+/.aa/.aaa/ /.aa/.aaa
+/.aa/.aa.a /.aa/.aa.a
+/.aa/.aa.. /.aa/.aa..
+/.aa/.aa./ /.aa/.aa.
+/.aa/.aa/a /.aa/.aa/a
+/.aa/.aa/. /.aa/.aa
+/.aa/.aa// /.aa/.aa
+/.aa/.a.aa /.aa/.a.aa
+/.aa/.a.a. /.aa/.a.a.
+/.aa/.a.a/ /.aa/.a.a
+/.aa/.a..a /.aa/.a..a
+/.aa/.a... /.aa/.a...
+/.aa/.a../ /.aa/.a..
+/.aa/.a./a /.aa/.a./a
+/.aa/.a./. /.aa/.a.
+/.aa/.a.// /.aa/.a.
+/.aa/.a/aa /.aa/.a/aa
+/.aa/.a/a. /.aa/.a/a.
+/.aa/.a/a/ /.aa/.a/a
+/.aa/.a/.a /.aa/.a/.a
+/.aa/.a/.. /.aa
+/.aa/.a/./ /.aa/.a
+/.aa/.a//a /.aa/.a/a
+/.aa/.a//. /.aa/.a
+/.aa/.a/// /.aa/.a
+/.aa/..aaa /.aa/..aaa
+/.aa/..aa. /.aa/..aa.
+/.aa/..aa/ /.aa/..aa
+/.aa/..a.a /.aa/..a.a
+/.aa/..a.. /.aa/..a..
+/.aa/..a./ /.aa/..a.
+/.aa/..a/a /.aa/..a/a
+/.aa/..a/. /.aa/..a
+/.aa/..a// /.aa/..a
+/.aa/...aa /.aa/...aa
+/.aa/...a. /.aa/...a.
+/.aa/...a/ /.aa/...a
+/.aa/....a /.aa/....a
+/.aa/..... /.aa/.....
+/.aa/..../ /.aa/....
+/.aa/.../a /.aa/.../a
+/.aa/.../. /.aa/...
+/.aa/...// /.aa/...
+/.aa/../aa /aa
+/.aa/../a. /a.
+/.aa/../a/ /a
+/.aa/../.a /.a
+/.aa/../.. /
+/.aa/.././ /
+/.aa/..//a /a
+/.aa/..//. /
+/.aa/../// /
+/.aa/./aaa /.aa/aaa
+/.aa/./aa. /.aa/aa.
+/.aa/./aa/ /.aa/aa
+/.aa/./a.a /.aa/a.a
+/.aa/./a.. /.aa/a..
+/.aa/./a./ /.aa/a.
+/.aa/./a/a /.aa/a/a
+/.aa/./a/. /.aa/a
+/.aa/./a// /.aa/a
+/.aa/./.aa /.aa/.aa
+/.aa/./.a. /.aa/.a.
+/.aa/./.a/ /.aa/.a
+/.aa/./..a /.aa/..a
+/.aa/./... /.aa/...
+/.aa/./../ /
+/.aa/././a /.aa/a
+/.aa/././. /.aa
+/.aa/./.// /.aa
+/.aa/.//aa /.aa/aa
+/.aa/.//a. /.aa/a.
+/.aa/.//a/ /.aa/a
+/.aa/.//.a /.aa/.a
+/.aa/.//.. /
+/.aa/.//./ /.aa
+/.aa/.///a /.aa/a
+/.aa/.///. /.aa
+/.aa/.//// /.aa
+/.aa//aaaa /.aa/aaaa
+/.aa//aaa. /.aa/aaa.
+/.aa//aaa/ /.aa/aaa
+/.aa//aa.a /.aa/aa.a
+/.aa//aa.. /.aa/aa..
+/.aa//aa./ /.aa/aa.
+/.aa//aa/a /.aa/aa/a
+/.aa//aa/. /.aa/aa
+/.aa//aa// /.aa/aa
+/.aa//a.aa /.aa/a.aa
+/.aa//a.a. /.aa/a.a.
+/.aa//a.a/ /.aa/a.a
+/.aa//a..a /.aa/a..a
+/.aa//a... /.aa/a...
+/.aa//a../ /.aa/a..
+/.aa//a./a /.aa/a./a
+/.aa//a./. /.aa/a.
+/.aa//a.// /.aa/a.
+/.aa//a/aa /.aa/a/aa
+/.aa//a/a. /.aa/a/a.
+/.aa//a/a/ /.aa/a/a
+/.aa//a/.a /.aa/a/.a
+/.aa//a/.. /.aa
+/.aa//a/./ /.aa/a
+/.aa//a//a /.aa/a/a
+/.aa//a//. /.aa/a
+/.aa//a/// /.aa/a
+/.aa//.aaa /.aa/.aaa
+/.aa//.aa. /.aa/.aa.
+/.aa//.aa/ /.aa/.aa
+/.aa//.a.a /.aa/.a.a
+/.aa//.a.. /.aa/.a..
+/.aa//.a./ /.aa/.a.
+/.aa//.a/a /.aa/.a/a
+/.aa//.a/. /.aa/.a
+/.aa//.a// /.aa/.a
+/.aa//..aa /.aa/..aa
+/.aa//..a. /.aa/..a.
+/.aa//..a/ /.aa/..a
+/.aa//...a /.aa/...a
+/.aa//.... /.aa/....
+/.aa//.../ /.aa/...
+/.aa//../a /a
+/.aa//../. /
+/.aa//..// /
+/.aa//./aa /.aa/aa
+/.aa//./a. /.aa/a.
+/.aa//./a/ /.aa/a
+/.aa//./.a /.aa/.a
+/.aa//./.. /
+/.aa//././ /.aa
+/.aa//.//a /.aa/a
+/.aa//.//. /.aa
+/.aa//./// /.aa
+/.aa///aaa /.aa/aaa
+/.aa///aa. /.aa/aa.
+/.aa///aa/ /.aa/aa
+/.aa///a.a /.aa/a.a
+/.aa///a.. /.aa/a..
+/.aa///a./ /.aa/a.
+/.aa///a/a /.aa/a/a
+/.aa///a/. /.aa/a
+/.aa///a// /.aa/a
+/.aa///.aa /.aa/.aa
+/.aa///.a. /.aa/.a.
+/.aa///.a/ /.aa/.a
+/.aa///..a /.aa/..a
+/.aa///... /.aa/...
+/.aa///../ /
+/.aa///./a /.aa/a
+/.aa///./. /.aa
+/.aa///.// /.aa
+/.aa////aa /.aa/aa
+/.aa////a. /.aa/a.
+/.aa////a/ /.aa/a
+/.aa////.a /.aa/.a
+/.aa////.. /
+/.aa////./ /.aa
+/.aa/////a /.aa/a
+/.aa/////. /.aa
+/.aa////// /.aa
+/.a.aaaaaa /.a.aaaaaa
+/.a.aaaaa. /.a.aaaaa.
+/.a.aaaaa/ /.a.aaaaa
+/.a.aaaa.a /.a.aaaa.a
+/.a.aaaa.. /.a.aaaa..
+/.a.aaaa./ /.a.aaaa.
+/.a.aaaa/a /.a.aaaa/a
+/.a.aaaa/. /.a.aaaa
+/.a.aaaa// /.a.aaaa
+/.a.aaa.aa /.a.aaa.aa
+/.a.aaa.a. /.a.aaa.a.
+/.a.aaa.a/ /.a.aaa.a
+/.a.aaa..a /.a.aaa..a
+/.a.aaa... /.a.aaa...
+/.a.aaa../ /.a.aaa..
+/.a.aaa./a /.a.aaa./a
+/.a.aaa./. /.a.aaa.
+/.a.aaa.// /.a.aaa.
+/.a.aaa/aa /.a.aaa/aa
+/.a.aaa/a. /.a.aaa/a.
+/.a.aaa/a/ /.a.aaa/a
+/.a.aaa/.a /.a.aaa/.a
+/.a.aaa/.. /
+/.a.aaa/./ /.a.aaa
+/.a.aaa//a /.a.aaa/a
+/.a.aaa//. /.a.aaa
+/.a.aaa/// /.a.aaa
+/.a.aa.aaa /.a.aa.aaa
+/.a.aa.aa. /.a.aa.aa.
+/.a.aa.aa/ /.a.aa.aa
+/.a.aa.a.a /.a.aa.a.a
+/.a.aa.a.. /.a.aa.a..
+/.a.aa.a./ /.a.aa.a.
+/.a.aa.a/a /.a.aa.a/a
+/.a.aa.a/. /.a.aa.a
+/.a.aa.a// /.a.aa.a
+/.a.aa..aa /.a.aa..aa
+/.a.aa..a. /.a.aa..a.
+/.a.aa..a/ /.a.aa..a
+/.a.aa...a /.a.aa...a
+/.a.aa.... /.a.aa....
+/.a.aa.../ /.a.aa...
+/.a.aa../a /.a.aa../a
+/.a.aa../. /.a.aa..
+/.a.aa..// /.a.aa..
+/.a.aa./aa /.a.aa./aa
+/.a.aa./a. /.a.aa./a.
+/.a.aa./a/ /.a.aa./a
+/.a.aa./.a /.a.aa./.a
+/.a.aa./.. /
+/.a.aa././ /.a.aa.
+/.a.aa.//a /.a.aa./a
+/.a.aa.//. /.a.aa.
+/.a.aa./// /.a.aa.
+/.a.aa/aaa /.a.aa/aaa
+/.a.aa/aa. /.a.aa/aa.
+/.a.aa/aa/ /.a.aa/aa
+/.a.aa/a.a /.a.aa/a.a
+/.a.aa/a.. /.a.aa/a..
+/.a.aa/a./ /.a.aa/a.
+/.a.aa/a/a /.a.aa/a/a
+/.a.aa/a/. /.a.aa/a
+/.a.aa/a// /.a.aa/a
+/.a.aa/.aa /.a.aa/.aa
+/.a.aa/.a. /.a.aa/.a.
+/.a.aa/.a/ /.a.aa/.a
+/.a.aa/..a /.a.aa/..a
+/.a.aa/... /.a.aa/...
+/.a.aa/../ /
+/.a.aa/./a /.a.aa/a
+/.a.aa/./. /.a.aa
+/.a.aa/.// /.a.aa
+/.a.aa//aa /.a.aa/aa
+/.a.aa//a. /.a.aa/a.
+/.a.aa//a/ /.a.aa/a
+/.a.aa//.a /.a.aa/.a
+/.a.aa//.. /
+/.a.aa//./ /.a.aa
+/.a.aa///a /.a.aa/a
+/.a.aa///. /.a.aa
+/.a.aa//// /.a.aa
+/.a.a.aaaa /.a.a.aaaa
+/.a.a.aaa. /.a.a.aaa.
+/.a.a.aaa/ /.a.a.aaa
+/.a.a.aa.a /.a.a.aa.a
+/.a.a.aa.. /.a.a.aa..
+/.a.a.aa./ /.a.a.aa.
+/.a.a.aa/a /.a.a.aa/a
+/.a.a.aa/. /.a.a.aa
+/.a.a.aa// /.a.a.aa
+/.a.a.a.aa /.a.a.a.aa
+/.a.a.a.a. /.a.a.a.a.
+/.a.a.a.a/ /.a.a.a.a
+/.a.a.a..a /.a.a.a..a
+/.a.a.a... /.a.a.a...
+/.a.a.a../ /.a.a.a..
+/.a.a.a./a /.a.a.a./a
+/.a.a.a./. /.a.a.a.
+/.a.a.a.// /.a.a.a.
+/.a.a.a/aa /.a.a.a/aa
+/.a.a.a/a. /.a.a.a/a.
+/.a.a.a/a/ /.a.a.a/a
+/.a.a.a/.a /.a.a.a/.a
+/.a.a.a/.. /
+/.a.a.a/./ /.a.a.a
+/.a.a.a//a /.a.a.a/a
+/.a.a.a//. /.a.a.a
+/.a.a.a/// /.a.a.a
+/.a.a..aaa /.a.a..aaa
+/.a.a..aa. /.a.a..aa.
+/.a.a..aa/ /.a.a..aa
+/.a.a..a.a /.a.a..a.a
+/.a.a..a.. /.a.a..a..
+/.a.a..a./ /.a.a..a.
+/.a.a..a/a /.a.a..a/a
+/.a.a..a/. /.a.a..a
+/.a.a..a// /.a.a..a
+/.a.a...aa /.a.a...aa
+/.a.a...a. /.a.a...a.
+/.a.a...a/ /.a.a...a
+/.a.a....a /.a.a....a
+/.a.a..... /.a.a.....
+/.a.a..../ /.a.a....
+/.a.a.../a /.a.a.../a
+/.a.a.../. /.a.a...
+/.a.a...// /.a.a...
+/.a.a../aa /.a.a../aa
+/.a.a../a. /.a.a../a.
+/.a.a../a/ /.a.a../a
+/.a.a../.a /.a.a../.a
+/.a.a../.. /
+/.a.a.././ /.a.a..
+/.a.a..//a /.a.a../a
+/.a.a..//. /.a.a..
+/.a.a../// /.a.a..
+/.a.a./aaa /.a.a./aaa
+/.a.a./aa. /.a.a./aa.
+/.a.a./aa/ /.a.a./aa
+/.a.a./a.a /.a.a./a.a
+/.a.a./a.. /.a.a./a..
+/.a.a./a./ /.a.a./a.
+/.a.a./a/a /.a.a./a/a
+/.a.a./a/. /.a.a./a
+/.a.a./a// /.a.a./a
+/.a.a./.aa /.a.a./.aa
+/.a.a./.a. /.a.a./.a.
+/.a.a./.a/ /.a.a./.a
+/.a.a./..a /.a.a./..a
+/.a.a./... /.a.a./...
+/.a.a./../ /
+/.a.a././a /.a.a./a
+/.a.a././. /.a.a.
+/.a.a./.// /.a.a.
+/.a.a.//aa /.a.a./aa
+/.a.a.//a. /.a.a./a.
+/.a.a.//a/ /.a.a./a
+/.a.a.//.a /.a.a./.a
+/.a.a.//.. /
+/.a.a.//./ /.a.a.
+/.a.a.///a /.a.a./a
+/.a.a.///. /.a.a.
+/.a.a.//// /.a.a.
+/.a.a/aaaa /.a.a/aaaa
+/.a.a/aaa. /.a.a/aaa.
+/.a.a/aaa/ /.a.a/aaa
+/.a.a/aa.a /.a.a/aa.a
+/.a.a/aa.. /.a.a/aa..
+/.a.a/aa./ /.a.a/aa.
+/.a.a/aa/a /.a.a/aa/a
+/.a.a/aa/. /.a.a/aa
+/.a.a/aa// /.a.a/aa
+/.a.a/a.aa /.a.a/a.aa
+/.a.a/a.a. /.a.a/a.a.
+/.a.a/a.a/ /.a.a/a.a
+/.a.a/a..a /.a.a/a..a
+/.a.a/a... /.a.a/a...
+/.a.a/a../ /.a.a/a..
+/.a.a/a./a /.a.a/a./a
+/.a.a/a./. /.a.a/a.
+/.a.a/a.// /.a.a/a.
+/.a.a/a/aa /.a.a/a/aa
+/.a.a/a/a. /.a.a/a/a.
+/.a.a/a/a/ /.a.a/a/a
+/.a.a/a/.a /.a.a/a/.a
+/.a.a/a/.. /.a.a
+/.a.a/a/./ /.a.a/a
+/.a.a/a//a /.a.a/a/a
+/.a.a/a//. /.a.a/a
+/.a.a/a/// /.a.a/a
+/.a.a/.aaa /.a.a/.aaa
+/.a.a/.aa. /.a.a/.aa.
+/.a.a/.aa/ /.a.a/.aa
+/.a.a/.a.a /.a.a/.a.a
+/.a.a/.a.. /.a.a/.a..
+/.a.a/.a./ /.a.a/.a.
+/.a.a/.a/a /.a.a/.a/a
+/.a.a/.a/. /.a.a/.a
+/.a.a/.a// /.a.a/.a
+/.a.a/..aa /.a.a/..aa
+/.a.a/..a. /.a.a/..a.
+/.a.a/..a/ /.a.a/..a
+/.a.a/...a /.a.a/...a
+/.a.a/.... /.a.a/....
+/.a.a/.../ /.a.a/...
+/.a.a/../a /a
+/.a.a/../. /
+/.a.a/..// /
+/.a.a/./aa /.a.a/aa
+/.a.a/./a. /.a.a/a.
+/.a.a/./a/ /.a.a/a
+/.a.a/./.a /.a.a/.a
+/.a.a/./.. /
+/.a.a/././ /.a.a
+/.a.a/.//a /.a.a/a
+/.a.a/.//. /.a.a
+/.a.a/./// /.a.a
+/.a.a//aaa /.a.a/aaa
+/.a.a//aa. /.a.a/aa.
+/.a.a//aa/ /.a.a/aa
+/.a.a//a.a /.a.a/a.a
+/.a.a//a.. /.a.a/a..
+/.a.a//a./ /.a.a/a.
+/.a.a//a/a /.a.a/a/a
+/.a.a//a/. /.a.a/a
+/.a.a//a// /.a.a/a
+/.a.a//.aa /.a.a/.aa
+/.a.a//.a. /.a.a/.a.
+/.a.a//.a/ /.a.a/.a
+/.a.a//..a /.a.a/..a
+/.a.a//... /.a.a/...
+/.a.a//../ /
+/.a.a//./a /.a.a/a
+/.a.a//./. /.a.a
+/.a.a//.// /.a.a
+/.a.a///aa /.a.a/aa
+/.a.a///a. /.a.a/a.
+/.a.a///a/ /.a.a/a
+/.a.a///.a /.a.a/.a
+/.a.a///.. /
+/.a.a///./ /.a.a
+/.a.a////a /.a.a/a
+/.a.a////. /.a.a
+/.a.a///// /.a.a
+/.a..aaaaa /.a..aaaaa
+/.a..aaaa. /.a..aaaa.
+/.a..aaaa/ /.a..aaaa
+/.a..aaa.a /.a..aaa.a
+/.a..aaa.. /.a..aaa..
+/.a..aaa./ /.a..aaa.
+/.a..aaa/a /.a..aaa/a
+/.a..aaa/. /.a..aaa
+/.a..aaa// /.a..aaa
+/.a..aa.aa /.a..aa.aa
+/.a..aa.a. /.a..aa.a.
+/.a..aa.a/ /.a..aa.a
+/.a..aa..a /.a..aa..a
+/.a..aa... /.a..aa...
+/.a..aa../ /.a..aa..
+/.a..aa./a /.a..aa./a
+/.a..aa./. /.a..aa.
+/.a..aa.// /.a..aa.
+/.a..aa/aa /.a..aa/aa
+/.a..aa/a. /.a..aa/a.
+/.a..aa/a/ /.a..aa/a
+/.a..aa/.a /.a..aa/.a
+/.a..aa/.. /
+/.a..aa/./ /.a..aa
+/.a..aa//a /.a..aa/a
+/.a..aa//. /.a..aa
+/.a..aa/// /.a..aa
+/.a..a.aaa /.a..a.aaa
+/.a..a.aa. /.a..a.aa.
+/.a..a.aa/ /.a..a.aa
+/.a..a.a.a /.a..a.a.a
+/.a..a.a.. /.a..a.a..
+/.a..a.a./ /.a..a.a.
+/.a..a.a/a /.a..a.a/a
+/.a..a.a/. /.a..a.a
+/.a..a.a// /.a..a.a
+/.a..a..aa /.a..a..aa
+/.a..a..a. /.a..a..a.
+/.a..a..a/ /.a..a..a
+/.a..a...a /.a..a...a
+/.a..a.... /.a..a....
+/.a..a.../ /.a..a...
+/.a..a../a /.a..a../a
+/.a..a../. /.a..a..
+/.a..a..// /.a..a..
+/.a..a./aa /.a..a./aa
+/.a..a./a. /.a..a./a.
+/.a..a./a/ /.a..a./a
+/.a..a./.a /.a..a./.a
+/.a..a./.. /
+/.a..a././ /.a..a.
+/.a..a.//a /.a..a./a
+/.a..a.//. /.a..a.
+/.a..a./// /.a..a.
+/.a..a/aaa /.a..a/aaa
+/.a..a/aa. /.a..a/aa.
+/.a..a/aa/ /.a..a/aa
+/.a..a/a.a /.a..a/a.a
+/.a..a/a.. /.a..a/a..
+/.a..a/a./ /.a..a/a.
+/.a..a/a/a /.a..a/a/a
+/.a..a/a/. /.a..a/a
+/.a..a/a// /.a..a/a
+/.a..a/.aa /.a..a/.aa
+/.a..a/.a. /.a..a/.a.
+/.a..a/.a/ /.a..a/.a
+/.a..a/..a /.a..a/..a
+/.a..a/... /.a..a/...
+/.a..a/../ /
+/.a..a/./a /.a..a/a
+/.a..a/./. /.a..a
+/.a..a/.// /.a..a
+/.a..a//aa /.a..a/aa
+/.a..a//a. /.a..a/a.
+/.a..a//a/ /.a..a/a
+/.a..a//.a /.a..a/.a
+/.a..a//.. /
+/.a..a//./ /.a..a
+/.a..a///a /.a..a/a
+/.a..a///. /.a..a
+/.a..a//// /.a..a
+/.a...aaaa /.a...aaaa
+/.a...aaa. /.a...aaa.
+/.a...aaa/ /.a...aaa
+/.a...aa.a /.a...aa.a
+/.a...aa.. /.a...aa..
+/.a...aa./ /.a...aa.
+/.a...aa/a /.a...aa/a
+/.a...aa/. /.a...aa
+/.a...aa// /.a...aa
+/.a...a.aa /.a...a.aa
+/.a...a.a. /.a...a.a.
+/.a...a.a/ /.a...a.a
+/.a...a..a /.a...a..a
+/.a...a... /.a...a...
+/.a...a../ /.a...a..
+/.a...a./a /.a...a./a
+/.a...a./. /.a...a.
+/.a...a.// /.a...a.
+/.a...a/aa /.a...a/aa
+/.a...a/a. /.a...a/a.
+/.a...a/a/ /.a...a/a
+/.a...a/.a /.a...a/.a
+/.a...a/.. /
+/.a...a/./ /.a...a
+/.a...a//a /.a...a/a
+/.a...a//. /.a...a
+/.a...a/// /.a...a
+/.a....aaa /.a....aaa
+/.a....aa. /.a....aa.
+/.a....aa/ /.a....aa
+/.a....a.a /.a....a.a
+/.a....a.. /.a....a..
+/.a....a./ /.a....a.
+/.a....a/a /.a....a/a
+/.a....a/. /.a....a
+/.a....a// /.a....a
+/.a.....aa /.a.....aa
+/.a.....a. /.a.....a.
+/.a.....a/ /.a.....a
+/.a......a /.a......a
+/.a....... /.a.......
+/.a....../ /.a......
+/.a...../a /.a...../a
+/.a...../. /.a.....
+/.a.....// /.a.....
+/.a..../aa /.a..../aa
+/.a..../a. /.a..../a.
+/.a..../a/ /.a..../a
+/.a..../.a /.a..../.a
+/.a..../.. /
+/.a...././ /.a....
+/.a....//a /.a..../a
+/.a....//. /.a....
+/.a..../// /.a....
+/.a.../aaa /.a.../aaa
+/.a.../aa. /.a.../aa.
+/.a.../aa/ /.a.../aa
+/.a.../a.a /.a.../a.a
+/.a.../a.. /.a.../a..
+/.a.../a./ /.a.../a.
+/.a.../a/a /.a.../a/a
+/.a.../a/. /.a.../a
+/.a.../a// /.a.../a
+/.a.../.aa /.a.../.aa
+/.a.../.a. /.a.../.a.
+/.a.../.a/ /.a.../.a
+/.a.../..a /.a.../..a
+/.a.../... /.a.../...
+/.a.../../ /
+/.a..././a /.a.../a
+/.a..././. /.a...
+/.a.../.// /.a...
+/.a...//aa /.a.../aa
+/.a...//a. /.a.../a.
+/.a...//a/ /.a.../a
+/.a...//.a /.a.../.a
+/.a...//.. /
+/.a...//./ /.a...
+/.a...///a /.a.../a
+/.a...///. /.a...
+/.a...//// /.a...
+/.a../aaaa /.a../aaaa
+/.a../aaa. /.a../aaa.
+/.a../aaa/ /.a../aaa
+/.a../aa.a /.a../aa.a
+/.a../aa.. /.a../aa..
+/.a../aa./ /.a../aa.
+/.a../aa/a /.a../aa/a
+/.a../aa/. /.a../aa
+/.a../aa// /.a../aa
+/.a../a.aa /.a../a.aa
+/.a../a.a. /.a../a.a.
+/.a../a.a/ /.a../a.a
+/.a../a..a /.a../a..a
+/.a../a... /.a../a...
+/.a../a../ /.a../a..
+/.a../a./a /.a../a./a
+/.a../a./. /.a../a.
+/.a../a.// /.a../a.
+/.a../a/aa /.a../a/aa
+/.a../a/a. /.a../a/a.
+/.a../a/a/ /.a../a/a
+/.a../a/.a /.a../a/.a
+/.a../a/.. /.a..
+/.a../a/./ /.a../a
+/.a../a//a /.a../a/a
+/.a../a//. /.a../a
+/.a../a/// /.a../a
+/.a../.aaa /.a../.aaa
+/.a../.aa. /.a../.aa.
+/.a../.aa/ /.a../.aa
+/.a../.a.a /.a../.a.a
+/.a../.a.. /.a../.a..
+/.a../.a./ /.a../.a.
+/.a../.a/a /.a../.a/a
+/.a../.a/. /.a../.a
+/.a../.a// /.a../.a
+/.a../..aa /.a../..aa
+/.a../..a. /.a../..a.
+/.a../..a/ /.a../..a
+/.a../...a /.a../...a
+/.a../.... /.a../....
+/.a../.../ /.a../...
+/.a../../a /a
+/.a../../. /
+/.a../..// /
+/.a.././aa /.a../aa
+/.a.././a. /.a../a.
+/.a.././a/ /.a../a
+/.a.././.a /.a../.a
+/.a.././.. /
+/.a../././ /.a..
+/.a.././/a /.a../a
+/.a.././/. /.a..
+/.a.././// /.a..
+/.a..//aaa /.a../aaa
+/.a..//aa. /.a../aa.
+/.a..//aa/ /.a../aa
+/.a..//a.a /.a../a.a
+/.a..//a.. /.a../a..
+/.a..//a./ /.a../a.
+/.a..//a/a /.a../a/a
+/.a..//a/. /.a../a
+/.a..//a// /.a../a
+/.a..//.aa /.a../.aa
+/.a..//.a. /.a../.a.
+/.a..//.a/ /.a../.a
+/.a..//..a /.a../..a
+/.a..//... /.a../...
+/.a..//../ /
+/.a..//./a /.a../a
+/.a..//./. /.a..
+/.a..//.// /.a..
+/.a..///aa /.a../aa
+/.a..///a. /.a../a.
+/.a..///a/ /.a../a
+/.a..///.a /.a../.a
+/.a..///.. /
+/.a..///./ /.a..
+/.a..////a /.a../a
+/.a..////. /.a..
+/.a..///// /.a..
+/.a./aaaaa /.a./aaaaa
+/.a./aaaa. /.a./aaaa.
+/.a./aaaa/ /.a./aaaa
+/.a./aaa.a /.a./aaa.a
+/.a./aaa.. /.a./aaa..
+/.a./aaa./ /.a./aaa.
+/.a./aaa/a /.a./aaa/a
+/.a./aaa/. /.a./aaa
+/.a./aaa// /.a./aaa
+/.a./aa.aa /.a./aa.aa
+/.a./aa.a. /.a./aa.a.
+/.a./aa.a/ /.a./aa.a
+/.a./aa..a /.a./aa..a
+/.a./aa... /.a./aa...
+/.a./aa../ /.a./aa..
+/.a./aa./a /.a./aa./a
+/.a./aa./. /.a./aa.
+/.a./aa.// /.a./aa.
+/.a./aa/aa /.a./aa/aa
+/.a./aa/a. /.a./aa/a.
+/.a./aa/a/ /.a./aa/a
+/.a./aa/.a /.a./aa/.a
+/.a./aa/.. /.a.
+/.a./aa/./ /.a./aa
+/.a./aa//a /.a./aa/a
+/.a./aa//. /.a./aa
+/.a./aa/// /.a./aa
+/.a./a.aaa /.a./a.aaa
+/.a./a.aa. /.a./a.aa.
+/.a./a.aa/ /.a./a.aa
+/.a./a.a.a /.a./a.a.a
+/.a./a.a.. /.a./a.a..
+/.a./a.a./ /.a./a.a.
+/.a./a.a/a /.a./a.a/a
+/.a./a.a/. /.a./a.a
+/.a./a.a// /.a./a.a
+/.a./a..aa /.a./a..aa
+/.a./a..a. /.a./a..a.
+/.a./a..a/ /.a./a..a
+/.a./a...a /.a./a...a
+/.a./a.... /.a./a....
+/.a./a.../ /.a./a...
+/.a./a../a /.a./a../a
+/.a./a../. /.a./a..
+/.a./a..// /.a./a..
+/.a./a./aa /.a./a./aa
+/.a./a./a. /.a./a./a.
+/.a./a./a/ /.a./a./a
+/.a./a./.a /.a./a./.a
+/.a./a./.. /.a.
+/.a./a././ /.a./a.
+/.a./a.//a /.a./a./a
+/.a./a.//. /.a./a.
+/.a./a./// /.a./a.
+/.a./a/aaa /.a./a/aaa
+/.a./a/aa. /.a./a/aa.
+/.a./a/aa/ /.a./a/aa
+/.a./a/a.a /.a./a/a.a
+/.a./a/a.. /.a./a/a..
+/.a./a/a./ /.a./a/a.
+/.a./a/a/a /.a./a/a/a
+/.a./a/a/. /.a./a/a
+/.a./a/a// /.a./a/a
+/.a./a/.aa /.a./a/.aa
+/.a./a/.a. /.a./a/.a.
+/.a./a/.a/ /.a./a/.a
+/.a./a/..a /.a./a/..a
+/.a./a/... /.a./a/...
+/.a./a/../ /.a.
+/.a./a/./a /.a./a/a
+/.a./a/./. /.a./a
+/.a./a/.// /.a./a
+/.a./a//aa /.a./a/aa
+/.a./a//a. /.a./a/a.
+/.a./a//a/ /.a./a/a
+/.a./a//.a /.a./a/.a
+/.a./a//.. /.a.
+/.a./a//./ /.a./a
+/.a./a///a /.a./a/a
+/.a./a///. /.a./a
+/.a./a//// /.a./a
+/.a./.aaaa /.a./.aaaa
+/.a./.aaa. /.a./.aaa.
+/.a./.aaa/ /.a./.aaa
+/.a./.aa.a /.a./.aa.a
+/.a./.aa.. /.a./.aa..
+/.a./.aa./ /.a./.aa.
+/.a./.aa/a /.a./.aa/a
+/.a./.aa/. /.a./.aa
+/.a./.aa// /.a./.aa
+/.a./.a.aa /.a./.a.aa
+/.a./.a.a. /.a./.a.a.
+/.a./.a.a/ /.a./.a.a
+/.a./.a..a /.a./.a..a
+/.a./.a... /.a./.a...
+/.a./.a../ /.a./.a..
+/.a./.a./a /.a./.a./a
+/.a./.a./. /.a./.a.
+/.a./.a.// /.a./.a.
+/.a./.a/aa /.a./.a/aa
+/.a./.a/a. /.a./.a/a.
+/.a./.a/a/ /.a./.a/a
+/.a./.a/.a /.a./.a/.a
+/.a./.a/.. /.a.
+/.a./.a/./ /.a./.a
+/.a./.a//a /.a./.a/a
+/.a./.a//. /.a./.a
+/.a./.a/// /.a./.a
+/.a./..aaa /.a./..aaa
+/.a./..aa. /.a./..aa.
+/.a./..aa/ /.a./..aa
+/.a./..a.a /.a./..a.a
+/.a./..a.. /.a./..a..
+/.a./..a./ /.a./..a.
+/.a./..a/a /.a./..a/a
+/.a./..a/. /.a./..a
+/.a./..a// /.a./..a
+/.a./...aa /.a./...aa
+/.a./...a. /.a./...a.
+/.a./...a/ /.a./...a
+/.a./....a /.a./....a
+/.a./..... /.a./.....
+/.a./..../ /.a./....
+/.a./.../a /.a./.../a
+/.a./.../. /.a./...
+/.a./...// /.a./...
+/.a./../aa /aa
+/.a./../a. /a.
+/.a./../a/ /a
+/.a./../.a /.a
+/.a./../.. /
+/.a./.././ /
+/.a./..//a /a
+/.a./..//. /
+/.a./../// /
+/.a././aaa /.a./aaa
+/.a././aa. /.a./aa.
+/.a././aa/ /.a./aa
+/.a././a.a /.a./a.a
+/.a././a.. /.a./a..
+/.a././a./ /.a./a.
+/.a././a/a /.a./a/a
+/.a././a/. /.a./a
+/.a././a// /.a./a
+/.a././.aa /.a./.aa
+/.a././.a. /.a./.a.
+/.a././.a/ /.a./.a
+/.a././..a /.a./..a
+/.a././... /.a./...
+/.a././../ /
+/.a./././a /.a./a
+/.a./././. /.a.
+/.a././.// /.a.
+/.a././/aa /.a./aa
+/.a././/a. /.a./a.
+/.a././/a/ /.a./a
+/.a././/.a /.a./.a
+/.a././/.. /
+/.a././/./ /.a.
+/.a././//a /.a./a
+/.a././//. /.a.
+/.a././/// /.a.
+/.a.//aaaa /.a./aaaa
+/.a.//aaa. /.a./aaa.
+/.a.//aaa/ /.a./aaa
+/.a.//aa.a /.a./aa.a
+/.a.//aa.. /.a./aa..
+/.a.//aa./ /.a./aa.
+/.a.//aa/a /.a./aa/a
+/.a.//aa/. /.a./aa
+/.a.//aa// /.a./aa
+/.a.//a.aa /.a./a.aa
+/.a.//a.a. /.a./a.a.
+/.a.//a.a/ /.a./a.a
+/.a.//a..a /.a./a..a
+/.a.//a... /.a./a...
+/.a.//a../ /.a./a..
+/.a.//a./a /.a./a./a
+/.a.//a./. /.a./a.
+/.a.//a.// /.a./a.
+/.a.//a/aa /.a./a/aa
+/.a.//a/a. /.a./a/a.
+/.a.//a/a/ /.a./a/a
+/.a.//a/.a /.a./a/.a
+/.a.//a/.. /.a.
+/.a.//a/./ /.a./a
+/.a.//a//a /.a./a/a
+/.a.//a//. /.a./a
+/.a.//a/// /.a./a
+/.a.//.aaa /.a./.aaa
+/.a.//.aa. /.a./.aa.
+/.a.//.aa/ /.a./.aa
+/.a.//.a.a /.a./.a.a
+/.a.//.a.. /.a./.a..
+/.a.//.a./ /.a./.a.
+/.a.//.a/a /.a./.a/a
+/.a.//.a/. /.a./.a
+/.a.//.a// /.a./.a
+/.a.//..aa /.a./..aa
+/.a.//..a. /.a./..a.
+/.a.//..a/ /.a./..a
+/.a.//...a /.a./...a
+/.a.//.... /.a./....
+/.a.//.../ /.a./...
+/.a.//../a /a
+/.a.//../. /
+/.a.//..// /
+/.a.//./aa /.a./aa
+/.a.//./a. /.a./a.
+/.a.//./a/ /.a./a
+/.a.//./.a /.a./.a
+/.a.//./.. /
+/.a.//././ /.a.
+/.a.//.//a /.a./a
+/.a.//.//. /.a.
+/.a.//./// /.a.
+/.a.///aaa /.a./aaa
+/.a.///aa. /.a./aa.
+/.a.///aa/ /.a./aa
+/.a.///a.a /.a./a.a
+/.a.///a.. /.a./a..
+/.a.///a./ /.a./a.
+/.a.///a/a /.a./a/a
+/.a.///a/. /.a./a
+/.a.///a// /.a./a
+/.a.///.aa /.a./.aa
+/.a.///.a. /.a./.a.
+/.a.///.a/ /.a./.a
+/.a.///..a /.a./..a
+/.a.///... /.a./...
+/.a.///../ /
+/.a.///./a /.a./a
+/.a.///./. /.a.
+/.a.///.// /.a.
+/.a.////aa /.a./aa
+/.a.////a. /.a./a.
+/.a.////a/ /.a./a
+/.a.////.a /.a./.a
+/.a.////.. /
+/.a.////./ /.a.
+/.a./////a /.a./a
+/.a./////. /.a.
+/.a.////// /.a.
+/.a/aaaaaa /.a/aaaaaa
+/.a/aaaaa. /.a/aaaaa.
+/.a/aaaaa/ /.a/aaaaa
+/.a/aaaa.a /.a/aaaa.a
+/.a/aaaa.. /.a/aaaa..
+/.a/aaaa./ /.a/aaaa.
+/.a/aaaa/a /.a/aaaa/a
+/.a/aaaa/. /.a/aaaa
+/.a/aaaa// /.a/aaaa
+/.a/aaa.aa /.a/aaa.aa
+/.a/aaa.a. /.a/aaa.a.
+/.a/aaa.a/ /.a/aaa.a
+/.a/aaa..a /.a/aaa..a
+/.a/aaa... /.a/aaa...
+/.a/aaa../ /.a/aaa..
+/.a/aaa./a /.a/aaa./a
+/.a/aaa./. /.a/aaa.
+/.a/aaa.// /.a/aaa.
+/.a/aaa/aa /.a/aaa/aa
+/.a/aaa/a. /.a/aaa/a.
+/.a/aaa/a/ /.a/aaa/a
+/.a/aaa/.a /.a/aaa/.a
+/.a/aaa/.. /.a
+/.a/aaa/./ /.a/aaa
+/.a/aaa//a /.a/aaa/a
+/.a/aaa//. /.a/aaa
+/.a/aaa/// /.a/aaa
+/.a/aa.aaa /.a/aa.aaa
+/.a/aa.aa. /.a/aa.aa.
+/.a/aa.aa/ /.a/aa.aa
+/.a/aa.a.a /.a/aa.a.a
+/.a/aa.a.. /.a/aa.a..
+/.a/aa.a./ /.a/aa.a.
+/.a/aa.a/a /.a/aa.a/a
+/.a/aa.a/. /.a/aa.a
+/.a/aa.a// /.a/aa.a
+/.a/aa..aa /.a/aa..aa
+/.a/aa..a. /.a/aa..a.
+/.a/aa..a/ /.a/aa..a
+/.a/aa...a /.a/aa...a
+/.a/aa.... /.a/aa....
+/.a/aa.../ /.a/aa...
+/.a/aa../a /.a/aa../a
+/.a/aa../. /.a/aa..
+/.a/aa..// /.a/aa..
+/.a/aa./aa /.a/aa./aa
+/.a/aa./a. /.a/aa./a.
+/.a/aa./a/ /.a/aa./a
+/.a/aa./.a /.a/aa./.a
+/.a/aa./.. /.a
+/.a/aa././ /.a/aa.
+/.a/aa.//a /.a/aa./a
+/.a/aa.//. /.a/aa.
+/.a/aa./// /.a/aa.
+/.a/aa/aaa /.a/aa/aaa
+/.a/aa/aa. /.a/aa/aa.
+/.a/aa/aa/ /.a/aa/aa
+/.a/aa/a.a /.a/aa/a.a
+/.a/aa/a.. /.a/aa/a..
+/.a/aa/a./ /.a/aa/a.
+/.a/aa/a/a /.a/aa/a/a
+/.a/aa/a/. /.a/aa/a
+/.a/aa/a// /.a/aa/a
+/.a/aa/.aa /.a/aa/.aa
+/.a/aa/.a. /.a/aa/.a.
+/.a/aa/.a/ /.a/aa/.a
+/.a/aa/..a /.a/aa/..a
+/.a/aa/... /.a/aa/...
+/.a/aa/../ /.a
+/.a/aa/./a /.a/aa/a
+/.a/aa/./. /.a/aa
+/.a/aa/.// /.a/aa
+/.a/aa//aa /.a/aa/aa
+/.a/aa//a. /.a/aa/a.
+/.a/aa//a/ /.a/aa/a
+/.a/aa//.a /.a/aa/.a
+/.a/aa//.. /.a
+/.a/aa//./ /.a/aa
+/.a/aa///a /.a/aa/a
+/.a/aa///. /.a/aa
+/.a/aa//// /.a/aa
+/.a/a.aaaa /.a/a.aaaa
+/.a/a.aaa. /.a/a.aaa.
+/.a/a.aaa/ /.a/a.aaa
+/.a/a.aa.a /.a/a.aa.a
+/.a/a.aa.. /.a/a.aa..
+/.a/a.aa./ /.a/a.aa.
+/.a/a.aa/a /.a/a.aa/a
+/.a/a.aa/. /.a/a.aa
+/.a/a.aa// /.a/a.aa
+/.a/a.a.aa /.a/a.a.aa
+/.a/a.a.a. /.a/a.a.a.
+/.a/a.a.a/ /.a/a.a.a
+/.a/a.a..a /.a/a.a..a
+/.a/a.a... /.a/a.a...
+/.a/a.a../ /.a/a.a..
+/.a/a.a./a /.a/a.a./a
+/.a/a.a./. /.a/a.a.
+/.a/a.a.// /.a/a.a.
+/.a/a.a/aa /.a/a.a/aa
+/.a/a.a/a. /.a/a.a/a.
+/.a/a.a/a/ /.a/a.a/a
+/.a/a.a/.a /.a/a.a/.a
+/.a/a.a/.. /.a
+/.a/a.a/./ /.a/a.a
+/.a/a.a//a /.a/a.a/a
+/.a/a.a//. /.a/a.a
+/.a/a.a/// /.a/a.a
+/.a/a..aaa /.a/a..aaa
+/.a/a..aa. /.a/a..aa.
+/.a/a..aa/ /.a/a..aa
+/.a/a..a.a /.a/a..a.a
+/.a/a..a.. /.a/a..a..
+/.a/a..a./ /.a/a..a.
+/.a/a..a/a /.a/a..a/a
+/.a/a..a/. /.a/a..a
+/.a/a..a// /.a/a..a
+/.a/a...aa /.a/a...aa
+/.a/a...a. /.a/a...a.
+/.a/a...a/ /.a/a...a
+/.a/a....a /.a/a....a
+/.a/a..... /.a/a.....
+/.a/a..../ /.a/a....
+/.a/a.../a /.a/a.../a
+/.a/a.../. /.a/a...
+/.a/a...// /.a/a...
+/.a/a../aa /.a/a../aa
+/.a/a../a. /.a/a../a.
+/.a/a../a/ /.a/a../a
+/.a/a../.a /.a/a../.a
+/.a/a../.. /.a
+/.a/a.././ /.a/a..
+/.a/a..//a /.a/a../a
+/.a/a..//. /.a/a..
+/.a/a../// /.a/a..
+/.a/a./aaa /.a/a./aaa
+/.a/a./aa. /.a/a./aa.
+/.a/a./aa/ /.a/a./aa
+/.a/a./a.a /.a/a./a.a
+/.a/a./a.. /.a/a./a..
+/.a/a./a./ /.a/a./a.
+/.a/a./a/a /.a/a./a/a
+/.a/a./a/. /.a/a./a
+/.a/a./a// /.a/a./a
+/.a/a./.aa /.a/a./.aa
+/.a/a./.a. /.a/a./.a.
+/.a/a./.a/ /.a/a./.a
+/.a/a./..a /.a/a./..a
+/.a/a./... /.a/a./...
+/.a/a./../ /.a
+/.a/a././a /.a/a./a
+/.a/a././. /.a/a.
+/.a/a./.// /.a/a.
+/.a/a.//aa /.a/a./aa
+/.a/a.//a. /.a/a./a.
+/.a/a.//a/ /.a/a./a
+/.a/a.//.a /.a/a./.a
+/.a/a.//.. /.a
+/.a/a.//./ /.a/a.
+/.a/a.///a /.a/a./a
+/.a/a.///. /.a/a.
+/.a/a.//// /.a/a.
+/.a/a/aaaa /.a/a/aaaa
+/.a/a/aaa. /.a/a/aaa.
+/.a/a/aaa/ /.a/a/aaa
+/.a/a/aa.a /.a/a/aa.a
+/.a/a/aa.. /.a/a/aa..
+/.a/a/aa./ /.a/a/aa.
+/.a/a/aa/a /.a/a/aa/a
+/.a/a/aa/. /.a/a/aa
+/.a/a/aa// /.a/a/aa
+/.a/a/a.aa /.a/a/a.aa
+/.a/a/a.a. /.a/a/a.a.
+/.a/a/a.a/ /.a/a/a.a
+/.a/a/a..a /.a/a/a..a
+/.a/a/a... /.a/a/a...
+/.a/a/a../ /.a/a/a..
+/.a/a/a./a /.a/a/a./a
+/.a/a/a./. /.a/a/a.
+/.a/a/a.// /.a/a/a.
+/.a/a/a/aa /.a/a/a/aa
+/.a/a/a/a. /.a/a/a/a.
+/.a/a/a/a/ /.a/a/a/a
+/.a/a/a/.a /.a/a/a/.a
+/.a/a/a/.. /.a/a
+/.a/a/a/./ /.a/a/a
+/.a/a/a//a /.a/a/a/a
+/.a/a/a//. /.a/a/a
+/.a/a/a/// /.a/a/a
+/.a/a/.aaa /.a/a/.aaa
+/.a/a/.aa. /.a/a/.aa.
+/.a/a/.aa/ /.a/a/.aa
+/.a/a/.a.a /.a/a/.a.a
+/.a/a/.a.. /.a/a/.a..
+/.a/a/.a./ /.a/a/.a.
+/.a/a/.a/a /.a/a/.a/a
+/.a/a/.a/. /.a/a/.a
+/.a/a/.a// /.a/a/.a
+/.a/a/..aa /.a/a/..aa
+/.a/a/..a. /.a/a/..a.
+/.a/a/..a/ /.a/a/..a
+/.a/a/...a /.a/a/...a
+/.a/a/.... /.a/a/....
+/.a/a/.../ /.a/a/...
+/.a/a/../a /.a/a
+/.a/a/../. /.a
+/.a/a/..// /.a
+/.a/a/./aa /.a/a/aa
+/.a/a/./a. /.a/a/a.
+/.a/a/./a/ /.a/a/a
+/.a/a/./.a /.a/a/.a
+/.a/a/./.. /.a
+/.a/a/././ /.a/a
+/.a/a/.//a /.a/a/a
+/.a/a/.//. /.a/a
+/.a/a/./// /.a/a
+/.a/a//aaa /.a/a/aaa
+/.a/a//aa. /.a/a/aa.
+/.a/a//aa/ /.a/a/aa
+/.a/a//a.a /.a/a/a.a
+/.a/a//a.. /.a/a/a..
+/.a/a//a./ /.a/a/a.
+/.a/a//a/a /.a/a/a/a
+/.a/a//a/. /.a/a/a
+/.a/a//a// /.a/a/a
+/.a/a//.aa /.a/a/.aa
+/.a/a//.a. /.a/a/.a.
+/.a/a//.a/ /.a/a/.a
+/.a/a//..a /.a/a/..a
+/.a/a//... /.a/a/...
+/.a/a//../ /.a
+/.a/a//./a /.a/a/a
+/.a/a//./. /.a/a
+/.a/a//.// /.a/a
+/.a/a///aa /.a/a/aa
+/.a/a///a. /.a/a/a.
+/.a/a///a/ /.a/a/a
+/.a/a///.a /.a/a/.a
+/.a/a///.. /.a
+/.a/a///./ /.a/a
+/.a/a////a /.a/a/a
+/.a/a////. /.a/a
+/.a/a///// /.a/a
+/.a/.aaaaa /.a/.aaaaa
+/.a/.aaaa. /.a/.aaaa.
+/.a/.aaaa/ /.a/.aaaa
+/.a/.aaa.a /.a/.aaa.a
+/.a/.aaa.. /.a/.aaa..
+/.a/.aaa./ /.a/.aaa.
+/.a/.aaa/a /.a/.aaa/a
+/.a/.aaa/. /.a/.aaa
+/.a/.aaa// /.a/.aaa
+/.a/.aa.aa /.a/.aa.aa
+/.a/.aa.a. /.a/.aa.a.
+/.a/.aa.a/ /.a/.aa.a
+/.a/.aa..a /.a/.aa..a
+/.a/.aa... /.a/.aa...
+/.a/.aa../ /.a/.aa..
+/.a/.aa./a /.a/.aa./a
+/.a/.aa./. /.a/.aa.
+/.a/.aa.// /.a/.aa.
+/.a/.aa/aa /.a/.aa/aa
+/.a/.aa/a. /.a/.aa/a.
+/.a/.aa/a/ /.a/.aa/a
+/.a/.aa/.a /.a/.aa/.a
+/.a/.aa/.. /.a
+/.a/.aa/./ /.a/.aa
+/.a/.aa//a /.a/.aa/a
+/.a/.aa//. /.a/.aa
+/.a/.aa/// /.a/.aa
+/.a/.a.aaa /.a/.a.aaa
+/.a/.a.aa. /.a/.a.aa.
+/.a/.a.aa/ /.a/.a.aa
+/.a/.a.a.a /.a/.a.a.a
+/.a/.a.a.. /.a/.a.a..
+/.a/.a.a./ /.a/.a.a.
+/.a/.a.a/a /.a/.a.a/a
+/.a/.a.a/. /.a/.a.a
+/.a/.a.a// /.a/.a.a
+/.a/.a..aa /.a/.a..aa
+/.a/.a..a. /.a/.a..a.
+/.a/.a..a/ /.a/.a..a
+/.a/.a...a /.a/.a...a
+/.a/.a.... /.a/.a....
+/.a/.a.../ /.a/.a...
+/.a/.a../a /.a/.a../a
+/.a/.a../. /.a/.a..
+/.a/.a..// /.a/.a..
+/.a/.a./aa /.a/.a./aa
+/.a/.a./a. /.a/.a./a.
+/.a/.a./a/ /.a/.a./a
+/.a/.a./.a /.a/.a./.a
+/.a/.a./.. /.a
+/.a/.a././ /.a/.a.
+/.a/.a.//a /.a/.a./a
+/.a/.a.//. /.a/.a.
+/.a/.a./// /.a/.a.
+/.a/.a/aaa /.a/.a/aaa
+/.a/.a/aa. /.a/.a/aa.
+/.a/.a/aa/ /.a/.a/aa
+/.a/.a/a.a /.a/.a/a.a
+/.a/.a/a.. /.a/.a/a..
+/.a/.a/a./ /.a/.a/a.
+/.a/.a/a/a /.a/.a/a/a
+/.a/.a/a/. /.a/.a/a
+/.a/.a/a// /.a/.a/a
+/.a/.a/.aa /.a/.a/.aa
+/.a/.a/.a. /.a/.a/.a.
+/.a/.a/.a/ /.a/.a/.a
+/.a/.a/..a /.a/.a/..a
+/.a/.a/... /.a/.a/...
+/.a/.a/../ /.a
+/.a/.a/./a /.a/.a/a
+/.a/.a/./. /.a/.a
+/.a/.a/.// /.a/.a
+/.a/.a//aa /.a/.a/aa
+/.a/.a//a. /.a/.a/a.
+/.a/.a//a/ /.a/.a/a
+/.a/.a//.a /.a/.a/.a
+/.a/.a//.. /.a
+/.a/.a//./ /.a/.a
+/.a/.a///a /.a/.a/a
+/.a/.a///. /.a/.a
+/.a/.a//// /.a/.a
+/.a/..aaaa /.a/..aaaa
+/.a/..aaa. /.a/..aaa.
+/.a/..aaa/ /.a/..aaa
+/.a/..aa.a /.a/..aa.a
+/.a/..aa.. /.a/..aa..
+/.a/..aa./ /.a/..aa.
+/.a/..aa/a /.a/..aa/a
+/.a/..aa/. /.a/..aa
+/.a/..aa// /.a/..aa
+/.a/..a.aa /.a/..a.aa
+/.a/..a.a. /.a/..a.a.
+/.a/..a.a/ /.a/..a.a
+/.a/..a..a /.a/..a..a
+/.a/..a... /.a/..a...
+/.a/..a../ /.a/..a..
+/.a/..a./a /.a/..a./a
+/.a/..a./. /.a/..a.
+/.a/..a.// /.a/..a.
+/.a/..a/aa /.a/..a/aa
+/.a/..a/a. /.a/..a/a.
+/.a/..a/a/ /.a/..a/a
+/.a/..a/.a /.a/..a/.a
+/.a/..a/.. /.a
+/.a/..a/./ /.a/..a
+/.a/..a//a /.a/..a/a
+/.a/..a//. /.a/..a
+/.a/..a/// /.a/..a
+/.a/...aaa /.a/...aaa
+/.a/...aa. /.a/...aa.
+/.a/...aa/ /.a/...aa
+/.a/...a.a /.a/...a.a
+/.a/...a.. /.a/...a..
+/.a/...a./ /.a/...a.
+/.a/...a/a /.a/...a/a
+/.a/...a/. /.a/...a
+/.a/...a// /.a/...a
+/.a/....aa /.a/....aa
+/.a/....a. /.a/....a.
+/.a/....a/ /.a/....a
+/.a/.....a /.a/.....a
+/.a/...... /.a/......
+/.a/...../ /.a/.....
+/.a/..../a /.a/..../a
+/.a/..../. /.a/....
+/.a/....// /.a/....
+/.a/.../aa /.a/.../aa
+/.a/.../a. /.a/.../a.
+/.a/.../a/ /.a/.../a
+/.a/.../.a /.a/.../.a
+/.a/.../.. /.a
+/.a/..././ /.a/...
+/.a/...//a /.a/.../a
+/.a/...//. /.a/...
+/.a/.../// /.a/...
+/.a/../aaa /aaa
+/.a/../aa. /aa.
+/.a/../aa/ /aa
+/.a/../a.a /a.a
+/.a/../a.. /a..
+/.a/../a./ /a.
+/.a/../a/a /a/a
+/.a/../a/. /a
+/.a/../a// /a
+/.a/../.aa /.aa
+/.a/../.a. /.a.
+/.a/../.a/ /.a
+/.a/../..a /..a
+/.a/../... /...
+/.a/../../ /
+/.a/.././a /a
+/.a/.././. /
+/.a/../.// /
+/.a/..//aa /aa
+/.a/..//a. /a.
+/.a/..//a/ /a
+/.a/..//.a /.a
+/.a/..//.. /
+/.a/..//./ /
+/.a/..///a /a
+/.a/..///. /
+/.a/..//// /
+/.a/./aaaa /.a/aaaa
+/.a/./aaa. /.a/aaa.
+/.a/./aaa/ /.a/aaa
+/.a/./aa.a /.a/aa.a
+/.a/./aa.. /.a/aa..
+/.a/./aa./ /.a/aa.
+/.a/./aa/a /.a/aa/a
+/.a/./aa/. /.a/aa
+/.a/./aa// /.a/aa
+/.a/./a.aa /.a/a.aa
+/.a/./a.a. /.a/a.a.
+/.a/./a.a/ /.a/a.a
+/.a/./a..a /.a/a..a
+/.a/./a... /.a/a...
+/.a/./a../ /.a/a..
+/.a/./a./a /.a/a./a
+/.a/./a./. /.a/a.
+/.a/./a.// /.a/a.
+/.a/./a/aa /.a/a/aa
+/.a/./a/a. /.a/a/a.
+/.a/./a/a/ /.a/a/a
+/.a/./a/.a /.a/a/.a
+/.a/./a/.. /.a
+/.a/./a/./ /.a/a
+/.a/./a//a /.a/a/a
+/.a/./a//. /.a/a
+/.a/./a/// /.a/a
+/.a/./.aaa /.a/.aaa
+/.a/./.aa. /.a/.aa.
+/.a/./.aa/ /.a/.aa
+/.a/./.a.a /.a/.a.a
+/.a/./.a.. /.a/.a..
+/.a/./.a./ /.a/.a.
+/.a/./.a/a /.a/.a/a
+/.a/./.a/. /.a/.a
+/.a/./.a// /.a/.a
+/.a/./..aa /.a/..aa
+/.a/./..a. /.a/..a.
+/.a/./..a/ /.a/..a
+/.a/./...a /.a/...a
+/.a/./.... /.a/....
+/.a/./.../ /.a/...
+/.a/./../a /a
+/.a/./../. /
+/.a/./..// /
+/.a/././aa /.a/aa
+/.a/././a. /.a/a.
+/.a/././a/ /.a/a
+/.a/././.a /.a/.a
+/.a/././.. /
+/.a/./././ /.a
+/.a/././/a /.a/a
+/.a/././/. /.a
+/.a/././// /.a
+/.a/.//aaa /.a/aaa
+/.a/.//aa. /.a/aa.
+/.a/.//aa/ /.a/aa
+/.a/.//a.a /.a/a.a
+/.a/.//a.. /.a/a..
+/.a/.//a./ /.a/a.
+/.a/.//a/a /.a/a/a
+/.a/.//a/. /.a/a
+/.a/.//a// /.a/a
+/.a/.//.aa /.a/.aa
+/.a/.//.a. /.a/.a.
+/.a/.//.a/ /.a/.a
+/.a/.//..a /.a/..a
+/.a/.//... /.a/...
+/.a/.//../ /
+/.a/.//./a /.a/a
+/.a/.//./. /.a
+/.a/.//.// /.a
+/.a/.///aa /.a/aa
+/.a/.///a. /.a/a.
+/.a/.///a/ /.a/a
+/.a/.///.a /.a/.a
+/.a/.///.. /
+/.a/.///./ /.a
+/.a/.////a /.a/a
+/.a/.////. /.a
+/.a/.///// /.a
+/.a//aaaaa /.a/aaaaa
+/.a//aaaa. /.a/aaaa.
+/.a//aaaa/ /.a/aaaa
+/.a//aaa.a /.a/aaa.a
+/.a//aaa.. /.a/aaa..
+/.a//aaa./ /.a/aaa.
+/.a//aaa/a /.a/aaa/a
+/.a//aaa/. /.a/aaa
+/.a//aaa// /.a/aaa
+/.a//aa.aa /.a/aa.aa
+/.a//aa.a. /.a/aa.a.
+/.a//aa.a/ /.a/aa.a
+/.a//aa..a /.a/aa..a
+/.a//aa... /.a/aa...
+/.a//aa../ /.a/aa..
+/.a//aa./a /.a/aa./a
+/.a//aa./. /.a/aa.
+/.a//aa.// /.a/aa.
+/.a//aa/aa /.a/aa/aa
+/.a//aa/a. /.a/aa/a.
+/.a//aa/a/ /.a/aa/a
+/.a//aa/.a /.a/aa/.a
+/.a//aa/.. /.a
+/.a//aa/./ /.a/aa
+/.a//aa//a /.a/aa/a
+/.a//aa//. /.a/aa
+/.a//aa/// /.a/aa
+/.a//a.aaa /.a/a.aaa
+/.a//a.aa. /.a/a.aa.
+/.a//a.aa/ /.a/a.aa
+/.a//a.a.a /.a/a.a.a
+/.a//a.a.. /.a/a.a..
+/.a//a.a./ /.a/a.a.
+/.a//a.a/a /.a/a.a/a
+/.a//a.a/. /.a/a.a
+/.a//a.a// /.a/a.a
+/.a//a..aa /.a/a..aa
+/.a//a..a. /.a/a..a.
+/.a//a..a/ /.a/a..a
+/.a//a...a /.a/a...a
+/.a//a.... /.a/a....
+/.a//a.../ /.a/a...
+/.a//a../a /.a/a../a
+/.a//a../. /.a/a..
+/.a//a..// /.a/a..
+/.a//a./aa /.a/a./aa
+/.a//a./a. /.a/a./a.
+/.a//a./a/ /.a/a./a
+/.a//a./.a /.a/a./.a
+/.a//a./.. /.a
+/.a//a././ /.a/a.
+/.a//a.//a /.a/a./a
+/.a//a.//. /.a/a.
+/.a//a./// /.a/a.
+/.a//a/aaa /.a/a/aaa
+/.a//a/aa. /.a/a/aa.
+/.a//a/aa/ /.a/a/aa
+/.a//a/a.a /.a/a/a.a
+/.a//a/a.. /.a/a/a..
+/.a//a/a./ /.a/a/a.
+/.a//a/a/a /.a/a/a/a
+/.a//a/a/. /.a/a/a
+/.a//a/a// /.a/a/a
+/.a//a/.aa /.a/a/.aa
+/.a//a/.a. /.a/a/.a.
+/.a//a/.a/ /.a/a/.a
+/.a//a/..a /.a/a/..a
+/.a//a/... /.a/a/...
+/.a//a/../ /.a
+/.a//a/./a /.a/a/a
+/.a//a/./. /.a/a
+/.a//a/.// /.a/a
+/.a//a//aa /.a/a/aa
+/.a//a//a. /.a/a/a.
+/.a//a//a/ /.a/a/a
+/.a//a//.a /.a/a/.a
+/.a//a//.. /.a
+/.a//a//./ /.a/a
+/.a//a///a /.a/a/a
+/.a//a///. /.a/a
+/.a//a//// /.a/a
+/.a//.aaaa /.a/.aaaa
+/.a//.aaa. /.a/.aaa.
+/.a//.aaa/ /.a/.aaa
+/.a//.aa.a /.a/.aa.a
+/.a//.aa.. /.a/.aa..
+/.a//.aa./ /.a/.aa.
+/.a//.aa/a /.a/.aa/a
+/.a//.aa/. /.a/.aa
+/.a//.aa// /.a/.aa
+/.a//.a.aa /.a/.a.aa
+/.a//.a.a. /.a/.a.a.
+/.a//.a.a/ /.a/.a.a
+/.a//.a..a /.a/.a..a
+/.a//.a... /.a/.a...
+/.a//.a../ /.a/.a..
+/.a//.a./a /.a/.a./a
+/.a//.a./. /.a/.a.
+/.a//.a.// /.a/.a.
+/.a//.a/aa /.a/.a/aa
+/.a//.a/a. /.a/.a/a.
+/.a//.a/a/ /.a/.a/a
+/.a//.a/.a /.a/.a/.a
+/.a//.a/.. /.a
+/.a//.a/./ /.a/.a
+/.a//.a//a /.a/.a/a
+/.a//.a//. /.a/.a
+/.a//.a/// /.a/.a
+/.a//..aaa /.a/..aaa
+/.a//..aa. /.a/..aa.
+/.a//..aa/ /.a/..aa
+/.a//..a.a /.a/..a.a
+/.a//..a.. /.a/..a..
+/.a//..a./ /.a/..a.
+/.a//..a/a /.a/..a/a
+/.a//..a/. /.a/..a
+/.a//..a// /.a/..a
+/.a//...aa /.a/...aa
+/.a//...a. /.a/...a.
+/.a//...a/ /.a/...a
+/.a//....a /.a/....a
+/.a//..... /.a/.....
+/.a//..../ /.a/....
+/.a//.../a /.a/.../a
+/.a//.../. /.a/...
+/.a//...// /.a/...
+/.a//../aa /aa
+/.a//../a. /a.
+/.a//../a/ /a
+/.a//../.a /.a
+/.a//../.. /
+/.a//.././ /
+/.a//..//a /a
+/.a//..//. /
+/.a//../// /
+/.a//./aaa /.a/aaa
+/.a//./aa. /.a/aa.
+/.a//./aa/ /.a/aa
+/.a//./a.a /.a/a.a
+/.a//./a.. /.a/a..
+/.a//./a./ /.a/a.
+/.a//./a/a /.a/a/a
+/.a//./a/. /.a/a
+/.a//./a// /.a/a
+/.a//./.aa /.a/.aa
+/.a//./.a. /.a/.a.
+/.a//./.a/ /.a/.a
+/.a//./..a /.a/..a
+/.a//./... /.a/...
+/.a//./../ /
+/.a//././a /.a/a
+/.a//././. /.a
+/.a//./.// /.a
+/.a//.//aa /.a/aa
+/.a//.//a. /.a/a.
+/.a//.//a/ /.a/a
+/.a//.//.a /.a/.a
+/.a//.//.. /
+/.a//.//./ /.a
+/.a//.///a /.a/a
+/.a//.///. /.a
+/.a//.//// /.a
+/.a///aaaa /.a/aaaa
+/.a///aaa. /.a/aaa.
+/.a///aaa/ /.a/aaa
+/.a///aa.a /.a/aa.a
+/.a///aa.. /.a/aa..
+/.a///aa./ /.a/aa.
+/.a///aa/a /.a/aa/a
+/.a///aa/. /.a/aa
+/.a///aa// /.a/aa
+/.a///a.aa /.a/a.aa
+/.a///a.a. /.a/a.a.
+/.a///a.a/ /.a/a.a
+/.a///a..a /.a/a..a
+/.a///a... /.a/a...
+/.a///a../ /.a/a..
+/.a///a./a /.a/a./a
+/.a///a./. /.a/a.
+/.a///a.// /.a/a.
+/.a///a/aa /.a/a/aa
+/.a///a/a. /.a/a/a.
+/.a///a/a/ /.a/a/a
+/.a///a/.a /.a/a/.a
+/.a///a/.. /.a
+/.a///a/./ /.a/a
+/.a///a//a /.a/a/a
+/.a///a//. /.a/a
+/.a///a/// /.a/a
+/.a///.aaa /.a/.aaa
+/.a///.aa. /.a/.aa.
+/.a///.aa/ /.a/.aa
+/.a///.a.a /.a/.a.a
+/.a///.a.. /.a/.a..
+/.a///.a./ /.a/.a.
+/.a///.a/a /.a/.a/a
+/.a///.a/. /.a/.a
+/.a///.a// /.a/.a
+/.a///..aa /.a/..aa
+/.a///..a. /.a/..a.
+/.a///..a/ /.a/..a
+/.a///...a /.a/...a
+/.a///.... /.a/....
+/.a///.../ /.a/...
+/.a///../a /a
+/.a///../. /
+/.a///..// /
+/.a///./aa /.a/aa
+/.a///./a. /.a/a.
+/.a///./a/ /.a/a
+/.a///./.a /.a/.a
+/.a///./.. /
+/.a///././ /.a
+/.a///.//a /.a/a
+/.a///.//. /.a
+/.a///./// /.a
+/.a////aaa /.a/aaa
+/.a////aa. /.a/aa.
+/.a////aa/ /.a/aa
+/.a////a.a /.a/a.a
+/.a////a.. /.a/a..
+/.a////a./ /.a/a.
+/.a////a/a /.a/a/a
+/.a////a/. /.a/a
+/.a////a// /.a/a
+/.a////.aa /.a/.aa
+/.a////.a. /.a/.a.
+/.a////.a/ /.a/.a
+/.a////..a /.a/..a
+/.a////... /.a/...
+/.a////../ /
+/.a////./a /.a/a
+/.a////./. /.a
+/.a////.// /.a
+/.a/////aa /.a/aa
+/.a/////a. /.a/a.
+/.a/////a/ /.a/a
+/.a/////.a /.a/.a
+/.a/////.. /
+/.a/////./ /.a
+/.a//////a /.a/a
+/.a//////. /.a
+/.a/////// /.a
+/..aaaaaaa /..aaaaaaa
+/..aaaaaa. /..aaaaaa.
+/..aaaaaa/ /..aaaaaa
+/..aaaaa.a /..aaaaa.a
+/..aaaaa.. /..aaaaa..
+/..aaaaa./ /..aaaaa.
+/..aaaaa/a /..aaaaa/a
+/..aaaaa/. /..aaaaa
+/..aaaaa// /..aaaaa
+/..aaaa.aa /..aaaa.aa
+/..aaaa.a. /..aaaa.a.
+/..aaaa.a/ /..aaaa.a
+/..aaaa..a /..aaaa..a
+/..aaaa... /..aaaa...
+/..aaaa../ /..aaaa..
+/..aaaa./a /..aaaa./a
+/..aaaa./. /..aaaa.
+/..aaaa.// /..aaaa.
+/..aaaa/aa /..aaaa/aa
+/..aaaa/a. /..aaaa/a.
+/..aaaa/a/ /..aaaa/a
+/..aaaa/.a /..aaaa/.a
+/..aaaa/.. /
+/..aaaa/./ /..aaaa
+/..aaaa//a /..aaaa/a
+/..aaaa//. /..aaaa
+/..aaaa/// /..aaaa
+/..aaa.aaa /..aaa.aaa
+/..aaa.aa. /..aaa.aa.
+/..aaa.aa/ /..aaa.aa
+/..aaa.a.a /..aaa.a.a
+/..aaa.a.. /..aaa.a..
+/..aaa.a./ /..aaa.a.
+/..aaa.a/a /..aaa.a/a
+/..aaa.a/. /..aaa.a
+/..aaa.a// /..aaa.a
+/..aaa..aa /..aaa..aa
+/..aaa..a. /..aaa..a.
+/..aaa..a/ /..aaa..a
+/..aaa...a /..aaa...a
+/..aaa.... /..aaa....
+/..aaa.../ /..aaa...
+/..aaa../a /..aaa../a
+/..aaa../. /..aaa..
+/..aaa..// /..aaa..
+/..aaa./aa /..aaa./aa
+/..aaa./a. /..aaa./a.
+/..aaa./a/ /..aaa./a
+/..aaa./.a /..aaa./.a
+/..aaa./.. /
+/..aaa././ /..aaa.
+/..aaa.//a /..aaa./a
+/..aaa.//. /..aaa.
+/..aaa./// /..aaa.
+/..aaa/aaa /..aaa/aaa
+/..aaa/aa. /..aaa/aa.
+/..aaa/aa/ /..aaa/aa
+/..aaa/a.a /..aaa/a.a
+/..aaa/a.. /..aaa/a..
+/..aaa/a./ /..aaa/a.
+/..aaa/a/a /..aaa/a/a
+/..aaa/a/. /..aaa/a
+/..aaa/a// /..aaa/a
+/..aaa/.aa /..aaa/.aa
+/..aaa/.a. /..aaa/.a.
+/..aaa/.a/ /..aaa/.a
+/..aaa/..a /..aaa/..a
+/..aaa/... /..aaa/...
+/..aaa/../ /
+/..aaa/./a /..aaa/a
+/..aaa/./. /..aaa
+/..aaa/.// /..aaa
+/..aaa//aa /..aaa/aa
+/..aaa//a. /..aaa/a.
+/..aaa//a/ /..aaa/a
+/..aaa//.a /..aaa/.a
+/..aaa//.. /
+/..aaa//./ /..aaa
+/..aaa///a /..aaa/a
+/..aaa///. /..aaa
+/..aaa//// /..aaa
+/..aa.aaaa /..aa.aaaa
+/..aa.aaa. /..aa.aaa.
+/..aa.aaa/ /..aa.aaa
+/..aa.aa.a /..aa.aa.a
+/..aa.aa.. /..aa.aa..
+/..aa.aa./ /..aa.aa.
+/..aa.aa/a /..aa.aa/a
+/..aa.aa/. /..aa.aa
+/..aa.aa// /..aa.aa
+/..aa.a.aa /..aa.a.aa
+/..aa.a.a. /..aa.a.a.
+/..aa.a.a/ /..aa.a.a
+/..aa.a..a /..aa.a..a
+/..aa.a... /..aa.a...
+/..aa.a../ /..aa.a..
+/..aa.a./a /..aa.a./a
+/..aa.a./. /..aa.a.
+/..aa.a.// /..aa.a.
+/..aa.a/aa /..aa.a/aa
+/..aa.a/a. /..aa.a/a.
+/..aa.a/a/ /..aa.a/a
+/..aa.a/.a /..aa.a/.a
+/..aa.a/.. /
+/..aa.a/./ /..aa.a
+/..aa.a//a /..aa.a/a
+/..aa.a//. /..aa.a
+/..aa.a/// /..aa.a
+/..aa..aaa /..aa..aaa
+/..aa..aa. /..aa..aa.
+/..aa..aa/ /..aa..aa
+/..aa..a.a /..aa..a.a
+/..aa..a.. /..aa..a..
+/..aa..a./ /..aa..a.
+/..aa..a/a /..aa..a/a
+/..aa..a/. /..aa..a
+/..aa..a// /..aa..a
+/..aa...aa /..aa...aa
+/..aa...a. /..aa...a.
+/..aa...a/ /..aa...a
+/..aa....a /..aa....a
+/..aa..... /..aa.....
+/..aa..../ /..aa....
+/..aa.../a /..aa.../a
+/..aa.../. /..aa...
+/..aa...// /..aa...
+/..aa../aa /..aa../aa
+/..aa../a. /..aa../a.
+/..aa../a/ /..aa../a
+/..aa../.a /..aa../.a
+/..aa../.. /
+/..aa.././ /..aa..
+/..aa..//a /..aa../a
+/..aa..//. /..aa..
+/..aa../// /..aa..
+/..aa./aaa /..aa./aaa
+/..aa./aa. /..aa./aa.
+/..aa./aa/ /..aa./aa
+/..aa./a.a /..aa./a.a
+/..aa./a.. /..aa./a..
+/..aa./a./ /..aa./a.
+/..aa./a/a /..aa./a/a
+/..aa./a/. /..aa./a
+/..aa./a// /..aa./a
+/..aa./.aa /..aa./.aa
+/..aa./.a. /..aa./.a.
+/..aa./.a/ /..aa./.a
+/..aa./..a /..aa./..a
+/..aa./... /..aa./...
+/..aa./../ /
+/..aa././a /..aa./a
+/..aa././. /..aa.
+/..aa./.// /..aa.
+/..aa.//aa /..aa./aa
+/..aa.//a. /..aa./a.
+/..aa.//a/ /..aa./a
+/..aa.//.a /..aa./.a
+/..aa.//.. /
+/..aa.//./ /..aa.
+/..aa.///a /..aa./a
+/..aa.///. /..aa.
+/..aa.//// /..aa.
+/..aa/aaaa /..aa/aaaa
+/..aa/aaa. /..aa/aaa.
+/..aa/aaa/ /..aa/aaa
+/..aa/aa.a /..aa/aa.a
+/..aa/aa.. /..aa/aa..
+/..aa/aa./ /..aa/aa.
+/..aa/aa/a /..aa/aa/a
+/..aa/aa/. /..aa/aa
+/..aa/aa// /..aa/aa
+/..aa/a.aa /..aa/a.aa
+/..aa/a.a. /..aa/a.a.
+/..aa/a.a/ /..aa/a.a
+/..aa/a..a /..aa/a..a
+/..aa/a... /..aa/a...
+/..aa/a../ /..aa/a..
+/..aa/a./a /..aa/a./a
+/..aa/a./. /..aa/a.
+/..aa/a.// /..aa/a.
+/..aa/a/aa /..aa/a/aa
+/..aa/a/a. /..aa/a/a.
+/..aa/a/a/ /..aa/a/a
+/..aa/a/.a /..aa/a/.a
+/..aa/a/.. /..aa
+/..aa/a/./ /..aa/a
+/..aa/a//a /..aa/a/a
+/..aa/a//. /..aa/a
+/..aa/a/// /..aa/a
+/..aa/.aaa /..aa/.aaa
+/..aa/.aa. /..aa/.aa.
+/..aa/.aa/ /..aa/.aa
+/..aa/.a.a /..aa/.a.a
+/..aa/.a.. /..aa/.a..
+/..aa/.a./ /..aa/.a.
+/..aa/.a/a /..aa/.a/a
+/..aa/.a/. /..aa/.a
+/..aa/.a// /..aa/.a
+/..aa/..aa /..aa/..aa
+/..aa/..a. /..aa/..a.
+/..aa/..a/ /..aa/..a
+/..aa/...a /..aa/...a
+/..aa/.... /..aa/....
+/..aa/.../ /..aa/...
+/..aa/../a /a
+/..aa/../. /
+/..aa/..// /
+/..aa/./aa /..aa/aa
+/..aa/./a. /..aa/a.
+/..aa/./a/ /..aa/a
+/..aa/./.a /..aa/.a
+/..aa/./.. /
+/..aa/././ /..aa
+/..aa/.//a /..aa/a
+/..aa/.//. /..aa
+/..aa/./// /..aa
+/..aa//aaa /..aa/aaa
+/..aa//aa. /..aa/aa.
+/..aa//aa/ /..aa/aa
+/..aa//a.a /..aa/a.a
+/..aa//a.. /..aa/a..
+/..aa//a./ /..aa/a.
+/..aa//a/a /..aa/a/a
+/..aa//a/. /..aa/a
+/..aa//a// /..aa/a
+/..aa//.aa /..aa/.aa
+/..aa//.a. /..aa/.a.
+/..aa//.a/ /..aa/.a
+/..aa//..a /..aa/..a
+/..aa//... /..aa/...
+/..aa//../ /
+/..aa//./a /..aa/a
+/..aa//./. /..aa
+/..aa//.// /..aa
+/..aa///aa /..aa/aa
+/..aa///a. /..aa/a.
+/..aa///a/ /..aa/a
+/..aa///.a /..aa/.a
+/..aa///.. /
+/..aa///./ /..aa
+/..aa////a /..aa/a
+/..aa////. /..aa
+/..aa///// /..aa
+/..a.aaaaa /..a.aaaaa
+/..a.aaaa. /..a.aaaa.
+/..a.aaaa/ /..a.aaaa
+/..a.aaa.a /..a.aaa.a
+/..a.aaa.. /..a.aaa..
+/..a.aaa./ /..a.aaa.
+/..a.aaa/a /..a.aaa/a
+/..a.aaa/. /..a.aaa
+/..a.aaa// /..a.aaa
+/..a.aa.aa /..a.aa.aa
+/..a.aa.a. /..a.aa.a.
+/..a.aa.a/ /..a.aa.a
+/..a.aa..a /..a.aa..a
+/..a.aa... /..a.aa...
+/..a.aa../ /..a.aa..
+/..a.aa./a /..a.aa./a
+/..a.aa./. /..a.aa.
+/..a.aa.// /..a.aa.
+/..a.aa/aa /..a.aa/aa
+/..a.aa/a. /..a.aa/a.
+/..a.aa/a/ /..a.aa/a
+/..a.aa/.a /..a.aa/.a
+/..a.aa/.. /
+/..a.aa/./ /..a.aa
+/..a.aa//a /..a.aa/a
+/..a.aa//. /..a.aa
+/..a.aa/// /..a.aa
+/..a.a.aaa /..a.a.aaa
+/..a.a.aa. /..a.a.aa.
+/..a.a.aa/ /..a.a.aa
+/..a.a.a.a /..a.a.a.a
+/..a.a.a.. /..a.a.a..
+/..a.a.a./ /..a.a.a.
+/..a.a.a/a /..a.a.a/a
+/..a.a.a/. /..a.a.a
+/..a.a.a// /..a.a.a
+/..a.a..aa /..a.a..aa
+/..a.a..a. /..a.a..a.
+/..a.a..a/ /..a.a..a
+/..a.a...a /..a.a...a
+/..a.a.... /..a.a....
+/..a.a.../ /..a.a...
+/..a.a../a /..a.a../a
+/..a.a../. /..a.a..
+/..a.a..// /..a.a..
+/..a.a./aa /..a.a./aa
+/..a.a./a. /..a.a./a.
+/..a.a./a/ /..a.a./a
+/..a.a./.a /..a.a./.a
+/..a.a./.. /
+/..a.a././ /..a.a.
+/..a.a.//a /..a.a./a
+/..a.a.//. /..a.a.
+/..a.a./// /..a.a.
+/..a.a/aaa /..a.a/aaa
+/..a.a/aa. /..a.a/aa.
+/..a.a/aa/ /..a.a/aa
+/..a.a/a.a /..a.a/a.a
+/..a.a/a.. /..a.a/a..
+/..a.a/a./ /..a.a/a.
+/..a.a/a/a /..a.a/a/a
+/..a.a/a/. /..a.a/a
+/..a.a/a// /..a.a/a
+/..a.a/.aa /..a.a/.aa
+/..a.a/.a. /..a.a/.a.
+/..a.a/.a/ /..a.a/.a
+/..a.a/..a /..a.a/..a
+/..a.a/... /..a.a/...
+/..a.a/../ /
+/..a.a/./a /..a.a/a
+/..a.a/./. /..a.a
+/..a.a/.// /..a.a
+/..a.a//aa /..a.a/aa
+/..a.a//a. /..a.a/a.
+/..a.a//a/ /..a.a/a
+/..a.a//.a /..a.a/.a
+/..a.a//.. /
+/..a.a//./ /..a.a
+/..a.a///a /..a.a/a
+/..a.a///. /..a.a
+/..a.a//// /..a.a
+/..a..aaaa /..a..aaaa
+/..a..aaa. /..a..aaa.
+/..a..aaa/ /..a..aaa
+/..a..aa.a /..a..aa.a
+/..a..aa.. /..a..aa..
+/..a..aa./ /..a..aa.
+/..a..aa/a /..a..aa/a
+/..a..aa/. /..a..aa
+/..a..aa// /..a..aa
+/..a..a.aa /..a..a.aa
+/..a..a.a. /..a..a.a.
+/..a..a.a/ /..a..a.a
+/..a..a..a /..a..a..a
+/..a..a... /..a..a...
+/..a..a../ /..a..a..
+/..a..a./a /..a..a./a
+/..a..a./. /..a..a.
+/..a..a.// /..a..a.
+/..a..a/aa /..a..a/aa
+/..a..a/a. /..a..a/a.
+/..a..a/a/ /..a..a/a
+/..a..a/.a /..a..a/.a
+/..a..a/.. /
+/..a..a/./ /..a..a
+/..a..a//a /..a..a/a
+/..a..a//. /..a..a
+/..a..a/// /..a..a
+/..a...aaa /..a...aaa
+/..a...aa. /..a...aa.
+/..a...aa/ /..a...aa
+/..a...a.a /..a...a.a
+/..a...a.. /..a...a..
+/..a...a./ /..a...a.
+/..a...a/a /..a...a/a
+/..a...a/. /..a...a
+/..a...a// /..a...a
+/..a....aa /..a....aa
+/..a....a. /..a....a.
+/..a....a/ /..a....a
+/..a.....a /..a.....a
+/..a...... /..a......
+/..a...../ /..a.....
+/..a..../a /..a..../a
+/..a..../. /..a....
+/..a....// /..a....
+/..a.../aa /..a.../aa
+/..a.../a. /..a.../a.
+/..a.../a/ /..a.../a
+/..a.../.a /..a.../.a
+/..a.../.. /
+/..a..././ /..a...
+/..a...//a /..a.../a
+/..a...//. /..a...
+/..a.../// /..a...
+/..a../aaa /..a../aaa
+/..a../aa. /..a../aa.
+/..a../aa/ /..a../aa
+/..a../a.a /..a../a.a
+/..a../a.. /..a../a..
+/..a../a./ /..a../a.
+/..a../a/a /..a../a/a
+/..a../a/. /..a../a
+/..a../a// /..a../a
+/..a../.aa /..a../.aa
+/..a../.a. /..a../.a.
+/..a../.a/ /..a../.a
+/..a../..a /..a../..a
+/..a../... /..a../...
+/..a../../ /
+/..a.././a /..a../a
+/..a.././. /..a..
+/..a../.// /..a..
+/..a..//aa /..a../aa
+/..a..//a. /..a../a.
+/..a..//a/ /..a../a
+/..a..//.a /..a../.a
+/..a..//.. /
+/..a..//./ /..a..
+/..a..///a /..a../a
+/..a..///. /..a..
+/..a..//// /..a..
+/..a./aaaa /..a./aaaa
+/..a./aaa. /..a./aaa.
+/..a./aaa/ /..a./aaa
+/..a./aa.a /..a./aa.a
+/..a./aa.. /..a./aa..
+/..a./aa./ /..a./aa.
+/..a./aa/a /..a./aa/a
+/..a./aa/. /..a./aa
+/..a./aa// /..a./aa
+/..a./a.aa /..a./a.aa
+/..a./a.a. /..a./a.a.
+/..a./a.a/ /..a./a.a
+/..a./a..a /..a./a..a
+/..a./a... /..a./a...
+/..a./a../ /..a./a..
+/..a./a./a /..a./a./a
+/..a./a./. /..a./a.
+/..a./a.// /..a./a.
+/..a./a/aa /..a./a/aa
+/..a./a/a. /..a./a/a.
+/..a./a/a/ /..a./a/a
+/..a./a/.a /..a./a/.a
+/..a./a/.. /..a.
+/..a./a/./ /..a./a
+/..a./a//a /..a./a/a
+/..a./a//. /..a./a
+/..a./a/// /..a./a
+/..a./.aaa /..a./.aaa
+/..a./.aa. /..a./.aa.
+/..a./.aa/ /..a./.aa
+/..a./.a.a /..a./.a.a
+/..a./.a.. /..a./.a..
+/..a./.a./ /..a./.a.
+/..a./.a/a /..a./.a/a
+/..a./.a/. /..a./.a
+/..a./.a// /..a./.a
+/..a./..aa /..a./..aa
+/..a./..a. /..a./..a.
+/..a./..a/ /..a./..a
+/..a./...a /..a./...a
+/..a./.... /..a./....
+/..a./.../ /..a./...
+/..a./../a /a
+/..a./../. /
+/..a./..// /
+/..a././aa /..a./aa
+/..a././a. /..a./a.
+/..a././a/ /..a./a
+/..a././.a /..a./.a
+/..a././.. /
+/..a./././ /..a.
+/..a././/a /..a./a
+/..a././/. /..a.
+/..a././// /..a.
+/..a.//aaa /..a./aaa
+/..a.//aa. /..a./aa.
+/..a.//aa/ /..a./aa
+/..a.//a.a /..a./a.a
+/..a.//a.. /..a./a..
+/..a.//a./ /..a./a.
+/..a.//a/a /..a./a/a
+/..a.//a/. /..a./a
+/..a.//a// /..a./a
+/..a.//.aa /..a./.aa
+/..a.//.a. /..a./.a.
+/..a.//.a/ /..a./.a
+/..a.//..a /..a./..a
+/..a.//... /..a./...
+/..a.//../ /
+/..a.//./a /..a./a
+/..a.//./. /..a.
+/..a.//.// /..a.
+/..a.///aa /..a./aa
+/..a.///a. /..a./a.
+/..a.///a/ /..a./a
+/..a.///.a /..a./.a
+/..a.///.. /
+/..a.///./ /..a.
+/..a.////a /..a./a
+/..a.////. /..a.
+/..a.///// /..a.
+/..a/aaaaa /..a/aaaaa
+/..a/aaaa. /..a/aaaa.
+/..a/aaaa/ /..a/aaaa
+/..a/aaa.a /..a/aaa.a
+/..a/aaa.. /..a/aaa..
+/..a/aaa./ /..a/aaa.
+/..a/aaa/a /..a/aaa/a
+/..a/aaa/. /..a/aaa
+/..a/aaa// /..a/aaa
+/..a/aa.aa /..a/aa.aa
+/..a/aa.a. /..a/aa.a.
+/..a/aa.a/ /..a/aa.a
+/..a/aa..a /..a/aa..a
+/..a/aa... /..a/aa...
+/..a/aa../ /..a/aa..
+/..a/aa./a /..a/aa./a
+/..a/aa./. /..a/aa.
+/..a/aa.// /..a/aa.
+/..a/aa/aa /..a/aa/aa
+/..a/aa/a. /..a/aa/a.
+/..a/aa/a/ /..a/aa/a
+/..a/aa/.a /..a/aa/.a
+/..a/aa/.. /..a
+/..a/aa/./ /..a/aa
+/..a/aa//a /..a/aa/a
+/..a/aa//. /..a/aa
+/..a/aa/// /..a/aa
+/..a/a.aaa /..a/a.aaa
+/..a/a.aa. /..a/a.aa.
+/..a/a.aa/ /..a/a.aa
+/..a/a.a.a /..a/a.a.a
+/..a/a.a.. /..a/a.a..
+/..a/a.a./ /..a/a.a.
+/..a/a.a/a /..a/a.a/a
+/..a/a.a/. /..a/a.a
+/..a/a.a// /..a/a.a
+/..a/a..aa /..a/a..aa
+/..a/a..a. /..a/a..a.
+/..a/a..a/ /..a/a..a
+/..a/a...a /..a/a...a
+/..a/a.... /..a/a....
+/..a/a.../ /..a/a...
+/..a/a../a /..a/a../a
+/..a/a../. /..a/a..
+/..a/a..// /..a/a..
+/..a/a./aa /..a/a./aa
+/..a/a./a. /..a/a./a.
+/..a/a./a/ /..a/a./a
+/..a/a./.a /..a/a./.a
+/..a/a./.. /..a
+/..a/a././ /..a/a.
+/..a/a.//a /..a/a./a
+/..a/a.//. /..a/a.
+/..a/a./// /..a/a.
+/..a/a/aaa /..a/a/aaa
+/..a/a/aa. /..a/a/aa.
+/..a/a/aa/ /..a/a/aa
+/..a/a/a.a /..a/a/a.a
+/..a/a/a.. /..a/a/a..
+/..a/a/a./ /..a/a/a.
+/..a/a/a/a /..a/a/a/a
+/..a/a/a/. /..a/a/a
+/..a/a/a// /..a/a/a
+/..a/a/.aa /..a/a/.aa
+/..a/a/.a. /..a/a/.a.
+/..a/a/.a/ /..a/a/.a
+/..a/a/..a /..a/a/..a
+/..a/a/... /..a/a/...
+/..a/a/../ /..a
+/..a/a/./a /..a/a/a
+/..a/a/./. /..a/a
+/..a/a/.// /..a/a
+/..a/a//aa /..a/a/aa
+/..a/a//a. /..a/a/a.
+/..a/a//a/ /..a/a/a
+/..a/a//.a /..a/a/.a
+/..a/a//.. /..a
+/..a/a//./ /..a/a
+/..a/a///a /..a/a/a
+/..a/a///. /..a/a
+/..a/a//// /..a/a
+/..a/.aaaa /..a/.aaaa
+/..a/.aaa. /..a/.aaa.
+/..a/.aaa/ /..a/.aaa
+/..a/.aa.a /..a/.aa.a
+/..a/.aa.. /..a/.aa..
+/..a/.aa./ /..a/.aa.
+/..a/.aa/a /..a/.aa/a
+/..a/.aa/. /..a/.aa
+/..a/.aa// /..a/.aa
+/..a/.a.aa /..a/.a.aa
+/..a/.a.a. /..a/.a.a.
+/..a/.a.a/ /..a/.a.a
+/..a/.a..a /..a/.a..a
+/..a/.a... /..a/.a...
+/..a/.a../ /..a/.a..
+/..a/.a./a /..a/.a./a
+/..a/.a./. /..a/.a.
+/..a/.a.// /..a/.a.
+/..a/.a/aa /..a/.a/aa
+/..a/.a/a. /..a/.a/a.
+/..a/.a/a/ /..a/.a/a
+/..a/.a/.a /..a/.a/.a
+/..a/.a/.. /..a
+/..a/.a/./ /..a/.a
+/..a/.a//a /..a/.a/a
+/..a/.a//. /..a/.a
+/..a/.a/// /..a/.a
+/..a/..aaa /..a/..aaa
+/..a/..aa. /..a/..aa.
+/..a/..aa/ /..a/..aa
+/..a/..a.a /..a/..a.a
+/..a/..a.. /..a/..a..
+/..a/..a./ /..a/..a.
+/..a/..a/a /..a/..a/a
+/..a/..a/. /..a/..a
+/..a/..a// /..a/..a
+/..a/...aa /..a/...aa
+/..a/...a. /..a/...a.
+/..a/...a/ /..a/...a
+/..a/....a /..a/....a
+/..a/..... /..a/.....
+/..a/..../ /..a/....
+/..a/.../a /..a/.../a
+/..a/.../. /..a/...
+/..a/...// /..a/...
+/..a/../aa /aa
+/..a/../a. /a.
+/..a/../a/ /a
+/..a/../.a /.a
+/..a/../.. /
+/..a/.././ /
+/..a/..//a /a
+/..a/..//. /
+/..a/../// /
+/..a/./aaa /..a/aaa
+/..a/./aa. /..a/aa.
+/..a/./aa/ /..a/aa
+/..a/./a.a /..a/a.a
+/..a/./a.. /..a/a..
+/..a/./a./ /..a/a.
+/..a/./a/a /..a/a/a
+/..a/./a/. /..a/a
+/..a/./a// /..a/a
+/..a/./.aa /..a/.aa
+/..a/./.a. /..a/.a.
+/..a/./.a/ /..a/.a
+/..a/./..a /..a/..a
+/..a/./... /..a/...
+/..a/./../ /
+/..a/././a /..a/a
+/..a/././. /..a
+/..a/./.// /..a
+/..a/.//aa /..a/aa
+/..a/.//a. /..a/a.
+/..a/.//a/ /..a/a
+/..a/.//.a /..a/.a
+/..a/.//.. /
+/..a/.//./ /..a
+/..a/.///a /..a/a
+/..a/.///. /..a
+/..a/.//// /..a
+/..a//aaaa /..a/aaaa
+/..a//aaa. /..a/aaa.
+/..a//aaa/ /..a/aaa
+/..a//aa.a /..a/aa.a
+/..a//aa.. /..a/aa..
+/..a//aa./ /..a/aa.
+/..a//aa/a /..a/aa/a
+/..a//aa/. /..a/aa
+/..a//aa// /..a/aa
+/..a//a.aa /..a/a.aa
+/..a//a.a. /..a/a.a.
+/..a//a.a/ /..a/a.a
+/..a//a..a /..a/a..a
+/..a//a... /..a/a...
+/..a//a../ /..a/a..
+/..a//a./a /..a/a./a
+/..a//a./. /..a/a.
+/..a//a.// /..a/a.
+/..a//a/aa /..a/a/aa
+/..a//a/a. /..a/a/a.
+/..a//a/a/ /..a/a/a
+/..a//a/.a /..a/a/.a
+/..a//a/.. /..a
+/..a//a/./ /..a/a
+/..a//a//a /..a/a/a
+/..a//a//. /..a/a
+/..a//a/// /..a/a
+/..a//.aaa /..a/.aaa
+/..a//.aa. /..a/.aa.
+/..a//.aa/ /..a/.aa
+/..a//.a.a /..a/.a.a
+/..a//.a.. /..a/.a..
+/..a//.a./ /..a/.a.
+/..a//.a/a /..a/.a/a
+/..a//.a/. /..a/.a
+/..a//.a// /..a/.a
+/..a//..aa /..a/..aa
+/..a//..a. /..a/..a.
+/..a//..a/ /..a/..a
+/..a//...a /..a/...a
+/..a//.... /..a/....
+/..a//.../ /..a/...
+/..a//../a /a
+/..a//../. /
+/..a//..// /
+/..a//./aa /..a/aa
+/..a//./a. /..a/a.
+/..a//./a/ /..a/a
+/..a//./.a /..a/.a
+/..a//./.. /
+/..a//././ /..a
+/..a//.//a /..a/a
+/..a//.//. /..a
+/..a//./// /..a
+/..a///aaa /..a/aaa
+/..a///aa. /..a/aa.
+/..a///aa/ /..a/aa
+/..a///a.a /..a/a.a
+/..a///a.. /..a/a..
+/..a///a./ /..a/a.
+/..a///a/a /..a/a/a
+/..a///a/. /..a/a
+/..a///a// /..a/a
+/..a///.aa /..a/.aa
+/..a///.a. /..a/.a.
+/..a///.a/ /..a/.a
+/..a///..a /..a/..a
+/..a///... /..a/...
+/..a///../ /
+/..a///./a /..a/a
+/..a///./. /..a
+/..a///.// /..a
+/..a////aa /..a/aa
+/..a////a. /..a/a.
+/..a////a/ /..a/a
+/..a////.a /..a/.a
+/..a////.. /
+/..a////./ /..a
+/..a/////a /..a/a
+/..a/////. /..a
+/..a////// /..a
+/...aaaaaa /...aaaaaa
+/...aaaaa. /...aaaaa.
+/...aaaaa/ /...aaaaa
+/...aaaa.a /...aaaa.a
+/...aaaa.. /...aaaa..
+/...aaaa./ /...aaaa.
+/...aaaa/a /...aaaa/a
+/...aaaa/. /...aaaa
+/...aaaa// /...aaaa
+/...aaa.aa /...aaa.aa
+/...aaa.a. /...aaa.a.
+/...aaa.a/ /...aaa.a
+/...aaa..a /...aaa..a
+/...aaa... /...aaa...
+/...aaa../ /...aaa..
+/...aaa./a /...aaa./a
+/...aaa./. /...aaa.
+/...aaa.// /...aaa.
+/...aaa/aa /...aaa/aa
+/...aaa/a. /...aaa/a.
+/...aaa/a/ /...aaa/a
+/...aaa/.a /...aaa/.a
+/...aaa/.. /
+/...aaa/./ /...aaa
+/...aaa//a /...aaa/a
+/...aaa//. /...aaa
+/...aaa/// /...aaa
+/...aa.aaa /...aa.aaa
+/...aa.aa. /...aa.aa.
+/...aa.aa/ /...aa.aa
+/...aa.a.a /...aa.a.a
+/...aa.a.. /...aa.a..
+/...aa.a./ /...aa.a.
+/...aa.a/a /...aa.a/a
+/...aa.a/. /...aa.a
+/...aa.a// /...aa.a
+/...aa..aa /...aa..aa
+/...aa..a. /...aa..a.
+/...aa..a/ /...aa..a
+/...aa...a /...aa...a
+/...aa.... /...aa....
+/...aa.../ /...aa...
+/...aa../a /...aa../a
+/...aa../. /...aa..
+/...aa..// /...aa..
+/...aa./aa /...aa./aa
+/...aa./a. /...aa./a.
+/...aa./a/ /...aa./a
+/...aa./.a /...aa./.a
+/...aa./.. /
+/...aa././ /...aa.
+/...aa.//a /...aa./a
+/...aa.//. /...aa.
+/...aa./// /...aa.
+/...aa/aaa /...aa/aaa
+/...aa/aa. /...aa/aa.
+/...aa/aa/ /...aa/aa
+/...aa/a.a /...aa/a.a
+/...aa/a.. /...aa/a..
+/...aa/a./ /...aa/a.
+/...aa/a/a /...aa/a/a
+/...aa/a/. /...aa/a
+/...aa/a// /...aa/a
+/...aa/.aa /...aa/.aa
+/...aa/.a. /...aa/.a.
+/...aa/.a/ /...aa/.a
+/...aa/..a /...aa/..a
+/...aa/... /...aa/...
+/...aa/../ /
+/...aa/./a /...aa/a
+/...aa/./. /...aa
+/...aa/.// /...aa
+/...aa//aa /...aa/aa
+/...aa//a. /...aa/a.
+/...aa//a/ /...aa/a
+/...aa//.a /...aa/.a
+/...aa//.. /
+/...aa//./ /...aa
+/...aa///a /...aa/a
+/...aa///. /...aa
+/...aa//// /...aa
+/...a.aaaa /...a.aaaa
+/...a.aaa. /...a.aaa.
+/...a.aaa/ /...a.aaa
+/...a.aa.a /...a.aa.a
+/...a.aa.. /...a.aa..
+/...a.aa./ /...a.aa.
+/...a.aa/a /...a.aa/a
+/...a.aa/. /...a.aa
+/...a.aa// /...a.aa
+/...a.a.aa /...a.a.aa
+/...a.a.a. /...a.a.a.
+/...a.a.a/ /...a.a.a
+/...a.a..a /...a.a..a
+/...a.a... /...a.a...
+/...a.a../ /...a.a..
+/...a.a./a /...a.a./a
+/...a.a./. /...a.a.
+/...a.a.// /...a.a.
+/...a.a/aa /...a.a/aa
+/...a.a/a. /...a.a/a.
+/...a.a/a/ /...a.a/a
+/...a.a/.a /...a.a/.a
+/...a.a/.. /
+/...a.a/./ /...a.a
+/...a.a//a /...a.a/a
+/...a.a//. /...a.a
+/...a.a/// /...a.a
+/...a..aaa /...a..aaa
+/...a..aa. /...a..aa.
+/...a..aa/ /...a..aa
+/...a..a.a /...a..a.a
+/...a..a.. /...a..a..
+/...a..a./ /...a..a.
+/...a..a/a /...a..a/a
+/...a..a/. /...a..a
+/...a..a// /...a..a
+/...a...aa /...a...aa
+/...a...a. /...a...a.
+/...a...a/ /...a...a
+/...a....a /...a....a
+/...a..... /...a.....
+/...a..../ /...a....
+/...a.../a /...a.../a
+/...a.../. /...a...
+/...a...// /...a...
+/...a../aa /...a../aa
+/...a../a. /...a../a.
+/...a../a/ /...a../a
+/...a../.a /...a../.a
+/...a../.. /
+/...a.././ /...a..
+/...a..//a /...a../a
+/...a..//. /...a..
+/...a../// /...a..
+/...a./aaa /...a./aaa
+/...a./aa. /...a./aa.
+/...a./aa/ /...a./aa
+/...a./a.a /...a./a.a
+/...a./a.. /...a./a..
+/...a./a./ /...a./a.
+/...a./a/a /...a./a/a
+/...a./a/. /...a./a
+/...a./a// /...a./a
+/...a./.aa /...a./.aa
+/...a./.a. /...a./.a.
+/...a./.a/ /...a./.a
+/...a./..a /...a./..a
+/...a./... /...a./...
+/...a./../ /
+/...a././a /...a./a
+/...a././. /...a.
+/...a./.// /...a.
+/...a.//aa /...a./aa
+/...a.//a. /...a./a.
+/...a.//a/ /...a./a
+/...a.//.a /...a./.a
+/...a.//.. /
+/...a.//./ /...a.
+/...a.///a /...a./a
+/...a.///. /...a.
+/...a.//// /...a.
+/...a/aaaa /...a/aaaa
+/...a/aaa. /...a/aaa.
+/...a/aaa/ /...a/aaa
+/...a/aa.a /...a/aa.a
+/...a/aa.. /...a/aa..
+/...a/aa./ /...a/aa.
+/...a/aa/a /...a/aa/a
+/...a/aa/. /...a/aa
+/...a/aa// /...a/aa
+/...a/a.aa /...a/a.aa
+/...a/a.a. /...a/a.a.
+/...a/a.a/ /...a/a.a
+/...a/a..a /...a/a..a
+/...a/a... /...a/a...
+/...a/a../ /...a/a..
+/...a/a./a /...a/a./a
+/...a/a./. /...a/a.
+/...a/a.// /...a/a.
+/...a/a/aa /...a/a/aa
+/...a/a/a. /...a/a/a.
+/...a/a/a/ /...a/a/a
+/...a/a/.a /...a/a/.a
+/...a/a/.. /...a
+/...a/a/./ /...a/a
+/...a/a//a /...a/a/a
+/...a/a//. /...a/a
+/...a/a/// /...a/a
+/...a/.aaa /...a/.aaa
+/...a/.aa. /...a/.aa.
+/...a/.aa/ /...a/.aa
+/...a/.a.a /...a/.a.a
+/...a/.a.. /...a/.a..
+/...a/.a./ /...a/.a.
+/...a/.a/a /...a/.a/a
+/...a/.a/. /...a/.a
+/...a/.a// /...a/.a
+/...a/..aa /...a/..aa
+/...a/..a. /...a/..a.
+/...a/..a/ /...a/..a
+/...a/...a /...a/...a
+/...a/.... /...a/....
+/...a/.../ /...a/...
+/...a/../a /a
+/...a/../. /
+/...a/..// /
+/...a/./aa /...a/aa
+/...a/./a. /...a/a.
+/...a/./a/ /...a/a
+/...a/./.a /...a/.a
+/...a/./.. /
+/...a/././ /...a
+/...a/.//a /...a/a
+/...a/.//. /...a
+/...a/./// /...a
+/...a//aaa /...a/aaa
+/...a//aa. /...a/aa.
+/...a//aa/ /...a/aa
+/...a//a.a /...a/a.a
+/...a//a.. /...a/a..
+/...a//a./ /...a/a.
+/...a//a/a /...a/a/a
+/...a//a/. /...a/a
+/...a//a// /...a/a
+/...a//.aa /...a/.aa
+/...a//.a. /...a/.a.
+/...a//.a/ /...a/.a
+/...a//..a /...a/..a
+/...a//... /...a/...
+/...a//../ /
+/...a//./a /...a/a
+/...a//./. /...a
+/...a//.// /...a
+/...a///aa /...a/aa
+/...a///a. /...a/a.
+/...a///a/ /...a/a
+/...a///.a /...a/.a
+/...a///.. /
+/...a///./ /...a
+/...a////a /...a/a
+/...a////. /...a
+/...a///// /...a
+/....aaaaa /....aaaaa
+/....aaaa. /....aaaa.
+/....aaaa/ /....aaaa
+/....aaa.a /....aaa.a
+/....aaa.. /....aaa..
+/....aaa./ /....aaa.
+/....aaa/a /....aaa/a
+/....aaa/. /....aaa
+/....aaa// /....aaa
+/....aa.aa /....aa.aa
+/....aa.a. /....aa.a.
+/....aa.a/ /....aa.a
+/....aa..a /....aa..a
+/....aa... /....aa...
+/....aa../ /....aa..
+/....aa./a /....aa./a
+/....aa./. /....aa.
+/....aa.// /....aa.
+/....aa/aa /....aa/aa
+/....aa/a. /....aa/a.
+/....aa/a/ /....aa/a
+/....aa/.a /....aa/.a
+/....aa/.. /
+/....aa/./ /....aa
+/....aa//a /....aa/a
+/....aa//. /....aa
+/....aa/// /....aa
+/....a.aaa /....a.aaa
+/....a.aa. /....a.aa.
+/....a.aa/ /....a.aa
+/....a.a.a /....a.a.a
+/....a.a.. /....a.a..
+/....a.a./ /....a.a.
+/....a.a/a /....a.a/a
+/....a.a/. /....a.a
+/....a.a// /....a.a
+/....a..aa /....a..aa
+/....a..a. /....a..a.
+/....a..a/ /....a..a
+/....a...a /....a...a
+/....a.... /....a....
+/....a.../ /....a...
+/....a../a /....a../a
+/....a../. /....a..
+/....a..// /....a..
+/....a./aa /....a./aa
+/....a./a. /....a./a.
+/....a./a/ /....a./a
+/....a./.a /....a./.a
+/....a./.. /
+/....a././ /....a.
+/....a.//a /....a./a
+/....a.//. /....a.
+/....a./// /....a.
+/....a/aaa /....a/aaa
+/....a/aa. /....a/aa.
+/....a/aa/ /....a/aa
+/....a/a.a /....a/a.a
+/....a/a.. /....a/a..
+/....a/a./ /....a/a.
+/....a/a/a /....a/a/a
+/....a/a/. /....a/a
+/....a/a// /....a/a
+/....a/.aa /....a/.aa
+/....a/.a. /....a/.a.
+/....a/.a/ /....a/.a
+/....a/..a /....a/..a
+/....a/... /....a/...
+/....a/../ /
+/....a/./a /....a/a
+/....a/./. /....a
+/....a/.// /....a
+/....a//aa /....a/aa
+/....a//a. /....a/a.
+/....a//a/ /....a/a
+/....a//.a /....a/.a
+/....a//.. /
+/....a//./ /....a
+/....a///a /....a/a
+/....a///. /....a
+/....a//// /....a
+/.....aaaa /.....aaaa
+/.....aaa. /.....aaa.
+/.....aaa/ /.....aaa
+/.....aa.a /.....aa.a
+/.....aa.. /.....aa..
+/.....aa./ /.....aa.
+/.....aa/a /.....aa/a
+/.....aa/. /.....aa
+/.....aa// /.....aa
+/.....a.aa /.....a.aa
+/.....a.a. /.....a.a.
+/.....a.a/ /.....a.a
+/.....a..a /.....a..a
+/.....a... /.....a...
+/.....a../ /.....a..
+/.....a./a /.....a./a
+/.....a./. /.....a.
+/.....a.// /.....a.
+/.....a/aa /.....a/aa
+/.....a/a. /.....a/a.
+/.....a/a/ /.....a/a
+/.....a/.a /.....a/.a
+/.....a/.. /
+/.....a/./ /.....a
+/.....a//a /.....a/a
+/.....a//. /.....a
+/.....a/// /.....a
+/......aaa /......aaa
+/......aa. /......aa.
+/......aa/ /......aa
+/......a.a /......a.a
+/......a.. /......a..
+/......a./ /......a.
+/......a/a /......a/a
+/......a/. /......a
+/......a// /......a
+/.......aa /.......aa
+/.......a. /.......a.
+/.......a/ /.......a
+/........a /........a
+/......... /.........
+/......../ /........
+/......./a /......./a
+/......./. /.......
+/.......// /.......
+/....../aa /....../aa
+/....../a. /....../a.
+/....../a/ /....../a
+/....../.a /....../.a
+/....../.. /
+/.....././ /......
+/......//a /....../a
+/......//. /......
+/....../// /......
+/...../aaa /...../aaa
+/...../aa. /...../aa.
+/...../aa/ /...../aa
+/...../a.a /...../a.a
+/...../a.. /...../a..
+/...../a./ /...../a.
+/...../a/a /...../a/a
+/...../a/. /...../a
+/...../a// /...../a
+/...../.aa /...../.aa
+/...../.a. /...../.a.
+/...../.a/ /...../.a
+/...../..a /...../..a
+/...../... /...../...
+/...../../ /
+/....././a /...../a
+/....././. /.....
+/...../.// /.....
+/.....//aa /...../aa
+/.....//a. /...../a.
+/.....//a/ /...../a
+/.....//.a /...../.a
+/.....//.. /
+/.....//./ /.....
+/.....///a /...../a
+/.....///. /.....
+/.....//// /.....
+/..../aaaa /..../aaaa
+/..../aaa. /..../aaa.
+/..../aaa/ /..../aaa
+/..../aa.a /..../aa.a
+/..../aa.. /..../aa..
+/..../aa./ /..../aa.
+/..../aa/a /..../aa/a
+/..../aa/. /..../aa
+/..../aa// /..../aa
+/..../a.aa /..../a.aa
+/..../a.a. /..../a.a.
+/..../a.a/ /..../a.a
+/..../a..a /..../a..a
+/..../a... /..../a...
+/..../a../ /..../a..
+/..../a./a /..../a./a
+/..../a./. /..../a.
+/..../a.// /..../a.
+/..../a/aa /..../a/aa
+/..../a/a. /..../a/a.
+/..../a/a/ /..../a/a
+/..../a/.a /..../a/.a
+/..../a/.. /....
+/..../a/./ /..../a
+/..../a//a /..../a/a
+/..../a//. /..../a
+/..../a/// /..../a
+/..../.aaa /..../.aaa
+/..../.aa. /..../.aa.
+/..../.aa/ /..../.aa
+/..../.a.a /..../.a.a
+/..../.a.. /..../.a..
+/..../.a./ /..../.a.
+/..../.a/a /..../.a/a
+/..../.a/. /..../.a
+/..../.a// /..../.a
+/..../..aa /..../..aa
+/..../..a. /..../..a.
+/..../..a/ /..../..a
+/..../...a /..../...a
+/..../.... /..../....
+/..../.../ /..../...
+/..../../a /a
+/..../../. /
+/..../..// /
+/...././aa /..../aa
+/...././a. /..../a.
+/...././a/ /..../a
+/...././.a /..../.a
+/...././.. /
+/..../././ /....
+/...././/a /..../a
+/...././/. /....
+/...././// /....
+/....//aaa /..../aaa
+/....//aa. /..../aa.
+/....//aa/ /..../aa
+/....//a.a /..../a.a
+/....//a.. /..../a..
+/....//a./ /..../a.
+/....//a/a /..../a/a
+/....//a/. /..../a
+/....//a// /..../a
+/....//.aa /..../.aa
+/....//.a. /..../.a.
+/....//.a/ /..../.a
+/....//..a /..../..a
+/....//... /..../...
+/....//../ /
+/....//./a /..../a
+/....//./. /....
+/....//.// /....
+/....///aa /..../aa
+/....///a. /..../a.
+/....///a/ /..../a
+/....///.a /..../.a
+/....///.. /
+/....///./ /....
+/....////a /..../a
+/....////. /....
+/....///// /....
+/.../aaaaa /.../aaaaa
+/.../aaaa. /.../aaaa.
+/.../aaaa/ /.../aaaa
+/.../aaa.a /.../aaa.a
+/.../aaa.. /.../aaa..
+/.../aaa./ /.../aaa.
+/.../aaa/a /.../aaa/a
+/.../aaa/. /.../aaa
+/.../aaa// /.../aaa
+/.../aa.aa /.../aa.aa
+/.../aa.a. /.../aa.a.
+/.../aa.a/ /.../aa.a
+/.../aa..a /.../aa..a
+/.../aa... /.../aa...
+/.../aa../ /.../aa..
+/.../aa./a /.../aa./a
+/.../aa./. /.../aa.
+/.../aa.// /.../aa.
+/.../aa/aa /.../aa/aa
+/.../aa/a. /.../aa/a.
+/.../aa/a/ /.../aa/a
+/.../aa/.a /.../aa/.a
+/.../aa/.. /...
+/.../aa/./ /.../aa
+/.../aa//a /.../aa/a
+/.../aa//. /.../aa
+/.../aa/// /.../aa
+/.../a.aaa /.../a.aaa
+/.../a.aa. /.../a.aa.
+/.../a.aa/ /.../a.aa
+/.../a.a.a /.../a.a.a
+/.../a.a.. /.../a.a..
+/.../a.a./ /.../a.a.
+/.../a.a/a /.../a.a/a
+/.../a.a/. /.../a.a
+/.../a.a// /.../a.a
+/.../a..aa /.../a..aa
+/.../a..a. /.../a..a.
+/.../a..a/ /.../a..a
+/.../a...a /.../a...a
+/.../a.... /.../a....
+/.../a.../ /.../a...
+/.../a../a /.../a../a
+/.../a../. /.../a..
+/.../a..// /.../a..
+/.../a./aa /.../a./aa
+/.../a./a. /.../a./a.
+/.../a./a/ /.../a./a
+/.../a./.a /.../a./.a
+/.../a./.. /...
+/.../a././ /.../a.
+/.../a.//a /.../a./a
+/.../a.//. /.../a.
+/.../a./// /.../a.
+/.../a/aaa /.../a/aaa
+/.../a/aa. /.../a/aa.
+/.../a/aa/ /.../a/aa
+/.../a/a.a /.../a/a.a
+/.../a/a.. /.../a/a..
+/.../a/a./ /.../a/a.
+/.../a/a/a /.../a/a/a
+/.../a/a/. /.../a/a
+/.../a/a// /.../a/a
+/.../a/.aa /.../a/.aa
+/.../a/.a. /.../a/.a.
+/.../a/.a/ /.../a/.a
+/.../a/..a /.../a/..a
+/.../a/... /.../a/...
+/.../a/../ /...
+/.../a/./a /.../a/a
+/.../a/./. /.../a
+/.../a/.// /.../a
+/.../a//aa /.../a/aa
+/.../a//a. /.../a/a.
+/.../a//a/ /.../a/a
+/.../a//.a /.../a/.a
+/.../a//.. /...
+/.../a//./ /.../a
+/.../a///a /.../a/a
+/.../a///. /.../a
+/.../a//// /.../a
+/.../.aaaa /.../.aaaa
+/.../.aaa. /.../.aaa.
+/.../.aaa/ /.../.aaa
+/.../.aa.a /.../.aa.a
+/.../.aa.. /.../.aa..
+/.../.aa./ /.../.aa.
+/.../.aa/a /.../.aa/a
+/.../.aa/. /.../.aa
+/.../.aa// /.../.aa
+/.../.a.aa /.../.a.aa
+/.../.a.a. /.../.a.a.
+/.../.a.a/ /.../.a.a
+/.../.a..a /.../.a..a
+/.../.a... /.../.a...
+/.../.a../ /.../.a..
+/.../.a./a /.../.a./a
+/.../.a./. /.../.a.
+/.../.a.// /.../.a.
+/.../.a/aa /.../.a/aa
+/.../.a/a. /.../.a/a.
+/.../.a/a/ /.../.a/a
+/.../.a/.a /.../.a/.a
+/.../.a/.. /...
+/.../.a/./ /.../.a
+/.../.a//a /.../.a/a
+/.../.a//. /.../.a
+/.../.a/// /.../.a
+/.../..aaa /.../..aaa
+/.../..aa. /.../..aa.
+/.../..aa/ /.../..aa
+/.../..a.a /.../..a.a
+/.../..a.. /.../..a..
+/.../..a./ /.../..a.
+/.../..a/a /.../..a/a
+/.../..a/. /.../..a
+/.../..a// /.../..a
+/.../...aa /.../...aa
+/.../...a. /.../...a.
+/.../...a/ /.../...a
+/.../....a /.../....a
+/.../..... /.../.....
+/.../..../ /.../....
+/.../.../a /.../.../a
+/.../.../. /.../...
+/.../...// /.../...
+/.../../aa /aa
+/.../../a. /a.
+/.../../a/ /a
+/.../../.a /.a
+/.../../.. /
+/.../.././ /
+/.../..//a /a
+/.../..//. /
+/.../../// /
+/..././aaa /.../aaa
+/..././aa. /.../aa.
+/..././aa/ /.../aa
+/..././a.a /.../a.a
+/..././a.. /.../a..
+/..././a./ /.../a.
+/..././a/a /.../a/a
+/..././a/. /.../a
+/..././a// /.../a
+/..././.aa /.../.aa
+/..././.a. /.../.a.
+/..././.a/ /.../.a
+/..././..a /.../..a
+/..././... /.../...
+/..././../ /
+/.../././a /.../a
+/.../././. /...
+/..././.// /...
+/..././/aa /.../aa
+/..././/a. /.../a.
+/..././/a/ /.../a
+/..././/.a /.../.a
+/..././/.. /
+/..././/./ /...
+/..././//a /.../a
+/..././//. /...
+/..././/// /...
+/...//aaaa /.../aaaa
+/...//aaa. /.../aaa.
+/...//aaa/ /.../aaa
+/...//aa.a /.../aa.a
+/...//aa.. /.../aa..
+/...//aa./ /.../aa.
+/...//aa/a /.../aa/a
+/...//aa/. /.../aa
+/...//aa// /.../aa
+/...//a.aa /.../a.aa
+/...//a.a. /.../a.a.
+/...//a.a/ /.../a.a
+/...//a..a /.../a..a
+/...//a... /.../a...
+/...//a../ /.../a..
+/...//a./a /.../a./a
+/...//a./. /.../a.
+/...//a.// /.../a.
+/...//a/aa /.../a/aa
+/...//a/a. /.../a/a.
+/...//a/a/ /.../a/a
+/...//a/.a /.../a/.a
+/...//a/.. /...
+/...//a/./ /.../a
+/...//a//a /.../a/a
+/...//a//. /.../a
+/...//a/// /.../a
+/...//.aaa /.../.aaa
+/...//.aa. /.../.aa.
+/...//.aa/ /.../.aa
+/...//.a.a /.../.a.a
+/...//.a.. /.../.a..
+/...//.a./ /.../.a.
+/...//.a/a /.../.a/a
+/...//.a/. /.../.a
+/...//.a// /.../.a
+/...//..aa /.../..aa
+/...//..a. /.../..a.
+/...//..a/ /.../..a
+/...//...a /.../...a
+/...//.... /.../....
+/...//.../ /.../...
+/...//../a /a
+/...//../. /
+/...//..// /
+/...//./aa /.../aa
+/...//./a. /.../a.
+/...//./a/ /.../a
+/...//./.a /.../.a
+/...//./.. /
+/...//././ /...
+/...//.//a /.../a
+/...//.//. /...
+/...//./// /...
+/...///aaa /.../aaa
+/...///aa. /.../aa.
+/...///aa/ /.../aa
+/...///a.a /.../a.a
+/...///a.. /.../a..
+/...///a./ /.../a.
+/...///a/a /.../a/a
+/...///a/. /.../a
+/...///a// /.../a
+/...///.aa /.../.aa
+/...///.a. /.../.a.
+/...///.a/ /.../.a
+/...///..a /.../..a
+/...///... /.../...
+/...///../ /
+/...///./a /.../a
+/...///./. /...
+/...///.// /...
+/...////aa /.../aa
+/...////a. /.../a.
+/...////a/ /.../a
+/...////.a /.../.a
+/...////.. /
+/...////./ /...
+/.../////a /.../a
+/.../////. /...
+/...////// /...
+/../aaaaaa /aaaaaa
+/../aaaaa. /aaaaa.
+/../aaaaa/ /aaaaa
+/../aaaa.a /aaaa.a
+/../aaaa.. /aaaa..
+/../aaaa./ /aaaa.
+/../aaaa/a /aaaa/a
+/../aaaa/. /aaaa
+/../aaaa// /aaaa
+/../aaa.aa /aaa.aa
+/../aaa.a. /aaa.a.
+/../aaa.a/ /aaa.a
+/../aaa..a /aaa..a
+/../aaa... /aaa...
+/../aaa../ /aaa..
+/../aaa./a /aaa./a
+/../aaa./. /aaa.
+/../aaa.// /aaa.
+/../aaa/aa /aaa/aa
+/../aaa/a. /aaa/a.
+/../aaa/a/ /aaa/a
+/../aaa/.a /aaa/.a
+/../aaa/.. /
+/../aaa/./ /aaa
+/../aaa//a /aaa/a
+/../aaa//. /aaa
+/../aaa/// /aaa
+/../aa.aaa /aa.aaa
+/../aa.aa. /aa.aa.
+/../aa.aa/ /aa.aa
+/../aa.a.a /aa.a.a
+/../aa.a.. /aa.a..
+/../aa.a./ /aa.a.
+/../aa.a/a /aa.a/a
+/../aa.a/. /aa.a
+/../aa.a// /aa.a
+/../aa..aa /aa..aa
+/../aa..a. /aa..a.
+/../aa..a/ /aa..a
+/../aa...a /aa...a
+/../aa.... /aa....
+/../aa.../ /aa...
+/../aa../a /aa../a
+/../aa../. /aa..
+/../aa..// /aa..
+/../aa./aa /aa./aa
+/../aa./a. /aa./a.
+/../aa./a/ /aa./a
+/../aa./.a /aa./.a
+/../aa./.. /
+/../aa././ /aa.
+/../aa.//a /aa./a
+/../aa.//. /aa.
+/../aa./// /aa.
+/../aa/aaa /aa/aaa
+/../aa/aa. /aa/aa.
+/../aa/aa/ /aa/aa
+/../aa/a.a /aa/a.a
+/../aa/a.. /aa/a..
+/../aa/a./ /aa/a.
+/../aa/a/a /aa/a/a
+/../aa/a/. /aa/a
+/../aa/a// /aa/a
+/../aa/.aa /aa/.aa
+/../aa/.a. /aa/.a.
+/../aa/.a/ /aa/.a
+/../aa/..a /aa/..a
+/../aa/... /aa/...
+/../aa/../ /
+/../aa/./a /aa/a
+/../aa/./. /aa
+/../aa/.// /aa
+/../aa//aa /aa/aa
+/../aa//a. /aa/a.
+/../aa//a/ /aa/a
+/../aa//.a /aa/.a
+/../aa//.. /
+/../aa//./ /aa
+/../aa///a /aa/a
+/../aa///. /aa
+/../aa//// /aa
+/../a.aaaa /a.aaaa
+/../a.aaa. /a.aaa.
+/../a.aaa/ /a.aaa
+/../a.aa.a /a.aa.a
+/../a.aa.. /a.aa..
+/../a.aa./ /a.aa.
+/../a.aa/a /a.aa/a
+/../a.aa/. /a.aa
+/../a.aa// /a.aa
+/../a.a.aa /a.a.aa
+/../a.a.a. /a.a.a.
+/../a.a.a/ /a.a.a
+/../a.a..a /a.a..a
+/../a.a... /a.a...
+/../a.a../ /a.a..
+/../a.a./a /a.a./a
+/../a.a./. /a.a.
+/../a.a.// /a.a.
+/../a.a/aa /a.a/aa
+/../a.a/a. /a.a/a.
+/../a.a/a/ /a.a/a
+/../a.a/.a /a.a/.a
+/../a.a/.. /
+/../a.a/./ /a.a
+/../a.a//a /a.a/a
+/../a.a//. /a.a
+/../a.a/// /a.a
+/../a..aaa /a..aaa
+/../a..aa. /a..aa.
+/../a..aa/ /a..aa
+/../a..a.a /a..a.a
+/../a..a.. /a..a..
+/../a..a./ /a..a.
+/../a..a/a /a..a/a
+/../a..a/. /a..a
+/../a..a// /a..a
+/../a...aa /a...aa
+/../a...a. /a...a.
+/../a...a/ /a...a
+/../a....a /a....a
+/../a..... /a.....
+/../a..../ /a....
+/../a.../a /a.../a
+/../a.../. /a...
+/../a...// /a...
+/../a../aa /a../aa
+/../a../a. /a../a.
+/../a../a/ /a../a
+/../a../.a /a../.a
+/../a../.. /
+/../a.././ /a..
+/../a..//a /a../a
+/../a..//. /a..
+/../a../// /a..
+/../a./aaa /a./aaa
+/../a./aa. /a./aa.
+/../a./aa/ /a./aa
+/../a./a.a /a./a.a
+/../a./a.. /a./a..
+/../a./a./ /a./a.
+/../a./a/a /a./a/a
+/../a./a/. /a./a
+/../a./a// /a./a
+/../a./.aa /a./.aa
+/../a./.a. /a./.a.
+/../a./.a/ /a./.a
+/../a./..a /a./..a
+/../a./... /a./...
+/../a./../ /
+/../a././a /a./a
+/../a././. /a.
+/../a./.// /a.
+/../a.//aa /a./aa
+/../a.//a. /a./a.
+/../a.//a/ /a./a
+/../a.//.a /a./.a
+/../a.//.. /
+/../a.//./ /a.
+/../a.///a /a./a
+/../a.///. /a.
+/../a.//// /a.
+/../a/aaaa /a/aaaa
+/../a/aaa. /a/aaa.
+/../a/aaa/ /a/aaa
+/../a/aa.a /a/aa.a
+/../a/aa.. /a/aa..
+/../a/aa./ /a/aa.
+/../a/aa/a /a/aa/a
+/../a/aa/. /a/aa
+/../a/aa// /a/aa
+/../a/a.aa /a/a.aa
+/../a/a.a. /a/a.a.
+/../a/a.a/ /a/a.a
+/../a/a..a /a/a..a
+/../a/a... /a/a...
+/../a/a../ /a/a..
+/../a/a./a /a/a./a
+/../a/a./. /a/a.
+/../a/a.// /a/a.
+/../a/a/aa /a/a/aa
+/../a/a/a. /a/a/a.
+/../a/a/a/ /a/a/a
+/../a/a/.a /a/a/.a
+/../a/a/.. /a
+/../a/a/./ /a/a
+/../a/a//a /a/a/a
+/../a/a//. /a/a
+/../a/a/// /a/a
+/../a/.aaa /a/.aaa
+/../a/.aa. /a/.aa.
+/../a/.aa/ /a/.aa
+/../a/.a.a /a/.a.a
+/../a/.a.. /a/.a..
+/../a/.a./ /a/.a.
+/../a/.a/a /a/.a/a
+/../a/.a/. /a/.a
+/../a/.a// /a/.a
+/../a/..aa /a/..aa
+/../a/..a. /a/..a.
+/../a/..a/ /a/..a
+/../a/...a /a/...a
+/../a/.... /a/....
+/../a/.../ /a/...
+/../a/../a /a
+/../a/../. /
+/../a/..// /
+/../a/./aa /a/aa
+/../a/./a. /a/a.
+/../a/./a/ /a/a
+/../a/./.a /a/.a
+/../a/./.. /
+/../a/././ /a
+/../a/.//a /a/a
+/../a/.//. /a
+/../a/./// /a
+/../a//aaa /a/aaa
+/../a//aa. /a/aa.
+/../a//aa/ /a/aa
+/../a//a.a /a/a.a
+/../a//a.. /a/a..
+/../a//a./ /a/a.
+/../a//a/a /a/a/a
+/../a//a/. /a/a
+/../a//a// /a/a
+/../a//.aa /a/.aa
+/../a//.a. /a/.a.
+/../a//.a/ /a/.a
+/../a//..a /a/..a
+/../a//... /a/...
+/../a//../ /
+/../a//./a /a/a
+/../a//./. /a
+/../a//.// /a
+/../a///aa /a/aa
+/../a///a. /a/a.
+/../a///a/ /a/a
+/../a///.a /a/.a
+/../a///.. /
+/../a///./ /a
+/../a////a /a/a
+/../a////. /a
+/../a///// /a
+/../.aaaaa /.aaaaa
+/../.aaaa. /.aaaa.
+/../.aaaa/ /.aaaa
+/../.aaa.a /.aaa.a
+/../.aaa.. /.aaa..
+/../.aaa./ /.aaa.
+/../.aaa/a /.aaa/a
+/../.aaa/. /.aaa
+/../.aaa// /.aaa
+/../.aa.aa /.aa.aa
+/../.aa.a. /.aa.a.
+/../.aa.a/ /.aa.a
+/../.aa..a /.aa..a
+/../.aa... /.aa...
+/../.aa../ /.aa..
+/../.aa./a /.aa./a
+/../.aa./. /.aa.
+/../.aa.// /.aa.
+/../.aa/aa /.aa/aa
+/../.aa/a. /.aa/a.
+/../.aa/a/ /.aa/a
+/../.aa/.a /.aa/.a
+/../.aa/.. /
+/../.aa/./ /.aa
+/../.aa//a /.aa/a
+/../.aa//. /.aa
+/../.aa/// /.aa
+/../.a.aaa /.a.aaa
+/../.a.aa. /.a.aa.
+/../.a.aa/ /.a.aa
+/../.a.a.a /.a.a.a
+/../.a.a.. /.a.a..
+/../.a.a./ /.a.a.
+/../.a.a/a /.a.a/a
+/../.a.a/. /.a.a
+/../.a.a// /.a.a
+/../.a..aa /.a..aa
+/../.a..a. /.a..a.
+/../.a..a/ /.a..a
+/../.a...a /.a...a
+/../.a.... /.a....
+/../.a.../ /.a...
+/../.a../a /.a../a
+/../.a../. /.a..
+/../.a..// /.a..
+/../.a./aa /.a./aa
+/../.a./a. /.a./a.
+/../.a./a/ /.a./a
+/../.a./.a /.a./.a
+/../.a./.. /
+/../.a././ /.a.
+/../.a.//a /.a./a
+/../.a.//. /.a.
+/../.a./// /.a.
+/../.a/aaa /.a/aaa
+/../.a/aa. /.a/aa.
+/../.a/aa/ /.a/aa
+/../.a/a.a /.a/a.a
+/../.a/a.. /.a/a..
+/../.a/a./ /.a/a.
+/../.a/a/a /.a/a/a
+/../.a/a/. /.a/a
+/../.a/a// /.a/a
+/../.a/.aa /.a/.aa
+/../.a/.a. /.a/.a.
+/../.a/.a/ /.a/.a
+/../.a/..a /.a/..a
+/../.a/... /.a/...
+/../.a/../ /
+/../.a/./a /.a/a
+/../.a/./. /.a
+/../.a/.// /.a
+/../.a//aa /.a/aa
+/../.a//a. /.a/a.
+/../.a//a/ /.a/a
+/../.a//.a /.a/.a
+/../.a//.. /
+/../.a//./ /.a
+/../.a///a /.a/a
+/../.a///. /.a
+/../.a//// /.a
+/../..aaaa /..aaaa
+/../..aaa. /..aaa.
+/../..aaa/ /..aaa
+/../..aa.a /..aa.a
+/../..aa.. /..aa..
+/../..aa./ /..aa.
+/../..aa/a /..aa/a
+/../..aa/. /..aa
+/../..aa// /..aa
+/../..a.aa /..a.aa
+/../..a.a. /..a.a.
+/../..a.a/ /..a.a
+/../..a..a /..a..a
+/../..a... /..a...
+/../..a../ /..a..
+/../..a./a /..a./a
+/../..a./. /..a.
+/../..a.// /..a.
+/../..a/aa /..a/aa
+/../..a/a. /..a/a.
+/../..a/a/ /..a/a
+/../..a/.a /..a/.a
+/../..a/.. /
+/../..a/./ /..a
+/../..a//a /..a/a
+/../..a//. /..a
+/../..a/// /..a
+/../...aaa /...aaa
+/../...aa. /...aa.
+/../...aa/ /...aa
+/../...a.a /...a.a
+/../...a.. /...a..
+/../...a./ /...a.
+/../...a/a /...a/a
+/../...a/. /...a
+/../...a// /...a
+/../....aa /....aa
+/../....a. /....a.
+/../....a/ /....a
+/../.....a /.....a
+/../...... /......
+/../...../ /.....
+/../..../a /..../a
+/../..../. /....
+/../....// /....
+/../.../aa /.../aa
+/../.../a. /.../a.
+/../.../a/ /.../a
+/../.../.a /.../.a
+/../.../.. /
+/../..././ /...
+/../...//a /.../a
+/../...//. /...
+/../.../// /...
+/../../aaa /aaa
+/../../aa. /aa.
+/../../aa/ /aa
+/../../a.a /a.a
+/../../a.. /a..
+/../../a./ /a.
+/../../a/a /a/a
+/../../a/. /a
+/../../a// /a
+/../../.aa /.aa
+/../../.a. /.a.
+/../../.a/ /.a
+/../../..a /..a
+/../../... /...
+/../../../ /
+/../.././a /a
+/../.././. /
+/../../.// /
+/../..//aa /aa
+/../..//a. /a.
+/../..//a/ /a
+/../..//.a /.a
+/../..//.. /
+/../..//./ /
+/../..///a /a
+/../..///. /
+/../..//// /
+/.././aaaa /aaaa
+/.././aaa. /aaa.
+/.././aaa/ /aaa
+/.././aa.a /aa.a
+/.././aa.. /aa..
+/.././aa./ /aa.
+/.././aa/a /aa/a
+/.././aa/. /aa
+/.././aa// /aa
+/.././a.aa /a.aa
+/.././a.a. /a.a.
+/.././a.a/ /a.a
+/.././a..a /a..a
+/.././a... /a...
+/.././a../ /a..
+/.././a./a /a./a
+/.././a./. /a.
+/.././a.// /a.
+/.././a/aa /a/aa
+/.././a/a. /a/a.
+/.././a/a/ /a/a
+/.././a/.a /a/.a
+/.././a/.. /
+/.././a/./ /a
+/.././a//a /a/a
+/.././a//. /a
+/.././a/// /a
+/.././.aaa /.aaa
+/.././.aa. /.aa.
+/.././.aa/ /.aa
+/.././.a.a /.a.a
+/.././.a.. /.a..
+/.././.a./ /.a.
+/.././.a/a /.a/a
+/.././.a/. /.a
+/.././.a// /.a
+/.././..aa /..aa
+/.././..a. /..a.
+/.././..a/ /..a
+/.././...a /...a
+/.././.... /....
+/.././.../ /...
+/.././../a /a
+/.././../. /
+/.././..// /
+/../././aa /aa
+/../././a. /a.
+/../././a/ /a
+/../././.a /.a
+/../././.. /
+/.././././ /
+/../././/a /a
+/../././/. /
+/../././// /
+/.././/aaa /aaa
+/.././/aa. /aa.
+/.././/aa/ /aa
+/.././/a.a /a.a
+/.././/a.. /a..
+/.././/a./ /a.
+/.././/a/a /a/a
+/.././/a/. /a
+/.././/a// /a
+/.././/.aa /.aa
+/.././/.a. /.a.
+/.././/.a/ /.a
+/.././/..a /..a
+/.././/... /...
+/.././/../ /
+/.././/./a /a
+/.././/./. /
+/.././/.// /
+/.././//aa /aa
+/.././//a. /a.
+/.././//a/ /a
+/.././//.a /.a
+/.././//.. /
+/.././//./ /
+/.././///a /a
+/.././///. /
+/.././//// /
+/..//aaaaa /aaaaa
+/..//aaaa. /aaaa.
+/..//aaaa/ /aaaa
+/..//aaa.a /aaa.a
+/..//aaa.. /aaa..
+/..//aaa./ /aaa.
+/..//aaa/a /aaa/a
+/..//aaa/. /aaa
+/..//aaa// /aaa
+/..//aa.aa /aa.aa
+/..//aa.a. /aa.a.
+/..//aa.a/ /aa.a
+/..//aa..a /aa..a
+/..//aa... /aa...
+/..//aa../ /aa..
+/..//aa./a /aa./a
+/..//aa./. /aa.
+/..//aa.// /aa.
+/..//aa/aa /aa/aa
+/..//aa/a. /aa/a.
+/..//aa/a/ /aa/a
+/..//aa/.a /aa/.a
+/..//aa/.. /
+/..//aa/./ /aa
+/..//aa//a /aa/a
+/..//aa//. /aa
+/..//aa/// /aa
+/..//a.aaa /a.aaa
+/..//a.aa. /a.aa.
+/..//a.aa/ /a.aa
+/..//a.a.a /a.a.a
+/..//a.a.. /a.a..
+/..//a.a./ /a.a.
+/..//a.a/a /a.a/a
+/..//a.a/. /a.a
+/..//a.a// /a.a
+/..//a..aa /a..aa
+/..//a..a. /a..a.
+/..//a..a/ /a..a
+/..//a...a /a...a
+/..//a.... /a....
+/..//a.../ /a...
+/..//a../a /a../a
+/..//a../. /a..
+/..//a..// /a..
+/..//a./aa /a./aa
+/..//a./a. /a./a.
+/..//a./a/ /a./a
+/..//a./.a /a./.a
+/..//a./.. /
+/..//a././ /a.
+/..//a.//a /a./a
+/..//a.//. /a.
+/..//a./// /a.
+/..//a/aaa /a/aaa
+/..//a/aa. /a/aa.
+/..//a/aa/ /a/aa
+/..//a/a.a /a/a.a
+/..//a/a.. /a/a..
+/..//a/a./ /a/a.
+/..//a/a/a /a/a/a
+/..//a/a/. /a/a
+/..//a/a// /a/a
+/..//a/.aa /a/.aa
+/..//a/.a. /a/.a.
+/..//a/.a/ /a/.a
+/..//a/..a /a/..a
+/..//a/... /a/...
+/..//a/../ /
+/..//a/./a /a/a
+/..//a/./. /a
+/..//a/.// /a
+/..//a//aa /a/aa
+/..//a//a. /a/a.
+/..//a//a/ /a/a
+/..//a//.a /a/.a
+/..//a//.. /
+/..//a//./ /a
+/..//a///a /a/a
+/..//a///. /a
+/..//a//// /a
+/..//.aaaa /.aaaa
+/..//.aaa. /.aaa.
+/..//.aaa/ /.aaa
+/..//.aa.a /.aa.a
+/..//.aa.. /.aa..
+/..//.aa./ /.aa.
+/..//.aa/a /.aa/a
+/..//.aa/. /.aa
+/..//.aa// /.aa
+/..//.a.aa /.a.aa
+/..//.a.a. /.a.a.
+/..//.a.a/ /.a.a
+/..//.a..a /.a..a
+/..//.a... /.a...
+/..//.a../ /.a..
+/..//.a./a /.a./a
+/..//.a./. /.a.
+/..//.a.// /.a.
+/..//.a/aa /.a/aa
+/..//.a/a. /.a/a.
+/..//.a/a/ /.a/a
+/..//.a/.a /.a/.a
+/..//.a/.. /
+/..//.a/./ /.a
+/..//.a//a /.a/a
+/..//.a//. /.a
+/..//.a/// /.a
+/..//..aaa /..aaa
+/..//..aa. /..aa.
+/..//..aa/ /..aa
+/..//..a.a /..a.a
+/..//..a.. /..a..
+/..//..a./ /..a.
+/..//..a/a /..a/a
+/..//..a/. /..a
+/..//..a// /..a
+/..//...aa /...aa
+/..//...a. /...a.
+/..//...a/ /...a
+/..//....a /....a
+/..//..... /.....
+/..//..../ /....
+/..//.../a /.../a
+/..//.../. /...
+/..//...// /...
+/..//../aa /aa
+/..//../a. /a.
+/..//../a/ /a
+/..//../.a /.a
+/..//../.. /
+/..//.././ /
+/..//..//a /a
+/..//..//. /
+/..//../// /
+/..//./aaa /aaa
+/..//./aa. /aa.
+/..//./aa/ /aa
+/..//./a.a /a.a
+/..//./a.. /a..
+/..//./a./ /a.
+/..//./a/a /a/a
+/..//./a/. /a
+/..//./a// /a
+/..//./.aa /.aa
+/..//./.a. /.a.
+/..//./.a/ /.a
+/..//./..a /..a
+/..//./... /...
+/..//./../ /
+/..//././a /a
+/..//././. /
+/..//./.// /
+/..//.//aa /aa
+/..//.//a. /a.
+/..//.//a/ /a
+/..//.//.a /.a
+/..//.//.. /
+/..//.//./ /
+/..//.///a /a
+/..//.///. /
+/..//.//// /
+/..///aaaa /aaaa
+/..///aaa. /aaa.
+/..///aaa/ /aaa
+/..///aa.a /aa.a
+/..///aa.. /aa..
+/..///aa./ /aa.
+/..///aa/a /aa/a
+/..///aa/. /aa
+/..///aa// /aa
+/..///a.aa /a.aa
+/..///a.a. /a.a.
+/..///a.a/ /a.a
+/..///a..a /a..a
+/..///a... /a...
+/..///a../ /a..
+/..///a./a /a./a
+/..///a./. /a.
+/..///a.// /a.
+/..///a/aa /a/aa
+/..///a/a. /a/a.
+/..///a/a/ /a/a
+/..///a/.a /a/.a
+/..///a/.. /
+/..///a/./ /a
+/..///a//a /a/a
+/..///a//. /a
+/..///a/// /a
+/..///.aaa /.aaa
+/..///.aa. /.aa.
+/..///.aa/ /.aa
+/..///.a.a /.a.a
+/..///.a.. /.a..
+/..///.a./ /.a.
+/..///.a/a /.a/a
+/..///.a/. /.a
+/..///.a// /.a
+/..///..aa /..aa
+/..///..a. /..a.
+/..///..a/ /..a
+/..///...a /...a
+/..///.... /....
+/..///.../ /...
+/..///../a /a
+/..///../. /
+/..///..// /
+/..///./aa /aa
+/..///./a. /a.
+/..///./a/ /a
+/..///./.a /.a
+/..///./.. /
+/..///././ /
+/..///.//a /a
+/..///.//. /
+/..///./// /
+/..////aaa /aaa
+/..////aa. /aa.
+/..////aa/ /aa
+/..////a.a /a.a
+/..////a.. /a..
+/..////a./ /a.
+/..////a/a /a/a
+/..////a/. /a
+/..////a// /a
+/..////.aa /.aa
+/..////.a. /.a.
+/..////.a/ /.a
+/..////..a /..a
+/..////... /...
+/..////../ /
+/..////./a /a
+/..////./. /
+/..////.// /
+/../////aa /aa
+/../////a. /a.
+/../////a/ /a
+/../////.a /.a
+/../////.. /
+/../////./ /
+/..//////a /a
+/..//////. /
+/../////// /
+/./aaaaaaa /aaaaaaa
+/./aaaaaa. /aaaaaa.
+/./aaaaaa/ /aaaaaa
+/./aaaaa.a /aaaaa.a
+/./aaaaa.. /aaaaa..
+/./aaaaa./ /aaaaa.
+/./aaaaa/a /aaaaa/a
+/./aaaaa/. /aaaaa
+/./aaaaa// /aaaaa
+/./aaaa.aa /aaaa.aa
+/./aaaa.a. /aaaa.a.
+/./aaaa.a/ /aaaa.a
+/./aaaa..a /aaaa..a
+/./aaaa... /aaaa...
+/./aaaa../ /aaaa..
+/./aaaa./a /aaaa./a
+/./aaaa./. /aaaa.
+/./aaaa.// /aaaa.
+/./aaaa/aa /aaaa/aa
+/./aaaa/a. /aaaa/a.
+/./aaaa/a/ /aaaa/a
+/./aaaa/.a /aaaa/.a
+/./aaaa/.. /
+/./aaaa/./ /aaaa
+/./aaaa//a /aaaa/a
+/./aaaa//. /aaaa
+/./aaaa/// /aaaa
+/./aaa.aaa /aaa.aaa
+/./aaa.aa. /aaa.aa.
+/./aaa.aa/ /aaa.aa
+/./aaa.a.a /aaa.a.a
+/./aaa.a.. /aaa.a..
+/./aaa.a./ /aaa.a.
+/./aaa.a/a /aaa.a/a
+/./aaa.a/. /aaa.a
+/./aaa.a// /aaa.a
+/./aaa..aa /aaa..aa
+/./aaa..a. /aaa..a.
+/./aaa..a/ /aaa..a
+/./aaa...a /aaa...a
+/./aaa.... /aaa....
+/./aaa.../ /aaa...
+/./aaa../a /aaa../a
+/./aaa../. /aaa..
+/./aaa..// /aaa..
+/./aaa./aa /aaa./aa
+/./aaa./a. /aaa./a.
+/./aaa./a/ /aaa./a
+/./aaa./.a /aaa./.a
+/./aaa./.. /
+/./aaa././ /aaa.
+/./aaa.//a /aaa./a
+/./aaa.//. /aaa.
+/./aaa./// /aaa.
+/./aaa/aaa /aaa/aaa
+/./aaa/aa. /aaa/aa.
+/./aaa/aa/ /aaa/aa
+/./aaa/a.a /aaa/a.a
+/./aaa/a.. /aaa/a..
+/./aaa/a./ /aaa/a.
+/./aaa/a/a /aaa/a/a
+/./aaa/a/. /aaa/a
+/./aaa/a// /aaa/a
+/./aaa/.aa /aaa/.aa
+/./aaa/.a. /aaa/.a.
+/./aaa/.a/ /aaa/.a
+/./aaa/..a /aaa/..a
+/./aaa/... /aaa/...
+/./aaa/../ /
+/./aaa/./a /aaa/a
+/./aaa/./. /aaa
+/./aaa/.// /aaa
+/./aaa//aa /aaa/aa
+/./aaa//a. /aaa/a.
+/./aaa//a/ /aaa/a
+/./aaa//.a /aaa/.a
+/./aaa//.. /
+/./aaa//./ /aaa
+/./aaa///a /aaa/a
+/./aaa///. /aaa
+/./aaa//// /aaa
+/./aa.aaaa /aa.aaaa
+/./aa.aaa. /aa.aaa.
+/./aa.aaa/ /aa.aaa
+/./aa.aa.a /aa.aa.a
+/./aa.aa.. /aa.aa..
+/./aa.aa./ /aa.aa.
+/./aa.aa/a /aa.aa/a
+/./aa.aa/. /aa.aa
+/./aa.aa// /aa.aa
+/./aa.a.aa /aa.a.aa
+/./aa.a.a. /aa.a.a.
+/./aa.a.a/ /aa.a.a
+/./aa.a..a /aa.a..a
+/./aa.a... /aa.a...
+/./aa.a../ /aa.a..
+/./aa.a./a /aa.a./a
+/./aa.a./. /aa.a.
+/./aa.a.// /aa.a.
+/./aa.a/aa /aa.a/aa
+/./aa.a/a. /aa.a/a.
+/./aa.a/a/ /aa.a/a
+/./aa.a/.a /aa.a/.a
+/./aa.a/.. /
+/./aa.a/./ /aa.a
+/./aa.a//a /aa.a/a
+/./aa.a//. /aa.a
+/./aa.a/// /aa.a
+/./aa..aaa /aa..aaa
+/./aa..aa. /aa..aa.
+/./aa..aa/ /aa..aa
+/./aa..a.a /aa..a.a
+/./aa..a.. /aa..a..
+/./aa..a./ /aa..a.
+/./aa..a/a /aa..a/a
+/./aa..a/. /aa..a
+/./aa..a// /aa..a
+/./aa...aa /aa...aa
+/./aa...a. /aa...a.
+/./aa...a/ /aa...a
+/./aa....a /aa....a
+/./aa..... /aa.....
+/./aa..../ /aa....
+/./aa.../a /aa.../a
+/./aa.../. /aa...
+/./aa...// /aa...
+/./aa../aa /aa../aa
+/./aa../a. /aa../a.
+/./aa../a/ /aa../a
+/./aa../.a /aa../.a
+/./aa../.. /
+/./aa.././ /aa..
+/./aa..//a /aa../a
+/./aa..//. /aa..
+/./aa../// /aa..
+/./aa./aaa /aa./aaa
+/./aa./aa. /aa./aa.
+/./aa./aa/ /aa./aa
+/./aa./a.a /aa./a.a
+/./aa./a.. /aa./a..
+/./aa./a./ /aa./a.
+/./aa./a/a /aa./a/a
+/./aa./a/. /aa./a
+/./aa./a// /aa./a
+/./aa./.aa /aa./.aa
+/./aa./.a. /aa./.a.
+/./aa./.a/ /aa./.a
+/./aa./..a /aa./..a
+/./aa./... /aa./...
+/./aa./../ /
+/./aa././a /aa./a
+/./aa././. /aa.
+/./aa./.// /aa.
+/./aa.//aa /aa./aa
+/./aa.//a. /aa./a.
+/./aa.//a/ /aa./a
+/./aa.//.a /aa./.a
+/./aa.//.. /
+/./aa.//./ /aa.
+/./aa.///a /aa./a
+/./aa.///. /aa.
+/./aa.//// /aa.
+/./aa/aaaa /aa/aaaa
+/./aa/aaa. /aa/aaa.
+/./aa/aaa/ /aa/aaa
+/./aa/aa.a /aa/aa.a
+/./aa/aa.. /aa/aa..
+/./aa/aa./ /aa/aa.
+/./aa/aa/a /aa/aa/a
+/./aa/aa/. /aa/aa
+/./aa/aa// /aa/aa
+/./aa/a.aa /aa/a.aa
+/./aa/a.a. /aa/a.a.
+/./aa/a.a/ /aa/a.a
+/./aa/a..a /aa/a..a
+/./aa/a... /aa/a...
+/./aa/a../ /aa/a..
+/./aa/a./a /aa/a./a
+/./aa/a./. /aa/a.
+/./aa/a.// /aa/a.
+/./aa/a/aa /aa/a/aa
+/./aa/a/a. /aa/a/a.
+/./aa/a/a/ /aa/a/a
+/./aa/a/.a /aa/a/.a
+/./aa/a/.. /aa
+/./aa/a/./ /aa/a
+/./aa/a//a /aa/a/a
+/./aa/a//. /aa/a
+/./aa/a/// /aa/a
+/./aa/.aaa /aa/.aaa
+/./aa/.aa. /aa/.aa.
+/./aa/.aa/ /aa/.aa
+/./aa/.a.a /aa/.a.a
+/./aa/.a.. /aa/.a..
+/./aa/.a./ /aa/.a.
+/./aa/.a/a /aa/.a/a
+/./aa/.a/. /aa/.a
+/./aa/.a// /aa/.a
+/./aa/..aa /aa/..aa
+/./aa/..a. /aa/..a.
+/./aa/..a/ /aa/..a
+/./aa/...a /aa/...a
+/./aa/.... /aa/....
+/./aa/.../ /aa/...
+/./aa/../a /a
+/./aa/../. /
+/./aa/..// /
+/./aa/./aa /aa/aa
+/./aa/./a. /aa/a.
+/./aa/./a/ /aa/a
+/./aa/./.a /aa/.a
+/./aa/./.. /
+/./aa/././ /aa
+/./aa/.//a /aa/a
+/./aa/.//. /aa
+/./aa/./// /aa
+/./aa//aaa /aa/aaa
+/./aa//aa. /aa/aa.
+/./aa//aa/ /aa/aa
+/./aa//a.a /aa/a.a
+/./aa//a.. /aa/a..
+/./aa//a./ /aa/a.
+/./aa//a/a /aa/a/a
+/./aa//a/. /aa/a
+/./aa//a// /aa/a
+/./aa//.aa /aa/.aa
+/./aa//.a. /aa/.a.
+/./aa//.a/ /aa/.a
+/./aa//..a /aa/..a
+/./aa//... /aa/...
+/./aa//../ /
+/./aa//./a /aa/a
+/./aa//./. /aa
+/./aa//.// /aa
+/./aa///aa /aa/aa
+/./aa///a. /aa/a.
+/./aa///a/ /aa/a
+/./aa///.a /aa/.a
+/./aa///.. /
+/./aa///./ /aa
+/./aa////a /aa/a
+/./aa////. /aa
+/./aa///// /aa
+/./a.aaaaa /a.aaaaa
+/./a.aaaa. /a.aaaa.
+/./a.aaaa/ /a.aaaa
+/./a.aaa.a /a.aaa.a
+/./a.aaa.. /a.aaa..
+/./a.aaa./ /a.aaa.
+/./a.aaa/a /a.aaa/a
+/./a.aaa/. /a.aaa
+/./a.aaa// /a.aaa
+/./a.aa.aa /a.aa.aa
+/./a.aa.a. /a.aa.a.
+/./a.aa.a/ /a.aa.a
+/./a.aa..a /a.aa..a
+/./a.aa... /a.aa...
+/./a.aa../ /a.aa..
+/./a.aa./a /a.aa./a
+/./a.aa./. /a.aa.
+/./a.aa.// /a.aa.
+/./a.aa/aa /a.aa/aa
+/./a.aa/a. /a.aa/a.
+/./a.aa/a/ /a.aa/a
+/./a.aa/.a /a.aa/.a
+/./a.aa/.. /
+/./a.aa/./ /a.aa
+/./a.aa//a /a.aa/a
+/./a.aa//. /a.aa
+/./a.aa/// /a.aa
+/./a.a.aaa /a.a.aaa
+/./a.a.aa. /a.a.aa.
+/./a.a.aa/ /a.a.aa
+/./a.a.a.a /a.a.a.a
+/./a.a.a.. /a.a.a..
+/./a.a.a./ /a.a.a.
+/./a.a.a/a /a.a.a/a
+/./a.a.a/. /a.a.a
+/./a.a.a// /a.a.a
+/./a.a..aa /a.a..aa
+/./a.a..a. /a.a..a.
+/./a.a..a/ /a.a..a
+/./a.a...a /a.a...a
+/./a.a.... /a.a....
+/./a.a.../ /a.a...
+/./a.a../a /a.a../a
+/./a.a../. /a.a..
+/./a.a..// /a.a..
+/./a.a./aa /a.a./aa
+/./a.a./a. /a.a./a.
+/./a.a./a/ /a.a./a
+/./a.a./.a /a.a./.a
+/./a.a./.. /
+/./a.a././ /a.a.
+/./a.a.//a /a.a./a
+/./a.a.//. /a.a.
+/./a.a./// /a.a.
+/./a.a/aaa /a.a/aaa
+/./a.a/aa. /a.a/aa.
+/./a.a/aa/ /a.a/aa
+/./a.a/a.a /a.a/a.a
+/./a.a/a.. /a.a/a..
+/./a.a/a./ /a.a/a.
+/./a.a/a/a /a.a/a/a
+/./a.a/a/. /a.a/a
+/./a.a/a// /a.a/a
+/./a.a/.aa /a.a/.aa
+/./a.a/.a. /a.a/.a.
+/./a.a/.a/ /a.a/.a
+/./a.a/..a /a.a/..a
+/./a.a/... /a.a/...
+/./a.a/../ /
+/./a.a/./a /a.a/a
+/./a.a/./. /a.a
+/./a.a/.// /a.a
+/./a.a//aa /a.a/aa
+/./a.a//a. /a.a/a.
+/./a.a//a/ /a.a/a
+/./a.a//.a /a.a/.a
+/./a.a//.. /
+/./a.a//./ /a.a
+/./a.a///a /a.a/a
+/./a.a///. /a.a
+/./a.a//// /a.a
+/./a..aaaa /a..aaaa
+/./a..aaa. /a..aaa.
+/./a..aaa/ /a..aaa
+/./a..aa.a /a..aa.a
+/./a..aa.. /a..aa..
+/./a..aa./ /a..aa.
+/./a..aa/a /a..aa/a
+/./a..aa/. /a..aa
+/./a..aa// /a..aa
+/./a..a.aa /a..a.aa
+/./a..a.a. /a..a.a.
+/./a..a.a/ /a..a.a
+/./a..a..a /a..a..a
+/./a..a... /a..a...
+/./a..a../ /a..a..
+/./a..a./a /a..a./a
+/./a..a./. /a..a.
+/./a..a.// /a..a.
+/./a..a/aa /a..a/aa
+/./a..a/a. /a..a/a.
+/./a..a/a/ /a..a/a
+/./a..a/.a /a..a/.a
+/./a..a/.. /
+/./a..a/./ /a..a
+/./a..a//a /a..a/a
+/./a..a//. /a..a
+/./a..a/// /a..a
+/./a...aaa /a...aaa
+/./a...aa. /a...aa.
+/./a...aa/ /a...aa
+/./a...a.a /a...a.a
+/./a...a.. /a...a..
+/./a...a./ /a...a.
+/./a...a/a /a...a/a
+/./a...a/. /a...a
+/./a...a// /a...a
+/./a....aa /a....aa
+/./a....a. /a....a.
+/./a....a/ /a....a
+/./a.....a /a.....a
+/./a...... /a......
+/./a...../ /a.....
+/./a..../a /a..../a
+/./a..../. /a....
+/./a....// /a....
+/./a.../aa /a.../aa
+/./a.../a. /a.../a.
+/./a.../a/ /a.../a
+/./a.../.a /a.../.a
+/./a.../.. /
+/./a..././ /a...
+/./a...//a /a.../a
+/./a...//. /a...
+/./a.../// /a...
+/./a../aaa /a../aaa
+/./a../aa. /a../aa.
+/./a../aa/ /a../aa
+/./a../a.a /a../a.a
+/./a../a.. /a../a..
+/./a../a./ /a../a.
+/./a../a/a /a../a/a
+/./a../a/. /a../a
+/./a../a// /a../a
+/./a../.aa /a../.aa
+/./a../.a. /a../.a.
+/./a../.a/ /a../.a
+/./a../..a /a../..a
+/./a../... /a../...
+/./a../../ /
+/./a.././a /a../a
+/./a.././. /a..
+/./a../.// /a..
+/./a..//aa /a../aa
+/./a..//a. /a../a.
+/./a..//a/ /a../a
+/./a..//.a /a../.a
+/./a..//.. /
+/./a..//./ /a..
+/./a..///a /a../a
+/./a..///. /a..
+/./a..//// /a..
+/./a./aaaa /a./aaaa
+/./a./aaa. /a./aaa.
+/./a./aaa/ /a./aaa
+/./a./aa.a /a./aa.a
+/./a./aa.. /a./aa..
+/./a./aa./ /a./aa.
+/./a./aa/a /a./aa/a
+/./a./aa/. /a./aa
+/./a./aa// /a./aa
+/./a./a.aa /a./a.aa
+/./a./a.a. /a./a.a.
+/./a./a.a/ /a./a.a
+/./a./a..a /a./a..a
+/./a./a... /a./a...
+/./a./a../ /a./a..
+/./a./a./a /a./a./a
+/./a./a./. /a./a.
+/./a./a.// /a./a.
+/./a./a/aa /a./a/aa
+/./a./a/a. /a./a/a.
+/./a./a/a/ /a./a/a
+/./a./a/.a /a./a/.a
+/./a./a/.. /a.
+/./a./a/./ /a./a
+/./a./a//a /a./a/a
+/./a./a//. /a./a
+/./a./a/// /a./a
+/./a./.aaa /a./.aaa
+/./a./.aa. /a./.aa.
+/./a./.aa/ /a./.aa
+/./a./.a.a /a./.a.a
+/./a./.a.. /a./.a..
+/./a./.a./ /a./.a.
+/./a./.a/a /a./.a/a
+/./a./.a/. /a./.a
+/./a./.a// /a./.a
+/./a./..aa /a./..aa
+/./a./..a. /a./..a.
+/./a./..a/ /a./..a
+/./a./...a /a./...a
+/./a./.... /a./....
+/./a./.../ /a./...
+/./a./../a /a
+/./a./../. /
+/./a./..// /
+/./a././aa /a./aa
+/./a././a. /a./a.
+/./a././a/ /a./a
+/./a././.a /a./.a
+/./a././.. /
+/./a./././ /a.
+/./a././/a /a./a
+/./a././/. /a.
+/./a././// /a.
+/./a.//aaa /a./aaa
+/./a.//aa. /a./aa.
+/./a.//aa/ /a./aa
+/./a.//a.a /a./a.a
+/./a.//a.. /a./a..
+/./a.//a./ /a./a.
+/./a.//a/a /a./a/a
+/./a.//a/. /a./a
+/./a.//a// /a./a
+/./a.//.aa /a./.aa
+/./a.//.a. /a./.a.
+/./a.//.a/ /a./.a
+/./a.//..a /a./..a
+/./a.//... /a./...
+/./a.//../ /
+/./a.//./a /a./a
+/./a.//./. /a.
+/./a.//.// /a.
+/./a.///aa /a./aa
+/./a.///a. /a./a.
+/./a.///a/ /a./a
+/./a.///.a /a./.a
+/./a.///.. /
+/./a.///./ /a.
+/./a.////a /a./a
+/./a.////. /a.
+/./a.///// /a.
+/./a/aaaaa /a/aaaaa
+/./a/aaaa. /a/aaaa.
+/./a/aaaa/ /a/aaaa
+/./a/aaa.a /a/aaa.a
+/./a/aaa.. /a/aaa..
+/./a/aaa./ /a/aaa.
+/./a/aaa/a /a/aaa/a
+/./a/aaa/. /a/aaa
+/./a/aaa// /a/aaa
+/./a/aa.aa /a/aa.aa
+/./a/aa.a. /a/aa.a.
+/./a/aa.a/ /a/aa.a
+/./a/aa..a /a/aa..a
+/./a/aa... /a/aa...
+/./a/aa../ /a/aa..
+/./a/aa./a /a/aa./a
+/./a/aa./. /a/aa.
+/./a/aa.// /a/aa.
+/./a/aa/aa /a/aa/aa
+/./a/aa/a. /a/aa/a.
+/./a/aa/a/ /a/aa/a
+/./a/aa/.a /a/aa/.a
+/./a/aa/.. /a
+/./a/aa/./ /a/aa
+/./a/aa//a /a/aa/a
+/./a/aa//. /a/aa
+/./a/aa/// /a/aa
+/./a/a.aaa /a/a.aaa
+/./a/a.aa. /a/a.aa.
+/./a/a.aa/ /a/a.aa
+/./a/a.a.a /a/a.a.a
+/./a/a.a.. /a/a.a..
+/./a/a.a./ /a/a.a.
+/./a/a.a/a /a/a.a/a
+/./a/a.a/. /a/a.a
+/./a/a.a// /a/a.a
+/./a/a..aa /a/a..aa
+/./a/a..a. /a/a..a.
+/./a/a..a/ /a/a..a
+/./a/a...a /a/a...a
+/./a/a.... /a/a....
+/./a/a.../ /a/a...
+/./a/a../a /a/a../a
+/./a/a../. /a/a..
+/./a/a..// /a/a..
+/./a/a./aa /a/a./aa
+/./a/a./a. /a/a./a.
+/./a/a./a/ /a/a./a
+/./a/a./.a /a/a./.a
+/./a/a./.. /a
+/./a/a././ /a/a.
+/./a/a.//a /a/a./a
+/./a/a.//. /a/a.
+/./a/a./// /a/a.
+/./a/a/aaa /a/a/aaa
+/./a/a/aa. /a/a/aa.
+/./a/a/aa/ /a/a/aa
+/./a/a/a.a /a/a/a.a
+/./a/a/a.. /a/a/a..
+/./a/a/a./ /a/a/a.
+/./a/a/a/a /a/a/a/a
+/./a/a/a/. /a/a/a
+/./a/a/a// /a/a/a
+/./a/a/.aa /a/a/.aa
+/./a/a/.a. /a/a/.a.
+/./a/a/.a/ /a/a/.a
+/./a/a/..a /a/a/..a
+/./a/a/... /a/a/...
+/./a/a/../ /a
+/./a/a/./a /a/a/a
+/./a/a/./. /a/a
+/./a/a/.// /a/a
+/./a/a//aa /a/a/aa
+/./a/a//a. /a/a/a.
+/./a/a//a/ /a/a/a
+/./a/a//.a /a/a/.a
+/./a/a//.. /a
+/./a/a//./ /a/a
+/./a/a///a /a/a/a
+/./a/a///. /a/a
+/./a/a//// /a/a
+/./a/.aaaa /a/.aaaa
+/./a/.aaa. /a/.aaa.
+/./a/.aaa/ /a/.aaa
+/./a/.aa.a /a/.aa.a
+/./a/.aa.. /a/.aa..
+/./a/.aa./ /a/.aa.
+/./a/.aa/a /a/.aa/a
+/./a/.aa/. /a/.aa
+/./a/.aa// /a/.aa
+/./a/.a.aa /a/.a.aa
+/./a/.a.a. /a/.a.a.
+/./a/.a.a/ /a/.a.a
+/./a/.a..a /a/.a..a
+/./a/.a... /a/.a...
+/./a/.a../ /a/.a..
+/./a/.a./a /a/.a./a
+/./a/.a./. /a/.a.
+/./a/.a.// /a/.a.
+/./a/.a/aa /a/.a/aa
+/./a/.a/a. /a/.a/a.
+/./a/.a/a/ /a/.a/a
+/./a/.a/.a /a/.a/.a
+/./a/.a/.. /a
+/./a/.a/./ /a/.a
+/./a/.a//a /a/.a/a
+/./a/.a//. /a/.a
+/./a/.a/// /a/.a
+/./a/..aaa /a/..aaa
+/./a/..aa. /a/..aa.
+/./a/..aa/ /a/..aa
+/./a/..a.a /a/..a.a
+/./a/..a.. /a/..a..
+/./a/..a./ /a/..a.
+/./a/..a/a /a/..a/a
+/./a/..a/. /a/..a
+/./a/..a// /a/..a
+/./a/...aa /a/...aa
+/./a/...a. /a/...a.
+/./a/...a/ /a/...a
+/./a/....a /a/....a
+/./a/..... /a/.....
+/./a/..../ /a/....
+/./a/.../a /a/.../a
+/./a/.../. /a/...
+/./a/...// /a/...
+/./a/../aa /aa
+/./a/../a. /a.
+/./a/../a/ /a
+/./a/../.a /.a
+/./a/../.. /
+/./a/.././ /
+/./a/..//a /a
+/./a/..//. /
+/./a/../// /
+/./a/./aaa /a/aaa
+/./a/./aa. /a/aa.
+/./a/./aa/ /a/aa
+/./a/./a.a /a/a.a
+/./a/./a.. /a/a..
+/./a/./a./ /a/a.
+/./a/./a/a /a/a/a
+/./a/./a/. /a/a
+/./a/./a// /a/a
+/./a/./.aa /a/.aa
+/./a/./.a. /a/.a.
+/./a/./.a/ /a/.a
+/./a/./..a /a/..a
+/./a/./... /a/...
+/./a/./../ /
+/./a/././a /a/a
+/./a/././. /a
+/./a/./.// /a
+/./a/.//aa /a/aa
+/./a/.//a. /a/a.
+/./a/.//a/ /a/a
+/./a/.//.a /a/.a
+/./a/.//.. /
+/./a/.//./ /a
+/./a/.///a /a/a
+/./a/.///. /a
+/./a/.//// /a
+/./a//aaaa /a/aaaa
+/./a//aaa. /a/aaa.
+/./a//aaa/ /a/aaa
+/./a//aa.a /a/aa.a
+/./a//aa.. /a/aa..
+/./a//aa./ /a/aa.
+/./a//aa/a /a/aa/a
+/./a//aa/. /a/aa
+/./a//aa// /a/aa
+/./a//a.aa /a/a.aa
+/./a//a.a. /a/a.a.
+/./a//a.a/ /a/a.a
+/./a//a..a /a/a..a
+/./a//a... /a/a...
+/./a//a../ /a/a..
+/./a//a./a /a/a./a
+/./a//a./. /a/a.
+/./a//a.// /a/a.
+/./a//a/aa /a/a/aa
+/./a//a/a. /a/a/a.
+/./a//a/a/ /a/a/a
+/./a//a/.a /a/a/.a
+/./a//a/.. /a
+/./a//a/./ /a/a
+/./a//a//a /a/a/a
+/./a//a//. /a/a
+/./a//a/// /a/a
+/./a//.aaa /a/.aaa
+/./a//.aa. /a/.aa.
+/./a//.aa/ /a/.aa
+/./a//.a.a /a/.a.a
+/./a//.a.. /a/.a..
+/./a//.a./ /a/.a.
+/./a//.a/a /a/.a/a
+/./a//.a/. /a/.a
+/./a//.a// /a/.a
+/./a//..aa /a/..aa
+/./a//..a. /a/..a.
+/./a//..a/ /a/..a
+/./a//...a /a/...a
+/./a//.... /a/....
+/./a//.../ /a/...
+/./a//../a /a
+/./a//../. /
+/./a//..// /
+/./a//./aa /a/aa
+/./a//./a. /a/a.
+/./a//./a/ /a/a
+/./a//./.a /a/.a
+/./a//./.. /
+/./a//././ /a
+/./a//.//a /a/a
+/./a//.//. /a
+/./a//./// /a
+/./a///aaa /a/aaa
+/./a///aa. /a/aa.
+/./a///aa/ /a/aa
+/./a///a.a /a/a.a
+/./a///a.. /a/a..
+/./a///a./ /a/a.
+/./a///a/a /a/a/a
+/./a///a/. /a/a
+/./a///a// /a/a
+/./a///.aa /a/.aa
+/./a///.a. /a/.a.
+/./a///.a/ /a/.a
+/./a///..a /a/..a
+/./a///... /a/...
+/./a///../ /
+/./a///./a /a/a
+/./a///./. /a
+/./a///.// /a
+/./a////aa /a/aa
+/./a////a. /a/a.
+/./a////a/ /a/a
+/./a////.a /a/.a
+/./a////.. /
+/./a////./ /a
+/./a/////a /a/a
+/./a/////. /a
+/./a////// /a
+/./.aaaaaa /.aaaaaa
+/./.aaaaa. /.aaaaa.
+/./.aaaaa/ /.aaaaa
+/./.aaaa.a /.aaaa.a
+/./.aaaa.. /.aaaa..
+/./.aaaa./ /.aaaa.
+/./.aaaa/a /.aaaa/a
+/./.aaaa/. /.aaaa
+/./.aaaa// /.aaaa
+/./.aaa.aa /.aaa.aa
+/./.aaa.a. /.aaa.a.
+/./.aaa.a/ /.aaa.a
+/./.aaa..a /.aaa..a
+/./.aaa... /.aaa...
+/./.aaa../ /.aaa..
+/./.aaa./a /.aaa./a
+/./.aaa./. /.aaa.
+/./.aaa.// /.aaa.
+/./.aaa/aa /.aaa/aa
+/./.aaa/a. /.aaa/a.
+/./.aaa/a/ /.aaa/a
+/./.aaa/.a /.aaa/.a
+/./.aaa/.. /
+/./.aaa/./ /.aaa
+/./.aaa//a /.aaa/a
+/./.aaa//. /.aaa
+/./.aaa/// /.aaa
+/./.aa.aaa /.aa.aaa
+/./.aa.aa. /.aa.aa.
+/./.aa.aa/ /.aa.aa
+/./.aa.a.a /.aa.a.a
+/./.aa.a.. /.aa.a..
+/./.aa.a./ /.aa.a.
+/./.aa.a/a /.aa.a/a
+/./.aa.a/. /.aa.a
+/./.aa.a// /.aa.a
+/./.aa..aa /.aa..aa
+/./.aa..a. /.aa..a.
+/./.aa..a/ /.aa..a
+/./.aa...a /.aa...a
+/./.aa.... /.aa....
+/./.aa.../ /.aa...
+/./.aa../a /.aa../a
+/./.aa../. /.aa..
+/./.aa..// /.aa..
+/./.aa./aa /.aa./aa
+/./.aa./a. /.aa./a.
+/./.aa./a/ /.aa./a
+/./.aa./.a /.aa./.a
+/./.aa./.. /
+/./.aa././ /.aa.
+/./.aa.//a /.aa./a
+/./.aa.//. /.aa.
+/./.aa./// /.aa.
+/./.aa/aaa /.aa/aaa
+/./.aa/aa. /.aa/aa.
+/./.aa/aa/ /.aa/aa
+/./.aa/a.a /.aa/a.a
+/./.aa/a.. /.aa/a..
+/./.aa/a./ /.aa/a.
+/./.aa/a/a /.aa/a/a
+/./.aa/a/. /.aa/a
+/./.aa/a// /.aa/a
+/./.aa/.aa /.aa/.aa
+/./.aa/.a. /.aa/.a.
+/./.aa/.a/ /.aa/.a
+/./.aa/..a /.aa/..a
+/./.aa/... /.aa/...
+/./.aa/../ /
+/./.aa/./a /.aa/a
+/./.aa/./. /.aa
+/./.aa/.// /.aa
+/./.aa//aa /.aa/aa
+/./.aa//a. /.aa/a.
+/./.aa//a/ /.aa/a
+/./.aa//.a /.aa/.a
+/./.aa//.. /
+/./.aa//./ /.aa
+/./.aa///a /.aa/a
+/./.aa///. /.aa
+/./.aa//// /.aa
+/./.a.aaaa /.a.aaaa
+/./.a.aaa. /.a.aaa.
+/./.a.aaa/ /.a.aaa
+/./.a.aa.a /.a.aa.a
+/./.a.aa.. /.a.aa..
+/./.a.aa./ /.a.aa.
+/./.a.aa/a /.a.aa/a
+/./.a.aa/. /.a.aa
+/./.a.aa// /.a.aa
+/./.a.a.aa /.a.a.aa
+/./.a.a.a. /.a.a.a.
+/./.a.a.a/ /.a.a.a
+/./.a.a..a /.a.a..a
+/./.a.a... /.a.a...
+/./.a.a../ /.a.a..
+/./.a.a./a /.a.a./a
+/./.a.a./. /.a.a.
+/./.a.a.// /.a.a.
+/./.a.a/aa /.a.a/aa
+/./.a.a/a. /.a.a/a.
+/./.a.a/a/ /.a.a/a
+/./.a.a/.a /.a.a/.a
+/./.a.a/.. /
+/./.a.a/./ /.a.a
+/./.a.a//a /.a.a/a
+/./.a.a//. /.a.a
+/./.a.a/// /.a.a
+/./.a..aaa /.a..aaa
+/./.a..aa. /.a..aa.
+/./.a..aa/ /.a..aa
+/./.a..a.a /.a..a.a
+/./.a..a.. /.a..a..
+/./.a..a./ /.a..a.
+/./.a..a/a /.a..a/a
+/./.a..a/. /.a..a
+/./.a..a// /.a..a
+/./.a...aa /.a...aa
+/./.a...a. /.a...a.
+/./.a...a/ /.a...a
+/./.a....a /.a....a
+/./.a..... /.a.....
+/./.a..../ /.a....
+/./.a.../a /.a.../a
+/./.a.../. /.a...
+/./.a...// /.a...
+/./.a../aa /.a../aa
+/./.a../a. /.a../a.
+/./.a../a/ /.a../a
+/./.a../.a /.a../.a
+/./.a../.. /
+/./.a.././ /.a..
+/./.a..//a /.a../a
+/./.a..//. /.a..
+/./.a../// /.a..
+/./.a./aaa /.a./aaa
+/./.a./aa. /.a./aa.
+/./.a./aa/ /.a./aa
+/./.a./a.a /.a./a.a
+/./.a./a.. /.a./a..
+/./.a./a./ /.a./a.
+/./.a./a/a /.a./a/a
+/./.a./a/. /.a./a
+/./.a./a// /.a./a
+/./.a./.aa /.a./.aa
+/./.a./.a. /.a./.a.
+/./.a./.a/ /.a./.a
+/./.a./..a /.a./..a
+/./.a./... /.a./...
+/./.a./../ /
+/./.a././a /.a./a
+/./.a././. /.a.
+/./.a./.// /.a.
+/./.a.//aa /.a./aa
+/./.a.//a. /.a./a.
+/./.a.//a/ /.a./a
+/./.a.//.a /.a./.a
+/./.a.//.. /
+/./.a.//./ /.a.
+/./.a.///a /.a./a
+/./.a.///. /.a.
+/./.a.//// /.a.
+/./.a/aaaa /.a/aaaa
+/./.a/aaa. /.a/aaa.
+/./.a/aaa/ /.a/aaa
+/./.a/aa.a /.a/aa.a
+/./.a/aa.. /.a/aa..
+/./.a/aa./ /.a/aa.
+/./.a/aa/a /.a/aa/a
+/./.a/aa/. /.a/aa
+/./.a/aa// /.a/aa
+/./.a/a.aa /.a/a.aa
+/./.a/a.a. /.a/a.a.
+/./.a/a.a/ /.a/a.a
+/./.a/a..a /.a/a..a
+/./.a/a... /.a/a...
+/./.a/a../ /.a/a..
+/./.a/a./a /.a/a./a
+/./.a/a./. /.a/a.
+/./.a/a.// /.a/a.
+/./.a/a/aa /.a/a/aa
+/./.a/a/a. /.a/a/a.
+/./.a/a/a/ /.a/a/a
+/./.a/a/.a /.a/a/.a
+/./.a/a/.. /.a
+/./.a/a/./ /.a/a
+/./.a/a//a /.a/a/a
+/./.a/a//. /.a/a
+/./.a/a/// /.a/a
+/./.a/.aaa /.a/.aaa
+/./.a/.aa. /.a/.aa.
+/./.a/.aa/ /.a/.aa
+/./.a/.a.a /.a/.a.a
+/./.a/.a.. /.a/.a..
+/./.a/.a./ /.a/.a.
+/./.a/.a/a /.a/.a/a
+/./.a/.a/. /.a/.a
+/./.a/.a// /.a/.a
+/./.a/..aa /.a/..aa
+/./.a/..a. /.a/..a.
+/./.a/..a/ /.a/..a
+/./.a/...a /.a/...a
+/./.a/.... /.a/....
+/./.a/.../ /.a/...
+/./.a/../a /a
+/./.a/../. /
+/./.a/..// /
+/./.a/./aa /.a/aa
+/./.a/./a. /.a/a.
+/./.a/./a/ /.a/a
+/./.a/./.a /.a/.a
+/./.a/./.. /
+/./.a/././ /.a
+/./.a/.//a /.a/a
+/./.a/.//. /.a
+/./.a/./// /.a
+/./.a//aaa /.a/aaa
+/./.a//aa. /.a/aa.
+/./.a//aa/ /.a/aa
+/./.a//a.a /.a/a.a
+/./.a//a.. /.a/a..
+/./.a//a./ /.a/a.
+/./.a//a/a /.a/a/a
+/./.a//a/. /.a/a
+/./.a//a// /.a/a
+/./.a//.aa /.a/.aa
+/./.a//.a. /.a/.a.
+/./.a//.a/ /.a/.a
+/./.a//..a /.a/..a
+/./.a//... /.a/...
+/./.a//../ /
+/./.a//./a /.a/a
+/./.a//./. /.a
+/./.a//.// /.a
+/./.a///aa /.a/aa
+/./.a///a. /.a/a.
+/./.a///a/ /.a/a
+/./.a///.a /.a/.a
+/./.a///.. /
+/./.a///./ /.a
+/./.a////a /.a/a
+/./.a////. /.a
+/./.a///// /.a
+/./..aaaaa /..aaaaa
+/./..aaaa. /..aaaa.
+/./..aaaa/ /..aaaa
+/./..aaa.a /..aaa.a
+/./..aaa.. /..aaa..
+/./..aaa./ /..aaa.
+/./..aaa/a /..aaa/a
+/./..aaa/. /..aaa
+/./..aaa// /..aaa
+/./..aa.aa /..aa.aa
+/./..aa.a. /..aa.a.
+/./..aa.a/ /..aa.a
+/./..aa..a /..aa..a
+/./..aa... /..aa...
+/./..aa../ /..aa..
+/./..aa./a /..aa./a
+/./..aa./. /..aa.
+/./..aa.// /..aa.
+/./..aa/aa /..aa/aa
+/./..aa/a. /..aa/a.
+/./..aa/a/ /..aa/a
+/./..aa/.a /..aa/.a
+/./..aa/.. /
+/./..aa/./ /..aa
+/./..aa//a /..aa/a
+/./..aa//. /..aa
+/./..aa/// /..aa
+/./..a.aaa /..a.aaa
+/./..a.aa. /..a.aa.
+/./..a.aa/ /..a.aa
+/./..a.a.a /..a.a.a
+/./..a.a.. /..a.a..
+/./..a.a./ /..a.a.
+/./..a.a/a /..a.a/a
+/./..a.a/. /..a.a
+/./..a.a// /..a.a
+/./..a..aa /..a..aa
+/./..a..a. /..a..a.
+/./..a..a/ /..a..a
+/./..a...a /..a...a
+/./..a.... /..a....
+/./..a.../ /..a...
+/./..a../a /..a../a
+/./..a../. /..a..
+/./..a..// /..a..
+/./..a./aa /..a./aa
+/./..a./a. /..a./a.
+/./..a./a/ /..a./a
+/./..a./.a /..a./.a
+/./..a./.. /
+/./..a././ /..a.
+/./..a.//a /..a./a
+/./..a.//. /..a.
+/./..a./// /..a.
+/./..a/aaa /..a/aaa
+/./..a/aa. /..a/aa.
+/./..a/aa/ /..a/aa
+/./..a/a.a /..a/a.a
+/./..a/a.. /..a/a..
+/./..a/a./ /..a/a.
+/./..a/a/a /..a/a/a
+/./..a/a/. /..a/a
+/./..a/a// /..a/a
+/./..a/.aa /..a/.aa
+/./..a/.a. /..a/.a.
+/./..a/.a/ /..a/.a
+/./..a/..a /..a/..a
+/./..a/... /..a/...
+/./..a/../ /
+/./..a/./a /..a/a
+/./..a/./. /..a
+/./..a/.// /..a
+/./..a//aa /..a/aa
+/./..a//a. /..a/a.
+/./..a//a/ /..a/a
+/./..a//.a /..a/.a
+/./..a//.. /
+/./..a//./ /..a
+/./..a///a /..a/a
+/./..a///. /..a
+/./..a//// /..a
+/./...aaaa /...aaaa
+/./...aaa. /...aaa.
+/./...aaa/ /...aaa
+/./...aa.a /...aa.a
+/./...aa.. /...aa..
+/./...aa./ /...aa.
+/./...aa/a /...aa/a
+/./...aa/. /...aa
+/./...aa// /...aa
+/./...a.aa /...a.aa
+/./...a.a. /...a.a.
+/./...a.a/ /...a.a
+/./...a..a /...a..a
+/./...a... /...a...
+/./...a../ /...a..
+/./...a./a /...a./a
+/./...a./. /...a.
+/./...a.// /...a.
+/./...a/aa /...a/aa
+/./...a/a. /...a/a.
+/./...a/a/ /...a/a
+/./...a/.a /...a/.a
+/./...a/.. /
+/./...a/./ /...a
+/./...a//a /...a/a
+/./...a//. /...a
+/./...a/// /...a
+/./....aaa /....aaa
+/./....aa. /....aa.
+/./....aa/ /....aa
+/./....a.a /....a.a
+/./....a.. /....a..
+/./....a./ /....a.
+/./....a/a /....a/a
+/./....a/. /....a
+/./....a// /....a
+/./.....aa /.....aa
+/./.....a. /.....a.
+/./.....a/ /.....a
+/./......a /......a
+/./....... /.......
+/./....../ /......
+/./...../a /...../a
+/./...../. /.....
+/./.....// /.....
+/./..../aa /..../aa
+/./..../a. /..../a.
+/./..../a/ /..../a
+/./..../.a /..../.a
+/./..../.. /
+/./...././ /....
+/./....//a /..../a
+/./....//. /....
+/./..../// /....
+/./.../aaa /.../aaa
+/./.../aa. /.../aa.
+/./.../aa/ /.../aa
+/./.../a.a /.../a.a
+/./.../a.. /.../a..
+/./.../a./ /.../a.
+/./.../a/a /.../a/a
+/./.../a/. /.../a
+/./.../a// /.../a
+/./.../.aa /.../.aa
+/./.../.a. /.../.a.
+/./.../.a/ /.../.a
+/./.../..a /.../..a
+/./.../... /.../...
+/./.../../ /
+/./..././a /.../a
+/./..././. /...
+/./.../.// /...
+/./...//aa /.../aa
+/./...//a. /.../a.
+/./...//a/ /.../a
+/./...//.a /.../.a
+/./...//.. /
+/./...//./ /...
+/./...///a /.../a
+/./...///. /...
+/./...//// /...
+/./../aaaa /aaaa
+/./../aaa. /aaa.
+/./../aaa/ /aaa
+/./../aa.a /aa.a
+/./../aa.. /aa..
+/./../aa./ /aa.
+/./../aa/a /aa/a
+/./../aa/. /aa
+/./../aa// /aa
+/./../a.aa /a.aa
+/./../a.a. /a.a.
+/./../a.a/ /a.a
+/./../a..a /a..a
+/./../a... /a...
+/./../a../ /a..
+/./../a./a /a./a
+/./../a./. /a.
+/./../a.// /a.
+/./../a/aa /a/aa
+/./../a/a. /a/a.
+/./../a/a/ /a/a
+/./../a/.a /a/.a
+/./../a/.. /
+/./../a/./ /a
+/./../a//a /a/a
+/./../a//. /a
+/./../a/// /a
+/./../.aaa /.aaa
+/./../.aa. /.aa.
+/./../.aa/ /.aa
+/./../.a.a /.a.a
+/./../.a.. /.a..
+/./../.a./ /.a.
+/./../.a/a /.a/a
+/./../.a/. /.a
+/./../.a// /.a
+/./../..aa /..aa
+/./../..a. /..a.
+/./../..a/ /..a
+/./../...a /...a
+/./../.... /....
+/./../.../ /...
+/./../../a /a
+/./../../. /
+/./../..// /
+/./.././aa /aa
+/./.././a. /a.
+/./.././a/ /a
+/./.././.a /.a
+/./.././.. /
+/./../././ /
+/./.././/a /a
+/./.././/. /
+/./.././// /
+/./..//aaa /aaa
+/./..//aa. /aa.
+/./..//aa/ /aa
+/./..//a.a /a.a
+/./..//a.. /a..
+/./..//a./ /a.
+/./..//a/a /a/a
+/./..//a/. /a
+/./..//a// /a
+/./..//.aa /.aa
+/./..//.a. /.a.
+/./..//.a/ /.a
+/./..//..a /..a
+/./..//... /...
+/./..//../ /
+/./..//./a /a
+/./..//./. /
+/./..//.// /
+/./..///aa /aa
+/./..///a. /a.
+/./..///a/ /a
+/./..///.a /.a
+/./..///.. /
+/./..///./ /
+/./..////a /a
+/./..////. /
+/./..///// /
+/././aaaaa /aaaaa
+/././aaaa. /aaaa.
+/././aaaa/ /aaaa
+/././aaa.a /aaa.a
+/././aaa.. /aaa..
+/././aaa./ /aaa.
+/././aaa/a /aaa/a
+/././aaa/. /aaa
+/././aaa// /aaa
+/././aa.aa /aa.aa
+/././aa.a. /aa.a.
+/././aa.a/ /aa.a
+/././aa..a /aa..a
+/././aa... /aa...
+/././aa../ /aa..
+/././aa./a /aa./a
+/././aa./. /aa.
+/././aa.// /aa.
+/././aa/aa /aa/aa
+/././aa/a. /aa/a.
+/././aa/a/ /aa/a
+/././aa/.a /aa/.a
+/././aa/.. /
+/././aa/./ /aa
+/././aa//a /aa/a
+/././aa//. /aa
+/././aa/// /aa
+/././a.aaa /a.aaa
+/././a.aa. /a.aa.
+/././a.aa/ /a.aa
+/././a.a.a /a.a.a
+/././a.a.. /a.a..
+/././a.a./ /a.a.
+/././a.a/a /a.a/a
+/././a.a/. /a.a
+/././a.a// /a.a
+/././a..aa /a..aa
+/././a..a. /a..a.
+/././a..a/ /a..a
+/././a...a /a...a
+/././a.... /a....
+/././a.../ /a...
+/././a../a /a../a
+/././a../. /a..
+/././a..// /a..
+/././a./aa /a./aa
+/././a./a. /a./a.
+/././a./a/ /a./a
+/././a./.a /a./.a
+/././a./.. /
+/././a././ /a.
+/././a.//a /a./a
+/././a.//. /a.
+/././a./// /a.
+/././a/aaa /a/aaa
+/././a/aa. /a/aa.
+/././a/aa/ /a/aa
+/././a/a.a /a/a.a
+/././a/a.. /a/a..
+/././a/a./ /a/a.
+/././a/a/a /a/a/a
+/././a/a/. /a/a
+/././a/a// /a/a
+/././a/.aa /a/.aa
+/././a/.a. /a/.a.
+/././a/.a/ /a/.a
+/././a/..a /a/..a
+/././a/... /a/...
+/././a/../ /
+/././a/./a /a/a
+/././a/./. /a
+/././a/.// /a
+/././a//aa /a/aa
+/././a//a. /a/a.
+/././a//a/ /a/a
+/././a//.a /a/.a
+/././a//.. /
+/././a//./ /a
+/././a///a /a/a
+/././a///. /a
+/././a//// /a
+/././.aaaa /.aaaa
+/././.aaa. /.aaa.
+/././.aaa/ /.aaa
+/././.aa.a /.aa.a
+/././.aa.. /.aa..
+/././.aa./ /.aa.
+/././.aa/a /.aa/a
+/././.aa/. /.aa
+/././.aa// /.aa
+/././.a.aa /.a.aa
+/././.a.a. /.a.a.
+/././.a.a/ /.a.a
+/././.a..a /.a..a
+/././.a... /.a...
+/././.a../ /.a..
+/././.a./a /.a./a
+/././.a./. /.a.
+/././.a.// /.a.
+/././.a/aa /.a/aa
+/././.a/a. /.a/a.
+/././.a/a/ /.a/a
+/././.a/.a /.a/.a
+/././.a/.. /
+/././.a/./ /.a
+/././.a//a /.a/a
+/././.a//. /.a
+/././.a/// /.a
+/././..aaa /..aaa
+/././..aa. /..aa.
+/././..aa/ /..aa
+/././..a.a /..a.a
+/././..a.. /..a..
+/././..a./ /..a.
+/././..a/a /..a/a
+/././..a/. /..a
+/././..a// /..a
+/././...aa /...aa
+/././...a. /...a.
+/././...a/ /...a
+/././....a /....a
+/././..... /.....
+/././..../ /....
+/././.../a /.../a
+/././.../. /...
+/././...// /...
+/././../aa /aa
+/././../a. /a.
+/././../a/ /a
+/././../.a /.a
+/././../.. /
+/././.././ /
+/././..//a /a
+/././..//. /
+/././../// /
+/./././aaa /aaa
+/./././aa. /aa.
+/./././aa/ /aa
+/./././a.a /a.a
+/./././a.. /a..
+/./././a./ /a.
+/./././a/a /a/a
+/./././a/. /a
+/./././a// /a
+/./././.aa /.aa
+/./././.a. /.a.
+/./././.a/ /.a
+/./././..a /..a
+/./././... /...
+/./././../ /
+/././././a /a
+/././././. /
+/./././.// /
+/./././/aa /aa
+/./././/a. /a.
+/./././/a/ /a
+/./././/.a /.a
+/./././/.. /
+/./././/./ /
+/./././//a /a
+/./././//. /
+/./././/// /
+/././/aaaa /aaaa
+/././/aaa. /aaa.
+/././/aaa/ /aaa
+/././/aa.a /aa.a
+/././/aa.. /aa..
+/././/aa./ /aa.
+/././/aa/a /aa/a
+/././/aa/. /aa
+/././/aa// /aa
+/././/a.aa /a.aa
+/././/a.a. /a.a.
+/././/a.a/ /a.a
+/././/a..a /a..a
+/././/a... /a...
+/././/a../ /a..
+/././/a./a /a./a
+/././/a./. /a.
+/././/a.// /a.
+/././/a/aa /a/aa
+/././/a/a. /a/a.
+/././/a/a/ /a/a
+/././/a/.a /a/.a
+/././/a/.. /
+/././/a/./ /a
+/././/a//a /a/a
+/././/a//. /a
+/././/a/// /a
+/././/.aaa /.aaa
+/././/.aa. /.aa.
+/././/.aa/ /.aa
+/././/.a.a /.a.a
+/././/.a.. /.a..
+/././/.a./ /.a.
+/././/.a/a /.a/a
+/././/.a/. /.a
+/././/.a// /.a
+/././/..aa /..aa
+/././/..a. /..a.
+/././/..a/ /..a
+/././/...a /...a
+/././/.... /....
+/././/.../ /...
+/././/../a /a
+/././/../. /
+/././/..// /
+/././/./aa /aa
+/././/./a. /a.
+/././/./a/ /a
+/././/./.a /.a
+/././/./.. /
+/././/././ /
+/././/.//a /a
+/././/.//. /
+/././/./// /
+/././//aaa /aaa
+/././//aa. /aa.
+/././//aa/ /aa
+/././//a.a /a.a
+/././//a.. /a..
+/././//a./ /a.
+/././//a/a /a/a
+/././//a/. /a
+/././//a// /a
+/././//.aa /.aa
+/././//.a. /.a.
+/././//.a/ /.a
+/././//..a /..a
+/././//... /...
+/././//../ /
+/././//./a /a
+/././//./. /
+/././//.// /
+/././///aa /aa
+/././///a. /a.
+/././///a/ /a
+/././///.a /.a
+/././///.. /
+/././///./ /
+/././////a /a
+/././////. /
+/././///// /
+/.//aaaaaa /aaaaaa
+/.//aaaaa. /aaaaa.
+/.//aaaaa/ /aaaaa
+/.//aaaa.a /aaaa.a
+/.//aaaa.. /aaaa..
+/.//aaaa./ /aaaa.
+/.//aaaa/a /aaaa/a
+/.//aaaa/. /aaaa
+/.//aaaa// /aaaa
+/.//aaa.aa /aaa.aa
+/.//aaa.a. /aaa.a.
+/.//aaa.a/ /aaa.a
+/.//aaa..a /aaa..a
+/.//aaa... /aaa...
+/.//aaa../ /aaa..
+/.//aaa./a /aaa./a
+/.//aaa./. /aaa.
+/.//aaa.// /aaa.
+/.//aaa/aa /aaa/aa
+/.//aaa/a. /aaa/a.
+/.//aaa/a/ /aaa/a
+/.//aaa/.a /aaa/.a
+/.//aaa/.. /
+/.//aaa/./ /aaa
+/.//aaa//a /aaa/a
+/.//aaa//. /aaa
+/.//aaa/// /aaa
+/.//aa.aaa /aa.aaa
+/.//aa.aa. /aa.aa.
+/.//aa.aa/ /aa.aa
+/.//aa.a.a /aa.a.a
+/.//aa.a.. /aa.a..
+/.//aa.a./ /aa.a.
+/.//aa.a/a /aa.a/a
+/.//aa.a/. /aa.a
+/.//aa.a// /aa.a
+/.//aa..aa /aa..aa
+/.//aa..a. /aa..a.
+/.//aa..a/ /aa..a
+/.//aa...a /aa...a
+/.//aa.... /aa....
+/.//aa.../ /aa...
+/.//aa../a /aa../a
+/.//aa../. /aa..
+/.//aa..// /aa..
+/.//aa./aa /aa./aa
+/.//aa./a. /aa./a.
+/.//aa./a/ /aa./a
+/.//aa./.a /aa./.a
+/.//aa./.. /
+/.//aa././ /aa.
+/.//aa.//a /aa./a
+/.//aa.//. /aa.
+/.//aa./// /aa.
+/.//aa/aaa /aa/aaa
+/.//aa/aa. /aa/aa.
+/.//aa/aa/ /aa/aa
+/.//aa/a.a /aa/a.a
+/.//aa/a.. /aa/a..
+/.//aa/a./ /aa/a.
+/.//aa/a/a /aa/a/a
+/.//aa/a/. /aa/a
+/.//aa/a// /aa/a
+/.//aa/.aa /aa/.aa
+/.//aa/.a. /aa/.a.
+/.//aa/.a/ /aa/.a
+/.//aa/..a /aa/..a
+/.//aa/... /aa/...
+/.//aa/../ /
+/.//aa/./a /aa/a
+/.//aa/./. /aa
+/.//aa/.// /aa
+/.//aa//aa /aa/aa
+/.//aa//a. /aa/a.
+/.//aa//a/ /aa/a
+/.//aa//.a /aa/.a
+/.//aa//.. /
+/.//aa//./ /aa
+/.//aa///a /aa/a
+/.//aa///. /aa
+/.//aa//// /aa
+/.//a.aaaa /a.aaaa
+/.//a.aaa. /a.aaa.
+/.//a.aaa/ /a.aaa
+/.//a.aa.a /a.aa.a
+/.//a.aa.. /a.aa..
+/.//a.aa./ /a.aa.
+/.//a.aa/a /a.aa/a
+/.//a.aa/. /a.aa
+/.//a.aa// /a.aa
+/.//a.a.aa /a.a.aa
+/.//a.a.a. /a.a.a.
+/.//a.a.a/ /a.a.a
+/.//a.a..a /a.a..a
+/.//a.a... /a.a...
+/.//a.a../ /a.a..
+/.//a.a./a /a.a./a
+/.//a.a./. /a.a.
+/.//a.a.// /a.a.
+/.//a.a/aa /a.a/aa
+/.//a.a/a. /a.a/a.
+/.//a.a/a/ /a.a/a
+/.//a.a/.a /a.a/.a
+/.//a.a/.. /
+/.//a.a/./ /a.a
+/.//a.a//a /a.a/a
+/.//a.a//. /a.a
+/.//a.a/// /a.a
+/.//a..aaa /a..aaa
+/.//a..aa. /a..aa.
+/.//a..aa/ /a..aa
+/.//a..a.a /a..a.a
+/.//a..a.. /a..a..
+/.//a..a./ /a..a.
+/.//a..a/a /a..a/a
+/.//a..a/. /a..a
+/.//a..a// /a..a
+/.//a...aa /a...aa
+/.//a...a. /a...a.
+/.//a...a/ /a...a
+/.//a....a /a....a
+/.//a..... /a.....
+/.//a..../ /a....
+/.//a.../a /a.../a
+/.//a.../. /a...
+/.//a...// /a...
+/.//a../aa /a../aa
+/.//a../a. /a../a.
+/.//a../a/ /a../a
+/.//a../.a /a../.a
+/.//a../.. /
+/.//a.././ /a..
+/.//a..//a /a../a
+/.//a..//. /a..
+/.//a../// /a..
+/.//a./aaa /a./aaa
+/.//a./aa. /a./aa.
+/.//a./aa/ /a./aa
+/.//a./a.a /a./a.a
+/.//a./a.. /a./a..
+/.//a./a./ /a./a.
+/.//a./a/a /a./a/a
+/.//a./a/. /a./a
+/.//a./a// /a./a
+/.//a./.aa /a./.aa
+/.//a./.a. /a./.a.
+/.//a./.a/ /a./.a
+/.//a./..a /a./..a
+/.//a./... /a./...
+/.//a./../ /
+/.//a././a /a./a
+/.//a././. /a.
+/.//a./.// /a.
+/.//a.//aa /a./aa
+/.//a.//a. /a./a.
+/.//a.//a/ /a./a
+/.//a.//.a /a./.a
+/.//a.//.. /
+/.//a.//./ /a.
+/.//a.///a /a./a
+/.//a.///. /a.
+/.//a.//// /a.
+/.//a/aaaa /a/aaaa
+/.//a/aaa. /a/aaa.
+/.//a/aaa/ /a/aaa
+/.//a/aa.a /a/aa.a
+/.//a/aa.. /a/aa..
+/.//a/aa./ /a/aa.
+/.//a/aa/a /a/aa/a
+/.//a/aa/. /a/aa
+/.//a/aa// /a/aa
+/.//a/a.aa /a/a.aa
+/.//a/a.a. /a/a.a.
+/.//a/a.a/ /a/a.a
+/.//a/a..a /a/a..a
+/.//a/a... /a/a...
+/.//a/a../ /a/a..
+/.//a/a./a /a/a./a
+/.//a/a./. /a/a.
+/.//a/a.// /a/a.
+/.//a/a/aa /a/a/aa
+/.//a/a/a. /a/a/a.
+/.//a/a/a/ /a/a/a
+/.//a/a/.a /a/a/.a
+/.//a/a/.. /a
+/.//a/a/./ /a/a
+/.//a/a//a /a/a/a
+/.//a/a//. /a/a
+/.//a/a/// /a/a
+/.//a/.aaa /a/.aaa
+/.//a/.aa. /a/.aa.
+/.//a/.aa/ /a/.aa
+/.//a/.a.a /a/.a.a
+/.//a/.a.. /a/.a..
+/.//a/.a./ /a/.a.
+/.//a/.a/a /a/.a/a
+/.//a/.a/. /a/.a
+/.//a/.a// /a/.a
+/.//a/..aa /a/..aa
+/.//a/..a. /a/..a.
+/.//a/..a/ /a/..a
+/.//a/...a /a/...a
+/.//a/.... /a/....
+/.//a/.../ /a/...
+/.//a/../a /a
+/.//a/../. /
+/.//a/..// /
+/.//a/./aa /a/aa
+/.//a/./a. /a/a.
+/.//a/./a/ /a/a
+/.//a/./.a /a/.a
+/.//a/./.. /
+/.//a/././ /a
+/.//a/.//a /a/a
+/.//a/.//. /a
+/.//a/./// /a
+/.//a//aaa /a/aaa
+/.//a//aa. /a/aa.
+/.//a//aa/ /a/aa
+/.//a//a.a /a/a.a
+/.//a//a.. /a/a..
+/.//a//a./ /a/a.
+/.//a//a/a /a/a/a
+/.//a//a/. /a/a
+/.//a//a// /a/a
+/.//a//.aa /a/.aa
+/.//a//.a. /a/.a.
+/.//a//.a/ /a/.a
+/.//a//..a /a/..a
+/.//a//... /a/...
+/.//a//../ /
+/.//a//./a /a/a
+/.//a//./. /a
+/.//a//.// /a
+/.//a///aa /a/aa
+/.//a///a. /a/a.
+/.//a///a/ /a/a
+/.//a///.a /a/.a
+/.//a///.. /
+/.//a///./ /a
+/.//a////a /a/a
+/.//a////. /a
+/.//a///// /a
+/.//.aaaaa /.aaaaa
+/.//.aaaa. /.aaaa.
+/.//.aaaa/ /.aaaa
+/.//.aaa.a /.aaa.a
+/.//.aaa.. /.aaa..
+/.//.aaa./ /.aaa.
+/.//.aaa/a /.aaa/a
+/.//.aaa/. /.aaa
+/.//.aaa// /.aaa
+/.//.aa.aa /.aa.aa
+/.//.aa.a. /.aa.a.
+/.//.aa.a/ /.aa.a
+/.//.aa..a /.aa..a
+/.//.aa... /.aa...
+/.//.aa../ /.aa..
+/.//.aa./a /.aa./a
+/.//.aa./. /.aa.
+/.//.aa.// /.aa.
+/.//.aa/aa /.aa/aa
+/.//.aa/a. /.aa/a.
+/.//.aa/a/ /.aa/a
+/.//.aa/.a /.aa/.a
+/.//.aa/.. /
+/.//.aa/./ /.aa
+/.//.aa//a /.aa/a
+/.//.aa//. /.aa
+/.//.aa/// /.aa
+/.//.a.aaa /.a.aaa
+/.//.a.aa. /.a.aa.
+/.//.a.aa/ /.a.aa
+/.//.a.a.a /.a.a.a
+/.//.a.a.. /.a.a..
+/.//.a.a./ /.a.a.
+/.//.a.a/a /.a.a/a
+/.//.a.a/. /.a.a
+/.//.a.a// /.a.a
+/.//.a..aa /.a..aa
+/.//.a..a. /.a..a.
+/.//.a..a/ /.a..a
+/.//.a...a /.a...a
+/.//.a.... /.a....
+/.//.a.../ /.a...
+/.//.a../a /.a../a
+/.//.a../. /.a..
+/.//.a..// /.a..
+/.//.a./aa /.a./aa
+/.//.a./a. /.a./a.
+/.//.a./a/ /.a./a
+/.//.a./.a /.a./.a
+/.//.a./.. /
+/.//.a././ /.a.
+/.//.a.//a /.a./a
+/.//.a.//. /.a.
+/.//.a./// /.a.
+/.//.a/aaa /.a/aaa
+/.//.a/aa. /.a/aa.
+/.//.a/aa/ /.a/aa
+/.//.a/a.a /.a/a.a
+/.//.a/a.. /.a/a..
+/.//.a/a./ /.a/a.
+/.//.a/a/a /.a/a/a
+/.//.a/a/. /.a/a
+/.//.a/a// /.a/a
+/.//.a/.aa /.a/.aa
+/.//.a/.a. /.a/.a.
+/.//.a/.a/ /.a/.a
+/.//.a/..a /.a/..a
+/.//.a/... /.a/...
+/.//.a/../ /
+/.//.a/./a /.a/a
+/.//.a/./. /.a
+/.//.a/.// /.a
+/.//.a//aa /.a/aa
+/.//.a//a. /.a/a.
+/.//.a//a/ /.a/a
+/.//.a//.a /.a/.a
+/.//.a//.. /
+/.//.a//./ /.a
+/.//.a///a /.a/a
+/.//.a///. /.a
+/.//.a//// /.a
+/.//..aaaa /..aaaa
+/.//..aaa. /..aaa.
+/.//..aaa/ /..aaa
+/.//..aa.a /..aa.a
+/.//..aa.. /..aa..
+/.//..aa./ /..aa.
+/.//..aa/a /..aa/a
+/.//..aa/. /..aa
+/.//..aa// /..aa
+/.//..a.aa /..a.aa
+/.//..a.a. /..a.a.
+/.//..a.a/ /..a.a
+/.//..a..a /..a..a
+/.//..a... /..a...
+/.//..a../ /..a..
+/.//..a./a /..a./a
+/.//..a./. /..a.
+/.//..a.// /..a.
+/.//..a/aa /..a/aa
+/.//..a/a. /..a/a.
+/.//..a/a/ /..a/a
+/.//..a/.a /..a/.a
+/.//..a/.. /
+/.//..a/./ /..a
+/.//..a//a /..a/a
+/.//..a//. /..a
+/.//..a/// /..a
+/.//...aaa /...aaa
+/.//...aa. /...aa.
+/.//...aa/ /...aa
+/.//...a.a /...a.a
+/.//...a.. /...a..
+/.//...a./ /...a.
+/.//...a/a /...a/a
+/.//...a/. /...a
+/.//...a// /...a
+/.//....aa /....aa
+/.//....a. /....a.
+/.//....a/ /....a
+/.//.....a /.....a
+/.//...... /......
+/.//...../ /.....
+/.//..../a /..../a
+/.//..../. /....
+/.//....// /....
+/.//.../aa /.../aa
+/.//.../a. /.../a.
+/.//.../a/ /.../a
+/.//.../.a /.../.a
+/.//.../.. /
+/.//..././ /...
+/.//...//a /.../a
+/.//...//. /...
+/.//.../// /...
+/.//../aaa /aaa
+/.//../aa. /aa.
+/.//../aa/ /aa
+/.//../a.a /a.a
+/.//../a.. /a..
+/.//../a./ /a.
+/.//../a/a /a/a
+/.//../a/. /a
+/.//../a// /a
+/.//../.aa /.aa
+/.//../.a. /.a.
+/.//../.a/ /.a
+/.//../..a /..a
+/.//../... /...
+/.//../../ /
+/.//.././a /a
+/.//.././. /
+/.//../.// /
+/.//..//aa /aa
+/.//..//a. /a.
+/.//..//a/ /a
+/.//..//.a /.a
+/.//..//.. /
+/.//..//./ /
+/.//..///a /a
+/.//..///. /
+/.//..//// /
+/.//./aaaa /aaaa
+/.//./aaa. /aaa.
+/.//./aaa/ /aaa
+/.//./aa.a /aa.a
+/.//./aa.. /aa..
+/.//./aa./ /aa.
+/.//./aa/a /aa/a
+/.//./aa/. /aa
+/.//./aa// /aa
+/.//./a.aa /a.aa
+/.//./a.a. /a.a.
+/.//./a.a/ /a.a
+/.//./a..a /a..a
+/.//./a... /a...
+/.//./a../ /a..
+/.//./a./a /a./a
+/.//./a./. /a.
+/.//./a.// /a.
+/.//./a/aa /a/aa
+/.//./a/a. /a/a.
+/.//./a/a/ /a/a
+/.//./a/.a /a/.a
+/.//./a/.. /
+/.//./a/./ /a
+/.//./a//a /a/a
+/.//./a//. /a
+/.//./a/// /a
+/.//./.aaa /.aaa
+/.//./.aa. /.aa.
+/.//./.aa/ /.aa
+/.//./.a.a /.a.a
+/.//./.a.. /.a..
+/.//./.a./ /.a.
+/.//./.a/a /.a/a
+/.//./.a/. /.a
+/.//./.a// /.a
+/.//./..aa /..aa
+/.//./..a. /..a.
+/.//./..a/ /..a
+/.//./...a /...a
+/.//./.... /....
+/.//./.../ /...
+/.//./../a /a
+/.//./../. /
+/.//./..// /
+/.//././aa /aa
+/.//././a. /a.
+/.//././a/ /a
+/.//././.a /.a
+/.//././.. /
+/.//./././ /
+/.//././/a /a
+/.//././/. /
+/.//././// /
+/.//.//aaa /aaa
+/.//.//aa. /aa.
+/.//.//aa/ /aa
+/.//.//a.a /a.a
+/.//.//a.. /a..
+/.//.//a./ /a.
+/.//.//a/a /a/a
+/.//.//a/. /a
+/.//.//a// /a
+/.//.//.aa /.aa
+/.//.//.a. /.a.
+/.//.//.a/ /.a
+/.//.//..a /..a
+/.//.//... /...
+/.//.//../ /
+/.//.//./a /a
+/.//.//./. /
+/.//.//.// /
+/.//.///aa /aa
+/.//.///a. /a.
+/.//.///a/ /a
+/.//.///.a /.a
+/.//.///.. /
+/.//.///./ /
+/.//.////a /a
+/.//.////. /
+/.//.///// /
+/.///aaaaa /aaaaa
+/.///aaaa. /aaaa.
+/.///aaaa/ /aaaa
+/.///aaa.a /aaa.a
+/.///aaa.. /aaa..
+/.///aaa./ /aaa.
+/.///aaa/a /aaa/a
+/.///aaa/. /aaa
+/.///aaa// /aaa
+/.///aa.aa /aa.aa
+/.///aa.a. /aa.a.
+/.///aa.a/ /aa.a
+/.///aa..a /aa..a
+/.///aa... /aa...
+/.///aa../ /aa..
+/.///aa./a /aa./a
+/.///aa./. /aa.
+/.///aa.// /aa.
+/.///aa/aa /aa/aa
+/.///aa/a. /aa/a.
+/.///aa/a/ /aa/a
+/.///aa/.a /aa/.a
+/.///aa/.. /
+/.///aa/./ /aa
+/.///aa//a /aa/a
+/.///aa//. /aa
+/.///aa/// /aa
+/.///a.aaa /a.aaa
+/.///a.aa. /a.aa.
+/.///a.aa/ /a.aa
+/.///a.a.a /a.a.a
+/.///a.a.. /a.a..
+/.///a.a./ /a.a.
+/.///a.a/a /a.a/a
+/.///a.a/. /a.a
+/.///a.a// /a.a
+/.///a..aa /a..aa
+/.///a..a. /a..a.
+/.///a..a/ /a..a
+/.///a...a /a...a
+/.///a.... /a....
+/.///a.../ /a...
+/.///a../a /a../a
+/.///a../. /a..
+/.///a..// /a..
+/.///a./aa /a./aa
+/.///a./a. /a./a.
+/.///a./a/ /a./a
+/.///a./.a /a./.a
+/.///a./.. /
+/.///a././ /a.
+/.///a.//a /a./a
+/.///a.//. /a.
+/.///a./// /a.
+/.///a/aaa /a/aaa
+/.///a/aa. /a/aa.
+/.///a/aa/ /a/aa
+/.///a/a.a /a/a.a
+/.///a/a.. /a/a..
+/.///a/a./ /a/a.
+/.///a/a/a /a/a/a
+/.///a/a/. /a/a
+/.///a/a// /a/a
+/.///a/.aa /a/.aa
+/.///a/.a. /a/.a.
+/.///a/.a/ /a/.a
+/.///a/..a /a/..a
+/.///a/... /a/...
+/.///a/../ /
+/.///a/./a /a/a
+/.///a/./. /a
+/.///a/.// /a
+/.///a//aa /a/aa
+/.///a//a. /a/a.
+/.///a//a/ /a/a
+/.///a//.a /a/.a
+/.///a//.. /
+/.///a//./ /a
+/.///a///a /a/a
+/.///a///. /a
+/.///a//// /a
+/.///.aaaa /.aaaa
+/.///.aaa. /.aaa.
+/.///.aaa/ /.aaa
+/.///.aa.a /.aa.a
+/.///.aa.. /.aa..
+/.///.aa./ /.aa.
+/.///.aa/a /.aa/a
+/.///.aa/. /.aa
+/.///.aa// /.aa
+/.///.a.aa /.a.aa
+/.///.a.a. /.a.a.
+/.///.a.a/ /.a.a
+/.///.a..a /.a..a
+/.///.a... /.a...
+/.///.a../ /.a..
+/.///.a./a /.a./a
+/.///.a./. /.a.
+/.///.a.// /.a.
+/.///.a/aa /.a/aa
+/.///.a/a. /.a/a.
+/.///.a/a/ /.a/a
+/.///.a/.a /.a/.a
+/.///.a/.. /
+/.///.a/./ /.a
+/.///.a//a /.a/a
+/.///.a//. /.a
+/.///.a/// /.a
+/.///..aaa /..aaa
+/.///..aa. /..aa.
+/.///..aa/ /..aa
+/.///..a.a /..a.a
+/.///..a.. /..a..
+/.///..a./ /..a.
+/.///..a/a /..a/a
+/.///..a/. /..a
+/.///..a// /..a
+/.///...aa /...aa
+/.///...a. /...a.
+/.///...a/ /...a
+/.///....a /....a
+/.///..... /.....
+/.///..../ /....
+/.///.../a /.../a
+/.///.../. /...
+/.///...// /...
+/.///../aa /aa
+/.///../a. /a.
+/.///../a/ /a
+/.///../.a /.a
+/.///../.. /
+/.///.././ /
+/.///..//a /a
+/.///..//. /
+/.///../// /
+/.///./aaa /aaa
+/.///./aa. /aa.
+/.///./aa/ /aa
+/.///./a.a /a.a
+/.///./a.. /a..
+/.///./a./ /a.
+/.///./a/a /a/a
+/.///./a/. /a
+/.///./a// /a
+/.///./.aa /.aa
+/.///./.a. /.a.
+/.///./.a/ /.a
+/.///./..a /..a
+/.///./... /...
+/.///./../ /
+/.///././a /a
+/.///././. /
+/.///./.// /
+/.///.//aa /aa
+/.///.//a. /a.
+/.///.//a/ /a
+/.///.//.a /.a
+/.///.//.. /
+/.///.//./ /
+/.///.///a /a
+/.///.///. /
+/.///.//// /
+/.////aaaa /aaaa
+/.////aaa. /aaa.
+/.////aaa/ /aaa
+/.////aa.a /aa.a
+/.////aa.. /aa..
+/.////aa./ /aa.
+/.////aa/a /aa/a
+/.////aa/. /aa
+/.////aa// /aa
+/.////a.aa /a.aa
+/.////a.a. /a.a.
+/.////a.a/ /a.a
+/.////a..a /a..a
+/.////a... /a...
+/.////a../ /a..
+/.////a./a /a./a
+/.////a./. /a.
+/.////a.// /a.
+/.////a/aa /a/aa
+/.////a/a. /a/a.
+/.////a/a/ /a/a
+/.////a/.a /a/.a
+/.////a/.. /
+/.////a/./ /a
+/.////a//a /a/a
+/.////a//. /a
+/.////a/// /a
+/.////.aaa /.aaa
+/.////.aa. /.aa.
+/.////.aa/ /.aa
+/.////.a.a /.a.a
+/.////.a.. /.a..
+/.////.a./ /.a.
+/.////.a/a /.a/a
+/.////.a/. /.a
+/.////.a// /.a
+/.////..aa /..aa
+/.////..a. /..a.
+/.////..a/ /..a
+/.////...a /...a
+/.////.... /....
+/.////.../ /...
+/.////../a /a
+/.////../. /
+/.////..// /
+/.////./aa /aa
+/.////./a. /a.
+/.////./a/ /a
+/.////./.a /.a
+/.////./.. /
+/.////././ /
+/.////.//a /a
+/.////.//. /
+/.////./// /
+/./////aaa /aaa
+/./////aa. /aa.
+/./////aa/ /aa
+/./////a.a /a.a
+/./////a.. /a..
+/./////a./ /a.
+/./////a/a /a/a
+/./////a/. /a
+/./////a// /a
+/./////.aa /.aa
+/./////.a. /.a.
+/./////.a/ /.a
+/./////..a /..a
+/./////... /...
+/./////../ /
+/./////./a /a
+/./////./. /
+/./////.// /
+/.//////aa /aa
+/.//////a. /a.
+/.//////a/ /a
+/.//////.a /.a
+/.//////.. /
+/.//////./ /
+/.///////a /a
+/.///////. /
+/.//////// /
+//aaaaaaaa /aaaaaaaa
+//aaaaaaa. /aaaaaaa.
+//aaaaaaa/ /aaaaaaa
+//aaaaaa.a /aaaaaa.a
+//aaaaaa.. /aaaaaa..
+//aaaaaa./ /aaaaaa.
+//aaaaaa/a /aaaaaa/a
+//aaaaaa/. /aaaaaa
+//aaaaaa// /aaaaaa
+//aaaaa.aa /aaaaa.aa
+//aaaaa.a. /aaaaa.a.
+//aaaaa.a/ /aaaaa.a
+//aaaaa..a /aaaaa..a
+//aaaaa... /aaaaa...
+//aaaaa../ /aaaaa..
+//aaaaa./a /aaaaa./a
+//aaaaa./. /aaaaa.
+//aaaaa.// /aaaaa.
+//aaaaa/aa /aaaaa/aa
+//aaaaa/a. /aaaaa/a.
+//aaaaa/a/ /aaaaa/a
+//aaaaa/.a /aaaaa/.a
+//aaaaa/.. /
+//aaaaa/./ /aaaaa
+//aaaaa//a /aaaaa/a
+//aaaaa//. /aaaaa
+//aaaaa/// /aaaaa
+//aaaa.aaa /aaaa.aaa
+//aaaa.aa. /aaaa.aa.
+//aaaa.aa/ /aaaa.aa
+//aaaa.a.a /aaaa.a.a
+//aaaa.a.. /aaaa.a..
+//aaaa.a./ /aaaa.a.
+//aaaa.a/a /aaaa.a/a
+//aaaa.a/. /aaaa.a
+//aaaa.a// /aaaa.a
+//aaaa..aa /aaaa..aa
+//aaaa..a. /aaaa..a.
+//aaaa..a/ /aaaa..a
+//aaaa...a /aaaa...a
+//aaaa.... /aaaa....
+//aaaa.../ /aaaa...
+//aaaa../a /aaaa../a
+//aaaa../. /aaaa..
+//aaaa..// /aaaa..
+//aaaa./aa /aaaa./aa
+//aaaa./a. /aaaa./a.
+//aaaa./a/ /aaaa./a
+//aaaa./.a /aaaa./.a
+//aaaa./.. /
+//aaaa././ /aaaa.
+//aaaa.//a /aaaa./a
+//aaaa.//. /aaaa.
+//aaaa./// /aaaa.
+//aaaa/aaa /aaaa/aaa
+//aaaa/aa. /aaaa/aa.
+//aaaa/aa/ /aaaa/aa
+//aaaa/a.a /aaaa/a.a
+//aaaa/a.. /aaaa/a..
+//aaaa/a./ /aaaa/a.
+//aaaa/a/a /aaaa/a/a
+//aaaa/a/. /aaaa/a
+//aaaa/a// /aaaa/a
+//aaaa/.aa /aaaa/.aa
+//aaaa/.a. /aaaa/.a.
+//aaaa/.a/ /aaaa/.a
+//aaaa/..a /aaaa/..a
+//aaaa/... /aaaa/...
+//aaaa/../ /
+//aaaa/./a /aaaa/a
+//aaaa/./. /aaaa
+//aaaa/.// /aaaa
+//aaaa//aa /aaaa/aa
+//aaaa//a. /aaaa/a.
+//aaaa//a/ /aaaa/a
+//aaaa//.a /aaaa/.a
+//aaaa//.. /
+//aaaa//./ /aaaa
+//aaaa///a /aaaa/a
+//aaaa///. /aaaa
+//aaaa//// /aaaa
+//aaa.aaaa /aaa.aaaa
+//aaa.aaa. /aaa.aaa.
+//aaa.aaa/ /aaa.aaa
+//aaa.aa.a /aaa.aa.a
+//aaa.aa.. /aaa.aa..
+//aaa.aa./ /aaa.aa.
+//aaa.aa/a /aaa.aa/a
+//aaa.aa/. /aaa.aa
+//aaa.aa// /aaa.aa
+//aaa.a.aa /aaa.a.aa
+//aaa.a.a. /aaa.a.a.
+//aaa.a.a/ /aaa.a.a
+//aaa.a..a /aaa.a..a
+//aaa.a... /aaa.a...
+//aaa.a../ /aaa.a..
+//aaa.a./a /aaa.a./a
+//aaa.a./. /aaa.a.
+//aaa.a.// /aaa.a.
+//aaa.a/aa /aaa.a/aa
+//aaa.a/a. /aaa.a/a.
+//aaa.a/a/ /aaa.a/a
+//aaa.a/.a /aaa.a/.a
+//aaa.a/.. /
+//aaa.a/./ /aaa.a
+//aaa.a//a /aaa.a/a
+//aaa.a//. /aaa.a
+//aaa.a/// /aaa.a
+//aaa..aaa /aaa..aaa
+//aaa..aa. /aaa..aa.
+//aaa..aa/ /aaa..aa
+//aaa..a.a /aaa..a.a
+//aaa..a.. /aaa..a..
+//aaa..a./ /aaa..a.
+//aaa..a/a /aaa..a/a
+//aaa..a/. /aaa..a
+//aaa..a// /aaa..a
+//aaa...aa /aaa...aa
+//aaa...a. /aaa...a.
+//aaa...a/ /aaa...a
+//aaa....a /aaa....a
+//aaa..... /aaa.....
+//aaa..../ /aaa....
+//aaa.../a /aaa.../a
+//aaa.../. /aaa...
+//aaa...// /aaa...
+//aaa../aa /aaa../aa
+//aaa../a. /aaa../a.
+//aaa../a/ /aaa../a
+//aaa../.a /aaa../.a
+//aaa../.. /
+//aaa.././ /aaa..
+//aaa..//a /aaa../a
+//aaa..//. /aaa..
+//aaa../// /aaa..
+//aaa./aaa /aaa./aaa
+//aaa./aa. /aaa./aa.
+//aaa./aa/ /aaa./aa
+//aaa./a.a /aaa./a.a
+//aaa./a.. /aaa./a..
+//aaa./a./ /aaa./a.
+//aaa./a/a /aaa./a/a
+//aaa./a/. /aaa./a
+//aaa./a// /aaa./a
+//aaa./.aa /aaa./.aa
+//aaa./.a. /aaa./.a.
+//aaa./.a/ /aaa./.a
+//aaa./..a /aaa./..a
+//aaa./... /aaa./...
+//aaa./../ /
+//aaa././a /aaa./a
+//aaa././. /aaa.
+//aaa./.// /aaa.
+//aaa.//aa /aaa./aa
+//aaa.//a. /aaa./a.
+//aaa.//a/ /aaa./a
+//aaa.//.a /aaa./.a
+//aaa.//.. /
+//aaa.//./ /aaa.
+//aaa.///a /aaa./a
+//aaa.///. /aaa.
+//aaa.//// /aaa.
+//aaa/aaaa /aaa/aaaa
+//aaa/aaa. /aaa/aaa.
+//aaa/aaa/ /aaa/aaa
+//aaa/aa.a /aaa/aa.a
+//aaa/aa.. /aaa/aa..
+//aaa/aa./ /aaa/aa.
+//aaa/aa/a /aaa/aa/a
+//aaa/aa/. /aaa/aa
+//aaa/aa// /aaa/aa
+//aaa/a.aa /aaa/a.aa
+//aaa/a.a. /aaa/a.a.
+//aaa/a.a/ /aaa/a.a
+//aaa/a..a /aaa/a..a
+//aaa/a... /aaa/a...
+//aaa/a../ /aaa/a..
+//aaa/a./a /aaa/a./a
+//aaa/a./. /aaa/a.
+//aaa/a.// /aaa/a.
+//aaa/a/aa /aaa/a/aa
+//aaa/a/a. /aaa/a/a.
+//aaa/a/a/ /aaa/a/a
+//aaa/a/.a /aaa/a/.a
+//aaa/a/.. /aaa
+//aaa/a/./ /aaa/a
+//aaa/a//a /aaa/a/a
+//aaa/a//. /aaa/a
+//aaa/a/// /aaa/a
+//aaa/.aaa /aaa/.aaa
+//aaa/.aa. /aaa/.aa.
+//aaa/.aa/ /aaa/.aa
+//aaa/.a.a /aaa/.a.a
+//aaa/.a.. /aaa/.a..
+//aaa/.a./ /aaa/.a.
+//aaa/.a/a /aaa/.a/a
+//aaa/.a/. /aaa/.a
+//aaa/.a// /aaa/.a
+//aaa/..aa /aaa/..aa
+//aaa/..a. /aaa/..a.
+//aaa/..a/ /aaa/..a
+//aaa/...a /aaa/...a
+//aaa/.... /aaa/....
+//aaa/.../ /aaa/...
+//aaa/../a /a
+//aaa/../. /
+//aaa/..// /
+//aaa/./aa /aaa/aa
+//aaa/./a. /aaa/a.
+//aaa/./a/ /aaa/a
+//aaa/./.a /aaa/.a
+//aaa/./.. /
+//aaa/././ /aaa
+//aaa/.//a /aaa/a
+//aaa/.//. /aaa
+//aaa/./// /aaa
+//aaa//aaa /aaa/aaa
+//aaa//aa. /aaa/aa.
+//aaa//aa/ /aaa/aa
+//aaa//a.a /aaa/a.a
+//aaa//a.. /aaa/a..
+//aaa//a./ /aaa/a.
+//aaa//a/a /aaa/a/a
+//aaa//a/. /aaa/a
+//aaa//a// /aaa/a
+//aaa//.aa /aaa/.aa
+//aaa//.a. /aaa/.a.
+//aaa//.a/ /aaa/.a
+//aaa//..a /aaa/..a
+//aaa//... /aaa/...
+//aaa//../ /
+//aaa//./a /aaa/a
+//aaa//./. /aaa
+//aaa//.// /aaa
+//aaa///aa /aaa/aa
+//aaa///a. /aaa/a.
+//aaa///a/ /aaa/a
+//aaa///.a /aaa/.a
+//aaa///.. /
+//aaa///./ /aaa
+//aaa////a /aaa/a
+//aaa////. /aaa
+//aaa///// /aaa
+//aa.aaaaa /aa.aaaaa
+//aa.aaaa. /aa.aaaa.
+//aa.aaaa/ /aa.aaaa
+//aa.aaa.a /aa.aaa.a
+//aa.aaa.. /aa.aaa..
+//aa.aaa./ /aa.aaa.
+//aa.aaa/a /aa.aaa/a
+//aa.aaa/. /aa.aaa
+//aa.aaa// /aa.aaa
+//aa.aa.aa /aa.aa.aa
+//aa.aa.a. /aa.aa.a.
+//aa.aa.a/ /aa.aa.a
+//aa.aa..a /aa.aa..a
+//aa.aa... /aa.aa...
+//aa.aa../ /aa.aa..
+//aa.aa./a /aa.aa./a
+//aa.aa./. /aa.aa.
+//aa.aa.// /aa.aa.
+//aa.aa/aa /aa.aa/aa
+//aa.aa/a. /aa.aa/a.
+//aa.aa/a/ /aa.aa/a
+//aa.aa/.a /aa.aa/.a
+//aa.aa/.. /
+//aa.aa/./ /aa.aa
+//aa.aa//a /aa.aa/a
+//aa.aa//. /aa.aa
+//aa.aa/// /aa.aa
+//aa.a.aaa /aa.a.aaa
+//aa.a.aa. /aa.a.aa.
+//aa.a.aa/ /aa.a.aa
+//aa.a.a.a /aa.a.a.a
+//aa.a.a.. /aa.a.a..
+//aa.a.a./ /aa.a.a.
+//aa.a.a/a /aa.a.a/a
+//aa.a.a/. /aa.a.a
+//aa.a.a// /aa.a.a
+//aa.a..aa /aa.a..aa
+//aa.a..a. /aa.a..a.
+//aa.a..a/ /aa.a..a
+//aa.a...a /aa.a...a
+//aa.a.... /aa.a....
+//aa.a.../ /aa.a...
+//aa.a../a /aa.a../a
+//aa.a../. /aa.a..
+//aa.a..// /aa.a..
+//aa.a./aa /aa.a./aa
+//aa.a./a. /aa.a./a.
+//aa.a./a/ /aa.a./a
+//aa.a./.a /aa.a./.a
+//aa.a./.. /
+//aa.a././ /aa.a.
+//aa.a.//a /aa.a./a
+//aa.a.//. /aa.a.
+//aa.a./// /aa.a.
+//aa.a/aaa /aa.a/aaa
+//aa.a/aa. /aa.a/aa.
+//aa.a/aa/ /aa.a/aa
+//aa.a/a.a /aa.a/a.a
+//aa.a/a.. /aa.a/a..
+//aa.a/a./ /aa.a/a.
+//aa.a/a/a /aa.a/a/a
+//aa.a/a/. /aa.a/a
+//aa.a/a// /aa.a/a
+//aa.a/.aa /aa.a/.aa
+//aa.a/.a. /aa.a/.a.
+//aa.a/.a/ /aa.a/.a
+//aa.a/..a /aa.a/..a
+//aa.a/... /aa.a/...
+//aa.a/../ /
+//aa.a/./a /aa.a/a
+//aa.a/./. /aa.a
+//aa.a/.// /aa.a
+//aa.a//aa /aa.a/aa
+//aa.a//a. /aa.a/a.
+//aa.a//a/ /aa.a/a
+//aa.a//.a /aa.a/.a
+//aa.a//.. /
+//aa.a//./ /aa.a
+//aa.a///a /aa.a/a
+//aa.a///. /aa.a
+//aa.a//// /aa.a
+//aa..aaaa /aa..aaaa
+//aa..aaa. /aa..aaa.
+//aa..aaa/ /aa..aaa
+//aa..aa.a /aa..aa.a
+//aa..aa.. /aa..aa..
+//aa..aa./ /aa..aa.
+//aa..aa/a /aa..aa/a
+//aa..aa/. /aa..aa
+//aa..aa// /aa..aa
+//aa..a.aa /aa..a.aa
+//aa..a.a. /aa..a.a.
+//aa..a.a/ /aa..a.a
+//aa..a..a /aa..a..a
+//aa..a... /aa..a...
+//aa..a../ /aa..a..
+//aa..a./a /aa..a./a
+//aa..a./. /aa..a.
+//aa..a.// /aa..a.
+//aa..a/aa /aa..a/aa
+//aa..a/a. /aa..a/a.
+//aa..a/a/ /aa..a/a
+//aa..a/.a /aa..a/.a
+//aa..a/.. /
+//aa..a/./ /aa..a
+//aa..a//a /aa..a/a
+//aa..a//. /aa..a
+//aa..a/// /aa..a
+//aa...aaa /aa...aaa
+//aa...aa. /aa...aa.
+//aa...aa/ /aa...aa
+//aa...a.a /aa...a.a
+//aa...a.. /aa...a..
+//aa...a./ /aa...a.
+//aa...a/a /aa...a/a
+//aa...a/. /aa...a
+//aa...a// /aa...a
+//aa....aa /aa....aa
+//aa....a. /aa....a.
+//aa....a/ /aa....a
+//aa.....a /aa.....a
+//aa...... /aa......
+//aa...../ /aa.....
+//aa..../a /aa..../a
+//aa..../. /aa....
+//aa....// /aa....
+//aa.../aa /aa.../aa
+//aa.../a. /aa.../a.
+//aa.../a/ /aa.../a
+//aa.../.a /aa.../.a
+//aa.../.. /
+//aa..././ /aa...
+//aa...//a /aa.../a
+//aa...//. /aa...
+//aa.../// /aa...
+//aa../aaa /aa../aaa
+//aa../aa. /aa../aa.
+//aa../aa/ /aa../aa
+//aa../a.a /aa../a.a
+//aa../a.. /aa../a..
+//aa../a./ /aa../a.
+//aa../a/a /aa../a/a
+//aa../a/. /aa../a
+//aa../a// /aa../a
+//aa../.aa /aa../.aa
+//aa../.a. /aa../.a.
+//aa../.a/ /aa../.a
+//aa../..a /aa../..a
+//aa../... /aa../...
+//aa../../ /
+//aa.././a /aa../a
+//aa.././. /aa..
+//aa../.// /aa..
+//aa..//aa /aa../aa
+//aa..//a. /aa../a.
+//aa..//a/ /aa../a
+//aa..//.a /aa../.a
+//aa..//.. /
+//aa..//./ /aa..
+//aa..///a /aa../a
+//aa..///. /aa..
+//aa..//// /aa..
+//aa./aaaa /aa./aaaa
+//aa./aaa. /aa./aaa.
+//aa./aaa/ /aa./aaa
+//aa./aa.a /aa./aa.a
+//aa./aa.. /aa./aa..
+//aa./aa./ /aa./aa.
+//aa./aa/a /aa./aa/a
+//aa./aa/. /aa./aa
+//aa./aa// /aa./aa
+//aa./a.aa /aa./a.aa
+//aa./a.a. /aa./a.a.
+//aa./a.a/ /aa./a.a
+//aa./a..a /aa./a..a
+//aa./a... /aa./a...
+//aa./a../ /aa./a..
+//aa./a./a /aa./a./a
+//aa./a./. /aa./a.
+//aa./a.// /aa./a.
+//aa./a/aa /aa./a/aa
+//aa./a/a. /aa./a/a.
+//aa./a/a/ /aa./a/a
+//aa./a/.a /aa./a/.a
+//aa./a/.. /aa.
+//aa./a/./ /aa./a
+//aa./a//a /aa./a/a
+//aa./a//. /aa./a
+//aa./a/// /aa./a
+//aa./.aaa /aa./.aaa
+//aa./.aa. /aa./.aa.
+//aa./.aa/ /aa./.aa
+//aa./.a.a /aa./.a.a
+//aa./.a.. /aa./.a..
+//aa./.a./ /aa./.a.
+//aa./.a/a /aa./.a/a
+//aa./.a/. /aa./.a
+//aa./.a// /aa./.a
+//aa./..aa /aa./..aa
+//aa./..a. /aa./..a.
+//aa./..a/ /aa./..a
+//aa./...a /aa./...a
+//aa./.... /aa./....
+//aa./.../ /aa./...
+//aa./../a /a
+//aa./../. /
+//aa./..// /
+//aa././aa /aa./aa
+//aa././a. /aa./a.
+//aa././a/ /aa./a
+//aa././.a /aa./.a
+//aa././.. /
+//aa./././ /aa.
+//aa././/a /aa./a
+//aa././/. /aa.
+//aa././// /aa.
+//aa.//aaa /aa./aaa
+//aa.//aa. /aa./aa.
+//aa.//aa/ /aa./aa
+//aa.//a.a /aa./a.a
+//aa.//a.. /aa./a..
+//aa.//a./ /aa./a.
+//aa.//a/a /aa./a/a
+//aa.//a/. /aa./a
+//aa.//a// /aa./a
+//aa.//.aa /aa./.aa
+//aa.//.a. /aa./.a.
+//aa.//.a/ /aa./.a
+//aa.//..a /aa./..a
+//aa.//... /aa./...
+//aa.//../ /
+//aa.//./a /aa./a
+//aa.//./. /aa.
+//aa.//.// /aa.
+//aa.///aa /aa./aa
+//aa.///a. /aa./a.
+//aa.///a/ /aa./a
+//aa.///.a /aa./.a
+//aa.///.. /
+//aa.///./ /aa.
+//aa.////a /aa./a
+//aa.////. /aa.
+//aa.///// /aa.
+//aa/aaaaa /aa/aaaaa
+//aa/aaaa. /aa/aaaa.
+//aa/aaaa/ /aa/aaaa
+//aa/aaa.a /aa/aaa.a
+//aa/aaa.. /aa/aaa..
+//aa/aaa./ /aa/aaa.
+//aa/aaa/a /aa/aaa/a
+//aa/aaa/. /aa/aaa
+//aa/aaa// /aa/aaa
+//aa/aa.aa /aa/aa.aa
+//aa/aa.a. /aa/aa.a.
+//aa/aa.a/ /aa/aa.a
+//aa/aa..a /aa/aa..a
+//aa/aa... /aa/aa...
+//aa/aa../ /aa/aa..
+//aa/aa./a /aa/aa./a
+//aa/aa./. /aa/aa.
+//aa/aa.// /aa/aa.
+//aa/aa/aa /aa/aa/aa
+//aa/aa/a. /aa/aa/a.
+//aa/aa/a/ /aa/aa/a
+//aa/aa/.a /aa/aa/.a
+//aa/aa/.. /aa
+//aa/aa/./ /aa/aa
+//aa/aa//a /aa/aa/a
+//aa/aa//. /aa/aa
+//aa/aa/// /aa/aa
+//aa/a.aaa /aa/a.aaa
+//aa/a.aa. /aa/a.aa.
+//aa/a.aa/ /aa/a.aa
+//aa/a.a.a /aa/a.a.a
+//aa/a.a.. /aa/a.a..
+//aa/a.a./ /aa/a.a.
+//aa/a.a/a /aa/a.a/a
+//aa/a.a/. /aa/a.a
+//aa/a.a// /aa/a.a
+//aa/a..aa /aa/a..aa
+//aa/a..a. /aa/a..a.
+//aa/a..a/ /aa/a..a
+//aa/a...a /aa/a...a
+//aa/a.... /aa/a....
+//aa/a.../ /aa/a...
+//aa/a../a /aa/a../a
+//aa/a../. /aa/a..
+//aa/a..// /aa/a..
+//aa/a./aa /aa/a./aa
+//aa/a./a. /aa/a./a.
+//aa/a./a/ /aa/a./a
+//aa/a./.a /aa/a./.a
+//aa/a./.. /aa
+//aa/a././ /aa/a.
+//aa/a.//a /aa/a./a
+//aa/a.//. /aa/a.
+//aa/a./// /aa/a.
+//aa/a/aaa /aa/a/aaa
+//aa/a/aa. /aa/a/aa.
+//aa/a/aa/ /aa/a/aa
+//aa/a/a.a /aa/a/a.a
+//aa/a/a.. /aa/a/a..
+//aa/a/a./ /aa/a/a.
+//aa/a/a/a /aa/a/a/a
+//aa/a/a/. /aa/a/a
+//aa/a/a// /aa/a/a
+//aa/a/.aa /aa/a/.aa
+//aa/a/.a. /aa/a/.a.
+//aa/a/.a/ /aa/a/.a
+//aa/a/..a /aa/a/..a
+//aa/a/... /aa/a/...
+//aa/a/../ /aa
+//aa/a/./a /aa/a/a
+//aa/a/./. /aa/a
+//aa/a/.// /aa/a
+//aa/a//aa /aa/a/aa
+//aa/a//a. /aa/a/a.
+//aa/a//a/ /aa/a/a
+//aa/a//.a /aa/a/.a
+//aa/a//.. /aa
+//aa/a//./ /aa/a
+//aa/a///a /aa/a/a
+//aa/a///. /aa/a
+//aa/a//// /aa/a
+//aa/.aaaa /aa/.aaaa
+//aa/.aaa. /aa/.aaa.
+//aa/.aaa/ /aa/.aaa
+//aa/.aa.a /aa/.aa.a
+//aa/.aa.. /aa/.aa..
+//aa/.aa./ /aa/.aa.
+//aa/.aa/a /aa/.aa/a
+//aa/.aa/. /aa/.aa
+//aa/.aa// /aa/.aa
+//aa/.a.aa /aa/.a.aa
+//aa/.a.a. /aa/.a.a.
+//aa/.a.a/ /aa/.a.a
+//aa/.a..a /aa/.a..a
+//aa/.a... /aa/.a...
+//aa/.a../ /aa/.a..
+//aa/.a./a /aa/.a./a
+//aa/.a./. /aa/.a.
+//aa/.a.// /aa/.a.
+//aa/.a/aa /aa/.a/aa
+//aa/.a/a. /aa/.a/a.
+//aa/.a/a/ /aa/.a/a
+//aa/.a/.a /aa/.a/.a
+//aa/.a/.. /aa
+//aa/.a/./ /aa/.a
+//aa/.a//a /aa/.a/a
+//aa/.a//. /aa/.a
+//aa/.a/// /aa/.a
+//aa/..aaa /aa/..aaa
+//aa/..aa. /aa/..aa.
+//aa/..aa/ /aa/..aa
+//aa/..a.a /aa/..a.a
+//aa/..a.. /aa/..a..
+//aa/..a./ /aa/..a.
+//aa/..a/a /aa/..a/a
+//aa/..a/. /aa/..a
+//aa/..a// /aa/..a
+//aa/...aa /aa/...aa
+//aa/...a. /aa/...a.
+//aa/...a/ /aa/...a
+//aa/....a /aa/....a
+//aa/..... /aa/.....
+//aa/..../ /aa/....
+//aa/.../a /aa/.../a
+//aa/.../. /aa/...
+//aa/...// /aa/...
+//aa/../aa /aa
+//aa/../a. /a.
+//aa/../a/ /a
+//aa/../.a /.a
+//aa/../.. /
+//aa/.././ /
+//aa/..//a /a
+//aa/..//. /
+//aa/../// /
+//aa/./aaa /aa/aaa
+//aa/./aa. /aa/aa.
+//aa/./aa/ /aa/aa
+//aa/./a.a /aa/a.a
+//aa/./a.. /aa/a..
+//aa/./a./ /aa/a.
+//aa/./a/a /aa/a/a
+//aa/./a/. /aa/a
+//aa/./a// /aa/a
+//aa/./.aa /aa/.aa
+//aa/./.a. /aa/.a.
+//aa/./.a/ /aa/.a
+//aa/./..a /aa/..a
+//aa/./... /aa/...
+//aa/./../ /
+//aa/././a /aa/a
+//aa/././. /aa
+//aa/./.// /aa
+//aa/.//aa /aa/aa
+//aa/.//a. /aa/a.
+//aa/.//a/ /aa/a
+//aa/.//.a /aa/.a
+//aa/.//.. /
+//aa/.//./ /aa
+//aa/.///a /aa/a
+//aa/.///. /aa
+//aa/.//// /aa
+//aa//aaaa /aa/aaaa
+//aa//aaa. /aa/aaa.
+//aa//aaa/ /aa/aaa
+//aa//aa.a /aa/aa.a
+//aa//aa.. /aa/aa..
+//aa//aa./ /aa/aa.
+//aa//aa/a /aa/aa/a
+//aa//aa/. /aa/aa
+//aa//aa// /aa/aa
+//aa//a.aa /aa/a.aa
+//aa//a.a. /aa/a.a.
+//aa//a.a/ /aa/a.a
+//aa//a..a /aa/a..a
+//aa//a... /aa/a...
+//aa//a../ /aa/a..
+//aa//a./a /aa/a./a
+//aa//a./. /aa/a.
+//aa//a.// /aa/a.
+//aa//a/aa /aa/a/aa
+//aa//a/a. /aa/a/a.
+//aa//a/a/ /aa/a/a
+//aa//a/.a /aa/a/.a
+//aa//a/.. /aa
+//aa//a/./ /aa/a
+//aa//a//a /aa/a/a
+//aa//a//. /aa/a
+//aa//a/// /aa/a
+//aa//.aaa /aa/.aaa
+//aa//.aa. /aa/.aa.
+//aa//.aa/ /aa/.aa
+//aa//.a.a /aa/.a.a
+//aa//.a.. /aa/.a..
+//aa//.a./ /aa/.a.
+//aa//.a/a /aa/.a/a
+//aa//.a/. /aa/.a
+//aa//.a// /aa/.a
+//aa//..aa /aa/..aa
+//aa//..a. /aa/..a.
+//aa//..a/ /aa/..a
+//aa//...a /aa/...a
+//aa//.... /aa/....
+//aa//.../ /aa/...
+//aa//../a /a
+//aa//../. /
+//aa//..// /
+//aa//./aa /aa/aa
+//aa//./a. /aa/a.
+//aa//./a/ /aa/a
+//aa//./.a /aa/.a
+//aa//./.. /
+//aa//././ /aa
+//aa//.//a /aa/a
+//aa//.//. /aa
+//aa//./// /aa
+//aa///aaa /aa/aaa
+//aa///aa. /aa/aa.
+//aa///aa/ /aa/aa
+//aa///a.a /aa/a.a
+//aa///a.. /aa/a..
+//aa///a./ /aa/a.
+//aa///a/a /aa/a/a
+//aa///a/. /aa/a
+//aa///a// /aa/a
+//aa///.aa /aa/.aa
+//aa///.a. /aa/.a.
+//aa///.a/ /aa/.a
+//aa///..a /aa/..a
+//aa///... /aa/...
+//aa///../ /
+//aa///./a /aa/a
+//aa///./. /aa
+//aa///.// /aa
+//aa////aa /aa/aa
+//aa////a. /aa/a.
+//aa////a/ /aa/a
+//aa////.a /aa/.a
+//aa////.. /
+//aa////./ /aa
+//aa/////a /aa/a
+//aa/////. /aa
+//aa////// /aa
+//a.aaaaaa /a.aaaaaa
+//a.aaaaa. /a.aaaaa.
+//a.aaaaa/ /a.aaaaa
+//a.aaaa.a /a.aaaa.a
+//a.aaaa.. /a.aaaa..
+//a.aaaa./ /a.aaaa.
+//a.aaaa/a /a.aaaa/a
+//a.aaaa/. /a.aaaa
+//a.aaaa// /a.aaaa
+//a.aaa.aa /a.aaa.aa
+//a.aaa.a. /a.aaa.a.
+//a.aaa.a/ /a.aaa.a
+//a.aaa..a /a.aaa..a
+//a.aaa... /a.aaa...
+//a.aaa../ /a.aaa..
+//a.aaa./a /a.aaa./a
+//a.aaa./. /a.aaa.
+//a.aaa.// /a.aaa.
+//a.aaa/aa /a.aaa/aa
+//a.aaa/a. /a.aaa/a.
+//a.aaa/a/ /a.aaa/a
+//a.aaa/.a /a.aaa/.a
+//a.aaa/.. /
+//a.aaa/./ /a.aaa
+//a.aaa//a /a.aaa/a
+//a.aaa//. /a.aaa
+//a.aaa/// /a.aaa
+//a.aa.aaa /a.aa.aaa
+//a.aa.aa. /a.aa.aa.
+//a.aa.aa/ /a.aa.aa
+//a.aa.a.a /a.aa.a.a
+//a.aa.a.. /a.aa.a..
+//a.aa.a./ /a.aa.a.
+//a.aa.a/a /a.aa.a/a
+//a.aa.a/. /a.aa.a
+//a.aa.a// /a.aa.a
+//a.aa..aa /a.aa..aa
+//a.aa..a. /a.aa..a.
+//a.aa..a/ /a.aa..a
+//a.aa...a /a.aa...a
+//a.aa.... /a.aa....
+//a.aa.../ /a.aa...
+//a.aa../a /a.aa../a
+//a.aa../. /a.aa..
+//a.aa..// /a.aa..
+//a.aa./aa /a.aa./aa
+//a.aa./a. /a.aa./a.
+//a.aa./a/ /a.aa./a
+//a.aa./.a /a.aa./.a
+//a.aa./.. /
+//a.aa././ /a.aa.
+//a.aa.//a /a.aa./a
+//a.aa.//. /a.aa.
+//a.aa./// /a.aa.
+//a.aa/aaa /a.aa/aaa
+//a.aa/aa. /a.aa/aa.
+//a.aa/aa/ /a.aa/aa
+//a.aa/a.a /a.aa/a.a
+//a.aa/a.. /a.aa/a..
+//a.aa/a./ /a.aa/a.
+//a.aa/a/a /a.aa/a/a
+//a.aa/a/. /a.aa/a
+//a.aa/a// /a.aa/a
+//a.aa/.aa /a.aa/.aa
+//a.aa/.a. /a.aa/.a.
+//a.aa/.a/ /a.aa/.a
+//a.aa/..a /a.aa/..a
+//a.aa/... /a.aa/...
+//a.aa/../ /
+//a.aa/./a /a.aa/a
+//a.aa/./. /a.aa
+//a.aa/.// /a.aa
+//a.aa//aa /a.aa/aa
+//a.aa//a. /a.aa/a.
+//a.aa//a/ /a.aa/a
+//a.aa//.a /a.aa/.a
+//a.aa//.. /
+//a.aa//./ /a.aa
+//a.aa///a /a.aa/a
+//a.aa///. /a.aa
+//a.aa//// /a.aa
+//a.a.aaaa /a.a.aaaa
+//a.a.aaa. /a.a.aaa.
+//a.a.aaa/ /a.a.aaa
+//a.a.aa.a /a.a.aa.a
+//a.a.aa.. /a.a.aa..
+//a.a.aa./ /a.a.aa.
+//a.a.aa/a /a.a.aa/a
+//a.a.aa/. /a.a.aa
+//a.a.aa// /a.a.aa
+//a.a.a.aa /a.a.a.aa
+//a.a.a.a. /a.a.a.a.
+//a.a.a.a/ /a.a.a.a
+//a.a.a..a /a.a.a..a
+//a.a.a... /a.a.a...
+//a.a.a../ /a.a.a..
+//a.a.a./a /a.a.a./a
+//a.a.a./. /a.a.a.
+//a.a.a.// /a.a.a.
+//a.a.a/aa /a.a.a/aa
+//a.a.a/a. /a.a.a/a.
+//a.a.a/a/ /a.a.a/a
+//a.a.a/.a /a.a.a/.a
+//a.a.a/.. /
+//a.a.a/./ /a.a.a
+//a.a.a//a /a.a.a/a
+//a.a.a//. /a.a.a
+//a.a.a/// /a.a.a
+//a.a..aaa /a.a..aaa
+//a.a..aa. /a.a..aa.
+//a.a..aa/ /a.a..aa
+//a.a..a.a /a.a..a.a
+//a.a..a.. /a.a..a..
+//a.a..a./ /a.a..a.
+//a.a..a/a /a.a..a/a
+//a.a..a/. /a.a..a
+//a.a..a// /a.a..a
+//a.a...aa /a.a...aa
+//a.a...a. /a.a...a.
+//a.a...a/ /a.a...a
+//a.a....a /a.a....a
+//a.a..... /a.a.....
+//a.a..../ /a.a....
+//a.a.../a /a.a.../a
+//a.a.../. /a.a...
+//a.a...// /a.a...
+//a.a../aa /a.a../aa
+//a.a../a. /a.a../a.
+//a.a../a/ /a.a../a
+//a.a../.a /a.a../.a
+//a.a../.. /
+//a.a.././ /a.a..
+//a.a..//a /a.a../a
+//a.a..//. /a.a..
+//a.a../// /a.a..
+//a.a./aaa /a.a./aaa
+//a.a./aa. /a.a./aa.
+//a.a./aa/ /a.a./aa
+//a.a./a.a /a.a./a.a
+//a.a./a.. /a.a./a..
+//a.a./a./ /a.a./a.
+//a.a./a/a /a.a./a/a
+//a.a./a/. /a.a./a
+//a.a./a// /a.a./a
+//a.a./.aa /a.a./.aa
+//a.a./.a. /a.a./.a.
+//a.a./.a/ /a.a./.a
+//a.a./..a /a.a./..a
+//a.a./... /a.a./...
+//a.a./../ /
+//a.a././a /a.a./a
+//a.a././. /a.a.
+//a.a./.// /a.a.
+//a.a.//aa /a.a./aa
+//a.a.//a. /a.a./a.
+//a.a.//a/ /a.a./a
+//a.a.//.a /a.a./.a
+//a.a.//.. /
+//a.a.//./ /a.a.
+//a.a.///a /a.a./a
+//a.a.///. /a.a.
+//a.a.//// /a.a.
+//a.a/aaaa /a.a/aaaa
+//a.a/aaa. /a.a/aaa.
+//a.a/aaa/ /a.a/aaa
+//a.a/aa.a /a.a/aa.a
+//a.a/aa.. /a.a/aa..
+//a.a/aa./ /a.a/aa.
+//a.a/aa/a /a.a/aa/a
+//a.a/aa/. /a.a/aa
+//a.a/aa// /a.a/aa
+//a.a/a.aa /a.a/a.aa
+//a.a/a.a. /a.a/a.a.
+//a.a/a.a/ /a.a/a.a
+//a.a/a..a /a.a/a..a
+//a.a/a... /a.a/a...
+//a.a/a../ /a.a/a..
+//a.a/a./a /a.a/a./a
+//a.a/a./. /a.a/a.
+//a.a/a.// /a.a/a.
+//a.a/a/aa /a.a/a/aa
+//a.a/a/a. /a.a/a/a.
+//a.a/a/a/ /a.a/a/a
+//a.a/a/.a /a.a/a/.a
+//a.a/a/.. /a.a
+//a.a/a/./ /a.a/a
+//a.a/a//a /a.a/a/a
+//a.a/a//. /a.a/a
+//a.a/a/// /a.a/a
+//a.a/.aaa /a.a/.aaa
+//a.a/.aa. /a.a/.aa.
+//a.a/.aa/ /a.a/.aa
+//a.a/.a.a /a.a/.a.a
+//a.a/.a.. /a.a/.a..
+//a.a/.a./ /a.a/.a.
+//a.a/.a/a /a.a/.a/a
+//a.a/.a/. /a.a/.a
+//a.a/.a// /a.a/.a
+//a.a/..aa /a.a/..aa
+//a.a/..a. /a.a/..a.
+//a.a/..a/ /a.a/..a
+//a.a/...a /a.a/...a
+//a.a/.... /a.a/....
+//a.a/.../ /a.a/...
+//a.a/../a /a
+//a.a/../. /
+//a.a/..// /
+//a.a/./aa /a.a/aa
+//a.a/./a. /a.a/a.
+//a.a/./a/ /a.a/a
+//a.a/./.a /a.a/.a
+//a.a/./.. /
+//a.a/././ /a.a
+//a.a/.//a /a.a/a
+//a.a/.//. /a.a
+//a.a/./// /a.a
+//a.a//aaa /a.a/aaa
+//a.a//aa. /a.a/aa.
+//a.a//aa/ /a.a/aa
+//a.a//a.a /a.a/a.a
+//a.a//a.. /a.a/a..
+//a.a//a./ /a.a/a.
+//a.a//a/a /a.a/a/a
+//a.a//a/. /a.a/a
+//a.a//a// /a.a/a
+//a.a//.aa /a.a/.aa
+//a.a//.a. /a.a/.a.
+//a.a//.a/ /a.a/.a
+//a.a//..a /a.a/..a
+//a.a//... /a.a/...
+//a.a//../ /
+//a.a//./a /a.a/a
+//a.a//./. /a.a
+//a.a//.// /a.a
+//a.a///aa /a.a/aa
+//a.a///a. /a.a/a.
+//a.a///a/ /a.a/a
+//a.a///.a /a.a/.a
+//a.a///.. /
+//a.a///./ /a.a
+//a.a////a /a.a/a
+//a.a////. /a.a
+//a.a///// /a.a
+//a..aaaaa /a..aaaaa
+//a..aaaa. /a..aaaa.
+//a..aaaa/ /a..aaaa
+//a..aaa.a /a..aaa.a
+//a..aaa.. /a..aaa..
+//a..aaa./ /a..aaa.
+//a..aaa/a /a..aaa/a
+//a..aaa/. /a..aaa
+//a..aaa// /a..aaa
+//a..aa.aa /a..aa.aa
+//a..aa.a. /a..aa.a.
+//a..aa.a/ /a..aa.a
+//a..aa..a /a..aa..a
+//a..aa... /a..aa...
+//a..aa../ /a..aa..
+//a..aa./a /a..aa./a
+//a..aa./. /a..aa.
+//a..aa.// /a..aa.
+//a..aa/aa /a..aa/aa
+//a..aa/a. /a..aa/a.
+//a..aa/a/ /a..aa/a
+//a..aa/.a /a..aa/.a
+//a..aa/.. /
+//a..aa/./ /a..aa
+//a..aa//a /a..aa/a
+//a..aa//. /a..aa
+//a..aa/// /a..aa
+//a..a.aaa /a..a.aaa
+//a..a.aa. /a..a.aa.
+//a..a.aa/ /a..a.aa
+//a..a.a.a /a..a.a.a
+//a..a.a.. /a..a.a..
+//a..a.a./ /a..a.a.
+//a..a.a/a /a..a.a/a
+//a..a.a/. /a..a.a
+//a..a.a// /a..a.a
+//a..a..aa /a..a..aa
+//a..a..a. /a..a..a.
+//a..a..a/ /a..a..a
+//a..a...a /a..a...a
+//a..a.... /a..a....
+//a..a.../ /a..a...
+//a..a../a /a..a../a
+//a..a../. /a..a..
+//a..a..// /a..a..
+//a..a./aa /a..a./aa
+//a..a./a. /a..a./a.
+//a..a./a/ /a..a./a
+//a..a./.a /a..a./.a
+//a..a./.. /
+//a..a././ /a..a.
+//a..a.//a /a..a./a
+//a..a.//. /a..a.
+//a..a./// /a..a.
+//a..a/aaa /a..a/aaa
+//a..a/aa. /a..a/aa.
+//a..a/aa/ /a..a/aa
+//a..a/a.a /a..a/a.a
+//a..a/a.. /a..a/a..
+//a..a/a./ /a..a/a.
+//a..a/a/a /a..a/a/a
+//a..a/a/. /a..a/a
+//a..a/a// /a..a/a
+//a..a/.aa /a..a/.aa
+//a..a/.a. /a..a/.a.
+//a..a/.a/ /a..a/.a
+//a..a/..a /a..a/..a
+//a..a/... /a..a/...
+//a..a/../ /
+//a..a/./a /a..a/a
+//a..a/./. /a..a
+//a..a/.// /a..a
+//a..a//aa /a..a/aa
+//a..a//a. /a..a/a.
+//a..a//a/ /a..a/a
+//a..a//.a /a..a/.a
+//a..a//.. /
+//a..a//./ /a..a
+//a..a///a /a..a/a
+//a..a///. /a..a
+//a..a//// /a..a
+//a...aaaa /a...aaaa
+//a...aaa. /a...aaa.
+//a...aaa/ /a...aaa
+//a...aa.a /a...aa.a
+//a...aa.. /a...aa..
+//a...aa./ /a...aa.
+//a...aa/a /a...aa/a
+//a...aa/. /a...aa
+//a...aa// /a...aa
+//a...a.aa /a...a.aa
+//a...a.a. /a...a.a.
+//a...a.a/ /a...a.a
+//a...a..a /a...a..a
+//a...a... /a...a...
+//a...a../ /a...a..
+//a...a./a /a...a./a
+//a...a./. /a...a.
+//a...a.// /a...a.
+//a...a/aa /a...a/aa
+//a...a/a. /a...a/a.
+//a...a/a/ /a...a/a
+//a...a/.a /a...a/.a
+//a...a/.. /
+//a...a/./ /a...a
+//a...a//a /a...a/a
+//a...a//. /a...a
+//a...a/// /a...a
+//a....aaa /a....aaa
+//a....aa. /a....aa.
+//a....aa/ /a....aa
+//a....a.a /a....a.a
+//a....a.. /a....a..
+//a....a./ /a....a.
+//a....a/a /a....a/a
+//a....a/. /a....a
+//a....a// /a....a
+//a.....aa /a.....aa
+//a.....a. /a.....a.
+//a.....a/ /a.....a
+//a......a /a......a
+//a....... /a.......
+//a....../ /a......
+//a...../a /a...../a
+//a...../. /a.....
+//a.....// /a.....
+//a..../aa /a..../aa
+//a..../a. /a..../a.
+//a..../a/ /a..../a
+//a..../.a /a..../.a
+//a..../.. /
+//a...././ /a....
+//a....//a /a..../a
+//a....//. /a....
+//a..../// /a....
+//a.../aaa /a.../aaa
+//a.../aa. /a.../aa.
+//a.../aa/ /a.../aa
+//a.../a.a /a.../a.a
+//a.../a.. /a.../a..
+//a.../a./ /a.../a.
+//a.../a/a /a.../a/a
+//a.../a/. /a.../a
+//a.../a// /a.../a
+//a.../.aa /a.../.aa
+//a.../.a. /a.../.a.
+//a.../.a/ /a.../.a
+//a.../..a /a.../..a
+//a.../... /a.../...
+//a.../../ /
+//a..././a /a.../a
+//a..././. /a...
+//a.../.// /a...
+//a...//aa /a.../aa
+//a...//a. /a.../a.
+//a...//a/ /a.../a
+//a...//.a /a.../.a
+//a...//.. /
+//a...//./ /a...
+//a...///a /a.../a
+//a...///. /a...
+//a...//// /a...
+//a../aaaa /a../aaaa
+//a../aaa. /a../aaa.
+//a../aaa/ /a../aaa
+//a../aa.a /a../aa.a
+//a../aa.. /a../aa..
+//a../aa./ /a../aa.
+//a../aa/a /a../aa/a
+//a../aa/. /a../aa
+//a../aa// /a../aa
+//a../a.aa /a../a.aa
+//a../a.a. /a../a.a.
+//a../a.a/ /a../a.a
+//a../a..a /a../a..a
+//a../a... /a../a...
+//a../a../ /a../a..
+//a../a./a /a../a./a
+//a../a./. /a../a.
+//a../a.// /a../a.
+//a../a/aa /a../a/aa
+//a../a/a. /a../a/a.
+//a../a/a/ /a../a/a
+//a../a/.a /a../a/.a
+//a../a/.. /a..
+//a../a/./ /a../a
+//a../a//a /a../a/a
+//a../a//. /a../a
+//a../a/// /a../a
+//a../.aaa /a../.aaa
+//a../.aa. /a../.aa.
+//a../.aa/ /a../.aa
+//a../.a.a /a../.a.a
+//a../.a.. /a../.a..
+//a../.a./ /a../.a.
+//a../.a/a /a../.a/a
+//a../.a/. /a../.a
+//a../.a// /a../.a
+//a../..aa /a../..aa
+//a../..a. /a../..a.
+//a../..a/ /a../..a
+//a../...a /a../...a
+//a../.... /a../....
+//a../.../ /a../...
+//a../../a /a
+//a../../. /
+//a../..// /
+//a.././aa /a../aa
+//a.././a. /a../a.
+//a.././a/ /a../a
+//a.././.a /a../.a
+//a.././.. /
+//a../././ /a..
+//a.././/a /a../a
+//a.././/. /a..
+//a.././// /a..
+//a..//aaa /a../aaa
+//a..//aa. /a../aa.
+//a..//aa/ /a../aa
+//a..//a.a /a../a.a
+//a..//a.. /a../a..
+//a..//a./ /a../a.
+//a..//a/a /a../a/a
+//a..//a/. /a../a
+//a..//a// /a../a
+//a..//.aa /a../.aa
+//a..//.a. /a../.a.
+//a..//.a/ /a../.a
+//a..//..a /a../..a
+//a..//... /a../...
+//a..//../ /
+//a..//./a /a../a
+//a..//./. /a..
+//a..//.// /a..
+//a..///aa /a../aa
+//a..///a. /a../a.
+//a..///a/ /a../a
+//a..///.a /a../.a
+//a..///.. /
+//a..///./ /a..
+//a..////a /a../a
+//a..////. /a..
+//a..///// /a..
+//a./aaaaa /a./aaaaa
+//a./aaaa. /a./aaaa.
+//a./aaaa/ /a./aaaa
+//a./aaa.a /a./aaa.a
+//a./aaa.. /a./aaa..
+//a./aaa./ /a./aaa.
+//a./aaa/a /a./aaa/a
+//a./aaa/. /a./aaa
+//a./aaa// /a./aaa
+//a./aa.aa /a./aa.aa
+//a./aa.a. /a./aa.a.
+//a./aa.a/ /a./aa.a
+//a./aa..a /a./aa..a
+//a./aa... /a./aa...
+//a./aa../ /a./aa..
+//a./aa./a /a./aa./a
+//a./aa./. /a./aa.
+//a./aa.// /a./aa.
+//a./aa/aa /a./aa/aa
+//a./aa/a. /a./aa/a.
+//a./aa/a/ /a./aa/a
+//a./aa/.a /a./aa/.a
+//a./aa/.. /a.
+//a./aa/./ /a./aa
+//a./aa//a /a./aa/a
+//a./aa//. /a./aa
+//a./aa/// /a./aa
+//a./a.aaa /a./a.aaa
+//a./a.aa. /a./a.aa.
+//a./a.aa/ /a./a.aa
+//a./a.a.a /a./a.a.a
+//a./a.a.. /a./a.a..
+//a./a.a./ /a./a.a.
+//a./a.a/a /a./a.a/a
+//a./a.a/. /a./a.a
+//a./a.a// /a./a.a
+//a./a..aa /a./a..aa
+//a./a..a. /a./a..a.
+//a./a..a/ /a./a..a
+//a./a...a /a./a...a
+//a./a.... /a./a....
+//a./a.../ /a./a...
+//a./a../a /a./a../a
+//a./a../. /a./a..
+//a./a..// /a./a..
+//a./a./aa /a./a./aa
+//a./a./a. /a./a./a.
+//a./a./a/ /a./a./a
+//a./a./.a /a./a./.a
+//a./a./.. /a.
+//a./a././ /a./a.
+//a./a.//a /a./a./a
+//a./a.//. /a./a.
+//a./a./// /a./a.
+//a./a/aaa /a./a/aaa
+//a./a/aa. /a./a/aa.
+//a./a/aa/ /a./a/aa
+//a./a/a.a /a./a/a.a
+//a./a/a.. /a./a/a..
+//a./a/a./ /a./a/a.
+//a./a/a/a /a./a/a/a
+//a./a/a/. /a./a/a
+//a./a/a// /a./a/a
+//a./a/.aa /a./a/.aa
+//a./a/.a. /a./a/.a.
+//a./a/.a/ /a./a/.a
+//a./a/..a /a./a/..a
+//a./a/... /a./a/...
+//a./a/../ /a.
+//a./a/./a /a./a/a
+//a./a/./. /a./a
+//a./a/.// /a./a
+//a./a//aa /a./a/aa
+//a./a//a. /a./a/a.
+//a./a//a/ /a./a/a
+//a./a//.a /a./a/.a
+//a./a//.. /a.
+//a./a//./ /a./a
+//a./a///a /a./a/a
+//a./a///. /a./a
+//a./a//// /a./a
+//a./.aaaa /a./.aaaa
+//a./.aaa. /a./.aaa.
+//a./.aaa/ /a./.aaa
+//a./.aa.a /a./.aa.a
+//a./.aa.. /a./.aa..
+//a./.aa./ /a./.aa.
+//a./.aa/a /a./.aa/a
+//a./.aa/. /a./.aa
+//a./.aa// /a./.aa
+//a./.a.aa /a./.a.aa
+//a./.a.a. /a./.a.a.
+//a./.a.a/ /a./.a.a
+//a./.a..a /a./.a..a
+//a./.a... /a./.a...
+//a./.a../ /a./.a..
+//a./.a./a /a./.a./a
+//a./.a./. /a./.a.
+//a./.a.// /a./.a.
+//a./.a/aa /a./.a/aa
+//a./.a/a. /a./.a/a.
+//a./.a/a/ /a./.a/a
+//a./.a/.a /a./.a/.a
+//a./.a/.. /a.
+//a./.a/./ /a./.a
+//a./.a//a /a./.a/a
+//a./.a//. /a./.a
+//a./.a/// /a./.a
+//a./..aaa /a./..aaa
+//a./..aa. /a./..aa.
+//a./..aa/ /a./..aa
+//a./..a.a /a./..a.a
+//a./..a.. /a./..a..
+//a./..a./ /a./..a.
+//a./..a/a /a./..a/a
+//a./..a/. /a./..a
+//a./..a// /a./..a
+//a./...aa /a./...aa
+//a./...a. /a./...a.
+//a./...a/ /a./...a
+//a./....a /a./....a
+//a./..... /a./.....
+//a./..../ /a./....
+//a./.../a /a./.../a
+//a./.../. /a./...
+//a./...// /a./...
+//a./../aa /aa
+//a./../a. /a.
+//a./../a/ /a
+//a./../.a /.a
+//a./../.. /
+//a./.././ /
+//a./..//a /a
+//a./..//. /
+//a./../// /
+//a././aaa /a./aaa
+//a././aa. /a./aa.
+//a././aa/ /a./aa
+//a././a.a /a./a.a
+//a././a.. /a./a..
+//a././a./ /a./a.
+//a././a/a /a./a/a
+//a././a/. /a./a
+//a././a// /a./a
+//a././.aa /a./.aa
+//a././.a. /a./.a.
+//a././.a/ /a./.a
+//a././..a /a./..a
+//a././... /a./...
+//a././../ /
+//a./././a /a./a
+//a./././. /a.
+//a././.// /a.
+//a././/aa /a./aa
+//a././/a. /a./a.
+//a././/a/ /a./a
+//a././/.a /a./.a
+//a././/.. /
+//a././/./ /a.
+//a././//a /a./a
+//a././//. /a.
+//a././/// /a.
+//a.//aaaa /a./aaaa
+//a.//aaa. /a./aaa.
+//a.//aaa/ /a./aaa
+//a.//aa.a /a./aa.a
+//a.//aa.. /a./aa..
+//a.//aa./ /a./aa.
+//a.//aa/a /a./aa/a
+//a.//aa/. /a./aa
+//a.//aa// /a./aa
+//a.//a.aa /a./a.aa
+//a.//a.a. /a./a.a.
+//a.//a.a/ /a./a.a
+//a.//a..a /a./a..a
+//a.//a... /a./a...
+//a.//a../ /a./a..
+//a.//a./a /a./a./a
+//a.//a./. /a./a.
+//a.//a.// /a./a.
+//a.//a/aa /a./a/aa
+//a.//a/a. /a./a/a.
+//a.//a/a/ /a./a/a
+//a.//a/.a /a./a/.a
+//a.//a/.. /a.
+//a.//a/./ /a./a
+//a.//a//a /a./a/a
+//a.//a//. /a./a
+//a.//a/// /a./a
+//a.//.aaa /a./.aaa
+//a.//.aa. /a./.aa.
+//a.//.aa/ /a./.aa
+//a.//.a.a /a./.a.a
+//a.//.a.. /a./.a..
+//a.//.a./ /a./.a.
+//a.//.a/a /a./.a/a
+//a.//.a/. /a./.a
+//a.//.a// /a./.a
+//a.//..aa /a./..aa
+//a.//..a. /a./..a.
+//a.//..a/ /a./..a
+//a.//...a /a./...a
+//a.//.... /a./....
+//a.//.../ /a./...
+//a.//../a /a
+//a.//../. /
+//a.//..// /
+//a.//./aa /a./aa
+//a.//./a. /a./a.
+//a.//./a/ /a./a
+//a.//./.a /a./.a
+//a.//./.. /
+//a.//././ /a.
+//a.//.//a /a./a
+//a.//.//. /a.
+//a.//./// /a.
+//a.///aaa /a./aaa
+//a.///aa. /a./aa.
+//a.///aa/ /a./aa
+//a.///a.a /a./a.a
+//a.///a.. /a./a..
+//a.///a./ /a./a.
+//a.///a/a /a./a/a
+//a.///a/. /a./a
+//a.///a// /a./a
+//a.///.aa /a./.aa
+//a.///.a. /a./.a.
+//a.///.a/ /a./.a
+//a.///..a /a./..a
+//a.///... /a./...
+//a.///../ /
+//a.///./a /a./a
+//a.///./. /a.
+//a.///.// /a.
+//a.////aa /a./aa
+//a.////a. /a./a.
+//a.////a/ /a./a
+//a.////.a /a./.a
+//a.////.. /
+//a.////./ /a.
+//a./////a /a./a
+//a./////. /a.
+//a.////// /a.
+//a/aaaaaa /a/aaaaaa
+//a/aaaaa. /a/aaaaa.
+//a/aaaaa/ /a/aaaaa
+//a/aaaa.a /a/aaaa.a
+//a/aaaa.. /a/aaaa..
+//a/aaaa./ /a/aaaa.
+//a/aaaa/a /a/aaaa/a
+//a/aaaa/. /a/aaaa
+//a/aaaa// /a/aaaa
+//a/aaa.aa /a/aaa.aa
+//a/aaa.a. /a/aaa.a.
+//a/aaa.a/ /a/aaa.a
+//a/aaa..a /a/aaa..a
+//a/aaa... /a/aaa...
+//a/aaa../ /a/aaa..
+//a/aaa./a /a/aaa./a
+//a/aaa./. /a/aaa.
+//a/aaa.// /a/aaa.
+//a/aaa/aa /a/aaa/aa
+//a/aaa/a. /a/aaa/a.
+//a/aaa/a/ /a/aaa/a
+//a/aaa/.a /a/aaa/.a
+//a/aaa/.. /a
+//a/aaa/./ /a/aaa
+//a/aaa//a /a/aaa/a
+//a/aaa//. /a/aaa
+//a/aaa/// /a/aaa
+//a/aa.aaa /a/aa.aaa
+//a/aa.aa. /a/aa.aa.
+//a/aa.aa/ /a/aa.aa
+//a/aa.a.a /a/aa.a.a
+//a/aa.a.. /a/aa.a..
+//a/aa.a./ /a/aa.a.
+//a/aa.a/a /a/aa.a/a
+//a/aa.a/. /a/aa.a
+//a/aa.a// /a/aa.a
+//a/aa..aa /a/aa..aa
+//a/aa..a. /a/aa..a.
+//a/aa..a/ /a/aa..a
+//a/aa...a /a/aa...a
+//a/aa.... /a/aa....
+//a/aa.../ /a/aa...
+//a/aa../a /a/aa../a
+//a/aa../. /a/aa..
+//a/aa..// /a/aa..
+//a/aa./aa /a/aa./aa
+//a/aa./a. /a/aa./a.
+//a/aa./a/ /a/aa./a
+//a/aa./.a /a/aa./.a
+//a/aa./.. /a
+//a/aa././ /a/aa.
+//a/aa.//a /a/aa./a
+//a/aa.//. /a/aa.
+//a/aa./// /a/aa.
+//a/aa/aaa /a/aa/aaa
+//a/aa/aa. /a/aa/aa.
+//a/aa/aa/ /a/aa/aa
+//a/aa/a.a /a/aa/a.a
+//a/aa/a.. /a/aa/a..
+//a/aa/a./ /a/aa/a.
+//a/aa/a/a /a/aa/a/a
+//a/aa/a/. /a/aa/a
+//a/aa/a// /a/aa/a
+//a/aa/.aa /a/aa/.aa
+//a/aa/.a. /a/aa/.a.
+//a/aa/.a/ /a/aa/.a
+//a/aa/..a /a/aa/..a
+//a/aa/... /a/aa/...
+//a/aa/../ /a
+//a/aa/./a /a/aa/a
+//a/aa/./. /a/aa
+//a/aa/.// /a/aa
+//a/aa//aa /a/aa/aa
+//a/aa//a. /a/aa/a.
+//a/aa//a/ /a/aa/a
+//a/aa//.a /a/aa/.a
+//a/aa//.. /a
+//a/aa//./ /a/aa
+//a/aa///a /a/aa/a
+//a/aa///. /a/aa
+//a/aa//// /a/aa
+//a/a.aaaa /a/a.aaaa
+//a/a.aaa. /a/a.aaa.
+//a/a.aaa/ /a/a.aaa
+//a/a.aa.a /a/a.aa.a
+//a/a.aa.. /a/a.aa..
+//a/a.aa./ /a/a.aa.
+//a/a.aa/a /a/a.aa/a
+//a/a.aa/. /a/a.aa
+//a/a.aa// /a/a.aa
+//a/a.a.aa /a/a.a.aa
+//a/a.a.a. /a/a.a.a.
+//a/a.a.a/ /a/a.a.a
+//a/a.a..a /a/a.a..a
+//a/a.a... /a/a.a...
+//a/a.a../ /a/a.a..
+//a/a.a./a /a/a.a./a
+//a/a.a./. /a/a.a.
+//a/a.a.// /a/a.a.
+//a/a.a/aa /a/a.a/aa
+//a/a.a/a. /a/a.a/a.
+//a/a.a/a/ /a/a.a/a
+//a/a.a/.a /a/a.a/.a
+//a/a.a/.. /a
+//a/a.a/./ /a/a.a
+//a/a.a//a /a/a.a/a
+//a/a.a//. /a/a.a
+//a/a.a/// /a/a.a
+//a/a..aaa /a/a..aaa
+//a/a..aa. /a/a..aa.
+//a/a..aa/ /a/a..aa
+//a/a..a.a /a/a..a.a
+//a/a..a.. /a/a..a..
+//a/a..a./ /a/a..a.
+//a/a..a/a /a/a..a/a
+//a/a..a/. /a/a..a
+//a/a..a// /a/a..a
+//a/a...aa /a/a...aa
+//a/a...a. /a/a...a.
+//a/a...a/ /a/a...a
+//a/a....a /a/a....a
+//a/a..... /a/a.....
+//a/a..../ /a/a....
+//a/a.../a /a/a.../a
+//a/a.../. /a/a...
+//a/a...// /a/a...
+//a/a../aa /a/a../aa
+//a/a../a. /a/a../a.
+//a/a../a/ /a/a../a
+//a/a../.a /a/a../.a
+//a/a../.. /a
+//a/a.././ /a/a..
+//a/a..//a /a/a../a
+//a/a..//. /a/a..
+//a/a../// /a/a..
+//a/a./aaa /a/a./aaa
+//a/a./aa. /a/a./aa.
+//a/a./aa/ /a/a./aa
+//a/a./a.a /a/a./a.a
+//a/a./a.. /a/a./a..
+//a/a./a./ /a/a./a.
+//a/a./a/a /a/a./a/a
+//a/a./a/. /a/a./a
+//a/a./a// /a/a./a
+//a/a./.aa /a/a./.aa
+//a/a./.a. /a/a./.a.
+//a/a./.a/ /a/a./.a
+//a/a./..a /a/a./..a
+//a/a./... /a/a./...
+//a/a./../ /a
+//a/a././a /a/a./a
+//a/a././. /a/a.
+//a/a./.// /a/a.
+//a/a.//aa /a/a./aa
+//a/a.//a. /a/a./a.
+//a/a.//a/ /a/a./a
+//a/a.//.a /a/a./.a
+//a/a.//.. /a
+//a/a.//./ /a/a.
+//a/a.///a /a/a./a
+//a/a.///. /a/a.
+//a/a.//// /a/a.
+//a/a/aaaa /a/a/aaaa
+//a/a/aaa. /a/a/aaa.
+//a/a/aaa/ /a/a/aaa
+//a/a/aa.a /a/a/aa.a
+//a/a/aa.. /a/a/aa..
+//a/a/aa./ /a/a/aa.
+//a/a/aa/a /a/a/aa/a
+//a/a/aa/. /a/a/aa
+//a/a/aa// /a/a/aa
+//a/a/a.aa /a/a/a.aa
+//a/a/a.a. /a/a/a.a.
+//a/a/a.a/ /a/a/a.a
+//a/a/a..a /a/a/a..a
+//a/a/a... /a/a/a...
+//a/a/a../ /a/a/a..
+//a/a/a./a /a/a/a./a
+//a/a/a./. /a/a/a.
+//a/a/a.// /a/a/a.
+//a/a/a/aa /a/a/a/aa
+//a/a/a/a. /a/a/a/a.
+//a/a/a/a/ /a/a/a/a
+//a/a/a/.a /a/a/a/.a
+//a/a/a/.. /a/a
+//a/a/a/./ /a/a/a
+//a/a/a//a /a/a/a/a
+//a/a/a//. /a/a/a
+//a/a/a/// /a/a/a
+//a/a/.aaa /a/a/.aaa
+//a/a/.aa. /a/a/.aa.
+//a/a/.aa/ /a/a/.aa
+//a/a/.a.a /a/a/.a.a
+//a/a/.a.. /a/a/.a..
+//a/a/.a./ /a/a/.a.
+//a/a/.a/a /a/a/.a/a
+//a/a/.a/. /a/a/.a
+//a/a/.a// /a/a/.a
+//a/a/..aa /a/a/..aa
+//a/a/..a. /a/a/..a.
+//a/a/..a/ /a/a/..a
+//a/a/...a /a/a/...a
+//a/a/.... /a/a/....
+//a/a/.../ /a/a/...
+//a/a/../a /a/a
+//a/a/../. /a
+//a/a/..// /a
+//a/a/./aa /a/a/aa
+//a/a/./a. /a/a/a.
+//a/a/./a/ /a/a/a
+//a/a/./.a /a/a/.a
+//a/a/./.. /a
+//a/a/././ /a/a
+//a/a/.//a /a/a/a
+//a/a/.//. /a/a
+//a/a/./// /a/a
+//a/a//aaa /a/a/aaa
+//a/a//aa. /a/a/aa.
+//a/a//aa/ /a/a/aa
+//a/a//a.a /a/a/a.a
+//a/a//a.. /a/a/a..
+//a/a//a./ /a/a/a.
+//a/a//a/a /a/a/a/a
+//a/a//a/. /a/a/a
+//a/a//a// /a/a/a
+//a/a//.aa /a/a/.aa
+//a/a//.a. /a/a/.a.
+//a/a//.a/ /a/a/.a
+//a/a//..a /a/a/..a
+//a/a//... /a/a/...
+//a/a//../ /a
+//a/a//./a /a/a/a
+//a/a//./. /a/a
+//a/a//.// /a/a
+//a/a///aa /a/a/aa
+//a/a///a. /a/a/a.
+//a/a///a/ /a/a/a
+//a/a///.a /a/a/.a
+//a/a///.. /a
+//a/a///./ /a/a
+//a/a////a /a/a/a
+//a/a////. /a/a
+//a/a///// /a/a
+//a/.aaaaa /a/.aaaaa
+//a/.aaaa. /a/.aaaa.
+//a/.aaaa/ /a/.aaaa
+//a/.aaa.a /a/.aaa.a
+//a/.aaa.. /a/.aaa..
+//a/.aaa./ /a/.aaa.
+//a/.aaa/a /a/.aaa/a
+//a/.aaa/. /a/.aaa
+//a/.aaa// /a/.aaa
+//a/.aa.aa /a/.aa.aa
+//a/.aa.a. /a/.aa.a.
+//a/.aa.a/ /a/.aa.a
+//a/.aa..a /a/.aa..a
+//a/.aa... /a/.aa...
+//a/.aa../ /a/.aa..
+//a/.aa./a /a/.aa./a
+//a/.aa./. /a/.aa.
+//a/.aa.// /a/.aa.
+//a/.aa/aa /a/.aa/aa
+//a/.aa/a. /a/.aa/a.
+//a/.aa/a/ /a/.aa/a
+//a/.aa/.a /a/.aa/.a
+//a/.aa/.. /a
+//a/.aa/./ /a/.aa
+//a/.aa//a /a/.aa/a
+//a/.aa//. /a/.aa
+//a/.aa/// /a/.aa
+//a/.a.aaa /a/.a.aaa
+//a/.a.aa. /a/.a.aa.
+//a/.a.aa/ /a/.a.aa
+//a/.a.a.a /a/.a.a.a
+//a/.a.a.. /a/.a.a..
+//a/.a.a./ /a/.a.a.
+//a/.a.a/a /a/.a.a/a
+//a/.a.a/. /a/.a.a
+//a/.a.a// /a/.a.a
+//a/.a..aa /a/.a..aa
+//a/.a..a. /a/.a..a.
+//a/.a..a/ /a/.a..a
+//a/.a...a /a/.a...a
+//a/.a.... /a/.a....
+//a/.a.../ /a/.a...
+//a/.a../a /a/.a../a
+//a/.a../. /a/.a..
+//a/.a..// /a/.a..
+//a/.a./aa /a/.a./aa
+//a/.a./a. /a/.a./a.
+//a/.a./a/ /a/.a./a
+//a/.a./.a /a/.a./.a
+//a/.a./.. /a
+//a/.a././ /a/.a.
+//a/.a.//a /a/.a./a
+//a/.a.//. /a/.a.
+//a/.a./// /a/.a.
+//a/.a/aaa /a/.a/aaa
+//a/.a/aa. /a/.a/aa.
+//a/.a/aa/ /a/.a/aa
+//a/.a/a.a /a/.a/a.a
+//a/.a/a.. /a/.a/a..
+//a/.a/a./ /a/.a/a.
+//a/.a/a/a /a/.a/a/a
+//a/.a/a/. /a/.a/a
+//a/.a/a// /a/.a/a
+//a/.a/.aa /a/.a/.aa
+//a/.a/.a. /a/.a/.a.
+//a/.a/.a/ /a/.a/.a
+//a/.a/..a /a/.a/..a
+//a/.a/... /a/.a/...
+//a/.a/../ /a
+//a/.a/./a /a/.a/a
+//a/.a/./. /a/.a
+//a/.a/.// /a/.a
+//a/.a//aa /a/.a/aa
+//a/.a//a. /a/.a/a.
+//a/.a//a/ /a/.a/a
+//a/.a//.a /a/.a/.a
+//a/.a//.. /a
+//a/.a//./ /a/.a
+//a/.a///a /a/.a/a
+//a/.a///. /a/.a
+//a/.a//// /a/.a
+//a/..aaaa /a/..aaaa
+//a/..aaa. /a/..aaa.
+//a/..aaa/ /a/..aaa
+//a/..aa.a /a/..aa.a
+//a/..aa.. /a/..aa..
+//a/..aa./ /a/..aa.
+//a/..aa/a /a/..aa/a
+//a/..aa/. /a/..aa
+//a/..aa// /a/..aa
+//a/..a.aa /a/..a.aa
+//a/..a.a. /a/..a.a.
+//a/..a.a/ /a/..a.a
+//a/..a..a /a/..a..a
+//a/..a... /a/..a...
+//a/..a../ /a/..a..
+//a/..a./a /a/..a./a
+//a/..a./. /a/..a.
+//a/..a.// /a/..a.
+//a/..a/aa /a/..a/aa
+//a/..a/a. /a/..a/a.
+//a/..a/a/ /a/..a/a
+//a/..a/.a /a/..a/.a
+//a/..a/.. /a
+//a/..a/./ /a/..a
+//a/..a//a /a/..a/a
+//a/..a//. /a/..a
+//a/..a/// /a/..a
+//a/...aaa /a/...aaa
+//a/...aa. /a/...aa.
+//a/...aa/ /a/...aa
+//a/...a.a /a/...a.a
+//a/...a.. /a/...a..
+//a/...a./ /a/...a.
+//a/...a/a /a/...a/a
+//a/...a/. /a/...a
+//a/...a// /a/...a
+//a/....aa /a/....aa
+//a/....a. /a/....a.
+//a/....a/ /a/....a
+//a/.....a /a/.....a
+//a/...... /a/......
+//a/...../ /a/.....
+//a/..../a /a/..../a
+//a/..../. /a/....
+//a/....// /a/....
+//a/.../aa /a/.../aa
+//a/.../a. /a/.../a.
+//a/.../a/ /a/.../a
+//a/.../.a /a/.../.a
+//a/.../.. /a
+//a/..././ /a/...
+//a/...//a /a/.../a
+//a/...//. /a/...
+//a/.../// /a/...
+//a/../aaa /aaa
+//a/../aa. /aa.
+//a/../aa/ /aa
+//a/../a.a /a.a
+//a/../a.. /a..
+//a/../a./ /a.
+//a/../a/a /a/a
+//a/../a/. /a
+//a/../a// /a
+//a/../.aa /.aa
+//a/../.a. /.a.
+//a/../.a/ /.a
+//a/../..a /..a
+//a/../... /...
+//a/../../ /
+//a/.././a /a
+//a/.././. /
+//a/../.// /
+//a/..//aa /aa
+//a/..//a. /a.
+//a/..//a/ /a
+//a/..//.a /.a
+//a/..//.. /
+//a/..//./ /
+//a/..///a /a
+//a/..///. /
+//a/..//// /
+//a/./aaaa /a/aaaa
+//a/./aaa. /a/aaa.
+//a/./aaa/ /a/aaa
+//a/./aa.a /a/aa.a
+//a/./aa.. /a/aa..
+//a/./aa./ /a/aa.
+//a/./aa/a /a/aa/a
+//a/./aa/. /a/aa
+//a/./aa// /a/aa
+//a/./a.aa /a/a.aa
+//a/./a.a. /a/a.a.
+//a/./a.a/ /a/a.a
+//a/./a..a /a/a..a
+//a/./a... /a/a...
+//a/./a../ /a/a..
+//a/./a./a /a/a./a
+//a/./a./. /a/a.
+//a/./a.// /a/a.
+//a/./a/aa /a/a/aa
+//a/./a/a. /a/a/a.
+//a/./a/a/ /a/a/a
+//a/./a/.a /a/a/.a
+//a/./a/.. /a
+//a/./a/./ /a/a
+//a/./a//a /a/a/a
+//a/./a//. /a/a
+//a/./a/// /a/a
+//a/./.aaa /a/.aaa
+//a/./.aa. /a/.aa.
+//a/./.aa/ /a/.aa
+//a/./.a.a /a/.a.a
+//a/./.a.. /a/.a..
+//a/./.a./ /a/.a.
+//a/./.a/a /a/.a/a
+//a/./.a/. /a/.a
+//a/./.a// /a/.a
+//a/./..aa /a/..aa
+//a/./..a. /a/..a.
+//a/./..a/ /a/..a
+//a/./...a /a/...a
+//a/./.... /a/....
+//a/./.../ /a/...
+//a/./../a /a
+//a/./../. /
+//a/./..// /
+//a/././aa /a/aa
+//a/././a. /a/a.
+//a/././a/ /a/a
+//a/././.a /a/.a
+//a/././.. /
+//a/./././ /a
+//a/././/a /a/a
+//a/././/. /a
+//a/././// /a
+//a/.//aaa /a/aaa
+//a/.//aa. /a/aa.
+//a/.//aa/ /a/aa
+//a/.//a.a /a/a.a
+//a/.//a.. /a/a..
+//a/.//a./ /a/a.
+//a/.//a/a /a/a/a
+//a/.//a/. /a/a
+//a/.//a// /a/a
+//a/.//.aa /a/.aa
+//a/.//.a. /a/.a.
+//a/.//.a/ /a/.a
+//a/.//..a /a/..a
+//a/.//... /a/...
+//a/.//../ /
+//a/.//./a /a/a
+//a/.//./. /a
+//a/.//.// /a
+//a/.///aa /a/aa
+//a/.///a. /a/a.
+//a/.///a/ /a/a
+//a/.///.a /a/.a
+//a/.///.. /
+//a/.///./ /a
+//a/.////a /a/a
+//a/.////. /a
+//a/.///// /a
+//a//aaaaa /a/aaaaa
+//a//aaaa. /a/aaaa.
+//a//aaaa/ /a/aaaa
+//a//aaa.a /a/aaa.a
+//a//aaa.. /a/aaa..
+//a//aaa./ /a/aaa.
+//a//aaa/a /a/aaa/a
+//a//aaa/. /a/aaa
+//a//aaa// /a/aaa
+//a//aa.aa /a/aa.aa
+//a//aa.a. /a/aa.a.
+//a//aa.a/ /a/aa.a
+//a//aa..a /a/aa..a
+//a//aa... /a/aa...
+//a//aa../ /a/aa..
+//a//aa./a /a/aa./a
+//a//aa./. /a/aa.
+//a//aa.// /a/aa.
+//a//aa/aa /a/aa/aa
+//a//aa/a. /a/aa/a.
+//a//aa/a/ /a/aa/a
+//a//aa/.a /a/aa/.a
+//a//aa/.. /a
+//a//aa/./ /a/aa
+//a//aa//a /a/aa/a
+//a//aa//. /a/aa
+//a//aa/// /a/aa
+//a//a.aaa /a/a.aaa
+//a//a.aa. /a/a.aa.
+//a//a.aa/ /a/a.aa
+//a//a.a.a /a/a.a.a
+//a//a.a.. /a/a.a..
+//a//a.a./ /a/a.a.
+//a//a.a/a /a/a.a/a
+//a//a.a/. /a/a.a
+//a//a.a// /a/a.a
+//a//a..aa /a/a..aa
+//a//a..a. /a/a..a.
+//a//a..a/ /a/a..a
+//a//a...a /a/a...a
+//a//a.... /a/a....
+//a//a.../ /a/a...
+//a//a../a /a/a../a
+//a//a../. /a/a..
+//a//a..// /a/a..
+//a//a./aa /a/a./aa
+//a//a./a. /a/a./a.
+//a//a./a/ /a/a./a
+//a//a./.a /a/a./.a
+//a//a./.. /a
+//a//a././ /a/a.
+//a//a.//a /a/a./a
+//a//a.//. /a/a.
+//a//a./// /a/a.
+//a//a/aaa /a/a/aaa
+//a//a/aa. /a/a/aa.
+//a//a/aa/ /a/a/aa
+//a//a/a.a /a/a/a.a
+//a//a/a.. /a/a/a..
+//a//a/a./ /a/a/a.
+//a//a/a/a /a/a/a/a
+//a//a/a/. /a/a/a
+//a//a/a// /a/a/a
+//a//a/.aa /a/a/.aa
+//a//a/.a. /a/a/.a.
+//a//a/.a/ /a/a/.a
+//a//a/..a /a/a/..a
+//a//a/... /a/a/...
+//a//a/../ /a
+//a//a/./a /a/a/a
+//a//a/./. /a/a
+//a//a/.// /a/a
+//a//a//aa /a/a/aa
+//a//a//a. /a/a/a.
+//a//a//a/ /a/a/a
+//a//a//.a /a/a/.a
+//a//a//.. /a
+//a//a//./ /a/a
+//a//a///a /a/a/a
+//a//a///. /a/a
+//a//a//// /a/a
+//a//.aaaa /a/.aaaa
+//a//.aaa. /a/.aaa.
+//a//.aaa/ /a/.aaa
+//a//.aa.a /a/.aa.a
+//a//.aa.. /a/.aa..
+//a//.aa./ /a/.aa.
+//a//.aa/a /a/.aa/a
+//a//.aa/. /a/.aa
+//a//.aa// /a/.aa
+//a//.a.aa /a/.a.aa
+//a//.a.a. /a/.a.a.
+//a//.a.a/ /a/.a.a
+//a//.a..a /a/.a..a
+//a//.a... /a/.a...
+//a//.a../ /a/.a..
+//a//.a./a /a/.a./a
+//a//.a./. /a/.a.
+//a//.a.// /a/.a.
+//a//.a/aa /a/.a/aa
+//a//.a/a. /a/.a/a.
+//a//.a/a/ /a/.a/a
+//a//.a/.a /a/.a/.a
+//a//.a/.. /a
+//a//.a/./ /a/.a
+//a//.a//a /a/.a/a
+//a//.a//. /a/.a
+//a//.a/// /a/.a
+//a//..aaa /a/..aaa
+//a//..aa. /a/..aa.
+//a//..aa/ /a/..aa
+//a//..a.a /a/..a.a
+//a//..a.. /a/..a..
+//a//..a./ /a/..a.
+//a//..a/a /a/..a/a
+//a//..a/. /a/..a
+//a//..a// /a/..a
+//a//...aa /a/...aa
+//a//...a. /a/...a.
+//a//...a/ /a/...a
+//a//....a /a/....a
+//a//..... /a/.....
+//a//..../ /a/....
+//a//.../a /a/.../a
+//a//.../. /a/...
+//a//...// /a/...
+//a//../aa /aa
+//a//../a. /a.
+//a//../a/ /a
+//a//../.a /.a
+//a//../.. /
+//a//.././ /
+//a//..//a /a
+//a//..//. /
+//a//../// /
+//a//./aaa /a/aaa
+//a//./aa. /a/aa.
+//a//./aa/ /a/aa
+//a//./a.a /a/a.a
+//a//./a.. /a/a..
+//a//./a./ /a/a.
+//a//./a/a /a/a/a
+//a//./a/. /a/a
+//a//./a// /a/a
+//a//./.aa /a/.aa
+//a//./.a. /a/.a.
+//a//./.a/ /a/.a
+//a//./..a /a/..a
+//a//./... /a/...
+//a//./../ /
+//a//././a /a/a
+//a//././. /a
+//a//./.// /a
+//a//.//aa /a/aa
+//a//.//a. /a/a.
+//a//.//a/ /a/a
+//a//.//.a /a/.a
+//a//.//.. /
+//a//.//./ /a
+//a//.///a /a/a
+//a//.///. /a
+//a//.//// /a
+//a///aaaa /a/aaaa
+//a///aaa. /a/aaa.
+//a///aaa/ /a/aaa
+//a///aa.a /a/aa.a
+//a///aa.. /a/aa..
+//a///aa./ /a/aa.
+//a///aa/a /a/aa/a
+//a///aa/. /a/aa
+//a///aa// /a/aa
+//a///a.aa /a/a.aa
+//a///a.a. /a/a.a.
+//a///a.a/ /a/a.a
+//a///a..a /a/a..a
+//a///a... /a/a...
+//a///a../ /a/a..
+//a///a./a /a/a./a
+//a///a./. /a/a.
+//a///a.// /a/a.
+//a///a/aa /a/a/aa
+//a///a/a. /a/a/a.
+//a///a/a/ /a/a/a
+//a///a/.a /a/a/.a
+//a///a/.. /a
+//a///a/./ /a/a
+//a///a//a /a/a/a
+//a///a//. /a/a
+//a///a/// /a/a
+//a///.aaa /a/.aaa
+//a///.aa. /a/.aa.
+//a///.aa/ /a/.aa
+//a///.a.a /a/.a.a
+//a///.a.. /a/.a..
+//a///.a./ /a/.a.
+//a///.a/a /a/.a/a
+//a///.a/. /a/.a
+//a///.a// /a/.a
+//a///..aa /a/..aa
+//a///..a. /a/..a.
+//a///..a/ /a/..a
+//a///...a /a/...a
+//a///.... /a/....
+//a///.../ /a/...
+//a///../a /a
+//a///../. /
+//a///..// /
+//a///./aa /a/aa
+//a///./a. /a/a.
+//a///./a/ /a/a
+//a///./.a /a/.a
+//a///./.. /
+//a///././ /a
+//a///.//a /a/a
+//a///.//. /a
+//a///./// /a
+//a////aaa /a/aaa
+//a////aa. /a/aa.
+//a////aa/ /a/aa
+//a////a.a /a/a.a
+//a////a.. /a/a..
+//a////a./ /a/a.
+//a////a/a /a/a/a
+//a////a/. /a/a
+//a////a// /a/a
+//a////.aa /a/.aa
+//a////.a. /a/.a.
+//a////.a/ /a/.a
+//a////..a /a/..a
+//a////... /a/...
+//a////../ /
+//a////./a /a/a
+//a////./. /a
+//a////.// /a
+//a/////aa /a/aa
+//a/////a. /a/a.
+//a/////a/ /a/a
+//a/////.a /a/.a
+//a/////.. /
+//a/////./ /a
+//a//////a /a/a
+//a//////. /a
+//a/////// /a
+//.aaaaaaa /.aaaaaaa
+//.aaaaaa. /.aaaaaa.
+//.aaaaaa/ /.aaaaaa
+//.aaaaa.a /.aaaaa.a
+//.aaaaa.. /.aaaaa..
+//.aaaaa./ /.aaaaa.
+//.aaaaa/a /.aaaaa/a
+//.aaaaa/. /.aaaaa
+//.aaaaa// /.aaaaa
+//.aaaa.aa /.aaaa.aa
+//.aaaa.a. /.aaaa.a.
+//.aaaa.a/ /.aaaa.a
+//.aaaa..a /.aaaa..a
+//.aaaa... /.aaaa...
+//.aaaa../ /.aaaa..
+//.aaaa./a /.aaaa./a
+//.aaaa./. /.aaaa.
+//.aaaa.// /.aaaa.
+//.aaaa/aa /.aaaa/aa
+//.aaaa/a. /.aaaa/a.
+//.aaaa/a/ /.aaaa/a
+//.aaaa/.a /.aaaa/.a
+//.aaaa/.. /
+//.aaaa/./ /.aaaa
+//.aaaa//a /.aaaa/a
+//.aaaa//. /.aaaa
+//.aaaa/// /.aaaa
+//.aaa.aaa /.aaa.aaa
+//.aaa.aa. /.aaa.aa.
+//.aaa.aa/ /.aaa.aa
+//.aaa.a.a /.aaa.a.a
+//.aaa.a.. /.aaa.a..
+//.aaa.a./ /.aaa.a.
+//.aaa.a/a /.aaa.a/a
+//.aaa.a/. /.aaa.a
+//.aaa.a// /.aaa.a
+//.aaa..aa /.aaa..aa
+//.aaa..a. /.aaa..a.
+//.aaa..a/ /.aaa..a
+//.aaa...a /.aaa...a
+//.aaa.... /.aaa....
+//.aaa.../ /.aaa...
+//.aaa../a /.aaa../a
+//.aaa../. /.aaa..
+//.aaa..// /.aaa..
+//.aaa./aa /.aaa./aa
+//.aaa./a. /.aaa./a.
+//.aaa./a/ /.aaa./a
+//.aaa./.a /.aaa./.a
+//.aaa./.. /
+//.aaa././ /.aaa.
+//.aaa.//a /.aaa./a
+//.aaa.//. /.aaa.
+//.aaa./// /.aaa.
+//.aaa/aaa /.aaa/aaa
+//.aaa/aa. /.aaa/aa.
+//.aaa/aa/ /.aaa/aa
+//.aaa/a.a /.aaa/a.a
+//.aaa/a.. /.aaa/a..
+//.aaa/a./ /.aaa/a.
+//.aaa/a/a /.aaa/a/a
+//.aaa/a/. /.aaa/a
+//.aaa/a// /.aaa/a
+//.aaa/.aa /.aaa/.aa
+//.aaa/.a. /.aaa/.a.
+//.aaa/.a/ /.aaa/.a
+//.aaa/..a /.aaa/..a
+//.aaa/... /.aaa/...
+//.aaa/../ /
+//.aaa/./a /.aaa/a
+//.aaa/./. /.aaa
+//.aaa/.// /.aaa
+//.aaa//aa /.aaa/aa
+//.aaa//a. /.aaa/a.
+//.aaa//a/ /.aaa/a
+//.aaa//.a /.aaa/.a
+//.aaa//.. /
+//.aaa//./ /.aaa
+//.aaa///a /.aaa/a
+//.aaa///. /.aaa
+//.aaa//// /.aaa
+//.aa.aaaa /.aa.aaaa
+//.aa.aaa. /.aa.aaa.
+//.aa.aaa/ /.aa.aaa
+//.aa.aa.a /.aa.aa.a
+//.aa.aa.. /.aa.aa..
+//.aa.aa./ /.aa.aa.
+//.aa.aa/a /.aa.aa/a
+//.aa.aa/. /.aa.aa
+//.aa.aa// /.aa.aa
+//.aa.a.aa /.aa.a.aa
+//.aa.a.a. /.aa.a.a.
+//.aa.a.a/ /.aa.a.a
+//.aa.a..a /.aa.a..a
+//.aa.a... /.aa.a...
+//.aa.a../ /.aa.a..
+//.aa.a./a /.aa.a./a
+//.aa.a./. /.aa.a.
+//.aa.a.// /.aa.a.
+//.aa.a/aa /.aa.a/aa
+//.aa.a/a. /.aa.a/a.
+//.aa.a/a/ /.aa.a/a
+//.aa.a/.a /.aa.a/.a
+//.aa.a/.. /
+//.aa.a/./ /.aa.a
+//.aa.a//a /.aa.a/a
+//.aa.a//. /.aa.a
+//.aa.a/// /.aa.a
+//.aa..aaa /.aa..aaa
+//.aa..aa. /.aa..aa.
+//.aa..aa/ /.aa..aa
+//.aa..a.a /.aa..a.a
+//.aa..a.. /.aa..a..
+//.aa..a./ /.aa..a.
+//.aa..a/a /.aa..a/a
+//.aa..a/. /.aa..a
+//.aa..a// /.aa..a
+//.aa...aa /.aa...aa
+//.aa...a. /.aa...a.
+//.aa...a/ /.aa...a
+//.aa....a /.aa....a
+//.aa..... /.aa.....
+//.aa..../ /.aa....
+//.aa.../a /.aa.../a
+//.aa.../. /.aa...
+//.aa...// /.aa...
+//.aa../aa /.aa../aa
+//.aa../a. /.aa../a.
+//.aa../a/ /.aa../a
+//.aa../.a /.aa../.a
+//.aa../.. /
+//.aa.././ /.aa..
+//.aa..//a /.aa../a
+//.aa..//. /.aa..
+//.aa../// /.aa..
+//.aa./aaa /.aa./aaa
+//.aa./aa. /.aa./aa.
+//.aa./aa/ /.aa./aa
+//.aa./a.a /.aa./a.a
+//.aa./a.. /.aa./a..
+//.aa./a./ /.aa./a.
+//.aa./a/a /.aa./a/a
+//.aa./a/. /.aa./a
+//.aa./a// /.aa./a
+//.aa./.aa /.aa./.aa
+//.aa./.a. /.aa./.a.
+//.aa./.a/ /.aa./.a
+//.aa./..a /.aa./..a
+//.aa./... /.aa./...
+//.aa./../ /
+//.aa././a /.aa./a
+//.aa././. /.aa.
+//.aa./.// /.aa.
+//.aa.//aa /.aa./aa
+//.aa.//a. /.aa./a.
+//.aa.//a/ /.aa./a
+//.aa.//.a /.aa./.a
+//.aa.//.. /
+//.aa.//./ /.aa.
+//.aa.///a /.aa./a
+//.aa.///. /.aa.
+//.aa.//// /.aa.
+//.aa/aaaa /.aa/aaaa
+//.aa/aaa. /.aa/aaa.
+//.aa/aaa/ /.aa/aaa
+//.aa/aa.a /.aa/aa.a
+//.aa/aa.. /.aa/aa..
+//.aa/aa./ /.aa/aa.
+//.aa/aa/a /.aa/aa/a
+//.aa/aa/. /.aa/aa
+//.aa/aa// /.aa/aa
+//.aa/a.aa /.aa/a.aa
+//.aa/a.a. /.aa/a.a.
+//.aa/a.a/ /.aa/a.a
+//.aa/a..a /.aa/a..a
+//.aa/a... /.aa/a...
+//.aa/a../ /.aa/a..
+//.aa/a./a /.aa/a./a
+//.aa/a./. /.aa/a.
+//.aa/a.// /.aa/a.
+//.aa/a/aa /.aa/a/aa
+//.aa/a/a. /.aa/a/a.
+//.aa/a/a/ /.aa/a/a
+//.aa/a/.a /.aa/a/.a
+//.aa/a/.. /.aa
+//.aa/a/./ /.aa/a
+//.aa/a//a /.aa/a/a
+//.aa/a//. /.aa/a
+//.aa/a/// /.aa/a
+//.aa/.aaa /.aa/.aaa
+//.aa/.aa. /.aa/.aa.
+//.aa/.aa/ /.aa/.aa
+//.aa/.a.a /.aa/.a.a
+//.aa/.a.. /.aa/.a..
+//.aa/.a./ /.aa/.a.
+//.aa/.a/a /.aa/.a/a
+//.aa/.a/. /.aa/.a
+//.aa/.a// /.aa/.a
+//.aa/..aa /.aa/..aa
+//.aa/..a. /.aa/..a.
+//.aa/..a/ /.aa/..a
+//.aa/...a /.aa/...a
+//.aa/.... /.aa/....
+//.aa/.../ /.aa/...
+//.aa/../a /a
+//.aa/../. /
+//.aa/..// /
+//.aa/./aa /.aa/aa
+//.aa/./a. /.aa/a.
+//.aa/./a/ /.aa/a
+//.aa/./.a /.aa/.a
+//.aa/./.. /
+//.aa/././ /.aa
+//.aa/.//a /.aa/a
+//.aa/.//. /.aa
+//.aa/./// /.aa
+//.aa//aaa /.aa/aaa
+//.aa//aa. /.aa/aa.
+//.aa//aa/ /.aa/aa
+//.aa//a.a /.aa/a.a
+//.aa//a.. /.aa/a..
+//.aa//a./ /.aa/a.
+//.aa//a/a /.aa/a/a
+//.aa//a/. /.aa/a
+//.aa//a// /.aa/a
+//.aa//.aa /.aa/.aa
+//.aa//.a. /.aa/.a.
+//.aa//.a/ /.aa/.a
+//.aa//..a /.aa/..a
+//.aa//... /.aa/...
+//.aa//../ /
+//.aa//./a /.aa/a
+//.aa//./. /.aa
+//.aa//.// /.aa
+//.aa///aa /.aa/aa
+//.aa///a. /.aa/a.
+//.aa///a/ /.aa/a
+//.aa///.a /.aa/.a
+//.aa///.. /
+//.aa///./ /.aa
+//.aa////a /.aa/a
+//.aa////. /.aa
+//.aa///// /.aa
+//.a.aaaaa /.a.aaaaa
+//.a.aaaa. /.a.aaaa.
+//.a.aaaa/ /.a.aaaa
+//.a.aaa.a /.a.aaa.a
+//.a.aaa.. /.a.aaa..
+//.a.aaa./ /.a.aaa.
+//.a.aaa/a /.a.aaa/a
+//.a.aaa/. /.a.aaa
+//.a.aaa// /.a.aaa
+//.a.aa.aa /.a.aa.aa
+//.a.aa.a. /.a.aa.a.
+//.a.aa.a/ /.a.aa.a
+//.a.aa..a /.a.aa..a
+//.a.aa... /.a.aa...
+//.a.aa../ /.a.aa..
+//.a.aa./a /.a.aa./a
+//.a.aa./. /.a.aa.
+//.a.aa.// /.a.aa.
+//.a.aa/aa /.a.aa/aa
+//.a.aa/a. /.a.aa/a.
+//.a.aa/a/ /.a.aa/a
+//.a.aa/.a /.a.aa/.a
+//.a.aa/.. /
+//.a.aa/./ /.a.aa
+//.a.aa//a /.a.aa/a
+//.a.aa//. /.a.aa
+//.a.aa/// /.a.aa
+//.a.a.aaa /.a.a.aaa
+//.a.a.aa. /.a.a.aa.
+//.a.a.aa/ /.a.a.aa
+//.a.a.a.a /.a.a.a.a
+//.a.a.a.. /.a.a.a..
+//.a.a.a./ /.a.a.a.
+//.a.a.a/a /.a.a.a/a
+//.a.a.a/. /.a.a.a
+//.a.a.a// /.a.a.a
+//.a.a..aa /.a.a..aa
+//.a.a..a. /.a.a..a.
+//.a.a..a/ /.a.a..a
+//.a.a...a /.a.a...a
+//.a.a.... /.a.a....
+//.a.a.../ /.a.a...
+//.a.a../a /.a.a../a
+//.a.a../. /.a.a..
+//.a.a..// /.a.a..
+//.a.a./aa /.a.a./aa
+//.a.a./a. /.a.a./a.
+//.a.a./a/ /.a.a./a
+//.a.a./.a /.a.a./.a
+//.a.a./.. /
+//.a.a././ /.a.a.
+//.a.a.//a /.a.a./a
+//.a.a.//. /.a.a.
+//.a.a./// /.a.a.
+//.a.a/aaa /.a.a/aaa
+//.a.a/aa. /.a.a/aa.
+//.a.a/aa/ /.a.a/aa
+//.a.a/a.a /.a.a/a.a
+//.a.a/a.. /.a.a/a..
+//.a.a/a./ /.a.a/a.
+//.a.a/a/a /.a.a/a/a
+//.a.a/a/. /.a.a/a
+//.a.a/a// /.a.a/a
+//.a.a/.aa /.a.a/.aa
+//.a.a/.a. /.a.a/.a.
+//.a.a/.a/ /.a.a/.a
+//.a.a/..a /.a.a/..a
+//.a.a/... /.a.a/...
+//.a.a/../ /
+//.a.a/./a /.a.a/a
+//.a.a/./. /.a.a
+//.a.a/.// /.a.a
+//.a.a//aa /.a.a/aa
+//.a.a//a. /.a.a/a.
+//.a.a//a/ /.a.a/a
+//.a.a//.a /.a.a/.a
+//.a.a//.. /
+//.a.a//./ /.a.a
+//.a.a///a /.a.a/a
+//.a.a///. /.a.a
+//.a.a//// /.a.a
+//.a..aaaa /.a..aaaa
+//.a..aaa. /.a..aaa.
+//.a..aaa/ /.a..aaa
+//.a..aa.a /.a..aa.a
+//.a..aa.. /.a..aa..
+//.a..aa./ /.a..aa.
+//.a..aa/a /.a..aa/a
+//.a..aa/. /.a..aa
+//.a..aa// /.a..aa
+//.a..a.aa /.a..a.aa
+//.a..a.a. /.a..a.a.
+//.a..a.a/ /.a..a.a
+//.a..a..a /.a..a..a
+//.a..a... /.a..a...
+//.a..a../ /.a..a..
+//.a..a./a /.a..a./a
+//.a..a./. /.a..a.
+//.a..a.// /.a..a.
+//.a..a/aa /.a..a/aa
+//.a..a/a. /.a..a/a.
+//.a..a/a/ /.a..a/a
+//.a..a/.a /.a..a/.a
+//.a..a/.. /
+//.a..a/./ /.a..a
+//.a..a//a /.a..a/a
+//.a..a//. /.a..a
+//.a..a/// /.a..a
+//.a...aaa /.a...aaa
+//.a...aa. /.a...aa.
+//.a...aa/ /.a...aa
+//.a...a.a /.a...a.a
+//.a...a.. /.a...a..
+//.a...a./ /.a...a.
+//.a...a/a /.a...a/a
+//.a...a/. /.a...a
+//.a...a// /.a...a
+//.a....aa /.a....aa
+//.a....a. /.a....a.
+//.a....a/ /.a....a
+//.a.....a /.a.....a
+//.a...... /.a......
+//.a...../ /.a.....
+//.a..../a /.a..../a
+//.a..../. /.a....
+//.a....// /.a....
+//.a.../aa /.a.../aa
+//.a.../a. /.a.../a.
+//.a.../a/ /.a.../a
+//.a.../.a /.a.../.a
+//.a.../.. /
+//.a..././ /.a...
+//.a...//a /.a.../a
+//.a...//. /.a...
+//.a.../// /.a...
+//.a../aaa /.a../aaa
+//.a../aa. /.a../aa.
+//.a../aa/ /.a../aa
+//.a../a.a /.a../a.a
+//.a../a.. /.a../a..
+//.a../a./ /.a../a.
+//.a../a/a /.a../a/a
+//.a../a/. /.a../a
+//.a../a// /.a../a
+//.a../.aa /.a../.aa
+//.a../.a. /.a../.a.
+//.a../.a/ /.a../.a
+//.a../..a /.a../..a
+//.a../... /.a../...
+//.a../../ /
+//.a.././a /.a../a
+//.a.././. /.a..
+//.a../.// /.a..
+//.a..//aa /.a../aa
+//.a..//a. /.a../a.
+//.a..//a/ /.a../a
+//.a..//.a /.a../.a
+//.a..//.. /
+//.a..//./ /.a..
+//.a..///a /.a../a
+//.a..///. /.a..
+//.a..//// /.a..
+//.a./aaaa /.a./aaaa
+//.a./aaa. /.a./aaa.
+//.a./aaa/ /.a./aaa
+//.a./aa.a /.a./aa.a
+//.a./aa.. /.a./aa..
+//.a./aa./ /.a./aa.
+//.a./aa/a /.a./aa/a
+//.a./aa/. /.a./aa
+//.a./aa// /.a./aa
+//.a./a.aa /.a./a.aa
+//.a./a.a. /.a./a.a.
+//.a./a.a/ /.a./a.a
+//.a./a..a /.a./a..a
+//.a./a... /.a./a...
+//.a./a../ /.a./a..
+//.a./a./a /.a./a./a
+//.a./a./. /.a./a.
+//.a./a.// /.a./a.
+//.a./a/aa /.a./a/aa
+//.a./a/a. /.a./a/a.
+//.a./a/a/ /.a./a/a
+//.a./a/.a /.a./a/.a
+//.a./a/.. /.a.
+//.a./a/./ /.a./a
+//.a./a//a /.a./a/a
+//.a./a//. /.a./a
+//.a./a/// /.a./a
+//.a./.aaa /.a./.aaa
+//.a./.aa. /.a./.aa.
+//.a./.aa/ /.a./.aa
+//.a./.a.a /.a./.a.a
+//.a./.a.. /.a./.a..
+//.a./.a./ /.a./.a.
+//.a./.a/a /.a./.a/a
+//.a./.a/. /.a./.a
+//.a./.a// /.a./.a
+//.a./..aa /.a./..aa
+//.a./..a. /.a./..a.
+//.a./..a/ /.a./..a
+//.a./...a /.a./...a
+//.a./.... /.a./....
+//.a./.../ /.a./...
+//.a./../a /a
+//.a./../. /
+//.a./..// /
+//.a././aa /.a./aa
+//.a././a. /.a./a.
+//.a././a/ /.a./a
+//.a././.a /.a./.a
+//.a././.. /
+//.a./././ /.a.
+//.a././/a /.a./a
+//.a././/. /.a.
+//.a././// /.a.
+//.a.//aaa /.a./aaa
+//.a.//aa. /.a./aa.
+//.a.//aa/ /.a./aa
+//.a.//a.a /.a./a.a
+//.a.//a.. /.a./a..
+//.a.//a./ /.a./a.
+//.a.//a/a /.a./a/a
+//.a.//a/. /.a./a
+//.a.//a// /.a./a
+//.a.//.aa /.a./.aa
+//.a.//.a. /.a./.a.
+//.a.//.a/ /.a./.a
+//.a.//..a /.a./..a
+//.a.//... /.a./...
+//.a.//../ /
+//.a.//./a /.a./a
+//.a.//./. /.a.
+//.a.//.// /.a.
+//.a.///aa /.a./aa
+//.a.///a. /.a./a.
+//.a.///a/ /.a./a
+//.a.///.a /.a./.a
+//.a.///.. /
+//.a.///./ /.a.
+//.a.////a /.a./a
+//.a.////. /.a.
+//.a.///// /.a.
+//.a/aaaaa /.a/aaaaa
+//.a/aaaa. /.a/aaaa.
+//.a/aaaa/ /.a/aaaa
+//.a/aaa.a /.a/aaa.a
+//.a/aaa.. /.a/aaa..
+//.a/aaa./ /.a/aaa.
+//.a/aaa/a /.a/aaa/a
+//.a/aaa/. /.a/aaa
+//.a/aaa// /.a/aaa
+//.a/aa.aa /.a/aa.aa
+//.a/aa.a. /.a/aa.a.
+//.a/aa.a/ /.a/aa.a
+//.a/aa..a /.a/aa..a
+//.a/aa... /.a/aa...
+//.a/aa../ /.a/aa..
+//.a/aa./a /.a/aa./a
+//.a/aa./. /.a/aa.
+//.a/aa.// /.a/aa.
+//.a/aa/aa /.a/aa/aa
+//.a/aa/a. /.a/aa/a.
+//.a/aa/a/ /.a/aa/a
+//.a/aa/.a /.a/aa/.a
+//.a/aa/.. /.a
+//.a/aa/./ /.a/aa
+//.a/aa//a /.a/aa/a
+//.a/aa//. /.a/aa
+//.a/aa/// /.a/aa
+//.a/a.aaa /.a/a.aaa
+//.a/a.aa. /.a/a.aa.
+//.a/a.aa/ /.a/a.aa
+//.a/a.a.a /.a/a.a.a
+//.a/a.a.. /.a/a.a..
+//.a/a.a./ /.a/a.a.
+//.a/a.a/a /.a/a.a/a
+//.a/a.a/. /.a/a.a
+//.a/a.a// /.a/a.a
+//.a/a..aa /.a/a..aa
+//.a/a..a. /.a/a..a.
+//.a/a..a/ /.a/a..a
+//.a/a...a /.a/a...a
+//.a/a.... /.a/a....
+//.a/a.../ /.a/a...
+//.a/a../a /.a/a../a
+//.a/a../. /.a/a..
+//.a/a..// /.a/a..
+//.a/a./aa /.a/a./aa
+//.a/a./a. /.a/a./a.
+//.a/a./a/ /.a/a./a
+//.a/a./.a /.a/a./.a
+//.a/a./.. /.a
+//.a/a././ /.a/a.
+//.a/a.//a /.a/a./a
+//.a/a.//. /.a/a.
+//.a/a./// /.a/a.
+//.a/a/aaa /.a/a/aaa
+//.a/a/aa. /.a/a/aa.
+//.a/a/aa/ /.a/a/aa
+//.a/a/a.a /.a/a/a.a
+//.a/a/a.. /.a/a/a..
+//.a/a/a./ /.a/a/a.
+//.a/a/a/a /.a/a/a/a
+//.a/a/a/. /.a/a/a
+//.a/a/a// /.a/a/a
+//.a/a/.aa /.a/a/.aa
+//.a/a/.a. /.a/a/.a.
+//.a/a/.a/ /.a/a/.a
+//.a/a/..a /.a/a/..a
+//.a/a/... /.a/a/...
+//.a/a/../ /.a
+//.a/a/./a /.a/a/a
+//.a/a/./. /.a/a
+//.a/a/.// /.a/a
+//.a/a//aa /.a/a/aa
+//.a/a//a. /.a/a/a.
+//.a/a//a/ /.a/a/a
+//.a/a//.a /.a/a/.a
+//.a/a//.. /.a
+//.a/a//./ /.a/a
+//.a/a///a /.a/a/a
+//.a/a///. /.a/a
+//.a/a//// /.a/a
+//.a/.aaaa /.a/.aaaa
+//.a/.aaa. /.a/.aaa.
+//.a/.aaa/ /.a/.aaa
+//.a/.aa.a /.a/.aa.a
+//.a/.aa.. /.a/.aa..
+//.a/.aa./ /.a/.aa.
+//.a/.aa/a /.a/.aa/a
+//.a/.aa/. /.a/.aa
+//.a/.aa// /.a/.aa
+//.a/.a.aa /.a/.a.aa
+//.a/.a.a. /.a/.a.a.
+//.a/.a.a/ /.a/.a.a
+//.a/.a..a /.a/.a..a
+//.a/.a... /.a/.a...
+//.a/.a../ /.a/.a..
+//.a/.a./a /.a/.a./a
+//.a/.a./. /.a/.a.
+//.a/.a.// /.a/.a.
+//.a/.a/aa /.a/.a/aa
+//.a/.a/a. /.a/.a/a.
+//.a/.a/a/ /.a/.a/a
+//.a/.a/.a /.a/.a/.a
+//.a/.a/.. /.a
+//.a/.a/./ /.a/.a
+//.a/.a//a /.a/.a/a
+//.a/.a//. /.a/.a
+//.a/.a/// /.a/.a
+//.a/..aaa /.a/..aaa
+//.a/..aa. /.a/..aa.
+//.a/..aa/ /.a/..aa
+//.a/..a.a /.a/..a.a
+//.a/..a.. /.a/..a..
+//.a/..a./ /.a/..a.
+//.a/..a/a /.a/..a/a
+//.a/..a/. /.a/..a
+//.a/..a// /.a/..a
+//.a/...aa /.a/...aa
+//.a/...a. /.a/...a.
+//.a/...a/ /.a/...a
+//.a/....a /.a/....a
+//.a/..... /.a/.....
+//.a/..../ /.a/....
+//.a/.../a /.a/.../a
+//.a/.../. /.a/...
+//.a/...// /.a/...
+//.a/../aa /aa
+//.a/../a. /a.
+//.a/../a/ /a
+//.a/../.a /.a
+//.a/../.. /
+//.a/.././ /
+//.a/..//a /a
+//.a/..//. /
+//.a/../// /
+//.a/./aaa /.a/aaa
+//.a/./aa. /.a/aa.
+//.a/./aa/ /.a/aa
+//.a/./a.a /.a/a.a
+//.a/./a.. /.a/a..
+//.a/./a./ /.a/a.
+//.a/./a/a /.a/a/a
+//.a/./a/. /.a/a
+//.a/./a// /.a/a
+//.a/./.aa /.a/.aa
+//.a/./.a. /.a/.a.
+//.a/./.a/ /.a/.a
+//.a/./..a /.a/..a
+//.a/./... /.a/...
+//.a/./../ /
+//.a/././a /.a/a
+//.a/././. /.a
+//.a/./.// /.a
+//.a/.//aa /.a/aa
+//.a/.//a. /.a/a.
+//.a/.//a/ /.a/a
+//.a/.//.a /.a/.a
+//.a/.//.. /
+//.a/.//./ /.a
+//.a/.///a /.a/a
+//.a/.///. /.a
+//.a/.//// /.a
+//.a//aaaa /.a/aaaa
+//.a//aaa. /.a/aaa.
+//.a//aaa/ /.a/aaa
+//.a//aa.a /.a/aa.a
+//.a//aa.. /.a/aa..
+//.a//aa./ /.a/aa.
+//.a//aa/a /.a/aa/a
+//.a//aa/. /.a/aa
+//.a//aa// /.a/aa
+//.a//a.aa /.a/a.aa
+//.a//a.a. /.a/a.a.
+//.a//a.a/ /.a/a.a
+//.a//a..a /.a/a..a
+//.a//a... /.a/a...
+//.a//a../ /.a/a..
+//.a//a./a /.a/a./a
+//.a//a./. /.a/a.
+//.a//a.// /.a/a.
+//.a//a/aa /.a/a/aa
+//.a//a/a. /.a/a/a.
+//.a//a/a/ /.a/a/a
+//.a//a/.a /.a/a/.a
+//.a//a/.. /.a
+//.a//a/./ /.a/a
+//.a//a//a /.a/a/a
+//.a//a//. /.a/a
+//.a//a/// /.a/a
+//.a//.aaa /.a/.aaa
+//.a//.aa. /.a/.aa.
+//.a//.aa/ /.a/.aa
+//.a//.a.a /.a/.a.a
+//.a//.a.. /.a/.a..
+//.a//.a./ /.a/.a.
+//.a//.a/a /.a/.a/a
+//.a//.a/. /.a/.a
+//.a//.a// /.a/.a
+//.a//..aa /.a/..aa
+//.a//..a. /.a/..a.
+//.a//..a/ /.a/..a
+//.a//...a /.a/...a
+//.a//.... /.a/....
+//.a//.../ /.a/...
+//.a//../a /a
+//.a//../. /
+//.a//..// /
+//.a//./aa /.a/aa
+//.a//./a. /.a/a.
+//.a//./a/ /.a/a
+//.a//./.a /.a/.a
+//.a//./.. /
+//.a//././ /.a
+//.a//.//a /.a/a
+//.a//.//. /.a
+//.a//./// /.a
+//.a///aaa /.a/aaa
+//.a///aa. /.a/aa.
+//.a///aa/ /.a/aa
+//.a///a.a /.a/a.a
+//.a///a.. /.a/a..
+//.a///a./ /.a/a.
+//.a///a/a /.a/a/a
+//.a///a/. /.a/a
+//.a///a// /.a/a
+//.a///.aa /.a/.aa
+//.a///.a. /.a/.a.
+//.a///.a/ /.a/.a
+//.a///..a /.a/..a
+//.a///... /.a/...
+//.a///../ /
+//.a///./a /.a/a
+//.a///./. /.a
+//.a///.// /.a
+//.a////aa /.a/aa
+//.a////a. /.a/a.
+//.a////a/ /.a/a
+//.a////.a /.a/.a
+//.a////.. /
+//.a////./ /.a
+//.a/////a /.a/a
+//.a/////. /.a
+//.a////// /.a
+//..aaaaaa /..aaaaaa
+//..aaaaa. /..aaaaa.
+//..aaaaa/ /..aaaaa
+//..aaaa.a /..aaaa.a
+//..aaaa.. /..aaaa..
+//..aaaa./ /..aaaa.
+//..aaaa/a /..aaaa/a
+//..aaaa/. /..aaaa
+//..aaaa// /..aaaa
+//..aaa.aa /..aaa.aa
+//..aaa.a. /..aaa.a.
+//..aaa.a/ /..aaa.a
+//..aaa..a /..aaa..a
+//..aaa... /..aaa...
+//..aaa../ /..aaa..
+//..aaa./a /..aaa./a
+//..aaa./. /..aaa.
+//..aaa.// /..aaa.
+//..aaa/aa /..aaa/aa
+//..aaa/a. /..aaa/a.
+//..aaa/a/ /..aaa/a
+//..aaa/.a /..aaa/.a
+//..aaa/.. /
+//..aaa/./ /..aaa
+//..aaa//a /..aaa/a
+//..aaa//. /..aaa
+//..aaa/// /..aaa
+//..aa.aaa /..aa.aaa
+//..aa.aa. /..aa.aa.
+//..aa.aa/ /..aa.aa
+//..aa.a.a /..aa.a.a
+//..aa.a.. /..aa.a..
+//..aa.a./ /..aa.a.
+//..aa.a/a /..aa.a/a
+//..aa.a/. /..aa.a
+//..aa.a// /..aa.a
+//..aa..aa /..aa..aa
+//..aa..a. /..aa..a.
+//..aa..a/ /..aa..a
+//..aa...a /..aa...a
+//..aa.... /..aa....
+//..aa.../ /..aa...
+//..aa../a /..aa../a
+//..aa../. /..aa..
+//..aa..// /..aa..
+//..aa./aa /..aa./aa
+//..aa./a. /..aa./a.
+//..aa./a/ /..aa./a
+//..aa./.a /..aa./.a
+//..aa./.. /
+//..aa././ /..aa.
+//..aa.//a /..aa./a
+//..aa.//. /..aa.
+//..aa./// /..aa.
+//..aa/aaa /..aa/aaa
+//..aa/aa. /..aa/aa.
+//..aa/aa/ /..aa/aa
+//..aa/a.a /..aa/a.a
+//..aa/a.. /..aa/a..
+//..aa/a./ /..aa/a.
+//..aa/a/a /..aa/a/a
+//..aa/a/. /..aa/a
+//..aa/a// /..aa/a
+//..aa/.aa /..aa/.aa
+//..aa/.a. /..aa/.a.
+//..aa/.a/ /..aa/.a
+//..aa/..a /..aa/..a
+//..aa/... /..aa/...
+//..aa/../ /
+//..aa/./a /..aa/a
+//..aa/./. /..aa
+//..aa/.// /..aa
+//..aa//aa /..aa/aa
+//..aa//a. /..aa/a.
+//..aa//a/ /..aa/a
+//..aa//.a /..aa/.a
+//..aa//.. /
+//..aa//./ /..aa
+//..aa///a /..aa/a
+//..aa///. /..aa
+//..aa//// /..aa
+//..a.aaaa /..a.aaaa
+//..a.aaa. /..a.aaa.
+//..a.aaa/ /..a.aaa
+//..a.aa.a /..a.aa.a
+//..a.aa.. /..a.aa..
+//..a.aa./ /..a.aa.
+//..a.aa/a /..a.aa/a
+//..a.aa/. /..a.aa
+//..a.aa// /..a.aa
+//..a.a.aa /..a.a.aa
+//..a.a.a. /..a.a.a.
+//..a.a.a/ /..a.a.a
+//..a.a..a /..a.a..a
+//..a.a... /..a.a...
+//..a.a../ /..a.a..
+//..a.a./a /..a.a./a
+//..a.a./. /..a.a.
+//..a.a.// /..a.a.
+//..a.a/aa /..a.a/aa
+//..a.a/a. /..a.a/a.
+//..a.a/a/ /..a.a/a
+//..a.a/.a /..a.a/.a
+//..a.a/.. /
+//..a.a/./ /..a.a
+//..a.a//a /..a.a/a
+//..a.a//. /..a.a
+//..a.a/// /..a.a
+//..a..aaa /..a..aaa
+//..a..aa. /..a..aa.
+//..a..aa/ /..a..aa
+//..a..a.a /..a..a.a
+//..a..a.. /..a..a..
+//..a..a./ /..a..a.
+//..a..a/a /..a..a/a
+//..a..a/. /..a..a
+//..a..a// /..a..a
+//..a...aa /..a...aa
+//..a...a. /..a...a.
+//..a...a/ /..a...a
+//..a....a /..a....a
+//..a..... /..a.....
+//..a..../ /..a....
+//..a.../a /..a.../a
+//..a.../. /..a...
+//..a...// /..a...
+//..a../aa /..a../aa
+//..a../a. /..a../a.
+//..a../a/ /..a../a
+//..a../.a /..a../.a
+//..a../.. /
+//..a.././ /..a..
+//..a..//a /..a../a
+//..a..//. /..a..
+//..a../// /..a..
+//..a./aaa /..a./aaa
+//..a./aa. /..a./aa.
+//..a./aa/ /..a./aa
+//..a./a.a /..a./a.a
+//..a./a.. /..a./a..
+//..a./a./ /..a./a.
+//..a./a/a /..a./a/a
+//..a./a/. /..a./a
+//..a./a// /..a./a
+//..a./.aa /..a./.aa
+//..a./.a. /..a./.a.
+//..a./.a/ /..a./.a
+//..a./..a /..a./..a
+//..a./... /..a./...
+//..a./../ /
+//..a././a /..a./a
+//..a././. /..a.
+//..a./.// /..a.
+//..a.//aa /..a./aa
+//..a.//a. /..a./a.
+//..a.//a/ /..a./a
+//..a.//.a /..a./.a
+//..a.//.. /
+//..a.//./ /..a.
+//..a.///a /..a./a
+//..a.///. /..a.
+//..a.//// /..a.
+//..a/aaaa /..a/aaaa
+//..a/aaa. /..a/aaa.
+//..a/aaa/ /..a/aaa
+//..a/aa.a /..a/aa.a
+//..a/aa.. /..a/aa..
+//..a/aa./ /..a/aa.
+//..a/aa/a /..a/aa/a
+//..a/aa/. /..a/aa
+//..a/aa// /..a/aa
+//..a/a.aa /..a/a.aa
+//..a/a.a. /..a/a.a.
+//..a/a.a/ /..a/a.a
+//..a/a..a /..a/a..a
+//..a/a... /..a/a...
+//..a/a../ /..a/a..
+//..a/a./a /..a/a./a
+//..a/a./. /..a/a.
+//..a/a.// /..a/a.
+//..a/a/aa /..a/a/aa
+//..a/a/a. /..a/a/a.
+//..a/a/a/ /..a/a/a
+//..a/a/.a /..a/a/.a
+//..a/a/.. /..a
+//..a/a/./ /..a/a
+//..a/a//a /..a/a/a
+//..a/a//. /..a/a
+//..a/a/// /..a/a
+//..a/.aaa /..a/.aaa
+//..a/.aa. /..a/.aa.
+//..a/.aa/ /..a/.aa
+//..a/.a.a /..a/.a.a
+//..a/.a.. /..a/.a..
+//..a/.a./ /..a/.a.
+//..a/.a/a /..a/.a/a
+//..a/.a/. /..a/.a
+//..a/.a// /..a/.a
+//..a/..aa /..a/..aa
+//..a/..a. /..a/..a.
+//..a/..a/ /..a/..a
+//..a/...a /..a/...a
+//..a/.... /..a/....
+//..a/.../ /..a/...
+//..a/../a /a
+//..a/../. /
+//..a/..// /
+//..a/./aa /..a/aa
+//..a/./a. /..a/a.
+//..a/./a/ /..a/a
+//..a/./.a /..a/.a
+//..a/./.. /
+//..a/././ /..a
+//..a/.//a /..a/a
+//..a/.//. /..a
+//..a/./// /..a
+//..a//aaa /..a/aaa
+//..a//aa. /..a/aa.
+//..a//aa/ /..a/aa
+//..a//a.a /..a/a.a
+//..a//a.. /..a/a..
+//..a//a./ /..a/a.
+//..a//a/a /..a/a/a
+//..a//a/. /..a/a
+//..a//a// /..a/a
+//..a//.aa /..a/.aa
+//..a//.a. /..a/.a.
+//..a//.a/ /..a/.a
+//..a//..a /..a/..a
+//..a//... /..a/...
+//..a//../ /
+//..a//./a /..a/a
+//..a//./. /..a
+//..a//.// /..a
+//..a///aa /..a/aa
+//..a///a. /..a/a.
+//..a///a/ /..a/a
+//..a///.a /..a/.a
+//..a///.. /
+//..a///./ /..a
+//..a////a /..a/a
+//..a////. /..a
+//..a///// /..a
+//...aaaaa /...aaaaa
+//...aaaa. /...aaaa.
+//...aaaa/ /...aaaa
+//...aaa.a /...aaa.a
+//...aaa.. /...aaa..
+//...aaa./ /...aaa.
+//...aaa/a /...aaa/a
+//...aaa/. /...aaa
+//...aaa// /...aaa
+//...aa.aa /...aa.aa
+//...aa.a. /...aa.a.
+//...aa.a/ /...aa.a
+//...aa..a /...aa..a
+//...aa... /...aa...
+//...aa../ /...aa..
+//...aa./a /...aa./a
+//...aa./. /...aa.
+//...aa.// /...aa.
+//...aa/aa /...aa/aa
+//...aa/a. /...aa/a.
+//...aa/a/ /...aa/a
+//...aa/.a /...aa/.a
+//...aa/.. /
+//...aa/./ /...aa
+//...aa//a /...aa/a
+//...aa//. /...aa
+//...aa/// /...aa
+//...a.aaa /...a.aaa
+//...a.aa. /...a.aa.
+//...a.aa/ /...a.aa
+//...a.a.a /...a.a.a
+//...a.a.. /...a.a..
+//...a.a./ /...a.a.
+//...a.a/a /...a.a/a
+//...a.a/. /...a.a
+//...a.a// /...a.a
+//...a..aa /...a..aa
+//...a..a. /...a..a.
+//...a..a/ /...a..a
+//...a...a /...a...a
+//...a.... /...a....
+//...a.../ /...a...
+//...a../a /...a../a
+//...a../. /...a..
+//...a..// /...a..
+//...a./aa /...a./aa
+//...a./a. /...a./a.
+//...a./a/ /...a./a
+//...a./.a /...a./.a
+//...a./.. /
+//...a././ /...a.
+//...a.//a /...a./a
+//...a.//. /...a.
+//...a./// /...a.
+//...a/aaa /...a/aaa
+//...a/aa. /...a/aa.
+//...a/aa/ /...a/aa
+//...a/a.a /...a/a.a
+//...a/a.. /...a/a..
+//...a/a./ /...a/a.
+//...a/a/a /...a/a/a
+//...a/a/. /...a/a
+//...a/a// /...a/a
+//...a/.aa /...a/.aa
+//...a/.a. /...a/.a.
+//...a/.a/ /...a/.a
+//...a/..a /...a/..a
+//...a/... /...a/...
+//...a/../ /
+//...a/./a /...a/a
+//...a/./. /...a
+//...a/.// /...a
+//...a//aa /...a/aa
+//...a//a. /...a/a.
+//...a//a/ /...a/a
+//...a//.a /...a/.a
+//...a//.. /
+//...a//./ /...a
+//...a///a /...a/a
+//...a///. /...a
+//...a//// /...a
+//....aaaa /....aaaa
+//....aaa. /....aaa.
+//....aaa/ /....aaa
+//....aa.a /....aa.a
+//....aa.. /....aa..
+//....aa./ /....aa.
+//....aa/a /....aa/a
+//....aa/. /....aa
+//....aa// /....aa
+//....a.aa /....a.aa
+//....a.a. /....a.a.
+//....a.a/ /....a.a
+//....a..a /....a..a
+//....a... /....a...
+//....a../ /....a..
+//....a./a /....a./a
+//....a./. /....a.
+//....a.// /....a.
+//....a/aa /....a/aa
+//....a/a. /....a/a.
+//....a/a/ /....a/a
+//....a/.a /....a/.a
+//....a/.. /
+//....a/./ /....a
+//....a//a /....a/a
+//....a//. /....a
+//....a/// /....a
+//.....aaa /.....aaa
+//.....aa. /.....aa.
+//.....aa/ /.....aa
+//.....a.a /.....a.a
+//.....a.. /.....a..
+//.....a./ /.....a.
+//.....a/a /.....a/a
+//.....a/. /.....a
+//.....a// /.....a
+//......aa /......aa
+//......a. /......a.
+//......a/ /......a
+//.......a /.......a
+//........ /........
+//......./ /.......
+//....../a /....../a
+//....../. /......
+//......// /......
+//...../aa /...../aa
+//...../a. /...../a.
+//...../a/ /...../a
+//...../.a /...../.a
+//...../.. /
+//....././ /.....
+//.....//a /...../a
+//.....//. /.....
+//...../// /.....
+//..../aaa /..../aaa
+//..../aa. /..../aa.
+//..../aa/ /..../aa
+//..../a.a /..../a.a
+//..../a.. /..../a..
+//..../a./ /..../a.
+//..../a/a /..../a/a
+//..../a/. /..../a
+//..../a// /..../a
+//..../.aa /..../.aa
+//..../.a. /..../.a.
+//..../.a/ /..../.a
+//..../..a /..../..a
+//..../... /..../...
+//..../../ /
+//...././a /..../a
+//...././. /....
+//..../.// /....
+//....//aa /..../aa
+//....//a. /..../a.
+//....//a/ /..../a
+//....//.a /..../.a
+//....//.. /
+//....//./ /....
+//....///a /..../a
+//....///. /....
+//....//// /....
+//.../aaaa /.../aaaa
+//.../aaa. /.../aaa.
+//.../aaa/ /.../aaa
+//.../aa.a /.../aa.a
+//.../aa.. /.../aa..
+//.../aa./ /.../aa.
+//.../aa/a /.../aa/a
+//.../aa/. /.../aa
+//.../aa// /.../aa
+//.../a.aa /.../a.aa
+//.../a.a. /.../a.a.
+//.../a.a/ /.../a.a
+//.../a..a /.../a..a
+//.../a... /.../a...
+//.../a../ /.../a..
+//.../a./a /.../a./a
+//.../a./. /.../a.
+//.../a.// /.../a.
+//.../a/aa /.../a/aa
+//.../a/a. /.../a/a.
+//.../a/a/ /.../a/a
+//.../a/.a /.../a/.a
+//.../a/.. /...
+//.../a/./ /.../a
+//.../a//a /.../a/a
+//.../a//. /.../a
+//.../a/// /.../a
+//.../.aaa /.../.aaa
+//.../.aa. /.../.aa.
+//.../.aa/ /.../.aa
+//.../.a.a /.../.a.a
+//.../.a.. /.../.a..
+//.../.a./ /.../.a.
+//.../.a/a /.../.a/a
+//.../.a/. /.../.a
+//.../.a// /.../.a
+//.../..aa /.../..aa
+//.../..a. /.../..a.
+//.../..a/ /.../..a
+//.../...a /.../...a
+//.../.... /.../....
+//.../.../ /.../...
+//.../../a /a
+//.../../. /
+//.../..// /
+//..././aa /.../aa
+//..././a. /.../a.
+//..././a/ /.../a
+//..././.a /.../.a
+//..././.. /
+//.../././ /...
+//..././/a /.../a
+//..././/. /...
+//..././// /...
+//...//aaa /.../aaa
+//...//aa. /.../aa.
+//...//aa/ /.../aa
+//...//a.a /.../a.a
+//...//a.. /.../a..
+//...//a./ /.../a.
+//...//a/a /.../a/a
+//...//a/. /.../a
+//...//a// /.../a
+//...//.aa /.../.aa
+//...//.a. /.../.a.
+//...//.a/ /.../.a
+//...//..a /.../..a
+//...//... /.../...
+//...//../ /
+//...//./a /.../a
+//...//./. /...
+//...//.// /...
+//...///aa /.../aa
+//...///a. /.../a.
+//...///a/ /.../a
+//...///.a /.../.a
+//...///.. /
+//...///./ /...
+//...////a /.../a
+//...////. /...
+//...///// /...
+//../aaaaa /aaaaa
+//../aaaa. /aaaa.
+//../aaaa/ /aaaa
+//../aaa.a /aaa.a
+//../aaa.. /aaa..
+//../aaa./ /aaa.
+//../aaa/a /aaa/a
+//../aaa/. /aaa
+//../aaa// /aaa
+//../aa.aa /aa.aa
+//../aa.a. /aa.a.
+//../aa.a/ /aa.a
+//../aa..a /aa..a
+//../aa... /aa...
+//../aa../ /aa..
+//../aa./a /aa./a
+//../aa./. /aa.
+//../aa.// /aa.
+//../aa/aa /aa/aa
+//../aa/a. /aa/a.
+//../aa/a/ /aa/a
+//../aa/.a /aa/.a
+//../aa/.. /
+//../aa/./ /aa
+//../aa//a /aa/a
+//../aa//. /aa
+//../aa/// /aa
+//../a.aaa /a.aaa
+//../a.aa. /a.aa.
+//../a.aa/ /a.aa
+//../a.a.a /a.a.a
+//../a.a.. /a.a..
+//../a.a./ /a.a.
+//../a.a/a /a.a/a
+//../a.a/. /a.a
+//../a.a// /a.a
+//../a..aa /a..aa
+//../a..a. /a..a.
+//../a..a/ /a..a
+//../a...a /a...a
+//../a.... /a....
+//../a.../ /a...
+//../a../a /a../a
+//../a../. /a..
+//../a..// /a..
+//../a./aa /a./aa
+//../a./a. /a./a.
+//../a./a/ /a./a
+//../a./.a /a./.a
+//../a./.. /
+//../a././ /a.
+//../a.//a /a./a
+//../a.//. /a.
+//../a./// /a.
+//../a/aaa /a/aaa
+//../a/aa. /a/aa.
+//../a/aa/ /a/aa
+//../a/a.a /a/a.a
+//../a/a.. /a/a..
+//../a/a./ /a/a.
+//../a/a/a /a/a/a
+//../a/a/. /a/a
+//../a/a// /a/a
+//../a/.aa /a/.aa
+//../a/.a. /a/.a.
+//../a/.a/ /a/.a
+//../a/..a /a/..a
+//../a/... /a/...
+//../a/../ /
+//../a/./a /a/a
+//../a/./. /a
+//../a/.// /a
+//../a//aa /a/aa
+//../a//a. /a/a.
+//../a//a/ /a/a
+//../a//.a /a/.a
+//../a//.. /
+//../a//./ /a
+//../a///a /a/a
+//../a///. /a
+//../a//// /a
+//../.aaaa /.aaaa
+//../.aaa. /.aaa.
+//../.aaa/ /.aaa
+//../.aa.a /.aa.a
+//../.aa.. /.aa..
+//../.aa./ /.aa.
+//../.aa/a /.aa/a
+//../.aa/. /.aa
+//../.aa// /.aa
+//../.a.aa /.a.aa
+//../.a.a. /.a.a.
+//../.a.a/ /.a.a
+//../.a..a /.a..a
+//../.a... /.a...
+//../.a../ /.a..
+//../.a./a /.a./a
+//../.a./. /.a.
+//../.a.// /.a.
+//../.a/aa /.a/aa
+//../.a/a. /.a/a.
+//../.a/a/ /.a/a
+//../.a/.a /.a/.a
+//../.a/.. /
+//../.a/./ /.a
+//../.a//a /.a/a
+//../.a//. /.a
+//../.a/// /.a
+//../..aaa /..aaa
+//../..aa. /..aa.
+//../..aa/ /..aa
+//../..a.a /..a.a
+//../..a.. /..a..
+//../..a./ /..a.
+//../..a/a /..a/a
+//../..a/. /..a
+//../..a// /..a
+//../...aa /...aa
+//../...a. /...a.
+//../...a/ /...a
+//../....a /....a
+//../..... /.....
+//../..../ /....
+//../.../a /.../a
+//../.../. /...
+//../...// /...
+//../../aa /aa
+//../../a. /a.
+//../../a/ /a
+//../../.a /.a
+//../../.. /
+//../.././ /
+//../..//a /a
+//../..//. /
+//../../// /
+//.././aaa /aaa
+//.././aa. /aa.
+//.././aa/ /aa
+//.././a.a /a.a
+//.././a.. /a..
+//.././a./ /a.
+//.././a/a /a/a
+//.././a/. /a
+//.././a// /a
+//.././.aa /.aa
+//.././.a. /.a.
+//.././.a/ /.a
+//.././..a /..a
+//.././... /...
+//.././../ /
+//../././a /a
+//../././. /
+//.././.// /
+//.././/aa /aa
+//.././/a. /a.
+//.././/a/ /a
+//.././/.a /.a
+//.././/.. /
+//.././/./ /
+//.././//a /a
+//.././//. /
+//.././/// /
+//..//aaaa /aaaa
+//..//aaa. /aaa.
+//..//aaa/ /aaa
+//..//aa.a /aa.a
+//..//aa.. /aa..
+//..//aa./ /aa.
+//..//aa/a /aa/a
+//..//aa/. /aa
+//..//aa// /aa
+//..//a.aa /a.aa
+//..//a.a. /a.a.
+//..//a.a/ /a.a
+//..//a..a /a..a
+//..//a... /a...
+//..//a../ /a..
+//..//a./a /a./a
+//..//a./. /a.
+//..//a.// /a.
+//..//a/aa /a/aa
+//..//a/a. /a/a.
+//..//a/a/ /a/a
+//..//a/.a /a/.a
+//..//a/.. /
+//..//a/./ /a
+//..//a//a /a/a
+//..//a//. /a
+//..//a/// /a
+//..//.aaa /.aaa
+//..//.aa. /.aa.
+//..//.aa/ /.aa
+//..//.a.a /.a.a
+//..//.a.. /.a..
+//..//.a./ /.a.
+//..//.a/a /.a/a
+//..//.a/. /.a
+//..//.a// /.a
+//..//..aa /..aa
+//..//..a. /..a.
+//..//..a/ /..a
+//..//...a /...a
+//..//.... /....
+//..//.../ /...
+//..//../a /a
+//..//../. /
+//..//..// /
+//..//./aa /aa
+//..//./a. /a.
+//..//./a/ /a
+//..//./.a /.a
+//..//./.. /
+//..//././ /
+//..//.//a /a
+//..//.//. /
+//..//./// /
+//..///aaa /aaa
+//..///aa. /aa.
+//..///aa/ /aa
+//..///a.a /a.a
+//..///a.. /a..
+//..///a./ /a.
+//..///a/a /a/a
+//..///a/. /a
+//..///a// /a
+//..///.aa /.aa
+//..///.a. /.a.
+//..///.a/ /.a
+//..///..a /..a
+//..///... /...
+//..///../ /
+//..///./a /a
+//..///./. /
+//..///.// /
+//..////aa /aa
+//..////a. /a.
+//..////a/ /a
+//..////.a /.a
+//..////.. /
+//..////./ /
+//../////a /a
+//../////. /
+//..////// /
+//./aaaaaa /aaaaaa
+//./aaaaa. /aaaaa.
+//./aaaaa/ /aaaaa
+//./aaaa.a /aaaa.a
+//./aaaa.. /aaaa..
+//./aaaa./ /aaaa.
+//./aaaa/a /aaaa/a
+//./aaaa/. /aaaa
+//./aaaa// /aaaa
+//./aaa.aa /aaa.aa
+//./aaa.a. /aaa.a.
+//./aaa.a/ /aaa.a
+//./aaa..a /aaa..a
+//./aaa... /aaa...
+//./aaa../ /aaa..
+//./aaa./a /aaa./a
+//./aaa./. /aaa.
+//./aaa.// /aaa.
+//./aaa/aa /aaa/aa
+//./aaa/a. /aaa/a.
+//./aaa/a/ /aaa/a
+//./aaa/.a /aaa/.a
+//./aaa/.. /
+//./aaa/./ /aaa
+//./aaa//a /aaa/a
+//./aaa//. /aaa
+//./aaa/// /aaa
+//./aa.aaa /aa.aaa
+//./aa.aa. /aa.aa.
+//./aa.aa/ /aa.aa
+//./aa.a.a /aa.a.a
+//./aa.a.. /aa.a..
+//./aa.a./ /aa.a.
+//./aa.a/a /aa.a/a
+//./aa.a/. /aa.a
+//./aa.a// /aa.a
+//./aa..aa /aa..aa
+//./aa..a. /aa..a.
+//./aa..a/ /aa..a
+//./aa...a /aa...a
+//./aa.... /aa....
+//./aa.../ /aa...
+//./aa../a /aa../a
+//./aa../. /aa..
+//./aa..// /aa..
+//./aa./aa /aa./aa
+//./aa./a. /aa./a.
+//./aa./a/ /aa./a
+//./aa./.a /aa./.a
+//./aa./.. /
+//./aa././ /aa.
+//./aa.//a /aa./a
+//./aa.//. /aa.
+//./aa./// /aa.
+//./aa/aaa /aa/aaa
+//./aa/aa. /aa/aa.
+//./aa/aa/ /aa/aa
+//./aa/a.a /aa/a.a
+//./aa/a.. /aa/a..
+//./aa/a./ /aa/a.
+//./aa/a/a /aa/a/a
+//./aa/a/. /aa/a
+//./aa/a// /aa/a
+//./aa/.aa /aa/.aa
+//./aa/.a. /aa/.a.
+//./aa/.a/ /aa/.a
+//./aa/..a /aa/..a
+//./aa/... /aa/...
+//./aa/../ /
+//./aa/./a /aa/a
+//./aa/./. /aa
+//./aa/.// /aa
+//./aa//aa /aa/aa
+//./aa//a. /aa/a.
+//./aa//a/ /aa/a
+//./aa//.a /aa/.a
+//./aa//.. /
+//./aa//./ /aa
+//./aa///a /aa/a
+//./aa///. /aa
+//./aa//// /aa
+//./a.aaaa /a.aaaa
+//./a.aaa. /a.aaa.
+//./a.aaa/ /a.aaa
+//./a.aa.a /a.aa.a
+//./a.aa.. /a.aa..
+//./a.aa./ /a.aa.
+//./a.aa/a /a.aa/a
+//./a.aa/. /a.aa
+//./a.aa// /a.aa
+//./a.a.aa /a.a.aa
+//./a.a.a. /a.a.a.
+//./a.a.a/ /a.a.a
+//./a.a..a /a.a..a
+//./a.a... /a.a...
+//./a.a../ /a.a..
+//./a.a./a /a.a./a
+//./a.a./. /a.a.
+//./a.a.// /a.a.
+//./a.a/aa /a.a/aa
+//./a.a/a. /a.a/a.
+//./a.a/a/ /a.a/a
+//./a.a/.a /a.a/.a
+//./a.a/.. /
+//./a.a/./ /a.a
+//./a.a//a /a.a/a
+//./a.a//. /a.a
+//./a.a/// /a.a
+//./a..aaa /a..aaa
+//./a..aa. /a..aa.
+//./a..aa/ /a..aa
+//./a..a.a /a..a.a
+//./a..a.. /a..a..
+//./a..a./ /a..a.
+//./a..a/a /a..a/a
+//./a..a/. /a..a
+//./a..a// /a..a
+//./a...aa /a...aa
+//./a...a. /a...a.
+//./a...a/ /a...a
+//./a....a /a....a
+//./a..... /a.....
+//./a..../ /a....
+//./a.../a /a.../a
+//./a.../. /a...
+//./a...// /a...
+//./a../aa /a../aa
+//./a../a. /a../a.
+//./a../a/ /a../a
+//./a../.a /a../.a
+//./a../.. /
+//./a.././ /a..
+//./a..//a /a../a
+//./a..//. /a..
+//./a../// /a..
+//./a./aaa /a./aaa
+//./a./aa. /a./aa.
+//./a./aa/ /a./aa
+//./a./a.a /a./a.a
+//./a./a.. /a./a..
+//./a./a./ /a./a.
+//./a./a/a /a./a/a
+//./a./a/. /a./a
+//./a./a// /a./a
+//./a./.aa /a./.aa
+//./a./.a. /a./.a.
+//./a./.a/ /a./.a
+//./a./..a /a./..a
+//./a./... /a./...
+//./a./../ /
+//./a././a /a./a
+//./a././. /a.
+//./a./.// /a.
+//./a.//aa /a./aa
+//./a.//a. /a./a.
+//./a.//a/ /a./a
+//./a.//.a /a./.a
+//./a.//.. /
+//./a.//./ /a.
+//./a.///a /a./a
+//./a.///. /a.
+//./a.//// /a.
+//./a/aaaa /a/aaaa
+//./a/aaa. /a/aaa.
+//./a/aaa/ /a/aaa
+//./a/aa.a /a/aa.a
+//./a/aa.. /a/aa..
+//./a/aa./ /a/aa.
+//./a/aa/a /a/aa/a
+//./a/aa/. /a/aa
+//./a/aa// /a/aa
+//./a/a.aa /a/a.aa
+//./a/a.a. /a/a.a.
+//./a/a.a/ /a/a.a
+//./a/a..a /a/a..a
+//./a/a... /a/a...
+//./a/a../ /a/a..
+//./a/a./a /a/a./a
+//./a/a./. /a/a.
+//./a/a.// /a/a.
+//./a/a/aa /a/a/aa
+//./a/a/a. /a/a/a.
+//./a/a/a/ /a/a/a
+//./a/a/.a /a/a/.a
+//./a/a/.. /a
+//./a/a/./ /a/a
+//./a/a//a /a/a/a
+//./a/a//. /a/a
+//./a/a/// /a/a
+//./a/.aaa /a/.aaa
+//./a/.aa. /a/.aa.
+//./a/.aa/ /a/.aa
+//./a/.a.a /a/.a.a
+//./a/.a.. /a/.a..
+//./a/.a./ /a/.a.
+//./a/.a/a /a/.a/a
+//./a/.a/. /a/.a
+//./a/.a// /a/.a
+//./a/..aa /a/..aa
+//./a/..a. /a/..a.
+//./a/..a/ /a/..a
+//./a/...a /a/...a
+//./a/.... /a/....
+//./a/.../ /a/...
+//./a/../a /a
+//./a/../. /
+//./a/..// /
+//./a/./aa /a/aa
+//./a/./a. /a/a.
+//./a/./a/ /a/a
+//./a/./.a /a/.a
+//./a/./.. /
+//./a/././ /a
+//./a/.//a /a/a
+//./a/.//. /a
+//./a/./// /a
+//./a//aaa /a/aaa
+//./a//aa. /a/aa.
+//./a//aa/ /a/aa
+//./a//a.a /a/a.a
+//./a//a.. /a/a..
+//./a//a./ /a/a.
+//./a//a/a /a/a/a
+//./a//a/. /a/a
+//./a//a// /a/a
+//./a//.aa /a/.aa
+//./a//.a. /a/.a.
+//./a//.a/ /a/.a
+//./a//..a /a/..a
+//./a//... /a/...
+//./a//../ /
+//./a//./a /a/a
+//./a//./. /a
+//./a//.// /a
+//./a///aa /a/aa
+//./a///a. /a/a.
+//./a///a/ /a/a
+//./a///.a /a/.a
+//./a///.. /
+//./a///./ /a
+//./a////a /a/a
+//./a////. /a
+//./a///// /a
+//./.aaaaa /.aaaaa
+//./.aaaa. /.aaaa.
+//./.aaaa/ /.aaaa
+//./.aaa.a /.aaa.a
+//./.aaa.. /.aaa..
+//./.aaa./ /.aaa.
+//./.aaa/a /.aaa/a
+//./.aaa/. /.aaa
+//./.aaa// /.aaa
+//./.aa.aa /.aa.aa
+//./.aa.a. /.aa.a.
+//./.aa.a/ /.aa.a
+//./.aa..a /.aa..a
+//./.aa... /.aa...
+//./.aa../ /.aa..
+//./.aa./a /.aa./a
+//./.aa./. /.aa.
+//./.aa.// /.aa.
+//./.aa/aa /.aa/aa
+//./.aa/a. /.aa/a.
+//./.aa/a/ /.aa/a
+//./.aa/.a /.aa/.a
+//./.aa/.. /
+//./.aa/./ /.aa
+//./.aa//a /.aa/a
+//./.aa//. /.aa
+//./.aa/// /.aa
+//./.a.aaa /.a.aaa
+//./.a.aa. /.a.aa.
+//./.a.aa/ /.a.aa
+//./.a.a.a /.a.a.a
+//./.a.a.. /.a.a..
+//./.a.a./ /.a.a.
+//./.a.a/a /.a.a/a
+//./.a.a/. /.a.a
+//./.a.a// /.a.a
+//./.a..aa /.a..aa
+//./.a..a. /.a..a.
+//./.a..a/ /.a..a
+//./.a...a /.a...a
+//./.a.... /.a....
+//./.a.../ /.a...
+//./.a../a /.a../a
+//./.a../. /.a..
+//./.a..// /.a..
+//./.a./aa /.a./aa
+//./.a./a. /.a./a.
+//./.a./a/ /.a./a
+//./.a./.a /.a./.a
+//./.a./.. /
+//./.a././ /.a.
+//./.a.//a /.a./a
+//./.a.//. /.a.
+//./.a./// /.a.
+//./.a/aaa /.a/aaa
+//./.a/aa. /.a/aa.
+//./.a/aa/ /.a/aa
+//./.a/a.a /.a/a.a
+//./.a/a.. /.a/a..
+//./.a/a./ /.a/a.
+//./.a/a/a /.a/a/a
+//./.a/a/. /.a/a
+//./.a/a// /.a/a
+//./.a/.aa /.a/.aa
+//./.a/.a. /.a/.a.
+//./.a/.a/ /.a/.a
+//./.a/..a /.a/..a
+//./.a/... /.a/...
+//./.a/../ /
+//./.a/./a /.a/a
+//./.a/./. /.a
+//./.a/.// /.a
+//./.a//aa /.a/aa
+//./.a//a. /.a/a.
+//./.a//a/ /.a/a
+//./.a//.a /.a/.a
+//./.a//.. /
+//./.a//./ /.a
+//./.a///a /.a/a
+//./.a///. /.a
+//./.a//// /.a
+//./..aaaa /..aaaa
+//./..aaa. /..aaa.
+//./..aaa/ /..aaa
+//./..aa.a /..aa.a
+//./..aa.. /..aa..
+//./..aa./ /..aa.
+//./..aa/a /..aa/a
+//./..aa/. /..aa
+//./..aa// /..aa
+//./..a.aa /..a.aa
+//./..a.a. /..a.a.
+//./..a.a/ /..a.a
+//./..a..a /..a..a
+//./..a... /..a...
+//./..a../ /..a..
+//./..a./a /..a./a
+//./..a./. /..a.
+//./..a.// /..a.
+//./..a/aa /..a/aa
+//./..a/a. /..a/a.
+//./..a/a/ /..a/a
+//./..a/.a /..a/.a
+//./..a/.. /
+//./..a/./ /..a
+//./..a//a /..a/a
+//./..a//. /..a
+//./..a/// /..a
+//./...aaa /...aaa
+//./...aa. /...aa.
+//./...aa/ /...aa
+//./...a.a /...a.a
+//./...a.. /...a..
+//./...a./ /...a.
+//./...a/a /...a/a
+//./...a/. /...a
+//./...a// /...a
+//./....aa /....aa
+//./....a. /....a.
+//./....a/ /....a
+//./.....a /.....a
+//./...... /......
+//./...../ /.....
+//./..../a /..../a
+//./..../. /....
+//./....// /....
+//./.../aa /.../aa
+//./.../a. /.../a.
+//./.../a/ /.../a
+//./.../.a /.../.a
+//./.../.. /
+//./..././ /...
+//./...//a /.../a
+//./...//. /...
+//./.../// /...
+//./../aaa /aaa
+//./../aa. /aa.
+//./../aa/ /aa
+//./../a.a /a.a
+//./../a.. /a..
+//./../a./ /a.
+//./../a/a /a/a
+//./../a/. /a
+//./../a// /a
+//./../.aa /.aa
+//./../.a. /.a.
+//./../.a/ /.a
+//./../..a /..a
+//./../... /...
+//./../../ /
+//./.././a /a
+//./.././. /
+//./../.// /
+//./..//aa /aa
+//./..//a. /a.
+//./..//a/ /a
+//./..//.a /.a
+//./..//.. /
+//./..//./ /
+//./..///a /a
+//./..///. /
+//./..//// /
+//././aaaa /aaaa
+//././aaa. /aaa.
+//././aaa/ /aaa
+//././aa.a /aa.a
+//././aa.. /aa..
+//././aa./ /aa.
+//././aa/a /aa/a
+//././aa/. /aa
+//././aa// /aa
+//././a.aa /a.aa
+//././a.a. /a.a.
+//././a.a/ /a.a
+//././a..a /a..a
+//././a... /a...
+//././a../ /a..
+//././a./a /a./a
+//././a./. /a.
+//././a.// /a.
+//././a/aa /a/aa
+//././a/a. /a/a.
+//././a/a/ /a/a
+//././a/.a /a/.a
+//././a/.. /
+//././a/./ /a
+//././a//a /a/a
+//././a//. /a
+//././a/// /a
+//././.aaa /.aaa
+//././.aa. /.aa.
+//././.aa/ /.aa
+//././.a.a /.a.a
+//././.a.. /.a..
+//././.a./ /.a.
+//././.a/a /.a/a
+//././.a/. /.a
+//././.a// /.a
+//././..aa /..aa
+//././..a. /..a.
+//././..a/ /..a
+//././...a /...a
+//././.... /....
+//././.../ /...
+//././../a /a
+//././../. /
+//././..// /
+//./././aa /aa
+//./././a. /a.
+//./././a/ /a
+//./././.a /.a
+//./././.. /
+//././././ /
+//./././/a /a
+//./././/. /
+//./././// /
+//././/aaa /aaa
+//././/aa. /aa.
+//././/aa/ /aa
+//././/a.a /a.a
+//././/a.. /a..
+//././/a./ /a.
+//././/a/a /a/a
+//././/a/. /a
+//././/a// /a
+//././/.aa /.aa
+//././/.a. /.a.
+//././/.a/ /.a
+//././/..a /..a
+//././/... /...
+//././/../ /
+//././/./a /a
+//././/./. /
+//././/.// /
+//././//aa /aa
+//././//a. /a.
+//././//a/ /a
+//././//.a /.a
+//././//.. /
+//././//./ /
+//././///a /a
+//././///. /
+//././//// /
+//.//aaaaa /aaaaa
+//.//aaaa. /aaaa.
+//.//aaaa/ /aaaa
+//.//aaa.a /aaa.a
+//.//aaa.. /aaa..
+//.//aaa./ /aaa.
+//.//aaa/a /aaa/a
+//.//aaa/. /aaa
+//.//aaa// /aaa
+//.//aa.aa /aa.aa
+//.//aa.a. /aa.a.
+//.//aa.a/ /aa.a
+//.//aa..a /aa..a
+//.//aa... /aa...
+//.//aa../ /aa..
+//.//aa./a /aa./a
+//.//aa./. /aa.
+//.//aa.// /aa.
+//.//aa/aa /aa/aa
+//.//aa/a. /aa/a.
+//.//aa/a/ /aa/a
+//.//aa/.a /aa/.a
+//.//aa/.. /
+//.//aa/./ /aa
+//.//aa//a /aa/a
+//.//aa//. /aa
+//.//aa/// /aa
+//.//a.aaa /a.aaa
+//.//a.aa. /a.aa.
+//.//a.aa/ /a.aa
+//.//a.a.a /a.a.a
+//.//a.a.. /a.a..
+//.//a.a./ /a.a.
+//.//a.a/a /a.a/a
+//.//a.a/. /a.a
+//.//a.a// /a.a
+//.//a..aa /a..aa
+//.//a..a. /a..a.
+//.//a..a/ /a..a
+//.//a...a /a...a
+//.//a.... /a....
+//.//a.../ /a...
+//.//a../a /a../a
+//.//a../. /a..
+//.//a..// /a..
+//.//a./aa /a./aa
+//.//a./a. /a./a.
+//.//a./a/ /a./a
+//.//a./.a /a./.a
+//.//a./.. /
+//.//a././ /a.
+//.//a.//a /a./a
+//.//a.//. /a.
+//.//a./// /a.
+//.//a/aaa /a/aaa
+//.//a/aa. /a/aa.
+//.//a/aa/ /a/aa
+//.//a/a.a /a/a.a
+//.//a/a.. /a/a..
+//.//a/a./ /a/a.
+//.//a/a/a /a/a/a
+//.//a/a/. /a/a
+//.//a/a// /a/a
+//.//a/.aa /a/.aa
+//.//a/.a. /a/.a.
+//.//a/.a/ /a/.a
+//.//a/..a /a/..a
+//.//a/... /a/...
+//.//a/../ /
+//.//a/./a /a/a
+//.//a/./. /a
+//.//a/.// /a
+//.//a//aa /a/aa
+//.//a//a. /a/a.
+//.//a//a/ /a/a
+//.//a//.a /a/.a
+//.//a//.. /
+//.//a//./ /a
+//.//a///a /a/a
+//.//a///. /a
+//.//a//// /a
+//.//.aaaa /.aaaa
+//.//.aaa. /.aaa.
+//.//.aaa/ /.aaa
+//.//.aa.a /.aa.a
+//.//.aa.. /.aa..
+//.//.aa./ /.aa.
+//.//.aa/a /.aa/a
+//.//.aa/. /.aa
+//.//.aa// /.aa
+//.//.a.aa /.a.aa
+//.//.a.a. /.a.a.
+//.//.a.a/ /.a.a
+//.//.a..a /.a..a
+//.//.a... /.a...
+//.//.a../ /.a..
+//.//.a./a /.a./a
+//.//.a./. /.a.
+//.//.a.// /.a.
+//.//.a/aa /.a/aa
+//.//.a/a. /.a/a.
+//.//.a/a/ /.a/a
+//.//.a/.a /.a/.a
+//.//.a/.. /
+//.//.a/./ /.a
+//.//.a//a /.a/a
+//.//.a//. /.a
+//.//.a/// /.a
+//.//..aaa /..aaa
+//.//..aa. /..aa.
+//.//..aa/ /..aa
+//.//..a.a /..a.a
+//.//..a.. /..a..
+//.//..a./ /..a.
+//.//..a/a /..a/a
+//.//..a/. /..a
+//.//..a// /..a
+//.//...aa /...aa
+//.//...a. /...a.
+//.//...a/ /...a
+//.//....a /....a
+//.//..... /.....
+//.//..../ /....
+//.//.../a /.../a
+//.//.../. /...
+//.//...// /...
+//.//../aa /aa
+//.//../a. /a.
+//.//../a/ /a
+//.//../.a /.a
+//.//../.. /
+//.//.././ /
+//.//..//a /a
+//.//..//. /
+//.//../// /
+//.//./aaa /aaa
+//.//./aa. /aa.
+//.//./aa/ /aa
+//.//./a.a /a.a
+//.//./a.. /a..
+//.//./a./ /a.
+//.//./a/a /a/a
+//.//./a/. /a
+//.//./a// /a
+//.//./.aa /.aa
+//.//./.a. /.a.
+//.//./.a/ /.a
+//.//./..a /..a
+//.//./... /...
+//.//./../ /
+//.//././a /a
+//.//././. /
+//.//./.// /
+//.//.//aa /aa
+//.//.//a. /a.
+//.//.//a/ /a
+//.//.//.a /.a
+//.//.//.. /
+//.//.//./ /
+//.//.///a /a
+//.//.///. /
+//.//.//// /
+//.///aaaa /aaaa
+//.///aaa. /aaa.
+//.///aaa/ /aaa
+//.///aa.a /aa.a
+//.///aa.. /aa..
+//.///aa./ /aa.
+//.///aa/a /aa/a
+//.///aa/. /aa
+//.///aa// /aa
+//.///a.aa /a.aa
+//.///a.a. /a.a.
+//.///a.a/ /a.a
+//.///a..a /a..a
+//.///a... /a...
+//.///a../ /a..
+//.///a./a /a./a
+//.///a./. /a.
+//.///a.// /a.
+//.///a/aa /a/aa
+//.///a/a. /a/a.
+//.///a/a/ /a/a
+//.///a/.a /a/.a
+//.///a/.. /
+//.///a/./ /a
+//.///a//a /a/a
+//.///a//. /a
+//.///a/// /a
+//.///.aaa /.aaa
+//.///.aa. /.aa.
+//.///.aa/ /.aa
+//.///.a.a /.a.a
+//.///.a.. /.a..
+//.///.a./ /.a.
+//.///.a/a /.a/a
+//.///.a/. /.a
+//.///.a// /.a
+//.///..aa /..aa
+//.///..a. /..a.
+//.///..a/ /..a
+//.///...a /...a
+//.///.... /....
+//.///.../ /...
+//.///../a /a
+//.///../. /
+//.///..// /
+//.///./aa /aa
+//.///./a. /a.
+//.///./a/ /a
+//.///./.a /.a
+//.///./.. /
+//.///././ /
+//.///.//a /a
+//.///.//. /
+//.///./// /
+//.////aaa /aaa
+//.////aa. /aa.
+//.////aa/ /aa
+//.////a.a /a.a
+//.////a.. /a..
+//.////a./ /a.
+//.////a/a /a/a
+//.////a/. /a
+//.////a// /a
+//.////.aa /.aa
+//.////.a. /.a.
+//.////.a/ /.a
+//.////..a /..a
+//.////... /...
+//.////../ /
+//.////./a /a
+//.////./. /
+//.////.// /
+//./////aa /aa
+//./////a. /a.
+//./////a/ /a
+//./////.a /.a
+//./////.. /
+//./////./ /
+//.//////a /a
+//.//////. /
+//./////// /
+///aaaaaaa /aaaaaaa
+///aaaaaa. /aaaaaa.
+///aaaaaa/ /aaaaaa
+///aaaaa.a /aaaaa.a
+///aaaaa.. /aaaaa..
+///aaaaa./ /aaaaa.
+///aaaaa/a /aaaaa/a
+///aaaaa/. /aaaaa
+///aaaaa// /aaaaa
+///aaaa.aa /aaaa.aa
+///aaaa.a. /aaaa.a.
+///aaaa.a/ /aaaa.a
+///aaaa..a /aaaa..a
+///aaaa... /aaaa...
+///aaaa../ /aaaa..
+///aaaa./a /aaaa./a
+///aaaa./. /aaaa.
+///aaaa.// /aaaa.
+///aaaa/aa /aaaa/aa
+///aaaa/a. /aaaa/a.
+///aaaa/a/ /aaaa/a
+///aaaa/.a /aaaa/.a
+///aaaa/.. /
+///aaaa/./ /aaaa
+///aaaa//a /aaaa/a
+///aaaa//. /aaaa
+///aaaa/// /aaaa
+///aaa.aaa /aaa.aaa
+///aaa.aa. /aaa.aa.
+///aaa.aa/ /aaa.aa
+///aaa.a.a /aaa.a.a
+///aaa.a.. /aaa.a..
+///aaa.a./ /aaa.a.
+///aaa.a/a /aaa.a/a
+///aaa.a/. /aaa.a
+///aaa.a// /aaa.a
+///aaa..aa /aaa..aa
+///aaa..a. /aaa..a.
+///aaa..a/ /aaa..a
+///aaa...a /aaa...a
+///aaa.... /aaa....
+///aaa.../ /aaa...
+///aaa../a /aaa../a
+///aaa../. /aaa..
+///aaa..// /aaa..
+///aaa./aa /aaa./aa
+///aaa./a. /aaa./a.
+///aaa./a/ /aaa./a
+///aaa./.a /aaa./.a
+///aaa./.. /
+///aaa././ /aaa.
+///aaa.//a /aaa./a
+///aaa.//. /aaa.
+///aaa./// /aaa.
+///aaa/aaa /aaa/aaa
+///aaa/aa. /aaa/aa.
+///aaa/aa/ /aaa/aa
+///aaa/a.a /aaa/a.a
+///aaa/a.. /aaa/a..
+///aaa/a./ /aaa/a.
+///aaa/a/a /aaa/a/a
+///aaa/a/. /aaa/a
+///aaa/a// /aaa/a
+///aaa/.aa /aaa/.aa
+///aaa/.a. /aaa/.a.
+///aaa/.a/ /aaa/.a
+///aaa/..a /aaa/..a
+///aaa/... /aaa/...
+///aaa/../ /
+///aaa/./a /aaa/a
+///aaa/./. /aaa
+///aaa/.// /aaa
+///aaa//aa /aaa/aa
+///aaa//a. /aaa/a.
+///aaa//a/ /aaa/a
+///aaa//.a /aaa/.a
+///aaa//.. /
+///aaa//./ /aaa
+///aaa///a /aaa/a
+///aaa///. /aaa
+///aaa//// /aaa
+///aa.aaaa /aa.aaaa
+///aa.aaa. /aa.aaa.
+///aa.aaa/ /aa.aaa
+///aa.aa.a /aa.aa.a
+///aa.aa.. /aa.aa..
+///aa.aa./ /aa.aa.
+///aa.aa/a /aa.aa/a
+///aa.aa/. /aa.aa
+///aa.aa// /aa.aa
+///aa.a.aa /aa.a.aa
+///aa.a.a. /aa.a.a.
+///aa.a.a/ /aa.a.a
+///aa.a..a /aa.a..a
+///aa.a... /aa.a...
+///aa.a../ /aa.a..
+///aa.a./a /aa.a./a
+///aa.a./. /aa.a.
+///aa.a.// /aa.a.
+///aa.a/aa /aa.a/aa
+///aa.a/a. /aa.a/a.
+///aa.a/a/ /aa.a/a
+///aa.a/.a /aa.a/.a
+///aa.a/.. /
+///aa.a/./ /aa.a
+///aa.a//a /aa.a/a
+///aa.a//. /aa.a
+///aa.a/// /aa.a
+///aa..aaa /aa..aaa
+///aa..aa. /aa..aa.
+///aa..aa/ /aa..aa
+///aa..a.a /aa..a.a
+///aa..a.. /aa..a..
+///aa..a./ /aa..a.
+///aa..a/a /aa..a/a
+///aa..a/. /aa..a
+///aa..a// /aa..a
+///aa...aa /aa...aa
+///aa...a. /aa...a.
+///aa...a/ /aa...a
+///aa....a /aa....a
+///aa..... /aa.....
+///aa..../ /aa....
+///aa.../a /aa.../a
+///aa.../. /aa...
+///aa...// /aa...
+///aa../aa /aa../aa
+///aa../a. /aa../a.
+///aa../a/ /aa../a
+///aa../.a /aa../.a
+///aa../.. /
+///aa.././ /aa..
+///aa..//a /aa../a
+///aa..//. /aa..
+///aa../// /aa..
+///aa./aaa /aa./aaa
+///aa./aa. /aa./aa.
+///aa./aa/ /aa./aa
+///aa./a.a /aa./a.a
+///aa./a.. /aa./a..
+///aa./a./ /aa./a.
+///aa./a/a /aa./a/a
+///aa./a/. /aa./a
+///aa./a// /aa./a
+///aa./.aa /aa./.aa
+///aa./.a. /aa./.a.
+///aa./.a/ /aa./.a
+///aa./..a /aa./..a
+///aa./... /aa./...
+///aa./../ /
+///aa././a /aa./a
+///aa././. /aa.
+///aa./.// /aa.
+///aa.//aa /aa./aa
+///aa.//a. /aa./a.
+///aa.//a/ /aa./a
+///aa.//.a /aa./.a
+///aa.//.. /
+///aa.//./ /aa.
+///aa.///a /aa./a
+///aa.///. /aa.
+///aa.//// /aa.
+///aa/aaaa /aa/aaaa
+///aa/aaa. /aa/aaa.
+///aa/aaa/ /aa/aaa
+///aa/aa.a /aa/aa.a
+///aa/aa.. /aa/aa..
+///aa/aa./ /aa/aa.
+///aa/aa/a /aa/aa/a
+///aa/aa/. /aa/aa
+///aa/aa// /aa/aa
+///aa/a.aa /aa/a.aa
+///aa/a.a. /aa/a.a.
+///aa/a.a/ /aa/a.a
+///aa/a..a /aa/a..a
+///aa/a... /aa/a...
+///aa/a../ /aa/a..
+///aa/a./a /aa/a./a
+///aa/a./. /aa/a.
+///aa/a.// /aa/a.
+///aa/a/aa /aa/a/aa
+///aa/a/a. /aa/a/a.
+///aa/a/a/ /aa/a/a
+///aa/a/.a /aa/a/.a
+///aa/a/.. /aa
+///aa/a/./ /aa/a
+///aa/a//a /aa/a/a
+///aa/a//. /aa/a
+///aa/a/// /aa/a
+///aa/.aaa /aa/.aaa
+///aa/.aa. /aa/.aa.
+///aa/.aa/ /aa/.aa
+///aa/.a.a /aa/.a.a
+///aa/.a.. /aa/.a..
+///aa/.a./ /aa/.a.
+///aa/.a/a /aa/.a/a
+///aa/.a/. /aa/.a
+///aa/.a// /aa/.a
+///aa/..aa /aa/..aa
+///aa/..a. /aa/..a.
+///aa/..a/ /aa/..a
+///aa/...a /aa/...a
+///aa/.... /aa/....
+///aa/.../ /aa/...
+///aa/../a /a
+///aa/../. /
+///aa/..// /
+///aa/./aa /aa/aa
+///aa/./a. /aa/a.
+///aa/./a/ /aa/a
+///aa/./.a /aa/.a
+///aa/./.. /
+///aa/././ /aa
+///aa/.//a /aa/a
+///aa/.//. /aa
+///aa/./// /aa
+///aa//aaa /aa/aaa
+///aa//aa. /aa/aa.
+///aa//aa/ /aa/aa
+///aa//a.a /aa/a.a
+///aa//a.. /aa/a..
+///aa//a./ /aa/a.
+///aa//a/a /aa/a/a
+///aa//a/. /aa/a
+///aa//a// /aa/a
+///aa//.aa /aa/.aa
+///aa//.a. /aa/.a.
+///aa//.a/ /aa/.a
+///aa//..a /aa/..a
+///aa//... /aa/...
+///aa//../ /
+///aa//./a /aa/a
+///aa//./. /aa
+///aa//.// /aa
+///aa///aa /aa/aa
+///aa///a. /aa/a.
+///aa///a/ /aa/a
+///aa///.a /aa/.a
+///aa///.. /
+///aa///./ /aa
+///aa////a /aa/a
+///aa////. /aa
+///aa///// /aa
+///a.aaaaa /a.aaaaa
+///a.aaaa. /a.aaaa.
+///a.aaaa/ /a.aaaa
+///a.aaa.a /a.aaa.a
+///a.aaa.. /a.aaa..
+///a.aaa./ /a.aaa.
+///a.aaa/a /a.aaa/a
+///a.aaa/. /a.aaa
+///a.aaa// /a.aaa
+///a.aa.aa /a.aa.aa
+///a.aa.a. /a.aa.a.
+///a.aa.a/ /a.aa.a
+///a.aa..a /a.aa..a
+///a.aa... /a.aa...
+///a.aa../ /a.aa..
+///a.aa./a /a.aa./a
+///a.aa./. /a.aa.
+///a.aa.// /a.aa.
+///a.aa/aa /a.aa/aa
+///a.aa/a. /a.aa/a.
+///a.aa/a/ /a.aa/a
+///a.aa/.a /a.aa/.a
+///a.aa/.. /
+///a.aa/./ /a.aa
+///a.aa//a /a.aa/a
+///a.aa//. /a.aa
+///a.aa/// /a.aa
+///a.a.aaa /a.a.aaa
+///a.a.aa. /a.a.aa.
+///a.a.aa/ /a.a.aa
+///a.a.a.a /a.a.a.a
+///a.a.a.. /a.a.a..
+///a.a.a./ /a.a.a.
+///a.a.a/a /a.a.a/a
+///a.a.a/. /a.a.a
+///a.a.a// /a.a.a
+///a.a..aa /a.a..aa
+///a.a..a. /a.a..a.
+///a.a..a/ /a.a..a
+///a.a...a /a.a...a
+///a.a.... /a.a....
+///a.a.../ /a.a...
+///a.a../a /a.a../a
+///a.a../. /a.a..
+///a.a..// /a.a..
+///a.a./aa /a.a./aa
+///a.a./a. /a.a./a.
+///a.a./a/ /a.a./a
+///a.a./.a /a.a./.a
+///a.a./.. /
+///a.a././ /a.a.
+///a.a.//a /a.a./a
+///a.a.//. /a.a.
+///a.a./// /a.a.
+///a.a/aaa /a.a/aaa
+///a.a/aa. /a.a/aa.
+///a.a/aa/ /a.a/aa
+///a.a/a.a /a.a/a.a
+///a.a/a.. /a.a/a..
+///a.a/a./ /a.a/a.
+///a.a/a/a /a.a/a/a
+///a.a/a/. /a.a/a
+///a.a/a// /a.a/a
+///a.a/.aa /a.a/.aa
+///a.a/.a. /a.a/.a.
+///a.a/.a/ /a.a/.a
+///a.a/..a /a.a/..a
+///a.a/... /a.a/...
+///a.a/../ /
+///a.a/./a /a.a/a
+///a.a/./. /a.a
+///a.a/.// /a.a
+///a.a//aa /a.a/aa
+///a.a//a. /a.a/a.
+///a.a//a/ /a.a/a
+///a.a//.a /a.a/.a
+///a.a//.. /
+///a.a//./ /a.a
+///a.a///a /a.a/a
+///a.a///. /a.a
+///a.a//// /a.a
+///a..aaaa /a..aaaa
+///a..aaa. /a..aaa.
+///a..aaa/ /a..aaa
+///a..aa.a /a..aa.a
+///a..aa.. /a..aa..
+///a..aa./ /a..aa.
+///a..aa/a /a..aa/a
+///a..aa/. /a..aa
+///a..aa// /a..aa
+///a..a.aa /a..a.aa
+///a..a.a. /a..a.a.
+///a..a.a/ /a..a.a
+///a..a..a /a..a..a
+///a..a... /a..a...
+///a..a../ /a..a..
+///a..a./a /a..a./a
+///a..a./. /a..a.
+///a..a.// /a..a.
+///a..a/aa /a..a/aa
+///a..a/a. /a..a/a.
+///a..a/a/ /a..a/a
+///a..a/.a /a..a/.a
+///a..a/.. /
+///a..a/./ /a..a
+///a..a//a /a..a/a
+///a..a//. /a..a
+///a..a/// /a..a
+///a...aaa /a...aaa
+///a...aa. /a...aa.
+///a...aa/ /a...aa
+///a...a.a /a...a.a
+///a...a.. /a...a..
+///a...a./ /a...a.
+///a...a/a /a...a/a
+///a...a/. /a...a
+///a...a// /a...a
+///a....aa /a....aa
+///a....a. /a....a.
+///a....a/ /a....a
+///a.....a /a.....a
+///a...... /a......
+///a...../ /a.....
+///a..../a /a..../a
+///a..../. /a....
+///a....// /a....
+///a.../aa /a.../aa
+///a.../a. /a.../a.
+///a.../a/ /a.../a
+///a.../.a /a.../.a
+///a.../.. /
+///a..././ /a...
+///a...//a /a.../a
+///a...//. /a...
+///a.../// /a...
+///a../aaa /a../aaa
+///a../aa. /a../aa.
+///a../aa/ /a../aa
+///a../a.a /a../a.a
+///a../a.. /a../a..
+///a../a./ /a../a.
+///a../a/a /a../a/a
+///a../a/. /a../a
+///a../a// /a../a
+///a../.aa /a../.aa
+///a../.a. /a../.a.
+///a../.a/ /a../.a
+///a../..a /a../..a
+///a../... /a../...
+///a../../ /
+///a.././a /a../a
+///a.././. /a..
+///a../.// /a..
+///a..//aa /a../aa
+///a..//a. /a../a.
+///a..//a/ /a../a
+///a..//.a /a../.a
+///a..//.. /
+///a..//./ /a..
+///a..///a /a../a
+///a..///. /a..
+///a..//// /a..
+///a./aaaa /a./aaaa
+///a./aaa. /a./aaa.
+///a./aaa/ /a./aaa
+///a./aa.a /a./aa.a
+///a./aa.. /a./aa..
+///a./aa./ /a./aa.
+///a./aa/a /a./aa/a
+///a./aa/. /a./aa
+///a./aa// /a./aa
+///a./a.aa /a./a.aa
+///a./a.a. /a./a.a.
+///a./a.a/ /a./a.a
+///a./a..a /a./a..a
+///a./a... /a./a...
+///a./a../ /a./a..
+///a./a./a /a./a./a
+///a./a./. /a./a.
+///a./a.// /a./a.
+///a./a/aa /a./a/aa
+///a./a/a. /a./a/a.
+///a./a/a/ /a./a/a
+///a./a/.a /a./a/.a
+///a./a/.. /a.
+///a./a/./ /a./a
+///a./a//a /a./a/a
+///a./a//. /a./a
+///a./a/// /a./a
+///a./.aaa /a./.aaa
+///a./.aa. /a./.aa.
+///a./.aa/ /a./.aa
+///a./.a.a /a./.a.a
+///a./.a.. /a./.a..
+///a./.a./ /a./.a.
+///a./.a/a /a./.a/a
+///a./.a/. /a./.a
+///a./.a// /a./.a
+///a./..aa /a./..aa
+///a./..a. /a./..a.
+///a./..a/ /a./..a
+///a./...a /a./...a
+///a./.... /a./....
+///a./.../ /a./...
+///a./../a /a
+///a./../. /
+///a./..// /
+///a././aa /a./aa
+///a././a. /a./a.
+///a././a/ /a./a
+///a././.a /a./.a
+///a././.. /
+///a./././ /a.
+///a././/a /a./a
+///a././/. /a.
+///a././// /a.
+///a.//aaa /a./aaa
+///a.//aa. /a./aa.
+///a.//aa/ /a./aa
+///a.//a.a /a./a.a
+///a.//a.. /a./a..
+///a.//a./ /a./a.
+///a.//a/a /a./a/a
+///a.//a/. /a./a
+///a.//a// /a./a
+///a.//.aa /a./.aa
+///a.//.a. /a./.a.
+///a.//.a/ /a./.a
+///a.//..a /a./..a
+///a.//... /a./...
+///a.//../ /
+///a.//./a /a./a
+///a.//./. /a.
+///a.//.// /a.
+///a.///aa /a./aa
+///a.///a. /a./a.
+///a.///a/ /a./a
+///a.///.a /a./.a
+///a.///.. /
+///a.///./ /a.
+///a.////a /a./a
+///a.////. /a.
+///a.///// /a.
+///a/aaaaa /a/aaaaa
+///a/aaaa. /a/aaaa.
+///a/aaaa/ /a/aaaa
+///a/aaa.a /a/aaa.a
+///a/aaa.. /a/aaa..
+///a/aaa./ /a/aaa.
+///a/aaa/a /a/aaa/a
+///a/aaa/. /a/aaa
+///a/aaa// /a/aaa
+///a/aa.aa /a/aa.aa
+///a/aa.a. /a/aa.a.
+///a/aa.a/ /a/aa.a
+///a/aa..a /a/aa..a
+///a/aa... /a/aa...
+///a/aa../ /a/aa..
+///a/aa./a /a/aa./a
+///a/aa./. /a/aa.
+///a/aa.// /a/aa.
+///a/aa/aa /a/aa/aa
+///a/aa/a. /a/aa/a.
+///a/aa/a/ /a/aa/a
+///a/aa/.a /a/aa/.a
+///a/aa/.. /a
+///a/aa/./ /a/aa
+///a/aa//a /a/aa/a
+///a/aa//. /a/aa
+///a/aa/// /a/aa
+///a/a.aaa /a/a.aaa
+///a/a.aa. /a/a.aa.
+///a/a.aa/ /a/a.aa
+///a/a.a.a /a/a.a.a
+///a/a.a.. /a/a.a..
+///a/a.a./ /a/a.a.
+///a/a.a/a /a/a.a/a
+///a/a.a/. /a/a.a
+///a/a.a// /a/a.a
+///a/a..aa /a/a..aa
+///a/a..a. /a/a..a.
+///a/a..a/ /a/a..a
+///a/a...a /a/a...a
+///a/a.... /a/a....
+///a/a.../ /a/a...
+///a/a../a /a/a../a
+///a/a../. /a/a..
+///a/a..// /a/a..
+///a/a./aa /a/a./aa
+///a/a./a. /a/a./a.
+///a/a./a/ /a/a./a
+///a/a./.a /a/a./.a
+///a/a./.. /a
+///a/a././ /a/a.
+///a/a.//a /a/a./a
+///a/a.//. /a/a.
+///a/a./// /a/a.
+///a/a/aaa /a/a/aaa
+///a/a/aa. /a/a/aa.
+///a/a/aa/ /a/a/aa
+///a/a/a.a /a/a/a.a
+///a/a/a.. /a/a/a..
+///a/a/a./ /a/a/a.
+///a/a/a/a /a/a/a/a
+///a/a/a/. /a/a/a
+///a/a/a// /a/a/a
+///a/a/.aa /a/a/.aa
+///a/a/.a. /a/a/.a.
+///a/a/.a/ /a/a/.a
+///a/a/..a /a/a/..a
+///a/a/... /a/a/...
+///a/a/../ /a
+///a/a/./a /a/a/a
+///a/a/./. /a/a
+///a/a/.// /a/a
+///a/a//aa /a/a/aa
+///a/a//a. /a/a/a.
+///a/a//a/ /a/a/a
+///a/a//.a /a/a/.a
+///a/a//.. /a
+///a/a//./ /a/a
+///a/a///a /a/a/a
+///a/a///. /a/a
+///a/a//// /a/a
+///a/.aaaa /a/.aaaa
+///a/.aaa. /a/.aaa.
+///a/.aaa/ /a/.aaa
+///a/.aa.a /a/.aa.a
+///a/.aa.. /a/.aa..
+///a/.aa./ /a/.aa.
+///a/.aa/a /a/.aa/a
+///a/.aa/. /a/.aa
+///a/.aa// /a/.aa
+///a/.a.aa /a/.a.aa
+///a/.a.a. /a/.a.a.
+///a/.a.a/ /a/.a.a
+///a/.a..a /a/.a..a
+///a/.a... /a/.a...
+///a/.a../ /a/.a..
+///a/.a./a /a/.a./a
+///a/.a./. /a/.a.
+///a/.a.// /a/.a.
+///a/.a/aa /a/.a/aa
+///a/.a/a. /a/.a/a.
+///a/.a/a/ /a/.a/a
+///a/.a/.a /a/.a/.a
+///a/.a/.. /a
+///a/.a/./ /a/.a
+///a/.a//a /a/.a/a
+///a/.a//. /a/.a
+///a/.a/// /a/.a
+///a/..aaa /a/..aaa
+///a/..aa. /a/..aa.
+///a/..aa/ /a/..aa
+///a/..a.a /a/..a.a
+///a/..a.. /a/..a..
+///a/..a./ /a/..a.
+///a/..a/a /a/..a/a
+///a/..a/. /a/..a
+///a/..a// /a/..a
+///a/...aa /a/...aa
+///a/...a. /a/...a.
+///a/...a/ /a/...a
+///a/....a /a/....a
+///a/..... /a/.....
+///a/..../ /a/....
+///a/.../a /a/.../a
+///a/.../. /a/...
+///a/...// /a/...
+///a/../aa /aa
+///a/../a. /a.
+///a/../a/ /a
+///a/../.a /.a
+///a/../.. /
+///a/.././ /
+///a/..//a /a
+///a/..//. /
+///a/../// /
+///a/./aaa /a/aaa
+///a/./aa. /a/aa.
+///a/./aa/ /a/aa
+///a/./a.a /a/a.a
+///a/./a.. /a/a..
+///a/./a./ /a/a.
+///a/./a/a /a/a/a
+///a/./a/. /a/a
+///a/./a// /a/a
+///a/./.aa /a/.aa
+///a/./.a. /a/.a.
+///a/./.a/ /a/.a
+///a/./..a /a/..a
+///a/./... /a/...
+///a/./../ /
+///a/././a /a/a
+///a/././. /a
+///a/./.// /a
+///a/.//aa /a/aa
+///a/.//a. /a/a.
+///a/.//a/ /a/a
+///a/.//.a /a/.a
+///a/.//.. /
+///a/.//./ /a
+///a/.///a /a/a
+///a/.///. /a
+///a/.//// /a
+///a//aaaa /a/aaaa
+///a//aaa. /a/aaa.
+///a//aaa/ /a/aaa
+///a//aa.a /a/aa.a
+///a//aa.. /a/aa..
+///a//aa./ /a/aa.
+///a//aa/a /a/aa/a
+///a//aa/. /a/aa
+///a//aa// /a/aa
+///a//a.aa /a/a.aa
+///a//a.a. /a/a.a.
+///a//a.a/ /a/a.a
+///a//a..a /a/a..a
+///a//a... /a/a...
+///a//a../ /a/a..
+///a//a./a /a/a./a
+///a//a./. /a/a.
+///a//a.// /a/a.
+///a//a/aa /a/a/aa
+///a//a/a. /a/a/a.
+///a//a/a/ /a/a/a
+///a//a/.a /a/a/.a
+///a//a/.. /a
+///a//a/./ /a/a
+///a//a//a /a/a/a
+///a//a//. /a/a
+///a//a/// /a/a
+///a//.aaa /a/.aaa
+///a//.aa. /a/.aa.
+///a//.aa/ /a/.aa
+///a//.a.a /a/.a.a
+///a//.a.. /a/.a..
+///a//.a./ /a/.a.
+///a//.a/a /a/.a/a
+///a//.a/. /a/.a
+///a//.a// /a/.a
+///a//..aa /a/..aa
+///a//..a. /a/..a.
+///a//..a/ /a/..a
+///a//...a /a/...a
+///a//.... /a/....
+///a//.../ /a/...
+///a//../a /a
+///a//../. /
+///a//..// /
+///a//./aa /a/aa
+///a//./a. /a/a.
+///a//./a/ /a/a
+///a//./.a /a/.a
+///a//./.. /
+///a//././ /a
+///a//.//a /a/a
+///a//.//. /a
+///a//./// /a
+///a///aaa /a/aaa
+///a///aa. /a/aa.
+///a///aa/ /a/aa
+///a///a.a /a/a.a
+///a///a.. /a/a..
+///a///a./ /a/a.
+///a///a/a /a/a/a
+///a///a/. /a/a
+///a///a// /a/a
+///a///.aa /a/.aa
+///a///.a. /a/.a.
+///a///.a/ /a/.a
+///a///..a /a/..a
+///a///... /a/...
+///a///../ /
+///a///./a /a/a
+///a///./. /a
+///a///.// /a
+///a////aa /a/aa
+///a////a. /a/a.
+///a////a/ /a/a
+///a////.a /a/.a
+///a////.. /
+///a////./ /a
+///a/////a /a/a
+///a/////. /a
+///a////// /a
+///.aaaaaa /.aaaaaa
+///.aaaaa. /.aaaaa.
+///.aaaaa/ /.aaaaa
+///.aaaa.a /.aaaa.a
+///.aaaa.. /.aaaa..
+///.aaaa./ /.aaaa.
+///.aaaa/a /.aaaa/a
+///.aaaa/. /.aaaa
+///.aaaa// /.aaaa
+///.aaa.aa /.aaa.aa
+///.aaa.a. /.aaa.a.
+///.aaa.a/ /.aaa.a
+///.aaa..a /.aaa..a
+///.aaa... /.aaa...
+///.aaa../ /.aaa..
+///.aaa./a /.aaa./a
+///.aaa./. /.aaa.
+///.aaa.// /.aaa.
+///.aaa/aa /.aaa/aa
+///.aaa/a. /.aaa/a.
+///.aaa/a/ /.aaa/a
+///.aaa/.a /.aaa/.a
+///.aaa/.. /
+///.aaa/./ /.aaa
+///.aaa//a /.aaa/a
+///.aaa//. /.aaa
+///.aaa/// /.aaa
+///.aa.aaa /.aa.aaa
+///.aa.aa. /.aa.aa.
+///.aa.aa/ /.aa.aa
+///.aa.a.a /.aa.a.a
+///.aa.a.. /.aa.a..
+///.aa.a./ /.aa.a.
+///.aa.a/a /.aa.a/a
+///.aa.a/. /.aa.a
+///.aa.a// /.aa.a
+///.aa..aa /.aa..aa
+///.aa..a. /.aa..a.
+///.aa..a/ /.aa..a
+///.aa...a /.aa...a
+///.aa.... /.aa....
+///.aa.../ /.aa...
+///.aa../a /.aa../a
+///.aa../. /.aa..
+///.aa..// /.aa..
+///.aa./aa /.aa./aa
+///.aa./a. /.aa./a.
+///.aa./a/ /.aa./a
+///.aa./.a /.aa./.a
+///.aa./.. /
+///.aa././ /.aa.
+///.aa.//a /.aa./a
+///.aa.//. /.aa.
+///.aa./// /.aa.
+///.aa/aaa /.aa/aaa
+///.aa/aa. /.aa/aa.
+///.aa/aa/ /.aa/aa
+///.aa/a.a /.aa/a.a
+///.aa/a.. /.aa/a..
+///.aa/a./ /.aa/a.
+///.aa/a/a /.aa/a/a
+///.aa/a/. /.aa/a
+///.aa/a// /.aa/a
+///.aa/.aa /.aa/.aa
+///.aa/.a. /.aa/.a.
+///.aa/.a/ /.aa/.a
+///.aa/..a /.aa/..a
+///.aa/... /.aa/...
+///.aa/../ /
+///.aa/./a /.aa/a
+///.aa/./. /.aa
+///.aa/.// /.aa
+///.aa//aa /.aa/aa
+///.aa//a. /.aa/a.
+///.aa//a/ /.aa/a
+///.aa//.a /.aa/.a
+///.aa//.. /
+///.aa//./ /.aa
+///.aa///a /.aa/a
+///.aa///. /.aa
+///.aa//// /.aa
+///.a.aaaa /.a.aaaa
+///.a.aaa. /.a.aaa.
+///.a.aaa/ /.a.aaa
+///.a.aa.a /.a.aa.a
+///.a.aa.. /.a.aa..
+///.a.aa./ /.a.aa.
+///.a.aa/a /.a.aa/a
+///.a.aa/. /.a.aa
+///.a.aa// /.a.aa
+///.a.a.aa /.a.a.aa
+///.a.a.a. /.a.a.a.
+///.a.a.a/ /.a.a.a
+///.a.a..a /.a.a..a
+///.a.a... /.a.a...
+///.a.a../ /.a.a..
+///.a.a./a /.a.a./a
+///.a.a./. /.a.a.
+///.a.a.// /.a.a.
+///.a.a/aa /.a.a/aa
+///.a.a/a. /.a.a/a.
+///.a.a/a/ /.a.a/a
+///.a.a/.a /.a.a/.a
+///.a.a/.. /
+///.a.a/./ /.a.a
+///.a.a//a /.a.a/a
+///.a.a//. /.a.a
+///.a.a/// /.a.a
+///.a..aaa /.a..aaa
+///.a..aa. /.a..aa.
+///.a..aa/ /.a..aa
+///.a..a.a /.a..a.a
+///.a..a.. /.a..a..
+///.a..a./ /.a..a.
+///.a..a/a /.a..a/a
+///.a..a/. /.a..a
+///.a..a// /.a..a
+///.a...aa /.a...aa
+///.a...a. /.a...a.
+///.a...a/ /.a...a
+///.a....a /.a....a
+///.a..... /.a.....
+///.a..../ /.a....
+///.a.../a /.a.../a
+///.a.../. /.a...
+///.a...// /.a...
+///.a../aa /.a../aa
+///.a../a. /.a../a.
+///.a../a/ /.a../a
+///.a../.a /.a../.a
+///.a../.. /
+///.a.././ /.a..
+///.a..//a /.a../a
+///.a..//. /.a..
+///.a../// /.a..
+///.a./aaa /.a./aaa
+///.a./aa. /.a./aa.
+///.a./aa/ /.a./aa
+///.a./a.a /.a./a.a
+///.a./a.. /.a./a..
+///.a./a./ /.a./a.
+///.a./a/a /.a./a/a
+///.a./a/. /.a./a
+///.a./a// /.a./a
+///.a./.aa /.a./.aa
+///.a./.a. /.a./.a.
+///.a./.a/ /.a./.a
+///.a./..a /.a./..a
+///.a./... /.a./...
+///.a./../ /
+///.a././a /.a./a
+///.a././. /.a.
+///.a./.// /.a.
+///.a.//aa /.a./aa
+///.a.//a. /.a./a.
+///.a.//a/ /.a./a
+///.a.//.a /.a./.a
+///.a.//.. /
+///.a.//./ /.a.
+///.a.///a /.a./a
+///.a.///. /.a.
+///.a.//// /.a.
+///.a/aaaa /.a/aaaa
+///.a/aaa. /.a/aaa.
+///.a/aaa/ /.a/aaa
+///.a/aa.a /.a/aa.a
+///.a/aa.. /.a/aa..
+///.a/aa./ /.a/aa.
+///.a/aa/a /.a/aa/a
+///.a/aa/. /.a/aa
+///.a/aa// /.a/aa
+///.a/a.aa /.a/a.aa
+///.a/a.a. /.a/a.a.
+///.a/a.a/ /.a/a.a
+///.a/a..a /.a/a..a
+///.a/a... /.a/a...
+///.a/a../ /.a/a..
+///.a/a./a /.a/a./a
+///.a/a./. /.a/a.
+///.a/a.// /.a/a.
+///.a/a/aa /.a/a/aa
+///.a/a/a. /.a/a/a.
+///.a/a/a/ /.a/a/a
+///.a/a/.a /.a/a/.a
+///.a/a/.. /.a
+///.a/a/./ /.a/a
+///.a/a//a /.a/a/a
+///.a/a//. /.a/a
+///.a/a/// /.a/a
+///.a/.aaa /.a/.aaa
+///.a/.aa. /.a/.aa.
+///.a/.aa/ /.a/.aa
+///.a/.a.a /.a/.a.a
+///.a/.a.. /.a/.a..
+///.a/.a./ /.a/.a.
+///.a/.a/a /.a/.a/a
+///.a/.a/. /.a/.a
+///.a/.a// /.a/.a
+///.a/..aa /.a/..aa
+///.a/..a. /.a/..a.
+///.a/..a/ /.a/..a
+///.a/...a /.a/...a
+///.a/.... /.a/....
+///.a/.../ /.a/...
+///.a/../a /a
+///.a/../. /
+///.a/..// /
+///.a/./aa /.a/aa
+///.a/./a. /.a/a.
+///.a/./a/ /.a/a
+///.a/./.a /.a/.a
+///.a/./.. /
+///.a/././ /.a
+///.a/.//a /.a/a
+///.a/.//. /.a
+///.a/./// /.a
+///.a//aaa /.a/aaa
+///.a//aa. /.a/aa.
+///.a//aa/ /.a/aa
+///.a//a.a /.a/a.a
+///.a//a.. /.a/a..
+///.a//a./ /.a/a.
+///.a//a/a /.a/a/a
+///.a//a/. /.a/a
+///.a//a// /.a/a
+///.a//.aa /.a/.aa
+///.a//.a. /.a/.a.
+///.a//.a/ /.a/.a
+///.a//..a /.a/..a
+///.a//... /.a/...
+///.a//../ /
+///.a//./a /.a/a
+///.a//./. /.a
+///.a//.// /.a
+///.a///aa /.a/aa
+///.a///a. /.a/a.
+///.a///a/ /.a/a
+///.a///.a /.a/.a
+///.a///.. /
+///.a///./ /.a
+///.a////a /.a/a
+///.a////. /.a
+///.a///// /.a
+///..aaaaa /..aaaaa
+///..aaaa. /..aaaa.
+///..aaaa/ /..aaaa
+///..aaa.a /..aaa.a
+///..aaa.. /..aaa..
+///..aaa./ /..aaa.
+///..aaa/a /..aaa/a
+///..aaa/. /..aaa
+///..aaa// /..aaa
+///..aa.aa /..aa.aa
+///..aa.a. /..aa.a.
+///..aa.a/ /..aa.a
+///..aa..a /..aa..a
+///..aa... /..aa...
+///..aa../ /..aa..
+///..aa./a /..aa./a
+///..aa./. /..aa.
+///..aa.// /..aa.
+///..aa/aa /..aa/aa
+///..aa/a. /..aa/a.
+///..aa/a/ /..aa/a
+///..aa/.a /..aa/.a
+///..aa/.. /
+///..aa/./ /..aa
+///..aa//a /..aa/a
+///..aa//. /..aa
+///..aa/// /..aa
+///..a.aaa /..a.aaa
+///..a.aa. /..a.aa.
+///..a.aa/ /..a.aa
+///..a.a.a /..a.a.a
+///..a.a.. /..a.a..
+///..a.a./ /..a.a.
+///..a.a/a /..a.a/a
+///..a.a/. /..a.a
+///..a.a// /..a.a
+///..a..aa /..a..aa
+///..a..a. /..a..a.
+///..a..a/ /..a..a
+///..a...a /..a...a
+///..a.... /..a....
+///..a.../ /..a...
+///..a../a /..a../a
+///..a../. /..a..
+///..a..// /..a..
+///..a./aa /..a./aa
+///..a./a. /..a./a.
+///..a./a/ /..a./a
+///..a./.a /..a./.a
+///..a./.. /
+///..a././ /..a.
+///..a.//a /..a./a
+///..a.//. /..a.
+///..a./// /..a.
+///..a/aaa /..a/aaa
+///..a/aa. /..a/aa.
+///..a/aa/ /..a/aa
+///..a/a.a /..a/a.a
+///..a/a.. /..a/a..
+///..a/a./ /..a/a.
+///..a/a/a /..a/a/a
+///..a/a/. /..a/a
+///..a/a// /..a/a
+///..a/.aa /..a/.aa
+///..a/.a. /..a/.a.
+///..a/.a/ /..a/.a
+///..a/..a /..a/..a
+///..a/... /..a/...
+///..a/../ /
+///..a/./a /..a/a
+///..a/./. /..a
+///..a/.// /..a
+///..a//aa /..a/aa
+///..a//a. /..a/a.
+///..a//a/ /..a/a
+///..a//.a /..a/.a
+///..a//.. /
+///..a//./ /..a
+///..a///a /..a/a
+///..a///. /..a
+///..a//// /..a
+///...aaaa /...aaaa
+///...aaa. /...aaa.
+///...aaa/ /...aaa
+///...aa.a /...aa.a
+///...aa.. /...aa..
+///...aa./ /...aa.
+///...aa/a /...aa/a
+///...aa/. /...aa
+///...aa// /...aa
+///...a.aa /...a.aa
+///...a.a. /...a.a.
+///...a.a/ /...a.a
+///...a..a /...a..a
+///...a... /...a...
+///...a../ /...a..
+///...a./a /...a./a
+///...a./. /...a.
+///...a.// /...a.
+///...a/aa /...a/aa
+///...a/a. /...a/a.
+///...a/a/ /...a/a
+///...a/.a /...a/.a
+///...a/.. /
+///...a/./ /...a
+///...a//a /...a/a
+///...a//. /...a
+///...a/// /...a
+///....aaa /....aaa
+///....aa. /....aa.
+///....aa/ /....aa
+///....a.a /....a.a
+///....a.. /....a..
+///....a./ /....a.
+///....a/a /....a/a
+///....a/. /....a
+///....a// /....a
+///.....aa /.....aa
+///.....a. /.....a.
+///.....a/ /.....a
+///......a /......a
+///....... /.......
+///....../ /......
+///...../a /...../a
+///...../. /.....
+///.....// /.....
+///..../aa /..../aa
+///..../a. /..../a.
+///..../a/ /..../a
+///..../.a /..../.a
+///..../.. /
+///...././ /....
+///....//a /..../a
+///....//. /....
+///..../// /....
+///.../aaa /.../aaa
+///.../aa. /.../aa.
+///.../aa/ /.../aa
+///.../a.a /.../a.a
+///.../a.. /.../a..
+///.../a./ /.../a.
+///.../a/a /.../a/a
+///.../a/. /.../a
+///.../a// /.../a
+///.../.aa /.../.aa
+///.../.a. /.../.a.
+///.../.a/ /.../.a
+///.../..a /.../..a
+///.../... /.../...
+///.../../ /
+///..././a /.../a
+///..././. /...
+///.../.// /...
+///...//aa /.../aa
+///...//a. /.../a.
+///...//a/ /.../a
+///...//.a /.../.a
+///...//.. /
+///...//./ /...
+///...///a /.../a
+///...///. /...
+///...//// /...
+///../aaaa /aaaa
+///../aaa. /aaa.
+///../aaa/ /aaa
+///../aa.a /aa.a
+///../aa.. /aa..
+///../aa./ /aa.
+///../aa/a /aa/a
+///../aa/. /aa
+///../aa// /aa
+///../a.aa /a.aa
+///../a.a. /a.a.
+///../a.a/ /a.a
+///../a..a /a..a
+///../a... /a...
+///../a../ /a..
+///../a./a /a./a
+///../a./. /a.
+///../a.// /a.
+///../a/aa /a/aa
+///../a/a. /a/a.
+///../a/a/ /a/a
+///../a/.a /a/.a
+///../a/.. /
+///../a/./ /a
+///../a//a /a/a
+///../a//. /a
+///../a/// /a
+///../.aaa /.aaa
+///../.aa. /.aa.
+///../.aa/ /.aa
+///../.a.a /.a.a
+///../.a.. /.a..
+///../.a./ /.a.
+///../.a/a /.a/a
+///../.a/. /.a
+///../.a// /.a
+///../..aa /..aa
+///../..a. /..a.
+///../..a/ /..a
+///../...a /...a
+///../.... /....
+///../.../ /...
+///../../a /a
+///../../. /
+///../..// /
+///.././aa /aa
+///.././a. /a.
+///.././a/ /a
+///.././.a /.a
+///.././.. /
+///../././ /
+///.././/a /a
+///.././/. /
+///.././// /
+///..//aaa /aaa
+///..//aa. /aa.
+///..//aa/ /aa
+///..//a.a /a.a
+///..//a.. /a..
+///..//a./ /a.
+///..//a/a /a/a
+///..//a/. /a
+///..//a// /a
+///..//.aa /.aa
+///..//.a. /.a.
+///..//.a/ /.a
+///..//..a /..a
+///..//... /...
+///..//../ /
+///..//./a /a
+///..//./. /
+///..//.// /
+///..///aa /aa
+///..///a. /a.
+///..///a/ /a
+///..///.a /.a
+///..///.. /
+///..///./ /
+///..////a /a
+///..////. /
+///..///// /
+///./aaaaa /aaaaa
+///./aaaa. /aaaa.
+///./aaaa/ /aaaa
+///./aaa.a /aaa.a
+///./aaa.. /aaa..
+///./aaa./ /aaa.
+///./aaa/a /aaa/a
+///./aaa/. /aaa
+///./aaa// /aaa
+///./aa.aa /aa.aa
+///./aa.a. /aa.a.
+///./aa.a/ /aa.a
+///./aa..a /aa..a
+///./aa... /aa...
+///./aa../ /aa..
+///./aa./a /aa./a
+///./aa./. /aa.
+///./aa.// /aa.
+///./aa/aa /aa/aa
+///./aa/a. /aa/a.
+///./aa/a/ /aa/a
+///./aa/.a /aa/.a
+///./aa/.. /
+///./aa/./ /aa
+///./aa//a /aa/a
+///./aa//. /aa
+///./aa/// /aa
+///./a.aaa /a.aaa
+///./a.aa. /a.aa.
+///./a.aa/ /a.aa
+///./a.a.a /a.a.a
+///./a.a.. /a.a..
+///./a.a./ /a.a.
+///./a.a/a /a.a/a
+///./a.a/. /a.a
+///./a.a// /a.a
+///./a..aa /a..aa
+///./a..a. /a..a.
+///./a..a/ /a..a
+///./a...a /a...a
+///./a.... /a....
+///./a.../ /a...
+///./a../a /a../a
+///./a../. /a..
+///./a..// /a..
+///./a./aa /a./aa
+///./a./a. /a./a.
+///./a./a/ /a./a
+///./a./.a /a./.a
+///./a./.. /
+///./a././ /a.
+///./a.//a /a./a
+///./a.//. /a.
+///./a./// /a.
+///./a/aaa /a/aaa
+///./a/aa. /a/aa.
+///./a/aa/ /a/aa
+///./a/a.a /a/a.a
+///./a/a.. /a/a..
+///./a/a./ /a/a.
+///./a/a/a /a/a/a
+///./a/a/. /a/a
+///./a/a// /a/a
+///./a/.aa /a/.aa
+///./a/.a. /a/.a.
+///./a/.a/ /a/.a
+///./a/..a /a/..a
+///./a/... /a/...
+///./a/../ /
+///./a/./a /a/a
+///./a/./. /a
+///./a/.// /a
+///./a//aa /a/aa
+///./a//a. /a/a.
+///./a//a/ /a/a
+///./a//.a /a/.a
+///./a//.. /
+///./a//./ /a
+///./a///a /a/a
+///./a///. /a
+///./a//// /a
+///./.aaaa /.aaaa
+///./.aaa. /.aaa.
+///./.aaa/ /.aaa
+///./.aa.a /.aa.a
+///./.aa.. /.aa..
+///./.aa./ /.aa.
+///./.aa/a /.aa/a
+///./.aa/. /.aa
+///./.aa// /.aa
+///./.a.aa /.a.aa
+///./.a.a. /.a.a.
+///./.a.a/ /.a.a
+///./.a..a /.a..a
+///./.a... /.a...
+///./.a../ /.a..
+///./.a./a /.a./a
+///./.a./. /.a.
+///./.a.// /.a.
+///./.a/aa /.a/aa
+///./.a/a. /.a/a.
+///./.a/a/ /.a/a
+///./.a/.a /.a/.a
+///./.a/.. /
+///./.a/./ /.a
+///./.a//a /.a/a
+///./.a//. /.a
+///./.a/// /.a
+///./..aaa /..aaa
+///./..aa. /..aa.
+///./..aa/ /..aa
+///./..a.a /..a.a
+///./..a.. /..a..
+///./..a./ /..a.
+///./..a/a /..a/a
+///./..a/. /..a
+///./..a// /..a
+///./...aa /...aa
+///./...a. /...a.
+///./...a/ /...a
+///./....a /....a
+///./..... /.....
+///./..../ /....
+///./.../a /.../a
+///./.../. /...
+///./...// /...
+///./../aa /aa
+///./../a. /a.
+///./../a/ /a
+///./../.a /.a
+///./../.. /
+///./.././ /
+///./..//a /a
+///./..//. /
+///./../// /
+///././aaa /aaa
+///././aa. /aa.
+///././aa/ /aa
+///././a.a /a.a
+///././a.. /a..
+///././a./ /a.
+///././a/a /a/a
+///././a/. /a
+///././a// /a
+///././.aa /.aa
+///././.a. /.a.
+///././.a/ /.a
+///././..a /..a
+///././... /...
+///././../ /
+///./././a /a
+///./././. /
+///././.// /
+///././/aa /aa
+///././/a. /a.
+///././/a/ /a
+///././/.a /.a
+///././/.. /
+///././/./ /
+///././//a /a
+///././//. /
+///././/// /
+///.//aaaa /aaaa
+///.//aaa. /aaa.
+///.//aaa/ /aaa
+///.//aa.a /aa.a
+///.//aa.. /aa..
+///.//aa./ /aa.
+///.//aa/a /aa/a
+///.//aa/. /aa
+///.//aa// /aa
+///.//a.aa /a.aa
+///.//a.a. /a.a.
+///.//a.a/ /a.a
+///.//a..a /a..a
+///.//a... /a...
+///.//a../ /a..
+///.//a./a /a./a
+///.//a./. /a.
+///.//a.// /a.
+///.//a/aa /a/aa
+///.//a/a. /a/a.
+///.//a/a/ /a/a
+///.//a/.a /a/.a
+///.//a/.. /
+///.//a/./ /a
+///.//a//a /a/a
+///.//a//. /a
+///.//a/// /a
+///.//.aaa /.aaa
+///.//.aa. /.aa.
+///.//.aa/ /.aa
+///.//.a.a /.a.a
+///.//.a.. /.a..
+///.//.a./ /.a.
+///.//.a/a /.a/a
+///.//.a/. /.a
+///.//.a// /.a
+///.//..aa /..aa
+///.//..a. /..a.
+///.//..a/ /..a
+///.//...a /...a
+///.//.... /....
+///.//.../ /...
+///.//../a /a
+///.//../. /
+///.//..// /
+///.//./aa /aa
+///.//./a. /a.
+///.//./a/ /a
+///.//./.a /.a
+///.//./.. /
+///.//././ /
+///.//.//a /a
+///.//.//. /
+///.//./// /
+///.///aaa /aaa
+///.///aa. /aa.
+///.///aa/ /aa
+///.///a.a /a.a
+///.///a.. /a..
+///.///a./ /a.
+///.///a/a /a/a
+///.///a/. /a
+///.///a// /a
+///.///.aa /.aa
+///.///.a. /.a.
+///.///.a/ /.a
+///.///..a /..a
+///.///... /...
+///.///../ /
+///.///./a /a
+///.///./. /
+///.///.// /
+///.////aa /aa
+///.////a. /a.
+///.////a/ /a
+///.////.a /.a
+///.////.. /
+///.////./ /
+///./////a /a
+///./////. /
+///.////// /
+////aaaaaa /aaaaaa
+////aaaaa. /aaaaa.
+////aaaaa/ /aaaaa
+////aaaa.a /aaaa.a
+////aaaa.. /aaaa..
+////aaaa./ /aaaa.
+////aaaa/a /aaaa/a
+////aaaa/. /aaaa
+////aaaa// /aaaa
+////aaa.aa /aaa.aa
+////aaa.a. /aaa.a.
+////aaa.a/ /aaa.a
+////aaa..a /aaa..a
+////aaa... /aaa...
+////aaa../ /aaa..
+////aaa./a /aaa./a
+////aaa./. /aaa.
+////aaa.// /aaa.
+////aaa/aa /aaa/aa
+////aaa/a. /aaa/a.
+////aaa/a/ /aaa/a
+////aaa/.a /aaa/.a
+////aaa/.. /
+////aaa/./ /aaa
+////aaa//a /aaa/a
+////aaa//. /aaa
+////aaa/// /aaa
+////aa.aaa /aa.aaa
+////aa.aa. /aa.aa.
+////aa.aa/ /aa.aa
+////aa.a.a /aa.a.a
+////aa.a.. /aa.a..
+////aa.a./ /aa.a.
+////aa.a/a /aa.a/a
+////aa.a/. /aa.a
+////aa.a// /aa.a
+////aa..aa /aa..aa
+////aa..a. /aa..a.
+////aa..a/ /aa..a
+////aa...a /aa...a
+////aa.... /aa....
+////aa.../ /aa...
+////aa../a /aa../a
+////aa../. /aa..
+////aa..// /aa..
+////aa./aa /aa./aa
+////aa./a. /aa./a.
+////aa./a/ /aa./a
+////aa./.a /aa./.a
+////aa./.. /
+////aa././ /aa.
+////aa.//a /aa./a
+////aa.//. /aa.
+////aa./// /aa.
+////aa/aaa /aa/aaa
+////aa/aa. /aa/aa.
+////aa/aa/ /aa/aa
+////aa/a.a /aa/a.a
+////aa/a.. /aa/a..
+////aa/a./ /aa/a.
+////aa/a/a /aa/a/a
+////aa/a/. /aa/a
+////aa/a// /aa/a
+////aa/.aa /aa/.aa
+////aa/.a. /aa/.a.
+////aa/.a/ /aa/.a
+////aa/..a /aa/..a
+////aa/... /aa/...
+////aa/../ /
+////aa/./a /aa/a
+////aa/./. /aa
+////aa/.// /aa
+////aa//aa /aa/aa
+////aa//a. /aa/a.
+////aa//a/ /aa/a
+////aa//.a /aa/.a
+////aa//.. /
+////aa//./ /aa
+////aa///a /aa/a
+////aa///. /aa
+////aa//// /aa
+////a.aaaa /a.aaaa
+////a.aaa. /a.aaa.
+////a.aaa/ /a.aaa
+////a.aa.a /a.aa.a
+////a.aa.. /a.aa..
+////a.aa./ /a.aa.
+////a.aa/a /a.aa/a
+////a.aa/. /a.aa
+////a.aa// /a.aa
+////a.a.aa /a.a.aa
+////a.a.a. /a.a.a.
+////a.a.a/ /a.a.a
+////a.a..a /a.a..a
+////a.a... /a.a...
+////a.a../ /a.a..
+////a.a./a /a.a./a
+////a.a./. /a.a.
+////a.a.// /a.a.
+////a.a/aa /a.a/aa
+////a.a/a. /a.a/a.
+////a.a/a/ /a.a/a
+////a.a/.a /a.a/.a
+////a.a/.. /
+////a.a/./ /a.a
+////a.a//a /a.a/a
+////a.a//. /a.a
+////a.a/// /a.a
+////a..aaa /a..aaa
+////a..aa. /a..aa.
+////a..aa/ /a..aa
+////a..a.a /a..a.a
+////a..a.. /a..a..
+////a..a./ /a..a.
+////a..a/a /a..a/a
+////a..a/. /a..a
+////a..a// /a..a
+////a...aa /a...aa
+////a...a. /a...a.
+////a...a/ /a...a
+////a....a /a....a
+////a..... /a.....
+////a..../ /a....
+////a.../a /a.../a
+////a.../. /a...
+////a...// /a...
+////a../aa /a../aa
+////a../a. /a../a.
+////a../a/ /a../a
+////a../.a /a../.a
+////a../.. /
+////a.././ /a..
+////a..//a /a../a
+////a..//. /a..
+////a../// /a..
+////a./aaa /a./aaa
+////a./aa. /a./aa.
+////a./aa/ /a./aa
+////a./a.a /a./a.a
+////a./a.. /a./a..
+////a./a./ /a./a.
+////a./a/a /a./a/a
+////a./a/. /a./a
+////a./a// /a./a
+////a./.aa /a./.aa
+////a./.a. /a./.a.
+////a./.a/ /a./.a
+////a./..a /a./..a
+////a./... /a./...
+////a./../ /
+////a././a /a./a
+////a././. /a.
+////a./.// /a.
+////a.//aa /a./aa
+////a.//a. /a./a.
+////a.//a/ /a./a
+////a.//.a /a./.a
+////a.//.. /
+////a.//./ /a.
+////a.///a /a./a
+////a.///. /a.
+////a.//// /a.
+////a/aaaa /a/aaaa
+////a/aaa. /a/aaa.
+////a/aaa/ /a/aaa
+////a/aa.a /a/aa.a
+////a/aa.. /a/aa..
+////a/aa./ /a/aa.
+////a/aa/a /a/aa/a
+////a/aa/. /a/aa
+////a/aa// /a/aa
+////a/a.aa /a/a.aa
+////a/a.a. /a/a.a.
+////a/a.a/ /a/a.a
+////a/a..a /a/a..a
+////a/a... /a/a...
+////a/a../ /a/a..
+////a/a./a /a/a./a
+////a/a./. /a/a.
+////a/a.// /a/a.
+////a/a/aa /a/a/aa
+////a/a/a. /a/a/a.
+////a/a/a/ /a/a/a
+////a/a/.a /a/a/.a
+////a/a/.. /a
+////a/a/./ /a/a
+////a/a//a /a/a/a
+////a/a//. /a/a
+////a/a/// /a/a
+////a/.aaa /a/.aaa
+////a/.aa. /a/.aa.
+////a/.aa/ /a/.aa
+////a/.a.a /a/.a.a
+////a/.a.. /a/.a..
+////a/.a./ /a/.a.
+////a/.a/a /a/.a/a
+////a/.a/. /a/.a
+////a/.a// /a/.a
+////a/..aa /a/..aa
+////a/..a. /a/..a.
+////a/..a/ /a/..a
+////a/...a /a/...a
+////a/.... /a/....
+////a/.../ /a/...
+////a/../a /a
+////a/../. /
+////a/..// /
+////a/./aa /a/aa
+////a/./a. /a/a.
+////a/./a/ /a/a
+////a/./.a /a/.a
+////a/./.. /
+////a/././ /a
+////a/.//a /a/a
+////a/.//. /a
+////a/./// /a
+////a//aaa /a/aaa
+////a//aa. /a/aa.
+////a//aa/ /a/aa
+////a//a.a /a/a.a
+////a//a.. /a/a..
+////a//a./ /a/a.
+////a//a/a /a/a/a
+////a//a/. /a/a
+////a//a// /a/a
+////a//.aa /a/.aa
+////a//.a. /a/.a.
+////a//.a/ /a/.a
+////a//..a /a/..a
+////a//... /a/...
+////a//../ /
+////a//./a /a/a
+////a//./. /a
+////a//.// /a
+////a///aa /a/aa
+////a///a. /a/a.
+////a///a/ /a/a
+////a///.a /a/.a
+////a///.. /
+////a///./ /a
+////a////a /a/a
+////a////. /a
+////a///// /a
+////.aaaaa /.aaaaa
+////.aaaa. /.aaaa.
+////.aaaa/ /.aaaa
+////.aaa.a /.aaa.a
+////.aaa.. /.aaa..
+////.aaa./ /.aaa.
+////.aaa/a /.aaa/a
+////.aaa/. /.aaa
+////.aaa// /.aaa
+////.aa.aa /.aa.aa
+////.aa.a. /.aa.a.
+////.aa.a/ /.aa.a
+////.aa..a /.aa..a
+////.aa... /.aa...
+////.aa../ /.aa..
+////.aa./a /.aa./a
+////.aa./. /.aa.
+////.aa.// /.aa.
+////.aa/aa /.aa/aa
+////.aa/a. /.aa/a.
+////.aa/a/ /.aa/a
+////.aa/.a /.aa/.a
+////.aa/.. /
+////.aa/./ /.aa
+////.aa//a /.aa/a
+////.aa//. /.aa
+////.aa/// /.aa
+////.a.aaa /.a.aaa
+////.a.aa. /.a.aa.
+////.a.aa/ /.a.aa
+////.a.a.a /.a.a.a
+////.a.a.. /.a.a..
+////.a.a./ /.a.a.
+////.a.a/a /.a.a/a
+////.a.a/. /.a.a
+////.a.a// /.a.a
+////.a..aa /.a..aa
+////.a..a. /.a..a.
+////.a..a/ /.a..a
+////.a...a /.a...a
+////.a.... /.a....
+////.a.../ /.a...
+////.a../a /.a../a
+////.a../. /.a..
+////.a..// /.a..
+////.a./aa /.a./aa
+////.a./a. /.a./a.
+////.a./a/ /.a./a
+////.a./.a /.a./.a
+////.a./.. /
+////.a././ /.a.
+////.a.//a /.a./a
+////.a.//. /.a.
+////.a./// /.a.
+////.a/aaa /.a/aaa
+////.a/aa. /.a/aa.
+////.a/aa/ /.a/aa
+////.a/a.a /.a/a.a
+////.a/a.. /.a/a..
+////.a/a./ /.a/a.
+////.a/a/a /.a/a/a
+////.a/a/. /.a/a
+////.a/a// /.a/a
+////.a/.aa /.a/.aa
+////.a/.a. /.a/.a.
+////.a/.a/ /.a/.a
+////.a/..a /.a/..a
+////.a/... /.a/...
+////.a/../ /
+////.a/./a /.a/a
+////.a/./. /.a
+////.a/.// /.a
+////.a//aa /.a/aa
+////.a//a. /.a/a.
+////.a//a/ /.a/a
+////.a//.a /.a/.a
+////.a//.. /
+////.a//./ /.a
+////.a///a /.a/a
+////.a///. /.a
+////.a//// /.a
+////..aaaa /..aaaa
+////..aaa. /..aaa.
+////..aaa/ /..aaa
+////..aa.a /..aa.a
+////..aa.. /..aa..
+////..aa./ /..aa.
+////..aa/a /..aa/a
+////..aa/. /..aa
+////..aa// /..aa
+////..a.aa /..a.aa
+////..a.a. /..a.a.
+////..a.a/ /..a.a
+////..a..a /..a..a
+////..a... /..a...
+////..a../ /..a..
+////..a./a /..a./a
+////..a./. /..a.
+////..a.// /..a.
+////..a/aa /..a/aa
+////..a/a. /..a/a.
+////..a/a/ /..a/a
+////..a/.a /..a/.a
+////..a/.. /
+////..a/./ /..a
+////..a//a /..a/a
+////..a//. /..a
+////..a/// /..a
+////...aaa /...aaa
+////...aa. /...aa.
+////...aa/ /...aa
+////...a.a /...a.a
+////...a.. /...a..
+////...a./ /...a.
+////...a/a /...a/a
+////...a/. /...a
+////...a// /...a
+////....aa /....aa
+////....a. /....a.
+////....a/ /....a
+////.....a /.....a
+////...... /......
+////...../ /.....
+////..../a /..../a
+////..../. /....
+////....// /....
+////.../aa /.../aa
+////.../a. /.../a.
+////.../a/ /.../a
+////.../.a /.../.a
+////.../.. /
+////..././ /...
+////...//a /.../a
+////...//. /...
+////.../// /...
+////../aaa /aaa
+////../aa. /aa.
+////../aa/ /aa
+////../a.a /a.a
+////../a.. /a..
+////../a./ /a.
+////../a/a /a/a
+////../a/. /a
+////../a// /a
+////../.aa /.aa
+////../.a. /.a.
+////../.a/ /.a
+////../..a /..a
+////../... /...
+////../../ /
+////.././a /a
+////.././. /
+////../.// /
+////..//aa /aa
+////..//a. /a.
+////..//a/ /a
+////..//.a /.a
+////..//.. /
+////..//./ /
+////..///a /a
+////..///. /
+////..//// /
+////./aaaa /aaaa
+////./aaa. /aaa.
+////./aaa/ /aaa
+////./aa.a /aa.a
+////./aa.. /aa..
+////./aa./ /aa.
+////./aa/a /aa/a
+////./aa/. /aa
+////./aa// /aa
+////./a.aa /a.aa
+////./a.a. /a.a.
+////./a.a/ /a.a
+////./a..a /a..a
+////./a... /a...
+////./a../ /a..
+////./a./a /a./a
+////./a./. /a.
+////./a.// /a.
+////./a/aa /a/aa
+////./a/a. /a/a.
+////./a/a/ /a/a
+////./a/.a /a/.a
+////./a/.. /
+////./a/./ /a
+////./a//a /a/a
+////./a//. /a
+////./a/// /a
+////./.aaa /.aaa
+////./.aa. /.aa.
+////./.aa/ /.aa
+////./.a.a /.a.a
+////./.a.. /.a..
+////./.a./ /.a.
+////./.a/a /.a/a
+////./.a/. /.a
+////./.a// /.a
+////./..aa /..aa
+////./..a. /..a.
+////./..a/ /..a
+////./...a /...a
+////./.... /....
+////./.../ /...
+////./../a /a
+////./../. /
+////./..// /
+////././aa /aa
+////././a. /a.
+////././a/ /a
+////././.a /.a
+////././.. /
+////./././ /
+////././/a /a
+////././/. /
+////././// /
+////.//aaa /aaa
+////.//aa. /aa.
+////.//aa/ /aa
+////.//a.a /a.a
+////.//a.. /a..
+////.//a./ /a.
+////.//a/a /a/a
+////.//a/. /a
+////.//a// /a
+////.//.aa /.aa
+////.//.a. /.a.
+////.//.a/ /.a
+////.//..a /..a
+////.//... /...
+////.//../ /
+////.//./a /a
+////.//./. /
+////.//.// /
+////.///aa /aa
+////.///a. /a.
+////.///a/ /a
+////.///.a /.a
+////.///.. /
+////.///./ /
+////.////a /a
+////.////. /
+////.///// /
+/////aaaaa /aaaaa
+/////aaaa. /aaaa.
+/////aaaa/ /aaaa
+/////aaa.a /aaa.a
+/////aaa.. /aaa..
+/////aaa./ /aaa.
+/////aaa/a /aaa/a
+/////aaa/. /aaa
+/////aaa// /aaa
+/////aa.aa /aa.aa
+/////aa.a. /aa.a.
+/////aa.a/ /aa.a
+/////aa..a /aa..a
+/////aa... /aa...
+/////aa../ /aa..
+/////aa./a /aa./a
+/////aa./. /aa.
+/////aa.// /aa.
+/////aa/aa /aa/aa
+/////aa/a. /aa/a.
+/////aa/a/ /aa/a
+/////aa/.a /aa/.a
+/////aa/.. /
+/////aa/./ /aa
+/////aa//a /aa/a
+/////aa//. /aa
+/////aa/// /aa
+/////a.aaa /a.aaa
+/////a.aa. /a.aa.
+/////a.aa/ /a.aa
+/////a.a.a /a.a.a
+/////a.a.. /a.a..
+/////a.a./ /a.a.
+/////a.a/a /a.a/a
+/////a.a/. /a.a
+/////a.a// /a.a
+/////a..aa /a..aa
+/////a..a. /a..a.
+/////a..a/ /a..a
+/////a...a /a...a
+/////a.... /a....
+/////a.../ /a...
+/////a../a /a../a
+/////a../. /a..
+/////a..// /a..
+/////a./aa /a./aa
+/////a./a. /a./a.
+/////a./a/ /a./a
+/////a./.a /a./.a
+/////a./.. /
+/////a././ /a.
+/////a.//a /a./a
+/////a.//. /a.
+/////a./// /a.
+/////a/aaa /a/aaa
+/////a/aa. /a/aa.
+/////a/aa/ /a/aa
+/////a/a.a /a/a.a
+/////a/a.. /a/a..
+/////a/a./ /a/a.
+/////a/a/a /a/a/a
+/////a/a/. /a/a
+/////a/a// /a/a
+/////a/.aa /a/.aa
+/////a/.a. /a/.a.
+/////a/.a/ /a/.a
+/////a/..a /a/..a
+/////a/... /a/...
+/////a/../ /
+/////a/./a /a/a
+/////a/./. /a
+/////a/.// /a
+/////a//aa /a/aa
+/////a//a. /a/a.
+/////a//a/ /a/a
+/////a//.a /a/.a
+/////a//.. /
+/////a//./ /a
+/////a///a /a/a
+/////a///. /a
+/////a//// /a
+/////.aaaa /.aaaa
+/////.aaa. /.aaa.
+/////.aaa/ /.aaa
+/////.aa.a /.aa.a
+/////.aa.. /.aa..
+/////.aa./ /.aa.
+/////.aa/a /.aa/a
+/////.aa/. /.aa
+/////.aa// /.aa
+/////.a.aa /.a.aa
+/////.a.a. /.a.a.
+/////.a.a/ /.a.a
+/////.a..a /.a..a
+/////.a... /.a...
+/////.a../ /.a..
+/////.a./a /.a./a
+/////.a./. /.a.
+/////.a.// /.a.
+/////.a/aa /.a/aa
+/////.a/a. /.a/a.
+/////.a/a/ /.a/a
+/////.a/.a /.a/.a
+/////.a/.. /
+/////.a/./ /.a
+/////.a//a /.a/a
+/////.a//. /.a
+/////.a/// /.a
+/////..aaa /..aaa
+/////..aa. /..aa.
+/////..aa/ /..aa
+/////..a.a /..a.a
+/////..a.. /..a..
+/////..a./ /..a.
+/////..a/a /..a/a
+/////..a/. /..a
+/////..a// /..a
+/////...aa /...aa
+/////...a. /...a.
+/////...a/ /...a
+/////....a /....a
+/////..... /.....
+/////..../ /....
+/////.../a /.../a
+/////.../. /...
+/////...// /...
+/////../aa /aa
+/////../a. /a.
+/////../a/ /a
+/////../.a /.a
+/////../.. /
+/////.././ /
+/////..//a /a
+/////..//. /
+/////../// /
+/////./aaa /aaa
+/////./aa. /aa.
+/////./aa/ /aa
+/////./a.a /a.a
+/////./a.. /a..
+/////./a./ /a.
+/////./a/a /a/a
+/////./a/. /a
+/////./a// /a
+/////./.aa /.aa
+/////./.a. /.a.
+/////./.a/ /.a
+/////./..a /..a
+/////./... /...
+/////./../ /
+/////././a /a
+/////././. /
+/////./.// /
+/////.//aa /aa
+/////.//a. /a.
+/////.//a/ /a
+/////.//.a /.a
+/////.//.. /
+/////.//./ /
+/////.///a /a
+/////.///. /
+/////.//// /
+//////aaaa /aaaa
+//////aaa. /aaa.
+//////aaa/ /aaa
+//////aa.a /aa.a
+//////aa.. /aa..
+//////aa./ /aa.
+//////aa/a /aa/a
+//////aa/. /aa
+//////aa// /aa
+//////a.aa /a.aa
+//////a.a. /a.a.
+//////a.a/ /a.a
+//////a..a /a..a
+//////a... /a...
+//////a../ /a..
+//////a./a /a./a
+//////a./. /a.
+//////a.// /a.
+//////a/aa /a/aa
+//////a/a. /a/a.
+//////a/a/ /a/a
+//////a/.a /a/.a
+//////a/.. /
+//////a/./ /a
+//////a//a /a/a
+//////a//. /a
+//////a/// /a
+//////.aaa /.aaa
+//////.aa. /.aa.
+//////.aa/ /.aa
+//////.a.a /.a.a
+//////.a.. /.a..
+//////.a./ /.a.
+//////.a/a /.a/a
+//////.a/. /.a
+//////.a// /.a
+//////..aa /..aa
+//////..a. /..a.
+//////..a/ /..a
+//////...a /...a
+//////.... /....
+//////.../ /...
+//////../a /a
+//////../. /
+//////..// /
+//////./aa /aa
+//////./a. /a.
+//////./a/ /a
+//////./.a /.a
+//////./.. /
+//////././ /
+//////.//a /a
+//////.//. /
+//////./// /
+///////aaa /aaa
+///////aa. /aa.
+///////aa/ /aa
+///////a.a /a.a
+///////a.. /a..
+///////a./ /a.
+///////a/a /a/a
+///////a/. /a
+///////a// /a
+///////.aa /.aa
+///////.a. /.a.
+///////.a/ /.a
+///////..a /..a
+///////... /...
+///////../ /
+///////./a /a
+///////./. /
+///////.// /
+////////aa /aa
+////////a. /a.
+////////a/ /a
+////////.a /.a
+////////.. /
+////////./ /
+/////////a /a
+/////////. /
+////////// /
diff --git a/guava-tests/test/com/google/common/io/testdata/simplifypathwithabsoluteprefixtests.txt b/guava-tests/test/com/google/common/io/testdata/simplifypathwithabsoluteprefixtests.txt
new file mode 100644
index 0000000..80b338d
--- /dev/null
+++ b/guava-tests/test/com/google/common/io/testdata/simplifypathwithabsoluteprefixtests.txt
@@ -0,0 +1,59049 @@
+/b/c/aaaaaaaaaa /b/c/aaaaaaaaaa
+/b/c/aaaaaaaaa. /b/c/aaaaaaaaa.
+/b/c/aaaaaaaaa/ /b/c/aaaaaaaaa
+/b/c/aaaaaaaa.a /b/c/aaaaaaaa.a
+/b/c/aaaaaaaa.. /b/c/aaaaaaaa..
+/b/c/aaaaaaaa./ /b/c/aaaaaaaa.
+/b/c/aaaaaaaa/a /b/c/aaaaaaaa/a
+/b/c/aaaaaaaa/. /b/c/aaaaaaaa
+/b/c/aaaaaaaa// /b/c/aaaaaaaa
+/b/c/aaaaaaa.aa /b/c/aaaaaaa.aa
+/b/c/aaaaaaa.a. /b/c/aaaaaaa.a.
+/b/c/aaaaaaa.a/ /b/c/aaaaaaa.a
+/b/c/aaaaaaa..a /b/c/aaaaaaa..a
+/b/c/aaaaaaa... /b/c/aaaaaaa...
+/b/c/aaaaaaa../ /b/c/aaaaaaa..
+/b/c/aaaaaaa./a /b/c/aaaaaaa./a
+/b/c/aaaaaaa./. /b/c/aaaaaaa.
+/b/c/aaaaaaa.// /b/c/aaaaaaa.
+/b/c/aaaaaaa/aa /b/c/aaaaaaa/aa
+/b/c/aaaaaaa/a. /b/c/aaaaaaa/a.
+/b/c/aaaaaaa/a/ /b/c/aaaaaaa/a
+/b/c/aaaaaaa/.a /b/c/aaaaaaa/.a
+/b/c/aaaaaaa/.. /b/c
+/b/c/aaaaaaa/./ /b/c/aaaaaaa
+/b/c/aaaaaaa//a /b/c/aaaaaaa/a
+/b/c/aaaaaaa//. /b/c/aaaaaaa
+/b/c/aaaaaaa/// /b/c/aaaaaaa
+/b/c/aaaaaa.aaa /b/c/aaaaaa.aaa
+/b/c/aaaaaa.aa. /b/c/aaaaaa.aa.
+/b/c/aaaaaa.aa/ /b/c/aaaaaa.aa
+/b/c/aaaaaa.a.a /b/c/aaaaaa.a.a
+/b/c/aaaaaa.a.. /b/c/aaaaaa.a..
+/b/c/aaaaaa.a./ /b/c/aaaaaa.a.
+/b/c/aaaaaa.a/a /b/c/aaaaaa.a/a
+/b/c/aaaaaa.a/. /b/c/aaaaaa.a
+/b/c/aaaaaa.a// /b/c/aaaaaa.a
+/b/c/aaaaaa..aa /b/c/aaaaaa..aa
+/b/c/aaaaaa..a. /b/c/aaaaaa..a.
+/b/c/aaaaaa..a/ /b/c/aaaaaa..a
+/b/c/aaaaaa...a /b/c/aaaaaa...a
+/b/c/aaaaaa.... /b/c/aaaaaa....
+/b/c/aaaaaa.../ /b/c/aaaaaa...
+/b/c/aaaaaa../a /b/c/aaaaaa../a
+/b/c/aaaaaa../. /b/c/aaaaaa..
+/b/c/aaaaaa..// /b/c/aaaaaa..
+/b/c/aaaaaa./aa /b/c/aaaaaa./aa
+/b/c/aaaaaa./a. /b/c/aaaaaa./a.
+/b/c/aaaaaa./a/ /b/c/aaaaaa./a
+/b/c/aaaaaa./.a /b/c/aaaaaa./.a
+/b/c/aaaaaa./.. /b/c
+/b/c/aaaaaa././ /b/c/aaaaaa.
+/b/c/aaaaaa.//a /b/c/aaaaaa./a
+/b/c/aaaaaa.//. /b/c/aaaaaa.
+/b/c/aaaaaa./// /b/c/aaaaaa.
+/b/c/aaaaaa/aaa /b/c/aaaaaa/aaa
+/b/c/aaaaaa/aa. /b/c/aaaaaa/aa.
+/b/c/aaaaaa/aa/ /b/c/aaaaaa/aa
+/b/c/aaaaaa/a.a /b/c/aaaaaa/a.a
+/b/c/aaaaaa/a.. /b/c/aaaaaa/a..
+/b/c/aaaaaa/a./ /b/c/aaaaaa/a.
+/b/c/aaaaaa/a/a /b/c/aaaaaa/a/a
+/b/c/aaaaaa/a/. /b/c/aaaaaa/a
+/b/c/aaaaaa/a// /b/c/aaaaaa/a
+/b/c/aaaaaa/.aa /b/c/aaaaaa/.aa
+/b/c/aaaaaa/.a. /b/c/aaaaaa/.a.
+/b/c/aaaaaa/.a/ /b/c/aaaaaa/.a
+/b/c/aaaaaa/..a /b/c/aaaaaa/..a
+/b/c/aaaaaa/... /b/c/aaaaaa/...
+/b/c/aaaaaa/../ /b/c
+/b/c/aaaaaa/./a /b/c/aaaaaa/a
+/b/c/aaaaaa/./. /b/c/aaaaaa
+/b/c/aaaaaa/.// /b/c/aaaaaa
+/b/c/aaaaaa//aa /b/c/aaaaaa/aa
+/b/c/aaaaaa//a. /b/c/aaaaaa/a.
+/b/c/aaaaaa//a/ /b/c/aaaaaa/a
+/b/c/aaaaaa//.a /b/c/aaaaaa/.a
+/b/c/aaaaaa//.. /b/c
+/b/c/aaaaaa//./ /b/c/aaaaaa
+/b/c/aaaaaa///a /b/c/aaaaaa/a
+/b/c/aaaaaa///. /b/c/aaaaaa
+/b/c/aaaaaa//// /b/c/aaaaaa
+/b/c/aaaaa.aaaa /b/c/aaaaa.aaaa
+/b/c/aaaaa.aaa. /b/c/aaaaa.aaa.
+/b/c/aaaaa.aaa/ /b/c/aaaaa.aaa
+/b/c/aaaaa.aa.a /b/c/aaaaa.aa.a
+/b/c/aaaaa.aa.. /b/c/aaaaa.aa..
+/b/c/aaaaa.aa./ /b/c/aaaaa.aa.
+/b/c/aaaaa.aa/a /b/c/aaaaa.aa/a
+/b/c/aaaaa.aa/. /b/c/aaaaa.aa
+/b/c/aaaaa.aa// /b/c/aaaaa.aa
+/b/c/aaaaa.a.aa /b/c/aaaaa.a.aa
+/b/c/aaaaa.a.a. /b/c/aaaaa.a.a.
+/b/c/aaaaa.a.a/ /b/c/aaaaa.a.a
+/b/c/aaaaa.a..a /b/c/aaaaa.a..a
+/b/c/aaaaa.a... /b/c/aaaaa.a...
+/b/c/aaaaa.a../ /b/c/aaaaa.a..
+/b/c/aaaaa.a./a /b/c/aaaaa.a./a
+/b/c/aaaaa.a./. /b/c/aaaaa.a.
+/b/c/aaaaa.a.// /b/c/aaaaa.a.
+/b/c/aaaaa.a/aa /b/c/aaaaa.a/aa
+/b/c/aaaaa.a/a. /b/c/aaaaa.a/a.
+/b/c/aaaaa.a/a/ /b/c/aaaaa.a/a
+/b/c/aaaaa.a/.a /b/c/aaaaa.a/.a
+/b/c/aaaaa.a/.. /b/c
+/b/c/aaaaa.a/./ /b/c/aaaaa.a
+/b/c/aaaaa.a//a /b/c/aaaaa.a/a
+/b/c/aaaaa.a//. /b/c/aaaaa.a
+/b/c/aaaaa.a/// /b/c/aaaaa.a
+/b/c/aaaaa..aaa /b/c/aaaaa..aaa
+/b/c/aaaaa..aa. /b/c/aaaaa..aa.
+/b/c/aaaaa..aa/ /b/c/aaaaa..aa
+/b/c/aaaaa..a.a /b/c/aaaaa..a.a
+/b/c/aaaaa..a.. /b/c/aaaaa..a..
+/b/c/aaaaa..a./ /b/c/aaaaa..a.
+/b/c/aaaaa..a/a /b/c/aaaaa..a/a
+/b/c/aaaaa..a/. /b/c/aaaaa..a
+/b/c/aaaaa..a// /b/c/aaaaa..a
+/b/c/aaaaa...aa /b/c/aaaaa...aa
+/b/c/aaaaa...a. /b/c/aaaaa...a.
+/b/c/aaaaa...a/ /b/c/aaaaa...a
+/b/c/aaaaa....a /b/c/aaaaa....a
+/b/c/aaaaa..... /b/c/aaaaa.....
+/b/c/aaaaa..../ /b/c/aaaaa....
+/b/c/aaaaa.../a /b/c/aaaaa.../a
+/b/c/aaaaa.../. /b/c/aaaaa...
+/b/c/aaaaa...// /b/c/aaaaa...
+/b/c/aaaaa../aa /b/c/aaaaa../aa
+/b/c/aaaaa../a. /b/c/aaaaa../a.
+/b/c/aaaaa../a/ /b/c/aaaaa../a
+/b/c/aaaaa../.a /b/c/aaaaa../.a
+/b/c/aaaaa../.. /b/c
+/b/c/aaaaa.././ /b/c/aaaaa..
+/b/c/aaaaa..//a /b/c/aaaaa../a
+/b/c/aaaaa..//. /b/c/aaaaa..
+/b/c/aaaaa../// /b/c/aaaaa..
+/b/c/aaaaa./aaa /b/c/aaaaa./aaa
+/b/c/aaaaa./aa. /b/c/aaaaa./aa.
+/b/c/aaaaa./aa/ /b/c/aaaaa./aa
+/b/c/aaaaa./a.a /b/c/aaaaa./a.a
+/b/c/aaaaa./a.. /b/c/aaaaa./a..
+/b/c/aaaaa./a./ /b/c/aaaaa./a.
+/b/c/aaaaa./a/a /b/c/aaaaa./a/a
+/b/c/aaaaa./a/. /b/c/aaaaa./a
+/b/c/aaaaa./a// /b/c/aaaaa./a
+/b/c/aaaaa./.aa /b/c/aaaaa./.aa
+/b/c/aaaaa./.a. /b/c/aaaaa./.a.
+/b/c/aaaaa./.a/ /b/c/aaaaa./.a
+/b/c/aaaaa./..a /b/c/aaaaa./..a
+/b/c/aaaaa./... /b/c/aaaaa./...
+/b/c/aaaaa./../ /b/c
+/b/c/aaaaa././a /b/c/aaaaa./a
+/b/c/aaaaa././. /b/c/aaaaa.
+/b/c/aaaaa./.// /b/c/aaaaa.
+/b/c/aaaaa.//aa /b/c/aaaaa./aa
+/b/c/aaaaa.//a. /b/c/aaaaa./a.
+/b/c/aaaaa.//a/ /b/c/aaaaa./a
+/b/c/aaaaa.//.a /b/c/aaaaa./.a
+/b/c/aaaaa.//.. /b/c
+/b/c/aaaaa.//./ /b/c/aaaaa.
+/b/c/aaaaa.///a /b/c/aaaaa./a
+/b/c/aaaaa.///. /b/c/aaaaa.
+/b/c/aaaaa.//// /b/c/aaaaa.
+/b/c/aaaaa/aaaa /b/c/aaaaa/aaaa
+/b/c/aaaaa/aaa. /b/c/aaaaa/aaa.
+/b/c/aaaaa/aaa/ /b/c/aaaaa/aaa
+/b/c/aaaaa/aa.a /b/c/aaaaa/aa.a
+/b/c/aaaaa/aa.. /b/c/aaaaa/aa..
+/b/c/aaaaa/aa./ /b/c/aaaaa/aa.
+/b/c/aaaaa/aa/a /b/c/aaaaa/aa/a
+/b/c/aaaaa/aa/. /b/c/aaaaa/aa
+/b/c/aaaaa/aa// /b/c/aaaaa/aa
+/b/c/aaaaa/a.aa /b/c/aaaaa/a.aa
+/b/c/aaaaa/a.a. /b/c/aaaaa/a.a.
+/b/c/aaaaa/a.a/ /b/c/aaaaa/a.a
+/b/c/aaaaa/a..a /b/c/aaaaa/a..a
+/b/c/aaaaa/a... /b/c/aaaaa/a...
+/b/c/aaaaa/a../ /b/c/aaaaa/a..
+/b/c/aaaaa/a./a /b/c/aaaaa/a./a
+/b/c/aaaaa/a./. /b/c/aaaaa/a.
+/b/c/aaaaa/a.// /b/c/aaaaa/a.
+/b/c/aaaaa/a/aa /b/c/aaaaa/a/aa
+/b/c/aaaaa/a/a. /b/c/aaaaa/a/a.
+/b/c/aaaaa/a/a/ /b/c/aaaaa/a/a
+/b/c/aaaaa/a/.a /b/c/aaaaa/a/.a
+/b/c/aaaaa/a/.. /b/c/aaaaa
+/b/c/aaaaa/a/./ /b/c/aaaaa/a
+/b/c/aaaaa/a//a /b/c/aaaaa/a/a
+/b/c/aaaaa/a//. /b/c/aaaaa/a
+/b/c/aaaaa/a/// /b/c/aaaaa/a
+/b/c/aaaaa/.aaa /b/c/aaaaa/.aaa
+/b/c/aaaaa/.aa. /b/c/aaaaa/.aa.
+/b/c/aaaaa/.aa/ /b/c/aaaaa/.aa
+/b/c/aaaaa/.a.a /b/c/aaaaa/.a.a
+/b/c/aaaaa/.a.. /b/c/aaaaa/.a..
+/b/c/aaaaa/.a./ /b/c/aaaaa/.a.
+/b/c/aaaaa/.a/a /b/c/aaaaa/.a/a
+/b/c/aaaaa/.a/. /b/c/aaaaa/.a
+/b/c/aaaaa/.a// /b/c/aaaaa/.a
+/b/c/aaaaa/..aa /b/c/aaaaa/..aa
+/b/c/aaaaa/..a. /b/c/aaaaa/..a.
+/b/c/aaaaa/..a/ /b/c/aaaaa/..a
+/b/c/aaaaa/...a /b/c/aaaaa/...a
+/b/c/aaaaa/.... /b/c/aaaaa/....
+/b/c/aaaaa/.../ /b/c/aaaaa/...
+/b/c/aaaaa/../a /b/c/a
+/b/c/aaaaa/../. /b/c
+/b/c/aaaaa/..// /b/c
+/b/c/aaaaa/./aa /b/c/aaaaa/aa
+/b/c/aaaaa/./a. /b/c/aaaaa/a.
+/b/c/aaaaa/./a/ /b/c/aaaaa/a
+/b/c/aaaaa/./.a /b/c/aaaaa/.a
+/b/c/aaaaa/./.. /b/c
+/b/c/aaaaa/././ /b/c/aaaaa
+/b/c/aaaaa/.//a /b/c/aaaaa/a
+/b/c/aaaaa/.//. /b/c/aaaaa
+/b/c/aaaaa/./// /b/c/aaaaa
+/b/c/aaaaa//aaa /b/c/aaaaa/aaa
+/b/c/aaaaa//aa. /b/c/aaaaa/aa.
+/b/c/aaaaa//aa/ /b/c/aaaaa/aa
+/b/c/aaaaa//a.a /b/c/aaaaa/a.a
+/b/c/aaaaa//a.. /b/c/aaaaa/a..
+/b/c/aaaaa//a./ /b/c/aaaaa/a.
+/b/c/aaaaa//a/a /b/c/aaaaa/a/a
+/b/c/aaaaa//a/. /b/c/aaaaa/a
+/b/c/aaaaa//a// /b/c/aaaaa/a
+/b/c/aaaaa//.aa /b/c/aaaaa/.aa
+/b/c/aaaaa//.a. /b/c/aaaaa/.a.
+/b/c/aaaaa//.a/ /b/c/aaaaa/.a
+/b/c/aaaaa//..a /b/c/aaaaa/..a
+/b/c/aaaaa//... /b/c/aaaaa/...
+/b/c/aaaaa//../ /b/c
+/b/c/aaaaa//./a /b/c/aaaaa/a
+/b/c/aaaaa//./. /b/c/aaaaa
+/b/c/aaaaa//.// /b/c/aaaaa
+/b/c/aaaaa///aa /b/c/aaaaa/aa
+/b/c/aaaaa///a. /b/c/aaaaa/a.
+/b/c/aaaaa///a/ /b/c/aaaaa/a
+/b/c/aaaaa///.a /b/c/aaaaa/.a
+/b/c/aaaaa///.. /b/c
+/b/c/aaaaa///./ /b/c/aaaaa
+/b/c/aaaaa////a /b/c/aaaaa/a
+/b/c/aaaaa////. /b/c/aaaaa
+/b/c/aaaaa///// /b/c/aaaaa
+/b/c/aaaa.aaaaa /b/c/aaaa.aaaaa
+/b/c/aaaa.aaaa. /b/c/aaaa.aaaa.
+/b/c/aaaa.aaaa/ /b/c/aaaa.aaaa
+/b/c/aaaa.aaa.a /b/c/aaaa.aaa.a
+/b/c/aaaa.aaa.. /b/c/aaaa.aaa..
+/b/c/aaaa.aaa./ /b/c/aaaa.aaa.
+/b/c/aaaa.aaa/a /b/c/aaaa.aaa/a
+/b/c/aaaa.aaa/. /b/c/aaaa.aaa
+/b/c/aaaa.aaa// /b/c/aaaa.aaa
+/b/c/aaaa.aa.aa /b/c/aaaa.aa.aa
+/b/c/aaaa.aa.a. /b/c/aaaa.aa.a.
+/b/c/aaaa.aa.a/ /b/c/aaaa.aa.a
+/b/c/aaaa.aa..a /b/c/aaaa.aa..a
+/b/c/aaaa.aa... /b/c/aaaa.aa...
+/b/c/aaaa.aa../ /b/c/aaaa.aa..
+/b/c/aaaa.aa./a /b/c/aaaa.aa./a
+/b/c/aaaa.aa./. /b/c/aaaa.aa.
+/b/c/aaaa.aa.// /b/c/aaaa.aa.
+/b/c/aaaa.aa/aa /b/c/aaaa.aa/aa
+/b/c/aaaa.aa/a. /b/c/aaaa.aa/a.
+/b/c/aaaa.aa/a/ /b/c/aaaa.aa/a
+/b/c/aaaa.aa/.a /b/c/aaaa.aa/.a
+/b/c/aaaa.aa/.. /b/c
+/b/c/aaaa.aa/./ /b/c/aaaa.aa
+/b/c/aaaa.aa//a /b/c/aaaa.aa/a
+/b/c/aaaa.aa//. /b/c/aaaa.aa
+/b/c/aaaa.aa/// /b/c/aaaa.aa
+/b/c/aaaa.a.aaa /b/c/aaaa.a.aaa
+/b/c/aaaa.a.aa. /b/c/aaaa.a.aa.
+/b/c/aaaa.a.aa/ /b/c/aaaa.a.aa
+/b/c/aaaa.a.a.a /b/c/aaaa.a.a.a
+/b/c/aaaa.a.a.. /b/c/aaaa.a.a..
+/b/c/aaaa.a.a./ /b/c/aaaa.a.a.
+/b/c/aaaa.a.a/a /b/c/aaaa.a.a/a
+/b/c/aaaa.a.a/. /b/c/aaaa.a.a
+/b/c/aaaa.a.a// /b/c/aaaa.a.a
+/b/c/aaaa.a..aa /b/c/aaaa.a..aa
+/b/c/aaaa.a..a. /b/c/aaaa.a..a.
+/b/c/aaaa.a..a/ /b/c/aaaa.a..a
+/b/c/aaaa.a...a /b/c/aaaa.a...a
+/b/c/aaaa.a.... /b/c/aaaa.a....
+/b/c/aaaa.a.../ /b/c/aaaa.a...
+/b/c/aaaa.a../a /b/c/aaaa.a../a
+/b/c/aaaa.a../. /b/c/aaaa.a..
+/b/c/aaaa.a..// /b/c/aaaa.a..
+/b/c/aaaa.a./aa /b/c/aaaa.a./aa
+/b/c/aaaa.a./a. /b/c/aaaa.a./a.
+/b/c/aaaa.a./a/ /b/c/aaaa.a./a
+/b/c/aaaa.a./.a /b/c/aaaa.a./.a
+/b/c/aaaa.a./.. /b/c
+/b/c/aaaa.a././ /b/c/aaaa.a.
+/b/c/aaaa.a.//a /b/c/aaaa.a./a
+/b/c/aaaa.a.//. /b/c/aaaa.a.
+/b/c/aaaa.a./// /b/c/aaaa.a.
+/b/c/aaaa.a/aaa /b/c/aaaa.a/aaa
+/b/c/aaaa.a/aa. /b/c/aaaa.a/aa.
+/b/c/aaaa.a/aa/ /b/c/aaaa.a/aa
+/b/c/aaaa.a/a.a /b/c/aaaa.a/a.a
+/b/c/aaaa.a/a.. /b/c/aaaa.a/a..
+/b/c/aaaa.a/a./ /b/c/aaaa.a/a.
+/b/c/aaaa.a/a/a /b/c/aaaa.a/a/a
+/b/c/aaaa.a/a/. /b/c/aaaa.a/a
+/b/c/aaaa.a/a// /b/c/aaaa.a/a
+/b/c/aaaa.a/.aa /b/c/aaaa.a/.aa
+/b/c/aaaa.a/.a. /b/c/aaaa.a/.a.
+/b/c/aaaa.a/.a/ /b/c/aaaa.a/.a
+/b/c/aaaa.a/..a /b/c/aaaa.a/..a
+/b/c/aaaa.a/... /b/c/aaaa.a/...
+/b/c/aaaa.a/../ /b/c
+/b/c/aaaa.a/./a /b/c/aaaa.a/a
+/b/c/aaaa.a/./. /b/c/aaaa.a
+/b/c/aaaa.a/.// /b/c/aaaa.a
+/b/c/aaaa.a//aa /b/c/aaaa.a/aa
+/b/c/aaaa.a//a. /b/c/aaaa.a/a.
+/b/c/aaaa.a//a/ /b/c/aaaa.a/a
+/b/c/aaaa.a//.a /b/c/aaaa.a/.a
+/b/c/aaaa.a//.. /b/c
+/b/c/aaaa.a//./ /b/c/aaaa.a
+/b/c/aaaa.a///a /b/c/aaaa.a/a
+/b/c/aaaa.a///. /b/c/aaaa.a
+/b/c/aaaa.a//// /b/c/aaaa.a
+/b/c/aaaa..aaaa /b/c/aaaa..aaaa
+/b/c/aaaa..aaa. /b/c/aaaa..aaa.
+/b/c/aaaa..aaa/ /b/c/aaaa..aaa
+/b/c/aaaa..aa.a /b/c/aaaa..aa.a
+/b/c/aaaa..aa.. /b/c/aaaa..aa..
+/b/c/aaaa..aa./ /b/c/aaaa..aa.
+/b/c/aaaa..aa/a /b/c/aaaa..aa/a
+/b/c/aaaa..aa/. /b/c/aaaa..aa
+/b/c/aaaa..aa// /b/c/aaaa..aa
+/b/c/aaaa..a.aa /b/c/aaaa..a.aa
+/b/c/aaaa..a.a. /b/c/aaaa..a.a.
+/b/c/aaaa..a.a/ /b/c/aaaa..a.a
+/b/c/aaaa..a..a /b/c/aaaa..a..a
+/b/c/aaaa..a... /b/c/aaaa..a...
+/b/c/aaaa..a../ /b/c/aaaa..a..
+/b/c/aaaa..a./a /b/c/aaaa..a./a
+/b/c/aaaa..a./. /b/c/aaaa..a.
+/b/c/aaaa..a.// /b/c/aaaa..a.
+/b/c/aaaa..a/aa /b/c/aaaa..a/aa
+/b/c/aaaa..a/a. /b/c/aaaa..a/a.
+/b/c/aaaa..a/a/ /b/c/aaaa..a/a
+/b/c/aaaa..a/.a /b/c/aaaa..a/.a
+/b/c/aaaa..a/.. /b/c
+/b/c/aaaa..a/./ /b/c/aaaa..a
+/b/c/aaaa..a//a /b/c/aaaa..a/a
+/b/c/aaaa..a//. /b/c/aaaa..a
+/b/c/aaaa..a/// /b/c/aaaa..a
+/b/c/aaaa...aaa /b/c/aaaa...aaa
+/b/c/aaaa...aa. /b/c/aaaa...aa.
+/b/c/aaaa...aa/ /b/c/aaaa...aa
+/b/c/aaaa...a.a /b/c/aaaa...a.a
+/b/c/aaaa...a.. /b/c/aaaa...a..
+/b/c/aaaa...a./ /b/c/aaaa...a.
+/b/c/aaaa...a/a /b/c/aaaa...a/a
+/b/c/aaaa...a/. /b/c/aaaa...a
+/b/c/aaaa...a// /b/c/aaaa...a
+/b/c/aaaa....aa /b/c/aaaa....aa
+/b/c/aaaa....a. /b/c/aaaa....a.
+/b/c/aaaa....a/ /b/c/aaaa....a
+/b/c/aaaa.....a /b/c/aaaa.....a
+/b/c/aaaa...... /b/c/aaaa......
+/b/c/aaaa...../ /b/c/aaaa.....
+/b/c/aaaa..../a /b/c/aaaa..../a
+/b/c/aaaa..../. /b/c/aaaa....
+/b/c/aaaa....// /b/c/aaaa....
+/b/c/aaaa.../aa /b/c/aaaa.../aa
+/b/c/aaaa.../a. /b/c/aaaa.../a.
+/b/c/aaaa.../a/ /b/c/aaaa.../a
+/b/c/aaaa.../.a /b/c/aaaa.../.a
+/b/c/aaaa.../.. /b/c
+/b/c/aaaa..././ /b/c/aaaa...
+/b/c/aaaa...//a /b/c/aaaa.../a
+/b/c/aaaa...//. /b/c/aaaa...
+/b/c/aaaa.../// /b/c/aaaa...
+/b/c/aaaa../aaa /b/c/aaaa../aaa
+/b/c/aaaa../aa. /b/c/aaaa../aa.
+/b/c/aaaa../aa/ /b/c/aaaa../aa
+/b/c/aaaa../a.a /b/c/aaaa../a.a
+/b/c/aaaa../a.. /b/c/aaaa../a..
+/b/c/aaaa../a./ /b/c/aaaa../a.
+/b/c/aaaa../a/a /b/c/aaaa../a/a
+/b/c/aaaa../a/. /b/c/aaaa../a
+/b/c/aaaa../a// /b/c/aaaa../a
+/b/c/aaaa../.aa /b/c/aaaa../.aa
+/b/c/aaaa../.a. /b/c/aaaa../.a.
+/b/c/aaaa../.a/ /b/c/aaaa../.a
+/b/c/aaaa../..a /b/c/aaaa../..a
+/b/c/aaaa../... /b/c/aaaa../...
+/b/c/aaaa../../ /b/c
+/b/c/aaaa.././a /b/c/aaaa../a
+/b/c/aaaa.././. /b/c/aaaa..
+/b/c/aaaa../.// /b/c/aaaa..
+/b/c/aaaa..//aa /b/c/aaaa../aa
+/b/c/aaaa..//a. /b/c/aaaa../a.
+/b/c/aaaa..//a/ /b/c/aaaa../a
+/b/c/aaaa..//.a /b/c/aaaa../.a
+/b/c/aaaa..//.. /b/c
+/b/c/aaaa..//./ /b/c/aaaa..
+/b/c/aaaa..///a /b/c/aaaa../a
+/b/c/aaaa..///. /b/c/aaaa..
+/b/c/aaaa..//// /b/c/aaaa..
+/b/c/aaaa./aaaa /b/c/aaaa./aaaa
+/b/c/aaaa./aaa. /b/c/aaaa./aaa.
+/b/c/aaaa./aaa/ /b/c/aaaa./aaa
+/b/c/aaaa./aa.a /b/c/aaaa./aa.a
+/b/c/aaaa./aa.. /b/c/aaaa./aa..
+/b/c/aaaa./aa./ /b/c/aaaa./aa.
+/b/c/aaaa./aa/a /b/c/aaaa./aa/a
+/b/c/aaaa./aa/. /b/c/aaaa./aa
+/b/c/aaaa./aa// /b/c/aaaa./aa
+/b/c/aaaa./a.aa /b/c/aaaa./a.aa
+/b/c/aaaa./a.a. /b/c/aaaa./a.a.
+/b/c/aaaa./a.a/ /b/c/aaaa./a.a
+/b/c/aaaa./a..a /b/c/aaaa./a..a
+/b/c/aaaa./a... /b/c/aaaa./a...
+/b/c/aaaa./a../ /b/c/aaaa./a..
+/b/c/aaaa./a./a /b/c/aaaa./a./a
+/b/c/aaaa./a./. /b/c/aaaa./a.
+/b/c/aaaa./a.// /b/c/aaaa./a.
+/b/c/aaaa./a/aa /b/c/aaaa./a/aa
+/b/c/aaaa./a/a. /b/c/aaaa./a/a.
+/b/c/aaaa./a/a/ /b/c/aaaa./a/a
+/b/c/aaaa./a/.a /b/c/aaaa./a/.a
+/b/c/aaaa./a/.. /b/c/aaaa.
+/b/c/aaaa./a/./ /b/c/aaaa./a
+/b/c/aaaa./a//a /b/c/aaaa./a/a
+/b/c/aaaa./a//. /b/c/aaaa./a
+/b/c/aaaa./a/// /b/c/aaaa./a
+/b/c/aaaa./.aaa /b/c/aaaa./.aaa
+/b/c/aaaa./.aa. /b/c/aaaa./.aa.
+/b/c/aaaa./.aa/ /b/c/aaaa./.aa
+/b/c/aaaa./.a.a /b/c/aaaa./.a.a
+/b/c/aaaa./.a.. /b/c/aaaa./.a..
+/b/c/aaaa./.a./ /b/c/aaaa./.a.
+/b/c/aaaa./.a/a /b/c/aaaa./.a/a
+/b/c/aaaa./.a/. /b/c/aaaa./.a
+/b/c/aaaa./.a// /b/c/aaaa./.a
+/b/c/aaaa./..aa /b/c/aaaa./..aa
+/b/c/aaaa./..a. /b/c/aaaa./..a.
+/b/c/aaaa./..a/ /b/c/aaaa./..a
+/b/c/aaaa./...a /b/c/aaaa./...a
+/b/c/aaaa./.... /b/c/aaaa./....
+/b/c/aaaa./.../ /b/c/aaaa./...
+/b/c/aaaa./../a /b/c/a
+/b/c/aaaa./../. /b/c
+/b/c/aaaa./..// /b/c
+/b/c/aaaa././aa /b/c/aaaa./aa
+/b/c/aaaa././a. /b/c/aaaa./a.
+/b/c/aaaa././a/ /b/c/aaaa./a
+/b/c/aaaa././.a /b/c/aaaa./.a
+/b/c/aaaa././.. /b/c
+/b/c/aaaa./././ /b/c/aaaa.
+/b/c/aaaa././/a /b/c/aaaa./a
+/b/c/aaaa././/. /b/c/aaaa.
+/b/c/aaaa././// /b/c/aaaa.
+/b/c/aaaa.//aaa /b/c/aaaa./aaa
+/b/c/aaaa.//aa. /b/c/aaaa./aa.
+/b/c/aaaa.//aa/ /b/c/aaaa./aa
+/b/c/aaaa.//a.a /b/c/aaaa./a.a
+/b/c/aaaa.//a.. /b/c/aaaa./a..
+/b/c/aaaa.//a./ /b/c/aaaa./a.
+/b/c/aaaa.//a/a /b/c/aaaa./a/a
+/b/c/aaaa.//a/. /b/c/aaaa./a
+/b/c/aaaa.//a// /b/c/aaaa./a
+/b/c/aaaa.//.aa /b/c/aaaa./.aa
+/b/c/aaaa.//.a. /b/c/aaaa./.a.
+/b/c/aaaa.//.a/ /b/c/aaaa./.a
+/b/c/aaaa.//..a /b/c/aaaa./..a
+/b/c/aaaa.//... /b/c/aaaa./...
+/b/c/aaaa.//../ /b/c
+/b/c/aaaa.//./a /b/c/aaaa./a
+/b/c/aaaa.//./. /b/c/aaaa.
+/b/c/aaaa.//.// /b/c/aaaa.
+/b/c/aaaa.///aa /b/c/aaaa./aa
+/b/c/aaaa.///a. /b/c/aaaa./a.
+/b/c/aaaa.///a/ /b/c/aaaa./a
+/b/c/aaaa.///.a /b/c/aaaa./.a
+/b/c/aaaa.///.. /b/c
+/b/c/aaaa.///./ /b/c/aaaa.
+/b/c/aaaa.////a /b/c/aaaa./a
+/b/c/aaaa.////. /b/c/aaaa.
+/b/c/aaaa.///// /b/c/aaaa.
+/b/c/aaaa/aaaaa /b/c/aaaa/aaaaa
+/b/c/aaaa/aaaa. /b/c/aaaa/aaaa.
+/b/c/aaaa/aaaa/ /b/c/aaaa/aaaa
+/b/c/aaaa/aaa.a /b/c/aaaa/aaa.a
+/b/c/aaaa/aaa.. /b/c/aaaa/aaa..
+/b/c/aaaa/aaa./ /b/c/aaaa/aaa.
+/b/c/aaaa/aaa/a /b/c/aaaa/aaa/a
+/b/c/aaaa/aaa/. /b/c/aaaa/aaa
+/b/c/aaaa/aaa// /b/c/aaaa/aaa
+/b/c/aaaa/aa.aa /b/c/aaaa/aa.aa
+/b/c/aaaa/aa.a. /b/c/aaaa/aa.a.
+/b/c/aaaa/aa.a/ /b/c/aaaa/aa.a
+/b/c/aaaa/aa..a /b/c/aaaa/aa..a
+/b/c/aaaa/aa... /b/c/aaaa/aa...
+/b/c/aaaa/aa../ /b/c/aaaa/aa..
+/b/c/aaaa/aa./a /b/c/aaaa/aa./a
+/b/c/aaaa/aa./. /b/c/aaaa/aa.
+/b/c/aaaa/aa.// /b/c/aaaa/aa.
+/b/c/aaaa/aa/aa /b/c/aaaa/aa/aa
+/b/c/aaaa/aa/a. /b/c/aaaa/aa/a.
+/b/c/aaaa/aa/a/ /b/c/aaaa/aa/a
+/b/c/aaaa/aa/.a /b/c/aaaa/aa/.a
+/b/c/aaaa/aa/.. /b/c/aaaa
+/b/c/aaaa/aa/./ /b/c/aaaa/aa
+/b/c/aaaa/aa//a /b/c/aaaa/aa/a
+/b/c/aaaa/aa//. /b/c/aaaa/aa
+/b/c/aaaa/aa/// /b/c/aaaa/aa
+/b/c/aaaa/a.aaa /b/c/aaaa/a.aaa
+/b/c/aaaa/a.aa. /b/c/aaaa/a.aa.
+/b/c/aaaa/a.aa/ /b/c/aaaa/a.aa
+/b/c/aaaa/a.a.a /b/c/aaaa/a.a.a
+/b/c/aaaa/a.a.. /b/c/aaaa/a.a..
+/b/c/aaaa/a.a./ /b/c/aaaa/a.a.
+/b/c/aaaa/a.a/a /b/c/aaaa/a.a/a
+/b/c/aaaa/a.a/. /b/c/aaaa/a.a
+/b/c/aaaa/a.a// /b/c/aaaa/a.a
+/b/c/aaaa/a..aa /b/c/aaaa/a..aa
+/b/c/aaaa/a..a. /b/c/aaaa/a..a.
+/b/c/aaaa/a..a/ /b/c/aaaa/a..a
+/b/c/aaaa/a...a /b/c/aaaa/a...a
+/b/c/aaaa/a.... /b/c/aaaa/a....
+/b/c/aaaa/a.../ /b/c/aaaa/a...
+/b/c/aaaa/a../a /b/c/aaaa/a../a
+/b/c/aaaa/a../. /b/c/aaaa/a..
+/b/c/aaaa/a..// /b/c/aaaa/a..
+/b/c/aaaa/a./aa /b/c/aaaa/a./aa
+/b/c/aaaa/a./a. /b/c/aaaa/a./a.
+/b/c/aaaa/a./a/ /b/c/aaaa/a./a
+/b/c/aaaa/a./.a /b/c/aaaa/a./.a
+/b/c/aaaa/a./.. /b/c/aaaa
+/b/c/aaaa/a././ /b/c/aaaa/a.
+/b/c/aaaa/a.//a /b/c/aaaa/a./a
+/b/c/aaaa/a.//. /b/c/aaaa/a.
+/b/c/aaaa/a./// /b/c/aaaa/a.
+/b/c/aaaa/a/aaa /b/c/aaaa/a/aaa
+/b/c/aaaa/a/aa. /b/c/aaaa/a/aa.
+/b/c/aaaa/a/aa/ /b/c/aaaa/a/aa
+/b/c/aaaa/a/a.a /b/c/aaaa/a/a.a
+/b/c/aaaa/a/a.. /b/c/aaaa/a/a..
+/b/c/aaaa/a/a./ /b/c/aaaa/a/a.
+/b/c/aaaa/a/a/a /b/c/aaaa/a/a/a
+/b/c/aaaa/a/a/. /b/c/aaaa/a/a
+/b/c/aaaa/a/a// /b/c/aaaa/a/a
+/b/c/aaaa/a/.aa /b/c/aaaa/a/.aa
+/b/c/aaaa/a/.a. /b/c/aaaa/a/.a.
+/b/c/aaaa/a/.a/ /b/c/aaaa/a/.a
+/b/c/aaaa/a/..a /b/c/aaaa/a/..a
+/b/c/aaaa/a/... /b/c/aaaa/a/...
+/b/c/aaaa/a/../ /b/c/aaaa
+/b/c/aaaa/a/./a /b/c/aaaa/a/a
+/b/c/aaaa/a/./. /b/c/aaaa/a
+/b/c/aaaa/a/.// /b/c/aaaa/a
+/b/c/aaaa/a//aa /b/c/aaaa/a/aa
+/b/c/aaaa/a//a. /b/c/aaaa/a/a.
+/b/c/aaaa/a//a/ /b/c/aaaa/a/a
+/b/c/aaaa/a//.a /b/c/aaaa/a/.a
+/b/c/aaaa/a//.. /b/c/aaaa
+/b/c/aaaa/a//./ /b/c/aaaa/a
+/b/c/aaaa/a///a /b/c/aaaa/a/a
+/b/c/aaaa/a///. /b/c/aaaa/a
+/b/c/aaaa/a//// /b/c/aaaa/a
+/b/c/aaaa/.aaaa /b/c/aaaa/.aaaa
+/b/c/aaaa/.aaa. /b/c/aaaa/.aaa.
+/b/c/aaaa/.aaa/ /b/c/aaaa/.aaa
+/b/c/aaaa/.aa.a /b/c/aaaa/.aa.a
+/b/c/aaaa/.aa.. /b/c/aaaa/.aa..
+/b/c/aaaa/.aa./ /b/c/aaaa/.aa.
+/b/c/aaaa/.aa/a /b/c/aaaa/.aa/a
+/b/c/aaaa/.aa/. /b/c/aaaa/.aa
+/b/c/aaaa/.aa// /b/c/aaaa/.aa
+/b/c/aaaa/.a.aa /b/c/aaaa/.a.aa
+/b/c/aaaa/.a.a. /b/c/aaaa/.a.a.
+/b/c/aaaa/.a.a/ /b/c/aaaa/.a.a
+/b/c/aaaa/.a..a /b/c/aaaa/.a..a
+/b/c/aaaa/.a... /b/c/aaaa/.a...
+/b/c/aaaa/.a../ /b/c/aaaa/.a..
+/b/c/aaaa/.a./a /b/c/aaaa/.a./a
+/b/c/aaaa/.a./. /b/c/aaaa/.a.
+/b/c/aaaa/.a.// /b/c/aaaa/.a.
+/b/c/aaaa/.a/aa /b/c/aaaa/.a/aa
+/b/c/aaaa/.a/a. /b/c/aaaa/.a/a.
+/b/c/aaaa/.a/a/ /b/c/aaaa/.a/a
+/b/c/aaaa/.a/.a /b/c/aaaa/.a/.a
+/b/c/aaaa/.a/.. /b/c/aaaa
+/b/c/aaaa/.a/./ /b/c/aaaa/.a
+/b/c/aaaa/.a//a /b/c/aaaa/.a/a
+/b/c/aaaa/.a//. /b/c/aaaa/.a
+/b/c/aaaa/.a/// /b/c/aaaa/.a
+/b/c/aaaa/..aaa /b/c/aaaa/..aaa
+/b/c/aaaa/..aa. /b/c/aaaa/..aa.
+/b/c/aaaa/..aa/ /b/c/aaaa/..aa
+/b/c/aaaa/..a.a /b/c/aaaa/..a.a
+/b/c/aaaa/..a.. /b/c/aaaa/..a..
+/b/c/aaaa/..a./ /b/c/aaaa/..a.
+/b/c/aaaa/..a/a /b/c/aaaa/..a/a
+/b/c/aaaa/..a/. /b/c/aaaa/..a
+/b/c/aaaa/..a// /b/c/aaaa/..a
+/b/c/aaaa/...aa /b/c/aaaa/...aa
+/b/c/aaaa/...a. /b/c/aaaa/...a.
+/b/c/aaaa/...a/ /b/c/aaaa/...a
+/b/c/aaaa/....a /b/c/aaaa/....a
+/b/c/aaaa/..... /b/c/aaaa/.....
+/b/c/aaaa/..../ /b/c/aaaa/....
+/b/c/aaaa/.../a /b/c/aaaa/.../a
+/b/c/aaaa/.../. /b/c/aaaa/...
+/b/c/aaaa/...// /b/c/aaaa/...
+/b/c/aaaa/../aa /b/c/aa
+/b/c/aaaa/../a. /b/c/a.
+/b/c/aaaa/../a/ /b/c/a
+/b/c/aaaa/../.a /b/c/.a
+/b/c/aaaa/../.. /b
+/b/c/aaaa/.././ /b/c
+/b/c/aaaa/..//a /b/c/a
+/b/c/aaaa/..//. /b/c
+/b/c/aaaa/../// /b/c
+/b/c/aaaa/./aaa /b/c/aaaa/aaa
+/b/c/aaaa/./aa. /b/c/aaaa/aa.
+/b/c/aaaa/./aa/ /b/c/aaaa/aa
+/b/c/aaaa/./a.a /b/c/aaaa/a.a
+/b/c/aaaa/./a.. /b/c/aaaa/a..
+/b/c/aaaa/./a./ /b/c/aaaa/a.
+/b/c/aaaa/./a/a /b/c/aaaa/a/a
+/b/c/aaaa/./a/. /b/c/aaaa/a
+/b/c/aaaa/./a// /b/c/aaaa/a
+/b/c/aaaa/./.aa /b/c/aaaa/.aa
+/b/c/aaaa/./.a. /b/c/aaaa/.a.
+/b/c/aaaa/./.a/ /b/c/aaaa/.a
+/b/c/aaaa/./..a /b/c/aaaa/..a
+/b/c/aaaa/./... /b/c/aaaa/...
+/b/c/aaaa/./../ /b/c
+/b/c/aaaa/././a /b/c/aaaa/a
+/b/c/aaaa/././. /b/c/aaaa
+/b/c/aaaa/./.// /b/c/aaaa
+/b/c/aaaa/.//aa /b/c/aaaa/aa
+/b/c/aaaa/.//a. /b/c/aaaa/a.
+/b/c/aaaa/.//a/ /b/c/aaaa/a
+/b/c/aaaa/.//.a /b/c/aaaa/.a
+/b/c/aaaa/.//.. /b/c
+/b/c/aaaa/.//./ /b/c/aaaa
+/b/c/aaaa/.///a /b/c/aaaa/a
+/b/c/aaaa/.///. /b/c/aaaa
+/b/c/aaaa/.//// /b/c/aaaa
+/b/c/aaaa//aaaa /b/c/aaaa/aaaa
+/b/c/aaaa//aaa. /b/c/aaaa/aaa.
+/b/c/aaaa//aaa/ /b/c/aaaa/aaa
+/b/c/aaaa//aa.a /b/c/aaaa/aa.a
+/b/c/aaaa//aa.. /b/c/aaaa/aa..
+/b/c/aaaa//aa./ /b/c/aaaa/aa.
+/b/c/aaaa//aa/a /b/c/aaaa/aa/a
+/b/c/aaaa//aa/. /b/c/aaaa/aa
+/b/c/aaaa//aa// /b/c/aaaa/aa
+/b/c/aaaa//a.aa /b/c/aaaa/a.aa
+/b/c/aaaa//a.a. /b/c/aaaa/a.a.
+/b/c/aaaa//a.a/ /b/c/aaaa/a.a
+/b/c/aaaa//a..a /b/c/aaaa/a..a
+/b/c/aaaa//a... /b/c/aaaa/a...
+/b/c/aaaa//a../ /b/c/aaaa/a..
+/b/c/aaaa//a./a /b/c/aaaa/a./a
+/b/c/aaaa//a./. /b/c/aaaa/a.
+/b/c/aaaa//a.// /b/c/aaaa/a.
+/b/c/aaaa//a/aa /b/c/aaaa/a/aa
+/b/c/aaaa//a/a. /b/c/aaaa/a/a.
+/b/c/aaaa//a/a/ /b/c/aaaa/a/a
+/b/c/aaaa//a/.a /b/c/aaaa/a/.a
+/b/c/aaaa//a/.. /b/c/aaaa
+/b/c/aaaa//a/./ /b/c/aaaa/a
+/b/c/aaaa//a//a /b/c/aaaa/a/a
+/b/c/aaaa//a//. /b/c/aaaa/a
+/b/c/aaaa//a/// /b/c/aaaa/a
+/b/c/aaaa//.aaa /b/c/aaaa/.aaa
+/b/c/aaaa//.aa. /b/c/aaaa/.aa.
+/b/c/aaaa//.aa/ /b/c/aaaa/.aa
+/b/c/aaaa//.a.a /b/c/aaaa/.a.a
+/b/c/aaaa//.a.. /b/c/aaaa/.a..
+/b/c/aaaa//.a./ /b/c/aaaa/.a.
+/b/c/aaaa//.a/a /b/c/aaaa/.a/a
+/b/c/aaaa//.a/. /b/c/aaaa/.a
+/b/c/aaaa//.a// /b/c/aaaa/.a
+/b/c/aaaa//..aa /b/c/aaaa/..aa
+/b/c/aaaa//..a. /b/c/aaaa/..a.
+/b/c/aaaa//..a/ /b/c/aaaa/..a
+/b/c/aaaa//...a /b/c/aaaa/...a
+/b/c/aaaa//.... /b/c/aaaa/....
+/b/c/aaaa//.../ /b/c/aaaa/...
+/b/c/aaaa//../a /b/c/a
+/b/c/aaaa//../. /b/c
+/b/c/aaaa//..// /b/c
+/b/c/aaaa//./aa /b/c/aaaa/aa
+/b/c/aaaa//./a. /b/c/aaaa/a.
+/b/c/aaaa//./a/ /b/c/aaaa/a
+/b/c/aaaa//./.a /b/c/aaaa/.a
+/b/c/aaaa//./.. /b/c
+/b/c/aaaa//././ /b/c/aaaa
+/b/c/aaaa//.//a /b/c/aaaa/a
+/b/c/aaaa//.//. /b/c/aaaa
+/b/c/aaaa//./// /b/c/aaaa
+/b/c/aaaa///aaa /b/c/aaaa/aaa
+/b/c/aaaa///aa. /b/c/aaaa/aa.
+/b/c/aaaa///aa/ /b/c/aaaa/aa
+/b/c/aaaa///a.a /b/c/aaaa/a.a
+/b/c/aaaa///a.. /b/c/aaaa/a..
+/b/c/aaaa///a./ /b/c/aaaa/a.
+/b/c/aaaa///a/a /b/c/aaaa/a/a
+/b/c/aaaa///a/. /b/c/aaaa/a
+/b/c/aaaa///a// /b/c/aaaa/a
+/b/c/aaaa///.aa /b/c/aaaa/.aa
+/b/c/aaaa///.a. /b/c/aaaa/.a.
+/b/c/aaaa///.a/ /b/c/aaaa/.a
+/b/c/aaaa///..a /b/c/aaaa/..a
+/b/c/aaaa///... /b/c/aaaa/...
+/b/c/aaaa///../ /b/c
+/b/c/aaaa///./a /b/c/aaaa/a
+/b/c/aaaa///./. /b/c/aaaa
+/b/c/aaaa///.// /b/c/aaaa
+/b/c/aaaa////aa /b/c/aaaa/aa
+/b/c/aaaa////a. /b/c/aaaa/a.
+/b/c/aaaa////a/ /b/c/aaaa/a
+/b/c/aaaa////.a /b/c/aaaa/.a
+/b/c/aaaa////.. /b/c
+/b/c/aaaa////./ /b/c/aaaa
+/b/c/aaaa/////a /b/c/aaaa/a
+/b/c/aaaa/////. /b/c/aaaa
+/b/c/aaaa////// /b/c/aaaa
+/b/c/aaa.aaaaaa /b/c/aaa.aaaaaa
+/b/c/aaa.aaaaa. /b/c/aaa.aaaaa.
+/b/c/aaa.aaaaa/ /b/c/aaa.aaaaa
+/b/c/aaa.aaaa.a /b/c/aaa.aaaa.a
+/b/c/aaa.aaaa.. /b/c/aaa.aaaa..
+/b/c/aaa.aaaa./ /b/c/aaa.aaaa.
+/b/c/aaa.aaaa/a /b/c/aaa.aaaa/a
+/b/c/aaa.aaaa/. /b/c/aaa.aaaa
+/b/c/aaa.aaaa// /b/c/aaa.aaaa
+/b/c/aaa.aaa.aa /b/c/aaa.aaa.aa
+/b/c/aaa.aaa.a. /b/c/aaa.aaa.a.
+/b/c/aaa.aaa.a/ /b/c/aaa.aaa.a
+/b/c/aaa.aaa..a /b/c/aaa.aaa..a
+/b/c/aaa.aaa... /b/c/aaa.aaa...
+/b/c/aaa.aaa../ /b/c/aaa.aaa..
+/b/c/aaa.aaa./a /b/c/aaa.aaa./a
+/b/c/aaa.aaa./. /b/c/aaa.aaa.
+/b/c/aaa.aaa.// /b/c/aaa.aaa.
+/b/c/aaa.aaa/aa /b/c/aaa.aaa/aa
+/b/c/aaa.aaa/a. /b/c/aaa.aaa/a.
+/b/c/aaa.aaa/a/ /b/c/aaa.aaa/a
+/b/c/aaa.aaa/.a /b/c/aaa.aaa/.a
+/b/c/aaa.aaa/.. /b/c
+/b/c/aaa.aaa/./ /b/c/aaa.aaa
+/b/c/aaa.aaa//a /b/c/aaa.aaa/a
+/b/c/aaa.aaa//. /b/c/aaa.aaa
+/b/c/aaa.aaa/// /b/c/aaa.aaa
+/b/c/aaa.aa.aaa /b/c/aaa.aa.aaa
+/b/c/aaa.aa.aa. /b/c/aaa.aa.aa.
+/b/c/aaa.aa.aa/ /b/c/aaa.aa.aa
+/b/c/aaa.aa.a.a /b/c/aaa.aa.a.a
+/b/c/aaa.aa.a.. /b/c/aaa.aa.a..
+/b/c/aaa.aa.a./ /b/c/aaa.aa.a.
+/b/c/aaa.aa.a/a /b/c/aaa.aa.a/a
+/b/c/aaa.aa.a/. /b/c/aaa.aa.a
+/b/c/aaa.aa.a// /b/c/aaa.aa.a
+/b/c/aaa.aa..aa /b/c/aaa.aa..aa
+/b/c/aaa.aa..a. /b/c/aaa.aa..a.
+/b/c/aaa.aa..a/ /b/c/aaa.aa..a
+/b/c/aaa.aa...a /b/c/aaa.aa...a
+/b/c/aaa.aa.... /b/c/aaa.aa....
+/b/c/aaa.aa.../ /b/c/aaa.aa...
+/b/c/aaa.aa../a /b/c/aaa.aa../a
+/b/c/aaa.aa../. /b/c/aaa.aa..
+/b/c/aaa.aa..// /b/c/aaa.aa..
+/b/c/aaa.aa./aa /b/c/aaa.aa./aa
+/b/c/aaa.aa./a. /b/c/aaa.aa./a.
+/b/c/aaa.aa./a/ /b/c/aaa.aa./a
+/b/c/aaa.aa./.a /b/c/aaa.aa./.a
+/b/c/aaa.aa./.. /b/c
+/b/c/aaa.aa././ /b/c/aaa.aa.
+/b/c/aaa.aa.//a /b/c/aaa.aa./a
+/b/c/aaa.aa.//. /b/c/aaa.aa.
+/b/c/aaa.aa./// /b/c/aaa.aa.
+/b/c/aaa.aa/aaa /b/c/aaa.aa/aaa
+/b/c/aaa.aa/aa. /b/c/aaa.aa/aa.
+/b/c/aaa.aa/aa/ /b/c/aaa.aa/aa
+/b/c/aaa.aa/a.a /b/c/aaa.aa/a.a
+/b/c/aaa.aa/a.. /b/c/aaa.aa/a..
+/b/c/aaa.aa/a./ /b/c/aaa.aa/a.
+/b/c/aaa.aa/a/a /b/c/aaa.aa/a/a
+/b/c/aaa.aa/a/. /b/c/aaa.aa/a
+/b/c/aaa.aa/a// /b/c/aaa.aa/a
+/b/c/aaa.aa/.aa /b/c/aaa.aa/.aa
+/b/c/aaa.aa/.a. /b/c/aaa.aa/.a.
+/b/c/aaa.aa/.a/ /b/c/aaa.aa/.a
+/b/c/aaa.aa/..a /b/c/aaa.aa/..a
+/b/c/aaa.aa/... /b/c/aaa.aa/...
+/b/c/aaa.aa/../ /b/c
+/b/c/aaa.aa/./a /b/c/aaa.aa/a
+/b/c/aaa.aa/./. /b/c/aaa.aa
+/b/c/aaa.aa/.// /b/c/aaa.aa
+/b/c/aaa.aa//aa /b/c/aaa.aa/aa
+/b/c/aaa.aa//a. /b/c/aaa.aa/a.
+/b/c/aaa.aa//a/ /b/c/aaa.aa/a
+/b/c/aaa.aa//.a /b/c/aaa.aa/.a
+/b/c/aaa.aa//.. /b/c
+/b/c/aaa.aa//./ /b/c/aaa.aa
+/b/c/aaa.aa///a /b/c/aaa.aa/a
+/b/c/aaa.aa///. /b/c/aaa.aa
+/b/c/aaa.aa//// /b/c/aaa.aa
+/b/c/aaa.a.aaaa /b/c/aaa.a.aaaa
+/b/c/aaa.a.aaa. /b/c/aaa.a.aaa.
+/b/c/aaa.a.aaa/ /b/c/aaa.a.aaa
+/b/c/aaa.a.aa.a /b/c/aaa.a.aa.a
+/b/c/aaa.a.aa.. /b/c/aaa.a.aa..
+/b/c/aaa.a.aa./ /b/c/aaa.a.aa.
+/b/c/aaa.a.aa/a /b/c/aaa.a.aa/a
+/b/c/aaa.a.aa/. /b/c/aaa.a.aa
+/b/c/aaa.a.aa// /b/c/aaa.a.aa
+/b/c/aaa.a.a.aa /b/c/aaa.a.a.aa
+/b/c/aaa.a.a.a. /b/c/aaa.a.a.a.
+/b/c/aaa.a.a.a/ /b/c/aaa.a.a.a
+/b/c/aaa.a.a..a /b/c/aaa.a.a..a
+/b/c/aaa.a.a... /b/c/aaa.a.a...
+/b/c/aaa.a.a../ /b/c/aaa.a.a..
+/b/c/aaa.a.a./a /b/c/aaa.a.a./a
+/b/c/aaa.a.a./. /b/c/aaa.a.a.
+/b/c/aaa.a.a.// /b/c/aaa.a.a.
+/b/c/aaa.a.a/aa /b/c/aaa.a.a/aa
+/b/c/aaa.a.a/a. /b/c/aaa.a.a/a.
+/b/c/aaa.a.a/a/ /b/c/aaa.a.a/a
+/b/c/aaa.a.a/.a /b/c/aaa.a.a/.a
+/b/c/aaa.a.a/.. /b/c
+/b/c/aaa.a.a/./ /b/c/aaa.a.a
+/b/c/aaa.a.a//a /b/c/aaa.a.a/a
+/b/c/aaa.a.a//. /b/c/aaa.a.a
+/b/c/aaa.a.a/// /b/c/aaa.a.a
+/b/c/aaa.a..aaa /b/c/aaa.a..aaa
+/b/c/aaa.a..aa. /b/c/aaa.a..aa.
+/b/c/aaa.a..aa/ /b/c/aaa.a..aa
+/b/c/aaa.a..a.a /b/c/aaa.a..a.a
+/b/c/aaa.a..a.. /b/c/aaa.a..a..
+/b/c/aaa.a..a./ /b/c/aaa.a..a.
+/b/c/aaa.a..a/a /b/c/aaa.a..a/a
+/b/c/aaa.a..a/. /b/c/aaa.a..a
+/b/c/aaa.a..a// /b/c/aaa.a..a
+/b/c/aaa.a...aa /b/c/aaa.a...aa
+/b/c/aaa.a...a. /b/c/aaa.a...a.
+/b/c/aaa.a...a/ /b/c/aaa.a...a
+/b/c/aaa.a....a /b/c/aaa.a....a
+/b/c/aaa.a..... /b/c/aaa.a.....
+/b/c/aaa.a..../ /b/c/aaa.a....
+/b/c/aaa.a.../a /b/c/aaa.a.../a
+/b/c/aaa.a.../. /b/c/aaa.a...
+/b/c/aaa.a...// /b/c/aaa.a...
+/b/c/aaa.a../aa /b/c/aaa.a../aa
+/b/c/aaa.a../a. /b/c/aaa.a../a.
+/b/c/aaa.a../a/ /b/c/aaa.a../a
+/b/c/aaa.a../.a /b/c/aaa.a../.a
+/b/c/aaa.a../.. /b/c
+/b/c/aaa.a.././ /b/c/aaa.a..
+/b/c/aaa.a..//a /b/c/aaa.a../a
+/b/c/aaa.a..//. /b/c/aaa.a..
+/b/c/aaa.a../// /b/c/aaa.a..
+/b/c/aaa.a./aaa /b/c/aaa.a./aaa
+/b/c/aaa.a./aa. /b/c/aaa.a./aa.
+/b/c/aaa.a./aa/ /b/c/aaa.a./aa
+/b/c/aaa.a./a.a /b/c/aaa.a./a.a
+/b/c/aaa.a./a.. /b/c/aaa.a./a..
+/b/c/aaa.a./a./ /b/c/aaa.a./a.
+/b/c/aaa.a./a/a /b/c/aaa.a./a/a
+/b/c/aaa.a./a/. /b/c/aaa.a./a
+/b/c/aaa.a./a// /b/c/aaa.a./a
+/b/c/aaa.a./.aa /b/c/aaa.a./.aa
+/b/c/aaa.a./.a. /b/c/aaa.a./.a.
+/b/c/aaa.a./.a/ /b/c/aaa.a./.a
+/b/c/aaa.a./..a /b/c/aaa.a./..a
+/b/c/aaa.a./... /b/c/aaa.a./...
+/b/c/aaa.a./../ /b/c
+/b/c/aaa.a././a /b/c/aaa.a./a
+/b/c/aaa.a././. /b/c/aaa.a.
+/b/c/aaa.a./.// /b/c/aaa.a.
+/b/c/aaa.a.//aa /b/c/aaa.a./aa
+/b/c/aaa.a.//a. /b/c/aaa.a./a.
+/b/c/aaa.a.//a/ /b/c/aaa.a./a
+/b/c/aaa.a.//.a /b/c/aaa.a./.a
+/b/c/aaa.a.//.. /b/c
+/b/c/aaa.a.//./ /b/c/aaa.a.
+/b/c/aaa.a.///a /b/c/aaa.a./a
+/b/c/aaa.a.///. /b/c/aaa.a.
+/b/c/aaa.a.//// /b/c/aaa.a.
+/b/c/aaa.a/aaaa /b/c/aaa.a/aaaa
+/b/c/aaa.a/aaa. /b/c/aaa.a/aaa.
+/b/c/aaa.a/aaa/ /b/c/aaa.a/aaa
+/b/c/aaa.a/aa.a /b/c/aaa.a/aa.a
+/b/c/aaa.a/aa.. /b/c/aaa.a/aa..
+/b/c/aaa.a/aa./ /b/c/aaa.a/aa.
+/b/c/aaa.a/aa/a /b/c/aaa.a/aa/a
+/b/c/aaa.a/aa/. /b/c/aaa.a/aa
+/b/c/aaa.a/aa// /b/c/aaa.a/aa
+/b/c/aaa.a/a.aa /b/c/aaa.a/a.aa
+/b/c/aaa.a/a.a. /b/c/aaa.a/a.a.
+/b/c/aaa.a/a.a/ /b/c/aaa.a/a.a
+/b/c/aaa.a/a..a /b/c/aaa.a/a..a
+/b/c/aaa.a/a... /b/c/aaa.a/a...
+/b/c/aaa.a/a../ /b/c/aaa.a/a..
+/b/c/aaa.a/a./a /b/c/aaa.a/a./a
+/b/c/aaa.a/a./. /b/c/aaa.a/a.
+/b/c/aaa.a/a.// /b/c/aaa.a/a.
+/b/c/aaa.a/a/aa /b/c/aaa.a/a/aa
+/b/c/aaa.a/a/a. /b/c/aaa.a/a/a.
+/b/c/aaa.a/a/a/ /b/c/aaa.a/a/a
+/b/c/aaa.a/a/.a /b/c/aaa.a/a/.a
+/b/c/aaa.a/a/.. /b/c/aaa.a
+/b/c/aaa.a/a/./ /b/c/aaa.a/a
+/b/c/aaa.a/a//a /b/c/aaa.a/a/a
+/b/c/aaa.a/a//. /b/c/aaa.a/a
+/b/c/aaa.a/a/// /b/c/aaa.a/a
+/b/c/aaa.a/.aaa /b/c/aaa.a/.aaa
+/b/c/aaa.a/.aa. /b/c/aaa.a/.aa.
+/b/c/aaa.a/.aa/ /b/c/aaa.a/.aa
+/b/c/aaa.a/.a.a /b/c/aaa.a/.a.a
+/b/c/aaa.a/.a.. /b/c/aaa.a/.a..
+/b/c/aaa.a/.a./ /b/c/aaa.a/.a.
+/b/c/aaa.a/.a/a /b/c/aaa.a/.a/a
+/b/c/aaa.a/.a/. /b/c/aaa.a/.a
+/b/c/aaa.a/.a// /b/c/aaa.a/.a
+/b/c/aaa.a/..aa /b/c/aaa.a/..aa
+/b/c/aaa.a/..a. /b/c/aaa.a/..a.
+/b/c/aaa.a/..a/ /b/c/aaa.a/..a
+/b/c/aaa.a/...a /b/c/aaa.a/...a
+/b/c/aaa.a/.... /b/c/aaa.a/....
+/b/c/aaa.a/.../ /b/c/aaa.a/...
+/b/c/aaa.a/../a /b/c/a
+/b/c/aaa.a/../. /b/c
+/b/c/aaa.a/..// /b/c
+/b/c/aaa.a/./aa /b/c/aaa.a/aa
+/b/c/aaa.a/./a. /b/c/aaa.a/a.
+/b/c/aaa.a/./a/ /b/c/aaa.a/a
+/b/c/aaa.a/./.a /b/c/aaa.a/.a
+/b/c/aaa.a/./.. /b/c
+/b/c/aaa.a/././ /b/c/aaa.a
+/b/c/aaa.a/.//a /b/c/aaa.a/a
+/b/c/aaa.a/.//. /b/c/aaa.a
+/b/c/aaa.a/./// /b/c/aaa.a
+/b/c/aaa.a//aaa /b/c/aaa.a/aaa
+/b/c/aaa.a//aa. /b/c/aaa.a/aa.
+/b/c/aaa.a//aa/ /b/c/aaa.a/aa
+/b/c/aaa.a//a.a /b/c/aaa.a/a.a
+/b/c/aaa.a//a.. /b/c/aaa.a/a..
+/b/c/aaa.a//a./ /b/c/aaa.a/a.
+/b/c/aaa.a//a/a /b/c/aaa.a/a/a
+/b/c/aaa.a//a/. /b/c/aaa.a/a
+/b/c/aaa.a//a// /b/c/aaa.a/a
+/b/c/aaa.a//.aa /b/c/aaa.a/.aa
+/b/c/aaa.a//.a. /b/c/aaa.a/.a.
+/b/c/aaa.a//.a/ /b/c/aaa.a/.a
+/b/c/aaa.a//..a /b/c/aaa.a/..a
+/b/c/aaa.a//... /b/c/aaa.a/...
+/b/c/aaa.a//../ /b/c
+/b/c/aaa.a//./a /b/c/aaa.a/a
+/b/c/aaa.a//./. /b/c/aaa.a
+/b/c/aaa.a//.// /b/c/aaa.a
+/b/c/aaa.a///aa /b/c/aaa.a/aa
+/b/c/aaa.a///a. /b/c/aaa.a/a.
+/b/c/aaa.a///a/ /b/c/aaa.a/a
+/b/c/aaa.a///.a /b/c/aaa.a/.a
+/b/c/aaa.a///.. /b/c
+/b/c/aaa.a///./ /b/c/aaa.a
+/b/c/aaa.a////a /b/c/aaa.a/a
+/b/c/aaa.a////. /b/c/aaa.a
+/b/c/aaa.a///// /b/c/aaa.a
+/b/c/aaa..aaaaa /b/c/aaa..aaaaa
+/b/c/aaa..aaaa. /b/c/aaa..aaaa.
+/b/c/aaa..aaaa/ /b/c/aaa..aaaa
+/b/c/aaa..aaa.a /b/c/aaa..aaa.a
+/b/c/aaa..aaa.. /b/c/aaa..aaa..
+/b/c/aaa..aaa./ /b/c/aaa..aaa.
+/b/c/aaa..aaa/a /b/c/aaa..aaa/a
+/b/c/aaa..aaa/. /b/c/aaa..aaa
+/b/c/aaa..aaa// /b/c/aaa..aaa
+/b/c/aaa..aa.aa /b/c/aaa..aa.aa
+/b/c/aaa..aa.a. /b/c/aaa..aa.a.
+/b/c/aaa..aa.a/ /b/c/aaa..aa.a
+/b/c/aaa..aa..a /b/c/aaa..aa..a
+/b/c/aaa..aa... /b/c/aaa..aa...
+/b/c/aaa..aa../ /b/c/aaa..aa..
+/b/c/aaa..aa./a /b/c/aaa..aa./a
+/b/c/aaa..aa./. /b/c/aaa..aa.
+/b/c/aaa..aa.// /b/c/aaa..aa.
+/b/c/aaa..aa/aa /b/c/aaa..aa/aa
+/b/c/aaa..aa/a. /b/c/aaa..aa/a.
+/b/c/aaa..aa/a/ /b/c/aaa..aa/a
+/b/c/aaa..aa/.a /b/c/aaa..aa/.a
+/b/c/aaa..aa/.. /b/c
+/b/c/aaa..aa/./ /b/c/aaa..aa
+/b/c/aaa..aa//a /b/c/aaa..aa/a
+/b/c/aaa..aa//. /b/c/aaa..aa
+/b/c/aaa..aa/// /b/c/aaa..aa
+/b/c/aaa..a.aaa /b/c/aaa..a.aaa
+/b/c/aaa..a.aa. /b/c/aaa..a.aa.
+/b/c/aaa..a.aa/ /b/c/aaa..a.aa
+/b/c/aaa..a.a.a /b/c/aaa..a.a.a
+/b/c/aaa..a.a.. /b/c/aaa..a.a..
+/b/c/aaa..a.a./ /b/c/aaa..a.a.
+/b/c/aaa..a.a/a /b/c/aaa..a.a/a
+/b/c/aaa..a.a/. /b/c/aaa..a.a
+/b/c/aaa..a.a// /b/c/aaa..a.a
+/b/c/aaa..a..aa /b/c/aaa..a..aa
+/b/c/aaa..a..a. /b/c/aaa..a..a.
+/b/c/aaa..a..a/ /b/c/aaa..a..a
+/b/c/aaa..a...a /b/c/aaa..a...a
+/b/c/aaa..a.... /b/c/aaa..a....
+/b/c/aaa..a.../ /b/c/aaa..a...
+/b/c/aaa..a../a /b/c/aaa..a../a
+/b/c/aaa..a../. /b/c/aaa..a..
+/b/c/aaa..a..// /b/c/aaa..a..
+/b/c/aaa..a./aa /b/c/aaa..a./aa
+/b/c/aaa..a./a. /b/c/aaa..a./a.
+/b/c/aaa..a./a/ /b/c/aaa..a./a
+/b/c/aaa..a./.a /b/c/aaa..a./.a
+/b/c/aaa..a./.. /b/c
+/b/c/aaa..a././ /b/c/aaa..a.
+/b/c/aaa..a.//a /b/c/aaa..a./a
+/b/c/aaa..a.//. /b/c/aaa..a.
+/b/c/aaa..a./// /b/c/aaa..a.
+/b/c/aaa..a/aaa /b/c/aaa..a/aaa
+/b/c/aaa..a/aa. /b/c/aaa..a/aa.
+/b/c/aaa..a/aa/ /b/c/aaa..a/aa
+/b/c/aaa..a/a.a /b/c/aaa..a/a.a
+/b/c/aaa..a/a.. /b/c/aaa..a/a..
+/b/c/aaa..a/a./ /b/c/aaa..a/a.
+/b/c/aaa..a/a/a /b/c/aaa..a/a/a
+/b/c/aaa..a/a/. /b/c/aaa..a/a
+/b/c/aaa..a/a// /b/c/aaa..a/a
+/b/c/aaa..a/.aa /b/c/aaa..a/.aa
+/b/c/aaa..a/.a. /b/c/aaa..a/.a.
+/b/c/aaa..a/.a/ /b/c/aaa..a/.a
+/b/c/aaa..a/..a /b/c/aaa..a/..a
+/b/c/aaa..a/... /b/c/aaa..a/...
+/b/c/aaa..a/../ /b/c
+/b/c/aaa..a/./a /b/c/aaa..a/a
+/b/c/aaa..a/./. /b/c/aaa..a
+/b/c/aaa..a/.// /b/c/aaa..a
+/b/c/aaa..a//aa /b/c/aaa..a/aa
+/b/c/aaa..a//a. /b/c/aaa..a/a.
+/b/c/aaa..a//a/ /b/c/aaa..a/a
+/b/c/aaa..a//.a /b/c/aaa..a/.a
+/b/c/aaa..a//.. /b/c
+/b/c/aaa..a//./ /b/c/aaa..a
+/b/c/aaa..a///a /b/c/aaa..a/a
+/b/c/aaa..a///. /b/c/aaa..a
+/b/c/aaa..a//// /b/c/aaa..a
+/b/c/aaa...aaaa /b/c/aaa...aaaa
+/b/c/aaa...aaa. /b/c/aaa...aaa.
+/b/c/aaa...aaa/ /b/c/aaa...aaa
+/b/c/aaa...aa.a /b/c/aaa...aa.a
+/b/c/aaa...aa.. /b/c/aaa...aa..
+/b/c/aaa...aa./ /b/c/aaa...aa.
+/b/c/aaa...aa/a /b/c/aaa...aa/a
+/b/c/aaa...aa/. /b/c/aaa...aa
+/b/c/aaa...aa// /b/c/aaa...aa
+/b/c/aaa...a.aa /b/c/aaa...a.aa
+/b/c/aaa...a.a. /b/c/aaa...a.a.
+/b/c/aaa...a.a/ /b/c/aaa...a.a
+/b/c/aaa...a..a /b/c/aaa...a..a
+/b/c/aaa...a... /b/c/aaa...a...
+/b/c/aaa...a../ /b/c/aaa...a..
+/b/c/aaa...a./a /b/c/aaa...a./a
+/b/c/aaa...a./. /b/c/aaa...a.
+/b/c/aaa...a.// /b/c/aaa...a.
+/b/c/aaa...a/aa /b/c/aaa...a/aa
+/b/c/aaa...a/a. /b/c/aaa...a/a.
+/b/c/aaa...a/a/ /b/c/aaa...a/a
+/b/c/aaa...a/.a /b/c/aaa...a/.a
+/b/c/aaa...a/.. /b/c
+/b/c/aaa...a/./ /b/c/aaa...a
+/b/c/aaa...a//a /b/c/aaa...a/a
+/b/c/aaa...a//. /b/c/aaa...a
+/b/c/aaa...a/// /b/c/aaa...a
+/b/c/aaa....aaa /b/c/aaa....aaa
+/b/c/aaa....aa. /b/c/aaa....aa.
+/b/c/aaa....aa/ /b/c/aaa....aa
+/b/c/aaa....a.a /b/c/aaa....a.a
+/b/c/aaa....a.. /b/c/aaa....a..
+/b/c/aaa....a./ /b/c/aaa....a.
+/b/c/aaa....a/a /b/c/aaa....a/a
+/b/c/aaa....a/. /b/c/aaa....a
+/b/c/aaa....a// /b/c/aaa....a
+/b/c/aaa.....aa /b/c/aaa.....aa
+/b/c/aaa.....a. /b/c/aaa.....a.
+/b/c/aaa.....a/ /b/c/aaa.....a
+/b/c/aaa......a /b/c/aaa......a
+/b/c/aaa....... /b/c/aaa.......
+/b/c/aaa....../ /b/c/aaa......
+/b/c/aaa...../a /b/c/aaa...../a
+/b/c/aaa...../. /b/c/aaa.....
+/b/c/aaa.....// /b/c/aaa.....
+/b/c/aaa..../aa /b/c/aaa..../aa
+/b/c/aaa..../a. /b/c/aaa..../a.
+/b/c/aaa..../a/ /b/c/aaa..../a
+/b/c/aaa..../.a /b/c/aaa..../.a
+/b/c/aaa..../.. /b/c
+/b/c/aaa...././ /b/c/aaa....
+/b/c/aaa....//a /b/c/aaa..../a
+/b/c/aaa....//. /b/c/aaa....
+/b/c/aaa..../// /b/c/aaa....
+/b/c/aaa.../aaa /b/c/aaa.../aaa
+/b/c/aaa.../aa. /b/c/aaa.../aa.
+/b/c/aaa.../aa/ /b/c/aaa.../aa
+/b/c/aaa.../a.a /b/c/aaa.../a.a
+/b/c/aaa.../a.. /b/c/aaa.../a..
+/b/c/aaa.../a./ /b/c/aaa.../a.
+/b/c/aaa.../a/a /b/c/aaa.../a/a
+/b/c/aaa.../a/. /b/c/aaa.../a
+/b/c/aaa.../a// /b/c/aaa.../a
+/b/c/aaa.../.aa /b/c/aaa.../.aa
+/b/c/aaa.../.a. /b/c/aaa.../.a.
+/b/c/aaa.../.a/ /b/c/aaa.../.a
+/b/c/aaa.../..a /b/c/aaa.../..a
+/b/c/aaa.../... /b/c/aaa.../...
+/b/c/aaa.../../ /b/c
+/b/c/aaa..././a /b/c/aaa.../a
+/b/c/aaa..././. /b/c/aaa...
+/b/c/aaa.../.// /b/c/aaa...
+/b/c/aaa...//aa /b/c/aaa.../aa
+/b/c/aaa...//a. /b/c/aaa.../a.
+/b/c/aaa...//a/ /b/c/aaa.../a
+/b/c/aaa...//.a /b/c/aaa.../.a
+/b/c/aaa...//.. /b/c
+/b/c/aaa...//./ /b/c/aaa...
+/b/c/aaa...///a /b/c/aaa.../a
+/b/c/aaa...///. /b/c/aaa...
+/b/c/aaa...//// /b/c/aaa...
+/b/c/aaa../aaaa /b/c/aaa../aaaa
+/b/c/aaa../aaa. /b/c/aaa../aaa.
+/b/c/aaa../aaa/ /b/c/aaa../aaa
+/b/c/aaa../aa.a /b/c/aaa../aa.a
+/b/c/aaa../aa.. /b/c/aaa../aa..
+/b/c/aaa../aa./ /b/c/aaa../aa.
+/b/c/aaa../aa/a /b/c/aaa../aa/a
+/b/c/aaa../aa/. /b/c/aaa../aa
+/b/c/aaa../aa// /b/c/aaa../aa
+/b/c/aaa../a.aa /b/c/aaa../a.aa
+/b/c/aaa../a.a. /b/c/aaa../a.a.
+/b/c/aaa../a.a/ /b/c/aaa../a.a
+/b/c/aaa../a..a /b/c/aaa../a..a
+/b/c/aaa../a... /b/c/aaa../a...
+/b/c/aaa../a../ /b/c/aaa../a..
+/b/c/aaa../a./a /b/c/aaa../a./a
+/b/c/aaa../a./. /b/c/aaa../a.
+/b/c/aaa../a.// /b/c/aaa../a.
+/b/c/aaa../a/aa /b/c/aaa../a/aa
+/b/c/aaa../a/a. /b/c/aaa../a/a.
+/b/c/aaa../a/a/ /b/c/aaa../a/a
+/b/c/aaa../a/.a /b/c/aaa../a/.a
+/b/c/aaa../a/.. /b/c/aaa..
+/b/c/aaa../a/./ /b/c/aaa../a
+/b/c/aaa../a//a /b/c/aaa../a/a
+/b/c/aaa../a//. /b/c/aaa../a
+/b/c/aaa../a/// /b/c/aaa../a
+/b/c/aaa../.aaa /b/c/aaa../.aaa
+/b/c/aaa../.aa. /b/c/aaa../.aa.
+/b/c/aaa../.aa/ /b/c/aaa../.aa
+/b/c/aaa../.a.a /b/c/aaa../.a.a
+/b/c/aaa../.a.. /b/c/aaa../.a..
+/b/c/aaa../.a./ /b/c/aaa../.a.
+/b/c/aaa../.a/a /b/c/aaa../.a/a
+/b/c/aaa../.a/. /b/c/aaa../.a
+/b/c/aaa../.a// /b/c/aaa../.a
+/b/c/aaa../..aa /b/c/aaa../..aa
+/b/c/aaa../..a. /b/c/aaa../..a.
+/b/c/aaa../..a/ /b/c/aaa../..a
+/b/c/aaa../...a /b/c/aaa../...a
+/b/c/aaa../.... /b/c/aaa../....
+/b/c/aaa../.../ /b/c/aaa../...
+/b/c/aaa../../a /b/c/a
+/b/c/aaa../../. /b/c
+/b/c/aaa../..// /b/c
+/b/c/aaa.././aa /b/c/aaa../aa
+/b/c/aaa.././a. /b/c/aaa../a.
+/b/c/aaa.././a/ /b/c/aaa../a
+/b/c/aaa.././.a /b/c/aaa../.a
+/b/c/aaa.././.. /b/c
+/b/c/aaa../././ /b/c/aaa..
+/b/c/aaa.././/a /b/c/aaa../a
+/b/c/aaa.././/. /b/c/aaa..
+/b/c/aaa.././// /b/c/aaa..
+/b/c/aaa..//aaa /b/c/aaa../aaa
+/b/c/aaa..//aa. /b/c/aaa../aa.
+/b/c/aaa..//aa/ /b/c/aaa../aa
+/b/c/aaa..//a.a /b/c/aaa../a.a
+/b/c/aaa..//a.. /b/c/aaa../a..
+/b/c/aaa..//a./ /b/c/aaa../a.
+/b/c/aaa..//a/a /b/c/aaa../a/a
+/b/c/aaa..//a/. /b/c/aaa../a
+/b/c/aaa..//a// /b/c/aaa../a
+/b/c/aaa..//.aa /b/c/aaa../.aa
+/b/c/aaa..//.a. /b/c/aaa../.a.
+/b/c/aaa..//.a/ /b/c/aaa../.a
+/b/c/aaa..//..a /b/c/aaa../..a
+/b/c/aaa..//... /b/c/aaa../...
+/b/c/aaa..//../ /b/c
+/b/c/aaa..//./a /b/c/aaa../a
+/b/c/aaa..//./. /b/c/aaa..
+/b/c/aaa..//.// /b/c/aaa..
+/b/c/aaa..///aa /b/c/aaa../aa
+/b/c/aaa..///a. /b/c/aaa../a.
+/b/c/aaa..///a/ /b/c/aaa../a
+/b/c/aaa..///.a /b/c/aaa../.a
+/b/c/aaa..///.. /b/c
+/b/c/aaa..///./ /b/c/aaa..
+/b/c/aaa..////a /b/c/aaa../a
+/b/c/aaa..////. /b/c/aaa..
+/b/c/aaa..///// /b/c/aaa..
+/b/c/aaa./aaaaa /b/c/aaa./aaaaa
+/b/c/aaa./aaaa. /b/c/aaa./aaaa.
+/b/c/aaa./aaaa/ /b/c/aaa./aaaa
+/b/c/aaa./aaa.a /b/c/aaa./aaa.a
+/b/c/aaa./aaa.. /b/c/aaa./aaa..
+/b/c/aaa./aaa./ /b/c/aaa./aaa.
+/b/c/aaa./aaa/a /b/c/aaa./aaa/a
+/b/c/aaa./aaa/. /b/c/aaa./aaa
+/b/c/aaa./aaa// /b/c/aaa./aaa
+/b/c/aaa./aa.aa /b/c/aaa./aa.aa
+/b/c/aaa./aa.a. /b/c/aaa./aa.a.
+/b/c/aaa./aa.a/ /b/c/aaa./aa.a
+/b/c/aaa./aa..a /b/c/aaa./aa..a
+/b/c/aaa./aa... /b/c/aaa./aa...
+/b/c/aaa./aa../ /b/c/aaa./aa..
+/b/c/aaa./aa./a /b/c/aaa./aa./a
+/b/c/aaa./aa./. /b/c/aaa./aa.
+/b/c/aaa./aa.// /b/c/aaa./aa.
+/b/c/aaa./aa/aa /b/c/aaa./aa/aa
+/b/c/aaa./aa/a. /b/c/aaa./aa/a.
+/b/c/aaa./aa/a/ /b/c/aaa./aa/a
+/b/c/aaa./aa/.a /b/c/aaa./aa/.a
+/b/c/aaa./aa/.. /b/c/aaa.
+/b/c/aaa./aa/./ /b/c/aaa./aa
+/b/c/aaa./aa//a /b/c/aaa./aa/a
+/b/c/aaa./aa//. /b/c/aaa./aa
+/b/c/aaa./aa/// /b/c/aaa./aa
+/b/c/aaa./a.aaa /b/c/aaa./a.aaa
+/b/c/aaa./a.aa. /b/c/aaa./a.aa.
+/b/c/aaa./a.aa/ /b/c/aaa./a.aa
+/b/c/aaa./a.a.a /b/c/aaa./a.a.a
+/b/c/aaa./a.a.. /b/c/aaa./a.a..
+/b/c/aaa./a.a./ /b/c/aaa./a.a.
+/b/c/aaa./a.a/a /b/c/aaa./a.a/a
+/b/c/aaa./a.a/. /b/c/aaa./a.a
+/b/c/aaa./a.a// /b/c/aaa./a.a
+/b/c/aaa./a..aa /b/c/aaa./a..aa
+/b/c/aaa./a..a. /b/c/aaa./a..a.
+/b/c/aaa./a..a/ /b/c/aaa./a..a
+/b/c/aaa./a...a /b/c/aaa./a...a
+/b/c/aaa./a.... /b/c/aaa./a....
+/b/c/aaa./a.../ /b/c/aaa./a...
+/b/c/aaa./a../a /b/c/aaa./a../a
+/b/c/aaa./a../. /b/c/aaa./a..
+/b/c/aaa./a..// /b/c/aaa./a..
+/b/c/aaa./a./aa /b/c/aaa./a./aa
+/b/c/aaa./a./a. /b/c/aaa./a./a.
+/b/c/aaa./a./a/ /b/c/aaa./a./a
+/b/c/aaa./a./.a /b/c/aaa./a./.a
+/b/c/aaa./a./.. /b/c/aaa.
+/b/c/aaa./a././ /b/c/aaa./a.
+/b/c/aaa./a.//a /b/c/aaa./a./a
+/b/c/aaa./a.//. /b/c/aaa./a.
+/b/c/aaa./a./// /b/c/aaa./a.
+/b/c/aaa./a/aaa /b/c/aaa./a/aaa
+/b/c/aaa./a/aa. /b/c/aaa./a/aa.
+/b/c/aaa./a/aa/ /b/c/aaa./a/aa
+/b/c/aaa./a/a.a /b/c/aaa./a/a.a
+/b/c/aaa./a/a.. /b/c/aaa./a/a..
+/b/c/aaa./a/a./ /b/c/aaa./a/a.
+/b/c/aaa./a/a/a /b/c/aaa./a/a/a
+/b/c/aaa./a/a/. /b/c/aaa./a/a
+/b/c/aaa./a/a// /b/c/aaa./a/a
+/b/c/aaa./a/.aa /b/c/aaa./a/.aa
+/b/c/aaa./a/.a. /b/c/aaa./a/.a.
+/b/c/aaa./a/.a/ /b/c/aaa./a/.a
+/b/c/aaa./a/..a /b/c/aaa./a/..a
+/b/c/aaa./a/... /b/c/aaa./a/...
+/b/c/aaa./a/../ /b/c/aaa.
+/b/c/aaa./a/./a /b/c/aaa./a/a
+/b/c/aaa./a/./. /b/c/aaa./a
+/b/c/aaa./a/.// /b/c/aaa./a
+/b/c/aaa./a//aa /b/c/aaa./a/aa
+/b/c/aaa./a//a. /b/c/aaa./a/a.
+/b/c/aaa./a//a/ /b/c/aaa./a/a
+/b/c/aaa./a//.a /b/c/aaa./a/.a
+/b/c/aaa./a//.. /b/c/aaa.
+/b/c/aaa./a//./ /b/c/aaa./a
+/b/c/aaa./a///a /b/c/aaa./a/a
+/b/c/aaa./a///. /b/c/aaa./a
+/b/c/aaa./a//// /b/c/aaa./a
+/b/c/aaa./.aaaa /b/c/aaa./.aaaa
+/b/c/aaa./.aaa. /b/c/aaa./.aaa.
+/b/c/aaa./.aaa/ /b/c/aaa./.aaa
+/b/c/aaa./.aa.a /b/c/aaa./.aa.a
+/b/c/aaa./.aa.. /b/c/aaa./.aa..
+/b/c/aaa./.aa./ /b/c/aaa./.aa.
+/b/c/aaa./.aa/a /b/c/aaa./.aa/a
+/b/c/aaa./.aa/. /b/c/aaa./.aa
+/b/c/aaa./.aa// /b/c/aaa./.aa
+/b/c/aaa./.a.aa /b/c/aaa./.a.aa
+/b/c/aaa./.a.a. /b/c/aaa./.a.a.
+/b/c/aaa./.a.a/ /b/c/aaa./.a.a
+/b/c/aaa./.a..a /b/c/aaa./.a..a
+/b/c/aaa./.a... /b/c/aaa./.a...
+/b/c/aaa./.a../ /b/c/aaa./.a..
+/b/c/aaa./.a./a /b/c/aaa./.a./a
+/b/c/aaa./.a./. /b/c/aaa./.a.
+/b/c/aaa./.a.// /b/c/aaa./.a.
+/b/c/aaa./.a/aa /b/c/aaa./.a/aa
+/b/c/aaa./.a/a. /b/c/aaa./.a/a.
+/b/c/aaa./.a/a/ /b/c/aaa./.a/a
+/b/c/aaa./.a/.a /b/c/aaa./.a/.a
+/b/c/aaa./.a/.. /b/c/aaa.
+/b/c/aaa./.a/./ /b/c/aaa./.a
+/b/c/aaa./.a//a /b/c/aaa./.a/a
+/b/c/aaa./.a//. /b/c/aaa./.a
+/b/c/aaa./.a/// /b/c/aaa./.a
+/b/c/aaa./..aaa /b/c/aaa./..aaa
+/b/c/aaa./..aa. /b/c/aaa./..aa.
+/b/c/aaa./..aa/ /b/c/aaa./..aa
+/b/c/aaa./..a.a /b/c/aaa./..a.a
+/b/c/aaa./..a.. /b/c/aaa./..a..
+/b/c/aaa./..a./ /b/c/aaa./..a.
+/b/c/aaa./..a/a /b/c/aaa./..a/a
+/b/c/aaa./..a/. /b/c/aaa./..a
+/b/c/aaa./..a// /b/c/aaa./..a
+/b/c/aaa./...aa /b/c/aaa./...aa
+/b/c/aaa./...a. /b/c/aaa./...a.
+/b/c/aaa./...a/ /b/c/aaa./...a
+/b/c/aaa./....a /b/c/aaa./....a
+/b/c/aaa./..... /b/c/aaa./.....
+/b/c/aaa./..../ /b/c/aaa./....
+/b/c/aaa./.../a /b/c/aaa./.../a
+/b/c/aaa./.../. /b/c/aaa./...
+/b/c/aaa./...// /b/c/aaa./...
+/b/c/aaa./../aa /b/c/aa
+/b/c/aaa./../a. /b/c/a.
+/b/c/aaa./../a/ /b/c/a
+/b/c/aaa./../.a /b/c/.a
+/b/c/aaa./../.. /b
+/b/c/aaa./.././ /b/c
+/b/c/aaa./..//a /b/c/a
+/b/c/aaa./..//. /b/c
+/b/c/aaa./../// /b/c
+/b/c/aaa././aaa /b/c/aaa./aaa
+/b/c/aaa././aa. /b/c/aaa./aa.
+/b/c/aaa././aa/ /b/c/aaa./aa
+/b/c/aaa././a.a /b/c/aaa./a.a
+/b/c/aaa././a.. /b/c/aaa./a..
+/b/c/aaa././a./ /b/c/aaa./a.
+/b/c/aaa././a/a /b/c/aaa./a/a
+/b/c/aaa././a/. /b/c/aaa./a
+/b/c/aaa././a// /b/c/aaa./a
+/b/c/aaa././.aa /b/c/aaa./.aa
+/b/c/aaa././.a. /b/c/aaa./.a.
+/b/c/aaa././.a/ /b/c/aaa./.a
+/b/c/aaa././..a /b/c/aaa./..a
+/b/c/aaa././... /b/c/aaa./...
+/b/c/aaa././../ /b/c
+/b/c/aaa./././a /b/c/aaa./a
+/b/c/aaa./././. /b/c/aaa.
+/b/c/aaa././.// /b/c/aaa.
+/b/c/aaa././/aa /b/c/aaa./aa
+/b/c/aaa././/a. /b/c/aaa./a.
+/b/c/aaa././/a/ /b/c/aaa./a
+/b/c/aaa././/.a /b/c/aaa./.a
+/b/c/aaa././/.. /b/c
+/b/c/aaa././/./ /b/c/aaa.
+/b/c/aaa././//a /b/c/aaa./a
+/b/c/aaa././//. /b/c/aaa.
+/b/c/aaa././/// /b/c/aaa.
+/b/c/aaa.//aaaa /b/c/aaa./aaaa
+/b/c/aaa.//aaa. /b/c/aaa./aaa.
+/b/c/aaa.//aaa/ /b/c/aaa./aaa
+/b/c/aaa.//aa.a /b/c/aaa./aa.a
+/b/c/aaa.//aa.. /b/c/aaa./aa..
+/b/c/aaa.//aa./ /b/c/aaa./aa.
+/b/c/aaa.//aa/a /b/c/aaa./aa/a
+/b/c/aaa.//aa/. /b/c/aaa./aa
+/b/c/aaa.//aa// /b/c/aaa./aa
+/b/c/aaa.//a.aa /b/c/aaa./a.aa
+/b/c/aaa.//a.a. /b/c/aaa./a.a.
+/b/c/aaa.//a.a/ /b/c/aaa./a.a
+/b/c/aaa.//a..a /b/c/aaa./a..a
+/b/c/aaa.//a... /b/c/aaa./a...
+/b/c/aaa.//a../ /b/c/aaa./a..
+/b/c/aaa.//a./a /b/c/aaa./a./a
+/b/c/aaa.//a./. /b/c/aaa./a.
+/b/c/aaa.//a.// /b/c/aaa./a.
+/b/c/aaa.//a/aa /b/c/aaa./a/aa
+/b/c/aaa.//a/a. /b/c/aaa./a/a.
+/b/c/aaa.//a/a/ /b/c/aaa./a/a
+/b/c/aaa.//a/.a /b/c/aaa./a/.a
+/b/c/aaa.//a/.. /b/c/aaa.
+/b/c/aaa.//a/./ /b/c/aaa./a
+/b/c/aaa.//a//a /b/c/aaa./a/a
+/b/c/aaa.//a//. /b/c/aaa./a
+/b/c/aaa.//a/// /b/c/aaa./a
+/b/c/aaa.//.aaa /b/c/aaa./.aaa
+/b/c/aaa.//.aa. /b/c/aaa./.aa.
+/b/c/aaa.//.aa/ /b/c/aaa./.aa
+/b/c/aaa.//.a.a /b/c/aaa./.a.a
+/b/c/aaa.//.a.. /b/c/aaa./.a..
+/b/c/aaa.//.a./ /b/c/aaa./.a.
+/b/c/aaa.//.a/a /b/c/aaa./.a/a
+/b/c/aaa.//.a/. /b/c/aaa./.a
+/b/c/aaa.//.a// /b/c/aaa./.a
+/b/c/aaa.//..aa /b/c/aaa./..aa
+/b/c/aaa.//..a. /b/c/aaa./..a.
+/b/c/aaa.//..a/ /b/c/aaa./..a
+/b/c/aaa.//...a /b/c/aaa./...a
+/b/c/aaa.//.... /b/c/aaa./....
+/b/c/aaa.//.../ /b/c/aaa./...
+/b/c/aaa.//../a /b/c/a
+/b/c/aaa.//../. /b/c
+/b/c/aaa.//..// /b/c
+/b/c/aaa.//./aa /b/c/aaa./aa
+/b/c/aaa.//./a. /b/c/aaa./a.
+/b/c/aaa.//./a/ /b/c/aaa./a
+/b/c/aaa.//./.a /b/c/aaa./.a
+/b/c/aaa.//./.. /b/c
+/b/c/aaa.//././ /b/c/aaa.
+/b/c/aaa.//.//a /b/c/aaa./a
+/b/c/aaa.//.//. /b/c/aaa.
+/b/c/aaa.//./// /b/c/aaa.
+/b/c/aaa.///aaa /b/c/aaa./aaa
+/b/c/aaa.///aa. /b/c/aaa./aa.
+/b/c/aaa.///aa/ /b/c/aaa./aa
+/b/c/aaa.///a.a /b/c/aaa./a.a
+/b/c/aaa.///a.. /b/c/aaa./a..
+/b/c/aaa.///a./ /b/c/aaa./a.
+/b/c/aaa.///a/a /b/c/aaa./a/a
+/b/c/aaa.///a/. /b/c/aaa./a
+/b/c/aaa.///a// /b/c/aaa./a
+/b/c/aaa.///.aa /b/c/aaa./.aa
+/b/c/aaa.///.a. /b/c/aaa./.a.
+/b/c/aaa.///.a/ /b/c/aaa./.a
+/b/c/aaa.///..a /b/c/aaa./..a
+/b/c/aaa.///... /b/c/aaa./...
+/b/c/aaa.///../ /b/c
+/b/c/aaa.///./a /b/c/aaa./a
+/b/c/aaa.///./. /b/c/aaa.
+/b/c/aaa.///.// /b/c/aaa.
+/b/c/aaa.////aa /b/c/aaa./aa
+/b/c/aaa.////a. /b/c/aaa./a.
+/b/c/aaa.////a/ /b/c/aaa./a
+/b/c/aaa.////.a /b/c/aaa./.a
+/b/c/aaa.////.. /b/c
+/b/c/aaa.////./ /b/c/aaa.
+/b/c/aaa./////a /b/c/aaa./a
+/b/c/aaa./////. /b/c/aaa.
+/b/c/aaa.////// /b/c/aaa.
+/b/c/aaa/aaaaaa /b/c/aaa/aaaaaa
+/b/c/aaa/aaaaa. /b/c/aaa/aaaaa.
+/b/c/aaa/aaaaa/ /b/c/aaa/aaaaa
+/b/c/aaa/aaaa.a /b/c/aaa/aaaa.a
+/b/c/aaa/aaaa.. /b/c/aaa/aaaa..
+/b/c/aaa/aaaa./ /b/c/aaa/aaaa.
+/b/c/aaa/aaaa/a /b/c/aaa/aaaa/a
+/b/c/aaa/aaaa/. /b/c/aaa/aaaa
+/b/c/aaa/aaaa// /b/c/aaa/aaaa
+/b/c/aaa/aaa.aa /b/c/aaa/aaa.aa
+/b/c/aaa/aaa.a. /b/c/aaa/aaa.a.
+/b/c/aaa/aaa.a/ /b/c/aaa/aaa.a
+/b/c/aaa/aaa..a /b/c/aaa/aaa..a
+/b/c/aaa/aaa... /b/c/aaa/aaa...
+/b/c/aaa/aaa../ /b/c/aaa/aaa..
+/b/c/aaa/aaa./a /b/c/aaa/aaa./a
+/b/c/aaa/aaa./. /b/c/aaa/aaa.
+/b/c/aaa/aaa.// /b/c/aaa/aaa.
+/b/c/aaa/aaa/aa /b/c/aaa/aaa/aa
+/b/c/aaa/aaa/a. /b/c/aaa/aaa/a.
+/b/c/aaa/aaa/a/ /b/c/aaa/aaa/a
+/b/c/aaa/aaa/.a /b/c/aaa/aaa/.a
+/b/c/aaa/aaa/.. /b/c/aaa
+/b/c/aaa/aaa/./ /b/c/aaa/aaa
+/b/c/aaa/aaa//a /b/c/aaa/aaa/a
+/b/c/aaa/aaa//. /b/c/aaa/aaa
+/b/c/aaa/aaa/// /b/c/aaa/aaa
+/b/c/aaa/aa.aaa /b/c/aaa/aa.aaa
+/b/c/aaa/aa.aa. /b/c/aaa/aa.aa.
+/b/c/aaa/aa.aa/ /b/c/aaa/aa.aa
+/b/c/aaa/aa.a.a /b/c/aaa/aa.a.a
+/b/c/aaa/aa.a.. /b/c/aaa/aa.a..
+/b/c/aaa/aa.a./ /b/c/aaa/aa.a.
+/b/c/aaa/aa.a/a /b/c/aaa/aa.a/a
+/b/c/aaa/aa.a/. /b/c/aaa/aa.a
+/b/c/aaa/aa.a// /b/c/aaa/aa.a
+/b/c/aaa/aa..aa /b/c/aaa/aa..aa
+/b/c/aaa/aa..a. /b/c/aaa/aa..a.
+/b/c/aaa/aa..a/ /b/c/aaa/aa..a
+/b/c/aaa/aa...a /b/c/aaa/aa...a
+/b/c/aaa/aa.... /b/c/aaa/aa....
+/b/c/aaa/aa.../ /b/c/aaa/aa...
+/b/c/aaa/aa../a /b/c/aaa/aa../a
+/b/c/aaa/aa../. /b/c/aaa/aa..
+/b/c/aaa/aa..// /b/c/aaa/aa..
+/b/c/aaa/aa./aa /b/c/aaa/aa./aa
+/b/c/aaa/aa./a. /b/c/aaa/aa./a.
+/b/c/aaa/aa./a/ /b/c/aaa/aa./a
+/b/c/aaa/aa./.a /b/c/aaa/aa./.a
+/b/c/aaa/aa./.. /b/c/aaa
+/b/c/aaa/aa././ /b/c/aaa/aa.
+/b/c/aaa/aa.//a /b/c/aaa/aa./a
+/b/c/aaa/aa.//. /b/c/aaa/aa.
+/b/c/aaa/aa./// /b/c/aaa/aa.
+/b/c/aaa/aa/aaa /b/c/aaa/aa/aaa
+/b/c/aaa/aa/aa. /b/c/aaa/aa/aa.
+/b/c/aaa/aa/aa/ /b/c/aaa/aa/aa
+/b/c/aaa/aa/a.a /b/c/aaa/aa/a.a
+/b/c/aaa/aa/a.. /b/c/aaa/aa/a..
+/b/c/aaa/aa/a./ /b/c/aaa/aa/a.
+/b/c/aaa/aa/a/a /b/c/aaa/aa/a/a
+/b/c/aaa/aa/a/. /b/c/aaa/aa/a
+/b/c/aaa/aa/a// /b/c/aaa/aa/a
+/b/c/aaa/aa/.aa /b/c/aaa/aa/.aa
+/b/c/aaa/aa/.a. /b/c/aaa/aa/.a.
+/b/c/aaa/aa/.a/ /b/c/aaa/aa/.a
+/b/c/aaa/aa/..a /b/c/aaa/aa/..a
+/b/c/aaa/aa/... /b/c/aaa/aa/...
+/b/c/aaa/aa/../ /b/c/aaa
+/b/c/aaa/aa/./a /b/c/aaa/aa/a
+/b/c/aaa/aa/./. /b/c/aaa/aa
+/b/c/aaa/aa/.// /b/c/aaa/aa
+/b/c/aaa/aa//aa /b/c/aaa/aa/aa
+/b/c/aaa/aa//a. /b/c/aaa/aa/a.
+/b/c/aaa/aa//a/ /b/c/aaa/aa/a
+/b/c/aaa/aa//.a /b/c/aaa/aa/.a
+/b/c/aaa/aa//.. /b/c/aaa
+/b/c/aaa/aa//./ /b/c/aaa/aa
+/b/c/aaa/aa///a /b/c/aaa/aa/a
+/b/c/aaa/aa///. /b/c/aaa/aa
+/b/c/aaa/aa//// /b/c/aaa/aa
+/b/c/aaa/a.aaaa /b/c/aaa/a.aaaa
+/b/c/aaa/a.aaa. /b/c/aaa/a.aaa.
+/b/c/aaa/a.aaa/ /b/c/aaa/a.aaa
+/b/c/aaa/a.aa.a /b/c/aaa/a.aa.a
+/b/c/aaa/a.aa.. /b/c/aaa/a.aa..
+/b/c/aaa/a.aa./ /b/c/aaa/a.aa.
+/b/c/aaa/a.aa/a /b/c/aaa/a.aa/a
+/b/c/aaa/a.aa/. /b/c/aaa/a.aa
+/b/c/aaa/a.aa// /b/c/aaa/a.aa
+/b/c/aaa/a.a.aa /b/c/aaa/a.a.aa
+/b/c/aaa/a.a.a. /b/c/aaa/a.a.a.
+/b/c/aaa/a.a.a/ /b/c/aaa/a.a.a
+/b/c/aaa/a.a..a /b/c/aaa/a.a..a
+/b/c/aaa/a.a... /b/c/aaa/a.a...
+/b/c/aaa/a.a../ /b/c/aaa/a.a..
+/b/c/aaa/a.a./a /b/c/aaa/a.a./a
+/b/c/aaa/a.a./. /b/c/aaa/a.a.
+/b/c/aaa/a.a.// /b/c/aaa/a.a.
+/b/c/aaa/a.a/aa /b/c/aaa/a.a/aa
+/b/c/aaa/a.a/a. /b/c/aaa/a.a/a.
+/b/c/aaa/a.a/a/ /b/c/aaa/a.a/a
+/b/c/aaa/a.a/.a /b/c/aaa/a.a/.a
+/b/c/aaa/a.a/.. /b/c/aaa
+/b/c/aaa/a.a/./ /b/c/aaa/a.a
+/b/c/aaa/a.a//a /b/c/aaa/a.a/a
+/b/c/aaa/a.a//. /b/c/aaa/a.a
+/b/c/aaa/a.a/// /b/c/aaa/a.a
+/b/c/aaa/a..aaa /b/c/aaa/a..aaa
+/b/c/aaa/a..aa. /b/c/aaa/a..aa.
+/b/c/aaa/a..aa/ /b/c/aaa/a..aa
+/b/c/aaa/a..a.a /b/c/aaa/a..a.a
+/b/c/aaa/a..a.. /b/c/aaa/a..a..
+/b/c/aaa/a..a./ /b/c/aaa/a..a.
+/b/c/aaa/a..a/a /b/c/aaa/a..a/a
+/b/c/aaa/a..a/. /b/c/aaa/a..a
+/b/c/aaa/a..a// /b/c/aaa/a..a
+/b/c/aaa/a...aa /b/c/aaa/a...aa
+/b/c/aaa/a...a. /b/c/aaa/a...a.
+/b/c/aaa/a...a/ /b/c/aaa/a...a
+/b/c/aaa/a....a /b/c/aaa/a....a
+/b/c/aaa/a..... /b/c/aaa/a.....
+/b/c/aaa/a..../ /b/c/aaa/a....
+/b/c/aaa/a.../a /b/c/aaa/a.../a
+/b/c/aaa/a.../. /b/c/aaa/a...
+/b/c/aaa/a...// /b/c/aaa/a...
+/b/c/aaa/a../aa /b/c/aaa/a../aa
+/b/c/aaa/a../a. /b/c/aaa/a../a.
+/b/c/aaa/a../a/ /b/c/aaa/a../a
+/b/c/aaa/a../.a /b/c/aaa/a../.a
+/b/c/aaa/a../.. /b/c/aaa
+/b/c/aaa/a.././ /b/c/aaa/a..
+/b/c/aaa/a..//a /b/c/aaa/a../a
+/b/c/aaa/a..//. /b/c/aaa/a..
+/b/c/aaa/a../// /b/c/aaa/a..
+/b/c/aaa/a./aaa /b/c/aaa/a./aaa
+/b/c/aaa/a./aa. /b/c/aaa/a./aa.
+/b/c/aaa/a./aa/ /b/c/aaa/a./aa
+/b/c/aaa/a./a.a /b/c/aaa/a./a.a
+/b/c/aaa/a./a.. /b/c/aaa/a./a..
+/b/c/aaa/a./a./ /b/c/aaa/a./a.
+/b/c/aaa/a./a/a /b/c/aaa/a./a/a
+/b/c/aaa/a./a/. /b/c/aaa/a./a
+/b/c/aaa/a./a// /b/c/aaa/a./a
+/b/c/aaa/a./.aa /b/c/aaa/a./.aa
+/b/c/aaa/a./.a. /b/c/aaa/a./.a.
+/b/c/aaa/a./.a/ /b/c/aaa/a./.a
+/b/c/aaa/a./..a /b/c/aaa/a./..a
+/b/c/aaa/a./... /b/c/aaa/a./...
+/b/c/aaa/a./../ /b/c/aaa
+/b/c/aaa/a././a /b/c/aaa/a./a
+/b/c/aaa/a././. /b/c/aaa/a.
+/b/c/aaa/a./.// /b/c/aaa/a.
+/b/c/aaa/a.//aa /b/c/aaa/a./aa
+/b/c/aaa/a.//a. /b/c/aaa/a./a.
+/b/c/aaa/a.//a/ /b/c/aaa/a./a
+/b/c/aaa/a.//.a /b/c/aaa/a./.a
+/b/c/aaa/a.//.. /b/c/aaa
+/b/c/aaa/a.//./ /b/c/aaa/a.
+/b/c/aaa/a.///a /b/c/aaa/a./a
+/b/c/aaa/a.///. /b/c/aaa/a.
+/b/c/aaa/a.//// /b/c/aaa/a.
+/b/c/aaa/a/aaaa /b/c/aaa/a/aaaa
+/b/c/aaa/a/aaa. /b/c/aaa/a/aaa.
+/b/c/aaa/a/aaa/ /b/c/aaa/a/aaa
+/b/c/aaa/a/aa.a /b/c/aaa/a/aa.a
+/b/c/aaa/a/aa.. /b/c/aaa/a/aa..
+/b/c/aaa/a/aa./ /b/c/aaa/a/aa.
+/b/c/aaa/a/aa/a /b/c/aaa/a/aa/a
+/b/c/aaa/a/aa/. /b/c/aaa/a/aa
+/b/c/aaa/a/aa// /b/c/aaa/a/aa
+/b/c/aaa/a/a.aa /b/c/aaa/a/a.aa
+/b/c/aaa/a/a.a. /b/c/aaa/a/a.a.
+/b/c/aaa/a/a.a/ /b/c/aaa/a/a.a
+/b/c/aaa/a/a..a /b/c/aaa/a/a..a
+/b/c/aaa/a/a... /b/c/aaa/a/a...
+/b/c/aaa/a/a../ /b/c/aaa/a/a..
+/b/c/aaa/a/a./a /b/c/aaa/a/a./a
+/b/c/aaa/a/a./. /b/c/aaa/a/a.
+/b/c/aaa/a/a.// /b/c/aaa/a/a.
+/b/c/aaa/a/a/aa /b/c/aaa/a/a/aa
+/b/c/aaa/a/a/a. /b/c/aaa/a/a/a.
+/b/c/aaa/a/a/a/ /b/c/aaa/a/a/a
+/b/c/aaa/a/a/.a /b/c/aaa/a/a/.a
+/b/c/aaa/a/a/.. /b/c/aaa/a
+/b/c/aaa/a/a/./ /b/c/aaa/a/a
+/b/c/aaa/a/a//a /b/c/aaa/a/a/a
+/b/c/aaa/a/a//. /b/c/aaa/a/a
+/b/c/aaa/a/a/// /b/c/aaa/a/a
+/b/c/aaa/a/.aaa /b/c/aaa/a/.aaa
+/b/c/aaa/a/.aa. /b/c/aaa/a/.aa.
+/b/c/aaa/a/.aa/ /b/c/aaa/a/.aa
+/b/c/aaa/a/.a.a /b/c/aaa/a/.a.a
+/b/c/aaa/a/.a.. /b/c/aaa/a/.a..
+/b/c/aaa/a/.a./ /b/c/aaa/a/.a.
+/b/c/aaa/a/.a/a /b/c/aaa/a/.a/a
+/b/c/aaa/a/.a/. /b/c/aaa/a/.a
+/b/c/aaa/a/.a// /b/c/aaa/a/.a
+/b/c/aaa/a/..aa /b/c/aaa/a/..aa
+/b/c/aaa/a/..a. /b/c/aaa/a/..a.
+/b/c/aaa/a/..a/ /b/c/aaa/a/..a
+/b/c/aaa/a/...a /b/c/aaa/a/...a
+/b/c/aaa/a/.... /b/c/aaa/a/....
+/b/c/aaa/a/.../ /b/c/aaa/a/...
+/b/c/aaa/a/../a /b/c/aaa/a
+/b/c/aaa/a/../. /b/c/aaa
+/b/c/aaa/a/..// /b/c/aaa
+/b/c/aaa/a/./aa /b/c/aaa/a/aa
+/b/c/aaa/a/./a. /b/c/aaa/a/a.
+/b/c/aaa/a/./a/ /b/c/aaa/a/a
+/b/c/aaa/a/./.a /b/c/aaa/a/.a
+/b/c/aaa/a/./.. /b/c/aaa
+/b/c/aaa/a/././ /b/c/aaa/a
+/b/c/aaa/a/.//a /b/c/aaa/a/a
+/b/c/aaa/a/.//. /b/c/aaa/a
+/b/c/aaa/a/./// /b/c/aaa/a
+/b/c/aaa/a//aaa /b/c/aaa/a/aaa
+/b/c/aaa/a//aa. /b/c/aaa/a/aa.
+/b/c/aaa/a//aa/ /b/c/aaa/a/aa
+/b/c/aaa/a//a.a /b/c/aaa/a/a.a
+/b/c/aaa/a//a.. /b/c/aaa/a/a..
+/b/c/aaa/a//a./ /b/c/aaa/a/a.
+/b/c/aaa/a//a/a /b/c/aaa/a/a/a
+/b/c/aaa/a//a/. /b/c/aaa/a/a
+/b/c/aaa/a//a// /b/c/aaa/a/a
+/b/c/aaa/a//.aa /b/c/aaa/a/.aa
+/b/c/aaa/a//.a. /b/c/aaa/a/.a.
+/b/c/aaa/a//.a/ /b/c/aaa/a/.a
+/b/c/aaa/a//..a /b/c/aaa/a/..a
+/b/c/aaa/a//... /b/c/aaa/a/...
+/b/c/aaa/a//../ /b/c/aaa
+/b/c/aaa/a//./a /b/c/aaa/a/a
+/b/c/aaa/a//./. /b/c/aaa/a
+/b/c/aaa/a//.// /b/c/aaa/a
+/b/c/aaa/a///aa /b/c/aaa/a/aa
+/b/c/aaa/a///a. /b/c/aaa/a/a.
+/b/c/aaa/a///a/ /b/c/aaa/a/a
+/b/c/aaa/a///.a /b/c/aaa/a/.a
+/b/c/aaa/a///.. /b/c/aaa
+/b/c/aaa/a///./ /b/c/aaa/a
+/b/c/aaa/a////a /b/c/aaa/a/a
+/b/c/aaa/a////. /b/c/aaa/a
+/b/c/aaa/a///// /b/c/aaa/a
+/b/c/aaa/.aaaaa /b/c/aaa/.aaaaa
+/b/c/aaa/.aaaa. /b/c/aaa/.aaaa.
+/b/c/aaa/.aaaa/ /b/c/aaa/.aaaa
+/b/c/aaa/.aaa.a /b/c/aaa/.aaa.a
+/b/c/aaa/.aaa.. /b/c/aaa/.aaa..
+/b/c/aaa/.aaa./ /b/c/aaa/.aaa.
+/b/c/aaa/.aaa/a /b/c/aaa/.aaa/a
+/b/c/aaa/.aaa/. /b/c/aaa/.aaa
+/b/c/aaa/.aaa// /b/c/aaa/.aaa
+/b/c/aaa/.aa.aa /b/c/aaa/.aa.aa
+/b/c/aaa/.aa.a. /b/c/aaa/.aa.a.
+/b/c/aaa/.aa.a/ /b/c/aaa/.aa.a
+/b/c/aaa/.aa..a /b/c/aaa/.aa..a
+/b/c/aaa/.aa... /b/c/aaa/.aa...
+/b/c/aaa/.aa../ /b/c/aaa/.aa..
+/b/c/aaa/.aa./a /b/c/aaa/.aa./a
+/b/c/aaa/.aa./. /b/c/aaa/.aa.
+/b/c/aaa/.aa.// /b/c/aaa/.aa.
+/b/c/aaa/.aa/aa /b/c/aaa/.aa/aa
+/b/c/aaa/.aa/a. /b/c/aaa/.aa/a.
+/b/c/aaa/.aa/a/ /b/c/aaa/.aa/a
+/b/c/aaa/.aa/.a /b/c/aaa/.aa/.a
+/b/c/aaa/.aa/.. /b/c/aaa
+/b/c/aaa/.aa/./ /b/c/aaa/.aa
+/b/c/aaa/.aa//a /b/c/aaa/.aa/a
+/b/c/aaa/.aa//. /b/c/aaa/.aa
+/b/c/aaa/.aa/// /b/c/aaa/.aa
+/b/c/aaa/.a.aaa /b/c/aaa/.a.aaa
+/b/c/aaa/.a.aa. /b/c/aaa/.a.aa.
+/b/c/aaa/.a.aa/ /b/c/aaa/.a.aa
+/b/c/aaa/.a.a.a /b/c/aaa/.a.a.a
+/b/c/aaa/.a.a.. /b/c/aaa/.a.a..
+/b/c/aaa/.a.a./ /b/c/aaa/.a.a.
+/b/c/aaa/.a.a/a /b/c/aaa/.a.a/a
+/b/c/aaa/.a.a/. /b/c/aaa/.a.a
+/b/c/aaa/.a.a// /b/c/aaa/.a.a
+/b/c/aaa/.a..aa /b/c/aaa/.a..aa
+/b/c/aaa/.a..a. /b/c/aaa/.a..a.
+/b/c/aaa/.a..a/ /b/c/aaa/.a..a
+/b/c/aaa/.a...a /b/c/aaa/.a...a
+/b/c/aaa/.a.... /b/c/aaa/.a....
+/b/c/aaa/.a.../ /b/c/aaa/.a...
+/b/c/aaa/.a../a /b/c/aaa/.a../a
+/b/c/aaa/.a../. /b/c/aaa/.a..
+/b/c/aaa/.a..// /b/c/aaa/.a..
+/b/c/aaa/.a./aa /b/c/aaa/.a./aa
+/b/c/aaa/.a./a. /b/c/aaa/.a./a.
+/b/c/aaa/.a./a/ /b/c/aaa/.a./a
+/b/c/aaa/.a./.a /b/c/aaa/.a./.a
+/b/c/aaa/.a./.. /b/c/aaa
+/b/c/aaa/.a././ /b/c/aaa/.a.
+/b/c/aaa/.a.//a /b/c/aaa/.a./a
+/b/c/aaa/.a.//. /b/c/aaa/.a.
+/b/c/aaa/.a./// /b/c/aaa/.a.
+/b/c/aaa/.a/aaa /b/c/aaa/.a/aaa
+/b/c/aaa/.a/aa. /b/c/aaa/.a/aa.
+/b/c/aaa/.a/aa/ /b/c/aaa/.a/aa
+/b/c/aaa/.a/a.a /b/c/aaa/.a/a.a
+/b/c/aaa/.a/a.. /b/c/aaa/.a/a..
+/b/c/aaa/.a/a./ /b/c/aaa/.a/a.
+/b/c/aaa/.a/a/a /b/c/aaa/.a/a/a
+/b/c/aaa/.a/a/. /b/c/aaa/.a/a
+/b/c/aaa/.a/a// /b/c/aaa/.a/a
+/b/c/aaa/.a/.aa /b/c/aaa/.a/.aa
+/b/c/aaa/.a/.a. /b/c/aaa/.a/.a.
+/b/c/aaa/.a/.a/ /b/c/aaa/.a/.a
+/b/c/aaa/.a/..a /b/c/aaa/.a/..a
+/b/c/aaa/.a/... /b/c/aaa/.a/...
+/b/c/aaa/.a/../ /b/c/aaa
+/b/c/aaa/.a/./a /b/c/aaa/.a/a
+/b/c/aaa/.a/./. /b/c/aaa/.a
+/b/c/aaa/.a/.// /b/c/aaa/.a
+/b/c/aaa/.a//aa /b/c/aaa/.a/aa
+/b/c/aaa/.a//a. /b/c/aaa/.a/a.
+/b/c/aaa/.a//a/ /b/c/aaa/.a/a
+/b/c/aaa/.a//.a /b/c/aaa/.a/.a
+/b/c/aaa/.a//.. /b/c/aaa
+/b/c/aaa/.a//./ /b/c/aaa/.a
+/b/c/aaa/.a///a /b/c/aaa/.a/a
+/b/c/aaa/.a///. /b/c/aaa/.a
+/b/c/aaa/.a//// /b/c/aaa/.a
+/b/c/aaa/..aaaa /b/c/aaa/..aaaa
+/b/c/aaa/..aaa. /b/c/aaa/..aaa.
+/b/c/aaa/..aaa/ /b/c/aaa/..aaa
+/b/c/aaa/..aa.a /b/c/aaa/..aa.a
+/b/c/aaa/..aa.. /b/c/aaa/..aa..
+/b/c/aaa/..aa./ /b/c/aaa/..aa.
+/b/c/aaa/..aa/a /b/c/aaa/..aa/a
+/b/c/aaa/..aa/. /b/c/aaa/..aa
+/b/c/aaa/..aa// /b/c/aaa/..aa
+/b/c/aaa/..a.aa /b/c/aaa/..a.aa
+/b/c/aaa/..a.a. /b/c/aaa/..a.a.
+/b/c/aaa/..a.a/ /b/c/aaa/..a.a
+/b/c/aaa/..a..a /b/c/aaa/..a..a
+/b/c/aaa/..a... /b/c/aaa/..a...
+/b/c/aaa/..a../ /b/c/aaa/..a..
+/b/c/aaa/..a./a /b/c/aaa/..a./a
+/b/c/aaa/..a./. /b/c/aaa/..a.
+/b/c/aaa/..a.// /b/c/aaa/..a.
+/b/c/aaa/..a/aa /b/c/aaa/..a/aa
+/b/c/aaa/..a/a. /b/c/aaa/..a/a.
+/b/c/aaa/..a/a/ /b/c/aaa/..a/a
+/b/c/aaa/..a/.a /b/c/aaa/..a/.a
+/b/c/aaa/..a/.. /b/c/aaa
+/b/c/aaa/..a/./ /b/c/aaa/..a
+/b/c/aaa/..a//a /b/c/aaa/..a/a
+/b/c/aaa/..a//. /b/c/aaa/..a
+/b/c/aaa/..a/// /b/c/aaa/..a
+/b/c/aaa/...aaa /b/c/aaa/...aaa
+/b/c/aaa/...aa. /b/c/aaa/...aa.
+/b/c/aaa/...aa/ /b/c/aaa/...aa
+/b/c/aaa/...a.a /b/c/aaa/...a.a
+/b/c/aaa/...a.. /b/c/aaa/...a..
+/b/c/aaa/...a./ /b/c/aaa/...a.
+/b/c/aaa/...a/a /b/c/aaa/...a/a
+/b/c/aaa/...a/. /b/c/aaa/...a
+/b/c/aaa/...a// /b/c/aaa/...a
+/b/c/aaa/....aa /b/c/aaa/....aa
+/b/c/aaa/....a. /b/c/aaa/....a.
+/b/c/aaa/....a/ /b/c/aaa/....a
+/b/c/aaa/.....a /b/c/aaa/.....a
+/b/c/aaa/...... /b/c/aaa/......
+/b/c/aaa/...../ /b/c/aaa/.....
+/b/c/aaa/..../a /b/c/aaa/..../a
+/b/c/aaa/..../. /b/c/aaa/....
+/b/c/aaa/....// /b/c/aaa/....
+/b/c/aaa/.../aa /b/c/aaa/.../aa
+/b/c/aaa/.../a. /b/c/aaa/.../a.
+/b/c/aaa/.../a/ /b/c/aaa/.../a
+/b/c/aaa/.../.a /b/c/aaa/.../.a
+/b/c/aaa/.../.. /b/c/aaa
+/b/c/aaa/..././ /b/c/aaa/...
+/b/c/aaa/...//a /b/c/aaa/.../a
+/b/c/aaa/...//. /b/c/aaa/...
+/b/c/aaa/.../// /b/c/aaa/...
+/b/c/aaa/../aaa /b/c/aaa
+/b/c/aaa/../aa. /b/c/aa.
+/b/c/aaa/../aa/ /b/c/aa
+/b/c/aaa/../a.a /b/c/a.a
+/b/c/aaa/../a.. /b/c/a..
+/b/c/aaa/../a./ /b/c/a.
+/b/c/aaa/../a/a /b/c/a/a
+/b/c/aaa/../a/. /b/c/a
+/b/c/aaa/../a// /b/c/a
+/b/c/aaa/../.aa /b/c/.aa
+/b/c/aaa/../.a. /b/c/.a.
+/b/c/aaa/../.a/ /b/c/.a
+/b/c/aaa/../..a /b/c/..a
+/b/c/aaa/../... /b/c/...
+/b/c/aaa/../../ /b
+/b/c/aaa/.././a /b/c/a
+/b/c/aaa/.././. /b/c
+/b/c/aaa/../.// /b/c
+/b/c/aaa/..//aa /b/c/aa
+/b/c/aaa/..//a. /b/c/a.
+/b/c/aaa/..//a/ /b/c/a
+/b/c/aaa/..//.a /b/c/.a
+/b/c/aaa/..//.. /b
+/b/c/aaa/..//./ /b/c
+/b/c/aaa/..///a /b/c/a
+/b/c/aaa/..///. /b/c
+/b/c/aaa/..//// /b/c
+/b/c/aaa/./aaaa /b/c/aaa/aaaa
+/b/c/aaa/./aaa. /b/c/aaa/aaa.
+/b/c/aaa/./aaa/ /b/c/aaa/aaa
+/b/c/aaa/./aa.a /b/c/aaa/aa.a
+/b/c/aaa/./aa.. /b/c/aaa/aa..
+/b/c/aaa/./aa./ /b/c/aaa/aa.
+/b/c/aaa/./aa/a /b/c/aaa/aa/a
+/b/c/aaa/./aa/. /b/c/aaa/aa
+/b/c/aaa/./aa// /b/c/aaa/aa
+/b/c/aaa/./a.aa /b/c/aaa/a.aa
+/b/c/aaa/./a.a. /b/c/aaa/a.a.
+/b/c/aaa/./a.a/ /b/c/aaa/a.a
+/b/c/aaa/./a..a /b/c/aaa/a..a
+/b/c/aaa/./a... /b/c/aaa/a...
+/b/c/aaa/./a../ /b/c/aaa/a..
+/b/c/aaa/./a./a /b/c/aaa/a./a
+/b/c/aaa/./a./. /b/c/aaa/a.
+/b/c/aaa/./a.// /b/c/aaa/a.
+/b/c/aaa/./a/aa /b/c/aaa/a/aa
+/b/c/aaa/./a/a. /b/c/aaa/a/a.
+/b/c/aaa/./a/a/ /b/c/aaa/a/a
+/b/c/aaa/./a/.a /b/c/aaa/a/.a
+/b/c/aaa/./a/.. /b/c/aaa
+/b/c/aaa/./a/./ /b/c/aaa/a
+/b/c/aaa/./a//a /b/c/aaa/a/a
+/b/c/aaa/./a//. /b/c/aaa/a
+/b/c/aaa/./a/// /b/c/aaa/a
+/b/c/aaa/./.aaa /b/c/aaa/.aaa
+/b/c/aaa/./.aa. /b/c/aaa/.aa.
+/b/c/aaa/./.aa/ /b/c/aaa/.aa
+/b/c/aaa/./.a.a /b/c/aaa/.a.a
+/b/c/aaa/./.a.. /b/c/aaa/.a..
+/b/c/aaa/./.a./ /b/c/aaa/.a.
+/b/c/aaa/./.a/a /b/c/aaa/.a/a
+/b/c/aaa/./.a/. /b/c/aaa/.a
+/b/c/aaa/./.a// /b/c/aaa/.a
+/b/c/aaa/./..aa /b/c/aaa/..aa
+/b/c/aaa/./..a. /b/c/aaa/..a.
+/b/c/aaa/./..a/ /b/c/aaa/..a
+/b/c/aaa/./...a /b/c/aaa/...a
+/b/c/aaa/./.... /b/c/aaa/....
+/b/c/aaa/./.../ /b/c/aaa/...
+/b/c/aaa/./../a /b/c/a
+/b/c/aaa/./../. /b/c
+/b/c/aaa/./..// /b/c
+/b/c/aaa/././aa /b/c/aaa/aa
+/b/c/aaa/././a. /b/c/aaa/a.
+/b/c/aaa/././a/ /b/c/aaa/a
+/b/c/aaa/././.a /b/c/aaa/.a
+/b/c/aaa/././.. /b/c
+/b/c/aaa/./././ /b/c/aaa
+/b/c/aaa/././/a /b/c/aaa/a
+/b/c/aaa/././/. /b/c/aaa
+/b/c/aaa/././// /b/c/aaa
+/b/c/aaa/.//aaa /b/c/aaa/aaa
+/b/c/aaa/.//aa. /b/c/aaa/aa.
+/b/c/aaa/.//aa/ /b/c/aaa/aa
+/b/c/aaa/.//a.a /b/c/aaa/a.a
+/b/c/aaa/.//a.. /b/c/aaa/a..
+/b/c/aaa/.//a./ /b/c/aaa/a.
+/b/c/aaa/.//a/a /b/c/aaa/a/a
+/b/c/aaa/.//a/. /b/c/aaa/a
+/b/c/aaa/.//a// /b/c/aaa/a
+/b/c/aaa/.//.aa /b/c/aaa/.aa
+/b/c/aaa/.//.a. /b/c/aaa/.a.
+/b/c/aaa/.//.a/ /b/c/aaa/.a
+/b/c/aaa/.//..a /b/c/aaa/..a
+/b/c/aaa/.//... /b/c/aaa/...
+/b/c/aaa/.//../ /b/c
+/b/c/aaa/.//./a /b/c/aaa/a
+/b/c/aaa/.//./. /b/c/aaa
+/b/c/aaa/.//.// /b/c/aaa
+/b/c/aaa/.///aa /b/c/aaa/aa
+/b/c/aaa/.///a. /b/c/aaa/a.
+/b/c/aaa/.///a/ /b/c/aaa/a
+/b/c/aaa/.///.a /b/c/aaa/.a
+/b/c/aaa/.///.. /b/c
+/b/c/aaa/.///./ /b/c/aaa
+/b/c/aaa/.////a /b/c/aaa/a
+/b/c/aaa/.////. /b/c/aaa
+/b/c/aaa/.///// /b/c/aaa
+/b/c/aaa//aaaaa /b/c/aaa/aaaaa
+/b/c/aaa//aaaa. /b/c/aaa/aaaa.
+/b/c/aaa//aaaa/ /b/c/aaa/aaaa
+/b/c/aaa//aaa.a /b/c/aaa/aaa.a
+/b/c/aaa//aaa.. /b/c/aaa/aaa..
+/b/c/aaa//aaa./ /b/c/aaa/aaa.
+/b/c/aaa//aaa/a /b/c/aaa/aaa/a
+/b/c/aaa//aaa/. /b/c/aaa/aaa
+/b/c/aaa//aaa// /b/c/aaa/aaa
+/b/c/aaa//aa.aa /b/c/aaa/aa.aa
+/b/c/aaa//aa.a. /b/c/aaa/aa.a.
+/b/c/aaa//aa.a/ /b/c/aaa/aa.a
+/b/c/aaa//aa..a /b/c/aaa/aa..a
+/b/c/aaa//aa... /b/c/aaa/aa...
+/b/c/aaa//aa../ /b/c/aaa/aa..
+/b/c/aaa//aa./a /b/c/aaa/aa./a
+/b/c/aaa//aa./. /b/c/aaa/aa.
+/b/c/aaa//aa.// /b/c/aaa/aa.
+/b/c/aaa//aa/aa /b/c/aaa/aa/aa
+/b/c/aaa//aa/a. /b/c/aaa/aa/a.
+/b/c/aaa//aa/a/ /b/c/aaa/aa/a
+/b/c/aaa//aa/.a /b/c/aaa/aa/.a
+/b/c/aaa//aa/.. /b/c/aaa
+/b/c/aaa//aa/./ /b/c/aaa/aa
+/b/c/aaa//aa//a /b/c/aaa/aa/a
+/b/c/aaa//aa//. /b/c/aaa/aa
+/b/c/aaa//aa/// /b/c/aaa/aa
+/b/c/aaa//a.aaa /b/c/aaa/a.aaa
+/b/c/aaa//a.aa. /b/c/aaa/a.aa.
+/b/c/aaa//a.aa/ /b/c/aaa/a.aa
+/b/c/aaa//a.a.a /b/c/aaa/a.a.a
+/b/c/aaa//a.a.. /b/c/aaa/a.a..
+/b/c/aaa//a.a./ /b/c/aaa/a.a.
+/b/c/aaa//a.a/a /b/c/aaa/a.a/a
+/b/c/aaa//a.a/. /b/c/aaa/a.a
+/b/c/aaa//a.a// /b/c/aaa/a.a
+/b/c/aaa//a..aa /b/c/aaa/a..aa
+/b/c/aaa//a..a. /b/c/aaa/a..a.
+/b/c/aaa//a..a/ /b/c/aaa/a..a
+/b/c/aaa//a...a /b/c/aaa/a...a
+/b/c/aaa//a.... /b/c/aaa/a....
+/b/c/aaa//a.../ /b/c/aaa/a...
+/b/c/aaa//a../a /b/c/aaa/a../a
+/b/c/aaa//a../. /b/c/aaa/a..
+/b/c/aaa//a..// /b/c/aaa/a..
+/b/c/aaa//a./aa /b/c/aaa/a./aa
+/b/c/aaa//a./a. /b/c/aaa/a./a.
+/b/c/aaa//a./a/ /b/c/aaa/a./a
+/b/c/aaa//a./.a /b/c/aaa/a./.a
+/b/c/aaa//a./.. /b/c/aaa
+/b/c/aaa//a././ /b/c/aaa/a.
+/b/c/aaa//a.//a /b/c/aaa/a./a
+/b/c/aaa//a.//. /b/c/aaa/a.
+/b/c/aaa//a./// /b/c/aaa/a.
+/b/c/aaa//a/aaa /b/c/aaa/a/aaa
+/b/c/aaa//a/aa. /b/c/aaa/a/aa.
+/b/c/aaa//a/aa/ /b/c/aaa/a/aa
+/b/c/aaa//a/a.a /b/c/aaa/a/a.a
+/b/c/aaa//a/a.. /b/c/aaa/a/a..
+/b/c/aaa//a/a./ /b/c/aaa/a/a.
+/b/c/aaa//a/a/a /b/c/aaa/a/a/a
+/b/c/aaa//a/a/. /b/c/aaa/a/a
+/b/c/aaa//a/a// /b/c/aaa/a/a
+/b/c/aaa//a/.aa /b/c/aaa/a/.aa
+/b/c/aaa//a/.a. /b/c/aaa/a/.a.
+/b/c/aaa//a/.a/ /b/c/aaa/a/.a
+/b/c/aaa//a/..a /b/c/aaa/a/..a
+/b/c/aaa//a/... /b/c/aaa/a/...
+/b/c/aaa//a/../ /b/c/aaa
+/b/c/aaa//a/./a /b/c/aaa/a/a
+/b/c/aaa//a/./. /b/c/aaa/a
+/b/c/aaa//a/.// /b/c/aaa/a
+/b/c/aaa//a//aa /b/c/aaa/a/aa
+/b/c/aaa//a//a. /b/c/aaa/a/a.
+/b/c/aaa//a//a/ /b/c/aaa/a/a
+/b/c/aaa//a//.a /b/c/aaa/a/.a
+/b/c/aaa//a//.. /b/c/aaa
+/b/c/aaa//a//./ /b/c/aaa/a
+/b/c/aaa//a///a /b/c/aaa/a/a
+/b/c/aaa//a///. /b/c/aaa/a
+/b/c/aaa//a//// /b/c/aaa/a
+/b/c/aaa//.aaaa /b/c/aaa/.aaaa
+/b/c/aaa//.aaa. /b/c/aaa/.aaa.
+/b/c/aaa//.aaa/ /b/c/aaa/.aaa
+/b/c/aaa//.aa.a /b/c/aaa/.aa.a
+/b/c/aaa//.aa.. /b/c/aaa/.aa..
+/b/c/aaa//.aa./ /b/c/aaa/.aa.
+/b/c/aaa//.aa/a /b/c/aaa/.aa/a
+/b/c/aaa//.aa/. /b/c/aaa/.aa
+/b/c/aaa//.aa// /b/c/aaa/.aa
+/b/c/aaa//.a.aa /b/c/aaa/.a.aa
+/b/c/aaa//.a.a. /b/c/aaa/.a.a.
+/b/c/aaa//.a.a/ /b/c/aaa/.a.a
+/b/c/aaa//.a..a /b/c/aaa/.a..a
+/b/c/aaa//.a... /b/c/aaa/.a...
+/b/c/aaa//.a../ /b/c/aaa/.a..
+/b/c/aaa//.a./a /b/c/aaa/.a./a
+/b/c/aaa//.a./. /b/c/aaa/.a.
+/b/c/aaa//.a.// /b/c/aaa/.a.
+/b/c/aaa//.a/aa /b/c/aaa/.a/aa
+/b/c/aaa//.a/a. /b/c/aaa/.a/a.
+/b/c/aaa//.a/a/ /b/c/aaa/.a/a
+/b/c/aaa//.a/.a /b/c/aaa/.a/.a
+/b/c/aaa//.a/.. /b/c/aaa
+/b/c/aaa//.a/./ /b/c/aaa/.a
+/b/c/aaa//.a//a /b/c/aaa/.a/a
+/b/c/aaa//.a//. /b/c/aaa/.a
+/b/c/aaa//.a/// /b/c/aaa/.a
+/b/c/aaa//..aaa /b/c/aaa/..aaa
+/b/c/aaa//..aa. /b/c/aaa/..aa.
+/b/c/aaa//..aa/ /b/c/aaa/..aa
+/b/c/aaa//..a.a /b/c/aaa/..a.a
+/b/c/aaa//..a.. /b/c/aaa/..a..
+/b/c/aaa//..a./ /b/c/aaa/..a.
+/b/c/aaa//..a/a /b/c/aaa/..a/a
+/b/c/aaa//..a/. /b/c/aaa/..a
+/b/c/aaa//..a// /b/c/aaa/..a
+/b/c/aaa//...aa /b/c/aaa/...aa
+/b/c/aaa//...a. /b/c/aaa/...a.
+/b/c/aaa//...a/ /b/c/aaa/...a
+/b/c/aaa//....a /b/c/aaa/....a
+/b/c/aaa//..... /b/c/aaa/.....
+/b/c/aaa//..../ /b/c/aaa/....
+/b/c/aaa//.../a /b/c/aaa/.../a
+/b/c/aaa//.../. /b/c/aaa/...
+/b/c/aaa//...// /b/c/aaa/...
+/b/c/aaa//../aa /b/c/aa
+/b/c/aaa//../a. /b/c/a.
+/b/c/aaa//../a/ /b/c/a
+/b/c/aaa//../.a /b/c/.a
+/b/c/aaa//../.. /b
+/b/c/aaa//.././ /b/c
+/b/c/aaa//..//a /b/c/a
+/b/c/aaa//..//. /b/c
+/b/c/aaa//../// /b/c
+/b/c/aaa//./aaa /b/c/aaa/aaa
+/b/c/aaa//./aa. /b/c/aaa/aa.
+/b/c/aaa//./aa/ /b/c/aaa/aa
+/b/c/aaa//./a.a /b/c/aaa/a.a
+/b/c/aaa//./a.. /b/c/aaa/a..
+/b/c/aaa//./a./ /b/c/aaa/a.
+/b/c/aaa//./a/a /b/c/aaa/a/a
+/b/c/aaa//./a/. /b/c/aaa/a
+/b/c/aaa//./a// /b/c/aaa/a
+/b/c/aaa//./.aa /b/c/aaa/.aa
+/b/c/aaa//./.a. /b/c/aaa/.a.
+/b/c/aaa//./.a/ /b/c/aaa/.a
+/b/c/aaa//./..a /b/c/aaa/..a
+/b/c/aaa//./... /b/c/aaa/...
+/b/c/aaa//./../ /b/c
+/b/c/aaa//././a /b/c/aaa/a
+/b/c/aaa//././. /b/c/aaa
+/b/c/aaa//./.// /b/c/aaa
+/b/c/aaa//.//aa /b/c/aaa/aa
+/b/c/aaa//.//a. /b/c/aaa/a.
+/b/c/aaa//.//a/ /b/c/aaa/a
+/b/c/aaa//.//.a /b/c/aaa/.a
+/b/c/aaa//.//.. /b/c
+/b/c/aaa//.//./ /b/c/aaa
+/b/c/aaa//.///a /b/c/aaa/a
+/b/c/aaa//.///. /b/c/aaa
+/b/c/aaa//.//// /b/c/aaa
+/b/c/aaa///aaaa /b/c/aaa/aaaa
+/b/c/aaa///aaa. /b/c/aaa/aaa.
+/b/c/aaa///aaa/ /b/c/aaa/aaa
+/b/c/aaa///aa.a /b/c/aaa/aa.a
+/b/c/aaa///aa.. /b/c/aaa/aa..
+/b/c/aaa///aa./ /b/c/aaa/aa.
+/b/c/aaa///aa/a /b/c/aaa/aa/a
+/b/c/aaa///aa/. /b/c/aaa/aa
+/b/c/aaa///aa// /b/c/aaa/aa
+/b/c/aaa///a.aa /b/c/aaa/a.aa
+/b/c/aaa///a.a. /b/c/aaa/a.a.
+/b/c/aaa///a.a/ /b/c/aaa/a.a
+/b/c/aaa///a..a /b/c/aaa/a..a
+/b/c/aaa///a... /b/c/aaa/a...
+/b/c/aaa///a../ /b/c/aaa/a..
+/b/c/aaa///a./a /b/c/aaa/a./a
+/b/c/aaa///a./. /b/c/aaa/a.
+/b/c/aaa///a.// /b/c/aaa/a.
+/b/c/aaa///a/aa /b/c/aaa/a/aa
+/b/c/aaa///a/a. /b/c/aaa/a/a.
+/b/c/aaa///a/a/ /b/c/aaa/a/a
+/b/c/aaa///a/.a /b/c/aaa/a/.a
+/b/c/aaa///a/.. /b/c/aaa
+/b/c/aaa///a/./ /b/c/aaa/a
+/b/c/aaa///a//a /b/c/aaa/a/a
+/b/c/aaa///a//. /b/c/aaa/a
+/b/c/aaa///a/// /b/c/aaa/a
+/b/c/aaa///.aaa /b/c/aaa/.aaa
+/b/c/aaa///.aa. /b/c/aaa/.aa.
+/b/c/aaa///.aa/ /b/c/aaa/.aa
+/b/c/aaa///.a.a /b/c/aaa/.a.a
+/b/c/aaa///.a.. /b/c/aaa/.a..
+/b/c/aaa///.a./ /b/c/aaa/.a.
+/b/c/aaa///.a/a /b/c/aaa/.a/a
+/b/c/aaa///.a/. /b/c/aaa/.a
+/b/c/aaa///.a// /b/c/aaa/.a
+/b/c/aaa///..aa /b/c/aaa/..aa
+/b/c/aaa///..a. /b/c/aaa/..a.
+/b/c/aaa///..a/ /b/c/aaa/..a
+/b/c/aaa///...a /b/c/aaa/...a
+/b/c/aaa///.... /b/c/aaa/....
+/b/c/aaa///.../ /b/c/aaa/...
+/b/c/aaa///../a /b/c/a
+/b/c/aaa///../. /b/c
+/b/c/aaa///..// /b/c
+/b/c/aaa///./aa /b/c/aaa/aa
+/b/c/aaa///./a. /b/c/aaa/a.
+/b/c/aaa///./a/ /b/c/aaa/a
+/b/c/aaa///./.a /b/c/aaa/.a
+/b/c/aaa///./.. /b/c
+/b/c/aaa///././ /b/c/aaa
+/b/c/aaa///.//a /b/c/aaa/a
+/b/c/aaa///.//. /b/c/aaa
+/b/c/aaa///./// /b/c/aaa
+/b/c/aaa////aaa /b/c/aaa/aaa
+/b/c/aaa////aa. /b/c/aaa/aa.
+/b/c/aaa////aa/ /b/c/aaa/aa
+/b/c/aaa////a.a /b/c/aaa/a.a
+/b/c/aaa////a.. /b/c/aaa/a..
+/b/c/aaa////a./ /b/c/aaa/a.
+/b/c/aaa////a/a /b/c/aaa/a/a
+/b/c/aaa////a/. /b/c/aaa/a
+/b/c/aaa////a// /b/c/aaa/a
+/b/c/aaa////.aa /b/c/aaa/.aa
+/b/c/aaa////.a. /b/c/aaa/.a.
+/b/c/aaa////.a/ /b/c/aaa/.a
+/b/c/aaa////..a /b/c/aaa/..a
+/b/c/aaa////... /b/c/aaa/...
+/b/c/aaa////../ /b/c
+/b/c/aaa////./a /b/c/aaa/a
+/b/c/aaa////./. /b/c/aaa
+/b/c/aaa////.// /b/c/aaa
+/b/c/aaa/////aa /b/c/aaa/aa
+/b/c/aaa/////a. /b/c/aaa/a.
+/b/c/aaa/////a/ /b/c/aaa/a
+/b/c/aaa/////.a /b/c/aaa/.a
+/b/c/aaa/////.. /b/c
+/b/c/aaa/////./ /b/c/aaa
+/b/c/aaa//////a /b/c/aaa/a
+/b/c/aaa//////. /b/c/aaa
+/b/c/aaa/////// /b/c/aaa
+/b/c/aa.aaaaaaa /b/c/aa.aaaaaaa
+/b/c/aa.aaaaaa. /b/c/aa.aaaaaa.
+/b/c/aa.aaaaaa/ /b/c/aa.aaaaaa
+/b/c/aa.aaaaa.a /b/c/aa.aaaaa.a
+/b/c/aa.aaaaa.. /b/c/aa.aaaaa..
+/b/c/aa.aaaaa./ /b/c/aa.aaaaa.
+/b/c/aa.aaaaa/a /b/c/aa.aaaaa/a
+/b/c/aa.aaaaa/. /b/c/aa.aaaaa
+/b/c/aa.aaaaa// /b/c/aa.aaaaa
+/b/c/aa.aaaa.aa /b/c/aa.aaaa.aa
+/b/c/aa.aaaa.a. /b/c/aa.aaaa.a.
+/b/c/aa.aaaa.a/ /b/c/aa.aaaa.a
+/b/c/aa.aaaa..a /b/c/aa.aaaa..a
+/b/c/aa.aaaa... /b/c/aa.aaaa...
+/b/c/aa.aaaa../ /b/c/aa.aaaa..
+/b/c/aa.aaaa./a /b/c/aa.aaaa./a
+/b/c/aa.aaaa./. /b/c/aa.aaaa.
+/b/c/aa.aaaa.// /b/c/aa.aaaa.
+/b/c/aa.aaaa/aa /b/c/aa.aaaa/aa
+/b/c/aa.aaaa/a. /b/c/aa.aaaa/a.
+/b/c/aa.aaaa/a/ /b/c/aa.aaaa/a
+/b/c/aa.aaaa/.a /b/c/aa.aaaa/.a
+/b/c/aa.aaaa/.. /b/c
+/b/c/aa.aaaa/./ /b/c/aa.aaaa
+/b/c/aa.aaaa//a /b/c/aa.aaaa/a
+/b/c/aa.aaaa//. /b/c/aa.aaaa
+/b/c/aa.aaaa/// /b/c/aa.aaaa
+/b/c/aa.aaa.aaa /b/c/aa.aaa.aaa
+/b/c/aa.aaa.aa. /b/c/aa.aaa.aa.
+/b/c/aa.aaa.aa/ /b/c/aa.aaa.aa
+/b/c/aa.aaa.a.a /b/c/aa.aaa.a.a
+/b/c/aa.aaa.a.. /b/c/aa.aaa.a..
+/b/c/aa.aaa.a./ /b/c/aa.aaa.a.
+/b/c/aa.aaa.a/a /b/c/aa.aaa.a/a
+/b/c/aa.aaa.a/. /b/c/aa.aaa.a
+/b/c/aa.aaa.a// /b/c/aa.aaa.a
+/b/c/aa.aaa..aa /b/c/aa.aaa..aa
+/b/c/aa.aaa..a. /b/c/aa.aaa..a.
+/b/c/aa.aaa..a/ /b/c/aa.aaa..a
+/b/c/aa.aaa...a /b/c/aa.aaa...a
+/b/c/aa.aaa.... /b/c/aa.aaa....
+/b/c/aa.aaa.../ /b/c/aa.aaa...
+/b/c/aa.aaa../a /b/c/aa.aaa../a
+/b/c/aa.aaa../. /b/c/aa.aaa..
+/b/c/aa.aaa..// /b/c/aa.aaa..
+/b/c/aa.aaa./aa /b/c/aa.aaa./aa
+/b/c/aa.aaa./a. /b/c/aa.aaa./a.
+/b/c/aa.aaa./a/ /b/c/aa.aaa./a
+/b/c/aa.aaa./.a /b/c/aa.aaa./.a
+/b/c/aa.aaa./.. /b/c
+/b/c/aa.aaa././ /b/c/aa.aaa.
+/b/c/aa.aaa.//a /b/c/aa.aaa./a
+/b/c/aa.aaa.//. /b/c/aa.aaa.
+/b/c/aa.aaa./// /b/c/aa.aaa.
+/b/c/aa.aaa/aaa /b/c/aa.aaa/aaa
+/b/c/aa.aaa/aa. /b/c/aa.aaa/aa.
+/b/c/aa.aaa/aa/ /b/c/aa.aaa/aa
+/b/c/aa.aaa/a.a /b/c/aa.aaa/a.a
+/b/c/aa.aaa/a.. /b/c/aa.aaa/a..
+/b/c/aa.aaa/a./ /b/c/aa.aaa/a.
+/b/c/aa.aaa/a/a /b/c/aa.aaa/a/a
+/b/c/aa.aaa/a/. /b/c/aa.aaa/a
+/b/c/aa.aaa/a// /b/c/aa.aaa/a
+/b/c/aa.aaa/.aa /b/c/aa.aaa/.aa
+/b/c/aa.aaa/.a. /b/c/aa.aaa/.a.
+/b/c/aa.aaa/.a/ /b/c/aa.aaa/.a
+/b/c/aa.aaa/..a /b/c/aa.aaa/..a
+/b/c/aa.aaa/... /b/c/aa.aaa/...
+/b/c/aa.aaa/../ /b/c
+/b/c/aa.aaa/./a /b/c/aa.aaa/a
+/b/c/aa.aaa/./. /b/c/aa.aaa
+/b/c/aa.aaa/.// /b/c/aa.aaa
+/b/c/aa.aaa//aa /b/c/aa.aaa/aa
+/b/c/aa.aaa//a. /b/c/aa.aaa/a.
+/b/c/aa.aaa//a/ /b/c/aa.aaa/a
+/b/c/aa.aaa//.a /b/c/aa.aaa/.a
+/b/c/aa.aaa//.. /b/c
+/b/c/aa.aaa//./ /b/c/aa.aaa
+/b/c/aa.aaa///a /b/c/aa.aaa/a
+/b/c/aa.aaa///. /b/c/aa.aaa
+/b/c/aa.aaa//// /b/c/aa.aaa
+/b/c/aa.aa.aaaa /b/c/aa.aa.aaaa
+/b/c/aa.aa.aaa. /b/c/aa.aa.aaa.
+/b/c/aa.aa.aaa/ /b/c/aa.aa.aaa
+/b/c/aa.aa.aa.a /b/c/aa.aa.aa.a
+/b/c/aa.aa.aa.. /b/c/aa.aa.aa..
+/b/c/aa.aa.aa./ /b/c/aa.aa.aa.
+/b/c/aa.aa.aa/a /b/c/aa.aa.aa/a
+/b/c/aa.aa.aa/. /b/c/aa.aa.aa
+/b/c/aa.aa.aa// /b/c/aa.aa.aa
+/b/c/aa.aa.a.aa /b/c/aa.aa.a.aa
+/b/c/aa.aa.a.a. /b/c/aa.aa.a.a.
+/b/c/aa.aa.a.a/ /b/c/aa.aa.a.a
+/b/c/aa.aa.a..a /b/c/aa.aa.a..a
+/b/c/aa.aa.a... /b/c/aa.aa.a...
+/b/c/aa.aa.a../ /b/c/aa.aa.a..
+/b/c/aa.aa.a./a /b/c/aa.aa.a./a
+/b/c/aa.aa.a./. /b/c/aa.aa.a.
+/b/c/aa.aa.a.// /b/c/aa.aa.a.
+/b/c/aa.aa.a/aa /b/c/aa.aa.a/aa
+/b/c/aa.aa.a/a. /b/c/aa.aa.a/a.
+/b/c/aa.aa.a/a/ /b/c/aa.aa.a/a
+/b/c/aa.aa.a/.a /b/c/aa.aa.a/.a
+/b/c/aa.aa.a/.. /b/c
+/b/c/aa.aa.a/./ /b/c/aa.aa.a
+/b/c/aa.aa.a//a /b/c/aa.aa.a/a
+/b/c/aa.aa.a//. /b/c/aa.aa.a
+/b/c/aa.aa.a/// /b/c/aa.aa.a
+/b/c/aa.aa..aaa /b/c/aa.aa..aaa
+/b/c/aa.aa..aa. /b/c/aa.aa..aa.
+/b/c/aa.aa..aa/ /b/c/aa.aa..aa
+/b/c/aa.aa..a.a /b/c/aa.aa..a.a
+/b/c/aa.aa..a.. /b/c/aa.aa..a..
+/b/c/aa.aa..a./ /b/c/aa.aa..a.
+/b/c/aa.aa..a/a /b/c/aa.aa..a/a
+/b/c/aa.aa..a/. /b/c/aa.aa..a
+/b/c/aa.aa..a// /b/c/aa.aa..a
+/b/c/aa.aa...aa /b/c/aa.aa...aa
+/b/c/aa.aa...a. /b/c/aa.aa...a.
+/b/c/aa.aa...a/ /b/c/aa.aa...a
+/b/c/aa.aa....a /b/c/aa.aa....a
+/b/c/aa.aa..... /b/c/aa.aa.....
+/b/c/aa.aa..../ /b/c/aa.aa....
+/b/c/aa.aa.../a /b/c/aa.aa.../a
+/b/c/aa.aa.../. /b/c/aa.aa...
+/b/c/aa.aa...// /b/c/aa.aa...
+/b/c/aa.aa../aa /b/c/aa.aa../aa
+/b/c/aa.aa../a. /b/c/aa.aa../a.
+/b/c/aa.aa../a/ /b/c/aa.aa../a
+/b/c/aa.aa../.a /b/c/aa.aa../.a
+/b/c/aa.aa../.. /b/c
+/b/c/aa.aa.././ /b/c/aa.aa..
+/b/c/aa.aa..//a /b/c/aa.aa../a
+/b/c/aa.aa..//. /b/c/aa.aa..
+/b/c/aa.aa../// /b/c/aa.aa..
+/b/c/aa.aa./aaa /b/c/aa.aa./aaa
+/b/c/aa.aa./aa. /b/c/aa.aa./aa.
+/b/c/aa.aa./aa/ /b/c/aa.aa./aa
+/b/c/aa.aa./a.a /b/c/aa.aa./a.a
+/b/c/aa.aa./a.. /b/c/aa.aa./a..
+/b/c/aa.aa./a./ /b/c/aa.aa./a.
+/b/c/aa.aa./a/a /b/c/aa.aa./a/a
+/b/c/aa.aa./a/. /b/c/aa.aa./a
+/b/c/aa.aa./a// /b/c/aa.aa./a
+/b/c/aa.aa./.aa /b/c/aa.aa./.aa
+/b/c/aa.aa./.a. /b/c/aa.aa./.a.
+/b/c/aa.aa./.a/ /b/c/aa.aa./.a
+/b/c/aa.aa./..a /b/c/aa.aa./..a
+/b/c/aa.aa./... /b/c/aa.aa./...
+/b/c/aa.aa./../ /b/c
+/b/c/aa.aa././a /b/c/aa.aa./a
+/b/c/aa.aa././. /b/c/aa.aa.
+/b/c/aa.aa./.// /b/c/aa.aa.
+/b/c/aa.aa.//aa /b/c/aa.aa./aa
+/b/c/aa.aa.//a. /b/c/aa.aa./a.
+/b/c/aa.aa.//a/ /b/c/aa.aa./a
+/b/c/aa.aa.//.a /b/c/aa.aa./.a
+/b/c/aa.aa.//.. /b/c
+/b/c/aa.aa.//./ /b/c/aa.aa.
+/b/c/aa.aa.///a /b/c/aa.aa./a
+/b/c/aa.aa.///. /b/c/aa.aa.
+/b/c/aa.aa.//// /b/c/aa.aa.
+/b/c/aa.aa/aaaa /b/c/aa.aa/aaaa
+/b/c/aa.aa/aaa. /b/c/aa.aa/aaa.
+/b/c/aa.aa/aaa/ /b/c/aa.aa/aaa
+/b/c/aa.aa/aa.a /b/c/aa.aa/aa.a
+/b/c/aa.aa/aa.. /b/c/aa.aa/aa..
+/b/c/aa.aa/aa./ /b/c/aa.aa/aa.
+/b/c/aa.aa/aa/a /b/c/aa.aa/aa/a
+/b/c/aa.aa/aa/. /b/c/aa.aa/aa
+/b/c/aa.aa/aa// /b/c/aa.aa/aa
+/b/c/aa.aa/a.aa /b/c/aa.aa/a.aa
+/b/c/aa.aa/a.a. /b/c/aa.aa/a.a.
+/b/c/aa.aa/a.a/ /b/c/aa.aa/a.a
+/b/c/aa.aa/a..a /b/c/aa.aa/a..a
+/b/c/aa.aa/a... /b/c/aa.aa/a...
+/b/c/aa.aa/a../ /b/c/aa.aa/a..
+/b/c/aa.aa/a./a /b/c/aa.aa/a./a
+/b/c/aa.aa/a./. /b/c/aa.aa/a.
+/b/c/aa.aa/a.// /b/c/aa.aa/a.
+/b/c/aa.aa/a/aa /b/c/aa.aa/a/aa
+/b/c/aa.aa/a/a. /b/c/aa.aa/a/a.
+/b/c/aa.aa/a/a/ /b/c/aa.aa/a/a
+/b/c/aa.aa/a/.a /b/c/aa.aa/a/.a
+/b/c/aa.aa/a/.. /b/c/aa.aa
+/b/c/aa.aa/a/./ /b/c/aa.aa/a
+/b/c/aa.aa/a//a /b/c/aa.aa/a/a
+/b/c/aa.aa/a//. /b/c/aa.aa/a
+/b/c/aa.aa/a/// /b/c/aa.aa/a
+/b/c/aa.aa/.aaa /b/c/aa.aa/.aaa
+/b/c/aa.aa/.aa. /b/c/aa.aa/.aa.
+/b/c/aa.aa/.aa/ /b/c/aa.aa/.aa
+/b/c/aa.aa/.a.a /b/c/aa.aa/.a.a
+/b/c/aa.aa/.a.. /b/c/aa.aa/.a..
+/b/c/aa.aa/.a./ /b/c/aa.aa/.a.
+/b/c/aa.aa/.a/a /b/c/aa.aa/.a/a
+/b/c/aa.aa/.a/. /b/c/aa.aa/.a
+/b/c/aa.aa/.a// /b/c/aa.aa/.a
+/b/c/aa.aa/..aa /b/c/aa.aa/..aa
+/b/c/aa.aa/..a. /b/c/aa.aa/..a.
+/b/c/aa.aa/..a/ /b/c/aa.aa/..a
+/b/c/aa.aa/...a /b/c/aa.aa/...a
+/b/c/aa.aa/.... /b/c/aa.aa/....
+/b/c/aa.aa/.../ /b/c/aa.aa/...
+/b/c/aa.aa/../a /b/c/a
+/b/c/aa.aa/../. /b/c
+/b/c/aa.aa/..// /b/c
+/b/c/aa.aa/./aa /b/c/aa.aa/aa
+/b/c/aa.aa/./a. /b/c/aa.aa/a.
+/b/c/aa.aa/./a/ /b/c/aa.aa/a
+/b/c/aa.aa/./.a /b/c/aa.aa/.a
+/b/c/aa.aa/./.. /b/c
+/b/c/aa.aa/././ /b/c/aa.aa
+/b/c/aa.aa/.//a /b/c/aa.aa/a
+/b/c/aa.aa/.//. /b/c/aa.aa
+/b/c/aa.aa/./// /b/c/aa.aa
+/b/c/aa.aa//aaa /b/c/aa.aa/aaa
+/b/c/aa.aa//aa. /b/c/aa.aa/aa.
+/b/c/aa.aa//aa/ /b/c/aa.aa/aa
+/b/c/aa.aa//a.a /b/c/aa.aa/a.a
+/b/c/aa.aa//a.. /b/c/aa.aa/a..
+/b/c/aa.aa//a./ /b/c/aa.aa/a.
+/b/c/aa.aa//a/a /b/c/aa.aa/a/a
+/b/c/aa.aa//a/. /b/c/aa.aa/a
+/b/c/aa.aa//a// /b/c/aa.aa/a
+/b/c/aa.aa//.aa /b/c/aa.aa/.aa
+/b/c/aa.aa//.a. /b/c/aa.aa/.a.
+/b/c/aa.aa//.a/ /b/c/aa.aa/.a
+/b/c/aa.aa//..a /b/c/aa.aa/..a
+/b/c/aa.aa//... /b/c/aa.aa/...
+/b/c/aa.aa//../ /b/c
+/b/c/aa.aa//./a /b/c/aa.aa/a
+/b/c/aa.aa//./. /b/c/aa.aa
+/b/c/aa.aa//.// /b/c/aa.aa
+/b/c/aa.aa///aa /b/c/aa.aa/aa
+/b/c/aa.aa///a. /b/c/aa.aa/a.
+/b/c/aa.aa///a/ /b/c/aa.aa/a
+/b/c/aa.aa///.a /b/c/aa.aa/.a
+/b/c/aa.aa///.. /b/c
+/b/c/aa.aa///./ /b/c/aa.aa
+/b/c/aa.aa////a /b/c/aa.aa/a
+/b/c/aa.aa////. /b/c/aa.aa
+/b/c/aa.aa///// /b/c/aa.aa
+/b/c/aa.a.aaaaa /b/c/aa.a.aaaaa
+/b/c/aa.a.aaaa. /b/c/aa.a.aaaa.
+/b/c/aa.a.aaaa/ /b/c/aa.a.aaaa
+/b/c/aa.a.aaa.a /b/c/aa.a.aaa.a
+/b/c/aa.a.aaa.. /b/c/aa.a.aaa..
+/b/c/aa.a.aaa./ /b/c/aa.a.aaa.
+/b/c/aa.a.aaa/a /b/c/aa.a.aaa/a
+/b/c/aa.a.aaa/. /b/c/aa.a.aaa
+/b/c/aa.a.aaa// /b/c/aa.a.aaa
+/b/c/aa.a.aa.aa /b/c/aa.a.aa.aa
+/b/c/aa.a.aa.a. /b/c/aa.a.aa.a.
+/b/c/aa.a.aa.a/ /b/c/aa.a.aa.a
+/b/c/aa.a.aa..a /b/c/aa.a.aa..a
+/b/c/aa.a.aa... /b/c/aa.a.aa...
+/b/c/aa.a.aa../ /b/c/aa.a.aa..
+/b/c/aa.a.aa./a /b/c/aa.a.aa./a
+/b/c/aa.a.aa./. /b/c/aa.a.aa.
+/b/c/aa.a.aa.// /b/c/aa.a.aa.
+/b/c/aa.a.aa/aa /b/c/aa.a.aa/aa
+/b/c/aa.a.aa/a. /b/c/aa.a.aa/a.
+/b/c/aa.a.aa/a/ /b/c/aa.a.aa/a
+/b/c/aa.a.aa/.a /b/c/aa.a.aa/.a
+/b/c/aa.a.aa/.. /b/c
+/b/c/aa.a.aa/./ /b/c/aa.a.aa
+/b/c/aa.a.aa//a /b/c/aa.a.aa/a
+/b/c/aa.a.aa//. /b/c/aa.a.aa
+/b/c/aa.a.aa/// /b/c/aa.a.aa
+/b/c/aa.a.a.aaa /b/c/aa.a.a.aaa
+/b/c/aa.a.a.aa. /b/c/aa.a.a.aa.
+/b/c/aa.a.a.aa/ /b/c/aa.a.a.aa
+/b/c/aa.a.a.a.a /b/c/aa.a.a.a.a
+/b/c/aa.a.a.a.. /b/c/aa.a.a.a..
+/b/c/aa.a.a.a./ /b/c/aa.a.a.a.
+/b/c/aa.a.a.a/a /b/c/aa.a.a.a/a
+/b/c/aa.a.a.a/. /b/c/aa.a.a.a
+/b/c/aa.a.a.a// /b/c/aa.a.a.a
+/b/c/aa.a.a..aa /b/c/aa.a.a..aa
+/b/c/aa.a.a..a. /b/c/aa.a.a..a.
+/b/c/aa.a.a..a/ /b/c/aa.a.a..a
+/b/c/aa.a.a...a /b/c/aa.a.a...a
+/b/c/aa.a.a.... /b/c/aa.a.a....
+/b/c/aa.a.a.../ /b/c/aa.a.a...
+/b/c/aa.a.a../a /b/c/aa.a.a../a
+/b/c/aa.a.a../. /b/c/aa.a.a..
+/b/c/aa.a.a..// /b/c/aa.a.a..
+/b/c/aa.a.a./aa /b/c/aa.a.a./aa
+/b/c/aa.a.a./a. /b/c/aa.a.a./a.
+/b/c/aa.a.a./a/ /b/c/aa.a.a./a
+/b/c/aa.a.a./.a /b/c/aa.a.a./.a
+/b/c/aa.a.a./.. /b/c
+/b/c/aa.a.a././ /b/c/aa.a.a.
+/b/c/aa.a.a.//a /b/c/aa.a.a./a
+/b/c/aa.a.a.//. /b/c/aa.a.a.
+/b/c/aa.a.a./// /b/c/aa.a.a.
+/b/c/aa.a.a/aaa /b/c/aa.a.a/aaa
+/b/c/aa.a.a/aa. /b/c/aa.a.a/aa.
+/b/c/aa.a.a/aa/ /b/c/aa.a.a/aa
+/b/c/aa.a.a/a.a /b/c/aa.a.a/a.a
+/b/c/aa.a.a/a.. /b/c/aa.a.a/a..
+/b/c/aa.a.a/a./ /b/c/aa.a.a/a.
+/b/c/aa.a.a/a/a /b/c/aa.a.a/a/a
+/b/c/aa.a.a/a/. /b/c/aa.a.a/a
+/b/c/aa.a.a/a// /b/c/aa.a.a/a
+/b/c/aa.a.a/.aa /b/c/aa.a.a/.aa
+/b/c/aa.a.a/.a. /b/c/aa.a.a/.a.
+/b/c/aa.a.a/.a/ /b/c/aa.a.a/.a
+/b/c/aa.a.a/..a /b/c/aa.a.a/..a
+/b/c/aa.a.a/... /b/c/aa.a.a/...
+/b/c/aa.a.a/../ /b/c
+/b/c/aa.a.a/./a /b/c/aa.a.a/a
+/b/c/aa.a.a/./. /b/c/aa.a.a
+/b/c/aa.a.a/.// /b/c/aa.a.a
+/b/c/aa.a.a//aa /b/c/aa.a.a/aa
+/b/c/aa.a.a//a. /b/c/aa.a.a/a.
+/b/c/aa.a.a//a/ /b/c/aa.a.a/a
+/b/c/aa.a.a//.a /b/c/aa.a.a/.a
+/b/c/aa.a.a//.. /b/c
+/b/c/aa.a.a//./ /b/c/aa.a.a
+/b/c/aa.a.a///a /b/c/aa.a.a/a
+/b/c/aa.a.a///. /b/c/aa.a.a
+/b/c/aa.a.a//// /b/c/aa.a.a
+/b/c/aa.a..aaaa /b/c/aa.a..aaaa
+/b/c/aa.a..aaa. /b/c/aa.a..aaa.
+/b/c/aa.a..aaa/ /b/c/aa.a..aaa
+/b/c/aa.a..aa.a /b/c/aa.a..aa.a
+/b/c/aa.a..aa.. /b/c/aa.a..aa..
+/b/c/aa.a..aa./ /b/c/aa.a..aa.
+/b/c/aa.a..aa/a /b/c/aa.a..aa/a
+/b/c/aa.a..aa/. /b/c/aa.a..aa
+/b/c/aa.a..aa// /b/c/aa.a..aa
+/b/c/aa.a..a.aa /b/c/aa.a..a.aa
+/b/c/aa.a..a.a. /b/c/aa.a..a.a.
+/b/c/aa.a..a.a/ /b/c/aa.a..a.a
+/b/c/aa.a..a..a /b/c/aa.a..a..a
+/b/c/aa.a..a... /b/c/aa.a..a...
+/b/c/aa.a..a../ /b/c/aa.a..a..
+/b/c/aa.a..a./a /b/c/aa.a..a./a
+/b/c/aa.a..a./. /b/c/aa.a..a.
+/b/c/aa.a..a.// /b/c/aa.a..a.
+/b/c/aa.a..a/aa /b/c/aa.a..a/aa
+/b/c/aa.a..a/a. /b/c/aa.a..a/a.
+/b/c/aa.a..a/a/ /b/c/aa.a..a/a
+/b/c/aa.a..a/.a /b/c/aa.a..a/.a
+/b/c/aa.a..a/.. /b/c
+/b/c/aa.a..a/./ /b/c/aa.a..a
+/b/c/aa.a..a//a /b/c/aa.a..a/a
+/b/c/aa.a..a//. /b/c/aa.a..a
+/b/c/aa.a..a/// /b/c/aa.a..a
+/b/c/aa.a...aaa /b/c/aa.a...aaa
+/b/c/aa.a...aa. /b/c/aa.a...aa.
+/b/c/aa.a...aa/ /b/c/aa.a...aa
+/b/c/aa.a...a.a /b/c/aa.a...a.a
+/b/c/aa.a...a.. /b/c/aa.a...a..
+/b/c/aa.a...a./ /b/c/aa.a...a.
+/b/c/aa.a...a/a /b/c/aa.a...a/a
+/b/c/aa.a...a/. /b/c/aa.a...a
+/b/c/aa.a...a// /b/c/aa.a...a
+/b/c/aa.a....aa /b/c/aa.a....aa
+/b/c/aa.a....a. /b/c/aa.a....a.
+/b/c/aa.a....a/ /b/c/aa.a....a
+/b/c/aa.a.....a /b/c/aa.a.....a
+/b/c/aa.a...... /b/c/aa.a......
+/b/c/aa.a...../ /b/c/aa.a.....
+/b/c/aa.a..../a /b/c/aa.a..../a
+/b/c/aa.a..../. /b/c/aa.a....
+/b/c/aa.a....// /b/c/aa.a....
+/b/c/aa.a.../aa /b/c/aa.a.../aa
+/b/c/aa.a.../a. /b/c/aa.a.../a.
+/b/c/aa.a.../a/ /b/c/aa.a.../a
+/b/c/aa.a.../.a /b/c/aa.a.../.a
+/b/c/aa.a.../.. /b/c
+/b/c/aa.a..././ /b/c/aa.a...
+/b/c/aa.a...//a /b/c/aa.a.../a
+/b/c/aa.a...//. /b/c/aa.a...
+/b/c/aa.a.../// /b/c/aa.a...
+/b/c/aa.a../aaa /b/c/aa.a../aaa
+/b/c/aa.a../aa. /b/c/aa.a../aa.
+/b/c/aa.a../aa/ /b/c/aa.a../aa
+/b/c/aa.a../a.a /b/c/aa.a../a.a
+/b/c/aa.a../a.. /b/c/aa.a../a..
+/b/c/aa.a../a./ /b/c/aa.a../a.
+/b/c/aa.a../a/a /b/c/aa.a../a/a
+/b/c/aa.a../a/. /b/c/aa.a../a
+/b/c/aa.a../a// /b/c/aa.a../a
+/b/c/aa.a../.aa /b/c/aa.a../.aa
+/b/c/aa.a../.a. /b/c/aa.a../.a.
+/b/c/aa.a../.a/ /b/c/aa.a../.a
+/b/c/aa.a../..a /b/c/aa.a../..a
+/b/c/aa.a../... /b/c/aa.a../...
+/b/c/aa.a../../ /b/c
+/b/c/aa.a.././a /b/c/aa.a../a
+/b/c/aa.a.././. /b/c/aa.a..
+/b/c/aa.a../.// /b/c/aa.a..
+/b/c/aa.a..//aa /b/c/aa.a../aa
+/b/c/aa.a..//a. /b/c/aa.a../a.
+/b/c/aa.a..//a/ /b/c/aa.a../a
+/b/c/aa.a..//.a /b/c/aa.a../.a
+/b/c/aa.a..//.. /b/c
+/b/c/aa.a..//./ /b/c/aa.a..
+/b/c/aa.a..///a /b/c/aa.a../a
+/b/c/aa.a..///. /b/c/aa.a..
+/b/c/aa.a..//// /b/c/aa.a..
+/b/c/aa.a./aaaa /b/c/aa.a./aaaa
+/b/c/aa.a./aaa. /b/c/aa.a./aaa.
+/b/c/aa.a./aaa/ /b/c/aa.a./aaa
+/b/c/aa.a./aa.a /b/c/aa.a./aa.a
+/b/c/aa.a./aa.. /b/c/aa.a./aa..
+/b/c/aa.a./aa./ /b/c/aa.a./aa.
+/b/c/aa.a./aa/a /b/c/aa.a./aa/a
+/b/c/aa.a./aa/. /b/c/aa.a./aa
+/b/c/aa.a./aa// /b/c/aa.a./aa
+/b/c/aa.a./a.aa /b/c/aa.a./a.aa
+/b/c/aa.a./a.a. /b/c/aa.a./a.a.
+/b/c/aa.a./a.a/ /b/c/aa.a./a.a
+/b/c/aa.a./a..a /b/c/aa.a./a..a
+/b/c/aa.a./a... /b/c/aa.a./a...
+/b/c/aa.a./a../ /b/c/aa.a./a..
+/b/c/aa.a./a./a /b/c/aa.a./a./a
+/b/c/aa.a./a./. /b/c/aa.a./a.
+/b/c/aa.a./a.// /b/c/aa.a./a.
+/b/c/aa.a./a/aa /b/c/aa.a./a/aa
+/b/c/aa.a./a/a. /b/c/aa.a./a/a.
+/b/c/aa.a./a/a/ /b/c/aa.a./a/a
+/b/c/aa.a./a/.a /b/c/aa.a./a/.a
+/b/c/aa.a./a/.. /b/c/aa.a.
+/b/c/aa.a./a/./ /b/c/aa.a./a
+/b/c/aa.a./a//a /b/c/aa.a./a/a
+/b/c/aa.a./a//. /b/c/aa.a./a
+/b/c/aa.a./a/// /b/c/aa.a./a
+/b/c/aa.a./.aaa /b/c/aa.a./.aaa
+/b/c/aa.a./.aa. /b/c/aa.a./.aa.
+/b/c/aa.a./.aa/ /b/c/aa.a./.aa
+/b/c/aa.a./.a.a /b/c/aa.a./.a.a
+/b/c/aa.a./.a.. /b/c/aa.a./.a..
+/b/c/aa.a./.a./ /b/c/aa.a./.a.
+/b/c/aa.a./.a/a /b/c/aa.a./.a/a
+/b/c/aa.a./.a/. /b/c/aa.a./.a
+/b/c/aa.a./.a// /b/c/aa.a./.a
+/b/c/aa.a./..aa /b/c/aa.a./..aa
+/b/c/aa.a./..a. /b/c/aa.a./..a.
+/b/c/aa.a./..a/ /b/c/aa.a./..a
+/b/c/aa.a./...a /b/c/aa.a./...a
+/b/c/aa.a./.... /b/c/aa.a./....
+/b/c/aa.a./.../ /b/c/aa.a./...
+/b/c/aa.a./../a /b/c/a
+/b/c/aa.a./../. /b/c
+/b/c/aa.a./..// /b/c
+/b/c/aa.a././aa /b/c/aa.a./aa
+/b/c/aa.a././a. /b/c/aa.a./a.
+/b/c/aa.a././a/ /b/c/aa.a./a
+/b/c/aa.a././.a /b/c/aa.a./.a
+/b/c/aa.a././.. /b/c
+/b/c/aa.a./././ /b/c/aa.a.
+/b/c/aa.a././/a /b/c/aa.a./a
+/b/c/aa.a././/. /b/c/aa.a.
+/b/c/aa.a././// /b/c/aa.a.
+/b/c/aa.a.//aaa /b/c/aa.a./aaa
+/b/c/aa.a.//aa. /b/c/aa.a./aa.
+/b/c/aa.a.//aa/ /b/c/aa.a./aa
+/b/c/aa.a.//a.a /b/c/aa.a./a.a
+/b/c/aa.a.//a.. /b/c/aa.a./a..
+/b/c/aa.a.//a./ /b/c/aa.a./a.
+/b/c/aa.a.//a/a /b/c/aa.a./a/a
+/b/c/aa.a.//a/. /b/c/aa.a./a
+/b/c/aa.a.//a// /b/c/aa.a./a
+/b/c/aa.a.//.aa /b/c/aa.a./.aa
+/b/c/aa.a.//.a. /b/c/aa.a./.a.
+/b/c/aa.a.//.a/ /b/c/aa.a./.a
+/b/c/aa.a.//..a /b/c/aa.a./..a
+/b/c/aa.a.//... /b/c/aa.a./...
+/b/c/aa.a.//../ /b/c
+/b/c/aa.a.//./a /b/c/aa.a./a
+/b/c/aa.a.//./. /b/c/aa.a.
+/b/c/aa.a.//.// /b/c/aa.a.
+/b/c/aa.a.///aa /b/c/aa.a./aa
+/b/c/aa.a.///a. /b/c/aa.a./a.
+/b/c/aa.a.///a/ /b/c/aa.a./a
+/b/c/aa.a.///.a /b/c/aa.a./.a
+/b/c/aa.a.///.. /b/c
+/b/c/aa.a.///./ /b/c/aa.a.
+/b/c/aa.a.////a /b/c/aa.a./a
+/b/c/aa.a.////. /b/c/aa.a.
+/b/c/aa.a.///// /b/c/aa.a.
+/b/c/aa.a/aaaaa /b/c/aa.a/aaaaa
+/b/c/aa.a/aaaa. /b/c/aa.a/aaaa.
+/b/c/aa.a/aaaa/ /b/c/aa.a/aaaa
+/b/c/aa.a/aaa.a /b/c/aa.a/aaa.a
+/b/c/aa.a/aaa.. /b/c/aa.a/aaa..
+/b/c/aa.a/aaa./ /b/c/aa.a/aaa.
+/b/c/aa.a/aaa/a /b/c/aa.a/aaa/a
+/b/c/aa.a/aaa/. /b/c/aa.a/aaa
+/b/c/aa.a/aaa// /b/c/aa.a/aaa
+/b/c/aa.a/aa.aa /b/c/aa.a/aa.aa
+/b/c/aa.a/aa.a. /b/c/aa.a/aa.a.
+/b/c/aa.a/aa.a/ /b/c/aa.a/aa.a
+/b/c/aa.a/aa..a /b/c/aa.a/aa..a
+/b/c/aa.a/aa... /b/c/aa.a/aa...
+/b/c/aa.a/aa../ /b/c/aa.a/aa..
+/b/c/aa.a/aa./a /b/c/aa.a/aa./a
+/b/c/aa.a/aa./. /b/c/aa.a/aa.
+/b/c/aa.a/aa.// /b/c/aa.a/aa.
+/b/c/aa.a/aa/aa /b/c/aa.a/aa/aa
+/b/c/aa.a/aa/a. /b/c/aa.a/aa/a.
+/b/c/aa.a/aa/a/ /b/c/aa.a/aa/a
+/b/c/aa.a/aa/.a /b/c/aa.a/aa/.a
+/b/c/aa.a/aa/.. /b/c/aa.a
+/b/c/aa.a/aa/./ /b/c/aa.a/aa
+/b/c/aa.a/aa//a /b/c/aa.a/aa/a
+/b/c/aa.a/aa//. /b/c/aa.a/aa
+/b/c/aa.a/aa/// /b/c/aa.a/aa
+/b/c/aa.a/a.aaa /b/c/aa.a/a.aaa
+/b/c/aa.a/a.aa. /b/c/aa.a/a.aa.
+/b/c/aa.a/a.aa/ /b/c/aa.a/a.aa
+/b/c/aa.a/a.a.a /b/c/aa.a/a.a.a
+/b/c/aa.a/a.a.. /b/c/aa.a/a.a..
+/b/c/aa.a/a.a./ /b/c/aa.a/a.a.
+/b/c/aa.a/a.a/a /b/c/aa.a/a.a/a
+/b/c/aa.a/a.a/. /b/c/aa.a/a.a
+/b/c/aa.a/a.a// /b/c/aa.a/a.a
+/b/c/aa.a/a..aa /b/c/aa.a/a..aa
+/b/c/aa.a/a..a. /b/c/aa.a/a..a.
+/b/c/aa.a/a..a/ /b/c/aa.a/a..a
+/b/c/aa.a/a...a /b/c/aa.a/a...a
+/b/c/aa.a/a.... /b/c/aa.a/a....
+/b/c/aa.a/a.../ /b/c/aa.a/a...
+/b/c/aa.a/a../a /b/c/aa.a/a../a
+/b/c/aa.a/a../. /b/c/aa.a/a..
+/b/c/aa.a/a..// /b/c/aa.a/a..
+/b/c/aa.a/a./aa /b/c/aa.a/a./aa
+/b/c/aa.a/a./a. /b/c/aa.a/a./a.
+/b/c/aa.a/a./a/ /b/c/aa.a/a./a
+/b/c/aa.a/a./.a /b/c/aa.a/a./.a
+/b/c/aa.a/a./.. /b/c/aa.a
+/b/c/aa.a/a././ /b/c/aa.a/a.
+/b/c/aa.a/a.//a /b/c/aa.a/a./a
+/b/c/aa.a/a.//. /b/c/aa.a/a.
+/b/c/aa.a/a./// /b/c/aa.a/a.
+/b/c/aa.a/a/aaa /b/c/aa.a/a/aaa
+/b/c/aa.a/a/aa. /b/c/aa.a/a/aa.
+/b/c/aa.a/a/aa/ /b/c/aa.a/a/aa
+/b/c/aa.a/a/a.a /b/c/aa.a/a/a.a
+/b/c/aa.a/a/a.. /b/c/aa.a/a/a..
+/b/c/aa.a/a/a./ /b/c/aa.a/a/a.
+/b/c/aa.a/a/a/a /b/c/aa.a/a/a/a
+/b/c/aa.a/a/a/. /b/c/aa.a/a/a
+/b/c/aa.a/a/a// /b/c/aa.a/a/a
+/b/c/aa.a/a/.aa /b/c/aa.a/a/.aa
+/b/c/aa.a/a/.a. /b/c/aa.a/a/.a.
+/b/c/aa.a/a/.a/ /b/c/aa.a/a/.a
+/b/c/aa.a/a/..a /b/c/aa.a/a/..a
+/b/c/aa.a/a/... /b/c/aa.a/a/...
+/b/c/aa.a/a/../ /b/c/aa.a
+/b/c/aa.a/a/./a /b/c/aa.a/a/a
+/b/c/aa.a/a/./. /b/c/aa.a/a
+/b/c/aa.a/a/.// /b/c/aa.a/a
+/b/c/aa.a/a//aa /b/c/aa.a/a/aa
+/b/c/aa.a/a//a. /b/c/aa.a/a/a.
+/b/c/aa.a/a//a/ /b/c/aa.a/a/a
+/b/c/aa.a/a//.a /b/c/aa.a/a/.a
+/b/c/aa.a/a//.. /b/c/aa.a
+/b/c/aa.a/a//./ /b/c/aa.a/a
+/b/c/aa.a/a///a /b/c/aa.a/a/a
+/b/c/aa.a/a///. /b/c/aa.a/a
+/b/c/aa.a/a//// /b/c/aa.a/a
+/b/c/aa.a/.aaaa /b/c/aa.a/.aaaa
+/b/c/aa.a/.aaa. /b/c/aa.a/.aaa.
+/b/c/aa.a/.aaa/ /b/c/aa.a/.aaa
+/b/c/aa.a/.aa.a /b/c/aa.a/.aa.a
+/b/c/aa.a/.aa.. /b/c/aa.a/.aa..
+/b/c/aa.a/.aa./ /b/c/aa.a/.aa.
+/b/c/aa.a/.aa/a /b/c/aa.a/.aa/a
+/b/c/aa.a/.aa/. /b/c/aa.a/.aa
+/b/c/aa.a/.aa// /b/c/aa.a/.aa
+/b/c/aa.a/.a.aa /b/c/aa.a/.a.aa
+/b/c/aa.a/.a.a. /b/c/aa.a/.a.a.
+/b/c/aa.a/.a.a/ /b/c/aa.a/.a.a
+/b/c/aa.a/.a..a /b/c/aa.a/.a..a
+/b/c/aa.a/.a... /b/c/aa.a/.a...
+/b/c/aa.a/.a../ /b/c/aa.a/.a..
+/b/c/aa.a/.a./a /b/c/aa.a/.a./a
+/b/c/aa.a/.a./. /b/c/aa.a/.a.
+/b/c/aa.a/.a.// /b/c/aa.a/.a.
+/b/c/aa.a/.a/aa /b/c/aa.a/.a/aa
+/b/c/aa.a/.a/a. /b/c/aa.a/.a/a.
+/b/c/aa.a/.a/a/ /b/c/aa.a/.a/a
+/b/c/aa.a/.a/.a /b/c/aa.a/.a/.a
+/b/c/aa.a/.a/.. /b/c/aa.a
+/b/c/aa.a/.a/./ /b/c/aa.a/.a
+/b/c/aa.a/.a//a /b/c/aa.a/.a/a
+/b/c/aa.a/.a//. /b/c/aa.a/.a
+/b/c/aa.a/.a/// /b/c/aa.a/.a
+/b/c/aa.a/..aaa /b/c/aa.a/..aaa
+/b/c/aa.a/..aa. /b/c/aa.a/..aa.
+/b/c/aa.a/..aa/ /b/c/aa.a/..aa
+/b/c/aa.a/..a.a /b/c/aa.a/..a.a
+/b/c/aa.a/..a.. /b/c/aa.a/..a..
+/b/c/aa.a/..a./ /b/c/aa.a/..a.
+/b/c/aa.a/..a/a /b/c/aa.a/..a/a
+/b/c/aa.a/..a/. /b/c/aa.a/..a
+/b/c/aa.a/..a// /b/c/aa.a/..a
+/b/c/aa.a/...aa /b/c/aa.a/...aa
+/b/c/aa.a/...a. /b/c/aa.a/...a.
+/b/c/aa.a/...a/ /b/c/aa.a/...a
+/b/c/aa.a/....a /b/c/aa.a/....a
+/b/c/aa.a/..... /b/c/aa.a/.....
+/b/c/aa.a/..../ /b/c/aa.a/....
+/b/c/aa.a/.../a /b/c/aa.a/.../a
+/b/c/aa.a/.../. /b/c/aa.a/...
+/b/c/aa.a/...// /b/c/aa.a/...
+/b/c/aa.a/../aa /b/c/aa
+/b/c/aa.a/../a. /b/c/a.
+/b/c/aa.a/../a/ /b/c/a
+/b/c/aa.a/../.a /b/c/.a
+/b/c/aa.a/../.. /b
+/b/c/aa.a/.././ /b/c
+/b/c/aa.a/..//a /b/c/a
+/b/c/aa.a/..//. /b/c
+/b/c/aa.a/../// /b/c
+/b/c/aa.a/./aaa /b/c/aa.a/aaa
+/b/c/aa.a/./aa. /b/c/aa.a/aa.
+/b/c/aa.a/./aa/ /b/c/aa.a/aa
+/b/c/aa.a/./a.a /b/c/aa.a/a.a
+/b/c/aa.a/./a.. /b/c/aa.a/a..
+/b/c/aa.a/./a./ /b/c/aa.a/a.
+/b/c/aa.a/./a/a /b/c/aa.a/a/a
+/b/c/aa.a/./a/. /b/c/aa.a/a
+/b/c/aa.a/./a// /b/c/aa.a/a
+/b/c/aa.a/./.aa /b/c/aa.a/.aa
+/b/c/aa.a/./.a. /b/c/aa.a/.a.
+/b/c/aa.a/./.a/ /b/c/aa.a/.a
+/b/c/aa.a/./..a /b/c/aa.a/..a
+/b/c/aa.a/./... /b/c/aa.a/...
+/b/c/aa.a/./../ /b/c
+/b/c/aa.a/././a /b/c/aa.a/a
+/b/c/aa.a/././. /b/c/aa.a
+/b/c/aa.a/./.// /b/c/aa.a
+/b/c/aa.a/.//aa /b/c/aa.a/aa
+/b/c/aa.a/.//a. /b/c/aa.a/a.
+/b/c/aa.a/.//a/ /b/c/aa.a/a
+/b/c/aa.a/.//.a /b/c/aa.a/.a
+/b/c/aa.a/.//.. /b/c
+/b/c/aa.a/.//./ /b/c/aa.a
+/b/c/aa.a/.///a /b/c/aa.a/a
+/b/c/aa.a/.///. /b/c/aa.a
+/b/c/aa.a/.//// /b/c/aa.a
+/b/c/aa.a//aaaa /b/c/aa.a/aaaa
+/b/c/aa.a//aaa. /b/c/aa.a/aaa.
+/b/c/aa.a//aaa/ /b/c/aa.a/aaa
+/b/c/aa.a//aa.a /b/c/aa.a/aa.a
+/b/c/aa.a//aa.. /b/c/aa.a/aa..
+/b/c/aa.a//aa./ /b/c/aa.a/aa.
+/b/c/aa.a//aa/a /b/c/aa.a/aa/a
+/b/c/aa.a//aa/. /b/c/aa.a/aa
+/b/c/aa.a//aa// /b/c/aa.a/aa
+/b/c/aa.a//a.aa /b/c/aa.a/a.aa
+/b/c/aa.a//a.a. /b/c/aa.a/a.a.
+/b/c/aa.a//a.a/ /b/c/aa.a/a.a
+/b/c/aa.a//a..a /b/c/aa.a/a..a
+/b/c/aa.a//a... /b/c/aa.a/a...
+/b/c/aa.a//a../ /b/c/aa.a/a..
+/b/c/aa.a//a./a /b/c/aa.a/a./a
+/b/c/aa.a//a./. /b/c/aa.a/a.
+/b/c/aa.a//a.// /b/c/aa.a/a.
+/b/c/aa.a//a/aa /b/c/aa.a/a/aa
+/b/c/aa.a//a/a. /b/c/aa.a/a/a.
+/b/c/aa.a//a/a/ /b/c/aa.a/a/a
+/b/c/aa.a//a/.a /b/c/aa.a/a/.a
+/b/c/aa.a//a/.. /b/c/aa.a
+/b/c/aa.a//a/./ /b/c/aa.a/a
+/b/c/aa.a//a//a /b/c/aa.a/a/a
+/b/c/aa.a//a//. /b/c/aa.a/a
+/b/c/aa.a//a/// /b/c/aa.a/a
+/b/c/aa.a//.aaa /b/c/aa.a/.aaa
+/b/c/aa.a//.aa. /b/c/aa.a/.aa.
+/b/c/aa.a//.aa/ /b/c/aa.a/.aa
+/b/c/aa.a//.a.a /b/c/aa.a/.a.a
+/b/c/aa.a//.a.. /b/c/aa.a/.a..
+/b/c/aa.a//.a./ /b/c/aa.a/.a.
+/b/c/aa.a//.a/a /b/c/aa.a/.a/a
+/b/c/aa.a//.a/. /b/c/aa.a/.a
+/b/c/aa.a//.a// /b/c/aa.a/.a
+/b/c/aa.a//..aa /b/c/aa.a/..aa
+/b/c/aa.a//..a. /b/c/aa.a/..a.
+/b/c/aa.a//..a/ /b/c/aa.a/..a
+/b/c/aa.a//...a /b/c/aa.a/...a
+/b/c/aa.a//.... /b/c/aa.a/....
+/b/c/aa.a//.../ /b/c/aa.a/...
+/b/c/aa.a//../a /b/c/a
+/b/c/aa.a//../. /b/c
+/b/c/aa.a//..// /b/c
+/b/c/aa.a//./aa /b/c/aa.a/aa
+/b/c/aa.a//./a. /b/c/aa.a/a.
+/b/c/aa.a//./a/ /b/c/aa.a/a
+/b/c/aa.a//./.a /b/c/aa.a/.a
+/b/c/aa.a//./.. /b/c
+/b/c/aa.a//././ /b/c/aa.a
+/b/c/aa.a//.//a /b/c/aa.a/a
+/b/c/aa.a//.//. /b/c/aa.a
+/b/c/aa.a//./// /b/c/aa.a
+/b/c/aa.a///aaa /b/c/aa.a/aaa
+/b/c/aa.a///aa. /b/c/aa.a/aa.
+/b/c/aa.a///aa/ /b/c/aa.a/aa
+/b/c/aa.a///a.a /b/c/aa.a/a.a
+/b/c/aa.a///a.. /b/c/aa.a/a..
+/b/c/aa.a///a./ /b/c/aa.a/a.
+/b/c/aa.a///a/a /b/c/aa.a/a/a
+/b/c/aa.a///a/. /b/c/aa.a/a
+/b/c/aa.a///a// /b/c/aa.a/a
+/b/c/aa.a///.aa /b/c/aa.a/.aa
+/b/c/aa.a///.a. /b/c/aa.a/.a.
+/b/c/aa.a///.a/ /b/c/aa.a/.a
+/b/c/aa.a///..a /b/c/aa.a/..a
+/b/c/aa.a///... /b/c/aa.a/...
+/b/c/aa.a///../ /b/c
+/b/c/aa.a///./a /b/c/aa.a/a
+/b/c/aa.a///./. /b/c/aa.a
+/b/c/aa.a///.// /b/c/aa.a
+/b/c/aa.a////aa /b/c/aa.a/aa
+/b/c/aa.a////a. /b/c/aa.a/a.
+/b/c/aa.a////a/ /b/c/aa.a/a
+/b/c/aa.a////.a /b/c/aa.a/.a
+/b/c/aa.a////.. /b/c
+/b/c/aa.a////./ /b/c/aa.a
+/b/c/aa.a/////a /b/c/aa.a/a
+/b/c/aa.a/////. /b/c/aa.a
+/b/c/aa.a////// /b/c/aa.a
+/b/c/aa..aaaaaa /b/c/aa..aaaaaa
+/b/c/aa..aaaaa. /b/c/aa..aaaaa.
+/b/c/aa..aaaaa/ /b/c/aa..aaaaa
+/b/c/aa..aaaa.a /b/c/aa..aaaa.a
+/b/c/aa..aaaa.. /b/c/aa..aaaa..
+/b/c/aa..aaaa./ /b/c/aa..aaaa.
+/b/c/aa..aaaa/a /b/c/aa..aaaa/a
+/b/c/aa..aaaa/. /b/c/aa..aaaa
+/b/c/aa..aaaa// /b/c/aa..aaaa
+/b/c/aa..aaa.aa /b/c/aa..aaa.aa
+/b/c/aa..aaa.a. /b/c/aa..aaa.a.
+/b/c/aa..aaa.a/ /b/c/aa..aaa.a
+/b/c/aa..aaa..a /b/c/aa..aaa..a
+/b/c/aa..aaa... /b/c/aa..aaa...
+/b/c/aa..aaa../ /b/c/aa..aaa..
+/b/c/aa..aaa./a /b/c/aa..aaa./a
+/b/c/aa..aaa./. /b/c/aa..aaa.
+/b/c/aa..aaa.// /b/c/aa..aaa.
+/b/c/aa..aaa/aa /b/c/aa..aaa/aa
+/b/c/aa..aaa/a. /b/c/aa..aaa/a.
+/b/c/aa..aaa/a/ /b/c/aa..aaa/a
+/b/c/aa..aaa/.a /b/c/aa..aaa/.a
+/b/c/aa..aaa/.. /b/c
+/b/c/aa..aaa/./ /b/c/aa..aaa
+/b/c/aa..aaa//a /b/c/aa..aaa/a
+/b/c/aa..aaa//. /b/c/aa..aaa
+/b/c/aa..aaa/// /b/c/aa..aaa
+/b/c/aa..aa.aaa /b/c/aa..aa.aaa
+/b/c/aa..aa.aa. /b/c/aa..aa.aa.
+/b/c/aa..aa.aa/ /b/c/aa..aa.aa
+/b/c/aa..aa.a.a /b/c/aa..aa.a.a
+/b/c/aa..aa.a.. /b/c/aa..aa.a..
+/b/c/aa..aa.a./ /b/c/aa..aa.a.
+/b/c/aa..aa.a/a /b/c/aa..aa.a/a
+/b/c/aa..aa.a/. /b/c/aa..aa.a
+/b/c/aa..aa.a// /b/c/aa..aa.a
+/b/c/aa..aa..aa /b/c/aa..aa..aa
+/b/c/aa..aa..a. /b/c/aa..aa..a.
+/b/c/aa..aa..a/ /b/c/aa..aa..a
+/b/c/aa..aa...a /b/c/aa..aa...a
+/b/c/aa..aa.... /b/c/aa..aa....
+/b/c/aa..aa.../ /b/c/aa..aa...
+/b/c/aa..aa../a /b/c/aa..aa../a
+/b/c/aa..aa../. /b/c/aa..aa..
+/b/c/aa..aa..// /b/c/aa..aa..
+/b/c/aa..aa./aa /b/c/aa..aa./aa
+/b/c/aa..aa./a. /b/c/aa..aa./a.
+/b/c/aa..aa./a/ /b/c/aa..aa./a
+/b/c/aa..aa./.a /b/c/aa..aa./.a
+/b/c/aa..aa./.. /b/c
+/b/c/aa..aa././ /b/c/aa..aa.
+/b/c/aa..aa.//a /b/c/aa..aa./a
+/b/c/aa..aa.//. /b/c/aa..aa.
+/b/c/aa..aa./// /b/c/aa..aa.
+/b/c/aa..aa/aaa /b/c/aa..aa/aaa
+/b/c/aa..aa/aa. /b/c/aa..aa/aa.
+/b/c/aa..aa/aa/ /b/c/aa..aa/aa
+/b/c/aa..aa/a.a /b/c/aa..aa/a.a
+/b/c/aa..aa/a.. /b/c/aa..aa/a..
+/b/c/aa..aa/a./ /b/c/aa..aa/a.
+/b/c/aa..aa/a/a /b/c/aa..aa/a/a
+/b/c/aa..aa/a/. /b/c/aa..aa/a
+/b/c/aa..aa/a// /b/c/aa..aa/a
+/b/c/aa..aa/.aa /b/c/aa..aa/.aa
+/b/c/aa..aa/.a. /b/c/aa..aa/.a.
+/b/c/aa..aa/.a/ /b/c/aa..aa/.a
+/b/c/aa..aa/..a /b/c/aa..aa/..a
+/b/c/aa..aa/... /b/c/aa..aa/...
+/b/c/aa..aa/../ /b/c
+/b/c/aa..aa/./a /b/c/aa..aa/a
+/b/c/aa..aa/./. /b/c/aa..aa
+/b/c/aa..aa/.// /b/c/aa..aa
+/b/c/aa..aa//aa /b/c/aa..aa/aa
+/b/c/aa..aa//a. /b/c/aa..aa/a.
+/b/c/aa..aa//a/ /b/c/aa..aa/a
+/b/c/aa..aa//.a /b/c/aa..aa/.a
+/b/c/aa..aa//.. /b/c
+/b/c/aa..aa//./ /b/c/aa..aa
+/b/c/aa..aa///a /b/c/aa..aa/a
+/b/c/aa..aa///. /b/c/aa..aa
+/b/c/aa..aa//// /b/c/aa..aa
+/b/c/aa..a.aaaa /b/c/aa..a.aaaa
+/b/c/aa..a.aaa. /b/c/aa..a.aaa.
+/b/c/aa..a.aaa/ /b/c/aa..a.aaa
+/b/c/aa..a.aa.a /b/c/aa..a.aa.a
+/b/c/aa..a.aa.. /b/c/aa..a.aa..
+/b/c/aa..a.aa./ /b/c/aa..a.aa.
+/b/c/aa..a.aa/a /b/c/aa..a.aa/a
+/b/c/aa..a.aa/. /b/c/aa..a.aa
+/b/c/aa..a.aa// /b/c/aa..a.aa
+/b/c/aa..a.a.aa /b/c/aa..a.a.aa
+/b/c/aa..a.a.a. /b/c/aa..a.a.a.
+/b/c/aa..a.a.a/ /b/c/aa..a.a.a
+/b/c/aa..a.a..a /b/c/aa..a.a..a
+/b/c/aa..a.a... /b/c/aa..a.a...
+/b/c/aa..a.a../ /b/c/aa..a.a..
+/b/c/aa..a.a./a /b/c/aa..a.a./a
+/b/c/aa..a.a./. /b/c/aa..a.a.
+/b/c/aa..a.a.// /b/c/aa..a.a.
+/b/c/aa..a.a/aa /b/c/aa..a.a/aa
+/b/c/aa..a.a/a. /b/c/aa..a.a/a.
+/b/c/aa..a.a/a/ /b/c/aa..a.a/a
+/b/c/aa..a.a/.a /b/c/aa..a.a/.a
+/b/c/aa..a.a/.. /b/c
+/b/c/aa..a.a/./ /b/c/aa..a.a
+/b/c/aa..a.a//a /b/c/aa..a.a/a
+/b/c/aa..a.a//. /b/c/aa..a.a
+/b/c/aa..a.a/// /b/c/aa..a.a
+/b/c/aa..a..aaa /b/c/aa..a..aaa
+/b/c/aa..a..aa. /b/c/aa..a..aa.
+/b/c/aa..a..aa/ /b/c/aa..a..aa
+/b/c/aa..a..a.a /b/c/aa..a..a.a
+/b/c/aa..a..a.. /b/c/aa..a..a..
+/b/c/aa..a..a./ /b/c/aa..a..a.
+/b/c/aa..a..a/a /b/c/aa..a..a/a
+/b/c/aa..a..a/. /b/c/aa..a..a
+/b/c/aa..a..a// /b/c/aa..a..a
+/b/c/aa..a...aa /b/c/aa..a...aa
+/b/c/aa..a...a. /b/c/aa..a...a.
+/b/c/aa..a...a/ /b/c/aa..a...a
+/b/c/aa..a....a /b/c/aa..a....a
+/b/c/aa..a..... /b/c/aa..a.....
+/b/c/aa..a..../ /b/c/aa..a....
+/b/c/aa..a.../a /b/c/aa..a.../a
+/b/c/aa..a.../. /b/c/aa..a...
+/b/c/aa..a...// /b/c/aa..a...
+/b/c/aa..a../aa /b/c/aa..a../aa
+/b/c/aa..a../a. /b/c/aa..a../a.
+/b/c/aa..a../a/ /b/c/aa..a../a
+/b/c/aa..a../.a /b/c/aa..a../.a
+/b/c/aa..a../.. /b/c
+/b/c/aa..a.././ /b/c/aa..a..
+/b/c/aa..a..//a /b/c/aa..a../a
+/b/c/aa..a..//. /b/c/aa..a..
+/b/c/aa..a../// /b/c/aa..a..
+/b/c/aa..a./aaa /b/c/aa..a./aaa
+/b/c/aa..a./aa. /b/c/aa..a./aa.
+/b/c/aa..a./aa/ /b/c/aa..a./aa
+/b/c/aa..a./a.a /b/c/aa..a./a.a
+/b/c/aa..a./a.. /b/c/aa..a./a..
+/b/c/aa..a./a./ /b/c/aa..a./a.
+/b/c/aa..a./a/a /b/c/aa..a./a/a
+/b/c/aa..a./a/. /b/c/aa..a./a
+/b/c/aa..a./a// /b/c/aa..a./a
+/b/c/aa..a./.aa /b/c/aa..a./.aa
+/b/c/aa..a./.a. /b/c/aa..a./.a.
+/b/c/aa..a./.a/ /b/c/aa..a./.a
+/b/c/aa..a./..a /b/c/aa..a./..a
+/b/c/aa..a./... /b/c/aa..a./...
+/b/c/aa..a./../ /b/c
+/b/c/aa..a././a /b/c/aa..a./a
+/b/c/aa..a././. /b/c/aa..a.
+/b/c/aa..a./.// /b/c/aa..a.
+/b/c/aa..a.//aa /b/c/aa..a./aa
+/b/c/aa..a.//a. /b/c/aa..a./a.
+/b/c/aa..a.//a/ /b/c/aa..a./a
+/b/c/aa..a.//.a /b/c/aa..a./.a
+/b/c/aa..a.//.. /b/c
+/b/c/aa..a.//./ /b/c/aa..a.
+/b/c/aa..a.///a /b/c/aa..a./a
+/b/c/aa..a.///. /b/c/aa..a.
+/b/c/aa..a.//// /b/c/aa..a.
+/b/c/aa..a/aaaa /b/c/aa..a/aaaa
+/b/c/aa..a/aaa. /b/c/aa..a/aaa.
+/b/c/aa..a/aaa/ /b/c/aa..a/aaa
+/b/c/aa..a/aa.a /b/c/aa..a/aa.a
+/b/c/aa..a/aa.. /b/c/aa..a/aa..
+/b/c/aa..a/aa./ /b/c/aa..a/aa.
+/b/c/aa..a/aa/a /b/c/aa..a/aa/a
+/b/c/aa..a/aa/. /b/c/aa..a/aa
+/b/c/aa..a/aa// /b/c/aa..a/aa
+/b/c/aa..a/a.aa /b/c/aa..a/a.aa
+/b/c/aa..a/a.a. /b/c/aa..a/a.a.
+/b/c/aa..a/a.a/ /b/c/aa..a/a.a
+/b/c/aa..a/a..a /b/c/aa..a/a..a
+/b/c/aa..a/a... /b/c/aa..a/a...
+/b/c/aa..a/a../ /b/c/aa..a/a..
+/b/c/aa..a/a./a /b/c/aa..a/a./a
+/b/c/aa..a/a./. /b/c/aa..a/a.
+/b/c/aa..a/a.// /b/c/aa..a/a.
+/b/c/aa..a/a/aa /b/c/aa..a/a/aa
+/b/c/aa..a/a/a. /b/c/aa..a/a/a.
+/b/c/aa..a/a/a/ /b/c/aa..a/a/a
+/b/c/aa..a/a/.a /b/c/aa..a/a/.a
+/b/c/aa..a/a/.. /b/c/aa..a
+/b/c/aa..a/a/./ /b/c/aa..a/a
+/b/c/aa..a/a//a /b/c/aa..a/a/a
+/b/c/aa..a/a//. /b/c/aa..a/a
+/b/c/aa..a/a/// /b/c/aa..a/a
+/b/c/aa..a/.aaa /b/c/aa..a/.aaa
+/b/c/aa..a/.aa. /b/c/aa..a/.aa.
+/b/c/aa..a/.aa/ /b/c/aa..a/.aa
+/b/c/aa..a/.a.a /b/c/aa..a/.a.a
+/b/c/aa..a/.a.. /b/c/aa..a/.a..
+/b/c/aa..a/.a./ /b/c/aa..a/.a.
+/b/c/aa..a/.a/a /b/c/aa..a/.a/a
+/b/c/aa..a/.a/. /b/c/aa..a/.a
+/b/c/aa..a/.a// /b/c/aa..a/.a
+/b/c/aa..a/..aa /b/c/aa..a/..aa
+/b/c/aa..a/..a. /b/c/aa..a/..a.
+/b/c/aa..a/..a/ /b/c/aa..a/..a
+/b/c/aa..a/...a /b/c/aa..a/...a
+/b/c/aa..a/.... /b/c/aa..a/....
+/b/c/aa..a/.../ /b/c/aa..a/...
+/b/c/aa..a/../a /b/c/a
+/b/c/aa..a/../. /b/c
+/b/c/aa..a/..// /b/c
+/b/c/aa..a/./aa /b/c/aa..a/aa
+/b/c/aa..a/./a. /b/c/aa..a/a.
+/b/c/aa..a/./a/ /b/c/aa..a/a
+/b/c/aa..a/./.a /b/c/aa..a/.a
+/b/c/aa..a/./.. /b/c
+/b/c/aa..a/././ /b/c/aa..a
+/b/c/aa..a/.//a /b/c/aa..a/a
+/b/c/aa..a/.//. /b/c/aa..a
+/b/c/aa..a/./// /b/c/aa..a
+/b/c/aa..a//aaa /b/c/aa..a/aaa
+/b/c/aa..a//aa. /b/c/aa..a/aa.
+/b/c/aa..a//aa/ /b/c/aa..a/aa
+/b/c/aa..a//a.a /b/c/aa..a/a.a
+/b/c/aa..a//a.. /b/c/aa..a/a..
+/b/c/aa..a//a./ /b/c/aa..a/a.
+/b/c/aa..a//a/a /b/c/aa..a/a/a
+/b/c/aa..a//a/. /b/c/aa..a/a
+/b/c/aa..a//a// /b/c/aa..a/a
+/b/c/aa..a//.aa /b/c/aa..a/.aa
+/b/c/aa..a//.a. /b/c/aa..a/.a.
+/b/c/aa..a//.a/ /b/c/aa..a/.a
+/b/c/aa..a//..a /b/c/aa..a/..a
+/b/c/aa..a//... /b/c/aa..a/...
+/b/c/aa..a//../ /b/c
+/b/c/aa..a//./a /b/c/aa..a/a
+/b/c/aa..a//./. /b/c/aa..a
+/b/c/aa..a//.// /b/c/aa..a
+/b/c/aa..a///aa /b/c/aa..a/aa
+/b/c/aa..a///a. /b/c/aa..a/a.
+/b/c/aa..a///a/ /b/c/aa..a/a
+/b/c/aa..a///.a /b/c/aa..a/.a
+/b/c/aa..a///.. /b/c
+/b/c/aa..a///./ /b/c/aa..a
+/b/c/aa..a////a /b/c/aa..a/a
+/b/c/aa..a////. /b/c/aa..a
+/b/c/aa..a///// /b/c/aa..a
+/b/c/aa...aaaaa /b/c/aa...aaaaa
+/b/c/aa...aaaa. /b/c/aa...aaaa.
+/b/c/aa...aaaa/ /b/c/aa...aaaa
+/b/c/aa...aaa.a /b/c/aa...aaa.a
+/b/c/aa...aaa.. /b/c/aa...aaa..
+/b/c/aa...aaa./ /b/c/aa...aaa.
+/b/c/aa...aaa/a /b/c/aa...aaa/a
+/b/c/aa...aaa/. /b/c/aa...aaa
+/b/c/aa...aaa// /b/c/aa...aaa
+/b/c/aa...aa.aa /b/c/aa...aa.aa
+/b/c/aa...aa.a. /b/c/aa...aa.a.
+/b/c/aa...aa.a/ /b/c/aa...aa.a
+/b/c/aa...aa..a /b/c/aa...aa..a
+/b/c/aa...aa... /b/c/aa...aa...
+/b/c/aa...aa../ /b/c/aa...aa..
+/b/c/aa...aa./a /b/c/aa...aa./a
+/b/c/aa...aa./. /b/c/aa...aa.
+/b/c/aa...aa.// /b/c/aa...aa.
+/b/c/aa...aa/aa /b/c/aa...aa/aa
+/b/c/aa...aa/a. /b/c/aa...aa/a.
+/b/c/aa...aa/a/ /b/c/aa...aa/a
+/b/c/aa...aa/.a /b/c/aa...aa/.a
+/b/c/aa...aa/.. /b/c
+/b/c/aa...aa/./ /b/c/aa...aa
+/b/c/aa...aa//a /b/c/aa...aa/a
+/b/c/aa...aa//. /b/c/aa...aa
+/b/c/aa...aa/// /b/c/aa...aa
+/b/c/aa...a.aaa /b/c/aa...a.aaa
+/b/c/aa...a.aa. /b/c/aa...a.aa.
+/b/c/aa...a.aa/ /b/c/aa...a.aa
+/b/c/aa...a.a.a /b/c/aa...a.a.a
+/b/c/aa...a.a.. /b/c/aa...a.a..
+/b/c/aa...a.a./ /b/c/aa...a.a.
+/b/c/aa...a.a/a /b/c/aa...a.a/a
+/b/c/aa...a.a/. /b/c/aa...a.a
+/b/c/aa...a.a// /b/c/aa...a.a
+/b/c/aa...a..aa /b/c/aa...a..aa
+/b/c/aa...a..a. /b/c/aa...a..a.
+/b/c/aa...a..a/ /b/c/aa...a..a
+/b/c/aa...a...a /b/c/aa...a...a
+/b/c/aa...a.... /b/c/aa...a....
+/b/c/aa...a.../ /b/c/aa...a...
+/b/c/aa...a../a /b/c/aa...a../a
+/b/c/aa...a../. /b/c/aa...a..
+/b/c/aa...a..// /b/c/aa...a..
+/b/c/aa...a./aa /b/c/aa...a./aa
+/b/c/aa...a./a. /b/c/aa...a./a.
+/b/c/aa...a./a/ /b/c/aa...a./a
+/b/c/aa...a./.a /b/c/aa...a./.a
+/b/c/aa...a./.. /b/c
+/b/c/aa...a././ /b/c/aa...a.
+/b/c/aa...a.//a /b/c/aa...a./a
+/b/c/aa...a.//. /b/c/aa...a.
+/b/c/aa...a./// /b/c/aa...a.
+/b/c/aa...a/aaa /b/c/aa...a/aaa
+/b/c/aa...a/aa. /b/c/aa...a/aa.
+/b/c/aa...a/aa/ /b/c/aa...a/aa
+/b/c/aa...a/a.a /b/c/aa...a/a.a
+/b/c/aa...a/a.. /b/c/aa...a/a..
+/b/c/aa...a/a./ /b/c/aa...a/a.
+/b/c/aa...a/a/a /b/c/aa...a/a/a
+/b/c/aa...a/a/. /b/c/aa...a/a
+/b/c/aa...a/a// /b/c/aa...a/a
+/b/c/aa...a/.aa /b/c/aa...a/.aa
+/b/c/aa...a/.a. /b/c/aa...a/.a.
+/b/c/aa...a/.a/ /b/c/aa...a/.a
+/b/c/aa...a/..a /b/c/aa...a/..a
+/b/c/aa...a/... /b/c/aa...a/...
+/b/c/aa...a/../ /b/c
+/b/c/aa...a/./a /b/c/aa...a/a
+/b/c/aa...a/./. /b/c/aa...a
+/b/c/aa...a/.// /b/c/aa...a
+/b/c/aa...a//aa /b/c/aa...a/aa
+/b/c/aa...a//a. /b/c/aa...a/a.
+/b/c/aa...a//a/ /b/c/aa...a/a
+/b/c/aa...a//.a /b/c/aa...a/.a
+/b/c/aa...a//.. /b/c
+/b/c/aa...a//./ /b/c/aa...a
+/b/c/aa...a///a /b/c/aa...a/a
+/b/c/aa...a///. /b/c/aa...a
+/b/c/aa...a//// /b/c/aa...a
+/b/c/aa....aaaa /b/c/aa....aaaa
+/b/c/aa....aaa. /b/c/aa....aaa.
+/b/c/aa....aaa/ /b/c/aa....aaa
+/b/c/aa....aa.a /b/c/aa....aa.a
+/b/c/aa....aa.. /b/c/aa....aa..
+/b/c/aa....aa./ /b/c/aa....aa.
+/b/c/aa....aa/a /b/c/aa....aa/a
+/b/c/aa....aa/. /b/c/aa....aa
+/b/c/aa....aa// /b/c/aa....aa
+/b/c/aa....a.aa /b/c/aa....a.aa
+/b/c/aa....a.a. /b/c/aa....a.a.
+/b/c/aa....a.a/ /b/c/aa....a.a
+/b/c/aa....a..a /b/c/aa....a..a
+/b/c/aa....a... /b/c/aa....a...
+/b/c/aa....a../ /b/c/aa....a..
+/b/c/aa....a./a /b/c/aa....a./a
+/b/c/aa....a./. /b/c/aa....a.
+/b/c/aa....a.// /b/c/aa....a.
+/b/c/aa....a/aa /b/c/aa....a/aa
+/b/c/aa....a/a. /b/c/aa....a/a.
+/b/c/aa....a/a/ /b/c/aa....a/a
+/b/c/aa....a/.a /b/c/aa....a/.a
+/b/c/aa....a/.. /b/c
+/b/c/aa....a/./ /b/c/aa....a
+/b/c/aa....a//a /b/c/aa....a/a
+/b/c/aa....a//. /b/c/aa....a
+/b/c/aa....a/// /b/c/aa....a
+/b/c/aa.....aaa /b/c/aa.....aaa
+/b/c/aa.....aa. /b/c/aa.....aa.
+/b/c/aa.....aa/ /b/c/aa.....aa
+/b/c/aa.....a.a /b/c/aa.....a.a
+/b/c/aa.....a.. /b/c/aa.....a..
+/b/c/aa.....a./ /b/c/aa.....a.
+/b/c/aa.....a/a /b/c/aa.....a/a
+/b/c/aa.....a/. /b/c/aa.....a
+/b/c/aa.....a// /b/c/aa.....a
+/b/c/aa......aa /b/c/aa......aa
+/b/c/aa......a. /b/c/aa......a.
+/b/c/aa......a/ /b/c/aa......a
+/b/c/aa.......a /b/c/aa.......a
+/b/c/aa........ /b/c/aa........
+/b/c/aa......./ /b/c/aa.......
+/b/c/aa....../a /b/c/aa....../a
+/b/c/aa....../. /b/c/aa......
+/b/c/aa......// /b/c/aa......
+/b/c/aa...../aa /b/c/aa...../aa
+/b/c/aa...../a. /b/c/aa...../a.
+/b/c/aa...../a/ /b/c/aa...../a
+/b/c/aa...../.a /b/c/aa...../.a
+/b/c/aa...../.. /b/c
+/b/c/aa....././ /b/c/aa.....
+/b/c/aa.....//a /b/c/aa...../a
+/b/c/aa.....//. /b/c/aa.....
+/b/c/aa...../// /b/c/aa.....
+/b/c/aa..../aaa /b/c/aa..../aaa
+/b/c/aa..../aa. /b/c/aa..../aa.
+/b/c/aa..../aa/ /b/c/aa..../aa
+/b/c/aa..../a.a /b/c/aa..../a.a
+/b/c/aa..../a.. /b/c/aa..../a..
+/b/c/aa..../a./ /b/c/aa..../a.
+/b/c/aa..../a/a /b/c/aa..../a/a
+/b/c/aa..../a/. /b/c/aa..../a
+/b/c/aa..../a// /b/c/aa..../a
+/b/c/aa..../.aa /b/c/aa..../.aa
+/b/c/aa..../.a. /b/c/aa..../.a.
+/b/c/aa..../.a/ /b/c/aa..../.a
+/b/c/aa..../..a /b/c/aa..../..a
+/b/c/aa..../... /b/c/aa..../...
+/b/c/aa..../../ /b/c
+/b/c/aa...././a /b/c/aa..../a
+/b/c/aa...././. /b/c/aa....
+/b/c/aa..../.// /b/c/aa....
+/b/c/aa....//aa /b/c/aa..../aa
+/b/c/aa....//a. /b/c/aa..../a.
+/b/c/aa....//a/ /b/c/aa..../a
+/b/c/aa....//.a /b/c/aa..../.a
+/b/c/aa....//.. /b/c
+/b/c/aa....//./ /b/c/aa....
+/b/c/aa....///a /b/c/aa..../a
+/b/c/aa....///. /b/c/aa....
+/b/c/aa....//// /b/c/aa....
+/b/c/aa.../aaaa /b/c/aa.../aaaa
+/b/c/aa.../aaa. /b/c/aa.../aaa.
+/b/c/aa.../aaa/ /b/c/aa.../aaa
+/b/c/aa.../aa.a /b/c/aa.../aa.a
+/b/c/aa.../aa.. /b/c/aa.../aa..
+/b/c/aa.../aa./ /b/c/aa.../aa.
+/b/c/aa.../aa/a /b/c/aa.../aa/a
+/b/c/aa.../aa/. /b/c/aa.../aa
+/b/c/aa.../aa// /b/c/aa.../aa
+/b/c/aa.../a.aa /b/c/aa.../a.aa
+/b/c/aa.../a.a. /b/c/aa.../a.a.
+/b/c/aa.../a.a/ /b/c/aa.../a.a
+/b/c/aa.../a..a /b/c/aa.../a..a
+/b/c/aa.../a... /b/c/aa.../a...
+/b/c/aa.../a../ /b/c/aa.../a..
+/b/c/aa.../a./a /b/c/aa.../a./a
+/b/c/aa.../a./. /b/c/aa.../a.
+/b/c/aa.../a.// /b/c/aa.../a.
+/b/c/aa.../a/aa /b/c/aa.../a/aa
+/b/c/aa.../a/a. /b/c/aa.../a/a.
+/b/c/aa.../a/a/ /b/c/aa.../a/a
+/b/c/aa.../a/.a /b/c/aa.../a/.a
+/b/c/aa.../a/.. /b/c/aa...
+/b/c/aa.../a/./ /b/c/aa.../a
+/b/c/aa.../a//a /b/c/aa.../a/a
+/b/c/aa.../a//. /b/c/aa.../a
+/b/c/aa.../a/// /b/c/aa.../a
+/b/c/aa.../.aaa /b/c/aa.../.aaa
+/b/c/aa.../.aa. /b/c/aa.../.aa.
+/b/c/aa.../.aa/ /b/c/aa.../.aa
+/b/c/aa.../.a.a /b/c/aa.../.a.a
+/b/c/aa.../.a.. /b/c/aa.../.a..
+/b/c/aa.../.a./ /b/c/aa.../.a.
+/b/c/aa.../.a/a /b/c/aa.../.a/a
+/b/c/aa.../.a/. /b/c/aa.../.a
+/b/c/aa.../.a// /b/c/aa.../.a
+/b/c/aa.../..aa /b/c/aa.../..aa
+/b/c/aa.../..a. /b/c/aa.../..a.
+/b/c/aa.../..a/ /b/c/aa.../..a
+/b/c/aa.../...a /b/c/aa.../...a
+/b/c/aa.../.... /b/c/aa.../....
+/b/c/aa.../.../ /b/c/aa.../...
+/b/c/aa.../../a /b/c/a
+/b/c/aa.../../. /b/c
+/b/c/aa.../..// /b/c
+/b/c/aa..././aa /b/c/aa.../aa
+/b/c/aa..././a. /b/c/aa.../a.
+/b/c/aa..././a/ /b/c/aa.../a
+/b/c/aa..././.a /b/c/aa.../.a
+/b/c/aa..././.. /b/c
+/b/c/aa.../././ /b/c/aa...
+/b/c/aa..././/a /b/c/aa.../a
+/b/c/aa..././/. /b/c/aa...
+/b/c/aa..././// /b/c/aa...
+/b/c/aa...//aaa /b/c/aa.../aaa
+/b/c/aa...//aa. /b/c/aa.../aa.
+/b/c/aa...//aa/ /b/c/aa.../aa
+/b/c/aa...//a.a /b/c/aa.../a.a
+/b/c/aa...//a.. /b/c/aa.../a..
+/b/c/aa...//a./ /b/c/aa.../a.
+/b/c/aa...//a/a /b/c/aa.../a/a
+/b/c/aa...//a/. /b/c/aa.../a
+/b/c/aa...//a// /b/c/aa.../a
+/b/c/aa...//.aa /b/c/aa.../.aa
+/b/c/aa...//.a. /b/c/aa.../.a.
+/b/c/aa...//.a/ /b/c/aa.../.a
+/b/c/aa...//..a /b/c/aa.../..a
+/b/c/aa...//... /b/c/aa.../...
+/b/c/aa...//../ /b/c
+/b/c/aa...//./a /b/c/aa.../a
+/b/c/aa...//./. /b/c/aa...
+/b/c/aa...//.// /b/c/aa...
+/b/c/aa...///aa /b/c/aa.../aa
+/b/c/aa...///a. /b/c/aa.../a.
+/b/c/aa...///a/ /b/c/aa.../a
+/b/c/aa...///.a /b/c/aa.../.a
+/b/c/aa...///.. /b/c
+/b/c/aa...///./ /b/c/aa...
+/b/c/aa...////a /b/c/aa.../a
+/b/c/aa...////. /b/c/aa...
+/b/c/aa...///// /b/c/aa...
+/b/c/aa../aaaaa /b/c/aa../aaaaa
+/b/c/aa../aaaa. /b/c/aa../aaaa.
+/b/c/aa../aaaa/ /b/c/aa../aaaa
+/b/c/aa../aaa.a /b/c/aa../aaa.a
+/b/c/aa../aaa.. /b/c/aa../aaa..
+/b/c/aa../aaa./ /b/c/aa../aaa.
+/b/c/aa../aaa/a /b/c/aa../aaa/a
+/b/c/aa../aaa/. /b/c/aa../aaa
+/b/c/aa../aaa// /b/c/aa../aaa
+/b/c/aa../aa.aa /b/c/aa../aa.aa
+/b/c/aa../aa.a. /b/c/aa../aa.a.
+/b/c/aa../aa.a/ /b/c/aa../aa.a
+/b/c/aa../aa..a /b/c/aa../aa..a
+/b/c/aa../aa... /b/c/aa../aa...
+/b/c/aa../aa../ /b/c/aa../aa..
+/b/c/aa../aa./a /b/c/aa../aa./a
+/b/c/aa../aa./. /b/c/aa../aa.
+/b/c/aa../aa.// /b/c/aa../aa.
+/b/c/aa../aa/aa /b/c/aa../aa/aa
+/b/c/aa../aa/a. /b/c/aa../aa/a.
+/b/c/aa../aa/a/ /b/c/aa../aa/a
+/b/c/aa../aa/.a /b/c/aa../aa/.a
+/b/c/aa../aa/.. /b/c/aa..
+/b/c/aa../aa/./ /b/c/aa../aa
+/b/c/aa../aa//a /b/c/aa../aa/a
+/b/c/aa../aa//. /b/c/aa../aa
+/b/c/aa../aa/// /b/c/aa../aa
+/b/c/aa../a.aaa /b/c/aa../a.aaa
+/b/c/aa../a.aa. /b/c/aa../a.aa.
+/b/c/aa../a.aa/ /b/c/aa../a.aa
+/b/c/aa../a.a.a /b/c/aa../a.a.a
+/b/c/aa../a.a.. /b/c/aa../a.a..
+/b/c/aa../a.a./ /b/c/aa../a.a.
+/b/c/aa../a.a/a /b/c/aa../a.a/a
+/b/c/aa../a.a/. /b/c/aa../a.a
+/b/c/aa../a.a// /b/c/aa../a.a
+/b/c/aa../a..aa /b/c/aa../a..aa
+/b/c/aa../a..a. /b/c/aa../a..a.
+/b/c/aa../a..a/ /b/c/aa../a..a
+/b/c/aa../a...a /b/c/aa../a...a
+/b/c/aa../a.... /b/c/aa../a....
+/b/c/aa../a.../ /b/c/aa../a...
+/b/c/aa../a../a /b/c/aa../a../a
+/b/c/aa../a../. /b/c/aa../a..
+/b/c/aa../a..// /b/c/aa../a..
+/b/c/aa../a./aa /b/c/aa../a./aa
+/b/c/aa../a./a. /b/c/aa../a./a.
+/b/c/aa../a./a/ /b/c/aa../a./a
+/b/c/aa../a./.a /b/c/aa../a./.a
+/b/c/aa../a./.. /b/c/aa..
+/b/c/aa../a././ /b/c/aa../a.
+/b/c/aa../a.//a /b/c/aa../a./a
+/b/c/aa../a.//. /b/c/aa../a.
+/b/c/aa../a./// /b/c/aa../a.
+/b/c/aa../a/aaa /b/c/aa../a/aaa
+/b/c/aa../a/aa. /b/c/aa../a/aa.
+/b/c/aa../a/aa/ /b/c/aa../a/aa
+/b/c/aa../a/a.a /b/c/aa../a/a.a
+/b/c/aa../a/a.. /b/c/aa../a/a..
+/b/c/aa../a/a./ /b/c/aa../a/a.
+/b/c/aa../a/a/a /b/c/aa../a/a/a
+/b/c/aa../a/a/. /b/c/aa../a/a
+/b/c/aa../a/a// /b/c/aa../a/a
+/b/c/aa../a/.aa /b/c/aa../a/.aa
+/b/c/aa../a/.a. /b/c/aa../a/.a.
+/b/c/aa../a/.a/ /b/c/aa../a/.a
+/b/c/aa../a/..a /b/c/aa../a/..a
+/b/c/aa../a/... /b/c/aa../a/...
+/b/c/aa../a/../ /b/c/aa..
+/b/c/aa../a/./a /b/c/aa../a/a
+/b/c/aa../a/./. /b/c/aa../a
+/b/c/aa../a/.// /b/c/aa../a
+/b/c/aa../a//aa /b/c/aa../a/aa
+/b/c/aa../a//a. /b/c/aa../a/a.
+/b/c/aa../a//a/ /b/c/aa../a/a
+/b/c/aa../a//.a /b/c/aa../a/.a
+/b/c/aa../a//.. /b/c/aa..
+/b/c/aa../a//./ /b/c/aa../a
+/b/c/aa../a///a /b/c/aa../a/a
+/b/c/aa../a///. /b/c/aa../a
+/b/c/aa../a//// /b/c/aa../a
+/b/c/aa../.aaaa /b/c/aa../.aaaa
+/b/c/aa../.aaa. /b/c/aa../.aaa.
+/b/c/aa../.aaa/ /b/c/aa../.aaa
+/b/c/aa../.aa.a /b/c/aa../.aa.a
+/b/c/aa../.aa.. /b/c/aa../.aa..
+/b/c/aa../.aa./ /b/c/aa../.aa.
+/b/c/aa../.aa/a /b/c/aa../.aa/a
+/b/c/aa../.aa/. /b/c/aa../.aa
+/b/c/aa../.aa// /b/c/aa../.aa
+/b/c/aa../.a.aa /b/c/aa../.a.aa
+/b/c/aa../.a.a. /b/c/aa../.a.a.
+/b/c/aa../.a.a/ /b/c/aa../.a.a
+/b/c/aa../.a..a /b/c/aa../.a..a
+/b/c/aa../.a... /b/c/aa../.a...
+/b/c/aa../.a../ /b/c/aa../.a..
+/b/c/aa../.a./a /b/c/aa../.a./a
+/b/c/aa../.a./. /b/c/aa../.a.
+/b/c/aa../.a.// /b/c/aa../.a.
+/b/c/aa../.a/aa /b/c/aa../.a/aa
+/b/c/aa../.a/a. /b/c/aa../.a/a.
+/b/c/aa../.a/a/ /b/c/aa../.a/a
+/b/c/aa../.a/.a /b/c/aa../.a/.a
+/b/c/aa../.a/.. /b/c/aa..
+/b/c/aa../.a/./ /b/c/aa../.a
+/b/c/aa../.a//a /b/c/aa../.a/a
+/b/c/aa../.a//. /b/c/aa../.a
+/b/c/aa../.a/// /b/c/aa../.a
+/b/c/aa../..aaa /b/c/aa../..aaa
+/b/c/aa../..aa. /b/c/aa../..aa.
+/b/c/aa../..aa/ /b/c/aa../..aa
+/b/c/aa../..a.a /b/c/aa../..a.a
+/b/c/aa../..a.. /b/c/aa../..a..
+/b/c/aa../..a./ /b/c/aa../..a.
+/b/c/aa../..a/a /b/c/aa../..a/a
+/b/c/aa../..a/. /b/c/aa../..a
+/b/c/aa../..a// /b/c/aa../..a
+/b/c/aa../...aa /b/c/aa../...aa
+/b/c/aa../...a. /b/c/aa../...a.
+/b/c/aa../...a/ /b/c/aa../...a
+/b/c/aa../....a /b/c/aa../....a
+/b/c/aa../..... /b/c/aa../.....
+/b/c/aa../..../ /b/c/aa../....
+/b/c/aa../.../a /b/c/aa../.../a
+/b/c/aa../.../. /b/c/aa../...
+/b/c/aa../...// /b/c/aa../...
+/b/c/aa../../aa /b/c/aa
+/b/c/aa../../a. /b/c/a.
+/b/c/aa../../a/ /b/c/a
+/b/c/aa../../.a /b/c/.a
+/b/c/aa../../.. /b
+/b/c/aa../.././ /b/c
+/b/c/aa../..//a /b/c/a
+/b/c/aa../..//. /b/c
+/b/c/aa../../// /b/c
+/b/c/aa.././aaa /b/c/aa../aaa
+/b/c/aa.././aa. /b/c/aa../aa.
+/b/c/aa.././aa/ /b/c/aa../aa
+/b/c/aa.././a.a /b/c/aa../a.a
+/b/c/aa.././a.. /b/c/aa../a..
+/b/c/aa.././a./ /b/c/aa../a.
+/b/c/aa.././a/a /b/c/aa../a/a
+/b/c/aa.././a/. /b/c/aa../a
+/b/c/aa.././a// /b/c/aa../a
+/b/c/aa.././.aa /b/c/aa../.aa
+/b/c/aa.././.a. /b/c/aa../.a.
+/b/c/aa.././.a/ /b/c/aa../.a
+/b/c/aa.././..a /b/c/aa../..a
+/b/c/aa.././... /b/c/aa../...
+/b/c/aa.././../ /b/c
+/b/c/aa../././a /b/c/aa../a
+/b/c/aa../././. /b/c/aa..
+/b/c/aa.././.// /b/c/aa..
+/b/c/aa.././/aa /b/c/aa../aa
+/b/c/aa.././/a. /b/c/aa../a.
+/b/c/aa.././/a/ /b/c/aa../a
+/b/c/aa.././/.a /b/c/aa../.a
+/b/c/aa.././/.. /b/c
+/b/c/aa.././/./ /b/c/aa..
+/b/c/aa.././//a /b/c/aa../a
+/b/c/aa.././//. /b/c/aa..
+/b/c/aa.././/// /b/c/aa..
+/b/c/aa..//aaaa /b/c/aa../aaaa
+/b/c/aa..//aaa. /b/c/aa../aaa.
+/b/c/aa..//aaa/ /b/c/aa../aaa
+/b/c/aa..//aa.a /b/c/aa../aa.a
+/b/c/aa..//aa.. /b/c/aa../aa..
+/b/c/aa..//aa./ /b/c/aa../aa.
+/b/c/aa..//aa/a /b/c/aa../aa/a
+/b/c/aa..//aa/. /b/c/aa../aa
+/b/c/aa..//aa// /b/c/aa../aa
+/b/c/aa..//a.aa /b/c/aa../a.aa
+/b/c/aa..//a.a. /b/c/aa../a.a.
+/b/c/aa..//a.a/ /b/c/aa../a.a
+/b/c/aa..//a..a /b/c/aa../a..a
+/b/c/aa..//a... /b/c/aa../a...
+/b/c/aa..//a../ /b/c/aa../a..
+/b/c/aa..//a./a /b/c/aa../a./a
+/b/c/aa..//a./. /b/c/aa../a.
+/b/c/aa..//a.// /b/c/aa../a.
+/b/c/aa..//a/aa /b/c/aa../a/aa
+/b/c/aa..//a/a. /b/c/aa../a/a.
+/b/c/aa..//a/a/ /b/c/aa../a/a
+/b/c/aa..//a/.a /b/c/aa../a/.a
+/b/c/aa..//a/.. /b/c/aa..
+/b/c/aa..//a/./ /b/c/aa../a
+/b/c/aa..//a//a /b/c/aa../a/a
+/b/c/aa..//a//. /b/c/aa../a
+/b/c/aa..//a/// /b/c/aa../a
+/b/c/aa..//.aaa /b/c/aa../.aaa
+/b/c/aa..//.aa. /b/c/aa../.aa.
+/b/c/aa..//.aa/ /b/c/aa../.aa
+/b/c/aa..//.a.a /b/c/aa../.a.a
+/b/c/aa..//.a.. /b/c/aa../.a..
+/b/c/aa..//.a./ /b/c/aa../.a.
+/b/c/aa..//.a/a /b/c/aa../.a/a
+/b/c/aa..//.a/. /b/c/aa../.a
+/b/c/aa..//.a// /b/c/aa../.a
+/b/c/aa..//..aa /b/c/aa../..aa
+/b/c/aa..//..a. /b/c/aa../..a.
+/b/c/aa..//..a/ /b/c/aa../..a
+/b/c/aa..//...a /b/c/aa../...a
+/b/c/aa..//.... /b/c/aa../....
+/b/c/aa..//.../ /b/c/aa../...
+/b/c/aa..//../a /b/c/a
+/b/c/aa..//../. /b/c
+/b/c/aa..//..// /b/c
+/b/c/aa..//./aa /b/c/aa../aa
+/b/c/aa..//./a. /b/c/aa../a.
+/b/c/aa..//./a/ /b/c/aa../a
+/b/c/aa..//./.a /b/c/aa../.a
+/b/c/aa..//./.. /b/c
+/b/c/aa..//././ /b/c/aa..
+/b/c/aa..//.//a /b/c/aa../a
+/b/c/aa..//.//. /b/c/aa..
+/b/c/aa..//./// /b/c/aa..
+/b/c/aa..///aaa /b/c/aa../aaa
+/b/c/aa..///aa. /b/c/aa../aa.
+/b/c/aa..///aa/ /b/c/aa../aa
+/b/c/aa..///a.a /b/c/aa../a.a
+/b/c/aa..///a.. /b/c/aa../a..
+/b/c/aa..///a./ /b/c/aa../a.
+/b/c/aa..///a/a /b/c/aa../a/a
+/b/c/aa..///a/. /b/c/aa../a
+/b/c/aa..///a// /b/c/aa../a
+/b/c/aa..///.aa /b/c/aa../.aa
+/b/c/aa..///.a. /b/c/aa../.a.
+/b/c/aa..///.a/ /b/c/aa../.a
+/b/c/aa..///..a /b/c/aa../..a
+/b/c/aa..///... /b/c/aa../...
+/b/c/aa..///../ /b/c
+/b/c/aa..///./a /b/c/aa../a
+/b/c/aa..///./. /b/c/aa..
+/b/c/aa..///.// /b/c/aa..
+/b/c/aa..////aa /b/c/aa../aa
+/b/c/aa..////a. /b/c/aa../a.
+/b/c/aa..////a/ /b/c/aa../a
+/b/c/aa..////.a /b/c/aa../.a
+/b/c/aa..////.. /b/c
+/b/c/aa..////./ /b/c/aa..
+/b/c/aa../////a /b/c/aa../a
+/b/c/aa../////. /b/c/aa..
+/b/c/aa..////// /b/c/aa..
+/b/c/aa./aaaaaa /b/c/aa./aaaaaa
+/b/c/aa./aaaaa. /b/c/aa./aaaaa.
+/b/c/aa./aaaaa/ /b/c/aa./aaaaa
+/b/c/aa./aaaa.a /b/c/aa./aaaa.a
+/b/c/aa./aaaa.. /b/c/aa./aaaa..
+/b/c/aa./aaaa./ /b/c/aa./aaaa.
+/b/c/aa./aaaa/a /b/c/aa./aaaa/a
+/b/c/aa./aaaa/. /b/c/aa./aaaa
+/b/c/aa./aaaa// /b/c/aa./aaaa
+/b/c/aa./aaa.aa /b/c/aa./aaa.aa
+/b/c/aa./aaa.a. /b/c/aa./aaa.a.
+/b/c/aa./aaa.a/ /b/c/aa./aaa.a
+/b/c/aa./aaa..a /b/c/aa./aaa..a
+/b/c/aa./aaa... /b/c/aa./aaa...
+/b/c/aa./aaa../ /b/c/aa./aaa..
+/b/c/aa./aaa./a /b/c/aa./aaa./a
+/b/c/aa./aaa./. /b/c/aa./aaa.
+/b/c/aa./aaa.// /b/c/aa./aaa.
+/b/c/aa./aaa/aa /b/c/aa./aaa/aa
+/b/c/aa./aaa/a. /b/c/aa./aaa/a.
+/b/c/aa./aaa/a/ /b/c/aa./aaa/a
+/b/c/aa./aaa/.a /b/c/aa./aaa/.a
+/b/c/aa./aaa/.. /b/c/aa.
+/b/c/aa./aaa/./ /b/c/aa./aaa
+/b/c/aa./aaa//a /b/c/aa./aaa/a
+/b/c/aa./aaa//. /b/c/aa./aaa
+/b/c/aa./aaa/// /b/c/aa./aaa
+/b/c/aa./aa.aaa /b/c/aa./aa.aaa
+/b/c/aa./aa.aa. /b/c/aa./aa.aa.
+/b/c/aa./aa.aa/ /b/c/aa./aa.aa
+/b/c/aa./aa.a.a /b/c/aa./aa.a.a
+/b/c/aa./aa.a.. /b/c/aa./aa.a..
+/b/c/aa./aa.a./ /b/c/aa./aa.a.
+/b/c/aa./aa.a/a /b/c/aa./aa.a/a
+/b/c/aa./aa.a/. /b/c/aa./aa.a
+/b/c/aa./aa.a// /b/c/aa./aa.a
+/b/c/aa./aa..aa /b/c/aa./aa..aa
+/b/c/aa./aa..a. /b/c/aa./aa..a.
+/b/c/aa./aa..a/ /b/c/aa./aa..a
+/b/c/aa./aa...a /b/c/aa./aa...a
+/b/c/aa./aa.... /b/c/aa./aa....
+/b/c/aa./aa.../ /b/c/aa./aa...
+/b/c/aa./aa../a /b/c/aa./aa../a
+/b/c/aa./aa../. /b/c/aa./aa..
+/b/c/aa./aa..// /b/c/aa./aa..
+/b/c/aa./aa./aa /b/c/aa./aa./aa
+/b/c/aa./aa./a. /b/c/aa./aa./a.
+/b/c/aa./aa./a/ /b/c/aa./aa./a
+/b/c/aa./aa./.a /b/c/aa./aa./.a
+/b/c/aa./aa./.. /b/c/aa.
+/b/c/aa./aa././ /b/c/aa./aa.
+/b/c/aa./aa.//a /b/c/aa./aa./a
+/b/c/aa./aa.//. /b/c/aa./aa.
+/b/c/aa./aa./// /b/c/aa./aa.
+/b/c/aa./aa/aaa /b/c/aa./aa/aaa
+/b/c/aa./aa/aa. /b/c/aa./aa/aa.
+/b/c/aa./aa/aa/ /b/c/aa./aa/aa
+/b/c/aa./aa/a.a /b/c/aa./aa/a.a
+/b/c/aa./aa/a.. /b/c/aa./aa/a..
+/b/c/aa./aa/a./ /b/c/aa./aa/a.
+/b/c/aa./aa/a/a /b/c/aa./aa/a/a
+/b/c/aa./aa/a/. /b/c/aa./aa/a
+/b/c/aa./aa/a// /b/c/aa./aa/a
+/b/c/aa./aa/.aa /b/c/aa./aa/.aa
+/b/c/aa./aa/.a. /b/c/aa./aa/.a.
+/b/c/aa./aa/.a/ /b/c/aa./aa/.a
+/b/c/aa./aa/..a /b/c/aa./aa/..a
+/b/c/aa./aa/... /b/c/aa./aa/...
+/b/c/aa./aa/../ /b/c/aa.
+/b/c/aa./aa/./a /b/c/aa./aa/a
+/b/c/aa./aa/./. /b/c/aa./aa
+/b/c/aa./aa/.// /b/c/aa./aa
+/b/c/aa./aa//aa /b/c/aa./aa/aa
+/b/c/aa./aa//a. /b/c/aa./aa/a.
+/b/c/aa./aa//a/ /b/c/aa./aa/a
+/b/c/aa./aa//.a /b/c/aa./aa/.a
+/b/c/aa./aa//.. /b/c/aa.
+/b/c/aa./aa//./ /b/c/aa./aa
+/b/c/aa./aa///a /b/c/aa./aa/a
+/b/c/aa./aa///. /b/c/aa./aa
+/b/c/aa./aa//// /b/c/aa./aa
+/b/c/aa./a.aaaa /b/c/aa./a.aaaa
+/b/c/aa./a.aaa. /b/c/aa./a.aaa.
+/b/c/aa./a.aaa/ /b/c/aa./a.aaa
+/b/c/aa./a.aa.a /b/c/aa./a.aa.a
+/b/c/aa./a.aa.. /b/c/aa./a.aa..
+/b/c/aa./a.aa./ /b/c/aa./a.aa.
+/b/c/aa./a.aa/a /b/c/aa./a.aa/a
+/b/c/aa./a.aa/. /b/c/aa./a.aa
+/b/c/aa./a.aa// /b/c/aa./a.aa
+/b/c/aa./a.a.aa /b/c/aa./a.a.aa
+/b/c/aa./a.a.a. /b/c/aa./a.a.a.
+/b/c/aa./a.a.a/ /b/c/aa./a.a.a
+/b/c/aa./a.a..a /b/c/aa./a.a..a
+/b/c/aa./a.a... /b/c/aa./a.a...
+/b/c/aa./a.a../ /b/c/aa./a.a..
+/b/c/aa./a.a./a /b/c/aa./a.a./a
+/b/c/aa./a.a./. /b/c/aa./a.a.
+/b/c/aa./a.a.// /b/c/aa./a.a.
+/b/c/aa./a.a/aa /b/c/aa./a.a/aa
+/b/c/aa./a.a/a. /b/c/aa./a.a/a.
+/b/c/aa./a.a/a/ /b/c/aa./a.a/a
+/b/c/aa./a.a/.a /b/c/aa./a.a/.a
+/b/c/aa./a.a/.. /b/c/aa.
+/b/c/aa./a.a/./ /b/c/aa./a.a
+/b/c/aa./a.a//a /b/c/aa./a.a/a
+/b/c/aa./a.a//. /b/c/aa./a.a
+/b/c/aa./a.a/// /b/c/aa./a.a
+/b/c/aa./a..aaa /b/c/aa./a..aaa
+/b/c/aa./a..aa. /b/c/aa./a..aa.
+/b/c/aa./a..aa/ /b/c/aa./a..aa
+/b/c/aa./a..a.a /b/c/aa./a..a.a
+/b/c/aa./a..a.. /b/c/aa./a..a..
+/b/c/aa./a..a./ /b/c/aa./a..a.
+/b/c/aa./a..a/a /b/c/aa./a..a/a
+/b/c/aa./a..a/. /b/c/aa./a..a
+/b/c/aa./a..a// /b/c/aa./a..a
+/b/c/aa./a...aa /b/c/aa./a...aa
+/b/c/aa./a...a. /b/c/aa./a...a.
+/b/c/aa./a...a/ /b/c/aa./a...a
+/b/c/aa./a....a /b/c/aa./a....a
+/b/c/aa./a..... /b/c/aa./a.....
+/b/c/aa./a..../ /b/c/aa./a....
+/b/c/aa./a.../a /b/c/aa./a.../a
+/b/c/aa./a.../. /b/c/aa./a...
+/b/c/aa./a...// /b/c/aa./a...
+/b/c/aa./a../aa /b/c/aa./a../aa
+/b/c/aa./a../a. /b/c/aa./a../a.
+/b/c/aa./a../a/ /b/c/aa./a../a
+/b/c/aa./a../.a /b/c/aa./a../.a
+/b/c/aa./a../.. /b/c/aa.
+/b/c/aa./a.././ /b/c/aa./a..
+/b/c/aa./a..//a /b/c/aa./a../a
+/b/c/aa./a..//. /b/c/aa./a..
+/b/c/aa./a../// /b/c/aa./a..
+/b/c/aa./a./aaa /b/c/aa./a./aaa
+/b/c/aa./a./aa. /b/c/aa./a./aa.
+/b/c/aa./a./aa/ /b/c/aa./a./aa
+/b/c/aa./a./a.a /b/c/aa./a./a.a
+/b/c/aa./a./a.. /b/c/aa./a./a..
+/b/c/aa./a./a./ /b/c/aa./a./a.
+/b/c/aa./a./a/a /b/c/aa./a./a/a
+/b/c/aa./a./a/. /b/c/aa./a./a
+/b/c/aa./a./a// /b/c/aa./a./a
+/b/c/aa./a./.aa /b/c/aa./a./.aa
+/b/c/aa./a./.a. /b/c/aa./a./.a.
+/b/c/aa./a./.a/ /b/c/aa./a./.a
+/b/c/aa./a./..a /b/c/aa./a./..a
+/b/c/aa./a./... /b/c/aa./a./...
+/b/c/aa./a./../ /b/c/aa.
+/b/c/aa./a././a /b/c/aa./a./a
+/b/c/aa./a././. /b/c/aa./a.
+/b/c/aa./a./.// /b/c/aa./a.
+/b/c/aa./a.//aa /b/c/aa./a./aa
+/b/c/aa./a.//a. /b/c/aa./a./a.
+/b/c/aa./a.//a/ /b/c/aa./a./a
+/b/c/aa./a.//.a /b/c/aa./a./.a
+/b/c/aa./a.//.. /b/c/aa.
+/b/c/aa./a.//./ /b/c/aa./a.
+/b/c/aa./a.///a /b/c/aa./a./a
+/b/c/aa./a.///. /b/c/aa./a.
+/b/c/aa./a.//// /b/c/aa./a.
+/b/c/aa./a/aaaa /b/c/aa./a/aaaa
+/b/c/aa./a/aaa. /b/c/aa./a/aaa.
+/b/c/aa./a/aaa/ /b/c/aa./a/aaa
+/b/c/aa./a/aa.a /b/c/aa./a/aa.a
+/b/c/aa./a/aa.. /b/c/aa./a/aa..
+/b/c/aa./a/aa./ /b/c/aa./a/aa.
+/b/c/aa./a/aa/a /b/c/aa./a/aa/a
+/b/c/aa./a/aa/. /b/c/aa./a/aa
+/b/c/aa./a/aa// /b/c/aa./a/aa
+/b/c/aa./a/a.aa /b/c/aa./a/a.aa
+/b/c/aa./a/a.a. /b/c/aa./a/a.a.
+/b/c/aa./a/a.a/ /b/c/aa./a/a.a
+/b/c/aa./a/a..a /b/c/aa./a/a..a
+/b/c/aa./a/a... /b/c/aa./a/a...
+/b/c/aa./a/a../ /b/c/aa./a/a..
+/b/c/aa./a/a./a /b/c/aa./a/a./a
+/b/c/aa./a/a./. /b/c/aa./a/a.
+/b/c/aa./a/a.// /b/c/aa./a/a.
+/b/c/aa./a/a/aa /b/c/aa./a/a/aa
+/b/c/aa./a/a/a. /b/c/aa./a/a/a.
+/b/c/aa./a/a/a/ /b/c/aa./a/a/a
+/b/c/aa./a/a/.a /b/c/aa./a/a/.a
+/b/c/aa./a/a/.. /b/c/aa./a
+/b/c/aa./a/a/./ /b/c/aa./a/a
+/b/c/aa./a/a//a /b/c/aa./a/a/a
+/b/c/aa./a/a//. /b/c/aa./a/a
+/b/c/aa./a/a/// /b/c/aa./a/a
+/b/c/aa./a/.aaa /b/c/aa./a/.aaa
+/b/c/aa./a/.aa. /b/c/aa./a/.aa.
+/b/c/aa./a/.aa/ /b/c/aa./a/.aa
+/b/c/aa./a/.a.a /b/c/aa./a/.a.a
+/b/c/aa./a/.a.. /b/c/aa./a/.a..
+/b/c/aa./a/.a./ /b/c/aa./a/.a.
+/b/c/aa./a/.a/a /b/c/aa./a/.a/a
+/b/c/aa./a/.a/. /b/c/aa./a/.a
+/b/c/aa./a/.a// /b/c/aa./a/.a
+/b/c/aa./a/..aa /b/c/aa./a/..aa
+/b/c/aa./a/..a. /b/c/aa./a/..a.
+/b/c/aa./a/..a/ /b/c/aa./a/..a
+/b/c/aa./a/...a /b/c/aa./a/...a
+/b/c/aa./a/.... /b/c/aa./a/....
+/b/c/aa./a/.../ /b/c/aa./a/...
+/b/c/aa./a/../a /b/c/aa./a
+/b/c/aa./a/../. /b/c/aa.
+/b/c/aa./a/..// /b/c/aa.
+/b/c/aa./a/./aa /b/c/aa./a/aa
+/b/c/aa./a/./a. /b/c/aa./a/a.
+/b/c/aa./a/./a/ /b/c/aa./a/a
+/b/c/aa./a/./.a /b/c/aa./a/.a
+/b/c/aa./a/./.. /b/c/aa.
+/b/c/aa./a/././ /b/c/aa./a
+/b/c/aa./a/.//a /b/c/aa./a/a
+/b/c/aa./a/.//. /b/c/aa./a
+/b/c/aa./a/./// /b/c/aa./a
+/b/c/aa./a//aaa /b/c/aa./a/aaa
+/b/c/aa./a//aa. /b/c/aa./a/aa.
+/b/c/aa./a//aa/ /b/c/aa./a/aa
+/b/c/aa./a//a.a /b/c/aa./a/a.a
+/b/c/aa./a//a.. /b/c/aa./a/a..
+/b/c/aa./a//a./ /b/c/aa./a/a.
+/b/c/aa./a//a/a /b/c/aa./a/a/a
+/b/c/aa./a//a/. /b/c/aa./a/a
+/b/c/aa./a//a// /b/c/aa./a/a
+/b/c/aa./a//.aa /b/c/aa./a/.aa
+/b/c/aa./a//.a. /b/c/aa./a/.a.
+/b/c/aa./a//.a/ /b/c/aa./a/.a
+/b/c/aa./a//..a /b/c/aa./a/..a
+/b/c/aa./a//... /b/c/aa./a/...
+/b/c/aa./a//../ /b/c/aa.
+/b/c/aa./a//./a /b/c/aa./a/a
+/b/c/aa./a//./. /b/c/aa./a
+/b/c/aa./a//.// /b/c/aa./a
+/b/c/aa./a///aa /b/c/aa./a/aa
+/b/c/aa./a///a. /b/c/aa./a/a.
+/b/c/aa./a///a/ /b/c/aa./a/a
+/b/c/aa./a///.a /b/c/aa./a/.a
+/b/c/aa./a///.. /b/c/aa.
+/b/c/aa./a///./ /b/c/aa./a
+/b/c/aa./a////a /b/c/aa./a/a
+/b/c/aa./a////. /b/c/aa./a
+/b/c/aa./a///// /b/c/aa./a
+/b/c/aa./.aaaaa /b/c/aa./.aaaaa
+/b/c/aa./.aaaa. /b/c/aa./.aaaa.
+/b/c/aa./.aaaa/ /b/c/aa./.aaaa
+/b/c/aa./.aaa.a /b/c/aa./.aaa.a
+/b/c/aa./.aaa.. /b/c/aa./.aaa..
+/b/c/aa./.aaa./ /b/c/aa./.aaa.
+/b/c/aa./.aaa/a /b/c/aa./.aaa/a
+/b/c/aa./.aaa/. /b/c/aa./.aaa
+/b/c/aa./.aaa// /b/c/aa./.aaa
+/b/c/aa./.aa.aa /b/c/aa./.aa.aa
+/b/c/aa./.aa.a. /b/c/aa./.aa.a.
+/b/c/aa./.aa.a/ /b/c/aa./.aa.a
+/b/c/aa./.aa..a /b/c/aa./.aa..a
+/b/c/aa./.aa... /b/c/aa./.aa...
+/b/c/aa./.aa../ /b/c/aa./.aa..
+/b/c/aa./.aa./a /b/c/aa./.aa./a
+/b/c/aa./.aa./. /b/c/aa./.aa.
+/b/c/aa./.aa.// /b/c/aa./.aa.
+/b/c/aa./.aa/aa /b/c/aa./.aa/aa
+/b/c/aa./.aa/a. /b/c/aa./.aa/a.
+/b/c/aa./.aa/a/ /b/c/aa./.aa/a
+/b/c/aa./.aa/.a /b/c/aa./.aa/.a
+/b/c/aa./.aa/.. /b/c/aa.
+/b/c/aa./.aa/./ /b/c/aa./.aa
+/b/c/aa./.aa//a /b/c/aa./.aa/a
+/b/c/aa./.aa//. /b/c/aa./.aa
+/b/c/aa./.aa/// /b/c/aa./.aa
+/b/c/aa./.a.aaa /b/c/aa./.a.aaa
+/b/c/aa./.a.aa. /b/c/aa./.a.aa.
+/b/c/aa./.a.aa/ /b/c/aa./.a.aa
+/b/c/aa./.a.a.a /b/c/aa./.a.a.a
+/b/c/aa./.a.a.. /b/c/aa./.a.a..
+/b/c/aa./.a.a./ /b/c/aa./.a.a.
+/b/c/aa./.a.a/a /b/c/aa./.a.a/a
+/b/c/aa./.a.a/. /b/c/aa./.a.a
+/b/c/aa./.a.a// /b/c/aa./.a.a
+/b/c/aa./.a..aa /b/c/aa./.a..aa
+/b/c/aa./.a..a. /b/c/aa./.a..a.
+/b/c/aa./.a..a/ /b/c/aa./.a..a
+/b/c/aa./.a...a /b/c/aa./.a...a
+/b/c/aa./.a.... /b/c/aa./.a....
+/b/c/aa./.a.../ /b/c/aa./.a...
+/b/c/aa./.a../a /b/c/aa./.a../a
+/b/c/aa./.a../. /b/c/aa./.a..
+/b/c/aa./.a..// /b/c/aa./.a..
+/b/c/aa./.a./aa /b/c/aa./.a./aa
+/b/c/aa./.a./a. /b/c/aa./.a./a.
+/b/c/aa./.a./a/ /b/c/aa./.a./a
+/b/c/aa./.a./.a /b/c/aa./.a./.a
+/b/c/aa./.a./.. /b/c/aa.
+/b/c/aa./.a././ /b/c/aa./.a.
+/b/c/aa./.a.//a /b/c/aa./.a./a
+/b/c/aa./.a.//. /b/c/aa./.a.
+/b/c/aa./.a./// /b/c/aa./.a.
+/b/c/aa./.a/aaa /b/c/aa./.a/aaa
+/b/c/aa./.a/aa. /b/c/aa./.a/aa.
+/b/c/aa./.a/aa/ /b/c/aa./.a/aa
+/b/c/aa./.a/a.a /b/c/aa./.a/a.a
+/b/c/aa./.a/a.. /b/c/aa./.a/a..
+/b/c/aa./.a/a./ /b/c/aa./.a/a.
+/b/c/aa./.a/a/a /b/c/aa./.a/a/a
+/b/c/aa./.a/a/. /b/c/aa./.a/a
+/b/c/aa./.a/a// /b/c/aa./.a/a
+/b/c/aa./.a/.aa /b/c/aa./.a/.aa
+/b/c/aa./.a/.a. /b/c/aa./.a/.a.
+/b/c/aa./.a/.a/ /b/c/aa./.a/.a
+/b/c/aa./.a/..a /b/c/aa./.a/..a
+/b/c/aa./.a/... /b/c/aa./.a/...
+/b/c/aa./.a/../ /b/c/aa.
+/b/c/aa./.a/./a /b/c/aa./.a/a
+/b/c/aa./.a/./. /b/c/aa./.a
+/b/c/aa./.a/.// /b/c/aa./.a
+/b/c/aa./.a//aa /b/c/aa./.a/aa
+/b/c/aa./.a//a. /b/c/aa./.a/a.
+/b/c/aa./.a//a/ /b/c/aa./.a/a
+/b/c/aa./.a//.a /b/c/aa./.a/.a
+/b/c/aa./.a//.. /b/c/aa.
+/b/c/aa./.a//./ /b/c/aa./.a
+/b/c/aa./.a///a /b/c/aa./.a/a
+/b/c/aa./.a///. /b/c/aa./.a
+/b/c/aa./.a//// /b/c/aa./.a
+/b/c/aa./..aaaa /b/c/aa./..aaaa
+/b/c/aa./..aaa. /b/c/aa./..aaa.
+/b/c/aa./..aaa/ /b/c/aa./..aaa
+/b/c/aa./..aa.a /b/c/aa./..aa.a
+/b/c/aa./..aa.. /b/c/aa./..aa..
+/b/c/aa./..aa./ /b/c/aa./..aa.
+/b/c/aa./..aa/a /b/c/aa./..aa/a
+/b/c/aa./..aa/. /b/c/aa./..aa
+/b/c/aa./..aa// /b/c/aa./..aa
+/b/c/aa./..a.aa /b/c/aa./..a.aa
+/b/c/aa./..a.a. /b/c/aa./..a.a.
+/b/c/aa./..a.a/ /b/c/aa./..a.a
+/b/c/aa./..a..a /b/c/aa./..a..a
+/b/c/aa./..a... /b/c/aa./..a...
+/b/c/aa./..a../ /b/c/aa./..a..
+/b/c/aa./..a./a /b/c/aa./..a./a
+/b/c/aa./..a./. /b/c/aa./..a.
+/b/c/aa./..a.// /b/c/aa./..a.
+/b/c/aa./..a/aa /b/c/aa./..a/aa
+/b/c/aa./..a/a. /b/c/aa./..a/a.
+/b/c/aa./..a/a/ /b/c/aa./..a/a
+/b/c/aa./..a/.a /b/c/aa./..a/.a
+/b/c/aa./..a/.. /b/c/aa.
+/b/c/aa./..a/./ /b/c/aa./..a
+/b/c/aa./..a//a /b/c/aa./..a/a
+/b/c/aa./..a//. /b/c/aa./..a
+/b/c/aa./..a/// /b/c/aa./..a
+/b/c/aa./...aaa /b/c/aa./...aaa
+/b/c/aa./...aa. /b/c/aa./...aa.
+/b/c/aa./...aa/ /b/c/aa./...aa
+/b/c/aa./...a.a /b/c/aa./...a.a
+/b/c/aa./...a.. /b/c/aa./...a..
+/b/c/aa./...a./ /b/c/aa./...a.
+/b/c/aa./...a/a /b/c/aa./...a/a
+/b/c/aa./...a/. /b/c/aa./...a
+/b/c/aa./...a// /b/c/aa./...a
+/b/c/aa./....aa /b/c/aa./....aa
+/b/c/aa./....a. /b/c/aa./....a.
+/b/c/aa./....a/ /b/c/aa./....a
+/b/c/aa./.....a /b/c/aa./.....a
+/b/c/aa./...... /b/c/aa./......
+/b/c/aa./...../ /b/c/aa./.....
+/b/c/aa./..../a /b/c/aa./..../a
+/b/c/aa./..../. /b/c/aa./....
+/b/c/aa./....// /b/c/aa./....
+/b/c/aa./.../aa /b/c/aa./.../aa
+/b/c/aa./.../a. /b/c/aa./.../a.
+/b/c/aa./.../a/ /b/c/aa./.../a
+/b/c/aa./.../.a /b/c/aa./.../.a
+/b/c/aa./.../.. /b/c/aa.
+/b/c/aa./..././ /b/c/aa./...
+/b/c/aa./...//a /b/c/aa./.../a
+/b/c/aa./...//. /b/c/aa./...
+/b/c/aa./.../// /b/c/aa./...
+/b/c/aa./../aaa /b/c/aaa
+/b/c/aa./../aa. /b/c/aa.
+/b/c/aa./../aa/ /b/c/aa
+/b/c/aa./../a.a /b/c/a.a
+/b/c/aa./../a.. /b/c/a..
+/b/c/aa./../a./ /b/c/a.
+/b/c/aa./../a/a /b/c/a/a
+/b/c/aa./../a/. /b/c/a
+/b/c/aa./../a// /b/c/a
+/b/c/aa./../.aa /b/c/.aa
+/b/c/aa./../.a. /b/c/.a.
+/b/c/aa./../.a/ /b/c/.a
+/b/c/aa./../..a /b/c/..a
+/b/c/aa./../... /b/c/...
+/b/c/aa./../../ /b
+/b/c/aa./.././a /b/c/a
+/b/c/aa./.././. /b/c
+/b/c/aa./../.// /b/c
+/b/c/aa./..//aa /b/c/aa
+/b/c/aa./..//a. /b/c/a.
+/b/c/aa./..//a/ /b/c/a
+/b/c/aa./..//.a /b/c/.a
+/b/c/aa./..//.. /b
+/b/c/aa./..//./ /b/c
+/b/c/aa./..///a /b/c/a
+/b/c/aa./..///. /b/c
+/b/c/aa./..//// /b/c
+/b/c/aa././aaaa /b/c/aa./aaaa
+/b/c/aa././aaa. /b/c/aa./aaa.
+/b/c/aa././aaa/ /b/c/aa./aaa
+/b/c/aa././aa.a /b/c/aa./aa.a
+/b/c/aa././aa.. /b/c/aa./aa..
+/b/c/aa././aa./ /b/c/aa./aa.
+/b/c/aa././aa/a /b/c/aa./aa/a
+/b/c/aa././aa/. /b/c/aa./aa
+/b/c/aa././aa// /b/c/aa./aa
+/b/c/aa././a.aa /b/c/aa./a.aa
+/b/c/aa././a.a. /b/c/aa./a.a.
+/b/c/aa././a.a/ /b/c/aa./a.a
+/b/c/aa././a..a /b/c/aa./a..a
+/b/c/aa././a... /b/c/aa./a...
+/b/c/aa././a../ /b/c/aa./a..
+/b/c/aa././a./a /b/c/aa./a./a
+/b/c/aa././a./. /b/c/aa./a.
+/b/c/aa././a.// /b/c/aa./a.
+/b/c/aa././a/aa /b/c/aa./a/aa
+/b/c/aa././a/a. /b/c/aa./a/a.
+/b/c/aa././a/a/ /b/c/aa./a/a
+/b/c/aa././a/.a /b/c/aa./a/.a
+/b/c/aa././a/.. /b/c/aa.
+/b/c/aa././a/./ /b/c/aa./a
+/b/c/aa././a//a /b/c/aa./a/a
+/b/c/aa././a//. /b/c/aa./a
+/b/c/aa././a/// /b/c/aa./a
+/b/c/aa././.aaa /b/c/aa./.aaa
+/b/c/aa././.aa. /b/c/aa./.aa.
+/b/c/aa././.aa/ /b/c/aa./.aa
+/b/c/aa././.a.a /b/c/aa./.a.a
+/b/c/aa././.a.. /b/c/aa./.a..
+/b/c/aa././.a./ /b/c/aa./.a.
+/b/c/aa././.a/a /b/c/aa./.a/a
+/b/c/aa././.a/. /b/c/aa./.a
+/b/c/aa././.a// /b/c/aa./.a
+/b/c/aa././..aa /b/c/aa./..aa
+/b/c/aa././..a. /b/c/aa./..a.
+/b/c/aa././..a/ /b/c/aa./..a
+/b/c/aa././...a /b/c/aa./...a
+/b/c/aa././.... /b/c/aa./....
+/b/c/aa././.../ /b/c/aa./...
+/b/c/aa././../a /b/c/a
+/b/c/aa././../. /b/c
+/b/c/aa././..// /b/c
+/b/c/aa./././aa /b/c/aa./aa
+/b/c/aa./././a. /b/c/aa./a.
+/b/c/aa./././a/ /b/c/aa./a
+/b/c/aa./././.a /b/c/aa./.a
+/b/c/aa./././.. /b/c
+/b/c/aa././././ /b/c/aa.
+/b/c/aa./././/a /b/c/aa./a
+/b/c/aa./././/. /b/c/aa.
+/b/c/aa./././// /b/c/aa.
+/b/c/aa././/aaa /b/c/aa./aaa
+/b/c/aa././/aa. /b/c/aa./aa.
+/b/c/aa././/aa/ /b/c/aa./aa
+/b/c/aa././/a.a /b/c/aa./a.a
+/b/c/aa././/a.. /b/c/aa./a..
+/b/c/aa././/a./ /b/c/aa./a.
+/b/c/aa././/a/a /b/c/aa./a/a
+/b/c/aa././/a/. /b/c/aa./a
+/b/c/aa././/a// /b/c/aa./a
+/b/c/aa././/.aa /b/c/aa./.aa
+/b/c/aa././/.a. /b/c/aa./.a.
+/b/c/aa././/.a/ /b/c/aa./.a
+/b/c/aa././/..a /b/c/aa./..a
+/b/c/aa././/... /b/c/aa./...
+/b/c/aa././/../ /b/c
+/b/c/aa././/./a /b/c/aa./a
+/b/c/aa././/./. /b/c/aa.
+/b/c/aa././/.// /b/c/aa.
+/b/c/aa././//aa /b/c/aa./aa
+/b/c/aa././//a. /b/c/aa./a.
+/b/c/aa././//a/ /b/c/aa./a
+/b/c/aa././//.a /b/c/aa./.a
+/b/c/aa././//.. /b/c
+/b/c/aa././//./ /b/c/aa.
+/b/c/aa././///a /b/c/aa./a
+/b/c/aa././///. /b/c/aa.
+/b/c/aa././//// /b/c/aa.
+/b/c/aa.//aaaaa /b/c/aa./aaaaa
+/b/c/aa.//aaaa. /b/c/aa./aaaa.
+/b/c/aa.//aaaa/ /b/c/aa./aaaa
+/b/c/aa.//aaa.a /b/c/aa./aaa.a
+/b/c/aa.//aaa.. /b/c/aa./aaa..
+/b/c/aa.//aaa./ /b/c/aa./aaa.
+/b/c/aa.//aaa/a /b/c/aa./aaa/a
+/b/c/aa.//aaa/. /b/c/aa./aaa
+/b/c/aa.//aaa// /b/c/aa./aaa
+/b/c/aa.//aa.aa /b/c/aa./aa.aa
+/b/c/aa.//aa.a. /b/c/aa./aa.a.
+/b/c/aa.//aa.a/ /b/c/aa./aa.a
+/b/c/aa.//aa..a /b/c/aa./aa..a
+/b/c/aa.//aa... /b/c/aa./aa...
+/b/c/aa.//aa../ /b/c/aa./aa..
+/b/c/aa.//aa./a /b/c/aa./aa./a
+/b/c/aa.//aa./. /b/c/aa./aa.
+/b/c/aa.//aa.// /b/c/aa./aa.
+/b/c/aa.//aa/aa /b/c/aa./aa/aa
+/b/c/aa.//aa/a. /b/c/aa./aa/a.
+/b/c/aa.//aa/a/ /b/c/aa./aa/a
+/b/c/aa.//aa/.a /b/c/aa./aa/.a
+/b/c/aa.//aa/.. /b/c/aa.
+/b/c/aa.//aa/./ /b/c/aa./aa
+/b/c/aa.//aa//a /b/c/aa./aa/a
+/b/c/aa.//aa//. /b/c/aa./aa
+/b/c/aa.//aa/// /b/c/aa./aa
+/b/c/aa.//a.aaa /b/c/aa./a.aaa
+/b/c/aa.//a.aa. /b/c/aa./a.aa.
+/b/c/aa.//a.aa/ /b/c/aa./a.aa
+/b/c/aa.//a.a.a /b/c/aa./a.a.a
+/b/c/aa.//a.a.. /b/c/aa./a.a..
+/b/c/aa.//a.a./ /b/c/aa./a.a.
+/b/c/aa.//a.a/a /b/c/aa./a.a/a
+/b/c/aa.//a.a/. /b/c/aa./a.a
+/b/c/aa.//a.a// /b/c/aa./a.a
+/b/c/aa.//a..aa /b/c/aa./a..aa
+/b/c/aa.//a..a. /b/c/aa./a..a.
+/b/c/aa.//a..a/ /b/c/aa./a..a
+/b/c/aa.//a...a /b/c/aa./a...a
+/b/c/aa.//a.... /b/c/aa./a....
+/b/c/aa.//a.../ /b/c/aa./a...
+/b/c/aa.//a../a /b/c/aa./a../a
+/b/c/aa.//a../. /b/c/aa./a..
+/b/c/aa.//a..// /b/c/aa./a..
+/b/c/aa.//a./aa /b/c/aa./a./aa
+/b/c/aa.//a./a. /b/c/aa./a./a.
+/b/c/aa.//a./a/ /b/c/aa./a./a
+/b/c/aa.//a./.a /b/c/aa./a./.a
+/b/c/aa.//a./.. /b/c/aa.
+/b/c/aa.//a././ /b/c/aa./a.
+/b/c/aa.//a.//a /b/c/aa./a./a
+/b/c/aa.//a.//. /b/c/aa./a.
+/b/c/aa.//a./// /b/c/aa./a.
+/b/c/aa.//a/aaa /b/c/aa./a/aaa
+/b/c/aa.//a/aa. /b/c/aa./a/aa.
+/b/c/aa.//a/aa/ /b/c/aa./a/aa
+/b/c/aa.//a/a.a /b/c/aa./a/a.a
+/b/c/aa.//a/a.. /b/c/aa./a/a..
+/b/c/aa.//a/a./ /b/c/aa./a/a.
+/b/c/aa.//a/a/a /b/c/aa./a/a/a
+/b/c/aa.//a/a/. /b/c/aa./a/a
+/b/c/aa.//a/a// /b/c/aa./a/a
+/b/c/aa.//a/.aa /b/c/aa./a/.aa
+/b/c/aa.//a/.a. /b/c/aa./a/.a.
+/b/c/aa.//a/.a/ /b/c/aa./a/.a
+/b/c/aa.//a/..a /b/c/aa./a/..a
+/b/c/aa.//a/... /b/c/aa./a/...
+/b/c/aa.//a/../ /b/c/aa.
+/b/c/aa.//a/./a /b/c/aa./a/a
+/b/c/aa.//a/./. /b/c/aa./a
+/b/c/aa.//a/.// /b/c/aa./a
+/b/c/aa.//a//aa /b/c/aa./a/aa
+/b/c/aa.//a//a. /b/c/aa./a/a.
+/b/c/aa.//a//a/ /b/c/aa./a/a
+/b/c/aa.//a//.a /b/c/aa./a/.a
+/b/c/aa.//a//.. /b/c/aa.
+/b/c/aa.//a//./ /b/c/aa./a
+/b/c/aa.//a///a /b/c/aa./a/a
+/b/c/aa.//a///. /b/c/aa./a
+/b/c/aa.//a//// /b/c/aa./a
+/b/c/aa.//.aaaa /b/c/aa./.aaaa
+/b/c/aa.//.aaa. /b/c/aa./.aaa.
+/b/c/aa.//.aaa/ /b/c/aa./.aaa
+/b/c/aa.//.aa.a /b/c/aa./.aa.a
+/b/c/aa.//.aa.. /b/c/aa./.aa..
+/b/c/aa.//.aa./ /b/c/aa./.aa.
+/b/c/aa.//.aa/a /b/c/aa./.aa/a
+/b/c/aa.//.aa/. /b/c/aa./.aa
+/b/c/aa.//.aa// /b/c/aa./.aa
+/b/c/aa.//.a.aa /b/c/aa./.a.aa
+/b/c/aa.//.a.a. /b/c/aa./.a.a.
+/b/c/aa.//.a.a/ /b/c/aa./.a.a
+/b/c/aa.//.a..a /b/c/aa./.a..a
+/b/c/aa.//.a... /b/c/aa./.a...
+/b/c/aa.//.a../ /b/c/aa./.a..
+/b/c/aa.//.a./a /b/c/aa./.a./a
+/b/c/aa.//.a./. /b/c/aa./.a.
+/b/c/aa.//.a.// /b/c/aa./.a.
+/b/c/aa.//.a/aa /b/c/aa./.a/aa
+/b/c/aa.//.a/a. /b/c/aa./.a/a.
+/b/c/aa.//.a/a/ /b/c/aa./.a/a
+/b/c/aa.//.a/.a /b/c/aa./.a/.a
+/b/c/aa.//.a/.. /b/c/aa.
+/b/c/aa.//.a/./ /b/c/aa./.a
+/b/c/aa.//.a//a /b/c/aa./.a/a
+/b/c/aa.//.a//. /b/c/aa./.a
+/b/c/aa.//.a/// /b/c/aa./.a
+/b/c/aa.//..aaa /b/c/aa./..aaa
+/b/c/aa.//..aa. /b/c/aa./..aa.
+/b/c/aa.//..aa/ /b/c/aa./..aa
+/b/c/aa.//..a.a /b/c/aa./..a.a
+/b/c/aa.//..a.. /b/c/aa./..a..
+/b/c/aa.//..a./ /b/c/aa./..a.
+/b/c/aa.//..a/a /b/c/aa./..a/a
+/b/c/aa.//..a/. /b/c/aa./..a
+/b/c/aa.//..a// /b/c/aa./..a
+/b/c/aa.//...aa /b/c/aa./...aa
+/b/c/aa.//...a. /b/c/aa./...a.
+/b/c/aa.//...a/ /b/c/aa./...a
+/b/c/aa.//....a /b/c/aa./....a
+/b/c/aa.//..... /b/c/aa./.....
+/b/c/aa.//..../ /b/c/aa./....
+/b/c/aa.//.../a /b/c/aa./.../a
+/b/c/aa.//.../. /b/c/aa./...
+/b/c/aa.//...// /b/c/aa./...
+/b/c/aa.//../aa /b/c/aa
+/b/c/aa.//../a. /b/c/a.
+/b/c/aa.//../a/ /b/c/a
+/b/c/aa.//../.a /b/c/.a
+/b/c/aa.//../.. /b
+/b/c/aa.//.././ /b/c
+/b/c/aa.//..//a /b/c/a
+/b/c/aa.//..//. /b/c
+/b/c/aa.//../// /b/c
+/b/c/aa.//./aaa /b/c/aa./aaa
+/b/c/aa.//./aa. /b/c/aa./aa.
+/b/c/aa.//./aa/ /b/c/aa./aa
+/b/c/aa.//./a.a /b/c/aa./a.a
+/b/c/aa.//./a.. /b/c/aa./a..
+/b/c/aa.//./a./ /b/c/aa./a.
+/b/c/aa.//./a/a /b/c/aa./a/a
+/b/c/aa.//./a/. /b/c/aa./a
+/b/c/aa.//./a// /b/c/aa./a
+/b/c/aa.//./.aa /b/c/aa./.aa
+/b/c/aa.//./.a. /b/c/aa./.a.
+/b/c/aa.//./.a/ /b/c/aa./.a
+/b/c/aa.//./..a /b/c/aa./..a
+/b/c/aa.//./... /b/c/aa./...
+/b/c/aa.//./../ /b/c
+/b/c/aa.//././a /b/c/aa./a
+/b/c/aa.//././. /b/c/aa.
+/b/c/aa.//./.// /b/c/aa.
+/b/c/aa.//.//aa /b/c/aa./aa
+/b/c/aa.//.//a. /b/c/aa./a.
+/b/c/aa.//.//a/ /b/c/aa./a
+/b/c/aa.//.//.a /b/c/aa./.a
+/b/c/aa.//.//.. /b/c
+/b/c/aa.//.//./ /b/c/aa.
+/b/c/aa.//.///a /b/c/aa./a
+/b/c/aa.//.///. /b/c/aa.
+/b/c/aa.//.//// /b/c/aa.
+/b/c/aa.///aaaa /b/c/aa./aaaa
+/b/c/aa.///aaa. /b/c/aa./aaa.
+/b/c/aa.///aaa/ /b/c/aa./aaa
+/b/c/aa.///aa.a /b/c/aa./aa.a
+/b/c/aa.///aa.. /b/c/aa./aa..
+/b/c/aa.///aa./ /b/c/aa./aa.
+/b/c/aa.///aa/a /b/c/aa./aa/a
+/b/c/aa.///aa/. /b/c/aa./aa
+/b/c/aa.///aa// /b/c/aa./aa
+/b/c/aa.///a.aa /b/c/aa./a.aa
+/b/c/aa.///a.a. /b/c/aa./a.a.
+/b/c/aa.///a.a/ /b/c/aa./a.a
+/b/c/aa.///a..a /b/c/aa./a..a
+/b/c/aa.///a... /b/c/aa./a...
+/b/c/aa.///a../ /b/c/aa./a..
+/b/c/aa.///a./a /b/c/aa./a./a
+/b/c/aa.///a./. /b/c/aa./a.
+/b/c/aa.///a.// /b/c/aa./a.
+/b/c/aa.///a/aa /b/c/aa./a/aa
+/b/c/aa.///a/a. /b/c/aa./a/a.
+/b/c/aa.///a/a/ /b/c/aa./a/a
+/b/c/aa.///a/.a /b/c/aa./a/.a
+/b/c/aa.///a/.. /b/c/aa.
+/b/c/aa.///a/./ /b/c/aa./a
+/b/c/aa.///a//a /b/c/aa./a/a
+/b/c/aa.///a//. /b/c/aa./a
+/b/c/aa.///a/// /b/c/aa./a
+/b/c/aa.///.aaa /b/c/aa./.aaa
+/b/c/aa.///.aa. /b/c/aa./.aa.
+/b/c/aa.///.aa/ /b/c/aa./.aa
+/b/c/aa.///.a.a /b/c/aa./.a.a
+/b/c/aa.///.a.. /b/c/aa./.a..
+/b/c/aa.///.a./ /b/c/aa./.a.
+/b/c/aa.///.a/a /b/c/aa./.a/a
+/b/c/aa.///.a/. /b/c/aa./.a
+/b/c/aa.///.a// /b/c/aa./.a
+/b/c/aa.///..aa /b/c/aa./..aa
+/b/c/aa.///..a. /b/c/aa./..a.
+/b/c/aa.///..a/ /b/c/aa./..a
+/b/c/aa.///...a /b/c/aa./...a
+/b/c/aa.///.... /b/c/aa./....
+/b/c/aa.///.../ /b/c/aa./...
+/b/c/aa.///../a /b/c/a
+/b/c/aa.///../. /b/c
+/b/c/aa.///..// /b/c
+/b/c/aa.///./aa /b/c/aa./aa
+/b/c/aa.///./a. /b/c/aa./a.
+/b/c/aa.///./a/ /b/c/aa./a
+/b/c/aa.///./.a /b/c/aa./.a
+/b/c/aa.///./.. /b/c
+/b/c/aa.///././ /b/c/aa.
+/b/c/aa.///.//a /b/c/aa./a
+/b/c/aa.///.//. /b/c/aa.
+/b/c/aa.///./// /b/c/aa.
+/b/c/aa.////aaa /b/c/aa./aaa
+/b/c/aa.////aa. /b/c/aa./aa.
+/b/c/aa.////aa/ /b/c/aa./aa
+/b/c/aa.////a.a /b/c/aa./a.a
+/b/c/aa.////a.. /b/c/aa./a..
+/b/c/aa.////a./ /b/c/aa./a.
+/b/c/aa.////a/a /b/c/aa./a/a
+/b/c/aa.////a/. /b/c/aa./a
+/b/c/aa.////a// /b/c/aa./a
+/b/c/aa.////.aa /b/c/aa./.aa
+/b/c/aa.////.a. /b/c/aa./.a.
+/b/c/aa.////.a/ /b/c/aa./.a
+/b/c/aa.////..a /b/c/aa./..a
+/b/c/aa.////... /b/c/aa./...
+/b/c/aa.////../ /b/c
+/b/c/aa.////./a /b/c/aa./a
+/b/c/aa.////./. /b/c/aa.
+/b/c/aa.////.// /b/c/aa.
+/b/c/aa./////aa /b/c/aa./aa
+/b/c/aa./////a. /b/c/aa./a.
+/b/c/aa./////a/ /b/c/aa./a
+/b/c/aa./////.a /b/c/aa./.a
+/b/c/aa./////.. /b/c
+/b/c/aa./////./ /b/c/aa.
+/b/c/aa.//////a /b/c/aa./a
+/b/c/aa.//////. /b/c/aa.
+/b/c/aa./////// /b/c/aa.
+/b/c/aa/aaaaaaa /b/c/aa/aaaaaaa
+/b/c/aa/aaaaaa. /b/c/aa/aaaaaa.
+/b/c/aa/aaaaaa/ /b/c/aa/aaaaaa
+/b/c/aa/aaaaa.a /b/c/aa/aaaaa.a
+/b/c/aa/aaaaa.. /b/c/aa/aaaaa..
+/b/c/aa/aaaaa./ /b/c/aa/aaaaa.
+/b/c/aa/aaaaa/a /b/c/aa/aaaaa/a
+/b/c/aa/aaaaa/. /b/c/aa/aaaaa
+/b/c/aa/aaaaa// /b/c/aa/aaaaa
+/b/c/aa/aaaa.aa /b/c/aa/aaaa.aa
+/b/c/aa/aaaa.a. /b/c/aa/aaaa.a.
+/b/c/aa/aaaa.a/ /b/c/aa/aaaa.a
+/b/c/aa/aaaa..a /b/c/aa/aaaa..a
+/b/c/aa/aaaa... /b/c/aa/aaaa...
+/b/c/aa/aaaa../ /b/c/aa/aaaa..
+/b/c/aa/aaaa./a /b/c/aa/aaaa./a
+/b/c/aa/aaaa./. /b/c/aa/aaaa.
+/b/c/aa/aaaa.// /b/c/aa/aaaa.
+/b/c/aa/aaaa/aa /b/c/aa/aaaa/aa
+/b/c/aa/aaaa/a. /b/c/aa/aaaa/a.
+/b/c/aa/aaaa/a/ /b/c/aa/aaaa/a
+/b/c/aa/aaaa/.a /b/c/aa/aaaa/.a
+/b/c/aa/aaaa/.. /b/c/aa
+/b/c/aa/aaaa/./ /b/c/aa/aaaa
+/b/c/aa/aaaa//a /b/c/aa/aaaa/a
+/b/c/aa/aaaa//. /b/c/aa/aaaa
+/b/c/aa/aaaa/// /b/c/aa/aaaa
+/b/c/aa/aaa.aaa /b/c/aa/aaa.aaa
+/b/c/aa/aaa.aa. /b/c/aa/aaa.aa.
+/b/c/aa/aaa.aa/ /b/c/aa/aaa.aa
+/b/c/aa/aaa.a.a /b/c/aa/aaa.a.a
+/b/c/aa/aaa.a.. /b/c/aa/aaa.a..
+/b/c/aa/aaa.a./ /b/c/aa/aaa.a.
+/b/c/aa/aaa.a/a /b/c/aa/aaa.a/a
+/b/c/aa/aaa.a/. /b/c/aa/aaa.a
+/b/c/aa/aaa.a// /b/c/aa/aaa.a
+/b/c/aa/aaa..aa /b/c/aa/aaa..aa
+/b/c/aa/aaa..a. /b/c/aa/aaa..a.
+/b/c/aa/aaa..a/ /b/c/aa/aaa..a
+/b/c/aa/aaa...a /b/c/aa/aaa...a
+/b/c/aa/aaa.... /b/c/aa/aaa....
+/b/c/aa/aaa.../ /b/c/aa/aaa...
+/b/c/aa/aaa../a /b/c/aa/aaa../a
+/b/c/aa/aaa../. /b/c/aa/aaa..
+/b/c/aa/aaa..// /b/c/aa/aaa..
+/b/c/aa/aaa./aa /b/c/aa/aaa./aa
+/b/c/aa/aaa./a. /b/c/aa/aaa./a.
+/b/c/aa/aaa./a/ /b/c/aa/aaa./a
+/b/c/aa/aaa./.a /b/c/aa/aaa./.a
+/b/c/aa/aaa./.. /b/c/aa
+/b/c/aa/aaa././ /b/c/aa/aaa.
+/b/c/aa/aaa.//a /b/c/aa/aaa./a
+/b/c/aa/aaa.//. /b/c/aa/aaa.
+/b/c/aa/aaa./// /b/c/aa/aaa.
+/b/c/aa/aaa/aaa /b/c/aa/aaa/aaa
+/b/c/aa/aaa/aa. /b/c/aa/aaa/aa.
+/b/c/aa/aaa/aa/ /b/c/aa/aaa/aa
+/b/c/aa/aaa/a.a /b/c/aa/aaa/a.a
+/b/c/aa/aaa/a.. /b/c/aa/aaa/a..
+/b/c/aa/aaa/a./ /b/c/aa/aaa/a.
+/b/c/aa/aaa/a/a /b/c/aa/aaa/a/a
+/b/c/aa/aaa/a/. /b/c/aa/aaa/a
+/b/c/aa/aaa/a// /b/c/aa/aaa/a
+/b/c/aa/aaa/.aa /b/c/aa/aaa/.aa
+/b/c/aa/aaa/.a. /b/c/aa/aaa/.a.
+/b/c/aa/aaa/.a/ /b/c/aa/aaa/.a
+/b/c/aa/aaa/..a /b/c/aa/aaa/..a
+/b/c/aa/aaa/... /b/c/aa/aaa/...
+/b/c/aa/aaa/../ /b/c/aa
+/b/c/aa/aaa/./a /b/c/aa/aaa/a
+/b/c/aa/aaa/./. /b/c/aa/aaa
+/b/c/aa/aaa/.// /b/c/aa/aaa
+/b/c/aa/aaa//aa /b/c/aa/aaa/aa
+/b/c/aa/aaa//a. /b/c/aa/aaa/a.
+/b/c/aa/aaa//a/ /b/c/aa/aaa/a
+/b/c/aa/aaa//.a /b/c/aa/aaa/.a
+/b/c/aa/aaa//.. /b/c/aa
+/b/c/aa/aaa//./ /b/c/aa/aaa
+/b/c/aa/aaa///a /b/c/aa/aaa/a
+/b/c/aa/aaa///. /b/c/aa/aaa
+/b/c/aa/aaa//// /b/c/aa/aaa
+/b/c/aa/aa.aaaa /b/c/aa/aa.aaaa
+/b/c/aa/aa.aaa. /b/c/aa/aa.aaa.
+/b/c/aa/aa.aaa/ /b/c/aa/aa.aaa
+/b/c/aa/aa.aa.a /b/c/aa/aa.aa.a
+/b/c/aa/aa.aa.. /b/c/aa/aa.aa..
+/b/c/aa/aa.aa./ /b/c/aa/aa.aa.
+/b/c/aa/aa.aa/a /b/c/aa/aa.aa/a
+/b/c/aa/aa.aa/. /b/c/aa/aa.aa
+/b/c/aa/aa.aa// /b/c/aa/aa.aa
+/b/c/aa/aa.a.aa /b/c/aa/aa.a.aa
+/b/c/aa/aa.a.a. /b/c/aa/aa.a.a.
+/b/c/aa/aa.a.a/ /b/c/aa/aa.a.a
+/b/c/aa/aa.a..a /b/c/aa/aa.a..a
+/b/c/aa/aa.a... /b/c/aa/aa.a...
+/b/c/aa/aa.a../ /b/c/aa/aa.a..
+/b/c/aa/aa.a./a /b/c/aa/aa.a./a
+/b/c/aa/aa.a./. /b/c/aa/aa.a.
+/b/c/aa/aa.a.// /b/c/aa/aa.a.
+/b/c/aa/aa.a/aa /b/c/aa/aa.a/aa
+/b/c/aa/aa.a/a. /b/c/aa/aa.a/a.
+/b/c/aa/aa.a/a/ /b/c/aa/aa.a/a
+/b/c/aa/aa.a/.a /b/c/aa/aa.a/.a
+/b/c/aa/aa.a/.. /b/c/aa
+/b/c/aa/aa.a/./ /b/c/aa/aa.a
+/b/c/aa/aa.a//a /b/c/aa/aa.a/a
+/b/c/aa/aa.a//. /b/c/aa/aa.a
+/b/c/aa/aa.a/// /b/c/aa/aa.a
+/b/c/aa/aa..aaa /b/c/aa/aa..aaa
+/b/c/aa/aa..aa. /b/c/aa/aa..aa.
+/b/c/aa/aa..aa/ /b/c/aa/aa..aa
+/b/c/aa/aa..a.a /b/c/aa/aa..a.a
+/b/c/aa/aa..a.. /b/c/aa/aa..a..
+/b/c/aa/aa..a./ /b/c/aa/aa..a.
+/b/c/aa/aa..a/a /b/c/aa/aa..a/a
+/b/c/aa/aa..a/. /b/c/aa/aa..a
+/b/c/aa/aa..a// /b/c/aa/aa..a
+/b/c/aa/aa...aa /b/c/aa/aa...aa
+/b/c/aa/aa...a. /b/c/aa/aa...a.
+/b/c/aa/aa...a/ /b/c/aa/aa...a
+/b/c/aa/aa....a /b/c/aa/aa....a
+/b/c/aa/aa..... /b/c/aa/aa.....
+/b/c/aa/aa..../ /b/c/aa/aa....
+/b/c/aa/aa.../a /b/c/aa/aa.../a
+/b/c/aa/aa.../. /b/c/aa/aa...
+/b/c/aa/aa...// /b/c/aa/aa...
+/b/c/aa/aa../aa /b/c/aa/aa../aa
+/b/c/aa/aa../a. /b/c/aa/aa../a.
+/b/c/aa/aa../a/ /b/c/aa/aa../a
+/b/c/aa/aa../.a /b/c/aa/aa../.a
+/b/c/aa/aa../.. /b/c/aa
+/b/c/aa/aa.././ /b/c/aa/aa..
+/b/c/aa/aa..//a /b/c/aa/aa../a
+/b/c/aa/aa..//. /b/c/aa/aa..
+/b/c/aa/aa../// /b/c/aa/aa..
+/b/c/aa/aa./aaa /b/c/aa/aa./aaa
+/b/c/aa/aa./aa. /b/c/aa/aa./aa.
+/b/c/aa/aa./aa/ /b/c/aa/aa./aa
+/b/c/aa/aa./a.a /b/c/aa/aa./a.a
+/b/c/aa/aa./a.. /b/c/aa/aa./a..
+/b/c/aa/aa./a./ /b/c/aa/aa./a.
+/b/c/aa/aa./a/a /b/c/aa/aa./a/a
+/b/c/aa/aa./a/. /b/c/aa/aa./a
+/b/c/aa/aa./a// /b/c/aa/aa./a
+/b/c/aa/aa./.aa /b/c/aa/aa./.aa
+/b/c/aa/aa./.a. /b/c/aa/aa./.a.
+/b/c/aa/aa./.a/ /b/c/aa/aa./.a
+/b/c/aa/aa./..a /b/c/aa/aa./..a
+/b/c/aa/aa./... /b/c/aa/aa./...
+/b/c/aa/aa./../ /b/c/aa
+/b/c/aa/aa././a /b/c/aa/aa./a
+/b/c/aa/aa././. /b/c/aa/aa.
+/b/c/aa/aa./.// /b/c/aa/aa.
+/b/c/aa/aa.//aa /b/c/aa/aa./aa
+/b/c/aa/aa.//a. /b/c/aa/aa./a.
+/b/c/aa/aa.//a/ /b/c/aa/aa./a
+/b/c/aa/aa.//.a /b/c/aa/aa./.a
+/b/c/aa/aa.//.. /b/c/aa
+/b/c/aa/aa.//./ /b/c/aa/aa.
+/b/c/aa/aa.///a /b/c/aa/aa./a
+/b/c/aa/aa.///. /b/c/aa/aa.
+/b/c/aa/aa.//// /b/c/aa/aa.
+/b/c/aa/aa/aaaa /b/c/aa/aa/aaaa
+/b/c/aa/aa/aaa. /b/c/aa/aa/aaa.
+/b/c/aa/aa/aaa/ /b/c/aa/aa/aaa
+/b/c/aa/aa/aa.a /b/c/aa/aa/aa.a
+/b/c/aa/aa/aa.. /b/c/aa/aa/aa..
+/b/c/aa/aa/aa./ /b/c/aa/aa/aa.
+/b/c/aa/aa/aa/a /b/c/aa/aa/aa/a
+/b/c/aa/aa/aa/. /b/c/aa/aa/aa
+/b/c/aa/aa/aa// /b/c/aa/aa/aa
+/b/c/aa/aa/a.aa /b/c/aa/aa/a.aa
+/b/c/aa/aa/a.a. /b/c/aa/aa/a.a.
+/b/c/aa/aa/a.a/ /b/c/aa/aa/a.a
+/b/c/aa/aa/a..a /b/c/aa/aa/a..a
+/b/c/aa/aa/a... /b/c/aa/aa/a...
+/b/c/aa/aa/a../ /b/c/aa/aa/a..
+/b/c/aa/aa/a./a /b/c/aa/aa/a./a
+/b/c/aa/aa/a./. /b/c/aa/aa/a.
+/b/c/aa/aa/a.// /b/c/aa/aa/a.
+/b/c/aa/aa/a/aa /b/c/aa/aa/a/aa
+/b/c/aa/aa/a/a. /b/c/aa/aa/a/a.
+/b/c/aa/aa/a/a/ /b/c/aa/aa/a/a
+/b/c/aa/aa/a/.a /b/c/aa/aa/a/.a
+/b/c/aa/aa/a/.. /b/c/aa/aa
+/b/c/aa/aa/a/./ /b/c/aa/aa/a
+/b/c/aa/aa/a//a /b/c/aa/aa/a/a
+/b/c/aa/aa/a//. /b/c/aa/aa/a
+/b/c/aa/aa/a/// /b/c/aa/aa/a
+/b/c/aa/aa/.aaa /b/c/aa/aa/.aaa
+/b/c/aa/aa/.aa. /b/c/aa/aa/.aa.
+/b/c/aa/aa/.aa/ /b/c/aa/aa/.aa
+/b/c/aa/aa/.a.a /b/c/aa/aa/.a.a
+/b/c/aa/aa/.a.. /b/c/aa/aa/.a..
+/b/c/aa/aa/.a./ /b/c/aa/aa/.a.
+/b/c/aa/aa/.a/a /b/c/aa/aa/.a/a
+/b/c/aa/aa/.a/. /b/c/aa/aa/.a
+/b/c/aa/aa/.a// /b/c/aa/aa/.a
+/b/c/aa/aa/..aa /b/c/aa/aa/..aa
+/b/c/aa/aa/..a. /b/c/aa/aa/..a.
+/b/c/aa/aa/..a/ /b/c/aa/aa/..a
+/b/c/aa/aa/...a /b/c/aa/aa/...a
+/b/c/aa/aa/.... /b/c/aa/aa/....
+/b/c/aa/aa/.../ /b/c/aa/aa/...
+/b/c/aa/aa/../a /b/c/aa/a
+/b/c/aa/aa/../. /b/c/aa
+/b/c/aa/aa/..// /b/c/aa
+/b/c/aa/aa/./aa /b/c/aa/aa/aa
+/b/c/aa/aa/./a. /b/c/aa/aa/a.
+/b/c/aa/aa/./a/ /b/c/aa/aa/a
+/b/c/aa/aa/./.a /b/c/aa/aa/.a
+/b/c/aa/aa/./.. /b/c/aa
+/b/c/aa/aa/././ /b/c/aa/aa
+/b/c/aa/aa/.//a /b/c/aa/aa/a
+/b/c/aa/aa/.//. /b/c/aa/aa
+/b/c/aa/aa/./// /b/c/aa/aa
+/b/c/aa/aa//aaa /b/c/aa/aa/aaa
+/b/c/aa/aa//aa. /b/c/aa/aa/aa.
+/b/c/aa/aa//aa/ /b/c/aa/aa/aa
+/b/c/aa/aa//a.a /b/c/aa/aa/a.a
+/b/c/aa/aa//a.. /b/c/aa/aa/a..
+/b/c/aa/aa//a./ /b/c/aa/aa/a.
+/b/c/aa/aa//a/a /b/c/aa/aa/a/a
+/b/c/aa/aa//a/. /b/c/aa/aa/a
+/b/c/aa/aa//a// /b/c/aa/aa/a
+/b/c/aa/aa//.aa /b/c/aa/aa/.aa
+/b/c/aa/aa//.a. /b/c/aa/aa/.a.
+/b/c/aa/aa//.a/ /b/c/aa/aa/.a
+/b/c/aa/aa//..a /b/c/aa/aa/..a
+/b/c/aa/aa//... /b/c/aa/aa/...
+/b/c/aa/aa//../ /b/c/aa
+/b/c/aa/aa//./a /b/c/aa/aa/a
+/b/c/aa/aa//./. /b/c/aa/aa
+/b/c/aa/aa//.// /b/c/aa/aa
+/b/c/aa/aa///aa /b/c/aa/aa/aa
+/b/c/aa/aa///a. /b/c/aa/aa/a.
+/b/c/aa/aa///a/ /b/c/aa/aa/a
+/b/c/aa/aa///.a /b/c/aa/aa/.a
+/b/c/aa/aa///.. /b/c/aa
+/b/c/aa/aa///./ /b/c/aa/aa
+/b/c/aa/aa////a /b/c/aa/aa/a
+/b/c/aa/aa////. /b/c/aa/aa
+/b/c/aa/aa///// /b/c/aa/aa
+/b/c/aa/a.aaaaa /b/c/aa/a.aaaaa
+/b/c/aa/a.aaaa. /b/c/aa/a.aaaa.
+/b/c/aa/a.aaaa/ /b/c/aa/a.aaaa
+/b/c/aa/a.aaa.a /b/c/aa/a.aaa.a
+/b/c/aa/a.aaa.. /b/c/aa/a.aaa..
+/b/c/aa/a.aaa./ /b/c/aa/a.aaa.
+/b/c/aa/a.aaa/a /b/c/aa/a.aaa/a
+/b/c/aa/a.aaa/. /b/c/aa/a.aaa
+/b/c/aa/a.aaa// /b/c/aa/a.aaa
+/b/c/aa/a.aa.aa /b/c/aa/a.aa.aa
+/b/c/aa/a.aa.a. /b/c/aa/a.aa.a.
+/b/c/aa/a.aa.a/ /b/c/aa/a.aa.a
+/b/c/aa/a.aa..a /b/c/aa/a.aa..a
+/b/c/aa/a.aa... /b/c/aa/a.aa...
+/b/c/aa/a.aa../ /b/c/aa/a.aa..
+/b/c/aa/a.aa./a /b/c/aa/a.aa./a
+/b/c/aa/a.aa./. /b/c/aa/a.aa.
+/b/c/aa/a.aa.// /b/c/aa/a.aa.
+/b/c/aa/a.aa/aa /b/c/aa/a.aa/aa
+/b/c/aa/a.aa/a. /b/c/aa/a.aa/a.
+/b/c/aa/a.aa/a/ /b/c/aa/a.aa/a
+/b/c/aa/a.aa/.a /b/c/aa/a.aa/.a
+/b/c/aa/a.aa/.. /b/c/aa
+/b/c/aa/a.aa/./ /b/c/aa/a.aa
+/b/c/aa/a.aa//a /b/c/aa/a.aa/a
+/b/c/aa/a.aa//. /b/c/aa/a.aa
+/b/c/aa/a.aa/// /b/c/aa/a.aa
+/b/c/aa/a.a.aaa /b/c/aa/a.a.aaa
+/b/c/aa/a.a.aa. /b/c/aa/a.a.aa.
+/b/c/aa/a.a.aa/ /b/c/aa/a.a.aa
+/b/c/aa/a.a.a.a /b/c/aa/a.a.a.a
+/b/c/aa/a.a.a.. /b/c/aa/a.a.a..
+/b/c/aa/a.a.a./ /b/c/aa/a.a.a.
+/b/c/aa/a.a.a/a /b/c/aa/a.a.a/a
+/b/c/aa/a.a.a/. /b/c/aa/a.a.a
+/b/c/aa/a.a.a// /b/c/aa/a.a.a
+/b/c/aa/a.a..aa /b/c/aa/a.a..aa
+/b/c/aa/a.a..a. /b/c/aa/a.a..a.
+/b/c/aa/a.a..a/ /b/c/aa/a.a..a
+/b/c/aa/a.a...a /b/c/aa/a.a...a
+/b/c/aa/a.a.... /b/c/aa/a.a....
+/b/c/aa/a.a.../ /b/c/aa/a.a...
+/b/c/aa/a.a../a /b/c/aa/a.a../a
+/b/c/aa/a.a../. /b/c/aa/a.a..
+/b/c/aa/a.a..// /b/c/aa/a.a..
+/b/c/aa/a.a./aa /b/c/aa/a.a./aa
+/b/c/aa/a.a./a. /b/c/aa/a.a./a.
+/b/c/aa/a.a./a/ /b/c/aa/a.a./a
+/b/c/aa/a.a./.a /b/c/aa/a.a./.a
+/b/c/aa/a.a./.. /b/c/aa
+/b/c/aa/a.a././ /b/c/aa/a.a.
+/b/c/aa/a.a.//a /b/c/aa/a.a./a
+/b/c/aa/a.a.//. /b/c/aa/a.a.
+/b/c/aa/a.a./// /b/c/aa/a.a.
+/b/c/aa/a.a/aaa /b/c/aa/a.a/aaa
+/b/c/aa/a.a/aa. /b/c/aa/a.a/aa.
+/b/c/aa/a.a/aa/ /b/c/aa/a.a/aa
+/b/c/aa/a.a/a.a /b/c/aa/a.a/a.a
+/b/c/aa/a.a/a.. /b/c/aa/a.a/a..
+/b/c/aa/a.a/a./ /b/c/aa/a.a/a.
+/b/c/aa/a.a/a/a /b/c/aa/a.a/a/a
+/b/c/aa/a.a/a/. /b/c/aa/a.a/a
+/b/c/aa/a.a/a// /b/c/aa/a.a/a
+/b/c/aa/a.a/.aa /b/c/aa/a.a/.aa
+/b/c/aa/a.a/.a. /b/c/aa/a.a/.a.
+/b/c/aa/a.a/.a/ /b/c/aa/a.a/.a
+/b/c/aa/a.a/..a /b/c/aa/a.a/..a
+/b/c/aa/a.a/... /b/c/aa/a.a/...
+/b/c/aa/a.a/../ /b/c/aa
+/b/c/aa/a.a/./a /b/c/aa/a.a/a
+/b/c/aa/a.a/./. /b/c/aa/a.a
+/b/c/aa/a.a/.// /b/c/aa/a.a
+/b/c/aa/a.a//aa /b/c/aa/a.a/aa
+/b/c/aa/a.a//a. /b/c/aa/a.a/a.
+/b/c/aa/a.a//a/ /b/c/aa/a.a/a
+/b/c/aa/a.a//.a /b/c/aa/a.a/.a
+/b/c/aa/a.a//.. /b/c/aa
+/b/c/aa/a.a//./ /b/c/aa/a.a
+/b/c/aa/a.a///a /b/c/aa/a.a/a
+/b/c/aa/a.a///. /b/c/aa/a.a
+/b/c/aa/a.a//// /b/c/aa/a.a
+/b/c/aa/a..aaaa /b/c/aa/a..aaaa
+/b/c/aa/a..aaa. /b/c/aa/a..aaa.
+/b/c/aa/a..aaa/ /b/c/aa/a..aaa
+/b/c/aa/a..aa.a /b/c/aa/a..aa.a
+/b/c/aa/a..aa.. /b/c/aa/a..aa..
+/b/c/aa/a..aa./ /b/c/aa/a..aa.
+/b/c/aa/a..aa/a /b/c/aa/a..aa/a
+/b/c/aa/a..aa/. /b/c/aa/a..aa
+/b/c/aa/a..aa// /b/c/aa/a..aa
+/b/c/aa/a..a.aa /b/c/aa/a..a.aa
+/b/c/aa/a..a.a. /b/c/aa/a..a.a.
+/b/c/aa/a..a.a/ /b/c/aa/a..a.a
+/b/c/aa/a..a..a /b/c/aa/a..a..a
+/b/c/aa/a..a... /b/c/aa/a..a...
+/b/c/aa/a..a../ /b/c/aa/a..a..
+/b/c/aa/a..a./a /b/c/aa/a..a./a
+/b/c/aa/a..a./. /b/c/aa/a..a.
+/b/c/aa/a..a.// /b/c/aa/a..a.
+/b/c/aa/a..a/aa /b/c/aa/a..a/aa
+/b/c/aa/a..a/a. /b/c/aa/a..a/a.
+/b/c/aa/a..a/a/ /b/c/aa/a..a/a
+/b/c/aa/a..a/.a /b/c/aa/a..a/.a
+/b/c/aa/a..a/.. /b/c/aa
+/b/c/aa/a..a/./ /b/c/aa/a..a
+/b/c/aa/a..a//a /b/c/aa/a..a/a
+/b/c/aa/a..a//. /b/c/aa/a..a
+/b/c/aa/a..a/// /b/c/aa/a..a
+/b/c/aa/a...aaa /b/c/aa/a...aaa
+/b/c/aa/a...aa. /b/c/aa/a...aa.
+/b/c/aa/a...aa/ /b/c/aa/a...aa
+/b/c/aa/a...a.a /b/c/aa/a...a.a
+/b/c/aa/a...a.. /b/c/aa/a...a..
+/b/c/aa/a...a./ /b/c/aa/a...a.
+/b/c/aa/a...a/a /b/c/aa/a...a/a
+/b/c/aa/a...a/. /b/c/aa/a...a
+/b/c/aa/a...a// /b/c/aa/a...a
+/b/c/aa/a....aa /b/c/aa/a....aa
+/b/c/aa/a....a. /b/c/aa/a....a.
+/b/c/aa/a....a/ /b/c/aa/a....a
+/b/c/aa/a.....a /b/c/aa/a.....a
+/b/c/aa/a...... /b/c/aa/a......
+/b/c/aa/a...../ /b/c/aa/a.....
+/b/c/aa/a..../a /b/c/aa/a..../a
+/b/c/aa/a..../. /b/c/aa/a....
+/b/c/aa/a....// /b/c/aa/a....
+/b/c/aa/a.../aa /b/c/aa/a.../aa
+/b/c/aa/a.../a. /b/c/aa/a.../a.
+/b/c/aa/a.../a/ /b/c/aa/a.../a
+/b/c/aa/a.../.a /b/c/aa/a.../.a
+/b/c/aa/a.../.. /b/c/aa
+/b/c/aa/a..././ /b/c/aa/a...
+/b/c/aa/a...//a /b/c/aa/a.../a
+/b/c/aa/a...//. /b/c/aa/a...
+/b/c/aa/a.../// /b/c/aa/a...
+/b/c/aa/a../aaa /b/c/aa/a../aaa
+/b/c/aa/a../aa. /b/c/aa/a../aa.
+/b/c/aa/a../aa/ /b/c/aa/a../aa
+/b/c/aa/a../a.a /b/c/aa/a../a.a
+/b/c/aa/a../a.. /b/c/aa/a../a..
+/b/c/aa/a../a./ /b/c/aa/a../a.
+/b/c/aa/a../a/a /b/c/aa/a../a/a
+/b/c/aa/a../a/. /b/c/aa/a../a
+/b/c/aa/a../a// /b/c/aa/a../a
+/b/c/aa/a../.aa /b/c/aa/a../.aa
+/b/c/aa/a../.a. /b/c/aa/a../.a.
+/b/c/aa/a../.a/ /b/c/aa/a../.a
+/b/c/aa/a../..a /b/c/aa/a../..a
+/b/c/aa/a../... /b/c/aa/a../...
+/b/c/aa/a../../ /b/c/aa
+/b/c/aa/a.././a /b/c/aa/a../a
+/b/c/aa/a.././. /b/c/aa/a..
+/b/c/aa/a../.// /b/c/aa/a..
+/b/c/aa/a..//aa /b/c/aa/a../aa
+/b/c/aa/a..//a. /b/c/aa/a../a.
+/b/c/aa/a..//a/ /b/c/aa/a../a
+/b/c/aa/a..//.a /b/c/aa/a../.a
+/b/c/aa/a..//.. /b/c/aa
+/b/c/aa/a..//./ /b/c/aa/a..
+/b/c/aa/a..///a /b/c/aa/a../a
+/b/c/aa/a..///. /b/c/aa/a..
+/b/c/aa/a..//// /b/c/aa/a..
+/b/c/aa/a./aaaa /b/c/aa/a./aaaa
+/b/c/aa/a./aaa. /b/c/aa/a./aaa.
+/b/c/aa/a./aaa/ /b/c/aa/a./aaa
+/b/c/aa/a./aa.a /b/c/aa/a./aa.a
+/b/c/aa/a./aa.. /b/c/aa/a./aa..
+/b/c/aa/a./aa./ /b/c/aa/a./aa.
+/b/c/aa/a./aa/a /b/c/aa/a./aa/a
+/b/c/aa/a./aa/. /b/c/aa/a./aa
+/b/c/aa/a./aa// /b/c/aa/a./aa
+/b/c/aa/a./a.aa /b/c/aa/a./a.aa
+/b/c/aa/a./a.a. /b/c/aa/a./a.a.
+/b/c/aa/a./a.a/ /b/c/aa/a./a.a
+/b/c/aa/a./a..a /b/c/aa/a./a..a
+/b/c/aa/a./a... /b/c/aa/a./a...
+/b/c/aa/a./a../ /b/c/aa/a./a..
+/b/c/aa/a./a./a /b/c/aa/a./a./a
+/b/c/aa/a./a./. /b/c/aa/a./a.
+/b/c/aa/a./a.// /b/c/aa/a./a.
+/b/c/aa/a./a/aa /b/c/aa/a./a/aa
+/b/c/aa/a./a/a. /b/c/aa/a./a/a.
+/b/c/aa/a./a/a/ /b/c/aa/a./a/a
+/b/c/aa/a./a/.a /b/c/aa/a./a/.a
+/b/c/aa/a./a/.. /b/c/aa/a.
+/b/c/aa/a./a/./ /b/c/aa/a./a
+/b/c/aa/a./a//a /b/c/aa/a./a/a
+/b/c/aa/a./a//. /b/c/aa/a./a
+/b/c/aa/a./a/// /b/c/aa/a./a
+/b/c/aa/a./.aaa /b/c/aa/a./.aaa
+/b/c/aa/a./.aa. /b/c/aa/a./.aa.
+/b/c/aa/a./.aa/ /b/c/aa/a./.aa
+/b/c/aa/a./.a.a /b/c/aa/a./.a.a
+/b/c/aa/a./.a.. /b/c/aa/a./.a..
+/b/c/aa/a./.a./ /b/c/aa/a./.a.
+/b/c/aa/a./.a/a /b/c/aa/a./.a/a
+/b/c/aa/a./.a/. /b/c/aa/a./.a
+/b/c/aa/a./.a// /b/c/aa/a./.a
+/b/c/aa/a./..aa /b/c/aa/a./..aa
+/b/c/aa/a./..a. /b/c/aa/a./..a.
+/b/c/aa/a./..a/ /b/c/aa/a./..a
+/b/c/aa/a./...a /b/c/aa/a./...a
+/b/c/aa/a./.... /b/c/aa/a./....
+/b/c/aa/a./.../ /b/c/aa/a./...
+/b/c/aa/a./../a /b/c/aa/a
+/b/c/aa/a./../. /b/c/aa
+/b/c/aa/a./..// /b/c/aa
+/b/c/aa/a././aa /b/c/aa/a./aa
+/b/c/aa/a././a. /b/c/aa/a./a.
+/b/c/aa/a././a/ /b/c/aa/a./a
+/b/c/aa/a././.a /b/c/aa/a./.a
+/b/c/aa/a././.. /b/c/aa
+/b/c/aa/a./././ /b/c/aa/a.
+/b/c/aa/a././/a /b/c/aa/a./a
+/b/c/aa/a././/. /b/c/aa/a.
+/b/c/aa/a././// /b/c/aa/a.
+/b/c/aa/a.//aaa /b/c/aa/a./aaa
+/b/c/aa/a.//aa. /b/c/aa/a./aa.
+/b/c/aa/a.//aa/ /b/c/aa/a./aa
+/b/c/aa/a.//a.a /b/c/aa/a./a.a
+/b/c/aa/a.//a.. /b/c/aa/a./a..
+/b/c/aa/a.//a./ /b/c/aa/a./a.
+/b/c/aa/a.//a/a /b/c/aa/a./a/a
+/b/c/aa/a.//a/. /b/c/aa/a./a
+/b/c/aa/a.//a// /b/c/aa/a./a
+/b/c/aa/a.//.aa /b/c/aa/a./.aa
+/b/c/aa/a.//.a. /b/c/aa/a./.a.
+/b/c/aa/a.//.a/ /b/c/aa/a./.a
+/b/c/aa/a.//..a /b/c/aa/a./..a
+/b/c/aa/a.//... /b/c/aa/a./...
+/b/c/aa/a.//../ /b/c/aa
+/b/c/aa/a.//./a /b/c/aa/a./a
+/b/c/aa/a.//./. /b/c/aa/a.
+/b/c/aa/a.//.// /b/c/aa/a.
+/b/c/aa/a.///aa /b/c/aa/a./aa
+/b/c/aa/a.///a. /b/c/aa/a./a.
+/b/c/aa/a.///a/ /b/c/aa/a./a
+/b/c/aa/a.///.a /b/c/aa/a./.a
+/b/c/aa/a.///.. /b/c/aa
+/b/c/aa/a.///./ /b/c/aa/a.
+/b/c/aa/a.////a /b/c/aa/a./a
+/b/c/aa/a.////. /b/c/aa/a.
+/b/c/aa/a.///// /b/c/aa/a.
+/b/c/aa/a/aaaaa /b/c/aa/a/aaaaa
+/b/c/aa/a/aaaa. /b/c/aa/a/aaaa.
+/b/c/aa/a/aaaa/ /b/c/aa/a/aaaa
+/b/c/aa/a/aaa.a /b/c/aa/a/aaa.a
+/b/c/aa/a/aaa.. /b/c/aa/a/aaa..
+/b/c/aa/a/aaa./ /b/c/aa/a/aaa.
+/b/c/aa/a/aaa/a /b/c/aa/a/aaa/a
+/b/c/aa/a/aaa/. /b/c/aa/a/aaa
+/b/c/aa/a/aaa// /b/c/aa/a/aaa
+/b/c/aa/a/aa.aa /b/c/aa/a/aa.aa
+/b/c/aa/a/aa.a. /b/c/aa/a/aa.a.
+/b/c/aa/a/aa.a/ /b/c/aa/a/aa.a
+/b/c/aa/a/aa..a /b/c/aa/a/aa..a
+/b/c/aa/a/aa... /b/c/aa/a/aa...
+/b/c/aa/a/aa../ /b/c/aa/a/aa..
+/b/c/aa/a/aa./a /b/c/aa/a/aa./a
+/b/c/aa/a/aa./. /b/c/aa/a/aa.
+/b/c/aa/a/aa.// /b/c/aa/a/aa.
+/b/c/aa/a/aa/aa /b/c/aa/a/aa/aa
+/b/c/aa/a/aa/a. /b/c/aa/a/aa/a.
+/b/c/aa/a/aa/a/ /b/c/aa/a/aa/a
+/b/c/aa/a/aa/.a /b/c/aa/a/aa/.a
+/b/c/aa/a/aa/.. /b/c/aa/a
+/b/c/aa/a/aa/./ /b/c/aa/a/aa
+/b/c/aa/a/aa//a /b/c/aa/a/aa/a
+/b/c/aa/a/aa//. /b/c/aa/a/aa
+/b/c/aa/a/aa/// /b/c/aa/a/aa
+/b/c/aa/a/a.aaa /b/c/aa/a/a.aaa
+/b/c/aa/a/a.aa. /b/c/aa/a/a.aa.
+/b/c/aa/a/a.aa/ /b/c/aa/a/a.aa
+/b/c/aa/a/a.a.a /b/c/aa/a/a.a.a
+/b/c/aa/a/a.a.. /b/c/aa/a/a.a..
+/b/c/aa/a/a.a./ /b/c/aa/a/a.a.
+/b/c/aa/a/a.a/a /b/c/aa/a/a.a/a
+/b/c/aa/a/a.a/. /b/c/aa/a/a.a
+/b/c/aa/a/a.a// /b/c/aa/a/a.a
+/b/c/aa/a/a..aa /b/c/aa/a/a..aa
+/b/c/aa/a/a..a. /b/c/aa/a/a..a.
+/b/c/aa/a/a..a/ /b/c/aa/a/a..a
+/b/c/aa/a/a...a /b/c/aa/a/a...a
+/b/c/aa/a/a.... /b/c/aa/a/a....
+/b/c/aa/a/a.../ /b/c/aa/a/a...
+/b/c/aa/a/a../a /b/c/aa/a/a../a
+/b/c/aa/a/a../. /b/c/aa/a/a..
+/b/c/aa/a/a..// /b/c/aa/a/a..
+/b/c/aa/a/a./aa /b/c/aa/a/a./aa
+/b/c/aa/a/a./a. /b/c/aa/a/a./a.
+/b/c/aa/a/a./a/ /b/c/aa/a/a./a
+/b/c/aa/a/a./.a /b/c/aa/a/a./.a
+/b/c/aa/a/a./.. /b/c/aa/a
+/b/c/aa/a/a././ /b/c/aa/a/a.
+/b/c/aa/a/a.//a /b/c/aa/a/a./a
+/b/c/aa/a/a.//. /b/c/aa/a/a.
+/b/c/aa/a/a./// /b/c/aa/a/a.
+/b/c/aa/a/a/aaa /b/c/aa/a/a/aaa
+/b/c/aa/a/a/aa. /b/c/aa/a/a/aa.
+/b/c/aa/a/a/aa/ /b/c/aa/a/a/aa
+/b/c/aa/a/a/a.a /b/c/aa/a/a/a.a
+/b/c/aa/a/a/a.. /b/c/aa/a/a/a..
+/b/c/aa/a/a/a./ /b/c/aa/a/a/a.
+/b/c/aa/a/a/a/a /b/c/aa/a/a/a/a
+/b/c/aa/a/a/a/. /b/c/aa/a/a/a
+/b/c/aa/a/a/a// /b/c/aa/a/a/a
+/b/c/aa/a/a/.aa /b/c/aa/a/a/.aa
+/b/c/aa/a/a/.a. /b/c/aa/a/a/.a.
+/b/c/aa/a/a/.a/ /b/c/aa/a/a/.a
+/b/c/aa/a/a/..a /b/c/aa/a/a/..a
+/b/c/aa/a/a/... /b/c/aa/a/a/...
+/b/c/aa/a/a/../ /b/c/aa/a
+/b/c/aa/a/a/./a /b/c/aa/a/a/a
+/b/c/aa/a/a/./. /b/c/aa/a/a
+/b/c/aa/a/a/.// /b/c/aa/a/a
+/b/c/aa/a/a//aa /b/c/aa/a/a/aa
+/b/c/aa/a/a//a. /b/c/aa/a/a/a.
+/b/c/aa/a/a//a/ /b/c/aa/a/a/a
+/b/c/aa/a/a//.a /b/c/aa/a/a/.a
+/b/c/aa/a/a//.. /b/c/aa/a
+/b/c/aa/a/a//./ /b/c/aa/a/a
+/b/c/aa/a/a///a /b/c/aa/a/a/a
+/b/c/aa/a/a///. /b/c/aa/a/a
+/b/c/aa/a/a//// /b/c/aa/a/a
+/b/c/aa/a/.aaaa /b/c/aa/a/.aaaa
+/b/c/aa/a/.aaa. /b/c/aa/a/.aaa.
+/b/c/aa/a/.aaa/ /b/c/aa/a/.aaa
+/b/c/aa/a/.aa.a /b/c/aa/a/.aa.a
+/b/c/aa/a/.aa.. /b/c/aa/a/.aa..
+/b/c/aa/a/.aa./ /b/c/aa/a/.aa.
+/b/c/aa/a/.aa/a /b/c/aa/a/.aa/a
+/b/c/aa/a/.aa/. /b/c/aa/a/.aa
+/b/c/aa/a/.aa// /b/c/aa/a/.aa
+/b/c/aa/a/.a.aa /b/c/aa/a/.a.aa
+/b/c/aa/a/.a.a. /b/c/aa/a/.a.a.
+/b/c/aa/a/.a.a/ /b/c/aa/a/.a.a
+/b/c/aa/a/.a..a /b/c/aa/a/.a..a
+/b/c/aa/a/.a... /b/c/aa/a/.a...
+/b/c/aa/a/.a../ /b/c/aa/a/.a..
+/b/c/aa/a/.a./a /b/c/aa/a/.a./a
+/b/c/aa/a/.a./. /b/c/aa/a/.a.
+/b/c/aa/a/.a.// /b/c/aa/a/.a.
+/b/c/aa/a/.a/aa /b/c/aa/a/.a/aa
+/b/c/aa/a/.a/a. /b/c/aa/a/.a/a.
+/b/c/aa/a/.a/a/ /b/c/aa/a/.a/a
+/b/c/aa/a/.a/.a /b/c/aa/a/.a/.a
+/b/c/aa/a/.a/.. /b/c/aa/a
+/b/c/aa/a/.a/./ /b/c/aa/a/.a
+/b/c/aa/a/.a//a /b/c/aa/a/.a/a
+/b/c/aa/a/.a//. /b/c/aa/a/.a
+/b/c/aa/a/.a/// /b/c/aa/a/.a
+/b/c/aa/a/..aaa /b/c/aa/a/..aaa
+/b/c/aa/a/..aa. /b/c/aa/a/..aa.
+/b/c/aa/a/..aa/ /b/c/aa/a/..aa
+/b/c/aa/a/..a.a /b/c/aa/a/..a.a
+/b/c/aa/a/..a.. /b/c/aa/a/..a..
+/b/c/aa/a/..a./ /b/c/aa/a/..a.
+/b/c/aa/a/..a/a /b/c/aa/a/..a/a
+/b/c/aa/a/..a/. /b/c/aa/a/..a
+/b/c/aa/a/..a// /b/c/aa/a/..a
+/b/c/aa/a/...aa /b/c/aa/a/...aa
+/b/c/aa/a/...a. /b/c/aa/a/...a.
+/b/c/aa/a/...a/ /b/c/aa/a/...a
+/b/c/aa/a/....a /b/c/aa/a/....a
+/b/c/aa/a/..... /b/c/aa/a/.....
+/b/c/aa/a/..../ /b/c/aa/a/....
+/b/c/aa/a/.../a /b/c/aa/a/.../a
+/b/c/aa/a/.../. /b/c/aa/a/...
+/b/c/aa/a/...// /b/c/aa/a/...
+/b/c/aa/a/../aa /b/c/aa/aa
+/b/c/aa/a/../a. /b/c/aa/a.
+/b/c/aa/a/../a/ /b/c/aa/a
+/b/c/aa/a/../.a /b/c/aa/.a
+/b/c/aa/a/../.. /b/c
+/b/c/aa/a/.././ /b/c/aa
+/b/c/aa/a/..//a /b/c/aa/a
+/b/c/aa/a/..//. /b/c/aa
+/b/c/aa/a/../// /b/c/aa
+/b/c/aa/a/./aaa /b/c/aa/a/aaa
+/b/c/aa/a/./aa. /b/c/aa/a/aa.
+/b/c/aa/a/./aa/ /b/c/aa/a/aa
+/b/c/aa/a/./a.a /b/c/aa/a/a.a
+/b/c/aa/a/./a.. /b/c/aa/a/a..
+/b/c/aa/a/./a./ /b/c/aa/a/a.
+/b/c/aa/a/./a/a /b/c/aa/a/a/a
+/b/c/aa/a/./a/. /b/c/aa/a/a
+/b/c/aa/a/./a// /b/c/aa/a/a
+/b/c/aa/a/./.aa /b/c/aa/a/.aa
+/b/c/aa/a/./.a. /b/c/aa/a/.a.
+/b/c/aa/a/./.a/ /b/c/aa/a/.a
+/b/c/aa/a/./..a /b/c/aa/a/..a
+/b/c/aa/a/./... /b/c/aa/a/...
+/b/c/aa/a/./../ /b/c/aa
+/b/c/aa/a/././a /b/c/aa/a/a
+/b/c/aa/a/././. /b/c/aa/a
+/b/c/aa/a/./.// /b/c/aa/a
+/b/c/aa/a/.//aa /b/c/aa/a/aa
+/b/c/aa/a/.//a. /b/c/aa/a/a.
+/b/c/aa/a/.//a/ /b/c/aa/a/a
+/b/c/aa/a/.//.a /b/c/aa/a/.a
+/b/c/aa/a/.//.. /b/c/aa
+/b/c/aa/a/.//./ /b/c/aa/a
+/b/c/aa/a/.///a /b/c/aa/a/a
+/b/c/aa/a/.///. /b/c/aa/a
+/b/c/aa/a/.//// /b/c/aa/a
+/b/c/aa/a//aaaa /b/c/aa/a/aaaa
+/b/c/aa/a//aaa. /b/c/aa/a/aaa.
+/b/c/aa/a//aaa/ /b/c/aa/a/aaa
+/b/c/aa/a//aa.a /b/c/aa/a/aa.a
+/b/c/aa/a//aa.. /b/c/aa/a/aa..
+/b/c/aa/a//aa./ /b/c/aa/a/aa.
+/b/c/aa/a//aa/a /b/c/aa/a/aa/a
+/b/c/aa/a//aa/. /b/c/aa/a/aa
+/b/c/aa/a//aa// /b/c/aa/a/aa
+/b/c/aa/a//a.aa /b/c/aa/a/a.aa
+/b/c/aa/a//a.a. /b/c/aa/a/a.a.
+/b/c/aa/a//a.a/ /b/c/aa/a/a.a
+/b/c/aa/a//a..a /b/c/aa/a/a..a
+/b/c/aa/a//a... /b/c/aa/a/a...
+/b/c/aa/a//a../ /b/c/aa/a/a..
+/b/c/aa/a//a./a /b/c/aa/a/a./a
+/b/c/aa/a//a./. /b/c/aa/a/a.
+/b/c/aa/a//a.// /b/c/aa/a/a.
+/b/c/aa/a//a/aa /b/c/aa/a/a/aa
+/b/c/aa/a//a/a. /b/c/aa/a/a/a.
+/b/c/aa/a//a/a/ /b/c/aa/a/a/a
+/b/c/aa/a//a/.a /b/c/aa/a/a/.a
+/b/c/aa/a//a/.. /b/c/aa/a
+/b/c/aa/a//a/./ /b/c/aa/a/a
+/b/c/aa/a//a//a /b/c/aa/a/a/a
+/b/c/aa/a//a//. /b/c/aa/a/a
+/b/c/aa/a//a/// /b/c/aa/a/a
+/b/c/aa/a//.aaa /b/c/aa/a/.aaa
+/b/c/aa/a//.aa. /b/c/aa/a/.aa.
+/b/c/aa/a//.aa/ /b/c/aa/a/.aa
+/b/c/aa/a//.a.a /b/c/aa/a/.a.a
+/b/c/aa/a//.a.. /b/c/aa/a/.a..
+/b/c/aa/a//.a./ /b/c/aa/a/.a.
+/b/c/aa/a//.a/a /b/c/aa/a/.a/a
+/b/c/aa/a//.a/. /b/c/aa/a/.a
+/b/c/aa/a//.a// /b/c/aa/a/.a
+/b/c/aa/a//..aa /b/c/aa/a/..aa
+/b/c/aa/a//..a. /b/c/aa/a/..a.
+/b/c/aa/a//..a/ /b/c/aa/a/..a
+/b/c/aa/a//...a /b/c/aa/a/...a
+/b/c/aa/a//.... /b/c/aa/a/....
+/b/c/aa/a//.../ /b/c/aa/a/...
+/b/c/aa/a//../a /b/c/aa/a
+/b/c/aa/a//../. /b/c/aa
+/b/c/aa/a//..// /b/c/aa
+/b/c/aa/a//./aa /b/c/aa/a/aa
+/b/c/aa/a//./a. /b/c/aa/a/a.
+/b/c/aa/a//./a/ /b/c/aa/a/a
+/b/c/aa/a//./.a /b/c/aa/a/.a
+/b/c/aa/a//./.. /b/c/aa
+/b/c/aa/a//././ /b/c/aa/a
+/b/c/aa/a//.//a /b/c/aa/a/a
+/b/c/aa/a//.//. /b/c/aa/a
+/b/c/aa/a//./// /b/c/aa/a
+/b/c/aa/a///aaa /b/c/aa/a/aaa
+/b/c/aa/a///aa. /b/c/aa/a/aa.
+/b/c/aa/a///aa/ /b/c/aa/a/aa
+/b/c/aa/a///a.a /b/c/aa/a/a.a
+/b/c/aa/a///a.. /b/c/aa/a/a..
+/b/c/aa/a///a./ /b/c/aa/a/a.
+/b/c/aa/a///a/a /b/c/aa/a/a/a
+/b/c/aa/a///a/. /b/c/aa/a/a
+/b/c/aa/a///a// /b/c/aa/a/a
+/b/c/aa/a///.aa /b/c/aa/a/.aa
+/b/c/aa/a///.a. /b/c/aa/a/.a.
+/b/c/aa/a///.a/ /b/c/aa/a/.a
+/b/c/aa/a///..a /b/c/aa/a/..a
+/b/c/aa/a///... /b/c/aa/a/...
+/b/c/aa/a///../ /b/c/aa
+/b/c/aa/a///./a /b/c/aa/a/a
+/b/c/aa/a///./. /b/c/aa/a
+/b/c/aa/a///.// /b/c/aa/a
+/b/c/aa/a////aa /b/c/aa/a/aa
+/b/c/aa/a////a. /b/c/aa/a/a.
+/b/c/aa/a////a/ /b/c/aa/a/a
+/b/c/aa/a////.a /b/c/aa/a/.a
+/b/c/aa/a////.. /b/c/aa
+/b/c/aa/a////./ /b/c/aa/a
+/b/c/aa/a/////a /b/c/aa/a/a
+/b/c/aa/a/////. /b/c/aa/a
+/b/c/aa/a////// /b/c/aa/a
+/b/c/aa/.aaaaaa /b/c/aa/.aaaaaa
+/b/c/aa/.aaaaa. /b/c/aa/.aaaaa.
+/b/c/aa/.aaaaa/ /b/c/aa/.aaaaa
+/b/c/aa/.aaaa.a /b/c/aa/.aaaa.a
+/b/c/aa/.aaaa.. /b/c/aa/.aaaa..
+/b/c/aa/.aaaa./ /b/c/aa/.aaaa.
+/b/c/aa/.aaaa/a /b/c/aa/.aaaa/a
+/b/c/aa/.aaaa/. /b/c/aa/.aaaa
+/b/c/aa/.aaaa// /b/c/aa/.aaaa
+/b/c/aa/.aaa.aa /b/c/aa/.aaa.aa
+/b/c/aa/.aaa.a. /b/c/aa/.aaa.a.
+/b/c/aa/.aaa.a/ /b/c/aa/.aaa.a
+/b/c/aa/.aaa..a /b/c/aa/.aaa..a
+/b/c/aa/.aaa... /b/c/aa/.aaa...
+/b/c/aa/.aaa../ /b/c/aa/.aaa..
+/b/c/aa/.aaa./a /b/c/aa/.aaa./a
+/b/c/aa/.aaa./. /b/c/aa/.aaa.
+/b/c/aa/.aaa.// /b/c/aa/.aaa.
+/b/c/aa/.aaa/aa /b/c/aa/.aaa/aa
+/b/c/aa/.aaa/a. /b/c/aa/.aaa/a.
+/b/c/aa/.aaa/a/ /b/c/aa/.aaa/a
+/b/c/aa/.aaa/.a /b/c/aa/.aaa/.a
+/b/c/aa/.aaa/.. /b/c/aa
+/b/c/aa/.aaa/./ /b/c/aa/.aaa
+/b/c/aa/.aaa//a /b/c/aa/.aaa/a
+/b/c/aa/.aaa//. /b/c/aa/.aaa
+/b/c/aa/.aaa/// /b/c/aa/.aaa
+/b/c/aa/.aa.aaa /b/c/aa/.aa.aaa
+/b/c/aa/.aa.aa. /b/c/aa/.aa.aa.
+/b/c/aa/.aa.aa/ /b/c/aa/.aa.aa
+/b/c/aa/.aa.a.a /b/c/aa/.aa.a.a
+/b/c/aa/.aa.a.. /b/c/aa/.aa.a..
+/b/c/aa/.aa.a./ /b/c/aa/.aa.a.
+/b/c/aa/.aa.a/a /b/c/aa/.aa.a/a
+/b/c/aa/.aa.a/. /b/c/aa/.aa.a
+/b/c/aa/.aa.a// /b/c/aa/.aa.a
+/b/c/aa/.aa..aa /b/c/aa/.aa..aa
+/b/c/aa/.aa..a. /b/c/aa/.aa..a.
+/b/c/aa/.aa..a/ /b/c/aa/.aa..a
+/b/c/aa/.aa...a /b/c/aa/.aa...a
+/b/c/aa/.aa.... /b/c/aa/.aa....
+/b/c/aa/.aa.../ /b/c/aa/.aa...
+/b/c/aa/.aa../a /b/c/aa/.aa../a
+/b/c/aa/.aa../. /b/c/aa/.aa..
+/b/c/aa/.aa..// /b/c/aa/.aa..
+/b/c/aa/.aa./aa /b/c/aa/.aa./aa
+/b/c/aa/.aa./a. /b/c/aa/.aa./a.
+/b/c/aa/.aa./a/ /b/c/aa/.aa./a
+/b/c/aa/.aa./.a /b/c/aa/.aa./.a
+/b/c/aa/.aa./.. /b/c/aa
+/b/c/aa/.aa././ /b/c/aa/.aa.
+/b/c/aa/.aa.//a /b/c/aa/.aa./a
+/b/c/aa/.aa.//. /b/c/aa/.aa.
+/b/c/aa/.aa./// /b/c/aa/.aa.
+/b/c/aa/.aa/aaa /b/c/aa/.aa/aaa
+/b/c/aa/.aa/aa. /b/c/aa/.aa/aa.
+/b/c/aa/.aa/aa/ /b/c/aa/.aa/aa
+/b/c/aa/.aa/a.a /b/c/aa/.aa/a.a
+/b/c/aa/.aa/a.. /b/c/aa/.aa/a..
+/b/c/aa/.aa/a./ /b/c/aa/.aa/a.
+/b/c/aa/.aa/a/a /b/c/aa/.aa/a/a
+/b/c/aa/.aa/a/. /b/c/aa/.aa/a
+/b/c/aa/.aa/a// /b/c/aa/.aa/a
+/b/c/aa/.aa/.aa /b/c/aa/.aa/.aa
+/b/c/aa/.aa/.a. /b/c/aa/.aa/.a.
+/b/c/aa/.aa/.a/ /b/c/aa/.aa/.a
+/b/c/aa/.aa/..a /b/c/aa/.aa/..a
+/b/c/aa/.aa/... /b/c/aa/.aa/...
+/b/c/aa/.aa/../ /b/c/aa
+/b/c/aa/.aa/./a /b/c/aa/.aa/a
+/b/c/aa/.aa/./. /b/c/aa/.aa
+/b/c/aa/.aa/.// /b/c/aa/.aa
+/b/c/aa/.aa//aa /b/c/aa/.aa/aa
+/b/c/aa/.aa//a. /b/c/aa/.aa/a.
+/b/c/aa/.aa//a/ /b/c/aa/.aa/a
+/b/c/aa/.aa//.a /b/c/aa/.aa/.a
+/b/c/aa/.aa//.. /b/c/aa
+/b/c/aa/.aa//./ /b/c/aa/.aa
+/b/c/aa/.aa///a /b/c/aa/.aa/a
+/b/c/aa/.aa///. /b/c/aa/.aa
+/b/c/aa/.aa//// /b/c/aa/.aa
+/b/c/aa/.a.aaaa /b/c/aa/.a.aaaa
+/b/c/aa/.a.aaa. /b/c/aa/.a.aaa.
+/b/c/aa/.a.aaa/ /b/c/aa/.a.aaa
+/b/c/aa/.a.aa.a /b/c/aa/.a.aa.a
+/b/c/aa/.a.aa.. /b/c/aa/.a.aa..
+/b/c/aa/.a.aa./ /b/c/aa/.a.aa.
+/b/c/aa/.a.aa/a /b/c/aa/.a.aa/a
+/b/c/aa/.a.aa/. /b/c/aa/.a.aa
+/b/c/aa/.a.aa// /b/c/aa/.a.aa
+/b/c/aa/.a.a.aa /b/c/aa/.a.a.aa
+/b/c/aa/.a.a.a. /b/c/aa/.a.a.a.
+/b/c/aa/.a.a.a/ /b/c/aa/.a.a.a
+/b/c/aa/.a.a..a /b/c/aa/.a.a..a
+/b/c/aa/.a.a... /b/c/aa/.a.a...
+/b/c/aa/.a.a../ /b/c/aa/.a.a..
+/b/c/aa/.a.a./a /b/c/aa/.a.a./a
+/b/c/aa/.a.a./. /b/c/aa/.a.a.
+/b/c/aa/.a.a.// /b/c/aa/.a.a.
+/b/c/aa/.a.a/aa /b/c/aa/.a.a/aa
+/b/c/aa/.a.a/a. /b/c/aa/.a.a/a.
+/b/c/aa/.a.a/a/ /b/c/aa/.a.a/a
+/b/c/aa/.a.a/.a /b/c/aa/.a.a/.a
+/b/c/aa/.a.a/.. /b/c/aa
+/b/c/aa/.a.a/./ /b/c/aa/.a.a
+/b/c/aa/.a.a//a /b/c/aa/.a.a/a
+/b/c/aa/.a.a//. /b/c/aa/.a.a
+/b/c/aa/.a.a/// /b/c/aa/.a.a
+/b/c/aa/.a..aaa /b/c/aa/.a..aaa
+/b/c/aa/.a..aa. /b/c/aa/.a..aa.
+/b/c/aa/.a..aa/ /b/c/aa/.a..aa
+/b/c/aa/.a..a.a /b/c/aa/.a..a.a
+/b/c/aa/.a..a.. /b/c/aa/.a..a..
+/b/c/aa/.a..a./ /b/c/aa/.a..a.
+/b/c/aa/.a..a/a /b/c/aa/.a..a/a
+/b/c/aa/.a..a/. /b/c/aa/.a..a
+/b/c/aa/.a..a// /b/c/aa/.a..a
+/b/c/aa/.a...aa /b/c/aa/.a...aa
+/b/c/aa/.a...a. /b/c/aa/.a...a.
+/b/c/aa/.a...a/ /b/c/aa/.a...a
+/b/c/aa/.a....a /b/c/aa/.a....a
+/b/c/aa/.a..... /b/c/aa/.a.....
+/b/c/aa/.a..../ /b/c/aa/.a....
+/b/c/aa/.a.../a /b/c/aa/.a.../a
+/b/c/aa/.a.../. /b/c/aa/.a...
+/b/c/aa/.a...// /b/c/aa/.a...
+/b/c/aa/.a../aa /b/c/aa/.a../aa
+/b/c/aa/.a../a. /b/c/aa/.a../a.
+/b/c/aa/.a../a/ /b/c/aa/.a../a
+/b/c/aa/.a../.a /b/c/aa/.a../.a
+/b/c/aa/.a../.. /b/c/aa
+/b/c/aa/.a.././ /b/c/aa/.a..
+/b/c/aa/.a..//a /b/c/aa/.a../a
+/b/c/aa/.a..//. /b/c/aa/.a..
+/b/c/aa/.a../// /b/c/aa/.a..
+/b/c/aa/.a./aaa /b/c/aa/.a./aaa
+/b/c/aa/.a./aa. /b/c/aa/.a./aa.
+/b/c/aa/.a./aa/ /b/c/aa/.a./aa
+/b/c/aa/.a./a.a /b/c/aa/.a./a.a
+/b/c/aa/.a./a.. /b/c/aa/.a./a..
+/b/c/aa/.a./a./ /b/c/aa/.a./a.
+/b/c/aa/.a./a/a /b/c/aa/.a./a/a
+/b/c/aa/.a./a/. /b/c/aa/.a./a
+/b/c/aa/.a./a// /b/c/aa/.a./a
+/b/c/aa/.a./.aa /b/c/aa/.a./.aa
+/b/c/aa/.a./.a. /b/c/aa/.a./.a.
+/b/c/aa/.a./.a/ /b/c/aa/.a./.a
+/b/c/aa/.a./..a /b/c/aa/.a./..a
+/b/c/aa/.a./... /b/c/aa/.a./...
+/b/c/aa/.a./../ /b/c/aa
+/b/c/aa/.a././a /b/c/aa/.a./a
+/b/c/aa/.a././. /b/c/aa/.a.
+/b/c/aa/.a./.// /b/c/aa/.a.
+/b/c/aa/.a.//aa /b/c/aa/.a./aa
+/b/c/aa/.a.//a. /b/c/aa/.a./a.
+/b/c/aa/.a.//a/ /b/c/aa/.a./a
+/b/c/aa/.a.//.a /b/c/aa/.a./.a
+/b/c/aa/.a.//.. /b/c/aa
+/b/c/aa/.a.//./ /b/c/aa/.a.
+/b/c/aa/.a.///a /b/c/aa/.a./a
+/b/c/aa/.a.///. /b/c/aa/.a.
+/b/c/aa/.a.//// /b/c/aa/.a.
+/b/c/aa/.a/aaaa /b/c/aa/.a/aaaa
+/b/c/aa/.a/aaa. /b/c/aa/.a/aaa.
+/b/c/aa/.a/aaa/ /b/c/aa/.a/aaa
+/b/c/aa/.a/aa.a /b/c/aa/.a/aa.a
+/b/c/aa/.a/aa.. /b/c/aa/.a/aa..
+/b/c/aa/.a/aa./ /b/c/aa/.a/aa.
+/b/c/aa/.a/aa/a /b/c/aa/.a/aa/a
+/b/c/aa/.a/aa/. /b/c/aa/.a/aa
+/b/c/aa/.a/aa// /b/c/aa/.a/aa
+/b/c/aa/.a/a.aa /b/c/aa/.a/a.aa
+/b/c/aa/.a/a.a. /b/c/aa/.a/a.a.
+/b/c/aa/.a/a.a/ /b/c/aa/.a/a.a
+/b/c/aa/.a/a..a /b/c/aa/.a/a..a
+/b/c/aa/.a/a... /b/c/aa/.a/a...
+/b/c/aa/.a/a../ /b/c/aa/.a/a..
+/b/c/aa/.a/a./a /b/c/aa/.a/a./a
+/b/c/aa/.a/a./. /b/c/aa/.a/a.
+/b/c/aa/.a/a.// /b/c/aa/.a/a.
+/b/c/aa/.a/a/aa /b/c/aa/.a/a/aa
+/b/c/aa/.a/a/a. /b/c/aa/.a/a/a.
+/b/c/aa/.a/a/a/ /b/c/aa/.a/a/a
+/b/c/aa/.a/a/.a /b/c/aa/.a/a/.a
+/b/c/aa/.a/a/.. /b/c/aa/.a
+/b/c/aa/.a/a/./ /b/c/aa/.a/a
+/b/c/aa/.a/a//a /b/c/aa/.a/a/a
+/b/c/aa/.a/a//. /b/c/aa/.a/a
+/b/c/aa/.a/a/// /b/c/aa/.a/a
+/b/c/aa/.a/.aaa /b/c/aa/.a/.aaa
+/b/c/aa/.a/.aa. /b/c/aa/.a/.aa.
+/b/c/aa/.a/.aa/ /b/c/aa/.a/.aa
+/b/c/aa/.a/.a.a /b/c/aa/.a/.a.a
+/b/c/aa/.a/.a.. /b/c/aa/.a/.a..
+/b/c/aa/.a/.a./ /b/c/aa/.a/.a.
+/b/c/aa/.a/.a/a /b/c/aa/.a/.a/a
+/b/c/aa/.a/.a/. /b/c/aa/.a/.a
+/b/c/aa/.a/.a// /b/c/aa/.a/.a
+/b/c/aa/.a/..aa /b/c/aa/.a/..aa
+/b/c/aa/.a/..a. /b/c/aa/.a/..a.
+/b/c/aa/.a/..a/ /b/c/aa/.a/..a
+/b/c/aa/.a/...a /b/c/aa/.a/...a
+/b/c/aa/.a/.... /b/c/aa/.a/....
+/b/c/aa/.a/.../ /b/c/aa/.a/...
+/b/c/aa/.a/../a /b/c/aa/a
+/b/c/aa/.a/../. /b/c/aa
+/b/c/aa/.a/..// /b/c/aa
+/b/c/aa/.a/./aa /b/c/aa/.a/aa
+/b/c/aa/.a/./a. /b/c/aa/.a/a.
+/b/c/aa/.a/./a/ /b/c/aa/.a/a
+/b/c/aa/.a/./.a /b/c/aa/.a/.a
+/b/c/aa/.a/./.. /b/c/aa
+/b/c/aa/.a/././ /b/c/aa/.a
+/b/c/aa/.a/.//a /b/c/aa/.a/a
+/b/c/aa/.a/.//. /b/c/aa/.a
+/b/c/aa/.a/./// /b/c/aa/.a
+/b/c/aa/.a//aaa /b/c/aa/.a/aaa
+/b/c/aa/.a//aa. /b/c/aa/.a/aa.
+/b/c/aa/.a//aa/ /b/c/aa/.a/aa
+/b/c/aa/.a//a.a /b/c/aa/.a/a.a
+/b/c/aa/.a//a.. /b/c/aa/.a/a..
+/b/c/aa/.a//a./ /b/c/aa/.a/a.
+/b/c/aa/.a//a/a /b/c/aa/.a/a/a
+/b/c/aa/.a//a/. /b/c/aa/.a/a
+/b/c/aa/.a//a// /b/c/aa/.a/a
+/b/c/aa/.a//.aa /b/c/aa/.a/.aa
+/b/c/aa/.a//.a. /b/c/aa/.a/.a.
+/b/c/aa/.a//.a/ /b/c/aa/.a/.a
+/b/c/aa/.a//..a /b/c/aa/.a/..a
+/b/c/aa/.a//... /b/c/aa/.a/...
+/b/c/aa/.a//../ /b/c/aa
+/b/c/aa/.a//./a /b/c/aa/.a/a
+/b/c/aa/.a//./. /b/c/aa/.a
+/b/c/aa/.a//.// /b/c/aa/.a
+/b/c/aa/.a///aa /b/c/aa/.a/aa
+/b/c/aa/.a///a. /b/c/aa/.a/a.
+/b/c/aa/.a///a/ /b/c/aa/.a/a
+/b/c/aa/.a///.a /b/c/aa/.a/.a
+/b/c/aa/.a///.. /b/c/aa
+/b/c/aa/.a///./ /b/c/aa/.a
+/b/c/aa/.a////a /b/c/aa/.a/a
+/b/c/aa/.a////. /b/c/aa/.a
+/b/c/aa/.a///// /b/c/aa/.a
+/b/c/aa/..aaaaa /b/c/aa/..aaaaa
+/b/c/aa/..aaaa. /b/c/aa/..aaaa.
+/b/c/aa/..aaaa/ /b/c/aa/..aaaa
+/b/c/aa/..aaa.a /b/c/aa/..aaa.a
+/b/c/aa/..aaa.. /b/c/aa/..aaa..
+/b/c/aa/..aaa./ /b/c/aa/..aaa.
+/b/c/aa/..aaa/a /b/c/aa/..aaa/a
+/b/c/aa/..aaa/. /b/c/aa/..aaa
+/b/c/aa/..aaa// /b/c/aa/..aaa
+/b/c/aa/..aa.aa /b/c/aa/..aa.aa
+/b/c/aa/..aa.a. /b/c/aa/..aa.a.
+/b/c/aa/..aa.a/ /b/c/aa/..aa.a
+/b/c/aa/..aa..a /b/c/aa/..aa..a
+/b/c/aa/..aa... /b/c/aa/..aa...
+/b/c/aa/..aa../ /b/c/aa/..aa..
+/b/c/aa/..aa./a /b/c/aa/..aa./a
+/b/c/aa/..aa./. /b/c/aa/..aa.
+/b/c/aa/..aa.// /b/c/aa/..aa.
+/b/c/aa/..aa/aa /b/c/aa/..aa/aa
+/b/c/aa/..aa/a. /b/c/aa/..aa/a.
+/b/c/aa/..aa/a/ /b/c/aa/..aa/a
+/b/c/aa/..aa/.a /b/c/aa/..aa/.a
+/b/c/aa/..aa/.. /b/c/aa
+/b/c/aa/..aa/./ /b/c/aa/..aa
+/b/c/aa/..aa//a /b/c/aa/..aa/a
+/b/c/aa/..aa//. /b/c/aa/..aa
+/b/c/aa/..aa/// /b/c/aa/..aa
+/b/c/aa/..a.aaa /b/c/aa/..a.aaa
+/b/c/aa/..a.aa. /b/c/aa/..a.aa.
+/b/c/aa/..a.aa/ /b/c/aa/..a.aa
+/b/c/aa/..a.a.a /b/c/aa/..a.a.a
+/b/c/aa/..a.a.. /b/c/aa/..a.a..
+/b/c/aa/..a.a./ /b/c/aa/..a.a.
+/b/c/aa/..a.a/a /b/c/aa/..a.a/a
+/b/c/aa/..a.a/. /b/c/aa/..a.a
+/b/c/aa/..a.a// /b/c/aa/..a.a
+/b/c/aa/..a..aa /b/c/aa/..a..aa
+/b/c/aa/..a..a. /b/c/aa/..a..a.
+/b/c/aa/..a..a/ /b/c/aa/..a..a
+/b/c/aa/..a...a /b/c/aa/..a...a
+/b/c/aa/..a.... /b/c/aa/..a....
+/b/c/aa/..a.../ /b/c/aa/..a...
+/b/c/aa/..a../a /b/c/aa/..a../a
+/b/c/aa/..a../. /b/c/aa/..a..
+/b/c/aa/..a..// /b/c/aa/..a..
+/b/c/aa/..a./aa /b/c/aa/..a./aa
+/b/c/aa/..a./a. /b/c/aa/..a./a.
+/b/c/aa/..a./a/ /b/c/aa/..a./a
+/b/c/aa/..a./.a /b/c/aa/..a./.a
+/b/c/aa/..a./.. /b/c/aa
+/b/c/aa/..a././ /b/c/aa/..a.
+/b/c/aa/..a.//a /b/c/aa/..a./a
+/b/c/aa/..a.//. /b/c/aa/..a.
+/b/c/aa/..a./// /b/c/aa/..a.
+/b/c/aa/..a/aaa /b/c/aa/..a/aaa
+/b/c/aa/..a/aa. /b/c/aa/..a/aa.
+/b/c/aa/..a/aa/ /b/c/aa/..a/aa
+/b/c/aa/..a/a.a /b/c/aa/..a/a.a
+/b/c/aa/..a/a.. /b/c/aa/..a/a..
+/b/c/aa/..a/a./ /b/c/aa/..a/a.
+/b/c/aa/..a/a/a /b/c/aa/..a/a/a
+/b/c/aa/..a/a/. /b/c/aa/..a/a
+/b/c/aa/..a/a// /b/c/aa/..a/a
+/b/c/aa/..a/.aa /b/c/aa/..a/.aa
+/b/c/aa/..a/.a. /b/c/aa/..a/.a.
+/b/c/aa/..a/.a/ /b/c/aa/..a/.a
+/b/c/aa/..a/..a /b/c/aa/..a/..a
+/b/c/aa/..a/... /b/c/aa/..a/...
+/b/c/aa/..a/../ /b/c/aa
+/b/c/aa/..a/./a /b/c/aa/..a/a
+/b/c/aa/..a/./. /b/c/aa/..a
+/b/c/aa/..a/.// /b/c/aa/..a
+/b/c/aa/..a//aa /b/c/aa/..a/aa
+/b/c/aa/..a//a. /b/c/aa/..a/a.
+/b/c/aa/..a//a/ /b/c/aa/..a/a
+/b/c/aa/..a//.a /b/c/aa/..a/.a
+/b/c/aa/..a//.. /b/c/aa
+/b/c/aa/..a//./ /b/c/aa/..a
+/b/c/aa/..a///a /b/c/aa/..a/a
+/b/c/aa/..a///. /b/c/aa/..a
+/b/c/aa/..a//// /b/c/aa/..a
+/b/c/aa/...aaaa /b/c/aa/...aaaa
+/b/c/aa/...aaa. /b/c/aa/...aaa.
+/b/c/aa/...aaa/ /b/c/aa/...aaa
+/b/c/aa/...aa.a /b/c/aa/...aa.a
+/b/c/aa/...aa.. /b/c/aa/...aa..
+/b/c/aa/...aa./ /b/c/aa/...aa.
+/b/c/aa/...aa/a /b/c/aa/...aa/a
+/b/c/aa/...aa/. /b/c/aa/...aa
+/b/c/aa/...aa// /b/c/aa/...aa
+/b/c/aa/...a.aa /b/c/aa/...a.aa
+/b/c/aa/...a.a. /b/c/aa/...a.a.
+/b/c/aa/...a.a/ /b/c/aa/...a.a
+/b/c/aa/...a..a /b/c/aa/...a..a
+/b/c/aa/...a... /b/c/aa/...a...
+/b/c/aa/...a../ /b/c/aa/...a..
+/b/c/aa/...a./a /b/c/aa/...a./a
+/b/c/aa/...a./. /b/c/aa/...a.
+/b/c/aa/...a.// /b/c/aa/...a.
+/b/c/aa/...a/aa /b/c/aa/...a/aa
+/b/c/aa/...a/a. /b/c/aa/...a/a.
+/b/c/aa/...a/a/ /b/c/aa/...a/a
+/b/c/aa/...a/.a /b/c/aa/...a/.a
+/b/c/aa/...a/.. /b/c/aa
+/b/c/aa/...a/./ /b/c/aa/...a
+/b/c/aa/...a//a /b/c/aa/...a/a
+/b/c/aa/...a//. /b/c/aa/...a
+/b/c/aa/...a/// /b/c/aa/...a
+/b/c/aa/....aaa /b/c/aa/....aaa
+/b/c/aa/....aa. /b/c/aa/....aa.
+/b/c/aa/....aa/ /b/c/aa/....aa
+/b/c/aa/....a.a /b/c/aa/....a.a
+/b/c/aa/....a.. /b/c/aa/....a..
+/b/c/aa/....a./ /b/c/aa/....a.
+/b/c/aa/....a/a /b/c/aa/....a/a
+/b/c/aa/....a/. /b/c/aa/....a
+/b/c/aa/....a// /b/c/aa/....a
+/b/c/aa/.....aa /b/c/aa/.....aa
+/b/c/aa/.....a. /b/c/aa/.....a.
+/b/c/aa/.....a/ /b/c/aa/.....a
+/b/c/aa/......a /b/c/aa/......a
+/b/c/aa/....... /b/c/aa/.......
+/b/c/aa/....../ /b/c/aa/......
+/b/c/aa/...../a /b/c/aa/...../a
+/b/c/aa/...../. /b/c/aa/.....
+/b/c/aa/.....// /b/c/aa/.....
+/b/c/aa/..../aa /b/c/aa/..../aa
+/b/c/aa/..../a. /b/c/aa/..../a.
+/b/c/aa/..../a/ /b/c/aa/..../a
+/b/c/aa/..../.a /b/c/aa/..../.a
+/b/c/aa/..../.. /b/c/aa
+/b/c/aa/...././ /b/c/aa/....
+/b/c/aa/....//a /b/c/aa/..../a
+/b/c/aa/....//. /b/c/aa/....
+/b/c/aa/..../// /b/c/aa/....
+/b/c/aa/.../aaa /b/c/aa/.../aaa
+/b/c/aa/.../aa. /b/c/aa/.../aa.
+/b/c/aa/.../aa/ /b/c/aa/.../aa
+/b/c/aa/.../a.a /b/c/aa/.../a.a
+/b/c/aa/.../a.. /b/c/aa/.../a..
+/b/c/aa/.../a./ /b/c/aa/.../a.
+/b/c/aa/.../a/a /b/c/aa/.../a/a
+/b/c/aa/.../a/. /b/c/aa/.../a
+/b/c/aa/.../a// /b/c/aa/.../a
+/b/c/aa/.../.aa /b/c/aa/.../.aa
+/b/c/aa/.../.a. /b/c/aa/.../.a.
+/b/c/aa/.../.a/ /b/c/aa/.../.a
+/b/c/aa/.../..a /b/c/aa/.../..a
+/b/c/aa/.../... /b/c/aa/.../...
+/b/c/aa/.../../ /b/c/aa
+/b/c/aa/..././a /b/c/aa/.../a
+/b/c/aa/..././. /b/c/aa/...
+/b/c/aa/.../.// /b/c/aa/...
+/b/c/aa/...//aa /b/c/aa/.../aa
+/b/c/aa/...//a. /b/c/aa/.../a.
+/b/c/aa/...//a/ /b/c/aa/.../a
+/b/c/aa/...//.a /b/c/aa/.../.a
+/b/c/aa/...//.. /b/c/aa
+/b/c/aa/...//./ /b/c/aa/...
+/b/c/aa/...///a /b/c/aa/.../a
+/b/c/aa/...///. /b/c/aa/...
+/b/c/aa/...//// /b/c/aa/...
+/b/c/aa/../aaaa /b/c/aaaa
+/b/c/aa/../aaa. /b/c/aaa.
+/b/c/aa/../aaa/ /b/c/aaa
+/b/c/aa/../aa.a /b/c/aa.a
+/b/c/aa/../aa.. /b/c/aa..
+/b/c/aa/../aa./ /b/c/aa.
+/b/c/aa/../aa/a /b/c/aa/a
+/b/c/aa/../aa/. /b/c/aa
+/b/c/aa/../aa// /b/c/aa
+/b/c/aa/../a.aa /b/c/a.aa
+/b/c/aa/../a.a. /b/c/a.a.
+/b/c/aa/../a.a/ /b/c/a.a
+/b/c/aa/../a..a /b/c/a..a
+/b/c/aa/../a... /b/c/a...
+/b/c/aa/../a../ /b/c/a..
+/b/c/aa/../a./a /b/c/a./a
+/b/c/aa/../a./. /b/c/a.
+/b/c/aa/../a.// /b/c/a.
+/b/c/aa/../a/aa /b/c/a/aa
+/b/c/aa/../a/a. /b/c/a/a.
+/b/c/aa/../a/a/ /b/c/a/a
+/b/c/aa/../a/.a /b/c/a/.a
+/b/c/aa/../a/.. /b/c
+/b/c/aa/../a/./ /b/c/a
+/b/c/aa/../a//a /b/c/a/a
+/b/c/aa/../a//. /b/c/a
+/b/c/aa/../a/// /b/c/a
+/b/c/aa/../.aaa /b/c/.aaa
+/b/c/aa/../.aa. /b/c/.aa.
+/b/c/aa/../.aa/ /b/c/.aa
+/b/c/aa/../.a.a /b/c/.a.a
+/b/c/aa/../.a.. /b/c/.a..
+/b/c/aa/../.a./ /b/c/.a.
+/b/c/aa/../.a/a /b/c/.a/a
+/b/c/aa/../.a/. /b/c/.a
+/b/c/aa/../.a// /b/c/.a
+/b/c/aa/../..aa /b/c/..aa
+/b/c/aa/../..a. /b/c/..a.
+/b/c/aa/../..a/ /b/c/..a
+/b/c/aa/../...a /b/c/...a
+/b/c/aa/../.... /b/c/....
+/b/c/aa/../.../ /b/c/...
+/b/c/aa/../../a /b/a
+/b/c/aa/../../. /b
+/b/c/aa/../..// /b
+/b/c/aa/.././aa /b/c/aa
+/b/c/aa/.././a. /b/c/a.
+/b/c/aa/.././a/ /b/c/a
+/b/c/aa/.././.a /b/c/.a
+/b/c/aa/.././.. /b
+/b/c/aa/../././ /b/c
+/b/c/aa/.././/a /b/c/a
+/b/c/aa/.././/. /b/c
+/b/c/aa/.././// /b/c
+/b/c/aa/..//aaa /b/c/aaa
+/b/c/aa/..//aa. /b/c/aa.
+/b/c/aa/..//aa/ /b/c/aa
+/b/c/aa/..//a.a /b/c/a.a
+/b/c/aa/..//a.. /b/c/a..
+/b/c/aa/..//a./ /b/c/a.
+/b/c/aa/..//a/a /b/c/a/a
+/b/c/aa/..//a/. /b/c/a
+/b/c/aa/..//a// /b/c/a
+/b/c/aa/..//.aa /b/c/.aa
+/b/c/aa/..//.a. /b/c/.a.
+/b/c/aa/..//.a/ /b/c/.a
+/b/c/aa/..//..a /b/c/..a
+/b/c/aa/..//... /b/c/...
+/b/c/aa/..//../ /b
+/b/c/aa/..//./a /b/c/a
+/b/c/aa/..//./. /b/c
+/b/c/aa/..//.// /b/c
+/b/c/aa/..///aa /b/c/aa
+/b/c/aa/..///a. /b/c/a.
+/b/c/aa/..///a/ /b/c/a
+/b/c/aa/..///.a /b/c/.a
+/b/c/aa/..///.. /b
+/b/c/aa/..///./ /b/c
+/b/c/aa/..////a /b/c/a
+/b/c/aa/..////. /b/c
+/b/c/aa/..///// /b/c
+/b/c/aa/./aaaaa /b/c/aa/aaaaa
+/b/c/aa/./aaaa. /b/c/aa/aaaa.
+/b/c/aa/./aaaa/ /b/c/aa/aaaa
+/b/c/aa/./aaa.a /b/c/aa/aaa.a
+/b/c/aa/./aaa.. /b/c/aa/aaa..
+/b/c/aa/./aaa./ /b/c/aa/aaa.
+/b/c/aa/./aaa/a /b/c/aa/aaa/a
+/b/c/aa/./aaa/. /b/c/aa/aaa
+/b/c/aa/./aaa// /b/c/aa/aaa
+/b/c/aa/./aa.aa /b/c/aa/aa.aa
+/b/c/aa/./aa.a. /b/c/aa/aa.a.
+/b/c/aa/./aa.a/ /b/c/aa/aa.a
+/b/c/aa/./aa..a /b/c/aa/aa..a
+/b/c/aa/./aa... /b/c/aa/aa...
+/b/c/aa/./aa../ /b/c/aa/aa..
+/b/c/aa/./aa./a /b/c/aa/aa./a
+/b/c/aa/./aa./. /b/c/aa/aa.
+/b/c/aa/./aa.// /b/c/aa/aa.
+/b/c/aa/./aa/aa /b/c/aa/aa/aa
+/b/c/aa/./aa/a. /b/c/aa/aa/a.
+/b/c/aa/./aa/a/ /b/c/aa/aa/a
+/b/c/aa/./aa/.a /b/c/aa/aa/.a
+/b/c/aa/./aa/.. /b/c/aa
+/b/c/aa/./aa/./ /b/c/aa/aa
+/b/c/aa/./aa//a /b/c/aa/aa/a
+/b/c/aa/./aa//. /b/c/aa/aa
+/b/c/aa/./aa/// /b/c/aa/aa
+/b/c/aa/./a.aaa /b/c/aa/a.aaa
+/b/c/aa/./a.aa. /b/c/aa/a.aa.
+/b/c/aa/./a.aa/ /b/c/aa/a.aa
+/b/c/aa/./a.a.a /b/c/aa/a.a.a
+/b/c/aa/./a.a.. /b/c/aa/a.a..
+/b/c/aa/./a.a./ /b/c/aa/a.a.
+/b/c/aa/./a.a/a /b/c/aa/a.a/a
+/b/c/aa/./a.a/. /b/c/aa/a.a
+/b/c/aa/./a.a// /b/c/aa/a.a
+/b/c/aa/./a..aa /b/c/aa/a..aa
+/b/c/aa/./a..a. /b/c/aa/a..a.
+/b/c/aa/./a..a/ /b/c/aa/a..a
+/b/c/aa/./a...a /b/c/aa/a...a
+/b/c/aa/./a.... /b/c/aa/a....
+/b/c/aa/./a.../ /b/c/aa/a...
+/b/c/aa/./a../a /b/c/aa/a../a
+/b/c/aa/./a../. /b/c/aa/a..
+/b/c/aa/./a..// /b/c/aa/a..
+/b/c/aa/./a./aa /b/c/aa/a./aa
+/b/c/aa/./a./a. /b/c/aa/a./a.
+/b/c/aa/./a./a/ /b/c/aa/a./a
+/b/c/aa/./a./.a /b/c/aa/a./.a
+/b/c/aa/./a./.. /b/c/aa
+/b/c/aa/./a././ /b/c/aa/a.
+/b/c/aa/./a.//a /b/c/aa/a./a
+/b/c/aa/./a.//. /b/c/aa/a.
+/b/c/aa/./a./// /b/c/aa/a.
+/b/c/aa/./a/aaa /b/c/aa/a/aaa
+/b/c/aa/./a/aa. /b/c/aa/a/aa.
+/b/c/aa/./a/aa/ /b/c/aa/a/aa
+/b/c/aa/./a/a.a /b/c/aa/a/a.a
+/b/c/aa/./a/a.. /b/c/aa/a/a..
+/b/c/aa/./a/a./ /b/c/aa/a/a.
+/b/c/aa/./a/a/a /b/c/aa/a/a/a
+/b/c/aa/./a/a/. /b/c/aa/a/a
+/b/c/aa/./a/a// /b/c/aa/a/a
+/b/c/aa/./a/.aa /b/c/aa/a/.aa
+/b/c/aa/./a/.a. /b/c/aa/a/.a.
+/b/c/aa/./a/.a/ /b/c/aa/a/.a
+/b/c/aa/./a/..a /b/c/aa/a/..a
+/b/c/aa/./a/... /b/c/aa/a/...
+/b/c/aa/./a/../ /b/c/aa
+/b/c/aa/./a/./a /b/c/aa/a/a
+/b/c/aa/./a/./. /b/c/aa/a
+/b/c/aa/./a/.// /b/c/aa/a
+/b/c/aa/./a//aa /b/c/aa/a/aa
+/b/c/aa/./a//a. /b/c/aa/a/a.
+/b/c/aa/./a//a/ /b/c/aa/a/a
+/b/c/aa/./a//.a /b/c/aa/a/.a
+/b/c/aa/./a//.. /b/c/aa
+/b/c/aa/./a//./ /b/c/aa/a
+/b/c/aa/./a///a /b/c/aa/a/a
+/b/c/aa/./a///. /b/c/aa/a
+/b/c/aa/./a//// /b/c/aa/a
+/b/c/aa/./.aaaa /b/c/aa/.aaaa
+/b/c/aa/./.aaa. /b/c/aa/.aaa.
+/b/c/aa/./.aaa/ /b/c/aa/.aaa
+/b/c/aa/./.aa.a /b/c/aa/.aa.a
+/b/c/aa/./.aa.. /b/c/aa/.aa..
+/b/c/aa/./.aa./ /b/c/aa/.aa.
+/b/c/aa/./.aa/a /b/c/aa/.aa/a
+/b/c/aa/./.aa/. /b/c/aa/.aa
+/b/c/aa/./.aa// /b/c/aa/.aa
+/b/c/aa/./.a.aa /b/c/aa/.a.aa
+/b/c/aa/./.a.a. /b/c/aa/.a.a.
+/b/c/aa/./.a.a/ /b/c/aa/.a.a
+/b/c/aa/./.a..a /b/c/aa/.a..a
+/b/c/aa/./.a... /b/c/aa/.a...
+/b/c/aa/./.a../ /b/c/aa/.a..
+/b/c/aa/./.a./a /b/c/aa/.a./a
+/b/c/aa/./.a./. /b/c/aa/.a.
+/b/c/aa/./.a.// /b/c/aa/.a.
+/b/c/aa/./.a/aa /b/c/aa/.a/aa
+/b/c/aa/./.a/a. /b/c/aa/.a/a.
+/b/c/aa/./.a/a/ /b/c/aa/.a/a
+/b/c/aa/./.a/.a /b/c/aa/.a/.a
+/b/c/aa/./.a/.. /b/c/aa
+/b/c/aa/./.a/./ /b/c/aa/.a
+/b/c/aa/./.a//a /b/c/aa/.a/a
+/b/c/aa/./.a//. /b/c/aa/.a
+/b/c/aa/./.a/// /b/c/aa/.a
+/b/c/aa/./..aaa /b/c/aa/..aaa
+/b/c/aa/./..aa. /b/c/aa/..aa.
+/b/c/aa/./..aa/ /b/c/aa/..aa
+/b/c/aa/./..a.a /b/c/aa/..a.a
+/b/c/aa/./..a.. /b/c/aa/..a..
+/b/c/aa/./..a./ /b/c/aa/..a.
+/b/c/aa/./..a/a /b/c/aa/..a/a
+/b/c/aa/./..a/. /b/c/aa/..a
+/b/c/aa/./..a// /b/c/aa/..a
+/b/c/aa/./...aa /b/c/aa/...aa
+/b/c/aa/./...a. /b/c/aa/...a.
+/b/c/aa/./...a/ /b/c/aa/...a
+/b/c/aa/./....a /b/c/aa/....a
+/b/c/aa/./..... /b/c/aa/.....
+/b/c/aa/./..../ /b/c/aa/....
+/b/c/aa/./.../a /b/c/aa/.../a
+/b/c/aa/./.../. /b/c/aa/...
+/b/c/aa/./...// /b/c/aa/...
+/b/c/aa/./../aa /b/c/aa
+/b/c/aa/./../a. /b/c/a.
+/b/c/aa/./../a/ /b/c/a
+/b/c/aa/./../.a /b/c/.a
+/b/c/aa/./../.. /b
+/b/c/aa/./.././ /b/c
+/b/c/aa/./..//a /b/c/a
+/b/c/aa/./..//. /b/c
+/b/c/aa/./../// /b/c
+/b/c/aa/././aaa /b/c/aa/aaa
+/b/c/aa/././aa. /b/c/aa/aa.
+/b/c/aa/././aa/ /b/c/aa/aa
+/b/c/aa/././a.a /b/c/aa/a.a
+/b/c/aa/././a.. /b/c/aa/a..
+/b/c/aa/././a./ /b/c/aa/a.
+/b/c/aa/././a/a /b/c/aa/a/a
+/b/c/aa/././a/. /b/c/aa/a
+/b/c/aa/././a// /b/c/aa/a
+/b/c/aa/././.aa /b/c/aa/.aa
+/b/c/aa/././.a. /b/c/aa/.a.
+/b/c/aa/././.a/ /b/c/aa/.a
+/b/c/aa/././..a /b/c/aa/..a
+/b/c/aa/././... /b/c/aa/...
+/b/c/aa/././../ /b/c
+/b/c/aa/./././a /b/c/aa/a
+/b/c/aa/./././. /b/c/aa
+/b/c/aa/././.// /b/c/aa
+/b/c/aa/././/aa /b/c/aa/aa
+/b/c/aa/././/a. /b/c/aa/a.
+/b/c/aa/././/a/ /b/c/aa/a
+/b/c/aa/././/.a /b/c/aa/.a
+/b/c/aa/././/.. /b/c
+/b/c/aa/././/./ /b/c/aa
+/b/c/aa/././//a /b/c/aa/a
+/b/c/aa/././//. /b/c/aa
+/b/c/aa/././/// /b/c/aa
+/b/c/aa/.//aaaa /b/c/aa/aaaa
+/b/c/aa/.//aaa. /b/c/aa/aaa.
+/b/c/aa/.//aaa/ /b/c/aa/aaa
+/b/c/aa/.//aa.a /b/c/aa/aa.a
+/b/c/aa/.//aa.. /b/c/aa/aa..
+/b/c/aa/.//aa./ /b/c/aa/aa.
+/b/c/aa/.//aa/a /b/c/aa/aa/a
+/b/c/aa/.//aa/. /b/c/aa/aa
+/b/c/aa/.//aa// /b/c/aa/aa
+/b/c/aa/.//a.aa /b/c/aa/a.aa
+/b/c/aa/.//a.a. /b/c/aa/a.a.
+/b/c/aa/.//a.a/ /b/c/aa/a.a
+/b/c/aa/.//a..a /b/c/aa/a..a
+/b/c/aa/.//a... /b/c/aa/a...
+/b/c/aa/.//a../ /b/c/aa/a..
+/b/c/aa/.//a./a /b/c/aa/a./a
+/b/c/aa/.//a./. /b/c/aa/a.
+/b/c/aa/.//a.// /b/c/aa/a.
+/b/c/aa/.//a/aa /b/c/aa/a/aa
+/b/c/aa/.//a/a. /b/c/aa/a/a.
+/b/c/aa/.//a/a/ /b/c/aa/a/a
+/b/c/aa/.//a/.a /b/c/aa/a/.a
+/b/c/aa/.//a/.. /b/c/aa
+/b/c/aa/.//a/./ /b/c/aa/a
+/b/c/aa/.//a//a /b/c/aa/a/a
+/b/c/aa/.//a//. /b/c/aa/a
+/b/c/aa/.//a/// /b/c/aa/a
+/b/c/aa/.//.aaa /b/c/aa/.aaa
+/b/c/aa/.//.aa. /b/c/aa/.aa.
+/b/c/aa/.//.aa/ /b/c/aa/.aa
+/b/c/aa/.//.a.a /b/c/aa/.a.a
+/b/c/aa/.//.a.. /b/c/aa/.a..
+/b/c/aa/.//.a./ /b/c/aa/.a.
+/b/c/aa/.//.a/a /b/c/aa/.a/a
+/b/c/aa/.//.a/. /b/c/aa/.a
+/b/c/aa/.//.a// /b/c/aa/.a
+/b/c/aa/.//..aa /b/c/aa/..aa
+/b/c/aa/.//..a. /b/c/aa/..a.
+/b/c/aa/.//..a/ /b/c/aa/..a
+/b/c/aa/.//...a /b/c/aa/...a
+/b/c/aa/.//.... /b/c/aa/....
+/b/c/aa/.//.../ /b/c/aa/...
+/b/c/aa/.//../a /b/c/a
+/b/c/aa/.//../. /b/c
+/b/c/aa/.//..// /b/c
+/b/c/aa/.//./aa /b/c/aa/aa
+/b/c/aa/.//./a. /b/c/aa/a.
+/b/c/aa/.//./a/ /b/c/aa/a
+/b/c/aa/.//./.a /b/c/aa/.a
+/b/c/aa/.//./.. /b/c
+/b/c/aa/.//././ /b/c/aa
+/b/c/aa/.//.//a /b/c/aa/a
+/b/c/aa/.//.//. /b/c/aa
+/b/c/aa/.//./// /b/c/aa
+/b/c/aa/.///aaa /b/c/aa/aaa
+/b/c/aa/.///aa. /b/c/aa/aa.
+/b/c/aa/.///aa/ /b/c/aa/aa
+/b/c/aa/.///a.a /b/c/aa/a.a
+/b/c/aa/.///a.. /b/c/aa/a..
+/b/c/aa/.///a./ /b/c/aa/a.
+/b/c/aa/.///a/a /b/c/aa/a/a
+/b/c/aa/.///a/. /b/c/aa/a
+/b/c/aa/.///a// /b/c/aa/a
+/b/c/aa/.///.aa /b/c/aa/.aa
+/b/c/aa/.///.a. /b/c/aa/.a.
+/b/c/aa/.///.a/ /b/c/aa/.a
+/b/c/aa/.///..a /b/c/aa/..a
+/b/c/aa/.///... /b/c/aa/...
+/b/c/aa/.///../ /b/c
+/b/c/aa/.///./a /b/c/aa/a
+/b/c/aa/.///./. /b/c/aa
+/b/c/aa/.///.// /b/c/aa
+/b/c/aa/.////aa /b/c/aa/aa
+/b/c/aa/.////a. /b/c/aa/a.
+/b/c/aa/.////a/ /b/c/aa/a
+/b/c/aa/.////.a /b/c/aa/.a
+/b/c/aa/.////.. /b/c
+/b/c/aa/.////./ /b/c/aa
+/b/c/aa/./////a /b/c/aa/a
+/b/c/aa/./////. /b/c/aa
+/b/c/aa/.////// /b/c/aa
+/b/c/aa//aaaaaa /b/c/aa/aaaaaa
+/b/c/aa//aaaaa. /b/c/aa/aaaaa.
+/b/c/aa//aaaaa/ /b/c/aa/aaaaa
+/b/c/aa//aaaa.a /b/c/aa/aaaa.a
+/b/c/aa//aaaa.. /b/c/aa/aaaa..
+/b/c/aa//aaaa./ /b/c/aa/aaaa.
+/b/c/aa//aaaa/a /b/c/aa/aaaa/a
+/b/c/aa//aaaa/. /b/c/aa/aaaa
+/b/c/aa//aaaa// /b/c/aa/aaaa
+/b/c/aa//aaa.aa /b/c/aa/aaa.aa
+/b/c/aa//aaa.a. /b/c/aa/aaa.a.
+/b/c/aa//aaa.a/ /b/c/aa/aaa.a
+/b/c/aa//aaa..a /b/c/aa/aaa..a
+/b/c/aa//aaa... /b/c/aa/aaa...
+/b/c/aa//aaa../ /b/c/aa/aaa..
+/b/c/aa//aaa./a /b/c/aa/aaa./a
+/b/c/aa//aaa./. /b/c/aa/aaa.
+/b/c/aa//aaa.// /b/c/aa/aaa.
+/b/c/aa//aaa/aa /b/c/aa/aaa/aa
+/b/c/aa//aaa/a. /b/c/aa/aaa/a.
+/b/c/aa//aaa/a/ /b/c/aa/aaa/a
+/b/c/aa//aaa/.a /b/c/aa/aaa/.a
+/b/c/aa//aaa/.. /b/c/aa
+/b/c/aa//aaa/./ /b/c/aa/aaa
+/b/c/aa//aaa//a /b/c/aa/aaa/a
+/b/c/aa//aaa//. /b/c/aa/aaa
+/b/c/aa//aaa/// /b/c/aa/aaa
+/b/c/aa//aa.aaa /b/c/aa/aa.aaa
+/b/c/aa//aa.aa. /b/c/aa/aa.aa.
+/b/c/aa//aa.aa/ /b/c/aa/aa.aa
+/b/c/aa//aa.a.a /b/c/aa/aa.a.a
+/b/c/aa//aa.a.. /b/c/aa/aa.a..
+/b/c/aa//aa.a./ /b/c/aa/aa.a.
+/b/c/aa//aa.a/a /b/c/aa/aa.a/a
+/b/c/aa//aa.a/. /b/c/aa/aa.a
+/b/c/aa//aa.a// /b/c/aa/aa.a
+/b/c/aa//aa..aa /b/c/aa/aa..aa
+/b/c/aa//aa..a. /b/c/aa/aa..a.
+/b/c/aa//aa..a/ /b/c/aa/aa..a
+/b/c/aa//aa...a /b/c/aa/aa...a
+/b/c/aa//aa.... /b/c/aa/aa....
+/b/c/aa//aa.../ /b/c/aa/aa...
+/b/c/aa//aa../a /b/c/aa/aa../a
+/b/c/aa//aa../. /b/c/aa/aa..
+/b/c/aa//aa..// /b/c/aa/aa..
+/b/c/aa//aa./aa /b/c/aa/aa./aa
+/b/c/aa//aa./a. /b/c/aa/aa./a.
+/b/c/aa//aa./a/ /b/c/aa/aa./a
+/b/c/aa//aa./.a /b/c/aa/aa./.a
+/b/c/aa//aa./.. /b/c/aa
+/b/c/aa//aa././ /b/c/aa/aa.
+/b/c/aa//aa.//a /b/c/aa/aa./a
+/b/c/aa//aa.//. /b/c/aa/aa.
+/b/c/aa//aa./// /b/c/aa/aa.
+/b/c/aa//aa/aaa /b/c/aa/aa/aaa
+/b/c/aa//aa/aa. /b/c/aa/aa/aa.
+/b/c/aa//aa/aa/ /b/c/aa/aa/aa
+/b/c/aa//aa/a.a /b/c/aa/aa/a.a
+/b/c/aa//aa/a.. /b/c/aa/aa/a..
+/b/c/aa//aa/a./ /b/c/aa/aa/a.
+/b/c/aa//aa/a/a /b/c/aa/aa/a/a
+/b/c/aa//aa/a/. /b/c/aa/aa/a
+/b/c/aa//aa/a// /b/c/aa/aa/a
+/b/c/aa//aa/.aa /b/c/aa/aa/.aa
+/b/c/aa//aa/.a. /b/c/aa/aa/.a.
+/b/c/aa//aa/.a/ /b/c/aa/aa/.a
+/b/c/aa//aa/..a /b/c/aa/aa/..a
+/b/c/aa//aa/... /b/c/aa/aa/...
+/b/c/aa//aa/../ /b/c/aa
+/b/c/aa//aa/./a /b/c/aa/aa/a
+/b/c/aa//aa/./. /b/c/aa/aa
+/b/c/aa//aa/.// /b/c/aa/aa
+/b/c/aa//aa//aa /b/c/aa/aa/aa
+/b/c/aa//aa//a. /b/c/aa/aa/a.
+/b/c/aa//aa//a/ /b/c/aa/aa/a
+/b/c/aa//aa//.a /b/c/aa/aa/.a
+/b/c/aa//aa//.. /b/c/aa
+/b/c/aa//aa//./ /b/c/aa/aa
+/b/c/aa//aa///a /b/c/aa/aa/a
+/b/c/aa//aa///. /b/c/aa/aa
+/b/c/aa//aa//// /b/c/aa/aa
+/b/c/aa//a.aaaa /b/c/aa/a.aaaa
+/b/c/aa//a.aaa. /b/c/aa/a.aaa.
+/b/c/aa//a.aaa/ /b/c/aa/a.aaa
+/b/c/aa//a.aa.a /b/c/aa/a.aa.a
+/b/c/aa//a.aa.. /b/c/aa/a.aa..
+/b/c/aa//a.aa./ /b/c/aa/a.aa.
+/b/c/aa//a.aa/a /b/c/aa/a.aa/a
+/b/c/aa//a.aa/. /b/c/aa/a.aa
+/b/c/aa//a.aa// /b/c/aa/a.aa
+/b/c/aa//a.a.aa /b/c/aa/a.a.aa
+/b/c/aa//a.a.a. /b/c/aa/a.a.a.
+/b/c/aa//a.a.a/ /b/c/aa/a.a.a
+/b/c/aa//a.a..a /b/c/aa/a.a..a
+/b/c/aa//a.a... /b/c/aa/a.a...
+/b/c/aa//a.a../ /b/c/aa/a.a..
+/b/c/aa//a.a./a /b/c/aa/a.a./a
+/b/c/aa//a.a./. /b/c/aa/a.a.
+/b/c/aa//a.a.// /b/c/aa/a.a.
+/b/c/aa//a.a/aa /b/c/aa/a.a/aa
+/b/c/aa//a.a/a. /b/c/aa/a.a/a.
+/b/c/aa//a.a/a/ /b/c/aa/a.a/a
+/b/c/aa//a.a/.a /b/c/aa/a.a/.a
+/b/c/aa//a.a/.. /b/c/aa
+/b/c/aa//a.a/./ /b/c/aa/a.a
+/b/c/aa//a.a//a /b/c/aa/a.a/a
+/b/c/aa//a.a//. /b/c/aa/a.a
+/b/c/aa//a.a/// /b/c/aa/a.a
+/b/c/aa//a..aaa /b/c/aa/a..aaa
+/b/c/aa//a..aa. /b/c/aa/a..aa.
+/b/c/aa//a..aa/ /b/c/aa/a..aa
+/b/c/aa//a..a.a /b/c/aa/a..a.a
+/b/c/aa//a..a.. /b/c/aa/a..a..
+/b/c/aa//a..a./ /b/c/aa/a..a.
+/b/c/aa//a..a/a /b/c/aa/a..a/a
+/b/c/aa//a..a/. /b/c/aa/a..a
+/b/c/aa//a..a// /b/c/aa/a..a
+/b/c/aa//a...aa /b/c/aa/a...aa
+/b/c/aa//a...a. /b/c/aa/a...a.
+/b/c/aa//a...a/ /b/c/aa/a...a
+/b/c/aa//a....a /b/c/aa/a....a
+/b/c/aa//a..... /b/c/aa/a.....
+/b/c/aa//a..../ /b/c/aa/a....
+/b/c/aa//a.../a /b/c/aa/a.../a
+/b/c/aa//a.../. /b/c/aa/a...
+/b/c/aa//a...// /b/c/aa/a...
+/b/c/aa//a../aa /b/c/aa/a../aa
+/b/c/aa//a../a. /b/c/aa/a../a.
+/b/c/aa//a../a/ /b/c/aa/a../a
+/b/c/aa//a../.a /b/c/aa/a../.a
+/b/c/aa//a../.. /b/c/aa
+/b/c/aa//a.././ /b/c/aa/a..
+/b/c/aa//a..//a /b/c/aa/a../a
+/b/c/aa//a..//. /b/c/aa/a..
+/b/c/aa//a../// /b/c/aa/a..
+/b/c/aa//a./aaa /b/c/aa/a./aaa
+/b/c/aa//a./aa. /b/c/aa/a./aa.
+/b/c/aa//a./aa/ /b/c/aa/a./aa
+/b/c/aa//a./a.a /b/c/aa/a./a.a
+/b/c/aa//a./a.. /b/c/aa/a./a..
+/b/c/aa//a./a./ /b/c/aa/a./a.
+/b/c/aa//a./a/a /b/c/aa/a./a/a
+/b/c/aa//a./a/. /b/c/aa/a./a
+/b/c/aa//a./a// /b/c/aa/a./a
+/b/c/aa//a./.aa /b/c/aa/a./.aa
+/b/c/aa//a./.a. /b/c/aa/a./.a.
+/b/c/aa//a./.a/ /b/c/aa/a./.a
+/b/c/aa//a./..a /b/c/aa/a./..a
+/b/c/aa//a./... /b/c/aa/a./...
+/b/c/aa//a./../ /b/c/aa
+/b/c/aa//a././a /b/c/aa/a./a
+/b/c/aa//a././. /b/c/aa/a.
+/b/c/aa//a./.// /b/c/aa/a.
+/b/c/aa//a.//aa /b/c/aa/a./aa
+/b/c/aa//a.//a. /b/c/aa/a./a.
+/b/c/aa//a.//a/ /b/c/aa/a./a
+/b/c/aa//a.//.a /b/c/aa/a./.a
+/b/c/aa//a.//.. /b/c/aa
+/b/c/aa//a.//./ /b/c/aa/a.
+/b/c/aa//a.///a /b/c/aa/a./a
+/b/c/aa//a.///. /b/c/aa/a.
+/b/c/aa//a.//// /b/c/aa/a.
+/b/c/aa//a/aaaa /b/c/aa/a/aaaa
+/b/c/aa//a/aaa. /b/c/aa/a/aaa.
+/b/c/aa//a/aaa/ /b/c/aa/a/aaa
+/b/c/aa//a/aa.a /b/c/aa/a/aa.a
+/b/c/aa//a/aa.. /b/c/aa/a/aa..
+/b/c/aa//a/aa./ /b/c/aa/a/aa.
+/b/c/aa//a/aa/a /b/c/aa/a/aa/a
+/b/c/aa//a/aa/. /b/c/aa/a/aa
+/b/c/aa//a/aa// /b/c/aa/a/aa
+/b/c/aa//a/a.aa /b/c/aa/a/a.aa
+/b/c/aa//a/a.a. /b/c/aa/a/a.a.
+/b/c/aa//a/a.a/ /b/c/aa/a/a.a
+/b/c/aa//a/a..a /b/c/aa/a/a..a
+/b/c/aa//a/a... /b/c/aa/a/a...
+/b/c/aa//a/a../ /b/c/aa/a/a..
+/b/c/aa//a/a./a /b/c/aa/a/a./a
+/b/c/aa//a/a./. /b/c/aa/a/a.
+/b/c/aa//a/a.// /b/c/aa/a/a.
+/b/c/aa//a/a/aa /b/c/aa/a/a/aa
+/b/c/aa//a/a/a. /b/c/aa/a/a/a.
+/b/c/aa//a/a/a/ /b/c/aa/a/a/a
+/b/c/aa//a/a/.a /b/c/aa/a/a/.a
+/b/c/aa//a/a/.. /b/c/aa/a
+/b/c/aa//a/a/./ /b/c/aa/a/a
+/b/c/aa//a/a//a /b/c/aa/a/a/a
+/b/c/aa//a/a//. /b/c/aa/a/a
+/b/c/aa//a/a/// /b/c/aa/a/a
+/b/c/aa//a/.aaa /b/c/aa/a/.aaa
+/b/c/aa//a/.aa. /b/c/aa/a/.aa.
+/b/c/aa//a/.aa/ /b/c/aa/a/.aa
+/b/c/aa//a/.a.a /b/c/aa/a/.a.a
+/b/c/aa//a/.a.. /b/c/aa/a/.a..
+/b/c/aa//a/.a./ /b/c/aa/a/.a.
+/b/c/aa//a/.a/a /b/c/aa/a/.a/a
+/b/c/aa//a/.a/. /b/c/aa/a/.a
+/b/c/aa//a/.a// /b/c/aa/a/.a
+/b/c/aa//a/..aa /b/c/aa/a/..aa
+/b/c/aa//a/..a. /b/c/aa/a/..a.
+/b/c/aa//a/..a/ /b/c/aa/a/..a
+/b/c/aa//a/...a /b/c/aa/a/...a
+/b/c/aa//a/.... /b/c/aa/a/....
+/b/c/aa//a/.../ /b/c/aa/a/...
+/b/c/aa//a/../a /b/c/aa/a
+/b/c/aa//a/../. /b/c/aa
+/b/c/aa//a/..// /b/c/aa
+/b/c/aa//a/./aa /b/c/aa/a/aa
+/b/c/aa//a/./a. /b/c/aa/a/a.
+/b/c/aa//a/./a/ /b/c/aa/a/a
+/b/c/aa//a/./.a /b/c/aa/a/.a
+/b/c/aa//a/./.. /b/c/aa
+/b/c/aa//a/././ /b/c/aa/a
+/b/c/aa//a/.//a /b/c/aa/a/a
+/b/c/aa//a/.//. /b/c/aa/a
+/b/c/aa//a/./// /b/c/aa/a
+/b/c/aa//a//aaa /b/c/aa/a/aaa
+/b/c/aa//a//aa. /b/c/aa/a/aa.
+/b/c/aa//a//aa/ /b/c/aa/a/aa
+/b/c/aa//a//a.a /b/c/aa/a/a.a
+/b/c/aa//a//a.. /b/c/aa/a/a..
+/b/c/aa//a//a./ /b/c/aa/a/a.
+/b/c/aa//a//a/a /b/c/aa/a/a/a
+/b/c/aa//a//a/. /b/c/aa/a/a
+/b/c/aa//a//a// /b/c/aa/a/a
+/b/c/aa//a//.aa /b/c/aa/a/.aa
+/b/c/aa//a//.a. /b/c/aa/a/.a.
+/b/c/aa//a//.a/ /b/c/aa/a/.a
+/b/c/aa//a//..a /b/c/aa/a/..a
+/b/c/aa//a//... /b/c/aa/a/...
+/b/c/aa//a//../ /b/c/aa
+/b/c/aa//a//./a /b/c/aa/a/a
+/b/c/aa//a//./. /b/c/aa/a
+/b/c/aa//a//.// /b/c/aa/a
+/b/c/aa//a///aa /b/c/aa/a/aa
+/b/c/aa//a///a. /b/c/aa/a/a.
+/b/c/aa//a///a/ /b/c/aa/a/a
+/b/c/aa//a///.a /b/c/aa/a/.a
+/b/c/aa//a///.. /b/c/aa
+/b/c/aa//a///./ /b/c/aa/a
+/b/c/aa//a////a /b/c/aa/a/a
+/b/c/aa//a////. /b/c/aa/a
+/b/c/aa//a///// /b/c/aa/a
+/b/c/aa//.aaaaa /b/c/aa/.aaaaa
+/b/c/aa//.aaaa. /b/c/aa/.aaaa.
+/b/c/aa//.aaaa/ /b/c/aa/.aaaa
+/b/c/aa//.aaa.a /b/c/aa/.aaa.a
+/b/c/aa//.aaa.. /b/c/aa/.aaa..
+/b/c/aa//.aaa./ /b/c/aa/.aaa.
+/b/c/aa//.aaa/a /b/c/aa/.aaa/a
+/b/c/aa//.aaa/. /b/c/aa/.aaa
+/b/c/aa//.aaa// /b/c/aa/.aaa
+/b/c/aa//.aa.aa /b/c/aa/.aa.aa
+/b/c/aa//.aa.a. /b/c/aa/.aa.a.
+/b/c/aa//.aa.a/ /b/c/aa/.aa.a
+/b/c/aa//.aa..a /b/c/aa/.aa..a
+/b/c/aa//.aa... /b/c/aa/.aa...
+/b/c/aa//.aa../ /b/c/aa/.aa..
+/b/c/aa//.aa./a /b/c/aa/.aa./a
+/b/c/aa//.aa./. /b/c/aa/.aa.
+/b/c/aa//.aa.// /b/c/aa/.aa.
+/b/c/aa//.aa/aa /b/c/aa/.aa/aa
+/b/c/aa//.aa/a. /b/c/aa/.aa/a.
+/b/c/aa//.aa/a/ /b/c/aa/.aa/a
+/b/c/aa//.aa/.a /b/c/aa/.aa/.a
+/b/c/aa//.aa/.. /b/c/aa
+/b/c/aa//.aa/./ /b/c/aa/.aa
+/b/c/aa//.aa//a /b/c/aa/.aa/a
+/b/c/aa//.aa//. /b/c/aa/.aa
+/b/c/aa//.aa/// /b/c/aa/.aa
+/b/c/aa//.a.aaa /b/c/aa/.a.aaa
+/b/c/aa//.a.aa. /b/c/aa/.a.aa.
+/b/c/aa//.a.aa/ /b/c/aa/.a.aa
+/b/c/aa//.a.a.a /b/c/aa/.a.a.a
+/b/c/aa//.a.a.. /b/c/aa/.a.a..
+/b/c/aa//.a.a./ /b/c/aa/.a.a.
+/b/c/aa//.a.a/a /b/c/aa/.a.a/a
+/b/c/aa//.a.a/. /b/c/aa/.a.a
+/b/c/aa//.a.a// /b/c/aa/.a.a
+/b/c/aa//.a..aa /b/c/aa/.a..aa
+/b/c/aa//.a..a. /b/c/aa/.a..a.
+/b/c/aa//.a..a/ /b/c/aa/.a..a
+/b/c/aa//.a...a /b/c/aa/.a...a
+/b/c/aa//.a.... /b/c/aa/.a....
+/b/c/aa//.a.../ /b/c/aa/.a...
+/b/c/aa//.a../a /b/c/aa/.a../a
+/b/c/aa//.a../. /b/c/aa/.a..
+/b/c/aa//.a..// /b/c/aa/.a..
+/b/c/aa//.a./aa /b/c/aa/.a./aa
+/b/c/aa//.a./a. /b/c/aa/.a./a.
+/b/c/aa//.a./a/ /b/c/aa/.a./a
+/b/c/aa//.a./.a /b/c/aa/.a./.a
+/b/c/aa//.a./.. /b/c/aa
+/b/c/aa//.a././ /b/c/aa/.a.
+/b/c/aa//.a.//a /b/c/aa/.a./a
+/b/c/aa//.a.//. /b/c/aa/.a.
+/b/c/aa//.a./// /b/c/aa/.a.
+/b/c/aa//.a/aaa /b/c/aa/.a/aaa
+/b/c/aa//.a/aa. /b/c/aa/.a/aa.
+/b/c/aa//.a/aa/ /b/c/aa/.a/aa
+/b/c/aa//.a/a.a /b/c/aa/.a/a.a
+/b/c/aa//.a/a.. /b/c/aa/.a/a..
+/b/c/aa//.a/a./ /b/c/aa/.a/a.
+/b/c/aa//.a/a/a /b/c/aa/.a/a/a
+/b/c/aa//.a/a/. /b/c/aa/.a/a
+/b/c/aa//.a/a// /b/c/aa/.a/a
+/b/c/aa//.a/.aa /b/c/aa/.a/.aa
+/b/c/aa//.a/.a. /b/c/aa/.a/.a.
+/b/c/aa//.a/.a/ /b/c/aa/.a/.a
+/b/c/aa//.a/..a /b/c/aa/.a/..a
+/b/c/aa//.a/... /b/c/aa/.a/...
+/b/c/aa//.a/../ /b/c/aa
+/b/c/aa//.a/./a /b/c/aa/.a/a
+/b/c/aa//.a/./. /b/c/aa/.a
+/b/c/aa//.a/.// /b/c/aa/.a
+/b/c/aa//.a//aa /b/c/aa/.a/aa
+/b/c/aa//.a//a. /b/c/aa/.a/a.
+/b/c/aa//.a//a/ /b/c/aa/.a/a
+/b/c/aa//.a//.a /b/c/aa/.a/.a
+/b/c/aa//.a//.. /b/c/aa
+/b/c/aa//.a//./ /b/c/aa/.a
+/b/c/aa//.a///a /b/c/aa/.a/a
+/b/c/aa//.a///. /b/c/aa/.a
+/b/c/aa//.a//// /b/c/aa/.a
+/b/c/aa//..aaaa /b/c/aa/..aaaa
+/b/c/aa//..aaa. /b/c/aa/..aaa.
+/b/c/aa//..aaa/ /b/c/aa/..aaa
+/b/c/aa//..aa.a /b/c/aa/..aa.a
+/b/c/aa//..aa.. /b/c/aa/..aa..
+/b/c/aa//..aa./ /b/c/aa/..aa.
+/b/c/aa//..aa/a /b/c/aa/..aa/a
+/b/c/aa//..aa/. /b/c/aa/..aa
+/b/c/aa//..aa// /b/c/aa/..aa
+/b/c/aa//..a.aa /b/c/aa/..a.aa
+/b/c/aa//..a.a. /b/c/aa/..a.a.
+/b/c/aa//..a.a/ /b/c/aa/..a.a
+/b/c/aa//..a..a /b/c/aa/..a..a
+/b/c/aa//..a... /b/c/aa/..a...
+/b/c/aa//..a../ /b/c/aa/..a..
+/b/c/aa//..a./a /b/c/aa/..a./a
+/b/c/aa//..a./. /b/c/aa/..a.
+/b/c/aa//..a.// /b/c/aa/..a.
+/b/c/aa//..a/aa /b/c/aa/..a/aa
+/b/c/aa//..a/a. /b/c/aa/..a/a.
+/b/c/aa//..a/a/ /b/c/aa/..a/a
+/b/c/aa//..a/.a /b/c/aa/..a/.a
+/b/c/aa//..a/.. /b/c/aa
+/b/c/aa//..a/./ /b/c/aa/..a
+/b/c/aa//..a//a /b/c/aa/..a/a
+/b/c/aa//..a//. /b/c/aa/..a
+/b/c/aa//..a/// /b/c/aa/..a
+/b/c/aa//...aaa /b/c/aa/...aaa
+/b/c/aa//...aa. /b/c/aa/...aa.
+/b/c/aa//...aa/ /b/c/aa/...aa
+/b/c/aa//...a.a /b/c/aa/...a.a
+/b/c/aa//...a.. /b/c/aa/...a..
+/b/c/aa//...a./ /b/c/aa/...a.
+/b/c/aa//...a/a /b/c/aa/...a/a
+/b/c/aa//...a/. /b/c/aa/...a
+/b/c/aa//...a// /b/c/aa/...a
+/b/c/aa//....aa /b/c/aa/....aa
+/b/c/aa//....a. /b/c/aa/....a.
+/b/c/aa//....a/ /b/c/aa/....a
+/b/c/aa//.....a /b/c/aa/.....a
+/b/c/aa//...... /b/c/aa/......
+/b/c/aa//...../ /b/c/aa/.....
+/b/c/aa//..../a /b/c/aa/..../a
+/b/c/aa//..../. /b/c/aa/....
+/b/c/aa//....// /b/c/aa/....
+/b/c/aa//.../aa /b/c/aa/.../aa
+/b/c/aa//.../a. /b/c/aa/.../a.
+/b/c/aa//.../a/ /b/c/aa/.../a
+/b/c/aa//.../.a /b/c/aa/.../.a
+/b/c/aa//.../.. /b/c/aa
+/b/c/aa//..././ /b/c/aa/...
+/b/c/aa//...//a /b/c/aa/.../a
+/b/c/aa//...//. /b/c/aa/...
+/b/c/aa//.../// /b/c/aa/...
+/b/c/aa//../aaa /b/c/aaa
+/b/c/aa//../aa. /b/c/aa.
+/b/c/aa//../aa/ /b/c/aa
+/b/c/aa//../a.a /b/c/a.a
+/b/c/aa//../a.. /b/c/a..
+/b/c/aa//../a./ /b/c/a.
+/b/c/aa//../a/a /b/c/a/a
+/b/c/aa//../a/. /b/c/a
+/b/c/aa//../a// /b/c/a
+/b/c/aa//../.aa /b/c/.aa
+/b/c/aa//../.a. /b/c/.a.
+/b/c/aa//../.a/ /b/c/.a
+/b/c/aa//../..a /b/c/..a
+/b/c/aa//../... /b/c/...
+/b/c/aa//../../ /b
+/b/c/aa//.././a /b/c/a
+/b/c/aa//.././. /b/c
+/b/c/aa//../.// /b/c
+/b/c/aa//..//aa /b/c/aa
+/b/c/aa//..//a. /b/c/a.
+/b/c/aa//..//a/ /b/c/a
+/b/c/aa//..//.a /b/c/.a
+/b/c/aa//..//.. /b
+/b/c/aa//..//./ /b/c
+/b/c/aa//..///a /b/c/a
+/b/c/aa//..///. /b/c
+/b/c/aa//..//// /b/c
+/b/c/aa//./aaaa /b/c/aa/aaaa
+/b/c/aa//./aaa. /b/c/aa/aaa.
+/b/c/aa//./aaa/ /b/c/aa/aaa
+/b/c/aa//./aa.a /b/c/aa/aa.a
+/b/c/aa//./aa.. /b/c/aa/aa..
+/b/c/aa//./aa./ /b/c/aa/aa.
+/b/c/aa//./aa/a /b/c/aa/aa/a
+/b/c/aa//./aa/. /b/c/aa/aa
+/b/c/aa//./aa// /b/c/aa/aa
+/b/c/aa//./a.aa /b/c/aa/a.aa
+/b/c/aa//./a.a. /b/c/aa/a.a.
+/b/c/aa//./a.a/ /b/c/aa/a.a
+/b/c/aa//./a..a /b/c/aa/a..a
+/b/c/aa//./a... /b/c/aa/a...
+/b/c/aa//./a../ /b/c/aa/a..
+/b/c/aa//./a./a /b/c/aa/a./a
+/b/c/aa//./a./. /b/c/aa/a.
+/b/c/aa//./a.// /b/c/aa/a.
+/b/c/aa//./a/aa /b/c/aa/a/aa
+/b/c/aa//./a/a. /b/c/aa/a/a.
+/b/c/aa//./a/a/ /b/c/aa/a/a
+/b/c/aa//./a/.a /b/c/aa/a/.a
+/b/c/aa//./a/.. /b/c/aa
+/b/c/aa//./a/./ /b/c/aa/a
+/b/c/aa//./a//a /b/c/aa/a/a
+/b/c/aa//./a//. /b/c/aa/a
+/b/c/aa//./a/// /b/c/aa/a
+/b/c/aa//./.aaa /b/c/aa/.aaa
+/b/c/aa//./.aa. /b/c/aa/.aa.
+/b/c/aa//./.aa/ /b/c/aa/.aa
+/b/c/aa//./.a.a /b/c/aa/.a.a
+/b/c/aa//./.a.. /b/c/aa/.a..
+/b/c/aa//./.a./ /b/c/aa/.a.
+/b/c/aa//./.a/a /b/c/aa/.a/a
+/b/c/aa//./.a/. /b/c/aa/.a
+/b/c/aa//./.a// /b/c/aa/.a
+/b/c/aa//./..aa /b/c/aa/..aa
+/b/c/aa//./..a. /b/c/aa/..a.
+/b/c/aa//./..a/ /b/c/aa/..a
+/b/c/aa//./...a /b/c/aa/...a
+/b/c/aa//./.... /b/c/aa/....
+/b/c/aa//./.../ /b/c/aa/...
+/b/c/aa//./../a /b/c/a
+/b/c/aa//./../. /b/c
+/b/c/aa//./..// /b/c
+/b/c/aa//././aa /b/c/aa/aa
+/b/c/aa//././a. /b/c/aa/a.
+/b/c/aa//././a/ /b/c/aa/a
+/b/c/aa//././.a /b/c/aa/.a
+/b/c/aa//././.. /b/c
+/b/c/aa//./././ /b/c/aa
+/b/c/aa//././/a /b/c/aa/a
+/b/c/aa//././/. /b/c/aa
+/b/c/aa//././// /b/c/aa
+/b/c/aa//.//aaa /b/c/aa/aaa
+/b/c/aa//.//aa. /b/c/aa/aa.
+/b/c/aa//.//aa/ /b/c/aa/aa
+/b/c/aa//.//a.a /b/c/aa/a.a
+/b/c/aa//.//a.. /b/c/aa/a..
+/b/c/aa//.//a./ /b/c/aa/a.
+/b/c/aa//.//a/a /b/c/aa/a/a
+/b/c/aa//.//a/. /b/c/aa/a
+/b/c/aa//.//a// /b/c/aa/a
+/b/c/aa//.//.aa /b/c/aa/.aa
+/b/c/aa//.//.a. /b/c/aa/.a.
+/b/c/aa//.//.a/ /b/c/aa/.a
+/b/c/aa//.//..a /b/c/aa/..a
+/b/c/aa//.//... /b/c/aa/...
+/b/c/aa//.//../ /b/c
+/b/c/aa//.//./a /b/c/aa/a
+/b/c/aa//.//./. /b/c/aa
+/b/c/aa//.//.// /b/c/aa
+/b/c/aa//.///aa /b/c/aa/aa
+/b/c/aa//.///a. /b/c/aa/a.
+/b/c/aa//.///a/ /b/c/aa/a
+/b/c/aa//.///.a /b/c/aa/.a
+/b/c/aa//.///.. /b/c
+/b/c/aa//.///./ /b/c/aa
+/b/c/aa//.////a /b/c/aa/a
+/b/c/aa//.////. /b/c/aa
+/b/c/aa//.///// /b/c/aa
+/b/c/aa///aaaaa /b/c/aa/aaaaa
+/b/c/aa///aaaa. /b/c/aa/aaaa.
+/b/c/aa///aaaa/ /b/c/aa/aaaa
+/b/c/aa///aaa.a /b/c/aa/aaa.a
+/b/c/aa///aaa.. /b/c/aa/aaa..
+/b/c/aa///aaa./ /b/c/aa/aaa.
+/b/c/aa///aaa/a /b/c/aa/aaa/a
+/b/c/aa///aaa/. /b/c/aa/aaa
+/b/c/aa///aaa// /b/c/aa/aaa
+/b/c/aa///aa.aa /b/c/aa/aa.aa
+/b/c/aa///aa.a. /b/c/aa/aa.a.
+/b/c/aa///aa.a/ /b/c/aa/aa.a
+/b/c/aa///aa..a /b/c/aa/aa..a
+/b/c/aa///aa... /b/c/aa/aa...
+/b/c/aa///aa../ /b/c/aa/aa..
+/b/c/aa///aa./a /b/c/aa/aa./a
+/b/c/aa///aa./. /b/c/aa/aa.
+/b/c/aa///aa.// /b/c/aa/aa.
+/b/c/aa///aa/aa /b/c/aa/aa/aa
+/b/c/aa///aa/a. /b/c/aa/aa/a.
+/b/c/aa///aa/a/ /b/c/aa/aa/a
+/b/c/aa///aa/.a /b/c/aa/aa/.a
+/b/c/aa///aa/.. /b/c/aa
+/b/c/aa///aa/./ /b/c/aa/aa
+/b/c/aa///aa//a /b/c/aa/aa/a
+/b/c/aa///aa//. /b/c/aa/aa
+/b/c/aa///aa/// /b/c/aa/aa
+/b/c/aa///a.aaa /b/c/aa/a.aaa
+/b/c/aa///a.aa. /b/c/aa/a.aa.
+/b/c/aa///a.aa/ /b/c/aa/a.aa
+/b/c/aa///a.a.a /b/c/aa/a.a.a
+/b/c/aa///a.a.. /b/c/aa/a.a..
+/b/c/aa///a.a./ /b/c/aa/a.a.
+/b/c/aa///a.a/a /b/c/aa/a.a/a
+/b/c/aa///a.a/. /b/c/aa/a.a
+/b/c/aa///a.a// /b/c/aa/a.a
+/b/c/aa///a..aa /b/c/aa/a..aa
+/b/c/aa///a..a. /b/c/aa/a..a.
+/b/c/aa///a..a/ /b/c/aa/a..a
+/b/c/aa///a...a /b/c/aa/a...a
+/b/c/aa///a.... /b/c/aa/a....
+/b/c/aa///a.../ /b/c/aa/a...
+/b/c/aa///a../a /b/c/aa/a../a
+/b/c/aa///a../. /b/c/aa/a..
+/b/c/aa///a..// /b/c/aa/a..
+/b/c/aa///a./aa /b/c/aa/a./aa
+/b/c/aa///a./a. /b/c/aa/a./a.
+/b/c/aa///a./a/ /b/c/aa/a./a
+/b/c/aa///a./.a /b/c/aa/a./.a
+/b/c/aa///a./.. /b/c/aa
+/b/c/aa///a././ /b/c/aa/a.
+/b/c/aa///a.//a /b/c/aa/a./a
+/b/c/aa///a.//. /b/c/aa/a.
+/b/c/aa///a./// /b/c/aa/a.
+/b/c/aa///a/aaa /b/c/aa/a/aaa
+/b/c/aa///a/aa. /b/c/aa/a/aa.
+/b/c/aa///a/aa/ /b/c/aa/a/aa
+/b/c/aa///a/a.a /b/c/aa/a/a.a
+/b/c/aa///a/a.. /b/c/aa/a/a..
+/b/c/aa///a/a./ /b/c/aa/a/a.
+/b/c/aa///a/a/a /b/c/aa/a/a/a
+/b/c/aa///a/a/. /b/c/aa/a/a
+/b/c/aa///a/a// /b/c/aa/a/a
+/b/c/aa///a/.aa /b/c/aa/a/.aa
+/b/c/aa///a/.a. /b/c/aa/a/.a.
+/b/c/aa///a/.a/ /b/c/aa/a/.a
+/b/c/aa///a/..a /b/c/aa/a/..a
+/b/c/aa///a/... /b/c/aa/a/...
+/b/c/aa///a/../ /b/c/aa
+/b/c/aa///a/./a /b/c/aa/a/a
+/b/c/aa///a/./. /b/c/aa/a
+/b/c/aa///a/.// /b/c/aa/a
+/b/c/aa///a//aa /b/c/aa/a/aa
+/b/c/aa///a//a. /b/c/aa/a/a.
+/b/c/aa///a//a/ /b/c/aa/a/a
+/b/c/aa///a//.a /b/c/aa/a/.a
+/b/c/aa///a//.. /b/c/aa
+/b/c/aa///a//./ /b/c/aa/a
+/b/c/aa///a///a /b/c/aa/a/a
+/b/c/aa///a///. /b/c/aa/a
+/b/c/aa///a//// /b/c/aa/a
+/b/c/aa///.aaaa /b/c/aa/.aaaa
+/b/c/aa///.aaa. /b/c/aa/.aaa.
+/b/c/aa///.aaa/ /b/c/aa/.aaa
+/b/c/aa///.aa.a /b/c/aa/.aa.a
+/b/c/aa///.aa.. /b/c/aa/.aa..
+/b/c/aa///.aa./ /b/c/aa/.aa.
+/b/c/aa///.aa/a /b/c/aa/.aa/a
+/b/c/aa///.aa/. /b/c/aa/.aa
+/b/c/aa///.aa// /b/c/aa/.aa
+/b/c/aa///.a.aa /b/c/aa/.a.aa
+/b/c/aa///.a.a. /b/c/aa/.a.a.
+/b/c/aa///.a.a/ /b/c/aa/.a.a
+/b/c/aa///.a..a /b/c/aa/.a..a
+/b/c/aa///.a... /b/c/aa/.a...
+/b/c/aa///.a../ /b/c/aa/.a..
+/b/c/aa///.a./a /b/c/aa/.a./a
+/b/c/aa///.a./. /b/c/aa/.a.
+/b/c/aa///.a.// /b/c/aa/.a.
+/b/c/aa///.a/aa /b/c/aa/.a/aa
+/b/c/aa///.a/a. /b/c/aa/.a/a.
+/b/c/aa///.a/a/ /b/c/aa/.a/a
+/b/c/aa///.a/.a /b/c/aa/.a/.a
+/b/c/aa///.a/.. /b/c/aa
+/b/c/aa///.a/./ /b/c/aa/.a
+/b/c/aa///.a//a /b/c/aa/.a/a
+/b/c/aa///.a//. /b/c/aa/.a
+/b/c/aa///.a/// /b/c/aa/.a
+/b/c/aa///..aaa /b/c/aa/..aaa
+/b/c/aa///..aa. /b/c/aa/..aa.
+/b/c/aa///..aa/ /b/c/aa/..aa
+/b/c/aa///..a.a /b/c/aa/..a.a
+/b/c/aa///..a.. /b/c/aa/..a..
+/b/c/aa///..a./ /b/c/aa/..a.
+/b/c/aa///..a/a /b/c/aa/..a/a
+/b/c/aa///..a/. /b/c/aa/..a
+/b/c/aa///..a// /b/c/aa/..a
+/b/c/aa///...aa /b/c/aa/...aa
+/b/c/aa///...a. /b/c/aa/...a.
+/b/c/aa///...a/ /b/c/aa/...a
+/b/c/aa///....a /b/c/aa/....a
+/b/c/aa///..... /b/c/aa/.....
+/b/c/aa///..../ /b/c/aa/....
+/b/c/aa///.../a /b/c/aa/.../a
+/b/c/aa///.../. /b/c/aa/...
+/b/c/aa///...// /b/c/aa/...
+/b/c/aa///../aa /b/c/aa
+/b/c/aa///../a. /b/c/a.
+/b/c/aa///../a/ /b/c/a
+/b/c/aa///../.a /b/c/.a
+/b/c/aa///../.. /b
+/b/c/aa///.././ /b/c
+/b/c/aa///..//a /b/c/a
+/b/c/aa///..//. /b/c
+/b/c/aa///../// /b/c
+/b/c/aa///./aaa /b/c/aa/aaa
+/b/c/aa///./aa. /b/c/aa/aa.
+/b/c/aa///./aa/ /b/c/aa/aa
+/b/c/aa///./a.a /b/c/aa/a.a
+/b/c/aa///./a.. /b/c/aa/a..
+/b/c/aa///./a./ /b/c/aa/a.
+/b/c/aa///./a/a /b/c/aa/a/a
+/b/c/aa///./a/. /b/c/aa/a
+/b/c/aa///./a// /b/c/aa/a
+/b/c/aa///./.aa /b/c/aa/.aa
+/b/c/aa///./.a. /b/c/aa/.a.
+/b/c/aa///./.a/ /b/c/aa/.a
+/b/c/aa///./..a /b/c/aa/..a
+/b/c/aa///./... /b/c/aa/...
+/b/c/aa///./../ /b/c
+/b/c/aa///././a /b/c/aa/a
+/b/c/aa///././. /b/c/aa
+/b/c/aa///./.// /b/c/aa
+/b/c/aa///.//aa /b/c/aa/aa
+/b/c/aa///.//a. /b/c/aa/a.
+/b/c/aa///.//a/ /b/c/aa/a
+/b/c/aa///.//.a /b/c/aa/.a
+/b/c/aa///.//.. /b/c
+/b/c/aa///.//./ /b/c/aa
+/b/c/aa///.///a /b/c/aa/a
+/b/c/aa///.///. /b/c/aa
+/b/c/aa///.//// /b/c/aa
+/b/c/aa////aaaa /b/c/aa/aaaa
+/b/c/aa////aaa. /b/c/aa/aaa.
+/b/c/aa////aaa/ /b/c/aa/aaa
+/b/c/aa////aa.a /b/c/aa/aa.a
+/b/c/aa////aa.. /b/c/aa/aa..
+/b/c/aa////aa./ /b/c/aa/aa.
+/b/c/aa////aa/a /b/c/aa/aa/a
+/b/c/aa////aa/. /b/c/aa/aa
+/b/c/aa////aa// /b/c/aa/aa
+/b/c/aa////a.aa /b/c/aa/a.aa
+/b/c/aa////a.a. /b/c/aa/a.a.
+/b/c/aa////a.a/ /b/c/aa/a.a
+/b/c/aa////a..a /b/c/aa/a..a
+/b/c/aa////a... /b/c/aa/a...
+/b/c/aa////a../ /b/c/aa/a..
+/b/c/aa////a./a /b/c/aa/a./a
+/b/c/aa////a./. /b/c/aa/a.
+/b/c/aa////a.// /b/c/aa/a.
+/b/c/aa////a/aa /b/c/aa/a/aa
+/b/c/aa////a/a. /b/c/aa/a/a.
+/b/c/aa////a/a/ /b/c/aa/a/a
+/b/c/aa////a/.a /b/c/aa/a/.a
+/b/c/aa////a/.. /b/c/aa
+/b/c/aa////a/./ /b/c/aa/a
+/b/c/aa////a//a /b/c/aa/a/a
+/b/c/aa////a//. /b/c/aa/a
+/b/c/aa////a/// /b/c/aa/a
+/b/c/aa////.aaa /b/c/aa/.aaa
+/b/c/aa////.aa. /b/c/aa/.aa.
+/b/c/aa////.aa/ /b/c/aa/.aa
+/b/c/aa////.a.a /b/c/aa/.a.a
+/b/c/aa////.a.. /b/c/aa/.a..
+/b/c/aa////.a./ /b/c/aa/.a.
+/b/c/aa////.a/a /b/c/aa/.a/a
+/b/c/aa////.a/. /b/c/aa/.a
+/b/c/aa////.a// /b/c/aa/.a
+/b/c/aa////..aa /b/c/aa/..aa
+/b/c/aa////..a. /b/c/aa/..a.
+/b/c/aa////..a/ /b/c/aa/..a
+/b/c/aa////...a /b/c/aa/...a
+/b/c/aa////.... /b/c/aa/....
+/b/c/aa////.../ /b/c/aa/...
+/b/c/aa////../a /b/c/a
+/b/c/aa////../. /b/c
+/b/c/aa////..// /b/c
+/b/c/aa////./aa /b/c/aa/aa
+/b/c/aa////./a. /b/c/aa/a.
+/b/c/aa////./a/ /b/c/aa/a
+/b/c/aa////./.a /b/c/aa/.a
+/b/c/aa////./.. /b/c
+/b/c/aa////././ /b/c/aa
+/b/c/aa////.//a /b/c/aa/a
+/b/c/aa////.//. /b/c/aa
+/b/c/aa////./// /b/c/aa
+/b/c/aa/////aaa /b/c/aa/aaa
+/b/c/aa/////aa. /b/c/aa/aa.
+/b/c/aa/////aa/ /b/c/aa/aa
+/b/c/aa/////a.a /b/c/aa/a.a
+/b/c/aa/////a.. /b/c/aa/a..
+/b/c/aa/////a./ /b/c/aa/a.
+/b/c/aa/////a/a /b/c/aa/a/a
+/b/c/aa/////a/. /b/c/aa/a
+/b/c/aa/////a// /b/c/aa/a
+/b/c/aa/////.aa /b/c/aa/.aa
+/b/c/aa/////.a. /b/c/aa/.a.
+/b/c/aa/////.a/ /b/c/aa/.a
+/b/c/aa/////..a /b/c/aa/..a
+/b/c/aa/////... /b/c/aa/...
+/b/c/aa/////../ /b/c
+/b/c/aa/////./a /b/c/aa/a
+/b/c/aa/////./. /b/c/aa
+/b/c/aa/////.// /b/c/aa
+/b/c/aa//////aa /b/c/aa/aa
+/b/c/aa//////a. /b/c/aa/a.
+/b/c/aa//////a/ /b/c/aa/a
+/b/c/aa//////.a /b/c/aa/.a
+/b/c/aa//////.. /b/c
+/b/c/aa//////./ /b/c/aa
+/b/c/aa///////a /b/c/aa/a
+/b/c/aa///////. /b/c/aa
+/b/c/aa//////// /b/c/aa
+/b/c/a.aaaaaaaa /b/c/a.aaaaaaaa
+/b/c/a.aaaaaaa. /b/c/a.aaaaaaa.
+/b/c/a.aaaaaaa/ /b/c/a.aaaaaaa
+/b/c/a.aaaaaa.a /b/c/a.aaaaaa.a
+/b/c/a.aaaaaa.. /b/c/a.aaaaaa..
+/b/c/a.aaaaaa./ /b/c/a.aaaaaa.
+/b/c/a.aaaaaa/a /b/c/a.aaaaaa/a
+/b/c/a.aaaaaa/. /b/c/a.aaaaaa
+/b/c/a.aaaaaa// /b/c/a.aaaaaa
+/b/c/a.aaaaa.aa /b/c/a.aaaaa.aa
+/b/c/a.aaaaa.a. /b/c/a.aaaaa.a.
+/b/c/a.aaaaa.a/ /b/c/a.aaaaa.a
+/b/c/a.aaaaa..a /b/c/a.aaaaa..a
+/b/c/a.aaaaa... /b/c/a.aaaaa...
+/b/c/a.aaaaa../ /b/c/a.aaaaa..
+/b/c/a.aaaaa./a /b/c/a.aaaaa./a
+/b/c/a.aaaaa./. /b/c/a.aaaaa.
+/b/c/a.aaaaa.// /b/c/a.aaaaa.
+/b/c/a.aaaaa/aa /b/c/a.aaaaa/aa
+/b/c/a.aaaaa/a. /b/c/a.aaaaa/a.
+/b/c/a.aaaaa/a/ /b/c/a.aaaaa/a
+/b/c/a.aaaaa/.a /b/c/a.aaaaa/.a
+/b/c/a.aaaaa/.. /b/c
+/b/c/a.aaaaa/./ /b/c/a.aaaaa
+/b/c/a.aaaaa//a /b/c/a.aaaaa/a
+/b/c/a.aaaaa//. /b/c/a.aaaaa
+/b/c/a.aaaaa/// /b/c/a.aaaaa
+/b/c/a.aaaa.aaa /b/c/a.aaaa.aaa
+/b/c/a.aaaa.aa. /b/c/a.aaaa.aa.
+/b/c/a.aaaa.aa/ /b/c/a.aaaa.aa
+/b/c/a.aaaa.a.a /b/c/a.aaaa.a.a
+/b/c/a.aaaa.a.. /b/c/a.aaaa.a..
+/b/c/a.aaaa.a./ /b/c/a.aaaa.a.
+/b/c/a.aaaa.a/a /b/c/a.aaaa.a/a
+/b/c/a.aaaa.a/. /b/c/a.aaaa.a
+/b/c/a.aaaa.a// /b/c/a.aaaa.a
+/b/c/a.aaaa..aa /b/c/a.aaaa..aa
+/b/c/a.aaaa..a. /b/c/a.aaaa..a.
+/b/c/a.aaaa..a/ /b/c/a.aaaa..a
+/b/c/a.aaaa...a /b/c/a.aaaa...a
+/b/c/a.aaaa.... /b/c/a.aaaa....
+/b/c/a.aaaa.../ /b/c/a.aaaa...
+/b/c/a.aaaa../a /b/c/a.aaaa../a
+/b/c/a.aaaa../. /b/c/a.aaaa..
+/b/c/a.aaaa..// /b/c/a.aaaa..
+/b/c/a.aaaa./aa /b/c/a.aaaa./aa
+/b/c/a.aaaa./a. /b/c/a.aaaa./a.
+/b/c/a.aaaa./a/ /b/c/a.aaaa./a
+/b/c/a.aaaa./.a /b/c/a.aaaa./.a
+/b/c/a.aaaa./.. /b/c
+/b/c/a.aaaa././ /b/c/a.aaaa.
+/b/c/a.aaaa.//a /b/c/a.aaaa./a
+/b/c/a.aaaa.//. /b/c/a.aaaa.
+/b/c/a.aaaa./// /b/c/a.aaaa.
+/b/c/a.aaaa/aaa /b/c/a.aaaa/aaa
+/b/c/a.aaaa/aa. /b/c/a.aaaa/aa.
+/b/c/a.aaaa/aa/ /b/c/a.aaaa/aa
+/b/c/a.aaaa/a.a /b/c/a.aaaa/a.a
+/b/c/a.aaaa/a.. /b/c/a.aaaa/a..
+/b/c/a.aaaa/a./ /b/c/a.aaaa/a.
+/b/c/a.aaaa/a/a /b/c/a.aaaa/a/a
+/b/c/a.aaaa/a/. /b/c/a.aaaa/a
+/b/c/a.aaaa/a// /b/c/a.aaaa/a
+/b/c/a.aaaa/.aa /b/c/a.aaaa/.aa
+/b/c/a.aaaa/.a. /b/c/a.aaaa/.a.
+/b/c/a.aaaa/.a/ /b/c/a.aaaa/.a
+/b/c/a.aaaa/..a /b/c/a.aaaa/..a
+/b/c/a.aaaa/... /b/c/a.aaaa/...
+/b/c/a.aaaa/../ /b/c
+/b/c/a.aaaa/./a /b/c/a.aaaa/a
+/b/c/a.aaaa/./. /b/c/a.aaaa
+/b/c/a.aaaa/.// /b/c/a.aaaa
+/b/c/a.aaaa//aa /b/c/a.aaaa/aa
+/b/c/a.aaaa//a. /b/c/a.aaaa/a.
+/b/c/a.aaaa//a/ /b/c/a.aaaa/a
+/b/c/a.aaaa//.a /b/c/a.aaaa/.a
+/b/c/a.aaaa//.. /b/c
+/b/c/a.aaaa//./ /b/c/a.aaaa
+/b/c/a.aaaa///a /b/c/a.aaaa/a
+/b/c/a.aaaa///. /b/c/a.aaaa
+/b/c/a.aaaa//// /b/c/a.aaaa
+/b/c/a.aaa.aaaa /b/c/a.aaa.aaaa
+/b/c/a.aaa.aaa. /b/c/a.aaa.aaa.
+/b/c/a.aaa.aaa/ /b/c/a.aaa.aaa
+/b/c/a.aaa.aa.a /b/c/a.aaa.aa.a
+/b/c/a.aaa.aa.. /b/c/a.aaa.aa..
+/b/c/a.aaa.aa./ /b/c/a.aaa.aa.
+/b/c/a.aaa.aa/a /b/c/a.aaa.aa/a
+/b/c/a.aaa.aa/. /b/c/a.aaa.aa
+/b/c/a.aaa.aa// /b/c/a.aaa.aa
+/b/c/a.aaa.a.aa /b/c/a.aaa.a.aa
+/b/c/a.aaa.a.a. /b/c/a.aaa.a.a.
+/b/c/a.aaa.a.a/ /b/c/a.aaa.a.a
+/b/c/a.aaa.a..a /b/c/a.aaa.a..a
+/b/c/a.aaa.a... /b/c/a.aaa.a...
+/b/c/a.aaa.a../ /b/c/a.aaa.a..
+/b/c/a.aaa.a./a /b/c/a.aaa.a./a
+/b/c/a.aaa.a./. /b/c/a.aaa.a.
+/b/c/a.aaa.a.// /b/c/a.aaa.a.
+/b/c/a.aaa.a/aa /b/c/a.aaa.a/aa
+/b/c/a.aaa.a/a. /b/c/a.aaa.a/a.
+/b/c/a.aaa.a/a/ /b/c/a.aaa.a/a
+/b/c/a.aaa.a/.a /b/c/a.aaa.a/.a
+/b/c/a.aaa.a/.. /b/c
+/b/c/a.aaa.a/./ /b/c/a.aaa.a
+/b/c/a.aaa.a//a /b/c/a.aaa.a/a
+/b/c/a.aaa.a//. /b/c/a.aaa.a
+/b/c/a.aaa.a/// /b/c/a.aaa.a
+/b/c/a.aaa..aaa /b/c/a.aaa..aaa
+/b/c/a.aaa..aa. /b/c/a.aaa..aa.
+/b/c/a.aaa..aa/ /b/c/a.aaa..aa
+/b/c/a.aaa..a.a /b/c/a.aaa..a.a
+/b/c/a.aaa..a.. /b/c/a.aaa..a..
+/b/c/a.aaa..a./ /b/c/a.aaa..a.
+/b/c/a.aaa..a/a /b/c/a.aaa..a/a
+/b/c/a.aaa..a/. /b/c/a.aaa..a
+/b/c/a.aaa..a// /b/c/a.aaa..a
+/b/c/a.aaa...aa /b/c/a.aaa...aa
+/b/c/a.aaa...a. /b/c/a.aaa...a.
+/b/c/a.aaa...a/ /b/c/a.aaa...a
+/b/c/a.aaa....a /b/c/a.aaa....a
+/b/c/a.aaa..... /b/c/a.aaa.....
+/b/c/a.aaa..../ /b/c/a.aaa....
+/b/c/a.aaa.../a /b/c/a.aaa.../a
+/b/c/a.aaa.../. /b/c/a.aaa...
+/b/c/a.aaa...// /b/c/a.aaa...
+/b/c/a.aaa../aa /b/c/a.aaa../aa
+/b/c/a.aaa../a. /b/c/a.aaa../a.
+/b/c/a.aaa../a/ /b/c/a.aaa../a
+/b/c/a.aaa../.a /b/c/a.aaa../.a
+/b/c/a.aaa../.. /b/c
+/b/c/a.aaa.././ /b/c/a.aaa..
+/b/c/a.aaa..//a /b/c/a.aaa../a
+/b/c/a.aaa..//. /b/c/a.aaa..
+/b/c/a.aaa../// /b/c/a.aaa..
+/b/c/a.aaa./aaa /b/c/a.aaa./aaa
+/b/c/a.aaa./aa. /b/c/a.aaa./aa.
+/b/c/a.aaa./aa/ /b/c/a.aaa./aa
+/b/c/a.aaa./a.a /b/c/a.aaa./a.a
+/b/c/a.aaa./a.. /b/c/a.aaa./a..
+/b/c/a.aaa./a./ /b/c/a.aaa./a.
+/b/c/a.aaa./a/a /b/c/a.aaa./a/a
+/b/c/a.aaa./a/. /b/c/a.aaa./a
+/b/c/a.aaa./a// /b/c/a.aaa./a
+/b/c/a.aaa./.aa /b/c/a.aaa./.aa
+/b/c/a.aaa./.a. /b/c/a.aaa./.a.
+/b/c/a.aaa./.a/ /b/c/a.aaa./.a
+/b/c/a.aaa./..a /b/c/a.aaa./..a
+/b/c/a.aaa./... /b/c/a.aaa./...
+/b/c/a.aaa./../ /b/c
+/b/c/a.aaa././a /b/c/a.aaa./a
+/b/c/a.aaa././. /b/c/a.aaa.
+/b/c/a.aaa./.// /b/c/a.aaa.
+/b/c/a.aaa.//aa /b/c/a.aaa./aa
+/b/c/a.aaa.//a. /b/c/a.aaa./a.
+/b/c/a.aaa.//a/ /b/c/a.aaa./a
+/b/c/a.aaa.//.a /b/c/a.aaa./.a
+/b/c/a.aaa.//.. /b/c
+/b/c/a.aaa.//./ /b/c/a.aaa.
+/b/c/a.aaa.///a /b/c/a.aaa./a
+/b/c/a.aaa.///. /b/c/a.aaa.
+/b/c/a.aaa.//// /b/c/a.aaa.
+/b/c/a.aaa/aaaa /b/c/a.aaa/aaaa
+/b/c/a.aaa/aaa. /b/c/a.aaa/aaa.
+/b/c/a.aaa/aaa/ /b/c/a.aaa/aaa
+/b/c/a.aaa/aa.a /b/c/a.aaa/aa.a
+/b/c/a.aaa/aa.. /b/c/a.aaa/aa..
+/b/c/a.aaa/aa./ /b/c/a.aaa/aa.
+/b/c/a.aaa/aa/a /b/c/a.aaa/aa/a
+/b/c/a.aaa/aa/. /b/c/a.aaa/aa
+/b/c/a.aaa/aa// /b/c/a.aaa/aa
+/b/c/a.aaa/a.aa /b/c/a.aaa/a.aa
+/b/c/a.aaa/a.a. /b/c/a.aaa/a.a.
+/b/c/a.aaa/a.a/ /b/c/a.aaa/a.a
+/b/c/a.aaa/a..a /b/c/a.aaa/a..a
+/b/c/a.aaa/a... /b/c/a.aaa/a...
+/b/c/a.aaa/a../ /b/c/a.aaa/a..
+/b/c/a.aaa/a./a /b/c/a.aaa/a./a
+/b/c/a.aaa/a./. /b/c/a.aaa/a.
+/b/c/a.aaa/a.// /b/c/a.aaa/a.
+/b/c/a.aaa/a/aa /b/c/a.aaa/a/aa
+/b/c/a.aaa/a/a. /b/c/a.aaa/a/a.
+/b/c/a.aaa/a/a/ /b/c/a.aaa/a/a
+/b/c/a.aaa/a/.a /b/c/a.aaa/a/.a
+/b/c/a.aaa/a/.. /b/c/a.aaa
+/b/c/a.aaa/a/./ /b/c/a.aaa/a
+/b/c/a.aaa/a//a /b/c/a.aaa/a/a
+/b/c/a.aaa/a//. /b/c/a.aaa/a
+/b/c/a.aaa/a/// /b/c/a.aaa/a
+/b/c/a.aaa/.aaa /b/c/a.aaa/.aaa
+/b/c/a.aaa/.aa. /b/c/a.aaa/.aa.
+/b/c/a.aaa/.aa/ /b/c/a.aaa/.aa
+/b/c/a.aaa/.a.a /b/c/a.aaa/.a.a
+/b/c/a.aaa/.a.. /b/c/a.aaa/.a..
+/b/c/a.aaa/.a./ /b/c/a.aaa/.a.
+/b/c/a.aaa/.a/a /b/c/a.aaa/.a/a
+/b/c/a.aaa/.a/. /b/c/a.aaa/.a
+/b/c/a.aaa/.a// /b/c/a.aaa/.a
+/b/c/a.aaa/..aa /b/c/a.aaa/..aa
+/b/c/a.aaa/..a. /b/c/a.aaa/..a.
+/b/c/a.aaa/..a/ /b/c/a.aaa/..a
+/b/c/a.aaa/...a /b/c/a.aaa/...a
+/b/c/a.aaa/.... /b/c/a.aaa/....
+/b/c/a.aaa/.../ /b/c/a.aaa/...
+/b/c/a.aaa/../a /b/c/a
+/b/c/a.aaa/../. /b/c
+/b/c/a.aaa/..// /b/c
+/b/c/a.aaa/./aa /b/c/a.aaa/aa
+/b/c/a.aaa/./a. /b/c/a.aaa/a.
+/b/c/a.aaa/./a/ /b/c/a.aaa/a
+/b/c/a.aaa/./.a /b/c/a.aaa/.a
+/b/c/a.aaa/./.. /b/c
+/b/c/a.aaa/././ /b/c/a.aaa
+/b/c/a.aaa/.//a /b/c/a.aaa/a
+/b/c/a.aaa/.//. /b/c/a.aaa
+/b/c/a.aaa/./// /b/c/a.aaa
+/b/c/a.aaa//aaa /b/c/a.aaa/aaa
+/b/c/a.aaa//aa. /b/c/a.aaa/aa.
+/b/c/a.aaa//aa/ /b/c/a.aaa/aa
+/b/c/a.aaa//a.a /b/c/a.aaa/a.a
+/b/c/a.aaa//a.. /b/c/a.aaa/a..
+/b/c/a.aaa//a./ /b/c/a.aaa/a.
+/b/c/a.aaa//a/a /b/c/a.aaa/a/a
+/b/c/a.aaa//a/. /b/c/a.aaa/a
+/b/c/a.aaa//a// /b/c/a.aaa/a
+/b/c/a.aaa//.aa /b/c/a.aaa/.aa
+/b/c/a.aaa//.a. /b/c/a.aaa/.a.
+/b/c/a.aaa//.a/ /b/c/a.aaa/.a
+/b/c/a.aaa//..a /b/c/a.aaa/..a
+/b/c/a.aaa//... /b/c/a.aaa/...
+/b/c/a.aaa//../ /b/c
+/b/c/a.aaa//./a /b/c/a.aaa/a
+/b/c/a.aaa//./. /b/c/a.aaa
+/b/c/a.aaa//.// /b/c/a.aaa
+/b/c/a.aaa///aa /b/c/a.aaa/aa
+/b/c/a.aaa///a. /b/c/a.aaa/a.
+/b/c/a.aaa///a/ /b/c/a.aaa/a
+/b/c/a.aaa///.a /b/c/a.aaa/.a
+/b/c/a.aaa///.. /b/c
+/b/c/a.aaa///./ /b/c/a.aaa
+/b/c/a.aaa////a /b/c/a.aaa/a
+/b/c/a.aaa////. /b/c/a.aaa
+/b/c/a.aaa///// /b/c/a.aaa
+/b/c/a.aa.aaaaa /b/c/a.aa.aaaaa
+/b/c/a.aa.aaaa. /b/c/a.aa.aaaa.
+/b/c/a.aa.aaaa/ /b/c/a.aa.aaaa
+/b/c/a.aa.aaa.a /b/c/a.aa.aaa.a
+/b/c/a.aa.aaa.. /b/c/a.aa.aaa..
+/b/c/a.aa.aaa./ /b/c/a.aa.aaa.
+/b/c/a.aa.aaa/a /b/c/a.aa.aaa/a
+/b/c/a.aa.aaa/. /b/c/a.aa.aaa
+/b/c/a.aa.aaa// /b/c/a.aa.aaa
+/b/c/a.aa.aa.aa /b/c/a.aa.aa.aa
+/b/c/a.aa.aa.a. /b/c/a.aa.aa.a.
+/b/c/a.aa.aa.a/ /b/c/a.aa.aa.a
+/b/c/a.aa.aa..a /b/c/a.aa.aa..a
+/b/c/a.aa.aa... /b/c/a.aa.aa...
+/b/c/a.aa.aa../ /b/c/a.aa.aa..
+/b/c/a.aa.aa./a /b/c/a.aa.aa./a
+/b/c/a.aa.aa./. /b/c/a.aa.aa.
+/b/c/a.aa.aa.// /b/c/a.aa.aa.
+/b/c/a.aa.aa/aa /b/c/a.aa.aa/aa
+/b/c/a.aa.aa/a. /b/c/a.aa.aa/a.
+/b/c/a.aa.aa/a/ /b/c/a.aa.aa/a
+/b/c/a.aa.aa/.a /b/c/a.aa.aa/.a
+/b/c/a.aa.aa/.. /b/c
+/b/c/a.aa.aa/./ /b/c/a.aa.aa
+/b/c/a.aa.aa//a /b/c/a.aa.aa/a
+/b/c/a.aa.aa//. /b/c/a.aa.aa
+/b/c/a.aa.aa/// /b/c/a.aa.aa
+/b/c/a.aa.a.aaa /b/c/a.aa.a.aaa
+/b/c/a.aa.a.aa. /b/c/a.aa.a.aa.
+/b/c/a.aa.a.aa/ /b/c/a.aa.a.aa
+/b/c/a.aa.a.a.a /b/c/a.aa.a.a.a
+/b/c/a.aa.a.a.. /b/c/a.aa.a.a..
+/b/c/a.aa.a.a./ /b/c/a.aa.a.a.
+/b/c/a.aa.a.a/a /b/c/a.aa.a.a/a
+/b/c/a.aa.a.a/. /b/c/a.aa.a.a
+/b/c/a.aa.a.a// /b/c/a.aa.a.a
+/b/c/a.aa.a..aa /b/c/a.aa.a..aa
+/b/c/a.aa.a..a. /b/c/a.aa.a..a.
+/b/c/a.aa.a..a/ /b/c/a.aa.a..a
+/b/c/a.aa.a...a /b/c/a.aa.a...a
+/b/c/a.aa.a.... /b/c/a.aa.a....
+/b/c/a.aa.a.../ /b/c/a.aa.a...
+/b/c/a.aa.a../a /b/c/a.aa.a../a
+/b/c/a.aa.a../. /b/c/a.aa.a..
+/b/c/a.aa.a..// /b/c/a.aa.a..
+/b/c/a.aa.a./aa /b/c/a.aa.a./aa
+/b/c/a.aa.a./a. /b/c/a.aa.a./a.
+/b/c/a.aa.a./a/ /b/c/a.aa.a./a
+/b/c/a.aa.a./.a /b/c/a.aa.a./.a
+/b/c/a.aa.a./.. /b/c
+/b/c/a.aa.a././ /b/c/a.aa.a.
+/b/c/a.aa.a.//a /b/c/a.aa.a./a
+/b/c/a.aa.a.//. /b/c/a.aa.a.
+/b/c/a.aa.a./// /b/c/a.aa.a.
+/b/c/a.aa.a/aaa /b/c/a.aa.a/aaa
+/b/c/a.aa.a/aa. /b/c/a.aa.a/aa.
+/b/c/a.aa.a/aa/ /b/c/a.aa.a/aa
+/b/c/a.aa.a/a.a /b/c/a.aa.a/a.a
+/b/c/a.aa.a/a.. /b/c/a.aa.a/a..
+/b/c/a.aa.a/a./ /b/c/a.aa.a/a.
+/b/c/a.aa.a/a/a /b/c/a.aa.a/a/a
+/b/c/a.aa.a/a/. /b/c/a.aa.a/a
+/b/c/a.aa.a/a// /b/c/a.aa.a/a
+/b/c/a.aa.a/.aa /b/c/a.aa.a/.aa
+/b/c/a.aa.a/.a. /b/c/a.aa.a/.a.
+/b/c/a.aa.a/.a/ /b/c/a.aa.a/.a
+/b/c/a.aa.a/..a /b/c/a.aa.a/..a
+/b/c/a.aa.a/... /b/c/a.aa.a/...
+/b/c/a.aa.a/../ /b/c
+/b/c/a.aa.a/./a /b/c/a.aa.a/a
+/b/c/a.aa.a/./. /b/c/a.aa.a
+/b/c/a.aa.a/.// /b/c/a.aa.a
+/b/c/a.aa.a//aa /b/c/a.aa.a/aa
+/b/c/a.aa.a//a. /b/c/a.aa.a/a.
+/b/c/a.aa.a//a/ /b/c/a.aa.a/a
+/b/c/a.aa.a//.a /b/c/a.aa.a/.a
+/b/c/a.aa.a//.. /b/c
+/b/c/a.aa.a//./ /b/c/a.aa.a
+/b/c/a.aa.a///a /b/c/a.aa.a/a
+/b/c/a.aa.a///. /b/c/a.aa.a
+/b/c/a.aa.a//// /b/c/a.aa.a
+/b/c/a.aa..aaaa /b/c/a.aa..aaaa
+/b/c/a.aa..aaa. /b/c/a.aa..aaa.
+/b/c/a.aa..aaa/ /b/c/a.aa..aaa
+/b/c/a.aa..aa.a /b/c/a.aa..aa.a
+/b/c/a.aa..aa.. /b/c/a.aa..aa..
+/b/c/a.aa..aa./ /b/c/a.aa..aa.
+/b/c/a.aa..aa/a /b/c/a.aa..aa/a
+/b/c/a.aa..aa/. /b/c/a.aa..aa
+/b/c/a.aa..aa// /b/c/a.aa..aa
+/b/c/a.aa..a.aa /b/c/a.aa..a.aa
+/b/c/a.aa..a.a. /b/c/a.aa..a.a.
+/b/c/a.aa..a.a/ /b/c/a.aa..a.a
+/b/c/a.aa..a..a /b/c/a.aa..a..a
+/b/c/a.aa..a... /b/c/a.aa..a...
+/b/c/a.aa..a../ /b/c/a.aa..a..
+/b/c/a.aa..a./a /b/c/a.aa..a./a
+/b/c/a.aa..a./. /b/c/a.aa..a.
+/b/c/a.aa..a.// /b/c/a.aa..a.
+/b/c/a.aa..a/aa /b/c/a.aa..a/aa
+/b/c/a.aa..a/a. /b/c/a.aa..a/a.
+/b/c/a.aa..a/a/ /b/c/a.aa..a/a
+/b/c/a.aa..a/.a /b/c/a.aa..a/.a
+/b/c/a.aa..a/.. /b/c
+/b/c/a.aa..a/./ /b/c/a.aa..a
+/b/c/a.aa..a//a /b/c/a.aa..a/a
+/b/c/a.aa..a//. /b/c/a.aa..a
+/b/c/a.aa..a/// /b/c/a.aa..a
+/b/c/a.aa...aaa /b/c/a.aa...aaa
+/b/c/a.aa...aa. /b/c/a.aa...aa.
+/b/c/a.aa...aa/ /b/c/a.aa...aa
+/b/c/a.aa...a.a /b/c/a.aa...a.a
+/b/c/a.aa...a.. /b/c/a.aa...a..
+/b/c/a.aa...a./ /b/c/a.aa...a.
+/b/c/a.aa...a/a /b/c/a.aa...a/a
+/b/c/a.aa...a/. /b/c/a.aa...a
+/b/c/a.aa...a// /b/c/a.aa...a
+/b/c/a.aa....aa /b/c/a.aa....aa
+/b/c/a.aa....a. /b/c/a.aa....a.
+/b/c/a.aa....a/ /b/c/a.aa....a
+/b/c/a.aa.....a /b/c/a.aa.....a
+/b/c/a.aa...... /b/c/a.aa......
+/b/c/a.aa...../ /b/c/a.aa.....
+/b/c/a.aa..../a /b/c/a.aa..../a
+/b/c/a.aa..../. /b/c/a.aa....
+/b/c/a.aa....// /b/c/a.aa....
+/b/c/a.aa.../aa /b/c/a.aa.../aa
+/b/c/a.aa.../a. /b/c/a.aa.../a.
+/b/c/a.aa.../a/ /b/c/a.aa.../a
+/b/c/a.aa.../.a /b/c/a.aa.../.a
+/b/c/a.aa.../.. /b/c
+/b/c/a.aa..././ /b/c/a.aa...
+/b/c/a.aa...//a /b/c/a.aa.../a
+/b/c/a.aa...//. /b/c/a.aa...
+/b/c/a.aa.../// /b/c/a.aa...
+/b/c/a.aa../aaa /b/c/a.aa../aaa
+/b/c/a.aa../aa. /b/c/a.aa../aa.
+/b/c/a.aa../aa/ /b/c/a.aa../aa
+/b/c/a.aa../a.a /b/c/a.aa../a.a
+/b/c/a.aa../a.. /b/c/a.aa../a..
+/b/c/a.aa../a./ /b/c/a.aa../a.
+/b/c/a.aa../a/a /b/c/a.aa../a/a
+/b/c/a.aa../a/. /b/c/a.aa../a
+/b/c/a.aa../a// /b/c/a.aa../a
+/b/c/a.aa../.aa /b/c/a.aa../.aa
+/b/c/a.aa../.a. /b/c/a.aa../.a.
+/b/c/a.aa../.a/ /b/c/a.aa../.a
+/b/c/a.aa../..a /b/c/a.aa../..a
+/b/c/a.aa../... /b/c/a.aa../...
+/b/c/a.aa../../ /b/c
+/b/c/a.aa.././a /b/c/a.aa../a
+/b/c/a.aa.././. /b/c/a.aa..
+/b/c/a.aa../.// /b/c/a.aa..
+/b/c/a.aa..//aa /b/c/a.aa../aa
+/b/c/a.aa..//a. /b/c/a.aa../a.
+/b/c/a.aa..//a/ /b/c/a.aa../a
+/b/c/a.aa..//.a /b/c/a.aa../.a
+/b/c/a.aa..//.. /b/c
+/b/c/a.aa..//./ /b/c/a.aa..
+/b/c/a.aa..///a /b/c/a.aa../a
+/b/c/a.aa..///. /b/c/a.aa..
+/b/c/a.aa..//// /b/c/a.aa..
+/b/c/a.aa./aaaa /b/c/a.aa./aaaa
+/b/c/a.aa./aaa. /b/c/a.aa./aaa.
+/b/c/a.aa./aaa/ /b/c/a.aa./aaa
+/b/c/a.aa./aa.a /b/c/a.aa./aa.a
+/b/c/a.aa./aa.. /b/c/a.aa./aa..
+/b/c/a.aa./aa./ /b/c/a.aa./aa.
+/b/c/a.aa./aa/a /b/c/a.aa./aa/a
+/b/c/a.aa./aa/. /b/c/a.aa./aa
+/b/c/a.aa./aa// /b/c/a.aa./aa
+/b/c/a.aa./a.aa /b/c/a.aa./a.aa
+/b/c/a.aa./a.a. /b/c/a.aa./a.a.
+/b/c/a.aa./a.a/ /b/c/a.aa./a.a
+/b/c/a.aa./a..a /b/c/a.aa./a..a
+/b/c/a.aa./a... /b/c/a.aa./a...
+/b/c/a.aa./a../ /b/c/a.aa./a..
+/b/c/a.aa./a./a /b/c/a.aa./a./a
+/b/c/a.aa./a./. /b/c/a.aa./a.
+/b/c/a.aa./a.// /b/c/a.aa./a.
+/b/c/a.aa./a/aa /b/c/a.aa./a/aa
+/b/c/a.aa./a/a. /b/c/a.aa./a/a.
+/b/c/a.aa./a/a/ /b/c/a.aa./a/a
+/b/c/a.aa./a/.a /b/c/a.aa./a/.a
+/b/c/a.aa./a/.. /b/c/a.aa.
+/b/c/a.aa./a/./ /b/c/a.aa./a
+/b/c/a.aa./a//a /b/c/a.aa./a/a
+/b/c/a.aa./a//. /b/c/a.aa./a
+/b/c/a.aa./a/// /b/c/a.aa./a
+/b/c/a.aa./.aaa /b/c/a.aa./.aaa
+/b/c/a.aa./.aa. /b/c/a.aa./.aa.
+/b/c/a.aa./.aa/ /b/c/a.aa./.aa
+/b/c/a.aa./.a.a /b/c/a.aa./.a.a
+/b/c/a.aa./.a.. /b/c/a.aa./.a..
+/b/c/a.aa./.a./ /b/c/a.aa./.a.
+/b/c/a.aa./.a/a /b/c/a.aa./.a/a
+/b/c/a.aa./.a/. /b/c/a.aa./.a
+/b/c/a.aa./.a// /b/c/a.aa./.a
+/b/c/a.aa./..aa /b/c/a.aa./..aa
+/b/c/a.aa./..a. /b/c/a.aa./..a.
+/b/c/a.aa./..a/ /b/c/a.aa./..a
+/b/c/a.aa./...a /b/c/a.aa./...a
+/b/c/a.aa./.... /b/c/a.aa./....
+/b/c/a.aa./.../ /b/c/a.aa./...
+/b/c/a.aa./../a /b/c/a
+/b/c/a.aa./../. /b/c
+/b/c/a.aa./..// /b/c
+/b/c/a.aa././aa /b/c/a.aa./aa
+/b/c/a.aa././a. /b/c/a.aa./a.
+/b/c/a.aa././a/ /b/c/a.aa./a
+/b/c/a.aa././.a /b/c/a.aa./.a
+/b/c/a.aa././.. /b/c
+/b/c/a.aa./././ /b/c/a.aa.
+/b/c/a.aa././/a /b/c/a.aa./a
+/b/c/a.aa././/. /b/c/a.aa.
+/b/c/a.aa././// /b/c/a.aa.
+/b/c/a.aa.//aaa /b/c/a.aa./aaa
+/b/c/a.aa.//aa. /b/c/a.aa./aa.
+/b/c/a.aa.//aa/ /b/c/a.aa./aa
+/b/c/a.aa.//a.a /b/c/a.aa./a.a
+/b/c/a.aa.//a.. /b/c/a.aa./a..
+/b/c/a.aa.//a./ /b/c/a.aa./a.
+/b/c/a.aa.//a/a /b/c/a.aa./a/a
+/b/c/a.aa.//a/. /b/c/a.aa./a
+/b/c/a.aa.//a// /b/c/a.aa./a
+/b/c/a.aa.//.aa /b/c/a.aa./.aa
+/b/c/a.aa.//.a. /b/c/a.aa./.a.
+/b/c/a.aa.//.a/ /b/c/a.aa./.a
+/b/c/a.aa.//..a /b/c/a.aa./..a
+/b/c/a.aa.//... /b/c/a.aa./...
+/b/c/a.aa.//../ /b/c
+/b/c/a.aa.//./a /b/c/a.aa./a
+/b/c/a.aa.//./. /b/c/a.aa.
+/b/c/a.aa.//.// /b/c/a.aa.
+/b/c/a.aa.///aa /b/c/a.aa./aa
+/b/c/a.aa.///a. /b/c/a.aa./a.
+/b/c/a.aa.///a/ /b/c/a.aa./a
+/b/c/a.aa.///.a /b/c/a.aa./.a
+/b/c/a.aa.///.. /b/c
+/b/c/a.aa.///./ /b/c/a.aa.
+/b/c/a.aa.////a /b/c/a.aa./a
+/b/c/a.aa.////. /b/c/a.aa.
+/b/c/a.aa.///// /b/c/a.aa.
+/b/c/a.aa/aaaaa /b/c/a.aa/aaaaa
+/b/c/a.aa/aaaa. /b/c/a.aa/aaaa.
+/b/c/a.aa/aaaa/ /b/c/a.aa/aaaa
+/b/c/a.aa/aaa.a /b/c/a.aa/aaa.a
+/b/c/a.aa/aaa.. /b/c/a.aa/aaa..
+/b/c/a.aa/aaa./ /b/c/a.aa/aaa.
+/b/c/a.aa/aaa/a /b/c/a.aa/aaa/a
+/b/c/a.aa/aaa/. /b/c/a.aa/aaa
+/b/c/a.aa/aaa// /b/c/a.aa/aaa
+/b/c/a.aa/aa.aa /b/c/a.aa/aa.aa
+/b/c/a.aa/aa.a. /b/c/a.aa/aa.a.
+/b/c/a.aa/aa.a/ /b/c/a.aa/aa.a
+/b/c/a.aa/aa..a /b/c/a.aa/aa..a
+/b/c/a.aa/aa... /b/c/a.aa/aa...
+/b/c/a.aa/aa../ /b/c/a.aa/aa..
+/b/c/a.aa/aa./a /b/c/a.aa/aa./a
+/b/c/a.aa/aa./. /b/c/a.aa/aa.
+/b/c/a.aa/aa.// /b/c/a.aa/aa.
+/b/c/a.aa/aa/aa /b/c/a.aa/aa/aa
+/b/c/a.aa/aa/a. /b/c/a.aa/aa/a.
+/b/c/a.aa/aa/a/ /b/c/a.aa/aa/a
+/b/c/a.aa/aa/.a /b/c/a.aa/aa/.a
+/b/c/a.aa/aa/.. /b/c/a.aa
+/b/c/a.aa/aa/./ /b/c/a.aa/aa
+/b/c/a.aa/aa//a /b/c/a.aa/aa/a
+/b/c/a.aa/aa//. /b/c/a.aa/aa
+/b/c/a.aa/aa/// /b/c/a.aa/aa
+/b/c/a.aa/a.aaa /b/c/a.aa/a.aaa
+/b/c/a.aa/a.aa. /b/c/a.aa/a.aa.
+/b/c/a.aa/a.aa/ /b/c/a.aa/a.aa
+/b/c/a.aa/a.a.a /b/c/a.aa/a.a.a
+/b/c/a.aa/a.a.. /b/c/a.aa/a.a..
+/b/c/a.aa/a.a./ /b/c/a.aa/a.a.
+/b/c/a.aa/a.a/a /b/c/a.aa/a.a/a
+/b/c/a.aa/a.a/. /b/c/a.aa/a.a
+/b/c/a.aa/a.a// /b/c/a.aa/a.a
+/b/c/a.aa/a..aa /b/c/a.aa/a..aa
+/b/c/a.aa/a..a. /b/c/a.aa/a..a.
+/b/c/a.aa/a..a/ /b/c/a.aa/a..a
+/b/c/a.aa/a...a /b/c/a.aa/a...a
+/b/c/a.aa/a.... /b/c/a.aa/a....
+/b/c/a.aa/a.../ /b/c/a.aa/a...
+/b/c/a.aa/a../a /b/c/a.aa/a../a
+/b/c/a.aa/a../. /b/c/a.aa/a..
+/b/c/a.aa/a..// /b/c/a.aa/a..
+/b/c/a.aa/a./aa /b/c/a.aa/a./aa
+/b/c/a.aa/a./a. /b/c/a.aa/a./a.
+/b/c/a.aa/a./a/ /b/c/a.aa/a./a
+/b/c/a.aa/a./.a /b/c/a.aa/a./.a
+/b/c/a.aa/a./.. /b/c/a.aa
+/b/c/a.aa/a././ /b/c/a.aa/a.
+/b/c/a.aa/a.//a /b/c/a.aa/a./a
+/b/c/a.aa/a.//. /b/c/a.aa/a.
+/b/c/a.aa/a./// /b/c/a.aa/a.
+/b/c/a.aa/a/aaa /b/c/a.aa/a/aaa
+/b/c/a.aa/a/aa. /b/c/a.aa/a/aa.
+/b/c/a.aa/a/aa/ /b/c/a.aa/a/aa
+/b/c/a.aa/a/a.a /b/c/a.aa/a/a.a
+/b/c/a.aa/a/a.. /b/c/a.aa/a/a..
+/b/c/a.aa/a/a./ /b/c/a.aa/a/a.
+/b/c/a.aa/a/a/a /b/c/a.aa/a/a/a
+/b/c/a.aa/a/a/. /b/c/a.aa/a/a
+/b/c/a.aa/a/a// /b/c/a.aa/a/a
+/b/c/a.aa/a/.aa /b/c/a.aa/a/.aa
+/b/c/a.aa/a/.a. /b/c/a.aa/a/.a.
+/b/c/a.aa/a/.a/ /b/c/a.aa/a/.a
+/b/c/a.aa/a/..a /b/c/a.aa/a/..a
+/b/c/a.aa/a/... /b/c/a.aa/a/...
+/b/c/a.aa/a/../ /b/c/a.aa
+/b/c/a.aa/a/./a /b/c/a.aa/a/a
+/b/c/a.aa/a/./. /b/c/a.aa/a
+/b/c/a.aa/a/.// /b/c/a.aa/a
+/b/c/a.aa/a//aa /b/c/a.aa/a/aa
+/b/c/a.aa/a//a. /b/c/a.aa/a/a.
+/b/c/a.aa/a//a/ /b/c/a.aa/a/a
+/b/c/a.aa/a//.a /b/c/a.aa/a/.a
+/b/c/a.aa/a//.. /b/c/a.aa
+/b/c/a.aa/a//./ /b/c/a.aa/a
+/b/c/a.aa/a///a /b/c/a.aa/a/a
+/b/c/a.aa/a///. /b/c/a.aa/a
+/b/c/a.aa/a//// /b/c/a.aa/a
+/b/c/a.aa/.aaaa /b/c/a.aa/.aaaa
+/b/c/a.aa/.aaa. /b/c/a.aa/.aaa.
+/b/c/a.aa/.aaa/ /b/c/a.aa/.aaa
+/b/c/a.aa/.aa.a /b/c/a.aa/.aa.a
+/b/c/a.aa/.aa.. /b/c/a.aa/.aa..
+/b/c/a.aa/.aa./ /b/c/a.aa/.aa.
+/b/c/a.aa/.aa/a /b/c/a.aa/.aa/a
+/b/c/a.aa/.aa/. /b/c/a.aa/.aa
+/b/c/a.aa/.aa// /b/c/a.aa/.aa
+/b/c/a.aa/.a.aa /b/c/a.aa/.a.aa
+/b/c/a.aa/.a.a. /b/c/a.aa/.a.a.
+/b/c/a.aa/.a.a/ /b/c/a.aa/.a.a
+/b/c/a.aa/.a..a /b/c/a.aa/.a..a
+/b/c/a.aa/.a... /b/c/a.aa/.a...
+/b/c/a.aa/.a../ /b/c/a.aa/.a..
+/b/c/a.aa/.a./a /b/c/a.aa/.a./a
+/b/c/a.aa/.a./. /b/c/a.aa/.a.
+/b/c/a.aa/.a.// /b/c/a.aa/.a.
+/b/c/a.aa/.a/aa /b/c/a.aa/.a/aa
+/b/c/a.aa/.a/a. /b/c/a.aa/.a/a.
+/b/c/a.aa/.a/a/ /b/c/a.aa/.a/a
+/b/c/a.aa/.a/.a /b/c/a.aa/.a/.a
+/b/c/a.aa/.a/.. /b/c/a.aa
+/b/c/a.aa/.a/./ /b/c/a.aa/.a
+/b/c/a.aa/.a//a /b/c/a.aa/.a/a
+/b/c/a.aa/.a//. /b/c/a.aa/.a
+/b/c/a.aa/.a/// /b/c/a.aa/.a
+/b/c/a.aa/..aaa /b/c/a.aa/..aaa
+/b/c/a.aa/..aa. /b/c/a.aa/..aa.
+/b/c/a.aa/..aa/ /b/c/a.aa/..aa
+/b/c/a.aa/..a.a /b/c/a.aa/..a.a
+/b/c/a.aa/..a.. /b/c/a.aa/..a..
+/b/c/a.aa/..a./ /b/c/a.aa/..a.
+/b/c/a.aa/..a/a /b/c/a.aa/..a/a
+/b/c/a.aa/..a/. /b/c/a.aa/..a
+/b/c/a.aa/..a// /b/c/a.aa/..a
+/b/c/a.aa/...aa /b/c/a.aa/...aa
+/b/c/a.aa/...a. /b/c/a.aa/...a.
+/b/c/a.aa/...a/ /b/c/a.aa/...a
+/b/c/a.aa/....a /b/c/a.aa/....a
+/b/c/a.aa/..... /b/c/a.aa/.....
+/b/c/a.aa/..../ /b/c/a.aa/....
+/b/c/a.aa/.../a /b/c/a.aa/.../a
+/b/c/a.aa/.../. /b/c/a.aa/...
+/b/c/a.aa/...// /b/c/a.aa/...
+/b/c/a.aa/../aa /b/c/aa
+/b/c/a.aa/../a. /b/c/a.
+/b/c/a.aa/../a/ /b/c/a
+/b/c/a.aa/../.a /b/c/.a
+/b/c/a.aa/../.. /b
+/b/c/a.aa/.././ /b/c
+/b/c/a.aa/..//a /b/c/a
+/b/c/a.aa/..//. /b/c
+/b/c/a.aa/../// /b/c
+/b/c/a.aa/./aaa /b/c/a.aa/aaa
+/b/c/a.aa/./aa. /b/c/a.aa/aa.
+/b/c/a.aa/./aa/ /b/c/a.aa/aa
+/b/c/a.aa/./a.a /b/c/a.aa/a.a
+/b/c/a.aa/./a.. /b/c/a.aa/a..
+/b/c/a.aa/./a./ /b/c/a.aa/a.
+/b/c/a.aa/./a/a /b/c/a.aa/a/a
+/b/c/a.aa/./a/. /b/c/a.aa/a
+/b/c/a.aa/./a// /b/c/a.aa/a
+/b/c/a.aa/./.aa /b/c/a.aa/.aa
+/b/c/a.aa/./.a. /b/c/a.aa/.a.
+/b/c/a.aa/./.a/ /b/c/a.aa/.a
+/b/c/a.aa/./..a /b/c/a.aa/..a
+/b/c/a.aa/./... /b/c/a.aa/...
+/b/c/a.aa/./../ /b/c
+/b/c/a.aa/././a /b/c/a.aa/a
+/b/c/a.aa/././. /b/c/a.aa
+/b/c/a.aa/./.// /b/c/a.aa
+/b/c/a.aa/.//aa /b/c/a.aa/aa
+/b/c/a.aa/.//a. /b/c/a.aa/a.
+/b/c/a.aa/.//a/ /b/c/a.aa/a
+/b/c/a.aa/.//.a /b/c/a.aa/.a
+/b/c/a.aa/.//.. /b/c
+/b/c/a.aa/.//./ /b/c/a.aa
+/b/c/a.aa/.///a /b/c/a.aa/a
+/b/c/a.aa/.///. /b/c/a.aa
+/b/c/a.aa/.//// /b/c/a.aa
+/b/c/a.aa//aaaa /b/c/a.aa/aaaa
+/b/c/a.aa//aaa. /b/c/a.aa/aaa.
+/b/c/a.aa//aaa/ /b/c/a.aa/aaa
+/b/c/a.aa//aa.a /b/c/a.aa/aa.a
+/b/c/a.aa//aa.. /b/c/a.aa/aa..
+/b/c/a.aa//aa./ /b/c/a.aa/aa.
+/b/c/a.aa//aa/a /b/c/a.aa/aa/a
+/b/c/a.aa//aa/. /b/c/a.aa/aa
+/b/c/a.aa//aa// /b/c/a.aa/aa
+/b/c/a.aa//a.aa /b/c/a.aa/a.aa
+/b/c/a.aa//a.a. /b/c/a.aa/a.a.
+/b/c/a.aa//a.a/ /b/c/a.aa/a.a
+/b/c/a.aa//a..a /b/c/a.aa/a..a
+/b/c/a.aa//a... /b/c/a.aa/a...
+/b/c/a.aa//a../ /b/c/a.aa/a..
+/b/c/a.aa//a./a /b/c/a.aa/a./a
+/b/c/a.aa//a./. /b/c/a.aa/a.
+/b/c/a.aa//a.// /b/c/a.aa/a.
+/b/c/a.aa//a/aa /b/c/a.aa/a/aa
+/b/c/a.aa//a/a. /b/c/a.aa/a/a.
+/b/c/a.aa//a/a/ /b/c/a.aa/a/a
+/b/c/a.aa//a/.a /b/c/a.aa/a/.a
+/b/c/a.aa//a/.. /b/c/a.aa
+/b/c/a.aa//a/./ /b/c/a.aa/a
+/b/c/a.aa//a//a /b/c/a.aa/a/a
+/b/c/a.aa//a//. /b/c/a.aa/a
+/b/c/a.aa//a/// /b/c/a.aa/a
+/b/c/a.aa//.aaa /b/c/a.aa/.aaa
+/b/c/a.aa//.aa. /b/c/a.aa/.aa.
+/b/c/a.aa//.aa/ /b/c/a.aa/.aa
+/b/c/a.aa//.a.a /b/c/a.aa/.a.a
+/b/c/a.aa//.a.. /b/c/a.aa/.a..
+/b/c/a.aa//.a./ /b/c/a.aa/.a.
+/b/c/a.aa//.a/a /b/c/a.aa/.a/a
+/b/c/a.aa//.a/. /b/c/a.aa/.a
+/b/c/a.aa//.a// /b/c/a.aa/.a
+/b/c/a.aa//..aa /b/c/a.aa/..aa
+/b/c/a.aa//..a. /b/c/a.aa/..a.
+/b/c/a.aa//..a/ /b/c/a.aa/..a
+/b/c/a.aa//...a /b/c/a.aa/...a
+/b/c/a.aa//.... /b/c/a.aa/....
+/b/c/a.aa//.../ /b/c/a.aa/...
+/b/c/a.aa//../a /b/c/a
+/b/c/a.aa//../. /b/c
+/b/c/a.aa//..// /b/c
+/b/c/a.aa//./aa /b/c/a.aa/aa
+/b/c/a.aa//./a. /b/c/a.aa/a.
+/b/c/a.aa//./a/ /b/c/a.aa/a
+/b/c/a.aa//./.a /b/c/a.aa/.a
+/b/c/a.aa//./.. /b/c
+/b/c/a.aa//././ /b/c/a.aa
+/b/c/a.aa//.//a /b/c/a.aa/a
+/b/c/a.aa//.//. /b/c/a.aa
+/b/c/a.aa//./// /b/c/a.aa
+/b/c/a.aa///aaa /b/c/a.aa/aaa
+/b/c/a.aa///aa. /b/c/a.aa/aa.
+/b/c/a.aa///aa/ /b/c/a.aa/aa
+/b/c/a.aa///a.a /b/c/a.aa/a.a
+/b/c/a.aa///a.. /b/c/a.aa/a..
+/b/c/a.aa///a./ /b/c/a.aa/a.
+/b/c/a.aa///a/a /b/c/a.aa/a/a
+/b/c/a.aa///a/. /b/c/a.aa/a
+/b/c/a.aa///a// /b/c/a.aa/a
+/b/c/a.aa///.aa /b/c/a.aa/.aa
+/b/c/a.aa///.a. /b/c/a.aa/.a.
+/b/c/a.aa///.a/ /b/c/a.aa/.a
+/b/c/a.aa///..a /b/c/a.aa/..a
+/b/c/a.aa///... /b/c/a.aa/...
+/b/c/a.aa///../ /b/c
+/b/c/a.aa///./a /b/c/a.aa/a
+/b/c/a.aa///./. /b/c/a.aa
+/b/c/a.aa///.// /b/c/a.aa
+/b/c/a.aa////aa /b/c/a.aa/aa
+/b/c/a.aa////a. /b/c/a.aa/a.
+/b/c/a.aa////a/ /b/c/a.aa/a
+/b/c/a.aa////.a /b/c/a.aa/.a
+/b/c/a.aa////.. /b/c
+/b/c/a.aa////./ /b/c/a.aa
+/b/c/a.aa/////a /b/c/a.aa/a
+/b/c/a.aa/////. /b/c/a.aa
+/b/c/a.aa////// /b/c/a.aa
+/b/c/a.a.aaaaaa /b/c/a.a.aaaaaa
+/b/c/a.a.aaaaa. /b/c/a.a.aaaaa.
+/b/c/a.a.aaaaa/ /b/c/a.a.aaaaa
+/b/c/a.a.aaaa.a /b/c/a.a.aaaa.a
+/b/c/a.a.aaaa.. /b/c/a.a.aaaa..
+/b/c/a.a.aaaa./ /b/c/a.a.aaaa.
+/b/c/a.a.aaaa/a /b/c/a.a.aaaa/a
+/b/c/a.a.aaaa/. /b/c/a.a.aaaa
+/b/c/a.a.aaaa// /b/c/a.a.aaaa
+/b/c/a.a.aaa.aa /b/c/a.a.aaa.aa
+/b/c/a.a.aaa.a. /b/c/a.a.aaa.a.
+/b/c/a.a.aaa.a/ /b/c/a.a.aaa.a
+/b/c/a.a.aaa..a /b/c/a.a.aaa..a
+/b/c/a.a.aaa... /b/c/a.a.aaa...
+/b/c/a.a.aaa../ /b/c/a.a.aaa..
+/b/c/a.a.aaa./a /b/c/a.a.aaa./a
+/b/c/a.a.aaa./. /b/c/a.a.aaa.
+/b/c/a.a.aaa.// /b/c/a.a.aaa.
+/b/c/a.a.aaa/aa /b/c/a.a.aaa/aa
+/b/c/a.a.aaa/a. /b/c/a.a.aaa/a.
+/b/c/a.a.aaa/a/ /b/c/a.a.aaa/a
+/b/c/a.a.aaa/.a /b/c/a.a.aaa/.a
+/b/c/a.a.aaa/.. /b/c
+/b/c/a.a.aaa/./ /b/c/a.a.aaa
+/b/c/a.a.aaa//a /b/c/a.a.aaa/a
+/b/c/a.a.aaa//. /b/c/a.a.aaa
+/b/c/a.a.aaa/// /b/c/a.a.aaa
+/b/c/a.a.aa.aaa /b/c/a.a.aa.aaa
+/b/c/a.a.aa.aa. /b/c/a.a.aa.aa.
+/b/c/a.a.aa.aa/ /b/c/a.a.aa.aa
+/b/c/a.a.aa.a.a /b/c/a.a.aa.a.a
+/b/c/a.a.aa.a.. /b/c/a.a.aa.a..
+/b/c/a.a.aa.a./ /b/c/a.a.aa.a.
+/b/c/a.a.aa.a/a /b/c/a.a.aa.a/a
+/b/c/a.a.aa.a/. /b/c/a.a.aa.a
+/b/c/a.a.aa.a// /b/c/a.a.aa.a
+/b/c/a.a.aa..aa /b/c/a.a.aa..aa
+/b/c/a.a.aa..a. /b/c/a.a.aa..a.
+/b/c/a.a.aa..a/ /b/c/a.a.aa..a
+/b/c/a.a.aa...a /b/c/a.a.aa...a
+/b/c/a.a.aa.... /b/c/a.a.aa....
+/b/c/a.a.aa.../ /b/c/a.a.aa...
+/b/c/a.a.aa../a /b/c/a.a.aa../a
+/b/c/a.a.aa../. /b/c/a.a.aa..
+/b/c/a.a.aa..// /b/c/a.a.aa..
+/b/c/a.a.aa./aa /b/c/a.a.aa./aa
+/b/c/a.a.aa./a. /b/c/a.a.aa./a.
+/b/c/a.a.aa./a/ /b/c/a.a.aa./a
+/b/c/a.a.aa./.a /b/c/a.a.aa./.a
+/b/c/a.a.aa./.. /b/c
+/b/c/a.a.aa././ /b/c/a.a.aa.
+/b/c/a.a.aa.//a /b/c/a.a.aa./a
+/b/c/a.a.aa.//. /b/c/a.a.aa.
+/b/c/a.a.aa./// /b/c/a.a.aa.
+/b/c/a.a.aa/aaa /b/c/a.a.aa/aaa
+/b/c/a.a.aa/aa. /b/c/a.a.aa/aa.
+/b/c/a.a.aa/aa/ /b/c/a.a.aa/aa
+/b/c/a.a.aa/a.a /b/c/a.a.aa/a.a
+/b/c/a.a.aa/a.. /b/c/a.a.aa/a..
+/b/c/a.a.aa/a./ /b/c/a.a.aa/a.
+/b/c/a.a.aa/a/a /b/c/a.a.aa/a/a
+/b/c/a.a.aa/a/. /b/c/a.a.aa/a
+/b/c/a.a.aa/a// /b/c/a.a.aa/a
+/b/c/a.a.aa/.aa /b/c/a.a.aa/.aa
+/b/c/a.a.aa/.a. /b/c/a.a.aa/.a.
+/b/c/a.a.aa/.a/ /b/c/a.a.aa/.a
+/b/c/a.a.aa/..a /b/c/a.a.aa/..a
+/b/c/a.a.aa/... /b/c/a.a.aa/...
+/b/c/a.a.aa/../ /b/c
+/b/c/a.a.aa/./a /b/c/a.a.aa/a
+/b/c/a.a.aa/./. /b/c/a.a.aa
+/b/c/a.a.aa/.// /b/c/a.a.aa
+/b/c/a.a.aa//aa /b/c/a.a.aa/aa
+/b/c/a.a.aa//a. /b/c/a.a.aa/a.
+/b/c/a.a.aa//a/ /b/c/a.a.aa/a
+/b/c/a.a.aa//.a /b/c/a.a.aa/.a
+/b/c/a.a.aa//.. /b/c
+/b/c/a.a.aa//./ /b/c/a.a.aa
+/b/c/a.a.aa///a /b/c/a.a.aa/a
+/b/c/a.a.aa///. /b/c/a.a.aa
+/b/c/a.a.aa//// /b/c/a.a.aa
+/b/c/a.a.a.aaaa /b/c/a.a.a.aaaa
+/b/c/a.a.a.aaa. /b/c/a.a.a.aaa.
+/b/c/a.a.a.aaa/ /b/c/a.a.a.aaa
+/b/c/a.a.a.aa.a /b/c/a.a.a.aa.a
+/b/c/a.a.a.aa.. /b/c/a.a.a.aa..
+/b/c/a.a.a.aa./ /b/c/a.a.a.aa.
+/b/c/a.a.a.aa/a /b/c/a.a.a.aa/a
+/b/c/a.a.a.aa/. /b/c/a.a.a.aa
+/b/c/a.a.a.aa// /b/c/a.a.a.aa
+/b/c/a.a.a.a.aa /b/c/a.a.a.a.aa
+/b/c/a.a.a.a.a. /b/c/a.a.a.a.a.
+/b/c/a.a.a.a.a/ /b/c/a.a.a.a.a
+/b/c/a.a.a.a..a /b/c/a.a.a.a..a
+/b/c/a.a.a.a... /b/c/a.a.a.a...
+/b/c/a.a.a.a../ /b/c/a.a.a.a..
+/b/c/a.a.a.a./a /b/c/a.a.a.a./a
+/b/c/a.a.a.a./. /b/c/a.a.a.a.
+/b/c/a.a.a.a.// /b/c/a.a.a.a.
+/b/c/a.a.a.a/aa /b/c/a.a.a.a/aa
+/b/c/a.a.a.a/a. /b/c/a.a.a.a/a.
+/b/c/a.a.a.a/a/ /b/c/a.a.a.a/a
+/b/c/a.a.a.a/.a /b/c/a.a.a.a/.a
+/b/c/a.a.a.a/.. /b/c
+/b/c/a.a.a.a/./ /b/c/a.a.a.a
+/b/c/a.a.a.a//a /b/c/a.a.a.a/a
+/b/c/a.a.a.a//. /b/c/a.a.a.a
+/b/c/a.a.a.a/// /b/c/a.a.a.a
+/b/c/a.a.a..aaa /b/c/a.a.a..aaa
+/b/c/a.a.a..aa. /b/c/a.a.a..aa.
+/b/c/a.a.a..aa/ /b/c/a.a.a..aa
+/b/c/a.a.a..a.a /b/c/a.a.a..a.a
+/b/c/a.a.a..a.. /b/c/a.a.a..a..
+/b/c/a.a.a..a./ /b/c/a.a.a..a.
+/b/c/a.a.a..a/a /b/c/a.a.a..a/a
+/b/c/a.a.a..a/. /b/c/a.a.a..a
+/b/c/a.a.a..a// /b/c/a.a.a..a
+/b/c/a.a.a...aa /b/c/a.a.a...aa
+/b/c/a.a.a...a. /b/c/a.a.a...a.
+/b/c/a.a.a...a/ /b/c/a.a.a...a
+/b/c/a.a.a....a /b/c/a.a.a....a
+/b/c/a.a.a..... /b/c/a.a.a.....
+/b/c/a.a.a..../ /b/c/a.a.a....
+/b/c/a.a.a.../a /b/c/a.a.a.../a
+/b/c/a.a.a.../. /b/c/a.a.a...
+/b/c/a.a.a...// /b/c/a.a.a...
+/b/c/a.a.a../aa /b/c/a.a.a../aa
+/b/c/a.a.a../a. /b/c/a.a.a../a.
+/b/c/a.a.a../a/ /b/c/a.a.a../a
+/b/c/a.a.a../.a /b/c/a.a.a../.a
+/b/c/a.a.a../.. /b/c
+/b/c/a.a.a.././ /b/c/a.a.a..
+/b/c/a.a.a..//a /b/c/a.a.a../a
+/b/c/a.a.a..//. /b/c/a.a.a..
+/b/c/a.a.a../// /b/c/a.a.a..
+/b/c/a.a.a./aaa /b/c/a.a.a./aaa
+/b/c/a.a.a./aa. /b/c/a.a.a./aa.
+/b/c/a.a.a./aa/ /b/c/a.a.a./aa
+/b/c/a.a.a./a.a /b/c/a.a.a./a.a
+/b/c/a.a.a./a.. /b/c/a.a.a./a..
+/b/c/a.a.a./a./ /b/c/a.a.a./a.
+/b/c/a.a.a./a/a /b/c/a.a.a./a/a
+/b/c/a.a.a./a/. /b/c/a.a.a./a
+/b/c/a.a.a./a// /b/c/a.a.a./a
+/b/c/a.a.a./.aa /b/c/a.a.a./.aa
+/b/c/a.a.a./.a. /b/c/a.a.a./.a.
+/b/c/a.a.a./.a/ /b/c/a.a.a./.a
+/b/c/a.a.a./..a /b/c/a.a.a./..a
+/b/c/a.a.a./... /b/c/a.a.a./...
+/b/c/a.a.a./../ /b/c
+/b/c/a.a.a././a /b/c/a.a.a./a
+/b/c/a.a.a././. /b/c/a.a.a.
+/b/c/a.a.a./.// /b/c/a.a.a.
+/b/c/a.a.a.//aa /b/c/a.a.a./aa
+/b/c/a.a.a.//a. /b/c/a.a.a./a.
+/b/c/a.a.a.//a/ /b/c/a.a.a./a
+/b/c/a.a.a.//.a /b/c/a.a.a./.a
+/b/c/a.a.a.//.. /b/c
+/b/c/a.a.a.//./ /b/c/a.a.a.
+/b/c/a.a.a.///a /b/c/a.a.a./a
+/b/c/a.a.a.///. /b/c/a.a.a.
+/b/c/a.a.a.//// /b/c/a.a.a.
+/b/c/a.a.a/aaaa /b/c/a.a.a/aaaa
+/b/c/a.a.a/aaa. /b/c/a.a.a/aaa.
+/b/c/a.a.a/aaa/ /b/c/a.a.a/aaa
+/b/c/a.a.a/aa.a /b/c/a.a.a/aa.a
+/b/c/a.a.a/aa.. /b/c/a.a.a/aa..
+/b/c/a.a.a/aa./ /b/c/a.a.a/aa.
+/b/c/a.a.a/aa/a /b/c/a.a.a/aa/a
+/b/c/a.a.a/aa/. /b/c/a.a.a/aa
+/b/c/a.a.a/aa// /b/c/a.a.a/aa
+/b/c/a.a.a/a.aa /b/c/a.a.a/a.aa
+/b/c/a.a.a/a.a. /b/c/a.a.a/a.a.
+/b/c/a.a.a/a.a/ /b/c/a.a.a/a.a
+/b/c/a.a.a/a..a /b/c/a.a.a/a..a
+/b/c/a.a.a/a... /b/c/a.a.a/a...
+/b/c/a.a.a/a../ /b/c/a.a.a/a..
+/b/c/a.a.a/a./a /b/c/a.a.a/a./a
+/b/c/a.a.a/a./. /b/c/a.a.a/a.
+/b/c/a.a.a/a.// /b/c/a.a.a/a.
+/b/c/a.a.a/a/aa /b/c/a.a.a/a/aa
+/b/c/a.a.a/a/a. /b/c/a.a.a/a/a.
+/b/c/a.a.a/a/a/ /b/c/a.a.a/a/a
+/b/c/a.a.a/a/.a /b/c/a.a.a/a/.a
+/b/c/a.a.a/a/.. /b/c/a.a.a
+/b/c/a.a.a/a/./ /b/c/a.a.a/a
+/b/c/a.a.a/a//a /b/c/a.a.a/a/a
+/b/c/a.a.a/a//. /b/c/a.a.a/a
+/b/c/a.a.a/a/// /b/c/a.a.a/a
+/b/c/a.a.a/.aaa /b/c/a.a.a/.aaa
+/b/c/a.a.a/.aa. /b/c/a.a.a/.aa.
+/b/c/a.a.a/.aa/ /b/c/a.a.a/.aa
+/b/c/a.a.a/.a.a /b/c/a.a.a/.a.a
+/b/c/a.a.a/.a.. /b/c/a.a.a/.a..
+/b/c/a.a.a/.a./ /b/c/a.a.a/.a.
+/b/c/a.a.a/.a/a /b/c/a.a.a/.a/a
+/b/c/a.a.a/.a/. /b/c/a.a.a/.a
+/b/c/a.a.a/.a// /b/c/a.a.a/.a
+/b/c/a.a.a/..aa /b/c/a.a.a/..aa
+/b/c/a.a.a/..a. /b/c/a.a.a/..a.
+/b/c/a.a.a/..a/ /b/c/a.a.a/..a
+/b/c/a.a.a/...a /b/c/a.a.a/...a
+/b/c/a.a.a/.... /b/c/a.a.a/....
+/b/c/a.a.a/.../ /b/c/a.a.a/...
+/b/c/a.a.a/../a /b/c/a
+/b/c/a.a.a/../. /b/c
+/b/c/a.a.a/..// /b/c
+/b/c/a.a.a/./aa /b/c/a.a.a/aa
+/b/c/a.a.a/./a. /b/c/a.a.a/a.
+/b/c/a.a.a/./a/ /b/c/a.a.a/a
+/b/c/a.a.a/./.a /b/c/a.a.a/.a
+/b/c/a.a.a/./.. /b/c
+/b/c/a.a.a/././ /b/c/a.a.a
+/b/c/a.a.a/.//a /b/c/a.a.a/a
+/b/c/a.a.a/.//. /b/c/a.a.a
+/b/c/a.a.a/./// /b/c/a.a.a
+/b/c/a.a.a//aaa /b/c/a.a.a/aaa
+/b/c/a.a.a//aa. /b/c/a.a.a/aa.
+/b/c/a.a.a//aa/ /b/c/a.a.a/aa
+/b/c/a.a.a//a.a /b/c/a.a.a/a.a
+/b/c/a.a.a//a.. /b/c/a.a.a/a..
+/b/c/a.a.a//a./ /b/c/a.a.a/a.
+/b/c/a.a.a//a/a /b/c/a.a.a/a/a
+/b/c/a.a.a//a/. /b/c/a.a.a/a
+/b/c/a.a.a//a// /b/c/a.a.a/a
+/b/c/a.a.a//.aa /b/c/a.a.a/.aa
+/b/c/a.a.a//.a. /b/c/a.a.a/.a.
+/b/c/a.a.a//.a/ /b/c/a.a.a/.a
+/b/c/a.a.a//..a /b/c/a.a.a/..a
+/b/c/a.a.a//... /b/c/a.a.a/...
+/b/c/a.a.a//../ /b/c
+/b/c/a.a.a//./a /b/c/a.a.a/a
+/b/c/a.a.a//./. /b/c/a.a.a
+/b/c/a.a.a//.// /b/c/a.a.a
+/b/c/a.a.a///aa /b/c/a.a.a/aa
+/b/c/a.a.a///a. /b/c/a.a.a/a.
+/b/c/a.a.a///a/ /b/c/a.a.a/a
+/b/c/a.a.a///.a /b/c/a.a.a/.a
+/b/c/a.a.a///.. /b/c
+/b/c/a.a.a///./ /b/c/a.a.a
+/b/c/a.a.a////a /b/c/a.a.a/a
+/b/c/a.a.a////. /b/c/a.a.a
+/b/c/a.a.a///// /b/c/a.a.a
+/b/c/a.a..aaaaa /b/c/a.a..aaaaa
+/b/c/a.a..aaaa. /b/c/a.a..aaaa.
+/b/c/a.a..aaaa/ /b/c/a.a..aaaa
+/b/c/a.a..aaa.a /b/c/a.a..aaa.a
+/b/c/a.a..aaa.. /b/c/a.a..aaa..
+/b/c/a.a..aaa./ /b/c/a.a..aaa.
+/b/c/a.a..aaa/a /b/c/a.a..aaa/a
+/b/c/a.a..aaa/. /b/c/a.a..aaa
+/b/c/a.a..aaa// /b/c/a.a..aaa
+/b/c/a.a..aa.aa /b/c/a.a..aa.aa
+/b/c/a.a..aa.a. /b/c/a.a..aa.a.
+/b/c/a.a..aa.a/ /b/c/a.a..aa.a
+/b/c/a.a..aa..a /b/c/a.a..aa..a
+/b/c/a.a..aa... /b/c/a.a..aa...
+/b/c/a.a..aa../ /b/c/a.a..aa..
+/b/c/a.a..aa./a /b/c/a.a..aa./a
+/b/c/a.a..aa./. /b/c/a.a..aa.
+/b/c/a.a..aa.// /b/c/a.a..aa.
+/b/c/a.a..aa/aa /b/c/a.a..aa/aa
+/b/c/a.a..aa/a. /b/c/a.a..aa/a.
+/b/c/a.a..aa/a/ /b/c/a.a..aa/a
+/b/c/a.a..aa/.a /b/c/a.a..aa/.a
+/b/c/a.a..aa/.. /b/c
+/b/c/a.a..aa/./ /b/c/a.a..aa
+/b/c/a.a..aa//a /b/c/a.a..aa/a
+/b/c/a.a..aa//. /b/c/a.a..aa
+/b/c/a.a..aa/// /b/c/a.a..aa
+/b/c/a.a..a.aaa /b/c/a.a..a.aaa
+/b/c/a.a..a.aa. /b/c/a.a..a.aa.
+/b/c/a.a..a.aa/ /b/c/a.a..a.aa
+/b/c/a.a..a.a.a /b/c/a.a..a.a.a
+/b/c/a.a..a.a.. /b/c/a.a..a.a..
+/b/c/a.a..a.a./ /b/c/a.a..a.a.
+/b/c/a.a..a.a/a /b/c/a.a..a.a/a
+/b/c/a.a..a.a/. /b/c/a.a..a.a
+/b/c/a.a..a.a// /b/c/a.a..a.a
+/b/c/a.a..a..aa /b/c/a.a..a..aa
+/b/c/a.a..a..a. /b/c/a.a..a..a.
+/b/c/a.a..a..a/ /b/c/a.a..a..a
+/b/c/a.a..a...a /b/c/a.a..a...a
+/b/c/a.a..a.... /b/c/a.a..a....
+/b/c/a.a..a.../ /b/c/a.a..a...
+/b/c/a.a..a../a /b/c/a.a..a../a
+/b/c/a.a..a../. /b/c/a.a..a..
+/b/c/a.a..a..// /b/c/a.a..a..
+/b/c/a.a..a./aa /b/c/a.a..a./aa
+/b/c/a.a..a./a. /b/c/a.a..a./a.
+/b/c/a.a..a./a/ /b/c/a.a..a./a
+/b/c/a.a..a./.a /b/c/a.a..a./.a
+/b/c/a.a..a./.. /b/c
+/b/c/a.a..a././ /b/c/a.a..a.
+/b/c/a.a..a.//a /b/c/a.a..a./a
+/b/c/a.a..a.//. /b/c/a.a..a.
+/b/c/a.a..a./// /b/c/a.a..a.
+/b/c/a.a..a/aaa /b/c/a.a..a/aaa
+/b/c/a.a..a/aa. /b/c/a.a..a/aa.
+/b/c/a.a..a/aa/ /b/c/a.a..a/aa
+/b/c/a.a..a/a.a /b/c/a.a..a/a.a
+/b/c/a.a..a/a.. /b/c/a.a..a/a..
+/b/c/a.a..a/a./ /b/c/a.a..a/a.
+/b/c/a.a..a/a/a /b/c/a.a..a/a/a
+/b/c/a.a..a/a/. /b/c/a.a..a/a
+/b/c/a.a..a/a// /b/c/a.a..a/a
+/b/c/a.a..a/.aa /b/c/a.a..a/.aa
+/b/c/a.a..a/.a. /b/c/a.a..a/.a.
+/b/c/a.a..a/.a/ /b/c/a.a..a/.a
+/b/c/a.a..a/..a /b/c/a.a..a/..a
+/b/c/a.a..a/... /b/c/a.a..a/...
+/b/c/a.a..a/../ /b/c
+/b/c/a.a..a/./a /b/c/a.a..a/a
+/b/c/a.a..a/./. /b/c/a.a..a
+/b/c/a.a..a/.// /b/c/a.a..a
+/b/c/a.a..a//aa /b/c/a.a..a/aa
+/b/c/a.a..a//a. /b/c/a.a..a/a.
+/b/c/a.a..a//a/ /b/c/a.a..a/a
+/b/c/a.a..a//.a /b/c/a.a..a/.a
+/b/c/a.a..a//.. /b/c
+/b/c/a.a..a//./ /b/c/a.a..a
+/b/c/a.a..a///a /b/c/a.a..a/a
+/b/c/a.a..a///. /b/c/a.a..a
+/b/c/a.a..a//// /b/c/a.a..a
+/b/c/a.a...aaaa /b/c/a.a...aaaa
+/b/c/a.a...aaa. /b/c/a.a...aaa.
+/b/c/a.a...aaa/ /b/c/a.a...aaa
+/b/c/a.a...aa.a /b/c/a.a...aa.a
+/b/c/a.a...aa.. /b/c/a.a...aa..
+/b/c/a.a...aa./ /b/c/a.a...aa.
+/b/c/a.a...aa/a /b/c/a.a...aa/a
+/b/c/a.a...aa/. /b/c/a.a...aa
+/b/c/a.a...aa// /b/c/a.a...aa
+/b/c/a.a...a.aa /b/c/a.a...a.aa
+/b/c/a.a...a.a. /b/c/a.a...a.a.
+/b/c/a.a...a.a/ /b/c/a.a...a.a
+/b/c/a.a...a..a /b/c/a.a...a..a
+/b/c/a.a...a... /b/c/a.a...a...
+/b/c/a.a...a../ /b/c/a.a...a..
+/b/c/a.a...a./a /b/c/a.a...a./a
+/b/c/a.a...a./. /b/c/a.a...a.
+/b/c/a.a...a.// /b/c/a.a...a.
+/b/c/a.a...a/aa /b/c/a.a...a/aa
+/b/c/a.a...a/a. /b/c/a.a...a/a.
+/b/c/a.a...a/a/ /b/c/a.a...a/a
+/b/c/a.a...a/.a /b/c/a.a...a/.a
+/b/c/a.a...a/.. /b/c
+/b/c/a.a...a/./ /b/c/a.a...a
+/b/c/a.a...a//a /b/c/a.a...a/a
+/b/c/a.a...a//. /b/c/a.a...a
+/b/c/a.a...a/// /b/c/a.a...a
+/b/c/a.a....aaa /b/c/a.a....aaa
+/b/c/a.a....aa. /b/c/a.a....aa.
+/b/c/a.a....aa/ /b/c/a.a....aa
+/b/c/a.a....a.a /b/c/a.a....a.a
+/b/c/a.a....a.. /b/c/a.a....a..
+/b/c/a.a....a./ /b/c/a.a....a.
+/b/c/a.a....a/a /b/c/a.a....a/a
+/b/c/a.a....a/. /b/c/a.a....a
+/b/c/a.a....a// /b/c/a.a....a
+/b/c/a.a.....aa /b/c/a.a.....aa
+/b/c/a.a.....a. /b/c/a.a.....a.
+/b/c/a.a.....a/ /b/c/a.a.....a
+/b/c/a.a......a /b/c/a.a......a
+/b/c/a.a....... /b/c/a.a.......
+/b/c/a.a....../ /b/c/a.a......
+/b/c/a.a...../a /b/c/a.a...../a
+/b/c/a.a...../. /b/c/a.a.....
+/b/c/a.a.....// /b/c/a.a.....
+/b/c/a.a..../aa /b/c/a.a..../aa
+/b/c/a.a..../a. /b/c/a.a..../a.
+/b/c/a.a..../a/ /b/c/a.a..../a
+/b/c/a.a..../.a /b/c/a.a..../.a
+/b/c/a.a..../.. /b/c
+/b/c/a.a...././ /b/c/a.a....
+/b/c/a.a....//a /b/c/a.a..../a
+/b/c/a.a....//. /b/c/a.a....
+/b/c/a.a..../// /b/c/a.a....
+/b/c/a.a.../aaa /b/c/a.a.../aaa
+/b/c/a.a.../aa. /b/c/a.a.../aa.
+/b/c/a.a.../aa/ /b/c/a.a.../aa
+/b/c/a.a.../a.a /b/c/a.a.../a.a
+/b/c/a.a.../a.. /b/c/a.a.../a..
+/b/c/a.a.../a./ /b/c/a.a.../a.
+/b/c/a.a.../a/a /b/c/a.a.../a/a
+/b/c/a.a.../a/. /b/c/a.a.../a
+/b/c/a.a.../a// /b/c/a.a.../a
+/b/c/a.a.../.aa /b/c/a.a.../.aa
+/b/c/a.a.../.a. /b/c/a.a.../.a.
+/b/c/a.a.../.a/ /b/c/a.a.../.a
+/b/c/a.a.../..a /b/c/a.a.../..a
+/b/c/a.a.../... /b/c/a.a.../...
+/b/c/a.a.../../ /b/c
+/b/c/a.a..././a /b/c/a.a.../a
+/b/c/a.a..././. /b/c/a.a...
+/b/c/a.a.../.// /b/c/a.a...
+/b/c/a.a...//aa /b/c/a.a.../aa
+/b/c/a.a...//a. /b/c/a.a.../a.
+/b/c/a.a...//a/ /b/c/a.a.../a
+/b/c/a.a...//.a /b/c/a.a.../.a
+/b/c/a.a...//.. /b/c
+/b/c/a.a...//./ /b/c/a.a...
+/b/c/a.a...///a /b/c/a.a.../a
+/b/c/a.a...///. /b/c/a.a...
+/b/c/a.a...//// /b/c/a.a...
+/b/c/a.a../aaaa /b/c/a.a../aaaa
+/b/c/a.a../aaa. /b/c/a.a../aaa.
+/b/c/a.a../aaa/ /b/c/a.a../aaa
+/b/c/a.a../aa.a /b/c/a.a../aa.a
+/b/c/a.a../aa.. /b/c/a.a../aa..
+/b/c/a.a../aa./ /b/c/a.a../aa.
+/b/c/a.a../aa/a /b/c/a.a../aa/a
+/b/c/a.a../aa/. /b/c/a.a../aa
+/b/c/a.a../aa// /b/c/a.a../aa
+/b/c/a.a../a.aa /b/c/a.a../a.aa
+/b/c/a.a../a.a. /b/c/a.a../a.a.
+/b/c/a.a../a.a/ /b/c/a.a../a.a
+/b/c/a.a../a..a /b/c/a.a../a..a
+/b/c/a.a../a... /b/c/a.a../a...
+/b/c/a.a../a../ /b/c/a.a../a..
+/b/c/a.a../a./a /b/c/a.a../a./a
+/b/c/a.a../a./. /b/c/a.a../a.
+/b/c/a.a../a.// /b/c/a.a../a.
+/b/c/a.a../a/aa /b/c/a.a../a/aa
+/b/c/a.a../a/a. /b/c/a.a../a/a.
+/b/c/a.a../a/a/ /b/c/a.a../a/a
+/b/c/a.a../a/.a /b/c/a.a../a/.a
+/b/c/a.a../a/.. /b/c/a.a..
+/b/c/a.a../a/./ /b/c/a.a../a
+/b/c/a.a../a//a /b/c/a.a../a/a
+/b/c/a.a../a//. /b/c/a.a../a
+/b/c/a.a../a/// /b/c/a.a../a
+/b/c/a.a../.aaa /b/c/a.a../.aaa
+/b/c/a.a../.aa. /b/c/a.a../.aa.
+/b/c/a.a../.aa/ /b/c/a.a../.aa
+/b/c/a.a../.a.a /b/c/a.a../.a.a
+/b/c/a.a../.a.. /b/c/a.a../.a..
+/b/c/a.a../.a./ /b/c/a.a../.a.
+/b/c/a.a../.a/a /b/c/a.a../.a/a
+/b/c/a.a../.a/. /b/c/a.a../.a
+/b/c/a.a../.a// /b/c/a.a../.a
+/b/c/a.a../..aa /b/c/a.a../..aa
+/b/c/a.a../..a. /b/c/a.a../..a.
+/b/c/a.a../..a/ /b/c/a.a../..a
+/b/c/a.a../...a /b/c/a.a../...a
+/b/c/a.a../.... /b/c/a.a../....
+/b/c/a.a../.../ /b/c/a.a../...
+/b/c/a.a../../a /b/c/a
+/b/c/a.a../../. /b/c
+/b/c/a.a../..// /b/c
+/b/c/a.a.././aa /b/c/a.a../aa
+/b/c/a.a.././a. /b/c/a.a../a.
+/b/c/a.a.././a/ /b/c/a.a../a
+/b/c/a.a.././.a /b/c/a.a../.a
+/b/c/a.a.././.. /b/c
+/b/c/a.a../././ /b/c/a.a..
+/b/c/a.a.././/a /b/c/a.a../a
+/b/c/a.a.././/. /b/c/a.a..
+/b/c/a.a.././// /b/c/a.a..
+/b/c/a.a..//aaa /b/c/a.a../aaa
+/b/c/a.a..//aa. /b/c/a.a../aa.
+/b/c/a.a..//aa/ /b/c/a.a../aa
+/b/c/a.a..//a.a /b/c/a.a../a.a
+/b/c/a.a..//a.. /b/c/a.a../a..
+/b/c/a.a..//a./ /b/c/a.a../a.
+/b/c/a.a..//a/a /b/c/a.a../a/a
+/b/c/a.a..//a/. /b/c/a.a../a
+/b/c/a.a..//a// /b/c/a.a../a
+/b/c/a.a..//.aa /b/c/a.a../.aa
+/b/c/a.a..//.a. /b/c/a.a../.a.
+/b/c/a.a..//.a/ /b/c/a.a../.a
+/b/c/a.a..//..a /b/c/a.a../..a
+/b/c/a.a..//... /b/c/a.a../...
+/b/c/a.a..//../ /b/c
+/b/c/a.a..//./a /b/c/a.a../a
+/b/c/a.a..//./. /b/c/a.a..
+/b/c/a.a..//.// /b/c/a.a..
+/b/c/a.a..///aa /b/c/a.a../aa
+/b/c/a.a..///a. /b/c/a.a../a.
+/b/c/a.a..///a/ /b/c/a.a../a
+/b/c/a.a..///.a /b/c/a.a../.a
+/b/c/a.a..///.. /b/c
+/b/c/a.a..///./ /b/c/a.a..
+/b/c/a.a..////a /b/c/a.a../a
+/b/c/a.a..////. /b/c/a.a..
+/b/c/a.a..///// /b/c/a.a..
+/b/c/a.a./aaaaa /b/c/a.a./aaaaa
+/b/c/a.a./aaaa. /b/c/a.a./aaaa.
+/b/c/a.a./aaaa/ /b/c/a.a./aaaa
+/b/c/a.a./aaa.a /b/c/a.a./aaa.a
+/b/c/a.a./aaa.. /b/c/a.a./aaa..
+/b/c/a.a./aaa./ /b/c/a.a./aaa.
+/b/c/a.a./aaa/a /b/c/a.a./aaa/a
+/b/c/a.a./aaa/. /b/c/a.a./aaa
+/b/c/a.a./aaa// /b/c/a.a./aaa
+/b/c/a.a./aa.aa /b/c/a.a./aa.aa
+/b/c/a.a./aa.a. /b/c/a.a./aa.a.
+/b/c/a.a./aa.a/ /b/c/a.a./aa.a
+/b/c/a.a./aa..a /b/c/a.a./aa..a
+/b/c/a.a./aa... /b/c/a.a./aa...
+/b/c/a.a./aa../ /b/c/a.a./aa..
+/b/c/a.a./aa./a /b/c/a.a./aa./a
+/b/c/a.a./aa./. /b/c/a.a./aa.
+/b/c/a.a./aa.// /b/c/a.a./aa.
+/b/c/a.a./aa/aa /b/c/a.a./aa/aa
+/b/c/a.a./aa/a. /b/c/a.a./aa/a.
+/b/c/a.a./aa/a/ /b/c/a.a./aa/a
+/b/c/a.a./aa/.a /b/c/a.a./aa/.a
+/b/c/a.a./aa/.. /b/c/a.a.
+/b/c/a.a./aa/./ /b/c/a.a./aa
+/b/c/a.a./aa//a /b/c/a.a./aa/a
+/b/c/a.a./aa//. /b/c/a.a./aa
+/b/c/a.a./aa/// /b/c/a.a./aa
+/b/c/a.a./a.aaa /b/c/a.a./a.aaa
+/b/c/a.a./a.aa. /b/c/a.a./a.aa.
+/b/c/a.a./a.aa/ /b/c/a.a./a.aa
+/b/c/a.a./a.a.a /b/c/a.a./a.a.a
+/b/c/a.a./a.a.. /b/c/a.a./a.a..
+/b/c/a.a./a.a./ /b/c/a.a./a.a.
+/b/c/a.a./a.a/a /b/c/a.a./a.a/a
+/b/c/a.a./a.a/. /b/c/a.a./a.a
+/b/c/a.a./a.a// /b/c/a.a./a.a
+/b/c/a.a./a..aa /b/c/a.a./a..aa
+/b/c/a.a./a..a. /b/c/a.a./a..a.
+/b/c/a.a./a..a/ /b/c/a.a./a..a
+/b/c/a.a./a...a /b/c/a.a./a...a
+/b/c/a.a./a.... /b/c/a.a./a....
+/b/c/a.a./a.../ /b/c/a.a./a...
+/b/c/a.a./a../a /b/c/a.a./a../a
+/b/c/a.a./a../. /b/c/a.a./a..
+/b/c/a.a./a..// /b/c/a.a./a..
+/b/c/a.a./a./aa /b/c/a.a./a./aa
+/b/c/a.a./a./a. /b/c/a.a./a./a.
+/b/c/a.a./a./a/ /b/c/a.a./a./a
+/b/c/a.a./a./.a /b/c/a.a./a./.a
+/b/c/a.a./a./.. /b/c/a.a.
+/b/c/a.a./a././ /b/c/a.a./a.
+/b/c/a.a./a.//a /b/c/a.a./a./a
+/b/c/a.a./a.//. /b/c/a.a./a.
+/b/c/a.a./a./// /b/c/a.a./a.
+/b/c/a.a./a/aaa /b/c/a.a./a/aaa
+/b/c/a.a./a/aa. /b/c/a.a./a/aa.
+/b/c/a.a./a/aa/ /b/c/a.a./a/aa
+/b/c/a.a./a/a.a /b/c/a.a./a/a.a
+/b/c/a.a./a/a.. /b/c/a.a./a/a..
+/b/c/a.a./a/a./ /b/c/a.a./a/a.
+/b/c/a.a./a/a/a /b/c/a.a./a/a/a
+/b/c/a.a./a/a/. /b/c/a.a./a/a
+/b/c/a.a./a/a// /b/c/a.a./a/a
+/b/c/a.a./a/.aa /b/c/a.a./a/.aa
+/b/c/a.a./a/.a. /b/c/a.a./a/.a.
+/b/c/a.a./a/.a/ /b/c/a.a./a/.a
+/b/c/a.a./a/..a /b/c/a.a./a/..a
+/b/c/a.a./a/... /b/c/a.a./a/...
+/b/c/a.a./a/../ /b/c/a.a.
+/b/c/a.a./a/./a /b/c/a.a./a/a
+/b/c/a.a./a/./. /b/c/a.a./a
+/b/c/a.a./a/.// /b/c/a.a./a
+/b/c/a.a./a//aa /b/c/a.a./a/aa
+/b/c/a.a./a//a. /b/c/a.a./a/a.
+/b/c/a.a./a//a/ /b/c/a.a./a/a
+/b/c/a.a./a//.a /b/c/a.a./a/.a
+/b/c/a.a./a//.. /b/c/a.a.
+/b/c/a.a./a//./ /b/c/a.a./a
+/b/c/a.a./a///a /b/c/a.a./a/a
+/b/c/a.a./a///. /b/c/a.a./a
+/b/c/a.a./a//// /b/c/a.a./a
+/b/c/a.a./.aaaa /b/c/a.a./.aaaa
+/b/c/a.a./.aaa. /b/c/a.a./.aaa.
+/b/c/a.a./.aaa/ /b/c/a.a./.aaa
+/b/c/a.a./.aa.a /b/c/a.a./.aa.a
+/b/c/a.a./.aa.. /b/c/a.a./.aa..
+/b/c/a.a./.aa./ /b/c/a.a./.aa.
+/b/c/a.a./.aa/a /b/c/a.a./.aa/a
+/b/c/a.a./.aa/. /b/c/a.a./.aa
+/b/c/a.a./.aa// /b/c/a.a./.aa
+/b/c/a.a./.a.aa /b/c/a.a./.a.aa
+/b/c/a.a./.a.a. /b/c/a.a./.a.a.
+/b/c/a.a./.a.a/ /b/c/a.a./.a.a
+/b/c/a.a./.a..a /b/c/a.a./.a..a
+/b/c/a.a./.a... /b/c/a.a./.a...
+/b/c/a.a./.a../ /b/c/a.a./.a..
+/b/c/a.a./.a./a /b/c/a.a./.a./a
+/b/c/a.a./.a./. /b/c/a.a./.a.
+/b/c/a.a./.a.// /b/c/a.a./.a.
+/b/c/a.a./.a/aa /b/c/a.a./.a/aa
+/b/c/a.a./.a/a. /b/c/a.a./.a/a.
+/b/c/a.a./.a/a/ /b/c/a.a./.a/a
+/b/c/a.a./.a/.a /b/c/a.a./.a/.a
+/b/c/a.a./.a/.. /b/c/a.a.
+/b/c/a.a./.a/./ /b/c/a.a./.a
+/b/c/a.a./.a//a /b/c/a.a./.a/a
+/b/c/a.a./.a//. /b/c/a.a./.a
+/b/c/a.a./.a/// /b/c/a.a./.a
+/b/c/a.a./..aaa /b/c/a.a./..aaa
+/b/c/a.a./..aa. /b/c/a.a./..aa.
+/b/c/a.a./..aa/ /b/c/a.a./..aa
+/b/c/a.a./..a.a /b/c/a.a./..a.a
+/b/c/a.a./..a.. /b/c/a.a./..a..
+/b/c/a.a./..a./ /b/c/a.a./..a.
+/b/c/a.a./..a/a /b/c/a.a./..a/a
+/b/c/a.a./..a/. /b/c/a.a./..a
+/b/c/a.a./..a// /b/c/a.a./..a
+/b/c/a.a./...aa /b/c/a.a./...aa
+/b/c/a.a./...a. /b/c/a.a./...a.
+/b/c/a.a./...a/ /b/c/a.a./...a
+/b/c/a.a./....a /b/c/a.a./....a
+/b/c/a.a./..... /b/c/a.a./.....
+/b/c/a.a./..../ /b/c/a.a./....
+/b/c/a.a./.../a /b/c/a.a./.../a
+/b/c/a.a./.../. /b/c/a.a./...
+/b/c/a.a./...// /b/c/a.a./...
+/b/c/a.a./../aa /b/c/aa
+/b/c/a.a./../a. /b/c/a.
+/b/c/a.a./../a/ /b/c/a
+/b/c/a.a./../.a /b/c/.a
+/b/c/a.a./../.. /b
+/b/c/a.a./.././ /b/c
+/b/c/a.a./..//a /b/c/a
+/b/c/a.a./..//. /b/c
+/b/c/a.a./../// /b/c
+/b/c/a.a././aaa /b/c/a.a./aaa
+/b/c/a.a././aa. /b/c/a.a./aa.
+/b/c/a.a././aa/ /b/c/a.a./aa
+/b/c/a.a././a.a /b/c/a.a./a.a
+/b/c/a.a././a.. /b/c/a.a./a..
+/b/c/a.a././a./ /b/c/a.a./a.
+/b/c/a.a././a/a /b/c/a.a./a/a
+/b/c/a.a././a/. /b/c/a.a./a
+/b/c/a.a././a// /b/c/a.a./a
+/b/c/a.a././.aa /b/c/a.a./.aa
+/b/c/a.a././.a. /b/c/a.a./.a.
+/b/c/a.a././.a/ /b/c/a.a./.a
+/b/c/a.a././..a /b/c/a.a./..a
+/b/c/a.a././... /b/c/a.a./...
+/b/c/a.a././../ /b/c
+/b/c/a.a./././a /b/c/a.a./a
+/b/c/a.a./././. /b/c/a.a.
+/b/c/a.a././.// /b/c/a.a.
+/b/c/a.a././/aa /b/c/a.a./aa
+/b/c/a.a././/a. /b/c/a.a./a.
+/b/c/a.a././/a/ /b/c/a.a./a
+/b/c/a.a././/.a /b/c/a.a./.a
+/b/c/a.a././/.. /b/c
+/b/c/a.a././/./ /b/c/a.a.
+/b/c/a.a././//a /b/c/a.a./a
+/b/c/a.a././//. /b/c/a.a.
+/b/c/a.a././/// /b/c/a.a.
+/b/c/a.a.//aaaa /b/c/a.a./aaaa
+/b/c/a.a.//aaa. /b/c/a.a./aaa.
+/b/c/a.a.//aaa/ /b/c/a.a./aaa
+/b/c/a.a.//aa.a /b/c/a.a./aa.a
+/b/c/a.a.//aa.. /b/c/a.a./aa..
+/b/c/a.a.//aa./ /b/c/a.a./aa.
+/b/c/a.a.//aa/a /b/c/a.a./aa/a
+/b/c/a.a.//aa/. /b/c/a.a./aa
+/b/c/a.a.//aa// /b/c/a.a./aa
+/b/c/a.a.//a.aa /b/c/a.a./a.aa
+/b/c/a.a.//a.a. /b/c/a.a./a.a.
+/b/c/a.a.//a.a/ /b/c/a.a./a.a
+/b/c/a.a.//a..a /b/c/a.a./a..a
+/b/c/a.a.//a... /b/c/a.a./a...
+/b/c/a.a.//a../ /b/c/a.a./a..
+/b/c/a.a.//a./a /b/c/a.a./a./a
+/b/c/a.a.//a./. /b/c/a.a./a.
+/b/c/a.a.//a.// /b/c/a.a./a.
+/b/c/a.a.//a/aa /b/c/a.a./a/aa
+/b/c/a.a.//a/a. /b/c/a.a./a/a.
+/b/c/a.a.//a/a/ /b/c/a.a./a/a
+/b/c/a.a.//a/.a /b/c/a.a./a/.a
+/b/c/a.a.//a/.. /b/c/a.a.
+/b/c/a.a.//a/./ /b/c/a.a./a
+/b/c/a.a.//a//a /b/c/a.a./a/a
+/b/c/a.a.//a//. /b/c/a.a./a
+/b/c/a.a.//a/// /b/c/a.a./a
+/b/c/a.a.//.aaa /b/c/a.a./.aaa
+/b/c/a.a.//.aa. /b/c/a.a./.aa.
+/b/c/a.a.//.aa/ /b/c/a.a./.aa
+/b/c/a.a.//.a.a /b/c/a.a./.a.a
+/b/c/a.a.//.a.. /b/c/a.a./.a..
+/b/c/a.a.//.a./ /b/c/a.a./.a.
+/b/c/a.a.//.a/a /b/c/a.a./.a/a
+/b/c/a.a.//.a/. /b/c/a.a./.a
+/b/c/a.a.//.a// /b/c/a.a./.a
+/b/c/a.a.//..aa /b/c/a.a./..aa
+/b/c/a.a.//..a. /b/c/a.a./..a.
+/b/c/a.a.//..a/ /b/c/a.a./..a
+/b/c/a.a.//...a /b/c/a.a./...a
+/b/c/a.a.//.... /b/c/a.a./....
+/b/c/a.a.//.../ /b/c/a.a./...
+/b/c/a.a.//../a /b/c/a
+/b/c/a.a.//../. /b/c
+/b/c/a.a.//..// /b/c
+/b/c/a.a.//./aa /b/c/a.a./aa
+/b/c/a.a.//./a. /b/c/a.a./a.
+/b/c/a.a.//./a/ /b/c/a.a./a
+/b/c/a.a.//./.a /b/c/a.a./.a
+/b/c/a.a.//./.. /b/c
+/b/c/a.a.//././ /b/c/a.a.
+/b/c/a.a.//.//a /b/c/a.a./a
+/b/c/a.a.//.//. /b/c/a.a.
+/b/c/a.a.//./// /b/c/a.a.
+/b/c/a.a.///aaa /b/c/a.a./aaa
+/b/c/a.a.///aa. /b/c/a.a./aa.
+/b/c/a.a.///aa/ /b/c/a.a./aa
+/b/c/a.a.///a.a /b/c/a.a./a.a
+/b/c/a.a.///a.. /b/c/a.a./a..
+/b/c/a.a.///a./ /b/c/a.a./a.
+/b/c/a.a.///a/a /b/c/a.a./a/a
+/b/c/a.a.///a/. /b/c/a.a./a
+/b/c/a.a.///a// /b/c/a.a./a
+/b/c/a.a.///.aa /b/c/a.a./.aa
+/b/c/a.a.///.a. /b/c/a.a./.a.
+/b/c/a.a.///.a/ /b/c/a.a./.a
+/b/c/a.a.///..a /b/c/a.a./..a
+/b/c/a.a.///... /b/c/a.a./...
+/b/c/a.a.///../ /b/c
+/b/c/a.a.///./a /b/c/a.a./a
+/b/c/a.a.///./. /b/c/a.a.
+/b/c/a.a.///.// /b/c/a.a.
+/b/c/a.a.////aa /b/c/a.a./aa
+/b/c/a.a.////a. /b/c/a.a./a.
+/b/c/a.a.////a/ /b/c/a.a./a
+/b/c/a.a.////.a /b/c/a.a./.a
+/b/c/a.a.////.. /b/c
+/b/c/a.a.////./ /b/c/a.a.
+/b/c/a.a./////a /b/c/a.a./a
+/b/c/a.a./////. /b/c/a.a.
+/b/c/a.a.////// /b/c/a.a.
+/b/c/a.a/aaaaaa /b/c/a.a/aaaaaa
+/b/c/a.a/aaaaa. /b/c/a.a/aaaaa.
+/b/c/a.a/aaaaa/ /b/c/a.a/aaaaa
+/b/c/a.a/aaaa.a /b/c/a.a/aaaa.a
+/b/c/a.a/aaaa.. /b/c/a.a/aaaa..
+/b/c/a.a/aaaa./ /b/c/a.a/aaaa.
+/b/c/a.a/aaaa/a /b/c/a.a/aaaa/a
+/b/c/a.a/aaaa/. /b/c/a.a/aaaa
+/b/c/a.a/aaaa// /b/c/a.a/aaaa
+/b/c/a.a/aaa.aa /b/c/a.a/aaa.aa
+/b/c/a.a/aaa.a. /b/c/a.a/aaa.a.
+/b/c/a.a/aaa.a/ /b/c/a.a/aaa.a
+/b/c/a.a/aaa..a /b/c/a.a/aaa..a
+/b/c/a.a/aaa... /b/c/a.a/aaa...
+/b/c/a.a/aaa../ /b/c/a.a/aaa..
+/b/c/a.a/aaa./a /b/c/a.a/aaa./a
+/b/c/a.a/aaa./. /b/c/a.a/aaa.
+/b/c/a.a/aaa.// /b/c/a.a/aaa.
+/b/c/a.a/aaa/aa /b/c/a.a/aaa/aa
+/b/c/a.a/aaa/a. /b/c/a.a/aaa/a.
+/b/c/a.a/aaa/a/ /b/c/a.a/aaa/a
+/b/c/a.a/aaa/.a /b/c/a.a/aaa/.a
+/b/c/a.a/aaa/.. /b/c/a.a
+/b/c/a.a/aaa/./ /b/c/a.a/aaa
+/b/c/a.a/aaa//a /b/c/a.a/aaa/a
+/b/c/a.a/aaa//. /b/c/a.a/aaa
+/b/c/a.a/aaa/// /b/c/a.a/aaa
+/b/c/a.a/aa.aaa /b/c/a.a/aa.aaa
+/b/c/a.a/aa.aa. /b/c/a.a/aa.aa.
+/b/c/a.a/aa.aa/ /b/c/a.a/aa.aa
+/b/c/a.a/aa.a.a /b/c/a.a/aa.a.a
+/b/c/a.a/aa.a.. /b/c/a.a/aa.a..
+/b/c/a.a/aa.a./ /b/c/a.a/aa.a.
+/b/c/a.a/aa.a/a /b/c/a.a/aa.a/a
+/b/c/a.a/aa.a/. /b/c/a.a/aa.a
+/b/c/a.a/aa.a// /b/c/a.a/aa.a
+/b/c/a.a/aa..aa /b/c/a.a/aa..aa
+/b/c/a.a/aa..a. /b/c/a.a/aa..a.
+/b/c/a.a/aa..a/ /b/c/a.a/aa..a
+/b/c/a.a/aa...a /b/c/a.a/aa...a
+/b/c/a.a/aa.... /b/c/a.a/aa....
+/b/c/a.a/aa.../ /b/c/a.a/aa...
+/b/c/a.a/aa../a /b/c/a.a/aa../a
+/b/c/a.a/aa../. /b/c/a.a/aa..
+/b/c/a.a/aa..// /b/c/a.a/aa..
+/b/c/a.a/aa./aa /b/c/a.a/aa./aa
+/b/c/a.a/aa./a. /b/c/a.a/aa./a.
+/b/c/a.a/aa./a/ /b/c/a.a/aa./a
+/b/c/a.a/aa./.a /b/c/a.a/aa./.a
+/b/c/a.a/aa./.. /b/c/a.a
+/b/c/a.a/aa././ /b/c/a.a/aa.
+/b/c/a.a/aa.//a /b/c/a.a/aa./a
+/b/c/a.a/aa.//. /b/c/a.a/aa.
+/b/c/a.a/aa./// /b/c/a.a/aa.
+/b/c/a.a/aa/aaa /b/c/a.a/aa/aaa
+/b/c/a.a/aa/aa. /b/c/a.a/aa/aa.
+/b/c/a.a/aa/aa/ /b/c/a.a/aa/aa
+/b/c/a.a/aa/a.a /b/c/a.a/aa/a.a
+/b/c/a.a/aa/a.. /b/c/a.a/aa/a..
+/b/c/a.a/aa/a./ /b/c/a.a/aa/a.
+/b/c/a.a/aa/a/a /b/c/a.a/aa/a/a
+/b/c/a.a/aa/a/. /b/c/a.a/aa/a
+/b/c/a.a/aa/a// /b/c/a.a/aa/a
+/b/c/a.a/aa/.aa /b/c/a.a/aa/.aa
+/b/c/a.a/aa/.a. /b/c/a.a/aa/.a.
+/b/c/a.a/aa/.a/ /b/c/a.a/aa/.a
+/b/c/a.a/aa/..a /b/c/a.a/aa/..a
+/b/c/a.a/aa/... /b/c/a.a/aa/...
+/b/c/a.a/aa/../ /b/c/a.a
+/b/c/a.a/aa/./a /b/c/a.a/aa/a
+/b/c/a.a/aa/./. /b/c/a.a/aa
+/b/c/a.a/aa/.// /b/c/a.a/aa
+/b/c/a.a/aa//aa /b/c/a.a/aa/aa
+/b/c/a.a/aa//a. /b/c/a.a/aa/a.
+/b/c/a.a/aa//a/ /b/c/a.a/aa/a
+/b/c/a.a/aa//.a /b/c/a.a/aa/.a
+/b/c/a.a/aa//.. /b/c/a.a
+/b/c/a.a/aa//./ /b/c/a.a/aa
+/b/c/a.a/aa///a /b/c/a.a/aa/a
+/b/c/a.a/aa///. /b/c/a.a/aa
+/b/c/a.a/aa//// /b/c/a.a/aa
+/b/c/a.a/a.aaaa /b/c/a.a/a.aaaa
+/b/c/a.a/a.aaa. /b/c/a.a/a.aaa.
+/b/c/a.a/a.aaa/ /b/c/a.a/a.aaa
+/b/c/a.a/a.aa.a /b/c/a.a/a.aa.a
+/b/c/a.a/a.aa.. /b/c/a.a/a.aa..
+/b/c/a.a/a.aa./ /b/c/a.a/a.aa.
+/b/c/a.a/a.aa/a /b/c/a.a/a.aa/a
+/b/c/a.a/a.aa/. /b/c/a.a/a.aa
+/b/c/a.a/a.aa// /b/c/a.a/a.aa
+/b/c/a.a/a.a.aa /b/c/a.a/a.a.aa
+/b/c/a.a/a.a.a. /b/c/a.a/a.a.a.
+/b/c/a.a/a.a.a/ /b/c/a.a/a.a.a
+/b/c/a.a/a.a..a /b/c/a.a/a.a..a
+/b/c/a.a/a.a... /b/c/a.a/a.a...
+/b/c/a.a/a.a../ /b/c/a.a/a.a..
+/b/c/a.a/a.a./a /b/c/a.a/a.a./a
+/b/c/a.a/a.a./. /b/c/a.a/a.a.
+/b/c/a.a/a.a.// /b/c/a.a/a.a.
+/b/c/a.a/a.a/aa /b/c/a.a/a.a/aa
+/b/c/a.a/a.a/a. /b/c/a.a/a.a/a.
+/b/c/a.a/a.a/a/ /b/c/a.a/a.a/a
+/b/c/a.a/a.a/.a /b/c/a.a/a.a/.a
+/b/c/a.a/a.a/.. /b/c/a.a
+/b/c/a.a/a.a/./ /b/c/a.a/a.a
+/b/c/a.a/a.a//a /b/c/a.a/a.a/a
+/b/c/a.a/a.a//. /b/c/a.a/a.a
+/b/c/a.a/a.a/// /b/c/a.a/a.a
+/b/c/a.a/a..aaa /b/c/a.a/a..aaa
+/b/c/a.a/a..aa. /b/c/a.a/a..aa.
+/b/c/a.a/a..aa/ /b/c/a.a/a..aa
+/b/c/a.a/a..a.a /b/c/a.a/a..a.a
+/b/c/a.a/a..a.. /b/c/a.a/a..a..
+/b/c/a.a/a..a./ /b/c/a.a/a..a.
+/b/c/a.a/a..a/a /b/c/a.a/a..a/a
+/b/c/a.a/a..a/. /b/c/a.a/a..a
+/b/c/a.a/a..a// /b/c/a.a/a..a
+/b/c/a.a/a...aa /b/c/a.a/a...aa
+/b/c/a.a/a...a. /b/c/a.a/a...a.
+/b/c/a.a/a...a/ /b/c/a.a/a...a
+/b/c/a.a/a....a /b/c/a.a/a....a
+/b/c/a.a/a..... /b/c/a.a/a.....
+/b/c/a.a/a..../ /b/c/a.a/a....
+/b/c/a.a/a.../a /b/c/a.a/a.../a
+/b/c/a.a/a.../. /b/c/a.a/a...
+/b/c/a.a/a...// /b/c/a.a/a...
+/b/c/a.a/a../aa /b/c/a.a/a../aa
+/b/c/a.a/a../a. /b/c/a.a/a../a.
+/b/c/a.a/a../a/ /b/c/a.a/a../a
+/b/c/a.a/a../.a /b/c/a.a/a../.a
+/b/c/a.a/a../.. /b/c/a.a
+/b/c/a.a/a.././ /b/c/a.a/a..
+/b/c/a.a/a..//a /b/c/a.a/a../a
+/b/c/a.a/a..//. /b/c/a.a/a..
+/b/c/a.a/a../// /b/c/a.a/a..
+/b/c/a.a/a./aaa /b/c/a.a/a./aaa
+/b/c/a.a/a./aa. /b/c/a.a/a./aa.
+/b/c/a.a/a./aa/ /b/c/a.a/a./aa
+/b/c/a.a/a./a.a /b/c/a.a/a./a.a
+/b/c/a.a/a./a.. /b/c/a.a/a./a..
+/b/c/a.a/a./a./ /b/c/a.a/a./a.
+/b/c/a.a/a./a/a /b/c/a.a/a./a/a
+/b/c/a.a/a./a/. /b/c/a.a/a./a
+/b/c/a.a/a./a// /b/c/a.a/a./a
+/b/c/a.a/a./.aa /b/c/a.a/a./.aa
+/b/c/a.a/a./.a. /b/c/a.a/a./.a.
+/b/c/a.a/a./.a/ /b/c/a.a/a./.a
+/b/c/a.a/a./..a /b/c/a.a/a./..a
+/b/c/a.a/a./... /b/c/a.a/a./...
+/b/c/a.a/a./../ /b/c/a.a
+/b/c/a.a/a././a /b/c/a.a/a./a
+/b/c/a.a/a././. /b/c/a.a/a.
+/b/c/a.a/a./.// /b/c/a.a/a.
+/b/c/a.a/a.//aa /b/c/a.a/a./aa
+/b/c/a.a/a.//a. /b/c/a.a/a./a.
+/b/c/a.a/a.//a/ /b/c/a.a/a./a
+/b/c/a.a/a.//.a /b/c/a.a/a./.a
+/b/c/a.a/a.//.. /b/c/a.a
+/b/c/a.a/a.//./ /b/c/a.a/a.
+/b/c/a.a/a.///a /b/c/a.a/a./a
+/b/c/a.a/a.///. /b/c/a.a/a.
+/b/c/a.a/a.//// /b/c/a.a/a.
+/b/c/a.a/a/aaaa /b/c/a.a/a/aaaa
+/b/c/a.a/a/aaa. /b/c/a.a/a/aaa.
+/b/c/a.a/a/aaa/ /b/c/a.a/a/aaa
+/b/c/a.a/a/aa.a /b/c/a.a/a/aa.a
+/b/c/a.a/a/aa.. /b/c/a.a/a/aa..
+/b/c/a.a/a/aa./ /b/c/a.a/a/aa.
+/b/c/a.a/a/aa/a /b/c/a.a/a/aa/a
+/b/c/a.a/a/aa/. /b/c/a.a/a/aa
+/b/c/a.a/a/aa// /b/c/a.a/a/aa
+/b/c/a.a/a/a.aa /b/c/a.a/a/a.aa
+/b/c/a.a/a/a.a. /b/c/a.a/a/a.a.
+/b/c/a.a/a/a.a/ /b/c/a.a/a/a.a
+/b/c/a.a/a/a..a /b/c/a.a/a/a..a
+/b/c/a.a/a/a... /b/c/a.a/a/a...
+/b/c/a.a/a/a../ /b/c/a.a/a/a..
+/b/c/a.a/a/a./a /b/c/a.a/a/a./a
+/b/c/a.a/a/a./. /b/c/a.a/a/a.
+/b/c/a.a/a/a.// /b/c/a.a/a/a.
+/b/c/a.a/a/a/aa /b/c/a.a/a/a/aa
+/b/c/a.a/a/a/a. /b/c/a.a/a/a/a.
+/b/c/a.a/a/a/a/ /b/c/a.a/a/a/a
+/b/c/a.a/a/a/.a /b/c/a.a/a/a/.a
+/b/c/a.a/a/a/.. /b/c/a.a/a
+/b/c/a.a/a/a/./ /b/c/a.a/a/a
+/b/c/a.a/a/a//a /b/c/a.a/a/a/a
+/b/c/a.a/a/a//. /b/c/a.a/a/a
+/b/c/a.a/a/a/// /b/c/a.a/a/a
+/b/c/a.a/a/.aaa /b/c/a.a/a/.aaa
+/b/c/a.a/a/.aa. /b/c/a.a/a/.aa.
+/b/c/a.a/a/.aa/ /b/c/a.a/a/.aa
+/b/c/a.a/a/.a.a /b/c/a.a/a/.a.a
+/b/c/a.a/a/.a.. /b/c/a.a/a/.a..
+/b/c/a.a/a/.a./ /b/c/a.a/a/.a.
+/b/c/a.a/a/.a/a /b/c/a.a/a/.a/a
+/b/c/a.a/a/.a/. /b/c/a.a/a/.a
+/b/c/a.a/a/.a// /b/c/a.a/a/.a
+/b/c/a.a/a/..aa /b/c/a.a/a/..aa
+/b/c/a.a/a/..a. /b/c/a.a/a/..a.
+/b/c/a.a/a/..a/ /b/c/a.a/a/..a
+/b/c/a.a/a/...a /b/c/a.a/a/...a
+/b/c/a.a/a/.... /b/c/a.a/a/....
+/b/c/a.a/a/.../ /b/c/a.a/a/...
+/b/c/a.a/a/../a /b/c/a.a/a
+/b/c/a.a/a/../. /b/c/a.a
+/b/c/a.a/a/..// /b/c/a.a
+/b/c/a.a/a/./aa /b/c/a.a/a/aa
+/b/c/a.a/a/./a. /b/c/a.a/a/a.
+/b/c/a.a/a/./a/ /b/c/a.a/a/a
+/b/c/a.a/a/./.a /b/c/a.a/a/.a
+/b/c/a.a/a/./.. /b/c/a.a
+/b/c/a.a/a/././ /b/c/a.a/a
+/b/c/a.a/a/.//a /b/c/a.a/a/a
+/b/c/a.a/a/.//. /b/c/a.a/a
+/b/c/a.a/a/./// /b/c/a.a/a
+/b/c/a.a/a//aaa /b/c/a.a/a/aaa
+/b/c/a.a/a//aa. /b/c/a.a/a/aa.
+/b/c/a.a/a//aa/ /b/c/a.a/a/aa
+/b/c/a.a/a//a.a /b/c/a.a/a/a.a
+/b/c/a.a/a//a.. /b/c/a.a/a/a..
+/b/c/a.a/a//a./ /b/c/a.a/a/a.
+/b/c/a.a/a//a/a /b/c/a.a/a/a/a
+/b/c/a.a/a//a/. /b/c/a.a/a/a
+/b/c/a.a/a//a// /b/c/a.a/a/a
+/b/c/a.a/a//.aa /b/c/a.a/a/.aa
+/b/c/a.a/a//.a. /b/c/a.a/a/.a.
+/b/c/a.a/a//.a/ /b/c/a.a/a/.a
+/b/c/a.a/a//..a /b/c/a.a/a/..a
+/b/c/a.a/a//... /b/c/a.a/a/...
+/b/c/a.a/a//../ /b/c/a.a
+/b/c/a.a/a//./a /b/c/a.a/a/a
+/b/c/a.a/a//./. /b/c/a.a/a
+/b/c/a.a/a//.// /b/c/a.a/a
+/b/c/a.a/a///aa /b/c/a.a/a/aa
+/b/c/a.a/a///a. /b/c/a.a/a/a.
+/b/c/a.a/a///a/ /b/c/a.a/a/a
+/b/c/a.a/a///.a /b/c/a.a/a/.a
+/b/c/a.a/a///.. /b/c/a.a
+/b/c/a.a/a///./ /b/c/a.a/a
+/b/c/a.a/a////a /b/c/a.a/a/a
+/b/c/a.a/a////. /b/c/a.a/a
+/b/c/a.a/a///// /b/c/a.a/a
+/b/c/a.a/.aaaaa /b/c/a.a/.aaaaa
+/b/c/a.a/.aaaa. /b/c/a.a/.aaaa.
+/b/c/a.a/.aaaa/ /b/c/a.a/.aaaa
+/b/c/a.a/.aaa.a /b/c/a.a/.aaa.a
+/b/c/a.a/.aaa.. /b/c/a.a/.aaa..
+/b/c/a.a/.aaa./ /b/c/a.a/.aaa.
+/b/c/a.a/.aaa/a /b/c/a.a/.aaa/a
+/b/c/a.a/.aaa/. /b/c/a.a/.aaa
+/b/c/a.a/.aaa// /b/c/a.a/.aaa
+/b/c/a.a/.aa.aa /b/c/a.a/.aa.aa
+/b/c/a.a/.aa.a. /b/c/a.a/.aa.a.
+/b/c/a.a/.aa.a/ /b/c/a.a/.aa.a
+/b/c/a.a/.aa..a /b/c/a.a/.aa..a
+/b/c/a.a/.aa... /b/c/a.a/.aa...
+/b/c/a.a/.aa../ /b/c/a.a/.aa..
+/b/c/a.a/.aa./a /b/c/a.a/.aa./a
+/b/c/a.a/.aa./. /b/c/a.a/.aa.
+/b/c/a.a/.aa.// /b/c/a.a/.aa.
+/b/c/a.a/.aa/aa /b/c/a.a/.aa/aa
+/b/c/a.a/.aa/a. /b/c/a.a/.aa/a.
+/b/c/a.a/.aa/a/ /b/c/a.a/.aa/a
+/b/c/a.a/.aa/.a /b/c/a.a/.aa/.a
+/b/c/a.a/.aa/.. /b/c/a.a
+/b/c/a.a/.aa/./ /b/c/a.a/.aa
+/b/c/a.a/.aa//a /b/c/a.a/.aa/a
+/b/c/a.a/.aa//. /b/c/a.a/.aa
+/b/c/a.a/.aa/// /b/c/a.a/.aa
+/b/c/a.a/.a.aaa /b/c/a.a/.a.aaa
+/b/c/a.a/.a.aa. /b/c/a.a/.a.aa.
+/b/c/a.a/.a.aa/ /b/c/a.a/.a.aa
+/b/c/a.a/.a.a.a /b/c/a.a/.a.a.a
+/b/c/a.a/.a.a.. /b/c/a.a/.a.a..
+/b/c/a.a/.a.a./ /b/c/a.a/.a.a.
+/b/c/a.a/.a.a/a /b/c/a.a/.a.a/a
+/b/c/a.a/.a.a/. /b/c/a.a/.a.a
+/b/c/a.a/.a.a// /b/c/a.a/.a.a
+/b/c/a.a/.a..aa /b/c/a.a/.a..aa
+/b/c/a.a/.a..a. /b/c/a.a/.a..a.
+/b/c/a.a/.a..a/ /b/c/a.a/.a..a
+/b/c/a.a/.a...a /b/c/a.a/.a...a
+/b/c/a.a/.a.... /b/c/a.a/.a....
+/b/c/a.a/.a.../ /b/c/a.a/.a...
+/b/c/a.a/.a../a /b/c/a.a/.a../a
+/b/c/a.a/.a../. /b/c/a.a/.a..
+/b/c/a.a/.a..// /b/c/a.a/.a..
+/b/c/a.a/.a./aa /b/c/a.a/.a./aa
+/b/c/a.a/.a./a. /b/c/a.a/.a./a.
+/b/c/a.a/.a./a/ /b/c/a.a/.a./a
+/b/c/a.a/.a./.a /b/c/a.a/.a./.a
+/b/c/a.a/.a./.. /b/c/a.a
+/b/c/a.a/.a././ /b/c/a.a/.a.
+/b/c/a.a/.a.//a /b/c/a.a/.a./a
+/b/c/a.a/.a.//. /b/c/a.a/.a.
+/b/c/a.a/.a./// /b/c/a.a/.a.
+/b/c/a.a/.a/aaa /b/c/a.a/.a/aaa
+/b/c/a.a/.a/aa. /b/c/a.a/.a/aa.
+/b/c/a.a/.a/aa/ /b/c/a.a/.a/aa
+/b/c/a.a/.a/a.a /b/c/a.a/.a/a.a
+/b/c/a.a/.a/a.. /b/c/a.a/.a/a..
+/b/c/a.a/.a/a./ /b/c/a.a/.a/a.
+/b/c/a.a/.a/a/a /b/c/a.a/.a/a/a
+/b/c/a.a/.a/a/. /b/c/a.a/.a/a
+/b/c/a.a/.a/a// /b/c/a.a/.a/a
+/b/c/a.a/.a/.aa /b/c/a.a/.a/.aa
+/b/c/a.a/.a/.a. /b/c/a.a/.a/.a.
+/b/c/a.a/.a/.a/ /b/c/a.a/.a/.a
+/b/c/a.a/.a/..a /b/c/a.a/.a/..a
+/b/c/a.a/.a/... /b/c/a.a/.a/...
+/b/c/a.a/.a/../ /b/c/a.a
+/b/c/a.a/.a/./a /b/c/a.a/.a/a
+/b/c/a.a/.a/./. /b/c/a.a/.a
+/b/c/a.a/.a/.// /b/c/a.a/.a
+/b/c/a.a/.a//aa /b/c/a.a/.a/aa
+/b/c/a.a/.a//a. /b/c/a.a/.a/a.
+/b/c/a.a/.a//a/ /b/c/a.a/.a/a
+/b/c/a.a/.a//.a /b/c/a.a/.a/.a
+/b/c/a.a/.a//.. /b/c/a.a
+/b/c/a.a/.a//./ /b/c/a.a/.a
+/b/c/a.a/.a///a /b/c/a.a/.a/a
+/b/c/a.a/.a///. /b/c/a.a/.a
+/b/c/a.a/.a//// /b/c/a.a/.a
+/b/c/a.a/..aaaa /b/c/a.a/..aaaa
+/b/c/a.a/..aaa. /b/c/a.a/..aaa.
+/b/c/a.a/..aaa/ /b/c/a.a/..aaa
+/b/c/a.a/..aa.a /b/c/a.a/..aa.a
+/b/c/a.a/..aa.. /b/c/a.a/..aa..
+/b/c/a.a/..aa./ /b/c/a.a/..aa.
+/b/c/a.a/..aa/a /b/c/a.a/..aa/a
+/b/c/a.a/..aa/. /b/c/a.a/..aa
+/b/c/a.a/..aa// /b/c/a.a/..aa
+/b/c/a.a/..a.aa /b/c/a.a/..a.aa
+/b/c/a.a/..a.a. /b/c/a.a/..a.a.
+/b/c/a.a/..a.a/ /b/c/a.a/..a.a
+/b/c/a.a/..a..a /b/c/a.a/..a..a
+/b/c/a.a/..a... /b/c/a.a/..a...
+/b/c/a.a/..a../ /b/c/a.a/..a..
+/b/c/a.a/..a./a /b/c/a.a/..a./a
+/b/c/a.a/..a./. /b/c/a.a/..a.
+/b/c/a.a/..a.// /b/c/a.a/..a.
+/b/c/a.a/..a/aa /b/c/a.a/..a/aa
+/b/c/a.a/..a/a. /b/c/a.a/..a/a.
+/b/c/a.a/..a/a/ /b/c/a.a/..a/a
+/b/c/a.a/..a/.a /b/c/a.a/..a/.a
+/b/c/a.a/..a/.. /b/c/a.a
+/b/c/a.a/..a/./ /b/c/a.a/..a
+/b/c/a.a/..a//a /b/c/a.a/..a/a
+/b/c/a.a/..a//. /b/c/a.a/..a
+/b/c/a.a/..a/// /b/c/a.a/..a
+/b/c/a.a/...aaa /b/c/a.a/...aaa
+/b/c/a.a/...aa. /b/c/a.a/...aa.
+/b/c/a.a/...aa/ /b/c/a.a/...aa
+/b/c/a.a/...a.a /b/c/a.a/...a.a
+/b/c/a.a/...a.. /b/c/a.a/...a..
+/b/c/a.a/...a./ /b/c/a.a/...a.
+/b/c/a.a/...a/a /b/c/a.a/...a/a
+/b/c/a.a/...a/. /b/c/a.a/...a
+/b/c/a.a/...a// /b/c/a.a/...a
+/b/c/a.a/....aa /b/c/a.a/....aa
+/b/c/a.a/....a. /b/c/a.a/....a.
+/b/c/a.a/....a/ /b/c/a.a/....a
+/b/c/a.a/.....a /b/c/a.a/.....a
+/b/c/a.a/...... /b/c/a.a/......
+/b/c/a.a/...../ /b/c/a.a/.....
+/b/c/a.a/..../a /b/c/a.a/..../a
+/b/c/a.a/..../. /b/c/a.a/....
+/b/c/a.a/....// /b/c/a.a/....
+/b/c/a.a/.../aa /b/c/a.a/.../aa
+/b/c/a.a/.../a. /b/c/a.a/.../a.
+/b/c/a.a/.../a/ /b/c/a.a/.../a
+/b/c/a.a/.../.a /b/c/a.a/.../.a
+/b/c/a.a/.../.. /b/c/a.a
+/b/c/a.a/..././ /b/c/a.a/...
+/b/c/a.a/...//a /b/c/a.a/.../a
+/b/c/a.a/...//. /b/c/a.a/...
+/b/c/a.a/.../// /b/c/a.a/...
+/b/c/a.a/../aaa /b/c/aaa
+/b/c/a.a/../aa. /b/c/aa.
+/b/c/a.a/../aa/ /b/c/aa
+/b/c/a.a/../a.a /b/c/a.a
+/b/c/a.a/../a.. /b/c/a..
+/b/c/a.a/../a./ /b/c/a.
+/b/c/a.a/../a/a /b/c/a/a
+/b/c/a.a/../a/. /b/c/a
+/b/c/a.a/../a// /b/c/a
+/b/c/a.a/../.aa /b/c/.aa
+/b/c/a.a/../.a. /b/c/.a.
+/b/c/a.a/../.a/ /b/c/.a
+/b/c/a.a/../..a /b/c/..a
+/b/c/a.a/../... /b/c/...
+/b/c/a.a/../../ /b
+/b/c/a.a/.././a /b/c/a
+/b/c/a.a/.././. /b/c
+/b/c/a.a/../.// /b/c
+/b/c/a.a/..//aa /b/c/aa
+/b/c/a.a/..//a. /b/c/a.
+/b/c/a.a/..//a/ /b/c/a
+/b/c/a.a/..//.a /b/c/.a
+/b/c/a.a/..//.. /b
+/b/c/a.a/..//./ /b/c
+/b/c/a.a/..///a /b/c/a
+/b/c/a.a/..///. /b/c
+/b/c/a.a/..//// /b/c
+/b/c/a.a/./aaaa /b/c/a.a/aaaa
+/b/c/a.a/./aaa. /b/c/a.a/aaa.
+/b/c/a.a/./aaa/ /b/c/a.a/aaa
+/b/c/a.a/./aa.a /b/c/a.a/aa.a
+/b/c/a.a/./aa.. /b/c/a.a/aa..
+/b/c/a.a/./aa./ /b/c/a.a/aa.
+/b/c/a.a/./aa/a /b/c/a.a/aa/a
+/b/c/a.a/./aa/. /b/c/a.a/aa
+/b/c/a.a/./aa// /b/c/a.a/aa
+/b/c/a.a/./a.aa /b/c/a.a/a.aa
+/b/c/a.a/./a.a. /b/c/a.a/a.a.
+/b/c/a.a/./a.a/ /b/c/a.a/a.a
+/b/c/a.a/./a..a /b/c/a.a/a..a
+/b/c/a.a/./a... /b/c/a.a/a...
+/b/c/a.a/./a../ /b/c/a.a/a..
+/b/c/a.a/./a./a /b/c/a.a/a./a
+/b/c/a.a/./a./. /b/c/a.a/a.
+/b/c/a.a/./a.// /b/c/a.a/a.
+/b/c/a.a/./a/aa /b/c/a.a/a/aa
+/b/c/a.a/./a/a. /b/c/a.a/a/a.
+/b/c/a.a/./a/a/ /b/c/a.a/a/a
+/b/c/a.a/./a/.a /b/c/a.a/a/.a
+/b/c/a.a/./a/.. /b/c/a.a
+/b/c/a.a/./a/./ /b/c/a.a/a
+/b/c/a.a/./a//a /b/c/a.a/a/a
+/b/c/a.a/./a//. /b/c/a.a/a
+/b/c/a.a/./a/// /b/c/a.a/a
+/b/c/a.a/./.aaa /b/c/a.a/.aaa
+/b/c/a.a/./.aa. /b/c/a.a/.aa.
+/b/c/a.a/./.aa/ /b/c/a.a/.aa
+/b/c/a.a/./.a.a /b/c/a.a/.a.a
+/b/c/a.a/./.a.. /b/c/a.a/.a..
+/b/c/a.a/./.a./ /b/c/a.a/.a.
+/b/c/a.a/./.a/a /b/c/a.a/.a/a
+/b/c/a.a/./.a/. /b/c/a.a/.a
+/b/c/a.a/./.a// /b/c/a.a/.a
+/b/c/a.a/./..aa /b/c/a.a/..aa
+/b/c/a.a/./..a. /b/c/a.a/..a.
+/b/c/a.a/./..a/ /b/c/a.a/..a
+/b/c/a.a/./...a /b/c/a.a/...a
+/b/c/a.a/./.... /b/c/a.a/....
+/b/c/a.a/./.../ /b/c/a.a/...
+/b/c/a.a/./../a /b/c/a
+/b/c/a.a/./../. /b/c
+/b/c/a.a/./..// /b/c
+/b/c/a.a/././aa /b/c/a.a/aa
+/b/c/a.a/././a. /b/c/a.a/a.
+/b/c/a.a/././a/ /b/c/a.a/a
+/b/c/a.a/././.a /b/c/a.a/.a
+/b/c/a.a/././.. /b/c
+/b/c/a.a/./././ /b/c/a.a
+/b/c/a.a/././/a /b/c/a.a/a
+/b/c/a.a/././/. /b/c/a.a
+/b/c/a.a/././// /b/c/a.a
+/b/c/a.a/.//aaa /b/c/a.a/aaa
+/b/c/a.a/.//aa. /b/c/a.a/aa.
+/b/c/a.a/.//aa/ /b/c/a.a/aa
+/b/c/a.a/.//a.a /b/c/a.a/a.a
+/b/c/a.a/.//a.. /b/c/a.a/a..
+/b/c/a.a/.//a./ /b/c/a.a/a.
+/b/c/a.a/.//a/a /b/c/a.a/a/a
+/b/c/a.a/.//a/. /b/c/a.a/a
+/b/c/a.a/.//a// /b/c/a.a/a
+/b/c/a.a/.//.aa /b/c/a.a/.aa
+/b/c/a.a/.//.a. /b/c/a.a/.a.
+/b/c/a.a/.//.a/ /b/c/a.a/.a
+/b/c/a.a/.//..a /b/c/a.a/..a
+/b/c/a.a/.//... /b/c/a.a/...
+/b/c/a.a/.//../ /b/c
+/b/c/a.a/.//./a /b/c/a.a/a
+/b/c/a.a/.//./. /b/c/a.a
+/b/c/a.a/.//.// /b/c/a.a
+/b/c/a.a/.///aa /b/c/a.a/aa
+/b/c/a.a/.///a. /b/c/a.a/a.
+/b/c/a.a/.///a/ /b/c/a.a/a
+/b/c/a.a/.///.a /b/c/a.a/.a
+/b/c/a.a/.///.. /b/c
+/b/c/a.a/.///./ /b/c/a.a
+/b/c/a.a/.////a /b/c/a.a/a
+/b/c/a.a/.////. /b/c/a.a
+/b/c/a.a/.///// /b/c/a.a
+/b/c/a.a//aaaaa /b/c/a.a/aaaaa
+/b/c/a.a//aaaa. /b/c/a.a/aaaa.
+/b/c/a.a//aaaa/ /b/c/a.a/aaaa
+/b/c/a.a//aaa.a /b/c/a.a/aaa.a
+/b/c/a.a//aaa.. /b/c/a.a/aaa..
+/b/c/a.a//aaa./ /b/c/a.a/aaa.
+/b/c/a.a//aaa/a /b/c/a.a/aaa/a
+/b/c/a.a//aaa/. /b/c/a.a/aaa
+/b/c/a.a//aaa// /b/c/a.a/aaa
+/b/c/a.a//aa.aa /b/c/a.a/aa.aa
+/b/c/a.a//aa.a. /b/c/a.a/aa.a.
+/b/c/a.a//aa.a/ /b/c/a.a/aa.a
+/b/c/a.a//aa..a /b/c/a.a/aa..a
+/b/c/a.a//aa... /b/c/a.a/aa...
+/b/c/a.a//aa../ /b/c/a.a/aa..
+/b/c/a.a//aa./a /b/c/a.a/aa./a
+/b/c/a.a//aa./. /b/c/a.a/aa.
+/b/c/a.a//aa.// /b/c/a.a/aa.
+/b/c/a.a//aa/aa /b/c/a.a/aa/aa
+/b/c/a.a//aa/a. /b/c/a.a/aa/a.
+/b/c/a.a//aa/a/ /b/c/a.a/aa/a
+/b/c/a.a//aa/.a /b/c/a.a/aa/.a
+/b/c/a.a//aa/.. /b/c/a.a
+/b/c/a.a//aa/./ /b/c/a.a/aa
+/b/c/a.a//aa//a /b/c/a.a/aa/a
+/b/c/a.a//aa//. /b/c/a.a/aa
+/b/c/a.a//aa/// /b/c/a.a/aa
+/b/c/a.a//a.aaa /b/c/a.a/a.aaa
+/b/c/a.a//a.aa. /b/c/a.a/a.aa.
+/b/c/a.a//a.aa/ /b/c/a.a/a.aa
+/b/c/a.a//a.a.a /b/c/a.a/a.a.a
+/b/c/a.a//a.a.. /b/c/a.a/a.a..
+/b/c/a.a//a.a./ /b/c/a.a/a.a.
+/b/c/a.a//a.a/a /b/c/a.a/a.a/a
+/b/c/a.a//a.a/. /b/c/a.a/a.a
+/b/c/a.a//a.a// /b/c/a.a/a.a
+/b/c/a.a//a..aa /b/c/a.a/a..aa
+/b/c/a.a//a..a. /b/c/a.a/a..a.
+/b/c/a.a//a..a/ /b/c/a.a/a..a
+/b/c/a.a//a...a /b/c/a.a/a...a
+/b/c/a.a//a.... /b/c/a.a/a....
+/b/c/a.a//a.../ /b/c/a.a/a...
+/b/c/a.a//a../a /b/c/a.a/a../a
+/b/c/a.a//a../. /b/c/a.a/a..
+/b/c/a.a//a..// /b/c/a.a/a..
+/b/c/a.a//a./aa /b/c/a.a/a./aa
+/b/c/a.a//a./a. /b/c/a.a/a./a.
+/b/c/a.a//a./a/ /b/c/a.a/a./a
+/b/c/a.a//a./.a /b/c/a.a/a./.a
+/b/c/a.a//a./.. /b/c/a.a
+/b/c/a.a//a././ /b/c/a.a/a.
+/b/c/a.a//a.//a /b/c/a.a/a./a
+/b/c/a.a//a.//. /b/c/a.a/a.
+/b/c/a.a//a./// /b/c/a.a/a.
+/b/c/a.a//a/aaa /b/c/a.a/a/aaa
+/b/c/a.a//a/aa. /b/c/a.a/a/aa.
+/b/c/a.a//a/aa/ /b/c/a.a/a/aa
+/b/c/a.a//a/a.a /b/c/a.a/a/a.a
+/b/c/a.a//a/a.. /b/c/a.a/a/a..
+/b/c/a.a//a/a./ /b/c/a.a/a/a.
+/b/c/a.a//a/a/a /b/c/a.a/a/a/a
+/b/c/a.a//a/a/. /b/c/a.a/a/a
+/b/c/a.a//a/a// /b/c/a.a/a/a
+/b/c/a.a//a/.aa /b/c/a.a/a/.aa
+/b/c/a.a//a/.a. /b/c/a.a/a/.a.
+/b/c/a.a//a/.a/ /b/c/a.a/a/.a
+/b/c/a.a//a/..a /b/c/a.a/a/..a
+/b/c/a.a//a/... /b/c/a.a/a/...
+/b/c/a.a//a/../ /b/c/a.a
+/b/c/a.a//a/./a /b/c/a.a/a/a
+/b/c/a.a//a/./. /b/c/a.a/a
+/b/c/a.a//a/.// /b/c/a.a/a
+/b/c/a.a//a//aa /b/c/a.a/a/aa
+/b/c/a.a//a//a. /b/c/a.a/a/a.
+/b/c/a.a//a//a/ /b/c/a.a/a/a
+/b/c/a.a//a//.a /b/c/a.a/a/.a
+/b/c/a.a//a//.. /b/c/a.a
+/b/c/a.a//a//./ /b/c/a.a/a
+/b/c/a.a//a///a /b/c/a.a/a/a
+/b/c/a.a//a///. /b/c/a.a/a
+/b/c/a.a//a//// /b/c/a.a/a
+/b/c/a.a//.aaaa /b/c/a.a/.aaaa
+/b/c/a.a//.aaa. /b/c/a.a/.aaa.
+/b/c/a.a//.aaa/ /b/c/a.a/.aaa
+/b/c/a.a//.aa.a /b/c/a.a/.aa.a
+/b/c/a.a//.aa.. /b/c/a.a/.aa..
+/b/c/a.a//.aa./ /b/c/a.a/.aa.
+/b/c/a.a//.aa/a /b/c/a.a/.aa/a
+/b/c/a.a//.aa/. /b/c/a.a/.aa
+/b/c/a.a//.aa// /b/c/a.a/.aa
+/b/c/a.a//.a.aa /b/c/a.a/.a.aa
+/b/c/a.a//.a.a. /b/c/a.a/.a.a.
+/b/c/a.a//.a.a/ /b/c/a.a/.a.a
+/b/c/a.a//.a..a /b/c/a.a/.a..a
+/b/c/a.a//.a... /b/c/a.a/.a...
+/b/c/a.a//.a../ /b/c/a.a/.a..
+/b/c/a.a//.a./a /b/c/a.a/.a./a
+/b/c/a.a//.a./. /b/c/a.a/.a.
+/b/c/a.a//.a.// /b/c/a.a/.a.
+/b/c/a.a//.a/aa /b/c/a.a/.a/aa
+/b/c/a.a//.a/a. /b/c/a.a/.a/a.
+/b/c/a.a//.a/a/ /b/c/a.a/.a/a
+/b/c/a.a//.a/.a /b/c/a.a/.a/.a
+/b/c/a.a//.a/.. /b/c/a.a
+/b/c/a.a//.a/./ /b/c/a.a/.a
+/b/c/a.a//.a//a /b/c/a.a/.a/a
+/b/c/a.a//.a//. /b/c/a.a/.a
+/b/c/a.a//.a/// /b/c/a.a/.a
+/b/c/a.a//..aaa /b/c/a.a/..aaa
+/b/c/a.a//..aa. /b/c/a.a/..aa.
+/b/c/a.a//..aa/ /b/c/a.a/..aa
+/b/c/a.a//..a.a /b/c/a.a/..a.a
+/b/c/a.a//..a.. /b/c/a.a/..a..
+/b/c/a.a//..a./ /b/c/a.a/..a.
+/b/c/a.a//..a/a /b/c/a.a/..a/a
+/b/c/a.a//..a/. /b/c/a.a/..a
+/b/c/a.a//..a// /b/c/a.a/..a
+/b/c/a.a//...aa /b/c/a.a/...aa
+/b/c/a.a//...a. /b/c/a.a/...a.
+/b/c/a.a//...a/ /b/c/a.a/...a
+/b/c/a.a//....a /b/c/a.a/....a
+/b/c/a.a//..... /b/c/a.a/.....
+/b/c/a.a//..../ /b/c/a.a/....
+/b/c/a.a//.../a /b/c/a.a/.../a
+/b/c/a.a//.../. /b/c/a.a/...
+/b/c/a.a//...// /b/c/a.a/...
+/b/c/a.a//../aa /b/c/aa
+/b/c/a.a//../a. /b/c/a.
+/b/c/a.a//../a/ /b/c/a
+/b/c/a.a//../.a /b/c/.a
+/b/c/a.a//../.. /b
+/b/c/a.a//.././ /b/c
+/b/c/a.a//..//a /b/c/a
+/b/c/a.a//..//. /b/c
+/b/c/a.a//../// /b/c
+/b/c/a.a//./aaa /b/c/a.a/aaa
+/b/c/a.a//./aa. /b/c/a.a/aa.
+/b/c/a.a//./aa/ /b/c/a.a/aa
+/b/c/a.a//./a.a /b/c/a.a/a.a
+/b/c/a.a//./a.. /b/c/a.a/a..
+/b/c/a.a//./a./ /b/c/a.a/a.
+/b/c/a.a//./a/a /b/c/a.a/a/a
+/b/c/a.a//./a/. /b/c/a.a/a
+/b/c/a.a//./a// /b/c/a.a/a
+/b/c/a.a//./.aa /b/c/a.a/.aa
+/b/c/a.a//./.a. /b/c/a.a/.a.
+/b/c/a.a//./.a/ /b/c/a.a/.a
+/b/c/a.a//./..a /b/c/a.a/..a
+/b/c/a.a//./... /b/c/a.a/...
+/b/c/a.a//./../ /b/c
+/b/c/a.a//././a /b/c/a.a/a
+/b/c/a.a//././. /b/c/a.a
+/b/c/a.a//./.// /b/c/a.a
+/b/c/a.a//.//aa /b/c/a.a/aa
+/b/c/a.a//.//a. /b/c/a.a/a.
+/b/c/a.a//.//a/ /b/c/a.a/a
+/b/c/a.a//.//.a /b/c/a.a/.a
+/b/c/a.a//.//.. /b/c
+/b/c/a.a//.//./ /b/c/a.a
+/b/c/a.a//.///a /b/c/a.a/a
+/b/c/a.a//.///. /b/c/a.a
+/b/c/a.a//.//// /b/c/a.a
+/b/c/a.a///aaaa /b/c/a.a/aaaa
+/b/c/a.a///aaa. /b/c/a.a/aaa.
+/b/c/a.a///aaa/ /b/c/a.a/aaa
+/b/c/a.a///aa.a /b/c/a.a/aa.a
+/b/c/a.a///aa.. /b/c/a.a/aa..
+/b/c/a.a///aa./ /b/c/a.a/aa.
+/b/c/a.a///aa/a /b/c/a.a/aa/a
+/b/c/a.a///aa/. /b/c/a.a/aa
+/b/c/a.a///aa// /b/c/a.a/aa
+/b/c/a.a///a.aa /b/c/a.a/a.aa
+/b/c/a.a///a.a. /b/c/a.a/a.a.
+/b/c/a.a///a.a/ /b/c/a.a/a.a
+/b/c/a.a///a..a /b/c/a.a/a..a
+/b/c/a.a///a... /b/c/a.a/a...
+/b/c/a.a///a../ /b/c/a.a/a..
+/b/c/a.a///a./a /b/c/a.a/a./a
+/b/c/a.a///a./. /b/c/a.a/a.
+/b/c/a.a///a.// /b/c/a.a/a.
+/b/c/a.a///a/aa /b/c/a.a/a/aa
+/b/c/a.a///a/a. /b/c/a.a/a/a.
+/b/c/a.a///a/a/ /b/c/a.a/a/a
+/b/c/a.a///a/.a /b/c/a.a/a/.a
+/b/c/a.a///a/.. /b/c/a.a
+/b/c/a.a///a/./ /b/c/a.a/a
+/b/c/a.a///a//a /b/c/a.a/a/a
+/b/c/a.a///a//. /b/c/a.a/a
+/b/c/a.a///a/// /b/c/a.a/a
+/b/c/a.a///.aaa /b/c/a.a/.aaa
+/b/c/a.a///.aa. /b/c/a.a/.aa.
+/b/c/a.a///.aa/ /b/c/a.a/.aa
+/b/c/a.a///.a.a /b/c/a.a/.a.a
+/b/c/a.a///.a.. /b/c/a.a/.a..
+/b/c/a.a///.a./ /b/c/a.a/.a.
+/b/c/a.a///.a/a /b/c/a.a/.a/a
+/b/c/a.a///.a/. /b/c/a.a/.a
+/b/c/a.a///.a// /b/c/a.a/.a
+/b/c/a.a///..aa /b/c/a.a/..aa
+/b/c/a.a///..a. /b/c/a.a/..a.
+/b/c/a.a///..a/ /b/c/a.a/..a
+/b/c/a.a///...a /b/c/a.a/...a
+/b/c/a.a///.... /b/c/a.a/....
+/b/c/a.a///.../ /b/c/a.a/...
+/b/c/a.a///../a /b/c/a
+/b/c/a.a///../. /b/c
+/b/c/a.a///..// /b/c
+/b/c/a.a///./aa /b/c/a.a/aa
+/b/c/a.a///./a. /b/c/a.a/a.
+/b/c/a.a///./a/ /b/c/a.a/a
+/b/c/a.a///./.a /b/c/a.a/.a
+/b/c/a.a///./.. /b/c
+/b/c/a.a///././ /b/c/a.a
+/b/c/a.a///.//a /b/c/a.a/a
+/b/c/a.a///.//. /b/c/a.a
+/b/c/a.a///./// /b/c/a.a
+/b/c/a.a////aaa /b/c/a.a/aaa
+/b/c/a.a////aa. /b/c/a.a/aa.
+/b/c/a.a////aa/ /b/c/a.a/aa
+/b/c/a.a////a.a /b/c/a.a/a.a
+/b/c/a.a////a.. /b/c/a.a/a..
+/b/c/a.a////a./ /b/c/a.a/a.
+/b/c/a.a////a/a /b/c/a.a/a/a
+/b/c/a.a////a/. /b/c/a.a/a
+/b/c/a.a////a// /b/c/a.a/a
+/b/c/a.a////.aa /b/c/a.a/.aa
+/b/c/a.a////.a. /b/c/a.a/.a.
+/b/c/a.a////.a/ /b/c/a.a/.a
+/b/c/a.a////..a /b/c/a.a/..a
+/b/c/a.a////... /b/c/a.a/...
+/b/c/a.a////../ /b/c
+/b/c/a.a////./a /b/c/a.a/a
+/b/c/a.a////./. /b/c/a.a
+/b/c/a.a////.// /b/c/a.a
+/b/c/a.a/////aa /b/c/a.a/aa
+/b/c/a.a/////a. /b/c/a.a/a.
+/b/c/a.a/////a/ /b/c/a.a/a
+/b/c/a.a/////.a /b/c/a.a/.a
+/b/c/a.a/////.. /b/c
+/b/c/a.a/////./ /b/c/a.a
+/b/c/a.a//////a /b/c/a.a/a
+/b/c/a.a//////. /b/c/a.a
+/b/c/a.a/////// /b/c/a.a
+/b/c/a..aaaaaaa /b/c/a..aaaaaaa
+/b/c/a..aaaaaa. /b/c/a..aaaaaa.
+/b/c/a..aaaaaa/ /b/c/a..aaaaaa
+/b/c/a..aaaaa.a /b/c/a..aaaaa.a
+/b/c/a..aaaaa.. /b/c/a..aaaaa..
+/b/c/a..aaaaa./ /b/c/a..aaaaa.
+/b/c/a..aaaaa/a /b/c/a..aaaaa/a
+/b/c/a..aaaaa/. /b/c/a..aaaaa
+/b/c/a..aaaaa// /b/c/a..aaaaa
+/b/c/a..aaaa.aa /b/c/a..aaaa.aa
+/b/c/a..aaaa.a. /b/c/a..aaaa.a.
+/b/c/a..aaaa.a/ /b/c/a..aaaa.a
+/b/c/a..aaaa..a /b/c/a..aaaa..a
+/b/c/a..aaaa... /b/c/a..aaaa...
+/b/c/a..aaaa../ /b/c/a..aaaa..
+/b/c/a..aaaa./a /b/c/a..aaaa./a
+/b/c/a..aaaa./. /b/c/a..aaaa.
+/b/c/a..aaaa.// /b/c/a..aaaa.
+/b/c/a..aaaa/aa /b/c/a..aaaa/aa
+/b/c/a..aaaa/a. /b/c/a..aaaa/a.
+/b/c/a..aaaa/a/ /b/c/a..aaaa/a
+/b/c/a..aaaa/.a /b/c/a..aaaa/.a
+/b/c/a..aaaa/.. /b/c
+/b/c/a..aaaa/./ /b/c/a..aaaa
+/b/c/a..aaaa//a /b/c/a..aaaa/a
+/b/c/a..aaaa//. /b/c/a..aaaa
+/b/c/a..aaaa/// /b/c/a..aaaa
+/b/c/a..aaa.aaa /b/c/a..aaa.aaa
+/b/c/a..aaa.aa. /b/c/a..aaa.aa.
+/b/c/a..aaa.aa/ /b/c/a..aaa.aa
+/b/c/a..aaa.a.a /b/c/a..aaa.a.a
+/b/c/a..aaa.a.. /b/c/a..aaa.a..
+/b/c/a..aaa.a./ /b/c/a..aaa.a.
+/b/c/a..aaa.a/a /b/c/a..aaa.a/a
+/b/c/a..aaa.a/. /b/c/a..aaa.a
+/b/c/a..aaa.a// /b/c/a..aaa.a
+/b/c/a..aaa..aa /b/c/a..aaa..aa
+/b/c/a..aaa..a. /b/c/a..aaa..a.
+/b/c/a..aaa..a/ /b/c/a..aaa..a
+/b/c/a..aaa...a /b/c/a..aaa...a
+/b/c/a..aaa.... /b/c/a..aaa....
+/b/c/a..aaa.../ /b/c/a..aaa...
+/b/c/a..aaa../a /b/c/a..aaa../a
+/b/c/a..aaa../. /b/c/a..aaa..
+/b/c/a..aaa..// /b/c/a..aaa..
+/b/c/a..aaa./aa /b/c/a..aaa./aa
+/b/c/a..aaa./a. /b/c/a..aaa./a.
+/b/c/a..aaa./a/ /b/c/a..aaa./a
+/b/c/a..aaa./.a /b/c/a..aaa./.a
+/b/c/a..aaa./.. /b/c
+/b/c/a..aaa././ /b/c/a..aaa.
+/b/c/a..aaa.//a /b/c/a..aaa./a
+/b/c/a..aaa.//. /b/c/a..aaa.
+/b/c/a..aaa./// /b/c/a..aaa.
+/b/c/a..aaa/aaa /b/c/a..aaa/aaa
+/b/c/a..aaa/aa. /b/c/a..aaa/aa.
+/b/c/a..aaa/aa/ /b/c/a..aaa/aa
+/b/c/a..aaa/a.a /b/c/a..aaa/a.a
+/b/c/a..aaa/a.. /b/c/a..aaa/a..
+/b/c/a..aaa/a./ /b/c/a..aaa/a.
+/b/c/a..aaa/a/a /b/c/a..aaa/a/a
+/b/c/a..aaa/a/. /b/c/a..aaa/a
+/b/c/a..aaa/a// /b/c/a..aaa/a
+/b/c/a..aaa/.aa /b/c/a..aaa/.aa
+/b/c/a..aaa/.a. /b/c/a..aaa/.a.
+/b/c/a..aaa/.a/ /b/c/a..aaa/.a
+/b/c/a..aaa/..a /b/c/a..aaa/..a
+/b/c/a..aaa/... /b/c/a..aaa/...
+/b/c/a..aaa/../ /b/c
+/b/c/a..aaa/./a /b/c/a..aaa/a
+/b/c/a..aaa/./. /b/c/a..aaa
+/b/c/a..aaa/.// /b/c/a..aaa
+/b/c/a..aaa//aa /b/c/a..aaa/aa
+/b/c/a..aaa//a. /b/c/a..aaa/a.
+/b/c/a..aaa//a/ /b/c/a..aaa/a
+/b/c/a..aaa//.a /b/c/a..aaa/.a
+/b/c/a..aaa//.. /b/c
+/b/c/a..aaa//./ /b/c/a..aaa
+/b/c/a..aaa///a /b/c/a..aaa/a
+/b/c/a..aaa///. /b/c/a..aaa
+/b/c/a..aaa//// /b/c/a..aaa
+/b/c/a..aa.aaaa /b/c/a..aa.aaaa
+/b/c/a..aa.aaa. /b/c/a..aa.aaa.
+/b/c/a..aa.aaa/ /b/c/a..aa.aaa
+/b/c/a..aa.aa.a /b/c/a..aa.aa.a
+/b/c/a..aa.aa.. /b/c/a..aa.aa..
+/b/c/a..aa.aa./ /b/c/a..aa.aa.
+/b/c/a..aa.aa/a /b/c/a..aa.aa/a
+/b/c/a..aa.aa/. /b/c/a..aa.aa
+/b/c/a..aa.aa// /b/c/a..aa.aa
+/b/c/a..aa.a.aa /b/c/a..aa.a.aa
+/b/c/a..aa.a.a. /b/c/a..aa.a.a.
+/b/c/a..aa.a.a/ /b/c/a..aa.a.a
+/b/c/a..aa.a..a /b/c/a..aa.a..a
+/b/c/a..aa.a... /b/c/a..aa.a...
+/b/c/a..aa.a../ /b/c/a..aa.a..
+/b/c/a..aa.a./a /b/c/a..aa.a./a
+/b/c/a..aa.a./. /b/c/a..aa.a.
+/b/c/a..aa.a.// /b/c/a..aa.a.
+/b/c/a..aa.a/aa /b/c/a..aa.a/aa
+/b/c/a..aa.a/a. /b/c/a..aa.a/a.
+/b/c/a..aa.a/a/ /b/c/a..aa.a/a
+/b/c/a..aa.a/.a /b/c/a..aa.a/.a
+/b/c/a..aa.a/.. /b/c
+/b/c/a..aa.a/./ /b/c/a..aa.a
+/b/c/a..aa.a//a /b/c/a..aa.a/a
+/b/c/a..aa.a//. /b/c/a..aa.a
+/b/c/a..aa.a/// /b/c/a..aa.a
+/b/c/a..aa..aaa /b/c/a..aa..aaa
+/b/c/a..aa..aa. /b/c/a..aa..aa.
+/b/c/a..aa..aa/ /b/c/a..aa..aa
+/b/c/a..aa..a.a /b/c/a..aa..a.a
+/b/c/a..aa..a.. /b/c/a..aa..a..
+/b/c/a..aa..a./ /b/c/a..aa..a.
+/b/c/a..aa..a/a /b/c/a..aa..a/a
+/b/c/a..aa..a/. /b/c/a..aa..a
+/b/c/a..aa..a// /b/c/a..aa..a
+/b/c/a..aa...aa /b/c/a..aa...aa
+/b/c/a..aa...a. /b/c/a..aa...a.
+/b/c/a..aa...a/ /b/c/a..aa...a
+/b/c/a..aa....a /b/c/a..aa....a
+/b/c/a..aa..... /b/c/a..aa.....
+/b/c/a..aa..../ /b/c/a..aa....
+/b/c/a..aa.../a /b/c/a..aa.../a
+/b/c/a..aa.../. /b/c/a..aa...
+/b/c/a..aa...// /b/c/a..aa...
+/b/c/a..aa../aa /b/c/a..aa../aa
+/b/c/a..aa../a. /b/c/a..aa../a.
+/b/c/a..aa../a/ /b/c/a..aa../a
+/b/c/a..aa../.a /b/c/a..aa../.a
+/b/c/a..aa../.. /b/c
+/b/c/a..aa.././ /b/c/a..aa..
+/b/c/a..aa..//a /b/c/a..aa../a
+/b/c/a..aa..//. /b/c/a..aa..
+/b/c/a..aa../// /b/c/a..aa..
+/b/c/a..aa./aaa /b/c/a..aa./aaa
+/b/c/a..aa./aa. /b/c/a..aa./aa.
+/b/c/a..aa./aa/ /b/c/a..aa./aa
+/b/c/a..aa./a.a /b/c/a..aa./a.a
+/b/c/a..aa./a.. /b/c/a..aa./a..
+/b/c/a..aa./a./ /b/c/a..aa./a.
+/b/c/a..aa./a/a /b/c/a..aa./a/a
+/b/c/a..aa./a/. /b/c/a..aa./a
+/b/c/a..aa./a// /b/c/a..aa./a
+/b/c/a..aa./.aa /b/c/a..aa./.aa
+/b/c/a..aa./.a. /b/c/a..aa./.a.
+/b/c/a..aa./.a/ /b/c/a..aa./.a
+/b/c/a..aa./..a /b/c/a..aa./..a
+/b/c/a..aa./... /b/c/a..aa./...
+/b/c/a..aa./../ /b/c
+/b/c/a..aa././a /b/c/a..aa./a
+/b/c/a..aa././. /b/c/a..aa.
+/b/c/a..aa./.// /b/c/a..aa.
+/b/c/a..aa.//aa /b/c/a..aa./aa
+/b/c/a..aa.//a. /b/c/a..aa./a.
+/b/c/a..aa.//a/ /b/c/a..aa./a
+/b/c/a..aa.//.a /b/c/a..aa./.a
+/b/c/a..aa.//.. /b/c
+/b/c/a..aa.//./ /b/c/a..aa.
+/b/c/a..aa.///a /b/c/a..aa./a
+/b/c/a..aa.///. /b/c/a..aa.
+/b/c/a..aa.//// /b/c/a..aa.
+/b/c/a..aa/aaaa /b/c/a..aa/aaaa
+/b/c/a..aa/aaa. /b/c/a..aa/aaa.
+/b/c/a..aa/aaa/ /b/c/a..aa/aaa
+/b/c/a..aa/aa.a /b/c/a..aa/aa.a
+/b/c/a..aa/aa.. /b/c/a..aa/aa..
+/b/c/a..aa/aa./ /b/c/a..aa/aa.
+/b/c/a..aa/aa/a /b/c/a..aa/aa/a
+/b/c/a..aa/aa/. /b/c/a..aa/aa
+/b/c/a..aa/aa// /b/c/a..aa/aa
+/b/c/a..aa/a.aa /b/c/a..aa/a.aa
+/b/c/a..aa/a.a. /b/c/a..aa/a.a.
+/b/c/a..aa/a.a/ /b/c/a..aa/a.a
+/b/c/a..aa/a..a /b/c/a..aa/a..a
+/b/c/a..aa/a... /b/c/a..aa/a...
+/b/c/a..aa/a../ /b/c/a..aa/a..
+/b/c/a..aa/a./a /b/c/a..aa/a./a
+/b/c/a..aa/a./. /b/c/a..aa/a.
+/b/c/a..aa/a.// /b/c/a..aa/a.
+/b/c/a..aa/a/aa /b/c/a..aa/a/aa
+/b/c/a..aa/a/a. /b/c/a..aa/a/a.
+/b/c/a..aa/a/a/ /b/c/a..aa/a/a
+/b/c/a..aa/a/.a /b/c/a..aa/a/.a
+/b/c/a..aa/a/.. /b/c/a..aa
+/b/c/a..aa/a/./ /b/c/a..aa/a
+/b/c/a..aa/a//a /b/c/a..aa/a/a
+/b/c/a..aa/a//. /b/c/a..aa/a
+/b/c/a..aa/a/// /b/c/a..aa/a
+/b/c/a..aa/.aaa /b/c/a..aa/.aaa
+/b/c/a..aa/.aa. /b/c/a..aa/.aa.
+/b/c/a..aa/.aa/ /b/c/a..aa/.aa
+/b/c/a..aa/.a.a /b/c/a..aa/.a.a
+/b/c/a..aa/.a.. /b/c/a..aa/.a..
+/b/c/a..aa/.a./ /b/c/a..aa/.a.
+/b/c/a..aa/.a/a /b/c/a..aa/.a/a
+/b/c/a..aa/.a/. /b/c/a..aa/.a
+/b/c/a..aa/.a// /b/c/a..aa/.a
+/b/c/a..aa/..aa /b/c/a..aa/..aa
+/b/c/a..aa/..a. /b/c/a..aa/..a.
+/b/c/a..aa/..a/ /b/c/a..aa/..a
+/b/c/a..aa/...a /b/c/a..aa/...a
+/b/c/a..aa/.... /b/c/a..aa/....
+/b/c/a..aa/.../ /b/c/a..aa/...
+/b/c/a..aa/../a /b/c/a
+/b/c/a..aa/../. /b/c
+/b/c/a..aa/..// /b/c
+/b/c/a..aa/./aa /b/c/a..aa/aa
+/b/c/a..aa/./a. /b/c/a..aa/a.
+/b/c/a..aa/./a/ /b/c/a..aa/a
+/b/c/a..aa/./.a /b/c/a..aa/.a
+/b/c/a..aa/./.. /b/c
+/b/c/a..aa/././ /b/c/a..aa
+/b/c/a..aa/.//a /b/c/a..aa/a
+/b/c/a..aa/.//. /b/c/a..aa
+/b/c/a..aa/./// /b/c/a..aa
+/b/c/a..aa//aaa /b/c/a..aa/aaa
+/b/c/a..aa//aa. /b/c/a..aa/aa.
+/b/c/a..aa//aa/ /b/c/a..aa/aa
+/b/c/a..aa//a.a /b/c/a..aa/a.a
+/b/c/a..aa//a.. /b/c/a..aa/a..
+/b/c/a..aa//a./ /b/c/a..aa/a.
+/b/c/a..aa//a/a /b/c/a..aa/a/a
+/b/c/a..aa//a/. /b/c/a..aa/a
+/b/c/a..aa//a// /b/c/a..aa/a
+/b/c/a..aa//.aa /b/c/a..aa/.aa
+/b/c/a..aa//.a. /b/c/a..aa/.a.
+/b/c/a..aa//.a/ /b/c/a..aa/.a
+/b/c/a..aa//..a /b/c/a..aa/..a
+/b/c/a..aa//... /b/c/a..aa/...
+/b/c/a..aa//../ /b/c
+/b/c/a..aa//./a /b/c/a..aa/a
+/b/c/a..aa//./. /b/c/a..aa
+/b/c/a..aa//.// /b/c/a..aa
+/b/c/a..aa///aa /b/c/a..aa/aa
+/b/c/a..aa///a. /b/c/a..aa/a.
+/b/c/a..aa///a/ /b/c/a..aa/a
+/b/c/a..aa///.a /b/c/a..aa/.a
+/b/c/a..aa///.. /b/c
+/b/c/a..aa///./ /b/c/a..aa
+/b/c/a..aa////a /b/c/a..aa/a
+/b/c/a..aa////. /b/c/a..aa
+/b/c/a..aa///// /b/c/a..aa
+/b/c/a..a.aaaaa /b/c/a..a.aaaaa
+/b/c/a..a.aaaa. /b/c/a..a.aaaa.
+/b/c/a..a.aaaa/ /b/c/a..a.aaaa
+/b/c/a..a.aaa.a /b/c/a..a.aaa.a
+/b/c/a..a.aaa.. /b/c/a..a.aaa..
+/b/c/a..a.aaa./ /b/c/a..a.aaa.
+/b/c/a..a.aaa/a /b/c/a..a.aaa/a
+/b/c/a..a.aaa/. /b/c/a..a.aaa
+/b/c/a..a.aaa// /b/c/a..a.aaa
+/b/c/a..a.aa.aa /b/c/a..a.aa.aa
+/b/c/a..a.aa.a. /b/c/a..a.aa.a.
+/b/c/a..a.aa.a/ /b/c/a..a.aa.a
+/b/c/a..a.aa..a /b/c/a..a.aa..a
+/b/c/a..a.aa... /b/c/a..a.aa...
+/b/c/a..a.aa../ /b/c/a..a.aa..
+/b/c/a..a.aa./a /b/c/a..a.aa./a
+/b/c/a..a.aa./. /b/c/a..a.aa.
+/b/c/a..a.aa.// /b/c/a..a.aa.
+/b/c/a..a.aa/aa /b/c/a..a.aa/aa
+/b/c/a..a.aa/a. /b/c/a..a.aa/a.
+/b/c/a..a.aa/a/ /b/c/a..a.aa/a
+/b/c/a..a.aa/.a /b/c/a..a.aa/.a
+/b/c/a..a.aa/.. /b/c
+/b/c/a..a.aa/./ /b/c/a..a.aa
+/b/c/a..a.aa//a /b/c/a..a.aa/a
+/b/c/a..a.aa//. /b/c/a..a.aa
+/b/c/a..a.aa/// /b/c/a..a.aa
+/b/c/a..a.a.aaa /b/c/a..a.a.aaa
+/b/c/a..a.a.aa. /b/c/a..a.a.aa.
+/b/c/a..a.a.aa/ /b/c/a..a.a.aa
+/b/c/a..a.a.a.a /b/c/a..a.a.a.a
+/b/c/a..a.a.a.. /b/c/a..a.a.a..
+/b/c/a..a.a.a./ /b/c/a..a.a.a.
+/b/c/a..a.a.a/a /b/c/a..a.a.a/a
+/b/c/a..a.a.a/. /b/c/a..a.a.a
+/b/c/a..a.a.a// /b/c/a..a.a.a
+/b/c/a..a.a..aa /b/c/a..a.a..aa
+/b/c/a..a.a..a. /b/c/a..a.a..a.
+/b/c/a..a.a..a/ /b/c/a..a.a..a
+/b/c/a..a.a...a /b/c/a..a.a...a
+/b/c/a..a.a.... /b/c/a..a.a....
+/b/c/a..a.a.../ /b/c/a..a.a...
+/b/c/a..a.a../a /b/c/a..a.a../a
+/b/c/a..a.a../. /b/c/a..a.a..
+/b/c/a..a.a..// /b/c/a..a.a..
+/b/c/a..a.a./aa /b/c/a..a.a./aa
+/b/c/a..a.a./a. /b/c/a..a.a./a.
+/b/c/a..a.a./a/ /b/c/a..a.a./a
+/b/c/a..a.a./.a /b/c/a..a.a./.a
+/b/c/a..a.a./.. /b/c
+/b/c/a..a.a././ /b/c/a..a.a.
+/b/c/a..a.a.//a /b/c/a..a.a./a
+/b/c/a..a.a.//. /b/c/a..a.a.
+/b/c/a..a.a./// /b/c/a..a.a.
+/b/c/a..a.a/aaa /b/c/a..a.a/aaa
+/b/c/a..a.a/aa. /b/c/a..a.a/aa.
+/b/c/a..a.a/aa/ /b/c/a..a.a/aa
+/b/c/a..a.a/a.a /b/c/a..a.a/a.a
+/b/c/a..a.a/a.. /b/c/a..a.a/a..
+/b/c/a..a.a/a./ /b/c/a..a.a/a.
+/b/c/a..a.a/a/a /b/c/a..a.a/a/a
+/b/c/a..a.a/a/. /b/c/a..a.a/a
+/b/c/a..a.a/a// /b/c/a..a.a/a
+/b/c/a..a.a/.aa /b/c/a..a.a/.aa
+/b/c/a..a.a/.a. /b/c/a..a.a/.a.
+/b/c/a..a.a/.a/ /b/c/a..a.a/.a
+/b/c/a..a.a/..a /b/c/a..a.a/..a
+/b/c/a..a.a/... /b/c/a..a.a/...
+/b/c/a..a.a/../ /b/c
+/b/c/a..a.a/./a /b/c/a..a.a/a
+/b/c/a..a.a/./. /b/c/a..a.a
+/b/c/a..a.a/.// /b/c/a..a.a
+/b/c/a..a.a//aa /b/c/a..a.a/aa
+/b/c/a..a.a//a. /b/c/a..a.a/a.
+/b/c/a..a.a//a/ /b/c/a..a.a/a
+/b/c/a..a.a//.a /b/c/a..a.a/.a
+/b/c/a..a.a//.. /b/c
+/b/c/a..a.a//./ /b/c/a..a.a
+/b/c/a..a.a///a /b/c/a..a.a/a
+/b/c/a..a.a///. /b/c/a..a.a
+/b/c/a..a.a//// /b/c/a..a.a
+/b/c/a..a..aaaa /b/c/a..a..aaaa
+/b/c/a..a..aaa. /b/c/a..a..aaa.
+/b/c/a..a..aaa/ /b/c/a..a..aaa
+/b/c/a..a..aa.a /b/c/a..a..aa.a
+/b/c/a..a..aa.. /b/c/a..a..aa..
+/b/c/a..a..aa./ /b/c/a..a..aa.
+/b/c/a..a..aa/a /b/c/a..a..aa/a
+/b/c/a..a..aa/. /b/c/a..a..aa
+/b/c/a..a..aa// /b/c/a..a..aa
+/b/c/a..a..a.aa /b/c/a..a..a.aa
+/b/c/a..a..a.a. /b/c/a..a..a.a.
+/b/c/a..a..a.a/ /b/c/a..a..a.a
+/b/c/a..a..a..a /b/c/a..a..a..a
+/b/c/a..a..a... /b/c/a..a..a...
+/b/c/a..a..a../ /b/c/a..a..a..
+/b/c/a..a..a./a /b/c/a..a..a./a
+/b/c/a..a..a./. /b/c/a..a..a.
+/b/c/a..a..a.// /b/c/a..a..a.
+/b/c/a..a..a/aa /b/c/a..a..a/aa
+/b/c/a..a..a/a. /b/c/a..a..a/a.
+/b/c/a..a..a/a/ /b/c/a..a..a/a
+/b/c/a..a..a/.a /b/c/a..a..a/.a
+/b/c/a..a..a/.. /b/c
+/b/c/a..a..a/./ /b/c/a..a..a
+/b/c/a..a..a//a /b/c/a..a..a/a
+/b/c/a..a..a//. /b/c/a..a..a
+/b/c/a..a..a/// /b/c/a..a..a
+/b/c/a..a...aaa /b/c/a..a...aaa
+/b/c/a..a...aa. /b/c/a..a...aa.
+/b/c/a..a...aa/ /b/c/a..a...aa
+/b/c/a..a...a.a /b/c/a..a...a.a
+/b/c/a..a...a.. /b/c/a..a...a..
+/b/c/a..a...a./ /b/c/a..a...a.
+/b/c/a..a...a/a /b/c/a..a...a/a
+/b/c/a..a...a/. /b/c/a..a...a
+/b/c/a..a...a// /b/c/a..a...a
+/b/c/a..a....aa /b/c/a..a....aa
+/b/c/a..a....a. /b/c/a..a....a.
+/b/c/a..a....a/ /b/c/a..a....a
+/b/c/a..a.....a /b/c/a..a.....a
+/b/c/a..a...... /b/c/a..a......
+/b/c/a..a...../ /b/c/a..a.....
+/b/c/a..a..../a /b/c/a..a..../a
+/b/c/a..a..../. /b/c/a..a....
+/b/c/a..a....// /b/c/a..a....
+/b/c/a..a.../aa /b/c/a..a.../aa
+/b/c/a..a.../a. /b/c/a..a.../a.
+/b/c/a..a.../a/ /b/c/a..a.../a
+/b/c/a..a.../.a /b/c/a..a.../.a
+/b/c/a..a.../.. /b/c
+/b/c/a..a..././ /b/c/a..a...
+/b/c/a..a...//a /b/c/a..a.../a
+/b/c/a..a...//. /b/c/a..a...
+/b/c/a..a.../// /b/c/a..a...
+/b/c/a..a../aaa /b/c/a..a../aaa
+/b/c/a..a../aa. /b/c/a..a../aa.
+/b/c/a..a../aa/ /b/c/a..a../aa
+/b/c/a..a../a.a /b/c/a..a../a.a
+/b/c/a..a../a.. /b/c/a..a../a..
+/b/c/a..a../a./ /b/c/a..a../a.
+/b/c/a..a../a/a /b/c/a..a../a/a
+/b/c/a..a../a/. /b/c/a..a../a
+/b/c/a..a../a// /b/c/a..a../a
+/b/c/a..a../.aa /b/c/a..a../.aa
+/b/c/a..a../.a. /b/c/a..a../.a.
+/b/c/a..a../.a/ /b/c/a..a../.a
+/b/c/a..a../..a /b/c/a..a../..a
+/b/c/a..a../... /b/c/a..a../...
+/b/c/a..a../../ /b/c
+/b/c/a..a.././a /b/c/a..a../a
+/b/c/a..a.././. /b/c/a..a..
+/b/c/a..a../.// /b/c/a..a..
+/b/c/a..a..//aa /b/c/a..a../aa
+/b/c/a..a..//a. /b/c/a..a../a.
+/b/c/a..a..//a/ /b/c/a..a../a
+/b/c/a..a..//.a /b/c/a..a../.a
+/b/c/a..a..//.. /b/c
+/b/c/a..a..//./ /b/c/a..a..
+/b/c/a..a..///a /b/c/a..a../a
+/b/c/a..a..///. /b/c/a..a..
+/b/c/a..a..//// /b/c/a..a..
+/b/c/a..a./aaaa /b/c/a..a./aaaa
+/b/c/a..a./aaa. /b/c/a..a./aaa.
+/b/c/a..a./aaa/ /b/c/a..a./aaa
+/b/c/a..a./aa.a /b/c/a..a./aa.a
+/b/c/a..a./aa.. /b/c/a..a./aa..
+/b/c/a..a./aa./ /b/c/a..a./aa.
+/b/c/a..a./aa/a /b/c/a..a./aa/a
+/b/c/a..a./aa/. /b/c/a..a./aa
+/b/c/a..a./aa// /b/c/a..a./aa
+/b/c/a..a./a.aa /b/c/a..a./a.aa
+/b/c/a..a./a.a. /b/c/a..a./a.a.
+/b/c/a..a./a.a/ /b/c/a..a./a.a
+/b/c/a..a./a..a /b/c/a..a./a..a
+/b/c/a..a./a... /b/c/a..a./a...
+/b/c/a..a./a../ /b/c/a..a./a..
+/b/c/a..a./a./a /b/c/a..a./a./a
+/b/c/a..a./a./. /b/c/a..a./a.
+/b/c/a..a./a.// /b/c/a..a./a.
+/b/c/a..a./a/aa /b/c/a..a./a/aa
+/b/c/a..a./a/a. /b/c/a..a./a/a.
+/b/c/a..a./a/a/ /b/c/a..a./a/a
+/b/c/a..a./a/.a /b/c/a..a./a/.a
+/b/c/a..a./a/.. /b/c/a..a.
+/b/c/a..a./a/./ /b/c/a..a./a
+/b/c/a..a./a//a /b/c/a..a./a/a
+/b/c/a..a./a//. /b/c/a..a./a
+/b/c/a..a./a/// /b/c/a..a./a
+/b/c/a..a./.aaa /b/c/a..a./.aaa
+/b/c/a..a./.aa. /b/c/a..a./.aa.
+/b/c/a..a./.aa/ /b/c/a..a./.aa
+/b/c/a..a./.a.a /b/c/a..a./.a.a
+/b/c/a..a./.a.. /b/c/a..a./.a..
+/b/c/a..a./.a./ /b/c/a..a./.a.
+/b/c/a..a./.a/a /b/c/a..a./.a/a
+/b/c/a..a./.a/. /b/c/a..a./.a
+/b/c/a..a./.a// /b/c/a..a./.a
+/b/c/a..a./..aa /b/c/a..a./..aa
+/b/c/a..a./..a. /b/c/a..a./..a.
+/b/c/a..a./..a/ /b/c/a..a./..a
+/b/c/a..a./...a /b/c/a..a./...a
+/b/c/a..a./.... /b/c/a..a./....
+/b/c/a..a./.../ /b/c/a..a./...
+/b/c/a..a./../a /b/c/a
+/b/c/a..a./../. /b/c
+/b/c/a..a./..// /b/c
+/b/c/a..a././aa /b/c/a..a./aa
+/b/c/a..a././a. /b/c/a..a./a.
+/b/c/a..a././a/ /b/c/a..a./a
+/b/c/a..a././.a /b/c/a..a./.a
+/b/c/a..a././.. /b/c
+/b/c/a..a./././ /b/c/a..a.
+/b/c/a..a././/a /b/c/a..a./a
+/b/c/a..a././/. /b/c/a..a.
+/b/c/a..a././// /b/c/a..a.
+/b/c/a..a.//aaa /b/c/a..a./aaa
+/b/c/a..a.//aa. /b/c/a..a./aa.
+/b/c/a..a.//aa/ /b/c/a..a./aa
+/b/c/a..a.//a.a /b/c/a..a./a.a
+/b/c/a..a.//a.. /b/c/a..a./a..
+/b/c/a..a.//a./ /b/c/a..a./a.
+/b/c/a..a.//a/a /b/c/a..a./a/a
+/b/c/a..a.//a/. /b/c/a..a./a
+/b/c/a..a.//a// /b/c/a..a./a
+/b/c/a..a.//.aa /b/c/a..a./.aa
+/b/c/a..a.//.a. /b/c/a..a./.a.
+/b/c/a..a.//.a/ /b/c/a..a./.a
+/b/c/a..a.//..a /b/c/a..a./..a
+/b/c/a..a.//... /b/c/a..a./...
+/b/c/a..a.//../ /b/c
+/b/c/a..a.//./a /b/c/a..a./a
+/b/c/a..a.//./. /b/c/a..a.
+/b/c/a..a.//.// /b/c/a..a.
+/b/c/a..a.///aa /b/c/a..a./aa
+/b/c/a..a.///a. /b/c/a..a./a.
+/b/c/a..a.///a/ /b/c/a..a./a
+/b/c/a..a.///.a /b/c/a..a./.a
+/b/c/a..a.///.. /b/c
+/b/c/a..a.///./ /b/c/a..a.
+/b/c/a..a.////a /b/c/a..a./a
+/b/c/a..a.////. /b/c/a..a.
+/b/c/a..a.///// /b/c/a..a.
+/b/c/a..a/aaaaa /b/c/a..a/aaaaa
+/b/c/a..a/aaaa. /b/c/a..a/aaaa.
+/b/c/a..a/aaaa/ /b/c/a..a/aaaa
+/b/c/a..a/aaa.a /b/c/a..a/aaa.a
+/b/c/a..a/aaa.. /b/c/a..a/aaa..
+/b/c/a..a/aaa./ /b/c/a..a/aaa.
+/b/c/a..a/aaa/a /b/c/a..a/aaa/a
+/b/c/a..a/aaa/. /b/c/a..a/aaa
+/b/c/a..a/aaa// /b/c/a..a/aaa
+/b/c/a..a/aa.aa /b/c/a..a/aa.aa
+/b/c/a..a/aa.a. /b/c/a..a/aa.a.
+/b/c/a..a/aa.a/ /b/c/a..a/aa.a
+/b/c/a..a/aa..a /b/c/a..a/aa..a
+/b/c/a..a/aa... /b/c/a..a/aa...
+/b/c/a..a/aa../ /b/c/a..a/aa..
+/b/c/a..a/aa./a /b/c/a..a/aa./a
+/b/c/a..a/aa./. /b/c/a..a/aa.
+/b/c/a..a/aa.// /b/c/a..a/aa.
+/b/c/a..a/aa/aa /b/c/a..a/aa/aa
+/b/c/a..a/aa/a. /b/c/a..a/aa/a.
+/b/c/a..a/aa/a/ /b/c/a..a/aa/a
+/b/c/a..a/aa/.a /b/c/a..a/aa/.a
+/b/c/a..a/aa/.. /b/c/a..a
+/b/c/a..a/aa/./ /b/c/a..a/aa
+/b/c/a..a/aa//a /b/c/a..a/aa/a
+/b/c/a..a/aa//. /b/c/a..a/aa
+/b/c/a..a/aa/// /b/c/a..a/aa
+/b/c/a..a/a.aaa /b/c/a..a/a.aaa
+/b/c/a..a/a.aa. /b/c/a..a/a.aa.
+/b/c/a..a/a.aa/ /b/c/a..a/a.aa
+/b/c/a..a/a.a.a /b/c/a..a/a.a.a
+/b/c/a..a/a.a.. /b/c/a..a/a.a..
+/b/c/a..a/a.a./ /b/c/a..a/a.a.
+/b/c/a..a/a.a/a /b/c/a..a/a.a/a
+/b/c/a..a/a.a/. /b/c/a..a/a.a
+/b/c/a..a/a.a// /b/c/a..a/a.a
+/b/c/a..a/a..aa /b/c/a..a/a..aa
+/b/c/a..a/a..a. /b/c/a..a/a..a.
+/b/c/a..a/a..a/ /b/c/a..a/a..a
+/b/c/a..a/a...a /b/c/a..a/a...a
+/b/c/a..a/a.... /b/c/a..a/a....
+/b/c/a..a/a.../ /b/c/a..a/a...
+/b/c/a..a/a../a /b/c/a..a/a../a
+/b/c/a..a/a../. /b/c/a..a/a..
+/b/c/a..a/a..// /b/c/a..a/a..
+/b/c/a..a/a./aa /b/c/a..a/a./aa
+/b/c/a..a/a./a. /b/c/a..a/a./a.
+/b/c/a..a/a./a/ /b/c/a..a/a./a
+/b/c/a..a/a./.a /b/c/a..a/a./.a
+/b/c/a..a/a./.. /b/c/a..a
+/b/c/a..a/a././ /b/c/a..a/a.
+/b/c/a..a/a.//a /b/c/a..a/a./a
+/b/c/a..a/a.//. /b/c/a..a/a.
+/b/c/a..a/a./// /b/c/a..a/a.
+/b/c/a..a/a/aaa /b/c/a..a/a/aaa
+/b/c/a..a/a/aa. /b/c/a..a/a/aa.
+/b/c/a..a/a/aa/ /b/c/a..a/a/aa
+/b/c/a..a/a/a.a /b/c/a..a/a/a.a
+/b/c/a..a/a/a.. /b/c/a..a/a/a..
+/b/c/a..a/a/a./ /b/c/a..a/a/a.
+/b/c/a..a/a/a/a /b/c/a..a/a/a/a
+/b/c/a..a/a/a/. /b/c/a..a/a/a
+/b/c/a..a/a/a// /b/c/a..a/a/a
+/b/c/a..a/a/.aa /b/c/a..a/a/.aa
+/b/c/a..a/a/.a. /b/c/a..a/a/.a.
+/b/c/a..a/a/.a/ /b/c/a..a/a/.a
+/b/c/a..a/a/..a /b/c/a..a/a/..a
+/b/c/a..a/a/... /b/c/a..a/a/...
+/b/c/a..a/a/../ /b/c/a..a
+/b/c/a..a/a/./a /b/c/a..a/a/a
+/b/c/a..a/a/./. /b/c/a..a/a
+/b/c/a..a/a/.// /b/c/a..a/a
+/b/c/a..a/a//aa /b/c/a..a/a/aa
+/b/c/a..a/a//a. /b/c/a..a/a/a.
+/b/c/a..a/a//a/ /b/c/a..a/a/a
+/b/c/a..a/a//.a /b/c/a..a/a/.a
+/b/c/a..a/a//.. /b/c/a..a
+/b/c/a..a/a//./ /b/c/a..a/a
+/b/c/a..a/a///a /b/c/a..a/a/a
+/b/c/a..a/a///. /b/c/a..a/a
+/b/c/a..a/a//// /b/c/a..a/a
+/b/c/a..a/.aaaa /b/c/a..a/.aaaa
+/b/c/a..a/.aaa. /b/c/a..a/.aaa.
+/b/c/a..a/.aaa/ /b/c/a..a/.aaa
+/b/c/a..a/.aa.a /b/c/a..a/.aa.a
+/b/c/a..a/.aa.. /b/c/a..a/.aa..
+/b/c/a..a/.aa./ /b/c/a..a/.aa.
+/b/c/a..a/.aa/a /b/c/a..a/.aa/a
+/b/c/a..a/.aa/. /b/c/a..a/.aa
+/b/c/a..a/.aa// /b/c/a..a/.aa
+/b/c/a..a/.a.aa /b/c/a..a/.a.aa
+/b/c/a..a/.a.a. /b/c/a..a/.a.a.
+/b/c/a..a/.a.a/ /b/c/a..a/.a.a
+/b/c/a..a/.a..a /b/c/a..a/.a..a
+/b/c/a..a/.a... /b/c/a..a/.a...
+/b/c/a..a/.a../ /b/c/a..a/.a..
+/b/c/a..a/.a./a /b/c/a..a/.a./a
+/b/c/a..a/.a./. /b/c/a..a/.a.
+/b/c/a..a/.a.// /b/c/a..a/.a.
+/b/c/a..a/.a/aa /b/c/a..a/.a/aa
+/b/c/a..a/.a/a. /b/c/a..a/.a/a.
+/b/c/a..a/.a/a/ /b/c/a..a/.a/a
+/b/c/a..a/.a/.a /b/c/a..a/.a/.a
+/b/c/a..a/.a/.. /b/c/a..a
+/b/c/a..a/.a/./ /b/c/a..a/.a
+/b/c/a..a/.a//a /b/c/a..a/.a/a
+/b/c/a..a/.a//. /b/c/a..a/.a
+/b/c/a..a/.a/// /b/c/a..a/.a
+/b/c/a..a/..aaa /b/c/a..a/..aaa
+/b/c/a..a/..aa. /b/c/a..a/..aa.
+/b/c/a..a/..aa/ /b/c/a..a/..aa
+/b/c/a..a/..a.a /b/c/a..a/..a.a
+/b/c/a..a/..a.. /b/c/a..a/..a..
+/b/c/a..a/..a./ /b/c/a..a/..a.
+/b/c/a..a/..a/a /b/c/a..a/..a/a
+/b/c/a..a/..a/. /b/c/a..a/..a
+/b/c/a..a/..a// /b/c/a..a/..a
+/b/c/a..a/...aa /b/c/a..a/...aa
+/b/c/a..a/...a. /b/c/a..a/...a.
+/b/c/a..a/...a/ /b/c/a..a/...a
+/b/c/a..a/....a /b/c/a..a/....a
+/b/c/a..a/..... /b/c/a..a/.....
+/b/c/a..a/..../ /b/c/a..a/....
+/b/c/a..a/.../a /b/c/a..a/.../a
+/b/c/a..a/.../. /b/c/a..a/...
+/b/c/a..a/...// /b/c/a..a/...
+/b/c/a..a/../aa /b/c/aa
+/b/c/a..a/../a. /b/c/a.
+/b/c/a..a/../a/ /b/c/a
+/b/c/a..a/../.a /b/c/.a
+/b/c/a..a/../.. /b
+/b/c/a..a/.././ /b/c
+/b/c/a..a/..//a /b/c/a
+/b/c/a..a/..//. /b/c
+/b/c/a..a/../// /b/c
+/b/c/a..a/./aaa /b/c/a..a/aaa
+/b/c/a..a/./aa. /b/c/a..a/aa.
+/b/c/a..a/./aa/ /b/c/a..a/aa
+/b/c/a..a/./a.a /b/c/a..a/a.a
+/b/c/a..a/./a.. /b/c/a..a/a..
+/b/c/a..a/./a./ /b/c/a..a/a.
+/b/c/a..a/./a/a /b/c/a..a/a/a
+/b/c/a..a/./a/. /b/c/a..a/a
+/b/c/a..a/./a// /b/c/a..a/a
+/b/c/a..a/./.aa /b/c/a..a/.aa
+/b/c/a..a/./.a. /b/c/a..a/.a.
+/b/c/a..a/./.a/ /b/c/a..a/.a
+/b/c/a..a/./..a /b/c/a..a/..a
+/b/c/a..a/./... /b/c/a..a/...
+/b/c/a..a/./../ /b/c
+/b/c/a..a/././a /b/c/a..a/a
+/b/c/a..a/././. /b/c/a..a
+/b/c/a..a/./.// /b/c/a..a
+/b/c/a..a/.//aa /b/c/a..a/aa
+/b/c/a..a/.//a. /b/c/a..a/a.
+/b/c/a..a/.//a/ /b/c/a..a/a
+/b/c/a..a/.//.a /b/c/a..a/.a
+/b/c/a..a/.//.. /b/c
+/b/c/a..a/.//./ /b/c/a..a
+/b/c/a..a/.///a /b/c/a..a/a
+/b/c/a..a/.///. /b/c/a..a
+/b/c/a..a/.//// /b/c/a..a
+/b/c/a..a//aaaa /b/c/a..a/aaaa
+/b/c/a..a//aaa. /b/c/a..a/aaa.
+/b/c/a..a//aaa/ /b/c/a..a/aaa
+/b/c/a..a//aa.a /b/c/a..a/aa.a
+/b/c/a..a//aa.. /b/c/a..a/aa..
+/b/c/a..a//aa./ /b/c/a..a/aa.
+/b/c/a..a//aa/a /b/c/a..a/aa/a
+/b/c/a..a//aa/. /b/c/a..a/aa
+/b/c/a..a//aa// /b/c/a..a/aa
+/b/c/a..a//a.aa /b/c/a..a/a.aa
+/b/c/a..a//a.a. /b/c/a..a/a.a.
+/b/c/a..a//a.a/ /b/c/a..a/a.a
+/b/c/a..a//a..a /b/c/a..a/a..a
+/b/c/a..a//a... /b/c/a..a/a...
+/b/c/a..a//a../ /b/c/a..a/a..
+/b/c/a..a//a./a /b/c/a..a/a./a
+/b/c/a..a//a./. /b/c/a..a/a.
+/b/c/a..a//a.// /b/c/a..a/a.
+/b/c/a..a//a/aa /b/c/a..a/a/aa
+/b/c/a..a//a/a. /b/c/a..a/a/a.
+/b/c/a..a//a/a/ /b/c/a..a/a/a
+/b/c/a..a//a/.a /b/c/a..a/a/.a
+/b/c/a..a//a/.. /b/c/a..a
+/b/c/a..a//a/./ /b/c/a..a/a
+/b/c/a..a//a//a /b/c/a..a/a/a
+/b/c/a..a//a//. /b/c/a..a/a
+/b/c/a..a//a/// /b/c/a..a/a
+/b/c/a..a//.aaa /b/c/a..a/.aaa
+/b/c/a..a//.aa. /b/c/a..a/.aa.
+/b/c/a..a//.aa/ /b/c/a..a/.aa
+/b/c/a..a//.a.a /b/c/a..a/.a.a
+/b/c/a..a//.a.. /b/c/a..a/.a..
+/b/c/a..a//.a./ /b/c/a..a/.a.
+/b/c/a..a//.a/a /b/c/a..a/.a/a
+/b/c/a..a//.a/. /b/c/a..a/.a
+/b/c/a..a//.a// /b/c/a..a/.a
+/b/c/a..a//..aa /b/c/a..a/..aa
+/b/c/a..a//..a. /b/c/a..a/..a.
+/b/c/a..a//..a/ /b/c/a..a/..a
+/b/c/a..a//...a /b/c/a..a/...a
+/b/c/a..a//.... /b/c/a..a/....
+/b/c/a..a//.../ /b/c/a..a/...
+/b/c/a..a//../a /b/c/a
+/b/c/a..a//../. /b/c
+/b/c/a..a//..// /b/c
+/b/c/a..a//./aa /b/c/a..a/aa
+/b/c/a..a//./a. /b/c/a..a/a.
+/b/c/a..a//./a/ /b/c/a..a/a
+/b/c/a..a//./.a /b/c/a..a/.a
+/b/c/a..a//./.. /b/c
+/b/c/a..a//././ /b/c/a..a
+/b/c/a..a//.//a /b/c/a..a/a
+/b/c/a..a//.//. /b/c/a..a
+/b/c/a..a//./// /b/c/a..a
+/b/c/a..a///aaa /b/c/a..a/aaa
+/b/c/a..a///aa. /b/c/a..a/aa.
+/b/c/a..a///aa/ /b/c/a..a/aa
+/b/c/a..a///a.a /b/c/a..a/a.a
+/b/c/a..a///a.. /b/c/a..a/a..
+/b/c/a..a///a./ /b/c/a..a/a.
+/b/c/a..a///a/a /b/c/a..a/a/a
+/b/c/a..a///a/. /b/c/a..a/a
+/b/c/a..a///a// /b/c/a..a/a
+/b/c/a..a///.aa /b/c/a..a/.aa
+/b/c/a..a///.a. /b/c/a..a/.a.
+/b/c/a..a///.a/ /b/c/a..a/.a
+/b/c/a..a///..a /b/c/a..a/..a
+/b/c/a..a///... /b/c/a..a/...
+/b/c/a..a///../ /b/c
+/b/c/a..a///./a /b/c/a..a/a
+/b/c/a..a///./. /b/c/a..a
+/b/c/a..a///.// /b/c/a..a
+/b/c/a..a////aa /b/c/a..a/aa
+/b/c/a..a////a. /b/c/a..a/a.
+/b/c/a..a////a/ /b/c/a..a/a
+/b/c/a..a////.a /b/c/a..a/.a
+/b/c/a..a////.. /b/c
+/b/c/a..a////./ /b/c/a..a
+/b/c/a..a/////a /b/c/a..a/a
+/b/c/a..a/////. /b/c/a..a
+/b/c/a..a////// /b/c/a..a
+/b/c/a...aaaaaa /b/c/a...aaaaaa
+/b/c/a...aaaaa. /b/c/a...aaaaa.
+/b/c/a...aaaaa/ /b/c/a...aaaaa
+/b/c/a...aaaa.a /b/c/a...aaaa.a
+/b/c/a...aaaa.. /b/c/a...aaaa..
+/b/c/a...aaaa./ /b/c/a...aaaa.
+/b/c/a...aaaa/a /b/c/a...aaaa/a
+/b/c/a...aaaa/. /b/c/a...aaaa
+/b/c/a...aaaa// /b/c/a...aaaa
+/b/c/a...aaa.aa /b/c/a...aaa.aa
+/b/c/a...aaa.a. /b/c/a...aaa.a.
+/b/c/a...aaa.a/ /b/c/a...aaa.a
+/b/c/a...aaa..a /b/c/a...aaa..a
+/b/c/a...aaa... /b/c/a...aaa...
+/b/c/a...aaa../ /b/c/a...aaa..
+/b/c/a...aaa./a /b/c/a...aaa./a
+/b/c/a...aaa./. /b/c/a...aaa.
+/b/c/a...aaa.// /b/c/a...aaa.
+/b/c/a...aaa/aa /b/c/a...aaa/aa
+/b/c/a...aaa/a. /b/c/a...aaa/a.
+/b/c/a...aaa/a/ /b/c/a...aaa/a
+/b/c/a...aaa/.a /b/c/a...aaa/.a
+/b/c/a...aaa/.. /b/c
+/b/c/a...aaa/./ /b/c/a...aaa
+/b/c/a...aaa//a /b/c/a...aaa/a
+/b/c/a...aaa//. /b/c/a...aaa
+/b/c/a...aaa/// /b/c/a...aaa
+/b/c/a...aa.aaa /b/c/a...aa.aaa
+/b/c/a...aa.aa. /b/c/a...aa.aa.
+/b/c/a...aa.aa/ /b/c/a...aa.aa
+/b/c/a...aa.a.a /b/c/a...aa.a.a
+/b/c/a...aa.a.. /b/c/a...aa.a..
+/b/c/a...aa.a./ /b/c/a...aa.a.
+/b/c/a...aa.a/a /b/c/a...aa.a/a
+/b/c/a...aa.a/. /b/c/a...aa.a
+/b/c/a...aa.a// /b/c/a...aa.a
+/b/c/a...aa..aa /b/c/a...aa..aa
+/b/c/a...aa..a. /b/c/a...aa..a.
+/b/c/a...aa..a/ /b/c/a...aa..a
+/b/c/a...aa...a /b/c/a...aa...a
+/b/c/a...aa.... /b/c/a...aa....
+/b/c/a...aa.../ /b/c/a...aa...
+/b/c/a...aa../a /b/c/a...aa../a
+/b/c/a...aa../. /b/c/a...aa..
+/b/c/a...aa..// /b/c/a...aa..
+/b/c/a...aa./aa /b/c/a...aa./aa
+/b/c/a...aa./a. /b/c/a...aa./a.
+/b/c/a...aa./a/ /b/c/a...aa./a
+/b/c/a...aa./.a /b/c/a...aa./.a
+/b/c/a...aa./.. /b/c
+/b/c/a...aa././ /b/c/a...aa.
+/b/c/a...aa.//a /b/c/a...aa./a
+/b/c/a...aa.//. /b/c/a...aa.
+/b/c/a...aa./// /b/c/a...aa.
+/b/c/a...aa/aaa /b/c/a...aa/aaa
+/b/c/a...aa/aa. /b/c/a...aa/aa.
+/b/c/a...aa/aa/ /b/c/a...aa/aa
+/b/c/a...aa/a.a /b/c/a...aa/a.a
+/b/c/a...aa/a.. /b/c/a...aa/a..
+/b/c/a...aa/a./ /b/c/a...aa/a.
+/b/c/a...aa/a/a /b/c/a...aa/a/a
+/b/c/a...aa/a/. /b/c/a...aa/a
+/b/c/a...aa/a// /b/c/a...aa/a
+/b/c/a...aa/.aa /b/c/a...aa/.aa
+/b/c/a...aa/.a. /b/c/a...aa/.a.
+/b/c/a...aa/.a/ /b/c/a...aa/.a
+/b/c/a...aa/..a /b/c/a...aa/..a
+/b/c/a...aa/... /b/c/a...aa/...
+/b/c/a...aa/../ /b/c
+/b/c/a...aa/./a /b/c/a...aa/a
+/b/c/a...aa/./. /b/c/a...aa
+/b/c/a...aa/.// /b/c/a...aa
+/b/c/a...aa//aa /b/c/a...aa/aa
+/b/c/a...aa//a. /b/c/a...aa/a.
+/b/c/a...aa//a/ /b/c/a...aa/a
+/b/c/a...aa//.a /b/c/a...aa/.a
+/b/c/a...aa//.. /b/c
+/b/c/a...aa//./ /b/c/a...aa
+/b/c/a...aa///a /b/c/a...aa/a
+/b/c/a...aa///. /b/c/a...aa
+/b/c/a...aa//// /b/c/a...aa
+/b/c/a...a.aaaa /b/c/a...a.aaaa
+/b/c/a...a.aaa. /b/c/a...a.aaa.
+/b/c/a...a.aaa/ /b/c/a...a.aaa
+/b/c/a...a.aa.a /b/c/a...a.aa.a
+/b/c/a...a.aa.. /b/c/a...a.aa..
+/b/c/a...a.aa./ /b/c/a...a.aa.
+/b/c/a...a.aa/a /b/c/a...a.aa/a
+/b/c/a...a.aa/. /b/c/a...a.aa
+/b/c/a...a.aa// /b/c/a...a.aa
+/b/c/a...a.a.aa /b/c/a...a.a.aa
+/b/c/a...a.a.a. /b/c/a...a.a.a.
+/b/c/a...a.a.a/ /b/c/a...a.a.a
+/b/c/a...a.a..a /b/c/a...a.a..a
+/b/c/a...a.a... /b/c/a...a.a...
+/b/c/a...a.a../ /b/c/a...a.a..
+/b/c/a...a.a./a /b/c/a...a.a./a
+/b/c/a...a.a./. /b/c/a...a.a.
+/b/c/a...a.a.// /b/c/a...a.a.
+/b/c/a...a.a/aa /b/c/a...a.a/aa
+/b/c/a...a.a/a. /b/c/a...a.a/a.
+/b/c/a...a.a/a/ /b/c/a...a.a/a
+/b/c/a...a.a/.a /b/c/a...a.a/.a
+/b/c/a...a.a/.. /b/c
+/b/c/a...a.a/./ /b/c/a...a.a
+/b/c/a...a.a//a /b/c/a...a.a/a
+/b/c/a...a.a//. /b/c/a...a.a
+/b/c/a...a.a/// /b/c/a...a.a
+/b/c/a...a..aaa /b/c/a...a..aaa
+/b/c/a...a..aa. /b/c/a...a..aa.
+/b/c/a...a..aa/ /b/c/a...a..aa
+/b/c/a...a..a.a /b/c/a...a..a.a
+/b/c/a...a..a.. /b/c/a...a..a..
+/b/c/a...a..a./ /b/c/a...a..a.
+/b/c/a...a..a/a /b/c/a...a..a/a
+/b/c/a...a..a/. /b/c/a...a..a
+/b/c/a...a..a// /b/c/a...a..a
+/b/c/a...a...aa /b/c/a...a...aa
+/b/c/a...a...a. /b/c/a...a...a.
+/b/c/a...a...a/ /b/c/a...a...a
+/b/c/a...a....a /b/c/a...a....a
+/b/c/a...a..... /b/c/a...a.....
+/b/c/a...a..../ /b/c/a...a....
+/b/c/a...a.../a /b/c/a...a.../a
+/b/c/a...a.../. /b/c/a...a...
+/b/c/a...a...// /b/c/a...a...
+/b/c/a...a../aa /b/c/a...a../aa
+/b/c/a...a../a. /b/c/a...a../a.
+/b/c/a...a../a/ /b/c/a...a../a
+/b/c/a...a../.a /b/c/a...a../.a
+/b/c/a...a../.. /b/c
+/b/c/a...a.././ /b/c/a...a..
+/b/c/a...a..//a /b/c/a...a../a
+/b/c/a...a..//. /b/c/a...a..
+/b/c/a...a../// /b/c/a...a..
+/b/c/a...a./aaa /b/c/a...a./aaa
+/b/c/a...a./aa. /b/c/a...a./aa.
+/b/c/a...a./aa/ /b/c/a...a./aa
+/b/c/a...a./a.a /b/c/a...a./a.a
+/b/c/a...a./a.. /b/c/a...a./a..
+/b/c/a...a./a./ /b/c/a...a./a.
+/b/c/a...a./a/a /b/c/a...a./a/a
+/b/c/a...a./a/. /b/c/a...a./a
+/b/c/a...a./a// /b/c/a...a./a
+/b/c/a...a./.aa /b/c/a...a./.aa
+/b/c/a...a./.a. /b/c/a...a./.a.
+/b/c/a...a./.a/ /b/c/a...a./.a
+/b/c/a...a./..a /b/c/a...a./..a
+/b/c/a...a./... /b/c/a...a./...
+/b/c/a...a./../ /b/c
+/b/c/a...a././a /b/c/a...a./a
+/b/c/a...a././. /b/c/a...a.
+/b/c/a...a./.// /b/c/a...a.
+/b/c/a...a.//aa /b/c/a...a./aa
+/b/c/a...a.//a. /b/c/a...a./a.
+/b/c/a...a.//a/ /b/c/a...a./a
+/b/c/a...a.//.a /b/c/a...a./.a
+/b/c/a...a.//.. /b/c
+/b/c/a...a.//./ /b/c/a...a.
+/b/c/a...a.///a /b/c/a...a./a
+/b/c/a...a.///. /b/c/a...a.
+/b/c/a...a.//// /b/c/a...a.
+/b/c/a...a/aaaa /b/c/a...a/aaaa
+/b/c/a...a/aaa. /b/c/a...a/aaa.
+/b/c/a...a/aaa/ /b/c/a...a/aaa
+/b/c/a...a/aa.a /b/c/a...a/aa.a
+/b/c/a...a/aa.. /b/c/a...a/aa..
+/b/c/a...a/aa./ /b/c/a...a/aa.
+/b/c/a...a/aa/a /b/c/a...a/aa/a
+/b/c/a...a/aa/. /b/c/a...a/aa
+/b/c/a...a/aa// /b/c/a...a/aa
+/b/c/a...a/a.aa /b/c/a...a/a.aa
+/b/c/a...a/a.a. /b/c/a...a/a.a.
+/b/c/a...a/a.a/ /b/c/a...a/a.a
+/b/c/a...a/a..a /b/c/a...a/a..a
+/b/c/a...a/a... /b/c/a...a/a...
+/b/c/a...a/a../ /b/c/a...a/a..
+/b/c/a...a/a./a /b/c/a...a/a./a
+/b/c/a...a/a./. /b/c/a...a/a.
+/b/c/a...a/a.// /b/c/a...a/a.
+/b/c/a...a/a/aa /b/c/a...a/a/aa
+/b/c/a...a/a/a. /b/c/a...a/a/a.
+/b/c/a...a/a/a/ /b/c/a...a/a/a
+/b/c/a...a/a/.a /b/c/a...a/a/.a
+/b/c/a...a/a/.. /b/c/a...a
+/b/c/a...a/a/./ /b/c/a...a/a
+/b/c/a...a/a//a /b/c/a...a/a/a
+/b/c/a...a/a//. /b/c/a...a/a
+/b/c/a...a/a/// /b/c/a...a/a
+/b/c/a...a/.aaa /b/c/a...a/.aaa
+/b/c/a...a/.aa. /b/c/a...a/.aa.
+/b/c/a...a/.aa/ /b/c/a...a/.aa
+/b/c/a...a/.a.a /b/c/a...a/.a.a
+/b/c/a...a/.a.. /b/c/a...a/.a..
+/b/c/a...a/.a./ /b/c/a...a/.a.
+/b/c/a...a/.a/a /b/c/a...a/.a/a
+/b/c/a...a/.a/. /b/c/a...a/.a
+/b/c/a...a/.a// /b/c/a...a/.a
+/b/c/a...a/..aa /b/c/a...a/..aa
+/b/c/a...a/..a. /b/c/a...a/..a.
+/b/c/a...a/..a/ /b/c/a...a/..a
+/b/c/a...a/...a /b/c/a...a/...a
+/b/c/a...a/.... /b/c/a...a/....
+/b/c/a...a/.../ /b/c/a...a/...
+/b/c/a...a/../a /b/c/a
+/b/c/a...a/../. /b/c
+/b/c/a...a/..// /b/c
+/b/c/a...a/./aa /b/c/a...a/aa
+/b/c/a...a/./a. /b/c/a...a/a.
+/b/c/a...a/./a/ /b/c/a...a/a
+/b/c/a...a/./.a /b/c/a...a/.a
+/b/c/a...a/./.. /b/c
+/b/c/a...a/././ /b/c/a...a
+/b/c/a...a/.//a /b/c/a...a/a
+/b/c/a...a/.//. /b/c/a...a
+/b/c/a...a/./// /b/c/a...a
+/b/c/a...a//aaa /b/c/a...a/aaa
+/b/c/a...a//aa. /b/c/a...a/aa.
+/b/c/a...a//aa/ /b/c/a...a/aa
+/b/c/a...a//a.a /b/c/a...a/a.a
+/b/c/a...a//a.. /b/c/a...a/a..
+/b/c/a...a//a./ /b/c/a...a/a.
+/b/c/a...a//a/a /b/c/a...a/a/a
+/b/c/a...a//a/. /b/c/a...a/a
+/b/c/a...a//a// /b/c/a...a/a
+/b/c/a...a//.aa /b/c/a...a/.aa
+/b/c/a...a//.a. /b/c/a...a/.a.
+/b/c/a...a//.a/ /b/c/a...a/.a
+/b/c/a...a//..a /b/c/a...a/..a
+/b/c/a...a//... /b/c/a...a/...
+/b/c/a...a//../ /b/c
+/b/c/a...a//./a /b/c/a...a/a
+/b/c/a...a//./. /b/c/a...a
+/b/c/a...a//.// /b/c/a...a
+/b/c/a...a///aa /b/c/a...a/aa
+/b/c/a...a///a. /b/c/a...a/a.
+/b/c/a...a///a/ /b/c/a...a/a
+/b/c/a...a///.a /b/c/a...a/.a
+/b/c/a...a///.. /b/c
+/b/c/a...a///./ /b/c/a...a
+/b/c/a...a////a /b/c/a...a/a
+/b/c/a...a////. /b/c/a...a
+/b/c/a...a///// /b/c/a...a
+/b/c/a....aaaaa /b/c/a....aaaaa
+/b/c/a....aaaa. /b/c/a....aaaa.
+/b/c/a....aaaa/ /b/c/a....aaaa
+/b/c/a....aaa.a /b/c/a....aaa.a
+/b/c/a....aaa.. /b/c/a....aaa..
+/b/c/a....aaa./ /b/c/a....aaa.
+/b/c/a....aaa/a /b/c/a....aaa/a
+/b/c/a....aaa/. /b/c/a....aaa
+/b/c/a....aaa// /b/c/a....aaa
+/b/c/a....aa.aa /b/c/a....aa.aa
+/b/c/a....aa.a. /b/c/a....aa.a.
+/b/c/a....aa.a/ /b/c/a....aa.a
+/b/c/a....aa..a /b/c/a....aa..a
+/b/c/a....aa... /b/c/a....aa...
+/b/c/a....aa../ /b/c/a....aa..
+/b/c/a....aa./a /b/c/a....aa./a
+/b/c/a....aa./. /b/c/a....aa.
+/b/c/a....aa.// /b/c/a....aa.
+/b/c/a....aa/aa /b/c/a....aa/aa
+/b/c/a....aa/a. /b/c/a....aa/a.
+/b/c/a....aa/a/ /b/c/a....aa/a
+/b/c/a....aa/.a /b/c/a....aa/.a
+/b/c/a....aa/.. /b/c
+/b/c/a....aa/./ /b/c/a....aa
+/b/c/a....aa//a /b/c/a....aa/a
+/b/c/a....aa//. /b/c/a....aa
+/b/c/a....aa/// /b/c/a....aa
+/b/c/a....a.aaa /b/c/a....a.aaa
+/b/c/a....a.aa. /b/c/a....a.aa.
+/b/c/a....a.aa/ /b/c/a....a.aa
+/b/c/a....a.a.a /b/c/a....a.a.a
+/b/c/a....a.a.. /b/c/a....a.a..
+/b/c/a....a.a./ /b/c/a....a.a.
+/b/c/a....a.a/a /b/c/a....a.a/a
+/b/c/a....a.a/. /b/c/a....a.a
+/b/c/a....a.a// /b/c/a....a.a
+/b/c/a....a..aa /b/c/a....a..aa
+/b/c/a....a..a. /b/c/a....a..a.
+/b/c/a....a..a/ /b/c/a....a..a
+/b/c/a....a...a /b/c/a....a...a
+/b/c/a....a.... /b/c/a....a....
+/b/c/a....a.../ /b/c/a....a...
+/b/c/a....a../a /b/c/a....a../a
+/b/c/a....a../. /b/c/a....a..
+/b/c/a....a..// /b/c/a....a..
+/b/c/a....a./aa /b/c/a....a./aa
+/b/c/a....a./a. /b/c/a....a./a.
+/b/c/a....a./a/ /b/c/a....a./a
+/b/c/a....a./.a /b/c/a....a./.a
+/b/c/a....a./.. /b/c
+/b/c/a....a././ /b/c/a....a.
+/b/c/a....a.//a /b/c/a....a./a
+/b/c/a....a.//. /b/c/a....a.
+/b/c/a....a./// /b/c/a....a.
+/b/c/a....a/aaa /b/c/a....a/aaa
+/b/c/a....a/aa. /b/c/a....a/aa.
+/b/c/a....a/aa/ /b/c/a....a/aa
+/b/c/a....a/a.a /b/c/a....a/a.a
+/b/c/a....a/a.. /b/c/a....a/a..
+/b/c/a....a/a./ /b/c/a....a/a.
+/b/c/a....a/a/a /b/c/a....a/a/a
+/b/c/a....a/a/. /b/c/a....a/a
+/b/c/a....a/a// /b/c/a....a/a
+/b/c/a....a/.aa /b/c/a....a/.aa
+/b/c/a....a/.a. /b/c/a....a/.a.
+/b/c/a....a/.a/ /b/c/a....a/.a
+/b/c/a....a/..a /b/c/a....a/..a
+/b/c/a....a/... /b/c/a....a/...
+/b/c/a....a/../ /b/c
+/b/c/a....a/./a /b/c/a....a/a
+/b/c/a....a/./. /b/c/a....a
+/b/c/a....a/.// /b/c/a....a
+/b/c/a....a//aa /b/c/a....a/aa
+/b/c/a....a//a. /b/c/a....a/a.
+/b/c/a....a//a/ /b/c/a....a/a
+/b/c/a....a//.a /b/c/a....a/.a
+/b/c/a....a//.. /b/c
+/b/c/a....a//./ /b/c/a....a
+/b/c/a....a///a /b/c/a....a/a
+/b/c/a....a///. /b/c/a....a
+/b/c/a....a//// /b/c/a....a
+/b/c/a.....aaaa /b/c/a.....aaaa
+/b/c/a.....aaa. /b/c/a.....aaa.
+/b/c/a.....aaa/ /b/c/a.....aaa
+/b/c/a.....aa.a /b/c/a.....aa.a
+/b/c/a.....aa.. /b/c/a.....aa..
+/b/c/a.....aa./ /b/c/a.....aa.
+/b/c/a.....aa/a /b/c/a.....aa/a
+/b/c/a.....aa/. /b/c/a.....aa
+/b/c/a.....aa// /b/c/a.....aa
+/b/c/a.....a.aa /b/c/a.....a.aa
+/b/c/a.....a.a. /b/c/a.....a.a.
+/b/c/a.....a.a/ /b/c/a.....a.a
+/b/c/a.....a..a /b/c/a.....a..a
+/b/c/a.....a... /b/c/a.....a...
+/b/c/a.....a../ /b/c/a.....a..
+/b/c/a.....a./a /b/c/a.....a./a
+/b/c/a.....a./. /b/c/a.....a.
+/b/c/a.....a.// /b/c/a.....a.
+/b/c/a.....a/aa /b/c/a.....a/aa
+/b/c/a.....a/a. /b/c/a.....a/a.
+/b/c/a.....a/a/ /b/c/a.....a/a
+/b/c/a.....a/.a /b/c/a.....a/.a
+/b/c/a.....a/.. /b/c
+/b/c/a.....a/./ /b/c/a.....a
+/b/c/a.....a//a /b/c/a.....a/a
+/b/c/a.....a//. /b/c/a.....a
+/b/c/a.....a/// /b/c/a.....a
+/b/c/a......aaa /b/c/a......aaa
+/b/c/a......aa. /b/c/a......aa.
+/b/c/a......aa/ /b/c/a......aa
+/b/c/a......a.a /b/c/a......a.a
+/b/c/a......a.. /b/c/a......a..
+/b/c/a......a./ /b/c/a......a.
+/b/c/a......a/a /b/c/a......a/a
+/b/c/a......a/. /b/c/a......a
+/b/c/a......a// /b/c/a......a
+/b/c/a.......aa /b/c/a.......aa
+/b/c/a.......a. /b/c/a.......a.
+/b/c/a.......a/ /b/c/a.......a
+/b/c/a........a /b/c/a........a
+/b/c/a......... /b/c/a.........
+/b/c/a......../ /b/c/a........
+/b/c/a......./a /b/c/a......./a
+/b/c/a......./. /b/c/a.......
+/b/c/a.......// /b/c/a.......
+/b/c/a....../aa /b/c/a....../aa
+/b/c/a....../a. /b/c/a....../a.
+/b/c/a....../a/ /b/c/a....../a
+/b/c/a....../.a /b/c/a....../.a
+/b/c/a....../.. /b/c
+/b/c/a.....././ /b/c/a......
+/b/c/a......//a /b/c/a....../a
+/b/c/a......//. /b/c/a......
+/b/c/a....../// /b/c/a......
+/b/c/a...../aaa /b/c/a...../aaa
+/b/c/a...../aa. /b/c/a...../aa.
+/b/c/a...../aa/ /b/c/a...../aa
+/b/c/a...../a.a /b/c/a...../a.a
+/b/c/a...../a.. /b/c/a...../a..
+/b/c/a...../a./ /b/c/a...../a.
+/b/c/a...../a/a /b/c/a...../a/a
+/b/c/a...../a/. /b/c/a...../a
+/b/c/a...../a// /b/c/a...../a
+/b/c/a...../.aa /b/c/a...../.aa
+/b/c/a...../.a. /b/c/a...../.a.
+/b/c/a...../.a/ /b/c/a...../.a
+/b/c/a...../..a /b/c/a...../..a
+/b/c/a...../... /b/c/a...../...
+/b/c/a...../../ /b/c
+/b/c/a....././a /b/c/a...../a
+/b/c/a....././. /b/c/a.....
+/b/c/a...../.// /b/c/a.....
+/b/c/a.....//aa /b/c/a...../aa
+/b/c/a.....//a. /b/c/a...../a.
+/b/c/a.....//a/ /b/c/a...../a
+/b/c/a.....//.a /b/c/a...../.a
+/b/c/a.....//.. /b/c
+/b/c/a.....//./ /b/c/a.....
+/b/c/a.....///a /b/c/a...../a
+/b/c/a.....///. /b/c/a.....
+/b/c/a.....//// /b/c/a.....
+/b/c/a..../aaaa /b/c/a..../aaaa
+/b/c/a..../aaa. /b/c/a..../aaa.
+/b/c/a..../aaa/ /b/c/a..../aaa
+/b/c/a..../aa.a /b/c/a..../aa.a
+/b/c/a..../aa.. /b/c/a..../aa..
+/b/c/a..../aa./ /b/c/a..../aa.
+/b/c/a..../aa/a /b/c/a..../aa/a
+/b/c/a..../aa/. /b/c/a..../aa
+/b/c/a..../aa// /b/c/a..../aa
+/b/c/a..../a.aa /b/c/a..../a.aa
+/b/c/a..../a.a. /b/c/a..../a.a.
+/b/c/a..../a.a/ /b/c/a..../a.a
+/b/c/a..../a..a /b/c/a..../a..a
+/b/c/a..../a... /b/c/a..../a...
+/b/c/a..../a../ /b/c/a..../a..
+/b/c/a..../a./a /b/c/a..../a./a
+/b/c/a..../a./. /b/c/a..../a.
+/b/c/a..../a.// /b/c/a..../a.
+/b/c/a..../a/aa /b/c/a..../a/aa
+/b/c/a..../a/a. /b/c/a..../a/a.
+/b/c/a..../a/a/ /b/c/a..../a/a
+/b/c/a..../a/.a /b/c/a..../a/.a
+/b/c/a..../a/.. /b/c/a....
+/b/c/a..../a/./ /b/c/a..../a
+/b/c/a..../a//a /b/c/a..../a/a
+/b/c/a..../a//. /b/c/a..../a
+/b/c/a..../a/// /b/c/a..../a
+/b/c/a..../.aaa /b/c/a..../.aaa
+/b/c/a..../.aa. /b/c/a..../.aa.
+/b/c/a..../.aa/ /b/c/a..../.aa
+/b/c/a..../.a.a /b/c/a..../.a.a
+/b/c/a..../.a.. /b/c/a..../.a..
+/b/c/a..../.a./ /b/c/a..../.a.
+/b/c/a..../.a/a /b/c/a..../.a/a
+/b/c/a..../.a/. /b/c/a..../.a
+/b/c/a..../.a// /b/c/a..../.a
+/b/c/a..../..aa /b/c/a..../..aa
+/b/c/a..../..a. /b/c/a..../..a.
+/b/c/a..../..a/ /b/c/a..../..a
+/b/c/a..../...a /b/c/a..../...a
+/b/c/a..../.... /b/c/a..../....
+/b/c/a..../.../ /b/c/a..../...
+/b/c/a..../../a /b/c/a
+/b/c/a..../../. /b/c
+/b/c/a..../..// /b/c
+/b/c/a...././aa /b/c/a..../aa
+/b/c/a...././a. /b/c/a..../a.
+/b/c/a...././a/ /b/c/a..../a
+/b/c/a...././.a /b/c/a..../.a
+/b/c/a...././.. /b/c
+/b/c/a..../././ /b/c/a....
+/b/c/a...././/a /b/c/a..../a
+/b/c/a...././/. /b/c/a....
+/b/c/a...././// /b/c/a....
+/b/c/a....//aaa /b/c/a..../aaa
+/b/c/a....//aa. /b/c/a..../aa.
+/b/c/a....//aa/ /b/c/a..../aa
+/b/c/a....//a.a /b/c/a..../a.a
+/b/c/a....//a.. /b/c/a..../a..
+/b/c/a....//a./ /b/c/a..../a.
+/b/c/a....//a/a /b/c/a..../a/a
+/b/c/a....//a/. /b/c/a..../a
+/b/c/a....//a// /b/c/a..../a
+/b/c/a....//.aa /b/c/a..../.aa
+/b/c/a....//.a. /b/c/a..../.a.
+/b/c/a....//.a/ /b/c/a..../.a
+/b/c/a....//..a /b/c/a..../..a
+/b/c/a....//... /b/c/a..../...
+/b/c/a....//../ /b/c
+/b/c/a....//./a /b/c/a..../a
+/b/c/a....//./. /b/c/a....
+/b/c/a....//.// /b/c/a....
+/b/c/a....///aa /b/c/a..../aa
+/b/c/a....///a. /b/c/a..../a.
+/b/c/a....///a/ /b/c/a..../a
+/b/c/a....///.a /b/c/a..../.a
+/b/c/a....///.. /b/c
+/b/c/a....///./ /b/c/a....
+/b/c/a....////a /b/c/a..../a
+/b/c/a....////. /b/c/a....
+/b/c/a....///// /b/c/a....
+/b/c/a.../aaaaa /b/c/a.../aaaaa
+/b/c/a.../aaaa. /b/c/a.../aaaa.
+/b/c/a.../aaaa/ /b/c/a.../aaaa
+/b/c/a.../aaa.a /b/c/a.../aaa.a
+/b/c/a.../aaa.. /b/c/a.../aaa..
+/b/c/a.../aaa./ /b/c/a.../aaa.
+/b/c/a.../aaa/a /b/c/a.../aaa/a
+/b/c/a.../aaa/. /b/c/a.../aaa
+/b/c/a.../aaa// /b/c/a.../aaa
+/b/c/a.../aa.aa /b/c/a.../aa.aa
+/b/c/a.../aa.a. /b/c/a.../aa.a.
+/b/c/a.../aa.a/ /b/c/a.../aa.a
+/b/c/a.../aa..a /b/c/a.../aa..a
+/b/c/a.../aa... /b/c/a.../aa...
+/b/c/a.../aa../ /b/c/a.../aa..
+/b/c/a.../aa./a /b/c/a.../aa./a
+/b/c/a.../aa./. /b/c/a.../aa.
+/b/c/a.../aa.// /b/c/a.../aa.
+/b/c/a.../aa/aa /b/c/a.../aa/aa
+/b/c/a.../aa/a. /b/c/a.../aa/a.
+/b/c/a.../aa/a/ /b/c/a.../aa/a
+/b/c/a.../aa/.a /b/c/a.../aa/.a
+/b/c/a.../aa/.. /b/c/a...
+/b/c/a.../aa/./ /b/c/a.../aa
+/b/c/a.../aa//a /b/c/a.../aa/a
+/b/c/a.../aa//. /b/c/a.../aa
+/b/c/a.../aa/// /b/c/a.../aa
+/b/c/a.../a.aaa /b/c/a.../a.aaa
+/b/c/a.../a.aa. /b/c/a.../a.aa.
+/b/c/a.../a.aa/ /b/c/a.../a.aa
+/b/c/a.../a.a.a /b/c/a.../a.a.a
+/b/c/a.../a.a.. /b/c/a.../a.a..
+/b/c/a.../a.a./ /b/c/a.../a.a.
+/b/c/a.../a.a/a /b/c/a.../a.a/a
+/b/c/a.../a.a/. /b/c/a.../a.a
+/b/c/a.../a.a// /b/c/a.../a.a
+/b/c/a.../a..aa /b/c/a.../a..aa
+/b/c/a.../a..a. /b/c/a.../a..a.
+/b/c/a.../a..a/ /b/c/a.../a..a
+/b/c/a.../a...a /b/c/a.../a...a
+/b/c/a.../a.... /b/c/a.../a....
+/b/c/a.../a.../ /b/c/a.../a...
+/b/c/a.../a../a /b/c/a.../a../a
+/b/c/a.../a../. /b/c/a.../a..
+/b/c/a.../a..// /b/c/a.../a..
+/b/c/a.../a./aa /b/c/a.../a./aa
+/b/c/a.../a./a. /b/c/a.../a./a.
+/b/c/a.../a./a/ /b/c/a.../a./a
+/b/c/a.../a./.a /b/c/a.../a./.a
+/b/c/a.../a./.. /b/c/a...
+/b/c/a.../a././ /b/c/a.../a.
+/b/c/a.../a.//a /b/c/a.../a./a
+/b/c/a.../a.//. /b/c/a.../a.
+/b/c/a.../a./// /b/c/a.../a.
+/b/c/a.../a/aaa /b/c/a.../a/aaa
+/b/c/a.../a/aa. /b/c/a.../a/aa.
+/b/c/a.../a/aa/ /b/c/a.../a/aa
+/b/c/a.../a/a.a /b/c/a.../a/a.a
+/b/c/a.../a/a.. /b/c/a.../a/a..
+/b/c/a.../a/a./ /b/c/a.../a/a.
+/b/c/a.../a/a/a /b/c/a.../a/a/a
+/b/c/a.../a/a/. /b/c/a.../a/a
+/b/c/a.../a/a// /b/c/a.../a/a
+/b/c/a.../a/.aa /b/c/a.../a/.aa
+/b/c/a.../a/.a. /b/c/a.../a/.a.
+/b/c/a.../a/.a/ /b/c/a.../a/.a
+/b/c/a.../a/..a /b/c/a.../a/..a
+/b/c/a.../a/... /b/c/a.../a/...
+/b/c/a.../a/../ /b/c/a...
+/b/c/a.../a/./a /b/c/a.../a/a
+/b/c/a.../a/./. /b/c/a.../a
+/b/c/a.../a/.// /b/c/a.../a
+/b/c/a.../a//aa /b/c/a.../a/aa
+/b/c/a.../a//a. /b/c/a.../a/a.
+/b/c/a.../a//a/ /b/c/a.../a/a
+/b/c/a.../a//.a /b/c/a.../a/.a
+/b/c/a.../a//.. /b/c/a...
+/b/c/a.../a//./ /b/c/a.../a
+/b/c/a.../a///a /b/c/a.../a/a
+/b/c/a.../a///. /b/c/a.../a
+/b/c/a.../a//// /b/c/a.../a
+/b/c/a.../.aaaa /b/c/a.../.aaaa
+/b/c/a.../.aaa. /b/c/a.../.aaa.
+/b/c/a.../.aaa/ /b/c/a.../.aaa
+/b/c/a.../.aa.a /b/c/a.../.aa.a
+/b/c/a.../.aa.. /b/c/a.../.aa..
+/b/c/a.../.aa./ /b/c/a.../.aa.
+/b/c/a.../.aa/a /b/c/a.../.aa/a
+/b/c/a.../.aa/. /b/c/a.../.aa
+/b/c/a.../.aa// /b/c/a.../.aa
+/b/c/a.../.a.aa /b/c/a.../.a.aa
+/b/c/a.../.a.a. /b/c/a.../.a.a.
+/b/c/a.../.a.a/ /b/c/a.../.a.a
+/b/c/a.../.a..a /b/c/a.../.a..a
+/b/c/a.../.a... /b/c/a.../.a...
+/b/c/a.../.a../ /b/c/a.../.a..
+/b/c/a.../.a./a /b/c/a.../.a./a
+/b/c/a.../.a./. /b/c/a.../.a.
+/b/c/a.../.a.// /b/c/a.../.a.
+/b/c/a.../.a/aa /b/c/a.../.a/aa
+/b/c/a.../.a/a. /b/c/a.../.a/a.
+/b/c/a.../.a/a/ /b/c/a.../.a/a
+/b/c/a.../.a/.a /b/c/a.../.a/.a
+/b/c/a.../.a/.. /b/c/a...
+/b/c/a.../.a/./ /b/c/a.../.a
+/b/c/a.../.a//a /b/c/a.../.a/a
+/b/c/a.../.a//. /b/c/a.../.a
+/b/c/a.../.a/// /b/c/a.../.a
+/b/c/a.../..aaa /b/c/a.../..aaa
+/b/c/a.../..aa. /b/c/a.../..aa.
+/b/c/a.../..aa/ /b/c/a.../..aa
+/b/c/a.../..a.a /b/c/a.../..a.a
+/b/c/a.../..a.. /b/c/a.../..a..
+/b/c/a.../..a./ /b/c/a.../..a.
+/b/c/a.../..a/a /b/c/a.../..a/a
+/b/c/a.../..a/. /b/c/a.../..a
+/b/c/a.../..a// /b/c/a.../..a
+/b/c/a.../...aa /b/c/a.../...aa
+/b/c/a.../...a. /b/c/a.../...a.
+/b/c/a.../...a/ /b/c/a.../...a
+/b/c/a.../....a /b/c/a.../....a
+/b/c/a.../..... /b/c/a.../.....
+/b/c/a.../..../ /b/c/a.../....
+/b/c/a.../.../a /b/c/a.../.../a
+/b/c/a.../.../. /b/c/a.../...
+/b/c/a.../...// /b/c/a.../...
+/b/c/a.../../aa /b/c/aa
+/b/c/a.../../a. /b/c/a.
+/b/c/a.../../a/ /b/c/a
+/b/c/a.../../.a /b/c/.a
+/b/c/a.../../.. /b
+/b/c/a.../.././ /b/c
+/b/c/a.../..//a /b/c/a
+/b/c/a.../..//. /b/c
+/b/c/a.../../// /b/c
+/b/c/a..././aaa /b/c/a.../aaa
+/b/c/a..././aa. /b/c/a.../aa.
+/b/c/a..././aa/ /b/c/a.../aa
+/b/c/a..././a.a /b/c/a.../a.a
+/b/c/a..././a.. /b/c/a.../a..
+/b/c/a..././a./ /b/c/a.../a.
+/b/c/a..././a/a /b/c/a.../a/a
+/b/c/a..././a/. /b/c/a.../a
+/b/c/a..././a// /b/c/a.../a
+/b/c/a..././.aa /b/c/a.../.aa
+/b/c/a..././.a. /b/c/a.../.a.
+/b/c/a..././.a/ /b/c/a.../.a
+/b/c/a..././..a /b/c/a.../..a
+/b/c/a..././... /b/c/a.../...
+/b/c/a..././../ /b/c
+/b/c/a.../././a /b/c/a.../a
+/b/c/a.../././. /b/c/a...
+/b/c/a..././.// /b/c/a...
+/b/c/a..././/aa /b/c/a.../aa
+/b/c/a..././/a. /b/c/a.../a.
+/b/c/a..././/a/ /b/c/a.../a
+/b/c/a..././/.a /b/c/a.../.a
+/b/c/a..././/.. /b/c
+/b/c/a..././/./ /b/c/a...
+/b/c/a..././//a /b/c/a.../a
+/b/c/a..././//. /b/c/a...
+/b/c/a..././/// /b/c/a...
+/b/c/a...//aaaa /b/c/a.../aaaa
+/b/c/a...//aaa. /b/c/a.../aaa.
+/b/c/a...//aaa/ /b/c/a.../aaa
+/b/c/a...//aa.a /b/c/a.../aa.a
+/b/c/a...//aa.. /b/c/a.../aa..
+/b/c/a...//aa./ /b/c/a.../aa.
+/b/c/a...//aa/a /b/c/a.../aa/a
+/b/c/a...//aa/. /b/c/a.../aa
+/b/c/a...//aa// /b/c/a.../aa
+/b/c/a...//a.aa /b/c/a.../a.aa
+/b/c/a...//a.a. /b/c/a.../a.a.
+/b/c/a...//a.a/ /b/c/a.../a.a
+/b/c/a...//a..a /b/c/a.../a..a
+/b/c/a...//a... /b/c/a.../a...
+/b/c/a...//a../ /b/c/a.../a..
+/b/c/a...//a./a /b/c/a.../a./a
+/b/c/a...//a./. /b/c/a.../a.
+/b/c/a...//a.// /b/c/a.../a.
+/b/c/a...//a/aa /b/c/a.../a/aa
+/b/c/a...//a/a. /b/c/a.../a/a.
+/b/c/a...//a/a/ /b/c/a.../a/a
+/b/c/a...//a/.a /b/c/a.../a/.a
+/b/c/a...//a/.. /b/c/a...
+/b/c/a...//a/./ /b/c/a.../a
+/b/c/a...//a//a /b/c/a.../a/a
+/b/c/a...//a//. /b/c/a.../a
+/b/c/a...//a/// /b/c/a.../a
+/b/c/a...//.aaa /b/c/a.../.aaa
+/b/c/a...//.aa. /b/c/a.../.aa.
+/b/c/a...//.aa/ /b/c/a.../.aa
+/b/c/a...//.a.a /b/c/a.../.a.a
+/b/c/a...//.a.. /b/c/a.../.a..
+/b/c/a...//.a./ /b/c/a.../.a.
+/b/c/a...//.a/a /b/c/a.../.a/a
+/b/c/a...//.a/. /b/c/a.../.a
+/b/c/a...//.a// /b/c/a.../.a
+/b/c/a...//..aa /b/c/a.../..aa
+/b/c/a...//..a. /b/c/a.../..a.
+/b/c/a...//..a/ /b/c/a.../..a
+/b/c/a...//...a /b/c/a.../...a
+/b/c/a...//.... /b/c/a.../....
+/b/c/a...//.../ /b/c/a.../...
+/b/c/a...//../a /b/c/a
+/b/c/a...//../. /b/c
+/b/c/a...//..// /b/c
+/b/c/a...//./aa /b/c/a.../aa
+/b/c/a...//./a. /b/c/a.../a.
+/b/c/a...//./a/ /b/c/a.../a
+/b/c/a...//./.a /b/c/a.../.a
+/b/c/a...//./.. /b/c
+/b/c/a...//././ /b/c/a...
+/b/c/a...//.//a /b/c/a.../a
+/b/c/a...//.//. /b/c/a...
+/b/c/a...//./// /b/c/a...
+/b/c/a...///aaa /b/c/a.../aaa
+/b/c/a...///aa. /b/c/a.../aa.
+/b/c/a...///aa/ /b/c/a.../aa
+/b/c/a...///a.a /b/c/a.../a.a
+/b/c/a...///a.. /b/c/a.../a..
+/b/c/a...///a./ /b/c/a.../a.
+/b/c/a...///a/a /b/c/a.../a/a
+/b/c/a...///a/. /b/c/a.../a
+/b/c/a...///a// /b/c/a.../a
+/b/c/a...///.aa /b/c/a.../.aa
+/b/c/a...///.a. /b/c/a.../.a.
+/b/c/a...///.a/ /b/c/a.../.a
+/b/c/a...///..a /b/c/a.../..a
+/b/c/a...///... /b/c/a.../...
+/b/c/a...///../ /b/c
+/b/c/a...///./a /b/c/a.../a
+/b/c/a...///./. /b/c/a...
+/b/c/a...///.// /b/c/a...
+/b/c/a...////aa /b/c/a.../aa
+/b/c/a...////a. /b/c/a.../a.
+/b/c/a...////a/ /b/c/a.../a
+/b/c/a...////.a /b/c/a.../.a
+/b/c/a...////.. /b/c
+/b/c/a...////./ /b/c/a...
+/b/c/a.../////a /b/c/a.../a
+/b/c/a.../////. /b/c/a...
+/b/c/a...////// /b/c/a...
+/b/c/a../aaaaaa /b/c/a../aaaaaa
+/b/c/a../aaaaa. /b/c/a../aaaaa.
+/b/c/a../aaaaa/ /b/c/a../aaaaa
+/b/c/a../aaaa.a /b/c/a../aaaa.a
+/b/c/a../aaaa.. /b/c/a../aaaa..
+/b/c/a../aaaa./ /b/c/a../aaaa.
+/b/c/a../aaaa/a /b/c/a../aaaa/a
+/b/c/a../aaaa/. /b/c/a../aaaa
+/b/c/a../aaaa// /b/c/a../aaaa
+/b/c/a../aaa.aa /b/c/a../aaa.aa
+/b/c/a../aaa.a. /b/c/a../aaa.a.
+/b/c/a../aaa.a/ /b/c/a../aaa.a
+/b/c/a../aaa..a /b/c/a../aaa..a
+/b/c/a../aaa... /b/c/a../aaa...
+/b/c/a../aaa../ /b/c/a../aaa..
+/b/c/a../aaa./a /b/c/a../aaa./a
+/b/c/a../aaa./. /b/c/a../aaa.
+/b/c/a../aaa.// /b/c/a../aaa.
+/b/c/a../aaa/aa /b/c/a../aaa/aa
+/b/c/a../aaa/a. /b/c/a../aaa/a.
+/b/c/a../aaa/a/ /b/c/a../aaa/a
+/b/c/a../aaa/.a /b/c/a../aaa/.a
+/b/c/a../aaa/.. /b/c/a..
+/b/c/a../aaa/./ /b/c/a../aaa
+/b/c/a../aaa//a /b/c/a../aaa/a
+/b/c/a../aaa//. /b/c/a../aaa
+/b/c/a../aaa/// /b/c/a../aaa
+/b/c/a../aa.aaa /b/c/a../aa.aaa
+/b/c/a../aa.aa. /b/c/a../aa.aa.
+/b/c/a../aa.aa/ /b/c/a../aa.aa
+/b/c/a../aa.a.a /b/c/a../aa.a.a
+/b/c/a../aa.a.. /b/c/a../aa.a..
+/b/c/a../aa.a./ /b/c/a../aa.a.
+/b/c/a../aa.a/a /b/c/a../aa.a/a
+/b/c/a../aa.a/. /b/c/a../aa.a
+/b/c/a../aa.a// /b/c/a../aa.a
+/b/c/a../aa..aa /b/c/a../aa..aa
+/b/c/a../aa..a. /b/c/a../aa..a.
+/b/c/a../aa..a/ /b/c/a../aa..a
+/b/c/a../aa...a /b/c/a../aa...a
+/b/c/a../aa.... /b/c/a../aa....
+/b/c/a../aa.../ /b/c/a../aa...
+/b/c/a../aa../a /b/c/a../aa../a
+/b/c/a../aa../. /b/c/a../aa..
+/b/c/a../aa..// /b/c/a../aa..
+/b/c/a../aa./aa /b/c/a../aa./aa
+/b/c/a../aa./a. /b/c/a../aa./a.
+/b/c/a../aa./a/ /b/c/a../aa./a
+/b/c/a../aa./.a /b/c/a../aa./.a
+/b/c/a../aa./.. /b/c/a..
+/b/c/a../aa././ /b/c/a../aa.
+/b/c/a../aa.//a /b/c/a../aa./a
+/b/c/a../aa.//. /b/c/a../aa.
+/b/c/a../aa./// /b/c/a../aa.
+/b/c/a../aa/aaa /b/c/a../aa/aaa
+/b/c/a../aa/aa. /b/c/a../aa/aa.
+/b/c/a../aa/aa/ /b/c/a../aa/aa
+/b/c/a../aa/a.a /b/c/a../aa/a.a
+/b/c/a../aa/a.. /b/c/a../aa/a..
+/b/c/a../aa/a./ /b/c/a../aa/a.
+/b/c/a../aa/a/a /b/c/a../aa/a/a
+/b/c/a../aa/a/. /b/c/a../aa/a
+/b/c/a../aa/a// /b/c/a../aa/a
+/b/c/a../aa/.aa /b/c/a../aa/.aa
+/b/c/a../aa/.a. /b/c/a../aa/.a.
+/b/c/a../aa/.a/ /b/c/a../aa/.a
+/b/c/a../aa/..a /b/c/a../aa/..a
+/b/c/a../aa/... /b/c/a../aa/...
+/b/c/a../aa/../ /b/c/a..
+/b/c/a../aa/./a /b/c/a../aa/a
+/b/c/a../aa/./. /b/c/a../aa
+/b/c/a../aa/.// /b/c/a../aa
+/b/c/a../aa//aa /b/c/a../aa/aa
+/b/c/a../aa//a. /b/c/a../aa/a.
+/b/c/a../aa//a/ /b/c/a../aa/a
+/b/c/a../aa//.a /b/c/a../aa/.a
+/b/c/a../aa//.. /b/c/a..
+/b/c/a../aa//./ /b/c/a../aa
+/b/c/a../aa///a /b/c/a../aa/a
+/b/c/a../aa///. /b/c/a../aa
+/b/c/a../aa//// /b/c/a../aa
+/b/c/a../a.aaaa /b/c/a../a.aaaa
+/b/c/a../a.aaa. /b/c/a../a.aaa.
+/b/c/a../a.aaa/ /b/c/a../a.aaa
+/b/c/a../a.aa.a /b/c/a../a.aa.a
+/b/c/a../a.aa.. /b/c/a../a.aa..
+/b/c/a../a.aa./ /b/c/a../a.aa.
+/b/c/a../a.aa/a /b/c/a../a.aa/a
+/b/c/a../a.aa/. /b/c/a../a.aa
+/b/c/a../a.aa// /b/c/a../a.aa
+/b/c/a../a.a.aa /b/c/a../a.a.aa
+/b/c/a../a.a.a. /b/c/a../a.a.a.
+/b/c/a../a.a.a/ /b/c/a../a.a.a
+/b/c/a../a.a..a /b/c/a../a.a..a
+/b/c/a../a.a... /b/c/a../a.a...
+/b/c/a../a.a../ /b/c/a../a.a..
+/b/c/a../a.a./a /b/c/a../a.a./a
+/b/c/a../a.a./. /b/c/a../a.a.
+/b/c/a../a.a.// /b/c/a../a.a.
+/b/c/a../a.a/aa /b/c/a../a.a/aa
+/b/c/a../a.a/a. /b/c/a../a.a/a.
+/b/c/a../a.a/a/ /b/c/a../a.a/a
+/b/c/a../a.a/.a /b/c/a../a.a/.a
+/b/c/a../a.a/.. /b/c/a..
+/b/c/a../a.a/./ /b/c/a../a.a
+/b/c/a../a.a//a /b/c/a../a.a/a
+/b/c/a../a.a//. /b/c/a../a.a
+/b/c/a../a.a/// /b/c/a../a.a
+/b/c/a../a..aaa /b/c/a../a..aaa
+/b/c/a../a..aa. /b/c/a../a..aa.
+/b/c/a../a..aa/ /b/c/a../a..aa
+/b/c/a../a..a.a /b/c/a../a..a.a
+/b/c/a../a..a.. /b/c/a../a..a..
+/b/c/a../a..a./ /b/c/a../a..a.
+/b/c/a../a..a/a /b/c/a../a..a/a
+/b/c/a../a..a/. /b/c/a../a..a
+/b/c/a../a..a// /b/c/a../a..a
+/b/c/a../a...aa /b/c/a../a...aa
+/b/c/a../a...a. /b/c/a../a...a.
+/b/c/a../a...a/ /b/c/a../a...a
+/b/c/a../a....a /b/c/a../a....a
+/b/c/a../a..... /b/c/a../a.....
+/b/c/a../a..../ /b/c/a../a....
+/b/c/a../a.../a /b/c/a../a.../a
+/b/c/a../a.../. /b/c/a../a...
+/b/c/a../a...// /b/c/a../a...
+/b/c/a../a../aa /b/c/a../a../aa
+/b/c/a../a../a. /b/c/a../a../a.
+/b/c/a../a../a/ /b/c/a../a../a
+/b/c/a../a../.a /b/c/a../a../.a
+/b/c/a../a../.. /b/c/a..
+/b/c/a../a.././ /b/c/a../a..
+/b/c/a../a..//a /b/c/a../a../a
+/b/c/a../a..//. /b/c/a../a..
+/b/c/a../a../// /b/c/a../a..
+/b/c/a../a./aaa /b/c/a../a./aaa
+/b/c/a../a./aa. /b/c/a../a./aa.
+/b/c/a../a./aa/ /b/c/a../a./aa
+/b/c/a../a./a.a /b/c/a../a./a.a
+/b/c/a../a./a.. /b/c/a../a./a..
+/b/c/a../a./a./ /b/c/a../a./a.
+/b/c/a../a./a/a /b/c/a../a./a/a
+/b/c/a../a./a/. /b/c/a../a./a
+/b/c/a../a./a// /b/c/a../a./a
+/b/c/a../a./.aa /b/c/a../a./.aa
+/b/c/a../a./.a. /b/c/a../a./.a.
+/b/c/a../a./.a/ /b/c/a../a./.a
+/b/c/a../a./..a /b/c/a../a./..a
+/b/c/a../a./... /b/c/a../a./...
+/b/c/a../a./../ /b/c/a..
+/b/c/a../a././a /b/c/a../a./a
+/b/c/a../a././. /b/c/a../a.
+/b/c/a../a./.// /b/c/a../a.
+/b/c/a../a.//aa /b/c/a../a./aa
+/b/c/a../a.//a. /b/c/a../a./a.
+/b/c/a../a.//a/ /b/c/a../a./a
+/b/c/a../a.//.a /b/c/a../a./.a
+/b/c/a../a.//.. /b/c/a..
+/b/c/a../a.//./ /b/c/a../a.
+/b/c/a../a.///a /b/c/a../a./a
+/b/c/a../a.///. /b/c/a../a.
+/b/c/a../a.//// /b/c/a../a.
+/b/c/a../a/aaaa /b/c/a../a/aaaa
+/b/c/a../a/aaa. /b/c/a../a/aaa.
+/b/c/a../a/aaa/ /b/c/a../a/aaa
+/b/c/a../a/aa.a /b/c/a../a/aa.a
+/b/c/a../a/aa.. /b/c/a../a/aa..
+/b/c/a../a/aa./ /b/c/a../a/aa.
+/b/c/a../a/aa/a /b/c/a../a/aa/a
+/b/c/a../a/aa/. /b/c/a../a/aa
+/b/c/a../a/aa// /b/c/a../a/aa
+/b/c/a../a/a.aa /b/c/a../a/a.aa
+/b/c/a../a/a.a. /b/c/a../a/a.a.
+/b/c/a../a/a.a/ /b/c/a../a/a.a
+/b/c/a../a/a..a /b/c/a../a/a..a
+/b/c/a../a/a... /b/c/a../a/a...
+/b/c/a../a/a../ /b/c/a../a/a..
+/b/c/a../a/a./a /b/c/a../a/a./a
+/b/c/a../a/a./. /b/c/a../a/a.
+/b/c/a../a/a.// /b/c/a../a/a.
+/b/c/a../a/a/aa /b/c/a../a/a/aa
+/b/c/a../a/a/a. /b/c/a../a/a/a.
+/b/c/a../a/a/a/ /b/c/a../a/a/a
+/b/c/a../a/a/.a /b/c/a../a/a/.a
+/b/c/a../a/a/.. /b/c/a../a
+/b/c/a../a/a/./ /b/c/a../a/a
+/b/c/a../a/a//a /b/c/a../a/a/a
+/b/c/a../a/a//. /b/c/a../a/a
+/b/c/a../a/a/// /b/c/a../a/a
+/b/c/a../a/.aaa /b/c/a../a/.aaa
+/b/c/a../a/.aa. /b/c/a../a/.aa.
+/b/c/a../a/.aa/ /b/c/a../a/.aa
+/b/c/a../a/.a.a /b/c/a../a/.a.a
+/b/c/a../a/.a.. /b/c/a../a/.a..
+/b/c/a../a/.a./ /b/c/a../a/.a.
+/b/c/a../a/.a/a /b/c/a../a/.a/a
+/b/c/a../a/.a/. /b/c/a../a/.a
+/b/c/a../a/.a// /b/c/a../a/.a
+/b/c/a../a/..aa /b/c/a../a/..aa
+/b/c/a../a/..a. /b/c/a../a/..a.
+/b/c/a../a/..a/ /b/c/a../a/..a
+/b/c/a../a/...a /b/c/a../a/...a
+/b/c/a../a/.... /b/c/a../a/....
+/b/c/a../a/.../ /b/c/a../a/...
+/b/c/a../a/../a /b/c/a../a
+/b/c/a../a/../. /b/c/a..
+/b/c/a../a/..// /b/c/a..
+/b/c/a../a/./aa /b/c/a../a/aa
+/b/c/a../a/./a. /b/c/a../a/a.
+/b/c/a../a/./a/ /b/c/a../a/a
+/b/c/a../a/./.a /b/c/a../a/.a
+/b/c/a../a/./.. /b/c/a..
+/b/c/a../a/././ /b/c/a../a
+/b/c/a../a/.//a /b/c/a../a/a
+/b/c/a../a/.//. /b/c/a../a
+/b/c/a../a/./// /b/c/a../a
+/b/c/a../a//aaa /b/c/a../a/aaa
+/b/c/a../a//aa. /b/c/a../a/aa.
+/b/c/a../a//aa/ /b/c/a../a/aa
+/b/c/a../a//a.a /b/c/a../a/a.a
+/b/c/a../a//a.. /b/c/a../a/a..
+/b/c/a../a//a./ /b/c/a../a/a.
+/b/c/a../a//a/a /b/c/a../a/a/a
+/b/c/a../a//a/. /b/c/a../a/a
+/b/c/a../a//a// /b/c/a../a/a
+/b/c/a../a//.aa /b/c/a../a/.aa
+/b/c/a../a//.a. /b/c/a../a/.a.
+/b/c/a../a//.a/ /b/c/a../a/.a
+/b/c/a../a//..a /b/c/a../a/..a
+/b/c/a../a//... /b/c/a../a/...
+/b/c/a../a//../ /b/c/a..
+/b/c/a../a//./a /b/c/a../a/a
+/b/c/a../a//./. /b/c/a../a
+/b/c/a../a//.// /b/c/a../a
+/b/c/a../a///aa /b/c/a../a/aa
+/b/c/a../a///a. /b/c/a../a/a.
+/b/c/a../a///a/ /b/c/a../a/a
+/b/c/a../a///.a /b/c/a../a/.a
+/b/c/a../a///.. /b/c/a..
+/b/c/a../a///./ /b/c/a../a
+/b/c/a../a////a /b/c/a../a/a
+/b/c/a../a////. /b/c/a../a
+/b/c/a../a///// /b/c/a../a
+/b/c/a../.aaaaa /b/c/a../.aaaaa
+/b/c/a../.aaaa. /b/c/a../.aaaa.
+/b/c/a../.aaaa/ /b/c/a../.aaaa
+/b/c/a../.aaa.a /b/c/a../.aaa.a
+/b/c/a../.aaa.. /b/c/a../.aaa..
+/b/c/a../.aaa./ /b/c/a../.aaa.
+/b/c/a../.aaa/a /b/c/a../.aaa/a
+/b/c/a../.aaa/. /b/c/a../.aaa
+/b/c/a../.aaa// /b/c/a../.aaa
+/b/c/a../.aa.aa /b/c/a../.aa.aa
+/b/c/a../.aa.a. /b/c/a../.aa.a.
+/b/c/a../.aa.a/ /b/c/a../.aa.a
+/b/c/a../.aa..a /b/c/a../.aa..a
+/b/c/a../.aa... /b/c/a../.aa...
+/b/c/a../.aa../ /b/c/a../.aa..
+/b/c/a../.aa./a /b/c/a../.aa./a
+/b/c/a../.aa./. /b/c/a../.aa.
+/b/c/a../.aa.// /b/c/a../.aa.
+/b/c/a../.aa/aa /b/c/a../.aa/aa
+/b/c/a../.aa/a. /b/c/a../.aa/a.
+/b/c/a../.aa/a/ /b/c/a../.aa/a
+/b/c/a../.aa/.a /b/c/a../.aa/.a
+/b/c/a../.aa/.. /b/c/a..
+/b/c/a../.aa/./ /b/c/a../.aa
+/b/c/a../.aa//a /b/c/a../.aa/a
+/b/c/a../.aa//. /b/c/a../.aa
+/b/c/a../.aa/// /b/c/a../.aa
+/b/c/a../.a.aaa /b/c/a../.a.aaa
+/b/c/a../.a.aa. /b/c/a../.a.aa.
+/b/c/a../.a.aa/ /b/c/a../.a.aa
+/b/c/a../.a.a.a /b/c/a../.a.a.a
+/b/c/a../.a.a.. /b/c/a../.a.a..
+/b/c/a../.a.a./ /b/c/a../.a.a.
+/b/c/a../.a.a/a /b/c/a../.a.a/a
+/b/c/a../.a.a/. /b/c/a../.a.a
+/b/c/a../.a.a// /b/c/a../.a.a
+/b/c/a../.a..aa /b/c/a../.a..aa
+/b/c/a../.a..a. /b/c/a../.a..a.
+/b/c/a../.a..a/ /b/c/a../.a..a
+/b/c/a../.a...a /b/c/a../.a...a
+/b/c/a../.a.... /b/c/a../.a....
+/b/c/a../.a.../ /b/c/a../.a...
+/b/c/a../.a../a /b/c/a../.a../a
+/b/c/a../.a../. /b/c/a../.a..
+/b/c/a../.a..// /b/c/a../.a..
+/b/c/a../.a./aa /b/c/a../.a./aa
+/b/c/a../.a./a. /b/c/a../.a./a.
+/b/c/a../.a./a/ /b/c/a../.a./a
+/b/c/a../.a./.a /b/c/a../.a./.a
+/b/c/a../.a./.. /b/c/a..
+/b/c/a../.a././ /b/c/a../.a.
+/b/c/a../.a.//a /b/c/a../.a./a
+/b/c/a../.a.//. /b/c/a../.a.
+/b/c/a../.a./// /b/c/a../.a.
+/b/c/a../.a/aaa /b/c/a../.a/aaa
+/b/c/a../.a/aa. /b/c/a../.a/aa.
+/b/c/a../.a/aa/ /b/c/a../.a/aa
+/b/c/a../.a/a.a /b/c/a../.a/a.a
+/b/c/a../.a/a.. /b/c/a../.a/a..
+/b/c/a../.a/a./ /b/c/a../.a/a.
+/b/c/a../.a/a/a /b/c/a../.a/a/a
+/b/c/a../.a/a/. /b/c/a../.a/a
+/b/c/a../.a/a// /b/c/a../.a/a
+/b/c/a../.a/.aa /b/c/a../.a/.aa
+/b/c/a../.a/.a. /b/c/a../.a/.a.
+/b/c/a../.a/.a/ /b/c/a../.a/.a
+/b/c/a../.a/..a /b/c/a../.a/..a
+/b/c/a../.a/... /b/c/a../.a/...
+/b/c/a../.a/../ /b/c/a..
+/b/c/a../.a/./a /b/c/a../.a/a
+/b/c/a../.a/./. /b/c/a../.a
+/b/c/a../.a/.// /b/c/a../.a
+/b/c/a../.a//aa /b/c/a../.a/aa
+/b/c/a../.a//a. /b/c/a../.a/a.
+/b/c/a../.a//a/ /b/c/a../.a/a
+/b/c/a../.a//.a /b/c/a../.a/.a
+/b/c/a../.a//.. /b/c/a..
+/b/c/a../.a//./ /b/c/a../.a
+/b/c/a../.a///a /b/c/a../.a/a
+/b/c/a../.a///. /b/c/a../.a
+/b/c/a../.a//// /b/c/a../.a
+/b/c/a../..aaaa /b/c/a../..aaaa
+/b/c/a../..aaa. /b/c/a../..aaa.
+/b/c/a../..aaa/ /b/c/a../..aaa
+/b/c/a../..aa.a /b/c/a../..aa.a
+/b/c/a../..aa.. /b/c/a../..aa..
+/b/c/a../..aa./ /b/c/a../..aa.
+/b/c/a../..aa/a /b/c/a../..aa/a
+/b/c/a../..aa/. /b/c/a../..aa
+/b/c/a../..aa// /b/c/a../..aa
+/b/c/a../..a.aa /b/c/a../..a.aa
+/b/c/a../..a.a. /b/c/a../..a.a.
+/b/c/a../..a.a/ /b/c/a../..a.a
+/b/c/a../..a..a /b/c/a../..a..a
+/b/c/a../..a... /b/c/a../..a...
+/b/c/a../..a../ /b/c/a../..a..
+/b/c/a../..a./a /b/c/a../..a./a
+/b/c/a../..a./. /b/c/a../..a.
+/b/c/a../..a.// /b/c/a../..a.
+/b/c/a../..a/aa /b/c/a../..a/aa
+/b/c/a../..a/a. /b/c/a../..a/a.
+/b/c/a../..a/a/ /b/c/a../..a/a
+/b/c/a../..a/.a /b/c/a../..a/.a
+/b/c/a../..a/.. /b/c/a..
+/b/c/a../..a/./ /b/c/a../..a
+/b/c/a../..a//a /b/c/a../..a/a
+/b/c/a../..a//. /b/c/a../..a
+/b/c/a../..a/// /b/c/a../..a
+/b/c/a../...aaa /b/c/a../...aaa
+/b/c/a../...aa. /b/c/a../...aa.
+/b/c/a../...aa/ /b/c/a../...aa
+/b/c/a../...a.a /b/c/a../...a.a
+/b/c/a../...a.. /b/c/a../...a..
+/b/c/a../...a./ /b/c/a../...a.
+/b/c/a../...a/a /b/c/a../...a/a
+/b/c/a../...a/. /b/c/a../...a
+/b/c/a../...a// /b/c/a../...a
+/b/c/a../....aa /b/c/a../....aa
+/b/c/a../....a. /b/c/a../....a.
+/b/c/a../....a/ /b/c/a../....a
+/b/c/a../.....a /b/c/a../.....a
+/b/c/a../...... /b/c/a../......
+/b/c/a../...../ /b/c/a../.....
+/b/c/a../..../a /b/c/a../..../a
+/b/c/a../..../. /b/c/a../....
+/b/c/a../....// /b/c/a../....
+/b/c/a../.../aa /b/c/a../.../aa
+/b/c/a../.../a. /b/c/a../.../a.
+/b/c/a../.../a/ /b/c/a../.../a
+/b/c/a../.../.a /b/c/a../.../.a
+/b/c/a../.../.. /b/c/a..
+/b/c/a../..././ /b/c/a../...
+/b/c/a../...//a /b/c/a../.../a
+/b/c/a../...//. /b/c/a../...
+/b/c/a../.../// /b/c/a../...
+/b/c/a../../aaa /b/c/aaa
+/b/c/a../../aa. /b/c/aa.
+/b/c/a../../aa/ /b/c/aa
+/b/c/a../../a.a /b/c/a.a
+/b/c/a../../a.. /b/c/a..
+/b/c/a../../a./ /b/c/a.
+/b/c/a../../a/a /b/c/a/a
+/b/c/a../../a/. /b/c/a
+/b/c/a../../a// /b/c/a
+/b/c/a../../.aa /b/c/.aa
+/b/c/a../../.a. /b/c/.a.
+/b/c/a../../.a/ /b/c/.a
+/b/c/a../../..a /b/c/..a
+/b/c/a../../... /b/c/...
+/b/c/a../../../ /b
+/b/c/a../.././a /b/c/a
+/b/c/a../.././. /b/c
+/b/c/a../../.// /b/c
+/b/c/a../..//aa /b/c/aa
+/b/c/a../..//a. /b/c/a.
+/b/c/a../..//a/ /b/c/a
+/b/c/a../..//.a /b/c/.a
+/b/c/a../..//.. /b
+/b/c/a../..//./ /b/c
+/b/c/a../..///a /b/c/a
+/b/c/a../..///. /b/c
+/b/c/a../..//// /b/c
+/b/c/a.././aaaa /b/c/a../aaaa
+/b/c/a.././aaa. /b/c/a../aaa.
+/b/c/a.././aaa/ /b/c/a../aaa
+/b/c/a.././aa.a /b/c/a../aa.a
+/b/c/a.././aa.. /b/c/a../aa..
+/b/c/a.././aa./ /b/c/a../aa.
+/b/c/a.././aa/a /b/c/a../aa/a
+/b/c/a.././aa/. /b/c/a../aa
+/b/c/a.././aa// /b/c/a../aa
+/b/c/a.././a.aa /b/c/a../a.aa
+/b/c/a.././a.a. /b/c/a../a.a.
+/b/c/a.././a.a/ /b/c/a../a.a
+/b/c/a.././a..a /b/c/a../a..a
+/b/c/a.././a... /b/c/a../a...
+/b/c/a.././a../ /b/c/a../a..
+/b/c/a.././a./a /b/c/a../a./a
+/b/c/a.././a./. /b/c/a../a.
+/b/c/a.././a.// /b/c/a../a.
+/b/c/a.././a/aa /b/c/a../a/aa
+/b/c/a.././a/a. /b/c/a../a/a.
+/b/c/a.././a/a/ /b/c/a../a/a
+/b/c/a.././a/.a /b/c/a../a/.a
+/b/c/a.././a/.. /b/c/a..
+/b/c/a.././a/./ /b/c/a../a
+/b/c/a.././a//a /b/c/a../a/a
+/b/c/a.././a//. /b/c/a../a
+/b/c/a.././a/// /b/c/a../a
+/b/c/a.././.aaa /b/c/a../.aaa
+/b/c/a.././.aa. /b/c/a../.aa.
+/b/c/a.././.aa/ /b/c/a../.aa
+/b/c/a.././.a.a /b/c/a../.a.a
+/b/c/a.././.a.. /b/c/a../.a..
+/b/c/a.././.a./ /b/c/a../.a.
+/b/c/a.././.a/a /b/c/a../.a/a
+/b/c/a.././.a/. /b/c/a../.a
+/b/c/a.././.a// /b/c/a../.a
+/b/c/a.././..aa /b/c/a../..aa
+/b/c/a.././..a. /b/c/a../..a.
+/b/c/a.././..a/ /b/c/a../..a
+/b/c/a.././...a /b/c/a../...a
+/b/c/a.././.... /b/c/a../....
+/b/c/a.././.../ /b/c/a../...
+/b/c/a.././../a /b/c/a
+/b/c/a.././../. /b/c
+/b/c/a.././..// /b/c
+/b/c/a../././aa /b/c/a../aa
+/b/c/a../././a. /b/c/a../a.
+/b/c/a../././a/ /b/c/a../a
+/b/c/a../././.a /b/c/a../.a
+/b/c/a../././.. /b/c
+/b/c/a.././././ /b/c/a..
+/b/c/a../././/a /b/c/a../a
+/b/c/a../././/. /b/c/a..
+/b/c/a../././// /b/c/a..
+/b/c/a.././/aaa /b/c/a../aaa
+/b/c/a.././/aa. /b/c/a../aa.
+/b/c/a.././/aa/ /b/c/a../aa
+/b/c/a.././/a.a /b/c/a../a.a
+/b/c/a.././/a.. /b/c/a../a..
+/b/c/a.././/a./ /b/c/a../a.
+/b/c/a.././/a/a /b/c/a../a/a
+/b/c/a.././/a/. /b/c/a../a
+/b/c/a.././/a// /b/c/a../a
+/b/c/a.././/.aa /b/c/a../.aa
+/b/c/a.././/.a. /b/c/a../.a.
+/b/c/a.././/.a/ /b/c/a../.a
+/b/c/a.././/..a /b/c/a../..a
+/b/c/a.././/... /b/c/a../...
+/b/c/a.././/../ /b/c
+/b/c/a.././/./a /b/c/a../a
+/b/c/a.././/./. /b/c/a..
+/b/c/a.././/.// /b/c/a..
+/b/c/a.././//aa /b/c/a../aa
+/b/c/a.././//a. /b/c/a../a.
+/b/c/a.././//a/ /b/c/a../a
+/b/c/a.././//.a /b/c/a../.a
+/b/c/a.././//.. /b/c
+/b/c/a.././//./ /b/c/a..
+/b/c/a.././///a /b/c/a../a
+/b/c/a.././///. /b/c/a..
+/b/c/a.././//// /b/c/a..
+/b/c/a..//aaaaa /b/c/a../aaaaa
+/b/c/a..//aaaa. /b/c/a../aaaa.
+/b/c/a..//aaaa/ /b/c/a../aaaa
+/b/c/a..//aaa.a /b/c/a../aaa.a
+/b/c/a..//aaa.. /b/c/a../aaa..
+/b/c/a..//aaa./ /b/c/a../aaa.
+/b/c/a..//aaa/a /b/c/a../aaa/a
+/b/c/a..//aaa/. /b/c/a../aaa
+/b/c/a..//aaa// /b/c/a../aaa
+/b/c/a..//aa.aa /b/c/a../aa.aa
+/b/c/a..//aa.a. /b/c/a../aa.a.
+/b/c/a..//aa.a/ /b/c/a../aa.a
+/b/c/a..//aa..a /b/c/a../aa..a
+/b/c/a..//aa... /b/c/a../aa...
+/b/c/a..//aa../ /b/c/a../aa..
+/b/c/a..//aa./a /b/c/a../aa./a
+/b/c/a..//aa./. /b/c/a../aa.
+/b/c/a..//aa.// /b/c/a../aa.
+/b/c/a..//aa/aa /b/c/a../aa/aa
+/b/c/a..//aa/a. /b/c/a../aa/a.
+/b/c/a..//aa/a/ /b/c/a../aa/a
+/b/c/a..//aa/.a /b/c/a../aa/.a
+/b/c/a..//aa/.. /b/c/a..
+/b/c/a..//aa/./ /b/c/a../aa
+/b/c/a..//aa//a /b/c/a../aa/a
+/b/c/a..//aa//. /b/c/a../aa
+/b/c/a..//aa/// /b/c/a../aa
+/b/c/a..//a.aaa /b/c/a../a.aaa
+/b/c/a..//a.aa. /b/c/a../a.aa.
+/b/c/a..//a.aa/ /b/c/a../a.aa
+/b/c/a..//a.a.a /b/c/a../a.a.a
+/b/c/a..//a.a.. /b/c/a../a.a..
+/b/c/a..//a.a./ /b/c/a../a.a.
+/b/c/a..//a.a/a /b/c/a../a.a/a
+/b/c/a..//a.a/. /b/c/a../a.a
+/b/c/a..//a.a// /b/c/a../a.a
+/b/c/a..//a..aa /b/c/a../a..aa
+/b/c/a..//a..a. /b/c/a../a..a.
+/b/c/a..//a..a/ /b/c/a../a..a
+/b/c/a..//a...a /b/c/a../a...a
+/b/c/a..//a.... /b/c/a../a....
+/b/c/a..//a.../ /b/c/a../a...
+/b/c/a..//a../a /b/c/a../a../a
+/b/c/a..//a../. /b/c/a../a..
+/b/c/a..//a..// /b/c/a../a..
+/b/c/a..//a./aa /b/c/a../a./aa
+/b/c/a..//a./a. /b/c/a../a./a.
+/b/c/a..//a./a/ /b/c/a../a./a
+/b/c/a..//a./.a /b/c/a../a./.a
+/b/c/a..//a./.. /b/c/a..
+/b/c/a..//a././ /b/c/a../a.
+/b/c/a..//a.//a /b/c/a../a./a
+/b/c/a..//a.//. /b/c/a../a.
+/b/c/a..//a./// /b/c/a../a.
+/b/c/a..//a/aaa /b/c/a../a/aaa
+/b/c/a..//a/aa. /b/c/a../a/aa.
+/b/c/a..//a/aa/ /b/c/a../a/aa
+/b/c/a..//a/a.a /b/c/a../a/a.a
+/b/c/a..//a/a.. /b/c/a../a/a..
+/b/c/a..//a/a./ /b/c/a../a/a.
+/b/c/a..//a/a/a /b/c/a../a/a/a
+/b/c/a..//a/a/. /b/c/a../a/a
+/b/c/a..//a/a// /b/c/a../a/a
+/b/c/a..//a/.aa /b/c/a../a/.aa
+/b/c/a..//a/.a. /b/c/a../a/.a.
+/b/c/a..//a/.a/ /b/c/a../a/.a
+/b/c/a..//a/..a /b/c/a../a/..a
+/b/c/a..//a/... /b/c/a../a/...
+/b/c/a..//a/../ /b/c/a..
+/b/c/a..//a/./a /b/c/a../a/a
+/b/c/a..//a/./. /b/c/a../a
+/b/c/a..//a/.// /b/c/a../a
+/b/c/a..//a//aa /b/c/a../a/aa
+/b/c/a..//a//a. /b/c/a../a/a.
+/b/c/a..//a//a/ /b/c/a../a/a
+/b/c/a..//a//.a /b/c/a../a/.a
+/b/c/a..//a//.. /b/c/a..
+/b/c/a..//a//./ /b/c/a../a
+/b/c/a..//a///a /b/c/a../a/a
+/b/c/a..//a///. /b/c/a../a
+/b/c/a..//a//// /b/c/a../a
+/b/c/a..//.aaaa /b/c/a../.aaaa
+/b/c/a..//.aaa. /b/c/a../.aaa.
+/b/c/a..//.aaa/ /b/c/a../.aaa
+/b/c/a..//.aa.a /b/c/a../.aa.a
+/b/c/a..//.aa.. /b/c/a../.aa..
+/b/c/a..//.aa./ /b/c/a../.aa.
+/b/c/a..//.aa/a /b/c/a../.aa/a
+/b/c/a..//.aa/. /b/c/a../.aa
+/b/c/a..//.aa// /b/c/a../.aa
+/b/c/a..//.a.aa /b/c/a../.a.aa
+/b/c/a..//.a.a. /b/c/a../.a.a.
+/b/c/a..//.a.a/ /b/c/a../.a.a
+/b/c/a..//.a..a /b/c/a../.a..a
+/b/c/a..//.a... /b/c/a../.a...
+/b/c/a..//.a../ /b/c/a../.a..
+/b/c/a..//.a./a /b/c/a../.a./a
+/b/c/a..//.a./. /b/c/a../.a.
+/b/c/a..//.a.// /b/c/a../.a.
+/b/c/a..//.a/aa /b/c/a../.a/aa
+/b/c/a..//.a/a. /b/c/a../.a/a.
+/b/c/a..//.a/a/ /b/c/a../.a/a
+/b/c/a..//.a/.a /b/c/a../.a/.a
+/b/c/a..//.a/.. /b/c/a..
+/b/c/a..//.a/./ /b/c/a../.a
+/b/c/a..//.a//a /b/c/a../.a/a
+/b/c/a..//.a//. /b/c/a../.a
+/b/c/a..//.a/// /b/c/a../.a
+/b/c/a..//..aaa /b/c/a../..aaa
+/b/c/a..//..aa. /b/c/a../..aa.
+/b/c/a..//..aa/ /b/c/a../..aa
+/b/c/a..//..a.a /b/c/a../..a.a
+/b/c/a..//..a.. /b/c/a../..a..
+/b/c/a..//..a./ /b/c/a../..a.
+/b/c/a..//..a/a /b/c/a../..a/a
+/b/c/a..//..a/. /b/c/a../..a
+/b/c/a..//..a// /b/c/a../..a
+/b/c/a..//...aa /b/c/a../...aa
+/b/c/a..//...a. /b/c/a../...a.
+/b/c/a..//...a/ /b/c/a../...a
+/b/c/a..//....a /b/c/a../....a
+/b/c/a..//..... /b/c/a../.....
+/b/c/a..//..../ /b/c/a../....
+/b/c/a..//.../a /b/c/a../.../a
+/b/c/a..//.../. /b/c/a../...
+/b/c/a..//...// /b/c/a../...
+/b/c/a..//../aa /b/c/aa
+/b/c/a..//../a. /b/c/a.
+/b/c/a..//../a/ /b/c/a
+/b/c/a..//../.a /b/c/.a
+/b/c/a..//../.. /b
+/b/c/a..//.././ /b/c
+/b/c/a..//..//a /b/c/a
+/b/c/a..//..//. /b/c
+/b/c/a..//../// /b/c
+/b/c/a..//./aaa /b/c/a../aaa
+/b/c/a..//./aa. /b/c/a../aa.
+/b/c/a..//./aa/ /b/c/a../aa
+/b/c/a..//./a.a /b/c/a../a.a
+/b/c/a..//./a.. /b/c/a../a..
+/b/c/a..//./a./ /b/c/a../a.
+/b/c/a..//./a/a /b/c/a../a/a
+/b/c/a..//./a/. /b/c/a../a
+/b/c/a..//./a// /b/c/a../a
+/b/c/a..//./.aa /b/c/a../.aa
+/b/c/a..//./.a. /b/c/a../.a.
+/b/c/a..//./.a/ /b/c/a../.a
+/b/c/a..//./..a /b/c/a../..a
+/b/c/a..//./... /b/c/a../...
+/b/c/a..//./../ /b/c
+/b/c/a..//././a /b/c/a../a
+/b/c/a..//././. /b/c/a..
+/b/c/a..//./.// /b/c/a..
+/b/c/a..//.//aa /b/c/a../aa
+/b/c/a..//.//a. /b/c/a../a.
+/b/c/a..//.//a/ /b/c/a../a
+/b/c/a..//.//.a /b/c/a../.a
+/b/c/a..//.//.. /b/c
+/b/c/a..//.//./ /b/c/a..
+/b/c/a..//.///a /b/c/a../a
+/b/c/a..//.///. /b/c/a..
+/b/c/a..//.//// /b/c/a..
+/b/c/a..///aaaa /b/c/a../aaaa
+/b/c/a..///aaa. /b/c/a../aaa.
+/b/c/a..///aaa/ /b/c/a../aaa
+/b/c/a..///aa.a /b/c/a../aa.a
+/b/c/a..///aa.. /b/c/a../aa..
+/b/c/a..///aa./ /b/c/a../aa.
+/b/c/a..///aa/a /b/c/a../aa/a
+/b/c/a..///aa/. /b/c/a../aa
+/b/c/a..///aa// /b/c/a../aa
+/b/c/a..///a.aa /b/c/a../a.aa
+/b/c/a..///a.a. /b/c/a../a.a.
+/b/c/a..///a.a/ /b/c/a../a.a
+/b/c/a..///a..a /b/c/a../a..a
+/b/c/a..///a... /b/c/a../a...
+/b/c/a..///a../ /b/c/a../a..
+/b/c/a..///a./a /b/c/a../a./a
+/b/c/a..///a./. /b/c/a../a.
+/b/c/a..///a.// /b/c/a../a.
+/b/c/a..///a/aa /b/c/a../a/aa
+/b/c/a..///a/a. /b/c/a../a/a.
+/b/c/a..///a/a/ /b/c/a../a/a
+/b/c/a..///a/.a /b/c/a../a/.a
+/b/c/a..///a/.. /b/c/a..
+/b/c/a..///a/./ /b/c/a../a
+/b/c/a..///a//a /b/c/a../a/a
+/b/c/a..///a//. /b/c/a../a
+/b/c/a..///a/// /b/c/a../a
+/b/c/a..///.aaa /b/c/a../.aaa
+/b/c/a..///.aa. /b/c/a../.aa.
+/b/c/a..///.aa/ /b/c/a../.aa
+/b/c/a..///.a.a /b/c/a../.a.a
+/b/c/a..///.a.. /b/c/a../.a..
+/b/c/a..///.a./ /b/c/a../.a.
+/b/c/a..///.a/a /b/c/a../.a/a
+/b/c/a..///.a/. /b/c/a../.a
+/b/c/a..///.a// /b/c/a../.a
+/b/c/a..///..aa /b/c/a../..aa
+/b/c/a..///..a. /b/c/a../..a.
+/b/c/a..///..a/ /b/c/a../..a
+/b/c/a..///...a /b/c/a../...a
+/b/c/a..///.... /b/c/a../....
+/b/c/a..///.../ /b/c/a../...
+/b/c/a..///../a /b/c/a
+/b/c/a..///../. /b/c
+/b/c/a..///..// /b/c
+/b/c/a..///./aa /b/c/a../aa
+/b/c/a..///./a. /b/c/a../a.
+/b/c/a..///./a/ /b/c/a../a
+/b/c/a..///./.a /b/c/a../.a
+/b/c/a..///./.. /b/c
+/b/c/a..///././ /b/c/a..
+/b/c/a..///.//a /b/c/a../a
+/b/c/a..///.//. /b/c/a..
+/b/c/a..///./// /b/c/a..
+/b/c/a..////aaa /b/c/a../aaa
+/b/c/a..////aa. /b/c/a../aa.
+/b/c/a..////aa/ /b/c/a../aa
+/b/c/a..////a.a /b/c/a../a.a
+/b/c/a..////a.. /b/c/a../a..
+/b/c/a..////a./ /b/c/a../a.
+/b/c/a..////a/a /b/c/a../a/a
+/b/c/a..////a/. /b/c/a../a
+/b/c/a..////a// /b/c/a../a
+/b/c/a..////.aa /b/c/a../.aa
+/b/c/a..////.a. /b/c/a../.a.
+/b/c/a..////.a/ /b/c/a../.a
+/b/c/a..////..a /b/c/a../..a
+/b/c/a..////... /b/c/a../...
+/b/c/a..////../ /b/c
+/b/c/a..////./a /b/c/a../a
+/b/c/a..////./. /b/c/a..
+/b/c/a..////.// /b/c/a..
+/b/c/a../////aa /b/c/a../aa
+/b/c/a../////a. /b/c/a../a.
+/b/c/a../////a/ /b/c/a../a
+/b/c/a../////.a /b/c/a../.a
+/b/c/a../////.. /b/c
+/b/c/a../////./ /b/c/a..
+/b/c/a..//////a /b/c/a../a
+/b/c/a..//////. /b/c/a..
+/b/c/a../////// /b/c/a..
+/b/c/a./aaaaaaa /b/c/a./aaaaaaa
+/b/c/a./aaaaaa. /b/c/a./aaaaaa.
+/b/c/a./aaaaaa/ /b/c/a./aaaaaa
+/b/c/a./aaaaa.a /b/c/a./aaaaa.a
+/b/c/a./aaaaa.. /b/c/a./aaaaa..
+/b/c/a./aaaaa./ /b/c/a./aaaaa.
+/b/c/a./aaaaa/a /b/c/a./aaaaa/a
+/b/c/a./aaaaa/. /b/c/a./aaaaa
+/b/c/a./aaaaa// /b/c/a./aaaaa
+/b/c/a./aaaa.aa /b/c/a./aaaa.aa
+/b/c/a./aaaa.a. /b/c/a./aaaa.a.
+/b/c/a./aaaa.a/ /b/c/a./aaaa.a
+/b/c/a./aaaa..a /b/c/a./aaaa..a
+/b/c/a./aaaa... /b/c/a./aaaa...
+/b/c/a./aaaa../ /b/c/a./aaaa..
+/b/c/a./aaaa./a /b/c/a./aaaa./a
+/b/c/a./aaaa./. /b/c/a./aaaa.
+/b/c/a./aaaa.// /b/c/a./aaaa.
+/b/c/a./aaaa/aa /b/c/a./aaaa/aa
+/b/c/a./aaaa/a. /b/c/a./aaaa/a.
+/b/c/a./aaaa/a/ /b/c/a./aaaa/a
+/b/c/a./aaaa/.a /b/c/a./aaaa/.a
+/b/c/a./aaaa/.. /b/c/a.
+/b/c/a./aaaa/./ /b/c/a./aaaa
+/b/c/a./aaaa//a /b/c/a./aaaa/a
+/b/c/a./aaaa//. /b/c/a./aaaa
+/b/c/a./aaaa/// /b/c/a./aaaa
+/b/c/a./aaa.aaa /b/c/a./aaa.aaa
+/b/c/a./aaa.aa. /b/c/a./aaa.aa.
+/b/c/a./aaa.aa/ /b/c/a./aaa.aa
+/b/c/a./aaa.a.a /b/c/a./aaa.a.a
+/b/c/a./aaa.a.. /b/c/a./aaa.a..
+/b/c/a./aaa.a./ /b/c/a./aaa.a.
+/b/c/a./aaa.a/a /b/c/a./aaa.a/a
+/b/c/a./aaa.a/. /b/c/a./aaa.a
+/b/c/a./aaa.a// /b/c/a./aaa.a
+/b/c/a./aaa..aa /b/c/a./aaa..aa
+/b/c/a./aaa..a. /b/c/a./aaa..a.
+/b/c/a./aaa..a/ /b/c/a./aaa..a
+/b/c/a./aaa...a /b/c/a./aaa...a
+/b/c/a./aaa.... /b/c/a./aaa....
+/b/c/a./aaa.../ /b/c/a./aaa...
+/b/c/a./aaa../a /b/c/a./aaa../a
+/b/c/a./aaa../. /b/c/a./aaa..
+/b/c/a./aaa..// /b/c/a./aaa..
+/b/c/a./aaa./aa /b/c/a./aaa./aa
+/b/c/a./aaa./a. /b/c/a./aaa./a.
+/b/c/a./aaa./a/ /b/c/a./aaa./a
+/b/c/a./aaa./.a /b/c/a./aaa./.a
+/b/c/a./aaa./.. /b/c/a.
+/b/c/a./aaa././ /b/c/a./aaa.
+/b/c/a./aaa.//a /b/c/a./aaa./a
+/b/c/a./aaa.//. /b/c/a./aaa.
+/b/c/a./aaa./// /b/c/a./aaa.
+/b/c/a./aaa/aaa /b/c/a./aaa/aaa
+/b/c/a./aaa/aa. /b/c/a./aaa/aa.
+/b/c/a./aaa/aa/ /b/c/a./aaa/aa
+/b/c/a./aaa/a.a /b/c/a./aaa/a.a
+/b/c/a./aaa/a.. /b/c/a./aaa/a..
+/b/c/a./aaa/a./ /b/c/a./aaa/a.
+/b/c/a./aaa/a/a /b/c/a./aaa/a/a
+/b/c/a./aaa/a/. /b/c/a./aaa/a
+/b/c/a./aaa/a// /b/c/a./aaa/a
+/b/c/a./aaa/.aa /b/c/a./aaa/.aa
+/b/c/a./aaa/.a. /b/c/a./aaa/.a.
+/b/c/a./aaa/.a/ /b/c/a./aaa/.a
+/b/c/a./aaa/..a /b/c/a./aaa/..a
+/b/c/a./aaa/... /b/c/a./aaa/...
+/b/c/a./aaa/../ /b/c/a.
+/b/c/a./aaa/./a /b/c/a./aaa/a
+/b/c/a./aaa/./. /b/c/a./aaa
+/b/c/a./aaa/.// /b/c/a./aaa
+/b/c/a./aaa//aa /b/c/a./aaa/aa
+/b/c/a./aaa//a. /b/c/a./aaa/a.
+/b/c/a./aaa//a/ /b/c/a./aaa/a
+/b/c/a./aaa//.a /b/c/a./aaa/.a
+/b/c/a./aaa//.. /b/c/a.
+/b/c/a./aaa//./ /b/c/a./aaa
+/b/c/a./aaa///a /b/c/a./aaa/a
+/b/c/a./aaa///. /b/c/a./aaa
+/b/c/a./aaa//// /b/c/a./aaa
+/b/c/a./aa.aaaa /b/c/a./aa.aaaa
+/b/c/a./aa.aaa. /b/c/a./aa.aaa.
+/b/c/a./aa.aaa/ /b/c/a./aa.aaa
+/b/c/a./aa.aa.a /b/c/a./aa.aa.a
+/b/c/a./aa.aa.. /b/c/a./aa.aa..
+/b/c/a./aa.aa./ /b/c/a./aa.aa.
+/b/c/a./aa.aa/a /b/c/a./aa.aa/a
+/b/c/a./aa.aa/. /b/c/a./aa.aa
+/b/c/a./aa.aa// /b/c/a./aa.aa
+/b/c/a./aa.a.aa /b/c/a./aa.a.aa
+/b/c/a./aa.a.a. /b/c/a./aa.a.a.
+/b/c/a./aa.a.a/ /b/c/a./aa.a.a
+/b/c/a./aa.a..a /b/c/a./aa.a..a
+/b/c/a./aa.a... /b/c/a./aa.a...
+/b/c/a./aa.a../ /b/c/a./aa.a..
+/b/c/a./aa.a./a /b/c/a./aa.a./a
+/b/c/a./aa.a./. /b/c/a./aa.a.
+/b/c/a./aa.a.// /b/c/a./aa.a.
+/b/c/a./aa.a/aa /b/c/a./aa.a/aa
+/b/c/a./aa.a/a. /b/c/a./aa.a/a.
+/b/c/a./aa.a/a/ /b/c/a./aa.a/a
+/b/c/a./aa.a/.a /b/c/a./aa.a/.a
+/b/c/a./aa.a/.. /b/c/a.
+/b/c/a./aa.a/./ /b/c/a./aa.a
+/b/c/a./aa.a//a /b/c/a./aa.a/a
+/b/c/a./aa.a//. /b/c/a./aa.a
+/b/c/a./aa.a/// /b/c/a./aa.a
+/b/c/a./aa..aaa /b/c/a./aa..aaa
+/b/c/a./aa..aa. /b/c/a./aa..aa.
+/b/c/a./aa..aa/ /b/c/a./aa..aa
+/b/c/a./aa..a.a /b/c/a./aa..a.a
+/b/c/a./aa..a.. /b/c/a./aa..a..
+/b/c/a./aa..a./ /b/c/a./aa..a.
+/b/c/a./aa..a/a /b/c/a./aa..a/a
+/b/c/a./aa..a/. /b/c/a./aa..a
+/b/c/a./aa..a// /b/c/a./aa..a
+/b/c/a./aa...aa /b/c/a./aa...aa
+/b/c/a./aa...a. /b/c/a./aa...a.
+/b/c/a./aa...a/ /b/c/a./aa...a
+/b/c/a./aa....a /b/c/a./aa....a
+/b/c/a./aa..... /b/c/a./aa.....
+/b/c/a./aa..../ /b/c/a./aa....
+/b/c/a./aa.../a /b/c/a./aa.../a
+/b/c/a./aa.../. /b/c/a./aa...
+/b/c/a./aa...// /b/c/a./aa...
+/b/c/a./aa../aa /b/c/a./aa../aa
+/b/c/a./aa../a. /b/c/a./aa../a.
+/b/c/a./aa../a/ /b/c/a./aa../a
+/b/c/a./aa../.a /b/c/a./aa../.a
+/b/c/a./aa../.. /b/c/a.
+/b/c/a./aa.././ /b/c/a./aa..
+/b/c/a./aa..//a /b/c/a./aa../a
+/b/c/a./aa..//. /b/c/a./aa..
+/b/c/a./aa../// /b/c/a./aa..
+/b/c/a./aa./aaa /b/c/a./aa./aaa
+/b/c/a./aa./aa. /b/c/a./aa./aa.
+/b/c/a./aa./aa/ /b/c/a./aa./aa
+/b/c/a./aa./a.a /b/c/a./aa./a.a
+/b/c/a./aa./a.. /b/c/a./aa./a..
+/b/c/a./aa./a./ /b/c/a./aa./a.
+/b/c/a./aa./a/a /b/c/a./aa./a/a
+/b/c/a./aa./a/. /b/c/a./aa./a
+/b/c/a./aa./a// /b/c/a./aa./a
+/b/c/a./aa./.aa /b/c/a./aa./.aa
+/b/c/a./aa./.a. /b/c/a./aa./.a.
+/b/c/a./aa./.a/ /b/c/a./aa./.a
+/b/c/a./aa./..a /b/c/a./aa./..a
+/b/c/a./aa./... /b/c/a./aa./...
+/b/c/a./aa./../ /b/c/a.
+/b/c/a./aa././a /b/c/a./aa./a
+/b/c/a./aa././. /b/c/a./aa.
+/b/c/a./aa./.// /b/c/a./aa.
+/b/c/a./aa.//aa /b/c/a./aa./aa
+/b/c/a./aa.//a. /b/c/a./aa./a.
+/b/c/a./aa.//a/ /b/c/a./aa./a
+/b/c/a./aa.//.a /b/c/a./aa./.a
+/b/c/a./aa.//.. /b/c/a.
+/b/c/a./aa.//./ /b/c/a./aa.
+/b/c/a./aa.///a /b/c/a./aa./a
+/b/c/a./aa.///. /b/c/a./aa.
+/b/c/a./aa.//// /b/c/a./aa.
+/b/c/a./aa/aaaa /b/c/a./aa/aaaa
+/b/c/a./aa/aaa. /b/c/a./aa/aaa.
+/b/c/a./aa/aaa/ /b/c/a./aa/aaa
+/b/c/a./aa/aa.a /b/c/a./aa/aa.a
+/b/c/a./aa/aa.. /b/c/a./aa/aa..
+/b/c/a./aa/aa./ /b/c/a./aa/aa.
+/b/c/a./aa/aa/a /b/c/a./aa/aa/a
+/b/c/a./aa/aa/. /b/c/a./aa/aa
+/b/c/a./aa/aa// /b/c/a./aa/aa
+/b/c/a./aa/a.aa /b/c/a./aa/a.aa
+/b/c/a./aa/a.a. /b/c/a./aa/a.a.
+/b/c/a./aa/a.a/ /b/c/a./aa/a.a
+/b/c/a./aa/a..a /b/c/a./aa/a..a
+/b/c/a./aa/a... /b/c/a./aa/a...
+/b/c/a./aa/a../ /b/c/a./aa/a..
+/b/c/a./aa/a./a /b/c/a./aa/a./a
+/b/c/a./aa/a./. /b/c/a./aa/a.
+/b/c/a./aa/a.// /b/c/a./aa/a.
+/b/c/a./aa/a/aa /b/c/a./aa/a/aa
+/b/c/a./aa/a/a. /b/c/a./aa/a/a.
+/b/c/a./aa/a/a/ /b/c/a./aa/a/a
+/b/c/a./aa/a/.a /b/c/a./aa/a/.a
+/b/c/a./aa/a/.. /b/c/a./aa
+/b/c/a./aa/a/./ /b/c/a./aa/a
+/b/c/a./aa/a//a /b/c/a./aa/a/a
+/b/c/a./aa/a//. /b/c/a./aa/a
+/b/c/a./aa/a/// /b/c/a./aa/a
+/b/c/a./aa/.aaa /b/c/a./aa/.aaa
+/b/c/a./aa/.aa. /b/c/a./aa/.aa.
+/b/c/a./aa/.aa/ /b/c/a./aa/.aa
+/b/c/a./aa/.a.a /b/c/a./aa/.a.a
+/b/c/a./aa/.a.. /b/c/a./aa/.a..
+/b/c/a./aa/.a./ /b/c/a./aa/.a.
+/b/c/a./aa/.a/a /b/c/a./aa/.a/a
+/b/c/a./aa/.a/. /b/c/a./aa/.a
+/b/c/a./aa/.a// /b/c/a./aa/.a
+/b/c/a./aa/..aa /b/c/a./aa/..aa
+/b/c/a./aa/..a. /b/c/a./aa/..a.
+/b/c/a./aa/..a/ /b/c/a./aa/..a
+/b/c/a./aa/...a /b/c/a./aa/...a
+/b/c/a./aa/.... /b/c/a./aa/....
+/b/c/a./aa/.../ /b/c/a./aa/...
+/b/c/a./aa/../a /b/c/a./a
+/b/c/a./aa/../. /b/c/a.
+/b/c/a./aa/..// /b/c/a.
+/b/c/a./aa/./aa /b/c/a./aa/aa
+/b/c/a./aa/./a. /b/c/a./aa/a.
+/b/c/a./aa/./a/ /b/c/a./aa/a
+/b/c/a./aa/./.a /b/c/a./aa/.a
+/b/c/a./aa/./.. /b/c/a.
+/b/c/a./aa/././ /b/c/a./aa
+/b/c/a./aa/.//a /b/c/a./aa/a
+/b/c/a./aa/.//. /b/c/a./aa
+/b/c/a./aa/./// /b/c/a./aa
+/b/c/a./aa//aaa /b/c/a./aa/aaa
+/b/c/a./aa//aa. /b/c/a./aa/aa.
+/b/c/a./aa//aa/ /b/c/a./aa/aa
+/b/c/a./aa//a.a /b/c/a./aa/a.a
+/b/c/a./aa//a.. /b/c/a./aa/a..
+/b/c/a./aa//a./ /b/c/a./aa/a.
+/b/c/a./aa//a/a /b/c/a./aa/a/a
+/b/c/a./aa//a/. /b/c/a./aa/a
+/b/c/a./aa//a// /b/c/a./aa/a
+/b/c/a./aa//.aa /b/c/a./aa/.aa
+/b/c/a./aa//.a. /b/c/a./aa/.a.
+/b/c/a./aa//.a/ /b/c/a./aa/.a
+/b/c/a./aa//..a /b/c/a./aa/..a
+/b/c/a./aa//... /b/c/a./aa/...
+/b/c/a./aa//../ /b/c/a.
+/b/c/a./aa//./a /b/c/a./aa/a
+/b/c/a./aa//./. /b/c/a./aa
+/b/c/a./aa//.// /b/c/a./aa
+/b/c/a./aa///aa /b/c/a./aa/aa
+/b/c/a./aa///a. /b/c/a./aa/a.
+/b/c/a./aa///a/ /b/c/a./aa/a
+/b/c/a./aa///.a /b/c/a./aa/.a
+/b/c/a./aa///.. /b/c/a.
+/b/c/a./aa///./ /b/c/a./aa
+/b/c/a./aa////a /b/c/a./aa/a
+/b/c/a./aa////. /b/c/a./aa
+/b/c/a./aa///// /b/c/a./aa
+/b/c/a./a.aaaaa /b/c/a./a.aaaaa
+/b/c/a./a.aaaa. /b/c/a./a.aaaa.
+/b/c/a./a.aaaa/ /b/c/a./a.aaaa
+/b/c/a./a.aaa.a /b/c/a./a.aaa.a
+/b/c/a./a.aaa.. /b/c/a./a.aaa..
+/b/c/a./a.aaa./ /b/c/a./a.aaa.
+/b/c/a./a.aaa/a /b/c/a./a.aaa/a
+/b/c/a./a.aaa/. /b/c/a./a.aaa
+/b/c/a./a.aaa// /b/c/a./a.aaa
+/b/c/a./a.aa.aa /b/c/a./a.aa.aa
+/b/c/a./a.aa.a. /b/c/a./a.aa.a.
+/b/c/a./a.aa.a/ /b/c/a./a.aa.a
+/b/c/a./a.aa..a /b/c/a./a.aa..a
+/b/c/a./a.aa... /b/c/a./a.aa...
+/b/c/a./a.aa../ /b/c/a./a.aa..
+/b/c/a./a.aa./a /b/c/a./a.aa./a
+/b/c/a./a.aa./. /b/c/a./a.aa.
+/b/c/a./a.aa.// /b/c/a./a.aa.
+/b/c/a./a.aa/aa /b/c/a./a.aa/aa
+/b/c/a./a.aa/a. /b/c/a./a.aa/a.
+/b/c/a./a.aa/a/ /b/c/a./a.aa/a
+/b/c/a./a.aa/.a /b/c/a./a.aa/.a
+/b/c/a./a.aa/.. /b/c/a.
+/b/c/a./a.aa/./ /b/c/a./a.aa
+/b/c/a./a.aa//a /b/c/a./a.aa/a
+/b/c/a./a.aa//. /b/c/a./a.aa
+/b/c/a./a.aa/// /b/c/a./a.aa
+/b/c/a./a.a.aaa /b/c/a./a.a.aaa
+/b/c/a./a.a.aa. /b/c/a./a.a.aa.
+/b/c/a./a.a.aa/ /b/c/a./a.a.aa
+/b/c/a./a.a.a.a /b/c/a./a.a.a.a
+/b/c/a./a.a.a.. /b/c/a./a.a.a..
+/b/c/a./a.a.a./ /b/c/a./a.a.a.
+/b/c/a./a.a.a/a /b/c/a./a.a.a/a
+/b/c/a./a.a.a/. /b/c/a./a.a.a
+/b/c/a./a.a.a// /b/c/a./a.a.a
+/b/c/a./a.a..aa /b/c/a./a.a..aa
+/b/c/a./a.a..a. /b/c/a./a.a..a.
+/b/c/a./a.a..a/ /b/c/a./a.a..a
+/b/c/a./a.a...a /b/c/a./a.a...a
+/b/c/a./a.a.... /b/c/a./a.a....
+/b/c/a./a.a.../ /b/c/a./a.a...
+/b/c/a./a.a../a /b/c/a./a.a../a
+/b/c/a./a.a../. /b/c/a./a.a..
+/b/c/a./a.a..// /b/c/a./a.a..
+/b/c/a./a.a./aa /b/c/a./a.a./aa
+/b/c/a./a.a./a. /b/c/a./a.a./a.
+/b/c/a./a.a./a/ /b/c/a./a.a./a
+/b/c/a./a.a./.a /b/c/a./a.a./.a
+/b/c/a./a.a./.. /b/c/a.
+/b/c/a./a.a././ /b/c/a./a.a.
+/b/c/a./a.a.//a /b/c/a./a.a./a
+/b/c/a./a.a.//. /b/c/a./a.a.
+/b/c/a./a.a./// /b/c/a./a.a.
+/b/c/a./a.a/aaa /b/c/a./a.a/aaa
+/b/c/a./a.a/aa. /b/c/a./a.a/aa.
+/b/c/a./a.a/aa/ /b/c/a./a.a/aa
+/b/c/a./a.a/a.a /b/c/a./a.a/a.a
+/b/c/a./a.a/a.. /b/c/a./a.a/a..
+/b/c/a./a.a/a./ /b/c/a./a.a/a.
+/b/c/a./a.a/a/a /b/c/a./a.a/a/a
+/b/c/a./a.a/a/. /b/c/a./a.a/a
+/b/c/a./a.a/a// /b/c/a./a.a/a
+/b/c/a./a.a/.aa /b/c/a./a.a/.aa
+/b/c/a./a.a/.a. /b/c/a./a.a/.a.
+/b/c/a./a.a/.a/ /b/c/a./a.a/.a
+/b/c/a./a.a/..a /b/c/a./a.a/..a
+/b/c/a./a.a/... /b/c/a./a.a/...
+/b/c/a./a.a/../ /b/c/a.
+/b/c/a./a.a/./a /b/c/a./a.a/a
+/b/c/a./a.a/./. /b/c/a./a.a
+/b/c/a./a.a/.// /b/c/a./a.a
+/b/c/a./a.a//aa /b/c/a./a.a/aa
+/b/c/a./a.a//a. /b/c/a./a.a/a.
+/b/c/a./a.a//a/ /b/c/a./a.a/a
+/b/c/a./a.a//.a /b/c/a./a.a/.a
+/b/c/a./a.a//.. /b/c/a.
+/b/c/a./a.a//./ /b/c/a./a.a
+/b/c/a./a.a///a /b/c/a./a.a/a
+/b/c/a./a.a///. /b/c/a./a.a
+/b/c/a./a.a//// /b/c/a./a.a
+/b/c/a./a..aaaa /b/c/a./a..aaaa
+/b/c/a./a..aaa. /b/c/a./a..aaa.
+/b/c/a./a..aaa/ /b/c/a./a..aaa
+/b/c/a./a..aa.a /b/c/a./a..aa.a
+/b/c/a./a..aa.. /b/c/a./a..aa..
+/b/c/a./a..aa./ /b/c/a./a..aa.
+/b/c/a./a..aa/a /b/c/a./a..aa/a
+/b/c/a./a..aa/. /b/c/a./a..aa
+/b/c/a./a..aa// /b/c/a./a..aa
+/b/c/a./a..a.aa /b/c/a./a..a.aa
+/b/c/a./a..a.a. /b/c/a./a..a.a.
+/b/c/a./a..a.a/ /b/c/a./a..a.a
+/b/c/a./a..a..a /b/c/a./a..a..a
+/b/c/a./a..a... /b/c/a./a..a...
+/b/c/a./a..a../ /b/c/a./a..a..
+/b/c/a./a..a./a /b/c/a./a..a./a
+/b/c/a./a..a./. /b/c/a./a..a.
+/b/c/a./a..a.// /b/c/a./a..a.
+/b/c/a./a..a/aa /b/c/a./a..a/aa
+/b/c/a./a..a/a. /b/c/a./a..a/a.
+/b/c/a./a..a/a/ /b/c/a./a..a/a
+/b/c/a./a..a/.a /b/c/a./a..a/.a
+/b/c/a./a..a/.. /b/c/a.
+/b/c/a./a..a/./ /b/c/a./a..a
+/b/c/a./a..a//a /b/c/a./a..a/a
+/b/c/a./a..a//. /b/c/a./a..a
+/b/c/a./a..a/// /b/c/a./a..a
+/b/c/a./a...aaa /b/c/a./a...aaa
+/b/c/a./a...aa. /b/c/a./a...aa.
+/b/c/a./a...aa/ /b/c/a./a...aa
+/b/c/a./a...a.a /b/c/a./a...a.a
+/b/c/a./a...a.. /b/c/a./a...a..
+/b/c/a./a...a./ /b/c/a./a...a.
+/b/c/a./a...a/a /b/c/a./a...a/a
+/b/c/a./a...a/. /b/c/a./a...a
+/b/c/a./a...a// /b/c/a./a...a
+/b/c/a./a....aa /b/c/a./a....aa
+/b/c/a./a....a. /b/c/a./a....a.
+/b/c/a./a....a/ /b/c/a./a....a
+/b/c/a./a.....a /b/c/a./a.....a
+/b/c/a./a...... /b/c/a./a......
+/b/c/a./a...../ /b/c/a./a.....
+/b/c/a./a..../a /b/c/a./a..../a
+/b/c/a./a..../. /b/c/a./a....
+/b/c/a./a....// /b/c/a./a....
+/b/c/a./a.../aa /b/c/a./a.../aa
+/b/c/a./a.../a. /b/c/a./a.../a.
+/b/c/a./a.../a/ /b/c/a./a.../a
+/b/c/a./a.../.a /b/c/a./a.../.a
+/b/c/a./a.../.. /b/c/a.
+/b/c/a./a..././ /b/c/a./a...
+/b/c/a./a...//a /b/c/a./a.../a
+/b/c/a./a...//. /b/c/a./a...
+/b/c/a./a.../// /b/c/a./a...
+/b/c/a./a../aaa /b/c/a./a../aaa
+/b/c/a./a../aa. /b/c/a./a../aa.
+/b/c/a./a../aa/ /b/c/a./a../aa
+/b/c/a./a../a.a /b/c/a./a../a.a
+/b/c/a./a../a.. /b/c/a./a../a..
+/b/c/a./a../a./ /b/c/a./a../a.
+/b/c/a./a../a/a /b/c/a./a../a/a
+/b/c/a./a../a/. /b/c/a./a../a
+/b/c/a./a../a// /b/c/a./a../a
+/b/c/a./a../.aa /b/c/a./a../.aa
+/b/c/a./a../.a. /b/c/a./a../.a.
+/b/c/a./a../.a/ /b/c/a./a../.a
+/b/c/a./a../..a /b/c/a./a../..a
+/b/c/a./a../... /b/c/a./a../...
+/b/c/a./a../../ /b/c/a.
+/b/c/a./a.././a /b/c/a./a../a
+/b/c/a./a.././. /b/c/a./a..
+/b/c/a./a../.// /b/c/a./a..
+/b/c/a./a..//aa /b/c/a./a../aa
+/b/c/a./a..//a. /b/c/a./a../a.
+/b/c/a./a..//a/ /b/c/a./a../a
+/b/c/a./a..//.a /b/c/a./a../.a
+/b/c/a./a..//.. /b/c/a.
+/b/c/a./a..//./ /b/c/a./a..
+/b/c/a./a..///a /b/c/a./a../a
+/b/c/a./a..///. /b/c/a./a..
+/b/c/a./a..//// /b/c/a./a..
+/b/c/a./a./aaaa /b/c/a./a./aaaa
+/b/c/a./a./aaa. /b/c/a./a./aaa.
+/b/c/a./a./aaa/ /b/c/a./a./aaa
+/b/c/a./a./aa.a /b/c/a./a./aa.a
+/b/c/a./a./aa.. /b/c/a./a./aa..
+/b/c/a./a./aa./ /b/c/a./a./aa.
+/b/c/a./a./aa/a /b/c/a./a./aa/a
+/b/c/a./a./aa/. /b/c/a./a./aa
+/b/c/a./a./aa// /b/c/a./a./aa
+/b/c/a./a./a.aa /b/c/a./a./a.aa
+/b/c/a./a./a.a. /b/c/a./a./a.a.
+/b/c/a./a./a.a/ /b/c/a./a./a.a
+/b/c/a./a./a..a /b/c/a./a./a..a
+/b/c/a./a./a... /b/c/a./a./a...
+/b/c/a./a./a../ /b/c/a./a./a..
+/b/c/a./a./a./a /b/c/a./a./a./a
+/b/c/a./a./a./. /b/c/a./a./a.
+/b/c/a./a./a.// /b/c/a./a./a.
+/b/c/a./a./a/aa /b/c/a./a./a/aa
+/b/c/a./a./a/a. /b/c/a./a./a/a.
+/b/c/a./a./a/a/ /b/c/a./a./a/a
+/b/c/a./a./a/.a /b/c/a./a./a/.a
+/b/c/a./a./a/.. /b/c/a./a.
+/b/c/a./a./a/./ /b/c/a./a./a
+/b/c/a./a./a//a /b/c/a./a./a/a
+/b/c/a./a./a//. /b/c/a./a./a
+/b/c/a./a./a/// /b/c/a./a./a
+/b/c/a./a./.aaa /b/c/a./a./.aaa
+/b/c/a./a./.aa. /b/c/a./a./.aa.
+/b/c/a./a./.aa/ /b/c/a./a./.aa
+/b/c/a./a./.a.a /b/c/a./a./.a.a
+/b/c/a./a./.a.. /b/c/a./a./.a..
+/b/c/a./a./.a./ /b/c/a./a./.a.
+/b/c/a./a./.a/a /b/c/a./a./.a/a
+/b/c/a./a./.a/. /b/c/a./a./.a
+/b/c/a./a./.a// /b/c/a./a./.a
+/b/c/a./a./..aa /b/c/a./a./..aa
+/b/c/a./a./..a. /b/c/a./a./..a.
+/b/c/a./a./..a/ /b/c/a./a./..a
+/b/c/a./a./...a /b/c/a./a./...a
+/b/c/a./a./.... /b/c/a./a./....
+/b/c/a./a./.../ /b/c/a./a./...
+/b/c/a./a./../a /b/c/a./a
+/b/c/a./a./../. /b/c/a.
+/b/c/a./a./..// /b/c/a.
+/b/c/a./a././aa /b/c/a./a./aa
+/b/c/a./a././a. /b/c/a./a./a.
+/b/c/a./a././a/ /b/c/a./a./a
+/b/c/a./a././.a /b/c/a./a./.a
+/b/c/a./a././.. /b/c/a.
+/b/c/a./a./././ /b/c/a./a.
+/b/c/a./a././/a /b/c/a./a./a
+/b/c/a./a././/. /b/c/a./a.
+/b/c/a./a././// /b/c/a./a.
+/b/c/a./a.//aaa /b/c/a./a./aaa
+/b/c/a./a.//aa. /b/c/a./a./aa.
+/b/c/a./a.//aa/ /b/c/a./a./aa
+/b/c/a./a.//a.a /b/c/a./a./a.a
+/b/c/a./a.//a.. /b/c/a./a./a..
+/b/c/a./a.//a./ /b/c/a./a./a.
+/b/c/a./a.//a/a /b/c/a./a./a/a
+/b/c/a./a.//a/. /b/c/a./a./a
+/b/c/a./a.//a// /b/c/a./a./a
+/b/c/a./a.//.aa /b/c/a./a./.aa
+/b/c/a./a.//.a. /b/c/a./a./.a.
+/b/c/a./a.//.a/ /b/c/a./a./.a
+/b/c/a./a.//..a /b/c/a./a./..a
+/b/c/a./a.//... /b/c/a./a./...
+/b/c/a./a.//../ /b/c/a.
+/b/c/a./a.//./a /b/c/a./a./a
+/b/c/a./a.//./. /b/c/a./a.
+/b/c/a./a.//.// /b/c/a./a.
+/b/c/a./a.///aa /b/c/a./a./aa
+/b/c/a./a.///a. /b/c/a./a./a.
+/b/c/a./a.///a/ /b/c/a./a./a
+/b/c/a./a.///.a /b/c/a./a./.a
+/b/c/a./a.///.. /b/c/a.
+/b/c/a./a.///./ /b/c/a./a.
+/b/c/a./a.////a /b/c/a./a./a
+/b/c/a./a.////. /b/c/a./a.
+/b/c/a./a.///// /b/c/a./a.
+/b/c/a./a/aaaaa /b/c/a./a/aaaaa
+/b/c/a./a/aaaa. /b/c/a./a/aaaa.
+/b/c/a./a/aaaa/ /b/c/a./a/aaaa
+/b/c/a./a/aaa.a /b/c/a./a/aaa.a
+/b/c/a./a/aaa.. /b/c/a./a/aaa..
+/b/c/a./a/aaa./ /b/c/a./a/aaa.
+/b/c/a./a/aaa/a /b/c/a./a/aaa/a
+/b/c/a./a/aaa/. /b/c/a./a/aaa
+/b/c/a./a/aaa// /b/c/a./a/aaa
+/b/c/a./a/aa.aa /b/c/a./a/aa.aa
+/b/c/a./a/aa.a. /b/c/a./a/aa.a.
+/b/c/a./a/aa.a/ /b/c/a./a/aa.a
+/b/c/a./a/aa..a /b/c/a./a/aa..a
+/b/c/a./a/aa... /b/c/a./a/aa...
+/b/c/a./a/aa../ /b/c/a./a/aa..
+/b/c/a./a/aa./a /b/c/a./a/aa./a
+/b/c/a./a/aa./. /b/c/a./a/aa.
+/b/c/a./a/aa.// /b/c/a./a/aa.
+/b/c/a./a/aa/aa /b/c/a./a/aa/aa
+/b/c/a./a/aa/a. /b/c/a./a/aa/a.
+/b/c/a./a/aa/a/ /b/c/a./a/aa/a
+/b/c/a./a/aa/.a /b/c/a./a/aa/.a
+/b/c/a./a/aa/.. /b/c/a./a
+/b/c/a./a/aa/./ /b/c/a./a/aa
+/b/c/a./a/aa//a /b/c/a./a/aa/a
+/b/c/a./a/aa//. /b/c/a./a/aa
+/b/c/a./a/aa/// /b/c/a./a/aa
+/b/c/a./a/a.aaa /b/c/a./a/a.aaa
+/b/c/a./a/a.aa. /b/c/a./a/a.aa.
+/b/c/a./a/a.aa/ /b/c/a./a/a.aa
+/b/c/a./a/a.a.a /b/c/a./a/a.a.a
+/b/c/a./a/a.a.. /b/c/a./a/a.a..
+/b/c/a./a/a.a./ /b/c/a./a/a.a.
+/b/c/a./a/a.a/a /b/c/a./a/a.a/a
+/b/c/a./a/a.a/. /b/c/a./a/a.a
+/b/c/a./a/a.a// /b/c/a./a/a.a
+/b/c/a./a/a..aa /b/c/a./a/a..aa
+/b/c/a./a/a..a. /b/c/a./a/a..a.
+/b/c/a./a/a..a/ /b/c/a./a/a..a
+/b/c/a./a/a...a /b/c/a./a/a...a
+/b/c/a./a/a.... /b/c/a./a/a....
+/b/c/a./a/a.../ /b/c/a./a/a...
+/b/c/a./a/a../a /b/c/a./a/a../a
+/b/c/a./a/a../. /b/c/a./a/a..
+/b/c/a./a/a..// /b/c/a./a/a..
+/b/c/a./a/a./aa /b/c/a./a/a./aa
+/b/c/a./a/a./a. /b/c/a./a/a./a.
+/b/c/a./a/a./a/ /b/c/a./a/a./a
+/b/c/a./a/a./.a /b/c/a./a/a./.a
+/b/c/a./a/a./.. /b/c/a./a
+/b/c/a./a/a././ /b/c/a./a/a.
+/b/c/a./a/a.//a /b/c/a./a/a./a
+/b/c/a./a/a.//. /b/c/a./a/a.
+/b/c/a./a/a./// /b/c/a./a/a.
+/b/c/a./a/a/aaa /b/c/a./a/a/aaa
+/b/c/a./a/a/aa. /b/c/a./a/a/aa.
+/b/c/a./a/a/aa/ /b/c/a./a/a/aa
+/b/c/a./a/a/a.a /b/c/a./a/a/a.a
+/b/c/a./a/a/a.. /b/c/a./a/a/a..
+/b/c/a./a/a/a./ /b/c/a./a/a/a.
+/b/c/a./a/a/a/a /b/c/a./a/a/a/a
+/b/c/a./a/a/a/. /b/c/a./a/a/a
+/b/c/a./a/a/a// /b/c/a./a/a/a
+/b/c/a./a/a/.aa /b/c/a./a/a/.aa
+/b/c/a./a/a/.a. /b/c/a./a/a/.a.
+/b/c/a./a/a/.a/ /b/c/a./a/a/.a
+/b/c/a./a/a/..a /b/c/a./a/a/..a
+/b/c/a./a/a/... /b/c/a./a/a/...
+/b/c/a./a/a/../ /b/c/a./a
+/b/c/a./a/a/./a /b/c/a./a/a/a
+/b/c/a./a/a/./. /b/c/a./a/a
+/b/c/a./a/a/.// /b/c/a./a/a
+/b/c/a./a/a//aa /b/c/a./a/a/aa
+/b/c/a./a/a//a. /b/c/a./a/a/a.
+/b/c/a./a/a//a/ /b/c/a./a/a/a
+/b/c/a./a/a//.a /b/c/a./a/a/.a
+/b/c/a./a/a//.. /b/c/a./a
+/b/c/a./a/a//./ /b/c/a./a/a
+/b/c/a./a/a///a /b/c/a./a/a/a
+/b/c/a./a/a///. /b/c/a./a/a
+/b/c/a./a/a//// /b/c/a./a/a
+/b/c/a./a/.aaaa /b/c/a./a/.aaaa
+/b/c/a./a/.aaa. /b/c/a./a/.aaa.
+/b/c/a./a/.aaa/ /b/c/a./a/.aaa
+/b/c/a./a/.aa.a /b/c/a./a/.aa.a
+/b/c/a./a/.aa.. /b/c/a./a/.aa..
+/b/c/a./a/.aa./ /b/c/a./a/.aa.
+/b/c/a./a/.aa/a /b/c/a./a/.aa/a
+/b/c/a./a/.aa/. /b/c/a./a/.aa
+/b/c/a./a/.aa// /b/c/a./a/.aa
+/b/c/a./a/.a.aa /b/c/a./a/.a.aa
+/b/c/a./a/.a.a. /b/c/a./a/.a.a.
+/b/c/a./a/.a.a/ /b/c/a./a/.a.a
+/b/c/a./a/.a..a /b/c/a./a/.a..a
+/b/c/a./a/.a... /b/c/a./a/.a...
+/b/c/a./a/.a../ /b/c/a./a/.a..
+/b/c/a./a/.a./a /b/c/a./a/.a./a
+/b/c/a./a/.a./. /b/c/a./a/.a.
+/b/c/a./a/.a.// /b/c/a./a/.a.
+/b/c/a./a/.a/aa /b/c/a./a/.a/aa
+/b/c/a./a/.a/a. /b/c/a./a/.a/a.
+/b/c/a./a/.a/a/ /b/c/a./a/.a/a
+/b/c/a./a/.a/.a /b/c/a./a/.a/.a
+/b/c/a./a/.a/.. /b/c/a./a
+/b/c/a./a/.a/./ /b/c/a./a/.a
+/b/c/a./a/.a//a /b/c/a./a/.a/a
+/b/c/a./a/.a//. /b/c/a./a/.a
+/b/c/a./a/.a/// /b/c/a./a/.a
+/b/c/a./a/..aaa /b/c/a./a/..aaa
+/b/c/a./a/..aa. /b/c/a./a/..aa.
+/b/c/a./a/..aa/ /b/c/a./a/..aa
+/b/c/a./a/..a.a /b/c/a./a/..a.a
+/b/c/a./a/..a.. /b/c/a./a/..a..
+/b/c/a./a/..a./ /b/c/a./a/..a.
+/b/c/a./a/..a/a /b/c/a./a/..a/a
+/b/c/a./a/..a/. /b/c/a./a/..a
+/b/c/a./a/..a// /b/c/a./a/..a
+/b/c/a./a/...aa /b/c/a./a/...aa
+/b/c/a./a/...a. /b/c/a./a/...a.
+/b/c/a./a/...a/ /b/c/a./a/...a
+/b/c/a./a/....a /b/c/a./a/....a
+/b/c/a./a/..... /b/c/a./a/.....
+/b/c/a./a/..../ /b/c/a./a/....
+/b/c/a./a/.../a /b/c/a./a/.../a
+/b/c/a./a/.../. /b/c/a./a/...
+/b/c/a./a/...// /b/c/a./a/...
+/b/c/a./a/../aa /b/c/a./aa
+/b/c/a./a/../a. /b/c/a./a.
+/b/c/a./a/../a/ /b/c/a./a
+/b/c/a./a/../.a /b/c/a./.a
+/b/c/a./a/../.. /b/c
+/b/c/a./a/.././ /b/c/a.
+/b/c/a./a/..//a /b/c/a./a
+/b/c/a./a/..//. /b/c/a.
+/b/c/a./a/../// /b/c/a.
+/b/c/a./a/./aaa /b/c/a./a/aaa
+/b/c/a./a/./aa. /b/c/a./a/aa.
+/b/c/a./a/./aa/ /b/c/a./a/aa
+/b/c/a./a/./a.a /b/c/a./a/a.a
+/b/c/a./a/./a.. /b/c/a./a/a..
+/b/c/a./a/./a./ /b/c/a./a/a.
+/b/c/a./a/./a/a /b/c/a./a/a/a
+/b/c/a./a/./a/. /b/c/a./a/a
+/b/c/a./a/./a// /b/c/a./a/a
+/b/c/a./a/./.aa /b/c/a./a/.aa
+/b/c/a./a/./.a. /b/c/a./a/.a.
+/b/c/a./a/./.a/ /b/c/a./a/.a
+/b/c/a./a/./..a /b/c/a./a/..a
+/b/c/a./a/./... /b/c/a./a/...
+/b/c/a./a/./../ /b/c/a.
+/b/c/a./a/././a /b/c/a./a/a
+/b/c/a./a/././. /b/c/a./a
+/b/c/a./a/./.// /b/c/a./a
+/b/c/a./a/.//aa /b/c/a./a/aa
+/b/c/a./a/.//a. /b/c/a./a/a.
+/b/c/a./a/.//a/ /b/c/a./a/a
+/b/c/a./a/.//.a /b/c/a./a/.a
+/b/c/a./a/.//.. /b/c/a.
+/b/c/a./a/.//./ /b/c/a./a
+/b/c/a./a/.///a /b/c/a./a/a
+/b/c/a./a/.///. /b/c/a./a
+/b/c/a./a/.//// /b/c/a./a
+/b/c/a./a//aaaa /b/c/a./a/aaaa
+/b/c/a./a//aaa. /b/c/a./a/aaa.
+/b/c/a./a//aaa/ /b/c/a./a/aaa
+/b/c/a./a//aa.a /b/c/a./a/aa.a
+/b/c/a./a//aa.. /b/c/a./a/aa..
+/b/c/a./a//aa./ /b/c/a./a/aa.
+/b/c/a./a//aa/a /b/c/a./a/aa/a
+/b/c/a./a//aa/. /b/c/a./a/aa
+/b/c/a./a//aa// /b/c/a./a/aa
+/b/c/a./a//a.aa /b/c/a./a/a.aa
+/b/c/a./a//a.a. /b/c/a./a/a.a.
+/b/c/a./a//a.a/ /b/c/a./a/a.a
+/b/c/a./a//a..a /b/c/a./a/a..a
+/b/c/a./a//a... /b/c/a./a/a...
+/b/c/a./a//a../ /b/c/a./a/a..
+/b/c/a./a//a./a /b/c/a./a/a./a
+/b/c/a./a//a./. /b/c/a./a/a.
+/b/c/a./a//a.// /b/c/a./a/a.
+/b/c/a./a//a/aa /b/c/a./a/a/aa
+/b/c/a./a//a/a. /b/c/a./a/a/a.
+/b/c/a./a//a/a/ /b/c/a./a/a/a
+/b/c/a./a//a/.a /b/c/a./a/a/.a
+/b/c/a./a//a/.. /b/c/a./a
+/b/c/a./a//a/./ /b/c/a./a/a
+/b/c/a./a//a//a /b/c/a./a/a/a
+/b/c/a./a//a//. /b/c/a./a/a
+/b/c/a./a//a/// /b/c/a./a/a
+/b/c/a./a//.aaa /b/c/a./a/.aaa
+/b/c/a./a//.aa. /b/c/a./a/.aa.
+/b/c/a./a//.aa/ /b/c/a./a/.aa
+/b/c/a./a//.a.a /b/c/a./a/.a.a
+/b/c/a./a//.a.. /b/c/a./a/.a..
+/b/c/a./a//.a./ /b/c/a./a/.a.
+/b/c/a./a//.a/a /b/c/a./a/.a/a
+/b/c/a./a//.a/. /b/c/a./a/.a
+/b/c/a./a//.a// /b/c/a./a/.a
+/b/c/a./a//..aa /b/c/a./a/..aa
+/b/c/a./a//..a. /b/c/a./a/..a.
+/b/c/a./a//..a/ /b/c/a./a/..a
+/b/c/a./a//...a /b/c/a./a/...a
+/b/c/a./a//.... /b/c/a./a/....
+/b/c/a./a//.../ /b/c/a./a/...
+/b/c/a./a//../a /b/c/a./a
+/b/c/a./a//../. /b/c/a.
+/b/c/a./a//..// /b/c/a.
+/b/c/a./a//./aa /b/c/a./a/aa
+/b/c/a./a//./a. /b/c/a./a/a.
+/b/c/a./a//./a/ /b/c/a./a/a
+/b/c/a./a//./.a /b/c/a./a/.a
+/b/c/a./a//./.. /b/c/a.
+/b/c/a./a//././ /b/c/a./a
+/b/c/a./a//.//a /b/c/a./a/a
+/b/c/a./a//.//. /b/c/a./a
+/b/c/a./a//./// /b/c/a./a
+/b/c/a./a///aaa /b/c/a./a/aaa
+/b/c/a./a///aa. /b/c/a./a/aa.
+/b/c/a./a///aa/ /b/c/a./a/aa
+/b/c/a./a///a.a /b/c/a./a/a.a
+/b/c/a./a///a.. /b/c/a./a/a..
+/b/c/a./a///a./ /b/c/a./a/a.
+/b/c/a./a///a/a /b/c/a./a/a/a
+/b/c/a./a///a/. /b/c/a./a/a
+/b/c/a./a///a// /b/c/a./a/a
+/b/c/a./a///.aa /b/c/a./a/.aa
+/b/c/a./a///.a. /b/c/a./a/.a.
+/b/c/a./a///.a/ /b/c/a./a/.a
+/b/c/a./a///..a /b/c/a./a/..a
+/b/c/a./a///... /b/c/a./a/...
+/b/c/a./a///../ /b/c/a.
+/b/c/a./a///./a /b/c/a./a/a
+/b/c/a./a///./. /b/c/a./a
+/b/c/a./a///.// /b/c/a./a
+/b/c/a./a////aa /b/c/a./a/aa
+/b/c/a./a////a. /b/c/a./a/a.
+/b/c/a./a////a/ /b/c/a./a/a
+/b/c/a./a////.a /b/c/a./a/.a
+/b/c/a./a////.. /b/c/a.
+/b/c/a./a////./ /b/c/a./a
+/b/c/a./a/////a /b/c/a./a/a
+/b/c/a./a/////. /b/c/a./a
+/b/c/a./a////// /b/c/a./a
+/b/c/a./.aaaaaa /b/c/a./.aaaaaa
+/b/c/a./.aaaaa. /b/c/a./.aaaaa.
+/b/c/a./.aaaaa/ /b/c/a./.aaaaa
+/b/c/a./.aaaa.a /b/c/a./.aaaa.a
+/b/c/a./.aaaa.. /b/c/a./.aaaa..
+/b/c/a./.aaaa./ /b/c/a./.aaaa.
+/b/c/a./.aaaa/a /b/c/a./.aaaa/a
+/b/c/a./.aaaa/. /b/c/a./.aaaa
+/b/c/a./.aaaa// /b/c/a./.aaaa
+/b/c/a./.aaa.aa /b/c/a./.aaa.aa
+/b/c/a./.aaa.a. /b/c/a./.aaa.a.
+/b/c/a./.aaa.a/ /b/c/a./.aaa.a
+/b/c/a./.aaa..a /b/c/a./.aaa..a
+/b/c/a./.aaa... /b/c/a./.aaa...
+/b/c/a./.aaa../ /b/c/a./.aaa..
+/b/c/a./.aaa./a /b/c/a./.aaa./a
+/b/c/a./.aaa./. /b/c/a./.aaa.
+/b/c/a./.aaa.// /b/c/a./.aaa.
+/b/c/a./.aaa/aa /b/c/a./.aaa/aa
+/b/c/a./.aaa/a. /b/c/a./.aaa/a.
+/b/c/a./.aaa/a/ /b/c/a./.aaa/a
+/b/c/a./.aaa/.a /b/c/a./.aaa/.a
+/b/c/a./.aaa/.. /b/c/a.
+/b/c/a./.aaa/./ /b/c/a./.aaa
+/b/c/a./.aaa//a /b/c/a./.aaa/a
+/b/c/a./.aaa//. /b/c/a./.aaa
+/b/c/a./.aaa/// /b/c/a./.aaa
+/b/c/a./.aa.aaa /b/c/a./.aa.aaa
+/b/c/a./.aa.aa. /b/c/a./.aa.aa.
+/b/c/a./.aa.aa/ /b/c/a./.aa.aa
+/b/c/a./.aa.a.a /b/c/a./.aa.a.a
+/b/c/a./.aa.a.. /b/c/a./.aa.a..
+/b/c/a./.aa.a./ /b/c/a./.aa.a.
+/b/c/a./.aa.a/a /b/c/a./.aa.a/a
+/b/c/a./.aa.a/. /b/c/a./.aa.a
+/b/c/a./.aa.a// /b/c/a./.aa.a
+/b/c/a./.aa..aa /b/c/a./.aa..aa
+/b/c/a./.aa..a. /b/c/a./.aa..a.
+/b/c/a./.aa..a/ /b/c/a./.aa..a
+/b/c/a./.aa...a /b/c/a./.aa...a
+/b/c/a./.aa.... /b/c/a./.aa....
+/b/c/a./.aa.../ /b/c/a./.aa...
+/b/c/a./.aa../a /b/c/a./.aa../a
+/b/c/a./.aa../. /b/c/a./.aa..
+/b/c/a./.aa..// /b/c/a./.aa..
+/b/c/a./.aa./aa /b/c/a./.aa./aa
+/b/c/a./.aa./a. /b/c/a./.aa./a.
+/b/c/a./.aa./a/ /b/c/a./.aa./a
+/b/c/a./.aa./.a /b/c/a./.aa./.a
+/b/c/a./.aa./.. /b/c/a.
+/b/c/a./.aa././ /b/c/a./.aa.
+/b/c/a./.aa.//a /b/c/a./.aa./a
+/b/c/a./.aa.//. /b/c/a./.aa.
+/b/c/a./.aa./// /b/c/a./.aa.
+/b/c/a./.aa/aaa /b/c/a./.aa/aaa
+/b/c/a./.aa/aa. /b/c/a./.aa/aa.
+/b/c/a./.aa/aa/ /b/c/a./.aa/aa
+/b/c/a./.aa/a.a /b/c/a./.aa/a.a
+/b/c/a./.aa/a.. /b/c/a./.aa/a..
+/b/c/a./.aa/a./ /b/c/a./.aa/a.
+/b/c/a./.aa/a/a /b/c/a./.aa/a/a
+/b/c/a./.aa/a/. /b/c/a./.aa/a
+/b/c/a./.aa/a// /b/c/a./.aa/a
+/b/c/a./.aa/.aa /b/c/a./.aa/.aa
+/b/c/a./.aa/.a. /b/c/a./.aa/.a.
+/b/c/a./.aa/.a/ /b/c/a./.aa/.a
+/b/c/a./.aa/..a /b/c/a./.aa/..a
+/b/c/a./.aa/... /b/c/a./.aa/...
+/b/c/a./.aa/../ /b/c/a.
+/b/c/a./.aa/./a /b/c/a./.aa/a
+/b/c/a./.aa/./. /b/c/a./.aa
+/b/c/a./.aa/.// /b/c/a./.aa
+/b/c/a./.aa//aa /b/c/a./.aa/aa
+/b/c/a./.aa//a. /b/c/a./.aa/a.
+/b/c/a./.aa//a/ /b/c/a./.aa/a
+/b/c/a./.aa//.a /b/c/a./.aa/.a
+/b/c/a./.aa//.. /b/c/a.
+/b/c/a./.aa//./ /b/c/a./.aa
+/b/c/a./.aa///a /b/c/a./.aa/a
+/b/c/a./.aa///. /b/c/a./.aa
+/b/c/a./.aa//// /b/c/a./.aa
+/b/c/a./.a.aaaa /b/c/a./.a.aaaa
+/b/c/a./.a.aaa. /b/c/a./.a.aaa.
+/b/c/a./.a.aaa/ /b/c/a./.a.aaa
+/b/c/a./.a.aa.a /b/c/a./.a.aa.a
+/b/c/a./.a.aa.. /b/c/a./.a.aa..
+/b/c/a./.a.aa./ /b/c/a./.a.aa.
+/b/c/a./.a.aa/a /b/c/a./.a.aa/a
+/b/c/a./.a.aa/. /b/c/a./.a.aa
+/b/c/a./.a.aa// /b/c/a./.a.aa
+/b/c/a./.a.a.aa /b/c/a./.a.a.aa
+/b/c/a./.a.a.a. /b/c/a./.a.a.a.
+/b/c/a./.a.a.a/ /b/c/a./.a.a.a
+/b/c/a./.a.a..a /b/c/a./.a.a..a
+/b/c/a./.a.a... /b/c/a./.a.a...
+/b/c/a./.a.a../ /b/c/a./.a.a..
+/b/c/a./.a.a./a /b/c/a./.a.a./a
+/b/c/a./.a.a./. /b/c/a./.a.a.
+/b/c/a./.a.a.// /b/c/a./.a.a.
+/b/c/a./.a.a/aa /b/c/a./.a.a/aa
+/b/c/a./.a.a/a. /b/c/a./.a.a/a.
+/b/c/a./.a.a/a/ /b/c/a./.a.a/a
+/b/c/a./.a.a/.a /b/c/a./.a.a/.a
+/b/c/a./.a.a/.. /b/c/a.
+/b/c/a./.a.a/./ /b/c/a./.a.a
+/b/c/a./.a.a//a /b/c/a./.a.a/a
+/b/c/a./.a.a//. /b/c/a./.a.a
+/b/c/a./.a.a/// /b/c/a./.a.a
+/b/c/a./.a..aaa /b/c/a./.a..aaa
+/b/c/a./.a..aa. /b/c/a./.a..aa.
+/b/c/a./.a..aa/ /b/c/a./.a..aa
+/b/c/a./.a..a.a /b/c/a./.a..a.a
+/b/c/a./.a..a.. /b/c/a./.a..a..
+/b/c/a./.a..a./ /b/c/a./.a..a.
+/b/c/a./.a..a/a /b/c/a./.a..a/a
+/b/c/a./.a..a/. /b/c/a./.a..a
+/b/c/a./.a..a// /b/c/a./.a..a
+/b/c/a./.a...aa /b/c/a./.a...aa
+/b/c/a./.a...a. /b/c/a./.a...a.
+/b/c/a./.a...a/ /b/c/a./.a...a
+/b/c/a./.a....a /b/c/a./.a....a
+/b/c/a./.a..... /b/c/a./.a.....
+/b/c/a./.a..../ /b/c/a./.a....
+/b/c/a./.a.../a /b/c/a./.a.../a
+/b/c/a./.a.../. /b/c/a./.a...
+/b/c/a./.a...// /b/c/a./.a...
+/b/c/a./.a../aa /b/c/a./.a../aa
+/b/c/a./.a../a. /b/c/a./.a../a.
+/b/c/a./.a../a/ /b/c/a./.a../a
+/b/c/a./.a../.a /b/c/a./.a../.a
+/b/c/a./.a../.. /b/c/a.
+/b/c/a./.a.././ /b/c/a./.a..
+/b/c/a./.a..//a /b/c/a./.a../a
+/b/c/a./.a..//. /b/c/a./.a..
+/b/c/a./.a../// /b/c/a./.a..
+/b/c/a./.a./aaa /b/c/a./.a./aaa
+/b/c/a./.a./aa. /b/c/a./.a./aa.
+/b/c/a./.a./aa/ /b/c/a./.a./aa
+/b/c/a./.a./a.a /b/c/a./.a./a.a
+/b/c/a./.a./a.. /b/c/a./.a./a..
+/b/c/a./.a./a./ /b/c/a./.a./a.
+/b/c/a./.a./a/a /b/c/a./.a./a/a
+/b/c/a./.a./a/. /b/c/a./.a./a
+/b/c/a./.a./a// /b/c/a./.a./a
+/b/c/a./.a./.aa /b/c/a./.a./.aa
+/b/c/a./.a./.a. /b/c/a./.a./.a.
+/b/c/a./.a./.a/ /b/c/a./.a./.a
+/b/c/a./.a./..a /b/c/a./.a./..a
+/b/c/a./.a./... /b/c/a./.a./...
+/b/c/a./.a./../ /b/c/a.
+/b/c/a./.a././a /b/c/a./.a./a
+/b/c/a./.a././. /b/c/a./.a.
+/b/c/a./.a./.// /b/c/a./.a.
+/b/c/a./.a.//aa /b/c/a./.a./aa
+/b/c/a./.a.//a. /b/c/a./.a./a.
+/b/c/a./.a.//a/ /b/c/a./.a./a
+/b/c/a./.a.//.a /b/c/a./.a./.a
+/b/c/a./.a.//.. /b/c/a.
+/b/c/a./.a.//./ /b/c/a./.a.
+/b/c/a./.a.///a /b/c/a./.a./a
+/b/c/a./.a.///. /b/c/a./.a.
+/b/c/a./.a.//// /b/c/a./.a.
+/b/c/a./.a/aaaa /b/c/a./.a/aaaa
+/b/c/a./.a/aaa. /b/c/a./.a/aaa.
+/b/c/a./.a/aaa/ /b/c/a./.a/aaa
+/b/c/a./.a/aa.a /b/c/a./.a/aa.a
+/b/c/a./.a/aa.. /b/c/a./.a/aa..
+/b/c/a./.a/aa./ /b/c/a./.a/aa.
+/b/c/a./.a/aa/a /b/c/a./.a/aa/a
+/b/c/a./.a/aa/. /b/c/a./.a/aa
+/b/c/a./.a/aa// /b/c/a./.a/aa
+/b/c/a./.a/a.aa /b/c/a./.a/a.aa
+/b/c/a./.a/a.a. /b/c/a./.a/a.a.
+/b/c/a./.a/a.a/ /b/c/a./.a/a.a
+/b/c/a./.a/a..a /b/c/a./.a/a..a
+/b/c/a./.a/a... /b/c/a./.a/a...
+/b/c/a./.a/a../ /b/c/a./.a/a..
+/b/c/a./.a/a./a /b/c/a./.a/a./a
+/b/c/a./.a/a./. /b/c/a./.a/a.
+/b/c/a./.a/a.// /b/c/a./.a/a.
+/b/c/a./.a/a/aa /b/c/a./.a/a/aa
+/b/c/a./.a/a/a. /b/c/a./.a/a/a.
+/b/c/a./.a/a/a/ /b/c/a./.a/a/a
+/b/c/a./.a/a/.a /b/c/a./.a/a/.a
+/b/c/a./.a/a/.. /b/c/a./.a
+/b/c/a./.a/a/./ /b/c/a./.a/a
+/b/c/a./.a/a//a /b/c/a./.a/a/a
+/b/c/a./.a/a//. /b/c/a./.a/a
+/b/c/a./.a/a/// /b/c/a./.a/a
+/b/c/a./.a/.aaa /b/c/a./.a/.aaa
+/b/c/a./.a/.aa. /b/c/a./.a/.aa.
+/b/c/a./.a/.aa/ /b/c/a./.a/.aa
+/b/c/a./.a/.a.a /b/c/a./.a/.a.a
+/b/c/a./.a/.a.. /b/c/a./.a/.a..
+/b/c/a./.a/.a./ /b/c/a./.a/.a.
+/b/c/a./.a/.a/a /b/c/a./.a/.a/a
+/b/c/a./.a/.a/. /b/c/a./.a/.a
+/b/c/a./.a/.a// /b/c/a./.a/.a
+/b/c/a./.a/..aa /b/c/a./.a/..aa
+/b/c/a./.a/..a. /b/c/a./.a/..a.
+/b/c/a./.a/..a/ /b/c/a./.a/..a
+/b/c/a./.a/...a /b/c/a./.a/...a
+/b/c/a./.a/.... /b/c/a./.a/....
+/b/c/a./.a/.../ /b/c/a./.a/...
+/b/c/a./.a/../a /b/c/a./a
+/b/c/a./.a/../. /b/c/a.
+/b/c/a./.a/..// /b/c/a.
+/b/c/a./.a/./aa /b/c/a./.a/aa
+/b/c/a./.a/./a. /b/c/a./.a/a.
+/b/c/a./.a/./a/ /b/c/a./.a/a
+/b/c/a./.a/./.a /b/c/a./.a/.a
+/b/c/a./.a/./.. /b/c/a.
+/b/c/a./.a/././ /b/c/a./.a
+/b/c/a./.a/.//a /b/c/a./.a/a
+/b/c/a./.a/.//. /b/c/a./.a
+/b/c/a./.a/./// /b/c/a./.a
+/b/c/a./.a//aaa /b/c/a./.a/aaa
+/b/c/a./.a//aa. /b/c/a./.a/aa.
+/b/c/a./.a//aa/ /b/c/a./.a/aa
+/b/c/a./.a//a.a /b/c/a./.a/a.a
+/b/c/a./.a//a.. /b/c/a./.a/a..
+/b/c/a./.a//a./ /b/c/a./.a/a.
+/b/c/a./.a//a/a /b/c/a./.a/a/a
+/b/c/a./.a//a/. /b/c/a./.a/a
+/b/c/a./.a//a// /b/c/a./.a/a
+/b/c/a./.a//.aa /b/c/a./.a/.aa
+/b/c/a./.a//.a. /b/c/a./.a/.a.
+/b/c/a./.a//.a/ /b/c/a./.a/.a
+/b/c/a./.a//..a /b/c/a./.a/..a
+/b/c/a./.a//... /b/c/a./.a/...
+/b/c/a./.a//../ /b/c/a.
+/b/c/a./.a//./a /b/c/a./.a/a
+/b/c/a./.a//./. /b/c/a./.a
+/b/c/a./.a//.// /b/c/a./.a
+/b/c/a./.a///aa /b/c/a./.a/aa
+/b/c/a./.a///a. /b/c/a./.a/a.
+/b/c/a./.a///a/ /b/c/a./.a/a
+/b/c/a./.a///.a /b/c/a./.a/.a
+/b/c/a./.a///.. /b/c/a.
+/b/c/a./.a///./ /b/c/a./.a
+/b/c/a./.a////a /b/c/a./.a/a
+/b/c/a./.a////. /b/c/a./.a
+/b/c/a./.a///// /b/c/a./.a
+/b/c/a./..aaaaa /b/c/a./..aaaaa
+/b/c/a./..aaaa. /b/c/a./..aaaa.
+/b/c/a./..aaaa/ /b/c/a./..aaaa
+/b/c/a./..aaa.a /b/c/a./..aaa.a
+/b/c/a./..aaa.. /b/c/a./..aaa..
+/b/c/a./..aaa./ /b/c/a./..aaa.
+/b/c/a./..aaa/a /b/c/a./..aaa/a
+/b/c/a./..aaa/. /b/c/a./..aaa
+/b/c/a./..aaa// /b/c/a./..aaa
+/b/c/a./..aa.aa /b/c/a./..aa.aa
+/b/c/a./..aa.a. /b/c/a./..aa.a.
+/b/c/a./..aa.a/ /b/c/a./..aa.a
+/b/c/a./..aa..a /b/c/a./..aa..a
+/b/c/a./..aa... /b/c/a./..aa...
+/b/c/a./..aa../ /b/c/a./..aa..
+/b/c/a./..aa./a /b/c/a./..aa./a
+/b/c/a./..aa./. /b/c/a./..aa.
+/b/c/a./..aa.// /b/c/a./..aa.
+/b/c/a./..aa/aa /b/c/a./..aa/aa
+/b/c/a./..aa/a. /b/c/a./..aa/a.
+/b/c/a./..aa/a/ /b/c/a./..aa/a
+/b/c/a./..aa/.a /b/c/a./..aa/.a
+/b/c/a./..aa/.. /b/c/a.
+/b/c/a./..aa/./ /b/c/a./..aa
+/b/c/a./..aa//a /b/c/a./..aa/a
+/b/c/a./..aa//. /b/c/a./..aa
+/b/c/a./..aa/// /b/c/a./..aa
+/b/c/a./..a.aaa /b/c/a./..a.aaa
+/b/c/a./..a.aa. /b/c/a./..a.aa.
+/b/c/a./..a.aa/ /b/c/a./..a.aa
+/b/c/a./..a.a.a /b/c/a./..a.a.a
+/b/c/a./..a.a.. /b/c/a./..a.a..
+/b/c/a./..a.a./ /b/c/a./..a.a.
+/b/c/a./..a.a/a /b/c/a./..a.a/a
+/b/c/a./..a.a/. /b/c/a./..a.a
+/b/c/a./..a.a// /b/c/a./..a.a
+/b/c/a./..a..aa /b/c/a./..a..aa
+/b/c/a./..a..a. /b/c/a./..a..a.
+/b/c/a./..a..a/ /b/c/a./..a..a
+/b/c/a./..a...a /b/c/a./..a...a
+/b/c/a./..a.... /b/c/a./..a....
+/b/c/a./..a.../ /b/c/a./..a...
+/b/c/a./..a../a /b/c/a./..a../a
+/b/c/a./..a../. /b/c/a./..a..
+/b/c/a./..a..// /b/c/a./..a..
+/b/c/a./..a./aa /b/c/a./..a./aa
+/b/c/a./..a./a. /b/c/a./..a./a.
+/b/c/a./..a./a/ /b/c/a./..a./a
+/b/c/a./..a./.a /b/c/a./..a./.a
+/b/c/a./..a./.. /b/c/a.
+/b/c/a./..a././ /b/c/a./..a.
+/b/c/a./..a.//a /b/c/a./..a./a
+/b/c/a./..a.//. /b/c/a./..a.
+/b/c/a./..a./// /b/c/a./..a.
+/b/c/a./..a/aaa /b/c/a./..a/aaa
+/b/c/a./..a/aa. /b/c/a./..a/aa.
+/b/c/a./..a/aa/ /b/c/a./..a/aa
+/b/c/a./..a/a.a /b/c/a./..a/a.a
+/b/c/a./..a/a.. /b/c/a./..a/a..
+/b/c/a./..a/a./ /b/c/a./..a/a.
+/b/c/a./..a/a/a /b/c/a./..a/a/a
+/b/c/a./..a/a/. /b/c/a./..a/a
+/b/c/a./..a/a// /b/c/a./..a/a
+/b/c/a./..a/.aa /b/c/a./..a/.aa
+/b/c/a./..a/.a. /b/c/a./..a/.a.
+/b/c/a./..a/.a/ /b/c/a./..a/.a
+/b/c/a./..a/..a /b/c/a./..a/..a
+/b/c/a./..a/... /b/c/a./..a/...
+/b/c/a./..a/../ /b/c/a.
+/b/c/a./..a/./a /b/c/a./..a/a
+/b/c/a./..a/./. /b/c/a./..a
+/b/c/a./..a/.// /b/c/a./..a
+/b/c/a./..a//aa /b/c/a./..a/aa
+/b/c/a./..a//a. /b/c/a./..a/a.
+/b/c/a./..a//a/ /b/c/a./..a/a
+/b/c/a./..a//.a /b/c/a./..a/.a
+/b/c/a./..a//.. /b/c/a.
+/b/c/a./..a//./ /b/c/a./..a
+/b/c/a./..a///a /b/c/a./..a/a
+/b/c/a./..a///. /b/c/a./..a
+/b/c/a./..a//// /b/c/a./..a
+/b/c/a./...aaaa /b/c/a./...aaaa
+/b/c/a./...aaa. /b/c/a./...aaa.
+/b/c/a./...aaa/ /b/c/a./...aaa
+/b/c/a./...aa.a /b/c/a./...aa.a
+/b/c/a./...aa.. /b/c/a./...aa..
+/b/c/a./...aa./ /b/c/a./...aa.
+/b/c/a./...aa/a /b/c/a./...aa/a
+/b/c/a./...aa/. /b/c/a./...aa
+/b/c/a./...aa// /b/c/a./...aa
+/b/c/a./...a.aa /b/c/a./...a.aa
+/b/c/a./...a.a. /b/c/a./...a.a.
+/b/c/a./...a.a/ /b/c/a./...a.a
+/b/c/a./...a..a /b/c/a./...a..a
+/b/c/a./...a... /b/c/a./...a...
+/b/c/a./...a../ /b/c/a./...a..
+/b/c/a./...a./a /b/c/a./...a./a
+/b/c/a./...a./. /b/c/a./...a.
+/b/c/a./...a.// /b/c/a./...a.
+/b/c/a./...a/aa /b/c/a./...a/aa
+/b/c/a./...a/a. /b/c/a./...a/a.
+/b/c/a./...a/a/ /b/c/a./...a/a
+/b/c/a./...a/.a /b/c/a./...a/.a
+/b/c/a./...a/.. /b/c/a.
+/b/c/a./...a/./ /b/c/a./...a
+/b/c/a./...a//a /b/c/a./...a/a
+/b/c/a./...a//. /b/c/a./...a
+/b/c/a./...a/// /b/c/a./...a
+/b/c/a./....aaa /b/c/a./....aaa
+/b/c/a./....aa. /b/c/a./....aa.
+/b/c/a./....aa/ /b/c/a./....aa
+/b/c/a./....a.a /b/c/a./....a.a
+/b/c/a./....a.. /b/c/a./....a..
+/b/c/a./....a./ /b/c/a./....a.
+/b/c/a./....a/a /b/c/a./....a/a
+/b/c/a./....a/. /b/c/a./....a
+/b/c/a./....a// /b/c/a./....a
+/b/c/a./.....aa /b/c/a./.....aa
+/b/c/a./.....a. /b/c/a./.....a.
+/b/c/a./.....a/ /b/c/a./.....a
+/b/c/a./......a /b/c/a./......a
+/b/c/a./....... /b/c/a./.......
+/b/c/a./....../ /b/c/a./......
+/b/c/a./...../a /b/c/a./...../a
+/b/c/a./...../. /b/c/a./.....
+/b/c/a./.....// /b/c/a./.....
+/b/c/a./..../aa /b/c/a./..../aa
+/b/c/a./..../a. /b/c/a./..../a.
+/b/c/a./..../a/ /b/c/a./..../a
+/b/c/a./..../.a /b/c/a./..../.a
+/b/c/a./..../.. /b/c/a.
+/b/c/a./...././ /b/c/a./....
+/b/c/a./....//a /b/c/a./..../a
+/b/c/a./....//. /b/c/a./....
+/b/c/a./..../// /b/c/a./....
+/b/c/a./.../aaa /b/c/a./.../aaa
+/b/c/a./.../aa. /b/c/a./.../aa.
+/b/c/a./.../aa/ /b/c/a./.../aa
+/b/c/a./.../a.a /b/c/a./.../a.a
+/b/c/a./.../a.. /b/c/a./.../a..
+/b/c/a./.../a./ /b/c/a./.../a.
+/b/c/a./.../a/a /b/c/a./.../a/a
+/b/c/a./.../a/. /b/c/a./.../a
+/b/c/a./.../a// /b/c/a./.../a
+/b/c/a./.../.aa /b/c/a./.../.aa
+/b/c/a./.../.a. /b/c/a./.../.a.
+/b/c/a./.../.a/ /b/c/a./.../.a
+/b/c/a./.../..a /b/c/a./.../..a
+/b/c/a./.../... /b/c/a./.../...
+/b/c/a./.../../ /b/c/a.
+/b/c/a./..././a /b/c/a./.../a
+/b/c/a./..././. /b/c/a./...
+/b/c/a./.../.// /b/c/a./...
+/b/c/a./...//aa /b/c/a./.../aa
+/b/c/a./...//a. /b/c/a./.../a.
+/b/c/a./...//a/ /b/c/a./.../a
+/b/c/a./...//.a /b/c/a./.../.a
+/b/c/a./...//.. /b/c/a.
+/b/c/a./...//./ /b/c/a./...
+/b/c/a./...///a /b/c/a./.../a
+/b/c/a./...///. /b/c/a./...
+/b/c/a./...//// /b/c/a./...
+/b/c/a./../aaaa /b/c/aaaa
+/b/c/a./../aaa. /b/c/aaa.
+/b/c/a./../aaa/ /b/c/aaa
+/b/c/a./../aa.a /b/c/aa.a
+/b/c/a./../aa.. /b/c/aa..
+/b/c/a./../aa./ /b/c/aa.
+/b/c/a./../aa/a /b/c/aa/a
+/b/c/a./../aa/. /b/c/aa
+/b/c/a./../aa// /b/c/aa
+/b/c/a./../a.aa /b/c/a.aa
+/b/c/a./../a.a. /b/c/a.a.
+/b/c/a./../a.a/ /b/c/a.a
+/b/c/a./../a..a /b/c/a..a
+/b/c/a./../a... /b/c/a...
+/b/c/a./../a../ /b/c/a..
+/b/c/a./../a./a /b/c/a./a
+/b/c/a./../a./. /b/c/a.
+/b/c/a./../a.// /b/c/a.
+/b/c/a./../a/aa /b/c/a/aa
+/b/c/a./../a/a. /b/c/a/a.
+/b/c/a./../a/a/ /b/c/a/a
+/b/c/a./../a/.a /b/c/a/.a
+/b/c/a./../a/.. /b/c
+/b/c/a./../a/./ /b/c/a
+/b/c/a./../a//a /b/c/a/a
+/b/c/a./../a//. /b/c/a
+/b/c/a./../a/// /b/c/a
+/b/c/a./../.aaa /b/c/.aaa
+/b/c/a./../.aa. /b/c/.aa.
+/b/c/a./../.aa/ /b/c/.aa
+/b/c/a./../.a.a /b/c/.a.a
+/b/c/a./../.a.. /b/c/.a..
+/b/c/a./../.a./ /b/c/.a.
+/b/c/a./../.a/a /b/c/.a/a
+/b/c/a./../.a/. /b/c/.a
+/b/c/a./../.a// /b/c/.a
+/b/c/a./../..aa /b/c/..aa
+/b/c/a./../..a. /b/c/..a.
+/b/c/a./../..a/ /b/c/..a
+/b/c/a./../...a /b/c/...a
+/b/c/a./../.... /b/c/....
+/b/c/a./../.../ /b/c/...
+/b/c/a./../../a /b/a
+/b/c/a./../../. /b
+/b/c/a./../..// /b
+/b/c/a./.././aa /b/c/aa
+/b/c/a./.././a. /b/c/a.
+/b/c/a./.././a/ /b/c/a
+/b/c/a./.././.a /b/c/.a
+/b/c/a./.././.. /b
+/b/c/a./../././ /b/c
+/b/c/a./.././/a /b/c/a
+/b/c/a./.././/. /b/c
+/b/c/a./.././// /b/c
+/b/c/a./..//aaa /b/c/aaa
+/b/c/a./..//aa. /b/c/aa.
+/b/c/a./..//aa/ /b/c/aa
+/b/c/a./..//a.a /b/c/a.a
+/b/c/a./..//a.. /b/c/a..
+/b/c/a./..//a./ /b/c/a.
+/b/c/a./..//a/a /b/c/a/a
+/b/c/a./..//a/. /b/c/a
+/b/c/a./..//a// /b/c/a
+/b/c/a./..//.aa /b/c/.aa
+/b/c/a./..//.a. /b/c/.a.
+/b/c/a./..//.a/ /b/c/.a
+/b/c/a./..//..a /b/c/..a
+/b/c/a./..//... /b/c/...
+/b/c/a./..//../ /b
+/b/c/a./..//./a /b/c/a
+/b/c/a./..//./. /b/c
+/b/c/a./..//.// /b/c
+/b/c/a./..///aa /b/c/aa
+/b/c/a./..///a. /b/c/a.
+/b/c/a./..///a/ /b/c/a
+/b/c/a./..///.a /b/c/.a
+/b/c/a./..///.. /b
+/b/c/a./..///./ /b/c
+/b/c/a./..////a /b/c/a
+/b/c/a./..////. /b/c
+/b/c/a./..///// /b/c
+/b/c/a././aaaaa /b/c/a./aaaaa
+/b/c/a././aaaa. /b/c/a./aaaa.
+/b/c/a././aaaa/ /b/c/a./aaaa
+/b/c/a././aaa.a /b/c/a./aaa.a
+/b/c/a././aaa.. /b/c/a./aaa..
+/b/c/a././aaa./ /b/c/a./aaa.
+/b/c/a././aaa/a /b/c/a./aaa/a
+/b/c/a././aaa/. /b/c/a./aaa
+/b/c/a././aaa// /b/c/a./aaa
+/b/c/a././aa.aa /b/c/a./aa.aa
+/b/c/a././aa.a. /b/c/a./aa.a.
+/b/c/a././aa.a/ /b/c/a./aa.a
+/b/c/a././aa..a /b/c/a./aa..a
+/b/c/a././aa... /b/c/a./aa...
+/b/c/a././aa../ /b/c/a./aa..
+/b/c/a././aa./a /b/c/a./aa./a
+/b/c/a././aa./. /b/c/a./aa.
+/b/c/a././aa.// /b/c/a./aa.
+/b/c/a././aa/aa /b/c/a./aa/aa
+/b/c/a././aa/a. /b/c/a./aa/a.
+/b/c/a././aa/a/ /b/c/a./aa/a
+/b/c/a././aa/.a /b/c/a./aa/.a
+/b/c/a././aa/.. /b/c/a.
+/b/c/a././aa/./ /b/c/a./aa
+/b/c/a././aa//a /b/c/a./aa/a
+/b/c/a././aa//. /b/c/a./aa
+/b/c/a././aa/// /b/c/a./aa
+/b/c/a././a.aaa /b/c/a./a.aaa
+/b/c/a././a.aa. /b/c/a./a.aa.
+/b/c/a././a.aa/ /b/c/a./a.aa
+/b/c/a././a.a.a /b/c/a./a.a.a
+/b/c/a././a.a.. /b/c/a./a.a..
+/b/c/a././a.a./ /b/c/a./a.a.
+/b/c/a././a.a/a /b/c/a./a.a/a
+/b/c/a././a.a/. /b/c/a./a.a
+/b/c/a././a.a// /b/c/a./a.a
+/b/c/a././a..aa /b/c/a./a..aa
+/b/c/a././a..a. /b/c/a./a..a.
+/b/c/a././a..a/ /b/c/a./a..a
+/b/c/a././a...a /b/c/a./a...a
+/b/c/a././a.... /b/c/a./a....
+/b/c/a././a.../ /b/c/a./a...
+/b/c/a././a../a /b/c/a./a../a
+/b/c/a././a../. /b/c/a./a..
+/b/c/a././a..// /b/c/a./a..
+/b/c/a././a./aa /b/c/a./a./aa
+/b/c/a././a./a. /b/c/a./a./a.
+/b/c/a././a./a/ /b/c/a./a./a
+/b/c/a././a./.a /b/c/a./a./.a
+/b/c/a././a./.. /b/c/a.
+/b/c/a././a././ /b/c/a./a.
+/b/c/a././a.//a /b/c/a./a./a
+/b/c/a././a.//. /b/c/a./a.
+/b/c/a././a./// /b/c/a./a.
+/b/c/a././a/aaa /b/c/a./a/aaa
+/b/c/a././a/aa. /b/c/a./a/aa.
+/b/c/a././a/aa/ /b/c/a./a/aa
+/b/c/a././a/a.a /b/c/a./a/a.a
+/b/c/a././a/a.. /b/c/a./a/a..
+/b/c/a././a/a./ /b/c/a./a/a.
+/b/c/a././a/a/a /b/c/a./a/a/a
+/b/c/a././a/a/. /b/c/a./a/a
+/b/c/a././a/a// /b/c/a./a/a
+/b/c/a././a/.aa /b/c/a./a/.aa
+/b/c/a././a/.a. /b/c/a./a/.a.
+/b/c/a././a/.a/ /b/c/a./a/.a
+/b/c/a././a/..a /b/c/a./a/..a
+/b/c/a././a/... /b/c/a./a/...
+/b/c/a././a/../ /b/c/a.
+/b/c/a././a/./a /b/c/a./a/a
+/b/c/a././a/./. /b/c/a./a
+/b/c/a././a/.// /b/c/a./a
+/b/c/a././a//aa /b/c/a./a/aa
+/b/c/a././a//a. /b/c/a./a/a.
+/b/c/a././a//a/ /b/c/a./a/a
+/b/c/a././a//.a /b/c/a./a/.a
+/b/c/a././a//.. /b/c/a.
+/b/c/a././a//./ /b/c/a./a
+/b/c/a././a///a /b/c/a./a/a
+/b/c/a././a///. /b/c/a./a
+/b/c/a././a//// /b/c/a./a
+/b/c/a././.aaaa /b/c/a./.aaaa
+/b/c/a././.aaa. /b/c/a./.aaa.
+/b/c/a././.aaa/ /b/c/a./.aaa
+/b/c/a././.aa.a /b/c/a./.aa.a
+/b/c/a././.aa.. /b/c/a./.aa..
+/b/c/a././.aa./ /b/c/a./.aa.
+/b/c/a././.aa/a /b/c/a./.aa/a
+/b/c/a././.aa/. /b/c/a./.aa
+/b/c/a././.aa// /b/c/a./.aa
+/b/c/a././.a.aa /b/c/a./.a.aa
+/b/c/a././.a.a. /b/c/a./.a.a.
+/b/c/a././.a.a/ /b/c/a./.a.a
+/b/c/a././.a..a /b/c/a./.a..a
+/b/c/a././.a... /b/c/a./.a...
+/b/c/a././.a../ /b/c/a./.a..
+/b/c/a././.a./a /b/c/a./.a./a
+/b/c/a././.a./. /b/c/a./.a.
+/b/c/a././.a.// /b/c/a./.a.
+/b/c/a././.a/aa /b/c/a./.a/aa
+/b/c/a././.a/a. /b/c/a./.a/a.
+/b/c/a././.a/a/ /b/c/a./.a/a
+/b/c/a././.a/.a /b/c/a./.a/.a
+/b/c/a././.a/.. /b/c/a.
+/b/c/a././.a/./ /b/c/a./.a
+/b/c/a././.a//a /b/c/a./.a/a
+/b/c/a././.a//. /b/c/a./.a
+/b/c/a././.a/// /b/c/a./.a
+/b/c/a././..aaa /b/c/a./..aaa
+/b/c/a././..aa. /b/c/a./..aa.
+/b/c/a././..aa/ /b/c/a./..aa
+/b/c/a././..a.a /b/c/a./..a.a
+/b/c/a././..a.. /b/c/a./..a..
+/b/c/a././..a./ /b/c/a./..a.
+/b/c/a././..a/a /b/c/a./..a/a
+/b/c/a././..a/. /b/c/a./..a
+/b/c/a././..a// /b/c/a./..a
+/b/c/a././...aa /b/c/a./...aa
+/b/c/a././...a. /b/c/a./...a.
+/b/c/a././...a/ /b/c/a./...a
+/b/c/a././....a /b/c/a./....a
+/b/c/a././..... /b/c/a./.....
+/b/c/a././..../ /b/c/a./....
+/b/c/a././.../a /b/c/a./.../a
+/b/c/a././.../. /b/c/a./...
+/b/c/a././...// /b/c/a./...
+/b/c/a././../aa /b/c/aa
+/b/c/a././../a. /b/c/a.
+/b/c/a././../a/ /b/c/a
+/b/c/a././../.a /b/c/.a
+/b/c/a././../.. /b
+/b/c/a././.././ /b/c
+/b/c/a././..//a /b/c/a
+/b/c/a././..//. /b/c
+/b/c/a././../// /b/c
+/b/c/a./././aaa /b/c/a./aaa
+/b/c/a./././aa. /b/c/a./aa.
+/b/c/a./././aa/ /b/c/a./aa
+/b/c/a./././a.a /b/c/a./a.a
+/b/c/a./././a.. /b/c/a./a..
+/b/c/a./././a./ /b/c/a./a.
+/b/c/a./././a/a /b/c/a./a/a
+/b/c/a./././a/. /b/c/a./a
+/b/c/a./././a// /b/c/a./a
+/b/c/a./././.aa /b/c/a./.aa
+/b/c/a./././.a. /b/c/a./.a.
+/b/c/a./././.a/ /b/c/a./.a
+/b/c/a./././..a /b/c/a./..a
+/b/c/a./././... /b/c/a./...
+/b/c/a./././../ /b/c
+/b/c/a././././a /b/c/a./a
+/b/c/a././././. /b/c/a.
+/b/c/a./././.// /b/c/a.
+/b/c/a./././/aa /b/c/a./aa
+/b/c/a./././/a. /b/c/a./a.
+/b/c/a./././/a/ /b/c/a./a
+/b/c/a./././/.a /b/c/a./.a
+/b/c/a./././/.. /b/c
+/b/c/a./././/./ /b/c/a.
+/b/c/a./././//a /b/c/a./a
+/b/c/a./././//. /b/c/a.
+/b/c/a./././/// /b/c/a.
+/b/c/a././/aaaa /b/c/a./aaaa
+/b/c/a././/aaa. /b/c/a./aaa.
+/b/c/a././/aaa/ /b/c/a./aaa
+/b/c/a././/aa.a /b/c/a./aa.a
+/b/c/a././/aa.. /b/c/a./aa..
+/b/c/a././/aa./ /b/c/a./aa.
+/b/c/a././/aa/a /b/c/a./aa/a
+/b/c/a././/aa/. /b/c/a./aa
+/b/c/a././/aa// /b/c/a./aa
+/b/c/a././/a.aa /b/c/a./a.aa
+/b/c/a././/a.a. /b/c/a./a.a.
+/b/c/a././/a.a/ /b/c/a./a.a
+/b/c/a././/a..a /b/c/a./a..a
+/b/c/a././/a... /b/c/a./a...
+/b/c/a././/a../ /b/c/a./a..
+/b/c/a././/a./a /b/c/a./a./a
+/b/c/a././/a./. /b/c/a./a.
+/b/c/a././/a.// /b/c/a./a.
+/b/c/a././/a/aa /b/c/a./a/aa
+/b/c/a././/a/a. /b/c/a./a/a.
+/b/c/a././/a/a/ /b/c/a./a/a
+/b/c/a././/a/.a /b/c/a./a/.a
+/b/c/a././/a/.. /b/c/a.
+/b/c/a././/a/./ /b/c/a./a
+/b/c/a././/a//a /b/c/a./a/a
+/b/c/a././/a//. /b/c/a./a
+/b/c/a././/a/// /b/c/a./a
+/b/c/a././/.aaa /b/c/a./.aaa
+/b/c/a././/.aa. /b/c/a./.aa.
+/b/c/a././/.aa/ /b/c/a./.aa
+/b/c/a././/.a.a /b/c/a./.a.a
+/b/c/a././/.a.. /b/c/a./.a..
+/b/c/a././/.a./ /b/c/a./.a.
+/b/c/a././/.a/a /b/c/a./.a/a
+/b/c/a././/.a/. /b/c/a./.a
+/b/c/a././/.a// /b/c/a./.a
+/b/c/a././/..aa /b/c/a./..aa
+/b/c/a././/..a. /b/c/a./..a.
+/b/c/a././/..a/ /b/c/a./..a
+/b/c/a././/...a /b/c/a./...a
+/b/c/a././/.... /b/c/a./....
+/b/c/a././/.../ /b/c/a./...
+/b/c/a././/../a /b/c/a
+/b/c/a././/../. /b/c
+/b/c/a././/..// /b/c
+/b/c/a././/./aa /b/c/a./aa
+/b/c/a././/./a. /b/c/a./a.
+/b/c/a././/./a/ /b/c/a./a
+/b/c/a././/./.a /b/c/a./.a
+/b/c/a././/./.. /b/c
+/b/c/a././/././ /b/c/a.
+/b/c/a././/.//a /b/c/a./a
+/b/c/a././/.//. /b/c/a.
+/b/c/a././/./// /b/c/a.
+/b/c/a././//aaa /b/c/a./aaa
+/b/c/a././//aa. /b/c/a./aa.
+/b/c/a././//aa/ /b/c/a./aa
+/b/c/a././//a.a /b/c/a./a.a
+/b/c/a././//a.. /b/c/a./a..
+/b/c/a././//a./ /b/c/a./a.
+/b/c/a././//a/a /b/c/a./a/a
+/b/c/a././//a/. /b/c/a./a
+/b/c/a././//a// /b/c/a./a
+/b/c/a././//.aa /b/c/a./.aa
+/b/c/a././//.a. /b/c/a./.a.
+/b/c/a././//.a/ /b/c/a./.a
+/b/c/a././//..a /b/c/a./..a
+/b/c/a././//... /b/c/a./...
+/b/c/a././//../ /b/c
+/b/c/a././//./a /b/c/a./a
+/b/c/a././//./. /b/c/a.
+/b/c/a././//.// /b/c/a.
+/b/c/a././///aa /b/c/a./aa
+/b/c/a././///a. /b/c/a./a.
+/b/c/a././///a/ /b/c/a./a
+/b/c/a././///.a /b/c/a./.a
+/b/c/a././///.. /b/c
+/b/c/a././///./ /b/c/a.
+/b/c/a././////a /b/c/a./a
+/b/c/a././////. /b/c/a.
+/b/c/a././///// /b/c/a.
+/b/c/a.//aaaaaa /b/c/a./aaaaaa
+/b/c/a.//aaaaa. /b/c/a./aaaaa.
+/b/c/a.//aaaaa/ /b/c/a./aaaaa
+/b/c/a.//aaaa.a /b/c/a./aaaa.a
+/b/c/a.//aaaa.. /b/c/a./aaaa..
+/b/c/a.//aaaa./ /b/c/a./aaaa.
+/b/c/a.//aaaa/a /b/c/a./aaaa/a
+/b/c/a.//aaaa/. /b/c/a./aaaa
+/b/c/a.//aaaa// /b/c/a./aaaa
+/b/c/a.//aaa.aa /b/c/a./aaa.aa
+/b/c/a.//aaa.a. /b/c/a./aaa.a.
+/b/c/a.//aaa.a/ /b/c/a./aaa.a
+/b/c/a.//aaa..a /b/c/a./aaa..a
+/b/c/a.//aaa... /b/c/a./aaa...
+/b/c/a.//aaa../ /b/c/a./aaa..
+/b/c/a.//aaa./a /b/c/a./aaa./a
+/b/c/a.//aaa./. /b/c/a./aaa.
+/b/c/a.//aaa.// /b/c/a./aaa.
+/b/c/a.//aaa/aa /b/c/a./aaa/aa
+/b/c/a.//aaa/a. /b/c/a./aaa/a.
+/b/c/a.//aaa/a/ /b/c/a./aaa/a
+/b/c/a.//aaa/.a /b/c/a./aaa/.a
+/b/c/a.//aaa/.. /b/c/a.
+/b/c/a.//aaa/./ /b/c/a./aaa
+/b/c/a.//aaa//a /b/c/a./aaa/a
+/b/c/a.//aaa//. /b/c/a./aaa
+/b/c/a.//aaa/// /b/c/a./aaa
+/b/c/a.//aa.aaa /b/c/a./aa.aaa
+/b/c/a.//aa.aa. /b/c/a./aa.aa.
+/b/c/a.//aa.aa/ /b/c/a./aa.aa
+/b/c/a.//aa.a.a /b/c/a./aa.a.a
+/b/c/a.//aa.a.. /b/c/a./aa.a..
+/b/c/a.//aa.a./ /b/c/a./aa.a.
+/b/c/a.//aa.a/a /b/c/a./aa.a/a
+/b/c/a.//aa.a/. /b/c/a./aa.a
+/b/c/a.//aa.a// /b/c/a./aa.a
+/b/c/a.//aa..aa /b/c/a./aa..aa
+/b/c/a.//aa..a. /b/c/a./aa..a.
+/b/c/a.//aa..a/ /b/c/a./aa..a
+/b/c/a.//aa...a /b/c/a./aa...a
+/b/c/a.//aa.... /b/c/a./aa....
+/b/c/a.//aa.../ /b/c/a./aa...
+/b/c/a.//aa../a /b/c/a./aa../a
+/b/c/a.//aa../. /b/c/a./aa..
+/b/c/a.//aa..// /b/c/a./aa..
+/b/c/a.//aa./aa /b/c/a./aa./aa
+/b/c/a.//aa./a. /b/c/a./aa./a.
+/b/c/a.//aa./a/ /b/c/a./aa./a
+/b/c/a.//aa./.a /b/c/a./aa./.a
+/b/c/a.//aa./.. /b/c/a.
+/b/c/a.//aa././ /b/c/a./aa.
+/b/c/a.//aa.//a /b/c/a./aa./a
+/b/c/a.//aa.//. /b/c/a./aa.
+/b/c/a.//aa./// /b/c/a./aa.
+/b/c/a.//aa/aaa /b/c/a./aa/aaa
+/b/c/a.//aa/aa. /b/c/a./aa/aa.
+/b/c/a.//aa/aa/ /b/c/a./aa/aa
+/b/c/a.//aa/a.a /b/c/a./aa/a.a
+/b/c/a.//aa/a.. /b/c/a./aa/a..
+/b/c/a.//aa/a./ /b/c/a./aa/a.
+/b/c/a.//aa/a/a /b/c/a./aa/a/a
+/b/c/a.//aa/a/. /b/c/a./aa/a
+/b/c/a.//aa/a// /b/c/a./aa/a
+/b/c/a.//aa/.aa /b/c/a./aa/.aa
+/b/c/a.//aa/.a. /b/c/a./aa/.a.
+/b/c/a.//aa/.a/ /b/c/a./aa/.a
+/b/c/a.//aa/..a /b/c/a./aa/..a
+/b/c/a.//aa/... /b/c/a./aa/...
+/b/c/a.//aa/../ /b/c/a.
+/b/c/a.//aa/./a /b/c/a./aa/a
+/b/c/a.//aa/./. /b/c/a./aa
+/b/c/a.//aa/.// /b/c/a./aa
+/b/c/a.//aa//aa /b/c/a./aa/aa
+/b/c/a.//aa//a. /b/c/a./aa/a.
+/b/c/a.//aa//a/ /b/c/a./aa/a
+/b/c/a.//aa//.a /b/c/a./aa/.a
+/b/c/a.//aa//.. /b/c/a.
+/b/c/a.//aa//./ /b/c/a./aa
+/b/c/a.//aa///a /b/c/a./aa/a
+/b/c/a.//aa///. /b/c/a./aa
+/b/c/a.//aa//// /b/c/a./aa
+/b/c/a.//a.aaaa /b/c/a./a.aaaa
+/b/c/a.//a.aaa. /b/c/a./a.aaa.
+/b/c/a.//a.aaa/ /b/c/a./a.aaa
+/b/c/a.//a.aa.a /b/c/a./a.aa.a
+/b/c/a.//a.aa.. /b/c/a./a.aa..
+/b/c/a.//a.aa./ /b/c/a./a.aa.
+/b/c/a.//a.aa/a /b/c/a./a.aa/a
+/b/c/a.//a.aa/. /b/c/a./a.aa
+/b/c/a.//a.aa// /b/c/a./a.aa
+/b/c/a.//a.a.aa /b/c/a./a.a.aa
+/b/c/a.//a.a.a. /b/c/a./a.a.a.
+/b/c/a.//a.a.a/ /b/c/a./a.a.a
+/b/c/a.//a.a..a /b/c/a./a.a..a
+/b/c/a.//a.a... /b/c/a./a.a...
+/b/c/a.//a.a../ /b/c/a./a.a..
+/b/c/a.//a.a./a /b/c/a./a.a./a
+/b/c/a.//a.a./. /b/c/a./a.a.
+/b/c/a.//a.a.// /b/c/a./a.a.
+/b/c/a.//a.a/aa /b/c/a./a.a/aa
+/b/c/a.//a.a/a. /b/c/a./a.a/a.
+/b/c/a.//a.a/a/ /b/c/a./a.a/a
+/b/c/a.//a.a/.a /b/c/a./a.a/.a
+/b/c/a.//a.a/.. /b/c/a.
+/b/c/a.//a.a/./ /b/c/a./a.a
+/b/c/a.//a.a//a /b/c/a./a.a/a
+/b/c/a.//a.a//. /b/c/a./a.a
+/b/c/a.//a.a/// /b/c/a./a.a
+/b/c/a.//a..aaa /b/c/a./a..aaa
+/b/c/a.//a..aa. /b/c/a./a..aa.
+/b/c/a.//a..aa/ /b/c/a./a..aa
+/b/c/a.//a..a.a /b/c/a./a..a.a
+/b/c/a.//a..a.. /b/c/a./a..a..
+/b/c/a.//a..a./ /b/c/a./a..a.
+/b/c/a.//a..a/a /b/c/a./a..a/a
+/b/c/a.//a..a/. /b/c/a./a..a
+/b/c/a.//a..a// /b/c/a./a..a
+/b/c/a.//a...aa /b/c/a./a...aa
+/b/c/a.//a...a. /b/c/a./a...a.
+/b/c/a.//a...a/ /b/c/a./a...a
+/b/c/a.//a....a /b/c/a./a....a
+/b/c/a.//a..... /b/c/a./a.....
+/b/c/a.//a..../ /b/c/a./a....
+/b/c/a.//a.../a /b/c/a./a.../a
+/b/c/a.//a.../. /b/c/a./a...
+/b/c/a.//a...// /b/c/a./a...
+/b/c/a.//a../aa /b/c/a./a../aa
+/b/c/a.//a../a. /b/c/a./a../a.
+/b/c/a.//a../a/ /b/c/a./a../a
+/b/c/a.//a../.a /b/c/a./a../.a
+/b/c/a.//a../.. /b/c/a.
+/b/c/a.//a.././ /b/c/a./a..
+/b/c/a.//a..//a /b/c/a./a../a
+/b/c/a.//a..//. /b/c/a./a..
+/b/c/a.//a../// /b/c/a./a..
+/b/c/a.//a./aaa /b/c/a./a./aaa
+/b/c/a.//a./aa. /b/c/a./a./aa.
+/b/c/a.//a./aa/ /b/c/a./a./aa
+/b/c/a.//a./a.a /b/c/a./a./a.a
+/b/c/a.//a./a.. /b/c/a./a./a..
+/b/c/a.//a./a./ /b/c/a./a./a.
+/b/c/a.//a./a/a /b/c/a./a./a/a
+/b/c/a.//a./a/. /b/c/a./a./a
+/b/c/a.//a./a// /b/c/a./a./a
+/b/c/a.//a./.aa /b/c/a./a./.aa
+/b/c/a.//a./.a. /b/c/a./a./.a.
+/b/c/a.//a./.a/ /b/c/a./a./.a
+/b/c/a.//a./..a /b/c/a./a./..a
+/b/c/a.//a./... /b/c/a./a./...
+/b/c/a.//a./../ /b/c/a.
+/b/c/a.//a././a /b/c/a./a./a
+/b/c/a.//a././. /b/c/a./a.
+/b/c/a.//a./.// /b/c/a./a.
+/b/c/a.//a.//aa /b/c/a./a./aa
+/b/c/a.//a.//a. /b/c/a./a./a.
+/b/c/a.//a.//a/ /b/c/a./a./a
+/b/c/a.//a.//.a /b/c/a./a./.a
+/b/c/a.//a.//.. /b/c/a.
+/b/c/a.//a.//./ /b/c/a./a.
+/b/c/a.//a.///a /b/c/a./a./a
+/b/c/a.//a.///. /b/c/a./a.
+/b/c/a.//a.//// /b/c/a./a.
+/b/c/a.//a/aaaa /b/c/a./a/aaaa
+/b/c/a.//a/aaa. /b/c/a./a/aaa.
+/b/c/a.//a/aaa/ /b/c/a./a/aaa
+/b/c/a.//a/aa.a /b/c/a./a/aa.a
+/b/c/a.//a/aa.. /b/c/a./a/aa..
+/b/c/a.//a/aa./ /b/c/a./a/aa.
+/b/c/a.//a/aa/a /b/c/a./a/aa/a
+/b/c/a.//a/aa/. /b/c/a./a/aa
+/b/c/a.//a/aa// /b/c/a./a/aa
+/b/c/a.//a/a.aa /b/c/a./a/a.aa
+/b/c/a.//a/a.a. /b/c/a./a/a.a.
+/b/c/a.//a/a.a/ /b/c/a./a/a.a
+/b/c/a.//a/a..a /b/c/a./a/a..a
+/b/c/a.//a/a... /b/c/a./a/a...
+/b/c/a.//a/a../ /b/c/a./a/a..
+/b/c/a.//a/a./a /b/c/a./a/a./a
+/b/c/a.//a/a./. /b/c/a./a/a.
+/b/c/a.//a/a.// /b/c/a./a/a.
+/b/c/a.//a/a/aa /b/c/a./a/a/aa
+/b/c/a.//a/a/a. /b/c/a./a/a/a.
+/b/c/a.//a/a/a/ /b/c/a./a/a/a
+/b/c/a.//a/a/.a /b/c/a./a/a/.a
+/b/c/a.//a/a/.. /b/c/a./a
+/b/c/a.//a/a/./ /b/c/a./a/a
+/b/c/a.//a/a//a /b/c/a./a/a/a
+/b/c/a.//a/a//. /b/c/a./a/a
+/b/c/a.//a/a/// /b/c/a./a/a
+/b/c/a.//a/.aaa /b/c/a./a/.aaa
+/b/c/a.//a/.aa. /b/c/a./a/.aa.
+/b/c/a.//a/.aa/ /b/c/a./a/.aa
+/b/c/a.//a/.a.a /b/c/a./a/.a.a
+/b/c/a.//a/.a.. /b/c/a./a/.a..
+/b/c/a.//a/.a./ /b/c/a./a/.a.
+/b/c/a.//a/.a/a /b/c/a./a/.a/a
+/b/c/a.//a/.a/. /b/c/a./a/.a
+/b/c/a.//a/.a// /b/c/a./a/.a
+/b/c/a.//a/..aa /b/c/a./a/..aa
+/b/c/a.//a/..a. /b/c/a./a/..a.
+/b/c/a.//a/..a/ /b/c/a./a/..a
+/b/c/a.//a/...a /b/c/a./a/...a
+/b/c/a.//a/.... /b/c/a./a/....
+/b/c/a.//a/.../ /b/c/a./a/...
+/b/c/a.//a/../a /b/c/a./a
+/b/c/a.//a/../. /b/c/a.
+/b/c/a.//a/..// /b/c/a.
+/b/c/a.//a/./aa /b/c/a./a/aa
+/b/c/a.//a/./a. /b/c/a./a/a.
+/b/c/a.//a/./a/ /b/c/a./a/a
+/b/c/a.//a/./.a /b/c/a./a/.a
+/b/c/a.//a/./.. /b/c/a.
+/b/c/a.//a/././ /b/c/a./a
+/b/c/a.//a/.//a /b/c/a./a/a
+/b/c/a.//a/.//. /b/c/a./a
+/b/c/a.//a/./// /b/c/a./a
+/b/c/a.//a//aaa /b/c/a./a/aaa
+/b/c/a.//a//aa. /b/c/a./a/aa.
+/b/c/a.//a//aa/ /b/c/a./a/aa
+/b/c/a.//a//a.a /b/c/a./a/a.a
+/b/c/a.//a//a.. /b/c/a./a/a..
+/b/c/a.//a//a./ /b/c/a./a/a.
+/b/c/a.//a//a/a /b/c/a./a/a/a
+/b/c/a.//a//a/. /b/c/a./a/a
+/b/c/a.//a//a// /b/c/a./a/a
+/b/c/a.//a//.aa /b/c/a./a/.aa
+/b/c/a.//a//.a. /b/c/a./a/.a.
+/b/c/a.//a//.a/ /b/c/a./a/.a
+/b/c/a.//a//..a /b/c/a./a/..a
+/b/c/a.//a//... /b/c/a./a/...
+/b/c/a.//a//../ /b/c/a.
+/b/c/a.//a//./a /b/c/a./a/a
+/b/c/a.//a//./. /b/c/a./a
+/b/c/a.//a//.// /b/c/a./a
+/b/c/a.//a///aa /b/c/a./a/aa
+/b/c/a.//a///a. /b/c/a./a/a.
+/b/c/a.//a///a/ /b/c/a./a/a
+/b/c/a.//a///.a /b/c/a./a/.a
+/b/c/a.//a///.. /b/c/a.
+/b/c/a.//a///./ /b/c/a./a
+/b/c/a.//a////a /b/c/a./a/a
+/b/c/a.//a////. /b/c/a./a
+/b/c/a.//a///// /b/c/a./a
+/b/c/a.//.aaaaa /b/c/a./.aaaaa
+/b/c/a.//.aaaa. /b/c/a./.aaaa.
+/b/c/a.//.aaaa/ /b/c/a./.aaaa
+/b/c/a.//.aaa.a /b/c/a./.aaa.a
+/b/c/a.//.aaa.. /b/c/a./.aaa..
+/b/c/a.//.aaa./ /b/c/a./.aaa.
+/b/c/a.//.aaa/a /b/c/a./.aaa/a
+/b/c/a.//.aaa/. /b/c/a./.aaa
+/b/c/a.//.aaa// /b/c/a./.aaa
+/b/c/a.//.aa.aa /b/c/a./.aa.aa
+/b/c/a.//.aa.a. /b/c/a./.aa.a.
+/b/c/a.//.aa.a/ /b/c/a./.aa.a
+/b/c/a.//.aa..a /b/c/a./.aa..a
+/b/c/a.//.aa... /b/c/a./.aa...
+/b/c/a.//.aa../ /b/c/a./.aa..
+/b/c/a.//.aa./a /b/c/a./.aa./a
+/b/c/a.//.aa./. /b/c/a./.aa.
+/b/c/a.//.aa.// /b/c/a./.aa.
+/b/c/a.//.aa/aa /b/c/a./.aa/aa
+/b/c/a.//.aa/a. /b/c/a./.aa/a.
+/b/c/a.//.aa/a/ /b/c/a./.aa/a
+/b/c/a.//.aa/.a /b/c/a./.aa/.a
+/b/c/a.//.aa/.. /b/c/a.
+/b/c/a.//.aa/./ /b/c/a./.aa
+/b/c/a.//.aa//a /b/c/a./.aa/a
+/b/c/a.//.aa//. /b/c/a./.aa
+/b/c/a.//.aa/// /b/c/a./.aa
+/b/c/a.//.a.aaa /b/c/a./.a.aaa
+/b/c/a.//.a.aa. /b/c/a./.a.aa.
+/b/c/a.//.a.aa/ /b/c/a./.a.aa
+/b/c/a.//.a.a.a /b/c/a./.a.a.a
+/b/c/a.//.a.a.. /b/c/a./.a.a..
+/b/c/a.//.a.a./ /b/c/a./.a.a.
+/b/c/a.//.a.a/a /b/c/a./.a.a/a
+/b/c/a.//.a.a/. /b/c/a./.a.a
+/b/c/a.//.a.a// /b/c/a./.a.a
+/b/c/a.//.a..aa /b/c/a./.a..aa
+/b/c/a.//.a..a. /b/c/a./.a..a.
+/b/c/a.//.a..a/ /b/c/a./.a..a
+/b/c/a.//.a...a /b/c/a./.a...a
+/b/c/a.//.a.... /b/c/a./.a....
+/b/c/a.//.a.../ /b/c/a./.a...
+/b/c/a.//.a../a /b/c/a./.a../a
+/b/c/a.//.a../. /b/c/a./.a..
+/b/c/a.//.a..// /b/c/a./.a..
+/b/c/a.//.a./aa /b/c/a./.a./aa
+/b/c/a.//.a./a. /b/c/a./.a./a.
+/b/c/a.//.a./a/ /b/c/a./.a./a
+/b/c/a.//.a./.a /b/c/a./.a./.a
+/b/c/a.//.a./.. /b/c/a.
+/b/c/a.//.a././ /b/c/a./.a.
+/b/c/a.//.a.//a /b/c/a./.a./a
+/b/c/a.//.a.//. /b/c/a./.a.
+/b/c/a.//.a./// /b/c/a./.a.
+/b/c/a.//.a/aaa /b/c/a./.a/aaa
+/b/c/a.//.a/aa. /b/c/a./.a/aa.
+/b/c/a.//.a/aa/ /b/c/a./.a/aa
+/b/c/a.//.a/a.a /b/c/a./.a/a.a
+/b/c/a.//.a/a.. /b/c/a./.a/a..
+/b/c/a.//.a/a./ /b/c/a./.a/a.
+/b/c/a.//.a/a/a /b/c/a./.a/a/a
+/b/c/a.//.a/a/. /b/c/a./.a/a
+/b/c/a.//.a/a// /b/c/a./.a/a
+/b/c/a.//.a/.aa /b/c/a./.a/.aa
+/b/c/a.//.a/.a. /b/c/a./.a/.a.
+/b/c/a.//.a/.a/ /b/c/a./.a/.a
+/b/c/a.//.a/..a /b/c/a./.a/..a
+/b/c/a.//.a/... /b/c/a./.a/...
+/b/c/a.//.a/../ /b/c/a.
+/b/c/a.//.a/./a /b/c/a./.a/a
+/b/c/a.//.a/./. /b/c/a./.a
+/b/c/a.//.a/.// /b/c/a./.a
+/b/c/a.//.a//aa /b/c/a./.a/aa
+/b/c/a.//.a//a. /b/c/a./.a/a.
+/b/c/a.//.a//a/ /b/c/a./.a/a
+/b/c/a.//.a//.a /b/c/a./.a/.a
+/b/c/a.//.a//.. /b/c/a.
+/b/c/a.//.a//./ /b/c/a./.a
+/b/c/a.//.a///a /b/c/a./.a/a
+/b/c/a.//.a///. /b/c/a./.a
+/b/c/a.//.a//// /b/c/a./.a
+/b/c/a.//..aaaa /b/c/a./..aaaa
+/b/c/a.//..aaa. /b/c/a./..aaa.
+/b/c/a.//..aaa/ /b/c/a./..aaa
+/b/c/a.//..aa.a /b/c/a./..aa.a
+/b/c/a.//..aa.. /b/c/a./..aa..
+/b/c/a.//..aa./ /b/c/a./..aa.
+/b/c/a.//..aa/a /b/c/a./..aa/a
+/b/c/a.//..aa/. /b/c/a./..aa
+/b/c/a.//..aa// /b/c/a./..aa
+/b/c/a.//..a.aa /b/c/a./..a.aa
+/b/c/a.//..a.a. /b/c/a./..a.a.
+/b/c/a.//..a.a/ /b/c/a./..a.a
+/b/c/a.//..a..a /b/c/a./..a..a
+/b/c/a.//..a... /b/c/a./..a...
+/b/c/a.//..a../ /b/c/a./..a..
+/b/c/a.//..a./a /b/c/a./..a./a
+/b/c/a.//..a./. /b/c/a./..a.
+/b/c/a.//..a.// /b/c/a./..a.
+/b/c/a.//..a/aa /b/c/a./..a/aa
+/b/c/a.//..a/a. /b/c/a./..a/a.
+/b/c/a.//..a/a/ /b/c/a./..a/a
+/b/c/a.//..a/.a /b/c/a./..a/.a
+/b/c/a.//..a/.. /b/c/a.
+/b/c/a.//..a/./ /b/c/a./..a
+/b/c/a.//..a//a /b/c/a./..a/a
+/b/c/a.//..a//. /b/c/a./..a
+/b/c/a.//..a/// /b/c/a./..a
+/b/c/a.//...aaa /b/c/a./...aaa
+/b/c/a.//...aa. /b/c/a./...aa.
+/b/c/a.//...aa/ /b/c/a./...aa
+/b/c/a.//...a.a /b/c/a./...a.a
+/b/c/a.//...a.. /b/c/a./...a..
+/b/c/a.//...a./ /b/c/a./...a.
+/b/c/a.//...a/a /b/c/a./...a/a
+/b/c/a.//...a/. /b/c/a./...a
+/b/c/a.//...a// /b/c/a./...a
+/b/c/a.//....aa /b/c/a./....aa
+/b/c/a.//....a. /b/c/a./....a.
+/b/c/a.//....a/ /b/c/a./....a
+/b/c/a.//.....a /b/c/a./.....a
+/b/c/a.//...... /b/c/a./......
+/b/c/a.//...../ /b/c/a./.....
+/b/c/a.//..../a /b/c/a./..../a
+/b/c/a.//..../. /b/c/a./....
+/b/c/a.//....// /b/c/a./....
+/b/c/a.//.../aa /b/c/a./.../aa
+/b/c/a.//.../a. /b/c/a./.../a.
+/b/c/a.//.../a/ /b/c/a./.../a
+/b/c/a.//.../.a /b/c/a./.../.a
+/b/c/a.//.../.. /b/c/a.
+/b/c/a.//..././ /b/c/a./...
+/b/c/a.//...//a /b/c/a./.../a
+/b/c/a.//...//. /b/c/a./...
+/b/c/a.//.../// /b/c/a./...
+/b/c/a.//../aaa /b/c/aaa
+/b/c/a.//../aa. /b/c/aa.
+/b/c/a.//../aa/ /b/c/aa
+/b/c/a.//../a.a /b/c/a.a
+/b/c/a.//../a.. /b/c/a..
+/b/c/a.//../a./ /b/c/a.
+/b/c/a.//../a/a /b/c/a/a
+/b/c/a.//../a/. /b/c/a
+/b/c/a.//../a// /b/c/a
+/b/c/a.//../.aa /b/c/.aa
+/b/c/a.//../.a. /b/c/.a.
+/b/c/a.//../.a/ /b/c/.a
+/b/c/a.//../..a /b/c/..a
+/b/c/a.//../... /b/c/...
+/b/c/a.//../../ /b
+/b/c/a.//.././a /b/c/a
+/b/c/a.//.././. /b/c
+/b/c/a.//../.// /b/c
+/b/c/a.//..//aa /b/c/aa
+/b/c/a.//..//a. /b/c/a.
+/b/c/a.//..//a/ /b/c/a
+/b/c/a.//..//.a /b/c/.a
+/b/c/a.//..//.. /b
+/b/c/a.//..//./ /b/c
+/b/c/a.//..///a /b/c/a
+/b/c/a.//..///. /b/c
+/b/c/a.//..//// /b/c
+/b/c/a.//./aaaa /b/c/a./aaaa
+/b/c/a.//./aaa. /b/c/a./aaa.
+/b/c/a.//./aaa/ /b/c/a./aaa
+/b/c/a.//./aa.a /b/c/a./aa.a
+/b/c/a.//./aa.. /b/c/a./aa..
+/b/c/a.//./aa./ /b/c/a./aa.
+/b/c/a.//./aa/a /b/c/a./aa/a
+/b/c/a.//./aa/. /b/c/a./aa
+/b/c/a.//./aa// /b/c/a./aa
+/b/c/a.//./a.aa /b/c/a./a.aa
+/b/c/a.//./a.a. /b/c/a./a.a.
+/b/c/a.//./a.a/ /b/c/a./a.a
+/b/c/a.//./a..a /b/c/a./a..a
+/b/c/a.//./a... /b/c/a./a...
+/b/c/a.//./a../ /b/c/a./a..
+/b/c/a.//./a./a /b/c/a./a./a
+/b/c/a.//./a./. /b/c/a./a.
+/b/c/a.//./a.// /b/c/a./a.
+/b/c/a.//./a/aa /b/c/a./a/aa
+/b/c/a.//./a/a. /b/c/a./a/a.
+/b/c/a.//./a/a/ /b/c/a./a/a
+/b/c/a.//./a/.a /b/c/a./a/.a
+/b/c/a.//./a/.. /b/c/a.
+/b/c/a.//./a/./ /b/c/a./a
+/b/c/a.//./a//a /b/c/a./a/a
+/b/c/a.//./a//. /b/c/a./a
+/b/c/a.//./a/// /b/c/a./a
+/b/c/a.//./.aaa /b/c/a./.aaa
+/b/c/a.//./.aa. /b/c/a./.aa.
+/b/c/a.//./.aa/ /b/c/a./.aa
+/b/c/a.//./.a.a /b/c/a./.a.a
+/b/c/a.//./.a.. /b/c/a./.a..
+/b/c/a.//./.a./ /b/c/a./.a.
+/b/c/a.//./.a/a /b/c/a./.a/a
+/b/c/a.//./.a/. /b/c/a./.a
+/b/c/a.//./.a// /b/c/a./.a
+/b/c/a.//./..aa /b/c/a./..aa
+/b/c/a.//./..a. /b/c/a./..a.
+/b/c/a.//./..a/ /b/c/a./..a
+/b/c/a.//./...a /b/c/a./...a
+/b/c/a.//./.... /b/c/a./....
+/b/c/a.//./.../ /b/c/a./...
+/b/c/a.//./../a /b/c/a
+/b/c/a.//./../. /b/c
+/b/c/a.//./..// /b/c
+/b/c/a.//././aa /b/c/a./aa
+/b/c/a.//././a. /b/c/a./a.
+/b/c/a.//././a/ /b/c/a./a
+/b/c/a.//././.a /b/c/a./.a
+/b/c/a.//././.. /b/c
+/b/c/a.//./././ /b/c/a.
+/b/c/a.//././/a /b/c/a./a
+/b/c/a.//././/. /b/c/a.
+/b/c/a.//././// /b/c/a.
+/b/c/a.//.//aaa /b/c/a./aaa
+/b/c/a.//.//aa. /b/c/a./aa.
+/b/c/a.//.//aa/ /b/c/a./aa
+/b/c/a.//.//a.a /b/c/a./a.a
+/b/c/a.//.//a.. /b/c/a./a..
+/b/c/a.//.//a./ /b/c/a./a.
+/b/c/a.//.//a/a /b/c/a./a/a
+/b/c/a.//.//a/. /b/c/a./a
+/b/c/a.//.//a// /b/c/a./a
+/b/c/a.//.//.aa /b/c/a./.aa
+/b/c/a.//.//.a. /b/c/a./.a.
+/b/c/a.//.//.a/ /b/c/a./.a
+/b/c/a.//.//..a /b/c/a./..a
+/b/c/a.//.//... /b/c/a./...
+/b/c/a.//.//../ /b/c
+/b/c/a.//.//./a /b/c/a./a
+/b/c/a.//.//./. /b/c/a.
+/b/c/a.//.//.// /b/c/a.
+/b/c/a.//.///aa /b/c/a./aa
+/b/c/a.//.///a. /b/c/a./a.
+/b/c/a.//.///a/ /b/c/a./a
+/b/c/a.//.///.a /b/c/a./.a
+/b/c/a.//.///.. /b/c
+/b/c/a.//.///./ /b/c/a.
+/b/c/a.//.////a /b/c/a./a
+/b/c/a.//.////. /b/c/a.
+/b/c/a.//.///// /b/c/a.
+/b/c/a.///aaaaa /b/c/a./aaaaa
+/b/c/a.///aaaa. /b/c/a./aaaa.
+/b/c/a.///aaaa/ /b/c/a./aaaa
+/b/c/a.///aaa.a /b/c/a./aaa.a
+/b/c/a.///aaa.. /b/c/a./aaa..
+/b/c/a.///aaa./ /b/c/a./aaa.
+/b/c/a.///aaa/a /b/c/a./aaa/a
+/b/c/a.///aaa/. /b/c/a./aaa
+/b/c/a.///aaa// /b/c/a./aaa
+/b/c/a.///aa.aa /b/c/a./aa.aa
+/b/c/a.///aa.a. /b/c/a./aa.a.
+/b/c/a.///aa.a/ /b/c/a./aa.a
+/b/c/a.///aa..a /b/c/a./aa..a
+/b/c/a.///aa... /b/c/a./aa...
+/b/c/a.///aa../ /b/c/a./aa..
+/b/c/a.///aa./a /b/c/a./aa./a
+/b/c/a.///aa./. /b/c/a./aa.
+/b/c/a.///aa.// /b/c/a./aa.
+/b/c/a.///aa/aa /b/c/a./aa/aa
+/b/c/a.///aa/a. /b/c/a./aa/a.
+/b/c/a.///aa/a/ /b/c/a./aa/a
+/b/c/a.///aa/.a /b/c/a./aa/.a
+/b/c/a.///aa/.. /b/c/a.
+/b/c/a.///aa/./ /b/c/a./aa
+/b/c/a.///aa//a /b/c/a./aa/a
+/b/c/a.///aa//. /b/c/a./aa
+/b/c/a.///aa/// /b/c/a./aa
+/b/c/a.///a.aaa /b/c/a./a.aaa
+/b/c/a.///a.aa. /b/c/a./a.aa.
+/b/c/a.///a.aa/ /b/c/a./a.aa
+/b/c/a.///a.a.a /b/c/a./a.a.a
+/b/c/a.///a.a.. /b/c/a./a.a..
+/b/c/a.///a.a./ /b/c/a./a.a.
+/b/c/a.///a.a/a /b/c/a./a.a/a
+/b/c/a.///a.a/. /b/c/a./a.a
+/b/c/a.///a.a// /b/c/a./a.a
+/b/c/a.///a..aa /b/c/a./a..aa
+/b/c/a.///a..a. /b/c/a./a..a.
+/b/c/a.///a..a/ /b/c/a./a..a
+/b/c/a.///a...a /b/c/a./a...a
+/b/c/a.///a.... /b/c/a./a....
+/b/c/a.///a.../ /b/c/a./a...
+/b/c/a.///a../a /b/c/a./a../a
+/b/c/a.///a../. /b/c/a./a..
+/b/c/a.///a..// /b/c/a./a..
+/b/c/a.///a./aa /b/c/a./a./aa
+/b/c/a.///a./a. /b/c/a./a./a.
+/b/c/a.///a./a/ /b/c/a./a./a
+/b/c/a.///a./.a /b/c/a./a./.a
+/b/c/a.///a./.. /b/c/a.
+/b/c/a.///a././ /b/c/a./a.
+/b/c/a.///a.//a /b/c/a./a./a
+/b/c/a.///a.//. /b/c/a./a.
+/b/c/a.///a./// /b/c/a./a.
+/b/c/a.///a/aaa /b/c/a./a/aaa
+/b/c/a.///a/aa. /b/c/a./a/aa.
+/b/c/a.///a/aa/ /b/c/a./a/aa
+/b/c/a.///a/a.a /b/c/a./a/a.a
+/b/c/a.///a/a.. /b/c/a./a/a..
+/b/c/a.///a/a./ /b/c/a./a/a.
+/b/c/a.///a/a/a /b/c/a./a/a/a
+/b/c/a.///a/a/. /b/c/a./a/a
+/b/c/a.///a/a// /b/c/a./a/a
+/b/c/a.///a/.aa /b/c/a./a/.aa
+/b/c/a.///a/.a. /b/c/a./a/.a.
+/b/c/a.///a/.a/ /b/c/a./a/.a
+/b/c/a.///a/..a /b/c/a./a/..a
+/b/c/a.///a/... /b/c/a./a/...
+/b/c/a.///a/../ /b/c/a.
+/b/c/a.///a/./a /b/c/a./a/a
+/b/c/a.///a/./. /b/c/a./a
+/b/c/a.///a/.// /b/c/a./a
+/b/c/a.///a//aa /b/c/a./a/aa
+/b/c/a.///a//a. /b/c/a./a/a.
+/b/c/a.///a//a/ /b/c/a./a/a
+/b/c/a.///a//.a /b/c/a./a/.a
+/b/c/a.///a//.. /b/c/a.
+/b/c/a.///a//./ /b/c/a./a
+/b/c/a.///a///a /b/c/a./a/a
+/b/c/a.///a///. /b/c/a./a
+/b/c/a.///a//// /b/c/a./a
+/b/c/a.///.aaaa /b/c/a./.aaaa
+/b/c/a.///.aaa. /b/c/a./.aaa.
+/b/c/a.///.aaa/ /b/c/a./.aaa
+/b/c/a.///.aa.a /b/c/a./.aa.a
+/b/c/a.///.aa.. /b/c/a./.aa..
+/b/c/a.///.aa./ /b/c/a./.aa.
+/b/c/a.///.aa/a /b/c/a./.aa/a
+/b/c/a.///.aa/. /b/c/a./.aa
+/b/c/a.///.aa// /b/c/a./.aa
+/b/c/a.///.a.aa /b/c/a./.a.aa
+/b/c/a.///.a.a. /b/c/a./.a.a.
+/b/c/a.///.a.a/ /b/c/a./.a.a
+/b/c/a.///.a..a /b/c/a./.a..a
+/b/c/a.///.a... /b/c/a./.a...
+/b/c/a.///.a../ /b/c/a./.a..
+/b/c/a.///.a./a /b/c/a./.a./a
+/b/c/a.///.a./. /b/c/a./.a.
+/b/c/a.///.a.// /b/c/a./.a.
+/b/c/a.///.a/aa /b/c/a./.a/aa
+/b/c/a.///.a/a. /b/c/a./.a/a.
+/b/c/a.///.a/a/ /b/c/a./.a/a
+/b/c/a.///.a/.a /b/c/a./.a/.a
+/b/c/a.///.a/.. /b/c/a.
+/b/c/a.///.a/./ /b/c/a./.a
+/b/c/a.///.a//a /b/c/a./.a/a
+/b/c/a.///.a//. /b/c/a./.a
+/b/c/a.///.a/// /b/c/a./.a
+/b/c/a.///..aaa /b/c/a./..aaa
+/b/c/a.///..aa. /b/c/a./..aa.
+/b/c/a.///..aa/ /b/c/a./..aa
+/b/c/a.///..a.a /b/c/a./..a.a
+/b/c/a.///..a.. /b/c/a./..a..
+/b/c/a.///..a./ /b/c/a./..a.
+/b/c/a.///..a/a /b/c/a./..a/a
+/b/c/a.///..a/. /b/c/a./..a
+/b/c/a.///..a// /b/c/a./..a
+/b/c/a.///...aa /b/c/a./...aa
+/b/c/a.///...a. /b/c/a./...a.
+/b/c/a.///...a/ /b/c/a./...a
+/b/c/a.///....a /b/c/a./....a
+/b/c/a.///..... /b/c/a./.....
+/b/c/a.///..../ /b/c/a./....
+/b/c/a.///.../a /b/c/a./.../a
+/b/c/a.///.../. /b/c/a./...
+/b/c/a.///...// /b/c/a./...
+/b/c/a.///../aa /b/c/aa
+/b/c/a.///../a. /b/c/a.
+/b/c/a.///../a/ /b/c/a
+/b/c/a.///../.a /b/c/.a
+/b/c/a.///../.. /b
+/b/c/a.///.././ /b/c
+/b/c/a.///..//a /b/c/a
+/b/c/a.///..//. /b/c
+/b/c/a.///../// /b/c
+/b/c/a.///./aaa /b/c/a./aaa
+/b/c/a.///./aa. /b/c/a./aa.
+/b/c/a.///./aa/ /b/c/a./aa
+/b/c/a.///./a.a /b/c/a./a.a
+/b/c/a.///./a.. /b/c/a./a..
+/b/c/a.///./a./ /b/c/a./a.
+/b/c/a.///./a/a /b/c/a./a/a
+/b/c/a.///./a/. /b/c/a./a
+/b/c/a.///./a// /b/c/a./a
+/b/c/a.///./.aa /b/c/a./.aa
+/b/c/a.///./.a. /b/c/a./.a.
+/b/c/a.///./.a/ /b/c/a./.a
+/b/c/a.///./..a /b/c/a./..a
+/b/c/a.///./... /b/c/a./...
+/b/c/a.///./../ /b/c
+/b/c/a.///././a /b/c/a./a
+/b/c/a.///././. /b/c/a.
+/b/c/a.///./.// /b/c/a.
+/b/c/a.///.//aa /b/c/a./aa
+/b/c/a.///.//a. /b/c/a./a.
+/b/c/a.///.//a/ /b/c/a./a
+/b/c/a.///.//.a /b/c/a./.a
+/b/c/a.///.//.. /b/c
+/b/c/a.///.//./ /b/c/a.
+/b/c/a.///.///a /b/c/a./a
+/b/c/a.///.///. /b/c/a.
+/b/c/a.///.//// /b/c/a.
+/b/c/a.////aaaa /b/c/a./aaaa
+/b/c/a.////aaa. /b/c/a./aaa.
+/b/c/a.////aaa/ /b/c/a./aaa
+/b/c/a.////aa.a /b/c/a./aa.a
+/b/c/a.////aa.. /b/c/a./aa..
+/b/c/a.////aa./ /b/c/a./aa.
+/b/c/a.////aa/a /b/c/a./aa/a
+/b/c/a.////aa/. /b/c/a./aa
+/b/c/a.////aa// /b/c/a./aa
+/b/c/a.////a.aa /b/c/a./a.aa
+/b/c/a.////a.a. /b/c/a./a.a.
+/b/c/a.////a.a/ /b/c/a./a.a
+/b/c/a.////a..a /b/c/a./a..a
+/b/c/a.////a... /b/c/a./a...
+/b/c/a.////a../ /b/c/a./a..
+/b/c/a.////a./a /b/c/a./a./a
+/b/c/a.////a./. /b/c/a./a.
+/b/c/a.////a.// /b/c/a./a.
+/b/c/a.////a/aa /b/c/a./a/aa
+/b/c/a.////a/a. /b/c/a./a/a.
+/b/c/a.////a/a/ /b/c/a./a/a
+/b/c/a.////a/.a /b/c/a./a/.a
+/b/c/a.////a/.. /b/c/a.
+/b/c/a.////a/./ /b/c/a./a
+/b/c/a.////a//a /b/c/a./a/a
+/b/c/a.////a//. /b/c/a./a
+/b/c/a.////a/// /b/c/a./a
+/b/c/a.////.aaa /b/c/a./.aaa
+/b/c/a.////.aa. /b/c/a./.aa.
+/b/c/a.////.aa/ /b/c/a./.aa
+/b/c/a.////.a.a /b/c/a./.a.a
+/b/c/a.////.a.. /b/c/a./.a..
+/b/c/a.////.a./ /b/c/a./.a.
+/b/c/a.////.a/a /b/c/a./.a/a
+/b/c/a.////.a/. /b/c/a./.a
+/b/c/a.////.a// /b/c/a./.a
+/b/c/a.////..aa /b/c/a./..aa
+/b/c/a.////..a. /b/c/a./..a.
+/b/c/a.////..a/ /b/c/a./..a
+/b/c/a.////...a /b/c/a./...a
+/b/c/a.////.... /b/c/a./....
+/b/c/a.////.../ /b/c/a./...
+/b/c/a.////../a /b/c/a
+/b/c/a.////../. /b/c
+/b/c/a.////..// /b/c
+/b/c/a.////./aa /b/c/a./aa
+/b/c/a.////./a. /b/c/a./a.
+/b/c/a.////./a/ /b/c/a./a
+/b/c/a.////./.a /b/c/a./.a
+/b/c/a.////./.. /b/c
+/b/c/a.////././ /b/c/a.
+/b/c/a.////.//a /b/c/a./a
+/b/c/a.////.//. /b/c/a.
+/b/c/a.////./// /b/c/a.
+/b/c/a./////aaa /b/c/a./aaa
+/b/c/a./////aa. /b/c/a./aa.
+/b/c/a./////aa/ /b/c/a./aa
+/b/c/a./////a.a /b/c/a./a.a
+/b/c/a./////a.. /b/c/a./a..
+/b/c/a./////a./ /b/c/a./a.
+/b/c/a./////a/a /b/c/a./a/a
+/b/c/a./////a/. /b/c/a./a
+/b/c/a./////a// /b/c/a./a
+/b/c/a./////.aa /b/c/a./.aa
+/b/c/a./////.a. /b/c/a./.a.
+/b/c/a./////.a/ /b/c/a./.a
+/b/c/a./////..a /b/c/a./..a
+/b/c/a./////... /b/c/a./...
+/b/c/a./////../ /b/c
+/b/c/a./////./a /b/c/a./a
+/b/c/a./////./. /b/c/a.
+/b/c/a./////.// /b/c/a.
+/b/c/a.//////aa /b/c/a./aa
+/b/c/a.//////a. /b/c/a./a.
+/b/c/a.//////a/ /b/c/a./a
+/b/c/a.//////.a /b/c/a./.a
+/b/c/a.//////.. /b/c
+/b/c/a.//////./ /b/c/a.
+/b/c/a.///////a /b/c/a./a
+/b/c/a.///////. /b/c/a.
+/b/c/a.//////// /b/c/a.
+/b/c/a/aaaaaaaa /b/c/a/aaaaaaaa
+/b/c/a/aaaaaaa. /b/c/a/aaaaaaa.
+/b/c/a/aaaaaaa/ /b/c/a/aaaaaaa
+/b/c/a/aaaaaa.a /b/c/a/aaaaaa.a
+/b/c/a/aaaaaa.. /b/c/a/aaaaaa..
+/b/c/a/aaaaaa./ /b/c/a/aaaaaa.
+/b/c/a/aaaaaa/a /b/c/a/aaaaaa/a
+/b/c/a/aaaaaa/. /b/c/a/aaaaaa
+/b/c/a/aaaaaa// /b/c/a/aaaaaa
+/b/c/a/aaaaa.aa /b/c/a/aaaaa.aa
+/b/c/a/aaaaa.a. /b/c/a/aaaaa.a.
+/b/c/a/aaaaa.a/ /b/c/a/aaaaa.a
+/b/c/a/aaaaa..a /b/c/a/aaaaa..a
+/b/c/a/aaaaa... /b/c/a/aaaaa...
+/b/c/a/aaaaa../ /b/c/a/aaaaa..
+/b/c/a/aaaaa./a /b/c/a/aaaaa./a
+/b/c/a/aaaaa./. /b/c/a/aaaaa.
+/b/c/a/aaaaa.// /b/c/a/aaaaa.
+/b/c/a/aaaaa/aa /b/c/a/aaaaa/aa
+/b/c/a/aaaaa/a. /b/c/a/aaaaa/a.
+/b/c/a/aaaaa/a/ /b/c/a/aaaaa/a
+/b/c/a/aaaaa/.a /b/c/a/aaaaa/.a
+/b/c/a/aaaaa/.. /b/c/a
+/b/c/a/aaaaa/./ /b/c/a/aaaaa
+/b/c/a/aaaaa//a /b/c/a/aaaaa/a
+/b/c/a/aaaaa//. /b/c/a/aaaaa
+/b/c/a/aaaaa/// /b/c/a/aaaaa
+/b/c/a/aaaa.aaa /b/c/a/aaaa.aaa
+/b/c/a/aaaa.aa. /b/c/a/aaaa.aa.
+/b/c/a/aaaa.aa/ /b/c/a/aaaa.aa
+/b/c/a/aaaa.a.a /b/c/a/aaaa.a.a
+/b/c/a/aaaa.a.. /b/c/a/aaaa.a..
+/b/c/a/aaaa.a./ /b/c/a/aaaa.a.
+/b/c/a/aaaa.a/a /b/c/a/aaaa.a/a
+/b/c/a/aaaa.a/. /b/c/a/aaaa.a
+/b/c/a/aaaa.a// /b/c/a/aaaa.a
+/b/c/a/aaaa..aa /b/c/a/aaaa..aa
+/b/c/a/aaaa..a. /b/c/a/aaaa..a.
+/b/c/a/aaaa..a/ /b/c/a/aaaa..a
+/b/c/a/aaaa...a /b/c/a/aaaa...a
+/b/c/a/aaaa.... /b/c/a/aaaa....
+/b/c/a/aaaa.../ /b/c/a/aaaa...
+/b/c/a/aaaa../a /b/c/a/aaaa../a
+/b/c/a/aaaa../. /b/c/a/aaaa..
+/b/c/a/aaaa..// /b/c/a/aaaa..
+/b/c/a/aaaa./aa /b/c/a/aaaa./aa
+/b/c/a/aaaa./a. /b/c/a/aaaa./a.
+/b/c/a/aaaa./a/ /b/c/a/aaaa./a
+/b/c/a/aaaa./.a /b/c/a/aaaa./.a
+/b/c/a/aaaa./.. /b/c/a
+/b/c/a/aaaa././ /b/c/a/aaaa.
+/b/c/a/aaaa.//a /b/c/a/aaaa./a
+/b/c/a/aaaa.//. /b/c/a/aaaa.
+/b/c/a/aaaa./// /b/c/a/aaaa.
+/b/c/a/aaaa/aaa /b/c/a/aaaa/aaa
+/b/c/a/aaaa/aa. /b/c/a/aaaa/aa.
+/b/c/a/aaaa/aa/ /b/c/a/aaaa/aa
+/b/c/a/aaaa/a.a /b/c/a/aaaa/a.a
+/b/c/a/aaaa/a.. /b/c/a/aaaa/a..
+/b/c/a/aaaa/a./ /b/c/a/aaaa/a.
+/b/c/a/aaaa/a/a /b/c/a/aaaa/a/a
+/b/c/a/aaaa/a/. /b/c/a/aaaa/a
+/b/c/a/aaaa/a// /b/c/a/aaaa/a
+/b/c/a/aaaa/.aa /b/c/a/aaaa/.aa
+/b/c/a/aaaa/.a. /b/c/a/aaaa/.a.
+/b/c/a/aaaa/.a/ /b/c/a/aaaa/.a
+/b/c/a/aaaa/..a /b/c/a/aaaa/..a
+/b/c/a/aaaa/... /b/c/a/aaaa/...
+/b/c/a/aaaa/../ /b/c/a
+/b/c/a/aaaa/./a /b/c/a/aaaa/a
+/b/c/a/aaaa/./. /b/c/a/aaaa
+/b/c/a/aaaa/.// /b/c/a/aaaa
+/b/c/a/aaaa//aa /b/c/a/aaaa/aa
+/b/c/a/aaaa//a. /b/c/a/aaaa/a.
+/b/c/a/aaaa//a/ /b/c/a/aaaa/a
+/b/c/a/aaaa//.a /b/c/a/aaaa/.a
+/b/c/a/aaaa//.. /b/c/a
+/b/c/a/aaaa//./ /b/c/a/aaaa
+/b/c/a/aaaa///a /b/c/a/aaaa/a
+/b/c/a/aaaa///. /b/c/a/aaaa
+/b/c/a/aaaa//// /b/c/a/aaaa
+/b/c/a/aaa.aaaa /b/c/a/aaa.aaaa
+/b/c/a/aaa.aaa. /b/c/a/aaa.aaa.
+/b/c/a/aaa.aaa/ /b/c/a/aaa.aaa
+/b/c/a/aaa.aa.a /b/c/a/aaa.aa.a
+/b/c/a/aaa.aa.. /b/c/a/aaa.aa..
+/b/c/a/aaa.aa./ /b/c/a/aaa.aa.
+/b/c/a/aaa.aa/a /b/c/a/aaa.aa/a
+/b/c/a/aaa.aa/. /b/c/a/aaa.aa
+/b/c/a/aaa.aa// /b/c/a/aaa.aa
+/b/c/a/aaa.a.aa /b/c/a/aaa.a.aa
+/b/c/a/aaa.a.a. /b/c/a/aaa.a.a.
+/b/c/a/aaa.a.a/ /b/c/a/aaa.a.a
+/b/c/a/aaa.a..a /b/c/a/aaa.a..a
+/b/c/a/aaa.a... /b/c/a/aaa.a...
+/b/c/a/aaa.a../ /b/c/a/aaa.a..
+/b/c/a/aaa.a./a /b/c/a/aaa.a./a
+/b/c/a/aaa.a./. /b/c/a/aaa.a.
+/b/c/a/aaa.a.// /b/c/a/aaa.a.
+/b/c/a/aaa.a/aa /b/c/a/aaa.a/aa
+/b/c/a/aaa.a/a. /b/c/a/aaa.a/a.
+/b/c/a/aaa.a/a/ /b/c/a/aaa.a/a
+/b/c/a/aaa.a/.a /b/c/a/aaa.a/.a
+/b/c/a/aaa.a/.. /b/c/a
+/b/c/a/aaa.a/./ /b/c/a/aaa.a
+/b/c/a/aaa.a//a /b/c/a/aaa.a/a
+/b/c/a/aaa.a//. /b/c/a/aaa.a
+/b/c/a/aaa.a/// /b/c/a/aaa.a
+/b/c/a/aaa..aaa /b/c/a/aaa..aaa
+/b/c/a/aaa..aa. /b/c/a/aaa..aa.
+/b/c/a/aaa..aa/ /b/c/a/aaa..aa
+/b/c/a/aaa..a.a /b/c/a/aaa..a.a
+/b/c/a/aaa..a.. /b/c/a/aaa..a..
+/b/c/a/aaa..a./ /b/c/a/aaa..a.
+/b/c/a/aaa..a/a /b/c/a/aaa..a/a
+/b/c/a/aaa..a/. /b/c/a/aaa..a
+/b/c/a/aaa..a// /b/c/a/aaa..a
+/b/c/a/aaa...aa /b/c/a/aaa...aa
+/b/c/a/aaa...a. /b/c/a/aaa...a.
+/b/c/a/aaa...a/ /b/c/a/aaa...a
+/b/c/a/aaa....a /b/c/a/aaa....a
+/b/c/a/aaa..... /b/c/a/aaa.....
+/b/c/a/aaa..../ /b/c/a/aaa....
+/b/c/a/aaa.../a /b/c/a/aaa.../a
+/b/c/a/aaa.../. /b/c/a/aaa...
+/b/c/a/aaa...// /b/c/a/aaa...
+/b/c/a/aaa../aa /b/c/a/aaa../aa
+/b/c/a/aaa../a. /b/c/a/aaa../a.
+/b/c/a/aaa../a/ /b/c/a/aaa../a
+/b/c/a/aaa../.a /b/c/a/aaa../.a
+/b/c/a/aaa../.. /b/c/a
+/b/c/a/aaa.././ /b/c/a/aaa..
+/b/c/a/aaa..//a /b/c/a/aaa../a
+/b/c/a/aaa..//. /b/c/a/aaa..
+/b/c/a/aaa../// /b/c/a/aaa..
+/b/c/a/aaa./aaa /b/c/a/aaa./aaa
+/b/c/a/aaa./aa. /b/c/a/aaa./aa.
+/b/c/a/aaa./aa/ /b/c/a/aaa./aa
+/b/c/a/aaa./a.a /b/c/a/aaa./a.a
+/b/c/a/aaa./a.. /b/c/a/aaa./a..
+/b/c/a/aaa./a./ /b/c/a/aaa./a.
+/b/c/a/aaa./a/a /b/c/a/aaa./a/a
+/b/c/a/aaa./a/. /b/c/a/aaa./a
+/b/c/a/aaa./a// /b/c/a/aaa./a
+/b/c/a/aaa./.aa /b/c/a/aaa./.aa
+/b/c/a/aaa./.a. /b/c/a/aaa./.a.
+/b/c/a/aaa./.a/ /b/c/a/aaa./.a
+/b/c/a/aaa./..a /b/c/a/aaa./..a
+/b/c/a/aaa./... /b/c/a/aaa./...
+/b/c/a/aaa./../ /b/c/a
+/b/c/a/aaa././a /b/c/a/aaa./a
+/b/c/a/aaa././. /b/c/a/aaa.
+/b/c/a/aaa./.// /b/c/a/aaa.
+/b/c/a/aaa.//aa /b/c/a/aaa./aa
+/b/c/a/aaa.//a. /b/c/a/aaa./a.
+/b/c/a/aaa.//a/ /b/c/a/aaa./a
+/b/c/a/aaa.//.a /b/c/a/aaa./.a
+/b/c/a/aaa.//.. /b/c/a
+/b/c/a/aaa.//./ /b/c/a/aaa.
+/b/c/a/aaa.///a /b/c/a/aaa./a
+/b/c/a/aaa.///. /b/c/a/aaa.
+/b/c/a/aaa.//// /b/c/a/aaa.
+/b/c/a/aaa/aaaa /b/c/a/aaa/aaaa
+/b/c/a/aaa/aaa. /b/c/a/aaa/aaa.
+/b/c/a/aaa/aaa/ /b/c/a/aaa/aaa
+/b/c/a/aaa/aa.a /b/c/a/aaa/aa.a
+/b/c/a/aaa/aa.. /b/c/a/aaa/aa..
+/b/c/a/aaa/aa./ /b/c/a/aaa/aa.
+/b/c/a/aaa/aa/a /b/c/a/aaa/aa/a
+/b/c/a/aaa/aa/. /b/c/a/aaa/aa
+/b/c/a/aaa/aa// /b/c/a/aaa/aa
+/b/c/a/aaa/a.aa /b/c/a/aaa/a.aa
+/b/c/a/aaa/a.a. /b/c/a/aaa/a.a.
+/b/c/a/aaa/a.a/ /b/c/a/aaa/a.a
+/b/c/a/aaa/a..a /b/c/a/aaa/a..a
+/b/c/a/aaa/a... /b/c/a/aaa/a...
+/b/c/a/aaa/a../ /b/c/a/aaa/a..
+/b/c/a/aaa/a./a /b/c/a/aaa/a./a
+/b/c/a/aaa/a./. /b/c/a/aaa/a.
+/b/c/a/aaa/a.// /b/c/a/aaa/a.
+/b/c/a/aaa/a/aa /b/c/a/aaa/a/aa
+/b/c/a/aaa/a/a. /b/c/a/aaa/a/a.
+/b/c/a/aaa/a/a/ /b/c/a/aaa/a/a
+/b/c/a/aaa/a/.a /b/c/a/aaa/a/.a
+/b/c/a/aaa/a/.. /b/c/a/aaa
+/b/c/a/aaa/a/./ /b/c/a/aaa/a
+/b/c/a/aaa/a//a /b/c/a/aaa/a/a
+/b/c/a/aaa/a//. /b/c/a/aaa/a
+/b/c/a/aaa/a/// /b/c/a/aaa/a
+/b/c/a/aaa/.aaa /b/c/a/aaa/.aaa
+/b/c/a/aaa/.aa. /b/c/a/aaa/.aa.
+/b/c/a/aaa/.aa/ /b/c/a/aaa/.aa
+/b/c/a/aaa/.a.a /b/c/a/aaa/.a.a
+/b/c/a/aaa/.a.. /b/c/a/aaa/.a..
+/b/c/a/aaa/.a./ /b/c/a/aaa/.a.
+/b/c/a/aaa/.a/a /b/c/a/aaa/.a/a
+/b/c/a/aaa/.a/. /b/c/a/aaa/.a
+/b/c/a/aaa/.a// /b/c/a/aaa/.a
+/b/c/a/aaa/..aa /b/c/a/aaa/..aa
+/b/c/a/aaa/..a. /b/c/a/aaa/..a.
+/b/c/a/aaa/..a/ /b/c/a/aaa/..a
+/b/c/a/aaa/...a /b/c/a/aaa/...a
+/b/c/a/aaa/.... /b/c/a/aaa/....
+/b/c/a/aaa/.../ /b/c/a/aaa/...
+/b/c/a/aaa/../a /b/c/a/a
+/b/c/a/aaa/../. /b/c/a
+/b/c/a/aaa/..// /b/c/a
+/b/c/a/aaa/./aa /b/c/a/aaa/aa
+/b/c/a/aaa/./a. /b/c/a/aaa/a.
+/b/c/a/aaa/./a/ /b/c/a/aaa/a
+/b/c/a/aaa/./.a /b/c/a/aaa/.a
+/b/c/a/aaa/./.. /b/c/a
+/b/c/a/aaa/././ /b/c/a/aaa
+/b/c/a/aaa/.//a /b/c/a/aaa/a
+/b/c/a/aaa/.//. /b/c/a/aaa
+/b/c/a/aaa/./// /b/c/a/aaa
+/b/c/a/aaa//aaa /b/c/a/aaa/aaa
+/b/c/a/aaa//aa. /b/c/a/aaa/aa.
+/b/c/a/aaa//aa/ /b/c/a/aaa/aa
+/b/c/a/aaa//a.a /b/c/a/aaa/a.a
+/b/c/a/aaa//a.. /b/c/a/aaa/a..
+/b/c/a/aaa//a./ /b/c/a/aaa/a.
+/b/c/a/aaa//a/a /b/c/a/aaa/a/a
+/b/c/a/aaa//a/. /b/c/a/aaa/a
+/b/c/a/aaa//a// /b/c/a/aaa/a
+/b/c/a/aaa//.aa /b/c/a/aaa/.aa
+/b/c/a/aaa//.a. /b/c/a/aaa/.a.
+/b/c/a/aaa//.a/ /b/c/a/aaa/.a
+/b/c/a/aaa//..a /b/c/a/aaa/..a
+/b/c/a/aaa//... /b/c/a/aaa/...
+/b/c/a/aaa//../ /b/c/a
+/b/c/a/aaa//./a /b/c/a/aaa/a
+/b/c/a/aaa//./. /b/c/a/aaa
+/b/c/a/aaa//.// /b/c/a/aaa
+/b/c/a/aaa///aa /b/c/a/aaa/aa
+/b/c/a/aaa///a. /b/c/a/aaa/a.
+/b/c/a/aaa///a/ /b/c/a/aaa/a
+/b/c/a/aaa///.a /b/c/a/aaa/.a
+/b/c/a/aaa///.. /b/c/a
+/b/c/a/aaa///./ /b/c/a/aaa
+/b/c/a/aaa////a /b/c/a/aaa/a
+/b/c/a/aaa////. /b/c/a/aaa
+/b/c/a/aaa///// /b/c/a/aaa
+/b/c/a/aa.aaaaa /b/c/a/aa.aaaaa
+/b/c/a/aa.aaaa. /b/c/a/aa.aaaa.
+/b/c/a/aa.aaaa/ /b/c/a/aa.aaaa
+/b/c/a/aa.aaa.a /b/c/a/aa.aaa.a
+/b/c/a/aa.aaa.. /b/c/a/aa.aaa..
+/b/c/a/aa.aaa./ /b/c/a/aa.aaa.
+/b/c/a/aa.aaa/a /b/c/a/aa.aaa/a
+/b/c/a/aa.aaa/. /b/c/a/aa.aaa
+/b/c/a/aa.aaa// /b/c/a/aa.aaa
+/b/c/a/aa.aa.aa /b/c/a/aa.aa.aa
+/b/c/a/aa.aa.a. /b/c/a/aa.aa.a.
+/b/c/a/aa.aa.a/ /b/c/a/aa.aa.a
+/b/c/a/aa.aa..a /b/c/a/aa.aa..a
+/b/c/a/aa.aa... /b/c/a/aa.aa...
+/b/c/a/aa.aa../ /b/c/a/aa.aa..
+/b/c/a/aa.aa./a /b/c/a/aa.aa./a
+/b/c/a/aa.aa./. /b/c/a/aa.aa.
+/b/c/a/aa.aa.// /b/c/a/aa.aa.
+/b/c/a/aa.aa/aa /b/c/a/aa.aa/aa
+/b/c/a/aa.aa/a. /b/c/a/aa.aa/a.
+/b/c/a/aa.aa/a/ /b/c/a/aa.aa/a
+/b/c/a/aa.aa/.a /b/c/a/aa.aa/.a
+/b/c/a/aa.aa/.. /b/c/a
+/b/c/a/aa.aa/./ /b/c/a/aa.aa
+/b/c/a/aa.aa//a /b/c/a/aa.aa/a
+/b/c/a/aa.aa//. /b/c/a/aa.aa
+/b/c/a/aa.aa/// /b/c/a/aa.aa
+/b/c/a/aa.a.aaa /b/c/a/aa.a.aaa
+/b/c/a/aa.a.aa. /b/c/a/aa.a.aa.
+/b/c/a/aa.a.aa/ /b/c/a/aa.a.aa
+/b/c/a/aa.a.a.a /b/c/a/aa.a.a.a
+/b/c/a/aa.a.a.. /b/c/a/aa.a.a..
+/b/c/a/aa.a.a./ /b/c/a/aa.a.a.
+/b/c/a/aa.a.a/a /b/c/a/aa.a.a/a
+/b/c/a/aa.a.a/. /b/c/a/aa.a.a
+/b/c/a/aa.a.a// /b/c/a/aa.a.a
+/b/c/a/aa.a..aa /b/c/a/aa.a..aa
+/b/c/a/aa.a..a. /b/c/a/aa.a..a.
+/b/c/a/aa.a..a/ /b/c/a/aa.a..a
+/b/c/a/aa.a...a /b/c/a/aa.a...a
+/b/c/a/aa.a.... /b/c/a/aa.a....
+/b/c/a/aa.a.../ /b/c/a/aa.a...
+/b/c/a/aa.a../a /b/c/a/aa.a../a
+/b/c/a/aa.a../. /b/c/a/aa.a..
+/b/c/a/aa.a..// /b/c/a/aa.a..
+/b/c/a/aa.a./aa /b/c/a/aa.a./aa
+/b/c/a/aa.a./a. /b/c/a/aa.a./a.
+/b/c/a/aa.a./a/ /b/c/a/aa.a./a
+/b/c/a/aa.a./.a /b/c/a/aa.a./.a
+/b/c/a/aa.a./.. /b/c/a
+/b/c/a/aa.a././ /b/c/a/aa.a.
+/b/c/a/aa.a.//a /b/c/a/aa.a./a
+/b/c/a/aa.a.//. /b/c/a/aa.a.
+/b/c/a/aa.a./// /b/c/a/aa.a.
+/b/c/a/aa.a/aaa /b/c/a/aa.a/aaa
+/b/c/a/aa.a/aa. /b/c/a/aa.a/aa.
+/b/c/a/aa.a/aa/ /b/c/a/aa.a/aa
+/b/c/a/aa.a/a.a /b/c/a/aa.a/a.a
+/b/c/a/aa.a/a.. /b/c/a/aa.a/a..
+/b/c/a/aa.a/a./ /b/c/a/aa.a/a.
+/b/c/a/aa.a/a/a /b/c/a/aa.a/a/a
+/b/c/a/aa.a/a/. /b/c/a/aa.a/a
+/b/c/a/aa.a/a// /b/c/a/aa.a/a
+/b/c/a/aa.a/.aa /b/c/a/aa.a/.aa
+/b/c/a/aa.a/.a. /b/c/a/aa.a/.a.
+/b/c/a/aa.a/.a/ /b/c/a/aa.a/.a
+/b/c/a/aa.a/..a /b/c/a/aa.a/..a
+/b/c/a/aa.a/... /b/c/a/aa.a/...
+/b/c/a/aa.a/../ /b/c/a
+/b/c/a/aa.a/./a /b/c/a/aa.a/a
+/b/c/a/aa.a/./. /b/c/a/aa.a
+/b/c/a/aa.a/.// /b/c/a/aa.a
+/b/c/a/aa.a//aa /b/c/a/aa.a/aa
+/b/c/a/aa.a//a. /b/c/a/aa.a/a.
+/b/c/a/aa.a//a/ /b/c/a/aa.a/a
+/b/c/a/aa.a//.a /b/c/a/aa.a/.a
+/b/c/a/aa.a//.. /b/c/a
+/b/c/a/aa.a//./ /b/c/a/aa.a
+/b/c/a/aa.a///a /b/c/a/aa.a/a
+/b/c/a/aa.a///. /b/c/a/aa.a
+/b/c/a/aa.a//// /b/c/a/aa.a
+/b/c/a/aa..aaaa /b/c/a/aa..aaaa
+/b/c/a/aa..aaa. /b/c/a/aa..aaa.
+/b/c/a/aa..aaa/ /b/c/a/aa..aaa
+/b/c/a/aa..aa.a /b/c/a/aa..aa.a
+/b/c/a/aa..aa.. /b/c/a/aa..aa..
+/b/c/a/aa..aa./ /b/c/a/aa..aa.
+/b/c/a/aa..aa/a /b/c/a/aa..aa/a
+/b/c/a/aa..aa/. /b/c/a/aa..aa
+/b/c/a/aa..aa// /b/c/a/aa..aa
+/b/c/a/aa..a.aa /b/c/a/aa..a.aa
+/b/c/a/aa..a.a. /b/c/a/aa..a.a.
+/b/c/a/aa..a.a/ /b/c/a/aa..a.a
+/b/c/a/aa..a..a /b/c/a/aa..a..a
+/b/c/a/aa..a... /b/c/a/aa..a...
+/b/c/a/aa..a../ /b/c/a/aa..a..
+/b/c/a/aa..a./a /b/c/a/aa..a./a
+/b/c/a/aa..a./. /b/c/a/aa..a.
+/b/c/a/aa..a.// /b/c/a/aa..a.
+/b/c/a/aa..a/aa /b/c/a/aa..a/aa
+/b/c/a/aa..a/a. /b/c/a/aa..a/a.
+/b/c/a/aa..a/a/ /b/c/a/aa..a/a
+/b/c/a/aa..a/.a /b/c/a/aa..a/.a
+/b/c/a/aa..a/.. /b/c/a
+/b/c/a/aa..a/./ /b/c/a/aa..a
+/b/c/a/aa..a//a /b/c/a/aa..a/a
+/b/c/a/aa..a//. /b/c/a/aa..a
+/b/c/a/aa..a/// /b/c/a/aa..a
+/b/c/a/aa...aaa /b/c/a/aa...aaa
+/b/c/a/aa...aa. /b/c/a/aa...aa.
+/b/c/a/aa...aa/ /b/c/a/aa...aa
+/b/c/a/aa...a.a /b/c/a/aa...a.a
+/b/c/a/aa...a.. /b/c/a/aa...a..
+/b/c/a/aa...a./ /b/c/a/aa...a.
+/b/c/a/aa...a/a /b/c/a/aa...a/a
+/b/c/a/aa...a/. /b/c/a/aa...a
+/b/c/a/aa...a// /b/c/a/aa...a
+/b/c/a/aa....aa /b/c/a/aa....aa
+/b/c/a/aa....a. /b/c/a/aa....a.
+/b/c/a/aa....a/ /b/c/a/aa....a
+/b/c/a/aa.....a /b/c/a/aa.....a
+/b/c/a/aa...... /b/c/a/aa......
+/b/c/a/aa...../ /b/c/a/aa.....
+/b/c/a/aa..../a /b/c/a/aa..../a
+/b/c/a/aa..../. /b/c/a/aa....
+/b/c/a/aa....// /b/c/a/aa....
+/b/c/a/aa.../aa /b/c/a/aa.../aa
+/b/c/a/aa.../a. /b/c/a/aa.../a.
+/b/c/a/aa.../a/ /b/c/a/aa.../a
+/b/c/a/aa.../.a /b/c/a/aa.../.a
+/b/c/a/aa.../.. /b/c/a
+/b/c/a/aa..././ /b/c/a/aa...
+/b/c/a/aa...//a /b/c/a/aa.../a
+/b/c/a/aa...//. /b/c/a/aa...
+/b/c/a/aa.../// /b/c/a/aa...
+/b/c/a/aa../aaa /b/c/a/aa../aaa
+/b/c/a/aa../aa. /b/c/a/aa../aa.
+/b/c/a/aa../aa/ /b/c/a/aa../aa
+/b/c/a/aa../a.a /b/c/a/aa../a.a
+/b/c/a/aa../a.. /b/c/a/aa../a..
+/b/c/a/aa../a./ /b/c/a/aa../a.
+/b/c/a/aa../a/a /b/c/a/aa../a/a
+/b/c/a/aa../a/. /b/c/a/aa../a
+/b/c/a/aa../a// /b/c/a/aa../a
+/b/c/a/aa../.aa /b/c/a/aa../.aa
+/b/c/a/aa../.a. /b/c/a/aa../.a.
+/b/c/a/aa../.a/ /b/c/a/aa../.a
+/b/c/a/aa../..a /b/c/a/aa../..a
+/b/c/a/aa../... /b/c/a/aa../...
+/b/c/a/aa../../ /b/c/a
+/b/c/a/aa.././a /b/c/a/aa../a
+/b/c/a/aa.././. /b/c/a/aa..
+/b/c/a/aa../.// /b/c/a/aa..
+/b/c/a/aa..//aa /b/c/a/aa../aa
+/b/c/a/aa..//a. /b/c/a/aa../a.
+/b/c/a/aa..//a/ /b/c/a/aa../a
+/b/c/a/aa..//.a /b/c/a/aa../.a
+/b/c/a/aa..//.. /b/c/a
+/b/c/a/aa..//./ /b/c/a/aa..
+/b/c/a/aa..///a /b/c/a/aa../a
+/b/c/a/aa..///. /b/c/a/aa..
+/b/c/a/aa..//// /b/c/a/aa..
+/b/c/a/aa./aaaa /b/c/a/aa./aaaa
+/b/c/a/aa./aaa. /b/c/a/aa./aaa.
+/b/c/a/aa./aaa/ /b/c/a/aa./aaa
+/b/c/a/aa./aa.a /b/c/a/aa./aa.a
+/b/c/a/aa./aa.. /b/c/a/aa./aa..
+/b/c/a/aa./aa./ /b/c/a/aa./aa.
+/b/c/a/aa./aa/a /b/c/a/aa./aa/a
+/b/c/a/aa./aa/. /b/c/a/aa./aa
+/b/c/a/aa./aa// /b/c/a/aa./aa
+/b/c/a/aa./a.aa /b/c/a/aa./a.aa
+/b/c/a/aa./a.a. /b/c/a/aa./a.a.
+/b/c/a/aa./a.a/ /b/c/a/aa./a.a
+/b/c/a/aa./a..a /b/c/a/aa./a..a
+/b/c/a/aa./a... /b/c/a/aa./a...
+/b/c/a/aa./a../ /b/c/a/aa./a..
+/b/c/a/aa./a./a /b/c/a/aa./a./a
+/b/c/a/aa./a./. /b/c/a/aa./a.
+/b/c/a/aa./a.// /b/c/a/aa./a.
+/b/c/a/aa./a/aa /b/c/a/aa./a/aa
+/b/c/a/aa./a/a. /b/c/a/aa./a/a.
+/b/c/a/aa./a/a/ /b/c/a/aa./a/a
+/b/c/a/aa./a/.a /b/c/a/aa./a/.a
+/b/c/a/aa./a/.. /b/c/a/aa.
+/b/c/a/aa./a/./ /b/c/a/aa./a
+/b/c/a/aa./a//a /b/c/a/aa./a/a
+/b/c/a/aa./a//. /b/c/a/aa./a
+/b/c/a/aa./a/// /b/c/a/aa./a
+/b/c/a/aa./.aaa /b/c/a/aa./.aaa
+/b/c/a/aa./.aa. /b/c/a/aa./.aa.
+/b/c/a/aa./.aa/ /b/c/a/aa./.aa
+/b/c/a/aa./.a.a /b/c/a/aa./.a.a
+/b/c/a/aa./.a.. /b/c/a/aa./.a..
+/b/c/a/aa./.a./ /b/c/a/aa./.a.
+/b/c/a/aa./.a/a /b/c/a/aa./.a/a
+/b/c/a/aa./.a/. /b/c/a/aa./.a
+/b/c/a/aa./.a// /b/c/a/aa./.a
+/b/c/a/aa./..aa /b/c/a/aa./..aa
+/b/c/a/aa./..a. /b/c/a/aa./..a.
+/b/c/a/aa./..a/ /b/c/a/aa./..a
+/b/c/a/aa./...a /b/c/a/aa./...a
+/b/c/a/aa./.... /b/c/a/aa./....
+/b/c/a/aa./.../ /b/c/a/aa./...
+/b/c/a/aa./../a /b/c/a/a
+/b/c/a/aa./../. /b/c/a
+/b/c/a/aa./..// /b/c/a
+/b/c/a/aa././aa /b/c/a/aa./aa
+/b/c/a/aa././a. /b/c/a/aa./a.
+/b/c/a/aa././a/ /b/c/a/aa./a
+/b/c/a/aa././.a /b/c/a/aa./.a
+/b/c/a/aa././.. /b/c/a
+/b/c/a/aa./././ /b/c/a/aa.
+/b/c/a/aa././/a /b/c/a/aa./a
+/b/c/a/aa././/. /b/c/a/aa.
+/b/c/a/aa././// /b/c/a/aa.
+/b/c/a/aa.//aaa /b/c/a/aa./aaa
+/b/c/a/aa.//aa. /b/c/a/aa./aa.
+/b/c/a/aa.//aa/ /b/c/a/aa./aa
+/b/c/a/aa.//a.a /b/c/a/aa./a.a
+/b/c/a/aa.//a.. /b/c/a/aa./a..
+/b/c/a/aa.//a./ /b/c/a/aa./a.
+/b/c/a/aa.//a/a /b/c/a/aa./a/a
+/b/c/a/aa.//a/. /b/c/a/aa./a
+/b/c/a/aa.//a// /b/c/a/aa./a
+/b/c/a/aa.//.aa /b/c/a/aa./.aa
+/b/c/a/aa.//.a. /b/c/a/aa./.a.
+/b/c/a/aa.//.a/ /b/c/a/aa./.a
+/b/c/a/aa.//..a /b/c/a/aa./..a
+/b/c/a/aa.//... /b/c/a/aa./...
+/b/c/a/aa.//../ /b/c/a
+/b/c/a/aa.//./a /b/c/a/aa./a
+/b/c/a/aa.//./. /b/c/a/aa.
+/b/c/a/aa.//.// /b/c/a/aa.
+/b/c/a/aa.///aa /b/c/a/aa./aa
+/b/c/a/aa.///a. /b/c/a/aa./a.
+/b/c/a/aa.///a/ /b/c/a/aa./a
+/b/c/a/aa.///.a /b/c/a/aa./.a
+/b/c/a/aa.///.. /b/c/a
+/b/c/a/aa.///./ /b/c/a/aa.
+/b/c/a/aa.////a /b/c/a/aa./a
+/b/c/a/aa.////. /b/c/a/aa.
+/b/c/a/aa.///// /b/c/a/aa.
+/b/c/a/aa/aaaaa /b/c/a/aa/aaaaa
+/b/c/a/aa/aaaa. /b/c/a/aa/aaaa.
+/b/c/a/aa/aaaa/ /b/c/a/aa/aaaa
+/b/c/a/aa/aaa.a /b/c/a/aa/aaa.a
+/b/c/a/aa/aaa.. /b/c/a/aa/aaa..
+/b/c/a/aa/aaa./ /b/c/a/aa/aaa.
+/b/c/a/aa/aaa/a /b/c/a/aa/aaa/a
+/b/c/a/aa/aaa/. /b/c/a/aa/aaa
+/b/c/a/aa/aaa// /b/c/a/aa/aaa
+/b/c/a/aa/aa.aa /b/c/a/aa/aa.aa
+/b/c/a/aa/aa.a. /b/c/a/aa/aa.a.
+/b/c/a/aa/aa.a/ /b/c/a/aa/aa.a
+/b/c/a/aa/aa..a /b/c/a/aa/aa..a
+/b/c/a/aa/aa... /b/c/a/aa/aa...
+/b/c/a/aa/aa../ /b/c/a/aa/aa..
+/b/c/a/aa/aa./a /b/c/a/aa/aa./a
+/b/c/a/aa/aa./. /b/c/a/aa/aa.
+/b/c/a/aa/aa.// /b/c/a/aa/aa.
+/b/c/a/aa/aa/aa /b/c/a/aa/aa/aa
+/b/c/a/aa/aa/a. /b/c/a/aa/aa/a.
+/b/c/a/aa/aa/a/ /b/c/a/aa/aa/a
+/b/c/a/aa/aa/.a /b/c/a/aa/aa/.a
+/b/c/a/aa/aa/.. /b/c/a/aa
+/b/c/a/aa/aa/./ /b/c/a/aa/aa
+/b/c/a/aa/aa//a /b/c/a/aa/aa/a
+/b/c/a/aa/aa//. /b/c/a/aa/aa
+/b/c/a/aa/aa/// /b/c/a/aa/aa
+/b/c/a/aa/a.aaa /b/c/a/aa/a.aaa
+/b/c/a/aa/a.aa. /b/c/a/aa/a.aa.
+/b/c/a/aa/a.aa/ /b/c/a/aa/a.aa
+/b/c/a/aa/a.a.a /b/c/a/aa/a.a.a
+/b/c/a/aa/a.a.. /b/c/a/aa/a.a..
+/b/c/a/aa/a.a./ /b/c/a/aa/a.a.
+/b/c/a/aa/a.a/a /b/c/a/aa/a.a/a
+/b/c/a/aa/a.a/. /b/c/a/aa/a.a
+/b/c/a/aa/a.a// /b/c/a/aa/a.a
+/b/c/a/aa/a..aa /b/c/a/aa/a..aa
+/b/c/a/aa/a..a. /b/c/a/aa/a..a.
+/b/c/a/aa/a..a/ /b/c/a/aa/a..a
+/b/c/a/aa/a...a /b/c/a/aa/a...a
+/b/c/a/aa/a.... /b/c/a/aa/a....
+/b/c/a/aa/a.../ /b/c/a/aa/a...
+/b/c/a/aa/a../a /b/c/a/aa/a../a
+/b/c/a/aa/a../. /b/c/a/aa/a..
+/b/c/a/aa/a..// /b/c/a/aa/a..
+/b/c/a/aa/a./aa /b/c/a/aa/a./aa
+/b/c/a/aa/a./a. /b/c/a/aa/a./a.
+/b/c/a/aa/a./a/ /b/c/a/aa/a./a
+/b/c/a/aa/a./.a /b/c/a/aa/a./.a
+/b/c/a/aa/a./.. /b/c/a/aa
+/b/c/a/aa/a././ /b/c/a/aa/a.
+/b/c/a/aa/a.//a /b/c/a/aa/a./a
+/b/c/a/aa/a.//. /b/c/a/aa/a.
+/b/c/a/aa/a./// /b/c/a/aa/a.
+/b/c/a/aa/a/aaa /b/c/a/aa/a/aaa
+/b/c/a/aa/a/aa. /b/c/a/aa/a/aa.
+/b/c/a/aa/a/aa/ /b/c/a/aa/a/aa
+/b/c/a/aa/a/a.a /b/c/a/aa/a/a.a
+/b/c/a/aa/a/a.. /b/c/a/aa/a/a..
+/b/c/a/aa/a/a./ /b/c/a/aa/a/a.
+/b/c/a/aa/a/a/a /b/c/a/aa/a/a/a
+/b/c/a/aa/a/a/. /b/c/a/aa/a/a
+/b/c/a/aa/a/a// /b/c/a/aa/a/a
+/b/c/a/aa/a/.aa /b/c/a/aa/a/.aa
+/b/c/a/aa/a/.a. /b/c/a/aa/a/.a.
+/b/c/a/aa/a/.a/ /b/c/a/aa/a/.a
+/b/c/a/aa/a/..a /b/c/a/aa/a/..a
+/b/c/a/aa/a/... /b/c/a/aa/a/...
+/b/c/a/aa/a/../ /b/c/a/aa
+/b/c/a/aa/a/./a /b/c/a/aa/a/a
+/b/c/a/aa/a/./. /b/c/a/aa/a
+/b/c/a/aa/a/.// /b/c/a/aa/a
+/b/c/a/aa/a//aa /b/c/a/aa/a/aa
+/b/c/a/aa/a//a. /b/c/a/aa/a/a.
+/b/c/a/aa/a//a/ /b/c/a/aa/a/a
+/b/c/a/aa/a//.a /b/c/a/aa/a/.a
+/b/c/a/aa/a//.. /b/c/a/aa
+/b/c/a/aa/a//./ /b/c/a/aa/a
+/b/c/a/aa/a///a /b/c/a/aa/a/a
+/b/c/a/aa/a///. /b/c/a/aa/a
+/b/c/a/aa/a//// /b/c/a/aa/a
+/b/c/a/aa/.aaaa /b/c/a/aa/.aaaa
+/b/c/a/aa/.aaa. /b/c/a/aa/.aaa.
+/b/c/a/aa/.aaa/ /b/c/a/aa/.aaa
+/b/c/a/aa/.aa.a /b/c/a/aa/.aa.a
+/b/c/a/aa/.aa.. /b/c/a/aa/.aa..
+/b/c/a/aa/.aa./ /b/c/a/aa/.aa.
+/b/c/a/aa/.aa/a /b/c/a/aa/.aa/a
+/b/c/a/aa/.aa/. /b/c/a/aa/.aa
+/b/c/a/aa/.aa// /b/c/a/aa/.aa
+/b/c/a/aa/.a.aa /b/c/a/aa/.a.aa
+/b/c/a/aa/.a.a. /b/c/a/aa/.a.a.
+/b/c/a/aa/.a.a/ /b/c/a/aa/.a.a
+/b/c/a/aa/.a..a /b/c/a/aa/.a..a
+/b/c/a/aa/.a... /b/c/a/aa/.a...
+/b/c/a/aa/.a../ /b/c/a/aa/.a..
+/b/c/a/aa/.a./a /b/c/a/aa/.a./a
+/b/c/a/aa/.a./. /b/c/a/aa/.a.
+/b/c/a/aa/.a.// /b/c/a/aa/.a.
+/b/c/a/aa/.a/aa /b/c/a/aa/.a/aa
+/b/c/a/aa/.a/a. /b/c/a/aa/.a/a.
+/b/c/a/aa/.a/a/ /b/c/a/aa/.a/a
+/b/c/a/aa/.a/.a /b/c/a/aa/.a/.a
+/b/c/a/aa/.a/.. /b/c/a/aa
+/b/c/a/aa/.a/./ /b/c/a/aa/.a
+/b/c/a/aa/.a//a /b/c/a/aa/.a/a
+/b/c/a/aa/.a//. /b/c/a/aa/.a
+/b/c/a/aa/.a/// /b/c/a/aa/.a
+/b/c/a/aa/..aaa /b/c/a/aa/..aaa
+/b/c/a/aa/..aa. /b/c/a/aa/..aa.
+/b/c/a/aa/..aa/ /b/c/a/aa/..aa
+/b/c/a/aa/..a.a /b/c/a/aa/..a.a
+/b/c/a/aa/..a.. /b/c/a/aa/..a..
+/b/c/a/aa/..a./ /b/c/a/aa/..a.
+/b/c/a/aa/..a/a /b/c/a/aa/..a/a
+/b/c/a/aa/..a/. /b/c/a/aa/..a
+/b/c/a/aa/..a// /b/c/a/aa/..a
+/b/c/a/aa/...aa /b/c/a/aa/...aa
+/b/c/a/aa/...a. /b/c/a/aa/...a.
+/b/c/a/aa/...a/ /b/c/a/aa/...a
+/b/c/a/aa/....a /b/c/a/aa/....a
+/b/c/a/aa/..... /b/c/a/aa/.....
+/b/c/a/aa/..../ /b/c/a/aa/....
+/b/c/a/aa/.../a /b/c/a/aa/.../a
+/b/c/a/aa/.../. /b/c/a/aa/...
+/b/c/a/aa/...// /b/c/a/aa/...
+/b/c/a/aa/../aa /b/c/a/aa
+/b/c/a/aa/../a. /b/c/a/a.
+/b/c/a/aa/../a/ /b/c/a/a
+/b/c/a/aa/../.a /b/c/a/.a
+/b/c/a/aa/../.. /b/c
+/b/c/a/aa/.././ /b/c/a
+/b/c/a/aa/..//a /b/c/a/a
+/b/c/a/aa/..//. /b/c/a
+/b/c/a/aa/../// /b/c/a
+/b/c/a/aa/./aaa /b/c/a/aa/aaa
+/b/c/a/aa/./aa. /b/c/a/aa/aa.
+/b/c/a/aa/./aa/ /b/c/a/aa/aa
+/b/c/a/aa/./a.a /b/c/a/aa/a.a
+/b/c/a/aa/./a.. /b/c/a/aa/a..
+/b/c/a/aa/./a./ /b/c/a/aa/a.
+/b/c/a/aa/./a/a /b/c/a/aa/a/a
+/b/c/a/aa/./a/. /b/c/a/aa/a
+/b/c/a/aa/./a// /b/c/a/aa/a
+/b/c/a/aa/./.aa /b/c/a/aa/.aa
+/b/c/a/aa/./.a. /b/c/a/aa/.a.
+/b/c/a/aa/./.a/ /b/c/a/aa/.a
+/b/c/a/aa/./..a /b/c/a/aa/..a
+/b/c/a/aa/./... /b/c/a/aa/...
+/b/c/a/aa/./../ /b/c/a
+/b/c/a/aa/././a /b/c/a/aa/a
+/b/c/a/aa/././. /b/c/a/aa
+/b/c/a/aa/./.// /b/c/a/aa
+/b/c/a/aa/.//aa /b/c/a/aa/aa
+/b/c/a/aa/.//a. /b/c/a/aa/a.
+/b/c/a/aa/.//a/ /b/c/a/aa/a
+/b/c/a/aa/.//.a /b/c/a/aa/.a
+/b/c/a/aa/.//.. /b/c/a
+/b/c/a/aa/.//./ /b/c/a/aa
+/b/c/a/aa/.///a /b/c/a/aa/a
+/b/c/a/aa/.///. /b/c/a/aa
+/b/c/a/aa/.//// /b/c/a/aa
+/b/c/a/aa//aaaa /b/c/a/aa/aaaa
+/b/c/a/aa//aaa. /b/c/a/aa/aaa.
+/b/c/a/aa//aaa/ /b/c/a/aa/aaa
+/b/c/a/aa//aa.a /b/c/a/aa/aa.a
+/b/c/a/aa//aa.. /b/c/a/aa/aa..
+/b/c/a/aa//aa./ /b/c/a/aa/aa.
+/b/c/a/aa//aa/a /b/c/a/aa/aa/a
+/b/c/a/aa//aa/. /b/c/a/aa/aa
+/b/c/a/aa//aa// /b/c/a/aa/aa
+/b/c/a/aa//a.aa /b/c/a/aa/a.aa
+/b/c/a/aa//a.a. /b/c/a/aa/a.a.
+/b/c/a/aa//a.a/ /b/c/a/aa/a.a
+/b/c/a/aa//a..a /b/c/a/aa/a..a
+/b/c/a/aa//a... /b/c/a/aa/a...
+/b/c/a/aa//a../ /b/c/a/aa/a..
+/b/c/a/aa//a./a /b/c/a/aa/a./a
+/b/c/a/aa//a./. /b/c/a/aa/a.
+/b/c/a/aa//a.// /b/c/a/aa/a.
+/b/c/a/aa//a/aa /b/c/a/aa/a/aa
+/b/c/a/aa//a/a. /b/c/a/aa/a/a.
+/b/c/a/aa//a/a/ /b/c/a/aa/a/a
+/b/c/a/aa//a/.a /b/c/a/aa/a/.a
+/b/c/a/aa//a/.. /b/c/a/aa
+/b/c/a/aa//a/./ /b/c/a/aa/a
+/b/c/a/aa//a//a /b/c/a/aa/a/a
+/b/c/a/aa//a//. /b/c/a/aa/a
+/b/c/a/aa//a/// /b/c/a/aa/a
+/b/c/a/aa//.aaa /b/c/a/aa/.aaa
+/b/c/a/aa//.aa. /b/c/a/aa/.aa.
+/b/c/a/aa//.aa/ /b/c/a/aa/.aa
+/b/c/a/aa//.a.a /b/c/a/aa/.a.a
+/b/c/a/aa//.a.. /b/c/a/aa/.a..
+/b/c/a/aa//.a./ /b/c/a/aa/.a.
+/b/c/a/aa//.a/a /b/c/a/aa/.a/a
+/b/c/a/aa//.a/. /b/c/a/aa/.a
+/b/c/a/aa//.a// /b/c/a/aa/.a
+/b/c/a/aa//..aa /b/c/a/aa/..aa
+/b/c/a/aa//..a. /b/c/a/aa/..a.
+/b/c/a/aa//..a/ /b/c/a/aa/..a
+/b/c/a/aa//...a /b/c/a/aa/...a
+/b/c/a/aa//.... /b/c/a/aa/....
+/b/c/a/aa//.../ /b/c/a/aa/...
+/b/c/a/aa//../a /b/c/a/a
+/b/c/a/aa//../. /b/c/a
+/b/c/a/aa//..// /b/c/a
+/b/c/a/aa//./aa /b/c/a/aa/aa
+/b/c/a/aa//./a. /b/c/a/aa/a.
+/b/c/a/aa//./a/ /b/c/a/aa/a
+/b/c/a/aa//./.a /b/c/a/aa/.a
+/b/c/a/aa//./.. /b/c/a
+/b/c/a/aa//././ /b/c/a/aa
+/b/c/a/aa//.//a /b/c/a/aa/a
+/b/c/a/aa//.//. /b/c/a/aa
+/b/c/a/aa//./// /b/c/a/aa
+/b/c/a/aa///aaa /b/c/a/aa/aaa
+/b/c/a/aa///aa. /b/c/a/aa/aa.
+/b/c/a/aa///aa/ /b/c/a/aa/aa
+/b/c/a/aa///a.a /b/c/a/aa/a.a
+/b/c/a/aa///a.. /b/c/a/aa/a..
+/b/c/a/aa///a./ /b/c/a/aa/a.
+/b/c/a/aa///a/a /b/c/a/aa/a/a
+/b/c/a/aa///a/. /b/c/a/aa/a
+/b/c/a/aa///a// /b/c/a/aa/a
+/b/c/a/aa///.aa /b/c/a/aa/.aa
+/b/c/a/aa///.a. /b/c/a/aa/.a.
+/b/c/a/aa///.a/ /b/c/a/aa/.a
+/b/c/a/aa///..a /b/c/a/aa/..a
+/b/c/a/aa///... /b/c/a/aa/...
+/b/c/a/aa///../ /b/c/a
+/b/c/a/aa///./a /b/c/a/aa/a
+/b/c/a/aa///./. /b/c/a/aa
+/b/c/a/aa///.// /b/c/a/aa
+/b/c/a/aa////aa /b/c/a/aa/aa
+/b/c/a/aa////a. /b/c/a/aa/a.
+/b/c/a/aa////a/ /b/c/a/aa/a
+/b/c/a/aa////.a /b/c/a/aa/.a
+/b/c/a/aa////.. /b/c/a
+/b/c/a/aa////./ /b/c/a/aa
+/b/c/a/aa/////a /b/c/a/aa/a
+/b/c/a/aa/////. /b/c/a/aa
+/b/c/a/aa////// /b/c/a/aa
+/b/c/a/a.aaaaaa /b/c/a/a.aaaaaa
+/b/c/a/a.aaaaa. /b/c/a/a.aaaaa.
+/b/c/a/a.aaaaa/ /b/c/a/a.aaaaa
+/b/c/a/a.aaaa.a /b/c/a/a.aaaa.a
+/b/c/a/a.aaaa.. /b/c/a/a.aaaa..
+/b/c/a/a.aaaa./ /b/c/a/a.aaaa.
+/b/c/a/a.aaaa/a /b/c/a/a.aaaa/a
+/b/c/a/a.aaaa/. /b/c/a/a.aaaa
+/b/c/a/a.aaaa// /b/c/a/a.aaaa
+/b/c/a/a.aaa.aa /b/c/a/a.aaa.aa
+/b/c/a/a.aaa.a. /b/c/a/a.aaa.a.
+/b/c/a/a.aaa.a/ /b/c/a/a.aaa.a
+/b/c/a/a.aaa..a /b/c/a/a.aaa..a
+/b/c/a/a.aaa... /b/c/a/a.aaa...
+/b/c/a/a.aaa../ /b/c/a/a.aaa..
+/b/c/a/a.aaa./a /b/c/a/a.aaa./a
+/b/c/a/a.aaa./. /b/c/a/a.aaa.
+/b/c/a/a.aaa.// /b/c/a/a.aaa.
+/b/c/a/a.aaa/aa /b/c/a/a.aaa/aa
+/b/c/a/a.aaa/a. /b/c/a/a.aaa/a.
+/b/c/a/a.aaa/a/ /b/c/a/a.aaa/a
+/b/c/a/a.aaa/.a /b/c/a/a.aaa/.a
+/b/c/a/a.aaa/.. /b/c/a
+/b/c/a/a.aaa/./ /b/c/a/a.aaa
+/b/c/a/a.aaa//a /b/c/a/a.aaa/a
+/b/c/a/a.aaa//. /b/c/a/a.aaa
+/b/c/a/a.aaa/// /b/c/a/a.aaa
+/b/c/a/a.aa.aaa /b/c/a/a.aa.aaa
+/b/c/a/a.aa.aa. /b/c/a/a.aa.aa.
+/b/c/a/a.aa.aa/ /b/c/a/a.aa.aa
+/b/c/a/a.aa.a.a /b/c/a/a.aa.a.a
+/b/c/a/a.aa.a.. /b/c/a/a.aa.a..
+/b/c/a/a.aa.a./ /b/c/a/a.aa.a.
+/b/c/a/a.aa.a/a /b/c/a/a.aa.a/a
+/b/c/a/a.aa.a/. /b/c/a/a.aa.a
+/b/c/a/a.aa.a// /b/c/a/a.aa.a
+/b/c/a/a.aa..aa /b/c/a/a.aa..aa
+/b/c/a/a.aa..a. /b/c/a/a.aa..a.
+/b/c/a/a.aa..a/ /b/c/a/a.aa..a
+/b/c/a/a.aa...a /b/c/a/a.aa...a
+/b/c/a/a.aa.... /b/c/a/a.aa....
+/b/c/a/a.aa.../ /b/c/a/a.aa...
+/b/c/a/a.aa../a /b/c/a/a.aa../a
+/b/c/a/a.aa../. /b/c/a/a.aa..
+/b/c/a/a.aa..// /b/c/a/a.aa..
+/b/c/a/a.aa./aa /b/c/a/a.aa./aa
+/b/c/a/a.aa./a. /b/c/a/a.aa./a.
+/b/c/a/a.aa./a/ /b/c/a/a.aa./a
+/b/c/a/a.aa./.a /b/c/a/a.aa./.a
+/b/c/a/a.aa./.. /b/c/a
+/b/c/a/a.aa././ /b/c/a/a.aa.
+/b/c/a/a.aa.//a /b/c/a/a.aa./a
+/b/c/a/a.aa.//. /b/c/a/a.aa.
+/b/c/a/a.aa./// /b/c/a/a.aa.
+/b/c/a/a.aa/aaa /b/c/a/a.aa/aaa
+/b/c/a/a.aa/aa. /b/c/a/a.aa/aa.
+/b/c/a/a.aa/aa/ /b/c/a/a.aa/aa
+/b/c/a/a.aa/a.a /b/c/a/a.aa/a.a
+/b/c/a/a.aa/a.. /b/c/a/a.aa/a..
+/b/c/a/a.aa/a./ /b/c/a/a.aa/a.
+/b/c/a/a.aa/a/a /b/c/a/a.aa/a/a
+/b/c/a/a.aa/a/. /b/c/a/a.aa/a
+/b/c/a/a.aa/a// /b/c/a/a.aa/a
+/b/c/a/a.aa/.aa /b/c/a/a.aa/.aa
+/b/c/a/a.aa/.a. /b/c/a/a.aa/.a.
+/b/c/a/a.aa/.a/ /b/c/a/a.aa/.a
+/b/c/a/a.aa/..a /b/c/a/a.aa/..a
+/b/c/a/a.aa/... /b/c/a/a.aa/...
+/b/c/a/a.aa/../ /b/c/a
+/b/c/a/a.aa/./a /b/c/a/a.aa/a
+/b/c/a/a.aa/./. /b/c/a/a.aa
+/b/c/a/a.aa/.// /b/c/a/a.aa
+/b/c/a/a.aa//aa /b/c/a/a.aa/aa
+/b/c/a/a.aa//a. /b/c/a/a.aa/a.
+/b/c/a/a.aa//a/ /b/c/a/a.aa/a
+/b/c/a/a.aa//.a /b/c/a/a.aa/.a
+/b/c/a/a.aa//.. /b/c/a
+/b/c/a/a.aa//./ /b/c/a/a.aa
+/b/c/a/a.aa///a /b/c/a/a.aa/a
+/b/c/a/a.aa///. /b/c/a/a.aa
+/b/c/a/a.aa//// /b/c/a/a.aa
+/b/c/a/a.a.aaaa /b/c/a/a.a.aaaa
+/b/c/a/a.a.aaa. /b/c/a/a.a.aaa.
+/b/c/a/a.a.aaa/ /b/c/a/a.a.aaa
+/b/c/a/a.a.aa.a /b/c/a/a.a.aa.a
+/b/c/a/a.a.aa.. /b/c/a/a.a.aa..
+/b/c/a/a.a.aa./ /b/c/a/a.a.aa.
+/b/c/a/a.a.aa/a /b/c/a/a.a.aa/a
+/b/c/a/a.a.aa/. /b/c/a/a.a.aa
+/b/c/a/a.a.aa// /b/c/a/a.a.aa
+/b/c/a/a.a.a.aa /b/c/a/a.a.a.aa
+/b/c/a/a.a.a.a. /b/c/a/a.a.a.a.
+/b/c/a/a.a.a.a/ /b/c/a/a.a.a.a
+/b/c/a/a.a.a..a /b/c/a/a.a.a..a
+/b/c/a/a.a.a... /b/c/a/a.a.a...
+/b/c/a/a.a.a../ /b/c/a/a.a.a..
+/b/c/a/a.a.a./a /b/c/a/a.a.a./a
+/b/c/a/a.a.a./. /b/c/a/a.a.a.
+/b/c/a/a.a.a.// /b/c/a/a.a.a.
+/b/c/a/a.a.a/aa /b/c/a/a.a.a/aa
+/b/c/a/a.a.a/a. /b/c/a/a.a.a/a.
+/b/c/a/a.a.a/a/ /b/c/a/a.a.a/a
+/b/c/a/a.a.a/.a /b/c/a/a.a.a/.a
+/b/c/a/a.a.a/.. /b/c/a
+/b/c/a/a.a.a/./ /b/c/a/a.a.a
+/b/c/a/a.a.a//a /b/c/a/a.a.a/a
+/b/c/a/a.a.a//. /b/c/a/a.a.a
+/b/c/a/a.a.a/// /b/c/a/a.a.a
+/b/c/a/a.a..aaa /b/c/a/a.a..aaa
+/b/c/a/a.a..aa. /b/c/a/a.a..aa.
+/b/c/a/a.a..aa/ /b/c/a/a.a..aa
+/b/c/a/a.a..a.a /b/c/a/a.a..a.a
+/b/c/a/a.a..a.. /b/c/a/a.a..a..
+/b/c/a/a.a..a./ /b/c/a/a.a..a.
+/b/c/a/a.a..a/a /b/c/a/a.a..a/a
+/b/c/a/a.a..a/. /b/c/a/a.a..a
+/b/c/a/a.a..a// /b/c/a/a.a..a
+/b/c/a/a.a...aa /b/c/a/a.a...aa
+/b/c/a/a.a...a. /b/c/a/a.a...a.
+/b/c/a/a.a...a/ /b/c/a/a.a...a
+/b/c/a/a.a....a /b/c/a/a.a....a
+/b/c/a/a.a..... /b/c/a/a.a.....
+/b/c/a/a.a..../ /b/c/a/a.a....
+/b/c/a/a.a.../a /b/c/a/a.a.../a
+/b/c/a/a.a.../. /b/c/a/a.a...
+/b/c/a/a.a...// /b/c/a/a.a...
+/b/c/a/a.a../aa /b/c/a/a.a../aa
+/b/c/a/a.a../a. /b/c/a/a.a../a.
+/b/c/a/a.a../a/ /b/c/a/a.a../a
+/b/c/a/a.a../.a /b/c/a/a.a../.a
+/b/c/a/a.a../.. /b/c/a
+/b/c/a/a.a.././ /b/c/a/a.a..
+/b/c/a/a.a..//a /b/c/a/a.a../a
+/b/c/a/a.a..//. /b/c/a/a.a..
+/b/c/a/a.a../// /b/c/a/a.a..
+/b/c/a/a.a./aaa /b/c/a/a.a./aaa
+/b/c/a/a.a./aa. /b/c/a/a.a./aa.
+/b/c/a/a.a./aa/ /b/c/a/a.a./aa
+/b/c/a/a.a./a.a /b/c/a/a.a./a.a
+/b/c/a/a.a./a.. /b/c/a/a.a./a..
+/b/c/a/a.a./a./ /b/c/a/a.a./a.
+/b/c/a/a.a./a/a /b/c/a/a.a./a/a
+/b/c/a/a.a./a/. /b/c/a/a.a./a
+/b/c/a/a.a./a// /b/c/a/a.a./a
+/b/c/a/a.a./.aa /b/c/a/a.a./.aa
+/b/c/a/a.a./.a. /b/c/a/a.a./.a.
+/b/c/a/a.a./.a/ /b/c/a/a.a./.a
+/b/c/a/a.a./..a /b/c/a/a.a./..a
+/b/c/a/a.a./... /b/c/a/a.a./...
+/b/c/a/a.a./../ /b/c/a
+/b/c/a/a.a././a /b/c/a/a.a./a
+/b/c/a/a.a././. /b/c/a/a.a.
+/b/c/a/a.a./.// /b/c/a/a.a.
+/b/c/a/a.a.//aa /b/c/a/a.a./aa
+/b/c/a/a.a.//a. /b/c/a/a.a./a.
+/b/c/a/a.a.//a/ /b/c/a/a.a./a
+/b/c/a/a.a.//.a /b/c/a/a.a./.a
+/b/c/a/a.a.//.. /b/c/a
+/b/c/a/a.a.//./ /b/c/a/a.a.
+/b/c/a/a.a.///a /b/c/a/a.a./a
+/b/c/a/a.a.///. /b/c/a/a.a.
+/b/c/a/a.a.//// /b/c/a/a.a.
+/b/c/a/a.a/aaaa /b/c/a/a.a/aaaa
+/b/c/a/a.a/aaa. /b/c/a/a.a/aaa.
+/b/c/a/a.a/aaa/ /b/c/a/a.a/aaa
+/b/c/a/a.a/aa.a /b/c/a/a.a/aa.a
+/b/c/a/a.a/aa.. /b/c/a/a.a/aa..
+/b/c/a/a.a/aa./ /b/c/a/a.a/aa.
+/b/c/a/a.a/aa/a /b/c/a/a.a/aa/a
+/b/c/a/a.a/aa/. /b/c/a/a.a/aa
+/b/c/a/a.a/aa// /b/c/a/a.a/aa
+/b/c/a/a.a/a.aa /b/c/a/a.a/a.aa
+/b/c/a/a.a/a.a. /b/c/a/a.a/a.a.
+/b/c/a/a.a/a.a/ /b/c/a/a.a/a.a
+/b/c/a/a.a/a..a /b/c/a/a.a/a..a
+/b/c/a/a.a/a... /b/c/a/a.a/a...
+/b/c/a/a.a/a../ /b/c/a/a.a/a..
+/b/c/a/a.a/a./a /b/c/a/a.a/a./a
+/b/c/a/a.a/a./. /b/c/a/a.a/a.
+/b/c/a/a.a/a.// /b/c/a/a.a/a.
+/b/c/a/a.a/a/aa /b/c/a/a.a/a/aa
+/b/c/a/a.a/a/a. /b/c/a/a.a/a/a.
+/b/c/a/a.a/a/a/ /b/c/a/a.a/a/a
+/b/c/a/a.a/a/.a /b/c/a/a.a/a/.a
+/b/c/a/a.a/a/.. /b/c/a/a.a
+/b/c/a/a.a/a/./ /b/c/a/a.a/a
+/b/c/a/a.a/a//a /b/c/a/a.a/a/a
+/b/c/a/a.a/a//. /b/c/a/a.a/a
+/b/c/a/a.a/a/// /b/c/a/a.a/a
+/b/c/a/a.a/.aaa /b/c/a/a.a/.aaa
+/b/c/a/a.a/.aa. /b/c/a/a.a/.aa.
+/b/c/a/a.a/.aa/ /b/c/a/a.a/.aa
+/b/c/a/a.a/.a.a /b/c/a/a.a/.a.a
+/b/c/a/a.a/.a.. /b/c/a/a.a/.a..
+/b/c/a/a.a/.a./ /b/c/a/a.a/.a.
+/b/c/a/a.a/.a/a /b/c/a/a.a/.a/a
+/b/c/a/a.a/.a/. /b/c/a/a.a/.a
+/b/c/a/a.a/.a// /b/c/a/a.a/.a
+/b/c/a/a.a/..aa /b/c/a/a.a/..aa
+/b/c/a/a.a/..a. /b/c/a/a.a/..a.
+/b/c/a/a.a/..a/ /b/c/a/a.a/..a
+/b/c/a/a.a/...a /b/c/a/a.a/...a
+/b/c/a/a.a/.... /b/c/a/a.a/....
+/b/c/a/a.a/.../ /b/c/a/a.a/...
+/b/c/a/a.a/../a /b/c/a/a
+/b/c/a/a.a/../. /b/c/a
+/b/c/a/a.a/..// /b/c/a
+/b/c/a/a.a/./aa /b/c/a/a.a/aa
+/b/c/a/a.a/./a. /b/c/a/a.a/a.
+/b/c/a/a.a/./a/ /b/c/a/a.a/a
+/b/c/a/a.a/./.a /b/c/a/a.a/.a
+/b/c/a/a.a/./.. /b/c/a
+/b/c/a/a.a/././ /b/c/a/a.a
+/b/c/a/a.a/.//a /b/c/a/a.a/a
+/b/c/a/a.a/.//. /b/c/a/a.a
+/b/c/a/a.a/./// /b/c/a/a.a
+/b/c/a/a.a//aaa /b/c/a/a.a/aaa
+/b/c/a/a.a//aa. /b/c/a/a.a/aa.
+/b/c/a/a.a//aa/ /b/c/a/a.a/aa
+/b/c/a/a.a//a.a /b/c/a/a.a/a.a
+/b/c/a/a.a//a.. /b/c/a/a.a/a..
+/b/c/a/a.a//a./ /b/c/a/a.a/a.
+/b/c/a/a.a//a/a /b/c/a/a.a/a/a
+/b/c/a/a.a//a/. /b/c/a/a.a/a
+/b/c/a/a.a//a// /b/c/a/a.a/a
+/b/c/a/a.a//.aa /b/c/a/a.a/.aa
+/b/c/a/a.a//.a. /b/c/a/a.a/.a.
+/b/c/a/a.a//.a/ /b/c/a/a.a/.a
+/b/c/a/a.a//..a /b/c/a/a.a/..a
+/b/c/a/a.a//... /b/c/a/a.a/...
+/b/c/a/a.a//../ /b/c/a
+/b/c/a/a.a//./a /b/c/a/a.a/a
+/b/c/a/a.a//./. /b/c/a/a.a
+/b/c/a/a.a//.// /b/c/a/a.a
+/b/c/a/a.a///aa /b/c/a/a.a/aa
+/b/c/a/a.a///a. /b/c/a/a.a/a.
+/b/c/a/a.a///a/ /b/c/a/a.a/a
+/b/c/a/a.a///.a /b/c/a/a.a/.a
+/b/c/a/a.a///.. /b/c/a
+/b/c/a/a.a///./ /b/c/a/a.a
+/b/c/a/a.a////a /b/c/a/a.a/a
+/b/c/a/a.a////. /b/c/a/a.a
+/b/c/a/a.a///// /b/c/a/a.a
+/b/c/a/a..aaaaa /b/c/a/a..aaaaa
+/b/c/a/a..aaaa. /b/c/a/a..aaaa.
+/b/c/a/a..aaaa/ /b/c/a/a..aaaa
+/b/c/a/a..aaa.a /b/c/a/a..aaa.a
+/b/c/a/a..aaa.. /b/c/a/a..aaa..
+/b/c/a/a..aaa./ /b/c/a/a..aaa.
+/b/c/a/a..aaa/a /b/c/a/a..aaa/a
+/b/c/a/a..aaa/. /b/c/a/a..aaa
+/b/c/a/a..aaa// /b/c/a/a..aaa
+/b/c/a/a..aa.aa /b/c/a/a..aa.aa
+/b/c/a/a..aa.a. /b/c/a/a..aa.a.
+/b/c/a/a..aa.a/ /b/c/a/a..aa.a
+/b/c/a/a..aa..a /b/c/a/a..aa..a
+/b/c/a/a..aa... /b/c/a/a..aa...
+/b/c/a/a..aa../ /b/c/a/a..aa..
+/b/c/a/a..aa./a /b/c/a/a..aa./a
+/b/c/a/a..aa./. /b/c/a/a..aa.
+/b/c/a/a..aa.// /b/c/a/a..aa.
+/b/c/a/a..aa/aa /b/c/a/a..aa/aa
+/b/c/a/a..aa/a. /b/c/a/a..aa/a.
+/b/c/a/a..aa/a/ /b/c/a/a..aa/a
+/b/c/a/a..aa/.a /b/c/a/a..aa/.a
+/b/c/a/a..aa/.. /b/c/a
+/b/c/a/a..aa/./ /b/c/a/a..aa
+/b/c/a/a..aa//a /b/c/a/a..aa/a
+/b/c/a/a..aa//. /b/c/a/a..aa
+/b/c/a/a..aa/// /b/c/a/a..aa
+/b/c/a/a..a.aaa /b/c/a/a..a.aaa
+/b/c/a/a..a.aa. /b/c/a/a..a.aa.
+/b/c/a/a..a.aa/ /b/c/a/a..a.aa
+/b/c/a/a..a.a.a /b/c/a/a..a.a.a
+/b/c/a/a..a.a.. /b/c/a/a..a.a..
+/b/c/a/a..a.a./ /b/c/a/a..a.a.
+/b/c/a/a..a.a/a /b/c/a/a..a.a/a
+/b/c/a/a..a.a/. /b/c/a/a..a.a
+/b/c/a/a..a.a// /b/c/a/a..a.a
+/b/c/a/a..a..aa /b/c/a/a..a..aa
+/b/c/a/a..a..a. /b/c/a/a..a..a.
+/b/c/a/a..a..a/ /b/c/a/a..a..a
+/b/c/a/a..a...a /b/c/a/a..a...a
+/b/c/a/a..a.... /b/c/a/a..a....
+/b/c/a/a..a.../ /b/c/a/a..a...
+/b/c/a/a..a../a /b/c/a/a..a../a
+/b/c/a/a..a../. /b/c/a/a..a..
+/b/c/a/a..a..// /b/c/a/a..a..
+/b/c/a/a..a./aa /b/c/a/a..a./aa
+/b/c/a/a..a./a. /b/c/a/a..a./a.
+/b/c/a/a..a./a/ /b/c/a/a..a./a
+/b/c/a/a..a./.a /b/c/a/a..a./.a
+/b/c/a/a..a./.. /b/c/a
+/b/c/a/a..a././ /b/c/a/a..a.
+/b/c/a/a..a.//a /b/c/a/a..a./a
+/b/c/a/a..a.//. /b/c/a/a..a.
+/b/c/a/a..a./// /b/c/a/a..a.
+/b/c/a/a..a/aaa /b/c/a/a..a/aaa
+/b/c/a/a..a/aa. /b/c/a/a..a/aa.
+/b/c/a/a..a/aa/ /b/c/a/a..a/aa
+/b/c/a/a..a/a.a /b/c/a/a..a/a.a
+/b/c/a/a..a/a.. /b/c/a/a..a/a..
+/b/c/a/a..a/a./ /b/c/a/a..a/a.
+/b/c/a/a..a/a/a /b/c/a/a..a/a/a
+/b/c/a/a..a/a/. /b/c/a/a..a/a
+/b/c/a/a..a/a// /b/c/a/a..a/a
+/b/c/a/a..a/.aa /b/c/a/a..a/.aa
+/b/c/a/a..a/.a. /b/c/a/a..a/.a.
+/b/c/a/a..a/.a/ /b/c/a/a..a/.a
+/b/c/a/a..a/..a /b/c/a/a..a/..a
+/b/c/a/a..a/... /b/c/a/a..a/...
+/b/c/a/a..a/../ /b/c/a
+/b/c/a/a..a/./a /b/c/a/a..a/a
+/b/c/a/a..a/./. /b/c/a/a..a
+/b/c/a/a..a/.// /b/c/a/a..a
+/b/c/a/a..a//aa /b/c/a/a..a/aa
+/b/c/a/a..a//a. /b/c/a/a..a/a.
+/b/c/a/a..a//a/ /b/c/a/a..a/a
+/b/c/a/a..a//.a /b/c/a/a..a/.a
+/b/c/a/a..a//.. /b/c/a
+/b/c/a/a..a//./ /b/c/a/a..a
+/b/c/a/a..a///a /b/c/a/a..a/a
+/b/c/a/a..a///. /b/c/a/a..a
+/b/c/a/a..a//// /b/c/a/a..a
+/b/c/a/a...aaaa /b/c/a/a...aaaa
+/b/c/a/a...aaa. /b/c/a/a...aaa.
+/b/c/a/a...aaa/ /b/c/a/a...aaa
+/b/c/a/a...aa.a /b/c/a/a...aa.a
+/b/c/a/a...aa.. /b/c/a/a...aa..
+/b/c/a/a...aa./ /b/c/a/a...aa.
+/b/c/a/a...aa/a /b/c/a/a...aa/a
+/b/c/a/a...aa/. /b/c/a/a...aa
+/b/c/a/a...aa// /b/c/a/a...aa
+/b/c/a/a...a.aa /b/c/a/a...a.aa
+/b/c/a/a...a.a. /b/c/a/a...a.a.
+/b/c/a/a...a.a/ /b/c/a/a...a.a
+/b/c/a/a...a..a /b/c/a/a...a..a
+/b/c/a/a...a... /b/c/a/a...a...
+/b/c/a/a...a../ /b/c/a/a...a..
+/b/c/a/a...a./a /b/c/a/a...a./a
+/b/c/a/a...a./. /b/c/a/a...a.
+/b/c/a/a...a.// /b/c/a/a...a.
+/b/c/a/a...a/aa /b/c/a/a...a/aa
+/b/c/a/a...a/a. /b/c/a/a...a/a.
+/b/c/a/a...a/a/ /b/c/a/a...a/a
+/b/c/a/a...a/.a /b/c/a/a...a/.a
+/b/c/a/a...a/.. /b/c/a
+/b/c/a/a...a/./ /b/c/a/a...a
+/b/c/a/a...a//a /b/c/a/a...a/a
+/b/c/a/a...a//. /b/c/a/a...a
+/b/c/a/a...a/// /b/c/a/a...a
+/b/c/a/a....aaa /b/c/a/a....aaa
+/b/c/a/a....aa. /b/c/a/a....aa.
+/b/c/a/a....aa/ /b/c/a/a....aa
+/b/c/a/a....a.a /b/c/a/a....a.a
+/b/c/a/a....a.. /b/c/a/a....a..
+/b/c/a/a....a./ /b/c/a/a....a.
+/b/c/a/a....a/a /b/c/a/a....a/a
+/b/c/a/a....a/. /b/c/a/a....a
+/b/c/a/a....a// /b/c/a/a....a
+/b/c/a/a.....aa /b/c/a/a.....aa
+/b/c/a/a.....a. /b/c/a/a.....a.
+/b/c/a/a.....a/ /b/c/a/a.....a
+/b/c/a/a......a /b/c/a/a......a
+/b/c/a/a....... /b/c/a/a.......
+/b/c/a/a....../ /b/c/a/a......
+/b/c/a/a...../a /b/c/a/a...../a
+/b/c/a/a...../. /b/c/a/a.....
+/b/c/a/a.....// /b/c/a/a.....
+/b/c/a/a..../aa /b/c/a/a..../aa
+/b/c/a/a..../a. /b/c/a/a..../a.
+/b/c/a/a..../a/ /b/c/a/a..../a
+/b/c/a/a..../.a /b/c/a/a..../.a
+/b/c/a/a..../.. /b/c/a
+/b/c/a/a...././ /b/c/a/a....
+/b/c/a/a....//a /b/c/a/a..../a
+/b/c/a/a....//. /b/c/a/a....
+/b/c/a/a..../// /b/c/a/a....
+/b/c/a/a.../aaa /b/c/a/a.../aaa
+/b/c/a/a.../aa. /b/c/a/a.../aa.
+/b/c/a/a.../aa/ /b/c/a/a.../aa
+/b/c/a/a.../a.a /b/c/a/a.../a.a
+/b/c/a/a.../a.. /b/c/a/a.../a..
+/b/c/a/a.../a./ /b/c/a/a.../a.
+/b/c/a/a.../a/a /b/c/a/a.../a/a
+/b/c/a/a.../a/. /b/c/a/a.../a
+/b/c/a/a.../a// /b/c/a/a.../a
+/b/c/a/a.../.aa /b/c/a/a.../.aa
+/b/c/a/a.../.a. /b/c/a/a.../.a.
+/b/c/a/a.../.a/ /b/c/a/a.../.a
+/b/c/a/a.../..a /b/c/a/a.../..a
+/b/c/a/a.../... /b/c/a/a.../...
+/b/c/a/a.../../ /b/c/a
+/b/c/a/a..././a /b/c/a/a.../a
+/b/c/a/a..././. /b/c/a/a...
+/b/c/a/a.../.// /b/c/a/a...
+/b/c/a/a...//aa /b/c/a/a.../aa
+/b/c/a/a...//a. /b/c/a/a.../a.
+/b/c/a/a...//a/ /b/c/a/a.../a
+/b/c/a/a...//.a /b/c/a/a.../.a
+/b/c/a/a...//.. /b/c/a
+/b/c/a/a...//./ /b/c/a/a...
+/b/c/a/a...///a /b/c/a/a.../a
+/b/c/a/a...///. /b/c/a/a...
+/b/c/a/a...//// /b/c/a/a...
+/b/c/a/a../aaaa /b/c/a/a../aaaa
+/b/c/a/a../aaa. /b/c/a/a../aaa.
+/b/c/a/a../aaa/ /b/c/a/a../aaa
+/b/c/a/a../aa.a /b/c/a/a../aa.a
+/b/c/a/a../aa.. /b/c/a/a../aa..
+/b/c/a/a../aa./ /b/c/a/a../aa.
+/b/c/a/a../aa/a /b/c/a/a../aa/a
+/b/c/a/a../aa/. /b/c/a/a../aa
+/b/c/a/a../aa// /b/c/a/a../aa
+/b/c/a/a../a.aa /b/c/a/a../a.aa
+/b/c/a/a../a.a. /b/c/a/a../a.a.
+/b/c/a/a../a.a/ /b/c/a/a../a.a
+/b/c/a/a../a..a /b/c/a/a../a..a
+/b/c/a/a../a... /b/c/a/a../a...
+/b/c/a/a../a../ /b/c/a/a../a..
+/b/c/a/a../a./a /b/c/a/a../a./a
+/b/c/a/a../a./. /b/c/a/a../a.
+/b/c/a/a../a.// /b/c/a/a../a.
+/b/c/a/a../a/aa /b/c/a/a../a/aa
+/b/c/a/a../a/a. /b/c/a/a../a/a.
+/b/c/a/a../a/a/ /b/c/a/a../a/a
+/b/c/a/a../a/.a /b/c/a/a../a/.a
+/b/c/a/a../a/.. /b/c/a/a..
+/b/c/a/a../a/./ /b/c/a/a../a
+/b/c/a/a../a//a /b/c/a/a../a/a
+/b/c/a/a../a//. /b/c/a/a../a
+/b/c/a/a../a/// /b/c/a/a../a
+/b/c/a/a../.aaa /b/c/a/a../.aaa
+/b/c/a/a../.aa. /b/c/a/a../.aa.
+/b/c/a/a../.aa/ /b/c/a/a../.aa
+/b/c/a/a../.a.a /b/c/a/a../.a.a
+/b/c/a/a../.a.. /b/c/a/a../.a..
+/b/c/a/a../.a./ /b/c/a/a../.a.
+/b/c/a/a../.a/a /b/c/a/a../.a/a
+/b/c/a/a../.a/. /b/c/a/a../.a
+/b/c/a/a../.a// /b/c/a/a../.a
+/b/c/a/a../..aa /b/c/a/a../..aa
+/b/c/a/a../..a. /b/c/a/a../..a.
+/b/c/a/a../..a/ /b/c/a/a../..a
+/b/c/a/a../...a /b/c/a/a../...a
+/b/c/a/a../.... /b/c/a/a../....
+/b/c/a/a../.../ /b/c/a/a../...
+/b/c/a/a../../a /b/c/a/a
+/b/c/a/a../../. /b/c/a
+/b/c/a/a../..// /b/c/a
+/b/c/a/a.././aa /b/c/a/a../aa
+/b/c/a/a.././a. /b/c/a/a../a.
+/b/c/a/a.././a/ /b/c/a/a../a
+/b/c/a/a.././.a /b/c/a/a../.a
+/b/c/a/a.././.. /b/c/a
+/b/c/a/a../././ /b/c/a/a..
+/b/c/a/a.././/a /b/c/a/a../a
+/b/c/a/a.././/. /b/c/a/a..
+/b/c/a/a.././// /b/c/a/a..
+/b/c/a/a..//aaa /b/c/a/a../aaa
+/b/c/a/a..//aa. /b/c/a/a../aa.
+/b/c/a/a..//aa/ /b/c/a/a../aa
+/b/c/a/a..//a.a /b/c/a/a../a.a
+/b/c/a/a..//a.. /b/c/a/a../a..
+/b/c/a/a..//a./ /b/c/a/a../a.
+/b/c/a/a..//a/a /b/c/a/a../a/a
+/b/c/a/a..//a/. /b/c/a/a../a
+/b/c/a/a..//a// /b/c/a/a../a
+/b/c/a/a..//.aa /b/c/a/a../.aa
+/b/c/a/a..//.a. /b/c/a/a../.a.
+/b/c/a/a..//.a/ /b/c/a/a../.a
+/b/c/a/a..//..a /b/c/a/a../..a
+/b/c/a/a..//... /b/c/a/a../...
+/b/c/a/a..//../ /b/c/a
+/b/c/a/a..//./a /b/c/a/a../a
+/b/c/a/a..//./. /b/c/a/a..
+/b/c/a/a..//.// /b/c/a/a..
+/b/c/a/a..///aa /b/c/a/a../aa
+/b/c/a/a..///a. /b/c/a/a../a.
+/b/c/a/a..///a/ /b/c/a/a../a
+/b/c/a/a..///.a /b/c/a/a../.a
+/b/c/a/a..///.. /b/c/a
+/b/c/a/a..///./ /b/c/a/a..
+/b/c/a/a..////a /b/c/a/a../a
+/b/c/a/a..////. /b/c/a/a..
+/b/c/a/a..///// /b/c/a/a..
+/b/c/a/a./aaaaa /b/c/a/a./aaaaa
+/b/c/a/a./aaaa. /b/c/a/a./aaaa.
+/b/c/a/a./aaaa/ /b/c/a/a./aaaa
+/b/c/a/a./aaa.a /b/c/a/a./aaa.a
+/b/c/a/a./aaa.. /b/c/a/a./aaa..
+/b/c/a/a./aaa./ /b/c/a/a./aaa.
+/b/c/a/a./aaa/a /b/c/a/a./aaa/a
+/b/c/a/a./aaa/. /b/c/a/a./aaa
+/b/c/a/a./aaa// /b/c/a/a./aaa
+/b/c/a/a./aa.aa /b/c/a/a./aa.aa
+/b/c/a/a./aa.a. /b/c/a/a./aa.a.
+/b/c/a/a./aa.a/ /b/c/a/a./aa.a
+/b/c/a/a./aa..a /b/c/a/a./aa..a
+/b/c/a/a./aa... /b/c/a/a./aa...
+/b/c/a/a./aa../ /b/c/a/a./aa..
+/b/c/a/a./aa./a /b/c/a/a./aa./a
+/b/c/a/a./aa./. /b/c/a/a./aa.
+/b/c/a/a./aa.// /b/c/a/a./aa.
+/b/c/a/a./aa/aa /b/c/a/a./aa/aa
+/b/c/a/a./aa/a. /b/c/a/a./aa/a.
+/b/c/a/a./aa/a/ /b/c/a/a./aa/a
+/b/c/a/a./aa/.a /b/c/a/a./aa/.a
+/b/c/a/a./aa/.. /b/c/a/a.
+/b/c/a/a./aa/./ /b/c/a/a./aa
+/b/c/a/a./aa//a /b/c/a/a./aa/a
+/b/c/a/a./aa//. /b/c/a/a./aa
+/b/c/a/a./aa/// /b/c/a/a./aa
+/b/c/a/a./a.aaa /b/c/a/a./a.aaa
+/b/c/a/a./a.aa. /b/c/a/a./a.aa.
+/b/c/a/a./a.aa/ /b/c/a/a./a.aa
+/b/c/a/a./a.a.a /b/c/a/a./a.a.a
+/b/c/a/a./a.a.. /b/c/a/a./a.a..
+/b/c/a/a./a.a./ /b/c/a/a./a.a.
+/b/c/a/a./a.a/a /b/c/a/a./a.a/a
+/b/c/a/a./a.a/. /b/c/a/a./a.a
+/b/c/a/a./a.a// /b/c/a/a./a.a
+/b/c/a/a./a..aa /b/c/a/a./a..aa
+/b/c/a/a./a..a. /b/c/a/a./a..a.
+/b/c/a/a./a..a/ /b/c/a/a./a..a
+/b/c/a/a./a...a /b/c/a/a./a...a
+/b/c/a/a./a.... /b/c/a/a./a....
+/b/c/a/a./a.../ /b/c/a/a./a...
+/b/c/a/a./a../a /b/c/a/a./a../a
+/b/c/a/a./a../. /b/c/a/a./a..
+/b/c/a/a./a..// /b/c/a/a./a..
+/b/c/a/a./a./aa /b/c/a/a./a./aa
+/b/c/a/a./a./a. /b/c/a/a./a./a.
+/b/c/a/a./a./a/ /b/c/a/a./a./a
+/b/c/a/a./a./.a /b/c/a/a./a./.a
+/b/c/a/a./a./.. /b/c/a/a.
+/b/c/a/a./a././ /b/c/a/a./a.
+/b/c/a/a./a.//a /b/c/a/a./a./a
+/b/c/a/a./a.//. /b/c/a/a./a.
+/b/c/a/a./a./// /b/c/a/a./a.
+/b/c/a/a./a/aaa /b/c/a/a./a/aaa
+/b/c/a/a./a/aa. /b/c/a/a./a/aa.
+/b/c/a/a./a/aa/ /b/c/a/a./a/aa
+/b/c/a/a./a/a.a /b/c/a/a./a/a.a
+/b/c/a/a./a/a.. /b/c/a/a./a/a..
+/b/c/a/a./a/a./ /b/c/a/a./a/a.
+/b/c/a/a./a/a/a /b/c/a/a./a/a/a
+/b/c/a/a./a/a/. /b/c/a/a./a/a
+/b/c/a/a./a/a// /b/c/a/a./a/a
+/b/c/a/a./a/.aa /b/c/a/a./a/.aa
+/b/c/a/a./a/.a. /b/c/a/a./a/.a.
+/b/c/a/a./a/.a/ /b/c/a/a./a/.a
+/b/c/a/a./a/..a /b/c/a/a./a/..a
+/b/c/a/a./a/... /b/c/a/a./a/...
+/b/c/a/a./a/../ /b/c/a/a.
+/b/c/a/a./a/./a /b/c/a/a./a/a
+/b/c/a/a./a/./. /b/c/a/a./a
+/b/c/a/a./a/.// /b/c/a/a./a
+/b/c/a/a./a//aa /b/c/a/a./a/aa
+/b/c/a/a./a//a. /b/c/a/a./a/a.
+/b/c/a/a./a//a/ /b/c/a/a./a/a
+/b/c/a/a./a//.a /b/c/a/a./a/.a
+/b/c/a/a./a//.. /b/c/a/a.
+/b/c/a/a./a//./ /b/c/a/a./a
+/b/c/a/a./a///a /b/c/a/a./a/a
+/b/c/a/a./a///. /b/c/a/a./a
+/b/c/a/a./a//// /b/c/a/a./a
+/b/c/a/a./.aaaa /b/c/a/a./.aaaa
+/b/c/a/a./.aaa. /b/c/a/a./.aaa.
+/b/c/a/a./.aaa/ /b/c/a/a./.aaa
+/b/c/a/a./.aa.a /b/c/a/a./.aa.a
+/b/c/a/a./.aa.. /b/c/a/a./.aa..
+/b/c/a/a./.aa./ /b/c/a/a./.aa.
+/b/c/a/a./.aa/a /b/c/a/a./.aa/a
+/b/c/a/a./.aa/. /b/c/a/a./.aa
+/b/c/a/a./.aa// /b/c/a/a./.aa
+/b/c/a/a./.a.aa /b/c/a/a./.a.aa
+/b/c/a/a./.a.a. /b/c/a/a./.a.a.
+/b/c/a/a./.a.a/ /b/c/a/a./.a.a
+/b/c/a/a./.a..a /b/c/a/a./.a..a
+/b/c/a/a./.a... /b/c/a/a./.a...
+/b/c/a/a./.a../ /b/c/a/a./.a..
+/b/c/a/a./.a./a /b/c/a/a./.a./a
+/b/c/a/a./.a./. /b/c/a/a./.a.
+/b/c/a/a./.a.// /b/c/a/a./.a.
+/b/c/a/a./.a/aa /b/c/a/a./.a/aa
+/b/c/a/a./.a/a. /b/c/a/a./.a/a.
+/b/c/a/a./.a/a/ /b/c/a/a./.a/a
+/b/c/a/a./.a/.a /b/c/a/a./.a/.a
+/b/c/a/a./.a/.. /b/c/a/a.
+/b/c/a/a./.a/./ /b/c/a/a./.a
+/b/c/a/a./.a//a /b/c/a/a./.a/a
+/b/c/a/a./.a//. /b/c/a/a./.a
+/b/c/a/a./.a/// /b/c/a/a./.a
+/b/c/a/a./..aaa /b/c/a/a./..aaa
+/b/c/a/a./..aa. /b/c/a/a./..aa.
+/b/c/a/a./..aa/ /b/c/a/a./..aa
+/b/c/a/a./..a.a /b/c/a/a./..a.a
+/b/c/a/a./..a.. /b/c/a/a./..a..
+/b/c/a/a./..a./ /b/c/a/a./..a.
+/b/c/a/a./..a/a /b/c/a/a./..a/a
+/b/c/a/a./..a/. /b/c/a/a./..a
+/b/c/a/a./..a// /b/c/a/a./..a
+/b/c/a/a./...aa /b/c/a/a./...aa
+/b/c/a/a./...a. /b/c/a/a./...a.
+/b/c/a/a./...a/ /b/c/a/a./...a
+/b/c/a/a./....a /b/c/a/a./....a
+/b/c/a/a./..... /b/c/a/a./.....
+/b/c/a/a./..../ /b/c/a/a./....
+/b/c/a/a./.../a /b/c/a/a./.../a
+/b/c/a/a./.../. /b/c/a/a./...
+/b/c/a/a./...// /b/c/a/a./...
+/b/c/a/a./../aa /b/c/a/aa
+/b/c/a/a./../a. /b/c/a/a.
+/b/c/a/a./../a/ /b/c/a/a
+/b/c/a/a./../.a /b/c/a/.a
+/b/c/a/a./../.. /b/c
+/b/c/a/a./.././ /b/c/a
+/b/c/a/a./..//a /b/c/a/a
+/b/c/a/a./..//. /b/c/a
+/b/c/a/a./../// /b/c/a
+/b/c/a/a././aaa /b/c/a/a./aaa
+/b/c/a/a././aa. /b/c/a/a./aa.
+/b/c/a/a././aa/ /b/c/a/a./aa
+/b/c/a/a././a.a /b/c/a/a./a.a
+/b/c/a/a././a.. /b/c/a/a./a..
+/b/c/a/a././a./ /b/c/a/a./a.
+/b/c/a/a././a/a /b/c/a/a./a/a
+/b/c/a/a././a/. /b/c/a/a./a
+/b/c/a/a././a// /b/c/a/a./a
+/b/c/a/a././.aa /b/c/a/a./.aa
+/b/c/a/a././.a. /b/c/a/a./.a.
+/b/c/a/a././.a/ /b/c/a/a./.a
+/b/c/a/a././..a /b/c/a/a./..a
+/b/c/a/a././... /b/c/a/a./...
+/b/c/a/a././../ /b/c/a
+/b/c/a/a./././a /b/c/a/a./a
+/b/c/a/a./././. /b/c/a/a.
+/b/c/a/a././.// /b/c/a/a.
+/b/c/a/a././/aa /b/c/a/a./aa
+/b/c/a/a././/a. /b/c/a/a./a.
+/b/c/a/a././/a/ /b/c/a/a./a
+/b/c/a/a././/.a /b/c/a/a./.a
+/b/c/a/a././/.. /b/c/a
+/b/c/a/a././/./ /b/c/a/a.
+/b/c/a/a././//a /b/c/a/a./a
+/b/c/a/a././//. /b/c/a/a.
+/b/c/a/a././/// /b/c/a/a.
+/b/c/a/a.//aaaa /b/c/a/a./aaaa
+/b/c/a/a.//aaa. /b/c/a/a./aaa.
+/b/c/a/a.//aaa/ /b/c/a/a./aaa
+/b/c/a/a.//aa.a /b/c/a/a./aa.a
+/b/c/a/a.//aa.. /b/c/a/a./aa..
+/b/c/a/a.//aa./ /b/c/a/a./aa.
+/b/c/a/a.//aa/a /b/c/a/a./aa/a
+/b/c/a/a.//aa/. /b/c/a/a./aa
+/b/c/a/a.//aa// /b/c/a/a./aa
+/b/c/a/a.//a.aa /b/c/a/a./a.aa
+/b/c/a/a.//a.a. /b/c/a/a./a.a.
+/b/c/a/a.//a.a/ /b/c/a/a./a.a
+/b/c/a/a.//a..a /b/c/a/a./a..a
+/b/c/a/a.//a... /b/c/a/a./a...
+/b/c/a/a.//a../ /b/c/a/a./a..
+/b/c/a/a.//a./a /b/c/a/a./a./a
+/b/c/a/a.//a./. /b/c/a/a./a.
+/b/c/a/a.//a.// /b/c/a/a./a.
+/b/c/a/a.//a/aa /b/c/a/a./a/aa
+/b/c/a/a.//a/a. /b/c/a/a./a/a.
+/b/c/a/a.//a/a/ /b/c/a/a./a/a
+/b/c/a/a.//a/.a /b/c/a/a./a/.a
+/b/c/a/a.//a/.. /b/c/a/a.
+/b/c/a/a.//a/./ /b/c/a/a./a
+/b/c/a/a.//a//a /b/c/a/a./a/a
+/b/c/a/a.//a//. /b/c/a/a./a
+/b/c/a/a.//a/// /b/c/a/a./a
+/b/c/a/a.//.aaa /b/c/a/a./.aaa
+/b/c/a/a.//.aa. /b/c/a/a./.aa.
+/b/c/a/a.//.aa/ /b/c/a/a./.aa
+/b/c/a/a.//.a.a /b/c/a/a./.a.a
+/b/c/a/a.//.a.. /b/c/a/a./.a..
+/b/c/a/a.//.a./ /b/c/a/a./.a.
+/b/c/a/a.//.a/a /b/c/a/a./.a/a
+/b/c/a/a.//.a/. /b/c/a/a./.a
+/b/c/a/a.//.a// /b/c/a/a./.a
+/b/c/a/a.//..aa /b/c/a/a./..aa
+/b/c/a/a.//..a. /b/c/a/a./..a.
+/b/c/a/a.//..a/ /b/c/a/a./..a
+/b/c/a/a.//...a /b/c/a/a./...a
+/b/c/a/a.//.... /b/c/a/a./....
+/b/c/a/a.//.../ /b/c/a/a./...
+/b/c/a/a.//../a /b/c/a/a
+/b/c/a/a.//../. /b/c/a
+/b/c/a/a.//..// /b/c/a
+/b/c/a/a.//./aa /b/c/a/a./aa
+/b/c/a/a.//./a. /b/c/a/a./a.
+/b/c/a/a.//./a/ /b/c/a/a./a
+/b/c/a/a.//./.a /b/c/a/a./.a
+/b/c/a/a.//./.. /b/c/a
+/b/c/a/a.//././ /b/c/a/a.
+/b/c/a/a.//.//a /b/c/a/a./a
+/b/c/a/a.//.//. /b/c/a/a.
+/b/c/a/a.//./// /b/c/a/a.
+/b/c/a/a.///aaa /b/c/a/a./aaa
+/b/c/a/a.///aa. /b/c/a/a./aa.
+/b/c/a/a.///aa/ /b/c/a/a./aa
+/b/c/a/a.///a.a /b/c/a/a./a.a
+/b/c/a/a.///a.. /b/c/a/a./a..
+/b/c/a/a.///a./ /b/c/a/a./a.
+/b/c/a/a.///a/a /b/c/a/a./a/a
+/b/c/a/a.///a/. /b/c/a/a./a
+/b/c/a/a.///a// /b/c/a/a./a
+/b/c/a/a.///.aa /b/c/a/a./.aa
+/b/c/a/a.///.a. /b/c/a/a./.a.
+/b/c/a/a.///.a/ /b/c/a/a./.a
+/b/c/a/a.///..a /b/c/a/a./..a
+/b/c/a/a.///... /b/c/a/a./...
+/b/c/a/a.///../ /b/c/a
+/b/c/a/a.///./a /b/c/a/a./a
+/b/c/a/a.///./. /b/c/a/a.
+/b/c/a/a.///.// /b/c/a/a.
+/b/c/a/a.////aa /b/c/a/a./aa
+/b/c/a/a.////a. /b/c/a/a./a.
+/b/c/a/a.////a/ /b/c/a/a./a
+/b/c/a/a.////.a /b/c/a/a./.a
+/b/c/a/a.////.. /b/c/a
+/b/c/a/a.////./ /b/c/a/a.
+/b/c/a/a./////a /b/c/a/a./a
+/b/c/a/a./////. /b/c/a/a.
+/b/c/a/a.////// /b/c/a/a.
+/b/c/a/a/aaaaaa /b/c/a/a/aaaaaa
+/b/c/a/a/aaaaa. /b/c/a/a/aaaaa.
+/b/c/a/a/aaaaa/ /b/c/a/a/aaaaa
+/b/c/a/a/aaaa.a /b/c/a/a/aaaa.a
+/b/c/a/a/aaaa.. /b/c/a/a/aaaa..
+/b/c/a/a/aaaa./ /b/c/a/a/aaaa.
+/b/c/a/a/aaaa/a /b/c/a/a/aaaa/a
+/b/c/a/a/aaaa/. /b/c/a/a/aaaa
+/b/c/a/a/aaaa// /b/c/a/a/aaaa
+/b/c/a/a/aaa.aa /b/c/a/a/aaa.aa
+/b/c/a/a/aaa.a. /b/c/a/a/aaa.a.
+/b/c/a/a/aaa.a/ /b/c/a/a/aaa.a
+/b/c/a/a/aaa..a /b/c/a/a/aaa..a
+/b/c/a/a/aaa... /b/c/a/a/aaa...
+/b/c/a/a/aaa../ /b/c/a/a/aaa..
+/b/c/a/a/aaa./a /b/c/a/a/aaa./a
+/b/c/a/a/aaa./. /b/c/a/a/aaa.
+/b/c/a/a/aaa.// /b/c/a/a/aaa.
+/b/c/a/a/aaa/aa /b/c/a/a/aaa/aa
+/b/c/a/a/aaa/a. /b/c/a/a/aaa/a.
+/b/c/a/a/aaa/a/ /b/c/a/a/aaa/a
+/b/c/a/a/aaa/.a /b/c/a/a/aaa/.a
+/b/c/a/a/aaa/.. /b/c/a/a
+/b/c/a/a/aaa/./ /b/c/a/a/aaa
+/b/c/a/a/aaa//a /b/c/a/a/aaa/a
+/b/c/a/a/aaa//. /b/c/a/a/aaa
+/b/c/a/a/aaa/// /b/c/a/a/aaa
+/b/c/a/a/aa.aaa /b/c/a/a/aa.aaa
+/b/c/a/a/aa.aa. /b/c/a/a/aa.aa.
+/b/c/a/a/aa.aa/ /b/c/a/a/aa.aa
+/b/c/a/a/aa.a.a /b/c/a/a/aa.a.a
+/b/c/a/a/aa.a.. /b/c/a/a/aa.a..
+/b/c/a/a/aa.a./ /b/c/a/a/aa.a.
+/b/c/a/a/aa.a/a /b/c/a/a/aa.a/a
+/b/c/a/a/aa.a/. /b/c/a/a/aa.a
+/b/c/a/a/aa.a// /b/c/a/a/aa.a
+/b/c/a/a/aa..aa /b/c/a/a/aa..aa
+/b/c/a/a/aa..a. /b/c/a/a/aa..a.
+/b/c/a/a/aa..a/ /b/c/a/a/aa..a
+/b/c/a/a/aa...a /b/c/a/a/aa...a
+/b/c/a/a/aa.... /b/c/a/a/aa....
+/b/c/a/a/aa.../ /b/c/a/a/aa...
+/b/c/a/a/aa../a /b/c/a/a/aa../a
+/b/c/a/a/aa../. /b/c/a/a/aa..
+/b/c/a/a/aa..// /b/c/a/a/aa..
+/b/c/a/a/aa./aa /b/c/a/a/aa./aa
+/b/c/a/a/aa./a. /b/c/a/a/aa./a.
+/b/c/a/a/aa./a/ /b/c/a/a/aa./a
+/b/c/a/a/aa./.a /b/c/a/a/aa./.a
+/b/c/a/a/aa./.. /b/c/a/a
+/b/c/a/a/aa././ /b/c/a/a/aa.
+/b/c/a/a/aa.//a /b/c/a/a/aa./a
+/b/c/a/a/aa.//. /b/c/a/a/aa.
+/b/c/a/a/aa./// /b/c/a/a/aa.
+/b/c/a/a/aa/aaa /b/c/a/a/aa/aaa
+/b/c/a/a/aa/aa. /b/c/a/a/aa/aa.
+/b/c/a/a/aa/aa/ /b/c/a/a/aa/aa
+/b/c/a/a/aa/a.a /b/c/a/a/aa/a.a
+/b/c/a/a/aa/a.. /b/c/a/a/aa/a..
+/b/c/a/a/aa/a./ /b/c/a/a/aa/a.
+/b/c/a/a/aa/a/a /b/c/a/a/aa/a/a
+/b/c/a/a/aa/a/. /b/c/a/a/aa/a
+/b/c/a/a/aa/a// /b/c/a/a/aa/a
+/b/c/a/a/aa/.aa /b/c/a/a/aa/.aa
+/b/c/a/a/aa/.a. /b/c/a/a/aa/.a.
+/b/c/a/a/aa/.a/ /b/c/a/a/aa/.a
+/b/c/a/a/aa/..a /b/c/a/a/aa/..a
+/b/c/a/a/aa/... /b/c/a/a/aa/...
+/b/c/a/a/aa/../ /b/c/a/a
+/b/c/a/a/aa/./a /b/c/a/a/aa/a
+/b/c/a/a/aa/./. /b/c/a/a/aa
+/b/c/a/a/aa/.// /b/c/a/a/aa
+/b/c/a/a/aa//aa /b/c/a/a/aa/aa
+/b/c/a/a/aa//a. /b/c/a/a/aa/a.
+/b/c/a/a/aa//a/ /b/c/a/a/aa/a
+/b/c/a/a/aa//.a /b/c/a/a/aa/.a
+/b/c/a/a/aa//.. /b/c/a/a
+/b/c/a/a/aa//./ /b/c/a/a/aa
+/b/c/a/a/aa///a /b/c/a/a/aa/a
+/b/c/a/a/aa///. /b/c/a/a/aa
+/b/c/a/a/aa//// /b/c/a/a/aa
+/b/c/a/a/a.aaaa /b/c/a/a/a.aaaa
+/b/c/a/a/a.aaa. /b/c/a/a/a.aaa.
+/b/c/a/a/a.aaa/ /b/c/a/a/a.aaa
+/b/c/a/a/a.aa.a /b/c/a/a/a.aa.a
+/b/c/a/a/a.aa.. /b/c/a/a/a.aa..
+/b/c/a/a/a.aa./ /b/c/a/a/a.aa.
+/b/c/a/a/a.aa/a /b/c/a/a/a.aa/a
+/b/c/a/a/a.aa/. /b/c/a/a/a.aa
+/b/c/a/a/a.aa// /b/c/a/a/a.aa
+/b/c/a/a/a.a.aa /b/c/a/a/a.a.aa
+/b/c/a/a/a.a.a. /b/c/a/a/a.a.a.
+/b/c/a/a/a.a.a/ /b/c/a/a/a.a.a
+/b/c/a/a/a.a..a /b/c/a/a/a.a..a
+/b/c/a/a/a.a... /b/c/a/a/a.a...
+/b/c/a/a/a.a../ /b/c/a/a/a.a..
+/b/c/a/a/a.a./a /b/c/a/a/a.a./a
+/b/c/a/a/a.a./. /b/c/a/a/a.a.
+/b/c/a/a/a.a.// /b/c/a/a/a.a.
+/b/c/a/a/a.a/aa /b/c/a/a/a.a/aa
+/b/c/a/a/a.a/a. /b/c/a/a/a.a/a.
+/b/c/a/a/a.a/a/ /b/c/a/a/a.a/a
+/b/c/a/a/a.a/.a /b/c/a/a/a.a/.a
+/b/c/a/a/a.a/.. /b/c/a/a
+/b/c/a/a/a.a/./ /b/c/a/a/a.a
+/b/c/a/a/a.a//a /b/c/a/a/a.a/a
+/b/c/a/a/a.a//. /b/c/a/a/a.a
+/b/c/a/a/a.a/// /b/c/a/a/a.a
+/b/c/a/a/a..aaa /b/c/a/a/a..aaa
+/b/c/a/a/a..aa. /b/c/a/a/a..aa.
+/b/c/a/a/a..aa/ /b/c/a/a/a..aa
+/b/c/a/a/a..a.a /b/c/a/a/a..a.a
+/b/c/a/a/a..a.. /b/c/a/a/a..a..
+/b/c/a/a/a..a./ /b/c/a/a/a..a.
+/b/c/a/a/a..a/a /b/c/a/a/a..a/a
+/b/c/a/a/a..a/. /b/c/a/a/a..a
+/b/c/a/a/a..a// /b/c/a/a/a..a
+/b/c/a/a/a...aa /b/c/a/a/a...aa
+/b/c/a/a/a...a. /b/c/a/a/a...a.
+/b/c/a/a/a...a/ /b/c/a/a/a...a
+/b/c/a/a/a....a /b/c/a/a/a....a
+/b/c/a/a/a..... /b/c/a/a/a.....
+/b/c/a/a/a..../ /b/c/a/a/a....
+/b/c/a/a/a.../a /b/c/a/a/a.../a
+/b/c/a/a/a.../. /b/c/a/a/a...
+/b/c/a/a/a...// /b/c/a/a/a...
+/b/c/a/a/a../aa /b/c/a/a/a../aa
+/b/c/a/a/a../a. /b/c/a/a/a../a.
+/b/c/a/a/a../a/ /b/c/a/a/a../a
+/b/c/a/a/a../.a /b/c/a/a/a../.a
+/b/c/a/a/a../.. /b/c/a/a
+/b/c/a/a/a.././ /b/c/a/a/a..
+/b/c/a/a/a..//a /b/c/a/a/a../a
+/b/c/a/a/a..//. /b/c/a/a/a..
+/b/c/a/a/a../// /b/c/a/a/a..
+/b/c/a/a/a./aaa /b/c/a/a/a./aaa
+/b/c/a/a/a./aa. /b/c/a/a/a./aa.
+/b/c/a/a/a./aa/ /b/c/a/a/a./aa
+/b/c/a/a/a./a.a /b/c/a/a/a./a.a
+/b/c/a/a/a./a.. /b/c/a/a/a./a..
+/b/c/a/a/a./a./ /b/c/a/a/a./a.
+/b/c/a/a/a./a/a /b/c/a/a/a./a/a
+/b/c/a/a/a./a/. /b/c/a/a/a./a
+/b/c/a/a/a./a// /b/c/a/a/a./a
+/b/c/a/a/a./.aa /b/c/a/a/a./.aa
+/b/c/a/a/a./.a. /b/c/a/a/a./.a.
+/b/c/a/a/a./.a/ /b/c/a/a/a./.a
+/b/c/a/a/a./..a /b/c/a/a/a./..a
+/b/c/a/a/a./... /b/c/a/a/a./...
+/b/c/a/a/a./../ /b/c/a/a
+/b/c/a/a/a././a /b/c/a/a/a./a
+/b/c/a/a/a././. /b/c/a/a/a.
+/b/c/a/a/a./.// /b/c/a/a/a.
+/b/c/a/a/a.//aa /b/c/a/a/a./aa
+/b/c/a/a/a.//a. /b/c/a/a/a./a.
+/b/c/a/a/a.//a/ /b/c/a/a/a./a
+/b/c/a/a/a.//.a /b/c/a/a/a./.a
+/b/c/a/a/a.//.. /b/c/a/a
+/b/c/a/a/a.//./ /b/c/a/a/a.
+/b/c/a/a/a.///a /b/c/a/a/a./a
+/b/c/a/a/a.///. /b/c/a/a/a.
+/b/c/a/a/a.//// /b/c/a/a/a.
+/b/c/a/a/a/aaaa /b/c/a/a/a/aaaa
+/b/c/a/a/a/aaa. /b/c/a/a/a/aaa.
+/b/c/a/a/a/aaa/ /b/c/a/a/a/aaa
+/b/c/a/a/a/aa.a /b/c/a/a/a/aa.a
+/b/c/a/a/a/aa.. /b/c/a/a/a/aa..
+/b/c/a/a/a/aa./ /b/c/a/a/a/aa.
+/b/c/a/a/a/aa/a /b/c/a/a/a/aa/a
+/b/c/a/a/a/aa/. /b/c/a/a/a/aa
+/b/c/a/a/a/aa// /b/c/a/a/a/aa
+/b/c/a/a/a/a.aa /b/c/a/a/a/a.aa
+/b/c/a/a/a/a.a. /b/c/a/a/a/a.a.
+/b/c/a/a/a/a.a/ /b/c/a/a/a/a.a
+/b/c/a/a/a/a..a /b/c/a/a/a/a..a
+/b/c/a/a/a/a... /b/c/a/a/a/a...
+/b/c/a/a/a/a../ /b/c/a/a/a/a..
+/b/c/a/a/a/a./a /b/c/a/a/a/a./a
+/b/c/a/a/a/a./. /b/c/a/a/a/a.
+/b/c/a/a/a/a.// /b/c/a/a/a/a.
+/b/c/a/a/a/a/aa /b/c/a/a/a/a/aa
+/b/c/a/a/a/a/a. /b/c/a/a/a/a/a.
+/b/c/a/a/a/a/a/ /b/c/a/a/a/a/a
+/b/c/a/a/a/a/.a /b/c/a/a/a/a/.a
+/b/c/a/a/a/a/.. /b/c/a/a/a
+/b/c/a/a/a/a/./ /b/c/a/a/a/a
+/b/c/a/a/a/a//a /b/c/a/a/a/a/a
+/b/c/a/a/a/a//. /b/c/a/a/a/a
+/b/c/a/a/a/a/// /b/c/a/a/a/a
+/b/c/a/a/a/.aaa /b/c/a/a/a/.aaa
+/b/c/a/a/a/.aa. /b/c/a/a/a/.aa.
+/b/c/a/a/a/.aa/ /b/c/a/a/a/.aa
+/b/c/a/a/a/.a.a /b/c/a/a/a/.a.a
+/b/c/a/a/a/.a.. /b/c/a/a/a/.a..
+/b/c/a/a/a/.a./ /b/c/a/a/a/.a.
+/b/c/a/a/a/.a/a /b/c/a/a/a/.a/a
+/b/c/a/a/a/.a/. /b/c/a/a/a/.a
+/b/c/a/a/a/.a// /b/c/a/a/a/.a
+/b/c/a/a/a/..aa /b/c/a/a/a/..aa
+/b/c/a/a/a/..a. /b/c/a/a/a/..a.
+/b/c/a/a/a/..a/ /b/c/a/a/a/..a
+/b/c/a/a/a/...a /b/c/a/a/a/...a
+/b/c/a/a/a/.... /b/c/a/a/a/....
+/b/c/a/a/a/.../ /b/c/a/a/a/...
+/b/c/a/a/a/../a /b/c/a/a/a
+/b/c/a/a/a/../. /b/c/a/a
+/b/c/a/a/a/..// /b/c/a/a
+/b/c/a/a/a/./aa /b/c/a/a/a/aa
+/b/c/a/a/a/./a. /b/c/a/a/a/a.
+/b/c/a/a/a/./a/ /b/c/a/a/a/a
+/b/c/a/a/a/./.a /b/c/a/a/a/.a
+/b/c/a/a/a/./.. /b/c/a/a
+/b/c/a/a/a/././ /b/c/a/a/a
+/b/c/a/a/a/.//a /b/c/a/a/a/a
+/b/c/a/a/a/.//. /b/c/a/a/a
+/b/c/a/a/a/./// /b/c/a/a/a
+/b/c/a/a/a//aaa /b/c/a/a/a/aaa
+/b/c/a/a/a//aa. /b/c/a/a/a/aa.
+/b/c/a/a/a//aa/ /b/c/a/a/a/aa
+/b/c/a/a/a//a.a /b/c/a/a/a/a.a
+/b/c/a/a/a//a.. /b/c/a/a/a/a..
+/b/c/a/a/a//a./ /b/c/a/a/a/a.
+/b/c/a/a/a//a/a /b/c/a/a/a/a/a
+/b/c/a/a/a//a/. /b/c/a/a/a/a
+/b/c/a/a/a//a// /b/c/a/a/a/a
+/b/c/a/a/a//.aa /b/c/a/a/a/.aa
+/b/c/a/a/a//.a. /b/c/a/a/a/.a.
+/b/c/a/a/a//.a/ /b/c/a/a/a/.a
+/b/c/a/a/a//..a /b/c/a/a/a/..a
+/b/c/a/a/a//... /b/c/a/a/a/...
+/b/c/a/a/a//../ /b/c/a/a
+/b/c/a/a/a//./a /b/c/a/a/a/a
+/b/c/a/a/a//./. /b/c/a/a/a
+/b/c/a/a/a//.// /b/c/a/a/a
+/b/c/a/a/a///aa /b/c/a/a/a/aa
+/b/c/a/a/a///a. /b/c/a/a/a/a.
+/b/c/a/a/a///a/ /b/c/a/a/a/a
+/b/c/a/a/a///.a /b/c/a/a/a/.a
+/b/c/a/a/a///.. /b/c/a/a
+/b/c/a/a/a///./ /b/c/a/a/a
+/b/c/a/a/a////a /b/c/a/a/a/a
+/b/c/a/a/a////. /b/c/a/a/a
+/b/c/a/a/a///// /b/c/a/a/a
+/b/c/a/a/.aaaaa /b/c/a/a/.aaaaa
+/b/c/a/a/.aaaa. /b/c/a/a/.aaaa.
+/b/c/a/a/.aaaa/ /b/c/a/a/.aaaa
+/b/c/a/a/.aaa.a /b/c/a/a/.aaa.a
+/b/c/a/a/.aaa.. /b/c/a/a/.aaa..
+/b/c/a/a/.aaa./ /b/c/a/a/.aaa.
+/b/c/a/a/.aaa/a /b/c/a/a/.aaa/a
+/b/c/a/a/.aaa/. /b/c/a/a/.aaa
+/b/c/a/a/.aaa// /b/c/a/a/.aaa
+/b/c/a/a/.aa.aa /b/c/a/a/.aa.aa
+/b/c/a/a/.aa.a. /b/c/a/a/.aa.a.
+/b/c/a/a/.aa.a/ /b/c/a/a/.aa.a
+/b/c/a/a/.aa..a /b/c/a/a/.aa..a
+/b/c/a/a/.aa... /b/c/a/a/.aa...
+/b/c/a/a/.aa../ /b/c/a/a/.aa..
+/b/c/a/a/.aa./a /b/c/a/a/.aa./a
+/b/c/a/a/.aa./. /b/c/a/a/.aa.
+/b/c/a/a/.aa.// /b/c/a/a/.aa.
+/b/c/a/a/.aa/aa /b/c/a/a/.aa/aa
+/b/c/a/a/.aa/a. /b/c/a/a/.aa/a.
+/b/c/a/a/.aa/a/ /b/c/a/a/.aa/a
+/b/c/a/a/.aa/.a /b/c/a/a/.aa/.a
+/b/c/a/a/.aa/.. /b/c/a/a
+/b/c/a/a/.aa/./ /b/c/a/a/.aa
+/b/c/a/a/.aa//a /b/c/a/a/.aa/a
+/b/c/a/a/.aa//. /b/c/a/a/.aa
+/b/c/a/a/.aa/// /b/c/a/a/.aa
+/b/c/a/a/.a.aaa /b/c/a/a/.a.aaa
+/b/c/a/a/.a.aa. /b/c/a/a/.a.aa.
+/b/c/a/a/.a.aa/ /b/c/a/a/.a.aa
+/b/c/a/a/.a.a.a /b/c/a/a/.a.a.a
+/b/c/a/a/.a.a.. /b/c/a/a/.a.a..
+/b/c/a/a/.a.a./ /b/c/a/a/.a.a.
+/b/c/a/a/.a.a/a /b/c/a/a/.a.a/a
+/b/c/a/a/.a.a/. /b/c/a/a/.a.a
+/b/c/a/a/.a.a// /b/c/a/a/.a.a
+/b/c/a/a/.a..aa /b/c/a/a/.a..aa
+/b/c/a/a/.a..a. /b/c/a/a/.a..a.
+/b/c/a/a/.a..a/ /b/c/a/a/.a..a
+/b/c/a/a/.a...a /b/c/a/a/.a...a
+/b/c/a/a/.a.... /b/c/a/a/.a....
+/b/c/a/a/.a.../ /b/c/a/a/.a...
+/b/c/a/a/.a../a /b/c/a/a/.a../a
+/b/c/a/a/.a../. /b/c/a/a/.a..
+/b/c/a/a/.a..// /b/c/a/a/.a..
+/b/c/a/a/.a./aa /b/c/a/a/.a./aa
+/b/c/a/a/.a./a. /b/c/a/a/.a./a.
+/b/c/a/a/.a./a/ /b/c/a/a/.a./a
+/b/c/a/a/.a./.a /b/c/a/a/.a./.a
+/b/c/a/a/.a./.. /b/c/a/a
+/b/c/a/a/.a././ /b/c/a/a/.a.
+/b/c/a/a/.a.//a /b/c/a/a/.a./a
+/b/c/a/a/.a.//. /b/c/a/a/.a.
+/b/c/a/a/.a./// /b/c/a/a/.a.
+/b/c/a/a/.a/aaa /b/c/a/a/.a/aaa
+/b/c/a/a/.a/aa. /b/c/a/a/.a/aa.
+/b/c/a/a/.a/aa/ /b/c/a/a/.a/aa
+/b/c/a/a/.a/a.a /b/c/a/a/.a/a.a
+/b/c/a/a/.a/a.. /b/c/a/a/.a/a..
+/b/c/a/a/.a/a./ /b/c/a/a/.a/a.
+/b/c/a/a/.a/a/a /b/c/a/a/.a/a/a
+/b/c/a/a/.a/a/. /b/c/a/a/.a/a
+/b/c/a/a/.a/a// /b/c/a/a/.a/a
+/b/c/a/a/.a/.aa /b/c/a/a/.a/.aa
+/b/c/a/a/.a/.a. /b/c/a/a/.a/.a.
+/b/c/a/a/.a/.a/ /b/c/a/a/.a/.a
+/b/c/a/a/.a/..a /b/c/a/a/.a/..a
+/b/c/a/a/.a/... /b/c/a/a/.a/...
+/b/c/a/a/.a/../ /b/c/a/a
+/b/c/a/a/.a/./a /b/c/a/a/.a/a
+/b/c/a/a/.a/./. /b/c/a/a/.a
+/b/c/a/a/.a/.// /b/c/a/a/.a
+/b/c/a/a/.a//aa /b/c/a/a/.a/aa
+/b/c/a/a/.a//a. /b/c/a/a/.a/a.
+/b/c/a/a/.a//a/ /b/c/a/a/.a/a
+/b/c/a/a/.a//.a /b/c/a/a/.a/.a
+/b/c/a/a/.a//.. /b/c/a/a
+/b/c/a/a/.a//./ /b/c/a/a/.a
+/b/c/a/a/.a///a /b/c/a/a/.a/a
+/b/c/a/a/.a///. /b/c/a/a/.a
+/b/c/a/a/.a//// /b/c/a/a/.a
+/b/c/a/a/..aaaa /b/c/a/a/..aaaa
+/b/c/a/a/..aaa. /b/c/a/a/..aaa.
+/b/c/a/a/..aaa/ /b/c/a/a/..aaa
+/b/c/a/a/..aa.a /b/c/a/a/..aa.a
+/b/c/a/a/..aa.. /b/c/a/a/..aa..
+/b/c/a/a/..aa./ /b/c/a/a/..aa.
+/b/c/a/a/..aa/a /b/c/a/a/..aa/a
+/b/c/a/a/..aa/. /b/c/a/a/..aa
+/b/c/a/a/..aa// /b/c/a/a/..aa
+/b/c/a/a/..a.aa /b/c/a/a/..a.aa
+/b/c/a/a/..a.a. /b/c/a/a/..a.a.
+/b/c/a/a/..a.a/ /b/c/a/a/..a.a
+/b/c/a/a/..a..a /b/c/a/a/..a..a
+/b/c/a/a/..a... /b/c/a/a/..a...
+/b/c/a/a/..a../ /b/c/a/a/..a..
+/b/c/a/a/..a./a /b/c/a/a/..a./a
+/b/c/a/a/..a./. /b/c/a/a/..a.
+/b/c/a/a/..a.// /b/c/a/a/..a.
+/b/c/a/a/..a/aa /b/c/a/a/..a/aa
+/b/c/a/a/..a/a. /b/c/a/a/..a/a.
+/b/c/a/a/..a/a/ /b/c/a/a/..a/a
+/b/c/a/a/..a/.a /b/c/a/a/..a/.a
+/b/c/a/a/..a/.. /b/c/a/a
+/b/c/a/a/..a/./ /b/c/a/a/..a
+/b/c/a/a/..a//a /b/c/a/a/..a/a
+/b/c/a/a/..a//. /b/c/a/a/..a
+/b/c/a/a/..a/// /b/c/a/a/..a
+/b/c/a/a/...aaa /b/c/a/a/...aaa
+/b/c/a/a/...aa. /b/c/a/a/...aa.
+/b/c/a/a/...aa/ /b/c/a/a/...aa
+/b/c/a/a/...a.a /b/c/a/a/...a.a
+/b/c/a/a/...a.. /b/c/a/a/...a..
+/b/c/a/a/...a./ /b/c/a/a/...a.
+/b/c/a/a/...a/a /b/c/a/a/...a/a
+/b/c/a/a/...a/. /b/c/a/a/...a
+/b/c/a/a/...a// /b/c/a/a/...a
+/b/c/a/a/....aa /b/c/a/a/....aa
+/b/c/a/a/....a. /b/c/a/a/....a.
+/b/c/a/a/....a/ /b/c/a/a/....a
+/b/c/a/a/.....a /b/c/a/a/.....a
+/b/c/a/a/...... /b/c/a/a/......
+/b/c/a/a/...../ /b/c/a/a/.....
+/b/c/a/a/..../a /b/c/a/a/..../a
+/b/c/a/a/..../. /b/c/a/a/....
+/b/c/a/a/....// /b/c/a/a/....
+/b/c/a/a/.../aa /b/c/a/a/.../aa
+/b/c/a/a/.../a. /b/c/a/a/.../a.
+/b/c/a/a/.../a/ /b/c/a/a/.../a
+/b/c/a/a/.../.a /b/c/a/a/.../.a
+/b/c/a/a/.../.. /b/c/a/a
+/b/c/a/a/..././ /b/c/a/a/...
+/b/c/a/a/...//a /b/c/a/a/.../a
+/b/c/a/a/...//. /b/c/a/a/...
+/b/c/a/a/.../// /b/c/a/a/...
+/b/c/a/a/../aaa /b/c/a/aaa
+/b/c/a/a/../aa. /b/c/a/aa.
+/b/c/a/a/../aa/ /b/c/a/aa
+/b/c/a/a/../a.a /b/c/a/a.a
+/b/c/a/a/../a.. /b/c/a/a..
+/b/c/a/a/../a./ /b/c/a/a.
+/b/c/a/a/../a/a /b/c/a/a/a
+/b/c/a/a/../a/. /b/c/a/a
+/b/c/a/a/../a// /b/c/a/a
+/b/c/a/a/../.aa /b/c/a/.aa
+/b/c/a/a/../.a. /b/c/a/.a.
+/b/c/a/a/../.a/ /b/c/a/.a
+/b/c/a/a/../..a /b/c/a/..a
+/b/c/a/a/../... /b/c/a/...
+/b/c/a/a/../../ /b/c
+/b/c/a/a/.././a /b/c/a/a
+/b/c/a/a/.././. /b/c/a
+/b/c/a/a/../.// /b/c/a
+/b/c/a/a/..//aa /b/c/a/aa
+/b/c/a/a/..//a. /b/c/a/a.
+/b/c/a/a/..//a/ /b/c/a/a
+/b/c/a/a/..//.a /b/c/a/.a
+/b/c/a/a/..//.. /b/c
+/b/c/a/a/..//./ /b/c/a
+/b/c/a/a/..///a /b/c/a/a
+/b/c/a/a/..///. /b/c/a
+/b/c/a/a/..//// /b/c/a
+/b/c/a/a/./aaaa /b/c/a/a/aaaa
+/b/c/a/a/./aaa. /b/c/a/a/aaa.
+/b/c/a/a/./aaa/ /b/c/a/a/aaa
+/b/c/a/a/./aa.a /b/c/a/a/aa.a
+/b/c/a/a/./aa.. /b/c/a/a/aa..
+/b/c/a/a/./aa./ /b/c/a/a/aa.
+/b/c/a/a/./aa/a /b/c/a/a/aa/a
+/b/c/a/a/./aa/. /b/c/a/a/aa
+/b/c/a/a/./aa// /b/c/a/a/aa
+/b/c/a/a/./a.aa /b/c/a/a/a.aa
+/b/c/a/a/./a.a. /b/c/a/a/a.a.
+/b/c/a/a/./a.a/ /b/c/a/a/a.a
+/b/c/a/a/./a..a /b/c/a/a/a..a
+/b/c/a/a/./a... /b/c/a/a/a...
+/b/c/a/a/./a../ /b/c/a/a/a..
+/b/c/a/a/./a./a /b/c/a/a/a./a
+/b/c/a/a/./a./. /b/c/a/a/a.
+/b/c/a/a/./a.// /b/c/a/a/a.
+/b/c/a/a/./a/aa /b/c/a/a/a/aa
+/b/c/a/a/./a/a. /b/c/a/a/a/a.
+/b/c/a/a/./a/a/ /b/c/a/a/a/a
+/b/c/a/a/./a/.a /b/c/a/a/a/.a
+/b/c/a/a/./a/.. /b/c/a/a
+/b/c/a/a/./a/./ /b/c/a/a/a
+/b/c/a/a/./a//a /b/c/a/a/a/a
+/b/c/a/a/./a//. /b/c/a/a/a
+/b/c/a/a/./a/// /b/c/a/a/a
+/b/c/a/a/./.aaa /b/c/a/a/.aaa
+/b/c/a/a/./.aa. /b/c/a/a/.aa.
+/b/c/a/a/./.aa/ /b/c/a/a/.aa
+/b/c/a/a/./.a.a /b/c/a/a/.a.a
+/b/c/a/a/./.a.. /b/c/a/a/.a..
+/b/c/a/a/./.a./ /b/c/a/a/.a.
+/b/c/a/a/./.a/a /b/c/a/a/.a/a
+/b/c/a/a/./.a/. /b/c/a/a/.a
+/b/c/a/a/./.a// /b/c/a/a/.a
+/b/c/a/a/./..aa /b/c/a/a/..aa
+/b/c/a/a/./..a. /b/c/a/a/..a.
+/b/c/a/a/./..a/ /b/c/a/a/..a
+/b/c/a/a/./...a /b/c/a/a/...a
+/b/c/a/a/./.... /b/c/a/a/....
+/b/c/a/a/./.../ /b/c/a/a/...
+/b/c/a/a/./../a /b/c/a/a
+/b/c/a/a/./../. /b/c/a
+/b/c/a/a/./..// /b/c/a
+/b/c/a/a/././aa /b/c/a/a/aa
+/b/c/a/a/././a. /b/c/a/a/a.
+/b/c/a/a/././a/ /b/c/a/a/a
+/b/c/a/a/././.a /b/c/a/a/.a
+/b/c/a/a/././.. /b/c/a
+/b/c/a/a/./././ /b/c/a/a
+/b/c/a/a/././/a /b/c/a/a/a
+/b/c/a/a/././/. /b/c/a/a
+/b/c/a/a/././// /b/c/a/a
+/b/c/a/a/.//aaa /b/c/a/a/aaa
+/b/c/a/a/.//aa. /b/c/a/a/aa.
+/b/c/a/a/.//aa/ /b/c/a/a/aa
+/b/c/a/a/.//a.a /b/c/a/a/a.a
+/b/c/a/a/.//a.. /b/c/a/a/a..
+/b/c/a/a/.//a./ /b/c/a/a/a.
+/b/c/a/a/.//a/a /b/c/a/a/a/a
+/b/c/a/a/.//a/. /b/c/a/a/a
+/b/c/a/a/.//a// /b/c/a/a/a
+/b/c/a/a/.//.aa /b/c/a/a/.aa
+/b/c/a/a/.//.a. /b/c/a/a/.a.
+/b/c/a/a/.//.a/ /b/c/a/a/.a
+/b/c/a/a/.//..a /b/c/a/a/..a
+/b/c/a/a/.//... /b/c/a/a/...
+/b/c/a/a/.//../ /b/c/a
+/b/c/a/a/.//./a /b/c/a/a/a
+/b/c/a/a/.//./. /b/c/a/a
+/b/c/a/a/.//.// /b/c/a/a
+/b/c/a/a/.///aa /b/c/a/a/aa
+/b/c/a/a/.///a. /b/c/a/a/a.
+/b/c/a/a/.///a/ /b/c/a/a/a
+/b/c/a/a/.///.a /b/c/a/a/.a
+/b/c/a/a/.///.. /b/c/a
+/b/c/a/a/.///./ /b/c/a/a
+/b/c/a/a/.////a /b/c/a/a/a
+/b/c/a/a/.////. /b/c/a/a
+/b/c/a/a/.///// /b/c/a/a
+/b/c/a/a//aaaaa /b/c/a/a/aaaaa
+/b/c/a/a//aaaa. /b/c/a/a/aaaa.
+/b/c/a/a//aaaa/ /b/c/a/a/aaaa
+/b/c/a/a//aaa.a /b/c/a/a/aaa.a
+/b/c/a/a//aaa.. /b/c/a/a/aaa..
+/b/c/a/a//aaa./ /b/c/a/a/aaa.
+/b/c/a/a//aaa/a /b/c/a/a/aaa/a
+/b/c/a/a//aaa/. /b/c/a/a/aaa
+/b/c/a/a//aaa// /b/c/a/a/aaa
+/b/c/a/a//aa.aa /b/c/a/a/aa.aa
+/b/c/a/a//aa.a. /b/c/a/a/aa.a.
+/b/c/a/a//aa.a/ /b/c/a/a/aa.a
+/b/c/a/a//aa..a /b/c/a/a/aa..a
+/b/c/a/a//aa... /b/c/a/a/aa...
+/b/c/a/a//aa../ /b/c/a/a/aa..
+/b/c/a/a//aa./a /b/c/a/a/aa./a
+/b/c/a/a//aa./. /b/c/a/a/aa.
+/b/c/a/a//aa.// /b/c/a/a/aa.
+/b/c/a/a//aa/aa /b/c/a/a/aa/aa
+/b/c/a/a//aa/a. /b/c/a/a/aa/a.
+/b/c/a/a//aa/a/ /b/c/a/a/aa/a
+/b/c/a/a//aa/.a /b/c/a/a/aa/.a
+/b/c/a/a//aa/.. /b/c/a/a
+/b/c/a/a//aa/./ /b/c/a/a/aa
+/b/c/a/a//aa//a /b/c/a/a/aa/a
+/b/c/a/a//aa//. /b/c/a/a/aa
+/b/c/a/a//aa/// /b/c/a/a/aa
+/b/c/a/a//a.aaa /b/c/a/a/a.aaa
+/b/c/a/a//a.aa. /b/c/a/a/a.aa.
+/b/c/a/a//a.aa/ /b/c/a/a/a.aa
+/b/c/a/a//a.a.a /b/c/a/a/a.a.a
+/b/c/a/a//a.a.. /b/c/a/a/a.a..
+/b/c/a/a//a.a./ /b/c/a/a/a.a.
+/b/c/a/a//a.a/a /b/c/a/a/a.a/a
+/b/c/a/a//a.a/. /b/c/a/a/a.a
+/b/c/a/a//a.a// /b/c/a/a/a.a
+/b/c/a/a//a..aa /b/c/a/a/a..aa
+/b/c/a/a//a..a. /b/c/a/a/a..a.
+/b/c/a/a//a..a/ /b/c/a/a/a..a
+/b/c/a/a//a...a /b/c/a/a/a...a
+/b/c/a/a//a.... /b/c/a/a/a....
+/b/c/a/a//a.../ /b/c/a/a/a...
+/b/c/a/a//a../a /b/c/a/a/a../a
+/b/c/a/a//a../. /b/c/a/a/a..
+/b/c/a/a//a..// /b/c/a/a/a..
+/b/c/a/a//a./aa /b/c/a/a/a./aa
+/b/c/a/a//a./a. /b/c/a/a/a./a.
+/b/c/a/a//a./a/ /b/c/a/a/a./a
+/b/c/a/a//a./.a /b/c/a/a/a./.a
+/b/c/a/a//a./.. /b/c/a/a
+/b/c/a/a//a././ /b/c/a/a/a.
+/b/c/a/a//a.//a /b/c/a/a/a./a
+/b/c/a/a//a.//. /b/c/a/a/a.
+/b/c/a/a//a./// /b/c/a/a/a.
+/b/c/a/a//a/aaa /b/c/a/a/a/aaa
+/b/c/a/a//a/aa. /b/c/a/a/a/aa.
+/b/c/a/a//a/aa/ /b/c/a/a/a/aa
+/b/c/a/a//a/a.a /b/c/a/a/a/a.a
+/b/c/a/a//a/a.. /b/c/a/a/a/a..
+/b/c/a/a//a/a./ /b/c/a/a/a/a.
+/b/c/a/a//a/a/a /b/c/a/a/a/a/a
+/b/c/a/a//a/a/. /b/c/a/a/a/a
+/b/c/a/a//a/a// /b/c/a/a/a/a
+/b/c/a/a//a/.aa /b/c/a/a/a/.aa
+/b/c/a/a//a/.a. /b/c/a/a/a/.a.
+/b/c/a/a//a/.a/ /b/c/a/a/a/.a
+/b/c/a/a//a/..a /b/c/a/a/a/..a
+/b/c/a/a//a/... /b/c/a/a/a/...
+/b/c/a/a//a/../ /b/c/a/a
+/b/c/a/a//a/./a /b/c/a/a/a/a
+/b/c/a/a//a/./. /b/c/a/a/a
+/b/c/a/a//a/.// /b/c/a/a/a
+/b/c/a/a//a//aa /b/c/a/a/a/aa
+/b/c/a/a//a//a. /b/c/a/a/a/a.
+/b/c/a/a//a//a/ /b/c/a/a/a/a
+/b/c/a/a//a//.a /b/c/a/a/a/.a
+/b/c/a/a//a//.. /b/c/a/a
+/b/c/a/a//a//./ /b/c/a/a/a
+/b/c/a/a//a///a /b/c/a/a/a/a
+/b/c/a/a//a///. /b/c/a/a/a
+/b/c/a/a//a//// /b/c/a/a/a
+/b/c/a/a//.aaaa /b/c/a/a/.aaaa
+/b/c/a/a//.aaa. /b/c/a/a/.aaa.
+/b/c/a/a//.aaa/ /b/c/a/a/.aaa
+/b/c/a/a//.aa.a /b/c/a/a/.aa.a
+/b/c/a/a//.aa.. /b/c/a/a/.aa..
+/b/c/a/a//.aa./ /b/c/a/a/.aa.
+/b/c/a/a//.aa/a /b/c/a/a/.aa/a
+/b/c/a/a//.aa/. /b/c/a/a/.aa
+/b/c/a/a//.aa// /b/c/a/a/.aa
+/b/c/a/a//.a.aa /b/c/a/a/.a.aa
+/b/c/a/a//.a.a. /b/c/a/a/.a.a.
+/b/c/a/a//.a.a/ /b/c/a/a/.a.a
+/b/c/a/a//.a..a /b/c/a/a/.a..a
+/b/c/a/a//.a... /b/c/a/a/.a...
+/b/c/a/a//.a../ /b/c/a/a/.a..
+/b/c/a/a//.a./a /b/c/a/a/.a./a
+/b/c/a/a//.a./. /b/c/a/a/.a.
+/b/c/a/a//.a.// /b/c/a/a/.a.
+/b/c/a/a//.a/aa /b/c/a/a/.a/aa
+/b/c/a/a//.a/a. /b/c/a/a/.a/a.
+/b/c/a/a//.a/a/ /b/c/a/a/.a/a
+/b/c/a/a//.a/.a /b/c/a/a/.a/.a
+/b/c/a/a//.a/.. /b/c/a/a
+/b/c/a/a//.a/./ /b/c/a/a/.a
+/b/c/a/a//.a//a /b/c/a/a/.a/a
+/b/c/a/a//.a//. /b/c/a/a/.a
+/b/c/a/a//.a/// /b/c/a/a/.a
+/b/c/a/a//..aaa /b/c/a/a/..aaa
+/b/c/a/a//..aa. /b/c/a/a/..aa.
+/b/c/a/a//..aa/ /b/c/a/a/..aa
+/b/c/a/a//..a.a /b/c/a/a/..a.a
+/b/c/a/a//..a.. /b/c/a/a/..a..
+/b/c/a/a//..a./ /b/c/a/a/..a.
+/b/c/a/a//..a/a /b/c/a/a/..a/a
+/b/c/a/a//..a/. /b/c/a/a/..a
+/b/c/a/a//..a// /b/c/a/a/..a
+/b/c/a/a//...aa /b/c/a/a/...aa
+/b/c/a/a//...a. /b/c/a/a/...a.
+/b/c/a/a//...a/ /b/c/a/a/...a
+/b/c/a/a//....a /b/c/a/a/....a
+/b/c/a/a//..... /b/c/a/a/.....
+/b/c/a/a//..../ /b/c/a/a/....
+/b/c/a/a//.../a /b/c/a/a/.../a
+/b/c/a/a//.../. /b/c/a/a/...
+/b/c/a/a//...// /b/c/a/a/...
+/b/c/a/a//../aa /b/c/a/aa
+/b/c/a/a//../a. /b/c/a/a.
+/b/c/a/a//../a/ /b/c/a/a
+/b/c/a/a//../.a /b/c/a/.a
+/b/c/a/a//../.. /b/c
+/b/c/a/a//.././ /b/c/a
+/b/c/a/a//..//a /b/c/a/a
+/b/c/a/a//..//. /b/c/a
+/b/c/a/a//../// /b/c/a
+/b/c/a/a//./aaa /b/c/a/a/aaa
+/b/c/a/a//./aa. /b/c/a/a/aa.
+/b/c/a/a//./aa/ /b/c/a/a/aa
+/b/c/a/a//./a.a /b/c/a/a/a.a
+/b/c/a/a//./a.. /b/c/a/a/a..
+/b/c/a/a//./a./ /b/c/a/a/a.
+/b/c/a/a//./a/a /b/c/a/a/a/a
+/b/c/a/a//./a/. /b/c/a/a/a
+/b/c/a/a//./a// /b/c/a/a/a
+/b/c/a/a//./.aa /b/c/a/a/.aa
+/b/c/a/a//./.a. /b/c/a/a/.a.
+/b/c/a/a//./.a/ /b/c/a/a/.a
+/b/c/a/a//./..a /b/c/a/a/..a
+/b/c/a/a//./... /b/c/a/a/...
+/b/c/a/a//./../ /b/c/a
+/b/c/a/a//././a /b/c/a/a/a
+/b/c/a/a//././. /b/c/a/a
+/b/c/a/a//./.// /b/c/a/a
+/b/c/a/a//.//aa /b/c/a/a/aa
+/b/c/a/a//.//a. /b/c/a/a/a.
+/b/c/a/a//.//a/ /b/c/a/a/a
+/b/c/a/a//.//.a /b/c/a/a/.a
+/b/c/a/a//.//.. /b/c/a
+/b/c/a/a//.//./ /b/c/a/a
+/b/c/a/a//.///a /b/c/a/a/a
+/b/c/a/a//.///. /b/c/a/a
+/b/c/a/a//.//// /b/c/a/a
+/b/c/a/a///aaaa /b/c/a/a/aaaa
+/b/c/a/a///aaa. /b/c/a/a/aaa.
+/b/c/a/a///aaa/ /b/c/a/a/aaa
+/b/c/a/a///aa.a /b/c/a/a/aa.a
+/b/c/a/a///aa.. /b/c/a/a/aa..
+/b/c/a/a///aa./ /b/c/a/a/aa.
+/b/c/a/a///aa/a /b/c/a/a/aa/a
+/b/c/a/a///aa/. /b/c/a/a/aa
+/b/c/a/a///aa// /b/c/a/a/aa
+/b/c/a/a///a.aa /b/c/a/a/a.aa
+/b/c/a/a///a.a. /b/c/a/a/a.a.
+/b/c/a/a///a.a/ /b/c/a/a/a.a
+/b/c/a/a///a..a /b/c/a/a/a..a
+/b/c/a/a///a... /b/c/a/a/a...
+/b/c/a/a///a../ /b/c/a/a/a..
+/b/c/a/a///a./a /b/c/a/a/a./a
+/b/c/a/a///a./. /b/c/a/a/a.
+/b/c/a/a///a.// /b/c/a/a/a.
+/b/c/a/a///a/aa /b/c/a/a/a/aa
+/b/c/a/a///a/a. /b/c/a/a/a/a.
+/b/c/a/a///a/a/ /b/c/a/a/a/a
+/b/c/a/a///a/.a /b/c/a/a/a/.a
+/b/c/a/a///a/.. /b/c/a/a
+/b/c/a/a///a/./ /b/c/a/a/a
+/b/c/a/a///a//a /b/c/a/a/a/a
+/b/c/a/a///a//. /b/c/a/a/a
+/b/c/a/a///a/// /b/c/a/a/a
+/b/c/a/a///.aaa /b/c/a/a/.aaa
+/b/c/a/a///.aa. /b/c/a/a/.aa.
+/b/c/a/a///.aa/ /b/c/a/a/.aa
+/b/c/a/a///.a.a /b/c/a/a/.a.a
+/b/c/a/a///.a.. /b/c/a/a/.a..
+/b/c/a/a///.a./ /b/c/a/a/.a.
+/b/c/a/a///.a/a /b/c/a/a/.a/a
+/b/c/a/a///.a/. /b/c/a/a/.a
+/b/c/a/a///.a// /b/c/a/a/.a
+/b/c/a/a///..aa /b/c/a/a/..aa
+/b/c/a/a///..a. /b/c/a/a/..a.
+/b/c/a/a///..a/ /b/c/a/a/..a
+/b/c/a/a///...a /b/c/a/a/...a
+/b/c/a/a///.... /b/c/a/a/....
+/b/c/a/a///.../ /b/c/a/a/...
+/b/c/a/a///../a /b/c/a/a
+/b/c/a/a///../. /b/c/a
+/b/c/a/a///..// /b/c/a
+/b/c/a/a///./aa /b/c/a/a/aa
+/b/c/a/a///./a. /b/c/a/a/a.
+/b/c/a/a///./a/ /b/c/a/a/a
+/b/c/a/a///./.a /b/c/a/a/.a
+/b/c/a/a///./.. /b/c/a
+/b/c/a/a///././ /b/c/a/a
+/b/c/a/a///.//a /b/c/a/a/a
+/b/c/a/a///.//. /b/c/a/a
+/b/c/a/a///./// /b/c/a/a
+/b/c/a/a////aaa /b/c/a/a/aaa
+/b/c/a/a////aa. /b/c/a/a/aa.
+/b/c/a/a////aa/ /b/c/a/a/aa
+/b/c/a/a////a.a /b/c/a/a/a.a
+/b/c/a/a////a.. /b/c/a/a/a..
+/b/c/a/a////a./ /b/c/a/a/a.
+/b/c/a/a////a/a /b/c/a/a/a/a
+/b/c/a/a////a/. /b/c/a/a/a
+/b/c/a/a////a// /b/c/a/a/a
+/b/c/a/a////.aa /b/c/a/a/.aa
+/b/c/a/a////.a. /b/c/a/a/.a.
+/b/c/a/a////.a/ /b/c/a/a/.a
+/b/c/a/a////..a /b/c/a/a/..a
+/b/c/a/a////... /b/c/a/a/...
+/b/c/a/a////../ /b/c/a
+/b/c/a/a////./a /b/c/a/a/a
+/b/c/a/a////./. /b/c/a/a
+/b/c/a/a////.// /b/c/a/a
+/b/c/a/a/////aa /b/c/a/a/aa
+/b/c/a/a/////a. /b/c/a/a/a.
+/b/c/a/a/////a/ /b/c/a/a/a
+/b/c/a/a/////.a /b/c/a/a/.a
+/b/c/a/a/////.. /b/c/a
+/b/c/a/a/////./ /b/c/a/a
+/b/c/a/a//////a /b/c/a/a/a
+/b/c/a/a//////. /b/c/a/a
+/b/c/a/a/////// /b/c/a/a
+/b/c/a/.aaaaaaa /b/c/a/.aaaaaaa
+/b/c/a/.aaaaaa. /b/c/a/.aaaaaa.
+/b/c/a/.aaaaaa/ /b/c/a/.aaaaaa
+/b/c/a/.aaaaa.a /b/c/a/.aaaaa.a
+/b/c/a/.aaaaa.. /b/c/a/.aaaaa..
+/b/c/a/.aaaaa./ /b/c/a/.aaaaa.
+/b/c/a/.aaaaa/a /b/c/a/.aaaaa/a
+/b/c/a/.aaaaa/. /b/c/a/.aaaaa
+/b/c/a/.aaaaa// /b/c/a/.aaaaa
+/b/c/a/.aaaa.aa /b/c/a/.aaaa.aa
+/b/c/a/.aaaa.a. /b/c/a/.aaaa.a.
+/b/c/a/.aaaa.a/ /b/c/a/.aaaa.a
+/b/c/a/.aaaa..a /b/c/a/.aaaa..a
+/b/c/a/.aaaa... /b/c/a/.aaaa...
+/b/c/a/.aaaa../ /b/c/a/.aaaa..
+/b/c/a/.aaaa./a /b/c/a/.aaaa./a
+/b/c/a/.aaaa./. /b/c/a/.aaaa.
+/b/c/a/.aaaa.// /b/c/a/.aaaa.
+/b/c/a/.aaaa/aa /b/c/a/.aaaa/aa
+/b/c/a/.aaaa/a. /b/c/a/.aaaa/a.
+/b/c/a/.aaaa/a/ /b/c/a/.aaaa/a
+/b/c/a/.aaaa/.a /b/c/a/.aaaa/.a
+/b/c/a/.aaaa/.. /b/c/a
+/b/c/a/.aaaa/./ /b/c/a/.aaaa
+/b/c/a/.aaaa//a /b/c/a/.aaaa/a
+/b/c/a/.aaaa//. /b/c/a/.aaaa
+/b/c/a/.aaaa/// /b/c/a/.aaaa
+/b/c/a/.aaa.aaa /b/c/a/.aaa.aaa
+/b/c/a/.aaa.aa. /b/c/a/.aaa.aa.
+/b/c/a/.aaa.aa/ /b/c/a/.aaa.aa
+/b/c/a/.aaa.a.a /b/c/a/.aaa.a.a
+/b/c/a/.aaa.a.. /b/c/a/.aaa.a..
+/b/c/a/.aaa.a./ /b/c/a/.aaa.a.
+/b/c/a/.aaa.a/a /b/c/a/.aaa.a/a
+/b/c/a/.aaa.a/. /b/c/a/.aaa.a
+/b/c/a/.aaa.a// /b/c/a/.aaa.a
+/b/c/a/.aaa..aa /b/c/a/.aaa..aa
+/b/c/a/.aaa..a. /b/c/a/.aaa..a.
+/b/c/a/.aaa..a/ /b/c/a/.aaa..a
+/b/c/a/.aaa...a /b/c/a/.aaa...a
+/b/c/a/.aaa.... /b/c/a/.aaa....
+/b/c/a/.aaa.../ /b/c/a/.aaa...
+/b/c/a/.aaa../a /b/c/a/.aaa../a
+/b/c/a/.aaa../. /b/c/a/.aaa..
+/b/c/a/.aaa..// /b/c/a/.aaa..
+/b/c/a/.aaa./aa /b/c/a/.aaa./aa
+/b/c/a/.aaa./a. /b/c/a/.aaa./a.
+/b/c/a/.aaa./a/ /b/c/a/.aaa./a
+/b/c/a/.aaa./.a /b/c/a/.aaa./.a
+/b/c/a/.aaa./.. /b/c/a
+/b/c/a/.aaa././ /b/c/a/.aaa.
+/b/c/a/.aaa.//a /b/c/a/.aaa./a
+/b/c/a/.aaa.//. /b/c/a/.aaa.
+/b/c/a/.aaa./// /b/c/a/.aaa.
+/b/c/a/.aaa/aaa /b/c/a/.aaa/aaa
+/b/c/a/.aaa/aa. /b/c/a/.aaa/aa.
+/b/c/a/.aaa/aa/ /b/c/a/.aaa/aa
+/b/c/a/.aaa/a.a /b/c/a/.aaa/a.a
+/b/c/a/.aaa/a.. /b/c/a/.aaa/a..
+/b/c/a/.aaa/a./ /b/c/a/.aaa/a.
+/b/c/a/.aaa/a/a /b/c/a/.aaa/a/a
+/b/c/a/.aaa/a/. /b/c/a/.aaa/a
+/b/c/a/.aaa/a// /b/c/a/.aaa/a
+/b/c/a/.aaa/.aa /b/c/a/.aaa/.aa
+/b/c/a/.aaa/.a. /b/c/a/.aaa/.a.
+/b/c/a/.aaa/.a/ /b/c/a/.aaa/.a
+/b/c/a/.aaa/..a /b/c/a/.aaa/..a
+/b/c/a/.aaa/... /b/c/a/.aaa/...
+/b/c/a/.aaa/../ /b/c/a
+/b/c/a/.aaa/./a /b/c/a/.aaa/a
+/b/c/a/.aaa/./. /b/c/a/.aaa
+/b/c/a/.aaa/.// /b/c/a/.aaa
+/b/c/a/.aaa//aa /b/c/a/.aaa/aa
+/b/c/a/.aaa//a. /b/c/a/.aaa/a.
+/b/c/a/.aaa//a/ /b/c/a/.aaa/a
+/b/c/a/.aaa//.a /b/c/a/.aaa/.a
+/b/c/a/.aaa//.. /b/c/a
+/b/c/a/.aaa//./ /b/c/a/.aaa
+/b/c/a/.aaa///a /b/c/a/.aaa/a
+/b/c/a/.aaa///. /b/c/a/.aaa
+/b/c/a/.aaa//// /b/c/a/.aaa
+/b/c/a/.aa.aaaa /b/c/a/.aa.aaaa
+/b/c/a/.aa.aaa. /b/c/a/.aa.aaa.
+/b/c/a/.aa.aaa/ /b/c/a/.aa.aaa
+/b/c/a/.aa.aa.a /b/c/a/.aa.aa.a
+/b/c/a/.aa.aa.. /b/c/a/.aa.aa..
+/b/c/a/.aa.aa./ /b/c/a/.aa.aa.
+/b/c/a/.aa.aa/a /b/c/a/.aa.aa/a
+/b/c/a/.aa.aa/. /b/c/a/.aa.aa
+/b/c/a/.aa.aa// /b/c/a/.aa.aa
+/b/c/a/.aa.a.aa /b/c/a/.aa.a.aa
+/b/c/a/.aa.a.a. /b/c/a/.aa.a.a.
+/b/c/a/.aa.a.a/ /b/c/a/.aa.a.a
+/b/c/a/.aa.a..a /b/c/a/.aa.a..a
+/b/c/a/.aa.a... /b/c/a/.aa.a...
+/b/c/a/.aa.a../ /b/c/a/.aa.a..
+/b/c/a/.aa.a./a /b/c/a/.aa.a./a
+/b/c/a/.aa.a./. /b/c/a/.aa.a.
+/b/c/a/.aa.a.// /b/c/a/.aa.a.
+/b/c/a/.aa.a/aa /b/c/a/.aa.a/aa
+/b/c/a/.aa.a/a. /b/c/a/.aa.a/a.
+/b/c/a/.aa.a/a/ /b/c/a/.aa.a/a
+/b/c/a/.aa.a/.a /b/c/a/.aa.a/.a
+/b/c/a/.aa.a/.. /b/c/a
+/b/c/a/.aa.a/./ /b/c/a/.aa.a
+/b/c/a/.aa.a//a /b/c/a/.aa.a/a
+/b/c/a/.aa.a//. /b/c/a/.aa.a
+/b/c/a/.aa.a/// /b/c/a/.aa.a
+/b/c/a/.aa..aaa /b/c/a/.aa..aaa
+/b/c/a/.aa..aa. /b/c/a/.aa..aa.
+/b/c/a/.aa..aa/ /b/c/a/.aa..aa
+/b/c/a/.aa..a.a /b/c/a/.aa..a.a
+/b/c/a/.aa..a.. /b/c/a/.aa..a..
+/b/c/a/.aa..a./ /b/c/a/.aa..a.
+/b/c/a/.aa..a/a /b/c/a/.aa..a/a
+/b/c/a/.aa..a/. /b/c/a/.aa..a
+/b/c/a/.aa..a// /b/c/a/.aa..a
+/b/c/a/.aa...aa /b/c/a/.aa...aa
+/b/c/a/.aa...a. /b/c/a/.aa...a.
+/b/c/a/.aa...a/ /b/c/a/.aa...a
+/b/c/a/.aa....a /b/c/a/.aa....a
+/b/c/a/.aa..... /b/c/a/.aa.....
+/b/c/a/.aa..../ /b/c/a/.aa....
+/b/c/a/.aa.../a /b/c/a/.aa.../a
+/b/c/a/.aa.../. /b/c/a/.aa...
+/b/c/a/.aa...// /b/c/a/.aa...
+/b/c/a/.aa../aa /b/c/a/.aa../aa
+/b/c/a/.aa../a. /b/c/a/.aa../a.
+/b/c/a/.aa../a/ /b/c/a/.aa../a
+/b/c/a/.aa../.a /b/c/a/.aa../.a
+/b/c/a/.aa../.. /b/c/a
+/b/c/a/.aa.././ /b/c/a/.aa..
+/b/c/a/.aa..//a /b/c/a/.aa../a
+/b/c/a/.aa..//. /b/c/a/.aa..
+/b/c/a/.aa../// /b/c/a/.aa..
+/b/c/a/.aa./aaa /b/c/a/.aa./aaa
+/b/c/a/.aa./aa. /b/c/a/.aa./aa.
+/b/c/a/.aa./aa/ /b/c/a/.aa./aa
+/b/c/a/.aa./a.a /b/c/a/.aa./a.a
+/b/c/a/.aa./a.. /b/c/a/.aa./a..
+/b/c/a/.aa./a./ /b/c/a/.aa./a.
+/b/c/a/.aa./a/a /b/c/a/.aa./a/a
+/b/c/a/.aa./a/. /b/c/a/.aa./a
+/b/c/a/.aa./a// /b/c/a/.aa./a
+/b/c/a/.aa./.aa /b/c/a/.aa./.aa
+/b/c/a/.aa./.a. /b/c/a/.aa./.a.
+/b/c/a/.aa./.a/ /b/c/a/.aa./.a
+/b/c/a/.aa./..a /b/c/a/.aa./..a
+/b/c/a/.aa./... /b/c/a/.aa./...
+/b/c/a/.aa./../ /b/c/a
+/b/c/a/.aa././a /b/c/a/.aa./a
+/b/c/a/.aa././. /b/c/a/.aa.
+/b/c/a/.aa./.// /b/c/a/.aa.
+/b/c/a/.aa.//aa /b/c/a/.aa./aa
+/b/c/a/.aa.//a. /b/c/a/.aa./a.
+/b/c/a/.aa.//a/ /b/c/a/.aa./a
+/b/c/a/.aa.//.a /b/c/a/.aa./.a
+/b/c/a/.aa.//.. /b/c/a
+/b/c/a/.aa.//./ /b/c/a/.aa.
+/b/c/a/.aa.///a /b/c/a/.aa./a
+/b/c/a/.aa.///. /b/c/a/.aa.
+/b/c/a/.aa.//// /b/c/a/.aa.
+/b/c/a/.aa/aaaa /b/c/a/.aa/aaaa
+/b/c/a/.aa/aaa. /b/c/a/.aa/aaa.
+/b/c/a/.aa/aaa/ /b/c/a/.aa/aaa
+/b/c/a/.aa/aa.a /b/c/a/.aa/aa.a
+/b/c/a/.aa/aa.. /b/c/a/.aa/aa..
+/b/c/a/.aa/aa./ /b/c/a/.aa/aa.
+/b/c/a/.aa/aa/a /b/c/a/.aa/aa/a
+/b/c/a/.aa/aa/. /b/c/a/.aa/aa
+/b/c/a/.aa/aa// /b/c/a/.aa/aa
+/b/c/a/.aa/a.aa /b/c/a/.aa/a.aa
+/b/c/a/.aa/a.a. /b/c/a/.aa/a.a.
+/b/c/a/.aa/a.a/ /b/c/a/.aa/a.a
+/b/c/a/.aa/a..a /b/c/a/.aa/a..a
+/b/c/a/.aa/a... /b/c/a/.aa/a...
+/b/c/a/.aa/a../ /b/c/a/.aa/a..
+/b/c/a/.aa/a./a /b/c/a/.aa/a./a
+/b/c/a/.aa/a./. /b/c/a/.aa/a.
+/b/c/a/.aa/a.// /b/c/a/.aa/a.
+/b/c/a/.aa/a/aa /b/c/a/.aa/a/aa
+/b/c/a/.aa/a/a. /b/c/a/.aa/a/a.
+/b/c/a/.aa/a/a/ /b/c/a/.aa/a/a
+/b/c/a/.aa/a/.a /b/c/a/.aa/a/.a
+/b/c/a/.aa/a/.. /b/c/a/.aa
+/b/c/a/.aa/a/./ /b/c/a/.aa/a
+/b/c/a/.aa/a//a /b/c/a/.aa/a/a
+/b/c/a/.aa/a//. /b/c/a/.aa/a
+/b/c/a/.aa/a/// /b/c/a/.aa/a
+/b/c/a/.aa/.aaa /b/c/a/.aa/.aaa
+/b/c/a/.aa/.aa. /b/c/a/.aa/.aa.
+/b/c/a/.aa/.aa/ /b/c/a/.aa/.aa
+/b/c/a/.aa/.a.a /b/c/a/.aa/.a.a
+/b/c/a/.aa/.a.. /b/c/a/.aa/.a..
+/b/c/a/.aa/.a./ /b/c/a/.aa/.a.
+/b/c/a/.aa/.a/a /b/c/a/.aa/.a/a
+/b/c/a/.aa/.a/. /b/c/a/.aa/.a
+/b/c/a/.aa/.a// /b/c/a/.aa/.a
+/b/c/a/.aa/..aa /b/c/a/.aa/..aa
+/b/c/a/.aa/..a. /b/c/a/.aa/..a.
+/b/c/a/.aa/..a/ /b/c/a/.aa/..a
+/b/c/a/.aa/...a /b/c/a/.aa/...a
+/b/c/a/.aa/.... /b/c/a/.aa/....
+/b/c/a/.aa/.../ /b/c/a/.aa/...
+/b/c/a/.aa/../a /b/c/a/a
+/b/c/a/.aa/../. /b/c/a
+/b/c/a/.aa/..// /b/c/a
+/b/c/a/.aa/./aa /b/c/a/.aa/aa
+/b/c/a/.aa/./a. /b/c/a/.aa/a.
+/b/c/a/.aa/./a/ /b/c/a/.aa/a
+/b/c/a/.aa/./.a /b/c/a/.aa/.a
+/b/c/a/.aa/./.. /b/c/a
+/b/c/a/.aa/././ /b/c/a/.aa
+/b/c/a/.aa/.//a /b/c/a/.aa/a
+/b/c/a/.aa/.//. /b/c/a/.aa
+/b/c/a/.aa/./// /b/c/a/.aa
+/b/c/a/.aa//aaa /b/c/a/.aa/aaa
+/b/c/a/.aa//aa. /b/c/a/.aa/aa.
+/b/c/a/.aa//aa/ /b/c/a/.aa/aa
+/b/c/a/.aa//a.a /b/c/a/.aa/a.a
+/b/c/a/.aa//a.. /b/c/a/.aa/a..
+/b/c/a/.aa//a./ /b/c/a/.aa/a.
+/b/c/a/.aa//a/a /b/c/a/.aa/a/a
+/b/c/a/.aa//a/. /b/c/a/.aa/a
+/b/c/a/.aa//a// /b/c/a/.aa/a
+/b/c/a/.aa//.aa /b/c/a/.aa/.aa
+/b/c/a/.aa//.a. /b/c/a/.aa/.a.
+/b/c/a/.aa//.a/ /b/c/a/.aa/.a
+/b/c/a/.aa//..a /b/c/a/.aa/..a
+/b/c/a/.aa//... /b/c/a/.aa/...
+/b/c/a/.aa//../ /b/c/a
+/b/c/a/.aa//./a /b/c/a/.aa/a
+/b/c/a/.aa//./. /b/c/a/.aa
+/b/c/a/.aa//.// /b/c/a/.aa
+/b/c/a/.aa///aa /b/c/a/.aa/aa
+/b/c/a/.aa///a. /b/c/a/.aa/a.
+/b/c/a/.aa///a/ /b/c/a/.aa/a
+/b/c/a/.aa///.a /b/c/a/.aa/.a
+/b/c/a/.aa///.. /b/c/a
+/b/c/a/.aa///./ /b/c/a/.aa
+/b/c/a/.aa////a /b/c/a/.aa/a
+/b/c/a/.aa////. /b/c/a/.aa
+/b/c/a/.aa///// /b/c/a/.aa
+/b/c/a/.a.aaaaa /b/c/a/.a.aaaaa
+/b/c/a/.a.aaaa. /b/c/a/.a.aaaa.
+/b/c/a/.a.aaaa/ /b/c/a/.a.aaaa
+/b/c/a/.a.aaa.a /b/c/a/.a.aaa.a
+/b/c/a/.a.aaa.. /b/c/a/.a.aaa..
+/b/c/a/.a.aaa./ /b/c/a/.a.aaa.
+/b/c/a/.a.aaa/a /b/c/a/.a.aaa/a
+/b/c/a/.a.aaa/. /b/c/a/.a.aaa
+/b/c/a/.a.aaa// /b/c/a/.a.aaa
+/b/c/a/.a.aa.aa /b/c/a/.a.aa.aa
+/b/c/a/.a.aa.a. /b/c/a/.a.aa.a.
+/b/c/a/.a.aa.a/ /b/c/a/.a.aa.a
+/b/c/a/.a.aa..a /b/c/a/.a.aa..a
+/b/c/a/.a.aa... /b/c/a/.a.aa...
+/b/c/a/.a.aa../ /b/c/a/.a.aa..
+/b/c/a/.a.aa./a /b/c/a/.a.aa./a
+/b/c/a/.a.aa./. /b/c/a/.a.aa.
+/b/c/a/.a.aa.// /b/c/a/.a.aa.
+/b/c/a/.a.aa/aa /b/c/a/.a.aa/aa
+/b/c/a/.a.aa/a. /b/c/a/.a.aa/a.
+/b/c/a/.a.aa/a/ /b/c/a/.a.aa/a
+/b/c/a/.a.aa/.a /b/c/a/.a.aa/.a
+/b/c/a/.a.aa/.. /b/c/a
+/b/c/a/.a.aa/./ /b/c/a/.a.aa
+/b/c/a/.a.aa//a /b/c/a/.a.aa/a
+/b/c/a/.a.aa//. /b/c/a/.a.aa
+/b/c/a/.a.aa/// /b/c/a/.a.aa
+/b/c/a/.a.a.aaa /b/c/a/.a.a.aaa
+/b/c/a/.a.a.aa. /b/c/a/.a.a.aa.
+/b/c/a/.a.a.aa/ /b/c/a/.a.a.aa
+/b/c/a/.a.a.a.a /b/c/a/.a.a.a.a
+/b/c/a/.a.a.a.. /b/c/a/.a.a.a..
+/b/c/a/.a.a.a./ /b/c/a/.a.a.a.
+/b/c/a/.a.a.a/a /b/c/a/.a.a.a/a
+/b/c/a/.a.a.a/. /b/c/a/.a.a.a
+/b/c/a/.a.a.a// /b/c/a/.a.a.a
+/b/c/a/.a.a..aa /b/c/a/.a.a..aa
+/b/c/a/.a.a..a. /b/c/a/.a.a..a.
+/b/c/a/.a.a..a/ /b/c/a/.a.a..a
+/b/c/a/.a.a...a /b/c/a/.a.a...a
+/b/c/a/.a.a.... /b/c/a/.a.a....
+/b/c/a/.a.a.../ /b/c/a/.a.a...
+/b/c/a/.a.a../a /b/c/a/.a.a../a
+/b/c/a/.a.a../. /b/c/a/.a.a..
+/b/c/a/.a.a..// /b/c/a/.a.a..
+/b/c/a/.a.a./aa /b/c/a/.a.a./aa
+/b/c/a/.a.a./a. /b/c/a/.a.a./a.
+/b/c/a/.a.a./a/ /b/c/a/.a.a./a
+/b/c/a/.a.a./.a /b/c/a/.a.a./.a
+/b/c/a/.a.a./.. /b/c/a
+/b/c/a/.a.a././ /b/c/a/.a.a.
+/b/c/a/.a.a.//a /b/c/a/.a.a./a
+/b/c/a/.a.a.//. /b/c/a/.a.a.
+/b/c/a/.a.a./// /b/c/a/.a.a.
+/b/c/a/.a.a/aaa /b/c/a/.a.a/aaa
+/b/c/a/.a.a/aa. /b/c/a/.a.a/aa.
+/b/c/a/.a.a/aa/ /b/c/a/.a.a/aa
+/b/c/a/.a.a/a.a /b/c/a/.a.a/a.a
+/b/c/a/.a.a/a.. /b/c/a/.a.a/a..
+/b/c/a/.a.a/a./ /b/c/a/.a.a/a.
+/b/c/a/.a.a/a/a /b/c/a/.a.a/a/a
+/b/c/a/.a.a/a/. /b/c/a/.a.a/a
+/b/c/a/.a.a/a// /b/c/a/.a.a/a
+/b/c/a/.a.a/.aa /b/c/a/.a.a/.aa
+/b/c/a/.a.a/.a. /b/c/a/.a.a/.a.
+/b/c/a/.a.a/.a/ /b/c/a/.a.a/.a
+/b/c/a/.a.a/..a /b/c/a/.a.a/..a
+/b/c/a/.a.a/... /b/c/a/.a.a/...
+/b/c/a/.a.a/../ /b/c/a
+/b/c/a/.a.a/./a /b/c/a/.a.a/a
+/b/c/a/.a.a/./. /b/c/a/.a.a
+/b/c/a/.a.a/.// /b/c/a/.a.a
+/b/c/a/.a.a//aa /b/c/a/.a.a/aa
+/b/c/a/.a.a//a. /b/c/a/.a.a/a.
+/b/c/a/.a.a//a/ /b/c/a/.a.a/a
+/b/c/a/.a.a//.a /b/c/a/.a.a/.a
+/b/c/a/.a.a//.. /b/c/a
+/b/c/a/.a.a//./ /b/c/a/.a.a
+/b/c/a/.a.a///a /b/c/a/.a.a/a
+/b/c/a/.a.a///. /b/c/a/.a.a
+/b/c/a/.a.a//// /b/c/a/.a.a
+/b/c/a/.a..aaaa /b/c/a/.a..aaaa
+/b/c/a/.a..aaa. /b/c/a/.a..aaa.
+/b/c/a/.a..aaa/ /b/c/a/.a..aaa
+/b/c/a/.a..aa.a /b/c/a/.a..aa.a
+/b/c/a/.a..aa.. /b/c/a/.a..aa..
+/b/c/a/.a..aa./ /b/c/a/.a..aa.
+/b/c/a/.a..aa/a /b/c/a/.a..aa/a
+/b/c/a/.a..aa/. /b/c/a/.a..aa
+/b/c/a/.a..aa// /b/c/a/.a..aa
+/b/c/a/.a..a.aa /b/c/a/.a..a.aa
+/b/c/a/.a..a.a. /b/c/a/.a..a.a.
+/b/c/a/.a..a.a/ /b/c/a/.a..a.a
+/b/c/a/.a..a..a /b/c/a/.a..a..a
+/b/c/a/.a..a... /b/c/a/.a..a...
+/b/c/a/.a..a../ /b/c/a/.a..a..
+/b/c/a/.a..a./a /b/c/a/.a..a./a
+/b/c/a/.a..a./. /b/c/a/.a..a.
+/b/c/a/.a..a.// /b/c/a/.a..a.
+/b/c/a/.a..a/aa /b/c/a/.a..a/aa
+/b/c/a/.a..a/a. /b/c/a/.a..a/a.
+/b/c/a/.a..a/a/ /b/c/a/.a..a/a
+/b/c/a/.a..a/.a /b/c/a/.a..a/.a
+/b/c/a/.a..a/.. /b/c/a
+/b/c/a/.a..a/./ /b/c/a/.a..a
+/b/c/a/.a..a//a /b/c/a/.a..a/a
+/b/c/a/.a..a//. /b/c/a/.a..a
+/b/c/a/.a..a/// /b/c/a/.a..a
+/b/c/a/.a...aaa /b/c/a/.a...aaa
+/b/c/a/.a...aa. /b/c/a/.a...aa.
+/b/c/a/.a...aa/ /b/c/a/.a...aa
+/b/c/a/.a...a.a /b/c/a/.a...a.a
+/b/c/a/.a...a.. /b/c/a/.a...a..
+/b/c/a/.a...a./ /b/c/a/.a...a.
+/b/c/a/.a...a/a /b/c/a/.a...a/a
+/b/c/a/.a...a/. /b/c/a/.a...a
+/b/c/a/.a...a// /b/c/a/.a...a
+/b/c/a/.a....aa /b/c/a/.a....aa
+/b/c/a/.a....a. /b/c/a/.a....a.
+/b/c/a/.a....a/ /b/c/a/.a....a
+/b/c/a/.a.....a /b/c/a/.a.....a
+/b/c/a/.a...... /b/c/a/.a......
+/b/c/a/.a...../ /b/c/a/.a.....
+/b/c/a/.a..../a /b/c/a/.a..../a
+/b/c/a/.a..../. /b/c/a/.a....
+/b/c/a/.a....// /b/c/a/.a....
+/b/c/a/.a.../aa /b/c/a/.a.../aa
+/b/c/a/.a.../a. /b/c/a/.a.../a.
+/b/c/a/.a.../a/ /b/c/a/.a.../a
+/b/c/a/.a.../.a /b/c/a/.a.../.a
+/b/c/a/.a.../.. /b/c/a
+/b/c/a/.a..././ /b/c/a/.a...
+/b/c/a/.a...//a /b/c/a/.a.../a
+/b/c/a/.a...//. /b/c/a/.a...
+/b/c/a/.a.../// /b/c/a/.a...
+/b/c/a/.a../aaa /b/c/a/.a../aaa
+/b/c/a/.a../aa. /b/c/a/.a../aa.
+/b/c/a/.a../aa/ /b/c/a/.a../aa
+/b/c/a/.a../a.a /b/c/a/.a../a.a
+/b/c/a/.a../a.. /b/c/a/.a../a..
+/b/c/a/.a../a./ /b/c/a/.a../a.
+/b/c/a/.a../a/a /b/c/a/.a../a/a
+/b/c/a/.a../a/. /b/c/a/.a../a
+/b/c/a/.a../a// /b/c/a/.a../a
+/b/c/a/.a../.aa /b/c/a/.a../.aa
+/b/c/a/.a../.a. /b/c/a/.a../.a.
+/b/c/a/.a../.a/ /b/c/a/.a../.a
+/b/c/a/.a../..a /b/c/a/.a../..a
+/b/c/a/.a../... /b/c/a/.a../...
+/b/c/a/.a../../ /b/c/a
+/b/c/a/.a.././a /b/c/a/.a../a
+/b/c/a/.a.././. /b/c/a/.a..
+/b/c/a/.a../.// /b/c/a/.a..
+/b/c/a/.a..//aa /b/c/a/.a../aa
+/b/c/a/.a..//a. /b/c/a/.a../a.
+/b/c/a/.a..//a/ /b/c/a/.a../a
+/b/c/a/.a..//.a /b/c/a/.a../.a
+/b/c/a/.a..//.. /b/c/a
+/b/c/a/.a..//./ /b/c/a/.a..
+/b/c/a/.a..///a /b/c/a/.a../a
+/b/c/a/.a..///. /b/c/a/.a..
+/b/c/a/.a..//// /b/c/a/.a..
+/b/c/a/.a./aaaa /b/c/a/.a./aaaa
+/b/c/a/.a./aaa. /b/c/a/.a./aaa.
+/b/c/a/.a./aaa/ /b/c/a/.a./aaa
+/b/c/a/.a./aa.a /b/c/a/.a./aa.a
+/b/c/a/.a./aa.. /b/c/a/.a./aa..
+/b/c/a/.a./aa./ /b/c/a/.a./aa.
+/b/c/a/.a./aa/a /b/c/a/.a./aa/a
+/b/c/a/.a./aa/. /b/c/a/.a./aa
+/b/c/a/.a./aa// /b/c/a/.a./aa
+/b/c/a/.a./a.aa /b/c/a/.a./a.aa
+/b/c/a/.a./a.a. /b/c/a/.a./a.a.
+/b/c/a/.a./a.a/ /b/c/a/.a./a.a
+/b/c/a/.a./a..a /b/c/a/.a./a..a
+/b/c/a/.a./a... /b/c/a/.a./a...
+/b/c/a/.a./a../ /b/c/a/.a./a..
+/b/c/a/.a./a./a /b/c/a/.a./a./a
+/b/c/a/.a./a./. /b/c/a/.a./a.
+/b/c/a/.a./a.// /b/c/a/.a./a.
+/b/c/a/.a./a/aa /b/c/a/.a./a/aa
+/b/c/a/.a./a/a. /b/c/a/.a./a/a.
+/b/c/a/.a./a/a/ /b/c/a/.a./a/a
+/b/c/a/.a./a/.a /b/c/a/.a./a/.a
+/b/c/a/.a./a/.. /b/c/a/.a.
+/b/c/a/.a./a/./ /b/c/a/.a./a
+/b/c/a/.a./a//a /b/c/a/.a./a/a
+/b/c/a/.a./a//. /b/c/a/.a./a
+/b/c/a/.a./a/// /b/c/a/.a./a
+/b/c/a/.a./.aaa /b/c/a/.a./.aaa
+/b/c/a/.a./.aa. /b/c/a/.a./.aa.
+/b/c/a/.a./.aa/ /b/c/a/.a./.aa
+/b/c/a/.a./.a.a /b/c/a/.a./.a.a
+/b/c/a/.a./.a.. /b/c/a/.a./.a..
+/b/c/a/.a./.a./ /b/c/a/.a./.a.
+/b/c/a/.a./.a/a /b/c/a/.a./.a/a
+/b/c/a/.a./.a/. /b/c/a/.a./.a
+/b/c/a/.a./.a// /b/c/a/.a./.a
+/b/c/a/.a./..aa /b/c/a/.a./..aa
+/b/c/a/.a./..a. /b/c/a/.a./..a.
+/b/c/a/.a./..a/ /b/c/a/.a./..a
+/b/c/a/.a./...a /b/c/a/.a./...a
+/b/c/a/.a./.... /b/c/a/.a./....
+/b/c/a/.a./.../ /b/c/a/.a./...
+/b/c/a/.a./../a /b/c/a/a
+/b/c/a/.a./../. /b/c/a
+/b/c/a/.a./..// /b/c/a
+/b/c/a/.a././aa /b/c/a/.a./aa
+/b/c/a/.a././a. /b/c/a/.a./a.
+/b/c/a/.a././a/ /b/c/a/.a./a
+/b/c/a/.a././.a /b/c/a/.a./.a
+/b/c/a/.a././.. /b/c/a
+/b/c/a/.a./././ /b/c/a/.a.
+/b/c/a/.a././/a /b/c/a/.a./a
+/b/c/a/.a././/. /b/c/a/.a.
+/b/c/a/.a././// /b/c/a/.a.
+/b/c/a/.a.//aaa /b/c/a/.a./aaa
+/b/c/a/.a.//aa. /b/c/a/.a./aa.
+/b/c/a/.a.//aa/ /b/c/a/.a./aa
+/b/c/a/.a.//a.a /b/c/a/.a./a.a
+/b/c/a/.a.//a.. /b/c/a/.a./a..
+/b/c/a/.a.//a./ /b/c/a/.a./a.
+/b/c/a/.a.//a/a /b/c/a/.a./a/a
+/b/c/a/.a.//a/. /b/c/a/.a./a
+/b/c/a/.a.//a// /b/c/a/.a./a
+/b/c/a/.a.//.aa /b/c/a/.a./.aa
+/b/c/a/.a.//.a. /b/c/a/.a./.a.
+/b/c/a/.a.//.a/ /b/c/a/.a./.a
+/b/c/a/.a.//..a /b/c/a/.a./..a
+/b/c/a/.a.//... /b/c/a/.a./...
+/b/c/a/.a.//../ /b/c/a
+/b/c/a/.a.//./a /b/c/a/.a./a
+/b/c/a/.a.//./. /b/c/a/.a.
+/b/c/a/.a.//.// /b/c/a/.a.
+/b/c/a/.a.///aa /b/c/a/.a./aa
+/b/c/a/.a.///a. /b/c/a/.a./a.
+/b/c/a/.a.///a/ /b/c/a/.a./a
+/b/c/a/.a.///.a /b/c/a/.a./.a
+/b/c/a/.a.///.. /b/c/a
+/b/c/a/.a.///./ /b/c/a/.a.
+/b/c/a/.a.////a /b/c/a/.a./a
+/b/c/a/.a.////. /b/c/a/.a.
+/b/c/a/.a.///// /b/c/a/.a.
+/b/c/a/.a/aaaaa /b/c/a/.a/aaaaa
+/b/c/a/.a/aaaa. /b/c/a/.a/aaaa.
+/b/c/a/.a/aaaa/ /b/c/a/.a/aaaa
+/b/c/a/.a/aaa.a /b/c/a/.a/aaa.a
+/b/c/a/.a/aaa.. /b/c/a/.a/aaa..
+/b/c/a/.a/aaa./ /b/c/a/.a/aaa.
+/b/c/a/.a/aaa/a /b/c/a/.a/aaa/a
+/b/c/a/.a/aaa/. /b/c/a/.a/aaa
+/b/c/a/.a/aaa// /b/c/a/.a/aaa
+/b/c/a/.a/aa.aa /b/c/a/.a/aa.aa
+/b/c/a/.a/aa.a. /b/c/a/.a/aa.a.
+/b/c/a/.a/aa.a/ /b/c/a/.a/aa.a
+/b/c/a/.a/aa..a /b/c/a/.a/aa..a
+/b/c/a/.a/aa... /b/c/a/.a/aa...
+/b/c/a/.a/aa../ /b/c/a/.a/aa..
+/b/c/a/.a/aa./a /b/c/a/.a/aa./a
+/b/c/a/.a/aa./. /b/c/a/.a/aa.
+/b/c/a/.a/aa.// /b/c/a/.a/aa.
+/b/c/a/.a/aa/aa /b/c/a/.a/aa/aa
+/b/c/a/.a/aa/a. /b/c/a/.a/aa/a.
+/b/c/a/.a/aa/a/ /b/c/a/.a/aa/a
+/b/c/a/.a/aa/.a /b/c/a/.a/aa/.a
+/b/c/a/.a/aa/.. /b/c/a/.a
+/b/c/a/.a/aa/./ /b/c/a/.a/aa
+/b/c/a/.a/aa//a /b/c/a/.a/aa/a
+/b/c/a/.a/aa//. /b/c/a/.a/aa
+/b/c/a/.a/aa/// /b/c/a/.a/aa
+/b/c/a/.a/a.aaa /b/c/a/.a/a.aaa
+/b/c/a/.a/a.aa. /b/c/a/.a/a.aa.
+/b/c/a/.a/a.aa/ /b/c/a/.a/a.aa
+/b/c/a/.a/a.a.a /b/c/a/.a/a.a.a
+/b/c/a/.a/a.a.. /b/c/a/.a/a.a..
+/b/c/a/.a/a.a./ /b/c/a/.a/a.a.
+/b/c/a/.a/a.a/a /b/c/a/.a/a.a/a
+/b/c/a/.a/a.a/. /b/c/a/.a/a.a
+/b/c/a/.a/a.a// /b/c/a/.a/a.a
+/b/c/a/.a/a..aa /b/c/a/.a/a..aa
+/b/c/a/.a/a..a. /b/c/a/.a/a..a.
+/b/c/a/.a/a..a/ /b/c/a/.a/a..a
+/b/c/a/.a/a...a /b/c/a/.a/a...a
+/b/c/a/.a/a.... /b/c/a/.a/a....
+/b/c/a/.a/a.../ /b/c/a/.a/a...
+/b/c/a/.a/a../a /b/c/a/.a/a../a
+/b/c/a/.a/a../. /b/c/a/.a/a..
+/b/c/a/.a/a..// /b/c/a/.a/a..
+/b/c/a/.a/a./aa /b/c/a/.a/a./aa
+/b/c/a/.a/a./a. /b/c/a/.a/a./a.
+/b/c/a/.a/a./a/ /b/c/a/.a/a./a
+/b/c/a/.a/a./.a /b/c/a/.a/a./.a
+/b/c/a/.a/a./.. /b/c/a/.a
+/b/c/a/.a/a././ /b/c/a/.a/a.
+/b/c/a/.a/a.//a /b/c/a/.a/a./a
+/b/c/a/.a/a.//. /b/c/a/.a/a.
+/b/c/a/.a/a./// /b/c/a/.a/a.
+/b/c/a/.a/a/aaa /b/c/a/.a/a/aaa
+/b/c/a/.a/a/aa. /b/c/a/.a/a/aa.
+/b/c/a/.a/a/aa/ /b/c/a/.a/a/aa
+/b/c/a/.a/a/a.a /b/c/a/.a/a/a.a
+/b/c/a/.a/a/a.. /b/c/a/.a/a/a..
+/b/c/a/.a/a/a./ /b/c/a/.a/a/a.
+/b/c/a/.a/a/a/a /b/c/a/.a/a/a/a
+/b/c/a/.a/a/a/. /b/c/a/.a/a/a
+/b/c/a/.a/a/a// /b/c/a/.a/a/a
+/b/c/a/.a/a/.aa /b/c/a/.a/a/.aa
+/b/c/a/.a/a/.a. /b/c/a/.a/a/.a.
+/b/c/a/.a/a/.a/ /b/c/a/.a/a/.a
+/b/c/a/.a/a/..a /b/c/a/.a/a/..a
+/b/c/a/.a/a/... /b/c/a/.a/a/...
+/b/c/a/.a/a/../ /b/c/a/.a
+/b/c/a/.a/a/./a /b/c/a/.a/a/a
+/b/c/a/.a/a/./. /b/c/a/.a/a
+/b/c/a/.a/a/.// /b/c/a/.a/a
+/b/c/a/.a/a//aa /b/c/a/.a/a/aa
+/b/c/a/.a/a//a. /b/c/a/.a/a/a.
+/b/c/a/.a/a//a/ /b/c/a/.a/a/a
+/b/c/a/.a/a//.a /b/c/a/.a/a/.a
+/b/c/a/.a/a//.. /b/c/a/.a
+/b/c/a/.a/a//./ /b/c/a/.a/a
+/b/c/a/.a/a///a /b/c/a/.a/a/a
+/b/c/a/.a/a///. /b/c/a/.a/a
+/b/c/a/.a/a//// /b/c/a/.a/a
+/b/c/a/.a/.aaaa /b/c/a/.a/.aaaa
+/b/c/a/.a/.aaa. /b/c/a/.a/.aaa.
+/b/c/a/.a/.aaa/ /b/c/a/.a/.aaa
+/b/c/a/.a/.aa.a /b/c/a/.a/.aa.a
+/b/c/a/.a/.aa.. /b/c/a/.a/.aa..
+/b/c/a/.a/.aa./ /b/c/a/.a/.aa.
+/b/c/a/.a/.aa/a /b/c/a/.a/.aa/a
+/b/c/a/.a/.aa/. /b/c/a/.a/.aa
+/b/c/a/.a/.aa// /b/c/a/.a/.aa
+/b/c/a/.a/.a.aa /b/c/a/.a/.a.aa
+/b/c/a/.a/.a.a. /b/c/a/.a/.a.a.
+/b/c/a/.a/.a.a/ /b/c/a/.a/.a.a
+/b/c/a/.a/.a..a /b/c/a/.a/.a..a
+/b/c/a/.a/.a... /b/c/a/.a/.a...
+/b/c/a/.a/.a../ /b/c/a/.a/.a..
+/b/c/a/.a/.a./a /b/c/a/.a/.a./a
+/b/c/a/.a/.a./. /b/c/a/.a/.a.
+/b/c/a/.a/.a.// /b/c/a/.a/.a.
+/b/c/a/.a/.a/aa /b/c/a/.a/.a/aa
+/b/c/a/.a/.a/a. /b/c/a/.a/.a/a.
+/b/c/a/.a/.a/a/ /b/c/a/.a/.a/a
+/b/c/a/.a/.a/.a /b/c/a/.a/.a/.a
+/b/c/a/.a/.a/.. /b/c/a/.a
+/b/c/a/.a/.a/./ /b/c/a/.a/.a
+/b/c/a/.a/.a//a /b/c/a/.a/.a/a
+/b/c/a/.a/.a//. /b/c/a/.a/.a
+/b/c/a/.a/.a/// /b/c/a/.a/.a
+/b/c/a/.a/..aaa /b/c/a/.a/..aaa
+/b/c/a/.a/..aa. /b/c/a/.a/..aa.
+/b/c/a/.a/..aa/ /b/c/a/.a/..aa
+/b/c/a/.a/..a.a /b/c/a/.a/..a.a
+/b/c/a/.a/..a.. /b/c/a/.a/..a..
+/b/c/a/.a/..a./ /b/c/a/.a/..a.
+/b/c/a/.a/..a/a /b/c/a/.a/..a/a
+/b/c/a/.a/..a/. /b/c/a/.a/..a
+/b/c/a/.a/..a// /b/c/a/.a/..a
+/b/c/a/.a/...aa /b/c/a/.a/...aa
+/b/c/a/.a/...a. /b/c/a/.a/...a.
+/b/c/a/.a/...a/ /b/c/a/.a/...a
+/b/c/a/.a/....a /b/c/a/.a/....a
+/b/c/a/.a/..... /b/c/a/.a/.....
+/b/c/a/.a/..../ /b/c/a/.a/....
+/b/c/a/.a/.../a /b/c/a/.a/.../a
+/b/c/a/.a/.../. /b/c/a/.a/...
+/b/c/a/.a/...// /b/c/a/.a/...
+/b/c/a/.a/../aa /b/c/a/aa
+/b/c/a/.a/../a. /b/c/a/a.
+/b/c/a/.a/../a/ /b/c/a/a
+/b/c/a/.a/../.a /b/c/a/.a
+/b/c/a/.a/../.. /b/c
+/b/c/a/.a/.././ /b/c/a
+/b/c/a/.a/..//a /b/c/a/a
+/b/c/a/.a/..//. /b/c/a
+/b/c/a/.a/../// /b/c/a
+/b/c/a/.a/./aaa /b/c/a/.a/aaa
+/b/c/a/.a/./aa. /b/c/a/.a/aa.
+/b/c/a/.a/./aa/ /b/c/a/.a/aa
+/b/c/a/.a/./a.a /b/c/a/.a/a.a
+/b/c/a/.a/./a.. /b/c/a/.a/a..
+/b/c/a/.a/./a./ /b/c/a/.a/a.
+/b/c/a/.a/./a/a /b/c/a/.a/a/a
+/b/c/a/.a/./a/. /b/c/a/.a/a
+/b/c/a/.a/./a// /b/c/a/.a/a
+/b/c/a/.a/./.aa /b/c/a/.a/.aa
+/b/c/a/.a/./.a. /b/c/a/.a/.a.
+/b/c/a/.a/./.a/ /b/c/a/.a/.a
+/b/c/a/.a/./..a /b/c/a/.a/..a
+/b/c/a/.a/./... /b/c/a/.a/...
+/b/c/a/.a/./../ /b/c/a
+/b/c/a/.a/././a /b/c/a/.a/a
+/b/c/a/.a/././. /b/c/a/.a
+/b/c/a/.a/./.// /b/c/a/.a
+/b/c/a/.a/.//aa /b/c/a/.a/aa
+/b/c/a/.a/.//a. /b/c/a/.a/a.
+/b/c/a/.a/.//a/ /b/c/a/.a/a
+/b/c/a/.a/.//.a /b/c/a/.a/.a
+/b/c/a/.a/.//.. /b/c/a
+/b/c/a/.a/.//./ /b/c/a/.a
+/b/c/a/.a/.///a /b/c/a/.a/a
+/b/c/a/.a/.///. /b/c/a/.a
+/b/c/a/.a/.//// /b/c/a/.a
+/b/c/a/.a//aaaa /b/c/a/.a/aaaa
+/b/c/a/.a//aaa. /b/c/a/.a/aaa.
+/b/c/a/.a//aaa/ /b/c/a/.a/aaa
+/b/c/a/.a//aa.a /b/c/a/.a/aa.a
+/b/c/a/.a//aa.. /b/c/a/.a/aa..
+/b/c/a/.a//aa./ /b/c/a/.a/aa.
+/b/c/a/.a//aa/a /b/c/a/.a/aa/a
+/b/c/a/.a//aa/. /b/c/a/.a/aa
+/b/c/a/.a//aa// /b/c/a/.a/aa
+/b/c/a/.a//a.aa /b/c/a/.a/a.aa
+/b/c/a/.a//a.a. /b/c/a/.a/a.a.
+/b/c/a/.a//a.a/ /b/c/a/.a/a.a
+/b/c/a/.a//a..a /b/c/a/.a/a..a
+/b/c/a/.a//a... /b/c/a/.a/a...
+/b/c/a/.a//a../ /b/c/a/.a/a..
+/b/c/a/.a//a./a /b/c/a/.a/a./a
+/b/c/a/.a//a./. /b/c/a/.a/a.
+/b/c/a/.a//a.// /b/c/a/.a/a.
+/b/c/a/.a//a/aa /b/c/a/.a/a/aa
+/b/c/a/.a//a/a. /b/c/a/.a/a/a.
+/b/c/a/.a//a/a/ /b/c/a/.a/a/a
+/b/c/a/.a//a/.a /b/c/a/.a/a/.a
+/b/c/a/.a//a/.. /b/c/a/.a
+/b/c/a/.a//a/./ /b/c/a/.a/a
+/b/c/a/.a//a//a /b/c/a/.a/a/a
+/b/c/a/.a//a//. /b/c/a/.a/a
+/b/c/a/.a//a/// /b/c/a/.a/a
+/b/c/a/.a//.aaa /b/c/a/.a/.aaa
+/b/c/a/.a//.aa. /b/c/a/.a/.aa.
+/b/c/a/.a//.aa/ /b/c/a/.a/.aa
+/b/c/a/.a//.a.a /b/c/a/.a/.a.a
+/b/c/a/.a//.a.. /b/c/a/.a/.a..
+/b/c/a/.a//.a./ /b/c/a/.a/.a.
+/b/c/a/.a//.a/a /b/c/a/.a/.a/a
+/b/c/a/.a//.a/. /b/c/a/.a/.a
+/b/c/a/.a//.a// /b/c/a/.a/.a
+/b/c/a/.a//..aa /b/c/a/.a/..aa
+/b/c/a/.a//..a. /b/c/a/.a/..a.
+/b/c/a/.a//..a/ /b/c/a/.a/..a
+/b/c/a/.a//...a /b/c/a/.a/...a
+/b/c/a/.a//.... /b/c/a/.a/....
+/b/c/a/.a//.../ /b/c/a/.a/...
+/b/c/a/.a//../a /b/c/a/a
+/b/c/a/.a//../. /b/c/a
+/b/c/a/.a//..// /b/c/a
+/b/c/a/.a//./aa /b/c/a/.a/aa
+/b/c/a/.a//./a. /b/c/a/.a/a.
+/b/c/a/.a//./a/ /b/c/a/.a/a
+/b/c/a/.a//./.a /b/c/a/.a/.a
+/b/c/a/.a//./.. /b/c/a
+/b/c/a/.a//././ /b/c/a/.a
+/b/c/a/.a//.//a /b/c/a/.a/a
+/b/c/a/.a//.//. /b/c/a/.a
+/b/c/a/.a//./// /b/c/a/.a
+/b/c/a/.a///aaa /b/c/a/.a/aaa
+/b/c/a/.a///aa. /b/c/a/.a/aa.
+/b/c/a/.a///aa/ /b/c/a/.a/aa
+/b/c/a/.a///a.a /b/c/a/.a/a.a
+/b/c/a/.a///a.. /b/c/a/.a/a..
+/b/c/a/.a///a./ /b/c/a/.a/a.
+/b/c/a/.a///a/a /b/c/a/.a/a/a
+/b/c/a/.a///a/. /b/c/a/.a/a
+/b/c/a/.a///a// /b/c/a/.a/a
+/b/c/a/.a///.aa /b/c/a/.a/.aa
+/b/c/a/.a///.a. /b/c/a/.a/.a.
+/b/c/a/.a///.a/ /b/c/a/.a/.a
+/b/c/a/.a///..a /b/c/a/.a/..a
+/b/c/a/.a///... /b/c/a/.a/...
+/b/c/a/.a///../ /b/c/a
+/b/c/a/.a///./a /b/c/a/.a/a
+/b/c/a/.a///./. /b/c/a/.a
+/b/c/a/.a///.// /b/c/a/.a
+/b/c/a/.a////aa /b/c/a/.a/aa
+/b/c/a/.a////a. /b/c/a/.a/a.
+/b/c/a/.a////a/ /b/c/a/.a/a
+/b/c/a/.a////.a /b/c/a/.a/.a
+/b/c/a/.a////.. /b/c/a
+/b/c/a/.a////./ /b/c/a/.a
+/b/c/a/.a/////a /b/c/a/.a/a
+/b/c/a/.a/////. /b/c/a/.a
+/b/c/a/.a////// /b/c/a/.a
+/b/c/a/..aaaaaa /b/c/a/..aaaaaa
+/b/c/a/..aaaaa. /b/c/a/..aaaaa.
+/b/c/a/..aaaaa/ /b/c/a/..aaaaa
+/b/c/a/..aaaa.a /b/c/a/..aaaa.a
+/b/c/a/..aaaa.. /b/c/a/..aaaa..
+/b/c/a/..aaaa./ /b/c/a/..aaaa.
+/b/c/a/..aaaa/a /b/c/a/..aaaa/a
+/b/c/a/..aaaa/. /b/c/a/..aaaa
+/b/c/a/..aaaa// /b/c/a/..aaaa
+/b/c/a/..aaa.aa /b/c/a/..aaa.aa
+/b/c/a/..aaa.a. /b/c/a/..aaa.a.
+/b/c/a/..aaa.a/ /b/c/a/..aaa.a
+/b/c/a/..aaa..a /b/c/a/..aaa..a
+/b/c/a/..aaa... /b/c/a/..aaa...
+/b/c/a/..aaa../ /b/c/a/..aaa..
+/b/c/a/..aaa./a /b/c/a/..aaa./a
+/b/c/a/..aaa./. /b/c/a/..aaa.
+/b/c/a/..aaa.// /b/c/a/..aaa.
+/b/c/a/..aaa/aa /b/c/a/..aaa/aa
+/b/c/a/..aaa/a. /b/c/a/..aaa/a.
+/b/c/a/..aaa/a/ /b/c/a/..aaa/a
+/b/c/a/..aaa/.a /b/c/a/..aaa/.a
+/b/c/a/..aaa/.. /b/c/a
+/b/c/a/..aaa/./ /b/c/a/..aaa
+/b/c/a/..aaa//a /b/c/a/..aaa/a
+/b/c/a/..aaa//. /b/c/a/..aaa
+/b/c/a/..aaa/// /b/c/a/..aaa
+/b/c/a/..aa.aaa /b/c/a/..aa.aaa
+/b/c/a/..aa.aa. /b/c/a/..aa.aa.
+/b/c/a/..aa.aa/ /b/c/a/..aa.aa
+/b/c/a/..aa.a.a /b/c/a/..aa.a.a
+/b/c/a/..aa.a.. /b/c/a/..aa.a..
+/b/c/a/..aa.a./ /b/c/a/..aa.a.
+/b/c/a/..aa.a/a /b/c/a/..aa.a/a
+/b/c/a/..aa.a/. /b/c/a/..aa.a
+/b/c/a/..aa.a// /b/c/a/..aa.a
+/b/c/a/..aa..aa /b/c/a/..aa..aa
+/b/c/a/..aa..a. /b/c/a/..aa..a.
+/b/c/a/..aa..a/ /b/c/a/..aa..a
+/b/c/a/..aa...a /b/c/a/..aa...a
+/b/c/a/..aa.... /b/c/a/..aa....
+/b/c/a/..aa.../ /b/c/a/..aa...
+/b/c/a/..aa../a /b/c/a/..aa../a
+/b/c/a/..aa../. /b/c/a/..aa..
+/b/c/a/..aa..// /b/c/a/..aa..
+/b/c/a/..aa./aa /b/c/a/..aa./aa
+/b/c/a/..aa./a. /b/c/a/..aa./a.
+/b/c/a/..aa./a/ /b/c/a/..aa./a
+/b/c/a/..aa./.a /b/c/a/..aa./.a
+/b/c/a/..aa./.. /b/c/a
+/b/c/a/..aa././ /b/c/a/..aa.
+/b/c/a/..aa.//a /b/c/a/..aa./a
+/b/c/a/..aa.//. /b/c/a/..aa.
+/b/c/a/..aa./// /b/c/a/..aa.
+/b/c/a/..aa/aaa /b/c/a/..aa/aaa
+/b/c/a/..aa/aa. /b/c/a/..aa/aa.
+/b/c/a/..aa/aa/ /b/c/a/..aa/aa
+/b/c/a/..aa/a.a /b/c/a/..aa/a.a
+/b/c/a/..aa/a.. /b/c/a/..aa/a..
+/b/c/a/..aa/a./ /b/c/a/..aa/a.
+/b/c/a/..aa/a/a /b/c/a/..aa/a/a
+/b/c/a/..aa/a/. /b/c/a/..aa/a
+/b/c/a/..aa/a// /b/c/a/..aa/a
+/b/c/a/..aa/.aa /b/c/a/..aa/.aa
+/b/c/a/..aa/.a. /b/c/a/..aa/.a.
+/b/c/a/..aa/.a/ /b/c/a/..aa/.a
+/b/c/a/..aa/..a /b/c/a/..aa/..a
+/b/c/a/..aa/... /b/c/a/..aa/...
+/b/c/a/..aa/../ /b/c/a
+/b/c/a/..aa/./a /b/c/a/..aa/a
+/b/c/a/..aa/./. /b/c/a/..aa
+/b/c/a/..aa/.// /b/c/a/..aa
+/b/c/a/..aa//aa /b/c/a/..aa/aa
+/b/c/a/..aa//a. /b/c/a/..aa/a.
+/b/c/a/..aa//a/ /b/c/a/..aa/a
+/b/c/a/..aa//.a /b/c/a/..aa/.a
+/b/c/a/..aa//.. /b/c/a
+/b/c/a/..aa//./ /b/c/a/..aa
+/b/c/a/..aa///a /b/c/a/..aa/a
+/b/c/a/..aa///. /b/c/a/..aa
+/b/c/a/..aa//// /b/c/a/..aa
+/b/c/a/..a.aaaa /b/c/a/..a.aaaa
+/b/c/a/..a.aaa. /b/c/a/..a.aaa.
+/b/c/a/..a.aaa/ /b/c/a/..a.aaa
+/b/c/a/..a.aa.a /b/c/a/..a.aa.a
+/b/c/a/..a.aa.. /b/c/a/..a.aa..
+/b/c/a/..a.aa./ /b/c/a/..a.aa.
+/b/c/a/..a.aa/a /b/c/a/..a.aa/a
+/b/c/a/..a.aa/. /b/c/a/..a.aa
+/b/c/a/..a.aa// /b/c/a/..a.aa
+/b/c/a/..a.a.aa /b/c/a/..a.a.aa
+/b/c/a/..a.a.a. /b/c/a/..a.a.a.
+/b/c/a/..a.a.a/ /b/c/a/..a.a.a
+/b/c/a/..a.a..a /b/c/a/..a.a..a
+/b/c/a/..a.a... /b/c/a/..a.a...
+/b/c/a/..a.a../ /b/c/a/..a.a..
+/b/c/a/..a.a./a /b/c/a/..a.a./a
+/b/c/a/..a.a./. /b/c/a/..a.a.
+/b/c/a/..a.a.// /b/c/a/..a.a.
+/b/c/a/..a.a/aa /b/c/a/..a.a/aa
+/b/c/a/..a.a/a. /b/c/a/..a.a/a.
+/b/c/a/..a.a/a/ /b/c/a/..a.a/a
+/b/c/a/..a.a/.a /b/c/a/..a.a/.a
+/b/c/a/..a.a/.. /b/c/a
+/b/c/a/..a.a/./ /b/c/a/..a.a
+/b/c/a/..a.a//a /b/c/a/..a.a/a
+/b/c/a/..a.a//. /b/c/a/..a.a
+/b/c/a/..a.a/// /b/c/a/..a.a
+/b/c/a/..a..aaa /b/c/a/..a..aaa
+/b/c/a/..a..aa. /b/c/a/..a..aa.
+/b/c/a/..a..aa/ /b/c/a/..a..aa
+/b/c/a/..a..a.a /b/c/a/..a..a.a
+/b/c/a/..a..a.. /b/c/a/..a..a..
+/b/c/a/..a..a./ /b/c/a/..a..a.
+/b/c/a/..a..a/a /b/c/a/..a..a/a
+/b/c/a/..a..a/. /b/c/a/..a..a
+/b/c/a/..a..a// /b/c/a/..a..a
+/b/c/a/..a...aa /b/c/a/..a...aa
+/b/c/a/..a...a. /b/c/a/..a...a.
+/b/c/a/..a...a/ /b/c/a/..a...a
+/b/c/a/..a....a /b/c/a/..a....a
+/b/c/a/..a..... /b/c/a/..a.....
+/b/c/a/..a..../ /b/c/a/..a....
+/b/c/a/..a.../a /b/c/a/..a.../a
+/b/c/a/..a.../. /b/c/a/..a...
+/b/c/a/..a...// /b/c/a/..a...
+/b/c/a/..a../aa /b/c/a/..a../aa
+/b/c/a/..a../a. /b/c/a/..a../a.
+/b/c/a/..a../a/ /b/c/a/..a../a
+/b/c/a/..a../.a /b/c/a/..a../.a
+/b/c/a/..a../.. /b/c/a
+/b/c/a/..a.././ /b/c/a/..a..
+/b/c/a/..a..//a /b/c/a/..a../a
+/b/c/a/..a..//. /b/c/a/..a..
+/b/c/a/..a../// /b/c/a/..a..
+/b/c/a/..a./aaa /b/c/a/..a./aaa
+/b/c/a/..a./aa. /b/c/a/..a./aa.
+/b/c/a/..a./aa/ /b/c/a/..a./aa
+/b/c/a/..a./a.a /b/c/a/..a./a.a
+/b/c/a/..a./a.. /b/c/a/..a./a..
+/b/c/a/..a./a./ /b/c/a/..a./a.
+/b/c/a/..a./a/a /b/c/a/..a./a/a
+/b/c/a/..a./a/. /b/c/a/..a./a
+/b/c/a/..a./a// /b/c/a/..a./a
+/b/c/a/..a./.aa /b/c/a/..a./.aa
+/b/c/a/..a./.a. /b/c/a/..a./.a.
+/b/c/a/..a./.a/ /b/c/a/..a./.a
+/b/c/a/..a./..a /b/c/a/..a./..a
+/b/c/a/..a./... /b/c/a/..a./...
+/b/c/a/..a./../ /b/c/a
+/b/c/a/..a././a /b/c/a/..a./a
+/b/c/a/..a././. /b/c/a/..a.
+/b/c/a/..a./.// /b/c/a/..a.
+/b/c/a/..a.//aa /b/c/a/..a./aa
+/b/c/a/..a.//a. /b/c/a/..a./a.
+/b/c/a/..a.//a/ /b/c/a/..a./a
+/b/c/a/..a.//.a /b/c/a/..a./.a
+/b/c/a/..a.//.. /b/c/a
+/b/c/a/..a.//./ /b/c/a/..a.
+/b/c/a/..a.///a /b/c/a/..a./a
+/b/c/a/..a.///. /b/c/a/..a.
+/b/c/a/..a.//// /b/c/a/..a.
+/b/c/a/..a/aaaa /b/c/a/..a/aaaa
+/b/c/a/..a/aaa. /b/c/a/..a/aaa.
+/b/c/a/..a/aaa/ /b/c/a/..a/aaa
+/b/c/a/..a/aa.a /b/c/a/..a/aa.a
+/b/c/a/..a/aa.. /b/c/a/..a/aa..
+/b/c/a/..a/aa./ /b/c/a/..a/aa.
+/b/c/a/..a/aa/a /b/c/a/..a/aa/a
+/b/c/a/..a/aa/. /b/c/a/..a/aa
+/b/c/a/..a/aa// /b/c/a/..a/aa
+/b/c/a/..a/a.aa /b/c/a/..a/a.aa
+/b/c/a/..a/a.a. /b/c/a/..a/a.a.
+/b/c/a/..a/a.a/ /b/c/a/..a/a.a
+/b/c/a/..a/a..a /b/c/a/..a/a..a
+/b/c/a/..a/a... /b/c/a/..a/a...
+/b/c/a/..a/a../ /b/c/a/..a/a..
+/b/c/a/..a/a./a /b/c/a/..a/a./a
+/b/c/a/..a/a./. /b/c/a/..a/a.
+/b/c/a/..a/a.// /b/c/a/..a/a.
+/b/c/a/..a/a/aa /b/c/a/..a/a/aa
+/b/c/a/..a/a/a. /b/c/a/..a/a/a.
+/b/c/a/..a/a/a/ /b/c/a/..a/a/a
+/b/c/a/..a/a/.a /b/c/a/..a/a/.a
+/b/c/a/..a/a/.. /b/c/a/..a
+/b/c/a/..a/a/./ /b/c/a/..a/a
+/b/c/a/..a/a//a /b/c/a/..a/a/a
+/b/c/a/..a/a//. /b/c/a/..a/a
+/b/c/a/..a/a/// /b/c/a/..a/a
+/b/c/a/..a/.aaa /b/c/a/..a/.aaa
+/b/c/a/..a/.aa. /b/c/a/..a/.aa.
+/b/c/a/..a/.aa/ /b/c/a/..a/.aa
+/b/c/a/..a/.a.a /b/c/a/..a/.a.a
+/b/c/a/..a/.a.. /b/c/a/..a/.a..
+/b/c/a/..a/.a./ /b/c/a/..a/.a.
+/b/c/a/..a/.a/a /b/c/a/..a/.a/a
+/b/c/a/..a/.a/. /b/c/a/..a/.a
+/b/c/a/..a/.a// /b/c/a/..a/.a
+/b/c/a/..a/..aa /b/c/a/..a/..aa
+/b/c/a/..a/..a. /b/c/a/..a/..a.
+/b/c/a/..a/..a/ /b/c/a/..a/..a
+/b/c/a/..a/...a /b/c/a/..a/...a
+/b/c/a/..a/.... /b/c/a/..a/....
+/b/c/a/..a/.../ /b/c/a/..a/...
+/b/c/a/..a/../a /b/c/a/a
+/b/c/a/..a/../. /b/c/a
+/b/c/a/..a/..// /b/c/a
+/b/c/a/..a/./aa /b/c/a/..a/aa
+/b/c/a/..a/./a. /b/c/a/..a/a.
+/b/c/a/..a/./a/ /b/c/a/..a/a
+/b/c/a/..a/./.a /b/c/a/..a/.a
+/b/c/a/..a/./.. /b/c/a
+/b/c/a/..a/././ /b/c/a/..a
+/b/c/a/..a/.//a /b/c/a/..a/a
+/b/c/a/..a/.//. /b/c/a/..a
+/b/c/a/..a/./// /b/c/a/..a
+/b/c/a/..a//aaa /b/c/a/..a/aaa
+/b/c/a/..a//aa. /b/c/a/..a/aa.
+/b/c/a/..a//aa/ /b/c/a/..a/aa
+/b/c/a/..a//a.a /b/c/a/..a/a.a
+/b/c/a/..a//a.. /b/c/a/..a/a..
+/b/c/a/..a//a./ /b/c/a/..a/a.
+/b/c/a/..a//a/a /b/c/a/..a/a/a
+/b/c/a/..a//a/. /b/c/a/..a/a
+/b/c/a/..a//a// /b/c/a/..a/a
+/b/c/a/..a//.aa /b/c/a/..a/.aa
+/b/c/a/..a//.a. /b/c/a/..a/.a.
+/b/c/a/..a//.a/ /b/c/a/..a/.a
+/b/c/a/..a//..a /b/c/a/..a/..a
+/b/c/a/..a//... /b/c/a/..a/...
+/b/c/a/..a//../ /b/c/a
+/b/c/a/..a//./a /b/c/a/..a/a
+/b/c/a/..a//./. /b/c/a/..a
+/b/c/a/..a//.// /b/c/a/..a
+/b/c/a/..a///aa /b/c/a/..a/aa
+/b/c/a/..a///a. /b/c/a/..a/a.
+/b/c/a/..a///a/ /b/c/a/..a/a
+/b/c/a/..a///.a /b/c/a/..a/.a
+/b/c/a/..a///.. /b/c/a
+/b/c/a/..a///./ /b/c/a/..a
+/b/c/a/..a////a /b/c/a/..a/a
+/b/c/a/..a////. /b/c/a/..a
+/b/c/a/..a///// /b/c/a/..a
+/b/c/a/...aaaaa /b/c/a/...aaaaa
+/b/c/a/...aaaa. /b/c/a/...aaaa.
+/b/c/a/...aaaa/ /b/c/a/...aaaa
+/b/c/a/...aaa.a /b/c/a/...aaa.a
+/b/c/a/...aaa.. /b/c/a/...aaa..
+/b/c/a/...aaa./ /b/c/a/...aaa.
+/b/c/a/...aaa/a /b/c/a/...aaa/a
+/b/c/a/...aaa/. /b/c/a/...aaa
+/b/c/a/...aaa// /b/c/a/...aaa
+/b/c/a/...aa.aa /b/c/a/...aa.aa
+/b/c/a/...aa.a. /b/c/a/...aa.a.
+/b/c/a/...aa.a/ /b/c/a/...aa.a
+/b/c/a/...aa..a /b/c/a/...aa..a
+/b/c/a/...aa... /b/c/a/...aa...
+/b/c/a/...aa../ /b/c/a/...aa..
+/b/c/a/...aa./a /b/c/a/...aa./a
+/b/c/a/...aa./. /b/c/a/...aa.
+/b/c/a/...aa.// /b/c/a/...aa.
+/b/c/a/...aa/aa /b/c/a/...aa/aa
+/b/c/a/...aa/a. /b/c/a/...aa/a.
+/b/c/a/...aa/a/ /b/c/a/...aa/a
+/b/c/a/...aa/.a /b/c/a/...aa/.a
+/b/c/a/...aa/.. /b/c/a
+/b/c/a/...aa/./ /b/c/a/...aa
+/b/c/a/...aa//a /b/c/a/...aa/a
+/b/c/a/...aa//. /b/c/a/...aa
+/b/c/a/...aa/// /b/c/a/...aa
+/b/c/a/...a.aaa /b/c/a/...a.aaa
+/b/c/a/...a.aa. /b/c/a/...a.aa.
+/b/c/a/...a.aa/ /b/c/a/...a.aa
+/b/c/a/...a.a.a /b/c/a/...a.a.a
+/b/c/a/...a.a.. /b/c/a/...a.a..
+/b/c/a/...a.a./ /b/c/a/...a.a.
+/b/c/a/...a.a/a /b/c/a/...a.a/a
+/b/c/a/...a.a/. /b/c/a/...a.a
+/b/c/a/...a.a// /b/c/a/...a.a
+/b/c/a/...a..aa /b/c/a/...a..aa
+/b/c/a/...a..a. /b/c/a/...a..a.
+/b/c/a/...a..a/ /b/c/a/...a..a
+/b/c/a/...a...a /b/c/a/...a...a
+/b/c/a/...a.... /b/c/a/...a....
+/b/c/a/...a.../ /b/c/a/...a...
+/b/c/a/...a../a /b/c/a/...a../a
+/b/c/a/...a../. /b/c/a/...a..
+/b/c/a/...a..// /b/c/a/...a..
+/b/c/a/...a./aa /b/c/a/...a./aa
+/b/c/a/...a./a. /b/c/a/...a./a.
+/b/c/a/...a./a/ /b/c/a/...a./a
+/b/c/a/...a./.a /b/c/a/...a./.a
+/b/c/a/...a./.. /b/c/a
+/b/c/a/...a././ /b/c/a/...a.
+/b/c/a/...a.//a /b/c/a/...a./a
+/b/c/a/...a.//. /b/c/a/...a.
+/b/c/a/...a./// /b/c/a/...a.
+/b/c/a/...a/aaa /b/c/a/...a/aaa
+/b/c/a/...a/aa. /b/c/a/...a/aa.
+/b/c/a/...a/aa/ /b/c/a/...a/aa
+/b/c/a/...a/a.a /b/c/a/...a/a.a
+/b/c/a/...a/a.. /b/c/a/...a/a..
+/b/c/a/...a/a./ /b/c/a/...a/a.
+/b/c/a/...a/a/a /b/c/a/...a/a/a
+/b/c/a/...a/a/. /b/c/a/...a/a
+/b/c/a/...a/a// /b/c/a/...a/a
+/b/c/a/...a/.aa /b/c/a/...a/.aa
+/b/c/a/...a/.a. /b/c/a/...a/.a.
+/b/c/a/...a/.a/ /b/c/a/...a/.a
+/b/c/a/...a/..a /b/c/a/...a/..a
+/b/c/a/...a/... /b/c/a/...a/...
+/b/c/a/...a/../ /b/c/a
+/b/c/a/...a/./a /b/c/a/...a/a
+/b/c/a/...a/./. /b/c/a/...a
+/b/c/a/...a/.// /b/c/a/...a
+/b/c/a/...a//aa /b/c/a/...a/aa
+/b/c/a/...a//a. /b/c/a/...a/a.
+/b/c/a/...a//a/ /b/c/a/...a/a
+/b/c/a/...a//.a /b/c/a/...a/.a
+/b/c/a/...a//.. /b/c/a
+/b/c/a/...a//./ /b/c/a/...a
+/b/c/a/...a///a /b/c/a/...a/a
+/b/c/a/...a///. /b/c/a/...a
+/b/c/a/...a//// /b/c/a/...a
+/b/c/a/....aaaa /b/c/a/....aaaa
+/b/c/a/....aaa. /b/c/a/....aaa.
+/b/c/a/....aaa/ /b/c/a/....aaa
+/b/c/a/....aa.a /b/c/a/....aa.a
+/b/c/a/....aa.. /b/c/a/....aa..
+/b/c/a/....aa./ /b/c/a/....aa.
+/b/c/a/....aa/a /b/c/a/....aa/a
+/b/c/a/....aa/. /b/c/a/....aa
+/b/c/a/....aa// /b/c/a/....aa
+/b/c/a/....a.aa /b/c/a/....a.aa
+/b/c/a/....a.a. /b/c/a/....a.a.
+/b/c/a/....a.a/ /b/c/a/....a.a
+/b/c/a/....a..a /b/c/a/....a..a
+/b/c/a/....a... /b/c/a/....a...
+/b/c/a/....a../ /b/c/a/....a..
+/b/c/a/....a./a /b/c/a/....a./a
+/b/c/a/....a./. /b/c/a/....a.
+/b/c/a/....a.// /b/c/a/....a.
+/b/c/a/....a/aa /b/c/a/....a/aa
+/b/c/a/....a/a. /b/c/a/....a/a.
+/b/c/a/....a/a/ /b/c/a/....a/a
+/b/c/a/....a/.a /b/c/a/....a/.a
+/b/c/a/....a/.. /b/c/a
+/b/c/a/....a/./ /b/c/a/....a
+/b/c/a/....a//a /b/c/a/....a/a
+/b/c/a/....a//. /b/c/a/....a
+/b/c/a/....a/// /b/c/a/....a
+/b/c/a/.....aaa /b/c/a/.....aaa
+/b/c/a/.....aa. /b/c/a/.....aa.
+/b/c/a/.....aa/ /b/c/a/.....aa
+/b/c/a/.....a.a /b/c/a/.....a.a
+/b/c/a/.....a.. /b/c/a/.....a..
+/b/c/a/.....a./ /b/c/a/.....a.
+/b/c/a/.....a/a /b/c/a/.....a/a
+/b/c/a/.....a/. /b/c/a/.....a
+/b/c/a/.....a// /b/c/a/.....a
+/b/c/a/......aa /b/c/a/......aa
+/b/c/a/......a. /b/c/a/......a.
+/b/c/a/......a/ /b/c/a/......a
+/b/c/a/.......a /b/c/a/.......a
+/b/c/a/........ /b/c/a/........
+/b/c/a/......./ /b/c/a/.......
+/b/c/a/....../a /b/c/a/....../a
+/b/c/a/....../. /b/c/a/......
+/b/c/a/......// /b/c/a/......
+/b/c/a/...../aa /b/c/a/...../aa
+/b/c/a/...../a. /b/c/a/...../a.
+/b/c/a/...../a/ /b/c/a/...../a
+/b/c/a/...../.a /b/c/a/...../.a
+/b/c/a/...../.. /b/c/a
+/b/c/a/....././ /b/c/a/.....
+/b/c/a/.....//a /b/c/a/...../a
+/b/c/a/.....//. /b/c/a/.....
+/b/c/a/...../// /b/c/a/.....
+/b/c/a/..../aaa /b/c/a/..../aaa
+/b/c/a/..../aa. /b/c/a/..../aa.
+/b/c/a/..../aa/ /b/c/a/..../aa
+/b/c/a/..../a.a /b/c/a/..../a.a
+/b/c/a/..../a.. /b/c/a/..../a..
+/b/c/a/..../a./ /b/c/a/..../a.
+/b/c/a/..../a/a /b/c/a/..../a/a
+/b/c/a/..../a/. /b/c/a/..../a
+/b/c/a/..../a// /b/c/a/..../a
+/b/c/a/..../.aa /b/c/a/..../.aa
+/b/c/a/..../.a. /b/c/a/..../.a.
+/b/c/a/..../.a/ /b/c/a/..../.a
+/b/c/a/..../..a /b/c/a/..../..a
+/b/c/a/..../... /b/c/a/..../...
+/b/c/a/..../../ /b/c/a
+/b/c/a/...././a /b/c/a/..../a
+/b/c/a/...././. /b/c/a/....
+/b/c/a/..../.// /b/c/a/....
+/b/c/a/....//aa /b/c/a/..../aa
+/b/c/a/....//a. /b/c/a/..../a.
+/b/c/a/....//a/ /b/c/a/..../a
+/b/c/a/....//.a /b/c/a/..../.a
+/b/c/a/....//.. /b/c/a
+/b/c/a/....//./ /b/c/a/....
+/b/c/a/....///a /b/c/a/..../a
+/b/c/a/....///. /b/c/a/....
+/b/c/a/....//// /b/c/a/....
+/b/c/a/.../aaaa /b/c/a/.../aaaa
+/b/c/a/.../aaa. /b/c/a/.../aaa.
+/b/c/a/.../aaa/ /b/c/a/.../aaa
+/b/c/a/.../aa.a /b/c/a/.../aa.a
+/b/c/a/.../aa.. /b/c/a/.../aa..
+/b/c/a/.../aa./ /b/c/a/.../aa.
+/b/c/a/.../aa/a /b/c/a/.../aa/a
+/b/c/a/.../aa/. /b/c/a/.../aa
+/b/c/a/.../aa// /b/c/a/.../aa
+/b/c/a/.../a.aa /b/c/a/.../a.aa
+/b/c/a/.../a.a. /b/c/a/.../a.a.
+/b/c/a/.../a.a/ /b/c/a/.../a.a
+/b/c/a/.../a..a /b/c/a/.../a..a
+/b/c/a/.../a... /b/c/a/.../a...
+/b/c/a/.../a../ /b/c/a/.../a..
+/b/c/a/.../a./a /b/c/a/.../a./a
+/b/c/a/.../a./. /b/c/a/.../a.
+/b/c/a/.../a.// /b/c/a/.../a.
+/b/c/a/.../a/aa /b/c/a/.../a/aa
+/b/c/a/.../a/a. /b/c/a/.../a/a.
+/b/c/a/.../a/a/ /b/c/a/.../a/a
+/b/c/a/.../a/.a /b/c/a/.../a/.a
+/b/c/a/.../a/.. /b/c/a/...
+/b/c/a/.../a/./ /b/c/a/.../a
+/b/c/a/.../a//a /b/c/a/.../a/a
+/b/c/a/.../a//. /b/c/a/.../a
+/b/c/a/.../a/// /b/c/a/.../a
+/b/c/a/.../.aaa /b/c/a/.../.aaa
+/b/c/a/.../.aa. /b/c/a/.../.aa.
+/b/c/a/.../.aa/ /b/c/a/.../.aa
+/b/c/a/.../.a.a /b/c/a/.../.a.a
+/b/c/a/.../.a.. /b/c/a/.../.a..
+/b/c/a/.../.a./ /b/c/a/.../.a.
+/b/c/a/.../.a/a /b/c/a/.../.a/a
+/b/c/a/.../.a/. /b/c/a/.../.a
+/b/c/a/.../.a// /b/c/a/.../.a
+/b/c/a/.../..aa /b/c/a/.../..aa
+/b/c/a/.../..a. /b/c/a/.../..a.
+/b/c/a/.../..a/ /b/c/a/.../..a
+/b/c/a/.../...a /b/c/a/.../...a
+/b/c/a/.../.... /b/c/a/.../....
+/b/c/a/.../.../ /b/c/a/.../...
+/b/c/a/.../../a /b/c/a/a
+/b/c/a/.../../. /b/c/a
+/b/c/a/.../..// /b/c/a
+/b/c/a/..././aa /b/c/a/.../aa
+/b/c/a/..././a. /b/c/a/.../a.
+/b/c/a/..././a/ /b/c/a/.../a
+/b/c/a/..././.a /b/c/a/.../.a
+/b/c/a/..././.. /b/c/a
+/b/c/a/.../././ /b/c/a/...
+/b/c/a/..././/a /b/c/a/.../a
+/b/c/a/..././/. /b/c/a/...
+/b/c/a/..././// /b/c/a/...
+/b/c/a/...//aaa /b/c/a/.../aaa
+/b/c/a/...//aa. /b/c/a/.../aa.
+/b/c/a/...//aa/ /b/c/a/.../aa
+/b/c/a/...//a.a /b/c/a/.../a.a
+/b/c/a/...//a.. /b/c/a/.../a..
+/b/c/a/...//a./ /b/c/a/.../a.
+/b/c/a/...//a/a /b/c/a/.../a/a
+/b/c/a/...//a/. /b/c/a/.../a
+/b/c/a/...//a// /b/c/a/.../a
+/b/c/a/...//.aa /b/c/a/.../.aa
+/b/c/a/...//.a. /b/c/a/.../.a.
+/b/c/a/...//.a/ /b/c/a/.../.a
+/b/c/a/...//..a /b/c/a/.../..a
+/b/c/a/...//... /b/c/a/.../...
+/b/c/a/...//../ /b/c/a
+/b/c/a/...//./a /b/c/a/.../a
+/b/c/a/...//./. /b/c/a/...
+/b/c/a/...//.// /b/c/a/...
+/b/c/a/...///aa /b/c/a/.../aa
+/b/c/a/...///a. /b/c/a/.../a.
+/b/c/a/...///a/ /b/c/a/.../a
+/b/c/a/...///.a /b/c/a/.../.a
+/b/c/a/...///.. /b/c/a
+/b/c/a/...///./ /b/c/a/...
+/b/c/a/...////a /b/c/a/.../a
+/b/c/a/...////. /b/c/a/...
+/b/c/a/...///// /b/c/a/...
+/b/c/a/../aaaaa /b/c/aaaaa
+/b/c/a/../aaaa. /b/c/aaaa.
+/b/c/a/../aaaa/ /b/c/aaaa
+/b/c/a/../aaa.a /b/c/aaa.a
+/b/c/a/../aaa.. /b/c/aaa..
+/b/c/a/../aaa./ /b/c/aaa.
+/b/c/a/../aaa/a /b/c/aaa/a
+/b/c/a/../aaa/. /b/c/aaa
+/b/c/a/../aaa// /b/c/aaa
+/b/c/a/../aa.aa /b/c/aa.aa
+/b/c/a/../aa.a. /b/c/aa.a.
+/b/c/a/../aa.a/ /b/c/aa.a
+/b/c/a/../aa..a /b/c/aa..a
+/b/c/a/../aa... /b/c/aa...
+/b/c/a/../aa../ /b/c/aa..
+/b/c/a/../aa./a /b/c/aa./a
+/b/c/a/../aa./. /b/c/aa.
+/b/c/a/../aa.// /b/c/aa.
+/b/c/a/../aa/aa /b/c/aa/aa
+/b/c/a/../aa/a. /b/c/aa/a.
+/b/c/a/../aa/a/ /b/c/aa/a
+/b/c/a/../aa/.a /b/c/aa/.a
+/b/c/a/../aa/.. /b/c
+/b/c/a/../aa/./ /b/c/aa
+/b/c/a/../aa//a /b/c/aa/a
+/b/c/a/../aa//. /b/c/aa
+/b/c/a/../aa/// /b/c/aa
+/b/c/a/../a.aaa /b/c/a.aaa
+/b/c/a/../a.aa. /b/c/a.aa.
+/b/c/a/../a.aa/ /b/c/a.aa
+/b/c/a/../a.a.a /b/c/a.a.a
+/b/c/a/../a.a.. /b/c/a.a..
+/b/c/a/../a.a./ /b/c/a.a.
+/b/c/a/../a.a/a /b/c/a.a/a
+/b/c/a/../a.a/. /b/c/a.a
+/b/c/a/../a.a// /b/c/a.a
+/b/c/a/../a..aa /b/c/a..aa
+/b/c/a/../a..a. /b/c/a..a.
+/b/c/a/../a..a/ /b/c/a..a
+/b/c/a/../a...a /b/c/a...a
+/b/c/a/../a.... /b/c/a....
+/b/c/a/../a.../ /b/c/a...
+/b/c/a/../a../a /b/c/a../a
+/b/c/a/../a../. /b/c/a..
+/b/c/a/../a..// /b/c/a..
+/b/c/a/../a./aa /b/c/a./aa
+/b/c/a/../a./a. /b/c/a./a.
+/b/c/a/../a./a/ /b/c/a./a
+/b/c/a/../a./.a /b/c/a./.a
+/b/c/a/../a./.. /b/c
+/b/c/a/../a././ /b/c/a.
+/b/c/a/../a.//a /b/c/a./a
+/b/c/a/../a.//. /b/c/a.
+/b/c/a/../a./// /b/c/a.
+/b/c/a/../a/aaa /b/c/a/aaa
+/b/c/a/../a/aa. /b/c/a/aa.
+/b/c/a/../a/aa/ /b/c/a/aa
+/b/c/a/../a/a.a /b/c/a/a.a
+/b/c/a/../a/a.. /b/c/a/a..
+/b/c/a/../a/a./ /b/c/a/a.
+/b/c/a/../a/a/a /b/c/a/a/a
+/b/c/a/../a/a/. /b/c/a/a
+/b/c/a/../a/a// /b/c/a/a
+/b/c/a/../a/.aa /b/c/a/.aa
+/b/c/a/../a/.a. /b/c/a/.a.
+/b/c/a/../a/.a/ /b/c/a/.a
+/b/c/a/../a/..a /b/c/a/..a
+/b/c/a/../a/... /b/c/a/...
+/b/c/a/../a/../ /b/c
+/b/c/a/../a/./a /b/c/a/a
+/b/c/a/../a/./. /b/c/a
+/b/c/a/../a/.// /b/c/a
+/b/c/a/../a//aa /b/c/a/aa
+/b/c/a/../a//a. /b/c/a/a.
+/b/c/a/../a//a/ /b/c/a/a
+/b/c/a/../a//.a /b/c/a/.a
+/b/c/a/../a//.. /b/c
+/b/c/a/../a//./ /b/c/a
+/b/c/a/../a///a /b/c/a/a
+/b/c/a/../a///. /b/c/a
+/b/c/a/../a//// /b/c/a
+/b/c/a/../.aaaa /b/c/.aaaa
+/b/c/a/../.aaa. /b/c/.aaa.
+/b/c/a/../.aaa/ /b/c/.aaa
+/b/c/a/../.aa.a /b/c/.aa.a
+/b/c/a/../.aa.. /b/c/.aa..
+/b/c/a/../.aa./ /b/c/.aa.
+/b/c/a/../.aa/a /b/c/.aa/a
+/b/c/a/../.aa/. /b/c/.aa
+/b/c/a/../.aa// /b/c/.aa
+/b/c/a/../.a.aa /b/c/.a.aa
+/b/c/a/../.a.a. /b/c/.a.a.
+/b/c/a/../.a.a/ /b/c/.a.a
+/b/c/a/../.a..a /b/c/.a..a
+/b/c/a/../.a... /b/c/.a...
+/b/c/a/../.a../ /b/c/.a..
+/b/c/a/../.a./a /b/c/.a./a
+/b/c/a/../.a./. /b/c/.a.
+/b/c/a/../.a.// /b/c/.a.
+/b/c/a/../.a/aa /b/c/.a/aa
+/b/c/a/../.a/a. /b/c/.a/a.
+/b/c/a/../.a/a/ /b/c/.a/a
+/b/c/a/../.a/.a /b/c/.a/.a
+/b/c/a/../.a/.. /b/c
+/b/c/a/../.a/./ /b/c/.a
+/b/c/a/../.a//a /b/c/.a/a
+/b/c/a/../.a//. /b/c/.a
+/b/c/a/../.a/// /b/c/.a
+/b/c/a/../..aaa /b/c/..aaa
+/b/c/a/../..aa. /b/c/..aa.
+/b/c/a/../..aa/ /b/c/..aa
+/b/c/a/../..a.a /b/c/..a.a
+/b/c/a/../..a.. /b/c/..a..
+/b/c/a/../..a./ /b/c/..a.
+/b/c/a/../..a/a /b/c/..a/a
+/b/c/a/../..a/. /b/c/..a
+/b/c/a/../..a// /b/c/..a
+/b/c/a/../...aa /b/c/...aa
+/b/c/a/../...a. /b/c/...a.
+/b/c/a/../...a/ /b/c/...a
+/b/c/a/../....a /b/c/....a
+/b/c/a/../..... /b/c/.....
+/b/c/a/../..../ /b/c/....
+/b/c/a/../.../a /b/c/.../a
+/b/c/a/../.../. /b/c/...
+/b/c/a/../...// /b/c/...
+/b/c/a/../../aa /b/aa
+/b/c/a/../../a. /b/a.
+/b/c/a/../../a/ /b/a
+/b/c/a/../../.a /b/.a
+/b/c/a/../../.. /
+/b/c/a/../.././ /b
+/b/c/a/../..//a /b/a
+/b/c/a/../..//. /b
+/b/c/a/../../// /b
+/b/c/a/.././aaa /b/c/aaa
+/b/c/a/.././aa. /b/c/aa.
+/b/c/a/.././aa/ /b/c/aa
+/b/c/a/.././a.a /b/c/a.a
+/b/c/a/.././a.. /b/c/a..
+/b/c/a/.././a./ /b/c/a.
+/b/c/a/.././a/a /b/c/a/a
+/b/c/a/.././a/. /b/c/a
+/b/c/a/.././a// /b/c/a
+/b/c/a/.././.aa /b/c/.aa
+/b/c/a/.././.a. /b/c/.a.
+/b/c/a/.././.a/ /b/c/.a
+/b/c/a/.././..a /b/c/..a
+/b/c/a/.././... /b/c/...
+/b/c/a/.././../ /b
+/b/c/a/../././a /b/c/a
+/b/c/a/../././. /b/c
+/b/c/a/.././.// /b/c
+/b/c/a/.././/aa /b/c/aa
+/b/c/a/.././/a. /b/c/a.
+/b/c/a/.././/a/ /b/c/a
+/b/c/a/.././/.a /b/c/.a
+/b/c/a/.././/.. /b
+/b/c/a/.././/./ /b/c
+/b/c/a/.././//a /b/c/a
+/b/c/a/.././//. /b/c
+/b/c/a/.././/// /b/c
+/b/c/a/..//aaaa /b/c/aaaa
+/b/c/a/..//aaa. /b/c/aaa.
+/b/c/a/..//aaa/ /b/c/aaa
+/b/c/a/..//aa.a /b/c/aa.a
+/b/c/a/..//aa.. /b/c/aa..
+/b/c/a/..//aa./ /b/c/aa.
+/b/c/a/..//aa/a /b/c/aa/a
+/b/c/a/..//aa/. /b/c/aa
+/b/c/a/..//aa// /b/c/aa
+/b/c/a/..//a.aa /b/c/a.aa
+/b/c/a/..//a.a. /b/c/a.a.
+/b/c/a/..//a.a/ /b/c/a.a
+/b/c/a/..//a..a /b/c/a..a
+/b/c/a/..//a... /b/c/a...
+/b/c/a/..//a../ /b/c/a..
+/b/c/a/..//a./a /b/c/a./a
+/b/c/a/..//a./. /b/c/a.
+/b/c/a/..//a.// /b/c/a.
+/b/c/a/..//a/aa /b/c/a/aa
+/b/c/a/..//a/a. /b/c/a/a.
+/b/c/a/..//a/a/ /b/c/a/a
+/b/c/a/..//a/.a /b/c/a/.a
+/b/c/a/..//a/.. /b/c
+/b/c/a/..//a/./ /b/c/a
+/b/c/a/..//a//a /b/c/a/a
+/b/c/a/..//a//. /b/c/a
+/b/c/a/..//a/// /b/c/a
+/b/c/a/..//.aaa /b/c/.aaa
+/b/c/a/..//.aa. /b/c/.aa.
+/b/c/a/..//.aa/ /b/c/.aa
+/b/c/a/..//.a.a /b/c/.a.a
+/b/c/a/..//.a.. /b/c/.a..
+/b/c/a/..//.a./ /b/c/.a.
+/b/c/a/..//.a/a /b/c/.a/a
+/b/c/a/..//.a/. /b/c/.a
+/b/c/a/..//.a// /b/c/.a
+/b/c/a/..//..aa /b/c/..aa
+/b/c/a/..//..a. /b/c/..a.
+/b/c/a/..//..a/ /b/c/..a
+/b/c/a/..//...a /b/c/...a
+/b/c/a/..//.... /b/c/....
+/b/c/a/..//.../ /b/c/...
+/b/c/a/..//../a /b/a
+/b/c/a/..//../. /b
+/b/c/a/..//..// /b
+/b/c/a/..//./aa /b/c/aa
+/b/c/a/..//./a. /b/c/a.
+/b/c/a/..//./a/ /b/c/a
+/b/c/a/..//./.a /b/c/.a
+/b/c/a/..//./.. /b
+/b/c/a/..//././ /b/c
+/b/c/a/..//.//a /b/c/a
+/b/c/a/..//.//. /b/c
+/b/c/a/..//./// /b/c
+/b/c/a/..///aaa /b/c/aaa
+/b/c/a/..///aa. /b/c/aa.
+/b/c/a/..///aa/ /b/c/aa
+/b/c/a/..///a.a /b/c/a.a
+/b/c/a/..///a.. /b/c/a..
+/b/c/a/..///a./ /b/c/a.
+/b/c/a/..///a/a /b/c/a/a
+/b/c/a/..///a/. /b/c/a
+/b/c/a/..///a// /b/c/a
+/b/c/a/..///.aa /b/c/.aa
+/b/c/a/..///.a. /b/c/.a.
+/b/c/a/..///.a/ /b/c/.a
+/b/c/a/..///..a /b/c/..a
+/b/c/a/..///... /b/c/...
+/b/c/a/..///../ /b
+/b/c/a/..///./a /b/c/a
+/b/c/a/..///./. /b/c
+/b/c/a/..///.// /b/c
+/b/c/a/..////aa /b/c/aa
+/b/c/a/..////a. /b/c/a.
+/b/c/a/..////a/ /b/c/a
+/b/c/a/..////.a /b/c/.a
+/b/c/a/..////.. /b
+/b/c/a/..////./ /b/c
+/b/c/a/../////a /b/c/a
+/b/c/a/../////. /b/c
+/b/c/a/..////// /b/c
+/b/c/a/./aaaaaa /b/c/a/aaaaaa
+/b/c/a/./aaaaa. /b/c/a/aaaaa.
+/b/c/a/./aaaaa/ /b/c/a/aaaaa
+/b/c/a/./aaaa.a /b/c/a/aaaa.a
+/b/c/a/./aaaa.. /b/c/a/aaaa..
+/b/c/a/./aaaa./ /b/c/a/aaaa.
+/b/c/a/./aaaa/a /b/c/a/aaaa/a
+/b/c/a/./aaaa/. /b/c/a/aaaa
+/b/c/a/./aaaa// /b/c/a/aaaa
+/b/c/a/./aaa.aa /b/c/a/aaa.aa
+/b/c/a/./aaa.a. /b/c/a/aaa.a.
+/b/c/a/./aaa.a/ /b/c/a/aaa.a
+/b/c/a/./aaa..a /b/c/a/aaa..a
+/b/c/a/./aaa... /b/c/a/aaa...
+/b/c/a/./aaa../ /b/c/a/aaa..
+/b/c/a/./aaa./a /b/c/a/aaa./a
+/b/c/a/./aaa./. /b/c/a/aaa.
+/b/c/a/./aaa.// /b/c/a/aaa.
+/b/c/a/./aaa/aa /b/c/a/aaa/aa
+/b/c/a/./aaa/a. /b/c/a/aaa/a.
+/b/c/a/./aaa/a/ /b/c/a/aaa/a
+/b/c/a/./aaa/.a /b/c/a/aaa/.a
+/b/c/a/./aaa/.. /b/c/a
+/b/c/a/./aaa/./ /b/c/a/aaa
+/b/c/a/./aaa//a /b/c/a/aaa/a
+/b/c/a/./aaa//. /b/c/a/aaa
+/b/c/a/./aaa/// /b/c/a/aaa
+/b/c/a/./aa.aaa /b/c/a/aa.aaa
+/b/c/a/./aa.aa. /b/c/a/aa.aa.
+/b/c/a/./aa.aa/ /b/c/a/aa.aa
+/b/c/a/./aa.a.a /b/c/a/aa.a.a
+/b/c/a/./aa.a.. /b/c/a/aa.a..
+/b/c/a/./aa.a./ /b/c/a/aa.a.
+/b/c/a/./aa.a/a /b/c/a/aa.a/a
+/b/c/a/./aa.a/. /b/c/a/aa.a
+/b/c/a/./aa.a// /b/c/a/aa.a
+/b/c/a/./aa..aa /b/c/a/aa..aa
+/b/c/a/./aa..a. /b/c/a/aa..a.
+/b/c/a/./aa..a/ /b/c/a/aa..a
+/b/c/a/./aa...a /b/c/a/aa...a
+/b/c/a/./aa.... /b/c/a/aa....
+/b/c/a/./aa.../ /b/c/a/aa...
+/b/c/a/./aa../a /b/c/a/aa../a
+/b/c/a/./aa../. /b/c/a/aa..
+/b/c/a/./aa..// /b/c/a/aa..
+/b/c/a/./aa./aa /b/c/a/aa./aa
+/b/c/a/./aa./a. /b/c/a/aa./a.
+/b/c/a/./aa./a/ /b/c/a/aa./a
+/b/c/a/./aa./.a /b/c/a/aa./.a
+/b/c/a/./aa./.. /b/c/a
+/b/c/a/./aa././ /b/c/a/aa.
+/b/c/a/./aa.//a /b/c/a/aa./a
+/b/c/a/./aa.//. /b/c/a/aa.
+/b/c/a/./aa./// /b/c/a/aa.
+/b/c/a/./aa/aaa /b/c/a/aa/aaa
+/b/c/a/./aa/aa. /b/c/a/aa/aa.
+/b/c/a/./aa/aa/ /b/c/a/aa/aa
+/b/c/a/./aa/a.a /b/c/a/aa/a.a
+/b/c/a/./aa/a.. /b/c/a/aa/a..
+/b/c/a/./aa/a./ /b/c/a/aa/a.
+/b/c/a/./aa/a/a /b/c/a/aa/a/a
+/b/c/a/./aa/a/. /b/c/a/aa/a
+/b/c/a/./aa/a// /b/c/a/aa/a
+/b/c/a/./aa/.aa /b/c/a/aa/.aa
+/b/c/a/./aa/.a. /b/c/a/aa/.a.
+/b/c/a/./aa/.a/ /b/c/a/aa/.a
+/b/c/a/./aa/..a /b/c/a/aa/..a
+/b/c/a/./aa/... /b/c/a/aa/...
+/b/c/a/./aa/../ /b/c/a
+/b/c/a/./aa/./a /b/c/a/aa/a
+/b/c/a/./aa/./. /b/c/a/aa
+/b/c/a/./aa/.// /b/c/a/aa
+/b/c/a/./aa//aa /b/c/a/aa/aa
+/b/c/a/./aa//a. /b/c/a/aa/a.
+/b/c/a/./aa//a/ /b/c/a/aa/a
+/b/c/a/./aa//.a /b/c/a/aa/.a
+/b/c/a/./aa//.. /b/c/a
+/b/c/a/./aa//./ /b/c/a/aa
+/b/c/a/./aa///a /b/c/a/aa/a
+/b/c/a/./aa///. /b/c/a/aa
+/b/c/a/./aa//// /b/c/a/aa
+/b/c/a/./a.aaaa /b/c/a/a.aaaa
+/b/c/a/./a.aaa. /b/c/a/a.aaa.
+/b/c/a/./a.aaa/ /b/c/a/a.aaa
+/b/c/a/./a.aa.a /b/c/a/a.aa.a
+/b/c/a/./a.aa.. /b/c/a/a.aa..
+/b/c/a/./a.aa./ /b/c/a/a.aa.
+/b/c/a/./a.aa/a /b/c/a/a.aa/a
+/b/c/a/./a.aa/. /b/c/a/a.aa
+/b/c/a/./a.aa// /b/c/a/a.aa
+/b/c/a/./a.a.aa /b/c/a/a.a.aa
+/b/c/a/./a.a.a. /b/c/a/a.a.a.
+/b/c/a/./a.a.a/ /b/c/a/a.a.a
+/b/c/a/./a.a..a /b/c/a/a.a..a
+/b/c/a/./a.a... /b/c/a/a.a...
+/b/c/a/./a.a../ /b/c/a/a.a..
+/b/c/a/./a.a./a /b/c/a/a.a./a
+/b/c/a/./a.a./. /b/c/a/a.a.
+/b/c/a/./a.a.// /b/c/a/a.a.
+/b/c/a/./a.a/aa /b/c/a/a.a/aa
+/b/c/a/./a.a/a. /b/c/a/a.a/a.
+/b/c/a/./a.a/a/ /b/c/a/a.a/a
+/b/c/a/./a.a/.a /b/c/a/a.a/.a
+/b/c/a/./a.a/.. /b/c/a
+/b/c/a/./a.a/./ /b/c/a/a.a
+/b/c/a/./a.a//a /b/c/a/a.a/a
+/b/c/a/./a.a//. /b/c/a/a.a
+/b/c/a/./a.a/// /b/c/a/a.a
+/b/c/a/./a..aaa /b/c/a/a..aaa
+/b/c/a/./a..aa. /b/c/a/a..aa.
+/b/c/a/./a..aa/ /b/c/a/a..aa
+/b/c/a/./a..a.a /b/c/a/a..a.a
+/b/c/a/./a..a.. /b/c/a/a..a..
+/b/c/a/./a..a./ /b/c/a/a..a.
+/b/c/a/./a..a/a /b/c/a/a..a/a
+/b/c/a/./a..a/. /b/c/a/a..a
+/b/c/a/./a..a// /b/c/a/a..a
+/b/c/a/./a...aa /b/c/a/a...aa
+/b/c/a/./a...a. /b/c/a/a...a.
+/b/c/a/./a...a/ /b/c/a/a...a
+/b/c/a/./a....a /b/c/a/a....a
+/b/c/a/./a..... /b/c/a/a.....
+/b/c/a/./a..../ /b/c/a/a....
+/b/c/a/./a.../a /b/c/a/a.../a
+/b/c/a/./a.../. /b/c/a/a...
+/b/c/a/./a...// /b/c/a/a...
+/b/c/a/./a../aa /b/c/a/a../aa
+/b/c/a/./a../a. /b/c/a/a../a.
+/b/c/a/./a../a/ /b/c/a/a../a
+/b/c/a/./a../.a /b/c/a/a../.a
+/b/c/a/./a../.. /b/c/a
+/b/c/a/./a.././ /b/c/a/a..
+/b/c/a/./a..//a /b/c/a/a../a
+/b/c/a/./a..//. /b/c/a/a..
+/b/c/a/./a../// /b/c/a/a..
+/b/c/a/./a./aaa /b/c/a/a./aaa
+/b/c/a/./a./aa. /b/c/a/a./aa.
+/b/c/a/./a./aa/ /b/c/a/a./aa
+/b/c/a/./a./a.a /b/c/a/a./a.a
+/b/c/a/./a./a.. /b/c/a/a./a..
+/b/c/a/./a./a./ /b/c/a/a./a.
+/b/c/a/./a./a/a /b/c/a/a./a/a
+/b/c/a/./a./a/. /b/c/a/a./a
+/b/c/a/./a./a// /b/c/a/a./a
+/b/c/a/./a./.aa /b/c/a/a./.aa
+/b/c/a/./a./.a. /b/c/a/a./.a.
+/b/c/a/./a./.a/ /b/c/a/a./.a
+/b/c/a/./a./..a /b/c/a/a./..a
+/b/c/a/./a./... /b/c/a/a./...
+/b/c/a/./a./../ /b/c/a
+/b/c/a/./a././a /b/c/a/a./a
+/b/c/a/./a././. /b/c/a/a.
+/b/c/a/./a./.// /b/c/a/a.
+/b/c/a/./a.//aa /b/c/a/a./aa
+/b/c/a/./a.//a. /b/c/a/a./a.
+/b/c/a/./a.//a/ /b/c/a/a./a
+/b/c/a/./a.//.a /b/c/a/a./.a
+/b/c/a/./a.//.. /b/c/a
+/b/c/a/./a.//./ /b/c/a/a.
+/b/c/a/./a.///a /b/c/a/a./a
+/b/c/a/./a.///. /b/c/a/a.
+/b/c/a/./a.//// /b/c/a/a.
+/b/c/a/./a/aaaa /b/c/a/a/aaaa
+/b/c/a/./a/aaa. /b/c/a/a/aaa.
+/b/c/a/./a/aaa/ /b/c/a/a/aaa
+/b/c/a/./a/aa.a /b/c/a/a/aa.a
+/b/c/a/./a/aa.. /b/c/a/a/aa..
+/b/c/a/./a/aa./ /b/c/a/a/aa.
+/b/c/a/./a/aa/a /b/c/a/a/aa/a
+/b/c/a/./a/aa/. /b/c/a/a/aa
+/b/c/a/./a/aa// /b/c/a/a/aa
+/b/c/a/./a/a.aa /b/c/a/a/a.aa
+/b/c/a/./a/a.a. /b/c/a/a/a.a.
+/b/c/a/./a/a.a/ /b/c/a/a/a.a
+/b/c/a/./a/a..a /b/c/a/a/a..a
+/b/c/a/./a/a... /b/c/a/a/a...
+/b/c/a/./a/a../ /b/c/a/a/a..
+/b/c/a/./a/a./a /b/c/a/a/a./a
+/b/c/a/./a/a./. /b/c/a/a/a.
+/b/c/a/./a/a.// /b/c/a/a/a.
+/b/c/a/./a/a/aa /b/c/a/a/a/aa
+/b/c/a/./a/a/a. /b/c/a/a/a/a.
+/b/c/a/./a/a/a/ /b/c/a/a/a/a
+/b/c/a/./a/a/.a /b/c/a/a/a/.a
+/b/c/a/./a/a/.. /b/c/a/a
+/b/c/a/./a/a/./ /b/c/a/a/a
+/b/c/a/./a/a//a /b/c/a/a/a/a
+/b/c/a/./a/a//. /b/c/a/a/a
+/b/c/a/./a/a/// /b/c/a/a/a
+/b/c/a/./a/.aaa /b/c/a/a/.aaa
+/b/c/a/./a/.aa. /b/c/a/a/.aa.
+/b/c/a/./a/.aa/ /b/c/a/a/.aa
+/b/c/a/./a/.a.a /b/c/a/a/.a.a
+/b/c/a/./a/.a.. /b/c/a/a/.a..
+/b/c/a/./a/.a./ /b/c/a/a/.a.
+/b/c/a/./a/.a/a /b/c/a/a/.a/a
+/b/c/a/./a/.a/. /b/c/a/a/.a
+/b/c/a/./a/.a// /b/c/a/a/.a
+/b/c/a/./a/..aa /b/c/a/a/..aa
+/b/c/a/./a/..a. /b/c/a/a/..a.
+/b/c/a/./a/..a/ /b/c/a/a/..a
+/b/c/a/./a/...a /b/c/a/a/...a
+/b/c/a/./a/.... /b/c/a/a/....
+/b/c/a/./a/.../ /b/c/a/a/...
+/b/c/a/./a/../a /b/c/a/a
+/b/c/a/./a/../. /b/c/a
+/b/c/a/./a/..// /b/c/a
+/b/c/a/./a/./aa /b/c/a/a/aa
+/b/c/a/./a/./a. /b/c/a/a/a.
+/b/c/a/./a/./a/ /b/c/a/a/a
+/b/c/a/./a/./.a /b/c/a/a/.a
+/b/c/a/./a/./.. /b/c/a
+/b/c/a/./a/././ /b/c/a/a
+/b/c/a/./a/.//a /b/c/a/a/a
+/b/c/a/./a/.//. /b/c/a/a
+/b/c/a/./a/./// /b/c/a/a
+/b/c/a/./a//aaa /b/c/a/a/aaa
+/b/c/a/./a//aa. /b/c/a/a/aa.
+/b/c/a/./a//aa/ /b/c/a/a/aa
+/b/c/a/./a//a.a /b/c/a/a/a.a
+/b/c/a/./a//a.. /b/c/a/a/a..
+/b/c/a/./a//a./ /b/c/a/a/a.
+/b/c/a/./a//a/a /b/c/a/a/a/a
+/b/c/a/./a//a/. /b/c/a/a/a
+/b/c/a/./a//a// /b/c/a/a/a
+/b/c/a/./a//.aa /b/c/a/a/.aa
+/b/c/a/./a//.a. /b/c/a/a/.a.
+/b/c/a/./a//.a/ /b/c/a/a/.a
+/b/c/a/./a//..a /b/c/a/a/..a
+/b/c/a/./a//... /b/c/a/a/...
+/b/c/a/./a//../ /b/c/a
+/b/c/a/./a//./a /b/c/a/a/a
+/b/c/a/./a//./. /b/c/a/a
+/b/c/a/./a//.// /b/c/a/a
+/b/c/a/./a///aa /b/c/a/a/aa
+/b/c/a/./a///a. /b/c/a/a/a.
+/b/c/a/./a///a/ /b/c/a/a/a
+/b/c/a/./a///.a /b/c/a/a/.a
+/b/c/a/./a///.. /b/c/a
+/b/c/a/./a///./ /b/c/a/a
+/b/c/a/./a////a /b/c/a/a/a
+/b/c/a/./a////. /b/c/a/a
+/b/c/a/./a///// /b/c/a/a
+/b/c/a/./.aaaaa /b/c/a/.aaaaa
+/b/c/a/./.aaaa. /b/c/a/.aaaa.
+/b/c/a/./.aaaa/ /b/c/a/.aaaa
+/b/c/a/./.aaa.a /b/c/a/.aaa.a
+/b/c/a/./.aaa.. /b/c/a/.aaa..
+/b/c/a/./.aaa./ /b/c/a/.aaa.
+/b/c/a/./.aaa/a /b/c/a/.aaa/a
+/b/c/a/./.aaa/. /b/c/a/.aaa
+/b/c/a/./.aaa// /b/c/a/.aaa
+/b/c/a/./.aa.aa /b/c/a/.aa.aa
+/b/c/a/./.aa.a. /b/c/a/.aa.a.
+/b/c/a/./.aa.a/ /b/c/a/.aa.a
+/b/c/a/./.aa..a /b/c/a/.aa..a
+/b/c/a/./.aa... /b/c/a/.aa...
+/b/c/a/./.aa../ /b/c/a/.aa..
+/b/c/a/./.aa./a /b/c/a/.aa./a
+/b/c/a/./.aa./. /b/c/a/.aa.
+/b/c/a/./.aa.// /b/c/a/.aa.
+/b/c/a/./.aa/aa /b/c/a/.aa/aa
+/b/c/a/./.aa/a. /b/c/a/.aa/a.
+/b/c/a/./.aa/a/ /b/c/a/.aa/a
+/b/c/a/./.aa/.a /b/c/a/.aa/.a
+/b/c/a/./.aa/.. /b/c/a
+/b/c/a/./.aa/./ /b/c/a/.aa
+/b/c/a/./.aa//a /b/c/a/.aa/a
+/b/c/a/./.aa//. /b/c/a/.aa
+/b/c/a/./.aa/// /b/c/a/.aa
+/b/c/a/./.a.aaa /b/c/a/.a.aaa
+/b/c/a/./.a.aa. /b/c/a/.a.aa.
+/b/c/a/./.a.aa/ /b/c/a/.a.aa
+/b/c/a/./.a.a.a /b/c/a/.a.a.a
+/b/c/a/./.a.a.. /b/c/a/.a.a..
+/b/c/a/./.a.a./ /b/c/a/.a.a.
+/b/c/a/./.a.a/a /b/c/a/.a.a/a
+/b/c/a/./.a.a/. /b/c/a/.a.a
+/b/c/a/./.a.a// /b/c/a/.a.a
+/b/c/a/./.a..aa /b/c/a/.a..aa
+/b/c/a/./.a..a. /b/c/a/.a..a.
+/b/c/a/./.a..a/ /b/c/a/.a..a
+/b/c/a/./.a...a /b/c/a/.a...a
+/b/c/a/./.a.... /b/c/a/.a....
+/b/c/a/./.a.../ /b/c/a/.a...
+/b/c/a/./.a../a /b/c/a/.a../a
+/b/c/a/./.a../. /b/c/a/.a..
+/b/c/a/./.a..// /b/c/a/.a..
+/b/c/a/./.a./aa /b/c/a/.a./aa
+/b/c/a/./.a./a. /b/c/a/.a./a.
+/b/c/a/./.a./a/ /b/c/a/.a./a
+/b/c/a/./.a./.a /b/c/a/.a./.a
+/b/c/a/./.a./.. /b/c/a
+/b/c/a/./.a././ /b/c/a/.a.
+/b/c/a/./.a.//a /b/c/a/.a./a
+/b/c/a/./.a.//. /b/c/a/.a.
+/b/c/a/./.a./// /b/c/a/.a.
+/b/c/a/./.a/aaa /b/c/a/.a/aaa
+/b/c/a/./.a/aa. /b/c/a/.a/aa.
+/b/c/a/./.a/aa/ /b/c/a/.a/aa
+/b/c/a/./.a/a.a /b/c/a/.a/a.a
+/b/c/a/./.a/a.. /b/c/a/.a/a..
+/b/c/a/./.a/a./ /b/c/a/.a/a.
+/b/c/a/./.a/a/a /b/c/a/.a/a/a
+/b/c/a/./.a/a/. /b/c/a/.a/a
+/b/c/a/./.a/a// /b/c/a/.a/a
+/b/c/a/./.a/.aa /b/c/a/.a/.aa
+/b/c/a/./.a/.a. /b/c/a/.a/.a.
+/b/c/a/./.a/.a/ /b/c/a/.a/.a
+/b/c/a/./.a/..a /b/c/a/.a/..a
+/b/c/a/./.a/... /b/c/a/.a/...
+/b/c/a/./.a/../ /b/c/a
+/b/c/a/./.a/./a /b/c/a/.a/a
+/b/c/a/./.a/./. /b/c/a/.a
+/b/c/a/./.a/.// /b/c/a/.a
+/b/c/a/./.a//aa /b/c/a/.a/aa
+/b/c/a/./.a//a. /b/c/a/.a/a.
+/b/c/a/./.a//a/ /b/c/a/.a/a
+/b/c/a/./.a//.a /b/c/a/.a/.a
+/b/c/a/./.a//.. /b/c/a
+/b/c/a/./.a//./ /b/c/a/.a
+/b/c/a/./.a///a /b/c/a/.a/a
+/b/c/a/./.a///. /b/c/a/.a
+/b/c/a/./.a//// /b/c/a/.a
+/b/c/a/./..aaaa /b/c/a/..aaaa
+/b/c/a/./..aaa. /b/c/a/..aaa.
+/b/c/a/./..aaa/ /b/c/a/..aaa
+/b/c/a/./..aa.a /b/c/a/..aa.a
+/b/c/a/./..aa.. /b/c/a/..aa..
+/b/c/a/./..aa./ /b/c/a/..aa.
+/b/c/a/./..aa/a /b/c/a/..aa/a
+/b/c/a/./..aa/. /b/c/a/..aa
+/b/c/a/./..aa// /b/c/a/..aa
+/b/c/a/./..a.aa /b/c/a/..a.aa
+/b/c/a/./..a.a. /b/c/a/..a.a.
+/b/c/a/./..a.a/ /b/c/a/..a.a
+/b/c/a/./..a..a /b/c/a/..a..a
+/b/c/a/./..a... /b/c/a/..a...
+/b/c/a/./..a../ /b/c/a/..a..
+/b/c/a/./..a./a /b/c/a/..a./a
+/b/c/a/./..a./. /b/c/a/..a.
+/b/c/a/./..a.// /b/c/a/..a.
+/b/c/a/./..a/aa /b/c/a/..a/aa
+/b/c/a/./..a/a. /b/c/a/..a/a.
+/b/c/a/./..a/a/ /b/c/a/..a/a
+/b/c/a/./..a/.a /b/c/a/..a/.a
+/b/c/a/./..a/.. /b/c/a
+/b/c/a/./..a/./ /b/c/a/..a
+/b/c/a/./..a//a /b/c/a/..a/a
+/b/c/a/./..a//. /b/c/a/..a
+/b/c/a/./..a/// /b/c/a/..a
+/b/c/a/./...aaa /b/c/a/...aaa
+/b/c/a/./...aa. /b/c/a/...aa.
+/b/c/a/./...aa/ /b/c/a/...aa
+/b/c/a/./...a.a /b/c/a/...a.a
+/b/c/a/./...a.. /b/c/a/...a..
+/b/c/a/./...a./ /b/c/a/...a.
+/b/c/a/./...a/a /b/c/a/...a/a
+/b/c/a/./...a/. /b/c/a/...a
+/b/c/a/./...a// /b/c/a/...a
+/b/c/a/./....aa /b/c/a/....aa
+/b/c/a/./....a. /b/c/a/....a.
+/b/c/a/./....a/ /b/c/a/....a
+/b/c/a/./.....a /b/c/a/.....a
+/b/c/a/./...... /b/c/a/......
+/b/c/a/./...../ /b/c/a/.....
+/b/c/a/./..../a /b/c/a/..../a
+/b/c/a/./..../. /b/c/a/....
+/b/c/a/./....// /b/c/a/....
+/b/c/a/./.../aa /b/c/a/.../aa
+/b/c/a/./.../a. /b/c/a/.../a.
+/b/c/a/./.../a/ /b/c/a/.../a
+/b/c/a/./.../.a /b/c/a/.../.a
+/b/c/a/./.../.. /b/c/a
+/b/c/a/./..././ /b/c/a/...
+/b/c/a/./...//a /b/c/a/.../a
+/b/c/a/./...//. /b/c/a/...
+/b/c/a/./.../// /b/c/a/...
+/b/c/a/./../aaa /b/c/aaa
+/b/c/a/./../aa. /b/c/aa.
+/b/c/a/./../aa/ /b/c/aa
+/b/c/a/./../a.a /b/c/a.a
+/b/c/a/./../a.. /b/c/a..
+/b/c/a/./../a./ /b/c/a.
+/b/c/a/./../a/a /b/c/a/a
+/b/c/a/./../a/. /b/c/a
+/b/c/a/./../a// /b/c/a
+/b/c/a/./../.aa /b/c/.aa
+/b/c/a/./../.a. /b/c/.a.
+/b/c/a/./../.a/ /b/c/.a
+/b/c/a/./../..a /b/c/..a
+/b/c/a/./../... /b/c/...
+/b/c/a/./../../ /b
+/b/c/a/./.././a /b/c/a
+/b/c/a/./.././. /b/c
+/b/c/a/./../.// /b/c
+/b/c/a/./..//aa /b/c/aa
+/b/c/a/./..//a. /b/c/a.
+/b/c/a/./..//a/ /b/c/a
+/b/c/a/./..//.a /b/c/.a
+/b/c/a/./..//.. /b
+/b/c/a/./..//./ /b/c
+/b/c/a/./..///a /b/c/a
+/b/c/a/./..///. /b/c
+/b/c/a/./..//// /b/c
+/b/c/a/././aaaa /b/c/a/aaaa
+/b/c/a/././aaa. /b/c/a/aaa.
+/b/c/a/././aaa/ /b/c/a/aaa
+/b/c/a/././aa.a /b/c/a/aa.a
+/b/c/a/././aa.. /b/c/a/aa..
+/b/c/a/././aa./ /b/c/a/aa.
+/b/c/a/././aa/a /b/c/a/aa/a
+/b/c/a/././aa/. /b/c/a/aa
+/b/c/a/././aa// /b/c/a/aa
+/b/c/a/././a.aa /b/c/a/a.aa
+/b/c/a/././a.a. /b/c/a/a.a.
+/b/c/a/././a.a/ /b/c/a/a.a
+/b/c/a/././a..a /b/c/a/a..a
+/b/c/a/././a... /b/c/a/a...
+/b/c/a/././a../ /b/c/a/a..
+/b/c/a/././a./a /b/c/a/a./a
+/b/c/a/././a./. /b/c/a/a.
+/b/c/a/././a.// /b/c/a/a.
+/b/c/a/././a/aa /b/c/a/a/aa
+/b/c/a/././a/a. /b/c/a/a/a.
+/b/c/a/././a/a/ /b/c/a/a/a
+/b/c/a/././a/.a /b/c/a/a/.a
+/b/c/a/././a/.. /b/c/a
+/b/c/a/././a/./ /b/c/a/a
+/b/c/a/././a//a /b/c/a/a/a
+/b/c/a/././a//. /b/c/a/a
+/b/c/a/././a/// /b/c/a/a
+/b/c/a/././.aaa /b/c/a/.aaa
+/b/c/a/././.aa. /b/c/a/.aa.
+/b/c/a/././.aa/ /b/c/a/.aa
+/b/c/a/././.a.a /b/c/a/.a.a
+/b/c/a/././.a.. /b/c/a/.a..
+/b/c/a/././.a./ /b/c/a/.a.
+/b/c/a/././.a/a /b/c/a/.a/a
+/b/c/a/././.a/. /b/c/a/.a
+/b/c/a/././.a// /b/c/a/.a
+/b/c/a/././..aa /b/c/a/..aa
+/b/c/a/././..a. /b/c/a/..a.
+/b/c/a/././..a/ /b/c/a/..a
+/b/c/a/././...a /b/c/a/...a
+/b/c/a/././.... /b/c/a/....
+/b/c/a/././.../ /b/c/a/...
+/b/c/a/././../a /b/c/a
+/b/c/a/././../. /b/c
+/b/c/a/././..// /b/c
+/b/c/a/./././aa /b/c/a/aa
+/b/c/a/./././a. /b/c/a/a.
+/b/c/a/./././a/ /b/c/a/a
+/b/c/a/./././.a /b/c/a/.a
+/b/c/a/./././.. /b/c
+/b/c/a/././././ /b/c/a
+/b/c/a/./././/a /b/c/a/a
+/b/c/a/./././/. /b/c/a
+/b/c/a/./././// /b/c/a
+/b/c/a/././/aaa /b/c/a/aaa
+/b/c/a/././/aa. /b/c/a/aa.
+/b/c/a/././/aa/ /b/c/a/aa
+/b/c/a/././/a.a /b/c/a/a.a
+/b/c/a/././/a.. /b/c/a/a..
+/b/c/a/././/a./ /b/c/a/a.
+/b/c/a/././/a/a /b/c/a/a/a
+/b/c/a/././/a/. /b/c/a/a
+/b/c/a/././/a// /b/c/a/a
+/b/c/a/././/.aa /b/c/a/.aa
+/b/c/a/././/.a. /b/c/a/.a.
+/b/c/a/././/.a/ /b/c/a/.a
+/b/c/a/././/..a /b/c/a/..a
+/b/c/a/././/... /b/c/a/...
+/b/c/a/././/../ /b/c
+/b/c/a/././/./a /b/c/a/a
+/b/c/a/././/./. /b/c/a
+/b/c/a/././/.// /b/c/a
+/b/c/a/././//aa /b/c/a/aa
+/b/c/a/././//a. /b/c/a/a.
+/b/c/a/././//a/ /b/c/a/a
+/b/c/a/././//.a /b/c/a/.a
+/b/c/a/././//.. /b/c
+/b/c/a/././//./ /b/c/a
+/b/c/a/././///a /b/c/a/a
+/b/c/a/././///. /b/c/a
+/b/c/a/././//// /b/c/a
+/b/c/a/.//aaaaa /b/c/a/aaaaa
+/b/c/a/.//aaaa. /b/c/a/aaaa.
+/b/c/a/.//aaaa/ /b/c/a/aaaa
+/b/c/a/.//aaa.a /b/c/a/aaa.a
+/b/c/a/.//aaa.. /b/c/a/aaa..
+/b/c/a/.//aaa./ /b/c/a/aaa.
+/b/c/a/.//aaa/a /b/c/a/aaa/a
+/b/c/a/.//aaa/. /b/c/a/aaa
+/b/c/a/.//aaa// /b/c/a/aaa
+/b/c/a/.//aa.aa /b/c/a/aa.aa
+/b/c/a/.//aa.a. /b/c/a/aa.a.
+/b/c/a/.//aa.a/ /b/c/a/aa.a
+/b/c/a/.//aa..a /b/c/a/aa..a
+/b/c/a/.//aa... /b/c/a/aa...
+/b/c/a/.//aa../ /b/c/a/aa..
+/b/c/a/.//aa./a /b/c/a/aa./a
+/b/c/a/.//aa./. /b/c/a/aa.
+/b/c/a/.//aa.// /b/c/a/aa.
+/b/c/a/.//aa/aa /b/c/a/aa/aa
+/b/c/a/.//aa/a. /b/c/a/aa/a.
+/b/c/a/.//aa/a/ /b/c/a/aa/a
+/b/c/a/.//aa/.a /b/c/a/aa/.a
+/b/c/a/.//aa/.. /b/c/a
+/b/c/a/.//aa/./ /b/c/a/aa
+/b/c/a/.//aa//a /b/c/a/aa/a
+/b/c/a/.//aa//. /b/c/a/aa
+/b/c/a/.//aa/// /b/c/a/aa
+/b/c/a/.//a.aaa /b/c/a/a.aaa
+/b/c/a/.//a.aa. /b/c/a/a.aa.
+/b/c/a/.//a.aa/ /b/c/a/a.aa
+/b/c/a/.//a.a.a /b/c/a/a.a.a
+/b/c/a/.//a.a.. /b/c/a/a.a..
+/b/c/a/.//a.a./ /b/c/a/a.a.
+/b/c/a/.//a.a/a /b/c/a/a.a/a
+/b/c/a/.//a.a/. /b/c/a/a.a
+/b/c/a/.//a.a// /b/c/a/a.a
+/b/c/a/.//a..aa /b/c/a/a..aa
+/b/c/a/.//a..a. /b/c/a/a..a.
+/b/c/a/.//a..a/ /b/c/a/a..a
+/b/c/a/.//a...a /b/c/a/a...a
+/b/c/a/.//a.... /b/c/a/a....
+/b/c/a/.//a.../ /b/c/a/a...
+/b/c/a/.//a../a /b/c/a/a../a
+/b/c/a/.//a../. /b/c/a/a..
+/b/c/a/.//a..// /b/c/a/a..
+/b/c/a/.//a./aa /b/c/a/a./aa
+/b/c/a/.//a./a. /b/c/a/a./a.
+/b/c/a/.//a./a/ /b/c/a/a./a
+/b/c/a/.//a./.a /b/c/a/a./.a
+/b/c/a/.//a./.. /b/c/a
+/b/c/a/.//a././ /b/c/a/a.
+/b/c/a/.//a.//a /b/c/a/a./a
+/b/c/a/.//a.//. /b/c/a/a.
+/b/c/a/.//a./// /b/c/a/a.
+/b/c/a/.//a/aaa /b/c/a/a/aaa
+/b/c/a/.//a/aa. /b/c/a/a/aa.
+/b/c/a/.//a/aa/ /b/c/a/a/aa
+/b/c/a/.//a/a.a /b/c/a/a/a.a
+/b/c/a/.//a/a.. /b/c/a/a/a..
+/b/c/a/.//a/a./ /b/c/a/a/a.
+/b/c/a/.//a/a/a /b/c/a/a/a/a
+/b/c/a/.//a/a/. /b/c/a/a/a
+/b/c/a/.//a/a// /b/c/a/a/a
+/b/c/a/.//a/.aa /b/c/a/a/.aa
+/b/c/a/.//a/.a. /b/c/a/a/.a.
+/b/c/a/.//a/.a/ /b/c/a/a/.a
+/b/c/a/.//a/..a /b/c/a/a/..a
+/b/c/a/.//a/... /b/c/a/a/...
+/b/c/a/.//a/../ /b/c/a
+/b/c/a/.//a/./a /b/c/a/a/a
+/b/c/a/.//a/./. /b/c/a/a
+/b/c/a/.//a/.// /b/c/a/a
+/b/c/a/.//a//aa /b/c/a/a/aa
+/b/c/a/.//a//a. /b/c/a/a/a.
+/b/c/a/.//a//a/ /b/c/a/a/a
+/b/c/a/.//a//.a /b/c/a/a/.a
+/b/c/a/.//a//.. /b/c/a
+/b/c/a/.//a//./ /b/c/a/a
+/b/c/a/.//a///a /b/c/a/a/a
+/b/c/a/.//a///. /b/c/a/a
+/b/c/a/.//a//// /b/c/a/a
+/b/c/a/.//.aaaa /b/c/a/.aaaa
+/b/c/a/.//.aaa. /b/c/a/.aaa.
+/b/c/a/.//.aaa/ /b/c/a/.aaa
+/b/c/a/.//.aa.a /b/c/a/.aa.a
+/b/c/a/.//.aa.. /b/c/a/.aa..
+/b/c/a/.//.aa./ /b/c/a/.aa.
+/b/c/a/.//.aa/a /b/c/a/.aa/a
+/b/c/a/.//.aa/. /b/c/a/.aa
+/b/c/a/.//.aa// /b/c/a/.aa
+/b/c/a/.//.a.aa /b/c/a/.a.aa
+/b/c/a/.//.a.a. /b/c/a/.a.a.
+/b/c/a/.//.a.a/ /b/c/a/.a.a
+/b/c/a/.//.a..a /b/c/a/.a..a
+/b/c/a/.//.a... /b/c/a/.a...
+/b/c/a/.//.a../ /b/c/a/.a..
+/b/c/a/.//.a./a /b/c/a/.a./a
+/b/c/a/.//.a./. /b/c/a/.a.
+/b/c/a/.//.a.// /b/c/a/.a.
+/b/c/a/.//.a/aa /b/c/a/.a/aa
+/b/c/a/.//.a/a. /b/c/a/.a/a.
+/b/c/a/.//.a/a/ /b/c/a/.a/a
+/b/c/a/.//.a/.a /b/c/a/.a/.a
+/b/c/a/.//.a/.. /b/c/a
+/b/c/a/.//.a/./ /b/c/a/.a
+/b/c/a/.//.a//a /b/c/a/.a/a
+/b/c/a/.//.a//. /b/c/a/.a
+/b/c/a/.//.a/// /b/c/a/.a
+/b/c/a/.//..aaa /b/c/a/..aaa
+/b/c/a/.//..aa. /b/c/a/..aa.
+/b/c/a/.//..aa/ /b/c/a/..aa
+/b/c/a/.//..a.a /b/c/a/..a.a
+/b/c/a/.//..a.. /b/c/a/..a..
+/b/c/a/.//..a./ /b/c/a/..a.
+/b/c/a/.//..a/a /b/c/a/..a/a
+/b/c/a/.//..a/. /b/c/a/..a
+/b/c/a/.//..a// /b/c/a/..a
+/b/c/a/.//...aa /b/c/a/...aa
+/b/c/a/.//...a. /b/c/a/...a.
+/b/c/a/.//...a/ /b/c/a/...a
+/b/c/a/.//....a /b/c/a/....a
+/b/c/a/.//..... /b/c/a/.....
+/b/c/a/.//..../ /b/c/a/....
+/b/c/a/.//.../a /b/c/a/.../a
+/b/c/a/.//.../. /b/c/a/...
+/b/c/a/.//...// /b/c/a/...
+/b/c/a/.//../aa /b/c/aa
+/b/c/a/.//../a. /b/c/a.
+/b/c/a/.//../a/ /b/c/a
+/b/c/a/.//../.a /b/c/.a
+/b/c/a/.//../.. /b
+/b/c/a/.//.././ /b/c
+/b/c/a/.//..//a /b/c/a
+/b/c/a/.//..//. /b/c
+/b/c/a/.//../// /b/c
+/b/c/a/.//./aaa /b/c/a/aaa
+/b/c/a/.//./aa. /b/c/a/aa.
+/b/c/a/.//./aa/ /b/c/a/aa
+/b/c/a/.//./a.a /b/c/a/a.a
+/b/c/a/.//./a.. /b/c/a/a..
+/b/c/a/.//./a./ /b/c/a/a.
+/b/c/a/.//./a/a /b/c/a/a/a
+/b/c/a/.//./a/. /b/c/a/a
+/b/c/a/.//./a// /b/c/a/a
+/b/c/a/.//./.aa /b/c/a/.aa
+/b/c/a/.//./.a. /b/c/a/.a.
+/b/c/a/.//./.a/ /b/c/a/.a
+/b/c/a/.//./..a /b/c/a/..a
+/b/c/a/.//./... /b/c/a/...
+/b/c/a/.//./../ /b/c
+/b/c/a/.//././a /b/c/a/a
+/b/c/a/.//././. /b/c/a
+/b/c/a/.//./.// /b/c/a
+/b/c/a/.//.//aa /b/c/a/aa
+/b/c/a/.//.//a. /b/c/a/a.
+/b/c/a/.//.//a/ /b/c/a/a
+/b/c/a/.//.//.a /b/c/a/.a
+/b/c/a/.//.//.. /b/c
+/b/c/a/.//.//./ /b/c/a
+/b/c/a/.//.///a /b/c/a/a
+/b/c/a/.//.///. /b/c/a
+/b/c/a/.//.//// /b/c/a
+/b/c/a/.///aaaa /b/c/a/aaaa
+/b/c/a/.///aaa. /b/c/a/aaa.
+/b/c/a/.///aaa/ /b/c/a/aaa
+/b/c/a/.///aa.a /b/c/a/aa.a
+/b/c/a/.///aa.. /b/c/a/aa..
+/b/c/a/.///aa./ /b/c/a/aa.
+/b/c/a/.///aa/a /b/c/a/aa/a
+/b/c/a/.///aa/. /b/c/a/aa
+/b/c/a/.///aa// /b/c/a/aa
+/b/c/a/.///a.aa /b/c/a/a.aa
+/b/c/a/.///a.a. /b/c/a/a.a.
+/b/c/a/.///a.a/ /b/c/a/a.a
+/b/c/a/.///a..a /b/c/a/a..a
+/b/c/a/.///a... /b/c/a/a...
+/b/c/a/.///a../ /b/c/a/a..
+/b/c/a/.///a./a /b/c/a/a./a
+/b/c/a/.///a./. /b/c/a/a.
+/b/c/a/.///a.// /b/c/a/a.
+/b/c/a/.///a/aa /b/c/a/a/aa
+/b/c/a/.///a/a. /b/c/a/a/a.
+/b/c/a/.///a/a/ /b/c/a/a/a
+/b/c/a/.///a/.a /b/c/a/a/.a
+/b/c/a/.///a/.. /b/c/a
+/b/c/a/.///a/./ /b/c/a/a
+/b/c/a/.///a//a /b/c/a/a/a
+/b/c/a/.///a//. /b/c/a/a
+/b/c/a/.///a/// /b/c/a/a
+/b/c/a/.///.aaa /b/c/a/.aaa
+/b/c/a/.///.aa. /b/c/a/.aa.
+/b/c/a/.///.aa/ /b/c/a/.aa
+/b/c/a/.///.a.a /b/c/a/.a.a
+/b/c/a/.///.a.. /b/c/a/.a..
+/b/c/a/.///.a./ /b/c/a/.a.
+/b/c/a/.///.a/a /b/c/a/.a/a
+/b/c/a/.///.a/. /b/c/a/.a
+/b/c/a/.///.a// /b/c/a/.a
+/b/c/a/.///..aa /b/c/a/..aa
+/b/c/a/.///..a. /b/c/a/..a.
+/b/c/a/.///..a/ /b/c/a/..a
+/b/c/a/.///...a /b/c/a/...a
+/b/c/a/.///.... /b/c/a/....
+/b/c/a/.///.../ /b/c/a/...
+/b/c/a/.///../a /b/c/a
+/b/c/a/.///../. /b/c
+/b/c/a/.///..// /b/c
+/b/c/a/.///./aa /b/c/a/aa
+/b/c/a/.///./a. /b/c/a/a.
+/b/c/a/.///./a/ /b/c/a/a
+/b/c/a/.///./.a /b/c/a/.a
+/b/c/a/.///./.. /b/c
+/b/c/a/.///././ /b/c/a
+/b/c/a/.///.//a /b/c/a/a
+/b/c/a/.///.//. /b/c/a
+/b/c/a/.///./// /b/c/a
+/b/c/a/.////aaa /b/c/a/aaa
+/b/c/a/.////aa. /b/c/a/aa.
+/b/c/a/.////aa/ /b/c/a/aa
+/b/c/a/.////a.a /b/c/a/a.a
+/b/c/a/.////a.. /b/c/a/a..
+/b/c/a/.////a./ /b/c/a/a.
+/b/c/a/.////a/a /b/c/a/a/a
+/b/c/a/.////a/. /b/c/a/a
+/b/c/a/.////a// /b/c/a/a
+/b/c/a/.////.aa /b/c/a/.aa
+/b/c/a/.////.a. /b/c/a/.a.
+/b/c/a/.////.a/ /b/c/a/.a
+/b/c/a/.////..a /b/c/a/..a
+/b/c/a/.////... /b/c/a/...
+/b/c/a/.////../ /b/c
+/b/c/a/.////./a /b/c/a/a
+/b/c/a/.////./. /b/c/a
+/b/c/a/.////.// /b/c/a
+/b/c/a/./////aa /b/c/a/aa
+/b/c/a/./////a. /b/c/a/a.
+/b/c/a/./////a/ /b/c/a/a
+/b/c/a/./////.a /b/c/a/.a
+/b/c/a/./////.. /b/c
+/b/c/a/./////./ /b/c/a
+/b/c/a/.//////a /b/c/a/a
+/b/c/a/.//////. /b/c/a
+/b/c/a/./////// /b/c/a
+/b/c/a//aaaaaaa /b/c/a/aaaaaaa
+/b/c/a//aaaaaa. /b/c/a/aaaaaa.
+/b/c/a//aaaaaa/ /b/c/a/aaaaaa
+/b/c/a//aaaaa.a /b/c/a/aaaaa.a
+/b/c/a//aaaaa.. /b/c/a/aaaaa..
+/b/c/a//aaaaa./ /b/c/a/aaaaa.
+/b/c/a//aaaaa/a /b/c/a/aaaaa/a
+/b/c/a//aaaaa/. /b/c/a/aaaaa
+/b/c/a//aaaaa// /b/c/a/aaaaa
+/b/c/a//aaaa.aa /b/c/a/aaaa.aa
+/b/c/a//aaaa.a. /b/c/a/aaaa.a.
+/b/c/a//aaaa.a/ /b/c/a/aaaa.a
+/b/c/a//aaaa..a /b/c/a/aaaa..a
+/b/c/a//aaaa... /b/c/a/aaaa...
+/b/c/a//aaaa../ /b/c/a/aaaa..
+/b/c/a//aaaa./a /b/c/a/aaaa./a
+/b/c/a//aaaa./. /b/c/a/aaaa.
+/b/c/a//aaaa.// /b/c/a/aaaa.
+/b/c/a//aaaa/aa /b/c/a/aaaa/aa
+/b/c/a//aaaa/a. /b/c/a/aaaa/a.
+/b/c/a//aaaa/a/ /b/c/a/aaaa/a
+/b/c/a//aaaa/.a /b/c/a/aaaa/.a
+/b/c/a//aaaa/.. /b/c/a
+/b/c/a//aaaa/./ /b/c/a/aaaa
+/b/c/a//aaaa//a /b/c/a/aaaa/a
+/b/c/a//aaaa//. /b/c/a/aaaa
+/b/c/a//aaaa/// /b/c/a/aaaa
+/b/c/a//aaa.aaa /b/c/a/aaa.aaa
+/b/c/a//aaa.aa. /b/c/a/aaa.aa.
+/b/c/a//aaa.aa/ /b/c/a/aaa.aa
+/b/c/a//aaa.a.a /b/c/a/aaa.a.a
+/b/c/a//aaa.a.. /b/c/a/aaa.a..
+/b/c/a//aaa.a./ /b/c/a/aaa.a.
+/b/c/a//aaa.a/a /b/c/a/aaa.a/a
+/b/c/a//aaa.a/. /b/c/a/aaa.a
+/b/c/a//aaa.a// /b/c/a/aaa.a
+/b/c/a//aaa..aa /b/c/a/aaa..aa
+/b/c/a//aaa..a. /b/c/a/aaa..a.
+/b/c/a//aaa..a/ /b/c/a/aaa..a
+/b/c/a//aaa...a /b/c/a/aaa...a
+/b/c/a//aaa.... /b/c/a/aaa....
+/b/c/a//aaa.../ /b/c/a/aaa...
+/b/c/a//aaa../a /b/c/a/aaa../a
+/b/c/a//aaa../. /b/c/a/aaa..
+/b/c/a//aaa..// /b/c/a/aaa..
+/b/c/a//aaa./aa /b/c/a/aaa./aa
+/b/c/a//aaa./a. /b/c/a/aaa./a.
+/b/c/a//aaa./a/ /b/c/a/aaa./a
+/b/c/a//aaa./.a /b/c/a/aaa./.a
+/b/c/a//aaa./.. /b/c/a
+/b/c/a//aaa././ /b/c/a/aaa.
+/b/c/a//aaa.//a /b/c/a/aaa./a
+/b/c/a//aaa.//. /b/c/a/aaa.
+/b/c/a//aaa./// /b/c/a/aaa.
+/b/c/a//aaa/aaa /b/c/a/aaa/aaa
+/b/c/a//aaa/aa. /b/c/a/aaa/aa.
+/b/c/a//aaa/aa/ /b/c/a/aaa/aa
+/b/c/a//aaa/a.a /b/c/a/aaa/a.a
+/b/c/a//aaa/a.. /b/c/a/aaa/a..
+/b/c/a//aaa/a./ /b/c/a/aaa/a.
+/b/c/a//aaa/a/a /b/c/a/aaa/a/a
+/b/c/a//aaa/a/. /b/c/a/aaa/a
+/b/c/a//aaa/a// /b/c/a/aaa/a
+/b/c/a//aaa/.aa /b/c/a/aaa/.aa
+/b/c/a//aaa/.a. /b/c/a/aaa/.a.
+/b/c/a//aaa/.a/ /b/c/a/aaa/.a
+/b/c/a//aaa/..a /b/c/a/aaa/..a
+/b/c/a//aaa/... /b/c/a/aaa/...
+/b/c/a//aaa/../ /b/c/a
+/b/c/a//aaa/./a /b/c/a/aaa/a
+/b/c/a//aaa/./. /b/c/a/aaa
+/b/c/a//aaa/.// /b/c/a/aaa
+/b/c/a//aaa//aa /b/c/a/aaa/aa
+/b/c/a//aaa//a. /b/c/a/aaa/a.
+/b/c/a//aaa//a/ /b/c/a/aaa/a
+/b/c/a//aaa//.a /b/c/a/aaa/.a
+/b/c/a//aaa//.. /b/c/a
+/b/c/a//aaa//./ /b/c/a/aaa
+/b/c/a//aaa///a /b/c/a/aaa/a
+/b/c/a//aaa///. /b/c/a/aaa
+/b/c/a//aaa//// /b/c/a/aaa
+/b/c/a//aa.aaaa /b/c/a/aa.aaaa
+/b/c/a//aa.aaa. /b/c/a/aa.aaa.
+/b/c/a//aa.aaa/ /b/c/a/aa.aaa
+/b/c/a//aa.aa.a /b/c/a/aa.aa.a
+/b/c/a//aa.aa.. /b/c/a/aa.aa..
+/b/c/a//aa.aa./ /b/c/a/aa.aa.
+/b/c/a//aa.aa/a /b/c/a/aa.aa/a
+/b/c/a//aa.aa/. /b/c/a/aa.aa
+/b/c/a//aa.aa// /b/c/a/aa.aa
+/b/c/a//aa.a.aa /b/c/a/aa.a.aa
+/b/c/a//aa.a.a. /b/c/a/aa.a.a.
+/b/c/a//aa.a.a/ /b/c/a/aa.a.a
+/b/c/a//aa.a..a /b/c/a/aa.a..a
+/b/c/a//aa.a... /b/c/a/aa.a...
+/b/c/a//aa.a../ /b/c/a/aa.a..
+/b/c/a//aa.a./a /b/c/a/aa.a./a
+/b/c/a//aa.a./. /b/c/a/aa.a.
+/b/c/a//aa.a.// /b/c/a/aa.a.
+/b/c/a//aa.a/aa /b/c/a/aa.a/aa
+/b/c/a//aa.a/a. /b/c/a/aa.a/a.
+/b/c/a//aa.a/a/ /b/c/a/aa.a/a
+/b/c/a//aa.a/.a /b/c/a/aa.a/.a
+/b/c/a//aa.a/.. /b/c/a
+/b/c/a//aa.a/./ /b/c/a/aa.a
+/b/c/a//aa.a//a /b/c/a/aa.a/a
+/b/c/a//aa.a//. /b/c/a/aa.a
+/b/c/a//aa.a/// /b/c/a/aa.a
+/b/c/a//aa..aaa /b/c/a/aa..aaa
+/b/c/a//aa..aa. /b/c/a/aa..aa.
+/b/c/a//aa..aa/ /b/c/a/aa..aa
+/b/c/a//aa..a.a /b/c/a/aa..a.a
+/b/c/a//aa..a.. /b/c/a/aa..a..
+/b/c/a//aa..a./ /b/c/a/aa..a.
+/b/c/a//aa..a/a /b/c/a/aa..a/a
+/b/c/a//aa..a/. /b/c/a/aa..a
+/b/c/a//aa..a// /b/c/a/aa..a
+/b/c/a//aa...aa /b/c/a/aa...aa
+/b/c/a//aa...a. /b/c/a/aa...a.
+/b/c/a//aa...a/ /b/c/a/aa...a
+/b/c/a//aa....a /b/c/a/aa....a
+/b/c/a//aa..... /b/c/a/aa.....
+/b/c/a//aa..../ /b/c/a/aa....
+/b/c/a//aa.../a /b/c/a/aa.../a
+/b/c/a//aa.../. /b/c/a/aa...
+/b/c/a//aa...// /b/c/a/aa...
+/b/c/a//aa../aa /b/c/a/aa../aa
+/b/c/a//aa../a. /b/c/a/aa../a.
+/b/c/a//aa../a/ /b/c/a/aa../a
+/b/c/a//aa../.a /b/c/a/aa../.a
+/b/c/a//aa../.. /b/c/a
+/b/c/a//aa.././ /b/c/a/aa..
+/b/c/a//aa..//a /b/c/a/aa../a
+/b/c/a//aa..//. /b/c/a/aa..
+/b/c/a//aa../// /b/c/a/aa..
+/b/c/a//aa./aaa /b/c/a/aa./aaa
+/b/c/a//aa./aa. /b/c/a/aa./aa.
+/b/c/a//aa./aa/ /b/c/a/aa./aa
+/b/c/a//aa./a.a /b/c/a/aa./a.a
+/b/c/a//aa./a.. /b/c/a/aa./a..
+/b/c/a//aa./a./ /b/c/a/aa./a.
+/b/c/a//aa./a/a /b/c/a/aa./a/a
+/b/c/a//aa./a/. /b/c/a/aa./a
+/b/c/a//aa./a// /b/c/a/aa./a
+/b/c/a//aa./.aa /b/c/a/aa./.aa
+/b/c/a//aa./.a. /b/c/a/aa./.a.
+/b/c/a//aa./.a/ /b/c/a/aa./.a
+/b/c/a//aa./..a /b/c/a/aa./..a
+/b/c/a//aa./... /b/c/a/aa./...
+/b/c/a//aa./../ /b/c/a
+/b/c/a//aa././a /b/c/a/aa./a
+/b/c/a//aa././. /b/c/a/aa.
+/b/c/a//aa./.// /b/c/a/aa.
+/b/c/a//aa.//aa /b/c/a/aa./aa
+/b/c/a//aa.//a. /b/c/a/aa./a.
+/b/c/a//aa.//a/ /b/c/a/aa./a
+/b/c/a//aa.//.a /b/c/a/aa./.a
+/b/c/a//aa.//.. /b/c/a
+/b/c/a//aa.//./ /b/c/a/aa.
+/b/c/a//aa.///a /b/c/a/aa./a
+/b/c/a//aa.///. /b/c/a/aa.
+/b/c/a//aa.//// /b/c/a/aa.
+/b/c/a//aa/aaaa /b/c/a/aa/aaaa
+/b/c/a//aa/aaa. /b/c/a/aa/aaa.
+/b/c/a//aa/aaa/ /b/c/a/aa/aaa
+/b/c/a//aa/aa.a /b/c/a/aa/aa.a
+/b/c/a//aa/aa.. /b/c/a/aa/aa..
+/b/c/a//aa/aa./ /b/c/a/aa/aa.
+/b/c/a//aa/aa/a /b/c/a/aa/aa/a
+/b/c/a//aa/aa/. /b/c/a/aa/aa
+/b/c/a//aa/aa// /b/c/a/aa/aa
+/b/c/a//aa/a.aa /b/c/a/aa/a.aa
+/b/c/a//aa/a.a. /b/c/a/aa/a.a.
+/b/c/a//aa/a.a/ /b/c/a/aa/a.a
+/b/c/a//aa/a..a /b/c/a/aa/a..a
+/b/c/a//aa/a... /b/c/a/aa/a...
+/b/c/a//aa/a../ /b/c/a/aa/a..
+/b/c/a//aa/a./a /b/c/a/aa/a./a
+/b/c/a//aa/a./. /b/c/a/aa/a.
+/b/c/a//aa/a.// /b/c/a/aa/a.
+/b/c/a//aa/a/aa /b/c/a/aa/a/aa
+/b/c/a//aa/a/a. /b/c/a/aa/a/a.
+/b/c/a//aa/a/a/ /b/c/a/aa/a/a
+/b/c/a//aa/a/.a /b/c/a/aa/a/.a
+/b/c/a//aa/a/.. /b/c/a/aa
+/b/c/a//aa/a/./ /b/c/a/aa/a
+/b/c/a//aa/a//a /b/c/a/aa/a/a
+/b/c/a//aa/a//. /b/c/a/aa/a
+/b/c/a//aa/a/// /b/c/a/aa/a
+/b/c/a//aa/.aaa /b/c/a/aa/.aaa
+/b/c/a//aa/.aa. /b/c/a/aa/.aa.
+/b/c/a//aa/.aa/ /b/c/a/aa/.aa
+/b/c/a//aa/.a.a /b/c/a/aa/.a.a
+/b/c/a//aa/.a.. /b/c/a/aa/.a..
+/b/c/a//aa/.a./ /b/c/a/aa/.a.
+/b/c/a//aa/.a/a /b/c/a/aa/.a/a
+/b/c/a//aa/.a/. /b/c/a/aa/.a
+/b/c/a//aa/.a// /b/c/a/aa/.a
+/b/c/a//aa/..aa /b/c/a/aa/..aa
+/b/c/a//aa/..a. /b/c/a/aa/..a.
+/b/c/a//aa/..a/ /b/c/a/aa/..a
+/b/c/a//aa/...a /b/c/a/aa/...a
+/b/c/a//aa/.... /b/c/a/aa/....
+/b/c/a//aa/.../ /b/c/a/aa/...
+/b/c/a//aa/../a /b/c/a/a
+/b/c/a//aa/../. /b/c/a
+/b/c/a//aa/..// /b/c/a
+/b/c/a//aa/./aa /b/c/a/aa/aa
+/b/c/a//aa/./a. /b/c/a/aa/a.
+/b/c/a//aa/./a/ /b/c/a/aa/a
+/b/c/a//aa/./.a /b/c/a/aa/.a
+/b/c/a//aa/./.. /b/c/a
+/b/c/a//aa/././ /b/c/a/aa
+/b/c/a//aa/.//a /b/c/a/aa/a
+/b/c/a//aa/.//. /b/c/a/aa
+/b/c/a//aa/./// /b/c/a/aa
+/b/c/a//aa//aaa /b/c/a/aa/aaa
+/b/c/a//aa//aa. /b/c/a/aa/aa.
+/b/c/a//aa//aa/ /b/c/a/aa/aa
+/b/c/a//aa//a.a /b/c/a/aa/a.a
+/b/c/a//aa//a.. /b/c/a/aa/a..
+/b/c/a//aa//a./ /b/c/a/aa/a.
+/b/c/a//aa//a/a /b/c/a/aa/a/a
+/b/c/a//aa//a/. /b/c/a/aa/a
+/b/c/a//aa//a// /b/c/a/aa/a
+/b/c/a//aa//.aa /b/c/a/aa/.aa
+/b/c/a//aa//.a. /b/c/a/aa/.a.
+/b/c/a//aa//.a/ /b/c/a/aa/.a
+/b/c/a//aa//..a /b/c/a/aa/..a
+/b/c/a//aa//... /b/c/a/aa/...
+/b/c/a//aa//../ /b/c/a
+/b/c/a//aa//./a /b/c/a/aa/a
+/b/c/a//aa//./. /b/c/a/aa
+/b/c/a//aa//.// /b/c/a/aa
+/b/c/a//aa///aa /b/c/a/aa/aa
+/b/c/a//aa///a. /b/c/a/aa/a.
+/b/c/a//aa///a/ /b/c/a/aa/a
+/b/c/a//aa///.a /b/c/a/aa/.a
+/b/c/a//aa///.. /b/c/a
+/b/c/a//aa///./ /b/c/a/aa
+/b/c/a//aa////a /b/c/a/aa/a
+/b/c/a//aa////. /b/c/a/aa
+/b/c/a//aa///// /b/c/a/aa
+/b/c/a//a.aaaaa /b/c/a/a.aaaaa
+/b/c/a//a.aaaa. /b/c/a/a.aaaa.
+/b/c/a//a.aaaa/ /b/c/a/a.aaaa
+/b/c/a//a.aaa.a /b/c/a/a.aaa.a
+/b/c/a//a.aaa.. /b/c/a/a.aaa..
+/b/c/a//a.aaa./ /b/c/a/a.aaa.
+/b/c/a//a.aaa/a /b/c/a/a.aaa/a
+/b/c/a//a.aaa/. /b/c/a/a.aaa
+/b/c/a//a.aaa// /b/c/a/a.aaa
+/b/c/a//a.aa.aa /b/c/a/a.aa.aa
+/b/c/a//a.aa.a. /b/c/a/a.aa.a.
+/b/c/a//a.aa.a/ /b/c/a/a.aa.a
+/b/c/a//a.aa..a /b/c/a/a.aa..a
+/b/c/a//a.aa... /b/c/a/a.aa...
+/b/c/a//a.aa../ /b/c/a/a.aa..
+/b/c/a//a.aa./a /b/c/a/a.aa./a
+/b/c/a//a.aa./. /b/c/a/a.aa.
+/b/c/a//a.aa.// /b/c/a/a.aa.
+/b/c/a//a.aa/aa /b/c/a/a.aa/aa
+/b/c/a//a.aa/a. /b/c/a/a.aa/a.
+/b/c/a//a.aa/a/ /b/c/a/a.aa/a
+/b/c/a//a.aa/.a /b/c/a/a.aa/.a
+/b/c/a//a.aa/.. /b/c/a
+/b/c/a//a.aa/./ /b/c/a/a.aa
+/b/c/a//a.aa//a /b/c/a/a.aa/a
+/b/c/a//a.aa//. /b/c/a/a.aa
+/b/c/a//a.aa/// /b/c/a/a.aa
+/b/c/a//a.a.aaa /b/c/a/a.a.aaa
+/b/c/a//a.a.aa. /b/c/a/a.a.aa.
+/b/c/a//a.a.aa/ /b/c/a/a.a.aa
+/b/c/a//a.a.a.a /b/c/a/a.a.a.a
+/b/c/a//a.a.a.. /b/c/a/a.a.a..
+/b/c/a//a.a.a./ /b/c/a/a.a.a.
+/b/c/a//a.a.a/a /b/c/a/a.a.a/a
+/b/c/a//a.a.a/. /b/c/a/a.a.a
+/b/c/a//a.a.a// /b/c/a/a.a.a
+/b/c/a//a.a..aa /b/c/a/a.a..aa
+/b/c/a//a.a..a. /b/c/a/a.a..a.
+/b/c/a//a.a..a/ /b/c/a/a.a..a
+/b/c/a//a.a...a /b/c/a/a.a...a
+/b/c/a//a.a.... /b/c/a/a.a....
+/b/c/a//a.a.../ /b/c/a/a.a...
+/b/c/a//a.a../a /b/c/a/a.a../a
+/b/c/a//a.a../. /b/c/a/a.a..
+/b/c/a//a.a..// /b/c/a/a.a..
+/b/c/a//a.a./aa /b/c/a/a.a./aa
+/b/c/a//a.a./a. /b/c/a/a.a./a.
+/b/c/a//a.a./a/ /b/c/a/a.a./a
+/b/c/a//a.a./.a /b/c/a/a.a./.a
+/b/c/a//a.a./.. /b/c/a
+/b/c/a//a.a././ /b/c/a/a.a.
+/b/c/a//a.a.//a /b/c/a/a.a./a
+/b/c/a//a.a.//. /b/c/a/a.a.
+/b/c/a//a.a./// /b/c/a/a.a.
+/b/c/a//a.a/aaa /b/c/a/a.a/aaa
+/b/c/a//a.a/aa. /b/c/a/a.a/aa.
+/b/c/a//a.a/aa/ /b/c/a/a.a/aa
+/b/c/a//a.a/a.a /b/c/a/a.a/a.a
+/b/c/a//a.a/a.. /b/c/a/a.a/a..
+/b/c/a//a.a/a./ /b/c/a/a.a/a.
+/b/c/a//a.a/a/a /b/c/a/a.a/a/a
+/b/c/a//a.a/a/. /b/c/a/a.a/a
+/b/c/a//a.a/a// /b/c/a/a.a/a
+/b/c/a//a.a/.aa /b/c/a/a.a/.aa
+/b/c/a//a.a/.a. /b/c/a/a.a/.a.
+/b/c/a//a.a/.a/ /b/c/a/a.a/.a
+/b/c/a//a.a/..a /b/c/a/a.a/..a
+/b/c/a//a.a/... /b/c/a/a.a/...
+/b/c/a//a.a/../ /b/c/a
+/b/c/a//a.a/./a /b/c/a/a.a/a
+/b/c/a//a.a/./. /b/c/a/a.a
+/b/c/a//a.a/.// /b/c/a/a.a
+/b/c/a//a.a//aa /b/c/a/a.a/aa
+/b/c/a//a.a//a. /b/c/a/a.a/a.
+/b/c/a//a.a//a/ /b/c/a/a.a/a
+/b/c/a//a.a//.a /b/c/a/a.a/.a
+/b/c/a//a.a//.. /b/c/a
+/b/c/a//a.a//./ /b/c/a/a.a
+/b/c/a//a.a///a /b/c/a/a.a/a
+/b/c/a//a.a///. /b/c/a/a.a
+/b/c/a//a.a//// /b/c/a/a.a
+/b/c/a//a..aaaa /b/c/a/a..aaaa
+/b/c/a//a..aaa. /b/c/a/a..aaa.
+/b/c/a//a..aaa/ /b/c/a/a..aaa
+/b/c/a//a..aa.a /b/c/a/a..aa.a
+/b/c/a//a..aa.. /b/c/a/a..aa..
+/b/c/a//a..aa./ /b/c/a/a..aa.
+/b/c/a//a..aa/a /b/c/a/a..aa/a
+/b/c/a//a..aa/. /b/c/a/a..aa
+/b/c/a//a..aa// /b/c/a/a..aa
+/b/c/a//a..a.aa /b/c/a/a..a.aa
+/b/c/a//a..a.a. /b/c/a/a..a.a.
+/b/c/a//a..a.a/ /b/c/a/a..a.a
+/b/c/a//a..a..a /b/c/a/a..a..a
+/b/c/a//a..a... /b/c/a/a..a...
+/b/c/a//a..a../ /b/c/a/a..a..
+/b/c/a//a..a./a /b/c/a/a..a./a
+/b/c/a//a..a./. /b/c/a/a..a.
+/b/c/a//a..a.// /b/c/a/a..a.
+/b/c/a//a..a/aa /b/c/a/a..a/aa
+/b/c/a//a..a/a. /b/c/a/a..a/a.
+/b/c/a//a..a/a/ /b/c/a/a..a/a
+/b/c/a//a..a/.a /b/c/a/a..a/.a
+/b/c/a//a..a/.. /b/c/a
+/b/c/a//a..a/./ /b/c/a/a..a
+/b/c/a//a..a//a /b/c/a/a..a/a
+/b/c/a//a..a//. /b/c/a/a..a
+/b/c/a//a..a/// /b/c/a/a..a
+/b/c/a//a...aaa /b/c/a/a...aaa
+/b/c/a//a...aa. /b/c/a/a...aa.
+/b/c/a//a...aa/ /b/c/a/a...aa
+/b/c/a//a...a.a /b/c/a/a...a.a
+/b/c/a//a...a.. /b/c/a/a...a..
+/b/c/a//a...a./ /b/c/a/a...a.
+/b/c/a//a...a/a /b/c/a/a...a/a
+/b/c/a//a...a/. /b/c/a/a...a
+/b/c/a//a...a// /b/c/a/a...a
+/b/c/a//a....aa /b/c/a/a....aa
+/b/c/a//a....a. /b/c/a/a....a.
+/b/c/a//a....a/ /b/c/a/a....a
+/b/c/a//a.....a /b/c/a/a.....a
+/b/c/a//a...... /b/c/a/a......
+/b/c/a//a...../ /b/c/a/a.....
+/b/c/a//a..../a /b/c/a/a..../a
+/b/c/a//a..../. /b/c/a/a....
+/b/c/a//a....// /b/c/a/a....
+/b/c/a//a.../aa /b/c/a/a.../aa
+/b/c/a//a.../a. /b/c/a/a.../a.
+/b/c/a//a.../a/ /b/c/a/a.../a
+/b/c/a//a.../.a /b/c/a/a.../.a
+/b/c/a//a.../.. /b/c/a
+/b/c/a//a..././ /b/c/a/a...
+/b/c/a//a...//a /b/c/a/a.../a
+/b/c/a//a...//. /b/c/a/a...
+/b/c/a//a.../// /b/c/a/a...
+/b/c/a//a../aaa /b/c/a/a../aaa
+/b/c/a//a../aa. /b/c/a/a../aa.
+/b/c/a//a../aa/ /b/c/a/a../aa
+/b/c/a//a../a.a /b/c/a/a../a.a
+/b/c/a//a../a.. /b/c/a/a../a..
+/b/c/a//a../a./ /b/c/a/a../a.
+/b/c/a//a../a/a /b/c/a/a../a/a
+/b/c/a//a../a/. /b/c/a/a../a
+/b/c/a//a../a// /b/c/a/a../a
+/b/c/a//a../.aa /b/c/a/a../.aa
+/b/c/a//a../.a. /b/c/a/a../.a.
+/b/c/a//a../.a/ /b/c/a/a../.a
+/b/c/a//a../..a /b/c/a/a../..a
+/b/c/a//a../... /b/c/a/a../...
+/b/c/a//a../../ /b/c/a
+/b/c/a//a.././a /b/c/a/a../a
+/b/c/a//a.././. /b/c/a/a..
+/b/c/a//a../.// /b/c/a/a..
+/b/c/a//a..//aa /b/c/a/a../aa
+/b/c/a//a..//a. /b/c/a/a../a.
+/b/c/a//a..//a/ /b/c/a/a../a
+/b/c/a//a..//.a /b/c/a/a../.a
+/b/c/a//a..//.. /b/c/a
+/b/c/a//a..//./ /b/c/a/a..
+/b/c/a//a..///a /b/c/a/a../a
+/b/c/a//a..///. /b/c/a/a..
+/b/c/a//a..//// /b/c/a/a..
+/b/c/a//a./aaaa /b/c/a/a./aaaa
+/b/c/a//a./aaa. /b/c/a/a./aaa.
+/b/c/a//a./aaa/ /b/c/a/a./aaa
+/b/c/a//a./aa.a /b/c/a/a./aa.a
+/b/c/a//a./aa.. /b/c/a/a./aa..
+/b/c/a//a./aa./ /b/c/a/a./aa.
+/b/c/a//a./aa/a /b/c/a/a./aa/a
+/b/c/a//a./aa/. /b/c/a/a./aa
+/b/c/a//a./aa// /b/c/a/a./aa
+/b/c/a//a./a.aa /b/c/a/a./a.aa
+/b/c/a//a./a.a. /b/c/a/a./a.a.
+/b/c/a//a./a.a/ /b/c/a/a./a.a
+/b/c/a//a./a..a /b/c/a/a./a..a
+/b/c/a//a./a... /b/c/a/a./a...
+/b/c/a//a./a../ /b/c/a/a./a..
+/b/c/a//a./a./a /b/c/a/a./a./a
+/b/c/a//a./a./. /b/c/a/a./a.
+/b/c/a//a./a.// /b/c/a/a./a.
+/b/c/a//a./a/aa /b/c/a/a./a/aa
+/b/c/a//a./a/a. /b/c/a/a./a/a.
+/b/c/a//a./a/a/ /b/c/a/a./a/a
+/b/c/a//a./a/.a /b/c/a/a./a/.a
+/b/c/a//a./a/.. /b/c/a/a.
+/b/c/a//a./a/./ /b/c/a/a./a
+/b/c/a//a./a//a /b/c/a/a./a/a
+/b/c/a//a./a//. /b/c/a/a./a
+/b/c/a//a./a/// /b/c/a/a./a
+/b/c/a//a./.aaa /b/c/a/a./.aaa
+/b/c/a//a./.aa. /b/c/a/a./.aa.
+/b/c/a//a./.aa/ /b/c/a/a./.aa
+/b/c/a//a./.a.a /b/c/a/a./.a.a
+/b/c/a//a./.a.. /b/c/a/a./.a..
+/b/c/a//a./.a./ /b/c/a/a./.a.
+/b/c/a//a./.a/a /b/c/a/a./.a/a
+/b/c/a//a./.a/. /b/c/a/a./.a
+/b/c/a//a./.a// /b/c/a/a./.a
+/b/c/a//a./..aa /b/c/a/a./..aa
+/b/c/a//a./..a. /b/c/a/a./..a.
+/b/c/a//a./..a/ /b/c/a/a./..a
+/b/c/a//a./...a /b/c/a/a./...a
+/b/c/a//a./.... /b/c/a/a./....
+/b/c/a//a./.../ /b/c/a/a./...
+/b/c/a//a./../a /b/c/a/a
+/b/c/a//a./../. /b/c/a
+/b/c/a//a./..// /b/c/a
+/b/c/a//a././aa /b/c/a/a./aa
+/b/c/a//a././a. /b/c/a/a./a.
+/b/c/a//a././a/ /b/c/a/a./a
+/b/c/a//a././.a /b/c/a/a./.a
+/b/c/a//a././.. /b/c/a
+/b/c/a//a./././ /b/c/a/a.
+/b/c/a//a././/a /b/c/a/a./a
+/b/c/a//a././/. /b/c/a/a.
+/b/c/a//a././// /b/c/a/a.
+/b/c/a//a.//aaa /b/c/a/a./aaa
+/b/c/a//a.//aa. /b/c/a/a./aa.
+/b/c/a//a.//aa/ /b/c/a/a./aa
+/b/c/a//a.//a.a /b/c/a/a./a.a
+/b/c/a//a.//a.. /b/c/a/a./a..
+/b/c/a//a.//a./ /b/c/a/a./a.
+/b/c/a//a.//a/a /b/c/a/a./a/a
+/b/c/a//a.//a/. /b/c/a/a./a
+/b/c/a//a.//a// /b/c/a/a./a
+/b/c/a//a.//.aa /b/c/a/a./.aa
+/b/c/a//a.//.a. /b/c/a/a./.a.
+/b/c/a//a.//.a/ /b/c/a/a./.a
+/b/c/a//a.//..a /b/c/a/a./..a
+/b/c/a//a.//... /b/c/a/a./...
+/b/c/a//a.//../ /b/c/a
+/b/c/a//a.//./a /b/c/a/a./a
+/b/c/a//a.//./. /b/c/a/a.
+/b/c/a//a.//.// /b/c/a/a.
+/b/c/a//a.///aa /b/c/a/a./aa
+/b/c/a//a.///a. /b/c/a/a./a.
+/b/c/a//a.///a/ /b/c/a/a./a
+/b/c/a//a.///.a /b/c/a/a./.a
+/b/c/a//a.///.. /b/c/a
+/b/c/a//a.///./ /b/c/a/a.
+/b/c/a//a.////a /b/c/a/a./a
+/b/c/a//a.////. /b/c/a/a.
+/b/c/a//a.///// /b/c/a/a.
+/b/c/a//a/aaaaa /b/c/a/a/aaaaa
+/b/c/a//a/aaaa. /b/c/a/a/aaaa.
+/b/c/a//a/aaaa/ /b/c/a/a/aaaa
+/b/c/a//a/aaa.a /b/c/a/a/aaa.a
+/b/c/a//a/aaa.. /b/c/a/a/aaa..
+/b/c/a//a/aaa./ /b/c/a/a/aaa.
+/b/c/a//a/aaa/a /b/c/a/a/aaa/a
+/b/c/a//a/aaa/. /b/c/a/a/aaa
+/b/c/a//a/aaa// /b/c/a/a/aaa
+/b/c/a//a/aa.aa /b/c/a/a/aa.aa
+/b/c/a//a/aa.a. /b/c/a/a/aa.a.
+/b/c/a//a/aa.a/ /b/c/a/a/aa.a
+/b/c/a//a/aa..a /b/c/a/a/aa..a
+/b/c/a//a/aa... /b/c/a/a/aa...
+/b/c/a//a/aa../ /b/c/a/a/aa..
+/b/c/a//a/aa./a /b/c/a/a/aa./a
+/b/c/a//a/aa./. /b/c/a/a/aa.
+/b/c/a//a/aa.// /b/c/a/a/aa.
+/b/c/a//a/aa/aa /b/c/a/a/aa/aa
+/b/c/a//a/aa/a. /b/c/a/a/aa/a.
+/b/c/a//a/aa/a/ /b/c/a/a/aa/a
+/b/c/a//a/aa/.a /b/c/a/a/aa/.a
+/b/c/a//a/aa/.. /b/c/a/a
+/b/c/a//a/aa/./ /b/c/a/a/aa
+/b/c/a//a/aa//a /b/c/a/a/aa/a
+/b/c/a//a/aa//. /b/c/a/a/aa
+/b/c/a//a/aa/// /b/c/a/a/aa
+/b/c/a//a/a.aaa /b/c/a/a/a.aaa
+/b/c/a//a/a.aa. /b/c/a/a/a.aa.
+/b/c/a//a/a.aa/ /b/c/a/a/a.aa
+/b/c/a//a/a.a.a /b/c/a/a/a.a.a
+/b/c/a//a/a.a.. /b/c/a/a/a.a..
+/b/c/a//a/a.a./ /b/c/a/a/a.a.
+/b/c/a//a/a.a/a /b/c/a/a/a.a/a
+/b/c/a//a/a.a/. /b/c/a/a/a.a
+/b/c/a//a/a.a// /b/c/a/a/a.a
+/b/c/a//a/a..aa /b/c/a/a/a..aa
+/b/c/a//a/a..a. /b/c/a/a/a..a.
+/b/c/a//a/a..a/ /b/c/a/a/a..a
+/b/c/a//a/a...a /b/c/a/a/a...a
+/b/c/a//a/a.... /b/c/a/a/a....
+/b/c/a//a/a.../ /b/c/a/a/a...
+/b/c/a//a/a../a /b/c/a/a/a../a
+/b/c/a//a/a../. /b/c/a/a/a..
+/b/c/a//a/a..// /b/c/a/a/a..
+/b/c/a//a/a./aa /b/c/a/a/a./aa
+/b/c/a//a/a./a. /b/c/a/a/a./a.
+/b/c/a//a/a./a/ /b/c/a/a/a./a
+/b/c/a//a/a./.a /b/c/a/a/a./.a
+/b/c/a//a/a./.. /b/c/a/a
+/b/c/a//a/a././ /b/c/a/a/a.
+/b/c/a//a/a.//a /b/c/a/a/a./a
+/b/c/a//a/a.//. /b/c/a/a/a.
+/b/c/a//a/a./// /b/c/a/a/a.
+/b/c/a//a/a/aaa /b/c/a/a/a/aaa
+/b/c/a//a/a/aa. /b/c/a/a/a/aa.
+/b/c/a//a/a/aa/ /b/c/a/a/a/aa
+/b/c/a//a/a/a.a /b/c/a/a/a/a.a
+/b/c/a//a/a/a.. /b/c/a/a/a/a..
+/b/c/a//a/a/a./ /b/c/a/a/a/a.
+/b/c/a//a/a/a/a /b/c/a/a/a/a/a
+/b/c/a//a/a/a/. /b/c/a/a/a/a
+/b/c/a//a/a/a// /b/c/a/a/a/a
+/b/c/a//a/a/.aa /b/c/a/a/a/.aa
+/b/c/a//a/a/.a. /b/c/a/a/a/.a.
+/b/c/a//a/a/.a/ /b/c/a/a/a/.a
+/b/c/a//a/a/..a /b/c/a/a/a/..a
+/b/c/a//a/a/... /b/c/a/a/a/...
+/b/c/a//a/a/../ /b/c/a/a
+/b/c/a//a/a/./a /b/c/a/a/a/a
+/b/c/a//a/a/./. /b/c/a/a/a
+/b/c/a//a/a/.// /b/c/a/a/a
+/b/c/a//a/a//aa /b/c/a/a/a/aa
+/b/c/a//a/a//a. /b/c/a/a/a/a.
+/b/c/a//a/a//a/ /b/c/a/a/a/a
+/b/c/a//a/a//.a /b/c/a/a/a/.a
+/b/c/a//a/a//.. /b/c/a/a
+/b/c/a//a/a//./ /b/c/a/a/a
+/b/c/a//a/a///a /b/c/a/a/a/a
+/b/c/a//a/a///. /b/c/a/a/a
+/b/c/a//a/a//// /b/c/a/a/a
+/b/c/a//a/.aaaa /b/c/a/a/.aaaa
+/b/c/a//a/.aaa. /b/c/a/a/.aaa.
+/b/c/a//a/.aaa/ /b/c/a/a/.aaa
+/b/c/a//a/.aa.a /b/c/a/a/.aa.a
+/b/c/a//a/.aa.. /b/c/a/a/.aa..
+/b/c/a//a/.aa./ /b/c/a/a/.aa.
+/b/c/a//a/.aa/a /b/c/a/a/.aa/a
+/b/c/a//a/.aa/. /b/c/a/a/.aa
+/b/c/a//a/.aa// /b/c/a/a/.aa
+/b/c/a//a/.a.aa /b/c/a/a/.a.aa
+/b/c/a//a/.a.a. /b/c/a/a/.a.a.
+/b/c/a//a/.a.a/ /b/c/a/a/.a.a
+/b/c/a//a/.a..a /b/c/a/a/.a..a
+/b/c/a//a/.a... /b/c/a/a/.a...
+/b/c/a//a/.a../ /b/c/a/a/.a..
+/b/c/a//a/.a./a /b/c/a/a/.a./a
+/b/c/a//a/.a./. /b/c/a/a/.a.
+/b/c/a//a/.a.// /b/c/a/a/.a.
+/b/c/a//a/.a/aa /b/c/a/a/.a/aa
+/b/c/a//a/.a/a. /b/c/a/a/.a/a.
+/b/c/a//a/.a/a/ /b/c/a/a/.a/a
+/b/c/a//a/.a/.a /b/c/a/a/.a/.a
+/b/c/a//a/.a/.. /b/c/a/a
+/b/c/a//a/.a/./ /b/c/a/a/.a
+/b/c/a//a/.a//a /b/c/a/a/.a/a
+/b/c/a//a/.a//. /b/c/a/a/.a
+/b/c/a//a/.a/// /b/c/a/a/.a
+/b/c/a//a/..aaa /b/c/a/a/..aaa
+/b/c/a//a/..aa. /b/c/a/a/..aa.
+/b/c/a//a/..aa/ /b/c/a/a/..aa
+/b/c/a//a/..a.a /b/c/a/a/..a.a
+/b/c/a//a/..a.. /b/c/a/a/..a..
+/b/c/a//a/..a./ /b/c/a/a/..a.
+/b/c/a//a/..a/a /b/c/a/a/..a/a
+/b/c/a//a/..a/. /b/c/a/a/..a
+/b/c/a//a/..a// /b/c/a/a/..a
+/b/c/a//a/...aa /b/c/a/a/...aa
+/b/c/a//a/...a. /b/c/a/a/...a.
+/b/c/a//a/...a/ /b/c/a/a/...a
+/b/c/a//a/....a /b/c/a/a/....a
+/b/c/a//a/..... /b/c/a/a/.....
+/b/c/a//a/..../ /b/c/a/a/....
+/b/c/a//a/.../a /b/c/a/a/.../a
+/b/c/a//a/.../. /b/c/a/a/...
+/b/c/a//a/...// /b/c/a/a/...
+/b/c/a//a/../aa /b/c/a/aa
+/b/c/a//a/../a. /b/c/a/a.
+/b/c/a//a/../a/ /b/c/a/a
+/b/c/a//a/../.a /b/c/a/.a
+/b/c/a//a/../.. /b/c
+/b/c/a//a/.././ /b/c/a
+/b/c/a//a/..//a /b/c/a/a
+/b/c/a//a/..//. /b/c/a
+/b/c/a//a/../// /b/c/a
+/b/c/a//a/./aaa /b/c/a/a/aaa
+/b/c/a//a/./aa. /b/c/a/a/aa.
+/b/c/a//a/./aa/ /b/c/a/a/aa
+/b/c/a//a/./a.a /b/c/a/a/a.a
+/b/c/a//a/./a.. /b/c/a/a/a..
+/b/c/a//a/./a./ /b/c/a/a/a.
+/b/c/a//a/./a/a /b/c/a/a/a/a
+/b/c/a//a/./a/. /b/c/a/a/a
+/b/c/a//a/./a// /b/c/a/a/a
+/b/c/a//a/./.aa /b/c/a/a/.aa
+/b/c/a//a/./.a. /b/c/a/a/.a.
+/b/c/a//a/./.a/ /b/c/a/a/.a
+/b/c/a//a/./..a /b/c/a/a/..a
+/b/c/a//a/./... /b/c/a/a/...
+/b/c/a//a/./../ /b/c/a
+/b/c/a//a/././a /b/c/a/a/a
+/b/c/a//a/././. /b/c/a/a
+/b/c/a//a/./.// /b/c/a/a
+/b/c/a//a/.//aa /b/c/a/a/aa
+/b/c/a//a/.//a. /b/c/a/a/a.
+/b/c/a//a/.//a/ /b/c/a/a/a
+/b/c/a//a/.//.a /b/c/a/a/.a
+/b/c/a//a/.//.. /b/c/a
+/b/c/a//a/.//./ /b/c/a/a
+/b/c/a//a/.///a /b/c/a/a/a
+/b/c/a//a/.///. /b/c/a/a
+/b/c/a//a/.//// /b/c/a/a
+/b/c/a//a//aaaa /b/c/a/a/aaaa
+/b/c/a//a//aaa. /b/c/a/a/aaa.
+/b/c/a//a//aaa/ /b/c/a/a/aaa
+/b/c/a//a//aa.a /b/c/a/a/aa.a
+/b/c/a//a//aa.. /b/c/a/a/aa..
+/b/c/a//a//aa./ /b/c/a/a/aa.
+/b/c/a//a//aa/a /b/c/a/a/aa/a
+/b/c/a//a//aa/. /b/c/a/a/aa
+/b/c/a//a//aa// /b/c/a/a/aa
+/b/c/a//a//a.aa /b/c/a/a/a.aa
+/b/c/a//a//a.a. /b/c/a/a/a.a.
+/b/c/a//a//a.a/ /b/c/a/a/a.a
+/b/c/a//a//a..a /b/c/a/a/a..a
+/b/c/a//a//a... /b/c/a/a/a...
+/b/c/a//a//a../ /b/c/a/a/a..
+/b/c/a//a//a./a /b/c/a/a/a./a
+/b/c/a//a//a./. /b/c/a/a/a.
+/b/c/a//a//a.// /b/c/a/a/a.
+/b/c/a//a//a/aa /b/c/a/a/a/aa
+/b/c/a//a//a/a. /b/c/a/a/a/a.
+/b/c/a//a//a/a/ /b/c/a/a/a/a
+/b/c/a//a//a/.a /b/c/a/a/a/.a
+/b/c/a//a//a/.. /b/c/a/a
+/b/c/a//a//a/./ /b/c/a/a/a
+/b/c/a//a//a//a /b/c/a/a/a/a
+/b/c/a//a//a//. /b/c/a/a/a
+/b/c/a//a//a/// /b/c/a/a/a
+/b/c/a//a//.aaa /b/c/a/a/.aaa
+/b/c/a//a//.aa. /b/c/a/a/.aa.
+/b/c/a//a//.aa/ /b/c/a/a/.aa
+/b/c/a//a//.a.a /b/c/a/a/.a.a
+/b/c/a//a//.a.. /b/c/a/a/.a..
+/b/c/a//a//.a./ /b/c/a/a/.a.
+/b/c/a//a//.a/a /b/c/a/a/.a/a
+/b/c/a//a//.a/. /b/c/a/a/.a
+/b/c/a//a//.a// /b/c/a/a/.a
+/b/c/a//a//..aa /b/c/a/a/..aa
+/b/c/a//a//..a. /b/c/a/a/..a.
+/b/c/a//a//..a/ /b/c/a/a/..a
+/b/c/a//a//...a /b/c/a/a/...a
+/b/c/a//a//.... /b/c/a/a/....
+/b/c/a//a//.../ /b/c/a/a/...
+/b/c/a//a//../a /b/c/a/a
+/b/c/a//a//../. /b/c/a
+/b/c/a//a//..// /b/c/a
+/b/c/a//a//./aa /b/c/a/a/aa
+/b/c/a//a//./a. /b/c/a/a/a.
+/b/c/a//a//./a/ /b/c/a/a/a
+/b/c/a//a//./.a /b/c/a/a/.a
+/b/c/a//a//./.. /b/c/a
+/b/c/a//a//././ /b/c/a/a
+/b/c/a//a//.//a /b/c/a/a/a
+/b/c/a//a//.//. /b/c/a/a
+/b/c/a//a//./// /b/c/a/a
+/b/c/a//a///aaa /b/c/a/a/aaa
+/b/c/a//a///aa. /b/c/a/a/aa.
+/b/c/a//a///aa/ /b/c/a/a/aa
+/b/c/a//a///a.a /b/c/a/a/a.a
+/b/c/a//a///a.. /b/c/a/a/a..
+/b/c/a//a///a./ /b/c/a/a/a.
+/b/c/a//a///a/a /b/c/a/a/a/a
+/b/c/a//a///a/. /b/c/a/a/a
+/b/c/a//a///a// /b/c/a/a/a
+/b/c/a//a///.aa /b/c/a/a/.aa
+/b/c/a//a///.a. /b/c/a/a/.a.
+/b/c/a//a///.a/ /b/c/a/a/.a
+/b/c/a//a///..a /b/c/a/a/..a
+/b/c/a//a///... /b/c/a/a/...
+/b/c/a//a///../ /b/c/a
+/b/c/a//a///./a /b/c/a/a/a
+/b/c/a//a///./. /b/c/a/a
+/b/c/a//a///.// /b/c/a/a
+/b/c/a//a////aa /b/c/a/a/aa
+/b/c/a//a////a. /b/c/a/a/a.
+/b/c/a//a////a/ /b/c/a/a/a
+/b/c/a//a////.a /b/c/a/a/.a
+/b/c/a//a////.. /b/c/a
+/b/c/a//a////./ /b/c/a/a
+/b/c/a//a/////a /b/c/a/a/a
+/b/c/a//a/////. /b/c/a/a
+/b/c/a//a////// /b/c/a/a
+/b/c/a//.aaaaaa /b/c/a/.aaaaaa
+/b/c/a//.aaaaa. /b/c/a/.aaaaa.
+/b/c/a//.aaaaa/ /b/c/a/.aaaaa
+/b/c/a//.aaaa.a /b/c/a/.aaaa.a
+/b/c/a//.aaaa.. /b/c/a/.aaaa..
+/b/c/a//.aaaa./ /b/c/a/.aaaa.
+/b/c/a//.aaaa/a /b/c/a/.aaaa/a
+/b/c/a//.aaaa/. /b/c/a/.aaaa
+/b/c/a//.aaaa// /b/c/a/.aaaa
+/b/c/a//.aaa.aa /b/c/a/.aaa.aa
+/b/c/a//.aaa.a. /b/c/a/.aaa.a.
+/b/c/a//.aaa.a/ /b/c/a/.aaa.a
+/b/c/a//.aaa..a /b/c/a/.aaa..a
+/b/c/a//.aaa... /b/c/a/.aaa...
+/b/c/a//.aaa../ /b/c/a/.aaa..
+/b/c/a//.aaa./a /b/c/a/.aaa./a
+/b/c/a//.aaa./. /b/c/a/.aaa.
+/b/c/a//.aaa.// /b/c/a/.aaa.
+/b/c/a//.aaa/aa /b/c/a/.aaa/aa
+/b/c/a//.aaa/a. /b/c/a/.aaa/a.
+/b/c/a//.aaa/a/ /b/c/a/.aaa/a
+/b/c/a//.aaa/.a /b/c/a/.aaa/.a
+/b/c/a//.aaa/.. /b/c/a
+/b/c/a//.aaa/./ /b/c/a/.aaa
+/b/c/a//.aaa//a /b/c/a/.aaa/a
+/b/c/a//.aaa//. /b/c/a/.aaa
+/b/c/a//.aaa/// /b/c/a/.aaa
+/b/c/a//.aa.aaa /b/c/a/.aa.aaa
+/b/c/a//.aa.aa. /b/c/a/.aa.aa.
+/b/c/a//.aa.aa/ /b/c/a/.aa.aa
+/b/c/a//.aa.a.a /b/c/a/.aa.a.a
+/b/c/a//.aa.a.. /b/c/a/.aa.a..
+/b/c/a//.aa.a./ /b/c/a/.aa.a.
+/b/c/a//.aa.a/a /b/c/a/.aa.a/a
+/b/c/a//.aa.a/. /b/c/a/.aa.a
+/b/c/a//.aa.a// /b/c/a/.aa.a
+/b/c/a//.aa..aa /b/c/a/.aa..aa
+/b/c/a//.aa..a. /b/c/a/.aa..a.
+/b/c/a//.aa..a/ /b/c/a/.aa..a
+/b/c/a//.aa...a /b/c/a/.aa...a
+/b/c/a//.aa.... /b/c/a/.aa....
+/b/c/a//.aa.../ /b/c/a/.aa...
+/b/c/a//.aa../a /b/c/a/.aa../a
+/b/c/a//.aa../. /b/c/a/.aa..
+/b/c/a//.aa..// /b/c/a/.aa..
+/b/c/a//.aa./aa /b/c/a/.aa./aa
+/b/c/a//.aa./a. /b/c/a/.aa./a.
+/b/c/a//.aa./a/ /b/c/a/.aa./a
+/b/c/a//.aa./.a /b/c/a/.aa./.a
+/b/c/a//.aa./.. /b/c/a
+/b/c/a//.aa././ /b/c/a/.aa.
+/b/c/a//.aa.//a /b/c/a/.aa./a
+/b/c/a//.aa.//. /b/c/a/.aa.
+/b/c/a//.aa./// /b/c/a/.aa.
+/b/c/a//.aa/aaa /b/c/a/.aa/aaa
+/b/c/a//.aa/aa. /b/c/a/.aa/aa.
+/b/c/a//.aa/aa/ /b/c/a/.aa/aa
+/b/c/a//.aa/a.a /b/c/a/.aa/a.a
+/b/c/a//.aa/a.. /b/c/a/.aa/a..
+/b/c/a//.aa/a./ /b/c/a/.aa/a.
+/b/c/a//.aa/a/a /b/c/a/.aa/a/a
+/b/c/a//.aa/a/. /b/c/a/.aa/a
+/b/c/a//.aa/a// /b/c/a/.aa/a
+/b/c/a//.aa/.aa /b/c/a/.aa/.aa
+/b/c/a//.aa/.a. /b/c/a/.aa/.a.
+/b/c/a//.aa/.a/ /b/c/a/.aa/.a
+/b/c/a//.aa/..a /b/c/a/.aa/..a
+/b/c/a//.aa/... /b/c/a/.aa/...
+/b/c/a//.aa/../ /b/c/a
+/b/c/a//.aa/./a /b/c/a/.aa/a
+/b/c/a//.aa/./. /b/c/a/.aa
+/b/c/a//.aa/.// /b/c/a/.aa
+/b/c/a//.aa//aa /b/c/a/.aa/aa
+/b/c/a//.aa//a. /b/c/a/.aa/a.
+/b/c/a//.aa//a/ /b/c/a/.aa/a
+/b/c/a//.aa//.a /b/c/a/.aa/.a
+/b/c/a//.aa//.. /b/c/a
+/b/c/a//.aa//./ /b/c/a/.aa
+/b/c/a//.aa///a /b/c/a/.aa/a
+/b/c/a//.aa///. /b/c/a/.aa
+/b/c/a//.aa//// /b/c/a/.aa
+/b/c/a//.a.aaaa /b/c/a/.a.aaaa
+/b/c/a//.a.aaa. /b/c/a/.a.aaa.
+/b/c/a//.a.aaa/ /b/c/a/.a.aaa
+/b/c/a//.a.aa.a /b/c/a/.a.aa.a
+/b/c/a//.a.aa.. /b/c/a/.a.aa..
+/b/c/a//.a.aa./ /b/c/a/.a.aa.
+/b/c/a//.a.aa/a /b/c/a/.a.aa/a
+/b/c/a//.a.aa/. /b/c/a/.a.aa
+/b/c/a//.a.aa// /b/c/a/.a.aa
+/b/c/a//.a.a.aa /b/c/a/.a.a.aa
+/b/c/a//.a.a.a. /b/c/a/.a.a.a.
+/b/c/a//.a.a.a/ /b/c/a/.a.a.a
+/b/c/a//.a.a..a /b/c/a/.a.a..a
+/b/c/a//.a.a... /b/c/a/.a.a...
+/b/c/a//.a.a../ /b/c/a/.a.a..
+/b/c/a//.a.a./a /b/c/a/.a.a./a
+/b/c/a//.a.a./. /b/c/a/.a.a.
+/b/c/a//.a.a.// /b/c/a/.a.a.
+/b/c/a//.a.a/aa /b/c/a/.a.a/aa
+/b/c/a//.a.a/a. /b/c/a/.a.a/a.
+/b/c/a//.a.a/a/ /b/c/a/.a.a/a
+/b/c/a//.a.a/.a /b/c/a/.a.a/.a
+/b/c/a//.a.a/.. /b/c/a
+/b/c/a//.a.a/./ /b/c/a/.a.a
+/b/c/a//.a.a//a /b/c/a/.a.a/a
+/b/c/a//.a.a//. /b/c/a/.a.a
+/b/c/a//.a.a/// /b/c/a/.a.a
+/b/c/a//.a..aaa /b/c/a/.a..aaa
+/b/c/a//.a..aa. /b/c/a/.a..aa.
+/b/c/a//.a..aa/ /b/c/a/.a..aa
+/b/c/a//.a..a.a /b/c/a/.a..a.a
+/b/c/a//.a..a.. /b/c/a/.a..a..
+/b/c/a//.a..a./ /b/c/a/.a..a.
+/b/c/a//.a..a/a /b/c/a/.a..a/a
+/b/c/a//.a..a/. /b/c/a/.a..a
+/b/c/a//.a..a// /b/c/a/.a..a
+/b/c/a//.a...aa /b/c/a/.a...aa
+/b/c/a//.a...a. /b/c/a/.a...a.
+/b/c/a//.a...a/ /b/c/a/.a...a
+/b/c/a//.a....a /b/c/a/.a....a
+/b/c/a//.a..... /b/c/a/.a.....
+/b/c/a//.a..../ /b/c/a/.a....
+/b/c/a//.a.../a /b/c/a/.a.../a
+/b/c/a//.a.../. /b/c/a/.a...
+/b/c/a//.a...// /b/c/a/.a...
+/b/c/a//.a../aa /b/c/a/.a../aa
+/b/c/a//.a../a. /b/c/a/.a../a.
+/b/c/a//.a../a/ /b/c/a/.a../a
+/b/c/a//.a../.a /b/c/a/.a../.a
+/b/c/a//.a../.. /b/c/a
+/b/c/a//.a.././ /b/c/a/.a..
+/b/c/a//.a..//a /b/c/a/.a../a
+/b/c/a//.a..//. /b/c/a/.a..
+/b/c/a//.a../// /b/c/a/.a..
+/b/c/a//.a./aaa /b/c/a/.a./aaa
+/b/c/a//.a./aa. /b/c/a/.a./aa.
+/b/c/a//.a./aa/ /b/c/a/.a./aa
+/b/c/a//.a./a.a /b/c/a/.a./a.a
+/b/c/a//.a./a.. /b/c/a/.a./a..
+/b/c/a//.a./a./ /b/c/a/.a./a.
+/b/c/a//.a./a/a /b/c/a/.a./a/a
+/b/c/a//.a./a/. /b/c/a/.a./a
+/b/c/a//.a./a// /b/c/a/.a./a
+/b/c/a//.a./.aa /b/c/a/.a./.aa
+/b/c/a//.a./.a. /b/c/a/.a./.a.
+/b/c/a//.a./.a/ /b/c/a/.a./.a
+/b/c/a//.a./..a /b/c/a/.a./..a
+/b/c/a//.a./... /b/c/a/.a./...
+/b/c/a//.a./../ /b/c/a
+/b/c/a//.a././a /b/c/a/.a./a
+/b/c/a//.a././. /b/c/a/.a.
+/b/c/a//.a./.// /b/c/a/.a.
+/b/c/a//.a.//aa /b/c/a/.a./aa
+/b/c/a//.a.//a. /b/c/a/.a./a.
+/b/c/a//.a.//a/ /b/c/a/.a./a
+/b/c/a//.a.//.a /b/c/a/.a./.a
+/b/c/a//.a.//.. /b/c/a
+/b/c/a//.a.//./ /b/c/a/.a.
+/b/c/a//.a.///a /b/c/a/.a./a
+/b/c/a//.a.///. /b/c/a/.a.
+/b/c/a//.a.//// /b/c/a/.a.
+/b/c/a//.a/aaaa /b/c/a/.a/aaaa
+/b/c/a//.a/aaa. /b/c/a/.a/aaa.
+/b/c/a//.a/aaa/ /b/c/a/.a/aaa
+/b/c/a//.a/aa.a /b/c/a/.a/aa.a
+/b/c/a//.a/aa.. /b/c/a/.a/aa..
+/b/c/a//.a/aa./ /b/c/a/.a/aa.
+/b/c/a//.a/aa/a /b/c/a/.a/aa/a
+/b/c/a//.a/aa/. /b/c/a/.a/aa
+/b/c/a//.a/aa// /b/c/a/.a/aa
+/b/c/a//.a/a.aa /b/c/a/.a/a.aa
+/b/c/a//.a/a.a. /b/c/a/.a/a.a.
+/b/c/a//.a/a.a/ /b/c/a/.a/a.a
+/b/c/a//.a/a..a /b/c/a/.a/a..a
+/b/c/a//.a/a... /b/c/a/.a/a...
+/b/c/a//.a/a../ /b/c/a/.a/a..
+/b/c/a//.a/a./a /b/c/a/.a/a./a
+/b/c/a//.a/a./. /b/c/a/.a/a.
+/b/c/a//.a/a.// /b/c/a/.a/a.
+/b/c/a//.a/a/aa /b/c/a/.a/a/aa
+/b/c/a//.a/a/a. /b/c/a/.a/a/a.
+/b/c/a//.a/a/a/ /b/c/a/.a/a/a
+/b/c/a//.a/a/.a /b/c/a/.a/a/.a
+/b/c/a//.a/a/.. /b/c/a/.a
+/b/c/a//.a/a/./ /b/c/a/.a/a
+/b/c/a//.a/a//a /b/c/a/.a/a/a
+/b/c/a//.a/a//. /b/c/a/.a/a
+/b/c/a//.a/a/// /b/c/a/.a/a
+/b/c/a//.a/.aaa /b/c/a/.a/.aaa
+/b/c/a//.a/.aa. /b/c/a/.a/.aa.
+/b/c/a//.a/.aa/ /b/c/a/.a/.aa
+/b/c/a//.a/.a.a /b/c/a/.a/.a.a
+/b/c/a//.a/.a.. /b/c/a/.a/.a..
+/b/c/a//.a/.a./ /b/c/a/.a/.a.
+/b/c/a//.a/.a/a /b/c/a/.a/.a/a
+/b/c/a//.a/.a/. /b/c/a/.a/.a
+/b/c/a//.a/.a// /b/c/a/.a/.a
+/b/c/a//.a/..aa /b/c/a/.a/..aa
+/b/c/a//.a/..a. /b/c/a/.a/..a.
+/b/c/a//.a/..a/ /b/c/a/.a/..a
+/b/c/a//.a/...a /b/c/a/.a/...a
+/b/c/a//.a/.... /b/c/a/.a/....
+/b/c/a//.a/.../ /b/c/a/.a/...
+/b/c/a//.a/../a /b/c/a/a
+/b/c/a//.a/../. /b/c/a
+/b/c/a//.a/..// /b/c/a
+/b/c/a//.a/./aa /b/c/a/.a/aa
+/b/c/a//.a/./a. /b/c/a/.a/a.
+/b/c/a//.a/./a/ /b/c/a/.a/a
+/b/c/a//.a/./.a /b/c/a/.a/.a
+/b/c/a//.a/./.. /b/c/a
+/b/c/a//.a/././ /b/c/a/.a
+/b/c/a//.a/.//a /b/c/a/.a/a
+/b/c/a//.a/.//. /b/c/a/.a
+/b/c/a//.a/./// /b/c/a/.a
+/b/c/a//.a//aaa /b/c/a/.a/aaa
+/b/c/a//.a//aa. /b/c/a/.a/aa.
+/b/c/a//.a//aa/ /b/c/a/.a/aa
+/b/c/a//.a//a.a /b/c/a/.a/a.a
+/b/c/a//.a//a.. /b/c/a/.a/a..
+/b/c/a//.a//a./ /b/c/a/.a/a.
+/b/c/a//.a//a/a /b/c/a/.a/a/a
+/b/c/a//.a//a/. /b/c/a/.a/a
+/b/c/a//.a//a// /b/c/a/.a/a
+/b/c/a//.a//.aa /b/c/a/.a/.aa
+/b/c/a//.a//.a. /b/c/a/.a/.a.
+/b/c/a//.a//.a/ /b/c/a/.a/.a
+/b/c/a//.a//..a /b/c/a/.a/..a
+/b/c/a//.a//... /b/c/a/.a/...
+/b/c/a//.a//../ /b/c/a
+/b/c/a//.a//./a /b/c/a/.a/a
+/b/c/a//.a//./. /b/c/a/.a
+/b/c/a//.a//.// /b/c/a/.a
+/b/c/a//.a///aa /b/c/a/.a/aa
+/b/c/a//.a///a. /b/c/a/.a/a.
+/b/c/a//.a///a/ /b/c/a/.a/a
+/b/c/a//.a///.a /b/c/a/.a/.a
+/b/c/a//.a///.. /b/c/a
+/b/c/a//.a///./ /b/c/a/.a
+/b/c/a//.a////a /b/c/a/.a/a
+/b/c/a//.a////. /b/c/a/.a
+/b/c/a//.a///// /b/c/a/.a
+/b/c/a//..aaaaa /b/c/a/..aaaaa
+/b/c/a//..aaaa. /b/c/a/..aaaa.
+/b/c/a//..aaaa/ /b/c/a/..aaaa
+/b/c/a//..aaa.a /b/c/a/..aaa.a
+/b/c/a//..aaa.. /b/c/a/..aaa..
+/b/c/a//..aaa./ /b/c/a/..aaa.
+/b/c/a//..aaa/a /b/c/a/..aaa/a
+/b/c/a//..aaa/. /b/c/a/..aaa
+/b/c/a//..aaa// /b/c/a/..aaa
+/b/c/a//..aa.aa /b/c/a/..aa.aa
+/b/c/a//..aa.a. /b/c/a/..aa.a.
+/b/c/a//..aa.a/ /b/c/a/..aa.a
+/b/c/a//..aa..a /b/c/a/..aa..a
+/b/c/a//..aa... /b/c/a/..aa...
+/b/c/a//..aa../ /b/c/a/..aa..
+/b/c/a//..aa./a /b/c/a/..aa./a
+/b/c/a//..aa./. /b/c/a/..aa.
+/b/c/a//..aa.// /b/c/a/..aa.
+/b/c/a//..aa/aa /b/c/a/..aa/aa
+/b/c/a//..aa/a. /b/c/a/..aa/a.
+/b/c/a//..aa/a/ /b/c/a/..aa/a
+/b/c/a//..aa/.a /b/c/a/..aa/.a
+/b/c/a//..aa/.. /b/c/a
+/b/c/a//..aa/./ /b/c/a/..aa
+/b/c/a//..aa//a /b/c/a/..aa/a
+/b/c/a//..aa//. /b/c/a/..aa
+/b/c/a//..aa/// /b/c/a/..aa
+/b/c/a//..a.aaa /b/c/a/..a.aaa
+/b/c/a//..a.aa. /b/c/a/..a.aa.
+/b/c/a//..a.aa/ /b/c/a/..a.aa
+/b/c/a//..a.a.a /b/c/a/..a.a.a
+/b/c/a//..a.a.. /b/c/a/..a.a..
+/b/c/a//..a.a./ /b/c/a/..a.a.
+/b/c/a//..a.a/a /b/c/a/..a.a/a
+/b/c/a//..a.a/. /b/c/a/..a.a
+/b/c/a//..a.a// /b/c/a/..a.a
+/b/c/a//..a..aa /b/c/a/..a..aa
+/b/c/a//..a..a. /b/c/a/..a..a.
+/b/c/a//..a..a/ /b/c/a/..a..a
+/b/c/a//..a...a /b/c/a/..a...a
+/b/c/a//..a.... /b/c/a/..a....
+/b/c/a//..a.../ /b/c/a/..a...
+/b/c/a//..a../a /b/c/a/..a../a
+/b/c/a//..a../. /b/c/a/..a..
+/b/c/a//..a..// /b/c/a/..a..
+/b/c/a//..a./aa /b/c/a/..a./aa
+/b/c/a//..a./a. /b/c/a/..a./a.
+/b/c/a//..a./a/ /b/c/a/..a./a
+/b/c/a//..a./.a /b/c/a/..a./.a
+/b/c/a//..a./.. /b/c/a
+/b/c/a//..a././ /b/c/a/..a.
+/b/c/a//..a.//a /b/c/a/..a./a
+/b/c/a//..a.//. /b/c/a/..a.
+/b/c/a//..a./// /b/c/a/..a.
+/b/c/a//..a/aaa /b/c/a/..a/aaa
+/b/c/a//..a/aa. /b/c/a/..a/aa.
+/b/c/a//..a/aa/ /b/c/a/..a/aa
+/b/c/a//..a/a.a /b/c/a/..a/a.a
+/b/c/a//..a/a.. /b/c/a/..a/a..
+/b/c/a//..a/a./ /b/c/a/..a/a.
+/b/c/a//..a/a/a /b/c/a/..a/a/a
+/b/c/a//..a/a/. /b/c/a/..a/a
+/b/c/a//..a/a// /b/c/a/..a/a
+/b/c/a//..a/.aa /b/c/a/..a/.aa
+/b/c/a//..a/.a. /b/c/a/..a/.a.
+/b/c/a//..a/.a/ /b/c/a/..a/.a
+/b/c/a//..a/..a /b/c/a/..a/..a
+/b/c/a//..a/... /b/c/a/..a/...
+/b/c/a//..a/../ /b/c/a
+/b/c/a//..a/./a /b/c/a/..a/a
+/b/c/a//..a/./. /b/c/a/..a
+/b/c/a//..a/.// /b/c/a/..a
+/b/c/a//..a//aa /b/c/a/..a/aa
+/b/c/a//..a//a. /b/c/a/..a/a.
+/b/c/a//..a//a/ /b/c/a/..a/a
+/b/c/a//..a//.a /b/c/a/..a/.a
+/b/c/a//..a//.. /b/c/a
+/b/c/a//..a//./ /b/c/a/..a
+/b/c/a//..a///a /b/c/a/..a/a
+/b/c/a//..a///. /b/c/a/..a
+/b/c/a//..a//// /b/c/a/..a
+/b/c/a//...aaaa /b/c/a/...aaaa
+/b/c/a//...aaa. /b/c/a/...aaa.
+/b/c/a//...aaa/ /b/c/a/...aaa
+/b/c/a//...aa.a /b/c/a/...aa.a
+/b/c/a//...aa.. /b/c/a/...aa..
+/b/c/a//...aa./ /b/c/a/...aa.
+/b/c/a//...aa/a /b/c/a/...aa/a
+/b/c/a//...aa/. /b/c/a/...aa
+/b/c/a//...aa// /b/c/a/...aa
+/b/c/a//...a.aa /b/c/a/...a.aa
+/b/c/a//...a.a. /b/c/a/...a.a.
+/b/c/a//...a.a/ /b/c/a/...a.a
+/b/c/a//...a..a /b/c/a/...a..a
+/b/c/a//...a... /b/c/a/...a...
+/b/c/a//...a../ /b/c/a/...a..
+/b/c/a//...a./a /b/c/a/...a./a
+/b/c/a//...a./. /b/c/a/...a.
+/b/c/a//...a.// /b/c/a/...a.
+/b/c/a//...a/aa /b/c/a/...a/aa
+/b/c/a//...a/a. /b/c/a/...a/a.
+/b/c/a//...a/a/ /b/c/a/...a/a
+/b/c/a//...a/.a /b/c/a/...a/.a
+/b/c/a//...a/.. /b/c/a
+/b/c/a//...a/./ /b/c/a/...a
+/b/c/a//...a//a /b/c/a/...a/a
+/b/c/a//...a//. /b/c/a/...a
+/b/c/a//...a/// /b/c/a/...a
+/b/c/a//....aaa /b/c/a/....aaa
+/b/c/a//....aa. /b/c/a/....aa.
+/b/c/a//....aa/ /b/c/a/....aa
+/b/c/a//....a.a /b/c/a/....a.a
+/b/c/a//....a.. /b/c/a/....a..
+/b/c/a//....a./ /b/c/a/....a.
+/b/c/a//....a/a /b/c/a/....a/a
+/b/c/a//....a/. /b/c/a/....a
+/b/c/a//....a// /b/c/a/....a
+/b/c/a//.....aa /b/c/a/.....aa
+/b/c/a//.....a. /b/c/a/.....a.
+/b/c/a//.....a/ /b/c/a/.....a
+/b/c/a//......a /b/c/a/......a
+/b/c/a//....... /b/c/a/.......
+/b/c/a//....../ /b/c/a/......
+/b/c/a//...../a /b/c/a/...../a
+/b/c/a//...../. /b/c/a/.....
+/b/c/a//.....// /b/c/a/.....
+/b/c/a//..../aa /b/c/a/..../aa
+/b/c/a//..../a. /b/c/a/..../a.
+/b/c/a//..../a/ /b/c/a/..../a
+/b/c/a//..../.a /b/c/a/..../.a
+/b/c/a//..../.. /b/c/a
+/b/c/a//...././ /b/c/a/....
+/b/c/a//....//a /b/c/a/..../a
+/b/c/a//....//. /b/c/a/....
+/b/c/a//..../// /b/c/a/....
+/b/c/a//.../aaa /b/c/a/.../aaa
+/b/c/a//.../aa. /b/c/a/.../aa.
+/b/c/a//.../aa/ /b/c/a/.../aa
+/b/c/a//.../a.a /b/c/a/.../a.a
+/b/c/a//.../a.. /b/c/a/.../a..
+/b/c/a//.../a./ /b/c/a/.../a.
+/b/c/a//.../a/a /b/c/a/.../a/a
+/b/c/a//.../a/. /b/c/a/.../a
+/b/c/a//.../a// /b/c/a/.../a
+/b/c/a//.../.aa /b/c/a/.../.aa
+/b/c/a//.../.a. /b/c/a/.../.a.
+/b/c/a//.../.a/ /b/c/a/.../.a
+/b/c/a//.../..a /b/c/a/.../..a
+/b/c/a//.../... /b/c/a/.../...
+/b/c/a//.../../ /b/c/a
+/b/c/a//..././a /b/c/a/.../a
+/b/c/a//..././. /b/c/a/...
+/b/c/a//.../.// /b/c/a/...
+/b/c/a//...//aa /b/c/a/.../aa
+/b/c/a//...//a. /b/c/a/.../a.
+/b/c/a//...//a/ /b/c/a/.../a
+/b/c/a//...//.a /b/c/a/.../.a
+/b/c/a//...//.. /b/c/a
+/b/c/a//...//./ /b/c/a/...
+/b/c/a//...///a /b/c/a/.../a
+/b/c/a//...///. /b/c/a/...
+/b/c/a//...//// /b/c/a/...
+/b/c/a//../aaaa /b/c/aaaa
+/b/c/a//../aaa. /b/c/aaa.
+/b/c/a//../aaa/ /b/c/aaa
+/b/c/a//../aa.a /b/c/aa.a
+/b/c/a//../aa.. /b/c/aa..
+/b/c/a//../aa./ /b/c/aa.
+/b/c/a//../aa/a /b/c/aa/a
+/b/c/a//../aa/. /b/c/aa
+/b/c/a//../aa// /b/c/aa
+/b/c/a//../a.aa /b/c/a.aa
+/b/c/a//../a.a. /b/c/a.a.
+/b/c/a//../a.a/ /b/c/a.a
+/b/c/a//../a..a /b/c/a..a
+/b/c/a//../a... /b/c/a...
+/b/c/a//../a../ /b/c/a..
+/b/c/a//../a./a /b/c/a./a
+/b/c/a//../a./. /b/c/a.
+/b/c/a//../a.// /b/c/a.
+/b/c/a//../a/aa /b/c/a/aa
+/b/c/a//../a/a. /b/c/a/a.
+/b/c/a//../a/a/ /b/c/a/a
+/b/c/a//../a/.a /b/c/a/.a
+/b/c/a//../a/.. /b/c
+/b/c/a//../a/./ /b/c/a
+/b/c/a//../a//a /b/c/a/a
+/b/c/a//../a//. /b/c/a
+/b/c/a//../a/// /b/c/a
+/b/c/a//../.aaa /b/c/.aaa
+/b/c/a//../.aa. /b/c/.aa.
+/b/c/a//../.aa/ /b/c/.aa
+/b/c/a//../.a.a /b/c/.a.a
+/b/c/a//../.a.. /b/c/.a..
+/b/c/a//../.a./ /b/c/.a.
+/b/c/a//../.a/a /b/c/.a/a
+/b/c/a//../.a/. /b/c/.a
+/b/c/a//../.a// /b/c/.a
+/b/c/a//../..aa /b/c/..aa
+/b/c/a//../..a. /b/c/..a.
+/b/c/a//../..a/ /b/c/..a
+/b/c/a//../...a /b/c/...a
+/b/c/a//../.... /b/c/....
+/b/c/a//../.../ /b/c/...
+/b/c/a//../../a /b/a
+/b/c/a//../../. /b
+/b/c/a//../..// /b
+/b/c/a//.././aa /b/c/aa
+/b/c/a//.././a. /b/c/a.
+/b/c/a//.././a/ /b/c/a
+/b/c/a//.././.a /b/c/.a
+/b/c/a//.././.. /b
+/b/c/a//../././ /b/c
+/b/c/a//.././/a /b/c/a
+/b/c/a//.././/. /b/c
+/b/c/a//.././// /b/c
+/b/c/a//..//aaa /b/c/aaa
+/b/c/a//..//aa. /b/c/aa.
+/b/c/a//..//aa/ /b/c/aa
+/b/c/a//..//a.a /b/c/a.a
+/b/c/a//..//a.. /b/c/a..
+/b/c/a//..//a./ /b/c/a.
+/b/c/a//..//a/a /b/c/a/a
+/b/c/a//..//a/. /b/c/a
+/b/c/a//..//a// /b/c/a
+/b/c/a//..//.aa /b/c/.aa
+/b/c/a//..//.a. /b/c/.a.
+/b/c/a//..//.a/ /b/c/.a
+/b/c/a//..//..a /b/c/..a
+/b/c/a//..//... /b/c/...
+/b/c/a//..//../ /b
+/b/c/a//..//./a /b/c/a
+/b/c/a//..//./. /b/c
+/b/c/a//..//.// /b/c
+/b/c/a//..///aa /b/c/aa
+/b/c/a//..///a. /b/c/a.
+/b/c/a//..///a/ /b/c/a
+/b/c/a//..///.a /b/c/.a
+/b/c/a//..///.. /b
+/b/c/a//..///./ /b/c
+/b/c/a//..////a /b/c/a
+/b/c/a//..////. /b/c
+/b/c/a//..///// /b/c
+/b/c/a//./aaaaa /b/c/a/aaaaa
+/b/c/a//./aaaa. /b/c/a/aaaa.
+/b/c/a//./aaaa/ /b/c/a/aaaa
+/b/c/a//./aaa.a /b/c/a/aaa.a
+/b/c/a//./aaa.. /b/c/a/aaa..
+/b/c/a//./aaa./ /b/c/a/aaa.
+/b/c/a//./aaa/a /b/c/a/aaa/a
+/b/c/a//./aaa/. /b/c/a/aaa
+/b/c/a//./aaa// /b/c/a/aaa
+/b/c/a//./aa.aa /b/c/a/aa.aa
+/b/c/a//./aa.a. /b/c/a/aa.a.
+/b/c/a//./aa.a/ /b/c/a/aa.a
+/b/c/a//./aa..a /b/c/a/aa..a
+/b/c/a//./aa... /b/c/a/aa...
+/b/c/a//./aa../ /b/c/a/aa..
+/b/c/a//./aa./a /b/c/a/aa./a
+/b/c/a//./aa./. /b/c/a/aa.
+/b/c/a//./aa.// /b/c/a/aa.
+/b/c/a//./aa/aa /b/c/a/aa/aa
+/b/c/a//./aa/a. /b/c/a/aa/a.
+/b/c/a//./aa/a/ /b/c/a/aa/a
+/b/c/a//./aa/.a /b/c/a/aa/.a
+/b/c/a//./aa/.. /b/c/a
+/b/c/a//./aa/./ /b/c/a/aa
+/b/c/a//./aa//a /b/c/a/aa/a
+/b/c/a//./aa//. /b/c/a/aa
+/b/c/a//./aa/// /b/c/a/aa
+/b/c/a//./a.aaa /b/c/a/a.aaa
+/b/c/a//./a.aa. /b/c/a/a.aa.
+/b/c/a//./a.aa/ /b/c/a/a.aa
+/b/c/a//./a.a.a /b/c/a/a.a.a
+/b/c/a//./a.a.. /b/c/a/a.a..
+/b/c/a//./a.a./ /b/c/a/a.a.
+/b/c/a//./a.a/a /b/c/a/a.a/a
+/b/c/a//./a.a/. /b/c/a/a.a
+/b/c/a//./a.a// /b/c/a/a.a
+/b/c/a//./a..aa /b/c/a/a..aa
+/b/c/a//./a..a. /b/c/a/a..a.
+/b/c/a//./a..a/ /b/c/a/a..a
+/b/c/a//./a...a /b/c/a/a...a
+/b/c/a//./a.... /b/c/a/a....
+/b/c/a//./a.../ /b/c/a/a...
+/b/c/a//./a../a /b/c/a/a../a
+/b/c/a//./a../. /b/c/a/a..
+/b/c/a//./a..// /b/c/a/a..
+/b/c/a//./a./aa /b/c/a/a./aa
+/b/c/a//./a./a. /b/c/a/a./a.
+/b/c/a//./a./a/ /b/c/a/a./a
+/b/c/a//./a./.a /b/c/a/a./.a
+/b/c/a//./a./.. /b/c/a
+/b/c/a//./a././ /b/c/a/a.
+/b/c/a//./a.//a /b/c/a/a./a
+/b/c/a//./a.//. /b/c/a/a.
+/b/c/a//./a./// /b/c/a/a.
+/b/c/a//./a/aaa /b/c/a/a/aaa
+/b/c/a//./a/aa. /b/c/a/a/aa.
+/b/c/a//./a/aa/ /b/c/a/a/aa
+/b/c/a//./a/a.a /b/c/a/a/a.a
+/b/c/a//./a/a.. /b/c/a/a/a..
+/b/c/a//./a/a./ /b/c/a/a/a.
+/b/c/a//./a/a/a /b/c/a/a/a/a
+/b/c/a//./a/a/. /b/c/a/a/a
+/b/c/a//./a/a// /b/c/a/a/a
+/b/c/a//./a/.aa /b/c/a/a/.aa
+/b/c/a//./a/.a. /b/c/a/a/.a.
+/b/c/a//./a/.a/ /b/c/a/a/.a
+/b/c/a//./a/..a /b/c/a/a/..a
+/b/c/a//./a/... /b/c/a/a/...
+/b/c/a//./a/../ /b/c/a
+/b/c/a//./a/./a /b/c/a/a/a
+/b/c/a//./a/./. /b/c/a/a
+/b/c/a//./a/.// /b/c/a/a
+/b/c/a//./a//aa /b/c/a/a/aa
+/b/c/a//./a//a. /b/c/a/a/a.
+/b/c/a//./a//a/ /b/c/a/a/a
+/b/c/a//./a//.a /b/c/a/a/.a
+/b/c/a//./a//.. /b/c/a
+/b/c/a//./a//./ /b/c/a/a
+/b/c/a//./a///a /b/c/a/a/a
+/b/c/a//./a///. /b/c/a/a
+/b/c/a//./a//// /b/c/a/a
+/b/c/a//./.aaaa /b/c/a/.aaaa
+/b/c/a//./.aaa. /b/c/a/.aaa.
+/b/c/a//./.aaa/ /b/c/a/.aaa
+/b/c/a//./.aa.a /b/c/a/.aa.a
+/b/c/a//./.aa.. /b/c/a/.aa..
+/b/c/a//./.aa./ /b/c/a/.aa.
+/b/c/a//./.aa/a /b/c/a/.aa/a
+/b/c/a//./.aa/. /b/c/a/.aa
+/b/c/a//./.aa// /b/c/a/.aa
+/b/c/a//./.a.aa /b/c/a/.a.aa
+/b/c/a//./.a.a. /b/c/a/.a.a.
+/b/c/a//./.a.a/ /b/c/a/.a.a
+/b/c/a//./.a..a /b/c/a/.a..a
+/b/c/a//./.a... /b/c/a/.a...
+/b/c/a//./.a../ /b/c/a/.a..
+/b/c/a//./.a./a /b/c/a/.a./a
+/b/c/a//./.a./. /b/c/a/.a.
+/b/c/a//./.a.// /b/c/a/.a.
+/b/c/a//./.a/aa /b/c/a/.a/aa
+/b/c/a//./.a/a. /b/c/a/.a/a.
+/b/c/a//./.a/a/ /b/c/a/.a/a
+/b/c/a//./.a/.a /b/c/a/.a/.a
+/b/c/a//./.a/.. /b/c/a
+/b/c/a//./.a/./ /b/c/a/.a
+/b/c/a//./.a//a /b/c/a/.a/a
+/b/c/a//./.a//. /b/c/a/.a
+/b/c/a//./.a/// /b/c/a/.a
+/b/c/a//./..aaa /b/c/a/..aaa
+/b/c/a//./..aa. /b/c/a/..aa.
+/b/c/a//./..aa/ /b/c/a/..aa
+/b/c/a//./..a.a /b/c/a/..a.a
+/b/c/a//./..a.. /b/c/a/..a..
+/b/c/a//./..a./ /b/c/a/..a.
+/b/c/a//./..a/a /b/c/a/..a/a
+/b/c/a//./..a/. /b/c/a/..a
+/b/c/a//./..a// /b/c/a/..a
+/b/c/a//./...aa /b/c/a/...aa
+/b/c/a//./...a. /b/c/a/...a.
+/b/c/a//./...a/ /b/c/a/...a
+/b/c/a//./....a /b/c/a/....a
+/b/c/a//./..... /b/c/a/.....
+/b/c/a//./..../ /b/c/a/....
+/b/c/a//./.../a /b/c/a/.../a
+/b/c/a//./.../. /b/c/a/...
+/b/c/a//./...// /b/c/a/...
+/b/c/a//./../aa /b/c/aa
+/b/c/a//./../a. /b/c/a.
+/b/c/a//./../a/ /b/c/a
+/b/c/a//./../.a /b/c/.a
+/b/c/a//./../.. /b
+/b/c/a//./.././ /b/c
+/b/c/a//./..//a /b/c/a
+/b/c/a//./..//. /b/c
+/b/c/a//./../// /b/c
+/b/c/a//././aaa /b/c/a/aaa
+/b/c/a//././aa. /b/c/a/aa.
+/b/c/a//././aa/ /b/c/a/aa
+/b/c/a//././a.a /b/c/a/a.a
+/b/c/a//././a.. /b/c/a/a..
+/b/c/a//././a./ /b/c/a/a.
+/b/c/a//././a/a /b/c/a/a/a
+/b/c/a//././a/. /b/c/a/a
+/b/c/a//././a// /b/c/a/a
+/b/c/a//././.aa /b/c/a/.aa
+/b/c/a//././.a. /b/c/a/.a.
+/b/c/a//././.a/ /b/c/a/.a
+/b/c/a//././..a /b/c/a/..a
+/b/c/a//././... /b/c/a/...
+/b/c/a//././../ /b/c
+/b/c/a//./././a /b/c/a/a
+/b/c/a//./././. /b/c/a
+/b/c/a//././.// /b/c/a
+/b/c/a//././/aa /b/c/a/aa
+/b/c/a//././/a. /b/c/a/a.
+/b/c/a//././/a/ /b/c/a/a
+/b/c/a//././/.a /b/c/a/.a
+/b/c/a//././/.. /b/c
+/b/c/a//././/./ /b/c/a
+/b/c/a//././//a /b/c/a/a
+/b/c/a//././//. /b/c/a
+/b/c/a//././/// /b/c/a
+/b/c/a//.//aaaa /b/c/a/aaaa
+/b/c/a//.//aaa. /b/c/a/aaa.
+/b/c/a//.//aaa/ /b/c/a/aaa
+/b/c/a//.//aa.a /b/c/a/aa.a
+/b/c/a//.//aa.. /b/c/a/aa..
+/b/c/a//.//aa./ /b/c/a/aa.
+/b/c/a//.//aa/a /b/c/a/aa/a
+/b/c/a//.//aa/. /b/c/a/aa
+/b/c/a//.//aa// /b/c/a/aa
+/b/c/a//.//a.aa /b/c/a/a.aa
+/b/c/a//.//a.a. /b/c/a/a.a.
+/b/c/a//.//a.a/ /b/c/a/a.a
+/b/c/a//.//a..a /b/c/a/a..a
+/b/c/a//.//a... /b/c/a/a...
+/b/c/a//.//a../ /b/c/a/a..
+/b/c/a//.//a./a /b/c/a/a./a
+/b/c/a//.//a./. /b/c/a/a.
+/b/c/a//.//a.// /b/c/a/a.
+/b/c/a//.//a/aa /b/c/a/a/aa
+/b/c/a//.//a/a. /b/c/a/a/a.
+/b/c/a//.//a/a/ /b/c/a/a/a
+/b/c/a//.//a/.a /b/c/a/a/.a
+/b/c/a//.//a/.. /b/c/a
+/b/c/a//.//a/./ /b/c/a/a
+/b/c/a//.//a//a /b/c/a/a/a
+/b/c/a//.//a//. /b/c/a/a
+/b/c/a//.//a/// /b/c/a/a
+/b/c/a//.//.aaa /b/c/a/.aaa
+/b/c/a//.//.aa. /b/c/a/.aa.
+/b/c/a//.//.aa/ /b/c/a/.aa
+/b/c/a//.//.a.a /b/c/a/.a.a
+/b/c/a//.//.a.. /b/c/a/.a..
+/b/c/a//.//.a./ /b/c/a/.a.
+/b/c/a//.//.a/a /b/c/a/.a/a
+/b/c/a//.//.a/. /b/c/a/.a
+/b/c/a//.//.a// /b/c/a/.a
+/b/c/a//.//..aa /b/c/a/..aa
+/b/c/a//.//..a. /b/c/a/..a.
+/b/c/a//.//..a/ /b/c/a/..a
+/b/c/a//.//...a /b/c/a/...a
+/b/c/a//.//.... /b/c/a/....
+/b/c/a//.//.../ /b/c/a/...
+/b/c/a//.//../a /b/c/a
+/b/c/a//.//../. /b/c
+/b/c/a//.//..// /b/c
+/b/c/a//.//./aa /b/c/a/aa
+/b/c/a//.//./a. /b/c/a/a.
+/b/c/a//.//./a/ /b/c/a/a
+/b/c/a//.//./.a /b/c/a/.a
+/b/c/a//.//./.. /b/c
+/b/c/a//.//././ /b/c/a
+/b/c/a//.//.//a /b/c/a/a
+/b/c/a//.//.//. /b/c/a
+/b/c/a//.//./// /b/c/a
+/b/c/a//.///aaa /b/c/a/aaa
+/b/c/a//.///aa. /b/c/a/aa.
+/b/c/a//.///aa/ /b/c/a/aa
+/b/c/a//.///a.a /b/c/a/a.a
+/b/c/a//.///a.. /b/c/a/a..
+/b/c/a//.///a./ /b/c/a/a.
+/b/c/a//.///a/a /b/c/a/a/a
+/b/c/a//.///a/. /b/c/a/a
+/b/c/a//.///a// /b/c/a/a
+/b/c/a//.///.aa /b/c/a/.aa
+/b/c/a//.///.a. /b/c/a/.a.
+/b/c/a//.///.a/ /b/c/a/.a
+/b/c/a//.///..a /b/c/a/..a
+/b/c/a//.///... /b/c/a/...
+/b/c/a//.///../ /b/c
+/b/c/a//.///./a /b/c/a/a
+/b/c/a//.///./. /b/c/a
+/b/c/a//.///.// /b/c/a
+/b/c/a//.////aa /b/c/a/aa
+/b/c/a//.////a. /b/c/a/a.
+/b/c/a//.////a/ /b/c/a/a
+/b/c/a//.////.a /b/c/a/.a
+/b/c/a//.////.. /b/c
+/b/c/a//.////./ /b/c/a
+/b/c/a//./////a /b/c/a/a
+/b/c/a//./////. /b/c/a
+/b/c/a//.////// /b/c/a
+/b/c/a///aaaaaa /b/c/a/aaaaaa
+/b/c/a///aaaaa. /b/c/a/aaaaa.
+/b/c/a///aaaaa/ /b/c/a/aaaaa
+/b/c/a///aaaa.a /b/c/a/aaaa.a
+/b/c/a///aaaa.. /b/c/a/aaaa..
+/b/c/a///aaaa./ /b/c/a/aaaa.
+/b/c/a///aaaa/a /b/c/a/aaaa/a
+/b/c/a///aaaa/. /b/c/a/aaaa
+/b/c/a///aaaa// /b/c/a/aaaa
+/b/c/a///aaa.aa /b/c/a/aaa.aa
+/b/c/a///aaa.a. /b/c/a/aaa.a.
+/b/c/a///aaa.a/ /b/c/a/aaa.a
+/b/c/a///aaa..a /b/c/a/aaa..a
+/b/c/a///aaa... /b/c/a/aaa...
+/b/c/a///aaa../ /b/c/a/aaa..
+/b/c/a///aaa./a /b/c/a/aaa./a
+/b/c/a///aaa./. /b/c/a/aaa.
+/b/c/a///aaa.// /b/c/a/aaa.
+/b/c/a///aaa/aa /b/c/a/aaa/aa
+/b/c/a///aaa/a. /b/c/a/aaa/a.
+/b/c/a///aaa/a/ /b/c/a/aaa/a
+/b/c/a///aaa/.a /b/c/a/aaa/.a
+/b/c/a///aaa/.. /b/c/a
+/b/c/a///aaa/./ /b/c/a/aaa
+/b/c/a///aaa//a /b/c/a/aaa/a
+/b/c/a///aaa//. /b/c/a/aaa
+/b/c/a///aaa/// /b/c/a/aaa
+/b/c/a///aa.aaa /b/c/a/aa.aaa
+/b/c/a///aa.aa. /b/c/a/aa.aa.
+/b/c/a///aa.aa/ /b/c/a/aa.aa
+/b/c/a///aa.a.a /b/c/a/aa.a.a
+/b/c/a///aa.a.. /b/c/a/aa.a..
+/b/c/a///aa.a./ /b/c/a/aa.a.
+/b/c/a///aa.a/a /b/c/a/aa.a/a
+/b/c/a///aa.a/. /b/c/a/aa.a
+/b/c/a///aa.a// /b/c/a/aa.a
+/b/c/a///aa..aa /b/c/a/aa..aa
+/b/c/a///aa..a. /b/c/a/aa..a.
+/b/c/a///aa..a/ /b/c/a/aa..a
+/b/c/a///aa...a /b/c/a/aa...a
+/b/c/a///aa.... /b/c/a/aa....
+/b/c/a///aa.../ /b/c/a/aa...
+/b/c/a///aa../a /b/c/a/aa../a
+/b/c/a///aa../. /b/c/a/aa..
+/b/c/a///aa..// /b/c/a/aa..
+/b/c/a///aa./aa /b/c/a/aa./aa
+/b/c/a///aa./a. /b/c/a/aa./a.
+/b/c/a///aa./a/ /b/c/a/aa./a
+/b/c/a///aa./.a /b/c/a/aa./.a
+/b/c/a///aa./.. /b/c/a
+/b/c/a///aa././ /b/c/a/aa.
+/b/c/a///aa.//a /b/c/a/aa./a
+/b/c/a///aa.//. /b/c/a/aa.
+/b/c/a///aa./// /b/c/a/aa.
+/b/c/a///aa/aaa /b/c/a/aa/aaa
+/b/c/a///aa/aa. /b/c/a/aa/aa.
+/b/c/a///aa/aa/ /b/c/a/aa/aa
+/b/c/a///aa/a.a /b/c/a/aa/a.a
+/b/c/a///aa/a.. /b/c/a/aa/a..
+/b/c/a///aa/a./ /b/c/a/aa/a.
+/b/c/a///aa/a/a /b/c/a/aa/a/a
+/b/c/a///aa/a/. /b/c/a/aa/a
+/b/c/a///aa/a// /b/c/a/aa/a
+/b/c/a///aa/.aa /b/c/a/aa/.aa
+/b/c/a///aa/.a. /b/c/a/aa/.a.
+/b/c/a///aa/.a/ /b/c/a/aa/.a
+/b/c/a///aa/..a /b/c/a/aa/..a
+/b/c/a///aa/... /b/c/a/aa/...
+/b/c/a///aa/../ /b/c/a
+/b/c/a///aa/./a /b/c/a/aa/a
+/b/c/a///aa/./. /b/c/a/aa
+/b/c/a///aa/.// /b/c/a/aa
+/b/c/a///aa//aa /b/c/a/aa/aa
+/b/c/a///aa//a. /b/c/a/aa/a.
+/b/c/a///aa//a/ /b/c/a/aa/a
+/b/c/a///aa//.a /b/c/a/aa/.a
+/b/c/a///aa//.. /b/c/a
+/b/c/a///aa//./ /b/c/a/aa
+/b/c/a///aa///a /b/c/a/aa/a
+/b/c/a///aa///. /b/c/a/aa
+/b/c/a///aa//// /b/c/a/aa
+/b/c/a///a.aaaa /b/c/a/a.aaaa
+/b/c/a///a.aaa. /b/c/a/a.aaa.
+/b/c/a///a.aaa/ /b/c/a/a.aaa
+/b/c/a///a.aa.a /b/c/a/a.aa.a
+/b/c/a///a.aa.. /b/c/a/a.aa..
+/b/c/a///a.aa./ /b/c/a/a.aa.
+/b/c/a///a.aa/a /b/c/a/a.aa/a
+/b/c/a///a.aa/. /b/c/a/a.aa
+/b/c/a///a.aa// /b/c/a/a.aa
+/b/c/a///a.a.aa /b/c/a/a.a.aa
+/b/c/a///a.a.a. /b/c/a/a.a.a.
+/b/c/a///a.a.a/ /b/c/a/a.a.a
+/b/c/a///a.a..a /b/c/a/a.a..a
+/b/c/a///a.a... /b/c/a/a.a...
+/b/c/a///a.a../ /b/c/a/a.a..
+/b/c/a///a.a./a /b/c/a/a.a./a
+/b/c/a///a.a./. /b/c/a/a.a.
+/b/c/a///a.a.// /b/c/a/a.a.
+/b/c/a///a.a/aa /b/c/a/a.a/aa
+/b/c/a///a.a/a. /b/c/a/a.a/a.
+/b/c/a///a.a/a/ /b/c/a/a.a/a
+/b/c/a///a.a/.a /b/c/a/a.a/.a
+/b/c/a///a.a/.. /b/c/a
+/b/c/a///a.a/./ /b/c/a/a.a
+/b/c/a///a.a//a /b/c/a/a.a/a
+/b/c/a///a.a//. /b/c/a/a.a
+/b/c/a///a.a/// /b/c/a/a.a
+/b/c/a///a..aaa /b/c/a/a..aaa
+/b/c/a///a..aa. /b/c/a/a..aa.
+/b/c/a///a..aa/ /b/c/a/a..aa
+/b/c/a///a..a.a /b/c/a/a..a.a
+/b/c/a///a..a.. /b/c/a/a..a..
+/b/c/a///a..a./ /b/c/a/a..a.
+/b/c/a///a..a/a /b/c/a/a..a/a
+/b/c/a///a..a/. /b/c/a/a..a
+/b/c/a///a..a// /b/c/a/a..a
+/b/c/a///a...aa /b/c/a/a...aa
+/b/c/a///a...a. /b/c/a/a...a.
+/b/c/a///a...a/ /b/c/a/a...a
+/b/c/a///a....a /b/c/a/a....a
+/b/c/a///a..... /b/c/a/a.....
+/b/c/a///a..../ /b/c/a/a....
+/b/c/a///a.../a /b/c/a/a.../a
+/b/c/a///a.../. /b/c/a/a...
+/b/c/a///a...// /b/c/a/a...
+/b/c/a///a../aa /b/c/a/a../aa
+/b/c/a///a../a. /b/c/a/a../a.
+/b/c/a///a../a/ /b/c/a/a../a
+/b/c/a///a../.a /b/c/a/a../.a
+/b/c/a///a../.. /b/c/a
+/b/c/a///a.././ /b/c/a/a..
+/b/c/a///a..//a /b/c/a/a../a
+/b/c/a///a..//. /b/c/a/a..
+/b/c/a///a../// /b/c/a/a..
+/b/c/a///a./aaa /b/c/a/a./aaa
+/b/c/a///a./aa. /b/c/a/a./aa.
+/b/c/a///a./aa/ /b/c/a/a./aa
+/b/c/a///a./a.a /b/c/a/a./a.a
+/b/c/a///a./a.. /b/c/a/a./a..
+/b/c/a///a./a./ /b/c/a/a./a.
+/b/c/a///a./a/a /b/c/a/a./a/a
+/b/c/a///a./a/. /b/c/a/a./a
+/b/c/a///a./a// /b/c/a/a./a
+/b/c/a///a./.aa /b/c/a/a./.aa
+/b/c/a///a./.a. /b/c/a/a./.a.
+/b/c/a///a./.a/ /b/c/a/a./.a
+/b/c/a///a./..a /b/c/a/a./..a
+/b/c/a///a./... /b/c/a/a./...
+/b/c/a///a./../ /b/c/a
+/b/c/a///a././a /b/c/a/a./a
+/b/c/a///a././. /b/c/a/a.
+/b/c/a///a./.// /b/c/a/a.
+/b/c/a///a.//aa /b/c/a/a./aa
+/b/c/a///a.//a. /b/c/a/a./a.
+/b/c/a///a.//a/ /b/c/a/a./a
+/b/c/a///a.//.a /b/c/a/a./.a
+/b/c/a///a.//.. /b/c/a
+/b/c/a///a.//./ /b/c/a/a.
+/b/c/a///a.///a /b/c/a/a./a
+/b/c/a///a.///. /b/c/a/a.
+/b/c/a///a.//// /b/c/a/a.
+/b/c/a///a/aaaa /b/c/a/a/aaaa
+/b/c/a///a/aaa. /b/c/a/a/aaa.
+/b/c/a///a/aaa/ /b/c/a/a/aaa
+/b/c/a///a/aa.a /b/c/a/a/aa.a
+/b/c/a///a/aa.. /b/c/a/a/aa..
+/b/c/a///a/aa./ /b/c/a/a/aa.
+/b/c/a///a/aa/a /b/c/a/a/aa/a
+/b/c/a///a/aa/. /b/c/a/a/aa
+/b/c/a///a/aa// /b/c/a/a/aa
+/b/c/a///a/a.aa /b/c/a/a/a.aa
+/b/c/a///a/a.a. /b/c/a/a/a.a.
+/b/c/a///a/a.a/ /b/c/a/a/a.a
+/b/c/a///a/a..a /b/c/a/a/a..a
+/b/c/a///a/a... /b/c/a/a/a...
+/b/c/a///a/a../ /b/c/a/a/a..
+/b/c/a///a/a./a /b/c/a/a/a./a
+/b/c/a///a/a./. /b/c/a/a/a.
+/b/c/a///a/a.// /b/c/a/a/a.
+/b/c/a///a/a/aa /b/c/a/a/a/aa
+/b/c/a///a/a/a. /b/c/a/a/a/a.
+/b/c/a///a/a/a/ /b/c/a/a/a/a
+/b/c/a///a/a/.a /b/c/a/a/a/.a
+/b/c/a///a/a/.. /b/c/a/a
+/b/c/a///a/a/./ /b/c/a/a/a
+/b/c/a///a/a//a /b/c/a/a/a/a
+/b/c/a///a/a//. /b/c/a/a/a
+/b/c/a///a/a/// /b/c/a/a/a
+/b/c/a///a/.aaa /b/c/a/a/.aaa
+/b/c/a///a/.aa. /b/c/a/a/.aa.
+/b/c/a///a/.aa/ /b/c/a/a/.aa
+/b/c/a///a/.a.a /b/c/a/a/.a.a
+/b/c/a///a/.a.. /b/c/a/a/.a..
+/b/c/a///a/.a./ /b/c/a/a/.a.
+/b/c/a///a/.a/a /b/c/a/a/.a/a
+/b/c/a///a/.a/. /b/c/a/a/.a
+/b/c/a///a/.a// /b/c/a/a/.a
+/b/c/a///a/..aa /b/c/a/a/..aa
+/b/c/a///a/..a. /b/c/a/a/..a.
+/b/c/a///a/..a/ /b/c/a/a/..a
+/b/c/a///a/...a /b/c/a/a/...a
+/b/c/a///a/.... /b/c/a/a/....
+/b/c/a///a/.../ /b/c/a/a/...
+/b/c/a///a/../a /b/c/a/a
+/b/c/a///a/../. /b/c/a
+/b/c/a///a/..// /b/c/a
+/b/c/a///a/./aa /b/c/a/a/aa
+/b/c/a///a/./a. /b/c/a/a/a.
+/b/c/a///a/./a/ /b/c/a/a/a
+/b/c/a///a/./.a /b/c/a/a/.a
+/b/c/a///a/./.. /b/c/a
+/b/c/a///a/././ /b/c/a/a
+/b/c/a///a/.//a /b/c/a/a/a
+/b/c/a///a/.//. /b/c/a/a
+/b/c/a///a/./// /b/c/a/a
+/b/c/a///a//aaa /b/c/a/a/aaa
+/b/c/a///a//aa. /b/c/a/a/aa.
+/b/c/a///a//aa/ /b/c/a/a/aa
+/b/c/a///a//a.a /b/c/a/a/a.a
+/b/c/a///a//a.. /b/c/a/a/a..
+/b/c/a///a//a./ /b/c/a/a/a.
+/b/c/a///a//a/a /b/c/a/a/a/a
+/b/c/a///a//a/. /b/c/a/a/a
+/b/c/a///a//a// /b/c/a/a/a
+/b/c/a///a//.aa /b/c/a/a/.aa
+/b/c/a///a//.a. /b/c/a/a/.a.
+/b/c/a///a//.a/ /b/c/a/a/.a
+/b/c/a///a//..a /b/c/a/a/..a
+/b/c/a///a//... /b/c/a/a/...
+/b/c/a///a//../ /b/c/a
+/b/c/a///a//./a /b/c/a/a/a
+/b/c/a///a//./. /b/c/a/a
+/b/c/a///a//.// /b/c/a/a
+/b/c/a///a///aa /b/c/a/a/aa
+/b/c/a///a///a. /b/c/a/a/a.
+/b/c/a///a///a/ /b/c/a/a/a
+/b/c/a///a///.a /b/c/a/a/.a
+/b/c/a///a///.. /b/c/a
+/b/c/a///a///./ /b/c/a/a
+/b/c/a///a////a /b/c/a/a/a
+/b/c/a///a////. /b/c/a/a
+/b/c/a///a///// /b/c/a/a
+/b/c/a///.aaaaa /b/c/a/.aaaaa
+/b/c/a///.aaaa. /b/c/a/.aaaa.
+/b/c/a///.aaaa/ /b/c/a/.aaaa
+/b/c/a///.aaa.a /b/c/a/.aaa.a
+/b/c/a///.aaa.. /b/c/a/.aaa..
+/b/c/a///.aaa./ /b/c/a/.aaa.
+/b/c/a///.aaa/a /b/c/a/.aaa/a
+/b/c/a///.aaa/. /b/c/a/.aaa
+/b/c/a///.aaa// /b/c/a/.aaa
+/b/c/a///.aa.aa /b/c/a/.aa.aa
+/b/c/a///.aa.a. /b/c/a/.aa.a.
+/b/c/a///.aa.a/ /b/c/a/.aa.a
+/b/c/a///.aa..a /b/c/a/.aa..a
+/b/c/a///.aa... /b/c/a/.aa...
+/b/c/a///.aa../ /b/c/a/.aa..
+/b/c/a///.aa./a /b/c/a/.aa./a
+/b/c/a///.aa./. /b/c/a/.aa.
+/b/c/a///.aa.// /b/c/a/.aa.
+/b/c/a///.aa/aa /b/c/a/.aa/aa
+/b/c/a///.aa/a. /b/c/a/.aa/a.
+/b/c/a///.aa/a/ /b/c/a/.aa/a
+/b/c/a///.aa/.a /b/c/a/.aa/.a
+/b/c/a///.aa/.. /b/c/a
+/b/c/a///.aa/./ /b/c/a/.aa
+/b/c/a///.aa//a /b/c/a/.aa/a
+/b/c/a///.aa//. /b/c/a/.aa
+/b/c/a///.aa/// /b/c/a/.aa
+/b/c/a///.a.aaa /b/c/a/.a.aaa
+/b/c/a///.a.aa. /b/c/a/.a.aa.
+/b/c/a///.a.aa/ /b/c/a/.a.aa
+/b/c/a///.a.a.a /b/c/a/.a.a.a
+/b/c/a///.a.a.. /b/c/a/.a.a..
+/b/c/a///.a.a./ /b/c/a/.a.a.
+/b/c/a///.a.a/a /b/c/a/.a.a/a
+/b/c/a///.a.a/. /b/c/a/.a.a
+/b/c/a///.a.a// /b/c/a/.a.a
+/b/c/a///.a..aa /b/c/a/.a..aa
+/b/c/a///.a..a. /b/c/a/.a..a.
+/b/c/a///.a..a/ /b/c/a/.a..a
+/b/c/a///.a...a /b/c/a/.a...a
+/b/c/a///.a.... /b/c/a/.a....
+/b/c/a///.a.../ /b/c/a/.a...
+/b/c/a///.a../a /b/c/a/.a../a
+/b/c/a///.a../. /b/c/a/.a..
+/b/c/a///.a..// /b/c/a/.a..
+/b/c/a///.a./aa /b/c/a/.a./aa
+/b/c/a///.a./a. /b/c/a/.a./a.
+/b/c/a///.a./a/ /b/c/a/.a./a
+/b/c/a///.a./.a /b/c/a/.a./.a
+/b/c/a///.a./.. /b/c/a
+/b/c/a///.a././ /b/c/a/.a.
+/b/c/a///.a.//a /b/c/a/.a./a
+/b/c/a///.a.//. /b/c/a/.a.
+/b/c/a///.a./// /b/c/a/.a.
+/b/c/a///.a/aaa /b/c/a/.a/aaa
+/b/c/a///.a/aa. /b/c/a/.a/aa.
+/b/c/a///.a/aa/ /b/c/a/.a/aa
+/b/c/a///.a/a.a /b/c/a/.a/a.a
+/b/c/a///.a/a.. /b/c/a/.a/a..
+/b/c/a///.a/a./ /b/c/a/.a/a.
+/b/c/a///.a/a/a /b/c/a/.a/a/a
+/b/c/a///.a/a/. /b/c/a/.a/a
+/b/c/a///.a/a// /b/c/a/.a/a
+/b/c/a///.a/.aa /b/c/a/.a/.aa
+/b/c/a///.a/.a. /b/c/a/.a/.a.
+/b/c/a///.a/.a/ /b/c/a/.a/.a
+/b/c/a///.a/..a /b/c/a/.a/..a
+/b/c/a///.a/... /b/c/a/.a/...
+/b/c/a///.a/../ /b/c/a
+/b/c/a///.a/./a /b/c/a/.a/a
+/b/c/a///.a/./. /b/c/a/.a
+/b/c/a///.a/.// /b/c/a/.a
+/b/c/a///.a//aa /b/c/a/.a/aa
+/b/c/a///.a//a. /b/c/a/.a/a.
+/b/c/a///.a//a/ /b/c/a/.a/a
+/b/c/a///.a//.a /b/c/a/.a/.a
+/b/c/a///.a//.. /b/c/a
+/b/c/a///.a//./ /b/c/a/.a
+/b/c/a///.a///a /b/c/a/.a/a
+/b/c/a///.a///. /b/c/a/.a
+/b/c/a///.a//// /b/c/a/.a
+/b/c/a///..aaaa /b/c/a/..aaaa
+/b/c/a///..aaa. /b/c/a/..aaa.
+/b/c/a///..aaa/ /b/c/a/..aaa
+/b/c/a///..aa.a /b/c/a/..aa.a
+/b/c/a///..aa.. /b/c/a/..aa..
+/b/c/a///..aa./ /b/c/a/..aa.
+/b/c/a///..aa/a /b/c/a/..aa/a
+/b/c/a///..aa/. /b/c/a/..aa
+/b/c/a///..aa// /b/c/a/..aa
+/b/c/a///..a.aa /b/c/a/..a.aa
+/b/c/a///..a.a. /b/c/a/..a.a.
+/b/c/a///..a.a/ /b/c/a/..a.a
+/b/c/a///..a..a /b/c/a/..a..a
+/b/c/a///..a... /b/c/a/..a...
+/b/c/a///..a../ /b/c/a/..a..
+/b/c/a///..a./a /b/c/a/..a./a
+/b/c/a///..a./. /b/c/a/..a.
+/b/c/a///..a.// /b/c/a/..a.
+/b/c/a///..a/aa /b/c/a/..a/aa
+/b/c/a///..a/a. /b/c/a/..a/a.
+/b/c/a///..a/a/ /b/c/a/..a/a
+/b/c/a///..a/.a /b/c/a/..a/.a
+/b/c/a///..a/.. /b/c/a
+/b/c/a///..a/./ /b/c/a/..a
+/b/c/a///..a//a /b/c/a/..a/a
+/b/c/a///..a//. /b/c/a/..a
+/b/c/a///..a/// /b/c/a/..a
+/b/c/a///...aaa /b/c/a/...aaa
+/b/c/a///...aa. /b/c/a/...aa.
+/b/c/a///...aa/ /b/c/a/...aa
+/b/c/a///...a.a /b/c/a/...a.a
+/b/c/a///...a.. /b/c/a/...a..
+/b/c/a///...a./ /b/c/a/...a.
+/b/c/a///...a/a /b/c/a/...a/a
+/b/c/a///...a/. /b/c/a/...a
+/b/c/a///...a// /b/c/a/...a
+/b/c/a///....aa /b/c/a/....aa
+/b/c/a///....a. /b/c/a/....a.
+/b/c/a///....a/ /b/c/a/....a
+/b/c/a///.....a /b/c/a/.....a
+/b/c/a///...... /b/c/a/......
+/b/c/a///...../ /b/c/a/.....
+/b/c/a///..../a /b/c/a/..../a
+/b/c/a///..../. /b/c/a/....
+/b/c/a///....// /b/c/a/....
+/b/c/a///.../aa /b/c/a/.../aa
+/b/c/a///.../a. /b/c/a/.../a.
+/b/c/a///.../a/ /b/c/a/.../a
+/b/c/a///.../.a /b/c/a/.../.a
+/b/c/a///.../.. /b/c/a
+/b/c/a///..././ /b/c/a/...
+/b/c/a///...//a /b/c/a/.../a
+/b/c/a///...//. /b/c/a/...
+/b/c/a///.../// /b/c/a/...
+/b/c/a///../aaa /b/c/aaa
+/b/c/a///../aa. /b/c/aa.
+/b/c/a///../aa/ /b/c/aa
+/b/c/a///../a.a /b/c/a.a
+/b/c/a///../a.. /b/c/a..
+/b/c/a///../a./ /b/c/a.
+/b/c/a///../a/a /b/c/a/a
+/b/c/a///../a/. /b/c/a
+/b/c/a///../a// /b/c/a
+/b/c/a///../.aa /b/c/.aa
+/b/c/a///../.a. /b/c/.a.
+/b/c/a///../.a/ /b/c/.a
+/b/c/a///../..a /b/c/..a
+/b/c/a///../... /b/c/...
+/b/c/a///../../ /b
+/b/c/a///.././a /b/c/a
+/b/c/a///.././. /b/c
+/b/c/a///../.// /b/c
+/b/c/a///..//aa /b/c/aa
+/b/c/a///..//a. /b/c/a.
+/b/c/a///..//a/ /b/c/a
+/b/c/a///..//.a /b/c/.a
+/b/c/a///..//.. /b
+/b/c/a///..//./ /b/c
+/b/c/a///..///a /b/c/a
+/b/c/a///..///. /b/c
+/b/c/a///..//// /b/c
+/b/c/a///./aaaa /b/c/a/aaaa
+/b/c/a///./aaa. /b/c/a/aaa.
+/b/c/a///./aaa/ /b/c/a/aaa
+/b/c/a///./aa.a /b/c/a/aa.a
+/b/c/a///./aa.. /b/c/a/aa..
+/b/c/a///./aa./ /b/c/a/aa.
+/b/c/a///./aa/a /b/c/a/aa/a
+/b/c/a///./aa/. /b/c/a/aa
+/b/c/a///./aa// /b/c/a/aa
+/b/c/a///./a.aa /b/c/a/a.aa
+/b/c/a///./a.a. /b/c/a/a.a.
+/b/c/a///./a.a/ /b/c/a/a.a
+/b/c/a///./a..a /b/c/a/a..a
+/b/c/a///./a... /b/c/a/a...
+/b/c/a///./a../ /b/c/a/a..
+/b/c/a///./a./a /b/c/a/a./a
+/b/c/a///./a./. /b/c/a/a.
+/b/c/a///./a.// /b/c/a/a.
+/b/c/a///./a/aa /b/c/a/a/aa
+/b/c/a///./a/a. /b/c/a/a/a.
+/b/c/a///./a/a/ /b/c/a/a/a
+/b/c/a///./a/.a /b/c/a/a/.a
+/b/c/a///./a/.. /b/c/a
+/b/c/a///./a/./ /b/c/a/a
+/b/c/a///./a//a /b/c/a/a/a
+/b/c/a///./a//. /b/c/a/a
+/b/c/a///./a/// /b/c/a/a
+/b/c/a///./.aaa /b/c/a/.aaa
+/b/c/a///./.aa. /b/c/a/.aa.
+/b/c/a///./.aa/ /b/c/a/.aa
+/b/c/a///./.a.a /b/c/a/.a.a
+/b/c/a///./.a.. /b/c/a/.a..
+/b/c/a///./.a./ /b/c/a/.a.
+/b/c/a///./.a/a /b/c/a/.a/a
+/b/c/a///./.a/. /b/c/a/.a
+/b/c/a///./.a// /b/c/a/.a
+/b/c/a///./..aa /b/c/a/..aa
+/b/c/a///./..a. /b/c/a/..a.
+/b/c/a///./..a/ /b/c/a/..a
+/b/c/a///./...a /b/c/a/...a
+/b/c/a///./.... /b/c/a/....
+/b/c/a///./.../ /b/c/a/...
+/b/c/a///./../a /b/c/a
+/b/c/a///./../. /b/c
+/b/c/a///./..// /b/c
+/b/c/a///././aa /b/c/a/aa
+/b/c/a///././a. /b/c/a/a.
+/b/c/a///././a/ /b/c/a/a
+/b/c/a///././.a /b/c/a/.a
+/b/c/a///././.. /b/c
+/b/c/a///./././ /b/c/a
+/b/c/a///././/a /b/c/a/a
+/b/c/a///././/. /b/c/a
+/b/c/a///././// /b/c/a
+/b/c/a///.//aaa /b/c/a/aaa
+/b/c/a///.//aa. /b/c/a/aa.
+/b/c/a///.//aa/ /b/c/a/aa
+/b/c/a///.//a.a /b/c/a/a.a
+/b/c/a///.//a.. /b/c/a/a..
+/b/c/a///.//a./ /b/c/a/a.
+/b/c/a///.//a/a /b/c/a/a/a
+/b/c/a///.//a/. /b/c/a/a
+/b/c/a///.//a// /b/c/a/a
+/b/c/a///.//.aa /b/c/a/.aa
+/b/c/a///.//.a. /b/c/a/.a.
+/b/c/a///.//.a/ /b/c/a/.a
+/b/c/a///.//..a /b/c/a/..a
+/b/c/a///.//... /b/c/a/...
+/b/c/a///.//../ /b/c
+/b/c/a///.//./a /b/c/a/a
+/b/c/a///.//./. /b/c/a
+/b/c/a///.//.// /b/c/a
+/b/c/a///.///aa /b/c/a/aa
+/b/c/a///.///a. /b/c/a/a.
+/b/c/a///.///a/ /b/c/a/a
+/b/c/a///.///.a /b/c/a/.a
+/b/c/a///.///.. /b/c
+/b/c/a///.///./ /b/c/a
+/b/c/a///.////a /b/c/a/a
+/b/c/a///.////. /b/c/a
+/b/c/a///.///// /b/c/a
+/b/c/a////aaaaa /b/c/a/aaaaa
+/b/c/a////aaaa. /b/c/a/aaaa.
+/b/c/a////aaaa/ /b/c/a/aaaa
+/b/c/a////aaa.a /b/c/a/aaa.a
+/b/c/a////aaa.. /b/c/a/aaa..
+/b/c/a////aaa./ /b/c/a/aaa.
+/b/c/a////aaa/a /b/c/a/aaa/a
+/b/c/a////aaa/. /b/c/a/aaa
+/b/c/a////aaa// /b/c/a/aaa
+/b/c/a////aa.aa /b/c/a/aa.aa
+/b/c/a////aa.a. /b/c/a/aa.a.
+/b/c/a////aa.a/ /b/c/a/aa.a
+/b/c/a////aa..a /b/c/a/aa..a
+/b/c/a////aa... /b/c/a/aa...
+/b/c/a////aa../ /b/c/a/aa..
+/b/c/a////aa./a /b/c/a/aa./a
+/b/c/a////aa./. /b/c/a/aa.
+/b/c/a////aa.// /b/c/a/aa.
+/b/c/a////aa/aa /b/c/a/aa/aa
+/b/c/a////aa/a. /b/c/a/aa/a.
+/b/c/a////aa/a/ /b/c/a/aa/a
+/b/c/a////aa/.a /b/c/a/aa/.a
+/b/c/a////aa/.. /b/c/a
+/b/c/a////aa/./ /b/c/a/aa
+/b/c/a////aa//a /b/c/a/aa/a
+/b/c/a////aa//. /b/c/a/aa
+/b/c/a////aa/// /b/c/a/aa
+/b/c/a////a.aaa /b/c/a/a.aaa
+/b/c/a////a.aa. /b/c/a/a.aa.
+/b/c/a////a.aa/ /b/c/a/a.aa
+/b/c/a////a.a.a /b/c/a/a.a.a
+/b/c/a////a.a.. /b/c/a/a.a..
+/b/c/a////a.a./ /b/c/a/a.a.
+/b/c/a////a.a/a /b/c/a/a.a/a
+/b/c/a////a.a/. /b/c/a/a.a
+/b/c/a////a.a// /b/c/a/a.a
+/b/c/a////a..aa /b/c/a/a..aa
+/b/c/a////a..a. /b/c/a/a..a.
+/b/c/a////a..a/ /b/c/a/a..a
+/b/c/a////a...a /b/c/a/a...a
+/b/c/a////a.... /b/c/a/a....
+/b/c/a////a.../ /b/c/a/a...
+/b/c/a////a../a /b/c/a/a../a
+/b/c/a////a../. /b/c/a/a..
+/b/c/a////a..// /b/c/a/a..
+/b/c/a////a./aa /b/c/a/a./aa
+/b/c/a////a./a. /b/c/a/a./a.
+/b/c/a////a./a/ /b/c/a/a./a
+/b/c/a////a./.a /b/c/a/a./.a
+/b/c/a////a./.. /b/c/a
+/b/c/a////a././ /b/c/a/a.
+/b/c/a////a.//a /b/c/a/a./a
+/b/c/a////a.//. /b/c/a/a.
+/b/c/a////a./// /b/c/a/a.
+/b/c/a////a/aaa /b/c/a/a/aaa
+/b/c/a////a/aa. /b/c/a/a/aa.
+/b/c/a////a/aa/ /b/c/a/a/aa
+/b/c/a////a/a.a /b/c/a/a/a.a
+/b/c/a////a/a.. /b/c/a/a/a..
+/b/c/a////a/a./ /b/c/a/a/a.
+/b/c/a////a/a/a /b/c/a/a/a/a
+/b/c/a////a/a/. /b/c/a/a/a
+/b/c/a////a/a// /b/c/a/a/a
+/b/c/a////a/.aa /b/c/a/a/.aa
+/b/c/a////a/.a. /b/c/a/a/.a.
+/b/c/a////a/.a/ /b/c/a/a/.a
+/b/c/a////a/..a /b/c/a/a/..a
+/b/c/a////a/... /b/c/a/a/...
+/b/c/a////a/../ /b/c/a
+/b/c/a////a/./a /b/c/a/a/a
+/b/c/a////a/./. /b/c/a/a
+/b/c/a////a/.// /b/c/a/a
+/b/c/a////a//aa /b/c/a/a/aa
+/b/c/a////a//a. /b/c/a/a/a.
+/b/c/a////a//a/ /b/c/a/a/a
+/b/c/a////a//.a /b/c/a/a/.a
+/b/c/a////a//.. /b/c/a
+/b/c/a////a//./ /b/c/a/a
+/b/c/a////a///a /b/c/a/a/a
+/b/c/a////a///. /b/c/a/a
+/b/c/a////a//// /b/c/a/a
+/b/c/a////.aaaa /b/c/a/.aaaa
+/b/c/a////.aaa. /b/c/a/.aaa.
+/b/c/a////.aaa/ /b/c/a/.aaa
+/b/c/a////.aa.a /b/c/a/.aa.a
+/b/c/a////.aa.. /b/c/a/.aa..
+/b/c/a////.aa./ /b/c/a/.aa.
+/b/c/a////.aa/a /b/c/a/.aa/a
+/b/c/a////.aa/. /b/c/a/.aa
+/b/c/a////.aa// /b/c/a/.aa
+/b/c/a////.a.aa /b/c/a/.a.aa
+/b/c/a////.a.a. /b/c/a/.a.a.
+/b/c/a////.a.a/ /b/c/a/.a.a
+/b/c/a////.a..a /b/c/a/.a..a
+/b/c/a////.a... /b/c/a/.a...
+/b/c/a////.a../ /b/c/a/.a..
+/b/c/a////.a./a /b/c/a/.a./a
+/b/c/a////.a./. /b/c/a/.a.
+/b/c/a////.a.// /b/c/a/.a.
+/b/c/a////.a/aa /b/c/a/.a/aa
+/b/c/a////.a/a. /b/c/a/.a/a.
+/b/c/a////.a/a/ /b/c/a/.a/a
+/b/c/a////.a/.a /b/c/a/.a/.a
+/b/c/a////.a/.. /b/c/a
+/b/c/a////.a/./ /b/c/a/.a
+/b/c/a////.a//a /b/c/a/.a/a
+/b/c/a////.a//. /b/c/a/.a
+/b/c/a////.a/// /b/c/a/.a
+/b/c/a////..aaa /b/c/a/..aaa
+/b/c/a////..aa. /b/c/a/..aa.
+/b/c/a////..aa/ /b/c/a/..aa
+/b/c/a////..a.a /b/c/a/..a.a
+/b/c/a////..a.. /b/c/a/..a..
+/b/c/a////..a./ /b/c/a/..a.
+/b/c/a////..a/a /b/c/a/..a/a
+/b/c/a////..a/. /b/c/a/..a
+/b/c/a////..a// /b/c/a/..a
+/b/c/a////...aa /b/c/a/...aa
+/b/c/a////...a. /b/c/a/...a.
+/b/c/a////...a/ /b/c/a/...a
+/b/c/a////....a /b/c/a/....a
+/b/c/a////..... /b/c/a/.....
+/b/c/a////..../ /b/c/a/....
+/b/c/a////.../a /b/c/a/.../a
+/b/c/a////.../. /b/c/a/...
+/b/c/a////...// /b/c/a/...
+/b/c/a////../aa /b/c/aa
+/b/c/a////../a. /b/c/a.
+/b/c/a////../a/ /b/c/a
+/b/c/a////../.a /b/c/.a
+/b/c/a////../.. /b
+/b/c/a////.././ /b/c
+/b/c/a////..//a /b/c/a
+/b/c/a////..//. /b/c
+/b/c/a////../// /b/c
+/b/c/a////./aaa /b/c/a/aaa
+/b/c/a////./aa. /b/c/a/aa.
+/b/c/a////./aa/ /b/c/a/aa
+/b/c/a////./a.a /b/c/a/a.a
+/b/c/a////./a.. /b/c/a/a..
+/b/c/a////./a./ /b/c/a/a.
+/b/c/a////./a/a /b/c/a/a/a
+/b/c/a////./a/. /b/c/a/a
+/b/c/a////./a// /b/c/a/a
+/b/c/a////./.aa /b/c/a/.aa
+/b/c/a////./.a. /b/c/a/.a.
+/b/c/a////./.a/ /b/c/a/.a
+/b/c/a////./..a /b/c/a/..a
+/b/c/a////./... /b/c/a/...
+/b/c/a////./../ /b/c
+/b/c/a////././a /b/c/a/a
+/b/c/a////././. /b/c/a
+/b/c/a////./.// /b/c/a
+/b/c/a////.//aa /b/c/a/aa
+/b/c/a////.//a. /b/c/a/a.
+/b/c/a////.//a/ /b/c/a/a
+/b/c/a////.//.a /b/c/a/.a
+/b/c/a////.//.. /b/c
+/b/c/a////.//./ /b/c/a
+/b/c/a////.///a /b/c/a/a
+/b/c/a////.///. /b/c/a
+/b/c/a////.//// /b/c/a
+/b/c/a/////aaaa /b/c/a/aaaa
+/b/c/a/////aaa. /b/c/a/aaa.
+/b/c/a/////aaa/ /b/c/a/aaa
+/b/c/a/////aa.a /b/c/a/aa.a
+/b/c/a/////aa.. /b/c/a/aa..
+/b/c/a/////aa./ /b/c/a/aa.
+/b/c/a/////aa/a /b/c/a/aa/a
+/b/c/a/////aa/. /b/c/a/aa
+/b/c/a/////aa// /b/c/a/aa
+/b/c/a/////a.aa /b/c/a/a.aa
+/b/c/a/////a.a. /b/c/a/a.a.
+/b/c/a/////a.a/ /b/c/a/a.a
+/b/c/a/////a..a /b/c/a/a..a
+/b/c/a/////a... /b/c/a/a...
+/b/c/a/////a../ /b/c/a/a..
+/b/c/a/////a./a /b/c/a/a./a
+/b/c/a/////a./. /b/c/a/a.
+/b/c/a/////a.// /b/c/a/a.
+/b/c/a/////a/aa /b/c/a/a/aa
+/b/c/a/////a/a. /b/c/a/a/a.
+/b/c/a/////a/a/ /b/c/a/a/a
+/b/c/a/////a/.a /b/c/a/a/.a
+/b/c/a/////a/.. /b/c/a
+/b/c/a/////a/./ /b/c/a/a
+/b/c/a/////a//a /b/c/a/a/a
+/b/c/a/////a//. /b/c/a/a
+/b/c/a/////a/// /b/c/a/a
+/b/c/a/////.aaa /b/c/a/.aaa
+/b/c/a/////.aa. /b/c/a/.aa.
+/b/c/a/////.aa/ /b/c/a/.aa
+/b/c/a/////.a.a /b/c/a/.a.a
+/b/c/a/////.a.. /b/c/a/.a..
+/b/c/a/////.a./ /b/c/a/.a.
+/b/c/a/////.a/a /b/c/a/.a/a
+/b/c/a/////.a/. /b/c/a/.a
+/b/c/a/////.a// /b/c/a/.a
+/b/c/a/////..aa /b/c/a/..aa
+/b/c/a/////..a. /b/c/a/..a.
+/b/c/a/////..a/ /b/c/a/..a
+/b/c/a/////...a /b/c/a/...a
+/b/c/a/////.... /b/c/a/....
+/b/c/a/////.../ /b/c/a/...
+/b/c/a/////../a /b/c/a
+/b/c/a/////../. /b/c
+/b/c/a/////..// /b/c
+/b/c/a/////./aa /b/c/a/aa
+/b/c/a/////./a. /b/c/a/a.
+/b/c/a/////./a/ /b/c/a/a
+/b/c/a/////./.a /b/c/a/.a
+/b/c/a/////./.. /b/c
+/b/c/a/////././ /b/c/a
+/b/c/a/////.//a /b/c/a/a
+/b/c/a/////.//. /b/c/a
+/b/c/a/////./// /b/c/a
+/b/c/a//////aaa /b/c/a/aaa
+/b/c/a//////aa. /b/c/a/aa.
+/b/c/a//////aa/ /b/c/a/aa
+/b/c/a//////a.a /b/c/a/a.a
+/b/c/a//////a.. /b/c/a/a..
+/b/c/a//////a./ /b/c/a/a.
+/b/c/a//////a/a /b/c/a/a/a
+/b/c/a//////a/. /b/c/a/a
+/b/c/a//////a// /b/c/a/a
+/b/c/a//////.aa /b/c/a/.aa
+/b/c/a//////.a. /b/c/a/.a.
+/b/c/a//////.a/ /b/c/a/.a
+/b/c/a//////..a /b/c/a/..a
+/b/c/a//////... /b/c/a/...
+/b/c/a//////../ /b/c
+/b/c/a//////./a /b/c/a/a
+/b/c/a//////./. /b/c/a
+/b/c/a//////.// /b/c/a
+/b/c/a///////aa /b/c/a/aa
+/b/c/a///////a. /b/c/a/a.
+/b/c/a///////a/ /b/c/a/a
+/b/c/a///////.a /b/c/a/.a
+/b/c/a///////.. /b/c
+/b/c/a///////./ /b/c/a
+/b/c/a////////a /b/c/a/a
+/b/c/a////////. /b/c/a
+/b/c/a///////// /b/c/a
+/b/c/.aaaaaaaaa /b/c/.aaaaaaaaa
+/b/c/.aaaaaaaa. /b/c/.aaaaaaaa.
+/b/c/.aaaaaaaa/ /b/c/.aaaaaaaa
+/b/c/.aaaaaaa.a /b/c/.aaaaaaa.a
+/b/c/.aaaaaaa.. /b/c/.aaaaaaa..
+/b/c/.aaaaaaa./ /b/c/.aaaaaaa.
+/b/c/.aaaaaaa/a /b/c/.aaaaaaa/a
+/b/c/.aaaaaaa/. /b/c/.aaaaaaa
+/b/c/.aaaaaaa// /b/c/.aaaaaaa
+/b/c/.aaaaaa.aa /b/c/.aaaaaa.aa
+/b/c/.aaaaaa.a. /b/c/.aaaaaa.a.
+/b/c/.aaaaaa.a/ /b/c/.aaaaaa.a
+/b/c/.aaaaaa..a /b/c/.aaaaaa..a
+/b/c/.aaaaaa... /b/c/.aaaaaa...
+/b/c/.aaaaaa../ /b/c/.aaaaaa..
+/b/c/.aaaaaa./a /b/c/.aaaaaa./a
+/b/c/.aaaaaa./. /b/c/.aaaaaa.
+/b/c/.aaaaaa.// /b/c/.aaaaaa.
+/b/c/.aaaaaa/aa /b/c/.aaaaaa/aa
+/b/c/.aaaaaa/a. /b/c/.aaaaaa/a.
+/b/c/.aaaaaa/a/ /b/c/.aaaaaa/a
+/b/c/.aaaaaa/.a /b/c/.aaaaaa/.a
+/b/c/.aaaaaa/.. /b/c
+/b/c/.aaaaaa/./ /b/c/.aaaaaa
+/b/c/.aaaaaa//a /b/c/.aaaaaa/a
+/b/c/.aaaaaa//. /b/c/.aaaaaa
+/b/c/.aaaaaa/// /b/c/.aaaaaa
+/b/c/.aaaaa.aaa /b/c/.aaaaa.aaa
+/b/c/.aaaaa.aa. /b/c/.aaaaa.aa.
+/b/c/.aaaaa.aa/ /b/c/.aaaaa.aa
+/b/c/.aaaaa.a.a /b/c/.aaaaa.a.a
+/b/c/.aaaaa.a.. /b/c/.aaaaa.a..
+/b/c/.aaaaa.a./ /b/c/.aaaaa.a.
+/b/c/.aaaaa.a/a /b/c/.aaaaa.a/a
+/b/c/.aaaaa.a/. /b/c/.aaaaa.a
+/b/c/.aaaaa.a// /b/c/.aaaaa.a
+/b/c/.aaaaa..aa /b/c/.aaaaa..aa
+/b/c/.aaaaa..a. /b/c/.aaaaa..a.
+/b/c/.aaaaa..a/ /b/c/.aaaaa..a
+/b/c/.aaaaa...a /b/c/.aaaaa...a
+/b/c/.aaaaa.... /b/c/.aaaaa....
+/b/c/.aaaaa.../ /b/c/.aaaaa...
+/b/c/.aaaaa../a /b/c/.aaaaa../a
+/b/c/.aaaaa../. /b/c/.aaaaa..
+/b/c/.aaaaa..// /b/c/.aaaaa..
+/b/c/.aaaaa./aa /b/c/.aaaaa./aa
+/b/c/.aaaaa./a. /b/c/.aaaaa./a.
+/b/c/.aaaaa./a/ /b/c/.aaaaa./a
+/b/c/.aaaaa./.a /b/c/.aaaaa./.a
+/b/c/.aaaaa./.. /b/c
+/b/c/.aaaaa././ /b/c/.aaaaa.
+/b/c/.aaaaa.//a /b/c/.aaaaa./a
+/b/c/.aaaaa.//. /b/c/.aaaaa.
+/b/c/.aaaaa./// /b/c/.aaaaa.
+/b/c/.aaaaa/aaa /b/c/.aaaaa/aaa
+/b/c/.aaaaa/aa. /b/c/.aaaaa/aa.
+/b/c/.aaaaa/aa/ /b/c/.aaaaa/aa
+/b/c/.aaaaa/a.a /b/c/.aaaaa/a.a
+/b/c/.aaaaa/a.. /b/c/.aaaaa/a..
+/b/c/.aaaaa/a./ /b/c/.aaaaa/a.
+/b/c/.aaaaa/a/a /b/c/.aaaaa/a/a
+/b/c/.aaaaa/a/. /b/c/.aaaaa/a
+/b/c/.aaaaa/a// /b/c/.aaaaa/a
+/b/c/.aaaaa/.aa /b/c/.aaaaa/.aa
+/b/c/.aaaaa/.a. /b/c/.aaaaa/.a.
+/b/c/.aaaaa/.a/ /b/c/.aaaaa/.a
+/b/c/.aaaaa/..a /b/c/.aaaaa/..a
+/b/c/.aaaaa/... /b/c/.aaaaa/...
+/b/c/.aaaaa/../ /b/c
+/b/c/.aaaaa/./a /b/c/.aaaaa/a
+/b/c/.aaaaa/./. /b/c/.aaaaa
+/b/c/.aaaaa/.// /b/c/.aaaaa
+/b/c/.aaaaa//aa /b/c/.aaaaa/aa
+/b/c/.aaaaa//a. /b/c/.aaaaa/a.
+/b/c/.aaaaa//a/ /b/c/.aaaaa/a
+/b/c/.aaaaa//.a /b/c/.aaaaa/.a
+/b/c/.aaaaa//.. /b/c
+/b/c/.aaaaa//./ /b/c/.aaaaa
+/b/c/.aaaaa///a /b/c/.aaaaa/a
+/b/c/.aaaaa///. /b/c/.aaaaa
+/b/c/.aaaaa//// /b/c/.aaaaa
+/b/c/.aaaa.aaaa /b/c/.aaaa.aaaa
+/b/c/.aaaa.aaa. /b/c/.aaaa.aaa.
+/b/c/.aaaa.aaa/ /b/c/.aaaa.aaa
+/b/c/.aaaa.aa.a /b/c/.aaaa.aa.a
+/b/c/.aaaa.aa.. /b/c/.aaaa.aa..
+/b/c/.aaaa.aa./ /b/c/.aaaa.aa.
+/b/c/.aaaa.aa/a /b/c/.aaaa.aa/a
+/b/c/.aaaa.aa/. /b/c/.aaaa.aa
+/b/c/.aaaa.aa// /b/c/.aaaa.aa
+/b/c/.aaaa.a.aa /b/c/.aaaa.a.aa
+/b/c/.aaaa.a.a. /b/c/.aaaa.a.a.
+/b/c/.aaaa.a.a/ /b/c/.aaaa.a.a
+/b/c/.aaaa.a..a /b/c/.aaaa.a..a
+/b/c/.aaaa.a... /b/c/.aaaa.a...
+/b/c/.aaaa.a../ /b/c/.aaaa.a..
+/b/c/.aaaa.a./a /b/c/.aaaa.a./a
+/b/c/.aaaa.a./. /b/c/.aaaa.a.
+/b/c/.aaaa.a.// /b/c/.aaaa.a.
+/b/c/.aaaa.a/aa /b/c/.aaaa.a/aa
+/b/c/.aaaa.a/a. /b/c/.aaaa.a/a.
+/b/c/.aaaa.a/a/ /b/c/.aaaa.a/a
+/b/c/.aaaa.a/.a /b/c/.aaaa.a/.a
+/b/c/.aaaa.a/.. /b/c
+/b/c/.aaaa.a/./ /b/c/.aaaa.a
+/b/c/.aaaa.a//a /b/c/.aaaa.a/a
+/b/c/.aaaa.a//. /b/c/.aaaa.a
+/b/c/.aaaa.a/// /b/c/.aaaa.a
+/b/c/.aaaa..aaa /b/c/.aaaa..aaa
+/b/c/.aaaa..aa. /b/c/.aaaa..aa.
+/b/c/.aaaa..aa/ /b/c/.aaaa..aa
+/b/c/.aaaa..a.a /b/c/.aaaa..a.a
+/b/c/.aaaa..a.. /b/c/.aaaa..a..
+/b/c/.aaaa..a./ /b/c/.aaaa..a.
+/b/c/.aaaa..a/a /b/c/.aaaa..a/a
+/b/c/.aaaa..a/. /b/c/.aaaa..a
+/b/c/.aaaa..a// /b/c/.aaaa..a
+/b/c/.aaaa...aa /b/c/.aaaa...aa
+/b/c/.aaaa...a. /b/c/.aaaa...a.
+/b/c/.aaaa...a/ /b/c/.aaaa...a
+/b/c/.aaaa....a /b/c/.aaaa....a
+/b/c/.aaaa..... /b/c/.aaaa.....
+/b/c/.aaaa..../ /b/c/.aaaa....
+/b/c/.aaaa.../a /b/c/.aaaa.../a
+/b/c/.aaaa.../. /b/c/.aaaa...
+/b/c/.aaaa...// /b/c/.aaaa...
+/b/c/.aaaa../aa /b/c/.aaaa../aa
+/b/c/.aaaa../a. /b/c/.aaaa../a.
+/b/c/.aaaa../a/ /b/c/.aaaa../a
+/b/c/.aaaa../.a /b/c/.aaaa../.a
+/b/c/.aaaa../.. /b/c
+/b/c/.aaaa.././ /b/c/.aaaa..
+/b/c/.aaaa..//a /b/c/.aaaa../a
+/b/c/.aaaa..//. /b/c/.aaaa..
+/b/c/.aaaa../// /b/c/.aaaa..
+/b/c/.aaaa./aaa /b/c/.aaaa./aaa
+/b/c/.aaaa./aa. /b/c/.aaaa./aa.
+/b/c/.aaaa./aa/ /b/c/.aaaa./aa
+/b/c/.aaaa./a.a /b/c/.aaaa./a.a
+/b/c/.aaaa./a.. /b/c/.aaaa./a..
+/b/c/.aaaa./a./ /b/c/.aaaa./a.
+/b/c/.aaaa./a/a /b/c/.aaaa./a/a
+/b/c/.aaaa./a/. /b/c/.aaaa./a
+/b/c/.aaaa./a// /b/c/.aaaa./a
+/b/c/.aaaa./.aa /b/c/.aaaa./.aa
+/b/c/.aaaa./.a. /b/c/.aaaa./.a.
+/b/c/.aaaa./.a/ /b/c/.aaaa./.a
+/b/c/.aaaa./..a /b/c/.aaaa./..a
+/b/c/.aaaa./... /b/c/.aaaa./...
+/b/c/.aaaa./../ /b/c
+/b/c/.aaaa././a /b/c/.aaaa./a
+/b/c/.aaaa././. /b/c/.aaaa.
+/b/c/.aaaa./.// /b/c/.aaaa.
+/b/c/.aaaa.//aa /b/c/.aaaa./aa
+/b/c/.aaaa.//a. /b/c/.aaaa./a.
+/b/c/.aaaa.//a/ /b/c/.aaaa./a
+/b/c/.aaaa.//.a /b/c/.aaaa./.a
+/b/c/.aaaa.//.. /b/c
+/b/c/.aaaa.//./ /b/c/.aaaa.
+/b/c/.aaaa.///a /b/c/.aaaa./a
+/b/c/.aaaa.///. /b/c/.aaaa.
+/b/c/.aaaa.//// /b/c/.aaaa.
+/b/c/.aaaa/aaaa /b/c/.aaaa/aaaa
+/b/c/.aaaa/aaa. /b/c/.aaaa/aaa.
+/b/c/.aaaa/aaa/ /b/c/.aaaa/aaa
+/b/c/.aaaa/aa.a /b/c/.aaaa/aa.a
+/b/c/.aaaa/aa.. /b/c/.aaaa/aa..
+/b/c/.aaaa/aa./ /b/c/.aaaa/aa.
+/b/c/.aaaa/aa/a /b/c/.aaaa/aa/a
+/b/c/.aaaa/aa/. /b/c/.aaaa/aa
+/b/c/.aaaa/aa// /b/c/.aaaa/aa
+/b/c/.aaaa/a.aa /b/c/.aaaa/a.aa
+/b/c/.aaaa/a.a. /b/c/.aaaa/a.a.
+/b/c/.aaaa/a.a/ /b/c/.aaaa/a.a
+/b/c/.aaaa/a..a /b/c/.aaaa/a..a
+/b/c/.aaaa/a... /b/c/.aaaa/a...
+/b/c/.aaaa/a../ /b/c/.aaaa/a..
+/b/c/.aaaa/a./a /b/c/.aaaa/a./a
+/b/c/.aaaa/a./. /b/c/.aaaa/a.
+/b/c/.aaaa/a.// /b/c/.aaaa/a.
+/b/c/.aaaa/a/aa /b/c/.aaaa/a/aa
+/b/c/.aaaa/a/a. /b/c/.aaaa/a/a.
+/b/c/.aaaa/a/a/ /b/c/.aaaa/a/a
+/b/c/.aaaa/a/.a /b/c/.aaaa/a/.a
+/b/c/.aaaa/a/.. /b/c/.aaaa
+/b/c/.aaaa/a/./ /b/c/.aaaa/a
+/b/c/.aaaa/a//a /b/c/.aaaa/a/a
+/b/c/.aaaa/a//. /b/c/.aaaa/a
+/b/c/.aaaa/a/// /b/c/.aaaa/a
+/b/c/.aaaa/.aaa /b/c/.aaaa/.aaa
+/b/c/.aaaa/.aa. /b/c/.aaaa/.aa.
+/b/c/.aaaa/.aa/ /b/c/.aaaa/.aa
+/b/c/.aaaa/.a.a /b/c/.aaaa/.a.a
+/b/c/.aaaa/.a.. /b/c/.aaaa/.a..
+/b/c/.aaaa/.a./ /b/c/.aaaa/.a.
+/b/c/.aaaa/.a/a /b/c/.aaaa/.a/a
+/b/c/.aaaa/.a/. /b/c/.aaaa/.a
+/b/c/.aaaa/.a// /b/c/.aaaa/.a
+/b/c/.aaaa/..aa /b/c/.aaaa/..aa
+/b/c/.aaaa/..a. /b/c/.aaaa/..a.
+/b/c/.aaaa/..a/ /b/c/.aaaa/..a
+/b/c/.aaaa/...a /b/c/.aaaa/...a
+/b/c/.aaaa/.... /b/c/.aaaa/....
+/b/c/.aaaa/.../ /b/c/.aaaa/...
+/b/c/.aaaa/../a /b/c/a
+/b/c/.aaaa/../. /b/c
+/b/c/.aaaa/..// /b/c
+/b/c/.aaaa/./aa /b/c/.aaaa/aa
+/b/c/.aaaa/./a. /b/c/.aaaa/a.
+/b/c/.aaaa/./a/ /b/c/.aaaa/a
+/b/c/.aaaa/./.a /b/c/.aaaa/.a
+/b/c/.aaaa/./.. /b/c
+/b/c/.aaaa/././ /b/c/.aaaa
+/b/c/.aaaa/.//a /b/c/.aaaa/a
+/b/c/.aaaa/.//. /b/c/.aaaa
+/b/c/.aaaa/./// /b/c/.aaaa
+/b/c/.aaaa//aaa /b/c/.aaaa/aaa
+/b/c/.aaaa//aa. /b/c/.aaaa/aa.
+/b/c/.aaaa//aa/ /b/c/.aaaa/aa
+/b/c/.aaaa//a.a /b/c/.aaaa/a.a
+/b/c/.aaaa//a.. /b/c/.aaaa/a..
+/b/c/.aaaa//a./ /b/c/.aaaa/a.
+/b/c/.aaaa//a/a /b/c/.aaaa/a/a
+/b/c/.aaaa//a/. /b/c/.aaaa/a
+/b/c/.aaaa//a// /b/c/.aaaa/a
+/b/c/.aaaa//.aa /b/c/.aaaa/.aa
+/b/c/.aaaa//.a. /b/c/.aaaa/.a.
+/b/c/.aaaa//.a/ /b/c/.aaaa/.a
+/b/c/.aaaa//..a /b/c/.aaaa/..a
+/b/c/.aaaa//... /b/c/.aaaa/...
+/b/c/.aaaa//../ /b/c
+/b/c/.aaaa//./a /b/c/.aaaa/a
+/b/c/.aaaa//./. /b/c/.aaaa
+/b/c/.aaaa//.// /b/c/.aaaa
+/b/c/.aaaa///aa /b/c/.aaaa/aa
+/b/c/.aaaa///a. /b/c/.aaaa/a.
+/b/c/.aaaa///a/ /b/c/.aaaa/a
+/b/c/.aaaa///.a /b/c/.aaaa/.a
+/b/c/.aaaa///.. /b/c
+/b/c/.aaaa///./ /b/c/.aaaa
+/b/c/.aaaa////a /b/c/.aaaa/a
+/b/c/.aaaa////. /b/c/.aaaa
+/b/c/.aaaa///// /b/c/.aaaa
+/b/c/.aaa.aaaaa /b/c/.aaa.aaaaa
+/b/c/.aaa.aaaa. /b/c/.aaa.aaaa.
+/b/c/.aaa.aaaa/ /b/c/.aaa.aaaa
+/b/c/.aaa.aaa.a /b/c/.aaa.aaa.a
+/b/c/.aaa.aaa.. /b/c/.aaa.aaa..
+/b/c/.aaa.aaa./ /b/c/.aaa.aaa.
+/b/c/.aaa.aaa/a /b/c/.aaa.aaa/a
+/b/c/.aaa.aaa/. /b/c/.aaa.aaa
+/b/c/.aaa.aaa// /b/c/.aaa.aaa
+/b/c/.aaa.aa.aa /b/c/.aaa.aa.aa
+/b/c/.aaa.aa.a. /b/c/.aaa.aa.a.
+/b/c/.aaa.aa.a/ /b/c/.aaa.aa.a
+/b/c/.aaa.aa..a /b/c/.aaa.aa..a
+/b/c/.aaa.aa... /b/c/.aaa.aa...
+/b/c/.aaa.aa../ /b/c/.aaa.aa..
+/b/c/.aaa.aa./a /b/c/.aaa.aa./a
+/b/c/.aaa.aa./. /b/c/.aaa.aa.
+/b/c/.aaa.aa.// /b/c/.aaa.aa.
+/b/c/.aaa.aa/aa /b/c/.aaa.aa/aa
+/b/c/.aaa.aa/a. /b/c/.aaa.aa/a.
+/b/c/.aaa.aa/a/ /b/c/.aaa.aa/a
+/b/c/.aaa.aa/.a /b/c/.aaa.aa/.a
+/b/c/.aaa.aa/.. /b/c
+/b/c/.aaa.aa/./ /b/c/.aaa.aa
+/b/c/.aaa.aa//a /b/c/.aaa.aa/a
+/b/c/.aaa.aa//. /b/c/.aaa.aa
+/b/c/.aaa.aa/// /b/c/.aaa.aa
+/b/c/.aaa.a.aaa /b/c/.aaa.a.aaa
+/b/c/.aaa.a.aa. /b/c/.aaa.a.aa.
+/b/c/.aaa.a.aa/ /b/c/.aaa.a.aa
+/b/c/.aaa.a.a.a /b/c/.aaa.a.a.a
+/b/c/.aaa.a.a.. /b/c/.aaa.a.a..
+/b/c/.aaa.a.a./ /b/c/.aaa.a.a.
+/b/c/.aaa.a.a/a /b/c/.aaa.a.a/a
+/b/c/.aaa.a.a/. /b/c/.aaa.a.a
+/b/c/.aaa.a.a// /b/c/.aaa.a.a
+/b/c/.aaa.a..aa /b/c/.aaa.a..aa
+/b/c/.aaa.a..a. /b/c/.aaa.a..a.
+/b/c/.aaa.a..a/ /b/c/.aaa.a..a
+/b/c/.aaa.a...a /b/c/.aaa.a...a
+/b/c/.aaa.a.... /b/c/.aaa.a....
+/b/c/.aaa.a.../ /b/c/.aaa.a...
+/b/c/.aaa.a../a /b/c/.aaa.a../a
+/b/c/.aaa.a../. /b/c/.aaa.a..
+/b/c/.aaa.a..// /b/c/.aaa.a..
+/b/c/.aaa.a./aa /b/c/.aaa.a./aa
+/b/c/.aaa.a./a. /b/c/.aaa.a./a.
+/b/c/.aaa.a./a/ /b/c/.aaa.a./a
+/b/c/.aaa.a./.a /b/c/.aaa.a./.a
+/b/c/.aaa.a./.. /b/c
+/b/c/.aaa.a././ /b/c/.aaa.a.
+/b/c/.aaa.a.//a /b/c/.aaa.a./a
+/b/c/.aaa.a.//. /b/c/.aaa.a.
+/b/c/.aaa.a./// /b/c/.aaa.a.
+/b/c/.aaa.a/aaa /b/c/.aaa.a/aaa
+/b/c/.aaa.a/aa. /b/c/.aaa.a/aa.
+/b/c/.aaa.a/aa/ /b/c/.aaa.a/aa
+/b/c/.aaa.a/a.a /b/c/.aaa.a/a.a
+/b/c/.aaa.a/a.. /b/c/.aaa.a/a..
+/b/c/.aaa.a/a./ /b/c/.aaa.a/a.
+/b/c/.aaa.a/a/a /b/c/.aaa.a/a/a
+/b/c/.aaa.a/a/. /b/c/.aaa.a/a
+/b/c/.aaa.a/a// /b/c/.aaa.a/a
+/b/c/.aaa.a/.aa /b/c/.aaa.a/.aa
+/b/c/.aaa.a/.a. /b/c/.aaa.a/.a.
+/b/c/.aaa.a/.a/ /b/c/.aaa.a/.a
+/b/c/.aaa.a/..a /b/c/.aaa.a/..a
+/b/c/.aaa.a/... /b/c/.aaa.a/...
+/b/c/.aaa.a/../ /b/c
+/b/c/.aaa.a/./a /b/c/.aaa.a/a
+/b/c/.aaa.a/./. /b/c/.aaa.a
+/b/c/.aaa.a/.// /b/c/.aaa.a
+/b/c/.aaa.a//aa /b/c/.aaa.a/aa
+/b/c/.aaa.a//a. /b/c/.aaa.a/a.
+/b/c/.aaa.a//a/ /b/c/.aaa.a/a
+/b/c/.aaa.a//.a /b/c/.aaa.a/.a
+/b/c/.aaa.a//.. /b/c
+/b/c/.aaa.a//./ /b/c/.aaa.a
+/b/c/.aaa.a///a /b/c/.aaa.a/a
+/b/c/.aaa.a///. /b/c/.aaa.a
+/b/c/.aaa.a//// /b/c/.aaa.a
+/b/c/.aaa..aaaa /b/c/.aaa..aaaa
+/b/c/.aaa..aaa. /b/c/.aaa..aaa.
+/b/c/.aaa..aaa/ /b/c/.aaa..aaa
+/b/c/.aaa..aa.a /b/c/.aaa..aa.a
+/b/c/.aaa..aa.. /b/c/.aaa..aa..
+/b/c/.aaa..aa./ /b/c/.aaa..aa.
+/b/c/.aaa..aa/a /b/c/.aaa..aa/a
+/b/c/.aaa..aa/. /b/c/.aaa..aa
+/b/c/.aaa..aa// /b/c/.aaa..aa
+/b/c/.aaa..a.aa /b/c/.aaa..a.aa
+/b/c/.aaa..a.a. /b/c/.aaa..a.a.
+/b/c/.aaa..a.a/ /b/c/.aaa..a.a
+/b/c/.aaa..a..a /b/c/.aaa..a..a
+/b/c/.aaa..a... /b/c/.aaa..a...
+/b/c/.aaa..a../ /b/c/.aaa..a..
+/b/c/.aaa..a./a /b/c/.aaa..a./a
+/b/c/.aaa..a./. /b/c/.aaa..a.
+/b/c/.aaa..a.// /b/c/.aaa..a.
+/b/c/.aaa..a/aa /b/c/.aaa..a/aa
+/b/c/.aaa..a/a. /b/c/.aaa..a/a.
+/b/c/.aaa..a/a/ /b/c/.aaa..a/a
+/b/c/.aaa..a/.a /b/c/.aaa..a/.a
+/b/c/.aaa..a/.. /b/c
+/b/c/.aaa..a/./ /b/c/.aaa..a
+/b/c/.aaa..a//a /b/c/.aaa..a/a
+/b/c/.aaa..a//. /b/c/.aaa..a
+/b/c/.aaa..a/// /b/c/.aaa..a
+/b/c/.aaa...aaa /b/c/.aaa...aaa
+/b/c/.aaa...aa. /b/c/.aaa...aa.
+/b/c/.aaa...aa/ /b/c/.aaa...aa
+/b/c/.aaa...a.a /b/c/.aaa...a.a
+/b/c/.aaa...a.. /b/c/.aaa...a..
+/b/c/.aaa...a./ /b/c/.aaa...a.
+/b/c/.aaa...a/a /b/c/.aaa...a/a
+/b/c/.aaa...a/. /b/c/.aaa...a
+/b/c/.aaa...a// /b/c/.aaa...a
+/b/c/.aaa....aa /b/c/.aaa....aa
+/b/c/.aaa....a. /b/c/.aaa....a.
+/b/c/.aaa....a/ /b/c/.aaa....a
+/b/c/.aaa.....a /b/c/.aaa.....a
+/b/c/.aaa...... /b/c/.aaa......
+/b/c/.aaa...../ /b/c/.aaa.....
+/b/c/.aaa..../a /b/c/.aaa..../a
+/b/c/.aaa..../. /b/c/.aaa....
+/b/c/.aaa....// /b/c/.aaa....
+/b/c/.aaa.../aa /b/c/.aaa.../aa
+/b/c/.aaa.../a. /b/c/.aaa.../a.
+/b/c/.aaa.../a/ /b/c/.aaa.../a
+/b/c/.aaa.../.a /b/c/.aaa.../.a
+/b/c/.aaa.../.. /b/c
+/b/c/.aaa..././ /b/c/.aaa...
+/b/c/.aaa...//a /b/c/.aaa.../a
+/b/c/.aaa...//. /b/c/.aaa...
+/b/c/.aaa.../// /b/c/.aaa...
+/b/c/.aaa../aaa /b/c/.aaa../aaa
+/b/c/.aaa../aa. /b/c/.aaa../aa.
+/b/c/.aaa../aa/ /b/c/.aaa../aa
+/b/c/.aaa../a.a /b/c/.aaa../a.a
+/b/c/.aaa../a.. /b/c/.aaa../a..
+/b/c/.aaa../a./ /b/c/.aaa../a.
+/b/c/.aaa../a/a /b/c/.aaa../a/a
+/b/c/.aaa../a/. /b/c/.aaa../a
+/b/c/.aaa../a// /b/c/.aaa../a
+/b/c/.aaa../.aa /b/c/.aaa../.aa
+/b/c/.aaa../.a. /b/c/.aaa../.a.
+/b/c/.aaa../.a/ /b/c/.aaa../.a
+/b/c/.aaa../..a /b/c/.aaa../..a
+/b/c/.aaa../... /b/c/.aaa../...
+/b/c/.aaa../../ /b/c
+/b/c/.aaa.././a /b/c/.aaa../a
+/b/c/.aaa.././. /b/c/.aaa..
+/b/c/.aaa../.// /b/c/.aaa..
+/b/c/.aaa..//aa /b/c/.aaa../aa
+/b/c/.aaa..//a. /b/c/.aaa../a.
+/b/c/.aaa..//a/ /b/c/.aaa../a
+/b/c/.aaa..//.a /b/c/.aaa../.a
+/b/c/.aaa..//.. /b/c
+/b/c/.aaa..//./ /b/c/.aaa..
+/b/c/.aaa..///a /b/c/.aaa../a
+/b/c/.aaa..///. /b/c/.aaa..
+/b/c/.aaa..//// /b/c/.aaa..
+/b/c/.aaa./aaaa /b/c/.aaa./aaaa
+/b/c/.aaa./aaa. /b/c/.aaa./aaa.
+/b/c/.aaa./aaa/ /b/c/.aaa./aaa
+/b/c/.aaa./aa.a /b/c/.aaa./aa.a
+/b/c/.aaa./aa.. /b/c/.aaa./aa..
+/b/c/.aaa./aa./ /b/c/.aaa./aa.
+/b/c/.aaa./aa/a /b/c/.aaa./aa/a
+/b/c/.aaa./aa/. /b/c/.aaa./aa
+/b/c/.aaa./aa// /b/c/.aaa./aa
+/b/c/.aaa./a.aa /b/c/.aaa./a.aa
+/b/c/.aaa./a.a. /b/c/.aaa./a.a.
+/b/c/.aaa./a.a/ /b/c/.aaa./a.a
+/b/c/.aaa./a..a /b/c/.aaa./a..a
+/b/c/.aaa./a... /b/c/.aaa./a...
+/b/c/.aaa./a../ /b/c/.aaa./a..
+/b/c/.aaa./a./a /b/c/.aaa./a./a
+/b/c/.aaa./a./. /b/c/.aaa./a.
+/b/c/.aaa./a.// /b/c/.aaa./a.
+/b/c/.aaa./a/aa /b/c/.aaa./a/aa
+/b/c/.aaa./a/a. /b/c/.aaa./a/a.
+/b/c/.aaa./a/a/ /b/c/.aaa./a/a
+/b/c/.aaa./a/.a /b/c/.aaa./a/.a
+/b/c/.aaa./a/.. /b/c/.aaa.
+/b/c/.aaa./a/./ /b/c/.aaa./a
+/b/c/.aaa./a//a /b/c/.aaa./a/a
+/b/c/.aaa./a//. /b/c/.aaa./a
+/b/c/.aaa./a/// /b/c/.aaa./a
+/b/c/.aaa./.aaa /b/c/.aaa./.aaa
+/b/c/.aaa./.aa. /b/c/.aaa./.aa.
+/b/c/.aaa./.aa/ /b/c/.aaa./.aa
+/b/c/.aaa./.a.a /b/c/.aaa./.a.a
+/b/c/.aaa./.a.. /b/c/.aaa./.a..
+/b/c/.aaa./.a./ /b/c/.aaa./.a.
+/b/c/.aaa./.a/a /b/c/.aaa./.a/a
+/b/c/.aaa./.a/. /b/c/.aaa./.a
+/b/c/.aaa./.a// /b/c/.aaa./.a
+/b/c/.aaa./..aa /b/c/.aaa./..aa
+/b/c/.aaa./..a. /b/c/.aaa./..a.
+/b/c/.aaa./..a/ /b/c/.aaa./..a
+/b/c/.aaa./...a /b/c/.aaa./...a
+/b/c/.aaa./.... /b/c/.aaa./....
+/b/c/.aaa./.../ /b/c/.aaa./...
+/b/c/.aaa./../a /b/c/a
+/b/c/.aaa./../. /b/c
+/b/c/.aaa./..// /b/c
+/b/c/.aaa././aa /b/c/.aaa./aa
+/b/c/.aaa././a. /b/c/.aaa./a.
+/b/c/.aaa././a/ /b/c/.aaa./a
+/b/c/.aaa././.a /b/c/.aaa./.a
+/b/c/.aaa././.. /b/c
+/b/c/.aaa./././ /b/c/.aaa.
+/b/c/.aaa././/a /b/c/.aaa./a
+/b/c/.aaa././/. /b/c/.aaa.
+/b/c/.aaa././// /b/c/.aaa.
+/b/c/.aaa.//aaa /b/c/.aaa./aaa
+/b/c/.aaa.//aa. /b/c/.aaa./aa.
+/b/c/.aaa.//aa/ /b/c/.aaa./aa
+/b/c/.aaa.//a.a /b/c/.aaa./a.a
+/b/c/.aaa.//a.. /b/c/.aaa./a..
+/b/c/.aaa.//a./ /b/c/.aaa./a.
+/b/c/.aaa.//a/a /b/c/.aaa./a/a
+/b/c/.aaa.//a/. /b/c/.aaa./a
+/b/c/.aaa.//a// /b/c/.aaa./a
+/b/c/.aaa.//.aa /b/c/.aaa./.aa
+/b/c/.aaa.//.a. /b/c/.aaa./.a.
+/b/c/.aaa.//.a/ /b/c/.aaa./.a
+/b/c/.aaa.//..a /b/c/.aaa./..a
+/b/c/.aaa.//... /b/c/.aaa./...
+/b/c/.aaa.//../ /b/c
+/b/c/.aaa.//./a /b/c/.aaa./a
+/b/c/.aaa.//./. /b/c/.aaa.
+/b/c/.aaa.//.// /b/c/.aaa.
+/b/c/.aaa.///aa /b/c/.aaa./aa
+/b/c/.aaa.///a. /b/c/.aaa./a.
+/b/c/.aaa.///a/ /b/c/.aaa./a
+/b/c/.aaa.///.a /b/c/.aaa./.a
+/b/c/.aaa.///.. /b/c
+/b/c/.aaa.///./ /b/c/.aaa.
+/b/c/.aaa.////a /b/c/.aaa./a
+/b/c/.aaa.////. /b/c/.aaa.
+/b/c/.aaa.///// /b/c/.aaa.
+/b/c/.aaa/aaaaa /b/c/.aaa/aaaaa
+/b/c/.aaa/aaaa. /b/c/.aaa/aaaa.
+/b/c/.aaa/aaaa/ /b/c/.aaa/aaaa
+/b/c/.aaa/aaa.a /b/c/.aaa/aaa.a
+/b/c/.aaa/aaa.. /b/c/.aaa/aaa..
+/b/c/.aaa/aaa./ /b/c/.aaa/aaa.
+/b/c/.aaa/aaa/a /b/c/.aaa/aaa/a
+/b/c/.aaa/aaa/. /b/c/.aaa/aaa
+/b/c/.aaa/aaa// /b/c/.aaa/aaa
+/b/c/.aaa/aa.aa /b/c/.aaa/aa.aa
+/b/c/.aaa/aa.a. /b/c/.aaa/aa.a.
+/b/c/.aaa/aa.a/ /b/c/.aaa/aa.a
+/b/c/.aaa/aa..a /b/c/.aaa/aa..a
+/b/c/.aaa/aa... /b/c/.aaa/aa...
+/b/c/.aaa/aa../ /b/c/.aaa/aa..
+/b/c/.aaa/aa./a /b/c/.aaa/aa./a
+/b/c/.aaa/aa./. /b/c/.aaa/aa.
+/b/c/.aaa/aa.// /b/c/.aaa/aa.
+/b/c/.aaa/aa/aa /b/c/.aaa/aa/aa
+/b/c/.aaa/aa/a. /b/c/.aaa/aa/a.
+/b/c/.aaa/aa/a/ /b/c/.aaa/aa/a
+/b/c/.aaa/aa/.a /b/c/.aaa/aa/.a
+/b/c/.aaa/aa/.. /b/c/.aaa
+/b/c/.aaa/aa/./ /b/c/.aaa/aa
+/b/c/.aaa/aa//a /b/c/.aaa/aa/a
+/b/c/.aaa/aa//. /b/c/.aaa/aa
+/b/c/.aaa/aa/// /b/c/.aaa/aa
+/b/c/.aaa/a.aaa /b/c/.aaa/a.aaa
+/b/c/.aaa/a.aa. /b/c/.aaa/a.aa.
+/b/c/.aaa/a.aa/ /b/c/.aaa/a.aa
+/b/c/.aaa/a.a.a /b/c/.aaa/a.a.a
+/b/c/.aaa/a.a.. /b/c/.aaa/a.a..
+/b/c/.aaa/a.a./ /b/c/.aaa/a.a.
+/b/c/.aaa/a.a/a /b/c/.aaa/a.a/a
+/b/c/.aaa/a.a/. /b/c/.aaa/a.a
+/b/c/.aaa/a.a// /b/c/.aaa/a.a
+/b/c/.aaa/a..aa /b/c/.aaa/a..aa
+/b/c/.aaa/a..a. /b/c/.aaa/a..a.
+/b/c/.aaa/a..a/ /b/c/.aaa/a..a
+/b/c/.aaa/a...a /b/c/.aaa/a...a
+/b/c/.aaa/a.... /b/c/.aaa/a....
+/b/c/.aaa/a.../ /b/c/.aaa/a...
+/b/c/.aaa/a../a /b/c/.aaa/a../a
+/b/c/.aaa/a../. /b/c/.aaa/a..
+/b/c/.aaa/a..// /b/c/.aaa/a..
+/b/c/.aaa/a./aa /b/c/.aaa/a./aa
+/b/c/.aaa/a./a. /b/c/.aaa/a./a.
+/b/c/.aaa/a./a/ /b/c/.aaa/a./a
+/b/c/.aaa/a./.a /b/c/.aaa/a./.a
+/b/c/.aaa/a./.. /b/c/.aaa
+/b/c/.aaa/a././ /b/c/.aaa/a.
+/b/c/.aaa/a.//a /b/c/.aaa/a./a
+/b/c/.aaa/a.//. /b/c/.aaa/a.
+/b/c/.aaa/a./// /b/c/.aaa/a.
+/b/c/.aaa/a/aaa /b/c/.aaa/a/aaa
+/b/c/.aaa/a/aa. /b/c/.aaa/a/aa.
+/b/c/.aaa/a/aa/ /b/c/.aaa/a/aa
+/b/c/.aaa/a/a.a /b/c/.aaa/a/a.a
+/b/c/.aaa/a/a.. /b/c/.aaa/a/a..
+/b/c/.aaa/a/a./ /b/c/.aaa/a/a.
+/b/c/.aaa/a/a/a /b/c/.aaa/a/a/a
+/b/c/.aaa/a/a/. /b/c/.aaa/a/a
+/b/c/.aaa/a/a// /b/c/.aaa/a/a
+/b/c/.aaa/a/.aa /b/c/.aaa/a/.aa
+/b/c/.aaa/a/.a. /b/c/.aaa/a/.a.
+/b/c/.aaa/a/.a/ /b/c/.aaa/a/.a
+/b/c/.aaa/a/..a /b/c/.aaa/a/..a
+/b/c/.aaa/a/... /b/c/.aaa/a/...
+/b/c/.aaa/a/../ /b/c/.aaa
+/b/c/.aaa/a/./a /b/c/.aaa/a/a
+/b/c/.aaa/a/./. /b/c/.aaa/a
+/b/c/.aaa/a/.// /b/c/.aaa/a
+/b/c/.aaa/a//aa /b/c/.aaa/a/aa
+/b/c/.aaa/a//a. /b/c/.aaa/a/a.
+/b/c/.aaa/a//a/ /b/c/.aaa/a/a
+/b/c/.aaa/a//.a /b/c/.aaa/a/.a
+/b/c/.aaa/a//.. /b/c/.aaa
+/b/c/.aaa/a//./ /b/c/.aaa/a
+/b/c/.aaa/a///a /b/c/.aaa/a/a
+/b/c/.aaa/a///. /b/c/.aaa/a
+/b/c/.aaa/a//// /b/c/.aaa/a
+/b/c/.aaa/.aaaa /b/c/.aaa/.aaaa
+/b/c/.aaa/.aaa. /b/c/.aaa/.aaa.
+/b/c/.aaa/.aaa/ /b/c/.aaa/.aaa
+/b/c/.aaa/.aa.a /b/c/.aaa/.aa.a
+/b/c/.aaa/.aa.. /b/c/.aaa/.aa..
+/b/c/.aaa/.aa./ /b/c/.aaa/.aa.
+/b/c/.aaa/.aa/a /b/c/.aaa/.aa/a
+/b/c/.aaa/.aa/. /b/c/.aaa/.aa
+/b/c/.aaa/.aa// /b/c/.aaa/.aa
+/b/c/.aaa/.a.aa /b/c/.aaa/.a.aa
+/b/c/.aaa/.a.a. /b/c/.aaa/.a.a.
+/b/c/.aaa/.a.a/ /b/c/.aaa/.a.a
+/b/c/.aaa/.a..a /b/c/.aaa/.a..a
+/b/c/.aaa/.a... /b/c/.aaa/.a...
+/b/c/.aaa/.a../ /b/c/.aaa/.a..
+/b/c/.aaa/.a./a /b/c/.aaa/.a./a
+/b/c/.aaa/.a./. /b/c/.aaa/.a.
+/b/c/.aaa/.a.// /b/c/.aaa/.a.
+/b/c/.aaa/.a/aa /b/c/.aaa/.a/aa
+/b/c/.aaa/.a/a. /b/c/.aaa/.a/a.
+/b/c/.aaa/.a/a/ /b/c/.aaa/.a/a
+/b/c/.aaa/.a/.a /b/c/.aaa/.a/.a
+/b/c/.aaa/.a/.. /b/c/.aaa
+/b/c/.aaa/.a/./ /b/c/.aaa/.a
+/b/c/.aaa/.a//a /b/c/.aaa/.a/a
+/b/c/.aaa/.a//. /b/c/.aaa/.a
+/b/c/.aaa/.a/// /b/c/.aaa/.a
+/b/c/.aaa/..aaa /b/c/.aaa/..aaa
+/b/c/.aaa/..aa. /b/c/.aaa/..aa.
+/b/c/.aaa/..aa/ /b/c/.aaa/..aa
+/b/c/.aaa/..a.a /b/c/.aaa/..a.a
+/b/c/.aaa/..a.. /b/c/.aaa/..a..
+/b/c/.aaa/..a./ /b/c/.aaa/..a.
+/b/c/.aaa/..a/a /b/c/.aaa/..a/a
+/b/c/.aaa/..a/. /b/c/.aaa/..a
+/b/c/.aaa/..a// /b/c/.aaa/..a
+/b/c/.aaa/...aa /b/c/.aaa/...aa
+/b/c/.aaa/...a. /b/c/.aaa/...a.
+/b/c/.aaa/...a/ /b/c/.aaa/...a
+/b/c/.aaa/....a /b/c/.aaa/....a
+/b/c/.aaa/..... /b/c/.aaa/.....
+/b/c/.aaa/..../ /b/c/.aaa/....
+/b/c/.aaa/.../a /b/c/.aaa/.../a
+/b/c/.aaa/.../. /b/c/.aaa/...
+/b/c/.aaa/...// /b/c/.aaa/...
+/b/c/.aaa/../aa /b/c/aa
+/b/c/.aaa/../a. /b/c/a.
+/b/c/.aaa/../a/ /b/c/a
+/b/c/.aaa/../.a /b/c/.a
+/b/c/.aaa/../.. /b
+/b/c/.aaa/.././ /b/c
+/b/c/.aaa/..//a /b/c/a
+/b/c/.aaa/..//. /b/c
+/b/c/.aaa/../// /b/c
+/b/c/.aaa/./aaa /b/c/.aaa/aaa
+/b/c/.aaa/./aa. /b/c/.aaa/aa.
+/b/c/.aaa/./aa/ /b/c/.aaa/aa
+/b/c/.aaa/./a.a /b/c/.aaa/a.a
+/b/c/.aaa/./a.. /b/c/.aaa/a..
+/b/c/.aaa/./a./ /b/c/.aaa/a.
+/b/c/.aaa/./a/a /b/c/.aaa/a/a
+/b/c/.aaa/./a/. /b/c/.aaa/a
+/b/c/.aaa/./a// /b/c/.aaa/a
+/b/c/.aaa/./.aa /b/c/.aaa/.aa
+/b/c/.aaa/./.a. /b/c/.aaa/.a.
+/b/c/.aaa/./.a/ /b/c/.aaa/.a
+/b/c/.aaa/./..a /b/c/.aaa/..a
+/b/c/.aaa/./... /b/c/.aaa/...
+/b/c/.aaa/./../ /b/c
+/b/c/.aaa/././a /b/c/.aaa/a
+/b/c/.aaa/././. /b/c/.aaa
+/b/c/.aaa/./.// /b/c/.aaa
+/b/c/.aaa/.//aa /b/c/.aaa/aa
+/b/c/.aaa/.//a. /b/c/.aaa/a.
+/b/c/.aaa/.//a/ /b/c/.aaa/a
+/b/c/.aaa/.//.a /b/c/.aaa/.a
+/b/c/.aaa/.//.. /b/c
+/b/c/.aaa/.//./ /b/c/.aaa
+/b/c/.aaa/.///a /b/c/.aaa/a
+/b/c/.aaa/.///. /b/c/.aaa
+/b/c/.aaa/.//// /b/c/.aaa
+/b/c/.aaa//aaaa /b/c/.aaa/aaaa
+/b/c/.aaa//aaa. /b/c/.aaa/aaa.
+/b/c/.aaa//aaa/ /b/c/.aaa/aaa
+/b/c/.aaa//aa.a /b/c/.aaa/aa.a
+/b/c/.aaa//aa.. /b/c/.aaa/aa..
+/b/c/.aaa//aa./ /b/c/.aaa/aa.
+/b/c/.aaa//aa/a /b/c/.aaa/aa/a
+/b/c/.aaa//aa/. /b/c/.aaa/aa
+/b/c/.aaa//aa// /b/c/.aaa/aa
+/b/c/.aaa//a.aa /b/c/.aaa/a.aa
+/b/c/.aaa//a.a. /b/c/.aaa/a.a.
+/b/c/.aaa//a.a/ /b/c/.aaa/a.a
+/b/c/.aaa//a..a /b/c/.aaa/a..a
+/b/c/.aaa//a... /b/c/.aaa/a...
+/b/c/.aaa//a../ /b/c/.aaa/a..
+/b/c/.aaa//a./a /b/c/.aaa/a./a
+/b/c/.aaa//a./. /b/c/.aaa/a.
+/b/c/.aaa//a.// /b/c/.aaa/a.
+/b/c/.aaa//a/aa /b/c/.aaa/a/aa
+/b/c/.aaa//a/a. /b/c/.aaa/a/a.
+/b/c/.aaa//a/a/ /b/c/.aaa/a/a
+/b/c/.aaa//a/.a /b/c/.aaa/a/.a
+/b/c/.aaa//a/.. /b/c/.aaa
+/b/c/.aaa//a/./ /b/c/.aaa/a
+/b/c/.aaa//a//a /b/c/.aaa/a/a
+/b/c/.aaa//a//. /b/c/.aaa/a
+/b/c/.aaa//a/// /b/c/.aaa/a
+/b/c/.aaa//.aaa /b/c/.aaa/.aaa
+/b/c/.aaa//.aa. /b/c/.aaa/.aa.
+/b/c/.aaa//.aa/ /b/c/.aaa/.aa
+/b/c/.aaa//.a.a /b/c/.aaa/.a.a
+/b/c/.aaa//.a.. /b/c/.aaa/.a..
+/b/c/.aaa//.a./ /b/c/.aaa/.a.
+/b/c/.aaa//.a/a /b/c/.aaa/.a/a
+/b/c/.aaa//.a/. /b/c/.aaa/.a
+/b/c/.aaa//.a// /b/c/.aaa/.a
+/b/c/.aaa//..aa /b/c/.aaa/..aa
+/b/c/.aaa//..a. /b/c/.aaa/..a.
+/b/c/.aaa//..a/ /b/c/.aaa/..a
+/b/c/.aaa//...a /b/c/.aaa/...a
+/b/c/.aaa//.... /b/c/.aaa/....
+/b/c/.aaa//.../ /b/c/.aaa/...
+/b/c/.aaa//../a /b/c/a
+/b/c/.aaa//../. /b/c
+/b/c/.aaa//..// /b/c
+/b/c/.aaa//./aa /b/c/.aaa/aa
+/b/c/.aaa//./a. /b/c/.aaa/a.
+/b/c/.aaa//./a/ /b/c/.aaa/a
+/b/c/.aaa//./.a /b/c/.aaa/.a
+/b/c/.aaa//./.. /b/c
+/b/c/.aaa//././ /b/c/.aaa
+/b/c/.aaa//.//a /b/c/.aaa/a
+/b/c/.aaa//.//. /b/c/.aaa
+/b/c/.aaa//./// /b/c/.aaa
+/b/c/.aaa///aaa /b/c/.aaa/aaa
+/b/c/.aaa///aa. /b/c/.aaa/aa.
+/b/c/.aaa///aa/ /b/c/.aaa/aa
+/b/c/.aaa///a.a /b/c/.aaa/a.a
+/b/c/.aaa///a.. /b/c/.aaa/a..
+/b/c/.aaa///a./ /b/c/.aaa/a.
+/b/c/.aaa///a/a /b/c/.aaa/a/a
+/b/c/.aaa///a/. /b/c/.aaa/a
+/b/c/.aaa///a// /b/c/.aaa/a
+/b/c/.aaa///.aa /b/c/.aaa/.aa
+/b/c/.aaa///.a. /b/c/.aaa/.a.
+/b/c/.aaa///.a/ /b/c/.aaa/.a
+/b/c/.aaa///..a /b/c/.aaa/..a
+/b/c/.aaa///... /b/c/.aaa/...
+/b/c/.aaa///../ /b/c
+/b/c/.aaa///./a /b/c/.aaa/a
+/b/c/.aaa///./. /b/c/.aaa
+/b/c/.aaa///.// /b/c/.aaa
+/b/c/.aaa////aa /b/c/.aaa/aa
+/b/c/.aaa////a. /b/c/.aaa/a.
+/b/c/.aaa////a/ /b/c/.aaa/a
+/b/c/.aaa////.a /b/c/.aaa/.a
+/b/c/.aaa////.. /b/c
+/b/c/.aaa////./ /b/c/.aaa
+/b/c/.aaa/////a /b/c/.aaa/a
+/b/c/.aaa/////. /b/c/.aaa
+/b/c/.aaa////// /b/c/.aaa
+/b/c/.aa.aaaaaa /b/c/.aa.aaaaaa
+/b/c/.aa.aaaaa. /b/c/.aa.aaaaa.
+/b/c/.aa.aaaaa/ /b/c/.aa.aaaaa
+/b/c/.aa.aaaa.a /b/c/.aa.aaaa.a
+/b/c/.aa.aaaa.. /b/c/.aa.aaaa..
+/b/c/.aa.aaaa./ /b/c/.aa.aaaa.
+/b/c/.aa.aaaa/a /b/c/.aa.aaaa/a
+/b/c/.aa.aaaa/. /b/c/.aa.aaaa
+/b/c/.aa.aaaa// /b/c/.aa.aaaa
+/b/c/.aa.aaa.aa /b/c/.aa.aaa.aa
+/b/c/.aa.aaa.a. /b/c/.aa.aaa.a.
+/b/c/.aa.aaa.a/ /b/c/.aa.aaa.a
+/b/c/.aa.aaa..a /b/c/.aa.aaa..a
+/b/c/.aa.aaa... /b/c/.aa.aaa...
+/b/c/.aa.aaa../ /b/c/.aa.aaa..
+/b/c/.aa.aaa./a /b/c/.aa.aaa./a
+/b/c/.aa.aaa./. /b/c/.aa.aaa.
+/b/c/.aa.aaa.// /b/c/.aa.aaa.
+/b/c/.aa.aaa/aa /b/c/.aa.aaa/aa
+/b/c/.aa.aaa/a. /b/c/.aa.aaa/a.
+/b/c/.aa.aaa/a/ /b/c/.aa.aaa/a
+/b/c/.aa.aaa/.a /b/c/.aa.aaa/.a
+/b/c/.aa.aaa/.. /b/c
+/b/c/.aa.aaa/./ /b/c/.aa.aaa
+/b/c/.aa.aaa//a /b/c/.aa.aaa/a
+/b/c/.aa.aaa//. /b/c/.aa.aaa
+/b/c/.aa.aaa/// /b/c/.aa.aaa
+/b/c/.aa.aa.aaa /b/c/.aa.aa.aaa
+/b/c/.aa.aa.aa. /b/c/.aa.aa.aa.
+/b/c/.aa.aa.aa/ /b/c/.aa.aa.aa
+/b/c/.aa.aa.a.a /b/c/.aa.aa.a.a
+/b/c/.aa.aa.a.. /b/c/.aa.aa.a..
+/b/c/.aa.aa.a./ /b/c/.aa.aa.a.
+/b/c/.aa.aa.a/a /b/c/.aa.aa.a/a
+/b/c/.aa.aa.a/. /b/c/.aa.aa.a
+/b/c/.aa.aa.a// /b/c/.aa.aa.a
+/b/c/.aa.aa..aa /b/c/.aa.aa..aa
+/b/c/.aa.aa..a. /b/c/.aa.aa..a.
+/b/c/.aa.aa..a/ /b/c/.aa.aa..a
+/b/c/.aa.aa...a /b/c/.aa.aa...a
+/b/c/.aa.aa.... /b/c/.aa.aa....
+/b/c/.aa.aa.../ /b/c/.aa.aa...
+/b/c/.aa.aa../a /b/c/.aa.aa../a
+/b/c/.aa.aa../. /b/c/.aa.aa..
+/b/c/.aa.aa..// /b/c/.aa.aa..
+/b/c/.aa.aa./aa /b/c/.aa.aa./aa
+/b/c/.aa.aa./a. /b/c/.aa.aa./a.
+/b/c/.aa.aa./a/ /b/c/.aa.aa./a
+/b/c/.aa.aa./.a /b/c/.aa.aa./.a
+/b/c/.aa.aa./.. /b/c
+/b/c/.aa.aa././ /b/c/.aa.aa.
+/b/c/.aa.aa.//a /b/c/.aa.aa./a
+/b/c/.aa.aa.//. /b/c/.aa.aa.
+/b/c/.aa.aa./// /b/c/.aa.aa.
+/b/c/.aa.aa/aaa /b/c/.aa.aa/aaa
+/b/c/.aa.aa/aa. /b/c/.aa.aa/aa.
+/b/c/.aa.aa/aa/ /b/c/.aa.aa/aa
+/b/c/.aa.aa/a.a /b/c/.aa.aa/a.a
+/b/c/.aa.aa/a.. /b/c/.aa.aa/a..
+/b/c/.aa.aa/a./ /b/c/.aa.aa/a.
+/b/c/.aa.aa/a/a /b/c/.aa.aa/a/a
+/b/c/.aa.aa/a/. /b/c/.aa.aa/a
+/b/c/.aa.aa/a// /b/c/.aa.aa/a
+/b/c/.aa.aa/.aa /b/c/.aa.aa/.aa
+/b/c/.aa.aa/.a. /b/c/.aa.aa/.a.
+/b/c/.aa.aa/.a/ /b/c/.aa.aa/.a
+/b/c/.aa.aa/..a /b/c/.aa.aa/..a
+/b/c/.aa.aa/... /b/c/.aa.aa/...
+/b/c/.aa.aa/../ /b/c
+/b/c/.aa.aa/./a /b/c/.aa.aa/a
+/b/c/.aa.aa/./. /b/c/.aa.aa
+/b/c/.aa.aa/.// /b/c/.aa.aa
+/b/c/.aa.aa//aa /b/c/.aa.aa/aa
+/b/c/.aa.aa//a. /b/c/.aa.aa/a.
+/b/c/.aa.aa//a/ /b/c/.aa.aa/a
+/b/c/.aa.aa//.a /b/c/.aa.aa/.a
+/b/c/.aa.aa//.. /b/c
+/b/c/.aa.aa//./ /b/c/.aa.aa
+/b/c/.aa.aa///a /b/c/.aa.aa/a
+/b/c/.aa.aa///. /b/c/.aa.aa
+/b/c/.aa.aa//// /b/c/.aa.aa
+/b/c/.aa.a.aaaa /b/c/.aa.a.aaaa
+/b/c/.aa.a.aaa. /b/c/.aa.a.aaa.
+/b/c/.aa.a.aaa/ /b/c/.aa.a.aaa
+/b/c/.aa.a.aa.a /b/c/.aa.a.aa.a
+/b/c/.aa.a.aa.. /b/c/.aa.a.aa..
+/b/c/.aa.a.aa./ /b/c/.aa.a.aa.
+/b/c/.aa.a.aa/a /b/c/.aa.a.aa/a
+/b/c/.aa.a.aa/. /b/c/.aa.a.aa
+/b/c/.aa.a.aa// /b/c/.aa.a.aa
+/b/c/.aa.a.a.aa /b/c/.aa.a.a.aa
+/b/c/.aa.a.a.a. /b/c/.aa.a.a.a.
+/b/c/.aa.a.a.a/ /b/c/.aa.a.a.a
+/b/c/.aa.a.a..a /b/c/.aa.a.a..a
+/b/c/.aa.a.a... /b/c/.aa.a.a...
+/b/c/.aa.a.a../ /b/c/.aa.a.a..
+/b/c/.aa.a.a./a /b/c/.aa.a.a./a
+/b/c/.aa.a.a./. /b/c/.aa.a.a.
+/b/c/.aa.a.a.// /b/c/.aa.a.a.
+/b/c/.aa.a.a/aa /b/c/.aa.a.a/aa
+/b/c/.aa.a.a/a. /b/c/.aa.a.a/a.
+/b/c/.aa.a.a/a/ /b/c/.aa.a.a/a
+/b/c/.aa.a.a/.a /b/c/.aa.a.a/.a
+/b/c/.aa.a.a/.. /b/c
+/b/c/.aa.a.a/./ /b/c/.aa.a.a
+/b/c/.aa.a.a//a /b/c/.aa.a.a/a
+/b/c/.aa.a.a//. /b/c/.aa.a.a
+/b/c/.aa.a.a/// /b/c/.aa.a.a
+/b/c/.aa.a..aaa /b/c/.aa.a..aaa
+/b/c/.aa.a..aa. /b/c/.aa.a..aa.
+/b/c/.aa.a..aa/ /b/c/.aa.a..aa
+/b/c/.aa.a..a.a /b/c/.aa.a..a.a
+/b/c/.aa.a..a.. /b/c/.aa.a..a..
+/b/c/.aa.a..a./ /b/c/.aa.a..a.
+/b/c/.aa.a..a/a /b/c/.aa.a..a/a
+/b/c/.aa.a..a/. /b/c/.aa.a..a
+/b/c/.aa.a..a// /b/c/.aa.a..a
+/b/c/.aa.a...aa /b/c/.aa.a...aa
+/b/c/.aa.a...a. /b/c/.aa.a...a.
+/b/c/.aa.a...a/ /b/c/.aa.a...a
+/b/c/.aa.a....a /b/c/.aa.a....a
+/b/c/.aa.a..... /b/c/.aa.a.....
+/b/c/.aa.a..../ /b/c/.aa.a....
+/b/c/.aa.a.../a /b/c/.aa.a.../a
+/b/c/.aa.a.../. /b/c/.aa.a...
+/b/c/.aa.a...// /b/c/.aa.a...
+/b/c/.aa.a../aa /b/c/.aa.a../aa
+/b/c/.aa.a../a. /b/c/.aa.a../a.
+/b/c/.aa.a../a/ /b/c/.aa.a../a
+/b/c/.aa.a../.a /b/c/.aa.a../.a
+/b/c/.aa.a../.. /b/c
+/b/c/.aa.a.././ /b/c/.aa.a..
+/b/c/.aa.a..//a /b/c/.aa.a../a
+/b/c/.aa.a..//. /b/c/.aa.a..
+/b/c/.aa.a../// /b/c/.aa.a..
+/b/c/.aa.a./aaa /b/c/.aa.a./aaa
+/b/c/.aa.a./aa. /b/c/.aa.a./aa.
+/b/c/.aa.a./aa/ /b/c/.aa.a./aa
+/b/c/.aa.a./a.a /b/c/.aa.a./a.a
+/b/c/.aa.a./a.. /b/c/.aa.a./a..
+/b/c/.aa.a./a./ /b/c/.aa.a./a.
+/b/c/.aa.a./a/a /b/c/.aa.a./a/a
+/b/c/.aa.a./a/. /b/c/.aa.a./a
+/b/c/.aa.a./a// /b/c/.aa.a./a
+/b/c/.aa.a./.aa /b/c/.aa.a./.aa
+/b/c/.aa.a./.a. /b/c/.aa.a./.a.
+/b/c/.aa.a./.a/ /b/c/.aa.a./.a
+/b/c/.aa.a./..a /b/c/.aa.a./..a
+/b/c/.aa.a./... /b/c/.aa.a./...
+/b/c/.aa.a./../ /b/c
+/b/c/.aa.a././a /b/c/.aa.a./a
+/b/c/.aa.a././. /b/c/.aa.a.
+/b/c/.aa.a./.// /b/c/.aa.a.
+/b/c/.aa.a.//aa /b/c/.aa.a./aa
+/b/c/.aa.a.//a. /b/c/.aa.a./a.
+/b/c/.aa.a.//a/ /b/c/.aa.a./a
+/b/c/.aa.a.//.a /b/c/.aa.a./.a
+/b/c/.aa.a.//.. /b/c
+/b/c/.aa.a.//./ /b/c/.aa.a.
+/b/c/.aa.a.///a /b/c/.aa.a./a
+/b/c/.aa.a.///. /b/c/.aa.a.
+/b/c/.aa.a.//// /b/c/.aa.a.
+/b/c/.aa.a/aaaa /b/c/.aa.a/aaaa
+/b/c/.aa.a/aaa. /b/c/.aa.a/aaa.
+/b/c/.aa.a/aaa/ /b/c/.aa.a/aaa
+/b/c/.aa.a/aa.a /b/c/.aa.a/aa.a
+/b/c/.aa.a/aa.. /b/c/.aa.a/aa..
+/b/c/.aa.a/aa./ /b/c/.aa.a/aa.
+/b/c/.aa.a/aa/a /b/c/.aa.a/aa/a
+/b/c/.aa.a/aa/. /b/c/.aa.a/aa
+/b/c/.aa.a/aa// /b/c/.aa.a/aa
+/b/c/.aa.a/a.aa /b/c/.aa.a/a.aa
+/b/c/.aa.a/a.a. /b/c/.aa.a/a.a.
+/b/c/.aa.a/a.a/ /b/c/.aa.a/a.a
+/b/c/.aa.a/a..a /b/c/.aa.a/a..a
+/b/c/.aa.a/a... /b/c/.aa.a/a...
+/b/c/.aa.a/a../ /b/c/.aa.a/a..
+/b/c/.aa.a/a./a /b/c/.aa.a/a./a
+/b/c/.aa.a/a./. /b/c/.aa.a/a.
+/b/c/.aa.a/a.// /b/c/.aa.a/a.
+/b/c/.aa.a/a/aa /b/c/.aa.a/a/aa
+/b/c/.aa.a/a/a. /b/c/.aa.a/a/a.
+/b/c/.aa.a/a/a/ /b/c/.aa.a/a/a
+/b/c/.aa.a/a/.a /b/c/.aa.a/a/.a
+/b/c/.aa.a/a/.. /b/c/.aa.a
+/b/c/.aa.a/a/./ /b/c/.aa.a/a
+/b/c/.aa.a/a//a /b/c/.aa.a/a/a
+/b/c/.aa.a/a//. /b/c/.aa.a/a
+/b/c/.aa.a/a/// /b/c/.aa.a/a
+/b/c/.aa.a/.aaa /b/c/.aa.a/.aaa
+/b/c/.aa.a/.aa. /b/c/.aa.a/.aa.
+/b/c/.aa.a/.aa/ /b/c/.aa.a/.aa
+/b/c/.aa.a/.a.a /b/c/.aa.a/.a.a
+/b/c/.aa.a/.a.. /b/c/.aa.a/.a..
+/b/c/.aa.a/.a./ /b/c/.aa.a/.a.
+/b/c/.aa.a/.a/a /b/c/.aa.a/.a/a
+/b/c/.aa.a/.a/. /b/c/.aa.a/.a
+/b/c/.aa.a/.a// /b/c/.aa.a/.a
+/b/c/.aa.a/..aa /b/c/.aa.a/..aa
+/b/c/.aa.a/..a. /b/c/.aa.a/..a.
+/b/c/.aa.a/..a/ /b/c/.aa.a/..a
+/b/c/.aa.a/...a /b/c/.aa.a/...a
+/b/c/.aa.a/.... /b/c/.aa.a/....
+/b/c/.aa.a/.../ /b/c/.aa.a/...
+/b/c/.aa.a/../a /b/c/a
+/b/c/.aa.a/../. /b/c
+/b/c/.aa.a/..// /b/c
+/b/c/.aa.a/./aa /b/c/.aa.a/aa
+/b/c/.aa.a/./a. /b/c/.aa.a/a.
+/b/c/.aa.a/./a/ /b/c/.aa.a/a
+/b/c/.aa.a/./.a /b/c/.aa.a/.a
+/b/c/.aa.a/./.. /b/c
+/b/c/.aa.a/././ /b/c/.aa.a
+/b/c/.aa.a/.//a /b/c/.aa.a/a
+/b/c/.aa.a/.//. /b/c/.aa.a
+/b/c/.aa.a/./// /b/c/.aa.a
+/b/c/.aa.a//aaa /b/c/.aa.a/aaa
+/b/c/.aa.a//aa. /b/c/.aa.a/aa.
+/b/c/.aa.a//aa/ /b/c/.aa.a/aa
+/b/c/.aa.a//a.a /b/c/.aa.a/a.a
+/b/c/.aa.a//a.. /b/c/.aa.a/a..
+/b/c/.aa.a//a./ /b/c/.aa.a/a.
+/b/c/.aa.a//a/a /b/c/.aa.a/a/a
+/b/c/.aa.a//a/. /b/c/.aa.a/a
+/b/c/.aa.a//a// /b/c/.aa.a/a
+/b/c/.aa.a//.aa /b/c/.aa.a/.aa
+/b/c/.aa.a//.a. /b/c/.aa.a/.a.
+/b/c/.aa.a//.a/ /b/c/.aa.a/.a
+/b/c/.aa.a//..a /b/c/.aa.a/..a
+/b/c/.aa.a//... /b/c/.aa.a/...
+/b/c/.aa.a//../ /b/c
+/b/c/.aa.a//./a /b/c/.aa.a/a
+/b/c/.aa.a//./. /b/c/.aa.a
+/b/c/.aa.a//.// /b/c/.aa.a
+/b/c/.aa.a///aa /b/c/.aa.a/aa
+/b/c/.aa.a///a. /b/c/.aa.a/a.
+/b/c/.aa.a///a/ /b/c/.aa.a/a
+/b/c/.aa.a///.a /b/c/.aa.a/.a
+/b/c/.aa.a///.. /b/c
+/b/c/.aa.a///./ /b/c/.aa.a
+/b/c/.aa.a////a /b/c/.aa.a/a
+/b/c/.aa.a////. /b/c/.aa.a
+/b/c/.aa.a///// /b/c/.aa.a
+/b/c/.aa..aaaaa /b/c/.aa..aaaaa
+/b/c/.aa..aaaa. /b/c/.aa..aaaa.
+/b/c/.aa..aaaa/ /b/c/.aa..aaaa
+/b/c/.aa..aaa.a /b/c/.aa..aaa.a
+/b/c/.aa..aaa.. /b/c/.aa..aaa..
+/b/c/.aa..aaa./ /b/c/.aa..aaa.
+/b/c/.aa..aaa/a /b/c/.aa..aaa/a
+/b/c/.aa..aaa/. /b/c/.aa..aaa
+/b/c/.aa..aaa// /b/c/.aa..aaa
+/b/c/.aa..aa.aa /b/c/.aa..aa.aa
+/b/c/.aa..aa.a. /b/c/.aa..aa.a.
+/b/c/.aa..aa.a/ /b/c/.aa..aa.a
+/b/c/.aa..aa..a /b/c/.aa..aa..a
+/b/c/.aa..aa... /b/c/.aa..aa...
+/b/c/.aa..aa../ /b/c/.aa..aa..
+/b/c/.aa..aa./a /b/c/.aa..aa./a
+/b/c/.aa..aa./. /b/c/.aa..aa.
+/b/c/.aa..aa.// /b/c/.aa..aa.
+/b/c/.aa..aa/aa /b/c/.aa..aa/aa
+/b/c/.aa..aa/a. /b/c/.aa..aa/a.
+/b/c/.aa..aa/a/ /b/c/.aa..aa/a
+/b/c/.aa..aa/.a /b/c/.aa..aa/.a
+/b/c/.aa..aa/.. /b/c
+/b/c/.aa..aa/./ /b/c/.aa..aa
+/b/c/.aa..aa//a /b/c/.aa..aa/a
+/b/c/.aa..aa//. /b/c/.aa..aa
+/b/c/.aa..aa/// /b/c/.aa..aa
+/b/c/.aa..a.aaa /b/c/.aa..a.aaa
+/b/c/.aa..a.aa. /b/c/.aa..a.aa.
+/b/c/.aa..a.aa/ /b/c/.aa..a.aa
+/b/c/.aa..a.a.a /b/c/.aa..a.a.a
+/b/c/.aa..a.a.. /b/c/.aa..a.a..
+/b/c/.aa..a.a./ /b/c/.aa..a.a.
+/b/c/.aa..a.a/a /b/c/.aa..a.a/a
+/b/c/.aa..a.a/. /b/c/.aa..a.a
+/b/c/.aa..a.a// /b/c/.aa..a.a
+/b/c/.aa..a..aa /b/c/.aa..a..aa
+/b/c/.aa..a..a. /b/c/.aa..a..a.
+/b/c/.aa..a..a/ /b/c/.aa..a..a
+/b/c/.aa..a...a /b/c/.aa..a...a
+/b/c/.aa..a.... /b/c/.aa..a....
+/b/c/.aa..a.../ /b/c/.aa..a...
+/b/c/.aa..a../a /b/c/.aa..a../a
+/b/c/.aa..a../. /b/c/.aa..a..
+/b/c/.aa..a..// /b/c/.aa..a..
+/b/c/.aa..a./aa /b/c/.aa..a./aa
+/b/c/.aa..a./a. /b/c/.aa..a./a.
+/b/c/.aa..a./a/ /b/c/.aa..a./a
+/b/c/.aa..a./.a /b/c/.aa..a./.a
+/b/c/.aa..a./.. /b/c
+/b/c/.aa..a././ /b/c/.aa..a.
+/b/c/.aa..a.//a /b/c/.aa..a./a
+/b/c/.aa..a.//. /b/c/.aa..a.
+/b/c/.aa..a./// /b/c/.aa..a.
+/b/c/.aa..a/aaa /b/c/.aa..a/aaa
+/b/c/.aa..a/aa. /b/c/.aa..a/aa.
+/b/c/.aa..a/aa/ /b/c/.aa..a/aa
+/b/c/.aa..a/a.a /b/c/.aa..a/a.a
+/b/c/.aa..a/a.. /b/c/.aa..a/a..
+/b/c/.aa..a/a./ /b/c/.aa..a/a.
+/b/c/.aa..a/a/a /b/c/.aa..a/a/a
+/b/c/.aa..a/a/. /b/c/.aa..a/a
+/b/c/.aa..a/a// /b/c/.aa..a/a
+/b/c/.aa..a/.aa /b/c/.aa..a/.aa
+/b/c/.aa..a/.a. /b/c/.aa..a/.a.
+/b/c/.aa..a/.a/ /b/c/.aa..a/.a
+/b/c/.aa..a/..a /b/c/.aa..a/..a
+/b/c/.aa..a/... /b/c/.aa..a/...
+/b/c/.aa..a/../ /b/c
+/b/c/.aa..a/./a /b/c/.aa..a/a
+/b/c/.aa..a/./. /b/c/.aa..a
+/b/c/.aa..a/.// /b/c/.aa..a
+/b/c/.aa..a//aa /b/c/.aa..a/aa
+/b/c/.aa..a//a. /b/c/.aa..a/a.
+/b/c/.aa..a//a/ /b/c/.aa..a/a
+/b/c/.aa..a//.a /b/c/.aa..a/.a
+/b/c/.aa..a//.. /b/c
+/b/c/.aa..a//./ /b/c/.aa..a
+/b/c/.aa..a///a /b/c/.aa..a/a
+/b/c/.aa..a///. /b/c/.aa..a
+/b/c/.aa..a//// /b/c/.aa..a
+/b/c/.aa...aaaa /b/c/.aa...aaaa
+/b/c/.aa...aaa. /b/c/.aa...aaa.
+/b/c/.aa...aaa/ /b/c/.aa...aaa
+/b/c/.aa...aa.a /b/c/.aa...aa.a
+/b/c/.aa...aa.. /b/c/.aa...aa..
+/b/c/.aa...aa./ /b/c/.aa...aa.
+/b/c/.aa...aa/a /b/c/.aa...aa/a
+/b/c/.aa...aa/. /b/c/.aa...aa
+/b/c/.aa...aa// /b/c/.aa...aa
+/b/c/.aa...a.aa /b/c/.aa...a.aa
+/b/c/.aa...a.a. /b/c/.aa...a.a.
+/b/c/.aa...a.a/ /b/c/.aa...a.a
+/b/c/.aa...a..a /b/c/.aa...a..a
+/b/c/.aa...a... /b/c/.aa...a...
+/b/c/.aa...a../ /b/c/.aa...a..
+/b/c/.aa...a./a /b/c/.aa...a./a
+/b/c/.aa...a./. /b/c/.aa...a.
+/b/c/.aa...a.// /b/c/.aa...a.
+/b/c/.aa...a/aa /b/c/.aa...a/aa
+/b/c/.aa...a/a. /b/c/.aa...a/a.
+/b/c/.aa...a/a/ /b/c/.aa...a/a
+/b/c/.aa...a/.a /b/c/.aa...a/.a
+/b/c/.aa...a/.. /b/c
+/b/c/.aa...a/./ /b/c/.aa...a
+/b/c/.aa...a//a /b/c/.aa...a/a
+/b/c/.aa...a//. /b/c/.aa...a
+/b/c/.aa...a/// /b/c/.aa...a
+/b/c/.aa....aaa /b/c/.aa....aaa
+/b/c/.aa....aa. /b/c/.aa....aa.
+/b/c/.aa....aa/ /b/c/.aa....aa
+/b/c/.aa....a.a /b/c/.aa....a.a
+/b/c/.aa....a.. /b/c/.aa....a..
+/b/c/.aa....a./ /b/c/.aa....a.
+/b/c/.aa....a/a /b/c/.aa....a/a
+/b/c/.aa....a/. /b/c/.aa....a
+/b/c/.aa....a// /b/c/.aa....a
+/b/c/.aa.....aa /b/c/.aa.....aa
+/b/c/.aa.....a. /b/c/.aa.....a.
+/b/c/.aa.....a/ /b/c/.aa.....a
+/b/c/.aa......a /b/c/.aa......a
+/b/c/.aa....... /b/c/.aa.......
+/b/c/.aa....../ /b/c/.aa......
+/b/c/.aa...../a /b/c/.aa...../a
+/b/c/.aa...../. /b/c/.aa.....
+/b/c/.aa.....// /b/c/.aa.....
+/b/c/.aa..../aa /b/c/.aa..../aa
+/b/c/.aa..../a. /b/c/.aa..../a.
+/b/c/.aa..../a/ /b/c/.aa..../a
+/b/c/.aa..../.a /b/c/.aa..../.a
+/b/c/.aa..../.. /b/c
+/b/c/.aa...././ /b/c/.aa....
+/b/c/.aa....//a /b/c/.aa..../a
+/b/c/.aa....//. /b/c/.aa....
+/b/c/.aa..../// /b/c/.aa....
+/b/c/.aa.../aaa /b/c/.aa.../aaa
+/b/c/.aa.../aa. /b/c/.aa.../aa.
+/b/c/.aa.../aa/ /b/c/.aa.../aa
+/b/c/.aa.../a.a /b/c/.aa.../a.a
+/b/c/.aa.../a.. /b/c/.aa.../a..
+/b/c/.aa.../a./ /b/c/.aa.../a.
+/b/c/.aa.../a/a /b/c/.aa.../a/a
+/b/c/.aa.../a/. /b/c/.aa.../a
+/b/c/.aa.../a// /b/c/.aa.../a
+/b/c/.aa.../.aa /b/c/.aa.../.aa
+/b/c/.aa.../.a. /b/c/.aa.../.a.
+/b/c/.aa.../.a/ /b/c/.aa.../.a
+/b/c/.aa.../..a /b/c/.aa.../..a
+/b/c/.aa.../... /b/c/.aa.../...
+/b/c/.aa.../../ /b/c
+/b/c/.aa..././a /b/c/.aa.../a
+/b/c/.aa..././. /b/c/.aa...
+/b/c/.aa.../.// /b/c/.aa...
+/b/c/.aa...//aa /b/c/.aa.../aa
+/b/c/.aa...//a. /b/c/.aa.../a.
+/b/c/.aa...//a/ /b/c/.aa.../a
+/b/c/.aa...//.a /b/c/.aa.../.a
+/b/c/.aa...//.. /b/c
+/b/c/.aa...//./ /b/c/.aa...
+/b/c/.aa...///a /b/c/.aa.../a
+/b/c/.aa...///. /b/c/.aa...
+/b/c/.aa...//// /b/c/.aa...
+/b/c/.aa../aaaa /b/c/.aa../aaaa
+/b/c/.aa../aaa. /b/c/.aa../aaa.
+/b/c/.aa../aaa/ /b/c/.aa../aaa
+/b/c/.aa../aa.a /b/c/.aa../aa.a
+/b/c/.aa../aa.. /b/c/.aa../aa..
+/b/c/.aa../aa./ /b/c/.aa../aa.
+/b/c/.aa../aa/a /b/c/.aa../aa/a
+/b/c/.aa../aa/. /b/c/.aa../aa
+/b/c/.aa../aa// /b/c/.aa../aa
+/b/c/.aa../a.aa /b/c/.aa../a.aa
+/b/c/.aa../a.a. /b/c/.aa../a.a.
+/b/c/.aa../a.a/ /b/c/.aa../a.a
+/b/c/.aa../a..a /b/c/.aa../a..a
+/b/c/.aa../a... /b/c/.aa../a...
+/b/c/.aa../a../ /b/c/.aa../a..
+/b/c/.aa../a./a /b/c/.aa../a./a
+/b/c/.aa../a./. /b/c/.aa../a.
+/b/c/.aa../a.// /b/c/.aa../a.
+/b/c/.aa../a/aa /b/c/.aa../a/aa
+/b/c/.aa../a/a. /b/c/.aa../a/a.
+/b/c/.aa../a/a/ /b/c/.aa../a/a
+/b/c/.aa../a/.a /b/c/.aa../a/.a
+/b/c/.aa../a/.. /b/c/.aa..
+/b/c/.aa../a/./ /b/c/.aa../a
+/b/c/.aa../a//a /b/c/.aa../a/a
+/b/c/.aa../a//. /b/c/.aa../a
+/b/c/.aa../a/// /b/c/.aa../a
+/b/c/.aa../.aaa /b/c/.aa../.aaa
+/b/c/.aa../.aa. /b/c/.aa../.aa.
+/b/c/.aa../.aa/ /b/c/.aa../.aa
+/b/c/.aa../.a.a /b/c/.aa../.a.a
+/b/c/.aa../.a.. /b/c/.aa../.a..
+/b/c/.aa../.a./ /b/c/.aa../.a.
+/b/c/.aa../.a/a /b/c/.aa../.a/a
+/b/c/.aa../.a/. /b/c/.aa../.a
+/b/c/.aa../.a// /b/c/.aa../.a
+/b/c/.aa../..aa /b/c/.aa../..aa
+/b/c/.aa../..a. /b/c/.aa../..a.
+/b/c/.aa../..a/ /b/c/.aa../..a
+/b/c/.aa../...a /b/c/.aa../...a
+/b/c/.aa../.... /b/c/.aa../....
+/b/c/.aa../.../ /b/c/.aa../...
+/b/c/.aa../../a /b/c/a
+/b/c/.aa../../. /b/c
+/b/c/.aa../..// /b/c
+/b/c/.aa.././aa /b/c/.aa../aa
+/b/c/.aa.././a. /b/c/.aa../a.
+/b/c/.aa.././a/ /b/c/.aa../a
+/b/c/.aa.././.a /b/c/.aa../.a
+/b/c/.aa.././.. /b/c
+/b/c/.aa../././ /b/c/.aa..
+/b/c/.aa.././/a /b/c/.aa../a
+/b/c/.aa.././/. /b/c/.aa..
+/b/c/.aa.././// /b/c/.aa..
+/b/c/.aa..//aaa /b/c/.aa../aaa
+/b/c/.aa..//aa. /b/c/.aa../aa.
+/b/c/.aa..//aa/ /b/c/.aa../aa
+/b/c/.aa..//a.a /b/c/.aa../a.a
+/b/c/.aa..//a.. /b/c/.aa../a..
+/b/c/.aa..//a./ /b/c/.aa../a.
+/b/c/.aa..//a/a /b/c/.aa../a/a
+/b/c/.aa..//a/. /b/c/.aa../a
+/b/c/.aa..//a// /b/c/.aa../a
+/b/c/.aa..//.aa /b/c/.aa../.aa
+/b/c/.aa..//.a. /b/c/.aa../.a.
+/b/c/.aa..//.a/ /b/c/.aa../.a
+/b/c/.aa..//..a /b/c/.aa../..a
+/b/c/.aa..//... /b/c/.aa../...
+/b/c/.aa..//../ /b/c
+/b/c/.aa..//./a /b/c/.aa../a
+/b/c/.aa..//./. /b/c/.aa..
+/b/c/.aa..//.// /b/c/.aa..
+/b/c/.aa..///aa /b/c/.aa../aa
+/b/c/.aa..///a. /b/c/.aa../a.
+/b/c/.aa..///a/ /b/c/.aa../a
+/b/c/.aa..///.a /b/c/.aa../.a
+/b/c/.aa..///.. /b/c
+/b/c/.aa..///./ /b/c/.aa..
+/b/c/.aa..////a /b/c/.aa../a
+/b/c/.aa..////. /b/c/.aa..
+/b/c/.aa..///// /b/c/.aa..
+/b/c/.aa./aaaaa /b/c/.aa./aaaaa
+/b/c/.aa./aaaa. /b/c/.aa./aaaa.
+/b/c/.aa./aaaa/ /b/c/.aa./aaaa
+/b/c/.aa./aaa.a /b/c/.aa./aaa.a
+/b/c/.aa./aaa.. /b/c/.aa./aaa..
+/b/c/.aa./aaa./ /b/c/.aa./aaa.
+/b/c/.aa./aaa/a /b/c/.aa./aaa/a
+/b/c/.aa./aaa/. /b/c/.aa./aaa
+/b/c/.aa./aaa// /b/c/.aa./aaa
+/b/c/.aa./aa.aa /b/c/.aa./aa.aa
+/b/c/.aa./aa.a. /b/c/.aa./aa.a.
+/b/c/.aa./aa.a/ /b/c/.aa./aa.a
+/b/c/.aa./aa..a /b/c/.aa./aa..a
+/b/c/.aa./aa... /b/c/.aa./aa...
+/b/c/.aa./aa../ /b/c/.aa./aa..
+/b/c/.aa./aa./a /b/c/.aa./aa./a
+/b/c/.aa./aa./. /b/c/.aa./aa.
+/b/c/.aa./aa.// /b/c/.aa./aa.
+/b/c/.aa./aa/aa /b/c/.aa./aa/aa
+/b/c/.aa./aa/a. /b/c/.aa./aa/a.
+/b/c/.aa./aa/a/ /b/c/.aa./aa/a
+/b/c/.aa./aa/.a /b/c/.aa./aa/.a
+/b/c/.aa./aa/.. /b/c/.aa.
+/b/c/.aa./aa/./ /b/c/.aa./aa
+/b/c/.aa./aa//a /b/c/.aa./aa/a
+/b/c/.aa./aa//. /b/c/.aa./aa
+/b/c/.aa./aa/// /b/c/.aa./aa
+/b/c/.aa./a.aaa /b/c/.aa./a.aaa
+/b/c/.aa./a.aa. /b/c/.aa./a.aa.
+/b/c/.aa./a.aa/ /b/c/.aa./a.aa
+/b/c/.aa./a.a.a /b/c/.aa./a.a.a
+/b/c/.aa./a.a.. /b/c/.aa./a.a..
+/b/c/.aa./a.a./ /b/c/.aa./a.a.
+/b/c/.aa./a.a/a /b/c/.aa./a.a/a
+/b/c/.aa./a.a/. /b/c/.aa./a.a
+/b/c/.aa./a.a// /b/c/.aa./a.a
+/b/c/.aa./a..aa /b/c/.aa./a..aa
+/b/c/.aa./a..a. /b/c/.aa./a..a.
+/b/c/.aa./a..a/ /b/c/.aa./a..a
+/b/c/.aa./a...a /b/c/.aa./a...a
+/b/c/.aa./a.... /b/c/.aa./a....
+/b/c/.aa./a.../ /b/c/.aa./a...
+/b/c/.aa./a../a /b/c/.aa./a../a
+/b/c/.aa./a../. /b/c/.aa./a..
+/b/c/.aa./a..// /b/c/.aa./a..
+/b/c/.aa./a./aa /b/c/.aa./a./aa
+/b/c/.aa./a./a. /b/c/.aa./a./a.
+/b/c/.aa./a./a/ /b/c/.aa./a./a
+/b/c/.aa./a./.a /b/c/.aa./a./.a
+/b/c/.aa./a./.. /b/c/.aa.
+/b/c/.aa./a././ /b/c/.aa./a.
+/b/c/.aa./a.//a /b/c/.aa./a./a
+/b/c/.aa./a.//. /b/c/.aa./a.
+/b/c/.aa./a./// /b/c/.aa./a.
+/b/c/.aa./a/aaa /b/c/.aa./a/aaa
+/b/c/.aa./a/aa. /b/c/.aa./a/aa.
+/b/c/.aa./a/aa/ /b/c/.aa./a/aa
+/b/c/.aa./a/a.a /b/c/.aa./a/a.a
+/b/c/.aa./a/a.. /b/c/.aa./a/a..
+/b/c/.aa./a/a./ /b/c/.aa./a/a.
+/b/c/.aa./a/a/a /b/c/.aa./a/a/a
+/b/c/.aa./a/a/. /b/c/.aa./a/a
+/b/c/.aa./a/a// /b/c/.aa./a/a
+/b/c/.aa./a/.aa /b/c/.aa./a/.aa
+/b/c/.aa./a/.a. /b/c/.aa./a/.a.
+/b/c/.aa./a/.a/ /b/c/.aa./a/.a
+/b/c/.aa./a/..a /b/c/.aa./a/..a
+/b/c/.aa./a/... /b/c/.aa./a/...
+/b/c/.aa./a/../ /b/c/.aa.
+/b/c/.aa./a/./a /b/c/.aa./a/a
+/b/c/.aa./a/./. /b/c/.aa./a
+/b/c/.aa./a/.// /b/c/.aa./a
+/b/c/.aa./a//aa /b/c/.aa./a/aa
+/b/c/.aa./a//a. /b/c/.aa./a/a.
+/b/c/.aa./a//a/ /b/c/.aa./a/a
+/b/c/.aa./a//.a /b/c/.aa./a/.a
+/b/c/.aa./a//.. /b/c/.aa.
+/b/c/.aa./a//./ /b/c/.aa./a
+/b/c/.aa./a///a /b/c/.aa./a/a
+/b/c/.aa./a///. /b/c/.aa./a
+/b/c/.aa./a//// /b/c/.aa./a
+/b/c/.aa./.aaaa /b/c/.aa./.aaaa
+/b/c/.aa./.aaa. /b/c/.aa./.aaa.
+/b/c/.aa./.aaa/ /b/c/.aa./.aaa
+/b/c/.aa./.aa.a /b/c/.aa./.aa.a
+/b/c/.aa./.aa.. /b/c/.aa./.aa..
+/b/c/.aa./.aa./ /b/c/.aa./.aa.
+/b/c/.aa./.aa/a /b/c/.aa./.aa/a
+/b/c/.aa./.aa/. /b/c/.aa./.aa
+/b/c/.aa./.aa// /b/c/.aa./.aa
+/b/c/.aa./.a.aa /b/c/.aa./.a.aa
+/b/c/.aa./.a.a. /b/c/.aa./.a.a.
+/b/c/.aa./.a.a/ /b/c/.aa./.a.a
+/b/c/.aa./.a..a /b/c/.aa./.a..a
+/b/c/.aa./.a... /b/c/.aa./.a...
+/b/c/.aa./.a../ /b/c/.aa./.a..
+/b/c/.aa./.a./a /b/c/.aa./.a./a
+/b/c/.aa./.a./. /b/c/.aa./.a.
+/b/c/.aa./.a.// /b/c/.aa./.a.
+/b/c/.aa./.a/aa /b/c/.aa./.a/aa
+/b/c/.aa./.a/a. /b/c/.aa./.a/a.
+/b/c/.aa./.a/a/ /b/c/.aa./.a/a
+/b/c/.aa./.a/.a /b/c/.aa./.a/.a
+/b/c/.aa./.a/.. /b/c/.aa.
+/b/c/.aa./.a/./ /b/c/.aa./.a
+/b/c/.aa./.a//a /b/c/.aa./.a/a
+/b/c/.aa./.a//. /b/c/.aa./.a
+/b/c/.aa./.a/// /b/c/.aa./.a
+/b/c/.aa./..aaa /b/c/.aa./..aaa
+/b/c/.aa./..aa. /b/c/.aa./..aa.
+/b/c/.aa./..aa/ /b/c/.aa./..aa
+/b/c/.aa./..a.a /b/c/.aa./..a.a
+/b/c/.aa./..a.. /b/c/.aa./..a..
+/b/c/.aa./..a./ /b/c/.aa./..a.
+/b/c/.aa./..a/a /b/c/.aa./..a/a
+/b/c/.aa./..a/. /b/c/.aa./..a
+/b/c/.aa./..a// /b/c/.aa./..a
+/b/c/.aa./...aa /b/c/.aa./...aa
+/b/c/.aa./...a. /b/c/.aa./...a.
+/b/c/.aa./...a/ /b/c/.aa./...a
+/b/c/.aa./....a /b/c/.aa./....a
+/b/c/.aa./..... /b/c/.aa./.....
+/b/c/.aa./..../ /b/c/.aa./....
+/b/c/.aa./.../a /b/c/.aa./.../a
+/b/c/.aa./.../. /b/c/.aa./...
+/b/c/.aa./...// /b/c/.aa./...
+/b/c/.aa./../aa /b/c/aa
+/b/c/.aa./../a. /b/c/a.
+/b/c/.aa./../a/ /b/c/a
+/b/c/.aa./../.a /b/c/.a
+/b/c/.aa./../.. /b
+/b/c/.aa./.././ /b/c
+/b/c/.aa./..//a /b/c/a
+/b/c/.aa./..//. /b/c
+/b/c/.aa./../// /b/c
+/b/c/.aa././aaa /b/c/.aa./aaa
+/b/c/.aa././aa. /b/c/.aa./aa.
+/b/c/.aa././aa/ /b/c/.aa./aa
+/b/c/.aa././a.a /b/c/.aa./a.a
+/b/c/.aa././a.. /b/c/.aa./a..
+/b/c/.aa././a./ /b/c/.aa./a.
+/b/c/.aa././a/a /b/c/.aa./a/a
+/b/c/.aa././a/. /b/c/.aa./a
+/b/c/.aa././a// /b/c/.aa./a
+/b/c/.aa././.aa /b/c/.aa./.aa
+/b/c/.aa././.a. /b/c/.aa./.a.
+/b/c/.aa././.a/ /b/c/.aa./.a
+/b/c/.aa././..a /b/c/.aa./..a
+/b/c/.aa././... /b/c/.aa./...
+/b/c/.aa././../ /b/c
+/b/c/.aa./././a /b/c/.aa./a
+/b/c/.aa./././. /b/c/.aa.
+/b/c/.aa././.// /b/c/.aa.
+/b/c/.aa././/aa /b/c/.aa./aa
+/b/c/.aa././/a. /b/c/.aa./a.
+/b/c/.aa././/a/ /b/c/.aa./a
+/b/c/.aa././/.a /b/c/.aa./.a
+/b/c/.aa././/.. /b/c
+/b/c/.aa././/./ /b/c/.aa.
+/b/c/.aa././//a /b/c/.aa./a
+/b/c/.aa././//. /b/c/.aa.
+/b/c/.aa././/// /b/c/.aa.
+/b/c/.aa.//aaaa /b/c/.aa./aaaa
+/b/c/.aa.//aaa. /b/c/.aa./aaa.
+/b/c/.aa.//aaa/ /b/c/.aa./aaa
+/b/c/.aa.//aa.a /b/c/.aa./aa.a
+/b/c/.aa.//aa.. /b/c/.aa./aa..
+/b/c/.aa.//aa./ /b/c/.aa./aa.
+/b/c/.aa.//aa/a /b/c/.aa./aa/a
+/b/c/.aa.//aa/. /b/c/.aa./aa
+/b/c/.aa.//aa// /b/c/.aa./aa
+/b/c/.aa.//a.aa /b/c/.aa./a.aa
+/b/c/.aa.//a.a. /b/c/.aa./a.a.
+/b/c/.aa.//a.a/ /b/c/.aa./a.a
+/b/c/.aa.//a..a /b/c/.aa./a..a
+/b/c/.aa.//a... /b/c/.aa./a...
+/b/c/.aa.//a../ /b/c/.aa./a..
+/b/c/.aa.//a./a /b/c/.aa./a./a
+/b/c/.aa.//a./. /b/c/.aa./a.
+/b/c/.aa.//a.// /b/c/.aa./a.
+/b/c/.aa.//a/aa /b/c/.aa./a/aa
+/b/c/.aa.//a/a. /b/c/.aa./a/a.
+/b/c/.aa.//a/a/ /b/c/.aa./a/a
+/b/c/.aa.//a/.a /b/c/.aa./a/.a
+/b/c/.aa.//a/.. /b/c/.aa.
+/b/c/.aa.//a/./ /b/c/.aa./a
+/b/c/.aa.//a//a /b/c/.aa./a/a
+/b/c/.aa.//a//. /b/c/.aa./a
+/b/c/.aa.//a/// /b/c/.aa./a
+/b/c/.aa.//.aaa /b/c/.aa./.aaa
+/b/c/.aa.//.aa. /b/c/.aa./.aa.
+/b/c/.aa.//.aa/ /b/c/.aa./.aa
+/b/c/.aa.//.a.a /b/c/.aa./.a.a
+/b/c/.aa.//.a.. /b/c/.aa./.a..
+/b/c/.aa.//.a./ /b/c/.aa./.a.
+/b/c/.aa.//.a/a /b/c/.aa./.a/a
+/b/c/.aa.//.a/. /b/c/.aa./.a
+/b/c/.aa.//.a// /b/c/.aa./.a
+/b/c/.aa.//..aa /b/c/.aa./..aa
+/b/c/.aa.//..a. /b/c/.aa./..a.
+/b/c/.aa.//..a/ /b/c/.aa./..a
+/b/c/.aa.//...a /b/c/.aa./...a
+/b/c/.aa.//.... /b/c/.aa./....
+/b/c/.aa.//.../ /b/c/.aa./...
+/b/c/.aa.//../a /b/c/a
+/b/c/.aa.//../. /b/c
+/b/c/.aa.//..// /b/c
+/b/c/.aa.//./aa /b/c/.aa./aa
+/b/c/.aa.//./a. /b/c/.aa./a.
+/b/c/.aa.//./a/ /b/c/.aa./a
+/b/c/.aa.//./.a /b/c/.aa./.a
+/b/c/.aa.//./.. /b/c
+/b/c/.aa.//././ /b/c/.aa.
+/b/c/.aa.//.//a /b/c/.aa./a
+/b/c/.aa.//.//. /b/c/.aa.
+/b/c/.aa.//./// /b/c/.aa.
+/b/c/.aa.///aaa /b/c/.aa./aaa
+/b/c/.aa.///aa. /b/c/.aa./aa.
+/b/c/.aa.///aa/ /b/c/.aa./aa
+/b/c/.aa.///a.a /b/c/.aa./a.a
+/b/c/.aa.///a.. /b/c/.aa./a..
+/b/c/.aa.///a./ /b/c/.aa./a.
+/b/c/.aa.///a/a /b/c/.aa./a/a
+/b/c/.aa.///a/. /b/c/.aa./a
+/b/c/.aa.///a// /b/c/.aa./a
+/b/c/.aa.///.aa /b/c/.aa./.aa
+/b/c/.aa.///.a. /b/c/.aa./.a.
+/b/c/.aa.///.a/ /b/c/.aa./.a
+/b/c/.aa.///..a /b/c/.aa./..a
+/b/c/.aa.///... /b/c/.aa./...
+/b/c/.aa.///../ /b/c
+/b/c/.aa.///./a /b/c/.aa./a
+/b/c/.aa.///./. /b/c/.aa.
+/b/c/.aa.///.// /b/c/.aa.
+/b/c/.aa.////aa /b/c/.aa./aa
+/b/c/.aa.////a. /b/c/.aa./a.
+/b/c/.aa.////a/ /b/c/.aa./a
+/b/c/.aa.////.a /b/c/.aa./.a
+/b/c/.aa.////.. /b/c
+/b/c/.aa.////./ /b/c/.aa.
+/b/c/.aa./////a /b/c/.aa./a
+/b/c/.aa./////. /b/c/.aa.
+/b/c/.aa.////// /b/c/.aa.
+/b/c/.aa/aaaaaa /b/c/.aa/aaaaaa
+/b/c/.aa/aaaaa. /b/c/.aa/aaaaa.
+/b/c/.aa/aaaaa/ /b/c/.aa/aaaaa
+/b/c/.aa/aaaa.a /b/c/.aa/aaaa.a
+/b/c/.aa/aaaa.. /b/c/.aa/aaaa..
+/b/c/.aa/aaaa./ /b/c/.aa/aaaa.
+/b/c/.aa/aaaa/a /b/c/.aa/aaaa/a
+/b/c/.aa/aaaa/. /b/c/.aa/aaaa
+/b/c/.aa/aaaa// /b/c/.aa/aaaa
+/b/c/.aa/aaa.aa /b/c/.aa/aaa.aa
+/b/c/.aa/aaa.a. /b/c/.aa/aaa.a.
+/b/c/.aa/aaa.a/ /b/c/.aa/aaa.a
+/b/c/.aa/aaa..a /b/c/.aa/aaa..a
+/b/c/.aa/aaa... /b/c/.aa/aaa...
+/b/c/.aa/aaa../ /b/c/.aa/aaa..
+/b/c/.aa/aaa./a /b/c/.aa/aaa./a
+/b/c/.aa/aaa./. /b/c/.aa/aaa.
+/b/c/.aa/aaa.// /b/c/.aa/aaa.
+/b/c/.aa/aaa/aa /b/c/.aa/aaa/aa
+/b/c/.aa/aaa/a. /b/c/.aa/aaa/a.
+/b/c/.aa/aaa/a/ /b/c/.aa/aaa/a
+/b/c/.aa/aaa/.a /b/c/.aa/aaa/.a
+/b/c/.aa/aaa/.. /b/c/.aa
+/b/c/.aa/aaa/./ /b/c/.aa/aaa
+/b/c/.aa/aaa//a /b/c/.aa/aaa/a
+/b/c/.aa/aaa//. /b/c/.aa/aaa
+/b/c/.aa/aaa/// /b/c/.aa/aaa
+/b/c/.aa/aa.aaa /b/c/.aa/aa.aaa
+/b/c/.aa/aa.aa. /b/c/.aa/aa.aa.
+/b/c/.aa/aa.aa/ /b/c/.aa/aa.aa
+/b/c/.aa/aa.a.a /b/c/.aa/aa.a.a
+/b/c/.aa/aa.a.. /b/c/.aa/aa.a..
+/b/c/.aa/aa.a./ /b/c/.aa/aa.a.
+/b/c/.aa/aa.a/a /b/c/.aa/aa.a/a
+/b/c/.aa/aa.a/. /b/c/.aa/aa.a
+/b/c/.aa/aa.a// /b/c/.aa/aa.a
+/b/c/.aa/aa..aa /b/c/.aa/aa..aa
+/b/c/.aa/aa..a. /b/c/.aa/aa..a.
+/b/c/.aa/aa..a/ /b/c/.aa/aa..a
+/b/c/.aa/aa...a /b/c/.aa/aa...a
+/b/c/.aa/aa.... /b/c/.aa/aa....
+/b/c/.aa/aa.../ /b/c/.aa/aa...
+/b/c/.aa/aa../a /b/c/.aa/aa../a
+/b/c/.aa/aa../. /b/c/.aa/aa..
+/b/c/.aa/aa..// /b/c/.aa/aa..
+/b/c/.aa/aa./aa /b/c/.aa/aa./aa
+/b/c/.aa/aa./a. /b/c/.aa/aa./a.
+/b/c/.aa/aa./a/ /b/c/.aa/aa./a
+/b/c/.aa/aa./.a /b/c/.aa/aa./.a
+/b/c/.aa/aa./.. /b/c/.aa
+/b/c/.aa/aa././ /b/c/.aa/aa.
+/b/c/.aa/aa.//a /b/c/.aa/aa./a
+/b/c/.aa/aa.//. /b/c/.aa/aa.
+/b/c/.aa/aa./// /b/c/.aa/aa.
+/b/c/.aa/aa/aaa /b/c/.aa/aa/aaa
+/b/c/.aa/aa/aa. /b/c/.aa/aa/aa.
+/b/c/.aa/aa/aa/ /b/c/.aa/aa/aa
+/b/c/.aa/aa/a.a /b/c/.aa/aa/a.a
+/b/c/.aa/aa/a.. /b/c/.aa/aa/a..
+/b/c/.aa/aa/a./ /b/c/.aa/aa/a.
+/b/c/.aa/aa/a/a /b/c/.aa/aa/a/a
+/b/c/.aa/aa/a/. /b/c/.aa/aa/a
+/b/c/.aa/aa/a// /b/c/.aa/aa/a
+/b/c/.aa/aa/.aa /b/c/.aa/aa/.aa
+/b/c/.aa/aa/.a. /b/c/.aa/aa/.a.
+/b/c/.aa/aa/.a/ /b/c/.aa/aa/.a
+/b/c/.aa/aa/..a /b/c/.aa/aa/..a
+/b/c/.aa/aa/... /b/c/.aa/aa/...
+/b/c/.aa/aa/../ /b/c/.aa
+/b/c/.aa/aa/./a /b/c/.aa/aa/a
+/b/c/.aa/aa/./. /b/c/.aa/aa
+/b/c/.aa/aa/.// /b/c/.aa/aa
+/b/c/.aa/aa//aa /b/c/.aa/aa/aa
+/b/c/.aa/aa//a. /b/c/.aa/aa/a.
+/b/c/.aa/aa//a/ /b/c/.aa/aa/a
+/b/c/.aa/aa//.a /b/c/.aa/aa/.a
+/b/c/.aa/aa//.. /b/c/.aa
+/b/c/.aa/aa//./ /b/c/.aa/aa
+/b/c/.aa/aa///a /b/c/.aa/aa/a
+/b/c/.aa/aa///. /b/c/.aa/aa
+/b/c/.aa/aa//// /b/c/.aa/aa
+/b/c/.aa/a.aaaa /b/c/.aa/a.aaaa
+/b/c/.aa/a.aaa. /b/c/.aa/a.aaa.
+/b/c/.aa/a.aaa/ /b/c/.aa/a.aaa
+/b/c/.aa/a.aa.a /b/c/.aa/a.aa.a
+/b/c/.aa/a.aa.. /b/c/.aa/a.aa..
+/b/c/.aa/a.aa./ /b/c/.aa/a.aa.
+/b/c/.aa/a.aa/a /b/c/.aa/a.aa/a
+/b/c/.aa/a.aa/. /b/c/.aa/a.aa
+/b/c/.aa/a.aa// /b/c/.aa/a.aa
+/b/c/.aa/a.a.aa /b/c/.aa/a.a.aa
+/b/c/.aa/a.a.a. /b/c/.aa/a.a.a.
+/b/c/.aa/a.a.a/ /b/c/.aa/a.a.a
+/b/c/.aa/a.a..a /b/c/.aa/a.a..a
+/b/c/.aa/a.a... /b/c/.aa/a.a...
+/b/c/.aa/a.a../ /b/c/.aa/a.a..
+/b/c/.aa/a.a./a /b/c/.aa/a.a./a
+/b/c/.aa/a.a./. /b/c/.aa/a.a.
+/b/c/.aa/a.a.// /b/c/.aa/a.a.
+/b/c/.aa/a.a/aa /b/c/.aa/a.a/aa
+/b/c/.aa/a.a/a. /b/c/.aa/a.a/a.
+/b/c/.aa/a.a/a/ /b/c/.aa/a.a/a
+/b/c/.aa/a.a/.a /b/c/.aa/a.a/.a
+/b/c/.aa/a.a/.. /b/c/.aa
+/b/c/.aa/a.a/./ /b/c/.aa/a.a
+/b/c/.aa/a.a//a /b/c/.aa/a.a/a
+/b/c/.aa/a.a//. /b/c/.aa/a.a
+/b/c/.aa/a.a/// /b/c/.aa/a.a
+/b/c/.aa/a..aaa /b/c/.aa/a..aaa
+/b/c/.aa/a..aa. /b/c/.aa/a..aa.
+/b/c/.aa/a..aa/ /b/c/.aa/a..aa
+/b/c/.aa/a..a.a /b/c/.aa/a..a.a
+/b/c/.aa/a..a.. /b/c/.aa/a..a..
+/b/c/.aa/a..a./ /b/c/.aa/a..a.
+/b/c/.aa/a..a/a /b/c/.aa/a..a/a
+/b/c/.aa/a..a/. /b/c/.aa/a..a
+/b/c/.aa/a..a// /b/c/.aa/a..a
+/b/c/.aa/a...aa /b/c/.aa/a...aa
+/b/c/.aa/a...a. /b/c/.aa/a...a.
+/b/c/.aa/a...a/ /b/c/.aa/a...a
+/b/c/.aa/a....a /b/c/.aa/a....a
+/b/c/.aa/a..... /b/c/.aa/a.....
+/b/c/.aa/a..../ /b/c/.aa/a....
+/b/c/.aa/a.../a /b/c/.aa/a.../a
+/b/c/.aa/a.../. /b/c/.aa/a...
+/b/c/.aa/a...// /b/c/.aa/a...
+/b/c/.aa/a../aa /b/c/.aa/a../aa
+/b/c/.aa/a../a. /b/c/.aa/a../a.
+/b/c/.aa/a../a/ /b/c/.aa/a../a
+/b/c/.aa/a../.a /b/c/.aa/a../.a
+/b/c/.aa/a../.. /b/c/.aa
+/b/c/.aa/a.././ /b/c/.aa/a..
+/b/c/.aa/a..//a /b/c/.aa/a../a
+/b/c/.aa/a..//. /b/c/.aa/a..
+/b/c/.aa/a../// /b/c/.aa/a..
+/b/c/.aa/a./aaa /b/c/.aa/a./aaa
+/b/c/.aa/a./aa. /b/c/.aa/a./aa.
+/b/c/.aa/a./aa/ /b/c/.aa/a./aa
+/b/c/.aa/a./a.a /b/c/.aa/a./a.a
+/b/c/.aa/a./a.. /b/c/.aa/a./a..
+/b/c/.aa/a./a./ /b/c/.aa/a./a.
+/b/c/.aa/a./a/a /b/c/.aa/a./a/a
+/b/c/.aa/a./a/. /b/c/.aa/a./a
+/b/c/.aa/a./a// /b/c/.aa/a./a
+/b/c/.aa/a./.aa /b/c/.aa/a./.aa
+/b/c/.aa/a./.a. /b/c/.aa/a./.a.
+/b/c/.aa/a./.a/ /b/c/.aa/a./.a
+/b/c/.aa/a./..a /b/c/.aa/a./..a
+/b/c/.aa/a./... /b/c/.aa/a./...
+/b/c/.aa/a./../ /b/c/.aa
+/b/c/.aa/a././a /b/c/.aa/a./a
+/b/c/.aa/a././. /b/c/.aa/a.
+/b/c/.aa/a./.// /b/c/.aa/a.
+/b/c/.aa/a.//aa /b/c/.aa/a./aa
+/b/c/.aa/a.//a. /b/c/.aa/a./a.
+/b/c/.aa/a.//a/ /b/c/.aa/a./a
+/b/c/.aa/a.//.a /b/c/.aa/a./.a
+/b/c/.aa/a.//.. /b/c/.aa
+/b/c/.aa/a.//./ /b/c/.aa/a.
+/b/c/.aa/a.///a /b/c/.aa/a./a
+/b/c/.aa/a.///. /b/c/.aa/a.
+/b/c/.aa/a.//// /b/c/.aa/a.
+/b/c/.aa/a/aaaa /b/c/.aa/a/aaaa
+/b/c/.aa/a/aaa. /b/c/.aa/a/aaa.
+/b/c/.aa/a/aaa/ /b/c/.aa/a/aaa
+/b/c/.aa/a/aa.a /b/c/.aa/a/aa.a
+/b/c/.aa/a/aa.. /b/c/.aa/a/aa..
+/b/c/.aa/a/aa./ /b/c/.aa/a/aa.
+/b/c/.aa/a/aa/a /b/c/.aa/a/aa/a
+/b/c/.aa/a/aa/. /b/c/.aa/a/aa
+/b/c/.aa/a/aa// /b/c/.aa/a/aa
+/b/c/.aa/a/a.aa /b/c/.aa/a/a.aa
+/b/c/.aa/a/a.a. /b/c/.aa/a/a.a.
+/b/c/.aa/a/a.a/ /b/c/.aa/a/a.a
+/b/c/.aa/a/a..a /b/c/.aa/a/a..a
+/b/c/.aa/a/a... /b/c/.aa/a/a...
+/b/c/.aa/a/a../ /b/c/.aa/a/a..
+/b/c/.aa/a/a./a /b/c/.aa/a/a./a
+/b/c/.aa/a/a./. /b/c/.aa/a/a.
+/b/c/.aa/a/a.// /b/c/.aa/a/a.
+/b/c/.aa/a/a/aa /b/c/.aa/a/a/aa
+/b/c/.aa/a/a/a. /b/c/.aa/a/a/a.
+/b/c/.aa/a/a/a/ /b/c/.aa/a/a/a
+/b/c/.aa/a/a/.a /b/c/.aa/a/a/.a
+/b/c/.aa/a/a/.. /b/c/.aa/a
+/b/c/.aa/a/a/./ /b/c/.aa/a/a
+/b/c/.aa/a/a//a /b/c/.aa/a/a/a
+/b/c/.aa/a/a//. /b/c/.aa/a/a
+/b/c/.aa/a/a/// /b/c/.aa/a/a
+/b/c/.aa/a/.aaa /b/c/.aa/a/.aaa
+/b/c/.aa/a/.aa. /b/c/.aa/a/.aa.
+/b/c/.aa/a/.aa/ /b/c/.aa/a/.aa
+/b/c/.aa/a/.a.a /b/c/.aa/a/.a.a
+/b/c/.aa/a/.a.. /b/c/.aa/a/.a..
+/b/c/.aa/a/.a./ /b/c/.aa/a/.a.
+/b/c/.aa/a/.a/a /b/c/.aa/a/.a/a
+/b/c/.aa/a/.a/. /b/c/.aa/a/.a
+/b/c/.aa/a/.a// /b/c/.aa/a/.a
+/b/c/.aa/a/..aa /b/c/.aa/a/..aa
+/b/c/.aa/a/..a. /b/c/.aa/a/..a.
+/b/c/.aa/a/..a/ /b/c/.aa/a/..a
+/b/c/.aa/a/...a /b/c/.aa/a/...a
+/b/c/.aa/a/.... /b/c/.aa/a/....
+/b/c/.aa/a/.../ /b/c/.aa/a/...
+/b/c/.aa/a/../a /b/c/.aa/a
+/b/c/.aa/a/../. /b/c/.aa
+/b/c/.aa/a/..// /b/c/.aa
+/b/c/.aa/a/./aa /b/c/.aa/a/aa
+/b/c/.aa/a/./a. /b/c/.aa/a/a.
+/b/c/.aa/a/./a/ /b/c/.aa/a/a
+/b/c/.aa/a/./.a /b/c/.aa/a/.a
+/b/c/.aa/a/./.. /b/c/.aa
+/b/c/.aa/a/././ /b/c/.aa/a
+/b/c/.aa/a/.//a /b/c/.aa/a/a
+/b/c/.aa/a/.//. /b/c/.aa/a
+/b/c/.aa/a/./// /b/c/.aa/a
+/b/c/.aa/a//aaa /b/c/.aa/a/aaa
+/b/c/.aa/a//aa. /b/c/.aa/a/aa.
+/b/c/.aa/a//aa/ /b/c/.aa/a/aa
+/b/c/.aa/a//a.a /b/c/.aa/a/a.a
+/b/c/.aa/a//a.. /b/c/.aa/a/a..
+/b/c/.aa/a//a./ /b/c/.aa/a/a.
+/b/c/.aa/a//a/a /b/c/.aa/a/a/a
+/b/c/.aa/a//a/. /b/c/.aa/a/a
+/b/c/.aa/a//a// /b/c/.aa/a/a
+/b/c/.aa/a//.aa /b/c/.aa/a/.aa
+/b/c/.aa/a//.a. /b/c/.aa/a/.a.
+/b/c/.aa/a//.a/ /b/c/.aa/a/.a
+/b/c/.aa/a//..a /b/c/.aa/a/..a
+/b/c/.aa/a//... /b/c/.aa/a/...
+/b/c/.aa/a//../ /b/c/.aa
+/b/c/.aa/a//./a /b/c/.aa/a/a
+/b/c/.aa/a//./. /b/c/.aa/a
+/b/c/.aa/a//.// /b/c/.aa/a
+/b/c/.aa/a///aa /b/c/.aa/a/aa
+/b/c/.aa/a///a. /b/c/.aa/a/a.
+/b/c/.aa/a///a/ /b/c/.aa/a/a
+/b/c/.aa/a///.a /b/c/.aa/a/.a
+/b/c/.aa/a///.. /b/c/.aa
+/b/c/.aa/a///./ /b/c/.aa/a
+/b/c/.aa/a////a /b/c/.aa/a/a
+/b/c/.aa/a////. /b/c/.aa/a
+/b/c/.aa/a///// /b/c/.aa/a
+/b/c/.aa/.aaaaa /b/c/.aa/.aaaaa
+/b/c/.aa/.aaaa. /b/c/.aa/.aaaa.
+/b/c/.aa/.aaaa/ /b/c/.aa/.aaaa
+/b/c/.aa/.aaa.a /b/c/.aa/.aaa.a
+/b/c/.aa/.aaa.. /b/c/.aa/.aaa..
+/b/c/.aa/.aaa./ /b/c/.aa/.aaa.
+/b/c/.aa/.aaa/a /b/c/.aa/.aaa/a
+/b/c/.aa/.aaa/. /b/c/.aa/.aaa
+/b/c/.aa/.aaa// /b/c/.aa/.aaa
+/b/c/.aa/.aa.aa /b/c/.aa/.aa.aa
+/b/c/.aa/.aa.a. /b/c/.aa/.aa.a.
+/b/c/.aa/.aa.a/ /b/c/.aa/.aa.a
+/b/c/.aa/.aa..a /b/c/.aa/.aa..a
+/b/c/.aa/.aa... /b/c/.aa/.aa...
+/b/c/.aa/.aa../ /b/c/.aa/.aa..
+/b/c/.aa/.aa./a /b/c/.aa/.aa./a
+/b/c/.aa/.aa./. /b/c/.aa/.aa.
+/b/c/.aa/.aa.// /b/c/.aa/.aa.
+/b/c/.aa/.aa/aa /b/c/.aa/.aa/aa
+/b/c/.aa/.aa/a. /b/c/.aa/.aa/a.
+/b/c/.aa/.aa/a/ /b/c/.aa/.aa/a
+/b/c/.aa/.aa/.a /b/c/.aa/.aa/.a
+/b/c/.aa/.aa/.. /b/c/.aa
+/b/c/.aa/.aa/./ /b/c/.aa/.aa
+/b/c/.aa/.aa//a /b/c/.aa/.aa/a
+/b/c/.aa/.aa//. /b/c/.aa/.aa
+/b/c/.aa/.aa/// /b/c/.aa/.aa
+/b/c/.aa/.a.aaa /b/c/.aa/.a.aaa
+/b/c/.aa/.a.aa. /b/c/.aa/.a.aa.
+/b/c/.aa/.a.aa/ /b/c/.aa/.a.aa
+/b/c/.aa/.a.a.a /b/c/.aa/.a.a.a
+/b/c/.aa/.a.a.. /b/c/.aa/.a.a..
+/b/c/.aa/.a.a./ /b/c/.aa/.a.a.
+/b/c/.aa/.a.a/a /b/c/.aa/.a.a/a
+/b/c/.aa/.a.a/. /b/c/.aa/.a.a
+/b/c/.aa/.a.a// /b/c/.aa/.a.a
+/b/c/.aa/.a..aa /b/c/.aa/.a..aa
+/b/c/.aa/.a..a. /b/c/.aa/.a..a.
+/b/c/.aa/.a..a/ /b/c/.aa/.a..a
+/b/c/.aa/.a...a /b/c/.aa/.a...a
+/b/c/.aa/.a.... /b/c/.aa/.a....
+/b/c/.aa/.a.../ /b/c/.aa/.a...
+/b/c/.aa/.a../a /b/c/.aa/.a../a
+/b/c/.aa/.a../. /b/c/.aa/.a..
+/b/c/.aa/.a..// /b/c/.aa/.a..
+/b/c/.aa/.a./aa /b/c/.aa/.a./aa
+/b/c/.aa/.a./a. /b/c/.aa/.a./a.
+/b/c/.aa/.a./a/ /b/c/.aa/.a./a
+/b/c/.aa/.a./.a /b/c/.aa/.a./.a
+/b/c/.aa/.a./.. /b/c/.aa
+/b/c/.aa/.a././ /b/c/.aa/.a.
+/b/c/.aa/.a.//a /b/c/.aa/.a./a
+/b/c/.aa/.a.//. /b/c/.aa/.a.
+/b/c/.aa/.a./// /b/c/.aa/.a.
+/b/c/.aa/.a/aaa /b/c/.aa/.a/aaa
+/b/c/.aa/.a/aa. /b/c/.aa/.a/aa.
+/b/c/.aa/.a/aa/ /b/c/.aa/.a/aa
+/b/c/.aa/.a/a.a /b/c/.aa/.a/a.a
+/b/c/.aa/.a/a.. /b/c/.aa/.a/a..
+/b/c/.aa/.a/a./ /b/c/.aa/.a/a.
+/b/c/.aa/.a/a/a /b/c/.aa/.a/a/a
+/b/c/.aa/.a/a/. /b/c/.aa/.a/a
+/b/c/.aa/.a/a// /b/c/.aa/.a/a
+/b/c/.aa/.a/.aa /b/c/.aa/.a/.aa
+/b/c/.aa/.a/.a. /b/c/.aa/.a/.a.
+/b/c/.aa/.a/.a/ /b/c/.aa/.a/.a
+/b/c/.aa/.a/..a /b/c/.aa/.a/..a
+/b/c/.aa/.a/... /b/c/.aa/.a/...
+/b/c/.aa/.a/../ /b/c/.aa
+/b/c/.aa/.a/./a /b/c/.aa/.a/a
+/b/c/.aa/.a/./. /b/c/.aa/.a
+/b/c/.aa/.a/.// /b/c/.aa/.a
+/b/c/.aa/.a//aa /b/c/.aa/.a/aa
+/b/c/.aa/.a//a. /b/c/.aa/.a/a.
+/b/c/.aa/.a//a/ /b/c/.aa/.a/a
+/b/c/.aa/.a//.a /b/c/.aa/.a/.a
+/b/c/.aa/.a//.. /b/c/.aa
+/b/c/.aa/.a//./ /b/c/.aa/.a
+/b/c/.aa/.a///a /b/c/.aa/.a/a
+/b/c/.aa/.a///. /b/c/.aa/.a
+/b/c/.aa/.a//// /b/c/.aa/.a
+/b/c/.aa/..aaaa /b/c/.aa/..aaaa
+/b/c/.aa/..aaa. /b/c/.aa/..aaa.
+/b/c/.aa/..aaa/ /b/c/.aa/..aaa
+/b/c/.aa/..aa.a /b/c/.aa/..aa.a
+/b/c/.aa/..aa.. /b/c/.aa/..aa..
+/b/c/.aa/..aa./ /b/c/.aa/..aa.
+/b/c/.aa/..aa/a /b/c/.aa/..aa/a
+/b/c/.aa/..aa/. /b/c/.aa/..aa
+/b/c/.aa/..aa// /b/c/.aa/..aa
+/b/c/.aa/..a.aa /b/c/.aa/..a.aa
+/b/c/.aa/..a.a. /b/c/.aa/..a.a.
+/b/c/.aa/..a.a/ /b/c/.aa/..a.a
+/b/c/.aa/..a..a /b/c/.aa/..a..a
+/b/c/.aa/..a... /b/c/.aa/..a...
+/b/c/.aa/..a../ /b/c/.aa/..a..
+/b/c/.aa/..a./a /b/c/.aa/..a./a
+/b/c/.aa/..a./. /b/c/.aa/..a.
+/b/c/.aa/..a.// /b/c/.aa/..a.
+/b/c/.aa/..a/aa /b/c/.aa/..a/aa
+/b/c/.aa/..a/a. /b/c/.aa/..a/a.
+/b/c/.aa/..a/a/ /b/c/.aa/..a/a
+/b/c/.aa/..a/.a /b/c/.aa/..a/.a
+/b/c/.aa/..a/.. /b/c/.aa
+/b/c/.aa/..a/./ /b/c/.aa/..a
+/b/c/.aa/..a//a /b/c/.aa/..a/a
+/b/c/.aa/..a//. /b/c/.aa/..a
+/b/c/.aa/..a/// /b/c/.aa/..a
+/b/c/.aa/...aaa /b/c/.aa/...aaa
+/b/c/.aa/...aa. /b/c/.aa/...aa.
+/b/c/.aa/...aa/ /b/c/.aa/...aa
+/b/c/.aa/...a.a /b/c/.aa/...a.a
+/b/c/.aa/...a.. /b/c/.aa/...a..
+/b/c/.aa/...a./ /b/c/.aa/...a.
+/b/c/.aa/...a/a /b/c/.aa/...a/a
+/b/c/.aa/...a/. /b/c/.aa/...a
+/b/c/.aa/...a// /b/c/.aa/...a
+/b/c/.aa/....aa /b/c/.aa/....aa
+/b/c/.aa/....a. /b/c/.aa/....a.
+/b/c/.aa/....a/ /b/c/.aa/....a
+/b/c/.aa/.....a /b/c/.aa/.....a
+/b/c/.aa/...... /b/c/.aa/......
+/b/c/.aa/...../ /b/c/.aa/.....
+/b/c/.aa/..../a /b/c/.aa/..../a
+/b/c/.aa/..../. /b/c/.aa/....
+/b/c/.aa/....// /b/c/.aa/....
+/b/c/.aa/.../aa /b/c/.aa/.../aa
+/b/c/.aa/.../a. /b/c/.aa/.../a.
+/b/c/.aa/.../a/ /b/c/.aa/.../a
+/b/c/.aa/.../.a /b/c/.aa/.../.a
+/b/c/.aa/.../.. /b/c/.aa
+/b/c/.aa/..././ /b/c/.aa/...
+/b/c/.aa/...//a /b/c/.aa/.../a
+/b/c/.aa/...//. /b/c/.aa/...
+/b/c/.aa/.../// /b/c/.aa/...
+/b/c/.aa/../aaa /b/c/aaa
+/b/c/.aa/../aa. /b/c/aa.
+/b/c/.aa/../aa/ /b/c/aa
+/b/c/.aa/../a.a /b/c/a.a
+/b/c/.aa/../a.. /b/c/a..
+/b/c/.aa/../a./ /b/c/a.
+/b/c/.aa/../a/a /b/c/a/a
+/b/c/.aa/../a/. /b/c/a
+/b/c/.aa/../a// /b/c/a
+/b/c/.aa/../.aa /b/c/.aa
+/b/c/.aa/../.a. /b/c/.a.
+/b/c/.aa/../.a/ /b/c/.a
+/b/c/.aa/../..a /b/c/..a
+/b/c/.aa/../... /b/c/...
+/b/c/.aa/../../ /b
+/b/c/.aa/.././a /b/c/a
+/b/c/.aa/.././. /b/c
+/b/c/.aa/../.// /b/c
+/b/c/.aa/..//aa /b/c/aa
+/b/c/.aa/..//a. /b/c/a.
+/b/c/.aa/..//a/ /b/c/a
+/b/c/.aa/..//.a /b/c/.a
+/b/c/.aa/..//.. /b
+/b/c/.aa/..//./ /b/c
+/b/c/.aa/..///a /b/c/a
+/b/c/.aa/..///. /b/c
+/b/c/.aa/..//// /b/c
+/b/c/.aa/./aaaa /b/c/.aa/aaaa
+/b/c/.aa/./aaa. /b/c/.aa/aaa.
+/b/c/.aa/./aaa/ /b/c/.aa/aaa
+/b/c/.aa/./aa.a /b/c/.aa/aa.a
+/b/c/.aa/./aa.. /b/c/.aa/aa..
+/b/c/.aa/./aa./ /b/c/.aa/aa.
+/b/c/.aa/./aa/a /b/c/.aa/aa/a
+/b/c/.aa/./aa/. /b/c/.aa/aa
+/b/c/.aa/./aa// /b/c/.aa/aa
+/b/c/.aa/./a.aa /b/c/.aa/a.aa
+/b/c/.aa/./a.a. /b/c/.aa/a.a.
+/b/c/.aa/./a.a/ /b/c/.aa/a.a
+/b/c/.aa/./a..a /b/c/.aa/a..a
+/b/c/.aa/./a... /b/c/.aa/a...
+/b/c/.aa/./a../ /b/c/.aa/a..
+/b/c/.aa/./a./a /b/c/.aa/a./a
+/b/c/.aa/./a./. /b/c/.aa/a.
+/b/c/.aa/./a.// /b/c/.aa/a.
+/b/c/.aa/./a/aa /b/c/.aa/a/aa
+/b/c/.aa/./a/a. /b/c/.aa/a/a.
+/b/c/.aa/./a/a/ /b/c/.aa/a/a
+/b/c/.aa/./a/.a /b/c/.aa/a/.a
+/b/c/.aa/./a/.. /b/c/.aa
+/b/c/.aa/./a/./ /b/c/.aa/a
+/b/c/.aa/./a//a /b/c/.aa/a/a
+/b/c/.aa/./a//. /b/c/.aa/a
+/b/c/.aa/./a/// /b/c/.aa/a
+/b/c/.aa/./.aaa /b/c/.aa/.aaa
+/b/c/.aa/./.aa. /b/c/.aa/.aa.
+/b/c/.aa/./.aa/ /b/c/.aa/.aa
+/b/c/.aa/./.a.a /b/c/.aa/.a.a
+/b/c/.aa/./.a.. /b/c/.aa/.a..
+/b/c/.aa/./.a./ /b/c/.aa/.a.
+/b/c/.aa/./.a/a /b/c/.aa/.a/a
+/b/c/.aa/./.a/. /b/c/.aa/.a
+/b/c/.aa/./.a// /b/c/.aa/.a
+/b/c/.aa/./..aa /b/c/.aa/..aa
+/b/c/.aa/./..a. /b/c/.aa/..a.
+/b/c/.aa/./..a/ /b/c/.aa/..a
+/b/c/.aa/./...a /b/c/.aa/...a
+/b/c/.aa/./.... /b/c/.aa/....
+/b/c/.aa/./.../ /b/c/.aa/...
+/b/c/.aa/./../a /b/c/a
+/b/c/.aa/./../. /b/c
+/b/c/.aa/./..// /b/c
+/b/c/.aa/././aa /b/c/.aa/aa
+/b/c/.aa/././a. /b/c/.aa/a.
+/b/c/.aa/././a/ /b/c/.aa/a
+/b/c/.aa/././.a /b/c/.aa/.a
+/b/c/.aa/././.. /b/c
+/b/c/.aa/./././ /b/c/.aa
+/b/c/.aa/././/a /b/c/.aa/a
+/b/c/.aa/././/. /b/c/.aa
+/b/c/.aa/././// /b/c/.aa
+/b/c/.aa/.//aaa /b/c/.aa/aaa
+/b/c/.aa/.//aa. /b/c/.aa/aa.
+/b/c/.aa/.//aa/ /b/c/.aa/aa
+/b/c/.aa/.//a.a /b/c/.aa/a.a
+/b/c/.aa/.//a.. /b/c/.aa/a..
+/b/c/.aa/.//a./ /b/c/.aa/a.
+/b/c/.aa/.//a/a /b/c/.aa/a/a
+/b/c/.aa/.//a/. /b/c/.aa/a
+/b/c/.aa/.//a// /b/c/.aa/a
+/b/c/.aa/.//.aa /b/c/.aa/.aa
+/b/c/.aa/.//.a. /b/c/.aa/.a.
+/b/c/.aa/.//.a/ /b/c/.aa/.a
+/b/c/.aa/.//..a /b/c/.aa/..a
+/b/c/.aa/.//... /b/c/.aa/...
+/b/c/.aa/.//../ /b/c
+/b/c/.aa/.//./a /b/c/.aa/a
+/b/c/.aa/.//./. /b/c/.aa
+/b/c/.aa/.//.// /b/c/.aa
+/b/c/.aa/.///aa /b/c/.aa/aa
+/b/c/.aa/.///a. /b/c/.aa/a.
+/b/c/.aa/.///a/ /b/c/.aa/a
+/b/c/.aa/.///.a /b/c/.aa/.a
+/b/c/.aa/.///.. /b/c
+/b/c/.aa/.///./ /b/c/.aa
+/b/c/.aa/.////a /b/c/.aa/a
+/b/c/.aa/.////. /b/c/.aa
+/b/c/.aa/.///// /b/c/.aa
+/b/c/.aa//aaaaa /b/c/.aa/aaaaa
+/b/c/.aa//aaaa. /b/c/.aa/aaaa.
+/b/c/.aa//aaaa/ /b/c/.aa/aaaa
+/b/c/.aa//aaa.a /b/c/.aa/aaa.a
+/b/c/.aa//aaa.. /b/c/.aa/aaa..
+/b/c/.aa//aaa./ /b/c/.aa/aaa.
+/b/c/.aa//aaa/a /b/c/.aa/aaa/a
+/b/c/.aa//aaa/. /b/c/.aa/aaa
+/b/c/.aa//aaa// /b/c/.aa/aaa
+/b/c/.aa//aa.aa /b/c/.aa/aa.aa
+/b/c/.aa//aa.a. /b/c/.aa/aa.a.
+/b/c/.aa//aa.a/ /b/c/.aa/aa.a
+/b/c/.aa//aa..a /b/c/.aa/aa..a
+/b/c/.aa//aa... /b/c/.aa/aa...
+/b/c/.aa//aa../ /b/c/.aa/aa..
+/b/c/.aa//aa./a /b/c/.aa/aa./a
+/b/c/.aa//aa./. /b/c/.aa/aa.
+/b/c/.aa//aa.// /b/c/.aa/aa.
+/b/c/.aa//aa/aa /b/c/.aa/aa/aa
+/b/c/.aa//aa/a. /b/c/.aa/aa/a.
+/b/c/.aa//aa/a/ /b/c/.aa/aa/a
+/b/c/.aa//aa/.a /b/c/.aa/aa/.a
+/b/c/.aa//aa/.. /b/c/.aa
+/b/c/.aa//aa/./ /b/c/.aa/aa
+/b/c/.aa//aa//a /b/c/.aa/aa/a
+/b/c/.aa//aa//. /b/c/.aa/aa
+/b/c/.aa//aa/// /b/c/.aa/aa
+/b/c/.aa//a.aaa /b/c/.aa/a.aaa
+/b/c/.aa//a.aa. /b/c/.aa/a.aa.
+/b/c/.aa//a.aa/ /b/c/.aa/a.aa
+/b/c/.aa//a.a.a /b/c/.aa/a.a.a
+/b/c/.aa//a.a.. /b/c/.aa/a.a..
+/b/c/.aa//a.a./ /b/c/.aa/a.a.
+/b/c/.aa//a.a/a /b/c/.aa/a.a/a
+/b/c/.aa//a.a/. /b/c/.aa/a.a
+/b/c/.aa//a.a// /b/c/.aa/a.a
+/b/c/.aa//a..aa /b/c/.aa/a..aa
+/b/c/.aa//a..a. /b/c/.aa/a..a.
+/b/c/.aa//a..a/ /b/c/.aa/a..a
+/b/c/.aa//a...a /b/c/.aa/a...a
+/b/c/.aa//a.... /b/c/.aa/a....
+/b/c/.aa//a.../ /b/c/.aa/a...
+/b/c/.aa//a../a /b/c/.aa/a../a
+/b/c/.aa//a../. /b/c/.aa/a..
+/b/c/.aa//a..// /b/c/.aa/a..
+/b/c/.aa//a./aa /b/c/.aa/a./aa
+/b/c/.aa//a./a. /b/c/.aa/a./a.
+/b/c/.aa//a./a/ /b/c/.aa/a./a
+/b/c/.aa//a./.a /b/c/.aa/a./.a
+/b/c/.aa//a./.. /b/c/.aa
+/b/c/.aa//a././ /b/c/.aa/a.
+/b/c/.aa//a.//a /b/c/.aa/a./a
+/b/c/.aa//a.//. /b/c/.aa/a.
+/b/c/.aa//a./// /b/c/.aa/a.
+/b/c/.aa//a/aaa /b/c/.aa/a/aaa
+/b/c/.aa//a/aa. /b/c/.aa/a/aa.
+/b/c/.aa//a/aa/ /b/c/.aa/a/aa
+/b/c/.aa//a/a.a /b/c/.aa/a/a.a
+/b/c/.aa//a/a.. /b/c/.aa/a/a..
+/b/c/.aa//a/a./ /b/c/.aa/a/a.
+/b/c/.aa//a/a/a /b/c/.aa/a/a/a
+/b/c/.aa//a/a/. /b/c/.aa/a/a
+/b/c/.aa//a/a// /b/c/.aa/a/a
+/b/c/.aa//a/.aa /b/c/.aa/a/.aa
+/b/c/.aa//a/.a. /b/c/.aa/a/.a.
+/b/c/.aa//a/.a/ /b/c/.aa/a/.a
+/b/c/.aa//a/..a /b/c/.aa/a/..a
+/b/c/.aa//a/... /b/c/.aa/a/...
+/b/c/.aa//a/../ /b/c/.aa
+/b/c/.aa//a/./a /b/c/.aa/a/a
+/b/c/.aa//a/./. /b/c/.aa/a
+/b/c/.aa//a/.// /b/c/.aa/a
+/b/c/.aa//a//aa /b/c/.aa/a/aa
+/b/c/.aa//a//a. /b/c/.aa/a/a.
+/b/c/.aa//a//a/ /b/c/.aa/a/a
+/b/c/.aa//a//.a /b/c/.aa/a/.a
+/b/c/.aa//a//.. /b/c/.aa
+/b/c/.aa//a//./ /b/c/.aa/a
+/b/c/.aa//a///a /b/c/.aa/a/a
+/b/c/.aa//a///. /b/c/.aa/a
+/b/c/.aa//a//// /b/c/.aa/a
+/b/c/.aa//.aaaa /b/c/.aa/.aaaa
+/b/c/.aa//.aaa. /b/c/.aa/.aaa.
+/b/c/.aa//.aaa/ /b/c/.aa/.aaa
+/b/c/.aa//.aa.a /b/c/.aa/.aa.a
+/b/c/.aa//.aa.. /b/c/.aa/.aa..
+/b/c/.aa//.aa./ /b/c/.aa/.aa.
+/b/c/.aa//.aa/a /b/c/.aa/.aa/a
+/b/c/.aa//.aa/. /b/c/.aa/.aa
+/b/c/.aa//.aa// /b/c/.aa/.aa
+/b/c/.aa//.a.aa /b/c/.aa/.a.aa
+/b/c/.aa//.a.a. /b/c/.aa/.a.a.
+/b/c/.aa//.a.a/ /b/c/.aa/.a.a
+/b/c/.aa//.a..a /b/c/.aa/.a..a
+/b/c/.aa//.a... /b/c/.aa/.a...
+/b/c/.aa//.a../ /b/c/.aa/.a..
+/b/c/.aa//.a./a /b/c/.aa/.a./a
+/b/c/.aa//.a./. /b/c/.aa/.a.
+/b/c/.aa//.a.// /b/c/.aa/.a.
+/b/c/.aa//.a/aa /b/c/.aa/.a/aa
+/b/c/.aa//.a/a. /b/c/.aa/.a/a.
+/b/c/.aa//.a/a/ /b/c/.aa/.a/a
+/b/c/.aa//.a/.a /b/c/.aa/.a/.a
+/b/c/.aa//.a/.. /b/c/.aa
+/b/c/.aa//.a/./ /b/c/.aa/.a
+/b/c/.aa//.a//a /b/c/.aa/.a/a
+/b/c/.aa//.a//. /b/c/.aa/.a
+/b/c/.aa//.a/// /b/c/.aa/.a
+/b/c/.aa//..aaa /b/c/.aa/..aaa
+/b/c/.aa//..aa. /b/c/.aa/..aa.
+/b/c/.aa//..aa/ /b/c/.aa/..aa
+/b/c/.aa//..a.a /b/c/.aa/..a.a
+/b/c/.aa//..a.. /b/c/.aa/..a..
+/b/c/.aa//..a./ /b/c/.aa/..a.
+/b/c/.aa//..a/a /b/c/.aa/..a/a
+/b/c/.aa//..a/. /b/c/.aa/..a
+/b/c/.aa//..a// /b/c/.aa/..a
+/b/c/.aa//...aa /b/c/.aa/...aa
+/b/c/.aa//...a. /b/c/.aa/...a.
+/b/c/.aa//...a/ /b/c/.aa/...a
+/b/c/.aa//....a /b/c/.aa/....a
+/b/c/.aa//..... /b/c/.aa/.....
+/b/c/.aa//..../ /b/c/.aa/....
+/b/c/.aa//.../a /b/c/.aa/.../a
+/b/c/.aa//.../. /b/c/.aa/...
+/b/c/.aa//...// /b/c/.aa/...
+/b/c/.aa//../aa /b/c/aa
+/b/c/.aa//../a. /b/c/a.
+/b/c/.aa//../a/ /b/c/a
+/b/c/.aa//../.a /b/c/.a
+/b/c/.aa//../.. /b
+/b/c/.aa//.././ /b/c
+/b/c/.aa//..//a /b/c/a
+/b/c/.aa//..//. /b/c
+/b/c/.aa//../// /b/c
+/b/c/.aa//./aaa /b/c/.aa/aaa
+/b/c/.aa//./aa. /b/c/.aa/aa.
+/b/c/.aa//./aa/ /b/c/.aa/aa
+/b/c/.aa//./a.a /b/c/.aa/a.a
+/b/c/.aa//./a.. /b/c/.aa/a..
+/b/c/.aa//./a./ /b/c/.aa/a.
+/b/c/.aa//./a/a /b/c/.aa/a/a
+/b/c/.aa//./a/. /b/c/.aa/a
+/b/c/.aa//./a// /b/c/.aa/a
+/b/c/.aa//./.aa /b/c/.aa/.aa
+/b/c/.aa//./.a. /b/c/.aa/.a.
+/b/c/.aa//./.a/ /b/c/.aa/.a
+/b/c/.aa//./..a /b/c/.aa/..a
+/b/c/.aa//./... /b/c/.aa/...
+/b/c/.aa//./../ /b/c
+/b/c/.aa//././a /b/c/.aa/a
+/b/c/.aa//././. /b/c/.aa
+/b/c/.aa//./.// /b/c/.aa
+/b/c/.aa//.//aa /b/c/.aa/aa
+/b/c/.aa//.//a. /b/c/.aa/a.
+/b/c/.aa//.//a/ /b/c/.aa/a
+/b/c/.aa//.//.a /b/c/.aa/.a
+/b/c/.aa//.//.. /b/c
+/b/c/.aa//.//./ /b/c/.aa
+/b/c/.aa//.///a /b/c/.aa/a
+/b/c/.aa//.///. /b/c/.aa
+/b/c/.aa//.//// /b/c/.aa
+/b/c/.aa///aaaa /b/c/.aa/aaaa
+/b/c/.aa///aaa. /b/c/.aa/aaa.
+/b/c/.aa///aaa/ /b/c/.aa/aaa
+/b/c/.aa///aa.a /b/c/.aa/aa.a
+/b/c/.aa///aa.. /b/c/.aa/aa..
+/b/c/.aa///aa./ /b/c/.aa/aa.
+/b/c/.aa///aa/a /b/c/.aa/aa/a
+/b/c/.aa///aa/. /b/c/.aa/aa
+/b/c/.aa///aa// /b/c/.aa/aa
+/b/c/.aa///a.aa /b/c/.aa/a.aa
+/b/c/.aa///a.a. /b/c/.aa/a.a.
+/b/c/.aa///a.a/ /b/c/.aa/a.a
+/b/c/.aa///a..a /b/c/.aa/a..a
+/b/c/.aa///a... /b/c/.aa/a...
+/b/c/.aa///a../ /b/c/.aa/a..
+/b/c/.aa///a./a /b/c/.aa/a./a
+/b/c/.aa///a./. /b/c/.aa/a.
+/b/c/.aa///a.// /b/c/.aa/a.
+/b/c/.aa///a/aa /b/c/.aa/a/aa
+/b/c/.aa///a/a. /b/c/.aa/a/a.
+/b/c/.aa///a/a/ /b/c/.aa/a/a
+/b/c/.aa///a/.a /b/c/.aa/a/.a
+/b/c/.aa///a/.. /b/c/.aa
+/b/c/.aa///a/./ /b/c/.aa/a
+/b/c/.aa///a//a /b/c/.aa/a/a
+/b/c/.aa///a//. /b/c/.aa/a
+/b/c/.aa///a/// /b/c/.aa/a
+/b/c/.aa///.aaa /b/c/.aa/.aaa
+/b/c/.aa///.aa. /b/c/.aa/.aa.
+/b/c/.aa///.aa/ /b/c/.aa/.aa
+/b/c/.aa///.a.a /b/c/.aa/.a.a
+/b/c/.aa///.a.. /b/c/.aa/.a..
+/b/c/.aa///.a./ /b/c/.aa/.a.
+/b/c/.aa///.a/a /b/c/.aa/.a/a
+/b/c/.aa///.a/. /b/c/.aa/.a
+/b/c/.aa///.a// /b/c/.aa/.a
+/b/c/.aa///..aa /b/c/.aa/..aa
+/b/c/.aa///..a. /b/c/.aa/..a.
+/b/c/.aa///..a/ /b/c/.aa/..a
+/b/c/.aa///...a /b/c/.aa/...a
+/b/c/.aa///.... /b/c/.aa/....
+/b/c/.aa///.../ /b/c/.aa/...
+/b/c/.aa///../a /b/c/a
+/b/c/.aa///../. /b/c
+/b/c/.aa///..// /b/c
+/b/c/.aa///./aa /b/c/.aa/aa
+/b/c/.aa///./a. /b/c/.aa/a.
+/b/c/.aa///./a/ /b/c/.aa/a
+/b/c/.aa///./.a /b/c/.aa/.a
+/b/c/.aa///./.. /b/c
+/b/c/.aa///././ /b/c/.aa
+/b/c/.aa///.//a /b/c/.aa/a
+/b/c/.aa///.//. /b/c/.aa
+/b/c/.aa///./// /b/c/.aa
+/b/c/.aa////aaa /b/c/.aa/aaa
+/b/c/.aa////aa. /b/c/.aa/aa.
+/b/c/.aa////aa/ /b/c/.aa/aa
+/b/c/.aa////a.a /b/c/.aa/a.a
+/b/c/.aa////a.. /b/c/.aa/a..
+/b/c/.aa////a./ /b/c/.aa/a.
+/b/c/.aa////a/a /b/c/.aa/a/a
+/b/c/.aa////a/. /b/c/.aa/a
+/b/c/.aa////a// /b/c/.aa/a
+/b/c/.aa////.aa /b/c/.aa/.aa
+/b/c/.aa////.a. /b/c/.aa/.a.
+/b/c/.aa////.a/ /b/c/.aa/.a
+/b/c/.aa////..a /b/c/.aa/..a
+/b/c/.aa////... /b/c/.aa/...
+/b/c/.aa////../ /b/c
+/b/c/.aa////./a /b/c/.aa/a
+/b/c/.aa////./. /b/c/.aa
+/b/c/.aa////.// /b/c/.aa
+/b/c/.aa/////aa /b/c/.aa/aa
+/b/c/.aa/////a. /b/c/.aa/a.
+/b/c/.aa/////a/ /b/c/.aa/a
+/b/c/.aa/////.a /b/c/.aa/.a
+/b/c/.aa/////.. /b/c
+/b/c/.aa/////./ /b/c/.aa
+/b/c/.aa//////a /b/c/.aa/a
+/b/c/.aa//////. /b/c/.aa
+/b/c/.aa/////// /b/c/.aa
+/b/c/.a.aaaaaaa /b/c/.a.aaaaaaa
+/b/c/.a.aaaaaa. /b/c/.a.aaaaaa.
+/b/c/.a.aaaaaa/ /b/c/.a.aaaaaa
+/b/c/.a.aaaaa.a /b/c/.a.aaaaa.a
+/b/c/.a.aaaaa.. /b/c/.a.aaaaa..
+/b/c/.a.aaaaa./ /b/c/.a.aaaaa.
+/b/c/.a.aaaaa/a /b/c/.a.aaaaa/a
+/b/c/.a.aaaaa/. /b/c/.a.aaaaa
+/b/c/.a.aaaaa// /b/c/.a.aaaaa
+/b/c/.a.aaaa.aa /b/c/.a.aaaa.aa
+/b/c/.a.aaaa.a. /b/c/.a.aaaa.a.
+/b/c/.a.aaaa.a/ /b/c/.a.aaaa.a
+/b/c/.a.aaaa..a /b/c/.a.aaaa..a
+/b/c/.a.aaaa... /b/c/.a.aaaa...
+/b/c/.a.aaaa../ /b/c/.a.aaaa..
+/b/c/.a.aaaa./a /b/c/.a.aaaa./a
+/b/c/.a.aaaa./. /b/c/.a.aaaa.
+/b/c/.a.aaaa.// /b/c/.a.aaaa.
+/b/c/.a.aaaa/aa /b/c/.a.aaaa/aa
+/b/c/.a.aaaa/a. /b/c/.a.aaaa/a.
+/b/c/.a.aaaa/a/ /b/c/.a.aaaa/a
+/b/c/.a.aaaa/.a /b/c/.a.aaaa/.a
+/b/c/.a.aaaa/.. /b/c
+/b/c/.a.aaaa/./ /b/c/.a.aaaa
+/b/c/.a.aaaa//a /b/c/.a.aaaa/a
+/b/c/.a.aaaa//. /b/c/.a.aaaa
+/b/c/.a.aaaa/// /b/c/.a.aaaa
+/b/c/.a.aaa.aaa /b/c/.a.aaa.aaa
+/b/c/.a.aaa.aa. /b/c/.a.aaa.aa.
+/b/c/.a.aaa.aa/ /b/c/.a.aaa.aa
+/b/c/.a.aaa.a.a /b/c/.a.aaa.a.a
+/b/c/.a.aaa.a.. /b/c/.a.aaa.a..
+/b/c/.a.aaa.a./ /b/c/.a.aaa.a.
+/b/c/.a.aaa.a/a /b/c/.a.aaa.a/a
+/b/c/.a.aaa.a/. /b/c/.a.aaa.a
+/b/c/.a.aaa.a// /b/c/.a.aaa.a
+/b/c/.a.aaa..aa /b/c/.a.aaa..aa
+/b/c/.a.aaa..a. /b/c/.a.aaa..a.
+/b/c/.a.aaa..a/ /b/c/.a.aaa..a
+/b/c/.a.aaa...a /b/c/.a.aaa...a
+/b/c/.a.aaa.... /b/c/.a.aaa....
+/b/c/.a.aaa.../ /b/c/.a.aaa...
+/b/c/.a.aaa../a /b/c/.a.aaa../a
+/b/c/.a.aaa../. /b/c/.a.aaa..
+/b/c/.a.aaa..// /b/c/.a.aaa..
+/b/c/.a.aaa./aa /b/c/.a.aaa./aa
+/b/c/.a.aaa./a. /b/c/.a.aaa./a.
+/b/c/.a.aaa./a/ /b/c/.a.aaa./a
+/b/c/.a.aaa./.a /b/c/.a.aaa./.a
+/b/c/.a.aaa./.. /b/c
+/b/c/.a.aaa././ /b/c/.a.aaa.
+/b/c/.a.aaa.//a /b/c/.a.aaa./a
+/b/c/.a.aaa.//. /b/c/.a.aaa.
+/b/c/.a.aaa./// /b/c/.a.aaa.
+/b/c/.a.aaa/aaa /b/c/.a.aaa/aaa
+/b/c/.a.aaa/aa. /b/c/.a.aaa/aa.
+/b/c/.a.aaa/aa/ /b/c/.a.aaa/aa
+/b/c/.a.aaa/a.a /b/c/.a.aaa/a.a
+/b/c/.a.aaa/a.. /b/c/.a.aaa/a..
+/b/c/.a.aaa/a./ /b/c/.a.aaa/a.
+/b/c/.a.aaa/a/a /b/c/.a.aaa/a/a
+/b/c/.a.aaa/a/. /b/c/.a.aaa/a
+/b/c/.a.aaa/a// /b/c/.a.aaa/a
+/b/c/.a.aaa/.aa /b/c/.a.aaa/.aa
+/b/c/.a.aaa/.a. /b/c/.a.aaa/.a.
+/b/c/.a.aaa/.a/ /b/c/.a.aaa/.a
+/b/c/.a.aaa/..a /b/c/.a.aaa/..a
+/b/c/.a.aaa/... /b/c/.a.aaa/...
+/b/c/.a.aaa/../ /b/c
+/b/c/.a.aaa/./a /b/c/.a.aaa/a
+/b/c/.a.aaa/./. /b/c/.a.aaa
+/b/c/.a.aaa/.// /b/c/.a.aaa
+/b/c/.a.aaa//aa /b/c/.a.aaa/aa
+/b/c/.a.aaa//a. /b/c/.a.aaa/a.
+/b/c/.a.aaa//a/ /b/c/.a.aaa/a
+/b/c/.a.aaa//.a /b/c/.a.aaa/.a
+/b/c/.a.aaa//.. /b/c
+/b/c/.a.aaa//./ /b/c/.a.aaa
+/b/c/.a.aaa///a /b/c/.a.aaa/a
+/b/c/.a.aaa///. /b/c/.a.aaa
+/b/c/.a.aaa//// /b/c/.a.aaa
+/b/c/.a.aa.aaaa /b/c/.a.aa.aaaa
+/b/c/.a.aa.aaa. /b/c/.a.aa.aaa.
+/b/c/.a.aa.aaa/ /b/c/.a.aa.aaa
+/b/c/.a.aa.aa.a /b/c/.a.aa.aa.a
+/b/c/.a.aa.aa.. /b/c/.a.aa.aa..
+/b/c/.a.aa.aa./ /b/c/.a.aa.aa.
+/b/c/.a.aa.aa/a /b/c/.a.aa.aa/a
+/b/c/.a.aa.aa/. /b/c/.a.aa.aa
+/b/c/.a.aa.aa// /b/c/.a.aa.aa
+/b/c/.a.aa.a.aa /b/c/.a.aa.a.aa
+/b/c/.a.aa.a.a. /b/c/.a.aa.a.a.
+/b/c/.a.aa.a.a/ /b/c/.a.aa.a.a
+/b/c/.a.aa.a..a /b/c/.a.aa.a..a
+/b/c/.a.aa.a... /b/c/.a.aa.a...
+/b/c/.a.aa.a../ /b/c/.a.aa.a..
+/b/c/.a.aa.a./a /b/c/.a.aa.a./a
+/b/c/.a.aa.a./. /b/c/.a.aa.a.
+/b/c/.a.aa.a.// /b/c/.a.aa.a.
+/b/c/.a.aa.a/aa /b/c/.a.aa.a/aa
+/b/c/.a.aa.a/a. /b/c/.a.aa.a/a.
+/b/c/.a.aa.a/a/ /b/c/.a.aa.a/a
+/b/c/.a.aa.a/.a /b/c/.a.aa.a/.a
+/b/c/.a.aa.a/.. /b/c
+/b/c/.a.aa.a/./ /b/c/.a.aa.a
+/b/c/.a.aa.a//a /b/c/.a.aa.a/a
+/b/c/.a.aa.a//. /b/c/.a.aa.a
+/b/c/.a.aa.a/// /b/c/.a.aa.a
+/b/c/.a.aa..aaa /b/c/.a.aa..aaa
+/b/c/.a.aa..aa. /b/c/.a.aa..aa.
+/b/c/.a.aa..aa/ /b/c/.a.aa..aa
+/b/c/.a.aa..a.a /b/c/.a.aa..a.a
+/b/c/.a.aa..a.. /b/c/.a.aa..a..
+/b/c/.a.aa..a./ /b/c/.a.aa..a.
+/b/c/.a.aa..a/a /b/c/.a.aa..a/a
+/b/c/.a.aa..a/. /b/c/.a.aa..a
+/b/c/.a.aa..a// /b/c/.a.aa..a
+/b/c/.a.aa...aa /b/c/.a.aa...aa
+/b/c/.a.aa...a. /b/c/.a.aa...a.
+/b/c/.a.aa...a/ /b/c/.a.aa...a
+/b/c/.a.aa....a /b/c/.a.aa....a
+/b/c/.a.aa..... /b/c/.a.aa.....
+/b/c/.a.aa..../ /b/c/.a.aa....
+/b/c/.a.aa.../a /b/c/.a.aa.../a
+/b/c/.a.aa.../. /b/c/.a.aa...
+/b/c/.a.aa...// /b/c/.a.aa...
+/b/c/.a.aa../aa /b/c/.a.aa../aa
+/b/c/.a.aa../a. /b/c/.a.aa../a.
+/b/c/.a.aa../a/ /b/c/.a.aa../a
+/b/c/.a.aa../.a /b/c/.a.aa../.a
+/b/c/.a.aa../.. /b/c
+/b/c/.a.aa.././ /b/c/.a.aa..
+/b/c/.a.aa..//a /b/c/.a.aa../a
+/b/c/.a.aa..//. /b/c/.a.aa..
+/b/c/.a.aa../// /b/c/.a.aa..
+/b/c/.a.aa./aaa /b/c/.a.aa./aaa
+/b/c/.a.aa./aa. /b/c/.a.aa./aa.
+/b/c/.a.aa./aa/ /b/c/.a.aa./aa
+/b/c/.a.aa./a.a /b/c/.a.aa./a.a
+/b/c/.a.aa./a.. /b/c/.a.aa./a..
+/b/c/.a.aa./a./ /b/c/.a.aa./a.
+/b/c/.a.aa./a/a /b/c/.a.aa./a/a
+/b/c/.a.aa./a/. /b/c/.a.aa./a
+/b/c/.a.aa./a// /b/c/.a.aa./a
+/b/c/.a.aa./.aa /b/c/.a.aa./.aa
+/b/c/.a.aa./.a. /b/c/.a.aa./.a.
+/b/c/.a.aa./.a/ /b/c/.a.aa./.a
+/b/c/.a.aa./..a /b/c/.a.aa./..a
+/b/c/.a.aa./... /b/c/.a.aa./...
+/b/c/.a.aa./../ /b/c
+/b/c/.a.aa././a /b/c/.a.aa./a
+/b/c/.a.aa././. /b/c/.a.aa.
+/b/c/.a.aa./.// /b/c/.a.aa.
+/b/c/.a.aa.//aa /b/c/.a.aa./aa
+/b/c/.a.aa.//a. /b/c/.a.aa./a.
+/b/c/.a.aa.//a/ /b/c/.a.aa./a
+/b/c/.a.aa.//.a /b/c/.a.aa./.a
+/b/c/.a.aa.//.. /b/c
+/b/c/.a.aa.//./ /b/c/.a.aa.
+/b/c/.a.aa.///a /b/c/.a.aa./a
+/b/c/.a.aa.///. /b/c/.a.aa.
+/b/c/.a.aa.//// /b/c/.a.aa.
+/b/c/.a.aa/aaaa /b/c/.a.aa/aaaa
+/b/c/.a.aa/aaa. /b/c/.a.aa/aaa.
+/b/c/.a.aa/aaa/ /b/c/.a.aa/aaa
+/b/c/.a.aa/aa.a /b/c/.a.aa/aa.a
+/b/c/.a.aa/aa.. /b/c/.a.aa/aa..
+/b/c/.a.aa/aa./ /b/c/.a.aa/aa.
+/b/c/.a.aa/aa/a /b/c/.a.aa/aa/a
+/b/c/.a.aa/aa/. /b/c/.a.aa/aa
+/b/c/.a.aa/aa// /b/c/.a.aa/aa
+/b/c/.a.aa/a.aa /b/c/.a.aa/a.aa
+/b/c/.a.aa/a.a. /b/c/.a.aa/a.a.
+/b/c/.a.aa/a.a/ /b/c/.a.aa/a.a
+/b/c/.a.aa/a..a /b/c/.a.aa/a..a
+/b/c/.a.aa/a... /b/c/.a.aa/a...
+/b/c/.a.aa/a../ /b/c/.a.aa/a..
+/b/c/.a.aa/a./a /b/c/.a.aa/a./a
+/b/c/.a.aa/a./. /b/c/.a.aa/a.
+/b/c/.a.aa/a.// /b/c/.a.aa/a.
+/b/c/.a.aa/a/aa /b/c/.a.aa/a/aa
+/b/c/.a.aa/a/a. /b/c/.a.aa/a/a.
+/b/c/.a.aa/a/a/ /b/c/.a.aa/a/a
+/b/c/.a.aa/a/.a /b/c/.a.aa/a/.a
+/b/c/.a.aa/a/.. /b/c/.a.aa
+/b/c/.a.aa/a/./ /b/c/.a.aa/a
+/b/c/.a.aa/a//a /b/c/.a.aa/a/a
+/b/c/.a.aa/a//. /b/c/.a.aa/a
+/b/c/.a.aa/a/// /b/c/.a.aa/a
+/b/c/.a.aa/.aaa /b/c/.a.aa/.aaa
+/b/c/.a.aa/.aa. /b/c/.a.aa/.aa.
+/b/c/.a.aa/.aa/ /b/c/.a.aa/.aa
+/b/c/.a.aa/.a.a /b/c/.a.aa/.a.a
+/b/c/.a.aa/.a.. /b/c/.a.aa/.a..
+/b/c/.a.aa/.a./ /b/c/.a.aa/.a.
+/b/c/.a.aa/.a/a /b/c/.a.aa/.a/a
+/b/c/.a.aa/.a/. /b/c/.a.aa/.a
+/b/c/.a.aa/.a// /b/c/.a.aa/.a
+/b/c/.a.aa/..aa /b/c/.a.aa/..aa
+/b/c/.a.aa/..a. /b/c/.a.aa/..a.
+/b/c/.a.aa/..a/ /b/c/.a.aa/..a
+/b/c/.a.aa/...a /b/c/.a.aa/...a
+/b/c/.a.aa/.... /b/c/.a.aa/....
+/b/c/.a.aa/.../ /b/c/.a.aa/...
+/b/c/.a.aa/../a /b/c/a
+/b/c/.a.aa/../. /b/c
+/b/c/.a.aa/..// /b/c
+/b/c/.a.aa/./aa /b/c/.a.aa/aa
+/b/c/.a.aa/./a. /b/c/.a.aa/a.
+/b/c/.a.aa/./a/ /b/c/.a.aa/a
+/b/c/.a.aa/./.a /b/c/.a.aa/.a
+/b/c/.a.aa/./.. /b/c
+/b/c/.a.aa/././ /b/c/.a.aa
+/b/c/.a.aa/.//a /b/c/.a.aa/a
+/b/c/.a.aa/.//. /b/c/.a.aa
+/b/c/.a.aa/./// /b/c/.a.aa
+/b/c/.a.aa//aaa /b/c/.a.aa/aaa
+/b/c/.a.aa//aa. /b/c/.a.aa/aa.
+/b/c/.a.aa//aa/ /b/c/.a.aa/aa
+/b/c/.a.aa//a.a /b/c/.a.aa/a.a
+/b/c/.a.aa//a.. /b/c/.a.aa/a..
+/b/c/.a.aa//a./ /b/c/.a.aa/a.
+/b/c/.a.aa//a/a /b/c/.a.aa/a/a
+/b/c/.a.aa//a/. /b/c/.a.aa/a
+/b/c/.a.aa//a// /b/c/.a.aa/a
+/b/c/.a.aa//.aa /b/c/.a.aa/.aa
+/b/c/.a.aa//.a. /b/c/.a.aa/.a.
+/b/c/.a.aa//.a/ /b/c/.a.aa/.a
+/b/c/.a.aa//..a /b/c/.a.aa/..a
+/b/c/.a.aa//... /b/c/.a.aa/...
+/b/c/.a.aa//../ /b/c
+/b/c/.a.aa//./a /b/c/.a.aa/a
+/b/c/.a.aa//./. /b/c/.a.aa
+/b/c/.a.aa//.// /b/c/.a.aa
+/b/c/.a.aa///aa /b/c/.a.aa/aa
+/b/c/.a.aa///a. /b/c/.a.aa/a.
+/b/c/.a.aa///a/ /b/c/.a.aa/a
+/b/c/.a.aa///.a /b/c/.a.aa/.a
+/b/c/.a.aa///.. /b/c
+/b/c/.a.aa///./ /b/c/.a.aa
+/b/c/.a.aa////a /b/c/.a.aa/a
+/b/c/.a.aa////. /b/c/.a.aa
+/b/c/.a.aa///// /b/c/.a.aa
+/b/c/.a.a.aaaaa /b/c/.a.a.aaaaa
+/b/c/.a.a.aaaa. /b/c/.a.a.aaaa.
+/b/c/.a.a.aaaa/ /b/c/.a.a.aaaa
+/b/c/.a.a.aaa.a /b/c/.a.a.aaa.a
+/b/c/.a.a.aaa.. /b/c/.a.a.aaa..
+/b/c/.a.a.aaa./ /b/c/.a.a.aaa.
+/b/c/.a.a.aaa/a /b/c/.a.a.aaa/a
+/b/c/.a.a.aaa/. /b/c/.a.a.aaa
+/b/c/.a.a.aaa// /b/c/.a.a.aaa
+/b/c/.a.a.aa.aa /b/c/.a.a.aa.aa
+/b/c/.a.a.aa.a. /b/c/.a.a.aa.a.
+/b/c/.a.a.aa.a/ /b/c/.a.a.aa.a
+/b/c/.a.a.aa..a /b/c/.a.a.aa..a
+/b/c/.a.a.aa... /b/c/.a.a.aa...
+/b/c/.a.a.aa../ /b/c/.a.a.aa..
+/b/c/.a.a.aa./a /b/c/.a.a.aa./a
+/b/c/.a.a.aa./. /b/c/.a.a.aa.
+/b/c/.a.a.aa.// /b/c/.a.a.aa.
+/b/c/.a.a.aa/aa /b/c/.a.a.aa/aa
+/b/c/.a.a.aa/a. /b/c/.a.a.aa/a.
+/b/c/.a.a.aa/a/ /b/c/.a.a.aa/a
+/b/c/.a.a.aa/.a /b/c/.a.a.aa/.a
+/b/c/.a.a.aa/.. /b/c
+/b/c/.a.a.aa/./ /b/c/.a.a.aa
+/b/c/.a.a.aa//a /b/c/.a.a.aa/a
+/b/c/.a.a.aa//. /b/c/.a.a.aa
+/b/c/.a.a.aa/// /b/c/.a.a.aa
+/b/c/.a.a.a.aaa /b/c/.a.a.a.aaa
+/b/c/.a.a.a.aa. /b/c/.a.a.a.aa.
+/b/c/.a.a.a.aa/ /b/c/.a.a.a.aa
+/b/c/.a.a.a.a.a /b/c/.a.a.a.a.a
+/b/c/.a.a.a.a.. /b/c/.a.a.a.a..
+/b/c/.a.a.a.a./ /b/c/.a.a.a.a.
+/b/c/.a.a.a.a/a /b/c/.a.a.a.a/a
+/b/c/.a.a.a.a/. /b/c/.a.a.a.a
+/b/c/.a.a.a.a// /b/c/.a.a.a.a
+/b/c/.a.a.a..aa /b/c/.a.a.a..aa
+/b/c/.a.a.a..a. /b/c/.a.a.a..a.
+/b/c/.a.a.a..a/ /b/c/.a.a.a..a
+/b/c/.a.a.a...a /b/c/.a.a.a...a
+/b/c/.a.a.a.... /b/c/.a.a.a....
+/b/c/.a.a.a.../ /b/c/.a.a.a...
+/b/c/.a.a.a../a /b/c/.a.a.a../a
+/b/c/.a.a.a../. /b/c/.a.a.a..
+/b/c/.a.a.a..// /b/c/.a.a.a..
+/b/c/.a.a.a./aa /b/c/.a.a.a./aa
+/b/c/.a.a.a./a. /b/c/.a.a.a./a.
+/b/c/.a.a.a./a/ /b/c/.a.a.a./a
+/b/c/.a.a.a./.a /b/c/.a.a.a./.a
+/b/c/.a.a.a./.. /b/c
+/b/c/.a.a.a././ /b/c/.a.a.a.
+/b/c/.a.a.a.//a /b/c/.a.a.a./a
+/b/c/.a.a.a.//. /b/c/.a.a.a.
+/b/c/.a.a.a./// /b/c/.a.a.a.
+/b/c/.a.a.a/aaa /b/c/.a.a.a/aaa
+/b/c/.a.a.a/aa. /b/c/.a.a.a/aa.
+/b/c/.a.a.a/aa/ /b/c/.a.a.a/aa
+/b/c/.a.a.a/a.a /b/c/.a.a.a/a.a
+/b/c/.a.a.a/a.. /b/c/.a.a.a/a..
+/b/c/.a.a.a/a./ /b/c/.a.a.a/a.
+/b/c/.a.a.a/a/a /b/c/.a.a.a/a/a
+/b/c/.a.a.a/a/. /b/c/.a.a.a/a
+/b/c/.a.a.a/a// /b/c/.a.a.a/a
+/b/c/.a.a.a/.aa /b/c/.a.a.a/.aa
+/b/c/.a.a.a/.a. /b/c/.a.a.a/.a.
+/b/c/.a.a.a/.a/ /b/c/.a.a.a/.a
+/b/c/.a.a.a/..a /b/c/.a.a.a/..a
+/b/c/.a.a.a/... /b/c/.a.a.a/...
+/b/c/.a.a.a/../ /b/c
+/b/c/.a.a.a/./a /b/c/.a.a.a/a
+/b/c/.a.a.a/./. /b/c/.a.a.a
+/b/c/.a.a.a/.// /b/c/.a.a.a
+/b/c/.a.a.a//aa /b/c/.a.a.a/aa
+/b/c/.a.a.a//a. /b/c/.a.a.a/a.
+/b/c/.a.a.a//a/ /b/c/.a.a.a/a
+/b/c/.a.a.a//.a /b/c/.a.a.a/.a
+/b/c/.a.a.a//.. /b/c
+/b/c/.a.a.a//./ /b/c/.a.a.a
+/b/c/.a.a.a///a /b/c/.a.a.a/a
+/b/c/.a.a.a///. /b/c/.a.a.a
+/b/c/.a.a.a//// /b/c/.a.a.a
+/b/c/.a.a..aaaa /b/c/.a.a..aaaa
+/b/c/.a.a..aaa. /b/c/.a.a..aaa.
+/b/c/.a.a..aaa/ /b/c/.a.a..aaa
+/b/c/.a.a..aa.a /b/c/.a.a..aa.a
+/b/c/.a.a..aa.. /b/c/.a.a..aa..
+/b/c/.a.a..aa./ /b/c/.a.a..aa.
+/b/c/.a.a..aa/a /b/c/.a.a..aa/a
+/b/c/.a.a..aa/. /b/c/.a.a..aa
+/b/c/.a.a..aa// /b/c/.a.a..aa
+/b/c/.a.a..a.aa /b/c/.a.a..a.aa
+/b/c/.a.a..a.a. /b/c/.a.a..a.a.
+/b/c/.a.a..a.a/ /b/c/.a.a..a.a
+/b/c/.a.a..a..a /b/c/.a.a..a..a
+/b/c/.a.a..a... /b/c/.a.a..a...
+/b/c/.a.a..a../ /b/c/.a.a..a..
+/b/c/.a.a..a./a /b/c/.a.a..a./a
+/b/c/.a.a..a./. /b/c/.a.a..a.
+/b/c/.a.a..a.// /b/c/.a.a..a.
+/b/c/.a.a..a/aa /b/c/.a.a..a/aa
+/b/c/.a.a..a/a. /b/c/.a.a..a/a.
+/b/c/.a.a..a/a/ /b/c/.a.a..a/a
+/b/c/.a.a..a/.a /b/c/.a.a..a/.a
+/b/c/.a.a..a/.. /b/c
+/b/c/.a.a..a/./ /b/c/.a.a..a
+/b/c/.a.a..a//a /b/c/.a.a..a/a
+/b/c/.a.a..a//. /b/c/.a.a..a
+/b/c/.a.a..a/// /b/c/.a.a..a
+/b/c/.a.a...aaa /b/c/.a.a...aaa
+/b/c/.a.a...aa. /b/c/.a.a...aa.
+/b/c/.a.a...aa/ /b/c/.a.a...aa
+/b/c/.a.a...a.a /b/c/.a.a...a.a
+/b/c/.a.a...a.. /b/c/.a.a...a..
+/b/c/.a.a...a./ /b/c/.a.a...a.
+/b/c/.a.a...a/a /b/c/.a.a...a/a
+/b/c/.a.a...a/. /b/c/.a.a...a
+/b/c/.a.a...a// /b/c/.a.a...a
+/b/c/.a.a....aa /b/c/.a.a....aa
+/b/c/.a.a....a. /b/c/.a.a....a.
+/b/c/.a.a....a/ /b/c/.a.a....a
+/b/c/.a.a.....a /b/c/.a.a.....a
+/b/c/.a.a...... /b/c/.a.a......
+/b/c/.a.a...../ /b/c/.a.a.....
+/b/c/.a.a..../a /b/c/.a.a..../a
+/b/c/.a.a..../. /b/c/.a.a....
+/b/c/.a.a....// /b/c/.a.a....
+/b/c/.a.a.../aa /b/c/.a.a.../aa
+/b/c/.a.a.../a. /b/c/.a.a.../a.
+/b/c/.a.a.../a/ /b/c/.a.a.../a
+/b/c/.a.a.../.a /b/c/.a.a.../.a
+/b/c/.a.a.../.. /b/c
+/b/c/.a.a..././ /b/c/.a.a...
+/b/c/.a.a...//a /b/c/.a.a.../a
+/b/c/.a.a...//. /b/c/.a.a...
+/b/c/.a.a.../// /b/c/.a.a...
+/b/c/.a.a../aaa /b/c/.a.a../aaa
+/b/c/.a.a../aa. /b/c/.a.a../aa.
+/b/c/.a.a../aa/ /b/c/.a.a../aa
+/b/c/.a.a../a.a /b/c/.a.a../a.a
+/b/c/.a.a../a.. /b/c/.a.a../a..
+/b/c/.a.a../a./ /b/c/.a.a../a.
+/b/c/.a.a../a/a /b/c/.a.a../a/a
+/b/c/.a.a../a/. /b/c/.a.a../a
+/b/c/.a.a../a// /b/c/.a.a../a
+/b/c/.a.a../.aa /b/c/.a.a../.aa
+/b/c/.a.a../.a. /b/c/.a.a../.a.
+/b/c/.a.a../.a/ /b/c/.a.a../.a
+/b/c/.a.a../..a /b/c/.a.a../..a
+/b/c/.a.a../... /b/c/.a.a../...
+/b/c/.a.a../../ /b/c
+/b/c/.a.a.././a /b/c/.a.a../a
+/b/c/.a.a.././. /b/c/.a.a..
+/b/c/.a.a../.// /b/c/.a.a..
+/b/c/.a.a..//aa /b/c/.a.a../aa
+/b/c/.a.a..//a. /b/c/.a.a../a.
+/b/c/.a.a..//a/ /b/c/.a.a../a
+/b/c/.a.a..//.a /b/c/.a.a../.a
+/b/c/.a.a..//.. /b/c
+/b/c/.a.a..//./ /b/c/.a.a..
+/b/c/.a.a..///a /b/c/.a.a../a
+/b/c/.a.a..///. /b/c/.a.a..
+/b/c/.a.a..//// /b/c/.a.a..
+/b/c/.a.a./aaaa /b/c/.a.a./aaaa
+/b/c/.a.a./aaa. /b/c/.a.a./aaa.
+/b/c/.a.a./aaa/ /b/c/.a.a./aaa
+/b/c/.a.a./aa.a /b/c/.a.a./aa.a
+/b/c/.a.a./aa.. /b/c/.a.a./aa..
+/b/c/.a.a./aa./ /b/c/.a.a./aa.
+/b/c/.a.a./aa/a /b/c/.a.a./aa/a
+/b/c/.a.a./aa/. /b/c/.a.a./aa
+/b/c/.a.a./aa// /b/c/.a.a./aa
+/b/c/.a.a./a.aa /b/c/.a.a./a.aa
+/b/c/.a.a./a.a. /b/c/.a.a./a.a.
+/b/c/.a.a./a.a/ /b/c/.a.a./a.a
+/b/c/.a.a./a..a /b/c/.a.a./a..a
+/b/c/.a.a./a... /b/c/.a.a./a...
+/b/c/.a.a./a../ /b/c/.a.a./a..
+/b/c/.a.a./a./a /b/c/.a.a./a./a
+/b/c/.a.a./a./. /b/c/.a.a./a.
+/b/c/.a.a./a.// /b/c/.a.a./a.
+/b/c/.a.a./a/aa /b/c/.a.a./a/aa
+/b/c/.a.a./a/a. /b/c/.a.a./a/a.
+/b/c/.a.a./a/a/ /b/c/.a.a./a/a
+/b/c/.a.a./a/.a /b/c/.a.a./a/.a
+/b/c/.a.a./a/.. /b/c/.a.a.
+/b/c/.a.a./a/./ /b/c/.a.a./a
+/b/c/.a.a./a//a /b/c/.a.a./a/a
+/b/c/.a.a./a//. /b/c/.a.a./a
+/b/c/.a.a./a/// /b/c/.a.a./a
+/b/c/.a.a./.aaa /b/c/.a.a./.aaa
+/b/c/.a.a./.aa. /b/c/.a.a./.aa.
+/b/c/.a.a./.aa/ /b/c/.a.a./.aa
+/b/c/.a.a./.a.a /b/c/.a.a./.a.a
+/b/c/.a.a./.a.. /b/c/.a.a./.a..
+/b/c/.a.a./.a./ /b/c/.a.a./.a.
+/b/c/.a.a./.a/a /b/c/.a.a./.a/a
+/b/c/.a.a./.a/. /b/c/.a.a./.a
+/b/c/.a.a./.a// /b/c/.a.a./.a
+/b/c/.a.a./..aa /b/c/.a.a./..aa
+/b/c/.a.a./..a. /b/c/.a.a./..a.
+/b/c/.a.a./..a/ /b/c/.a.a./..a
+/b/c/.a.a./...a /b/c/.a.a./...a
+/b/c/.a.a./.... /b/c/.a.a./....
+/b/c/.a.a./.../ /b/c/.a.a./...
+/b/c/.a.a./../a /b/c/a
+/b/c/.a.a./../. /b/c
+/b/c/.a.a./..// /b/c
+/b/c/.a.a././aa /b/c/.a.a./aa
+/b/c/.a.a././a. /b/c/.a.a./a.
+/b/c/.a.a././a/ /b/c/.a.a./a
+/b/c/.a.a././.a /b/c/.a.a./.a
+/b/c/.a.a././.. /b/c
+/b/c/.a.a./././ /b/c/.a.a.
+/b/c/.a.a././/a /b/c/.a.a./a
+/b/c/.a.a././/. /b/c/.a.a.
+/b/c/.a.a././// /b/c/.a.a.
+/b/c/.a.a.//aaa /b/c/.a.a./aaa
+/b/c/.a.a.//aa. /b/c/.a.a./aa.
+/b/c/.a.a.//aa/ /b/c/.a.a./aa
+/b/c/.a.a.//a.a /b/c/.a.a./a.a
+/b/c/.a.a.//a.. /b/c/.a.a./a..
+/b/c/.a.a.//a./ /b/c/.a.a./a.
+/b/c/.a.a.//a/a /b/c/.a.a./a/a
+/b/c/.a.a.//a/. /b/c/.a.a./a
+/b/c/.a.a.//a// /b/c/.a.a./a
+/b/c/.a.a.//.aa /b/c/.a.a./.aa
+/b/c/.a.a.//.a. /b/c/.a.a./.a.
+/b/c/.a.a.//.a/ /b/c/.a.a./.a
+/b/c/.a.a.//..a /b/c/.a.a./..a
+/b/c/.a.a.//... /b/c/.a.a./...
+/b/c/.a.a.//../ /b/c
+/b/c/.a.a.//./a /b/c/.a.a./a
+/b/c/.a.a.//./. /b/c/.a.a.
+/b/c/.a.a.//.// /b/c/.a.a.
+/b/c/.a.a.///aa /b/c/.a.a./aa
+/b/c/.a.a.///a. /b/c/.a.a./a.
+/b/c/.a.a.///a/ /b/c/.a.a./a
+/b/c/.a.a.///.a /b/c/.a.a./.a
+/b/c/.a.a.///.. /b/c
+/b/c/.a.a.///./ /b/c/.a.a.
+/b/c/.a.a.////a /b/c/.a.a./a
+/b/c/.a.a.////. /b/c/.a.a.
+/b/c/.a.a.///// /b/c/.a.a.
+/b/c/.a.a/aaaaa /b/c/.a.a/aaaaa
+/b/c/.a.a/aaaa. /b/c/.a.a/aaaa.
+/b/c/.a.a/aaaa/ /b/c/.a.a/aaaa
+/b/c/.a.a/aaa.a /b/c/.a.a/aaa.a
+/b/c/.a.a/aaa.. /b/c/.a.a/aaa..
+/b/c/.a.a/aaa./ /b/c/.a.a/aaa.
+/b/c/.a.a/aaa/a /b/c/.a.a/aaa/a
+/b/c/.a.a/aaa/. /b/c/.a.a/aaa
+/b/c/.a.a/aaa// /b/c/.a.a/aaa
+/b/c/.a.a/aa.aa /b/c/.a.a/aa.aa
+/b/c/.a.a/aa.a. /b/c/.a.a/aa.a.
+/b/c/.a.a/aa.a/ /b/c/.a.a/aa.a
+/b/c/.a.a/aa..a /b/c/.a.a/aa..a
+/b/c/.a.a/aa... /b/c/.a.a/aa...
+/b/c/.a.a/aa../ /b/c/.a.a/aa..
+/b/c/.a.a/aa./a /b/c/.a.a/aa./a
+/b/c/.a.a/aa./. /b/c/.a.a/aa.
+/b/c/.a.a/aa.// /b/c/.a.a/aa.
+/b/c/.a.a/aa/aa /b/c/.a.a/aa/aa
+/b/c/.a.a/aa/a. /b/c/.a.a/aa/a.
+/b/c/.a.a/aa/a/ /b/c/.a.a/aa/a
+/b/c/.a.a/aa/.a /b/c/.a.a/aa/.a
+/b/c/.a.a/aa/.. /b/c/.a.a
+/b/c/.a.a/aa/./ /b/c/.a.a/aa
+/b/c/.a.a/aa//a /b/c/.a.a/aa/a
+/b/c/.a.a/aa//. /b/c/.a.a/aa
+/b/c/.a.a/aa/// /b/c/.a.a/aa
+/b/c/.a.a/a.aaa /b/c/.a.a/a.aaa
+/b/c/.a.a/a.aa. /b/c/.a.a/a.aa.
+/b/c/.a.a/a.aa/ /b/c/.a.a/a.aa
+/b/c/.a.a/a.a.a /b/c/.a.a/a.a.a
+/b/c/.a.a/a.a.. /b/c/.a.a/a.a..
+/b/c/.a.a/a.a./ /b/c/.a.a/a.a.
+/b/c/.a.a/a.a/a /b/c/.a.a/a.a/a
+/b/c/.a.a/a.a/. /b/c/.a.a/a.a
+/b/c/.a.a/a.a// /b/c/.a.a/a.a
+/b/c/.a.a/a..aa /b/c/.a.a/a..aa
+/b/c/.a.a/a..a. /b/c/.a.a/a..a.
+/b/c/.a.a/a..a/ /b/c/.a.a/a..a
+/b/c/.a.a/a...a /b/c/.a.a/a...a
+/b/c/.a.a/a.... /b/c/.a.a/a....
+/b/c/.a.a/a.../ /b/c/.a.a/a...
+/b/c/.a.a/a../a /b/c/.a.a/a../a
+/b/c/.a.a/a../. /b/c/.a.a/a..
+/b/c/.a.a/a..// /b/c/.a.a/a..
+/b/c/.a.a/a./aa /b/c/.a.a/a./aa
+/b/c/.a.a/a./a. /b/c/.a.a/a./a.
+/b/c/.a.a/a./a/ /b/c/.a.a/a./a
+/b/c/.a.a/a./.a /b/c/.a.a/a./.a
+/b/c/.a.a/a./.. /b/c/.a.a
+/b/c/.a.a/a././ /b/c/.a.a/a.
+/b/c/.a.a/a.//a /b/c/.a.a/a./a
+/b/c/.a.a/a.//. /b/c/.a.a/a.
+/b/c/.a.a/a./// /b/c/.a.a/a.
+/b/c/.a.a/a/aaa /b/c/.a.a/a/aaa
+/b/c/.a.a/a/aa. /b/c/.a.a/a/aa.
+/b/c/.a.a/a/aa/ /b/c/.a.a/a/aa
+/b/c/.a.a/a/a.a /b/c/.a.a/a/a.a
+/b/c/.a.a/a/a.. /b/c/.a.a/a/a..
+/b/c/.a.a/a/a./ /b/c/.a.a/a/a.
+/b/c/.a.a/a/a/a /b/c/.a.a/a/a/a
+/b/c/.a.a/a/a/. /b/c/.a.a/a/a
+/b/c/.a.a/a/a// /b/c/.a.a/a/a
+/b/c/.a.a/a/.aa /b/c/.a.a/a/.aa
+/b/c/.a.a/a/.a. /b/c/.a.a/a/.a.
+/b/c/.a.a/a/.a/ /b/c/.a.a/a/.a
+/b/c/.a.a/a/..a /b/c/.a.a/a/..a
+/b/c/.a.a/a/... /b/c/.a.a/a/...
+/b/c/.a.a/a/../ /b/c/.a.a
+/b/c/.a.a/a/./a /b/c/.a.a/a/a
+/b/c/.a.a/a/./. /b/c/.a.a/a
+/b/c/.a.a/a/.// /b/c/.a.a/a
+/b/c/.a.a/a//aa /b/c/.a.a/a/aa
+/b/c/.a.a/a//a. /b/c/.a.a/a/a.
+/b/c/.a.a/a//a/ /b/c/.a.a/a/a
+/b/c/.a.a/a//.a /b/c/.a.a/a/.a
+/b/c/.a.a/a//.. /b/c/.a.a
+/b/c/.a.a/a//./ /b/c/.a.a/a
+/b/c/.a.a/a///a /b/c/.a.a/a/a
+/b/c/.a.a/a///. /b/c/.a.a/a
+/b/c/.a.a/a//// /b/c/.a.a/a
+/b/c/.a.a/.aaaa /b/c/.a.a/.aaaa
+/b/c/.a.a/.aaa. /b/c/.a.a/.aaa.
+/b/c/.a.a/.aaa/ /b/c/.a.a/.aaa
+/b/c/.a.a/.aa.a /b/c/.a.a/.aa.a
+/b/c/.a.a/.aa.. /b/c/.a.a/.aa..
+/b/c/.a.a/.aa./ /b/c/.a.a/.aa.
+/b/c/.a.a/.aa/a /b/c/.a.a/.aa/a
+/b/c/.a.a/.aa/. /b/c/.a.a/.aa
+/b/c/.a.a/.aa// /b/c/.a.a/.aa
+/b/c/.a.a/.a.aa /b/c/.a.a/.a.aa
+/b/c/.a.a/.a.a. /b/c/.a.a/.a.a.
+/b/c/.a.a/.a.a/ /b/c/.a.a/.a.a
+/b/c/.a.a/.a..a /b/c/.a.a/.a..a
+/b/c/.a.a/.a... /b/c/.a.a/.a...
+/b/c/.a.a/.a../ /b/c/.a.a/.a..
+/b/c/.a.a/.a./a /b/c/.a.a/.a./a
+/b/c/.a.a/.a./. /b/c/.a.a/.a.
+/b/c/.a.a/.a.// /b/c/.a.a/.a.
+/b/c/.a.a/.a/aa /b/c/.a.a/.a/aa
+/b/c/.a.a/.a/a. /b/c/.a.a/.a/a.
+/b/c/.a.a/.a/a/ /b/c/.a.a/.a/a
+/b/c/.a.a/.a/.a /b/c/.a.a/.a/.a
+/b/c/.a.a/.a/.. /b/c/.a.a
+/b/c/.a.a/.a/./ /b/c/.a.a/.a
+/b/c/.a.a/.a//a /b/c/.a.a/.a/a
+/b/c/.a.a/.a//. /b/c/.a.a/.a
+/b/c/.a.a/.a/// /b/c/.a.a/.a
+/b/c/.a.a/..aaa /b/c/.a.a/..aaa
+/b/c/.a.a/..aa. /b/c/.a.a/..aa.
+/b/c/.a.a/..aa/ /b/c/.a.a/..aa
+/b/c/.a.a/..a.a /b/c/.a.a/..a.a
+/b/c/.a.a/..a.. /b/c/.a.a/..a..
+/b/c/.a.a/..a./ /b/c/.a.a/..a.
+/b/c/.a.a/..a/a /b/c/.a.a/..a/a
+/b/c/.a.a/..a/. /b/c/.a.a/..a
+/b/c/.a.a/..a// /b/c/.a.a/..a
+/b/c/.a.a/...aa /b/c/.a.a/...aa
+/b/c/.a.a/...a. /b/c/.a.a/...a.
+/b/c/.a.a/...a/ /b/c/.a.a/...a
+/b/c/.a.a/....a /b/c/.a.a/....a
+/b/c/.a.a/..... /b/c/.a.a/.....
+/b/c/.a.a/..../ /b/c/.a.a/....
+/b/c/.a.a/.../a /b/c/.a.a/.../a
+/b/c/.a.a/.../. /b/c/.a.a/...
+/b/c/.a.a/...// /b/c/.a.a/...
+/b/c/.a.a/../aa /b/c/aa
+/b/c/.a.a/../a. /b/c/a.
+/b/c/.a.a/../a/ /b/c/a
+/b/c/.a.a/../.a /b/c/.a
+/b/c/.a.a/../.. /b
+/b/c/.a.a/.././ /b/c
+/b/c/.a.a/..//a /b/c/a
+/b/c/.a.a/..//. /b/c
+/b/c/.a.a/../// /b/c
+/b/c/.a.a/./aaa /b/c/.a.a/aaa
+/b/c/.a.a/./aa. /b/c/.a.a/aa.
+/b/c/.a.a/./aa/ /b/c/.a.a/aa
+/b/c/.a.a/./a.a /b/c/.a.a/a.a
+/b/c/.a.a/./a.. /b/c/.a.a/a..
+/b/c/.a.a/./a./ /b/c/.a.a/a.
+/b/c/.a.a/./a/a /b/c/.a.a/a/a
+/b/c/.a.a/./a/. /b/c/.a.a/a
+/b/c/.a.a/./a// /b/c/.a.a/a
+/b/c/.a.a/./.aa /b/c/.a.a/.aa
+/b/c/.a.a/./.a. /b/c/.a.a/.a.
+/b/c/.a.a/./.a/ /b/c/.a.a/.a
+/b/c/.a.a/./..a /b/c/.a.a/..a
+/b/c/.a.a/./... /b/c/.a.a/...
+/b/c/.a.a/./../ /b/c
+/b/c/.a.a/././a /b/c/.a.a/a
+/b/c/.a.a/././. /b/c/.a.a
+/b/c/.a.a/./.// /b/c/.a.a
+/b/c/.a.a/.//aa /b/c/.a.a/aa
+/b/c/.a.a/.//a. /b/c/.a.a/a.
+/b/c/.a.a/.//a/ /b/c/.a.a/a
+/b/c/.a.a/.//.a /b/c/.a.a/.a
+/b/c/.a.a/.//.. /b/c
+/b/c/.a.a/.//./ /b/c/.a.a
+/b/c/.a.a/.///a /b/c/.a.a/a
+/b/c/.a.a/.///. /b/c/.a.a
+/b/c/.a.a/.//// /b/c/.a.a
+/b/c/.a.a//aaaa /b/c/.a.a/aaaa
+/b/c/.a.a//aaa. /b/c/.a.a/aaa.
+/b/c/.a.a//aaa/ /b/c/.a.a/aaa
+/b/c/.a.a//aa.a /b/c/.a.a/aa.a
+/b/c/.a.a//aa.. /b/c/.a.a/aa..
+/b/c/.a.a//aa./ /b/c/.a.a/aa.
+/b/c/.a.a//aa/a /b/c/.a.a/aa/a
+/b/c/.a.a//aa/. /b/c/.a.a/aa
+/b/c/.a.a//aa// /b/c/.a.a/aa
+/b/c/.a.a//a.aa /b/c/.a.a/a.aa
+/b/c/.a.a//a.a. /b/c/.a.a/a.a.
+/b/c/.a.a//a.a/ /b/c/.a.a/a.a
+/b/c/.a.a//a..a /b/c/.a.a/a..a
+/b/c/.a.a//a... /b/c/.a.a/a...
+/b/c/.a.a//a../ /b/c/.a.a/a..
+/b/c/.a.a//a./a /b/c/.a.a/a./a
+/b/c/.a.a//a./. /b/c/.a.a/a.
+/b/c/.a.a//a.// /b/c/.a.a/a.
+/b/c/.a.a//a/aa /b/c/.a.a/a/aa
+/b/c/.a.a//a/a. /b/c/.a.a/a/a.
+/b/c/.a.a//a/a/ /b/c/.a.a/a/a
+/b/c/.a.a//a/.a /b/c/.a.a/a/.a
+/b/c/.a.a//a/.. /b/c/.a.a
+/b/c/.a.a//a/./ /b/c/.a.a/a
+/b/c/.a.a//a//a /b/c/.a.a/a/a
+/b/c/.a.a//a//. /b/c/.a.a/a
+/b/c/.a.a//a/// /b/c/.a.a/a
+/b/c/.a.a//.aaa /b/c/.a.a/.aaa
+/b/c/.a.a//.aa. /b/c/.a.a/.aa.
+/b/c/.a.a//.aa/ /b/c/.a.a/.aa
+/b/c/.a.a//.a.a /b/c/.a.a/.a.a
+/b/c/.a.a//.a.. /b/c/.a.a/.a..
+/b/c/.a.a//.a./ /b/c/.a.a/.a.
+/b/c/.a.a//.a/a /b/c/.a.a/.a/a
+/b/c/.a.a//.a/. /b/c/.a.a/.a
+/b/c/.a.a//.a// /b/c/.a.a/.a
+/b/c/.a.a//..aa /b/c/.a.a/..aa
+/b/c/.a.a//..a. /b/c/.a.a/..a.
+/b/c/.a.a//..a/ /b/c/.a.a/..a
+/b/c/.a.a//...a /b/c/.a.a/...a
+/b/c/.a.a//.... /b/c/.a.a/....
+/b/c/.a.a//.../ /b/c/.a.a/...
+/b/c/.a.a//../a /b/c/a
+/b/c/.a.a//../. /b/c
+/b/c/.a.a//..// /b/c
+/b/c/.a.a//./aa /b/c/.a.a/aa
+/b/c/.a.a//./a. /b/c/.a.a/a.
+/b/c/.a.a//./a/ /b/c/.a.a/a
+/b/c/.a.a//./.a /b/c/.a.a/.a
+/b/c/.a.a//./.. /b/c
+/b/c/.a.a//././ /b/c/.a.a
+/b/c/.a.a//.//a /b/c/.a.a/a
+/b/c/.a.a//.//. /b/c/.a.a
+/b/c/.a.a//./// /b/c/.a.a
+/b/c/.a.a///aaa /b/c/.a.a/aaa
+/b/c/.a.a///aa. /b/c/.a.a/aa.
+/b/c/.a.a///aa/ /b/c/.a.a/aa
+/b/c/.a.a///a.a /b/c/.a.a/a.a
+/b/c/.a.a///a.. /b/c/.a.a/a..
+/b/c/.a.a///a./ /b/c/.a.a/a.
+/b/c/.a.a///a/a /b/c/.a.a/a/a
+/b/c/.a.a///a/. /b/c/.a.a/a
+/b/c/.a.a///a// /b/c/.a.a/a
+/b/c/.a.a///.aa /b/c/.a.a/.aa
+/b/c/.a.a///.a. /b/c/.a.a/.a.
+/b/c/.a.a///.a/ /b/c/.a.a/.a
+/b/c/.a.a///..a /b/c/.a.a/..a
+/b/c/.a.a///... /b/c/.a.a/...
+/b/c/.a.a///../ /b/c
+/b/c/.a.a///./a /b/c/.a.a/a
+/b/c/.a.a///./. /b/c/.a.a
+/b/c/.a.a///.// /b/c/.a.a
+/b/c/.a.a////aa /b/c/.a.a/aa
+/b/c/.a.a////a. /b/c/.a.a/a.
+/b/c/.a.a////a/ /b/c/.a.a/a
+/b/c/.a.a////.a /b/c/.a.a/.a
+/b/c/.a.a////.. /b/c
+/b/c/.a.a////./ /b/c/.a.a
+/b/c/.a.a/////a /b/c/.a.a/a
+/b/c/.a.a/////. /b/c/.a.a
+/b/c/.a.a////// /b/c/.a.a
+/b/c/.a..aaaaaa /b/c/.a..aaaaaa
+/b/c/.a..aaaaa. /b/c/.a..aaaaa.
+/b/c/.a..aaaaa/ /b/c/.a..aaaaa
+/b/c/.a..aaaa.a /b/c/.a..aaaa.a
+/b/c/.a..aaaa.. /b/c/.a..aaaa..
+/b/c/.a..aaaa./ /b/c/.a..aaaa.
+/b/c/.a..aaaa/a /b/c/.a..aaaa/a
+/b/c/.a..aaaa/. /b/c/.a..aaaa
+/b/c/.a..aaaa// /b/c/.a..aaaa
+/b/c/.a..aaa.aa /b/c/.a..aaa.aa
+/b/c/.a..aaa.a. /b/c/.a..aaa.a.
+/b/c/.a..aaa.a/ /b/c/.a..aaa.a
+/b/c/.a..aaa..a /b/c/.a..aaa..a
+/b/c/.a..aaa... /b/c/.a..aaa...
+/b/c/.a..aaa../ /b/c/.a..aaa..
+/b/c/.a..aaa./a /b/c/.a..aaa./a
+/b/c/.a..aaa./. /b/c/.a..aaa.
+/b/c/.a..aaa.// /b/c/.a..aaa.
+/b/c/.a..aaa/aa /b/c/.a..aaa/aa
+/b/c/.a..aaa/a. /b/c/.a..aaa/a.
+/b/c/.a..aaa/a/ /b/c/.a..aaa/a
+/b/c/.a..aaa/.a /b/c/.a..aaa/.a
+/b/c/.a..aaa/.. /b/c
+/b/c/.a..aaa/./ /b/c/.a..aaa
+/b/c/.a..aaa//a /b/c/.a..aaa/a
+/b/c/.a..aaa//. /b/c/.a..aaa
+/b/c/.a..aaa/// /b/c/.a..aaa
+/b/c/.a..aa.aaa /b/c/.a..aa.aaa
+/b/c/.a..aa.aa. /b/c/.a..aa.aa.
+/b/c/.a..aa.aa/ /b/c/.a..aa.aa
+/b/c/.a..aa.a.a /b/c/.a..aa.a.a
+/b/c/.a..aa.a.. /b/c/.a..aa.a..
+/b/c/.a..aa.a./ /b/c/.a..aa.a.
+/b/c/.a..aa.a/a /b/c/.a..aa.a/a
+/b/c/.a..aa.a/. /b/c/.a..aa.a
+/b/c/.a..aa.a// /b/c/.a..aa.a
+/b/c/.a..aa..aa /b/c/.a..aa..aa
+/b/c/.a..aa..a. /b/c/.a..aa..a.
+/b/c/.a..aa..a/ /b/c/.a..aa..a
+/b/c/.a..aa...a /b/c/.a..aa...a
+/b/c/.a..aa.... /b/c/.a..aa....
+/b/c/.a..aa.../ /b/c/.a..aa...
+/b/c/.a..aa../a /b/c/.a..aa../a
+/b/c/.a..aa../. /b/c/.a..aa..
+/b/c/.a..aa..// /b/c/.a..aa..
+/b/c/.a..aa./aa /b/c/.a..aa./aa
+/b/c/.a..aa./a. /b/c/.a..aa./a.
+/b/c/.a..aa./a/ /b/c/.a..aa./a
+/b/c/.a..aa./.a /b/c/.a..aa./.a
+/b/c/.a..aa./.. /b/c
+/b/c/.a..aa././ /b/c/.a..aa.
+/b/c/.a..aa.//a /b/c/.a..aa./a
+/b/c/.a..aa.//. /b/c/.a..aa.
+/b/c/.a..aa./// /b/c/.a..aa.
+/b/c/.a..aa/aaa /b/c/.a..aa/aaa
+/b/c/.a..aa/aa. /b/c/.a..aa/aa.
+/b/c/.a..aa/aa/ /b/c/.a..aa/aa
+/b/c/.a..aa/a.a /b/c/.a..aa/a.a
+/b/c/.a..aa/a.. /b/c/.a..aa/a..
+/b/c/.a..aa/a./ /b/c/.a..aa/a.
+/b/c/.a..aa/a/a /b/c/.a..aa/a/a
+/b/c/.a..aa/a/. /b/c/.a..aa/a
+/b/c/.a..aa/a// /b/c/.a..aa/a
+/b/c/.a..aa/.aa /b/c/.a..aa/.aa
+/b/c/.a..aa/.a. /b/c/.a..aa/.a.
+/b/c/.a..aa/.a/ /b/c/.a..aa/.a
+/b/c/.a..aa/..a /b/c/.a..aa/..a
+/b/c/.a..aa/... /b/c/.a..aa/...
+/b/c/.a..aa/../ /b/c
+/b/c/.a..aa/./a /b/c/.a..aa/a
+/b/c/.a..aa/./. /b/c/.a..aa
+/b/c/.a..aa/.// /b/c/.a..aa
+/b/c/.a..aa//aa /b/c/.a..aa/aa
+/b/c/.a..aa//a. /b/c/.a..aa/a.
+/b/c/.a..aa//a/ /b/c/.a..aa/a
+/b/c/.a..aa//.a /b/c/.a..aa/.a
+/b/c/.a..aa//.. /b/c
+/b/c/.a..aa//./ /b/c/.a..aa
+/b/c/.a..aa///a /b/c/.a..aa/a
+/b/c/.a..aa///. /b/c/.a..aa
+/b/c/.a..aa//// /b/c/.a..aa
+/b/c/.a..a.aaaa /b/c/.a..a.aaaa
+/b/c/.a..a.aaa. /b/c/.a..a.aaa.
+/b/c/.a..a.aaa/ /b/c/.a..a.aaa
+/b/c/.a..a.aa.a /b/c/.a..a.aa.a
+/b/c/.a..a.aa.. /b/c/.a..a.aa..
+/b/c/.a..a.aa./ /b/c/.a..a.aa.
+/b/c/.a..a.aa/a /b/c/.a..a.aa/a
+/b/c/.a..a.aa/. /b/c/.a..a.aa
+/b/c/.a..a.aa// /b/c/.a..a.aa
+/b/c/.a..a.a.aa /b/c/.a..a.a.aa
+/b/c/.a..a.a.a. /b/c/.a..a.a.a.
+/b/c/.a..a.a.a/ /b/c/.a..a.a.a
+/b/c/.a..a.a..a /b/c/.a..a.a..a
+/b/c/.a..a.a... /b/c/.a..a.a...
+/b/c/.a..a.a../ /b/c/.a..a.a..
+/b/c/.a..a.a./a /b/c/.a..a.a./a
+/b/c/.a..a.a./. /b/c/.a..a.a.
+/b/c/.a..a.a.// /b/c/.a..a.a.
+/b/c/.a..a.a/aa /b/c/.a..a.a/aa
+/b/c/.a..a.a/a. /b/c/.a..a.a/a.
+/b/c/.a..a.a/a/ /b/c/.a..a.a/a
+/b/c/.a..a.a/.a /b/c/.a..a.a/.a
+/b/c/.a..a.a/.. /b/c
+/b/c/.a..a.a/./ /b/c/.a..a.a
+/b/c/.a..a.a//a /b/c/.a..a.a/a
+/b/c/.a..a.a//. /b/c/.a..a.a
+/b/c/.a..a.a/// /b/c/.a..a.a
+/b/c/.a..a..aaa /b/c/.a..a..aaa
+/b/c/.a..a..aa. /b/c/.a..a..aa.
+/b/c/.a..a..aa/ /b/c/.a..a..aa
+/b/c/.a..a..a.a /b/c/.a..a..a.a
+/b/c/.a..a..a.. /b/c/.a..a..a..
+/b/c/.a..a..a./ /b/c/.a..a..a.
+/b/c/.a..a..a/a /b/c/.a..a..a/a
+/b/c/.a..a..a/. /b/c/.a..a..a
+/b/c/.a..a..a// /b/c/.a..a..a
+/b/c/.a..a...aa /b/c/.a..a...aa
+/b/c/.a..a...a. /b/c/.a..a...a.
+/b/c/.a..a...a/ /b/c/.a..a...a
+/b/c/.a..a....a /b/c/.a..a....a
+/b/c/.a..a..... /b/c/.a..a.....
+/b/c/.a..a..../ /b/c/.a..a....
+/b/c/.a..a.../a /b/c/.a..a.../a
+/b/c/.a..a.../. /b/c/.a..a...
+/b/c/.a..a...// /b/c/.a..a...
+/b/c/.a..a../aa /b/c/.a..a../aa
+/b/c/.a..a../a. /b/c/.a..a../a.
+/b/c/.a..a../a/ /b/c/.a..a../a
+/b/c/.a..a../.a /b/c/.a..a../.a
+/b/c/.a..a../.. /b/c
+/b/c/.a..a.././ /b/c/.a..a..
+/b/c/.a..a..//a /b/c/.a..a../a
+/b/c/.a..a..//. /b/c/.a..a..
+/b/c/.a..a../// /b/c/.a..a..
+/b/c/.a..a./aaa /b/c/.a..a./aaa
+/b/c/.a..a./aa. /b/c/.a..a./aa.
+/b/c/.a..a./aa/ /b/c/.a..a./aa
+/b/c/.a..a./a.a /b/c/.a..a./a.a
+/b/c/.a..a./a.. /b/c/.a..a./a..
+/b/c/.a..a./a./ /b/c/.a..a./a.
+/b/c/.a..a./a/a /b/c/.a..a./a/a
+/b/c/.a..a./a/. /b/c/.a..a./a
+/b/c/.a..a./a// /b/c/.a..a./a
+/b/c/.a..a./.aa /b/c/.a..a./.aa
+/b/c/.a..a./.a. /b/c/.a..a./.a.
+/b/c/.a..a./.a/ /b/c/.a..a./.a
+/b/c/.a..a./..a /b/c/.a..a./..a
+/b/c/.a..a./... /b/c/.a..a./...
+/b/c/.a..a./../ /b/c
+/b/c/.a..a././a /b/c/.a..a./a
+/b/c/.a..a././. /b/c/.a..a.
+/b/c/.a..a./.// /b/c/.a..a.
+/b/c/.a..a.//aa /b/c/.a..a./aa
+/b/c/.a..a.//a. /b/c/.a..a./a.
+/b/c/.a..a.//a/ /b/c/.a..a./a
+/b/c/.a..a.//.a /b/c/.a..a./.a
+/b/c/.a..a.//.. /b/c
+/b/c/.a..a.//./ /b/c/.a..a.
+/b/c/.a..a.///a /b/c/.a..a./a
+/b/c/.a..a.///. /b/c/.a..a.
+/b/c/.a..a.//// /b/c/.a..a.
+/b/c/.a..a/aaaa /b/c/.a..a/aaaa
+/b/c/.a..a/aaa. /b/c/.a..a/aaa.
+/b/c/.a..a/aaa/ /b/c/.a..a/aaa
+/b/c/.a..a/aa.a /b/c/.a..a/aa.a
+/b/c/.a..a/aa.. /b/c/.a..a/aa..
+/b/c/.a..a/aa./ /b/c/.a..a/aa.
+/b/c/.a..a/aa/a /b/c/.a..a/aa/a
+/b/c/.a..a/aa/. /b/c/.a..a/aa
+/b/c/.a..a/aa// /b/c/.a..a/aa
+/b/c/.a..a/a.aa /b/c/.a..a/a.aa
+/b/c/.a..a/a.a. /b/c/.a..a/a.a.
+/b/c/.a..a/a.a/ /b/c/.a..a/a.a
+/b/c/.a..a/a..a /b/c/.a..a/a..a
+/b/c/.a..a/a... /b/c/.a..a/a...
+/b/c/.a..a/a../ /b/c/.a..a/a..
+/b/c/.a..a/a./a /b/c/.a..a/a./a
+/b/c/.a..a/a./. /b/c/.a..a/a.
+/b/c/.a..a/a.// /b/c/.a..a/a.
+/b/c/.a..a/a/aa /b/c/.a..a/a/aa
+/b/c/.a..a/a/a. /b/c/.a..a/a/a.
+/b/c/.a..a/a/a/ /b/c/.a..a/a/a
+/b/c/.a..a/a/.a /b/c/.a..a/a/.a
+/b/c/.a..a/a/.. /b/c/.a..a
+/b/c/.a..a/a/./ /b/c/.a..a/a
+/b/c/.a..a/a//a /b/c/.a..a/a/a
+/b/c/.a..a/a//. /b/c/.a..a/a
+/b/c/.a..a/a/// /b/c/.a..a/a
+/b/c/.a..a/.aaa /b/c/.a..a/.aaa
+/b/c/.a..a/.aa. /b/c/.a..a/.aa.
+/b/c/.a..a/.aa/ /b/c/.a..a/.aa
+/b/c/.a..a/.a.a /b/c/.a..a/.a.a
+/b/c/.a..a/.a.. /b/c/.a..a/.a..
+/b/c/.a..a/.a./ /b/c/.a..a/.a.
+/b/c/.a..a/.a/a /b/c/.a..a/.a/a
+/b/c/.a..a/.a/. /b/c/.a..a/.a
+/b/c/.a..a/.a// /b/c/.a..a/.a
+/b/c/.a..a/..aa /b/c/.a..a/..aa
+/b/c/.a..a/..a. /b/c/.a..a/..a.
+/b/c/.a..a/..a/ /b/c/.a..a/..a
+/b/c/.a..a/...a /b/c/.a..a/...a
+/b/c/.a..a/.... /b/c/.a..a/....
+/b/c/.a..a/.../ /b/c/.a..a/...
+/b/c/.a..a/../a /b/c/a
+/b/c/.a..a/../. /b/c
+/b/c/.a..a/..// /b/c
+/b/c/.a..a/./aa /b/c/.a..a/aa
+/b/c/.a..a/./a. /b/c/.a..a/a.
+/b/c/.a..a/./a/ /b/c/.a..a/a
+/b/c/.a..a/./.a /b/c/.a..a/.a
+/b/c/.a..a/./.. /b/c
+/b/c/.a..a/././ /b/c/.a..a
+/b/c/.a..a/.//a /b/c/.a..a/a
+/b/c/.a..a/.//. /b/c/.a..a
+/b/c/.a..a/./// /b/c/.a..a
+/b/c/.a..a//aaa /b/c/.a..a/aaa
+/b/c/.a..a//aa. /b/c/.a..a/aa.
+/b/c/.a..a//aa/ /b/c/.a..a/aa
+/b/c/.a..a//a.a /b/c/.a..a/a.a
+/b/c/.a..a//a.. /b/c/.a..a/a..
+/b/c/.a..a//a./ /b/c/.a..a/a.
+/b/c/.a..a//a/a /b/c/.a..a/a/a
+/b/c/.a..a//a/. /b/c/.a..a/a
+/b/c/.a..a//a// /b/c/.a..a/a
+/b/c/.a..a//.aa /b/c/.a..a/.aa
+/b/c/.a..a//.a. /b/c/.a..a/.a.
+/b/c/.a..a//.a/ /b/c/.a..a/.a
+/b/c/.a..a//..a /b/c/.a..a/..a
+/b/c/.a..a//... /b/c/.a..a/...
+/b/c/.a..a//../ /b/c
+/b/c/.a..a//./a /b/c/.a..a/a
+/b/c/.a..a//./. /b/c/.a..a
+/b/c/.a..a//.// /b/c/.a..a
+/b/c/.a..a///aa /b/c/.a..a/aa
+/b/c/.a..a///a. /b/c/.a..a/a.
+/b/c/.a..a///a/ /b/c/.a..a/a
+/b/c/.a..a///.a /b/c/.a..a/.a
+/b/c/.a..a///.. /b/c
+/b/c/.a..a///./ /b/c/.a..a
+/b/c/.a..a////a /b/c/.a..a/a
+/b/c/.a..a////. /b/c/.a..a
+/b/c/.a..a///// /b/c/.a..a
+/b/c/.a...aaaaa /b/c/.a...aaaaa
+/b/c/.a...aaaa. /b/c/.a...aaaa.
+/b/c/.a...aaaa/ /b/c/.a...aaaa
+/b/c/.a...aaa.a /b/c/.a...aaa.a
+/b/c/.a...aaa.. /b/c/.a...aaa..
+/b/c/.a...aaa./ /b/c/.a...aaa.
+/b/c/.a...aaa/a /b/c/.a...aaa/a
+/b/c/.a...aaa/. /b/c/.a...aaa
+/b/c/.a...aaa// /b/c/.a...aaa
+/b/c/.a...aa.aa /b/c/.a...aa.aa
+/b/c/.a...aa.a. /b/c/.a...aa.a.
+/b/c/.a...aa.a/ /b/c/.a...aa.a
+/b/c/.a...aa..a /b/c/.a...aa..a
+/b/c/.a...aa... /b/c/.a...aa...
+/b/c/.a...aa../ /b/c/.a...aa..
+/b/c/.a...aa./a /b/c/.a...aa./a
+/b/c/.a...aa./. /b/c/.a...aa.
+/b/c/.a...aa.// /b/c/.a...aa.
+/b/c/.a...aa/aa /b/c/.a...aa/aa
+/b/c/.a...aa/a. /b/c/.a...aa/a.
+/b/c/.a...aa/a/ /b/c/.a...aa/a
+/b/c/.a...aa/.a /b/c/.a...aa/.a
+/b/c/.a...aa/.. /b/c
+/b/c/.a...aa/./ /b/c/.a...aa
+/b/c/.a...aa//a /b/c/.a...aa/a
+/b/c/.a...aa//. /b/c/.a...aa
+/b/c/.a...aa/// /b/c/.a...aa
+/b/c/.a...a.aaa /b/c/.a...a.aaa
+/b/c/.a...a.aa. /b/c/.a...a.aa.
+/b/c/.a...a.aa/ /b/c/.a...a.aa
+/b/c/.a...a.a.a /b/c/.a...a.a.a
+/b/c/.a...a.a.. /b/c/.a...a.a..
+/b/c/.a...a.a./ /b/c/.a...a.a.
+/b/c/.a...a.a/a /b/c/.a...a.a/a
+/b/c/.a...a.a/. /b/c/.a...a.a
+/b/c/.a...a.a// /b/c/.a...a.a
+/b/c/.a...a..aa /b/c/.a...a..aa
+/b/c/.a...a..a. /b/c/.a...a..a.
+/b/c/.a...a..a/ /b/c/.a...a..a
+/b/c/.a...a...a /b/c/.a...a...a
+/b/c/.a...a.... /b/c/.a...a....
+/b/c/.a...a.../ /b/c/.a...a...
+/b/c/.a...a../a /b/c/.a...a../a
+/b/c/.a...a../. /b/c/.a...a..
+/b/c/.a...a..// /b/c/.a...a..
+/b/c/.a...a./aa /b/c/.a...a./aa
+/b/c/.a...a./a. /b/c/.a...a./a.
+/b/c/.a...a./a/ /b/c/.a...a./a
+/b/c/.a...a./.a /b/c/.a...a./.a
+/b/c/.a...a./.. /b/c
+/b/c/.a...a././ /b/c/.a...a.
+/b/c/.a...a.//a /b/c/.a...a./a
+/b/c/.a...a.//. /b/c/.a...a.
+/b/c/.a...a./// /b/c/.a...a.
+/b/c/.a...a/aaa /b/c/.a...a/aaa
+/b/c/.a...a/aa. /b/c/.a...a/aa.
+/b/c/.a...a/aa/ /b/c/.a...a/aa
+/b/c/.a...a/a.a /b/c/.a...a/a.a
+/b/c/.a...a/a.. /b/c/.a...a/a..
+/b/c/.a...a/a./ /b/c/.a...a/a.
+/b/c/.a...a/a/a /b/c/.a...a/a/a
+/b/c/.a...a/a/. /b/c/.a...a/a
+/b/c/.a...a/a// /b/c/.a...a/a
+/b/c/.a...a/.aa /b/c/.a...a/.aa
+/b/c/.a...a/.a. /b/c/.a...a/.a.
+/b/c/.a...a/.a/ /b/c/.a...a/.a
+/b/c/.a...a/..a /b/c/.a...a/..a
+/b/c/.a...a/... /b/c/.a...a/...
+/b/c/.a...a/../ /b/c
+/b/c/.a...a/./a /b/c/.a...a/a
+/b/c/.a...a/./. /b/c/.a...a
+/b/c/.a...a/.// /b/c/.a...a
+/b/c/.a...a//aa /b/c/.a...a/aa
+/b/c/.a...a//a. /b/c/.a...a/a.
+/b/c/.a...a//a/ /b/c/.a...a/a
+/b/c/.a...a//.a /b/c/.a...a/.a
+/b/c/.a...a//.. /b/c
+/b/c/.a...a//./ /b/c/.a...a
+/b/c/.a...a///a /b/c/.a...a/a
+/b/c/.a...a///. /b/c/.a...a
+/b/c/.a...a//// /b/c/.a...a
+/b/c/.a....aaaa /b/c/.a....aaaa
+/b/c/.a....aaa. /b/c/.a....aaa.
+/b/c/.a....aaa/ /b/c/.a....aaa
+/b/c/.a....aa.a /b/c/.a....aa.a
+/b/c/.a....aa.. /b/c/.a....aa..
+/b/c/.a....aa./ /b/c/.a....aa.
+/b/c/.a....aa/a /b/c/.a....aa/a
+/b/c/.a....aa/. /b/c/.a....aa
+/b/c/.a....aa// /b/c/.a....aa
+/b/c/.a....a.aa /b/c/.a....a.aa
+/b/c/.a....a.a. /b/c/.a....a.a.
+/b/c/.a....a.a/ /b/c/.a....a.a
+/b/c/.a....a..a /b/c/.a....a..a
+/b/c/.a....a... /b/c/.a....a...
+/b/c/.a....a../ /b/c/.a....a..
+/b/c/.a....a./a /b/c/.a....a./a
+/b/c/.a....a./. /b/c/.a....a.
+/b/c/.a....a.// /b/c/.a....a.
+/b/c/.a....a/aa /b/c/.a....a/aa
+/b/c/.a....a/a. /b/c/.a....a/a.
+/b/c/.a....a/a/ /b/c/.a....a/a
+/b/c/.a....a/.a /b/c/.a....a/.a
+/b/c/.a....a/.. /b/c
+/b/c/.a....a/./ /b/c/.a....a
+/b/c/.a....a//a /b/c/.a....a/a
+/b/c/.a....a//. /b/c/.a....a
+/b/c/.a....a/// /b/c/.a....a
+/b/c/.a.....aaa /b/c/.a.....aaa
+/b/c/.a.....aa. /b/c/.a.....aa.
+/b/c/.a.....aa/ /b/c/.a.....aa
+/b/c/.a.....a.a /b/c/.a.....a.a
+/b/c/.a.....a.. /b/c/.a.....a..
+/b/c/.a.....a./ /b/c/.a.....a.
+/b/c/.a.....a/a /b/c/.a.....a/a
+/b/c/.a.....a/. /b/c/.a.....a
+/b/c/.a.....a// /b/c/.a.....a
+/b/c/.a......aa /b/c/.a......aa
+/b/c/.a......a. /b/c/.a......a.
+/b/c/.a......a/ /b/c/.a......a
+/b/c/.a.......a /b/c/.a.......a
+/b/c/.a........ /b/c/.a........
+/b/c/.a......./ /b/c/.a.......
+/b/c/.a....../a /b/c/.a....../a
+/b/c/.a....../. /b/c/.a......
+/b/c/.a......// /b/c/.a......
+/b/c/.a...../aa /b/c/.a...../aa
+/b/c/.a...../a. /b/c/.a...../a.
+/b/c/.a...../a/ /b/c/.a...../a
+/b/c/.a...../.a /b/c/.a...../.a
+/b/c/.a...../.. /b/c
+/b/c/.a....././ /b/c/.a.....
+/b/c/.a.....//a /b/c/.a...../a
+/b/c/.a.....//. /b/c/.a.....
+/b/c/.a...../// /b/c/.a.....
+/b/c/.a..../aaa /b/c/.a..../aaa
+/b/c/.a..../aa. /b/c/.a..../aa.
+/b/c/.a..../aa/ /b/c/.a..../aa
+/b/c/.a..../a.a /b/c/.a..../a.a
+/b/c/.a..../a.. /b/c/.a..../a..
+/b/c/.a..../a./ /b/c/.a..../a.
+/b/c/.a..../a/a /b/c/.a..../a/a
+/b/c/.a..../a/. /b/c/.a..../a
+/b/c/.a..../a// /b/c/.a..../a
+/b/c/.a..../.aa /b/c/.a..../.aa
+/b/c/.a..../.a. /b/c/.a..../.a.
+/b/c/.a..../.a/ /b/c/.a..../.a
+/b/c/.a..../..a /b/c/.a..../..a
+/b/c/.a..../... /b/c/.a..../...
+/b/c/.a..../../ /b/c
+/b/c/.a...././a /b/c/.a..../a
+/b/c/.a...././. /b/c/.a....
+/b/c/.a..../.// /b/c/.a....
+/b/c/.a....//aa /b/c/.a..../aa
+/b/c/.a....//a. /b/c/.a..../a.
+/b/c/.a....//a/ /b/c/.a..../a
+/b/c/.a....//.a /b/c/.a..../.a
+/b/c/.a....//.. /b/c
+/b/c/.a....//./ /b/c/.a....
+/b/c/.a....///a /b/c/.a..../a
+/b/c/.a....///. /b/c/.a....
+/b/c/.a....//// /b/c/.a....
+/b/c/.a.../aaaa /b/c/.a.../aaaa
+/b/c/.a.../aaa. /b/c/.a.../aaa.
+/b/c/.a.../aaa/ /b/c/.a.../aaa
+/b/c/.a.../aa.a /b/c/.a.../aa.a
+/b/c/.a.../aa.. /b/c/.a.../aa..
+/b/c/.a.../aa./ /b/c/.a.../aa.
+/b/c/.a.../aa/a /b/c/.a.../aa/a
+/b/c/.a.../aa/. /b/c/.a.../aa
+/b/c/.a.../aa// /b/c/.a.../aa
+/b/c/.a.../a.aa /b/c/.a.../a.aa
+/b/c/.a.../a.a. /b/c/.a.../a.a.
+/b/c/.a.../a.a/ /b/c/.a.../a.a
+/b/c/.a.../a..a /b/c/.a.../a..a
+/b/c/.a.../a... /b/c/.a.../a...
+/b/c/.a.../a../ /b/c/.a.../a..
+/b/c/.a.../a./a /b/c/.a.../a./a
+/b/c/.a.../a./. /b/c/.a.../a.
+/b/c/.a.../a.// /b/c/.a.../a.
+/b/c/.a.../a/aa /b/c/.a.../a/aa
+/b/c/.a.../a/a. /b/c/.a.../a/a.
+/b/c/.a.../a/a/ /b/c/.a.../a/a
+/b/c/.a.../a/.a /b/c/.a.../a/.a
+/b/c/.a.../a/.. /b/c/.a...
+/b/c/.a.../a/./ /b/c/.a.../a
+/b/c/.a.../a//a /b/c/.a.../a/a
+/b/c/.a.../a//. /b/c/.a.../a
+/b/c/.a.../a/// /b/c/.a.../a
+/b/c/.a.../.aaa /b/c/.a.../.aaa
+/b/c/.a.../.aa. /b/c/.a.../.aa.
+/b/c/.a.../.aa/ /b/c/.a.../.aa
+/b/c/.a.../.a.a /b/c/.a.../.a.a
+/b/c/.a.../.a.. /b/c/.a.../.a..
+/b/c/.a.../.a./ /b/c/.a.../.a.
+/b/c/.a.../.a/a /b/c/.a.../.a/a
+/b/c/.a.../.a/. /b/c/.a.../.a
+/b/c/.a.../.a// /b/c/.a.../.a
+/b/c/.a.../..aa /b/c/.a.../..aa
+/b/c/.a.../..a. /b/c/.a.../..a.
+/b/c/.a.../..a/ /b/c/.a.../..a
+/b/c/.a.../...a /b/c/.a.../...a
+/b/c/.a.../.... /b/c/.a.../....
+/b/c/.a.../.../ /b/c/.a.../...
+/b/c/.a.../../a /b/c/a
+/b/c/.a.../../. /b/c
+/b/c/.a.../..// /b/c
+/b/c/.a..././aa /b/c/.a.../aa
+/b/c/.a..././a. /b/c/.a.../a.
+/b/c/.a..././a/ /b/c/.a.../a
+/b/c/.a..././.a /b/c/.a.../.a
+/b/c/.a..././.. /b/c
+/b/c/.a.../././ /b/c/.a...
+/b/c/.a..././/a /b/c/.a.../a
+/b/c/.a..././/. /b/c/.a...
+/b/c/.a..././// /b/c/.a...
+/b/c/.a...//aaa /b/c/.a.../aaa
+/b/c/.a...//aa. /b/c/.a.../aa.
+/b/c/.a...//aa/ /b/c/.a.../aa
+/b/c/.a...//a.a /b/c/.a.../a.a
+/b/c/.a...//a.. /b/c/.a.../a..
+/b/c/.a...//a./ /b/c/.a.../a.
+/b/c/.a...//a/a /b/c/.a.../a/a
+/b/c/.a...//a/. /b/c/.a.../a
+/b/c/.a...//a// /b/c/.a.../a
+/b/c/.a...//.aa /b/c/.a.../.aa
+/b/c/.a...//.a. /b/c/.a.../.a.
+/b/c/.a...//.a/ /b/c/.a.../.a
+/b/c/.a...//..a /b/c/.a.../..a
+/b/c/.a...//... /b/c/.a.../...
+/b/c/.a...//../ /b/c
+/b/c/.a...//./a /b/c/.a.../a
+/b/c/.a...//./. /b/c/.a...
+/b/c/.a...//.// /b/c/.a...
+/b/c/.a...///aa /b/c/.a.../aa
+/b/c/.a...///a. /b/c/.a.../a.
+/b/c/.a...///a/ /b/c/.a.../a
+/b/c/.a...///.a /b/c/.a.../.a
+/b/c/.a...///.. /b/c
+/b/c/.a...///./ /b/c/.a...
+/b/c/.a...////a /b/c/.a.../a
+/b/c/.a...////. /b/c/.a...
+/b/c/.a...///// /b/c/.a...
+/b/c/.a../aaaaa /b/c/.a../aaaaa
+/b/c/.a../aaaa. /b/c/.a../aaaa.
+/b/c/.a../aaaa/ /b/c/.a../aaaa
+/b/c/.a../aaa.a /b/c/.a../aaa.a
+/b/c/.a../aaa.. /b/c/.a../aaa..
+/b/c/.a../aaa./ /b/c/.a../aaa.
+/b/c/.a../aaa/a /b/c/.a../aaa/a
+/b/c/.a../aaa/. /b/c/.a../aaa
+/b/c/.a../aaa// /b/c/.a../aaa
+/b/c/.a../aa.aa /b/c/.a../aa.aa
+/b/c/.a../aa.a. /b/c/.a../aa.a.
+/b/c/.a../aa.a/ /b/c/.a../aa.a
+/b/c/.a../aa..a /b/c/.a../aa..a
+/b/c/.a../aa... /b/c/.a../aa...
+/b/c/.a../aa../ /b/c/.a../aa..
+/b/c/.a../aa./a /b/c/.a../aa./a
+/b/c/.a../aa./. /b/c/.a../aa.
+/b/c/.a../aa.// /b/c/.a../aa.
+/b/c/.a../aa/aa /b/c/.a../aa/aa
+/b/c/.a../aa/a. /b/c/.a../aa/a.
+/b/c/.a../aa/a/ /b/c/.a../aa/a
+/b/c/.a../aa/.a /b/c/.a../aa/.a
+/b/c/.a../aa/.. /b/c/.a..
+/b/c/.a../aa/./ /b/c/.a../aa
+/b/c/.a../aa//a /b/c/.a../aa/a
+/b/c/.a../aa//. /b/c/.a../aa
+/b/c/.a../aa/// /b/c/.a../aa
+/b/c/.a../a.aaa /b/c/.a../a.aaa
+/b/c/.a../a.aa. /b/c/.a../a.aa.
+/b/c/.a../a.aa/ /b/c/.a../a.aa
+/b/c/.a../a.a.a /b/c/.a../a.a.a
+/b/c/.a../a.a.. /b/c/.a../a.a..
+/b/c/.a../a.a./ /b/c/.a../a.a.
+/b/c/.a../a.a/a /b/c/.a../a.a/a
+/b/c/.a../a.a/. /b/c/.a../a.a
+/b/c/.a../a.a// /b/c/.a../a.a
+/b/c/.a../a..aa /b/c/.a../a..aa
+/b/c/.a../a..a. /b/c/.a../a..a.
+/b/c/.a../a..a/ /b/c/.a../a..a
+/b/c/.a../a...a /b/c/.a../a...a
+/b/c/.a../a.... /b/c/.a../a....
+/b/c/.a../a.../ /b/c/.a../a...
+/b/c/.a../a../a /b/c/.a../a../a
+/b/c/.a../a../. /b/c/.a../a..
+/b/c/.a../a..// /b/c/.a../a..
+/b/c/.a../a./aa /b/c/.a../a./aa
+/b/c/.a../a./a. /b/c/.a../a./a.
+/b/c/.a../a./a/ /b/c/.a../a./a
+/b/c/.a../a./.a /b/c/.a../a./.a
+/b/c/.a../a./.. /b/c/.a..
+/b/c/.a../a././ /b/c/.a../a.
+/b/c/.a../a.//a /b/c/.a../a./a
+/b/c/.a../a.//. /b/c/.a../a.
+/b/c/.a../a./// /b/c/.a../a.
+/b/c/.a../a/aaa /b/c/.a../a/aaa
+/b/c/.a../a/aa. /b/c/.a../a/aa.
+/b/c/.a../a/aa/ /b/c/.a../a/aa
+/b/c/.a../a/a.a /b/c/.a../a/a.a
+/b/c/.a../a/a.. /b/c/.a../a/a..
+/b/c/.a../a/a./ /b/c/.a../a/a.
+/b/c/.a../a/a/a /b/c/.a../a/a/a
+/b/c/.a../a/a/. /b/c/.a../a/a
+/b/c/.a../a/a// /b/c/.a../a/a
+/b/c/.a../a/.aa /b/c/.a../a/.aa
+/b/c/.a../a/.a. /b/c/.a../a/.a.
+/b/c/.a../a/.a/ /b/c/.a../a/.a
+/b/c/.a../a/..a /b/c/.a../a/..a
+/b/c/.a../a/... /b/c/.a../a/...
+/b/c/.a../a/../ /b/c/.a..
+/b/c/.a../a/./a /b/c/.a../a/a
+/b/c/.a../a/./. /b/c/.a../a
+/b/c/.a../a/.// /b/c/.a../a
+/b/c/.a../a//aa /b/c/.a../a/aa
+/b/c/.a../a//a. /b/c/.a../a/a.
+/b/c/.a../a//a/ /b/c/.a../a/a
+/b/c/.a../a//.a /b/c/.a../a/.a
+/b/c/.a../a//.. /b/c/.a..
+/b/c/.a../a//./ /b/c/.a../a
+/b/c/.a../a///a /b/c/.a../a/a
+/b/c/.a../a///. /b/c/.a../a
+/b/c/.a../a//// /b/c/.a../a
+/b/c/.a../.aaaa /b/c/.a../.aaaa
+/b/c/.a../.aaa. /b/c/.a../.aaa.
+/b/c/.a../.aaa/ /b/c/.a../.aaa
+/b/c/.a../.aa.a /b/c/.a../.aa.a
+/b/c/.a../.aa.. /b/c/.a../.aa..
+/b/c/.a../.aa./ /b/c/.a../.aa.
+/b/c/.a../.aa/a /b/c/.a../.aa/a
+/b/c/.a../.aa/. /b/c/.a../.aa
+/b/c/.a../.aa// /b/c/.a../.aa
+/b/c/.a../.a.aa /b/c/.a../.a.aa
+/b/c/.a../.a.a. /b/c/.a../.a.a.
+/b/c/.a../.a.a/ /b/c/.a../.a.a
+/b/c/.a../.a..a /b/c/.a../.a..a
+/b/c/.a../.a... /b/c/.a../.a...
+/b/c/.a../.a../ /b/c/.a../.a..
+/b/c/.a../.a./a /b/c/.a../.a./a
+/b/c/.a../.a./. /b/c/.a../.a.
+/b/c/.a../.a.// /b/c/.a../.a.
+/b/c/.a../.a/aa /b/c/.a../.a/aa
+/b/c/.a../.a/a. /b/c/.a../.a/a.
+/b/c/.a../.a/a/ /b/c/.a../.a/a
+/b/c/.a../.a/.a /b/c/.a../.a/.a
+/b/c/.a../.a/.. /b/c/.a..
+/b/c/.a../.a/./ /b/c/.a../.a
+/b/c/.a../.a//a /b/c/.a../.a/a
+/b/c/.a../.a//. /b/c/.a../.a
+/b/c/.a../.a/// /b/c/.a../.a
+/b/c/.a../..aaa /b/c/.a../..aaa
+/b/c/.a../..aa. /b/c/.a../..aa.
+/b/c/.a../..aa/ /b/c/.a../..aa
+/b/c/.a../..a.a /b/c/.a../..a.a
+/b/c/.a../..a.. /b/c/.a../..a..
+/b/c/.a../..a./ /b/c/.a../..a.
+/b/c/.a../..a/a /b/c/.a../..a/a
+/b/c/.a../..a/. /b/c/.a../..a
+/b/c/.a../..a// /b/c/.a../..a
+/b/c/.a../...aa /b/c/.a../...aa
+/b/c/.a../...a. /b/c/.a../...a.
+/b/c/.a../...a/ /b/c/.a../...a
+/b/c/.a../....a /b/c/.a../....a
+/b/c/.a../..... /b/c/.a../.....
+/b/c/.a../..../ /b/c/.a../....
+/b/c/.a../.../a /b/c/.a../.../a
+/b/c/.a../.../. /b/c/.a../...
+/b/c/.a../...// /b/c/.a../...
+/b/c/.a../../aa /b/c/aa
+/b/c/.a../../a. /b/c/a.
+/b/c/.a../../a/ /b/c/a
+/b/c/.a../../.a /b/c/.a
+/b/c/.a../../.. /b
+/b/c/.a../.././ /b/c
+/b/c/.a../..//a /b/c/a
+/b/c/.a../..//. /b/c
+/b/c/.a../../// /b/c
+/b/c/.a.././aaa /b/c/.a../aaa
+/b/c/.a.././aa. /b/c/.a../aa.
+/b/c/.a.././aa/ /b/c/.a../aa
+/b/c/.a.././a.a /b/c/.a../a.a
+/b/c/.a.././a.. /b/c/.a../a..
+/b/c/.a.././a./ /b/c/.a../a.
+/b/c/.a.././a/a /b/c/.a../a/a
+/b/c/.a.././a/. /b/c/.a../a
+/b/c/.a.././a// /b/c/.a../a
+/b/c/.a.././.aa /b/c/.a../.aa
+/b/c/.a.././.a. /b/c/.a../.a.
+/b/c/.a.././.a/ /b/c/.a../.a
+/b/c/.a.././..a /b/c/.a../..a
+/b/c/.a.././... /b/c/.a../...
+/b/c/.a.././../ /b/c
+/b/c/.a../././a /b/c/.a../a
+/b/c/.a../././. /b/c/.a..
+/b/c/.a.././.// /b/c/.a..
+/b/c/.a.././/aa /b/c/.a../aa
+/b/c/.a.././/a. /b/c/.a../a.
+/b/c/.a.././/a/ /b/c/.a../a
+/b/c/.a.././/.a /b/c/.a../.a
+/b/c/.a.././/.. /b/c
+/b/c/.a.././/./ /b/c/.a..
+/b/c/.a.././//a /b/c/.a../a
+/b/c/.a.././//. /b/c/.a..
+/b/c/.a.././/// /b/c/.a..
+/b/c/.a..//aaaa /b/c/.a../aaaa
+/b/c/.a..//aaa. /b/c/.a../aaa.
+/b/c/.a..//aaa/ /b/c/.a../aaa
+/b/c/.a..//aa.a /b/c/.a../aa.a
+/b/c/.a..//aa.. /b/c/.a../aa..
+/b/c/.a..//aa./ /b/c/.a../aa.
+/b/c/.a..//aa/a /b/c/.a../aa/a
+/b/c/.a..//aa/. /b/c/.a../aa
+/b/c/.a..//aa// /b/c/.a../aa
+/b/c/.a..//a.aa /b/c/.a../a.aa
+/b/c/.a..//a.a. /b/c/.a../a.a.
+/b/c/.a..//a.a/ /b/c/.a../a.a
+/b/c/.a..//a..a /b/c/.a../a..a
+/b/c/.a..//a... /b/c/.a../a...
+/b/c/.a..//a../ /b/c/.a../a..
+/b/c/.a..//a./a /b/c/.a../a./a
+/b/c/.a..//a./. /b/c/.a../a.
+/b/c/.a..//a.// /b/c/.a../a.
+/b/c/.a..//a/aa /b/c/.a../a/aa
+/b/c/.a..//a/a. /b/c/.a../a/a.
+/b/c/.a..//a/a/ /b/c/.a../a/a
+/b/c/.a..//a/.a /b/c/.a../a/.a
+/b/c/.a..//a/.. /b/c/.a..
+/b/c/.a..//a/./ /b/c/.a../a
+/b/c/.a..//a//a /b/c/.a../a/a
+/b/c/.a..//a//. /b/c/.a../a
+/b/c/.a..//a/// /b/c/.a../a
+/b/c/.a..//.aaa /b/c/.a../.aaa
+/b/c/.a..//.aa. /b/c/.a../.aa.
+/b/c/.a..//.aa/ /b/c/.a../.aa
+/b/c/.a..//.a.a /b/c/.a../.a.a
+/b/c/.a..//.a.. /b/c/.a../.a..
+/b/c/.a..//.a./ /b/c/.a../.a.
+/b/c/.a..//.a/a /b/c/.a../.a/a
+/b/c/.a..//.a/. /b/c/.a../.a
+/b/c/.a..//.a// /b/c/.a../.a
+/b/c/.a..//..aa /b/c/.a../..aa
+/b/c/.a..//..a. /b/c/.a../..a.
+/b/c/.a..//..a/ /b/c/.a../..a
+/b/c/.a..//...a /b/c/.a../...a
+/b/c/.a..//.... /b/c/.a../....
+/b/c/.a..//.../ /b/c/.a../...
+/b/c/.a..//../a /b/c/a
+/b/c/.a..//../. /b/c
+/b/c/.a..//..// /b/c
+/b/c/.a..//./aa /b/c/.a../aa
+/b/c/.a..//./a. /b/c/.a../a.
+/b/c/.a..//./a/ /b/c/.a../a
+/b/c/.a..//./.a /b/c/.a../.a
+/b/c/.a..//./.. /b/c
+/b/c/.a..//././ /b/c/.a..
+/b/c/.a..//.//a /b/c/.a../a
+/b/c/.a..//.//. /b/c/.a..
+/b/c/.a..//./// /b/c/.a..
+/b/c/.a..///aaa /b/c/.a../aaa
+/b/c/.a..///aa. /b/c/.a../aa.
+/b/c/.a..///aa/ /b/c/.a../aa
+/b/c/.a..///a.a /b/c/.a../a.a
+/b/c/.a..///a.. /b/c/.a../a..
+/b/c/.a..///a./ /b/c/.a../a.
+/b/c/.a..///a/a /b/c/.a../a/a
+/b/c/.a..///a/. /b/c/.a../a
+/b/c/.a..///a// /b/c/.a../a
+/b/c/.a..///.aa /b/c/.a../.aa
+/b/c/.a..///.a. /b/c/.a../.a.
+/b/c/.a..///.a/ /b/c/.a../.a
+/b/c/.a..///..a /b/c/.a../..a
+/b/c/.a..///... /b/c/.a../...
+/b/c/.a..///../ /b/c
+/b/c/.a..///./a /b/c/.a../a
+/b/c/.a..///./. /b/c/.a..
+/b/c/.a..///.// /b/c/.a..
+/b/c/.a..////aa /b/c/.a../aa
+/b/c/.a..////a. /b/c/.a../a.
+/b/c/.a..////a/ /b/c/.a../a
+/b/c/.a..////.a /b/c/.a../.a
+/b/c/.a..////.. /b/c
+/b/c/.a..////./ /b/c/.a..
+/b/c/.a../////a /b/c/.a../a
+/b/c/.a../////. /b/c/.a..
+/b/c/.a..////// /b/c/.a..
+/b/c/.a./aaaaaa /b/c/.a./aaaaaa
+/b/c/.a./aaaaa. /b/c/.a./aaaaa.
+/b/c/.a./aaaaa/ /b/c/.a./aaaaa
+/b/c/.a./aaaa.a /b/c/.a./aaaa.a
+/b/c/.a./aaaa.. /b/c/.a./aaaa..
+/b/c/.a./aaaa./ /b/c/.a./aaaa.
+/b/c/.a./aaaa/a /b/c/.a./aaaa/a
+/b/c/.a./aaaa/. /b/c/.a./aaaa
+/b/c/.a./aaaa// /b/c/.a./aaaa
+/b/c/.a./aaa.aa /b/c/.a./aaa.aa
+/b/c/.a./aaa.a. /b/c/.a./aaa.a.
+/b/c/.a./aaa.a/ /b/c/.a./aaa.a
+/b/c/.a./aaa..a /b/c/.a./aaa..a
+/b/c/.a./aaa... /b/c/.a./aaa...
+/b/c/.a./aaa../ /b/c/.a./aaa..
+/b/c/.a./aaa./a /b/c/.a./aaa./a
+/b/c/.a./aaa./. /b/c/.a./aaa.
+/b/c/.a./aaa.// /b/c/.a./aaa.
+/b/c/.a./aaa/aa /b/c/.a./aaa/aa
+/b/c/.a./aaa/a. /b/c/.a./aaa/a.
+/b/c/.a./aaa/a/ /b/c/.a./aaa/a
+/b/c/.a./aaa/.a /b/c/.a./aaa/.a
+/b/c/.a./aaa/.. /b/c/.a.
+/b/c/.a./aaa/./ /b/c/.a./aaa
+/b/c/.a./aaa//a /b/c/.a./aaa/a
+/b/c/.a./aaa//. /b/c/.a./aaa
+/b/c/.a./aaa/// /b/c/.a./aaa
+/b/c/.a./aa.aaa /b/c/.a./aa.aaa
+/b/c/.a./aa.aa. /b/c/.a./aa.aa.
+/b/c/.a./aa.aa/ /b/c/.a./aa.aa
+/b/c/.a./aa.a.a /b/c/.a./aa.a.a
+/b/c/.a./aa.a.. /b/c/.a./aa.a..
+/b/c/.a./aa.a./ /b/c/.a./aa.a.
+/b/c/.a./aa.a/a /b/c/.a./aa.a/a
+/b/c/.a./aa.a/. /b/c/.a./aa.a
+/b/c/.a./aa.a// /b/c/.a./aa.a
+/b/c/.a./aa..aa /b/c/.a./aa..aa
+/b/c/.a./aa..a. /b/c/.a./aa..a.
+/b/c/.a./aa..a/ /b/c/.a./aa..a
+/b/c/.a./aa...a /b/c/.a./aa...a
+/b/c/.a./aa.... /b/c/.a./aa....
+/b/c/.a./aa.../ /b/c/.a./aa...
+/b/c/.a./aa../a /b/c/.a./aa../a
+/b/c/.a./aa../. /b/c/.a./aa..
+/b/c/.a./aa..// /b/c/.a./aa..
+/b/c/.a./aa./aa /b/c/.a./aa./aa
+/b/c/.a./aa./a. /b/c/.a./aa./a.
+/b/c/.a./aa./a/ /b/c/.a./aa./a
+/b/c/.a./aa./.a /b/c/.a./aa./.a
+/b/c/.a./aa./.. /b/c/.a.
+/b/c/.a./aa././ /b/c/.a./aa.
+/b/c/.a./aa.//a /b/c/.a./aa./a
+/b/c/.a./aa.//. /b/c/.a./aa.
+/b/c/.a./aa./// /b/c/.a./aa.
+/b/c/.a./aa/aaa /b/c/.a./aa/aaa
+/b/c/.a./aa/aa. /b/c/.a./aa/aa.
+/b/c/.a./aa/aa/ /b/c/.a./aa/aa
+/b/c/.a./aa/a.a /b/c/.a./aa/a.a
+/b/c/.a./aa/a.. /b/c/.a./aa/a..
+/b/c/.a./aa/a./ /b/c/.a./aa/a.
+/b/c/.a./aa/a/a /b/c/.a./aa/a/a
+/b/c/.a./aa/a/. /b/c/.a./aa/a
+/b/c/.a./aa/a// /b/c/.a./aa/a
+/b/c/.a./aa/.aa /b/c/.a./aa/.aa
+/b/c/.a./aa/.a. /b/c/.a./aa/.a.
+/b/c/.a./aa/.a/ /b/c/.a./aa/.a
+/b/c/.a./aa/..a /b/c/.a./aa/..a
+/b/c/.a./aa/... /b/c/.a./aa/...
+/b/c/.a./aa/../ /b/c/.a.
+/b/c/.a./aa/./a /b/c/.a./aa/a
+/b/c/.a./aa/./. /b/c/.a./aa
+/b/c/.a./aa/.// /b/c/.a./aa
+/b/c/.a./aa//aa /b/c/.a./aa/aa
+/b/c/.a./aa//a. /b/c/.a./aa/a.
+/b/c/.a./aa//a/ /b/c/.a./aa/a
+/b/c/.a./aa//.a /b/c/.a./aa/.a
+/b/c/.a./aa//.. /b/c/.a.
+/b/c/.a./aa//./ /b/c/.a./aa
+/b/c/.a./aa///a /b/c/.a./aa/a
+/b/c/.a./aa///. /b/c/.a./aa
+/b/c/.a./aa//// /b/c/.a./aa
+/b/c/.a./a.aaaa /b/c/.a./a.aaaa
+/b/c/.a./a.aaa. /b/c/.a./a.aaa.
+/b/c/.a./a.aaa/ /b/c/.a./a.aaa
+/b/c/.a./a.aa.a /b/c/.a./a.aa.a
+/b/c/.a./a.aa.. /b/c/.a./a.aa..
+/b/c/.a./a.aa./ /b/c/.a./a.aa.
+/b/c/.a./a.aa/a /b/c/.a./a.aa/a
+/b/c/.a./a.aa/. /b/c/.a./a.aa
+/b/c/.a./a.aa// /b/c/.a./a.aa
+/b/c/.a./a.a.aa /b/c/.a./a.a.aa
+/b/c/.a./a.a.a. /b/c/.a./a.a.a.
+/b/c/.a./a.a.a/ /b/c/.a./a.a.a
+/b/c/.a./a.a..a /b/c/.a./a.a..a
+/b/c/.a./a.a... /b/c/.a./a.a...
+/b/c/.a./a.a../ /b/c/.a./a.a..
+/b/c/.a./a.a./a /b/c/.a./a.a./a
+/b/c/.a./a.a./. /b/c/.a./a.a.
+/b/c/.a./a.a.// /b/c/.a./a.a.
+/b/c/.a./a.a/aa /b/c/.a./a.a/aa
+/b/c/.a./a.a/a. /b/c/.a./a.a/a.
+/b/c/.a./a.a/a/ /b/c/.a./a.a/a
+/b/c/.a./a.a/.a /b/c/.a./a.a/.a
+/b/c/.a./a.a/.. /b/c/.a.
+/b/c/.a./a.a/./ /b/c/.a./a.a
+/b/c/.a./a.a//a /b/c/.a./a.a/a
+/b/c/.a./a.a//. /b/c/.a./a.a
+/b/c/.a./a.a/// /b/c/.a./a.a
+/b/c/.a./a..aaa /b/c/.a./a..aaa
+/b/c/.a./a..aa. /b/c/.a./a..aa.
+/b/c/.a./a..aa/ /b/c/.a./a..aa
+/b/c/.a./a..a.a /b/c/.a./a..a.a
+/b/c/.a./a..a.. /b/c/.a./a..a..
+/b/c/.a./a..a./ /b/c/.a./a..a.
+/b/c/.a./a..a/a /b/c/.a./a..a/a
+/b/c/.a./a..a/. /b/c/.a./a..a
+/b/c/.a./a..a// /b/c/.a./a..a
+/b/c/.a./a...aa /b/c/.a./a...aa
+/b/c/.a./a...a. /b/c/.a./a...a.
+/b/c/.a./a...a/ /b/c/.a./a...a
+/b/c/.a./a....a /b/c/.a./a....a
+/b/c/.a./a..... /b/c/.a./a.....
+/b/c/.a./a..../ /b/c/.a./a....
+/b/c/.a./a.../a /b/c/.a./a.../a
+/b/c/.a./a.../. /b/c/.a./a...
+/b/c/.a./a...// /b/c/.a./a...
+/b/c/.a./a../aa /b/c/.a./a../aa
+/b/c/.a./a../a. /b/c/.a./a../a.
+/b/c/.a./a../a/ /b/c/.a./a../a
+/b/c/.a./a../.a /b/c/.a./a../.a
+/b/c/.a./a../.. /b/c/.a.
+/b/c/.a./a.././ /b/c/.a./a..
+/b/c/.a./a..//a /b/c/.a./a../a
+/b/c/.a./a..//. /b/c/.a./a..
+/b/c/.a./a../// /b/c/.a./a..
+/b/c/.a./a./aaa /b/c/.a./a./aaa
+/b/c/.a./a./aa. /b/c/.a./a./aa.
+/b/c/.a./a./aa/ /b/c/.a./a./aa
+/b/c/.a./a./a.a /b/c/.a./a./a.a
+/b/c/.a./a./a.. /b/c/.a./a./a..
+/b/c/.a./a./a./ /b/c/.a./a./a.
+/b/c/.a./a./a/a /b/c/.a./a./a/a
+/b/c/.a./a./a/. /b/c/.a./a./a
+/b/c/.a./a./a// /b/c/.a./a./a
+/b/c/.a./a./.aa /b/c/.a./a./.aa
+/b/c/.a./a./.a. /b/c/.a./a./.a.
+/b/c/.a./a./.a/ /b/c/.a./a./.a
+/b/c/.a./a./..a /b/c/.a./a./..a
+/b/c/.a./a./... /b/c/.a./a./...
+/b/c/.a./a./../ /b/c/.a.
+/b/c/.a./a././a /b/c/.a./a./a
+/b/c/.a./a././. /b/c/.a./a.
+/b/c/.a./a./.// /b/c/.a./a.
+/b/c/.a./a.//aa /b/c/.a./a./aa
+/b/c/.a./a.//a. /b/c/.a./a./a.
+/b/c/.a./a.//a/ /b/c/.a./a./a
+/b/c/.a./a.//.a /b/c/.a./a./.a
+/b/c/.a./a.//.. /b/c/.a.
+/b/c/.a./a.//./ /b/c/.a./a.
+/b/c/.a./a.///a /b/c/.a./a./a
+/b/c/.a./a.///. /b/c/.a./a.
+/b/c/.a./a.//// /b/c/.a./a.
+/b/c/.a./a/aaaa /b/c/.a./a/aaaa
+/b/c/.a./a/aaa. /b/c/.a./a/aaa.
+/b/c/.a./a/aaa/ /b/c/.a./a/aaa
+/b/c/.a./a/aa.a /b/c/.a./a/aa.a
+/b/c/.a./a/aa.. /b/c/.a./a/aa..
+/b/c/.a./a/aa./ /b/c/.a./a/aa.
+/b/c/.a./a/aa/a /b/c/.a./a/aa/a
+/b/c/.a./a/aa/. /b/c/.a./a/aa
+/b/c/.a./a/aa// /b/c/.a./a/aa
+/b/c/.a./a/a.aa /b/c/.a./a/a.aa
+/b/c/.a./a/a.a. /b/c/.a./a/a.a.
+/b/c/.a./a/a.a/ /b/c/.a./a/a.a
+/b/c/.a./a/a..a /b/c/.a./a/a..a
+/b/c/.a./a/a... /b/c/.a./a/a...
+/b/c/.a./a/a../ /b/c/.a./a/a..
+/b/c/.a./a/a./a /b/c/.a./a/a./a
+/b/c/.a./a/a./. /b/c/.a./a/a.
+/b/c/.a./a/a.// /b/c/.a./a/a.
+/b/c/.a./a/a/aa /b/c/.a./a/a/aa
+/b/c/.a./a/a/a. /b/c/.a./a/a/a.
+/b/c/.a./a/a/a/ /b/c/.a./a/a/a
+/b/c/.a./a/a/.a /b/c/.a./a/a/.a
+/b/c/.a./a/a/.. /b/c/.a./a
+/b/c/.a./a/a/./ /b/c/.a./a/a
+/b/c/.a./a/a//a /b/c/.a./a/a/a
+/b/c/.a./a/a//. /b/c/.a./a/a
+/b/c/.a./a/a/// /b/c/.a./a/a
+/b/c/.a./a/.aaa /b/c/.a./a/.aaa
+/b/c/.a./a/.aa. /b/c/.a./a/.aa.
+/b/c/.a./a/.aa/ /b/c/.a./a/.aa
+/b/c/.a./a/.a.a /b/c/.a./a/.a.a
+/b/c/.a./a/.a.. /b/c/.a./a/.a..
+/b/c/.a./a/.a./ /b/c/.a./a/.a.
+/b/c/.a./a/.a/a /b/c/.a./a/.a/a
+/b/c/.a./a/.a/. /b/c/.a./a/.a
+/b/c/.a./a/.a// /b/c/.a./a/.a
+/b/c/.a./a/..aa /b/c/.a./a/..aa
+/b/c/.a./a/..a. /b/c/.a./a/..a.
+/b/c/.a./a/..a/ /b/c/.a./a/..a
+/b/c/.a./a/...a /b/c/.a./a/...a
+/b/c/.a./a/.... /b/c/.a./a/....
+/b/c/.a./a/.../ /b/c/.a./a/...
+/b/c/.a./a/../a /b/c/.a./a
+/b/c/.a./a/../. /b/c/.a.
+/b/c/.a./a/..// /b/c/.a.
+/b/c/.a./a/./aa /b/c/.a./a/aa
+/b/c/.a./a/./a. /b/c/.a./a/a.
+/b/c/.a./a/./a/ /b/c/.a./a/a
+/b/c/.a./a/./.a /b/c/.a./a/.a
+/b/c/.a./a/./.. /b/c/.a.
+/b/c/.a./a/././ /b/c/.a./a
+/b/c/.a./a/.//a /b/c/.a./a/a
+/b/c/.a./a/.//. /b/c/.a./a
+/b/c/.a./a/./// /b/c/.a./a
+/b/c/.a./a//aaa /b/c/.a./a/aaa
+/b/c/.a./a//aa. /b/c/.a./a/aa.
+/b/c/.a./a//aa/ /b/c/.a./a/aa
+/b/c/.a./a//a.a /b/c/.a./a/a.a
+/b/c/.a./a//a.. /b/c/.a./a/a..
+/b/c/.a./a//a./ /b/c/.a./a/a.
+/b/c/.a./a//a/a /b/c/.a./a/a/a
+/b/c/.a./a//a/. /b/c/.a./a/a
+/b/c/.a./a//a// /b/c/.a./a/a
+/b/c/.a./a//.aa /b/c/.a./a/.aa
+/b/c/.a./a//.a. /b/c/.a./a/.a.
+/b/c/.a./a//.a/ /b/c/.a./a/.a
+/b/c/.a./a//..a /b/c/.a./a/..a
+/b/c/.a./a//... /b/c/.a./a/...
+/b/c/.a./a//../ /b/c/.a.
+/b/c/.a./a//./a /b/c/.a./a/a
+/b/c/.a./a//./. /b/c/.a./a
+/b/c/.a./a//.// /b/c/.a./a
+/b/c/.a./a///aa /b/c/.a./a/aa
+/b/c/.a./a///a. /b/c/.a./a/a.
+/b/c/.a./a///a/ /b/c/.a./a/a
+/b/c/.a./a///.a /b/c/.a./a/.a
+/b/c/.a./a///.. /b/c/.a.
+/b/c/.a./a///./ /b/c/.a./a
+/b/c/.a./a////a /b/c/.a./a/a
+/b/c/.a./a////. /b/c/.a./a
+/b/c/.a./a///// /b/c/.a./a
+/b/c/.a./.aaaaa /b/c/.a./.aaaaa
+/b/c/.a./.aaaa. /b/c/.a./.aaaa.
+/b/c/.a./.aaaa/ /b/c/.a./.aaaa
+/b/c/.a./.aaa.a /b/c/.a./.aaa.a
+/b/c/.a./.aaa.. /b/c/.a./.aaa..
+/b/c/.a./.aaa./ /b/c/.a./.aaa.
+/b/c/.a./.aaa/a /b/c/.a./.aaa/a
+/b/c/.a./.aaa/. /b/c/.a./.aaa
+/b/c/.a./.aaa// /b/c/.a./.aaa
+/b/c/.a./.aa.aa /b/c/.a./.aa.aa
+/b/c/.a./.aa.a. /b/c/.a./.aa.a.
+/b/c/.a./.aa.a/ /b/c/.a./.aa.a
+/b/c/.a./.aa..a /b/c/.a./.aa..a
+/b/c/.a./.aa... /b/c/.a./.aa...
+/b/c/.a./.aa../ /b/c/.a./.aa..
+/b/c/.a./.aa./a /b/c/.a./.aa./a
+/b/c/.a./.aa./. /b/c/.a./.aa.
+/b/c/.a./.aa.// /b/c/.a./.aa.
+/b/c/.a./.aa/aa /b/c/.a./.aa/aa
+/b/c/.a./.aa/a. /b/c/.a./.aa/a.
+/b/c/.a./.aa/a/ /b/c/.a./.aa/a
+/b/c/.a./.aa/.a /b/c/.a./.aa/.a
+/b/c/.a./.aa/.. /b/c/.a.
+/b/c/.a./.aa/./ /b/c/.a./.aa
+/b/c/.a./.aa//a /b/c/.a./.aa/a
+/b/c/.a./.aa//. /b/c/.a./.aa
+/b/c/.a./.aa/// /b/c/.a./.aa
+/b/c/.a./.a.aaa /b/c/.a./.a.aaa
+/b/c/.a./.a.aa. /b/c/.a./.a.aa.
+/b/c/.a./.a.aa/ /b/c/.a./.a.aa
+/b/c/.a./.a.a.a /b/c/.a./.a.a.a
+/b/c/.a./.a.a.. /b/c/.a./.a.a..
+/b/c/.a./.a.a./ /b/c/.a./.a.a.
+/b/c/.a./.a.a/a /b/c/.a./.a.a/a
+/b/c/.a./.a.a/. /b/c/.a./.a.a
+/b/c/.a./.a.a// /b/c/.a./.a.a
+/b/c/.a./.a..aa /b/c/.a./.a..aa
+/b/c/.a./.a..a. /b/c/.a./.a..a.
+/b/c/.a./.a..a/ /b/c/.a./.a..a
+/b/c/.a./.a...a /b/c/.a./.a...a
+/b/c/.a./.a.... /b/c/.a./.a....
+/b/c/.a./.a.../ /b/c/.a./.a...
+/b/c/.a./.a../a /b/c/.a./.a../a
+/b/c/.a./.a../. /b/c/.a./.a..
+/b/c/.a./.a..// /b/c/.a./.a..
+/b/c/.a./.a./aa /b/c/.a./.a./aa
+/b/c/.a./.a./a. /b/c/.a./.a./a.
+/b/c/.a./.a./a/ /b/c/.a./.a./a
+/b/c/.a./.a./.a /b/c/.a./.a./.a
+/b/c/.a./.a./.. /b/c/.a.
+/b/c/.a./.a././ /b/c/.a./.a.
+/b/c/.a./.a.//a /b/c/.a./.a./a
+/b/c/.a./.a.//. /b/c/.a./.a.
+/b/c/.a./.a./// /b/c/.a./.a.
+/b/c/.a./.a/aaa /b/c/.a./.a/aaa
+/b/c/.a./.a/aa. /b/c/.a./.a/aa.
+/b/c/.a./.a/aa/ /b/c/.a./.a/aa
+/b/c/.a./.a/a.a /b/c/.a./.a/a.a
+/b/c/.a./.a/a.. /b/c/.a./.a/a..
+/b/c/.a./.a/a./ /b/c/.a./.a/a.
+/b/c/.a./.a/a/a /b/c/.a./.a/a/a
+/b/c/.a./.a/a/. /b/c/.a./.a/a
+/b/c/.a./.a/a// /b/c/.a./.a/a
+/b/c/.a./.a/.aa /b/c/.a./.a/.aa
+/b/c/.a./.a/.a. /b/c/.a./.a/.a.
+/b/c/.a./.a/.a/ /b/c/.a./.a/.a
+/b/c/.a./.a/..a /b/c/.a./.a/..a
+/b/c/.a./.a/... /b/c/.a./.a/...
+/b/c/.a./.a/../ /b/c/.a.
+/b/c/.a./.a/./a /b/c/.a./.a/a
+/b/c/.a./.a/./. /b/c/.a./.a
+/b/c/.a./.a/.// /b/c/.a./.a
+/b/c/.a./.a//aa /b/c/.a./.a/aa
+/b/c/.a./.a//a. /b/c/.a./.a/a.
+/b/c/.a./.a//a/ /b/c/.a./.a/a
+/b/c/.a./.a//.a /b/c/.a./.a/.a
+/b/c/.a./.a//.. /b/c/.a.
+/b/c/.a./.a//./ /b/c/.a./.a
+/b/c/.a./.a///a /b/c/.a./.a/a
+/b/c/.a./.a///. /b/c/.a./.a
+/b/c/.a./.a//// /b/c/.a./.a
+/b/c/.a./..aaaa /b/c/.a./..aaaa
+/b/c/.a./..aaa. /b/c/.a./..aaa.
+/b/c/.a./..aaa/ /b/c/.a./..aaa
+/b/c/.a./..aa.a /b/c/.a./..aa.a
+/b/c/.a./..aa.. /b/c/.a./..aa..
+/b/c/.a./..aa./ /b/c/.a./..aa.
+/b/c/.a./..aa/a /b/c/.a./..aa/a
+/b/c/.a./..aa/. /b/c/.a./..aa
+/b/c/.a./..aa// /b/c/.a./..aa
+/b/c/.a./..a.aa /b/c/.a./..a.aa
+/b/c/.a./..a.a. /b/c/.a./..a.a.
+/b/c/.a./..a.a/ /b/c/.a./..a.a
+/b/c/.a./..a..a /b/c/.a./..a..a
+/b/c/.a./..a... /b/c/.a./..a...
+/b/c/.a./..a../ /b/c/.a./..a..
+/b/c/.a./..a./a /b/c/.a./..a./a
+/b/c/.a./..a./. /b/c/.a./..a.
+/b/c/.a./..a.// /b/c/.a./..a.
+/b/c/.a./..a/aa /b/c/.a./..a/aa
+/b/c/.a./..a/a. /b/c/.a./..a/a.
+/b/c/.a./..a/a/ /b/c/.a./..a/a
+/b/c/.a./..a/.a /b/c/.a./..a/.a
+/b/c/.a./..a/.. /b/c/.a.
+/b/c/.a./..a/./ /b/c/.a./..a
+/b/c/.a./..a//a /b/c/.a./..a/a
+/b/c/.a./..a//. /b/c/.a./..a
+/b/c/.a./..a/// /b/c/.a./..a
+/b/c/.a./...aaa /b/c/.a./...aaa
+/b/c/.a./...aa. /b/c/.a./...aa.
+/b/c/.a./...aa/ /b/c/.a./...aa
+/b/c/.a./...a.a /b/c/.a./...a.a
+/b/c/.a./...a.. /b/c/.a./...a..
+/b/c/.a./...a./ /b/c/.a./...a.
+/b/c/.a./...a/a /b/c/.a./...a/a
+/b/c/.a./...a/. /b/c/.a./...a
+/b/c/.a./...a// /b/c/.a./...a
+/b/c/.a./....aa /b/c/.a./....aa
+/b/c/.a./....a. /b/c/.a./....a.
+/b/c/.a./....a/ /b/c/.a./....a
+/b/c/.a./.....a /b/c/.a./.....a
+/b/c/.a./...... /b/c/.a./......
+/b/c/.a./...../ /b/c/.a./.....
+/b/c/.a./..../a /b/c/.a./..../a
+/b/c/.a./..../. /b/c/.a./....
+/b/c/.a./....// /b/c/.a./....
+/b/c/.a./.../aa /b/c/.a./.../aa
+/b/c/.a./.../a. /b/c/.a./.../a.
+/b/c/.a./.../a/ /b/c/.a./.../a
+/b/c/.a./.../.a /b/c/.a./.../.a
+/b/c/.a./.../.. /b/c/.a.
+/b/c/.a./..././ /b/c/.a./...
+/b/c/.a./...//a /b/c/.a./.../a
+/b/c/.a./...//. /b/c/.a./...
+/b/c/.a./.../// /b/c/.a./...
+/b/c/.a./../aaa /b/c/aaa
+/b/c/.a./../aa. /b/c/aa.
+/b/c/.a./../aa/ /b/c/aa
+/b/c/.a./../a.a /b/c/a.a
+/b/c/.a./../a.. /b/c/a..
+/b/c/.a./../a./ /b/c/a.
+/b/c/.a./../a/a /b/c/a/a
+/b/c/.a./../a/. /b/c/a
+/b/c/.a./../a// /b/c/a
+/b/c/.a./../.aa /b/c/.aa
+/b/c/.a./../.a. /b/c/.a.
+/b/c/.a./../.a/ /b/c/.a
+/b/c/.a./../..a /b/c/..a
+/b/c/.a./../... /b/c/...
+/b/c/.a./../../ /b
+/b/c/.a./.././a /b/c/a
+/b/c/.a./.././. /b/c
+/b/c/.a./../.// /b/c
+/b/c/.a./..//aa /b/c/aa
+/b/c/.a./..//a. /b/c/a.
+/b/c/.a./..//a/ /b/c/a
+/b/c/.a./..//.a /b/c/.a
+/b/c/.a./..//.. /b
+/b/c/.a./..//./ /b/c
+/b/c/.a./..///a /b/c/a
+/b/c/.a./..///. /b/c
+/b/c/.a./..//// /b/c
+/b/c/.a././aaaa /b/c/.a./aaaa
+/b/c/.a././aaa. /b/c/.a./aaa.
+/b/c/.a././aaa/ /b/c/.a./aaa
+/b/c/.a././aa.a /b/c/.a./aa.a
+/b/c/.a././aa.. /b/c/.a./aa..
+/b/c/.a././aa./ /b/c/.a./aa.
+/b/c/.a././aa/a /b/c/.a./aa/a
+/b/c/.a././aa/. /b/c/.a./aa
+/b/c/.a././aa// /b/c/.a./aa
+/b/c/.a././a.aa /b/c/.a./a.aa
+/b/c/.a././a.a. /b/c/.a./a.a.
+/b/c/.a././a.a/ /b/c/.a./a.a
+/b/c/.a././a..a /b/c/.a./a..a
+/b/c/.a././a... /b/c/.a./a...
+/b/c/.a././a../ /b/c/.a./a..
+/b/c/.a././a./a /b/c/.a./a./a
+/b/c/.a././a./. /b/c/.a./a.
+/b/c/.a././a.// /b/c/.a./a.
+/b/c/.a././a/aa /b/c/.a./a/aa
+/b/c/.a././a/a. /b/c/.a./a/a.
+/b/c/.a././a/a/ /b/c/.a./a/a
+/b/c/.a././a/.a /b/c/.a./a/.a
+/b/c/.a././a/.. /b/c/.a.
+/b/c/.a././a/./ /b/c/.a./a
+/b/c/.a././a//a /b/c/.a./a/a
+/b/c/.a././a//. /b/c/.a./a
+/b/c/.a././a/// /b/c/.a./a
+/b/c/.a././.aaa /b/c/.a./.aaa
+/b/c/.a././.aa. /b/c/.a./.aa.
+/b/c/.a././.aa/ /b/c/.a./.aa
+/b/c/.a././.a.a /b/c/.a./.a.a
+/b/c/.a././.a.. /b/c/.a./.a..
+/b/c/.a././.a./ /b/c/.a./.a.
+/b/c/.a././.a/a /b/c/.a./.a/a
+/b/c/.a././.a/. /b/c/.a./.a
+/b/c/.a././.a// /b/c/.a./.a
+/b/c/.a././..aa /b/c/.a./..aa
+/b/c/.a././..a. /b/c/.a./..a.
+/b/c/.a././..a/ /b/c/.a./..a
+/b/c/.a././...a /b/c/.a./...a
+/b/c/.a././.... /b/c/.a./....
+/b/c/.a././.../ /b/c/.a./...
+/b/c/.a././../a /b/c/a
+/b/c/.a././../. /b/c
+/b/c/.a././..// /b/c
+/b/c/.a./././aa /b/c/.a./aa
+/b/c/.a./././a. /b/c/.a./a.
+/b/c/.a./././a/ /b/c/.a./a
+/b/c/.a./././.a /b/c/.a./.a
+/b/c/.a./././.. /b/c
+/b/c/.a././././ /b/c/.a.
+/b/c/.a./././/a /b/c/.a./a
+/b/c/.a./././/. /b/c/.a.
+/b/c/.a./././// /b/c/.a.
+/b/c/.a././/aaa /b/c/.a./aaa
+/b/c/.a././/aa. /b/c/.a./aa.
+/b/c/.a././/aa/ /b/c/.a./aa
+/b/c/.a././/a.a /b/c/.a./a.a
+/b/c/.a././/a.. /b/c/.a./a..
+/b/c/.a././/a./ /b/c/.a./a.
+/b/c/.a././/a/a /b/c/.a./a/a
+/b/c/.a././/a/. /b/c/.a./a
+/b/c/.a././/a// /b/c/.a./a
+/b/c/.a././/.aa /b/c/.a./.aa
+/b/c/.a././/.a. /b/c/.a./.a.
+/b/c/.a././/.a/ /b/c/.a./.a
+/b/c/.a././/..a /b/c/.a./..a
+/b/c/.a././/... /b/c/.a./...
+/b/c/.a././/../ /b/c
+/b/c/.a././/./a /b/c/.a./a
+/b/c/.a././/./. /b/c/.a.
+/b/c/.a././/.// /b/c/.a.
+/b/c/.a././//aa /b/c/.a./aa
+/b/c/.a././//a. /b/c/.a./a.
+/b/c/.a././//a/ /b/c/.a./a
+/b/c/.a././//.a /b/c/.a./.a
+/b/c/.a././//.. /b/c
+/b/c/.a././//./ /b/c/.a.
+/b/c/.a././///a /b/c/.a./a
+/b/c/.a././///. /b/c/.a.
+/b/c/.a././//// /b/c/.a.
+/b/c/.a.//aaaaa /b/c/.a./aaaaa
+/b/c/.a.//aaaa. /b/c/.a./aaaa.
+/b/c/.a.//aaaa/ /b/c/.a./aaaa
+/b/c/.a.//aaa.a /b/c/.a./aaa.a
+/b/c/.a.//aaa.. /b/c/.a./aaa..
+/b/c/.a.//aaa./ /b/c/.a./aaa.
+/b/c/.a.//aaa/a /b/c/.a./aaa/a
+/b/c/.a.//aaa/. /b/c/.a./aaa
+/b/c/.a.//aaa// /b/c/.a./aaa
+/b/c/.a.//aa.aa /b/c/.a./aa.aa
+/b/c/.a.//aa.a. /b/c/.a./aa.a.
+/b/c/.a.//aa.a/ /b/c/.a./aa.a
+/b/c/.a.//aa..a /b/c/.a./aa..a
+/b/c/.a.//aa... /b/c/.a./aa...
+/b/c/.a.//aa../ /b/c/.a./aa..
+/b/c/.a.//aa./a /b/c/.a./aa./a
+/b/c/.a.//aa./. /b/c/.a./aa.
+/b/c/.a.//aa.// /b/c/.a./aa.
+/b/c/.a.//aa/aa /b/c/.a./aa/aa
+/b/c/.a.//aa/a. /b/c/.a./aa/a.
+/b/c/.a.//aa/a/ /b/c/.a./aa/a
+/b/c/.a.//aa/.a /b/c/.a./aa/.a
+/b/c/.a.//aa/.. /b/c/.a.
+/b/c/.a.//aa/./ /b/c/.a./aa
+/b/c/.a.//aa//a /b/c/.a./aa/a
+/b/c/.a.//aa//. /b/c/.a./aa
+/b/c/.a.//aa/// /b/c/.a./aa
+/b/c/.a.//a.aaa /b/c/.a./a.aaa
+/b/c/.a.//a.aa. /b/c/.a./a.aa.
+/b/c/.a.//a.aa/ /b/c/.a./a.aa
+/b/c/.a.//a.a.a /b/c/.a./a.a.a
+/b/c/.a.//a.a.. /b/c/.a./a.a..
+/b/c/.a.//a.a./ /b/c/.a./a.a.
+/b/c/.a.//a.a/a /b/c/.a./a.a/a
+/b/c/.a.//a.a/. /b/c/.a./a.a
+/b/c/.a.//a.a// /b/c/.a./a.a
+/b/c/.a.//a..aa /b/c/.a./a..aa
+/b/c/.a.//a..a. /b/c/.a./a..a.
+/b/c/.a.//a..a/ /b/c/.a./a..a
+/b/c/.a.//a...a /b/c/.a./a...a
+/b/c/.a.//a.... /b/c/.a./a....
+/b/c/.a.//a.../ /b/c/.a./a...
+/b/c/.a.//a../a /b/c/.a./a../a
+/b/c/.a.//a../. /b/c/.a./a..
+/b/c/.a.//a..// /b/c/.a./a..
+/b/c/.a.//a./aa /b/c/.a./a./aa
+/b/c/.a.//a./a. /b/c/.a./a./a.
+/b/c/.a.//a./a/ /b/c/.a./a./a
+/b/c/.a.//a./.a /b/c/.a./a./.a
+/b/c/.a.//a./.. /b/c/.a.
+/b/c/.a.//a././ /b/c/.a./a.
+/b/c/.a.//a.//a /b/c/.a./a./a
+/b/c/.a.//a.//. /b/c/.a./a.
+/b/c/.a.//a./// /b/c/.a./a.
+/b/c/.a.//a/aaa /b/c/.a./a/aaa
+/b/c/.a.//a/aa. /b/c/.a./a/aa.
+/b/c/.a.//a/aa/ /b/c/.a./a/aa
+/b/c/.a.//a/a.a /b/c/.a./a/a.a
+/b/c/.a.//a/a.. /b/c/.a./a/a..
+/b/c/.a.//a/a./ /b/c/.a./a/a.
+/b/c/.a.//a/a/a /b/c/.a./a/a/a
+/b/c/.a.//a/a/. /b/c/.a./a/a
+/b/c/.a.//a/a// /b/c/.a./a/a
+/b/c/.a.//a/.aa /b/c/.a./a/.aa
+/b/c/.a.//a/.a. /b/c/.a./a/.a.
+/b/c/.a.//a/.a/ /b/c/.a./a/.a
+/b/c/.a.//a/..a /b/c/.a./a/..a
+/b/c/.a.//a/... /b/c/.a./a/...
+/b/c/.a.//a/../ /b/c/.a.
+/b/c/.a.//a/./a /b/c/.a./a/a
+/b/c/.a.//a/./. /b/c/.a./a
+/b/c/.a.//a/.// /b/c/.a./a
+/b/c/.a.//a//aa /b/c/.a./a/aa
+/b/c/.a.//a//a. /b/c/.a./a/a.
+/b/c/.a.//a//a/ /b/c/.a./a/a
+/b/c/.a.//a//.a /b/c/.a./a/.a
+/b/c/.a.//a//.. /b/c/.a.
+/b/c/.a.//a//./ /b/c/.a./a
+/b/c/.a.//a///a /b/c/.a./a/a
+/b/c/.a.//a///. /b/c/.a./a
+/b/c/.a.//a//// /b/c/.a./a
+/b/c/.a.//.aaaa /b/c/.a./.aaaa
+/b/c/.a.//.aaa. /b/c/.a./.aaa.
+/b/c/.a.//.aaa/ /b/c/.a./.aaa
+/b/c/.a.//.aa.a /b/c/.a./.aa.a
+/b/c/.a.//.aa.. /b/c/.a./.aa..
+/b/c/.a.//.aa./ /b/c/.a./.aa.
+/b/c/.a.//.aa/a /b/c/.a./.aa/a
+/b/c/.a.//.aa/. /b/c/.a./.aa
+/b/c/.a.//.aa// /b/c/.a./.aa
+/b/c/.a.//.a.aa /b/c/.a./.a.aa
+/b/c/.a.//.a.a. /b/c/.a./.a.a.
+/b/c/.a.//.a.a/ /b/c/.a./.a.a
+/b/c/.a.//.a..a /b/c/.a./.a..a
+/b/c/.a.//.a... /b/c/.a./.a...
+/b/c/.a.//.a../ /b/c/.a./.a..
+/b/c/.a.//.a./a /b/c/.a./.a./a
+/b/c/.a.//.a./. /b/c/.a./.a.
+/b/c/.a.//.a.// /b/c/.a./.a.
+/b/c/.a.//.a/aa /b/c/.a./.a/aa
+/b/c/.a.//.a/a. /b/c/.a./.a/a.
+/b/c/.a.//.a/a/ /b/c/.a./.a/a
+/b/c/.a.//.a/.a /b/c/.a./.a/.a
+/b/c/.a.//.a/.. /b/c/.a.
+/b/c/.a.//.a/./ /b/c/.a./.a
+/b/c/.a.//.a//a /b/c/.a./.a/a
+/b/c/.a.//.a//. /b/c/.a./.a
+/b/c/.a.//.a/// /b/c/.a./.a
+/b/c/.a.//..aaa /b/c/.a./..aaa
+/b/c/.a.//..aa. /b/c/.a./..aa.
+/b/c/.a.//..aa/ /b/c/.a./..aa
+/b/c/.a.//..a.a /b/c/.a./..a.a
+/b/c/.a.//..a.. /b/c/.a./..a..
+/b/c/.a.//..a./ /b/c/.a./..a.
+/b/c/.a.//..a/a /b/c/.a./..a/a
+/b/c/.a.//..a/. /b/c/.a./..a
+/b/c/.a.//..a// /b/c/.a./..a
+/b/c/.a.//...aa /b/c/.a./...aa
+/b/c/.a.//...a. /b/c/.a./...a.
+/b/c/.a.//...a/ /b/c/.a./...a
+/b/c/.a.//....a /b/c/.a./....a
+/b/c/.a.//..... /b/c/.a./.....
+/b/c/.a.//..../ /b/c/.a./....
+/b/c/.a.//.../a /b/c/.a./.../a
+/b/c/.a.//.../. /b/c/.a./...
+/b/c/.a.//...// /b/c/.a./...
+/b/c/.a.//../aa /b/c/aa
+/b/c/.a.//../a. /b/c/a.
+/b/c/.a.//../a/ /b/c/a
+/b/c/.a.//../.a /b/c/.a
+/b/c/.a.//../.. /b
+/b/c/.a.//.././ /b/c
+/b/c/.a.//..//a /b/c/a
+/b/c/.a.//..//. /b/c
+/b/c/.a.//../// /b/c
+/b/c/.a.//./aaa /b/c/.a./aaa
+/b/c/.a.//./aa. /b/c/.a./aa.
+/b/c/.a.//./aa/ /b/c/.a./aa
+/b/c/.a.//./a.a /b/c/.a./a.a
+/b/c/.a.//./a.. /b/c/.a./a..
+/b/c/.a.//./a./ /b/c/.a./a.
+/b/c/.a.//./a/a /b/c/.a./a/a
+/b/c/.a.//./a/. /b/c/.a./a
+/b/c/.a.//./a// /b/c/.a./a
+/b/c/.a.//./.aa /b/c/.a./.aa
+/b/c/.a.//./.a. /b/c/.a./.a.
+/b/c/.a.//./.a/ /b/c/.a./.a
+/b/c/.a.//./..a /b/c/.a./..a
+/b/c/.a.//./... /b/c/.a./...
+/b/c/.a.//./../ /b/c
+/b/c/.a.//././a /b/c/.a./a
+/b/c/.a.//././. /b/c/.a.
+/b/c/.a.//./.// /b/c/.a.
+/b/c/.a.//.//aa /b/c/.a./aa
+/b/c/.a.//.//a. /b/c/.a./a.
+/b/c/.a.//.//a/ /b/c/.a./a
+/b/c/.a.//.//.a /b/c/.a./.a
+/b/c/.a.//.//.. /b/c
+/b/c/.a.//.//./ /b/c/.a.
+/b/c/.a.//.///a /b/c/.a./a
+/b/c/.a.//.///. /b/c/.a.
+/b/c/.a.//.//// /b/c/.a.
+/b/c/.a.///aaaa /b/c/.a./aaaa
+/b/c/.a.///aaa. /b/c/.a./aaa.
+/b/c/.a.///aaa/ /b/c/.a./aaa
+/b/c/.a.///aa.a /b/c/.a./aa.a
+/b/c/.a.///aa.. /b/c/.a./aa..
+/b/c/.a.///aa./ /b/c/.a./aa.
+/b/c/.a.///aa/a /b/c/.a./aa/a
+/b/c/.a.///aa/. /b/c/.a./aa
+/b/c/.a.///aa// /b/c/.a./aa
+/b/c/.a.///a.aa /b/c/.a./a.aa
+/b/c/.a.///a.a. /b/c/.a./a.a.
+/b/c/.a.///a.a/ /b/c/.a./a.a
+/b/c/.a.///a..a /b/c/.a./a..a
+/b/c/.a.///a... /b/c/.a./a...
+/b/c/.a.///a../ /b/c/.a./a..
+/b/c/.a.///a./a /b/c/.a./a./a
+/b/c/.a.///a./. /b/c/.a./a.
+/b/c/.a.///a.// /b/c/.a./a.
+/b/c/.a.///a/aa /b/c/.a./a/aa
+/b/c/.a.///a/a. /b/c/.a./a/a.
+/b/c/.a.///a/a/ /b/c/.a./a/a
+/b/c/.a.///a/.a /b/c/.a./a/.a
+/b/c/.a.///a/.. /b/c/.a.
+/b/c/.a.///a/./ /b/c/.a./a
+/b/c/.a.///a//a /b/c/.a./a/a
+/b/c/.a.///a//. /b/c/.a./a
+/b/c/.a.///a/// /b/c/.a./a
+/b/c/.a.///.aaa /b/c/.a./.aaa
+/b/c/.a.///.aa. /b/c/.a./.aa.
+/b/c/.a.///.aa/ /b/c/.a./.aa
+/b/c/.a.///.a.a /b/c/.a./.a.a
+/b/c/.a.///.a.. /b/c/.a./.a..
+/b/c/.a.///.a./ /b/c/.a./.a.
+/b/c/.a.///.a/a /b/c/.a./.a/a
+/b/c/.a.///.a/. /b/c/.a./.a
+/b/c/.a.///.a// /b/c/.a./.a
+/b/c/.a.///..aa /b/c/.a./..aa
+/b/c/.a.///..a. /b/c/.a./..a.
+/b/c/.a.///..a/ /b/c/.a./..a
+/b/c/.a.///...a /b/c/.a./...a
+/b/c/.a.///.... /b/c/.a./....
+/b/c/.a.///.../ /b/c/.a./...
+/b/c/.a.///../a /b/c/a
+/b/c/.a.///../. /b/c
+/b/c/.a.///..// /b/c
+/b/c/.a.///./aa /b/c/.a./aa
+/b/c/.a.///./a. /b/c/.a./a.
+/b/c/.a.///./a/ /b/c/.a./a
+/b/c/.a.///./.a /b/c/.a./.a
+/b/c/.a.///./.. /b/c
+/b/c/.a.///././ /b/c/.a.
+/b/c/.a.///.//a /b/c/.a./a
+/b/c/.a.///.//. /b/c/.a.
+/b/c/.a.///./// /b/c/.a.
+/b/c/.a.////aaa /b/c/.a./aaa
+/b/c/.a.////aa. /b/c/.a./aa.
+/b/c/.a.////aa/ /b/c/.a./aa
+/b/c/.a.////a.a /b/c/.a./a.a
+/b/c/.a.////a.. /b/c/.a./a..
+/b/c/.a.////a./ /b/c/.a./a.
+/b/c/.a.////a/a /b/c/.a./a/a
+/b/c/.a.////a/. /b/c/.a./a
+/b/c/.a.////a// /b/c/.a./a
+/b/c/.a.////.aa /b/c/.a./.aa
+/b/c/.a.////.a. /b/c/.a./.a.
+/b/c/.a.////.a/ /b/c/.a./.a
+/b/c/.a.////..a /b/c/.a./..a
+/b/c/.a.////... /b/c/.a./...
+/b/c/.a.////../ /b/c
+/b/c/.a.////./a /b/c/.a./a
+/b/c/.a.////./. /b/c/.a.
+/b/c/.a.////.// /b/c/.a.
+/b/c/.a./////aa /b/c/.a./aa
+/b/c/.a./////a. /b/c/.a./a.
+/b/c/.a./////a/ /b/c/.a./a
+/b/c/.a./////.a /b/c/.a./.a
+/b/c/.a./////.. /b/c
+/b/c/.a./////./ /b/c/.a.
+/b/c/.a.//////a /b/c/.a./a
+/b/c/.a.//////. /b/c/.a.
+/b/c/.a./////// /b/c/.a.
+/b/c/.a/aaaaaaa /b/c/.a/aaaaaaa
+/b/c/.a/aaaaaa. /b/c/.a/aaaaaa.
+/b/c/.a/aaaaaa/ /b/c/.a/aaaaaa
+/b/c/.a/aaaaa.a /b/c/.a/aaaaa.a
+/b/c/.a/aaaaa.. /b/c/.a/aaaaa..
+/b/c/.a/aaaaa./ /b/c/.a/aaaaa.
+/b/c/.a/aaaaa/a /b/c/.a/aaaaa/a
+/b/c/.a/aaaaa/. /b/c/.a/aaaaa
+/b/c/.a/aaaaa// /b/c/.a/aaaaa
+/b/c/.a/aaaa.aa /b/c/.a/aaaa.aa
+/b/c/.a/aaaa.a. /b/c/.a/aaaa.a.
+/b/c/.a/aaaa.a/ /b/c/.a/aaaa.a
+/b/c/.a/aaaa..a /b/c/.a/aaaa..a
+/b/c/.a/aaaa... /b/c/.a/aaaa...
+/b/c/.a/aaaa../ /b/c/.a/aaaa..
+/b/c/.a/aaaa./a /b/c/.a/aaaa./a
+/b/c/.a/aaaa./. /b/c/.a/aaaa.
+/b/c/.a/aaaa.// /b/c/.a/aaaa.
+/b/c/.a/aaaa/aa /b/c/.a/aaaa/aa
+/b/c/.a/aaaa/a. /b/c/.a/aaaa/a.
+/b/c/.a/aaaa/a/ /b/c/.a/aaaa/a
+/b/c/.a/aaaa/.a /b/c/.a/aaaa/.a
+/b/c/.a/aaaa/.. /b/c/.a
+/b/c/.a/aaaa/./ /b/c/.a/aaaa
+/b/c/.a/aaaa//a /b/c/.a/aaaa/a
+/b/c/.a/aaaa//. /b/c/.a/aaaa
+/b/c/.a/aaaa/// /b/c/.a/aaaa
+/b/c/.a/aaa.aaa /b/c/.a/aaa.aaa
+/b/c/.a/aaa.aa. /b/c/.a/aaa.aa.
+/b/c/.a/aaa.aa/ /b/c/.a/aaa.aa
+/b/c/.a/aaa.a.a /b/c/.a/aaa.a.a
+/b/c/.a/aaa.a.. /b/c/.a/aaa.a..
+/b/c/.a/aaa.a./ /b/c/.a/aaa.a.
+/b/c/.a/aaa.a/a /b/c/.a/aaa.a/a
+/b/c/.a/aaa.a/. /b/c/.a/aaa.a
+/b/c/.a/aaa.a// /b/c/.a/aaa.a
+/b/c/.a/aaa..aa /b/c/.a/aaa..aa
+/b/c/.a/aaa..a. /b/c/.a/aaa..a.
+/b/c/.a/aaa..a/ /b/c/.a/aaa..a
+/b/c/.a/aaa...a /b/c/.a/aaa...a
+/b/c/.a/aaa.... /b/c/.a/aaa....
+/b/c/.a/aaa.../ /b/c/.a/aaa...
+/b/c/.a/aaa../a /b/c/.a/aaa../a
+/b/c/.a/aaa../. /b/c/.a/aaa..
+/b/c/.a/aaa..// /b/c/.a/aaa..
+/b/c/.a/aaa./aa /b/c/.a/aaa./aa
+/b/c/.a/aaa./a. /b/c/.a/aaa./a.
+/b/c/.a/aaa./a/ /b/c/.a/aaa./a
+/b/c/.a/aaa./.a /b/c/.a/aaa./.a
+/b/c/.a/aaa./.. /b/c/.a
+/b/c/.a/aaa././ /b/c/.a/aaa.
+/b/c/.a/aaa.//a /b/c/.a/aaa./a
+/b/c/.a/aaa.//. /b/c/.a/aaa.
+/b/c/.a/aaa./// /b/c/.a/aaa.
+/b/c/.a/aaa/aaa /b/c/.a/aaa/aaa
+/b/c/.a/aaa/aa. /b/c/.a/aaa/aa.
+/b/c/.a/aaa/aa/ /b/c/.a/aaa/aa
+/b/c/.a/aaa/a.a /b/c/.a/aaa/a.a
+/b/c/.a/aaa/a.. /b/c/.a/aaa/a..
+/b/c/.a/aaa/a./ /b/c/.a/aaa/a.
+/b/c/.a/aaa/a/a /b/c/.a/aaa/a/a
+/b/c/.a/aaa/a/. /b/c/.a/aaa/a
+/b/c/.a/aaa/a// /b/c/.a/aaa/a
+/b/c/.a/aaa/.aa /b/c/.a/aaa/.aa
+/b/c/.a/aaa/.a. /b/c/.a/aaa/.a.
+/b/c/.a/aaa/.a/ /b/c/.a/aaa/.a
+/b/c/.a/aaa/..a /b/c/.a/aaa/..a
+/b/c/.a/aaa/... /b/c/.a/aaa/...
+/b/c/.a/aaa/../ /b/c/.a
+/b/c/.a/aaa/./a /b/c/.a/aaa/a
+/b/c/.a/aaa/./. /b/c/.a/aaa
+/b/c/.a/aaa/.// /b/c/.a/aaa
+/b/c/.a/aaa//aa /b/c/.a/aaa/aa
+/b/c/.a/aaa//a. /b/c/.a/aaa/a.
+/b/c/.a/aaa//a/ /b/c/.a/aaa/a
+/b/c/.a/aaa//.a /b/c/.a/aaa/.a
+/b/c/.a/aaa//.. /b/c/.a
+/b/c/.a/aaa//./ /b/c/.a/aaa
+/b/c/.a/aaa///a /b/c/.a/aaa/a
+/b/c/.a/aaa///. /b/c/.a/aaa
+/b/c/.a/aaa//// /b/c/.a/aaa
+/b/c/.a/aa.aaaa /b/c/.a/aa.aaaa
+/b/c/.a/aa.aaa. /b/c/.a/aa.aaa.
+/b/c/.a/aa.aaa/ /b/c/.a/aa.aaa
+/b/c/.a/aa.aa.a /b/c/.a/aa.aa.a
+/b/c/.a/aa.aa.. /b/c/.a/aa.aa..
+/b/c/.a/aa.aa./ /b/c/.a/aa.aa.
+/b/c/.a/aa.aa/a /b/c/.a/aa.aa/a
+/b/c/.a/aa.aa/. /b/c/.a/aa.aa
+/b/c/.a/aa.aa// /b/c/.a/aa.aa
+/b/c/.a/aa.a.aa /b/c/.a/aa.a.aa
+/b/c/.a/aa.a.a. /b/c/.a/aa.a.a.
+/b/c/.a/aa.a.a/ /b/c/.a/aa.a.a
+/b/c/.a/aa.a..a /b/c/.a/aa.a..a
+/b/c/.a/aa.a... /b/c/.a/aa.a...
+/b/c/.a/aa.a../ /b/c/.a/aa.a..
+/b/c/.a/aa.a./a /b/c/.a/aa.a./a
+/b/c/.a/aa.a./. /b/c/.a/aa.a.
+/b/c/.a/aa.a.// /b/c/.a/aa.a.
+/b/c/.a/aa.a/aa /b/c/.a/aa.a/aa
+/b/c/.a/aa.a/a. /b/c/.a/aa.a/a.
+/b/c/.a/aa.a/a/ /b/c/.a/aa.a/a
+/b/c/.a/aa.a/.a /b/c/.a/aa.a/.a
+/b/c/.a/aa.a/.. /b/c/.a
+/b/c/.a/aa.a/./ /b/c/.a/aa.a
+/b/c/.a/aa.a//a /b/c/.a/aa.a/a
+/b/c/.a/aa.a//. /b/c/.a/aa.a
+/b/c/.a/aa.a/// /b/c/.a/aa.a
+/b/c/.a/aa..aaa /b/c/.a/aa..aaa
+/b/c/.a/aa..aa. /b/c/.a/aa..aa.
+/b/c/.a/aa..aa/ /b/c/.a/aa..aa
+/b/c/.a/aa..a.a /b/c/.a/aa..a.a
+/b/c/.a/aa..a.. /b/c/.a/aa..a..
+/b/c/.a/aa..a./ /b/c/.a/aa..a.
+/b/c/.a/aa..a/a /b/c/.a/aa..a/a
+/b/c/.a/aa..a/. /b/c/.a/aa..a
+/b/c/.a/aa..a// /b/c/.a/aa..a
+/b/c/.a/aa...aa /b/c/.a/aa...aa
+/b/c/.a/aa...a. /b/c/.a/aa...a.
+/b/c/.a/aa...a/ /b/c/.a/aa...a
+/b/c/.a/aa....a /b/c/.a/aa....a
+/b/c/.a/aa..... /b/c/.a/aa.....
+/b/c/.a/aa..../ /b/c/.a/aa....
+/b/c/.a/aa.../a /b/c/.a/aa.../a
+/b/c/.a/aa.../. /b/c/.a/aa...
+/b/c/.a/aa...// /b/c/.a/aa...
+/b/c/.a/aa../aa /b/c/.a/aa../aa
+/b/c/.a/aa../a. /b/c/.a/aa../a.
+/b/c/.a/aa../a/ /b/c/.a/aa../a
+/b/c/.a/aa../.a /b/c/.a/aa../.a
+/b/c/.a/aa../.. /b/c/.a
+/b/c/.a/aa.././ /b/c/.a/aa..
+/b/c/.a/aa..//a /b/c/.a/aa../a
+/b/c/.a/aa..//. /b/c/.a/aa..
+/b/c/.a/aa../// /b/c/.a/aa..
+/b/c/.a/aa./aaa /b/c/.a/aa./aaa
+/b/c/.a/aa./aa. /b/c/.a/aa./aa.
+/b/c/.a/aa./aa/ /b/c/.a/aa./aa
+/b/c/.a/aa./a.a /b/c/.a/aa./a.a
+/b/c/.a/aa./a.. /b/c/.a/aa./a..
+/b/c/.a/aa./a./ /b/c/.a/aa./a.
+/b/c/.a/aa./a/a /b/c/.a/aa./a/a
+/b/c/.a/aa./a/. /b/c/.a/aa./a
+/b/c/.a/aa./a// /b/c/.a/aa./a
+/b/c/.a/aa./.aa /b/c/.a/aa./.aa
+/b/c/.a/aa./.a. /b/c/.a/aa./.a.
+/b/c/.a/aa./.a/ /b/c/.a/aa./.a
+/b/c/.a/aa./..a /b/c/.a/aa./..a
+/b/c/.a/aa./... /b/c/.a/aa./...
+/b/c/.a/aa./../ /b/c/.a
+/b/c/.a/aa././a /b/c/.a/aa./a
+/b/c/.a/aa././. /b/c/.a/aa.
+/b/c/.a/aa./.// /b/c/.a/aa.
+/b/c/.a/aa.//aa /b/c/.a/aa./aa
+/b/c/.a/aa.//a. /b/c/.a/aa./a.
+/b/c/.a/aa.//a/ /b/c/.a/aa./a
+/b/c/.a/aa.//.a /b/c/.a/aa./.a
+/b/c/.a/aa.//.. /b/c/.a
+/b/c/.a/aa.//./ /b/c/.a/aa.
+/b/c/.a/aa.///a /b/c/.a/aa./a
+/b/c/.a/aa.///. /b/c/.a/aa.
+/b/c/.a/aa.//// /b/c/.a/aa.
+/b/c/.a/aa/aaaa /b/c/.a/aa/aaaa
+/b/c/.a/aa/aaa. /b/c/.a/aa/aaa.
+/b/c/.a/aa/aaa/ /b/c/.a/aa/aaa
+/b/c/.a/aa/aa.a /b/c/.a/aa/aa.a
+/b/c/.a/aa/aa.. /b/c/.a/aa/aa..
+/b/c/.a/aa/aa./ /b/c/.a/aa/aa.
+/b/c/.a/aa/aa/a /b/c/.a/aa/aa/a
+/b/c/.a/aa/aa/. /b/c/.a/aa/aa
+/b/c/.a/aa/aa// /b/c/.a/aa/aa
+/b/c/.a/aa/a.aa /b/c/.a/aa/a.aa
+/b/c/.a/aa/a.a. /b/c/.a/aa/a.a.
+/b/c/.a/aa/a.a/ /b/c/.a/aa/a.a
+/b/c/.a/aa/a..a /b/c/.a/aa/a..a
+/b/c/.a/aa/a... /b/c/.a/aa/a...
+/b/c/.a/aa/a../ /b/c/.a/aa/a..
+/b/c/.a/aa/a./a /b/c/.a/aa/a./a
+/b/c/.a/aa/a./. /b/c/.a/aa/a.
+/b/c/.a/aa/a.// /b/c/.a/aa/a.
+/b/c/.a/aa/a/aa /b/c/.a/aa/a/aa
+/b/c/.a/aa/a/a. /b/c/.a/aa/a/a.
+/b/c/.a/aa/a/a/ /b/c/.a/aa/a/a
+/b/c/.a/aa/a/.a /b/c/.a/aa/a/.a
+/b/c/.a/aa/a/.. /b/c/.a/aa
+/b/c/.a/aa/a/./ /b/c/.a/aa/a
+/b/c/.a/aa/a//a /b/c/.a/aa/a/a
+/b/c/.a/aa/a//. /b/c/.a/aa/a
+/b/c/.a/aa/a/// /b/c/.a/aa/a
+/b/c/.a/aa/.aaa /b/c/.a/aa/.aaa
+/b/c/.a/aa/.aa. /b/c/.a/aa/.aa.
+/b/c/.a/aa/.aa/ /b/c/.a/aa/.aa
+/b/c/.a/aa/.a.a /b/c/.a/aa/.a.a
+/b/c/.a/aa/.a.. /b/c/.a/aa/.a..
+/b/c/.a/aa/.a./ /b/c/.a/aa/.a.
+/b/c/.a/aa/.a/a /b/c/.a/aa/.a/a
+/b/c/.a/aa/.a/. /b/c/.a/aa/.a
+/b/c/.a/aa/.a// /b/c/.a/aa/.a
+/b/c/.a/aa/..aa /b/c/.a/aa/..aa
+/b/c/.a/aa/..a. /b/c/.a/aa/..a.
+/b/c/.a/aa/..a/ /b/c/.a/aa/..a
+/b/c/.a/aa/...a /b/c/.a/aa/...a
+/b/c/.a/aa/.... /b/c/.a/aa/....
+/b/c/.a/aa/.../ /b/c/.a/aa/...
+/b/c/.a/aa/../a /b/c/.a/a
+/b/c/.a/aa/../. /b/c/.a
+/b/c/.a/aa/..// /b/c/.a
+/b/c/.a/aa/./aa /b/c/.a/aa/aa
+/b/c/.a/aa/./a. /b/c/.a/aa/a.
+/b/c/.a/aa/./a/ /b/c/.a/aa/a
+/b/c/.a/aa/./.a /b/c/.a/aa/.a
+/b/c/.a/aa/./.. /b/c/.a
+/b/c/.a/aa/././ /b/c/.a/aa
+/b/c/.a/aa/.//a /b/c/.a/aa/a
+/b/c/.a/aa/.//. /b/c/.a/aa
+/b/c/.a/aa/./// /b/c/.a/aa
+/b/c/.a/aa//aaa /b/c/.a/aa/aaa
+/b/c/.a/aa//aa. /b/c/.a/aa/aa.
+/b/c/.a/aa//aa/ /b/c/.a/aa/aa
+/b/c/.a/aa//a.a /b/c/.a/aa/a.a
+/b/c/.a/aa//a.. /b/c/.a/aa/a..
+/b/c/.a/aa//a./ /b/c/.a/aa/a.
+/b/c/.a/aa//a/a /b/c/.a/aa/a/a
+/b/c/.a/aa//a/. /b/c/.a/aa/a
+/b/c/.a/aa//a// /b/c/.a/aa/a
+/b/c/.a/aa//.aa /b/c/.a/aa/.aa
+/b/c/.a/aa//.a. /b/c/.a/aa/.a.
+/b/c/.a/aa//.a/ /b/c/.a/aa/.a
+/b/c/.a/aa//..a /b/c/.a/aa/..a
+/b/c/.a/aa//... /b/c/.a/aa/...
+/b/c/.a/aa//../ /b/c/.a
+/b/c/.a/aa//./a /b/c/.a/aa/a
+/b/c/.a/aa//./. /b/c/.a/aa
+/b/c/.a/aa//.// /b/c/.a/aa
+/b/c/.a/aa///aa /b/c/.a/aa/aa
+/b/c/.a/aa///a. /b/c/.a/aa/a.
+/b/c/.a/aa///a/ /b/c/.a/aa/a
+/b/c/.a/aa///.a /b/c/.a/aa/.a
+/b/c/.a/aa///.. /b/c/.a
+/b/c/.a/aa///./ /b/c/.a/aa
+/b/c/.a/aa////a /b/c/.a/aa/a
+/b/c/.a/aa////. /b/c/.a/aa
+/b/c/.a/aa///// /b/c/.a/aa
+/b/c/.a/a.aaaaa /b/c/.a/a.aaaaa
+/b/c/.a/a.aaaa. /b/c/.a/a.aaaa.
+/b/c/.a/a.aaaa/ /b/c/.a/a.aaaa
+/b/c/.a/a.aaa.a /b/c/.a/a.aaa.a
+/b/c/.a/a.aaa.. /b/c/.a/a.aaa..
+/b/c/.a/a.aaa./ /b/c/.a/a.aaa.
+/b/c/.a/a.aaa/a /b/c/.a/a.aaa/a
+/b/c/.a/a.aaa/. /b/c/.a/a.aaa
+/b/c/.a/a.aaa// /b/c/.a/a.aaa
+/b/c/.a/a.aa.aa /b/c/.a/a.aa.aa
+/b/c/.a/a.aa.a. /b/c/.a/a.aa.a.
+/b/c/.a/a.aa.a/ /b/c/.a/a.aa.a
+/b/c/.a/a.aa..a /b/c/.a/a.aa..a
+/b/c/.a/a.aa... /b/c/.a/a.aa...
+/b/c/.a/a.aa../ /b/c/.a/a.aa..
+/b/c/.a/a.aa./a /b/c/.a/a.aa./a
+/b/c/.a/a.aa./. /b/c/.a/a.aa.
+/b/c/.a/a.aa.// /b/c/.a/a.aa.
+/b/c/.a/a.aa/aa /b/c/.a/a.aa/aa
+/b/c/.a/a.aa/a. /b/c/.a/a.aa/a.
+/b/c/.a/a.aa/a/ /b/c/.a/a.aa/a
+/b/c/.a/a.aa/.a /b/c/.a/a.aa/.a
+/b/c/.a/a.aa/.. /b/c/.a
+/b/c/.a/a.aa/./ /b/c/.a/a.aa
+/b/c/.a/a.aa//a /b/c/.a/a.aa/a
+/b/c/.a/a.aa//. /b/c/.a/a.aa
+/b/c/.a/a.aa/// /b/c/.a/a.aa
+/b/c/.a/a.a.aaa /b/c/.a/a.a.aaa
+/b/c/.a/a.a.aa. /b/c/.a/a.a.aa.
+/b/c/.a/a.a.aa/ /b/c/.a/a.a.aa
+/b/c/.a/a.a.a.a /b/c/.a/a.a.a.a
+/b/c/.a/a.a.a.. /b/c/.a/a.a.a..
+/b/c/.a/a.a.a./ /b/c/.a/a.a.a.
+/b/c/.a/a.a.a/a /b/c/.a/a.a.a/a
+/b/c/.a/a.a.a/. /b/c/.a/a.a.a
+/b/c/.a/a.a.a// /b/c/.a/a.a.a
+/b/c/.a/a.a..aa /b/c/.a/a.a..aa
+/b/c/.a/a.a..a. /b/c/.a/a.a..a.
+/b/c/.a/a.a..a/ /b/c/.a/a.a..a
+/b/c/.a/a.a...a /b/c/.a/a.a...a
+/b/c/.a/a.a.... /b/c/.a/a.a....
+/b/c/.a/a.a.../ /b/c/.a/a.a...
+/b/c/.a/a.a../a /b/c/.a/a.a../a
+/b/c/.a/a.a../. /b/c/.a/a.a..
+/b/c/.a/a.a..// /b/c/.a/a.a..
+/b/c/.a/a.a./aa /b/c/.a/a.a./aa
+/b/c/.a/a.a./a. /b/c/.a/a.a./a.
+/b/c/.a/a.a./a/ /b/c/.a/a.a./a
+/b/c/.a/a.a./.a /b/c/.a/a.a./.a
+/b/c/.a/a.a./.. /b/c/.a
+/b/c/.a/a.a././ /b/c/.a/a.a.
+/b/c/.a/a.a.//a /b/c/.a/a.a./a
+/b/c/.a/a.a.//. /b/c/.a/a.a.
+/b/c/.a/a.a./// /b/c/.a/a.a.
+/b/c/.a/a.a/aaa /b/c/.a/a.a/aaa
+/b/c/.a/a.a/aa. /b/c/.a/a.a/aa.
+/b/c/.a/a.a/aa/ /b/c/.a/a.a/aa
+/b/c/.a/a.a/a.a /b/c/.a/a.a/a.a
+/b/c/.a/a.a/a.. /b/c/.a/a.a/a..
+/b/c/.a/a.a/a./ /b/c/.a/a.a/a.
+/b/c/.a/a.a/a/a /b/c/.a/a.a/a/a
+/b/c/.a/a.a/a/. /b/c/.a/a.a/a
+/b/c/.a/a.a/a// /b/c/.a/a.a/a
+/b/c/.a/a.a/.aa /b/c/.a/a.a/.aa
+/b/c/.a/a.a/.a. /b/c/.a/a.a/.a.
+/b/c/.a/a.a/.a/ /b/c/.a/a.a/.a
+/b/c/.a/a.a/..a /b/c/.a/a.a/..a
+/b/c/.a/a.a/... /b/c/.a/a.a/...
+/b/c/.a/a.a/../ /b/c/.a
+/b/c/.a/a.a/./a /b/c/.a/a.a/a
+/b/c/.a/a.a/./. /b/c/.a/a.a
+/b/c/.a/a.a/.// /b/c/.a/a.a
+/b/c/.a/a.a//aa /b/c/.a/a.a/aa
+/b/c/.a/a.a//a. /b/c/.a/a.a/a.
+/b/c/.a/a.a//a/ /b/c/.a/a.a/a
+/b/c/.a/a.a//.a /b/c/.a/a.a/.a
+/b/c/.a/a.a//.. /b/c/.a
+/b/c/.a/a.a//./ /b/c/.a/a.a
+/b/c/.a/a.a///a /b/c/.a/a.a/a
+/b/c/.a/a.a///. /b/c/.a/a.a
+/b/c/.a/a.a//// /b/c/.a/a.a
+/b/c/.a/a..aaaa /b/c/.a/a..aaaa
+/b/c/.a/a..aaa. /b/c/.a/a..aaa.
+/b/c/.a/a..aaa/ /b/c/.a/a..aaa
+/b/c/.a/a..aa.a /b/c/.a/a..aa.a
+/b/c/.a/a..aa.. /b/c/.a/a..aa..
+/b/c/.a/a..aa./ /b/c/.a/a..aa.
+/b/c/.a/a..aa/a /b/c/.a/a..aa/a
+/b/c/.a/a..aa/. /b/c/.a/a..aa
+/b/c/.a/a..aa// /b/c/.a/a..aa
+/b/c/.a/a..a.aa /b/c/.a/a..a.aa
+/b/c/.a/a..a.a. /b/c/.a/a..a.a.
+/b/c/.a/a..a.a/ /b/c/.a/a..a.a
+/b/c/.a/a..a..a /b/c/.a/a..a..a
+/b/c/.a/a..a... /b/c/.a/a..a...
+/b/c/.a/a..a../ /b/c/.a/a..a..
+/b/c/.a/a..a./a /b/c/.a/a..a./a
+/b/c/.a/a..a./. /b/c/.a/a..a.
+/b/c/.a/a..a.// /b/c/.a/a..a.
+/b/c/.a/a..a/aa /b/c/.a/a..a/aa
+/b/c/.a/a..a/a. /b/c/.a/a..a/a.
+/b/c/.a/a..a/a/ /b/c/.a/a..a/a
+/b/c/.a/a..a/.a /b/c/.a/a..a/.a
+/b/c/.a/a..a/.. /b/c/.a
+/b/c/.a/a..a/./ /b/c/.a/a..a
+/b/c/.a/a..a//a /b/c/.a/a..a/a
+/b/c/.a/a..a//. /b/c/.a/a..a
+/b/c/.a/a..a/// /b/c/.a/a..a
+/b/c/.a/a...aaa /b/c/.a/a...aaa
+/b/c/.a/a...aa. /b/c/.a/a...aa.
+/b/c/.a/a...aa/ /b/c/.a/a...aa
+/b/c/.a/a...a.a /b/c/.a/a...a.a
+/b/c/.a/a...a.. /b/c/.a/a...a..
+/b/c/.a/a...a./ /b/c/.a/a...a.
+/b/c/.a/a...a/a /b/c/.a/a...a/a
+/b/c/.a/a...a/. /b/c/.a/a...a
+/b/c/.a/a...a// /b/c/.a/a...a
+/b/c/.a/a....aa /b/c/.a/a....aa
+/b/c/.a/a....a. /b/c/.a/a....a.
+/b/c/.a/a....a/ /b/c/.a/a....a
+/b/c/.a/a.....a /b/c/.a/a.....a
+/b/c/.a/a...... /b/c/.a/a......
+/b/c/.a/a...../ /b/c/.a/a.....
+/b/c/.a/a..../a /b/c/.a/a..../a
+/b/c/.a/a..../. /b/c/.a/a....
+/b/c/.a/a....// /b/c/.a/a....
+/b/c/.a/a.../aa /b/c/.a/a.../aa
+/b/c/.a/a.../a. /b/c/.a/a.../a.
+/b/c/.a/a.../a/ /b/c/.a/a.../a
+/b/c/.a/a.../.a /b/c/.a/a.../.a
+/b/c/.a/a.../.. /b/c/.a
+/b/c/.a/a..././ /b/c/.a/a...
+/b/c/.a/a...//a /b/c/.a/a.../a
+/b/c/.a/a...//. /b/c/.a/a...
+/b/c/.a/a.../// /b/c/.a/a...
+/b/c/.a/a../aaa /b/c/.a/a../aaa
+/b/c/.a/a../aa. /b/c/.a/a../aa.
+/b/c/.a/a../aa/ /b/c/.a/a../aa
+/b/c/.a/a../a.a /b/c/.a/a../a.a
+/b/c/.a/a../a.. /b/c/.a/a../a..
+/b/c/.a/a../a./ /b/c/.a/a../a.
+/b/c/.a/a../a/a /b/c/.a/a../a/a
+/b/c/.a/a../a/. /b/c/.a/a../a
+/b/c/.a/a../a// /b/c/.a/a../a
+/b/c/.a/a../.aa /b/c/.a/a../.aa
+/b/c/.a/a../.a. /b/c/.a/a../.a.
+/b/c/.a/a../.a/ /b/c/.a/a../.a
+/b/c/.a/a../..a /b/c/.a/a../..a
+/b/c/.a/a../... /b/c/.a/a../...
+/b/c/.a/a../../ /b/c/.a
+/b/c/.a/a.././a /b/c/.a/a../a
+/b/c/.a/a.././. /b/c/.a/a..
+/b/c/.a/a../.// /b/c/.a/a..
+/b/c/.a/a..//aa /b/c/.a/a../aa
+/b/c/.a/a..//a. /b/c/.a/a../a.
+/b/c/.a/a..//a/ /b/c/.a/a../a
+/b/c/.a/a..//.a /b/c/.a/a../.a
+/b/c/.a/a..//.. /b/c/.a
+/b/c/.a/a..//./ /b/c/.a/a..
+/b/c/.a/a..///a /b/c/.a/a../a
+/b/c/.a/a..///. /b/c/.a/a..
+/b/c/.a/a..//// /b/c/.a/a..
+/b/c/.a/a./aaaa /b/c/.a/a./aaaa
+/b/c/.a/a./aaa. /b/c/.a/a./aaa.
+/b/c/.a/a./aaa/ /b/c/.a/a./aaa
+/b/c/.a/a./aa.a /b/c/.a/a./aa.a
+/b/c/.a/a./aa.. /b/c/.a/a./aa..
+/b/c/.a/a./aa./ /b/c/.a/a./aa.
+/b/c/.a/a./aa/a /b/c/.a/a./aa/a
+/b/c/.a/a./aa/. /b/c/.a/a./aa
+/b/c/.a/a./aa// /b/c/.a/a./aa
+/b/c/.a/a./a.aa /b/c/.a/a./a.aa
+/b/c/.a/a./a.a. /b/c/.a/a./a.a.
+/b/c/.a/a./a.a/ /b/c/.a/a./a.a
+/b/c/.a/a./a..a /b/c/.a/a./a..a
+/b/c/.a/a./a... /b/c/.a/a./a...
+/b/c/.a/a./a../ /b/c/.a/a./a..
+/b/c/.a/a./a./a /b/c/.a/a./a./a
+/b/c/.a/a./a./. /b/c/.a/a./a.
+/b/c/.a/a./a.// /b/c/.a/a./a.
+/b/c/.a/a./a/aa /b/c/.a/a./a/aa
+/b/c/.a/a./a/a. /b/c/.a/a./a/a.
+/b/c/.a/a./a/a/ /b/c/.a/a./a/a
+/b/c/.a/a./a/.a /b/c/.a/a./a/.a
+/b/c/.a/a./a/.. /b/c/.a/a.
+/b/c/.a/a./a/./ /b/c/.a/a./a
+/b/c/.a/a./a//a /b/c/.a/a./a/a
+/b/c/.a/a./a//. /b/c/.a/a./a
+/b/c/.a/a./a/// /b/c/.a/a./a
+/b/c/.a/a./.aaa /b/c/.a/a./.aaa
+/b/c/.a/a./.aa. /b/c/.a/a./.aa.
+/b/c/.a/a./.aa/ /b/c/.a/a./.aa
+/b/c/.a/a./.a.a /b/c/.a/a./.a.a
+/b/c/.a/a./.a.. /b/c/.a/a./.a..
+/b/c/.a/a./.a./ /b/c/.a/a./.a.
+/b/c/.a/a./.a/a /b/c/.a/a./.a/a
+/b/c/.a/a./.a/. /b/c/.a/a./.a
+/b/c/.a/a./.a// /b/c/.a/a./.a
+/b/c/.a/a./..aa /b/c/.a/a./..aa
+/b/c/.a/a./..a. /b/c/.a/a./..a.
+/b/c/.a/a./..a/ /b/c/.a/a./..a
+/b/c/.a/a./...a /b/c/.a/a./...a
+/b/c/.a/a./.... /b/c/.a/a./....
+/b/c/.a/a./.../ /b/c/.a/a./...
+/b/c/.a/a./../a /b/c/.a/a
+/b/c/.a/a./../. /b/c/.a
+/b/c/.a/a./..// /b/c/.a
+/b/c/.a/a././aa /b/c/.a/a./aa
+/b/c/.a/a././a. /b/c/.a/a./a.
+/b/c/.a/a././a/ /b/c/.a/a./a
+/b/c/.a/a././.a /b/c/.a/a./.a
+/b/c/.a/a././.. /b/c/.a
+/b/c/.a/a./././ /b/c/.a/a.
+/b/c/.a/a././/a /b/c/.a/a./a
+/b/c/.a/a././/. /b/c/.a/a.
+/b/c/.a/a././// /b/c/.a/a.
+/b/c/.a/a.//aaa /b/c/.a/a./aaa
+/b/c/.a/a.//aa. /b/c/.a/a./aa.
+/b/c/.a/a.//aa/ /b/c/.a/a./aa
+/b/c/.a/a.//a.a /b/c/.a/a./a.a
+/b/c/.a/a.//a.. /b/c/.a/a./a..
+/b/c/.a/a.//a./ /b/c/.a/a./a.
+/b/c/.a/a.//a/a /b/c/.a/a./a/a
+/b/c/.a/a.//a/. /b/c/.a/a./a
+/b/c/.a/a.//a// /b/c/.a/a./a
+/b/c/.a/a.//.aa /b/c/.a/a./.aa
+/b/c/.a/a.//.a. /b/c/.a/a./.a.
+/b/c/.a/a.//.a/ /b/c/.a/a./.a
+/b/c/.a/a.//..a /b/c/.a/a./..a
+/b/c/.a/a.//... /b/c/.a/a./...
+/b/c/.a/a.//../ /b/c/.a
+/b/c/.a/a.//./a /b/c/.a/a./a
+/b/c/.a/a.//./. /b/c/.a/a.
+/b/c/.a/a.//.// /b/c/.a/a.
+/b/c/.a/a.///aa /b/c/.a/a./aa
+/b/c/.a/a.///a. /b/c/.a/a./a.
+/b/c/.a/a.///a/ /b/c/.a/a./a
+/b/c/.a/a.///.a /b/c/.a/a./.a
+/b/c/.a/a.///.. /b/c/.a
+/b/c/.a/a.///./ /b/c/.a/a.
+/b/c/.a/a.////a /b/c/.a/a./a
+/b/c/.a/a.////. /b/c/.a/a.
+/b/c/.a/a.///// /b/c/.a/a.
+/b/c/.a/a/aaaaa /b/c/.a/a/aaaaa
+/b/c/.a/a/aaaa. /b/c/.a/a/aaaa.
+/b/c/.a/a/aaaa/ /b/c/.a/a/aaaa
+/b/c/.a/a/aaa.a /b/c/.a/a/aaa.a
+/b/c/.a/a/aaa.. /b/c/.a/a/aaa..
+/b/c/.a/a/aaa./ /b/c/.a/a/aaa.
+/b/c/.a/a/aaa/a /b/c/.a/a/aaa/a
+/b/c/.a/a/aaa/. /b/c/.a/a/aaa
+/b/c/.a/a/aaa// /b/c/.a/a/aaa
+/b/c/.a/a/aa.aa /b/c/.a/a/aa.aa
+/b/c/.a/a/aa.a. /b/c/.a/a/aa.a.
+/b/c/.a/a/aa.a/ /b/c/.a/a/aa.a
+/b/c/.a/a/aa..a /b/c/.a/a/aa..a
+/b/c/.a/a/aa... /b/c/.a/a/aa...
+/b/c/.a/a/aa../ /b/c/.a/a/aa..
+/b/c/.a/a/aa./a /b/c/.a/a/aa./a
+/b/c/.a/a/aa./. /b/c/.a/a/aa.
+/b/c/.a/a/aa.// /b/c/.a/a/aa.
+/b/c/.a/a/aa/aa /b/c/.a/a/aa/aa
+/b/c/.a/a/aa/a. /b/c/.a/a/aa/a.
+/b/c/.a/a/aa/a/ /b/c/.a/a/aa/a
+/b/c/.a/a/aa/.a /b/c/.a/a/aa/.a
+/b/c/.a/a/aa/.. /b/c/.a/a
+/b/c/.a/a/aa/./ /b/c/.a/a/aa
+/b/c/.a/a/aa//a /b/c/.a/a/aa/a
+/b/c/.a/a/aa//. /b/c/.a/a/aa
+/b/c/.a/a/aa/// /b/c/.a/a/aa
+/b/c/.a/a/a.aaa /b/c/.a/a/a.aaa
+/b/c/.a/a/a.aa. /b/c/.a/a/a.aa.
+/b/c/.a/a/a.aa/ /b/c/.a/a/a.aa
+/b/c/.a/a/a.a.a /b/c/.a/a/a.a.a
+/b/c/.a/a/a.a.. /b/c/.a/a/a.a..
+/b/c/.a/a/a.a./ /b/c/.a/a/a.a.
+/b/c/.a/a/a.a/a /b/c/.a/a/a.a/a
+/b/c/.a/a/a.a/. /b/c/.a/a/a.a
+/b/c/.a/a/a.a// /b/c/.a/a/a.a
+/b/c/.a/a/a..aa /b/c/.a/a/a..aa
+/b/c/.a/a/a..a. /b/c/.a/a/a..a.
+/b/c/.a/a/a..a/ /b/c/.a/a/a..a
+/b/c/.a/a/a...a /b/c/.a/a/a...a
+/b/c/.a/a/a.... /b/c/.a/a/a....
+/b/c/.a/a/a.../ /b/c/.a/a/a...
+/b/c/.a/a/a../a /b/c/.a/a/a../a
+/b/c/.a/a/a../. /b/c/.a/a/a..
+/b/c/.a/a/a..// /b/c/.a/a/a..
+/b/c/.a/a/a./aa /b/c/.a/a/a./aa
+/b/c/.a/a/a./a. /b/c/.a/a/a./a.
+/b/c/.a/a/a./a/ /b/c/.a/a/a./a
+/b/c/.a/a/a./.a /b/c/.a/a/a./.a
+/b/c/.a/a/a./.. /b/c/.a/a
+/b/c/.a/a/a././ /b/c/.a/a/a.
+/b/c/.a/a/a.//a /b/c/.a/a/a./a
+/b/c/.a/a/a.//. /b/c/.a/a/a.
+/b/c/.a/a/a./// /b/c/.a/a/a.
+/b/c/.a/a/a/aaa /b/c/.a/a/a/aaa
+/b/c/.a/a/a/aa. /b/c/.a/a/a/aa.
+/b/c/.a/a/a/aa/ /b/c/.a/a/a/aa
+/b/c/.a/a/a/a.a /b/c/.a/a/a/a.a
+/b/c/.a/a/a/a.. /b/c/.a/a/a/a..
+/b/c/.a/a/a/a./ /b/c/.a/a/a/a.
+/b/c/.a/a/a/a/a /b/c/.a/a/a/a/a
+/b/c/.a/a/a/a/. /b/c/.a/a/a/a
+/b/c/.a/a/a/a// /b/c/.a/a/a/a
+/b/c/.a/a/a/.aa /b/c/.a/a/a/.aa
+/b/c/.a/a/a/.a. /b/c/.a/a/a/.a.
+/b/c/.a/a/a/.a/ /b/c/.a/a/a/.a
+/b/c/.a/a/a/..a /b/c/.a/a/a/..a
+/b/c/.a/a/a/... /b/c/.a/a/a/...
+/b/c/.a/a/a/../ /b/c/.a/a
+/b/c/.a/a/a/./a /b/c/.a/a/a/a
+/b/c/.a/a/a/./. /b/c/.a/a/a
+/b/c/.a/a/a/.// /b/c/.a/a/a
+/b/c/.a/a/a//aa /b/c/.a/a/a/aa
+/b/c/.a/a/a//a. /b/c/.a/a/a/a.
+/b/c/.a/a/a//a/ /b/c/.a/a/a/a
+/b/c/.a/a/a//.a /b/c/.a/a/a/.a
+/b/c/.a/a/a//.. /b/c/.a/a
+/b/c/.a/a/a//./ /b/c/.a/a/a
+/b/c/.a/a/a///a /b/c/.a/a/a/a
+/b/c/.a/a/a///. /b/c/.a/a/a
+/b/c/.a/a/a//// /b/c/.a/a/a
+/b/c/.a/a/.aaaa /b/c/.a/a/.aaaa
+/b/c/.a/a/.aaa. /b/c/.a/a/.aaa.
+/b/c/.a/a/.aaa/ /b/c/.a/a/.aaa
+/b/c/.a/a/.aa.a /b/c/.a/a/.aa.a
+/b/c/.a/a/.aa.. /b/c/.a/a/.aa..
+/b/c/.a/a/.aa./ /b/c/.a/a/.aa.
+/b/c/.a/a/.aa/a /b/c/.a/a/.aa/a
+/b/c/.a/a/.aa/. /b/c/.a/a/.aa
+/b/c/.a/a/.aa// /b/c/.a/a/.aa
+/b/c/.a/a/.a.aa /b/c/.a/a/.a.aa
+/b/c/.a/a/.a.a. /b/c/.a/a/.a.a.
+/b/c/.a/a/.a.a/ /b/c/.a/a/.a.a
+/b/c/.a/a/.a..a /b/c/.a/a/.a..a
+/b/c/.a/a/.a... /b/c/.a/a/.a...
+/b/c/.a/a/.a../ /b/c/.a/a/.a..
+/b/c/.a/a/.a./a /b/c/.a/a/.a./a
+/b/c/.a/a/.a./. /b/c/.a/a/.a.
+/b/c/.a/a/.a.// /b/c/.a/a/.a.
+/b/c/.a/a/.a/aa /b/c/.a/a/.a/aa
+/b/c/.a/a/.a/a. /b/c/.a/a/.a/a.
+/b/c/.a/a/.a/a/ /b/c/.a/a/.a/a
+/b/c/.a/a/.a/.a /b/c/.a/a/.a/.a
+/b/c/.a/a/.a/.. /b/c/.a/a
+/b/c/.a/a/.a/./ /b/c/.a/a/.a
+/b/c/.a/a/.a//a /b/c/.a/a/.a/a
+/b/c/.a/a/.a//. /b/c/.a/a/.a
+/b/c/.a/a/.a/// /b/c/.a/a/.a
+/b/c/.a/a/..aaa /b/c/.a/a/..aaa
+/b/c/.a/a/..aa. /b/c/.a/a/..aa.
+/b/c/.a/a/..aa/ /b/c/.a/a/..aa
+/b/c/.a/a/..a.a /b/c/.a/a/..a.a
+/b/c/.a/a/..a.. /b/c/.a/a/..a..
+/b/c/.a/a/..a./ /b/c/.a/a/..a.
+/b/c/.a/a/..a/a /b/c/.a/a/..a/a
+/b/c/.a/a/..a/. /b/c/.a/a/..a
+/b/c/.a/a/..a// /b/c/.a/a/..a
+/b/c/.a/a/...aa /b/c/.a/a/...aa
+/b/c/.a/a/...a. /b/c/.a/a/...a.
+/b/c/.a/a/...a/ /b/c/.a/a/...a
+/b/c/.a/a/....a /b/c/.a/a/....a
+/b/c/.a/a/..... /b/c/.a/a/.....
+/b/c/.a/a/..../ /b/c/.a/a/....
+/b/c/.a/a/.../a /b/c/.a/a/.../a
+/b/c/.a/a/.../. /b/c/.a/a/...
+/b/c/.a/a/...// /b/c/.a/a/...
+/b/c/.a/a/../aa /b/c/.a/aa
+/b/c/.a/a/../a. /b/c/.a/a.
+/b/c/.a/a/../a/ /b/c/.a/a
+/b/c/.a/a/../.a /b/c/.a/.a
+/b/c/.a/a/../.. /b/c
+/b/c/.a/a/.././ /b/c/.a
+/b/c/.a/a/..//a /b/c/.a/a
+/b/c/.a/a/..//. /b/c/.a
+/b/c/.a/a/../// /b/c/.a
+/b/c/.a/a/./aaa /b/c/.a/a/aaa
+/b/c/.a/a/./aa. /b/c/.a/a/aa.
+/b/c/.a/a/./aa/ /b/c/.a/a/aa
+/b/c/.a/a/./a.a /b/c/.a/a/a.a
+/b/c/.a/a/./a.. /b/c/.a/a/a..
+/b/c/.a/a/./a./ /b/c/.a/a/a.
+/b/c/.a/a/./a/a /b/c/.a/a/a/a
+/b/c/.a/a/./a/. /b/c/.a/a/a
+/b/c/.a/a/./a// /b/c/.a/a/a
+/b/c/.a/a/./.aa /b/c/.a/a/.aa
+/b/c/.a/a/./.a. /b/c/.a/a/.a.
+/b/c/.a/a/./.a/ /b/c/.a/a/.a
+/b/c/.a/a/./..a /b/c/.a/a/..a
+/b/c/.a/a/./... /b/c/.a/a/...
+/b/c/.a/a/./../ /b/c/.a
+/b/c/.a/a/././a /b/c/.a/a/a
+/b/c/.a/a/././. /b/c/.a/a
+/b/c/.a/a/./.// /b/c/.a/a
+/b/c/.a/a/.//aa /b/c/.a/a/aa
+/b/c/.a/a/.//a. /b/c/.a/a/a.
+/b/c/.a/a/.//a/ /b/c/.a/a/a
+/b/c/.a/a/.//.a /b/c/.a/a/.a
+/b/c/.a/a/.//.. /b/c/.a
+/b/c/.a/a/.//./ /b/c/.a/a
+/b/c/.a/a/.///a /b/c/.a/a/a
+/b/c/.a/a/.///. /b/c/.a/a
+/b/c/.a/a/.//// /b/c/.a/a
+/b/c/.a/a//aaaa /b/c/.a/a/aaaa
+/b/c/.a/a//aaa. /b/c/.a/a/aaa.
+/b/c/.a/a//aaa/ /b/c/.a/a/aaa
+/b/c/.a/a//aa.a /b/c/.a/a/aa.a
+/b/c/.a/a//aa.. /b/c/.a/a/aa..
+/b/c/.a/a//aa./ /b/c/.a/a/aa.
+/b/c/.a/a//aa/a /b/c/.a/a/aa/a
+/b/c/.a/a//aa/. /b/c/.a/a/aa
+/b/c/.a/a//aa// /b/c/.a/a/aa
+/b/c/.a/a//a.aa /b/c/.a/a/a.aa
+/b/c/.a/a//a.a. /b/c/.a/a/a.a.
+/b/c/.a/a//a.a/ /b/c/.a/a/a.a
+/b/c/.a/a//a..a /b/c/.a/a/a..a
+/b/c/.a/a//a... /b/c/.a/a/a...
+/b/c/.a/a//a../ /b/c/.a/a/a..
+/b/c/.a/a//a./a /b/c/.a/a/a./a
+/b/c/.a/a//a./. /b/c/.a/a/a.
+/b/c/.a/a//a.// /b/c/.a/a/a.
+/b/c/.a/a//a/aa /b/c/.a/a/a/aa
+/b/c/.a/a//a/a. /b/c/.a/a/a/a.
+/b/c/.a/a//a/a/ /b/c/.a/a/a/a
+/b/c/.a/a//a/.a /b/c/.a/a/a/.a
+/b/c/.a/a//a/.. /b/c/.a/a
+/b/c/.a/a//a/./ /b/c/.a/a/a
+/b/c/.a/a//a//a /b/c/.a/a/a/a
+/b/c/.a/a//a//. /b/c/.a/a/a
+/b/c/.a/a//a/// /b/c/.a/a/a
+/b/c/.a/a//.aaa /b/c/.a/a/.aaa
+/b/c/.a/a//.aa. /b/c/.a/a/.aa.
+/b/c/.a/a//.aa/ /b/c/.a/a/.aa
+/b/c/.a/a//.a.a /b/c/.a/a/.a.a
+/b/c/.a/a//.a.. /b/c/.a/a/.a..
+/b/c/.a/a//.a./ /b/c/.a/a/.a.
+/b/c/.a/a//.a/a /b/c/.a/a/.a/a
+/b/c/.a/a//.a/. /b/c/.a/a/.a
+/b/c/.a/a//.a// /b/c/.a/a/.a
+/b/c/.a/a//..aa /b/c/.a/a/..aa
+/b/c/.a/a//..a. /b/c/.a/a/..a.
+/b/c/.a/a//..a/ /b/c/.a/a/..a
+/b/c/.a/a//...a /b/c/.a/a/...a
+/b/c/.a/a//.... /b/c/.a/a/....
+/b/c/.a/a//.../ /b/c/.a/a/...
+/b/c/.a/a//../a /b/c/.a/a
+/b/c/.a/a//../. /b/c/.a
+/b/c/.a/a//..// /b/c/.a
+/b/c/.a/a//./aa /b/c/.a/a/aa
+/b/c/.a/a//./a. /b/c/.a/a/a.
+/b/c/.a/a//./a/ /b/c/.a/a/a
+/b/c/.a/a//./.a /b/c/.a/a/.a
+/b/c/.a/a//./.. /b/c/.a
+/b/c/.a/a//././ /b/c/.a/a
+/b/c/.a/a//.//a /b/c/.a/a/a
+/b/c/.a/a//.//. /b/c/.a/a
+/b/c/.a/a//./// /b/c/.a/a
+/b/c/.a/a///aaa /b/c/.a/a/aaa
+/b/c/.a/a///aa. /b/c/.a/a/aa.
+/b/c/.a/a///aa/ /b/c/.a/a/aa
+/b/c/.a/a///a.a /b/c/.a/a/a.a
+/b/c/.a/a///a.. /b/c/.a/a/a..
+/b/c/.a/a///a./ /b/c/.a/a/a.
+/b/c/.a/a///a/a /b/c/.a/a/a/a
+/b/c/.a/a///a/. /b/c/.a/a/a
+/b/c/.a/a///a// /b/c/.a/a/a
+/b/c/.a/a///.aa /b/c/.a/a/.aa
+/b/c/.a/a///.a. /b/c/.a/a/.a.
+/b/c/.a/a///.a/ /b/c/.a/a/.a
+/b/c/.a/a///..a /b/c/.a/a/..a
+/b/c/.a/a///... /b/c/.a/a/...
+/b/c/.a/a///../ /b/c/.a
+/b/c/.a/a///./a /b/c/.a/a/a
+/b/c/.a/a///./. /b/c/.a/a
+/b/c/.a/a///.// /b/c/.a/a
+/b/c/.a/a////aa /b/c/.a/a/aa
+/b/c/.a/a////a. /b/c/.a/a/a.
+/b/c/.a/a////a/ /b/c/.a/a/a
+/b/c/.a/a////.a /b/c/.a/a/.a
+/b/c/.a/a////.. /b/c/.a
+/b/c/.a/a////./ /b/c/.a/a
+/b/c/.a/a/////a /b/c/.a/a/a
+/b/c/.a/a/////. /b/c/.a/a
+/b/c/.a/a////// /b/c/.a/a
+/b/c/.a/.aaaaaa /b/c/.a/.aaaaaa
+/b/c/.a/.aaaaa. /b/c/.a/.aaaaa.
+/b/c/.a/.aaaaa/ /b/c/.a/.aaaaa
+/b/c/.a/.aaaa.a /b/c/.a/.aaaa.a
+/b/c/.a/.aaaa.. /b/c/.a/.aaaa..
+/b/c/.a/.aaaa./ /b/c/.a/.aaaa.
+/b/c/.a/.aaaa/a /b/c/.a/.aaaa/a
+/b/c/.a/.aaaa/. /b/c/.a/.aaaa
+/b/c/.a/.aaaa// /b/c/.a/.aaaa
+/b/c/.a/.aaa.aa /b/c/.a/.aaa.aa
+/b/c/.a/.aaa.a. /b/c/.a/.aaa.a.
+/b/c/.a/.aaa.a/ /b/c/.a/.aaa.a
+/b/c/.a/.aaa..a /b/c/.a/.aaa..a
+/b/c/.a/.aaa... /b/c/.a/.aaa...
+/b/c/.a/.aaa../ /b/c/.a/.aaa..
+/b/c/.a/.aaa./a /b/c/.a/.aaa./a
+/b/c/.a/.aaa./. /b/c/.a/.aaa.
+/b/c/.a/.aaa.// /b/c/.a/.aaa.
+/b/c/.a/.aaa/aa /b/c/.a/.aaa/aa
+/b/c/.a/.aaa/a. /b/c/.a/.aaa/a.
+/b/c/.a/.aaa/a/ /b/c/.a/.aaa/a
+/b/c/.a/.aaa/.a /b/c/.a/.aaa/.a
+/b/c/.a/.aaa/.. /b/c/.a
+/b/c/.a/.aaa/./ /b/c/.a/.aaa
+/b/c/.a/.aaa//a /b/c/.a/.aaa/a
+/b/c/.a/.aaa//. /b/c/.a/.aaa
+/b/c/.a/.aaa/// /b/c/.a/.aaa
+/b/c/.a/.aa.aaa /b/c/.a/.aa.aaa
+/b/c/.a/.aa.aa. /b/c/.a/.aa.aa.
+/b/c/.a/.aa.aa/ /b/c/.a/.aa.aa
+/b/c/.a/.aa.a.a /b/c/.a/.aa.a.a
+/b/c/.a/.aa.a.. /b/c/.a/.aa.a..
+/b/c/.a/.aa.a./ /b/c/.a/.aa.a.
+/b/c/.a/.aa.a/a /b/c/.a/.aa.a/a
+/b/c/.a/.aa.a/. /b/c/.a/.aa.a
+/b/c/.a/.aa.a// /b/c/.a/.aa.a
+/b/c/.a/.aa..aa /b/c/.a/.aa..aa
+/b/c/.a/.aa..a. /b/c/.a/.aa..a.
+/b/c/.a/.aa..a/ /b/c/.a/.aa..a
+/b/c/.a/.aa...a /b/c/.a/.aa...a
+/b/c/.a/.aa.... /b/c/.a/.aa....
+/b/c/.a/.aa.../ /b/c/.a/.aa...
+/b/c/.a/.aa../a /b/c/.a/.aa../a
+/b/c/.a/.aa../. /b/c/.a/.aa..
+/b/c/.a/.aa..// /b/c/.a/.aa..
+/b/c/.a/.aa./aa /b/c/.a/.aa./aa
+/b/c/.a/.aa./a. /b/c/.a/.aa./a.
+/b/c/.a/.aa./a/ /b/c/.a/.aa./a
+/b/c/.a/.aa./.a /b/c/.a/.aa./.a
+/b/c/.a/.aa./.. /b/c/.a
+/b/c/.a/.aa././ /b/c/.a/.aa.
+/b/c/.a/.aa.//a /b/c/.a/.aa./a
+/b/c/.a/.aa.//. /b/c/.a/.aa.
+/b/c/.a/.aa./// /b/c/.a/.aa.
+/b/c/.a/.aa/aaa /b/c/.a/.aa/aaa
+/b/c/.a/.aa/aa. /b/c/.a/.aa/aa.
+/b/c/.a/.aa/aa/ /b/c/.a/.aa/aa
+/b/c/.a/.aa/a.a /b/c/.a/.aa/a.a
+/b/c/.a/.aa/a.. /b/c/.a/.aa/a..
+/b/c/.a/.aa/a./ /b/c/.a/.aa/a.
+/b/c/.a/.aa/a/a /b/c/.a/.aa/a/a
+/b/c/.a/.aa/a/. /b/c/.a/.aa/a
+/b/c/.a/.aa/a// /b/c/.a/.aa/a
+/b/c/.a/.aa/.aa /b/c/.a/.aa/.aa
+/b/c/.a/.aa/.a. /b/c/.a/.aa/.a.
+/b/c/.a/.aa/.a/ /b/c/.a/.aa/.a
+/b/c/.a/.aa/..a /b/c/.a/.aa/..a
+/b/c/.a/.aa/... /b/c/.a/.aa/...
+/b/c/.a/.aa/../ /b/c/.a
+/b/c/.a/.aa/./a /b/c/.a/.aa/a
+/b/c/.a/.aa/./. /b/c/.a/.aa
+/b/c/.a/.aa/.// /b/c/.a/.aa
+/b/c/.a/.aa//aa /b/c/.a/.aa/aa
+/b/c/.a/.aa//a. /b/c/.a/.aa/a.
+/b/c/.a/.aa//a/ /b/c/.a/.aa/a
+/b/c/.a/.aa//.a /b/c/.a/.aa/.a
+/b/c/.a/.aa//.. /b/c/.a
+/b/c/.a/.aa//./ /b/c/.a/.aa
+/b/c/.a/.aa///a /b/c/.a/.aa/a
+/b/c/.a/.aa///. /b/c/.a/.aa
+/b/c/.a/.aa//// /b/c/.a/.aa
+/b/c/.a/.a.aaaa /b/c/.a/.a.aaaa
+/b/c/.a/.a.aaa. /b/c/.a/.a.aaa.
+/b/c/.a/.a.aaa/ /b/c/.a/.a.aaa
+/b/c/.a/.a.aa.a /b/c/.a/.a.aa.a
+/b/c/.a/.a.aa.. /b/c/.a/.a.aa..
+/b/c/.a/.a.aa./ /b/c/.a/.a.aa.
+/b/c/.a/.a.aa/a /b/c/.a/.a.aa/a
+/b/c/.a/.a.aa/. /b/c/.a/.a.aa
+/b/c/.a/.a.aa// /b/c/.a/.a.aa
+/b/c/.a/.a.a.aa /b/c/.a/.a.a.aa
+/b/c/.a/.a.a.a. /b/c/.a/.a.a.a.
+/b/c/.a/.a.a.a/ /b/c/.a/.a.a.a
+/b/c/.a/.a.a..a /b/c/.a/.a.a..a
+/b/c/.a/.a.a... /b/c/.a/.a.a...
+/b/c/.a/.a.a../ /b/c/.a/.a.a..
+/b/c/.a/.a.a./a /b/c/.a/.a.a./a
+/b/c/.a/.a.a./. /b/c/.a/.a.a.
+/b/c/.a/.a.a.// /b/c/.a/.a.a.
+/b/c/.a/.a.a/aa /b/c/.a/.a.a/aa
+/b/c/.a/.a.a/a. /b/c/.a/.a.a/a.
+/b/c/.a/.a.a/a/ /b/c/.a/.a.a/a
+/b/c/.a/.a.a/.a /b/c/.a/.a.a/.a
+/b/c/.a/.a.a/.. /b/c/.a
+/b/c/.a/.a.a/./ /b/c/.a/.a.a
+/b/c/.a/.a.a//a /b/c/.a/.a.a/a
+/b/c/.a/.a.a//. /b/c/.a/.a.a
+/b/c/.a/.a.a/// /b/c/.a/.a.a
+/b/c/.a/.a..aaa /b/c/.a/.a..aaa
+/b/c/.a/.a..aa. /b/c/.a/.a..aa.
+/b/c/.a/.a..aa/ /b/c/.a/.a..aa
+/b/c/.a/.a..a.a /b/c/.a/.a..a.a
+/b/c/.a/.a..a.. /b/c/.a/.a..a..
+/b/c/.a/.a..a./ /b/c/.a/.a..a.
+/b/c/.a/.a..a/a /b/c/.a/.a..a/a
+/b/c/.a/.a..a/. /b/c/.a/.a..a
+/b/c/.a/.a..a// /b/c/.a/.a..a
+/b/c/.a/.a...aa /b/c/.a/.a...aa
+/b/c/.a/.a...a. /b/c/.a/.a...a.
+/b/c/.a/.a...a/ /b/c/.a/.a...a
+/b/c/.a/.a....a /b/c/.a/.a....a
+/b/c/.a/.a..... /b/c/.a/.a.....
+/b/c/.a/.a..../ /b/c/.a/.a....
+/b/c/.a/.a.../a /b/c/.a/.a.../a
+/b/c/.a/.a.../. /b/c/.a/.a...
+/b/c/.a/.a...// /b/c/.a/.a...
+/b/c/.a/.a../aa /b/c/.a/.a../aa
+/b/c/.a/.a../a. /b/c/.a/.a../a.
+/b/c/.a/.a../a/ /b/c/.a/.a../a
+/b/c/.a/.a../.a /b/c/.a/.a../.a
+/b/c/.a/.a../.. /b/c/.a
+/b/c/.a/.a.././ /b/c/.a/.a..
+/b/c/.a/.a..//a /b/c/.a/.a../a
+/b/c/.a/.a..//. /b/c/.a/.a..
+/b/c/.a/.a../// /b/c/.a/.a..
+/b/c/.a/.a./aaa /b/c/.a/.a./aaa
+/b/c/.a/.a./aa. /b/c/.a/.a./aa.
+/b/c/.a/.a./aa/ /b/c/.a/.a./aa
+/b/c/.a/.a./a.a /b/c/.a/.a./a.a
+/b/c/.a/.a./a.. /b/c/.a/.a./a..
+/b/c/.a/.a./a./ /b/c/.a/.a./a.
+/b/c/.a/.a./a/a /b/c/.a/.a./a/a
+/b/c/.a/.a./a/. /b/c/.a/.a./a
+/b/c/.a/.a./a// /b/c/.a/.a./a
+/b/c/.a/.a./.aa /b/c/.a/.a./.aa
+/b/c/.a/.a./.a. /b/c/.a/.a./.a.
+/b/c/.a/.a./.a/ /b/c/.a/.a./.a
+/b/c/.a/.a./..a /b/c/.a/.a./..a
+/b/c/.a/.a./... /b/c/.a/.a./...
+/b/c/.a/.a./../ /b/c/.a
+/b/c/.a/.a././a /b/c/.a/.a./a
+/b/c/.a/.a././. /b/c/.a/.a.
+/b/c/.a/.a./.// /b/c/.a/.a.
+/b/c/.a/.a.//aa /b/c/.a/.a./aa
+/b/c/.a/.a.//a. /b/c/.a/.a./a.
+/b/c/.a/.a.//a/ /b/c/.a/.a./a
+/b/c/.a/.a.//.a /b/c/.a/.a./.a
+/b/c/.a/.a.//.. /b/c/.a
+/b/c/.a/.a.//./ /b/c/.a/.a.
+/b/c/.a/.a.///a /b/c/.a/.a./a
+/b/c/.a/.a.///. /b/c/.a/.a.
+/b/c/.a/.a.//// /b/c/.a/.a.
+/b/c/.a/.a/aaaa /b/c/.a/.a/aaaa
+/b/c/.a/.a/aaa. /b/c/.a/.a/aaa.
+/b/c/.a/.a/aaa/ /b/c/.a/.a/aaa
+/b/c/.a/.a/aa.a /b/c/.a/.a/aa.a
+/b/c/.a/.a/aa.. /b/c/.a/.a/aa..
+/b/c/.a/.a/aa./ /b/c/.a/.a/aa.
+/b/c/.a/.a/aa/a /b/c/.a/.a/aa/a
+/b/c/.a/.a/aa/. /b/c/.a/.a/aa
+/b/c/.a/.a/aa// /b/c/.a/.a/aa
+/b/c/.a/.a/a.aa /b/c/.a/.a/a.aa
+/b/c/.a/.a/a.a. /b/c/.a/.a/a.a.
+/b/c/.a/.a/a.a/ /b/c/.a/.a/a.a
+/b/c/.a/.a/a..a /b/c/.a/.a/a..a
+/b/c/.a/.a/a... /b/c/.a/.a/a...
+/b/c/.a/.a/a../ /b/c/.a/.a/a..
+/b/c/.a/.a/a./a /b/c/.a/.a/a./a
+/b/c/.a/.a/a./. /b/c/.a/.a/a.
+/b/c/.a/.a/a.// /b/c/.a/.a/a.
+/b/c/.a/.a/a/aa /b/c/.a/.a/a/aa
+/b/c/.a/.a/a/a. /b/c/.a/.a/a/a.
+/b/c/.a/.a/a/a/ /b/c/.a/.a/a/a
+/b/c/.a/.a/a/.a /b/c/.a/.a/a/.a
+/b/c/.a/.a/a/.. /b/c/.a/.a
+/b/c/.a/.a/a/./ /b/c/.a/.a/a
+/b/c/.a/.a/a//a /b/c/.a/.a/a/a
+/b/c/.a/.a/a//. /b/c/.a/.a/a
+/b/c/.a/.a/a/// /b/c/.a/.a/a
+/b/c/.a/.a/.aaa /b/c/.a/.a/.aaa
+/b/c/.a/.a/.aa. /b/c/.a/.a/.aa.
+/b/c/.a/.a/.aa/ /b/c/.a/.a/.aa
+/b/c/.a/.a/.a.a /b/c/.a/.a/.a.a
+/b/c/.a/.a/.a.. /b/c/.a/.a/.a..
+/b/c/.a/.a/.a./ /b/c/.a/.a/.a.
+/b/c/.a/.a/.a/a /b/c/.a/.a/.a/a
+/b/c/.a/.a/.a/. /b/c/.a/.a/.a
+/b/c/.a/.a/.a// /b/c/.a/.a/.a
+/b/c/.a/.a/..aa /b/c/.a/.a/..aa
+/b/c/.a/.a/..a. /b/c/.a/.a/..a.
+/b/c/.a/.a/..a/ /b/c/.a/.a/..a
+/b/c/.a/.a/...a /b/c/.a/.a/...a
+/b/c/.a/.a/.... /b/c/.a/.a/....
+/b/c/.a/.a/.../ /b/c/.a/.a/...
+/b/c/.a/.a/../a /b/c/.a/a
+/b/c/.a/.a/../. /b/c/.a
+/b/c/.a/.a/..// /b/c/.a
+/b/c/.a/.a/./aa /b/c/.a/.a/aa
+/b/c/.a/.a/./a. /b/c/.a/.a/a.
+/b/c/.a/.a/./a/ /b/c/.a/.a/a
+/b/c/.a/.a/./.a /b/c/.a/.a/.a
+/b/c/.a/.a/./.. /b/c/.a
+/b/c/.a/.a/././ /b/c/.a/.a
+/b/c/.a/.a/.//a /b/c/.a/.a/a
+/b/c/.a/.a/.//. /b/c/.a/.a
+/b/c/.a/.a/./// /b/c/.a/.a
+/b/c/.a/.a//aaa /b/c/.a/.a/aaa
+/b/c/.a/.a//aa. /b/c/.a/.a/aa.
+/b/c/.a/.a//aa/ /b/c/.a/.a/aa
+/b/c/.a/.a//a.a /b/c/.a/.a/a.a
+/b/c/.a/.a//a.. /b/c/.a/.a/a..
+/b/c/.a/.a//a./ /b/c/.a/.a/a.
+/b/c/.a/.a//a/a /b/c/.a/.a/a/a
+/b/c/.a/.a//a/. /b/c/.a/.a/a
+/b/c/.a/.a//a// /b/c/.a/.a/a
+/b/c/.a/.a//.aa /b/c/.a/.a/.aa
+/b/c/.a/.a//.a. /b/c/.a/.a/.a.
+/b/c/.a/.a//.a/ /b/c/.a/.a/.a
+/b/c/.a/.a//..a /b/c/.a/.a/..a
+/b/c/.a/.a//... /b/c/.a/.a/...
+/b/c/.a/.a//../ /b/c/.a
+/b/c/.a/.a//./a /b/c/.a/.a/a
+/b/c/.a/.a//./. /b/c/.a/.a
+/b/c/.a/.a//.// /b/c/.a/.a
+/b/c/.a/.a///aa /b/c/.a/.a/aa
+/b/c/.a/.a///a. /b/c/.a/.a/a.
+/b/c/.a/.a///a/ /b/c/.a/.a/a
+/b/c/.a/.a///.a /b/c/.a/.a/.a
+/b/c/.a/.a///.. /b/c/.a
+/b/c/.a/.a///./ /b/c/.a/.a
+/b/c/.a/.a////a /b/c/.a/.a/a
+/b/c/.a/.a////. /b/c/.a/.a
+/b/c/.a/.a///// /b/c/.a/.a
+/b/c/.a/..aaaaa /b/c/.a/..aaaaa
+/b/c/.a/..aaaa. /b/c/.a/..aaaa.
+/b/c/.a/..aaaa/ /b/c/.a/..aaaa
+/b/c/.a/..aaa.a /b/c/.a/..aaa.a
+/b/c/.a/..aaa.. /b/c/.a/..aaa..
+/b/c/.a/..aaa./ /b/c/.a/..aaa.
+/b/c/.a/..aaa/a /b/c/.a/..aaa/a
+/b/c/.a/..aaa/. /b/c/.a/..aaa
+/b/c/.a/..aaa// /b/c/.a/..aaa
+/b/c/.a/..aa.aa /b/c/.a/..aa.aa
+/b/c/.a/..aa.a. /b/c/.a/..aa.a.
+/b/c/.a/..aa.a/ /b/c/.a/..aa.a
+/b/c/.a/..aa..a /b/c/.a/..aa..a
+/b/c/.a/..aa... /b/c/.a/..aa...
+/b/c/.a/..aa../ /b/c/.a/..aa..
+/b/c/.a/..aa./a /b/c/.a/..aa./a
+/b/c/.a/..aa./. /b/c/.a/..aa.
+/b/c/.a/..aa.// /b/c/.a/..aa.
+/b/c/.a/..aa/aa /b/c/.a/..aa/aa
+/b/c/.a/..aa/a. /b/c/.a/..aa/a.
+/b/c/.a/..aa/a/ /b/c/.a/..aa/a
+/b/c/.a/..aa/.a /b/c/.a/..aa/.a
+/b/c/.a/..aa/.. /b/c/.a
+/b/c/.a/..aa/./ /b/c/.a/..aa
+/b/c/.a/..aa//a /b/c/.a/..aa/a
+/b/c/.a/..aa//. /b/c/.a/..aa
+/b/c/.a/..aa/// /b/c/.a/..aa
+/b/c/.a/..a.aaa /b/c/.a/..a.aaa
+/b/c/.a/..a.aa. /b/c/.a/..a.aa.
+/b/c/.a/..a.aa/ /b/c/.a/..a.aa
+/b/c/.a/..a.a.a /b/c/.a/..a.a.a
+/b/c/.a/..a.a.. /b/c/.a/..a.a..
+/b/c/.a/..a.a./ /b/c/.a/..a.a.
+/b/c/.a/..a.a/a /b/c/.a/..a.a/a
+/b/c/.a/..a.a/. /b/c/.a/..a.a
+/b/c/.a/..a.a// /b/c/.a/..a.a
+/b/c/.a/..a..aa /b/c/.a/..a..aa
+/b/c/.a/..a..a. /b/c/.a/..a..a.
+/b/c/.a/..a..a/ /b/c/.a/..a..a
+/b/c/.a/..a...a /b/c/.a/..a...a
+/b/c/.a/..a.... /b/c/.a/..a....
+/b/c/.a/..a.../ /b/c/.a/..a...
+/b/c/.a/..a../a /b/c/.a/..a../a
+/b/c/.a/..a../. /b/c/.a/..a..
+/b/c/.a/..a..// /b/c/.a/..a..
+/b/c/.a/..a./aa /b/c/.a/..a./aa
+/b/c/.a/..a./a. /b/c/.a/..a./a.
+/b/c/.a/..a./a/ /b/c/.a/..a./a
+/b/c/.a/..a./.a /b/c/.a/..a./.a
+/b/c/.a/..a./.. /b/c/.a
+/b/c/.a/..a././ /b/c/.a/..a.
+/b/c/.a/..a.//a /b/c/.a/..a./a
+/b/c/.a/..a.//. /b/c/.a/..a.
+/b/c/.a/..a./// /b/c/.a/..a.
+/b/c/.a/..a/aaa /b/c/.a/..a/aaa
+/b/c/.a/..a/aa. /b/c/.a/..a/aa.
+/b/c/.a/..a/aa/ /b/c/.a/..a/aa
+/b/c/.a/..a/a.a /b/c/.a/..a/a.a
+/b/c/.a/..a/a.. /b/c/.a/..a/a..
+/b/c/.a/..a/a./ /b/c/.a/..a/a.
+/b/c/.a/..a/a/a /b/c/.a/..a/a/a
+/b/c/.a/..a/a/. /b/c/.a/..a/a
+/b/c/.a/..a/a// /b/c/.a/..a/a
+/b/c/.a/..a/.aa /b/c/.a/..a/.aa
+/b/c/.a/..a/.a. /b/c/.a/..a/.a.
+/b/c/.a/..a/.a/ /b/c/.a/..a/.a
+/b/c/.a/..a/..a /b/c/.a/..a/..a
+/b/c/.a/..a/... /b/c/.a/..a/...
+/b/c/.a/..a/../ /b/c/.a
+/b/c/.a/..a/./a /b/c/.a/..a/a
+/b/c/.a/..a/./. /b/c/.a/..a
+/b/c/.a/..a/.// /b/c/.a/..a
+/b/c/.a/..a//aa /b/c/.a/..a/aa
+/b/c/.a/..a//a. /b/c/.a/..a/a.
+/b/c/.a/..a//a/ /b/c/.a/..a/a
+/b/c/.a/..a//.a /b/c/.a/..a/.a
+/b/c/.a/..a//.. /b/c/.a
+/b/c/.a/..a//./ /b/c/.a/..a
+/b/c/.a/..a///a /b/c/.a/..a/a
+/b/c/.a/..a///. /b/c/.a/..a
+/b/c/.a/..a//// /b/c/.a/..a
+/b/c/.a/...aaaa /b/c/.a/...aaaa
+/b/c/.a/...aaa. /b/c/.a/...aaa.
+/b/c/.a/...aaa/ /b/c/.a/...aaa
+/b/c/.a/...aa.a /b/c/.a/...aa.a
+/b/c/.a/...aa.. /b/c/.a/...aa..
+/b/c/.a/...aa./ /b/c/.a/...aa.
+/b/c/.a/...aa/a /b/c/.a/...aa/a
+/b/c/.a/...aa/. /b/c/.a/...aa
+/b/c/.a/...aa// /b/c/.a/...aa
+/b/c/.a/...a.aa /b/c/.a/...a.aa
+/b/c/.a/...a.a. /b/c/.a/...a.a.
+/b/c/.a/...a.a/ /b/c/.a/...a.a
+/b/c/.a/...a..a /b/c/.a/...a..a
+/b/c/.a/...a... /b/c/.a/...a...
+/b/c/.a/...a../ /b/c/.a/...a..
+/b/c/.a/...a./a /b/c/.a/...a./a
+/b/c/.a/...a./. /b/c/.a/...a.
+/b/c/.a/...a.// /b/c/.a/...a.
+/b/c/.a/...a/aa /b/c/.a/...a/aa
+/b/c/.a/...a/a. /b/c/.a/...a/a.
+/b/c/.a/...a/a/ /b/c/.a/...a/a
+/b/c/.a/...a/.a /b/c/.a/...a/.a
+/b/c/.a/...a/.. /b/c/.a
+/b/c/.a/...a/./ /b/c/.a/...a
+/b/c/.a/...a//a /b/c/.a/...a/a
+/b/c/.a/...a//. /b/c/.a/...a
+/b/c/.a/...a/// /b/c/.a/...a
+/b/c/.a/....aaa /b/c/.a/....aaa
+/b/c/.a/....aa. /b/c/.a/....aa.
+/b/c/.a/....aa/ /b/c/.a/....aa
+/b/c/.a/....a.a /b/c/.a/....a.a
+/b/c/.a/....a.. /b/c/.a/....a..
+/b/c/.a/....a./ /b/c/.a/....a.
+/b/c/.a/....a/a /b/c/.a/....a/a
+/b/c/.a/....a/. /b/c/.a/....a
+/b/c/.a/....a// /b/c/.a/....a
+/b/c/.a/.....aa /b/c/.a/.....aa
+/b/c/.a/.....a. /b/c/.a/.....a.
+/b/c/.a/.....a/ /b/c/.a/.....a
+/b/c/.a/......a /b/c/.a/......a
+/b/c/.a/....... /b/c/.a/.......
+/b/c/.a/....../ /b/c/.a/......
+/b/c/.a/...../a /b/c/.a/...../a
+/b/c/.a/...../. /b/c/.a/.....
+/b/c/.a/.....// /b/c/.a/.....
+/b/c/.a/..../aa /b/c/.a/..../aa
+/b/c/.a/..../a. /b/c/.a/..../a.
+/b/c/.a/..../a/ /b/c/.a/..../a
+/b/c/.a/..../.a /b/c/.a/..../.a
+/b/c/.a/..../.. /b/c/.a
+/b/c/.a/...././ /b/c/.a/....
+/b/c/.a/....//a /b/c/.a/..../a
+/b/c/.a/....//. /b/c/.a/....
+/b/c/.a/..../// /b/c/.a/....
+/b/c/.a/.../aaa /b/c/.a/.../aaa
+/b/c/.a/.../aa. /b/c/.a/.../aa.
+/b/c/.a/.../aa/ /b/c/.a/.../aa
+/b/c/.a/.../a.a /b/c/.a/.../a.a
+/b/c/.a/.../a.. /b/c/.a/.../a..
+/b/c/.a/.../a./ /b/c/.a/.../a.
+/b/c/.a/.../a/a /b/c/.a/.../a/a
+/b/c/.a/.../a/. /b/c/.a/.../a
+/b/c/.a/.../a// /b/c/.a/.../a
+/b/c/.a/.../.aa /b/c/.a/.../.aa
+/b/c/.a/.../.a. /b/c/.a/.../.a.
+/b/c/.a/.../.a/ /b/c/.a/.../.a
+/b/c/.a/.../..a /b/c/.a/.../..a
+/b/c/.a/.../... /b/c/.a/.../...
+/b/c/.a/.../../ /b/c/.a
+/b/c/.a/..././a /b/c/.a/.../a
+/b/c/.a/..././. /b/c/.a/...
+/b/c/.a/.../.// /b/c/.a/...
+/b/c/.a/...//aa /b/c/.a/.../aa
+/b/c/.a/...//a. /b/c/.a/.../a.
+/b/c/.a/...//a/ /b/c/.a/.../a
+/b/c/.a/...//.a /b/c/.a/.../.a
+/b/c/.a/...//.. /b/c/.a
+/b/c/.a/...//./ /b/c/.a/...
+/b/c/.a/...///a /b/c/.a/.../a
+/b/c/.a/...///. /b/c/.a/...
+/b/c/.a/...//// /b/c/.a/...
+/b/c/.a/../aaaa /b/c/aaaa
+/b/c/.a/../aaa. /b/c/aaa.
+/b/c/.a/../aaa/ /b/c/aaa
+/b/c/.a/../aa.a /b/c/aa.a
+/b/c/.a/../aa.. /b/c/aa..
+/b/c/.a/../aa./ /b/c/aa.
+/b/c/.a/../aa/a /b/c/aa/a
+/b/c/.a/../aa/. /b/c/aa
+/b/c/.a/../aa// /b/c/aa
+/b/c/.a/../a.aa /b/c/a.aa
+/b/c/.a/../a.a. /b/c/a.a.
+/b/c/.a/../a.a/ /b/c/a.a
+/b/c/.a/../a..a /b/c/a..a
+/b/c/.a/../a... /b/c/a...
+/b/c/.a/../a../ /b/c/a..
+/b/c/.a/../a./a /b/c/a./a
+/b/c/.a/../a./. /b/c/a.
+/b/c/.a/../a.// /b/c/a.
+/b/c/.a/../a/aa /b/c/a/aa
+/b/c/.a/../a/a. /b/c/a/a.
+/b/c/.a/../a/a/ /b/c/a/a
+/b/c/.a/../a/.a /b/c/a/.a
+/b/c/.a/../a/.. /b/c
+/b/c/.a/../a/./ /b/c/a
+/b/c/.a/../a//a /b/c/a/a
+/b/c/.a/../a//. /b/c/a
+/b/c/.a/../a/// /b/c/a
+/b/c/.a/../.aaa /b/c/.aaa
+/b/c/.a/../.aa. /b/c/.aa.
+/b/c/.a/../.aa/ /b/c/.aa
+/b/c/.a/../.a.a /b/c/.a.a
+/b/c/.a/../.a.. /b/c/.a..
+/b/c/.a/../.a./ /b/c/.a.
+/b/c/.a/../.a/a /b/c/.a/a
+/b/c/.a/../.a/. /b/c/.a
+/b/c/.a/../.a// /b/c/.a
+/b/c/.a/../..aa /b/c/..aa
+/b/c/.a/../..a. /b/c/..a.
+/b/c/.a/../..a/ /b/c/..a
+/b/c/.a/../...a /b/c/...a
+/b/c/.a/../.... /b/c/....
+/b/c/.a/../.../ /b/c/...
+/b/c/.a/../../a /b/a
+/b/c/.a/../../. /b
+/b/c/.a/../..// /b
+/b/c/.a/.././aa /b/c/aa
+/b/c/.a/.././a. /b/c/a.
+/b/c/.a/.././a/ /b/c/a
+/b/c/.a/.././.a /b/c/.a
+/b/c/.a/.././.. /b
+/b/c/.a/../././ /b/c
+/b/c/.a/.././/a /b/c/a
+/b/c/.a/.././/. /b/c
+/b/c/.a/.././// /b/c
+/b/c/.a/..//aaa /b/c/aaa
+/b/c/.a/..//aa. /b/c/aa.
+/b/c/.a/..//aa/ /b/c/aa
+/b/c/.a/..//a.a /b/c/a.a
+/b/c/.a/..//a.. /b/c/a..
+/b/c/.a/..//a./ /b/c/a.
+/b/c/.a/..//a/a /b/c/a/a
+/b/c/.a/..//a/. /b/c/a
+/b/c/.a/..//a// /b/c/a
+/b/c/.a/..//.aa /b/c/.aa
+/b/c/.a/..//.a. /b/c/.a.
+/b/c/.a/..//.a/ /b/c/.a
+/b/c/.a/..//..a /b/c/..a
+/b/c/.a/..//... /b/c/...
+/b/c/.a/..//../ /b
+/b/c/.a/..//./a /b/c/a
+/b/c/.a/..//./. /b/c
+/b/c/.a/..//.// /b/c
+/b/c/.a/..///aa /b/c/aa
+/b/c/.a/..///a. /b/c/a.
+/b/c/.a/..///a/ /b/c/a
+/b/c/.a/..///.a /b/c/.a
+/b/c/.a/..///.. /b
+/b/c/.a/..///./ /b/c
+/b/c/.a/..////a /b/c/a
+/b/c/.a/..////. /b/c
+/b/c/.a/..///// /b/c
+/b/c/.a/./aaaaa /b/c/.a/aaaaa
+/b/c/.a/./aaaa. /b/c/.a/aaaa.
+/b/c/.a/./aaaa/ /b/c/.a/aaaa
+/b/c/.a/./aaa.a /b/c/.a/aaa.a
+/b/c/.a/./aaa.. /b/c/.a/aaa..
+/b/c/.a/./aaa./ /b/c/.a/aaa.
+/b/c/.a/./aaa/a /b/c/.a/aaa/a
+/b/c/.a/./aaa/. /b/c/.a/aaa
+/b/c/.a/./aaa// /b/c/.a/aaa
+/b/c/.a/./aa.aa /b/c/.a/aa.aa
+/b/c/.a/./aa.a. /b/c/.a/aa.a.
+/b/c/.a/./aa.a/ /b/c/.a/aa.a
+/b/c/.a/./aa..a /b/c/.a/aa..a
+/b/c/.a/./aa... /b/c/.a/aa...
+/b/c/.a/./aa../ /b/c/.a/aa..
+/b/c/.a/./aa./a /b/c/.a/aa./a
+/b/c/.a/./aa./. /b/c/.a/aa.
+/b/c/.a/./aa.// /b/c/.a/aa.
+/b/c/.a/./aa/aa /b/c/.a/aa/aa
+/b/c/.a/./aa/a. /b/c/.a/aa/a.
+/b/c/.a/./aa/a/ /b/c/.a/aa/a
+/b/c/.a/./aa/.a /b/c/.a/aa/.a
+/b/c/.a/./aa/.. /b/c/.a
+/b/c/.a/./aa/./ /b/c/.a/aa
+/b/c/.a/./aa//a /b/c/.a/aa/a
+/b/c/.a/./aa//. /b/c/.a/aa
+/b/c/.a/./aa/// /b/c/.a/aa
+/b/c/.a/./a.aaa /b/c/.a/a.aaa
+/b/c/.a/./a.aa. /b/c/.a/a.aa.
+/b/c/.a/./a.aa/ /b/c/.a/a.aa
+/b/c/.a/./a.a.a /b/c/.a/a.a.a
+/b/c/.a/./a.a.. /b/c/.a/a.a..
+/b/c/.a/./a.a./ /b/c/.a/a.a.
+/b/c/.a/./a.a/a /b/c/.a/a.a/a
+/b/c/.a/./a.a/. /b/c/.a/a.a
+/b/c/.a/./a.a// /b/c/.a/a.a
+/b/c/.a/./a..aa /b/c/.a/a..aa
+/b/c/.a/./a..a. /b/c/.a/a..a.
+/b/c/.a/./a..a/ /b/c/.a/a..a
+/b/c/.a/./a...a /b/c/.a/a...a
+/b/c/.a/./a.... /b/c/.a/a....
+/b/c/.a/./a.../ /b/c/.a/a...
+/b/c/.a/./a../a /b/c/.a/a../a
+/b/c/.a/./a../. /b/c/.a/a..
+/b/c/.a/./a..// /b/c/.a/a..
+/b/c/.a/./a./aa /b/c/.a/a./aa
+/b/c/.a/./a./a. /b/c/.a/a./a.
+/b/c/.a/./a./a/ /b/c/.a/a./a
+/b/c/.a/./a./.a /b/c/.a/a./.a
+/b/c/.a/./a./.. /b/c/.a
+/b/c/.a/./a././ /b/c/.a/a.
+/b/c/.a/./a.//a /b/c/.a/a./a
+/b/c/.a/./a.//. /b/c/.a/a.
+/b/c/.a/./a./// /b/c/.a/a.
+/b/c/.a/./a/aaa /b/c/.a/a/aaa
+/b/c/.a/./a/aa. /b/c/.a/a/aa.
+/b/c/.a/./a/aa/ /b/c/.a/a/aa
+/b/c/.a/./a/a.a /b/c/.a/a/a.a
+/b/c/.a/./a/a.. /b/c/.a/a/a..
+/b/c/.a/./a/a./ /b/c/.a/a/a.
+/b/c/.a/./a/a/a /b/c/.a/a/a/a
+/b/c/.a/./a/a/. /b/c/.a/a/a
+/b/c/.a/./a/a// /b/c/.a/a/a
+/b/c/.a/./a/.aa /b/c/.a/a/.aa
+/b/c/.a/./a/.a. /b/c/.a/a/.a.
+/b/c/.a/./a/.a/ /b/c/.a/a/.a
+/b/c/.a/./a/..a /b/c/.a/a/..a
+/b/c/.a/./a/... /b/c/.a/a/...
+/b/c/.a/./a/../ /b/c/.a
+/b/c/.a/./a/./a /b/c/.a/a/a
+/b/c/.a/./a/./. /b/c/.a/a
+/b/c/.a/./a/.// /b/c/.a/a
+/b/c/.a/./a//aa /b/c/.a/a/aa
+/b/c/.a/./a//a. /b/c/.a/a/a.
+/b/c/.a/./a//a/ /b/c/.a/a/a
+/b/c/.a/./a//.a /b/c/.a/a/.a
+/b/c/.a/./a//.. /b/c/.a
+/b/c/.a/./a//./ /b/c/.a/a
+/b/c/.a/./a///a /b/c/.a/a/a
+/b/c/.a/./a///. /b/c/.a/a
+/b/c/.a/./a//// /b/c/.a/a
+/b/c/.a/./.aaaa /b/c/.a/.aaaa
+/b/c/.a/./.aaa. /b/c/.a/.aaa.
+/b/c/.a/./.aaa/ /b/c/.a/.aaa
+/b/c/.a/./.aa.a /b/c/.a/.aa.a
+/b/c/.a/./.aa.. /b/c/.a/.aa..
+/b/c/.a/./.aa./ /b/c/.a/.aa.
+/b/c/.a/./.aa/a /b/c/.a/.aa/a
+/b/c/.a/./.aa/. /b/c/.a/.aa
+/b/c/.a/./.aa// /b/c/.a/.aa
+/b/c/.a/./.a.aa /b/c/.a/.a.aa
+/b/c/.a/./.a.a. /b/c/.a/.a.a.
+/b/c/.a/./.a.a/ /b/c/.a/.a.a
+/b/c/.a/./.a..a /b/c/.a/.a..a
+/b/c/.a/./.a... /b/c/.a/.a...
+/b/c/.a/./.a../ /b/c/.a/.a..
+/b/c/.a/./.a./a /b/c/.a/.a./a
+/b/c/.a/./.a./. /b/c/.a/.a.
+/b/c/.a/./.a.// /b/c/.a/.a.
+/b/c/.a/./.a/aa /b/c/.a/.a/aa
+/b/c/.a/./.a/a. /b/c/.a/.a/a.
+/b/c/.a/./.a/a/ /b/c/.a/.a/a
+/b/c/.a/./.a/.a /b/c/.a/.a/.a
+/b/c/.a/./.a/.. /b/c/.a
+/b/c/.a/./.a/./ /b/c/.a/.a
+/b/c/.a/./.a//a /b/c/.a/.a/a
+/b/c/.a/./.a//. /b/c/.a/.a
+/b/c/.a/./.a/// /b/c/.a/.a
+/b/c/.a/./..aaa /b/c/.a/..aaa
+/b/c/.a/./..aa. /b/c/.a/..aa.
+/b/c/.a/./..aa/ /b/c/.a/..aa
+/b/c/.a/./..a.a /b/c/.a/..a.a
+/b/c/.a/./..a.. /b/c/.a/..a..
+/b/c/.a/./..a./ /b/c/.a/..a.
+/b/c/.a/./..a/a /b/c/.a/..a/a
+/b/c/.a/./..a/. /b/c/.a/..a
+/b/c/.a/./..a// /b/c/.a/..a
+/b/c/.a/./...aa /b/c/.a/...aa
+/b/c/.a/./...a. /b/c/.a/...a.
+/b/c/.a/./...a/ /b/c/.a/...a
+/b/c/.a/./....a /b/c/.a/....a
+/b/c/.a/./..... /b/c/.a/.....
+/b/c/.a/./..../ /b/c/.a/....
+/b/c/.a/./.../a /b/c/.a/.../a
+/b/c/.a/./.../. /b/c/.a/...
+/b/c/.a/./...// /b/c/.a/...
+/b/c/.a/./../aa /b/c/aa
+/b/c/.a/./../a. /b/c/a.
+/b/c/.a/./../a/ /b/c/a
+/b/c/.a/./../.a /b/c/.a
+/b/c/.a/./../.. /b
+/b/c/.a/./.././ /b/c
+/b/c/.a/./..//a /b/c/a
+/b/c/.a/./..//. /b/c
+/b/c/.a/./../// /b/c
+/b/c/.a/././aaa /b/c/.a/aaa
+/b/c/.a/././aa. /b/c/.a/aa.
+/b/c/.a/././aa/ /b/c/.a/aa
+/b/c/.a/././a.a /b/c/.a/a.a
+/b/c/.a/././a.. /b/c/.a/a..
+/b/c/.a/././a./ /b/c/.a/a.
+/b/c/.a/././a/a /b/c/.a/a/a
+/b/c/.a/././a/. /b/c/.a/a
+/b/c/.a/././a// /b/c/.a/a
+/b/c/.a/././.aa /b/c/.a/.aa
+/b/c/.a/././.a. /b/c/.a/.a.
+/b/c/.a/././.a/ /b/c/.a/.a
+/b/c/.a/././..a /b/c/.a/..a
+/b/c/.a/././... /b/c/.a/...
+/b/c/.a/././../ /b/c
+/b/c/.a/./././a /b/c/.a/a
+/b/c/.a/./././. /b/c/.a
+/b/c/.a/././.// /b/c/.a
+/b/c/.a/././/aa /b/c/.a/aa
+/b/c/.a/././/a. /b/c/.a/a.
+/b/c/.a/././/a/ /b/c/.a/a
+/b/c/.a/././/.a /b/c/.a/.a
+/b/c/.a/././/.. /b/c
+/b/c/.a/././/./ /b/c/.a
+/b/c/.a/././//a /b/c/.a/a
+/b/c/.a/././//. /b/c/.a
+/b/c/.a/././/// /b/c/.a
+/b/c/.a/.//aaaa /b/c/.a/aaaa
+/b/c/.a/.//aaa. /b/c/.a/aaa.
+/b/c/.a/.//aaa/ /b/c/.a/aaa
+/b/c/.a/.//aa.a /b/c/.a/aa.a
+/b/c/.a/.//aa.. /b/c/.a/aa..
+/b/c/.a/.//aa./ /b/c/.a/aa.
+/b/c/.a/.//aa/a /b/c/.a/aa/a
+/b/c/.a/.//aa/. /b/c/.a/aa
+/b/c/.a/.//aa// /b/c/.a/aa
+/b/c/.a/.//a.aa /b/c/.a/a.aa
+/b/c/.a/.//a.a. /b/c/.a/a.a.
+/b/c/.a/.//a.a/ /b/c/.a/a.a
+/b/c/.a/.//a..a /b/c/.a/a..a
+/b/c/.a/.//a... /b/c/.a/a...
+/b/c/.a/.//a../ /b/c/.a/a..
+/b/c/.a/.//a./a /b/c/.a/a./a
+/b/c/.a/.//a./. /b/c/.a/a.
+/b/c/.a/.//a.// /b/c/.a/a.
+/b/c/.a/.//a/aa /b/c/.a/a/aa
+/b/c/.a/.//a/a. /b/c/.a/a/a.
+/b/c/.a/.//a/a/ /b/c/.a/a/a
+/b/c/.a/.//a/.a /b/c/.a/a/.a
+/b/c/.a/.//a/.. /b/c/.a
+/b/c/.a/.//a/./ /b/c/.a/a
+/b/c/.a/.//a//a /b/c/.a/a/a
+/b/c/.a/.//a//. /b/c/.a/a
+/b/c/.a/.//a/// /b/c/.a/a
+/b/c/.a/.//.aaa /b/c/.a/.aaa
+/b/c/.a/.//.aa. /b/c/.a/.aa.
+/b/c/.a/.//.aa/ /b/c/.a/.aa
+/b/c/.a/.//.a.a /b/c/.a/.a.a
+/b/c/.a/.//.a.. /b/c/.a/.a..
+/b/c/.a/.//.a./ /b/c/.a/.a.
+/b/c/.a/.//.a/a /b/c/.a/.a/a
+/b/c/.a/.//.a/. /b/c/.a/.a
+/b/c/.a/.//.a// /b/c/.a/.a
+/b/c/.a/.//..aa /b/c/.a/..aa
+/b/c/.a/.//..a. /b/c/.a/..a.
+/b/c/.a/.//..a/ /b/c/.a/..a
+/b/c/.a/.//...a /b/c/.a/...a
+/b/c/.a/.//.... /b/c/.a/....
+/b/c/.a/.//.../ /b/c/.a/...
+/b/c/.a/.//../a /b/c/a
+/b/c/.a/.//../. /b/c
+/b/c/.a/.//..// /b/c
+/b/c/.a/.//./aa /b/c/.a/aa
+/b/c/.a/.//./a. /b/c/.a/a.
+/b/c/.a/.//./a/ /b/c/.a/a
+/b/c/.a/.//./.a /b/c/.a/.a
+/b/c/.a/.//./.. /b/c
+/b/c/.a/.//././ /b/c/.a
+/b/c/.a/.//.//a /b/c/.a/a
+/b/c/.a/.//.//. /b/c/.a
+/b/c/.a/.//./// /b/c/.a
+/b/c/.a/.///aaa /b/c/.a/aaa
+/b/c/.a/.///aa. /b/c/.a/aa.
+/b/c/.a/.///aa/ /b/c/.a/aa
+/b/c/.a/.///a.a /b/c/.a/a.a
+/b/c/.a/.///a.. /b/c/.a/a..
+/b/c/.a/.///a./ /b/c/.a/a.
+/b/c/.a/.///a/a /b/c/.a/a/a
+/b/c/.a/.///a/. /b/c/.a/a
+/b/c/.a/.///a// /b/c/.a/a
+/b/c/.a/.///.aa /b/c/.a/.aa
+/b/c/.a/.///.a. /b/c/.a/.a.
+/b/c/.a/.///.a/ /b/c/.a/.a
+/b/c/.a/.///..a /b/c/.a/..a
+/b/c/.a/.///... /b/c/.a/...
+/b/c/.a/.///../ /b/c
+/b/c/.a/.///./a /b/c/.a/a
+/b/c/.a/.///./. /b/c/.a
+/b/c/.a/.///.// /b/c/.a
+/b/c/.a/.////aa /b/c/.a/aa
+/b/c/.a/.////a. /b/c/.a/a.
+/b/c/.a/.////a/ /b/c/.a/a
+/b/c/.a/.////.a /b/c/.a/.a
+/b/c/.a/.////.. /b/c
+/b/c/.a/.////./ /b/c/.a
+/b/c/.a/./////a /b/c/.a/a
+/b/c/.a/./////. /b/c/.a
+/b/c/.a/.////// /b/c/.a
+/b/c/.a//aaaaaa /b/c/.a/aaaaaa
+/b/c/.a//aaaaa. /b/c/.a/aaaaa.
+/b/c/.a//aaaaa/ /b/c/.a/aaaaa
+/b/c/.a//aaaa.a /b/c/.a/aaaa.a
+/b/c/.a//aaaa.. /b/c/.a/aaaa..
+/b/c/.a//aaaa./ /b/c/.a/aaaa.
+/b/c/.a//aaaa/a /b/c/.a/aaaa/a
+/b/c/.a//aaaa/. /b/c/.a/aaaa
+/b/c/.a//aaaa// /b/c/.a/aaaa
+/b/c/.a//aaa.aa /b/c/.a/aaa.aa
+/b/c/.a//aaa.a. /b/c/.a/aaa.a.
+/b/c/.a//aaa.a/ /b/c/.a/aaa.a
+/b/c/.a//aaa..a /b/c/.a/aaa..a
+/b/c/.a//aaa... /b/c/.a/aaa...
+/b/c/.a//aaa../ /b/c/.a/aaa..
+/b/c/.a//aaa./a /b/c/.a/aaa./a
+/b/c/.a//aaa./. /b/c/.a/aaa.
+/b/c/.a//aaa.// /b/c/.a/aaa.
+/b/c/.a//aaa/aa /b/c/.a/aaa/aa
+/b/c/.a//aaa/a. /b/c/.a/aaa/a.
+/b/c/.a//aaa/a/ /b/c/.a/aaa/a
+/b/c/.a//aaa/.a /b/c/.a/aaa/.a
+/b/c/.a//aaa/.. /b/c/.a
+/b/c/.a//aaa/./ /b/c/.a/aaa
+/b/c/.a//aaa//a /b/c/.a/aaa/a
+/b/c/.a//aaa//. /b/c/.a/aaa
+/b/c/.a//aaa/// /b/c/.a/aaa
+/b/c/.a//aa.aaa /b/c/.a/aa.aaa
+/b/c/.a//aa.aa. /b/c/.a/aa.aa.
+/b/c/.a//aa.aa/ /b/c/.a/aa.aa
+/b/c/.a//aa.a.a /b/c/.a/aa.a.a
+/b/c/.a//aa.a.. /b/c/.a/aa.a..
+/b/c/.a//aa.a./ /b/c/.a/aa.a.
+/b/c/.a//aa.a/a /b/c/.a/aa.a/a
+/b/c/.a//aa.a/. /b/c/.a/aa.a
+/b/c/.a//aa.a// /b/c/.a/aa.a
+/b/c/.a//aa..aa /b/c/.a/aa..aa
+/b/c/.a//aa..a. /b/c/.a/aa..a.
+/b/c/.a//aa..a/ /b/c/.a/aa..a
+/b/c/.a//aa...a /b/c/.a/aa...a
+/b/c/.a//aa.... /b/c/.a/aa....
+/b/c/.a//aa.../ /b/c/.a/aa...
+/b/c/.a//aa../a /b/c/.a/aa../a
+/b/c/.a//aa../. /b/c/.a/aa..
+/b/c/.a//aa..// /b/c/.a/aa..
+/b/c/.a//aa./aa /b/c/.a/aa./aa
+/b/c/.a//aa./a. /b/c/.a/aa./a.
+/b/c/.a//aa./a/ /b/c/.a/aa./a
+/b/c/.a//aa./.a /b/c/.a/aa./.a
+/b/c/.a//aa./.. /b/c/.a
+/b/c/.a//aa././ /b/c/.a/aa.
+/b/c/.a//aa.//a /b/c/.a/aa./a
+/b/c/.a//aa.//. /b/c/.a/aa.
+/b/c/.a//aa./// /b/c/.a/aa.
+/b/c/.a//aa/aaa /b/c/.a/aa/aaa
+/b/c/.a//aa/aa. /b/c/.a/aa/aa.
+/b/c/.a//aa/aa/ /b/c/.a/aa/aa
+/b/c/.a//aa/a.a /b/c/.a/aa/a.a
+/b/c/.a//aa/a.. /b/c/.a/aa/a..
+/b/c/.a//aa/a./ /b/c/.a/aa/a.
+/b/c/.a//aa/a/a /b/c/.a/aa/a/a
+/b/c/.a//aa/a/. /b/c/.a/aa/a
+/b/c/.a//aa/a// /b/c/.a/aa/a
+/b/c/.a//aa/.aa /b/c/.a/aa/.aa
+/b/c/.a//aa/.a. /b/c/.a/aa/.a.
+/b/c/.a//aa/.a/ /b/c/.a/aa/.a
+/b/c/.a//aa/..a /b/c/.a/aa/..a
+/b/c/.a//aa/... /b/c/.a/aa/...
+/b/c/.a//aa/../ /b/c/.a
+/b/c/.a//aa/./a /b/c/.a/aa/a
+/b/c/.a//aa/./. /b/c/.a/aa
+/b/c/.a//aa/.// /b/c/.a/aa
+/b/c/.a//aa//aa /b/c/.a/aa/aa
+/b/c/.a//aa//a. /b/c/.a/aa/a.
+/b/c/.a//aa//a/ /b/c/.a/aa/a
+/b/c/.a//aa//.a /b/c/.a/aa/.a
+/b/c/.a//aa//.. /b/c/.a
+/b/c/.a//aa//./ /b/c/.a/aa
+/b/c/.a//aa///a /b/c/.a/aa/a
+/b/c/.a//aa///. /b/c/.a/aa
+/b/c/.a//aa//// /b/c/.a/aa
+/b/c/.a//a.aaaa /b/c/.a/a.aaaa
+/b/c/.a//a.aaa. /b/c/.a/a.aaa.
+/b/c/.a//a.aaa/ /b/c/.a/a.aaa
+/b/c/.a//a.aa.a /b/c/.a/a.aa.a
+/b/c/.a//a.aa.. /b/c/.a/a.aa..
+/b/c/.a//a.aa./ /b/c/.a/a.aa.
+/b/c/.a//a.aa/a /b/c/.a/a.aa/a
+/b/c/.a//a.aa/. /b/c/.a/a.aa
+/b/c/.a//a.aa// /b/c/.a/a.aa
+/b/c/.a//a.a.aa /b/c/.a/a.a.aa
+/b/c/.a//a.a.a. /b/c/.a/a.a.a.
+/b/c/.a//a.a.a/ /b/c/.a/a.a.a
+/b/c/.a//a.a..a /b/c/.a/a.a..a
+/b/c/.a//a.a... /b/c/.a/a.a...
+/b/c/.a//a.a../ /b/c/.a/a.a..
+/b/c/.a//a.a./a /b/c/.a/a.a./a
+/b/c/.a//a.a./. /b/c/.a/a.a.
+/b/c/.a//a.a.// /b/c/.a/a.a.
+/b/c/.a//a.a/aa /b/c/.a/a.a/aa
+/b/c/.a//a.a/a. /b/c/.a/a.a/a.
+/b/c/.a//a.a/a/ /b/c/.a/a.a/a
+/b/c/.a//a.a/.a /b/c/.a/a.a/.a
+/b/c/.a//a.a/.. /b/c/.a
+/b/c/.a//a.a/./ /b/c/.a/a.a
+/b/c/.a//a.a//a /b/c/.a/a.a/a
+/b/c/.a//a.a//. /b/c/.a/a.a
+/b/c/.a//a.a/// /b/c/.a/a.a
+/b/c/.a//a..aaa /b/c/.a/a..aaa
+/b/c/.a//a..aa. /b/c/.a/a..aa.
+/b/c/.a//a..aa/ /b/c/.a/a..aa
+/b/c/.a//a..a.a /b/c/.a/a..a.a
+/b/c/.a//a..a.. /b/c/.a/a..a..
+/b/c/.a//a..a./ /b/c/.a/a..a.
+/b/c/.a//a..a/a /b/c/.a/a..a/a
+/b/c/.a//a..a/. /b/c/.a/a..a
+/b/c/.a//a..a// /b/c/.a/a..a
+/b/c/.a//a...aa /b/c/.a/a...aa
+/b/c/.a//a...a. /b/c/.a/a...a.
+/b/c/.a//a...a/ /b/c/.a/a...a
+/b/c/.a//a....a /b/c/.a/a....a
+/b/c/.a//a..... /b/c/.a/a.....
+/b/c/.a//a..../ /b/c/.a/a....
+/b/c/.a//a.../a /b/c/.a/a.../a
+/b/c/.a//a.../. /b/c/.a/a...
+/b/c/.a//a...// /b/c/.a/a...
+/b/c/.a//a../aa /b/c/.a/a../aa
+/b/c/.a//a../a. /b/c/.a/a../a.
+/b/c/.a//a../a/ /b/c/.a/a../a
+/b/c/.a//a../.a /b/c/.a/a../.a
+/b/c/.a//a../.. /b/c/.a
+/b/c/.a//a.././ /b/c/.a/a..
+/b/c/.a//a..//a /b/c/.a/a../a
+/b/c/.a//a..//. /b/c/.a/a..
+/b/c/.a//a../// /b/c/.a/a..
+/b/c/.a//a./aaa /b/c/.a/a./aaa
+/b/c/.a//a./aa. /b/c/.a/a./aa.
+/b/c/.a//a./aa/ /b/c/.a/a./aa
+/b/c/.a//a./a.a /b/c/.a/a./a.a
+/b/c/.a//a./a.. /b/c/.a/a./a..
+/b/c/.a//a./a./ /b/c/.a/a./a.
+/b/c/.a//a./a/a /b/c/.a/a./a/a
+/b/c/.a//a./a/. /b/c/.a/a./a
+/b/c/.a//a./a// /b/c/.a/a./a
+/b/c/.a//a./.aa /b/c/.a/a./.aa
+/b/c/.a//a./.a. /b/c/.a/a./.a.
+/b/c/.a//a./.a/ /b/c/.a/a./.a
+/b/c/.a//a./..a /b/c/.a/a./..a
+/b/c/.a//a./... /b/c/.a/a./...
+/b/c/.a//a./../ /b/c/.a
+/b/c/.a//a././a /b/c/.a/a./a
+/b/c/.a//a././. /b/c/.a/a.
+/b/c/.a//a./.// /b/c/.a/a.
+/b/c/.a//a.//aa /b/c/.a/a./aa
+/b/c/.a//a.//a. /b/c/.a/a./a.
+/b/c/.a//a.//a/ /b/c/.a/a./a
+/b/c/.a//a.//.a /b/c/.a/a./.a
+/b/c/.a//a.//.. /b/c/.a
+/b/c/.a//a.//./ /b/c/.a/a.
+/b/c/.a//a.///a /b/c/.a/a./a
+/b/c/.a//a.///. /b/c/.a/a.
+/b/c/.a//a.//// /b/c/.a/a.
+/b/c/.a//a/aaaa /b/c/.a/a/aaaa
+/b/c/.a//a/aaa. /b/c/.a/a/aaa.
+/b/c/.a//a/aaa/ /b/c/.a/a/aaa
+/b/c/.a//a/aa.a /b/c/.a/a/aa.a
+/b/c/.a//a/aa.. /b/c/.a/a/aa..
+/b/c/.a//a/aa./ /b/c/.a/a/aa.
+/b/c/.a//a/aa/a /b/c/.a/a/aa/a
+/b/c/.a//a/aa/. /b/c/.a/a/aa
+/b/c/.a//a/aa// /b/c/.a/a/aa
+/b/c/.a//a/a.aa /b/c/.a/a/a.aa
+/b/c/.a//a/a.a. /b/c/.a/a/a.a.
+/b/c/.a//a/a.a/ /b/c/.a/a/a.a
+/b/c/.a//a/a..a /b/c/.a/a/a..a
+/b/c/.a//a/a... /b/c/.a/a/a...
+/b/c/.a//a/a../ /b/c/.a/a/a..
+/b/c/.a//a/a./a /b/c/.a/a/a./a
+/b/c/.a//a/a./. /b/c/.a/a/a.
+/b/c/.a//a/a.// /b/c/.a/a/a.
+/b/c/.a//a/a/aa /b/c/.a/a/a/aa
+/b/c/.a//a/a/a. /b/c/.a/a/a/a.
+/b/c/.a//a/a/a/ /b/c/.a/a/a/a
+/b/c/.a//a/a/.a /b/c/.a/a/a/.a
+/b/c/.a//a/a/.. /b/c/.a/a
+/b/c/.a//a/a/./ /b/c/.a/a/a
+/b/c/.a//a/a//a /b/c/.a/a/a/a
+/b/c/.a//a/a//. /b/c/.a/a/a
+/b/c/.a//a/a/// /b/c/.a/a/a
+/b/c/.a//a/.aaa /b/c/.a/a/.aaa
+/b/c/.a//a/.aa. /b/c/.a/a/.aa.
+/b/c/.a//a/.aa/ /b/c/.a/a/.aa
+/b/c/.a//a/.a.a /b/c/.a/a/.a.a
+/b/c/.a//a/.a.. /b/c/.a/a/.a..
+/b/c/.a//a/.a./ /b/c/.a/a/.a.
+/b/c/.a//a/.a/a /b/c/.a/a/.a/a
+/b/c/.a//a/.a/. /b/c/.a/a/.a
+/b/c/.a//a/.a// /b/c/.a/a/.a
+/b/c/.a//a/..aa /b/c/.a/a/..aa
+/b/c/.a//a/..a. /b/c/.a/a/..a.
+/b/c/.a//a/..a/ /b/c/.a/a/..a
+/b/c/.a//a/...a /b/c/.a/a/...a
+/b/c/.a//a/.... /b/c/.a/a/....
+/b/c/.a//a/.../ /b/c/.a/a/...
+/b/c/.a//a/../a /b/c/.a/a
+/b/c/.a//a/../. /b/c/.a
+/b/c/.a//a/..// /b/c/.a
+/b/c/.a//a/./aa /b/c/.a/a/aa
+/b/c/.a//a/./a. /b/c/.a/a/a.
+/b/c/.a//a/./a/ /b/c/.a/a/a
+/b/c/.a//a/./.a /b/c/.a/a/.a
+/b/c/.a//a/./.. /b/c/.a
+/b/c/.a//a/././ /b/c/.a/a
+/b/c/.a//a/.//a /b/c/.a/a/a
+/b/c/.a//a/.//. /b/c/.a/a
+/b/c/.a//a/./// /b/c/.a/a
+/b/c/.a//a//aaa /b/c/.a/a/aaa
+/b/c/.a//a//aa. /b/c/.a/a/aa.
+/b/c/.a//a//aa/ /b/c/.a/a/aa
+/b/c/.a//a//a.a /b/c/.a/a/a.a
+/b/c/.a//a//a.. /b/c/.a/a/a..
+/b/c/.a//a//a./ /b/c/.a/a/a.
+/b/c/.a//a//a/a /b/c/.a/a/a/a
+/b/c/.a//a//a/. /b/c/.a/a/a
+/b/c/.a//a//a// /b/c/.a/a/a
+/b/c/.a//a//.aa /b/c/.a/a/.aa
+/b/c/.a//a//.a. /b/c/.a/a/.a.
+/b/c/.a//a//.a/ /b/c/.a/a/.a
+/b/c/.a//a//..a /b/c/.a/a/..a
+/b/c/.a//a//... /b/c/.a/a/...
+/b/c/.a//a//../ /b/c/.a
+/b/c/.a//a//./a /b/c/.a/a/a
+/b/c/.a//a//./. /b/c/.a/a
+/b/c/.a//a//.// /b/c/.a/a
+/b/c/.a//a///aa /b/c/.a/a/aa
+/b/c/.a//a///a. /b/c/.a/a/a.
+/b/c/.a//a///a/ /b/c/.a/a/a
+/b/c/.a//a///.a /b/c/.a/a/.a
+/b/c/.a//a///.. /b/c/.a
+/b/c/.a//a///./ /b/c/.a/a
+/b/c/.a//a////a /b/c/.a/a/a
+/b/c/.a//a////. /b/c/.a/a
+/b/c/.a//a///// /b/c/.a/a
+/b/c/.a//.aaaaa /b/c/.a/.aaaaa
+/b/c/.a//.aaaa. /b/c/.a/.aaaa.
+/b/c/.a//.aaaa/ /b/c/.a/.aaaa
+/b/c/.a//.aaa.a /b/c/.a/.aaa.a
+/b/c/.a//.aaa.. /b/c/.a/.aaa..
+/b/c/.a//.aaa./ /b/c/.a/.aaa.
+/b/c/.a//.aaa/a /b/c/.a/.aaa/a
+/b/c/.a//.aaa/. /b/c/.a/.aaa
+/b/c/.a//.aaa// /b/c/.a/.aaa
+/b/c/.a//.aa.aa /b/c/.a/.aa.aa
+/b/c/.a//.aa.a. /b/c/.a/.aa.a.
+/b/c/.a//.aa.a/ /b/c/.a/.aa.a
+/b/c/.a//.aa..a /b/c/.a/.aa..a
+/b/c/.a//.aa... /b/c/.a/.aa...
+/b/c/.a//.aa../ /b/c/.a/.aa..
+/b/c/.a//.aa./a /b/c/.a/.aa./a
+/b/c/.a//.aa./. /b/c/.a/.aa.
+/b/c/.a//.aa.// /b/c/.a/.aa.
+/b/c/.a//.aa/aa /b/c/.a/.aa/aa
+/b/c/.a//.aa/a. /b/c/.a/.aa/a.
+/b/c/.a//.aa/a/ /b/c/.a/.aa/a
+/b/c/.a//.aa/.a /b/c/.a/.aa/.a
+/b/c/.a//.aa/.. /b/c/.a
+/b/c/.a//.aa/./ /b/c/.a/.aa
+/b/c/.a//.aa//a /b/c/.a/.aa/a
+/b/c/.a//.aa//. /b/c/.a/.aa
+/b/c/.a//.aa/// /b/c/.a/.aa
+/b/c/.a//.a.aaa /b/c/.a/.a.aaa
+/b/c/.a//.a.aa. /b/c/.a/.a.aa.
+/b/c/.a//.a.aa/ /b/c/.a/.a.aa
+/b/c/.a//.a.a.a /b/c/.a/.a.a.a
+/b/c/.a//.a.a.. /b/c/.a/.a.a..
+/b/c/.a//.a.a./ /b/c/.a/.a.a.
+/b/c/.a//.a.a/a /b/c/.a/.a.a/a
+/b/c/.a//.a.a/. /b/c/.a/.a.a
+/b/c/.a//.a.a// /b/c/.a/.a.a
+/b/c/.a//.a..aa /b/c/.a/.a..aa
+/b/c/.a//.a..a. /b/c/.a/.a..a.
+/b/c/.a//.a..a/ /b/c/.a/.a..a
+/b/c/.a//.a...a /b/c/.a/.a...a
+/b/c/.a//.a.... /b/c/.a/.a....
+/b/c/.a//.a.../ /b/c/.a/.a...
+/b/c/.a//.a../a /b/c/.a/.a../a
+/b/c/.a//.a../. /b/c/.a/.a..
+/b/c/.a//.a..// /b/c/.a/.a..
+/b/c/.a//.a./aa /b/c/.a/.a./aa
+/b/c/.a//.a./a. /b/c/.a/.a./a.
+/b/c/.a//.a./a/ /b/c/.a/.a./a
+/b/c/.a//.a./.a /b/c/.a/.a./.a
+/b/c/.a//.a./.. /b/c/.a
+/b/c/.a//.a././ /b/c/.a/.a.
+/b/c/.a//.a.//a /b/c/.a/.a./a
+/b/c/.a//.a.//. /b/c/.a/.a.
+/b/c/.a//.a./// /b/c/.a/.a.
+/b/c/.a//.a/aaa /b/c/.a/.a/aaa
+/b/c/.a//.a/aa. /b/c/.a/.a/aa.
+/b/c/.a//.a/aa/ /b/c/.a/.a/aa
+/b/c/.a//.a/a.a /b/c/.a/.a/a.a
+/b/c/.a//.a/a.. /b/c/.a/.a/a..
+/b/c/.a//.a/a./ /b/c/.a/.a/a.
+/b/c/.a//.a/a/a /b/c/.a/.a/a/a
+/b/c/.a//.a/a/. /b/c/.a/.a/a
+/b/c/.a//.a/a// /b/c/.a/.a/a
+/b/c/.a//.a/.aa /b/c/.a/.a/.aa
+/b/c/.a//.a/.a. /b/c/.a/.a/.a.
+/b/c/.a//.a/.a/ /b/c/.a/.a/.a
+/b/c/.a//.a/..a /b/c/.a/.a/..a
+/b/c/.a//.a/... /b/c/.a/.a/...
+/b/c/.a//.a/../ /b/c/.a
+/b/c/.a//.a/./a /b/c/.a/.a/a
+/b/c/.a//.a/./. /b/c/.a/.a
+/b/c/.a//.a/.// /b/c/.a/.a
+/b/c/.a//.a//aa /b/c/.a/.a/aa
+/b/c/.a//.a//a. /b/c/.a/.a/a.
+/b/c/.a//.a//a/ /b/c/.a/.a/a
+/b/c/.a//.a//.a /b/c/.a/.a/.a
+/b/c/.a//.a//.. /b/c/.a
+/b/c/.a//.a//./ /b/c/.a/.a
+/b/c/.a//.a///a /b/c/.a/.a/a
+/b/c/.a//.a///. /b/c/.a/.a
+/b/c/.a//.a//// /b/c/.a/.a
+/b/c/.a//..aaaa /b/c/.a/..aaaa
+/b/c/.a//..aaa. /b/c/.a/..aaa.
+/b/c/.a//..aaa/ /b/c/.a/..aaa
+/b/c/.a//..aa.a /b/c/.a/..aa.a
+/b/c/.a//..aa.. /b/c/.a/..aa..
+/b/c/.a//..aa./ /b/c/.a/..aa.
+/b/c/.a//..aa/a /b/c/.a/..aa/a
+/b/c/.a//..aa/. /b/c/.a/..aa
+/b/c/.a//..aa// /b/c/.a/..aa
+/b/c/.a//..a.aa /b/c/.a/..a.aa
+/b/c/.a//..a.a. /b/c/.a/..a.a.
+/b/c/.a//..a.a/ /b/c/.a/..a.a
+/b/c/.a//..a..a /b/c/.a/..a..a
+/b/c/.a//..a... /b/c/.a/..a...
+/b/c/.a//..a../ /b/c/.a/..a..
+/b/c/.a//..a./a /b/c/.a/..a./a
+/b/c/.a//..a./. /b/c/.a/..a.
+/b/c/.a//..a.// /b/c/.a/..a.
+/b/c/.a//..a/aa /b/c/.a/..a/aa
+/b/c/.a//..a/a. /b/c/.a/..a/a.
+/b/c/.a//..a/a/ /b/c/.a/..a/a
+/b/c/.a//..a/.a /b/c/.a/..a/.a
+/b/c/.a//..a/.. /b/c/.a
+/b/c/.a//..a/./ /b/c/.a/..a
+/b/c/.a//..a//a /b/c/.a/..a/a
+/b/c/.a//..a//. /b/c/.a/..a
+/b/c/.a//..a/// /b/c/.a/..a
+/b/c/.a//...aaa /b/c/.a/...aaa
+/b/c/.a//...aa. /b/c/.a/...aa.
+/b/c/.a//...aa/ /b/c/.a/...aa
+/b/c/.a//...a.a /b/c/.a/...a.a
+/b/c/.a//...a.. /b/c/.a/...a..
+/b/c/.a//...a./ /b/c/.a/...a.
+/b/c/.a//...a/a /b/c/.a/...a/a
+/b/c/.a//...a/. /b/c/.a/...a
+/b/c/.a//...a// /b/c/.a/...a
+/b/c/.a//....aa /b/c/.a/....aa
+/b/c/.a//....a. /b/c/.a/....a.
+/b/c/.a//....a/ /b/c/.a/....a
+/b/c/.a//.....a /b/c/.a/.....a
+/b/c/.a//...... /b/c/.a/......
+/b/c/.a//...../ /b/c/.a/.....
+/b/c/.a//..../a /b/c/.a/..../a
+/b/c/.a//..../. /b/c/.a/....
+/b/c/.a//....// /b/c/.a/....
+/b/c/.a//.../aa /b/c/.a/.../aa
+/b/c/.a//.../a. /b/c/.a/.../a.
+/b/c/.a//.../a/ /b/c/.a/.../a
+/b/c/.a//.../.a /b/c/.a/.../.a
+/b/c/.a//.../.. /b/c/.a
+/b/c/.a//..././ /b/c/.a/...
+/b/c/.a//...//a /b/c/.a/.../a
+/b/c/.a//...//. /b/c/.a/...
+/b/c/.a//.../// /b/c/.a/...
+/b/c/.a//../aaa /b/c/aaa
+/b/c/.a//../aa. /b/c/aa.
+/b/c/.a//../aa/ /b/c/aa
+/b/c/.a//../a.a /b/c/a.a
+/b/c/.a//../a.. /b/c/a..
+/b/c/.a//../a./ /b/c/a.
+/b/c/.a//../a/a /b/c/a/a
+/b/c/.a//../a/. /b/c/a
+/b/c/.a//../a// /b/c/a
+/b/c/.a//../.aa /b/c/.aa
+/b/c/.a//../.a. /b/c/.a.
+/b/c/.a//../.a/ /b/c/.a
+/b/c/.a//../..a /b/c/..a
+/b/c/.a//../... /b/c/...
+/b/c/.a//../../ /b
+/b/c/.a//.././a /b/c/a
+/b/c/.a//.././. /b/c
+/b/c/.a//../.// /b/c
+/b/c/.a//..//aa /b/c/aa
+/b/c/.a//..//a. /b/c/a.
+/b/c/.a//..//a/ /b/c/a
+/b/c/.a//..//.a /b/c/.a
+/b/c/.a//..//.. /b
+/b/c/.a//..//./ /b/c
+/b/c/.a//..///a /b/c/a
+/b/c/.a//..///. /b/c
+/b/c/.a//..//// /b/c
+/b/c/.a//./aaaa /b/c/.a/aaaa
+/b/c/.a//./aaa. /b/c/.a/aaa.
+/b/c/.a//./aaa/ /b/c/.a/aaa
+/b/c/.a//./aa.a /b/c/.a/aa.a
+/b/c/.a//./aa.. /b/c/.a/aa..
+/b/c/.a//./aa./ /b/c/.a/aa.
+/b/c/.a//./aa/a /b/c/.a/aa/a
+/b/c/.a//./aa/. /b/c/.a/aa
+/b/c/.a//./aa// /b/c/.a/aa
+/b/c/.a//./a.aa /b/c/.a/a.aa
+/b/c/.a//./a.a. /b/c/.a/a.a.
+/b/c/.a//./a.a/ /b/c/.a/a.a
+/b/c/.a//./a..a /b/c/.a/a..a
+/b/c/.a//./a... /b/c/.a/a...
+/b/c/.a//./a../ /b/c/.a/a..
+/b/c/.a//./a./a /b/c/.a/a./a
+/b/c/.a//./a./. /b/c/.a/a.
+/b/c/.a//./a.// /b/c/.a/a.
+/b/c/.a//./a/aa /b/c/.a/a/aa
+/b/c/.a//./a/a. /b/c/.a/a/a.
+/b/c/.a//./a/a/ /b/c/.a/a/a
+/b/c/.a//./a/.a /b/c/.a/a/.a
+/b/c/.a//./a/.. /b/c/.a
+/b/c/.a//./a/./ /b/c/.a/a
+/b/c/.a//./a//a /b/c/.a/a/a
+/b/c/.a//./a//. /b/c/.a/a
+/b/c/.a//./a/// /b/c/.a/a
+/b/c/.a//./.aaa /b/c/.a/.aaa
+/b/c/.a//./.aa. /b/c/.a/.aa.
+/b/c/.a//./.aa/ /b/c/.a/.aa
+/b/c/.a//./.a.a /b/c/.a/.a.a
+/b/c/.a//./.a.. /b/c/.a/.a..
+/b/c/.a//./.a./ /b/c/.a/.a.
+/b/c/.a//./.a/a /b/c/.a/.a/a
+/b/c/.a//./.a/. /b/c/.a/.a
+/b/c/.a//./.a// /b/c/.a/.a
+/b/c/.a//./..aa /b/c/.a/..aa
+/b/c/.a//./..a. /b/c/.a/..a.
+/b/c/.a//./..a/ /b/c/.a/..a
+/b/c/.a//./...a /b/c/.a/...a
+/b/c/.a//./.... /b/c/.a/....
+/b/c/.a//./.../ /b/c/.a/...
+/b/c/.a//./../a /b/c/a
+/b/c/.a//./../. /b/c
+/b/c/.a//./..// /b/c
+/b/c/.a//././aa /b/c/.a/aa
+/b/c/.a//././a. /b/c/.a/a.
+/b/c/.a//././a/ /b/c/.a/a
+/b/c/.a//././.a /b/c/.a/.a
+/b/c/.a//././.. /b/c
+/b/c/.a//./././ /b/c/.a
+/b/c/.a//././/a /b/c/.a/a
+/b/c/.a//././/. /b/c/.a
+/b/c/.a//././// /b/c/.a
+/b/c/.a//.//aaa /b/c/.a/aaa
+/b/c/.a//.//aa. /b/c/.a/aa.
+/b/c/.a//.//aa/ /b/c/.a/aa
+/b/c/.a//.//a.a /b/c/.a/a.a
+/b/c/.a//.//a.. /b/c/.a/a..
+/b/c/.a//.//a./ /b/c/.a/a.
+/b/c/.a//.//a/a /b/c/.a/a/a
+/b/c/.a//.//a/. /b/c/.a/a
+/b/c/.a//.//a// /b/c/.a/a
+/b/c/.a//.//.aa /b/c/.a/.aa
+/b/c/.a//.//.a. /b/c/.a/.a.
+/b/c/.a//.//.a/ /b/c/.a/.a
+/b/c/.a//.//..a /b/c/.a/..a
+/b/c/.a//.//... /b/c/.a/...
+/b/c/.a//.//../ /b/c
+/b/c/.a//.//./a /b/c/.a/a
+/b/c/.a//.//./. /b/c/.a
+/b/c/.a//.//.// /b/c/.a
+/b/c/.a//.///aa /b/c/.a/aa
+/b/c/.a//.///a. /b/c/.a/a.
+/b/c/.a//.///a/ /b/c/.a/a
+/b/c/.a//.///.a /b/c/.a/.a
+/b/c/.a//.///.. /b/c
+/b/c/.a//.///./ /b/c/.a
+/b/c/.a//.////a /b/c/.a/a
+/b/c/.a//.////. /b/c/.a
+/b/c/.a//.///// /b/c/.a
+/b/c/.a///aaaaa /b/c/.a/aaaaa
+/b/c/.a///aaaa. /b/c/.a/aaaa.
+/b/c/.a///aaaa/ /b/c/.a/aaaa
+/b/c/.a///aaa.a /b/c/.a/aaa.a
+/b/c/.a///aaa.. /b/c/.a/aaa..
+/b/c/.a///aaa./ /b/c/.a/aaa.
+/b/c/.a///aaa/a /b/c/.a/aaa/a
+/b/c/.a///aaa/. /b/c/.a/aaa
+/b/c/.a///aaa// /b/c/.a/aaa
+/b/c/.a///aa.aa /b/c/.a/aa.aa
+/b/c/.a///aa.a. /b/c/.a/aa.a.
+/b/c/.a///aa.a/ /b/c/.a/aa.a
+/b/c/.a///aa..a /b/c/.a/aa..a
+/b/c/.a///aa... /b/c/.a/aa...
+/b/c/.a///aa../ /b/c/.a/aa..
+/b/c/.a///aa./a /b/c/.a/aa./a
+/b/c/.a///aa./. /b/c/.a/aa.
+/b/c/.a///aa.// /b/c/.a/aa.
+/b/c/.a///aa/aa /b/c/.a/aa/aa
+/b/c/.a///aa/a. /b/c/.a/aa/a.
+/b/c/.a///aa/a/ /b/c/.a/aa/a
+/b/c/.a///aa/.a /b/c/.a/aa/.a
+/b/c/.a///aa/.. /b/c/.a
+/b/c/.a///aa/./ /b/c/.a/aa
+/b/c/.a///aa//a /b/c/.a/aa/a
+/b/c/.a///aa//. /b/c/.a/aa
+/b/c/.a///aa/// /b/c/.a/aa
+/b/c/.a///a.aaa /b/c/.a/a.aaa
+/b/c/.a///a.aa. /b/c/.a/a.aa.
+/b/c/.a///a.aa/ /b/c/.a/a.aa
+/b/c/.a///a.a.a /b/c/.a/a.a.a
+/b/c/.a///a.a.. /b/c/.a/a.a..
+/b/c/.a///a.a./ /b/c/.a/a.a.
+/b/c/.a///a.a/a /b/c/.a/a.a/a
+/b/c/.a///a.a/. /b/c/.a/a.a
+/b/c/.a///a.a// /b/c/.a/a.a
+/b/c/.a///a..aa /b/c/.a/a..aa
+/b/c/.a///a..a. /b/c/.a/a..a.
+/b/c/.a///a..a/ /b/c/.a/a..a
+/b/c/.a///a...a /b/c/.a/a...a
+/b/c/.a///a.... /b/c/.a/a....
+/b/c/.a///a.../ /b/c/.a/a...
+/b/c/.a///a../a /b/c/.a/a../a
+/b/c/.a///a../. /b/c/.a/a..
+/b/c/.a///a..// /b/c/.a/a..
+/b/c/.a///a./aa /b/c/.a/a./aa
+/b/c/.a///a./a. /b/c/.a/a./a.
+/b/c/.a///a./a/ /b/c/.a/a./a
+/b/c/.a///a./.a /b/c/.a/a./.a
+/b/c/.a///a./.. /b/c/.a
+/b/c/.a///a././ /b/c/.a/a.
+/b/c/.a///a.//a /b/c/.a/a./a
+/b/c/.a///a.//. /b/c/.a/a.
+/b/c/.a///a./// /b/c/.a/a.
+/b/c/.a///a/aaa /b/c/.a/a/aaa
+/b/c/.a///a/aa. /b/c/.a/a/aa.
+/b/c/.a///a/aa/ /b/c/.a/a/aa
+/b/c/.a///a/a.a /b/c/.a/a/a.a
+/b/c/.a///a/a.. /b/c/.a/a/a..
+/b/c/.a///a/a./ /b/c/.a/a/a.
+/b/c/.a///a/a/a /b/c/.a/a/a/a
+/b/c/.a///a/a/. /b/c/.a/a/a
+/b/c/.a///a/a// /b/c/.a/a/a
+/b/c/.a///a/.aa /b/c/.a/a/.aa
+/b/c/.a///a/.a. /b/c/.a/a/.a.
+/b/c/.a///a/.a/ /b/c/.a/a/.a
+/b/c/.a///a/..a /b/c/.a/a/..a
+/b/c/.a///a/... /b/c/.a/a/...
+/b/c/.a///a/../ /b/c/.a
+/b/c/.a///a/./a /b/c/.a/a/a
+/b/c/.a///a/./. /b/c/.a/a
+/b/c/.a///a/.// /b/c/.a/a
+/b/c/.a///a//aa /b/c/.a/a/aa
+/b/c/.a///a//a. /b/c/.a/a/a.
+/b/c/.a///a//a/ /b/c/.a/a/a
+/b/c/.a///a//.a /b/c/.a/a/.a
+/b/c/.a///a//.. /b/c/.a
+/b/c/.a///a//./ /b/c/.a/a
+/b/c/.a///a///a /b/c/.a/a/a
+/b/c/.a///a///. /b/c/.a/a
+/b/c/.a///a//// /b/c/.a/a
+/b/c/.a///.aaaa /b/c/.a/.aaaa
+/b/c/.a///.aaa. /b/c/.a/.aaa.
+/b/c/.a///.aaa/ /b/c/.a/.aaa
+/b/c/.a///.aa.a /b/c/.a/.aa.a
+/b/c/.a///.aa.. /b/c/.a/.aa..
+/b/c/.a///.aa./ /b/c/.a/.aa.
+/b/c/.a///.aa/a /b/c/.a/.aa/a
+/b/c/.a///.aa/. /b/c/.a/.aa
+/b/c/.a///.aa// /b/c/.a/.aa
+/b/c/.a///.a.aa /b/c/.a/.a.aa
+/b/c/.a///.a.a. /b/c/.a/.a.a.
+/b/c/.a///.a.a/ /b/c/.a/.a.a
+/b/c/.a///.a..a /b/c/.a/.a..a
+/b/c/.a///.a... /b/c/.a/.a...
+/b/c/.a///.a../ /b/c/.a/.a..
+/b/c/.a///.a./a /b/c/.a/.a./a
+/b/c/.a///.a./. /b/c/.a/.a.
+/b/c/.a///.a.// /b/c/.a/.a.
+/b/c/.a///.a/aa /b/c/.a/.a/aa
+/b/c/.a///.a/a. /b/c/.a/.a/a.
+/b/c/.a///.a/a/ /b/c/.a/.a/a
+/b/c/.a///.a/.a /b/c/.a/.a/.a
+/b/c/.a///.a/.. /b/c/.a
+/b/c/.a///.a/./ /b/c/.a/.a
+/b/c/.a///.a//a /b/c/.a/.a/a
+/b/c/.a///.a//. /b/c/.a/.a
+/b/c/.a///.a/// /b/c/.a/.a
+/b/c/.a///..aaa /b/c/.a/..aaa
+/b/c/.a///..aa. /b/c/.a/..aa.
+/b/c/.a///..aa/ /b/c/.a/..aa
+/b/c/.a///..a.a /b/c/.a/..a.a
+/b/c/.a///..a.. /b/c/.a/..a..
+/b/c/.a///..a./ /b/c/.a/..a.
+/b/c/.a///..a/a /b/c/.a/..a/a
+/b/c/.a///..a/. /b/c/.a/..a
+/b/c/.a///..a// /b/c/.a/..a
+/b/c/.a///...aa /b/c/.a/...aa
+/b/c/.a///...a. /b/c/.a/...a.
+/b/c/.a///...a/ /b/c/.a/...a
+/b/c/.a///....a /b/c/.a/....a
+/b/c/.a///..... /b/c/.a/.....
+/b/c/.a///..../ /b/c/.a/....
+/b/c/.a///.../a /b/c/.a/.../a
+/b/c/.a///.../. /b/c/.a/...
+/b/c/.a///...// /b/c/.a/...
+/b/c/.a///../aa /b/c/aa
+/b/c/.a///../a. /b/c/a.
+/b/c/.a///../a/ /b/c/a
+/b/c/.a///../.a /b/c/.a
+/b/c/.a///../.. /b
+/b/c/.a///.././ /b/c
+/b/c/.a///..//a /b/c/a
+/b/c/.a///..//. /b/c
+/b/c/.a///../// /b/c
+/b/c/.a///./aaa /b/c/.a/aaa
+/b/c/.a///./aa. /b/c/.a/aa.
+/b/c/.a///./aa/ /b/c/.a/aa
+/b/c/.a///./a.a /b/c/.a/a.a
+/b/c/.a///./a.. /b/c/.a/a..
+/b/c/.a///./a./ /b/c/.a/a.
+/b/c/.a///./a/a /b/c/.a/a/a
+/b/c/.a///./a/. /b/c/.a/a
+/b/c/.a///./a// /b/c/.a/a
+/b/c/.a///./.aa /b/c/.a/.aa
+/b/c/.a///./.a. /b/c/.a/.a.
+/b/c/.a///./.a/ /b/c/.a/.a
+/b/c/.a///./..a /b/c/.a/..a
+/b/c/.a///./... /b/c/.a/...
+/b/c/.a///./../ /b/c
+/b/c/.a///././a /b/c/.a/a
+/b/c/.a///././. /b/c/.a
+/b/c/.a///./.// /b/c/.a
+/b/c/.a///.//aa /b/c/.a/aa
+/b/c/.a///.//a. /b/c/.a/a.
+/b/c/.a///.//a/ /b/c/.a/a
+/b/c/.a///.//.a /b/c/.a/.a
+/b/c/.a///.//.. /b/c
+/b/c/.a///.//./ /b/c/.a
+/b/c/.a///.///a /b/c/.a/a
+/b/c/.a///.///. /b/c/.a
+/b/c/.a///.//// /b/c/.a
+/b/c/.a////aaaa /b/c/.a/aaaa
+/b/c/.a////aaa. /b/c/.a/aaa.
+/b/c/.a////aaa/ /b/c/.a/aaa
+/b/c/.a////aa.a /b/c/.a/aa.a
+/b/c/.a////aa.. /b/c/.a/aa..
+/b/c/.a////aa./ /b/c/.a/aa.
+/b/c/.a////aa/a /b/c/.a/aa/a
+/b/c/.a////aa/. /b/c/.a/aa
+/b/c/.a////aa// /b/c/.a/aa
+/b/c/.a////a.aa /b/c/.a/a.aa
+/b/c/.a////a.a. /b/c/.a/a.a.
+/b/c/.a////a.a/ /b/c/.a/a.a
+/b/c/.a////a..a /b/c/.a/a..a
+/b/c/.a////a... /b/c/.a/a...
+/b/c/.a////a../ /b/c/.a/a..
+/b/c/.a////a./a /b/c/.a/a./a
+/b/c/.a////a./. /b/c/.a/a.
+/b/c/.a////a.// /b/c/.a/a.
+/b/c/.a////a/aa /b/c/.a/a/aa
+/b/c/.a////a/a. /b/c/.a/a/a.
+/b/c/.a////a/a/ /b/c/.a/a/a
+/b/c/.a////a/.a /b/c/.a/a/.a
+/b/c/.a////a/.. /b/c/.a
+/b/c/.a////a/./ /b/c/.a/a
+/b/c/.a////a//a /b/c/.a/a/a
+/b/c/.a////a//. /b/c/.a/a
+/b/c/.a////a/// /b/c/.a/a
+/b/c/.a////.aaa /b/c/.a/.aaa
+/b/c/.a////.aa. /b/c/.a/.aa.
+/b/c/.a////.aa/ /b/c/.a/.aa
+/b/c/.a////.a.a /b/c/.a/.a.a
+/b/c/.a////.a.. /b/c/.a/.a..
+/b/c/.a////.a./ /b/c/.a/.a.
+/b/c/.a////.a/a /b/c/.a/.a/a
+/b/c/.a////.a/. /b/c/.a/.a
+/b/c/.a////.a// /b/c/.a/.a
+/b/c/.a////..aa /b/c/.a/..aa
+/b/c/.a////..a. /b/c/.a/..a.
+/b/c/.a////..a/ /b/c/.a/..a
+/b/c/.a////...a /b/c/.a/...a
+/b/c/.a////.... /b/c/.a/....
+/b/c/.a////.../ /b/c/.a/...
+/b/c/.a////../a /b/c/a
+/b/c/.a////../. /b/c
+/b/c/.a////..// /b/c
+/b/c/.a////./aa /b/c/.a/aa
+/b/c/.a////./a. /b/c/.a/a.
+/b/c/.a////./a/ /b/c/.a/a
+/b/c/.a////./.a /b/c/.a/.a
+/b/c/.a////./.. /b/c
+/b/c/.a////././ /b/c/.a
+/b/c/.a////.//a /b/c/.a/a
+/b/c/.a////.//. /b/c/.a
+/b/c/.a////./// /b/c/.a
+/b/c/.a/////aaa /b/c/.a/aaa
+/b/c/.a/////aa. /b/c/.a/aa.
+/b/c/.a/////aa/ /b/c/.a/aa
+/b/c/.a/////a.a /b/c/.a/a.a
+/b/c/.a/////a.. /b/c/.a/a..
+/b/c/.a/////a./ /b/c/.a/a.
+/b/c/.a/////a/a /b/c/.a/a/a
+/b/c/.a/////a/. /b/c/.a/a
+/b/c/.a/////a// /b/c/.a/a
+/b/c/.a/////.aa /b/c/.a/.aa
+/b/c/.a/////.a. /b/c/.a/.a.
+/b/c/.a/////.a/ /b/c/.a/.a
+/b/c/.a/////..a /b/c/.a/..a
+/b/c/.a/////... /b/c/.a/...
+/b/c/.a/////../ /b/c
+/b/c/.a/////./a /b/c/.a/a
+/b/c/.a/////./. /b/c/.a
+/b/c/.a/////.// /b/c/.a
+/b/c/.a//////aa /b/c/.a/aa
+/b/c/.a//////a. /b/c/.a/a.
+/b/c/.a//////a/ /b/c/.a/a
+/b/c/.a//////.a /b/c/.a/.a
+/b/c/.a//////.. /b/c
+/b/c/.a//////./ /b/c/.a
+/b/c/.a///////a /b/c/.a/a
+/b/c/.a///////. /b/c/.a
+/b/c/.a//////// /b/c/.a
+/b/c/..aaaaaaaa /b/c/..aaaaaaaa
+/b/c/..aaaaaaa. /b/c/..aaaaaaa.
+/b/c/..aaaaaaa/ /b/c/..aaaaaaa
+/b/c/..aaaaaa.a /b/c/..aaaaaa.a
+/b/c/..aaaaaa.. /b/c/..aaaaaa..
+/b/c/..aaaaaa./ /b/c/..aaaaaa.
+/b/c/..aaaaaa/a /b/c/..aaaaaa/a
+/b/c/..aaaaaa/. /b/c/..aaaaaa
+/b/c/..aaaaaa// /b/c/..aaaaaa
+/b/c/..aaaaa.aa /b/c/..aaaaa.aa
+/b/c/..aaaaa.a. /b/c/..aaaaa.a.
+/b/c/..aaaaa.a/ /b/c/..aaaaa.a
+/b/c/..aaaaa..a /b/c/..aaaaa..a
+/b/c/..aaaaa... /b/c/..aaaaa...
+/b/c/..aaaaa../ /b/c/..aaaaa..
+/b/c/..aaaaa./a /b/c/..aaaaa./a
+/b/c/..aaaaa./. /b/c/..aaaaa.
+/b/c/..aaaaa.// /b/c/..aaaaa.
+/b/c/..aaaaa/aa /b/c/..aaaaa/aa
+/b/c/..aaaaa/a. /b/c/..aaaaa/a.
+/b/c/..aaaaa/a/ /b/c/..aaaaa/a
+/b/c/..aaaaa/.a /b/c/..aaaaa/.a
+/b/c/..aaaaa/.. /b/c
+/b/c/..aaaaa/./ /b/c/..aaaaa
+/b/c/..aaaaa//a /b/c/..aaaaa/a
+/b/c/..aaaaa//. /b/c/..aaaaa
+/b/c/..aaaaa/// /b/c/..aaaaa
+/b/c/..aaaa.aaa /b/c/..aaaa.aaa
+/b/c/..aaaa.aa. /b/c/..aaaa.aa.
+/b/c/..aaaa.aa/ /b/c/..aaaa.aa
+/b/c/..aaaa.a.a /b/c/..aaaa.a.a
+/b/c/..aaaa.a.. /b/c/..aaaa.a..
+/b/c/..aaaa.a./ /b/c/..aaaa.a.
+/b/c/..aaaa.a/a /b/c/..aaaa.a/a
+/b/c/..aaaa.a/. /b/c/..aaaa.a
+/b/c/..aaaa.a// /b/c/..aaaa.a
+/b/c/..aaaa..aa /b/c/..aaaa..aa
+/b/c/..aaaa..a. /b/c/..aaaa..a.
+/b/c/..aaaa..a/ /b/c/..aaaa..a
+/b/c/..aaaa...a /b/c/..aaaa...a
+/b/c/..aaaa.... /b/c/..aaaa....
+/b/c/..aaaa.../ /b/c/..aaaa...
+/b/c/..aaaa../a /b/c/..aaaa../a
+/b/c/..aaaa../. /b/c/..aaaa..
+/b/c/..aaaa..// /b/c/..aaaa..
+/b/c/..aaaa./aa /b/c/..aaaa./aa
+/b/c/..aaaa./a. /b/c/..aaaa./a.
+/b/c/..aaaa./a/ /b/c/..aaaa./a
+/b/c/..aaaa./.a /b/c/..aaaa./.a
+/b/c/..aaaa./.. /b/c
+/b/c/..aaaa././ /b/c/..aaaa.
+/b/c/..aaaa.//a /b/c/..aaaa./a
+/b/c/..aaaa.//. /b/c/..aaaa.
+/b/c/..aaaa./// /b/c/..aaaa.
+/b/c/..aaaa/aaa /b/c/..aaaa/aaa
+/b/c/..aaaa/aa. /b/c/..aaaa/aa.
+/b/c/..aaaa/aa/ /b/c/..aaaa/aa
+/b/c/..aaaa/a.a /b/c/..aaaa/a.a
+/b/c/..aaaa/a.. /b/c/..aaaa/a..
+/b/c/..aaaa/a./ /b/c/..aaaa/a.
+/b/c/..aaaa/a/a /b/c/..aaaa/a/a
+/b/c/..aaaa/a/. /b/c/..aaaa/a
+/b/c/..aaaa/a// /b/c/..aaaa/a
+/b/c/..aaaa/.aa /b/c/..aaaa/.aa
+/b/c/..aaaa/.a. /b/c/..aaaa/.a.
+/b/c/..aaaa/.a/ /b/c/..aaaa/.a
+/b/c/..aaaa/..a /b/c/..aaaa/..a
+/b/c/..aaaa/... /b/c/..aaaa/...
+/b/c/..aaaa/../ /b/c
+/b/c/..aaaa/./a /b/c/..aaaa/a
+/b/c/..aaaa/./. /b/c/..aaaa
+/b/c/..aaaa/.// /b/c/..aaaa
+/b/c/..aaaa//aa /b/c/..aaaa/aa
+/b/c/..aaaa//a. /b/c/..aaaa/a.
+/b/c/..aaaa//a/ /b/c/..aaaa/a
+/b/c/..aaaa//.a /b/c/..aaaa/.a
+/b/c/..aaaa//.. /b/c
+/b/c/..aaaa//./ /b/c/..aaaa
+/b/c/..aaaa///a /b/c/..aaaa/a
+/b/c/..aaaa///. /b/c/..aaaa
+/b/c/..aaaa//// /b/c/..aaaa
+/b/c/..aaa.aaaa /b/c/..aaa.aaaa
+/b/c/..aaa.aaa. /b/c/..aaa.aaa.
+/b/c/..aaa.aaa/ /b/c/..aaa.aaa
+/b/c/..aaa.aa.a /b/c/..aaa.aa.a
+/b/c/..aaa.aa.. /b/c/..aaa.aa..
+/b/c/..aaa.aa./ /b/c/..aaa.aa.
+/b/c/..aaa.aa/a /b/c/..aaa.aa/a
+/b/c/..aaa.aa/. /b/c/..aaa.aa
+/b/c/..aaa.aa// /b/c/..aaa.aa
+/b/c/..aaa.a.aa /b/c/..aaa.a.aa
+/b/c/..aaa.a.a. /b/c/..aaa.a.a.
+/b/c/..aaa.a.a/ /b/c/..aaa.a.a
+/b/c/..aaa.a..a /b/c/..aaa.a..a
+/b/c/..aaa.a... /b/c/..aaa.a...
+/b/c/..aaa.a../ /b/c/..aaa.a..
+/b/c/..aaa.a./a /b/c/..aaa.a./a
+/b/c/..aaa.a./. /b/c/..aaa.a.
+/b/c/..aaa.a.// /b/c/..aaa.a.
+/b/c/..aaa.a/aa /b/c/..aaa.a/aa
+/b/c/..aaa.a/a. /b/c/..aaa.a/a.
+/b/c/..aaa.a/a/ /b/c/..aaa.a/a
+/b/c/..aaa.a/.a /b/c/..aaa.a/.a
+/b/c/..aaa.a/.. /b/c
+/b/c/..aaa.a/./ /b/c/..aaa.a
+/b/c/..aaa.a//a /b/c/..aaa.a/a
+/b/c/..aaa.a//. /b/c/..aaa.a
+/b/c/..aaa.a/// /b/c/..aaa.a
+/b/c/..aaa..aaa /b/c/..aaa..aaa
+/b/c/..aaa..aa. /b/c/..aaa..aa.
+/b/c/..aaa..aa/ /b/c/..aaa..aa
+/b/c/..aaa..a.a /b/c/..aaa..a.a
+/b/c/..aaa..a.. /b/c/..aaa..a..
+/b/c/..aaa..a./ /b/c/..aaa..a.
+/b/c/..aaa..a/a /b/c/..aaa..a/a
+/b/c/..aaa..a/. /b/c/..aaa..a
+/b/c/..aaa..a// /b/c/..aaa..a
+/b/c/..aaa...aa /b/c/..aaa...aa
+/b/c/..aaa...a. /b/c/..aaa...a.
+/b/c/..aaa...a/ /b/c/..aaa...a
+/b/c/..aaa....a /b/c/..aaa....a
+/b/c/..aaa..... /b/c/..aaa.....
+/b/c/..aaa..../ /b/c/..aaa....
+/b/c/..aaa.../a /b/c/..aaa.../a
+/b/c/..aaa.../. /b/c/..aaa...
+/b/c/..aaa...// /b/c/..aaa...
+/b/c/..aaa../aa /b/c/..aaa../aa
+/b/c/..aaa../a. /b/c/..aaa../a.
+/b/c/..aaa../a/ /b/c/..aaa../a
+/b/c/..aaa../.a /b/c/..aaa../.a
+/b/c/..aaa../.. /b/c
+/b/c/..aaa.././ /b/c/..aaa..
+/b/c/..aaa..//a /b/c/..aaa../a
+/b/c/..aaa..//. /b/c/..aaa..
+/b/c/..aaa../// /b/c/..aaa..
+/b/c/..aaa./aaa /b/c/..aaa./aaa
+/b/c/..aaa./aa. /b/c/..aaa./aa.
+/b/c/..aaa./aa/ /b/c/..aaa./aa
+/b/c/..aaa./a.a /b/c/..aaa./a.a
+/b/c/..aaa./a.. /b/c/..aaa./a..
+/b/c/..aaa./a./ /b/c/..aaa./a.
+/b/c/..aaa./a/a /b/c/..aaa./a/a
+/b/c/..aaa./a/. /b/c/..aaa./a
+/b/c/..aaa./a// /b/c/..aaa./a
+/b/c/..aaa./.aa /b/c/..aaa./.aa
+/b/c/..aaa./.a. /b/c/..aaa./.a.
+/b/c/..aaa./.a/ /b/c/..aaa./.a
+/b/c/..aaa./..a /b/c/..aaa./..a
+/b/c/..aaa./... /b/c/..aaa./...
+/b/c/..aaa./../ /b/c
+/b/c/..aaa././a /b/c/..aaa./a
+/b/c/..aaa././. /b/c/..aaa.
+/b/c/..aaa./.// /b/c/..aaa.
+/b/c/..aaa.//aa /b/c/..aaa./aa
+/b/c/..aaa.//a. /b/c/..aaa./a.
+/b/c/..aaa.//a/ /b/c/..aaa./a
+/b/c/..aaa.//.a /b/c/..aaa./.a
+/b/c/..aaa.//.. /b/c
+/b/c/..aaa.//./ /b/c/..aaa.
+/b/c/..aaa.///a /b/c/..aaa./a
+/b/c/..aaa.///. /b/c/..aaa.
+/b/c/..aaa.//// /b/c/..aaa.
+/b/c/..aaa/aaaa /b/c/..aaa/aaaa
+/b/c/..aaa/aaa. /b/c/..aaa/aaa.
+/b/c/..aaa/aaa/ /b/c/..aaa/aaa
+/b/c/..aaa/aa.a /b/c/..aaa/aa.a
+/b/c/..aaa/aa.. /b/c/..aaa/aa..
+/b/c/..aaa/aa./ /b/c/..aaa/aa.
+/b/c/..aaa/aa/a /b/c/..aaa/aa/a
+/b/c/..aaa/aa/. /b/c/..aaa/aa
+/b/c/..aaa/aa// /b/c/..aaa/aa
+/b/c/..aaa/a.aa /b/c/..aaa/a.aa
+/b/c/..aaa/a.a. /b/c/..aaa/a.a.
+/b/c/..aaa/a.a/ /b/c/..aaa/a.a
+/b/c/..aaa/a..a /b/c/..aaa/a..a
+/b/c/..aaa/a... /b/c/..aaa/a...
+/b/c/..aaa/a../ /b/c/..aaa/a..
+/b/c/..aaa/a./a /b/c/..aaa/a./a
+/b/c/..aaa/a./. /b/c/..aaa/a.
+/b/c/..aaa/a.// /b/c/..aaa/a.
+/b/c/..aaa/a/aa /b/c/..aaa/a/aa
+/b/c/..aaa/a/a. /b/c/..aaa/a/a.
+/b/c/..aaa/a/a/ /b/c/..aaa/a/a
+/b/c/..aaa/a/.a /b/c/..aaa/a/.a
+/b/c/..aaa/a/.. /b/c/..aaa
+/b/c/..aaa/a/./ /b/c/..aaa/a
+/b/c/..aaa/a//a /b/c/..aaa/a/a
+/b/c/..aaa/a//. /b/c/..aaa/a
+/b/c/..aaa/a/// /b/c/..aaa/a
+/b/c/..aaa/.aaa /b/c/..aaa/.aaa
+/b/c/..aaa/.aa. /b/c/..aaa/.aa.
+/b/c/..aaa/.aa/ /b/c/..aaa/.aa
+/b/c/..aaa/.a.a /b/c/..aaa/.a.a
+/b/c/..aaa/.a.. /b/c/..aaa/.a..
+/b/c/..aaa/.a./ /b/c/..aaa/.a.
+/b/c/..aaa/.a/a /b/c/..aaa/.a/a
+/b/c/..aaa/.a/. /b/c/..aaa/.a
+/b/c/..aaa/.a// /b/c/..aaa/.a
+/b/c/..aaa/..aa /b/c/..aaa/..aa
+/b/c/..aaa/..a. /b/c/..aaa/..a.
+/b/c/..aaa/..a/ /b/c/..aaa/..a
+/b/c/..aaa/...a /b/c/..aaa/...a
+/b/c/..aaa/.... /b/c/..aaa/....
+/b/c/..aaa/.../ /b/c/..aaa/...
+/b/c/..aaa/../a /b/c/a
+/b/c/..aaa/../. /b/c
+/b/c/..aaa/..// /b/c
+/b/c/..aaa/./aa /b/c/..aaa/aa
+/b/c/..aaa/./a. /b/c/..aaa/a.
+/b/c/..aaa/./a/ /b/c/..aaa/a
+/b/c/..aaa/./.a /b/c/..aaa/.a
+/b/c/..aaa/./.. /b/c
+/b/c/..aaa/././ /b/c/..aaa
+/b/c/..aaa/.//a /b/c/..aaa/a
+/b/c/..aaa/.//. /b/c/..aaa
+/b/c/..aaa/./// /b/c/..aaa
+/b/c/..aaa//aaa /b/c/..aaa/aaa
+/b/c/..aaa//aa. /b/c/..aaa/aa.
+/b/c/..aaa//aa/ /b/c/..aaa/aa
+/b/c/..aaa//a.a /b/c/..aaa/a.a
+/b/c/..aaa//a.. /b/c/..aaa/a..
+/b/c/..aaa//a./ /b/c/..aaa/a.
+/b/c/..aaa//a/a /b/c/..aaa/a/a
+/b/c/..aaa//a/. /b/c/..aaa/a
+/b/c/..aaa//a// /b/c/..aaa/a
+/b/c/..aaa//.aa /b/c/..aaa/.aa
+/b/c/..aaa//.a. /b/c/..aaa/.a.
+/b/c/..aaa//.a/ /b/c/..aaa/.a
+/b/c/..aaa//..a /b/c/..aaa/..a
+/b/c/..aaa//... /b/c/..aaa/...
+/b/c/..aaa//../ /b/c
+/b/c/..aaa//./a /b/c/..aaa/a
+/b/c/..aaa//./. /b/c/..aaa
+/b/c/..aaa//.// /b/c/..aaa
+/b/c/..aaa///aa /b/c/..aaa/aa
+/b/c/..aaa///a. /b/c/..aaa/a.
+/b/c/..aaa///a/ /b/c/..aaa/a
+/b/c/..aaa///.a /b/c/..aaa/.a
+/b/c/..aaa///.. /b/c
+/b/c/..aaa///./ /b/c/..aaa
+/b/c/..aaa////a /b/c/..aaa/a
+/b/c/..aaa////. /b/c/..aaa
+/b/c/..aaa///// /b/c/..aaa
+/b/c/..aa.aaaaa /b/c/..aa.aaaaa
+/b/c/..aa.aaaa. /b/c/..aa.aaaa.
+/b/c/..aa.aaaa/ /b/c/..aa.aaaa
+/b/c/..aa.aaa.a /b/c/..aa.aaa.a
+/b/c/..aa.aaa.. /b/c/..aa.aaa..
+/b/c/..aa.aaa./ /b/c/..aa.aaa.
+/b/c/..aa.aaa/a /b/c/..aa.aaa/a
+/b/c/..aa.aaa/. /b/c/..aa.aaa
+/b/c/..aa.aaa// /b/c/..aa.aaa
+/b/c/..aa.aa.aa /b/c/..aa.aa.aa
+/b/c/..aa.aa.a. /b/c/..aa.aa.a.
+/b/c/..aa.aa.a/ /b/c/..aa.aa.a
+/b/c/..aa.aa..a /b/c/..aa.aa..a
+/b/c/..aa.aa... /b/c/..aa.aa...
+/b/c/..aa.aa../ /b/c/..aa.aa..
+/b/c/..aa.aa./a /b/c/..aa.aa./a
+/b/c/..aa.aa./. /b/c/..aa.aa.
+/b/c/..aa.aa.// /b/c/..aa.aa.
+/b/c/..aa.aa/aa /b/c/..aa.aa/aa
+/b/c/..aa.aa/a. /b/c/..aa.aa/a.
+/b/c/..aa.aa/a/ /b/c/..aa.aa/a
+/b/c/..aa.aa/.a /b/c/..aa.aa/.a
+/b/c/..aa.aa/.. /b/c
+/b/c/..aa.aa/./ /b/c/..aa.aa
+/b/c/..aa.aa//a /b/c/..aa.aa/a
+/b/c/..aa.aa//. /b/c/..aa.aa
+/b/c/..aa.aa/// /b/c/..aa.aa
+/b/c/..aa.a.aaa /b/c/..aa.a.aaa
+/b/c/..aa.a.aa. /b/c/..aa.a.aa.
+/b/c/..aa.a.aa/ /b/c/..aa.a.aa
+/b/c/..aa.a.a.a /b/c/..aa.a.a.a
+/b/c/..aa.a.a.. /b/c/..aa.a.a..
+/b/c/..aa.a.a./ /b/c/..aa.a.a.
+/b/c/..aa.a.a/a /b/c/..aa.a.a/a
+/b/c/..aa.a.a/. /b/c/..aa.a.a
+/b/c/..aa.a.a// /b/c/..aa.a.a
+/b/c/..aa.a..aa /b/c/..aa.a..aa
+/b/c/..aa.a..a. /b/c/..aa.a..a.
+/b/c/..aa.a..a/ /b/c/..aa.a..a
+/b/c/..aa.a...a /b/c/..aa.a...a
+/b/c/..aa.a.... /b/c/..aa.a....
+/b/c/..aa.a.../ /b/c/..aa.a...
+/b/c/..aa.a../a /b/c/..aa.a../a
+/b/c/..aa.a../. /b/c/..aa.a..
+/b/c/..aa.a..// /b/c/..aa.a..
+/b/c/..aa.a./aa /b/c/..aa.a./aa
+/b/c/..aa.a./a. /b/c/..aa.a./a.
+/b/c/..aa.a./a/ /b/c/..aa.a./a
+/b/c/..aa.a./.a /b/c/..aa.a./.a
+/b/c/..aa.a./.. /b/c
+/b/c/..aa.a././ /b/c/..aa.a.
+/b/c/..aa.a.//a /b/c/..aa.a./a
+/b/c/..aa.a.//. /b/c/..aa.a.
+/b/c/..aa.a./// /b/c/..aa.a.
+/b/c/..aa.a/aaa /b/c/..aa.a/aaa
+/b/c/..aa.a/aa. /b/c/..aa.a/aa.
+/b/c/..aa.a/aa/ /b/c/..aa.a/aa
+/b/c/..aa.a/a.a /b/c/..aa.a/a.a
+/b/c/..aa.a/a.. /b/c/..aa.a/a..
+/b/c/..aa.a/a./ /b/c/..aa.a/a.
+/b/c/..aa.a/a/a /b/c/..aa.a/a/a
+/b/c/..aa.a/a/. /b/c/..aa.a/a
+/b/c/..aa.a/a// /b/c/..aa.a/a
+/b/c/..aa.a/.aa /b/c/..aa.a/.aa
+/b/c/..aa.a/.a. /b/c/..aa.a/.a.
+/b/c/..aa.a/.a/ /b/c/..aa.a/.a
+/b/c/..aa.a/..a /b/c/..aa.a/..a
+/b/c/..aa.a/... /b/c/..aa.a/...
+/b/c/..aa.a/../ /b/c
+/b/c/..aa.a/./a /b/c/..aa.a/a
+/b/c/..aa.a/./. /b/c/..aa.a
+/b/c/..aa.a/.// /b/c/..aa.a
+/b/c/..aa.a//aa /b/c/..aa.a/aa
+/b/c/..aa.a//a. /b/c/..aa.a/a.
+/b/c/..aa.a//a/ /b/c/..aa.a/a
+/b/c/..aa.a//.a /b/c/..aa.a/.a
+/b/c/..aa.a//.. /b/c
+/b/c/..aa.a//./ /b/c/..aa.a
+/b/c/..aa.a///a /b/c/..aa.a/a
+/b/c/..aa.a///. /b/c/..aa.a
+/b/c/..aa.a//// /b/c/..aa.a
+/b/c/..aa..aaaa /b/c/..aa..aaaa
+/b/c/..aa..aaa. /b/c/..aa..aaa.
+/b/c/..aa..aaa/ /b/c/..aa..aaa
+/b/c/..aa..aa.a /b/c/..aa..aa.a
+/b/c/..aa..aa.. /b/c/..aa..aa..
+/b/c/..aa..aa./ /b/c/..aa..aa.
+/b/c/..aa..aa/a /b/c/..aa..aa/a
+/b/c/..aa..aa/. /b/c/..aa..aa
+/b/c/..aa..aa// /b/c/..aa..aa
+/b/c/..aa..a.aa /b/c/..aa..a.aa
+/b/c/..aa..a.a. /b/c/..aa..a.a.
+/b/c/..aa..a.a/ /b/c/..aa..a.a
+/b/c/..aa..a..a /b/c/..aa..a..a
+/b/c/..aa..a... /b/c/..aa..a...
+/b/c/..aa..a../ /b/c/..aa..a..
+/b/c/..aa..a./a /b/c/..aa..a./a
+/b/c/..aa..a./. /b/c/..aa..a.
+/b/c/..aa..a.// /b/c/..aa..a.
+/b/c/..aa..a/aa /b/c/..aa..a/aa
+/b/c/..aa..a/a. /b/c/..aa..a/a.
+/b/c/..aa..a/a/ /b/c/..aa..a/a
+/b/c/..aa..a/.a /b/c/..aa..a/.a
+/b/c/..aa..a/.. /b/c
+/b/c/..aa..a/./ /b/c/..aa..a
+/b/c/..aa..a//a /b/c/..aa..a/a
+/b/c/..aa..a//. /b/c/..aa..a
+/b/c/..aa..a/// /b/c/..aa..a
+/b/c/..aa...aaa /b/c/..aa...aaa
+/b/c/..aa...aa. /b/c/..aa...aa.
+/b/c/..aa...aa/ /b/c/..aa...aa
+/b/c/..aa...a.a /b/c/..aa...a.a
+/b/c/..aa...a.. /b/c/..aa...a..
+/b/c/..aa...a./ /b/c/..aa...a.
+/b/c/..aa...a/a /b/c/..aa...a/a
+/b/c/..aa...a/. /b/c/..aa...a
+/b/c/..aa...a// /b/c/..aa...a
+/b/c/..aa....aa /b/c/..aa....aa
+/b/c/..aa....a. /b/c/..aa....a.
+/b/c/..aa....a/ /b/c/..aa....a
+/b/c/..aa.....a /b/c/..aa.....a
+/b/c/..aa...... /b/c/..aa......
+/b/c/..aa...../ /b/c/..aa.....
+/b/c/..aa..../a /b/c/..aa..../a
+/b/c/..aa..../. /b/c/..aa....
+/b/c/..aa....// /b/c/..aa....
+/b/c/..aa.../aa /b/c/..aa.../aa
+/b/c/..aa.../a. /b/c/..aa.../a.
+/b/c/..aa.../a/ /b/c/..aa.../a
+/b/c/..aa.../.a /b/c/..aa.../.a
+/b/c/..aa.../.. /b/c
+/b/c/..aa..././ /b/c/..aa...
+/b/c/..aa...//a /b/c/..aa.../a
+/b/c/..aa...//. /b/c/..aa...
+/b/c/..aa.../// /b/c/..aa...
+/b/c/..aa../aaa /b/c/..aa../aaa
+/b/c/..aa../aa. /b/c/..aa../aa.
+/b/c/..aa../aa/ /b/c/..aa../aa
+/b/c/..aa../a.a /b/c/..aa../a.a
+/b/c/..aa../a.. /b/c/..aa../a..
+/b/c/..aa../a./ /b/c/..aa../a.
+/b/c/..aa../a/a /b/c/..aa../a/a
+/b/c/..aa../a/. /b/c/..aa../a
+/b/c/..aa../a// /b/c/..aa../a
+/b/c/..aa../.aa /b/c/..aa../.aa
+/b/c/..aa../.a. /b/c/..aa../.a.
+/b/c/..aa../.a/ /b/c/..aa../.a
+/b/c/..aa../..a /b/c/..aa../..a
+/b/c/..aa../... /b/c/..aa../...
+/b/c/..aa../../ /b/c
+/b/c/..aa.././a /b/c/..aa../a
+/b/c/..aa.././. /b/c/..aa..
+/b/c/..aa../.// /b/c/..aa..
+/b/c/..aa..//aa /b/c/..aa../aa
+/b/c/..aa..//a. /b/c/..aa../a.
+/b/c/..aa..//a/ /b/c/..aa../a
+/b/c/..aa..//.a /b/c/..aa../.a
+/b/c/..aa..//.. /b/c
+/b/c/..aa..//./ /b/c/..aa..
+/b/c/..aa..///a /b/c/..aa../a
+/b/c/..aa..///. /b/c/..aa..
+/b/c/..aa..//// /b/c/..aa..
+/b/c/..aa./aaaa /b/c/..aa./aaaa
+/b/c/..aa./aaa. /b/c/..aa./aaa.
+/b/c/..aa./aaa/ /b/c/..aa./aaa
+/b/c/..aa./aa.a /b/c/..aa./aa.a
+/b/c/..aa./aa.. /b/c/..aa./aa..
+/b/c/..aa./aa./ /b/c/..aa./aa.
+/b/c/..aa./aa/a /b/c/..aa./aa/a
+/b/c/..aa./aa/. /b/c/..aa./aa
+/b/c/..aa./aa// /b/c/..aa./aa
+/b/c/..aa./a.aa /b/c/..aa./a.aa
+/b/c/..aa./a.a. /b/c/..aa./a.a.
+/b/c/..aa./a.a/ /b/c/..aa./a.a
+/b/c/..aa./a..a /b/c/..aa./a..a
+/b/c/..aa./a... /b/c/..aa./a...
+/b/c/..aa./a../ /b/c/..aa./a..
+/b/c/..aa./a./a /b/c/..aa./a./a
+/b/c/..aa./a./. /b/c/..aa./a.
+/b/c/..aa./a.// /b/c/..aa./a.
+/b/c/..aa./a/aa /b/c/..aa./a/aa
+/b/c/..aa./a/a. /b/c/..aa./a/a.
+/b/c/..aa./a/a/ /b/c/..aa./a/a
+/b/c/..aa./a/.a /b/c/..aa./a/.a
+/b/c/..aa./a/.. /b/c/..aa.
+/b/c/..aa./a/./ /b/c/..aa./a
+/b/c/..aa./a//a /b/c/..aa./a/a
+/b/c/..aa./a//. /b/c/..aa./a
+/b/c/..aa./a/// /b/c/..aa./a
+/b/c/..aa./.aaa /b/c/..aa./.aaa
+/b/c/..aa./.aa. /b/c/..aa./.aa.
+/b/c/..aa./.aa/ /b/c/..aa./.aa
+/b/c/..aa./.a.a /b/c/..aa./.a.a
+/b/c/..aa./.a.. /b/c/..aa./.a..
+/b/c/..aa./.a./ /b/c/..aa./.a.
+/b/c/..aa./.a/a /b/c/..aa./.a/a
+/b/c/..aa./.a/. /b/c/..aa./.a
+/b/c/..aa./.a// /b/c/..aa./.a
+/b/c/..aa./..aa /b/c/..aa./..aa
+/b/c/..aa./..a. /b/c/..aa./..a.
+/b/c/..aa./..a/ /b/c/..aa./..a
+/b/c/..aa./...a /b/c/..aa./...a
+/b/c/..aa./.... /b/c/..aa./....
+/b/c/..aa./.../ /b/c/..aa./...
+/b/c/..aa./../a /b/c/a
+/b/c/..aa./../. /b/c
+/b/c/..aa./..// /b/c
+/b/c/..aa././aa /b/c/..aa./aa
+/b/c/..aa././a. /b/c/..aa./a.
+/b/c/..aa././a/ /b/c/..aa./a
+/b/c/..aa././.a /b/c/..aa./.a
+/b/c/..aa././.. /b/c
+/b/c/..aa./././ /b/c/..aa.
+/b/c/..aa././/a /b/c/..aa./a
+/b/c/..aa././/. /b/c/..aa.
+/b/c/..aa././// /b/c/..aa.
+/b/c/..aa.//aaa /b/c/..aa./aaa
+/b/c/..aa.//aa. /b/c/..aa./aa.
+/b/c/..aa.//aa/ /b/c/..aa./aa
+/b/c/..aa.//a.a /b/c/..aa./a.a
+/b/c/..aa.//a.. /b/c/..aa./a..
+/b/c/..aa.//a./ /b/c/..aa./a.
+/b/c/..aa.//a/a /b/c/..aa./a/a
+/b/c/..aa.//a/. /b/c/..aa./a
+/b/c/..aa.//a// /b/c/..aa./a
+/b/c/..aa.//.aa /b/c/..aa./.aa
+/b/c/..aa.//.a. /b/c/..aa./.a.
+/b/c/..aa.//.a/ /b/c/..aa./.a
+/b/c/..aa.//..a /b/c/..aa./..a
+/b/c/..aa.//... /b/c/..aa./...
+/b/c/..aa.//../ /b/c
+/b/c/..aa.//./a /b/c/..aa./a
+/b/c/..aa.//./. /b/c/..aa.
+/b/c/..aa.//.// /b/c/..aa.
+/b/c/..aa.///aa /b/c/..aa./aa
+/b/c/..aa.///a. /b/c/..aa./a.
+/b/c/..aa.///a/ /b/c/..aa./a
+/b/c/..aa.///.a /b/c/..aa./.a
+/b/c/..aa.///.. /b/c
+/b/c/..aa.///./ /b/c/..aa.
+/b/c/..aa.////a /b/c/..aa./a
+/b/c/..aa.////. /b/c/..aa.
+/b/c/..aa.///// /b/c/..aa.
+/b/c/..aa/aaaaa /b/c/..aa/aaaaa
+/b/c/..aa/aaaa. /b/c/..aa/aaaa.
+/b/c/..aa/aaaa/ /b/c/..aa/aaaa
+/b/c/..aa/aaa.a /b/c/..aa/aaa.a
+/b/c/..aa/aaa.. /b/c/..aa/aaa..
+/b/c/..aa/aaa./ /b/c/..aa/aaa.
+/b/c/..aa/aaa/a /b/c/..aa/aaa/a
+/b/c/..aa/aaa/. /b/c/..aa/aaa
+/b/c/..aa/aaa// /b/c/..aa/aaa
+/b/c/..aa/aa.aa /b/c/..aa/aa.aa
+/b/c/..aa/aa.a. /b/c/..aa/aa.a.
+/b/c/..aa/aa.a/ /b/c/..aa/aa.a
+/b/c/..aa/aa..a /b/c/..aa/aa..a
+/b/c/..aa/aa... /b/c/..aa/aa...
+/b/c/..aa/aa../ /b/c/..aa/aa..
+/b/c/..aa/aa./a /b/c/..aa/aa./a
+/b/c/..aa/aa./. /b/c/..aa/aa.
+/b/c/..aa/aa.// /b/c/..aa/aa.
+/b/c/..aa/aa/aa /b/c/..aa/aa/aa
+/b/c/..aa/aa/a. /b/c/..aa/aa/a.
+/b/c/..aa/aa/a/ /b/c/..aa/aa/a
+/b/c/..aa/aa/.a /b/c/..aa/aa/.a
+/b/c/..aa/aa/.. /b/c/..aa
+/b/c/..aa/aa/./ /b/c/..aa/aa
+/b/c/..aa/aa//a /b/c/..aa/aa/a
+/b/c/..aa/aa//. /b/c/..aa/aa
+/b/c/..aa/aa/// /b/c/..aa/aa
+/b/c/..aa/a.aaa /b/c/..aa/a.aaa
+/b/c/..aa/a.aa. /b/c/..aa/a.aa.
+/b/c/..aa/a.aa/ /b/c/..aa/a.aa
+/b/c/..aa/a.a.a /b/c/..aa/a.a.a
+/b/c/..aa/a.a.. /b/c/..aa/a.a..
+/b/c/..aa/a.a./ /b/c/..aa/a.a.
+/b/c/..aa/a.a/a /b/c/..aa/a.a/a
+/b/c/..aa/a.a/. /b/c/..aa/a.a
+/b/c/..aa/a.a// /b/c/..aa/a.a
+/b/c/..aa/a..aa /b/c/..aa/a..aa
+/b/c/..aa/a..a. /b/c/..aa/a..a.
+/b/c/..aa/a..a/ /b/c/..aa/a..a
+/b/c/..aa/a...a /b/c/..aa/a...a
+/b/c/..aa/a.... /b/c/..aa/a....
+/b/c/..aa/a.../ /b/c/..aa/a...
+/b/c/..aa/a../a /b/c/..aa/a../a
+/b/c/..aa/a../. /b/c/..aa/a..
+/b/c/..aa/a..// /b/c/..aa/a..
+/b/c/..aa/a./aa /b/c/..aa/a./aa
+/b/c/..aa/a./a. /b/c/..aa/a./a.
+/b/c/..aa/a./a/ /b/c/..aa/a./a
+/b/c/..aa/a./.a /b/c/..aa/a./.a
+/b/c/..aa/a./.. /b/c/..aa
+/b/c/..aa/a././ /b/c/..aa/a.
+/b/c/..aa/a.//a /b/c/..aa/a./a
+/b/c/..aa/a.//. /b/c/..aa/a.
+/b/c/..aa/a./// /b/c/..aa/a.
+/b/c/..aa/a/aaa /b/c/..aa/a/aaa
+/b/c/..aa/a/aa. /b/c/..aa/a/aa.
+/b/c/..aa/a/aa/ /b/c/..aa/a/aa
+/b/c/..aa/a/a.a /b/c/..aa/a/a.a
+/b/c/..aa/a/a.. /b/c/..aa/a/a..
+/b/c/..aa/a/a./ /b/c/..aa/a/a.
+/b/c/..aa/a/a/a /b/c/..aa/a/a/a
+/b/c/..aa/a/a/. /b/c/..aa/a/a
+/b/c/..aa/a/a// /b/c/..aa/a/a
+/b/c/..aa/a/.aa /b/c/..aa/a/.aa
+/b/c/..aa/a/.a. /b/c/..aa/a/.a.
+/b/c/..aa/a/.a/ /b/c/..aa/a/.a
+/b/c/..aa/a/..a /b/c/..aa/a/..a
+/b/c/..aa/a/... /b/c/..aa/a/...
+/b/c/..aa/a/../ /b/c/..aa
+/b/c/..aa/a/./a /b/c/..aa/a/a
+/b/c/..aa/a/./. /b/c/..aa/a
+/b/c/..aa/a/.// /b/c/..aa/a
+/b/c/..aa/a//aa /b/c/..aa/a/aa
+/b/c/..aa/a//a. /b/c/..aa/a/a.
+/b/c/..aa/a//a/ /b/c/..aa/a/a
+/b/c/..aa/a//.a /b/c/..aa/a/.a
+/b/c/..aa/a//.. /b/c/..aa
+/b/c/..aa/a//./ /b/c/..aa/a
+/b/c/..aa/a///a /b/c/..aa/a/a
+/b/c/..aa/a///. /b/c/..aa/a
+/b/c/..aa/a//// /b/c/..aa/a
+/b/c/..aa/.aaaa /b/c/..aa/.aaaa
+/b/c/..aa/.aaa. /b/c/..aa/.aaa.
+/b/c/..aa/.aaa/ /b/c/..aa/.aaa
+/b/c/..aa/.aa.a /b/c/..aa/.aa.a
+/b/c/..aa/.aa.. /b/c/..aa/.aa..
+/b/c/..aa/.aa./ /b/c/..aa/.aa.
+/b/c/..aa/.aa/a /b/c/..aa/.aa/a
+/b/c/..aa/.aa/. /b/c/..aa/.aa
+/b/c/..aa/.aa// /b/c/..aa/.aa
+/b/c/..aa/.a.aa /b/c/..aa/.a.aa
+/b/c/..aa/.a.a. /b/c/..aa/.a.a.
+/b/c/..aa/.a.a/ /b/c/..aa/.a.a
+/b/c/..aa/.a..a /b/c/..aa/.a..a
+/b/c/..aa/.a... /b/c/..aa/.a...
+/b/c/..aa/.a../ /b/c/..aa/.a..
+/b/c/..aa/.a./a /b/c/..aa/.a./a
+/b/c/..aa/.a./. /b/c/..aa/.a.
+/b/c/..aa/.a.// /b/c/..aa/.a.
+/b/c/..aa/.a/aa /b/c/..aa/.a/aa
+/b/c/..aa/.a/a. /b/c/..aa/.a/a.
+/b/c/..aa/.a/a/ /b/c/..aa/.a/a
+/b/c/..aa/.a/.a /b/c/..aa/.a/.a
+/b/c/..aa/.a/.. /b/c/..aa
+/b/c/..aa/.a/./ /b/c/..aa/.a
+/b/c/..aa/.a//a /b/c/..aa/.a/a
+/b/c/..aa/.a//. /b/c/..aa/.a
+/b/c/..aa/.a/// /b/c/..aa/.a
+/b/c/..aa/..aaa /b/c/..aa/..aaa
+/b/c/..aa/..aa. /b/c/..aa/..aa.
+/b/c/..aa/..aa/ /b/c/..aa/..aa
+/b/c/..aa/..a.a /b/c/..aa/..a.a
+/b/c/..aa/..a.. /b/c/..aa/..a..
+/b/c/..aa/..a./ /b/c/..aa/..a.
+/b/c/..aa/..a/a /b/c/..aa/..a/a
+/b/c/..aa/..a/. /b/c/..aa/..a
+/b/c/..aa/..a// /b/c/..aa/..a
+/b/c/..aa/...aa /b/c/..aa/...aa
+/b/c/..aa/...a. /b/c/..aa/...a.
+/b/c/..aa/...a/ /b/c/..aa/...a
+/b/c/..aa/....a /b/c/..aa/....a
+/b/c/..aa/..... /b/c/..aa/.....
+/b/c/..aa/..../ /b/c/..aa/....
+/b/c/..aa/.../a /b/c/..aa/.../a
+/b/c/..aa/.../. /b/c/..aa/...
+/b/c/..aa/...// /b/c/..aa/...
+/b/c/..aa/../aa /b/c/aa
+/b/c/..aa/../a. /b/c/a.
+/b/c/..aa/../a/ /b/c/a
+/b/c/..aa/../.a /b/c/.a
+/b/c/..aa/../.. /b
+/b/c/..aa/.././ /b/c
+/b/c/..aa/..//a /b/c/a
+/b/c/..aa/..//. /b/c
+/b/c/..aa/../// /b/c
+/b/c/..aa/./aaa /b/c/..aa/aaa
+/b/c/..aa/./aa. /b/c/..aa/aa.
+/b/c/..aa/./aa/ /b/c/..aa/aa
+/b/c/..aa/./a.a /b/c/..aa/a.a
+/b/c/..aa/./a.. /b/c/..aa/a..
+/b/c/..aa/./a./ /b/c/..aa/a.
+/b/c/..aa/./a/a /b/c/..aa/a/a
+/b/c/..aa/./a/. /b/c/..aa/a
+/b/c/..aa/./a// /b/c/..aa/a
+/b/c/..aa/./.aa /b/c/..aa/.aa
+/b/c/..aa/./.a. /b/c/..aa/.a.
+/b/c/..aa/./.a/ /b/c/..aa/.a
+/b/c/..aa/./..a /b/c/..aa/..a
+/b/c/..aa/./... /b/c/..aa/...
+/b/c/..aa/./../ /b/c
+/b/c/..aa/././a /b/c/..aa/a
+/b/c/..aa/././. /b/c/..aa
+/b/c/..aa/./.// /b/c/..aa
+/b/c/..aa/.//aa /b/c/..aa/aa
+/b/c/..aa/.//a. /b/c/..aa/a.
+/b/c/..aa/.//a/ /b/c/..aa/a
+/b/c/..aa/.//.a /b/c/..aa/.a
+/b/c/..aa/.//.. /b/c
+/b/c/..aa/.//./ /b/c/..aa
+/b/c/..aa/.///a /b/c/..aa/a
+/b/c/..aa/.///. /b/c/..aa
+/b/c/..aa/.//// /b/c/..aa
+/b/c/..aa//aaaa /b/c/..aa/aaaa
+/b/c/..aa//aaa. /b/c/..aa/aaa.
+/b/c/..aa//aaa/ /b/c/..aa/aaa
+/b/c/..aa//aa.a /b/c/..aa/aa.a
+/b/c/..aa//aa.. /b/c/..aa/aa..
+/b/c/..aa//aa./ /b/c/..aa/aa.
+/b/c/..aa//aa/a /b/c/..aa/aa/a
+/b/c/..aa//aa/. /b/c/..aa/aa
+/b/c/..aa//aa// /b/c/..aa/aa
+/b/c/..aa//a.aa /b/c/..aa/a.aa
+/b/c/..aa//a.a. /b/c/..aa/a.a.
+/b/c/..aa//a.a/ /b/c/..aa/a.a
+/b/c/..aa//a..a /b/c/..aa/a..a
+/b/c/..aa//a... /b/c/..aa/a...
+/b/c/..aa//a../ /b/c/..aa/a..
+/b/c/..aa//a./a /b/c/..aa/a./a
+/b/c/..aa//a./. /b/c/..aa/a.
+/b/c/..aa//a.// /b/c/..aa/a.
+/b/c/..aa//a/aa /b/c/..aa/a/aa
+/b/c/..aa//a/a. /b/c/..aa/a/a.
+/b/c/..aa//a/a/ /b/c/..aa/a/a
+/b/c/..aa//a/.a /b/c/..aa/a/.a
+/b/c/..aa//a/.. /b/c/..aa
+/b/c/..aa//a/./ /b/c/..aa/a
+/b/c/..aa//a//a /b/c/..aa/a/a
+/b/c/..aa//a//. /b/c/..aa/a
+/b/c/..aa//a/// /b/c/..aa/a
+/b/c/..aa//.aaa /b/c/..aa/.aaa
+/b/c/..aa//.aa. /b/c/..aa/.aa.
+/b/c/..aa//.aa/ /b/c/..aa/.aa
+/b/c/..aa//.a.a /b/c/..aa/.a.a
+/b/c/..aa//.a.. /b/c/..aa/.a..
+/b/c/..aa//.a./ /b/c/..aa/.a.
+/b/c/..aa//.a/a /b/c/..aa/.a/a
+/b/c/..aa//.a/. /b/c/..aa/.a
+/b/c/..aa//.a// /b/c/..aa/.a
+/b/c/..aa//..aa /b/c/..aa/..aa
+/b/c/..aa//..a. /b/c/..aa/..a.
+/b/c/..aa//..a/ /b/c/..aa/..a
+/b/c/..aa//...a /b/c/..aa/...a
+/b/c/..aa//.... /b/c/..aa/....
+/b/c/..aa//.../ /b/c/..aa/...
+/b/c/..aa//../a /b/c/a
+/b/c/..aa//../. /b/c
+/b/c/..aa//..// /b/c
+/b/c/..aa//./aa /b/c/..aa/aa
+/b/c/..aa//./a. /b/c/..aa/a.
+/b/c/..aa//./a/ /b/c/..aa/a
+/b/c/..aa//./.a /b/c/..aa/.a
+/b/c/..aa//./.. /b/c
+/b/c/..aa//././ /b/c/..aa
+/b/c/..aa//.//a /b/c/..aa/a
+/b/c/..aa//.//. /b/c/..aa
+/b/c/..aa//./// /b/c/..aa
+/b/c/..aa///aaa /b/c/..aa/aaa
+/b/c/..aa///aa. /b/c/..aa/aa.
+/b/c/..aa///aa/ /b/c/..aa/aa
+/b/c/..aa///a.a /b/c/..aa/a.a
+/b/c/..aa///a.. /b/c/..aa/a..
+/b/c/..aa///a./ /b/c/..aa/a.
+/b/c/..aa///a/a /b/c/..aa/a/a
+/b/c/..aa///a/. /b/c/..aa/a
+/b/c/..aa///a// /b/c/..aa/a
+/b/c/..aa///.aa /b/c/..aa/.aa
+/b/c/..aa///.a. /b/c/..aa/.a.
+/b/c/..aa///.a/ /b/c/..aa/.a
+/b/c/..aa///..a /b/c/..aa/..a
+/b/c/..aa///... /b/c/..aa/...
+/b/c/..aa///../ /b/c
+/b/c/..aa///./a /b/c/..aa/a
+/b/c/..aa///./. /b/c/..aa
+/b/c/..aa///.// /b/c/..aa
+/b/c/..aa////aa /b/c/..aa/aa
+/b/c/..aa////a. /b/c/..aa/a.
+/b/c/..aa////a/ /b/c/..aa/a
+/b/c/..aa////.a /b/c/..aa/.a
+/b/c/..aa////.. /b/c
+/b/c/..aa////./ /b/c/..aa
+/b/c/..aa/////a /b/c/..aa/a
+/b/c/..aa/////. /b/c/..aa
+/b/c/..aa////// /b/c/..aa
+/b/c/..a.aaaaaa /b/c/..a.aaaaaa
+/b/c/..a.aaaaa. /b/c/..a.aaaaa.
+/b/c/..a.aaaaa/ /b/c/..a.aaaaa
+/b/c/..a.aaaa.a /b/c/..a.aaaa.a
+/b/c/..a.aaaa.. /b/c/..a.aaaa..
+/b/c/..a.aaaa./ /b/c/..a.aaaa.
+/b/c/..a.aaaa/a /b/c/..a.aaaa/a
+/b/c/..a.aaaa/. /b/c/..a.aaaa
+/b/c/..a.aaaa// /b/c/..a.aaaa
+/b/c/..a.aaa.aa /b/c/..a.aaa.aa
+/b/c/..a.aaa.a. /b/c/..a.aaa.a.
+/b/c/..a.aaa.a/ /b/c/..a.aaa.a
+/b/c/..a.aaa..a /b/c/..a.aaa..a
+/b/c/..a.aaa... /b/c/..a.aaa...
+/b/c/..a.aaa../ /b/c/..a.aaa..
+/b/c/..a.aaa./a /b/c/..a.aaa./a
+/b/c/..a.aaa./. /b/c/..a.aaa.
+/b/c/..a.aaa.// /b/c/..a.aaa.
+/b/c/..a.aaa/aa /b/c/..a.aaa/aa
+/b/c/..a.aaa/a. /b/c/..a.aaa/a.
+/b/c/..a.aaa/a/ /b/c/..a.aaa/a
+/b/c/..a.aaa/.a /b/c/..a.aaa/.a
+/b/c/..a.aaa/.. /b/c
+/b/c/..a.aaa/./ /b/c/..a.aaa
+/b/c/..a.aaa//a /b/c/..a.aaa/a
+/b/c/..a.aaa//. /b/c/..a.aaa
+/b/c/..a.aaa/// /b/c/..a.aaa
+/b/c/..a.aa.aaa /b/c/..a.aa.aaa
+/b/c/..a.aa.aa. /b/c/..a.aa.aa.
+/b/c/..a.aa.aa/ /b/c/..a.aa.aa
+/b/c/..a.aa.a.a /b/c/..a.aa.a.a
+/b/c/..a.aa.a.. /b/c/..a.aa.a..
+/b/c/..a.aa.a./ /b/c/..a.aa.a.
+/b/c/..a.aa.a/a /b/c/..a.aa.a/a
+/b/c/..a.aa.a/. /b/c/..a.aa.a
+/b/c/..a.aa.a// /b/c/..a.aa.a
+/b/c/..a.aa..aa /b/c/..a.aa..aa
+/b/c/..a.aa..a. /b/c/..a.aa..a.
+/b/c/..a.aa..a/ /b/c/..a.aa..a
+/b/c/..a.aa...a /b/c/..a.aa...a
+/b/c/..a.aa.... /b/c/..a.aa....
+/b/c/..a.aa.../ /b/c/..a.aa...
+/b/c/..a.aa../a /b/c/..a.aa../a
+/b/c/..a.aa../. /b/c/..a.aa..
+/b/c/..a.aa..// /b/c/..a.aa..
+/b/c/..a.aa./aa /b/c/..a.aa./aa
+/b/c/..a.aa./a. /b/c/..a.aa./a.
+/b/c/..a.aa./a/ /b/c/..a.aa./a
+/b/c/..a.aa./.a /b/c/..a.aa./.a
+/b/c/..a.aa./.. /b/c
+/b/c/..a.aa././ /b/c/..a.aa.
+/b/c/..a.aa.//a /b/c/..a.aa./a
+/b/c/..a.aa.//. /b/c/..a.aa.
+/b/c/..a.aa./// /b/c/..a.aa.
+/b/c/..a.aa/aaa /b/c/..a.aa/aaa
+/b/c/..a.aa/aa. /b/c/..a.aa/aa.
+/b/c/..a.aa/aa/ /b/c/..a.aa/aa
+/b/c/..a.aa/a.a /b/c/..a.aa/a.a
+/b/c/..a.aa/a.. /b/c/..a.aa/a..
+/b/c/..a.aa/a./ /b/c/..a.aa/a.
+/b/c/..a.aa/a/a /b/c/..a.aa/a/a
+/b/c/..a.aa/a/. /b/c/..a.aa/a
+/b/c/..a.aa/a// /b/c/..a.aa/a
+/b/c/..a.aa/.aa /b/c/..a.aa/.aa
+/b/c/..a.aa/.a. /b/c/..a.aa/.a.
+/b/c/..a.aa/.a/ /b/c/..a.aa/.a
+/b/c/..a.aa/..a /b/c/..a.aa/..a
+/b/c/..a.aa/... /b/c/..a.aa/...
+/b/c/..a.aa/../ /b/c
+/b/c/..a.aa/./a /b/c/..a.aa/a
+/b/c/..a.aa/./. /b/c/..a.aa
+/b/c/..a.aa/.// /b/c/..a.aa
+/b/c/..a.aa//aa /b/c/..a.aa/aa
+/b/c/..a.aa//a. /b/c/..a.aa/a.
+/b/c/..a.aa//a/ /b/c/..a.aa/a
+/b/c/..a.aa//.a /b/c/..a.aa/.a
+/b/c/..a.aa//.. /b/c
+/b/c/..a.aa//./ /b/c/..a.aa
+/b/c/..a.aa///a /b/c/..a.aa/a
+/b/c/..a.aa///. /b/c/..a.aa
+/b/c/..a.aa//// /b/c/..a.aa
+/b/c/..a.a.aaaa /b/c/..a.a.aaaa
+/b/c/..a.a.aaa. /b/c/..a.a.aaa.
+/b/c/..a.a.aaa/ /b/c/..a.a.aaa
+/b/c/..a.a.aa.a /b/c/..a.a.aa.a
+/b/c/..a.a.aa.. /b/c/..a.a.aa..
+/b/c/..a.a.aa./ /b/c/..a.a.aa.
+/b/c/..a.a.aa/a /b/c/..a.a.aa/a
+/b/c/..a.a.aa/. /b/c/..a.a.aa
+/b/c/..a.a.aa// /b/c/..a.a.aa
+/b/c/..a.a.a.aa /b/c/..a.a.a.aa
+/b/c/..a.a.a.a. /b/c/..a.a.a.a.
+/b/c/..a.a.a.a/ /b/c/..a.a.a.a
+/b/c/..a.a.a..a /b/c/..a.a.a..a
+/b/c/..a.a.a... /b/c/..a.a.a...
+/b/c/..a.a.a../ /b/c/..a.a.a..
+/b/c/..a.a.a./a /b/c/..a.a.a./a
+/b/c/..a.a.a./. /b/c/..a.a.a.
+/b/c/..a.a.a.// /b/c/..a.a.a.
+/b/c/..a.a.a/aa /b/c/..a.a.a/aa
+/b/c/..a.a.a/a. /b/c/..a.a.a/a.
+/b/c/..a.a.a/a/ /b/c/..a.a.a/a
+/b/c/..a.a.a/.a /b/c/..a.a.a/.a
+/b/c/..a.a.a/.. /b/c
+/b/c/..a.a.a/./ /b/c/..a.a.a
+/b/c/..a.a.a//a /b/c/..a.a.a/a
+/b/c/..a.a.a//. /b/c/..a.a.a
+/b/c/..a.a.a/// /b/c/..a.a.a
+/b/c/..a.a..aaa /b/c/..a.a..aaa
+/b/c/..a.a..aa. /b/c/..a.a..aa.
+/b/c/..a.a..aa/ /b/c/..a.a..aa
+/b/c/..a.a..a.a /b/c/..a.a..a.a
+/b/c/..a.a..a.. /b/c/..a.a..a..
+/b/c/..a.a..a./ /b/c/..a.a..a.
+/b/c/..a.a..a/a /b/c/..a.a..a/a
+/b/c/..a.a..a/. /b/c/..a.a..a
+/b/c/..a.a..a// /b/c/..a.a..a
+/b/c/..a.a...aa /b/c/..a.a...aa
+/b/c/..a.a...a. /b/c/..a.a...a.
+/b/c/..a.a...a/ /b/c/..a.a...a
+/b/c/..a.a....a /b/c/..a.a....a
+/b/c/..a.a..... /b/c/..a.a.....
+/b/c/..a.a..../ /b/c/..a.a....
+/b/c/..a.a.../a /b/c/..a.a.../a
+/b/c/..a.a.../. /b/c/..a.a...
+/b/c/..a.a...// /b/c/..a.a...
+/b/c/..a.a../aa /b/c/..a.a../aa
+/b/c/..a.a../a. /b/c/..a.a../a.
+/b/c/..a.a../a/ /b/c/..a.a../a
+/b/c/..a.a../.a /b/c/..a.a../.a
+/b/c/..a.a../.. /b/c
+/b/c/..a.a.././ /b/c/..a.a..
+/b/c/..a.a..//a /b/c/..a.a../a
+/b/c/..a.a..//. /b/c/..a.a..
+/b/c/..a.a../// /b/c/..a.a..
+/b/c/..a.a./aaa /b/c/..a.a./aaa
+/b/c/..a.a./aa. /b/c/..a.a./aa.
+/b/c/..a.a./aa/ /b/c/..a.a./aa
+/b/c/..a.a./a.a /b/c/..a.a./a.a
+/b/c/..a.a./a.. /b/c/..a.a./a..
+/b/c/..a.a./a./ /b/c/..a.a./a.
+/b/c/..a.a./a/a /b/c/..a.a./a/a
+/b/c/..a.a./a/. /b/c/..a.a./a
+/b/c/..a.a./a// /b/c/..a.a./a
+/b/c/..a.a./.aa /b/c/..a.a./.aa
+/b/c/..a.a./.a. /b/c/..a.a./.a.
+/b/c/..a.a./.a/ /b/c/..a.a./.a
+/b/c/..a.a./..a /b/c/..a.a./..a
+/b/c/..a.a./... /b/c/..a.a./...
+/b/c/..a.a./../ /b/c
+/b/c/..a.a././a /b/c/..a.a./a
+/b/c/..a.a././. /b/c/..a.a.
+/b/c/..a.a./.// /b/c/..a.a.
+/b/c/..a.a.//aa /b/c/..a.a./aa
+/b/c/..a.a.//a. /b/c/..a.a./a.
+/b/c/..a.a.//a/ /b/c/..a.a./a
+/b/c/..a.a.//.a /b/c/..a.a./.a
+/b/c/..a.a.//.. /b/c
+/b/c/..a.a.//./ /b/c/..a.a.
+/b/c/..a.a.///a /b/c/..a.a./a
+/b/c/..a.a.///. /b/c/..a.a.
+/b/c/..a.a.//// /b/c/..a.a.
+/b/c/..a.a/aaaa /b/c/..a.a/aaaa
+/b/c/..a.a/aaa. /b/c/..a.a/aaa.
+/b/c/..a.a/aaa/ /b/c/..a.a/aaa
+/b/c/..a.a/aa.a /b/c/..a.a/aa.a
+/b/c/..a.a/aa.. /b/c/..a.a/aa..
+/b/c/..a.a/aa./ /b/c/..a.a/aa.
+/b/c/..a.a/aa/a /b/c/..a.a/aa/a
+/b/c/..a.a/aa/. /b/c/..a.a/aa
+/b/c/..a.a/aa// /b/c/..a.a/aa
+/b/c/..a.a/a.aa /b/c/..a.a/a.aa
+/b/c/..a.a/a.a. /b/c/..a.a/a.a.
+/b/c/..a.a/a.a/ /b/c/..a.a/a.a
+/b/c/..a.a/a..a /b/c/..a.a/a..a
+/b/c/..a.a/a... /b/c/..a.a/a...
+/b/c/..a.a/a../ /b/c/..a.a/a..
+/b/c/..a.a/a./a /b/c/..a.a/a./a
+/b/c/..a.a/a./. /b/c/..a.a/a.
+/b/c/..a.a/a.// /b/c/..a.a/a.
+/b/c/..a.a/a/aa /b/c/..a.a/a/aa
+/b/c/..a.a/a/a. /b/c/..a.a/a/a.
+/b/c/..a.a/a/a/ /b/c/..a.a/a/a
+/b/c/..a.a/a/.a /b/c/..a.a/a/.a
+/b/c/..a.a/a/.. /b/c/..a.a
+/b/c/..a.a/a/./ /b/c/..a.a/a
+/b/c/..a.a/a//a /b/c/..a.a/a/a
+/b/c/..a.a/a//. /b/c/..a.a/a
+/b/c/..a.a/a/// /b/c/..a.a/a
+/b/c/..a.a/.aaa /b/c/..a.a/.aaa
+/b/c/..a.a/.aa. /b/c/..a.a/.aa.
+/b/c/..a.a/.aa/ /b/c/..a.a/.aa
+/b/c/..a.a/.a.a /b/c/..a.a/.a.a
+/b/c/..a.a/.a.. /b/c/..a.a/.a..
+/b/c/..a.a/.a./ /b/c/..a.a/.a.
+/b/c/..a.a/.a/a /b/c/..a.a/.a/a
+/b/c/..a.a/.a/. /b/c/..a.a/.a
+/b/c/..a.a/.a// /b/c/..a.a/.a
+/b/c/..a.a/..aa /b/c/..a.a/..aa
+/b/c/..a.a/..a. /b/c/..a.a/..a.
+/b/c/..a.a/..a/ /b/c/..a.a/..a
+/b/c/..a.a/...a /b/c/..a.a/...a
+/b/c/..a.a/.... /b/c/..a.a/....
+/b/c/..a.a/.../ /b/c/..a.a/...
+/b/c/..a.a/../a /b/c/a
+/b/c/..a.a/../. /b/c
+/b/c/..a.a/..// /b/c
+/b/c/..a.a/./aa /b/c/..a.a/aa
+/b/c/..a.a/./a. /b/c/..a.a/a.
+/b/c/..a.a/./a/ /b/c/..a.a/a
+/b/c/..a.a/./.a /b/c/..a.a/.a
+/b/c/..a.a/./.. /b/c
+/b/c/..a.a/././ /b/c/..a.a
+/b/c/..a.a/.//a /b/c/..a.a/a
+/b/c/..a.a/.//. /b/c/..a.a
+/b/c/..a.a/./// /b/c/..a.a
+/b/c/..a.a//aaa /b/c/..a.a/aaa
+/b/c/..a.a//aa. /b/c/..a.a/aa.
+/b/c/..a.a//aa/ /b/c/..a.a/aa
+/b/c/..a.a//a.a /b/c/..a.a/a.a
+/b/c/..a.a//a.. /b/c/..a.a/a..
+/b/c/..a.a//a./ /b/c/..a.a/a.
+/b/c/..a.a//a/a /b/c/..a.a/a/a
+/b/c/..a.a//a/. /b/c/..a.a/a
+/b/c/..a.a//a// /b/c/..a.a/a
+/b/c/..a.a//.aa /b/c/..a.a/.aa
+/b/c/..a.a//.a. /b/c/..a.a/.a.
+/b/c/..a.a//.a/ /b/c/..a.a/.a
+/b/c/..a.a//..a /b/c/..a.a/..a
+/b/c/..a.a//... /b/c/..a.a/...
+/b/c/..a.a//../ /b/c
+/b/c/..a.a//./a /b/c/..a.a/a
+/b/c/..a.a//./. /b/c/..a.a
+/b/c/..a.a//.// /b/c/..a.a
+/b/c/..a.a///aa /b/c/..a.a/aa
+/b/c/..a.a///a. /b/c/..a.a/a.
+/b/c/..a.a///a/ /b/c/..a.a/a
+/b/c/..a.a///.a /b/c/..a.a/.a
+/b/c/..a.a///.. /b/c
+/b/c/..a.a///./ /b/c/..a.a
+/b/c/..a.a////a /b/c/..a.a/a
+/b/c/..a.a////. /b/c/..a.a
+/b/c/..a.a///// /b/c/..a.a
+/b/c/..a..aaaaa /b/c/..a..aaaaa
+/b/c/..a..aaaa. /b/c/..a..aaaa.
+/b/c/..a..aaaa/ /b/c/..a..aaaa
+/b/c/..a..aaa.a /b/c/..a..aaa.a
+/b/c/..a..aaa.. /b/c/..a..aaa..
+/b/c/..a..aaa./ /b/c/..a..aaa.
+/b/c/..a..aaa/a /b/c/..a..aaa/a
+/b/c/..a..aaa/. /b/c/..a..aaa
+/b/c/..a..aaa// /b/c/..a..aaa
+/b/c/..a..aa.aa /b/c/..a..aa.aa
+/b/c/..a..aa.a. /b/c/..a..aa.a.
+/b/c/..a..aa.a/ /b/c/..a..aa.a
+/b/c/..a..aa..a /b/c/..a..aa..a
+/b/c/..a..aa... /b/c/..a..aa...
+/b/c/..a..aa../ /b/c/..a..aa..
+/b/c/..a..aa./a /b/c/..a..aa./a
+/b/c/..a..aa./. /b/c/..a..aa.
+/b/c/..a..aa.// /b/c/..a..aa.
+/b/c/..a..aa/aa /b/c/..a..aa/aa
+/b/c/..a..aa/a. /b/c/..a..aa/a.
+/b/c/..a..aa/a/ /b/c/..a..aa/a
+/b/c/..a..aa/.a /b/c/..a..aa/.a
+/b/c/..a..aa/.. /b/c
+/b/c/..a..aa/./ /b/c/..a..aa
+/b/c/..a..aa//a /b/c/..a..aa/a
+/b/c/..a..aa//. /b/c/..a..aa
+/b/c/..a..aa/// /b/c/..a..aa
+/b/c/..a..a.aaa /b/c/..a..a.aaa
+/b/c/..a..a.aa. /b/c/..a..a.aa.
+/b/c/..a..a.aa/ /b/c/..a..a.aa
+/b/c/..a..a.a.a /b/c/..a..a.a.a
+/b/c/..a..a.a.. /b/c/..a..a.a..
+/b/c/..a..a.a./ /b/c/..a..a.a.
+/b/c/..a..a.a/a /b/c/..a..a.a/a
+/b/c/..a..a.a/. /b/c/..a..a.a
+/b/c/..a..a.a// /b/c/..a..a.a
+/b/c/..a..a..aa /b/c/..a..a..aa
+/b/c/..a..a..a. /b/c/..a..a..a.
+/b/c/..a..a..a/ /b/c/..a..a..a
+/b/c/..a..a...a /b/c/..a..a...a
+/b/c/..a..a.... /b/c/..a..a....
+/b/c/..a..a.../ /b/c/..a..a...
+/b/c/..a..a../a /b/c/..a..a../a
+/b/c/..a..a../. /b/c/..a..a..
+/b/c/..a..a..// /b/c/..a..a..
+/b/c/..a..a./aa /b/c/..a..a./aa
+/b/c/..a..a./a. /b/c/..a..a./a.
+/b/c/..a..a./a/ /b/c/..a..a./a
+/b/c/..a..a./.a /b/c/..a..a./.a
+/b/c/..a..a./.. /b/c
+/b/c/..a..a././ /b/c/..a..a.
+/b/c/..a..a.//a /b/c/..a..a./a
+/b/c/..a..a.//. /b/c/..a..a.
+/b/c/..a..a./// /b/c/..a..a.
+/b/c/..a..a/aaa /b/c/..a..a/aaa
+/b/c/..a..a/aa. /b/c/..a..a/aa.
+/b/c/..a..a/aa/ /b/c/..a..a/aa
+/b/c/..a..a/a.a /b/c/..a..a/a.a
+/b/c/..a..a/a.. /b/c/..a..a/a..
+/b/c/..a..a/a./ /b/c/..a..a/a.
+/b/c/..a..a/a/a /b/c/..a..a/a/a
+/b/c/..a..a/a/. /b/c/..a..a/a
+/b/c/..a..a/a// /b/c/..a..a/a
+/b/c/..a..a/.aa /b/c/..a..a/.aa
+/b/c/..a..a/.a. /b/c/..a..a/.a.
+/b/c/..a..a/.a/ /b/c/..a..a/.a
+/b/c/..a..a/..a /b/c/..a..a/..a
+/b/c/..a..a/... /b/c/..a..a/...
+/b/c/..a..a/../ /b/c
+/b/c/..a..a/./a /b/c/..a..a/a
+/b/c/..a..a/./. /b/c/..a..a
+/b/c/..a..a/.// /b/c/..a..a
+/b/c/..a..a//aa /b/c/..a..a/aa
+/b/c/..a..a//a. /b/c/..a..a/a.
+/b/c/..a..a//a/ /b/c/..a..a/a
+/b/c/..a..a//.a /b/c/..a..a/.a
+/b/c/..a..a//.. /b/c
+/b/c/..a..a//./ /b/c/..a..a
+/b/c/..a..a///a /b/c/..a..a/a
+/b/c/..a..a///. /b/c/..a..a
+/b/c/..a..a//// /b/c/..a..a
+/b/c/..a...aaaa /b/c/..a...aaaa
+/b/c/..a...aaa. /b/c/..a...aaa.
+/b/c/..a...aaa/ /b/c/..a...aaa
+/b/c/..a...aa.a /b/c/..a...aa.a
+/b/c/..a...aa.. /b/c/..a...aa..
+/b/c/..a...aa./ /b/c/..a...aa.
+/b/c/..a...aa/a /b/c/..a...aa/a
+/b/c/..a...aa/. /b/c/..a...aa
+/b/c/..a...aa// /b/c/..a...aa
+/b/c/..a...a.aa /b/c/..a...a.aa
+/b/c/..a...a.a. /b/c/..a...a.a.
+/b/c/..a...a.a/ /b/c/..a...a.a
+/b/c/..a...a..a /b/c/..a...a..a
+/b/c/..a...a... /b/c/..a...a...
+/b/c/..a...a../ /b/c/..a...a..
+/b/c/..a...a./a /b/c/..a...a./a
+/b/c/..a...a./. /b/c/..a...a.
+/b/c/..a...a.// /b/c/..a...a.
+/b/c/..a...a/aa /b/c/..a...a/aa
+/b/c/..a...a/a. /b/c/..a...a/a.
+/b/c/..a...a/a/ /b/c/..a...a/a
+/b/c/..a...a/.a /b/c/..a...a/.a
+/b/c/..a...a/.. /b/c
+/b/c/..a...a/./ /b/c/..a...a
+/b/c/..a...a//a /b/c/..a...a/a
+/b/c/..a...a//. /b/c/..a...a
+/b/c/..a...a/// /b/c/..a...a
+/b/c/..a....aaa /b/c/..a....aaa
+/b/c/..a....aa. /b/c/..a....aa.
+/b/c/..a....aa/ /b/c/..a....aa
+/b/c/..a....a.a /b/c/..a....a.a
+/b/c/..a....a.. /b/c/..a....a..
+/b/c/..a....a./ /b/c/..a....a.
+/b/c/..a....a/a /b/c/..a....a/a
+/b/c/..a....a/. /b/c/..a....a
+/b/c/..a....a// /b/c/..a....a
+/b/c/..a.....aa /b/c/..a.....aa
+/b/c/..a.....a. /b/c/..a.....a.
+/b/c/..a.....a/ /b/c/..a.....a
+/b/c/..a......a /b/c/..a......a
+/b/c/..a....... /b/c/..a.......
+/b/c/..a....../ /b/c/..a......
+/b/c/..a...../a /b/c/..a...../a
+/b/c/..a...../. /b/c/..a.....
+/b/c/..a.....// /b/c/..a.....
+/b/c/..a..../aa /b/c/..a..../aa
+/b/c/..a..../a. /b/c/..a..../a.
+/b/c/..a..../a/ /b/c/..a..../a
+/b/c/..a..../.a /b/c/..a..../.a
+/b/c/..a..../.. /b/c
+/b/c/..a...././ /b/c/..a....
+/b/c/..a....//a /b/c/..a..../a
+/b/c/..a....//. /b/c/..a....
+/b/c/..a..../// /b/c/..a....
+/b/c/..a.../aaa /b/c/..a.../aaa
+/b/c/..a.../aa. /b/c/..a.../aa.
+/b/c/..a.../aa/ /b/c/..a.../aa
+/b/c/..a.../a.a /b/c/..a.../a.a
+/b/c/..a.../a.. /b/c/..a.../a..
+/b/c/..a.../a./ /b/c/..a.../a.
+/b/c/..a.../a/a /b/c/..a.../a/a
+/b/c/..a.../a/. /b/c/..a.../a
+/b/c/..a.../a// /b/c/..a.../a
+/b/c/..a.../.aa /b/c/..a.../.aa
+/b/c/..a.../.a. /b/c/..a.../.a.
+/b/c/..a.../.a/ /b/c/..a.../.a
+/b/c/..a.../..a /b/c/..a.../..a
+/b/c/..a.../... /b/c/..a.../...
+/b/c/..a.../../ /b/c
+/b/c/..a..././a /b/c/..a.../a
+/b/c/..a..././. /b/c/..a...
+/b/c/..a.../.// /b/c/..a...
+/b/c/..a...//aa /b/c/..a.../aa
+/b/c/..a...//a. /b/c/..a.../a.
+/b/c/..a...//a/ /b/c/..a.../a
+/b/c/..a...//.a /b/c/..a.../.a
+/b/c/..a...//.. /b/c
+/b/c/..a...//./ /b/c/..a...
+/b/c/..a...///a /b/c/..a.../a
+/b/c/..a...///. /b/c/..a...
+/b/c/..a...//// /b/c/..a...
+/b/c/..a../aaaa /b/c/..a../aaaa
+/b/c/..a../aaa. /b/c/..a../aaa.
+/b/c/..a../aaa/ /b/c/..a../aaa
+/b/c/..a../aa.a /b/c/..a../aa.a
+/b/c/..a../aa.. /b/c/..a../aa..
+/b/c/..a../aa./ /b/c/..a../aa.
+/b/c/..a../aa/a /b/c/..a../aa/a
+/b/c/..a../aa/. /b/c/..a../aa
+/b/c/..a../aa// /b/c/..a../aa
+/b/c/..a../a.aa /b/c/..a../a.aa
+/b/c/..a../a.a. /b/c/..a../a.a.
+/b/c/..a../a.a/ /b/c/..a../a.a
+/b/c/..a../a..a /b/c/..a../a..a
+/b/c/..a../a... /b/c/..a../a...
+/b/c/..a../a../ /b/c/..a../a..
+/b/c/..a../a./a /b/c/..a../a./a
+/b/c/..a../a./. /b/c/..a../a.
+/b/c/..a../a.// /b/c/..a../a.
+/b/c/..a../a/aa /b/c/..a../a/aa
+/b/c/..a../a/a. /b/c/..a../a/a.
+/b/c/..a../a/a/ /b/c/..a../a/a
+/b/c/..a../a/.a /b/c/..a../a/.a
+/b/c/..a../a/.. /b/c/..a..
+/b/c/..a../a/./ /b/c/..a../a
+/b/c/..a../a//a /b/c/..a../a/a
+/b/c/..a../a//. /b/c/..a../a
+/b/c/..a../a/// /b/c/..a../a
+/b/c/..a../.aaa /b/c/..a../.aaa
+/b/c/..a../.aa. /b/c/..a../.aa.
+/b/c/..a../.aa/ /b/c/..a../.aa
+/b/c/..a../.a.a /b/c/..a../.a.a
+/b/c/..a../.a.. /b/c/..a../.a..
+/b/c/..a../.a./ /b/c/..a../.a.
+/b/c/..a../.a/a /b/c/..a../.a/a
+/b/c/..a../.a/. /b/c/..a../.a
+/b/c/..a../.a// /b/c/..a../.a
+/b/c/..a../..aa /b/c/..a../..aa
+/b/c/..a../..a. /b/c/..a../..a.
+/b/c/..a../..a/ /b/c/..a../..a
+/b/c/..a../...a /b/c/..a../...a
+/b/c/..a../.... /b/c/..a../....
+/b/c/..a../.../ /b/c/..a../...
+/b/c/..a../../a /b/c/a
+/b/c/..a../../. /b/c
+/b/c/..a../..// /b/c
+/b/c/..a.././aa /b/c/..a../aa
+/b/c/..a.././a. /b/c/..a../a.
+/b/c/..a.././a/ /b/c/..a../a
+/b/c/..a.././.a /b/c/..a../.a
+/b/c/..a.././.. /b/c
+/b/c/..a../././ /b/c/..a..
+/b/c/..a.././/a /b/c/..a../a
+/b/c/..a.././/. /b/c/..a..
+/b/c/..a.././// /b/c/..a..
+/b/c/..a..//aaa /b/c/..a../aaa
+/b/c/..a..//aa. /b/c/..a../aa.
+/b/c/..a..//aa/ /b/c/..a../aa
+/b/c/..a..//a.a /b/c/..a../a.a
+/b/c/..a..//a.. /b/c/..a../a..
+/b/c/..a..//a./ /b/c/..a../a.
+/b/c/..a..//a/a /b/c/..a../a/a
+/b/c/..a..//a/. /b/c/..a../a
+/b/c/..a..//a// /b/c/..a../a
+/b/c/..a..//.aa /b/c/..a../.aa
+/b/c/..a..//.a. /b/c/..a../.a.
+/b/c/..a..//.a/ /b/c/..a../.a
+/b/c/..a..//..a /b/c/..a../..a
+/b/c/..a..//... /b/c/..a../...
+/b/c/..a..//../ /b/c
+/b/c/..a..//./a /b/c/..a../a
+/b/c/..a..//./. /b/c/..a..
+/b/c/..a..//.// /b/c/..a..
+/b/c/..a..///aa /b/c/..a../aa
+/b/c/..a..///a. /b/c/..a../a.
+/b/c/..a..///a/ /b/c/..a../a
+/b/c/..a..///.a /b/c/..a../.a
+/b/c/..a..///.. /b/c
+/b/c/..a..///./ /b/c/..a..
+/b/c/..a..////a /b/c/..a../a
+/b/c/..a..////. /b/c/..a..
+/b/c/..a..///// /b/c/..a..
+/b/c/..a./aaaaa /b/c/..a./aaaaa
+/b/c/..a./aaaa. /b/c/..a./aaaa.
+/b/c/..a./aaaa/ /b/c/..a./aaaa
+/b/c/..a./aaa.a /b/c/..a./aaa.a
+/b/c/..a./aaa.. /b/c/..a./aaa..
+/b/c/..a./aaa./ /b/c/..a./aaa.
+/b/c/..a./aaa/a /b/c/..a./aaa/a
+/b/c/..a./aaa/. /b/c/..a./aaa
+/b/c/..a./aaa// /b/c/..a./aaa
+/b/c/..a./aa.aa /b/c/..a./aa.aa
+/b/c/..a./aa.a. /b/c/..a./aa.a.
+/b/c/..a./aa.a/ /b/c/..a./aa.a
+/b/c/..a./aa..a /b/c/..a./aa..a
+/b/c/..a./aa... /b/c/..a./aa...
+/b/c/..a./aa../ /b/c/..a./aa..
+/b/c/..a./aa./a /b/c/..a./aa./a
+/b/c/..a./aa./. /b/c/..a./aa.
+/b/c/..a./aa.// /b/c/..a./aa.
+/b/c/..a./aa/aa /b/c/..a./aa/aa
+/b/c/..a./aa/a. /b/c/..a./aa/a.
+/b/c/..a./aa/a/ /b/c/..a./aa/a
+/b/c/..a./aa/.a /b/c/..a./aa/.a
+/b/c/..a./aa/.. /b/c/..a.
+/b/c/..a./aa/./ /b/c/..a./aa
+/b/c/..a./aa//a /b/c/..a./aa/a
+/b/c/..a./aa//. /b/c/..a./aa
+/b/c/..a./aa/// /b/c/..a./aa
+/b/c/..a./a.aaa /b/c/..a./a.aaa
+/b/c/..a./a.aa. /b/c/..a./a.aa.
+/b/c/..a./a.aa/ /b/c/..a./a.aa
+/b/c/..a./a.a.a /b/c/..a./a.a.a
+/b/c/..a./a.a.. /b/c/..a./a.a..
+/b/c/..a./a.a./ /b/c/..a./a.a.
+/b/c/..a./a.a/a /b/c/..a./a.a/a
+/b/c/..a./a.a/. /b/c/..a./a.a
+/b/c/..a./a.a// /b/c/..a./a.a
+/b/c/..a./a..aa /b/c/..a./a..aa
+/b/c/..a./a..a. /b/c/..a./a..a.
+/b/c/..a./a..a/ /b/c/..a./a..a
+/b/c/..a./a...a /b/c/..a./a...a
+/b/c/..a./a.... /b/c/..a./a....
+/b/c/..a./a.../ /b/c/..a./a...
+/b/c/..a./a../a /b/c/..a./a../a
+/b/c/..a./a../. /b/c/..a./a..
+/b/c/..a./a..// /b/c/..a./a..
+/b/c/..a./a./aa /b/c/..a./a./aa
+/b/c/..a./a./a. /b/c/..a./a./a.
+/b/c/..a./a./a/ /b/c/..a./a./a
+/b/c/..a./a./.a /b/c/..a./a./.a
+/b/c/..a./a./.. /b/c/..a.
+/b/c/..a./a././ /b/c/..a./a.
+/b/c/..a./a.//a /b/c/..a./a./a
+/b/c/..a./a.//. /b/c/..a./a.
+/b/c/..a./a./// /b/c/..a./a.
+/b/c/..a./a/aaa /b/c/..a./a/aaa
+/b/c/..a./a/aa. /b/c/..a./a/aa.
+/b/c/..a./a/aa/ /b/c/..a./a/aa
+/b/c/..a./a/a.a /b/c/..a./a/a.a
+/b/c/..a./a/a.. /b/c/..a./a/a..
+/b/c/..a./a/a./ /b/c/..a./a/a.
+/b/c/..a./a/a/a /b/c/..a./a/a/a
+/b/c/..a./a/a/. /b/c/..a./a/a
+/b/c/..a./a/a// /b/c/..a./a/a
+/b/c/..a./a/.aa /b/c/..a./a/.aa
+/b/c/..a./a/.a. /b/c/..a./a/.a.
+/b/c/..a./a/.a/ /b/c/..a./a/.a
+/b/c/..a./a/..a /b/c/..a./a/..a
+/b/c/..a./a/... /b/c/..a./a/...
+/b/c/..a./a/../ /b/c/..a.
+/b/c/..a./a/./a /b/c/..a./a/a
+/b/c/..a./a/./. /b/c/..a./a
+/b/c/..a./a/.// /b/c/..a./a
+/b/c/..a./a//aa /b/c/..a./a/aa
+/b/c/..a./a//a. /b/c/..a./a/a.
+/b/c/..a./a//a/ /b/c/..a./a/a
+/b/c/..a./a//.a /b/c/..a./a/.a
+/b/c/..a./a//.. /b/c/..a.
+/b/c/..a./a//./ /b/c/..a./a
+/b/c/..a./a///a /b/c/..a./a/a
+/b/c/..a./a///. /b/c/..a./a
+/b/c/..a./a//// /b/c/..a./a
+/b/c/..a./.aaaa /b/c/..a./.aaaa
+/b/c/..a./.aaa. /b/c/..a./.aaa.
+/b/c/..a./.aaa/ /b/c/..a./.aaa
+/b/c/..a./.aa.a /b/c/..a./.aa.a
+/b/c/..a./.aa.. /b/c/..a./.aa..
+/b/c/..a./.aa./ /b/c/..a./.aa.
+/b/c/..a./.aa/a /b/c/..a./.aa/a
+/b/c/..a./.aa/. /b/c/..a./.aa
+/b/c/..a./.aa// /b/c/..a./.aa
+/b/c/..a./.a.aa /b/c/..a./.a.aa
+/b/c/..a./.a.a. /b/c/..a./.a.a.
+/b/c/..a./.a.a/ /b/c/..a./.a.a
+/b/c/..a./.a..a /b/c/..a./.a..a
+/b/c/..a./.a... /b/c/..a./.a...
+/b/c/..a./.a../ /b/c/..a./.a..
+/b/c/..a./.a./a /b/c/..a./.a./a
+/b/c/..a./.a./. /b/c/..a./.a.
+/b/c/..a./.a.// /b/c/..a./.a.
+/b/c/..a./.a/aa /b/c/..a./.a/aa
+/b/c/..a./.a/a. /b/c/..a./.a/a.
+/b/c/..a./.a/a/ /b/c/..a./.a/a
+/b/c/..a./.a/.a /b/c/..a./.a/.a
+/b/c/..a./.a/.. /b/c/..a.
+/b/c/..a./.a/./ /b/c/..a./.a
+/b/c/..a./.a//a /b/c/..a./.a/a
+/b/c/..a./.a//. /b/c/..a./.a
+/b/c/..a./.a/// /b/c/..a./.a
+/b/c/..a./..aaa /b/c/..a./..aaa
+/b/c/..a./..aa. /b/c/..a./..aa.
+/b/c/..a./..aa/ /b/c/..a./..aa
+/b/c/..a./..a.a /b/c/..a./..a.a
+/b/c/..a./..a.. /b/c/..a./..a..
+/b/c/..a./..a./ /b/c/..a./..a.
+/b/c/..a./..a/a /b/c/..a./..a/a
+/b/c/..a./..a/. /b/c/..a./..a
+/b/c/..a./..a// /b/c/..a./..a
+/b/c/..a./...aa /b/c/..a./...aa
+/b/c/..a./...a. /b/c/..a./...a.
+/b/c/..a./...a/ /b/c/..a./...a
+/b/c/..a./....a /b/c/..a./....a
+/b/c/..a./..... /b/c/..a./.....
+/b/c/..a./..../ /b/c/..a./....
+/b/c/..a./.../a /b/c/..a./.../a
+/b/c/..a./.../. /b/c/..a./...
+/b/c/..a./...// /b/c/..a./...
+/b/c/..a./../aa /b/c/aa
+/b/c/..a./../a. /b/c/a.
+/b/c/..a./../a/ /b/c/a
+/b/c/..a./../.a /b/c/.a
+/b/c/..a./../.. /b
+/b/c/..a./.././ /b/c
+/b/c/..a./..//a /b/c/a
+/b/c/..a./..//. /b/c
+/b/c/..a./../// /b/c
+/b/c/..a././aaa /b/c/..a./aaa
+/b/c/..a././aa. /b/c/..a./aa.
+/b/c/..a././aa/ /b/c/..a./aa
+/b/c/..a././a.a /b/c/..a./a.a
+/b/c/..a././a.. /b/c/..a./a..
+/b/c/..a././a./ /b/c/..a./a.
+/b/c/..a././a/a /b/c/..a./a/a
+/b/c/..a././a/. /b/c/..a./a
+/b/c/..a././a// /b/c/..a./a
+/b/c/..a././.aa /b/c/..a./.aa
+/b/c/..a././.a. /b/c/..a./.a.
+/b/c/..a././.a/ /b/c/..a./.a
+/b/c/..a././..a /b/c/..a./..a
+/b/c/..a././... /b/c/..a./...
+/b/c/..a././../ /b/c
+/b/c/..a./././a /b/c/..a./a
+/b/c/..a./././. /b/c/..a.
+/b/c/..a././.// /b/c/..a.
+/b/c/..a././/aa /b/c/..a./aa
+/b/c/..a././/a. /b/c/..a./a.
+/b/c/..a././/a/ /b/c/..a./a
+/b/c/..a././/.a /b/c/..a./.a
+/b/c/..a././/.. /b/c
+/b/c/..a././/./ /b/c/..a.
+/b/c/..a././//a /b/c/..a./a
+/b/c/..a././//. /b/c/..a.
+/b/c/..a././/// /b/c/..a.
+/b/c/..a.//aaaa /b/c/..a./aaaa
+/b/c/..a.//aaa. /b/c/..a./aaa.
+/b/c/..a.//aaa/ /b/c/..a./aaa
+/b/c/..a.//aa.a /b/c/..a./aa.a
+/b/c/..a.//aa.. /b/c/..a./aa..
+/b/c/..a.//aa./ /b/c/..a./aa.
+/b/c/..a.//aa/a /b/c/..a./aa/a
+/b/c/..a.//aa/. /b/c/..a./aa
+/b/c/..a.//aa// /b/c/..a./aa
+/b/c/..a.//a.aa /b/c/..a./a.aa
+/b/c/..a.//a.a. /b/c/..a./a.a.
+/b/c/..a.//a.a/ /b/c/..a./a.a
+/b/c/..a.//a..a /b/c/..a./a..a
+/b/c/..a.//a... /b/c/..a./a...
+/b/c/..a.//a../ /b/c/..a./a..
+/b/c/..a.//a./a /b/c/..a./a./a
+/b/c/..a.//a./. /b/c/..a./a.
+/b/c/..a.//a.// /b/c/..a./a.
+/b/c/..a.//a/aa /b/c/..a./a/aa
+/b/c/..a.//a/a. /b/c/..a./a/a.
+/b/c/..a.//a/a/ /b/c/..a./a/a
+/b/c/..a.//a/.a /b/c/..a./a/.a
+/b/c/..a.//a/.. /b/c/..a.
+/b/c/..a.//a/./ /b/c/..a./a
+/b/c/..a.//a//a /b/c/..a./a/a
+/b/c/..a.//a//. /b/c/..a./a
+/b/c/..a.//a/// /b/c/..a./a
+/b/c/..a.//.aaa /b/c/..a./.aaa
+/b/c/..a.//.aa. /b/c/..a./.aa.
+/b/c/..a.//.aa/ /b/c/..a./.aa
+/b/c/..a.//.a.a /b/c/..a./.a.a
+/b/c/..a.//.a.. /b/c/..a./.a..
+/b/c/..a.//.a./ /b/c/..a./.a.
+/b/c/..a.//.a/a /b/c/..a./.a/a
+/b/c/..a.//.a/. /b/c/..a./.a
+/b/c/..a.//.a// /b/c/..a./.a
+/b/c/..a.//..aa /b/c/..a./..aa
+/b/c/..a.//..a. /b/c/..a./..a.
+/b/c/..a.//..a/ /b/c/..a./..a
+/b/c/..a.//...a /b/c/..a./...a
+/b/c/..a.//.... /b/c/..a./....
+/b/c/..a.//.../ /b/c/..a./...
+/b/c/..a.//../a /b/c/a
+/b/c/..a.//../. /b/c
+/b/c/..a.//..// /b/c
+/b/c/..a.//./aa /b/c/..a./aa
+/b/c/..a.//./a. /b/c/..a./a.
+/b/c/..a.//./a/ /b/c/..a./a
+/b/c/..a.//./.a /b/c/..a./.a
+/b/c/..a.//./.. /b/c
+/b/c/..a.//././ /b/c/..a.
+/b/c/..a.//.//a /b/c/..a./a
+/b/c/..a.//.//. /b/c/..a.
+/b/c/..a.//./// /b/c/..a.
+/b/c/..a.///aaa /b/c/..a./aaa
+/b/c/..a.///aa. /b/c/..a./aa.
+/b/c/..a.///aa/ /b/c/..a./aa
+/b/c/..a.///a.a /b/c/..a./a.a
+/b/c/..a.///a.. /b/c/..a./a..
+/b/c/..a.///a./ /b/c/..a./a.
+/b/c/..a.///a/a /b/c/..a./a/a
+/b/c/..a.///a/. /b/c/..a./a
+/b/c/..a.///a// /b/c/..a./a
+/b/c/..a.///.aa /b/c/..a./.aa
+/b/c/..a.///.a. /b/c/..a./.a.
+/b/c/..a.///.a/ /b/c/..a./.a
+/b/c/..a.///..a /b/c/..a./..a
+/b/c/..a.///... /b/c/..a./...
+/b/c/..a.///../ /b/c
+/b/c/..a.///./a /b/c/..a./a
+/b/c/..a.///./. /b/c/..a.
+/b/c/..a.///.// /b/c/..a.
+/b/c/..a.////aa /b/c/..a./aa
+/b/c/..a.////a. /b/c/..a./a.
+/b/c/..a.////a/ /b/c/..a./a
+/b/c/..a.////.a /b/c/..a./.a
+/b/c/..a.////.. /b/c
+/b/c/..a.////./ /b/c/..a.
+/b/c/..a./////a /b/c/..a./a
+/b/c/..a./////. /b/c/..a.
+/b/c/..a.////// /b/c/..a.
+/b/c/..a/aaaaaa /b/c/..a/aaaaaa
+/b/c/..a/aaaaa. /b/c/..a/aaaaa.
+/b/c/..a/aaaaa/ /b/c/..a/aaaaa
+/b/c/..a/aaaa.a /b/c/..a/aaaa.a
+/b/c/..a/aaaa.. /b/c/..a/aaaa..
+/b/c/..a/aaaa./ /b/c/..a/aaaa.
+/b/c/..a/aaaa/a /b/c/..a/aaaa/a
+/b/c/..a/aaaa/. /b/c/..a/aaaa
+/b/c/..a/aaaa// /b/c/..a/aaaa
+/b/c/..a/aaa.aa /b/c/..a/aaa.aa
+/b/c/..a/aaa.a. /b/c/..a/aaa.a.
+/b/c/..a/aaa.a/ /b/c/..a/aaa.a
+/b/c/..a/aaa..a /b/c/..a/aaa..a
+/b/c/..a/aaa... /b/c/..a/aaa...
+/b/c/..a/aaa../ /b/c/..a/aaa..
+/b/c/..a/aaa./a /b/c/..a/aaa./a
+/b/c/..a/aaa./. /b/c/..a/aaa.
+/b/c/..a/aaa.// /b/c/..a/aaa.
+/b/c/..a/aaa/aa /b/c/..a/aaa/aa
+/b/c/..a/aaa/a. /b/c/..a/aaa/a.
+/b/c/..a/aaa/a/ /b/c/..a/aaa/a
+/b/c/..a/aaa/.a /b/c/..a/aaa/.a
+/b/c/..a/aaa/.. /b/c/..a
+/b/c/..a/aaa/./ /b/c/..a/aaa
+/b/c/..a/aaa//a /b/c/..a/aaa/a
+/b/c/..a/aaa//. /b/c/..a/aaa
+/b/c/..a/aaa/// /b/c/..a/aaa
+/b/c/..a/aa.aaa /b/c/..a/aa.aaa
+/b/c/..a/aa.aa. /b/c/..a/aa.aa.
+/b/c/..a/aa.aa/ /b/c/..a/aa.aa
+/b/c/..a/aa.a.a /b/c/..a/aa.a.a
+/b/c/..a/aa.a.. /b/c/..a/aa.a..
+/b/c/..a/aa.a./ /b/c/..a/aa.a.
+/b/c/..a/aa.a/a /b/c/..a/aa.a/a
+/b/c/..a/aa.a/. /b/c/..a/aa.a
+/b/c/..a/aa.a// /b/c/..a/aa.a
+/b/c/..a/aa..aa /b/c/..a/aa..aa
+/b/c/..a/aa..a. /b/c/..a/aa..a.
+/b/c/..a/aa..a/ /b/c/..a/aa..a
+/b/c/..a/aa...a /b/c/..a/aa...a
+/b/c/..a/aa.... /b/c/..a/aa....
+/b/c/..a/aa.../ /b/c/..a/aa...
+/b/c/..a/aa../a /b/c/..a/aa../a
+/b/c/..a/aa../. /b/c/..a/aa..
+/b/c/..a/aa..// /b/c/..a/aa..
+/b/c/..a/aa./aa /b/c/..a/aa./aa
+/b/c/..a/aa./a. /b/c/..a/aa./a.
+/b/c/..a/aa./a/ /b/c/..a/aa./a
+/b/c/..a/aa./.a /b/c/..a/aa./.a
+/b/c/..a/aa./.. /b/c/..a
+/b/c/..a/aa././ /b/c/..a/aa.
+/b/c/..a/aa.//a /b/c/..a/aa./a
+/b/c/..a/aa.//. /b/c/..a/aa.
+/b/c/..a/aa./// /b/c/..a/aa.
+/b/c/..a/aa/aaa /b/c/..a/aa/aaa
+/b/c/..a/aa/aa. /b/c/..a/aa/aa.
+/b/c/..a/aa/aa/ /b/c/..a/aa/aa
+/b/c/..a/aa/a.a /b/c/..a/aa/a.a
+/b/c/..a/aa/a.. /b/c/..a/aa/a..
+/b/c/..a/aa/a./ /b/c/..a/aa/a.
+/b/c/..a/aa/a/a /b/c/..a/aa/a/a
+/b/c/..a/aa/a/. /b/c/..a/aa/a
+/b/c/..a/aa/a// /b/c/..a/aa/a
+/b/c/..a/aa/.aa /b/c/..a/aa/.aa
+/b/c/..a/aa/.a. /b/c/..a/aa/.a.
+/b/c/..a/aa/.a/ /b/c/..a/aa/.a
+/b/c/..a/aa/..a /b/c/..a/aa/..a
+/b/c/..a/aa/... /b/c/..a/aa/...
+/b/c/..a/aa/../ /b/c/..a
+/b/c/..a/aa/./a /b/c/..a/aa/a
+/b/c/..a/aa/./. /b/c/..a/aa
+/b/c/..a/aa/.// /b/c/..a/aa
+/b/c/..a/aa//aa /b/c/..a/aa/aa
+/b/c/..a/aa//a. /b/c/..a/aa/a.
+/b/c/..a/aa//a/ /b/c/..a/aa/a
+/b/c/..a/aa//.a /b/c/..a/aa/.a
+/b/c/..a/aa//.. /b/c/..a
+/b/c/..a/aa//./ /b/c/..a/aa
+/b/c/..a/aa///a /b/c/..a/aa/a
+/b/c/..a/aa///. /b/c/..a/aa
+/b/c/..a/aa//// /b/c/..a/aa
+/b/c/..a/a.aaaa /b/c/..a/a.aaaa
+/b/c/..a/a.aaa. /b/c/..a/a.aaa.
+/b/c/..a/a.aaa/ /b/c/..a/a.aaa
+/b/c/..a/a.aa.a /b/c/..a/a.aa.a
+/b/c/..a/a.aa.. /b/c/..a/a.aa..
+/b/c/..a/a.aa./ /b/c/..a/a.aa.
+/b/c/..a/a.aa/a /b/c/..a/a.aa/a
+/b/c/..a/a.aa/. /b/c/..a/a.aa
+/b/c/..a/a.aa// /b/c/..a/a.aa
+/b/c/..a/a.a.aa /b/c/..a/a.a.aa
+/b/c/..a/a.a.a. /b/c/..a/a.a.a.
+/b/c/..a/a.a.a/ /b/c/..a/a.a.a
+/b/c/..a/a.a..a /b/c/..a/a.a..a
+/b/c/..a/a.a... /b/c/..a/a.a...
+/b/c/..a/a.a../ /b/c/..a/a.a..
+/b/c/..a/a.a./a /b/c/..a/a.a./a
+/b/c/..a/a.a./. /b/c/..a/a.a.
+/b/c/..a/a.a.// /b/c/..a/a.a.
+/b/c/..a/a.a/aa /b/c/..a/a.a/aa
+/b/c/..a/a.a/a. /b/c/..a/a.a/a.
+/b/c/..a/a.a/a/ /b/c/..a/a.a/a
+/b/c/..a/a.a/.a /b/c/..a/a.a/.a
+/b/c/..a/a.a/.. /b/c/..a
+/b/c/..a/a.a/./ /b/c/..a/a.a
+/b/c/..a/a.a//a /b/c/..a/a.a/a
+/b/c/..a/a.a//. /b/c/..a/a.a
+/b/c/..a/a.a/// /b/c/..a/a.a
+/b/c/..a/a..aaa /b/c/..a/a..aaa
+/b/c/..a/a..aa. /b/c/..a/a..aa.
+/b/c/..a/a..aa/ /b/c/..a/a..aa
+/b/c/..a/a..a.a /b/c/..a/a..a.a
+/b/c/..a/a..a.. /b/c/..a/a..a..
+/b/c/..a/a..a./ /b/c/..a/a..a.
+/b/c/..a/a..a/a /b/c/..a/a..a/a
+/b/c/..a/a..a/. /b/c/..a/a..a
+/b/c/..a/a..a// /b/c/..a/a..a
+/b/c/..a/a...aa /b/c/..a/a...aa
+/b/c/..a/a...a. /b/c/..a/a...a.
+/b/c/..a/a...a/ /b/c/..a/a...a
+/b/c/..a/a....a /b/c/..a/a....a
+/b/c/..a/a..... /b/c/..a/a.....
+/b/c/..a/a..../ /b/c/..a/a....
+/b/c/..a/a.../a /b/c/..a/a.../a
+/b/c/..a/a.../. /b/c/..a/a...
+/b/c/..a/a...// /b/c/..a/a...
+/b/c/..a/a../aa /b/c/..a/a../aa
+/b/c/..a/a../a. /b/c/..a/a../a.
+/b/c/..a/a../a/ /b/c/..a/a../a
+/b/c/..a/a../.a /b/c/..a/a../.a
+/b/c/..a/a../.. /b/c/..a
+/b/c/..a/a.././ /b/c/..a/a..
+/b/c/..a/a..//a /b/c/..a/a../a
+/b/c/..a/a..//. /b/c/..a/a..
+/b/c/..a/a../// /b/c/..a/a..
+/b/c/..a/a./aaa /b/c/..a/a./aaa
+/b/c/..a/a./aa. /b/c/..a/a./aa.
+/b/c/..a/a./aa/ /b/c/..a/a./aa
+/b/c/..a/a./a.a /b/c/..a/a./a.a
+/b/c/..a/a./a.. /b/c/..a/a./a..
+/b/c/..a/a./a./ /b/c/..a/a./a.
+/b/c/..a/a./a/a /b/c/..a/a./a/a
+/b/c/..a/a./a/. /b/c/..a/a./a
+/b/c/..a/a./a// /b/c/..a/a./a
+/b/c/..a/a./.aa /b/c/..a/a./.aa
+/b/c/..a/a./.a. /b/c/..a/a./.a.
+/b/c/..a/a./.a/ /b/c/..a/a./.a
+/b/c/..a/a./..a /b/c/..a/a./..a
+/b/c/..a/a./... /b/c/..a/a./...
+/b/c/..a/a./../ /b/c/..a
+/b/c/..a/a././a /b/c/..a/a./a
+/b/c/..a/a././. /b/c/..a/a.
+/b/c/..a/a./.// /b/c/..a/a.
+/b/c/..a/a.//aa /b/c/..a/a./aa
+/b/c/..a/a.//a. /b/c/..a/a./a.
+/b/c/..a/a.//a/ /b/c/..a/a./a
+/b/c/..a/a.//.a /b/c/..a/a./.a
+/b/c/..a/a.//.. /b/c/..a
+/b/c/..a/a.//./ /b/c/..a/a.
+/b/c/..a/a.///a /b/c/..a/a./a
+/b/c/..a/a.///. /b/c/..a/a.
+/b/c/..a/a.//// /b/c/..a/a.
+/b/c/..a/a/aaaa /b/c/..a/a/aaaa
+/b/c/..a/a/aaa. /b/c/..a/a/aaa.
+/b/c/..a/a/aaa/ /b/c/..a/a/aaa
+/b/c/..a/a/aa.a /b/c/..a/a/aa.a
+/b/c/..a/a/aa.. /b/c/..a/a/aa..
+/b/c/..a/a/aa./ /b/c/..a/a/aa.
+/b/c/..a/a/aa/a /b/c/..a/a/aa/a
+/b/c/..a/a/aa/. /b/c/..a/a/aa
+/b/c/..a/a/aa// /b/c/..a/a/aa
+/b/c/..a/a/a.aa /b/c/..a/a/a.aa
+/b/c/..a/a/a.a. /b/c/..a/a/a.a.
+/b/c/..a/a/a.a/ /b/c/..a/a/a.a
+/b/c/..a/a/a..a /b/c/..a/a/a..a
+/b/c/..a/a/a... /b/c/..a/a/a...
+/b/c/..a/a/a../ /b/c/..a/a/a..
+/b/c/..a/a/a./a /b/c/..a/a/a./a
+/b/c/..a/a/a./. /b/c/..a/a/a.
+/b/c/..a/a/a.// /b/c/..a/a/a.
+/b/c/..a/a/a/aa /b/c/..a/a/a/aa
+/b/c/..a/a/a/a. /b/c/..a/a/a/a.
+/b/c/..a/a/a/a/ /b/c/..a/a/a/a
+/b/c/..a/a/a/.a /b/c/..a/a/a/.a
+/b/c/..a/a/a/.. /b/c/..a/a
+/b/c/..a/a/a/./ /b/c/..a/a/a
+/b/c/..a/a/a//a /b/c/..a/a/a/a
+/b/c/..a/a/a//. /b/c/..a/a/a
+/b/c/..a/a/a/// /b/c/..a/a/a
+/b/c/..a/a/.aaa /b/c/..a/a/.aaa
+/b/c/..a/a/.aa. /b/c/..a/a/.aa.
+/b/c/..a/a/.aa/ /b/c/..a/a/.aa
+/b/c/..a/a/.a.a /b/c/..a/a/.a.a
+/b/c/..a/a/.a.. /b/c/..a/a/.a..
+/b/c/..a/a/.a./ /b/c/..a/a/.a.
+/b/c/..a/a/.a/a /b/c/..a/a/.a/a
+/b/c/..a/a/.a/. /b/c/..a/a/.a
+/b/c/..a/a/.a// /b/c/..a/a/.a
+/b/c/..a/a/..aa /b/c/..a/a/..aa
+/b/c/..a/a/..a. /b/c/..a/a/..a.
+/b/c/..a/a/..a/ /b/c/..a/a/..a
+/b/c/..a/a/...a /b/c/..a/a/...a
+/b/c/..a/a/.... /b/c/..a/a/....
+/b/c/..a/a/.../ /b/c/..a/a/...
+/b/c/..a/a/../a /b/c/..a/a
+/b/c/..a/a/../. /b/c/..a
+/b/c/..a/a/..// /b/c/..a
+/b/c/..a/a/./aa /b/c/..a/a/aa
+/b/c/..a/a/./a. /b/c/..a/a/a.
+/b/c/..a/a/./a/ /b/c/..a/a/a
+/b/c/..a/a/./.a /b/c/..a/a/.a
+/b/c/..a/a/./.. /b/c/..a
+/b/c/..a/a/././ /b/c/..a/a
+/b/c/..a/a/.//a /b/c/..a/a/a
+/b/c/..a/a/.//. /b/c/..a/a
+/b/c/..a/a/./// /b/c/..a/a
+/b/c/..a/a//aaa /b/c/..a/a/aaa
+/b/c/..a/a//aa. /b/c/..a/a/aa.
+/b/c/..a/a//aa/ /b/c/..a/a/aa
+/b/c/..a/a//a.a /b/c/..a/a/a.a
+/b/c/..a/a//a.. /b/c/..a/a/a..
+/b/c/..a/a//a./ /b/c/..a/a/a.
+/b/c/..a/a//a/a /b/c/..a/a/a/a
+/b/c/..a/a//a/. /b/c/..a/a/a
+/b/c/..a/a//a// /b/c/..a/a/a
+/b/c/..a/a//.aa /b/c/..a/a/.aa
+/b/c/..a/a//.a. /b/c/..a/a/.a.
+/b/c/..a/a//.a/ /b/c/..a/a/.a
+/b/c/..a/a//..a /b/c/..a/a/..a
+/b/c/..a/a//... /b/c/..a/a/...
+/b/c/..a/a//../ /b/c/..a
+/b/c/..a/a//./a /b/c/..a/a/a
+/b/c/..a/a//./. /b/c/..a/a
+/b/c/..a/a//.// /b/c/..a/a
+/b/c/..a/a///aa /b/c/..a/a/aa
+/b/c/..a/a///a. /b/c/..a/a/a.
+/b/c/..a/a///a/ /b/c/..a/a/a
+/b/c/..a/a///.a /b/c/..a/a/.a
+/b/c/..a/a///.. /b/c/..a
+/b/c/..a/a///./ /b/c/..a/a
+/b/c/..a/a////a /b/c/..a/a/a
+/b/c/..a/a////. /b/c/..a/a
+/b/c/..a/a///// /b/c/..a/a
+/b/c/..a/.aaaaa /b/c/..a/.aaaaa
+/b/c/..a/.aaaa. /b/c/..a/.aaaa.
+/b/c/..a/.aaaa/ /b/c/..a/.aaaa
+/b/c/..a/.aaa.a /b/c/..a/.aaa.a
+/b/c/..a/.aaa.. /b/c/..a/.aaa..
+/b/c/..a/.aaa./ /b/c/..a/.aaa.
+/b/c/..a/.aaa/a /b/c/..a/.aaa/a
+/b/c/..a/.aaa/. /b/c/..a/.aaa
+/b/c/..a/.aaa// /b/c/..a/.aaa
+/b/c/..a/.aa.aa /b/c/..a/.aa.aa
+/b/c/..a/.aa.a. /b/c/..a/.aa.a.
+/b/c/..a/.aa.a/ /b/c/..a/.aa.a
+/b/c/..a/.aa..a /b/c/..a/.aa..a
+/b/c/..a/.aa... /b/c/..a/.aa...
+/b/c/..a/.aa../ /b/c/..a/.aa..
+/b/c/..a/.aa./a /b/c/..a/.aa./a
+/b/c/..a/.aa./. /b/c/..a/.aa.
+/b/c/..a/.aa.// /b/c/..a/.aa.
+/b/c/..a/.aa/aa /b/c/..a/.aa/aa
+/b/c/..a/.aa/a. /b/c/..a/.aa/a.
+/b/c/..a/.aa/a/ /b/c/..a/.aa/a
+/b/c/..a/.aa/.a /b/c/..a/.aa/.a
+/b/c/..a/.aa/.. /b/c/..a
+/b/c/..a/.aa/./ /b/c/..a/.aa
+/b/c/..a/.aa//a /b/c/..a/.aa/a
+/b/c/..a/.aa//. /b/c/..a/.aa
+/b/c/..a/.aa/// /b/c/..a/.aa
+/b/c/..a/.a.aaa /b/c/..a/.a.aaa
+/b/c/..a/.a.aa. /b/c/..a/.a.aa.
+/b/c/..a/.a.aa/ /b/c/..a/.a.aa
+/b/c/..a/.a.a.a /b/c/..a/.a.a.a
+/b/c/..a/.a.a.. /b/c/..a/.a.a..
+/b/c/..a/.a.a./ /b/c/..a/.a.a.
+/b/c/..a/.a.a/a /b/c/..a/.a.a/a
+/b/c/..a/.a.a/. /b/c/..a/.a.a
+/b/c/..a/.a.a// /b/c/..a/.a.a
+/b/c/..a/.a..aa /b/c/..a/.a..aa
+/b/c/..a/.a..a. /b/c/..a/.a..a.
+/b/c/..a/.a..a/ /b/c/..a/.a..a
+/b/c/..a/.a...a /b/c/..a/.a...a
+/b/c/..a/.a.... /b/c/..a/.a....
+/b/c/..a/.a.../ /b/c/..a/.a...
+/b/c/..a/.a../a /b/c/..a/.a../a
+/b/c/..a/.a../. /b/c/..a/.a..
+/b/c/..a/.a..// /b/c/..a/.a..
+/b/c/..a/.a./aa /b/c/..a/.a./aa
+/b/c/..a/.a./a. /b/c/..a/.a./a.
+/b/c/..a/.a./a/ /b/c/..a/.a./a
+/b/c/..a/.a./.a /b/c/..a/.a./.a
+/b/c/..a/.a./.. /b/c/..a
+/b/c/..a/.a././ /b/c/..a/.a.
+/b/c/..a/.a.//a /b/c/..a/.a./a
+/b/c/..a/.a.//. /b/c/..a/.a.
+/b/c/..a/.a./// /b/c/..a/.a.
+/b/c/..a/.a/aaa /b/c/..a/.a/aaa
+/b/c/..a/.a/aa. /b/c/..a/.a/aa.
+/b/c/..a/.a/aa/ /b/c/..a/.a/aa
+/b/c/..a/.a/a.a /b/c/..a/.a/a.a
+/b/c/..a/.a/a.. /b/c/..a/.a/a..
+/b/c/..a/.a/a./ /b/c/..a/.a/a.
+/b/c/..a/.a/a/a /b/c/..a/.a/a/a
+/b/c/..a/.a/a/. /b/c/..a/.a/a
+/b/c/..a/.a/a// /b/c/..a/.a/a
+/b/c/..a/.a/.aa /b/c/..a/.a/.aa
+/b/c/..a/.a/.a. /b/c/..a/.a/.a.
+/b/c/..a/.a/.a/ /b/c/..a/.a/.a
+/b/c/..a/.a/..a /b/c/..a/.a/..a
+/b/c/..a/.a/... /b/c/..a/.a/...
+/b/c/..a/.a/../ /b/c/..a
+/b/c/..a/.a/./a /b/c/..a/.a/a
+/b/c/..a/.a/./. /b/c/..a/.a
+/b/c/..a/.a/.// /b/c/..a/.a
+/b/c/..a/.a//aa /b/c/..a/.a/aa
+/b/c/..a/.a//a. /b/c/..a/.a/a.
+/b/c/..a/.a//a/ /b/c/..a/.a/a
+/b/c/..a/.a//.a /b/c/..a/.a/.a
+/b/c/..a/.a//.. /b/c/..a
+/b/c/..a/.a//./ /b/c/..a/.a
+/b/c/..a/.a///a /b/c/..a/.a/a
+/b/c/..a/.a///. /b/c/..a/.a
+/b/c/..a/.a//// /b/c/..a/.a
+/b/c/..a/..aaaa /b/c/..a/..aaaa
+/b/c/..a/..aaa. /b/c/..a/..aaa.
+/b/c/..a/..aaa/ /b/c/..a/..aaa
+/b/c/..a/..aa.a /b/c/..a/..aa.a
+/b/c/..a/..aa.. /b/c/..a/..aa..
+/b/c/..a/..aa./ /b/c/..a/..aa.
+/b/c/..a/..aa/a /b/c/..a/..aa/a
+/b/c/..a/..aa/. /b/c/..a/..aa
+/b/c/..a/..aa// /b/c/..a/..aa
+/b/c/..a/..a.aa /b/c/..a/..a.aa
+/b/c/..a/..a.a. /b/c/..a/..a.a.
+/b/c/..a/..a.a/ /b/c/..a/..a.a
+/b/c/..a/..a..a /b/c/..a/..a..a
+/b/c/..a/..a... /b/c/..a/..a...
+/b/c/..a/..a../ /b/c/..a/..a..
+/b/c/..a/..a./a /b/c/..a/..a./a
+/b/c/..a/..a./. /b/c/..a/..a.
+/b/c/..a/..a.// /b/c/..a/..a.
+/b/c/..a/..a/aa /b/c/..a/..a/aa
+/b/c/..a/..a/a. /b/c/..a/..a/a.
+/b/c/..a/..a/a/ /b/c/..a/..a/a
+/b/c/..a/..a/.a /b/c/..a/..a/.a
+/b/c/..a/..a/.. /b/c/..a
+/b/c/..a/..a/./ /b/c/..a/..a
+/b/c/..a/..a//a /b/c/..a/..a/a
+/b/c/..a/..a//. /b/c/..a/..a
+/b/c/..a/..a/// /b/c/..a/..a
+/b/c/..a/...aaa /b/c/..a/...aaa
+/b/c/..a/...aa. /b/c/..a/...aa.
+/b/c/..a/...aa/ /b/c/..a/...aa
+/b/c/..a/...a.a /b/c/..a/...a.a
+/b/c/..a/...a.. /b/c/..a/...a..
+/b/c/..a/...a./ /b/c/..a/...a.
+/b/c/..a/...a/a /b/c/..a/...a/a
+/b/c/..a/...a/. /b/c/..a/...a
+/b/c/..a/...a// /b/c/..a/...a
+/b/c/..a/....aa /b/c/..a/....aa
+/b/c/..a/....a. /b/c/..a/....a.
+/b/c/..a/....a/ /b/c/..a/....a
+/b/c/..a/.....a /b/c/..a/.....a
+/b/c/..a/...... /b/c/..a/......
+/b/c/..a/...../ /b/c/..a/.....
+/b/c/..a/..../a /b/c/..a/..../a
+/b/c/..a/..../. /b/c/..a/....
+/b/c/..a/....// /b/c/..a/....
+/b/c/..a/.../aa /b/c/..a/.../aa
+/b/c/..a/.../a. /b/c/..a/.../a.
+/b/c/..a/.../a/ /b/c/..a/.../a
+/b/c/..a/.../.a /b/c/..a/.../.a
+/b/c/..a/.../.. /b/c/..a
+/b/c/..a/..././ /b/c/..a/...
+/b/c/..a/...//a /b/c/..a/.../a
+/b/c/..a/...//. /b/c/..a/...
+/b/c/..a/.../// /b/c/..a/...
+/b/c/..a/../aaa /b/c/aaa
+/b/c/..a/../aa. /b/c/aa.
+/b/c/..a/../aa/ /b/c/aa
+/b/c/..a/../a.a /b/c/a.a
+/b/c/..a/../a.. /b/c/a..
+/b/c/..a/../a./ /b/c/a.
+/b/c/..a/../a/a /b/c/a/a
+/b/c/..a/../a/. /b/c/a
+/b/c/..a/../a// /b/c/a
+/b/c/..a/../.aa /b/c/.aa
+/b/c/..a/../.a. /b/c/.a.
+/b/c/..a/../.a/ /b/c/.a
+/b/c/..a/../..a /b/c/..a
+/b/c/..a/../... /b/c/...
+/b/c/..a/../../ /b
+/b/c/..a/.././a /b/c/a
+/b/c/..a/.././. /b/c
+/b/c/..a/../.// /b/c
+/b/c/..a/..//aa /b/c/aa
+/b/c/..a/..//a. /b/c/a.
+/b/c/..a/..//a/ /b/c/a
+/b/c/..a/..//.a /b/c/.a
+/b/c/..a/..//.. /b
+/b/c/..a/..//./ /b/c
+/b/c/..a/..///a /b/c/a
+/b/c/..a/..///. /b/c
+/b/c/..a/..//// /b/c
+/b/c/..a/./aaaa /b/c/..a/aaaa
+/b/c/..a/./aaa. /b/c/..a/aaa.
+/b/c/..a/./aaa/ /b/c/..a/aaa
+/b/c/..a/./aa.a /b/c/..a/aa.a
+/b/c/..a/./aa.. /b/c/..a/aa..
+/b/c/..a/./aa./ /b/c/..a/aa.
+/b/c/..a/./aa/a /b/c/..a/aa/a
+/b/c/..a/./aa/. /b/c/..a/aa
+/b/c/..a/./aa// /b/c/..a/aa
+/b/c/..a/./a.aa /b/c/..a/a.aa
+/b/c/..a/./a.a. /b/c/..a/a.a.
+/b/c/..a/./a.a/ /b/c/..a/a.a
+/b/c/..a/./a..a /b/c/..a/a..a
+/b/c/..a/./a... /b/c/..a/a...
+/b/c/..a/./a../ /b/c/..a/a..
+/b/c/..a/./a./a /b/c/..a/a./a
+/b/c/..a/./a./. /b/c/..a/a.
+/b/c/..a/./a.// /b/c/..a/a.
+/b/c/..a/./a/aa /b/c/..a/a/aa
+/b/c/..a/./a/a. /b/c/..a/a/a.
+/b/c/..a/./a/a/ /b/c/..a/a/a
+/b/c/..a/./a/.a /b/c/..a/a/.a
+/b/c/..a/./a/.. /b/c/..a
+/b/c/..a/./a/./ /b/c/..a/a
+/b/c/..a/./a//a /b/c/..a/a/a
+/b/c/..a/./a//. /b/c/..a/a
+/b/c/..a/./a/// /b/c/..a/a
+/b/c/..a/./.aaa /b/c/..a/.aaa
+/b/c/..a/./.aa. /b/c/..a/.aa.
+/b/c/..a/./.aa/ /b/c/..a/.aa
+/b/c/..a/./.a.a /b/c/..a/.a.a
+/b/c/..a/./.a.. /b/c/..a/.a..
+/b/c/..a/./.a./ /b/c/..a/.a.
+/b/c/..a/./.a/a /b/c/..a/.a/a
+/b/c/..a/./.a/. /b/c/..a/.a
+/b/c/..a/./.a// /b/c/..a/.a
+/b/c/..a/./..aa /b/c/..a/..aa
+/b/c/..a/./..a. /b/c/..a/..a.
+/b/c/..a/./..a/ /b/c/..a/..a
+/b/c/..a/./...a /b/c/..a/...a
+/b/c/..a/./.... /b/c/..a/....
+/b/c/..a/./.../ /b/c/..a/...
+/b/c/..a/./../a /b/c/a
+/b/c/..a/./../. /b/c
+/b/c/..a/./..// /b/c
+/b/c/..a/././aa /b/c/..a/aa
+/b/c/..a/././a. /b/c/..a/a.
+/b/c/..a/././a/ /b/c/..a/a
+/b/c/..a/././.a /b/c/..a/.a
+/b/c/..a/././.. /b/c
+/b/c/..a/./././ /b/c/..a
+/b/c/..a/././/a /b/c/..a/a
+/b/c/..a/././/. /b/c/..a
+/b/c/..a/././// /b/c/..a
+/b/c/..a/.//aaa /b/c/..a/aaa
+/b/c/..a/.//aa. /b/c/..a/aa.
+/b/c/..a/.//aa/ /b/c/..a/aa
+/b/c/..a/.//a.a /b/c/..a/a.a
+/b/c/..a/.//a.. /b/c/..a/a..
+/b/c/..a/.//a./ /b/c/..a/a.
+/b/c/..a/.//a/a /b/c/..a/a/a
+/b/c/..a/.//a/. /b/c/..a/a
+/b/c/..a/.//a// /b/c/..a/a
+/b/c/..a/.//.aa /b/c/..a/.aa
+/b/c/..a/.//.a. /b/c/..a/.a.
+/b/c/..a/.//.a/ /b/c/..a/.a
+/b/c/..a/.//..a /b/c/..a/..a
+/b/c/..a/.//... /b/c/..a/...
+/b/c/..a/.//../ /b/c
+/b/c/..a/.//./a /b/c/..a/a
+/b/c/..a/.//./. /b/c/..a
+/b/c/..a/.//.// /b/c/..a
+/b/c/..a/.///aa /b/c/..a/aa
+/b/c/..a/.///a. /b/c/..a/a.
+/b/c/..a/.///a/ /b/c/..a/a
+/b/c/..a/.///.a /b/c/..a/.a
+/b/c/..a/.///.. /b/c
+/b/c/..a/.///./ /b/c/..a
+/b/c/..a/.////a /b/c/..a/a
+/b/c/..a/.////. /b/c/..a
+/b/c/..a/.///// /b/c/..a
+/b/c/..a//aaaaa /b/c/..a/aaaaa
+/b/c/..a//aaaa. /b/c/..a/aaaa.
+/b/c/..a//aaaa/ /b/c/..a/aaaa
+/b/c/..a//aaa.a /b/c/..a/aaa.a
+/b/c/..a//aaa.. /b/c/..a/aaa..
+/b/c/..a//aaa./ /b/c/..a/aaa.
+/b/c/..a//aaa/a /b/c/..a/aaa/a
+/b/c/..a//aaa/. /b/c/..a/aaa
+/b/c/..a//aaa// /b/c/..a/aaa
+/b/c/..a//aa.aa /b/c/..a/aa.aa
+/b/c/..a//aa.a. /b/c/..a/aa.a.
+/b/c/..a//aa.a/ /b/c/..a/aa.a
+/b/c/..a//aa..a /b/c/..a/aa..a
+/b/c/..a//aa... /b/c/..a/aa...
+/b/c/..a//aa../ /b/c/..a/aa..
+/b/c/..a//aa./a /b/c/..a/aa./a
+/b/c/..a//aa./. /b/c/..a/aa.
+/b/c/..a//aa.// /b/c/..a/aa.
+/b/c/..a//aa/aa /b/c/..a/aa/aa
+/b/c/..a//aa/a. /b/c/..a/aa/a.
+/b/c/..a//aa/a/ /b/c/..a/aa/a
+/b/c/..a//aa/.a /b/c/..a/aa/.a
+/b/c/..a//aa/.. /b/c/..a
+/b/c/..a//aa/./ /b/c/..a/aa
+/b/c/..a//aa//a /b/c/..a/aa/a
+/b/c/..a//aa//. /b/c/..a/aa
+/b/c/..a//aa/// /b/c/..a/aa
+/b/c/..a//a.aaa /b/c/..a/a.aaa
+/b/c/..a//a.aa. /b/c/..a/a.aa.
+/b/c/..a//a.aa/ /b/c/..a/a.aa
+/b/c/..a//a.a.a /b/c/..a/a.a.a
+/b/c/..a//a.a.. /b/c/..a/a.a..
+/b/c/..a//a.a./ /b/c/..a/a.a.
+/b/c/..a//a.a/a /b/c/..a/a.a/a
+/b/c/..a//a.a/. /b/c/..a/a.a
+/b/c/..a//a.a// /b/c/..a/a.a
+/b/c/..a//a..aa /b/c/..a/a..aa
+/b/c/..a//a..a. /b/c/..a/a..a.
+/b/c/..a//a..a/ /b/c/..a/a..a
+/b/c/..a//a...a /b/c/..a/a...a
+/b/c/..a//a.... /b/c/..a/a....
+/b/c/..a//a.../ /b/c/..a/a...
+/b/c/..a//a../a /b/c/..a/a../a
+/b/c/..a//a../. /b/c/..a/a..
+/b/c/..a//a..// /b/c/..a/a..
+/b/c/..a//a./aa /b/c/..a/a./aa
+/b/c/..a//a./a. /b/c/..a/a./a.
+/b/c/..a//a./a/ /b/c/..a/a./a
+/b/c/..a//a./.a /b/c/..a/a./.a
+/b/c/..a//a./.. /b/c/..a
+/b/c/..a//a././ /b/c/..a/a.
+/b/c/..a//a.//a /b/c/..a/a./a
+/b/c/..a//a.//. /b/c/..a/a.
+/b/c/..a//a./// /b/c/..a/a.
+/b/c/..a//a/aaa /b/c/..a/a/aaa
+/b/c/..a//a/aa. /b/c/..a/a/aa.
+/b/c/..a//a/aa/ /b/c/..a/a/aa
+/b/c/..a//a/a.a /b/c/..a/a/a.a
+/b/c/..a//a/a.. /b/c/..a/a/a..
+/b/c/..a//a/a./ /b/c/..a/a/a.
+/b/c/..a//a/a/a /b/c/..a/a/a/a
+/b/c/..a//a/a/. /b/c/..a/a/a
+/b/c/..a//a/a// /b/c/..a/a/a
+/b/c/..a//a/.aa /b/c/..a/a/.aa
+/b/c/..a//a/.a. /b/c/..a/a/.a.
+/b/c/..a//a/.a/ /b/c/..a/a/.a
+/b/c/..a//a/..a /b/c/..a/a/..a
+/b/c/..a//a/... /b/c/..a/a/...
+/b/c/..a//a/../ /b/c/..a
+/b/c/..a//a/./a /b/c/..a/a/a
+/b/c/..a//a/./. /b/c/..a/a
+/b/c/..a//a/.// /b/c/..a/a
+/b/c/..a//a//aa /b/c/..a/a/aa
+/b/c/..a//a//a. /b/c/..a/a/a.
+/b/c/..a//a//a/ /b/c/..a/a/a
+/b/c/..a//a//.a /b/c/..a/a/.a
+/b/c/..a//a//.. /b/c/..a
+/b/c/..a//a//./ /b/c/..a/a
+/b/c/..a//a///a /b/c/..a/a/a
+/b/c/..a//a///. /b/c/..a/a
+/b/c/..a//a//// /b/c/..a/a
+/b/c/..a//.aaaa /b/c/..a/.aaaa
+/b/c/..a//.aaa. /b/c/..a/.aaa.
+/b/c/..a//.aaa/ /b/c/..a/.aaa
+/b/c/..a//.aa.a /b/c/..a/.aa.a
+/b/c/..a//.aa.. /b/c/..a/.aa..
+/b/c/..a//.aa./ /b/c/..a/.aa.
+/b/c/..a//.aa/a /b/c/..a/.aa/a
+/b/c/..a//.aa/. /b/c/..a/.aa
+/b/c/..a//.aa// /b/c/..a/.aa
+/b/c/..a//.a.aa /b/c/..a/.a.aa
+/b/c/..a//.a.a. /b/c/..a/.a.a.
+/b/c/..a//.a.a/ /b/c/..a/.a.a
+/b/c/..a//.a..a /b/c/..a/.a..a
+/b/c/..a//.a... /b/c/..a/.a...
+/b/c/..a//.a../ /b/c/..a/.a..
+/b/c/..a//.a./a /b/c/..a/.a./a
+/b/c/..a//.a./. /b/c/..a/.a.
+/b/c/..a//.a.// /b/c/..a/.a.
+/b/c/..a//.a/aa /b/c/..a/.a/aa
+/b/c/..a//.a/a. /b/c/..a/.a/a.
+/b/c/..a//.a/a/ /b/c/..a/.a/a
+/b/c/..a//.a/.a /b/c/..a/.a/.a
+/b/c/..a//.a/.. /b/c/..a
+/b/c/..a//.a/./ /b/c/..a/.a
+/b/c/..a//.a//a /b/c/..a/.a/a
+/b/c/..a//.a//. /b/c/..a/.a
+/b/c/..a//.a/// /b/c/..a/.a
+/b/c/..a//..aaa /b/c/..a/..aaa
+/b/c/..a//..aa. /b/c/..a/..aa.
+/b/c/..a//..aa/ /b/c/..a/..aa
+/b/c/..a//..a.a /b/c/..a/..a.a
+/b/c/..a//..a.. /b/c/..a/..a..
+/b/c/..a//..a./ /b/c/..a/..a.
+/b/c/..a//..a/a /b/c/..a/..a/a
+/b/c/..a//..a/. /b/c/..a/..a
+/b/c/..a//..a// /b/c/..a/..a
+/b/c/..a//...aa /b/c/..a/...aa
+/b/c/..a//...a. /b/c/..a/...a.
+/b/c/..a//...a/ /b/c/..a/...a
+/b/c/..a//....a /b/c/..a/....a
+/b/c/..a//..... /b/c/..a/.....
+/b/c/..a//..../ /b/c/..a/....
+/b/c/..a//.../a /b/c/..a/.../a
+/b/c/..a//.../. /b/c/..a/...
+/b/c/..a//...// /b/c/..a/...
+/b/c/..a//../aa /b/c/aa
+/b/c/..a//../a. /b/c/a.
+/b/c/..a//../a/ /b/c/a
+/b/c/..a//../.a /b/c/.a
+/b/c/..a//../.. /b
+/b/c/..a//.././ /b/c
+/b/c/..a//..//a /b/c/a
+/b/c/..a//..//. /b/c
+/b/c/..a//../// /b/c
+/b/c/..a//./aaa /b/c/..a/aaa
+/b/c/..a//./aa. /b/c/..a/aa.
+/b/c/..a//./aa/ /b/c/..a/aa
+/b/c/..a//./a.a /b/c/..a/a.a
+/b/c/..a//./a.. /b/c/..a/a..
+/b/c/..a//./a./ /b/c/..a/a.
+/b/c/..a//./a/a /b/c/..a/a/a
+/b/c/..a//./a/. /b/c/..a/a
+/b/c/..a//./a// /b/c/..a/a
+/b/c/..a//./.aa /b/c/..a/.aa
+/b/c/..a//./.a. /b/c/..a/.a.
+/b/c/..a//./.a/ /b/c/..a/.a
+/b/c/..a//./..a /b/c/..a/..a
+/b/c/..a//./... /b/c/..a/...
+/b/c/..a//./../ /b/c
+/b/c/..a//././a /b/c/..a/a
+/b/c/..a//././. /b/c/..a
+/b/c/..a//./.// /b/c/..a
+/b/c/..a//.//aa /b/c/..a/aa
+/b/c/..a//.//a. /b/c/..a/a.
+/b/c/..a//.//a/ /b/c/..a/a
+/b/c/..a//.//.a /b/c/..a/.a
+/b/c/..a//.//.. /b/c
+/b/c/..a//.//./ /b/c/..a
+/b/c/..a//.///a /b/c/..a/a
+/b/c/..a//.///. /b/c/..a
+/b/c/..a//.//// /b/c/..a
+/b/c/..a///aaaa /b/c/..a/aaaa
+/b/c/..a///aaa. /b/c/..a/aaa.
+/b/c/..a///aaa/ /b/c/..a/aaa
+/b/c/..a///aa.a /b/c/..a/aa.a
+/b/c/..a///aa.. /b/c/..a/aa..
+/b/c/..a///aa./ /b/c/..a/aa.
+/b/c/..a///aa/a /b/c/..a/aa/a
+/b/c/..a///aa/. /b/c/..a/aa
+/b/c/..a///aa// /b/c/..a/aa
+/b/c/..a///a.aa /b/c/..a/a.aa
+/b/c/..a///a.a. /b/c/..a/a.a.
+/b/c/..a///a.a/ /b/c/..a/a.a
+/b/c/..a///a..a /b/c/..a/a..a
+/b/c/..a///a... /b/c/..a/a...
+/b/c/..a///a../ /b/c/..a/a..
+/b/c/..a///a./a /b/c/..a/a./a
+/b/c/..a///a./. /b/c/..a/a.
+/b/c/..a///a.// /b/c/..a/a.
+/b/c/..a///a/aa /b/c/..a/a/aa
+/b/c/..a///a/a. /b/c/..a/a/a.
+/b/c/..a///a/a/ /b/c/..a/a/a
+/b/c/..a///a/.a /b/c/..a/a/.a
+/b/c/..a///a/.. /b/c/..a
+/b/c/..a///a/./ /b/c/..a/a
+/b/c/..a///a//a /b/c/..a/a/a
+/b/c/..a///a//. /b/c/..a/a
+/b/c/..a///a/// /b/c/..a/a
+/b/c/..a///.aaa /b/c/..a/.aaa
+/b/c/..a///.aa. /b/c/..a/.aa.
+/b/c/..a///.aa/ /b/c/..a/.aa
+/b/c/..a///.a.a /b/c/..a/.a.a
+/b/c/..a///.a.. /b/c/..a/.a..
+/b/c/..a///.a./ /b/c/..a/.a.
+/b/c/..a///.a/a /b/c/..a/.a/a
+/b/c/..a///.a/. /b/c/..a/.a
+/b/c/..a///.a// /b/c/..a/.a
+/b/c/..a///..aa /b/c/..a/..aa
+/b/c/..a///..a. /b/c/..a/..a.
+/b/c/..a///..a/ /b/c/..a/..a
+/b/c/..a///...a /b/c/..a/...a
+/b/c/..a///.... /b/c/..a/....
+/b/c/..a///.../ /b/c/..a/...
+/b/c/..a///../a /b/c/a
+/b/c/..a///../. /b/c
+/b/c/..a///..// /b/c
+/b/c/..a///./aa /b/c/..a/aa
+/b/c/..a///./a. /b/c/..a/a.
+/b/c/..a///./a/ /b/c/..a/a
+/b/c/..a///./.a /b/c/..a/.a
+/b/c/..a///./.. /b/c
+/b/c/..a///././ /b/c/..a
+/b/c/..a///.//a /b/c/..a/a
+/b/c/..a///.//. /b/c/..a
+/b/c/..a///./// /b/c/..a
+/b/c/..a////aaa /b/c/..a/aaa
+/b/c/..a////aa. /b/c/..a/aa.
+/b/c/..a////aa/ /b/c/..a/aa
+/b/c/..a////a.a /b/c/..a/a.a
+/b/c/..a////a.. /b/c/..a/a..
+/b/c/..a////a./ /b/c/..a/a.
+/b/c/..a////a/a /b/c/..a/a/a
+/b/c/..a////a/. /b/c/..a/a
+/b/c/..a////a// /b/c/..a/a
+/b/c/..a////.aa /b/c/..a/.aa
+/b/c/..a////.a. /b/c/..a/.a.
+/b/c/..a////.a/ /b/c/..a/.a
+/b/c/..a////..a /b/c/..a/..a
+/b/c/..a////... /b/c/..a/...
+/b/c/..a////../ /b/c
+/b/c/..a////./a /b/c/..a/a
+/b/c/..a////./. /b/c/..a
+/b/c/..a////.// /b/c/..a
+/b/c/..a/////aa /b/c/..a/aa
+/b/c/..a/////a. /b/c/..a/a.
+/b/c/..a/////a/ /b/c/..a/a
+/b/c/..a/////.a /b/c/..a/.a
+/b/c/..a/////.. /b/c
+/b/c/..a/////./ /b/c/..a
+/b/c/..a//////a /b/c/..a/a
+/b/c/..a//////. /b/c/..a
+/b/c/..a/////// /b/c/..a
+/b/c/...aaaaaaa /b/c/...aaaaaaa
+/b/c/...aaaaaa. /b/c/...aaaaaa.
+/b/c/...aaaaaa/ /b/c/...aaaaaa
+/b/c/...aaaaa.a /b/c/...aaaaa.a
+/b/c/...aaaaa.. /b/c/...aaaaa..
+/b/c/...aaaaa./ /b/c/...aaaaa.
+/b/c/...aaaaa/a /b/c/...aaaaa/a
+/b/c/...aaaaa/. /b/c/...aaaaa
+/b/c/...aaaaa// /b/c/...aaaaa
+/b/c/...aaaa.aa /b/c/...aaaa.aa
+/b/c/...aaaa.a. /b/c/...aaaa.a.
+/b/c/...aaaa.a/ /b/c/...aaaa.a
+/b/c/...aaaa..a /b/c/...aaaa..a
+/b/c/...aaaa... /b/c/...aaaa...
+/b/c/...aaaa../ /b/c/...aaaa..
+/b/c/...aaaa./a /b/c/...aaaa./a
+/b/c/...aaaa./. /b/c/...aaaa.
+/b/c/...aaaa.// /b/c/...aaaa.
+/b/c/...aaaa/aa /b/c/...aaaa/aa
+/b/c/...aaaa/a. /b/c/...aaaa/a.
+/b/c/...aaaa/a/ /b/c/...aaaa/a
+/b/c/...aaaa/.a /b/c/...aaaa/.a
+/b/c/...aaaa/.. /b/c
+/b/c/...aaaa/./ /b/c/...aaaa
+/b/c/...aaaa//a /b/c/...aaaa/a
+/b/c/...aaaa//. /b/c/...aaaa
+/b/c/...aaaa/// /b/c/...aaaa
+/b/c/...aaa.aaa /b/c/...aaa.aaa
+/b/c/...aaa.aa. /b/c/...aaa.aa.
+/b/c/...aaa.aa/ /b/c/...aaa.aa
+/b/c/...aaa.a.a /b/c/...aaa.a.a
+/b/c/...aaa.a.. /b/c/...aaa.a..
+/b/c/...aaa.a./ /b/c/...aaa.a.
+/b/c/...aaa.a/a /b/c/...aaa.a/a
+/b/c/...aaa.a/. /b/c/...aaa.a
+/b/c/...aaa.a// /b/c/...aaa.a
+/b/c/...aaa..aa /b/c/...aaa..aa
+/b/c/...aaa..a. /b/c/...aaa..a.
+/b/c/...aaa..a/ /b/c/...aaa..a
+/b/c/...aaa...a /b/c/...aaa...a
+/b/c/...aaa.... /b/c/...aaa....
+/b/c/...aaa.../ /b/c/...aaa...
+/b/c/...aaa../a /b/c/...aaa../a
+/b/c/...aaa../. /b/c/...aaa..
+/b/c/...aaa..// /b/c/...aaa..
+/b/c/...aaa./aa /b/c/...aaa./aa
+/b/c/...aaa./a. /b/c/...aaa./a.
+/b/c/...aaa./a/ /b/c/...aaa./a
+/b/c/...aaa./.a /b/c/...aaa./.a
+/b/c/...aaa./.. /b/c
+/b/c/...aaa././ /b/c/...aaa.
+/b/c/...aaa.//a /b/c/...aaa./a
+/b/c/...aaa.//. /b/c/...aaa.
+/b/c/...aaa./// /b/c/...aaa.
+/b/c/...aaa/aaa /b/c/...aaa/aaa
+/b/c/...aaa/aa. /b/c/...aaa/aa.
+/b/c/...aaa/aa/ /b/c/...aaa/aa
+/b/c/...aaa/a.a /b/c/...aaa/a.a
+/b/c/...aaa/a.. /b/c/...aaa/a..
+/b/c/...aaa/a./ /b/c/...aaa/a.
+/b/c/...aaa/a/a /b/c/...aaa/a/a
+/b/c/...aaa/a/. /b/c/...aaa/a
+/b/c/...aaa/a// /b/c/...aaa/a
+/b/c/...aaa/.aa /b/c/...aaa/.aa
+/b/c/...aaa/.a. /b/c/...aaa/.a.
+/b/c/...aaa/.a/ /b/c/...aaa/.a
+/b/c/...aaa/..a /b/c/...aaa/..a
+/b/c/...aaa/... /b/c/...aaa/...
+/b/c/...aaa/../ /b/c
+/b/c/...aaa/./a /b/c/...aaa/a
+/b/c/...aaa/./. /b/c/...aaa
+/b/c/...aaa/.// /b/c/...aaa
+/b/c/...aaa//aa /b/c/...aaa/aa
+/b/c/...aaa//a. /b/c/...aaa/a.
+/b/c/...aaa//a/ /b/c/...aaa/a
+/b/c/...aaa//.a /b/c/...aaa/.a
+/b/c/...aaa//.. /b/c
+/b/c/...aaa//./ /b/c/...aaa
+/b/c/...aaa///a /b/c/...aaa/a
+/b/c/...aaa///. /b/c/...aaa
+/b/c/...aaa//// /b/c/...aaa
+/b/c/...aa.aaaa /b/c/...aa.aaaa
+/b/c/...aa.aaa. /b/c/...aa.aaa.
+/b/c/...aa.aaa/ /b/c/...aa.aaa
+/b/c/...aa.aa.a /b/c/...aa.aa.a
+/b/c/...aa.aa.. /b/c/...aa.aa..
+/b/c/...aa.aa./ /b/c/...aa.aa.
+/b/c/...aa.aa/a /b/c/...aa.aa/a
+/b/c/...aa.aa/. /b/c/...aa.aa
+/b/c/...aa.aa// /b/c/...aa.aa
+/b/c/...aa.a.aa /b/c/...aa.a.aa
+/b/c/...aa.a.a. /b/c/...aa.a.a.
+/b/c/...aa.a.a/ /b/c/...aa.a.a
+/b/c/...aa.a..a /b/c/...aa.a..a
+/b/c/...aa.a... /b/c/...aa.a...
+/b/c/...aa.a../ /b/c/...aa.a..
+/b/c/...aa.a./a /b/c/...aa.a./a
+/b/c/...aa.a./. /b/c/...aa.a.
+/b/c/...aa.a.// /b/c/...aa.a.
+/b/c/...aa.a/aa /b/c/...aa.a/aa
+/b/c/...aa.a/a. /b/c/...aa.a/a.
+/b/c/...aa.a/a/ /b/c/...aa.a/a
+/b/c/...aa.a/.a /b/c/...aa.a/.a
+/b/c/...aa.a/.. /b/c
+/b/c/...aa.a/./ /b/c/...aa.a
+/b/c/...aa.a//a /b/c/...aa.a/a
+/b/c/...aa.a//. /b/c/...aa.a
+/b/c/...aa.a/// /b/c/...aa.a
+/b/c/...aa..aaa /b/c/...aa..aaa
+/b/c/...aa..aa. /b/c/...aa..aa.
+/b/c/...aa..aa/ /b/c/...aa..aa
+/b/c/...aa..a.a /b/c/...aa..a.a
+/b/c/...aa..a.. /b/c/...aa..a..
+/b/c/...aa..a./ /b/c/...aa..a.
+/b/c/...aa..a/a /b/c/...aa..a/a
+/b/c/...aa..a/. /b/c/...aa..a
+/b/c/...aa..a// /b/c/...aa..a
+/b/c/...aa...aa /b/c/...aa...aa
+/b/c/...aa...a. /b/c/...aa...a.
+/b/c/...aa...a/ /b/c/...aa...a
+/b/c/...aa....a /b/c/...aa....a
+/b/c/...aa..... /b/c/...aa.....
+/b/c/...aa..../ /b/c/...aa....
+/b/c/...aa.../a /b/c/...aa.../a
+/b/c/...aa.../. /b/c/...aa...
+/b/c/...aa...// /b/c/...aa...
+/b/c/...aa../aa /b/c/...aa../aa
+/b/c/...aa../a. /b/c/...aa../a.
+/b/c/...aa../a/ /b/c/...aa../a
+/b/c/...aa../.a /b/c/...aa../.a
+/b/c/...aa../.. /b/c
+/b/c/...aa.././ /b/c/...aa..
+/b/c/...aa..//a /b/c/...aa../a
+/b/c/...aa..//. /b/c/...aa..
+/b/c/...aa../// /b/c/...aa..
+/b/c/...aa./aaa /b/c/...aa./aaa
+/b/c/...aa./aa. /b/c/...aa./aa.
+/b/c/...aa./aa/ /b/c/...aa./aa
+/b/c/...aa./a.a /b/c/...aa./a.a
+/b/c/...aa./a.. /b/c/...aa./a..
+/b/c/...aa./a./ /b/c/...aa./a.
+/b/c/...aa./a/a /b/c/...aa./a/a
+/b/c/...aa./a/. /b/c/...aa./a
+/b/c/...aa./a// /b/c/...aa./a
+/b/c/...aa./.aa /b/c/...aa./.aa
+/b/c/...aa./.a. /b/c/...aa./.a.
+/b/c/...aa./.a/ /b/c/...aa./.a
+/b/c/...aa./..a /b/c/...aa./..a
+/b/c/...aa./... /b/c/...aa./...
+/b/c/...aa./../ /b/c
+/b/c/...aa././a /b/c/...aa./a
+/b/c/...aa././. /b/c/...aa.
+/b/c/...aa./.// /b/c/...aa.
+/b/c/...aa.//aa /b/c/...aa./aa
+/b/c/...aa.//a. /b/c/...aa./a.
+/b/c/...aa.//a/ /b/c/...aa./a
+/b/c/...aa.//.a /b/c/...aa./.a
+/b/c/...aa.//.. /b/c
+/b/c/...aa.//./ /b/c/...aa.
+/b/c/...aa.///a /b/c/...aa./a
+/b/c/...aa.///. /b/c/...aa.
+/b/c/...aa.//// /b/c/...aa.
+/b/c/...aa/aaaa /b/c/...aa/aaaa
+/b/c/...aa/aaa. /b/c/...aa/aaa.
+/b/c/...aa/aaa/ /b/c/...aa/aaa
+/b/c/...aa/aa.a /b/c/...aa/aa.a
+/b/c/...aa/aa.. /b/c/...aa/aa..
+/b/c/...aa/aa./ /b/c/...aa/aa.
+/b/c/...aa/aa/a /b/c/...aa/aa/a
+/b/c/...aa/aa/. /b/c/...aa/aa
+/b/c/...aa/aa// /b/c/...aa/aa
+/b/c/...aa/a.aa /b/c/...aa/a.aa
+/b/c/...aa/a.a. /b/c/...aa/a.a.
+/b/c/...aa/a.a/ /b/c/...aa/a.a
+/b/c/...aa/a..a /b/c/...aa/a..a
+/b/c/...aa/a... /b/c/...aa/a...
+/b/c/...aa/a../ /b/c/...aa/a..
+/b/c/...aa/a./a /b/c/...aa/a./a
+/b/c/...aa/a./. /b/c/...aa/a.
+/b/c/...aa/a.// /b/c/...aa/a.
+/b/c/...aa/a/aa /b/c/...aa/a/aa
+/b/c/...aa/a/a. /b/c/...aa/a/a.
+/b/c/...aa/a/a/ /b/c/...aa/a/a
+/b/c/...aa/a/.a /b/c/...aa/a/.a
+/b/c/...aa/a/.. /b/c/...aa
+/b/c/...aa/a/./ /b/c/...aa/a
+/b/c/...aa/a//a /b/c/...aa/a/a
+/b/c/...aa/a//. /b/c/...aa/a
+/b/c/...aa/a/// /b/c/...aa/a
+/b/c/...aa/.aaa /b/c/...aa/.aaa
+/b/c/...aa/.aa. /b/c/...aa/.aa.
+/b/c/...aa/.aa/ /b/c/...aa/.aa
+/b/c/...aa/.a.a /b/c/...aa/.a.a
+/b/c/...aa/.a.. /b/c/...aa/.a..
+/b/c/...aa/.a./ /b/c/...aa/.a.
+/b/c/...aa/.a/a /b/c/...aa/.a/a
+/b/c/...aa/.a/. /b/c/...aa/.a
+/b/c/...aa/.a// /b/c/...aa/.a
+/b/c/...aa/..aa /b/c/...aa/..aa
+/b/c/...aa/..a. /b/c/...aa/..a.
+/b/c/...aa/..a/ /b/c/...aa/..a
+/b/c/...aa/...a /b/c/...aa/...a
+/b/c/...aa/.... /b/c/...aa/....
+/b/c/...aa/.../ /b/c/...aa/...
+/b/c/...aa/../a /b/c/a
+/b/c/...aa/../. /b/c
+/b/c/...aa/..// /b/c
+/b/c/...aa/./aa /b/c/...aa/aa
+/b/c/...aa/./a. /b/c/...aa/a.
+/b/c/...aa/./a/ /b/c/...aa/a
+/b/c/...aa/./.a /b/c/...aa/.a
+/b/c/...aa/./.. /b/c
+/b/c/...aa/././ /b/c/...aa
+/b/c/...aa/.//a /b/c/...aa/a
+/b/c/...aa/.//. /b/c/...aa
+/b/c/...aa/./// /b/c/...aa
+/b/c/...aa//aaa /b/c/...aa/aaa
+/b/c/...aa//aa. /b/c/...aa/aa.
+/b/c/...aa//aa/ /b/c/...aa/aa
+/b/c/...aa//a.a /b/c/...aa/a.a
+/b/c/...aa//a.. /b/c/...aa/a..
+/b/c/...aa//a./ /b/c/...aa/a.
+/b/c/...aa//a/a /b/c/...aa/a/a
+/b/c/...aa//a/. /b/c/...aa/a
+/b/c/...aa//a// /b/c/...aa/a
+/b/c/...aa//.aa /b/c/...aa/.aa
+/b/c/...aa//.a. /b/c/...aa/.a.
+/b/c/...aa//.a/ /b/c/...aa/.a
+/b/c/...aa//..a /b/c/...aa/..a
+/b/c/...aa//... /b/c/...aa/...
+/b/c/...aa//../ /b/c
+/b/c/...aa//./a /b/c/...aa/a
+/b/c/...aa//./. /b/c/...aa
+/b/c/...aa//.// /b/c/...aa
+/b/c/...aa///aa /b/c/...aa/aa
+/b/c/...aa///a. /b/c/...aa/a.
+/b/c/...aa///a/ /b/c/...aa/a
+/b/c/...aa///.a /b/c/...aa/.a
+/b/c/...aa///.. /b/c
+/b/c/...aa///./ /b/c/...aa
+/b/c/...aa////a /b/c/...aa/a
+/b/c/...aa////. /b/c/...aa
+/b/c/...aa///// /b/c/...aa
+/b/c/...a.aaaaa /b/c/...a.aaaaa
+/b/c/...a.aaaa. /b/c/...a.aaaa.
+/b/c/...a.aaaa/ /b/c/...a.aaaa
+/b/c/...a.aaa.a /b/c/...a.aaa.a
+/b/c/...a.aaa.. /b/c/...a.aaa..
+/b/c/...a.aaa./ /b/c/...a.aaa.
+/b/c/...a.aaa/a /b/c/...a.aaa/a
+/b/c/...a.aaa/. /b/c/...a.aaa
+/b/c/...a.aaa// /b/c/...a.aaa
+/b/c/...a.aa.aa /b/c/...a.aa.aa
+/b/c/...a.aa.a. /b/c/...a.aa.a.
+/b/c/...a.aa.a/ /b/c/...a.aa.a
+/b/c/...a.aa..a /b/c/...a.aa..a
+/b/c/...a.aa... /b/c/...a.aa...
+/b/c/...a.aa../ /b/c/...a.aa..
+/b/c/...a.aa./a /b/c/...a.aa./a
+/b/c/...a.aa./. /b/c/...a.aa.
+/b/c/...a.aa.// /b/c/...a.aa.
+/b/c/...a.aa/aa /b/c/...a.aa/aa
+/b/c/...a.aa/a. /b/c/...a.aa/a.
+/b/c/...a.aa/a/ /b/c/...a.aa/a
+/b/c/...a.aa/.a /b/c/...a.aa/.a
+/b/c/...a.aa/.. /b/c
+/b/c/...a.aa/./ /b/c/...a.aa
+/b/c/...a.aa//a /b/c/...a.aa/a
+/b/c/...a.aa//. /b/c/...a.aa
+/b/c/...a.aa/// /b/c/...a.aa
+/b/c/...a.a.aaa /b/c/...a.a.aaa
+/b/c/...a.a.aa. /b/c/...a.a.aa.
+/b/c/...a.a.aa/ /b/c/...a.a.aa
+/b/c/...a.a.a.a /b/c/...a.a.a.a
+/b/c/...a.a.a.. /b/c/...a.a.a..
+/b/c/...a.a.a./ /b/c/...a.a.a.
+/b/c/...a.a.a/a /b/c/...a.a.a/a
+/b/c/...a.a.a/. /b/c/...a.a.a
+/b/c/...a.a.a// /b/c/...a.a.a
+/b/c/...a.a..aa /b/c/...a.a..aa
+/b/c/...a.a..a. /b/c/...a.a..a.
+/b/c/...a.a..a/ /b/c/...a.a..a
+/b/c/...a.a...a /b/c/...a.a...a
+/b/c/...a.a.... /b/c/...a.a....
+/b/c/...a.a.../ /b/c/...a.a...
+/b/c/...a.a../a /b/c/...a.a../a
+/b/c/...a.a../. /b/c/...a.a..
+/b/c/...a.a..// /b/c/...a.a..
+/b/c/...a.a./aa /b/c/...a.a./aa
+/b/c/...a.a./a. /b/c/...a.a./a.
+/b/c/...a.a./a/ /b/c/...a.a./a
+/b/c/...a.a./.a /b/c/...a.a./.a
+/b/c/...a.a./.. /b/c
+/b/c/...a.a././ /b/c/...a.a.
+/b/c/...a.a.//a /b/c/...a.a./a
+/b/c/...a.a.//. /b/c/...a.a.
+/b/c/...a.a./// /b/c/...a.a.
+/b/c/...a.a/aaa /b/c/...a.a/aaa
+/b/c/...a.a/aa. /b/c/...a.a/aa.
+/b/c/...a.a/aa/ /b/c/...a.a/aa
+/b/c/...a.a/a.a /b/c/...a.a/a.a
+/b/c/...a.a/a.. /b/c/...a.a/a..
+/b/c/...a.a/a./ /b/c/...a.a/a.
+/b/c/...a.a/a/a /b/c/...a.a/a/a
+/b/c/...a.a/a/. /b/c/...a.a/a
+/b/c/...a.a/a// /b/c/...a.a/a
+/b/c/...a.a/.aa /b/c/...a.a/.aa
+/b/c/...a.a/.a. /b/c/...a.a/.a.
+/b/c/...a.a/.a/ /b/c/...a.a/.a
+/b/c/...a.a/..a /b/c/...a.a/..a
+/b/c/...a.a/... /b/c/...a.a/...
+/b/c/...a.a/../ /b/c
+/b/c/...a.a/./a /b/c/...a.a/a
+/b/c/...a.a/./. /b/c/...a.a
+/b/c/...a.a/.// /b/c/...a.a
+/b/c/...a.a//aa /b/c/...a.a/aa
+/b/c/...a.a//a. /b/c/...a.a/a.
+/b/c/...a.a//a/ /b/c/...a.a/a
+/b/c/...a.a//.a /b/c/...a.a/.a
+/b/c/...a.a//.. /b/c
+/b/c/...a.a//./ /b/c/...a.a
+/b/c/...a.a///a /b/c/...a.a/a
+/b/c/...a.a///. /b/c/...a.a
+/b/c/...a.a//// /b/c/...a.a
+/b/c/...a..aaaa /b/c/...a..aaaa
+/b/c/...a..aaa. /b/c/...a..aaa.
+/b/c/...a..aaa/ /b/c/...a..aaa
+/b/c/...a..aa.a /b/c/...a..aa.a
+/b/c/...a..aa.. /b/c/...a..aa..
+/b/c/...a..aa./ /b/c/...a..aa.
+/b/c/...a..aa/a /b/c/...a..aa/a
+/b/c/...a..aa/. /b/c/...a..aa
+/b/c/...a..aa// /b/c/...a..aa
+/b/c/...a..a.aa /b/c/...a..a.aa
+/b/c/...a..a.a. /b/c/...a..a.a.
+/b/c/...a..a.a/ /b/c/...a..a.a
+/b/c/...a..a..a /b/c/...a..a..a
+/b/c/...a..a... /b/c/...a..a...
+/b/c/...a..a../ /b/c/...a..a..
+/b/c/...a..a./a /b/c/...a..a./a
+/b/c/...a..a./. /b/c/...a..a.
+/b/c/...a..a.// /b/c/...a..a.
+/b/c/...a..a/aa /b/c/...a..a/aa
+/b/c/...a..a/a. /b/c/...a..a/a.
+/b/c/...a..a/a/ /b/c/...a..a/a
+/b/c/...a..a/.a /b/c/...a..a/.a
+/b/c/...a..a/.. /b/c
+/b/c/...a..a/./ /b/c/...a..a
+/b/c/...a..a//a /b/c/...a..a/a
+/b/c/...a..a//. /b/c/...a..a
+/b/c/...a..a/// /b/c/...a..a
+/b/c/...a...aaa /b/c/...a...aaa
+/b/c/...a...aa. /b/c/...a...aa.
+/b/c/...a...aa/ /b/c/...a...aa
+/b/c/...a...a.a /b/c/...a...a.a
+/b/c/...a...a.. /b/c/...a...a..
+/b/c/...a...a./ /b/c/...a...a.
+/b/c/...a...a/a /b/c/...a...a/a
+/b/c/...a...a/. /b/c/...a...a
+/b/c/...a...a// /b/c/...a...a
+/b/c/...a....aa /b/c/...a....aa
+/b/c/...a....a. /b/c/...a....a.
+/b/c/...a....a/ /b/c/...a....a
+/b/c/...a.....a /b/c/...a.....a
+/b/c/...a...... /b/c/...a......
+/b/c/...a...../ /b/c/...a.....
+/b/c/...a..../a /b/c/...a..../a
+/b/c/...a..../. /b/c/...a....
+/b/c/...a....// /b/c/...a....
+/b/c/...a.../aa /b/c/...a.../aa
+/b/c/...a.../a. /b/c/...a.../a.
+/b/c/...a.../a/ /b/c/...a.../a
+/b/c/...a.../.a /b/c/...a.../.a
+/b/c/...a.../.. /b/c
+/b/c/...a..././ /b/c/...a...
+/b/c/...a...//a /b/c/...a.../a
+/b/c/...a...//. /b/c/...a...
+/b/c/...a.../// /b/c/...a...
+/b/c/...a../aaa /b/c/...a../aaa
+/b/c/...a../aa. /b/c/...a../aa.
+/b/c/...a../aa/ /b/c/...a../aa
+/b/c/...a../a.a /b/c/...a../a.a
+/b/c/...a../a.. /b/c/...a../a..
+/b/c/...a../a./ /b/c/...a../a.
+/b/c/...a../a/a /b/c/...a../a/a
+/b/c/...a../a/. /b/c/...a../a
+/b/c/...a../a// /b/c/...a../a
+/b/c/...a../.aa /b/c/...a../.aa
+/b/c/...a../.a. /b/c/...a../.a.
+/b/c/...a../.a/ /b/c/...a../.a
+/b/c/...a../..a /b/c/...a../..a
+/b/c/...a../... /b/c/...a../...
+/b/c/...a../../ /b/c
+/b/c/...a.././a /b/c/...a../a
+/b/c/...a.././. /b/c/...a..
+/b/c/...a../.// /b/c/...a..
+/b/c/...a..//aa /b/c/...a../aa
+/b/c/...a..//a. /b/c/...a../a.
+/b/c/...a..//a/ /b/c/...a../a
+/b/c/...a..//.a /b/c/...a../.a
+/b/c/...a..//.. /b/c
+/b/c/...a..//./ /b/c/...a..
+/b/c/...a..///a /b/c/...a../a
+/b/c/...a..///. /b/c/...a..
+/b/c/...a..//// /b/c/...a..
+/b/c/...a./aaaa /b/c/...a./aaaa
+/b/c/...a./aaa. /b/c/...a./aaa.
+/b/c/...a./aaa/ /b/c/...a./aaa
+/b/c/...a./aa.a /b/c/...a./aa.a
+/b/c/...a./aa.. /b/c/...a./aa..
+/b/c/...a./aa./ /b/c/...a./aa.
+/b/c/...a./aa/a /b/c/...a./aa/a
+/b/c/...a./aa/. /b/c/...a./aa
+/b/c/...a./aa// /b/c/...a./aa
+/b/c/...a./a.aa /b/c/...a./a.aa
+/b/c/...a./a.a. /b/c/...a./a.a.
+/b/c/...a./a.a/ /b/c/...a./a.a
+/b/c/...a./a..a /b/c/...a./a..a
+/b/c/...a./a... /b/c/...a./a...
+/b/c/...a./a../ /b/c/...a./a..
+/b/c/...a./a./a /b/c/...a./a./a
+/b/c/...a./a./. /b/c/...a./a.
+/b/c/...a./a.// /b/c/...a./a.
+/b/c/...a./a/aa /b/c/...a./a/aa
+/b/c/...a./a/a. /b/c/...a./a/a.
+/b/c/...a./a/a/ /b/c/...a./a/a
+/b/c/...a./a/.a /b/c/...a./a/.a
+/b/c/...a./a/.. /b/c/...a.
+/b/c/...a./a/./ /b/c/...a./a
+/b/c/...a./a//a /b/c/...a./a/a
+/b/c/...a./a//. /b/c/...a./a
+/b/c/...a./a/// /b/c/...a./a
+/b/c/...a./.aaa /b/c/...a./.aaa
+/b/c/...a./.aa. /b/c/...a./.aa.
+/b/c/...a./.aa/ /b/c/...a./.aa
+/b/c/...a./.a.a /b/c/...a./.a.a
+/b/c/...a./.a.. /b/c/...a./.a..
+/b/c/...a./.a./ /b/c/...a./.a.
+/b/c/...a./.a/a /b/c/...a./.a/a
+/b/c/...a./.a/. /b/c/...a./.a
+/b/c/...a./.a// /b/c/...a./.a
+/b/c/...a./..aa /b/c/...a./..aa
+/b/c/...a./..a. /b/c/...a./..a.
+/b/c/...a./..a/ /b/c/...a./..a
+/b/c/...a./...a /b/c/...a./...a
+/b/c/...a./.... /b/c/...a./....
+/b/c/...a./.../ /b/c/...a./...
+/b/c/...a./../a /b/c/a
+/b/c/...a./../. /b/c
+/b/c/...a./..// /b/c
+/b/c/...a././aa /b/c/...a./aa
+/b/c/...a././a. /b/c/...a./a.
+/b/c/...a././a/ /b/c/...a./a
+/b/c/...a././.a /b/c/...a./.a
+/b/c/...a././.. /b/c
+/b/c/...a./././ /b/c/...a.
+/b/c/...a././/a /b/c/...a./a
+/b/c/...a././/. /b/c/...a.
+/b/c/...a././// /b/c/...a.
+/b/c/...a.//aaa /b/c/...a./aaa
+/b/c/...a.//aa. /b/c/...a./aa.
+/b/c/...a.//aa/ /b/c/...a./aa
+/b/c/...a.//a.a /b/c/...a./a.a
+/b/c/...a.//a.. /b/c/...a./a..
+/b/c/...a.//a./ /b/c/...a./a.
+/b/c/...a.//a/a /b/c/...a./a/a
+/b/c/...a.//a/. /b/c/...a./a
+/b/c/...a.//a// /b/c/...a./a
+/b/c/...a.//.aa /b/c/...a./.aa
+/b/c/...a.//.a. /b/c/...a./.a.
+/b/c/...a.//.a/ /b/c/...a./.a
+/b/c/...a.//..a /b/c/...a./..a
+/b/c/...a.//... /b/c/...a./...
+/b/c/...a.//../ /b/c
+/b/c/...a.//./a /b/c/...a./a
+/b/c/...a.//./. /b/c/...a.
+/b/c/...a.//.// /b/c/...a.
+/b/c/...a.///aa /b/c/...a./aa
+/b/c/...a.///a. /b/c/...a./a.
+/b/c/...a.///a/ /b/c/...a./a
+/b/c/...a.///.a /b/c/...a./.a
+/b/c/...a.///.. /b/c
+/b/c/...a.///./ /b/c/...a.
+/b/c/...a.////a /b/c/...a./a
+/b/c/...a.////. /b/c/...a.
+/b/c/...a.///// /b/c/...a.
+/b/c/...a/aaaaa /b/c/...a/aaaaa
+/b/c/...a/aaaa. /b/c/...a/aaaa.
+/b/c/...a/aaaa/ /b/c/...a/aaaa
+/b/c/...a/aaa.a /b/c/...a/aaa.a
+/b/c/...a/aaa.. /b/c/...a/aaa..
+/b/c/...a/aaa./ /b/c/...a/aaa.
+/b/c/...a/aaa/a /b/c/...a/aaa/a
+/b/c/...a/aaa/. /b/c/...a/aaa
+/b/c/...a/aaa// /b/c/...a/aaa
+/b/c/...a/aa.aa /b/c/...a/aa.aa
+/b/c/...a/aa.a. /b/c/...a/aa.a.
+/b/c/...a/aa.a/ /b/c/...a/aa.a
+/b/c/...a/aa..a /b/c/...a/aa..a
+/b/c/...a/aa... /b/c/...a/aa...
+/b/c/...a/aa../ /b/c/...a/aa..
+/b/c/...a/aa./a /b/c/...a/aa./a
+/b/c/...a/aa./. /b/c/...a/aa.
+/b/c/...a/aa.// /b/c/...a/aa.
+/b/c/...a/aa/aa /b/c/...a/aa/aa
+/b/c/...a/aa/a. /b/c/...a/aa/a.
+/b/c/...a/aa/a/ /b/c/...a/aa/a
+/b/c/...a/aa/.a /b/c/...a/aa/.a
+/b/c/...a/aa/.. /b/c/...a
+/b/c/...a/aa/./ /b/c/...a/aa
+/b/c/...a/aa//a /b/c/...a/aa/a
+/b/c/...a/aa//. /b/c/...a/aa
+/b/c/...a/aa/// /b/c/...a/aa
+/b/c/...a/a.aaa /b/c/...a/a.aaa
+/b/c/...a/a.aa. /b/c/...a/a.aa.
+/b/c/...a/a.aa/ /b/c/...a/a.aa
+/b/c/...a/a.a.a /b/c/...a/a.a.a
+/b/c/...a/a.a.. /b/c/...a/a.a..
+/b/c/...a/a.a./ /b/c/...a/a.a.
+/b/c/...a/a.a/a /b/c/...a/a.a/a
+/b/c/...a/a.a/. /b/c/...a/a.a
+/b/c/...a/a.a// /b/c/...a/a.a
+/b/c/...a/a..aa /b/c/...a/a..aa
+/b/c/...a/a..a. /b/c/...a/a..a.
+/b/c/...a/a..a/ /b/c/...a/a..a
+/b/c/...a/a...a /b/c/...a/a...a
+/b/c/...a/a.... /b/c/...a/a....
+/b/c/...a/a.../ /b/c/...a/a...
+/b/c/...a/a../a /b/c/...a/a../a
+/b/c/...a/a../. /b/c/...a/a..
+/b/c/...a/a..// /b/c/...a/a..
+/b/c/...a/a./aa /b/c/...a/a./aa
+/b/c/...a/a./a. /b/c/...a/a./a.
+/b/c/...a/a./a/ /b/c/...a/a./a
+/b/c/...a/a./.a /b/c/...a/a./.a
+/b/c/...a/a./.. /b/c/...a
+/b/c/...a/a././ /b/c/...a/a.
+/b/c/...a/a.//a /b/c/...a/a./a
+/b/c/...a/a.//. /b/c/...a/a.
+/b/c/...a/a./// /b/c/...a/a.
+/b/c/...a/a/aaa /b/c/...a/a/aaa
+/b/c/...a/a/aa. /b/c/...a/a/aa.
+/b/c/...a/a/aa/ /b/c/...a/a/aa
+/b/c/...a/a/a.a /b/c/...a/a/a.a
+/b/c/...a/a/a.. /b/c/...a/a/a..
+/b/c/...a/a/a./ /b/c/...a/a/a.
+/b/c/...a/a/a/a /b/c/...a/a/a/a
+/b/c/...a/a/a/. /b/c/...a/a/a
+/b/c/...a/a/a// /b/c/...a/a/a
+/b/c/...a/a/.aa /b/c/...a/a/.aa
+/b/c/...a/a/.a. /b/c/...a/a/.a.
+/b/c/...a/a/.a/ /b/c/...a/a/.a
+/b/c/...a/a/..a /b/c/...a/a/..a
+/b/c/...a/a/... /b/c/...a/a/...
+/b/c/...a/a/../ /b/c/...a
+/b/c/...a/a/./a /b/c/...a/a/a
+/b/c/...a/a/./. /b/c/...a/a
+/b/c/...a/a/.// /b/c/...a/a
+/b/c/...a/a//aa /b/c/...a/a/aa
+/b/c/...a/a//a. /b/c/...a/a/a.
+/b/c/...a/a//a/ /b/c/...a/a/a
+/b/c/...a/a//.a /b/c/...a/a/.a
+/b/c/...a/a//.. /b/c/...a
+/b/c/...a/a//./ /b/c/...a/a
+/b/c/...a/a///a /b/c/...a/a/a
+/b/c/...a/a///. /b/c/...a/a
+/b/c/...a/a//// /b/c/...a/a
+/b/c/...a/.aaaa /b/c/...a/.aaaa
+/b/c/...a/.aaa. /b/c/...a/.aaa.
+/b/c/...a/.aaa/ /b/c/...a/.aaa
+/b/c/...a/.aa.a /b/c/...a/.aa.a
+/b/c/...a/.aa.. /b/c/...a/.aa..
+/b/c/...a/.aa./ /b/c/...a/.aa.
+/b/c/...a/.aa/a /b/c/...a/.aa/a
+/b/c/...a/.aa/. /b/c/...a/.aa
+/b/c/...a/.aa// /b/c/...a/.aa
+/b/c/...a/.a.aa /b/c/...a/.a.aa
+/b/c/...a/.a.a. /b/c/...a/.a.a.
+/b/c/...a/.a.a/ /b/c/...a/.a.a
+/b/c/...a/.a..a /b/c/...a/.a..a
+/b/c/...a/.a... /b/c/...a/.a...
+/b/c/...a/.a../ /b/c/...a/.a..
+/b/c/...a/.a./a /b/c/...a/.a./a
+/b/c/...a/.a./. /b/c/...a/.a.
+/b/c/...a/.a.// /b/c/...a/.a.
+/b/c/...a/.a/aa /b/c/...a/.a/aa
+/b/c/...a/.a/a. /b/c/...a/.a/a.
+/b/c/...a/.a/a/ /b/c/...a/.a/a
+/b/c/...a/.a/.a /b/c/...a/.a/.a
+/b/c/...a/.a/.. /b/c/...a
+/b/c/...a/.a/./ /b/c/...a/.a
+/b/c/...a/.a//a /b/c/...a/.a/a
+/b/c/...a/.a//. /b/c/...a/.a
+/b/c/...a/.a/// /b/c/...a/.a
+/b/c/...a/..aaa /b/c/...a/..aaa
+/b/c/...a/..aa. /b/c/...a/..aa.
+/b/c/...a/..aa/ /b/c/...a/..aa
+/b/c/...a/..a.a /b/c/...a/..a.a
+/b/c/...a/..a.. /b/c/...a/..a..
+/b/c/...a/..a./ /b/c/...a/..a.
+/b/c/...a/..a/a /b/c/...a/..a/a
+/b/c/...a/..a/. /b/c/...a/..a
+/b/c/...a/..a// /b/c/...a/..a
+/b/c/...a/...aa /b/c/...a/...aa
+/b/c/...a/...a. /b/c/...a/...a.
+/b/c/...a/...a/ /b/c/...a/...a
+/b/c/...a/....a /b/c/...a/....a
+/b/c/...a/..... /b/c/...a/.....
+/b/c/...a/..../ /b/c/...a/....
+/b/c/...a/.../a /b/c/...a/.../a
+/b/c/...a/.../. /b/c/...a/...
+/b/c/...a/...// /b/c/...a/...
+/b/c/...a/../aa /b/c/aa
+/b/c/...a/../a. /b/c/a.
+/b/c/...a/../a/ /b/c/a
+/b/c/...a/../.a /b/c/.a
+/b/c/...a/../.. /b
+/b/c/...a/.././ /b/c
+/b/c/...a/..//a /b/c/a
+/b/c/...a/..//. /b/c
+/b/c/...a/../// /b/c
+/b/c/...a/./aaa /b/c/...a/aaa
+/b/c/...a/./aa. /b/c/...a/aa.
+/b/c/...a/./aa/ /b/c/...a/aa
+/b/c/...a/./a.a /b/c/...a/a.a
+/b/c/...a/./a.. /b/c/...a/a..
+/b/c/...a/./a./ /b/c/...a/a.
+/b/c/...a/./a/a /b/c/...a/a/a
+/b/c/...a/./a/. /b/c/...a/a
+/b/c/...a/./a// /b/c/...a/a
+/b/c/...a/./.aa /b/c/...a/.aa
+/b/c/...a/./.a. /b/c/...a/.a.
+/b/c/...a/./.a/ /b/c/...a/.a
+/b/c/...a/./..a /b/c/...a/..a
+/b/c/...a/./... /b/c/...a/...
+/b/c/...a/./../ /b/c
+/b/c/...a/././a /b/c/...a/a
+/b/c/...a/././. /b/c/...a
+/b/c/...a/./.// /b/c/...a
+/b/c/...a/.//aa /b/c/...a/aa
+/b/c/...a/.//a. /b/c/...a/a.
+/b/c/...a/.//a/ /b/c/...a/a
+/b/c/...a/.//.a /b/c/...a/.a
+/b/c/...a/.//.. /b/c
+/b/c/...a/.//./ /b/c/...a
+/b/c/...a/.///a /b/c/...a/a
+/b/c/...a/.///. /b/c/...a
+/b/c/...a/.//// /b/c/...a
+/b/c/...a//aaaa /b/c/...a/aaaa
+/b/c/...a//aaa. /b/c/...a/aaa.
+/b/c/...a//aaa/ /b/c/...a/aaa
+/b/c/...a//aa.a /b/c/...a/aa.a
+/b/c/...a//aa.. /b/c/...a/aa..
+/b/c/...a//aa./ /b/c/...a/aa.
+/b/c/...a//aa/a /b/c/...a/aa/a
+/b/c/...a//aa/. /b/c/...a/aa
+/b/c/...a//aa// /b/c/...a/aa
+/b/c/...a//a.aa /b/c/...a/a.aa
+/b/c/...a//a.a. /b/c/...a/a.a.
+/b/c/...a//a.a/ /b/c/...a/a.a
+/b/c/...a//a..a /b/c/...a/a..a
+/b/c/...a//a... /b/c/...a/a...
+/b/c/...a//a../ /b/c/...a/a..
+/b/c/...a//a./a /b/c/...a/a./a
+/b/c/...a//a./. /b/c/...a/a.
+/b/c/...a//a.// /b/c/...a/a.
+/b/c/...a//a/aa /b/c/...a/a/aa
+/b/c/...a//a/a. /b/c/...a/a/a.
+/b/c/...a//a/a/ /b/c/...a/a/a
+/b/c/...a//a/.a /b/c/...a/a/.a
+/b/c/...a//a/.. /b/c/...a
+/b/c/...a//a/./ /b/c/...a/a
+/b/c/...a//a//a /b/c/...a/a/a
+/b/c/...a//a//. /b/c/...a/a
+/b/c/...a//a/// /b/c/...a/a
+/b/c/...a//.aaa /b/c/...a/.aaa
+/b/c/...a//.aa. /b/c/...a/.aa.
+/b/c/...a//.aa/ /b/c/...a/.aa
+/b/c/...a//.a.a /b/c/...a/.a.a
+/b/c/...a//.a.. /b/c/...a/.a..
+/b/c/...a//.a./ /b/c/...a/.a.
+/b/c/...a//.a/a /b/c/...a/.a/a
+/b/c/...a//.a/. /b/c/...a/.a
+/b/c/...a//.a// /b/c/...a/.a
+/b/c/...a//..aa /b/c/...a/..aa
+/b/c/...a//..a. /b/c/...a/..a.
+/b/c/...a//..a/ /b/c/...a/..a
+/b/c/...a//...a /b/c/...a/...a
+/b/c/...a//.... /b/c/...a/....
+/b/c/...a//.../ /b/c/...a/...
+/b/c/...a//../a /b/c/a
+/b/c/...a//../. /b/c
+/b/c/...a//..// /b/c
+/b/c/...a//./aa /b/c/...a/aa
+/b/c/...a//./a. /b/c/...a/a.
+/b/c/...a//./a/ /b/c/...a/a
+/b/c/...a//./.a /b/c/...a/.a
+/b/c/...a//./.. /b/c
+/b/c/...a//././ /b/c/...a
+/b/c/...a//.//a /b/c/...a/a
+/b/c/...a//.//. /b/c/...a
+/b/c/...a//./// /b/c/...a
+/b/c/...a///aaa /b/c/...a/aaa
+/b/c/...a///aa. /b/c/...a/aa.
+/b/c/...a///aa/ /b/c/...a/aa
+/b/c/...a///a.a /b/c/...a/a.a
+/b/c/...a///a.. /b/c/...a/a..
+/b/c/...a///a./ /b/c/...a/a.
+/b/c/...a///a/a /b/c/...a/a/a
+/b/c/...a///a/. /b/c/...a/a
+/b/c/...a///a// /b/c/...a/a
+/b/c/...a///.aa /b/c/...a/.aa
+/b/c/...a///.a. /b/c/...a/.a.
+/b/c/...a///.a/ /b/c/...a/.a
+/b/c/...a///..a /b/c/...a/..a
+/b/c/...a///... /b/c/...a/...
+/b/c/...a///../ /b/c
+/b/c/...a///./a /b/c/...a/a
+/b/c/...a///./. /b/c/...a
+/b/c/...a///.// /b/c/...a
+/b/c/...a////aa /b/c/...a/aa
+/b/c/...a////a. /b/c/...a/a.
+/b/c/...a////a/ /b/c/...a/a
+/b/c/...a////.a /b/c/...a/.a
+/b/c/...a////.. /b/c
+/b/c/...a////./ /b/c/...a
+/b/c/...a/////a /b/c/...a/a
+/b/c/...a/////. /b/c/...a
+/b/c/...a////// /b/c/...a
+/b/c/....aaaaaa /b/c/....aaaaaa
+/b/c/....aaaaa. /b/c/....aaaaa.
+/b/c/....aaaaa/ /b/c/....aaaaa
+/b/c/....aaaa.a /b/c/....aaaa.a
+/b/c/....aaaa.. /b/c/....aaaa..
+/b/c/....aaaa./ /b/c/....aaaa.
+/b/c/....aaaa/a /b/c/....aaaa/a
+/b/c/....aaaa/. /b/c/....aaaa
+/b/c/....aaaa// /b/c/....aaaa
+/b/c/....aaa.aa /b/c/....aaa.aa
+/b/c/....aaa.a. /b/c/....aaa.a.
+/b/c/....aaa.a/ /b/c/....aaa.a
+/b/c/....aaa..a /b/c/....aaa..a
+/b/c/....aaa... /b/c/....aaa...
+/b/c/....aaa../ /b/c/....aaa..
+/b/c/....aaa./a /b/c/....aaa./a
+/b/c/....aaa./. /b/c/....aaa.
+/b/c/....aaa.// /b/c/....aaa.
+/b/c/....aaa/aa /b/c/....aaa/aa
+/b/c/....aaa/a. /b/c/....aaa/a.
+/b/c/....aaa/a/ /b/c/....aaa/a
+/b/c/....aaa/.a /b/c/....aaa/.a
+/b/c/....aaa/.. /b/c
+/b/c/....aaa/./ /b/c/....aaa
+/b/c/....aaa//a /b/c/....aaa/a
+/b/c/....aaa//. /b/c/....aaa
+/b/c/....aaa/// /b/c/....aaa
+/b/c/....aa.aaa /b/c/....aa.aaa
+/b/c/....aa.aa. /b/c/....aa.aa.
+/b/c/....aa.aa/ /b/c/....aa.aa
+/b/c/....aa.a.a /b/c/....aa.a.a
+/b/c/....aa.a.. /b/c/....aa.a..
+/b/c/....aa.a./ /b/c/....aa.a.
+/b/c/....aa.a/a /b/c/....aa.a/a
+/b/c/....aa.a/. /b/c/....aa.a
+/b/c/....aa.a// /b/c/....aa.a
+/b/c/....aa..aa /b/c/....aa..aa
+/b/c/....aa..a. /b/c/....aa..a.
+/b/c/....aa..a/ /b/c/....aa..a
+/b/c/....aa...a /b/c/....aa...a
+/b/c/....aa.... /b/c/....aa....
+/b/c/....aa.../ /b/c/....aa...
+/b/c/....aa../a /b/c/....aa../a
+/b/c/....aa../. /b/c/....aa..
+/b/c/....aa..// /b/c/....aa..
+/b/c/....aa./aa /b/c/....aa./aa
+/b/c/....aa./a. /b/c/....aa./a.
+/b/c/....aa./a/ /b/c/....aa./a
+/b/c/....aa./.a /b/c/....aa./.a
+/b/c/....aa./.. /b/c
+/b/c/....aa././ /b/c/....aa.
+/b/c/....aa.//a /b/c/....aa./a
+/b/c/....aa.//. /b/c/....aa.
+/b/c/....aa./// /b/c/....aa.
+/b/c/....aa/aaa /b/c/....aa/aaa
+/b/c/....aa/aa. /b/c/....aa/aa.
+/b/c/....aa/aa/ /b/c/....aa/aa
+/b/c/....aa/a.a /b/c/....aa/a.a
+/b/c/....aa/a.. /b/c/....aa/a..
+/b/c/....aa/a./ /b/c/....aa/a.
+/b/c/....aa/a/a /b/c/....aa/a/a
+/b/c/....aa/a/. /b/c/....aa/a
+/b/c/....aa/a// /b/c/....aa/a
+/b/c/....aa/.aa /b/c/....aa/.aa
+/b/c/....aa/.a. /b/c/....aa/.a.
+/b/c/....aa/.a/ /b/c/....aa/.a
+/b/c/....aa/..a /b/c/....aa/..a
+/b/c/....aa/... /b/c/....aa/...
+/b/c/....aa/../ /b/c
+/b/c/....aa/./a /b/c/....aa/a
+/b/c/....aa/./. /b/c/....aa
+/b/c/....aa/.// /b/c/....aa
+/b/c/....aa//aa /b/c/....aa/aa
+/b/c/....aa//a. /b/c/....aa/a.
+/b/c/....aa//a/ /b/c/....aa/a
+/b/c/....aa//.a /b/c/....aa/.a
+/b/c/....aa//.. /b/c
+/b/c/....aa//./ /b/c/....aa
+/b/c/....aa///a /b/c/....aa/a
+/b/c/....aa///. /b/c/....aa
+/b/c/....aa//// /b/c/....aa
+/b/c/....a.aaaa /b/c/....a.aaaa
+/b/c/....a.aaa. /b/c/....a.aaa.
+/b/c/....a.aaa/ /b/c/....a.aaa
+/b/c/....a.aa.a /b/c/....a.aa.a
+/b/c/....a.aa.. /b/c/....a.aa..
+/b/c/....a.aa./ /b/c/....a.aa.
+/b/c/....a.aa/a /b/c/....a.aa/a
+/b/c/....a.aa/. /b/c/....a.aa
+/b/c/....a.aa// /b/c/....a.aa
+/b/c/....a.a.aa /b/c/....a.a.aa
+/b/c/....a.a.a. /b/c/....a.a.a.
+/b/c/....a.a.a/ /b/c/....a.a.a
+/b/c/....a.a..a /b/c/....a.a..a
+/b/c/....a.a... /b/c/....a.a...
+/b/c/....a.a../ /b/c/....a.a..
+/b/c/....a.a./a /b/c/....a.a./a
+/b/c/....a.a./. /b/c/....a.a.
+/b/c/....a.a.// /b/c/....a.a.
+/b/c/....a.a/aa /b/c/....a.a/aa
+/b/c/....a.a/a. /b/c/....a.a/a.
+/b/c/....a.a/a/ /b/c/....a.a/a
+/b/c/....a.a/.a /b/c/....a.a/.a
+/b/c/....a.a/.. /b/c
+/b/c/....a.a/./ /b/c/....a.a
+/b/c/....a.a//a /b/c/....a.a/a
+/b/c/....a.a//. /b/c/....a.a
+/b/c/....a.a/// /b/c/....a.a
+/b/c/....a..aaa /b/c/....a..aaa
+/b/c/....a..aa. /b/c/....a..aa.
+/b/c/....a..aa/ /b/c/....a..aa
+/b/c/....a..a.a /b/c/....a..a.a
+/b/c/....a..a.. /b/c/....a..a..
+/b/c/....a..a./ /b/c/....a..a.
+/b/c/....a..a/a /b/c/....a..a/a
+/b/c/....a..a/. /b/c/....a..a
+/b/c/....a..a// /b/c/....a..a
+/b/c/....a...aa /b/c/....a...aa
+/b/c/....a...a. /b/c/....a...a.
+/b/c/....a...a/ /b/c/....a...a
+/b/c/....a....a /b/c/....a....a
+/b/c/....a..... /b/c/....a.....
+/b/c/....a..../ /b/c/....a....
+/b/c/....a.../a /b/c/....a.../a
+/b/c/....a.../. /b/c/....a...
+/b/c/....a...// /b/c/....a...
+/b/c/....a../aa /b/c/....a../aa
+/b/c/....a../a. /b/c/....a../a.
+/b/c/....a../a/ /b/c/....a../a
+/b/c/....a../.a /b/c/....a../.a
+/b/c/....a../.. /b/c
+/b/c/....a.././ /b/c/....a..
+/b/c/....a..//a /b/c/....a../a
+/b/c/....a..//. /b/c/....a..
+/b/c/....a../// /b/c/....a..
+/b/c/....a./aaa /b/c/....a./aaa
+/b/c/....a./aa. /b/c/....a./aa.
+/b/c/....a./aa/ /b/c/....a./aa
+/b/c/....a./a.a /b/c/....a./a.a
+/b/c/....a./a.. /b/c/....a./a..
+/b/c/....a./a./ /b/c/....a./a.
+/b/c/....a./a/a /b/c/....a./a/a
+/b/c/....a./a/. /b/c/....a./a
+/b/c/....a./a// /b/c/....a./a
+/b/c/....a./.aa /b/c/....a./.aa
+/b/c/....a./.a. /b/c/....a./.a.
+/b/c/....a./.a/ /b/c/....a./.a
+/b/c/....a./..a /b/c/....a./..a
+/b/c/....a./... /b/c/....a./...
+/b/c/....a./../ /b/c
+/b/c/....a././a /b/c/....a./a
+/b/c/....a././. /b/c/....a.
+/b/c/....a./.// /b/c/....a.
+/b/c/....a.//aa /b/c/....a./aa
+/b/c/....a.//a. /b/c/....a./a.
+/b/c/....a.//a/ /b/c/....a./a
+/b/c/....a.//.a /b/c/....a./.a
+/b/c/....a.//.. /b/c
+/b/c/....a.//./ /b/c/....a.
+/b/c/....a.///a /b/c/....a./a
+/b/c/....a.///. /b/c/....a.
+/b/c/....a.//// /b/c/....a.
+/b/c/....a/aaaa /b/c/....a/aaaa
+/b/c/....a/aaa. /b/c/....a/aaa.
+/b/c/....a/aaa/ /b/c/....a/aaa
+/b/c/....a/aa.a /b/c/....a/aa.a
+/b/c/....a/aa.. /b/c/....a/aa..
+/b/c/....a/aa./ /b/c/....a/aa.
+/b/c/....a/aa/a /b/c/....a/aa/a
+/b/c/....a/aa/. /b/c/....a/aa
+/b/c/....a/aa// /b/c/....a/aa
+/b/c/....a/a.aa /b/c/....a/a.aa
+/b/c/....a/a.a. /b/c/....a/a.a.
+/b/c/....a/a.a/ /b/c/....a/a.a
+/b/c/....a/a..a /b/c/....a/a..a
+/b/c/....a/a... /b/c/....a/a...
+/b/c/....a/a../ /b/c/....a/a..
+/b/c/....a/a./a /b/c/....a/a./a
+/b/c/....a/a./. /b/c/....a/a.
+/b/c/....a/a.// /b/c/....a/a.
+/b/c/....a/a/aa /b/c/....a/a/aa
+/b/c/....a/a/a. /b/c/....a/a/a.
+/b/c/....a/a/a/ /b/c/....a/a/a
+/b/c/....a/a/.a /b/c/....a/a/.a
+/b/c/....a/a/.. /b/c/....a
+/b/c/....a/a/./ /b/c/....a/a
+/b/c/....a/a//a /b/c/....a/a/a
+/b/c/....a/a//. /b/c/....a/a
+/b/c/....a/a/// /b/c/....a/a
+/b/c/....a/.aaa /b/c/....a/.aaa
+/b/c/....a/.aa. /b/c/....a/.aa.
+/b/c/....a/.aa/ /b/c/....a/.aa
+/b/c/....a/.a.a /b/c/....a/.a.a
+/b/c/....a/.a.. /b/c/....a/.a..
+/b/c/....a/.a./ /b/c/....a/.a.
+/b/c/....a/.a/a /b/c/....a/.a/a
+/b/c/....a/.a/. /b/c/....a/.a
+/b/c/....a/.a// /b/c/....a/.a
+/b/c/....a/..aa /b/c/....a/..aa
+/b/c/....a/..a. /b/c/....a/..a.
+/b/c/....a/..a/ /b/c/....a/..a
+/b/c/....a/...a /b/c/....a/...a
+/b/c/....a/.... /b/c/....a/....
+/b/c/....a/.../ /b/c/....a/...
+/b/c/....a/../a /b/c/a
+/b/c/....a/../. /b/c
+/b/c/....a/..// /b/c
+/b/c/....a/./aa /b/c/....a/aa
+/b/c/....a/./a. /b/c/....a/a.
+/b/c/....a/./a/ /b/c/....a/a
+/b/c/....a/./.a /b/c/....a/.a
+/b/c/....a/./.. /b/c
+/b/c/....a/././ /b/c/....a
+/b/c/....a/.//a /b/c/....a/a
+/b/c/....a/.//. /b/c/....a
+/b/c/....a/./// /b/c/....a
+/b/c/....a//aaa /b/c/....a/aaa
+/b/c/....a//aa. /b/c/....a/aa.
+/b/c/....a//aa/ /b/c/....a/aa
+/b/c/....a//a.a /b/c/....a/a.a
+/b/c/....a//a.. /b/c/....a/a..
+/b/c/....a//a./ /b/c/....a/a.
+/b/c/....a//a/a /b/c/....a/a/a
+/b/c/....a//a/. /b/c/....a/a
+/b/c/....a//a// /b/c/....a/a
+/b/c/....a//.aa /b/c/....a/.aa
+/b/c/....a//.a. /b/c/....a/.a.
+/b/c/....a//.a/ /b/c/....a/.a
+/b/c/....a//..a /b/c/....a/..a
+/b/c/....a//... /b/c/....a/...
+/b/c/....a//../ /b/c
+/b/c/....a//./a /b/c/....a/a
+/b/c/....a//./. /b/c/....a
+/b/c/....a//.// /b/c/....a
+/b/c/....a///aa /b/c/....a/aa
+/b/c/....a///a. /b/c/....a/a.
+/b/c/....a///a/ /b/c/....a/a
+/b/c/....a///.a /b/c/....a/.a
+/b/c/....a///.. /b/c
+/b/c/....a///./ /b/c/....a
+/b/c/....a////a /b/c/....a/a
+/b/c/....a////. /b/c/....a
+/b/c/....a///// /b/c/....a
+/b/c/.....aaaaa /b/c/.....aaaaa
+/b/c/.....aaaa. /b/c/.....aaaa.
+/b/c/.....aaaa/ /b/c/.....aaaa
+/b/c/.....aaa.a /b/c/.....aaa.a
+/b/c/.....aaa.. /b/c/.....aaa..
+/b/c/.....aaa./ /b/c/.....aaa.
+/b/c/.....aaa/a /b/c/.....aaa/a
+/b/c/.....aaa/. /b/c/.....aaa
+/b/c/.....aaa// /b/c/.....aaa
+/b/c/.....aa.aa /b/c/.....aa.aa
+/b/c/.....aa.a. /b/c/.....aa.a.
+/b/c/.....aa.a/ /b/c/.....aa.a
+/b/c/.....aa..a /b/c/.....aa..a
+/b/c/.....aa... /b/c/.....aa...
+/b/c/.....aa../ /b/c/.....aa..
+/b/c/.....aa./a /b/c/.....aa./a
+/b/c/.....aa./. /b/c/.....aa.
+/b/c/.....aa.// /b/c/.....aa.
+/b/c/.....aa/aa /b/c/.....aa/aa
+/b/c/.....aa/a. /b/c/.....aa/a.
+/b/c/.....aa/a/ /b/c/.....aa/a
+/b/c/.....aa/.a /b/c/.....aa/.a
+/b/c/.....aa/.. /b/c
+/b/c/.....aa/./ /b/c/.....aa
+/b/c/.....aa//a /b/c/.....aa/a
+/b/c/.....aa//. /b/c/.....aa
+/b/c/.....aa/// /b/c/.....aa
+/b/c/.....a.aaa /b/c/.....a.aaa
+/b/c/.....a.aa. /b/c/.....a.aa.
+/b/c/.....a.aa/ /b/c/.....a.aa
+/b/c/.....a.a.a /b/c/.....a.a.a
+/b/c/.....a.a.. /b/c/.....a.a..
+/b/c/.....a.a./ /b/c/.....a.a.
+/b/c/.....a.a/a /b/c/.....a.a/a
+/b/c/.....a.a/. /b/c/.....a.a
+/b/c/.....a.a// /b/c/.....a.a
+/b/c/.....a..aa /b/c/.....a..aa
+/b/c/.....a..a. /b/c/.....a..a.
+/b/c/.....a..a/ /b/c/.....a..a
+/b/c/.....a...a /b/c/.....a...a
+/b/c/.....a.... /b/c/.....a....
+/b/c/.....a.../ /b/c/.....a...
+/b/c/.....a../a /b/c/.....a../a
+/b/c/.....a../. /b/c/.....a..
+/b/c/.....a..// /b/c/.....a..
+/b/c/.....a./aa /b/c/.....a./aa
+/b/c/.....a./a. /b/c/.....a./a.
+/b/c/.....a./a/ /b/c/.....a./a
+/b/c/.....a./.a /b/c/.....a./.a
+/b/c/.....a./.. /b/c
+/b/c/.....a././ /b/c/.....a.
+/b/c/.....a.//a /b/c/.....a./a
+/b/c/.....a.//. /b/c/.....a.
+/b/c/.....a./// /b/c/.....a.
+/b/c/.....a/aaa /b/c/.....a/aaa
+/b/c/.....a/aa. /b/c/.....a/aa.
+/b/c/.....a/aa/ /b/c/.....a/aa
+/b/c/.....a/a.a /b/c/.....a/a.a
+/b/c/.....a/a.. /b/c/.....a/a..
+/b/c/.....a/a./ /b/c/.....a/a.
+/b/c/.....a/a/a /b/c/.....a/a/a
+/b/c/.....a/a/. /b/c/.....a/a
+/b/c/.....a/a// /b/c/.....a/a
+/b/c/.....a/.aa /b/c/.....a/.aa
+/b/c/.....a/.a. /b/c/.....a/.a.
+/b/c/.....a/.a/ /b/c/.....a/.a
+/b/c/.....a/..a /b/c/.....a/..a
+/b/c/.....a/... /b/c/.....a/...
+/b/c/.....a/../ /b/c
+/b/c/.....a/./a /b/c/.....a/a
+/b/c/.....a/./. /b/c/.....a
+/b/c/.....a/.// /b/c/.....a
+/b/c/.....a//aa /b/c/.....a/aa
+/b/c/.....a//a. /b/c/.....a/a.
+/b/c/.....a//a/ /b/c/.....a/a
+/b/c/.....a//.a /b/c/.....a/.a
+/b/c/.....a//.. /b/c
+/b/c/.....a//./ /b/c/.....a
+/b/c/.....a///a /b/c/.....a/a
+/b/c/.....a///. /b/c/.....a
+/b/c/.....a//// /b/c/.....a
+/b/c/......aaaa /b/c/......aaaa
+/b/c/......aaa. /b/c/......aaa.
+/b/c/......aaa/ /b/c/......aaa
+/b/c/......aa.a /b/c/......aa.a
+/b/c/......aa.. /b/c/......aa..
+/b/c/......aa./ /b/c/......aa.
+/b/c/......aa/a /b/c/......aa/a
+/b/c/......aa/. /b/c/......aa
+/b/c/......aa// /b/c/......aa
+/b/c/......a.aa /b/c/......a.aa
+/b/c/......a.a. /b/c/......a.a.
+/b/c/......a.a/ /b/c/......a.a
+/b/c/......a..a /b/c/......a..a
+/b/c/......a... /b/c/......a...
+/b/c/......a../ /b/c/......a..
+/b/c/......a./a /b/c/......a./a
+/b/c/......a./. /b/c/......a.
+/b/c/......a.// /b/c/......a.
+/b/c/......a/aa /b/c/......a/aa
+/b/c/......a/a. /b/c/......a/a.
+/b/c/......a/a/ /b/c/......a/a
+/b/c/......a/.a /b/c/......a/.a
+/b/c/......a/.. /b/c
+/b/c/......a/./ /b/c/......a
+/b/c/......a//a /b/c/......a/a
+/b/c/......a//. /b/c/......a
+/b/c/......a/// /b/c/......a
+/b/c/.......aaa /b/c/.......aaa
+/b/c/.......aa. /b/c/.......aa.
+/b/c/.......aa/ /b/c/.......aa
+/b/c/.......a.a /b/c/.......a.a
+/b/c/.......a.. /b/c/.......a..
+/b/c/.......a./ /b/c/.......a.
+/b/c/.......a/a /b/c/.......a/a
+/b/c/.......a/. /b/c/.......a
+/b/c/.......a// /b/c/.......a
+/b/c/........aa /b/c/........aa
+/b/c/........a. /b/c/........a.
+/b/c/........a/ /b/c/........a
+/b/c/.........a /b/c/.........a
+/b/c/.......... /b/c/..........
+/b/c/........./ /b/c/.........
+/b/c/......../a /b/c/......../a
+/b/c/......../. /b/c/........
+/b/c/........// /b/c/........
+/b/c/......./aa /b/c/......./aa
+/b/c/......./a. /b/c/......./a.
+/b/c/......./a/ /b/c/......./a
+/b/c/......./.a /b/c/......./.a
+/b/c/......./.. /b/c
+/b/c/......././ /b/c/.......
+/b/c/.......//a /b/c/......./a
+/b/c/.......//. /b/c/.......
+/b/c/......./// /b/c/.......
+/b/c/....../aaa /b/c/....../aaa
+/b/c/....../aa. /b/c/....../aa.
+/b/c/....../aa/ /b/c/....../aa
+/b/c/....../a.a /b/c/....../a.a
+/b/c/....../a.. /b/c/....../a..
+/b/c/....../a./ /b/c/....../a.
+/b/c/....../a/a /b/c/....../a/a
+/b/c/....../a/. /b/c/....../a
+/b/c/....../a// /b/c/....../a
+/b/c/....../.aa /b/c/....../.aa
+/b/c/....../.a. /b/c/....../.a.
+/b/c/....../.a/ /b/c/....../.a
+/b/c/....../..a /b/c/....../..a
+/b/c/....../... /b/c/....../...
+/b/c/....../../ /b/c
+/b/c/.....././a /b/c/....../a
+/b/c/.....././. /b/c/......
+/b/c/....../.// /b/c/......
+/b/c/......//aa /b/c/....../aa
+/b/c/......//a. /b/c/....../a.
+/b/c/......//a/ /b/c/....../a
+/b/c/......//.a /b/c/....../.a
+/b/c/......//.. /b/c
+/b/c/......//./ /b/c/......
+/b/c/......///a /b/c/....../a
+/b/c/......///. /b/c/......
+/b/c/......//// /b/c/......
+/b/c/...../aaaa /b/c/...../aaaa
+/b/c/...../aaa. /b/c/...../aaa.
+/b/c/...../aaa/ /b/c/...../aaa
+/b/c/...../aa.a /b/c/...../aa.a
+/b/c/...../aa.. /b/c/...../aa..
+/b/c/...../aa./ /b/c/...../aa.
+/b/c/...../aa/a /b/c/...../aa/a
+/b/c/...../aa/. /b/c/...../aa
+/b/c/...../aa// /b/c/...../aa
+/b/c/...../a.aa /b/c/...../a.aa
+/b/c/...../a.a. /b/c/...../a.a.
+/b/c/...../a.a/ /b/c/...../a.a
+/b/c/...../a..a /b/c/...../a..a
+/b/c/...../a... /b/c/...../a...
+/b/c/...../a../ /b/c/...../a..
+/b/c/...../a./a /b/c/...../a./a
+/b/c/...../a./. /b/c/...../a.
+/b/c/...../a.// /b/c/...../a.
+/b/c/...../a/aa /b/c/...../a/aa
+/b/c/...../a/a. /b/c/...../a/a.
+/b/c/...../a/a/ /b/c/...../a/a
+/b/c/...../a/.a /b/c/...../a/.a
+/b/c/...../a/.. /b/c/.....
+/b/c/...../a/./ /b/c/...../a
+/b/c/...../a//a /b/c/...../a/a
+/b/c/...../a//. /b/c/...../a
+/b/c/...../a/// /b/c/...../a
+/b/c/...../.aaa /b/c/...../.aaa
+/b/c/...../.aa. /b/c/...../.aa.
+/b/c/...../.aa/ /b/c/...../.aa
+/b/c/...../.a.a /b/c/...../.a.a
+/b/c/...../.a.. /b/c/...../.a..
+/b/c/...../.a./ /b/c/...../.a.
+/b/c/...../.a/a /b/c/...../.a/a
+/b/c/...../.a/. /b/c/...../.a
+/b/c/...../.a// /b/c/...../.a
+/b/c/...../..aa /b/c/...../..aa
+/b/c/...../..a. /b/c/...../..a.
+/b/c/...../..a/ /b/c/...../..a
+/b/c/...../...a /b/c/...../...a
+/b/c/...../.... /b/c/...../....
+/b/c/...../.../ /b/c/...../...
+/b/c/...../../a /b/c/a
+/b/c/...../../. /b/c
+/b/c/...../..// /b/c
+/b/c/....././aa /b/c/...../aa
+/b/c/....././a. /b/c/...../a.
+/b/c/....././a/ /b/c/...../a
+/b/c/....././.a /b/c/...../.a
+/b/c/....././.. /b/c
+/b/c/...../././ /b/c/.....
+/b/c/....././/a /b/c/...../a
+/b/c/....././/. /b/c/.....
+/b/c/....././// /b/c/.....
+/b/c/.....//aaa /b/c/...../aaa
+/b/c/.....//aa. /b/c/...../aa.
+/b/c/.....//aa/ /b/c/...../aa
+/b/c/.....//a.a /b/c/...../a.a
+/b/c/.....//a.. /b/c/...../a..
+/b/c/.....//a./ /b/c/...../a.
+/b/c/.....//a/a /b/c/...../a/a
+/b/c/.....//a/. /b/c/...../a
+/b/c/.....//a// /b/c/...../a
+/b/c/.....//.aa /b/c/...../.aa
+/b/c/.....//.a. /b/c/...../.a.
+/b/c/.....//.a/ /b/c/...../.a
+/b/c/.....//..a /b/c/...../..a
+/b/c/.....//... /b/c/...../...
+/b/c/.....//../ /b/c
+/b/c/.....//./a /b/c/...../a
+/b/c/.....//./. /b/c/.....
+/b/c/.....//.// /b/c/.....
+/b/c/.....///aa /b/c/...../aa
+/b/c/.....///a. /b/c/...../a.
+/b/c/.....///a/ /b/c/...../a
+/b/c/.....///.a /b/c/...../.a
+/b/c/.....///.. /b/c
+/b/c/.....///./ /b/c/.....
+/b/c/.....////a /b/c/...../a
+/b/c/.....////. /b/c/.....
+/b/c/.....///// /b/c/.....
+/b/c/..../aaaaa /b/c/..../aaaaa
+/b/c/..../aaaa. /b/c/..../aaaa.
+/b/c/..../aaaa/ /b/c/..../aaaa
+/b/c/..../aaa.a /b/c/..../aaa.a
+/b/c/..../aaa.. /b/c/..../aaa..
+/b/c/..../aaa./ /b/c/..../aaa.
+/b/c/..../aaa/a /b/c/..../aaa/a
+/b/c/..../aaa/. /b/c/..../aaa
+/b/c/..../aaa// /b/c/..../aaa
+/b/c/..../aa.aa /b/c/..../aa.aa
+/b/c/..../aa.a. /b/c/..../aa.a.
+/b/c/..../aa.a/ /b/c/..../aa.a
+/b/c/..../aa..a /b/c/..../aa..a
+/b/c/..../aa... /b/c/..../aa...
+/b/c/..../aa../ /b/c/..../aa..
+/b/c/..../aa./a /b/c/..../aa./a
+/b/c/..../aa./. /b/c/..../aa.
+/b/c/..../aa.// /b/c/..../aa.
+/b/c/..../aa/aa /b/c/..../aa/aa
+/b/c/..../aa/a. /b/c/..../aa/a.
+/b/c/..../aa/a/ /b/c/..../aa/a
+/b/c/..../aa/.a /b/c/..../aa/.a
+/b/c/..../aa/.. /b/c/....
+/b/c/..../aa/./ /b/c/..../aa
+/b/c/..../aa//a /b/c/..../aa/a
+/b/c/..../aa//. /b/c/..../aa
+/b/c/..../aa/// /b/c/..../aa
+/b/c/..../a.aaa /b/c/..../a.aaa
+/b/c/..../a.aa. /b/c/..../a.aa.
+/b/c/..../a.aa/ /b/c/..../a.aa
+/b/c/..../a.a.a /b/c/..../a.a.a
+/b/c/..../a.a.. /b/c/..../a.a..
+/b/c/..../a.a./ /b/c/..../a.a.
+/b/c/..../a.a/a /b/c/..../a.a/a
+/b/c/..../a.a/. /b/c/..../a.a
+/b/c/..../a.a// /b/c/..../a.a
+/b/c/..../a..aa /b/c/..../a..aa
+/b/c/..../a..a. /b/c/..../a..a.
+/b/c/..../a..a/ /b/c/..../a..a
+/b/c/..../a...a /b/c/..../a...a
+/b/c/..../a.... /b/c/..../a....
+/b/c/..../a.../ /b/c/..../a...
+/b/c/..../a../a /b/c/..../a../a
+/b/c/..../a../. /b/c/..../a..
+/b/c/..../a..// /b/c/..../a..
+/b/c/..../a./aa /b/c/..../a./aa
+/b/c/..../a./a. /b/c/..../a./a.
+/b/c/..../a./a/ /b/c/..../a./a
+/b/c/..../a./.a /b/c/..../a./.a
+/b/c/..../a./.. /b/c/....
+/b/c/..../a././ /b/c/..../a.
+/b/c/..../a.//a /b/c/..../a./a
+/b/c/..../a.//. /b/c/..../a.
+/b/c/..../a./// /b/c/..../a.
+/b/c/..../a/aaa /b/c/..../a/aaa
+/b/c/..../a/aa. /b/c/..../a/aa.
+/b/c/..../a/aa/ /b/c/..../a/aa
+/b/c/..../a/a.a /b/c/..../a/a.a
+/b/c/..../a/a.. /b/c/..../a/a..
+/b/c/..../a/a./ /b/c/..../a/a.
+/b/c/..../a/a/a /b/c/..../a/a/a
+/b/c/..../a/a/. /b/c/..../a/a
+/b/c/..../a/a// /b/c/..../a/a
+/b/c/..../a/.aa /b/c/..../a/.aa
+/b/c/..../a/.a. /b/c/..../a/.a.
+/b/c/..../a/.a/ /b/c/..../a/.a
+/b/c/..../a/..a /b/c/..../a/..a
+/b/c/..../a/... /b/c/..../a/...
+/b/c/..../a/../ /b/c/....
+/b/c/..../a/./a /b/c/..../a/a
+/b/c/..../a/./. /b/c/..../a
+/b/c/..../a/.// /b/c/..../a
+/b/c/..../a//aa /b/c/..../a/aa
+/b/c/..../a//a. /b/c/..../a/a.
+/b/c/..../a//a/ /b/c/..../a/a
+/b/c/..../a//.a /b/c/..../a/.a
+/b/c/..../a//.. /b/c/....
+/b/c/..../a//./ /b/c/..../a
+/b/c/..../a///a /b/c/..../a/a
+/b/c/..../a///. /b/c/..../a
+/b/c/..../a//// /b/c/..../a
+/b/c/..../.aaaa /b/c/..../.aaaa
+/b/c/..../.aaa. /b/c/..../.aaa.
+/b/c/..../.aaa/ /b/c/..../.aaa
+/b/c/..../.aa.a /b/c/..../.aa.a
+/b/c/..../.aa.. /b/c/..../.aa..
+/b/c/..../.aa./ /b/c/..../.aa.
+/b/c/..../.aa/a /b/c/..../.aa/a
+/b/c/..../.aa/. /b/c/..../.aa
+/b/c/..../.aa// /b/c/..../.aa
+/b/c/..../.a.aa /b/c/..../.a.aa
+/b/c/..../.a.a. /b/c/..../.a.a.
+/b/c/..../.a.a/ /b/c/..../.a.a
+/b/c/..../.a..a /b/c/..../.a..a
+/b/c/..../.a... /b/c/..../.a...
+/b/c/..../.a../ /b/c/..../.a..
+/b/c/..../.a./a /b/c/..../.a./a
+/b/c/..../.a./. /b/c/..../.a.
+/b/c/..../.a.// /b/c/..../.a.
+/b/c/..../.a/aa /b/c/..../.a/aa
+/b/c/..../.a/a. /b/c/..../.a/a.
+/b/c/..../.a/a/ /b/c/..../.a/a
+/b/c/..../.a/.a /b/c/..../.a/.a
+/b/c/..../.a/.. /b/c/....
+/b/c/..../.a/./ /b/c/..../.a
+/b/c/..../.a//a /b/c/..../.a/a
+/b/c/..../.a//. /b/c/..../.a
+/b/c/..../.a/// /b/c/..../.a
+/b/c/..../..aaa /b/c/..../..aaa
+/b/c/..../..aa. /b/c/..../..aa.
+/b/c/..../..aa/ /b/c/..../..aa
+/b/c/..../..a.a /b/c/..../..a.a
+/b/c/..../..a.. /b/c/..../..a..
+/b/c/..../..a./ /b/c/..../..a.
+/b/c/..../..a/a /b/c/..../..a/a
+/b/c/..../..a/. /b/c/..../..a
+/b/c/..../..a// /b/c/..../..a
+/b/c/..../...aa /b/c/..../...aa
+/b/c/..../...a. /b/c/..../...a.
+/b/c/..../...a/ /b/c/..../...a
+/b/c/..../....a /b/c/..../....a
+/b/c/..../..... /b/c/..../.....
+/b/c/..../..../ /b/c/..../....
+/b/c/..../.../a /b/c/..../.../a
+/b/c/..../.../. /b/c/..../...
+/b/c/..../...// /b/c/..../...
+/b/c/..../../aa /b/c/aa
+/b/c/..../../a. /b/c/a.
+/b/c/..../../a/ /b/c/a
+/b/c/..../../.a /b/c/.a
+/b/c/..../../.. /b
+/b/c/..../.././ /b/c
+/b/c/..../..//a /b/c/a
+/b/c/..../..//. /b/c
+/b/c/..../../// /b/c
+/b/c/...././aaa /b/c/..../aaa
+/b/c/...././aa. /b/c/..../aa.
+/b/c/...././aa/ /b/c/..../aa
+/b/c/...././a.a /b/c/..../a.a
+/b/c/...././a.. /b/c/..../a..
+/b/c/...././a./ /b/c/..../a.
+/b/c/...././a/a /b/c/..../a/a
+/b/c/...././a/. /b/c/..../a
+/b/c/...././a// /b/c/..../a
+/b/c/...././.aa /b/c/..../.aa
+/b/c/...././.a. /b/c/..../.a.
+/b/c/...././.a/ /b/c/..../.a
+/b/c/...././..a /b/c/..../..a
+/b/c/...././... /b/c/..../...
+/b/c/...././../ /b/c
+/b/c/..../././a /b/c/..../a
+/b/c/..../././. /b/c/....
+/b/c/...././.// /b/c/....
+/b/c/...././/aa /b/c/..../aa
+/b/c/...././/a. /b/c/..../a.
+/b/c/...././/a/ /b/c/..../a
+/b/c/...././/.a /b/c/..../.a
+/b/c/...././/.. /b/c
+/b/c/...././/./ /b/c/....
+/b/c/...././//a /b/c/..../a
+/b/c/...././//. /b/c/....
+/b/c/...././/// /b/c/....
+/b/c/....//aaaa /b/c/..../aaaa
+/b/c/....//aaa. /b/c/..../aaa.
+/b/c/....//aaa/ /b/c/..../aaa
+/b/c/....//aa.a /b/c/..../aa.a
+/b/c/....//aa.. /b/c/..../aa..
+/b/c/....//aa./ /b/c/..../aa.
+/b/c/....//aa/a /b/c/..../aa/a
+/b/c/....//aa/. /b/c/..../aa
+/b/c/....//aa// /b/c/..../aa
+/b/c/....//a.aa /b/c/..../a.aa
+/b/c/....//a.a. /b/c/..../a.a.
+/b/c/....//a.a/ /b/c/..../a.a
+/b/c/....//a..a /b/c/..../a..a
+/b/c/....//a... /b/c/..../a...
+/b/c/....//a../ /b/c/..../a..
+/b/c/....//a./a /b/c/..../a./a
+/b/c/....//a./. /b/c/..../a.
+/b/c/....//a.// /b/c/..../a.
+/b/c/....//a/aa /b/c/..../a/aa
+/b/c/....//a/a. /b/c/..../a/a.
+/b/c/....//a/a/ /b/c/..../a/a
+/b/c/....//a/.a /b/c/..../a/.a
+/b/c/....//a/.. /b/c/....
+/b/c/....//a/./ /b/c/..../a
+/b/c/....//a//a /b/c/..../a/a
+/b/c/....//a//. /b/c/..../a
+/b/c/....//a/// /b/c/..../a
+/b/c/....//.aaa /b/c/..../.aaa
+/b/c/....//.aa. /b/c/..../.aa.
+/b/c/....//.aa/ /b/c/..../.aa
+/b/c/....//.a.a /b/c/..../.a.a
+/b/c/....//.a.. /b/c/..../.a..
+/b/c/....//.a./ /b/c/..../.a.
+/b/c/....//.a/a /b/c/..../.a/a
+/b/c/....//.a/. /b/c/..../.a
+/b/c/....//.a// /b/c/..../.a
+/b/c/....//..aa /b/c/..../..aa
+/b/c/....//..a. /b/c/..../..a.
+/b/c/....//..a/ /b/c/..../..a
+/b/c/....//...a /b/c/..../...a
+/b/c/....//.... /b/c/..../....
+/b/c/....//.../ /b/c/..../...
+/b/c/....//../a /b/c/a
+/b/c/....//../. /b/c
+/b/c/....//..// /b/c
+/b/c/....//./aa /b/c/..../aa
+/b/c/....//./a. /b/c/..../a.
+/b/c/....//./a/ /b/c/..../a
+/b/c/....//./.a /b/c/..../.a
+/b/c/....//./.. /b/c
+/b/c/....//././ /b/c/....
+/b/c/....//.//a /b/c/..../a
+/b/c/....//.//. /b/c/....
+/b/c/....//./// /b/c/....
+/b/c/....///aaa /b/c/..../aaa
+/b/c/....///aa. /b/c/..../aa.
+/b/c/....///aa/ /b/c/..../aa
+/b/c/....///a.a /b/c/..../a.a
+/b/c/....///a.. /b/c/..../a..
+/b/c/....///a./ /b/c/..../a.
+/b/c/....///a/a /b/c/..../a/a
+/b/c/....///a/. /b/c/..../a
+/b/c/....///a// /b/c/..../a
+/b/c/....///.aa /b/c/..../.aa
+/b/c/....///.a. /b/c/..../.a.
+/b/c/....///.a/ /b/c/..../.a
+/b/c/....///..a /b/c/..../..a
+/b/c/....///... /b/c/..../...
+/b/c/....///../ /b/c
+/b/c/....///./a /b/c/..../a
+/b/c/....///./. /b/c/....
+/b/c/....///.// /b/c/....
+/b/c/....////aa /b/c/..../aa
+/b/c/....////a. /b/c/..../a.
+/b/c/....////a/ /b/c/..../a
+/b/c/....////.a /b/c/..../.a
+/b/c/....////.. /b/c
+/b/c/....////./ /b/c/....
+/b/c/..../////a /b/c/..../a
+/b/c/..../////. /b/c/....
+/b/c/....////// /b/c/....
+/b/c/.../aaaaaa /b/c/.../aaaaaa
+/b/c/.../aaaaa. /b/c/.../aaaaa.
+/b/c/.../aaaaa/ /b/c/.../aaaaa
+/b/c/.../aaaa.a /b/c/.../aaaa.a
+/b/c/.../aaaa.. /b/c/.../aaaa..
+/b/c/.../aaaa./ /b/c/.../aaaa.
+/b/c/.../aaaa/a /b/c/.../aaaa/a
+/b/c/.../aaaa/. /b/c/.../aaaa
+/b/c/.../aaaa// /b/c/.../aaaa
+/b/c/.../aaa.aa /b/c/.../aaa.aa
+/b/c/.../aaa.a. /b/c/.../aaa.a.
+/b/c/.../aaa.a/ /b/c/.../aaa.a
+/b/c/.../aaa..a /b/c/.../aaa..a
+/b/c/.../aaa... /b/c/.../aaa...
+/b/c/.../aaa../ /b/c/.../aaa..
+/b/c/.../aaa./a /b/c/.../aaa./a
+/b/c/.../aaa./. /b/c/.../aaa.
+/b/c/.../aaa.// /b/c/.../aaa.
+/b/c/.../aaa/aa /b/c/.../aaa/aa
+/b/c/.../aaa/a. /b/c/.../aaa/a.
+/b/c/.../aaa/a/ /b/c/.../aaa/a
+/b/c/.../aaa/.a /b/c/.../aaa/.a
+/b/c/.../aaa/.. /b/c/...
+/b/c/.../aaa/./ /b/c/.../aaa
+/b/c/.../aaa//a /b/c/.../aaa/a
+/b/c/.../aaa//. /b/c/.../aaa
+/b/c/.../aaa/// /b/c/.../aaa
+/b/c/.../aa.aaa /b/c/.../aa.aaa
+/b/c/.../aa.aa. /b/c/.../aa.aa.
+/b/c/.../aa.aa/ /b/c/.../aa.aa
+/b/c/.../aa.a.a /b/c/.../aa.a.a
+/b/c/.../aa.a.. /b/c/.../aa.a..
+/b/c/.../aa.a./ /b/c/.../aa.a.
+/b/c/.../aa.a/a /b/c/.../aa.a/a
+/b/c/.../aa.a/. /b/c/.../aa.a
+/b/c/.../aa.a// /b/c/.../aa.a
+/b/c/.../aa..aa /b/c/.../aa..aa
+/b/c/.../aa..a. /b/c/.../aa..a.
+/b/c/.../aa..a/ /b/c/.../aa..a
+/b/c/.../aa...a /b/c/.../aa...a
+/b/c/.../aa.... /b/c/.../aa....
+/b/c/.../aa.../ /b/c/.../aa...
+/b/c/.../aa../a /b/c/.../aa../a
+/b/c/.../aa../. /b/c/.../aa..
+/b/c/.../aa..// /b/c/.../aa..
+/b/c/.../aa./aa /b/c/.../aa./aa
+/b/c/.../aa./a. /b/c/.../aa./a.
+/b/c/.../aa./a/ /b/c/.../aa./a
+/b/c/.../aa./.a /b/c/.../aa./.a
+/b/c/.../aa./.. /b/c/...
+/b/c/.../aa././ /b/c/.../aa.
+/b/c/.../aa.//a /b/c/.../aa./a
+/b/c/.../aa.//. /b/c/.../aa.
+/b/c/.../aa./// /b/c/.../aa.
+/b/c/.../aa/aaa /b/c/.../aa/aaa
+/b/c/.../aa/aa. /b/c/.../aa/aa.
+/b/c/.../aa/aa/ /b/c/.../aa/aa
+/b/c/.../aa/a.a /b/c/.../aa/a.a
+/b/c/.../aa/a.. /b/c/.../aa/a..
+/b/c/.../aa/a./ /b/c/.../aa/a.
+/b/c/.../aa/a/a /b/c/.../aa/a/a
+/b/c/.../aa/a/. /b/c/.../aa/a
+/b/c/.../aa/a// /b/c/.../aa/a
+/b/c/.../aa/.aa /b/c/.../aa/.aa
+/b/c/.../aa/.a. /b/c/.../aa/.a.
+/b/c/.../aa/.a/ /b/c/.../aa/.a
+/b/c/.../aa/..a /b/c/.../aa/..a
+/b/c/.../aa/... /b/c/.../aa/...
+/b/c/.../aa/../ /b/c/...
+/b/c/.../aa/./a /b/c/.../aa/a
+/b/c/.../aa/./. /b/c/.../aa
+/b/c/.../aa/.// /b/c/.../aa
+/b/c/.../aa//aa /b/c/.../aa/aa
+/b/c/.../aa//a. /b/c/.../aa/a.
+/b/c/.../aa//a/ /b/c/.../aa/a
+/b/c/.../aa//.a /b/c/.../aa/.a
+/b/c/.../aa//.. /b/c/...
+/b/c/.../aa//./ /b/c/.../aa
+/b/c/.../aa///a /b/c/.../aa/a
+/b/c/.../aa///. /b/c/.../aa
+/b/c/.../aa//// /b/c/.../aa
+/b/c/.../a.aaaa /b/c/.../a.aaaa
+/b/c/.../a.aaa. /b/c/.../a.aaa.
+/b/c/.../a.aaa/ /b/c/.../a.aaa
+/b/c/.../a.aa.a /b/c/.../a.aa.a
+/b/c/.../a.aa.. /b/c/.../a.aa..
+/b/c/.../a.aa./ /b/c/.../a.aa.
+/b/c/.../a.aa/a /b/c/.../a.aa/a
+/b/c/.../a.aa/. /b/c/.../a.aa
+/b/c/.../a.aa// /b/c/.../a.aa
+/b/c/.../a.a.aa /b/c/.../a.a.aa
+/b/c/.../a.a.a. /b/c/.../a.a.a.
+/b/c/.../a.a.a/ /b/c/.../a.a.a
+/b/c/.../a.a..a /b/c/.../a.a..a
+/b/c/.../a.a... /b/c/.../a.a...
+/b/c/.../a.a../ /b/c/.../a.a..
+/b/c/.../a.a./a /b/c/.../a.a./a
+/b/c/.../a.a./. /b/c/.../a.a.
+/b/c/.../a.a.// /b/c/.../a.a.
+/b/c/.../a.a/aa /b/c/.../a.a/aa
+/b/c/.../a.a/a. /b/c/.../a.a/a.
+/b/c/.../a.a/a/ /b/c/.../a.a/a
+/b/c/.../a.a/.a /b/c/.../a.a/.a
+/b/c/.../a.a/.. /b/c/...
+/b/c/.../a.a/./ /b/c/.../a.a
+/b/c/.../a.a//a /b/c/.../a.a/a
+/b/c/.../a.a//. /b/c/.../a.a
+/b/c/.../a.a/// /b/c/.../a.a
+/b/c/.../a..aaa /b/c/.../a..aaa
+/b/c/.../a..aa. /b/c/.../a..aa.
+/b/c/.../a..aa/ /b/c/.../a..aa
+/b/c/.../a..a.a /b/c/.../a..a.a
+/b/c/.../a..a.. /b/c/.../a..a..
+/b/c/.../a..a./ /b/c/.../a..a.
+/b/c/.../a..a/a /b/c/.../a..a/a
+/b/c/.../a..a/. /b/c/.../a..a
+/b/c/.../a..a// /b/c/.../a..a
+/b/c/.../a...aa /b/c/.../a...aa
+/b/c/.../a...a. /b/c/.../a...a.
+/b/c/.../a...a/ /b/c/.../a...a
+/b/c/.../a....a /b/c/.../a....a
+/b/c/.../a..... /b/c/.../a.....
+/b/c/.../a..../ /b/c/.../a....
+/b/c/.../a.../a /b/c/.../a.../a
+/b/c/.../a.../. /b/c/.../a...
+/b/c/.../a...// /b/c/.../a...
+/b/c/.../a../aa /b/c/.../a../aa
+/b/c/.../a../a. /b/c/.../a../a.
+/b/c/.../a../a/ /b/c/.../a../a
+/b/c/.../a../.a /b/c/.../a../.a
+/b/c/.../a../.. /b/c/...
+/b/c/.../a.././ /b/c/.../a..
+/b/c/.../a..//a /b/c/.../a../a
+/b/c/.../a..//. /b/c/.../a..
+/b/c/.../a../// /b/c/.../a..
+/b/c/.../a./aaa /b/c/.../a./aaa
+/b/c/.../a./aa. /b/c/.../a./aa.
+/b/c/.../a./aa/ /b/c/.../a./aa
+/b/c/.../a./a.a /b/c/.../a./a.a
+/b/c/.../a./a.. /b/c/.../a./a..
+/b/c/.../a./a./ /b/c/.../a./a.
+/b/c/.../a./a/a /b/c/.../a./a/a
+/b/c/.../a./a/. /b/c/.../a./a
+/b/c/.../a./a// /b/c/.../a./a
+/b/c/.../a./.aa /b/c/.../a./.aa
+/b/c/.../a./.a. /b/c/.../a./.a.
+/b/c/.../a./.a/ /b/c/.../a./.a
+/b/c/.../a./..a /b/c/.../a./..a
+/b/c/.../a./... /b/c/.../a./...
+/b/c/.../a./../ /b/c/...
+/b/c/.../a././a /b/c/.../a./a
+/b/c/.../a././. /b/c/.../a.
+/b/c/.../a./.// /b/c/.../a.
+/b/c/.../a.//aa /b/c/.../a./aa
+/b/c/.../a.//a. /b/c/.../a./a.
+/b/c/.../a.//a/ /b/c/.../a./a
+/b/c/.../a.//.a /b/c/.../a./.a
+/b/c/.../a.//.. /b/c/...
+/b/c/.../a.//./ /b/c/.../a.
+/b/c/.../a.///a /b/c/.../a./a
+/b/c/.../a.///. /b/c/.../a.
+/b/c/.../a.//// /b/c/.../a.
+/b/c/.../a/aaaa /b/c/.../a/aaaa
+/b/c/.../a/aaa. /b/c/.../a/aaa.
+/b/c/.../a/aaa/ /b/c/.../a/aaa
+/b/c/.../a/aa.a /b/c/.../a/aa.a
+/b/c/.../a/aa.. /b/c/.../a/aa..
+/b/c/.../a/aa./ /b/c/.../a/aa.
+/b/c/.../a/aa/a /b/c/.../a/aa/a
+/b/c/.../a/aa/. /b/c/.../a/aa
+/b/c/.../a/aa// /b/c/.../a/aa
+/b/c/.../a/a.aa /b/c/.../a/a.aa
+/b/c/.../a/a.a. /b/c/.../a/a.a.
+/b/c/.../a/a.a/ /b/c/.../a/a.a
+/b/c/.../a/a..a /b/c/.../a/a..a
+/b/c/.../a/a... /b/c/.../a/a...
+/b/c/.../a/a../ /b/c/.../a/a..
+/b/c/.../a/a./a /b/c/.../a/a./a
+/b/c/.../a/a./. /b/c/.../a/a.
+/b/c/.../a/a.// /b/c/.../a/a.
+/b/c/.../a/a/aa /b/c/.../a/a/aa
+/b/c/.../a/a/a. /b/c/.../a/a/a.
+/b/c/.../a/a/a/ /b/c/.../a/a/a
+/b/c/.../a/a/.a /b/c/.../a/a/.a
+/b/c/.../a/a/.. /b/c/.../a
+/b/c/.../a/a/./ /b/c/.../a/a
+/b/c/.../a/a//a /b/c/.../a/a/a
+/b/c/.../a/a//. /b/c/.../a/a
+/b/c/.../a/a/// /b/c/.../a/a
+/b/c/.../a/.aaa /b/c/.../a/.aaa
+/b/c/.../a/.aa. /b/c/.../a/.aa.
+/b/c/.../a/.aa/ /b/c/.../a/.aa
+/b/c/.../a/.a.a /b/c/.../a/.a.a
+/b/c/.../a/.a.. /b/c/.../a/.a..
+/b/c/.../a/.a./ /b/c/.../a/.a.
+/b/c/.../a/.a/a /b/c/.../a/.a/a
+/b/c/.../a/.a/. /b/c/.../a/.a
+/b/c/.../a/.a// /b/c/.../a/.a
+/b/c/.../a/..aa /b/c/.../a/..aa
+/b/c/.../a/..a. /b/c/.../a/..a.
+/b/c/.../a/..a/ /b/c/.../a/..a
+/b/c/.../a/...a /b/c/.../a/...a
+/b/c/.../a/.... /b/c/.../a/....
+/b/c/.../a/.../ /b/c/.../a/...
+/b/c/.../a/../a /b/c/.../a
+/b/c/.../a/../. /b/c/...
+/b/c/.../a/..// /b/c/...
+/b/c/.../a/./aa /b/c/.../a/aa
+/b/c/.../a/./a. /b/c/.../a/a.
+/b/c/.../a/./a/ /b/c/.../a/a
+/b/c/.../a/./.a /b/c/.../a/.a
+/b/c/.../a/./.. /b/c/...
+/b/c/.../a/././ /b/c/.../a
+/b/c/.../a/.//a /b/c/.../a/a
+/b/c/.../a/.//. /b/c/.../a
+/b/c/.../a/./// /b/c/.../a
+/b/c/.../a//aaa /b/c/.../a/aaa
+/b/c/.../a//aa. /b/c/.../a/aa.
+/b/c/.../a//aa/ /b/c/.../a/aa
+/b/c/.../a//a.a /b/c/.../a/a.a
+/b/c/.../a//a.. /b/c/.../a/a..
+/b/c/.../a//a./ /b/c/.../a/a.
+/b/c/.../a//a/a /b/c/.../a/a/a
+/b/c/.../a//a/. /b/c/.../a/a
+/b/c/.../a//a// /b/c/.../a/a
+/b/c/.../a//.aa /b/c/.../a/.aa
+/b/c/.../a//.a. /b/c/.../a/.a.
+/b/c/.../a//.a/ /b/c/.../a/.a
+/b/c/.../a//..a /b/c/.../a/..a
+/b/c/.../a//... /b/c/.../a/...
+/b/c/.../a//../ /b/c/...
+/b/c/.../a//./a /b/c/.../a/a
+/b/c/.../a//./. /b/c/.../a
+/b/c/.../a//.// /b/c/.../a
+/b/c/.../a///aa /b/c/.../a/aa
+/b/c/.../a///a. /b/c/.../a/a.
+/b/c/.../a///a/ /b/c/.../a/a
+/b/c/.../a///.a /b/c/.../a/.a
+/b/c/.../a///.. /b/c/...
+/b/c/.../a///./ /b/c/.../a
+/b/c/.../a////a /b/c/.../a/a
+/b/c/.../a////. /b/c/.../a
+/b/c/.../a///// /b/c/.../a
+/b/c/.../.aaaaa /b/c/.../.aaaaa
+/b/c/.../.aaaa. /b/c/.../.aaaa.
+/b/c/.../.aaaa/ /b/c/.../.aaaa
+/b/c/.../.aaa.a /b/c/.../.aaa.a
+/b/c/.../.aaa.. /b/c/.../.aaa..
+/b/c/.../.aaa./ /b/c/.../.aaa.
+/b/c/.../.aaa/a /b/c/.../.aaa/a
+/b/c/.../.aaa/. /b/c/.../.aaa
+/b/c/.../.aaa// /b/c/.../.aaa
+/b/c/.../.aa.aa /b/c/.../.aa.aa
+/b/c/.../.aa.a. /b/c/.../.aa.a.
+/b/c/.../.aa.a/ /b/c/.../.aa.a
+/b/c/.../.aa..a /b/c/.../.aa..a
+/b/c/.../.aa... /b/c/.../.aa...
+/b/c/.../.aa../ /b/c/.../.aa..
+/b/c/.../.aa./a /b/c/.../.aa./a
+/b/c/.../.aa./. /b/c/.../.aa.
+/b/c/.../.aa.// /b/c/.../.aa.
+/b/c/.../.aa/aa /b/c/.../.aa/aa
+/b/c/.../.aa/a. /b/c/.../.aa/a.
+/b/c/.../.aa/a/ /b/c/.../.aa/a
+/b/c/.../.aa/.a /b/c/.../.aa/.a
+/b/c/.../.aa/.. /b/c/...
+/b/c/.../.aa/./ /b/c/.../.aa
+/b/c/.../.aa//a /b/c/.../.aa/a
+/b/c/.../.aa//. /b/c/.../.aa
+/b/c/.../.aa/// /b/c/.../.aa
+/b/c/.../.a.aaa /b/c/.../.a.aaa
+/b/c/.../.a.aa. /b/c/.../.a.aa.
+/b/c/.../.a.aa/ /b/c/.../.a.aa
+/b/c/.../.a.a.a /b/c/.../.a.a.a
+/b/c/.../.a.a.. /b/c/.../.a.a..
+/b/c/.../.a.a./ /b/c/.../.a.a.
+/b/c/.../.a.a/a /b/c/.../.a.a/a
+/b/c/.../.a.a/. /b/c/.../.a.a
+/b/c/.../.a.a// /b/c/.../.a.a
+/b/c/.../.a..aa /b/c/.../.a..aa
+/b/c/.../.a..a. /b/c/.../.a..a.
+/b/c/.../.a..a/ /b/c/.../.a..a
+/b/c/.../.a...a /b/c/.../.a...a
+/b/c/.../.a.... /b/c/.../.a....
+/b/c/.../.a.../ /b/c/.../.a...
+/b/c/.../.a../a /b/c/.../.a../a
+/b/c/.../.a../. /b/c/.../.a..
+/b/c/.../.a..// /b/c/.../.a..
+/b/c/.../.a./aa /b/c/.../.a./aa
+/b/c/.../.a./a. /b/c/.../.a./a.
+/b/c/.../.a./a/ /b/c/.../.a./a
+/b/c/.../.a./.a /b/c/.../.a./.a
+/b/c/.../.a./.. /b/c/...
+/b/c/.../.a././ /b/c/.../.a.
+/b/c/.../.a.//a /b/c/.../.a./a
+/b/c/.../.a.//. /b/c/.../.a.
+/b/c/.../.a./// /b/c/.../.a.
+/b/c/.../.a/aaa /b/c/.../.a/aaa
+/b/c/.../.a/aa. /b/c/.../.a/aa.
+/b/c/.../.a/aa/ /b/c/.../.a/aa
+/b/c/.../.a/a.a /b/c/.../.a/a.a
+/b/c/.../.a/a.. /b/c/.../.a/a..
+/b/c/.../.a/a./ /b/c/.../.a/a.
+/b/c/.../.a/a/a /b/c/.../.a/a/a
+/b/c/.../.a/a/. /b/c/.../.a/a
+/b/c/.../.a/a// /b/c/.../.a/a
+/b/c/.../.a/.aa /b/c/.../.a/.aa
+/b/c/.../.a/.a. /b/c/.../.a/.a.
+/b/c/.../.a/.a/ /b/c/.../.a/.a
+/b/c/.../.a/..a /b/c/.../.a/..a
+/b/c/.../.a/... /b/c/.../.a/...
+/b/c/.../.a/../ /b/c/...
+/b/c/.../.a/./a /b/c/.../.a/a
+/b/c/.../.a/./. /b/c/.../.a
+/b/c/.../.a/.// /b/c/.../.a
+/b/c/.../.a//aa /b/c/.../.a/aa
+/b/c/.../.a//a. /b/c/.../.a/a.
+/b/c/.../.a//a/ /b/c/.../.a/a
+/b/c/.../.a//.a /b/c/.../.a/.a
+/b/c/.../.a//.. /b/c/...
+/b/c/.../.a//./ /b/c/.../.a
+/b/c/.../.a///a /b/c/.../.a/a
+/b/c/.../.a///. /b/c/.../.a
+/b/c/.../.a//// /b/c/.../.a
+/b/c/.../..aaaa /b/c/.../..aaaa
+/b/c/.../..aaa. /b/c/.../..aaa.
+/b/c/.../..aaa/ /b/c/.../..aaa
+/b/c/.../..aa.a /b/c/.../..aa.a
+/b/c/.../..aa.. /b/c/.../..aa..
+/b/c/.../..aa./ /b/c/.../..aa.
+/b/c/.../..aa/a /b/c/.../..aa/a
+/b/c/.../..aa/. /b/c/.../..aa
+/b/c/.../..aa// /b/c/.../..aa
+/b/c/.../..a.aa /b/c/.../..a.aa
+/b/c/.../..a.a. /b/c/.../..a.a.
+/b/c/.../..a.a/ /b/c/.../..a.a
+/b/c/.../..a..a /b/c/.../..a..a
+/b/c/.../..a... /b/c/.../..a...
+/b/c/.../..a../ /b/c/.../..a..
+/b/c/.../..a./a /b/c/.../..a./a
+/b/c/.../..a./. /b/c/.../..a.
+/b/c/.../..a.// /b/c/.../..a.
+/b/c/.../..a/aa /b/c/.../..a/aa
+/b/c/.../..a/a. /b/c/.../..a/a.
+/b/c/.../..a/a/ /b/c/.../..a/a
+/b/c/.../..a/.a /b/c/.../..a/.a
+/b/c/.../..a/.. /b/c/...
+/b/c/.../..a/./ /b/c/.../..a
+/b/c/.../..a//a /b/c/.../..a/a
+/b/c/.../..a//. /b/c/.../..a
+/b/c/.../..a/// /b/c/.../..a
+/b/c/.../...aaa /b/c/.../...aaa
+/b/c/.../...aa. /b/c/.../...aa.
+/b/c/.../...aa/ /b/c/.../...aa
+/b/c/.../...a.a /b/c/.../...a.a
+/b/c/.../...a.. /b/c/.../...a..
+/b/c/.../...a./ /b/c/.../...a.
+/b/c/.../...a/a /b/c/.../...a/a
+/b/c/.../...a/. /b/c/.../...a
+/b/c/.../...a// /b/c/.../...a
+/b/c/.../....aa /b/c/.../....aa
+/b/c/.../....a. /b/c/.../....a.
+/b/c/.../....a/ /b/c/.../....a
+/b/c/.../.....a /b/c/.../.....a
+/b/c/.../...... /b/c/.../......
+/b/c/.../...../ /b/c/.../.....
+/b/c/.../..../a /b/c/.../..../a
+/b/c/.../..../. /b/c/.../....
+/b/c/.../....// /b/c/.../....
+/b/c/.../.../aa /b/c/.../.../aa
+/b/c/.../.../a. /b/c/.../.../a.
+/b/c/.../.../a/ /b/c/.../.../a
+/b/c/.../.../.a /b/c/.../.../.a
+/b/c/.../.../.. /b/c/...
+/b/c/.../..././ /b/c/.../...
+/b/c/.../...//a /b/c/.../.../a
+/b/c/.../...//. /b/c/.../...
+/b/c/.../.../// /b/c/.../...
+/b/c/.../../aaa /b/c/aaa
+/b/c/.../../aa. /b/c/aa.
+/b/c/.../../aa/ /b/c/aa
+/b/c/.../../a.a /b/c/a.a
+/b/c/.../../a.. /b/c/a..
+/b/c/.../../a./ /b/c/a.
+/b/c/.../../a/a /b/c/a/a
+/b/c/.../../a/. /b/c/a
+/b/c/.../../a// /b/c/a
+/b/c/.../../.aa /b/c/.aa
+/b/c/.../../.a. /b/c/.a.
+/b/c/.../../.a/ /b/c/.a
+/b/c/.../../..a /b/c/..a
+/b/c/.../../... /b/c/...
+/b/c/.../../../ /b
+/b/c/.../.././a /b/c/a
+/b/c/.../.././. /b/c
+/b/c/.../../.// /b/c
+/b/c/.../..//aa /b/c/aa
+/b/c/.../..//a. /b/c/a.
+/b/c/.../..//a/ /b/c/a
+/b/c/.../..//.a /b/c/.a
+/b/c/.../..//.. /b
+/b/c/.../..//./ /b/c
+/b/c/.../..///a /b/c/a
+/b/c/.../..///. /b/c
+/b/c/.../..//// /b/c
+/b/c/..././aaaa /b/c/.../aaaa
+/b/c/..././aaa. /b/c/.../aaa.
+/b/c/..././aaa/ /b/c/.../aaa
+/b/c/..././aa.a /b/c/.../aa.a
+/b/c/..././aa.. /b/c/.../aa..
+/b/c/..././aa./ /b/c/.../aa.
+/b/c/..././aa/a /b/c/.../aa/a
+/b/c/..././aa/. /b/c/.../aa
+/b/c/..././aa// /b/c/.../aa
+/b/c/..././a.aa /b/c/.../a.aa
+/b/c/..././a.a. /b/c/.../a.a.
+/b/c/..././a.a/ /b/c/.../a.a
+/b/c/..././a..a /b/c/.../a..a
+/b/c/..././a... /b/c/.../a...
+/b/c/..././a../ /b/c/.../a..
+/b/c/..././a./a /b/c/.../a./a
+/b/c/..././a./. /b/c/.../a.
+/b/c/..././a.// /b/c/.../a.
+/b/c/..././a/aa /b/c/.../a/aa
+/b/c/..././a/a. /b/c/.../a/a.
+/b/c/..././a/a/ /b/c/.../a/a
+/b/c/..././a/.a /b/c/.../a/.a
+/b/c/..././a/.. /b/c/...
+/b/c/..././a/./ /b/c/.../a
+/b/c/..././a//a /b/c/.../a/a
+/b/c/..././a//. /b/c/.../a
+/b/c/..././a/// /b/c/.../a
+/b/c/..././.aaa /b/c/.../.aaa
+/b/c/..././.aa. /b/c/.../.aa.
+/b/c/..././.aa/ /b/c/.../.aa
+/b/c/..././.a.a /b/c/.../.a.a
+/b/c/..././.a.. /b/c/.../.a..
+/b/c/..././.a./ /b/c/.../.a.
+/b/c/..././.a/a /b/c/.../.a/a
+/b/c/..././.a/. /b/c/.../.a
+/b/c/..././.a// /b/c/.../.a
+/b/c/..././..aa /b/c/.../..aa
+/b/c/..././..a. /b/c/.../..a.
+/b/c/..././..a/ /b/c/.../..a
+/b/c/..././...a /b/c/.../...a
+/b/c/..././.... /b/c/.../....
+/b/c/..././.../ /b/c/.../...
+/b/c/..././../a /b/c/a
+/b/c/..././../. /b/c
+/b/c/..././..// /b/c
+/b/c/.../././aa /b/c/.../aa
+/b/c/.../././a. /b/c/.../a.
+/b/c/.../././a/ /b/c/.../a
+/b/c/.../././.a /b/c/.../.a
+/b/c/.../././.. /b/c
+/b/c/..././././ /b/c/...
+/b/c/.../././/a /b/c/.../a
+/b/c/.../././/. /b/c/...
+/b/c/.../././// /b/c/...
+/b/c/..././/aaa /b/c/.../aaa
+/b/c/..././/aa. /b/c/.../aa.
+/b/c/..././/aa/ /b/c/.../aa
+/b/c/..././/a.a /b/c/.../a.a
+/b/c/..././/a.. /b/c/.../a..
+/b/c/..././/a./ /b/c/.../a.
+/b/c/..././/a/a /b/c/.../a/a
+/b/c/..././/a/. /b/c/.../a
+/b/c/..././/a// /b/c/.../a
+/b/c/..././/.aa /b/c/.../.aa
+/b/c/..././/.a. /b/c/.../.a.
+/b/c/..././/.a/ /b/c/.../.a
+/b/c/..././/..a /b/c/.../..a
+/b/c/..././/... /b/c/.../...
+/b/c/..././/../ /b/c
+/b/c/..././/./a /b/c/.../a
+/b/c/..././/./. /b/c/...
+/b/c/..././/.// /b/c/...
+/b/c/..././//aa /b/c/.../aa
+/b/c/..././//a. /b/c/.../a.
+/b/c/..././//a/ /b/c/.../a
+/b/c/..././//.a /b/c/.../.a
+/b/c/..././//.. /b/c
+/b/c/..././//./ /b/c/...
+/b/c/..././///a /b/c/.../a
+/b/c/..././///. /b/c/...
+/b/c/..././//// /b/c/...
+/b/c/...//aaaaa /b/c/.../aaaaa
+/b/c/...//aaaa. /b/c/.../aaaa.
+/b/c/...//aaaa/ /b/c/.../aaaa
+/b/c/...//aaa.a /b/c/.../aaa.a
+/b/c/...//aaa.. /b/c/.../aaa..
+/b/c/...//aaa./ /b/c/.../aaa.
+/b/c/...//aaa/a /b/c/.../aaa/a
+/b/c/...//aaa/. /b/c/.../aaa
+/b/c/...//aaa// /b/c/.../aaa
+/b/c/...//aa.aa /b/c/.../aa.aa
+/b/c/...//aa.a. /b/c/.../aa.a.
+/b/c/...//aa.a/ /b/c/.../aa.a
+/b/c/...//aa..a /b/c/.../aa..a
+/b/c/...//aa... /b/c/.../aa...
+/b/c/...//aa../ /b/c/.../aa..
+/b/c/...//aa./a /b/c/.../aa./a
+/b/c/...//aa./. /b/c/.../aa.
+/b/c/...//aa.// /b/c/.../aa.
+/b/c/...//aa/aa /b/c/.../aa/aa
+/b/c/...//aa/a. /b/c/.../aa/a.
+/b/c/...//aa/a/ /b/c/.../aa/a
+/b/c/...//aa/.a /b/c/.../aa/.a
+/b/c/...//aa/.. /b/c/...
+/b/c/...//aa/./ /b/c/.../aa
+/b/c/...//aa//a /b/c/.../aa/a
+/b/c/...//aa//. /b/c/.../aa
+/b/c/...//aa/// /b/c/.../aa
+/b/c/...//a.aaa /b/c/.../a.aaa
+/b/c/...//a.aa. /b/c/.../a.aa.
+/b/c/...//a.aa/ /b/c/.../a.aa
+/b/c/...//a.a.a /b/c/.../a.a.a
+/b/c/...//a.a.. /b/c/.../a.a..
+/b/c/...//a.a./ /b/c/.../a.a.
+/b/c/...//a.a/a /b/c/.../a.a/a
+/b/c/...//a.a/. /b/c/.../a.a
+/b/c/...//a.a// /b/c/.../a.a
+/b/c/...//a..aa /b/c/.../a..aa
+/b/c/...//a..a. /b/c/.../a..a.
+/b/c/...//a..a/ /b/c/.../a..a
+/b/c/...//a...a /b/c/.../a...a
+/b/c/...//a.... /b/c/.../a....
+/b/c/...//a.../ /b/c/.../a...
+/b/c/...//a../a /b/c/.../a../a
+/b/c/...//a../. /b/c/.../a..
+/b/c/...//a..// /b/c/.../a..
+/b/c/...//a./aa /b/c/.../a./aa
+/b/c/...//a./a. /b/c/.../a./a.
+/b/c/...//a./a/ /b/c/.../a./a
+/b/c/...//a./.a /b/c/.../a./.a
+/b/c/...//a./.. /b/c/...
+/b/c/...//a././ /b/c/.../a.
+/b/c/...//a.//a /b/c/.../a./a
+/b/c/...//a.//. /b/c/.../a.
+/b/c/...//a./// /b/c/.../a.
+/b/c/...//a/aaa /b/c/.../a/aaa
+/b/c/...//a/aa. /b/c/.../a/aa.
+/b/c/...//a/aa/ /b/c/.../a/aa
+/b/c/...//a/a.a /b/c/.../a/a.a
+/b/c/...//a/a.. /b/c/.../a/a..
+/b/c/...//a/a./ /b/c/.../a/a.
+/b/c/...//a/a/a /b/c/.../a/a/a
+/b/c/...//a/a/. /b/c/.../a/a
+/b/c/...//a/a// /b/c/.../a/a
+/b/c/...//a/.aa /b/c/.../a/.aa
+/b/c/...//a/.a. /b/c/.../a/.a.
+/b/c/...//a/.a/ /b/c/.../a/.a
+/b/c/...//a/..a /b/c/.../a/..a
+/b/c/...//a/... /b/c/.../a/...
+/b/c/...//a/../ /b/c/...
+/b/c/...//a/./a /b/c/.../a/a
+/b/c/...//a/./. /b/c/.../a
+/b/c/...//a/.// /b/c/.../a
+/b/c/...//a//aa /b/c/.../a/aa
+/b/c/...//a//a. /b/c/.../a/a.
+/b/c/...//a//a/ /b/c/.../a/a
+/b/c/...//a//.a /b/c/.../a/.a
+/b/c/...//a//.. /b/c/...
+/b/c/...//a//./ /b/c/.../a
+/b/c/...//a///a /b/c/.../a/a
+/b/c/...//a///. /b/c/.../a
+/b/c/...//a//// /b/c/.../a
+/b/c/...//.aaaa /b/c/.../.aaaa
+/b/c/...//.aaa. /b/c/.../.aaa.
+/b/c/...//.aaa/ /b/c/.../.aaa
+/b/c/...//.aa.a /b/c/.../.aa.a
+/b/c/...//.aa.. /b/c/.../.aa..
+/b/c/...//.aa./ /b/c/.../.aa.
+/b/c/...//.aa/a /b/c/.../.aa/a
+/b/c/...//.aa/. /b/c/.../.aa
+/b/c/...//.aa// /b/c/.../.aa
+/b/c/...//.a.aa /b/c/.../.a.aa
+/b/c/...//.a.a. /b/c/.../.a.a.
+/b/c/...//.a.a/ /b/c/.../.a.a
+/b/c/...//.a..a /b/c/.../.a..a
+/b/c/...//.a... /b/c/.../.a...
+/b/c/...//.a../ /b/c/.../.a..
+/b/c/...//.a./a /b/c/.../.a./a
+/b/c/...//.a./. /b/c/.../.a.
+/b/c/...//.a.// /b/c/.../.a.
+/b/c/...//.a/aa /b/c/.../.a/aa
+/b/c/...//.a/a. /b/c/.../.a/a.
+/b/c/...//.a/a/ /b/c/.../.a/a
+/b/c/...//.a/.a /b/c/.../.a/.a
+/b/c/...//.a/.. /b/c/...
+/b/c/...//.a/./ /b/c/.../.a
+/b/c/...//.a//a /b/c/.../.a/a
+/b/c/...//.a//. /b/c/.../.a
+/b/c/...//.a/// /b/c/.../.a
+/b/c/...//..aaa /b/c/.../..aaa
+/b/c/...//..aa. /b/c/.../..aa.
+/b/c/...//..aa/ /b/c/.../..aa
+/b/c/...//..a.a /b/c/.../..a.a
+/b/c/...//..a.. /b/c/.../..a..
+/b/c/...//..a./ /b/c/.../..a.
+/b/c/...//..a/a /b/c/.../..a/a
+/b/c/...//..a/. /b/c/.../..a
+/b/c/...//..a// /b/c/.../..a
+/b/c/...//...aa /b/c/.../...aa
+/b/c/...//...a. /b/c/.../...a.
+/b/c/...//...a/ /b/c/.../...a
+/b/c/...//....a /b/c/.../....a
+/b/c/...//..... /b/c/.../.....
+/b/c/...//..../ /b/c/.../....
+/b/c/...//.../a /b/c/.../.../a
+/b/c/...//.../. /b/c/.../...
+/b/c/...//...// /b/c/.../...
+/b/c/...//../aa /b/c/aa
+/b/c/...//../a. /b/c/a.
+/b/c/...//../a/ /b/c/a
+/b/c/...//../.a /b/c/.a
+/b/c/...//../.. /b
+/b/c/...//.././ /b/c
+/b/c/...//..//a /b/c/a
+/b/c/...//..//. /b/c
+/b/c/...//../// /b/c
+/b/c/...//./aaa /b/c/.../aaa
+/b/c/...//./aa. /b/c/.../aa.
+/b/c/...//./aa/ /b/c/.../aa
+/b/c/...//./a.a /b/c/.../a.a
+/b/c/...//./a.. /b/c/.../a..
+/b/c/...//./a./ /b/c/.../a.
+/b/c/...//./a/a /b/c/.../a/a
+/b/c/...//./a/. /b/c/.../a
+/b/c/...//./a// /b/c/.../a
+/b/c/...//./.aa /b/c/.../.aa
+/b/c/...//./.a. /b/c/.../.a.
+/b/c/...//./.a/ /b/c/.../.a
+/b/c/...//./..a /b/c/.../..a
+/b/c/...//./... /b/c/.../...
+/b/c/...//./../ /b/c
+/b/c/...//././a /b/c/.../a
+/b/c/...//././. /b/c/...
+/b/c/...//./.// /b/c/...
+/b/c/...//.//aa /b/c/.../aa
+/b/c/...//.//a. /b/c/.../a.
+/b/c/...//.//a/ /b/c/.../a
+/b/c/...//.//.a /b/c/.../.a
+/b/c/...//.//.. /b/c
+/b/c/...//.//./ /b/c/...
+/b/c/...//.///a /b/c/.../a
+/b/c/...//.///. /b/c/...
+/b/c/...//.//// /b/c/...
+/b/c/...///aaaa /b/c/.../aaaa
+/b/c/...///aaa. /b/c/.../aaa.
+/b/c/...///aaa/ /b/c/.../aaa
+/b/c/...///aa.a /b/c/.../aa.a
+/b/c/...///aa.. /b/c/.../aa..
+/b/c/...///aa./ /b/c/.../aa.
+/b/c/...///aa/a /b/c/.../aa/a
+/b/c/...///aa/. /b/c/.../aa
+/b/c/...///aa// /b/c/.../aa
+/b/c/...///a.aa /b/c/.../a.aa
+/b/c/...///a.a. /b/c/.../a.a.
+/b/c/...///a.a/ /b/c/.../a.a
+/b/c/...///a..a /b/c/.../a..a
+/b/c/...///a... /b/c/.../a...
+/b/c/...///a../ /b/c/.../a..
+/b/c/...///a./a /b/c/.../a./a
+/b/c/...///a./. /b/c/.../a.
+/b/c/...///a.// /b/c/.../a.
+/b/c/...///a/aa /b/c/.../a/aa
+/b/c/...///a/a. /b/c/.../a/a.
+/b/c/...///a/a/ /b/c/.../a/a
+/b/c/...///a/.a /b/c/.../a/.a
+/b/c/...///a/.. /b/c/...
+/b/c/...///a/./ /b/c/.../a
+/b/c/...///a//a /b/c/.../a/a
+/b/c/...///a//. /b/c/.../a
+/b/c/...///a/// /b/c/.../a
+/b/c/...///.aaa /b/c/.../.aaa
+/b/c/...///.aa. /b/c/.../.aa.
+/b/c/...///.aa/ /b/c/.../.aa
+/b/c/...///.a.a /b/c/.../.a.a
+/b/c/...///.a.. /b/c/.../.a..
+/b/c/...///.a./ /b/c/.../.a.
+/b/c/...///.a/a /b/c/.../.a/a
+/b/c/...///.a/. /b/c/.../.a
+/b/c/...///.a// /b/c/.../.a
+/b/c/...///..aa /b/c/.../..aa
+/b/c/...///..a. /b/c/.../..a.
+/b/c/...///..a/ /b/c/.../..a
+/b/c/...///...a /b/c/.../...a
+/b/c/...///.... /b/c/.../....
+/b/c/...///.../ /b/c/.../...
+/b/c/...///../a /b/c/a
+/b/c/...///../. /b/c
+/b/c/...///..// /b/c
+/b/c/...///./aa /b/c/.../aa
+/b/c/...///./a. /b/c/.../a.
+/b/c/...///./a/ /b/c/.../a
+/b/c/...///./.a /b/c/.../.a
+/b/c/...///./.. /b/c
+/b/c/...///././ /b/c/...
+/b/c/...///.//a /b/c/.../a
+/b/c/...///.//. /b/c/...
+/b/c/...///./// /b/c/...
+/b/c/...////aaa /b/c/.../aaa
+/b/c/...////aa. /b/c/.../aa.
+/b/c/...////aa/ /b/c/.../aa
+/b/c/...////a.a /b/c/.../a.a
+/b/c/...////a.. /b/c/.../a..
+/b/c/...////a./ /b/c/.../a.
+/b/c/...////a/a /b/c/.../a/a
+/b/c/...////a/. /b/c/.../a
+/b/c/...////a// /b/c/.../a
+/b/c/...////.aa /b/c/.../.aa
+/b/c/...////.a. /b/c/.../.a.
+/b/c/...////.a/ /b/c/.../.a
+/b/c/...////..a /b/c/.../..a
+/b/c/...////... /b/c/.../...
+/b/c/...////../ /b/c
+/b/c/...////./a /b/c/.../a
+/b/c/...////./. /b/c/...
+/b/c/...////.// /b/c/...
+/b/c/.../////aa /b/c/.../aa
+/b/c/.../////a. /b/c/.../a.
+/b/c/.../////a/ /b/c/.../a
+/b/c/.../////.a /b/c/.../.a
+/b/c/.../////.. /b/c
+/b/c/.../////./ /b/c/...
+/b/c/...//////a /b/c/.../a
+/b/c/...//////. /b/c/...
+/b/c/.../////// /b/c/...
+/b/c/../aaaaaaa /b/aaaaaaa
+/b/c/../aaaaaa. /b/aaaaaa.
+/b/c/../aaaaaa/ /b/aaaaaa
+/b/c/../aaaaa.a /b/aaaaa.a
+/b/c/../aaaaa.. /b/aaaaa..
+/b/c/../aaaaa./ /b/aaaaa.
+/b/c/../aaaaa/a /b/aaaaa/a
+/b/c/../aaaaa/. /b/aaaaa
+/b/c/../aaaaa// /b/aaaaa
+/b/c/../aaaa.aa /b/aaaa.aa
+/b/c/../aaaa.a. /b/aaaa.a.
+/b/c/../aaaa.a/ /b/aaaa.a
+/b/c/../aaaa..a /b/aaaa..a
+/b/c/../aaaa... /b/aaaa...
+/b/c/../aaaa../ /b/aaaa..
+/b/c/../aaaa./a /b/aaaa./a
+/b/c/../aaaa./. /b/aaaa.
+/b/c/../aaaa.// /b/aaaa.
+/b/c/../aaaa/aa /b/aaaa/aa
+/b/c/../aaaa/a. /b/aaaa/a.
+/b/c/../aaaa/a/ /b/aaaa/a
+/b/c/../aaaa/.a /b/aaaa/.a
+/b/c/../aaaa/.. /b
+/b/c/../aaaa/./ /b/aaaa
+/b/c/../aaaa//a /b/aaaa/a
+/b/c/../aaaa//. /b/aaaa
+/b/c/../aaaa/// /b/aaaa
+/b/c/../aaa.aaa /b/aaa.aaa
+/b/c/../aaa.aa. /b/aaa.aa.
+/b/c/../aaa.aa/ /b/aaa.aa
+/b/c/../aaa.a.a /b/aaa.a.a
+/b/c/../aaa.a.. /b/aaa.a..
+/b/c/../aaa.a./ /b/aaa.a.
+/b/c/../aaa.a/a /b/aaa.a/a
+/b/c/../aaa.a/. /b/aaa.a
+/b/c/../aaa.a// /b/aaa.a
+/b/c/../aaa..aa /b/aaa..aa
+/b/c/../aaa..a. /b/aaa..a.
+/b/c/../aaa..a/ /b/aaa..a
+/b/c/../aaa...a /b/aaa...a
+/b/c/../aaa.... /b/aaa....
+/b/c/../aaa.../ /b/aaa...
+/b/c/../aaa../a /b/aaa../a
+/b/c/../aaa../. /b/aaa..
+/b/c/../aaa..// /b/aaa..
+/b/c/../aaa./aa /b/aaa./aa
+/b/c/../aaa./a. /b/aaa./a.
+/b/c/../aaa./a/ /b/aaa./a
+/b/c/../aaa./.a /b/aaa./.a
+/b/c/../aaa./.. /b
+/b/c/../aaa././ /b/aaa.
+/b/c/../aaa.//a /b/aaa./a
+/b/c/../aaa.//. /b/aaa.
+/b/c/../aaa./// /b/aaa.
+/b/c/../aaa/aaa /b/aaa/aaa
+/b/c/../aaa/aa. /b/aaa/aa.
+/b/c/../aaa/aa/ /b/aaa/aa
+/b/c/../aaa/a.a /b/aaa/a.a
+/b/c/../aaa/a.. /b/aaa/a..
+/b/c/../aaa/a./ /b/aaa/a.
+/b/c/../aaa/a/a /b/aaa/a/a
+/b/c/../aaa/a/. /b/aaa/a
+/b/c/../aaa/a// /b/aaa/a
+/b/c/../aaa/.aa /b/aaa/.aa
+/b/c/../aaa/.a. /b/aaa/.a.
+/b/c/../aaa/.a/ /b/aaa/.a
+/b/c/../aaa/..a /b/aaa/..a
+/b/c/../aaa/... /b/aaa/...
+/b/c/../aaa/../ /b
+/b/c/../aaa/./a /b/aaa/a
+/b/c/../aaa/./. /b/aaa
+/b/c/../aaa/.// /b/aaa
+/b/c/../aaa//aa /b/aaa/aa
+/b/c/../aaa//a. /b/aaa/a.
+/b/c/../aaa//a/ /b/aaa/a
+/b/c/../aaa//.a /b/aaa/.a
+/b/c/../aaa//.. /b
+/b/c/../aaa//./ /b/aaa
+/b/c/../aaa///a /b/aaa/a
+/b/c/../aaa///. /b/aaa
+/b/c/../aaa//// /b/aaa
+/b/c/../aa.aaaa /b/aa.aaaa
+/b/c/../aa.aaa. /b/aa.aaa.
+/b/c/../aa.aaa/ /b/aa.aaa
+/b/c/../aa.aa.a /b/aa.aa.a
+/b/c/../aa.aa.. /b/aa.aa..
+/b/c/../aa.aa./ /b/aa.aa.
+/b/c/../aa.aa/a /b/aa.aa/a
+/b/c/../aa.aa/. /b/aa.aa
+/b/c/../aa.aa// /b/aa.aa
+/b/c/../aa.a.aa /b/aa.a.aa
+/b/c/../aa.a.a. /b/aa.a.a.
+/b/c/../aa.a.a/ /b/aa.a.a
+/b/c/../aa.a..a /b/aa.a..a
+/b/c/../aa.a... /b/aa.a...
+/b/c/../aa.a../ /b/aa.a..
+/b/c/../aa.a./a /b/aa.a./a
+/b/c/../aa.a./. /b/aa.a.
+/b/c/../aa.a.// /b/aa.a.
+/b/c/../aa.a/aa /b/aa.a/aa
+/b/c/../aa.a/a. /b/aa.a/a.
+/b/c/../aa.a/a/ /b/aa.a/a
+/b/c/../aa.a/.a /b/aa.a/.a
+/b/c/../aa.a/.. /b
+/b/c/../aa.a/./ /b/aa.a
+/b/c/../aa.a//a /b/aa.a/a
+/b/c/../aa.a//. /b/aa.a
+/b/c/../aa.a/// /b/aa.a
+/b/c/../aa..aaa /b/aa..aaa
+/b/c/../aa..aa. /b/aa..aa.
+/b/c/../aa..aa/ /b/aa..aa
+/b/c/../aa..a.a /b/aa..a.a
+/b/c/../aa..a.. /b/aa..a..
+/b/c/../aa..a./ /b/aa..a.
+/b/c/../aa..a/a /b/aa..a/a
+/b/c/../aa..a/. /b/aa..a
+/b/c/../aa..a// /b/aa..a
+/b/c/../aa...aa /b/aa...aa
+/b/c/../aa...a. /b/aa...a.
+/b/c/../aa...a/ /b/aa...a
+/b/c/../aa....a /b/aa....a
+/b/c/../aa..... /b/aa.....
+/b/c/../aa..../ /b/aa....
+/b/c/../aa.../a /b/aa.../a
+/b/c/../aa.../. /b/aa...
+/b/c/../aa...// /b/aa...
+/b/c/../aa../aa /b/aa../aa
+/b/c/../aa../a. /b/aa../a.
+/b/c/../aa../a/ /b/aa../a
+/b/c/../aa../.a /b/aa../.a
+/b/c/../aa../.. /b
+/b/c/../aa.././ /b/aa..
+/b/c/../aa..//a /b/aa../a
+/b/c/../aa..//. /b/aa..
+/b/c/../aa../// /b/aa..
+/b/c/../aa./aaa /b/aa./aaa
+/b/c/../aa./aa. /b/aa./aa.
+/b/c/../aa./aa/ /b/aa./aa
+/b/c/../aa./a.a /b/aa./a.a
+/b/c/../aa./a.. /b/aa./a..
+/b/c/../aa./a./ /b/aa./a.
+/b/c/../aa./a/a /b/aa./a/a
+/b/c/../aa./a/. /b/aa./a
+/b/c/../aa./a// /b/aa./a
+/b/c/../aa./.aa /b/aa./.aa
+/b/c/../aa./.a. /b/aa./.a.
+/b/c/../aa./.a/ /b/aa./.a
+/b/c/../aa./..a /b/aa./..a
+/b/c/../aa./... /b/aa./...
+/b/c/../aa./../ /b
+/b/c/../aa././a /b/aa./a
+/b/c/../aa././. /b/aa.
+/b/c/../aa./.// /b/aa.
+/b/c/../aa.//aa /b/aa./aa
+/b/c/../aa.//a. /b/aa./a.
+/b/c/../aa.//a/ /b/aa./a
+/b/c/../aa.//.a /b/aa./.a
+/b/c/../aa.//.. /b
+/b/c/../aa.//./ /b/aa.
+/b/c/../aa.///a /b/aa./a
+/b/c/../aa.///. /b/aa.
+/b/c/../aa.//// /b/aa.
+/b/c/../aa/aaaa /b/aa/aaaa
+/b/c/../aa/aaa. /b/aa/aaa.
+/b/c/../aa/aaa/ /b/aa/aaa
+/b/c/../aa/aa.a /b/aa/aa.a
+/b/c/../aa/aa.. /b/aa/aa..
+/b/c/../aa/aa./ /b/aa/aa.
+/b/c/../aa/aa/a /b/aa/aa/a
+/b/c/../aa/aa/. /b/aa/aa
+/b/c/../aa/aa// /b/aa/aa
+/b/c/../aa/a.aa /b/aa/a.aa
+/b/c/../aa/a.a. /b/aa/a.a.
+/b/c/../aa/a.a/ /b/aa/a.a
+/b/c/../aa/a..a /b/aa/a..a
+/b/c/../aa/a... /b/aa/a...
+/b/c/../aa/a../ /b/aa/a..
+/b/c/../aa/a./a /b/aa/a./a
+/b/c/../aa/a./. /b/aa/a.
+/b/c/../aa/a.// /b/aa/a.
+/b/c/../aa/a/aa /b/aa/a/aa
+/b/c/../aa/a/a. /b/aa/a/a.
+/b/c/../aa/a/a/ /b/aa/a/a
+/b/c/../aa/a/.a /b/aa/a/.a
+/b/c/../aa/a/.. /b/aa
+/b/c/../aa/a/./ /b/aa/a
+/b/c/../aa/a//a /b/aa/a/a
+/b/c/../aa/a//. /b/aa/a
+/b/c/../aa/a/// /b/aa/a
+/b/c/../aa/.aaa /b/aa/.aaa
+/b/c/../aa/.aa. /b/aa/.aa.
+/b/c/../aa/.aa/ /b/aa/.aa
+/b/c/../aa/.a.a /b/aa/.a.a
+/b/c/../aa/.a.. /b/aa/.a..
+/b/c/../aa/.a./ /b/aa/.a.
+/b/c/../aa/.a/a /b/aa/.a/a
+/b/c/../aa/.a/. /b/aa/.a
+/b/c/../aa/.a// /b/aa/.a
+/b/c/../aa/..aa /b/aa/..aa
+/b/c/../aa/..a. /b/aa/..a.
+/b/c/../aa/..a/ /b/aa/..a
+/b/c/../aa/...a /b/aa/...a
+/b/c/../aa/.... /b/aa/....
+/b/c/../aa/.../ /b/aa/...
+/b/c/../aa/../a /b/a
+/b/c/../aa/../. /b
+/b/c/../aa/..// /b
+/b/c/../aa/./aa /b/aa/aa
+/b/c/../aa/./a. /b/aa/a.
+/b/c/../aa/./a/ /b/aa/a
+/b/c/../aa/./.a /b/aa/.a
+/b/c/../aa/./.. /b
+/b/c/../aa/././ /b/aa
+/b/c/../aa/.//a /b/aa/a
+/b/c/../aa/.//. /b/aa
+/b/c/../aa/./// /b/aa
+/b/c/../aa//aaa /b/aa/aaa
+/b/c/../aa//aa. /b/aa/aa.
+/b/c/../aa//aa/ /b/aa/aa
+/b/c/../aa//a.a /b/aa/a.a
+/b/c/../aa//a.. /b/aa/a..
+/b/c/../aa//a./ /b/aa/a.
+/b/c/../aa//a/a /b/aa/a/a
+/b/c/../aa//a/. /b/aa/a
+/b/c/../aa//a// /b/aa/a
+/b/c/../aa//.aa /b/aa/.aa
+/b/c/../aa//.a. /b/aa/.a.
+/b/c/../aa//.a/ /b/aa/.a
+/b/c/../aa//..a /b/aa/..a
+/b/c/../aa//... /b/aa/...
+/b/c/../aa//../ /b
+/b/c/../aa//./a /b/aa/a
+/b/c/../aa//./. /b/aa
+/b/c/../aa//.// /b/aa
+/b/c/../aa///aa /b/aa/aa
+/b/c/../aa///a. /b/aa/a.
+/b/c/../aa///a/ /b/aa/a
+/b/c/../aa///.a /b/aa/.a
+/b/c/../aa///.. /b
+/b/c/../aa///./ /b/aa
+/b/c/../aa////a /b/aa/a
+/b/c/../aa////. /b/aa
+/b/c/../aa///// /b/aa
+/b/c/../a.aaaaa /b/a.aaaaa
+/b/c/../a.aaaa. /b/a.aaaa.
+/b/c/../a.aaaa/ /b/a.aaaa
+/b/c/../a.aaa.a /b/a.aaa.a
+/b/c/../a.aaa.. /b/a.aaa..
+/b/c/../a.aaa./ /b/a.aaa.
+/b/c/../a.aaa/a /b/a.aaa/a
+/b/c/../a.aaa/. /b/a.aaa
+/b/c/../a.aaa// /b/a.aaa
+/b/c/../a.aa.aa /b/a.aa.aa
+/b/c/../a.aa.a. /b/a.aa.a.
+/b/c/../a.aa.a/ /b/a.aa.a
+/b/c/../a.aa..a /b/a.aa..a
+/b/c/../a.aa... /b/a.aa...
+/b/c/../a.aa../ /b/a.aa..
+/b/c/../a.aa./a /b/a.aa./a
+/b/c/../a.aa./. /b/a.aa.
+/b/c/../a.aa.// /b/a.aa.
+/b/c/../a.aa/aa /b/a.aa/aa
+/b/c/../a.aa/a. /b/a.aa/a.
+/b/c/../a.aa/a/ /b/a.aa/a
+/b/c/../a.aa/.a /b/a.aa/.a
+/b/c/../a.aa/.. /b
+/b/c/../a.aa/./ /b/a.aa
+/b/c/../a.aa//a /b/a.aa/a
+/b/c/../a.aa//. /b/a.aa
+/b/c/../a.aa/// /b/a.aa
+/b/c/../a.a.aaa /b/a.a.aaa
+/b/c/../a.a.aa. /b/a.a.aa.
+/b/c/../a.a.aa/ /b/a.a.aa
+/b/c/../a.a.a.a /b/a.a.a.a
+/b/c/../a.a.a.. /b/a.a.a..
+/b/c/../a.a.a./ /b/a.a.a.
+/b/c/../a.a.a/a /b/a.a.a/a
+/b/c/../a.a.a/. /b/a.a.a
+/b/c/../a.a.a// /b/a.a.a
+/b/c/../a.a..aa /b/a.a..aa
+/b/c/../a.a..a. /b/a.a..a.
+/b/c/../a.a..a/ /b/a.a..a
+/b/c/../a.a...a /b/a.a...a
+/b/c/../a.a.... /b/a.a....
+/b/c/../a.a.../ /b/a.a...
+/b/c/../a.a../a /b/a.a../a
+/b/c/../a.a../. /b/a.a..
+/b/c/../a.a..// /b/a.a..
+/b/c/../a.a./aa /b/a.a./aa
+/b/c/../a.a./a. /b/a.a./a.
+/b/c/../a.a./a/ /b/a.a./a
+/b/c/../a.a./.a /b/a.a./.a
+/b/c/../a.a./.. /b
+/b/c/../a.a././ /b/a.a.
+/b/c/../a.a.//a /b/a.a./a
+/b/c/../a.a.//. /b/a.a.
+/b/c/../a.a./// /b/a.a.
+/b/c/../a.a/aaa /b/a.a/aaa
+/b/c/../a.a/aa. /b/a.a/aa.
+/b/c/../a.a/aa/ /b/a.a/aa
+/b/c/../a.a/a.a /b/a.a/a.a
+/b/c/../a.a/a.. /b/a.a/a..
+/b/c/../a.a/a./ /b/a.a/a.
+/b/c/../a.a/a/a /b/a.a/a/a
+/b/c/../a.a/a/. /b/a.a/a
+/b/c/../a.a/a// /b/a.a/a
+/b/c/../a.a/.aa /b/a.a/.aa
+/b/c/../a.a/.a. /b/a.a/.a.
+/b/c/../a.a/.a/ /b/a.a/.a
+/b/c/../a.a/..a /b/a.a/..a
+/b/c/../a.a/... /b/a.a/...
+/b/c/../a.a/../ /b
+/b/c/../a.a/./a /b/a.a/a
+/b/c/../a.a/./. /b/a.a
+/b/c/../a.a/.// /b/a.a
+/b/c/../a.a//aa /b/a.a/aa
+/b/c/../a.a//a. /b/a.a/a.
+/b/c/../a.a//a/ /b/a.a/a
+/b/c/../a.a//.a /b/a.a/.a
+/b/c/../a.a//.. /b
+/b/c/../a.a//./ /b/a.a
+/b/c/../a.a///a /b/a.a/a
+/b/c/../a.a///. /b/a.a
+/b/c/../a.a//// /b/a.a
+/b/c/../a..aaaa /b/a..aaaa
+/b/c/../a..aaa. /b/a..aaa.
+/b/c/../a..aaa/ /b/a..aaa
+/b/c/../a..aa.a /b/a..aa.a
+/b/c/../a..aa.. /b/a..aa..
+/b/c/../a..aa./ /b/a..aa.
+/b/c/../a..aa/a /b/a..aa/a
+/b/c/../a..aa/. /b/a..aa
+/b/c/../a..aa// /b/a..aa
+/b/c/../a..a.aa /b/a..a.aa
+/b/c/../a..a.a. /b/a..a.a.
+/b/c/../a..a.a/ /b/a..a.a
+/b/c/../a..a..a /b/a..a..a
+/b/c/../a..a... /b/a..a...
+/b/c/../a..a../ /b/a..a..
+/b/c/../a..a./a /b/a..a./a
+/b/c/../a..a./. /b/a..a.
+/b/c/../a..a.// /b/a..a.
+/b/c/../a..a/aa /b/a..a/aa
+/b/c/../a..a/a. /b/a..a/a.
+/b/c/../a..a/a/ /b/a..a/a
+/b/c/../a..a/.a /b/a..a/.a
+/b/c/../a..a/.. /b
+/b/c/../a..a/./ /b/a..a
+/b/c/../a..a//a /b/a..a/a
+/b/c/../a..a//. /b/a..a
+/b/c/../a..a/// /b/a..a
+/b/c/../a...aaa /b/a...aaa
+/b/c/../a...aa. /b/a...aa.
+/b/c/../a...aa/ /b/a...aa
+/b/c/../a...a.a /b/a...a.a
+/b/c/../a...a.. /b/a...a..
+/b/c/../a...a./ /b/a...a.
+/b/c/../a...a/a /b/a...a/a
+/b/c/../a...a/. /b/a...a
+/b/c/../a...a// /b/a...a
+/b/c/../a....aa /b/a....aa
+/b/c/../a....a. /b/a....a.
+/b/c/../a....a/ /b/a....a
+/b/c/../a.....a /b/a.....a
+/b/c/../a...... /b/a......
+/b/c/../a...../ /b/a.....
+/b/c/../a..../a /b/a..../a
+/b/c/../a..../. /b/a....
+/b/c/../a....// /b/a....
+/b/c/../a.../aa /b/a.../aa
+/b/c/../a.../a. /b/a.../a.
+/b/c/../a.../a/ /b/a.../a
+/b/c/../a.../.a /b/a.../.a
+/b/c/../a.../.. /b
+/b/c/../a..././ /b/a...
+/b/c/../a...//a /b/a.../a
+/b/c/../a...//. /b/a...
+/b/c/../a.../// /b/a...
+/b/c/../a../aaa /b/a../aaa
+/b/c/../a../aa. /b/a../aa.
+/b/c/../a../aa/ /b/a../aa
+/b/c/../a../a.a /b/a../a.a
+/b/c/../a../a.. /b/a../a..
+/b/c/../a../a./ /b/a../a.
+/b/c/../a../a/a /b/a../a/a
+/b/c/../a../a/. /b/a../a
+/b/c/../a../a// /b/a../a
+/b/c/../a../.aa /b/a../.aa
+/b/c/../a../.a. /b/a../.a.
+/b/c/../a../.a/ /b/a../.a
+/b/c/../a../..a /b/a../..a
+/b/c/../a../... /b/a../...
+/b/c/../a../../ /b
+/b/c/../a.././a /b/a../a
+/b/c/../a.././. /b/a..
+/b/c/../a../.// /b/a..
+/b/c/../a..//aa /b/a../aa
+/b/c/../a..//a. /b/a../a.
+/b/c/../a..//a/ /b/a../a
+/b/c/../a..//.a /b/a../.a
+/b/c/../a..//.. /b
+/b/c/../a..//./ /b/a..
+/b/c/../a..///a /b/a../a
+/b/c/../a..///. /b/a..
+/b/c/../a..//// /b/a..
+/b/c/../a./aaaa /b/a./aaaa
+/b/c/../a./aaa. /b/a./aaa.
+/b/c/../a./aaa/ /b/a./aaa
+/b/c/../a./aa.a /b/a./aa.a
+/b/c/../a./aa.. /b/a./aa..
+/b/c/../a./aa./ /b/a./aa.
+/b/c/../a./aa/a /b/a./aa/a
+/b/c/../a./aa/. /b/a./aa
+/b/c/../a./aa// /b/a./aa
+/b/c/../a./a.aa /b/a./a.aa
+/b/c/../a./a.a. /b/a./a.a.
+/b/c/../a./a.a/ /b/a./a.a
+/b/c/../a./a..a /b/a./a..a
+/b/c/../a./a... /b/a./a...
+/b/c/../a./a../ /b/a./a..
+/b/c/../a./a./a /b/a./a./a
+/b/c/../a./a./. /b/a./a.
+/b/c/../a./a.// /b/a./a.
+/b/c/../a./a/aa /b/a./a/aa
+/b/c/../a./a/a. /b/a./a/a.
+/b/c/../a./a/a/ /b/a./a/a
+/b/c/../a./a/.a /b/a./a/.a
+/b/c/../a./a/.. /b/a.
+/b/c/../a./a/./ /b/a./a
+/b/c/../a./a//a /b/a./a/a
+/b/c/../a./a//. /b/a./a
+/b/c/../a./a/// /b/a./a
+/b/c/../a./.aaa /b/a./.aaa
+/b/c/../a./.aa. /b/a./.aa.
+/b/c/../a./.aa/ /b/a./.aa
+/b/c/../a./.a.a /b/a./.a.a
+/b/c/../a./.a.. /b/a./.a..
+/b/c/../a./.a./ /b/a./.a.
+/b/c/../a./.a/a /b/a./.a/a
+/b/c/../a./.a/. /b/a./.a
+/b/c/../a./.a// /b/a./.a
+/b/c/../a./..aa /b/a./..aa
+/b/c/../a./..a. /b/a./..a.
+/b/c/../a./..a/ /b/a./..a
+/b/c/../a./...a /b/a./...a
+/b/c/../a./.... /b/a./....
+/b/c/../a./.../ /b/a./...
+/b/c/../a./../a /b/a
+/b/c/../a./../. /b
+/b/c/../a./..// /b
+/b/c/../a././aa /b/a./aa
+/b/c/../a././a. /b/a./a.
+/b/c/../a././a/ /b/a./a
+/b/c/../a././.a /b/a./.a
+/b/c/../a././.. /b
+/b/c/../a./././ /b/a.
+/b/c/../a././/a /b/a./a
+/b/c/../a././/. /b/a.
+/b/c/../a././// /b/a.
+/b/c/../a.//aaa /b/a./aaa
+/b/c/../a.//aa. /b/a./aa.
+/b/c/../a.//aa/ /b/a./aa
+/b/c/../a.//a.a /b/a./a.a
+/b/c/../a.//a.. /b/a./a..
+/b/c/../a.//a./ /b/a./a.
+/b/c/../a.//a/a /b/a./a/a
+/b/c/../a.//a/. /b/a./a
+/b/c/../a.//a// /b/a./a
+/b/c/../a.//.aa /b/a./.aa
+/b/c/../a.//.a. /b/a./.a.
+/b/c/../a.//.a/ /b/a./.a
+/b/c/../a.//..a /b/a./..a
+/b/c/../a.//... /b/a./...
+/b/c/../a.//../ /b
+/b/c/../a.//./a /b/a./a
+/b/c/../a.//./. /b/a.
+/b/c/../a.//.// /b/a.
+/b/c/../a.///aa /b/a./aa
+/b/c/../a.///a. /b/a./a.
+/b/c/../a.///a/ /b/a./a
+/b/c/../a.///.a /b/a./.a
+/b/c/../a.///.. /b
+/b/c/../a.///./ /b/a.
+/b/c/../a.////a /b/a./a
+/b/c/../a.////. /b/a.
+/b/c/../a.///// /b/a.
+/b/c/../a/aaaaa /b/a/aaaaa
+/b/c/../a/aaaa. /b/a/aaaa.
+/b/c/../a/aaaa/ /b/a/aaaa
+/b/c/../a/aaa.a /b/a/aaa.a
+/b/c/../a/aaa.. /b/a/aaa..
+/b/c/../a/aaa./ /b/a/aaa.
+/b/c/../a/aaa/a /b/a/aaa/a
+/b/c/../a/aaa/. /b/a/aaa
+/b/c/../a/aaa// /b/a/aaa
+/b/c/../a/aa.aa /b/a/aa.aa
+/b/c/../a/aa.a. /b/a/aa.a.
+/b/c/../a/aa.a/ /b/a/aa.a
+/b/c/../a/aa..a /b/a/aa..a
+/b/c/../a/aa... /b/a/aa...
+/b/c/../a/aa../ /b/a/aa..
+/b/c/../a/aa./a /b/a/aa./a
+/b/c/../a/aa./. /b/a/aa.
+/b/c/../a/aa.// /b/a/aa.
+/b/c/../a/aa/aa /b/a/aa/aa
+/b/c/../a/aa/a. /b/a/aa/a.
+/b/c/../a/aa/a/ /b/a/aa/a
+/b/c/../a/aa/.a /b/a/aa/.a
+/b/c/../a/aa/.. /b/a
+/b/c/../a/aa/./ /b/a/aa
+/b/c/../a/aa//a /b/a/aa/a
+/b/c/../a/aa//. /b/a/aa
+/b/c/../a/aa/// /b/a/aa
+/b/c/../a/a.aaa /b/a/a.aaa
+/b/c/../a/a.aa. /b/a/a.aa.
+/b/c/../a/a.aa/ /b/a/a.aa
+/b/c/../a/a.a.a /b/a/a.a.a
+/b/c/../a/a.a.. /b/a/a.a..
+/b/c/../a/a.a./ /b/a/a.a.
+/b/c/../a/a.a/a /b/a/a.a/a
+/b/c/../a/a.a/. /b/a/a.a
+/b/c/../a/a.a// /b/a/a.a
+/b/c/../a/a..aa /b/a/a..aa
+/b/c/../a/a..a. /b/a/a..a.
+/b/c/../a/a..a/ /b/a/a..a
+/b/c/../a/a...a /b/a/a...a
+/b/c/../a/a.... /b/a/a....
+/b/c/../a/a.../ /b/a/a...
+/b/c/../a/a../a /b/a/a../a
+/b/c/../a/a../. /b/a/a..
+/b/c/../a/a..// /b/a/a..
+/b/c/../a/a./aa /b/a/a./aa
+/b/c/../a/a./a. /b/a/a./a.
+/b/c/../a/a./a/ /b/a/a./a
+/b/c/../a/a./.a /b/a/a./.a
+/b/c/../a/a./.. /b/a
+/b/c/../a/a././ /b/a/a.
+/b/c/../a/a.//a /b/a/a./a
+/b/c/../a/a.//. /b/a/a.
+/b/c/../a/a./// /b/a/a.
+/b/c/../a/a/aaa /b/a/a/aaa
+/b/c/../a/a/aa. /b/a/a/aa.
+/b/c/../a/a/aa/ /b/a/a/aa
+/b/c/../a/a/a.a /b/a/a/a.a
+/b/c/../a/a/a.. /b/a/a/a..
+/b/c/../a/a/a./ /b/a/a/a.
+/b/c/../a/a/a/a /b/a/a/a/a
+/b/c/../a/a/a/. /b/a/a/a
+/b/c/../a/a/a// /b/a/a/a
+/b/c/../a/a/.aa /b/a/a/.aa
+/b/c/../a/a/.a. /b/a/a/.a.
+/b/c/../a/a/.a/ /b/a/a/.a
+/b/c/../a/a/..a /b/a/a/..a
+/b/c/../a/a/... /b/a/a/...
+/b/c/../a/a/../ /b/a
+/b/c/../a/a/./a /b/a/a/a
+/b/c/../a/a/./. /b/a/a
+/b/c/../a/a/.// /b/a/a
+/b/c/../a/a//aa /b/a/a/aa
+/b/c/../a/a//a. /b/a/a/a.
+/b/c/../a/a//a/ /b/a/a/a
+/b/c/../a/a//.a /b/a/a/.a
+/b/c/../a/a//.. /b/a
+/b/c/../a/a//./ /b/a/a
+/b/c/../a/a///a /b/a/a/a
+/b/c/../a/a///. /b/a/a
+/b/c/../a/a//// /b/a/a
+/b/c/../a/.aaaa /b/a/.aaaa
+/b/c/../a/.aaa. /b/a/.aaa.
+/b/c/../a/.aaa/ /b/a/.aaa
+/b/c/../a/.aa.a /b/a/.aa.a
+/b/c/../a/.aa.. /b/a/.aa..
+/b/c/../a/.aa./ /b/a/.aa.
+/b/c/../a/.aa/a /b/a/.aa/a
+/b/c/../a/.aa/. /b/a/.aa
+/b/c/../a/.aa// /b/a/.aa
+/b/c/../a/.a.aa /b/a/.a.aa
+/b/c/../a/.a.a. /b/a/.a.a.
+/b/c/../a/.a.a/ /b/a/.a.a
+/b/c/../a/.a..a /b/a/.a..a
+/b/c/../a/.a... /b/a/.a...
+/b/c/../a/.a../ /b/a/.a..
+/b/c/../a/.a./a /b/a/.a./a
+/b/c/../a/.a./. /b/a/.a.
+/b/c/../a/.a.// /b/a/.a.
+/b/c/../a/.a/aa /b/a/.a/aa
+/b/c/../a/.a/a. /b/a/.a/a.
+/b/c/../a/.a/a/ /b/a/.a/a
+/b/c/../a/.a/.a /b/a/.a/.a
+/b/c/../a/.a/.. /b/a
+/b/c/../a/.a/./ /b/a/.a
+/b/c/../a/.a//a /b/a/.a/a
+/b/c/../a/.a//. /b/a/.a
+/b/c/../a/.a/// /b/a/.a
+/b/c/../a/..aaa /b/a/..aaa
+/b/c/../a/..aa. /b/a/..aa.
+/b/c/../a/..aa/ /b/a/..aa
+/b/c/../a/..a.a /b/a/..a.a
+/b/c/../a/..a.. /b/a/..a..
+/b/c/../a/..a./ /b/a/..a.
+/b/c/../a/..a/a /b/a/..a/a
+/b/c/../a/..a/. /b/a/..a
+/b/c/../a/..a// /b/a/..a
+/b/c/../a/...aa /b/a/...aa
+/b/c/../a/...a. /b/a/...a.
+/b/c/../a/...a/ /b/a/...a
+/b/c/../a/....a /b/a/....a
+/b/c/../a/..... /b/a/.....
+/b/c/../a/..../ /b/a/....
+/b/c/../a/.../a /b/a/.../a
+/b/c/../a/.../. /b/a/...
+/b/c/../a/...// /b/a/...
+/b/c/../a/../aa /b/aa
+/b/c/../a/../a. /b/a.
+/b/c/../a/../a/ /b/a
+/b/c/../a/../.a /b/.a
+/b/c/../a/../.. /
+/b/c/../a/.././ /b
+/b/c/../a/..//a /b/a
+/b/c/../a/..//. /b
+/b/c/../a/../// /b
+/b/c/../a/./aaa /b/a/aaa
+/b/c/../a/./aa. /b/a/aa.
+/b/c/../a/./aa/ /b/a/aa
+/b/c/../a/./a.a /b/a/a.a
+/b/c/../a/./a.. /b/a/a..
+/b/c/../a/./a./ /b/a/a.
+/b/c/../a/./a/a /b/a/a/a
+/b/c/../a/./a/. /b/a/a
+/b/c/../a/./a// /b/a/a
+/b/c/../a/./.aa /b/a/.aa
+/b/c/../a/./.a. /b/a/.a.
+/b/c/../a/./.a/ /b/a/.a
+/b/c/../a/./..a /b/a/..a
+/b/c/../a/./... /b/a/...
+/b/c/../a/./../ /b
+/b/c/../a/././a /b/a/a
+/b/c/../a/././. /b/a
+/b/c/../a/./.// /b/a
+/b/c/../a/.//aa /b/a/aa
+/b/c/../a/.//a. /b/a/a.
+/b/c/../a/.//a/ /b/a/a
+/b/c/../a/.//.a /b/a/.a
+/b/c/../a/.//.. /b
+/b/c/../a/.//./ /b/a
+/b/c/../a/.///a /b/a/a
+/b/c/../a/.///. /b/a
+/b/c/../a/.//// /b/a
+/b/c/../a//aaaa /b/a/aaaa
+/b/c/../a//aaa. /b/a/aaa.
+/b/c/../a//aaa/ /b/a/aaa
+/b/c/../a//aa.a /b/a/aa.a
+/b/c/../a//aa.. /b/a/aa..
+/b/c/../a//aa./ /b/a/aa.
+/b/c/../a//aa/a /b/a/aa/a
+/b/c/../a//aa/. /b/a/aa
+/b/c/../a//aa// /b/a/aa
+/b/c/../a//a.aa /b/a/a.aa
+/b/c/../a//a.a. /b/a/a.a.
+/b/c/../a//a.a/ /b/a/a.a
+/b/c/../a//a..a /b/a/a..a
+/b/c/../a//a... /b/a/a...
+/b/c/../a//a../ /b/a/a..
+/b/c/../a//a./a /b/a/a./a
+/b/c/../a//a./. /b/a/a.
+/b/c/../a//a.// /b/a/a.
+/b/c/../a//a/aa /b/a/a/aa
+/b/c/../a//a/a. /b/a/a/a.
+/b/c/../a//a/a/ /b/a/a/a
+/b/c/../a//a/.a /b/a/a/.a
+/b/c/../a//a/.. /b/a
+/b/c/../a//a/./ /b/a/a
+/b/c/../a//a//a /b/a/a/a
+/b/c/../a//a//. /b/a/a
+/b/c/../a//a/// /b/a/a
+/b/c/../a//.aaa /b/a/.aaa
+/b/c/../a//.aa. /b/a/.aa.
+/b/c/../a//.aa/ /b/a/.aa
+/b/c/../a//.a.a /b/a/.a.a
+/b/c/../a//.a.. /b/a/.a..
+/b/c/../a//.a./ /b/a/.a.
+/b/c/../a//.a/a /b/a/.a/a
+/b/c/../a//.a/. /b/a/.a
+/b/c/../a//.a// /b/a/.a
+/b/c/../a//..aa /b/a/..aa
+/b/c/../a//..a. /b/a/..a.
+/b/c/../a//..a/ /b/a/..a
+/b/c/../a//...a /b/a/...a
+/b/c/../a//.... /b/a/....
+/b/c/../a//.../ /b/a/...
+/b/c/../a//../a /b/a
+/b/c/../a//../. /b
+/b/c/../a//..// /b
+/b/c/../a//./aa /b/a/aa
+/b/c/../a//./a. /b/a/a.
+/b/c/../a//./a/ /b/a/a
+/b/c/../a//./.a /b/a/.a
+/b/c/../a//./.. /b
+/b/c/../a//././ /b/a
+/b/c/../a//.//a /b/a/a
+/b/c/../a//.//. /b/a
+/b/c/../a//./// /b/a
+/b/c/../a///aaa /b/a/aaa
+/b/c/../a///aa. /b/a/aa.
+/b/c/../a///aa/ /b/a/aa
+/b/c/../a///a.a /b/a/a.a
+/b/c/../a///a.. /b/a/a..
+/b/c/../a///a./ /b/a/a.
+/b/c/../a///a/a /b/a/a/a
+/b/c/../a///a/. /b/a/a
+/b/c/../a///a// /b/a/a
+/b/c/../a///.aa /b/a/.aa
+/b/c/../a///.a. /b/a/.a.
+/b/c/../a///.a/ /b/a/.a
+/b/c/../a///..a /b/a/..a
+/b/c/../a///... /b/a/...
+/b/c/../a///../ /b
+/b/c/../a///./a /b/a/a
+/b/c/../a///./. /b/a
+/b/c/../a///.// /b/a
+/b/c/../a////aa /b/a/aa
+/b/c/../a////a. /b/a/a.
+/b/c/../a////a/ /b/a/a
+/b/c/../a////.a /b/a/.a
+/b/c/../a////.. /b
+/b/c/../a////./ /b/a
+/b/c/../a/////a /b/a/a
+/b/c/../a/////. /b/a
+/b/c/../a////// /b/a
+/b/c/../.aaaaaa /b/.aaaaaa
+/b/c/../.aaaaa. /b/.aaaaa.
+/b/c/../.aaaaa/ /b/.aaaaa
+/b/c/../.aaaa.a /b/.aaaa.a
+/b/c/../.aaaa.. /b/.aaaa..
+/b/c/../.aaaa./ /b/.aaaa.
+/b/c/../.aaaa/a /b/.aaaa/a
+/b/c/../.aaaa/. /b/.aaaa
+/b/c/../.aaaa// /b/.aaaa
+/b/c/../.aaa.aa /b/.aaa.aa
+/b/c/../.aaa.a. /b/.aaa.a.
+/b/c/../.aaa.a/ /b/.aaa.a
+/b/c/../.aaa..a /b/.aaa..a
+/b/c/../.aaa... /b/.aaa...
+/b/c/../.aaa../ /b/.aaa..
+/b/c/../.aaa./a /b/.aaa./a
+/b/c/../.aaa./. /b/.aaa.
+/b/c/../.aaa.// /b/.aaa.
+/b/c/../.aaa/aa /b/.aaa/aa
+/b/c/../.aaa/a. /b/.aaa/a.
+/b/c/../.aaa/a/ /b/.aaa/a
+/b/c/../.aaa/.a /b/.aaa/.a
+/b/c/../.aaa/.. /b
+/b/c/../.aaa/./ /b/.aaa
+/b/c/../.aaa//a /b/.aaa/a
+/b/c/../.aaa//. /b/.aaa
+/b/c/../.aaa/// /b/.aaa
+/b/c/../.aa.aaa /b/.aa.aaa
+/b/c/../.aa.aa. /b/.aa.aa.
+/b/c/../.aa.aa/ /b/.aa.aa
+/b/c/../.aa.a.a /b/.aa.a.a
+/b/c/../.aa.a.. /b/.aa.a..
+/b/c/../.aa.a./ /b/.aa.a.
+/b/c/../.aa.a/a /b/.aa.a/a
+/b/c/../.aa.a/. /b/.aa.a
+/b/c/../.aa.a// /b/.aa.a
+/b/c/../.aa..aa /b/.aa..aa
+/b/c/../.aa..a. /b/.aa..a.
+/b/c/../.aa..a/ /b/.aa..a
+/b/c/../.aa...a /b/.aa...a
+/b/c/../.aa.... /b/.aa....
+/b/c/../.aa.../ /b/.aa...
+/b/c/../.aa../a /b/.aa../a
+/b/c/../.aa../. /b/.aa..
+/b/c/../.aa..// /b/.aa..
+/b/c/../.aa./aa /b/.aa./aa
+/b/c/../.aa./a. /b/.aa./a.
+/b/c/../.aa./a/ /b/.aa./a
+/b/c/../.aa./.a /b/.aa./.a
+/b/c/../.aa./.. /b
+/b/c/../.aa././ /b/.aa.
+/b/c/../.aa.//a /b/.aa./a
+/b/c/../.aa.//. /b/.aa.
+/b/c/../.aa./// /b/.aa.
+/b/c/../.aa/aaa /b/.aa/aaa
+/b/c/../.aa/aa. /b/.aa/aa.
+/b/c/../.aa/aa/ /b/.aa/aa
+/b/c/../.aa/a.a /b/.aa/a.a
+/b/c/../.aa/a.. /b/.aa/a..
+/b/c/../.aa/a./ /b/.aa/a.
+/b/c/../.aa/a/a /b/.aa/a/a
+/b/c/../.aa/a/. /b/.aa/a
+/b/c/../.aa/a// /b/.aa/a
+/b/c/../.aa/.aa /b/.aa/.aa
+/b/c/../.aa/.a. /b/.aa/.a.
+/b/c/../.aa/.a/ /b/.aa/.a
+/b/c/../.aa/..a /b/.aa/..a
+/b/c/../.aa/... /b/.aa/...
+/b/c/../.aa/../ /b
+/b/c/../.aa/./a /b/.aa/a
+/b/c/../.aa/./. /b/.aa
+/b/c/../.aa/.// /b/.aa
+/b/c/../.aa//aa /b/.aa/aa
+/b/c/../.aa//a. /b/.aa/a.
+/b/c/../.aa//a/ /b/.aa/a
+/b/c/../.aa//.a /b/.aa/.a
+/b/c/../.aa//.. /b
+/b/c/../.aa//./ /b/.aa
+/b/c/../.aa///a /b/.aa/a
+/b/c/../.aa///. /b/.aa
+/b/c/../.aa//// /b/.aa
+/b/c/../.a.aaaa /b/.a.aaaa
+/b/c/../.a.aaa. /b/.a.aaa.
+/b/c/../.a.aaa/ /b/.a.aaa
+/b/c/../.a.aa.a /b/.a.aa.a
+/b/c/../.a.aa.. /b/.a.aa..
+/b/c/../.a.aa./ /b/.a.aa.
+/b/c/../.a.aa/a /b/.a.aa/a
+/b/c/../.a.aa/. /b/.a.aa
+/b/c/../.a.aa// /b/.a.aa
+/b/c/../.a.a.aa /b/.a.a.aa
+/b/c/../.a.a.a. /b/.a.a.a.
+/b/c/../.a.a.a/ /b/.a.a.a
+/b/c/../.a.a..a /b/.a.a..a
+/b/c/../.a.a... /b/.a.a...
+/b/c/../.a.a../ /b/.a.a..
+/b/c/../.a.a./a /b/.a.a./a
+/b/c/../.a.a./. /b/.a.a.
+/b/c/../.a.a.// /b/.a.a.
+/b/c/../.a.a/aa /b/.a.a/aa
+/b/c/../.a.a/a. /b/.a.a/a.
+/b/c/../.a.a/a/ /b/.a.a/a
+/b/c/../.a.a/.a /b/.a.a/.a
+/b/c/../.a.a/.. /b
+/b/c/../.a.a/./ /b/.a.a
+/b/c/../.a.a//a /b/.a.a/a
+/b/c/../.a.a//. /b/.a.a
+/b/c/../.a.a/// /b/.a.a
+/b/c/../.a..aaa /b/.a..aaa
+/b/c/../.a..aa. /b/.a..aa.
+/b/c/../.a..aa/ /b/.a..aa
+/b/c/../.a..a.a /b/.a..a.a
+/b/c/../.a..a.. /b/.a..a..
+/b/c/../.a..a./ /b/.a..a.
+/b/c/../.a..a/a /b/.a..a/a
+/b/c/../.a..a/. /b/.a..a
+/b/c/../.a..a// /b/.a..a
+/b/c/../.a...aa /b/.a...aa
+/b/c/../.a...a. /b/.a...a.
+/b/c/../.a...a/ /b/.a...a
+/b/c/../.a....a /b/.a....a
+/b/c/../.a..... /b/.a.....
+/b/c/../.a..../ /b/.a....
+/b/c/../.a.../a /b/.a.../a
+/b/c/../.a.../. /b/.a...
+/b/c/../.a...// /b/.a...
+/b/c/../.a../aa /b/.a../aa
+/b/c/../.a../a. /b/.a../a.
+/b/c/../.a../a/ /b/.a../a
+/b/c/../.a../.a /b/.a../.a
+/b/c/../.a../.. /b
+/b/c/../.a.././ /b/.a..
+/b/c/../.a..//a /b/.a../a
+/b/c/../.a..//. /b/.a..
+/b/c/../.a../// /b/.a..
+/b/c/../.a./aaa /b/.a./aaa
+/b/c/../.a./aa. /b/.a./aa.
+/b/c/../.a./aa/ /b/.a./aa
+/b/c/../.a./a.a /b/.a./a.a
+/b/c/../.a./a.. /b/.a./a..
+/b/c/../.a./a./ /b/.a./a.
+/b/c/../.a./a/a /b/.a./a/a
+/b/c/../.a./a/. /b/.a./a
+/b/c/../.a./a// /b/.a./a
+/b/c/../.a./.aa /b/.a./.aa
+/b/c/../.a./.a. /b/.a./.a.
+/b/c/../.a./.a/ /b/.a./.a
+/b/c/../.a./..a /b/.a./..a
+/b/c/../.a./... /b/.a./...
+/b/c/../.a./../ /b
+/b/c/../.a././a /b/.a./a
+/b/c/../.a././. /b/.a.
+/b/c/../.a./.// /b/.a.
+/b/c/../.a.//aa /b/.a./aa
+/b/c/../.a.//a. /b/.a./a.
+/b/c/../.a.//a/ /b/.a./a
+/b/c/../.a.//.a /b/.a./.a
+/b/c/../.a.//.. /b
+/b/c/../.a.//./ /b/.a.
+/b/c/../.a.///a /b/.a./a
+/b/c/../.a.///. /b/.a.
+/b/c/../.a.//// /b/.a.
+/b/c/../.a/aaaa /b/.a/aaaa
+/b/c/../.a/aaa. /b/.a/aaa.
+/b/c/../.a/aaa/ /b/.a/aaa
+/b/c/../.a/aa.a /b/.a/aa.a
+/b/c/../.a/aa.. /b/.a/aa..
+/b/c/../.a/aa./ /b/.a/aa.
+/b/c/../.a/aa/a /b/.a/aa/a
+/b/c/../.a/aa/. /b/.a/aa
+/b/c/../.a/aa// /b/.a/aa
+/b/c/../.a/a.aa /b/.a/a.aa
+/b/c/../.a/a.a. /b/.a/a.a.
+/b/c/../.a/a.a/ /b/.a/a.a
+/b/c/../.a/a..a /b/.a/a..a
+/b/c/../.a/a... /b/.a/a...
+/b/c/../.a/a../ /b/.a/a..
+/b/c/../.a/a./a /b/.a/a./a
+/b/c/../.a/a./. /b/.a/a.
+/b/c/../.a/a.// /b/.a/a.
+/b/c/../.a/a/aa /b/.a/a/aa
+/b/c/../.a/a/a. /b/.a/a/a.
+/b/c/../.a/a/a/ /b/.a/a/a
+/b/c/../.a/a/.a /b/.a/a/.a
+/b/c/../.a/a/.. /b/.a
+/b/c/../.a/a/./ /b/.a/a
+/b/c/../.a/a//a /b/.a/a/a
+/b/c/../.a/a//. /b/.a/a
+/b/c/../.a/a/// /b/.a/a
+/b/c/../.a/.aaa /b/.a/.aaa
+/b/c/../.a/.aa. /b/.a/.aa.
+/b/c/../.a/.aa/ /b/.a/.aa
+/b/c/../.a/.a.a /b/.a/.a.a
+/b/c/../.a/.a.. /b/.a/.a..
+/b/c/../.a/.a./ /b/.a/.a.
+/b/c/../.a/.a/a /b/.a/.a/a
+/b/c/../.a/.a/. /b/.a/.a
+/b/c/../.a/.a// /b/.a/.a
+/b/c/../.a/..aa /b/.a/..aa
+/b/c/../.a/..a. /b/.a/..a.
+/b/c/../.a/..a/ /b/.a/..a
+/b/c/../.a/...a /b/.a/...a
+/b/c/../.a/.... /b/.a/....
+/b/c/../.a/.../ /b/.a/...
+/b/c/../.a/../a /b/a
+/b/c/../.a/../. /b
+/b/c/../.a/..// /b
+/b/c/../.a/./aa /b/.a/aa
+/b/c/../.a/./a. /b/.a/a.
+/b/c/../.a/./a/ /b/.a/a
+/b/c/../.a/./.a /b/.a/.a
+/b/c/../.a/./.. /b
+/b/c/../.a/././ /b/.a
+/b/c/../.a/.//a /b/.a/a
+/b/c/../.a/.//. /b/.a
+/b/c/../.a/./// /b/.a
+/b/c/../.a//aaa /b/.a/aaa
+/b/c/../.a//aa. /b/.a/aa.
+/b/c/../.a//aa/ /b/.a/aa
+/b/c/../.a//a.a /b/.a/a.a
+/b/c/../.a//a.. /b/.a/a..
+/b/c/../.a//a./ /b/.a/a.
+/b/c/../.a//a/a /b/.a/a/a
+/b/c/../.a//a/. /b/.a/a
+/b/c/../.a//a// /b/.a/a
+/b/c/../.a//.aa /b/.a/.aa
+/b/c/../.a//.a. /b/.a/.a.
+/b/c/../.a//.a/ /b/.a/.a
+/b/c/../.a//..a /b/.a/..a
+/b/c/../.a//... /b/.a/...
+/b/c/../.a//../ /b
+/b/c/../.a//./a /b/.a/a
+/b/c/../.a//./. /b/.a
+/b/c/../.a//.// /b/.a
+/b/c/../.a///aa /b/.a/aa
+/b/c/../.a///a. /b/.a/a.
+/b/c/../.a///a/ /b/.a/a
+/b/c/../.a///.a /b/.a/.a
+/b/c/../.a///.. /b
+/b/c/../.a///./ /b/.a
+/b/c/../.a////a /b/.a/a
+/b/c/../.a////. /b/.a
+/b/c/../.a///// /b/.a
+/b/c/../..aaaaa /b/..aaaaa
+/b/c/../..aaaa. /b/..aaaa.
+/b/c/../..aaaa/ /b/..aaaa
+/b/c/../..aaa.a /b/..aaa.a
+/b/c/../..aaa.. /b/..aaa..
+/b/c/../..aaa./ /b/..aaa.
+/b/c/../..aaa/a /b/..aaa/a
+/b/c/../..aaa/. /b/..aaa
+/b/c/../..aaa// /b/..aaa
+/b/c/../..aa.aa /b/..aa.aa
+/b/c/../..aa.a. /b/..aa.a.
+/b/c/../..aa.a/ /b/..aa.a
+/b/c/../..aa..a /b/..aa..a
+/b/c/../..aa... /b/..aa...
+/b/c/../..aa../ /b/..aa..
+/b/c/../..aa./a /b/..aa./a
+/b/c/../..aa./. /b/..aa.
+/b/c/../..aa.// /b/..aa.
+/b/c/../..aa/aa /b/..aa/aa
+/b/c/../..aa/a. /b/..aa/a.
+/b/c/../..aa/a/ /b/..aa/a
+/b/c/../..aa/.a /b/..aa/.a
+/b/c/../..aa/.. /b
+/b/c/../..aa/./ /b/..aa
+/b/c/../..aa//a /b/..aa/a
+/b/c/../..aa//. /b/..aa
+/b/c/../..aa/// /b/..aa
+/b/c/../..a.aaa /b/..a.aaa
+/b/c/../..a.aa. /b/..a.aa.
+/b/c/../..a.aa/ /b/..a.aa
+/b/c/../..a.a.a /b/..a.a.a
+/b/c/../..a.a.. /b/..a.a..
+/b/c/../..a.a./ /b/..a.a.
+/b/c/../..a.a/a /b/..a.a/a
+/b/c/../..a.a/. /b/..a.a
+/b/c/../..a.a// /b/..a.a
+/b/c/../..a..aa /b/..a..aa
+/b/c/../..a..a. /b/..a..a.
+/b/c/../..a..a/ /b/..a..a
+/b/c/../..a...a /b/..a...a
+/b/c/../..a.... /b/..a....
+/b/c/../..a.../ /b/..a...
+/b/c/../..a../a /b/..a../a
+/b/c/../..a../. /b/..a..
+/b/c/../..a..// /b/..a..
+/b/c/../..a./aa /b/..a./aa
+/b/c/../..a./a. /b/..a./a.
+/b/c/../..a./a/ /b/..a./a
+/b/c/../..a./.a /b/..a./.a
+/b/c/../..a./.. /b
+/b/c/../..a././ /b/..a.
+/b/c/../..a.//a /b/..a./a
+/b/c/../..a.//. /b/..a.
+/b/c/../..a./// /b/..a.
+/b/c/../..a/aaa /b/..a/aaa
+/b/c/../..a/aa. /b/..a/aa.
+/b/c/../..a/aa/ /b/..a/aa
+/b/c/../..a/a.a /b/..a/a.a
+/b/c/../..a/a.. /b/..a/a..
+/b/c/../..a/a./ /b/..a/a.
+/b/c/../..a/a/a /b/..a/a/a
+/b/c/../..a/a/. /b/..a/a
+/b/c/../..a/a// /b/..a/a
+/b/c/../..a/.aa /b/..a/.aa
+/b/c/../..a/.a. /b/..a/.a.
+/b/c/../..a/.a/ /b/..a/.a
+/b/c/../..a/..a /b/..a/..a
+/b/c/../..a/... /b/..a/...
+/b/c/../..a/../ /b
+/b/c/../..a/./a /b/..a/a
+/b/c/../..a/./. /b/..a
+/b/c/../..a/.// /b/..a
+/b/c/../..a//aa /b/..a/aa
+/b/c/../..a//a. /b/..a/a.
+/b/c/../..a//a/ /b/..a/a
+/b/c/../..a//.a /b/..a/.a
+/b/c/../..a//.. /b
+/b/c/../..a//./ /b/..a
+/b/c/../..a///a /b/..a/a
+/b/c/../..a///. /b/..a
+/b/c/../..a//// /b/..a
+/b/c/../...aaaa /b/...aaaa
+/b/c/../...aaa. /b/...aaa.
+/b/c/../...aaa/ /b/...aaa
+/b/c/../...aa.a /b/...aa.a
+/b/c/../...aa.. /b/...aa..
+/b/c/../...aa./ /b/...aa.
+/b/c/../...aa/a /b/...aa/a
+/b/c/../...aa/. /b/...aa
+/b/c/../...aa// /b/...aa
+/b/c/../...a.aa /b/...a.aa
+/b/c/../...a.a. /b/...a.a.
+/b/c/../...a.a/ /b/...a.a
+/b/c/../...a..a /b/...a..a
+/b/c/../...a... /b/...a...
+/b/c/../...a../ /b/...a..
+/b/c/../...a./a /b/...a./a
+/b/c/../...a./. /b/...a.
+/b/c/../...a.// /b/...a.
+/b/c/../...a/aa /b/...a/aa
+/b/c/../...a/a. /b/...a/a.
+/b/c/../...a/a/ /b/...a/a
+/b/c/../...a/.a /b/...a/.a
+/b/c/../...a/.. /b
+/b/c/../...a/./ /b/...a
+/b/c/../...a//a /b/...a/a
+/b/c/../...a//. /b/...a
+/b/c/../...a/// /b/...a
+/b/c/../....aaa /b/....aaa
+/b/c/../....aa. /b/....aa.
+/b/c/../....aa/ /b/....aa
+/b/c/../....a.a /b/....a.a
+/b/c/../....a.. /b/....a..
+/b/c/../....a./ /b/....a.
+/b/c/../....a/a /b/....a/a
+/b/c/../....a/. /b/....a
+/b/c/../....a// /b/....a
+/b/c/../.....aa /b/.....aa
+/b/c/../.....a. /b/.....a.
+/b/c/../.....a/ /b/.....a
+/b/c/../......a /b/......a
+/b/c/../....... /b/.......
+/b/c/../....../ /b/......
+/b/c/../...../a /b/...../a
+/b/c/../...../. /b/.....
+/b/c/../.....// /b/.....
+/b/c/../..../aa /b/..../aa
+/b/c/../..../a. /b/..../a.
+/b/c/../..../a/ /b/..../a
+/b/c/../..../.a /b/..../.a
+/b/c/../..../.. /b
+/b/c/../...././ /b/....
+/b/c/../....//a /b/..../a
+/b/c/../....//. /b/....
+/b/c/../..../// /b/....
+/b/c/../.../aaa /b/.../aaa
+/b/c/../.../aa. /b/.../aa.
+/b/c/../.../aa/ /b/.../aa
+/b/c/../.../a.a /b/.../a.a
+/b/c/../.../a.. /b/.../a..
+/b/c/../.../a./ /b/.../a.
+/b/c/../.../a/a /b/.../a/a
+/b/c/../.../a/. /b/.../a
+/b/c/../.../a// /b/.../a
+/b/c/../.../.aa /b/.../.aa
+/b/c/../.../.a. /b/.../.a.
+/b/c/../.../.a/ /b/.../.a
+/b/c/../.../..a /b/.../..a
+/b/c/../.../... /b/.../...
+/b/c/../.../../ /b
+/b/c/../..././a /b/.../a
+/b/c/../..././. /b/...
+/b/c/../.../.// /b/...
+/b/c/../...//aa /b/.../aa
+/b/c/../...//a. /b/.../a.
+/b/c/../...//a/ /b/.../a
+/b/c/../...//.a /b/.../.a
+/b/c/../...//.. /b
+/b/c/../...//./ /b/...
+/b/c/../...///a /b/.../a
+/b/c/../...///. /b/...
+/b/c/../...//// /b/...
+/b/c/../../aaaa /aaaa
+/b/c/../../aaa. /aaa.
+/b/c/../../aaa/ /aaa
+/b/c/../../aa.a /aa.a
+/b/c/../../aa.. /aa..
+/b/c/../../aa./ /aa.
+/b/c/../../aa/a /aa/a
+/b/c/../../aa/. /aa
+/b/c/../../aa// /aa
+/b/c/../../a.aa /a.aa
+/b/c/../../a.a. /a.a.
+/b/c/../../a.a/ /a.a
+/b/c/../../a..a /a..a
+/b/c/../../a... /a...
+/b/c/../../a../ /a..
+/b/c/../../a./a /a./a
+/b/c/../../a./. /a.
+/b/c/../../a.// /a.
+/b/c/../../a/aa /a/aa
+/b/c/../../a/a. /a/a.
+/b/c/../../a/a/ /a/a
+/b/c/../../a/.a /a/.a
+/b/c/../../a/.. /
+/b/c/../../a/./ /a
+/b/c/../../a//a /a/a
+/b/c/../../a//. /a
+/b/c/../../a/// /a
+/b/c/../../.aaa /.aaa
+/b/c/../../.aa. /.aa.
+/b/c/../../.aa/ /.aa
+/b/c/../../.a.a /.a.a
+/b/c/../../.a.. /.a..
+/b/c/../../.a./ /.a.
+/b/c/../../.a/a /.a/a
+/b/c/../../.a/. /.a
+/b/c/../../.a// /.a
+/b/c/../../..aa /..aa
+/b/c/../../..a. /..a.
+/b/c/../../..a/ /..a
+/b/c/../../...a /...a
+/b/c/../../.... /....
+/b/c/../../.../ /...
+/b/c/../../../a /a
+/b/c/../../../. /
+/b/c/../../..// /
+/b/c/../.././aa /aa
+/b/c/../.././a. /a.
+/b/c/../.././a/ /a
+/b/c/../.././.a /.a
+/b/c/../.././.. /
+/b/c/../../././ /
+/b/c/../.././/a /a
+/b/c/../.././/. /
+/b/c/../.././// /
+/b/c/../..//aaa /aaa
+/b/c/../..//aa. /aa.
+/b/c/../..//aa/ /aa
+/b/c/../..//a.a /a.a
+/b/c/../..//a.. /a..
+/b/c/../..//a./ /a.
+/b/c/../..//a/a /a/a
+/b/c/../..//a/. /a
+/b/c/../..//a// /a
+/b/c/../..//.aa /.aa
+/b/c/../..//.a. /.a.
+/b/c/../..//.a/ /.a
+/b/c/../..//..a /..a
+/b/c/../..//... /...
+/b/c/../..//../ /
+/b/c/../..//./a /a
+/b/c/../..//./. /
+/b/c/../..//.// /
+/b/c/../..///aa /aa
+/b/c/../..///a. /a.
+/b/c/../..///a/ /a
+/b/c/../..///.a /.a
+/b/c/../..///.. /
+/b/c/../..///./ /
+/b/c/../..////a /a
+/b/c/../..////. /
+/b/c/../..///// /
+/b/c/.././aaaaa /b/aaaaa
+/b/c/.././aaaa. /b/aaaa.
+/b/c/.././aaaa/ /b/aaaa
+/b/c/.././aaa.a /b/aaa.a
+/b/c/.././aaa.. /b/aaa..
+/b/c/.././aaa./ /b/aaa.
+/b/c/.././aaa/a /b/aaa/a
+/b/c/.././aaa/. /b/aaa
+/b/c/.././aaa// /b/aaa
+/b/c/.././aa.aa /b/aa.aa
+/b/c/.././aa.a. /b/aa.a.
+/b/c/.././aa.a/ /b/aa.a
+/b/c/.././aa..a /b/aa..a
+/b/c/.././aa... /b/aa...
+/b/c/.././aa../ /b/aa..
+/b/c/.././aa./a /b/aa./a
+/b/c/.././aa./. /b/aa.
+/b/c/.././aa.// /b/aa.
+/b/c/.././aa/aa /b/aa/aa
+/b/c/.././aa/a. /b/aa/a.
+/b/c/.././aa/a/ /b/aa/a
+/b/c/.././aa/.a /b/aa/.a
+/b/c/.././aa/.. /b
+/b/c/.././aa/./ /b/aa
+/b/c/.././aa//a /b/aa/a
+/b/c/.././aa//. /b/aa
+/b/c/.././aa/// /b/aa
+/b/c/.././a.aaa /b/a.aaa
+/b/c/.././a.aa. /b/a.aa.
+/b/c/.././a.aa/ /b/a.aa
+/b/c/.././a.a.a /b/a.a.a
+/b/c/.././a.a.. /b/a.a..
+/b/c/.././a.a./ /b/a.a.
+/b/c/.././a.a/a /b/a.a/a
+/b/c/.././a.a/. /b/a.a
+/b/c/.././a.a// /b/a.a
+/b/c/.././a..aa /b/a..aa
+/b/c/.././a..a. /b/a..a.
+/b/c/.././a..a/ /b/a..a
+/b/c/.././a...a /b/a...a
+/b/c/.././a.... /b/a....
+/b/c/.././a.../ /b/a...
+/b/c/.././a../a /b/a../a
+/b/c/.././a../. /b/a..
+/b/c/.././a..// /b/a..
+/b/c/.././a./aa /b/a./aa
+/b/c/.././a./a. /b/a./a.
+/b/c/.././a./a/ /b/a./a
+/b/c/.././a./.a /b/a./.a
+/b/c/.././a./.. /b
+/b/c/.././a././ /b/a.
+/b/c/.././a.//a /b/a./a
+/b/c/.././a.//. /b/a.
+/b/c/.././a./// /b/a.
+/b/c/.././a/aaa /b/a/aaa
+/b/c/.././a/aa. /b/a/aa.
+/b/c/.././a/aa/ /b/a/aa
+/b/c/.././a/a.a /b/a/a.a
+/b/c/.././a/a.. /b/a/a..
+/b/c/.././a/a./ /b/a/a.
+/b/c/.././a/a/a /b/a/a/a
+/b/c/.././a/a/. /b/a/a
+/b/c/.././a/a// /b/a/a
+/b/c/.././a/.aa /b/a/.aa
+/b/c/.././a/.a. /b/a/.a.
+/b/c/.././a/.a/ /b/a/.a
+/b/c/.././a/..a /b/a/..a
+/b/c/.././a/... /b/a/...
+/b/c/.././a/../ /b
+/b/c/.././a/./a /b/a/a
+/b/c/.././a/./. /b/a
+/b/c/.././a/.// /b/a
+/b/c/.././a//aa /b/a/aa
+/b/c/.././a//a. /b/a/a.
+/b/c/.././a//a/ /b/a/a
+/b/c/.././a//.a /b/a/.a
+/b/c/.././a//.. /b
+/b/c/.././a//./ /b/a
+/b/c/.././a///a /b/a/a
+/b/c/.././a///. /b/a
+/b/c/.././a//// /b/a
+/b/c/.././.aaaa /b/.aaaa
+/b/c/.././.aaa. /b/.aaa.
+/b/c/.././.aaa/ /b/.aaa
+/b/c/.././.aa.a /b/.aa.a
+/b/c/.././.aa.. /b/.aa..
+/b/c/.././.aa./ /b/.aa.
+/b/c/.././.aa/a /b/.aa/a
+/b/c/.././.aa/. /b/.aa
+/b/c/.././.aa// /b/.aa
+/b/c/.././.a.aa /b/.a.aa
+/b/c/.././.a.a. /b/.a.a.
+/b/c/.././.a.a/ /b/.a.a
+/b/c/.././.a..a /b/.a..a
+/b/c/.././.a... /b/.a...
+/b/c/.././.a../ /b/.a..
+/b/c/.././.a./a /b/.a./a
+/b/c/.././.a./. /b/.a.
+/b/c/.././.a.// /b/.a.
+/b/c/.././.a/aa /b/.a/aa
+/b/c/.././.a/a. /b/.a/a.
+/b/c/.././.a/a/ /b/.a/a
+/b/c/.././.a/.a /b/.a/.a
+/b/c/.././.a/.. /b
+/b/c/.././.a/./ /b/.a
+/b/c/.././.a//a /b/.a/a
+/b/c/.././.a//. /b/.a
+/b/c/.././.a/// /b/.a
+/b/c/.././..aaa /b/..aaa
+/b/c/.././..aa. /b/..aa.
+/b/c/.././..aa/ /b/..aa
+/b/c/.././..a.a /b/..a.a
+/b/c/.././..a.. /b/..a..
+/b/c/.././..a./ /b/..a.
+/b/c/.././..a/a /b/..a/a
+/b/c/.././..a/. /b/..a
+/b/c/.././..a// /b/..a
+/b/c/.././...aa /b/...aa
+/b/c/.././...a. /b/...a.
+/b/c/.././...a/ /b/...a
+/b/c/.././....a /b/....a
+/b/c/.././..... /b/.....
+/b/c/.././..../ /b/....
+/b/c/.././.../a /b/.../a
+/b/c/.././.../. /b/...
+/b/c/.././...// /b/...
+/b/c/.././../aa /aa
+/b/c/.././../a. /a.
+/b/c/.././../a/ /a
+/b/c/.././../.a /.a
+/b/c/.././../.. /
+/b/c/.././.././ /
+/b/c/.././..//a /a
+/b/c/.././..//. /
+/b/c/.././../// /
+/b/c/../././aaa /b/aaa
+/b/c/../././aa. /b/aa.
+/b/c/../././aa/ /b/aa
+/b/c/../././a.a /b/a.a
+/b/c/../././a.. /b/a..
+/b/c/../././a./ /b/a.
+/b/c/../././a/a /b/a/a
+/b/c/../././a/. /b/a
+/b/c/../././a// /b/a
+/b/c/../././.aa /b/.aa
+/b/c/../././.a. /b/.a.
+/b/c/../././.a/ /b/.a
+/b/c/../././..a /b/..a
+/b/c/../././... /b/...
+/b/c/../././../ /
+/b/c/.././././a /b/a
+/b/c/.././././. /b
+/b/c/../././.// /b
+/b/c/../././/aa /b/aa
+/b/c/../././/a. /b/a.
+/b/c/../././/a/ /b/a
+/b/c/../././/.a /b/.a
+/b/c/../././/.. /
+/b/c/../././/./ /b
+/b/c/../././//a /b/a
+/b/c/../././//. /b
+/b/c/../././/// /b
+/b/c/.././/aaaa /b/aaaa
+/b/c/.././/aaa. /b/aaa.
+/b/c/.././/aaa/ /b/aaa
+/b/c/.././/aa.a /b/aa.a
+/b/c/.././/aa.. /b/aa..
+/b/c/.././/aa./ /b/aa.
+/b/c/.././/aa/a /b/aa/a
+/b/c/.././/aa/. /b/aa
+/b/c/.././/aa// /b/aa
+/b/c/.././/a.aa /b/a.aa
+/b/c/.././/a.a. /b/a.a.
+/b/c/.././/a.a/ /b/a.a
+/b/c/.././/a..a /b/a..a
+/b/c/.././/a... /b/a...
+/b/c/.././/a../ /b/a..
+/b/c/.././/a./a /b/a./a
+/b/c/.././/a./. /b/a.
+/b/c/.././/a.// /b/a.
+/b/c/.././/a/aa /b/a/aa
+/b/c/.././/a/a. /b/a/a.
+/b/c/.././/a/a/ /b/a/a
+/b/c/.././/a/.a /b/a/.a
+/b/c/.././/a/.. /b
+/b/c/.././/a/./ /b/a
+/b/c/.././/a//a /b/a/a
+/b/c/.././/a//. /b/a
+/b/c/.././/a/// /b/a
+/b/c/.././/.aaa /b/.aaa
+/b/c/.././/.aa. /b/.aa.
+/b/c/.././/.aa/ /b/.aa
+/b/c/.././/.a.a /b/.a.a
+/b/c/.././/.a.. /b/.a..
+/b/c/.././/.a./ /b/.a.
+/b/c/.././/.a/a /b/.a/a
+/b/c/.././/.a/. /b/.a
+/b/c/.././/.a// /b/.a
+/b/c/.././/..aa /b/..aa
+/b/c/.././/..a. /b/..a.
+/b/c/.././/..a/ /b/..a
+/b/c/.././/...a /b/...a
+/b/c/.././/.... /b/....
+/b/c/.././/.../ /b/...
+/b/c/.././/../a /a
+/b/c/.././/../. /
+/b/c/.././/..// /
+/b/c/.././/./aa /b/aa
+/b/c/.././/./a. /b/a.
+/b/c/.././/./a/ /b/a
+/b/c/.././/./.a /b/.a
+/b/c/.././/./.. /
+/b/c/.././/././ /b
+/b/c/.././/.//a /b/a
+/b/c/.././/.//. /b
+/b/c/.././/./// /b
+/b/c/.././//aaa /b/aaa
+/b/c/.././//aa. /b/aa.
+/b/c/.././//aa/ /b/aa
+/b/c/.././//a.a /b/a.a
+/b/c/.././//a.. /b/a..
+/b/c/.././//a./ /b/a.
+/b/c/.././//a/a /b/a/a
+/b/c/.././//a/. /b/a
+/b/c/.././//a// /b/a
+/b/c/.././//.aa /b/.aa
+/b/c/.././//.a. /b/.a.
+/b/c/.././//.a/ /b/.a
+/b/c/.././//..a /b/..a
+/b/c/.././//... /b/...
+/b/c/.././//../ /
+/b/c/.././//./a /b/a
+/b/c/.././//./. /b
+/b/c/.././//.// /b
+/b/c/.././///aa /b/aa
+/b/c/.././///a. /b/a.
+/b/c/.././///a/ /b/a
+/b/c/.././///.a /b/.a
+/b/c/.././///.. /
+/b/c/.././///./ /b
+/b/c/.././////a /b/a
+/b/c/.././////. /b
+/b/c/.././///// /b
+/b/c/..//aaaaaa /b/aaaaaa
+/b/c/..//aaaaa. /b/aaaaa.
+/b/c/..//aaaaa/ /b/aaaaa
+/b/c/..//aaaa.a /b/aaaa.a
+/b/c/..//aaaa.. /b/aaaa..
+/b/c/..//aaaa./ /b/aaaa.
+/b/c/..//aaaa/a /b/aaaa/a
+/b/c/..//aaaa/. /b/aaaa
+/b/c/..//aaaa// /b/aaaa
+/b/c/..//aaa.aa /b/aaa.aa
+/b/c/..//aaa.a. /b/aaa.a.
+/b/c/..//aaa.a/ /b/aaa.a
+/b/c/..//aaa..a /b/aaa..a
+/b/c/..//aaa... /b/aaa...
+/b/c/..//aaa../ /b/aaa..
+/b/c/..//aaa./a /b/aaa./a
+/b/c/..//aaa./. /b/aaa.
+/b/c/..//aaa.// /b/aaa.
+/b/c/..//aaa/aa /b/aaa/aa
+/b/c/..//aaa/a. /b/aaa/a.
+/b/c/..//aaa/a/ /b/aaa/a
+/b/c/..//aaa/.a /b/aaa/.a
+/b/c/..//aaa/.. /b
+/b/c/..//aaa/./ /b/aaa
+/b/c/..//aaa//a /b/aaa/a
+/b/c/..//aaa//. /b/aaa
+/b/c/..//aaa/// /b/aaa
+/b/c/..//aa.aaa /b/aa.aaa
+/b/c/..//aa.aa. /b/aa.aa.
+/b/c/..//aa.aa/ /b/aa.aa
+/b/c/..//aa.a.a /b/aa.a.a
+/b/c/..//aa.a.. /b/aa.a..
+/b/c/..//aa.a./ /b/aa.a.
+/b/c/..//aa.a/a /b/aa.a/a
+/b/c/..//aa.a/. /b/aa.a
+/b/c/..//aa.a// /b/aa.a
+/b/c/..//aa..aa /b/aa..aa
+/b/c/..//aa..a. /b/aa..a.
+/b/c/..//aa..a/ /b/aa..a
+/b/c/..//aa...a /b/aa...a
+/b/c/..//aa.... /b/aa....
+/b/c/..//aa.../ /b/aa...
+/b/c/..//aa../a /b/aa../a
+/b/c/..//aa../. /b/aa..
+/b/c/..//aa..// /b/aa..
+/b/c/..//aa./aa /b/aa./aa
+/b/c/..//aa./a. /b/aa./a.
+/b/c/..//aa./a/ /b/aa./a
+/b/c/..//aa./.a /b/aa./.a
+/b/c/..//aa./.. /b
+/b/c/..//aa././ /b/aa.
+/b/c/..//aa.//a /b/aa./a
+/b/c/..//aa.//. /b/aa.
+/b/c/..//aa./// /b/aa.
+/b/c/..//aa/aaa /b/aa/aaa
+/b/c/..//aa/aa. /b/aa/aa.
+/b/c/..//aa/aa/ /b/aa/aa
+/b/c/..//aa/a.a /b/aa/a.a
+/b/c/..//aa/a.. /b/aa/a..
+/b/c/..//aa/a./ /b/aa/a.
+/b/c/..//aa/a/a /b/aa/a/a
+/b/c/..//aa/a/. /b/aa/a
+/b/c/..//aa/a// /b/aa/a
+/b/c/..//aa/.aa /b/aa/.aa
+/b/c/..//aa/.a. /b/aa/.a.
+/b/c/..//aa/.a/ /b/aa/.a
+/b/c/..//aa/..a /b/aa/..a
+/b/c/..//aa/... /b/aa/...
+/b/c/..//aa/../ /b
+/b/c/..//aa/./a /b/aa/a
+/b/c/..//aa/./. /b/aa
+/b/c/..//aa/.// /b/aa
+/b/c/..//aa//aa /b/aa/aa
+/b/c/..//aa//a. /b/aa/a.
+/b/c/..//aa//a/ /b/aa/a
+/b/c/..//aa//.a /b/aa/.a
+/b/c/..//aa//.. /b
+/b/c/..//aa//./ /b/aa
+/b/c/..//aa///a /b/aa/a
+/b/c/..//aa///. /b/aa
+/b/c/..//aa//// /b/aa
+/b/c/..//a.aaaa /b/a.aaaa
+/b/c/..//a.aaa. /b/a.aaa.
+/b/c/..//a.aaa/ /b/a.aaa
+/b/c/..//a.aa.a /b/a.aa.a
+/b/c/..//a.aa.. /b/a.aa..
+/b/c/..//a.aa./ /b/a.aa.
+/b/c/..//a.aa/a /b/a.aa/a
+/b/c/..//a.aa/. /b/a.aa
+/b/c/..//a.aa// /b/a.aa
+/b/c/..//a.a.aa /b/a.a.aa
+/b/c/..//a.a.a. /b/a.a.a.
+/b/c/..//a.a.a/ /b/a.a.a
+/b/c/..//a.a..a /b/a.a..a
+/b/c/..//a.a... /b/a.a...
+/b/c/..//a.a../ /b/a.a..
+/b/c/..//a.a./a /b/a.a./a
+/b/c/..//a.a./. /b/a.a.
+/b/c/..//a.a.// /b/a.a.
+/b/c/..//a.a/aa /b/a.a/aa
+/b/c/..//a.a/a. /b/a.a/a.
+/b/c/..//a.a/a/ /b/a.a/a
+/b/c/..//a.a/.a /b/a.a/.a
+/b/c/..//a.a/.. /b
+/b/c/..//a.a/./ /b/a.a
+/b/c/..//a.a//a /b/a.a/a
+/b/c/..//a.a//. /b/a.a
+/b/c/..//a.a/// /b/a.a
+/b/c/..//a..aaa /b/a..aaa
+/b/c/..//a..aa. /b/a..aa.
+/b/c/..//a..aa/ /b/a..aa
+/b/c/..//a..a.a /b/a..a.a
+/b/c/..//a..a.. /b/a..a..
+/b/c/..//a..a./ /b/a..a.
+/b/c/..//a..a/a /b/a..a/a
+/b/c/..//a..a/. /b/a..a
+/b/c/..//a..a// /b/a..a
+/b/c/..//a...aa /b/a...aa
+/b/c/..//a...a. /b/a...a.
+/b/c/..//a...a/ /b/a...a
+/b/c/..//a....a /b/a....a
+/b/c/..//a..... /b/a.....
+/b/c/..//a..../ /b/a....
+/b/c/..//a.../a /b/a.../a
+/b/c/..//a.../. /b/a...
+/b/c/..//a...// /b/a...
+/b/c/..//a../aa /b/a../aa
+/b/c/..//a../a. /b/a../a.
+/b/c/..//a../a/ /b/a../a
+/b/c/..//a../.a /b/a../.a
+/b/c/..//a../.. /b
+/b/c/..//a.././ /b/a..
+/b/c/..//a..//a /b/a../a
+/b/c/..//a..//. /b/a..
+/b/c/..//a../// /b/a..
+/b/c/..//a./aaa /b/a./aaa
+/b/c/..//a./aa. /b/a./aa.
+/b/c/..//a./aa/ /b/a./aa
+/b/c/..//a./a.a /b/a./a.a
+/b/c/..//a./a.. /b/a./a..
+/b/c/..//a./a./ /b/a./a.
+/b/c/..//a./a/a /b/a./a/a
+/b/c/..//a./a/. /b/a./a
+/b/c/..//a./a// /b/a./a
+/b/c/..//a./.aa /b/a./.aa
+/b/c/..//a./.a. /b/a./.a.
+/b/c/..//a./.a/ /b/a./.a
+/b/c/..//a./..a /b/a./..a
+/b/c/..//a./... /b/a./...
+/b/c/..//a./../ /b
+/b/c/..//a././a /b/a./a
+/b/c/..//a././. /b/a.
+/b/c/..//a./.// /b/a.
+/b/c/..//a.//aa /b/a./aa
+/b/c/..//a.//a. /b/a./a.
+/b/c/..//a.//a/ /b/a./a
+/b/c/..//a.//.a /b/a./.a
+/b/c/..//a.//.. /b
+/b/c/..//a.//./ /b/a.
+/b/c/..//a.///a /b/a./a
+/b/c/..//a.///. /b/a.
+/b/c/..//a.//// /b/a.
+/b/c/..//a/aaaa /b/a/aaaa
+/b/c/..//a/aaa. /b/a/aaa.
+/b/c/..//a/aaa/ /b/a/aaa
+/b/c/..//a/aa.a /b/a/aa.a
+/b/c/..//a/aa.. /b/a/aa..
+/b/c/..//a/aa./ /b/a/aa.
+/b/c/..//a/aa/a /b/a/aa/a
+/b/c/..//a/aa/. /b/a/aa
+/b/c/..//a/aa// /b/a/aa
+/b/c/..//a/a.aa /b/a/a.aa
+/b/c/..//a/a.a. /b/a/a.a.
+/b/c/..//a/a.a/ /b/a/a.a
+/b/c/..//a/a..a /b/a/a..a
+/b/c/..//a/a... /b/a/a...
+/b/c/..//a/a../ /b/a/a..
+/b/c/..//a/a./a /b/a/a./a
+/b/c/..//a/a./. /b/a/a.
+/b/c/..//a/a.// /b/a/a.
+/b/c/..//a/a/aa /b/a/a/aa
+/b/c/..//a/a/a. /b/a/a/a.
+/b/c/..//a/a/a/ /b/a/a/a
+/b/c/..//a/a/.a /b/a/a/.a
+/b/c/..//a/a/.. /b/a
+/b/c/..//a/a/./ /b/a/a
+/b/c/..//a/a//a /b/a/a/a
+/b/c/..//a/a//. /b/a/a
+/b/c/..//a/a/// /b/a/a
+/b/c/..//a/.aaa /b/a/.aaa
+/b/c/..//a/.aa. /b/a/.aa.
+/b/c/..//a/.aa/ /b/a/.aa
+/b/c/..//a/.a.a /b/a/.a.a
+/b/c/..//a/.a.. /b/a/.a..
+/b/c/..//a/.a./ /b/a/.a.
+/b/c/..//a/.a/a /b/a/.a/a
+/b/c/..//a/.a/. /b/a/.a
+/b/c/..//a/.a// /b/a/.a
+/b/c/..//a/..aa /b/a/..aa
+/b/c/..//a/..a. /b/a/..a.
+/b/c/..//a/..a/ /b/a/..a
+/b/c/..//a/...a /b/a/...a
+/b/c/..//a/.... /b/a/....
+/b/c/..//a/.../ /b/a/...
+/b/c/..//a/../a /b/a
+/b/c/..//a/../. /b
+/b/c/..//a/..// /b
+/b/c/..//a/./aa /b/a/aa
+/b/c/..//a/./a. /b/a/a.
+/b/c/..//a/./a/ /b/a/a
+/b/c/..//a/./.a /b/a/.a
+/b/c/..//a/./.. /b
+/b/c/..//a/././ /b/a
+/b/c/..//a/.//a /b/a/a
+/b/c/..//a/.//. /b/a
+/b/c/..//a/./// /b/a
+/b/c/..//a//aaa /b/a/aaa
+/b/c/..//a//aa. /b/a/aa.
+/b/c/..//a//aa/ /b/a/aa
+/b/c/..//a//a.a /b/a/a.a
+/b/c/..//a//a.. /b/a/a..
+/b/c/..//a//a./ /b/a/a.
+/b/c/..//a//a/a /b/a/a/a
+/b/c/..//a//a/. /b/a/a
+/b/c/..//a//a// /b/a/a
+/b/c/..//a//.aa /b/a/.aa
+/b/c/..//a//.a. /b/a/.a.
+/b/c/..//a//.a/ /b/a/.a
+/b/c/..//a//..a /b/a/..a
+/b/c/..//a//... /b/a/...
+/b/c/..//a//../ /b
+/b/c/..//a//./a /b/a/a
+/b/c/..//a//./. /b/a
+/b/c/..//a//.// /b/a
+/b/c/..//a///aa /b/a/aa
+/b/c/..//a///a. /b/a/a.
+/b/c/..//a///a/ /b/a/a
+/b/c/..//a///.a /b/a/.a
+/b/c/..//a///.. /b
+/b/c/..//a///./ /b/a
+/b/c/..//a////a /b/a/a
+/b/c/..//a////. /b/a
+/b/c/..//a///// /b/a
+/b/c/..//.aaaaa /b/.aaaaa
+/b/c/..//.aaaa. /b/.aaaa.
+/b/c/..//.aaaa/ /b/.aaaa
+/b/c/..//.aaa.a /b/.aaa.a
+/b/c/..//.aaa.. /b/.aaa..
+/b/c/..//.aaa./ /b/.aaa.
+/b/c/..//.aaa/a /b/.aaa/a
+/b/c/..//.aaa/. /b/.aaa
+/b/c/..//.aaa// /b/.aaa
+/b/c/..//.aa.aa /b/.aa.aa
+/b/c/..//.aa.a. /b/.aa.a.
+/b/c/..//.aa.a/ /b/.aa.a
+/b/c/..//.aa..a /b/.aa..a
+/b/c/..//.aa... /b/.aa...
+/b/c/..//.aa../ /b/.aa..
+/b/c/..//.aa./a /b/.aa./a
+/b/c/..//.aa./. /b/.aa.
+/b/c/..//.aa.// /b/.aa.
+/b/c/..//.aa/aa /b/.aa/aa
+/b/c/..//.aa/a. /b/.aa/a.
+/b/c/..//.aa/a/ /b/.aa/a
+/b/c/..//.aa/.a /b/.aa/.a
+/b/c/..//.aa/.. /b
+/b/c/..//.aa/./ /b/.aa
+/b/c/..//.aa//a /b/.aa/a
+/b/c/..//.aa//. /b/.aa
+/b/c/..//.aa/// /b/.aa
+/b/c/..//.a.aaa /b/.a.aaa
+/b/c/..//.a.aa. /b/.a.aa.
+/b/c/..//.a.aa/ /b/.a.aa
+/b/c/..//.a.a.a /b/.a.a.a
+/b/c/..//.a.a.. /b/.a.a..
+/b/c/..//.a.a./ /b/.a.a.
+/b/c/..//.a.a/a /b/.a.a/a
+/b/c/..//.a.a/. /b/.a.a
+/b/c/..//.a.a// /b/.a.a
+/b/c/..//.a..aa /b/.a..aa
+/b/c/..//.a..a. /b/.a..a.
+/b/c/..//.a..a/ /b/.a..a
+/b/c/..//.a...a /b/.a...a
+/b/c/..//.a.... /b/.a....
+/b/c/..//.a.../ /b/.a...
+/b/c/..//.a../a /b/.a../a
+/b/c/..//.a../. /b/.a..
+/b/c/..//.a..// /b/.a..
+/b/c/..//.a./aa /b/.a./aa
+/b/c/..//.a./a. /b/.a./a.
+/b/c/..//.a./a/ /b/.a./a
+/b/c/..//.a./.a /b/.a./.a
+/b/c/..//.a./.. /b
+/b/c/..//.a././ /b/.a.
+/b/c/..//.a.//a /b/.a./a
+/b/c/..//.a.//. /b/.a.
+/b/c/..//.a./// /b/.a.
+/b/c/..//.a/aaa /b/.a/aaa
+/b/c/..//.a/aa. /b/.a/aa.
+/b/c/..//.a/aa/ /b/.a/aa
+/b/c/..//.a/a.a /b/.a/a.a
+/b/c/..//.a/a.. /b/.a/a..
+/b/c/..//.a/a./ /b/.a/a.
+/b/c/..//.a/a/a /b/.a/a/a
+/b/c/..//.a/a/. /b/.a/a
+/b/c/..//.a/a// /b/.a/a
+/b/c/..//.a/.aa /b/.a/.aa
+/b/c/..//.a/.a. /b/.a/.a.
+/b/c/..//.a/.a/ /b/.a/.a
+/b/c/..//.a/..a /b/.a/..a
+/b/c/..//.a/... /b/.a/...
+/b/c/..//.a/../ /b
+/b/c/..//.a/./a /b/.a/a
+/b/c/..//.a/./. /b/.a
+/b/c/..//.a/.// /b/.a
+/b/c/..//.a//aa /b/.a/aa
+/b/c/..//.a//a. /b/.a/a.
+/b/c/..//.a//a/ /b/.a/a
+/b/c/..//.a//.a /b/.a/.a
+/b/c/..//.a//.. /b
+/b/c/..//.a//./ /b/.a
+/b/c/..//.a///a /b/.a/a
+/b/c/..//.a///. /b/.a
+/b/c/..//.a//// /b/.a
+/b/c/..//..aaaa /b/..aaaa
+/b/c/..//..aaa. /b/..aaa.
+/b/c/..//..aaa/ /b/..aaa
+/b/c/..//..aa.a /b/..aa.a
+/b/c/..//..aa.. /b/..aa..
+/b/c/..//..aa./ /b/..aa.
+/b/c/..//..aa/a /b/..aa/a
+/b/c/..//..aa/. /b/..aa
+/b/c/..//..aa// /b/..aa
+/b/c/..//..a.aa /b/..a.aa
+/b/c/..//..a.a. /b/..a.a.
+/b/c/..//..a.a/ /b/..a.a
+/b/c/..//..a..a /b/..a..a
+/b/c/..//..a... /b/..a...
+/b/c/..//..a../ /b/..a..
+/b/c/..//..a./a /b/..a./a
+/b/c/..//..a./. /b/..a.
+/b/c/..//..a.// /b/..a.
+/b/c/..//..a/aa /b/..a/aa
+/b/c/..//..a/a. /b/..a/a.
+/b/c/..//..a/a/ /b/..a/a
+/b/c/..//..a/.a /b/..a/.a
+/b/c/..//..a/.. /b
+/b/c/..//..a/./ /b/..a
+/b/c/..//..a//a /b/..a/a
+/b/c/..//..a//. /b/..a
+/b/c/..//..a/// /b/..a
+/b/c/..//...aaa /b/...aaa
+/b/c/..//...aa. /b/...aa.
+/b/c/..//...aa/ /b/...aa
+/b/c/..//...a.a /b/...a.a
+/b/c/..//...a.. /b/...a..
+/b/c/..//...a./ /b/...a.
+/b/c/..//...a/a /b/...a/a
+/b/c/..//...a/. /b/...a
+/b/c/..//...a// /b/...a
+/b/c/..//....aa /b/....aa
+/b/c/..//....a. /b/....a.
+/b/c/..//....a/ /b/....a
+/b/c/..//.....a /b/.....a
+/b/c/..//...... /b/......
+/b/c/..//...../ /b/.....
+/b/c/..//..../a /b/..../a
+/b/c/..//..../. /b/....
+/b/c/..//....// /b/....
+/b/c/..//.../aa /b/.../aa
+/b/c/..//.../a. /b/.../a.
+/b/c/..//.../a/ /b/.../a
+/b/c/..//.../.a /b/.../.a
+/b/c/..//.../.. /b
+/b/c/..//..././ /b/...
+/b/c/..//...//a /b/.../a
+/b/c/..//...//. /b/...
+/b/c/..//.../// /b/...
+/b/c/..//../aaa /aaa
+/b/c/..//../aa. /aa.
+/b/c/..//../aa/ /aa
+/b/c/..//../a.a /a.a
+/b/c/..//../a.. /a..
+/b/c/..//../a./ /a.
+/b/c/..//../a/a /a/a
+/b/c/..//../a/. /a
+/b/c/..//../a// /a
+/b/c/..//../.aa /.aa
+/b/c/..//../.a. /.a.
+/b/c/..//../.a/ /.a
+/b/c/..//../..a /..a
+/b/c/..//../... /...
+/b/c/..//../../ /
+/b/c/..//.././a /a
+/b/c/..//.././. /
+/b/c/..//../.// /
+/b/c/..//..//aa /aa
+/b/c/..//..//a. /a.
+/b/c/..//..//a/ /a
+/b/c/..//..//.a /.a
+/b/c/..//..//.. /
+/b/c/..//..//./ /
+/b/c/..//..///a /a
+/b/c/..//..///. /
+/b/c/..//..//// /
+/b/c/..//./aaaa /b/aaaa
+/b/c/..//./aaa. /b/aaa.
+/b/c/..//./aaa/ /b/aaa
+/b/c/..//./aa.a /b/aa.a
+/b/c/..//./aa.. /b/aa..
+/b/c/..//./aa./ /b/aa.
+/b/c/..//./aa/a /b/aa/a
+/b/c/..//./aa/. /b/aa
+/b/c/..//./aa// /b/aa
+/b/c/..//./a.aa /b/a.aa
+/b/c/..//./a.a. /b/a.a.
+/b/c/..//./a.a/ /b/a.a
+/b/c/..//./a..a /b/a..a
+/b/c/..//./a... /b/a...
+/b/c/..//./a../ /b/a..
+/b/c/..//./a./a /b/a./a
+/b/c/..//./a./. /b/a.
+/b/c/..//./a.// /b/a.
+/b/c/..//./a/aa /b/a/aa
+/b/c/..//./a/a. /b/a/a.
+/b/c/..//./a/a/ /b/a/a
+/b/c/..//./a/.a /b/a/.a
+/b/c/..//./a/.. /b
+/b/c/..//./a/./ /b/a
+/b/c/..//./a//a /b/a/a
+/b/c/..//./a//. /b/a
+/b/c/..//./a/// /b/a
+/b/c/..//./.aaa /b/.aaa
+/b/c/..//./.aa. /b/.aa.
+/b/c/..//./.aa/ /b/.aa
+/b/c/..//./.a.a /b/.a.a
+/b/c/..//./.a.. /b/.a..
+/b/c/..//./.a./ /b/.a.
+/b/c/..//./.a/a /b/.a/a
+/b/c/..//./.a/. /b/.a
+/b/c/..//./.a// /b/.a
+/b/c/..//./..aa /b/..aa
+/b/c/..//./..a. /b/..a.
+/b/c/..//./..a/ /b/..a
+/b/c/..//./...a /b/...a
+/b/c/..//./.... /b/....
+/b/c/..//./.../ /b/...
+/b/c/..//./../a /a
+/b/c/..//./../. /
+/b/c/..//./..// /
+/b/c/..//././aa /b/aa
+/b/c/..//././a. /b/a.
+/b/c/..//././a/ /b/a
+/b/c/..//././.a /b/.a
+/b/c/..//././.. /
+/b/c/..//./././ /b
+/b/c/..//././/a /b/a
+/b/c/..//././/. /b
+/b/c/..//././// /b
+/b/c/..//.//aaa /b/aaa
+/b/c/..//.//aa. /b/aa.
+/b/c/..//.//aa/ /b/aa
+/b/c/..//.//a.a /b/a.a
+/b/c/..//.//a.. /b/a..
+/b/c/..//.//a./ /b/a.
+/b/c/..//.//a/a /b/a/a
+/b/c/..//.//a/. /b/a
+/b/c/..//.//a// /b/a
+/b/c/..//.//.aa /b/.aa
+/b/c/..//.//.a. /b/.a.
+/b/c/..//.//.a/ /b/.a
+/b/c/..//.//..a /b/..a
+/b/c/..//.//... /b/...
+/b/c/..//.//../ /
+/b/c/..//.//./a /b/a
+/b/c/..//.//./. /b
+/b/c/..//.//.// /b
+/b/c/..//.///aa /b/aa
+/b/c/..//.///a. /b/a.
+/b/c/..//.///a/ /b/a
+/b/c/..//.///.a /b/.a
+/b/c/..//.///.. /
+/b/c/..//.///./ /b
+/b/c/..//.////a /b/a
+/b/c/..//.////. /b
+/b/c/..//.///// /b
+/b/c/..///aaaaa /b/aaaaa
+/b/c/..///aaaa. /b/aaaa.
+/b/c/..///aaaa/ /b/aaaa
+/b/c/..///aaa.a /b/aaa.a
+/b/c/..///aaa.. /b/aaa..
+/b/c/..///aaa./ /b/aaa.
+/b/c/..///aaa/a /b/aaa/a
+/b/c/..///aaa/. /b/aaa
+/b/c/..///aaa// /b/aaa
+/b/c/..///aa.aa /b/aa.aa
+/b/c/..///aa.a. /b/aa.a.
+/b/c/..///aa.a/ /b/aa.a
+/b/c/..///aa..a /b/aa..a
+/b/c/..///aa... /b/aa...
+/b/c/..///aa../ /b/aa..
+/b/c/..///aa./a /b/aa./a
+/b/c/..///aa./. /b/aa.
+/b/c/..///aa.// /b/aa.
+/b/c/..///aa/aa /b/aa/aa
+/b/c/..///aa/a. /b/aa/a.
+/b/c/..///aa/a/ /b/aa/a
+/b/c/..///aa/.a /b/aa/.a
+/b/c/..///aa/.. /b
+/b/c/..///aa/./ /b/aa
+/b/c/..///aa//a /b/aa/a
+/b/c/..///aa//. /b/aa
+/b/c/..///aa/// /b/aa
+/b/c/..///a.aaa /b/a.aaa
+/b/c/..///a.aa. /b/a.aa.
+/b/c/..///a.aa/ /b/a.aa
+/b/c/..///a.a.a /b/a.a.a
+/b/c/..///a.a.. /b/a.a..
+/b/c/..///a.a./ /b/a.a.
+/b/c/..///a.a/a /b/a.a/a
+/b/c/..///a.a/. /b/a.a
+/b/c/..///a.a// /b/a.a
+/b/c/..///a..aa /b/a..aa
+/b/c/..///a..a. /b/a..a.
+/b/c/..///a..a/ /b/a..a
+/b/c/..///a...a /b/a...a
+/b/c/..///a.... /b/a....
+/b/c/..///a.../ /b/a...
+/b/c/..///a../a /b/a../a
+/b/c/..///a../. /b/a..
+/b/c/..///a..// /b/a..
+/b/c/..///a./aa /b/a./aa
+/b/c/..///a./a. /b/a./a.
+/b/c/..///a./a/ /b/a./a
+/b/c/..///a./.a /b/a./.a
+/b/c/..///a./.. /b
+/b/c/..///a././ /b/a.
+/b/c/..///a.//a /b/a./a
+/b/c/..///a.//. /b/a.
+/b/c/..///a./// /b/a.
+/b/c/..///a/aaa /b/a/aaa
+/b/c/..///a/aa. /b/a/aa.
+/b/c/..///a/aa/ /b/a/aa
+/b/c/..///a/a.a /b/a/a.a
+/b/c/..///a/a.. /b/a/a..
+/b/c/..///a/a./ /b/a/a.
+/b/c/..///a/a/a /b/a/a/a
+/b/c/..///a/a/. /b/a/a
+/b/c/..///a/a// /b/a/a
+/b/c/..///a/.aa /b/a/.aa
+/b/c/..///a/.a. /b/a/.a.
+/b/c/..///a/.a/ /b/a/.a
+/b/c/..///a/..a /b/a/..a
+/b/c/..///a/... /b/a/...
+/b/c/..///a/../ /b
+/b/c/..///a/./a /b/a/a
+/b/c/..///a/./. /b/a
+/b/c/..///a/.// /b/a
+/b/c/..///a//aa /b/a/aa
+/b/c/..///a//a. /b/a/a.
+/b/c/..///a//a/ /b/a/a
+/b/c/..///a//.a /b/a/.a
+/b/c/..///a//.. /b
+/b/c/..///a//./ /b/a
+/b/c/..///a///a /b/a/a
+/b/c/..///a///. /b/a
+/b/c/..///a//// /b/a
+/b/c/..///.aaaa /b/.aaaa
+/b/c/..///.aaa. /b/.aaa.
+/b/c/..///.aaa/ /b/.aaa
+/b/c/..///.aa.a /b/.aa.a
+/b/c/..///.aa.. /b/.aa..
+/b/c/..///.aa./ /b/.aa.
+/b/c/..///.aa/a /b/.aa/a
+/b/c/..///.aa/. /b/.aa
+/b/c/..///.aa// /b/.aa
+/b/c/..///.a.aa /b/.a.aa
+/b/c/..///.a.a. /b/.a.a.
+/b/c/..///.a.a/ /b/.a.a
+/b/c/..///.a..a /b/.a..a
+/b/c/..///.a... /b/.a...
+/b/c/..///.a../ /b/.a..
+/b/c/..///.a./a /b/.a./a
+/b/c/..///.a./. /b/.a.
+/b/c/..///.a.// /b/.a.
+/b/c/..///.a/aa /b/.a/aa
+/b/c/..///.a/a. /b/.a/a.
+/b/c/..///.a/a/ /b/.a/a
+/b/c/..///.a/.a /b/.a/.a
+/b/c/..///.a/.. /b
+/b/c/..///.a/./ /b/.a
+/b/c/..///.a//a /b/.a/a
+/b/c/..///.a//. /b/.a
+/b/c/..///.a/// /b/.a
+/b/c/..///..aaa /b/..aaa
+/b/c/..///..aa. /b/..aa.
+/b/c/..///..aa/ /b/..aa
+/b/c/..///..a.a /b/..a.a
+/b/c/..///..a.. /b/..a..
+/b/c/..///..a./ /b/..a.
+/b/c/..///..a/a /b/..a/a
+/b/c/..///..a/. /b/..a
+/b/c/..///..a// /b/..a
+/b/c/..///...aa /b/...aa
+/b/c/..///...a. /b/...a.
+/b/c/..///...a/ /b/...a
+/b/c/..///....a /b/....a
+/b/c/..///..... /b/.....
+/b/c/..///..../ /b/....
+/b/c/..///.../a /b/.../a
+/b/c/..///.../. /b/...
+/b/c/..///...// /b/...
+/b/c/..///../aa /aa
+/b/c/..///../a. /a.
+/b/c/..///../a/ /a
+/b/c/..///../.a /.a
+/b/c/..///../.. /
+/b/c/..///.././ /
+/b/c/..///..//a /a
+/b/c/..///..//. /
+/b/c/..///../// /
+/b/c/..///./aaa /b/aaa
+/b/c/..///./aa. /b/aa.
+/b/c/..///./aa/ /b/aa
+/b/c/..///./a.a /b/a.a
+/b/c/..///./a.. /b/a..
+/b/c/..///./a./ /b/a.
+/b/c/..///./a/a /b/a/a
+/b/c/..///./a/. /b/a
+/b/c/..///./a// /b/a
+/b/c/..///./.aa /b/.aa
+/b/c/..///./.a. /b/.a.
+/b/c/..///./.a/ /b/.a
+/b/c/..///./..a /b/..a
+/b/c/..///./... /b/...
+/b/c/..///./../ /
+/b/c/..///././a /b/a
+/b/c/..///././. /b
+/b/c/..///./.// /b
+/b/c/..///.//aa /b/aa
+/b/c/..///.//a. /b/a.
+/b/c/..///.//a/ /b/a
+/b/c/..///.//.a /b/.a
+/b/c/..///.//.. /
+/b/c/..///.//./ /b
+/b/c/..///.///a /b/a
+/b/c/..///.///. /b
+/b/c/..///.//// /b
+/b/c/..////aaaa /b/aaaa
+/b/c/..////aaa. /b/aaa.
+/b/c/..////aaa/ /b/aaa
+/b/c/..////aa.a /b/aa.a
+/b/c/..////aa.. /b/aa..
+/b/c/..////aa./ /b/aa.
+/b/c/..////aa/a /b/aa/a
+/b/c/..////aa/. /b/aa
+/b/c/..////aa// /b/aa
+/b/c/..////a.aa /b/a.aa
+/b/c/..////a.a. /b/a.a.
+/b/c/..////a.a/ /b/a.a
+/b/c/..////a..a /b/a..a
+/b/c/..////a... /b/a...
+/b/c/..////a../ /b/a..
+/b/c/..////a./a /b/a./a
+/b/c/..////a./. /b/a.
+/b/c/..////a.// /b/a.
+/b/c/..////a/aa /b/a/aa
+/b/c/..////a/a. /b/a/a.
+/b/c/..////a/a/ /b/a/a
+/b/c/..////a/.a /b/a/.a
+/b/c/..////a/.. /b
+/b/c/..////a/./ /b/a
+/b/c/..////a//a /b/a/a
+/b/c/..////a//. /b/a
+/b/c/..////a/// /b/a
+/b/c/..////.aaa /b/.aaa
+/b/c/..////.aa. /b/.aa.
+/b/c/..////.aa/ /b/.aa
+/b/c/..////.a.a /b/.a.a
+/b/c/..////.a.. /b/.a..
+/b/c/..////.a./ /b/.a.
+/b/c/..////.a/a /b/.a/a
+/b/c/..////.a/. /b/.a
+/b/c/..////.a// /b/.a
+/b/c/..////..aa /b/..aa
+/b/c/..////..a. /b/..a.
+/b/c/..////..a/ /b/..a
+/b/c/..////...a /b/...a
+/b/c/..////.... /b/....
+/b/c/..////.../ /b/...
+/b/c/..////../a /a
+/b/c/..////../. /
+/b/c/..////..// /
+/b/c/..////./aa /b/aa
+/b/c/..////./a. /b/a.
+/b/c/..////./a/ /b/a
+/b/c/..////./.a /b/.a
+/b/c/..////./.. /
+/b/c/..////././ /b
+/b/c/..////.//a /b/a
+/b/c/..////.//. /b
+/b/c/..////./// /b
+/b/c/../////aaa /b/aaa
+/b/c/../////aa. /b/aa.
+/b/c/../////aa/ /b/aa
+/b/c/../////a.a /b/a.a
+/b/c/../////a.. /b/a..
+/b/c/../////a./ /b/a.
+/b/c/../////a/a /b/a/a
+/b/c/../////a/. /b/a
+/b/c/../////a// /b/a
+/b/c/../////.aa /b/.aa
+/b/c/../////.a. /b/.a.
+/b/c/../////.a/ /b/.a
+/b/c/../////..a /b/..a
+/b/c/../////... /b/...
+/b/c/../////../ /
+/b/c/../////./a /b/a
+/b/c/../////./. /b
+/b/c/../////.// /b
+/b/c/..//////aa /b/aa
+/b/c/..//////a. /b/a.
+/b/c/..//////a/ /b/a
+/b/c/..//////.a /b/.a
+/b/c/..//////.. /
+/b/c/..//////./ /b
+/b/c/..///////a /b/a
+/b/c/..///////. /b
+/b/c/..//////// /b
+/b/c/./aaaaaaaa /b/c/aaaaaaaa
+/b/c/./aaaaaaa. /b/c/aaaaaaa.
+/b/c/./aaaaaaa/ /b/c/aaaaaaa
+/b/c/./aaaaaa.a /b/c/aaaaaa.a
+/b/c/./aaaaaa.. /b/c/aaaaaa..
+/b/c/./aaaaaa./ /b/c/aaaaaa.
+/b/c/./aaaaaa/a /b/c/aaaaaa/a
+/b/c/./aaaaaa/. /b/c/aaaaaa
+/b/c/./aaaaaa// /b/c/aaaaaa
+/b/c/./aaaaa.aa /b/c/aaaaa.aa
+/b/c/./aaaaa.a. /b/c/aaaaa.a.
+/b/c/./aaaaa.a/ /b/c/aaaaa.a
+/b/c/./aaaaa..a /b/c/aaaaa..a
+/b/c/./aaaaa... /b/c/aaaaa...
+/b/c/./aaaaa../ /b/c/aaaaa..
+/b/c/./aaaaa./a /b/c/aaaaa./a
+/b/c/./aaaaa./. /b/c/aaaaa.
+/b/c/./aaaaa.// /b/c/aaaaa.
+/b/c/./aaaaa/aa /b/c/aaaaa/aa
+/b/c/./aaaaa/a. /b/c/aaaaa/a.
+/b/c/./aaaaa/a/ /b/c/aaaaa/a
+/b/c/./aaaaa/.a /b/c/aaaaa/.a
+/b/c/./aaaaa/.. /b/c
+/b/c/./aaaaa/./ /b/c/aaaaa
+/b/c/./aaaaa//a /b/c/aaaaa/a
+/b/c/./aaaaa//. /b/c/aaaaa
+/b/c/./aaaaa/// /b/c/aaaaa
+/b/c/./aaaa.aaa /b/c/aaaa.aaa
+/b/c/./aaaa.aa. /b/c/aaaa.aa.
+/b/c/./aaaa.aa/ /b/c/aaaa.aa
+/b/c/./aaaa.a.a /b/c/aaaa.a.a
+/b/c/./aaaa.a.. /b/c/aaaa.a..
+/b/c/./aaaa.a./ /b/c/aaaa.a.
+/b/c/./aaaa.a/a /b/c/aaaa.a/a
+/b/c/./aaaa.a/. /b/c/aaaa.a
+/b/c/./aaaa.a// /b/c/aaaa.a
+/b/c/./aaaa..aa /b/c/aaaa..aa
+/b/c/./aaaa..a. /b/c/aaaa..a.
+/b/c/./aaaa..a/ /b/c/aaaa..a
+/b/c/./aaaa...a /b/c/aaaa...a
+/b/c/./aaaa.... /b/c/aaaa....
+/b/c/./aaaa.../ /b/c/aaaa...
+/b/c/./aaaa../a /b/c/aaaa../a
+/b/c/./aaaa../. /b/c/aaaa..
+/b/c/./aaaa..// /b/c/aaaa..
+/b/c/./aaaa./aa /b/c/aaaa./aa
+/b/c/./aaaa./a. /b/c/aaaa./a.
+/b/c/./aaaa./a/ /b/c/aaaa./a
+/b/c/./aaaa./.a /b/c/aaaa./.a
+/b/c/./aaaa./.. /b/c
+/b/c/./aaaa././ /b/c/aaaa.
+/b/c/./aaaa.//a /b/c/aaaa./a
+/b/c/./aaaa.//. /b/c/aaaa.
+/b/c/./aaaa./// /b/c/aaaa.
+/b/c/./aaaa/aaa /b/c/aaaa/aaa
+/b/c/./aaaa/aa. /b/c/aaaa/aa.
+/b/c/./aaaa/aa/ /b/c/aaaa/aa
+/b/c/./aaaa/a.a /b/c/aaaa/a.a
+/b/c/./aaaa/a.. /b/c/aaaa/a..
+/b/c/./aaaa/a./ /b/c/aaaa/a.
+/b/c/./aaaa/a/a /b/c/aaaa/a/a
+/b/c/./aaaa/a/. /b/c/aaaa/a
+/b/c/./aaaa/a// /b/c/aaaa/a
+/b/c/./aaaa/.aa /b/c/aaaa/.aa
+/b/c/./aaaa/.a. /b/c/aaaa/.a.
+/b/c/./aaaa/.a/ /b/c/aaaa/.a
+/b/c/./aaaa/..a /b/c/aaaa/..a
+/b/c/./aaaa/... /b/c/aaaa/...
+/b/c/./aaaa/../ /b/c
+/b/c/./aaaa/./a /b/c/aaaa/a
+/b/c/./aaaa/./. /b/c/aaaa
+/b/c/./aaaa/.// /b/c/aaaa
+/b/c/./aaaa//aa /b/c/aaaa/aa
+/b/c/./aaaa//a. /b/c/aaaa/a.
+/b/c/./aaaa//a/ /b/c/aaaa/a
+/b/c/./aaaa//.a /b/c/aaaa/.a
+/b/c/./aaaa//.. /b/c
+/b/c/./aaaa//./ /b/c/aaaa
+/b/c/./aaaa///a /b/c/aaaa/a
+/b/c/./aaaa///. /b/c/aaaa
+/b/c/./aaaa//// /b/c/aaaa
+/b/c/./aaa.aaaa /b/c/aaa.aaaa
+/b/c/./aaa.aaa. /b/c/aaa.aaa.
+/b/c/./aaa.aaa/ /b/c/aaa.aaa
+/b/c/./aaa.aa.a /b/c/aaa.aa.a
+/b/c/./aaa.aa.. /b/c/aaa.aa..
+/b/c/./aaa.aa./ /b/c/aaa.aa.
+/b/c/./aaa.aa/a /b/c/aaa.aa/a
+/b/c/./aaa.aa/. /b/c/aaa.aa
+/b/c/./aaa.aa// /b/c/aaa.aa
+/b/c/./aaa.a.aa /b/c/aaa.a.aa
+/b/c/./aaa.a.a. /b/c/aaa.a.a.
+/b/c/./aaa.a.a/ /b/c/aaa.a.a
+/b/c/./aaa.a..a /b/c/aaa.a..a
+/b/c/./aaa.a... /b/c/aaa.a...
+/b/c/./aaa.a../ /b/c/aaa.a..
+/b/c/./aaa.a./a /b/c/aaa.a./a
+/b/c/./aaa.a./. /b/c/aaa.a.
+/b/c/./aaa.a.// /b/c/aaa.a.
+/b/c/./aaa.a/aa /b/c/aaa.a/aa
+/b/c/./aaa.a/a. /b/c/aaa.a/a.
+/b/c/./aaa.a/a/ /b/c/aaa.a/a
+/b/c/./aaa.a/.a /b/c/aaa.a/.a
+/b/c/./aaa.a/.. /b/c
+/b/c/./aaa.a/./ /b/c/aaa.a
+/b/c/./aaa.a//a /b/c/aaa.a/a
+/b/c/./aaa.a//. /b/c/aaa.a
+/b/c/./aaa.a/// /b/c/aaa.a
+/b/c/./aaa..aaa /b/c/aaa..aaa
+/b/c/./aaa..aa. /b/c/aaa..aa.
+/b/c/./aaa..aa/ /b/c/aaa..aa
+/b/c/./aaa..a.a /b/c/aaa..a.a
+/b/c/./aaa..a.. /b/c/aaa..a..
+/b/c/./aaa..a./ /b/c/aaa..a.
+/b/c/./aaa..a/a /b/c/aaa..a/a
+/b/c/./aaa..a/. /b/c/aaa..a
+/b/c/./aaa..a// /b/c/aaa..a
+/b/c/./aaa...aa /b/c/aaa...aa
+/b/c/./aaa...a. /b/c/aaa...a.
+/b/c/./aaa...a/ /b/c/aaa...a
+/b/c/./aaa....a /b/c/aaa....a
+/b/c/./aaa..... /b/c/aaa.....
+/b/c/./aaa..../ /b/c/aaa....
+/b/c/./aaa.../a /b/c/aaa.../a
+/b/c/./aaa.../. /b/c/aaa...
+/b/c/./aaa...// /b/c/aaa...
+/b/c/./aaa../aa /b/c/aaa../aa
+/b/c/./aaa../a. /b/c/aaa../a.
+/b/c/./aaa../a/ /b/c/aaa../a
+/b/c/./aaa../.a /b/c/aaa../.a
+/b/c/./aaa../.. /b/c
+/b/c/./aaa.././ /b/c/aaa..
+/b/c/./aaa..//a /b/c/aaa../a
+/b/c/./aaa..//. /b/c/aaa..
+/b/c/./aaa../// /b/c/aaa..
+/b/c/./aaa./aaa /b/c/aaa./aaa
+/b/c/./aaa./aa. /b/c/aaa./aa.
+/b/c/./aaa./aa/ /b/c/aaa./aa
+/b/c/./aaa./a.a /b/c/aaa./a.a
+/b/c/./aaa./a.. /b/c/aaa./a..
+/b/c/./aaa./a./ /b/c/aaa./a.
+/b/c/./aaa./a/a /b/c/aaa./a/a
+/b/c/./aaa./a/. /b/c/aaa./a
+/b/c/./aaa./a// /b/c/aaa./a
+/b/c/./aaa./.aa /b/c/aaa./.aa
+/b/c/./aaa./.a. /b/c/aaa./.a.
+/b/c/./aaa./.a/ /b/c/aaa./.a
+/b/c/./aaa./..a /b/c/aaa./..a
+/b/c/./aaa./... /b/c/aaa./...
+/b/c/./aaa./../ /b/c
+/b/c/./aaa././a /b/c/aaa./a
+/b/c/./aaa././. /b/c/aaa.
+/b/c/./aaa./.// /b/c/aaa.
+/b/c/./aaa.//aa /b/c/aaa./aa
+/b/c/./aaa.//a. /b/c/aaa./a.
+/b/c/./aaa.//a/ /b/c/aaa./a
+/b/c/./aaa.//.a /b/c/aaa./.a
+/b/c/./aaa.//.. /b/c
+/b/c/./aaa.//./ /b/c/aaa.
+/b/c/./aaa.///a /b/c/aaa./a
+/b/c/./aaa.///. /b/c/aaa.
+/b/c/./aaa.//// /b/c/aaa.
+/b/c/./aaa/aaaa /b/c/aaa/aaaa
+/b/c/./aaa/aaa. /b/c/aaa/aaa.
+/b/c/./aaa/aaa/ /b/c/aaa/aaa
+/b/c/./aaa/aa.a /b/c/aaa/aa.a
+/b/c/./aaa/aa.. /b/c/aaa/aa..
+/b/c/./aaa/aa./ /b/c/aaa/aa.
+/b/c/./aaa/aa/a /b/c/aaa/aa/a
+/b/c/./aaa/aa/. /b/c/aaa/aa
+/b/c/./aaa/aa// /b/c/aaa/aa
+/b/c/./aaa/a.aa /b/c/aaa/a.aa
+/b/c/./aaa/a.a. /b/c/aaa/a.a.
+/b/c/./aaa/a.a/ /b/c/aaa/a.a
+/b/c/./aaa/a..a /b/c/aaa/a..a
+/b/c/./aaa/a... /b/c/aaa/a...
+/b/c/./aaa/a../ /b/c/aaa/a..
+/b/c/./aaa/a./a /b/c/aaa/a./a
+/b/c/./aaa/a./. /b/c/aaa/a.
+/b/c/./aaa/a.// /b/c/aaa/a.
+/b/c/./aaa/a/aa /b/c/aaa/a/aa
+/b/c/./aaa/a/a. /b/c/aaa/a/a.
+/b/c/./aaa/a/a/ /b/c/aaa/a/a
+/b/c/./aaa/a/.a /b/c/aaa/a/.a
+/b/c/./aaa/a/.. /b/c/aaa
+/b/c/./aaa/a/./ /b/c/aaa/a
+/b/c/./aaa/a//a /b/c/aaa/a/a
+/b/c/./aaa/a//. /b/c/aaa/a
+/b/c/./aaa/a/// /b/c/aaa/a
+/b/c/./aaa/.aaa /b/c/aaa/.aaa
+/b/c/./aaa/.aa. /b/c/aaa/.aa.
+/b/c/./aaa/.aa/ /b/c/aaa/.aa
+/b/c/./aaa/.a.a /b/c/aaa/.a.a
+/b/c/./aaa/.a.. /b/c/aaa/.a..
+/b/c/./aaa/.a./ /b/c/aaa/.a.
+/b/c/./aaa/.a/a /b/c/aaa/.a/a
+/b/c/./aaa/.a/. /b/c/aaa/.a
+/b/c/./aaa/.a// /b/c/aaa/.a
+/b/c/./aaa/..aa /b/c/aaa/..aa
+/b/c/./aaa/..a. /b/c/aaa/..a.
+/b/c/./aaa/..a/ /b/c/aaa/..a
+/b/c/./aaa/...a /b/c/aaa/...a
+/b/c/./aaa/.... /b/c/aaa/....
+/b/c/./aaa/.../ /b/c/aaa/...
+/b/c/./aaa/../a /b/c/a
+/b/c/./aaa/../. /b/c
+/b/c/./aaa/..// /b/c
+/b/c/./aaa/./aa /b/c/aaa/aa
+/b/c/./aaa/./a. /b/c/aaa/a.
+/b/c/./aaa/./a/ /b/c/aaa/a
+/b/c/./aaa/./.a /b/c/aaa/.a
+/b/c/./aaa/./.. /b/c
+/b/c/./aaa/././ /b/c/aaa
+/b/c/./aaa/.//a /b/c/aaa/a
+/b/c/./aaa/.//. /b/c/aaa
+/b/c/./aaa/./// /b/c/aaa
+/b/c/./aaa//aaa /b/c/aaa/aaa
+/b/c/./aaa//aa. /b/c/aaa/aa.
+/b/c/./aaa//aa/ /b/c/aaa/aa
+/b/c/./aaa//a.a /b/c/aaa/a.a
+/b/c/./aaa//a.. /b/c/aaa/a..
+/b/c/./aaa//a./ /b/c/aaa/a.
+/b/c/./aaa//a/a /b/c/aaa/a/a
+/b/c/./aaa//a/. /b/c/aaa/a
+/b/c/./aaa//a// /b/c/aaa/a
+/b/c/./aaa//.aa /b/c/aaa/.aa
+/b/c/./aaa//.a. /b/c/aaa/.a.
+/b/c/./aaa//.a/ /b/c/aaa/.a
+/b/c/./aaa//..a /b/c/aaa/..a
+/b/c/./aaa//... /b/c/aaa/...
+/b/c/./aaa//../ /b/c
+/b/c/./aaa//./a /b/c/aaa/a
+/b/c/./aaa//./. /b/c/aaa
+/b/c/./aaa//.// /b/c/aaa
+/b/c/./aaa///aa /b/c/aaa/aa
+/b/c/./aaa///a. /b/c/aaa/a.
+/b/c/./aaa///a/ /b/c/aaa/a
+/b/c/./aaa///.a /b/c/aaa/.a
+/b/c/./aaa///.. /b/c
+/b/c/./aaa///./ /b/c/aaa
+/b/c/./aaa////a /b/c/aaa/a
+/b/c/./aaa////. /b/c/aaa
+/b/c/./aaa///// /b/c/aaa
+/b/c/./aa.aaaaa /b/c/aa.aaaaa
+/b/c/./aa.aaaa. /b/c/aa.aaaa.
+/b/c/./aa.aaaa/ /b/c/aa.aaaa
+/b/c/./aa.aaa.a /b/c/aa.aaa.a
+/b/c/./aa.aaa.. /b/c/aa.aaa..
+/b/c/./aa.aaa./ /b/c/aa.aaa.
+/b/c/./aa.aaa/a /b/c/aa.aaa/a
+/b/c/./aa.aaa/. /b/c/aa.aaa
+/b/c/./aa.aaa// /b/c/aa.aaa
+/b/c/./aa.aa.aa /b/c/aa.aa.aa
+/b/c/./aa.aa.a. /b/c/aa.aa.a.
+/b/c/./aa.aa.a/ /b/c/aa.aa.a
+/b/c/./aa.aa..a /b/c/aa.aa..a
+/b/c/./aa.aa... /b/c/aa.aa...
+/b/c/./aa.aa../ /b/c/aa.aa..
+/b/c/./aa.aa./a /b/c/aa.aa./a
+/b/c/./aa.aa./. /b/c/aa.aa.
+/b/c/./aa.aa.// /b/c/aa.aa.
+/b/c/./aa.aa/aa /b/c/aa.aa/aa
+/b/c/./aa.aa/a. /b/c/aa.aa/a.
+/b/c/./aa.aa/a/ /b/c/aa.aa/a
+/b/c/./aa.aa/.a /b/c/aa.aa/.a
+/b/c/./aa.aa/.. /b/c
+/b/c/./aa.aa/./ /b/c/aa.aa
+/b/c/./aa.aa//a /b/c/aa.aa/a
+/b/c/./aa.aa//. /b/c/aa.aa
+/b/c/./aa.aa/// /b/c/aa.aa
+/b/c/./aa.a.aaa /b/c/aa.a.aaa
+/b/c/./aa.a.aa. /b/c/aa.a.aa.
+/b/c/./aa.a.aa/ /b/c/aa.a.aa
+/b/c/./aa.a.a.a /b/c/aa.a.a.a
+/b/c/./aa.a.a.. /b/c/aa.a.a..
+/b/c/./aa.a.a./ /b/c/aa.a.a.
+/b/c/./aa.a.a/a /b/c/aa.a.a/a
+/b/c/./aa.a.a/. /b/c/aa.a.a
+/b/c/./aa.a.a// /b/c/aa.a.a
+/b/c/./aa.a..aa /b/c/aa.a..aa
+/b/c/./aa.a..a. /b/c/aa.a..a.
+/b/c/./aa.a..a/ /b/c/aa.a..a
+/b/c/./aa.a...a /b/c/aa.a...a
+/b/c/./aa.a.... /b/c/aa.a....
+/b/c/./aa.a.../ /b/c/aa.a...
+/b/c/./aa.a../a /b/c/aa.a../a
+/b/c/./aa.a../. /b/c/aa.a..
+/b/c/./aa.a..// /b/c/aa.a..
+/b/c/./aa.a./aa /b/c/aa.a./aa
+/b/c/./aa.a./a. /b/c/aa.a./a.
+/b/c/./aa.a./a/ /b/c/aa.a./a
+/b/c/./aa.a./.a /b/c/aa.a./.a
+/b/c/./aa.a./.. /b/c
+/b/c/./aa.a././ /b/c/aa.a.
+/b/c/./aa.a.//a /b/c/aa.a./a
+/b/c/./aa.a.//. /b/c/aa.a.
+/b/c/./aa.a./// /b/c/aa.a.
+/b/c/./aa.a/aaa /b/c/aa.a/aaa
+/b/c/./aa.a/aa. /b/c/aa.a/aa.
+/b/c/./aa.a/aa/ /b/c/aa.a/aa
+/b/c/./aa.a/a.a /b/c/aa.a/a.a
+/b/c/./aa.a/a.. /b/c/aa.a/a..
+/b/c/./aa.a/a./ /b/c/aa.a/a.
+/b/c/./aa.a/a/a /b/c/aa.a/a/a
+/b/c/./aa.a/a/. /b/c/aa.a/a
+/b/c/./aa.a/a// /b/c/aa.a/a
+/b/c/./aa.a/.aa /b/c/aa.a/.aa
+/b/c/./aa.a/.a. /b/c/aa.a/.a.
+/b/c/./aa.a/.a/ /b/c/aa.a/.a
+/b/c/./aa.a/..a /b/c/aa.a/..a
+/b/c/./aa.a/... /b/c/aa.a/...
+/b/c/./aa.a/../ /b/c
+/b/c/./aa.a/./a /b/c/aa.a/a
+/b/c/./aa.a/./. /b/c/aa.a
+/b/c/./aa.a/.// /b/c/aa.a
+/b/c/./aa.a//aa /b/c/aa.a/aa
+/b/c/./aa.a//a. /b/c/aa.a/a.
+/b/c/./aa.a//a/ /b/c/aa.a/a
+/b/c/./aa.a//.a /b/c/aa.a/.a
+/b/c/./aa.a//.. /b/c
+/b/c/./aa.a//./ /b/c/aa.a
+/b/c/./aa.a///a /b/c/aa.a/a
+/b/c/./aa.a///. /b/c/aa.a
+/b/c/./aa.a//// /b/c/aa.a
+/b/c/./aa..aaaa /b/c/aa..aaaa
+/b/c/./aa..aaa. /b/c/aa..aaa.
+/b/c/./aa..aaa/ /b/c/aa..aaa
+/b/c/./aa..aa.a /b/c/aa..aa.a
+/b/c/./aa..aa.. /b/c/aa..aa..
+/b/c/./aa..aa./ /b/c/aa..aa.
+/b/c/./aa..aa/a /b/c/aa..aa/a
+/b/c/./aa..aa/. /b/c/aa..aa
+/b/c/./aa..aa// /b/c/aa..aa
+/b/c/./aa..a.aa /b/c/aa..a.aa
+/b/c/./aa..a.a. /b/c/aa..a.a.
+/b/c/./aa..a.a/ /b/c/aa..a.a
+/b/c/./aa..a..a /b/c/aa..a..a
+/b/c/./aa..a... /b/c/aa..a...
+/b/c/./aa..a../ /b/c/aa..a..
+/b/c/./aa..a./a /b/c/aa..a./a
+/b/c/./aa..a./. /b/c/aa..a.
+/b/c/./aa..a.// /b/c/aa..a.
+/b/c/./aa..a/aa /b/c/aa..a/aa
+/b/c/./aa..a/a. /b/c/aa..a/a.
+/b/c/./aa..a/a/ /b/c/aa..a/a
+/b/c/./aa..a/.a /b/c/aa..a/.a
+/b/c/./aa..a/.. /b/c
+/b/c/./aa..a/./ /b/c/aa..a
+/b/c/./aa..a//a /b/c/aa..a/a
+/b/c/./aa..a//. /b/c/aa..a
+/b/c/./aa..a/// /b/c/aa..a
+/b/c/./aa...aaa /b/c/aa...aaa
+/b/c/./aa...aa. /b/c/aa...aa.
+/b/c/./aa...aa/ /b/c/aa...aa
+/b/c/./aa...a.a /b/c/aa...a.a
+/b/c/./aa...a.. /b/c/aa...a..
+/b/c/./aa...a./ /b/c/aa...a.
+/b/c/./aa...a/a /b/c/aa...a/a
+/b/c/./aa...a/. /b/c/aa...a
+/b/c/./aa...a// /b/c/aa...a
+/b/c/./aa....aa /b/c/aa....aa
+/b/c/./aa....a. /b/c/aa....a.
+/b/c/./aa....a/ /b/c/aa....a
+/b/c/./aa.....a /b/c/aa.....a
+/b/c/./aa...... /b/c/aa......
+/b/c/./aa...../ /b/c/aa.....
+/b/c/./aa..../a /b/c/aa..../a
+/b/c/./aa..../. /b/c/aa....
+/b/c/./aa....// /b/c/aa....
+/b/c/./aa.../aa /b/c/aa.../aa
+/b/c/./aa.../a. /b/c/aa.../a.
+/b/c/./aa.../a/ /b/c/aa.../a
+/b/c/./aa.../.a /b/c/aa.../.a
+/b/c/./aa.../.. /b/c
+/b/c/./aa..././ /b/c/aa...
+/b/c/./aa...//a /b/c/aa.../a
+/b/c/./aa...//. /b/c/aa...
+/b/c/./aa.../// /b/c/aa...
+/b/c/./aa../aaa /b/c/aa../aaa
+/b/c/./aa../aa. /b/c/aa../aa.
+/b/c/./aa../aa/ /b/c/aa../aa
+/b/c/./aa../a.a /b/c/aa../a.a
+/b/c/./aa../a.. /b/c/aa../a..
+/b/c/./aa../a./ /b/c/aa../a.
+/b/c/./aa../a/a /b/c/aa../a/a
+/b/c/./aa../a/. /b/c/aa../a
+/b/c/./aa../a// /b/c/aa../a
+/b/c/./aa../.aa /b/c/aa../.aa
+/b/c/./aa../.a. /b/c/aa../.a.
+/b/c/./aa../.a/ /b/c/aa../.a
+/b/c/./aa../..a /b/c/aa../..a
+/b/c/./aa../... /b/c/aa../...
+/b/c/./aa../../ /b/c
+/b/c/./aa.././a /b/c/aa../a
+/b/c/./aa.././. /b/c/aa..
+/b/c/./aa../.// /b/c/aa..
+/b/c/./aa..//aa /b/c/aa../aa
+/b/c/./aa..//a. /b/c/aa../a.
+/b/c/./aa..//a/ /b/c/aa../a
+/b/c/./aa..//.a /b/c/aa../.a
+/b/c/./aa..//.. /b/c
+/b/c/./aa..//./ /b/c/aa..
+/b/c/./aa..///a /b/c/aa../a
+/b/c/./aa..///. /b/c/aa..
+/b/c/./aa..//// /b/c/aa..
+/b/c/./aa./aaaa /b/c/aa./aaaa
+/b/c/./aa./aaa. /b/c/aa./aaa.
+/b/c/./aa./aaa/ /b/c/aa./aaa
+/b/c/./aa./aa.a /b/c/aa./aa.a
+/b/c/./aa./aa.. /b/c/aa./aa..
+/b/c/./aa./aa./ /b/c/aa./aa.
+/b/c/./aa./aa/a /b/c/aa./aa/a
+/b/c/./aa./aa/. /b/c/aa./aa
+/b/c/./aa./aa// /b/c/aa./aa
+/b/c/./aa./a.aa /b/c/aa./a.aa
+/b/c/./aa./a.a. /b/c/aa./a.a.
+/b/c/./aa./a.a/ /b/c/aa./a.a
+/b/c/./aa./a..a /b/c/aa./a..a
+/b/c/./aa./a... /b/c/aa./a...
+/b/c/./aa./a../ /b/c/aa./a..
+/b/c/./aa./a./a /b/c/aa./a./a
+/b/c/./aa./a./. /b/c/aa./a.
+/b/c/./aa./a.// /b/c/aa./a.
+/b/c/./aa./a/aa /b/c/aa./a/aa
+/b/c/./aa./a/a. /b/c/aa./a/a.
+/b/c/./aa./a/a/ /b/c/aa./a/a
+/b/c/./aa./a/.a /b/c/aa./a/.a
+/b/c/./aa./a/.. /b/c/aa.
+/b/c/./aa./a/./ /b/c/aa./a
+/b/c/./aa./a//a /b/c/aa./a/a
+/b/c/./aa./a//. /b/c/aa./a
+/b/c/./aa./a/// /b/c/aa./a
+/b/c/./aa./.aaa /b/c/aa./.aaa
+/b/c/./aa./.aa. /b/c/aa./.aa.
+/b/c/./aa./.aa/ /b/c/aa./.aa
+/b/c/./aa./.a.a /b/c/aa./.a.a
+/b/c/./aa./.a.. /b/c/aa./.a..
+/b/c/./aa./.a./ /b/c/aa./.a.
+/b/c/./aa./.a/a /b/c/aa./.a/a
+/b/c/./aa./.a/. /b/c/aa./.a
+/b/c/./aa./.a// /b/c/aa./.a
+/b/c/./aa./..aa /b/c/aa./..aa
+/b/c/./aa./..a. /b/c/aa./..a.
+/b/c/./aa./..a/ /b/c/aa./..a
+/b/c/./aa./...a /b/c/aa./...a
+/b/c/./aa./.... /b/c/aa./....
+/b/c/./aa./.../ /b/c/aa./...
+/b/c/./aa./../a /b/c/a
+/b/c/./aa./../. /b/c
+/b/c/./aa./..// /b/c
+/b/c/./aa././aa /b/c/aa./aa
+/b/c/./aa././a. /b/c/aa./a.
+/b/c/./aa././a/ /b/c/aa./a
+/b/c/./aa././.a /b/c/aa./.a
+/b/c/./aa././.. /b/c
+/b/c/./aa./././ /b/c/aa.
+/b/c/./aa././/a /b/c/aa./a
+/b/c/./aa././/. /b/c/aa.
+/b/c/./aa././// /b/c/aa.
+/b/c/./aa.//aaa /b/c/aa./aaa
+/b/c/./aa.//aa. /b/c/aa./aa.
+/b/c/./aa.//aa/ /b/c/aa./aa
+/b/c/./aa.//a.a /b/c/aa./a.a
+/b/c/./aa.//a.. /b/c/aa./a..
+/b/c/./aa.//a./ /b/c/aa./a.
+/b/c/./aa.//a/a /b/c/aa./a/a
+/b/c/./aa.//a/. /b/c/aa./a
+/b/c/./aa.//a// /b/c/aa./a
+/b/c/./aa.//.aa /b/c/aa./.aa
+/b/c/./aa.//.a. /b/c/aa./.a.
+/b/c/./aa.//.a/ /b/c/aa./.a
+/b/c/./aa.//..a /b/c/aa./..a
+/b/c/./aa.//... /b/c/aa./...
+/b/c/./aa.//../ /b/c
+/b/c/./aa.//./a /b/c/aa./a
+/b/c/./aa.//./. /b/c/aa.
+/b/c/./aa.//.// /b/c/aa.
+/b/c/./aa.///aa /b/c/aa./aa
+/b/c/./aa.///a. /b/c/aa./a.
+/b/c/./aa.///a/ /b/c/aa./a
+/b/c/./aa.///.a /b/c/aa./.a
+/b/c/./aa.///.. /b/c
+/b/c/./aa.///./ /b/c/aa.
+/b/c/./aa.////a /b/c/aa./a
+/b/c/./aa.////. /b/c/aa.
+/b/c/./aa.///// /b/c/aa.
+/b/c/./aa/aaaaa /b/c/aa/aaaaa
+/b/c/./aa/aaaa. /b/c/aa/aaaa.
+/b/c/./aa/aaaa/ /b/c/aa/aaaa
+/b/c/./aa/aaa.a /b/c/aa/aaa.a
+/b/c/./aa/aaa.. /b/c/aa/aaa..
+/b/c/./aa/aaa./ /b/c/aa/aaa.
+/b/c/./aa/aaa/a /b/c/aa/aaa/a
+/b/c/./aa/aaa/. /b/c/aa/aaa
+/b/c/./aa/aaa// /b/c/aa/aaa
+/b/c/./aa/aa.aa /b/c/aa/aa.aa
+/b/c/./aa/aa.a. /b/c/aa/aa.a.
+/b/c/./aa/aa.a/ /b/c/aa/aa.a
+/b/c/./aa/aa..a /b/c/aa/aa..a
+/b/c/./aa/aa... /b/c/aa/aa...
+/b/c/./aa/aa../ /b/c/aa/aa..
+/b/c/./aa/aa./a /b/c/aa/aa./a
+/b/c/./aa/aa./. /b/c/aa/aa.
+/b/c/./aa/aa.// /b/c/aa/aa.
+/b/c/./aa/aa/aa /b/c/aa/aa/aa
+/b/c/./aa/aa/a. /b/c/aa/aa/a.
+/b/c/./aa/aa/a/ /b/c/aa/aa/a
+/b/c/./aa/aa/.a /b/c/aa/aa/.a
+/b/c/./aa/aa/.. /b/c/aa
+/b/c/./aa/aa/./ /b/c/aa/aa
+/b/c/./aa/aa//a /b/c/aa/aa/a
+/b/c/./aa/aa//. /b/c/aa/aa
+/b/c/./aa/aa/// /b/c/aa/aa
+/b/c/./aa/a.aaa /b/c/aa/a.aaa
+/b/c/./aa/a.aa. /b/c/aa/a.aa.
+/b/c/./aa/a.aa/ /b/c/aa/a.aa
+/b/c/./aa/a.a.a /b/c/aa/a.a.a
+/b/c/./aa/a.a.. /b/c/aa/a.a..
+/b/c/./aa/a.a./ /b/c/aa/a.a.
+/b/c/./aa/a.a/a /b/c/aa/a.a/a
+/b/c/./aa/a.a/. /b/c/aa/a.a
+/b/c/./aa/a.a// /b/c/aa/a.a
+/b/c/./aa/a..aa /b/c/aa/a..aa
+/b/c/./aa/a..a. /b/c/aa/a..a.
+/b/c/./aa/a..a/ /b/c/aa/a..a
+/b/c/./aa/a...a /b/c/aa/a...a
+/b/c/./aa/a.... /b/c/aa/a....
+/b/c/./aa/a.../ /b/c/aa/a...
+/b/c/./aa/a../a /b/c/aa/a../a
+/b/c/./aa/a../. /b/c/aa/a..
+/b/c/./aa/a..// /b/c/aa/a..
+/b/c/./aa/a./aa /b/c/aa/a./aa
+/b/c/./aa/a./a. /b/c/aa/a./a.
+/b/c/./aa/a./a/ /b/c/aa/a./a
+/b/c/./aa/a./.a /b/c/aa/a./.a
+/b/c/./aa/a./.. /b/c/aa
+/b/c/./aa/a././ /b/c/aa/a.
+/b/c/./aa/a.//a /b/c/aa/a./a
+/b/c/./aa/a.//. /b/c/aa/a.
+/b/c/./aa/a./// /b/c/aa/a.
+/b/c/./aa/a/aaa /b/c/aa/a/aaa
+/b/c/./aa/a/aa. /b/c/aa/a/aa.
+/b/c/./aa/a/aa/ /b/c/aa/a/aa
+/b/c/./aa/a/a.a /b/c/aa/a/a.a
+/b/c/./aa/a/a.. /b/c/aa/a/a..
+/b/c/./aa/a/a./ /b/c/aa/a/a.
+/b/c/./aa/a/a/a /b/c/aa/a/a/a
+/b/c/./aa/a/a/. /b/c/aa/a/a
+/b/c/./aa/a/a// /b/c/aa/a/a
+/b/c/./aa/a/.aa /b/c/aa/a/.aa
+/b/c/./aa/a/.a. /b/c/aa/a/.a.
+/b/c/./aa/a/.a/ /b/c/aa/a/.a
+/b/c/./aa/a/..a /b/c/aa/a/..a
+/b/c/./aa/a/... /b/c/aa/a/...
+/b/c/./aa/a/../ /b/c/aa
+/b/c/./aa/a/./a /b/c/aa/a/a
+/b/c/./aa/a/./. /b/c/aa/a
+/b/c/./aa/a/.// /b/c/aa/a
+/b/c/./aa/a//aa /b/c/aa/a/aa
+/b/c/./aa/a//a. /b/c/aa/a/a.
+/b/c/./aa/a//a/ /b/c/aa/a/a
+/b/c/./aa/a//.a /b/c/aa/a/.a
+/b/c/./aa/a//.. /b/c/aa
+/b/c/./aa/a//./ /b/c/aa/a
+/b/c/./aa/a///a /b/c/aa/a/a
+/b/c/./aa/a///. /b/c/aa/a
+/b/c/./aa/a//// /b/c/aa/a
+/b/c/./aa/.aaaa /b/c/aa/.aaaa
+/b/c/./aa/.aaa. /b/c/aa/.aaa.
+/b/c/./aa/.aaa/ /b/c/aa/.aaa
+/b/c/./aa/.aa.a /b/c/aa/.aa.a
+/b/c/./aa/.aa.. /b/c/aa/.aa..
+/b/c/./aa/.aa./ /b/c/aa/.aa.
+/b/c/./aa/.aa/a /b/c/aa/.aa/a
+/b/c/./aa/.aa/. /b/c/aa/.aa
+/b/c/./aa/.aa// /b/c/aa/.aa
+/b/c/./aa/.a.aa /b/c/aa/.a.aa
+/b/c/./aa/.a.a. /b/c/aa/.a.a.
+/b/c/./aa/.a.a/ /b/c/aa/.a.a
+/b/c/./aa/.a..a /b/c/aa/.a..a
+/b/c/./aa/.a... /b/c/aa/.a...
+/b/c/./aa/.a../ /b/c/aa/.a..
+/b/c/./aa/.a./a /b/c/aa/.a./a
+/b/c/./aa/.a./. /b/c/aa/.a.
+/b/c/./aa/.a.// /b/c/aa/.a.
+/b/c/./aa/.a/aa /b/c/aa/.a/aa
+/b/c/./aa/.a/a. /b/c/aa/.a/a.
+/b/c/./aa/.a/a/ /b/c/aa/.a/a
+/b/c/./aa/.a/.a /b/c/aa/.a/.a
+/b/c/./aa/.a/.. /b/c/aa
+/b/c/./aa/.a/./ /b/c/aa/.a
+/b/c/./aa/.a//a /b/c/aa/.a/a
+/b/c/./aa/.a//. /b/c/aa/.a
+/b/c/./aa/.a/// /b/c/aa/.a
+/b/c/./aa/..aaa /b/c/aa/..aaa
+/b/c/./aa/..aa. /b/c/aa/..aa.
+/b/c/./aa/..aa/ /b/c/aa/..aa
+/b/c/./aa/..a.a /b/c/aa/..a.a
+/b/c/./aa/..a.. /b/c/aa/..a..
+/b/c/./aa/..a./ /b/c/aa/..a.
+/b/c/./aa/..a/a /b/c/aa/..a/a
+/b/c/./aa/..a/. /b/c/aa/..a
+/b/c/./aa/..a// /b/c/aa/..a
+/b/c/./aa/...aa /b/c/aa/...aa
+/b/c/./aa/...a. /b/c/aa/...a.
+/b/c/./aa/...a/ /b/c/aa/...a
+/b/c/./aa/....a /b/c/aa/....a
+/b/c/./aa/..... /b/c/aa/.....
+/b/c/./aa/..../ /b/c/aa/....
+/b/c/./aa/.../a /b/c/aa/.../a
+/b/c/./aa/.../. /b/c/aa/...
+/b/c/./aa/...// /b/c/aa/...
+/b/c/./aa/../aa /b/c/aa
+/b/c/./aa/../a. /b/c/a.
+/b/c/./aa/../a/ /b/c/a
+/b/c/./aa/../.a /b/c/.a
+/b/c/./aa/../.. /b
+/b/c/./aa/.././ /b/c
+/b/c/./aa/..//a /b/c/a
+/b/c/./aa/..//. /b/c
+/b/c/./aa/../// /b/c
+/b/c/./aa/./aaa /b/c/aa/aaa
+/b/c/./aa/./aa. /b/c/aa/aa.
+/b/c/./aa/./aa/ /b/c/aa/aa
+/b/c/./aa/./a.a /b/c/aa/a.a
+/b/c/./aa/./a.. /b/c/aa/a..
+/b/c/./aa/./a./ /b/c/aa/a.
+/b/c/./aa/./a/a /b/c/aa/a/a
+/b/c/./aa/./a/. /b/c/aa/a
+/b/c/./aa/./a// /b/c/aa/a
+/b/c/./aa/./.aa /b/c/aa/.aa
+/b/c/./aa/./.a. /b/c/aa/.a.
+/b/c/./aa/./.a/ /b/c/aa/.a
+/b/c/./aa/./..a /b/c/aa/..a
+/b/c/./aa/./... /b/c/aa/...
+/b/c/./aa/./../ /b/c
+/b/c/./aa/././a /b/c/aa/a
+/b/c/./aa/././. /b/c/aa
+/b/c/./aa/./.// /b/c/aa
+/b/c/./aa/.//aa /b/c/aa/aa
+/b/c/./aa/.//a. /b/c/aa/a.
+/b/c/./aa/.//a/ /b/c/aa/a
+/b/c/./aa/.//.a /b/c/aa/.a
+/b/c/./aa/.//.. /b/c
+/b/c/./aa/.//./ /b/c/aa
+/b/c/./aa/.///a /b/c/aa/a
+/b/c/./aa/.///. /b/c/aa
+/b/c/./aa/.//// /b/c/aa
+/b/c/./aa//aaaa /b/c/aa/aaaa
+/b/c/./aa//aaa. /b/c/aa/aaa.
+/b/c/./aa//aaa/ /b/c/aa/aaa
+/b/c/./aa//aa.a /b/c/aa/aa.a
+/b/c/./aa//aa.. /b/c/aa/aa..
+/b/c/./aa//aa./ /b/c/aa/aa.
+/b/c/./aa//aa/a /b/c/aa/aa/a
+/b/c/./aa//aa/. /b/c/aa/aa
+/b/c/./aa//aa// /b/c/aa/aa
+/b/c/./aa//a.aa /b/c/aa/a.aa
+/b/c/./aa//a.a. /b/c/aa/a.a.
+/b/c/./aa//a.a/ /b/c/aa/a.a
+/b/c/./aa//a..a /b/c/aa/a..a
+/b/c/./aa//a... /b/c/aa/a...
+/b/c/./aa//a../ /b/c/aa/a..
+/b/c/./aa//a./a /b/c/aa/a./a
+/b/c/./aa//a./. /b/c/aa/a.
+/b/c/./aa//a.// /b/c/aa/a.
+/b/c/./aa//a/aa /b/c/aa/a/aa
+/b/c/./aa//a/a. /b/c/aa/a/a.
+/b/c/./aa//a/a/ /b/c/aa/a/a
+/b/c/./aa//a/.a /b/c/aa/a/.a
+/b/c/./aa//a/.. /b/c/aa
+/b/c/./aa//a/./ /b/c/aa/a
+/b/c/./aa//a//a /b/c/aa/a/a
+/b/c/./aa//a//. /b/c/aa/a
+/b/c/./aa//a/// /b/c/aa/a
+/b/c/./aa//.aaa /b/c/aa/.aaa
+/b/c/./aa//.aa. /b/c/aa/.aa.
+/b/c/./aa//.aa/ /b/c/aa/.aa
+/b/c/./aa//.a.a /b/c/aa/.a.a
+/b/c/./aa//.a.. /b/c/aa/.a..
+/b/c/./aa//.a./ /b/c/aa/.a.
+/b/c/./aa//.a/a /b/c/aa/.a/a
+/b/c/./aa//.a/. /b/c/aa/.a
+/b/c/./aa//.a// /b/c/aa/.a
+/b/c/./aa//..aa /b/c/aa/..aa
+/b/c/./aa//..a. /b/c/aa/..a.
+/b/c/./aa//..a/ /b/c/aa/..a
+/b/c/./aa//...a /b/c/aa/...a
+/b/c/./aa//.... /b/c/aa/....
+/b/c/./aa//.../ /b/c/aa/...
+/b/c/./aa//../a /b/c/a
+/b/c/./aa//../. /b/c
+/b/c/./aa//..// /b/c
+/b/c/./aa//./aa /b/c/aa/aa
+/b/c/./aa//./a. /b/c/aa/a.
+/b/c/./aa//./a/ /b/c/aa/a
+/b/c/./aa//./.a /b/c/aa/.a
+/b/c/./aa//./.. /b/c
+/b/c/./aa//././ /b/c/aa
+/b/c/./aa//.//a /b/c/aa/a
+/b/c/./aa//.//. /b/c/aa
+/b/c/./aa//./// /b/c/aa
+/b/c/./aa///aaa /b/c/aa/aaa
+/b/c/./aa///aa. /b/c/aa/aa.
+/b/c/./aa///aa/ /b/c/aa/aa
+/b/c/./aa///a.a /b/c/aa/a.a
+/b/c/./aa///a.. /b/c/aa/a..
+/b/c/./aa///a./ /b/c/aa/a.
+/b/c/./aa///a/a /b/c/aa/a/a
+/b/c/./aa///a/. /b/c/aa/a
+/b/c/./aa///a// /b/c/aa/a
+/b/c/./aa///.aa /b/c/aa/.aa
+/b/c/./aa///.a. /b/c/aa/.a.
+/b/c/./aa///.a/ /b/c/aa/.a
+/b/c/./aa///..a /b/c/aa/..a
+/b/c/./aa///... /b/c/aa/...
+/b/c/./aa///../ /b/c
+/b/c/./aa///./a /b/c/aa/a
+/b/c/./aa///./. /b/c/aa
+/b/c/./aa///.// /b/c/aa
+/b/c/./aa////aa /b/c/aa/aa
+/b/c/./aa////a. /b/c/aa/a.
+/b/c/./aa////a/ /b/c/aa/a
+/b/c/./aa////.a /b/c/aa/.a
+/b/c/./aa////.. /b/c
+/b/c/./aa////./ /b/c/aa
+/b/c/./aa/////a /b/c/aa/a
+/b/c/./aa/////. /b/c/aa
+/b/c/./aa////// /b/c/aa
+/b/c/./a.aaaaaa /b/c/a.aaaaaa
+/b/c/./a.aaaaa. /b/c/a.aaaaa.
+/b/c/./a.aaaaa/ /b/c/a.aaaaa
+/b/c/./a.aaaa.a /b/c/a.aaaa.a
+/b/c/./a.aaaa.. /b/c/a.aaaa..
+/b/c/./a.aaaa./ /b/c/a.aaaa.
+/b/c/./a.aaaa/a /b/c/a.aaaa/a
+/b/c/./a.aaaa/. /b/c/a.aaaa
+/b/c/./a.aaaa// /b/c/a.aaaa
+/b/c/./a.aaa.aa /b/c/a.aaa.aa
+/b/c/./a.aaa.a. /b/c/a.aaa.a.
+/b/c/./a.aaa.a/ /b/c/a.aaa.a
+/b/c/./a.aaa..a /b/c/a.aaa..a
+/b/c/./a.aaa... /b/c/a.aaa...
+/b/c/./a.aaa../ /b/c/a.aaa..
+/b/c/./a.aaa./a /b/c/a.aaa./a
+/b/c/./a.aaa./. /b/c/a.aaa.
+/b/c/./a.aaa.// /b/c/a.aaa.
+/b/c/./a.aaa/aa /b/c/a.aaa/aa
+/b/c/./a.aaa/a. /b/c/a.aaa/a.
+/b/c/./a.aaa/a/ /b/c/a.aaa/a
+/b/c/./a.aaa/.a /b/c/a.aaa/.a
+/b/c/./a.aaa/.. /b/c
+/b/c/./a.aaa/./ /b/c/a.aaa
+/b/c/./a.aaa//a /b/c/a.aaa/a
+/b/c/./a.aaa//. /b/c/a.aaa
+/b/c/./a.aaa/// /b/c/a.aaa
+/b/c/./a.aa.aaa /b/c/a.aa.aaa
+/b/c/./a.aa.aa. /b/c/a.aa.aa.
+/b/c/./a.aa.aa/ /b/c/a.aa.aa
+/b/c/./a.aa.a.a /b/c/a.aa.a.a
+/b/c/./a.aa.a.. /b/c/a.aa.a..
+/b/c/./a.aa.a./ /b/c/a.aa.a.
+/b/c/./a.aa.a/a /b/c/a.aa.a/a
+/b/c/./a.aa.a/. /b/c/a.aa.a
+/b/c/./a.aa.a// /b/c/a.aa.a
+/b/c/./a.aa..aa /b/c/a.aa..aa
+/b/c/./a.aa..a. /b/c/a.aa..a.
+/b/c/./a.aa..a/ /b/c/a.aa..a
+/b/c/./a.aa...a /b/c/a.aa...a
+/b/c/./a.aa.... /b/c/a.aa....
+/b/c/./a.aa.../ /b/c/a.aa...
+/b/c/./a.aa../a /b/c/a.aa../a
+/b/c/./a.aa../. /b/c/a.aa..
+/b/c/./a.aa..// /b/c/a.aa..
+/b/c/./a.aa./aa /b/c/a.aa./aa
+/b/c/./a.aa./a. /b/c/a.aa./a.
+/b/c/./a.aa./a/ /b/c/a.aa./a
+/b/c/./a.aa./.a /b/c/a.aa./.a
+/b/c/./a.aa./.. /b/c
+/b/c/./a.aa././ /b/c/a.aa.
+/b/c/./a.aa.//a /b/c/a.aa./a
+/b/c/./a.aa.//. /b/c/a.aa.
+/b/c/./a.aa./// /b/c/a.aa.
+/b/c/./a.aa/aaa /b/c/a.aa/aaa
+/b/c/./a.aa/aa. /b/c/a.aa/aa.
+/b/c/./a.aa/aa/ /b/c/a.aa/aa
+/b/c/./a.aa/a.a /b/c/a.aa/a.a
+/b/c/./a.aa/a.. /b/c/a.aa/a..
+/b/c/./a.aa/a./ /b/c/a.aa/a.
+/b/c/./a.aa/a/a /b/c/a.aa/a/a
+/b/c/./a.aa/a/. /b/c/a.aa/a
+/b/c/./a.aa/a// /b/c/a.aa/a
+/b/c/./a.aa/.aa /b/c/a.aa/.aa
+/b/c/./a.aa/.a. /b/c/a.aa/.a.
+/b/c/./a.aa/.a/ /b/c/a.aa/.a
+/b/c/./a.aa/..a /b/c/a.aa/..a
+/b/c/./a.aa/... /b/c/a.aa/...
+/b/c/./a.aa/../ /b/c
+/b/c/./a.aa/./a /b/c/a.aa/a
+/b/c/./a.aa/./. /b/c/a.aa
+/b/c/./a.aa/.// /b/c/a.aa
+/b/c/./a.aa//aa /b/c/a.aa/aa
+/b/c/./a.aa//a. /b/c/a.aa/a.
+/b/c/./a.aa//a/ /b/c/a.aa/a
+/b/c/./a.aa//.a /b/c/a.aa/.a
+/b/c/./a.aa//.. /b/c
+/b/c/./a.aa//./ /b/c/a.aa
+/b/c/./a.aa///a /b/c/a.aa/a
+/b/c/./a.aa///. /b/c/a.aa
+/b/c/./a.aa//// /b/c/a.aa
+/b/c/./a.a.aaaa /b/c/a.a.aaaa
+/b/c/./a.a.aaa. /b/c/a.a.aaa.
+/b/c/./a.a.aaa/ /b/c/a.a.aaa
+/b/c/./a.a.aa.a /b/c/a.a.aa.a
+/b/c/./a.a.aa.. /b/c/a.a.aa..
+/b/c/./a.a.aa./ /b/c/a.a.aa.
+/b/c/./a.a.aa/a /b/c/a.a.aa/a
+/b/c/./a.a.aa/. /b/c/a.a.aa
+/b/c/./a.a.aa// /b/c/a.a.aa
+/b/c/./a.a.a.aa /b/c/a.a.a.aa
+/b/c/./a.a.a.a. /b/c/a.a.a.a.
+/b/c/./a.a.a.a/ /b/c/a.a.a.a
+/b/c/./a.a.a..a /b/c/a.a.a..a
+/b/c/./a.a.a... /b/c/a.a.a...
+/b/c/./a.a.a../ /b/c/a.a.a..
+/b/c/./a.a.a./a /b/c/a.a.a./a
+/b/c/./a.a.a./. /b/c/a.a.a.
+/b/c/./a.a.a.// /b/c/a.a.a.
+/b/c/./a.a.a/aa /b/c/a.a.a/aa
+/b/c/./a.a.a/a. /b/c/a.a.a/a.
+/b/c/./a.a.a/a/ /b/c/a.a.a/a
+/b/c/./a.a.a/.a /b/c/a.a.a/.a
+/b/c/./a.a.a/.. /b/c
+/b/c/./a.a.a/./ /b/c/a.a.a
+/b/c/./a.a.a//a /b/c/a.a.a/a
+/b/c/./a.a.a//. /b/c/a.a.a
+/b/c/./a.a.a/// /b/c/a.a.a
+/b/c/./a.a..aaa /b/c/a.a..aaa
+/b/c/./a.a..aa. /b/c/a.a..aa.
+/b/c/./a.a..aa/ /b/c/a.a..aa
+/b/c/./a.a..a.a /b/c/a.a..a.a
+/b/c/./a.a..a.. /b/c/a.a..a..
+/b/c/./a.a..a./ /b/c/a.a..a.
+/b/c/./a.a..a/a /b/c/a.a..a/a
+/b/c/./a.a..a/. /b/c/a.a..a
+/b/c/./a.a..a// /b/c/a.a..a
+/b/c/./a.a...aa /b/c/a.a...aa
+/b/c/./a.a...a. /b/c/a.a...a.
+/b/c/./a.a...a/ /b/c/a.a...a
+/b/c/./a.a....a /b/c/a.a....a
+/b/c/./a.a..... /b/c/a.a.....
+/b/c/./a.a..../ /b/c/a.a....
+/b/c/./a.a.../a /b/c/a.a.../a
+/b/c/./a.a.../. /b/c/a.a...
+/b/c/./a.a...// /b/c/a.a...
+/b/c/./a.a../aa /b/c/a.a../aa
+/b/c/./a.a../a. /b/c/a.a../a.
+/b/c/./a.a../a/ /b/c/a.a../a
+/b/c/./a.a../.a /b/c/a.a../.a
+/b/c/./a.a../.. /b/c
+/b/c/./a.a.././ /b/c/a.a..
+/b/c/./a.a..//a /b/c/a.a../a
+/b/c/./a.a..//. /b/c/a.a..
+/b/c/./a.a../// /b/c/a.a..
+/b/c/./a.a./aaa /b/c/a.a./aaa
+/b/c/./a.a./aa. /b/c/a.a./aa.
+/b/c/./a.a./aa/ /b/c/a.a./aa
+/b/c/./a.a./a.a /b/c/a.a./a.a
+/b/c/./a.a./a.. /b/c/a.a./a..
+/b/c/./a.a./a./ /b/c/a.a./a.
+/b/c/./a.a./a/a /b/c/a.a./a/a
+/b/c/./a.a./a/. /b/c/a.a./a
+/b/c/./a.a./a// /b/c/a.a./a
+/b/c/./a.a./.aa /b/c/a.a./.aa
+/b/c/./a.a./.a. /b/c/a.a./.a.
+/b/c/./a.a./.a/ /b/c/a.a./.a
+/b/c/./a.a./..a /b/c/a.a./..a
+/b/c/./a.a./... /b/c/a.a./...
+/b/c/./a.a./../ /b/c
+/b/c/./a.a././a /b/c/a.a./a
+/b/c/./a.a././. /b/c/a.a.
+/b/c/./a.a./.// /b/c/a.a.
+/b/c/./a.a.//aa /b/c/a.a./aa
+/b/c/./a.a.//a. /b/c/a.a./a.
+/b/c/./a.a.//a/ /b/c/a.a./a
+/b/c/./a.a.//.a /b/c/a.a./.a
+/b/c/./a.a.//.. /b/c
+/b/c/./a.a.//./ /b/c/a.a.
+/b/c/./a.a.///a /b/c/a.a./a
+/b/c/./a.a.///. /b/c/a.a.
+/b/c/./a.a.//// /b/c/a.a.
+/b/c/./a.a/aaaa /b/c/a.a/aaaa
+/b/c/./a.a/aaa. /b/c/a.a/aaa.
+/b/c/./a.a/aaa/ /b/c/a.a/aaa
+/b/c/./a.a/aa.a /b/c/a.a/aa.a
+/b/c/./a.a/aa.. /b/c/a.a/aa..
+/b/c/./a.a/aa./ /b/c/a.a/aa.
+/b/c/./a.a/aa/a /b/c/a.a/aa/a
+/b/c/./a.a/aa/. /b/c/a.a/aa
+/b/c/./a.a/aa// /b/c/a.a/aa
+/b/c/./a.a/a.aa /b/c/a.a/a.aa
+/b/c/./a.a/a.a. /b/c/a.a/a.a.
+/b/c/./a.a/a.a/ /b/c/a.a/a.a
+/b/c/./a.a/a..a /b/c/a.a/a..a
+/b/c/./a.a/a... /b/c/a.a/a...
+/b/c/./a.a/a../ /b/c/a.a/a..
+/b/c/./a.a/a./a /b/c/a.a/a./a
+/b/c/./a.a/a./. /b/c/a.a/a.
+/b/c/./a.a/a.// /b/c/a.a/a.
+/b/c/./a.a/a/aa /b/c/a.a/a/aa
+/b/c/./a.a/a/a. /b/c/a.a/a/a.
+/b/c/./a.a/a/a/ /b/c/a.a/a/a
+/b/c/./a.a/a/.a /b/c/a.a/a/.a
+/b/c/./a.a/a/.. /b/c/a.a
+/b/c/./a.a/a/./ /b/c/a.a/a
+/b/c/./a.a/a//a /b/c/a.a/a/a
+/b/c/./a.a/a//. /b/c/a.a/a
+/b/c/./a.a/a/// /b/c/a.a/a
+/b/c/./a.a/.aaa /b/c/a.a/.aaa
+/b/c/./a.a/.aa. /b/c/a.a/.aa.
+/b/c/./a.a/.aa/ /b/c/a.a/.aa
+/b/c/./a.a/.a.a /b/c/a.a/.a.a
+/b/c/./a.a/.a.. /b/c/a.a/.a..
+/b/c/./a.a/.a./ /b/c/a.a/.a.
+/b/c/./a.a/.a/a /b/c/a.a/.a/a
+/b/c/./a.a/.a/. /b/c/a.a/.a
+/b/c/./a.a/.a// /b/c/a.a/.a
+/b/c/./a.a/..aa /b/c/a.a/..aa
+/b/c/./a.a/..a. /b/c/a.a/..a.
+/b/c/./a.a/..a/ /b/c/a.a/..a
+/b/c/./a.a/...a /b/c/a.a/...a
+/b/c/./a.a/.... /b/c/a.a/....
+/b/c/./a.a/.../ /b/c/a.a/...
+/b/c/./a.a/../a /b/c/a
+/b/c/./a.a/../. /b/c
+/b/c/./a.a/..// /b/c
+/b/c/./a.a/./aa /b/c/a.a/aa
+/b/c/./a.a/./a. /b/c/a.a/a.
+/b/c/./a.a/./a/ /b/c/a.a/a
+/b/c/./a.a/./.a /b/c/a.a/.a
+/b/c/./a.a/./.. /b/c
+/b/c/./a.a/././ /b/c/a.a
+/b/c/./a.a/.//a /b/c/a.a/a
+/b/c/./a.a/.//. /b/c/a.a
+/b/c/./a.a/./// /b/c/a.a
+/b/c/./a.a//aaa /b/c/a.a/aaa
+/b/c/./a.a//aa. /b/c/a.a/aa.
+/b/c/./a.a//aa/ /b/c/a.a/aa
+/b/c/./a.a//a.a /b/c/a.a/a.a
+/b/c/./a.a//a.. /b/c/a.a/a..
+/b/c/./a.a//a./ /b/c/a.a/a.
+/b/c/./a.a//a/a /b/c/a.a/a/a
+/b/c/./a.a//a/. /b/c/a.a/a
+/b/c/./a.a//a// /b/c/a.a/a
+/b/c/./a.a//.aa /b/c/a.a/.aa
+/b/c/./a.a//.a. /b/c/a.a/.a.
+/b/c/./a.a//.a/ /b/c/a.a/.a
+/b/c/./a.a//..a /b/c/a.a/..a
+/b/c/./a.a//... /b/c/a.a/...
+/b/c/./a.a//../ /b/c
+/b/c/./a.a//./a /b/c/a.a/a
+/b/c/./a.a//./. /b/c/a.a
+/b/c/./a.a//.// /b/c/a.a
+/b/c/./a.a///aa /b/c/a.a/aa
+/b/c/./a.a///a. /b/c/a.a/a.
+/b/c/./a.a///a/ /b/c/a.a/a
+/b/c/./a.a///.a /b/c/a.a/.a
+/b/c/./a.a///.. /b/c
+/b/c/./a.a///./ /b/c/a.a
+/b/c/./a.a////a /b/c/a.a/a
+/b/c/./a.a////. /b/c/a.a
+/b/c/./a.a///// /b/c/a.a
+/b/c/./a..aaaaa /b/c/a..aaaaa
+/b/c/./a..aaaa. /b/c/a..aaaa.
+/b/c/./a..aaaa/ /b/c/a..aaaa
+/b/c/./a..aaa.a /b/c/a..aaa.a
+/b/c/./a..aaa.. /b/c/a..aaa..
+/b/c/./a..aaa./ /b/c/a..aaa.
+/b/c/./a..aaa/a /b/c/a..aaa/a
+/b/c/./a..aaa/. /b/c/a..aaa
+/b/c/./a..aaa// /b/c/a..aaa
+/b/c/./a..aa.aa /b/c/a..aa.aa
+/b/c/./a..aa.a. /b/c/a..aa.a.
+/b/c/./a..aa.a/ /b/c/a..aa.a
+/b/c/./a..aa..a /b/c/a..aa..a
+/b/c/./a..aa... /b/c/a..aa...
+/b/c/./a..aa../ /b/c/a..aa..
+/b/c/./a..aa./a /b/c/a..aa./a
+/b/c/./a..aa./. /b/c/a..aa.
+/b/c/./a..aa.// /b/c/a..aa.
+/b/c/./a..aa/aa /b/c/a..aa/aa
+/b/c/./a..aa/a. /b/c/a..aa/a.
+/b/c/./a..aa/a/ /b/c/a..aa/a
+/b/c/./a..aa/.a /b/c/a..aa/.a
+/b/c/./a..aa/.. /b/c
+/b/c/./a..aa/./ /b/c/a..aa
+/b/c/./a..aa//a /b/c/a..aa/a
+/b/c/./a..aa//. /b/c/a..aa
+/b/c/./a..aa/// /b/c/a..aa
+/b/c/./a..a.aaa /b/c/a..a.aaa
+/b/c/./a..a.aa. /b/c/a..a.aa.
+/b/c/./a..a.aa/ /b/c/a..a.aa
+/b/c/./a..a.a.a /b/c/a..a.a.a
+/b/c/./a..a.a.. /b/c/a..a.a..
+/b/c/./a..a.a./ /b/c/a..a.a.
+/b/c/./a..a.a/a /b/c/a..a.a/a
+/b/c/./a..a.a/. /b/c/a..a.a
+/b/c/./a..a.a// /b/c/a..a.a
+/b/c/./a..a..aa /b/c/a..a..aa
+/b/c/./a..a..a. /b/c/a..a..a.
+/b/c/./a..a..a/ /b/c/a..a..a
+/b/c/./a..a...a /b/c/a..a...a
+/b/c/./a..a.... /b/c/a..a....
+/b/c/./a..a.../ /b/c/a..a...
+/b/c/./a..a../a /b/c/a..a../a
+/b/c/./a..a../. /b/c/a..a..
+/b/c/./a..a..// /b/c/a..a..
+/b/c/./a..a./aa /b/c/a..a./aa
+/b/c/./a..a./a. /b/c/a..a./a.
+/b/c/./a..a./a/ /b/c/a..a./a
+/b/c/./a..a./.a /b/c/a..a./.a
+/b/c/./a..a./.. /b/c
+/b/c/./a..a././ /b/c/a..a.
+/b/c/./a..a.//a /b/c/a..a./a
+/b/c/./a..a.//. /b/c/a..a.
+/b/c/./a..a./// /b/c/a..a.
+/b/c/./a..a/aaa /b/c/a..a/aaa
+/b/c/./a..a/aa. /b/c/a..a/aa.
+/b/c/./a..a/aa/ /b/c/a..a/aa
+/b/c/./a..a/a.a /b/c/a..a/a.a
+/b/c/./a..a/a.. /b/c/a..a/a..
+/b/c/./a..a/a./ /b/c/a..a/a.
+/b/c/./a..a/a/a /b/c/a..a/a/a
+/b/c/./a..a/a/. /b/c/a..a/a
+/b/c/./a..a/a// /b/c/a..a/a
+/b/c/./a..a/.aa /b/c/a..a/.aa
+/b/c/./a..a/.a. /b/c/a..a/.a.
+/b/c/./a..a/.a/ /b/c/a..a/.a
+/b/c/./a..a/..a /b/c/a..a/..a
+/b/c/./a..a/... /b/c/a..a/...
+/b/c/./a..a/../ /b/c
+/b/c/./a..a/./a /b/c/a..a/a
+/b/c/./a..a/./. /b/c/a..a
+/b/c/./a..a/.// /b/c/a..a
+/b/c/./a..a//aa /b/c/a..a/aa
+/b/c/./a..a//a. /b/c/a..a/a.
+/b/c/./a..a//a/ /b/c/a..a/a
+/b/c/./a..a//.a /b/c/a..a/.a
+/b/c/./a..a//.. /b/c
+/b/c/./a..a//./ /b/c/a..a
+/b/c/./a..a///a /b/c/a..a/a
+/b/c/./a..a///. /b/c/a..a
+/b/c/./a..a//// /b/c/a..a
+/b/c/./a...aaaa /b/c/a...aaaa
+/b/c/./a...aaa. /b/c/a...aaa.
+/b/c/./a...aaa/ /b/c/a...aaa
+/b/c/./a...aa.a /b/c/a...aa.a
+/b/c/./a...aa.. /b/c/a...aa..
+/b/c/./a...aa./ /b/c/a...aa.
+/b/c/./a...aa/a /b/c/a...aa/a
+/b/c/./a...aa/. /b/c/a...aa
+/b/c/./a...aa// /b/c/a...aa
+/b/c/./a...a.aa /b/c/a...a.aa
+/b/c/./a...a.a. /b/c/a...a.a.
+/b/c/./a...a.a/ /b/c/a...a.a
+/b/c/./a...a..a /b/c/a...a..a
+/b/c/./a...a... /b/c/a...a...
+/b/c/./a...a../ /b/c/a...a..
+/b/c/./a...a./a /b/c/a...a./a
+/b/c/./a...a./. /b/c/a...a.
+/b/c/./a...a.// /b/c/a...a.
+/b/c/./a...a/aa /b/c/a...a/aa
+/b/c/./a...a/a. /b/c/a...a/a.
+/b/c/./a...a/a/ /b/c/a...a/a
+/b/c/./a...a/.a /b/c/a...a/.a
+/b/c/./a...a/.. /b/c
+/b/c/./a...a/./ /b/c/a...a
+/b/c/./a...a//a /b/c/a...a/a
+/b/c/./a...a//. /b/c/a...a
+/b/c/./a...a/// /b/c/a...a
+/b/c/./a....aaa /b/c/a....aaa
+/b/c/./a....aa. /b/c/a....aa.
+/b/c/./a....aa/ /b/c/a....aa
+/b/c/./a....a.a /b/c/a....a.a
+/b/c/./a....a.. /b/c/a....a..
+/b/c/./a....a./ /b/c/a....a.
+/b/c/./a....a/a /b/c/a....a/a
+/b/c/./a....a/. /b/c/a....a
+/b/c/./a....a// /b/c/a....a
+/b/c/./a.....aa /b/c/a.....aa
+/b/c/./a.....a. /b/c/a.....a.
+/b/c/./a.....a/ /b/c/a.....a
+/b/c/./a......a /b/c/a......a
+/b/c/./a....... /b/c/a.......
+/b/c/./a....../ /b/c/a......
+/b/c/./a...../a /b/c/a...../a
+/b/c/./a...../. /b/c/a.....
+/b/c/./a.....// /b/c/a.....
+/b/c/./a..../aa /b/c/a..../aa
+/b/c/./a..../a. /b/c/a..../a.
+/b/c/./a..../a/ /b/c/a..../a
+/b/c/./a..../.a /b/c/a..../.a
+/b/c/./a..../.. /b/c
+/b/c/./a...././ /b/c/a....
+/b/c/./a....//a /b/c/a..../a
+/b/c/./a....//. /b/c/a....
+/b/c/./a..../// /b/c/a....
+/b/c/./a.../aaa /b/c/a.../aaa
+/b/c/./a.../aa. /b/c/a.../aa.
+/b/c/./a.../aa/ /b/c/a.../aa
+/b/c/./a.../a.a /b/c/a.../a.a
+/b/c/./a.../a.. /b/c/a.../a..
+/b/c/./a.../a./ /b/c/a.../a.
+/b/c/./a.../a/a /b/c/a.../a/a
+/b/c/./a.../a/. /b/c/a.../a
+/b/c/./a.../a// /b/c/a.../a
+/b/c/./a.../.aa /b/c/a.../.aa
+/b/c/./a.../.a. /b/c/a.../.a.
+/b/c/./a.../.a/ /b/c/a.../.a
+/b/c/./a.../..a /b/c/a.../..a
+/b/c/./a.../... /b/c/a.../...
+/b/c/./a.../../ /b/c
+/b/c/./a..././a /b/c/a.../a
+/b/c/./a..././. /b/c/a...
+/b/c/./a.../.// /b/c/a...
+/b/c/./a...//aa /b/c/a.../aa
+/b/c/./a...//a. /b/c/a.../a.
+/b/c/./a...//a/ /b/c/a.../a
+/b/c/./a...//.a /b/c/a.../.a
+/b/c/./a...//.. /b/c
+/b/c/./a...//./ /b/c/a...
+/b/c/./a...///a /b/c/a.../a
+/b/c/./a...///. /b/c/a...
+/b/c/./a...//// /b/c/a...
+/b/c/./a../aaaa /b/c/a../aaaa
+/b/c/./a../aaa. /b/c/a../aaa.
+/b/c/./a../aaa/ /b/c/a../aaa
+/b/c/./a../aa.a /b/c/a../aa.a
+/b/c/./a../aa.. /b/c/a../aa..
+/b/c/./a../aa./ /b/c/a../aa.
+/b/c/./a../aa/a /b/c/a../aa/a
+/b/c/./a../aa/. /b/c/a../aa
+/b/c/./a../aa// /b/c/a../aa
+/b/c/./a../a.aa /b/c/a../a.aa
+/b/c/./a../a.a. /b/c/a../a.a.
+/b/c/./a../a.a/ /b/c/a../a.a
+/b/c/./a../a..a /b/c/a../a..a
+/b/c/./a../a... /b/c/a../a...
+/b/c/./a../a../ /b/c/a../a..
+/b/c/./a../a./a /b/c/a../a./a
+/b/c/./a../a./. /b/c/a../a.
+/b/c/./a../a.// /b/c/a../a.
+/b/c/./a../a/aa /b/c/a../a/aa
+/b/c/./a../a/a. /b/c/a../a/a.
+/b/c/./a../a/a/ /b/c/a../a/a
+/b/c/./a../a/.a /b/c/a../a/.a
+/b/c/./a../a/.. /b/c/a..
+/b/c/./a../a/./ /b/c/a../a
+/b/c/./a../a//a /b/c/a../a/a
+/b/c/./a../a//. /b/c/a../a
+/b/c/./a../a/// /b/c/a../a
+/b/c/./a../.aaa /b/c/a../.aaa
+/b/c/./a../.aa. /b/c/a../.aa.
+/b/c/./a../.aa/ /b/c/a../.aa
+/b/c/./a../.a.a /b/c/a../.a.a
+/b/c/./a../.a.. /b/c/a../.a..
+/b/c/./a../.a./ /b/c/a../.a.
+/b/c/./a../.a/a /b/c/a../.a/a
+/b/c/./a../.a/. /b/c/a../.a
+/b/c/./a../.a// /b/c/a../.a
+/b/c/./a../..aa /b/c/a../..aa
+/b/c/./a../..a. /b/c/a../..a.
+/b/c/./a../..a/ /b/c/a../..a
+/b/c/./a../...a /b/c/a../...a
+/b/c/./a../.... /b/c/a../....
+/b/c/./a../.../ /b/c/a../...
+/b/c/./a../../a /b/c/a
+/b/c/./a../../. /b/c
+/b/c/./a../..// /b/c
+/b/c/./a.././aa /b/c/a../aa
+/b/c/./a.././a. /b/c/a../a.
+/b/c/./a.././a/ /b/c/a../a
+/b/c/./a.././.a /b/c/a../.a
+/b/c/./a.././.. /b/c
+/b/c/./a../././ /b/c/a..
+/b/c/./a.././/a /b/c/a../a
+/b/c/./a.././/. /b/c/a..
+/b/c/./a.././// /b/c/a..
+/b/c/./a..//aaa /b/c/a../aaa
+/b/c/./a..//aa. /b/c/a../aa.
+/b/c/./a..//aa/ /b/c/a../aa
+/b/c/./a..//a.a /b/c/a../a.a
+/b/c/./a..//a.. /b/c/a../a..
+/b/c/./a..//a./ /b/c/a../a.
+/b/c/./a..//a/a /b/c/a../a/a
+/b/c/./a..//a/. /b/c/a../a
+/b/c/./a..//a// /b/c/a../a
+/b/c/./a..//.aa /b/c/a../.aa
+/b/c/./a..//.a. /b/c/a../.a.
+/b/c/./a..//.a/ /b/c/a../.a
+/b/c/./a..//..a /b/c/a../..a
+/b/c/./a..//... /b/c/a../...
+/b/c/./a..//../ /b/c
+/b/c/./a..//./a /b/c/a../a
+/b/c/./a..//./. /b/c/a..
+/b/c/./a..//.// /b/c/a..
+/b/c/./a..///aa /b/c/a../aa
+/b/c/./a..///a. /b/c/a../a.
+/b/c/./a..///a/ /b/c/a../a
+/b/c/./a..///.a /b/c/a../.a
+/b/c/./a..///.. /b/c
+/b/c/./a..///./ /b/c/a..
+/b/c/./a..////a /b/c/a../a
+/b/c/./a..////. /b/c/a..
+/b/c/./a..///// /b/c/a..
+/b/c/./a./aaaaa /b/c/a./aaaaa
+/b/c/./a./aaaa. /b/c/a./aaaa.
+/b/c/./a./aaaa/ /b/c/a./aaaa
+/b/c/./a./aaa.a /b/c/a./aaa.a
+/b/c/./a./aaa.. /b/c/a./aaa..
+/b/c/./a./aaa./ /b/c/a./aaa.
+/b/c/./a./aaa/a /b/c/a./aaa/a
+/b/c/./a./aaa/. /b/c/a./aaa
+/b/c/./a./aaa// /b/c/a./aaa
+/b/c/./a./aa.aa /b/c/a./aa.aa
+/b/c/./a./aa.a. /b/c/a./aa.a.
+/b/c/./a./aa.a/ /b/c/a./aa.a
+/b/c/./a./aa..a /b/c/a./aa..a
+/b/c/./a./aa... /b/c/a./aa...
+/b/c/./a./aa../ /b/c/a./aa..
+/b/c/./a./aa./a /b/c/a./aa./a
+/b/c/./a./aa./. /b/c/a./aa.
+/b/c/./a./aa.// /b/c/a./aa.
+/b/c/./a./aa/aa /b/c/a./aa/aa
+/b/c/./a./aa/a. /b/c/a./aa/a.
+/b/c/./a./aa/a/ /b/c/a./aa/a
+/b/c/./a./aa/.a /b/c/a./aa/.a
+/b/c/./a./aa/.. /b/c/a.
+/b/c/./a./aa/./ /b/c/a./aa
+/b/c/./a./aa//a /b/c/a./aa/a
+/b/c/./a./aa//. /b/c/a./aa
+/b/c/./a./aa/// /b/c/a./aa
+/b/c/./a./a.aaa /b/c/a./a.aaa
+/b/c/./a./a.aa. /b/c/a./a.aa.
+/b/c/./a./a.aa/ /b/c/a./a.aa
+/b/c/./a./a.a.a /b/c/a./a.a.a
+/b/c/./a./a.a.. /b/c/a./a.a..
+/b/c/./a./a.a./ /b/c/a./a.a.
+/b/c/./a./a.a/a /b/c/a./a.a/a
+/b/c/./a./a.a/. /b/c/a./a.a
+/b/c/./a./a.a// /b/c/a./a.a
+/b/c/./a./a..aa /b/c/a./a..aa
+/b/c/./a./a..a. /b/c/a./a..a.
+/b/c/./a./a..a/ /b/c/a./a..a
+/b/c/./a./a...a /b/c/a./a...a
+/b/c/./a./a.... /b/c/a./a....
+/b/c/./a./a.../ /b/c/a./a...
+/b/c/./a./a../a /b/c/a./a../a
+/b/c/./a./a../. /b/c/a./a..
+/b/c/./a./a..// /b/c/a./a..
+/b/c/./a./a./aa /b/c/a./a./aa
+/b/c/./a./a./a. /b/c/a./a./a.
+/b/c/./a./a./a/ /b/c/a./a./a
+/b/c/./a./a./.a /b/c/a./a./.a
+/b/c/./a./a./.. /b/c/a.
+/b/c/./a./a././ /b/c/a./a.
+/b/c/./a./a.//a /b/c/a./a./a
+/b/c/./a./a.//. /b/c/a./a.
+/b/c/./a./a./// /b/c/a./a.
+/b/c/./a./a/aaa /b/c/a./a/aaa
+/b/c/./a./a/aa. /b/c/a./a/aa.
+/b/c/./a./a/aa/ /b/c/a./a/aa
+/b/c/./a./a/a.a /b/c/a./a/a.a
+/b/c/./a./a/a.. /b/c/a./a/a..
+/b/c/./a./a/a./ /b/c/a./a/a.
+/b/c/./a./a/a/a /b/c/a./a/a/a
+/b/c/./a./a/a/. /b/c/a./a/a
+/b/c/./a./a/a// /b/c/a./a/a
+/b/c/./a./a/.aa /b/c/a./a/.aa
+/b/c/./a./a/.a. /b/c/a./a/.a.
+/b/c/./a./a/.a/ /b/c/a./a/.a
+/b/c/./a./a/..a /b/c/a./a/..a
+/b/c/./a./a/... /b/c/a./a/...
+/b/c/./a./a/../ /b/c/a.
+/b/c/./a./a/./a /b/c/a./a/a
+/b/c/./a./a/./. /b/c/a./a
+/b/c/./a./a/.// /b/c/a./a
+/b/c/./a./a//aa /b/c/a./a/aa
+/b/c/./a./a//a. /b/c/a./a/a.
+/b/c/./a./a//a/ /b/c/a./a/a
+/b/c/./a./a//.a /b/c/a./a/.a
+/b/c/./a./a//.. /b/c/a.
+/b/c/./a./a//./ /b/c/a./a
+/b/c/./a./a///a /b/c/a./a/a
+/b/c/./a./a///. /b/c/a./a
+/b/c/./a./a//// /b/c/a./a
+/b/c/./a./.aaaa /b/c/a./.aaaa
+/b/c/./a./.aaa. /b/c/a./.aaa.
+/b/c/./a./.aaa/ /b/c/a./.aaa
+/b/c/./a./.aa.a /b/c/a./.aa.a
+/b/c/./a./.aa.. /b/c/a./.aa..
+/b/c/./a./.aa./ /b/c/a./.aa.
+/b/c/./a./.aa/a /b/c/a./.aa/a
+/b/c/./a./.aa/. /b/c/a./.aa
+/b/c/./a./.aa// /b/c/a./.aa
+/b/c/./a./.a.aa /b/c/a./.a.aa
+/b/c/./a./.a.a. /b/c/a./.a.a.
+/b/c/./a./.a.a/ /b/c/a./.a.a
+/b/c/./a./.a..a /b/c/a./.a..a
+/b/c/./a./.a... /b/c/a./.a...
+/b/c/./a./.a../ /b/c/a./.a..
+/b/c/./a./.a./a /b/c/a./.a./a
+/b/c/./a./.a./. /b/c/a./.a.
+/b/c/./a./.a.// /b/c/a./.a.
+/b/c/./a./.a/aa /b/c/a./.a/aa
+/b/c/./a./.a/a. /b/c/a./.a/a.
+/b/c/./a./.a/a/ /b/c/a./.a/a
+/b/c/./a./.a/.a /b/c/a./.a/.a
+/b/c/./a./.a/.. /b/c/a.
+/b/c/./a./.a/./ /b/c/a./.a
+/b/c/./a./.a//a /b/c/a./.a/a
+/b/c/./a./.a//. /b/c/a./.a
+/b/c/./a./.a/// /b/c/a./.a
+/b/c/./a./..aaa /b/c/a./..aaa
+/b/c/./a./..aa. /b/c/a./..aa.
+/b/c/./a./..aa/ /b/c/a./..aa
+/b/c/./a./..a.a /b/c/a./..a.a
+/b/c/./a./..a.. /b/c/a./..a..
+/b/c/./a./..a./ /b/c/a./..a.
+/b/c/./a./..a/a /b/c/a./..a/a
+/b/c/./a./..a/. /b/c/a./..a
+/b/c/./a./..a// /b/c/a./..a
+/b/c/./a./...aa /b/c/a./...aa
+/b/c/./a./...a. /b/c/a./...a.
+/b/c/./a./...a/ /b/c/a./...a
+/b/c/./a./....a /b/c/a./....a
+/b/c/./a./..... /b/c/a./.....
+/b/c/./a./..../ /b/c/a./....
+/b/c/./a./.../a /b/c/a./.../a
+/b/c/./a./.../. /b/c/a./...
+/b/c/./a./...// /b/c/a./...
+/b/c/./a./../aa /b/c/aa
+/b/c/./a./../a. /b/c/a.
+/b/c/./a./../a/ /b/c/a
+/b/c/./a./../.a /b/c/.a
+/b/c/./a./../.. /b
+/b/c/./a./.././ /b/c
+/b/c/./a./..//a /b/c/a
+/b/c/./a./..//. /b/c
+/b/c/./a./../// /b/c
+/b/c/./a././aaa /b/c/a./aaa
+/b/c/./a././aa. /b/c/a./aa.
+/b/c/./a././aa/ /b/c/a./aa
+/b/c/./a././a.a /b/c/a./a.a
+/b/c/./a././a.. /b/c/a./a..
+/b/c/./a././a./ /b/c/a./a.
+/b/c/./a././a/a /b/c/a./a/a
+/b/c/./a././a/. /b/c/a./a
+/b/c/./a././a// /b/c/a./a
+/b/c/./a././.aa /b/c/a./.aa
+/b/c/./a././.a. /b/c/a./.a.
+/b/c/./a././.a/ /b/c/a./.a
+/b/c/./a././..a /b/c/a./..a
+/b/c/./a././... /b/c/a./...
+/b/c/./a././../ /b/c
+/b/c/./a./././a /b/c/a./a
+/b/c/./a./././. /b/c/a.
+/b/c/./a././.// /b/c/a.
+/b/c/./a././/aa /b/c/a./aa
+/b/c/./a././/a. /b/c/a./a.
+/b/c/./a././/a/ /b/c/a./a
+/b/c/./a././/.a /b/c/a./.a
+/b/c/./a././/.. /b/c
+/b/c/./a././/./ /b/c/a.
+/b/c/./a././//a /b/c/a./a
+/b/c/./a././//. /b/c/a.
+/b/c/./a././/// /b/c/a.
+/b/c/./a.//aaaa /b/c/a./aaaa
+/b/c/./a.//aaa. /b/c/a./aaa.
+/b/c/./a.//aaa/ /b/c/a./aaa
+/b/c/./a.//aa.a /b/c/a./aa.a
+/b/c/./a.//aa.. /b/c/a./aa..
+/b/c/./a.//aa./ /b/c/a./aa.
+/b/c/./a.//aa/a /b/c/a./aa/a
+/b/c/./a.//aa/. /b/c/a./aa
+/b/c/./a.//aa// /b/c/a./aa
+/b/c/./a.//a.aa /b/c/a./a.aa
+/b/c/./a.//a.a. /b/c/a./a.a.
+/b/c/./a.//a.a/ /b/c/a./a.a
+/b/c/./a.//a..a /b/c/a./a..a
+/b/c/./a.//a... /b/c/a./a...
+/b/c/./a.//a../ /b/c/a./a..
+/b/c/./a.//a./a /b/c/a./a./a
+/b/c/./a.//a./. /b/c/a./a.
+/b/c/./a.//a.// /b/c/a./a.
+/b/c/./a.//a/aa /b/c/a./a/aa
+/b/c/./a.//a/a. /b/c/a./a/a.
+/b/c/./a.//a/a/ /b/c/a./a/a
+/b/c/./a.//a/.a /b/c/a./a/.a
+/b/c/./a.//a/.. /b/c/a.
+/b/c/./a.//a/./ /b/c/a./a
+/b/c/./a.//a//a /b/c/a./a/a
+/b/c/./a.//a//. /b/c/a./a
+/b/c/./a.//a/// /b/c/a./a
+/b/c/./a.//.aaa /b/c/a./.aaa
+/b/c/./a.//.aa. /b/c/a./.aa.
+/b/c/./a.//.aa/ /b/c/a./.aa
+/b/c/./a.//.a.a /b/c/a./.a.a
+/b/c/./a.//.a.. /b/c/a./.a..
+/b/c/./a.//.a./ /b/c/a./.a.
+/b/c/./a.//.a/a /b/c/a./.a/a
+/b/c/./a.//.a/. /b/c/a./.a
+/b/c/./a.//.a// /b/c/a./.a
+/b/c/./a.//..aa /b/c/a./..aa
+/b/c/./a.//..a. /b/c/a./..a.
+/b/c/./a.//..a/ /b/c/a./..a
+/b/c/./a.//...a /b/c/a./...a
+/b/c/./a.//.... /b/c/a./....
+/b/c/./a.//.../ /b/c/a./...
+/b/c/./a.//../a /b/c/a
+/b/c/./a.//../. /b/c
+/b/c/./a.//..// /b/c
+/b/c/./a.//./aa /b/c/a./aa
+/b/c/./a.//./a. /b/c/a./a.
+/b/c/./a.//./a/ /b/c/a./a
+/b/c/./a.//./.a /b/c/a./.a
+/b/c/./a.//./.. /b/c
+/b/c/./a.//././ /b/c/a.
+/b/c/./a.//.//a /b/c/a./a
+/b/c/./a.//.//. /b/c/a.
+/b/c/./a.//./// /b/c/a.
+/b/c/./a.///aaa /b/c/a./aaa
+/b/c/./a.///aa. /b/c/a./aa.
+/b/c/./a.///aa/ /b/c/a./aa
+/b/c/./a.///a.a /b/c/a./a.a
+/b/c/./a.///a.. /b/c/a./a..
+/b/c/./a.///a./ /b/c/a./a.
+/b/c/./a.///a/a /b/c/a./a/a
+/b/c/./a.///a/. /b/c/a./a
+/b/c/./a.///a// /b/c/a./a
+/b/c/./a.///.aa /b/c/a./.aa
+/b/c/./a.///.a. /b/c/a./.a.
+/b/c/./a.///.a/ /b/c/a./.a
+/b/c/./a.///..a /b/c/a./..a
+/b/c/./a.///... /b/c/a./...
+/b/c/./a.///../ /b/c
+/b/c/./a.///./a /b/c/a./a
+/b/c/./a.///./. /b/c/a.
+/b/c/./a.///.// /b/c/a.
+/b/c/./a.////aa /b/c/a./aa
+/b/c/./a.////a. /b/c/a./a.
+/b/c/./a.////a/ /b/c/a./a
+/b/c/./a.////.a /b/c/a./.a
+/b/c/./a.////.. /b/c
+/b/c/./a.////./ /b/c/a.
+/b/c/./a./////a /b/c/a./a
+/b/c/./a./////. /b/c/a.
+/b/c/./a.////// /b/c/a.
+/b/c/./a/aaaaaa /b/c/a/aaaaaa
+/b/c/./a/aaaaa. /b/c/a/aaaaa.
+/b/c/./a/aaaaa/ /b/c/a/aaaaa
+/b/c/./a/aaaa.a /b/c/a/aaaa.a
+/b/c/./a/aaaa.. /b/c/a/aaaa..
+/b/c/./a/aaaa./ /b/c/a/aaaa.
+/b/c/./a/aaaa/a /b/c/a/aaaa/a
+/b/c/./a/aaaa/. /b/c/a/aaaa
+/b/c/./a/aaaa// /b/c/a/aaaa
+/b/c/./a/aaa.aa /b/c/a/aaa.aa
+/b/c/./a/aaa.a. /b/c/a/aaa.a.
+/b/c/./a/aaa.a/ /b/c/a/aaa.a
+/b/c/./a/aaa..a /b/c/a/aaa..a
+/b/c/./a/aaa... /b/c/a/aaa...
+/b/c/./a/aaa../ /b/c/a/aaa..
+/b/c/./a/aaa./a /b/c/a/aaa./a
+/b/c/./a/aaa./. /b/c/a/aaa.
+/b/c/./a/aaa.// /b/c/a/aaa.
+/b/c/./a/aaa/aa /b/c/a/aaa/aa
+/b/c/./a/aaa/a. /b/c/a/aaa/a.
+/b/c/./a/aaa/a/ /b/c/a/aaa/a
+/b/c/./a/aaa/.a /b/c/a/aaa/.a
+/b/c/./a/aaa/.. /b/c/a
+/b/c/./a/aaa/./ /b/c/a/aaa
+/b/c/./a/aaa//a /b/c/a/aaa/a
+/b/c/./a/aaa//. /b/c/a/aaa
+/b/c/./a/aaa/// /b/c/a/aaa
+/b/c/./a/aa.aaa /b/c/a/aa.aaa
+/b/c/./a/aa.aa. /b/c/a/aa.aa.
+/b/c/./a/aa.aa/ /b/c/a/aa.aa
+/b/c/./a/aa.a.a /b/c/a/aa.a.a
+/b/c/./a/aa.a.. /b/c/a/aa.a..
+/b/c/./a/aa.a./ /b/c/a/aa.a.
+/b/c/./a/aa.a/a /b/c/a/aa.a/a
+/b/c/./a/aa.a/. /b/c/a/aa.a
+/b/c/./a/aa.a// /b/c/a/aa.a
+/b/c/./a/aa..aa /b/c/a/aa..aa
+/b/c/./a/aa..a. /b/c/a/aa..a.
+/b/c/./a/aa..a/ /b/c/a/aa..a
+/b/c/./a/aa...a /b/c/a/aa...a
+/b/c/./a/aa.... /b/c/a/aa....
+/b/c/./a/aa.../ /b/c/a/aa...
+/b/c/./a/aa../a /b/c/a/aa../a
+/b/c/./a/aa../. /b/c/a/aa..
+/b/c/./a/aa..// /b/c/a/aa..
+/b/c/./a/aa./aa /b/c/a/aa./aa
+/b/c/./a/aa./a. /b/c/a/aa./a.
+/b/c/./a/aa./a/ /b/c/a/aa./a
+/b/c/./a/aa./.a /b/c/a/aa./.a
+/b/c/./a/aa./.. /b/c/a
+/b/c/./a/aa././ /b/c/a/aa.
+/b/c/./a/aa.//a /b/c/a/aa./a
+/b/c/./a/aa.//. /b/c/a/aa.
+/b/c/./a/aa./// /b/c/a/aa.
+/b/c/./a/aa/aaa /b/c/a/aa/aaa
+/b/c/./a/aa/aa. /b/c/a/aa/aa.
+/b/c/./a/aa/aa/ /b/c/a/aa/aa
+/b/c/./a/aa/a.a /b/c/a/aa/a.a
+/b/c/./a/aa/a.. /b/c/a/aa/a..
+/b/c/./a/aa/a./ /b/c/a/aa/a.
+/b/c/./a/aa/a/a /b/c/a/aa/a/a
+/b/c/./a/aa/a/. /b/c/a/aa/a
+/b/c/./a/aa/a// /b/c/a/aa/a
+/b/c/./a/aa/.aa /b/c/a/aa/.aa
+/b/c/./a/aa/.a. /b/c/a/aa/.a.
+/b/c/./a/aa/.a/ /b/c/a/aa/.a
+/b/c/./a/aa/..a /b/c/a/aa/..a
+/b/c/./a/aa/... /b/c/a/aa/...
+/b/c/./a/aa/../ /b/c/a
+/b/c/./a/aa/./a /b/c/a/aa/a
+/b/c/./a/aa/./. /b/c/a/aa
+/b/c/./a/aa/.// /b/c/a/aa
+/b/c/./a/aa//aa /b/c/a/aa/aa
+/b/c/./a/aa//a. /b/c/a/aa/a.
+/b/c/./a/aa//a/ /b/c/a/aa/a
+/b/c/./a/aa//.a /b/c/a/aa/.a
+/b/c/./a/aa//.. /b/c/a
+/b/c/./a/aa//./ /b/c/a/aa
+/b/c/./a/aa///a /b/c/a/aa/a
+/b/c/./a/aa///. /b/c/a/aa
+/b/c/./a/aa//// /b/c/a/aa
+/b/c/./a/a.aaaa /b/c/a/a.aaaa
+/b/c/./a/a.aaa. /b/c/a/a.aaa.
+/b/c/./a/a.aaa/ /b/c/a/a.aaa
+/b/c/./a/a.aa.a /b/c/a/a.aa.a
+/b/c/./a/a.aa.. /b/c/a/a.aa..
+/b/c/./a/a.aa./ /b/c/a/a.aa.
+/b/c/./a/a.aa/a /b/c/a/a.aa/a
+/b/c/./a/a.aa/. /b/c/a/a.aa
+/b/c/./a/a.aa// /b/c/a/a.aa
+/b/c/./a/a.a.aa /b/c/a/a.a.aa
+/b/c/./a/a.a.a. /b/c/a/a.a.a.
+/b/c/./a/a.a.a/ /b/c/a/a.a.a
+/b/c/./a/a.a..a /b/c/a/a.a..a
+/b/c/./a/a.a... /b/c/a/a.a...
+/b/c/./a/a.a../ /b/c/a/a.a..
+/b/c/./a/a.a./a /b/c/a/a.a./a
+/b/c/./a/a.a./. /b/c/a/a.a.
+/b/c/./a/a.a.// /b/c/a/a.a.
+/b/c/./a/a.a/aa /b/c/a/a.a/aa
+/b/c/./a/a.a/a. /b/c/a/a.a/a.
+/b/c/./a/a.a/a/ /b/c/a/a.a/a
+/b/c/./a/a.a/.a /b/c/a/a.a/.a
+/b/c/./a/a.a/.. /b/c/a
+/b/c/./a/a.a/./ /b/c/a/a.a
+/b/c/./a/a.a//a /b/c/a/a.a/a
+/b/c/./a/a.a//. /b/c/a/a.a
+/b/c/./a/a.a/// /b/c/a/a.a
+/b/c/./a/a..aaa /b/c/a/a..aaa
+/b/c/./a/a..aa. /b/c/a/a..aa.
+/b/c/./a/a..aa/ /b/c/a/a..aa
+/b/c/./a/a..a.a /b/c/a/a..a.a
+/b/c/./a/a..a.. /b/c/a/a..a..
+/b/c/./a/a..a./ /b/c/a/a..a.
+/b/c/./a/a..a/a /b/c/a/a..a/a
+/b/c/./a/a..a/. /b/c/a/a..a
+/b/c/./a/a..a// /b/c/a/a..a
+/b/c/./a/a...aa /b/c/a/a...aa
+/b/c/./a/a...a. /b/c/a/a...a.
+/b/c/./a/a...a/ /b/c/a/a...a
+/b/c/./a/a....a /b/c/a/a....a
+/b/c/./a/a..... /b/c/a/a.....
+/b/c/./a/a..../ /b/c/a/a....
+/b/c/./a/a.../a /b/c/a/a.../a
+/b/c/./a/a.../. /b/c/a/a...
+/b/c/./a/a...// /b/c/a/a...
+/b/c/./a/a../aa /b/c/a/a../aa
+/b/c/./a/a../a. /b/c/a/a../a.
+/b/c/./a/a../a/ /b/c/a/a../a
+/b/c/./a/a../.a /b/c/a/a../.a
+/b/c/./a/a../.. /b/c/a
+/b/c/./a/a.././ /b/c/a/a..
+/b/c/./a/a..//a /b/c/a/a../a
+/b/c/./a/a..//. /b/c/a/a..
+/b/c/./a/a../// /b/c/a/a..
+/b/c/./a/a./aaa /b/c/a/a./aaa
+/b/c/./a/a./aa. /b/c/a/a./aa.
+/b/c/./a/a./aa/ /b/c/a/a./aa
+/b/c/./a/a./a.a /b/c/a/a./a.a
+/b/c/./a/a./a.. /b/c/a/a./a..
+/b/c/./a/a./a./ /b/c/a/a./a.
+/b/c/./a/a./a/a /b/c/a/a./a/a
+/b/c/./a/a./a/. /b/c/a/a./a
+/b/c/./a/a./a// /b/c/a/a./a
+/b/c/./a/a./.aa /b/c/a/a./.aa
+/b/c/./a/a./.a. /b/c/a/a./.a.
+/b/c/./a/a./.a/ /b/c/a/a./.a
+/b/c/./a/a./..a /b/c/a/a./..a
+/b/c/./a/a./... /b/c/a/a./...
+/b/c/./a/a./../ /b/c/a
+/b/c/./a/a././a /b/c/a/a./a
+/b/c/./a/a././. /b/c/a/a.
+/b/c/./a/a./.// /b/c/a/a.
+/b/c/./a/a.//aa /b/c/a/a./aa
+/b/c/./a/a.//a. /b/c/a/a./a.
+/b/c/./a/a.//a/ /b/c/a/a./a
+/b/c/./a/a.//.a /b/c/a/a./.a
+/b/c/./a/a.//.. /b/c/a
+/b/c/./a/a.//./ /b/c/a/a.
+/b/c/./a/a.///a /b/c/a/a./a
+/b/c/./a/a.///. /b/c/a/a.
+/b/c/./a/a.//// /b/c/a/a.
+/b/c/./a/a/aaaa /b/c/a/a/aaaa
+/b/c/./a/a/aaa. /b/c/a/a/aaa.
+/b/c/./a/a/aaa/ /b/c/a/a/aaa
+/b/c/./a/a/aa.a /b/c/a/a/aa.a
+/b/c/./a/a/aa.. /b/c/a/a/aa..
+/b/c/./a/a/aa./ /b/c/a/a/aa.
+/b/c/./a/a/aa/a /b/c/a/a/aa/a
+/b/c/./a/a/aa/. /b/c/a/a/aa
+/b/c/./a/a/aa// /b/c/a/a/aa
+/b/c/./a/a/a.aa /b/c/a/a/a.aa
+/b/c/./a/a/a.a. /b/c/a/a/a.a.
+/b/c/./a/a/a.a/ /b/c/a/a/a.a
+/b/c/./a/a/a..a /b/c/a/a/a..a
+/b/c/./a/a/a... /b/c/a/a/a...
+/b/c/./a/a/a../ /b/c/a/a/a..
+/b/c/./a/a/a./a /b/c/a/a/a./a
+/b/c/./a/a/a./. /b/c/a/a/a.
+/b/c/./a/a/a.// /b/c/a/a/a.
+/b/c/./a/a/a/aa /b/c/a/a/a/aa
+/b/c/./a/a/a/a. /b/c/a/a/a/a.
+/b/c/./a/a/a/a/ /b/c/a/a/a/a
+/b/c/./a/a/a/.a /b/c/a/a/a/.a
+/b/c/./a/a/a/.. /b/c/a/a
+/b/c/./a/a/a/./ /b/c/a/a/a
+/b/c/./a/a/a//a /b/c/a/a/a/a
+/b/c/./a/a/a//. /b/c/a/a/a
+/b/c/./a/a/a/// /b/c/a/a/a
+/b/c/./a/a/.aaa /b/c/a/a/.aaa
+/b/c/./a/a/.aa. /b/c/a/a/.aa.
+/b/c/./a/a/.aa/ /b/c/a/a/.aa
+/b/c/./a/a/.a.a /b/c/a/a/.a.a
+/b/c/./a/a/.a.. /b/c/a/a/.a..
+/b/c/./a/a/.a./ /b/c/a/a/.a.
+/b/c/./a/a/.a/a /b/c/a/a/.a/a
+/b/c/./a/a/.a/. /b/c/a/a/.a
+/b/c/./a/a/.a// /b/c/a/a/.a
+/b/c/./a/a/..aa /b/c/a/a/..aa
+/b/c/./a/a/..a. /b/c/a/a/..a.
+/b/c/./a/a/..a/ /b/c/a/a/..a
+/b/c/./a/a/...a /b/c/a/a/...a
+/b/c/./a/a/.... /b/c/a/a/....
+/b/c/./a/a/.../ /b/c/a/a/...
+/b/c/./a/a/../a /b/c/a/a
+/b/c/./a/a/../. /b/c/a
+/b/c/./a/a/..// /b/c/a
+/b/c/./a/a/./aa /b/c/a/a/aa
+/b/c/./a/a/./a. /b/c/a/a/a.
+/b/c/./a/a/./a/ /b/c/a/a/a
+/b/c/./a/a/./.a /b/c/a/a/.a
+/b/c/./a/a/./.. /b/c/a
+/b/c/./a/a/././ /b/c/a/a
+/b/c/./a/a/.//a /b/c/a/a/a
+/b/c/./a/a/.//. /b/c/a/a
+/b/c/./a/a/./// /b/c/a/a
+/b/c/./a/a//aaa /b/c/a/a/aaa
+/b/c/./a/a//aa. /b/c/a/a/aa.
+/b/c/./a/a//aa/ /b/c/a/a/aa
+/b/c/./a/a//a.a /b/c/a/a/a.a
+/b/c/./a/a//a.. /b/c/a/a/a..
+/b/c/./a/a//a./ /b/c/a/a/a.
+/b/c/./a/a//a/a /b/c/a/a/a/a
+/b/c/./a/a//a/. /b/c/a/a/a
+/b/c/./a/a//a// /b/c/a/a/a
+/b/c/./a/a//.aa /b/c/a/a/.aa
+/b/c/./a/a//.a. /b/c/a/a/.a.
+/b/c/./a/a//.a/ /b/c/a/a/.a
+/b/c/./a/a//..a /b/c/a/a/..a
+/b/c/./a/a//... /b/c/a/a/...
+/b/c/./a/a//../ /b/c/a
+/b/c/./a/a//./a /b/c/a/a/a
+/b/c/./a/a//./. /b/c/a/a
+/b/c/./a/a//.// /b/c/a/a
+/b/c/./a/a///aa /b/c/a/a/aa
+/b/c/./a/a///a. /b/c/a/a/a.
+/b/c/./a/a///a/ /b/c/a/a/a
+/b/c/./a/a///.a /b/c/a/a/.a
+/b/c/./a/a///.. /b/c/a
+/b/c/./a/a///./ /b/c/a/a
+/b/c/./a/a////a /b/c/a/a/a
+/b/c/./a/a////. /b/c/a/a
+/b/c/./a/a///// /b/c/a/a
+/b/c/./a/.aaaaa /b/c/a/.aaaaa
+/b/c/./a/.aaaa. /b/c/a/.aaaa.
+/b/c/./a/.aaaa/ /b/c/a/.aaaa
+/b/c/./a/.aaa.a /b/c/a/.aaa.a
+/b/c/./a/.aaa.. /b/c/a/.aaa..
+/b/c/./a/.aaa./ /b/c/a/.aaa.
+/b/c/./a/.aaa/a /b/c/a/.aaa/a
+/b/c/./a/.aaa/. /b/c/a/.aaa
+/b/c/./a/.aaa// /b/c/a/.aaa
+/b/c/./a/.aa.aa /b/c/a/.aa.aa
+/b/c/./a/.aa.a. /b/c/a/.aa.a.
+/b/c/./a/.aa.a/ /b/c/a/.aa.a
+/b/c/./a/.aa..a /b/c/a/.aa..a
+/b/c/./a/.aa... /b/c/a/.aa...
+/b/c/./a/.aa../ /b/c/a/.aa..
+/b/c/./a/.aa./a /b/c/a/.aa./a
+/b/c/./a/.aa./. /b/c/a/.aa.
+/b/c/./a/.aa.// /b/c/a/.aa.
+/b/c/./a/.aa/aa /b/c/a/.aa/aa
+/b/c/./a/.aa/a. /b/c/a/.aa/a.
+/b/c/./a/.aa/a/ /b/c/a/.aa/a
+/b/c/./a/.aa/.a /b/c/a/.aa/.a
+/b/c/./a/.aa/.. /b/c/a
+/b/c/./a/.aa/./ /b/c/a/.aa
+/b/c/./a/.aa//a /b/c/a/.aa/a
+/b/c/./a/.aa//. /b/c/a/.aa
+/b/c/./a/.aa/// /b/c/a/.aa
+/b/c/./a/.a.aaa /b/c/a/.a.aaa
+/b/c/./a/.a.aa. /b/c/a/.a.aa.
+/b/c/./a/.a.aa/ /b/c/a/.a.aa
+/b/c/./a/.a.a.a /b/c/a/.a.a.a
+/b/c/./a/.a.a.. /b/c/a/.a.a..
+/b/c/./a/.a.a./ /b/c/a/.a.a.
+/b/c/./a/.a.a/a /b/c/a/.a.a/a
+/b/c/./a/.a.a/. /b/c/a/.a.a
+/b/c/./a/.a.a// /b/c/a/.a.a
+/b/c/./a/.a..aa /b/c/a/.a..aa
+/b/c/./a/.a..a. /b/c/a/.a..a.
+/b/c/./a/.a..a/ /b/c/a/.a..a
+/b/c/./a/.a...a /b/c/a/.a...a
+/b/c/./a/.a.... /b/c/a/.a....
+/b/c/./a/.a.../ /b/c/a/.a...
+/b/c/./a/.a../a /b/c/a/.a../a
+/b/c/./a/.a../. /b/c/a/.a..
+/b/c/./a/.a..// /b/c/a/.a..
+/b/c/./a/.a./aa /b/c/a/.a./aa
+/b/c/./a/.a./a. /b/c/a/.a./a.
+/b/c/./a/.a./a/ /b/c/a/.a./a
+/b/c/./a/.a./.a /b/c/a/.a./.a
+/b/c/./a/.a./.. /b/c/a
+/b/c/./a/.a././ /b/c/a/.a.
+/b/c/./a/.a.//a /b/c/a/.a./a
+/b/c/./a/.a.//. /b/c/a/.a.
+/b/c/./a/.a./// /b/c/a/.a.
+/b/c/./a/.a/aaa /b/c/a/.a/aaa
+/b/c/./a/.a/aa. /b/c/a/.a/aa.
+/b/c/./a/.a/aa/ /b/c/a/.a/aa
+/b/c/./a/.a/a.a /b/c/a/.a/a.a
+/b/c/./a/.a/a.. /b/c/a/.a/a..
+/b/c/./a/.a/a./ /b/c/a/.a/a.
+/b/c/./a/.a/a/a /b/c/a/.a/a/a
+/b/c/./a/.a/a/. /b/c/a/.a/a
+/b/c/./a/.a/a// /b/c/a/.a/a
+/b/c/./a/.a/.aa /b/c/a/.a/.aa
+/b/c/./a/.a/.a. /b/c/a/.a/.a.
+/b/c/./a/.a/.a/ /b/c/a/.a/.a
+/b/c/./a/.a/..a /b/c/a/.a/..a
+/b/c/./a/.a/... /b/c/a/.a/...
+/b/c/./a/.a/../ /b/c/a
+/b/c/./a/.a/./a /b/c/a/.a/a
+/b/c/./a/.a/./. /b/c/a/.a
+/b/c/./a/.a/.// /b/c/a/.a
+/b/c/./a/.a//aa /b/c/a/.a/aa
+/b/c/./a/.a//a. /b/c/a/.a/a.
+/b/c/./a/.a//a/ /b/c/a/.a/a
+/b/c/./a/.a//.a /b/c/a/.a/.a
+/b/c/./a/.a//.. /b/c/a
+/b/c/./a/.a//./ /b/c/a/.a
+/b/c/./a/.a///a /b/c/a/.a/a
+/b/c/./a/.a///. /b/c/a/.a
+/b/c/./a/.a//// /b/c/a/.a
+/b/c/./a/..aaaa /b/c/a/..aaaa
+/b/c/./a/..aaa. /b/c/a/..aaa.
+/b/c/./a/..aaa/ /b/c/a/..aaa
+/b/c/./a/..aa.a /b/c/a/..aa.a
+/b/c/./a/..aa.. /b/c/a/..aa..
+/b/c/./a/..aa./ /b/c/a/..aa.
+/b/c/./a/..aa/a /b/c/a/..aa/a
+/b/c/./a/..aa/. /b/c/a/..aa
+/b/c/./a/..aa// /b/c/a/..aa
+/b/c/./a/..a.aa /b/c/a/..a.aa
+/b/c/./a/..a.a. /b/c/a/..a.a.
+/b/c/./a/..a.a/ /b/c/a/..a.a
+/b/c/./a/..a..a /b/c/a/..a..a
+/b/c/./a/..a... /b/c/a/..a...
+/b/c/./a/..a../ /b/c/a/..a..
+/b/c/./a/..a./a /b/c/a/..a./a
+/b/c/./a/..a./. /b/c/a/..a.
+/b/c/./a/..a.// /b/c/a/..a.
+/b/c/./a/..a/aa /b/c/a/..a/aa
+/b/c/./a/..a/a. /b/c/a/..a/a.
+/b/c/./a/..a/a/ /b/c/a/..a/a
+/b/c/./a/..a/.a /b/c/a/..a/.a
+/b/c/./a/..a/.. /b/c/a
+/b/c/./a/..a/./ /b/c/a/..a
+/b/c/./a/..a//a /b/c/a/..a/a
+/b/c/./a/..a//. /b/c/a/..a
+/b/c/./a/..a/// /b/c/a/..a
+/b/c/./a/...aaa /b/c/a/...aaa
+/b/c/./a/...aa. /b/c/a/...aa.
+/b/c/./a/...aa/ /b/c/a/...aa
+/b/c/./a/...a.a /b/c/a/...a.a
+/b/c/./a/...a.. /b/c/a/...a..
+/b/c/./a/...a./ /b/c/a/...a.
+/b/c/./a/...a/a /b/c/a/...a/a
+/b/c/./a/...a/. /b/c/a/...a
+/b/c/./a/...a// /b/c/a/...a
+/b/c/./a/....aa /b/c/a/....aa
+/b/c/./a/....a. /b/c/a/....a.
+/b/c/./a/....a/ /b/c/a/....a
+/b/c/./a/.....a /b/c/a/.....a
+/b/c/./a/...... /b/c/a/......
+/b/c/./a/...../ /b/c/a/.....
+/b/c/./a/..../a /b/c/a/..../a
+/b/c/./a/..../. /b/c/a/....
+/b/c/./a/....// /b/c/a/....
+/b/c/./a/.../aa /b/c/a/.../aa
+/b/c/./a/.../a. /b/c/a/.../a.
+/b/c/./a/.../a/ /b/c/a/.../a
+/b/c/./a/.../.a /b/c/a/.../.a
+/b/c/./a/.../.. /b/c/a
+/b/c/./a/..././ /b/c/a/...
+/b/c/./a/...//a /b/c/a/.../a
+/b/c/./a/...//. /b/c/a/...
+/b/c/./a/.../// /b/c/a/...
+/b/c/./a/../aaa /b/c/aaa
+/b/c/./a/../aa. /b/c/aa.
+/b/c/./a/../aa/ /b/c/aa
+/b/c/./a/../a.a /b/c/a.a
+/b/c/./a/../a.. /b/c/a..
+/b/c/./a/../a./ /b/c/a.
+/b/c/./a/../a/a /b/c/a/a
+/b/c/./a/../a/. /b/c/a
+/b/c/./a/../a// /b/c/a
+/b/c/./a/../.aa /b/c/.aa
+/b/c/./a/../.a. /b/c/.a.
+/b/c/./a/../.a/ /b/c/.a
+/b/c/./a/../..a /b/c/..a
+/b/c/./a/../... /b/c/...
+/b/c/./a/../../ /b
+/b/c/./a/.././a /b/c/a
+/b/c/./a/.././. /b/c
+/b/c/./a/../.// /b/c
+/b/c/./a/..//aa /b/c/aa
+/b/c/./a/..//a. /b/c/a.
+/b/c/./a/..//a/ /b/c/a
+/b/c/./a/..//.a /b/c/.a
+/b/c/./a/..//.. /b
+/b/c/./a/..//./ /b/c
+/b/c/./a/..///a /b/c/a
+/b/c/./a/..///. /b/c
+/b/c/./a/..//// /b/c
+/b/c/./a/./aaaa /b/c/a/aaaa
+/b/c/./a/./aaa. /b/c/a/aaa.
+/b/c/./a/./aaa/ /b/c/a/aaa
+/b/c/./a/./aa.a /b/c/a/aa.a
+/b/c/./a/./aa.. /b/c/a/aa..
+/b/c/./a/./aa./ /b/c/a/aa.
+/b/c/./a/./aa/a /b/c/a/aa/a
+/b/c/./a/./aa/. /b/c/a/aa
+/b/c/./a/./aa// /b/c/a/aa
+/b/c/./a/./a.aa /b/c/a/a.aa
+/b/c/./a/./a.a. /b/c/a/a.a.
+/b/c/./a/./a.a/ /b/c/a/a.a
+/b/c/./a/./a..a /b/c/a/a..a
+/b/c/./a/./a... /b/c/a/a...
+/b/c/./a/./a../ /b/c/a/a..
+/b/c/./a/./a./a /b/c/a/a./a
+/b/c/./a/./a./. /b/c/a/a.
+/b/c/./a/./a.// /b/c/a/a.
+/b/c/./a/./a/aa /b/c/a/a/aa
+/b/c/./a/./a/a. /b/c/a/a/a.
+/b/c/./a/./a/a/ /b/c/a/a/a
+/b/c/./a/./a/.a /b/c/a/a/.a
+/b/c/./a/./a/.. /b/c/a
+/b/c/./a/./a/./ /b/c/a/a
+/b/c/./a/./a//a /b/c/a/a/a
+/b/c/./a/./a//. /b/c/a/a
+/b/c/./a/./a/// /b/c/a/a
+/b/c/./a/./.aaa /b/c/a/.aaa
+/b/c/./a/./.aa. /b/c/a/.aa.
+/b/c/./a/./.aa/ /b/c/a/.aa
+/b/c/./a/./.a.a /b/c/a/.a.a
+/b/c/./a/./.a.. /b/c/a/.a..
+/b/c/./a/./.a./ /b/c/a/.a.
+/b/c/./a/./.a/a /b/c/a/.a/a
+/b/c/./a/./.a/. /b/c/a/.a
+/b/c/./a/./.a// /b/c/a/.a
+/b/c/./a/./..aa /b/c/a/..aa
+/b/c/./a/./..a. /b/c/a/..a.
+/b/c/./a/./..a/ /b/c/a/..a
+/b/c/./a/./...a /b/c/a/...a
+/b/c/./a/./.... /b/c/a/....
+/b/c/./a/./.../ /b/c/a/...
+/b/c/./a/./../a /b/c/a
+/b/c/./a/./../. /b/c
+/b/c/./a/./..// /b/c
+/b/c/./a/././aa /b/c/a/aa
+/b/c/./a/././a. /b/c/a/a.
+/b/c/./a/././a/ /b/c/a/a
+/b/c/./a/././.a /b/c/a/.a
+/b/c/./a/././.. /b/c
+/b/c/./a/./././ /b/c/a
+/b/c/./a/././/a /b/c/a/a
+/b/c/./a/././/. /b/c/a
+/b/c/./a/././// /b/c/a
+/b/c/./a/.//aaa /b/c/a/aaa
+/b/c/./a/.//aa. /b/c/a/aa.
+/b/c/./a/.//aa/ /b/c/a/aa
+/b/c/./a/.//a.a /b/c/a/a.a
+/b/c/./a/.//a.. /b/c/a/a..
+/b/c/./a/.//a./ /b/c/a/a.
+/b/c/./a/.//a/a /b/c/a/a/a
+/b/c/./a/.//a/. /b/c/a/a
+/b/c/./a/.//a// /b/c/a/a
+/b/c/./a/.//.aa /b/c/a/.aa
+/b/c/./a/.//.a. /b/c/a/.a.
+/b/c/./a/.//.a/ /b/c/a/.a
+/b/c/./a/.//..a /b/c/a/..a
+/b/c/./a/.//... /b/c/a/...
+/b/c/./a/.//../ /b/c
+/b/c/./a/.//./a /b/c/a/a
+/b/c/./a/.//./. /b/c/a
+/b/c/./a/.//.// /b/c/a
+/b/c/./a/.///aa /b/c/a/aa
+/b/c/./a/.///a. /b/c/a/a.
+/b/c/./a/.///a/ /b/c/a/a
+/b/c/./a/.///.a /b/c/a/.a
+/b/c/./a/.///.. /b/c
+/b/c/./a/.///./ /b/c/a
+/b/c/./a/.////a /b/c/a/a
+/b/c/./a/.////. /b/c/a
+/b/c/./a/.///// /b/c/a
+/b/c/./a//aaaaa /b/c/a/aaaaa
+/b/c/./a//aaaa. /b/c/a/aaaa.
+/b/c/./a//aaaa/ /b/c/a/aaaa
+/b/c/./a//aaa.a /b/c/a/aaa.a
+/b/c/./a//aaa.. /b/c/a/aaa..
+/b/c/./a//aaa./ /b/c/a/aaa.
+/b/c/./a//aaa/a /b/c/a/aaa/a
+/b/c/./a//aaa/. /b/c/a/aaa
+/b/c/./a//aaa// /b/c/a/aaa
+/b/c/./a//aa.aa /b/c/a/aa.aa
+/b/c/./a//aa.a. /b/c/a/aa.a.
+/b/c/./a//aa.a/ /b/c/a/aa.a
+/b/c/./a//aa..a /b/c/a/aa..a
+/b/c/./a//aa... /b/c/a/aa...
+/b/c/./a//aa../ /b/c/a/aa..
+/b/c/./a//aa./a /b/c/a/aa./a
+/b/c/./a//aa./. /b/c/a/aa.
+/b/c/./a//aa.// /b/c/a/aa.
+/b/c/./a//aa/aa /b/c/a/aa/aa
+/b/c/./a//aa/a. /b/c/a/aa/a.
+/b/c/./a//aa/a/ /b/c/a/aa/a
+/b/c/./a//aa/.a /b/c/a/aa/.a
+/b/c/./a//aa/.. /b/c/a
+/b/c/./a//aa/./ /b/c/a/aa
+/b/c/./a//aa//a /b/c/a/aa/a
+/b/c/./a//aa//. /b/c/a/aa
+/b/c/./a//aa/// /b/c/a/aa
+/b/c/./a//a.aaa /b/c/a/a.aaa
+/b/c/./a//a.aa. /b/c/a/a.aa.
+/b/c/./a//a.aa/ /b/c/a/a.aa
+/b/c/./a//a.a.a /b/c/a/a.a.a
+/b/c/./a//a.a.. /b/c/a/a.a..
+/b/c/./a//a.a./ /b/c/a/a.a.
+/b/c/./a//a.a/a /b/c/a/a.a/a
+/b/c/./a//a.a/. /b/c/a/a.a
+/b/c/./a//a.a// /b/c/a/a.a
+/b/c/./a//a..aa /b/c/a/a..aa
+/b/c/./a//a..a. /b/c/a/a..a.
+/b/c/./a//a..a/ /b/c/a/a..a
+/b/c/./a//a...a /b/c/a/a...a
+/b/c/./a//a.... /b/c/a/a....
+/b/c/./a//a.../ /b/c/a/a...
+/b/c/./a//a../a /b/c/a/a../a
+/b/c/./a//a../. /b/c/a/a..
+/b/c/./a//a..// /b/c/a/a..
+/b/c/./a//a./aa /b/c/a/a./aa
+/b/c/./a//a./a. /b/c/a/a./a.
+/b/c/./a//a./a/ /b/c/a/a./a
+/b/c/./a//a./.a /b/c/a/a./.a
+/b/c/./a//a./.. /b/c/a
+/b/c/./a//a././ /b/c/a/a.
+/b/c/./a//a.//a /b/c/a/a./a
+/b/c/./a//a.//. /b/c/a/a.
+/b/c/./a//a./// /b/c/a/a.
+/b/c/./a//a/aaa /b/c/a/a/aaa
+/b/c/./a//a/aa. /b/c/a/a/aa.
+/b/c/./a//a/aa/ /b/c/a/a/aa
+/b/c/./a//a/a.a /b/c/a/a/a.a
+/b/c/./a//a/a.. /b/c/a/a/a..
+/b/c/./a//a/a./ /b/c/a/a/a.
+/b/c/./a//a/a/a /b/c/a/a/a/a
+/b/c/./a//a/a/. /b/c/a/a/a
+/b/c/./a//a/a// /b/c/a/a/a
+/b/c/./a//a/.aa /b/c/a/a/.aa
+/b/c/./a//a/.a. /b/c/a/a/.a.
+/b/c/./a//a/.a/ /b/c/a/a/.a
+/b/c/./a//a/..a /b/c/a/a/..a
+/b/c/./a//a/... /b/c/a/a/...
+/b/c/./a//a/../ /b/c/a
+/b/c/./a//a/./a /b/c/a/a/a
+/b/c/./a//a/./. /b/c/a/a
+/b/c/./a//a/.// /b/c/a/a
+/b/c/./a//a//aa /b/c/a/a/aa
+/b/c/./a//a//a. /b/c/a/a/a.
+/b/c/./a//a//a/ /b/c/a/a/a
+/b/c/./a//a//.a /b/c/a/a/.a
+/b/c/./a//a//.. /b/c/a
+/b/c/./a//a//./ /b/c/a/a
+/b/c/./a//a///a /b/c/a/a/a
+/b/c/./a//a///. /b/c/a/a
+/b/c/./a//a//// /b/c/a/a
+/b/c/./a//.aaaa /b/c/a/.aaaa
+/b/c/./a//.aaa. /b/c/a/.aaa.
+/b/c/./a//.aaa/ /b/c/a/.aaa
+/b/c/./a//.aa.a /b/c/a/.aa.a
+/b/c/./a//.aa.. /b/c/a/.aa..
+/b/c/./a//.aa./ /b/c/a/.aa.
+/b/c/./a//.aa/a /b/c/a/.aa/a
+/b/c/./a//.aa/. /b/c/a/.aa
+/b/c/./a//.aa// /b/c/a/.aa
+/b/c/./a//.a.aa /b/c/a/.a.aa
+/b/c/./a//.a.a. /b/c/a/.a.a.
+/b/c/./a//.a.a/ /b/c/a/.a.a
+/b/c/./a//.a..a /b/c/a/.a..a
+/b/c/./a//.a... /b/c/a/.a...
+/b/c/./a//.a../ /b/c/a/.a..
+/b/c/./a//.a./a /b/c/a/.a./a
+/b/c/./a//.a./. /b/c/a/.a.
+/b/c/./a//.a.// /b/c/a/.a.
+/b/c/./a//.a/aa /b/c/a/.a/aa
+/b/c/./a//.a/a. /b/c/a/.a/a.
+/b/c/./a//.a/a/ /b/c/a/.a/a
+/b/c/./a//.a/.a /b/c/a/.a/.a
+/b/c/./a//.a/.. /b/c/a
+/b/c/./a//.a/./ /b/c/a/.a
+/b/c/./a//.a//a /b/c/a/.a/a
+/b/c/./a//.a//. /b/c/a/.a
+/b/c/./a//.a/// /b/c/a/.a
+/b/c/./a//..aaa /b/c/a/..aaa
+/b/c/./a//..aa. /b/c/a/..aa.
+/b/c/./a//..aa/ /b/c/a/..aa
+/b/c/./a//..a.a /b/c/a/..a.a
+/b/c/./a//..a.. /b/c/a/..a..
+/b/c/./a//..a./ /b/c/a/..a.
+/b/c/./a//..a/a /b/c/a/..a/a
+/b/c/./a//..a/. /b/c/a/..a
+/b/c/./a//..a// /b/c/a/..a
+/b/c/./a//...aa /b/c/a/...aa
+/b/c/./a//...a. /b/c/a/...a.
+/b/c/./a//...a/ /b/c/a/...a
+/b/c/./a//....a /b/c/a/....a
+/b/c/./a//..... /b/c/a/.....
+/b/c/./a//..../ /b/c/a/....
+/b/c/./a//.../a /b/c/a/.../a
+/b/c/./a//.../. /b/c/a/...
+/b/c/./a//...// /b/c/a/...
+/b/c/./a//../aa /b/c/aa
+/b/c/./a//../a. /b/c/a.
+/b/c/./a//../a/ /b/c/a
+/b/c/./a//../.a /b/c/.a
+/b/c/./a//../.. /b
+/b/c/./a//.././ /b/c
+/b/c/./a//..//a /b/c/a
+/b/c/./a//..//. /b/c
+/b/c/./a//../// /b/c
+/b/c/./a//./aaa /b/c/a/aaa
+/b/c/./a//./aa. /b/c/a/aa.
+/b/c/./a//./aa/ /b/c/a/aa
+/b/c/./a//./a.a /b/c/a/a.a
+/b/c/./a//./a.. /b/c/a/a..
+/b/c/./a//./a./ /b/c/a/a.
+/b/c/./a//./a/a /b/c/a/a/a
+/b/c/./a//./a/. /b/c/a/a
+/b/c/./a//./a// /b/c/a/a
+/b/c/./a//./.aa /b/c/a/.aa
+/b/c/./a//./.a. /b/c/a/.a.
+/b/c/./a//./.a/ /b/c/a/.a
+/b/c/./a//./..a /b/c/a/..a
+/b/c/./a//./... /b/c/a/...
+/b/c/./a//./../ /b/c
+/b/c/./a//././a /b/c/a/a
+/b/c/./a//././. /b/c/a
+/b/c/./a//./.// /b/c/a
+/b/c/./a//.//aa /b/c/a/aa
+/b/c/./a//.//a. /b/c/a/a.
+/b/c/./a//.//a/ /b/c/a/a
+/b/c/./a//.//.a /b/c/a/.a
+/b/c/./a//.//.. /b/c
+/b/c/./a//.//./ /b/c/a
+/b/c/./a//.///a /b/c/a/a
+/b/c/./a//.///. /b/c/a
+/b/c/./a//.//// /b/c/a
+/b/c/./a///aaaa /b/c/a/aaaa
+/b/c/./a///aaa. /b/c/a/aaa.
+/b/c/./a///aaa/ /b/c/a/aaa
+/b/c/./a///aa.a /b/c/a/aa.a
+/b/c/./a///aa.. /b/c/a/aa..
+/b/c/./a///aa./ /b/c/a/aa.
+/b/c/./a///aa/a /b/c/a/aa/a
+/b/c/./a///aa/. /b/c/a/aa
+/b/c/./a///aa// /b/c/a/aa
+/b/c/./a///a.aa /b/c/a/a.aa
+/b/c/./a///a.a. /b/c/a/a.a.
+/b/c/./a///a.a/ /b/c/a/a.a
+/b/c/./a///a..a /b/c/a/a..a
+/b/c/./a///a... /b/c/a/a...
+/b/c/./a///a../ /b/c/a/a..
+/b/c/./a///a./a /b/c/a/a./a
+/b/c/./a///a./. /b/c/a/a.
+/b/c/./a///a.// /b/c/a/a.
+/b/c/./a///a/aa /b/c/a/a/aa
+/b/c/./a///a/a. /b/c/a/a/a.
+/b/c/./a///a/a/ /b/c/a/a/a
+/b/c/./a///a/.a /b/c/a/a/.a
+/b/c/./a///a/.. /b/c/a
+/b/c/./a///a/./ /b/c/a/a
+/b/c/./a///a//a /b/c/a/a/a
+/b/c/./a///a//. /b/c/a/a
+/b/c/./a///a/// /b/c/a/a
+/b/c/./a///.aaa /b/c/a/.aaa
+/b/c/./a///.aa. /b/c/a/.aa.
+/b/c/./a///.aa/ /b/c/a/.aa
+/b/c/./a///.a.a /b/c/a/.a.a
+/b/c/./a///.a.. /b/c/a/.a..
+/b/c/./a///.a./ /b/c/a/.a.
+/b/c/./a///.a/a /b/c/a/.a/a
+/b/c/./a///.a/. /b/c/a/.a
+/b/c/./a///.a// /b/c/a/.a
+/b/c/./a///..aa /b/c/a/..aa
+/b/c/./a///..a. /b/c/a/..a.
+/b/c/./a///..a/ /b/c/a/..a
+/b/c/./a///...a /b/c/a/...a
+/b/c/./a///.... /b/c/a/....
+/b/c/./a///.../ /b/c/a/...
+/b/c/./a///../a /b/c/a
+/b/c/./a///../. /b/c
+/b/c/./a///..// /b/c
+/b/c/./a///./aa /b/c/a/aa
+/b/c/./a///./a. /b/c/a/a.
+/b/c/./a///./a/ /b/c/a/a
+/b/c/./a///./.a /b/c/a/.a
+/b/c/./a///./.. /b/c
+/b/c/./a///././ /b/c/a
+/b/c/./a///.//a /b/c/a/a
+/b/c/./a///.//. /b/c/a
+/b/c/./a///./// /b/c/a
+/b/c/./a////aaa /b/c/a/aaa
+/b/c/./a////aa. /b/c/a/aa.
+/b/c/./a////aa/ /b/c/a/aa
+/b/c/./a////a.a /b/c/a/a.a
+/b/c/./a////a.. /b/c/a/a..
+/b/c/./a////a./ /b/c/a/a.
+/b/c/./a////a/a /b/c/a/a/a
+/b/c/./a////a/. /b/c/a/a
+/b/c/./a////a// /b/c/a/a
+/b/c/./a////.aa /b/c/a/.aa
+/b/c/./a////.a. /b/c/a/.a.
+/b/c/./a////.a/ /b/c/a/.a
+/b/c/./a////..a /b/c/a/..a
+/b/c/./a////... /b/c/a/...
+/b/c/./a////../ /b/c
+/b/c/./a////./a /b/c/a/a
+/b/c/./a////./. /b/c/a
+/b/c/./a////.// /b/c/a
+/b/c/./a/////aa /b/c/a/aa
+/b/c/./a/////a. /b/c/a/a.
+/b/c/./a/////a/ /b/c/a/a
+/b/c/./a/////.a /b/c/a/.a
+/b/c/./a/////.. /b/c
+/b/c/./a/////./ /b/c/a
+/b/c/./a//////a /b/c/a/a
+/b/c/./a//////. /b/c/a
+/b/c/./a/////// /b/c/a
+/b/c/./.aaaaaaa /b/c/.aaaaaaa
+/b/c/./.aaaaaa. /b/c/.aaaaaa.
+/b/c/./.aaaaaa/ /b/c/.aaaaaa
+/b/c/./.aaaaa.a /b/c/.aaaaa.a
+/b/c/./.aaaaa.. /b/c/.aaaaa..
+/b/c/./.aaaaa./ /b/c/.aaaaa.
+/b/c/./.aaaaa/a /b/c/.aaaaa/a
+/b/c/./.aaaaa/. /b/c/.aaaaa
+/b/c/./.aaaaa// /b/c/.aaaaa
+/b/c/./.aaaa.aa /b/c/.aaaa.aa
+/b/c/./.aaaa.a. /b/c/.aaaa.a.
+/b/c/./.aaaa.a/ /b/c/.aaaa.a
+/b/c/./.aaaa..a /b/c/.aaaa..a
+/b/c/./.aaaa... /b/c/.aaaa...
+/b/c/./.aaaa../ /b/c/.aaaa..
+/b/c/./.aaaa./a /b/c/.aaaa./a
+/b/c/./.aaaa./. /b/c/.aaaa.
+/b/c/./.aaaa.// /b/c/.aaaa.
+/b/c/./.aaaa/aa /b/c/.aaaa/aa
+/b/c/./.aaaa/a. /b/c/.aaaa/a.
+/b/c/./.aaaa/a/ /b/c/.aaaa/a
+/b/c/./.aaaa/.a /b/c/.aaaa/.a
+/b/c/./.aaaa/.. /b/c
+/b/c/./.aaaa/./ /b/c/.aaaa
+/b/c/./.aaaa//a /b/c/.aaaa/a
+/b/c/./.aaaa//. /b/c/.aaaa
+/b/c/./.aaaa/// /b/c/.aaaa
+/b/c/./.aaa.aaa /b/c/.aaa.aaa
+/b/c/./.aaa.aa. /b/c/.aaa.aa.
+/b/c/./.aaa.aa/ /b/c/.aaa.aa
+/b/c/./.aaa.a.a /b/c/.aaa.a.a
+/b/c/./.aaa.a.. /b/c/.aaa.a..
+/b/c/./.aaa.a./ /b/c/.aaa.a.
+/b/c/./.aaa.a/a /b/c/.aaa.a/a
+/b/c/./.aaa.a/. /b/c/.aaa.a
+/b/c/./.aaa.a// /b/c/.aaa.a
+/b/c/./.aaa..aa /b/c/.aaa..aa
+/b/c/./.aaa..a. /b/c/.aaa..a.
+/b/c/./.aaa..a/ /b/c/.aaa..a
+/b/c/./.aaa...a /b/c/.aaa...a
+/b/c/./.aaa.... /b/c/.aaa....
+/b/c/./.aaa.../ /b/c/.aaa...
+/b/c/./.aaa../a /b/c/.aaa../a
+/b/c/./.aaa../. /b/c/.aaa..
+/b/c/./.aaa..// /b/c/.aaa..
+/b/c/./.aaa./aa /b/c/.aaa./aa
+/b/c/./.aaa./a. /b/c/.aaa./a.
+/b/c/./.aaa./a/ /b/c/.aaa./a
+/b/c/./.aaa./.a /b/c/.aaa./.a
+/b/c/./.aaa./.. /b/c
+/b/c/./.aaa././ /b/c/.aaa.
+/b/c/./.aaa.//a /b/c/.aaa./a
+/b/c/./.aaa.//. /b/c/.aaa.
+/b/c/./.aaa./// /b/c/.aaa.
+/b/c/./.aaa/aaa /b/c/.aaa/aaa
+/b/c/./.aaa/aa. /b/c/.aaa/aa.
+/b/c/./.aaa/aa/ /b/c/.aaa/aa
+/b/c/./.aaa/a.a /b/c/.aaa/a.a
+/b/c/./.aaa/a.. /b/c/.aaa/a..
+/b/c/./.aaa/a./ /b/c/.aaa/a.
+/b/c/./.aaa/a/a /b/c/.aaa/a/a
+/b/c/./.aaa/a/. /b/c/.aaa/a
+/b/c/./.aaa/a// /b/c/.aaa/a
+/b/c/./.aaa/.aa /b/c/.aaa/.aa
+/b/c/./.aaa/.a. /b/c/.aaa/.a.
+/b/c/./.aaa/.a/ /b/c/.aaa/.a
+/b/c/./.aaa/..a /b/c/.aaa/..a
+/b/c/./.aaa/... /b/c/.aaa/...
+/b/c/./.aaa/../ /b/c
+/b/c/./.aaa/./a /b/c/.aaa/a
+/b/c/./.aaa/./. /b/c/.aaa
+/b/c/./.aaa/.// /b/c/.aaa
+/b/c/./.aaa//aa /b/c/.aaa/aa
+/b/c/./.aaa//a. /b/c/.aaa/a.
+/b/c/./.aaa//a/ /b/c/.aaa/a
+/b/c/./.aaa//.a /b/c/.aaa/.a
+/b/c/./.aaa//.. /b/c
+/b/c/./.aaa//./ /b/c/.aaa
+/b/c/./.aaa///a /b/c/.aaa/a
+/b/c/./.aaa///. /b/c/.aaa
+/b/c/./.aaa//// /b/c/.aaa
+/b/c/./.aa.aaaa /b/c/.aa.aaaa
+/b/c/./.aa.aaa. /b/c/.aa.aaa.
+/b/c/./.aa.aaa/ /b/c/.aa.aaa
+/b/c/./.aa.aa.a /b/c/.aa.aa.a
+/b/c/./.aa.aa.. /b/c/.aa.aa..
+/b/c/./.aa.aa./ /b/c/.aa.aa.
+/b/c/./.aa.aa/a /b/c/.aa.aa/a
+/b/c/./.aa.aa/. /b/c/.aa.aa
+/b/c/./.aa.aa// /b/c/.aa.aa
+/b/c/./.aa.a.aa /b/c/.aa.a.aa
+/b/c/./.aa.a.a. /b/c/.aa.a.a.
+/b/c/./.aa.a.a/ /b/c/.aa.a.a
+/b/c/./.aa.a..a /b/c/.aa.a..a
+/b/c/./.aa.a... /b/c/.aa.a...
+/b/c/./.aa.a../ /b/c/.aa.a..
+/b/c/./.aa.a./a /b/c/.aa.a./a
+/b/c/./.aa.a./. /b/c/.aa.a.
+/b/c/./.aa.a.// /b/c/.aa.a.
+/b/c/./.aa.a/aa /b/c/.aa.a/aa
+/b/c/./.aa.a/a. /b/c/.aa.a/a.
+/b/c/./.aa.a/a/ /b/c/.aa.a/a
+/b/c/./.aa.a/.a /b/c/.aa.a/.a
+/b/c/./.aa.a/.. /b/c
+/b/c/./.aa.a/./ /b/c/.aa.a
+/b/c/./.aa.a//a /b/c/.aa.a/a
+/b/c/./.aa.a//. /b/c/.aa.a
+/b/c/./.aa.a/// /b/c/.aa.a
+/b/c/./.aa..aaa /b/c/.aa..aaa
+/b/c/./.aa..aa. /b/c/.aa..aa.
+/b/c/./.aa..aa/ /b/c/.aa..aa
+/b/c/./.aa..a.a /b/c/.aa..a.a
+/b/c/./.aa..a.. /b/c/.aa..a..
+/b/c/./.aa..a./ /b/c/.aa..a.
+/b/c/./.aa..a/a /b/c/.aa..a/a
+/b/c/./.aa..a/. /b/c/.aa..a
+/b/c/./.aa..a// /b/c/.aa..a
+/b/c/./.aa...aa /b/c/.aa...aa
+/b/c/./.aa...a. /b/c/.aa...a.
+/b/c/./.aa...a/ /b/c/.aa...a
+/b/c/./.aa....a /b/c/.aa....a
+/b/c/./.aa..... /b/c/.aa.....
+/b/c/./.aa..../ /b/c/.aa....
+/b/c/./.aa.../a /b/c/.aa.../a
+/b/c/./.aa.../. /b/c/.aa...
+/b/c/./.aa...// /b/c/.aa...
+/b/c/./.aa../aa /b/c/.aa../aa
+/b/c/./.aa../a. /b/c/.aa../a.
+/b/c/./.aa../a/ /b/c/.aa../a
+/b/c/./.aa../.a /b/c/.aa../.a
+/b/c/./.aa../.. /b/c
+/b/c/./.aa.././ /b/c/.aa..
+/b/c/./.aa..//a /b/c/.aa../a
+/b/c/./.aa..//. /b/c/.aa..
+/b/c/./.aa../// /b/c/.aa..
+/b/c/./.aa./aaa /b/c/.aa./aaa
+/b/c/./.aa./aa. /b/c/.aa./aa.
+/b/c/./.aa./aa/ /b/c/.aa./aa
+/b/c/./.aa./a.a /b/c/.aa./a.a
+/b/c/./.aa./a.. /b/c/.aa./a..
+/b/c/./.aa./a./ /b/c/.aa./a.
+/b/c/./.aa./a/a /b/c/.aa./a/a
+/b/c/./.aa./a/. /b/c/.aa./a
+/b/c/./.aa./a// /b/c/.aa./a
+/b/c/./.aa./.aa /b/c/.aa./.aa
+/b/c/./.aa./.a. /b/c/.aa./.a.
+/b/c/./.aa./.a/ /b/c/.aa./.a
+/b/c/./.aa./..a /b/c/.aa./..a
+/b/c/./.aa./... /b/c/.aa./...
+/b/c/./.aa./../ /b/c
+/b/c/./.aa././a /b/c/.aa./a
+/b/c/./.aa././. /b/c/.aa.
+/b/c/./.aa./.// /b/c/.aa.
+/b/c/./.aa.//aa /b/c/.aa./aa
+/b/c/./.aa.//a. /b/c/.aa./a.
+/b/c/./.aa.//a/ /b/c/.aa./a
+/b/c/./.aa.//.a /b/c/.aa./.a
+/b/c/./.aa.//.. /b/c
+/b/c/./.aa.//./ /b/c/.aa.
+/b/c/./.aa.///a /b/c/.aa./a
+/b/c/./.aa.///. /b/c/.aa.
+/b/c/./.aa.//// /b/c/.aa.
+/b/c/./.aa/aaaa /b/c/.aa/aaaa
+/b/c/./.aa/aaa. /b/c/.aa/aaa.
+/b/c/./.aa/aaa/ /b/c/.aa/aaa
+/b/c/./.aa/aa.a /b/c/.aa/aa.a
+/b/c/./.aa/aa.. /b/c/.aa/aa..
+/b/c/./.aa/aa./ /b/c/.aa/aa.
+/b/c/./.aa/aa/a /b/c/.aa/aa/a
+/b/c/./.aa/aa/. /b/c/.aa/aa
+/b/c/./.aa/aa// /b/c/.aa/aa
+/b/c/./.aa/a.aa /b/c/.aa/a.aa
+/b/c/./.aa/a.a. /b/c/.aa/a.a.
+/b/c/./.aa/a.a/ /b/c/.aa/a.a
+/b/c/./.aa/a..a /b/c/.aa/a..a
+/b/c/./.aa/a... /b/c/.aa/a...
+/b/c/./.aa/a../ /b/c/.aa/a..
+/b/c/./.aa/a./a /b/c/.aa/a./a
+/b/c/./.aa/a./. /b/c/.aa/a.
+/b/c/./.aa/a.// /b/c/.aa/a.
+/b/c/./.aa/a/aa /b/c/.aa/a/aa
+/b/c/./.aa/a/a. /b/c/.aa/a/a.
+/b/c/./.aa/a/a/ /b/c/.aa/a/a
+/b/c/./.aa/a/.a /b/c/.aa/a/.a
+/b/c/./.aa/a/.. /b/c/.aa
+/b/c/./.aa/a/./ /b/c/.aa/a
+/b/c/./.aa/a//a /b/c/.aa/a/a
+/b/c/./.aa/a//. /b/c/.aa/a
+/b/c/./.aa/a/// /b/c/.aa/a
+/b/c/./.aa/.aaa /b/c/.aa/.aaa
+/b/c/./.aa/.aa. /b/c/.aa/.aa.
+/b/c/./.aa/.aa/ /b/c/.aa/.aa
+/b/c/./.aa/.a.a /b/c/.aa/.a.a
+/b/c/./.aa/.a.. /b/c/.aa/.a..
+/b/c/./.aa/.a./ /b/c/.aa/.a.
+/b/c/./.aa/.a/a /b/c/.aa/.a/a
+/b/c/./.aa/.a/. /b/c/.aa/.a
+/b/c/./.aa/.a// /b/c/.aa/.a
+/b/c/./.aa/..aa /b/c/.aa/..aa
+/b/c/./.aa/..a. /b/c/.aa/..a.
+/b/c/./.aa/..a/ /b/c/.aa/..a
+/b/c/./.aa/...a /b/c/.aa/...a
+/b/c/./.aa/.... /b/c/.aa/....
+/b/c/./.aa/.../ /b/c/.aa/...
+/b/c/./.aa/../a /b/c/a
+/b/c/./.aa/../. /b/c
+/b/c/./.aa/..// /b/c
+/b/c/./.aa/./aa /b/c/.aa/aa
+/b/c/./.aa/./a. /b/c/.aa/a.
+/b/c/./.aa/./a/ /b/c/.aa/a
+/b/c/./.aa/./.a /b/c/.aa/.a
+/b/c/./.aa/./.. /b/c
+/b/c/./.aa/././ /b/c/.aa
+/b/c/./.aa/.//a /b/c/.aa/a
+/b/c/./.aa/.//. /b/c/.aa
+/b/c/./.aa/./// /b/c/.aa
+/b/c/./.aa//aaa /b/c/.aa/aaa
+/b/c/./.aa//aa. /b/c/.aa/aa.
+/b/c/./.aa//aa/ /b/c/.aa/aa
+/b/c/./.aa//a.a /b/c/.aa/a.a
+/b/c/./.aa//a.. /b/c/.aa/a..
+/b/c/./.aa//a./ /b/c/.aa/a.
+/b/c/./.aa//a/a /b/c/.aa/a/a
+/b/c/./.aa//a/. /b/c/.aa/a
+/b/c/./.aa//a// /b/c/.aa/a
+/b/c/./.aa//.aa /b/c/.aa/.aa
+/b/c/./.aa//.a. /b/c/.aa/.a.
+/b/c/./.aa//.a/ /b/c/.aa/.a
+/b/c/./.aa//..a /b/c/.aa/..a
+/b/c/./.aa//... /b/c/.aa/...
+/b/c/./.aa//../ /b/c
+/b/c/./.aa//./a /b/c/.aa/a
+/b/c/./.aa//./. /b/c/.aa
+/b/c/./.aa//.// /b/c/.aa
+/b/c/./.aa///aa /b/c/.aa/aa
+/b/c/./.aa///a. /b/c/.aa/a.
+/b/c/./.aa///a/ /b/c/.aa/a
+/b/c/./.aa///.a /b/c/.aa/.a
+/b/c/./.aa///.. /b/c
+/b/c/./.aa///./ /b/c/.aa
+/b/c/./.aa////a /b/c/.aa/a
+/b/c/./.aa////. /b/c/.aa
+/b/c/./.aa///// /b/c/.aa
+/b/c/./.a.aaaaa /b/c/.a.aaaaa
+/b/c/./.a.aaaa. /b/c/.a.aaaa.
+/b/c/./.a.aaaa/ /b/c/.a.aaaa
+/b/c/./.a.aaa.a /b/c/.a.aaa.a
+/b/c/./.a.aaa.. /b/c/.a.aaa..
+/b/c/./.a.aaa./ /b/c/.a.aaa.
+/b/c/./.a.aaa/a /b/c/.a.aaa/a
+/b/c/./.a.aaa/. /b/c/.a.aaa
+/b/c/./.a.aaa// /b/c/.a.aaa
+/b/c/./.a.aa.aa /b/c/.a.aa.aa
+/b/c/./.a.aa.a. /b/c/.a.aa.a.
+/b/c/./.a.aa.a/ /b/c/.a.aa.a
+/b/c/./.a.aa..a /b/c/.a.aa..a
+/b/c/./.a.aa... /b/c/.a.aa...
+/b/c/./.a.aa../ /b/c/.a.aa..
+/b/c/./.a.aa./a /b/c/.a.aa./a
+/b/c/./.a.aa./. /b/c/.a.aa.
+/b/c/./.a.aa.// /b/c/.a.aa.
+/b/c/./.a.aa/aa /b/c/.a.aa/aa
+/b/c/./.a.aa/a. /b/c/.a.aa/a.
+/b/c/./.a.aa/a/ /b/c/.a.aa/a
+/b/c/./.a.aa/.a /b/c/.a.aa/.a
+/b/c/./.a.aa/.. /b/c
+/b/c/./.a.aa/./ /b/c/.a.aa
+/b/c/./.a.aa//a /b/c/.a.aa/a
+/b/c/./.a.aa//. /b/c/.a.aa
+/b/c/./.a.aa/// /b/c/.a.aa
+/b/c/./.a.a.aaa /b/c/.a.a.aaa
+/b/c/./.a.a.aa. /b/c/.a.a.aa.
+/b/c/./.a.a.aa/ /b/c/.a.a.aa
+/b/c/./.a.a.a.a /b/c/.a.a.a.a
+/b/c/./.a.a.a.. /b/c/.a.a.a..
+/b/c/./.a.a.a./ /b/c/.a.a.a.
+/b/c/./.a.a.a/a /b/c/.a.a.a/a
+/b/c/./.a.a.a/. /b/c/.a.a.a
+/b/c/./.a.a.a// /b/c/.a.a.a
+/b/c/./.a.a..aa /b/c/.a.a..aa
+/b/c/./.a.a..a. /b/c/.a.a..a.
+/b/c/./.a.a..a/ /b/c/.a.a..a
+/b/c/./.a.a...a /b/c/.a.a...a
+/b/c/./.a.a.... /b/c/.a.a....
+/b/c/./.a.a.../ /b/c/.a.a...
+/b/c/./.a.a../a /b/c/.a.a../a
+/b/c/./.a.a../. /b/c/.a.a..
+/b/c/./.a.a..// /b/c/.a.a..
+/b/c/./.a.a./aa /b/c/.a.a./aa
+/b/c/./.a.a./a. /b/c/.a.a./a.
+/b/c/./.a.a./a/ /b/c/.a.a./a
+/b/c/./.a.a./.a /b/c/.a.a./.a
+/b/c/./.a.a./.. /b/c
+/b/c/./.a.a././ /b/c/.a.a.
+/b/c/./.a.a.//a /b/c/.a.a./a
+/b/c/./.a.a.//. /b/c/.a.a.
+/b/c/./.a.a./// /b/c/.a.a.
+/b/c/./.a.a/aaa /b/c/.a.a/aaa
+/b/c/./.a.a/aa. /b/c/.a.a/aa.
+/b/c/./.a.a/aa/ /b/c/.a.a/aa
+/b/c/./.a.a/a.a /b/c/.a.a/a.a
+/b/c/./.a.a/a.. /b/c/.a.a/a..
+/b/c/./.a.a/a./ /b/c/.a.a/a.
+/b/c/./.a.a/a/a /b/c/.a.a/a/a
+/b/c/./.a.a/a/. /b/c/.a.a/a
+/b/c/./.a.a/a// /b/c/.a.a/a
+/b/c/./.a.a/.aa /b/c/.a.a/.aa
+/b/c/./.a.a/.a. /b/c/.a.a/.a.
+/b/c/./.a.a/.a/ /b/c/.a.a/.a
+/b/c/./.a.a/..a /b/c/.a.a/..a
+/b/c/./.a.a/... /b/c/.a.a/...
+/b/c/./.a.a/../ /b/c
+/b/c/./.a.a/./a /b/c/.a.a/a
+/b/c/./.a.a/./. /b/c/.a.a
+/b/c/./.a.a/.// /b/c/.a.a
+/b/c/./.a.a//aa /b/c/.a.a/aa
+/b/c/./.a.a//a. /b/c/.a.a/a.
+/b/c/./.a.a//a/ /b/c/.a.a/a
+/b/c/./.a.a//.a /b/c/.a.a/.a
+/b/c/./.a.a//.. /b/c
+/b/c/./.a.a//./ /b/c/.a.a
+/b/c/./.a.a///a /b/c/.a.a/a
+/b/c/./.a.a///. /b/c/.a.a
+/b/c/./.a.a//// /b/c/.a.a
+/b/c/./.a..aaaa /b/c/.a..aaaa
+/b/c/./.a..aaa. /b/c/.a..aaa.
+/b/c/./.a..aaa/ /b/c/.a..aaa
+/b/c/./.a..aa.a /b/c/.a..aa.a
+/b/c/./.a..aa.. /b/c/.a..aa..
+/b/c/./.a..aa./ /b/c/.a..aa.
+/b/c/./.a..aa/a /b/c/.a..aa/a
+/b/c/./.a..aa/. /b/c/.a..aa
+/b/c/./.a..aa// /b/c/.a..aa
+/b/c/./.a..a.aa /b/c/.a..a.aa
+/b/c/./.a..a.a. /b/c/.a..a.a.
+/b/c/./.a..a.a/ /b/c/.a..a.a
+/b/c/./.a..a..a /b/c/.a..a..a
+/b/c/./.a..a... /b/c/.a..a...
+/b/c/./.a..a../ /b/c/.a..a..
+/b/c/./.a..a./a /b/c/.a..a./a
+/b/c/./.a..a./. /b/c/.a..a.
+/b/c/./.a..a.// /b/c/.a..a.
+/b/c/./.a..a/aa /b/c/.a..a/aa
+/b/c/./.a..a/a. /b/c/.a..a/a.
+/b/c/./.a..a/a/ /b/c/.a..a/a
+/b/c/./.a..a/.a /b/c/.a..a/.a
+/b/c/./.a..a/.. /b/c
+/b/c/./.a..a/./ /b/c/.a..a
+/b/c/./.a..a//a /b/c/.a..a/a
+/b/c/./.a..a//. /b/c/.a..a
+/b/c/./.a..a/// /b/c/.a..a
+/b/c/./.a...aaa /b/c/.a...aaa
+/b/c/./.a...aa. /b/c/.a...aa.
+/b/c/./.a...aa/ /b/c/.a...aa
+/b/c/./.a...a.a /b/c/.a...a.a
+/b/c/./.a...a.. /b/c/.a...a..
+/b/c/./.a...a./ /b/c/.a...a.
+/b/c/./.a...a/a /b/c/.a...a/a
+/b/c/./.a...a/. /b/c/.a...a
+/b/c/./.a...a// /b/c/.a...a
+/b/c/./.a....aa /b/c/.a....aa
+/b/c/./.a....a. /b/c/.a....a.
+/b/c/./.a....a/ /b/c/.a....a
+/b/c/./.a.....a /b/c/.a.....a
+/b/c/./.a...... /b/c/.a......
+/b/c/./.a...../ /b/c/.a.....
+/b/c/./.a..../a /b/c/.a..../a
+/b/c/./.a..../. /b/c/.a....
+/b/c/./.a....// /b/c/.a....
+/b/c/./.a.../aa /b/c/.a.../aa
+/b/c/./.a.../a. /b/c/.a.../a.
+/b/c/./.a.../a/ /b/c/.a.../a
+/b/c/./.a.../.a /b/c/.a.../.a
+/b/c/./.a.../.. /b/c
+/b/c/./.a..././ /b/c/.a...
+/b/c/./.a...//a /b/c/.a.../a
+/b/c/./.a...//. /b/c/.a...
+/b/c/./.a.../// /b/c/.a...
+/b/c/./.a../aaa /b/c/.a../aaa
+/b/c/./.a../aa. /b/c/.a../aa.
+/b/c/./.a../aa/ /b/c/.a../aa
+/b/c/./.a../a.a /b/c/.a../a.a
+/b/c/./.a../a.. /b/c/.a../a..
+/b/c/./.a../a./ /b/c/.a../a.
+/b/c/./.a../a/a /b/c/.a../a/a
+/b/c/./.a../a/. /b/c/.a../a
+/b/c/./.a../a// /b/c/.a../a
+/b/c/./.a../.aa /b/c/.a../.aa
+/b/c/./.a../.a. /b/c/.a../.a.
+/b/c/./.a../.a/ /b/c/.a../.a
+/b/c/./.a../..a /b/c/.a../..a
+/b/c/./.a../... /b/c/.a../...
+/b/c/./.a../../ /b/c
+/b/c/./.a.././a /b/c/.a../a
+/b/c/./.a.././. /b/c/.a..
+/b/c/./.a../.// /b/c/.a..
+/b/c/./.a..//aa /b/c/.a../aa
+/b/c/./.a..//a. /b/c/.a../a.
+/b/c/./.a..//a/ /b/c/.a../a
+/b/c/./.a..//.a /b/c/.a../.a
+/b/c/./.a..//.. /b/c
+/b/c/./.a..//./ /b/c/.a..
+/b/c/./.a..///a /b/c/.a../a
+/b/c/./.a..///. /b/c/.a..
+/b/c/./.a..//// /b/c/.a..
+/b/c/./.a./aaaa /b/c/.a./aaaa
+/b/c/./.a./aaa. /b/c/.a./aaa.
+/b/c/./.a./aaa/ /b/c/.a./aaa
+/b/c/./.a./aa.a /b/c/.a./aa.a
+/b/c/./.a./aa.. /b/c/.a./aa..
+/b/c/./.a./aa./ /b/c/.a./aa.
+/b/c/./.a./aa/a /b/c/.a./aa/a
+/b/c/./.a./aa/. /b/c/.a./aa
+/b/c/./.a./aa// /b/c/.a./aa
+/b/c/./.a./a.aa /b/c/.a./a.aa
+/b/c/./.a./a.a. /b/c/.a./a.a.
+/b/c/./.a./a.a/ /b/c/.a./a.a
+/b/c/./.a./a..a /b/c/.a./a..a
+/b/c/./.a./a... /b/c/.a./a...
+/b/c/./.a./a../ /b/c/.a./a..
+/b/c/./.a./a./a /b/c/.a./a./a
+/b/c/./.a./a./. /b/c/.a./a.
+/b/c/./.a./a.// /b/c/.a./a.
+/b/c/./.a./a/aa /b/c/.a./a/aa
+/b/c/./.a./a/a. /b/c/.a./a/a.
+/b/c/./.a./a/a/ /b/c/.a./a/a
+/b/c/./.a./a/.a /b/c/.a./a/.a
+/b/c/./.a./a/.. /b/c/.a.
+/b/c/./.a./a/./ /b/c/.a./a
+/b/c/./.a./a//a /b/c/.a./a/a
+/b/c/./.a./a//. /b/c/.a./a
+/b/c/./.a./a/// /b/c/.a./a
+/b/c/./.a./.aaa /b/c/.a./.aaa
+/b/c/./.a./.aa. /b/c/.a./.aa.
+/b/c/./.a./.aa/ /b/c/.a./.aa
+/b/c/./.a./.a.a /b/c/.a./.a.a
+/b/c/./.a./.a.. /b/c/.a./.a..
+/b/c/./.a./.a./ /b/c/.a./.a.
+/b/c/./.a./.a/a /b/c/.a./.a/a
+/b/c/./.a./.a/. /b/c/.a./.a
+/b/c/./.a./.a// /b/c/.a./.a
+/b/c/./.a./..aa /b/c/.a./..aa
+/b/c/./.a./..a. /b/c/.a./..a.
+/b/c/./.a./..a/ /b/c/.a./..a
+/b/c/./.a./...a /b/c/.a./...a
+/b/c/./.a./.... /b/c/.a./....
+/b/c/./.a./.../ /b/c/.a./...
+/b/c/./.a./../a /b/c/a
+/b/c/./.a./../. /b/c
+/b/c/./.a./..// /b/c
+/b/c/./.a././aa /b/c/.a./aa
+/b/c/./.a././a. /b/c/.a./a.
+/b/c/./.a././a/ /b/c/.a./a
+/b/c/./.a././.a /b/c/.a./.a
+/b/c/./.a././.. /b/c
+/b/c/./.a./././ /b/c/.a.
+/b/c/./.a././/a /b/c/.a./a
+/b/c/./.a././/. /b/c/.a.
+/b/c/./.a././// /b/c/.a.
+/b/c/./.a.//aaa /b/c/.a./aaa
+/b/c/./.a.//aa. /b/c/.a./aa.
+/b/c/./.a.//aa/ /b/c/.a./aa
+/b/c/./.a.//a.a /b/c/.a./a.a
+/b/c/./.a.//a.. /b/c/.a./a..
+/b/c/./.a.//a./ /b/c/.a./a.
+/b/c/./.a.//a/a /b/c/.a./a/a
+/b/c/./.a.//a/. /b/c/.a./a
+/b/c/./.a.//a// /b/c/.a./a
+/b/c/./.a.//.aa /b/c/.a./.aa
+/b/c/./.a.//.a. /b/c/.a./.a.
+/b/c/./.a.//.a/ /b/c/.a./.a
+/b/c/./.a.//..a /b/c/.a./..a
+/b/c/./.a.//... /b/c/.a./...
+/b/c/./.a.//../ /b/c
+/b/c/./.a.//./a /b/c/.a./a
+/b/c/./.a.//./. /b/c/.a.
+/b/c/./.a.//.// /b/c/.a.
+/b/c/./.a.///aa /b/c/.a./aa
+/b/c/./.a.///a. /b/c/.a./a.
+/b/c/./.a.///a/ /b/c/.a./a
+/b/c/./.a.///.a /b/c/.a./.a
+/b/c/./.a.///.. /b/c
+/b/c/./.a.///./ /b/c/.a.
+/b/c/./.a.////a /b/c/.a./a
+/b/c/./.a.////. /b/c/.a.
+/b/c/./.a.///// /b/c/.a.
+/b/c/./.a/aaaaa /b/c/.a/aaaaa
+/b/c/./.a/aaaa. /b/c/.a/aaaa.
+/b/c/./.a/aaaa/ /b/c/.a/aaaa
+/b/c/./.a/aaa.a /b/c/.a/aaa.a
+/b/c/./.a/aaa.. /b/c/.a/aaa..
+/b/c/./.a/aaa./ /b/c/.a/aaa.
+/b/c/./.a/aaa/a /b/c/.a/aaa/a
+/b/c/./.a/aaa/. /b/c/.a/aaa
+/b/c/./.a/aaa// /b/c/.a/aaa
+/b/c/./.a/aa.aa /b/c/.a/aa.aa
+/b/c/./.a/aa.a. /b/c/.a/aa.a.
+/b/c/./.a/aa.a/ /b/c/.a/aa.a
+/b/c/./.a/aa..a /b/c/.a/aa..a
+/b/c/./.a/aa... /b/c/.a/aa...
+/b/c/./.a/aa../ /b/c/.a/aa..
+/b/c/./.a/aa./a /b/c/.a/aa./a
+/b/c/./.a/aa./. /b/c/.a/aa.
+/b/c/./.a/aa.// /b/c/.a/aa.
+/b/c/./.a/aa/aa /b/c/.a/aa/aa
+/b/c/./.a/aa/a. /b/c/.a/aa/a.
+/b/c/./.a/aa/a/ /b/c/.a/aa/a
+/b/c/./.a/aa/.a /b/c/.a/aa/.a
+/b/c/./.a/aa/.. /b/c/.a
+/b/c/./.a/aa/./ /b/c/.a/aa
+/b/c/./.a/aa//a /b/c/.a/aa/a
+/b/c/./.a/aa//. /b/c/.a/aa
+/b/c/./.a/aa/// /b/c/.a/aa
+/b/c/./.a/a.aaa /b/c/.a/a.aaa
+/b/c/./.a/a.aa. /b/c/.a/a.aa.
+/b/c/./.a/a.aa/ /b/c/.a/a.aa
+/b/c/./.a/a.a.a /b/c/.a/a.a.a
+/b/c/./.a/a.a.. /b/c/.a/a.a..
+/b/c/./.a/a.a./ /b/c/.a/a.a.
+/b/c/./.a/a.a/a /b/c/.a/a.a/a
+/b/c/./.a/a.a/. /b/c/.a/a.a
+/b/c/./.a/a.a// /b/c/.a/a.a
+/b/c/./.a/a..aa /b/c/.a/a..aa
+/b/c/./.a/a..a. /b/c/.a/a..a.
+/b/c/./.a/a..a/ /b/c/.a/a..a
+/b/c/./.a/a...a /b/c/.a/a...a
+/b/c/./.a/a.... /b/c/.a/a....
+/b/c/./.a/a.../ /b/c/.a/a...
+/b/c/./.a/a../a /b/c/.a/a../a
+/b/c/./.a/a../. /b/c/.a/a..
+/b/c/./.a/a..// /b/c/.a/a..
+/b/c/./.a/a./aa /b/c/.a/a./aa
+/b/c/./.a/a./a. /b/c/.a/a./a.
+/b/c/./.a/a./a/ /b/c/.a/a./a
+/b/c/./.a/a./.a /b/c/.a/a./.a
+/b/c/./.a/a./.. /b/c/.a
+/b/c/./.a/a././ /b/c/.a/a.
+/b/c/./.a/a.//a /b/c/.a/a./a
+/b/c/./.a/a.//. /b/c/.a/a.
+/b/c/./.a/a./// /b/c/.a/a.
+/b/c/./.a/a/aaa /b/c/.a/a/aaa
+/b/c/./.a/a/aa. /b/c/.a/a/aa.
+/b/c/./.a/a/aa/ /b/c/.a/a/aa
+/b/c/./.a/a/a.a /b/c/.a/a/a.a
+/b/c/./.a/a/a.. /b/c/.a/a/a..
+/b/c/./.a/a/a./ /b/c/.a/a/a.
+/b/c/./.a/a/a/a /b/c/.a/a/a/a
+/b/c/./.a/a/a/. /b/c/.a/a/a
+/b/c/./.a/a/a// /b/c/.a/a/a
+/b/c/./.a/a/.aa /b/c/.a/a/.aa
+/b/c/./.a/a/.a. /b/c/.a/a/.a.
+/b/c/./.a/a/.a/ /b/c/.a/a/.a
+/b/c/./.a/a/..a /b/c/.a/a/..a
+/b/c/./.a/a/... /b/c/.a/a/...
+/b/c/./.a/a/../ /b/c/.a
+/b/c/./.a/a/./a /b/c/.a/a/a
+/b/c/./.a/a/./. /b/c/.a/a
+/b/c/./.a/a/.// /b/c/.a/a
+/b/c/./.a/a//aa /b/c/.a/a/aa
+/b/c/./.a/a//a. /b/c/.a/a/a.
+/b/c/./.a/a//a/ /b/c/.a/a/a
+/b/c/./.a/a//.a /b/c/.a/a/.a
+/b/c/./.a/a//.. /b/c/.a
+/b/c/./.a/a//./ /b/c/.a/a
+/b/c/./.a/a///a /b/c/.a/a/a
+/b/c/./.a/a///. /b/c/.a/a
+/b/c/./.a/a//// /b/c/.a/a
+/b/c/./.a/.aaaa /b/c/.a/.aaaa
+/b/c/./.a/.aaa. /b/c/.a/.aaa.
+/b/c/./.a/.aaa/ /b/c/.a/.aaa
+/b/c/./.a/.aa.a /b/c/.a/.aa.a
+/b/c/./.a/.aa.. /b/c/.a/.aa..
+/b/c/./.a/.aa./ /b/c/.a/.aa.
+/b/c/./.a/.aa/a /b/c/.a/.aa/a
+/b/c/./.a/.aa/. /b/c/.a/.aa
+/b/c/./.a/.aa// /b/c/.a/.aa
+/b/c/./.a/.a.aa /b/c/.a/.a.aa
+/b/c/./.a/.a.a. /b/c/.a/.a.a.
+/b/c/./.a/.a.a/ /b/c/.a/.a.a
+/b/c/./.a/.a..a /b/c/.a/.a..a
+/b/c/./.a/.a... /b/c/.a/.a...
+/b/c/./.a/.a../ /b/c/.a/.a..
+/b/c/./.a/.a./a /b/c/.a/.a./a
+/b/c/./.a/.a./. /b/c/.a/.a.
+/b/c/./.a/.a.// /b/c/.a/.a.
+/b/c/./.a/.a/aa /b/c/.a/.a/aa
+/b/c/./.a/.a/a. /b/c/.a/.a/a.
+/b/c/./.a/.a/a/ /b/c/.a/.a/a
+/b/c/./.a/.a/.a /b/c/.a/.a/.a
+/b/c/./.a/.a/.. /b/c/.a
+/b/c/./.a/.a/./ /b/c/.a/.a
+/b/c/./.a/.a//a /b/c/.a/.a/a
+/b/c/./.a/.a//. /b/c/.a/.a
+/b/c/./.a/.a/// /b/c/.a/.a
+/b/c/./.a/..aaa /b/c/.a/..aaa
+/b/c/./.a/..aa. /b/c/.a/..aa.
+/b/c/./.a/..aa/ /b/c/.a/..aa
+/b/c/./.a/..a.a /b/c/.a/..a.a
+/b/c/./.a/..a.. /b/c/.a/..a..
+/b/c/./.a/..a./ /b/c/.a/..a.
+/b/c/./.a/..a/a /b/c/.a/..a/a
+/b/c/./.a/..a/. /b/c/.a/..a
+/b/c/./.a/..a// /b/c/.a/..a
+/b/c/./.a/...aa /b/c/.a/...aa
+/b/c/./.a/...a. /b/c/.a/...a.
+/b/c/./.a/...a/ /b/c/.a/...a
+/b/c/./.a/....a /b/c/.a/....a
+/b/c/./.a/..... /b/c/.a/.....
+/b/c/./.a/..../ /b/c/.a/....
+/b/c/./.a/.../a /b/c/.a/.../a
+/b/c/./.a/.../. /b/c/.a/...
+/b/c/./.a/...// /b/c/.a/...
+/b/c/./.a/../aa /b/c/aa
+/b/c/./.a/../a. /b/c/a.
+/b/c/./.a/../a/ /b/c/a
+/b/c/./.a/../.a /b/c/.a
+/b/c/./.a/../.. /b
+/b/c/./.a/.././ /b/c
+/b/c/./.a/..//a /b/c/a
+/b/c/./.a/..//. /b/c
+/b/c/./.a/../// /b/c
+/b/c/./.a/./aaa /b/c/.a/aaa
+/b/c/./.a/./aa. /b/c/.a/aa.
+/b/c/./.a/./aa/ /b/c/.a/aa
+/b/c/./.a/./a.a /b/c/.a/a.a
+/b/c/./.a/./a.. /b/c/.a/a..
+/b/c/./.a/./a./ /b/c/.a/a.
+/b/c/./.a/./a/a /b/c/.a/a/a
+/b/c/./.a/./a/. /b/c/.a/a
+/b/c/./.a/./a// /b/c/.a/a
+/b/c/./.a/./.aa /b/c/.a/.aa
+/b/c/./.a/./.a. /b/c/.a/.a.
+/b/c/./.a/./.a/ /b/c/.a/.a
+/b/c/./.a/./..a /b/c/.a/..a
+/b/c/./.a/./... /b/c/.a/...
+/b/c/./.a/./../ /b/c
+/b/c/./.a/././a /b/c/.a/a
+/b/c/./.a/././. /b/c/.a
+/b/c/./.a/./.// /b/c/.a
+/b/c/./.a/.//aa /b/c/.a/aa
+/b/c/./.a/.//a. /b/c/.a/a.
+/b/c/./.a/.//a/ /b/c/.a/a
+/b/c/./.a/.//.a /b/c/.a/.a
+/b/c/./.a/.//.. /b/c
+/b/c/./.a/.//./ /b/c/.a
+/b/c/./.a/.///a /b/c/.a/a
+/b/c/./.a/.///. /b/c/.a
+/b/c/./.a/.//// /b/c/.a
+/b/c/./.a//aaaa /b/c/.a/aaaa
+/b/c/./.a//aaa. /b/c/.a/aaa.
+/b/c/./.a//aaa/ /b/c/.a/aaa
+/b/c/./.a//aa.a /b/c/.a/aa.a
+/b/c/./.a//aa.. /b/c/.a/aa..
+/b/c/./.a//aa./ /b/c/.a/aa.
+/b/c/./.a//aa/a /b/c/.a/aa/a
+/b/c/./.a//aa/. /b/c/.a/aa
+/b/c/./.a//aa// /b/c/.a/aa
+/b/c/./.a//a.aa /b/c/.a/a.aa
+/b/c/./.a//a.a. /b/c/.a/a.a.
+/b/c/./.a//a.a/ /b/c/.a/a.a
+/b/c/./.a//a..a /b/c/.a/a..a
+/b/c/./.a//a... /b/c/.a/a...
+/b/c/./.a//a../ /b/c/.a/a..
+/b/c/./.a//a./a /b/c/.a/a./a
+/b/c/./.a//a./. /b/c/.a/a.
+/b/c/./.a//a.// /b/c/.a/a.
+/b/c/./.a//a/aa /b/c/.a/a/aa
+/b/c/./.a//a/a. /b/c/.a/a/a.
+/b/c/./.a//a/a/ /b/c/.a/a/a
+/b/c/./.a//a/.a /b/c/.a/a/.a
+/b/c/./.a//a/.. /b/c/.a
+/b/c/./.a//a/./ /b/c/.a/a
+/b/c/./.a//a//a /b/c/.a/a/a
+/b/c/./.a//a//. /b/c/.a/a
+/b/c/./.a//a/// /b/c/.a/a
+/b/c/./.a//.aaa /b/c/.a/.aaa
+/b/c/./.a//.aa. /b/c/.a/.aa.
+/b/c/./.a//.aa/ /b/c/.a/.aa
+/b/c/./.a//.a.a /b/c/.a/.a.a
+/b/c/./.a//.a.. /b/c/.a/.a..
+/b/c/./.a//.a./ /b/c/.a/.a.
+/b/c/./.a//.a/a /b/c/.a/.a/a
+/b/c/./.a//.a/. /b/c/.a/.a
+/b/c/./.a//.a// /b/c/.a/.a
+/b/c/./.a//..aa /b/c/.a/..aa
+/b/c/./.a//..a. /b/c/.a/..a.
+/b/c/./.a//..a/ /b/c/.a/..a
+/b/c/./.a//...a /b/c/.a/...a
+/b/c/./.a//.... /b/c/.a/....
+/b/c/./.a//.../ /b/c/.a/...
+/b/c/./.a//../a /b/c/a
+/b/c/./.a//../. /b/c
+/b/c/./.a//..// /b/c
+/b/c/./.a//./aa /b/c/.a/aa
+/b/c/./.a//./a. /b/c/.a/a.
+/b/c/./.a//./a/ /b/c/.a/a
+/b/c/./.a//./.a /b/c/.a/.a
+/b/c/./.a//./.. /b/c
+/b/c/./.a//././ /b/c/.a
+/b/c/./.a//.//a /b/c/.a/a
+/b/c/./.a//.//. /b/c/.a
+/b/c/./.a//./// /b/c/.a
+/b/c/./.a///aaa /b/c/.a/aaa
+/b/c/./.a///aa. /b/c/.a/aa.
+/b/c/./.a///aa/ /b/c/.a/aa
+/b/c/./.a///a.a /b/c/.a/a.a
+/b/c/./.a///a.. /b/c/.a/a..
+/b/c/./.a///a./ /b/c/.a/a.
+/b/c/./.a///a/a /b/c/.a/a/a
+/b/c/./.a///a/. /b/c/.a/a
+/b/c/./.a///a// /b/c/.a/a
+/b/c/./.a///.aa /b/c/.a/.aa
+/b/c/./.a///.a. /b/c/.a/.a.
+/b/c/./.a///.a/ /b/c/.a/.a
+/b/c/./.a///..a /b/c/.a/..a
+/b/c/./.a///... /b/c/.a/...
+/b/c/./.a///../ /b/c
+/b/c/./.a///./a /b/c/.a/a
+/b/c/./.a///./. /b/c/.a
+/b/c/./.a///.// /b/c/.a
+/b/c/./.a////aa /b/c/.a/aa
+/b/c/./.a////a. /b/c/.a/a.
+/b/c/./.a////a/ /b/c/.a/a
+/b/c/./.a////.a /b/c/.a/.a
+/b/c/./.a////.. /b/c
+/b/c/./.a////./ /b/c/.a
+/b/c/./.a/////a /b/c/.a/a
+/b/c/./.a/////. /b/c/.a
+/b/c/./.a////// /b/c/.a
+/b/c/./..aaaaaa /b/c/..aaaaaa
+/b/c/./..aaaaa. /b/c/..aaaaa.
+/b/c/./..aaaaa/ /b/c/..aaaaa
+/b/c/./..aaaa.a /b/c/..aaaa.a
+/b/c/./..aaaa.. /b/c/..aaaa..
+/b/c/./..aaaa./ /b/c/..aaaa.
+/b/c/./..aaaa/a /b/c/..aaaa/a
+/b/c/./..aaaa/. /b/c/..aaaa
+/b/c/./..aaaa// /b/c/..aaaa
+/b/c/./..aaa.aa /b/c/..aaa.aa
+/b/c/./..aaa.a. /b/c/..aaa.a.
+/b/c/./..aaa.a/ /b/c/..aaa.a
+/b/c/./..aaa..a /b/c/..aaa..a
+/b/c/./..aaa... /b/c/..aaa...
+/b/c/./..aaa../ /b/c/..aaa..
+/b/c/./..aaa./a /b/c/..aaa./a
+/b/c/./..aaa./. /b/c/..aaa.
+/b/c/./..aaa.// /b/c/..aaa.
+/b/c/./..aaa/aa /b/c/..aaa/aa
+/b/c/./..aaa/a. /b/c/..aaa/a.
+/b/c/./..aaa/a/ /b/c/..aaa/a
+/b/c/./..aaa/.a /b/c/..aaa/.a
+/b/c/./..aaa/.. /b/c
+/b/c/./..aaa/./ /b/c/..aaa
+/b/c/./..aaa//a /b/c/..aaa/a
+/b/c/./..aaa//. /b/c/..aaa
+/b/c/./..aaa/// /b/c/..aaa
+/b/c/./..aa.aaa /b/c/..aa.aaa
+/b/c/./..aa.aa. /b/c/..aa.aa.
+/b/c/./..aa.aa/ /b/c/..aa.aa
+/b/c/./..aa.a.a /b/c/..aa.a.a
+/b/c/./..aa.a.. /b/c/..aa.a..
+/b/c/./..aa.a./ /b/c/..aa.a.
+/b/c/./..aa.a/a /b/c/..aa.a/a
+/b/c/./..aa.a/. /b/c/..aa.a
+/b/c/./..aa.a// /b/c/..aa.a
+/b/c/./..aa..aa /b/c/..aa..aa
+/b/c/./..aa..a. /b/c/..aa..a.
+/b/c/./..aa..a/ /b/c/..aa..a
+/b/c/./..aa...a /b/c/..aa...a
+/b/c/./..aa.... /b/c/..aa....
+/b/c/./..aa.../ /b/c/..aa...
+/b/c/./..aa../a /b/c/..aa../a
+/b/c/./..aa../. /b/c/..aa..
+/b/c/./..aa..// /b/c/..aa..
+/b/c/./..aa./aa /b/c/..aa./aa
+/b/c/./..aa./a. /b/c/..aa./a.
+/b/c/./..aa./a/ /b/c/..aa./a
+/b/c/./..aa./.a /b/c/..aa./.a
+/b/c/./..aa./.. /b/c
+/b/c/./..aa././ /b/c/..aa.
+/b/c/./..aa.//a /b/c/..aa./a
+/b/c/./..aa.//. /b/c/..aa.
+/b/c/./..aa./// /b/c/..aa.
+/b/c/./..aa/aaa /b/c/..aa/aaa
+/b/c/./..aa/aa. /b/c/..aa/aa.
+/b/c/./..aa/aa/ /b/c/..aa/aa
+/b/c/./..aa/a.a /b/c/..aa/a.a
+/b/c/./..aa/a.. /b/c/..aa/a..
+/b/c/./..aa/a./ /b/c/..aa/a.
+/b/c/./..aa/a/a /b/c/..aa/a/a
+/b/c/./..aa/a/. /b/c/..aa/a
+/b/c/./..aa/a// /b/c/..aa/a
+/b/c/./..aa/.aa /b/c/..aa/.aa
+/b/c/./..aa/.a. /b/c/..aa/.a.
+/b/c/./..aa/.a/ /b/c/..aa/.a
+/b/c/./..aa/..a /b/c/..aa/..a
+/b/c/./..aa/... /b/c/..aa/...
+/b/c/./..aa/../ /b/c
+/b/c/./..aa/./a /b/c/..aa/a
+/b/c/./..aa/./. /b/c/..aa
+/b/c/./..aa/.// /b/c/..aa
+/b/c/./..aa//aa /b/c/..aa/aa
+/b/c/./..aa//a. /b/c/..aa/a.
+/b/c/./..aa//a/ /b/c/..aa/a
+/b/c/./..aa//.a /b/c/..aa/.a
+/b/c/./..aa//.. /b/c
+/b/c/./..aa//./ /b/c/..aa
+/b/c/./..aa///a /b/c/..aa/a
+/b/c/./..aa///. /b/c/..aa
+/b/c/./..aa//// /b/c/..aa
+/b/c/./..a.aaaa /b/c/..a.aaaa
+/b/c/./..a.aaa. /b/c/..a.aaa.
+/b/c/./..a.aaa/ /b/c/..a.aaa
+/b/c/./..a.aa.a /b/c/..a.aa.a
+/b/c/./..a.aa.. /b/c/..a.aa..
+/b/c/./..a.aa./ /b/c/..a.aa.
+/b/c/./..a.aa/a /b/c/..a.aa/a
+/b/c/./..a.aa/. /b/c/..a.aa
+/b/c/./..a.aa// /b/c/..a.aa
+/b/c/./..a.a.aa /b/c/..a.a.aa
+/b/c/./..a.a.a. /b/c/..a.a.a.
+/b/c/./..a.a.a/ /b/c/..a.a.a
+/b/c/./..a.a..a /b/c/..a.a..a
+/b/c/./..a.a... /b/c/..a.a...
+/b/c/./..a.a../ /b/c/..a.a..
+/b/c/./..a.a./a /b/c/..a.a./a
+/b/c/./..a.a./. /b/c/..a.a.
+/b/c/./..a.a.// /b/c/..a.a.
+/b/c/./..a.a/aa /b/c/..a.a/aa
+/b/c/./..a.a/a. /b/c/..a.a/a.
+/b/c/./..a.a/a/ /b/c/..a.a/a
+/b/c/./..a.a/.a /b/c/..a.a/.a
+/b/c/./..a.a/.. /b/c
+/b/c/./..a.a/./ /b/c/..a.a
+/b/c/./..a.a//a /b/c/..a.a/a
+/b/c/./..a.a//. /b/c/..a.a
+/b/c/./..a.a/// /b/c/..a.a
+/b/c/./..a..aaa /b/c/..a..aaa
+/b/c/./..a..aa. /b/c/..a..aa.
+/b/c/./..a..aa/ /b/c/..a..aa
+/b/c/./..a..a.a /b/c/..a..a.a
+/b/c/./..a..a.. /b/c/..a..a..
+/b/c/./..a..a./ /b/c/..a..a.
+/b/c/./..a..a/a /b/c/..a..a/a
+/b/c/./..a..a/. /b/c/..a..a
+/b/c/./..a..a// /b/c/..a..a
+/b/c/./..a...aa /b/c/..a...aa
+/b/c/./..a...a. /b/c/..a...a.
+/b/c/./..a...a/ /b/c/..a...a
+/b/c/./..a....a /b/c/..a....a
+/b/c/./..a..... /b/c/..a.....
+/b/c/./..a..../ /b/c/..a....
+/b/c/./..a.../a /b/c/..a.../a
+/b/c/./..a.../. /b/c/..a...
+/b/c/./..a...// /b/c/..a...
+/b/c/./..a../aa /b/c/..a../aa
+/b/c/./..a../a. /b/c/..a../a.
+/b/c/./..a../a/ /b/c/..a../a
+/b/c/./..a../.a /b/c/..a../.a
+/b/c/./..a../.. /b/c
+/b/c/./..a.././ /b/c/..a..
+/b/c/./..a..//a /b/c/..a../a
+/b/c/./..a..//. /b/c/..a..
+/b/c/./..a../// /b/c/..a..
+/b/c/./..a./aaa /b/c/..a./aaa
+/b/c/./..a./aa. /b/c/..a./aa.
+/b/c/./..a./aa/ /b/c/..a./aa
+/b/c/./..a./a.a /b/c/..a./a.a
+/b/c/./..a./a.. /b/c/..a./a..
+/b/c/./..a./a./ /b/c/..a./a.
+/b/c/./..a./a/a /b/c/..a./a/a
+/b/c/./..a./a/. /b/c/..a./a
+/b/c/./..a./a// /b/c/..a./a
+/b/c/./..a./.aa /b/c/..a./.aa
+/b/c/./..a./.a. /b/c/..a./.a.
+/b/c/./..a./.a/ /b/c/..a./.a
+/b/c/./..a./..a /b/c/..a./..a
+/b/c/./..a./... /b/c/..a./...
+/b/c/./..a./../ /b/c
+/b/c/./..a././a /b/c/..a./a
+/b/c/./..a././. /b/c/..a.
+/b/c/./..a./.// /b/c/..a.
+/b/c/./..a.//aa /b/c/..a./aa
+/b/c/./..a.//a. /b/c/..a./a.
+/b/c/./..a.//a/ /b/c/..a./a
+/b/c/./..a.//.a /b/c/..a./.a
+/b/c/./..a.//.. /b/c
+/b/c/./..a.//./ /b/c/..a.
+/b/c/./..a.///a /b/c/..a./a
+/b/c/./..a.///. /b/c/..a.
+/b/c/./..a.//// /b/c/..a.
+/b/c/./..a/aaaa /b/c/..a/aaaa
+/b/c/./..a/aaa. /b/c/..a/aaa.
+/b/c/./..a/aaa/ /b/c/..a/aaa
+/b/c/./..a/aa.a /b/c/..a/aa.a
+/b/c/./..a/aa.. /b/c/..a/aa..
+/b/c/./..a/aa./ /b/c/..a/aa.
+/b/c/./..a/aa/a /b/c/..a/aa/a
+/b/c/./..a/aa/. /b/c/..a/aa
+/b/c/./..a/aa// /b/c/..a/aa
+/b/c/./..a/a.aa /b/c/..a/a.aa
+/b/c/./..a/a.a. /b/c/..a/a.a.
+/b/c/./..a/a.a/ /b/c/..a/a.a
+/b/c/./..a/a..a /b/c/..a/a..a
+/b/c/./..a/a... /b/c/..a/a...
+/b/c/./..a/a../ /b/c/..a/a..
+/b/c/./..a/a./a /b/c/..a/a./a
+/b/c/./..a/a./. /b/c/..a/a.
+/b/c/./..a/a.// /b/c/..a/a.
+/b/c/./..a/a/aa /b/c/..a/a/aa
+/b/c/./..a/a/a. /b/c/..a/a/a.
+/b/c/./..a/a/a/ /b/c/..a/a/a
+/b/c/./..a/a/.a /b/c/..a/a/.a
+/b/c/./..a/a/.. /b/c/..a
+/b/c/./..a/a/./ /b/c/..a/a
+/b/c/./..a/a//a /b/c/..a/a/a
+/b/c/./..a/a//. /b/c/..a/a
+/b/c/./..a/a/// /b/c/..a/a
+/b/c/./..a/.aaa /b/c/..a/.aaa
+/b/c/./..a/.aa. /b/c/..a/.aa.
+/b/c/./..a/.aa/ /b/c/..a/.aa
+/b/c/./..a/.a.a /b/c/..a/.a.a
+/b/c/./..a/.a.. /b/c/..a/.a..
+/b/c/./..a/.a./ /b/c/..a/.a.
+/b/c/./..a/.a/a /b/c/..a/.a/a
+/b/c/./..a/.a/. /b/c/..a/.a
+/b/c/./..a/.a// /b/c/..a/.a
+/b/c/./..a/..aa /b/c/..a/..aa
+/b/c/./..a/..a. /b/c/..a/..a.
+/b/c/./..a/..a/ /b/c/..a/..a
+/b/c/./..a/...a /b/c/..a/...a
+/b/c/./..a/.... /b/c/..a/....
+/b/c/./..a/.../ /b/c/..a/...
+/b/c/./..a/../a /b/c/a
+/b/c/./..a/../. /b/c
+/b/c/./..a/..// /b/c
+/b/c/./..a/./aa /b/c/..a/aa
+/b/c/./..a/./a. /b/c/..a/a.
+/b/c/./..a/./a/ /b/c/..a/a
+/b/c/./..a/./.a /b/c/..a/.a
+/b/c/./..a/./.. /b/c
+/b/c/./..a/././ /b/c/..a
+/b/c/./..a/.//a /b/c/..a/a
+/b/c/./..a/.//. /b/c/..a
+/b/c/./..a/./// /b/c/..a
+/b/c/./..a//aaa /b/c/..a/aaa
+/b/c/./..a//aa. /b/c/..a/aa.
+/b/c/./..a//aa/ /b/c/..a/aa
+/b/c/./..a//a.a /b/c/..a/a.a
+/b/c/./..a//a.. /b/c/..a/a..
+/b/c/./..a//a./ /b/c/..a/a.
+/b/c/./..a//a/a /b/c/..a/a/a
+/b/c/./..a//a/. /b/c/..a/a
+/b/c/./..a//a// /b/c/..a/a
+/b/c/./..a//.aa /b/c/..a/.aa
+/b/c/./..a//.a. /b/c/..a/.a.
+/b/c/./..a//.a/ /b/c/..a/.a
+/b/c/./..a//..a /b/c/..a/..a
+/b/c/./..a//... /b/c/..a/...
+/b/c/./..a//../ /b/c
+/b/c/./..a//./a /b/c/..a/a
+/b/c/./..a//./. /b/c/..a
+/b/c/./..a//.// /b/c/..a
+/b/c/./..a///aa /b/c/..a/aa
+/b/c/./..a///a. /b/c/..a/a.
+/b/c/./..a///a/ /b/c/..a/a
+/b/c/./..a///.a /b/c/..a/.a
+/b/c/./..a///.. /b/c
+/b/c/./..a///./ /b/c/..a
+/b/c/./..a////a /b/c/..a/a
+/b/c/./..a////. /b/c/..a
+/b/c/./..a///// /b/c/..a
+/b/c/./...aaaaa /b/c/...aaaaa
+/b/c/./...aaaa. /b/c/...aaaa.
+/b/c/./...aaaa/ /b/c/...aaaa
+/b/c/./...aaa.a /b/c/...aaa.a
+/b/c/./...aaa.. /b/c/...aaa..
+/b/c/./...aaa./ /b/c/...aaa.
+/b/c/./...aaa/a /b/c/...aaa/a
+/b/c/./...aaa/. /b/c/...aaa
+/b/c/./...aaa// /b/c/...aaa
+/b/c/./...aa.aa /b/c/...aa.aa
+/b/c/./...aa.a. /b/c/...aa.a.
+/b/c/./...aa.a/ /b/c/...aa.a
+/b/c/./...aa..a /b/c/...aa..a
+/b/c/./...aa... /b/c/...aa...
+/b/c/./...aa../ /b/c/...aa..
+/b/c/./...aa./a /b/c/...aa./a
+/b/c/./...aa./. /b/c/...aa.
+/b/c/./...aa.// /b/c/...aa.
+/b/c/./...aa/aa /b/c/...aa/aa
+/b/c/./...aa/a. /b/c/...aa/a.
+/b/c/./...aa/a/ /b/c/...aa/a
+/b/c/./...aa/.a /b/c/...aa/.a
+/b/c/./...aa/.. /b/c
+/b/c/./...aa/./ /b/c/...aa
+/b/c/./...aa//a /b/c/...aa/a
+/b/c/./...aa//. /b/c/...aa
+/b/c/./...aa/// /b/c/...aa
+/b/c/./...a.aaa /b/c/...a.aaa
+/b/c/./...a.aa. /b/c/...a.aa.
+/b/c/./...a.aa/ /b/c/...a.aa
+/b/c/./...a.a.a /b/c/...a.a.a
+/b/c/./...a.a.. /b/c/...a.a..
+/b/c/./...a.a./ /b/c/...a.a.
+/b/c/./...a.a/a /b/c/...a.a/a
+/b/c/./...a.a/. /b/c/...a.a
+/b/c/./...a.a// /b/c/...a.a
+/b/c/./...a..aa /b/c/...a..aa
+/b/c/./...a..a. /b/c/...a..a.
+/b/c/./...a..a/ /b/c/...a..a
+/b/c/./...a...a /b/c/...a...a
+/b/c/./...a.... /b/c/...a....
+/b/c/./...a.../ /b/c/...a...
+/b/c/./...a../a /b/c/...a../a
+/b/c/./...a../. /b/c/...a..
+/b/c/./...a..// /b/c/...a..
+/b/c/./...a./aa /b/c/...a./aa
+/b/c/./...a./a. /b/c/...a./a.
+/b/c/./...a./a/ /b/c/...a./a
+/b/c/./...a./.a /b/c/...a./.a
+/b/c/./...a./.. /b/c
+/b/c/./...a././ /b/c/...a.
+/b/c/./...a.//a /b/c/...a./a
+/b/c/./...a.//. /b/c/...a.
+/b/c/./...a./// /b/c/...a.
+/b/c/./...a/aaa /b/c/...a/aaa
+/b/c/./...a/aa. /b/c/...a/aa.
+/b/c/./...a/aa/ /b/c/...a/aa
+/b/c/./...a/a.a /b/c/...a/a.a
+/b/c/./...a/a.. /b/c/...a/a..
+/b/c/./...a/a./ /b/c/...a/a.
+/b/c/./...a/a/a /b/c/...a/a/a
+/b/c/./...a/a/. /b/c/...a/a
+/b/c/./...a/a// /b/c/...a/a
+/b/c/./...a/.aa /b/c/...a/.aa
+/b/c/./...a/.a. /b/c/...a/.a.
+/b/c/./...a/.a/ /b/c/...a/.a
+/b/c/./...a/..a /b/c/...a/..a
+/b/c/./...a/... /b/c/...a/...
+/b/c/./...a/../ /b/c
+/b/c/./...a/./a /b/c/...a/a
+/b/c/./...a/./. /b/c/...a
+/b/c/./...a/.// /b/c/...a
+/b/c/./...a//aa /b/c/...a/aa
+/b/c/./...a//a. /b/c/...a/a.
+/b/c/./...a//a/ /b/c/...a/a
+/b/c/./...a//.a /b/c/...a/.a
+/b/c/./...a//.. /b/c
+/b/c/./...a//./ /b/c/...a
+/b/c/./...a///a /b/c/...a/a
+/b/c/./...a///. /b/c/...a
+/b/c/./...a//// /b/c/...a
+/b/c/./....aaaa /b/c/....aaaa
+/b/c/./....aaa. /b/c/....aaa.
+/b/c/./....aaa/ /b/c/....aaa
+/b/c/./....aa.a /b/c/....aa.a
+/b/c/./....aa.. /b/c/....aa..
+/b/c/./....aa./ /b/c/....aa.
+/b/c/./....aa/a /b/c/....aa/a
+/b/c/./....aa/. /b/c/....aa
+/b/c/./....aa// /b/c/....aa
+/b/c/./....a.aa /b/c/....a.aa
+/b/c/./....a.a. /b/c/....a.a.
+/b/c/./....a.a/ /b/c/....a.a
+/b/c/./....a..a /b/c/....a..a
+/b/c/./....a... /b/c/....a...
+/b/c/./....a../ /b/c/....a..
+/b/c/./....a./a /b/c/....a./a
+/b/c/./....a./. /b/c/....a.
+/b/c/./....a.// /b/c/....a.
+/b/c/./....a/aa /b/c/....a/aa
+/b/c/./....a/a. /b/c/....a/a.
+/b/c/./....a/a/ /b/c/....a/a
+/b/c/./....a/.a /b/c/....a/.a
+/b/c/./....a/.. /b/c
+/b/c/./....a/./ /b/c/....a
+/b/c/./....a//a /b/c/....a/a
+/b/c/./....a//. /b/c/....a
+/b/c/./....a/// /b/c/....a
+/b/c/./.....aaa /b/c/.....aaa
+/b/c/./.....aa. /b/c/.....aa.
+/b/c/./.....aa/ /b/c/.....aa
+/b/c/./.....a.a /b/c/.....a.a
+/b/c/./.....a.. /b/c/.....a..
+/b/c/./.....a./ /b/c/.....a.
+/b/c/./.....a/a /b/c/.....a/a
+/b/c/./.....a/. /b/c/.....a
+/b/c/./.....a// /b/c/.....a
+/b/c/./......aa /b/c/......aa
+/b/c/./......a. /b/c/......a.
+/b/c/./......a/ /b/c/......a
+/b/c/./.......a /b/c/.......a
+/b/c/./........ /b/c/........
+/b/c/./......./ /b/c/.......
+/b/c/./....../a /b/c/....../a
+/b/c/./....../. /b/c/......
+/b/c/./......// /b/c/......
+/b/c/./...../aa /b/c/...../aa
+/b/c/./...../a. /b/c/...../a.
+/b/c/./...../a/ /b/c/...../a
+/b/c/./...../.a /b/c/...../.a
+/b/c/./...../.. /b/c
+/b/c/./....././ /b/c/.....
+/b/c/./.....//a /b/c/...../a
+/b/c/./.....//. /b/c/.....
+/b/c/./...../// /b/c/.....
+/b/c/./..../aaa /b/c/..../aaa
+/b/c/./..../aa. /b/c/..../aa.
+/b/c/./..../aa/ /b/c/..../aa
+/b/c/./..../a.a /b/c/..../a.a
+/b/c/./..../a.. /b/c/..../a..
+/b/c/./..../a./ /b/c/..../a.
+/b/c/./..../a/a /b/c/..../a/a
+/b/c/./..../a/. /b/c/..../a
+/b/c/./..../a// /b/c/..../a
+/b/c/./..../.aa /b/c/..../.aa
+/b/c/./..../.a. /b/c/..../.a.
+/b/c/./..../.a/ /b/c/..../.a
+/b/c/./..../..a /b/c/..../..a
+/b/c/./..../... /b/c/..../...
+/b/c/./..../../ /b/c
+/b/c/./...././a /b/c/..../a
+/b/c/./...././. /b/c/....
+/b/c/./..../.// /b/c/....
+/b/c/./....//aa /b/c/..../aa
+/b/c/./....//a. /b/c/..../a.
+/b/c/./....//a/ /b/c/..../a
+/b/c/./....//.a /b/c/..../.a
+/b/c/./....//.. /b/c
+/b/c/./....//./ /b/c/....
+/b/c/./....///a /b/c/..../a
+/b/c/./....///. /b/c/....
+/b/c/./....//// /b/c/....
+/b/c/./.../aaaa /b/c/.../aaaa
+/b/c/./.../aaa. /b/c/.../aaa.
+/b/c/./.../aaa/ /b/c/.../aaa
+/b/c/./.../aa.a /b/c/.../aa.a
+/b/c/./.../aa.. /b/c/.../aa..
+/b/c/./.../aa./ /b/c/.../aa.
+/b/c/./.../aa/a /b/c/.../aa/a
+/b/c/./.../aa/. /b/c/.../aa
+/b/c/./.../aa// /b/c/.../aa
+/b/c/./.../a.aa /b/c/.../a.aa
+/b/c/./.../a.a. /b/c/.../a.a.
+/b/c/./.../a.a/ /b/c/.../a.a
+/b/c/./.../a..a /b/c/.../a..a
+/b/c/./.../a... /b/c/.../a...
+/b/c/./.../a../ /b/c/.../a..
+/b/c/./.../a./a /b/c/.../a./a
+/b/c/./.../a./. /b/c/.../a.
+/b/c/./.../a.// /b/c/.../a.
+/b/c/./.../a/aa /b/c/.../a/aa
+/b/c/./.../a/a. /b/c/.../a/a.
+/b/c/./.../a/a/ /b/c/.../a/a
+/b/c/./.../a/.a /b/c/.../a/.a
+/b/c/./.../a/.. /b/c/...
+/b/c/./.../a/./ /b/c/.../a
+/b/c/./.../a//a /b/c/.../a/a
+/b/c/./.../a//. /b/c/.../a
+/b/c/./.../a/// /b/c/.../a
+/b/c/./.../.aaa /b/c/.../.aaa
+/b/c/./.../.aa. /b/c/.../.aa.
+/b/c/./.../.aa/ /b/c/.../.aa
+/b/c/./.../.a.a /b/c/.../.a.a
+/b/c/./.../.a.. /b/c/.../.a..
+/b/c/./.../.a./ /b/c/.../.a.
+/b/c/./.../.a/a /b/c/.../.a/a
+/b/c/./.../.a/. /b/c/.../.a
+/b/c/./.../.a// /b/c/.../.a
+/b/c/./.../..aa /b/c/.../..aa
+/b/c/./.../..a. /b/c/.../..a.
+/b/c/./.../..a/ /b/c/.../..a
+/b/c/./.../...a /b/c/.../...a
+/b/c/./.../.... /b/c/.../....
+/b/c/./.../.../ /b/c/.../...
+/b/c/./.../../a /b/c/a
+/b/c/./.../../. /b/c
+/b/c/./.../..// /b/c
+/b/c/./..././aa /b/c/.../aa
+/b/c/./..././a. /b/c/.../a.
+/b/c/./..././a/ /b/c/.../a
+/b/c/./..././.a /b/c/.../.a
+/b/c/./..././.. /b/c
+/b/c/./.../././ /b/c/...
+/b/c/./..././/a /b/c/.../a
+/b/c/./..././/. /b/c/...
+/b/c/./..././// /b/c/...
+/b/c/./...//aaa /b/c/.../aaa
+/b/c/./...//aa. /b/c/.../aa.
+/b/c/./...//aa/ /b/c/.../aa
+/b/c/./...//a.a /b/c/.../a.a
+/b/c/./...//a.. /b/c/.../a..
+/b/c/./...//a./ /b/c/.../a.
+/b/c/./...//a/a /b/c/.../a/a
+/b/c/./...//a/. /b/c/.../a
+/b/c/./...//a// /b/c/.../a
+/b/c/./...//.aa /b/c/.../.aa
+/b/c/./...//.a. /b/c/.../.a.
+/b/c/./...//.a/ /b/c/.../.a
+/b/c/./...//..a /b/c/.../..a
+/b/c/./...//... /b/c/.../...
+/b/c/./...//../ /b/c
+/b/c/./...//./a /b/c/.../a
+/b/c/./...//./. /b/c/...
+/b/c/./...//.// /b/c/...
+/b/c/./...///aa /b/c/.../aa
+/b/c/./...///a. /b/c/.../a.
+/b/c/./...///a/ /b/c/.../a
+/b/c/./...///.a /b/c/.../.a
+/b/c/./...///.. /b/c
+/b/c/./...///./ /b/c/...
+/b/c/./...////a /b/c/.../a
+/b/c/./...////. /b/c/...
+/b/c/./...///// /b/c/...
+/b/c/./../aaaaa /b/aaaaa
+/b/c/./../aaaa. /b/aaaa.
+/b/c/./../aaaa/ /b/aaaa
+/b/c/./../aaa.a /b/aaa.a
+/b/c/./../aaa.. /b/aaa..
+/b/c/./../aaa./ /b/aaa.
+/b/c/./../aaa/a /b/aaa/a
+/b/c/./../aaa/. /b/aaa
+/b/c/./../aaa// /b/aaa
+/b/c/./../aa.aa /b/aa.aa
+/b/c/./../aa.a. /b/aa.a.
+/b/c/./../aa.a/ /b/aa.a
+/b/c/./../aa..a /b/aa..a
+/b/c/./../aa... /b/aa...
+/b/c/./../aa../ /b/aa..
+/b/c/./../aa./a /b/aa./a
+/b/c/./../aa./. /b/aa.
+/b/c/./../aa.// /b/aa.
+/b/c/./../aa/aa /b/aa/aa
+/b/c/./../aa/a. /b/aa/a.
+/b/c/./../aa/a/ /b/aa/a
+/b/c/./../aa/.a /b/aa/.a
+/b/c/./../aa/.. /b
+/b/c/./../aa/./ /b/aa
+/b/c/./../aa//a /b/aa/a
+/b/c/./../aa//. /b/aa
+/b/c/./../aa/// /b/aa
+/b/c/./../a.aaa /b/a.aaa
+/b/c/./../a.aa. /b/a.aa.
+/b/c/./../a.aa/ /b/a.aa
+/b/c/./../a.a.a /b/a.a.a
+/b/c/./../a.a.. /b/a.a..
+/b/c/./../a.a./ /b/a.a.
+/b/c/./../a.a/a /b/a.a/a
+/b/c/./../a.a/. /b/a.a
+/b/c/./../a.a// /b/a.a
+/b/c/./../a..aa /b/a..aa
+/b/c/./../a..a. /b/a..a.
+/b/c/./../a..a/ /b/a..a
+/b/c/./../a...a /b/a...a
+/b/c/./../a.... /b/a....
+/b/c/./../a.../ /b/a...
+/b/c/./../a../a /b/a../a
+/b/c/./../a../. /b/a..
+/b/c/./../a..// /b/a..
+/b/c/./../a./aa /b/a./aa
+/b/c/./../a./a. /b/a./a.
+/b/c/./../a./a/ /b/a./a
+/b/c/./../a./.a /b/a./.a
+/b/c/./../a./.. /b
+/b/c/./../a././ /b/a.
+/b/c/./../a.//a /b/a./a
+/b/c/./../a.//. /b/a.
+/b/c/./../a./// /b/a.
+/b/c/./../a/aaa /b/a/aaa
+/b/c/./../a/aa. /b/a/aa.
+/b/c/./../a/aa/ /b/a/aa
+/b/c/./../a/a.a /b/a/a.a
+/b/c/./../a/a.. /b/a/a..
+/b/c/./../a/a./ /b/a/a.
+/b/c/./../a/a/a /b/a/a/a
+/b/c/./../a/a/. /b/a/a
+/b/c/./../a/a// /b/a/a
+/b/c/./../a/.aa /b/a/.aa
+/b/c/./../a/.a. /b/a/.a.
+/b/c/./../a/.a/ /b/a/.a
+/b/c/./../a/..a /b/a/..a
+/b/c/./../a/... /b/a/...
+/b/c/./../a/../ /b
+/b/c/./../a/./a /b/a/a
+/b/c/./../a/./. /b/a
+/b/c/./../a/.// /b/a
+/b/c/./../a//aa /b/a/aa
+/b/c/./../a//a. /b/a/a.
+/b/c/./../a//a/ /b/a/a
+/b/c/./../a//.a /b/a/.a
+/b/c/./../a//.. /b
+/b/c/./../a//./ /b/a
+/b/c/./../a///a /b/a/a
+/b/c/./../a///. /b/a
+/b/c/./../a//// /b/a
+/b/c/./../.aaaa /b/.aaaa
+/b/c/./../.aaa. /b/.aaa.
+/b/c/./../.aaa/ /b/.aaa
+/b/c/./../.aa.a /b/.aa.a
+/b/c/./../.aa.. /b/.aa..
+/b/c/./../.aa./ /b/.aa.
+/b/c/./../.aa/a /b/.aa/a
+/b/c/./../.aa/. /b/.aa
+/b/c/./../.aa// /b/.aa
+/b/c/./../.a.aa /b/.a.aa
+/b/c/./../.a.a. /b/.a.a.
+/b/c/./../.a.a/ /b/.a.a
+/b/c/./../.a..a /b/.a..a
+/b/c/./../.a... /b/.a...
+/b/c/./../.a../ /b/.a..
+/b/c/./../.a./a /b/.a./a
+/b/c/./../.a./. /b/.a.
+/b/c/./../.a.// /b/.a.
+/b/c/./../.a/aa /b/.a/aa
+/b/c/./../.a/a. /b/.a/a.
+/b/c/./../.a/a/ /b/.a/a
+/b/c/./../.a/.a /b/.a/.a
+/b/c/./../.a/.. /b
+/b/c/./../.a/./ /b/.a
+/b/c/./../.a//a /b/.a/a
+/b/c/./../.a//. /b/.a
+/b/c/./../.a/// /b/.a
+/b/c/./../..aaa /b/..aaa
+/b/c/./../..aa. /b/..aa.
+/b/c/./../..aa/ /b/..aa
+/b/c/./../..a.a /b/..a.a
+/b/c/./../..a.. /b/..a..
+/b/c/./../..a./ /b/..a.
+/b/c/./../..a/a /b/..a/a
+/b/c/./../..a/. /b/..a
+/b/c/./../..a// /b/..a
+/b/c/./../...aa /b/...aa
+/b/c/./../...a. /b/...a.
+/b/c/./../...a/ /b/...a
+/b/c/./../....a /b/....a
+/b/c/./../..... /b/.....
+/b/c/./../..../ /b/....
+/b/c/./../.../a /b/.../a
+/b/c/./../.../. /b/...
+/b/c/./../...// /b/...
+/b/c/./../../aa /aa
+/b/c/./../../a. /a.
+/b/c/./../../a/ /a
+/b/c/./../../.a /.a
+/b/c/./../../.. /
+/b/c/./../.././ /
+/b/c/./../..//a /a
+/b/c/./../..//. /
+/b/c/./../../// /
+/b/c/./.././aaa /b/aaa
+/b/c/./.././aa. /b/aa.
+/b/c/./.././aa/ /b/aa
+/b/c/./.././a.a /b/a.a
+/b/c/./.././a.. /b/a..
+/b/c/./.././a./ /b/a.
+/b/c/./.././a/a /b/a/a
+/b/c/./.././a/. /b/a
+/b/c/./.././a// /b/a
+/b/c/./.././.aa /b/.aa
+/b/c/./.././.a. /b/.a.
+/b/c/./.././.a/ /b/.a
+/b/c/./.././..a /b/..a
+/b/c/./.././... /b/...
+/b/c/./.././../ /
+/b/c/./../././a /b/a
+/b/c/./../././. /b
+/b/c/./.././.// /b
+/b/c/./.././/aa /b/aa
+/b/c/./.././/a. /b/a.
+/b/c/./.././/a/ /b/a
+/b/c/./.././/.a /b/.a
+/b/c/./.././/.. /
+/b/c/./.././/./ /b
+/b/c/./.././//a /b/a
+/b/c/./.././//. /b
+/b/c/./.././/// /b
+/b/c/./..//aaaa /b/aaaa
+/b/c/./..//aaa. /b/aaa.
+/b/c/./..//aaa/ /b/aaa
+/b/c/./..//aa.a /b/aa.a
+/b/c/./..//aa.. /b/aa..
+/b/c/./..//aa./ /b/aa.
+/b/c/./..//aa/a /b/aa/a
+/b/c/./..//aa/. /b/aa
+/b/c/./..//aa// /b/aa
+/b/c/./..//a.aa /b/a.aa
+/b/c/./..//a.a. /b/a.a.
+/b/c/./..//a.a/ /b/a.a
+/b/c/./..//a..a /b/a..a
+/b/c/./..//a... /b/a...
+/b/c/./..//a../ /b/a..
+/b/c/./..//a./a /b/a./a
+/b/c/./..//a./. /b/a.
+/b/c/./..//a.// /b/a.
+/b/c/./..//a/aa /b/a/aa
+/b/c/./..//a/a. /b/a/a.
+/b/c/./..//a/a/ /b/a/a
+/b/c/./..//a/.a /b/a/.a
+/b/c/./..//a/.. /b
+/b/c/./..//a/./ /b/a
+/b/c/./..//a//a /b/a/a
+/b/c/./..//a//. /b/a
+/b/c/./..//a/// /b/a
+/b/c/./..//.aaa /b/.aaa
+/b/c/./..//.aa. /b/.aa.
+/b/c/./..//.aa/ /b/.aa
+/b/c/./..//.a.a /b/.a.a
+/b/c/./..//.a.. /b/.a..
+/b/c/./..//.a./ /b/.a.
+/b/c/./..//.a/a /b/.a/a
+/b/c/./..//.a/. /b/.a
+/b/c/./..//.a// /b/.a
+/b/c/./..//..aa /b/..aa
+/b/c/./..//..a. /b/..a.
+/b/c/./..//..a/ /b/..a
+/b/c/./..//...a /b/...a
+/b/c/./..//.... /b/....
+/b/c/./..//.../ /b/...
+/b/c/./..//../a /a
+/b/c/./..//../. /
+/b/c/./..//..// /
+/b/c/./..//./aa /b/aa
+/b/c/./..//./a. /b/a.
+/b/c/./..//./a/ /b/a
+/b/c/./..//./.a /b/.a
+/b/c/./..//./.. /
+/b/c/./..//././ /b
+/b/c/./..//.//a /b/a
+/b/c/./..//.//. /b
+/b/c/./..//./// /b
+/b/c/./..///aaa /b/aaa
+/b/c/./..///aa. /b/aa.
+/b/c/./..///aa/ /b/aa
+/b/c/./..///a.a /b/a.a
+/b/c/./..///a.. /b/a..
+/b/c/./..///a./ /b/a.
+/b/c/./..///a/a /b/a/a
+/b/c/./..///a/. /b/a
+/b/c/./..///a// /b/a
+/b/c/./..///.aa /b/.aa
+/b/c/./..///.a. /b/.a.
+/b/c/./..///.a/ /b/.a
+/b/c/./..///..a /b/..a
+/b/c/./..///... /b/...
+/b/c/./..///../ /
+/b/c/./..///./a /b/a
+/b/c/./..///./. /b
+/b/c/./..///.// /b
+/b/c/./..////aa /b/aa
+/b/c/./..////a. /b/a.
+/b/c/./..////a/ /b/a
+/b/c/./..////.a /b/.a
+/b/c/./..////.. /
+/b/c/./..////./ /b
+/b/c/./../////a /b/a
+/b/c/./../////. /b
+/b/c/./..////// /b
+/b/c/././aaaaaa /b/c/aaaaaa
+/b/c/././aaaaa. /b/c/aaaaa.
+/b/c/././aaaaa/ /b/c/aaaaa
+/b/c/././aaaa.a /b/c/aaaa.a
+/b/c/././aaaa.. /b/c/aaaa..
+/b/c/././aaaa./ /b/c/aaaa.
+/b/c/././aaaa/a /b/c/aaaa/a
+/b/c/././aaaa/. /b/c/aaaa
+/b/c/././aaaa// /b/c/aaaa
+/b/c/././aaa.aa /b/c/aaa.aa
+/b/c/././aaa.a. /b/c/aaa.a.
+/b/c/././aaa.a/ /b/c/aaa.a
+/b/c/././aaa..a /b/c/aaa..a
+/b/c/././aaa... /b/c/aaa...
+/b/c/././aaa../ /b/c/aaa..
+/b/c/././aaa./a /b/c/aaa./a
+/b/c/././aaa./. /b/c/aaa.
+/b/c/././aaa.// /b/c/aaa.
+/b/c/././aaa/aa /b/c/aaa/aa
+/b/c/././aaa/a. /b/c/aaa/a.
+/b/c/././aaa/a/ /b/c/aaa/a
+/b/c/././aaa/.a /b/c/aaa/.a
+/b/c/././aaa/.. /b/c
+/b/c/././aaa/./ /b/c/aaa
+/b/c/././aaa//a /b/c/aaa/a
+/b/c/././aaa//. /b/c/aaa
+/b/c/././aaa/// /b/c/aaa
+/b/c/././aa.aaa /b/c/aa.aaa
+/b/c/././aa.aa. /b/c/aa.aa.
+/b/c/././aa.aa/ /b/c/aa.aa
+/b/c/././aa.a.a /b/c/aa.a.a
+/b/c/././aa.a.. /b/c/aa.a..
+/b/c/././aa.a./ /b/c/aa.a.
+/b/c/././aa.a/a /b/c/aa.a/a
+/b/c/././aa.a/. /b/c/aa.a
+/b/c/././aa.a// /b/c/aa.a
+/b/c/././aa..aa /b/c/aa..aa
+/b/c/././aa..a. /b/c/aa..a.
+/b/c/././aa..a/ /b/c/aa..a
+/b/c/././aa...a /b/c/aa...a
+/b/c/././aa.... /b/c/aa....
+/b/c/././aa.../ /b/c/aa...
+/b/c/././aa../a /b/c/aa../a
+/b/c/././aa../. /b/c/aa..
+/b/c/././aa..// /b/c/aa..
+/b/c/././aa./aa /b/c/aa./aa
+/b/c/././aa./a. /b/c/aa./a.
+/b/c/././aa./a/ /b/c/aa./a
+/b/c/././aa./.a /b/c/aa./.a
+/b/c/././aa./.. /b/c
+/b/c/././aa././ /b/c/aa.
+/b/c/././aa.//a /b/c/aa./a
+/b/c/././aa.//. /b/c/aa.
+/b/c/././aa./// /b/c/aa.
+/b/c/././aa/aaa /b/c/aa/aaa
+/b/c/././aa/aa. /b/c/aa/aa.
+/b/c/././aa/aa/ /b/c/aa/aa
+/b/c/././aa/a.a /b/c/aa/a.a
+/b/c/././aa/a.. /b/c/aa/a..
+/b/c/././aa/a./ /b/c/aa/a.
+/b/c/././aa/a/a /b/c/aa/a/a
+/b/c/././aa/a/. /b/c/aa/a
+/b/c/././aa/a// /b/c/aa/a
+/b/c/././aa/.aa /b/c/aa/.aa
+/b/c/././aa/.a. /b/c/aa/.a.
+/b/c/././aa/.a/ /b/c/aa/.a
+/b/c/././aa/..a /b/c/aa/..a
+/b/c/././aa/... /b/c/aa/...
+/b/c/././aa/../ /b/c
+/b/c/././aa/./a /b/c/aa/a
+/b/c/././aa/./. /b/c/aa
+/b/c/././aa/.// /b/c/aa
+/b/c/././aa//aa /b/c/aa/aa
+/b/c/././aa//a. /b/c/aa/a.
+/b/c/././aa//a/ /b/c/aa/a
+/b/c/././aa//.a /b/c/aa/.a
+/b/c/././aa//.. /b/c
+/b/c/././aa//./ /b/c/aa
+/b/c/././aa///a /b/c/aa/a
+/b/c/././aa///. /b/c/aa
+/b/c/././aa//// /b/c/aa
+/b/c/././a.aaaa /b/c/a.aaaa
+/b/c/././a.aaa. /b/c/a.aaa.
+/b/c/././a.aaa/ /b/c/a.aaa
+/b/c/././a.aa.a /b/c/a.aa.a
+/b/c/././a.aa.. /b/c/a.aa..
+/b/c/././a.aa./ /b/c/a.aa.
+/b/c/././a.aa/a /b/c/a.aa/a
+/b/c/././a.aa/. /b/c/a.aa
+/b/c/././a.aa// /b/c/a.aa
+/b/c/././a.a.aa /b/c/a.a.aa
+/b/c/././a.a.a. /b/c/a.a.a.
+/b/c/././a.a.a/ /b/c/a.a.a
+/b/c/././a.a..a /b/c/a.a..a
+/b/c/././a.a... /b/c/a.a...
+/b/c/././a.a../ /b/c/a.a..
+/b/c/././a.a./a /b/c/a.a./a
+/b/c/././a.a./. /b/c/a.a.
+/b/c/././a.a.// /b/c/a.a.
+/b/c/././a.a/aa /b/c/a.a/aa
+/b/c/././a.a/a. /b/c/a.a/a.
+/b/c/././a.a/a/ /b/c/a.a/a
+/b/c/././a.a/.a /b/c/a.a/.a
+/b/c/././a.a/.. /b/c
+/b/c/././a.a/./ /b/c/a.a
+/b/c/././a.a//a /b/c/a.a/a
+/b/c/././a.a//. /b/c/a.a
+/b/c/././a.a/// /b/c/a.a
+/b/c/././a..aaa /b/c/a..aaa
+/b/c/././a..aa. /b/c/a..aa.
+/b/c/././a..aa/ /b/c/a..aa
+/b/c/././a..a.a /b/c/a..a.a
+/b/c/././a..a.. /b/c/a..a..
+/b/c/././a..a./ /b/c/a..a.
+/b/c/././a..a/a /b/c/a..a/a
+/b/c/././a..a/. /b/c/a..a
+/b/c/././a..a// /b/c/a..a
+/b/c/././a...aa /b/c/a...aa
+/b/c/././a...a. /b/c/a...a.
+/b/c/././a...a/ /b/c/a...a
+/b/c/././a....a /b/c/a....a
+/b/c/././a..... /b/c/a.....
+/b/c/././a..../ /b/c/a....
+/b/c/././a.../a /b/c/a.../a
+/b/c/././a.../. /b/c/a...
+/b/c/././a...// /b/c/a...
+/b/c/././a../aa /b/c/a../aa
+/b/c/././a../a. /b/c/a../a.
+/b/c/././a../a/ /b/c/a../a
+/b/c/././a../.a /b/c/a../.a
+/b/c/././a../.. /b/c
+/b/c/././a.././ /b/c/a..
+/b/c/././a..//a /b/c/a../a
+/b/c/././a..//. /b/c/a..
+/b/c/././a../// /b/c/a..
+/b/c/././a./aaa /b/c/a./aaa
+/b/c/././a./aa. /b/c/a./aa.
+/b/c/././a./aa/ /b/c/a./aa
+/b/c/././a./a.a /b/c/a./a.a
+/b/c/././a./a.. /b/c/a./a..
+/b/c/././a./a./ /b/c/a./a.
+/b/c/././a./a/a /b/c/a./a/a
+/b/c/././a./a/. /b/c/a./a
+/b/c/././a./a// /b/c/a./a
+/b/c/././a./.aa /b/c/a./.aa
+/b/c/././a./.a. /b/c/a./.a.
+/b/c/././a./.a/ /b/c/a./.a
+/b/c/././a./..a /b/c/a./..a
+/b/c/././a./... /b/c/a./...
+/b/c/././a./../ /b/c
+/b/c/././a././a /b/c/a./a
+/b/c/././a././. /b/c/a.
+/b/c/././a./.// /b/c/a.
+/b/c/././a.//aa /b/c/a./aa
+/b/c/././a.//a. /b/c/a./a.
+/b/c/././a.//a/ /b/c/a./a
+/b/c/././a.//.a /b/c/a./.a
+/b/c/././a.//.. /b/c
+/b/c/././a.//./ /b/c/a.
+/b/c/././a.///a /b/c/a./a
+/b/c/././a.///. /b/c/a.
+/b/c/././a.//// /b/c/a.
+/b/c/././a/aaaa /b/c/a/aaaa
+/b/c/././a/aaa. /b/c/a/aaa.
+/b/c/././a/aaa/ /b/c/a/aaa
+/b/c/././a/aa.a /b/c/a/aa.a
+/b/c/././a/aa.. /b/c/a/aa..
+/b/c/././a/aa./ /b/c/a/aa.
+/b/c/././a/aa/a /b/c/a/aa/a
+/b/c/././a/aa/. /b/c/a/aa
+/b/c/././a/aa// /b/c/a/aa
+/b/c/././a/a.aa /b/c/a/a.aa
+/b/c/././a/a.a. /b/c/a/a.a.
+/b/c/././a/a.a/ /b/c/a/a.a
+/b/c/././a/a..a /b/c/a/a..a
+/b/c/././a/a... /b/c/a/a...
+/b/c/././a/a../ /b/c/a/a..
+/b/c/././a/a./a /b/c/a/a./a
+/b/c/././a/a./. /b/c/a/a.
+/b/c/././a/a.// /b/c/a/a.
+/b/c/././a/a/aa /b/c/a/a/aa
+/b/c/././a/a/a. /b/c/a/a/a.
+/b/c/././a/a/a/ /b/c/a/a/a
+/b/c/././a/a/.a /b/c/a/a/.a
+/b/c/././a/a/.. /b/c/a
+/b/c/././a/a/./ /b/c/a/a
+/b/c/././a/a//a /b/c/a/a/a
+/b/c/././a/a//. /b/c/a/a
+/b/c/././a/a/// /b/c/a/a
+/b/c/././a/.aaa /b/c/a/.aaa
+/b/c/././a/.aa. /b/c/a/.aa.
+/b/c/././a/.aa/ /b/c/a/.aa
+/b/c/././a/.a.a /b/c/a/.a.a
+/b/c/././a/.a.. /b/c/a/.a..
+/b/c/././a/.a./ /b/c/a/.a.
+/b/c/././a/.a/a /b/c/a/.a/a
+/b/c/././a/.a/. /b/c/a/.a
+/b/c/././a/.a// /b/c/a/.a
+/b/c/././a/..aa /b/c/a/..aa
+/b/c/././a/..a. /b/c/a/..a.
+/b/c/././a/..a/ /b/c/a/..a
+/b/c/././a/...a /b/c/a/...a
+/b/c/././a/.... /b/c/a/....
+/b/c/././a/.../ /b/c/a/...
+/b/c/././a/../a /b/c/a
+/b/c/././a/../. /b/c
+/b/c/././a/..// /b/c
+/b/c/././a/./aa /b/c/a/aa
+/b/c/././a/./a. /b/c/a/a.
+/b/c/././a/./a/ /b/c/a/a
+/b/c/././a/./.a /b/c/a/.a
+/b/c/././a/./.. /b/c
+/b/c/././a/././ /b/c/a
+/b/c/././a/.//a /b/c/a/a
+/b/c/././a/.//. /b/c/a
+/b/c/././a/./// /b/c/a
+/b/c/././a//aaa /b/c/a/aaa
+/b/c/././a//aa. /b/c/a/aa.
+/b/c/././a//aa/ /b/c/a/aa
+/b/c/././a//a.a /b/c/a/a.a
+/b/c/././a//a.. /b/c/a/a..
+/b/c/././a//a./ /b/c/a/a.
+/b/c/././a//a/a /b/c/a/a/a
+/b/c/././a//a/. /b/c/a/a
+/b/c/././a//a// /b/c/a/a
+/b/c/././a//.aa /b/c/a/.aa
+/b/c/././a//.a. /b/c/a/.a.
+/b/c/././a//.a/ /b/c/a/.a
+/b/c/././a//..a /b/c/a/..a
+/b/c/././a//... /b/c/a/...
+/b/c/././a//../ /b/c
+/b/c/././a//./a /b/c/a/a
+/b/c/././a//./. /b/c/a
+/b/c/././a//.// /b/c/a
+/b/c/././a///aa /b/c/a/aa
+/b/c/././a///a. /b/c/a/a.
+/b/c/././a///a/ /b/c/a/a
+/b/c/././a///.a /b/c/a/.a
+/b/c/././a///.. /b/c
+/b/c/././a///./ /b/c/a
+/b/c/././a////a /b/c/a/a
+/b/c/././a////. /b/c/a
+/b/c/././a///// /b/c/a
+/b/c/././.aaaaa /b/c/.aaaaa
+/b/c/././.aaaa. /b/c/.aaaa.
+/b/c/././.aaaa/ /b/c/.aaaa
+/b/c/././.aaa.a /b/c/.aaa.a
+/b/c/././.aaa.. /b/c/.aaa..
+/b/c/././.aaa./ /b/c/.aaa.
+/b/c/././.aaa/a /b/c/.aaa/a
+/b/c/././.aaa/. /b/c/.aaa
+/b/c/././.aaa// /b/c/.aaa
+/b/c/././.aa.aa /b/c/.aa.aa
+/b/c/././.aa.a. /b/c/.aa.a.
+/b/c/././.aa.a/ /b/c/.aa.a
+/b/c/././.aa..a /b/c/.aa..a
+/b/c/././.aa... /b/c/.aa...
+/b/c/././.aa../ /b/c/.aa..
+/b/c/././.aa./a /b/c/.aa./a
+/b/c/././.aa./. /b/c/.aa.
+/b/c/././.aa.// /b/c/.aa.
+/b/c/././.aa/aa /b/c/.aa/aa
+/b/c/././.aa/a. /b/c/.aa/a.
+/b/c/././.aa/a/ /b/c/.aa/a
+/b/c/././.aa/.a /b/c/.aa/.a
+/b/c/././.aa/.. /b/c
+/b/c/././.aa/./ /b/c/.aa
+/b/c/././.aa//a /b/c/.aa/a
+/b/c/././.aa//. /b/c/.aa
+/b/c/././.aa/// /b/c/.aa
+/b/c/././.a.aaa /b/c/.a.aaa
+/b/c/././.a.aa. /b/c/.a.aa.
+/b/c/././.a.aa/ /b/c/.a.aa
+/b/c/././.a.a.a /b/c/.a.a.a
+/b/c/././.a.a.. /b/c/.a.a..
+/b/c/././.a.a./ /b/c/.a.a.
+/b/c/././.a.a/a /b/c/.a.a/a
+/b/c/././.a.a/. /b/c/.a.a
+/b/c/././.a.a// /b/c/.a.a
+/b/c/././.a..aa /b/c/.a..aa
+/b/c/././.a..a. /b/c/.a..a.
+/b/c/././.a..a/ /b/c/.a..a
+/b/c/././.a...a /b/c/.a...a
+/b/c/././.a.... /b/c/.a....
+/b/c/././.a.../ /b/c/.a...
+/b/c/././.a../a /b/c/.a../a
+/b/c/././.a../. /b/c/.a..
+/b/c/././.a..// /b/c/.a..
+/b/c/././.a./aa /b/c/.a./aa
+/b/c/././.a./a. /b/c/.a./a.
+/b/c/././.a./a/ /b/c/.a./a
+/b/c/././.a./.a /b/c/.a./.a
+/b/c/././.a./.. /b/c
+/b/c/././.a././ /b/c/.a.
+/b/c/././.a.//a /b/c/.a./a
+/b/c/././.a.//. /b/c/.a.
+/b/c/././.a./// /b/c/.a.
+/b/c/././.a/aaa /b/c/.a/aaa
+/b/c/././.a/aa. /b/c/.a/aa.
+/b/c/././.a/aa/ /b/c/.a/aa
+/b/c/././.a/a.a /b/c/.a/a.a
+/b/c/././.a/a.. /b/c/.a/a..
+/b/c/././.a/a./ /b/c/.a/a.
+/b/c/././.a/a/a /b/c/.a/a/a
+/b/c/././.a/a/. /b/c/.a/a
+/b/c/././.a/a// /b/c/.a/a
+/b/c/././.a/.aa /b/c/.a/.aa
+/b/c/././.a/.a. /b/c/.a/.a.
+/b/c/././.a/.a/ /b/c/.a/.a
+/b/c/././.a/..a /b/c/.a/..a
+/b/c/././.a/... /b/c/.a/...
+/b/c/././.a/../ /b/c
+/b/c/././.a/./a /b/c/.a/a
+/b/c/././.a/./. /b/c/.a
+/b/c/././.a/.// /b/c/.a
+/b/c/././.a//aa /b/c/.a/aa
+/b/c/././.a//a. /b/c/.a/a.
+/b/c/././.a//a/ /b/c/.a/a
+/b/c/././.a//.a /b/c/.a/.a
+/b/c/././.a//.. /b/c
+/b/c/././.a//./ /b/c/.a
+/b/c/././.a///a /b/c/.a/a
+/b/c/././.a///. /b/c/.a
+/b/c/././.a//// /b/c/.a
+/b/c/././..aaaa /b/c/..aaaa
+/b/c/././..aaa. /b/c/..aaa.
+/b/c/././..aaa/ /b/c/..aaa
+/b/c/././..aa.a /b/c/..aa.a
+/b/c/././..aa.. /b/c/..aa..
+/b/c/././..aa./ /b/c/..aa.
+/b/c/././..aa/a /b/c/..aa/a
+/b/c/././..aa/. /b/c/..aa
+/b/c/././..aa// /b/c/..aa
+/b/c/././..a.aa /b/c/..a.aa
+/b/c/././..a.a. /b/c/..a.a.
+/b/c/././..a.a/ /b/c/..a.a
+/b/c/././..a..a /b/c/..a..a
+/b/c/././..a... /b/c/..a...
+/b/c/././..a../ /b/c/..a..
+/b/c/././..a./a /b/c/..a./a
+/b/c/././..a./. /b/c/..a.
+/b/c/././..a.// /b/c/..a.
+/b/c/././..a/aa /b/c/..a/aa
+/b/c/././..a/a. /b/c/..a/a.
+/b/c/././..a/a/ /b/c/..a/a
+/b/c/././..a/.a /b/c/..a/.a
+/b/c/././..a/.. /b/c
+/b/c/././..a/./ /b/c/..a
+/b/c/././..a//a /b/c/..a/a
+/b/c/././..a//. /b/c/..a
+/b/c/././..a/// /b/c/..a
+/b/c/././...aaa /b/c/...aaa
+/b/c/././...aa. /b/c/...aa.
+/b/c/././...aa/ /b/c/...aa
+/b/c/././...a.a /b/c/...a.a
+/b/c/././...a.. /b/c/...a..
+/b/c/././...a./ /b/c/...a.
+/b/c/././...a/a /b/c/...a/a
+/b/c/././...a/. /b/c/...a
+/b/c/././...a// /b/c/...a
+/b/c/././....aa /b/c/....aa
+/b/c/././....a. /b/c/....a.
+/b/c/././....a/ /b/c/....a
+/b/c/././.....a /b/c/.....a
+/b/c/././...... /b/c/......
+/b/c/././...../ /b/c/.....
+/b/c/././..../a /b/c/..../a
+/b/c/././..../. /b/c/....
+/b/c/././....// /b/c/....
+/b/c/././.../aa /b/c/.../aa
+/b/c/././.../a. /b/c/.../a.
+/b/c/././.../a/ /b/c/.../a
+/b/c/././.../.a /b/c/.../.a
+/b/c/././.../.. /b/c
+/b/c/././..././ /b/c/...
+/b/c/././...//a /b/c/.../a
+/b/c/././...//. /b/c/...
+/b/c/././.../// /b/c/...
+/b/c/././../aaa /b/aaa
+/b/c/././../aa. /b/aa.
+/b/c/././../aa/ /b/aa
+/b/c/././../a.a /b/a.a
+/b/c/././../a.. /b/a..
+/b/c/././../a./ /b/a.
+/b/c/././../a/a /b/a/a
+/b/c/././../a/. /b/a
+/b/c/././../a// /b/a
+/b/c/././../.aa /b/.aa
+/b/c/././../.a. /b/.a.
+/b/c/././../.a/ /b/.a
+/b/c/././../..a /b/..a
+/b/c/././../... /b/...
+/b/c/././../../ /
+/b/c/././.././a /b/a
+/b/c/././.././. /b
+/b/c/././../.// /b
+/b/c/././..//aa /b/aa
+/b/c/././..//a. /b/a.
+/b/c/././..//a/ /b/a
+/b/c/././..//.a /b/.a
+/b/c/././..//.. /
+/b/c/././..//./ /b
+/b/c/././..///a /b/a
+/b/c/././..///. /b
+/b/c/././..//// /b
+/b/c/./././aaaa /b/c/aaaa
+/b/c/./././aaa. /b/c/aaa.
+/b/c/./././aaa/ /b/c/aaa
+/b/c/./././aa.a /b/c/aa.a
+/b/c/./././aa.. /b/c/aa..
+/b/c/./././aa./ /b/c/aa.
+/b/c/./././aa/a /b/c/aa/a
+/b/c/./././aa/. /b/c/aa
+/b/c/./././aa// /b/c/aa
+/b/c/./././a.aa /b/c/a.aa
+/b/c/./././a.a. /b/c/a.a.
+/b/c/./././a.a/ /b/c/a.a
+/b/c/./././a..a /b/c/a..a
+/b/c/./././a... /b/c/a...
+/b/c/./././a../ /b/c/a..
+/b/c/./././a./a /b/c/a./a
+/b/c/./././a./. /b/c/a.
+/b/c/./././a.// /b/c/a.
+/b/c/./././a/aa /b/c/a/aa
+/b/c/./././a/a. /b/c/a/a.
+/b/c/./././a/a/ /b/c/a/a
+/b/c/./././a/.a /b/c/a/.a
+/b/c/./././a/.. /b/c
+/b/c/./././a/./ /b/c/a
+/b/c/./././a//a /b/c/a/a
+/b/c/./././a//. /b/c/a
+/b/c/./././a/// /b/c/a
+/b/c/./././.aaa /b/c/.aaa
+/b/c/./././.aa. /b/c/.aa.
+/b/c/./././.aa/ /b/c/.aa
+/b/c/./././.a.a /b/c/.a.a
+/b/c/./././.a.. /b/c/.a..
+/b/c/./././.a./ /b/c/.a.
+/b/c/./././.a/a /b/c/.a/a
+/b/c/./././.a/. /b/c/.a
+/b/c/./././.a// /b/c/.a
+/b/c/./././..aa /b/c/..aa
+/b/c/./././..a. /b/c/..a.
+/b/c/./././..a/ /b/c/..a
+/b/c/./././...a /b/c/...a
+/b/c/./././.... /b/c/....
+/b/c/./././.../ /b/c/...
+/b/c/./././../a /b/a
+/b/c/./././../. /b
+/b/c/./././..// /b
+/b/c/././././aa /b/c/aa
+/b/c/././././a. /b/c/a.
+/b/c/././././a/ /b/c/a
+/b/c/././././.a /b/c/.a
+/b/c/././././.. /b
+/b/c/./././././ /b/c
+/b/c/././././/a /b/c/a
+/b/c/././././/. /b/c
+/b/c/././././// /b/c
+/b/c/./././/aaa /b/c/aaa
+/b/c/./././/aa. /b/c/aa.
+/b/c/./././/aa/ /b/c/aa
+/b/c/./././/a.a /b/c/a.a
+/b/c/./././/a.. /b/c/a..
+/b/c/./././/a./ /b/c/a.
+/b/c/./././/a/a /b/c/a/a
+/b/c/./././/a/. /b/c/a
+/b/c/./././/a// /b/c/a
+/b/c/./././/.aa /b/c/.aa
+/b/c/./././/.a. /b/c/.a.
+/b/c/./././/.a/ /b/c/.a
+/b/c/./././/..a /b/c/..a
+/b/c/./././/... /b/c/...
+/b/c/./././/../ /b
+/b/c/./././/./a /b/c/a
+/b/c/./././/./. /b/c
+/b/c/./././/.// /b/c
+/b/c/./././//aa /b/c/aa
+/b/c/./././//a. /b/c/a.
+/b/c/./././//a/ /b/c/a
+/b/c/./././//.a /b/c/.a
+/b/c/./././//.. /b
+/b/c/./././//./ /b/c
+/b/c/./././///a /b/c/a
+/b/c/./././///. /b/c
+/b/c/./././//// /b/c
+/b/c/././/aaaaa /b/c/aaaaa
+/b/c/././/aaaa. /b/c/aaaa.
+/b/c/././/aaaa/ /b/c/aaaa
+/b/c/././/aaa.a /b/c/aaa.a
+/b/c/././/aaa.. /b/c/aaa..
+/b/c/././/aaa./ /b/c/aaa.
+/b/c/././/aaa/a /b/c/aaa/a
+/b/c/././/aaa/. /b/c/aaa
+/b/c/././/aaa// /b/c/aaa
+/b/c/././/aa.aa /b/c/aa.aa
+/b/c/././/aa.a. /b/c/aa.a.
+/b/c/././/aa.a/ /b/c/aa.a
+/b/c/././/aa..a /b/c/aa..a
+/b/c/././/aa... /b/c/aa...
+/b/c/././/aa../ /b/c/aa..
+/b/c/././/aa./a /b/c/aa./a
+/b/c/././/aa./. /b/c/aa.
+/b/c/././/aa.// /b/c/aa.
+/b/c/././/aa/aa /b/c/aa/aa
+/b/c/././/aa/a. /b/c/aa/a.
+/b/c/././/aa/a/ /b/c/aa/a
+/b/c/././/aa/.a /b/c/aa/.a
+/b/c/././/aa/.. /b/c
+/b/c/././/aa/./ /b/c/aa
+/b/c/././/aa//a /b/c/aa/a
+/b/c/././/aa//. /b/c/aa
+/b/c/././/aa/// /b/c/aa
+/b/c/././/a.aaa /b/c/a.aaa
+/b/c/././/a.aa. /b/c/a.aa.
+/b/c/././/a.aa/ /b/c/a.aa
+/b/c/././/a.a.a /b/c/a.a.a
+/b/c/././/a.a.. /b/c/a.a..
+/b/c/././/a.a./ /b/c/a.a.
+/b/c/././/a.a/a /b/c/a.a/a
+/b/c/././/a.a/. /b/c/a.a
+/b/c/././/a.a// /b/c/a.a
+/b/c/././/a..aa /b/c/a..aa
+/b/c/././/a..a. /b/c/a..a.
+/b/c/././/a..a/ /b/c/a..a
+/b/c/././/a...a /b/c/a...a
+/b/c/././/a.... /b/c/a....
+/b/c/././/a.../ /b/c/a...
+/b/c/././/a../a /b/c/a../a
+/b/c/././/a../. /b/c/a..
+/b/c/././/a..// /b/c/a..
+/b/c/././/a./aa /b/c/a./aa
+/b/c/././/a./a. /b/c/a./a.
+/b/c/././/a./a/ /b/c/a./a
+/b/c/././/a./.a /b/c/a./.a
+/b/c/././/a./.. /b/c
+/b/c/././/a././ /b/c/a.
+/b/c/././/a.//a /b/c/a./a
+/b/c/././/a.//. /b/c/a.
+/b/c/././/a./// /b/c/a.
+/b/c/././/a/aaa /b/c/a/aaa
+/b/c/././/a/aa. /b/c/a/aa.
+/b/c/././/a/aa/ /b/c/a/aa
+/b/c/././/a/a.a /b/c/a/a.a
+/b/c/././/a/a.. /b/c/a/a..
+/b/c/././/a/a./ /b/c/a/a.
+/b/c/././/a/a/a /b/c/a/a/a
+/b/c/././/a/a/. /b/c/a/a
+/b/c/././/a/a// /b/c/a/a
+/b/c/././/a/.aa /b/c/a/.aa
+/b/c/././/a/.a. /b/c/a/.a.
+/b/c/././/a/.a/ /b/c/a/.a
+/b/c/././/a/..a /b/c/a/..a
+/b/c/././/a/... /b/c/a/...
+/b/c/././/a/../ /b/c
+/b/c/././/a/./a /b/c/a/a
+/b/c/././/a/./. /b/c/a
+/b/c/././/a/.// /b/c/a
+/b/c/././/a//aa /b/c/a/aa
+/b/c/././/a//a. /b/c/a/a.
+/b/c/././/a//a/ /b/c/a/a
+/b/c/././/a//.a /b/c/a/.a
+/b/c/././/a//.. /b/c
+/b/c/././/a//./ /b/c/a
+/b/c/././/a///a /b/c/a/a
+/b/c/././/a///. /b/c/a
+/b/c/././/a//// /b/c/a
+/b/c/././/.aaaa /b/c/.aaaa
+/b/c/././/.aaa. /b/c/.aaa.
+/b/c/././/.aaa/ /b/c/.aaa
+/b/c/././/.aa.a /b/c/.aa.a
+/b/c/././/.aa.. /b/c/.aa..
+/b/c/././/.aa./ /b/c/.aa.
+/b/c/././/.aa/a /b/c/.aa/a
+/b/c/././/.aa/. /b/c/.aa
+/b/c/././/.aa// /b/c/.aa
+/b/c/././/.a.aa /b/c/.a.aa
+/b/c/././/.a.a. /b/c/.a.a.
+/b/c/././/.a.a/ /b/c/.a.a
+/b/c/././/.a..a /b/c/.a..a
+/b/c/././/.a... /b/c/.a...
+/b/c/././/.a../ /b/c/.a..
+/b/c/././/.a./a /b/c/.a./a
+/b/c/././/.a./. /b/c/.a.
+/b/c/././/.a.// /b/c/.a.
+/b/c/././/.a/aa /b/c/.a/aa
+/b/c/././/.a/a. /b/c/.a/a.
+/b/c/././/.a/a/ /b/c/.a/a
+/b/c/././/.a/.a /b/c/.a/.a
+/b/c/././/.a/.. /b/c
+/b/c/././/.a/./ /b/c/.a
+/b/c/././/.a//a /b/c/.a/a
+/b/c/././/.a//. /b/c/.a
+/b/c/././/.a/// /b/c/.a
+/b/c/././/..aaa /b/c/..aaa
+/b/c/././/..aa. /b/c/..aa.
+/b/c/././/..aa/ /b/c/..aa
+/b/c/././/..a.a /b/c/..a.a
+/b/c/././/..a.. /b/c/..a..
+/b/c/././/..a./ /b/c/..a.
+/b/c/././/..a/a /b/c/..a/a
+/b/c/././/..a/. /b/c/..a
+/b/c/././/..a// /b/c/..a
+/b/c/././/...aa /b/c/...aa
+/b/c/././/...a. /b/c/...a.
+/b/c/././/...a/ /b/c/...a
+/b/c/././/....a /b/c/....a
+/b/c/././/..... /b/c/.....
+/b/c/././/..../ /b/c/....
+/b/c/././/.../a /b/c/.../a
+/b/c/././/.../. /b/c/...
+/b/c/././/...// /b/c/...
+/b/c/././/../aa /b/aa
+/b/c/././/../a. /b/a.
+/b/c/././/../a/ /b/a
+/b/c/././/../.a /b/.a
+/b/c/././/../.. /
+/b/c/././/.././ /b
+/b/c/././/..//a /b/a
+/b/c/././/..//. /b
+/b/c/././/../// /b
+/b/c/././/./aaa /b/c/aaa
+/b/c/././/./aa. /b/c/aa.
+/b/c/././/./aa/ /b/c/aa
+/b/c/././/./a.a /b/c/a.a
+/b/c/././/./a.. /b/c/a..
+/b/c/././/./a./ /b/c/a.
+/b/c/././/./a/a /b/c/a/a
+/b/c/././/./a/. /b/c/a
+/b/c/././/./a// /b/c/a
+/b/c/././/./.aa /b/c/.aa
+/b/c/././/./.a. /b/c/.a.
+/b/c/././/./.a/ /b/c/.a
+/b/c/././/./..a /b/c/..a
+/b/c/././/./... /b/c/...
+/b/c/././/./../ /b
+/b/c/././/././a /b/c/a
+/b/c/././/././. /b/c
+/b/c/././/./.// /b/c
+/b/c/././/.//aa /b/c/aa
+/b/c/././/.//a. /b/c/a.
+/b/c/././/.//a/ /b/c/a
+/b/c/././/.//.a /b/c/.a
+/b/c/././/.//.. /b
+/b/c/././/.//./ /b/c
+/b/c/././/.///a /b/c/a
+/b/c/././/.///. /b/c
+/b/c/././/.//// /b/c
+/b/c/././//aaaa /b/c/aaaa
+/b/c/././//aaa. /b/c/aaa.
+/b/c/././//aaa/ /b/c/aaa
+/b/c/././//aa.a /b/c/aa.a
+/b/c/././//aa.. /b/c/aa..
+/b/c/././//aa./ /b/c/aa.
+/b/c/././//aa/a /b/c/aa/a
+/b/c/././//aa/. /b/c/aa
+/b/c/././//aa// /b/c/aa
+/b/c/././//a.aa /b/c/a.aa
+/b/c/././//a.a. /b/c/a.a.
+/b/c/././//a.a/ /b/c/a.a
+/b/c/././//a..a /b/c/a..a
+/b/c/././//a... /b/c/a...
+/b/c/././//a../ /b/c/a..
+/b/c/././//a./a /b/c/a./a
+/b/c/././//a./. /b/c/a.
+/b/c/././//a.// /b/c/a.
+/b/c/././//a/aa /b/c/a/aa
+/b/c/././//a/a. /b/c/a/a.
+/b/c/././//a/a/ /b/c/a/a
+/b/c/././//a/.a /b/c/a/.a
+/b/c/././//a/.. /b/c
+/b/c/././//a/./ /b/c/a
+/b/c/././//a//a /b/c/a/a
+/b/c/././//a//. /b/c/a
+/b/c/././//a/// /b/c/a
+/b/c/././//.aaa /b/c/.aaa
+/b/c/././//.aa. /b/c/.aa.
+/b/c/././//.aa/ /b/c/.aa
+/b/c/././//.a.a /b/c/.a.a
+/b/c/././//.a.. /b/c/.a..
+/b/c/././//.a./ /b/c/.a.
+/b/c/././//.a/a /b/c/.a/a
+/b/c/././//.a/. /b/c/.a
+/b/c/././//.a// /b/c/.a
+/b/c/././//..aa /b/c/..aa
+/b/c/././//..a. /b/c/..a.
+/b/c/././//..a/ /b/c/..a
+/b/c/././//...a /b/c/...a
+/b/c/././//.... /b/c/....
+/b/c/././//.../ /b/c/...
+/b/c/././//../a /b/a
+/b/c/././//../. /b
+/b/c/././//..// /b
+/b/c/././//./aa /b/c/aa
+/b/c/././//./a. /b/c/a.
+/b/c/././//./a/ /b/c/a
+/b/c/././//./.a /b/c/.a
+/b/c/././//./.. /b
+/b/c/././//././ /b/c
+/b/c/././//.//a /b/c/a
+/b/c/././//.//. /b/c
+/b/c/././//./// /b/c
+/b/c/././///aaa /b/c/aaa
+/b/c/././///aa. /b/c/aa.
+/b/c/././///aa/ /b/c/aa
+/b/c/././///a.a /b/c/a.a
+/b/c/././///a.. /b/c/a..
+/b/c/././///a./ /b/c/a.
+/b/c/././///a/a /b/c/a/a
+/b/c/././///a/. /b/c/a
+/b/c/././///a// /b/c/a
+/b/c/././///.aa /b/c/.aa
+/b/c/././///.a. /b/c/.a.
+/b/c/././///.a/ /b/c/.a
+/b/c/././///..a /b/c/..a
+/b/c/././///... /b/c/...
+/b/c/././///../ /b
+/b/c/././///./a /b/c/a
+/b/c/././///./. /b/c
+/b/c/././///.// /b/c
+/b/c/././////aa /b/c/aa
+/b/c/././////a. /b/c/a.
+/b/c/././////a/ /b/c/a
+/b/c/././////.a /b/c/.a
+/b/c/././////.. /b
+/b/c/././////./ /b/c
+/b/c/././/////a /b/c/a
+/b/c/././/////. /b/c
+/b/c/././////// /b/c
+/b/c/.//aaaaaaa /b/c/aaaaaaa
+/b/c/.//aaaaaa. /b/c/aaaaaa.
+/b/c/.//aaaaaa/ /b/c/aaaaaa
+/b/c/.//aaaaa.a /b/c/aaaaa.a
+/b/c/.//aaaaa.. /b/c/aaaaa..
+/b/c/.//aaaaa./ /b/c/aaaaa.
+/b/c/.//aaaaa/a /b/c/aaaaa/a
+/b/c/.//aaaaa/. /b/c/aaaaa
+/b/c/.//aaaaa// /b/c/aaaaa
+/b/c/.//aaaa.aa /b/c/aaaa.aa
+/b/c/.//aaaa.a. /b/c/aaaa.a.
+/b/c/.//aaaa.a/ /b/c/aaaa.a
+/b/c/.//aaaa..a /b/c/aaaa..a
+/b/c/.//aaaa... /b/c/aaaa...
+/b/c/.//aaaa../ /b/c/aaaa..
+/b/c/.//aaaa./a /b/c/aaaa./a
+/b/c/.//aaaa./. /b/c/aaaa.
+/b/c/.//aaaa.// /b/c/aaaa.
+/b/c/.//aaaa/aa /b/c/aaaa/aa
+/b/c/.//aaaa/a. /b/c/aaaa/a.
+/b/c/.//aaaa/a/ /b/c/aaaa/a
+/b/c/.//aaaa/.a /b/c/aaaa/.a
+/b/c/.//aaaa/.. /b/c
+/b/c/.//aaaa/./ /b/c/aaaa
+/b/c/.//aaaa//a /b/c/aaaa/a
+/b/c/.//aaaa//. /b/c/aaaa
+/b/c/.//aaaa/// /b/c/aaaa
+/b/c/.//aaa.aaa /b/c/aaa.aaa
+/b/c/.//aaa.aa. /b/c/aaa.aa.
+/b/c/.//aaa.aa/ /b/c/aaa.aa
+/b/c/.//aaa.a.a /b/c/aaa.a.a
+/b/c/.//aaa.a.. /b/c/aaa.a..
+/b/c/.//aaa.a./ /b/c/aaa.a.
+/b/c/.//aaa.a/a /b/c/aaa.a/a
+/b/c/.//aaa.a/. /b/c/aaa.a
+/b/c/.//aaa.a// /b/c/aaa.a
+/b/c/.//aaa..aa /b/c/aaa..aa
+/b/c/.//aaa..a. /b/c/aaa..a.
+/b/c/.//aaa..a/ /b/c/aaa..a
+/b/c/.//aaa...a /b/c/aaa...a
+/b/c/.//aaa.... /b/c/aaa....
+/b/c/.//aaa.../ /b/c/aaa...
+/b/c/.//aaa../a /b/c/aaa../a
+/b/c/.//aaa../. /b/c/aaa..
+/b/c/.//aaa..// /b/c/aaa..
+/b/c/.//aaa./aa /b/c/aaa./aa
+/b/c/.//aaa./a. /b/c/aaa./a.
+/b/c/.//aaa./a/ /b/c/aaa./a
+/b/c/.//aaa./.a /b/c/aaa./.a
+/b/c/.//aaa./.. /b/c
+/b/c/.//aaa././ /b/c/aaa.
+/b/c/.//aaa.//a /b/c/aaa./a
+/b/c/.//aaa.//. /b/c/aaa.
+/b/c/.//aaa./// /b/c/aaa.
+/b/c/.//aaa/aaa /b/c/aaa/aaa
+/b/c/.//aaa/aa. /b/c/aaa/aa.
+/b/c/.//aaa/aa/ /b/c/aaa/aa
+/b/c/.//aaa/a.a /b/c/aaa/a.a
+/b/c/.//aaa/a.. /b/c/aaa/a..
+/b/c/.//aaa/a./ /b/c/aaa/a.
+/b/c/.//aaa/a/a /b/c/aaa/a/a
+/b/c/.//aaa/a/. /b/c/aaa/a
+/b/c/.//aaa/a// /b/c/aaa/a
+/b/c/.//aaa/.aa /b/c/aaa/.aa
+/b/c/.//aaa/.a. /b/c/aaa/.a.
+/b/c/.//aaa/.a/ /b/c/aaa/.a
+/b/c/.//aaa/..a /b/c/aaa/..a
+/b/c/.//aaa/... /b/c/aaa/...
+/b/c/.//aaa/../ /b/c
+/b/c/.//aaa/./a /b/c/aaa/a
+/b/c/.//aaa/./. /b/c/aaa
+/b/c/.//aaa/.// /b/c/aaa
+/b/c/.//aaa//aa /b/c/aaa/aa
+/b/c/.//aaa//a. /b/c/aaa/a.
+/b/c/.//aaa//a/ /b/c/aaa/a
+/b/c/.//aaa//.a /b/c/aaa/.a
+/b/c/.//aaa//.. /b/c
+/b/c/.//aaa//./ /b/c/aaa
+/b/c/.//aaa///a /b/c/aaa/a
+/b/c/.//aaa///. /b/c/aaa
+/b/c/.//aaa//// /b/c/aaa
+/b/c/.//aa.aaaa /b/c/aa.aaaa
+/b/c/.//aa.aaa. /b/c/aa.aaa.
+/b/c/.//aa.aaa/ /b/c/aa.aaa
+/b/c/.//aa.aa.a /b/c/aa.aa.a
+/b/c/.//aa.aa.. /b/c/aa.aa..
+/b/c/.//aa.aa./ /b/c/aa.aa.
+/b/c/.//aa.aa/a /b/c/aa.aa/a
+/b/c/.//aa.aa/. /b/c/aa.aa
+/b/c/.//aa.aa// /b/c/aa.aa
+/b/c/.//aa.a.aa /b/c/aa.a.aa
+/b/c/.//aa.a.a. /b/c/aa.a.a.
+/b/c/.//aa.a.a/ /b/c/aa.a.a
+/b/c/.//aa.a..a /b/c/aa.a..a
+/b/c/.//aa.a... /b/c/aa.a...
+/b/c/.//aa.a../ /b/c/aa.a..
+/b/c/.//aa.a./a /b/c/aa.a./a
+/b/c/.//aa.a./. /b/c/aa.a.
+/b/c/.//aa.a.// /b/c/aa.a.
+/b/c/.//aa.a/aa /b/c/aa.a/aa
+/b/c/.//aa.a/a. /b/c/aa.a/a.
+/b/c/.//aa.a/a/ /b/c/aa.a/a
+/b/c/.//aa.a/.a /b/c/aa.a/.a
+/b/c/.//aa.a/.. /b/c
+/b/c/.//aa.a/./ /b/c/aa.a
+/b/c/.//aa.a//a /b/c/aa.a/a
+/b/c/.//aa.a//. /b/c/aa.a
+/b/c/.//aa.a/// /b/c/aa.a
+/b/c/.//aa..aaa /b/c/aa..aaa
+/b/c/.//aa..aa. /b/c/aa..aa.
+/b/c/.//aa..aa/ /b/c/aa..aa
+/b/c/.//aa..a.a /b/c/aa..a.a
+/b/c/.//aa..a.. /b/c/aa..a..
+/b/c/.//aa..a./ /b/c/aa..a.
+/b/c/.//aa..a/a /b/c/aa..a/a
+/b/c/.//aa..a/. /b/c/aa..a
+/b/c/.//aa..a// /b/c/aa..a
+/b/c/.//aa...aa /b/c/aa...aa
+/b/c/.//aa...a. /b/c/aa...a.
+/b/c/.//aa...a/ /b/c/aa...a
+/b/c/.//aa....a /b/c/aa....a
+/b/c/.//aa..... /b/c/aa.....
+/b/c/.//aa..../ /b/c/aa....
+/b/c/.//aa.../a /b/c/aa.../a
+/b/c/.//aa.../. /b/c/aa...
+/b/c/.//aa...// /b/c/aa...
+/b/c/.//aa../aa /b/c/aa../aa
+/b/c/.//aa../a. /b/c/aa../a.
+/b/c/.//aa../a/ /b/c/aa../a
+/b/c/.//aa../.a /b/c/aa../.a
+/b/c/.//aa../.. /b/c
+/b/c/.//aa.././ /b/c/aa..
+/b/c/.//aa..//a /b/c/aa../a
+/b/c/.//aa..//. /b/c/aa..
+/b/c/.//aa../// /b/c/aa..
+/b/c/.//aa./aaa /b/c/aa./aaa
+/b/c/.//aa./aa. /b/c/aa./aa.
+/b/c/.//aa./aa/ /b/c/aa./aa
+/b/c/.//aa./a.a /b/c/aa./a.a
+/b/c/.//aa./a.. /b/c/aa./a..
+/b/c/.//aa./a./ /b/c/aa./a.
+/b/c/.//aa./a/a /b/c/aa./a/a
+/b/c/.//aa./a/. /b/c/aa./a
+/b/c/.//aa./a// /b/c/aa./a
+/b/c/.//aa./.aa /b/c/aa./.aa
+/b/c/.//aa./.a. /b/c/aa./.a.
+/b/c/.//aa./.a/ /b/c/aa./.a
+/b/c/.//aa./..a /b/c/aa./..a
+/b/c/.//aa./... /b/c/aa./...
+/b/c/.//aa./../ /b/c
+/b/c/.//aa././a /b/c/aa./a
+/b/c/.//aa././. /b/c/aa.
+/b/c/.//aa./.// /b/c/aa.
+/b/c/.//aa.//aa /b/c/aa./aa
+/b/c/.//aa.//a. /b/c/aa./a.
+/b/c/.//aa.//a/ /b/c/aa./a
+/b/c/.//aa.//.a /b/c/aa./.a
+/b/c/.//aa.//.. /b/c
+/b/c/.//aa.//./ /b/c/aa.
+/b/c/.//aa.///a /b/c/aa./a
+/b/c/.//aa.///. /b/c/aa.
+/b/c/.//aa.//// /b/c/aa.
+/b/c/.//aa/aaaa /b/c/aa/aaaa
+/b/c/.//aa/aaa. /b/c/aa/aaa.
+/b/c/.//aa/aaa/ /b/c/aa/aaa
+/b/c/.//aa/aa.a /b/c/aa/aa.a
+/b/c/.//aa/aa.. /b/c/aa/aa..
+/b/c/.//aa/aa./ /b/c/aa/aa.
+/b/c/.//aa/aa/a /b/c/aa/aa/a
+/b/c/.//aa/aa/. /b/c/aa/aa
+/b/c/.//aa/aa// /b/c/aa/aa
+/b/c/.//aa/a.aa /b/c/aa/a.aa
+/b/c/.//aa/a.a. /b/c/aa/a.a.
+/b/c/.//aa/a.a/ /b/c/aa/a.a
+/b/c/.//aa/a..a /b/c/aa/a..a
+/b/c/.//aa/a... /b/c/aa/a...
+/b/c/.//aa/a../ /b/c/aa/a..
+/b/c/.//aa/a./a /b/c/aa/a./a
+/b/c/.//aa/a./. /b/c/aa/a.
+/b/c/.//aa/a.// /b/c/aa/a.
+/b/c/.//aa/a/aa /b/c/aa/a/aa
+/b/c/.//aa/a/a. /b/c/aa/a/a.
+/b/c/.//aa/a/a/ /b/c/aa/a/a
+/b/c/.//aa/a/.a /b/c/aa/a/.a
+/b/c/.//aa/a/.. /b/c/aa
+/b/c/.//aa/a/./ /b/c/aa/a
+/b/c/.//aa/a//a /b/c/aa/a/a
+/b/c/.//aa/a//. /b/c/aa/a
+/b/c/.//aa/a/// /b/c/aa/a
+/b/c/.//aa/.aaa /b/c/aa/.aaa
+/b/c/.//aa/.aa. /b/c/aa/.aa.
+/b/c/.//aa/.aa/ /b/c/aa/.aa
+/b/c/.//aa/.a.a /b/c/aa/.a.a
+/b/c/.//aa/.a.. /b/c/aa/.a..
+/b/c/.//aa/.a./ /b/c/aa/.a.
+/b/c/.//aa/.a/a /b/c/aa/.a/a
+/b/c/.//aa/.a/. /b/c/aa/.a
+/b/c/.//aa/.a// /b/c/aa/.a
+/b/c/.//aa/..aa /b/c/aa/..aa
+/b/c/.//aa/..a. /b/c/aa/..a.
+/b/c/.//aa/..a/ /b/c/aa/..a
+/b/c/.//aa/...a /b/c/aa/...a
+/b/c/.//aa/.... /b/c/aa/....
+/b/c/.//aa/.../ /b/c/aa/...
+/b/c/.//aa/../a /b/c/a
+/b/c/.//aa/../. /b/c
+/b/c/.//aa/..// /b/c
+/b/c/.//aa/./aa /b/c/aa/aa
+/b/c/.//aa/./a. /b/c/aa/a.
+/b/c/.//aa/./a/ /b/c/aa/a
+/b/c/.//aa/./.a /b/c/aa/.a
+/b/c/.//aa/./.. /b/c
+/b/c/.//aa/././ /b/c/aa
+/b/c/.//aa/.//a /b/c/aa/a
+/b/c/.//aa/.//. /b/c/aa
+/b/c/.//aa/./// /b/c/aa
+/b/c/.//aa//aaa /b/c/aa/aaa
+/b/c/.//aa//aa. /b/c/aa/aa.
+/b/c/.//aa//aa/ /b/c/aa/aa
+/b/c/.//aa//a.a /b/c/aa/a.a
+/b/c/.//aa//a.. /b/c/aa/a..
+/b/c/.//aa//a./ /b/c/aa/a.
+/b/c/.//aa//a/a /b/c/aa/a/a
+/b/c/.//aa//a/. /b/c/aa/a
+/b/c/.//aa//a// /b/c/aa/a
+/b/c/.//aa//.aa /b/c/aa/.aa
+/b/c/.//aa//.a. /b/c/aa/.a.
+/b/c/.//aa//.a/ /b/c/aa/.a
+/b/c/.//aa//..a /b/c/aa/..a
+/b/c/.//aa//... /b/c/aa/...
+/b/c/.//aa//../ /b/c
+/b/c/.//aa//./a /b/c/aa/a
+/b/c/.//aa//./. /b/c/aa
+/b/c/.//aa//.// /b/c/aa
+/b/c/.//aa///aa /b/c/aa/aa
+/b/c/.//aa///a. /b/c/aa/a.
+/b/c/.//aa///a/ /b/c/aa/a
+/b/c/.//aa///.a /b/c/aa/.a
+/b/c/.//aa///.. /b/c
+/b/c/.//aa///./ /b/c/aa
+/b/c/.//aa////a /b/c/aa/a
+/b/c/.//aa////. /b/c/aa
+/b/c/.//aa///// /b/c/aa
+/b/c/.//a.aaaaa /b/c/a.aaaaa
+/b/c/.//a.aaaa. /b/c/a.aaaa.
+/b/c/.//a.aaaa/ /b/c/a.aaaa
+/b/c/.//a.aaa.a /b/c/a.aaa.a
+/b/c/.//a.aaa.. /b/c/a.aaa..
+/b/c/.//a.aaa./ /b/c/a.aaa.
+/b/c/.//a.aaa/a /b/c/a.aaa/a
+/b/c/.//a.aaa/. /b/c/a.aaa
+/b/c/.//a.aaa// /b/c/a.aaa
+/b/c/.//a.aa.aa /b/c/a.aa.aa
+/b/c/.//a.aa.a. /b/c/a.aa.a.
+/b/c/.//a.aa.a/ /b/c/a.aa.a
+/b/c/.//a.aa..a /b/c/a.aa..a
+/b/c/.//a.aa... /b/c/a.aa...
+/b/c/.//a.aa../ /b/c/a.aa..
+/b/c/.//a.aa./a /b/c/a.aa./a
+/b/c/.//a.aa./. /b/c/a.aa.
+/b/c/.//a.aa.// /b/c/a.aa.
+/b/c/.//a.aa/aa /b/c/a.aa/aa
+/b/c/.//a.aa/a. /b/c/a.aa/a.
+/b/c/.//a.aa/a/ /b/c/a.aa/a
+/b/c/.//a.aa/.a /b/c/a.aa/.a
+/b/c/.//a.aa/.. /b/c
+/b/c/.//a.aa/./ /b/c/a.aa
+/b/c/.//a.aa//a /b/c/a.aa/a
+/b/c/.//a.aa//. /b/c/a.aa
+/b/c/.//a.aa/// /b/c/a.aa
+/b/c/.//a.a.aaa /b/c/a.a.aaa
+/b/c/.//a.a.aa. /b/c/a.a.aa.
+/b/c/.//a.a.aa/ /b/c/a.a.aa
+/b/c/.//a.a.a.a /b/c/a.a.a.a
+/b/c/.//a.a.a.. /b/c/a.a.a..
+/b/c/.//a.a.a./ /b/c/a.a.a.
+/b/c/.//a.a.a/a /b/c/a.a.a/a
+/b/c/.//a.a.a/. /b/c/a.a.a
+/b/c/.//a.a.a// /b/c/a.a.a
+/b/c/.//a.a..aa /b/c/a.a..aa
+/b/c/.//a.a..a. /b/c/a.a..a.
+/b/c/.//a.a..a/ /b/c/a.a..a
+/b/c/.//a.a...a /b/c/a.a...a
+/b/c/.//a.a.... /b/c/a.a....
+/b/c/.//a.a.../ /b/c/a.a...
+/b/c/.//a.a../a /b/c/a.a../a
+/b/c/.//a.a../. /b/c/a.a..
+/b/c/.//a.a..// /b/c/a.a..
+/b/c/.//a.a./aa /b/c/a.a./aa
+/b/c/.//a.a./a. /b/c/a.a./a.
+/b/c/.//a.a./a/ /b/c/a.a./a
+/b/c/.//a.a./.a /b/c/a.a./.a
+/b/c/.//a.a./.. /b/c
+/b/c/.//a.a././ /b/c/a.a.
+/b/c/.//a.a.//a /b/c/a.a./a
+/b/c/.//a.a.//. /b/c/a.a.
+/b/c/.//a.a./// /b/c/a.a.
+/b/c/.//a.a/aaa /b/c/a.a/aaa
+/b/c/.//a.a/aa. /b/c/a.a/aa.
+/b/c/.//a.a/aa/ /b/c/a.a/aa
+/b/c/.//a.a/a.a /b/c/a.a/a.a
+/b/c/.//a.a/a.. /b/c/a.a/a..
+/b/c/.//a.a/a./ /b/c/a.a/a.
+/b/c/.//a.a/a/a /b/c/a.a/a/a
+/b/c/.//a.a/a/. /b/c/a.a/a
+/b/c/.//a.a/a// /b/c/a.a/a
+/b/c/.//a.a/.aa /b/c/a.a/.aa
+/b/c/.//a.a/.a. /b/c/a.a/.a.
+/b/c/.//a.a/.a/ /b/c/a.a/.a
+/b/c/.//a.a/..a /b/c/a.a/..a
+/b/c/.//a.a/... /b/c/a.a/...
+/b/c/.//a.a/../ /b/c
+/b/c/.//a.a/./a /b/c/a.a/a
+/b/c/.//a.a/./. /b/c/a.a
+/b/c/.//a.a/.// /b/c/a.a
+/b/c/.//a.a//aa /b/c/a.a/aa
+/b/c/.//a.a//a. /b/c/a.a/a.
+/b/c/.//a.a//a/ /b/c/a.a/a
+/b/c/.//a.a//.a /b/c/a.a/.a
+/b/c/.//a.a//.. /b/c
+/b/c/.//a.a//./ /b/c/a.a
+/b/c/.//a.a///a /b/c/a.a/a
+/b/c/.//a.a///. /b/c/a.a
+/b/c/.//a.a//// /b/c/a.a
+/b/c/.//a..aaaa /b/c/a..aaaa
+/b/c/.//a..aaa. /b/c/a..aaa.
+/b/c/.//a..aaa/ /b/c/a..aaa
+/b/c/.//a..aa.a /b/c/a..aa.a
+/b/c/.//a..aa.. /b/c/a..aa..
+/b/c/.//a..aa./ /b/c/a..aa.
+/b/c/.//a..aa/a /b/c/a..aa/a
+/b/c/.//a..aa/. /b/c/a..aa
+/b/c/.//a..aa// /b/c/a..aa
+/b/c/.//a..a.aa /b/c/a..a.aa
+/b/c/.//a..a.a. /b/c/a..a.a.
+/b/c/.//a..a.a/ /b/c/a..a.a
+/b/c/.//a..a..a /b/c/a..a..a
+/b/c/.//a..a... /b/c/a..a...
+/b/c/.//a..a../ /b/c/a..a..
+/b/c/.//a..a./a /b/c/a..a./a
+/b/c/.//a..a./. /b/c/a..a.
+/b/c/.//a..a.// /b/c/a..a.
+/b/c/.//a..a/aa /b/c/a..a/aa
+/b/c/.//a..a/a. /b/c/a..a/a.
+/b/c/.//a..a/a/ /b/c/a..a/a
+/b/c/.//a..a/.a /b/c/a..a/.a
+/b/c/.//a..a/.. /b/c
+/b/c/.//a..a/./ /b/c/a..a
+/b/c/.//a..a//a /b/c/a..a/a
+/b/c/.//a..a//. /b/c/a..a
+/b/c/.//a..a/// /b/c/a..a
+/b/c/.//a...aaa /b/c/a...aaa
+/b/c/.//a...aa. /b/c/a...aa.
+/b/c/.//a...aa/ /b/c/a...aa
+/b/c/.//a...a.a /b/c/a...a.a
+/b/c/.//a...a.. /b/c/a...a..
+/b/c/.//a...a./ /b/c/a...a.
+/b/c/.//a...a/a /b/c/a...a/a
+/b/c/.//a...a/. /b/c/a...a
+/b/c/.//a...a// /b/c/a...a
+/b/c/.//a....aa /b/c/a....aa
+/b/c/.//a....a. /b/c/a....a.
+/b/c/.//a....a/ /b/c/a....a
+/b/c/.//a.....a /b/c/a.....a
+/b/c/.//a...... /b/c/a......
+/b/c/.//a...../ /b/c/a.....
+/b/c/.//a..../a /b/c/a..../a
+/b/c/.//a..../. /b/c/a....
+/b/c/.//a....// /b/c/a....
+/b/c/.//a.../aa /b/c/a.../aa
+/b/c/.//a.../a. /b/c/a.../a.
+/b/c/.//a.../a/ /b/c/a.../a
+/b/c/.//a.../.a /b/c/a.../.a
+/b/c/.//a.../.. /b/c
+/b/c/.//a..././ /b/c/a...
+/b/c/.//a...//a /b/c/a.../a
+/b/c/.//a...//. /b/c/a...
+/b/c/.//a.../// /b/c/a...
+/b/c/.//a../aaa /b/c/a../aaa
+/b/c/.//a../aa. /b/c/a../aa.
+/b/c/.//a../aa/ /b/c/a../aa
+/b/c/.//a../a.a /b/c/a../a.a
+/b/c/.//a../a.. /b/c/a../a..
+/b/c/.//a../a./ /b/c/a../a.
+/b/c/.//a../a/a /b/c/a../a/a
+/b/c/.//a../a/. /b/c/a../a
+/b/c/.//a../a// /b/c/a../a
+/b/c/.//a../.aa /b/c/a../.aa
+/b/c/.//a../.a. /b/c/a../.a.
+/b/c/.//a../.a/ /b/c/a../.a
+/b/c/.//a../..a /b/c/a../..a
+/b/c/.//a../... /b/c/a../...
+/b/c/.//a../../ /b/c
+/b/c/.//a.././a /b/c/a../a
+/b/c/.//a.././. /b/c/a..
+/b/c/.//a../.// /b/c/a..
+/b/c/.//a..//aa /b/c/a../aa
+/b/c/.//a..//a. /b/c/a../a.
+/b/c/.//a..//a/ /b/c/a../a
+/b/c/.//a..//.a /b/c/a../.a
+/b/c/.//a..//.. /b/c
+/b/c/.//a..//./ /b/c/a..
+/b/c/.//a..///a /b/c/a../a
+/b/c/.//a..///. /b/c/a..
+/b/c/.//a..//// /b/c/a..
+/b/c/.//a./aaaa /b/c/a./aaaa
+/b/c/.//a./aaa. /b/c/a./aaa.
+/b/c/.//a./aaa/ /b/c/a./aaa
+/b/c/.//a./aa.a /b/c/a./aa.a
+/b/c/.//a./aa.. /b/c/a./aa..
+/b/c/.//a./aa./ /b/c/a./aa.
+/b/c/.//a./aa/a /b/c/a./aa/a
+/b/c/.//a./aa/. /b/c/a./aa
+/b/c/.//a./aa// /b/c/a./aa
+/b/c/.//a./a.aa /b/c/a./a.aa
+/b/c/.//a./a.a. /b/c/a./a.a.
+/b/c/.//a./a.a/ /b/c/a./a.a
+/b/c/.//a./a..a /b/c/a./a..a
+/b/c/.//a./a... /b/c/a./a...
+/b/c/.//a./a../ /b/c/a./a..
+/b/c/.//a./a./a /b/c/a./a./a
+/b/c/.//a./a./. /b/c/a./a.
+/b/c/.//a./a.// /b/c/a./a.
+/b/c/.//a./a/aa /b/c/a./a/aa
+/b/c/.//a./a/a. /b/c/a./a/a.
+/b/c/.//a./a/a/ /b/c/a./a/a
+/b/c/.//a./a/.a /b/c/a./a/.a
+/b/c/.//a./a/.. /b/c/a.
+/b/c/.//a./a/./ /b/c/a./a
+/b/c/.//a./a//a /b/c/a./a/a
+/b/c/.//a./a//. /b/c/a./a
+/b/c/.//a./a/// /b/c/a./a
+/b/c/.//a./.aaa /b/c/a./.aaa
+/b/c/.//a./.aa. /b/c/a./.aa.
+/b/c/.//a./.aa/ /b/c/a./.aa
+/b/c/.//a./.a.a /b/c/a./.a.a
+/b/c/.//a./.a.. /b/c/a./.a..
+/b/c/.//a./.a./ /b/c/a./.a.
+/b/c/.//a./.a/a /b/c/a./.a/a
+/b/c/.//a./.a/. /b/c/a./.a
+/b/c/.//a./.a// /b/c/a./.a
+/b/c/.//a./..aa /b/c/a./..aa
+/b/c/.//a./..a. /b/c/a./..a.
+/b/c/.//a./..a/ /b/c/a./..a
+/b/c/.//a./...a /b/c/a./...a
+/b/c/.//a./.... /b/c/a./....
+/b/c/.//a./.../ /b/c/a./...
+/b/c/.//a./../a /b/c/a
+/b/c/.//a./../. /b/c
+/b/c/.//a./..// /b/c
+/b/c/.//a././aa /b/c/a./aa
+/b/c/.//a././a. /b/c/a./a.
+/b/c/.//a././a/ /b/c/a./a
+/b/c/.//a././.a /b/c/a./.a
+/b/c/.//a././.. /b/c
+/b/c/.//a./././ /b/c/a.
+/b/c/.//a././/a /b/c/a./a
+/b/c/.//a././/. /b/c/a.
+/b/c/.//a././// /b/c/a.
+/b/c/.//a.//aaa /b/c/a./aaa
+/b/c/.//a.//aa. /b/c/a./aa.
+/b/c/.//a.//aa/ /b/c/a./aa
+/b/c/.//a.//a.a /b/c/a./a.a
+/b/c/.//a.//a.. /b/c/a./a..
+/b/c/.//a.//a./ /b/c/a./a.
+/b/c/.//a.//a/a /b/c/a./a/a
+/b/c/.//a.//a/. /b/c/a./a
+/b/c/.//a.//a// /b/c/a./a
+/b/c/.//a.//.aa /b/c/a./.aa
+/b/c/.//a.//.a. /b/c/a./.a.
+/b/c/.//a.//.a/ /b/c/a./.a
+/b/c/.//a.//..a /b/c/a./..a
+/b/c/.//a.//... /b/c/a./...
+/b/c/.//a.//../ /b/c
+/b/c/.//a.//./a /b/c/a./a
+/b/c/.//a.//./. /b/c/a.
+/b/c/.//a.//.// /b/c/a.
+/b/c/.//a.///aa /b/c/a./aa
+/b/c/.//a.///a. /b/c/a./a.
+/b/c/.//a.///a/ /b/c/a./a
+/b/c/.//a.///.a /b/c/a./.a
+/b/c/.//a.///.. /b/c
+/b/c/.//a.///./ /b/c/a.
+/b/c/.//a.////a /b/c/a./a
+/b/c/.//a.////. /b/c/a.
+/b/c/.//a.///// /b/c/a.
+/b/c/.//a/aaaaa /b/c/a/aaaaa
+/b/c/.//a/aaaa. /b/c/a/aaaa.
+/b/c/.//a/aaaa/ /b/c/a/aaaa
+/b/c/.//a/aaa.a /b/c/a/aaa.a
+/b/c/.//a/aaa.. /b/c/a/aaa..
+/b/c/.//a/aaa./ /b/c/a/aaa.
+/b/c/.//a/aaa/a /b/c/a/aaa/a
+/b/c/.//a/aaa/. /b/c/a/aaa
+/b/c/.//a/aaa// /b/c/a/aaa
+/b/c/.//a/aa.aa /b/c/a/aa.aa
+/b/c/.//a/aa.a. /b/c/a/aa.a.
+/b/c/.//a/aa.a/ /b/c/a/aa.a
+/b/c/.//a/aa..a /b/c/a/aa..a
+/b/c/.//a/aa... /b/c/a/aa...
+/b/c/.//a/aa../ /b/c/a/aa..
+/b/c/.//a/aa./a /b/c/a/aa./a
+/b/c/.//a/aa./. /b/c/a/aa.
+/b/c/.//a/aa.// /b/c/a/aa.
+/b/c/.//a/aa/aa /b/c/a/aa/aa
+/b/c/.//a/aa/a. /b/c/a/aa/a.
+/b/c/.//a/aa/a/ /b/c/a/aa/a
+/b/c/.//a/aa/.a /b/c/a/aa/.a
+/b/c/.//a/aa/.. /b/c/a
+/b/c/.//a/aa/./ /b/c/a/aa
+/b/c/.//a/aa//a /b/c/a/aa/a
+/b/c/.//a/aa//. /b/c/a/aa
+/b/c/.//a/aa/// /b/c/a/aa
+/b/c/.//a/a.aaa /b/c/a/a.aaa
+/b/c/.//a/a.aa. /b/c/a/a.aa.
+/b/c/.//a/a.aa/ /b/c/a/a.aa
+/b/c/.//a/a.a.a /b/c/a/a.a.a
+/b/c/.//a/a.a.. /b/c/a/a.a..
+/b/c/.//a/a.a./ /b/c/a/a.a.
+/b/c/.//a/a.a/a /b/c/a/a.a/a
+/b/c/.//a/a.a/. /b/c/a/a.a
+/b/c/.//a/a.a// /b/c/a/a.a
+/b/c/.//a/a..aa /b/c/a/a..aa
+/b/c/.//a/a..a. /b/c/a/a..a.
+/b/c/.//a/a..a/ /b/c/a/a..a
+/b/c/.//a/a...a /b/c/a/a...a
+/b/c/.//a/a.... /b/c/a/a....
+/b/c/.//a/a.../ /b/c/a/a...
+/b/c/.//a/a../a /b/c/a/a../a
+/b/c/.//a/a../. /b/c/a/a..
+/b/c/.//a/a..// /b/c/a/a..
+/b/c/.//a/a./aa /b/c/a/a./aa
+/b/c/.//a/a./a. /b/c/a/a./a.
+/b/c/.//a/a./a/ /b/c/a/a./a
+/b/c/.//a/a./.a /b/c/a/a./.a
+/b/c/.//a/a./.. /b/c/a
+/b/c/.//a/a././ /b/c/a/a.
+/b/c/.//a/a.//a /b/c/a/a./a
+/b/c/.//a/a.//. /b/c/a/a.
+/b/c/.//a/a./// /b/c/a/a.
+/b/c/.//a/a/aaa /b/c/a/a/aaa
+/b/c/.//a/a/aa. /b/c/a/a/aa.
+/b/c/.//a/a/aa/ /b/c/a/a/aa
+/b/c/.//a/a/a.a /b/c/a/a/a.a
+/b/c/.//a/a/a.. /b/c/a/a/a..
+/b/c/.//a/a/a./ /b/c/a/a/a.
+/b/c/.//a/a/a/a /b/c/a/a/a/a
+/b/c/.//a/a/a/. /b/c/a/a/a
+/b/c/.//a/a/a// /b/c/a/a/a
+/b/c/.//a/a/.aa /b/c/a/a/.aa
+/b/c/.//a/a/.a. /b/c/a/a/.a.
+/b/c/.//a/a/.a/ /b/c/a/a/.a
+/b/c/.//a/a/..a /b/c/a/a/..a
+/b/c/.//a/a/... /b/c/a/a/...
+/b/c/.//a/a/../ /b/c/a
+/b/c/.//a/a/./a /b/c/a/a/a
+/b/c/.//a/a/./. /b/c/a/a
+/b/c/.//a/a/.// /b/c/a/a
+/b/c/.//a/a//aa /b/c/a/a/aa
+/b/c/.//a/a//a. /b/c/a/a/a.
+/b/c/.//a/a//a/ /b/c/a/a/a
+/b/c/.//a/a//.a /b/c/a/a/.a
+/b/c/.//a/a//.. /b/c/a
+/b/c/.//a/a//./ /b/c/a/a
+/b/c/.//a/a///a /b/c/a/a/a
+/b/c/.//a/a///. /b/c/a/a
+/b/c/.//a/a//// /b/c/a/a
+/b/c/.//a/.aaaa /b/c/a/.aaaa
+/b/c/.//a/.aaa. /b/c/a/.aaa.
+/b/c/.//a/.aaa/ /b/c/a/.aaa
+/b/c/.//a/.aa.a /b/c/a/.aa.a
+/b/c/.//a/.aa.. /b/c/a/.aa..
+/b/c/.//a/.aa./ /b/c/a/.aa.
+/b/c/.//a/.aa/a /b/c/a/.aa/a
+/b/c/.//a/.aa/. /b/c/a/.aa
+/b/c/.//a/.aa// /b/c/a/.aa
+/b/c/.//a/.a.aa /b/c/a/.a.aa
+/b/c/.//a/.a.a. /b/c/a/.a.a.
+/b/c/.//a/.a.a/ /b/c/a/.a.a
+/b/c/.//a/.a..a /b/c/a/.a..a
+/b/c/.//a/.a... /b/c/a/.a...
+/b/c/.//a/.a../ /b/c/a/.a..
+/b/c/.//a/.a./a /b/c/a/.a./a
+/b/c/.//a/.a./. /b/c/a/.a.
+/b/c/.//a/.a.// /b/c/a/.a.
+/b/c/.//a/.a/aa /b/c/a/.a/aa
+/b/c/.//a/.a/a. /b/c/a/.a/a.
+/b/c/.//a/.a/a/ /b/c/a/.a/a
+/b/c/.//a/.a/.a /b/c/a/.a/.a
+/b/c/.//a/.a/.. /b/c/a
+/b/c/.//a/.a/./ /b/c/a/.a
+/b/c/.//a/.a//a /b/c/a/.a/a
+/b/c/.//a/.a//. /b/c/a/.a
+/b/c/.//a/.a/// /b/c/a/.a
+/b/c/.//a/..aaa /b/c/a/..aaa
+/b/c/.//a/..aa. /b/c/a/..aa.
+/b/c/.//a/..aa/ /b/c/a/..aa
+/b/c/.//a/..a.a /b/c/a/..a.a
+/b/c/.//a/..a.. /b/c/a/..a..
+/b/c/.//a/..a./ /b/c/a/..a.
+/b/c/.//a/..a/a /b/c/a/..a/a
+/b/c/.//a/..a/. /b/c/a/..a
+/b/c/.//a/..a// /b/c/a/..a
+/b/c/.//a/...aa /b/c/a/...aa
+/b/c/.//a/...a. /b/c/a/...a.
+/b/c/.//a/...a/ /b/c/a/...a
+/b/c/.//a/....a /b/c/a/....a
+/b/c/.//a/..... /b/c/a/.....
+/b/c/.//a/..../ /b/c/a/....
+/b/c/.//a/.../a /b/c/a/.../a
+/b/c/.//a/.../. /b/c/a/...
+/b/c/.//a/...// /b/c/a/...
+/b/c/.//a/../aa /b/c/aa
+/b/c/.//a/../a. /b/c/a.
+/b/c/.//a/../a/ /b/c/a
+/b/c/.//a/../.a /b/c/.a
+/b/c/.//a/../.. /b
+/b/c/.//a/.././ /b/c
+/b/c/.//a/..//a /b/c/a
+/b/c/.//a/..//. /b/c
+/b/c/.//a/../// /b/c
+/b/c/.//a/./aaa /b/c/a/aaa
+/b/c/.//a/./aa. /b/c/a/aa.
+/b/c/.//a/./aa/ /b/c/a/aa
+/b/c/.//a/./a.a /b/c/a/a.a
+/b/c/.//a/./a.. /b/c/a/a..
+/b/c/.//a/./a./ /b/c/a/a.
+/b/c/.//a/./a/a /b/c/a/a/a
+/b/c/.//a/./a/. /b/c/a/a
+/b/c/.//a/./a// /b/c/a/a
+/b/c/.//a/./.aa /b/c/a/.aa
+/b/c/.//a/./.a. /b/c/a/.a.
+/b/c/.//a/./.a/ /b/c/a/.a
+/b/c/.//a/./..a /b/c/a/..a
+/b/c/.//a/./... /b/c/a/...
+/b/c/.//a/./../ /b/c
+/b/c/.//a/././a /b/c/a/a
+/b/c/.//a/././. /b/c/a
+/b/c/.//a/./.// /b/c/a
+/b/c/.//a/.//aa /b/c/a/aa
+/b/c/.//a/.//a. /b/c/a/a.
+/b/c/.//a/.//a/ /b/c/a/a
+/b/c/.//a/.//.a /b/c/a/.a
+/b/c/.//a/.//.. /b/c
+/b/c/.//a/.//./ /b/c/a
+/b/c/.//a/.///a /b/c/a/a
+/b/c/.//a/.///. /b/c/a
+/b/c/.//a/.//// /b/c/a
+/b/c/.//a//aaaa /b/c/a/aaaa
+/b/c/.//a//aaa. /b/c/a/aaa.
+/b/c/.//a//aaa/ /b/c/a/aaa
+/b/c/.//a//aa.a /b/c/a/aa.a
+/b/c/.//a//aa.. /b/c/a/aa..
+/b/c/.//a//aa./ /b/c/a/aa.
+/b/c/.//a//aa/a /b/c/a/aa/a
+/b/c/.//a//aa/. /b/c/a/aa
+/b/c/.//a//aa// /b/c/a/aa
+/b/c/.//a//a.aa /b/c/a/a.aa
+/b/c/.//a//a.a. /b/c/a/a.a.
+/b/c/.//a//a.a/ /b/c/a/a.a
+/b/c/.//a//a..a /b/c/a/a..a
+/b/c/.//a//a... /b/c/a/a...
+/b/c/.//a//a../ /b/c/a/a..
+/b/c/.//a//a./a /b/c/a/a./a
+/b/c/.//a//a./. /b/c/a/a.
+/b/c/.//a//a.// /b/c/a/a.
+/b/c/.//a//a/aa /b/c/a/a/aa
+/b/c/.//a//a/a. /b/c/a/a/a.
+/b/c/.//a//a/a/ /b/c/a/a/a
+/b/c/.//a//a/.a /b/c/a/a/.a
+/b/c/.//a//a/.. /b/c/a
+/b/c/.//a//a/./ /b/c/a/a
+/b/c/.//a//a//a /b/c/a/a/a
+/b/c/.//a//a//. /b/c/a/a
+/b/c/.//a//a/// /b/c/a/a
+/b/c/.//a//.aaa /b/c/a/.aaa
+/b/c/.//a//.aa. /b/c/a/.aa.
+/b/c/.//a//.aa/ /b/c/a/.aa
+/b/c/.//a//.a.a /b/c/a/.a.a
+/b/c/.//a//.a.. /b/c/a/.a..
+/b/c/.//a//.a./ /b/c/a/.a.
+/b/c/.//a//.a/a /b/c/a/.a/a
+/b/c/.//a//.a/. /b/c/a/.a
+/b/c/.//a//.a// /b/c/a/.a
+/b/c/.//a//..aa /b/c/a/..aa
+/b/c/.//a//..a. /b/c/a/..a.
+/b/c/.//a//..a/ /b/c/a/..a
+/b/c/.//a//...a /b/c/a/...a
+/b/c/.//a//.... /b/c/a/....
+/b/c/.//a//.../ /b/c/a/...
+/b/c/.//a//../a /b/c/a
+/b/c/.//a//../. /b/c
+/b/c/.//a//..// /b/c
+/b/c/.//a//./aa /b/c/a/aa
+/b/c/.//a//./a. /b/c/a/a.
+/b/c/.//a//./a/ /b/c/a/a
+/b/c/.//a//./.a /b/c/a/.a
+/b/c/.//a//./.. /b/c
+/b/c/.//a//././ /b/c/a
+/b/c/.//a//.//a /b/c/a/a
+/b/c/.//a//.//. /b/c/a
+/b/c/.//a//./// /b/c/a
+/b/c/.//a///aaa /b/c/a/aaa
+/b/c/.//a///aa. /b/c/a/aa.
+/b/c/.//a///aa/ /b/c/a/aa
+/b/c/.//a///a.a /b/c/a/a.a
+/b/c/.//a///a.. /b/c/a/a..
+/b/c/.//a///a./ /b/c/a/a.
+/b/c/.//a///a/a /b/c/a/a/a
+/b/c/.//a///a/. /b/c/a/a
+/b/c/.//a///a// /b/c/a/a
+/b/c/.//a///.aa /b/c/a/.aa
+/b/c/.//a///.a. /b/c/a/.a.
+/b/c/.//a///.a/ /b/c/a/.a
+/b/c/.//a///..a /b/c/a/..a
+/b/c/.//a///... /b/c/a/...
+/b/c/.//a///../ /b/c
+/b/c/.//a///./a /b/c/a/a
+/b/c/.//a///./. /b/c/a
+/b/c/.//a///.// /b/c/a
+/b/c/.//a////aa /b/c/a/aa
+/b/c/.//a////a. /b/c/a/a.
+/b/c/.//a////a/ /b/c/a/a
+/b/c/.//a////.a /b/c/a/.a
+/b/c/.//a////.. /b/c
+/b/c/.//a////./ /b/c/a
+/b/c/.//a/////a /b/c/a/a
+/b/c/.//a/////. /b/c/a
+/b/c/.//a////// /b/c/a
+/b/c/.//.aaaaaa /b/c/.aaaaaa
+/b/c/.//.aaaaa. /b/c/.aaaaa.
+/b/c/.//.aaaaa/ /b/c/.aaaaa
+/b/c/.//.aaaa.a /b/c/.aaaa.a
+/b/c/.//.aaaa.. /b/c/.aaaa..
+/b/c/.//.aaaa./ /b/c/.aaaa.
+/b/c/.//.aaaa/a /b/c/.aaaa/a
+/b/c/.//.aaaa/. /b/c/.aaaa
+/b/c/.//.aaaa// /b/c/.aaaa
+/b/c/.//.aaa.aa /b/c/.aaa.aa
+/b/c/.//.aaa.a. /b/c/.aaa.a.
+/b/c/.//.aaa.a/ /b/c/.aaa.a
+/b/c/.//.aaa..a /b/c/.aaa..a
+/b/c/.//.aaa... /b/c/.aaa...
+/b/c/.//.aaa../ /b/c/.aaa..
+/b/c/.//.aaa./a /b/c/.aaa./a
+/b/c/.//.aaa./. /b/c/.aaa.
+/b/c/.//.aaa.// /b/c/.aaa.
+/b/c/.//.aaa/aa /b/c/.aaa/aa
+/b/c/.//.aaa/a. /b/c/.aaa/a.
+/b/c/.//.aaa/a/ /b/c/.aaa/a
+/b/c/.//.aaa/.a /b/c/.aaa/.a
+/b/c/.//.aaa/.. /b/c
+/b/c/.//.aaa/./ /b/c/.aaa
+/b/c/.//.aaa//a /b/c/.aaa/a
+/b/c/.//.aaa//. /b/c/.aaa
+/b/c/.//.aaa/// /b/c/.aaa
+/b/c/.//.aa.aaa /b/c/.aa.aaa
+/b/c/.//.aa.aa. /b/c/.aa.aa.
+/b/c/.//.aa.aa/ /b/c/.aa.aa
+/b/c/.//.aa.a.a /b/c/.aa.a.a
+/b/c/.//.aa.a.. /b/c/.aa.a..
+/b/c/.//.aa.a./ /b/c/.aa.a.
+/b/c/.//.aa.a/a /b/c/.aa.a/a
+/b/c/.//.aa.a/. /b/c/.aa.a
+/b/c/.//.aa.a// /b/c/.aa.a
+/b/c/.//.aa..aa /b/c/.aa..aa
+/b/c/.//.aa..a. /b/c/.aa..a.
+/b/c/.//.aa..a/ /b/c/.aa..a
+/b/c/.//.aa...a /b/c/.aa...a
+/b/c/.//.aa.... /b/c/.aa....
+/b/c/.//.aa.../ /b/c/.aa...
+/b/c/.//.aa../a /b/c/.aa../a
+/b/c/.//.aa../. /b/c/.aa..
+/b/c/.//.aa..// /b/c/.aa..
+/b/c/.//.aa./aa /b/c/.aa./aa
+/b/c/.//.aa./a. /b/c/.aa./a.
+/b/c/.//.aa./a/ /b/c/.aa./a
+/b/c/.//.aa./.a /b/c/.aa./.a
+/b/c/.//.aa./.. /b/c
+/b/c/.//.aa././ /b/c/.aa.
+/b/c/.//.aa.//a /b/c/.aa./a
+/b/c/.//.aa.//. /b/c/.aa.
+/b/c/.//.aa./// /b/c/.aa.
+/b/c/.//.aa/aaa /b/c/.aa/aaa
+/b/c/.//.aa/aa. /b/c/.aa/aa.
+/b/c/.//.aa/aa/ /b/c/.aa/aa
+/b/c/.//.aa/a.a /b/c/.aa/a.a
+/b/c/.//.aa/a.. /b/c/.aa/a..
+/b/c/.//.aa/a./ /b/c/.aa/a.
+/b/c/.//.aa/a/a /b/c/.aa/a/a
+/b/c/.//.aa/a/. /b/c/.aa/a
+/b/c/.//.aa/a// /b/c/.aa/a
+/b/c/.//.aa/.aa /b/c/.aa/.aa
+/b/c/.//.aa/.a. /b/c/.aa/.a.
+/b/c/.//.aa/.a/ /b/c/.aa/.a
+/b/c/.//.aa/..a /b/c/.aa/..a
+/b/c/.//.aa/... /b/c/.aa/...
+/b/c/.//.aa/../ /b/c
+/b/c/.//.aa/./a /b/c/.aa/a
+/b/c/.//.aa/./. /b/c/.aa
+/b/c/.//.aa/.// /b/c/.aa
+/b/c/.//.aa//aa /b/c/.aa/aa
+/b/c/.//.aa//a. /b/c/.aa/a.
+/b/c/.//.aa//a/ /b/c/.aa/a
+/b/c/.//.aa//.a /b/c/.aa/.a
+/b/c/.//.aa//.. /b/c
+/b/c/.//.aa//./ /b/c/.aa
+/b/c/.//.aa///a /b/c/.aa/a
+/b/c/.//.aa///. /b/c/.aa
+/b/c/.//.aa//// /b/c/.aa
+/b/c/.//.a.aaaa /b/c/.a.aaaa
+/b/c/.//.a.aaa. /b/c/.a.aaa.
+/b/c/.//.a.aaa/ /b/c/.a.aaa
+/b/c/.//.a.aa.a /b/c/.a.aa.a
+/b/c/.//.a.aa.. /b/c/.a.aa..
+/b/c/.//.a.aa./ /b/c/.a.aa.
+/b/c/.//.a.aa/a /b/c/.a.aa/a
+/b/c/.//.a.aa/. /b/c/.a.aa
+/b/c/.//.a.aa// /b/c/.a.aa
+/b/c/.//.a.a.aa /b/c/.a.a.aa
+/b/c/.//.a.a.a. /b/c/.a.a.a.
+/b/c/.//.a.a.a/ /b/c/.a.a.a
+/b/c/.//.a.a..a /b/c/.a.a..a
+/b/c/.//.a.a... /b/c/.a.a...
+/b/c/.//.a.a../ /b/c/.a.a..
+/b/c/.//.a.a./a /b/c/.a.a./a
+/b/c/.//.a.a./. /b/c/.a.a.
+/b/c/.//.a.a.// /b/c/.a.a.
+/b/c/.//.a.a/aa /b/c/.a.a/aa
+/b/c/.//.a.a/a. /b/c/.a.a/a.
+/b/c/.//.a.a/a/ /b/c/.a.a/a
+/b/c/.//.a.a/.a /b/c/.a.a/.a
+/b/c/.//.a.a/.. /b/c
+/b/c/.//.a.a/./ /b/c/.a.a
+/b/c/.//.a.a//a /b/c/.a.a/a
+/b/c/.//.a.a//. /b/c/.a.a
+/b/c/.//.a.a/// /b/c/.a.a
+/b/c/.//.a..aaa /b/c/.a..aaa
+/b/c/.//.a..aa. /b/c/.a..aa.
+/b/c/.//.a..aa/ /b/c/.a..aa
+/b/c/.//.a..a.a /b/c/.a..a.a
+/b/c/.//.a..a.. /b/c/.a..a..
+/b/c/.//.a..a./ /b/c/.a..a.
+/b/c/.//.a..a/a /b/c/.a..a/a
+/b/c/.//.a..a/. /b/c/.a..a
+/b/c/.//.a..a// /b/c/.a..a
+/b/c/.//.a...aa /b/c/.a...aa
+/b/c/.//.a...a. /b/c/.a...a.
+/b/c/.//.a...a/ /b/c/.a...a
+/b/c/.//.a....a /b/c/.a....a
+/b/c/.//.a..... /b/c/.a.....
+/b/c/.//.a..../ /b/c/.a....
+/b/c/.//.a.../a /b/c/.a.../a
+/b/c/.//.a.../. /b/c/.a...
+/b/c/.//.a...// /b/c/.a...
+/b/c/.//.a../aa /b/c/.a../aa
+/b/c/.//.a../a. /b/c/.a../a.
+/b/c/.//.a../a/ /b/c/.a../a
+/b/c/.//.a../.a /b/c/.a../.a
+/b/c/.//.a../.. /b/c
+/b/c/.//.a.././ /b/c/.a..
+/b/c/.//.a..//a /b/c/.a../a
+/b/c/.//.a..//. /b/c/.a..
+/b/c/.//.a../// /b/c/.a..
+/b/c/.//.a./aaa /b/c/.a./aaa
+/b/c/.//.a./aa. /b/c/.a./aa.
+/b/c/.//.a./aa/ /b/c/.a./aa
+/b/c/.//.a./a.a /b/c/.a./a.a
+/b/c/.//.a./a.. /b/c/.a./a..
+/b/c/.//.a./a./ /b/c/.a./a.
+/b/c/.//.a./a/a /b/c/.a./a/a
+/b/c/.//.a./a/. /b/c/.a./a
+/b/c/.//.a./a// /b/c/.a./a
+/b/c/.//.a./.aa /b/c/.a./.aa
+/b/c/.//.a./.a. /b/c/.a./.a.
+/b/c/.//.a./.a/ /b/c/.a./.a
+/b/c/.//.a./..a /b/c/.a./..a
+/b/c/.//.a./... /b/c/.a./...
+/b/c/.//.a./../ /b/c
+/b/c/.//.a././a /b/c/.a./a
+/b/c/.//.a././. /b/c/.a.
+/b/c/.//.a./.// /b/c/.a.
+/b/c/.//.a.//aa /b/c/.a./aa
+/b/c/.//.a.//a. /b/c/.a./a.
+/b/c/.//.a.//a/ /b/c/.a./a
+/b/c/.//.a.//.a /b/c/.a./.a
+/b/c/.//.a.//.. /b/c
+/b/c/.//.a.//./ /b/c/.a.
+/b/c/.//.a.///a /b/c/.a./a
+/b/c/.//.a.///. /b/c/.a.
+/b/c/.//.a.//// /b/c/.a.
+/b/c/.//.a/aaaa /b/c/.a/aaaa
+/b/c/.//.a/aaa. /b/c/.a/aaa.
+/b/c/.//.a/aaa/ /b/c/.a/aaa
+/b/c/.//.a/aa.a /b/c/.a/aa.a
+/b/c/.//.a/aa.. /b/c/.a/aa..
+/b/c/.//.a/aa./ /b/c/.a/aa.
+/b/c/.//.a/aa/a /b/c/.a/aa/a
+/b/c/.//.a/aa/. /b/c/.a/aa
+/b/c/.//.a/aa// /b/c/.a/aa
+/b/c/.//.a/a.aa /b/c/.a/a.aa
+/b/c/.//.a/a.a. /b/c/.a/a.a.
+/b/c/.//.a/a.a/ /b/c/.a/a.a
+/b/c/.//.a/a..a /b/c/.a/a..a
+/b/c/.//.a/a... /b/c/.a/a...
+/b/c/.//.a/a../ /b/c/.a/a..
+/b/c/.//.a/a./a /b/c/.a/a./a
+/b/c/.//.a/a./. /b/c/.a/a.
+/b/c/.//.a/a.// /b/c/.a/a.
+/b/c/.//.a/a/aa /b/c/.a/a/aa
+/b/c/.//.a/a/a. /b/c/.a/a/a.
+/b/c/.//.a/a/a/ /b/c/.a/a/a
+/b/c/.//.a/a/.a /b/c/.a/a/.a
+/b/c/.//.a/a/.. /b/c/.a
+/b/c/.//.a/a/./ /b/c/.a/a
+/b/c/.//.a/a//a /b/c/.a/a/a
+/b/c/.//.a/a//. /b/c/.a/a
+/b/c/.//.a/a/// /b/c/.a/a
+/b/c/.//.a/.aaa /b/c/.a/.aaa
+/b/c/.//.a/.aa. /b/c/.a/.aa.
+/b/c/.//.a/.aa/ /b/c/.a/.aa
+/b/c/.//.a/.a.a /b/c/.a/.a.a
+/b/c/.//.a/.a.. /b/c/.a/.a..
+/b/c/.//.a/.a./ /b/c/.a/.a.
+/b/c/.//.a/.a/a /b/c/.a/.a/a
+/b/c/.//.a/.a/. /b/c/.a/.a
+/b/c/.//.a/.a// /b/c/.a/.a
+/b/c/.//.a/..aa /b/c/.a/..aa
+/b/c/.//.a/..a. /b/c/.a/..a.
+/b/c/.//.a/..a/ /b/c/.a/..a
+/b/c/.//.a/...a /b/c/.a/...a
+/b/c/.//.a/.... /b/c/.a/....
+/b/c/.//.a/.../ /b/c/.a/...
+/b/c/.//.a/../a /b/c/a
+/b/c/.//.a/../. /b/c
+/b/c/.//.a/..// /b/c
+/b/c/.//.a/./aa /b/c/.a/aa
+/b/c/.//.a/./a. /b/c/.a/a.
+/b/c/.//.a/./a/ /b/c/.a/a
+/b/c/.//.a/./.a /b/c/.a/.a
+/b/c/.//.a/./.. /b/c
+/b/c/.//.a/././ /b/c/.a
+/b/c/.//.a/.//a /b/c/.a/a
+/b/c/.//.a/.//. /b/c/.a
+/b/c/.//.a/./// /b/c/.a
+/b/c/.//.a//aaa /b/c/.a/aaa
+/b/c/.//.a//aa. /b/c/.a/aa.
+/b/c/.//.a//aa/ /b/c/.a/aa
+/b/c/.//.a//a.a /b/c/.a/a.a
+/b/c/.//.a//a.. /b/c/.a/a..
+/b/c/.//.a//a./ /b/c/.a/a.
+/b/c/.//.a//a/a /b/c/.a/a/a
+/b/c/.//.a//a/. /b/c/.a/a
+/b/c/.//.a//a// /b/c/.a/a
+/b/c/.//.a//.aa /b/c/.a/.aa
+/b/c/.//.a//.a. /b/c/.a/.a.
+/b/c/.//.a//.a/ /b/c/.a/.a
+/b/c/.//.a//..a /b/c/.a/..a
+/b/c/.//.a//... /b/c/.a/...
+/b/c/.//.a//../ /b/c
+/b/c/.//.a//./a /b/c/.a/a
+/b/c/.//.a//./. /b/c/.a
+/b/c/.//.a//.// /b/c/.a
+/b/c/.//.a///aa /b/c/.a/aa
+/b/c/.//.a///a. /b/c/.a/a.
+/b/c/.//.a///a/ /b/c/.a/a
+/b/c/.//.a///.a /b/c/.a/.a
+/b/c/.//.a///.. /b/c
+/b/c/.//.a///./ /b/c/.a
+/b/c/.//.a////a /b/c/.a/a
+/b/c/.//.a////. /b/c/.a
+/b/c/.//.a///// /b/c/.a
+/b/c/.//..aaaaa /b/c/..aaaaa
+/b/c/.//..aaaa. /b/c/..aaaa.
+/b/c/.//..aaaa/ /b/c/..aaaa
+/b/c/.//..aaa.a /b/c/..aaa.a
+/b/c/.//..aaa.. /b/c/..aaa..
+/b/c/.//..aaa./ /b/c/..aaa.
+/b/c/.//..aaa/a /b/c/..aaa/a
+/b/c/.//..aaa/. /b/c/..aaa
+/b/c/.//..aaa// /b/c/..aaa
+/b/c/.//..aa.aa /b/c/..aa.aa
+/b/c/.//..aa.a. /b/c/..aa.a.
+/b/c/.//..aa.a/ /b/c/..aa.a
+/b/c/.//..aa..a /b/c/..aa..a
+/b/c/.//..aa... /b/c/..aa...
+/b/c/.//..aa../ /b/c/..aa..
+/b/c/.//..aa./a /b/c/..aa./a
+/b/c/.//..aa./. /b/c/..aa.
+/b/c/.//..aa.// /b/c/..aa.
+/b/c/.//..aa/aa /b/c/..aa/aa
+/b/c/.//..aa/a. /b/c/..aa/a.
+/b/c/.//..aa/a/ /b/c/..aa/a
+/b/c/.//..aa/.a /b/c/..aa/.a
+/b/c/.//..aa/.. /b/c
+/b/c/.//..aa/./ /b/c/..aa
+/b/c/.//..aa//a /b/c/..aa/a
+/b/c/.//..aa//. /b/c/..aa
+/b/c/.//..aa/// /b/c/..aa
+/b/c/.//..a.aaa /b/c/..a.aaa
+/b/c/.//..a.aa. /b/c/..a.aa.
+/b/c/.//..a.aa/ /b/c/..a.aa
+/b/c/.//..a.a.a /b/c/..a.a.a
+/b/c/.//..a.a.. /b/c/..a.a..
+/b/c/.//..a.a./ /b/c/..a.a.
+/b/c/.//..a.a/a /b/c/..a.a/a
+/b/c/.//..a.a/. /b/c/..a.a
+/b/c/.//..a.a// /b/c/..a.a
+/b/c/.//..a..aa /b/c/..a..aa
+/b/c/.//..a..a. /b/c/..a..a.
+/b/c/.//..a..a/ /b/c/..a..a
+/b/c/.//..a...a /b/c/..a...a
+/b/c/.//..a.... /b/c/..a....
+/b/c/.//..a.../ /b/c/..a...
+/b/c/.//..a../a /b/c/..a../a
+/b/c/.//..a../. /b/c/..a..
+/b/c/.//..a..// /b/c/..a..
+/b/c/.//..a./aa /b/c/..a./aa
+/b/c/.//..a./a. /b/c/..a./a.
+/b/c/.//..a./a/ /b/c/..a./a
+/b/c/.//..a./.a /b/c/..a./.a
+/b/c/.//..a./.. /b/c
+/b/c/.//..a././ /b/c/..a.
+/b/c/.//..a.//a /b/c/..a./a
+/b/c/.//..a.//. /b/c/..a.
+/b/c/.//..a./// /b/c/..a.
+/b/c/.//..a/aaa /b/c/..a/aaa
+/b/c/.//..a/aa. /b/c/..a/aa.
+/b/c/.//..a/aa/ /b/c/..a/aa
+/b/c/.//..a/a.a /b/c/..a/a.a
+/b/c/.//..a/a.. /b/c/..a/a..
+/b/c/.//..a/a./ /b/c/..a/a.
+/b/c/.//..a/a/a /b/c/..a/a/a
+/b/c/.//..a/a/. /b/c/..a/a
+/b/c/.//..a/a// /b/c/..a/a
+/b/c/.//..a/.aa /b/c/..a/.aa
+/b/c/.//..a/.a. /b/c/..a/.a.
+/b/c/.//..a/.a/ /b/c/..a/.a
+/b/c/.//..a/..a /b/c/..a/..a
+/b/c/.//..a/... /b/c/..a/...
+/b/c/.//..a/../ /b/c
+/b/c/.//..a/./a /b/c/..a/a
+/b/c/.//..a/./. /b/c/..a
+/b/c/.//..a/.// /b/c/..a
+/b/c/.//..a//aa /b/c/..a/aa
+/b/c/.//..a//a. /b/c/..a/a.
+/b/c/.//..a//a/ /b/c/..a/a
+/b/c/.//..a//.a /b/c/..a/.a
+/b/c/.//..a//.. /b/c
+/b/c/.//..a//./ /b/c/..a
+/b/c/.//..a///a /b/c/..a/a
+/b/c/.//..a///. /b/c/..a
+/b/c/.//..a//// /b/c/..a
+/b/c/.//...aaaa /b/c/...aaaa
+/b/c/.//...aaa. /b/c/...aaa.
+/b/c/.//...aaa/ /b/c/...aaa
+/b/c/.//...aa.a /b/c/...aa.a
+/b/c/.//...aa.. /b/c/...aa..
+/b/c/.//...aa./ /b/c/...aa.
+/b/c/.//...aa/a /b/c/...aa/a
+/b/c/.//...aa/. /b/c/...aa
+/b/c/.//...aa// /b/c/...aa
+/b/c/.//...a.aa /b/c/...a.aa
+/b/c/.//...a.a. /b/c/...a.a.
+/b/c/.//...a.a/ /b/c/...a.a
+/b/c/.//...a..a /b/c/...a..a
+/b/c/.//...a... /b/c/...a...
+/b/c/.//...a../ /b/c/...a..
+/b/c/.//...a./a /b/c/...a./a
+/b/c/.//...a./. /b/c/...a.
+/b/c/.//...a.// /b/c/...a.
+/b/c/.//...a/aa /b/c/...a/aa
+/b/c/.//...a/a. /b/c/...a/a.
+/b/c/.//...a/a/ /b/c/...a/a
+/b/c/.//...a/.a /b/c/...a/.a
+/b/c/.//...a/.. /b/c
+/b/c/.//...a/./ /b/c/...a
+/b/c/.//...a//a /b/c/...a/a
+/b/c/.//...a//. /b/c/...a
+/b/c/.//...a/// /b/c/...a
+/b/c/.//....aaa /b/c/....aaa
+/b/c/.//....aa. /b/c/....aa.
+/b/c/.//....aa/ /b/c/....aa
+/b/c/.//....a.a /b/c/....a.a
+/b/c/.//....a.. /b/c/....a..
+/b/c/.//....a./ /b/c/....a.
+/b/c/.//....a/a /b/c/....a/a
+/b/c/.//....a/. /b/c/....a
+/b/c/.//....a// /b/c/....a
+/b/c/.//.....aa /b/c/.....aa
+/b/c/.//.....a. /b/c/.....a.
+/b/c/.//.....a/ /b/c/.....a
+/b/c/.//......a /b/c/......a
+/b/c/.//....... /b/c/.......
+/b/c/.//....../ /b/c/......
+/b/c/.//...../a /b/c/...../a
+/b/c/.//...../. /b/c/.....
+/b/c/.//.....// /b/c/.....
+/b/c/.//..../aa /b/c/..../aa
+/b/c/.//..../a. /b/c/..../a.
+/b/c/.//..../a/ /b/c/..../a
+/b/c/.//..../.a /b/c/..../.a
+/b/c/.//..../.. /b/c
+/b/c/.//...././ /b/c/....
+/b/c/.//....//a /b/c/..../a
+/b/c/.//....//. /b/c/....
+/b/c/.//..../// /b/c/....
+/b/c/.//.../aaa /b/c/.../aaa
+/b/c/.//.../aa. /b/c/.../aa.
+/b/c/.//.../aa/ /b/c/.../aa
+/b/c/.//.../a.a /b/c/.../a.a
+/b/c/.//.../a.. /b/c/.../a..
+/b/c/.//.../a./ /b/c/.../a.
+/b/c/.//.../a/a /b/c/.../a/a
+/b/c/.//.../a/. /b/c/.../a
+/b/c/.//.../a// /b/c/.../a
+/b/c/.//.../.aa /b/c/.../.aa
+/b/c/.//.../.a. /b/c/.../.a.
+/b/c/.//.../.a/ /b/c/.../.a
+/b/c/.//.../..a /b/c/.../..a
+/b/c/.//.../... /b/c/.../...
+/b/c/.//.../../ /b/c
+/b/c/.//..././a /b/c/.../a
+/b/c/.//..././. /b/c/...
+/b/c/.//.../.// /b/c/...
+/b/c/.//...//aa /b/c/.../aa
+/b/c/.//...//a. /b/c/.../a.
+/b/c/.//...//a/ /b/c/.../a
+/b/c/.//...//.a /b/c/.../.a
+/b/c/.//...//.. /b/c
+/b/c/.//...//./ /b/c/...
+/b/c/.//...///a /b/c/.../a
+/b/c/.//...///. /b/c/...
+/b/c/.//...//// /b/c/...
+/b/c/.//../aaaa /b/aaaa
+/b/c/.//../aaa. /b/aaa.
+/b/c/.//../aaa/ /b/aaa
+/b/c/.//../aa.a /b/aa.a
+/b/c/.//../aa.. /b/aa..
+/b/c/.//../aa./ /b/aa.
+/b/c/.//../aa/a /b/aa/a
+/b/c/.//../aa/. /b/aa
+/b/c/.//../aa// /b/aa
+/b/c/.//../a.aa /b/a.aa
+/b/c/.//../a.a. /b/a.a.
+/b/c/.//../a.a/ /b/a.a
+/b/c/.//../a..a /b/a..a
+/b/c/.//../a... /b/a...
+/b/c/.//../a../ /b/a..
+/b/c/.//../a./a /b/a./a
+/b/c/.//../a./. /b/a.
+/b/c/.//../a.// /b/a.
+/b/c/.//../a/aa /b/a/aa
+/b/c/.//../a/a. /b/a/a.
+/b/c/.//../a/a/ /b/a/a
+/b/c/.//../a/.a /b/a/.a
+/b/c/.//../a/.. /b
+/b/c/.//../a/./ /b/a
+/b/c/.//../a//a /b/a/a
+/b/c/.//../a//. /b/a
+/b/c/.//../a/// /b/a
+/b/c/.//../.aaa /b/.aaa
+/b/c/.//../.aa. /b/.aa.
+/b/c/.//../.aa/ /b/.aa
+/b/c/.//../.a.a /b/.a.a
+/b/c/.//../.a.. /b/.a..
+/b/c/.//../.a./ /b/.a.
+/b/c/.//../.a/a /b/.a/a
+/b/c/.//../.a/. /b/.a
+/b/c/.//../.a// /b/.a
+/b/c/.//../..aa /b/..aa
+/b/c/.//../..a. /b/..a.
+/b/c/.//../..a/ /b/..a
+/b/c/.//../...a /b/...a
+/b/c/.//../.... /b/....
+/b/c/.//../.../ /b/...
+/b/c/.//../../a /a
+/b/c/.//../../. /
+/b/c/.//../..// /
+/b/c/.//.././aa /b/aa
+/b/c/.//.././a. /b/a.
+/b/c/.//.././a/ /b/a
+/b/c/.//.././.a /b/.a
+/b/c/.//.././.. /
+/b/c/.//../././ /b
+/b/c/.//.././/a /b/a
+/b/c/.//.././/. /b
+/b/c/.//.././// /b
+/b/c/.//..//aaa /b/aaa
+/b/c/.//..//aa. /b/aa.
+/b/c/.//..//aa/ /b/aa
+/b/c/.//..//a.a /b/a.a
+/b/c/.//..//a.. /b/a..
+/b/c/.//..//a./ /b/a.
+/b/c/.//..//a/a /b/a/a
+/b/c/.//..//a/. /b/a
+/b/c/.//..//a// /b/a
+/b/c/.//..//.aa /b/.aa
+/b/c/.//..//.a. /b/.a.
+/b/c/.//..//.a/ /b/.a
+/b/c/.//..//..a /b/..a
+/b/c/.//..//... /b/...
+/b/c/.//..//../ /
+/b/c/.//..//./a /b/a
+/b/c/.//..//./. /b
+/b/c/.//..//.// /b
+/b/c/.//..///aa /b/aa
+/b/c/.//..///a. /b/a.
+/b/c/.//..///a/ /b/a
+/b/c/.//..///.a /b/.a
+/b/c/.//..///.. /
+/b/c/.//..///./ /b
+/b/c/.//..////a /b/a
+/b/c/.//..////. /b
+/b/c/.//..///// /b
+/b/c/.//./aaaaa /b/c/aaaaa
+/b/c/.//./aaaa. /b/c/aaaa.
+/b/c/.//./aaaa/ /b/c/aaaa
+/b/c/.//./aaa.a /b/c/aaa.a
+/b/c/.//./aaa.. /b/c/aaa..
+/b/c/.//./aaa./ /b/c/aaa.
+/b/c/.//./aaa/a /b/c/aaa/a
+/b/c/.//./aaa/. /b/c/aaa
+/b/c/.//./aaa// /b/c/aaa
+/b/c/.//./aa.aa /b/c/aa.aa
+/b/c/.//./aa.a. /b/c/aa.a.
+/b/c/.//./aa.a/ /b/c/aa.a
+/b/c/.//./aa..a /b/c/aa..a
+/b/c/.//./aa... /b/c/aa...
+/b/c/.//./aa../ /b/c/aa..
+/b/c/.//./aa./a /b/c/aa./a
+/b/c/.//./aa./. /b/c/aa.
+/b/c/.//./aa.// /b/c/aa.
+/b/c/.//./aa/aa /b/c/aa/aa
+/b/c/.//./aa/a. /b/c/aa/a.
+/b/c/.//./aa/a/ /b/c/aa/a
+/b/c/.//./aa/.a /b/c/aa/.a
+/b/c/.//./aa/.. /b/c
+/b/c/.//./aa/./ /b/c/aa
+/b/c/.//./aa//a /b/c/aa/a
+/b/c/.//./aa//. /b/c/aa
+/b/c/.//./aa/// /b/c/aa
+/b/c/.//./a.aaa /b/c/a.aaa
+/b/c/.//./a.aa. /b/c/a.aa.
+/b/c/.//./a.aa/ /b/c/a.aa
+/b/c/.//./a.a.a /b/c/a.a.a
+/b/c/.//./a.a.. /b/c/a.a..
+/b/c/.//./a.a./ /b/c/a.a.
+/b/c/.//./a.a/a /b/c/a.a/a
+/b/c/.//./a.a/. /b/c/a.a
+/b/c/.//./a.a// /b/c/a.a
+/b/c/.//./a..aa /b/c/a..aa
+/b/c/.//./a..a. /b/c/a..a.
+/b/c/.//./a..a/ /b/c/a..a
+/b/c/.//./a...a /b/c/a...a
+/b/c/.//./a.... /b/c/a....
+/b/c/.//./a.../ /b/c/a...
+/b/c/.//./a../a /b/c/a../a
+/b/c/.//./a../. /b/c/a..
+/b/c/.//./a..// /b/c/a..
+/b/c/.//./a./aa /b/c/a./aa
+/b/c/.//./a./a. /b/c/a./a.
+/b/c/.//./a./a/ /b/c/a./a
+/b/c/.//./a./.a /b/c/a./.a
+/b/c/.//./a./.. /b/c
+/b/c/.//./a././ /b/c/a.
+/b/c/.//./a.//a /b/c/a./a
+/b/c/.//./a.//. /b/c/a.
+/b/c/.//./a./// /b/c/a.
+/b/c/.//./a/aaa /b/c/a/aaa
+/b/c/.//./a/aa. /b/c/a/aa.
+/b/c/.//./a/aa/ /b/c/a/aa
+/b/c/.//./a/a.a /b/c/a/a.a
+/b/c/.//./a/a.. /b/c/a/a..
+/b/c/.//./a/a./ /b/c/a/a.
+/b/c/.//./a/a/a /b/c/a/a/a
+/b/c/.//./a/a/. /b/c/a/a
+/b/c/.//./a/a// /b/c/a/a
+/b/c/.//./a/.aa /b/c/a/.aa
+/b/c/.//./a/.a. /b/c/a/.a.
+/b/c/.//./a/.a/ /b/c/a/.a
+/b/c/.//./a/..a /b/c/a/..a
+/b/c/.//./a/... /b/c/a/...
+/b/c/.//./a/../ /b/c
+/b/c/.//./a/./a /b/c/a/a
+/b/c/.//./a/./. /b/c/a
+/b/c/.//./a/.// /b/c/a
+/b/c/.//./a//aa /b/c/a/aa
+/b/c/.//./a//a. /b/c/a/a.
+/b/c/.//./a//a/ /b/c/a/a
+/b/c/.//./a//.a /b/c/a/.a
+/b/c/.//./a//.. /b/c
+/b/c/.//./a//./ /b/c/a
+/b/c/.//./a///a /b/c/a/a
+/b/c/.//./a///. /b/c/a
+/b/c/.//./a//// /b/c/a
+/b/c/.//./.aaaa /b/c/.aaaa
+/b/c/.//./.aaa. /b/c/.aaa.
+/b/c/.//./.aaa/ /b/c/.aaa
+/b/c/.//./.aa.a /b/c/.aa.a
+/b/c/.//./.aa.. /b/c/.aa..
+/b/c/.//./.aa./ /b/c/.aa.
+/b/c/.//./.aa/a /b/c/.aa/a
+/b/c/.//./.aa/. /b/c/.aa
+/b/c/.//./.aa// /b/c/.aa
+/b/c/.//./.a.aa /b/c/.a.aa
+/b/c/.//./.a.a. /b/c/.a.a.
+/b/c/.//./.a.a/ /b/c/.a.a
+/b/c/.//./.a..a /b/c/.a..a
+/b/c/.//./.a... /b/c/.a...
+/b/c/.//./.a../ /b/c/.a..
+/b/c/.//./.a./a /b/c/.a./a
+/b/c/.//./.a./. /b/c/.a.
+/b/c/.//./.a.// /b/c/.a.
+/b/c/.//./.a/aa /b/c/.a/aa
+/b/c/.//./.a/a. /b/c/.a/a.
+/b/c/.//./.a/a/ /b/c/.a/a
+/b/c/.//./.a/.a /b/c/.a/.a
+/b/c/.//./.a/.. /b/c
+/b/c/.//./.a/./ /b/c/.a
+/b/c/.//./.a//a /b/c/.a/a
+/b/c/.//./.a//. /b/c/.a
+/b/c/.//./.a/// /b/c/.a
+/b/c/.//./..aaa /b/c/..aaa
+/b/c/.//./..aa. /b/c/..aa.
+/b/c/.//./..aa/ /b/c/..aa
+/b/c/.//./..a.a /b/c/..a.a
+/b/c/.//./..a.. /b/c/..a..
+/b/c/.//./..a./ /b/c/..a.
+/b/c/.//./..a/a /b/c/..a/a
+/b/c/.//./..a/. /b/c/..a
+/b/c/.//./..a// /b/c/..a
+/b/c/.//./...aa /b/c/...aa
+/b/c/.//./...a. /b/c/...a.
+/b/c/.//./...a/ /b/c/...a
+/b/c/.//./....a /b/c/....a
+/b/c/.//./..... /b/c/.....
+/b/c/.//./..../ /b/c/....
+/b/c/.//./.../a /b/c/.../a
+/b/c/.//./.../. /b/c/...
+/b/c/.//./...// /b/c/...
+/b/c/.//./../aa /b/aa
+/b/c/.//./../a. /b/a.
+/b/c/.//./../a/ /b/a
+/b/c/.//./../.a /b/.a
+/b/c/.//./../.. /
+/b/c/.//./.././ /b
+/b/c/.//./..//a /b/a
+/b/c/.//./..//. /b
+/b/c/.//./../// /b
+/b/c/.//././aaa /b/c/aaa
+/b/c/.//././aa. /b/c/aa.
+/b/c/.//././aa/ /b/c/aa
+/b/c/.//././a.a /b/c/a.a
+/b/c/.//././a.. /b/c/a..
+/b/c/.//././a./ /b/c/a.
+/b/c/.//././a/a /b/c/a/a
+/b/c/.//././a/. /b/c/a
+/b/c/.//././a// /b/c/a
+/b/c/.//././.aa /b/c/.aa
+/b/c/.//././.a. /b/c/.a.
+/b/c/.//././.a/ /b/c/.a
+/b/c/.//././..a /b/c/..a
+/b/c/.//././... /b/c/...
+/b/c/.//././../ /b
+/b/c/.//./././a /b/c/a
+/b/c/.//./././. /b/c
+/b/c/.//././.// /b/c
+/b/c/.//././/aa /b/c/aa
+/b/c/.//././/a. /b/c/a.
+/b/c/.//././/a/ /b/c/a
+/b/c/.//././/.a /b/c/.a
+/b/c/.//././/.. /b
+/b/c/.//././/./ /b/c
+/b/c/.//././//a /b/c/a
+/b/c/.//././//. /b/c
+/b/c/.//././/// /b/c
+/b/c/.//.//aaaa /b/c/aaaa
+/b/c/.//.//aaa. /b/c/aaa.
+/b/c/.//.//aaa/ /b/c/aaa
+/b/c/.//.//aa.a /b/c/aa.a
+/b/c/.//.//aa.. /b/c/aa..
+/b/c/.//.//aa./ /b/c/aa.
+/b/c/.//.//aa/a /b/c/aa/a
+/b/c/.//.//aa/. /b/c/aa
+/b/c/.//.//aa// /b/c/aa
+/b/c/.//.//a.aa /b/c/a.aa
+/b/c/.//.//a.a. /b/c/a.a.
+/b/c/.//.//a.a/ /b/c/a.a
+/b/c/.//.//a..a /b/c/a..a
+/b/c/.//.//a... /b/c/a...
+/b/c/.//.//a../ /b/c/a..
+/b/c/.//.//a./a /b/c/a./a
+/b/c/.//.//a./. /b/c/a.
+/b/c/.//.//a.// /b/c/a.
+/b/c/.//.//a/aa /b/c/a/aa
+/b/c/.//.//a/a. /b/c/a/a.
+/b/c/.//.//a/a/ /b/c/a/a
+/b/c/.//.//a/.a /b/c/a/.a
+/b/c/.//.//a/.. /b/c
+/b/c/.//.//a/./ /b/c/a
+/b/c/.//.//a//a /b/c/a/a
+/b/c/.//.//a//. /b/c/a
+/b/c/.//.//a/// /b/c/a
+/b/c/.//.//.aaa /b/c/.aaa
+/b/c/.//.//.aa. /b/c/.aa.
+/b/c/.//.//.aa/ /b/c/.aa
+/b/c/.//.//.a.a /b/c/.a.a
+/b/c/.//.//.a.. /b/c/.a..
+/b/c/.//.//.a./ /b/c/.a.
+/b/c/.//.//.a/a /b/c/.a/a
+/b/c/.//.//.a/. /b/c/.a
+/b/c/.//.//.a// /b/c/.a
+/b/c/.//.//..aa /b/c/..aa
+/b/c/.//.//..a. /b/c/..a.
+/b/c/.//.//..a/ /b/c/..a
+/b/c/.//.//...a /b/c/...a
+/b/c/.//.//.... /b/c/....
+/b/c/.//.//.../ /b/c/...
+/b/c/.//.//../a /b/a
+/b/c/.//.//../. /b
+/b/c/.//.//..// /b
+/b/c/.//.//./aa /b/c/aa
+/b/c/.//.//./a. /b/c/a.
+/b/c/.//.//./a/ /b/c/a
+/b/c/.//.//./.a /b/c/.a
+/b/c/.//.//./.. /b
+/b/c/.//.//././ /b/c
+/b/c/.//.//.//a /b/c/a
+/b/c/.//.//.//. /b/c
+/b/c/.//.//./// /b/c
+/b/c/.//.///aaa /b/c/aaa
+/b/c/.//.///aa. /b/c/aa.
+/b/c/.//.///aa/ /b/c/aa
+/b/c/.//.///a.a /b/c/a.a
+/b/c/.//.///a.. /b/c/a..
+/b/c/.//.///a./ /b/c/a.
+/b/c/.//.///a/a /b/c/a/a
+/b/c/.//.///a/. /b/c/a
+/b/c/.//.///a// /b/c/a
+/b/c/.//.///.aa /b/c/.aa
+/b/c/.//.///.a. /b/c/.a.
+/b/c/.//.///.a/ /b/c/.a
+/b/c/.//.///..a /b/c/..a
+/b/c/.//.///... /b/c/...
+/b/c/.//.///../ /b
+/b/c/.//.///./a /b/c/a
+/b/c/.//.///./. /b/c
+/b/c/.//.///.// /b/c
+/b/c/.//.////aa /b/c/aa
+/b/c/.//.////a. /b/c/a.
+/b/c/.//.////a/ /b/c/a
+/b/c/.//.////.a /b/c/.a
+/b/c/.//.////.. /b
+/b/c/.//.////./ /b/c
+/b/c/.//./////a /b/c/a
+/b/c/.//./////. /b/c
+/b/c/.//.////// /b/c
+/b/c/.///aaaaaa /b/c/aaaaaa
+/b/c/.///aaaaa. /b/c/aaaaa.
+/b/c/.///aaaaa/ /b/c/aaaaa
+/b/c/.///aaaa.a /b/c/aaaa.a
+/b/c/.///aaaa.. /b/c/aaaa..
+/b/c/.///aaaa./ /b/c/aaaa.
+/b/c/.///aaaa/a /b/c/aaaa/a
+/b/c/.///aaaa/. /b/c/aaaa
+/b/c/.///aaaa// /b/c/aaaa
+/b/c/.///aaa.aa /b/c/aaa.aa
+/b/c/.///aaa.a. /b/c/aaa.a.
+/b/c/.///aaa.a/ /b/c/aaa.a
+/b/c/.///aaa..a /b/c/aaa..a
+/b/c/.///aaa... /b/c/aaa...
+/b/c/.///aaa../ /b/c/aaa..
+/b/c/.///aaa./a /b/c/aaa./a
+/b/c/.///aaa./. /b/c/aaa.
+/b/c/.///aaa.// /b/c/aaa.
+/b/c/.///aaa/aa /b/c/aaa/aa
+/b/c/.///aaa/a. /b/c/aaa/a.
+/b/c/.///aaa/a/ /b/c/aaa/a
+/b/c/.///aaa/.a /b/c/aaa/.a
+/b/c/.///aaa/.. /b/c
+/b/c/.///aaa/./ /b/c/aaa
+/b/c/.///aaa//a /b/c/aaa/a
+/b/c/.///aaa//. /b/c/aaa
+/b/c/.///aaa/// /b/c/aaa
+/b/c/.///aa.aaa /b/c/aa.aaa
+/b/c/.///aa.aa. /b/c/aa.aa.
+/b/c/.///aa.aa/ /b/c/aa.aa
+/b/c/.///aa.a.a /b/c/aa.a.a
+/b/c/.///aa.a.. /b/c/aa.a..
+/b/c/.///aa.a./ /b/c/aa.a.
+/b/c/.///aa.a/a /b/c/aa.a/a
+/b/c/.///aa.a/. /b/c/aa.a
+/b/c/.///aa.a// /b/c/aa.a
+/b/c/.///aa..aa /b/c/aa..aa
+/b/c/.///aa..a. /b/c/aa..a.
+/b/c/.///aa..a/ /b/c/aa..a
+/b/c/.///aa...a /b/c/aa...a
+/b/c/.///aa.... /b/c/aa....
+/b/c/.///aa.../ /b/c/aa...
+/b/c/.///aa../a /b/c/aa../a
+/b/c/.///aa../. /b/c/aa..
+/b/c/.///aa..// /b/c/aa..
+/b/c/.///aa./aa /b/c/aa./aa
+/b/c/.///aa./a. /b/c/aa./a.
+/b/c/.///aa./a/ /b/c/aa./a
+/b/c/.///aa./.a /b/c/aa./.a
+/b/c/.///aa./.. /b/c
+/b/c/.///aa././ /b/c/aa.
+/b/c/.///aa.//a /b/c/aa./a
+/b/c/.///aa.//. /b/c/aa.
+/b/c/.///aa./// /b/c/aa.
+/b/c/.///aa/aaa /b/c/aa/aaa
+/b/c/.///aa/aa. /b/c/aa/aa.
+/b/c/.///aa/aa/ /b/c/aa/aa
+/b/c/.///aa/a.a /b/c/aa/a.a
+/b/c/.///aa/a.. /b/c/aa/a..
+/b/c/.///aa/a./ /b/c/aa/a.
+/b/c/.///aa/a/a /b/c/aa/a/a
+/b/c/.///aa/a/. /b/c/aa/a
+/b/c/.///aa/a// /b/c/aa/a
+/b/c/.///aa/.aa /b/c/aa/.aa
+/b/c/.///aa/.a. /b/c/aa/.a.
+/b/c/.///aa/.a/ /b/c/aa/.a
+/b/c/.///aa/..a /b/c/aa/..a
+/b/c/.///aa/... /b/c/aa/...
+/b/c/.///aa/../ /b/c
+/b/c/.///aa/./a /b/c/aa/a
+/b/c/.///aa/./. /b/c/aa
+/b/c/.///aa/.// /b/c/aa
+/b/c/.///aa//aa /b/c/aa/aa
+/b/c/.///aa//a. /b/c/aa/a.
+/b/c/.///aa//a/ /b/c/aa/a
+/b/c/.///aa//.a /b/c/aa/.a
+/b/c/.///aa//.. /b/c
+/b/c/.///aa//./ /b/c/aa
+/b/c/.///aa///a /b/c/aa/a
+/b/c/.///aa///. /b/c/aa
+/b/c/.///aa//// /b/c/aa
+/b/c/.///a.aaaa /b/c/a.aaaa
+/b/c/.///a.aaa. /b/c/a.aaa.
+/b/c/.///a.aaa/ /b/c/a.aaa
+/b/c/.///a.aa.a /b/c/a.aa.a
+/b/c/.///a.aa.. /b/c/a.aa..
+/b/c/.///a.aa./ /b/c/a.aa.
+/b/c/.///a.aa/a /b/c/a.aa/a
+/b/c/.///a.aa/. /b/c/a.aa
+/b/c/.///a.aa// /b/c/a.aa
+/b/c/.///a.a.aa /b/c/a.a.aa
+/b/c/.///a.a.a. /b/c/a.a.a.
+/b/c/.///a.a.a/ /b/c/a.a.a
+/b/c/.///a.a..a /b/c/a.a..a
+/b/c/.///a.a... /b/c/a.a...
+/b/c/.///a.a../ /b/c/a.a..
+/b/c/.///a.a./a /b/c/a.a./a
+/b/c/.///a.a./. /b/c/a.a.
+/b/c/.///a.a.// /b/c/a.a.
+/b/c/.///a.a/aa /b/c/a.a/aa
+/b/c/.///a.a/a. /b/c/a.a/a.
+/b/c/.///a.a/a/ /b/c/a.a/a
+/b/c/.///a.a/.a /b/c/a.a/.a
+/b/c/.///a.a/.. /b/c
+/b/c/.///a.a/./ /b/c/a.a
+/b/c/.///a.a//a /b/c/a.a/a
+/b/c/.///a.a//. /b/c/a.a
+/b/c/.///a.a/// /b/c/a.a
+/b/c/.///a..aaa /b/c/a..aaa
+/b/c/.///a..aa. /b/c/a..aa.
+/b/c/.///a..aa/ /b/c/a..aa
+/b/c/.///a..a.a /b/c/a..a.a
+/b/c/.///a..a.. /b/c/a..a..
+/b/c/.///a..a./ /b/c/a..a.
+/b/c/.///a..a/a /b/c/a..a/a
+/b/c/.///a..a/. /b/c/a..a
+/b/c/.///a..a// /b/c/a..a
+/b/c/.///a...aa /b/c/a...aa
+/b/c/.///a...a. /b/c/a...a.
+/b/c/.///a...a/ /b/c/a...a
+/b/c/.///a....a /b/c/a....a
+/b/c/.///a..... /b/c/a.....
+/b/c/.///a..../ /b/c/a....
+/b/c/.///a.../a /b/c/a.../a
+/b/c/.///a.../. /b/c/a...
+/b/c/.///a...// /b/c/a...
+/b/c/.///a../aa /b/c/a../aa
+/b/c/.///a../a. /b/c/a../a.
+/b/c/.///a../a/ /b/c/a../a
+/b/c/.///a../.a /b/c/a../.a
+/b/c/.///a../.. /b/c
+/b/c/.///a.././ /b/c/a..
+/b/c/.///a..//a /b/c/a../a
+/b/c/.///a..//. /b/c/a..
+/b/c/.///a../// /b/c/a..
+/b/c/.///a./aaa /b/c/a./aaa
+/b/c/.///a./aa. /b/c/a./aa.
+/b/c/.///a./aa/ /b/c/a./aa
+/b/c/.///a./a.a /b/c/a./a.a
+/b/c/.///a./a.. /b/c/a./a..
+/b/c/.///a./a./ /b/c/a./a.
+/b/c/.///a./a/a /b/c/a./a/a
+/b/c/.///a./a/. /b/c/a./a
+/b/c/.///a./a// /b/c/a./a
+/b/c/.///a./.aa /b/c/a./.aa
+/b/c/.///a./.a. /b/c/a./.a.
+/b/c/.///a./.a/ /b/c/a./.a
+/b/c/.///a./..a /b/c/a./..a
+/b/c/.///a./... /b/c/a./...
+/b/c/.///a./../ /b/c
+/b/c/.///a././a /b/c/a./a
+/b/c/.///a././. /b/c/a.
+/b/c/.///a./.// /b/c/a.
+/b/c/.///a.//aa /b/c/a./aa
+/b/c/.///a.//a. /b/c/a./a.
+/b/c/.///a.//a/ /b/c/a./a
+/b/c/.///a.//.a /b/c/a./.a
+/b/c/.///a.//.. /b/c
+/b/c/.///a.//./ /b/c/a.
+/b/c/.///a.///a /b/c/a./a
+/b/c/.///a.///. /b/c/a.
+/b/c/.///a.//// /b/c/a.
+/b/c/.///a/aaaa /b/c/a/aaaa
+/b/c/.///a/aaa. /b/c/a/aaa.
+/b/c/.///a/aaa/ /b/c/a/aaa
+/b/c/.///a/aa.a /b/c/a/aa.a
+/b/c/.///a/aa.. /b/c/a/aa..
+/b/c/.///a/aa./ /b/c/a/aa.
+/b/c/.///a/aa/a /b/c/a/aa/a
+/b/c/.///a/aa/. /b/c/a/aa
+/b/c/.///a/aa// /b/c/a/aa
+/b/c/.///a/a.aa /b/c/a/a.aa
+/b/c/.///a/a.a. /b/c/a/a.a.
+/b/c/.///a/a.a/ /b/c/a/a.a
+/b/c/.///a/a..a /b/c/a/a..a
+/b/c/.///a/a... /b/c/a/a...
+/b/c/.///a/a../ /b/c/a/a..
+/b/c/.///a/a./a /b/c/a/a./a
+/b/c/.///a/a./. /b/c/a/a.
+/b/c/.///a/a.// /b/c/a/a.
+/b/c/.///a/a/aa /b/c/a/a/aa
+/b/c/.///a/a/a. /b/c/a/a/a.
+/b/c/.///a/a/a/ /b/c/a/a/a
+/b/c/.///a/a/.a /b/c/a/a/.a
+/b/c/.///a/a/.. /b/c/a
+/b/c/.///a/a/./ /b/c/a/a
+/b/c/.///a/a//a /b/c/a/a/a
+/b/c/.///a/a//. /b/c/a/a
+/b/c/.///a/a/// /b/c/a/a
+/b/c/.///a/.aaa /b/c/a/.aaa
+/b/c/.///a/.aa. /b/c/a/.aa.
+/b/c/.///a/.aa/ /b/c/a/.aa
+/b/c/.///a/.a.a /b/c/a/.a.a
+/b/c/.///a/.a.. /b/c/a/.a..
+/b/c/.///a/.a./ /b/c/a/.a.
+/b/c/.///a/.a/a /b/c/a/.a/a
+/b/c/.///a/.a/. /b/c/a/.a
+/b/c/.///a/.a// /b/c/a/.a
+/b/c/.///a/..aa /b/c/a/..aa
+/b/c/.///a/..a. /b/c/a/..a.
+/b/c/.///a/..a/ /b/c/a/..a
+/b/c/.///a/...a /b/c/a/...a
+/b/c/.///a/.... /b/c/a/....
+/b/c/.///a/.../ /b/c/a/...
+/b/c/.///a/../a /b/c/a
+/b/c/.///a/../. /b/c
+/b/c/.///a/..// /b/c
+/b/c/.///a/./aa /b/c/a/aa
+/b/c/.///a/./a. /b/c/a/a.
+/b/c/.///a/./a/ /b/c/a/a
+/b/c/.///a/./.a /b/c/a/.a
+/b/c/.///a/./.. /b/c
+/b/c/.///a/././ /b/c/a
+/b/c/.///a/.//a /b/c/a/a
+/b/c/.///a/.//. /b/c/a
+/b/c/.///a/./// /b/c/a
+/b/c/.///a//aaa /b/c/a/aaa
+/b/c/.///a//aa. /b/c/a/aa.
+/b/c/.///a//aa/ /b/c/a/aa
+/b/c/.///a//a.a /b/c/a/a.a
+/b/c/.///a//a.. /b/c/a/a..
+/b/c/.///a//a./ /b/c/a/a.
+/b/c/.///a//a/a /b/c/a/a/a
+/b/c/.///a//a/. /b/c/a/a
+/b/c/.///a//a// /b/c/a/a
+/b/c/.///a//.aa /b/c/a/.aa
+/b/c/.///a//.a. /b/c/a/.a.
+/b/c/.///a//.a/ /b/c/a/.a
+/b/c/.///a//..a /b/c/a/..a
+/b/c/.///a//... /b/c/a/...
+/b/c/.///a//../ /b/c
+/b/c/.///a//./a /b/c/a/a
+/b/c/.///a//./. /b/c/a
+/b/c/.///a//.// /b/c/a
+/b/c/.///a///aa /b/c/a/aa
+/b/c/.///a///a. /b/c/a/a.
+/b/c/.///a///a/ /b/c/a/a
+/b/c/.///a///.a /b/c/a/.a
+/b/c/.///a///.. /b/c
+/b/c/.///a///./ /b/c/a
+/b/c/.///a////a /b/c/a/a
+/b/c/.///a////. /b/c/a
+/b/c/.///a///// /b/c/a
+/b/c/.///.aaaaa /b/c/.aaaaa
+/b/c/.///.aaaa. /b/c/.aaaa.
+/b/c/.///.aaaa/ /b/c/.aaaa
+/b/c/.///.aaa.a /b/c/.aaa.a
+/b/c/.///.aaa.. /b/c/.aaa..
+/b/c/.///.aaa./ /b/c/.aaa.
+/b/c/.///.aaa/a /b/c/.aaa/a
+/b/c/.///.aaa/. /b/c/.aaa
+/b/c/.///.aaa// /b/c/.aaa
+/b/c/.///.aa.aa /b/c/.aa.aa
+/b/c/.///.aa.a. /b/c/.aa.a.
+/b/c/.///.aa.a/ /b/c/.aa.a
+/b/c/.///.aa..a /b/c/.aa..a
+/b/c/.///.aa... /b/c/.aa...
+/b/c/.///.aa../ /b/c/.aa..
+/b/c/.///.aa./a /b/c/.aa./a
+/b/c/.///.aa./. /b/c/.aa.
+/b/c/.///.aa.// /b/c/.aa.
+/b/c/.///.aa/aa /b/c/.aa/aa
+/b/c/.///.aa/a. /b/c/.aa/a.
+/b/c/.///.aa/a/ /b/c/.aa/a
+/b/c/.///.aa/.a /b/c/.aa/.a
+/b/c/.///.aa/.. /b/c
+/b/c/.///.aa/./ /b/c/.aa
+/b/c/.///.aa//a /b/c/.aa/a
+/b/c/.///.aa//. /b/c/.aa
+/b/c/.///.aa/// /b/c/.aa
+/b/c/.///.a.aaa /b/c/.a.aaa
+/b/c/.///.a.aa. /b/c/.a.aa.
+/b/c/.///.a.aa/ /b/c/.a.aa
+/b/c/.///.a.a.a /b/c/.a.a.a
+/b/c/.///.a.a.. /b/c/.a.a..
+/b/c/.///.a.a./ /b/c/.a.a.
+/b/c/.///.a.a/a /b/c/.a.a/a
+/b/c/.///.a.a/. /b/c/.a.a
+/b/c/.///.a.a// /b/c/.a.a
+/b/c/.///.a..aa /b/c/.a..aa
+/b/c/.///.a..a. /b/c/.a..a.
+/b/c/.///.a..a/ /b/c/.a..a
+/b/c/.///.a...a /b/c/.a...a
+/b/c/.///.a.... /b/c/.a....
+/b/c/.///.a.../ /b/c/.a...
+/b/c/.///.a../a /b/c/.a../a
+/b/c/.///.a../. /b/c/.a..
+/b/c/.///.a..// /b/c/.a..
+/b/c/.///.a./aa /b/c/.a./aa
+/b/c/.///.a./a. /b/c/.a./a.
+/b/c/.///.a./a/ /b/c/.a./a
+/b/c/.///.a./.a /b/c/.a./.a
+/b/c/.///.a./.. /b/c
+/b/c/.///.a././ /b/c/.a.
+/b/c/.///.a.//a /b/c/.a./a
+/b/c/.///.a.//. /b/c/.a.
+/b/c/.///.a./// /b/c/.a.
+/b/c/.///.a/aaa /b/c/.a/aaa
+/b/c/.///.a/aa. /b/c/.a/aa.
+/b/c/.///.a/aa/ /b/c/.a/aa
+/b/c/.///.a/a.a /b/c/.a/a.a
+/b/c/.///.a/a.. /b/c/.a/a..
+/b/c/.///.a/a./ /b/c/.a/a.
+/b/c/.///.a/a/a /b/c/.a/a/a
+/b/c/.///.a/a/. /b/c/.a/a
+/b/c/.///.a/a// /b/c/.a/a
+/b/c/.///.a/.aa /b/c/.a/.aa
+/b/c/.///.a/.a. /b/c/.a/.a.
+/b/c/.///.a/.a/ /b/c/.a/.a
+/b/c/.///.a/..a /b/c/.a/..a
+/b/c/.///.a/... /b/c/.a/...
+/b/c/.///.a/../ /b/c
+/b/c/.///.a/./a /b/c/.a/a
+/b/c/.///.a/./. /b/c/.a
+/b/c/.///.a/.// /b/c/.a
+/b/c/.///.a//aa /b/c/.a/aa
+/b/c/.///.a//a. /b/c/.a/a.
+/b/c/.///.a//a/ /b/c/.a/a
+/b/c/.///.a//.a /b/c/.a/.a
+/b/c/.///.a//.. /b/c
+/b/c/.///.a//./ /b/c/.a
+/b/c/.///.a///a /b/c/.a/a
+/b/c/.///.a///. /b/c/.a
+/b/c/.///.a//// /b/c/.a
+/b/c/.///..aaaa /b/c/..aaaa
+/b/c/.///..aaa. /b/c/..aaa.
+/b/c/.///..aaa/ /b/c/..aaa
+/b/c/.///..aa.a /b/c/..aa.a
+/b/c/.///..aa.. /b/c/..aa..
+/b/c/.///..aa./ /b/c/..aa.
+/b/c/.///..aa/a /b/c/..aa/a
+/b/c/.///..aa/. /b/c/..aa
+/b/c/.///..aa// /b/c/..aa
+/b/c/.///..a.aa /b/c/..a.aa
+/b/c/.///..a.a. /b/c/..a.a.
+/b/c/.///..a.a/ /b/c/..a.a
+/b/c/.///..a..a /b/c/..a..a
+/b/c/.///..a... /b/c/..a...
+/b/c/.///..a../ /b/c/..a..
+/b/c/.///..a./a /b/c/..a./a
+/b/c/.///..a./. /b/c/..a.
+/b/c/.///..a.// /b/c/..a.
+/b/c/.///..a/aa /b/c/..a/aa
+/b/c/.///..a/a. /b/c/..a/a.
+/b/c/.///..a/a/ /b/c/..a/a
+/b/c/.///..a/.a /b/c/..a/.a
+/b/c/.///..a/.. /b/c
+/b/c/.///..a/./ /b/c/..a
+/b/c/.///..a//a /b/c/..a/a
+/b/c/.///..a//. /b/c/..a
+/b/c/.///..a/// /b/c/..a
+/b/c/.///...aaa /b/c/...aaa
+/b/c/.///...aa. /b/c/...aa.
+/b/c/.///...aa/ /b/c/...aa
+/b/c/.///...a.a /b/c/...a.a
+/b/c/.///...a.. /b/c/...a..
+/b/c/.///...a./ /b/c/...a.
+/b/c/.///...a/a /b/c/...a/a
+/b/c/.///...a/. /b/c/...a
+/b/c/.///...a// /b/c/...a
+/b/c/.///....aa /b/c/....aa
+/b/c/.///....a. /b/c/....a.
+/b/c/.///....a/ /b/c/....a
+/b/c/.///.....a /b/c/.....a
+/b/c/.///...... /b/c/......
+/b/c/.///...../ /b/c/.....
+/b/c/.///..../a /b/c/..../a
+/b/c/.///..../. /b/c/....
+/b/c/.///....// /b/c/....
+/b/c/.///.../aa /b/c/.../aa
+/b/c/.///.../a. /b/c/.../a.
+/b/c/.///.../a/ /b/c/.../a
+/b/c/.///.../.a /b/c/.../.a
+/b/c/.///.../.. /b/c
+/b/c/.///..././ /b/c/...
+/b/c/.///...//a /b/c/.../a
+/b/c/.///...//. /b/c/...
+/b/c/.///.../// /b/c/...
+/b/c/.///../aaa /b/aaa
+/b/c/.///../aa. /b/aa.
+/b/c/.///../aa/ /b/aa
+/b/c/.///../a.a /b/a.a
+/b/c/.///../a.. /b/a..
+/b/c/.///../a./ /b/a.
+/b/c/.///../a/a /b/a/a
+/b/c/.///../a/. /b/a
+/b/c/.///../a// /b/a
+/b/c/.///../.aa /b/.aa
+/b/c/.///../.a. /b/.a.
+/b/c/.///../.a/ /b/.a
+/b/c/.///../..a /b/..a
+/b/c/.///../... /b/...
+/b/c/.///../../ /
+/b/c/.///.././a /b/a
+/b/c/.///.././. /b
+/b/c/.///../.// /b
+/b/c/.///..//aa /b/aa
+/b/c/.///..//a. /b/a.
+/b/c/.///..//a/ /b/a
+/b/c/.///..//.a /b/.a
+/b/c/.///..//.. /
+/b/c/.///..//./ /b
+/b/c/.///..///a /b/a
+/b/c/.///..///. /b
+/b/c/.///..//// /b
+/b/c/.///./aaaa /b/c/aaaa
+/b/c/.///./aaa. /b/c/aaa.
+/b/c/.///./aaa/ /b/c/aaa
+/b/c/.///./aa.a /b/c/aa.a
+/b/c/.///./aa.. /b/c/aa..
+/b/c/.///./aa./ /b/c/aa.
+/b/c/.///./aa/a /b/c/aa/a
+/b/c/.///./aa/. /b/c/aa
+/b/c/.///./aa// /b/c/aa
+/b/c/.///./a.aa /b/c/a.aa
+/b/c/.///./a.a. /b/c/a.a.
+/b/c/.///./a.a/ /b/c/a.a
+/b/c/.///./a..a /b/c/a..a
+/b/c/.///./a... /b/c/a...
+/b/c/.///./a../ /b/c/a..
+/b/c/.///./a./a /b/c/a./a
+/b/c/.///./a./. /b/c/a.
+/b/c/.///./a.// /b/c/a.
+/b/c/.///./a/aa /b/c/a/aa
+/b/c/.///./a/a. /b/c/a/a.
+/b/c/.///./a/a/ /b/c/a/a
+/b/c/.///./a/.a /b/c/a/.a
+/b/c/.///./a/.. /b/c
+/b/c/.///./a/./ /b/c/a
+/b/c/.///./a//a /b/c/a/a
+/b/c/.///./a//. /b/c/a
+/b/c/.///./a/// /b/c/a
+/b/c/.///./.aaa /b/c/.aaa
+/b/c/.///./.aa. /b/c/.aa.
+/b/c/.///./.aa/ /b/c/.aa
+/b/c/.///./.a.a /b/c/.a.a
+/b/c/.///./.a.. /b/c/.a..
+/b/c/.///./.a./ /b/c/.a.
+/b/c/.///./.a/a /b/c/.a/a
+/b/c/.///./.a/. /b/c/.a
+/b/c/.///./.a// /b/c/.a
+/b/c/.///./..aa /b/c/..aa
+/b/c/.///./..a. /b/c/..a.
+/b/c/.///./..a/ /b/c/..a
+/b/c/.///./...a /b/c/...a
+/b/c/.///./.... /b/c/....
+/b/c/.///./.../ /b/c/...
+/b/c/.///./../a /b/a
+/b/c/.///./../. /b
+/b/c/.///./..// /b
+/b/c/.///././aa /b/c/aa
+/b/c/.///././a. /b/c/a.
+/b/c/.///././a/ /b/c/a
+/b/c/.///././.a /b/c/.a
+/b/c/.///././.. /b
+/b/c/.///./././ /b/c
+/b/c/.///././/a /b/c/a
+/b/c/.///././/. /b/c
+/b/c/.///././// /b/c
+/b/c/.///.//aaa /b/c/aaa
+/b/c/.///.//aa. /b/c/aa.
+/b/c/.///.//aa/ /b/c/aa
+/b/c/.///.//a.a /b/c/a.a
+/b/c/.///.//a.. /b/c/a..
+/b/c/.///.//a./ /b/c/a.
+/b/c/.///.//a/a /b/c/a/a
+/b/c/.///.//a/. /b/c/a
+/b/c/.///.//a// /b/c/a
+/b/c/.///.//.aa /b/c/.aa
+/b/c/.///.//.a. /b/c/.a.
+/b/c/.///.//.a/ /b/c/.a
+/b/c/.///.//..a /b/c/..a
+/b/c/.///.//... /b/c/...
+/b/c/.///.//../ /b
+/b/c/.///.//./a /b/c/a
+/b/c/.///.//./. /b/c
+/b/c/.///.//.// /b/c
+/b/c/.///.///aa /b/c/aa
+/b/c/.///.///a. /b/c/a.
+/b/c/.///.///a/ /b/c/a
+/b/c/.///.///.a /b/c/.a
+/b/c/.///.///.. /b
+/b/c/.///.///./ /b/c
+/b/c/.///.////a /b/c/a
+/b/c/.///.////. /b/c
+/b/c/.///.///// /b/c
+/b/c/.////aaaaa /b/c/aaaaa
+/b/c/.////aaaa. /b/c/aaaa.
+/b/c/.////aaaa/ /b/c/aaaa
+/b/c/.////aaa.a /b/c/aaa.a
+/b/c/.////aaa.. /b/c/aaa..
+/b/c/.////aaa./ /b/c/aaa.
+/b/c/.////aaa/a /b/c/aaa/a
+/b/c/.////aaa/. /b/c/aaa
+/b/c/.////aaa// /b/c/aaa
+/b/c/.////aa.aa /b/c/aa.aa
+/b/c/.////aa.a. /b/c/aa.a.
+/b/c/.////aa.a/ /b/c/aa.a
+/b/c/.////aa..a /b/c/aa..a
+/b/c/.////aa... /b/c/aa...
+/b/c/.////aa../ /b/c/aa..
+/b/c/.////aa./a /b/c/aa./a
+/b/c/.////aa./. /b/c/aa.
+/b/c/.////aa.// /b/c/aa.
+/b/c/.////aa/aa /b/c/aa/aa
+/b/c/.////aa/a. /b/c/aa/a.
+/b/c/.////aa/a/ /b/c/aa/a
+/b/c/.////aa/.a /b/c/aa/.a
+/b/c/.////aa/.. /b/c
+/b/c/.////aa/./ /b/c/aa
+/b/c/.////aa//a /b/c/aa/a
+/b/c/.////aa//. /b/c/aa
+/b/c/.////aa/// /b/c/aa
+/b/c/.////a.aaa /b/c/a.aaa
+/b/c/.////a.aa. /b/c/a.aa.
+/b/c/.////a.aa/ /b/c/a.aa
+/b/c/.////a.a.a /b/c/a.a.a
+/b/c/.////a.a.. /b/c/a.a..
+/b/c/.////a.a./ /b/c/a.a.
+/b/c/.////a.a/a /b/c/a.a/a
+/b/c/.////a.a/. /b/c/a.a
+/b/c/.////a.a// /b/c/a.a
+/b/c/.////a..aa /b/c/a..aa
+/b/c/.////a..a. /b/c/a..a.
+/b/c/.////a..a/ /b/c/a..a
+/b/c/.////a...a /b/c/a...a
+/b/c/.////a.... /b/c/a....
+/b/c/.////a.../ /b/c/a...
+/b/c/.////a../a /b/c/a../a
+/b/c/.////a../. /b/c/a..
+/b/c/.////a..// /b/c/a..
+/b/c/.////a./aa /b/c/a./aa
+/b/c/.////a./a. /b/c/a./a.
+/b/c/.////a./a/ /b/c/a./a
+/b/c/.////a./.a /b/c/a./.a
+/b/c/.////a./.. /b/c
+/b/c/.////a././ /b/c/a.
+/b/c/.////a.//a /b/c/a./a
+/b/c/.////a.//. /b/c/a.
+/b/c/.////a./// /b/c/a.
+/b/c/.////a/aaa /b/c/a/aaa
+/b/c/.////a/aa. /b/c/a/aa.
+/b/c/.////a/aa/ /b/c/a/aa
+/b/c/.////a/a.a /b/c/a/a.a
+/b/c/.////a/a.. /b/c/a/a..
+/b/c/.////a/a./ /b/c/a/a.
+/b/c/.////a/a/a /b/c/a/a/a
+/b/c/.////a/a/. /b/c/a/a
+/b/c/.////a/a// /b/c/a/a
+/b/c/.////a/.aa /b/c/a/.aa
+/b/c/.////a/.a. /b/c/a/.a.
+/b/c/.////a/.a/ /b/c/a/.a
+/b/c/.////a/..a /b/c/a/..a
+/b/c/.////a/... /b/c/a/...
+/b/c/.////a/../ /b/c
+/b/c/.////a/./a /b/c/a/a
+/b/c/.////a/./. /b/c/a
+/b/c/.////a/.// /b/c/a
+/b/c/.////a//aa /b/c/a/aa
+/b/c/.////a//a. /b/c/a/a.
+/b/c/.////a//a/ /b/c/a/a
+/b/c/.////a//.a /b/c/a/.a
+/b/c/.////a//.. /b/c
+/b/c/.////a//./ /b/c/a
+/b/c/.////a///a /b/c/a/a
+/b/c/.////a///. /b/c/a
+/b/c/.////a//// /b/c/a
+/b/c/.////.aaaa /b/c/.aaaa
+/b/c/.////.aaa. /b/c/.aaa.
+/b/c/.////.aaa/ /b/c/.aaa
+/b/c/.////.aa.a /b/c/.aa.a
+/b/c/.////.aa.. /b/c/.aa..
+/b/c/.////.aa./ /b/c/.aa.
+/b/c/.////.aa/a /b/c/.aa/a
+/b/c/.////.aa/. /b/c/.aa
+/b/c/.////.aa// /b/c/.aa
+/b/c/.////.a.aa /b/c/.a.aa
+/b/c/.////.a.a. /b/c/.a.a.
+/b/c/.////.a.a/ /b/c/.a.a
+/b/c/.////.a..a /b/c/.a..a
+/b/c/.////.a... /b/c/.a...
+/b/c/.////.a../ /b/c/.a..
+/b/c/.////.a./a /b/c/.a./a
+/b/c/.////.a./. /b/c/.a.
+/b/c/.////.a.// /b/c/.a.
+/b/c/.////.a/aa /b/c/.a/aa
+/b/c/.////.a/a. /b/c/.a/a.
+/b/c/.////.a/a/ /b/c/.a/a
+/b/c/.////.a/.a /b/c/.a/.a
+/b/c/.////.a/.. /b/c
+/b/c/.////.a/./ /b/c/.a
+/b/c/.////.a//a /b/c/.a/a
+/b/c/.////.a//. /b/c/.a
+/b/c/.////.a/// /b/c/.a
+/b/c/.////..aaa /b/c/..aaa
+/b/c/.////..aa. /b/c/..aa.
+/b/c/.////..aa/ /b/c/..aa
+/b/c/.////..a.a /b/c/..a.a
+/b/c/.////..a.. /b/c/..a..
+/b/c/.////..a./ /b/c/..a.
+/b/c/.////..a/a /b/c/..a/a
+/b/c/.////..a/. /b/c/..a
+/b/c/.////..a// /b/c/..a
+/b/c/.////...aa /b/c/...aa
+/b/c/.////...a. /b/c/...a.
+/b/c/.////...a/ /b/c/...a
+/b/c/.////....a /b/c/....a
+/b/c/.////..... /b/c/.....
+/b/c/.////..../ /b/c/....
+/b/c/.////.../a /b/c/.../a
+/b/c/.////.../. /b/c/...
+/b/c/.////...// /b/c/...
+/b/c/.////../aa /b/aa
+/b/c/.////../a. /b/a.
+/b/c/.////../a/ /b/a
+/b/c/.////../.a /b/.a
+/b/c/.////../.. /
+/b/c/.////.././ /b
+/b/c/.////..//a /b/a
+/b/c/.////..//. /b
+/b/c/.////../// /b
+/b/c/.////./aaa /b/c/aaa
+/b/c/.////./aa. /b/c/aa.
+/b/c/.////./aa/ /b/c/aa
+/b/c/.////./a.a /b/c/a.a
+/b/c/.////./a.. /b/c/a..
+/b/c/.////./a./ /b/c/a.
+/b/c/.////./a/a /b/c/a/a
+/b/c/.////./a/. /b/c/a
+/b/c/.////./a// /b/c/a
+/b/c/.////./.aa /b/c/.aa
+/b/c/.////./.a. /b/c/.a.
+/b/c/.////./.a/ /b/c/.a
+/b/c/.////./..a /b/c/..a
+/b/c/.////./... /b/c/...
+/b/c/.////./../ /b
+/b/c/.////././a /b/c/a
+/b/c/.////././. /b/c
+/b/c/.////./.// /b/c
+/b/c/.////.//aa /b/c/aa
+/b/c/.////.//a. /b/c/a.
+/b/c/.////.//a/ /b/c/a
+/b/c/.////.//.a /b/c/.a
+/b/c/.////.//.. /b
+/b/c/.////.//./ /b/c
+/b/c/.////.///a /b/c/a
+/b/c/.////.///. /b/c
+/b/c/.////.//// /b/c
+/b/c/./////aaaa /b/c/aaaa
+/b/c/./////aaa. /b/c/aaa.
+/b/c/./////aaa/ /b/c/aaa
+/b/c/./////aa.a /b/c/aa.a
+/b/c/./////aa.. /b/c/aa..
+/b/c/./////aa./ /b/c/aa.
+/b/c/./////aa/a /b/c/aa/a
+/b/c/./////aa/. /b/c/aa
+/b/c/./////aa// /b/c/aa
+/b/c/./////a.aa /b/c/a.aa
+/b/c/./////a.a. /b/c/a.a.
+/b/c/./////a.a/ /b/c/a.a
+/b/c/./////a..a /b/c/a..a
+/b/c/./////a... /b/c/a...
+/b/c/./////a../ /b/c/a..
+/b/c/./////a./a /b/c/a./a
+/b/c/./////a./. /b/c/a.
+/b/c/./////a.// /b/c/a.
+/b/c/./////a/aa /b/c/a/aa
+/b/c/./////a/a. /b/c/a/a.
+/b/c/./////a/a/ /b/c/a/a
+/b/c/./////a/.a /b/c/a/.a
+/b/c/./////a/.. /b/c
+/b/c/./////a/./ /b/c/a
+/b/c/./////a//a /b/c/a/a
+/b/c/./////a//. /b/c/a
+/b/c/./////a/// /b/c/a
+/b/c/./////.aaa /b/c/.aaa
+/b/c/./////.aa. /b/c/.aa.
+/b/c/./////.aa/ /b/c/.aa
+/b/c/./////.a.a /b/c/.a.a
+/b/c/./////.a.. /b/c/.a..
+/b/c/./////.a./ /b/c/.a.
+/b/c/./////.a/a /b/c/.a/a
+/b/c/./////.a/. /b/c/.a
+/b/c/./////.a// /b/c/.a
+/b/c/./////..aa /b/c/..aa
+/b/c/./////..a. /b/c/..a.
+/b/c/./////..a/ /b/c/..a
+/b/c/./////...a /b/c/...a
+/b/c/./////.... /b/c/....
+/b/c/./////.../ /b/c/...
+/b/c/./////../a /b/a
+/b/c/./////../. /b
+/b/c/./////..// /b
+/b/c/./////./aa /b/c/aa
+/b/c/./////./a. /b/c/a.
+/b/c/./////./a/ /b/c/a
+/b/c/./////./.a /b/c/.a
+/b/c/./////./.. /b
+/b/c/./////././ /b/c
+/b/c/./////.//a /b/c/a
+/b/c/./////.//. /b/c
+/b/c/./////./// /b/c
+/b/c/.//////aaa /b/c/aaa
+/b/c/.//////aa. /b/c/aa.
+/b/c/.//////aa/ /b/c/aa
+/b/c/.//////a.a /b/c/a.a
+/b/c/.//////a.. /b/c/a..
+/b/c/.//////a./ /b/c/a.
+/b/c/.//////a/a /b/c/a/a
+/b/c/.//////a/. /b/c/a
+/b/c/.//////a// /b/c/a
+/b/c/.//////.aa /b/c/.aa
+/b/c/.//////.a. /b/c/.a.
+/b/c/.//////.a/ /b/c/.a
+/b/c/.//////..a /b/c/..a
+/b/c/.//////... /b/c/...
+/b/c/.//////../ /b
+/b/c/.//////./a /b/c/a
+/b/c/.//////./. /b/c
+/b/c/.//////.// /b/c
+/b/c/.///////aa /b/c/aa
+/b/c/.///////a. /b/c/a.
+/b/c/.///////a/ /b/c/a
+/b/c/.///////.a /b/c/.a
+/b/c/.///////.. /b
+/b/c/.///////./ /b/c
+/b/c/.////////a /b/c/a
+/b/c/.////////. /b/c
+/b/c/.///////// /b/c
+/b/c//aaaaaaaaa /b/c/aaaaaaaaa
+/b/c//aaaaaaaa. /b/c/aaaaaaaa.
+/b/c//aaaaaaaa/ /b/c/aaaaaaaa
+/b/c//aaaaaaa.a /b/c/aaaaaaa.a
+/b/c//aaaaaaa.. /b/c/aaaaaaa..
+/b/c//aaaaaaa./ /b/c/aaaaaaa.
+/b/c//aaaaaaa/a /b/c/aaaaaaa/a
+/b/c//aaaaaaa/. /b/c/aaaaaaa
+/b/c//aaaaaaa// /b/c/aaaaaaa
+/b/c//aaaaaa.aa /b/c/aaaaaa.aa
+/b/c//aaaaaa.a. /b/c/aaaaaa.a.
+/b/c//aaaaaa.a/ /b/c/aaaaaa.a
+/b/c//aaaaaa..a /b/c/aaaaaa..a
+/b/c//aaaaaa... /b/c/aaaaaa...
+/b/c//aaaaaa../ /b/c/aaaaaa..
+/b/c//aaaaaa./a /b/c/aaaaaa./a
+/b/c//aaaaaa./. /b/c/aaaaaa.
+/b/c//aaaaaa.// /b/c/aaaaaa.
+/b/c//aaaaaa/aa /b/c/aaaaaa/aa
+/b/c//aaaaaa/a. /b/c/aaaaaa/a.
+/b/c//aaaaaa/a/ /b/c/aaaaaa/a
+/b/c//aaaaaa/.a /b/c/aaaaaa/.a
+/b/c//aaaaaa/.. /b/c
+/b/c//aaaaaa/./ /b/c/aaaaaa
+/b/c//aaaaaa//a /b/c/aaaaaa/a
+/b/c//aaaaaa//. /b/c/aaaaaa
+/b/c//aaaaaa/// /b/c/aaaaaa
+/b/c//aaaaa.aaa /b/c/aaaaa.aaa
+/b/c//aaaaa.aa. /b/c/aaaaa.aa.
+/b/c//aaaaa.aa/ /b/c/aaaaa.aa
+/b/c//aaaaa.a.a /b/c/aaaaa.a.a
+/b/c//aaaaa.a.. /b/c/aaaaa.a..
+/b/c//aaaaa.a./ /b/c/aaaaa.a.
+/b/c//aaaaa.a/a /b/c/aaaaa.a/a
+/b/c//aaaaa.a/. /b/c/aaaaa.a
+/b/c//aaaaa.a// /b/c/aaaaa.a
+/b/c//aaaaa..aa /b/c/aaaaa..aa
+/b/c//aaaaa..a. /b/c/aaaaa..a.
+/b/c//aaaaa..a/ /b/c/aaaaa..a
+/b/c//aaaaa...a /b/c/aaaaa...a
+/b/c//aaaaa.... /b/c/aaaaa....
+/b/c//aaaaa.../ /b/c/aaaaa...
+/b/c//aaaaa../a /b/c/aaaaa../a
+/b/c//aaaaa../. /b/c/aaaaa..
+/b/c//aaaaa..// /b/c/aaaaa..
+/b/c//aaaaa./aa /b/c/aaaaa./aa
+/b/c//aaaaa./a. /b/c/aaaaa./a.
+/b/c//aaaaa./a/ /b/c/aaaaa./a
+/b/c//aaaaa./.a /b/c/aaaaa./.a
+/b/c//aaaaa./.. /b/c
+/b/c//aaaaa././ /b/c/aaaaa.
+/b/c//aaaaa.//a /b/c/aaaaa./a
+/b/c//aaaaa.//. /b/c/aaaaa.
+/b/c//aaaaa./// /b/c/aaaaa.
+/b/c//aaaaa/aaa /b/c/aaaaa/aaa
+/b/c//aaaaa/aa. /b/c/aaaaa/aa.
+/b/c//aaaaa/aa/ /b/c/aaaaa/aa
+/b/c//aaaaa/a.a /b/c/aaaaa/a.a
+/b/c//aaaaa/a.. /b/c/aaaaa/a..
+/b/c//aaaaa/a./ /b/c/aaaaa/a.
+/b/c//aaaaa/a/a /b/c/aaaaa/a/a
+/b/c//aaaaa/a/. /b/c/aaaaa/a
+/b/c//aaaaa/a// /b/c/aaaaa/a
+/b/c//aaaaa/.aa /b/c/aaaaa/.aa
+/b/c//aaaaa/.a. /b/c/aaaaa/.a.
+/b/c//aaaaa/.a/ /b/c/aaaaa/.a
+/b/c//aaaaa/..a /b/c/aaaaa/..a
+/b/c//aaaaa/... /b/c/aaaaa/...
+/b/c//aaaaa/../ /b/c
+/b/c//aaaaa/./a /b/c/aaaaa/a
+/b/c//aaaaa/./. /b/c/aaaaa
+/b/c//aaaaa/.// /b/c/aaaaa
+/b/c//aaaaa//aa /b/c/aaaaa/aa
+/b/c//aaaaa//a. /b/c/aaaaa/a.
+/b/c//aaaaa//a/ /b/c/aaaaa/a
+/b/c//aaaaa//.a /b/c/aaaaa/.a
+/b/c//aaaaa//.. /b/c
+/b/c//aaaaa//./ /b/c/aaaaa
+/b/c//aaaaa///a /b/c/aaaaa/a
+/b/c//aaaaa///. /b/c/aaaaa
+/b/c//aaaaa//// /b/c/aaaaa
+/b/c//aaaa.aaaa /b/c/aaaa.aaaa
+/b/c//aaaa.aaa. /b/c/aaaa.aaa.
+/b/c//aaaa.aaa/ /b/c/aaaa.aaa
+/b/c//aaaa.aa.a /b/c/aaaa.aa.a
+/b/c//aaaa.aa.. /b/c/aaaa.aa..
+/b/c//aaaa.aa./ /b/c/aaaa.aa.
+/b/c//aaaa.aa/a /b/c/aaaa.aa/a
+/b/c//aaaa.aa/. /b/c/aaaa.aa
+/b/c//aaaa.aa// /b/c/aaaa.aa
+/b/c//aaaa.a.aa /b/c/aaaa.a.aa
+/b/c//aaaa.a.a. /b/c/aaaa.a.a.
+/b/c//aaaa.a.a/ /b/c/aaaa.a.a
+/b/c//aaaa.a..a /b/c/aaaa.a..a
+/b/c//aaaa.a... /b/c/aaaa.a...
+/b/c//aaaa.a../ /b/c/aaaa.a..
+/b/c//aaaa.a./a /b/c/aaaa.a./a
+/b/c//aaaa.a./. /b/c/aaaa.a.
+/b/c//aaaa.a.// /b/c/aaaa.a.
+/b/c//aaaa.a/aa /b/c/aaaa.a/aa
+/b/c//aaaa.a/a. /b/c/aaaa.a/a.
+/b/c//aaaa.a/a/ /b/c/aaaa.a/a
+/b/c//aaaa.a/.a /b/c/aaaa.a/.a
+/b/c//aaaa.a/.. /b/c
+/b/c//aaaa.a/./ /b/c/aaaa.a
+/b/c//aaaa.a//a /b/c/aaaa.a/a
+/b/c//aaaa.a//. /b/c/aaaa.a
+/b/c//aaaa.a/// /b/c/aaaa.a
+/b/c//aaaa..aaa /b/c/aaaa..aaa
+/b/c//aaaa..aa. /b/c/aaaa..aa.
+/b/c//aaaa..aa/ /b/c/aaaa..aa
+/b/c//aaaa..a.a /b/c/aaaa..a.a
+/b/c//aaaa..a.. /b/c/aaaa..a..
+/b/c//aaaa..a./ /b/c/aaaa..a.
+/b/c//aaaa..a/a /b/c/aaaa..a/a
+/b/c//aaaa..a/. /b/c/aaaa..a
+/b/c//aaaa..a// /b/c/aaaa..a
+/b/c//aaaa...aa /b/c/aaaa...aa
+/b/c//aaaa...a. /b/c/aaaa...a.
+/b/c//aaaa...a/ /b/c/aaaa...a
+/b/c//aaaa....a /b/c/aaaa....a
+/b/c//aaaa..... /b/c/aaaa.....
+/b/c//aaaa..../ /b/c/aaaa....
+/b/c//aaaa.../a /b/c/aaaa.../a
+/b/c//aaaa.../. /b/c/aaaa...
+/b/c//aaaa...// /b/c/aaaa...
+/b/c//aaaa../aa /b/c/aaaa../aa
+/b/c//aaaa../a. /b/c/aaaa../a.
+/b/c//aaaa../a/ /b/c/aaaa../a
+/b/c//aaaa../.a /b/c/aaaa../.a
+/b/c//aaaa../.. /b/c
+/b/c//aaaa.././ /b/c/aaaa..
+/b/c//aaaa..//a /b/c/aaaa../a
+/b/c//aaaa..//. /b/c/aaaa..
+/b/c//aaaa../// /b/c/aaaa..
+/b/c//aaaa./aaa /b/c/aaaa./aaa
+/b/c//aaaa./aa. /b/c/aaaa./aa.
+/b/c//aaaa./aa/ /b/c/aaaa./aa
+/b/c//aaaa./a.a /b/c/aaaa./a.a
+/b/c//aaaa./a.. /b/c/aaaa./a..
+/b/c//aaaa./a./ /b/c/aaaa./a.
+/b/c//aaaa./a/a /b/c/aaaa./a/a
+/b/c//aaaa./a/. /b/c/aaaa./a
+/b/c//aaaa./a// /b/c/aaaa./a
+/b/c//aaaa./.aa /b/c/aaaa./.aa
+/b/c//aaaa./.a. /b/c/aaaa./.a.
+/b/c//aaaa./.a/ /b/c/aaaa./.a
+/b/c//aaaa./..a /b/c/aaaa./..a
+/b/c//aaaa./... /b/c/aaaa./...
+/b/c//aaaa./../ /b/c
+/b/c//aaaa././a /b/c/aaaa./a
+/b/c//aaaa././. /b/c/aaaa.
+/b/c//aaaa./.// /b/c/aaaa.
+/b/c//aaaa.//aa /b/c/aaaa./aa
+/b/c//aaaa.//a. /b/c/aaaa./a.
+/b/c//aaaa.//a/ /b/c/aaaa./a
+/b/c//aaaa.//.a /b/c/aaaa./.a
+/b/c//aaaa.//.. /b/c
+/b/c//aaaa.//./ /b/c/aaaa.
+/b/c//aaaa.///a /b/c/aaaa./a
+/b/c//aaaa.///. /b/c/aaaa.
+/b/c//aaaa.//// /b/c/aaaa.
+/b/c//aaaa/aaaa /b/c/aaaa/aaaa
+/b/c//aaaa/aaa. /b/c/aaaa/aaa.
+/b/c//aaaa/aaa/ /b/c/aaaa/aaa
+/b/c//aaaa/aa.a /b/c/aaaa/aa.a
+/b/c//aaaa/aa.. /b/c/aaaa/aa..
+/b/c//aaaa/aa./ /b/c/aaaa/aa.
+/b/c//aaaa/aa/a /b/c/aaaa/aa/a
+/b/c//aaaa/aa/. /b/c/aaaa/aa
+/b/c//aaaa/aa// /b/c/aaaa/aa
+/b/c//aaaa/a.aa /b/c/aaaa/a.aa
+/b/c//aaaa/a.a. /b/c/aaaa/a.a.
+/b/c//aaaa/a.a/ /b/c/aaaa/a.a
+/b/c//aaaa/a..a /b/c/aaaa/a..a
+/b/c//aaaa/a... /b/c/aaaa/a...
+/b/c//aaaa/a../ /b/c/aaaa/a..
+/b/c//aaaa/a./a /b/c/aaaa/a./a
+/b/c//aaaa/a./. /b/c/aaaa/a.
+/b/c//aaaa/a.// /b/c/aaaa/a.
+/b/c//aaaa/a/aa /b/c/aaaa/a/aa
+/b/c//aaaa/a/a. /b/c/aaaa/a/a.
+/b/c//aaaa/a/a/ /b/c/aaaa/a/a
+/b/c//aaaa/a/.a /b/c/aaaa/a/.a
+/b/c//aaaa/a/.. /b/c/aaaa
+/b/c//aaaa/a/./ /b/c/aaaa/a
+/b/c//aaaa/a//a /b/c/aaaa/a/a
+/b/c//aaaa/a//. /b/c/aaaa/a
+/b/c//aaaa/a/// /b/c/aaaa/a
+/b/c//aaaa/.aaa /b/c/aaaa/.aaa
+/b/c//aaaa/.aa. /b/c/aaaa/.aa.
+/b/c//aaaa/.aa/ /b/c/aaaa/.aa
+/b/c//aaaa/.a.a /b/c/aaaa/.a.a
+/b/c//aaaa/.a.. /b/c/aaaa/.a..
+/b/c//aaaa/.a./ /b/c/aaaa/.a.
+/b/c//aaaa/.a/a /b/c/aaaa/.a/a
+/b/c//aaaa/.a/. /b/c/aaaa/.a
+/b/c//aaaa/.a// /b/c/aaaa/.a
+/b/c//aaaa/..aa /b/c/aaaa/..aa
+/b/c//aaaa/..a. /b/c/aaaa/..a.
+/b/c//aaaa/..a/ /b/c/aaaa/..a
+/b/c//aaaa/...a /b/c/aaaa/...a
+/b/c//aaaa/.... /b/c/aaaa/....
+/b/c//aaaa/.../ /b/c/aaaa/...
+/b/c//aaaa/../a /b/c/a
+/b/c//aaaa/../. /b/c
+/b/c//aaaa/..// /b/c
+/b/c//aaaa/./aa /b/c/aaaa/aa
+/b/c//aaaa/./a. /b/c/aaaa/a.
+/b/c//aaaa/./a/ /b/c/aaaa/a
+/b/c//aaaa/./.a /b/c/aaaa/.a
+/b/c//aaaa/./.. /b/c
+/b/c//aaaa/././ /b/c/aaaa
+/b/c//aaaa/.//a /b/c/aaaa/a
+/b/c//aaaa/.//. /b/c/aaaa
+/b/c//aaaa/./// /b/c/aaaa
+/b/c//aaaa//aaa /b/c/aaaa/aaa
+/b/c//aaaa//aa. /b/c/aaaa/aa.
+/b/c//aaaa//aa/ /b/c/aaaa/aa
+/b/c//aaaa//a.a /b/c/aaaa/a.a
+/b/c//aaaa//a.. /b/c/aaaa/a..
+/b/c//aaaa//a./ /b/c/aaaa/a.
+/b/c//aaaa//a/a /b/c/aaaa/a/a
+/b/c//aaaa//a/. /b/c/aaaa/a
+/b/c//aaaa//a// /b/c/aaaa/a
+/b/c//aaaa//.aa /b/c/aaaa/.aa
+/b/c//aaaa//.a. /b/c/aaaa/.a.
+/b/c//aaaa//.a/ /b/c/aaaa/.a
+/b/c//aaaa//..a /b/c/aaaa/..a
+/b/c//aaaa//... /b/c/aaaa/...
+/b/c//aaaa//../ /b/c
+/b/c//aaaa//./a /b/c/aaaa/a
+/b/c//aaaa//./. /b/c/aaaa
+/b/c//aaaa//.// /b/c/aaaa
+/b/c//aaaa///aa /b/c/aaaa/aa
+/b/c//aaaa///a. /b/c/aaaa/a.
+/b/c//aaaa///a/ /b/c/aaaa/a
+/b/c//aaaa///.a /b/c/aaaa/.a
+/b/c//aaaa///.. /b/c
+/b/c//aaaa///./ /b/c/aaaa
+/b/c//aaaa////a /b/c/aaaa/a
+/b/c//aaaa////. /b/c/aaaa
+/b/c//aaaa///// /b/c/aaaa
+/b/c//aaa.aaaaa /b/c/aaa.aaaaa
+/b/c//aaa.aaaa. /b/c/aaa.aaaa.
+/b/c//aaa.aaaa/ /b/c/aaa.aaaa
+/b/c//aaa.aaa.a /b/c/aaa.aaa.a
+/b/c//aaa.aaa.. /b/c/aaa.aaa..
+/b/c//aaa.aaa./ /b/c/aaa.aaa.
+/b/c//aaa.aaa/a /b/c/aaa.aaa/a
+/b/c//aaa.aaa/. /b/c/aaa.aaa
+/b/c//aaa.aaa// /b/c/aaa.aaa
+/b/c//aaa.aa.aa /b/c/aaa.aa.aa
+/b/c//aaa.aa.a. /b/c/aaa.aa.a.
+/b/c//aaa.aa.a/ /b/c/aaa.aa.a
+/b/c//aaa.aa..a /b/c/aaa.aa..a
+/b/c//aaa.aa... /b/c/aaa.aa...
+/b/c//aaa.aa../ /b/c/aaa.aa..
+/b/c//aaa.aa./a /b/c/aaa.aa./a
+/b/c//aaa.aa./. /b/c/aaa.aa.
+/b/c//aaa.aa.// /b/c/aaa.aa.
+/b/c//aaa.aa/aa /b/c/aaa.aa/aa
+/b/c//aaa.aa/a. /b/c/aaa.aa/a.
+/b/c//aaa.aa/a/ /b/c/aaa.aa/a
+/b/c//aaa.aa/.a /b/c/aaa.aa/.a
+/b/c//aaa.aa/.. /b/c
+/b/c//aaa.aa/./ /b/c/aaa.aa
+/b/c//aaa.aa//a /b/c/aaa.aa/a
+/b/c//aaa.aa//. /b/c/aaa.aa
+/b/c//aaa.aa/// /b/c/aaa.aa
+/b/c//aaa.a.aaa /b/c/aaa.a.aaa
+/b/c//aaa.a.aa. /b/c/aaa.a.aa.
+/b/c//aaa.a.aa/ /b/c/aaa.a.aa
+/b/c//aaa.a.a.a /b/c/aaa.a.a.a
+/b/c//aaa.a.a.. /b/c/aaa.a.a..
+/b/c//aaa.a.a./ /b/c/aaa.a.a.
+/b/c//aaa.a.a/a /b/c/aaa.a.a/a
+/b/c//aaa.a.a/. /b/c/aaa.a.a
+/b/c//aaa.a.a// /b/c/aaa.a.a
+/b/c//aaa.a..aa /b/c/aaa.a..aa
+/b/c//aaa.a..a. /b/c/aaa.a..a.
+/b/c//aaa.a..a/ /b/c/aaa.a..a
+/b/c//aaa.a...a /b/c/aaa.a...a
+/b/c//aaa.a.... /b/c/aaa.a....
+/b/c//aaa.a.../ /b/c/aaa.a...
+/b/c//aaa.a../a /b/c/aaa.a../a
+/b/c//aaa.a../. /b/c/aaa.a..
+/b/c//aaa.a..// /b/c/aaa.a..
+/b/c//aaa.a./aa /b/c/aaa.a./aa
+/b/c//aaa.a./a. /b/c/aaa.a./a.
+/b/c//aaa.a./a/ /b/c/aaa.a./a
+/b/c//aaa.a./.a /b/c/aaa.a./.a
+/b/c//aaa.a./.. /b/c
+/b/c//aaa.a././ /b/c/aaa.a.
+/b/c//aaa.a.//a /b/c/aaa.a./a
+/b/c//aaa.a.//. /b/c/aaa.a.
+/b/c//aaa.a./// /b/c/aaa.a.
+/b/c//aaa.a/aaa /b/c/aaa.a/aaa
+/b/c//aaa.a/aa. /b/c/aaa.a/aa.
+/b/c//aaa.a/aa/ /b/c/aaa.a/aa
+/b/c//aaa.a/a.a /b/c/aaa.a/a.a
+/b/c//aaa.a/a.. /b/c/aaa.a/a..
+/b/c//aaa.a/a./ /b/c/aaa.a/a.
+/b/c//aaa.a/a/a /b/c/aaa.a/a/a
+/b/c//aaa.a/a/. /b/c/aaa.a/a
+/b/c//aaa.a/a// /b/c/aaa.a/a
+/b/c//aaa.a/.aa /b/c/aaa.a/.aa
+/b/c//aaa.a/.a. /b/c/aaa.a/.a.
+/b/c//aaa.a/.a/ /b/c/aaa.a/.a
+/b/c//aaa.a/..a /b/c/aaa.a/..a
+/b/c//aaa.a/... /b/c/aaa.a/...
+/b/c//aaa.a/../ /b/c
+/b/c//aaa.a/./a /b/c/aaa.a/a
+/b/c//aaa.a/./. /b/c/aaa.a
+/b/c//aaa.a/.// /b/c/aaa.a
+/b/c//aaa.a//aa /b/c/aaa.a/aa
+/b/c//aaa.a//a. /b/c/aaa.a/a.
+/b/c//aaa.a//a/ /b/c/aaa.a/a
+/b/c//aaa.a//.a /b/c/aaa.a/.a
+/b/c//aaa.a//.. /b/c
+/b/c//aaa.a//./ /b/c/aaa.a
+/b/c//aaa.a///a /b/c/aaa.a/a
+/b/c//aaa.a///. /b/c/aaa.a
+/b/c//aaa.a//// /b/c/aaa.a
+/b/c//aaa..aaaa /b/c/aaa..aaaa
+/b/c//aaa..aaa. /b/c/aaa..aaa.
+/b/c//aaa..aaa/ /b/c/aaa..aaa
+/b/c//aaa..aa.a /b/c/aaa..aa.a
+/b/c//aaa..aa.. /b/c/aaa..aa..
+/b/c//aaa..aa./ /b/c/aaa..aa.
+/b/c//aaa..aa/a /b/c/aaa..aa/a
+/b/c//aaa..aa/. /b/c/aaa..aa
+/b/c//aaa..aa// /b/c/aaa..aa
+/b/c//aaa..a.aa /b/c/aaa..a.aa
+/b/c//aaa..a.a. /b/c/aaa..a.a.
+/b/c//aaa..a.a/ /b/c/aaa..a.a
+/b/c//aaa..a..a /b/c/aaa..a..a
+/b/c//aaa..a... /b/c/aaa..a...
+/b/c//aaa..a../ /b/c/aaa..a..
+/b/c//aaa..a./a /b/c/aaa..a./a
+/b/c//aaa..a./. /b/c/aaa..a.
+/b/c//aaa..a.// /b/c/aaa..a.
+/b/c//aaa..a/aa /b/c/aaa..a/aa
+/b/c//aaa..a/a. /b/c/aaa..a/a.
+/b/c//aaa..a/a/ /b/c/aaa..a/a
+/b/c//aaa..a/.a /b/c/aaa..a/.a
+/b/c//aaa..a/.. /b/c
+/b/c//aaa..a/./ /b/c/aaa..a
+/b/c//aaa..a//a /b/c/aaa..a/a
+/b/c//aaa..a//. /b/c/aaa..a
+/b/c//aaa..a/// /b/c/aaa..a
+/b/c//aaa...aaa /b/c/aaa...aaa
+/b/c//aaa...aa. /b/c/aaa...aa.
+/b/c//aaa...aa/ /b/c/aaa...aa
+/b/c//aaa...a.a /b/c/aaa...a.a
+/b/c//aaa...a.. /b/c/aaa...a..
+/b/c//aaa...a./ /b/c/aaa...a.
+/b/c//aaa...a/a /b/c/aaa...a/a
+/b/c//aaa...a/. /b/c/aaa...a
+/b/c//aaa...a// /b/c/aaa...a
+/b/c//aaa....aa /b/c/aaa....aa
+/b/c//aaa....a. /b/c/aaa....a.
+/b/c//aaa....a/ /b/c/aaa....a
+/b/c//aaa.....a /b/c/aaa.....a
+/b/c//aaa...... /b/c/aaa......
+/b/c//aaa...../ /b/c/aaa.....
+/b/c//aaa..../a /b/c/aaa..../a
+/b/c//aaa..../. /b/c/aaa....
+/b/c//aaa....// /b/c/aaa....
+/b/c//aaa.../aa /b/c/aaa.../aa
+/b/c//aaa.../a. /b/c/aaa.../a.
+/b/c//aaa.../a/ /b/c/aaa.../a
+/b/c//aaa.../.a /b/c/aaa.../.a
+/b/c//aaa.../.. /b/c
+/b/c//aaa..././ /b/c/aaa...
+/b/c//aaa...//a /b/c/aaa.../a
+/b/c//aaa...//. /b/c/aaa...
+/b/c//aaa.../// /b/c/aaa...
+/b/c//aaa../aaa /b/c/aaa../aaa
+/b/c//aaa../aa. /b/c/aaa../aa.
+/b/c//aaa../aa/ /b/c/aaa../aa
+/b/c//aaa../a.a /b/c/aaa../a.a
+/b/c//aaa../a.. /b/c/aaa../a..
+/b/c//aaa../a./ /b/c/aaa../a.
+/b/c//aaa../a/a /b/c/aaa../a/a
+/b/c//aaa../a/. /b/c/aaa../a
+/b/c//aaa../a// /b/c/aaa../a
+/b/c//aaa../.aa /b/c/aaa../.aa
+/b/c//aaa../.a. /b/c/aaa../.a.
+/b/c//aaa../.a/ /b/c/aaa../.a
+/b/c//aaa../..a /b/c/aaa../..a
+/b/c//aaa../... /b/c/aaa../...
+/b/c//aaa../../ /b/c
+/b/c//aaa.././a /b/c/aaa../a
+/b/c//aaa.././. /b/c/aaa..
+/b/c//aaa../.// /b/c/aaa..
+/b/c//aaa..//aa /b/c/aaa../aa
+/b/c//aaa..//a. /b/c/aaa../a.
+/b/c//aaa..//a/ /b/c/aaa../a
+/b/c//aaa..//.a /b/c/aaa../.a
+/b/c//aaa..//.. /b/c
+/b/c//aaa..//./ /b/c/aaa..
+/b/c//aaa..///a /b/c/aaa../a
+/b/c//aaa..///. /b/c/aaa..
+/b/c//aaa..//// /b/c/aaa..
+/b/c//aaa./aaaa /b/c/aaa./aaaa
+/b/c//aaa./aaa. /b/c/aaa./aaa.
+/b/c//aaa./aaa/ /b/c/aaa./aaa
+/b/c//aaa./aa.a /b/c/aaa./aa.a
+/b/c//aaa./aa.. /b/c/aaa./aa..
+/b/c//aaa./aa./ /b/c/aaa./aa.
+/b/c//aaa./aa/a /b/c/aaa./aa/a
+/b/c//aaa./aa/. /b/c/aaa./aa
+/b/c//aaa./aa// /b/c/aaa./aa
+/b/c//aaa./a.aa /b/c/aaa./a.aa
+/b/c//aaa./a.a. /b/c/aaa./a.a.
+/b/c//aaa./a.a/ /b/c/aaa./a.a
+/b/c//aaa./a..a /b/c/aaa./a..a
+/b/c//aaa./a... /b/c/aaa./a...
+/b/c//aaa./a../ /b/c/aaa./a..
+/b/c//aaa./a./a /b/c/aaa./a./a
+/b/c//aaa./a./. /b/c/aaa./a.
+/b/c//aaa./a.// /b/c/aaa./a.
+/b/c//aaa./a/aa /b/c/aaa./a/aa
+/b/c//aaa./a/a. /b/c/aaa./a/a.
+/b/c//aaa./a/a/ /b/c/aaa./a/a
+/b/c//aaa./a/.a /b/c/aaa./a/.a
+/b/c//aaa./a/.. /b/c/aaa.
+/b/c//aaa./a/./ /b/c/aaa./a
+/b/c//aaa./a//a /b/c/aaa./a/a
+/b/c//aaa./a//. /b/c/aaa./a
+/b/c//aaa./a/// /b/c/aaa./a
+/b/c//aaa./.aaa /b/c/aaa./.aaa
+/b/c//aaa./.aa. /b/c/aaa./.aa.
+/b/c//aaa./.aa/ /b/c/aaa./.aa
+/b/c//aaa./.a.a /b/c/aaa./.a.a
+/b/c//aaa./.a.. /b/c/aaa./.a..
+/b/c//aaa./.a./ /b/c/aaa./.a.
+/b/c//aaa./.a/a /b/c/aaa./.a/a
+/b/c//aaa./.a/. /b/c/aaa./.a
+/b/c//aaa./.a// /b/c/aaa./.a
+/b/c//aaa./..aa /b/c/aaa./..aa
+/b/c//aaa./..a. /b/c/aaa./..a.
+/b/c//aaa./..a/ /b/c/aaa./..a
+/b/c//aaa./...a /b/c/aaa./...a
+/b/c//aaa./.... /b/c/aaa./....
+/b/c//aaa./.../ /b/c/aaa./...
+/b/c//aaa./../a /b/c/a
+/b/c//aaa./../. /b/c
+/b/c//aaa./..// /b/c
+/b/c//aaa././aa /b/c/aaa./aa
+/b/c//aaa././a. /b/c/aaa./a.
+/b/c//aaa././a/ /b/c/aaa./a
+/b/c//aaa././.a /b/c/aaa./.a
+/b/c//aaa././.. /b/c
+/b/c//aaa./././ /b/c/aaa.
+/b/c//aaa././/a /b/c/aaa./a
+/b/c//aaa././/. /b/c/aaa.
+/b/c//aaa././// /b/c/aaa.
+/b/c//aaa.//aaa /b/c/aaa./aaa
+/b/c//aaa.//aa. /b/c/aaa./aa.
+/b/c//aaa.//aa/ /b/c/aaa./aa
+/b/c//aaa.//a.a /b/c/aaa./a.a
+/b/c//aaa.//a.. /b/c/aaa./a..
+/b/c//aaa.//a./ /b/c/aaa./a.
+/b/c//aaa.//a/a /b/c/aaa./a/a
+/b/c//aaa.//a/. /b/c/aaa./a
+/b/c//aaa.//a// /b/c/aaa./a
+/b/c//aaa.//.aa /b/c/aaa./.aa
+/b/c//aaa.//.a. /b/c/aaa./.a.
+/b/c//aaa.//.a/ /b/c/aaa./.a
+/b/c//aaa.//..a /b/c/aaa./..a
+/b/c//aaa.//... /b/c/aaa./...
+/b/c//aaa.//../ /b/c
+/b/c//aaa.//./a /b/c/aaa./a
+/b/c//aaa.//./. /b/c/aaa.
+/b/c//aaa.//.// /b/c/aaa.
+/b/c//aaa.///aa /b/c/aaa./aa
+/b/c//aaa.///a. /b/c/aaa./a.
+/b/c//aaa.///a/ /b/c/aaa./a
+/b/c//aaa.///.a /b/c/aaa./.a
+/b/c//aaa.///.. /b/c
+/b/c//aaa.///./ /b/c/aaa.
+/b/c//aaa.////a /b/c/aaa./a
+/b/c//aaa.////. /b/c/aaa.
+/b/c//aaa.///// /b/c/aaa.
+/b/c//aaa/aaaaa /b/c/aaa/aaaaa
+/b/c//aaa/aaaa. /b/c/aaa/aaaa.
+/b/c//aaa/aaaa/ /b/c/aaa/aaaa
+/b/c//aaa/aaa.a /b/c/aaa/aaa.a
+/b/c//aaa/aaa.. /b/c/aaa/aaa..
+/b/c//aaa/aaa./ /b/c/aaa/aaa.
+/b/c//aaa/aaa/a /b/c/aaa/aaa/a
+/b/c//aaa/aaa/. /b/c/aaa/aaa
+/b/c//aaa/aaa// /b/c/aaa/aaa
+/b/c//aaa/aa.aa /b/c/aaa/aa.aa
+/b/c//aaa/aa.a. /b/c/aaa/aa.a.
+/b/c//aaa/aa.a/ /b/c/aaa/aa.a
+/b/c//aaa/aa..a /b/c/aaa/aa..a
+/b/c//aaa/aa... /b/c/aaa/aa...
+/b/c//aaa/aa../ /b/c/aaa/aa..
+/b/c//aaa/aa./a /b/c/aaa/aa./a
+/b/c//aaa/aa./. /b/c/aaa/aa.
+/b/c//aaa/aa.// /b/c/aaa/aa.
+/b/c//aaa/aa/aa /b/c/aaa/aa/aa
+/b/c//aaa/aa/a. /b/c/aaa/aa/a.
+/b/c//aaa/aa/a/ /b/c/aaa/aa/a
+/b/c//aaa/aa/.a /b/c/aaa/aa/.a
+/b/c//aaa/aa/.. /b/c/aaa
+/b/c//aaa/aa/./ /b/c/aaa/aa
+/b/c//aaa/aa//a /b/c/aaa/aa/a
+/b/c//aaa/aa//. /b/c/aaa/aa
+/b/c//aaa/aa/// /b/c/aaa/aa
+/b/c//aaa/a.aaa /b/c/aaa/a.aaa
+/b/c//aaa/a.aa. /b/c/aaa/a.aa.
+/b/c//aaa/a.aa/ /b/c/aaa/a.aa
+/b/c//aaa/a.a.a /b/c/aaa/a.a.a
+/b/c//aaa/a.a.. /b/c/aaa/a.a..
+/b/c//aaa/a.a./ /b/c/aaa/a.a.
+/b/c//aaa/a.a/a /b/c/aaa/a.a/a
+/b/c//aaa/a.a/. /b/c/aaa/a.a
+/b/c//aaa/a.a// /b/c/aaa/a.a
+/b/c//aaa/a..aa /b/c/aaa/a..aa
+/b/c//aaa/a..a. /b/c/aaa/a..a.
+/b/c//aaa/a..a/ /b/c/aaa/a..a
+/b/c//aaa/a...a /b/c/aaa/a...a
+/b/c//aaa/a.... /b/c/aaa/a....
+/b/c//aaa/a.../ /b/c/aaa/a...
+/b/c//aaa/a../a /b/c/aaa/a../a
+/b/c//aaa/a../. /b/c/aaa/a..
+/b/c//aaa/a..// /b/c/aaa/a..
+/b/c//aaa/a./aa /b/c/aaa/a./aa
+/b/c//aaa/a./a. /b/c/aaa/a./a.
+/b/c//aaa/a./a/ /b/c/aaa/a./a
+/b/c//aaa/a./.a /b/c/aaa/a./.a
+/b/c//aaa/a./.. /b/c/aaa
+/b/c//aaa/a././ /b/c/aaa/a.
+/b/c//aaa/a.//a /b/c/aaa/a./a
+/b/c//aaa/a.//. /b/c/aaa/a.
+/b/c//aaa/a./// /b/c/aaa/a.
+/b/c//aaa/a/aaa /b/c/aaa/a/aaa
+/b/c//aaa/a/aa. /b/c/aaa/a/aa.
+/b/c//aaa/a/aa/ /b/c/aaa/a/aa
+/b/c//aaa/a/a.a /b/c/aaa/a/a.a
+/b/c//aaa/a/a.. /b/c/aaa/a/a..
+/b/c//aaa/a/a./ /b/c/aaa/a/a.
+/b/c//aaa/a/a/a /b/c/aaa/a/a/a
+/b/c//aaa/a/a/. /b/c/aaa/a/a
+/b/c//aaa/a/a// /b/c/aaa/a/a
+/b/c//aaa/a/.aa /b/c/aaa/a/.aa
+/b/c//aaa/a/.a. /b/c/aaa/a/.a.
+/b/c//aaa/a/.a/ /b/c/aaa/a/.a
+/b/c//aaa/a/..a /b/c/aaa/a/..a
+/b/c//aaa/a/... /b/c/aaa/a/...
+/b/c//aaa/a/../ /b/c/aaa
+/b/c//aaa/a/./a /b/c/aaa/a/a
+/b/c//aaa/a/./. /b/c/aaa/a
+/b/c//aaa/a/.// /b/c/aaa/a
+/b/c//aaa/a//aa /b/c/aaa/a/aa
+/b/c//aaa/a//a. /b/c/aaa/a/a.
+/b/c//aaa/a//a/ /b/c/aaa/a/a
+/b/c//aaa/a//.a /b/c/aaa/a/.a
+/b/c//aaa/a//.. /b/c/aaa
+/b/c//aaa/a//./ /b/c/aaa/a
+/b/c//aaa/a///a /b/c/aaa/a/a
+/b/c//aaa/a///. /b/c/aaa/a
+/b/c//aaa/a//// /b/c/aaa/a
+/b/c//aaa/.aaaa /b/c/aaa/.aaaa
+/b/c//aaa/.aaa. /b/c/aaa/.aaa.
+/b/c//aaa/.aaa/ /b/c/aaa/.aaa
+/b/c//aaa/.aa.a /b/c/aaa/.aa.a
+/b/c//aaa/.aa.. /b/c/aaa/.aa..
+/b/c//aaa/.aa./ /b/c/aaa/.aa.
+/b/c//aaa/.aa/a /b/c/aaa/.aa/a
+/b/c//aaa/.aa/. /b/c/aaa/.aa
+/b/c//aaa/.aa// /b/c/aaa/.aa
+/b/c//aaa/.a.aa /b/c/aaa/.a.aa
+/b/c//aaa/.a.a. /b/c/aaa/.a.a.
+/b/c//aaa/.a.a/ /b/c/aaa/.a.a
+/b/c//aaa/.a..a /b/c/aaa/.a..a
+/b/c//aaa/.a... /b/c/aaa/.a...
+/b/c//aaa/.a../ /b/c/aaa/.a..
+/b/c//aaa/.a./a /b/c/aaa/.a./a
+/b/c//aaa/.a./. /b/c/aaa/.a.
+/b/c//aaa/.a.// /b/c/aaa/.a.
+/b/c//aaa/.a/aa /b/c/aaa/.a/aa
+/b/c//aaa/.a/a. /b/c/aaa/.a/a.
+/b/c//aaa/.a/a/ /b/c/aaa/.a/a
+/b/c//aaa/.a/.a /b/c/aaa/.a/.a
+/b/c//aaa/.a/.. /b/c/aaa
+/b/c//aaa/.a/./ /b/c/aaa/.a
+/b/c//aaa/.a//a /b/c/aaa/.a/a
+/b/c//aaa/.a//. /b/c/aaa/.a
+/b/c//aaa/.a/// /b/c/aaa/.a
+/b/c//aaa/..aaa /b/c/aaa/..aaa
+/b/c//aaa/..aa. /b/c/aaa/..aa.
+/b/c//aaa/..aa/ /b/c/aaa/..aa
+/b/c//aaa/..a.a /b/c/aaa/..a.a
+/b/c//aaa/..a.. /b/c/aaa/..a..
+/b/c//aaa/..a./ /b/c/aaa/..a.
+/b/c//aaa/..a/a /b/c/aaa/..a/a
+/b/c//aaa/..a/. /b/c/aaa/..a
+/b/c//aaa/..a// /b/c/aaa/..a
+/b/c//aaa/...aa /b/c/aaa/...aa
+/b/c//aaa/...a. /b/c/aaa/...a.
+/b/c//aaa/...a/ /b/c/aaa/...a
+/b/c//aaa/....a /b/c/aaa/....a
+/b/c//aaa/..... /b/c/aaa/.....
+/b/c//aaa/..../ /b/c/aaa/....
+/b/c//aaa/.../a /b/c/aaa/.../a
+/b/c//aaa/.../. /b/c/aaa/...
+/b/c//aaa/...// /b/c/aaa/...
+/b/c//aaa/../aa /b/c/aa
+/b/c//aaa/../a. /b/c/a.
+/b/c//aaa/../a/ /b/c/a
+/b/c//aaa/../.a /b/c/.a
+/b/c//aaa/../.. /b
+/b/c//aaa/.././ /b/c
+/b/c//aaa/..//a /b/c/a
+/b/c//aaa/..//. /b/c
+/b/c//aaa/../// /b/c
+/b/c//aaa/./aaa /b/c/aaa/aaa
+/b/c//aaa/./aa. /b/c/aaa/aa.
+/b/c//aaa/./aa/ /b/c/aaa/aa
+/b/c//aaa/./a.a /b/c/aaa/a.a
+/b/c//aaa/./a.. /b/c/aaa/a..
+/b/c//aaa/./a./ /b/c/aaa/a.
+/b/c//aaa/./a/a /b/c/aaa/a/a
+/b/c//aaa/./a/. /b/c/aaa/a
+/b/c//aaa/./a// /b/c/aaa/a
+/b/c//aaa/./.aa /b/c/aaa/.aa
+/b/c//aaa/./.a. /b/c/aaa/.a.
+/b/c//aaa/./.a/ /b/c/aaa/.a
+/b/c//aaa/./..a /b/c/aaa/..a
+/b/c//aaa/./... /b/c/aaa/...
+/b/c//aaa/./../ /b/c
+/b/c//aaa/././a /b/c/aaa/a
+/b/c//aaa/././. /b/c/aaa
+/b/c//aaa/./.// /b/c/aaa
+/b/c//aaa/.//aa /b/c/aaa/aa
+/b/c//aaa/.//a. /b/c/aaa/a.
+/b/c//aaa/.//a/ /b/c/aaa/a
+/b/c//aaa/.//.a /b/c/aaa/.a
+/b/c//aaa/.//.. /b/c
+/b/c//aaa/.//./ /b/c/aaa
+/b/c//aaa/.///a /b/c/aaa/a
+/b/c//aaa/.///. /b/c/aaa
+/b/c//aaa/.//// /b/c/aaa
+/b/c//aaa//aaaa /b/c/aaa/aaaa
+/b/c//aaa//aaa. /b/c/aaa/aaa.
+/b/c//aaa//aaa/ /b/c/aaa/aaa
+/b/c//aaa//aa.a /b/c/aaa/aa.a
+/b/c//aaa//aa.. /b/c/aaa/aa..
+/b/c//aaa//aa./ /b/c/aaa/aa.
+/b/c//aaa//aa/a /b/c/aaa/aa/a
+/b/c//aaa//aa/. /b/c/aaa/aa
+/b/c//aaa//aa// /b/c/aaa/aa
+/b/c//aaa//a.aa /b/c/aaa/a.aa
+/b/c//aaa//a.a. /b/c/aaa/a.a.
+/b/c//aaa//a.a/ /b/c/aaa/a.a
+/b/c//aaa//a..a /b/c/aaa/a..a
+/b/c//aaa//a... /b/c/aaa/a...
+/b/c//aaa//a../ /b/c/aaa/a..
+/b/c//aaa//a./a /b/c/aaa/a./a
+/b/c//aaa//a./. /b/c/aaa/a.
+/b/c//aaa//a.// /b/c/aaa/a.
+/b/c//aaa//a/aa /b/c/aaa/a/aa
+/b/c//aaa//a/a. /b/c/aaa/a/a.
+/b/c//aaa//a/a/ /b/c/aaa/a/a
+/b/c//aaa//a/.a /b/c/aaa/a/.a
+/b/c//aaa//a/.. /b/c/aaa
+/b/c//aaa//a/./ /b/c/aaa/a
+/b/c//aaa//a//a /b/c/aaa/a/a
+/b/c//aaa//a//. /b/c/aaa/a
+/b/c//aaa//a/// /b/c/aaa/a
+/b/c//aaa//.aaa /b/c/aaa/.aaa
+/b/c//aaa//.aa. /b/c/aaa/.aa.
+/b/c//aaa//.aa/ /b/c/aaa/.aa
+/b/c//aaa//.a.a /b/c/aaa/.a.a
+/b/c//aaa//.a.. /b/c/aaa/.a..
+/b/c//aaa//.a./ /b/c/aaa/.a.
+/b/c//aaa//.a/a /b/c/aaa/.a/a
+/b/c//aaa//.a/. /b/c/aaa/.a
+/b/c//aaa//.a// /b/c/aaa/.a
+/b/c//aaa//..aa /b/c/aaa/..aa
+/b/c//aaa//..a. /b/c/aaa/..a.
+/b/c//aaa//..a/ /b/c/aaa/..a
+/b/c//aaa//...a /b/c/aaa/...a
+/b/c//aaa//.... /b/c/aaa/....
+/b/c//aaa//.../ /b/c/aaa/...
+/b/c//aaa//../a /b/c/a
+/b/c//aaa//../. /b/c
+/b/c//aaa//..// /b/c
+/b/c//aaa//./aa /b/c/aaa/aa
+/b/c//aaa//./a. /b/c/aaa/a.
+/b/c//aaa//./a/ /b/c/aaa/a
+/b/c//aaa//./.a /b/c/aaa/.a
+/b/c//aaa//./.. /b/c
+/b/c//aaa//././ /b/c/aaa
+/b/c//aaa//.//a /b/c/aaa/a
+/b/c//aaa//.//. /b/c/aaa
+/b/c//aaa//./// /b/c/aaa
+/b/c//aaa///aaa /b/c/aaa/aaa
+/b/c//aaa///aa. /b/c/aaa/aa.
+/b/c//aaa///aa/ /b/c/aaa/aa
+/b/c//aaa///a.a /b/c/aaa/a.a
+/b/c//aaa///a.. /b/c/aaa/a..
+/b/c//aaa///a./ /b/c/aaa/a.
+/b/c//aaa///a/a /b/c/aaa/a/a
+/b/c//aaa///a/. /b/c/aaa/a
+/b/c//aaa///a// /b/c/aaa/a
+/b/c//aaa///.aa /b/c/aaa/.aa
+/b/c//aaa///.a. /b/c/aaa/.a.
+/b/c//aaa///.a/ /b/c/aaa/.a
+/b/c//aaa///..a /b/c/aaa/..a
+/b/c//aaa///... /b/c/aaa/...
+/b/c//aaa///../ /b/c
+/b/c//aaa///./a /b/c/aaa/a
+/b/c//aaa///./. /b/c/aaa
+/b/c//aaa///.// /b/c/aaa
+/b/c//aaa////aa /b/c/aaa/aa
+/b/c//aaa////a. /b/c/aaa/a.
+/b/c//aaa////a/ /b/c/aaa/a
+/b/c//aaa////.a /b/c/aaa/.a
+/b/c//aaa////.. /b/c
+/b/c//aaa////./ /b/c/aaa
+/b/c//aaa/////a /b/c/aaa/a
+/b/c//aaa/////. /b/c/aaa
+/b/c//aaa////// /b/c/aaa
+/b/c//aa.aaaaaa /b/c/aa.aaaaaa
+/b/c//aa.aaaaa. /b/c/aa.aaaaa.
+/b/c//aa.aaaaa/ /b/c/aa.aaaaa
+/b/c//aa.aaaa.a /b/c/aa.aaaa.a
+/b/c//aa.aaaa.. /b/c/aa.aaaa..
+/b/c//aa.aaaa./ /b/c/aa.aaaa.
+/b/c//aa.aaaa/a /b/c/aa.aaaa/a
+/b/c//aa.aaaa/. /b/c/aa.aaaa
+/b/c//aa.aaaa// /b/c/aa.aaaa
+/b/c//aa.aaa.aa /b/c/aa.aaa.aa
+/b/c//aa.aaa.a. /b/c/aa.aaa.a.
+/b/c//aa.aaa.a/ /b/c/aa.aaa.a
+/b/c//aa.aaa..a /b/c/aa.aaa..a
+/b/c//aa.aaa... /b/c/aa.aaa...
+/b/c//aa.aaa../ /b/c/aa.aaa..
+/b/c//aa.aaa./a /b/c/aa.aaa./a
+/b/c//aa.aaa./. /b/c/aa.aaa.
+/b/c//aa.aaa.// /b/c/aa.aaa.
+/b/c//aa.aaa/aa /b/c/aa.aaa/aa
+/b/c//aa.aaa/a. /b/c/aa.aaa/a.
+/b/c//aa.aaa/a/ /b/c/aa.aaa/a
+/b/c//aa.aaa/.a /b/c/aa.aaa/.a
+/b/c//aa.aaa/.. /b/c
+/b/c//aa.aaa/./ /b/c/aa.aaa
+/b/c//aa.aaa//a /b/c/aa.aaa/a
+/b/c//aa.aaa//. /b/c/aa.aaa
+/b/c//aa.aaa/// /b/c/aa.aaa
+/b/c//aa.aa.aaa /b/c/aa.aa.aaa
+/b/c//aa.aa.aa. /b/c/aa.aa.aa.
+/b/c//aa.aa.aa/ /b/c/aa.aa.aa
+/b/c//aa.aa.a.a /b/c/aa.aa.a.a
+/b/c//aa.aa.a.. /b/c/aa.aa.a..
+/b/c//aa.aa.a./ /b/c/aa.aa.a.
+/b/c//aa.aa.a/a /b/c/aa.aa.a/a
+/b/c//aa.aa.a/. /b/c/aa.aa.a
+/b/c//aa.aa.a// /b/c/aa.aa.a
+/b/c//aa.aa..aa /b/c/aa.aa..aa
+/b/c//aa.aa..a. /b/c/aa.aa..a.
+/b/c//aa.aa..a/ /b/c/aa.aa..a
+/b/c//aa.aa...a /b/c/aa.aa...a
+/b/c//aa.aa.... /b/c/aa.aa....
+/b/c//aa.aa.../ /b/c/aa.aa...
+/b/c//aa.aa../a /b/c/aa.aa../a
+/b/c//aa.aa../. /b/c/aa.aa..
+/b/c//aa.aa..// /b/c/aa.aa..
+/b/c//aa.aa./aa /b/c/aa.aa./aa
+/b/c//aa.aa./a. /b/c/aa.aa./a.
+/b/c//aa.aa./a/ /b/c/aa.aa./a
+/b/c//aa.aa./.a /b/c/aa.aa./.a
+/b/c//aa.aa./.. /b/c
+/b/c//aa.aa././ /b/c/aa.aa.
+/b/c//aa.aa.//a /b/c/aa.aa./a
+/b/c//aa.aa.//. /b/c/aa.aa.
+/b/c//aa.aa./// /b/c/aa.aa.
+/b/c//aa.aa/aaa /b/c/aa.aa/aaa
+/b/c//aa.aa/aa. /b/c/aa.aa/aa.
+/b/c//aa.aa/aa/ /b/c/aa.aa/aa
+/b/c//aa.aa/a.a /b/c/aa.aa/a.a
+/b/c//aa.aa/a.. /b/c/aa.aa/a..
+/b/c//aa.aa/a./ /b/c/aa.aa/a.
+/b/c//aa.aa/a/a /b/c/aa.aa/a/a
+/b/c//aa.aa/a/. /b/c/aa.aa/a
+/b/c//aa.aa/a// /b/c/aa.aa/a
+/b/c//aa.aa/.aa /b/c/aa.aa/.aa
+/b/c//aa.aa/.a. /b/c/aa.aa/.a.
+/b/c//aa.aa/.a/ /b/c/aa.aa/.a
+/b/c//aa.aa/..a /b/c/aa.aa/..a
+/b/c//aa.aa/... /b/c/aa.aa/...
+/b/c//aa.aa/../ /b/c
+/b/c//aa.aa/./a /b/c/aa.aa/a
+/b/c//aa.aa/./. /b/c/aa.aa
+/b/c//aa.aa/.// /b/c/aa.aa
+/b/c//aa.aa//aa /b/c/aa.aa/aa
+/b/c//aa.aa//a. /b/c/aa.aa/a.
+/b/c//aa.aa//a/ /b/c/aa.aa/a
+/b/c//aa.aa//.a /b/c/aa.aa/.a
+/b/c//aa.aa//.. /b/c
+/b/c//aa.aa//./ /b/c/aa.aa
+/b/c//aa.aa///a /b/c/aa.aa/a
+/b/c//aa.aa///. /b/c/aa.aa
+/b/c//aa.aa//// /b/c/aa.aa
+/b/c//aa.a.aaaa /b/c/aa.a.aaaa
+/b/c//aa.a.aaa. /b/c/aa.a.aaa.
+/b/c//aa.a.aaa/ /b/c/aa.a.aaa
+/b/c//aa.a.aa.a /b/c/aa.a.aa.a
+/b/c//aa.a.aa.. /b/c/aa.a.aa..
+/b/c//aa.a.aa./ /b/c/aa.a.aa.
+/b/c//aa.a.aa/a /b/c/aa.a.aa/a
+/b/c//aa.a.aa/. /b/c/aa.a.aa
+/b/c//aa.a.aa// /b/c/aa.a.aa
+/b/c//aa.a.a.aa /b/c/aa.a.a.aa
+/b/c//aa.a.a.a. /b/c/aa.a.a.a.
+/b/c//aa.a.a.a/ /b/c/aa.a.a.a
+/b/c//aa.a.a..a /b/c/aa.a.a..a
+/b/c//aa.a.a... /b/c/aa.a.a...
+/b/c//aa.a.a../ /b/c/aa.a.a..
+/b/c//aa.a.a./a /b/c/aa.a.a./a
+/b/c//aa.a.a./. /b/c/aa.a.a.
+/b/c//aa.a.a.// /b/c/aa.a.a.
+/b/c//aa.a.a/aa /b/c/aa.a.a/aa
+/b/c//aa.a.a/a. /b/c/aa.a.a/a.
+/b/c//aa.a.a/a/ /b/c/aa.a.a/a
+/b/c//aa.a.a/.a /b/c/aa.a.a/.a
+/b/c//aa.a.a/.. /b/c
+/b/c//aa.a.a/./ /b/c/aa.a.a
+/b/c//aa.a.a//a /b/c/aa.a.a/a
+/b/c//aa.a.a//. /b/c/aa.a.a
+/b/c//aa.a.a/// /b/c/aa.a.a
+/b/c//aa.a..aaa /b/c/aa.a..aaa
+/b/c//aa.a..aa. /b/c/aa.a..aa.
+/b/c//aa.a..aa/ /b/c/aa.a..aa
+/b/c//aa.a..a.a /b/c/aa.a..a.a
+/b/c//aa.a..a.. /b/c/aa.a..a..
+/b/c//aa.a..a./ /b/c/aa.a..a.
+/b/c//aa.a..a/a /b/c/aa.a..a/a
+/b/c//aa.a..a/. /b/c/aa.a..a
+/b/c//aa.a..a// /b/c/aa.a..a
+/b/c//aa.a...aa /b/c/aa.a...aa
+/b/c//aa.a...a. /b/c/aa.a...a.
+/b/c//aa.a...a/ /b/c/aa.a...a
+/b/c//aa.a....a /b/c/aa.a....a
+/b/c//aa.a..... /b/c/aa.a.....
+/b/c//aa.a..../ /b/c/aa.a....
+/b/c//aa.a.../a /b/c/aa.a.../a
+/b/c//aa.a.../. /b/c/aa.a...
+/b/c//aa.a...// /b/c/aa.a...
+/b/c//aa.a../aa /b/c/aa.a../aa
+/b/c//aa.a../a. /b/c/aa.a../a.
+/b/c//aa.a../a/ /b/c/aa.a../a
+/b/c//aa.a../.a /b/c/aa.a../.a
+/b/c//aa.a../.. /b/c
+/b/c//aa.a.././ /b/c/aa.a..
+/b/c//aa.a..//a /b/c/aa.a../a
+/b/c//aa.a..//. /b/c/aa.a..
+/b/c//aa.a../// /b/c/aa.a..
+/b/c//aa.a./aaa /b/c/aa.a./aaa
+/b/c//aa.a./aa. /b/c/aa.a./aa.
+/b/c//aa.a./aa/ /b/c/aa.a./aa
+/b/c//aa.a./a.a /b/c/aa.a./a.a
+/b/c//aa.a./a.. /b/c/aa.a./a..
+/b/c//aa.a./a./ /b/c/aa.a./a.
+/b/c//aa.a./a/a /b/c/aa.a./a/a
+/b/c//aa.a./a/. /b/c/aa.a./a
+/b/c//aa.a./a// /b/c/aa.a./a
+/b/c//aa.a./.aa /b/c/aa.a./.aa
+/b/c//aa.a./.a. /b/c/aa.a./.a.
+/b/c//aa.a./.a/ /b/c/aa.a./.a
+/b/c//aa.a./..a /b/c/aa.a./..a
+/b/c//aa.a./... /b/c/aa.a./...
+/b/c//aa.a./../ /b/c
+/b/c//aa.a././a /b/c/aa.a./a
+/b/c//aa.a././. /b/c/aa.a.
+/b/c//aa.a./.// /b/c/aa.a.
+/b/c//aa.a.//aa /b/c/aa.a./aa
+/b/c//aa.a.//a. /b/c/aa.a./a.
+/b/c//aa.a.//a/ /b/c/aa.a./a
+/b/c//aa.a.//.a /b/c/aa.a./.a
+/b/c//aa.a.//.. /b/c
+/b/c//aa.a.//./ /b/c/aa.a.
+/b/c//aa.a.///a /b/c/aa.a./a
+/b/c//aa.a.///. /b/c/aa.a.
+/b/c//aa.a.//// /b/c/aa.a.
+/b/c//aa.a/aaaa /b/c/aa.a/aaaa
+/b/c//aa.a/aaa. /b/c/aa.a/aaa.
+/b/c//aa.a/aaa/ /b/c/aa.a/aaa
+/b/c//aa.a/aa.a /b/c/aa.a/aa.a
+/b/c//aa.a/aa.. /b/c/aa.a/aa..
+/b/c//aa.a/aa./ /b/c/aa.a/aa.
+/b/c//aa.a/aa/a /b/c/aa.a/aa/a
+/b/c//aa.a/aa/. /b/c/aa.a/aa
+/b/c//aa.a/aa// /b/c/aa.a/aa
+/b/c//aa.a/a.aa /b/c/aa.a/a.aa
+/b/c//aa.a/a.a. /b/c/aa.a/a.a.
+/b/c//aa.a/a.a/ /b/c/aa.a/a.a
+/b/c//aa.a/a..a /b/c/aa.a/a..a
+/b/c//aa.a/a... /b/c/aa.a/a...
+/b/c//aa.a/a../ /b/c/aa.a/a..
+/b/c//aa.a/a./a /b/c/aa.a/a./a
+/b/c//aa.a/a./. /b/c/aa.a/a.
+/b/c//aa.a/a.// /b/c/aa.a/a.
+/b/c//aa.a/a/aa /b/c/aa.a/a/aa
+/b/c//aa.a/a/a. /b/c/aa.a/a/a.
+/b/c//aa.a/a/a/ /b/c/aa.a/a/a
+/b/c//aa.a/a/.a /b/c/aa.a/a/.a
+/b/c//aa.a/a/.. /b/c/aa.a
+/b/c//aa.a/a/./ /b/c/aa.a/a
+/b/c//aa.a/a//a /b/c/aa.a/a/a
+/b/c//aa.a/a//. /b/c/aa.a/a
+/b/c//aa.a/a/// /b/c/aa.a/a
+/b/c//aa.a/.aaa /b/c/aa.a/.aaa
+/b/c//aa.a/.aa. /b/c/aa.a/.aa.
+/b/c//aa.a/.aa/ /b/c/aa.a/.aa
+/b/c//aa.a/.a.a /b/c/aa.a/.a.a
+/b/c//aa.a/.a.. /b/c/aa.a/.a..
+/b/c//aa.a/.a./ /b/c/aa.a/.a.
+/b/c//aa.a/.a/a /b/c/aa.a/.a/a
+/b/c//aa.a/.a/. /b/c/aa.a/.a
+/b/c//aa.a/.a// /b/c/aa.a/.a
+/b/c//aa.a/..aa /b/c/aa.a/..aa
+/b/c//aa.a/..a. /b/c/aa.a/..a.
+/b/c//aa.a/..a/ /b/c/aa.a/..a
+/b/c//aa.a/...a /b/c/aa.a/...a
+/b/c//aa.a/.... /b/c/aa.a/....
+/b/c//aa.a/.../ /b/c/aa.a/...
+/b/c//aa.a/../a /b/c/a
+/b/c//aa.a/../. /b/c
+/b/c//aa.a/..// /b/c
+/b/c//aa.a/./aa /b/c/aa.a/aa
+/b/c//aa.a/./a. /b/c/aa.a/a.
+/b/c//aa.a/./a/ /b/c/aa.a/a
+/b/c//aa.a/./.a /b/c/aa.a/.a
+/b/c//aa.a/./.. /b/c
+/b/c//aa.a/././ /b/c/aa.a
+/b/c//aa.a/.//a /b/c/aa.a/a
+/b/c//aa.a/.//. /b/c/aa.a
+/b/c//aa.a/./// /b/c/aa.a
+/b/c//aa.a//aaa /b/c/aa.a/aaa
+/b/c//aa.a//aa. /b/c/aa.a/aa.
+/b/c//aa.a//aa/ /b/c/aa.a/aa
+/b/c//aa.a//a.a /b/c/aa.a/a.a
+/b/c//aa.a//a.. /b/c/aa.a/a..
+/b/c//aa.a//a./ /b/c/aa.a/a.
+/b/c//aa.a//a/a /b/c/aa.a/a/a
+/b/c//aa.a//a/. /b/c/aa.a/a
+/b/c//aa.a//a// /b/c/aa.a/a
+/b/c//aa.a//.aa /b/c/aa.a/.aa
+/b/c//aa.a//.a. /b/c/aa.a/.a.
+/b/c//aa.a//.a/ /b/c/aa.a/.a
+/b/c//aa.a//..a /b/c/aa.a/..a
+/b/c//aa.a//... /b/c/aa.a/...
+/b/c//aa.a//../ /b/c
+/b/c//aa.a//./a /b/c/aa.a/a
+/b/c//aa.a//./. /b/c/aa.a
+/b/c//aa.a//.// /b/c/aa.a
+/b/c//aa.a///aa /b/c/aa.a/aa
+/b/c//aa.a///a. /b/c/aa.a/a.
+/b/c//aa.a///a/ /b/c/aa.a/a
+/b/c//aa.a///.a /b/c/aa.a/.a
+/b/c//aa.a///.. /b/c
+/b/c//aa.a///./ /b/c/aa.a
+/b/c//aa.a////a /b/c/aa.a/a
+/b/c//aa.a////. /b/c/aa.a
+/b/c//aa.a///// /b/c/aa.a
+/b/c//aa..aaaaa /b/c/aa..aaaaa
+/b/c//aa..aaaa. /b/c/aa..aaaa.
+/b/c//aa..aaaa/ /b/c/aa..aaaa
+/b/c//aa..aaa.a /b/c/aa..aaa.a
+/b/c//aa..aaa.. /b/c/aa..aaa..
+/b/c//aa..aaa./ /b/c/aa..aaa.
+/b/c//aa..aaa/a /b/c/aa..aaa/a
+/b/c//aa..aaa/. /b/c/aa..aaa
+/b/c//aa..aaa// /b/c/aa..aaa
+/b/c//aa..aa.aa /b/c/aa..aa.aa
+/b/c//aa..aa.a. /b/c/aa..aa.a.
+/b/c//aa..aa.a/ /b/c/aa..aa.a
+/b/c//aa..aa..a /b/c/aa..aa..a
+/b/c//aa..aa... /b/c/aa..aa...
+/b/c//aa..aa../ /b/c/aa..aa..
+/b/c//aa..aa./a /b/c/aa..aa./a
+/b/c//aa..aa./. /b/c/aa..aa.
+/b/c//aa..aa.// /b/c/aa..aa.
+/b/c//aa..aa/aa /b/c/aa..aa/aa
+/b/c//aa..aa/a. /b/c/aa..aa/a.
+/b/c//aa..aa/a/ /b/c/aa..aa/a
+/b/c//aa..aa/.a /b/c/aa..aa/.a
+/b/c//aa..aa/.. /b/c
+/b/c//aa..aa/./ /b/c/aa..aa
+/b/c//aa..aa//a /b/c/aa..aa/a
+/b/c//aa..aa//. /b/c/aa..aa
+/b/c//aa..aa/// /b/c/aa..aa
+/b/c//aa..a.aaa /b/c/aa..a.aaa
+/b/c//aa..a.aa. /b/c/aa..a.aa.
+/b/c//aa..a.aa/ /b/c/aa..a.aa
+/b/c//aa..a.a.a /b/c/aa..a.a.a
+/b/c//aa..a.a.. /b/c/aa..a.a..
+/b/c//aa..a.a./ /b/c/aa..a.a.
+/b/c//aa..a.a/a /b/c/aa..a.a/a
+/b/c//aa..a.a/. /b/c/aa..a.a
+/b/c//aa..a.a// /b/c/aa..a.a
+/b/c//aa..a..aa /b/c/aa..a..aa
+/b/c//aa..a..a. /b/c/aa..a..a.
+/b/c//aa..a..a/ /b/c/aa..a..a
+/b/c//aa..a...a /b/c/aa..a...a
+/b/c//aa..a.... /b/c/aa..a....
+/b/c//aa..a.../ /b/c/aa..a...
+/b/c//aa..a../a /b/c/aa..a../a
+/b/c//aa..a../. /b/c/aa..a..
+/b/c//aa..a..// /b/c/aa..a..
+/b/c//aa..a./aa /b/c/aa..a./aa
+/b/c//aa..a./a. /b/c/aa..a./a.
+/b/c//aa..a./a/ /b/c/aa..a./a
+/b/c//aa..a./.a /b/c/aa..a./.a
+/b/c//aa..a./.. /b/c
+/b/c//aa..a././ /b/c/aa..a.
+/b/c//aa..a.//a /b/c/aa..a./a
+/b/c//aa..a.//. /b/c/aa..a.
+/b/c//aa..a./// /b/c/aa..a.
+/b/c//aa..a/aaa /b/c/aa..a/aaa
+/b/c//aa..a/aa. /b/c/aa..a/aa.
+/b/c//aa..a/aa/ /b/c/aa..a/aa
+/b/c//aa..a/a.a /b/c/aa..a/a.a
+/b/c//aa..a/a.. /b/c/aa..a/a..
+/b/c//aa..a/a./ /b/c/aa..a/a.
+/b/c//aa..a/a/a /b/c/aa..a/a/a
+/b/c//aa..a/a/. /b/c/aa..a/a
+/b/c//aa..a/a// /b/c/aa..a/a
+/b/c//aa..a/.aa /b/c/aa..a/.aa
+/b/c//aa..a/.a. /b/c/aa..a/.a.
+/b/c//aa..a/.a/ /b/c/aa..a/.a
+/b/c//aa..a/..a /b/c/aa..a/..a
+/b/c//aa..a/... /b/c/aa..a/...
+/b/c//aa..a/../ /b/c
+/b/c//aa..a/./a /b/c/aa..a/a
+/b/c//aa..a/./. /b/c/aa..a
+/b/c//aa..a/.// /b/c/aa..a
+/b/c//aa..a//aa /b/c/aa..a/aa
+/b/c//aa..a//a. /b/c/aa..a/a.
+/b/c//aa..a//a/ /b/c/aa..a/a
+/b/c//aa..a//.a /b/c/aa..a/.a
+/b/c//aa..a//.. /b/c
+/b/c//aa..a//./ /b/c/aa..a
+/b/c//aa..a///a /b/c/aa..a/a
+/b/c//aa..a///. /b/c/aa..a
+/b/c//aa..a//// /b/c/aa..a
+/b/c//aa...aaaa /b/c/aa...aaaa
+/b/c//aa...aaa. /b/c/aa...aaa.
+/b/c//aa...aaa/ /b/c/aa...aaa
+/b/c//aa...aa.a /b/c/aa...aa.a
+/b/c//aa...aa.. /b/c/aa...aa..
+/b/c//aa...aa./ /b/c/aa...aa.
+/b/c//aa...aa/a /b/c/aa...aa/a
+/b/c//aa...aa/. /b/c/aa...aa
+/b/c//aa...aa// /b/c/aa...aa
+/b/c//aa...a.aa /b/c/aa...a.aa
+/b/c//aa...a.a. /b/c/aa...a.a.
+/b/c//aa...a.a/ /b/c/aa...a.a
+/b/c//aa...a..a /b/c/aa...a..a
+/b/c//aa...a... /b/c/aa...a...
+/b/c//aa...a../ /b/c/aa...a..
+/b/c//aa...a./a /b/c/aa...a./a
+/b/c//aa...a./. /b/c/aa...a.
+/b/c//aa...a.// /b/c/aa...a.
+/b/c//aa...a/aa /b/c/aa...a/aa
+/b/c//aa...a/a. /b/c/aa...a/a.
+/b/c//aa...a/a/ /b/c/aa...a/a
+/b/c//aa...a/.a /b/c/aa...a/.a
+/b/c//aa...a/.. /b/c
+/b/c//aa...a/./ /b/c/aa...a
+/b/c//aa...a//a /b/c/aa...a/a
+/b/c//aa...a//. /b/c/aa...a
+/b/c//aa...a/// /b/c/aa...a
+/b/c//aa....aaa /b/c/aa....aaa
+/b/c//aa....aa. /b/c/aa....aa.
+/b/c//aa....aa/ /b/c/aa....aa
+/b/c//aa....a.a /b/c/aa....a.a
+/b/c//aa....a.. /b/c/aa....a..
+/b/c//aa....a./ /b/c/aa....a.
+/b/c//aa....a/a /b/c/aa....a/a
+/b/c//aa....a/. /b/c/aa....a
+/b/c//aa....a// /b/c/aa....a
+/b/c//aa.....aa /b/c/aa.....aa
+/b/c//aa.....a. /b/c/aa.....a.
+/b/c//aa.....a/ /b/c/aa.....a
+/b/c//aa......a /b/c/aa......a
+/b/c//aa....... /b/c/aa.......
+/b/c//aa....../ /b/c/aa......
+/b/c//aa...../a /b/c/aa...../a
+/b/c//aa...../. /b/c/aa.....
+/b/c//aa.....// /b/c/aa.....
+/b/c//aa..../aa /b/c/aa..../aa
+/b/c//aa..../a. /b/c/aa..../a.
+/b/c//aa..../a/ /b/c/aa..../a
+/b/c//aa..../.a /b/c/aa..../.a
+/b/c//aa..../.. /b/c
+/b/c//aa...././ /b/c/aa....
+/b/c//aa....//a /b/c/aa..../a
+/b/c//aa....//. /b/c/aa....
+/b/c//aa..../// /b/c/aa....
+/b/c//aa.../aaa /b/c/aa.../aaa
+/b/c//aa.../aa. /b/c/aa.../aa.
+/b/c//aa.../aa/ /b/c/aa.../aa
+/b/c//aa.../a.a /b/c/aa.../a.a
+/b/c//aa.../a.. /b/c/aa.../a..
+/b/c//aa.../a./ /b/c/aa.../a.
+/b/c//aa.../a/a /b/c/aa.../a/a
+/b/c//aa.../a/. /b/c/aa.../a
+/b/c//aa.../a// /b/c/aa.../a
+/b/c//aa.../.aa /b/c/aa.../.aa
+/b/c//aa.../.a. /b/c/aa.../.a.
+/b/c//aa.../.a/ /b/c/aa.../.a
+/b/c//aa.../..a /b/c/aa.../..a
+/b/c//aa.../... /b/c/aa.../...
+/b/c//aa.../../ /b/c
+/b/c//aa..././a /b/c/aa.../a
+/b/c//aa..././. /b/c/aa...
+/b/c//aa.../.// /b/c/aa...
+/b/c//aa...//aa /b/c/aa.../aa
+/b/c//aa...//a. /b/c/aa.../a.
+/b/c//aa...//a/ /b/c/aa.../a
+/b/c//aa...//.a /b/c/aa.../.a
+/b/c//aa...//.. /b/c
+/b/c//aa...//./ /b/c/aa...
+/b/c//aa...///a /b/c/aa.../a
+/b/c//aa...///. /b/c/aa...
+/b/c//aa...//// /b/c/aa...
+/b/c//aa../aaaa /b/c/aa../aaaa
+/b/c//aa../aaa. /b/c/aa../aaa.
+/b/c//aa../aaa/ /b/c/aa../aaa
+/b/c//aa../aa.a /b/c/aa../aa.a
+/b/c//aa../aa.. /b/c/aa../aa..
+/b/c//aa../aa./ /b/c/aa../aa.
+/b/c//aa../aa/a /b/c/aa../aa/a
+/b/c//aa../aa/. /b/c/aa../aa
+/b/c//aa../aa// /b/c/aa../aa
+/b/c//aa../a.aa /b/c/aa../a.aa
+/b/c//aa../a.a. /b/c/aa../a.a.
+/b/c//aa../a.a/ /b/c/aa../a.a
+/b/c//aa../a..a /b/c/aa../a..a
+/b/c//aa../a... /b/c/aa../a...
+/b/c//aa../a../ /b/c/aa../a..
+/b/c//aa../a./a /b/c/aa../a./a
+/b/c//aa../a./. /b/c/aa../a.
+/b/c//aa../a.// /b/c/aa../a.
+/b/c//aa../a/aa /b/c/aa../a/aa
+/b/c//aa../a/a. /b/c/aa../a/a.
+/b/c//aa../a/a/ /b/c/aa../a/a
+/b/c//aa../a/.a /b/c/aa../a/.a
+/b/c//aa../a/.. /b/c/aa..
+/b/c//aa../a/./ /b/c/aa../a
+/b/c//aa../a//a /b/c/aa../a/a
+/b/c//aa../a//. /b/c/aa../a
+/b/c//aa../a/// /b/c/aa../a
+/b/c//aa../.aaa /b/c/aa../.aaa
+/b/c//aa../.aa. /b/c/aa../.aa.
+/b/c//aa../.aa/ /b/c/aa../.aa
+/b/c//aa../.a.a /b/c/aa../.a.a
+/b/c//aa../.a.. /b/c/aa../.a..
+/b/c//aa../.a./ /b/c/aa../.a.
+/b/c//aa../.a/a /b/c/aa../.a/a
+/b/c//aa../.a/. /b/c/aa../.a
+/b/c//aa../.a// /b/c/aa../.a
+/b/c//aa../..aa /b/c/aa../..aa
+/b/c//aa../..a. /b/c/aa../..a.
+/b/c//aa../..a/ /b/c/aa../..a
+/b/c//aa../...a /b/c/aa../...a
+/b/c//aa../.... /b/c/aa../....
+/b/c//aa../.../ /b/c/aa../...
+/b/c//aa../../a /b/c/a
+/b/c//aa../../. /b/c
+/b/c//aa../..// /b/c
+/b/c//aa.././aa /b/c/aa../aa
+/b/c//aa.././a. /b/c/aa../a.
+/b/c//aa.././a/ /b/c/aa../a
+/b/c//aa.././.a /b/c/aa../.a
+/b/c//aa.././.. /b/c
+/b/c//aa../././ /b/c/aa..
+/b/c//aa.././/a /b/c/aa../a
+/b/c//aa.././/. /b/c/aa..
+/b/c//aa.././// /b/c/aa..
+/b/c//aa..//aaa /b/c/aa../aaa
+/b/c//aa..//aa. /b/c/aa../aa.
+/b/c//aa..//aa/ /b/c/aa../aa
+/b/c//aa..//a.a /b/c/aa../a.a
+/b/c//aa..//a.. /b/c/aa../a..
+/b/c//aa..//a./ /b/c/aa../a.
+/b/c//aa..//a/a /b/c/aa../a/a
+/b/c//aa..//a/. /b/c/aa../a
+/b/c//aa..//a// /b/c/aa../a
+/b/c//aa..//.aa /b/c/aa../.aa
+/b/c//aa..//.a. /b/c/aa../.a.
+/b/c//aa..//.a/ /b/c/aa../.a
+/b/c//aa..//..a /b/c/aa../..a
+/b/c//aa..//... /b/c/aa../...
+/b/c//aa..//../ /b/c
+/b/c//aa..//./a /b/c/aa../a
+/b/c//aa..//./. /b/c/aa..
+/b/c//aa..//.// /b/c/aa..
+/b/c//aa..///aa /b/c/aa../aa
+/b/c//aa..///a. /b/c/aa../a.
+/b/c//aa..///a/ /b/c/aa../a
+/b/c//aa..///.a /b/c/aa../.a
+/b/c//aa..///.. /b/c
+/b/c//aa..///./ /b/c/aa..
+/b/c//aa..////a /b/c/aa../a
+/b/c//aa..////. /b/c/aa..
+/b/c//aa..///// /b/c/aa..
+/b/c//aa./aaaaa /b/c/aa./aaaaa
+/b/c//aa./aaaa. /b/c/aa./aaaa.
+/b/c//aa./aaaa/ /b/c/aa./aaaa
+/b/c//aa./aaa.a /b/c/aa./aaa.a
+/b/c//aa./aaa.. /b/c/aa./aaa..
+/b/c//aa./aaa./ /b/c/aa./aaa.
+/b/c//aa./aaa/a /b/c/aa./aaa/a
+/b/c//aa./aaa/. /b/c/aa./aaa
+/b/c//aa./aaa// /b/c/aa./aaa
+/b/c//aa./aa.aa /b/c/aa./aa.aa
+/b/c//aa./aa.a. /b/c/aa./aa.a.
+/b/c//aa./aa.a/ /b/c/aa./aa.a
+/b/c//aa./aa..a /b/c/aa./aa..a
+/b/c//aa./aa... /b/c/aa./aa...
+/b/c//aa./aa../ /b/c/aa./aa..
+/b/c//aa./aa./a /b/c/aa./aa./a
+/b/c//aa./aa./. /b/c/aa./aa.
+/b/c//aa./aa.// /b/c/aa./aa.
+/b/c//aa./aa/aa /b/c/aa./aa/aa
+/b/c//aa./aa/a. /b/c/aa./aa/a.
+/b/c//aa./aa/a/ /b/c/aa./aa/a
+/b/c//aa./aa/.a /b/c/aa./aa/.a
+/b/c//aa./aa/.. /b/c/aa.
+/b/c//aa./aa/./ /b/c/aa./aa
+/b/c//aa./aa//a /b/c/aa./aa/a
+/b/c//aa./aa//. /b/c/aa./aa
+/b/c//aa./aa/// /b/c/aa./aa
+/b/c//aa./a.aaa /b/c/aa./a.aaa
+/b/c//aa./a.aa. /b/c/aa./a.aa.
+/b/c//aa./a.aa/ /b/c/aa./a.aa
+/b/c//aa./a.a.a /b/c/aa./a.a.a
+/b/c//aa./a.a.. /b/c/aa./a.a..
+/b/c//aa./a.a./ /b/c/aa./a.a.
+/b/c//aa./a.a/a /b/c/aa./a.a/a
+/b/c//aa./a.a/. /b/c/aa./a.a
+/b/c//aa./a.a// /b/c/aa./a.a
+/b/c//aa./a..aa /b/c/aa./a..aa
+/b/c//aa./a..a. /b/c/aa./a..a.
+/b/c//aa./a..a/ /b/c/aa./a..a
+/b/c//aa./a...a /b/c/aa./a...a
+/b/c//aa./a.... /b/c/aa./a....
+/b/c//aa./a.../ /b/c/aa./a...
+/b/c//aa./a../a /b/c/aa./a../a
+/b/c//aa./a../. /b/c/aa./a..
+/b/c//aa./a..// /b/c/aa./a..
+/b/c//aa./a./aa /b/c/aa./a./aa
+/b/c//aa./a./a. /b/c/aa./a./a.
+/b/c//aa./a./a/ /b/c/aa./a./a
+/b/c//aa./a./.a /b/c/aa./a./.a
+/b/c//aa./a./.. /b/c/aa.
+/b/c//aa./a././ /b/c/aa./a.
+/b/c//aa./a.//a /b/c/aa./a./a
+/b/c//aa./a.//. /b/c/aa./a.
+/b/c//aa./a./// /b/c/aa./a.
+/b/c//aa./a/aaa /b/c/aa./a/aaa
+/b/c//aa./a/aa. /b/c/aa./a/aa.
+/b/c//aa./a/aa/ /b/c/aa./a/aa
+/b/c//aa./a/a.a /b/c/aa./a/a.a
+/b/c//aa./a/a.. /b/c/aa./a/a..
+/b/c//aa./a/a./ /b/c/aa./a/a.
+/b/c//aa./a/a/a /b/c/aa./a/a/a
+/b/c//aa./a/a/. /b/c/aa./a/a
+/b/c//aa./a/a// /b/c/aa./a/a
+/b/c//aa./a/.aa /b/c/aa./a/.aa
+/b/c//aa./a/.a. /b/c/aa./a/.a.
+/b/c//aa./a/.a/ /b/c/aa./a/.a
+/b/c//aa./a/..a /b/c/aa./a/..a
+/b/c//aa./a/... /b/c/aa./a/...
+/b/c//aa./a/../ /b/c/aa.
+/b/c//aa./a/./a /b/c/aa./a/a
+/b/c//aa./a/./. /b/c/aa./a
+/b/c//aa./a/.// /b/c/aa./a
+/b/c//aa./a//aa /b/c/aa./a/aa
+/b/c//aa./a//a. /b/c/aa./a/a.
+/b/c//aa./a//a/ /b/c/aa./a/a
+/b/c//aa./a//.a /b/c/aa./a/.a
+/b/c//aa./a//.. /b/c/aa.
+/b/c//aa./a//./ /b/c/aa./a
+/b/c//aa./a///a /b/c/aa./a/a
+/b/c//aa./a///. /b/c/aa./a
+/b/c//aa./a//// /b/c/aa./a
+/b/c//aa./.aaaa /b/c/aa./.aaaa
+/b/c//aa./.aaa. /b/c/aa./.aaa.
+/b/c//aa./.aaa/ /b/c/aa./.aaa
+/b/c//aa./.aa.a /b/c/aa./.aa.a
+/b/c//aa./.aa.. /b/c/aa./.aa..
+/b/c//aa./.aa./ /b/c/aa./.aa.
+/b/c//aa./.aa/a /b/c/aa./.aa/a
+/b/c//aa./.aa/. /b/c/aa./.aa
+/b/c//aa./.aa// /b/c/aa./.aa
+/b/c//aa./.a.aa /b/c/aa./.a.aa
+/b/c//aa./.a.a. /b/c/aa./.a.a.
+/b/c//aa./.a.a/ /b/c/aa./.a.a
+/b/c//aa./.a..a /b/c/aa./.a..a
+/b/c//aa./.a... /b/c/aa./.a...
+/b/c//aa./.a../ /b/c/aa./.a..
+/b/c//aa./.a./a /b/c/aa./.a./a
+/b/c//aa./.a./. /b/c/aa./.a.
+/b/c//aa./.a.// /b/c/aa./.a.
+/b/c//aa./.a/aa /b/c/aa./.a/aa
+/b/c//aa./.a/a. /b/c/aa./.a/a.
+/b/c//aa./.a/a/ /b/c/aa./.a/a
+/b/c//aa./.a/.a /b/c/aa./.a/.a
+/b/c//aa./.a/.. /b/c/aa.
+/b/c//aa./.a/./ /b/c/aa./.a
+/b/c//aa./.a//a /b/c/aa./.a/a
+/b/c//aa./.a//. /b/c/aa./.a
+/b/c//aa./.a/// /b/c/aa./.a
+/b/c//aa./..aaa /b/c/aa./..aaa
+/b/c//aa./..aa. /b/c/aa./..aa.
+/b/c//aa./..aa/ /b/c/aa./..aa
+/b/c//aa./..a.a /b/c/aa./..a.a
+/b/c//aa./..a.. /b/c/aa./..a..
+/b/c//aa./..a./ /b/c/aa./..a.
+/b/c//aa./..a/a /b/c/aa./..a/a
+/b/c//aa./..a/. /b/c/aa./..a
+/b/c//aa./..a// /b/c/aa./..a
+/b/c//aa./...aa /b/c/aa./...aa
+/b/c//aa./...a. /b/c/aa./...a.
+/b/c//aa./...a/ /b/c/aa./...a
+/b/c//aa./....a /b/c/aa./....a
+/b/c//aa./..... /b/c/aa./.....
+/b/c//aa./..../ /b/c/aa./....
+/b/c//aa./.../a /b/c/aa./.../a
+/b/c//aa./.../. /b/c/aa./...
+/b/c//aa./...// /b/c/aa./...
+/b/c//aa./../aa /b/c/aa
+/b/c//aa./../a. /b/c/a.
+/b/c//aa./../a/ /b/c/a
+/b/c//aa./../.a /b/c/.a
+/b/c//aa./../.. /b
+/b/c//aa./.././ /b/c
+/b/c//aa./..//a /b/c/a
+/b/c//aa./..//. /b/c
+/b/c//aa./../// /b/c
+/b/c//aa././aaa /b/c/aa./aaa
+/b/c//aa././aa. /b/c/aa./aa.
+/b/c//aa././aa/ /b/c/aa./aa
+/b/c//aa././a.a /b/c/aa./a.a
+/b/c//aa././a.. /b/c/aa./a..
+/b/c//aa././a./ /b/c/aa./a.
+/b/c//aa././a/a /b/c/aa./a/a
+/b/c//aa././a/. /b/c/aa./a
+/b/c//aa././a// /b/c/aa./a
+/b/c//aa././.aa /b/c/aa./.aa
+/b/c//aa././.a. /b/c/aa./.a.
+/b/c//aa././.a/ /b/c/aa./.a
+/b/c//aa././..a /b/c/aa./..a
+/b/c//aa././... /b/c/aa./...
+/b/c//aa././../ /b/c
+/b/c//aa./././a /b/c/aa./a
+/b/c//aa./././. /b/c/aa.
+/b/c//aa././.// /b/c/aa.
+/b/c//aa././/aa /b/c/aa./aa
+/b/c//aa././/a. /b/c/aa./a.
+/b/c//aa././/a/ /b/c/aa./a
+/b/c//aa././/.a /b/c/aa./.a
+/b/c//aa././/.. /b/c
+/b/c//aa././/./ /b/c/aa.
+/b/c//aa././//a /b/c/aa./a
+/b/c//aa././//. /b/c/aa.
+/b/c//aa././/// /b/c/aa.
+/b/c//aa.//aaaa /b/c/aa./aaaa
+/b/c//aa.//aaa. /b/c/aa./aaa.
+/b/c//aa.//aaa/ /b/c/aa./aaa
+/b/c//aa.//aa.a /b/c/aa./aa.a
+/b/c//aa.//aa.. /b/c/aa./aa..
+/b/c//aa.//aa./ /b/c/aa./aa.
+/b/c//aa.//aa/a /b/c/aa./aa/a
+/b/c//aa.//aa/. /b/c/aa./aa
+/b/c//aa.//aa// /b/c/aa./aa
+/b/c//aa.//a.aa /b/c/aa./a.aa
+/b/c//aa.//a.a. /b/c/aa./a.a.
+/b/c//aa.//a.a/ /b/c/aa./a.a
+/b/c//aa.//a..a /b/c/aa./a..a
+/b/c//aa.//a... /b/c/aa./a...
+/b/c//aa.//a../ /b/c/aa./a..
+/b/c//aa.//a./a /b/c/aa./a./a
+/b/c//aa.//a./. /b/c/aa./a.
+/b/c//aa.//a.// /b/c/aa./a.
+/b/c//aa.//a/aa /b/c/aa./a/aa
+/b/c//aa.//a/a. /b/c/aa./a/a.
+/b/c//aa.//a/a/ /b/c/aa./a/a
+/b/c//aa.//a/.a /b/c/aa./a/.a
+/b/c//aa.//a/.. /b/c/aa.
+/b/c//aa.//a/./ /b/c/aa./a
+/b/c//aa.//a//a /b/c/aa./a/a
+/b/c//aa.//a//. /b/c/aa./a
+/b/c//aa.//a/// /b/c/aa./a
+/b/c//aa.//.aaa /b/c/aa./.aaa
+/b/c//aa.//.aa. /b/c/aa./.aa.
+/b/c//aa.//.aa/ /b/c/aa./.aa
+/b/c//aa.//.a.a /b/c/aa./.a.a
+/b/c//aa.//.a.. /b/c/aa./.a..
+/b/c//aa.//.a./ /b/c/aa./.a.
+/b/c//aa.//.a/a /b/c/aa./.a/a
+/b/c//aa.//.a/. /b/c/aa./.a
+/b/c//aa.//.a// /b/c/aa./.a
+/b/c//aa.//..aa /b/c/aa./..aa
+/b/c//aa.//..a. /b/c/aa./..a.
+/b/c//aa.//..a/ /b/c/aa./..a
+/b/c//aa.//...a /b/c/aa./...a
+/b/c//aa.//.... /b/c/aa./....
+/b/c//aa.//.../ /b/c/aa./...
+/b/c//aa.//../a /b/c/a
+/b/c//aa.//../. /b/c
+/b/c//aa.//..// /b/c
+/b/c//aa.//./aa /b/c/aa./aa
+/b/c//aa.//./a. /b/c/aa./a.
+/b/c//aa.//./a/ /b/c/aa./a
+/b/c//aa.//./.a /b/c/aa./.a
+/b/c//aa.//./.. /b/c
+/b/c//aa.//././ /b/c/aa.
+/b/c//aa.//.//a /b/c/aa./a
+/b/c//aa.//.//. /b/c/aa.
+/b/c//aa.//./// /b/c/aa.
+/b/c//aa.///aaa /b/c/aa./aaa
+/b/c//aa.///aa. /b/c/aa./aa.
+/b/c//aa.///aa/ /b/c/aa./aa
+/b/c//aa.///a.a /b/c/aa./a.a
+/b/c//aa.///a.. /b/c/aa./a..
+/b/c//aa.///a./ /b/c/aa./a.
+/b/c//aa.///a/a /b/c/aa./a/a
+/b/c//aa.///a/. /b/c/aa./a
+/b/c//aa.///a// /b/c/aa./a
+/b/c//aa.///.aa /b/c/aa./.aa
+/b/c//aa.///.a. /b/c/aa./.a.
+/b/c//aa.///.a/ /b/c/aa./.a
+/b/c//aa.///..a /b/c/aa./..a
+/b/c//aa.///... /b/c/aa./...
+/b/c//aa.///../ /b/c
+/b/c//aa.///./a /b/c/aa./a
+/b/c//aa.///./. /b/c/aa.
+/b/c//aa.///.// /b/c/aa.
+/b/c//aa.////aa /b/c/aa./aa
+/b/c//aa.////a. /b/c/aa./a.
+/b/c//aa.////a/ /b/c/aa./a
+/b/c//aa.////.a /b/c/aa./.a
+/b/c//aa.////.. /b/c
+/b/c//aa.////./ /b/c/aa.
+/b/c//aa./////a /b/c/aa./a
+/b/c//aa./////. /b/c/aa.
+/b/c//aa.////// /b/c/aa.
+/b/c//aa/aaaaaa /b/c/aa/aaaaaa
+/b/c//aa/aaaaa. /b/c/aa/aaaaa.
+/b/c//aa/aaaaa/ /b/c/aa/aaaaa
+/b/c//aa/aaaa.a /b/c/aa/aaaa.a
+/b/c//aa/aaaa.. /b/c/aa/aaaa..
+/b/c//aa/aaaa./ /b/c/aa/aaaa.
+/b/c//aa/aaaa/a /b/c/aa/aaaa/a
+/b/c//aa/aaaa/. /b/c/aa/aaaa
+/b/c//aa/aaaa// /b/c/aa/aaaa
+/b/c//aa/aaa.aa /b/c/aa/aaa.aa
+/b/c//aa/aaa.a. /b/c/aa/aaa.a.
+/b/c//aa/aaa.a/ /b/c/aa/aaa.a
+/b/c//aa/aaa..a /b/c/aa/aaa..a
+/b/c//aa/aaa... /b/c/aa/aaa...
+/b/c//aa/aaa../ /b/c/aa/aaa..
+/b/c//aa/aaa./a /b/c/aa/aaa./a
+/b/c//aa/aaa./. /b/c/aa/aaa.
+/b/c//aa/aaa.// /b/c/aa/aaa.
+/b/c//aa/aaa/aa /b/c/aa/aaa/aa
+/b/c//aa/aaa/a. /b/c/aa/aaa/a.
+/b/c//aa/aaa/a/ /b/c/aa/aaa/a
+/b/c//aa/aaa/.a /b/c/aa/aaa/.a
+/b/c//aa/aaa/.. /b/c/aa
+/b/c//aa/aaa/./ /b/c/aa/aaa
+/b/c//aa/aaa//a /b/c/aa/aaa/a
+/b/c//aa/aaa//. /b/c/aa/aaa
+/b/c//aa/aaa/// /b/c/aa/aaa
+/b/c//aa/aa.aaa /b/c/aa/aa.aaa
+/b/c//aa/aa.aa. /b/c/aa/aa.aa.
+/b/c//aa/aa.aa/ /b/c/aa/aa.aa
+/b/c//aa/aa.a.a /b/c/aa/aa.a.a
+/b/c//aa/aa.a.. /b/c/aa/aa.a..
+/b/c//aa/aa.a./ /b/c/aa/aa.a.
+/b/c//aa/aa.a/a /b/c/aa/aa.a/a
+/b/c//aa/aa.a/. /b/c/aa/aa.a
+/b/c//aa/aa.a// /b/c/aa/aa.a
+/b/c//aa/aa..aa /b/c/aa/aa..aa
+/b/c//aa/aa..a. /b/c/aa/aa..a.
+/b/c//aa/aa..a/ /b/c/aa/aa..a
+/b/c//aa/aa...a /b/c/aa/aa...a
+/b/c//aa/aa.... /b/c/aa/aa....
+/b/c//aa/aa.../ /b/c/aa/aa...
+/b/c//aa/aa../a /b/c/aa/aa../a
+/b/c//aa/aa../. /b/c/aa/aa..
+/b/c//aa/aa..// /b/c/aa/aa..
+/b/c//aa/aa./aa /b/c/aa/aa./aa
+/b/c//aa/aa./a. /b/c/aa/aa./a.
+/b/c//aa/aa./a/ /b/c/aa/aa./a
+/b/c//aa/aa./.a /b/c/aa/aa./.a
+/b/c//aa/aa./.. /b/c/aa
+/b/c//aa/aa././ /b/c/aa/aa.
+/b/c//aa/aa.//a /b/c/aa/aa./a
+/b/c//aa/aa.//. /b/c/aa/aa.
+/b/c//aa/aa./// /b/c/aa/aa.
+/b/c//aa/aa/aaa /b/c/aa/aa/aaa
+/b/c//aa/aa/aa. /b/c/aa/aa/aa.
+/b/c//aa/aa/aa/ /b/c/aa/aa/aa
+/b/c//aa/aa/a.a /b/c/aa/aa/a.a
+/b/c//aa/aa/a.. /b/c/aa/aa/a..
+/b/c//aa/aa/a./ /b/c/aa/aa/a.
+/b/c//aa/aa/a/a /b/c/aa/aa/a/a
+/b/c//aa/aa/a/. /b/c/aa/aa/a
+/b/c//aa/aa/a// /b/c/aa/aa/a
+/b/c//aa/aa/.aa /b/c/aa/aa/.aa
+/b/c//aa/aa/.a. /b/c/aa/aa/.a.
+/b/c//aa/aa/.a/ /b/c/aa/aa/.a
+/b/c//aa/aa/..a /b/c/aa/aa/..a
+/b/c//aa/aa/... /b/c/aa/aa/...
+/b/c//aa/aa/../ /b/c/aa
+/b/c//aa/aa/./a /b/c/aa/aa/a
+/b/c//aa/aa/./. /b/c/aa/aa
+/b/c//aa/aa/.// /b/c/aa/aa
+/b/c//aa/aa//aa /b/c/aa/aa/aa
+/b/c//aa/aa//a. /b/c/aa/aa/a.
+/b/c//aa/aa//a/ /b/c/aa/aa/a
+/b/c//aa/aa//.a /b/c/aa/aa/.a
+/b/c//aa/aa//.. /b/c/aa
+/b/c//aa/aa//./ /b/c/aa/aa
+/b/c//aa/aa///a /b/c/aa/aa/a
+/b/c//aa/aa///. /b/c/aa/aa
+/b/c//aa/aa//// /b/c/aa/aa
+/b/c//aa/a.aaaa /b/c/aa/a.aaaa
+/b/c//aa/a.aaa. /b/c/aa/a.aaa.
+/b/c//aa/a.aaa/ /b/c/aa/a.aaa
+/b/c//aa/a.aa.a /b/c/aa/a.aa.a
+/b/c//aa/a.aa.. /b/c/aa/a.aa..
+/b/c//aa/a.aa./ /b/c/aa/a.aa.
+/b/c//aa/a.aa/a /b/c/aa/a.aa/a
+/b/c//aa/a.aa/. /b/c/aa/a.aa
+/b/c//aa/a.aa// /b/c/aa/a.aa
+/b/c//aa/a.a.aa /b/c/aa/a.a.aa
+/b/c//aa/a.a.a. /b/c/aa/a.a.a.
+/b/c//aa/a.a.a/ /b/c/aa/a.a.a
+/b/c//aa/a.a..a /b/c/aa/a.a..a
+/b/c//aa/a.a... /b/c/aa/a.a...
+/b/c//aa/a.a../ /b/c/aa/a.a..
+/b/c//aa/a.a./a /b/c/aa/a.a./a
+/b/c//aa/a.a./. /b/c/aa/a.a.
+/b/c//aa/a.a.// /b/c/aa/a.a.
+/b/c//aa/a.a/aa /b/c/aa/a.a/aa
+/b/c//aa/a.a/a. /b/c/aa/a.a/a.
+/b/c//aa/a.a/a/ /b/c/aa/a.a/a
+/b/c//aa/a.a/.a /b/c/aa/a.a/.a
+/b/c//aa/a.a/.. /b/c/aa
+/b/c//aa/a.a/./ /b/c/aa/a.a
+/b/c//aa/a.a//a /b/c/aa/a.a/a
+/b/c//aa/a.a//. /b/c/aa/a.a
+/b/c//aa/a.a/// /b/c/aa/a.a
+/b/c//aa/a..aaa /b/c/aa/a..aaa
+/b/c//aa/a..aa. /b/c/aa/a..aa.
+/b/c//aa/a..aa/ /b/c/aa/a..aa
+/b/c//aa/a..a.a /b/c/aa/a..a.a
+/b/c//aa/a..a.. /b/c/aa/a..a..
+/b/c//aa/a..a./ /b/c/aa/a..a.
+/b/c//aa/a..a/a /b/c/aa/a..a/a
+/b/c//aa/a..a/. /b/c/aa/a..a
+/b/c//aa/a..a// /b/c/aa/a..a
+/b/c//aa/a...aa /b/c/aa/a...aa
+/b/c//aa/a...a. /b/c/aa/a...a.
+/b/c//aa/a...a/ /b/c/aa/a...a
+/b/c//aa/a....a /b/c/aa/a....a
+/b/c//aa/a..... /b/c/aa/a.....
+/b/c//aa/a..../ /b/c/aa/a....
+/b/c//aa/a.../a /b/c/aa/a.../a
+/b/c//aa/a.../. /b/c/aa/a...
+/b/c//aa/a...// /b/c/aa/a...
+/b/c//aa/a../aa /b/c/aa/a../aa
+/b/c//aa/a../a. /b/c/aa/a../a.
+/b/c//aa/a../a/ /b/c/aa/a../a
+/b/c//aa/a../.a /b/c/aa/a../.a
+/b/c//aa/a../.. /b/c/aa
+/b/c//aa/a.././ /b/c/aa/a..
+/b/c//aa/a..//a /b/c/aa/a../a
+/b/c//aa/a..//. /b/c/aa/a..
+/b/c//aa/a../// /b/c/aa/a..
+/b/c//aa/a./aaa /b/c/aa/a./aaa
+/b/c//aa/a./aa. /b/c/aa/a./aa.
+/b/c//aa/a./aa/ /b/c/aa/a./aa
+/b/c//aa/a./a.a /b/c/aa/a./a.a
+/b/c//aa/a./a.. /b/c/aa/a./a..
+/b/c//aa/a./a./ /b/c/aa/a./a.
+/b/c//aa/a./a/a /b/c/aa/a./a/a
+/b/c//aa/a./a/. /b/c/aa/a./a
+/b/c//aa/a./a// /b/c/aa/a./a
+/b/c//aa/a./.aa /b/c/aa/a./.aa
+/b/c//aa/a./.a. /b/c/aa/a./.a.
+/b/c//aa/a./.a/ /b/c/aa/a./.a
+/b/c//aa/a./..a /b/c/aa/a./..a
+/b/c//aa/a./... /b/c/aa/a./...
+/b/c//aa/a./../ /b/c/aa
+/b/c//aa/a././a /b/c/aa/a./a
+/b/c//aa/a././. /b/c/aa/a.
+/b/c//aa/a./.// /b/c/aa/a.
+/b/c//aa/a.//aa /b/c/aa/a./aa
+/b/c//aa/a.//a. /b/c/aa/a./a.
+/b/c//aa/a.//a/ /b/c/aa/a./a
+/b/c//aa/a.//.a /b/c/aa/a./.a
+/b/c//aa/a.//.. /b/c/aa
+/b/c//aa/a.//./ /b/c/aa/a.
+/b/c//aa/a.///a /b/c/aa/a./a
+/b/c//aa/a.///. /b/c/aa/a.
+/b/c//aa/a.//// /b/c/aa/a.
+/b/c//aa/a/aaaa /b/c/aa/a/aaaa
+/b/c//aa/a/aaa. /b/c/aa/a/aaa.
+/b/c//aa/a/aaa/ /b/c/aa/a/aaa
+/b/c//aa/a/aa.a /b/c/aa/a/aa.a
+/b/c//aa/a/aa.. /b/c/aa/a/aa..
+/b/c//aa/a/aa./ /b/c/aa/a/aa.
+/b/c//aa/a/aa/a /b/c/aa/a/aa/a
+/b/c//aa/a/aa/. /b/c/aa/a/aa
+/b/c//aa/a/aa// /b/c/aa/a/aa
+/b/c//aa/a/a.aa /b/c/aa/a/a.aa
+/b/c//aa/a/a.a. /b/c/aa/a/a.a.
+/b/c//aa/a/a.a/ /b/c/aa/a/a.a
+/b/c//aa/a/a..a /b/c/aa/a/a..a
+/b/c//aa/a/a... /b/c/aa/a/a...
+/b/c//aa/a/a../ /b/c/aa/a/a..
+/b/c//aa/a/a./a /b/c/aa/a/a./a
+/b/c//aa/a/a./. /b/c/aa/a/a.
+/b/c//aa/a/a.// /b/c/aa/a/a.
+/b/c//aa/a/a/aa /b/c/aa/a/a/aa
+/b/c//aa/a/a/a. /b/c/aa/a/a/a.
+/b/c//aa/a/a/a/ /b/c/aa/a/a/a
+/b/c//aa/a/a/.a /b/c/aa/a/a/.a
+/b/c//aa/a/a/.. /b/c/aa/a
+/b/c//aa/a/a/./ /b/c/aa/a/a
+/b/c//aa/a/a//a /b/c/aa/a/a/a
+/b/c//aa/a/a//. /b/c/aa/a/a
+/b/c//aa/a/a/// /b/c/aa/a/a
+/b/c//aa/a/.aaa /b/c/aa/a/.aaa
+/b/c//aa/a/.aa. /b/c/aa/a/.aa.
+/b/c//aa/a/.aa/ /b/c/aa/a/.aa
+/b/c//aa/a/.a.a /b/c/aa/a/.a.a
+/b/c//aa/a/.a.. /b/c/aa/a/.a..
+/b/c//aa/a/.a./ /b/c/aa/a/.a.
+/b/c//aa/a/.a/a /b/c/aa/a/.a/a
+/b/c//aa/a/.a/. /b/c/aa/a/.a
+/b/c//aa/a/.a// /b/c/aa/a/.a
+/b/c//aa/a/..aa /b/c/aa/a/..aa
+/b/c//aa/a/..a. /b/c/aa/a/..a.
+/b/c//aa/a/..a/ /b/c/aa/a/..a
+/b/c//aa/a/...a /b/c/aa/a/...a
+/b/c//aa/a/.... /b/c/aa/a/....
+/b/c//aa/a/.../ /b/c/aa/a/...
+/b/c//aa/a/../a /b/c/aa/a
+/b/c//aa/a/../. /b/c/aa
+/b/c//aa/a/..// /b/c/aa
+/b/c//aa/a/./aa /b/c/aa/a/aa
+/b/c//aa/a/./a. /b/c/aa/a/a.
+/b/c//aa/a/./a/ /b/c/aa/a/a
+/b/c//aa/a/./.a /b/c/aa/a/.a
+/b/c//aa/a/./.. /b/c/aa
+/b/c//aa/a/././ /b/c/aa/a
+/b/c//aa/a/.//a /b/c/aa/a/a
+/b/c//aa/a/.//. /b/c/aa/a
+/b/c//aa/a/./// /b/c/aa/a
+/b/c//aa/a//aaa /b/c/aa/a/aaa
+/b/c//aa/a//aa. /b/c/aa/a/aa.
+/b/c//aa/a//aa/ /b/c/aa/a/aa
+/b/c//aa/a//a.a /b/c/aa/a/a.a
+/b/c//aa/a//a.. /b/c/aa/a/a..
+/b/c//aa/a//a./ /b/c/aa/a/a.
+/b/c//aa/a//a/a /b/c/aa/a/a/a
+/b/c//aa/a//a/. /b/c/aa/a/a
+/b/c//aa/a//a// /b/c/aa/a/a
+/b/c//aa/a//.aa /b/c/aa/a/.aa
+/b/c//aa/a//.a. /b/c/aa/a/.a.
+/b/c//aa/a//.a/ /b/c/aa/a/.a
+/b/c//aa/a//..a /b/c/aa/a/..a
+/b/c//aa/a//... /b/c/aa/a/...
+/b/c//aa/a//../ /b/c/aa
+/b/c//aa/a//./a /b/c/aa/a/a
+/b/c//aa/a//./. /b/c/aa/a
+/b/c//aa/a//.// /b/c/aa/a
+/b/c//aa/a///aa /b/c/aa/a/aa
+/b/c//aa/a///a. /b/c/aa/a/a.
+/b/c//aa/a///a/ /b/c/aa/a/a
+/b/c//aa/a///.a /b/c/aa/a/.a
+/b/c//aa/a///.. /b/c/aa
+/b/c//aa/a///./ /b/c/aa/a
+/b/c//aa/a////a /b/c/aa/a/a
+/b/c//aa/a////. /b/c/aa/a
+/b/c//aa/a///// /b/c/aa/a
+/b/c//aa/.aaaaa /b/c/aa/.aaaaa
+/b/c//aa/.aaaa. /b/c/aa/.aaaa.
+/b/c//aa/.aaaa/ /b/c/aa/.aaaa
+/b/c//aa/.aaa.a /b/c/aa/.aaa.a
+/b/c//aa/.aaa.. /b/c/aa/.aaa..
+/b/c//aa/.aaa./ /b/c/aa/.aaa.
+/b/c//aa/.aaa/a /b/c/aa/.aaa/a
+/b/c//aa/.aaa/. /b/c/aa/.aaa
+/b/c//aa/.aaa// /b/c/aa/.aaa
+/b/c//aa/.aa.aa /b/c/aa/.aa.aa
+/b/c//aa/.aa.a. /b/c/aa/.aa.a.
+/b/c//aa/.aa.a/ /b/c/aa/.aa.a
+/b/c//aa/.aa..a /b/c/aa/.aa..a
+/b/c//aa/.aa... /b/c/aa/.aa...
+/b/c//aa/.aa../ /b/c/aa/.aa..
+/b/c//aa/.aa./a /b/c/aa/.aa./a
+/b/c//aa/.aa./. /b/c/aa/.aa.
+/b/c//aa/.aa.// /b/c/aa/.aa.
+/b/c//aa/.aa/aa /b/c/aa/.aa/aa
+/b/c//aa/.aa/a. /b/c/aa/.aa/a.
+/b/c//aa/.aa/a/ /b/c/aa/.aa/a
+/b/c//aa/.aa/.a /b/c/aa/.aa/.a
+/b/c//aa/.aa/.. /b/c/aa
+/b/c//aa/.aa/./ /b/c/aa/.aa
+/b/c//aa/.aa//a /b/c/aa/.aa/a
+/b/c//aa/.aa//. /b/c/aa/.aa
+/b/c//aa/.aa/// /b/c/aa/.aa
+/b/c//aa/.a.aaa /b/c/aa/.a.aaa
+/b/c//aa/.a.aa. /b/c/aa/.a.aa.
+/b/c//aa/.a.aa/ /b/c/aa/.a.aa
+/b/c//aa/.a.a.a /b/c/aa/.a.a.a
+/b/c//aa/.a.a.. /b/c/aa/.a.a..
+/b/c//aa/.a.a./ /b/c/aa/.a.a.
+/b/c//aa/.a.a/a /b/c/aa/.a.a/a
+/b/c//aa/.a.a/. /b/c/aa/.a.a
+/b/c//aa/.a.a// /b/c/aa/.a.a
+/b/c//aa/.a..aa /b/c/aa/.a..aa
+/b/c//aa/.a..a. /b/c/aa/.a..a.
+/b/c//aa/.a..a/ /b/c/aa/.a..a
+/b/c//aa/.a...a /b/c/aa/.a...a
+/b/c//aa/.a.... /b/c/aa/.a....
+/b/c//aa/.a.../ /b/c/aa/.a...
+/b/c//aa/.a../a /b/c/aa/.a../a
+/b/c//aa/.a../. /b/c/aa/.a..
+/b/c//aa/.a..// /b/c/aa/.a..
+/b/c//aa/.a./aa /b/c/aa/.a./aa
+/b/c//aa/.a./a. /b/c/aa/.a./a.
+/b/c//aa/.a./a/ /b/c/aa/.a./a
+/b/c//aa/.a./.a /b/c/aa/.a./.a
+/b/c//aa/.a./.. /b/c/aa
+/b/c//aa/.a././ /b/c/aa/.a.
+/b/c//aa/.a.//a /b/c/aa/.a./a
+/b/c//aa/.a.//. /b/c/aa/.a.
+/b/c//aa/.a./// /b/c/aa/.a.
+/b/c//aa/.a/aaa /b/c/aa/.a/aaa
+/b/c//aa/.a/aa. /b/c/aa/.a/aa.
+/b/c//aa/.a/aa/ /b/c/aa/.a/aa
+/b/c//aa/.a/a.a /b/c/aa/.a/a.a
+/b/c//aa/.a/a.. /b/c/aa/.a/a..
+/b/c//aa/.a/a./ /b/c/aa/.a/a.
+/b/c//aa/.a/a/a /b/c/aa/.a/a/a
+/b/c//aa/.a/a/. /b/c/aa/.a/a
+/b/c//aa/.a/a// /b/c/aa/.a/a
+/b/c//aa/.a/.aa /b/c/aa/.a/.aa
+/b/c//aa/.a/.a. /b/c/aa/.a/.a.
+/b/c//aa/.a/.a/ /b/c/aa/.a/.a
+/b/c//aa/.a/..a /b/c/aa/.a/..a
+/b/c//aa/.a/... /b/c/aa/.a/...
+/b/c//aa/.a/../ /b/c/aa
+/b/c//aa/.a/./a /b/c/aa/.a/a
+/b/c//aa/.a/./. /b/c/aa/.a
+/b/c//aa/.a/.// /b/c/aa/.a
+/b/c//aa/.a//aa /b/c/aa/.a/aa
+/b/c//aa/.a//a. /b/c/aa/.a/a.
+/b/c//aa/.a//a/ /b/c/aa/.a/a
+/b/c//aa/.a//.a /b/c/aa/.a/.a
+/b/c//aa/.a//.. /b/c/aa
+/b/c//aa/.a//./ /b/c/aa/.a
+/b/c//aa/.a///a /b/c/aa/.a/a
+/b/c//aa/.a///. /b/c/aa/.a
+/b/c//aa/.a//// /b/c/aa/.a
+/b/c//aa/..aaaa /b/c/aa/..aaaa
+/b/c//aa/..aaa. /b/c/aa/..aaa.
+/b/c//aa/..aaa/ /b/c/aa/..aaa
+/b/c//aa/..aa.a /b/c/aa/..aa.a
+/b/c//aa/..aa.. /b/c/aa/..aa..
+/b/c//aa/..aa./ /b/c/aa/..aa.
+/b/c//aa/..aa/a /b/c/aa/..aa/a
+/b/c//aa/..aa/. /b/c/aa/..aa
+/b/c//aa/..aa// /b/c/aa/..aa
+/b/c//aa/..a.aa /b/c/aa/..a.aa
+/b/c//aa/..a.a. /b/c/aa/..a.a.
+/b/c//aa/..a.a/ /b/c/aa/..a.a
+/b/c//aa/..a..a /b/c/aa/..a..a
+/b/c//aa/..a... /b/c/aa/..a...
+/b/c//aa/..a../ /b/c/aa/..a..
+/b/c//aa/..a./a /b/c/aa/..a./a
+/b/c//aa/..a./. /b/c/aa/..a.
+/b/c//aa/..a.// /b/c/aa/..a.
+/b/c//aa/..a/aa /b/c/aa/..a/aa
+/b/c//aa/..a/a. /b/c/aa/..a/a.
+/b/c//aa/..a/a/ /b/c/aa/..a/a
+/b/c//aa/..a/.a /b/c/aa/..a/.a
+/b/c//aa/..a/.. /b/c/aa
+/b/c//aa/..a/./ /b/c/aa/..a
+/b/c//aa/..a//a /b/c/aa/..a/a
+/b/c//aa/..a//. /b/c/aa/..a
+/b/c//aa/..a/// /b/c/aa/..a
+/b/c//aa/...aaa /b/c/aa/...aaa
+/b/c//aa/...aa. /b/c/aa/...aa.
+/b/c//aa/...aa/ /b/c/aa/...aa
+/b/c//aa/...a.a /b/c/aa/...a.a
+/b/c//aa/...a.. /b/c/aa/...a..
+/b/c//aa/...a./ /b/c/aa/...a.
+/b/c//aa/...a/a /b/c/aa/...a/a
+/b/c//aa/...a/. /b/c/aa/...a
+/b/c//aa/...a// /b/c/aa/...a
+/b/c//aa/....aa /b/c/aa/....aa
+/b/c//aa/....a. /b/c/aa/....a.
+/b/c//aa/....a/ /b/c/aa/....a
+/b/c//aa/.....a /b/c/aa/.....a
+/b/c//aa/...... /b/c/aa/......
+/b/c//aa/...../ /b/c/aa/.....
+/b/c//aa/..../a /b/c/aa/..../a
+/b/c//aa/..../. /b/c/aa/....
+/b/c//aa/....// /b/c/aa/....
+/b/c//aa/.../aa /b/c/aa/.../aa
+/b/c//aa/.../a. /b/c/aa/.../a.
+/b/c//aa/.../a/ /b/c/aa/.../a
+/b/c//aa/.../.a /b/c/aa/.../.a
+/b/c//aa/.../.. /b/c/aa
+/b/c//aa/..././ /b/c/aa/...
+/b/c//aa/...//a /b/c/aa/.../a
+/b/c//aa/...//. /b/c/aa/...
+/b/c//aa/.../// /b/c/aa/...
+/b/c//aa/../aaa /b/c/aaa
+/b/c//aa/../aa. /b/c/aa.
+/b/c//aa/../aa/ /b/c/aa
+/b/c//aa/../a.a /b/c/a.a
+/b/c//aa/../a.. /b/c/a..
+/b/c//aa/../a./ /b/c/a.
+/b/c//aa/../a/a /b/c/a/a
+/b/c//aa/../a/. /b/c/a
+/b/c//aa/../a// /b/c/a
+/b/c//aa/../.aa /b/c/.aa
+/b/c//aa/../.a. /b/c/.a.
+/b/c//aa/../.a/ /b/c/.a
+/b/c//aa/../..a /b/c/..a
+/b/c//aa/../... /b/c/...
+/b/c//aa/../../ /b
+/b/c//aa/.././a /b/c/a
+/b/c//aa/.././. /b/c
+/b/c//aa/../.// /b/c
+/b/c//aa/..//aa /b/c/aa
+/b/c//aa/..//a. /b/c/a.
+/b/c//aa/..//a/ /b/c/a
+/b/c//aa/..//.a /b/c/.a
+/b/c//aa/..//.. /b
+/b/c//aa/..//./ /b/c
+/b/c//aa/..///a /b/c/a
+/b/c//aa/..///. /b/c
+/b/c//aa/..//// /b/c
+/b/c//aa/./aaaa /b/c/aa/aaaa
+/b/c//aa/./aaa. /b/c/aa/aaa.
+/b/c//aa/./aaa/ /b/c/aa/aaa
+/b/c//aa/./aa.a /b/c/aa/aa.a
+/b/c//aa/./aa.. /b/c/aa/aa..
+/b/c//aa/./aa./ /b/c/aa/aa.
+/b/c//aa/./aa/a /b/c/aa/aa/a
+/b/c//aa/./aa/. /b/c/aa/aa
+/b/c//aa/./aa// /b/c/aa/aa
+/b/c//aa/./a.aa /b/c/aa/a.aa
+/b/c//aa/./a.a. /b/c/aa/a.a.
+/b/c//aa/./a.a/ /b/c/aa/a.a
+/b/c//aa/./a..a /b/c/aa/a..a
+/b/c//aa/./a... /b/c/aa/a...
+/b/c//aa/./a../ /b/c/aa/a..
+/b/c//aa/./a./a /b/c/aa/a./a
+/b/c//aa/./a./. /b/c/aa/a.
+/b/c//aa/./a.// /b/c/aa/a.
+/b/c//aa/./a/aa /b/c/aa/a/aa
+/b/c//aa/./a/a. /b/c/aa/a/a.
+/b/c//aa/./a/a/ /b/c/aa/a/a
+/b/c//aa/./a/.a /b/c/aa/a/.a
+/b/c//aa/./a/.. /b/c/aa
+/b/c//aa/./a/./ /b/c/aa/a
+/b/c//aa/./a//a /b/c/aa/a/a
+/b/c//aa/./a//. /b/c/aa/a
+/b/c//aa/./a/// /b/c/aa/a
+/b/c//aa/./.aaa /b/c/aa/.aaa
+/b/c//aa/./.aa. /b/c/aa/.aa.
+/b/c//aa/./.aa/ /b/c/aa/.aa
+/b/c//aa/./.a.a /b/c/aa/.a.a
+/b/c//aa/./.a.. /b/c/aa/.a..
+/b/c//aa/./.a./ /b/c/aa/.a.
+/b/c//aa/./.a/a /b/c/aa/.a/a
+/b/c//aa/./.a/. /b/c/aa/.a
+/b/c//aa/./.a// /b/c/aa/.a
+/b/c//aa/./..aa /b/c/aa/..aa
+/b/c//aa/./..a. /b/c/aa/..a.
+/b/c//aa/./..a/ /b/c/aa/..a
+/b/c//aa/./...a /b/c/aa/...a
+/b/c//aa/./.... /b/c/aa/....
+/b/c//aa/./.../ /b/c/aa/...
+/b/c//aa/./../a /b/c/a
+/b/c//aa/./../. /b/c
+/b/c//aa/./..// /b/c
+/b/c//aa/././aa /b/c/aa/aa
+/b/c//aa/././a. /b/c/aa/a.
+/b/c//aa/././a/ /b/c/aa/a
+/b/c//aa/././.a /b/c/aa/.a
+/b/c//aa/././.. /b/c
+/b/c//aa/./././ /b/c/aa
+/b/c//aa/././/a /b/c/aa/a
+/b/c//aa/././/. /b/c/aa
+/b/c//aa/././// /b/c/aa
+/b/c//aa/.//aaa /b/c/aa/aaa
+/b/c//aa/.//aa. /b/c/aa/aa.
+/b/c//aa/.//aa/ /b/c/aa/aa
+/b/c//aa/.//a.a /b/c/aa/a.a
+/b/c//aa/.//a.. /b/c/aa/a..
+/b/c//aa/.//a./ /b/c/aa/a.
+/b/c//aa/.//a/a /b/c/aa/a/a
+/b/c//aa/.//a/. /b/c/aa/a
+/b/c//aa/.//a// /b/c/aa/a
+/b/c//aa/.//.aa /b/c/aa/.aa
+/b/c//aa/.//.a. /b/c/aa/.a.
+/b/c//aa/.//.a/ /b/c/aa/.a
+/b/c//aa/.//..a /b/c/aa/..a
+/b/c//aa/.//... /b/c/aa/...
+/b/c//aa/.//../ /b/c
+/b/c//aa/.//./a /b/c/aa/a
+/b/c//aa/.//./. /b/c/aa
+/b/c//aa/.//.// /b/c/aa
+/b/c//aa/.///aa /b/c/aa/aa
+/b/c//aa/.///a. /b/c/aa/a.
+/b/c//aa/.///a/ /b/c/aa/a
+/b/c//aa/.///.a /b/c/aa/.a
+/b/c//aa/.///.. /b/c
+/b/c//aa/.///./ /b/c/aa
+/b/c//aa/.////a /b/c/aa/a
+/b/c//aa/.////. /b/c/aa
+/b/c//aa/.///// /b/c/aa
+/b/c//aa//aaaaa /b/c/aa/aaaaa
+/b/c//aa//aaaa. /b/c/aa/aaaa.
+/b/c//aa//aaaa/ /b/c/aa/aaaa
+/b/c//aa//aaa.a /b/c/aa/aaa.a
+/b/c//aa//aaa.. /b/c/aa/aaa..
+/b/c//aa//aaa./ /b/c/aa/aaa.
+/b/c//aa//aaa/a /b/c/aa/aaa/a
+/b/c//aa//aaa/. /b/c/aa/aaa
+/b/c//aa//aaa// /b/c/aa/aaa
+/b/c//aa//aa.aa /b/c/aa/aa.aa
+/b/c//aa//aa.a. /b/c/aa/aa.a.
+/b/c//aa//aa.a/ /b/c/aa/aa.a
+/b/c//aa//aa..a /b/c/aa/aa..a
+/b/c//aa//aa... /b/c/aa/aa...
+/b/c//aa//aa../ /b/c/aa/aa..
+/b/c//aa//aa./a /b/c/aa/aa./a
+/b/c//aa//aa./. /b/c/aa/aa.
+/b/c//aa//aa.// /b/c/aa/aa.
+/b/c//aa//aa/aa /b/c/aa/aa/aa
+/b/c//aa//aa/a. /b/c/aa/aa/a.
+/b/c//aa//aa/a/ /b/c/aa/aa/a
+/b/c//aa//aa/.a /b/c/aa/aa/.a
+/b/c//aa//aa/.. /b/c/aa
+/b/c//aa//aa/./ /b/c/aa/aa
+/b/c//aa//aa//a /b/c/aa/aa/a
+/b/c//aa//aa//. /b/c/aa/aa
+/b/c//aa//aa/// /b/c/aa/aa
+/b/c//aa//a.aaa /b/c/aa/a.aaa
+/b/c//aa//a.aa. /b/c/aa/a.aa.
+/b/c//aa//a.aa/ /b/c/aa/a.aa
+/b/c//aa//a.a.a /b/c/aa/a.a.a
+/b/c//aa//a.a.. /b/c/aa/a.a..
+/b/c//aa//a.a./ /b/c/aa/a.a.
+/b/c//aa//a.a/a /b/c/aa/a.a/a
+/b/c//aa//a.a/. /b/c/aa/a.a
+/b/c//aa//a.a// /b/c/aa/a.a
+/b/c//aa//a..aa /b/c/aa/a..aa
+/b/c//aa//a..a. /b/c/aa/a..a.
+/b/c//aa//a..a/ /b/c/aa/a..a
+/b/c//aa//a...a /b/c/aa/a...a
+/b/c//aa//a.... /b/c/aa/a....
+/b/c//aa//a.../ /b/c/aa/a...
+/b/c//aa//a../a /b/c/aa/a../a
+/b/c//aa//a../. /b/c/aa/a..
+/b/c//aa//a..// /b/c/aa/a..
+/b/c//aa//a./aa /b/c/aa/a./aa
+/b/c//aa//a./a. /b/c/aa/a./a.
+/b/c//aa//a./a/ /b/c/aa/a./a
+/b/c//aa//a./.a /b/c/aa/a./.a
+/b/c//aa//a./.. /b/c/aa
+/b/c//aa//a././ /b/c/aa/a.
+/b/c//aa//a.//a /b/c/aa/a./a
+/b/c//aa//a.//. /b/c/aa/a.
+/b/c//aa//a./// /b/c/aa/a.
+/b/c//aa//a/aaa /b/c/aa/a/aaa
+/b/c//aa//a/aa. /b/c/aa/a/aa.
+/b/c//aa//a/aa/ /b/c/aa/a/aa
+/b/c//aa//a/a.a /b/c/aa/a/a.a
+/b/c//aa//a/a.. /b/c/aa/a/a..
+/b/c//aa//a/a./ /b/c/aa/a/a.
+/b/c//aa//a/a/a /b/c/aa/a/a/a
+/b/c//aa//a/a/. /b/c/aa/a/a
+/b/c//aa//a/a// /b/c/aa/a/a
+/b/c//aa//a/.aa /b/c/aa/a/.aa
+/b/c//aa//a/.a. /b/c/aa/a/.a.
+/b/c//aa//a/.a/ /b/c/aa/a/.a
+/b/c//aa//a/..a /b/c/aa/a/..a
+/b/c//aa//a/... /b/c/aa/a/...
+/b/c//aa//a/../ /b/c/aa
+/b/c//aa//a/./a /b/c/aa/a/a
+/b/c//aa//a/./. /b/c/aa/a
+/b/c//aa//a/.// /b/c/aa/a
+/b/c//aa//a//aa /b/c/aa/a/aa
+/b/c//aa//a//a. /b/c/aa/a/a.
+/b/c//aa//a//a/ /b/c/aa/a/a
+/b/c//aa//a//.a /b/c/aa/a/.a
+/b/c//aa//a//.. /b/c/aa
+/b/c//aa//a//./ /b/c/aa/a
+/b/c//aa//a///a /b/c/aa/a/a
+/b/c//aa//a///. /b/c/aa/a
+/b/c//aa//a//// /b/c/aa/a
+/b/c//aa//.aaaa /b/c/aa/.aaaa
+/b/c//aa//.aaa. /b/c/aa/.aaa.
+/b/c//aa//.aaa/ /b/c/aa/.aaa
+/b/c//aa//.aa.a /b/c/aa/.aa.a
+/b/c//aa//.aa.. /b/c/aa/.aa..
+/b/c//aa//.aa./ /b/c/aa/.aa.
+/b/c//aa//.aa/a /b/c/aa/.aa/a
+/b/c//aa//.aa/. /b/c/aa/.aa
+/b/c//aa//.aa// /b/c/aa/.aa
+/b/c//aa//.a.aa /b/c/aa/.a.aa
+/b/c//aa//.a.a. /b/c/aa/.a.a.
+/b/c//aa//.a.a/ /b/c/aa/.a.a
+/b/c//aa//.a..a /b/c/aa/.a..a
+/b/c//aa//.a... /b/c/aa/.a...
+/b/c//aa//.a../ /b/c/aa/.a..
+/b/c//aa//.a./a /b/c/aa/.a./a
+/b/c//aa//.a./. /b/c/aa/.a.
+/b/c//aa//.a.// /b/c/aa/.a.
+/b/c//aa//.a/aa /b/c/aa/.a/aa
+/b/c//aa//.a/a. /b/c/aa/.a/a.
+/b/c//aa//.a/a/ /b/c/aa/.a/a
+/b/c//aa//.a/.a /b/c/aa/.a/.a
+/b/c//aa//.a/.. /b/c/aa
+/b/c//aa//.a/./ /b/c/aa/.a
+/b/c//aa//.a//a /b/c/aa/.a/a
+/b/c//aa//.a//. /b/c/aa/.a
+/b/c//aa//.a/// /b/c/aa/.a
+/b/c//aa//..aaa /b/c/aa/..aaa
+/b/c//aa//..aa. /b/c/aa/..aa.
+/b/c//aa//..aa/ /b/c/aa/..aa
+/b/c//aa//..a.a /b/c/aa/..a.a
+/b/c//aa//..a.. /b/c/aa/..a..
+/b/c//aa//..a./ /b/c/aa/..a.
+/b/c//aa//..a/a /b/c/aa/..a/a
+/b/c//aa//..a/. /b/c/aa/..a
+/b/c//aa//..a// /b/c/aa/..a
+/b/c//aa//...aa /b/c/aa/...aa
+/b/c//aa//...a. /b/c/aa/...a.
+/b/c//aa//...a/ /b/c/aa/...a
+/b/c//aa//....a /b/c/aa/....a
+/b/c//aa//..... /b/c/aa/.....
+/b/c//aa//..../ /b/c/aa/....
+/b/c//aa//.../a /b/c/aa/.../a
+/b/c//aa//.../. /b/c/aa/...
+/b/c//aa//...// /b/c/aa/...
+/b/c//aa//../aa /b/c/aa
+/b/c//aa//../a. /b/c/a.
+/b/c//aa//../a/ /b/c/a
+/b/c//aa//../.a /b/c/.a
+/b/c//aa//../.. /b
+/b/c//aa//.././ /b/c
+/b/c//aa//..//a /b/c/a
+/b/c//aa//..//. /b/c
+/b/c//aa//../// /b/c
+/b/c//aa//./aaa /b/c/aa/aaa
+/b/c//aa//./aa. /b/c/aa/aa.
+/b/c//aa//./aa/ /b/c/aa/aa
+/b/c//aa//./a.a /b/c/aa/a.a
+/b/c//aa//./a.. /b/c/aa/a..
+/b/c//aa//./a./ /b/c/aa/a.
+/b/c//aa//./a/a /b/c/aa/a/a
+/b/c//aa//./a/. /b/c/aa/a
+/b/c//aa//./a// /b/c/aa/a
+/b/c//aa//./.aa /b/c/aa/.aa
+/b/c//aa//./.a. /b/c/aa/.a.
+/b/c//aa//./.a/ /b/c/aa/.a
+/b/c//aa//./..a /b/c/aa/..a
+/b/c//aa//./... /b/c/aa/...
+/b/c//aa//./../ /b/c
+/b/c//aa//././a /b/c/aa/a
+/b/c//aa//././. /b/c/aa
+/b/c//aa//./.// /b/c/aa
+/b/c//aa//.//aa /b/c/aa/aa
+/b/c//aa//.//a. /b/c/aa/a.
+/b/c//aa//.//a/ /b/c/aa/a
+/b/c//aa//.//.a /b/c/aa/.a
+/b/c//aa//.//.. /b/c
+/b/c//aa//.//./ /b/c/aa
+/b/c//aa//.///a /b/c/aa/a
+/b/c//aa//.///. /b/c/aa
+/b/c//aa//.//// /b/c/aa
+/b/c//aa///aaaa /b/c/aa/aaaa
+/b/c//aa///aaa. /b/c/aa/aaa.
+/b/c//aa///aaa/ /b/c/aa/aaa
+/b/c//aa///aa.a /b/c/aa/aa.a
+/b/c//aa///aa.. /b/c/aa/aa..
+/b/c//aa///aa./ /b/c/aa/aa.
+/b/c//aa///aa/a /b/c/aa/aa/a
+/b/c//aa///aa/. /b/c/aa/aa
+/b/c//aa///aa// /b/c/aa/aa
+/b/c//aa///a.aa /b/c/aa/a.aa
+/b/c//aa///a.a. /b/c/aa/a.a.
+/b/c//aa///a.a/ /b/c/aa/a.a
+/b/c//aa///a..a /b/c/aa/a..a
+/b/c//aa///a... /b/c/aa/a...
+/b/c//aa///a../ /b/c/aa/a..
+/b/c//aa///a./a /b/c/aa/a./a
+/b/c//aa///a./. /b/c/aa/a.
+/b/c//aa///a.// /b/c/aa/a.
+/b/c//aa///a/aa /b/c/aa/a/aa
+/b/c//aa///a/a. /b/c/aa/a/a.
+/b/c//aa///a/a/ /b/c/aa/a/a
+/b/c//aa///a/.a /b/c/aa/a/.a
+/b/c//aa///a/.. /b/c/aa
+/b/c//aa///a/./ /b/c/aa/a
+/b/c//aa///a//a /b/c/aa/a/a
+/b/c//aa///a//. /b/c/aa/a
+/b/c//aa///a/// /b/c/aa/a
+/b/c//aa///.aaa /b/c/aa/.aaa
+/b/c//aa///.aa. /b/c/aa/.aa.
+/b/c//aa///.aa/ /b/c/aa/.aa
+/b/c//aa///.a.a /b/c/aa/.a.a
+/b/c//aa///.a.. /b/c/aa/.a..
+/b/c//aa///.a./ /b/c/aa/.a.
+/b/c//aa///.a/a /b/c/aa/.a/a
+/b/c//aa///.a/. /b/c/aa/.a
+/b/c//aa///.a// /b/c/aa/.a
+/b/c//aa///..aa /b/c/aa/..aa
+/b/c//aa///..a. /b/c/aa/..a.
+/b/c//aa///..a/ /b/c/aa/..a
+/b/c//aa///...a /b/c/aa/...a
+/b/c//aa///.... /b/c/aa/....
+/b/c//aa///.../ /b/c/aa/...
+/b/c//aa///../a /b/c/a
+/b/c//aa///../. /b/c
+/b/c//aa///..// /b/c
+/b/c//aa///./aa /b/c/aa/aa
+/b/c//aa///./a. /b/c/aa/a.
+/b/c//aa///./a/ /b/c/aa/a
+/b/c//aa///./.a /b/c/aa/.a
+/b/c//aa///./.. /b/c
+/b/c//aa///././ /b/c/aa
+/b/c//aa///.//a /b/c/aa/a
+/b/c//aa///.//. /b/c/aa
+/b/c//aa///./// /b/c/aa
+/b/c//aa////aaa /b/c/aa/aaa
+/b/c//aa////aa. /b/c/aa/aa.
+/b/c//aa////aa/ /b/c/aa/aa
+/b/c//aa////a.a /b/c/aa/a.a
+/b/c//aa////a.. /b/c/aa/a..
+/b/c//aa////a./ /b/c/aa/a.
+/b/c//aa////a/a /b/c/aa/a/a
+/b/c//aa////a/. /b/c/aa/a
+/b/c//aa////a// /b/c/aa/a
+/b/c//aa////.aa /b/c/aa/.aa
+/b/c//aa////.a. /b/c/aa/.a.
+/b/c//aa////.a/ /b/c/aa/.a
+/b/c//aa////..a /b/c/aa/..a
+/b/c//aa////... /b/c/aa/...
+/b/c//aa////../ /b/c
+/b/c//aa////./a /b/c/aa/a
+/b/c//aa////./. /b/c/aa
+/b/c//aa////.// /b/c/aa
+/b/c//aa/////aa /b/c/aa/aa
+/b/c//aa/////a. /b/c/aa/a.
+/b/c//aa/////a/ /b/c/aa/a
+/b/c//aa/////.a /b/c/aa/.a
+/b/c//aa/////.. /b/c
+/b/c//aa/////./ /b/c/aa
+/b/c//aa//////a /b/c/aa/a
+/b/c//aa//////. /b/c/aa
+/b/c//aa/////// /b/c/aa
+/b/c//a.aaaaaaa /b/c/a.aaaaaaa
+/b/c//a.aaaaaa. /b/c/a.aaaaaa.
+/b/c//a.aaaaaa/ /b/c/a.aaaaaa
+/b/c//a.aaaaa.a /b/c/a.aaaaa.a
+/b/c//a.aaaaa.. /b/c/a.aaaaa..
+/b/c//a.aaaaa./ /b/c/a.aaaaa.
+/b/c//a.aaaaa/a /b/c/a.aaaaa/a
+/b/c//a.aaaaa/. /b/c/a.aaaaa
+/b/c//a.aaaaa// /b/c/a.aaaaa
+/b/c//a.aaaa.aa /b/c/a.aaaa.aa
+/b/c//a.aaaa.a. /b/c/a.aaaa.a.
+/b/c//a.aaaa.a/ /b/c/a.aaaa.a
+/b/c//a.aaaa..a /b/c/a.aaaa..a
+/b/c//a.aaaa... /b/c/a.aaaa...
+/b/c//a.aaaa../ /b/c/a.aaaa..
+/b/c//a.aaaa./a /b/c/a.aaaa./a
+/b/c//a.aaaa./. /b/c/a.aaaa.
+/b/c//a.aaaa.// /b/c/a.aaaa.
+/b/c//a.aaaa/aa /b/c/a.aaaa/aa
+/b/c//a.aaaa/a. /b/c/a.aaaa/a.
+/b/c//a.aaaa/a/ /b/c/a.aaaa/a
+/b/c//a.aaaa/.a /b/c/a.aaaa/.a
+/b/c//a.aaaa/.. /b/c
+/b/c//a.aaaa/./ /b/c/a.aaaa
+/b/c//a.aaaa//a /b/c/a.aaaa/a
+/b/c//a.aaaa//. /b/c/a.aaaa
+/b/c//a.aaaa/// /b/c/a.aaaa
+/b/c//a.aaa.aaa /b/c/a.aaa.aaa
+/b/c//a.aaa.aa. /b/c/a.aaa.aa.
+/b/c//a.aaa.aa/ /b/c/a.aaa.aa
+/b/c//a.aaa.a.a /b/c/a.aaa.a.a
+/b/c//a.aaa.a.. /b/c/a.aaa.a..
+/b/c//a.aaa.a./ /b/c/a.aaa.a.
+/b/c//a.aaa.a/a /b/c/a.aaa.a/a
+/b/c//a.aaa.a/. /b/c/a.aaa.a
+/b/c//a.aaa.a// /b/c/a.aaa.a
+/b/c//a.aaa..aa /b/c/a.aaa..aa
+/b/c//a.aaa..a. /b/c/a.aaa..a.
+/b/c//a.aaa..a/ /b/c/a.aaa..a
+/b/c//a.aaa...a /b/c/a.aaa...a
+/b/c//a.aaa.... /b/c/a.aaa....
+/b/c//a.aaa.../ /b/c/a.aaa...
+/b/c//a.aaa../a /b/c/a.aaa../a
+/b/c//a.aaa../. /b/c/a.aaa..
+/b/c//a.aaa..// /b/c/a.aaa..
+/b/c//a.aaa./aa /b/c/a.aaa./aa
+/b/c//a.aaa./a. /b/c/a.aaa./a.
+/b/c//a.aaa./a/ /b/c/a.aaa./a
+/b/c//a.aaa./.a /b/c/a.aaa./.a
+/b/c//a.aaa./.. /b/c
+/b/c//a.aaa././ /b/c/a.aaa.
+/b/c//a.aaa.//a /b/c/a.aaa./a
+/b/c//a.aaa.//. /b/c/a.aaa.
+/b/c//a.aaa./// /b/c/a.aaa.
+/b/c//a.aaa/aaa /b/c/a.aaa/aaa
+/b/c//a.aaa/aa. /b/c/a.aaa/aa.
+/b/c//a.aaa/aa/ /b/c/a.aaa/aa
+/b/c//a.aaa/a.a /b/c/a.aaa/a.a
+/b/c//a.aaa/a.. /b/c/a.aaa/a..
+/b/c//a.aaa/a./ /b/c/a.aaa/a.
+/b/c//a.aaa/a/a /b/c/a.aaa/a/a
+/b/c//a.aaa/a/. /b/c/a.aaa/a
+/b/c//a.aaa/a// /b/c/a.aaa/a
+/b/c//a.aaa/.aa /b/c/a.aaa/.aa
+/b/c//a.aaa/.a. /b/c/a.aaa/.a.
+/b/c//a.aaa/.a/ /b/c/a.aaa/.a
+/b/c//a.aaa/..a /b/c/a.aaa/..a
+/b/c//a.aaa/... /b/c/a.aaa/...
+/b/c//a.aaa/../ /b/c
+/b/c//a.aaa/./a /b/c/a.aaa/a
+/b/c//a.aaa/./. /b/c/a.aaa
+/b/c//a.aaa/.// /b/c/a.aaa
+/b/c//a.aaa//aa /b/c/a.aaa/aa
+/b/c//a.aaa//a. /b/c/a.aaa/a.
+/b/c//a.aaa//a/ /b/c/a.aaa/a
+/b/c//a.aaa//.a /b/c/a.aaa/.a
+/b/c//a.aaa//.. /b/c
+/b/c//a.aaa//./ /b/c/a.aaa
+/b/c//a.aaa///a /b/c/a.aaa/a
+/b/c//a.aaa///. /b/c/a.aaa
+/b/c//a.aaa//// /b/c/a.aaa
+/b/c//a.aa.aaaa /b/c/a.aa.aaaa
+/b/c//a.aa.aaa. /b/c/a.aa.aaa.
+/b/c//a.aa.aaa/ /b/c/a.aa.aaa
+/b/c//a.aa.aa.a /b/c/a.aa.aa.a
+/b/c//a.aa.aa.. /b/c/a.aa.aa..
+/b/c//a.aa.aa./ /b/c/a.aa.aa.
+/b/c//a.aa.aa/a /b/c/a.aa.aa/a
+/b/c//a.aa.aa/. /b/c/a.aa.aa
+/b/c//a.aa.aa// /b/c/a.aa.aa
+/b/c//a.aa.a.aa /b/c/a.aa.a.aa
+/b/c//a.aa.a.a. /b/c/a.aa.a.a.
+/b/c//a.aa.a.a/ /b/c/a.aa.a.a
+/b/c//a.aa.a..a /b/c/a.aa.a..a
+/b/c//a.aa.a... /b/c/a.aa.a...
+/b/c//a.aa.a../ /b/c/a.aa.a..
+/b/c//a.aa.a./a /b/c/a.aa.a./a
+/b/c//a.aa.a./. /b/c/a.aa.a.
+/b/c//a.aa.a.// /b/c/a.aa.a.
+/b/c//a.aa.a/aa /b/c/a.aa.a/aa
+/b/c//a.aa.a/a. /b/c/a.aa.a/a.
+/b/c//a.aa.a/a/ /b/c/a.aa.a/a
+/b/c//a.aa.a/.a /b/c/a.aa.a/.a
+/b/c//a.aa.a/.. /b/c
+/b/c//a.aa.a/./ /b/c/a.aa.a
+/b/c//a.aa.a//a /b/c/a.aa.a/a
+/b/c//a.aa.a//. /b/c/a.aa.a
+/b/c//a.aa.a/// /b/c/a.aa.a
+/b/c//a.aa..aaa /b/c/a.aa..aaa
+/b/c//a.aa..aa. /b/c/a.aa..aa.
+/b/c//a.aa..aa/ /b/c/a.aa..aa
+/b/c//a.aa..a.a /b/c/a.aa..a.a
+/b/c//a.aa..a.. /b/c/a.aa..a..
+/b/c//a.aa..a./ /b/c/a.aa..a.
+/b/c//a.aa..a/a /b/c/a.aa..a/a
+/b/c//a.aa..a/. /b/c/a.aa..a
+/b/c//a.aa..a// /b/c/a.aa..a
+/b/c//a.aa...aa /b/c/a.aa...aa
+/b/c//a.aa...a. /b/c/a.aa...a.
+/b/c//a.aa...a/ /b/c/a.aa...a
+/b/c//a.aa....a /b/c/a.aa....a
+/b/c//a.aa..... /b/c/a.aa.....
+/b/c//a.aa..../ /b/c/a.aa....
+/b/c//a.aa.../a /b/c/a.aa.../a
+/b/c//a.aa.../. /b/c/a.aa...
+/b/c//a.aa...// /b/c/a.aa...
+/b/c//a.aa../aa /b/c/a.aa../aa
+/b/c//a.aa../a. /b/c/a.aa../a.
+/b/c//a.aa../a/ /b/c/a.aa../a
+/b/c//a.aa../.a /b/c/a.aa../.a
+/b/c//a.aa../.. /b/c
+/b/c//a.aa.././ /b/c/a.aa..
+/b/c//a.aa..//a /b/c/a.aa../a
+/b/c//a.aa..//. /b/c/a.aa..
+/b/c//a.aa../// /b/c/a.aa..
+/b/c//a.aa./aaa /b/c/a.aa./aaa
+/b/c//a.aa./aa. /b/c/a.aa./aa.
+/b/c//a.aa./aa/ /b/c/a.aa./aa
+/b/c//a.aa./a.a /b/c/a.aa./a.a
+/b/c//a.aa./a.. /b/c/a.aa./a..
+/b/c//a.aa./a./ /b/c/a.aa./a.
+/b/c//a.aa./a/a /b/c/a.aa./a/a
+/b/c//a.aa./a/. /b/c/a.aa./a
+/b/c//a.aa./a// /b/c/a.aa./a
+/b/c//a.aa./.aa /b/c/a.aa./.aa
+/b/c//a.aa./.a. /b/c/a.aa./.a.
+/b/c//a.aa./.a/ /b/c/a.aa./.a
+/b/c//a.aa./..a /b/c/a.aa./..a
+/b/c//a.aa./... /b/c/a.aa./...
+/b/c//a.aa./../ /b/c
+/b/c//a.aa././a /b/c/a.aa./a
+/b/c//a.aa././. /b/c/a.aa.
+/b/c//a.aa./.// /b/c/a.aa.
+/b/c//a.aa.//aa /b/c/a.aa./aa
+/b/c//a.aa.//a. /b/c/a.aa./a.
+/b/c//a.aa.//a/ /b/c/a.aa./a
+/b/c//a.aa.//.a /b/c/a.aa./.a
+/b/c//a.aa.//.. /b/c
+/b/c//a.aa.//./ /b/c/a.aa.
+/b/c//a.aa.///a /b/c/a.aa./a
+/b/c//a.aa.///. /b/c/a.aa.
+/b/c//a.aa.//// /b/c/a.aa.
+/b/c//a.aa/aaaa /b/c/a.aa/aaaa
+/b/c//a.aa/aaa. /b/c/a.aa/aaa.
+/b/c//a.aa/aaa/ /b/c/a.aa/aaa
+/b/c//a.aa/aa.a /b/c/a.aa/aa.a
+/b/c//a.aa/aa.. /b/c/a.aa/aa..
+/b/c//a.aa/aa./ /b/c/a.aa/aa.
+/b/c//a.aa/aa/a /b/c/a.aa/aa/a
+/b/c//a.aa/aa/. /b/c/a.aa/aa
+/b/c//a.aa/aa// /b/c/a.aa/aa
+/b/c//a.aa/a.aa /b/c/a.aa/a.aa
+/b/c//a.aa/a.a. /b/c/a.aa/a.a.
+/b/c//a.aa/a.a/ /b/c/a.aa/a.a
+/b/c//a.aa/a..a /b/c/a.aa/a..a
+/b/c//a.aa/a... /b/c/a.aa/a...
+/b/c//a.aa/a../ /b/c/a.aa/a..
+/b/c//a.aa/a./a /b/c/a.aa/a./a
+/b/c//a.aa/a./. /b/c/a.aa/a.
+/b/c//a.aa/a.// /b/c/a.aa/a.
+/b/c//a.aa/a/aa /b/c/a.aa/a/aa
+/b/c//a.aa/a/a. /b/c/a.aa/a/a.
+/b/c//a.aa/a/a/ /b/c/a.aa/a/a
+/b/c//a.aa/a/.a /b/c/a.aa/a/.a
+/b/c//a.aa/a/.. /b/c/a.aa
+/b/c//a.aa/a/./ /b/c/a.aa/a
+/b/c//a.aa/a//a /b/c/a.aa/a/a
+/b/c//a.aa/a//. /b/c/a.aa/a
+/b/c//a.aa/a/// /b/c/a.aa/a
+/b/c//a.aa/.aaa /b/c/a.aa/.aaa
+/b/c//a.aa/.aa. /b/c/a.aa/.aa.
+/b/c//a.aa/.aa/ /b/c/a.aa/.aa
+/b/c//a.aa/.a.a /b/c/a.aa/.a.a
+/b/c//a.aa/.a.. /b/c/a.aa/.a..
+/b/c//a.aa/.a./ /b/c/a.aa/.a.
+/b/c//a.aa/.a/a /b/c/a.aa/.a/a
+/b/c//a.aa/.a/. /b/c/a.aa/.a
+/b/c//a.aa/.a// /b/c/a.aa/.a
+/b/c//a.aa/..aa /b/c/a.aa/..aa
+/b/c//a.aa/..a. /b/c/a.aa/..a.
+/b/c//a.aa/..a/ /b/c/a.aa/..a
+/b/c//a.aa/...a /b/c/a.aa/...a
+/b/c//a.aa/.... /b/c/a.aa/....
+/b/c//a.aa/.../ /b/c/a.aa/...
+/b/c//a.aa/../a /b/c/a
+/b/c//a.aa/../. /b/c
+/b/c//a.aa/..// /b/c
+/b/c//a.aa/./aa /b/c/a.aa/aa
+/b/c//a.aa/./a. /b/c/a.aa/a.
+/b/c//a.aa/./a/ /b/c/a.aa/a
+/b/c//a.aa/./.a /b/c/a.aa/.a
+/b/c//a.aa/./.. /b/c
+/b/c//a.aa/././ /b/c/a.aa
+/b/c//a.aa/.//a /b/c/a.aa/a
+/b/c//a.aa/.//. /b/c/a.aa
+/b/c//a.aa/./// /b/c/a.aa
+/b/c//a.aa//aaa /b/c/a.aa/aaa
+/b/c//a.aa//aa. /b/c/a.aa/aa.
+/b/c//a.aa//aa/ /b/c/a.aa/aa
+/b/c//a.aa//a.a /b/c/a.aa/a.a
+/b/c//a.aa//a.. /b/c/a.aa/a..
+/b/c//a.aa//a./ /b/c/a.aa/a.
+/b/c//a.aa//a/a /b/c/a.aa/a/a
+/b/c//a.aa//a/. /b/c/a.aa/a
+/b/c//a.aa//a// /b/c/a.aa/a
+/b/c//a.aa//.aa /b/c/a.aa/.aa
+/b/c//a.aa//.a. /b/c/a.aa/.a.
+/b/c//a.aa//.a/ /b/c/a.aa/.a
+/b/c//a.aa//..a /b/c/a.aa/..a
+/b/c//a.aa//... /b/c/a.aa/...
+/b/c//a.aa//../ /b/c
+/b/c//a.aa//./a /b/c/a.aa/a
+/b/c//a.aa//./. /b/c/a.aa
+/b/c//a.aa//.// /b/c/a.aa
+/b/c//a.aa///aa /b/c/a.aa/aa
+/b/c//a.aa///a. /b/c/a.aa/a.
+/b/c//a.aa///a/ /b/c/a.aa/a
+/b/c//a.aa///.a /b/c/a.aa/.a
+/b/c//a.aa///.. /b/c
+/b/c//a.aa///./ /b/c/a.aa
+/b/c//a.aa////a /b/c/a.aa/a
+/b/c//a.aa////. /b/c/a.aa
+/b/c//a.aa///// /b/c/a.aa
+/b/c//a.a.aaaaa /b/c/a.a.aaaaa
+/b/c//a.a.aaaa. /b/c/a.a.aaaa.
+/b/c//a.a.aaaa/ /b/c/a.a.aaaa
+/b/c//a.a.aaa.a /b/c/a.a.aaa.a
+/b/c//a.a.aaa.. /b/c/a.a.aaa..
+/b/c//a.a.aaa./ /b/c/a.a.aaa.
+/b/c//a.a.aaa/a /b/c/a.a.aaa/a
+/b/c//a.a.aaa/. /b/c/a.a.aaa
+/b/c//a.a.aaa// /b/c/a.a.aaa
+/b/c//a.a.aa.aa /b/c/a.a.aa.aa
+/b/c//a.a.aa.a. /b/c/a.a.aa.a.
+/b/c//a.a.aa.a/ /b/c/a.a.aa.a
+/b/c//a.a.aa..a /b/c/a.a.aa..a
+/b/c//a.a.aa... /b/c/a.a.aa...
+/b/c//a.a.aa../ /b/c/a.a.aa..
+/b/c//a.a.aa./a /b/c/a.a.aa./a
+/b/c//a.a.aa./. /b/c/a.a.aa.
+/b/c//a.a.aa.// /b/c/a.a.aa.
+/b/c//a.a.aa/aa /b/c/a.a.aa/aa
+/b/c//a.a.aa/a. /b/c/a.a.aa/a.
+/b/c//a.a.aa/a/ /b/c/a.a.aa/a
+/b/c//a.a.aa/.a /b/c/a.a.aa/.a
+/b/c//a.a.aa/.. /b/c
+/b/c//a.a.aa/./ /b/c/a.a.aa
+/b/c//a.a.aa//a /b/c/a.a.aa/a
+/b/c//a.a.aa//. /b/c/a.a.aa
+/b/c//a.a.aa/// /b/c/a.a.aa
+/b/c//a.a.a.aaa /b/c/a.a.a.aaa
+/b/c//a.a.a.aa. /b/c/a.a.a.aa.
+/b/c//a.a.a.aa/ /b/c/a.a.a.aa
+/b/c//a.a.a.a.a /b/c/a.a.a.a.a
+/b/c//a.a.a.a.. /b/c/a.a.a.a..
+/b/c//a.a.a.a./ /b/c/a.a.a.a.
+/b/c//a.a.a.a/a /b/c/a.a.a.a/a
+/b/c//a.a.a.a/. /b/c/a.a.a.a
+/b/c//a.a.a.a// /b/c/a.a.a.a
+/b/c//a.a.a..aa /b/c/a.a.a..aa
+/b/c//a.a.a..a. /b/c/a.a.a..a.
+/b/c//a.a.a..a/ /b/c/a.a.a..a
+/b/c//a.a.a...a /b/c/a.a.a...a
+/b/c//a.a.a.... /b/c/a.a.a....
+/b/c//a.a.a.../ /b/c/a.a.a...
+/b/c//a.a.a../a /b/c/a.a.a../a
+/b/c//a.a.a../. /b/c/a.a.a..
+/b/c//a.a.a..// /b/c/a.a.a..
+/b/c//a.a.a./aa /b/c/a.a.a./aa
+/b/c//a.a.a./a. /b/c/a.a.a./a.
+/b/c//a.a.a./a/ /b/c/a.a.a./a
+/b/c//a.a.a./.a /b/c/a.a.a./.a
+/b/c//a.a.a./.. /b/c
+/b/c//a.a.a././ /b/c/a.a.a.
+/b/c//a.a.a.//a /b/c/a.a.a./a
+/b/c//a.a.a.//. /b/c/a.a.a.
+/b/c//a.a.a./// /b/c/a.a.a.
+/b/c//a.a.a/aaa /b/c/a.a.a/aaa
+/b/c//a.a.a/aa. /b/c/a.a.a/aa.
+/b/c//a.a.a/aa/ /b/c/a.a.a/aa
+/b/c//a.a.a/a.a /b/c/a.a.a/a.a
+/b/c//a.a.a/a.. /b/c/a.a.a/a..
+/b/c//a.a.a/a./ /b/c/a.a.a/a.
+/b/c//a.a.a/a/a /b/c/a.a.a/a/a
+/b/c//a.a.a/a/. /b/c/a.a.a/a
+/b/c//a.a.a/a// /b/c/a.a.a/a
+/b/c//a.a.a/.aa /b/c/a.a.a/.aa
+/b/c//a.a.a/.a. /b/c/a.a.a/.a.
+/b/c//a.a.a/.a/ /b/c/a.a.a/.a
+/b/c//a.a.a/..a /b/c/a.a.a/..a
+/b/c//a.a.a/... /b/c/a.a.a/...
+/b/c//a.a.a/../ /b/c
+/b/c//a.a.a/./a /b/c/a.a.a/a
+/b/c//a.a.a/./. /b/c/a.a.a
+/b/c//a.a.a/.// /b/c/a.a.a
+/b/c//a.a.a//aa /b/c/a.a.a/aa
+/b/c//a.a.a//a. /b/c/a.a.a/a.
+/b/c//a.a.a//a/ /b/c/a.a.a/a
+/b/c//a.a.a//.a /b/c/a.a.a/.a
+/b/c//a.a.a//.. /b/c
+/b/c//a.a.a//./ /b/c/a.a.a
+/b/c//a.a.a///a /b/c/a.a.a/a
+/b/c//a.a.a///. /b/c/a.a.a
+/b/c//a.a.a//// /b/c/a.a.a
+/b/c//a.a..aaaa /b/c/a.a..aaaa
+/b/c//a.a..aaa. /b/c/a.a..aaa.
+/b/c//a.a..aaa/ /b/c/a.a..aaa
+/b/c//a.a..aa.a /b/c/a.a..aa.a
+/b/c//a.a..aa.. /b/c/a.a..aa..
+/b/c//a.a..aa./ /b/c/a.a..aa.
+/b/c//a.a..aa/a /b/c/a.a..aa/a
+/b/c//a.a..aa/. /b/c/a.a..aa
+/b/c//a.a..aa// /b/c/a.a..aa
+/b/c//a.a..a.aa /b/c/a.a..a.aa
+/b/c//a.a..a.a. /b/c/a.a..a.a.
+/b/c//a.a..a.a/ /b/c/a.a..a.a
+/b/c//a.a..a..a /b/c/a.a..a..a
+/b/c//a.a..a... /b/c/a.a..a...
+/b/c//a.a..a../ /b/c/a.a..a..
+/b/c//a.a..a./a /b/c/a.a..a./a
+/b/c//a.a..a./. /b/c/a.a..a.
+/b/c//a.a..a.// /b/c/a.a..a.
+/b/c//a.a..a/aa /b/c/a.a..a/aa
+/b/c//a.a..a/a. /b/c/a.a..a/a.
+/b/c//a.a..a/a/ /b/c/a.a..a/a
+/b/c//a.a..a/.a /b/c/a.a..a/.a
+/b/c//a.a..a/.. /b/c
+/b/c//a.a..a/./ /b/c/a.a..a
+/b/c//a.a..a//a /b/c/a.a..a/a
+/b/c//a.a..a//. /b/c/a.a..a
+/b/c//a.a..a/// /b/c/a.a..a
+/b/c//a.a...aaa /b/c/a.a...aaa
+/b/c//a.a...aa. /b/c/a.a...aa.
+/b/c//a.a...aa/ /b/c/a.a...aa
+/b/c//a.a...a.a /b/c/a.a...a.a
+/b/c//a.a...a.. /b/c/a.a...a..
+/b/c//a.a...a./ /b/c/a.a...a.
+/b/c//a.a...a/a /b/c/a.a...a/a
+/b/c//a.a...a/. /b/c/a.a...a
+/b/c//a.a...a// /b/c/a.a...a
+/b/c//a.a....aa /b/c/a.a....aa
+/b/c//a.a....a. /b/c/a.a....a.
+/b/c//a.a....a/ /b/c/a.a....a
+/b/c//a.a.....a /b/c/a.a.....a
+/b/c//a.a...... /b/c/a.a......
+/b/c//a.a...../ /b/c/a.a.....
+/b/c//a.a..../a /b/c/a.a..../a
+/b/c//a.a..../. /b/c/a.a....
+/b/c//a.a....// /b/c/a.a....
+/b/c//a.a.../aa /b/c/a.a.../aa
+/b/c//a.a.../a. /b/c/a.a.../a.
+/b/c//a.a.../a/ /b/c/a.a.../a
+/b/c//a.a.../.a /b/c/a.a.../.a
+/b/c//a.a.../.. /b/c
+/b/c//a.a..././ /b/c/a.a...
+/b/c//a.a...//a /b/c/a.a.../a
+/b/c//a.a...//. /b/c/a.a...
+/b/c//a.a.../// /b/c/a.a...
+/b/c//a.a../aaa /b/c/a.a../aaa
+/b/c//a.a../aa. /b/c/a.a../aa.
+/b/c//a.a../aa/ /b/c/a.a../aa
+/b/c//a.a../a.a /b/c/a.a../a.a
+/b/c//a.a../a.. /b/c/a.a../a..
+/b/c//a.a../a./ /b/c/a.a../a.
+/b/c//a.a../a/a /b/c/a.a../a/a
+/b/c//a.a../a/. /b/c/a.a../a
+/b/c//a.a../a// /b/c/a.a../a
+/b/c//a.a../.aa /b/c/a.a../.aa
+/b/c//a.a../.a. /b/c/a.a../.a.
+/b/c//a.a../.a/ /b/c/a.a../.a
+/b/c//a.a../..a /b/c/a.a../..a
+/b/c//a.a../... /b/c/a.a../...
+/b/c//a.a../../ /b/c
+/b/c//a.a.././a /b/c/a.a../a
+/b/c//a.a.././. /b/c/a.a..
+/b/c//a.a../.// /b/c/a.a..
+/b/c//a.a..//aa /b/c/a.a../aa
+/b/c//a.a..//a. /b/c/a.a../a.
+/b/c//a.a..//a/ /b/c/a.a../a
+/b/c//a.a..//.a /b/c/a.a../.a
+/b/c//a.a..//.. /b/c
+/b/c//a.a..//./ /b/c/a.a..
+/b/c//a.a..///a /b/c/a.a../a
+/b/c//a.a..///. /b/c/a.a..
+/b/c//a.a..//// /b/c/a.a..
+/b/c//a.a./aaaa /b/c/a.a./aaaa
+/b/c//a.a./aaa. /b/c/a.a./aaa.
+/b/c//a.a./aaa/ /b/c/a.a./aaa
+/b/c//a.a./aa.a /b/c/a.a./aa.a
+/b/c//a.a./aa.. /b/c/a.a./aa..
+/b/c//a.a./aa./ /b/c/a.a./aa.
+/b/c//a.a./aa/a /b/c/a.a./aa/a
+/b/c//a.a./aa/. /b/c/a.a./aa
+/b/c//a.a./aa// /b/c/a.a./aa
+/b/c//a.a./a.aa /b/c/a.a./a.aa
+/b/c//a.a./a.a. /b/c/a.a./a.a.
+/b/c//a.a./a.a/ /b/c/a.a./a.a
+/b/c//a.a./a..a /b/c/a.a./a..a
+/b/c//a.a./a... /b/c/a.a./a...
+/b/c//a.a./a../ /b/c/a.a./a..
+/b/c//a.a./a./a /b/c/a.a./a./a
+/b/c//a.a./a./. /b/c/a.a./a.
+/b/c//a.a./a.// /b/c/a.a./a.
+/b/c//a.a./a/aa /b/c/a.a./a/aa
+/b/c//a.a./a/a. /b/c/a.a./a/a.
+/b/c//a.a./a/a/ /b/c/a.a./a/a
+/b/c//a.a./a/.a /b/c/a.a./a/.a
+/b/c//a.a./a/.. /b/c/a.a.
+/b/c//a.a./a/./ /b/c/a.a./a
+/b/c//a.a./a//a /b/c/a.a./a/a
+/b/c//a.a./a//. /b/c/a.a./a
+/b/c//a.a./a/// /b/c/a.a./a
+/b/c//a.a./.aaa /b/c/a.a./.aaa
+/b/c//a.a./.aa. /b/c/a.a./.aa.
+/b/c//a.a./.aa/ /b/c/a.a./.aa
+/b/c//a.a./.a.a /b/c/a.a./.a.a
+/b/c//a.a./.a.. /b/c/a.a./.a..
+/b/c//a.a./.a./ /b/c/a.a./.a.
+/b/c//a.a./.a/a /b/c/a.a./.a/a
+/b/c//a.a./.a/. /b/c/a.a./.a
+/b/c//a.a./.a// /b/c/a.a./.a
+/b/c//a.a./..aa /b/c/a.a./..aa
+/b/c//a.a./..a. /b/c/a.a./..a.
+/b/c//a.a./..a/ /b/c/a.a./..a
+/b/c//a.a./...a /b/c/a.a./...a
+/b/c//a.a./.... /b/c/a.a./....
+/b/c//a.a./.../ /b/c/a.a./...
+/b/c//a.a./../a /b/c/a
+/b/c//a.a./../. /b/c
+/b/c//a.a./..// /b/c
+/b/c//a.a././aa /b/c/a.a./aa
+/b/c//a.a././a. /b/c/a.a./a.
+/b/c//a.a././a/ /b/c/a.a./a
+/b/c//a.a././.a /b/c/a.a./.a
+/b/c//a.a././.. /b/c
+/b/c//a.a./././ /b/c/a.a.
+/b/c//a.a././/a /b/c/a.a./a
+/b/c//a.a././/. /b/c/a.a.
+/b/c//a.a././// /b/c/a.a.
+/b/c//a.a.//aaa /b/c/a.a./aaa
+/b/c//a.a.//aa. /b/c/a.a./aa.
+/b/c//a.a.//aa/ /b/c/a.a./aa
+/b/c//a.a.//a.a /b/c/a.a./a.a
+/b/c//a.a.//a.. /b/c/a.a./a..
+/b/c//a.a.//a./ /b/c/a.a./a.
+/b/c//a.a.//a/a /b/c/a.a./a/a
+/b/c//a.a.//a/. /b/c/a.a./a
+/b/c//a.a.//a// /b/c/a.a./a
+/b/c//a.a.//.aa /b/c/a.a./.aa
+/b/c//a.a.//.a. /b/c/a.a./.a.
+/b/c//a.a.//.a/ /b/c/a.a./.a
+/b/c//a.a.//..a /b/c/a.a./..a
+/b/c//a.a.//... /b/c/a.a./...
+/b/c//a.a.//../ /b/c
+/b/c//a.a.//./a /b/c/a.a./a
+/b/c//a.a.//./. /b/c/a.a.
+/b/c//a.a.//.// /b/c/a.a.
+/b/c//a.a.///aa /b/c/a.a./aa
+/b/c//a.a.///a. /b/c/a.a./a.
+/b/c//a.a.///a/ /b/c/a.a./a
+/b/c//a.a.///.a /b/c/a.a./.a
+/b/c//a.a.///.. /b/c
+/b/c//a.a.///./ /b/c/a.a.
+/b/c//a.a.////a /b/c/a.a./a
+/b/c//a.a.////. /b/c/a.a.
+/b/c//a.a.///// /b/c/a.a.
+/b/c//a.a/aaaaa /b/c/a.a/aaaaa
+/b/c//a.a/aaaa. /b/c/a.a/aaaa.
+/b/c//a.a/aaaa/ /b/c/a.a/aaaa
+/b/c//a.a/aaa.a /b/c/a.a/aaa.a
+/b/c//a.a/aaa.. /b/c/a.a/aaa..
+/b/c//a.a/aaa./ /b/c/a.a/aaa.
+/b/c//a.a/aaa/a /b/c/a.a/aaa/a
+/b/c//a.a/aaa/. /b/c/a.a/aaa
+/b/c//a.a/aaa// /b/c/a.a/aaa
+/b/c//a.a/aa.aa /b/c/a.a/aa.aa
+/b/c//a.a/aa.a. /b/c/a.a/aa.a.
+/b/c//a.a/aa.a/ /b/c/a.a/aa.a
+/b/c//a.a/aa..a /b/c/a.a/aa..a
+/b/c//a.a/aa... /b/c/a.a/aa...
+/b/c//a.a/aa../ /b/c/a.a/aa..
+/b/c//a.a/aa./a /b/c/a.a/aa./a
+/b/c//a.a/aa./. /b/c/a.a/aa.
+/b/c//a.a/aa.// /b/c/a.a/aa.
+/b/c//a.a/aa/aa /b/c/a.a/aa/aa
+/b/c//a.a/aa/a. /b/c/a.a/aa/a.
+/b/c//a.a/aa/a/ /b/c/a.a/aa/a
+/b/c//a.a/aa/.a /b/c/a.a/aa/.a
+/b/c//a.a/aa/.. /b/c/a.a
+/b/c//a.a/aa/./ /b/c/a.a/aa
+/b/c//a.a/aa//a /b/c/a.a/aa/a
+/b/c//a.a/aa//. /b/c/a.a/aa
+/b/c//a.a/aa/// /b/c/a.a/aa
+/b/c//a.a/a.aaa /b/c/a.a/a.aaa
+/b/c//a.a/a.aa. /b/c/a.a/a.aa.
+/b/c//a.a/a.aa/ /b/c/a.a/a.aa
+/b/c//a.a/a.a.a /b/c/a.a/a.a.a
+/b/c//a.a/a.a.. /b/c/a.a/a.a..
+/b/c//a.a/a.a./ /b/c/a.a/a.a.
+/b/c//a.a/a.a/a /b/c/a.a/a.a/a
+/b/c//a.a/a.a/. /b/c/a.a/a.a
+/b/c//a.a/a.a// /b/c/a.a/a.a
+/b/c//a.a/a..aa /b/c/a.a/a..aa
+/b/c//a.a/a..a. /b/c/a.a/a..a.
+/b/c//a.a/a..a/ /b/c/a.a/a..a
+/b/c//a.a/a...a /b/c/a.a/a...a
+/b/c//a.a/a.... /b/c/a.a/a....
+/b/c//a.a/a.../ /b/c/a.a/a...
+/b/c//a.a/a../a /b/c/a.a/a../a
+/b/c//a.a/a../. /b/c/a.a/a..
+/b/c//a.a/a..// /b/c/a.a/a..
+/b/c//a.a/a./aa /b/c/a.a/a./aa
+/b/c//a.a/a./a. /b/c/a.a/a./a.
+/b/c//a.a/a./a/ /b/c/a.a/a./a
+/b/c//a.a/a./.a /b/c/a.a/a./.a
+/b/c//a.a/a./.. /b/c/a.a
+/b/c//a.a/a././ /b/c/a.a/a.
+/b/c//a.a/a.//a /b/c/a.a/a./a
+/b/c//a.a/a.//. /b/c/a.a/a.
+/b/c//a.a/a./// /b/c/a.a/a.
+/b/c//a.a/a/aaa /b/c/a.a/a/aaa
+/b/c//a.a/a/aa. /b/c/a.a/a/aa.
+/b/c//a.a/a/aa/ /b/c/a.a/a/aa
+/b/c//a.a/a/a.a /b/c/a.a/a/a.a
+/b/c//a.a/a/a.. /b/c/a.a/a/a..
+/b/c//a.a/a/a./ /b/c/a.a/a/a.
+/b/c//a.a/a/a/a /b/c/a.a/a/a/a
+/b/c//a.a/a/a/. /b/c/a.a/a/a
+/b/c//a.a/a/a// /b/c/a.a/a/a
+/b/c//a.a/a/.aa /b/c/a.a/a/.aa
+/b/c//a.a/a/.a. /b/c/a.a/a/.a.
+/b/c//a.a/a/.a/ /b/c/a.a/a/.a
+/b/c//a.a/a/..a /b/c/a.a/a/..a
+/b/c//a.a/a/... /b/c/a.a/a/...
+/b/c//a.a/a/../ /b/c/a.a
+/b/c//a.a/a/./a /b/c/a.a/a/a
+/b/c//a.a/a/./. /b/c/a.a/a
+/b/c//a.a/a/.// /b/c/a.a/a
+/b/c//a.a/a//aa /b/c/a.a/a/aa
+/b/c//a.a/a//a. /b/c/a.a/a/a.
+/b/c//a.a/a//a/ /b/c/a.a/a/a
+/b/c//a.a/a//.a /b/c/a.a/a/.a
+/b/c//a.a/a//.. /b/c/a.a
+/b/c//a.a/a//./ /b/c/a.a/a
+/b/c//a.a/a///a /b/c/a.a/a/a
+/b/c//a.a/a///. /b/c/a.a/a
+/b/c//a.a/a//// /b/c/a.a/a
+/b/c//a.a/.aaaa /b/c/a.a/.aaaa
+/b/c//a.a/.aaa. /b/c/a.a/.aaa.
+/b/c//a.a/.aaa/ /b/c/a.a/.aaa
+/b/c//a.a/.aa.a /b/c/a.a/.aa.a
+/b/c//a.a/.aa.. /b/c/a.a/.aa..
+/b/c//a.a/.aa./ /b/c/a.a/.aa.
+/b/c//a.a/.aa/a /b/c/a.a/.aa/a
+/b/c//a.a/.aa/. /b/c/a.a/.aa
+/b/c//a.a/.aa// /b/c/a.a/.aa
+/b/c//a.a/.a.aa /b/c/a.a/.a.aa
+/b/c//a.a/.a.a. /b/c/a.a/.a.a.
+/b/c//a.a/.a.a/ /b/c/a.a/.a.a
+/b/c//a.a/.a..a /b/c/a.a/.a..a
+/b/c//a.a/.a... /b/c/a.a/.a...
+/b/c//a.a/.a../ /b/c/a.a/.a..
+/b/c//a.a/.a./a /b/c/a.a/.a./a
+/b/c//a.a/.a./. /b/c/a.a/.a.
+/b/c//a.a/.a.// /b/c/a.a/.a.
+/b/c//a.a/.a/aa /b/c/a.a/.a/aa
+/b/c//a.a/.a/a. /b/c/a.a/.a/a.
+/b/c//a.a/.a/a/ /b/c/a.a/.a/a
+/b/c//a.a/.a/.a /b/c/a.a/.a/.a
+/b/c//a.a/.a/.. /b/c/a.a
+/b/c//a.a/.a/./ /b/c/a.a/.a
+/b/c//a.a/.a//a /b/c/a.a/.a/a
+/b/c//a.a/.a//. /b/c/a.a/.a
+/b/c//a.a/.a/// /b/c/a.a/.a
+/b/c//a.a/..aaa /b/c/a.a/..aaa
+/b/c//a.a/..aa. /b/c/a.a/..aa.
+/b/c//a.a/..aa/ /b/c/a.a/..aa
+/b/c//a.a/..a.a /b/c/a.a/..a.a
+/b/c//a.a/..a.. /b/c/a.a/..a..
+/b/c//a.a/..a./ /b/c/a.a/..a.
+/b/c//a.a/..a/a /b/c/a.a/..a/a
+/b/c//a.a/..a/. /b/c/a.a/..a
+/b/c//a.a/..a// /b/c/a.a/..a
+/b/c//a.a/...aa /b/c/a.a/...aa
+/b/c//a.a/...a. /b/c/a.a/...a.
+/b/c//a.a/...a/ /b/c/a.a/...a
+/b/c//a.a/....a /b/c/a.a/....a
+/b/c//a.a/..... /b/c/a.a/.....
+/b/c//a.a/..../ /b/c/a.a/....
+/b/c//a.a/.../a /b/c/a.a/.../a
+/b/c//a.a/.../. /b/c/a.a/...
+/b/c//a.a/...// /b/c/a.a/...
+/b/c//a.a/../aa /b/c/aa
+/b/c//a.a/../a. /b/c/a.
+/b/c//a.a/../a/ /b/c/a
+/b/c//a.a/../.a /b/c/.a
+/b/c//a.a/../.. /b
+/b/c//a.a/.././ /b/c
+/b/c//a.a/..//a /b/c/a
+/b/c//a.a/..//. /b/c
+/b/c//a.a/../// /b/c
+/b/c//a.a/./aaa /b/c/a.a/aaa
+/b/c//a.a/./aa. /b/c/a.a/aa.
+/b/c//a.a/./aa/ /b/c/a.a/aa
+/b/c//a.a/./a.a /b/c/a.a/a.a
+/b/c//a.a/./a.. /b/c/a.a/a..
+/b/c//a.a/./a./ /b/c/a.a/a.
+/b/c//a.a/./a/a /b/c/a.a/a/a
+/b/c//a.a/./a/. /b/c/a.a/a
+/b/c//a.a/./a// /b/c/a.a/a
+/b/c//a.a/./.aa /b/c/a.a/.aa
+/b/c//a.a/./.a. /b/c/a.a/.a.
+/b/c//a.a/./.a/ /b/c/a.a/.a
+/b/c//a.a/./..a /b/c/a.a/..a
+/b/c//a.a/./... /b/c/a.a/...
+/b/c//a.a/./../ /b/c
+/b/c//a.a/././a /b/c/a.a/a
+/b/c//a.a/././. /b/c/a.a
+/b/c//a.a/./.// /b/c/a.a
+/b/c//a.a/.//aa /b/c/a.a/aa
+/b/c//a.a/.//a. /b/c/a.a/a.
+/b/c//a.a/.//a/ /b/c/a.a/a
+/b/c//a.a/.//.a /b/c/a.a/.a
+/b/c//a.a/.//.. /b/c
+/b/c//a.a/.//./ /b/c/a.a
+/b/c//a.a/.///a /b/c/a.a/a
+/b/c//a.a/.///. /b/c/a.a
+/b/c//a.a/.//// /b/c/a.a
+/b/c//a.a//aaaa /b/c/a.a/aaaa
+/b/c//a.a//aaa. /b/c/a.a/aaa.
+/b/c//a.a//aaa/ /b/c/a.a/aaa
+/b/c//a.a//aa.a /b/c/a.a/aa.a
+/b/c//a.a//aa.. /b/c/a.a/aa..
+/b/c//a.a//aa./ /b/c/a.a/aa.
+/b/c//a.a//aa/a /b/c/a.a/aa/a
+/b/c//a.a//aa/. /b/c/a.a/aa
+/b/c//a.a//aa// /b/c/a.a/aa
+/b/c//a.a//a.aa /b/c/a.a/a.aa
+/b/c//a.a//a.a. /b/c/a.a/a.a.
+/b/c//a.a//a.a/ /b/c/a.a/a.a
+/b/c//a.a//a..a /b/c/a.a/a..a
+/b/c//a.a//a... /b/c/a.a/a...
+/b/c//a.a//a../ /b/c/a.a/a..
+/b/c//a.a//a./a /b/c/a.a/a./a
+/b/c//a.a//a./. /b/c/a.a/a.
+/b/c//a.a//a.// /b/c/a.a/a.
+/b/c//a.a//a/aa /b/c/a.a/a/aa
+/b/c//a.a//a/a. /b/c/a.a/a/a.
+/b/c//a.a//a/a/ /b/c/a.a/a/a
+/b/c//a.a//a/.a /b/c/a.a/a/.a
+/b/c//a.a//a/.. /b/c/a.a
+/b/c//a.a//a/./ /b/c/a.a/a
+/b/c//a.a//a//a /b/c/a.a/a/a
+/b/c//a.a//a//. /b/c/a.a/a
+/b/c//a.a//a/// /b/c/a.a/a
+/b/c//a.a//.aaa /b/c/a.a/.aaa
+/b/c//a.a//.aa. /b/c/a.a/.aa.
+/b/c//a.a//.aa/ /b/c/a.a/.aa
+/b/c//a.a//.a.a /b/c/a.a/.a.a
+/b/c//a.a//.a.. /b/c/a.a/.a..
+/b/c//a.a//.a./ /b/c/a.a/.a.
+/b/c//a.a//.a/a /b/c/a.a/.a/a
+/b/c//a.a//.a/. /b/c/a.a/.a
+/b/c//a.a//.a// /b/c/a.a/.a
+/b/c//a.a//..aa /b/c/a.a/..aa
+/b/c//a.a//..a. /b/c/a.a/..a.
+/b/c//a.a//..a/ /b/c/a.a/..a
+/b/c//a.a//...a /b/c/a.a/...a
+/b/c//a.a//.... /b/c/a.a/....
+/b/c//a.a//.../ /b/c/a.a/...
+/b/c//a.a//../a /b/c/a
+/b/c//a.a//../. /b/c
+/b/c//a.a//..// /b/c
+/b/c//a.a//./aa /b/c/a.a/aa
+/b/c//a.a//./a. /b/c/a.a/a.
+/b/c//a.a//./a/ /b/c/a.a/a
+/b/c//a.a//./.a /b/c/a.a/.a
+/b/c//a.a//./.. /b/c
+/b/c//a.a//././ /b/c/a.a
+/b/c//a.a//.//a /b/c/a.a/a
+/b/c//a.a//.//. /b/c/a.a
+/b/c//a.a//./// /b/c/a.a
+/b/c//a.a///aaa /b/c/a.a/aaa
+/b/c//a.a///aa. /b/c/a.a/aa.
+/b/c//a.a///aa/ /b/c/a.a/aa
+/b/c//a.a///a.a /b/c/a.a/a.a
+/b/c//a.a///a.. /b/c/a.a/a..
+/b/c//a.a///a./ /b/c/a.a/a.
+/b/c//a.a///a/a /b/c/a.a/a/a
+/b/c//a.a///a/. /b/c/a.a/a
+/b/c//a.a///a// /b/c/a.a/a
+/b/c//a.a///.aa /b/c/a.a/.aa
+/b/c//a.a///.a. /b/c/a.a/.a.
+/b/c//a.a///.a/ /b/c/a.a/.a
+/b/c//a.a///..a /b/c/a.a/..a
+/b/c//a.a///... /b/c/a.a/...
+/b/c//a.a///../ /b/c
+/b/c//a.a///./a /b/c/a.a/a
+/b/c//a.a///./. /b/c/a.a
+/b/c//a.a///.// /b/c/a.a
+/b/c//a.a////aa /b/c/a.a/aa
+/b/c//a.a////a. /b/c/a.a/a.
+/b/c//a.a////a/ /b/c/a.a/a
+/b/c//a.a////.a /b/c/a.a/.a
+/b/c//a.a////.. /b/c
+/b/c//a.a////./ /b/c/a.a
+/b/c//a.a/////a /b/c/a.a/a
+/b/c//a.a/////. /b/c/a.a
+/b/c//a.a////// /b/c/a.a
+/b/c//a..aaaaaa /b/c/a..aaaaaa
+/b/c//a..aaaaa. /b/c/a..aaaaa.
+/b/c//a..aaaaa/ /b/c/a..aaaaa
+/b/c//a..aaaa.a /b/c/a..aaaa.a
+/b/c//a..aaaa.. /b/c/a..aaaa..
+/b/c//a..aaaa./ /b/c/a..aaaa.
+/b/c//a..aaaa/a /b/c/a..aaaa/a
+/b/c//a..aaaa/. /b/c/a..aaaa
+/b/c//a..aaaa// /b/c/a..aaaa
+/b/c//a..aaa.aa /b/c/a..aaa.aa
+/b/c//a..aaa.a. /b/c/a..aaa.a.
+/b/c//a..aaa.a/ /b/c/a..aaa.a
+/b/c//a..aaa..a /b/c/a..aaa..a
+/b/c//a..aaa... /b/c/a..aaa...
+/b/c//a..aaa../ /b/c/a..aaa..
+/b/c//a..aaa./a /b/c/a..aaa./a
+/b/c//a..aaa./. /b/c/a..aaa.
+/b/c//a..aaa.// /b/c/a..aaa.
+/b/c//a..aaa/aa /b/c/a..aaa/aa
+/b/c//a..aaa/a. /b/c/a..aaa/a.
+/b/c//a..aaa/a/ /b/c/a..aaa/a
+/b/c//a..aaa/.a /b/c/a..aaa/.a
+/b/c//a..aaa/.. /b/c
+/b/c//a..aaa/./ /b/c/a..aaa
+/b/c//a..aaa//a /b/c/a..aaa/a
+/b/c//a..aaa//. /b/c/a..aaa
+/b/c//a..aaa/// /b/c/a..aaa
+/b/c//a..aa.aaa /b/c/a..aa.aaa
+/b/c//a..aa.aa. /b/c/a..aa.aa.
+/b/c//a..aa.aa/ /b/c/a..aa.aa
+/b/c//a..aa.a.a /b/c/a..aa.a.a
+/b/c//a..aa.a.. /b/c/a..aa.a..
+/b/c//a..aa.a./ /b/c/a..aa.a.
+/b/c//a..aa.a/a /b/c/a..aa.a/a
+/b/c//a..aa.a/. /b/c/a..aa.a
+/b/c//a..aa.a// /b/c/a..aa.a
+/b/c//a..aa..aa /b/c/a..aa..aa
+/b/c//a..aa..a. /b/c/a..aa..a.
+/b/c//a..aa..a/ /b/c/a..aa..a
+/b/c//a..aa...a /b/c/a..aa...a
+/b/c//a..aa.... /b/c/a..aa....
+/b/c//a..aa.../ /b/c/a..aa...
+/b/c//a..aa../a /b/c/a..aa../a
+/b/c//a..aa../. /b/c/a..aa..
+/b/c//a..aa..// /b/c/a..aa..
+/b/c//a..aa./aa /b/c/a..aa./aa
+/b/c//a..aa./a. /b/c/a..aa./a.
+/b/c//a..aa./a/ /b/c/a..aa./a
+/b/c//a..aa./.a /b/c/a..aa./.a
+/b/c//a..aa./.. /b/c
+/b/c//a..aa././ /b/c/a..aa.
+/b/c//a..aa.//a /b/c/a..aa./a
+/b/c//a..aa.//. /b/c/a..aa.
+/b/c//a..aa./// /b/c/a..aa.
+/b/c//a..aa/aaa /b/c/a..aa/aaa
+/b/c//a..aa/aa. /b/c/a..aa/aa.
+/b/c//a..aa/aa/ /b/c/a..aa/aa
+/b/c//a..aa/a.a /b/c/a..aa/a.a
+/b/c//a..aa/a.. /b/c/a..aa/a..
+/b/c//a..aa/a./ /b/c/a..aa/a.
+/b/c//a..aa/a/a /b/c/a..aa/a/a
+/b/c//a..aa/a/. /b/c/a..aa/a
+/b/c//a..aa/a// /b/c/a..aa/a
+/b/c//a..aa/.aa /b/c/a..aa/.aa
+/b/c//a..aa/.a. /b/c/a..aa/.a.
+/b/c//a..aa/.a/ /b/c/a..aa/.a
+/b/c//a..aa/..a /b/c/a..aa/..a
+/b/c//a..aa/... /b/c/a..aa/...
+/b/c//a..aa/../ /b/c
+/b/c//a..aa/./a /b/c/a..aa/a
+/b/c//a..aa/./. /b/c/a..aa
+/b/c//a..aa/.// /b/c/a..aa
+/b/c//a..aa//aa /b/c/a..aa/aa
+/b/c//a..aa//a. /b/c/a..aa/a.
+/b/c//a..aa//a/ /b/c/a..aa/a
+/b/c//a..aa//.a /b/c/a..aa/.a
+/b/c//a..aa//.. /b/c
+/b/c//a..aa//./ /b/c/a..aa
+/b/c//a..aa///a /b/c/a..aa/a
+/b/c//a..aa///. /b/c/a..aa
+/b/c//a..aa//// /b/c/a..aa
+/b/c//a..a.aaaa /b/c/a..a.aaaa
+/b/c//a..a.aaa. /b/c/a..a.aaa.
+/b/c//a..a.aaa/ /b/c/a..a.aaa
+/b/c//a..a.aa.a /b/c/a..a.aa.a
+/b/c//a..a.aa.. /b/c/a..a.aa..
+/b/c//a..a.aa./ /b/c/a..a.aa.
+/b/c//a..a.aa/a /b/c/a..a.aa/a
+/b/c//a..a.aa/. /b/c/a..a.aa
+/b/c//a..a.aa// /b/c/a..a.aa
+/b/c//a..a.a.aa /b/c/a..a.a.aa
+/b/c//a..a.a.a. /b/c/a..a.a.a.
+/b/c//a..a.a.a/ /b/c/a..a.a.a
+/b/c//a..a.a..a /b/c/a..a.a..a
+/b/c//a..a.a... /b/c/a..a.a...
+/b/c//a..a.a../ /b/c/a..a.a..
+/b/c//a..a.a./a /b/c/a..a.a./a
+/b/c//a..a.a./. /b/c/a..a.a.
+/b/c//a..a.a.// /b/c/a..a.a.
+/b/c//a..a.a/aa /b/c/a..a.a/aa
+/b/c//a..a.a/a. /b/c/a..a.a/a.
+/b/c//a..a.a/a/ /b/c/a..a.a/a
+/b/c//a..a.a/.a /b/c/a..a.a/.a
+/b/c//a..a.a/.. /b/c
+/b/c//a..a.a/./ /b/c/a..a.a
+/b/c//a..a.a//a /b/c/a..a.a/a
+/b/c//a..a.a//. /b/c/a..a.a
+/b/c//a..a.a/// /b/c/a..a.a
+/b/c//a..a..aaa /b/c/a..a..aaa
+/b/c//a..a..aa. /b/c/a..a..aa.
+/b/c//a..a..aa/ /b/c/a..a..aa
+/b/c//a..a..a.a /b/c/a..a..a.a
+/b/c//a..a..a.. /b/c/a..a..a..
+/b/c//a..a..a./ /b/c/a..a..a.
+/b/c//a..a..a/a /b/c/a..a..a/a
+/b/c//a..a..a/. /b/c/a..a..a
+/b/c//a..a..a// /b/c/a..a..a
+/b/c//a..a...aa /b/c/a..a...aa
+/b/c//a..a...a. /b/c/a..a...a.
+/b/c//a..a...a/ /b/c/a..a...a
+/b/c//a..a....a /b/c/a..a....a
+/b/c//a..a..... /b/c/a..a.....
+/b/c//a..a..../ /b/c/a..a....
+/b/c//a..a.../a /b/c/a..a.../a
+/b/c//a..a.../. /b/c/a..a...
+/b/c//a..a...// /b/c/a..a...
+/b/c//a..a../aa /b/c/a..a../aa
+/b/c//a..a../a. /b/c/a..a../a.
+/b/c//a..a../a/ /b/c/a..a../a
+/b/c//a..a../.a /b/c/a..a../.a
+/b/c//a..a../.. /b/c
+/b/c//a..a.././ /b/c/a..a..
+/b/c//a..a..//a /b/c/a..a../a
+/b/c//a..a..//. /b/c/a..a..
+/b/c//a..a../// /b/c/a..a..
+/b/c//a..a./aaa /b/c/a..a./aaa
+/b/c//a..a./aa. /b/c/a..a./aa.
+/b/c//a..a./aa/ /b/c/a..a./aa
+/b/c//a..a./a.a /b/c/a..a./a.a
+/b/c//a..a./a.. /b/c/a..a./a..
+/b/c//a..a./a./ /b/c/a..a./a.
+/b/c//a..a./a/a /b/c/a..a./a/a
+/b/c//a..a./a/. /b/c/a..a./a
+/b/c//a..a./a// /b/c/a..a./a
+/b/c//a..a./.aa /b/c/a..a./.aa
+/b/c//a..a./.a. /b/c/a..a./.a.
+/b/c//a..a./.a/ /b/c/a..a./.a
+/b/c//a..a./..a /b/c/a..a./..a
+/b/c//a..a./... /b/c/a..a./...
+/b/c//a..a./../ /b/c
+/b/c//a..a././a /b/c/a..a./a
+/b/c//a..a././. /b/c/a..a.
+/b/c//a..a./.// /b/c/a..a.
+/b/c//a..a.//aa /b/c/a..a./aa
+/b/c//a..a.//a. /b/c/a..a./a.
+/b/c//a..a.//a/ /b/c/a..a./a
+/b/c//a..a.//.a /b/c/a..a./.a
+/b/c//a..a.//.. /b/c
+/b/c//a..a.//./ /b/c/a..a.
+/b/c//a..a.///a /b/c/a..a./a
+/b/c//a..a.///. /b/c/a..a.
+/b/c//a..a.//// /b/c/a..a.
+/b/c//a..a/aaaa /b/c/a..a/aaaa
+/b/c//a..a/aaa. /b/c/a..a/aaa.
+/b/c//a..a/aaa/ /b/c/a..a/aaa
+/b/c//a..a/aa.a /b/c/a..a/aa.a
+/b/c//a..a/aa.. /b/c/a..a/aa..
+/b/c//a..a/aa./ /b/c/a..a/aa.
+/b/c//a..a/aa/a /b/c/a..a/aa/a
+/b/c//a..a/aa/. /b/c/a..a/aa
+/b/c//a..a/aa// /b/c/a..a/aa
+/b/c//a..a/a.aa /b/c/a..a/a.aa
+/b/c//a..a/a.a. /b/c/a..a/a.a.
+/b/c//a..a/a.a/ /b/c/a..a/a.a
+/b/c//a..a/a..a /b/c/a..a/a..a
+/b/c//a..a/a... /b/c/a..a/a...
+/b/c//a..a/a../ /b/c/a..a/a..
+/b/c//a..a/a./a /b/c/a..a/a./a
+/b/c//a..a/a./. /b/c/a..a/a.
+/b/c//a..a/a.// /b/c/a..a/a.
+/b/c//a..a/a/aa /b/c/a..a/a/aa
+/b/c//a..a/a/a. /b/c/a..a/a/a.
+/b/c//a..a/a/a/ /b/c/a..a/a/a
+/b/c//a..a/a/.a /b/c/a..a/a/.a
+/b/c//a..a/a/.. /b/c/a..a
+/b/c//a..a/a/./ /b/c/a..a/a
+/b/c//a..a/a//a /b/c/a..a/a/a
+/b/c//a..a/a//. /b/c/a..a/a
+/b/c//a..a/a/// /b/c/a..a/a
+/b/c//a..a/.aaa /b/c/a..a/.aaa
+/b/c//a..a/.aa. /b/c/a..a/.aa.
+/b/c//a..a/.aa/ /b/c/a..a/.aa
+/b/c//a..a/.a.a /b/c/a..a/.a.a
+/b/c//a..a/.a.. /b/c/a..a/.a..
+/b/c//a..a/.a./ /b/c/a..a/.a.
+/b/c//a..a/.a/a /b/c/a..a/.a/a
+/b/c//a..a/.a/. /b/c/a..a/.a
+/b/c//a..a/.a// /b/c/a..a/.a
+/b/c//a..a/..aa /b/c/a..a/..aa
+/b/c//a..a/..a. /b/c/a..a/..a.
+/b/c//a..a/..a/ /b/c/a..a/..a
+/b/c//a..a/...a /b/c/a..a/...a
+/b/c//a..a/.... /b/c/a..a/....
+/b/c//a..a/.../ /b/c/a..a/...
+/b/c//a..a/../a /b/c/a
+/b/c//a..a/../. /b/c
+/b/c//a..a/..// /b/c
+/b/c//a..a/./aa /b/c/a..a/aa
+/b/c//a..a/./a. /b/c/a..a/a.
+/b/c//a..a/./a/ /b/c/a..a/a
+/b/c//a..a/./.a /b/c/a..a/.a
+/b/c//a..a/./.. /b/c
+/b/c//a..a/././ /b/c/a..a
+/b/c//a..a/.//a /b/c/a..a/a
+/b/c//a..a/.//. /b/c/a..a
+/b/c//a..a/./// /b/c/a..a
+/b/c//a..a//aaa /b/c/a..a/aaa
+/b/c//a..a//aa. /b/c/a..a/aa.
+/b/c//a..a//aa/ /b/c/a..a/aa
+/b/c//a..a//a.a /b/c/a..a/a.a
+/b/c//a..a//a.. /b/c/a..a/a..
+/b/c//a..a//a./ /b/c/a..a/a.
+/b/c//a..a//a/a /b/c/a..a/a/a
+/b/c//a..a//a/. /b/c/a..a/a
+/b/c//a..a//a// /b/c/a..a/a
+/b/c//a..a//.aa /b/c/a..a/.aa
+/b/c//a..a//.a. /b/c/a..a/.a.
+/b/c//a..a//.a/ /b/c/a..a/.a
+/b/c//a..a//..a /b/c/a..a/..a
+/b/c//a..a//... /b/c/a..a/...
+/b/c//a..a//../ /b/c
+/b/c//a..a//./a /b/c/a..a/a
+/b/c//a..a//./. /b/c/a..a
+/b/c//a..a//.// /b/c/a..a
+/b/c//a..a///aa /b/c/a..a/aa
+/b/c//a..a///a. /b/c/a..a/a.
+/b/c//a..a///a/ /b/c/a..a/a
+/b/c//a..a///.a /b/c/a..a/.a
+/b/c//a..a///.. /b/c
+/b/c//a..a///./ /b/c/a..a
+/b/c//a..a////a /b/c/a..a/a
+/b/c//a..a////. /b/c/a..a
+/b/c//a..a///// /b/c/a..a
+/b/c//a...aaaaa /b/c/a...aaaaa
+/b/c//a...aaaa. /b/c/a...aaaa.
+/b/c//a...aaaa/ /b/c/a...aaaa
+/b/c//a...aaa.a /b/c/a...aaa.a
+/b/c//a...aaa.. /b/c/a...aaa..
+/b/c//a...aaa./ /b/c/a...aaa.
+/b/c//a...aaa/a /b/c/a...aaa/a
+/b/c//a...aaa/. /b/c/a...aaa
+/b/c//a...aaa// /b/c/a...aaa
+/b/c//a...aa.aa /b/c/a...aa.aa
+/b/c//a...aa.a. /b/c/a...aa.a.
+/b/c//a...aa.a/ /b/c/a...aa.a
+/b/c//a...aa..a /b/c/a...aa..a
+/b/c//a...aa... /b/c/a...aa...
+/b/c//a...aa../ /b/c/a...aa..
+/b/c//a...aa./a /b/c/a...aa./a
+/b/c//a...aa./. /b/c/a...aa.
+/b/c//a...aa.// /b/c/a...aa.
+/b/c//a...aa/aa /b/c/a...aa/aa
+/b/c//a...aa/a. /b/c/a...aa/a.
+/b/c//a...aa/a/ /b/c/a...aa/a
+/b/c//a...aa/.a /b/c/a...aa/.a
+/b/c//a...aa/.. /b/c
+/b/c//a...aa/./ /b/c/a...aa
+/b/c//a...aa//a /b/c/a...aa/a
+/b/c//a...aa//. /b/c/a...aa
+/b/c//a...aa/// /b/c/a...aa
+/b/c//a...a.aaa /b/c/a...a.aaa
+/b/c//a...a.aa. /b/c/a...a.aa.
+/b/c//a...a.aa/ /b/c/a...a.aa
+/b/c//a...a.a.a /b/c/a...a.a.a
+/b/c//a...a.a.. /b/c/a...a.a..
+/b/c//a...a.a./ /b/c/a...a.a.
+/b/c//a...a.a/a /b/c/a...a.a/a
+/b/c//a...a.a/. /b/c/a...a.a
+/b/c//a...a.a// /b/c/a...a.a
+/b/c//a...a..aa /b/c/a...a..aa
+/b/c//a...a..a. /b/c/a...a..a.
+/b/c//a...a..a/ /b/c/a...a..a
+/b/c//a...a...a /b/c/a...a...a
+/b/c//a...a.... /b/c/a...a....
+/b/c//a...a.../ /b/c/a...a...
+/b/c//a...a../a /b/c/a...a../a
+/b/c//a...a../. /b/c/a...a..
+/b/c//a...a..// /b/c/a...a..
+/b/c//a...a./aa /b/c/a...a./aa
+/b/c//a...a./a. /b/c/a...a./a.
+/b/c//a...a./a/ /b/c/a...a./a
+/b/c//a...a./.a /b/c/a...a./.a
+/b/c//a...a./.. /b/c
+/b/c//a...a././ /b/c/a...a.
+/b/c//a...a.//a /b/c/a...a./a
+/b/c//a...a.//. /b/c/a...a.
+/b/c//a...a./// /b/c/a...a.
+/b/c//a...a/aaa /b/c/a...a/aaa
+/b/c//a...a/aa. /b/c/a...a/aa.
+/b/c//a...a/aa/ /b/c/a...a/aa
+/b/c//a...a/a.a /b/c/a...a/a.a
+/b/c//a...a/a.. /b/c/a...a/a..
+/b/c//a...a/a./ /b/c/a...a/a.
+/b/c//a...a/a/a /b/c/a...a/a/a
+/b/c//a...a/a/. /b/c/a...a/a
+/b/c//a...a/a// /b/c/a...a/a
+/b/c//a...a/.aa /b/c/a...a/.aa
+/b/c//a...a/.a. /b/c/a...a/.a.
+/b/c//a...a/.a/ /b/c/a...a/.a
+/b/c//a...a/..a /b/c/a...a/..a
+/b/c//a...a/... /b/c/a...a/...
+/b/c//a...a/../ /b/c
+/b/c//a...a/./a /b/c/a...a/a
+/b/c//a...a/./. /b/c/a...a
+/b/c//a...a/.// /b/c/a...a
+/b/c//a...a//aa /b/c/a...a/aa
+/b/c//a...a//a. /b/c/a...a/a.
+/b/c//a...a//a/ /b/c/a...a/a
+/b/c//a...a//.a /b/c/a...a/.a
+/b/c//a...a//.. /b/c
+/b/c//a...a//./ /b/c/a...a
+/b/c//a...a///a /b/c/a...a/a
+/b/c//a...a///. /b/c/a...a
+/b/c//a...a//// /b/c/a...a
+/b/c//a....aaaa /b/c/a....aaaa
+/b/c//a....aaa. /b/c/a....aaa.
+/b/c//a....aaa/ /b/c/a....aaa
+/b/c//a....aa.a /b/c/a....aa.a
+/b/c//a....aa.. /b/c/a....aa..
+/b/c//a....aa./ /b/c/a....aa.
+/b/c//a....aa/a /b/c/a....aa/a
+/b/c//a....aa/. /b/c/a....aa
+/b/c//a....aa// /b/c/a....aa
+/b/c//a....a.aa /b/c/a....a.aa
+/b/c//a....a.a. /b/c/a....a.a.
+/b/c//a....a.a/ /b/c/a....a.a
+/b/c//a....a..a /b/c/a....a..a
+/b/c//a....a... /b/c/a....a...
+/b/c//a....a../ /b/c/a....a..
+/b/c//a....a./a /b/c/a....a./a
+/b/c//a....a./. /b/c/a....a.
+/b/c//a....a.// /b/c/a....a.
+/b/c//a....a/aa /b/c/a....a/aa
+/b/c//a....a/a. /b/c/a....a/a.
+/b/c//a....a/a/ /b/c/a....a/a
+/b/c//a....a/.a /b/c/a....a/.a
+/b/c//a....a/.. /b/c
+/b/c//a....a/./ /b/c/a....a
+/b/c//a....a//a /b/c/a....a/a
+/b/c//a....a//. /b/c/a....a
+/b/c//a....a/// /b/c/a....a
+/b/c//a.....aaa /b/c/a.....aaa
+/b/c//a.....aa. /b/c/a.....aa.
+/b/c//a.....aa/ /b/c/a.....aa
+/b/c//a.....a.a /b/c/a.....a.a
+/b/c//a.....a.. /b/c/a.....a..
+/b/c//a.....a./ /b/c/a.....a.
+/b/c//a.....a/a /b/c/a.....a/a
+/b/c//a.....a/. /b/c/a.....a
+/b/c//a.....a// /b/c/a.....a
+/b/c//a......aa /b/c/a......aa
+/b/c//a......a. /b/c/a......a.
+/b/c//a......a/ /b/c/a......a
+/b/c//a.......a /b/c/a.......a
+/b/c//a........ /b/c/a........
+/b/c//a......./ /b/c/a.......
+/b/c//a....../a /b/c/a....../a
+/b/c//a....../. /b/c/a......
+/b/c//a......// /b/c/a......
+/b/c//a...../aa /b/c/a...../aa
+/b/c//a...../a. /b/c/a...../a.
+/b/c//a...../a/ /b/c/a...../a
+/b/c//a...../.a /b/c/a...../.a
+/b/c//a...../.. /b/c
+/b/c//a....././ /b/c/a.....
+/b/c//a.....//a /b/c/a...../a
+/b/c//a.....//. /b/c/a.....
+/b/c//a...../// /b/c/a.....
+/b/c//a..../aaa /b/c/a..../aaa
+/b/c//a..../aa. /b/c/a..../aa.
+/b/c//a..../aa/ /b/c/a..../aa
+/b/c//a..../a.a /b/c/a..../a.a
+/b/c//a..../a.. /b/c/a..../a..
+/b/c//a..../a./ /b/c/a..../a.
+/b/c//a..../a/a /b/c/a..../a/a
+/b/c//a..../a/. /b/c/a..../a
+/b/c//a..../a// /b/c/a..../a
+/b/c//a..../.aa /b/c/a..../.aa
+/b/c//a..../.a. /b/c/a..../.a.
+/b/c//a..../.a/ /b/c/a..../.a
+/b/c//a..../..a /b/c/a..../..a
+/b/c//a..../... /b/c/a..../...
+/b/c//a..../../ /b/c
+/b/c//a...././a /b/c/a..../a
+/b/c//a...././. /b/c/a....
+/b/c//a..../.// /b/c/a....
+/b/c//a....//aa /b/c/a..../aa
+/b/c//a....//a. /b/c/a..../a.
+/b/c//a....//a/ /b/c/a..../a
+/b/c//a....//.a /b/c/a..../.a
+/b/c//a....//.. /b/c
+/b/c//a....//./ /b/c/a....
+/b/c//a....///a /b/c/a..../a
+/b/c//a....///. /b/c/a....
+/b/c//a....//// /b/c/a....
+/b/c//a.../aaaa /b/c/a.../aaaa
+/b/c//a.../aaa. /b/c/a.../aaa.
+/b/c//a.../aaa/ /b/c/a.../aaa
+/b/c//a.../aa.a /b/c/a.../aa.a
+/b/c//a.../aa.. /b/c/a.../aa..
+/b/c//a.../aa./ /b/c/a.../aa.
+/b/c//a.../aa/a /b/c/a.../aa/a
+/b/c//a.../aa/. /b/c/a.../aa
+/b/c//a.../aa// /b/c/a.../aa
+/b/c//a.../a.aa /b/c/a.../a.aa
+/b/c//a.../a.a. /b/c/a.../a.a.
+/b/c//a.../a.a/ /b/c/a.../a.a
+/b/c//a.../a..a /b/c/a.../a..a
+/b/c//a.../a... /b/c/a.../a...
+/b/c//a.../a../ /b/c/a.../a..
+/b/c//a.../a./a /b/c/a.../a./a
+/b/c//a.../a./. /b/c/a.../a.
+/b/c//a.../a.// /b/c/a.../a.
+/b/c//a.../a/aa /b/c/a.../a/aa
+/b/c//a.../a/a. /b/c/a.../a/a.
+/b/c//a.../a/a/ /b/c/a.../a/a
+/b/c//a.../a/.a /b/c/a.../a/.a
+/b/c//a.../a/.. /b/c/a...
+/b/c//a.../a/./ /b/c/a.../a
+/b/c//a.../a//a /b/c/a.../a/a
+/b/c//a.../a//. /b/c/a.../a
+/b/c//a.../a/// /b/c/a.../a
+/b/c//a.../.aaa /b/c/a.../.aaa
+/b/c//a.../.aa. /b/c/a.../.aa.
+/b/c//a.../.aa/ /b/c/a.../.aa
+/b/c//a.../.a.a /b/c/a.../.a.a
+/b/c//a.../.a.. /b/c/a.../.a..
+/b/c//a.../.a./ /b/c/a.../.a.
+/b/c//a.../.a/a /b/c/a.../.a/a
+/b/c//a.../.a/. /b/c/a.../.a
+/b/c//a.../.a// /b/c/a.../.a
+/b/c//a.../..aa /b/c/a.../..aa
+/b/c//a.../..a. /b/c/a.../..a.
+/b/c//a.../..a/ /b/c/a.../..a
+/b/c//a.../...a /b/c/a.../...a
+/b/c//a.../.... /b/c/a.../....
+/b/c//a.../.../ /b/c/a.../...
+/b/c//a.../../a /b/c/a
+/b/c//a.../../. /b/c
+/b/c//a.../..// /b/c
+/b/c//a..././aa /b/c/a.../aa
+/b/c//a..././a. /b/c/a.../a.
+/b/c//a..././a/ /b/c/a.../a
+/b/c//a..././.a /b/c/a.../.a
+/b/c//a..././.. /b/c
+/b/c//a.../././ /b/c/a...
+/b/c//a..././/a /b/c/a.../a
+/b/c//a..././/. /b/c/a...
+/b/c//a..././// /b/c/a...
+/b/c//a...//aaa /b/c/a.../aaa
+/b/c//a...//aa. /b/c/a.../aa.
+/b/c//a...//aa/ /b/c/a.../aa
+/b/c//a...//a.a /b/c/a.../a.a
+/b/c//a...//a.. /b/c/a.../a..
+/b/c//a...//a./ /b/c/a.../a.
+/b/c//a...//a/a /b/c/a.../a/a
+/b/c//a...//a/. /b/c/a.../a
+/b/c//a...//a// /b/c/a.../a
+/b/c//a...//.aa /b/c/a.../.aa
+/b/c//a...//.a. /b/c/a.../.a.
+/b/c//a...//.a/ /b/c/a.../.a
+/b/c//a...//..a /b/c/a.../..a
+/b/c//a...//... /b/c/a.../...
+/b/c//a...//../ /b/c
+/b/c//a...//./a /b/c/a.../a
+/b/c//a...//./. /b/c/a...
+/b/c//a...//.// /b/c/a...
+/b/c//a...///aa /b/c/a.../aa
+/b/c//a...///a. /b/c/a.../a.
+/b/c//a...///a/ /b/c/a.../a
+/b/c//a...///.a /b/c/a.../.a
+/b/c//a...///.. /b/c
+/b/c//a...///./ /b/c/a...
+/b/c//a...////a /b/c/a.../a
+/b/c//a...////. /b/c/a...
+/b/c//a...///// /b/c/a...
+/b/c//a../aaaaa /b/c/a../aaaaa
+/b/c//a../aaaa. /b/c/a../aaaa.
+/b/c//a../aaaa/ /b/c/a../aaaa
+/b/c//a../aaa.a /b/c/a../aaa.a
+/b/c//a../aaa.. /b/c/a../aaa..
+/b/c//a../aaa./ /b/c/a../aaa.
+/b/c//a../aaa/a /b/c/a../aaa/a
+/b/c//a../aaa/. /b/c/a../aaa
+/b/c//a../aaa// /b/c/a../aaa
+/b/c//a../aa.aa /b/c/a../aa.aa
+/b/c//a../aa.a. /b/c/a../aa.a.
+/b/c//a../aa.a/ /b/c/a../aa.a
+/b/c//a../aa..a /b/c/a../aa..a
+/b/c//a../aa... /b/c/a../aa...
+/b/c//a../aa../ /b/c/a../aa..
+/b/c//a../aa./a /b/c/a../aa./a
+/b/c//a../aa./. /b/c/a../aa.
+/b/c//a../aa.// /b/c/a../aa.
+/b/c//a../aa/aa /b/c/a../aa/aa
+/b/c//a../aa/a. /b/c/a../aa/a.
+/b/c//a../aa/a/ /b/c/a../aa/a
+/b/c//a../aa/.a /b/c/a../aa/.a
+/b/c//a../aa/.. /b/c/a..
+/b/c//a../aa/./ /b/c/a../aa
+/b/c//a../aa//a /b/c/a../aa/a
+/b/c//a../aa//. /b/c/a../aa
+/b/c//a../aa/// /b/c/a../aa
+/b/c//a../a.aaa /b/c/a../a.aaa
+/b/c//a../a.aa. /b/c/a../a.aa.
+/b/c//a../a.aa/ /b/c/a../a.aa
+/b/c//a../a.a.a /b/c/a../a.a.a
+/b/c//a../a.a.. /b/c/a../a.a..
+/b/c//a../a.a./ /b/c/a../a.a.
+/b/c//a../a.a/a /b/c/a../a.a/a
+/b/c//a../a.a/. /b/c/a../a.a
+/b/c//a../a.a// /b/c/a../a.a
+/b/c//a../a..aa /b/c/a../a..aa
+/b/c//a../a..a. /b/c/a../a..a.
+/b/c//a../a..a/ /b/c/a../a..a
+/b/c//a../a...a /b/c/a../a...a
+/b/c//a../a.... /b/c/a../a....
+/b/c//a../a.../ /b/c/a../a...
+/b/c//a../a../a /b/c/a../a../a
+/b/c//a../a../. /b/c/a../a..
+/b/c//a../a..// /b/c/a../a..
+/b/c//a../a./aa /b/c/a../a./aa
+/b/c//a../a./a. /b/c/a../a./a.
+/b/c//a../a./a/ /b/c/a../a./a
+/b/c//a../a./.a /b/c/a../a./.a
+/b/c//a../a./.. /b/c/a..
+/b/c//a../a././ /b/c/a../a.
+/b/c//a../a.//a /b/c/a../a./a
+/b/c//a../a.//. /b/c/a../a.
+/b/c//a../a./// /b/c/a../a.
+/b/c//a../a/aaa /b/c/a../a/aaa
+/b/c//a../a/aa. /b/c/a../a/aa.
+/b/c//a../a/aa/ /b/c/a../a/aa
+/b/c//a../a/a.a /b/c/a../a/a.a
+/b/c//a../a/a.. /b/c/a../a/a..
+/b/c//a../a/a./ /b/c/a../a/a.
+/b/c//a../a/a/a /b/c/a../a/a/a
+/b/c//a../a/a/. /b/c/a../a/a
+/b/c//a../a/a// /b/c/a../a/a
+/b/c//a../a/.aa /b/c/a../a/.aa
+/b/c//a../a/.a. /b/c/a../a/.a.
+/b/c//a../a/.a/ /b/c/a../a/.a
+/b/c//a../a/..a /b/c/a../a/..a
+/b/c//a../a/... /b/c/a../a/...
+/b/c//a../a/../ /b/c/a..
+/b/c//a../a/./a /b/c/a../a/a
+/b/c//a../a/./. /b/c/a../a
+/b/c//a../a/.// /b/c/a../a
+/b/c//a../a//aa /b/c/a../a/aa
+/b/c//a../a//a. /b/c/a../a/a.
+/b/c//a../a//a/ /b/c/a../a/a
+/b/c//a../a//.a /b/c/a../a/.a
+/b/c//a../a//.. /b/c/a..
+/b/c//a../a//./ /b/c/a../a
+/b/c//a../a///a /b/c/a../a/a
+/b/c//a../a///. /b/c/a../a
+/b/c//a../a//// /b/c/a../a
+/b/c//a../.aaaa /b/c/a../.aaaa
+/b/c//a../.aaa. /b/c/a../.aaa.
+/b/c//a../.aaa/ /b/c/a../.aaa
+/b/c//a../.aa.a /b/c/a../.aa.a
+/b/c//a../.aa.. /b/c/a../.aa..
+/b/c//a../.aa./ /b/c/a../.aa.
+/b/c//a../.aa/a /b/c/a../.aa/a
+/b/c//a../.aa/. /b/c/a../.aa
+/b/c//a../.aa// /b/c/a../.aa
+/b/c//a../.a.aa /b/c/a../.a.aa
+/b/c//a../.a.a. /b/c/a../.a.a.
+/b/c//a../.a.a/ /b/c/a../.a.a
+/b/c//a../.a..a /b/c/a../.a..a
+/b/c//a../.a... /b/c/a../.a...
+/b/c//a../.a../ /b/c/a../.a..
+/b/c//a../.a./a /b/c/a../.a./a
+/b/c//a../.a./. /b/c/a../.a.
+/b/c//a../.a.// /b/c/a../.a.
+/b/c//a../.a/aa /b/c/a../.a/aa
+/b/c//a../.a/a. /b/c/a../.a/a.
+/b/c//a../.a/a/ /b/c/a../.a/a
+/b/c//a../.a/.a /b/c/a../.a/.a
+/b/c//a../.a/.. /b/c/a..
+/b/c//a../.a/./ /b/c/a../.a
+/b/c//a../.a//a /b/c/a../.a/a
+/b/c//a../.a//. /b/c/a../.a
+/b/c//a../.a/// /b/c/a../.a
+/b/c//a../..aaa /b/c/a../..aaa
+/b/c//a../..aa. /b/c/a../..aa.
+/b/c//a../..aa/ /b/c/a../..aa
+/b/c//a../..a.a /b/c/a../..a.a
+/b/c//a../..a.. /b/c/a../..a..
+/b/c//a../..a./ /b/c/a../..a.
+/b/c//a../..a/a /b/c/a../..a/a
+/b/c//a../..a/. /b/c/a../..a
+/b/c//a../..a// /b/c/a../..a
+/b/c//a../...aa /b/c/a../...aa
+/b/c//a../...a. /b/c/a../...a.
+/b/c//a../...a/ /b/c/a../...a
+/b/c//a../....a /b/c/a../....a
+/b/c//a../..... /b/c/a../.....
+/b/c//a../..../ /b/c/a../....
+/b/c//a../.../a /b/c/a../.../a
+/b/c//a../.../. /b/c/a../...
+/b/c//a../...// /b/c/a../...
+/b/c//a../../aa /b/c/aa
+/b/c//a../../a. /b/c/a.
+/b/c//a../../a/ /b/c/a
+/b/c//a../../.a /b/c/.a
+/b/c//a../../.. /b
+/b/c//a../.././ /b/c
+/b/c//a../..//a /b/c/a
+/b/c//a../..//. /b/c
+/b/c//a../../// /b/c
+/b/c//a.././aaa /b/c/a../aaa
+/b/c//a.././aa. /b/c/a../aa.
+/b/c//a.././aa/ /b/c/a../aa
+/b/c//a.././a.a /b/c/a../a.a
+/b/c//a.././a.. /b/c/a../a..
+/b/c//a.././a./ /b/c/a../a.
+/b/c//a.././a/a /b/c/a../a/a
+/b/c//a.././a/. /b/c/a../a
+/b/c//a.././a// /b/c/a../a
+/b/c//a.././.aa /b/c/a../.aa
+/b/c//a.././.a. /b/c/a../.a.
+/b/c//a.././.a/ /b/c/a../.a
+/b/c//a.././..a /b/c/a../..a
+/b/c//a.././... /b/c/a../...
+/b/c//a.././../ /b/c
+/b/c//a../././a /b/c/a../a
+/b/c//a../././. /b/c/a..
+/b/c//a.././.// /b/c/a..
+/b/c//a.././/aa /b/c/a../aa
+/b/c//a.././/a. /b/c/a../a.
+/b/c//a.././/a/ /b/c/a../a
+/b/c//a.././/.a /b/c/a../.a
+/b/c//a.././/.. /b/c
+/b/c//a.././/./ /b/c/a..
+/b/c//a.././//a /b/c/a../a
+/b/c//a.././//. /b/c/a..
+/b/c//a.././/// /b/c/a..
+/b/c//a..//aaaa /b/c/a../aaaa
+/b/c//a..//aaa. /b/c/a../aaa.
+/b/c//a..//aaa/ /b/c/a../aaa
+/b/c//a..//aa.a /b/c/a../aa.a
+/b/c//a..//aa.. /b/c/a../aa..
+/b/c//a..//aa./ /b/c/a../aa.
+/b/c//a..//aa/a /b/c/a../aa/a
+/b/c//a..//aa/. /b/c/a../aa
+/b/c//a..//aa// /b/c/a../aa
+/b/c//a..//a.aa /b/c/a../a.aa
+/b/c//a..//a.a. /b/c/a../a.a.
+/b/c//a..//a.a/ /b/c/a../a.a
+/b/c//a..//a..a /b/c/a../a..a
+/b/c//a..//a... /b/c/a../a...
+/b/c//a..//a../ /b/c/a../a..
+/b/c//a..//a./a /b/c/a../a./a
+/b/c//a..//a./. /b/c/a../a.
+/b/c//a..//a.// /b/c/a../a.
+/b/c//a..//a/aa /b/c/a../a/aa
+/b/c//a..//a/a. /b/c/a../a/a.
+/b/c//a..//a/a/ /b/c/a../a/a
+/b/c//a..//a/.a /b/c/a../a/.a
+/b/c//a..//a/.. /b/c/a..
+/b/c//a..//a/./ /b/c/a../a
+/b/c//a..//a//a /b/c/a../a/a
+/b/c//a..//a//. /b/c/a../a
+/b/c//a..//a/// /b/c/a../a
+/b/c//a..//.aaa /b/c/a../.aaa
+/b/c//a..//.aa. /b/c/a../.aa.
+/b/c//a..//.aa/ /b/c/a../.aa
+/b/c//a..//.a.a /b/c/a../.a.a
+/b/c//a..//.a.. /b/c/a../.a..
+/b/c//a..//.a./ /b/c/a../.a.
+/b/c//a..//.a/a /b/c/a../.a/a
+/b/c//a..//.a/. /b/c/a../.a
+/b/c//a..//.a// /b/c/a../.a
+/b/c//a..//..aa /b/c/a../..aa
+/b/c//a..//..a. /b/c/a../..a.
+/b/c//a..//..a/ /b/c/a../..a
+/b/c//a..//...a /b/c/a../...a
+/b/c//a..//.... /b/c/a../....
+/b/c//a..//.../ /b/c/a../...
+/b/c//a..//../a /b/c/a
+/b/c//a..//../. /b/c
+/b/c//a..//..// /b/c
+/b/c//a..//./aa /b/c/a../aa
+/b/c//a..//./a. /b/c/a../a.
+/b/c//a..//./a/ /b/c/a../a
+/b/c//a..//./.a /b/c/a../.a
+/b/c//a..//./.. /b/c
+/b/c//a..//././ /b/c/a..
+/b/c//a..//.//a /b/c/a../a
+/b/c//a..//.//. /b/c/a..
+/b/c//a..//./// /b/c/a..
+/b/c//a..///aaa /b/c/a../aaa
+/b/c//a..///aa. /b/c/a../aa.
+/b/c//a..///aa/ /b/c/a../aa
+/b/c//a..///a.a /b/c/a../a.a
+/b/c//a..///a.. /b/c/a../a..
+/b/c//a..///a./ /b/c/a../a.
+/b/c//a..///a/a /b/c/a../a/a
+/b/c//a..///a/. /b/c/a../a
+/b/c//a..///a// /b/c/a../a
+/b/c//a..///.aa /b/c/a../.aa
+/b/c//a..///.a. /b/c/a../.a.
+/b/c//a..///.a/ /b/c/a../.a
+/b/c//a..///..a /b/c/a../..a
+/b/c//a..///... /b/c/a../...
+/b/c//a..///../ /b/c
+/b/c//a..///./a /b/c/a../a
+/b/c//a..///./. /b/c/a..
+/b/c//a..///.// /b/c/a..
+/b/c//a..////aa /b/c/a../aa
+/b/c//a..////a. /b/c/a../a.
+/b/c//a..////a/ /b/c/a../a
+/b/c//a..////.a /b/c/a../.a
+/b/c//a..////.. /b/c
+/b/c//a..////./ /b/c/a..
+/b/c//a../////a /b/c/a../a
+/b/c//a../////. /b/c/a..
+/b/c//a..////// /b/c/a..
+/b/c//a./aaaaaa /b/c/a./aaaaaa
+/b/c//a./aaaaa. /b/c/a./aaaaa.
+/b/c//a./aaaaa/ /b/c/a./aaaaa
+/b/c//a./aaaa.a /b/c/a./aaaa.a
+/b/c//a./aaaa.. /b/c/a./aaaa..
+/b/c//a./aaaa./ /b/c/a./aaaa.
+/b/c//a./aaaa/a /b/c/a./aaaa/a
+/b/c//a./aaaa/. /b/c/a./aaaa
+/b/c//a./aaaa// /b/c/a./aaaa
+/b/c//a./aaa.aa /b/c/a./aaa.aa
+/b/c//a./aaa.a. /b/c/a./aaa.a.
+/b/c//a./aaa.a/ /b/c/a./aaa.a
+/b/c//a./aaa..a /b/c/a./aaa..a
+/b/c//a./aaa... /b/c/a./aaa...
+/b/c//a./aaa../ /b/c/a./aaa..
+/b/c//a./aaa./a /b/c/a./aaa./a
+/b/c//a./aaa./. /b/c/a./aaa.
+/b/c//a./aaa.// /b/c/a./aaa.
+/b/c//a./aaa/aa /b/c/a./aaa/aa
+/b/c//a./aaa/a. /b/c/a./aaa/a.
+/b/c//a./aaa/a/ /b/c/a./aaa/a
+/b/c//a./aaa/.a /b/c/a./aaa/.a
+/b/c//a./aaa/.. /b/c/a.
+/b/c//a./aaa/./ /b/c/a./aaa
+/b/c//a./aaa//a /b/c/a./aaa/a
+/b/c//a./aaa//. /b/c/a./aaa
+/b/c//a./aaa/// /b/c/a./aaa
+/b/c//a./aa.aaa /b/c/a./aa.aaa
+/b/c//a./aa.aa. /b/c/a./aa.aa.
+/b/c//a./aa.aa/ /b/c/a./aa.aa
+/b/c//a./aa.a.a /b/c/a./aa.a.a
+/b/c//a./aa.a.. /b/c/a./aa.a..
+/b/c//a./aa.a./ /b/c/a./aa.a.
+/b/c//a./aa.a/a /b/c/a./aa.a/a
+/b/c//a./aa.a/. /b/c/a./aa.a
+/b/c//a./aa.a// /b/c/a./aa.a
+/b/c//a./aa..aa /b/c/a./aa..aa
+/b/c//a./aa..a. /b/c/a./aa..a.
+/b/c//a./aa..a/ /b/c/a./aa..a
+/b/c//a./aa...a /b/c/a./aa...a
+/b/c//a./aa.... /b/c/a./aa....
+/b/c//a./aa.../ /b/c/a./aa...
+/b/c//a./aa../a /b/c/a./aa../a
+/b/c//a./aa../. /b/c/a./aa..
+/b/c//a./aa..// /b/c/a./aa..
+/b/c//a./aa./aa /b/c/a./aa./aa
+/b/c//a./aa./a. /b/c/a./aa./a.
+/b/c//a./aa./a/ /b/c/a./aa./a
+/b/c//a./aa./.a /b/c/a./aa./.a
+/b/c//a./aa./.. /b/c/a.
+/b/c//a./aa././ /b/c/a./aa.
+/b/c//a./aa.//a /b/c/a./aa./a
+/b/c//a./aa.//. /b/c/a./aa.
+/b/c//a./aa./// /b/c/a./aa.
+/b/c//a./aa/aaa /b/c/a./aa/aaa
+/b/c//a./aa/aa. /b/c/a./aa/aa.
+/b/c//a./aa/aa/ /b/c/a./aa/aa
+/b/c//a./aa/a.a /b/c/a./aa/a.a
+/b/c//a./aa/a.. /b/c/a./aa/a..
+/b/c//a./aa/a./ /b/c/a./aa/a.
+/b/c//a./aa/a/a /b/c/a./aa/a/a
+/b/c//a./aa/a/. /b/c/a./aa/a
+/b/c//a./aa/a// /b/c/a./aa/a
+/b/c//a./aa/.aa /b/c/a./aa/.aa
+/b/c//a./aa/.a. /b/c/a./aa/.a.
+/b/c//a./aa/.a/ /b/c/a./aa/.a
+/b/c//a./aa/..a /b/c/a./aa/..a
+/b/c//a./aa/... /b/c/a./aa/...
+/b/c//a./aa/../ /b/c/a.
+/b/c//a./aa/./a /b/c/a./aa/a
+/b/c//a./aa/./. /b/c/a./aa
+/b/c//a./aa/.// /b/c/a./aa
+/b/c//a./aa//aa /b/c/a./aa/aa
+/b/c//a./aa//a. /b/c/a./aa/a.
+/b/c//a./aa//a/ /b/c/a./aa/a
+/b/c//a./aa//.a /b/c/a./aa/.a
+/b/c//a./aa//.. /b/c/a.
+/b/c//a./aa//./ /b/c/a./aa
+/b/c//a./aa///a /b/c/a./aa/a
+/b/c//a./aa///. /b/c/a./aa
+/b/c//a./aa//// /b/c/a./aa
+/b/c//a./a.aaaa /b/c/a./a.aaaa
+/b/c//a./a.aaa. /b/c/a./a.aaa.
+/b/c//a./a.aaa/ /b/c/a./a.aaa
+/b/c//a./a.aa.a /b/c/a./a.aa.a
+/b/c//a./a.aa.. /b/c/a./a.aa..
+/b/c//a./a.aa./ /b/c/a./a.aa.
+/b/c//a./a.aa/a /b/c/a./a.aa/a
+/b/c//a./a.aa/. /b/c/a./a.aa
+/b/c//a./a.aa// /b/c/a./a.aa
+/b/c//a./a.a.aa /b/c/a./a.a.aa
+/b/c//a./a.a.a. /b/c/a./a.a.a.
+/b/c//a./a.a.a/ /b/c/a./a.a.a
+/b/c//a./a.a..a /b/c/a./a.a..a
+/b/c//a./a.a... /b/c/a./a.a...
+/b/c//a./a.a../ /b/c/a./a.a..
+/b/c//a./a.a./a /b/c/a./a.a./a
+/b/c//a./a.a./. /b/c/a./a.a.
+/b/c//a./a.a.// /b/c/a./a.a.
+/b/c//a./a.a/aa /b/c/a./a.a/aa
+/b/c//a./a.a/a. /b/c/a./a.a/a.
+/b/c//a./a.a/a/ /b/c/a./a.a/a
+/b/c//a./a.a/.a /b/c/a./a.a/.a
+/b/c//a./a.a/.. /b/c/a.
+/b/c//a./a.a/./ /b/c/a./a.a
+/b/c//a./a.a//a /b/c/a./a.a/a
+/b/c//a./a.a//. /b/c/a./a.a
+/b/c//a./a.a/// /b/c/a./a.a
+/b/c//a./a..aaa /b/c/a./a..aaa
+/b/c//a./a..aa. /b/c/a./a..aa.
+/b/c//a./a..aa/ /b/c/a./a..aa
+/b/c//a./a..a.a /b/c/a./a..a.a
+/b/c//a./a..a.. /b/c/a./a..a..
+/b/c//a./a..a./ /b/c/a./a..a.
+/b/c//a./a..a/a /b/c/a./a..a/a
+/b/c//a./a..a/. /b/c/a./a..a
+/b/c//a./a..a// /b/c/a./a..a
+/b/c//a./a...aa /b/c/a./a...aa
+/b/c//a./a...a. /b/c/a./a...a.
+/b/c//a./a...a/ /b/c/a./a...a
+/b/c//a./a....a /b/c/a./a....a
+/b/c//a./a..... /b/c/a./a.....
+/b/c//a./a..../ /b/c/a./a....
+/b/c//a./a.../a /b/c/a./a.../a
+/b/c//a./a.../. /b/c/a./a...
+/b/c//a./a...// /b/c/a./a...
+/b/c//a./a../aa /b/c/a./a../aa
+/b/c//a./a../a. /b/c/a./a../a.
+/b/c//a./a../a/ /b/c/a./a../a
+/b/c//a./a../.a /b/c/a./a../.a
+/b/c//a./a../.. /b/c/a.
+/b/c//a./a.././ /b/c/a./a..
+/b/c//a./a..//a /b/c/a./a../a
+/b/c//a./a..//. /b/c/a./a..
+/b/c//a./a../// /b/c/a./a..
+/b/c//a./a./aaa /b/c/a./a./aaa
+/b/c//a./a./aa. /b/c/a./a./aa.
+/b/c//a./a./aa/ /b/c/a./a./aa
+/b/c//a./a./a.a /b/c/a./a./a.a
+/b/c//a./a./a.. /b/c/a./a./a..
+/b/c//a./a./a./ /b/c/a./a./a.
+/b/c//a./a./a/a /b/c/a./a./a/a
+/b/c//a./a./a/. /b/c/a./a./a
+/b/c//a./a./a// /b/c/a./a./a
+/b/c//a./a./.aa /b/c/a./a./.aa
+/b/c//a./a./.a. /b/c/a./a./.a.
+/b/c//a./a./.a/ /b/c/a./a./.a
+/b/c//a./a./..a /b/c/a./a./..a
+/b/c//a./a./... /b/c/a./a./...
+/b/c//a./a./../ /b/c/a.
+/b/c//a./a././a /b/c/a./a./a
+/b/c//a./a././. /b/c/a./a.
+/b/c//a./a./.// /b/c/a./a.
+/b/c//a./a.//aa /b/c/a./a./aa
+/b/c//a./a.//a. /b/c/a./a./a.
+/b/c//a./a.//a/ /b/c/a./a./a
+/b/c//a./a.//.a /b/c/a./a./.a
+/b/c//a./a.//.. /b/c/a.
+/b/c//a./a.//./ /b/c/a./a.
+/b/c//a./a.///a /b/c/a./a./a
+/b/c//a./a.///. /b/c/a./a.
+/b/c//a./a.//// /b/c/a./a.
+/b/c//a./a/aaaa /b/c/a./a/aaaa
+/b/c//a./a/aaa. /b/c/a./a/aaa.
+/b/c//a./a/aaa/ /b/c/a./a/aaa
+/b/c//a./a/aa.a /b/c/a./a/aa.a
+/b/c//a./a/aa.. /b/c/a./a/aa..
+/b/c//a./a/aa./ /b/c/a./a/aa.
+/b/c//a./a/aa/a /b/c/a./a/aa/a
+/b/c//a./a/aa/. /b/c/a./a/aa
+/b/c//a./a/aa// /b/c/a./a/aa
+/b/c//a./a/a.aa /b/c/a./a/a.aa
+/b/c//a./a/a.a. /b/c/a./a/a.a.
+/b/c//a./a/a.a/ /b/c/a./a/a.a
+/b/c//a./a/a..a /b/c/a./a/a..a
+/b/c//a./a/a... /b/c/a./a/a...
+/b/c//a./a/a../ /b/c/a./a/a..
+/b/c//a./a/a./a /b/c/a./a/a./a
+/b/c//a./a/a./. /b/c/a./a/a.
+/b/c//a./a/a.// /b/c/a./a/a.
+/b/c//a./a/a/aa /b/c/a./a/a/aa
+/b/c//a./a/a/a. /b/c/a./a/a/a.
+/b/c//a./a/a/a/ /b/c/a./a/a/a
+/b/c//a./a/a/.a /b/c/a./a/a/.a
+/b/c//a./a/a/.. /b/c/a./a
+/b/c//a./a/a/./ /b/c/a./a/a
+/b/c//a./a/a//a /b/c/a./a/a/a
+/b/c//a./a/a//. /b/c/a./a/a
+/b/c//a./a/a/// /b/c/a./a/a
+/b/c//a./a/.aaa /b/c/a./a/.aaa
+/b/c//a./a/.aa. /b/c/a./a/.aa.
+/b/c//a./a/.aa/ /b/c/a./a/.aa
+/b/c//a./a/.a.a /b/c/a./a/.a.a
+/b/c//a./a/.a.. /b/c/a./a/.a..
+/b/c//a./a/.a./ /b/c/a./a/.a.
+/b/c//a./a/.a/a /b/c/a./a/.a/a
+/b/c//a./a/.a/. /b/c/a./a/.a
+/b/c//a./a/.a// /b/c/a./a/.a
+/b/c//a./a/..aa /b/c/a./a/..aa
+/b/c//a./a/..a. /b/c/a./a/..a.
+/b/c//a./a/..a/ /b/c/a./a/..a
+/b/c//a./a/...a /b/c/a./a/...a
+/b/c//a./a/.... /b/c/a./a/....
+/b/c//a./a/.../ /b/c/a./a/...
+/b/c//a./a/../a /b/c/a./a
+/b/c//a./a/../. /b/c/a.
+/b/c//a./a/..// /b/c/a.
+/b/c//a./a/./aa /b/c/a./a/aa
+/b/c//a./a/./a. /b/c/a./a/a.
+/b/c//a./a/./a/ /b/c/a./a/a
+/b/c//a./a/./.a /b/c/a./a/.a
+/b/c//a./a/./.. /b/c/a.
+/b/c//a./a/././ /b/c/a./a
+/b/c//a./a/.//a /b/c/a./a/a
+/b/c//a./a/.//. /b/c/a./a
+/b/c//a./a/./// /b/c/a./a
+/b/c//a./a//aaa /b/c/a./a/aaa
+/b/c//a./a//aa. /b/c/a./a/aa.
+/b/c//a./a//aa/ /b/c/a./a/aa
+/b/c//a./a//a.a /b/c/a./a/a.a
+/b/c//a./a//a.. /b/c/a./a/a..
+/b/c//a./a//a./ /b/c/a./a/a.
+/b/c//a./a//a/a /b/c/a./a/a/a
+/b/c//a./a//a/. /b/c/a./a/a
+/b/c//a./a//a// /b/c/a./a/a
+/b/c//a./a//.aa /b/c/a./a/.aa
+/b/c//a./a//.a. /b/c/a./a/.a.
+/b/c//a./a//.a/ /b/c/a./a/.a
+/b/c//a./a//..a /b/c/a./a/..a
+/b/c//a./a//... /b/c/a./a/...
+/b/c//a./a//../ /b/c/a.
+/b/c//a./a//./a /b/c/a./a/a
+/b/c//a./a//./. /b/c/a./a
+/b/c//a./a//.// /b/c/a./a
+/b/c//a./a///aa /b/c/a./a/aa
+/b/c//a./a///a. /b/c/a./a/a.
+/b/c//a./a///a/ /b/c/a./a/a
+/b/c//a./a///.a /b/c/a./a/.a
+/b/c//a./a///.. /b/c/a.
+/b/c//a./a///./ /b/c/a./a
+/b/c//a./a////a /b/c/a./a/a
+/b/c//a./a////. /b/c/a./a
+/b/c//a./a///// /b/c/a./a
+/b/c//a./.aaaaa /b/c/a./.aaaaa
+/b/c//a./.aaaa. /b/c/a./.aaaa.
+/b/c//a./.aaaa/ /b/c/a./.aaaa
+/b/c//a./.aaa.a /b/c/a./.aaa.a
+/b/c//a./.aaa.. /b/c/a./.aaa..
+/b/c//a./.aaa./ /b/c/a./.aaa.
+/b/c//a./.aaa/a /b/c/a./.aaa/a
+/b/c//a./.aaa/. /b/c/a./.aaa
+/b/c//a./.aaa// /b/c/a./.aaa
+/b/c//a./.aa.aa /b/c/a./.aa.aa
+/b/c//a./.aa.a. /b/c/a./.aa.a.
+/b/c//a./.aa.a/ /b/c/a./.aa.a
+/b/c//a./.aa..a /b/c/a./.aa..a
+/b/c//a./.aa... /b/c/a./.aa...
+/b/c//a./.aa../ /b/c/a./.aa..
+/b/c//a./.aa./a /b/c/a./.aa./a
+/b/c//a./.aa./. /b/c/a./.aa.
+/b/c//a./.aa.// /b/c/a./.aa.
+/b/c//a./.aa/aa /b/c/a./.aa/aa
+/b/c//a./.aa/a. /b/c/a./.aa/a.
+/b/c//a./.aa/a/ /b/c/a./.aa/a
+/b/c//a./.aa/.a /b/c/a./.aa/.a
+/b/c//a./.aa/.. /b/c/a.
+/b/c//a./.aa/./ /b/c/a./.aa
+/b/c//a./.aa//a /b/c/a./.aa/a
+/b/c//a./.aa//. /b/c/a./.aa
+/b/c//a./.aa/// /b/c/a./.aa
+/b/c//a./.a.aaa /b/c/a./.a.aaa
+/b/c//a./.a.aa. /b/c/a./.a.aa.
+/b/c//a./.a.aa/ /b/c/a./.a.aa
+/b/c//a./.a.a.a /b/c/a./.a.a.a
+/b/c//a./.a.a.. /b/c/a./.a.a..
+/b/c//a./.a.a./ /b/c/a./.a.a.
+/b/c//a./.a.a/a /b/c/a./.a.a/a
+/b/c//a./.a.a/. /b/c/a./.a.a
+/b/c//a./.a.a// /b/c/a./.a.a
+/b/c//a./.a..aa /b/c/a./.a..aa
+/b/c//a./.a..a. /b/c/a./.a..a.
+/b/c//a./.a..a/ /b/c/a./.a..a
+/b/c//a./.a...a /b/c/a./.a...a
+/b/c//a./.a.... /b/c/a./.a....
+/b/c//a./.a.../ /b/c/a./.a...
+/b/c//a./.a../a /b/c/a./.a../a
+/b/c//a./.a../. /b/c/a./.a..
+/b/c//a./.a..// /b/c/a./.a..
+/b/c//a./.a./aa /b/c/a./.a./aa
+/b/c//a./.a./a. /b/c/a./.a./a.
+/b/c//a./.a./a/ /b/c/a./.a./a
+/b/c//a./.a./.a /b/c/a./.a./.a
+/b/c//a./.a./.. /b/c/a.
+/b/c//a./.a././ /b/c/a./.a.
+/b/c//a./.a.//a /b/c/a./.a./a
+/b/c//a./.a.//. /b/c/a./.a.
+/b/c//a./.a./// /b/c/a./.a.
+/b/c//a./.a/aaa /b/c/a./.a/aaa
+/b/c//a./.a/aa. /b/c/a./.a/aa.
+/b/c//a./.a/aa/ /b/c/a./.a/aa
+/b/c//a./.a/a.a /b/c/a./.a/a.a
+/b/c//a./.a/a.. /b/c/a./.a/a..
+/b/c//a./.a/a./ /b/c/a./.a/a.
+/b/c//a./.a/a/a /b/c/a./.a/a/a
+/b/c//a./.a/a/. /b/c/a./.a/a
+/b/c//a./.a/a// /b/c/a./.a/a
+/b/c//a./.a/.aa /b/c/a./.a/.aa
+/b/c//a./.a/.a. /b/c/a./.a/.a.
+/b/c//a./.a/.a/ /b/c/a./.a/.a
+/b/c//a./.a/..a /b/c/a./.a/..a
+/b/c//a./.a/... /b/c/a./.a/...
+/b/c//a./.a/../ /b/c/a.
+/b/c//a./.a/./a /b/c/a./.a/a
+/b/c//a./.a/./. /b/c/a./.a
+/b/c//a./.a/.// /b/c/a./.a
+/b/c//a./.a//aa /b/c/a./.a/aa
+/b/c//a./.a//a. /b/c/a./.a/a.
+/b/c//a./.a//a/ /b/c/a./.a/a
+/b/c//a./.a//.a /b/c/a./.a/.a
+/b/c//a./.a//.. /b/c/a.
+/b/c//a./.a//./ /b/c/a./.a
+/b/c//a./.a///a /b/c/a./.a/a
+/b/c//a./.a///. /b/c/a./.a
+/b/c//a./.a//// /b/c/a./.a
+/b/c//a./..aaaa /b/c/a./..aaaa
+/b/c//a./..aaa. /b/c/a./..aaa.
+/b/c//a./..aaa/ /b/c/a./..aaa
+/b/c//a./..aa.a /b/c/a./..aa.a
+/b/c//a./..aa.. /b/c/a./..aa..
+/b/c//a./..aa./ /b/c/a./..aa.
+/b/c//a./..aa/a /b/c/a./..aa/a
+/b/c//a./..aa/. /b/c/a./..aa
+/b/c//a./..aa// /b/c/a./..aa
+/b/c//a./..a.aa /b/c/a./..a.aa
+/b/c//a./..a.a. /b/c/a./..a.a.
+/b/c//a./..a.a/ /b/c/a./..a.a
+/b/c//a./..a..a /b/c/a./..a..a
+/b/c//a./..a... /b/c/a./..a...
+/b/c//a./..a../ /b/c/a./..a..
+/b/c//a./..a./a /b/c/a./..a./a
+/b/c//a./..a./. /b/c/a./..a.
+/b/c//a./..a.// /b/c/a./..a.
+/b/c//a./..a/aa /b/c/a./..a/aa
+/b/c//a./..a/a. /b/c/a./..a/a.
+/b/c//a./..a/a/ /b/c/a./..a/a
+/b/c//a./..a/.a /b/c/a./..a/.a
+/b/c//a./..a/.. /b/c/a.
+/b/c//a./..a/./ /b/c/a./..a
+/b/c//a./..a//a /b/c/a./..a/a
+/b/c//a./..a//. /b/c/a./..a
+/b/c//a./..a/// /b/c/a./..a
+/b/c//a./...aaa /b/c/a./...aaa
+/b/c//a./...aa. /b/c/a./...aa.
+/b/c//a./...aa/ /b/c/a./...aa
+/b/c//a./...a.a /b/c/a./...a.a
+/b/c//a./...a.. /b/c/a./...a..
+/b/c//a./...a./ /b/c/a./...a.
+/b/c//a./...a/a /b/c/a./...a/a
+/b/c//a./...a/. /b/c/a./...a
+/b/c//a./...a// /b/c/a./...a
+/b/c//a./....aa /b/c/a./....aa
+/b/c//a./....a. /b/c/a./....a.
+/b/c//a./....a/ /b/c/a./....a
+/b/c//a./.....a /b/c/a./.....a
+/b/c//a./...... /b/c/a./......
+/b/c//a./...../ /b/c/a./.....
+/b/c//a./..../a /b/c/a./..../a
+/b/c//a./..../. /b/c/a./....
+/b/c//a./....// /b/c/a./....
+/b/c//a./.../aa /b/c/a./.../aa
+/b/c//a./.../a. /b/c/a./.../a.
+/b/c//a./.../a/ /b/c/a./.../a
+/b/c//a./.../.a /b/c/a./.../.a
+/b/c//a./.../.. /b/c/a.
+/b/c//a./..././ /b/c/a./...
+/b/c//a./...//a /b/c/a./.../a
+/b/c//a./...//. /b/c/a./...
+/b/c//a./.../// /b/c/a./...
+/b/c//a./../aaa /b/c/aaa
+/b/c//a./../aa. /b/c/aa.
+/b/c//a./../aa/ /b/c/aa
+/b/c//a./../a.a /b/c/a.a
+/b/c//a./../a.. /b/c/a..
+/b/c//a./../a./ /b/c/a.
+/b/c//a./../a/a /b/c/a/a
+/b/c//a./../a/. /b/c/a
+/b/c//a./../a// /b/c/a
+/b/c//a./../.aa /b/c/.aa
+/b/c//a./../.a. /b/c/.a.
+/b/c//a./../.a/ /b/c/.a
+/b/c//a./../..a /b/c/..a
+/b/c//a./../... /b/c/...
+/b/c//a./../../ /b
+/b/c//a./.././a /b/c/a
+/b/c//a./.././. /b/c
+/b/c//a./../.// /b/c
+/b/c//a./..//aa /b/c/aa
+/b/c//a./..//a. /b/c/a.
+/b/c//a./..//a/ /b/c/a
+/b/c//a./..//.a /b/c/.a
+/b/c//a./..//.. /b
+/b/c//a./..//./ /b/c
+/b/c//a./..///a /b/c/a
+/b/c//a./..///. /b/c
+/b/c//a./..//// /b/c
+/b/c//a././aaaa /b/c/a./aaaa
+/b/c//a././aaa. /b/c/a./aaa.
+/b/c//a././aaa/ /b/c/a./aaa
+/b/c//a././aa.a /b/c/a./aa.a
+/b/c//a././aa.. /b/c/a./aa..
+/b/c//a././aa./ /b/c/a./aa.
+/b/c//a././aa/a /b/c/a./aa/a
+/b/c//a././aa/. /b/c/a./aa
+/b/c//a././aa// /b/c/a./aa
+/b/c//a././a.aa /b/c/a./a.aa
+/b/c//a././a.a. /b/c/a./a.a.
+/b/c//a././a.a/ /b/c/a./a.a
+/b/c//a././a..a /b/c/a./a..a
+/b/c//a././a... /b/c/a./a...
+/b/c//a././a../ /b/c/a./a..
+/b/c//a././a./a /b/c/a./a./a
+/b/c//a././a./. /b/c/a./a.
+/b/c//a././a.// /b/c/a./a.
+/b/c//a././a/aa /b/c/a./a/aa
+/b/c//a././a/a. /b/c/a./a/a.
+/b/c//a././a/a/ /b/c/a./a/a
+/b/c//a././a/.a /b/c/a./a/.a
+/b/c//a././a/.. /b/c/a.
+/b/c//a././a/./ /b/c/a./a
+/b/c//a././a//a /b/c/a./a/a
+/b/c//a././a//. /b/c/a./a
+/b/c//a././a/// /b/c/a./a
+/b/c//a././.aaa /b/c/a./.aaa
+/b/c//a././.aa. /b/c/a./.aa.
+/b/c//a././.aa/ /b/c/a./.aa
+/b/c//a././.a.a /b/c/a./.a.a
+/b/c//a././.a.. /b/c/a./.a..
+/b/c//a././.a./ /b/c/a./.a.
+/b/c//a././.a/a /b/c/a./.a/a
+/b/c//a././.a/. /b/c/a./.a
+/b/c//a././.a// /b/c/a./.a
+/b/c//a././..aa /b/c/a./..aa
+/b/c//a././..a. /b/c/a./..a.
+/b/c//a././..a/ /b/c/a./..a
+/b/c//a././...a /b/c/a./...a
+/b/c//a././.... /b/c/a./....
+/b/c//a././.../ /b/c/a./...
+/b/c//a././../a /b/c/a
+/b/c//a././../. /b/c
+/b/c//a././..// /b/c
+/b/c//a./././aa /b/c/a./aa
+/b/c//a./././a. /b/c/a./a.
+/b/c//a./././a/ /b/c/a./a
+/b/c//a./././.a /b/c/a./.a
+/b/c//a./././.. /b/c
+/b/c//a././././ /b/c/a.
+/b/c//a./././/a /b/c/a./a
+/b/c//a./././/. /b/c/a.
+/b/c//a./././// /b/c/a.
+/b/c//a././/aaa /b/c/a./aaa
+/b/c//a././/aa. /b/c/a./aa.
+/b/c//a././/aa/ /b/c/a./aa
+/b/c//a././/a.a /b/c/a./a.a
+/b/c//a././/a.. /b/c/a./a..
+/b/c//a././/a./ /b/c/a./a.
+/b/c//a././/a/a /b/c/a./a/a
+/b/c//a././/a/. /b/c/a./a
+/b/c//a././/a// /b/c/a./a
+/b/c//a././/.aa /b/c/a./.aa
+/b/c//a././/.a. /b/c/a./.a.
+/b/c//a././/.a/ /b/c/a./.a
+/b/c//a././/..a /b/c/a./..a
+/b/c//a././/... /b/c/a./...
+/b/c//a././/../ /b/c
+/b/c//a././/./a /b/c/a./a
+/b/c//a././/./. /b/c/a.
+/b/c//a././/.// /b/c/a.
+/b/c//a././//aa /b/c/a./aa
+/b/c//a././//a. /b/c/a./a.
+/b/c//a././//a/ /b/c/a./a
+/b/c//a././//.a /b/c/a./.a
+/b/c//a././//.. /b/c
+/b/c//a././//./ /b/c/a.
+/b/c//a././///a /b/c/a./a
+/b/c//a././///. /b/c/a.
+/b/c//a././//// /b/c/a.
+/b/c//a.//aaaaa /b/c/a./aaaaa
+/b/c//a.//aaaa. /b/c/a./aaaa.
+/b/c//a.//aaaa/ /b/c/a./aaaa
+/b/c//a.//aaa.a /b/c/a./aaa.a
+/b/c//a.//aaa.. /b/c/a./aaa..
+/b/c//a.//aaa./ /b/c/a./aaa.
+/b/c//a.//aaa/a /b/c/a./aaa/a
+/b/c//a.//aaa/. /b/c/a./aaa
+/b/c//a.//aaa// /b/c/a./aaa
+/b/c//a.//aa.aa /b/c/a./aa.aa
+/b/c//a.//aa.a. /b/c/a./aa.a.
+/b/c//a.//aa.a/ /b/c/a./aa.a
+/b/c//a.//aa..a /b/c/a./aa..a
+/b/c//a.//aa... /b/c/a./aa...
+/b/c//a.//aa../ /b/c/a./aa..
+/b/c//a.//aa./a /b/c/a./aa./a
+/b/c//a.//aa./. /b/c/a./aa.
+/b/c//a.//aa.// /b/c/a./aa.
+/b/c//a.//aa/aa /b/c/a./aa/aa
+/b/c//a.//aa/a. /b/c/a./aa/a.
+/b/c//a.//aa/a/ /b/c/a./aa/a
+/b/c//a.//aa/.a /b/c/a./aa/.a
+/b/c//a.//aa/.. /b/c/a.
+/b/c//a.//aa/./ /b/c/a./aa
+/b/c//a.//aa//a /b/c/a./aa/a
+/b/c//a.//aa//. /b/c/a./aa
+/b/c//a.//aa/// /b/c/a./aa
+/b/c//a.//a.aaa /b/c/a./a.aaa
+/b/c//a.//a.aa. /b/c/a./a.aa.
+/b/c//a.//a.aa/ /b/c/a./a.aa
+/b/c//a.//a.a.a /b/c/a./a.a.a
+/b/c//a.//a.a.. /b/c/a./a.a..
+/b/c//a.//a.a./ /b/c/a./a.a.
+/b/c//a.//a.a/a /b/c/a./a.a/a
+/b/c//a.//a.a/. /b/c/a./a.a
+/b/c//a.//a.a// /b/c/a./a.a
+/b/c//a.//a..aa /b/c/a./a..aa
+/b/c//a.//a..a. /b/c/a./a..a.
+/b/c//a.//a..a/ /b/c/a./a..a
+/b/c//a.//a...a /b/c/a./a...a
+/b/c//a.//a.... /b/c/a./a....
+/b/c//a.//a.../ /b/c/a./a...
+/b/c//a.//a../a /b/c/a./a../a
+/b/c//a.//a../. /b/c/a./a..
+/b/c//a.//a..// /b/c/a./a..
+/b/c//a.//a./aa /b/c/a./a./aa
+/b/c//a.//a./a. /b/c/a./a./a.
+/b/c//a.//a./a/ /b/c/a./a./a
+/b/c//a.//a./.a /b/c/a./a./.a
+/b/c//a.//a./.. /b/c/a.
+/b/c//a.//a././ /b/c/a./a.
+/b/c//a.//a.//a /b/c/a./a./a
+/b/c//a.//a.//. /b/c/a./a.
+/b/c//a.//a./// /b/c/a./a.
+/b/c//a.//a/aaa /b/c/a./a/aaa
+/b/c//a.//a/aa. /b/c/a./a/aa.
+/b/c//a.//a/aa/ /b/c/a./a/aa
+/b/c//a.//a/a.a /b/c/a./a/a.a
+/b/c//a.//a/a.. /b/c/a./a/a..
+/b/c//a.//a/a./ /b/c/a./a/a.
+/b/c//a.//a/a/a /b/c/a./a/a/a
+/b/c//a.//a/a/. /b/c/a./a/a
+/b/c//a.//a/a// /b/c/a./a/a
+/b/c//a.//a/.aa /b/c/a./a/.aa
+/b/c//a.//a/.a. /b/c/a./a/.a.
+/b/c//a.//a/.a/ /b/c/a./a/.a
+/b/c//a.//a/..a /b/c/a./a/..a
+/b/c//a.//a/... /b/c/a./a/...
+/b/c//a.//a/../ /b/c/a.
+/b/c//a.//a/./a /b/c/a./a/a
+/b/c//a.//a/./. /b/c/a./a
+/b/c//a.//a/.// /b/c/a./a
+/b/c//a.//a//aa /b/c/a./a/aa
+/b/c//a.//a//a. /b/c/a./a/a.
+/b/c//a.//a//a/ /b/c/a./a/a
+/b/c//a.//a//.a /b/c/a./a/.a
+/b/c//a.//a//.. /b/c/a.
+/b/c//a.//a//./ /b/c/a./a
+/b/c//a.//a///a /b/c/a./a/a
+/b/c//a.//a///. /b/c/a./a
+/b/c//a.//a//// /b/c/a./a
+/b/c//a.//.aaaa /b/c/a./.aaaa
+/b/c//a.//.aaa. /b/c/a./.aaa.
+/b/c//a.//.aaa/ /b/c/a./.aaa
+/b/c//a.//.aa.a /b/c/a./.aa.a
+/b/c//a.//.aa.. /b/c/a./.aa..
+/b/c//a.//.aa./ /b/c/a./.aa.
+/b/c//a.//.aa/a /b/c/a./.aa/a
+/b/c//a.//.aa/. /b/c/a./.aa
+/b/c//a.//.aa// /b/c/a./.aa
+/b/c//a.//.a.aa /b/c/a./.a.aa
+/b/c//a.//.a.a. /b/c/a./.a.a.
+/b/c//a.//.a.a/ /b/c/a./.a.a
+/b/c//a.//.a..a /b/c/a./.a..a
+/b/c//a.//.a... /b/c/a./.a...
+/b/c//a.//.a../ /b/c/a./.a..
+/b/c//a.//.a./a /b/c/a./.a./a
+/b/c//a.//.a./. /b/c/a./.a.
+/b/c//a.//.a.// /b/c/a./.a.
+/b/c//a.//.a/aa /b/c/a./.a/aa
+/b/c//a.//.a/a. /b/c/a./.a/a.
+/b/c//a.//.a/a/ /b/c/a./.a/a
+/b/c//a.//.a/.a /b/c/a./.a/.a
+/b/c//a.//.a/.. /b/c/a.
+/b/c//a.//.a/./ /b/c/a./.a
+/b/c//a.//.a//a /b/c/a./.a/a
+/b/c//a.//.a//. /b/c/a./.a
+/b/c//a.//.a/// /b/c/a./.a
+/b/c//a.//..aaa /b/c/a./..aaa
+/b/c//a.//..aa. /b/c/a./..aa.
+/b/c//a.//..aa/ /b/c/a./..aa
+/b/c//a.//..a.a /b/c/a./..a.a
+/b/c//a.//..a.. /b/c/a./..a..
+/b/c//a.//..a./ /b/c/a./..a.
+/b/c//a.//..a/a /b/c/a./..a/a
+/b/c//a.//..a/. /b/c/a./..a
+/b/c//a.//..a// /b/c/a./..a
+/b/c//a.//...aa /b/c/a./...aa
+/b/c//a.//...a. /b/c/a./...a.
+/b/c//a.//...a/ /b/c/a./...a
+/b/c//a.//....a /b/c/a./....a
+/b/c//a.//..... /b/c/a./.....
+/b/c//a.//..../ /b/c/a./....
+/b/c//a.//.../a /b/c/a./.../a
+/b/c//a.//.../. /b/c/a./...
+/b/c//a.//...// /b/c/a./...
+/b/c//a.//../aa /b/c/aa
+/b/c//a.//../a. /b/c/a.
+/b/c//a.//../a/ /b/c/a
+/b/c//a.//../.a /b/c/.a
+/b/c//a.//../.. /b
+/b/c//a.//.././ /b/c
+/b/c//a.//..//a /b/c/a
+/b/c//a.//..//. /b/c
+/b/c//a.//../// /b/c
+/b/c//a.//./aaa /b/c/a./aaa
+/b/c//a.//./aa. /b/c/a./aa.
+/b/c//a.//./aa/ /b/c/a./aa
+/b/c//a.//./a.a /b/c/a./a.a
+/b/c//a.//./a.. /b/c/a./a..
+/b/c//a.//./a./ /b/c/a./a.
+/b/c//a.//./a/a /b/c/a./a/a
+/b/c//a.//./a/. /b/c/a./a
+/b/c//a.//./a// /b/c/a./a
+/b/c//a.//./.aa /b/c/a./.aa
+/b/c//a.//./.a. /b/c/a./.a.
+/b/c//a.//./.a/ /b/c/a./.a
+/b/c//a.//./..a /b/c/a./..a
+/b/c//a.//./... /b/c/a./...
+/b/c//a.//./../ /b/c
+/b/c//a.//././a /b/c/a./a
+/b/c//a.//././. /b/c/a.
+/b/c//a.//./.// /b/c/a.
+/b/c//a.//.//aa /b/c/a./aa
+/b/c//a.//.//a. /b/c/a./a.
+/b/c//a.//.//a/ /b/c/a./a
+/b/c//a.//.//.a /b/c/a./.a
+/b/c//a.//.//.. /b/c
+/b/c//a.//.//./ /b/c/a.
+/b/c//a.//.///a /b/c/a./a
+/b/c//a.//.///. /b/c/a.
+/b/c//a.//.//// /b/c/a.
+/b/c//a.///aaaa /b/c/a./aaaa
+/b/c//a.///aaa. /b/c/a./aaa.
+/b/c//a.///aaa/ /b/c/a./aaa
+/b/c//a.///aa.a /b/c/a./aa.a
+/b/c//a.///aa.. /b/c/a./aa..
+/b/c//a.///aa./ /b/c/a./aa.
+/b/c//a.///aa/a /b/c/a./aa/a
+/b/c//a.///aa/. /b/c/a./aa
+/b/c//a.///aa// /b/c/a./aa
+/b/c//a.///a.aa /b/c/a./a.aa
+/b/c//a.///a.a. /b/c/a./a.a.
+/b/c//a.///a.a/ /b/c/a./a.a
+/b/c//a.///a..a /b/c/a./a..a
+/b/c//a.///a... /b/c/a./a...
+/b/c//a.///a../ /b/c/a./a..
+/b/c//a.///a./a /b/c/a./a./a
+/b/c//a.///a./. /b/c/a./a.
+/b/c//a.///a.// /b/c/a./a.
+/b/c//a.///a/aa /b/c/a./a/aa
+/b/c//a.///a/a. /b/c/a./a/a.
+/b/c//a.///a/a/ /b/c/a./a/a
+/b/c//a.///a/.a /b/c/a./a/.a
+/b/c//a.///a/.. /b/c/a.
+/b/c//a.///a/./ /b/c/a./a
+/b/c//a.///a//a /b/c/a./a/a
+/b/c//a.///a//. /b/c/a./a
+/b/c//a.///a/// /b/c/a./a
+/b/c//a.///.aaa /b/c/a./.aaa
+/b/c//a.///.aa. /b/c/a./.aa.
+/b/c//a.///.aa/ /b/c/a./.aa
+/b/c//a.///.a.a /b/c/a./.a.a
+/b/c//a.///.a.. /b/c/a./.a..
+/b/c//a.///.a./ /b/c/a./.a.
+/b/c//a.///.a/a /b/c/a./.a/a
+/b/c//a.///.a/. /b/c/a./.a
+/b/c//a.///.a// /b/c/a./.a
+/b/c//a.///..aa /b/c/a./..aa
+/b/c//a.///..a. /b/c/a./..a.
+/b/c//a.///..a/ /b/c/a./..a
+/b/c//a.///...a /b/c/a./...a
+/b/c//a.///.... /b/c/a./....
+/b/c//a.///.../ /b/c/a./...
+/b/c//a.///../a /b/c/a
+/b/c//a.///../. /b/c
+/b/c//a.///..// /b/c
+/b/c//a.///./aa /b/c/a./aa
+/b/c//a.///./a. /b/c/a./a.
+/b/c//a.///./a/ /b/c/a./a
+/b/c//a.///./.a /b/c/a./.a
+/b/c//a.///./.. /b/c
+/b/c//a.///././ /b/c/a.
+/b/c//a.///.//a /b/c/a./a
+/b/c//a.///.//. /b/c/a.
+/b/c//a.///./// /b/c/a.
+/b/c//a.////aaa /b/c/a./aaa
+/b/c//a.////aa. /b/c/a./aa.
+/b/c//a.////aa/ /b/c/a./aa
+/b/c//a.////a.a /b/c/a./a.a
+/b/c//a.////a.. /b/c/a./a..
+/b/c//a.////a./ /b/c/a./a.
+/b/c//a.////a/a /b/c/a./a/a
+/b/c//a.////a/. /b/c/a./a
+/b/c//a.////a// /b/c/a./a
+/b/c//a.////.aa /b/c/a./.aa
+/b/c//a.////.a. /b/c/a./.a.
+/b/c//a.////.a/ /b/c/a./.a
+/b/c//a.////..a /b/c/a./..a
+/b/c//a.////... /b/c/a./...
+/b/c//a.////../ /b/c
+/b/c//a.////./a /b/c/a./a
+/b/c//a.////./. /b/c/a.
+/b/c//a.////.// /b/c/a.
+/b/c//a./////aa /b/c/a./aa
+/b/c//a./////a. /b/c/a./a.
+/b/c//a./////a/ /b/c/a./a
+/b/c//a./////.a /b/c/a./.a
+/b/c//a./////.. /b/c
+/b/c//a./////./ /b/c/a.
+/b/c//a.//////a /b/c/a./a
+/b/c//a.//////. /b/c/a.
+/b/c//a./////// /b/c/a.
+/b/c//a/aaaaaaa /b/c/a/aaaaaaa
+/b/c//a/aaaaaa. /b/c/a/aaaaaa.
+/b/c//a/aaaaaa/ /b/c/a/aaaaaa
+/b/c//a/aaaaa.a /b/c/a/aaaaa.a
+/b/c//a/aaaaa.. /b/c/a/aaaaa..
+/b/c//a/aaaaa./ /b/c/a/aaaaa.
+/b/c//a/aaaaa/a /b/c/a/aaaaa/a
+/b/c//a/aaaaa/. /b/c/a/aaaaa
+/b/c//a/aaaaa// /b/c/a/aaaaa
+/b/c//a/aaaa.aa /b/c/a/aaaa.aa
+/b/c//a/aaaa.a. /b/c/a/aaaa.a.
+/b/c//a/aaaa.a/ /b/c/a/aaaa.a
+/b/c//a/aaaa..a /b/c/a/aaaa..a
+/b/c//a/aaaa... /b/c/a/aaaa...
+/b/c//a/aaaa../ /b/c/a/aaaa..
+/b/c//a/aaaa./a /b/c/a/aaaa./a
+/b/c//a/aaaa./. /b/c/a/aaaa.
+/b/c//a/aaaa.// /b/c/a/aaaa.
+/b/c//a/aaaa/aa /b/c/a/aaaa/aa
+/b/c//a/aaaa/a. /b/c/a/aaaa/a.
+/b/c//a/aaaa/a/ /b/c/a/aaaa/a
+/b/c//a/aaaa/.a /b/c/a/aaaa/.a
+/b/c//a/aaaa/.. /b/c/a
+/b/c//a/aaaa/./ /b/c/a/aaaa
+/b/c//a/aaaa//a /b/c/a/aaaa/a
+/b/c//a/aaaa//. /b/c/a/aaaa
+/b/c//a/aaaa/// /b/c/a/aaaa
+/b/c//a/aaa.aaa /b/c/a/aaa.aaa
+/b/c//a/aaa.aa. /b/c/a/aaa.aa.
+/b/c//a/aaa.aa/ /b/c/a/aaa.aa
+/b/c//a/aaa.a.a /b/c/a/aaa.a.a
+/b/c//a/aaa.a.. /b/c/a/aaa.a..
+/b/c//a/aaa.a./ /b/c/a/aaa.a.
+/b/c//a/aaa.a/a /b/c/a/aaa.a/a
+/b/c//a/aaa.a/. /b/c/a/aaa.a
+/b/c//a/aaa.a// /b/c/a/aaa.a
+/b/c//a/aaa..aa /b/c/a/aaa..aa
+/b/c//a/aaa..a. /b/c/a/aaa..a.
+/b/c//a/aaa..a/ /b/c/a/aaa..a
+/b/c//a/aaa...a /b/c/a/aaa...a
+/b/c//a/aaa.... /b/c/a/aaa....
+/b/c//a/aaa.../ /b/c/a/aaa...
+/b/c//a/aaa../a /b/c/a/aaa../a
+/b/c//a/aaa../. /b/c/a/aaa..
+/b/c//a/aaa..// /b/c/a/aaa..
+/b/c//a/aaa./aa /b/c/a/aaa./aa
+/b/c//a/aaa./a. /b/c/a/aaa./a.
+/b/c//a/aaa./a/ /b/c/a/aaa./a
+/b/c//a/aaa./.a /b/c/a/aaa./.a
+/b/c//a/aaa./.. /b/c/a
+/b/c//a/aaa././ /b/c/a/aaa.
+/b/c//a/aaa.//a /b/c/a/aaa./a
+/b/c//a/aaa.//. /b/c/a/aaa.
+/b/c//a/aaa./// /b/c/a/aaa.
+/b/c//a/aaa/aaa /b/c/a/aaa/aaa
+/b/c//a/aaa/aa. /b/c/a/aaa/aa.
+/b/c//a/aaa/aa/ /b/c/a/aaa/aa
+/b/c//a/aaa/a.a /b/c/a/aaa/a.a
+/b/c//a/aaa/a.. /b/c/a/aaa/a..
+/b/c//a/aaa/a./ /b/c/a/aaa/a.
+/b/c//a/aaa/a/a /b/c/a/aaa/a/a
+/b/c//a/aaa/a/. /b/c/a/aaa/a
+/b/c//a/aaa/a// /b/c/a/aaa/a
+/b/c//a/aaa/.aa /b/c/a/aaa/.aa
+/b/c//a/aaa/.a. /b/c/a/aaa/.a.
+/b/c//a/aaa/.a/ /b/c/a/aaa/.a
+/b/c//a/aaa/..a /b/c/a/aaa/..a
+/b/c//a/aaa/... /b/c/a/aaa/...
+/b/c//a/aaa/../ /b/c/a
+/b/c//a/aaa/./a /b/c/a/aaa/a
+/b/c//a/aaa/./. /b/c/a/aaa
+/b/c//a/aaa/.// /b/c/a/aaa
+/b/c//a/aaa//aa /b/c/a/aaa/aa
+/b/c//a/aaa//a. /b/c/a/aaa/a.
+/b/c//a/aaa//a/ /b/c/a/aaa/a
+/b/c//a/aaa//.a /b/c/a/aaa/.a
+/b/c//a/aaa//.. /b/c/a
+/b/c//a/aaa//./ /b/c/a/aaa
+/b/c//a/aaa///a /b/c/a/aaa/a
+/b/c//a/aaa///. /b/c/a/aaa
+/b/c//a/aaa//// /b/c/a/aaa
+/b/c//a/aa.aaaa /b/c/a/aa.aaaa
+/b/c//a/aa.aaa. /b/c/a/aa.aaa.
+/b/c//a/aa.aaa/ /b/c/a/aa.aaa
+/b/c//a/aa.aa.a /b/c/a/aa.aa.a
+/b/c//a/aa.aa.. /b/c/a/aa.aa..
+/b/c//a/aa.aa./ /b/c/a/aa.aa.
+/b/c//a/aa.aa/a /b/c/a/aa.aa/a
+/b/c//a/aa.aa/. /b/c/a/aa.aa
+/b/c//a/aa.aa// /b/c/a/aa.aa
+/b/c//a/aa.a.aa /b/c/a/aa.a.aa
+/b/c//a/aa.a.a. /b/c/a/aa.a.a.
+/b/c//a/aa.a.a/ /b/c/a/aa.a.a
+/b/c//a/aa.a..a /b/c/a/aa.a..a
+/b/c//a/aa.a... /b/c/a/aa.a...
+/b/c//a/aa.a../ /b/c/a/aa.a..
+/b/c//a/aa.a./a /b/c/a/aa.a./a
+/b/c//a/aa.a./. /b/c/a/aa.a.
+/b/c//a/aa.a.// /b/c/a/aa.a.
+/b/c//a/aa.a/aa /b/c/a/aa.a/aa
+/b/c//a/aa.a/a. /b/c/a/aa.a/a.
+/b/c//a/aa.a/a/ /b/c/a/aa.a/a
+/b/c//a/aa.a/.a /b/c/a/aa.a/.a
+/b/c//a/aa.a/.. /b/c/a
+/b/c//a/aa.a/./ /b/c/a/aa.a
+/b/c//a/aa.a//a /b/c/a/aa.a/a
+/b/c//a/aa.a//. /b/c/a/aa.a
+/b/c//a/aa.a/// /b/c/a/aa.a
+/b/c//a/aa..aaa /b/c/a/aa..aaa
+/b/c//a/aa..aa. /b/c/a/aa..aa.
+/b/c//a/aa..aa/ /b/c/a/aa..aa
+/b/c//a/aa..a.a /b/c/a/aa..a.a
+/b/c//a/aa..a.. /b/c/a/aa..a..
+/b/c//a/aa..a./ /b/c/a/aa..a.
+/b/c//a/aa..a/a /b/c/a/aa..a/a
+/b/c//a/aa..a/. /b/c/a/aa..a
+/b/c//a/aa..a// /b/c/a/aa..a
+/b/c//a/aa...aa /b/c/a/aa...aa
+/b/c//a/aa...a. /b/c/a/aa...a.
+/b/c//a/aa...a/ /b/c/a/aa...a
+/b/c//a/aa....a /b/c/a/aa....a
+/b/c//a/aa..... /b/c/a/aa.....
+/b/c//a/aa..../ /b/c/a/aa....
+/b/c//a/aa.../a /b/c/a/aa.../a
+/b/c//a/aa.../. /b/c/a/aa...
+/b/c//a/aa...// /b/c/a/aa...
+/b/c//a/aa../aa /b/c/a/aa../aa
+/b/c//a/aa../a. /b/c/a/aa../a.
+/b/c//a/aa../a/ /b/c/a/aa../a
+/b/c//a/aa../.a /b/c/a/aa../.a
+/b/c//a/aa../.. /b/c/a
+/b/c//a/aa.././ /b/c/a/aa..
+/b/c//a/aa..//a /b/c/a/aa../a
+/b/c//a/aa..//. /b/c/a/aa..
+/b/c//a/aa../// /b/c/a/aa..
+/b/c//a/aa./aaa /b/c/a/aa./aaa
+/b/c//a/aa./aa. /b/c/a/aa./aa.
+/b/c//a/aa./aa/ /b/c/a/aa./aa
+/b/c//a/aa./a.a /b/c/a/aa./a.a
+/b/c//a/aa./a.. /b/c/a/aa./a..
+/b/c//a/aa./a./ /b/c/a/aa./a.
+/b/c//a/aa./a/a /b/c/a/aa./a/a
+/b/c//a/aa./a/. /b/c/a/aa./a
+/b/c//a/aa./a// /b/c/a/aa./a
+/b/c//a/aa./.aa /b/c/a/aa./.aa
+/b/c//a/aa./.a. /b/c/a/aa./.a.
+/b/c//a/aa./.a/ /b/c/a/aa./.a
+/b/c//a/aa./..a /b/c/a/aa./..a
+/b/c//a/aa./... /b/c/a/aa./...
+/b/c//a/aa./../ /b/c/a
+/b/c//a/aa././a /b/c/a/aa./a
+/b/c//a/aa././. /b/c/a/aa.
+/b/c//a/aa./.// /b/c/a/aa.
+/b/c//a/aa.//aa /b/c/a/aa./aa
+/b/c//a/aa.//a. /b/c/a/aa./a.
+/b/c//a/aa.//a/ /b/c/a/aa./a
+/b/c//a/aa.//.a /b/c/a/aa./.a
+/b/c//a/aa.//.. /b/c/a
+/b/c//a/aa.//./ /b/c/a/aa.
+/b/c//a/aa.///a /b/c/a/aa./a
+/b/c//a/aa.///. /b/c/a/aa.
+/b/c//a/aa.//// /b/c/a/aa.
+/b/c//a/aa/aaaa /b/c/a/aa/aaaa
+/b/c//a/aa/aaa. /b/c/a/aa/aaa.
+/b/c//a/aa/aaa/ /b/c/a/aa/aaa
+/b/c//a/aa/aa.a /b/c/a/aa/aa.a
+/b/c//a/aa/aa.. /b/c/a/aa/aa..
+/b/c//a/aa/aa./ /b/c/a/aa/aa.
+/b/c//a/aa/aa/a /b/c/a/aa/aa/a
+/b/c//a/aa/aa/. /b/c/a/aa/aa
+/b/c//a/aa/aa// /b/c/a/aa/aa
+/b/c//a/aa/a.aa /b/c/a/aa/a.aa
+/b/c//a/aa/a.a. /b/c/a/aa/a.a.
+/b/c//a/aa/a.a/ /b/c/a/aa/a.a
+/b/c//a/aa/a..a /b/c/a/aa/a..a
+/b/c//a/aa/a... /b/c/a/aa/a...
+/b/c//a/aa/a../ /b/c/a/aa/a..
+/b/c//a/aa/a./a /b/c/a/aa/a./a
+/b/c//a/aa/a./. /b/c/a/aa/a.
+/b/c//a/aa/a.// /b/c/a/aa/a.
+/b/c//a/aa/a/aa /b/c/a/aa/a/aa
+/b/c//a/aa/a/a. /b/c/a/aa/a/a.
+/b/c//a/aa/a/a/ /b/c/a/aa/a/a
+/b/c//a/aa/a/.a /b/c/a/aa/a/.a
+/b/c//a/aa/a/.. /b/c/a/aa
+/b/c//a/aa/a/./ /b/c/a/aa/a
+/b/c//a/aa/a//a /b/c/a/aa/a/a
+/b/c//a/aa/a//. /b/c/a/aa/a
+/b/c//a/aa/a/// /b/c/a/aa/a
+/b/c//a/aa/.aaa /b/c/a/aa/.aaa
+/b/c//a/aa/.aa. /b/c/a/aa/.aa.
+/b/c//a/aa/.aa/ /b/c/a/aa/.aa
+/b/c//a/aa/.a.a /b/c/a/aa/.a.a
+/b/c//a/aa/.a.. /b/c/a/aa/.a..
+/b/c//a/aa/.a./ /b/c/a/aa/.a.
+/b/c//a/aa/.a/a /b/c/a/aa/.a/a
+/b/c//a/aa/.a/. /b/c/a/aa/.a
+/b/c//a/aa/.a// /b/c/a/aa/.a
+/b/c//a/aa/..aa /b/c/a/aa/..aa
+/b/c//a/aa/..a. /b/c/a/aa/..a.
+/b/c//a/aa/..a/ /b/c/a/aa/..a
+/b/c//a/aa/...a /b/c/a/aa/...a
+/b/c//a/aa/.... /b/c/a/aa/....
+/b/c//a/aa/.../ /b/c/a/aa/...
+/b/c//a/aa/../a /b/c/a/a
+/b/c//a/aa/../. /b/c/a
+/b/c//a/aa/..// /b/c/a
+/b/c//a/aa/./aa /b/c/a/aa/aa
+/b/c//a/aa/./a. /b/c/a/aa/a.
+/b/c//a/aa/./a/ /b/c/a/aa/a
+/b/c//a/aa/./.a /b/c/a/aa/.a
+/b/c//a/aa/./.. /b/c/a
+/b/c//a/aa/././ /b/c/a/aa
+/b/c//a/aa/.//a /b/c/a/aa/a
+/b/c//a/aa/.//. /b/c/a/aa
+/b/c//a/aa/./// /b/c/a/aa
+/b/c//a/aa//aaa /b/c/a/aa/aaa
+/b/c//a/aa//aa. /b/c/a/aa/aa.
+/b/c//a/aa//aa/ /b/c/a/aa/aa
+/b/c//a/aa//a.a /b/c/a/aa/a.a
+/b/c//a/aa//a.. /b/c/a/aa/a..
+/b/c//a/aa//a./ /b/c/a/aa/a.
+/b/c//a/aa//a/a /b/c/a/aa/a/a
+/b/c//a/aa//a/. /b/c/a/aa/a
+/b/c//a/aa//a// /b/c/a/aa/a
+/b/c//a/aa//.aa /b/c/a/aa/.aa
+/b/c//a/aa//.a. /b/c/a/aa/.a.
+/b/c//a/aa//.a/ /b/c/a/aa/.a
+/b/c//a/aa//..a /b/c/a/aa/..a
+/b/c//a/aa//... /b/c/a/aa/...
+/b/c//a/aa//../ /b/c/a
+/b/c//a/aa//./a /b/c/a/aa/a
+/b/c//a/aa//./. /b/c/a/aa
+/b/c//a/aa//.// /b/c/a/aa
+/b/c//a/aa///aa /b/c/a/aa/aa
+/b/c//a/aa///a. /b/c/a/aa/a.
+/b/c//a/aa///a/ /b/c/a/aa/a
+/b/c//a/aa///.a /b/c/a/aa/.a
+/b/c//a/aa///.. /b/c/a
+/b/c//a/aa///./ /b/c/a/aa
+/b/c//a/aa////a /b/c/a/aa/a
+/b/c//a/aa////. /b/c/a/aa
+/b/c//a/aa///// /b/c/a/aa
+/b/c//a/a.aaaaa /b/c/a/a.aaaaa
+/b/c//a/a.aaaa. /b/c/a/a.aaaa.
+/b/c//a/a.aaaa/ /b/c/a/a.aaaa
+/b/c//a/a.aaa.a /b/c/a/a.aaa.a
+/b/c//a/a.aaa.. /b/c/a/a.aaa..
+/b/c//a/a.aaa./ /b/c/a/a.aaa.
+/b/c//a/a.aaa/a /b/c/a/a.aaa/a
+/b/c//a/a.aaa/. /b/c/a/a.aaa
+/b/c//a/a.aaa// /b/c/a/a.aaa
+/b/c//a/a.aa.aa /b/c/a/a.aa.aa
+/b/c//a/a.aa.a. /b/c/a/a.aa.a.
+/b/c//a/a.aa.a/ /b/c/a/a.aa.a
+/b/c//a/a.aa..a /b/c/a/a.aa..a
+/b/c//a/a.aa... /b/c/a/a.aa...
+/b/c//a/a.aa../ /b/c/a/a.aa..
+/b/c//a/a.aa./a /b/c/a/a.aa./a
+/b/c//a/a.aa./. /b/c/a/a.aa.
+/b/c//a/a.aa.// /b/c/a/a.aa.
+/b/c//a/a.aa/aa /b/c/a/a.aa/aa
+/b/c//a/a.aa/a. /b/c/a/a.aa/a.
+/b/c//a/a.aa/a/ /b/c/a/a.aa/a
+/b/c//a/a.aa/.a /b/c/a/a.aa/.a
+/b/c//a/a.aa/.. /b/c/a
+/b/c//a/a.aa/./ /b/c/a/a.aa
+/b/c//a/a.aa//a /b/c/a/a.aa/a
+/b/c//a/a.aa//. /b/c/a/a.aa
+/b/c//a/a.aa/// /b/c/a/a.aa
+/b/c//a/a.a.aaa /b/c/a/a.a.aaa
+/b/c//a/a.a.aa. /b/c/a/a.a.aa.
+/b/c//a/a.a.aa/ /b/c/a/a.a.aa
+/b/c//a/a.a.a.a /b/c/a/a.a.a.a
+/b/c//a/a.a.a.. /b/c/a/a.a.a..
+/b/c//a/a.a.a./ /b/c/a/a.a.a.
+/b/c//a/a.a.a/a /b/c/a/a.a.a/a
+/b/c//a/a.a.a/. /b/c/a/a.a.a
+/b/c//a/a.a.a// /b/c/a/a.a.a
+/b/c//a/a.a..aa /b/c/a/a.a..aa
+/b/c//a/a.a..a. /b/c/a/a.a..a.
+/b/c//a/a.a..a/ /b/c/a/a.a..a
+/b/c//a/a.a...a /b/c/a/a.a...a
+/b/c//a/a.a.... /b/c/a/a.a....
+/b/c//a/a.a.../ /b/c/a/a.a...
+/b/c//a/a.a../a /b/c/a/a.a../a
+/b/c//a/a.a../. /b/c/a/a.a..
+/b/c//a/a.a..// /b/c/a/a.a..
+/b/c//a/a.a./aa /b/c/a/a.a./aa
+/b/c//a/a.a./a. /b/c/a/a.a./a.
+/b/c//a/a.a./a/ /b/c/a/a.a./a
+/b/c//a/a.a./.a /b/c/a/a.a./.a
+/b/c//a/a.a./.. /b/c/a
+/b/c//a/a.a././ /b/c/a/a.a.
+/b/c//a/a.a.//a /b/c/a/a.a./a
+/b/c//a/a.a.//. /b/c/a/a.a.
+/b/c//a/a.a./// /b/c/a/a.a.
+/b/c//a/a.a/aaa /b/c/a/a.a/aaa
+/b/c//a/a.a/aa. /b/c/a/a.a/aa.
+/b/c//a/a.a/aa/ /b/c/a/a.a/aa
+/b/c//a/a.a/a.a /b/c/a/a.a/a.a
+/b/c//a/a.a/a.. /b/c/a/a.a/a..
+/b/c//a/a.a/a./ /b/c/a/a.a/a.
+/b/c//a/a.a/a/a /b/c/a/a.a/a/a
+/b/c//a/a.a/a/. /b/c/a/a.a/a
+/b/c//a/a.a/a// /b/c/a/a.a/a
+/b/c//a/a.a/.aa /b/c/a/a.a/.aa
+/b/c//a/a.a/.a. /b/c/a/a.a/.a.
+/b/c//a/a.a/.a/ /b/c/a/a.a/.a
+/b/c//a/a.a/..a /b/c/a/a.a/..a
+/b/c//a/a.a/... /b/c/a/a.a/...
+/b/c//a/a.a/../ /b/c/a
+/b/c//a/a.a/./a /b/c/a/a.a/a
+/b/c//a/a.a/./. /b/c/a/a.a
+/b/c//a/a.a/.// /b/c/a/a.a
+/b/c//a/a.a//aa /b/c/a/a.a/aa
+/b/c//a/a.a//a. /b/c/a/a.a/a.
+/b/c//a/a.a//a/ /b/c/a/a.a/a
+/b/c//a/a.a//.a /b/c/a/a.a/.a
+/b/c//a/a.a//.. /b/c/a
+/b/c//a/a.a//./ /b/c/a/a.a
+/b/c//a/a.a///a /b/c/a/a.a/a
+/b/c//a/a.a///. /b/c/a/a.a
+/b/c//a/a.a//// /b/c/a/a.a
+/b/c//a/a..aaaa /b/c/a/a..aaaa
+/b/c//a/a..aaa. /b/c/a/a..aaa.
+/b/c//a/a..aaa/ /b/c/a/a..aaa
+/b/c//a/a..aa.a /b/c/a/a..aa.a
+/b/c//a/a..aa.. /b/c/a/a..aa..
+/b/c//a/a..aa./ /b/c/a/a..aa.
+/b/c//a/a..aa/a /b/c/a/a..aa/a
+/b/c//a/a..aa/. /b/c/a/a..aa
+/b/c//a/a..aa// /b/c/a/a..aa
+/b/c//a/a..a.aa /b/c/a/a..a.aa
+/b/c//a/a..a.a. /b/c/a/a..a.a.
+/b/c//a/a..a.a/ /b/c/a/a..a.a
+/b/c//a/a..a..a /b/c/a/a..a..a
+/b/c//a/a..a... /b/c/a/a..a...
+/b/c//a/a..a../ /b/c/a/a..a..
+/b/c//a/a..a./a /b/c/a/a..a./a
+/b/c//a/a..a./. /b/c/a/a..a.
+/b/c//a/a..a.// /b/c/a/a..a.
+/b/c//a/a..a/aa /b/c/a/a..a/aa
+/b/c//a/a..a/a. /b/c/a/a..a/a.
+/b/c//a/a..a/a/ /b/c/a/a..a/a
+/b/c//a/a..a/.a /b/c/a/a..a/.a
+/b/c//a/a..a/.. /b/c/a
+/b/c//a/a..a/./ /b/c/a/a..a
+/b/c//a/a..a//a /b/c/a/a..a/a
+/b/c//a/a..a//. /b/c/a/a..a
+/b/c//a/a..a/// /b/c/a/a..a
+/b/c//a/a...aaa /b/c/a/a...aaa
+/b/c//a/a...aa. /b/c/a/a...aa.
+/b/c//a/a...aa/ /b/c/a/a...aa
+/b/c//a/a...a.a /b/c/a/a...a.a
+/b/c//a/a...a.. /b/c/a/a...a..
+/b/c//a/a...a./ /b/c/a/a...a.
+/b/c//a/a...a/a /b/c/a/a...a/a
+/b/c//a/a...a/. /b/c/a/a...a
+/b/c//a/a...a// /b/c/a/a...a
+/b/c//a/a....aa /b/c/a/a....aa
+/b/c//a/a....a. /b/c/a/a....a.
+/b/c//a/a....a/ /b/c/a/a....a
+/b/c//a/a.....a /b/c/a/a.....a
+/b/c//a/a...... /b/c/a/a......
+/b/c//a/a...../ /b/c/a/a.....
+/b/c//a/a..../a /b/c/a/a..../a
+/b/c//a/a..../. /b/c/a/a....
+/b/c//a/a....// /b/c/a/a....
+/b/c//a/a.../aa /b/c/a/a.../aa
+/b/c//a/a.../a. /b/c/a/a.../a.
+/b/c//a/a.../a/ /b/c/a/a.../a
+/b/c//a/a.../.a /b/c/a/a.../.a
+/b/c//a/a.../.. /b/c/a
+/b/c//a/a..././ /b/c/a/a...
+/b/c//a/a...//a /b/c/a/a.../a
+/b/c//a/a...//. /b/c/a/a...
+/b/c//a/a.../// /b/c/a/a...
+/b/c//a/a../aaa /b/c/a/a../aaa
+/b/c//a/a../aa. /b/c/a/a../aa.
+/b/c//a/a../aa/ /b/c/a/a../aa
+/b/c//a/a../a.a /b/c/a/a../a.a
+/b/c//a/a../a.. /b/c/a/a../a..
+/b/c//a/a../a./ /b/c/a/a../a.
+/b/c//a/a../a/a /b/c/a/a../a/a
+/b/c//a/a../a/. /b/c/a/a../a
+/b/c//a/a../a// /b/c/a/a../a
+/b/c//a/a../.aa /b/c/a/a../.aa
+/b/c//a/a../.a. /b/c/a/a../.a.
+/b/c//a/a../.a/ /b/c/a/a../.a
+/b/c//a/a../..a /b/c/a/a../..a
+/b/c//a/a../... /b/c/a/a../...
+/b/c//a/a../../ /b/c/a
+/b/c//a/a.././a /b/c/a/a../a
+/b/c//a/a.././. /b/c/a/a..
+/b/c//a/a../.// /b/c/a/a..
+/b/c//a/a..//aa /b/c/a/a../aa
+/b/c//a/a..//a. /b/c/a/a../a.
+/b/c//a/a..//a/ /b/c/a/a../a
+/b/c//a/a..//.a /b/c/a/a../.a
+/b/c//a/a..//.. /b/c/a
+/b/c//a/a..//./ /b/c/a/a..
+/b/c//a/a..///a /b/c/a/a../a
+/b/c//a/a..///. /b/c/a/a..
+/b/c//a/a..//// /b/c/a/a..
+/b/c//a/a./aaaa /b/c/a/a./aaaa
+/b/c//a/a./aaa. /b/c/a/a./aaa.
+/b/c//a/a./aaa/ /b/c/a/a./aaa
+/b/c//a/a./aa.a /b/c/a/a./aa.a
+/b/c//a/a./aa.. /b/c/a/a./aa..
+/b/c//a/a./aa./ /b/c/a/a./aa.
+/b/c//a/a./aa/a /b/c/a/a./aa/a
+/b/c//a/a./aa/. /b/c/a/a./aa
+/b/c//a/a./aa// /b/c/a/a./aa
+/b/c//a/a./a.aa /b/c/a/a./a.aa
+/b/c//a/a./a.a. /b/c/a/a./a.a.
+/b/c//a/a./a.a/ /b/c/a/a./a.a
+/b/c//a/a./a..a /b/c/a/a./a..a
+/b/c//a/a./a... /b/c/a/a./a...
+/b/c//a/a./a../ /b/c/a/a./a..
+/b/c//a/a./a./a /b/c/a/a./a./a
+/b/c//a/a./a./. /b/c/a/a./a.
+/b/c//a/a./a.// /b/c/a/a./a.
+/b/c//a/a./a/aa /b/c/a/a./a/aa
+/b/c//a/a./a/a. /b/c/a/a./a/a.
+/b/c//a/a./a/a/ /b/c/a/a./a/a
+/b/c//a/a./a/.a /b/c/a/a./a/.a
+/b/c//a/a./a/.. /b/c/a/a.
+/b/c//a/a./a/./ /b/c/a/a./a
+/b/c//a/a./a//a /b/c/a/a./a/a
+/b/c//a/a./a//. /b/c/a/a./a
+/b/c//a/a./a/// /b/c/a/a./a
+/b/c//a/a./.aaa /b/c/a/a./.aaa
+/b/c//a/a./.aa. /b/c/a/a./.aa.
+/b/c//a/a./.aa/ /b/c/a/a./.aa
+/b/c//a/a./.a.a /b/c/a/a./.a.a
+/b/c//a/a./.a.. /b/c/a/a./.a..
+/b/c//a/a./.a./ /b/c/a/a./.a.
+/b/c//a/a./.a/a /b/c/a/a./.a/a
+/b/c//a/a./.a/. /b/c/a/a./.a
+/b/c//a/a./.a// /b/c/a/a./.a
+/b/c//a/a./..aa /b/c/a/a./..aa
+/b/c//a/a./..a. /b/c/a/a./..a.
+/b/c//a/a./..a/ /b/c/a/a./..a
+/b/c//a/a./...a /b/c/a/a./...a
+/b/c//a/a./.... /b/c/a/a./....
+/b/c//a/a./.../ /b/c/a/a./...
+/b/c//a/a./../a /b/c/a/a
+/b/c//a/a./../. /b/c/a
+/b/c//a/a./..// /b/c/a
+/b/c//a/a././aa /b/c/a/a./aa
+/b/c//a/a././a. /b/c/a/a./a.
+/b/c//a/a././a/ /b/c/a/a./a
+/b/c//a/a././.a /b/c/a/a./.a
+/b/c//a/a././.. /b/c/a
+/b/c//a/a./././ /b/c/a/a.
+/b/c//a/a././/a /b/c/a/a./a
+/b/c//a/a././/. /b/c/a/a.
+/b/c//a/a././// /b/c/a/a.
+/b/c//a/a.//aaa /b/c/a/a./aaa
+/b/c//a/a.//aa. /b/c/a/a./aa.
+/b/c//a/a.//aa/ /b/c/a/a./aa
+/b/c//a/a.//a.a /b/c/a/a./a.a
+/b/c//a/a.//a.. /b/c/a/a./a..
+/b/c//a/a.//a./ /b/c/a/a./a.
+/b/c//a/a.//a/a /b/c/a/a./a/a
+/b/c//a/a.//a/. /b/c/a/a./a
+/b/c//a/a.//a// /b/c/a/a./a
+/b/c//a/a.//.aa /b/c/a/a./.aa
+/b/c//a/a.//.a. /b/c/a/a./.a.
+/b/c//a/a.//.a/ /b/c/a/a./.a
+/b/c//a/a.//..a /b/c/a/a./..a
+/b/c//a/a.//... /b/c/a/a./...
+/b/c//a/a.//../ /b/c/a
+/b/c//a/a.//./a /b/c/a/a./a
+/b/c//a/a.//./. /b/c/a/a.
+/b/c//a/a.//.// /b/c/a/a.
+/b/c//a/a.///aa /b/c/a/a./aa
+/b/c//a/a.///a. /b/c/a/a./a.
+/b/c//a/a.///a/ /b/c/a/a./a
+/b/c//a/a.///.a /b/c/a/a./.a
+/b/c//a/a.///.. /b/c/a
+/b/c//a/a.///./ /b/c/a/a.
+/b/c//a/a.////a /b/c/a/a./a
+/b/c//a/a.////. /b/c/a/a.
+/b/c//a/a.///// /b/c/a/a.
+/b/c//a/a/aaaaa /b/c/a/a/aaaaa
+/b/c//a/a/aaaa. /b/c/a/a/aaaa.
+/b/c//a/a/aaaa/ /b/c/a/a/aaaa
+/b/c//a/a/aaa.a /b/c/a/a/aaa.a
+/b/c//a/a/aaa.. /b/c/a/a/aaa..
+/b/c//a/a/aaa./ /b/c/a/a/aaa.
+/b/c//a/a/aaa/a /b/c/a/a/aaa/a
+/b/c//a/a/aaa/. /b/c/a/a/aaa
+/b/c//a/a/aaa// /b/c/a/a/aaa
+/b/c//a/a/aa.aa /b/c/a/a/aa.aa
+/b/c//a/a/aa.a. /b/c/a/a/aa.a.
+/b/c//a/a/aa.a/ /b/c/a/a/aa.a
+/b/c//a/a/aa..a /b/c/a/a/aa..a
+/b/c//a/a/aa... /b/c/a/a/aa...
+/b/c//a/a/aa../ /b/c/a/a/aa..
+/b/c//a/a/aa./a /b/c/a/a/aa./a
+/b/c//a/a/aa./. /b/c/a/a/aa.
+/b/c//a/a/aa.// /b/c/a/a/aa.
+/b/c//a/a/aa/aa /b/c/a/a/aa/aa
+/b/c//a/a/aa/a. /b/c/a/a/aa/a.
+/b/c//a/a/aa/a/ /b/c/a/a/aa/a
+/b/c//a/a/aa/.a /b/c/a/a/aa/.a
+/b/c//a/a/aa/.. /b/c/a/a
+/b/c//a/a/aa/./ /b/c/a/a/aa
+/b/c//a/a/aa//a /b/c/a/a/aa/a
+/b/c//a/a/aa//. /b/c/a/a/aa
+/b/c//a/a/aa/// /b/c/a/a/aa
+/b/c//a/a/a.aaa /b/c/a/a/a.aaa
+/b/c//a/a/a.aa. /b/c/a/a/a.aa.
+/b/c//a/a/a.aa/ /b/c/a/a/a.aa
+/b/c//a/a/a.a.a /b/c/a/a/a.a.a
+/b/c//a/a/a.a.. /b/c/a/a/a.a..
+/b/c//a/a/a.a./ /b/c/a/a/a.a.
+/b/c//a/a/a.a/a /b/c/a/a/a.a/a
+/b/c//a/a/a.a/. /b/c/a/a/a.a
+/b/c//a/a/a.a// /b/c/a/a/a.a
+/b/c//a/a/a..aa /b/c/a/a/a..aa
+/b/c//a/a/a..a. /b/c/a/a/a..a.
+/b/c//a/a/a..a/ /b/c/a/a/a..a
+/b/c//a/a/a...a /b/c/a/a/a...a
+/b/c//a/a/a.... /b/c/a/a/a....
+/b/c//a/a/a.../ /b/c/a/a/a...
+/b/c//a/a/a../a /b/c/a/a/a../a
+/b/c//a/a/a../. /b/c/a/a/a..
+/b/c//a/a/a..// /b/c/a/a/a..
+/b/c//a/a/a./aa /b/c/a/a/a./aa
+/b/c//a/a/a./a. /b/c/a/a/a./a.
+/b/c//a/a/a./a/ /b/c/a/a/a./a
+/b/c//a/a/a./.a /b/c/a/a/a./.a
+/b/c//a/a/a./.. /b/c/a/a
+/b/c//a/a/a././ /b/c/a/a/a.
+/b/c//a/a/a.//a /b/c/a/a/a./a
+/b/c//a/a/a.//. /b/c/a/a/a.
+/b/c//a/a/a./// /b/c/a/a/a.
+/b/c//a/a/a/aaa /b/c/a/a/a/aaa
+/b/c//a/a/a/aa. /b/c/a/a/a/aa.
+/b/c//a/a/a/aa/ /b/c/a/a/a/aa
+/b/c//a/a/a/a.a /b/c/a/a/a/a.a
+/b/c//a/a/a/a.. /b/c/a/a/a/a..
+/b/c//a/a/a/a./ /b/c/a/a/a/a.
+/b/c//a/a/a/a/a /b/c/a/a/a/a/a
+/b/c//a/a/a/a/. /b/c/a/a/a/a
+/b/c//a/a/a/a// /b/c/a/a/a/a
+/b/c//a/a/a/.aa /b/c/a/a/a/.aa
+/b/c//a/a/a/.a. /b/c/a/a/a/.a.
+/b/c//a/a/a/.a/ /b/c/a/a/a/.a
+/b/c//a/a/a/..a /b/c/a/a/a/..a
+/b/c//a/a/a/... /b/c/a/a/a/...
+/b/c//a/a/a/../ /b/c/a/a
+/b/c//a/a/a/./a /b/c/a/a/a/a
+/b/c//a/a/a/./. /b/c/a/a/a
+/b/c//a/a/a/.// /b/c/a/a/a
+/b/c//a/a/a//aa /b/c/a/a/a/aa
+/b/c//a/a/a//a. /b/c/a/a/a/a.
+/b/c//a/a/a//a/ /b/c/a/a/a/a
+/b/c//a/a/a//.a /b/c/a/a/a/.a
+/b/c//a/a/a//.. /b/c/a/a
+/b/c//a/a/a//./ /b/c/a/a/a
+/b/c//a/a/a///a /b/c/a/a/a/a
+/b/c//a/a/a///. /b/c/a/a/a
+/b/c//a/a/a//// /b/c/a/a/a
+/b/c//a/a/.aaaa /b/c/a/a/.aaaa
+/b/c//a/a/.aaa. /b/c/a/a/.aaa.
+/b/c//a/a/.aaa/ /b/c/a/a/.aaa
+/b/c//a/a/.aa.a /b/c/a/a/.aa.a
+/b/c//a/a/.aa.. /b/c/a/a/.aa..
+/b/c//a/a/.aa./ /b/c/a/a/.aa.
+/b/c//a/a/.aa/a /b/c/a/a/.aa/a
+/b/c//a/a/.aa/. /b/c/a/a/.aa
+/b/c//a/a/.aa// /b/c/a/a/.aa
+/b/c//a/a/.a.aa /b/c/a/a/.a.aa
+/b/c//a/a/.a.a. /b/c/a/a/.a.a.
+/b/c//a/a/.a.a/ /b/c/a/a/.a.a
+/b/c//a/a/.a..a /b/c/a/a/.a..a
+/b/c//a/a/.a... /b/c/a/a/.a...
+/b/c//a/a/.a../ /b/c/a/a/.a..
+/b/c//a/a/.a./a /b/c/a/a/.a./a
+/b/c//a/a/.a./. /b/c/a/a/.a.
+/b/c//a/a/.a.// /b/c/a/a/.a.
+/b/c//a/a/.a/aa /b/c/a/a/.a/aa
+/b/c//a/a/.a/a. /b/c/a/a/.a/a.
+/b/c//a/a/.a/a/ /b/c/a/a/.a/a
+/b/c//a/a/.a/.a /b/c/a/a/.a/.a
+/b/c//a/a/.a/.. /b/c/a/a
+/b/c//a/a/.a/./ /b/c/a/a/.a
+/b/c//a/a/.a//a /b/c/a/a/.a/a
+/b/c//a/a/.a//. /b/c/a/a/.a
+/b/c//a/a/.a/// /b/c/a/a/.a
+/b/c//a/a/..aaa /b/c/a/a/..aaa
+/b/c//a/a/..aa. /b/c/a/a/..aa.
+/b/c//a/a/..aa/ /b/c/a/a/..aa
+/b/c//a/a/..a.a /b/c/a/a/..a.a
+/b/c//a/a/..a.. /b/c/a/a/..a..
+/b/c//a/a/..a./ /b/c/a/a/..a.
+/b/c//a/a/..a/a /b/c/a/a/..a/a
+/b/c//a/a/..a/. /b/c/a/a/..a
+/b/c//a/a/..a// /b/c/a/a/..a
+/b/c//a/a/...aa /b/c/a/a/...aa
+/b/c//a/a/...a. /b/c/a/a/...a.
+/b/c//a/a/...a/ /b/c/a/a/...a
+/b/c//a/a/....a /b/c/a/a/....a
+/b/c//a/a/..... /b/c/a/a/.....
+/b/c//a/a/..../ /b/c/a/a/....
+/b/c//a/a/.../a /b/c/a/a/.../a
+/b/c//a/a/.../. /b/c/a/a/...
+/b/c//a/a/...// /b/c/a/a/...
+/b/c//a/a/../aa /b/c/a/aa
+/b/c//a/a/../a. /b/c/a/a.
+/b/c//a/a/../a/ /b/c/a/a
+/b/c//a/a/../.a /b/c/a/.a
+/b/c//a/a/../.. /b/c
+/b/c//a/a/.././ /b/c/a
+/b/c//a/a/..//a /b/c/a/a
+/b/c//a/a/..//. /b/c/a
+/b/c//a/a/../// /b/c/a
+/b/c//a/a/./aaa /b/c/a/a/aaa
+/b/c//a/a/./aa. /b/c/a/a/aa.
+/b/c//a/a/./aa/ /b/c/a/a/aa
+/b/c//a/a/./a.a /b/c/a/a/a.a
+/b/c//a/a/./a.. /b/c/a/a/a..
+/b/c//a/a/./a./ /b/c/a/a/a.
+/b/c//a/a/./a/a /b/c/a/a/a/a
+/b/c//a/a/./a/. /b/c/a/a/a
+/b/c//a/a/./a// /b/c/a/a/a
+/b/c//a/a/./.aa /b/c/a/a/.aa
+/b/c//a/a/./.a. /b/c/a/a/.a.
+/b/c//a/a/./.a/ /b/c/a/a/.a
+/b/c//a/a/./..a /b/c/a/a/..a
+/b/c//a/a/./... /b/c/a/a/...
+/b/c//a/a/./../ /b/c/a
+/b/c//a/a/././a /b/c/a/a/a
+/b/c//a/a/././. /b/c/a/a
+/b/c//a/a/./.// /b/c/a/a
+/b/c//a/a/.//aa /b/c/a/a/aa
+/b/c//a/a/.//a. /b/c/a/a/a.
+/b/c//a/a/.//a/ /b/c/a/a/a
+/b/c//a/a/.//.a /b/c/a/a/.a
+/b/c//a/a/.//.. /b/c/a
+/b/c//a/a/.//./ /b/c/a/a
+/b/c//a/a/.///a /b/c/a/a/a
+/b/c//a/a/.///. /b/c/a/a
+/b/c//a/a/.//// /b/c/a/a
+/b/c//a/a//aaaa /b/c/a/a/aaaa
+/b/c//a/a//aaa. /b/c/a/a/aaa.
+/b/c//a/a//aaa/ /b/c/a/a/aaa
+/b/c//a/a//aa.a /b/c/a/a/aa.a
+/b/c//a/a//aa.. /b/c/a/a/aa..
+/b/c//a/a//aa./ /b/c/a/a/aa.
+/b/c//a/a//aa/a /b/c/a/a/aa/a
+/b/c//a/a//aa/. /b/c/a/a/aa
+/b/c//a/a//aa// /b/c/a/a/aa
+/b/c//a/a//a.aa /b/c/a/a/a.aa
+/b/c//a/a//a.a. /b/c/a/a/a.a.
+/b/c//a/a//a.a/ /b/c/a/a/a.a
+/b/c//a/a//a..a /b/c/a/a/a..a
+/b/c//a/a//a... /b/c/a/a/a...
+/b/c//a/a//a../ /b/c/a/a/a..
+/b/c//a/a//a./a /b/c/a/a/a./a
+/b/c//a/a//a./. /b/c/a/a/a.
+/b/c//a/a//a.// /b/c/a/a/a.
+/b/c//a/a//a/aa /b/c/a/a/a/aa
+/b/c//a/a//a/a. /b/c/a/a/a/a.
+/b/c//a/a//a/a/ /b/c/a/a/a/a
+/b/c//a/a//a/.a /b/c/a/a/a/.a
+/b/c//a/a//a/.. /b/c/a/a
+/b/c//a/a//a/./ /b/c/a/a/a
+/b/c//a/a//a//a /b/c/a/a/a/a
+/b/c//a/a//a//. /b/c/a/a/a
+/b/c//a/a//a/// /b/c/a/a/a
+/b/c//a/a//.aaa /b/c/a/a/.aaa
+/b/c//a/a//.aa. /b/c/a/a/.aa.
+/b/c//a/a//.aa/ /b/c/a/a/.aa
+/b/c//a/a//.a.a /b/c/a/a/.a.a
+/b/c//a/a//.a.. /b/c/a/a/.a..
+/b/c//a/a//.a./ /b/c/a/a/.a.
+/b/c//a/a//.a/a /b/c/a/a/.a/a
+/b/c//a/a//.a/. /b/c/a/a/.a
+/b/c//a/a//.a// /b/c/a/a/.a
+/b/c//a/a//..aa /b/c/a/a/..aa
+/b/c//a/a//..a. /b/c/a/a/..a.
+/b/c//a/a//..a/ /b/c/a/a/..a
+/b/c//a/a//...a /b/c/a/a/...a
+/b/c//a/a//.... /b/c/a/a/....
+/b/c//a/a//.../ /b/c/a/a/...
+/b/c//a/a//../a /b/c/a/a
+/b/c//a/a//../. /b/c/a
+/b/c//a/a//..// /b/c/a
+/b/c//a/a//./aa /b/c/a/a/aa
+/b/c//a/a//./a. /b/c/a/a/a.
+/b/c//a/a//./a/ /b/c/a/a/a
+/b/c//a/a//./.a /b/c/a/a/.a
+/b/c//a/a//./.. /b/c/a
+/b/c//a/a//././ /b/c/a/a
+/b/c//a/a//.//a /b/c/a/a/a
+/b/c//a/a//.//. /b/c/a/a
+/b/c//a/a//./// /b/c/a/a
+/b/c//a/a///aaa /b/c/a/a/aaa
+/b/c//a/a///aa. /b/c/a/a/aa.
+/b/c//a/a///aa/ /b/c/a/a/aa
+/b/c//a/a///a.a /b/c/a/a/a.a
+/b/c//a/a///a.. /b/c/a/a/a..
+/b/c//a/a///a./ /b/c/a/a/a.
+/b/c//a/a///a/a /b/c/a/a/a/a
+/b/c//a/a///a/. /b/c/a/a/a
+/b/c//a/a///a// /b/c/a/a/a
+/b/c//a/a///.aa /b/c/a/a/.aa
+/b/c//a/a///.a. /b/c/a/a/.a.
+/b/c//a/a///.a/ /b/c/a/a/.a
+/b/c//a/a///..a /b/c/a/a/..a
+/b/c//a/a///... /b/c/a/a/...
+/b/c//a/a///../ /b/c/a
+/b/c//a/a///./a /b/c/a/a/a
+/b/c//a/a///./. /b/c/a/a
+/b/c//a/a///.// /b/c/a/a
+/b/c//a/a////aa /b/c/a/a/aa
+/b/c//a/a////a. /b/c/a/a/a.
+/b/c//a/a////a/ /b/c/a/a/a
+/b/c//a/a////.a /b/c/a/a/.a
+/b/c//a/a////.. /b/c/a
+/b/c//a/a////./ /b/c/a/a
+/b/c//a/a/////a /b/c/a/a/a
+/b/c//a/a/////. /b/c/a/a
+/b/c//a/a////// /b/c/a/a
+/b/c//a/.aaaaaa /b/c/a/.aaaaaa
+/b/c//a/.aaaaa. /b/c/a/.aaaaa.
+/b/c//a/.aaaaa/ /b/c/a/.aaaaa
+/b/c//a/.aaaa.a /b/c/a/.aaaa.a
+/b/c//a/.aaaa.. /b/c/a/.aaaa..
+/b/c//a/.aaaa./ /b/c/a/.aaaa.
+/b/c//a/.aaaa/a /b/c/a/.aaaa/a
+/b/c//a/.aaaa/. /b/c/a/.aaaa
+/b/c//a/.aaaa// /b/c/a/.aaaa
+/b/c//a/.aaa.aa /b/c/a/.aaa.aa
+/b/c//a/.aaa.a. /b/c/a/.aaa.a.
+/b/c//a/.aaa.a/ /b/c/a/.aaa.a
+/b/c//a/.aaa..a /b/c/a/.aaa..a
+/b/c//a/.aaa... /b/c/a/.aaa...
+/b/c//a/.aaa../ /b/c/a/.aaa..
+/b/c//a/.aaa./a /b/c/a/.aaa./a
+/b/c//a/.aaa./. /b/c/a/.aaa.
+/b/c//a/.aaa.// /b/c/a/.aaa.
+/b/c//a/.aaa/aa /b/c/a/.aaa/aa
+/b/c//a/.aaa/a. /b/c/a/.aaa/a.
+/b/c//a/.aaa/a/ /b/c/a/.aaa/a
+/b/c//a/.aaa/.a /b/c/a/.aaa/.a
+/b/c//a/.aaa/.. /b/c/a
+/b/c//a/.aaa/./ /b/c/a/.aaa
+/b/c//a/.aaa//a /b/c/a/.aaa/a
+/b/c//a/.aaa//. /b/c/a/.aaa
+/b/c//a/.aaa/// /b/c/a/.aaa
+/b/c//a/.aa.aaa /b/c/a/.aa.aaa
+/b/c//a/.aa.aa. /b/c/a/.aa.aa.
+/b/c//a/.aa.aa/ /b/c/a/.aa.aa
+/b/c//a/.aa.a.a /b/c/a/.aa.a.a
+/b/c//a/.aa.a.. /b/c/a/.aa.a..
+/b/c//a/.aa.a./ /b/c/a/.aa.a.
+/b/c//a/.aa.a/a /b/c/a/.aa.a/a
+/b/c//a/.aa.a/. /b/c/a/.aa.a
+/b/c//a/.aa.a// /b/c/a/.aa.a
+/b/c//a/.aa..aa /b/c/a/.aa..aa
+/b/c//a/.aa..a. /b/c/a/.aa..a.
+/b/c//a/.aa..a/ /b/c/a/.aa..a
+/b/c//a/.aa...a /b/c/a/.aa...a
+/b/c//a/.aa.... /b/c/a/.aa....
+/b/c//a/.aa.../ /b/c/a/.aa...
+/b/c//a/.aa../a /b/c/a/.aa../a
+/b/c//a/.aa../. /b/c/a/.aa..
+/b/c//a/.aa..// /b/c/a/.aa..
+/b/c//a/.aa./aa /b/c/a/.aa./aa
+/b/c//a/.aa./a. /b/c/a/.aa./a.
+/b/c//a/.aa./a/ /b/c/a/.aa./a
+/b/c//a/.aa./.a /b/c/a/.aa./.a
+/b/c//a/.aa./.. /b/c/a
+/b/c//a/.aa././ /b/c/a/.aa.
+/b/c//a/.aa.//a /b/c/a/.aa./a
+/b/c//a/.aa.//. /b/c/a/.aa.
+/b/c//a/.aa./// /b/c/a/.aa.
+/b/c//a/.aa/aaa /b/c/a/.aa/aaa
+/b/c//a/.aa/aa. /b/c/a/.aa/aa.
+/b/c//a/.aa/aa/ /b/c/a/.aa/aa
+/b/c//a/.aa/a.a /b/c/a/.aa/a.a
+/b/c//a/.aa/a.. /b/c/a/.aa/a..
+/b/c//a/.aa/a./ /b/c/a/.aa/a.
+/b/c//a/.aa/a/a /b/c/a/.aa/a/a
+/b/c//a/.aa/a/. /b/c/a/.aa/a
+/b/c//a/.aa/a// /b/c/a/.aa/a
+/b/c//a/.aa/.aa /b/c/a/.aa/.aa
+/b/c//a/.aa/.a. /b/c/a/.aa/.a.
+/b/c//a/.aa/.a/ /b/c/a/.aa/.a
+/b/c//a/.aa/..a /b/c/a/.aa/..a
+/b/c//a/.aa/... /b/c/a/.aa/...
+/b/c//a/.aa/../ /b/c/a
+/b/c//a/.aa/./a /b/c/a/.aa/a
+/b/c//a/.aa/./. /b/c/a/.aa
+/b/c//a/.aa/.// /b/c/a/.aa
+/b/c//a/.aa//aa /b/c/a/.aa/aa
+/b/c//a/.aa//a. /b/c/a/.aa/a.
+/b/c//a/.aa//a/ /b/c/a/.aa/a
+/b/c//a/.aa//.a /b/c/a/.aa/.a
+/b/c//a/.aa//.. /b/c/a
+/b/c//a/.aa//./ /b/c/a/.aa
+/b/c//a/.aa///a /b/c/a/.aa/a
+/b/c//a/.aa///. /b/c/a/.aa
+/b/c//a/.aa//// /b/c/a/.aa
+/b/c//a/.a.aaaa /b/c/a/.a.aaaa
+/b/c//a/.a.aaa. /b/c/a/.a.aaa.
+/b/c//a/.a.aaa/ /b/c/a/.a.aaa
+/b/c//a/.a.aa.a /b/c/a/.a.aa.a
+/b/c//a/.a.aa.. /b/c/a/.a.aa..
+/b/c//a/.a.aa./ /b/c/a/.a.aa.
+/b/c//a/.a.aa/a /b/c/a/.a.aa/a
+/b/c//a/.a.aa/. /b/c/a/.a.aa
+/b/c//a/.a.aa// /b/c/a/.a.aa
+/b/c//a/.a.a.aa /b/c/a/.a.a.aa
+/b/c//a/.a.a.a. /b/c/a/.a.a.a.
+/b/c//a/.a.a.a/ /b/c/a/.a.a.a
+/b/c//a/.a.a..a /b/c/a/.a.a..a
+/b/c//a/.a.a... /b/c/a/.a.a...
+/b/c//a/.a.a../ /b/c/a/.a.a..
+/b/c//a/.a.a./a /b/c/a/.a.a./a
+/b/c//a/.a.a./. /b/c/a/.a.a.
+/b/c//a/.a.a.// /b/c/a/.a.a.
+/b/c//a/.a.a/aa /b/c/a/.a.a/aa
+/b/c//a/.a.a/a. /b/c/a/.a.a/a.
+/b/c//a/.a.a/a/ /b/c/a/.a.a/a
+/b/c//a/.a.a/.a /b/c/a/.a.a/.a
+/b/c//a/.a.a/.. /b/c/a
+/b/c//a/.a.a/./ /b/c/a/.a.a
+/b/c//a/.a.a//a /b/c/a/.a.a/a
+/b/c//a/.a.a//. /b/c/a/.a.a
+/b/c//a/.a.a/// /b/c/a/.a.a
+/b/c//a/.a..aaa /b/c/a/.a..aaa
+/b/c//a/.a..aa. /b/c/a/.a..aa.
+/b/c//a/.a..aa/ /b/c/a/.a..aa
+/b/c//a/.a..a.a /b/c/a/.a..a.a
+/b/c//a/.a..a.. /b/c/a/.a..a..
+/b/c//a/.a..a./ /b/c/a/.a..a.
+/b/c//a/.a..a/a /b/c/a/.a..a/a
+/b/c//a/.a..a/. /b/c/a/.a..a
+/b/c//a/.a..a// /b/c/a/.a..a
+/b/c//a/.a...aa /b/c/a/.a...aa
+/b/c//a/.a...a. /b/c/a/.a...a.
+/b/c//a/.a...a/ /b/c/a/.a...a
+/b/c//a/.a....a /b/c/a/.a....a
+/b/c//a/.a..... /b/c/a/.a.....
+/b/c//a/.a..../ /b/c/a/.a....
+/b/c//a/.a.../a /b/c/a/.a.../a
+/b/c//a/.a.../. /b/c/a/.a...
+/b/c//a/.a...// /b/c/a/.a...
+/b/c//a/.a../aa /b/c/a/.a../aa
+/b/c//a/.a../a. /b/c/a/.a../a.
+/b/c//a/.a../a/ /b/c/a/.a../a
+/b/c//a/.a../.a /b/c/a/.a../.a
+/b/c//a/.a../.. /b/c/a
+/b/c//a/.a.././ /b/c/a/.a..
+/b/c//a/.a..//a /b/c/a/.a../a
+/b/c//a/.a..//. /b/c/a/.a..
+/b/c//a/.a../// /b/c/a/.a..
+/b/c//a/.a./aaa /b/c/a/.a./aaa
+/b/c//a/.a./aa. /b/c/a/.a./aa.
+/b/c//a/.a./aa/ /b/c/a/.a./aa
+/b/c//a/.a./a.a /b/c/a/.a./a.a
+/b/c//a/.a./a.. /b/c/a/.a./a..
+/b/c//a/.a./a./ /b/c/a/.a./a.
+/b/c//a/.a./a/a /b/c/a/.a./a/a
+/b/c//a/.a./a/. /b/c/a/.a./a
+/b/c//a/.a./a// /b/c/a/.a./a
+/b/c//a/.a./.aa /b/c/a/.a./.aa
+/b/c//a/.a./.a. /b/c/a/.a./.a.
+/b/c//a/.a./.a/ /b/c/a/.a./.a
+/b/c//a/.a./..a /b/c/a/.a./..a
+/b/c//a/.a./... /b/c/a/.a./...
+/b/c//a/.a./../ /b/c/a
+/b/c//a/.a././a /b/c/a/.a./a
+/b/c//a/.a././. /b/c/a/.a.
+/b/c//a/.a./.// /b/c/a/.a.
+/b/c//a/.a.//aa /b/c/a/.a./aa
+/b/c//a/.a.//a. /b/c/a/.a./a.
+/b/c//a/.a.//a/ /b/c/a/.a./a
+/b/c//a/.a.//.a /b/c/a/.a./.a
+/b/c//a/.a.//.. /b/c/a
+/b/c//a/.a.//./ /b/c/a/.a.
+/b/c//a/.a.///a /b/c/a/.a./a
+/b/c//a/.a.///. /b/c/a/.a.
+/b/c//a/.a.//// /b/c/a/.a.
+/b/c//a/.a/aaaa /b/c/a/.a/aaaa
+/b/c//a/.a/aaa. /b/c/a/.a/aaa.
+/b/c//a/.a/aaa/ /b/c/a/.a/aaa
+/b/c//a/.a/aa.a /b/c/a/.a/aa.a
+/b/c//a/.a/aa.. /b/c/a/.a/aa..
+/b/c//a/.a/aa./ /b/c/a/.a/aa.
+/b/c//a/.a/aa/a /b/c/a/.a/aa/a
+/b/c//a/.a/aa/. /b/c/a/.a/aa
+/b/c//a/.a/aa// /b/c/a/.a/aa
+/b/c//a/.a/a.aa /b/c/a/.a/a.aa
+/b/c//a/.a/a.a. /b/c/a/.a/a.a.
+/b/c//a/.a/a.a/ /b/c/a/.a/a.a
+/b/c//a/.a/a..a /b/c/a/.a/a..a
+/b/c//a/.a/a... /b/c/a/.a/a...
+/b/c//a/.a/a../ /b/c/a/.a/a..
+/b/c//a/.a/a./a /b/c/a/.a/a./a
+/b/c//a/.a/a./. /b/c/a/.a/a.
+/b/c//a/.a/a.// /b/c/a/.a/a.
+/b/c//a/.a/a/aa /b/c/a/.a/a/aa
+/b/c//a/.a/a/a. /b/c/a/.a/a/a.
+/b/c//a/.a/a/a/ /b/c/a/.a/a/a
+/b/c//a/.a/a/.a /b/c/a/.a/a/.a
+/b/c//a/.a/a/.. /b/c/a/.a
+/b/c//a/.a/a/./ /b/c/a/.a/a
+/b/c//a/.a/a//a /b/c/a/.a/a/a
+/b/c//a/.a/a//. /b/c/a/.a/a
+/b/c//a/.a/a/// /b/c/a/.a/a
+/b/c//a/.a/.aaa /b/c/a/.a/.aaa
+/b/c//a/.a/.aa. /b/c/a/.a/.aa.
+/b/c//a/.a/.aa/ /b/c/a/.a/.aa
+/b/c//a/.a/.a.a /b/c/a/.a/.a.a
+/b/c//a/.a/.a.. /b/c/a/.a/.a..
+/b/c//a/.a/.a./ /b/c/a/.a/.a.
+/b/c//a/.a/.a/a /b/c/a/.a/.a/a
+/b/c//a/.a/.a/. /b/c/a/.a/.a
+/b/c//a/.a/.a// /b/c/a/.a/.a
+/b/c//a/.a/..aa /b/c/a/.a/..aa
+/b/c//a/.a/..a. /b/c/a/.a/..a.
+/b/c//a/.a/..a/ /b/c/a/.a/..a
+/b/c//a/.a/...a /b/c/a/.a/...a
+/b/c//a/.a/.... /b/c/a/.a/....
+/b/c//a/.a/.../ /b/c/a/.a/...
+/b/c//a/.a/../a /b/c/a/a
+/b/c//a/.a/../. /b/c/a
+/b/c//a/.a/..// /b/c/a
+/b/c//a/.a/./aa /b/c/a/.a/aa
+/b/c//a/.a/./a. /b/c/a/.a/a.
+/b/c//a/.a/./a/ /b/c/a/.a/a
+/b/c//a/.a/./.a /b/c/a/.a/.a
+/b/c//a/.a/./.. /b/c/a
+/b/c//a/.a/././ /b/c/a/.a
+/b/c//a/.a/.//a /b/c/a/.a/a
+/b/c//a/.a/.//. /b/c/a/.a
+/b/c//a/.a/./// /b/c/a/.a
+/b/c//a/.a//aaa /b/c/a/.a/aaa
+/b/c//a/.a//aa. /b/c/a/.a/aa.
+/b/c//a/.a//aa/ /b/c/a/.a/aa
+/b/c//a/.a//a.a /b/c/a/.a/a.a
+/b/c//a/.a//a.. /b/c/a/.a/a..
+/b/c//a/.a//a./ /b/c/a/.a/a.
+/b/c//a/.a//a/a /b/c/a/.a/a/a
+/b/c//a/.a//a/. /b/c/a/.a/a
+/b/c//a/.a//a// /b/c/a/.a/a
+/b/c//a/.a//.aa /b/c/a/.a/.aa
+/b/c//a/.a//.a. /b/c/a/.a/.a.
+/b/c//a/.a//.a/ /b/c/a/.a/.a
+/b/c//a/.a//..a /b/c/a/.a/..a
+/b/c//a/.a//... /b/c/a/.a/...
+/b/c//a/.a//../ /b/c/a
+/b/c//a/.a//./a /b/c/a/.a/a
+/b/c//a/.a//./. /b/c/a/.a
+/b/c//a/.a//.// /b/c/a/.a
+/b/c//a/.a///aa /b/c/a/.a/aa
+/b/c//a/.a///a. /b/c/a/.a/a.
+/b/c//a/.a///a/ /b/c/a/.a/a
+/b/c//a/.a///.a /b/c/a/.a/.a
+/b/c//a/.a///.. /b/c/a
+/b/c//a/.a///./ /b/c/a/.a
+/b/c//a/.a////a /b/c/a/.a/a
+/b/c//a/.a////. /b/c/a/.a
+/b/c//a/.a///// /b/c/a/.a
+/b/c//a/..aaaaa /b/c/a/..aaaaa
+/b/c//a/..aaaa. /b/c/a/..aaaa.
+/b/c//a/..aaaa/ /b/c/a/..aaaa
+/b/c//a/..aaa.a /b/c/a/..aaa.a
+/b/c//a/..aaa.. /b/c/a/..aaa..
+/b/c//a/..aaa./ /b/c/a/..aaa.
+/b/c//a/..aaa/a /b/c/a/..aaa/a
+/b/c//a/..aaa/. /b/c/a/..aaa
+/b/c//a/..aaa// /b/c/a/..aaa
+/b/c//a/..aa.aa /b/c/a/..aa.aa
+/b/c//a/..aa.a. /b/c/a/..aa.a.
+/b/c//a/..aa.a/ /b/c/a/..aa.a
+/b/c//a/..aa..a /b/c/a/..aa..a
+/b/c//a/..aa... /b/c/a/..aa...
+/b/c//a/..aa../ /b/c/a/..aa..
+/b/c//a/..aa./a /b/c/a/..aa./a
+/b/c//a/..aa./. /b/c/a/..aa.
+/b/c//a/..aa.// /b/c/a/..aa.
+/b/c//a/..aa/aa /b/c/a/..aa/aa
+/b/c//a/..aa/a. /b/c/a/..aa/a.
+/b/c//a/..aa/a/ /b/c/a/..aa/a
+/b/c//a/..aa/.a /b/c/a/..aa/.a
+/b/c//a/..aa/.. /b/c/a
+/b/c//a/..aa/./ /b/c/a/..aa
+/b/c//a/..aa//a /b/c/a/..aa/a
+/b/c//a/..aa//. /b/c/a/..aa
+/b/c//a/..aa/// /b/c/a/..aa
+/b/c//a/..a.aaa /b/c/a/..a.aaa
+/b/c//a/..a.aa. /b/c/a/..a.aa.
+/b/c//a/..a.aa/ /b/c/a/..a.aa
+/b/c//a/..a.a.a /b/c/a/..a.a.a
+/b/c//a/..a.a.. /b/c/a/..a.a..
+/b/c//a/..a.a./ /b/c/a/..a.a.
+/b/c//a/..a.a/a /b/c/a/..a.a/a
+/b/c//a/..a.a/. /b/c/a/..a.a
+/b/c//a/..a.a// /b/c/a/..a.a
+/b/c//a/..a..aa /b/c/a/..a..aa
+/b/c//a/..a..a. /b/c/a/..a..a.
+/b/c//a/..a..a/ /b/c/a/..a..a
+/b/c//a/..a...a /b/c/a/..a...a
+/b/c//a/..a.... /b/c/a/..a....
+/b/c//a/..a.../ /b/c/a/..a...
+/b/c//a/..a../a /b/c/a/..a../a
+/b/c//a/..a../. /b/c/a/..a..
+/b/c//a/..a..// /b/c/a/..a..
+/b/c//a/..a./aa /b/c/a/..a./aa
+/b/c//a/..a./a. /b/c/a/..a./a.
+/b/c//a/..a./a/ /b/c/a/..a./a
+/b/c//a/..a./.a /b/c/a/..a./.a
+/b/c//a/..a./.. /b/c/a
+/b/c//a/..a././ /b/c/a/..a.
+/b/c//a/..a.//a /b/c/a/..a./a
+/b/c//a/..a.//. /b/c/a/..a.
+/b/c//a/..a./// /b/c/a/..a.
+/b/c//a/..a/aaa /b/c/a/..a/aaa
+/b/c//a/..a/aa. /b/c/a/..a/aa.
+/b/c//a/..a/aa/ /b/c/a/..a/aa
+/b/c//a/..a/a.a /b/c/a/..a/a.a
+/b/c//a/..a/a.. /b/c/a/..a/a..
+/b/c//a/..a/a./ /b/c/a/..a/a.
+/b/c//a/..a/a/a /b/c/a/..a/a/a
+/b/c//a/..a/a/. /b/c/a/..a/a
+/b/c//a/..a/a// /b/c/a/..a/a
+/b/c//a/..a/.aa /b/c/a/..a/.aa
+/b/c//a/..a/.a. /b/c/a/..a/.a.
+/b/c//a/..a/.a/ /b/c/a/..a/.a
+/b/c//a/..a/..a /b/c/a/..a/..a
+/b/c//a/..a/... /b/c/a/..a/...
+/b/c//a/..a/../ /b/c/a
+/b/c//a/..a/./a /b/c/a/..a/a
+/b/c//a/..a/./. /b/c/a/..a
+/b/c//a/..a/.// /b/c/a/..a
+/b/c//a/..a//aa /b/c/a/..a/aa
+/b/c//a/..a//a. /b/c/a/..a/a.
+/b/c//a/..a//a/ /b/c/a/..a/a
+/b/c//a/..a//.a /b/c/a/..a/.a
+/b/c//a/..a//.. /b/c/a
+/b/c//a/..a//./ /b/c/a/..a
+/b/c//a/..a///a /b/c/a/..a/a
+/b/c//a/..a///. /b/c/a/..a
+/b/c//a/..a//// /b/c/a/..a
+/b/c//a/...aaaa /b/c/a/...aaaa
+/b/c//a/...aaa. /b/c/a/...aaa.
+/b/c//a/...aaa/ /b/c/a/...aaa
+/b/c//a/...aa.a /b/c/a/...aa.a
+/b/c//a/...aa.. /b/c/a/...aa..
+/b/c//a/...aa./ /b/c/a/...aa.
+/b/c//a/...aa/a /b/c/a/...aa/a
+/b/c//a/...aa/. /b/c/a/...aa
+/b/c//a/...aa// /b/c/a/...aa
+/b/c//a/...a.aa /b/c/a/...a.aa
+/b/c//a/...a.a. /b/c/a/...a.a.
+/b/c//a/...a.a/ /b/c/a/...a.a
+/b/c//a/...a..a /b/c/a/...a..a
+/b/c//a/...a... /b/c/a/...a...
+/b/c//a/...a../ /b/c/a/...a..
+/b/c//a/...a./a /b/c/a/...a./a
+/b/c//a/...a./. /b/c/a/...a.
+/b/c//a/...a.// /b/c/a/...a.
+/b/c//a/...a/aa /b/c/a/...a/aa
+/b/c//a/...a/a. /b/c/a/...a/a.
+/b/c//a/...a/a/ /b/c/a/...a/a
+/b/c//a/...a/.a /b/c/a/...a/.a
+/b/c//a/...a/.. /b/c/a
+/b/c//a/...a/./ /b/c/a/...a
+/b/c//a/...a//a /b/c/a/...a/a
+/b/c//a/...a//. /b/c/a/...a
+/b/c//a/...a/// /b/c/a/...a
+/b/c//a/....aaa /b/c/a/....aaa
+/b/c//a/....aa. /b/c/a/....aa.
+/b/c//a/....aa/ /b/c/a/....aa
+/b/c//a/....a.a /b/c/a/....a.a
+/b/c//a/....a.. /b/c/a/....a..
+/b/c//a/....a./ /b/c/a/....a.
+/b/c//a/....a/a /b/c/a/....a/a
+/b/c//a/....a/. /b/c/a/....a
+/b/c//a/....a// /b/c/a/....a
+/b/c//a/.....aa /b/c/a/.....aa
+/b/c//a/.....a. /b/c/a/.....a.
+/b/c//a/.....a/ /b/c/a/.....a
+/b/c//a/......a /b/c/a/......a
+/b/c//a/....... /b/c/a/.......
+/b/c//a/....../ /b/c/a/......
+/b/c//a/...../a /b/c/a/...../a
+/b/c//a/...../. /b/c/a/.....
+/b/c//a/.....// /b/c/a/.....
+/b/c//a/..../aa /b/c/a/..../aa
+/b/c//a/..../a. /b/c/a/..../a.
+/b/c//a/..../a/ /b/c/a/..../a
+/b/c//a/..../.a /b/c/a/..../.a
+/b/c//a/..../.. /b/c/a
+/b/c//a/...././ /b/c/a/....
+/b/c//a/....//a /b/c/a/..../a
+/b/c//a/....//. /b/c/a/....
+/b/c//a/..../// /b/c/a/....
+/b/c//a/.../aaa /b/c/a/.../aaa
+/b/c//a/.../aa. /b/c/a/.../aa.
+/b/c//a/.../aa/ /b/c/a/.../aa
+/b/c//a/.../a.a /b/c/a/.../a.a
+/b/c//a/.../a.. /b/c/a/.../a..
+/b/c//a/.../a./ /b/c/a/.../a.
+/b/c//a/.../a/a /b/c/a/.../a/a
+/b/c//a/.../a/. /b/c/a/.../a
+/b/c//a/.../a// /b/c/a/.../a
+/b/c//a/.../.aa /b/c/a/.../.aa
+/b/c//a/.../.a. /b/c/a/.../.a.
+/b/c//a/.../.a/ /b/c/a/.../.a
+/b/c//a/.../..a /b/c/a/.../..a
+/b/c//a/.../... /b/c/a/.../...
+/b/c//a/.../../ /b/c/a
+/b/c//a/..././a /b/c/a/.../a
+/b/c//a/..././. /b/c/a/...
+/b/c//a/.../.// /b/c/a/...
+/b/c//a/...//aa /b/c/a/.../aa
+/b/c//a/...//a. /b/c/a/.../a.
+/b/c//a/...//a/ /b/c/a/.../a
+/b/c//a/...//.a /b/c/a/.../.a
+/b/c//a/...//.. /b/c/a
+/b/c//a/...//./ /b/c/a/...
+/b/c//a/...///a /b/c/a/.../a
+/b/c//a/...///. /b/c/a/...
+/b/c//a/...//// /b/c/a/...
+/b/c//a/../aaaa /b/c/aaaa
+/b/c//a/../aaa. /b/c/aaa.
+/b/c//a/../aaa/ /b/c/aaa
+/b/c//a/../aa.a /b/c/aa.a
+/b/c//a/../aa.. /b/c/aa..
+/b/c//a/../aa./ /b/c/aa.
+/b/c//a/../aa/a /b/c/aa/a
+/b/c//a/../aa/. /b/c/aa
+/b/c//a/../aa// /b/c/aa
+/b/c//a/../a.aa /b/c/a.aa
+/b/c//a/../a.a. /b/c/a.a.
+/b/c//a/../a.a/ /b/c/a.a
+/b/c//a/../a..a /b/c/a..a
+/b/c//a/../a... /b/c/a...
+/b/c//a/../a../ /b/c/a..
+/b/c//a/../a./a /b/c/a./a
+/b/c//a/../a./. /b/c/a.
+/b/c//a/../a.// /b/c/a.
+/b/c//a/../a/aa /b/c/a/aa
+/b/c//a/../a/a. /b/c/a/a.
+/b/c//a/../a/a/ /b/c/a/a
+/b/c//a/../a/.a /b/c/a/.a
+/b/c//a/../a/.. /b/c
+/b/c//a/../a/./ /b/c/a
+/b/c//a/../a//a /b/c/a/a
+/b/c//a/../a//. /b/c/a
+/b/c//a/../a/// /b/c/a
+/b/c//a/../.aaa /b/c/.aaa
+/b/c//a/../.aa. /b/c/.aa.
+/b/c//a/../.aa/ /b/c/.aa
+/b/c//a/../.a.a /b/c/.a.a
+/b/c//a/../.a.. /b/c/.a..
+/b/c//a/../.a./ /b/c/.a.
+/b/c//a/../.a/a /b/c/.a/a
+/b/c//a/../.a/. /b/c/.a
+/b/c//a/../.a// /b/c/.a
+/b/c//a/../..aa /b/c/..aa
+/b/c//a/../..a. /b/c/..a.
+/b/c//a/../..a/ /b/c/..a
+/b/c//a/../...a /b/c/...a
+/b/c//a/../.... /b/c/....
+/b/c//a/../.../ /b/c/...
+/b/c//a/../../a /b/a
+/b/c//a/../../. /b
+/b/c//a/../..// /b
+/b/c//a/.././aa /b/c/aa
+/b/c//a/.././a. /b/c/a.
+/b/c//a/.././a/ /b/c/a
+/b/c//a/.././.a /b/c/.a
+/b/c//a/.././.. /b
+/b/c//a/../././ /b/c
+/b/c//a/.././/a /b/c/a
+/b/c//a/.././/. /b/c
+/b/c//a/.././// /b/c
+/b/c//a/..//aaa /b/c/aaa
+/b/c//a/..//aa. /b/c/aa.
+/b/c//a/..//aa/ /b/c/aa
+/b/c//a/..//a.a /b/c/a.a
+/b/c//a/..//a.. /b/c/a..
+/b/c//a/..//a./ /b/c/a.
+/b/c//a/..//a/a /b/c/a/a
+/b/c//a/..//a/. /b/c/a
+/b/c//a/..//a// /b/c/a
+/b/c//a/..//.aa /b/c/.aa
+/b/c//a/..//.a. /b/c/.a.
+/b/c//a/..//.a/ /b/c/.a
+/b/c//a/..//..a /b/c/..a
+/b/c//a/..//... /b/c/...
+/b/c//a/..//../ /b
+/b/c//a/..//./a /b/c/a
+/b/c//a/..//./. /b/c
+/b/c//a/..//.// /b/c
+/b/c//a/..///aa /b/c/aa
+/b/c//a/..///a. /b/c/a.
+/b/c//a/..///a/ /b/c/a
+/b/c//a/..///.a /b/c/.a
+/b/c//a/..///.. /b
+/b/c//a/..///./ /b/c
+/b/c//a/..////a /b/c/a
+/b/c//a/..////. /b/c
+/b/c//a/..///// /b/c
+/b/c//a/./aaaaa /b/c/a/aaaaa
+/b/c//a/./aaaa. /b/c/a/aaaa.
+/b/c//a/./aaaa/ /b/c/a/aaaa
+/b/c//a/./aaa.a /b/c/a/aaa.a
+/b/c//a/./aaa.. /b/c/a/aaa..
+/b/c//a/./aaa./ /b/c/a/aaa.
+/b/c//a/./aaa/a /b/c/a/aaa/a
+/b/c//a/./aaa/. /b/c/a/aaa
+/b/c//a/./aaa// /b/c/a/aaa
+/b/c//a/./aa.aa /b/c/a/aa.aa
+/b/c//a/./aa.a. /b/c/a/aa.a.
+/b/c//a/./aa.a/ /b/c/a/aa.a
+/b/c//a/./aa..a /b/c/a/aa..a
+/b/c//a/./aa... /b/c/a/aa...
+/b/c//a/./aa../ /b/c/a/aa..
+/b/c//a/./aa./a /b/c/a/aa./a
+/b/c//a/./aa./. /b/c/a/aa.
+/b/c//a/./aa.// /b/c/a/aa.
+/b/c//a/./aa/aa /b/c/a/aa/aa
+/b/c//a/./aa/a. /b/c/a/aa/a.
+/b/c//a/./aa/a/ /b/c/a/aa/a
+/b/c//a/./aa/.a /b/c/a/aa/.a
+/b/c//a/./aa/.. /b/c/a
+/b/c//a/./aa/./ /b/c/a/aa
+/b/c//a/./aa//a /b/c/a/aa/a
+/b/c//a/./aa//. /b/c/a/aa
+/b/c//a/./aa/// /b/c/a/aa
+/b/c//a/./a.aaa /b/c/a/a.aaa
+/b/c//a/./a.aa. /b/c/a/a.aa.
+/b/c//a/./a.aa/ /b/c/a/a.aa
+/b/c//a/./a.a.a /b/c/a/a.a.a
+/b/c//a/./a.a.. /b/c/a/a.a..
+/b/c//a/./a.a./ /b/c/a/a.a.
+/b/c//a/./a.a/a /b/c/a/a.a/a
+/b/c//a/./a.a/. /b/c/a/a.a
+/b/c//a/./a.a// /b/c/a/a.a
+/b/c//a/./a..aa /b/c/a/a..aa
+/b/c//a/./a..a. /b/c/a/a..a.
+/b/c//a/./a..a/ /b/c/a/a..a
+/b/c//a/./a...a /b/c/a/a...a
+/b/c//a/./a.... /b/c/a/a....
+/b/c//a/./a.../ /b/c/a/a...
+/b/c//a/./a../a /b/c/a/a../a
+/b/c//a/./a../. /b/c/a/a..
+/b/c//a/./a..// /b/c/a/a..
+/b/c//a/./a./aa /b/c/a/a./aa
+/b/c//a/./a./a. /b/c/a/a./a.
+/b/c//a/./a./a/ /b/c/a/a./a
+/b/c//a/./a./.a /b/c/a/a./.a
+/b/c//a/./a./.. /b/c/a
+/b/c//a/./a././ /b/c/a/a.
+/b/c//a/./a.//a /b/c/a/a./a
+/b/c//a/./a.//. /b/c/a/a.
+/b/c//a/./a./// /b/c/a/a.
+/b/c//a/./a/aaa /b/c/a/a/aaa
+/b/c//a/./a/aa. /b/c/a/a/aa.
+/b/c//a/./a/aa/ /b/c/a/a/aa
+/b/c//a/./a/a.a /b/c/a/a/a.a
+/b/c//a/./a/a.. /b/c/a/a/a..
+/b/c//a/./a/a./ /b/c/a/a/a.
+/b/c//a/./a/a/a /b/c/a/a/a/a
+/b/c//a/./a/a/. /b/c/a/a/a
+/b/c//a/./a/a// /b/c/a/a/a
+/b/c//a/./a/.aa /b/c/a/a/.aa
+/b/c//a/./a/.a. /b/c/a/a/.a.
+/b/c//a/./a/.a/ /b/c/a/a/.a
+/b/c//a/./a/..a /b/c/a/a/..a
+/b/c//a/./a/... /b/c/a/a/...
+/b/c//a/./a/../ /b/c/a
+/b/c//a/./a/./a /b/c/a/a/a
+/b/c//a/./a/./. /b/c/a/a
+/b/c//a/./a/.// /b/c/a/a
+/b/c//a/./a//aa /b/c/a/a/aa
+/b/c//a/./a//a. /b/c/a/a/a.
+/b/c//a/./a//a/ /b/c/a/a/a
+/b/c//a/./a//.a /b/c/a/a/.a
+/b/c//a/./a//.. /b/c/a
+/b/c//a/./a//./ /b/c/a/a
+/b/c//a/./a///a /b/c/a/a/a
+/b/c//a/./a///. /b/c/a/a
+/b/c//a/./a//// /b/c/a/a
+/b/c//a/./.aaaa /b/c/a/.aaaa
+/b/c//a/./.aaa. /b/c/a/.aaa.
+/b/c//a/./.aaa/ /b/c/a/.aaa
+/b/c//a/./.aa.a /b/c/a/.aa.a
+/b/c//a/./.aa.. /b/c/a/.aa..
+/b/c//a/./.aa./ /b/c/a/.aa.
+/b/c//a/./.aa/a /b/c/a/.aa/a
+/b/c//a/./.aa/. /b/c/a/.aa
+/b/c//a/./.aa// /b/c/a/.aa
+/b/c//a/./.a.aa /b/c/a/.a.aa
+/b/c//a/./.a.a. /b/c/a/.a.a.
+/b/c//a/./.a.a/ /b/c/a/.a.a
+/b/c//a/./.a..a /b/c/a/.a..a
+/b/c//a/./.a... /b/c/a/.a...
+/b/c//a/./.a../ /b/c/a/.a..
+/b/c//a/./.a./a /b/c/a/.a./a
+/b/c//a/./.a./. /b/c/a/.a.
+/b/c//a/./.a.// /b/c/a/.a.
+/b/c//a/./.a/aa /b/c/a/.a/aa
+/b/c//a/./.a/a. /b/c/a/.a/a.
+/b/c//a/./.a/a/ /b/c/a/.a/a
+/b/c//a/./.a/.a /b/c/a/.a/.a
+/b/c//a/./.a/.. /b/c/a
+/b/c//a/./.a/./ /b/c/a/.a
+/b/c//a/./.a//a /b/c/a/.a/a
+/b/c//a/./.a//. /b/c/a/.a
+/b/c//a/./.a/// /b/c/a/.a
+/b/c//a/./..aaa /b/c/a/..aaa
+/b/c//a/./..aa. /b/c/a/..aa.
+/b/c//a/./..aa/ /b/c/a/..aa
+/b/c//a/./..a.a /b/c/a/..a.a
+/b/c//a/./..a.. /b/c/a/..a..
+/b/c//a/./..a./ /b/c/a/..a.
+/b/c//a/./..a/a /b/c/a/..a/a
+/b/c//a/./..a/. /b/c/a/..a
+/b/c//a/./..a// /b/c/a/..a
+/b/c//a/./...aa /b/c/a/...aa
+/b/c//a/./...a. /b/c/a/...a.
+/b/c//a/./...a/ /b/c/a/...a
+/b/c//a/./....a /b/c/a/....a
+/b/c//a/./..... /b/c/a/.....
+/b/c//a/./..../ /b/c/a/....
+/b/c//a/./.../a /b/c/a/.../a
+/b/c//a/./.../. /b/c/a/...
+/b/c//a/./...// /b/c/a/...
+/b/c//a/./../aa /b/c/aa
+/b/c//a/./../a. /b/c/a.
+/b/c//a/./../a/ /b/c/a
+/b/c//a/./../.a /b/c/.a
+/b/c//a/./../.. /b
+/b/c//a/./.././ /b/c
+/b/c//a/./..//a /b/c/a
+/b/c//a/./..//. /b/c
+/b/c//a/./../// /b/c
+/b/c//a/././aaa /b/c/a/aaa
+/b/c//a/././aa. /b/c/a/aa.
+/b/c//a/././aa/ /b/c/a/aa
+/b/c//a/././a.a /b/c/a/a.a
+/b/c//a/././a.. /b/c/a/a..
+/b/c//a/././a./ /b/c/a/a.
+/b/c//a/././a/a /b/c/a/a/a
+/b/c//a/././a/. /b/c/a/a
+/b/c//a/././a// /b/c/a/a
+/b/c//a/././.aa /b/c/a/.aa
+/b/c//a/././.a. /b/c/a/.a.
+/b/c//a/././.a/ /b/c/a/.a
+/b/c//a/././..a /b/c/a/..a
+/b/c//a/././... /b/c/a/...
+/b/c//a/././../ /b/c
+/b/c//a/./././a /b/c/a/a
+/b/c//a/./././. /b/c/a
+/b/c//a/././.// /b/c/a
+/b/c//a/././/aa /b/c/a/aa
+/b/c//a/././/a. /b/c/a/a.
+/b/c//a/././/a/ /b/c/a/a
+/b/c//a/././/.a /b/c/a/.a
+/b/c//a/././/.. /b/c
+/b/c//a/././/./ /b/c/a
+/b/c//a/././//a /b/c/a/a
+/b/c//a/././//. /b/c/a
+/b/c//a/././/// /b/c/a
+/b/c//a/.//aaaa /b/c/a/aaaa
+/b/c//a/.//aaa. /b/c/a/aaa.
+/b/c//a/.//aaa/ /b/c/a/aaa
+/b/c//a/.//aa.a /b/c/a/aa.a
+/b/c//a/.//aa.. /b/c/a/aa..
+/b/c//a/.//aa./ /b/c/a/aa.
+/b/c//a/.//aa/a /b/c/a/aa/a
+/b/c//a/.//aa/. /b/c/a/aa
+/b/c//a/.//aa// /b/c/a/aa
+/b/c//a/.//a.aa /b/c/a/a.aa
+/b/c//a/.//a.a. /b/c/a/a.a.
+/b/c//a/.//a.a/ /b/c/a/a.a
+/b/c//a/.//a..a /b/c/a/a..a
+/b/c//a/.//a... /b/c/a/a...
+/b/c//a/.//a../ /b/c/a/a..
+/b/c//a/.//a./a /b/c/a/a./a
+/b/c//a/.//a./. /b/c/a/a.
+/b/c//a/.//a.// /b/c/a/a.
+/b/c//a/.//a/aa /b/c/a/a/aa
+/b/c//a/.//a/a. /b/c/a/a/a.
+/b/c//a/.//a/a/ /b/c/a/a/a
+/b/c//a/.//a/.a /b/c/a/a/.a
+/b/c//a/.//a/.. /b/c/a
+/b/c//a/.//a/./ /b/c/a/a
+/b/c//a/.//a//a /b/c/a/a/a
+/b/c//a/.//a//. /b/c/a/a
+/b/c//a/.//a/// /b/c/a/a
+/b/c//a/.//.aaa /b/c/a/.aaa
+/b/c//a/.//.aa. /b/c/a/.aa.
+/b/c//a/.//.aa/ /b/c/a/.aa
+/b/c//a/.//.a.a /b/c/a/.a.a
+/b/c//a/.//.a.. /b/c/a/.a..
+/b/c//a/.//.a./ /b/c/a/.a.
+/b/c//a/.//.a/a /b/c/a/.a/a
+/b/c//a/.//.a/. /b/c/a/.a
+/b/c//a/.//.a// /b/c/a/.a
+/b/c//a/.//..aa /b/c/a/..aa
+/b/c//a/.//..a. /b/c/a/..a.
+/b/c//a/.//..a/ /b/c/a/..a
+/b/c//a/.//...a /b/c/a/...a
+/b/c//a/.//.... /b/c/a/....
+/b/c//a/.//.../ /b/c/a/...
+/b/c//a/.//../a /b/c/a
+/b/c//a/.//../. /b/c
+/b/c//a/.//..// /b/c
+/b/c//a/.//./aa /b/c/a/aa
+/b/c//a/.//./a. /b/c/a/a.
+/b/c//a/.//./a/ /b/c/a/a
+/b/c//a/.//./.a /b/c/a/.a
+/b/c//a/.//./.. /b/c
+/b/c//a/.//././ /b/c/a
+/b/c//a/.//.//a /b/c/a/a
+/b/c//a/.//.//. /b/c/a
+/b/c//a/.//./// /b/c/a
+/b/c//a/.///aaa /b/c/a/aaa
+/b/c//a/.///aa. /b/c/a/aa.
+/b/c//a/.///aa/ /b/c/a/aa
+/b/c//a/.///a.a /b/c/a/a.a
+/b/c//a/.///a.. /b/c/a/a..
+/b/c//a/.///a./ /b/c/a/a.
+/b/c//a/.///a/a /b/c/a/a/a
+/b/c//a/.///a/. /b/c/a/a
+/b/c//a/.///a// /b/c/a/a
+/b/c//a/.///.aa /b/c/a/.aa
+/b/c//a/.///.a. /b/c/a/.a.
+/b/c//a/.///.a/ /b/c/a/.a
+/b/c//a/.///..a /b/c/a/..a
+/b/c//a/.///... /b/c/a/...
+/b/c//a/.///../ /b/c
+/b/c//a/.///./a /b/c/a/a
+/b/c//a/.///./. /b/c/a
+/b/c//a/.///.// /b/c/a
+/b/c//a/.////aa /b/c/a/aa
+/b/c//a/.////a. /b/c/a/a.
+/b/c//a/.////a/ /b/c/a/a
+/b/c//a/.////.a /b/c/a/.a
+/b/c//a/.////.. /b/c
+/b/c//a/.////./ /b/c/a
+/b/c//a/./////a /b/c/a/a
+/b/c//a/./////. /b/c/a
+/b/c//a/.////// /b/c/a
+/b/c//a//aaaaaa /b/c/a/aaaaaa
+/b/c//a//aaaaa. /b/c/a/aaaaa.
+/b/c//a//aaaaa/ /b/c/a/aaaaa
+/b/c//a//aaaa.a /b/c/a/aaaa.a
+/b/c//a//aaaa.. /b/c/a/aaaa..
+/b/c//a//aaaa./ /b/c/a/aaaa.
+/b/c//a//aaaa/a /b/c/a/aaaa/a
+/b/c//a//aaaa/. /b/c/a/aaaa
+/b/c//a//aaaa// /b/c/a/aaaa
+/b/c//a//aaa.aa /b/c/a/aaa.aa
+/b/c//a//aaa.a. /b/c/a/aaa.a.
+/b/c//a//aaa.a/ /b/c/a/aaa.a
+/b/c//a//aaa..a /b/c/a/aaa..a
+/b/c//a//aaa... /b/c/a/aaa...
+/b/c//a//aaa../ /b/c/a/aaa..
+/b/c//a//aaa./a /b/c/a/aaa./a
+/b/c//a//aaa./. /b/c/a/aaa.
+/b/c//a//aaa.// /b/c/a/aaa.
+/b/c//a//aaa/aa /b/c/a/aaa/aa
+/b/c//a//aaa/a. /b/c/a/aaa/a.
+/b/c//a//aaa/a/ /b/c/a/aaa/a
+/b/c//a//aaa/.a /b/c/a/aaa/.a
+/b/c//a//aaa/.. /b/c/a
+/b/c//a//aaa/./ /b/c/a/aaa
+/b/c//a//aaa//a /b/c/a/aaa/a
+/b/c//a//aaa//. /b/c/a/aaa
+/b/c//a//aaa/// /b/c/a/aaa
+/b/c//a//aa.aaa /b/c/a/aa.aaa
+/b/c//a//aa.aa. /b/c/a/aa.aa.
+/b/c//a//aa.aa/ /b/c/a/aa.aa
+/b/c//a//aa.a.a /b/c/a/aa.a.a
+/b/c//a//aa.a.. /b/c/a/aa.a..
+/b/c//a//aa.a./ /b/c/a/aa.a.
+/b/c//a//aa.a/a /b/c/a/aa.a/a
+/b/c//a//aa.a/. /b/c/a/aa.a
+/b/c//a//aa.a// /b/c/a/aa.a
+/b/c//a//aa..aa /b/c/a/aa..aa
+/b/c//a//aa..a. /b/c/a/aa..a.
+/b/c//a//aa..a/ /b/c/a/aa..a
+/b/c//a//aa...a /b/c/a/aa...a
+/b/c//a//aa.... /b/c/a/aa....
+/b/c//a//aa.../ /b/c/a/aa...
+/b/c//a//aa../a /b/c/a/aa../a
+/b/c//a//aa../. /b/c/a/aa..
+/b/c//a//aa..// /b/c/a/aa..
+/b/c//a//aa./aa /b/c/a/aa./aa
+/b/c//a//aa./a. /b/c/a/aa./a.
+/b/c//a//aa./a/ /b/c/a/aa./a
+/b/c//a//aa./.a /b/c/a/aa./.a
+/b/c//a//aa./.. /b/c/a
+/b/c//a//aa././ /b/c/a/aa.
+/b/c//a//aa.//a /b/c/a/aa./a
+/b/c//a//aa.//. /b/c/a/aa.
+/b/c//a//aa./// /b/c/a/aa.
+/b/c//a//aa/aaa /b/c/a/aa/aaa
+/b/c//a//aa/aa. /b/c/a/aa/aa.
+/b/c//a//aa/aa/ /b/c/a/aa/aa
+/b/c//a//aa/a.a /b/c/a/aa/a.a
+/b/c//a//aa/a.. /b/c/a/aa/a..
+/b/c//a//aa/a./ /b/c/a/aa/a.
+/b/c//a//aa/a/a /b/c/a/aa/a/a
+/b/c//a//aa/a/. /b/c/a/aa/a
+/b/c//a//aa/a// /b/c/a/aa/a
+/b/c//a//aa/.aa /b/c/a/aa/.aa
+/b/c//a//aa/.a. /b/c/a/aa/.a.
+/b/c//a//aa/.a/ /b/c/a/aa/.a
+/b/c//a//aa/..a /b/c/a/aa/..a
+/b/c//a//aa/... /b/c/a/aa/...
+/b/c//a//aa/../ /b/c/a
+/b/c//a//aa/./a /b/c/a/aa/a
+/b/c//a//aa/./. /b/c/a/aa
+/b/c//a//aa/.// /b/c/a/aa
+/b/c//a//aa//aa /b/c/a/aa/aa
+/b/c//a//aa//a. /b/c/a/aa/a.
+/b/c//a//aa//a/ /b/c/a/aa/a
+/b/c//a//aa//.a /b/c/a/aa/.a
+/b/c//a//aa//.. /b/c/a
+/b/c//a//aa//./ /b/c/a/aa
+/b/c//a//aa///a /b/c/a/aa/a
+/b/c//a//aa///. /b/c/a/aa
+/b/c//a//aa//// /b/c/a/aa
+/b/c//a//a.aaaa /b/c/a/a.aaaa
+/b/c//a//a.aaa. /b/c/a/a.aaa.
+/b/c//a//a.aaa/ /b/c/a/a.aaa
+/b/c//a//a.aa.a /b/c/a/a.aa.a
+/b/c//a//a.aa.. /b/c/a/a.aa..
+/b/c//a//a.aa./ /b/c/a/a.aa.
+/b/c//a//a.aa/a /b/c/a/a.aa/a
+/b/c//a//a.aa/. /b/c/a/a.aa
+/b/c//a//a.aa// /b/c/a/a.aa
+/b/c//a//a.a.aa /b/c/a/a.a.aa
+/b/c//a//a.a.a. /b/c/a/a.a.a.
+/b/c//a//a.a.a/ /b/c/a/a.a.a
+/b/c//a//a.a..a /b/c/a/a.a..a
+/b/c//a//a.a... /b/c/a/a.a...
+/b/c//a//a.a../ /b/c/a/a.a..
+/b/c//a//a.a./a /b/c/a/a.a./a
+/b/c//a//a.a./. /b/c/a/a.a.
+/b/c//a//a.a.// /b/c/a/a.a.
+/b/c//a//a.a/aa /b/c/a/a.a/aa
+/b/c//a//a.a/a. /b/c/a/a.a/a.
+/b/c//a//a.a/a/ /b/c/a/a.a/a
+/b/c//a//a.a/.a /b/c/a/a.a/.a
+/b/c//a//a.a/.. /b/c/a
+/b/c//a//a.a/./ /b/c/a/a.a
+/b/c//a//a.a//a /b/c/a/a.a/a
+/b/c//a//a.a//. /b/c/a/a.a
+/b/c//a//a.a/// /b/c/a/a.a
+/b/c//a//a..aaa /b/c/a/a..aaa
+/b/c//a//a..aa. /b/c/a/a..aa.
+/b/c//a//a..aa/ /b/c/a/a..aa
+/b/c//a//a..a.a /b/c/a/a..a.a
+/b/c//a//a..a.. /b/c/a/a..a..
+/b/c//a//a..a./ /b/c/a/a..a.
+/b/c//a//a..a/a /b/c/a/a..a/a
+/b/c//a//a..a/. /b/c/a/a..a
+/b/c//a//a..a// /b/c/a/a..a
+/b/c//a//a...aa /b/c/a/a...aa
+/b/c//a//a...a. /b/c/a/a...a.
+/b/c//a//a...a/ /b/c/a/a...a
+/b/c//a//a....a /b/c/a/a....a
+/b/c//a//a..... /b/c/a/a.....
+/b/c//a//a..../ /b/c/a/a....
+/b/c//a//a.../a /b/c/a/a.../a
+/b/c//a//a.../. /b/c/a/a...
+/b/c//a//a...// /b/c/a/a...
+/b/c//a//a../aa /b/c/a/a../aa
+/b/c//a//a../a. /b/c/a/a../a.
+/b/c//a//a../a/ /b/c/a/a../a
+/b/c//a//a../.a /b/c/a/a../.a
+/b/c//a//a../.. /b/c/a
+/b/c//a//a.././ /b/c/a/a..
+/b/c//a//a..//a /b/c/a/a../a
+/b/c//a//a..//. /b/c/a/a..
+/b/c//a//a../// /b/c/a/a..
+/b/c//a//a./aaa /b/c/a/a./aaa
+/b/c//a//a./aa. /b/c/a/a./aa.
+/b/c//a//a./aa/ /b/c/a/a./aa
+/b/c//a//a./a.a /b/c/a/a./a.a
+/b/c//a//a./a.. /b/c/a/a./a..
+/b/c//a//a./a./ /b/c/a/a./a.
+/b/c//a//a./a/a /b/c/a/a./a/a
+/b/c//a//a./a/. /b/c/a/a./a
+/b/c//a//a./a// /b/c/a/a./a
+/b/c//a//a./.aa /b/c/a/a./.aa
+/b/c//a//a./.a. /b/c/a/a./.a.
+/b/c//a//a./.a/ /b/c/a/a./.a
+/b/c//a//a./..a /b/c/a/a./..a
+/b/c//a//a./... /b/c/a/a./...
+/b/c//a//a./../ /b/c/a
+/b/c//a//a././a /b/c/a/a./a
+/b/c//a//a././. /b/c/a/a.
+/b/c//a//a./.// /b/c/a/a.
+/b/c//a//a.//aa /b/c/a/a./aa
+/b/c//a//a.//a. /b/c/a/a./a.
+/b/c//a//a.//a/ /b/c/a/a./a
+/b/c//a//a.//.a /b/c/a/a./.a
+/b/c//a//a.//.. /b/c/a
+/b/c//a//a.//./ /b/c/a/a.
+/b/c//a//a.///a /b/c/a/a./a
+/b/c//a//a.///. /b/c/a/a.
+/b/c//a//a.//// /b/c/a/a.
+/b/c//a//a/aaaa /b/c/a/a/aaaa
+/b/c//a//a/aaa. /b/c/a/a/aaa.
+/b/c//a//a/aaa/ /b/c/a/a/aaa
+/b/c//a//a/aa.a /b/c/a/a/aa.a
+/b/c//a//a/aa.. /b/c/a/a/aa..
+/b/c//a//a/aa./ /b/c/a/a/aa.
+/b/c//a//a/aa/a /b/c/a/a/aa/a
+/b/c//a//a/aa/. /b/c/a/a/aa
+/b/c//a//a/aa// /b/c/a/a/aa
+/b/c//a//a/a.aa /b/c/a/a/a.aa
+/b/c//a//a/a.a. /b/c/a/a/a.a.
+/b/c//a//a/a.a/ /b/c/a/a/a.a
+/b/c//a//a/a..a /b/c/a/a/a..a
+/b/c//a//a/a... /b/c/a/a/a...
+/b/c//a//a/a../ /b/c/a/a/a..
+/b/c//a//a/a./a /b/c/a/a/a./a
+/b/c//a//a/a./. /b/c/a/a/a.
+/b/c//a//a/a.// /b/c/a/a/a.
+/b/c//a//a/a/aa /b/c/a/a/a/aa
+/b/c//a//a/a/a. /b/c/a/a/a/a.
+/b/c//a//a/a/a/ /b/c/a/a/a/a
+/b/c//a//a/a/.a /b/c/a/a/a/.a
+/b/c//a//a/a/.. /b/c/a/a
+/b/c//a//a/a/./ /b/c/a/a/a
+/b/c//a//a/a//a /b/c/a/a/a/a
+/b/c//a//a/a//. /b/c/a/a/a
+/b/c//a//a/a/// /b/c/a/a/a
+/b/c//a//a/.aaa /b/c/a/a/.aaa
+/b/c//a//a/.aa. /b/c/a/a/.aa.
+/b/c//a//a/.aa/ /b/c/a/a/.aa
+/b/c//a//a/.a.a /b/c/a/a/.a.a
+/b/c//a//a/.a.. /b/c/a/a/.a..
+/b/c//a//a/.a./ /b/c/a/a/.a.
+/b/c//a//a/.a/a /b/c/a/a/.a/a
+/b/c//a//a/.a/. /b/c/a/a/.a
+/b/c//a//a/.a// /b/c/a/a/.a
+/b/c//a//a/..aa /b/c/a/a/..aa
+/b/c//a//a/..a. /b/c/a/a/..a.
+/b/c//a//a/..a/ /b/c/a/a/..a
+/b/c//a//a/...a /b/c/a/a/...a
+/b/c//a//a/.... /b/c/a/a/....
+/b/c//a//a/.../ /b/c/a/a/...
+/b/c//a//a/../a /b/c/a/a
+/b/c//a//a/../. /b/c/a
+/b/c//a//a/..// /b/c/a
+/b/c//a//a/./aa /b/c/a/a/aa
+/b/c//a//a/./a. /b/c/a/a/a.
+/b/c//a//a/./a/ /b/c/a/a/a
+/b/c//a//a/./.a /b/c/a/a/.a
+/b/c//a//a/./.. /b/c/a
+/b/c//a//a/././ /b/c/a/a
+/b/c//a//a/.//a /b/c/a/a/a
+/b/c//a//a/.//. /b/c/a/a
+/b/c//a//a/./// /b/c/a/a
+/b/c//a//a//aaa /b/c/a/a/aaa
+/b/c//a//a//aa. /b/c/a/a/aa.
+/b/c//a//a//aa/ /b/c/a/a/aa
+/b/c//a//a//a.a /b/c/a/a/a.a
+/b/c//a//a//a.. /b/c/a/a/a..
+/b/c//a//a//a./ /b/c/a/a/a.
+/b/c//a//a//a/a /b/c/a/a/a/a
+/b/c//a//a//a/. /b/c/a/a/a
+/b/c//a//a//a// /b/c/a/a/a
+/b/c//a//a//.aa /b/c/a/a/.aa
+/b/c//a//a//.a. /b/c/a/a/.a.
+/b/c//a//a//.a/ /b/c/a/a/.a
+/b/c//a//a//..a /b/c/a/a/..a
+/b/c//a//a//... /b/c/a/a/...
+/b/c//a//a//../ /b/c/a
+/b/c//a//a//./a /b/c/a/a/a
+/b/c//a//a//./. /b/c/a/a
+/b/c//a//a//.// /b/c/a/a
+/b/c//a//a///aa /b/c/a/a/aa
+/b/c//a//a///a. /b/c/a/a/a.
+/b/c//a//a///a/ /b/c/a/a/a
+/b/c//a//a///.a /b/c/a/a/.a
+/b/c//a//a///.. /b/c/a
+/b/c//a//a///./ /b/c/a/a
+/b/c//a//a////a /b/c/a/a/a
+/b/c//a//a////. /b/c/a/a
+/b/c//a//a///// /b/c/a/a
+/b/c//a//.aaaaa /b/c/a/.aaaaa
+/b/c//a//.aaaa. /b/c/a/.aaaa.
+/b/c//a//.aaaa/ /b/c/a/.aaaa
+/b/c//a//.aaa.a /b/c/a/.aaa.a
+/b/c//a//.aaa.. /b/c/a/.aaa..
+/b/c//a//.aaa./ /b/c/a/.aaa.
+/b/c//a//.aaa/a /b/c/a/.aaa/a
+/b/c//a//.aaa/. /b/c/a/.aaa
+/b/c//a//.aaa// /b/c/a/.aaa
+/b/c//a//.aa.aa /b/c/a/.aa.aa
+/b/c//a//.aa.a. /b/c/a/.aa.a.
+/b/c//a//.aa.a/ /b/c/a/.aa.a
+/b/c//a//.aa..a /b/c/a/.aa..a
+/b/c//a//.aa... /b/c/a/.aa...
+/b/c//a//.aa../ /b/c/a/.aa..
+/b/c//a//.aa./a /b/c/a/.aa./a
+/b/c//a//.aa./. /b/c/a/.aa.
+/b/c//a//.aa.// /b/c/a/.aa.
+/b/c//a//.aa/aa /b/c/a/.aa/aa
+/b/c//a//.aa/a. /b/c/a/.aa/a.
+/b/c//a//.aa/a/ /b/c/a/.aa/a
+/b/c//a//.aa/.a /b/c/a/.aa/.a
+/b/c//a//.aa/.. /b/c/a
+/b/c//a//.aa/./ /b/c/a/.aa
+/b/c//a//.aa//a /b/c/a/.aa/a
+/b/c//a//.aa//. /b/c/a/.aa
+/b/c//a//.aa/// /b/c/a/.aa
+/b/c//a//.a.aaa /b/c/a/.a.aaa
+/b/c//a//.a.aa. /b/c/a/.a.aa.
+/b/c//a//.a.aa/ /b/c/a/.a.aa
+/b/c//a//.a.a.a /b/c/a/.a.a.a
+/b/c//a//.a.a.. /b/c/a/.a.a..
+/b/c//a//.a.a./ /b/c/a/.a.a.
+/b/c//a//.a.a/a /b/c/a/.a.a/a
+/b/c//a//.a.a/. /b/c/a/.a.a
+/b/c//a//.a.a// /b/c/a/.a.a
+/b/c//a//.a..aa /b/c/a/.a..aa
+/b/c//a//.a..a. /b/c/a/.a..a.
+/b/c//a//.a..a/ /b/c/a/.a..a
+/b/c//a//.a...a /b/c/a/.a...a
+/b/c//a//.a.... /b/c/a/.a....
+/b/c//a//.a.../ /b/c/a/.a...
+/b/c//a//.a../a /b/c/a/.a../a
+/b/c//a//.a../. /b/c/a/.a..
+/b/c//a//.a..// /b/c/a/.a..
+/b/c//a//.a./aa /b/c/a/.a./aa
+/b/c//a//.a./a. /b/c/a/.a./a.
+/b/c//a//.a./a/ /b/c/a/.a./a
+/b/c//a//.a./.a /b/c/a/.a./.a
+/b/c//a//.a./.. /b/c/a
+/b/c//a//.a././ /b/c/a/.a.
+/b/c//a//.a.//a /b/c/a/.a./a
+/b/c//a//.a.//. /b/c/a/.a.
+/b/c//a//.a./// /b/c/a/.a.
+/b/c//a//.a/aaa /b/c/a/.a/aaa
+/b/c//a//.a/aa. /b/c/a/.a/aa.
+/b/c//a//.a/aa/ /b/c/a/.a/aa
+/b/c//a//.a/a.a /b/c/a/.a/a.a
+/b/c//a//.a/a.. /b/c/a/.a/a..
+/b/c//a//.a/a./ /b/c/a/.a/a.
+/b/c//a//.a/a/a /b/c/a/.a/a/a
+/b/c//a//.a/a/. /b/c/a/.a/a
+/b/c//a//.a/a// /b/c/a/.a/a
+/b/c//a//.a/.aa /b/c/a/.a/.aa
+/b/c//a//.a/.a. /b/c/a/.a/.a.
+/b/c//a//.a/.a/ /b/c/a/.a/.a
+/b/c//a//.a/..a /b/c/a/.a/..a
+/b/c//a//.a/... /b/c/a/.a/...
+/b/c//a//.a/../ /b/c/a
+/b/c//a//.a/./a /b/c/a/.a/a
+/b/c//a//.a/./. /b/c/a/.a
+/b/c//a//.a/.// /b/c/a/.a
+/b/c//a//.a//aa /b/c/a/.a/aa
+/b/c//a//.a//a. /b/c/a/.a/a.
+/b/c//a//.a//a/ /b/c/a/.a/a
+/b/c//a//.a//.a /b/c/a/.a/.a
+/b/c//a//.a//.. /b/c/a
+/b/c//a//.a//./ /b/c/a/.a
+/b/c//a//.a///a /b/c/a/.a/a
+/b/c//a//.a///. /b/c/a/.a
+/b/c//a//.a//// /b/c/a/.a
+/b/c//a//..aaaa /b/c/a/..aaaa
+/b/c//a//..aaa. /b/c/a/..aaa.
+/b/c//a//..aaa/ /b/c/a/..aaa
+/b/c//a//..aa.a /b/c/a/..aa.a
+/b/c//a//..aa.. /b/c/a/..aa..
+/b/c//a//..aa./ /b/c/a/..aa.
+/b/c//a//..aa/a /b/c/a/..aa/a
+/b/c//a//..aa/. /b/c/a/..aa
+/b/c//a//..aa// /b/c/a/..aa
+/b/c//a//..a.aa /b/c/a/..a.aa
+/b/c//a//..a.a. /b/c/a/..a.a.
+/b/c//a//..a.a/ /b/c/a/..a.a
+/b/c//a//..a..a /b/c/a/..a..a
+/b/c//a//..a... /b/c/a/..a...
+/b/c//a//..a../ /b/c/a/..a..
+/b/c//a//..a./a /b/c/a/..a./a
+/b/c//a//..a./. /b/c/a/..a.
+/b/c//a//..a.// /b/c/a/..a.
+/b/c//a//..a/aa /b/c/a/..a/aa
+/b/c//a//..a/a. /b/c/a/..a/a.
+/b/c//a//..a/a/ /b/c/a/..a/a
+/b/c//a//..a/.a /b/c/a/..a/.a
+/b/c//a//..a/.. /b/c/a
+/b/c//a//..a/./ /b/c/a/..a
+/b/c//a//..a//a /b/c/a/..a/a
+/b/c//a//..a//. /b/c/a/..a
+/b/c//a//..a/// /b/c/a/..a
+/b/c//a//...aaa /b/c/a/...aaa
+/b/c//a//...aa. /b/c/a/...aa.
+/b/c//a//...aa/ /b/c/a/...aa
+/b/c//a//...a.a /b/c/a/...a.a
+/b/c//a//...a.. /b/c/a/...a..
+/b/c//a//...a./ /b/c/a/...a.
+/b/c//a//...a/a /b/c/a/...a/a
+/b/c//a//...a/. /b/c/a/...a
+/b/c//a//...a// /b/c/a/...a
+/b/c//a//....aa /b/c/a/....aa
+/b/c//a//....a. /b/c/a/....a.
+/b/c//a//....a/ /b/c/a/....a
+/b/c//a//.....a /b/c/a/.....a
+/b/c//a//...... /b/c/a/......
+/b/c//a//...../ /b/c/a/.....
+/b/c//a//..../a /b/c/a/..../a
+/b/c//a//..../. /b/c/a/....
+/b/c//a//....// /b/c/a/....
+/b/c//a//.../aa /b/c/a/.../aa
+/b/c//a//.../a. /b/c/a/.../a.
+/b/c//a//.../a/ /b/c/a/.../a
+/b/c//a//.../.a /b/c/a/.../.a
+/b/c//a//.../.. /b/c/a
+/b/c//a//..././ /b/c/a/...
+/b/c//a//...//a /b/c/a/.../a
+/b/c//a//...//. /b/c/a/...
+/b/c//a//.../// /b/c/a/...
+/b/c//a//../aaa /b/c/aaa
+/b/c//a//../aa. /b/c/aa.
+/b/c//a//../aa/ /b/c/aa
+/b/c//a//../a.a /b/c/a.a
+/b/c//a//../a.. /b/c/a..
+/b/c//a//../a./ /b/c/a.
+/b/c//a//../a/a /b/c/a/a
+/b/c//a//../a/. /b/c/a
+/b/c//a//../a// /b/c/a
+/b/c//a//../.aa /b/c/.aa
+/b/c//a//../.a. /b/c/.a.
+/b/c//a//../.a/ /b/c/.a
+/b/c//a//../..a /b/c/..a
+/b/c//a//../... /b/c/...
+/b/c//a//../../ /b
+/b/c//a//.././a /b/c/a
+/b/c//a//.././. /b/c
+/b/c//a//../.// /b/c
+/b/c//a//..//aa /b/c/aa
+/b/c//a//..//a. /b/c/a.
+/b/c//a//..//a/ /b/c/a
+/b/c//a//..//.a /b/c/.a
+/b/c//a//..//.. /b
+/b/c//a//..//./ /b/c
+/b/c//a//..///a /b/c/a
+/b/c//a//..///. /b/c
+/b/c//a//..//// /b/c
+/b/c//a//./aaaa /b/c/a/aaaa
+/b/c//a//./aaa. /b/c/a/aaa.
+/b/c//a//./aaa/ /b/c/a/aaa
+/b/c//a//./aa.a /b/c/a/aa.a
+/b/c//a//./aa.. /b/c/a/aa..
+/b/c//a//./aa./ /b/c/a/aa.
+/b/c//a//./aa/a /b/c/a/aa/a
+/b/c//a//./aa/. /b/c/a/aa
+/b/c//a//./aa// /b/c/a/aa
+/b/c//a//./a.aa /b/c/a/a.aa
+/b/c//a//./a.a. /b/c/a/a.a.
+/b/c//a//./a.a/ /b/c/a/a.a
+/b/c//a//./a..a /b/c/a/a..a
+/b/c//a//./a... /b/c/a/a...
+/b/c//a//./a../ /b/c/a/a..
+/b/c//a//./a./a /b/c/a/a./a
+/b/c//a//./a./. /b/c/a/a.
+/b/c//a//./a.// /b/c/a/a.
+/b/c//a//./a/aa /b/c/a/a/aa
+/b/c//a//./a/a. /b/c/a/a/a.
+/b/c//a//./a/a/ /b/c/a/a/a
+/b/c//a//./a/.a /b/c/a/a/.a
+/b/c//a//./a/.. /b/c/a
+/b/c//a//./a/./ /b/c/a/a
+/b/c//a//./a//a /b/c/a/a/a
+/b/c//a//./a//. /b/c/a/a
+/b/c//a//./a/// /b/c/a/a
+/b/c//a//./.aaa /b/c/a/.aaa
+/b/c//a//./.aa. /b/c/a/.aa.
+/b/c//a//./.aa/ /b/c/a/.aa
+/b/c//a//./.a.a /b/c/a/.a.a
+/b/c//a//./.a.. /b/c/a/.a..
+/b/c//a//./.a./ /b/c/a/.a.
+/b/c//a//./.a/a /b/c/a/.a/a
+/b/c//a//./.a/. /b/c/a/.a
+/b/c//a//./.a// /b/c/a/.a
+/b/c//a//./..aa /b/c/a/..aa
+/b/c//a//./..a. /b/c/a/..a.
+/b/c//a//./..a/ /b/c/a/..a
+/b/c//a//./...a /b/c/a/...a
+/b/c//a//./.... /b/c/a/....
+/b/c//a//./.../ /b/c/a/...
+/b/c//a//./../a /b/c/a
+/b/c//a//./../. /b/c
+/b/c//a//./..// /b/c
+/b/c//a//././aa /b/c/a/aa
+/b/c//a//././a. /b/c/a/a.
+/b/c//a//././a/ /b/c/a/a
+/b/c//a//././.a /b/c/a/.a
+/b/c//a//././.. /b/c
+/b/c//a//./././ /b/c/a
+/b/c//a//././/a /b/c/a/a
+/b/c//a//././/. /b/c/a
+/b/c//a//././// /b/c/a
+/b/c//a//.//aaa /b/c/a/aaa
+/b/c//a//.//aa. /b/c/a/aa.
+/b/c//a//.//aa/ /b/c/a/aa
+/b/c//a//.//a.a /b/c/a/a.a
+/b/c//a//.//a.. /b/c/a/a..
+/b/c//a//.//a./ /b/c/a/a.
+/b/c//a//.//a/a /b/c/a/a/a
+/b/c//a//.//a/. /b/c/a/a
+/b/c//a//.//a// /b/c/a/a
+/b/c//a//.//.aa /b/c/a/.aa
+/b/c//a//.//.a. /b/c/a/.a.
+/b/c//a//.//.a/ /b/c/a/.a
+/b/c//a//.//..a /b/c/a/..a
+/b/c//a//.//... /b/c/a/...
+/b/c//a//.//../ /b/c
+/b/c//a//.//./a /b/c/a/a
+/b/c//a//.//./. /b/c/a
+/b/c//a//.//.// /b/c/a
+/b/c//a//.///aa /b/c/a/aa
+/b/c//a//.///a. /b/c/a/a.
+/b/c//a//.///a/ /b/c/a/a
+/b/c//a//.///.a /b/c/a/.a
+/b/c//a//.///.. /b/c
+/b/c//a//.///./ /b/c/a
+/b/c//a//.////a /b/c/a/a
+/b/c//a//.////. /b/c/a
+/b/c//a//.///// /b/c/a
+/b/c//a///aaaaa /b/c/a/aaaaa
+/b/c//a///aaaa. /b/c/a/aaaa.
+/b/c//a///aaaa/ /b/c/a/aaaa
+/b/c//a///aaa.a /b/c/a/aaa.a
+/b/c//a///aaa.. /b/c/a/aaa..
+/b/c//a///aaa./ /b/c/a/aaa.
+/b/c//a///aaa/a /b/c/a/aaa/a
+/b/c//a///aaa/. /b/c/a/aaa
+/b/c//a///aaa// /b/c/a/aaa
+/b/c//a///aa.aa /b/c/a/aa.aa
+/b/c//a///aa.a. /b/c/a/aa.a.
+/b/c//a///aa.a/ /b/c/a/aa.a
+/b/c//a///aa..a /b/c/a/aa..a
+/b/c//a///aa... /b/c/a/aa...
+/b/c//a///aa../ /b/c/a/aa..
+/b/c//a///aa./a /b/c/a/aa./a
+/b/c//a///aa./. /b/c/a/aa.
+/b/c//a///aa.// /b/c/a/aa.
+/b/c//a///aa/aa /b/c/a/aa/aa
+/b/c//a///aa/a. /b/c/a/aa/a.
+/b/c//a///aa/a/ /b/c/a/aa/a
+/b/c//a///aa/.a /b/c/a/aa/.a
+/b/c//a///aa/.. /b/c/a
+/b/c//a///aa/./ /b/c/a/aa
+/b/c//a///aa//a /b/c/a/aa/a
+/b/c//a///aa//. /b/c/a/aa
+/b/c//a///aa/// /b/c/a/aa
+/b/c//a///a.aaa /b/c/a/a.aaa
+/b/c//a///a.aa. /b/c/a/a.aa.
+/b/c//a///a.aa/ /b/c/a/a.aa
+/b/c//a///a.a.a /b/c/a/a.a.a
+/b/c//a///a.a.. /b/c/a/a.a..
+/b/c//a///a.a./ /b/c/a/a.a.
+/b/c//a///a.a/a /b/c/a/a.a/a
+/b/c//a///a.a/. /b/c/a/a.a
+/b/c//a///a.a// /b/c/a/a.a
+/b/c//a///a..aa /b/c/a/a..aa
+/b/c//a///a..a. /b/c/a/a..a.
+/b/c//a///a..a/ /b/c/a/a..a
+/b/c//a///a...a /b/c/a/a...a
+/b/c//a///a.... /b/c/a/a....
+/b/c//a///a.../ /b/c/a/a...
+/b/c//a///a../a /b/c/a/a../a
+/b/c//a///a../. /b/c/a/a..
+/b/c//a///a..// /b/c/a/a..
+/b/c//a///a./aa /b/c/a/a./aa
+/b/c//a///a./a. /b/c/a/a./a.
+/b/c//a///a./a/ /b/c/a/a./a
+/b/c//a///a./.a /b/c/a/a./.a
+/b/c//a///a./.. /b/c/a
+/b/c//a///a././ /b/c/a/a.
+/b/c//a///a.//a /b/c/a/a./a
+/b/c//a///a.//. /b/c/a/a.
+/b/c//a///a./// /b/c/a/a.
+/b/c//a///a/aaa /b/c/a/a/aaa
+/b/c//a///a/aa. /b/c/a/a/aa.
+/b/c//a///a/aa/ /b/c/a/a/aa
+/b/c//a///a/a.a /b/c/a/a/a.a
+/b/c//a///a/a.. /b/c/a/a/a..
+/b/c//a///a/a./ /b/c/a/a/a.
+/b/c//a///a/a/a /b/c/a/a/a/a
+/b/c//a///a/a/. /b/c/a/a/a
+/b/c//a///a/a// /b/c/a/a/a
+/b/c//a///a/.aa /b/c/a/a/.aa
+/b/c//a///a/.a. /b/c/a/a/.a.
+/b/c//a///a/.a/ /b/c/a/a/.a
+/b/c//a///a/..a /b/c/a/a/..a
+/b/c//a///a/... /b/c/a/a/...
+/b/c//a///a/../ /b/c/a
+/b/c//a///a/./a /b/c/a/a/a
+/b/c//a///a/./. /b/c/a/a
+/b/c//a///a/.// /b/c/a/a
+/b/c//a///a//aa /b/c/a/a/aa
+/b/c//a///a//a. /b/c/a/a/a.
+/b/c//a///a//a/ /b/c/a/a/a
+/b/c//a///a//.a /b/c/a/a/.a
+/b/c//a///a//.. /b/c/a
+/b/c//a///a//./ /b/c/a/a
+/b/c//a///a///a /b/c/a/a/a
+/b/c//a///a///. /b/c/a/a
+/b/c//a///a//// /b/c/a/a
+/b/c//a///.aaaa /b/c/a/.aaaa
+/b/c//a///.aaa. /b/c/a/.aaa.
+/b/c//a///.aaa/ /b/c/a/.aaa
+/b/c//a///.aa.a /b/c/a/.aa.a
+/b/c//a///.aa.. /b/c/a/.aa..
+/b/c//a///.aa./ /b/c/a/.aa.
+/b/c//a///.aa/a /b/c/a/.aa/a
+/b/c//a///.aa/. /b/c/a/.aa
+/b/c//a///.aa// /b/c/a/.aa
+/b/c//a///.a.aa /b/c/a/.a.aa
+/b/c//a///.a.a. /b/c/a/.a.a.
+/b/c//a///.a.a/ /b/c/a/.a.a
+/b/c//a///.a..a /b/c/a/.a..a
+/b/c//a///.a... /b/c/a/.a...
+/b/c//a///.a../ /b/c/a/.a..
+/b/c//a///.a./a /b/c/a/.a./a
+/b/c//a///.a./. /b/c/a/.a.
+/b/c//a///.a.// /b/c/a/.a.
+/b/c//a///.a/aa /b/c/a/.a/aa
+/b/c//a///.a/a. /b/c/a/.a/a.
+/b/c//a///.a/a/ /b/c/a/.a/a
+/b/c//a///.a/.a /b/c/a/.a/.a
+/b/c//a///.a/.. /b/c/a
+/b/c//a///.a/./ /b/c/a/.a
+/b/c//a///.a//a /b/c/a/.a/a
+/b/c//a///.a//. /b/c/a/.a
+/b/c//a///.a/// /b/c/a/.a
+/b/c//a///..aaa /b/c/a/..aaa
+/b/c//a///..aa. /b/c/a/..aa.
+/b/c//a///..aa/ /b/c/a/..aa
+/b/c//a///..a.a /b/c/a/..a.a
+/b/c//a///..a.. /b/c/a/..a..
+/b/c//a///..a./ /b/c/a/..a.
+/b/c//a///..a/a /b/c/a/..a/a
+/b/c//a///..a/. /b/c/a/..a
+/b/c//a///..a// /b/c/a/..a
+/b/c//a///...aa /b/c/a/...aa
+/b/c//a///...a. /b/c/a/...a.
+/b/c//a///...a/ /b/c/a/...a
+/b/c//a///....a /b/c/a/....a
+/b/c//a///..... /b/c/a/.....
+/b/c//a///..../ /b/c/a/....
+/b/c//a///.../a /b/c/a/.../a
+/b/c//a///.../. /b/c/a/...
+/b/c//a///...// /b/c/a/...
+/b/c//a///../aa /b/c/aa
+/b/c//a///../a. /b/c/a.
+/b/c//a///../a/ /b/c/a
+/b/c//a///../.a /b/c/.a
+/b/c//a///../.. /b
+/b/c//a///.././ /b/c
+/b/c//a///..//a /b/c/a
+/b/c//a///..//. /b/c
+/b/c//a///../// /b/c
+/b/c//a///./aaa /b/c/a/aaa
+/b/c//a///./aa. /b/c/a/aa.
+/b/c//a///./aa/ /b/c/a/aa
+/b/c//a///./a.a /b/c/a/a.a
+/b/c//a///./a.. /b/c/a/a..
+/b/c//a///./a./ /b/c/a/a.
+/b/c//a///./a/a /b/c/a/a/a
+/b/c//a///./a/. /b/c/a/a
+/b/c//a///./a// /b/c/a/a
+/b/c//a///./.aa /b/c/a/.aa
+/b/c//a///./.a. /b/c/a/.a.
+/b/c//a///./.a/ /b/c/a/.a
+/b/c//a///./..a /b/c/a/..a
+/b/c//a///./... /b/c/a/...
+/b/c//a///./../ /b/c
+/b/c//a///././a /b/c/a/a
+/b/c//a///././. /b/c/a
+/b/c//a///./.// /b/c/a
+/b/c//a///.//aa /b/c/a/aa
+/b/c//a///.//a. /b/c/a/a.
+/b/c//a///.//a/ /b/c/a/a
+/b/c//a///.//.a /b/c/a/.a
+/b/c//a///.//.. /b/c
+/b/c//a///.//./ /b/c/a
+/b/c//a///.///a /b/c/a/a
+/b/c//a///.///. /b/c/a
+/b/c//a///.//// /b/c/a
+/b/c//a////aaaa /b/c/a/aaaa
+/b/c//a////aaa. /b/c/a/aaa.
+/b/c//a////aaa/ /b/c/a/aaa
+/b/c//a////aa.a /b/c/a/aa.a
+/b/c//a////aa.. /b/c/a/aa..
+/b/c//a////aa./ /b/c/a/aa.
+/b/c//a////aa/a /b/c/a/aa/a
+/b/c//a////aa/. /b/c/a/aa
+/b/c//a////aa// /b/c/a/aa
+/b/c//a////a.aa /b/c/a/a.aa
+/b/c//a////a.a. /b/c/a/a.a.
+/b/c//a////a.a/ /b/c/a/a.a
+/b/c//a////a..a /b/c/a/a..a
+/b/c//a////a... /b/c/a/a...
+/b/c//a////a../ /b/c/a/a..
+/b/c//a////a./a /b/c/a/a./a
+/b/c//a////a./. /b/c/a/a.
+/b/c//a////a.// /b/c/a/a.
+/b/c//a////a/aa /b/c/a/a/aa
+/b/c//a////a/a. /b/c/a/a/a.
+/b/c//a////a/a/ /b/c/a/a/a
+/b/c//a////a/.a /b/c/a/a/.a
+/b/c//a////a/.. /b/c/a
+/b/c//a////a/./ /b/c/a/a
+/b/c//a////a//a /b/c/a/a/a
+/b/c//a////a//. /b/c/a/a
+/b/c//a////a/// /b/c/a/a
+/b/c//a////.aaa /b/c/a/.aaa
+/b/c//a////.aa. /b/c/a/.aa.
+/b/c//a////.aa/ /b/c/a/.aa
+/b/c//a////.a.a /b/c/a/.a.a
+/b/c//a////.a.. /b/c/a/.a..
+/b/c//a////.a./ /b/c/a/.a.
+/b/c//a////.a/a /b/c/a/.a/a
+/b/c//a////.a/. /b/c/a/.a
+/b/c//a////.a// /b/c/a/.a
+/b/c//a////..aa /b/c/a/..aa
+/b/c//a////..a. /b/c/a/..a.
+/b/c//a////..a/ /b/c/a/..a
+/b/c//a////...a /b/c/a/...a
+/b/c//a////.... /b/c/a/....
+/b/c//a////.../ /b/c/a/...
+/b/c//a////../a /b/c/a
+/b/c//a////../. /b/c
+/b/c//a////..// /b/c
+/b/c//a////./aa /b/c/a/aa
+/b/c//a////./a. /b/c/a/a.
+/b/c//a////./a/ /b/c/a/a
+/b/c//a////./.a /b/c/a/.a
+/b/c//a////./.. /b/c
+/b/c//a////././ /b/c/a
+/b/c//a////.//a /b/c/a/a
+/b/c//a////.//. /b/c/a
+/b/c//a////./// /b/c/a
+/b/c//a/////aaa /b/c/a/aaa
+/b/c//a/////aa. /b/c/a/aa.
+/b/c//a/////aa/ /b/c/a/aa
+/b/c//a/////a.a /b/c/a/a.a
+/b/c//a/////a.. /b/c/a/a..
+/b/c//a/////a./ /b/c/a/a.
+/b/c//a/////a/a /b/c/a/a/a
+/b/c//a/////a/. /b/c/a/a
+/b/c//a/////a// /b/c/a/a
+/b/c//a/////.aa /b/c/a/.aa
+/b/c//a/////.a. /b/c/a/.a.
+/b/c//a/////.a/ /b/c/a/.a
+/b/c//a/////..a /b/c/a/..a
+/b/c//a/////... /b/c/a/...
+/b/c//a/////../ /b/c
+/b/c//a/////./a /b/c/a/a
+/b/c//a/////./. /b/c/a
+/b/c//a/////.// /b/c/a
+/b/c//a//////aa /b/c/a/aa
+/b/c//a//////a. /b/c/a/a.
+/b/c//a//////a/ /b/c/a/a
+/b/c//a//////.a /b/c/a/.a
+/b/c//a//////.. /b/c
+/b/c//a//////./ /b/c/a
+/b/c//a///////a /b/c/a/a
+/b/c//a///////. /b/c/a
+/b/c//a//////// /b/c/a
+/b/c//.aaaaaaaa /b/c/.aaaaaaaa
+/b/c//.aaaaaaa. /b/c/.aaaaaaa.
+/b/c//.aaaaaaa/ /b/c/.aaaaaaa
+/b/c//.aaaaaa.a /b/c/.aaaaaa.a
+/b/c//.aaaaaa.. /b/c/.aaaaaa..
+/b/c//.aaaaaa./ /b/c/.aaaaaa.
+/b/c//.aaaaaa/a /b/c/.aaaaaa/a
+/b/c//.aaaaaa/. /b/c/.aaaaaa
+/b/c//.aaaaaa// /b/c/.aaaaaa
+/b/c//.aaaaa.aa /b/c/.aaaaa.aa
+/b/c//.aaaaa.a. /b/c/.aaaaa.a.
+/b/c//.aaaaa.a/ /b/c/.aaaaa.a
+/b/c//.aaaaa..a /b/c/.aaaaa..a
+/b/c//.aaaaa... /b/c/.aaaaa...
+/b/c//.aaaaa../ /b/c/.aaaaa..
+/b/c//.aaaaa./a /b/c/.aaaaa./a
+/b/c//.aaaaa./. /b/c/.aaaaa.
+/b/c//.aaaaa.// /b/c/.aaaaa.
+/b/c//.aaaaa/aa /b/c/.aaaaa/aa
+/b/c//.aaaaa/a. /b/c/.aaaaa/a.
+/b/c//.aaaaa/a/ /b/c/.aaaaa/a
+/b/c//.aaaaa/.a /b/c/.aaaaa/.a
+/b/c//.aaaaa/.. /b/c
+/b/c//.aaaaa/./ /b/c/.aaaaa
+/b/c//.aaaaa//a /b/c/.aaaaa/a
+/b/c//.aaaaa//. /b/c/.aaaaa
+/b/c//.aaaaa/// /b/c/.aaaaa
+/b/c//.aaaa.aaa /b/c/.aaaa.aaa
+/b/c//.aaaa.aa. /b/c/.aaaa.aa.
+/b/c//.aaaa.aa/ /b/c/.aaaa.aa
+/b/c//.aaaa.a.a /b/c/.aaaa.a.a
+/b/c//.aaaa.a.. /b/c/.aaaa.a..
+/b/c//.aaaa.a./ /b/c/.aaaa.a.
+/b/c//.aaaa.a/a /b/c/.aaaa.a/a
+/b/c//.aaaa.a/. /b/c/.aaaa.a
+/b/c//.aaaa.a// /b/c/.aaaa.a
+/b/c//.aaaa..aa /b/c/.aaaa..aa
+/b/c//.aaaa..a. /b/c/.aaaa..a.
+/b/c//.aaaa..a/ /b/c/.aaaa..a
+/b/c//.aaaa...a /b/c/.aaaa...a
+/b/c//.aaaa.... /b/c/.aaaa....
+/b/c//.aaaa.../ /b/c/.aaaa...
+/b/c//.aaaa../a /b/c/.aaaa../a
+/b/c//.aaaa../. /b/c/.aaaa..
+/b/c//.aaaa..// /b/c/.aaaa..
+/b/c//.aaaa./aa /b/c/.aaaa./aa
+/b/c//.aaaa./a. /b/c/.aaaa./a.
+/b/c//.aaaa./a/ /b/c/.aaaa./a
+/b/c//.aaaa./.a /b/c/.aaaa./.a
+/b/c//.aaaa./.. /b/c
+/b/c//.aaaa././ /b/c/.aaaa.
+/b/c//.aaaa.//a /b/c/.aaaa./a
+/b/c//.aaaa.//. /b/c/.aaaa.
+/b/c//.aaaa./// /b/c/.aaaa.
+/b/c//.aaaa/aaa /b/c/.aaaa/aaa
+/b/c//.aaaa/aa. /b/c/.aaaa/aa.
+/b/c//.aaaa/aa/ /b/c/.aaaa/aa
+/b/c//.aaaa/a.a /b/c/.aaaa/a.a
+/b/c//.aaaa/a.. /b/c/.aaaa/a..
+/b/c//.aaaa/a./ /b/c/.aaaa/a.
+/b/c//.aaaa/a/a /b/c/.aaaa/a/a
+/b/c//.aaaa/a/. /b/c/.aaaa/a
+/b/c//.aaaa/a// /b/c/.aaaa/a
+/b/c//.aaaa/.aa /b/c/.aaaa/.aa
+/b/c//.aaaa/.a. /b/c/.aaaa/.a.
+/b/c//.aaaa/.a/ /b/c/.aaaa/.a
+/b/c//.aaaa/..a /b/c/.aaaa/..a
+/b/c//.aaaa/... /b/c/.aaaa/...
+/b/c//.aaaa/../ /b/c
+/b/c//.aaaa/./a /b/c/.aaaa/a
+/b/c//.aaaa/./. /b/c/.aaaa
+/b/c//.aaaa/.// /b/c/.aaaa
+/b/c//.aaaa//aa /b/c/.aaaa/aa
+/b/c//.aaaa//a. /b/c/.aaaa/a.
+/b/c//.aaaa//a/ /b/c/.aaaa/a
+/b/c//.aaaa//.a /b/c/.aaaa/.a
+/b/c//.aaaa//.. /b/c
+/b/c//.aaaa//./ /b/c/.aaaa
+/b/c//.aaaa///a /b/c/.aaaa/a
+/b/c//.aaaa///. /b/c/.aaaa
+/b/c//.aaaa//// /b/c/.aaaa
+/b/c//.aaa.aaaa /b/c/.aaa.aaaa
+/b/c//.aaa.aaa. /b/c/.aaa.aaa.
+/b/c//.aaa.aaa/ /b/c/.aaa.aaa
+/b/c//.aaa.aa.a /b/c/.aaa.aa.a
+/b/c//.aaa.aa.. /b/c/.aaa.aa..
+/b/c//.aaa.aa./ /b/c/.aaa.aa.
+/b/c//.aaa.aa/a /b/c/.aaa.aa/a
+/b/c//.aaa.aa/. /b/c/.aaa.aa
+/b/c//.aaa.aa// /b/c/.aaa.aa
+/b/c//.aaa.a.aa /b/c/.aaa.a.aa
+/b/c//.aaa.a.a. /b/c/.aaa.a.a.
+/b/c//.aaa.a.a/ /b/c/.aaa.a.a
+/b/c//.aaa.a..a /b/c/.aaa.a..a
+/b/c//.aaa.a... /b/c/.aaa.a...
+/b/c//.aaa.a../ /b/c/.aaa.a..
+/b/c//.aaa.a./a /b/c/.aaa.a./a
+/b/c//.aaa.a./. /b/c/.aaa.a.
+/b/c//.aaa.a.// /b/c/.aaa.a.
+/b/c//.aaa.a/aa /b/c/.aaa.a/aa
+/b/c//.aaa.a/a. /b/c/.aaa.a/a.
+/b/c//.aaa.a/a/ /b/c/.aaa.a/a
+/b/c//.aaa.a/.a /b/c/.aaa.a/.a
+/b/c//.aaa.a/.. /b/c
+/b/c//.aaa.a/./ /b/c/.aaa.a
+/b/c//.aaa.a//a /b/c/.aaa.a/a
+/b/c//.aaa.a//. /b/c/.aaa.a
+/b/c//.aaa.a/// /b/c/.aaa.a
+/b/c//.aaa..aaa /b/c/.aaa..aaa
+/b/c//.aaa..aa. /b/c/.aaa..aa.
+/b/c//.aaa..aa/ /b/c/.aaa..aa
+/b/c//.aaa..a.a /b/c/.aaa..a.a
+/b/c//.aaa..a.. /b/c/.aaa..a..
+/b/c//.aaa..a./ /b/c/.aaa..a.
+/b/c//.aaa..a/a /b/c/.aaa..a/a
+/b/c//.aaa..a/. /b/c/.aaa..a
+/b/c//.aaa..a// /b/c/.aaa..a
+/b/c//.aaa...aa /b/c/.aaa...aa
+/b/c//.aaa...a. /b/c/.aaa...a.
+/b/c//.aaa...a/ /b/c/.aaa...a
+/b/c//.aaa....a /b/c/.aaa....a
+/b/c//.aaa..... /b/c/.aaa.....
+/b/c//.aaa..../ /b/c/.aaa....
+/b/c//.aaa.../a /b/c/.aaa.../a
+/b/c//.aaa.../. /b/c/.aaa...
+/b/c//.aaa...// /b/c/.aaa...
+/b/c//.aaa../aa /b/c/.aaa../aa
+/b/c//.aaa../a. /b/c/.aaa../a.
+/b/c//.aaa../a/ /b/c/.aaa../a
+/b/c//.aaa../.a /b/c/.aaa../.a
+/b/c//.aaa../.. /b/c
+/b/c//.aaa.././ /b/c/.aaa..
+/b/c//.aaa..//a /b/c/.aaa../a
+/b/c//.aaa..//. /b/c/.aaa..
+/b/c//.aaa../// /b/c/.aaa..
+/b/c//.aaa./aaa /b/c/.aaa./aaa
+/b/c//.aaa./aa. /b/c/.aaa./aa.
+/b/c//.aaa./aa/ /b/c/.aaa./aa
+/b/c//.aaa./a.a /b/c/.aaa./a.a
+/b/c//.aaa./a.. /b/c/.aaa./a..
+/b/c//.aaa./a./ /b/c/.aaa./a.
+/b/c//.aaa./a/a /b/c/.aaa./a/a
+/b/c//.aaa./a/. /b/c/.aaa./a
+/b/c//.aaa./a// /b/c/.aaa./a
+/b/c//.aaa./.aa /b/c/.aaa./.aa
+/b/c//.aaa./.a. /b/c/.aaa./.a.
+/b/c//.aaa./.a/ /b/c/.aaa./.a
+/b/c//.aaa./..a /b/c/.aaa./..a
+/b/c//.aaa./... /b/c/.aaa./...
+/b/c//.aaa./../ /b/c
+/b/c//.aaa././a /b/c/.aaa./a
+/b/c//.aaa././. /b/c/.aaa.
+/b/c//.aaa./.// /b/c/.aaa.
+/b/c//.aaa.//aa /b/c/.aaa./aa
+/b/c//.aaa.//a. /b/c/.aaa./a.
+/b/c//.aaa.//a/ /b/c/.aaa./a
+/b/c//.aaa.//.a /b/c/.aaa./.a
+/b/c//.aaa.//.. /b/c
+/b/c//.aaa.//./ /b/c/.aaa.
+/b/c//.aaa.///a /b/c/.aaa./a
+/b/c//.aaa.///. /b/c/.aaa.
+/b/c//.aaa.//// /b/c/.aaa.
+/b/c//.aaa/aaaa /b/c/.aaa/aaaa
+/b/c//.aaa/aaa. /b/c/.aaa/aaa.
+/b/c//.aaa/aaa/ /b/c/.aaa/aaa
+/b/c//.aaa/aa.a /b/c/.aaa/aa.a
+/b/c//.aaa/aa.. /b/c/.aaa/aa..
+/b/c//.aaa/aa./ /b/c/.aaa/aa.
+/b/c//.aaa/aa/a /b/c/.aaa/aa/a
+/b/c//.aaa/aa/. /b/c/.aaa/aa
+/b/c//.aaa/aa// /b/c/.aaa/aa
+/b/c//.aaa/a.aa /b/c/.aaa/a.aa
+/b/c//.aaa/a.a. /b/c/.aaa/a.a.
+/b/c//.aaa/a.a/ /b/c/.aaa/a.a
+/b/c//.aaa/a..a /b/c/.aaa/a..a
+/b/c//.aaa/a... /b/c/.aaa/a...
+/b/c//.aaa/a../ /b/c/.aaa/a..
+/b/c//.aaa/a./a /b/c/.aaa/a./a
+/b/c//.aaa/a./. /b/c/.aaa/a.
+/b/c//.aaa/a.// /b/c/.aaa/a.
+/b/c//.aaa/a/aa /b/c/.aaa/a/aa
+/b/c//.aaa/a/a. /b/c/.aaa/a/a.
+/b/c//.aaa/a/a/ /b/c/.aaa/a/a
+/b/c//.aaa/a/.a /b/c/.aaa/a/.a
+/b/c//.aaa/a/.. /b/c/.aaa
+/b/c//.aaa/a/./ /b/c/.aaa/a
+/b/c//.aaa/a//a /b/c/.aaa/a/a
+/b/c//.aaa/a//. /b/c/.aaa/a
+/b/c//.aaa/a/// /b/c/.aaa/a
+/b/c//.aaa/.aaa /b/c/.aaa/.aaa
+/b/c//.aaa/.aa. /b/c/.aaa/.aa.
+/b/c//.aaa/.aa/ /b/c/.aaa/.aa
+/b/c//.aaa/.a.a /b/c/.aaa/.a.a
+/b/c//.aaa/.a.. /b/c/.aaa/.a..
+/b/c//.aaa/.a./ /b/c/.aaa/.a.
+/b/c//.aaa/.a/a /b/c/.aaa/.a/a
+/b/c//.aaa/.a/. /b/c/.aaa/.a
+/b/c//.aaa/.a// /b/c/.aaa/.a
+/b/c//.aaa/..aa /b/c/.aaa/..aa
+/b/c//.aaa/..a. /b/c/.aaa/..a.
+/b/c//.aaa/..a/ /b/c/.aaa/..a
+/b/c//.aaa/...a /b/c/.aaa/...a
+/b/c//.aaa/.... /b/c/.aaa/....
+/b/c//.aaa/.../ /b/c/.aaa/...
+/b/c//.aaa/../a /b/c/a
+/b/c//.aaa/../. /b/c
+/b/c//.aaa/..// /b/c
+/b/c//.aaa/./aa /b/c/.aaa/aa
+/b/c//.aaa/./a. /b/c/.aaa/a.
+/b/c//.aaa/./a/ /b/c/.aaa/a
+/b/c//.aaa/./.a /b/c/.aaa/.a
+/b/c//.aaa/./.. /b/c
+/b/c//.aaa/././ /b/c/.aaa
+/b/c//.aaa/.//a /b/c/.aaa/a
+/b/c//.aaa/.//. /b/c/.aaa
+/b/c//.aaa/./// /b/c/.aaa
+/b/c//.aaa//aaa /b/c/.aaa/aaa
+/b/c//.aaa//aa. /b/c/.aaa/aa.
+/b/c//.aaa//aa/ /b/c/.aaa/aa
+/b/c//.aaa//a.a /b/c/.aaa/a.a
+/b/c//.aaa//a.. /b/c/.aaa/a..
+/b/c//.aaa//a./ /b/c/.aaa/a.
+/b/c//.aaa//a/a /b/c/.aaa/a/a
+/b/c//.aaa//a/. /b/c/.aaa/a
+/b/c//.aaa//a// /b/c/.aaa/a
+/b/c//.aaa//.aa /b/c/.aaa/.aa
+/b/c//.aaa//.a. /b/c/.aaa/.a.
+/b/c//.aaa//.a/ /b/c/.aaa/.a
+/b/c//.aaa//..a /b/c/.aaa/..a
+/b/c//.aaa//... /b/c/.aaa/...
+/b/c//.aaa//../ /b/c
+/b/c//.aaa//./a /b/c/.aaa/a
+/b/c//.aaa//./. /b/c/.aaa
+/b/c//.aaa//.// /b/c/.aaa
+/b/c//.aaa///aa /b/c/.aaa/aa
+/b/c//.aaa///a. /b/c/.aaa/a.
+/b/c//.aaa///a/ /b/c/.aaa/a
+/b/c//.aaa///.a /b/c/.aaa/.a
+/b/c//.aaa///.. /b/c
+/b/c//.aaa///./ /b/c/.aaa
+/b/c//.aaa////a /b/c/.aaa/a
+/b/c//.aaa////. /b/c/.aaa
+/b/c//.aaa///// /b/c/.aaa
+/b/c//.aa.aaaaa /b/c/.aa.aaaaa
+/b/c//.aa.aaaa. /b/c/.aa.aaaa.
+/b/c//.aa.aaaa/ /b/c/.aa.aaaa
+/b/c//.aa.aaa.a /b/c/.aa.aaa.a
+/b/c//.aa.aaa.. /b/c/.aa.aaa..
+/b/c//.aa.aaa./ /b/c/.aa.aaa.
+/b/c//.aa.aaa/a /b/c/.aa.aaa/a
+/b/c//.aa.aaa/. /b/c/.aa.aaa
+/b/c//.aa.aaa// /b/c/.aa.aaa
+/b/c//.aa.aa.aa /b/c/.aa.aa.aa
+/b/c//.aa.aa.a. /b/c/.aa.aa.a.
+/b/c//.aa.aa.a/ /b/c/.aa.aa.a
+/b/c//.aa.aa..a /b/c/.aa.aa..a
+/b/c//.aa.aa... /b/c/.aa.aa...
+/b/c//.aa.aa../ /b/c/.aa.aa..
+/b/c//.aa.aa./a /b/c/.aa.aa./a
+/b/c//.aa.aa./. /b/c/.aa.aa.
+/b/c//.aa.aa.// /b/c/.aa.aa.
+/b/c//.aa.aa/aa /b/c/.aa.aa/aa
+/b/c//.aa.aa/a. /b/c/.aa.aa/a.
+/b/c//.aa.aa/a/ /b/c/.aa.aa/a
+/b/c//.aa.aa/.a /b/c/.aa.aa/.a
+/b/c//.aa.aa/.. /b/c
+/b/c//.aa.aa/./ /b/c/.aa.aa
+/b/c//.aa.aa//a /b/c/.aa.aa/a
+/b/c//.aa.aa//. /b/c/.aa.aa
+/b/c//.aa.aa/// /b/c/.aa.aa
+/b/c//.aa.a.aaa /b/c/.aa.a.aaa
+/b/c//.aa.a.aa. /b/c/.aa.a.aa.
+/b/c//.aa.a.aa/ /b/c/.aa.a.aa
+/b/c//.aa.a.a.a /b/c/.aa.a.a.a
+/b/c//.aa.a.a.. /b/c/.aa.a.a..
+/b/c//.aa.a.a./ /b/c/.aa.a.a.
+/b/c//.aa.a.a/a /b/c/.aa.a.a/a
+/b/c//.aa.a.a/. /b/c/.aa.a.a
+/b/c//.aa.a.a// /b/c/.aa.a.a
+/b/c//.aa.a..aa /b/c/.aa.a..aa
+/b/c//.aa.a..a. /b/c/.aa.a..a.
+/b/c//.aa.a..a/ /b/c/.aa.a..a
+/b/c//.aa.a...a /b/c/.aa.a...a
+/b/c//.aa.a.... /b/c/.aa.a....
+/b/c//.aa.a.../ /b/c/.aa.a...
+/b/c//.aa.a../a /b/c/.aa.a../a
+/b/c//.aa.a../. /b/c/.aa.a..
+/b/c//.aa.a..// /b/c/.aa.a..
+/b/c//.aa.a./aa /b/c/.aa.a./aa
+/b/c//.aa.a./a. /b/c/.aa.a./a.
+/b/c//.aa.a./a/ /b/c/.aa.a./a
+/b/c//.aa.a./.a /b/c/.aa.a./.a
+/b/c//.aa.a./.. /b/c
+/b/c//.aa.a././ /b/c/.aa.a.
+/b/c//.aa.a.//a /b/c/.aa.a./a
+/b/c//.aa.a.//. /b/c/.aa.a.
+/b/c//.aa.a./// /b/c/.aa.a.
+/b/c//.aa.a/aaa /b/c/.aa.a/aaa
+/b/c//.aa.a/aa. /b/c/.aa.a/aa.
+/b/c//.aa.a/aa/ /b/c/.aa.a/aa
+/b/c//.aa.a/a.a /b/c/.aa.a/a.a
+/b/c//.aa.a/a.. /b/c/.aa.a/a..
+/b/c//.aa.a/a./ /b/c/.aa.a/a.
+/b/c//.aa.a/a/a /b/c/.aa.a/a/a
+/b/c//.aa.a/a/. /b/c/.aa.a/a
+/b/c//.aa.a/a// /b/c/.aa.a/a
+/b/c//.aa.a/.aa /b/c/.aa.a/.aa
+/b/c//.aa.a/.a. /b/c/.aa.a/.a.
+/b/c//.aa.a/.a/ /b/c/.aa.a/.a
+/b/c//.aa.a/..a /b/c/.aa.a/..a
+/b/c//.aa.a/... /b/c/.aa.a/...
+/b/c//.aa.a/../ /b/c
+/b/c//.aa.a/./a /b/c/.aa.a/a
+/b/c//.aa.a/./. /b/c/.aa.a
+/b/c//.aa.a/.// /b/c/.aa.a
+/b/c//.aa.a//aa /b/c/.aa.a/aa
+/b/c//.aa.a//a. /b/c/.aa.a/a.
+/b/c//.aa.a//a/ /b/c/.aa.a/a
+/b/c//.aa.a//.a /b/c/.aa.a/.a
+/b/c//.aa.a//.. /b/c
+/b/c//.aa.a//./ /b/c/.aa.a
+/b/c//.aa.a///a /b/c/.aa.a/a
+/b/c//.aa.a///. /b/c/.aa.a
+/b/c//.aa.a//// /b/c/.aa.a
+/b/c//.aa..aaaa /b/c/.aa..aaaa
+/b/c//.aa..aaa. /b/c/.aa..aaa.
+/b/c//.aa..aaa/ /b/c/.aa..aaa
+/b/c//.aa..aa.a /b/c/.aa..aa.a
+/b/c//.aa..aa.. /b/c/.aa..aa..
+/b/c//.aa..aa./ /b/c/.aa..aa.
+/b/c//.aa..aa/a /b/c/.aa..aa/a
+/b/c//.aa..aa/. /b/c/.aa..aa
+/b/c//.aa..aa// /b/c/.aa..aa
+/b/c//.aa..a.aa /b/c/.aa..a.aa
+/b/c//.aa..a.a. /b/c/.aa..a.a.
+/b/c//.aa..a.a/ /b/c/.aa..a.a
+/b/c//.aa..a..a /b/c/.aa..a..a
+/b/c//.aa..a... /b/c/.aa..a...
+/b/c//.aa..a../ /b/c/.aa..a..
+/b/c//.aa..a./a /b/c/.aa..a./a
+/b/c//.aa..a./. /b/c/.aa..a.
+/b/c//.aa..a.// /b/c/.aa..a.
+/b/c//.aa..a/aa /b/c/.aa..a/aa
+/b/c//.aa..a/a. /b/c/.aa..a/a.
+/b/c//.aa..a/a/ /b/c/.aa..a/a
+/b/c//.aa..a/.a /b/c/.aa..a/.a
+/b/c//.aa..a/.. /b/c
+/b/c//.aa..a/./ /b/c/.aa..a
+/b/c//.aa..a//a /b/c/.aa..a/a
+/b/c//.aa..a//. /b/c/.aa..a
+/b/c//.aa..a/// /b/c/.aa..a
+/b/c//.aa...aaa /b/c/.aa...aaa
+/b/c//.aa...aa. /b/c/.aa...aa.
+/b/c//.aa...aa/ /b/c/.aa...aa
+/b/c//.aa...a.a /b/c/.aa...a.a
+/b/c//.aa...a.. /b/c/.aa...a..
+/b/c//.aa...a./ /b/c/.aa...a.
+/b/c//.aa...a/a /b/c/.aa...a/a
+/b/c//.aa...a/. /b/c/.aa...a
+/b/c//.aa...a// /b/c/.aa...a
+/b/c//.aa....aa /b/c/.aa....aa
+/b/c//.aa....a. /b/c/.aa....a.
+/b/c//.aa....a/ /b/c/.aa....a
+/b/c//.aa.....a /b/c/.aa.....a
+/b/c//.aa...... /b/c/.aa......
+/b/c//.aa...../ /b/c/.aa.....
+/b/c//.aa..../a /b/c/.aa..../a
+/b/c//.aa..../. /b/c/.aa....
+/b/c//.aa....// /b/c/.aa....
+/b/c//.aa.../aa /b/c/.aa.../aa
+/b/c//.aa.../a. /b/c/.aa.../a.
+/b/c//.aa.../a/ /b/c/.aa.../a
+/b/c//.aa.../.a /b/c/.aa.../.a
+/b/c//.aa.../.. /b/c
+/b/c//.aa..././ /b/c/.aa...
+/b/c//.aa...//a /b/c/.aa.../a
+/b/c//.aa...//. /b/c/.aa...
+/b/c//.aa.../// /b/c/.aa...
+/b/c//.aa../aaa /b/c/.aa../aaa
+/b/c//.aa../aa. /b/c/.aa../aa.
+/b/c//.aa../aa/ /b/c/.aa../aa
+/b/c//.aa../a.a /b/c/.aa../a.a
+/b/c//.aa../a.. /b/c/.aa../a..
+/b/c//.aa../a./ /b/c/.aa../a.
+/b/c//.aa../a/a /b/c/.aa../a/a
+/b/c//.aa../a/. /b/c/.aa../a
+/b/c//.aa../a// /b/c/.aa../a
+/b/c//.aa../.aa /b/c/.aa../.aa
+/b/c//.aa../.a. /b/c/.aa../.a.
+/b/c//.aa../.a/ /b/c/.aa../.a
+/b/c//.aa../..a /b/c/.aa../..a
+/b/c//.aa../... /b/c/.aa../...
+/b/c//.aa../../ /b/c
+/b/c//.aa.././a /b/c/.aa../a
+/b/c//.aa.././. /b/c/.aa..
+/b/c//.aa../.// /b/c/.aa..
+/b/c//.aa..//aa /b/c/.aa../aa
+/b/c//.aa..//a. /b/c/.aa../a.
+/b/c//.aa..//a/ /b/c/.aa../a
+/b/c//.aa..//.a /b/c/.aa../.a
+/b/c//.aa..//.. /b/c
+/b/c//.aa..//./ /b/c/.aa..
+/b/c//.aa..///a /b/c/.aa../a
+/b/c//.aa..///. /b/c/.aa..
+/b/c//.aa..//// /b/c/.aa..
+/b/c//.aa./aaaa /b/c/.aa./aaaa
+/b/c//.aa./aaa. /b/c/.aa./aaa.
+/b/c//.aa./aaa/ /b/c/.aa./aaa
+/b/c//.aa./aa.a /b/c/.aa./aa.a
+/b/c//.aa./aa.. /b/c/.aa./aa..
+/b/c//.aa./aa./ /b/c/.aa./aa.
+/b/c//.aa./aa/a /b/c/.aa./aa/a
+/b/c//.aa./aa/. /b/c/.aa./aa
+/b/c//.aa./aa// /b/c/.aa./aa
+/b/c//.aa./a.aa /b/c/.aa./a.aa
+/b/c//.aa./a.a. /b/c/.aa./a.a.
+/b/c//.aa./a.a/ /b/c/.aa./a.a
+/b/c//.aa./a..a /b/c/.aa./a..a
+/b/c//.aa./a... /b/c/.aa./a...
+/b/c//.aa./a../ /b/c/.aa./a..
+/b/c//.aa./a./a /b/c/.aa./a./a
+/b/c//.aa./a./. /b/c/.aa./a.
+/b/c//.aa./a.// /b/c/.aa./a.
+/b/c//.aa./a/aa /b/c/.aa./a/aa
+/b/c//.aa./a/a. /b/c/.aa./a/a.
+/b/c//.aa./a/a/ /b/c/.aa./a/a
+/b/c//.aa./a/.a /b/c/.aa./a/.a
+/b/c//.aa./a/.. /b/c/.aa.
+/b/c//.aa./a/./ /b/c/.aa./a
+/b/c//.aa./a//a /b/c/.aa./a/a
+/b/c//.aa./a//. /b/c/.aa./a
+/b/c//.aa./a/// /b/c/.aa./a
+/b/c//.aa./.aaa /b/c/.aa./.aaa
+/b/c//.aa./.aa. /b/c/.aa./.aa.
+/b/c//.aa./.aa/ /b/c/.aa./.aa
+/b/c//.aa./.a.a /b/c/.aa./.a.a
+/b/c//.aa./.a.. /b/c/.aa./.a..
+/b/c//.aa./.a./ /b/c/.aa./.a.
+/b/c//.aa./.a/a /b/c/.aa./.a/a
+/b/c//.aa./.a/. /b/c/.aa./.a
+/b/c//.aa./.a// /b/c/.aa./.a
+/b/c//.aa./..aa /b/c/.aa./..aa
+/b/c//.aa./..a. /b/c/.aa./..a.
+/b/c//.aa./..a/ /b/c/.aa./..a
+/b/c//.aa./...a /b/c/.aa./...a
+/b/c//.aa./.... /b/c/.aa./....
+/b/c//.aa./.../ /b/c/.aa./...
+/b/c//.aa./../a /b/c/a
+/b/c//.aa./../. /b/c
+/b/c//.aa./..// /b/c
+/b/c//.aa././aa /b/c/.aa./aa
+/b/c//.aa././a. /b/c/.aa./a.
+/b/c//.aa././a/ /b/c/.aa./a
+/b/c//.aa././.a /b/c/.aa./.a
+/b/c//.aa././.. /b/c
+/b/c//.aa./././ /b/c/.aa.
+/b/c//.aa././/a /b/c/.aa./a
+/b/c//.aa././/. /b/c/.aa.
+/b/c//.aa././// /b/c/.aa.
+/b/c//.aa.//aaa /b/c/.aa./aaa
+/b/c//.aa.//aa. /b/c/.aa./aa.
+/b/c//.aa.//aa/ /b/c/.aa./aa
+/b/c//.aa.//a.a /b/c/.aa./a.a
+/b/c//.aa.//a.. /b/c/.aa./a..
+/b/c//.aa.//a./ /b/c/.aa./a.
+/b/c//.aa.//a/a /b/c/.aa./a/a
+/b/c//.aa.//a/. /b/c/.aa./a
+/b/c//.aa.//a// /b/c/.aa./a
+/b/c//.aa.//.aa /b/c/.aa./.aa
+/b/c//.aa.//.a. /b/c/.aa./.a.
+/b/c//.aa.//.a/ /b/c/.aa./.a
+/b/c//.aa.//..a /b/c/.aa./..a
+/b/c//.aa.//... /b/c/.aa./...
+/b/c//.aa.//../ /b/c
+/b/c//.aa.//./a /b/c/.aa./a
+/b/c//.aa.//./. /b/c/.aa.
+/b/c//.aa.//.// /b/c/.aa.
+/b/c//.aa.///aa /b/c/.aa./aa
+/b/c//.aa.///a. /b/c/.aa./a.
+/b/c//.aa.///a/ /b/c/.aa./a
+/b/c//.aa.///.a /b/c/.aa./.a
+/b/c//.aa.///.. /b/c
+/b/c//.aa.///./ /b/c/.aa.
+/b/c//.aa.////a /b/c/.aa./a
+/b/c//.aa.////. /b/c/.aa.
+/b/c//.aa.///// /b/c/.aa.
+/b/c//.aa/aaaaa /b/c/.aa/aaaaa
+/b/c//.aa/aaaa. /b/c/.aa/aaaa.
+/b/c//.aa/aaaa/ /b/c/.aa/aaaa
+/b/c//.aa/aaa.a /b/c/.aa/aaa.a
+/b/c//.aa/aaa.. /b/c/.aa/aaa..
+/b/c//.aa/aaa./ /b/c/.aa/aaa.
+/b/c//.aa/aaa/a /b/c/.aa/aaa/a
+/b/c//.aa/aaa/. /b/c/.aa/aaa
+/b/c//.aa/aaa// /b/c/.aa/aaa
+/b/c//.aa/aa.aa /b/c/.aa/aa.aa
+/b/c//.aa/aa.a. /b/c/.aa/aa.a.
+/b/c//.aa/aa.a/ /b/c/.aa/aa.a
+/b/c//.aa/aa..a /b/c/.aa/aa..a
+/b/c//.aa/aa... /b/c/.aa/aa...
+/b/c//.aa/aa../ /b/c/.aa/aa..
+/b/c//.aa/aa./a /b/c/.aa/aa./a
+/b/c//.aa/aa./. /b/c/.aa/aa.
+/b/c//.aa/aa.// /b/c/.aa/aa.
+/b/c//.aa/aa/aa /b/c/.aa/aa/aa
+/b/c//.aa/aa/a. /b/c/.aa/aa/a.
+/b/c//.aa/aa/a/ /b/c/.aa/aa/a
+/b/c//.aa/aa/.a /b/c/.aa/aa/.a
+/b/c//.aa/aa/.. /b/c/.aa
+/b/c//.aa/aa/./ /b/c/.aa/aa
+/b/c//.aa/aa//a /b/c/.aa/aa/a
+/b/c//.aa/aa//. /b/c/.aa/aa
+/b/c//.aa/aa/// /b/c/.aa/aa
+/b/c//.aa/a.aaa /b/c/.aa/a.aaa
+/b/c//.aa/a.aa. /b/c/.aa/a.aa.
+/b/c//.aa/a.aa/ /b/c/.aa/a.aa
+/b/c//.aa/a.a.a /b/c/.aa/a.a.a
+/b/c//.aa/a.a.. /b/c/.aa/a.a..
+/b/c//.aa/a.a./ /b/c/.aa/a.a.
+/b/c//.aa/a.a/a /b/c/.aa/a.a/a
+/b/c//.aa/a.a/. /b/c/.aa/a.a
+/b/c//.aa/a.a// /b/c/.aa/a.a
+/b/c//.aa/a..aa /b/c/.aa/a..aa
+/b/c//.aa/a..a. /b/c/.aa/a..a.
+/b/c//.aa/a..a/ /b/c/.aa/a..a
+/b/c//.aa/a...a /b/c/.aa/a...a
+/b/c//.aa/a.... /b/c/.aa/a....
+/b/c//.aa/a.../ /b/c/.aa/a...
+/b/c//.aa/a../a /b/c/.aa/a../a
+/b/c//.aa/a../. /b/c/.aa/a..
+/b/c//.aa/a..// /b/c/.aa/a..
+/b/c//.aa/a./aa /b/c/.aa/a./aa
+/b/c//.aa/a./a. /b/c/.aa/a./a.
+/b/c//.aa/a./a/ /b/c/.aa/a./a
+/b/c//.aa/a./.a /b/c/.aa/a./.a
+/b/c//.aa/a./.. /b/c/.aa
+/b/c//.aa/a././ /b/c/.aa/a.
+/b/c//.aa/a.//a /b/c/.aa/a./a
+/b/c//.aa/a.//. /b/c/.aa/a.
+/b/c//.aa/a./// /b/c/.aa/a.
+/b/c//.aa/a/aaa /b/c/.aa/a/aaa
+/b/c//.aa/a/aa. /b/c/.aa/a/aa.
+/b/c//.aa/a/aa/ /b/c/.aa/a/aa
+/b/c//.aa/a/a.a /b/c/.aa/a/a.a
+/b/c//.aa/a/a.. /b/c/.aa/a/a..
+/b/c//.aa/a/a./ /b/c/.aa/a/a.
+/b/c//.aa/a/a/a /b/c/.aa/a/a/a
+/b/c//.aa/a/a/. /b/c/.aa/a/a
+/b/c//.aa/a/a// /b/c/.aa/a/a
+/b/c//.aa/a/.aa /b/c/.aa/a/.aa
+/b/c//.aa/a/.a. /b/c/.aa/a/.a.
+/b/c//.aa/a/.a/ /b/c/.aa/a/.a
+/b/c//.aa/a/..a /b/c/.aa/a/..a
+/b/c//.aa/a/... /b/c/.aa/a/...
+/b/c//.aa/a/../ /b/c/.aa
+/b/c//.aa/a/./a /b/c/.aa/a/a
+/b/c//.aa/a/./. /b/c/.aa/a
+/b/c//.aa/a/.// /b/c/.aa/a
+/b/c//.aa/a//aa /b/c/.aa/a/aa
+/b/c//.aa/a//a. /b/c/.aa/a/a.
+/b/c//.aa/a//a/ /b/c/.aa/a/a
+/b/c//.aa/a//.a /b/c/.aa/a/.a
+/b/c//.aa/a//.. /b/c/.aa
+/b/c//.aa/a//./ /b/c/.aa/a
+/b/c//.aa/a///a /b/c/.aa/a/a
+/b/c//.aa/a///. /b/c/.aa/a
+/b/c//.aa/a//// /b/c/.aa/a
+/b/c//.aa/.aaaa /b/c/.aa/.aaaa
+/b/c//.aa/.aaa. /b/c/.aa/.aaa.
+/b/c//.aa/.aaa/ /b/c/.aa/.aaa
+/b/c//.aa/.aa.a /b/c/.aa/.aa.a
+/b/c//.aa/.aa.. /b/c/.aa/.aa..
+/b/c//.aa/.aa./ /b/c/.aa/.aa.
+/b/c//.aa/.aa/a /b/c/.aa/.aa/a
+/b/c//.aa/.aa/. /b/c/.aa/.aa
+/b/c//.aa/.aa// /b/c/.aa/.aa
+/b/c//.aa/.a.aa /b/c/.aa/.a.aa
+/b/c//.aa/.a.a. /b/c/.aa/.a.a.
+/b/c//.aa/.a.a/ /b/c/.aa/.a.a
+/b/c//.aa/.a..a /b/c/.aa/.a..a
+/b/c//.aa/.a... /b/c/.aa/.a...
+/b/c//.aa/.a../ /b/c/.aa/.a..
+/b/c//.aa/.a./a /b/c/.aa/.a./a
+/b/c//.aa/.a./. /b/c/.aa/.a.
+/b/c//.aa/.a.// /b/c/.aa/.a.
+/b/c//.aa/.a/aa /b/c/.aa/.a/aa
+/b/c//.aa/.a/a. /b/c/.aa/.a/a.
+/b/c//.aa/.a/a/ /b/c/.aa/.a/a
+/b/c//.aa/.a/.a /b/c/.aa/.a/.a
+/b/c//.aa/.a/.. /b/c/.aa
+/b/c//.aa/.a/./ /b/c/.aa/.a
+/b/c//.aa/.a//a /b/c/.aa/.a/a
+/b/c//.aa/.a//. /b/c/.aa/.a
+/b/c//.aa/.a/// /b/c/.aa/.a
+/b/c//.aa/..aaa /b/c/.aa/..aaa
+/b/c//.aa/..aa. /b/c/.aa/..aa.
+/b/c//.aa/..aa/ /b/c/.aa/..aa
+/b/c//.aa/..a.a /b/c/.aa/..a.a
+/b/c//.aa/..a.. /b/c/.aa/..a..
+/b/c//.aa/..a./ /b/c/.aa/..a.
+/b/c//.aa/..a/a /b/c/.aa/..a/a
+/b/c//.aa/..a/. /b/c/.aa/..a
+/b/c//.aa/..a// /b/c/.aa/..a
+/b/c//.aa/...aa /b/c/.aa/...aa
+/b/c//.aa/...a. /b/c/.aa/...a.
+/b/c//.aa/...a/ /b/c/.aa/...a
+/b/c//.aa/....a /b/c/.aa/....a
+/b/c//.aa/..... /b/c/.aa/.....
+/b/c//.aa/..../ /b/c/.aa/....
+/b/c//.aa/.../a /b/c/.aa/.../a
+/b/c//.aa/.../. /b/c/.aa/...
+/b/c//.aa/...// /b/c/.aa/...
+/b/c//.aa/../aa /b/c/aa
+/b/c//.aa/../a. /b/c/a.
+/b/c//.aa/../a/ /b/c/a
+/b/c//.aa/../.a /b/c/.a
+/b/c//.aa/../.. /b
+/b/c//.aa/.././ /b/c
+/b/c//.aa/..//a /b/c/a
+/b/c//.aa/..//. /b/c
+/b/c//.aa/../// /b/c
+/b/c//.aa/./aaa /b/c/.aa/aaa
+/b/c//.aa/./aa. /b/c/.aa/aa.
+/b/c//.aa/./aa/ /b/c/.aa/aa
+/b/c//.aa/./a.a /b/c/.aa/a.a
+/b/c//.aa/./a.. /b/c/.aa/a..
+/b/c//.aa/./a./ /b/c/.aa/a.
+/b/c//.aa/./a/a /b/c/.aa/a/a
+/b/c//.aa/./a/. /b/c/.aa/a
+/b/c//.aa/./a// /b/c/.aa/a
+/b/c//.aa/./.aa /b/c/.aa/.aa
+/b/c//.aa/./.a. /b/c/.aa/.a.
+/b/c//.aa/./.a/ /b/c/.aa/.a
+/b/c//.aa/./..a /b/c/.aa/..a
+/b/c//.aa/./... /b/c/.aa/...
+/b/c//.aa/./../ /b/c
+/b/c//.aa/././a /b/c/.aa/a
+/b/c//.aa/././. /b/c/.aa
+/b/c//.aa/./.// /b/c/.aa
+/b/c//.aa/.//aa /b/c/.aa/aa
+/b/c//.aa/.//a. /b/c/.aa/a.
+/b/c//.aa/.//a/ /b/c/.aa/a
+/b/c//.aa/.//.a /b/c/.aa/.a
+/b/c//.aa/.//.. /b/c
+/b/c//.aa/.//./ /b/c/.aa
+/b/c//.aa/.///a /b/c/.aa/a
+/b/c//.aa/.///. /b/c/.aa
+/b/c//.aa/.//// /b/c/.aa
+/b/c//.aa//aaaa /b/c/.aa/aaaa
+/b/c//.aa//aaa. /b/c/.aa/aaa.
+/b/c//.aa//aaa/ /b/c/.aa/aaa
+/b/c//.aa//aa.a /b/c/.aa/aa.a
+/b/c//.aa//aa.. /b/c/.aa/aa..
+/b/c//.aa//aa./ /b/c/.aa/aa.
+/b/c//.aa//aa/a /b/c/.aa/aa/a
+/b/c//.aa//aa/. /b/c/.aa/aa
+/b/c//.aa//aa// /b/c/.aa/aa
+/b/c//.aa//a.aa /b/c/.aa/a.aa
+/b/c//.aa//a.a. /b/c/.aa/a.a.
+/b/c//.aa//a.a/ /b/c/.aa/a.a
+/b/c//.aa//a..a /b/c/.aa/a..a
+/b/c//.aa//a... /b/c/.aa/a...
+/b/c//.aa//a../ /b/c/.aa/a..
+/b/c//.aa//a./a /b/c/.aa/a./a
+/b/c//.aa//a./. /b/c/.aa/a.
+/b/c//.aa//a.// /b/c/.aa/a.
+/b/c//.aa//a/aa /b/c/.aa/a/aa
+/b/c//.aa//a/a. /b/c/.aa/a/a.
+/b/c//.aa//a/a/ /b/c/.aa/a/a
+/b/c//.aa//a/.a /b/c/.aa/a/.a
+/b/c//.aa//a/.. /b/c/.aa
+/b/c//.aa//a/./ /b/c/.aa/a
+/b/c//.aa//a//a /b/c/.aa/a/a
+/b/c//.aa//a//. /b/c/.aa/a
+/b/c//.aa//a/// /b/c/.aa/a
+/b/c//.aa//.aaa /b/c/.aa/.aaa
+/b/c//.aa//.aa. /b/c/.aa/.aa.
+/b/c//.aa//.aa/ /b/c/.aa/.aa
+/b/c//.aa//.a.a /b/c/.aa/.a.a
+/b/c//.aa//.a.. /b/c/.aa/.a..
+/b/c//.aa//.a./ /b/c/.aa/.a.
+/b/c//.aa//.a/a /b/c/.aa/.a/a
+/b/c//.aa//.a/. /b/c/.aa/.a
+/b/c//.aa//.a// /b/c/.aa/.a
+/b/c//.aa//..aa /b/c/.aa/..aa
+/b/c//.aa//..a. /b/c/.aa/..a.
+/b/c//.aa//..a/ /b/c/.aa/..a
+/b/c//.aa//...a /b/c/.aa/...a
+/b/c//.aa//.... /b/c/.aa/....
+/b/c//.aa//.../ /b/c/.aa/...
+/b/c//.aa//../a /b/c/a
+/b/c//.aa//../. /b/c
+/b/c//.aa//..// /b/c
+/b/c//.aa//./aa /b/c/.aa/aa
+/b/c//.aa//./a. /b/c/.aa/a.
+/b/c//.aa//./a/ /b/c/.aa/a
+/b/c//.aa//./.a /b/c/.aa/.a
+/b/c//.aa//./.. /b/c
+/b/c//.aa//././ /b/c/.aa
+/b/c//.aa//.//a /b/c/.aa/a
+/b/c//.aa//.//. /b/c/.aa
+/b/c//.aa//./// /b/c/.aa
+/b/c//.aa///aaa /b/c/.aa/aaa
+/b/c//.aa///aa. /b/c/.aa/aa.
+/b/c//.aa///aa/ /b/c/.aa/aa
+/b/c//.aa///a.a /b/c/.aa/a.a
+/b/c//.aa///a.. /b/c/.aa/a..
+/b/c//.aa///a./ /b/c/.aa/a.
+/b/c//.aa///a/a /b/c/.aa/a/a
+/b/c//.aa///a/. /b/c/.aa/a
+/b/c//.aa///a// /b/c/.aa/a
+/b/c//.aa///.aa /b/c/.aa/.aa
+/b/c//.aa///.a. /b/c/.aa/.a.
+/b/c//.aa///.a/ /b/c/.aa/.a
+/b/c//.aa///..a /b/c/.aa/..a
+/b/c//.aa///... /b/c/.aa/...
+/b/c//.aa///../ /b/c
+/b/c//.aa///./a /b/c/.aa/a
+/b/c//.aa///./. /b/c/.aa
+/b/c//.aa///.// /b/c/.aa
+/b/c//.aa////aa /b/c/.aa/aa
+/b/c//.aa////a. /b/c/.aa/a.
+/b/c//.aa////a/ /b/c/.aa/a
+/b/c//.aa////.a /b/c/.aa/.a
+/b/c//.aa////.. /b/c
+/b/c//.aa////./ /b/c/.aa
+/b/c//.aa/////a /b/c/.aa/a
+/b/c//.aa/////. /b/c/.aa
+/b/c//.aa////// /b/c/.aa
+/b/c//.a.aaaaaa /b/c/.a.aaaaaa
+/b/c//.a.aaaaa. /b/c/.a.aaaaa.
+/b/c//.a.aaaaa/ /b/c/.a.aaaaa
+/b/c//.a.aaaa.a /b/c/.a.aaaa.a
+/b/c//.a.aaaa.. /b/c/.a.aaaa..
+/b/c//.a.aaaa./ /b/c/.a.aaaa.
+/b/c//.a.aaaa/a /b/c/.a.aaaa/a
+/b/c//.a.aaaa/. /b/c/.a.aaaa
+/b/c//.a.aaaa// /b/c/.a.aaaa
+/b/c//.a.aaa.aa /b/c/.a.aaa.aa
+/b/c//.a.aaa.a. /b/c/.a.aaa.a.
+/b/c//.a.aaa.a/ /b/c/.a.aaa.a
+/b/c//.a.aaa..a /b/c/.a.aaa..a
+/b/c//.a.aaa... /b/c/.a.aaa...
+/b/c//.a.aaa../ /b/c/.a.aaa..
+/b/c//.a.aaa./a /b/c/.a.aaa./a
+/b/c//.a.aaa./. /b/c/.a.aaa.
+/b/c//.a.aaa.// /b/c/.a.aaa.
+/b/c//.a.aaa/aa /b/c/.a.aaa/aa
+/b/c//.a.aaa/a. /b/c/.a.aaa/a.
+/b/c//.a.aaa/a/ /b/c/.a.aaa/a
+/b/c//.a.aaa/.a /b/c/.a.aaa/.a
+/b/c//.a.aaa/.. /b/c
+/b/c//.a.aaa/./ /b/c/.a.aaa
+/b/c//.a.aaa//a /b/c/.a.aaa/a
+/b/c//.a.aaa//. /b/c/.a.aaa
+/b/c//.a.aaa/// /b/c/.a.aaa
+/b/c//.a.aa.aaa /b/c/.a.aa.aaa
+/b/c//.a.aa.aa. /b/c/.a.aa.aa.
+/b/c//.a.aa.aa/ /b/c/.a.aa.aa
+/b/c//.a.aa.a.a /b/c/.a.aa.a.a
+/b/c//.a.aa.a.. /b/c/.a.aa.a..
+/b/c//.a.aa.a./ /b/c/.a.aa.a.
+/b/c//.a.aa.a/a /b/c/.a.aa.a/a
+/b/c//.a.aa.a/. /b/c/.a.aa.a
+/b/c//.a.aa.a// /b/c/.a.aa.a
+/b/c//.a.aa..aa /b/c/.a.aa..aa
+/b/c//.a.aa..a. /b/c/.a.aa..a.
+/b/c//.a.aa..a/ /b/c/.a.aa..a
+/b/c//.a.aa...a /b/c/.a.aa...a
+/b/c//.a.aa.... /b/c/.a.aa....
+/b/c//.a.aa.../ /b/c/.a.aa...
+/b/c//.a.aa../a /b/c/.a.aa../a
+/b/c//.a.aa../. /b/c/.a.aa..
+/b/c//.a.aa..// /b/c/.a.aa..
+/b/c//.a.aa./aa /b/c/.a.aa./aa
+/b/c//.a.aa./a. /b/c/.a.aa./a.
+/b/c//.a.aa./a/ /b/c/.a.aa./a
+/b/c//.a.aa./.a /b/c/.a.aa./.a
+/b/c//.a.aa./.. /b/c
+/b/c//.a.aa././ /b/c/.a.aa.
+/b/c//.a.aa.//a /b/c/.a.aa./a
+/b/c//.a.aa.//. /b/c/.a.aa.
+/b/c//.a.aa./// /b/c/.a.aa.
+/b/c//.a.aa/aaa /b/c/.a.aa/aaa
+/b/c//.a.aa/aa. /b/c/.a.aa/aa.
+/b/c//.a.aa/aa/ /b/c/.a.aa/aa
+/b/c//.a.aa/a.a /b/c/.a.aa/a.a
+/b/c//.a.aa/a.. /b/c/.a.aa/a..
+/b/c//.a.aa/a./ /b/c/.a.aa/a.
+/b/c//.a.aa/a/a /b/c/.a.aa/a/a
+/b/c//.a.aa/a/. /b/c/.a.aa/a
+/b/c//.a.aa/a// /b/c/.a.aa/a
+/b/c//.a.aa/.aa /b/c/.a.aa/.aa
+/b/c//.a.aa/.a. /b/c/.a.aa/.a.
+/b/c//.a.aa/.a/ /b/c/.a.aa/.a
+/b/c//.a.aa/..a /b/c/.a.aa/..a
+/b/c//.a.aa/... /b/c/.a.aa/...
+/b/c//.a.aa/../ /b/c
+/b/c//.a.aa/./a /b/c/.a.aa/a
+/b/c//.a.aa/./. /b/c/.a.aa
+/b/c//.a.aa/.// /b/c/.a.aa
+/b/c//.a.aa//aa /b/c/.a.aa/aa
+/b/c//.a.aa//a. /b/c/.a.aa/a.
+/b/c//.a.aa//a/ /b/c/.a.aa/a
+/b/c//.a.aa//.a /b/c/.a.aa/.a
+/b/c//.a.aa//.. /b/c
+/b/c//.a.aa//./ /b/c/.a.aa
+/b/c//.a.aa///a /b/c/.a.aa/a
+/b/c//.a.aa///. /b/c/.a.aa
+/b/c//.a.aa//// /b/c/.a.aa
+/b/c//.a.a.aaaa /b/c/.a.a.aaaa
+/b/c//.a.a.aaa. /b/c/.a.a.aaa.
+/b/c//.a.a.aaa/ /b/c/.a.a.aaa
+/b/c//.a.a.aa.a /b/c/.a.a.aa.a
+/b/c//.a.a.aa.. /b/c/.a.a.aa..
+/b/c//.a.a.aa./ /b/c/.a.a.aa.
+/b/c//.a.a.aa/a /b/c/.a.a.aa/a
+/b/c//.a.a.aa/. /b/c/.a.a.aa
+/b/c//.a.a.aa// /b/c/.a.a.aa
+/b/c//.a.a.a.aa /b/c/.a.a.a.aa
+/b/c//.a.a.a.a. /b/c/.a.a.a.a.
+/b/c//.a.a.a.a/ /b/c/.a.a.a.a
+/b/c//.a.a.a..a /b/c/.a.a.a..a
+/b/c//.a.a.a... /b/c/.a.a.a...
+/b/c//.a.a.a../ /b/c/.a.a.a..
+/b/c//.a.a.a./a /b/c/.a.a.a./a
+/b/c//.a.a.a./. /b/c/.a.a.a.
+/b/c//.a.a.a.// /b/c/.a.a.a.
+/b/c//.a.a.a/aa /b/c/.a.a.a/aa
+/b/c//.a.a.a/a. /b/c/.a.a.a/a.
+/b/c//.a.a.a/a/ /b/c/.a.a.a/a
+/b/c//.a.a.a/.a /b/c/.a.a.a/.a
+/b/c//.a.a.a/.. /b/c
+/b/c//.a.a.a/./ /b/c/.a.a.a
+/b/c//.a.a.a//a /b/c/.a.a.a/a
+/b/c//.a.a.a//. /b/c/.a.a.a
+/b/c//.a.a.a/// /b/c/.a.a.a
+/b/c//.a.a..aaa /b/c/.a.a..aaa
+/b/c//.a.a..aa. /b/c/.a.a..aa.
+/b/c//.a.a..aa/ /b/c/.a.a..aa
+/b/c//.a.a..a.a /b/c/.a.a..a.a
+/b/c//.a.a..a.. /b/c/.a.a..a..
+/b/c//.a.a..a./ /b/c/.a.a..a.
+/b/c//.a.a..a/a /b/c/.a.a..a/a
+/b/c//.a.a..a/. /b/c/.a.a..a
+/b/c//.a.a..a// /b/c/.a.a..a
+/b/c//.a.a...aa /b/c/.a.a...aa
+/b/c//.a.a...a. /b/c/.a.a...a.
+/b/c//.a.a...a/ /b/c/.a.a...a
+/b/c//.a.a....a /b/c/.a.a....a
+/b/c//.a.a..... /b/c/.a.a.....
+/b/c//.a.a..../ /b/c/.a.a....
+/b/c//.a.a.../a /b/c/.a.a.../a
+/b/c//.a.a.../. /b/c/.a.a...
+/b/c//.a.a...// /b/c/.a.a...
+/b/c//.a.a../aa /b/c/.a.a../aa
+/b/c//.a.a../a. /b/c/.a.a../a.
+/b/c//.a.a../a/ /b/c/.a.a../a
+/b/c//.a.a../.a /b/c/.a.a../.a
+/b/c//.a.a../.. /b/c
+/b/c//.a.a.././ /b/c/.a.a..
+/b/c//.a.a..//a /b/c/.a.a../a
+/b/c//.a.a..//. /b/c/.a.a..
+/b/c//.a.a../// /b/c/.a.a..
+/b/c//.a.a./aaa /b/c/.a.a./aaa
+/b/c//.a.a./aa. /b/c/.a.a./aa.
+/b/c//.a.a./aa/ /b/c/.a.a./aa
+/b/c//.a.a./a.a /b/c/.a.a./a.a
+/b/c//.a.a./a.. /b/c/.a.a./a..
+/b/c//.a.a./a./ /b/c/.a.a./a.
+/b/c//.a.a./a/a /b/c/.a.a./a/a
+/b/c//.a.a./a/. /b/c/.a.a./a
+/b/c//.a.a./a// /b/c/.a.a./a
+/b/c//.a.a./.aa /b/c/.a.a./.aa
+/b/c//.a.a./.a. /b/c/.a.a./.a.
+/b/c//.a.a./.a/ /b/c/.a.a./.a
+/b/c//.a.a./..a /b/c/.a.a./..a
+/b/c//.a.a./... /b/c/.a.a./...
+/b/c//.a.a./../ /b/c
+/b/c//.a.a././a /b/c/.a.a./a
+/b/c//.a.a././. /b/c/.a.a.
+/b/c//.a.a./.// /b/c/.a.a.
+/b/c//.a.a.//aa /b/c/.a.a./aa
+/b/c//.a.a.//a. /b/c/.a.a./a.
+/b/c//.a.a.//a/ /b/c/.a.a./a
+/b/c//.a.a.//.a /b/c/.a.a./.a
+/b/c//.a.a.//.. /b/c
+/b/c//.a.a.//./ /b/c/.a.a.
+/b/c//.a.a.///a /b/c/.a.a./a
+/b/c//.a.a.///. /b/c/.a.a.
+/b/c//.a.a.//// /b/c/.a.a.
+/b/c//.a.a/aaaa /b/c/.a.a/aaaa
+/b/c//.a.a/aaa. /b/c/.a.a/aaa.
+/b/c//.a.a/aaa/ /b/c/.a.a/aaa
+/b/c//.a.a/aa.a /b/c/.a.a/aa.a
+/b/c//.a.a/aa.. /b/c/.a.a/aa..
+/b/c//.a.a/aa./ /b/c/.a.a/aa.
+/b/c//.a.a/aa/a /b/c/.a.a/aa/a
+/b/c//.a.a/aa/. /b/c/.a.a/aa
+/b/c//.a.a/aa// /b/c/.a.a/aa
+/b/c//.a.a/a.aa /b/c/.a.a/a.aa
+/b/c//.a.a/a.a. /b/c/.a.a/a.a.
+/b/c//.a.a/a.a/ /b/c/.a.a/a.a
+/b/c//.a.a/a..a /b/c/.a.a/a..a
+/b/c//.a.a/a... /b/c/.a.a/a...
+/b/c//.a.a/a../ /b/c/.a.a/a..
+/b/c//.a.a/a./a /b/c/.a.a/a./a
+/b/c//.a.a/a./. /b/c/.a.a/a.
+/b/c//.a.a/a.// /b/c/.a.a/a.
+/b/c//.a.a/a/aa /b/c/.a.a/a/aa
+/b/c//.a.a/a/a. /b/c/.a.a/a/a.
+/b/c//.a.a/a/a/ /b/c/.a.a/a/a
+/b/c//.a.a/a/.a /b/c/.a.a/a/.a
+/b/c//.a.a/a/.. /b/c/.a.a
+/b/c//.a.a/a/./ /b/c/.a.a/a
+/b/c//.a.a/a//a /b/c/.a.a/a/a
+/b/c//.a.a/a//. /b/c/.a.a/a
+/b/c//.a.a/a/// /b/c/.a.a/a
+/b/c//.a.a/.aaa /b/c/.a.a/.aaa
+/b/c//.a.a/.aa. /b/c/.a.a/.aa.
+/b/c//.a.a/.aa/ /b/c/.a.a/.aa
+/b/c//.a.a/.a.a /b/c/.a.a/.a.a
+/b/c//.a.a/.a.. /b/c/.a.a/.a..
+/b/c//.a.a/.a./ /b/c/.a.a/.a.
+/b/c//.a.a/.a/a /b/c/.a.a/.a/a
+/b/c//.a.a/.a/. /b/c/.a.a/.a
+/b/c//.a.a/.a// /b/c/.a.a/.a
+/b/c//.a.a/..aa /b/c/.a.a/..aa
+/b/c//.a.a/..a. /b/c/.a.a/..a.
+/b/c//.a.a/..a/ /b/c/.a.a/..a
+/b/c//.a.a/...a /b/c/.a.a/...a
+/b/c//.a.a/.... /b/c/.a.a/....
+/b/c//.a.a/.../ /b/c/.a.a/...
+/b/c//.a.a/../a /b/c/a
+/b/c//.a.a/../. /b/c
+/b/c//.a.a/..// /b/c
+/b/c//.a.a/./aa /b/c/.a.a/aa
+/b/c//.a.a/./a. /b/c/.a.a/a.
+/b/c//.a.a/./a/ /b/c/.a.a/a
+/b/c//.a.a/./.a /b/c/.a.a/.a
+/b/c//.a.a/./.. /b/c
+/b/c//.a.a/././ /b/c/.a.a
+/b/c//.a.a/.//a /b/c/.a.a/a
+/b/c//.a.a/.//. /b/c/.a.a
+/b/c//.a.a/./// /b/c/.a.a
+/b/c//.a.a//aaa /b/c/.a.a/aaa
+/b/c//.a.a//aa. /b/c/.a.a/aa.
+/b/c//.a.a//aa/ /b/c/.a.a/aa
+/b/c//.a.a//a.a /b/c/.a.a/a.a
+/b/c//.a.a//a.. /b/c/.a.a/a..
+/b/c//.a.a//a./ /b/c/.a.a/a.
+/b/c//.a.a//a/a /b/c/.a.a/a/a
+/b/c//.a.a//a/. /b/c/.a.a/a
+/b/c//.a.a//a// /b/c/.a.a/a
+/b/c//.a.a//.aa /b/c/.a.a/.aa
+/b/c//.a.a//.a. /b/c/.a.a/.a.
+/b/c//.a.a//.a/ /b/c/.a.a/.a
+/b/c//.a.a//..a /b/c/.a.a/..a
+/b/c//.a.a//... /b/c/.a.a/...
+/b/c//.a.a//../ /b/c
+/b/c//.a.a//./a /b/c/.a.a/a
+/b/c//.a.a//./. /b/c/.a.a
+/b/c//.a.a//.// /b/c/.a.a
+/b/c//.a.a///aa /b/c/.a.a/aa
+/b/c//.a.a///a. /b/c/.a.a/a.
+/b/c//.a.a///a/ /b/c/.a.a/a
+/b/c//.a.a///.a /b/c/.a.a/.a
+/b/c//.a.a///.. /b/c
+/b/c//.a.a///./ /b/c/.a.a
+/b/c//.a.a////a /b/c/.a.a/a
+/b/c//.a.a////. /b/c/.a.a
+/b/c//.a.a///// /b/c/.a.a
+/b/c//.a..aaaaa /b/c/.a..aaaaa
+/b/c//.a..aaaa. /b/c/.a..aaaa.
+/b/c//.a..aaaa/ /b/c/.a..aaaa
+/b/c//.a..aaa.a /b/c/.a..aaa.a
+/b/c//.a..aaa.. /b/c/.a..aaa..
+/b/c//.a..aaa./ /b/c/.a..aaa.
+/b/c//.a..aaa/a /b/c/.a..aaa/a
+/b/c//.a..aaa/. /b/c/.a..aaa
+/b/c//.a..aaa// /b/c/.a..aaa
+/b/c//.a..aa.aa /b/c/.a..aa.aa
+/b/c//.a..aa.a. /b/c/.a..aa.a.
+/b/c//.a..aa.a/ /b/c/.a..aa.a
+/b/c//.a..aa..a /b/c/.a..aa..a
+/b/c//.a..aa... /b/c/.a..aa...
+/b/c//.a..aa../ /b/c/.a..aa..
+/b/c//.a..aa./a /b/c/.a..aa./a
+/b/c//.a..aa./. /b/c/.a..aa.
+/b/c//.a..aa.// /b/c/.a..aa.
+/b/c//.a..aa/aa /b/c/.a..aa/aa
+/b/c//.a..aa/a. /b/c/.a..aa/a.
+/b/c//.a..aa/a/ /b/c/.a..aa/a
+/b/c//.a..aa/.a /b/c/.a..aa/.a
+/b/c//.a..aa/.. /b/c
+/b/c//.a..aa/./ /b/c/.a..aa
+/b/c//.a..aa//a /b/c/.a..aa/a
+/b/c//.a..aa//. /b/c/.a..aa
+/b/c//.a..aa/// /b/c/.a..aa
+/b/c//.a..a.aaa /b/c/.a..a.aaa
+/b/c//.a..a.aa. /b/c/.a..a.aa.
+/b/c//.a..a.aa/ /b/c/.a..a.aa
+/b/c//.a..a.a.a /b/c/.a..a.a.a
+/b/c//.a..a.a.. /b/c/.a..a.a..
+/b/c//.a..a.a./ /b/c/.a..a.a.
+/b/c//.a..a.a/a /b/c/.a..a.a/a
+/b/c//.a..a.a/. /b/c/.a..a.a
+/b/c//.a..a.a// /b/c/.a..a.a
+/b/c//.a..a..aa /b/c/.a..a..aa
+/b/c//.a..a..a. /b/c/.a..a..a.
+/b/c//.a..a..a/ /b/c/.a..a..a
+/b/c//.a..a...a /b/c/.a..a...a
+/b/c//.a..a.... /b/c/.a..a....
+/b/c//.a..a.../ /b/c/.a..a...
+/b/c//.a..a../a /b/c/.a..a../a
+/b/c//.a..a../. /b/c/.a..a..
+/b/c//.a..a..// /b/c/.a..a..
+/b/c//.a..a./aa /b/c/.a..a./aa
+/b/c//.a..a./a. /b/c/.a..a./a.
+/b/c//.a..a./a/ /b/c/.a..a./a
+/b/c//.a..a./.a /b/c/.a..a./.a
+/b/c//.a..a./.. /b/c
+/b/c//.a..a././ /b/c/.a..a.
+/b/c//.a..a.//a /b/c/.a..a./a
+/b/c//.a..a.//. /b/c/.a..a.
+/b/c//.a..a./// /b/c/.a..a.
+/b/c//.a..a/aaa /b/c/.a..a/aaa
+/b/c//.a..a/aa. /b/c/.a..a/aa.
+/b/c//.a..a/aa/ /b/c/.a..a/aa
+/b/c//.a..a/a.a /b/c/.a..a/a.a
+/b/c//.a..a/a.. /b/c/.a..a/a..
+/b/c//.a..a/a./ /b/c/.a..a/a.
+/b/c//.a..a/a/a /b/c/.a..a/a/a
+/b/c//.a..a/a/. /b/c/.a..a/a
+/b/c//.a..a/a// /b/c/.a..a/a
+/b/c//.a..a/.aa /b/c/.a..a/.aa
+/b/c//.a..a/.a. /b/c/.a..a/.a.
+/b/c//.a..a/.a/ /b/c/.a..a/.a
+/b/c//.a..a/..a /b/c/.a..a/..a
+/b/c//.a..a/... /b/c/.a..a/...
+/b/c//.a..a/../ /b/c
+/b/c//.a..a/./a /b/c/.a..a/a
+/b/c//.a..a/./. /b/c/.a..a
+/b/c//.a..a/.// /b/c/.a..a
+/b/c//.a..a//aa /b/c/.a..a/aa
+/b/c//.a..a//a. /b/c/.a..a/a.
+/b/c//.a..a//a/ /b/c/.a..a/a
+/b/c//.a..a//.a /b/c/.a..a/.a
+/b/c//.a..a//.. /b/c
+/b/c//.a..a//./ /b/c/.a..a
+/b/c//.a..a///a /b/c/.a..a/a
+/b/c//.a..a///. /b/c/.a..a
+/b/c//.a..a//// /b/c/.a..a
+/b/c//.a...aaaa /b/c/.a...aaaa
+/b/c//.a...aaa. /b/c/.a...aaa.
+/b/c//.a...aaa/ /b/c/.a...aaa
+/b/c//.a...aa.a /b/c/.a...aa.a
+/b/c//.a...aa.. /b/c/.a...aa..
+/b/c//.a...aa./ /b/c/.a...aa.
+/b/c//.a...aa/a /b/c/.a...aa/a
+/b/c//.a...aa/. /b/c/.a...aa
+/b/c//.a...aa// /b/c/.a...aa
+/b/c//.a...a.aa /b/c/.a...a.aa
+/b/c//.a...a.a. /b/c/.a...a.a.
+/b/c//.a...a.a/ /b/c/.a...a.a
+/b/c//.a...a..a /b/c/.a...a..a
+/b/c//.a...a... /b/c/.a...a...
+/b/c//.a...a../ /b/c/.a...a..
+/b/c//.a...a./a /b/c/.a...a./a
+/b/c//.a...a./. /b/c/.a...a.
+/b/c//.a...a.// /b/c/.a...a.
+/b/c//.a...a/aa /b/c/.a...a/aa
+/b/c//.a...a/a. /b/c/.a...a/a.
+/b/c//.a...a/a/ /b/c/.a...a/a
+/b/c//.a...a/.a /b/c/.a...a/.a
+/b/c//.a...a/.. /b/c
+/b/c//.a...a/./ /b/c/.a...a
+/b/c//.a...a//a /b/c/.a...a/a
+/b/c//.a...a//. /b/c/.a...a
+/b/c//.a...a/// /b/c/.a...a
+/b/c//.a....aaa /b/c/.a....aaa
+/b/c//.a....aa. /b/c/.a....aa.
+/b/c//.a....aa/ /b/c/.a....aa
+/b/c//.a....a.a /b/c/.a....a.a
+/b/c//.a....a.. /b/c/.a....a..
+/b/c//.a....a./ /b/c/.a....a.
+/b/c//.a....a/a /b/c/.a....a/a
+/b/c//.a....a/. /b/c/.a....a
+/b/c//.a....a// /b/c/.a....a
+/b/c//.a.....aa /b/c/.a.....aa
+/b/c//.a.....a. /b/c/.a.....a.
+/b/c//.a.....a/ /b/c/.a.....a
+/b/c//.a......a /b/c/.a......a
+/b/c//.a....... /b/c/.a.......
+/b/c//.a....../ /b/c/.a......
+/b/c//.a...../a /b/c/.a...../a
+/b/c//.a...../. /b/c/.a.....
+/b/c//.a.....// /b/c/.a.....
+/b/c//.a..../aa /b/c/.a..../aa
+/b/c//.a..../a. /b/c/.a..../a.
+/b/c//.a..../a/ /b/c/.a..../a
+/b/c//.a..../.a /b/c/.a..../.a
+/b/c//.a..../.. /b/c
+/b/c//.a...././ /b/c/.a....
+/b/c//.a....//a /b/c/.a..../a
+/b/c//.a....//. /b/c/.a....
+/b/c//.a..../// /b/c/.a....
+/b/c//.a.../aaa /b/c/.a.../aaa
+/b/c//.a.../aa. /b/c/.a.../aa.
+/b/c//.a.../aa/ /b/c/.a.../aa
+/b/c//.a.../a.a /b/c/.a.../a.a
+/b/c//.a.../a.. /b/c/.a.../a..
+/b/c//.a.../a./ /b/c/.a.../a.
+/b/c//.a.../a/a /b/c/.a.../a/a
+/b/c//.a.../a/. /b/c/.a.../a
+/b/c//.a.../a// /b/c/.a.../a
+/b/c//.a.../.aa /b/c/.a.../.aa
+/b/c//.a.../.a. /b/c/.a.../.a.
+/b/c//.a.../.a/ /b/c/.a.../.a
+/b/c//.a.../..a /b/c/.a.../..a
+/b/c//.a.../... /b/c/.a.../...
+/b/c//.a.../../ /b/c
+/b/c//.a..././a /b/c/.a.../a
+/b/c//.a..././. /b/c/.a...
+/b/c//.a.../.// /b/c/.a...
+/b/c//.a...//aa /b/c/.a.../aa
+/b/c//.a...//a. /b/c/.a.../a.
+/b/c//.a...//a/ /b/c/.a.../a
+/b/c//.a...//.a /b/c/.a.../.a
+/b/c//.a...//.. /b/c
+/b/c//.a...//./ /b/c/.a...
+/b/c//.a...///a /b/c/.a.../a
+/b/c//.a...///. /b/c/.a...
+/b/c//.a...//// /b/c/.a...
+/b/c//.a../aaaa /b/c/.a../aaaa
+/b/c//.a../aaa. /b/c/.a../aaa.
+/b/c//.a../aaa/ /b/c/.a../aaa
+/b/c//.a../aa.a /b/c/.a../aa.a
+/b/c//.a../aa.. /b/c/.a../aa..
+/b/c//.a../aa./ /b/c/.a../aa.
+/b/c//.a../aa/a /b/c/.a../aa/a
+/b/c//.a../aa/. /b/c/.a../aa
+/b/c//.a../aa// /b/c/.a../aa
+/b/c//.a../a.aa /b/c/.a../a.aa
+/b/c//.a../a.a. /b/c/.a../a.a.
+/b/c//.a../a.a/ /b/c/.a../a.a
+/b/c//.a../a..a /b/c/.a../a..a
+/b/c//.a../a... /b/c/.a../a...
+/b/c//.a../a../ /b/c/.a../a..
+/b/c//.a../a./a /b/c/.a../a./a
+/b/c//.a../a./. /b/c/.a../a.
+/b/c//.a../a.// /b/c/.a../a.
+/b/c//.a../a/aa /b/c/.a../a/aa
+/b/c//.a../a/a. /b/c/.a../a/a.
+/b/c//.a../a/a/ /b/c/.a../a/a
+/b/c//.a../a/.a /b/c/.a../a/.a
+/b/c//.a../a/.. /b/c/.a..
+/b/c//.a../a/./ /b/c/.a../a
+/b/c//.a../a//a /b/c/.a../a/a
+/b/c//.a../a//. /b/c/.a../a
+/b/c//.a../a/// /b/c/.a../a
+/b/c//.a../.aaa /b/c/.a../.aaa
+/b/c//.a../.aa. /b/c/.a../.aa.
+/b/c//.a../.aa/ /b/c/.a../.aa
+/b/c//.a../.a.a /b/c/.a../.a.a
+/b/c//.a../.a.. /b/c/.a../.a..
+/b/c//.a../.a./ /b/c/.a../.a.
+/b/c//.a../.a/a /b/c/.a../.a/a
+/b/c//.a../.a/. /b/c/.a../.a
+/b/c//.a../.a// /b/c/.a../.a
+/b/c//.a../..aa /b/c/.a../..aa
+/b/c//.a../..a. /b/c/.a../..a.
+/b/c//.a../..a/ /b/c/.a../..a
+/b/c//.a../...a /b/c/.a../...a
+/b/c//.a../.... /b/c/.a../....
+/b/c//.a../.../ /b/c/.a../...
+/b/c//.a../../a /b/c/a
+/b/c//.a../../. /b/c
+/b/c//.a../..// /b/c
+/b/c//.a.././aa /b/c/.a../aa
+/b/c//.a.././a. /b/c/.a../a.
+/b/c//.a.././a/ /b/c/.a../a
+/b/c//.a.././.a /b/c/.a../.a
+/b/c//.a.././.. /b/c
+/b/c//.a../././ /b/c/.a..
+/b/c//.a.././/a /b/c/.a../a
+/b/c//.a.././/. /b/c/.a..
+/b/c//.a.././// /b/c/.a..
+/b/c//.a..//aaa /b/c/.a../aaa
+/b/c//.a..//aa. /b/c/.a../aa.
+/b/c//.a..//aa/ /b/c/.a../aa
+/b/c//.a..//a.a /b/c/.a../a.a
+/b/c//.a..//a.. /b/c/.a../a..
+/b/c//.a..//a./ /b/c/.a../a.
+/b/c//.a..//a/a /b/c/.a../a/a
+/b/c//.a..//a/. /b/c/.a../a
+/b/c//.a..//a// /b/c/.a../a
+/b/c//.a..//.aa /b/c/.a../.aa
+/b/c//.a..//.a. /b/c/.a../.a.
+/b/c//.a..//.a/ /b/c/.a../.a
+/b/c//.a..//..a /b/c/.a../..a
+/b/c//.a..//... /b/c/.a../...
+/b/c//.a..//../ /b/c
+/b/c//.a..//./a /b/c/.a../a
+/b/c//.a..//./. /b/c/.a..
+/b/c//.a..//.// /b/c/.a..
+/b/c//.a..///aa /b/c/.a../aa
+/b/c//.a..///a. /b/c/.a../a.
+/b/c//.a..///a/ /b/c/.a../a
+/b/c//.a..///.a /b/c/.a../.a
+/b/c//.a..///.. /b/c
+/b/c//.a..///./ /b/c/.a..
+/b/c//.a..////a /b/c/.a../a
+/b/c//.a..////. /b/c/.a..
+/b/c//.a..///// /b/c/.a..
+/b/c//.a./aaaaa /b/c/.a./aaaaa
+/b/c//.a./aaaa. /b/c/.a./aaaa.
+/b/c//.a./aaaa/ /b/c/.a./aaaa
+/b/c//.a./aaa.a /b/c/.a./aaa.a
+/b/c//.a./aaa.. /b/c/.a./aaa..
+/b/c//.a./aaa./ /b/c/.a./aaa.
+/b/c//.a./aaa/a /b/c/.a./aaa/a
+/b/c//.a./aaa/. /b/c/.a./aaa
+/b/c//.a./aaa// /b/c/.a./aaa
+/b/c//.a./aa.aa /b/c/.a./aa.aa
+/b/c//.a./aa.a. /b/c/.a./aa.a.
+/b/c//.a./aa.a/ /b/c/.a./aa.a
+/b/c//.a./aa..a /b/c/.a./aa..a
+/b/c//.a./aa... /b/c/.a./aa...
+/b/c//.a./aa../ /b/c/.a./aa..
+/b/c//.a./aa./a /b/c/.a./aa./a
+/b/c//.a./aa./. /b/c/.a./aa.
+/b/c//.a./aa.// /b/c/.a./aa.
+/b/c//.a./aa/aa /b/c/.a./aa/aa
+/b/c//.a./aa/a. /b/c/.a./aa/a.
+/b/c//.a./aa/a/ /b/c/.a./aa/a
+/b/c//.a./aa/.a /b/c/.a./aa/.a
+/b/c//.a./aa/.. /b/c/.a.
+/b/c//.a./aa/./ /b/c/.a./aa
+/b/c//.a./aa//a /b/c/.a./aa/a
+/b/c//.a./aa//. /b/c/.a./aa
+/b/c//.a./aa/// /b/c/.a./aa
+/b/c//.a./a.aaa /b/c/.a./a.aaa
+/b/c//.a./a.aa. /b/c/.a./a.aa.
+/b/c//.a./a.aa/ /b/c/.a./a.aa
+/b/c//.a./a.a.a /b/c/.a./a.a.a
+/b/c//.a./a.a.. /b/c/.a./a.a..
+/b/c//.a./a.a./ /b/c/.a./a.a.
+/b/c//.a./a.a/a /b/c/.a./a.a/a
+/b/c//.a./a.a/. /b/c/.a./a.a
+/b/c//.a./a.a// /b/c/.a./a.a
+/b/c//.a./a..aa /b/c/.a./a..aa
+/b/c//.a./a..a. /b/c/.a./a..a.
+/b/c//.a./a..a/ /b/c/.a./a..a
+/b/c//.a./a...a /b/c/.a./a...a
+/b/c//.a./a.... /b/c/.a./a....
+/b/c//.a./a.../ /b/c/.a./a...
+/b/c//.a./a../a /b/c/.a./a../a
+/b/c//.a./a../. /b/c/.a./a..
+/b/c//.a./a..// /b/c/.a./a..
+/b/c//.a./a./aa /b/c/.a./a./aa
+/b/c//.a./a./a. /b/c/.a./a./a.
+/b/c//.a./a./a/ /b/c/.a./a./a
+/b/c//.a./a./.a /b/c/.a./a./.a
+/b/c//.a./a./.. /b/c/.a.
+/b/c//.a./a././ /b/c/.a./a.
+/b/c//.a./a.//a /b/c/.a./a./a
+/b/c//.a./a.//. /b/c/.a./a.
+/b/c//.a./a./// /b/c/.a./a.
+/b/c//.a./a/aaa /b/c/.a./a/aaa
+/b/c//.a./a/aa. /b/c/.a./a/aa.
+/b/c//.a./a/aa/ /b/c/.a./a/aa
+/b/c//.a./a/a.a /b/c/.a./a/a.a
+/b/c//.a./a/a.. /b/c/.a./a/a..
+/b/c//.a./a/a./ /b/c/.a./a/a.
+/b/c//.a./a/a/a /b/c/.a./a/a/a
+/b/c//.a./a/a/. /b/c/.a./a/a
+/b/c//.a./a/a// /b/c/.a./a/a
+/b/c//.a./a/.aa /b/c/.a./a/.aa
+/b/c//.a./a/.a. /b/c/.a./a/.a.
+/b/c//.a./a/.a/ /b/c/.a./a/.a
+/b/c//.a./a/..a /b/c/.a./a/..a
+/b/c//.a./a/... /b/c/.a./a/...
+/b/c//.a./a/../ /b/c/.a.
+/b/c//.a./a/./a /b/c/.a./a/a
+/b/c//.a./a/./. /b/c/.a./a
+/b/c//.a./a/.// /b/c/.a./a
+/b/c//.a./a//aa /b/c/.a./a/aa
+/b/c//.a./a//a. /b/c/.a./a/a.
+/b/c//.a./a//a/ /b/c/.a./a/a
+/b/c//.a./a//.a /b/c/.a./a/.a
+/b/c//.a./a//.. /b/c/.a.
+/b/c//.a./a//./ /b/c/.a./a
+/b/c//.a./a///a /b/c/.a./a/a
+/b/c//.a./a///. /b/c/.a./a
+/b/c//.a./a//// /b/c/.a./a
+/b/c//.a./.aaaa /b/c/.a./.aaaa
+/b/c//.a./.aaa. /b/c/.a./.aaa.
+/b/c//.a./.aaa/ /b/c/.a./.aaa
+/b/c//.a./.aa.a /b/c/.a./.aa.a
+/b/c//.a./.aa.. /b/c/.a./.aa..
+/b/c//.a./.aa./ /b/c/.a./.aa.
+/b/c//.a./.aa/a /b/c/.a./.aa/a
+/b/c//.a./.aa/. /b/c/.a./.aa
+/b/c//.a./.aa// /b/c/.a./.aa
+/b/c//.a./.a.aa /b/c/.a./.a.aa
+/b/c//.a./.a.a. /b/c/.a./.a.a.
+/b/c//.a./.a.a/ /b/c/.a./.a.a
+/b/c//.a./.a..a /b/c/.a./.a..a
+/b/c//.a./.a... /b/c/.a./.a...
+/b/c//.a./.a../ /b/c/.a./.a..
+/b/c//.a./.a./a /b/c/.a./.a./a
+/b/c//.a./.a./. /b/c/.a./.a.
+/b/c//.a./.a.// /b/c/.a./.a.
+/b/c//.a./.a/aa /b/c/.a./.a/aa
+/b/c//.a./.a/a. /b/c/.a./.a/a.
+/b/c//.a./.a/a/ /b/c/.a./.a/a
+/b/c//.a./.a/.a /b/c/.a./.a/.a
+/b/c//.a./.a/.. /b/c/.a.
+/b/c//.a./.a/./ /b/c/.a./.a
+/b/c//.a./.a//a /b/c/.a./.a/a
+/b/c//.a./.a//. /b/c/.a./.a
+/b/c//.a./.a/// /b/c/.a./.a
+/b/c//.a./..aaa /b/c/.a./..aaa
+/b/c//.a./..aa. /b/c/.a./..aa.
+/b/c//.a./..aa/ /b/c/.a./..aa
+/b/c//.a./..a.a /b/c/.a./..a.a
+/b/c//.a./..a.. /b/c/.a./..a..
+/b/c//.a./..a./ /b/c/.a./..a.
+/b/c//.a./..a/a /b/c/.a./..a/a
+/b/c//.a./..a/. /b/c/.a./..a
+/b/c//.a./..a// /b/c/.a./..a
+/b/c//.a./...aa /b/c/.a./...aa
+/b/c//.a./...a. /b/c/.a./...a.
+/b/c//.a./...a/ /b/c/.a./...a
+/b/c//.a./....a /b/c/.a./....a
+/b/c//.a./..... /b/c/.a./.....
+/b/c//.a./..../ /b/c/.a./....
+/b/c//.a./.../a /b/c/.a./.../a
+/b/c//.a./.../. /b/c/.a./...
+/b/c//.a./...// /b/c/.a./...
+/b/c//.a./../aa /b/c/aa
+/b/c//.a./../a. /b/c/a.
+/b/c//.a./../a/ /b/c/a
+/b/c//.a./../.a /b/c/.a
+/b/c//.a./../.. /b
+/b/c//.a./.././ /b/c
+/b/c//.a./..//a /b/c/a
+/b/c//.a./..//. /b/c
+/b/c//.a./../// /b/c
+/b/c//.a././aaa /b/c/.a./aaa
+/b/c//.a././aa. /b/c/.a./aa.
+/b/c//.a././aa/ /b/c/.a./aa
+/b/c//.a././a.a /b/c/.a./a.a
+/b/c//.a././a.. /b/c/.a./a..
+/b/c//.a././a./ /b/c/.a./a.
+/b/c//.a././a/a /b/c/.a./a/a
+/b/c//.a././a/. /b/c/.a./a
+/b/c//.a././a// /b/c/.a./a
+/b/c//.a././.aa /b/c/.a./.aa
+/b/c//.a././.a. /b/c/.a./.a.
+/b/c//.a././.a/ /b/c/.a./.a
+/b/c//.a././..a /b/c/.a./..a
+/b/c//.a././... /b/c/.a./...
+/b/c//.a././../ /b/c
+/b/c//.a./././a /b/c/.a./a
+/b/c//.a./././. /b/c/.a.
+/b/c//.a././.// /b/c/.a.
+/b/c//.a././/aa /b/c/.a./aa
+/b/c//.a././/a. /b/c/.a./a.
+/b/c//.a././/a/ /b/c/.a./a
+/b/c//.a././/.a /b/c/.a./.a
+/b/c//.a././/.. /b/c
+/b/c//.a././/./ /b/c/.a.
+/b/c//.a././//a /b/c/.a./a
+/b/c//.a././//. /b/c/.a.
+/b/c//.a././/// /b/c/.a.
+/b/c//.a.//aaaa /b/c/.a./aaaa
+/b/c//.a.//aaa. /b/c/.a./aaa.
+/b/c//.a.//aaa/ /b/c/.a./aaa
+/b/c//.a.//aa.a /b/c/.a./aa.a
+/b/c//.a.//aa.. /b/c/.a./aa..
+/b/c//.a.//aa./ /b/c/.a./aa.
+/b/c//.a.//aa/a /b/c/.a./aa/a
+/b/c//.a.//aa/. /b/c/.a./aa
+/b/c//.a.//aa// /b/c/.a./aa
+/b/c//.a.//a.aa /b/c/.a./a.aa
+/b/c//.a.//a.a. /b/c/.a./a.a.
+/b/c//.a.//a.a/ /b/c/.a./a.a
+/b/c//.a.//a..a /b/c/.a./a..a
+/b/c//.a.//a... /b/c/.a./a...
+/b/c//.a.//a../ /b/c/.a./a..
+/b/c//.a.//a./a /b/c/.a./a./a
+/b/c//.a.//a./. /b/c/.a./a.
+/b/c//.a.//a.// /b/c/.a./a.
+/b/c//.a.//a/aa /b/c/.a./a/aa
+/b/c//.a.//a/a. /b/c/.a./a/a.
+/b/c//.a.//a/a/ /b/c/.a./a/a
+/b/c//.a.//a/.a /b/c/.a./a/.a
+/b/c//.a.//a/.. /b/c/.a.
+/b/c//.a.//a/./ /b/c/.a./a
+/b/c//.a.//a//a /b/c/.a./a/a
+/b/c//.a.//a//. /b/c/.a./a
+/b/c//.a.//a/// /b/c/.a./a
+/b/c//.a.//.aaa /b/c/.a./.aaa
+/b/c//.a.//.aa. /b/c/.a./.aa.
+/b/c//.a.//.aa/ /b/c/.a./.aa
+/b/c//.a.//.a.a /b/c/.a./.a.a
+/b/c//.a.//.a.. /b/c/.a./.a..
+/b/c//.a.//.a./ /b/c/.a./.a.
+/b/c//.a.//.a/a /b/c/.a./.a/a
+/b/c//.a.//.a/. /b/c/.a./.a
+/b/c//.a.//.a// /b/c/.a./.a
+/b/c//.a.//..aa /b/c/.a./..aa
+/b/c//.a.//..a. /b/c/.a./..a.
+/b/c//.a.//..a/ /b/c/.a./..a
+/b/c//.a.//...a /b/c/.a./...a
+/b/c//.a.//.... /b/c/.a./....
+/b/c//.a.//.../ /b/c/.a./...
+/b/c//.a.//../a /b/c/a
+/b/c//.a.//../. /b/c
+/b/c//.a.//..// /b/c
+/b/c//.a.//./aa /b/c/.a./aa
+/b/c//.a.//./a. /b/c/.a./a.
+/b/c//.a.//./a/ /b/c/.a./a
+/b/c//.a.//./.a /b/c/.a./.a
+/b/c//.a.//./.. /b/c
+/b/c//.a.//././ /b/c/.a.
+/b/c//.a.//.//a /b/c/.a./a
+/b/c//.a.//.//. /b/c/.a.
+/b/c//.a.//./// /b/c/.a.
+/b/c//.a.///aaa /b/c/.a./aaa
+/b/c//.a.///aa. /b/c/.a./aa.
+/b/c//.a.///aa/ /b/c/.a./aa
+/b/c//.a.///a.a /b/c/.a./a.a
+/b/c//.a.///a.. /b/c/.a./a..
+/b/c//.a.///a./ /b/c/.a./a.
+/b/c//.a.///a/a /b/c/.a./a/a
+/b/c//.a.///a/. /b/c/.a./a
+/b/c//.a.///a// /b/c/.a./a
+/b/c//.a.///.aa /b/c/.a./.aa
+/b/c//.a.///.a. /b/c/.a./.a.
+/b/c//.a.///.a/ /b/c/.a./.a
+/b/c//.a.///..a /b/c/.a./..a
+/b/c//.a.///... /b/c/.a./...
+/b/c//.a.///../ /b/c
+/b/c//.a.///./a /b/c/.a./a
+/b/c//.a.///./. /b/c/.a.
+/b/c//.a.///.// /b/c/.a.
+/b/c//.a.////aa /b/c/.a./aa
+/b/c//.a.////a. /b/c/.a./a.
+/b/c//.a.////a/ /b/c/.a./a
+/b/c//.a.////.a /b/c/.a./.a
+/b/c//.a.////.. /b/c
+/b/c//.a.////./ /b/c/.a.
+/b/c//.a./////a /b/c/.a./a
+/b/c//.a./////. /b/c/.a.
+/b/c//.a.////// /b/c/.a.
+/b/c//.a/aaaaaa /b/c/.a/aaaaaa
+/b/c//.a/aaaaa. /b/c/.a/aaaaa.
+/b/c//.a/aaaaa/ /b/c/.a/aaaaa
+/b/c//.a/aaaa.a /b/c/.a/aaaa.a
+/b/c//.a/aaaa.. /b/c/.a/aaaa..
+/b/c//.a/aaaa./ /b/c/.a/aaaa.
+/b/c//.a/aaaa/a /b/c/.a/aaaa/a
+/b/c//.a/aaaa/. /b/c/.a/aaaa
+/b/c//.a/aaaa// /b/c/.a/aaaa
+/b/c//.a/aaa.aa /b/c/.a/aaa.aa
+/b/c//.a/aaa.a. /b/c/.a/aaa.a.
+/b/c//.a/aaa.a/ /b/c/.a/aaa.a
+/b/c//.a/aaa..a /b/c/.a/aaa..a
+/b/c//.a/aaa... /b/c/.a/aaa...
+/b/c//.a/aaa../ /b/c/.a/aaa..
+/b/c//.a/aaa./a /b/c/.a/aaa./a
+/b/c//.a/aaa./. /b/c/.a/aaa.
+/b/c//.a/aaa.// /b/c/.a/aaa.
+/b/c//.a/aaa/aa /b/c/.a/aaa/aa
+/b/c//.a/aaa/a. /b/c/.a/aaa/a.
+/b/c//.a/aaa/a/ /b/c/.a/aaa/a
+/b/c//.a/aaa/.a /b/c/.a/aaa/.a
+/b/c//.a/aaa/.. /b/c/.a
+/b/c//.a/aaa/./ /b/c/.a/aaa
+/b/c//.a/aaa//a /b/c/.a/aaa/a
+/b/c//.a/aaa//. /b/c/.a/aaa
+/b/c//.a/aaa/// /b/c/.a/aaa
+/b/c//.a/aa.aaa /b/c/.a/aa.aaa
+/b/c//.a/aa.aa. /b/c/.a/aa.aa.
+/b/c//.a/aa.aa/ /b/c/.a/aa.aa
+/b/c//.a/aa.a.a /b/c/.a/aa.a.a
+/b/c//.a/aa.a.. /b/c/.a/aa.a..
+/b/c//.a/aa.a./ /b/c/.a/aa.a.
+/b/c//.a/aa.a/a /b/c/.a/aa.a/a
+/b/c//.a/aa.a/. /b/c/.a/aa.a
+/b/c//.a/aa.a// /b/c/.a/aa.a
+/b/c//.a/aa..aa /b/c/.a/aa..aa
+/b/c//.a/aa..a. /b/c/.a/aa..a.
+/b/c//.a/aa..a/ /b/c/.a/aa..a
+/b/c//.a/aa...a /b/c/.a/aa...a
+/b/c//.a/aa.... /b/c/.a/aa....
+/b/c//.a/aa.../ /b/c/.a/aa...
+/b/c//.a/aa../a /b/c/.a/aa../a
+/b/c//.a/aa../. /b/c/.a/aa..
+/b/c//.a/aa..// /b/c/.a/aa..
+/b/c//.a/aa./aa /b/c/.a/aa./aa
+/b/c//.a/aa./a. /b/c/.a/aa./a.
+/b/c//.a/aa./a/ /b/c/.a/aa./a
+/b/c//.a/aa./.a /b/c/.a/aa./.a
+/b/c//.a/aa./.. /b/c/.a
+/b/c//.a/aa././ /b/c/.a/aa.
+/b/c//.a/aa.//a /b/c/.a/aa./a
+/b/c//.a/aa.//. /b/c/.a/aa.
+/b/c//.a/aa./// /b/c/.a/aa.
+/b/c//.a/aa/aaa /b/c/.a/aa/aaa
+/b/c//.a/aa/aa. /b/c/.a/aa/aa.
+/b/c//.a/aa/aa/ /b/c/.a/aa/aa
+/b/c//.a/aa/a.a /b/c/.a/aa/a.a
+/b/c//.a/aa/a.. /b/c/.a/aa/a..
+/b/c//.a/aa/a./ /b/c/.a/aa/a.
+/b/c//.a/aa/a/a /b/c/.a/aa/a/a
+/b/c//.a/aa/a/. /b/c/.a/aa/a
+/b/c//.a/aa/a// /b/c/.a/aa/a
+/b/c//.a/aa/.aa /b/c/.a/aa/.aa
+/b/c//.a/aa/.a. /b/c/.a/aa/.a.
+/b/c//.a/aa/.a/ /b/c/.a/aa/.a
+/b/c//.a/aa/..a /b/c/.a/aa/..a
+/b/c//.a/aa/... /b/c/.a/aa/...
+/b/c//.a/aa/../ /b/c/.a
+/b/c//.a/aa/./a /b/c/.a/aa/a
+/b/c//.a/aa/./. /b/c/.a/aa
+/b/c//.a/aa/.// /b/c/.a/aa
+/b/c//.a/aa//aa /b/c/.a/aa/aa
+/b/c//.a/aa//a. /b/c/.a/aa/a.
+/b/c//.a/aa//a/ /b/c/.a/aa/a
+/b/c//.a/aa//.a /b/c/.a/aa/.a
+/b/c//.a/aa//.. /b/c/.a
+/b/c//.a/aa//./ /b/c/.a/aa
+/b/c//.a/aa///a /b/c/.a/aa/a
+/b/c//.a/aa///. /b/c/.a/aa
+/b/c//.a/aa//// /b/c/.a/aa
+/b/c//.a/a.aaaa /b/c/.a/a.aaaa
+/b/c//.a/a.aaa. /b/c/.a/a.aaa.
+/b/c//.a/a.aaa/ /b/c/.a/a.aaa
+/b/c//.a/a.aa.a /b/c/.a/a.aa.a
+/b/c//.a/a.aa.. /b/c/.a/a.aa..
+/b/c//.a/a.aa./ /b/c/.a/a.aa.
+/b/c//.a/a.aa/a /b/c/.a/a.aa/a
+/b/c//.a/a.aa/. /b/c/.a/a.aa
+/b/c//.a/a.aa// /b/c/.a/a.aa
+/b/c//.a/a.a.aa /b/c/.a/a.a.aa
+/b/c//.a/a.a.a. /b/c/.a/a.a.a.
+/b/c//.a/a.a.a/ /b/c/.a/a.a.a
+/b/c//.a/a.a..a /b/c/.a/a.a..a
+/b/c//.a/a.a... /b/c/.a/a.a...
+/b/c//.a/a.a../ /b/c/.a/a.a..
+/b/c//.a/a.a./a /b/c/.a/a.a./a
+/b/c//.a/a.a./. /b/c/.a/a.a.
+/b/c//.a/a.a.// /b/c/.a/a.a.
+/b/c//.a/a.a/aa /b/c/.a/a.a/aa
+/b/c//.a/a.a/a. /b/c/.a/a.a/a.
+/b/c//.a/a.a/a/ /b/c/.a/a.a/a
+/b/c//.a/a.a/.a /b/c/.a/a.a/.a
+/b/c//.a/a.a/.. /b/c/.a
+/b/c//.a/a.a/./ /b/c/.a/a.a
+/b/c//.a/a.a//a /b/c/.a/a.a/a
+/b/c//.a/a.a//. /b/c/.a/a.a
+/b/c//.a/a.a/// /b/c/.a/a.a
+/b/c//.a/a..aaa /b/c/.a/a..aaa
+/b/c//.a/a..aa. /b/c/.a/a..aa.
+/b/c//.a/a..aa/ /b/c/.a/a..aa
+/b/c//.a/a..a.a /b/c/.a/a..a.a
+/b/c//.a/a..a.. /b/c/.a/a..a..
+/b/c//.a/a..a./ /b/c/.a/a..a.
+/b/c//.a/a..a/a /b/c/.a/a..a/a
+/b/c//.a/a..a/. /b/c/.a/a..a
+/b/c//.a/a..a// /b/c/.a/a..a
+/b/c//.a/a...aa /b/c/.a/a...aa
+/b/c//.a/a...a. /b/c/.a/a...a.
+/b/c//.a/a...a/ /b/c/.a/a...a
+/b/c//.a/a....a /b/c/.a/a....a
+/b/c//.a/a..... /b/c/.a/a.....
+/b/c//.a/a..../ /b/c/.a/a....
+/b/c//.a/a.../a /b/c/.a/a.../a
+/b/c//.a/a.../. /b/c/.a/a...
+/b/c//.a/a...// /b/c/.a/a...
+/b/c//.a/a../aa /b/c/.a/a../aa
+/b/c//.a/a../a. /b/c/.a/a../a.
+/b/c//.a/a../a/ /b/c/.a/a../a
+/b/c//.a/a../.a /b/c/.a/a../.a
+/b/c//.a/a../.. /b/c/.a
+/b/c//.a/a.././ /b/c/.a/a..
+/b/c//.a/a..//a /b/c/.a/a../a
+/b/c//.a/a..//. /b/c/.a/a..
+/b/c//.a/a../// /b/c/.a/a..
+/b/c//.a/a./aaa /b/c/.a/a./aaa
+/b/c//.a/a./aa. /b/c/.a/a./aa.
+/b/c//.a/a./aa/ /b/c/.a/a./aa
+/b/c//.a/a./a.a /b/c/.a/a./a.a
+/b/c//.a/a./a.. /b/c/.a/a./a..
+/b/c//.a/a./a./ /b/c/.a/a./a.
+/b/c//.a/a./a/a /b/c/.a/a./a/a
+/b/c//.a/a./a/. /b/c/.a/a./a
+/b/c//.a/a./a// /b/c/.a/a./a
+/b/c//.a/a./.aa /b/c/.a/a./.aa
+/b/c//.a/a./.a. /b/c/.a/a./.a.
+/b/c//.a/a./.a/ /b/c/.a/a./.a
+/b/c//.a/a./..a /b/c/.a/a./..a
+/b/c//.a/a./... /b/c/.a/a./...
+/b/c//.a/a./../ /b/c/.a
+/b/c//.a/a././a /b/c/.a/a./a
+/b/c//.a/a././. /b/c/.a/a.
+/b/c//.a/a./.// /b/c/.a/a.
+/b/c//.a/a.//aa /b/c/.a/a./aa
+/b/c//.a/a.//a. /b/c/.a/a./a.
+/b/c//.a/a.//a/ /b/c/.a/a./a
+/b/c//.a/a.//.a /b/c/.a/a./.a
+/b/c//.a/a.//.. /b/c/.a
+/b/c//.a/a.//./ /b/c/.a/a.
+/b/c//.a/a.///a /b/c/.a/a./a
+/b/c//.a/a.///. /b/c/.a/a.
+/b/c//.a/a.//// /b/c/.a/a.
+/b/c//.a/a/aaaa /b/c/.a/a/aaaa
+/b/c//.a/a/aaa. /b/c/.a/a/aaa.
+/b/c//.a/a/aaa/ /b/c/.a/a/aaa
+/b/c//.a/a/aa.a /b/c/.a/a/aa.a
+/b/c//.a/a/aa.. /b/c/.a/a/aa..
+/b/c//.a/a/aa./ /b/c/.a/a/aa.
+/b/c//.a/a/aa/a /b/c/.a/a/aa/a
+/b/c//.a/a/aa/. /b/c/.a/a/aa
+/b/c//.a/a/aa// /b/c/.a/a/aa
+/b/c//.a/a/a.aa /b/c/.a/a/a.aa
+/b/c//.a/a/a.a. /b/c/.a/a/a.a.
+/b/c//.a/a/a.a/ /b/c/.a/a/a.a
+/b/c//.a/a/a..a /b/c/.a/a/a..a
+/b/c//.a/a/a... /b/c/.a/a/a...
+/b/c//.a/a/a../ /b/c/.a/a/a..
+/b/c//.a/a/a./a /b/c/.a/a/a./a
+/b/c//.a/a/a./. /b/c/.a/a/a.
+/b/c//.a/a/a.// /b/c/.a/a/a.
+/b/c//.a/a/a/aa /b/c/.a/a/a/aa
+/b/c//.a/a/a/a. /b/c/.a/a/a/a.
+/b/c//.a/a/a/a/ /b/c/.a/a/a/a
+/b/c//.a/a/a/.a /b/c/.a/a/a/.a
+/b/c//.a/a/a/.. /b/c/.a/a
+/b/c//.a/a/a/./ /b/c/.a/a/a
+/b/c//.a/a/a//a /b/c/.a/a/a/a
+/b/c//.a/a/a//. /b/c/.a/a/a
+/b/c//.a/a/a/// /b/c/.a/a/a
+/b/c//.a/a/.aaa /b/c/.a/a/.aaa
+/b/c//.a/a/.aa. /b/c/.a/a/.aa.
+/b/c//.a/a/.aa/ /b/c/.a/a/.aa
+/b/c//.a/a/.a.a /b/c/.a/a/.a.a
+/b/c//.a/a/.a.. /b/c/.a/a/.a..
+/b/c//.a/a/.a./ /b/c/.a/a/.a.
+/b/c//.a/a/.a/a /b/c/.a/a/.a/a
+/b/c//.a/a/.a/. /b/c/.a/a/.a
+/b/c//.a/a/.a// /b/c/.a/a/.a
+/b/c//.a/a/..aa /b/c/.a/a/..aa
+/b/c//.a/a/..a. /b/c/.a/a/..a.
+/b/c//.a/a/..a/ /b/c/.a/a/..a
+/b/c//.a/a/...a /b/c/.a/a/...a
+/b/c//.a/a/.... /b/c/.a/a/....
+/b/c//.a/a/.../ /b/c/.a/a/...
+/b/c//.a/a/../a /b/c/.a/a
+/b/c//.a/a/../. /b/c/.a
+/b/c//.a/a/..// /b/c/.a
+/b/c//.a/a/./aa /b/c/.a/a/aa
+/b/c//.a/a/./a. /b/c/.a/a/a.
+/b/c//.a/a/./a/ /b/c/.a/a/a
+/b/c//.a/a/./.a /b/c/.a/a/.a
+/b/c//.a/a/./.. /b/c/.a
+/b/c//.a/a/././ /b/c/.a/a
+/b/c//.a/a/.//a /b/c/.a/a/a
+/b/c//.a/a/.//. /b/c/.a/a
+/b/c//.a/a/./// /b/c/.a/a
+/b/c//.a/a//aaa /b/c/.a/a/aaa
+/b/c//.a/a//aa. /b/c/.a/a/aa.
+/b/c//.a/a//aa/ /b/c/.a/a/aa
+/b/c//.a/a//a.a /b/c/.a/a/a.a
+/b/c//.a/a//a.. /b/c/.a/a/a..
+/b/c//.a/a//a./ /b/c/.a/a/a.
+/b/c//.a/a//a/a /b/c/.a/a/a/a
+/b/c//.a/a//a/. /b/c/.a/a/a
+/b/c//.a/a//a// /b/c/.a/a/a
+/b/c//.a/a//.aa /b/c/.a/a/.aa
+/b/c//.a/a//.a. /b/c/.a/a/.a.
+/b/c//.a/a//.a/ /b/c/.a/a/.a
+/b/c//.a/a//..a /b/c/.a/a/..a
+/b/c//.a/a//... /b/c/.a/a/...
+/b/c//.a/a//../ /b/c/.a
+/b/c//.a/a//./a /b/c/.a/a/a
+/b/c//.a/a//./. /b/c/.a/a
+/b/c//.a/a//.// /b/c/.a/a
+/b/c//.a/a///aa /b/c/.a/a/aa
+/b/c//.a/a///a. /b/c/.a/a/a.
+/b/c//.a/a///a/ /b/c/.a/a/a
+/b/c//.a/a///.a /b/c/.a/a/.a
+/b/c//.a/a///.. /b/c/.a
+/b/c//.a/a///./ /b/c/.a/a
+/b/c//.a/a////a /b/c/.a/a/a
+/b/c//.a/a////. /b/c/.a/a
+/b/c//.a/a///// /b/c/.a/a
+/b/c//.a/.aaaaa /b/c/.a/.aaaaa
+/b/c//.a/.aaaa. /b/c/.a/.aaaa.
+/b/c//.a/.aaaa/ /b/c/.a/.aaaa
+/b/c//.a/.aaa.a /b/c/.a/.aaa.a
+/b/c//.a/.aaa.. /b/c/.a/.aaa..
+/b/c//.a/.aaa./ /b/c/.a/.aaa.
+/b/c//.a/.aaa/a /b/c/.a/.aaa/a
+/b/c//.a/.aaa/. /b/c/.a/.aaa
+/b/c//.a/.aaa// /b/c/.a/.aaa
+/b/c//.a/.aa.aa /b/c/.a/.aa.aa
+/b/c//.a/.aa.a. /b/c/.a/.aa.a.
+/b/c//.a/.aa.a/ /b/c/.a/.aa.a
+/b/c//.a/.aa..a /b/c/.a/.aa..a
+/b/c//.a/.aa... /b/c/.a/.aa...
+/b/c//.a/.aa../ /b/c/.a/.aa..
+/b/c//.a/.aa./a /b/c/.a/.aa./a
+/b/c//.a/.aa./. /b/c/.a/.aa.
+/b/c//.a/.aa.// /b/c/.a/.aa.
+/b/c//.a/.aa/aa /b/c/.a/.aa/aa
+/b/c//.a/.aa/a. /b/c/.a/.aa/a.
+/b/c//.a/.aa/a/ /b/c/.a/.aa/a
+/b/c//.a/.aa/.a /b/c/.a/.aa/.a
+/b/c//.a/.aa/.. /b/c/.a
+/b/c//.a/.aa/./ /b/c/.a/.aa
+/b/c//.a/.aa//a /b/c/.a/.aa/a
+/b/c//.a/.aa//. /b/c/.a/.aa
+/b/c//.a/.aa/// /b/c/.a/.aa
+/b/c//.a/.a.aaa /b/c/.a/.a.aaa
+/b/c//.a/.a.aa. /b/c/.a/.a.aa.
+/b/c//.a/.a.aa/ /b/c/.a/.a.aa
+/b/c//.a/.a.a.a /b/c/.a/.a.a.a
+/b/c//.a/.a.a.. /b/c/.a/.a.a..
+/b/c//.a/.a.a./ /b/c/.a/.a.a.
+/b/c//.a/.a.a/a /b/c/.a/.a.a/a
+/b/c//.a/.a.a/. /b/c/.a/.a.a
+/b/c//.a/.a.a// /b/c/.a/.a.a
+/b/c//.a/.a..aa /b/c/.a/.a..aa
+/b/c//.a/.a..a. /b/c/.a/.a..a.
+/b/c//.a/.a..a/ /b/c/.a/.a..a
+/b/c//.a/.a...a /b/c/.a/.a...a
+/b/c//.a/.a.... /b/c/.a/.a....
+/b/c//.a/.a.../ /b/c/.a/.a...
+/b/c//.a/.a../a /b/c/.a/.a../a
+/b/c//.a/.a../. /b/c/.a/.a..
+/b/c//.a/.a..// /b/c/.a/.a..
+/b/c//.a/.a./aa /b/c/.a/.a./aa
+/b/c//.a/.a./a. /b/c/.a/.a./a.
+/b/c//.a/.a./a/ /b/c/.a/.a./a
+/b/c//.a/.a./.a /b/c/.a/.a./.a
+/b/c//.a/.a./.. /b/c/.a
+/b/c//.a/.a././ /b/c/.a/.a.
+/b/c//.a/.a.//a /b/c/.a/.a./a
+/b/c//.a/.a.//. /b/c/.a/.a.
+/b/c//.a/.a./// /b/c/.a/.a.
+/b/c//.a/.a/aaa /b/c/.a/.a/aaa
+/b/c//.a/.a/aa. /b/c/.a/.a/aa.
+/b/c//.a/.a/aa/ /b/c/.a/.a/aa
+/b/c//.a/.a/a.a /b/c/.a/.a/a.a
+/b/c//.a/.a/a.. /b/c/.a/.a/a..
+/b/c//.a/.a/a./ /b/c/.a/.a/a.
+/b/c//.a/.a/a/a /b/c/.a/.a/a/a
+/b/c//.a/.a/a/. /b/c/.a/.a/a
+/b/c//.a/.a/a// /b/c/.a/.a/a
+/b/c//.a/.a/.aa /b/c/.a/.a/.aa
+/b/c//.a/.a/.a. /b/c/.a/.a/.a.
+/b/c//.a/.a/.a/ /b/c/.a/.a/.a
+/b/c//.a/.a/..a /b/c/.a/.a/..a
+/b/c//.a/.a/... /b/c/.a/.a/...
+/b/c//.a/.a/../ /b/c/.a
+/b/c//.a/.a/./a /b/c/.a/.a/a
+/b/c//.a/.a/./. /b/c/.a/.a
+/b/c//.a/.a/.// /b/c/.a/.a
+/b/c//.a/.a//aa /b/c/.a/.a/aa
+/b/c//.a/.a//a. /b/c/.a/.a/a.
+/b/c//.a/.a//a/ /b/c/.a/.a/a
+/b/c//.a/.a//.a /b/c/.a/.a/.a
+/b/c//.a/.a//.. /b/c/.a
+/b/c//.a/.a//./ /b/c/.a/.a
+/b/c//.a/.a///a /b/c/.a/.a/a
+/b/c//.a/.a///. /b/c/.a/.a
+/b/c//.a/.a//// /b/c/.a/.a
+/b/c//.a/..aaaa /b/c/.a/..aaaa
+/b/c//.a/..aaa. /b/c/.a/..aaa.
+/b/c//.a/..aaa/ /b/c/.a/..aaa
+/b/c//.a/..aa.a /b/c/.a/..aa.a
+/b/c//.a/..aa.. /b/c/.a/..aa..
+/b/c//.a/..aa./ /b/c/.a/..aa.
+/b/c//.a/..aa/a /b/c/.a/..aa/a
+/b/c//.a/..aa/. /b/c/.a/..aa
+/b/c//.a/..aa// /b/c/.a/..aa
+/b/c//.a/..a.aa /b/c/.a/..a.aa
+/b/c//.a/..a.a. /b/c/.a/..a.a.
+/b/c//.a/..a.a/ /b/c/.a/..a.a
+/b/c//.a/..a..a /b/c/.a/..a..a
+/b/c//.a/..a... /b/c/.a/..a...
+/b/c//.a/..a../ /b/c/.a/..a..
+/b/c//.a/..a./a /b/c/.a/..a./a
+/b/c//.a/..a./. /b/c/.a/..a.
+/b/c//.a/..a.// /b/c/.a/..a.
+/b/c//.a/..a/aa /b/c/.a/..a/aa
+/b/c//.a/..a/a. /b/c/.a/..a/a.
+/b/c//.a/..a/a/ /b/c/.a/..a/a
+/b/c//.a/..a/.a /b/c/.a/..a/.a
+/b/c//.a/..a/.. /b/c/.a
+/b/c//.a/..a/./ /b/c/.a/..a
+/b/c//.a/..a//a /b/c/.a/..a/a
+/b/c//.a/..a//. /b/c/.a/..a
+/b/c//.a/..a/// /b/c/.a/..a
+/b/c//.a/...aaa /b/c/.a/...aaa
+/b/c//.a/...aa. /b/c/.a/...aa.
+/b/c//.a/...aa/ /b/c/.a/...aa
+/b/c//.a/...a.a /b/c/.a/...a.a
+/b/c//.a/...a.. /b/c/.a/...a..
+/b/c//.a/...a./ /b/c/.a/...a.
+/b/c//.a/...a/a /b/c/.a/...a/a
+/b/c//.a/...a/. /b/c/.a/...a
+/b/c//.a/...a// /b/c/.a/...a
+/b/c//.a/....aa /b/c/.a/....aa
+/b/c//.a/....a. /b/c/.a/....a.
+/b/c//.a/....a/ /b/c/.a/....a
+/b/c//.a/.....a /b/c/.a/.....a
+/b/c//.a/...... /b/c/.a/......
+/b/c//.a/...../ /b/c/.a/.....
+/b/c//.a/..../a /b/c/.a/..../a
+/b/c//.a/..../. /b/c/.a/....
+/b/c//.a/....// /b/c/.a/....
+/b/c//.a/.../aa /b/c/.a/.../aa
+/b/c//.a/.../a. /b/c/.a/.../a.
+/b/c//.a/.../a/ /b/c/.a/.../a
+/b/c//.a/.../.a /b/c/.a/.../.a
+/b/c//.a/.../.. /b/c/.a
+/b/c//.a/..././ /b/c/.a/...
+/b/c//.a/...//a /b/c/.a/.../a
+/b/c//.a/...//. /b/c/.a/...
+/b/c//.a/.../// /b/c/.a/...
+/b/c//.a/../aaa /b/c/aaa
+/b/c//.a/../aa. /b/c/aa.
+/b/c//.a/../aa/ /b/c/aa
+/b/c//.a/../a.a /b/c/a.a
+/b/c//.a/../a.. /b/c/a..
+/b/c//.a/../a./ /b/c/a.
+/b/c//.a/../a/a /b/c/a/a
+/b/c//.a/../a/. /b/c/a
+/b/c//.a/../a// /b/c/a
+/b/c//.a/../.aa /b/c/.aa
+/b/c//.a/../.a. /b/c/.a.
+/b/c//.a/../.a/ /b/c/.a
+/b/c//.a/../..a /b/c/..a
+/b/c//.a/../... /b/c/...
+/b/c//.a/../../ /b
+/b/c//.a/.././a /b/c/a
+/b/c//.a/.././. /b/c
+/b/c//.a/../.// /b/c
+/b/c//.a/..//aa /b/c/aa
+/b/c//.a/..//a. /b/c/a.
+/b/c//.a/..//a/ /b/c/a
+/b/c//.a/..//.a /b/c/.a
+/b/c//.a/..//.. /b
+/b/c//.a/..//./ /b/c
+/b/c//.a/..///a /b/c/a
+/b/c//.a/..///. /b/c
+/b/c//.a/..//// /b/c
+/b/c//.a/./aaaa /b/c/.a/aaaa
+/b/c//.a/./aaa. /b/c/.a/aaa.
+/b/c//.a/./aaa/ /b/c/.a/aaa
+/b/c//.a/./aa.a /b/c/.a/aa.a
+/b/c//.a/./aa.. /b/c/.a/aa..
+/b/c//.a/./aa./ /b/c/.a/aa.
+/b/c//.a/./aa/a /b/c/.a/aa/a
+/b/c//.a/./aa/. /b/c/.a/aa
+/b/c//.a/./aa// /b/c/.a/aa
+/b/c//.a/./a.aa /b/c/.a/a.aa
+/b/c//.a/./a.a. /b/c/.a/a.a.
+/b/c//.a/./a.a/ /b/c/.a/a.a
+/b/c//.a/./a..a /b/c/.a/a..a
+/b/c//.a/./a... /b/c/.a/a...
+/b/c//.a/./a../ /b/c/.a/a..
+/b/c//.a/./a./a /b/c/.a/a./a
+/b/c//.a/./a./. /b/c/.a/a.
+/b/c//.a/./a.// /b/c/.a/a.
+/b/c//.a/./a/aa /b/c/.a/a/aa
+/b/c//.a/./a/a. /b/c/.a/a/a.
+/b/c//.a/./a/a/ /b/c/.a/a/a
+/b/c//.a/./a/.a /b/c/.a/a/.a
+/b/c//.a/./a/.. /b/c/.a
+/b/c//.a/./a/./ /b/c/.a/a
+/b/c//.a/./a//a /b/c/.a/a/a
+/b/c//.a/./a//. /b/c/.a/a
+/b/c//.a/./a/// /b/c/.a/a
+/b/c//.a/./.aaa /b/c/.a/.aaa
+/b/c//.a/./.aa. /b/c/.a/.aa.
+/b/c//.a/./.aa/ /b/c/.a/.aa
+/b/c//.a/./.a.a /b/c/.a/.a.a
+/b/c//.a/./.a.. /b/c/.a/.a..
+/b/c//.a/./.a./ /b/c/.a/.a.
+/b/c//.a/./.a/a /b/c/.a/.a/a
+/b/c//.a/./.a/. /b/c/.a/.a
+/b/c//.a/./.a// /b/c/.a/.a
+/b/c//.a/./..aa /b/c/.a/..aa
+/b/c//.a/./..a. /b/c/.a/..a.
+/b/c//.a/./..a/ /b/c/.a/..a
+/b/c//.a/./...a /b/c/.a/...a
+/b/c//.a/./.... /b/c/.a/....
+/b/c//.a/./.../ /b/c/.a/...
+/b/c//.a/./../a /b/c/a
+/b/c//.a/./../. /b/c
+/b/c//.a/./..// /b/c
+/b/c//.a/././aa /b/c/.a/aa
+/b/c//.a/././a. /b/c/.a/a.
+/b/c//.a/././a/ /b/c/.a/a
+/b/c//.a/././.a /b/c/.a/.a
+/b/c//.a/././.. /b/c
+/b/c//.a/./././ /b/c/.a
+/b/c//.a/././/a /b/c/.a/a
+/b/c//.a/././/. /b/c/.a
+/b/c//.a/././// /b/c/.a
+/b/c//.a/.//aaa /b/c/.a/aaa
+/b/c//.a/.//aa. /b/c/.a/aa.
+/b/c//.a/.//aa/ /b/c/.a/aa
+/b/c//.a/.//a.a /b/c/.a/a.a
+/b/c//.a/.//a.. /b/c/.a/a..
+/b/c//.a/.//a./ /b/c/.a/a.
+/b/c//.a/.//a/a /b/c/.a/a/a
+/b/c//.a/.//a/. /b/c/.a/a
+/b/c//.a/.//a// /b/c/.a/a
+/b/c//.a/.//.aa /b/c/.a/.aa
+/b/c//.a/.//.a. /b/c/.a/.a.
+/b/c//.a/.//.a/ /b/c/.a/.a
+/b/c//.a/.//..a /b/c/.a/..a
+/b/c//.a/.//... /b/c/.a/...
+/b/c//.a/.//../ /b/c
+/b/c//.a/.//./a /b/c/.a/a
+/b/c//.a/.//./. /b/c/.a
+/b/c//.a/.//.// /b/c/.a
+/b/c//.a/.///aa /b/c/.a/aa
+/b/c//.a/.///a. /b/c/.a/a.
+/b/c//.a/.///a/ /b/c/.a/a
+/b/c//.a/.///.a /b/c/.a/.a
+/b/c//.a/.///.. /b/c
+/b/c//.a/.///./ /b/c/.a
+/b/c//.a/.////a /b/c/.a/a
+/b/c//.a/.////. /b/c/.a
+/b/c//.a/.///// /b/c/.a
+/b/c//.a//aaaaa /b/c/.a/aaaaa
+/b/c//.a//aaaa. /b/c/.a/aaaa.
+/b/c//.a//aaaa/ /b/c/.a/aaaa
+/b/c//.a//aaa.a /b/c/.a/aaa.a
+/b/c//.a//aaa.. /b/c/.a/aaa..
+/b/c//.a//aaa./ /b/c/.a/aaa.
+/b/c//.a//aaa/a /b/c/.a/aaa/a
+/b/c//.a//aaa/. /b/c/.a/aaa
+/b/c//.a//aaa// /b/c/.a/aaa
+/b/c//.a//aa.aa /b/c/.a/aa.aa
+/b/c//.a//aa.a. /b/c/.a/aa.a.
+/b/c//.a//aa.a/ /b/c/.a/aa.a
+/b/c//.a//aa..a /b/c/.a/aa..a
+/b/c//.a//aa... /b/c/.a/aa...
+/b/c//.a//aa../ /b/c/.a/aa..
+/b/c//.a//aa./a /b/c/.a/aa./a
+/b/c//.a//aa./. /b/c/.a/aa.
+/b/c//.a//aa.// /b/c/.a/aa.
+/b/c//.a//aa/aa /b/c/.a/aa/aa
+/b/c//.a//aa/a. /b/c/.a/aa/a.
+/b/c//.a//aa/a/ /b/c/.a/aa/a
+/b/c//.a//aa/.a /b/c/.a/aa/.a
+/b/c//.a//aa/.. /b/c/.a
+/b/c//.a//aa/./ /b/c/.a/aa
+/b/c//.a//aa//a /b/c/.a/aa/a
+/b/c//.a//aa//. /b/c/.a/aa
+/b/c//.a//aa/// /b/c/.a/aa
+/b/c//.a//a.aaa /b/c/.a/a.aaa
+/b/c//.a//a.aa. /b/c/.a/a.aa.
+/b/c//.a//a.aa/ /b/c/.a/a.aa
+/b/c//.a//a.a.a /b/c/.a/a.a.a
+/b/c//.a//a.a.. /b/c/.a/a.a..
+/b/c//.a//a.a./ /b/c/.a/a.a.
+/b/c//.a//a.a/a /b/c/.a/a.a/a
+/b/c//.a//a.a/. /b/c/.a/a.a
+/b/c//.a//a.a// /b/c/.a/a.a
+/b/c//.a//a..aa /b/c/.a/a..aa
+/b/c//.a//a..a. /b/c/.a/a..a.
+/b/c//.a//a..a/ /b/c/.a/a..a
+/b/c//.a//a...a /b/c/.a/a...a
+/b/c//.a//a.... /b/c/.a/a....
+/b/c//.a//a.../ /b/c/.a/a...
+/b/c//.a//a../a /b/c/.a/a../a
+/b/c//.a//a../. /b/c/.a/a..
+/b/c//.a//a..// /b/c/.a/a..
+/b/c//.a//a./aa /b/c/.a/a./aa
+/b/c//.a//a./a. /b/c/.a/a./a.
+/b/c//.a//a./a/ /b/c/.a/a./a
+/b/c//.a//a./.a /b/c/.a/a./.a
+/b/c//.a//a./.. /b/c/.a
+/b/c//.a//a././ /b/c/.a/a.
+/b/c//.a//a.//a /b/c/.a/a./a
+/b/c//.a//a.//. /b/c/.a/a.
+/b/c//.a//a./// /b/c/.a/a.
+/b/c//.a//a/aaa /b/c/.a/a/aaa
+/b/c//.a//a/aa. /b/c/.a/a/aa.
+/b/c//.a//a/aa/ /b/c/.a/a/aa
+/b/c//.a//a/a.a /b/c/.a/a/a.a
+/b/c//.a//a/a.. /b/c/.a/a/a..
+/b/c//.a//a/a./ /b/c/.a/a/a.
+/b/c//.a//a/a/a /b/c/.a/a/a/a
+/b/c//.a//a/a/. /b/c/.a/a/a
+/b/c//.a//a/a// /b/c/.a/a/a
+/b/c//.a//a/.aa /b/c/.a/a/.aa
+/b/c//.a//a/.a. /b/c/.a/a/.a.
+/b/c//.a//a/.a/ /b/c/.a/a/.a
+/b/c//.a//a/..a /b/c/.a/a/..a
+/b/c//.a//a/... /b/c/.a/a/...
+/b/c//.a//a/../ /b/c/.a
+/b/c//.a//a/./a /b/c/.a/a/a
+/b/c//.a//a/./. /b/c/.a/a
+/b/c//.a//a/.// /b/c/.a/a
+/b/c//.a//a//aa /b/c/.a/a/aa
+/b/c//.a//a//a. /b/c/.a/a/a.
+/b/c//.a//a//a/ /b/c/.a/a/a
+/b/c//.a//a//.a /b/c/.a/a/.a
+/b/c//.a//a//.. /b/c/.a
+/b/c//.a//a//./ /b/c/.a/a
+/b/c//.a//a///a /b/c/.a/a/a
+/b/c//.a//a///. /b/c/.a/a
+/b/c//.a//a//// /b/c/.a/a
+/b/c//.a//.aaaa /b/c/.a/.aaaa
+/b/c//.a//.aaa. /b/c/.a/.aaa.
+/b/c//.a//.aaa/ /b/c/.a/.aaa
+/b/c//.a//.aa.a /b/c/.a/.aa.a
+/b/c//.a//.aa.. /b/c/.a/.aa..
+/b/c//.a//.aa./ /b/c/.a/.aa.
+/b/c//.a//.aa/a /b/c/.a/.aa/a
+/b/c//.a//.aa/. /b/c/.a/.aa
+/b/c//.a//.aa// /b/c/.a/.aa
+/b/c//.a//.a.aa /b/c/.a/.a.aa
+/b/c//.a//.a.a. /b/c/.a/.a.a.
+/b/c//.a//.a.a/ /b/c/.a/.a.a
+/b/c//.a//.a..a /b/c/.a/.a..a
+/b/c//.a//.a... /b/c/.a/.a...
+/b/c//.a//.a../ /b/c/.a/.a..
+/b/c//.a//.a./a /b/c/.a/.a./a
+/b/c//.a//.a./. /b/c/.a/.a.
+/b/c//.a//.a.// /b/c/.a/.a.
+/b/c//.a//.a/aa /b/c/.a/.a/aa
+/b/c//.a//.a/a. /b/c/.a/.a/a.
+/b/c//.a//.a/a/ /b/c/.a/.a/a
+/b/c//.a//.a/.a /b/c/.a/.a/.a
+/b/c//.a//.a/.. /b/c/.a
+/b/c//.a//.a/./ /b/c/.a/.a
+/b/c//.a//.a//a /b/c/.a/.a/a
+/b/c//.a//.a//. /b/c/.a/.a
+/b/c//.a//.a/// /b/c/.a/.a
+/b/c//.a//..aaa /b/c/.a/..aaa
+/b/c//.a//..aa. /b/c/.a/..aa.
+/b/c//.a//..aa/ /b/c/.a/..aa
+/b/c//.a//..a.a /b/c/.a/..a.a
+/b/c//.a//..a.. /b/c/.a/..a..
+/b/c//.a//..a./ /b/c/.a/..a.
+/b/c//.a//..a/a /b/c/.a/..a/a
+/b/c//.a//..a/. /b/c/.a/..a
+/b/c//.a//..a// /b/c/.a/..a
+/b/c//.a//...aa /b/c/.a/...aa
+/b/c//.a//...a. /b/c/.a/...a.
+/b/c//.a//...a/ /b/c/.a/...a
+/b/c//.a//....a /b/c/.a/....a
+/b/c//.a//..... /b/c/.a/.....
+/b/c//.a//..../ /b/c/.a/....
+/b/c//.a//.../a /b/c/.a/.../a
+/b/c//.a//.../. /b/c/.a/...
+/b/c//.a//...// /b/c/.a/...
+/b/c//.a//../aa /b/c/aa
+/b/c//.a//../a. /b/c/a.
+/b/c//.a//../a/ /b/c/a
+/b/c//.a//../.a /b/c/.a
+/b/c//.a//../.. /b
+/b/c//.a//.././ /b/c
+/b/c//.a//..//a /b/c/a
+/b/c//.a//..//. /b/c
+/b/c//.a//../// /b/c
+/b/c//.a//./aaa /b/c/.a/aaa
+/b/c//.a//./aa. /b/c/.a/aa.
+/b/c//.a//./aa/ /b/c/.a/aa
+/b/c//.a//./a.a /b/c/.a/a.a
+/b/c//.a//./a.. /b/c/.a/a..
+/b/c//.a//./a./ /b/c/.a/a.
+/b/c//.a//./a/a /b/c/.a/a/a
+/b/c//.a//./a/. /b/c/.a/a
+/b/c//.a//./a// /b/c/.a/a
+/b/c//.a//./.aa /b/c/.a/.aa
+/b/c//.a//./.a. /b/c/.a/.a.
+/b/c//.a//./.a/ /b/c/.a/.a
+/b/c//.a//./..a /b/c/.a/..a
+/b/c//.a//./... /b/c/.a/...
+/b/c//.a//./../ /b/c
+/b/c//.a//././a /b/c/.a/a
+/b/c//.a//././. /b/c/.a
+/b/c//.a//./.// /b/c/.a
+/b/c//.a//.//aa /b/c/.a/aa
+/b/c//.a//.//a. /b/c/.a/a.
+/b/c//.a//.//a/ /b/c/.a/a
+/b/c//.a//.//.a /b/c/.a/.a
+/b/c//.a//.//.. /b/c
+/b/c//.a//.//./ /b/c/.a
+/b/c//.a//.///a /b/c/.a/a
+/b/c//.a//.///. /b/c/.a
+/b/c//.a//.//// /b/c/.a
+/b/c//.a///aaaa /b/c/.a/aaaa
+/b/c//.a///aaa. /b/c/.a/aaa.
+/b/c//.a///aaa/ /b/c/.a/aaa
+/b/c//.a///aa.a /b/c/.a/aa.a
+/b/c//.a///aa.. /b/c/.a/aa..
+/b/c//.a///aa./ /b/c/.a/aa.
+/b/c//.a///aa/a /b/c/.a/aa/a
+/b/c//.a///aa/. /b/c/.a/aa
+/b/c//.a///aa// /b/c/.a/aa
+/b/c//.a///a.aa /b/c/.a/a.aa
+/b/c//.a///a.a. /b/c/.a/a.a.
+/b/c//.a///a.a/ /b/c/.a/a.a
+/b/c//.a///a..a /b/c/.a/a..a
+/b/c//.a///a... /b/c/.a/a...
+/b/c//.a///a../ /b/c/.a/a..
+/b/c//.a///a./a /b/c/.a/a./a
+/b/c//.a///a./. /b/c/.a/a.
+/b/c//.a///a.// /b/c/.a/a.
+/b/c//.a///a/aa /b/c/.a/a/aa
+/b/c//.a///a/a. /b/c/.a/a/a.
+/b/c//.a///a/a/ /b/c/.a/a/a
+/b/c//.a///a/.a /b/c/.a/a/.a
+/b/c//.a///a/.. /b/c/.a
+/b/c//.a///a/./ /b/c/.a/a
+/b/c//.a///a//a /b/c/.a/a/a
+/b/c//.a///a//. /b/c/.a/a
+/b/c//.a///a/// /b/c/.a/a
+/b/c//.a///.aaa /b/c/.a/.aaa
+/b/c//.a///.aa. /b/c/.a/.aa.
+/b/c//.a///.aa/ /b/c/.a/.aa
+/b/c//.a///.a.a /b/c/.a/.a.a
+/b/c//.a///.a.. /b/c/.a/.a..
+/b/c//.a///.a./ /b/c/.a/.a.
+/b/c//.a///.a/a /b/c/.a/.a/a
+/b/c//.a///.a/. /b/c/.a/.a
+/b/c//.a///.a// /b/c/.a/.a
+/b/c//.a///..aa /b/c/.a/..aa
+/b/c//.a///..a. /b/c/.a/..a.
+/b/c//.a///..a/ /b/c/.a/..a
+/b/c//.a///...a /b/c/.a/...a
+/b/c//.a///.... /b/c/.a/....
+/b/c//.a///.../ /b/c/.a/...
+/b/c//.a///../a /b/c/a
+/b/c//.a///../. /b/c
+/b/c//.a///..// /b/c
+/b/c//.a///./aa /b/c/.a/aa
+/b/c//.a///./a. /b/c/.a/a.
+/b/c//.a///./a/ /b/c/.a/a
+/b/c//.a///./.a /b/c/.a/.a
+/b/c//.a///./.. /b/c
+/b/c//.a///././ /b/c/.a
+/b/c//.a///.//a /b/c/.a/a
+/b/c//.a///.//. /b/c/.a
+/b/c//.a///./// /b/c/.a
+/b/c//.a////aaa /b/c/.a/aaa
+/b/c//.a////aa. /b/c/.a/aa.
+/b/c//.a////aa/ /b/c/.a/aa
+/b/c//.a////a.a /b/c/.a/a.a
+/b/c//.a////a.. /b/c/.a/a..
+/b/c//.a////a./ /b/c/.a/a.
+/b/c//.a////a/a /b/c/.a/a/a
+/b/c//.a////a/. /b/c/.a/a
+/b/c//.a////a// /b/c/.a/a
+/b/c//.a////.aa /b/c/.a/.aa
+/b/c//.a////.a. /b/c/.a/.a.
+/b/c//.a////.a/ /b/c/.a/.a
+/b/c//.a////..a /b/c/.a/..a
+/b/c//.a////... /b/c/.a/...
+/b/c//.a////../ /b/c
+/b/c//.a////./a /b/c/.a/a
+/b/c//.a////./. /b/c/.a
+/b/c//.a////.// /b/c/.a
+/b/c//.a/////aa /b/c/.a/aa
+/b/c//.a/////a. /b/c/.a/a.
+/b/c//.a/////a/ /b/c/.a/a
+/b/c//.a/////.a /b/c/.a/.a
+/b/c//.a/////.. /b/c
+/b/c//.a/////./ /b/c/.a
+/b/c//.a//////a /b/c/.a/a
+/b/c//.a//////. /b/c/.a
+/b/c//.a/////// /b/c/.a
+/b/c//..aaaaaaa /b/c/..aaaaaaa
+/b/c//..aaaaaa. /b/c/..aaaaaa.
+/b/c//..aaaaaa/ /b/c/..aaaaaa
+/b/c//..aaaaa.a /b/c/..aaaaa.a
+/b/c//..aaaaa.. /b/c/..aaaaa..
+/b/c//..aaaaa./ /b/c/..aaaaa.
+/b/c//..aaaaa/a /b/c/..aaaaa/a
+/b/c//..aaaaa/. /b/c/..aaaaa
+/b/c//..aaaaa// /b/c/..aaaaa
+/b/c//..aaaa.aa /b/c/..aaaa.aa
+/b/c//..aaaa.a. /b/c/..aaaa.a.
+/b/c//..aaaa.a/ /b/c/..aaaa.a
+/b/c//..aaaa..a /b/c/..aaaa..a
+/b/c//..aaaa... /b/c/..aaaa...
+/b/c//..aaaa../ /b/c/..aaaa..
+/b/c//..aaaa./a /b/c/..aaaa./a
+/b/c//..aaaa./. /b/c/..aaaa.
+/b/c//..aaaa.// /b/c/..aaaa.
+/b/c//..aaaa/aa /b/c/..aaaa/aa
+/b/c//..aaaa/a. /b/c/..aaaa/a.
+/b/c//..aaaa/a/ /b/c/..aaaa/a
+/b/c//..aaaa/.a /b/c/..aaaa/.a
+/b/c//..aaaa/.. /b/c
+/b/c//..aaaa/./ /b/c/..aaaa
+/b/c//..aaaa//a /b/c/..aaaa/a
+/b/c//..aaaa//. /b/c/..aaaa
+/b/c//..aaaa/// /b/c/..aaaa
+/b/c//..aaa.aaa /b/c/..aaa.aaa
+/b/c//..aaa.aa. /b/c/..aaa.aa.
+/b/c//..aaa.aa/ /b/c/..aaa.aa
+/b/c//..aaa.a.a /b/c/..aaa.a.a
+/b/c//..aaa.a.. /b/c/..aaa.a..
+/b/c//..aaa.a./ /b/c/..aaa.a.
+/b/c//..aaa.a/a /b/c/..aaa.a/a
+/b/c//..aaa.a/. /b/c/..aaa.a
+/b/c//..aaa.a// /b/c/..aaa.a
+/b/c//..aaa..aa /b/c/..aaa..aa
+/b/c//..aaa..a. /b/c/..aaa..a.
+/b/c//..aaa..a/ /b/c/..aaa..a
+/b/c//..aaa...a /b/c/..aaa...a
+/b/c//..aaa.... /b/c/..aaa....
+/b/c//..aaa.../ /b/c/..aaa...
+/b/c//..aaa../a /b/c/..aaa../a
+/b/c//..aaa../. /b/c/..aaa..
+/b/c//..aaa..// /b/c/..aaa..
+/b/c//..aaa./aa /b/c/..aaa./aa
+/b/c//..aaa./a. /b/c/..aaa./a.
+/b/c//..aaa./a/ /b/c/..aaa./a
+/b/c//..aaa./.a /b/c/..aaa./.a
+/b/c//..aaa./.. /b/c
+/b/c//..aaa././ /b/c/..aaa.
+/b/c//..aaa.//a /b/c/..aaa./a
+/b/c//..aaa.//. /b/c/..aaa.
+/b/c//..aaa./// /b/c/..aaa.
+/b/c//..aaa/aaa /b/c/..aaa/aaa
+/b/c//..aaa/aa. /b/c/..aaa/aa.
+/b/c//..aaa/aa/ /b/c/..aaa/aa
+/b/c//..aaa/a.a /b/c/..aaa/a.a
+/b/c//..aaa/a.. /b/c/..aaa/a..
+/b/c//..aaa/a./ /b/c/..aaa/a.
+/b/c//..aaa/a/a /b/c/..aaa/a/a
+/b/c//..aaa/a/. /b/c/..aaa/a
+/b/c//..aaa/a// /b/c/..aaa/a
+/b/c//..aaa/.aa /b/c/..aaa/.aa
+/b/c//..aaa/.a. /b/c/..aaa/.a.
+/b/c//..aaa/.a/ /b/c/..aaa/.a
+/b/c//..aaa/..a /b/c/..aaa/..a
+/b/c//..aaa/... /b/c/..aaa/...
+/b/c//..aaa/../ /b/c
+/b/c//..aaa/./a /b/c/..aaa/a
+/b/c//..aaa/./. /b/c/..aaa
+/b/c//..aaa/.// /b/c/..aaa
+/b/c//..aaa//aa /b/c/..aaa/aa
+/b/c//..aaa//a. /b/c/..aaa/a.
+/b/c//..aaa//a/ /b/c/..aaa/a
+/b/c//..aaa//.a /b/c/..aaa/.a
+/b/c//..aaa//.. /b/c
+/b/c//..aaa//./ /b/c/..aaa
+/b/c//..aaa///a /b/c/..aaa/a
+/b/c//..aaa///. /b/c/..aaa
+/b/c//..aaa//// /b/c/..aaa
+/b/c//..aa.aaaa /b/c/..aa.aaaa
+/b/c//..aa.aaa. /b/c/..aa.aaa.
+/b/c//..aa.aaa/ /b/c/..aa.aaa
+/b/c//..aa.aa.a /b/c/..aa.aa.a
+/b/c//..aa.aa.. /b/c/..aa.aa..
+/b/c//..aa.aa./ /b/c/..aa.aa.
+/b/c//..aa.aa/a /b/c/..aa.aa/a
+/b/c//..aa.aa/. /b/c/..aa.aa
+/b/c//..aa.aa// /b/c/..aa.aa
+/b/c//..aa.a.aa /b/c/..aa.a.aa
+/b/c//..aa.a.a. /b/c/..aa.a.a.
+/b/c//..aa.a.a/ /b/c/..aa.a.a
+/b/c//..aa.a..a /b/c/..aa.a..a
+/b/c//..aa.a... /b/c/..aa.a...
+/b/c//..aa.a../ /b/c/..aa.a..
+/b/c//..aa.a./a /b/c/..aa.a./a
+/b/c//..aa.a./. /b/c/..aa.a.
+/b/c//..aa.a.// /b/c/..aa.a.
+/b/c//..aa.a/aa /b/c/..aa.a/aa
+/b/c//..aa.a/a. /b/c/..aa.a/a.
+/b/c//..aa.a/a/ /b/c/..aa.a/a
+/b/c//..aa.a/.a /b/c/..aa.a/.a
+/b/c//..aa.a/.. /b/c
+/b/c//..aa.a/./ /b/c/..aa.a
+/b/c//..aa.a//a /b/c/..aa.a/a
+/b/c//..aa.a//. /b/c/..aa.a
+/b/c//..aa.a/// /b/c/..aa.a
+/b/c//..aa..aaa /b/c/..aa..aaa
+/b/c//..aa..aa. /b/c/..aa..aa.
+/b/c//..aa..aa/ /b/c/..aa..aa
+/b/c//..aa..a.a /b/c/..aa..a.a
+/b/c//..aa..a.. /b/c/..aa..a..
+/b/c//..aa..a./ /b/c/..aa..a.
+/b/c//..aa..a/a /b/c/..aa..a/a
+/b/c//..aa..a/. /b/c/..aa..a
+/b/c//..aa..a// /b/c/..aa..a
+/b/c//..aa...aa /b/c/..aa...aa
+/b/c//..aa...a. /b/c/..aa...a.
+/b/c//..aa...a/ /b/c/..aa...a
+/b/c//..aa....a /b/c/..aa....a
+/b/c//..aa..... /b/c/..aa.....
+/b/c//..aa..../ /b/c/..aa....
+/b/c//..aa.../a /b/c/..aa.../a
+/b/c//..aa.../. /b/c/..aa...
+/b/c//..aa...// /b/c/..aa...
+/b/c//..aa../aa /b/c/..aa../aa
+/b/c//..aa../a. /b/c/..aa../a.
+/b/c//..aa../a/ /b/c/..aa../a
+/b/c//..aa../.a /b/c/..aa../.a
+/b/c//..aa../.. /b/c
+/b/c//..aa.././ /b/c/..aa..
+/b/c//..aa..//a /b/c/..aa../a
+/b/c//..aa..//. /b/c/..aa..
+/b/c//..aa../// /b/c/..aa..
+/b/c//..aa./aaa /b/c/..aa./aaa
+/b/c//..aa./aa. /b/c/..aa./aa.
+/b/c//..aa./aa/ /b/c/..aa./aa
+/b/c//..aa./a.a /b/c/..aa./a.a
+/b/c//..aa./a.. /b/c/..aa./a..
+/b/c//..aa./a./ /b/c/..aa./a.
+/b/c//..aa./a/a /b/c/..aa./a/a
+/b/c//..aa./a/. /b/c/..aa./a
+/b/c//..aa./a// /b/c/..aa./a
+/b/c//..aa./.aa /b/c/..aa./.aa
+/b/c//..aa./.a. /b/c/..aa./.a.
+/b/c//..aa./.a/ /b/c/..aa./.a
+/b/c//..aa./..a /b/c/..aa./..a
+/b/c//..aa./... /b/c/..aa./...
+/b/c//..aa./../ /b/c
+/b/c//..aa././a /b/c/..aa./a
+/b/c//..aa././. /b/c/..aa.
+/b/c//..aa./.// /b/c/..aa.
+/b/c//..aa.//aa /b/c/..aa./aa
+/b/c//..aa.//a. /b/c/..aa./a.
+/b/c//..aa.//a/ /b/c/..aa./a
+/b/c//..aa.//.a /b/c/..aa./.a
+/b/c//..aa.//.. /b/c
+/b/c//..aa.//./ /b/c/..aa.
+/b/c//..aa.///a /b/c/..aa./a
+/b/c//..aa.///. /b/c/..aa.
+/b/c//..aa.//// /b/c/..aa.
+/b/c//..aa/aaaa /b/c/..aa/aaaa
+/b/c//..aa/aaa. /b/c/..aa/aaa.
+/b/c//..aa/aaa/ /b/c/..aa/aaa
+/b/c//..aa/aa.a /b/c/..aa/aa.a
+/b/c//..aa/aa.. /b/c/..aa/aa..
+/b/c//..aa/aa./ /b/c/..aa/aa.
+/b/c//..aa/aa/a /b/c/..aa/aa/a
+/b/c//..aa/aa/. /b/c/..aa/aa
+/b/c//..aa/aa// /b/c/..aa/aa
+/b/c//..aa/a.aa /b/c/..aa/a.aa
+/b/c//..aa/a.a. /b/c/..aa/a.a.
+/b/c//..aa/a.a/ /b/c/..aa/a.a
+/b/c//..aa/a..a /b/c/..aa/a..a
+/b/c//..aa/a... /b/c/..aa/a...
+/b/c//..aa/a../ /b/c/..aa/a..
+/b/c//..aa/a./a /b/c/..aa/a./a
+/b/c//..aa/a./. /b/c/..aa/a.
+/b/c//..aa/a.// /b/c/..aa/a.
+/b/c//..aa/a/aa /b/c/..aa/a/aa
+/b/c//..aa/a/a. /b/c/..aa/a/a.
+/b/c//..aa/a/a/ /b/c/..aa/a/a
+/b/c//..aa/a/.a /b/c/..aa/a/.a
+/b/c//..aa/a/.. /b/c/..aa
+/b/c//..aa/a/./ /b/c/..aa/a
+/b/c//..aa/a//a /b/c/..aa/a/a
+/b/c//..aa/a//. /b/c/..aa/a
+/b/c//..aa/a/// /b/c/..aa/a
+/b/c//..aa/.aaa /b/c/..aa/.aaa
+/b/c//..aa/.aa. /b/c/..aa/.aa.
+/b/c//..aa/.aa/ /b/c/..aa/.aa
+/b/c//..aa/.a.a /b/c/..aa/.a.a
+/b/c//..aa/.a.. /b/c/..aa/.a..
+/b/c//..aa/.a./ /b/c/..aa/.a.
+/b/c//..aa/.a/a /b/c/..aa/.a/a
+/b/c//..aa/.a/. /b/c/..aa/.a
+/b/c//..aa/.a// /b/c/..aa/.a
+/b/c//..aa/..aa /b/c/..aa/..aa
+/b/c//..aa/..a. /b/c/..aa/..a.
+/b/c//..aa/..a/ /b/c/..aa/..a
+/b/c//..aa/...a /b/c/..aa/...a
+/b/c//..aa/.... /b/c/..aa/....
+/b/c//..aa/.../ /b/c/..aa/...
+/b/c//..aa/../a /b/c/a
+/b/c//..aa/../. /b/c
+/b/c//..aa/..// /b/c
+/b/c//..aa/./aa /b/c/..aa/aa
+/b/c//..aa/./a. /b/c/..aa/a.
+/b/c//..aa/./a/ /b/c/..aa/a
+/b/c//..aa/./.a /b/c/..aa/.a
+/b/c//..aa/./.. /b/c
+/b/c//..aa/././ /b/c/..aa
+/b/c//..aa/.//a /b/c/..aa/a
+/b/c//..aa/.//. /b/c/..aa
+/b/c//..aa/./// /b/c/..aa
+/b/c//..aa//aaa /b/c/..aa/aaa
+/b/c//..aa//aa. /b/c/..aa/aa.
+/b/c//..aa//aa/ /b/c/..aa/aa
+/b/c//..aa//a.a /b/c/..aa/a.a
+/b/c//..aa//a.. /b/c/..aa/a..
+/b/c//..aa//a./ /b/c/..aa/a.
+/b/c//..aa//a/a /b/c/..aa/a/a
+/b/c//..aa//a/. /b/c/..aa/a
+/b/c//..aa//a// /b/c/..aa/a
+/b/c//..aa//.aa /b/c/..aa/.aa
+/b/c//..aa//.a. /b/c/..aa/.a.
+/b/c//..aa//.a/ /b/c/..aa/.a
+/b/c//..aa//..a /b/c/..aa/..a
+/b/c//..aa//... /b/c/..aa/...
+/b/c//..aa//../ /b/c
+/b/c//..aa//./a /b/c/..aa/a
+/b/c//..aa//./. /b/c/..aa
+/b/c//..aa//.// /b/c/..aa
+/b/c//..aa///aa /b/c/..aa/aa
+/b/c//..aa///a. /b/c/..aa/a.
+/b/c//..aa///a/ /b/c/..aa/a
+/b/c//..aa///.a /b/c/..aa/.a
+/b/c//..aa///.. /b/c
+/b/c//..aa///./ /b/c/..aa
+/b/c//..aa////a /b/c/..aa/a
+/b/c//..aa////. /b/c/..aa
+/b/c//..aa///// /b/c/..aa
+/b/c//..a.aaaaa /b/c/..a.aaaaa
+/b/c//..a.aaaa. /b/c/..a.aaaa.
+/b/c//..a.aaaa/ /b/c/..a.aaaa
+/b/c//..a.aaa.a /b/c/..a.aaa.a
+/b/c//..a.aaa.. /b/c/..a.aaa..
+/b/c//..a.aaa./ /b/c/..a.aaa.
+/b/c//..a.aaa/a /b/c/..a.aaa/a
+/b/c//..a.aaa/. /b/c/..a.aaa
+/b/c//..a.aaa// /b/c/..a.aaa
+/b/c//..a.aa.aa /b/c/..a.aa.aa
+/b/c//..a.aa.a. /b/c/..a.aa.a.
+/b/c//..a.aa.a/ /b/c/..a.aa.a
+/b/c//..a.aa..a /b/c/..a.aa..a
+/b/c//..a.aa... /b/c/..a.aa...
+/b/c//..a.aa../ /b/c/..a.aa..
+/b/c//..a.aa./a /b/c/..a.aa./a
+/b/c//..a.aa./. /b/c/..a.aa.
+/b/c//..a.aa.// /b/c/..a.aa.
+/b/c//..a.aa/aa /b/c/..a.aa/aa
+/b/c//..a.aa/a. /b/c/..a.aa/a.
+/b/c//..a.aa/a/ /b/c/..a.aa/a
+/b/c//..a.aa/.a /b/c/..a.aa/.a
+/b/c//..a.aa/.. /b/c
+/b/c//..a.aa/./ /b/c/..a.aa
+/b/c//..a.aa//a /b/c/..a.aa/a
+/b/c//..a.aa//. /b/c/..a.aa
+/b/c//..a.aa/// /b/c/..a.aa
+/b/c//..a.a.aaa /b/c/..a.a.aaa
+/b/c//..a.a.aa. /b/c/..a.a.aa.
+/b/c//..a.a.aa/ /b/c/..a.a.aa
+/b/c//..a.a.a.a /b/c/..a.a.a.a
+/b/c//..a.a.a.. /b/c/..a.a.a..
+/b/c//..a.a.a./ /b/c/..a.a.a.
+/b/c//..a.a.a/a /b/c/..a.a.a/a
+/b/c//..a.a.a/. /b/c/..a.a.a
+/b/c//..a.a.a// /b/c/..a.a.a
+/b/c//..a.a..aa /b/c/..a.a..aa
+/b/c//..a.a..a. /b/c/..a.a..a.
+/b/c//..a.a..a/ /b/c/..a.a..a
+/b/c//..a.a...a /b/c/..a.a...a
+/b/c//..a.a.... /b/c/..a.a....
+/b/c//..a.a.../ /b/c/..a.a...
+/b/c//..a.a../a /b/c/..a.a../a
+/b/c//..a.a../. /b/c/..a.a..
+/b/c//..a.a..// /b/c/..a.a..
+/b/c//..a.a./aa /b/c/..a.a./aa
+/b/c//..a.a./a. /b/c/..a.a./a.
+/b/c//..a.a./a/ /b/c/..a.a./a
+/b/c//..a.a./.a /b/c/..a.a./.a
+/b/c//..a.a./.. /b/c
+/b/c//..a.a././ /b/c/..a.a.
+/b/c//..a.a.//a /b/c/..a.a./a
+/b/c//..a.a.//. /b/c/..a.a.
+/b/c//..a.a./// /b/c/..a.a.
+/b/c//..a.a/aaa /b/c/..a.a/aaa
+/b/c//..a.a/aa. /b/c/..a.a/aa.
+/b/c//..a.a/aa/ /b/c/..a.a/aa
+/b/c//..a.a/a.a /b/c/..a.a/a.a
+/b/c//..a.a/a.. /b/c/..a.a/a..
+/b/c//..a.a/a./ /b/c/..a.a/a.
+/b/c//..a.a/a/a /b/c/..a.a/a/a
+/b/c//..a.a/a/. /b/c/..a.a/a
+/b/c//..a.a/a// /b/c/..a.a/a
+/b/c//..a.a/.aa /b/c/..a.a/.aa
+/b/c//..a.a/.a. /b/c/..a.a/.a.
+/b/c//..a.a/.a/ /b/c/..a.a/.a
+/b/c//..a.a/..a /b/c/..a.a/..a
+/b/c//..a.a/... /b/c/..a.a/...
+/b/c//..a.a/../ /b/c
+/b/c//..a.a/./a /b/c/..a.a/a
+/b/c//..a.a/./. /b/c/..a.a
+/b/c//..a.a/.// /b/c/..a.a
+/b/c//..a.a//aa /b/c/..a.a/aa
+/b/c//..a.a//a. /b/c/..a.a/a.
+/b/c//..a.a//a/ /b/c/..a.a/a
+/b/c//..a.a//.a /b/c/..a.a/.a
+/b/c//..a.a//.. /b/c
+/b/c//..a.a//./ /b/c/..a.a
+/b/c//..a.a///a /b/c/..a.a/a
+/b/c//..a.a///. /b/c/..a.a
+/b/c//..a.a//// /b/c/..a.a
+/b/c//..a..aaaa /b/c/..a..aaaa
+/b/c//..a..aaa. /b/c/..a..aaa.
+/b/c//..a..aaa/ /b/c/..a..aaa
+/b/c//..a..aa.a /b/c/..a..aa.a
+/b/c//..a..aa.. /b/c/..a..aa..
+/b/c//..a..aa./ /b/c/..a..aa.
+/b/c//..a..aa/a /b/c/..a..aa/a
+/b/c//..a..aa/. /b/c/..a..aa
+/b/c//..a..aa// /b/c/..a..aa
+/b/c//..a..a.aa /b/c/..a..a.aa
+/b/c//..a..a.a. /b/c/..a..a.a.
+/b/c//..a..a.a/ /b/c/..a..a.a
+/b/c//..a..a..a /b/c/..a..a..a
+/b/c//..a..a... /b/c/..a..a...
+/b/c//..a..a../ /b/c/..a..a..
+/b/c//..a..a./a /b/c/..a..a./a
+/b/c//..a..a./. /b/c/..a..a.
+/b/c//..a..a.// /b/c/..a..a.
+/b/c//..a..a/aa /b/c/..a..a/aa
+/b/c//..a..a/a. /b/c/..a..a/a.
+/b/c//..a..a/a/ /b/c/..a..a/a
+/b/c//..a..a/.a /b/c/..a..a/.a
+/b/c//..a..a/.. /b/c
+/b/c//..a..a/./ /b/c/..a..a
+/b/c//..a..a//a /b/c/..a..a/a
+/b/c//..a..a//. /b/c/..a..a
+/b/c//..a..a/// /b/c/..a..a
+/b/c//..a...aaa /b/c/..a...aaa
+/b/c//..a...aa. /b/c/..a...aa.
+/b/c//..a...aa/ /b/c/..a...aa
+/b/c//..a...a.a /b/c/..a...a.a
+/b/c//..a...a.. /b/c/..a...a..
+/b/c//..a...a./ /b/c/..a...a.
+/b/c//..a...a/a /b/c/..a...a/a
+/b/c//..a...a/. /b/c/..a...a
+/b/c//..a...a// /b/c/..a...a
+/b/c//..a....aa /b/c/..a....aa
+/b/c//..a....a. /b/c/..a....a.
+/b/c//..a....a/ /b/c/..a....a
+/b/c//..a.....a /b/c/..a.....a
+/b/c//..a...... /b/c/..a......
+/b/c//..a...../ /b/c/..a.....
+/b/c//..a..../a /b/c/..a..../a
+/b/c//..a..../. /b/c/..a....
+/b/c//..a....// /b/c/..a....
+/b/c//..a.../aa /b/c/..a.../aa
+/b/c//..a.../a. /b/c/..a.../a.
+/b/c//..a.../a/ /b/c/..a.../a
+/b/c//..a.../.a /b/c/..a.../.a
+/b/c//..a.../.. /b/c
+/b/c//..a..././ /b/c/..a...
+/b/c//..a...//a /b/c/..a.../a
+/b/c//..a...//. /b/c/..a...
+/b/c//..a.../// /b/c/..a...
+/b/c//..a../aaa /b/c/..a../aaa
+/b/c//..a../aa. /b/c/..a../aa.
+/b/c//..a../aa/ /b/c/..a../aa
+/b/c//..a../a.a /b/c/..a../a.a
+/b/c//..a../a.. /b/c/..a../a..
+/b/c//..a../a./ /b/c/..a../a.
+/b/c//..a../a/a /b/c/..a../a/a
+/b/c//..a../a/. /b/c/..a../a
+/b/c//..a../a// /b/c/..a../a
+/b/c//..a../.aa /b/c/..a../.aa
+/b/c//..a../.a. /b/c/..a../.a.
+/b/c//..a../.a/ /b/c/..a../.a
+/b/c//..a../..a /b/c/..a../..a
+/b/c//..a../... /b/c/..a../...
+/b/c//..a../../ /b/c
+/b/c//..a.././a /b/c/..a../a
+/b/c//..a.././. /b/c/..a..
+/b/c//..a../.// /b/c/..a..
+/b/c//..a..//aa /b/c/..a../aa
+/b/c//..a..//a. /b/c/..a../a.
+/b/c//..a..//a/ /b/c/..a../a
+/b/c//..a..//.a /b/c/..a../.a
+/b/c//..a..//.. /b/c
+/b/c//..a..//./ /b/c/..a..
+/b/c//..a..///a /b/c/..a../a
+/b/c//..a..///. /b/c/..a..
+/b/c//..a..//// /b/c/..a..
+/b/c//..a./aaaa /b/c/..a./aaaa
+/b/c//..a./aaa. /b/c/..a./aaa.
+/b/c//..a./aaa/ /b/c/..a./aaa
+/b/c//..a./aa.a /b/c/..a./aa.a
+/b/c//..a./aa.. /b/c/..a./aa..
+/b/c//..a./aa./ /b/c/..a./aa.
+/b/c//..a./aa/a /b/c/..a./aa/a
+/b/c//..a./aa/. /b/c/..a./aa
+/b/c//..a./aa// /b/c/..a./aa
+/b/c//..a./a.aa /b/c/..a./a.aa
+/b/c//..a./a.a. /b/c/..a./a.a.
+/b/c//..a./a.a/ /b/c/..a./a.a
+/b/c//..a./a..a /b/c/..a./a..a
+/b/c//..a./a... /b/c/..a./a...
+/b/c//..a./a../ /b/c/..a./a..
+/b/c//..a./a./a /b/c/..a./a./a
+/b/c//..a./a./. /b/c/..a./a.
+/b/c//..a./a.// /b/c/..a./a.
+/b/c//..a./a/aa /b/c/..a./a/aa
+/b/c//..a./a/a. /b/c/..a./a/a.
+/b/c//..a./a/a/ /b/c/..a./a/a
+/b/c//..a./a/.a /b/c/..a./a/.a
+/b/c//..a./a/.. /b/c/..a.
+/b/c//..a./a/./ /b/c/..a./a
+/b/c//..a./a//a /b/c/..a./a/a
+/b/c//..a./a//. /b/c/..a./a
+/b/c//..a./a/// /b/c/..a./a
+/b/c//..a./.aaa /b/c/..a./.aaa
+/b/c//..a./.aa. /b/c/..a./.aa.
+/b/c//..a./.aa/ /b/c/..a./.aa
+/b/c//..a./.a.a /b/c/..a./.a.a
+/b/c//..a./.a.. /b/c/..a./.a..
+/b/c//..a./.a./ /b/c/..a./.a.
+/b/c//..a./.a/a /b/c/..a./.a/a
+/b/c//..a./.a/. /b/c/..a./.a
+/b/c//..a./.a// /b/c/..a./.a
+/b/c//..a./..aa /b/c/..a./..aa
+/b/c//..a./..a. /b/c/..a./..a.
+/b/c//..a./..a/ /b/c/..a./..a
+/b/c//..a./...a /b/c/..a./...a
+/b/c//..a./.... /b/c/..a./....
+/b/c//..a./.../ /b/c/..a./...
+/b/c//..a./../a /b/c/a
+/b/c//..a./../. /b/c
+/b/c//..a./..// /b/c
+/b/c//..a././aa /b/c/..a./aa
+/b/c//..a././a. /b/c/..a./a.
+/b/c//..a././a/ /b/c/..a./a
+/b/c//..a././.a /b/c/..a./.a
+/b/c//..a././.. /b/c
+/b/c//..a./././ /b/c/..a.
+/b/c//..a././/a /b/c/..a./a
+/b/c//..a././/. /b/c/..a.
+/b/c//..a././// /b/c/..a.
+/b/c//..a.//aaa /b/c/..a./aaa
+/b/c//..a.//aa. /b/c/..a./aa.
+/b/c//..a.//aa/ /b/c/..a./aa
+/b/c//..a.//a.a /b/c/..a./a.a
+/b/c//..a.//a.. /b/c/..a./a..
+/b/c//..a.//a./ /b/c/..a./a.
+/b/c//..a.//a/a /b/c/..a./a/a
+/b/c//..a.//a/. /b/c/..a./a
+/b/c//..a.//a// /b/c/..a./a
+/b/c//..a.//.aa /b/c/..a./.aa
+/b/c//..a.//.a. /b/c/..a./.a.
+/b/c//..a.//.a/ /b/c/..a./.a
+/b/c//..a.//..a /b/c/..a./..a
+/b/c//..a.//... /b/c/..a./...
+/b/c//..a.//../ /b/c
+/b/c//..a.//./a /b/c/..a./a
+/b/c//..a.//./. /b/c/..a.
+/b/c//..a.//.// /b/c/..a.
+/b/c//..a.///aa /b/c/..a./aa
+/b/c//..a.///a. /b/c/..a./a.
+/b/c//..a.///a/ /b/c/..a./a
+/b/c//..a.///.a /b/c/..a./.a
+/b/c//..a.///.. /b/c
+/b/c//..a.///./ /b/c/..a.
+/b/c//..a.////a /b/c/..a./a
+/b/c//..a.////. /b/c/..a.
+/b/c//..a.///// /b/c/..a.
+/b/c//..a/aaaaa /b/c/..a/aaaaa
+/b/c//..a/aaaa. /b/c/..a/aaaa.
+/b/c//..a/aaaa/ /b/c/..a/aaaa
+/b/c//..a/aaa.a /b/c/..a/aaa.a
+/b/c//..a/aaa.. /b/c/..a/aaa..
+/b/c//..a/aaa./ /b/c/..a/aaa.
+/b/c//..a/aaa/a /b/c/..a/aaa/a
+/b/c//..a/aaa/. /b/c/..a/aaa
+/b/c//..a/aaa// /b/c/..a/aaa
+/b/c//..a/aa.aa /b/c/..a/aa.aa
+/b/c//..a/aa.a. /b/c/..a/aa.a.
+/b/c//..a/aa.a/ /b/c/..a/aa.a
+/b/c//..a/aa..a /b/c/..a/aa..a
+/b/c//..a/aa... /b/c/..a/aa...
+/b/c//..a/aa../ /b/c/..a/aa..
+/b/c//..a/aa./a /b/c/..a/aa./a
+/b/c//..a/aa./. /b/c/..a/aa.
+/b/c//..a/aa.// /b/c/..a/aa.
+/b/c//..a/aa/aa /b/c/..a/aa/aa
+/b/c//..a/aa/a. /b/c/..a/aa/a.
+/b/c//..a/aa/a/ /b/c/..a/aa/a
+/b/c//..a/aa/.a /b/c/..a/aa/.a
+/b/c//..a/aa/.. /b/c/..a
+/b/c//..a/aa/./ /b/c/..a/aa
+/b/c//..a/aa//a /b/c/..a/aa/a
+/b/c//..a/aa//. /b/c/..a/aa
+/b/c//..a/aa/// /b/c/..a/aa
+/b/c//..a/a.aaa /b/c/..a/a.aaa
+/b/c//..a/a.aa. /b/c/..a/a.aa.
+/b/c//..a/a.aa/ /b/c/..a/a.aa
+/b/c//..a/a.a.a /b/c/..a/a.a.a
+/b/c//..a/a.a.. /b/c/..a/a.a..
+/b/c//..a/a.a./ /b/c/..a/a.a.
+/b/c//..a/a.a/a /b/c/..a/a.a/a
+/b/c//..a/a.a/. /b/c/..a/a.a
+/b/c//..a/a.a// /b/c/..a/a.a
+/b/c//..a/a..aa /b/c/..a/a..aa
+/b/c//..a/a..a. /b/c/..a/a..a.
+/b/c//..a/a..a/ /b/c/..a/a..a
+/b/c//..a/a...a /b/c/..a/a...a
+/b/c//..a/a.... /b/c/..a/a....
+/b/c//..a/a.../ /b/c/..a/a...
+/b/c//..a/a../a /b/c/..a/a../a
+/b/c//..a/a../. /b/c/..a/a..
+/b/c//..a/a..// /b/c/..a/a..
+/b/c//..a/a./aa /b/c/..a/a./aa
+/b/c//..a/a./a. /b/c/..a/a./a.
+/b/c//..a/a./a/ /b/c/..a/a./a
+/b/c//..a/a./.a /b/c/..a/a./.a
+/b/c//..a/a./.. /b/c/..a
+/b/c//..a/a././ /b/c/..a/a.
+/b/c//..a/a.//a /b/c/..a/a./a
+/b/c//..a/a.//. /b/c/..a/a.
+/b/c//..a/a./// /b/c/..a/a.
+/b/c//..a/a/aaa /b/c/..a/a/aaa
+/b/c//..a/a/aa. /b/c/..a/a/aa.
+/b/c//..a/a/aa/ /b/c/..a/a/aa
+/b/c//..a/a/a.a /b/c/..a/a/a.a
+/b/c//..a/a/a.. /b/c/..a/a/a..
+/b/c//..a/a/a./ /b/c/..a/a/a.
+/b/c//..a/a/a/a /b/c/..a/a/a/a
+/b/c//..a/a/a/. /b/c/..a/a/a
+/b/c//..a/a/a// /b/c/..a/a/a
+/b/c//..a/a/.aa /b/c/..a/a/.aa
+/b/c//..a/a/.a. /b/c/..a/a/.a.
+/b/c//..a/a/.a/ /b/c/..a/a/.a
+/b/c//..a/a/..a /b/c/..a/a/..a
+/b/c//..a/a/... /b/c/..a/a/...
+/b/c//..a/a/../ /b/c/..a
+/b/c//..a/a/./a /b/c/..a/a/a
+/b/c//..a/a/./. /b/c/..a/a
+/b/c//..a/a/.// /b/c/..a/a
+/b/c//..a/a//aa /b/c/..a/a/aa
+/b/c//..a/a//a. /b/c/..a/a/a.
+/b/c//..a/a//a/ /b/c/..a/a/a
+/b/c//..a/a//.a /b/c/..a/a/.a
+/b/c//..a/a//.. /b/c/..a
+/b/c//..a/a//./ /b/c/..a/a
+/b/c//..a/a///a /b/c/..a/a/a
+/b/c//..a/a///. /b/c/..a/a
+/b/c//..a/a//// /b/c/..a/a
+/b/c//..a/.aaaa /b/c/..a/.aaaa
+/b/c//..a/.aaa. /b/c/..a/.aaa.
+/b/c//..a/.aaa/ /b/c/..a/.aaa
+/b/c//..a/.aa.a /b/c/..a/.aa.a
+/b/c//..a/.aa.. /b/c/..a/.aa..
+/b/c//..a/.aa./ /b/c/..a/.aa.
+/b/c//..a/.aa/a /b/c/..a/.aa/a
+/b/c//..a/.aa/. /b/c/..a/.aa
+/b/c//..a/.aa// /b/c/..a/.aa
+/b/c//..a/.a.aa /b/c/..a/.a.aa
+/b/c//..a/.a.a. /b/c/..a/.a.a.
+/b/c//..a/.a.a/ /b/c/..a/.a.a
+/b/c//..a/.a..a /b/c/..a/.a..a
+/b/c//..a/.a... /b/c/..a/.a...
+/b/c//..a/.a../ /b/c/..a/.a..
+/b/c//..a/.a./a /b/c/..a/.a./a
+/b/c//..a/.a./. /b/c/..a/.a.
+/b/c//..a/.a.// /b/c/..a/.a.
+/b/c//..a/.a/aa /b/c/..a/.a/aa
+/b/c//..a/.a/a. /b/c/..a/.a/a.
+/b/c//..a/.a/a/ /b/c/..a/.a/a
+/b/c//..a/.a/.a /b/c/..a/.a/.a
+/b/c//..a/.a/.. /b/c/..a
+/b/c//..a/.a/./ /b/c/..a/.a
+/b/c//..a/.a//a /b/c/..a/.a/a
+/b/c//..a/.a//. /b/c/..a/.a
+/b/c//..a/.a/// /b/c/..a/.a
+/b/c//..a/..aaa /b/c/..a/..aaa
+/b/c//..a/..aa. /b/c/..a/..aa.
+/b/c//..a/..aa/ /b/c/..a/..aa
+/b/c//..a/..a.a /b/c/..a/..a.a
+/b/c//..a/..a.. /b/c/..a/..a..
+/b/c//..a/..a./ /b/c/..a/..a.
+/b/c//..a/..a/a /b/c/..a/..a/a
+/b/c//..a/..a/. /b/c/..a/..a
+/b/c//..a/..a// /b/c/..a/..a
+/b/c//..a/...aa /b/c/..a/...aa
+/b/c//..a/...a. /b/c/..a/...a.
+/b/c//..a/...a/ /b/c/..a/...a
+/b/c//..a/....a /b/c/..a/....a
+/b/c//..a/..... /b/c/..a/.....
+/b/c//..a/..../ /b/c/..a/....
+/b/c//..a/.../a /b/c/..a/.../a
+/b/c//..a/.../. /b/c/..a/...
+/b/c//..a/...// /b/c/..a/...
+/b/c//..a/../aa /b/c/aa
+/b/c//..a/../a. /b/c/a.
+/b/c//..a/../a/ /b/c/a
+/b/c//..a/../.a /b/c/.a
+/b/c//..a/../.. /b
+/b/c//..a/.././ /b/c
+/b/c//..a/..//a /b/c/a
+/b/c//..a/..//. /b/c
+/b/c//..a/../// /b/c
+/b/c//..a/./aaa /b/c/..a/aaa
+/b/c//..a/./aa. /b/c/..a/aa.
+/b/c//..a/./aa/ /b/c/..a/aa
+/b/c//..a/./a.a /b/c/..a/a.a
+/b/c//..a/./a.. /b/c/..a/a..
+/b/c//..a/./a./ /b/c/..a/a.
+/b/c//..a/./a/a /b/c/..a/a/a
+/b/c//..a/./a/. /b/c/..a/a
+/b/c//..a/./a// /b/c/..a/a
+/b/c//..a/./.aa /b/c/..a/.aa
+/b/c//..a/./.a. /b/c/..a/.a.
+/b/c//..a/./.a/ /b/c/..a/.a
+/b/c//..a/./..a /b/c/..a/..a
+/b/c//..a/./... /b/c/..a/...
+/b/c//..a/./../ /b/c
+/b/c//..a/././a /b/c/..a/a
+/b/c//..a/././. /b/c/..a
+/b/c//..a/./.// /b/c/..a
+/b/c//..a/.//aa /b/c/..a/aa
+/b/c//..a/.//a. /b/c/..a/a.
+/b/c//..a/.//a/ /b/c/..a/a
+/b/c//..a/.//.a /b/c/..a/.a
+/b/c//..a/.//.. /b/c
+/b/c//..a/.//./ /b/c/..a
+/b/c//..a/.///a /b/c/..a/a
+/b/c//..a/.///. /b/c/..a
+/b/c//..a/.//// /b/c/..a
+/b/c//..a//aaaa /b/c/..a/aaaa
+/b/c//..a//aaa. /b/c/..a/aaa.
+/b/c//..a//aaa/ /b/c/..a/aaa
+/b/c//..a//aa.a /b/c/..a/aa.a
+/b/c//..a//aa.. /b/c/..a/aa..
+/b/c//..a//aa./ /b/c/..a/aa.
+/b/c//..a//aa/a /b/c/..a/aa/a
+/b/c//..a//aa/. /b/c/..a/aa
+/b/c//..a//aa// /b/c/..a/aa
+/b/c//..a//a.aa /b/c/..a/a.aa
+/b/c//..a//a.a. /b/c/..a/a.a.
+/b/c//..a//a.a/ /b/c/..a/a.a
+/b/c//..a//a..a /b/c/..a/a..a
+/b/c//..a//a... /b/c/..a/a...
+/b/c//..a//a../ /b/c/..a/a..
+/b/c//..a//a./a /b/c/..a/a./a
+/b/c//..a//a./. /b/c/..a/a.
+/b/c//..a//a.// /b/c/..a/a.
+/b/c//..a//a/aa /b/c/..a/a/aa
+/b/c//..a//a/a. /b/c/..a/a/a.
+/b/c//..a//a/a/ /b/c/..a/a/a
+/b/c//..a//a/.a /b/c/..a/a/.a
+/b/c//..a//a/.. /b/c/..a
+/b/c//..a//a/./ /b/c/..a/a
+/b/c//..a//a//a /b/c/..a/a/a
+/b/c//..a//a//. /b/c/..a/a
+/b/c//..a//a/// /b/c/..a/a
+/b/c//..a//.aaa /b/c/..a/.aaa
+/b/c//..a//.aa. /b/c/..a/.aa.
+/b/c//..a//.aa/ /b/c/..a/.aa
+/b/c//..a//.a.a /b/c/..a/.a.a
+/b/c//..a//.a.. /b/c/..a/.a..
+/b/c//..a//.a./ /b/c/..a/.a.
+/b/c//..a//.a/a /b/c/..a/.a/a
+/b/c//..a//.a/. /b/c/..a/.a
+/b/c//..a//.a// /b/c/..a/.a
+/b/c//..a//..aa /b/c/..a/..aa
+/b/c//..a//..a. /b/c/..a/..a.
+/b/c//..a//..a/ /b/c/..a/..a
+/b/c//..a//...a /b/c/..a/...a
+/b/c//..a//.... /b/c/..a/....
+/b/c//..a//.../ /b/c/..a/...
+/b/c//..a//../a /b/c/a
+/b/c//..a//../. /b/c
+/b/c//..a//..// /b/c
+/b/c//..a//./aa /b/c/..a/aa
+/b/c//..a//./a. /b/c/..a/a.
+/b/c//..a//./a/ /b/c/..a/a
+/b/c//..a//./.a /b/c/..a/.a
+/b/c//..a//./.. /b/c
+/b/c//..a//././ /b/c/..a
+/b/c//..a//.//a /b/c/..a/a
+/b/c//..a//.//. /b/c/..a
+/b/c//..a//./// /b/c/..a
+/b/c//..a///aaa /b/c/..a/aaa
+/b/c//..a///aa. /b/c/..a/aa.
+/b/c//..a///aa/ /b/c/..a/aa
+/b/c//..a///a.a /b/c/..a/a.a
+/b/c//..a///a.. /b/c/..a/a..
+/b/c//..a///a./ /b/c/..a/a.
+/b/c//..a///a/a /b/c/..a/a/a
+/b/c//..a///a/. /b/c/..a/a
+/b/c//..a///a// /b/c/..a/a
+/b/c//..a///.aa /b/c/..a/.aa
+/b/c//..a///.a. /b/c/..a/.a.
+/b/c//..a///.a/ /b/c/..a/.a
+/b/c//..a///..a /b/c/..a/..a
+/b/c//..a///... /b/c/..a/...
+/b/c//..a///../ /b/c
+/b/c//..a///./a /b/c/..a/a
+/b/c//..a///./. /b/c/..a
+/b/c//..a///.// /b/c/..a
+/b/c//..a////aa /b/c/..a/aa
+/b/c//..a////a. /b/c/..a/a.
+/b/c//..a////a/ /b/c/..a/a
+/b/c//..a////.a /b/c/..a/.a
+/b/c//..a////.. /b/c
+/b/c//..a////./ /b/c/..a
+/b/c//..a/////a /b/c/..a/a
+/b/c//..a/////. /b/c/..a
+/b/c//..a////// /b/c/..a
+/b/c//...aaaaaa /b/c/...aaaaaa
+/b/c//...aaaaa. /b/c/...aaaaa.
+/b/c//...aaaaa/ /b/c/...aaaaa
+/b/c//...aaaa.a /b/c/...aaaa.a
+/b/c//...aaaa.. /b/c/...aaaa..
+/b/c//...aaaa./ /b/c/...aaaa.
+/b/c//...aaaa/a /b/c/...aaaa/a
+/b/c//...aaaa/. /b/c/...aaaa
+/b/c//...aaaa// /b/c/...aaaa
+/b/c//...aaa.aa /b/c/...aaa.aa
+/b/c//...aaa.a. /b/c/...aaa.a.
+/b/c//...aaa.a/ /b/c/...aaa.a
+/b/c//...aaa..a /b/c/...aaa..a
+/b/c//...aaa... /b/c/...aaa...
+/b/c//...aaa../ /b/c/...aaa..
+/b/c//...aaa./a /b/c/...aaa./a
+/b/c//...aaa./. /b/c/...aaa.
+/b/c//...aaa.// /b/c/...aaa.
+/b/c//...aaa/aa /b/c/...aaa/aa
+/b/c//...aaa/a. /b/c/...aaa/a.
+/b/c//...aaa/a/ /b/c/...aaa/a
+/b/c//...aaa/.a /b/c/...aaa/.a
+/b/c//...aaa/.. /b/c
+/b/c//...aaa/./ /b/c/...aaa
+/b/c//...aaa//a /b/c/...aaa/a
+/b/c//...aaa//. /b/c/...aaa
+/b/c//...aaa/// /b/c/...aaa
+/b/c//...aa.aaa /b/c/...aa.aaa
+/b/c//...aa.aa. /b/c/...aa.aa.
+/b/c//...aa.aa/ /b/c/...aa.aa
+/b/c//...aa.a.a /b/c/...aa.a.a
+/b/c//...aa.a.. /b/c/...aa.a..
+/b/c//...aa.a./ /b/c/...aa.a.
+/b/c//...aa.a/a /b/c/...aa.a/a
+/b/c//...aa.a/. /b/c/...aa.a
+/b/c//...aa.a// /b/c/...aa.a
+/b/c//...aa..aa /b/c/...aa..aa
+/b/c//...aa..a. /b/c/...aa..a.
+/b/c//...aa..a/ /b/c/...aa..a
+/b/c//...aa...a /b/c/...aa...a
+/b/c//...aa.... /b/c/...aa....
+/b/c//...aa.../ /b/c/...aa...
+/b/c//...aa../a /b/c/...aa../a
+/b/c//...aa../. /b/c/...aa..
+/b/c//...aa..// /b/c/...aa..
+/b/c//...aa./aa /b/c/...aa./aa
+/b/c//...aa./a. /b/c/...aa./a.
+/b/c//...aa./a/ /b/c/...aa./a
+/b/c//...aa./.a /b/c/...aa./.a
+/b/c//...aa./.. /b/c
+/b/c//...aa././ /b/c/...aa.
+/b/c//...aa.//a /b/c/...aa./a
+/b/c//...aa.//. /b/c/...aa.
+/b/c//...aa./// /b/c/...aa.
+/b/c//...aa/aaa /b/c/...aa/aaa
+/b/c//...aa/aa. /b/c/...aa/aa.
+/b/c//...aa/aa/ /b/c/...aa/aa
+/b/c//...aa/a.a /b/c/...aa/a.a
+/b/c//...aa/a.. /b/c/...aa/a..
+/b/c//...aa/a./ /b/c/...aa/a.
+/b/c//...aa/a/a /b/c/...aa/a/a
+/b/c//...aa/a/. /b/c/...aa/a
+/b/c//...aa/a// /b/c/...aa/a
+/b/c//...aa/.aa /b/c/...aa/.aa
+/b/c//...aa/.a. /b/c/...aa/.a.
+/b/c//...aa/.a/ /b/c/...aa/.a
+/b/c//...aa/..a /b/c/...aa/..a
+/b/c//...aa/... /b/c/...aa/...
+/b/c//...aa/../ /b/c
+/b/c//...aa/./a /b/c/...aa/a
+/b/c//...aa/./. /b/c/...aa
+/b/c//...aa/.// /b/c/...aa
+/b/c//...aa//aa /b/c/...aa/aa
+/b/c//...aa//a. /b/c/...aa/a.
+/b/c//...aa//a/ /b/c/...aa/a
+/b/c//...aa//.a /b/c/...aa/.a
+/b/c//...aa//.. /b/c
+/b/c//...aa//./ /b/c/...aa
+/b/c//...aa///a /b/c/...aa/a
+/b/c//...aa///. /b/c/...aa
+/b/c//...aa//// /b/c/...aa
+/b/c//...a.aaaa /b/c/...a.aaaa
+/b/c//...a.aaa. /b/c/...a.aaa.
+/b/c//...a.aaa/ /b/c/...a.aaa
+/b/c//...a.aa.a /b/c/...a.aa.a
+/b/c//...a.aa.. /b/c/...a.aa..
+/b/c//...a.aa./ /b/c/...a.aa.
+/b/c//...a.aa/a /b/c/...a.aa/a
+/b/c//...a.aa/. /b/c/...a.aa
+/b/c//...a.aa// /b/c/...a.aa
+/b/c//...a.a.aa /b/c/...a.a.aa
+/b/c//...a.a.a. /b/c/...a.a.a.
+/b/c//...a.a.a/ /b/c/...a.a.a
+/b/c//...a.a..a /b/c/...a.a..a
+/b/c//...a.a... /b/c/...a.a...
+/b/c//...a.a../ /b/c/...a.a..
+/b/c//...a.a./a /b/c/...a.a./a
+/b/c//...a.a./. /b/c/...a.a.
+/b/c//...a.a.// /b/c/...a.a.
+/b/c//...a.a/aa /b/c/...a.a/aa
+/b/c//...a.a/a. /b/c/...a.a/a.
+/b/c//...a.a/a/ /b/c/...a.a/a
+/b/c//...a.a/.a /b/c/...a.a/.a
+/b/c//...a.a/.. /b/c
+/b/c//...a.a/./ /b/c/...a.a
+/b/c//...a.a//a /b/c/...a.a/a
+/b/c//...a.a//. /b/c/...a.a
+/b/c//...a.a/// /b/c/...a.a
+/b/c//...a..aaa /b/c/...a..aaa
+/b/c//...a..aa. /b/c/...a..aa.
+/b/c//...a..aa/ /b/c/...a..aa
+/b/c//...a..a.a /b/c/...a..a.a
+/b/c//...a..a.. /b/c/...a..a..
+/b/c//...a..a./ /b/c/...a..a.
+/b/c//...a..a/a /b/c/...a..a/a
+/b/c//...a..a/. /b/c/...a..a
+/b/c//...a..a// /b/c/...a..a
+/b/c//...a...aa /b/c/...a...aa
+/b/c//...a...a. /b/c/...a...a.
+/b/c//...a...a/ /b/c/...a...a
+/b/c//...a....a /b/c/...a....a
+/b/c//...a..... /b/c/...a.....
+/b/c//...a..../ /b/c/...a....
+/b/c//...a.../a /b/c/...a.../a
+/b/c//...a.../. /b/c/...a...
+/b/c//...a...// /b/c/...a...
+/b/c//...a../aa /b/c/...a../aa
+/b/c//...a../a. /b/c/...a../a.
+/b/c//...a../a/ /b/c/...a../a
+/b/c//...a../.a /b/c/...a../.a
+/b/c//...a../.. /b/c
+/b/c//...a.././ /b/c/...a..
+/b/c//...a..//a /b/c/...a../a
+/b/c//...a..//. /b/c/...a..
+/b/c//...a../// /b/c/...a..
+/b/c//...a./aaa /b/c/...a./aaa
+/b/c//...a./aa. /b/c/...a./aa.
+/b/c//...a./aa/ /b/c/...a./aa
+/b/c//...a./a.a /b/c/...a./a.a
+/b/c//...a./a.. /b/c/...a./a..
+/b/c//...a./a./ /b/c/...a./a.
+/b/c//...a./a/a /b/c/...a./a/a
+/b/c//...a./a/. /b/c/...a./a
+/b/c//...a./a// /b/c/...a./a
+/b/c//...a./.aa /b/c/...a./.aa
+/b/c//...a./.a. /b/c/...a./.a.
+/b/c//...a./.a/ /b/c/...a./.a
+/b/c//...a./..a /b/c/...a./..a
+/b/c//...a./... /b/c/...a./...
+/b/c//...a./../ /b/c
+/b/c//...a././a /b/c/...a./a
+/b/c//...a././. /b/c/...a.
+/b/c//...a./.// /b/c/...a.
+/b/c//...a.//aa /b/c/...a./aa
+/b/c//...a.//a. /b/c/...a./a.
+/b/c//...a.//a/ /b/c/...a./a
+/b/c//...a.//.a /b/c/...a./.a
+/b/c//...a.//.. /b/c
+/b/c//...a.//./ /b/c/...a.
+/b/c//...a.///a /b/c/...a./a
+/b/c//...a.///. /b/c/...a.
+/b/c//...a.//// /b/c/...a.
+/b/c//...a/aaaa /b/c/...a/aaaa
+/b/c//...a/aaa. /b/c/...a/aaa.
+/b/c//...a/aaa/ /b/c/...a/aaa
+/b/c//...a/aa.a /b/c/...a/aa.a
+/b/c//...a/aa.. /b/c/...a/aa..
+/b/c//...a/aa./ /b/c/...a/aa.
+/b/c//...a/aa/a /b/c/...a/aa/a
+/b/c//...a/aa/. /b/c/...a/aa
+/b/c//...a/aa// /b/c/...a/aa
+/b/c//...a/a.aa /b/c/...a/a.aa
+/b/c//...a/a.a. /b/c/...a/a.a.
+/b/c//...a/a.a/ /b/c/...a/a.a
+/b/c//...a/a..a /b/c/...a/a..a
+/b/c//...a/a... /b/c/...a/a...
+/b/c//...a/a../ /b/c/...a/a..
+/b/c//...a/a./a /b/c/...a/a./a
+/b/c//...a/a./. /b/c/...a/a.
+/b/c//...a/a.// /b/c/...a/a.
+/b/c//...a/a/aa /b/c/...a/a/aa
+/b/c//...a/a/a. /b/c/...a/a/a.
+/b/c//...a/a/a/ /b/c/...a/a/a
+/b/c//...a/a/.a /b/c/...a/a/.a
+/b/c//...a/a/.. /b/c/...a
+/b/c//...a/a/./ /b/c/...a/a
+/b/c//...a/a//a /b/c/...a/a/a
+/b/c//...a/a//. /b/c/...a/a
+/b/c//...a/a/// /b/c/...a/a
+/b/c//...a/.aaa /b/c/...a/.aaa
+/b/c//...a/.aa. /b/c/...a/.aa.
+/b/c//...a/.aa/ /b/c/...a/.aa
+/b/c//...a/.a.a /b/c/...a/.a.a
+/b/c//...a/.a.. /b/c/...a/.a..
+/b/c//...a/.a./ /b/c/...a/.a.
+/b/c//...a/.a/a /b/c/...a/.a/a
+/b/c//...a/.a/. /b/c/...a/.a
+/b/c//...a/.a// /b/c/...a/.a
+/b/c//...a/..aa /b/c/...a/..aa
+/b/c//...a/..a. /b/c/...a/..a.
+/b/c//...a/..a/ /b/c/...a/..a
+/b/c//...a/...a /b/c/...a/...a
+/b/c//...a/.... /b/c/...a/....
+/b/c//...a/.../ /b/c/...a/...
+/b/c//...a/../a /b/c/a
+/b/c//...a/../. /b/c
+/b/c//...a/..// /b/c
+/b/c//...a/./aa /b/c/...a/aa
+/b/c//...a/./a. /b/c/...a/a.
+/b/c//...a/./a/ /b/c/...a/a
+/b/c//...a/./.a /b/c/...a/.a
+/b/c//...a/./.. /b/c
+/b/c//...a/././ /b/c/...a
+/b/c//...a/.//a /b/c/...a/a
+/b/c//...a/.//. /b/c/...a
+/b/c//...a/./// /b/c/...a
+/b/c//...a//aaa /b/c/...a/aaa
+/b/c//...a//aa. /b/c/...a/aa.
+/b/c//...a//aa/ /b/c/...a/aa
+/b/c//...a//a.a /b/c/...a/a.a
+/b/c//...a//a.. /b/c/...a/a..
+/b/c//...a//a./ /b/c/...a/a.
+/b/c//...a//a/a /b/c/...a/a/a
+/b/c//...a//a/. /b/c/...a/a
+/b/c//...a//a// /b/c/...a/a
+/b/c//...a//.aa /b/c/...a/.aa
+/b/c//...a//.a. /b/c/...a/.a.
+/b/c//...a//.a/ /b/c/...a/.a
+/b/c//...a//..a /b/c/...a/..a
+/b/c//...a//... /b/c/...a/...
+/b/c//...a//../ /b/c
+/b/c//...a//./a /b/c/...a/a
+/b/c//...a//./. /b/c/...a
+/b/c//...a//.// /b/c/...a
+/b/c//...a///aa /b/c/...a/aa
+/b/c//...a///a. /b/c/...a/a.
+/b/c//...a///a/ /b/c/...a/a
+/b/c//...a///.a /b/c/...a/.a
+/b/c//...a///.. /b/c
+/b/c//...a///./ /b/c/...a
+/b/c//...a////a /b/c/...a/a
+/b/c//...a////. /b/c/...a
+/b/c//...a///// /b/c/...a
+/b/c//....aaaaa /b/c/....aaaaa
+/b/c//....aaaa. /b/c/....aaaa.
+/b/c//....aaaa/ /b/c/....aaaa
+/b/c//....aaa.a /b/c/....aaa.a
+/b/c//....aaa.. /b/c/....aaa..
+/b/c//....aaa./ /b/c/....aaa.
+/b/c//....aaa/a /b/c/....aaa/a
+/b/c//....aaa/. /b/c/....aaa
+/b/c//....aaa// /b/c/....aaa
+/b/c//....aa.aa /b/c/....aa.aa
+/b/c//....aa.a. /b/c/....aa.a.
+/b/c//....aa.a/ /b/c/....aa.a
+/b/c//....aa..a /b/c/....aa..a
+/b/c//....aa... /b/c/....aa...
+/b/c//....aa../ /b/c/....aa..
+/b/c//....aa./a /b/c/....aa./a
+/b/c//....aa./. /b/c/....aa.
+/b/c//....aa.// /b/c/....aa.
+/b/c//....aa/aa /b/c/....aa/aa
+/b/c//....aa/a. /b/c/....aa/a.
+/b/c//....aa/a/ /b/c/....aa/a
+/b/c//....aa/.a /b/c/....aa/.a
+/b/c//....aa/.. /b/c
+/b/c//....aa/./ /b/c/....aa
+/b/c//....aa//a /b/c/....aa/a
+/b/c//....aa//. /b/c/....aa
+/b/c//....aa/// /b/c/....aa
+/b/c//....a.aaa /b/c/....a.aaa
+/b/c//....a.aa. /b/c/....a.aa.
+/b/c//....a.aa/ /b/c/....a.aa
+/b/c//....a.a.a /b/c/....a.a.a
+/b/c//....a.a.. /b/c/....a.a..
+/b/c//....a.a./ /b/c/....a.a.
+/b/c//....a.a/a /b/c/....a.a/a
+/b/c//....a.a/. /b/c/....a.a
+/b/c//....a.a// /b/c/....a.a
+/b/c//....a..aa /b/c/....a..aa
+/b/c//....a..a. /b/c/....a..a.
+/b/c//....a..a/ /b/c/....a..a
+/b/c//....a...a /b/c/....a...a
+/b/c//....a.... /b/c/....a....
+/b/c//....a.../ /b/c/....a...
+/b/c//....a../a /b/c/....a../a
+/b/c//....a../. /b/c/....a..
+/b/c//....a..// /b/c/....a..
+/b/c//....a./aa /b/c/....a./aa
+/b/c//....a./a. /b/c/....a./a.
+/b/c//....a./a/ /b/c/....a./a
+/b/c//....a./.a /b/c/....a./.a
+/b/c//....a./.. /b/c
+/b/c//....a././ /b/c/....a.
+/b/c//....a.//a /b/c/....a./a
+/b/c//....a.//. /b/c/....a.
+/b/c//....a./// /b/c/....a.
+/b/c//....a/aaa /b/c/....a/aaa
+/b/c//....a/aa. /b/c/....a/aa.
+/b/c//....a/aa/ /b/c/....a/aa
+/b/c//....a/a.a /b/c/....a/a.a
+/b/c//....a/a.. /b/c/....a/a..
+/b/c//....a/a./ /b/c/....a/a.
+/b/c//....a/a/a /b/c/....a/a/a
+/b/c//....a/a/. /b/c/....a/a
+/b/c//....a/a// /b/c/....a/a
+/b/c//....a/.aa /b/c/....a/.aa
+/b/c//....a/.a. /b/c/....a/.a.
+/b/c//....a/.a/ /b/c/....a/.a
+/b/c//....a/..a /b/c/....a/..a
+/b/c//....a/... /b/c/....a/...
+/b/c//....a/../ /b/c
+/b/c//....a/./a /b/c/....a/a
+/b/c//....a/./. /b/c/....a
+/b/c//....a/.// /b/c/....a
+/b/c//....a//aa /b/c/....a/aa
+/b/c//....a//a. /b/c/....a/a.
+/b/c//....a//a/ /b/c/....a/a
+/b/c//....a//.a /b/c/....a/.a
+/b/c//....a//.. /b/c
+/b/c//....a//./ /b/c/....a
+/b/c//....a///a /b/c/....a/a
+/b/c//....a///. /b/c/....a
+/b/c//....a//// /b/c/....a
+/b/c//.....aaaa /b/c/.....aaaa
+/b/c//.....aaa. /b/c/.....aaa.
+/b/c//.....aaa/ /b/c/.....aaa
+/b/c//.....aa.a /b/c/.....aa.a
+/b/c//.....aa.. /b/c/.....aa..
+/b/c//.....aa./ /b/c/.....aa.
+/b/c//.....aa/a /b/c/.....aa/a
+/b/c//.....aa/. /b/c/.....aa
+/b/c//.....aa// /b/c/.....aa
+/b/c//.....a.aa /b/c/.....a.aa
+/b/c//.....a.a. /b/c/.....a.a.
+/b/c//.....a.a/ /b/c/.....a.a
+/b/c//.....a..a /b/c/.....a..a
+/b/c//.....a... /b/c/.....a...
+/b/c//.....a../ /b/c/.....a..
+/b/c//.....a./a /b/c/.....a./a
+/b/c//.....a./. /b/c/.....a.
+/b/c//.....a.// /b/c/.....a.
+/b/c//.....a/aa /b/c/.....a/aa
+/b/c//.....a/a. /b/c/.....a/a.
+/b/c//.....a/a/ /b/c/.....a/a
+/b/c//.....a/.a /b/c/.....a/.a
+/b/c//.....a/.. /b/c
+/b/c//.....a/./ /b/c/.....a
+/b/c//.....a//a /b/c/.....a/a
+/b/c//.....a//. /b/c/.....a
+/b/c//.....a/// /b/c/.....a
+/b/c//......aaa /b/c/......aaa
+/b/c//......aa. /b/c/......aa.
+/b/c//......aa/ /b/c/......aa
+/b/c//......a.a /b/c/......a.a
+/b/c//......a.. /b/c/......a..
+/b/c//......a./ /b/c/......a.
+/b/c//......a/a /b/c/......a/a
+/b/c//......a/. /b/c/......a
+/b/c//......a// /b/c/......a
+/b/c//.......aa /b/c/.......aa
+/b/c//.......a. /b/c/.......a.
+/b/c//.......a/ /b/c/.......a
+/b/c//........a /b/c/........a
+/b/c//......... /b/c/.........
+/b/c//......../ /b/c/........
+/b/c//......./a /b/c/......./a
+/b/c//......./. /b/c/.......
+/b/c//.......// /b/c/.......
+/b/c//....../aa /b/c/....../aa
+/b/c//....../a. /b/c/....../a.
+/b/c//....../a/ /b/c/....../a
+/b/c//....../.a /b/c/....../.a
+/b/c//....../.. /b/c
+/b/c//.....././ /b/c/......
+/b/c//......//a /b/c/....../a
+/b/c//......//. /b/c/......
+/b/c//....../// /b/c/......
+/b/c//...../aaa /b/c/...../aaa
+/b/c//...../aa. /b/c/...../aa.
+/b/c//...../aa/ /b/c/...../aa
+/b/c//...../a.a /b/c/...../a.a
+/b/c//...../a.. /b/c/...../a..
+/b/c//...../a./ /b/c/...../a.
+/b/c//...../a/a /b/c/...../a/a
+/b/c//...../a/. /b/c/...../a
+/b/c//...../a// /b/c/...../a
+/b/c//...../.aa /b/c/...../.aa
+/b/c//...../.a. /b/c/...../.a.
+/b/c//...../.a/ /b/c/...../.a
+/b/c//...../..a /b/c/...../..a
+/b/c//...../... /b/c/...../...
+/b/c//...../../ /b/c
+/b/c//....././a /b/c/...../a
+/b/c//....././. /b/c/.....
+/b/c//...../.// /b/c/.....
+/b/c//.....//aa /b/c/...../aa
+/b/c//.....//a. /b/c/...../a.
+/b/c//.....//a/ /b/c/...../a
+/b/c//.....//.a /b/c/...../.a
+/b/c//.....//.. /b/c
+/b/c//.....//./ /b/c/.....
+/b/c//.....///a /b/c/...../a
+/b/c//.....///. /b/c/.....
+/b/c//.....//// /b/c/.....
+/b/c//..../aaaa /b/c/..../aaaa
+/b/c//..../aaa. /b/c/..../aaa.
+/b/c//..../aaa/ /b/c/..../aaa
+/b/c//..../aa.a /b/c/..../aa.a
+/b/c//..../aa.. /b/c/..../aa..
+/b/c//..../aa./ /b/c/..../aa.
+/b/c//..../aa/a /b/c/..../aa/a
+/b/c//..../aa/. /b/c/..../aa
+/b/c//..../aa// /b/c/..../aa
+/b/c//..../a.aa /b/c/..../a.aa
+/b/c//..../a.a. /b/c/..../a.a.
+/b/c//..../a.a/ /b/c/..../a.a
+/b/c//..../a..a /b/c/..../a..a
+/b/c//..../a... /b/c/..../a...
+/b/c//..../a../ /b/c/..../a..
+/b/c//..../a./a /b/c/..../a./a
+/b/c//..../a./. /b/c/..../a.
+/b/c//..../a.// /b/c/..../a.
+/b/c//..../a/aa /b/c/..../a/aa
+/b/c//..../a/a. /b/c/..../a/a.
+/b/c//..../a/a/ /b/c/..../a/a
+/b/c//..../a/.a /b/c/..../a/.a
+/b/c//..../a/.. /b/c/....
+/b/c//..../a/./ /b/c/..../a
+/b/c//..../a//a /b/c/..../a/a
+/b/c//..../a//. /b/c/..../a
+/b/c//..../a/// /b/c/..../a
+/b/c//..../.aaa /b/c/..../.aaa
+/b/c//..../.aa. /b/c/..../.aa.
+/b/c//..../.aa/ /b/c/..../.aa
+/b/c//..../.a.a /b/c/..../.a.a
+/b/c//..../.a.. /b/c/..../.a..
+/b/c//..../.a./ /b/c/..../.a.
+/b/c//..../.a/a /b/c/..../.a/a
+/b/c//..../.a/. /b/c/..../.a
+/b/c//..../.a// /b/c/..../.a
+/b/c//..../..aa /b/c/..../..aa
+/b/c//..../..a. /b/c/..../..a.
+/b/c//..../..a/ /b/c/..../..a
+/b/c//..../...a /b/c/..../...a
+/b/c//..../.... /b/c/..../....
+/b/c//..../.../ /b/c/..../...
+/b/c//..../../a /b/c/a
+/b/c//..../../. /b/c
+/b/c//..../..// /b/c
+/b/c//...././aa /b/c/..../aa
+/b/c//...././a. /b/c/..../a.
+/b/c//...././a/ /b/c/..../a
+/b/c//...././.a /b/c/..../.a
+/b/c//...././.. /b/c
+/b/c//..../././ /b/c/....
+/b/c//...././/a /b/c/..../a
+/b/c//...././/. /b/c/....
+/b/c//...././// /b/c/....
+/b/c//....//aaa /b/c/..../aaa
+/b/c//....//aa. /b/c/..../aa.
+/b/c//....//aa/ /b/c/..../aa
+/b/c//....//a.a /b/c/..../a.a
+/b/c//....//a.. /b/c/..../a..
+/b/c//....//a./ /b/c/..../a.
+/b/c//....//a/a /b/c/..../a/a
+/b/c//....//a/. /b/c/..../a
+/b/c//....//a// /b/c/..../a
+/b/c//....//.aa /b/c/..../.aa
+/b/c//....//.a. /b/c/..../.a.
+/b/c//....//.a/ /b/c/..../.a
+/b/c//....//..a /b/c/..../..a
+/b/c//....//... /b/c/..../...
+/b/c//....//../ /b/c
+/b/c//....//./a /b/c/..../a
+/b/c//....//./. /b/c/....
+/b/c//....//.// /b/c/....
+/b/c//....///aa /b/c/..../aa
+/b/c//....///a. /b/c/..../a.
+/b/c//....///a/ /b/c/..../a
+/b/c//....///.a /b/c/..../.a
+/b/c//....///.. /b/c
+/b/c//....///./ /b/c/....
+/b/c//....////a /b/c/..../a
+/b/c//....////. /b/c/....
+/b/c//....///// /b/c/....
+/b/c//.../aaaaa /b/c/.../aaaaa
+/b/c//.../aaaa. /b/c/.../aaaa.
+/b/c//.../aaaa/ /b/c/.../aaaa
+/b/c//.../aaa.a /b/c/.../aaa.a
+/b/c//.../aaa.. /b/c/.../aaa..
+/b/c//.../aaa./ /b/c/.../aaa.
+/b/c//.../aaa/a /b/c/.../aaa/a
+/b/c//.../aaa/. /b/c/.../aaa
+/b/c//.../aaa// /b/c/.../aaa
+/b/c//.../aa.aa /b/c/.../aa.aa
+/b/c//.../aa.a. /b/c/.../aa.a.
+/b/c//.../aa.a/ /b/c/.../aa.a
+/b/c//.../aa..a /b/c/.../aa..a
+/b/c//.../aa... /b/c/.../aa...
+/b/c//.../aa../ /b/c/.../aa..
+/b/c//.../aa./a /b/c/.../aa./a
+/b/c//.../aa./. /b/c/.../aa.
+/b/c//.../aa.// /b/c/.../aa.
+/b/c//.../aa/aa /b/c/.../aa/aa
+/b/c//.../aa/a. /b/c/.../aa/a.
+/b/c//.../aa/a/ /b/c/.../aa/a
+/b/c//.../aa/.a /b/c/.../aa/.a
+/b/c//.../aa/.. /b/c/...
+/b/c//.../aa/./ /b/c/.../aa
+/b/c//.../aa//a /b/c/.../aa/a
+/b/c//.../aa//. /b/c/.../aa
+/b/c//.../aa/// /b/c/.../aa
+/b/c//.../a.aaa /b/c/.../a.aaa
+/b/c//.../a.aa. /b/c/.../a.aa.
+/b/c//.../a.aa/ /b/c/.../a.aa
+/b/c//.../a.a.a /b/c/.../a.a.a
+/b/c//.../a.a.. /b/c/.../a.a..
+/b/c//.../a.a./ /b/c/.../a.a.
+/b/c//.../a.a/a /b/c/.../a.a/a
+/b/c//.../a.a/. /b/c/.../a.a
+/b/c//.../a.a// /b/c/.../a.a
+/b/c//.../a..aa /b/c/.../a..aa
+/b/c//.../a..a. /b/c/.../a..a.
+/b/c//.../a..a/ /b/c/.../a..a
+/b/c//.../a...a /b/c/.../a...a
+/b/c//.../a.... /b/c/.../a....
+/b/c//.../a.../ /b/c/.../a...
+/b/c//.../a../a /b/c/.../a../a
+/b/c//.../a../. /b/c/.../a..
+/b/c//.../a..// /b/c/.../a..
+/b/c//.../a./aa /b/c/.../a./aa
+/b/c//.../a./a. /b/c/.../a./a.
+/b/c//.../a./a/ /b/c/.../a./a
+/b/c//.../a./.a /b/c/.../a./.a
+/b/c//.../a./.. /b/c/...
+/b/c//.../a././ /b/c/.../a.
+/b/c//.../a.//a /b/c/.../a./a
+/b/c//.../a.//. /b/c/.../a.
+/b/c//.../a./// /b/c/.../a.
+/b/c//.../a/aaa /b/c/.../a/aaa
+/b/c//.../a/aa. /b/c/.../a/aa.
+/b/c//.../a/aa/ /b/c/.../a/aa
+/b/c//.../a/a.a /b/c/.../a/a.a
+/b/c//.../a/a.. /b/c/.../a/a..
+/b/c//.../a/a./ /b/c/.../a/a.
+/b/c//.../a/a/a /b/c/.../a/a/a
+/b/c//.../a/a/. /b/c/.../a/a
+/b/c//.../a/a// /b/c/.../a/a
+/b/c//.../a/.aa /b/c/.../a/.aa
+/b/c//.../a/.a. /b/c/.../a/.a.
+/b/c//.../a/.a/ /b/c/.../a/.a
+/b/c//.../a/..a /b/c/.../a/..a
+/b/c//.../a/... /b/c/.../a/...
+/b/c//.../a/../ /b/c/...
+/b/c//.../a/./a /b/c/.../a/a
+/b/c//.../a/./. /b/c/.../a
+/b/c//.../a/.// /b/c/.../a
+/b/c//.../a//aa /b/c/.../a/aa
+/b/c//.../a//a. /b/c/.../a/a.
+/b/c//.../a//a/ /b/c/.../a/a
+/b/c//.../a//.a /b/c/.../a/.a
+/b/c//.../a//.. /b/c/...
+/b/c//.../a//./ /b/c/.../a
+/b/c//.../a///a /b/c/.../a/a
+/b/c//.../a///. /b/c/.../a
+/b/c//.../a//// /b/c/.../a
+/b/c//.../.aaaa /b/c/.../.aaaa
+/b/c//.../.aaa. /b/c/.../.aaa.
+/b/c//.../.aaa/ /b/c/.../.aaa
+/b/c//.../.aa.a /b/c/.../.aa.a
+/b/c//.../.aa.. /b/c/.../.aa..
+/b/c//.../.aa./ /b/c/.../.aa.
+/b/c//.../.aa/a /b/c/.../.aa/a
+/b/c//.../.aa/. /b/c/.../.aa
+/b/c//.../.aa// /b/c/.../.aa
+/b/c//.../.a.aa /b/c/.../.a.aa
+/b/c//.../.a.a. /b/c/.../.a.a.
+/b/c//.../.a.a/ /b/c/.../.a.a
+/b/c//.../.a..a /b/c/.../.a..a
+/b/c//.../.a... /b/c/.../.a...
+/b/c//.../.a../ /b/c/.../.a..
+/b/c//.../.a./a /b/c/.../.a./a
+/b/c//.../.a./. /b/c/.../.a.
+/b/c//.../.a.// /b/c/.../.a.
+/b/c//.../.a/aa /b/c/.../.a/aa
+/b/c//.../.a/a. /b/c/.../.a/a.
+/b/c//.../.a/a/ /b/c/.../.a/a
+/b/c//.../.a/.a /b/c/.../.a/.a
+/b/c//.../.a/.. /b/c/...
+/b/c//.../.a/./ /b/c/.../.a
+/b/c//.../.a//a /b/c/.../.a/a
+/b/c//.../.a//. /b/c/.../.a
+/b/c//.../.a/// /b/c/.../.a
+/b/c//.../..aaa /b/c/.../..aaa
+/b/c//.../..aa. /b/c/.../..aa.
+/b/c//.../..aa/ /b/c/.../..aa
+/b/c//.../..a.a /b/c/.../..a.a
+/b/c//.../..a.. /b/c/.../..a..
+/b/c//.../..a./ /b/c/.../..a.
+/b/c//.../..a/a /b/c/.../..a/a
+/b/c//.../..a/. /b/c/.../..a
+/b/c//.../..a// /b/c/.../..a
+/b/c//.../...aa /b/c/.../...aa
+/b/c//.../...a. /b/c/.../...a.
+/b/c//.../...a/ /b/c/.../...a
+/b/c//.../....a /b/c/.../....a
+/b/c//.../..... /b/c/.../.....
+/b/c//.../..../ /b/c/.../....
+/b/c//.../.../a /b/c/.../.../a
+/b/c//.../.../. /b/c/.../...
+/b/c//.../...// /b/c/.../...
+/b/c//.../../aa /b/c/aa
+/b/c//.../../a. /b/c/a.
+/b/c//.../../a/ /b/c/a
+/b/c//.../../.a /b/c/.a
+/b/c//.../../.. /b
+/b/c//.../.././ /b/c
+/b/c//.../..//a /b/c/a
+/b/c//.../..//. /b/c
+/b/c//.../../// /b/c
+/b/c//..././aaa /b/c/.../aaa
+/b/c//..././aa. /b/c/.../aa.
+/b/c//..././aa/ /b/c/.../aa
+/b/c//..././a.a /b/c/.../a.a
+/b/c//..././a.. /b/c/.../a..
+/b/c//..././a./ /b/c/.../a.
+/b/c//..././a/a /b/c/.../a/a
+/b/c//..././a/. /b/c/.../a
+/b/c//..././a// /b/c/.../a
+/b/c//..././.aa /b/c/.../.aa
+/b/c//..././.a. /b/c/.../.a.
+/b/c//..././.a/ /b/c/.../.a
+/b/c//..././..a /b/c/.../..a
+/b/c//..././... /b/c/.../...
+/b/c//..././../ /b/c
+/b/c//.../././a /b/c/.../a
+/b/c//.../././. /b/c/...
+/b/c//..././.// /b/c/...
+/b/c//..././/aa /b/c/.../aa
+/b/c//..././/a. /b/c/.../a.
+/b/c//..././/a/ /b/c/.../a
+/b/c//..././/.a /b/c/.../.a
+/b/c//..././/.. /b/c
+/b/c//..././/./ /b/c/...
+/b/c//..././//a /b/c/.../a
+/b/c//..././//. /b/c/...
+/b/c//..././/// /b/c/...
+/b/c//...//aaaa /b/c/.../aaaa
+/b/c//...//aaa. /b/c/.../aaa.
+/b/c//...//aaa/ /b/c/.../aaa
+/b/c//...//aa.a /b/c/.../aa.a
+/b/c//...//aa.. /b/c/.../aa..
+/b/c//...//aa./ /b/c/.../aa.
+/b/c//...//aa/a /b/c/.../aa/a
+/b/c//...//aa/. /b/c/.../aa
+/b/c//...//aa// /b/c/.../aa
+/b/c//...//a.aa /b/c/.../a.aa
+/b/c//...//a.a. /b/c/.../a.a.
+/b/c//...//a.a/ /b/c/.../a.a
+/b/c//...//a..a /b/c/.../a..a
+/b/c//...//a... /b/c/.../a...
+/b/c//...//a../ /b/c/.../a..
+/b/c//...//a./a /b/c/.../a./a
+/b/c//...//a./. /b/c/.../a.
+/b/c//...//a.// /b/c/.../a.
+/b/c//...//a/aa /b/c/.../a/aa
+/b/c//...//a/a. /b/c/.../a/a.
+/b/c//...//a/a/ /b/c/.../a/a
+/b/c//...//a/.a /b/c/.../a/.a
+/b/c//...//a/.. /b/c/...
+/b/c//...//a/./ /b/c/.../a
+/b/c//...//a//a /b/c/.../a/a
+/b/c//...//a//. /b/c/.../a
+/b/c//...//a/// /b/c/.../a
+/b/c//...//.aaa /b/c/.../.aaa
+/b/c//...//.aa. /b/c/.../.aa.
+/b/c//...//.aa/ /b/c/.../.aa
+/b/c//...//.a.a /b/c/.../.a.a
+/b/c//...//.a.. /b/c/.../.a..
+/b/c//...//.a./ /b/c/.../.a.
+/b/c//...//.a/a /b/c/.../.a/a
+/b/c//...//.a/. /b/c/.../.a
+/b/c//...//.a// /b/c/.../.a
+/b/c//...//..aa /b/c/.../..aa
+/b/c//...//..a. /b/c/.../..a.
+/b/c//...//..a/ /b/c/.../..a
+/b/c//...//...a /b/c/.../...a
+/b/c//...//.... /b/c/.../....
+/b/c//...//.../ /b/c/.../...
+/b/c//...//../a /b/c/a
+/b/c//...//../. /b/c
+/b/c//...//..// /b/c
+/b/c//...//./aa /b/c/.../aa
+/b/c//...//./a. /b/c/.../a.
+/b/c//...//./a/ /b/c/.../a
+/b/c//...//./.a /b/c/.../.a
+/b/c//...//./.. /b/c
+/b/c//...//././ /b/c/...
+/b/c//...//.//a /b/c/.../a
+/b/c//...//.//. /b/c/...
+/b/c//...//./// /b/c/...
+/b/c//...///aaa /b/c/.../aaa
+/b/c//...///aa. /b/c/.../aa.
+/b/c//...///aa/ /b/c/.../aa
+/b/c//...///a.a /b/c/.../a.a
+/b/c//...///a.. /b/c/.../a..
+/b/c//...///a./ /b/c/.../a.
+/b/c//...///a/a /b/c/.../a/a
+/b/c//...///a/. /b/c/.../a
+/b/c//...///a// /b/c/.../a
+/b/c//...///.aa /b/c/.../.aa
+/b/c//...///.a. /b/c/.../.a.
+/b/c//...///.a/ /b/c/.../.a
+/b/c//...///..a /b/c/.../..a
+/b/c//...///... /b/c/.../...
+/b/c//...///../ /b/c
+/b/c//...///./a /b/c/.../a
+/b/c//...///./. /b/c/...
+/b/c//...///.// /b/c/...
+/b/c//...////aa /b/c/.../aa
+/b/c//...////a. /b/c/.../a.
+/b/c//...////a/ /b/c/.../a
+/b/c//...////.a /b/c/.../.a
+/b/c//...////.. /b/c
+/b/c//...////./ /b/c/...
+/b/c//.../////a /b/c/.../a
+/b/c//.../////. /b/c/...
+/b/c//...////// /b/c/...
+/b/c//../aaaaaa /b/aaaaaa
+/b/c//../aaaaa. /b/aaaaa.
+/b/c//../aaaaa/ /b/aaaaa
+/b/c//../aaaa.a /b/aaaa.a
+/b/c//../aaaa.. /b/aaaa..
+/b/c//../aaaa./ /b/aaaa.
+/b/c//../aaaa/a /b/aaaa/a
+/b/c//../aaaa/. /b/aaaa
+/b/c//../aaaa// /b/aaaa
+/b/c//../aaa.aa /b/aaa.aa
+/b/c//../aaa.a. /b/aaa.a.
+/b/c//../aaa.a/ /b/aaa.a
+/b/c//../aaa..a /b/aaa..a
+/b/c//../aaa... /b/aaa...
+/b/c//../aaa../ /b/aaa..
+/b/c//../aaa./a /b/aaa./a
+/b/c//../aaa./. /b/aaa.
+/b/c//../aaa.// /b/aaa.
+/b/c//../aaa/aa /b/aaa/aa
+/b/c//../aaa/a. /b/aaa/a.
+/b/c//../aaa/a/ /b/aaa/a
+/b/c//../aaa/.a /b/aaa/.a
+/b/c//../aaa/.. /b
+/b/c//../aaa/./ /b/aaa
+/b/c//../aaa//a /b/aaa/a
+/b/c//../aaa//. /b/aaa
+/b/c//../aaa/// /b/aaa
+/b/c//../aa.aaa /b/aa.aaa
+/b/c//../aa.aa. /b/aa.aa.
+/b/c//../aa.aa/ /b/aa.aa
+/b/c//../aa.a.a /b/aa.a.a
+/b/c//../aa.a.. /b/aa.a..
+/b/c//../aa.a./ /b/aa.a.
+/b/c//../aa.a/a /b/aa.a/a
+/b/c//../aa.a/. /b/aa.a
+/b/c//../aa.a// /b/aa.a
+/b/c//../aa..aa /b/aa..aa
+/b/c//../aa..a. /b/aa..a.
+/b/c//../aa..a/ /b/aa..a
+/b/c//../aa...a /b/aa...a
+/b/c//../aa.... /b/aa....
+/b/c//../aa.../ /b/aa...
+/b/c//../aa../a /b/aa../a
+/b/c//../aa../. /b/aa..
+/b/c//../aa..// /b/aa..
+/b/c//../aa./aa /b/aa./aa
+/b/c//../aa./a. /b/aa./a.
+/b/c//../aa./a/ /b/aa./a
+/b/c//../aa./.a /b/aa./.a
+/b/c//../aa./.. /b
+/b/c//../aa././ /b/aa.
+/b/c//../aa.//a /b/aa./a
+/b/c//../aa.//. /b/aa.
+/b/c//../aa./// /b/aa.
+/b/c//../aa/aaa /b/aa/aaa
+/b/c//../aa/aa. /b/aa/aa.
+/b/c//../aa/aa/ /b/aa/aa
+/b/c//../aa/a.a /b/aa/a.a
+/b/c//../aa/a.. /b/aa/a..
+/b/c//../aa/a./ /b/aa/a.
+/b/c//../aa/a/a /b/aa/a/a
+/b/c//../aa/a/. /b/aa/a
+/b/c//../aa/a// /b/aa/a
+/b/c//../aa/.aa /b/aa/.aa
+/b/c//../aa/.a. /b/aa/.a.
+/b/c//../aa/.a/ /b/aa/.a
+/b/c//../aa/..a /b/aa/..a
+/b/c//../aa/... /b/aa/...
+/b/c//../aa/../ /b
+/b/c//../aa/./a /b/aa/a
+/b/c//../aa/./. /b/aa
+/b/c//../aa/.// /b/aa
+/b/c//../aa//aa /b/aa/aa
+/b/c//../aa//a. /b/aa/a.
+/b/c//../aa//a/ /b/aa/a
+/b/c//../aa//.a /b/aa/.a
+/b/c//../aa//.. /b
+/b/c//../aa//./ /b/aa
+/b/c//../aa///a /b/aa/a
+/b/c//../aa///. /b/aa
+/b/c//../aa//// /b/aa
+/b/c//../a.aaaa /b/a.aaaa
+/b/c//../a.aaa. /b/a.aaa.
+/b/c//../a.aaa/ /b/a.aaa
+/b/c//../a.aa.a /b/a.aa.a
+/b/c//../a.aa.. /b/a.aa..
+/b/c//../a.aa./ /b/a.aa.
+/b/c//../a.aa/a /b/a.aa/a
+/b/c//../a.aa/. /b/a.aa
+/b/c//../a.aa// /b/a.aa
+/b/c//../a.a.aa /b/a.a.aa
+/b/c//../a.a.a. /b/a.a.a.
+/b/c//../a.a.a/ /b/a.a.a
+/b/c//../a.a..a /b/a.a..a
+/b/c//../a.a... /b/a.a...
+/b/c//../a.a../ /b/a.a..
+/b/c//../a.a./a /b/a.a./a
+/b/c//../a.a./. /b/a.a.
+/b/c//../a.a.// /b/a.a.
+/b/c//../a.a/aa /b/a.a/aa
+/b/c//../a.a/a. /b/a.a/a.
+/b/c//../a.a/a/ /b/a.a/a
+/b/c//../a.a/.a /b/a.a/.a
+/b/c//../a.a/.. /b
+/b/c//../a.a/./ /b/a.a
+/b/c//../a.a//a /b/a.a/a
+/b/c//../a.a//. /b/a.a
+/b/c//../a.a/// /b/a.a
+/b/c//../a..aaa /b/a..aaa
+/b/c//../a..aa. /b/a..aa.
+/b/c//../a..aa/ /b/a..aa
+/b/c//../a..a.a /b/a..a.a
+/b/c//../a..a.. /b/a..a..
+/b/c//../a..a./ /b/a..a.
+/b/c//../a..a/a /b/a..a/a
+/b/c//../a..a/. /b/a..a
+/b/c//../a..a// /b/a..a
+/b/c//../a...aa /b/a...aa
+/b/c//../a...a. /b/a...a.
+/b/c//../a...a/ /b/a...a
+/b/c//../a....a /b/a....a
+/b/c//../a..... /b/a.....
+/b/c//../a..../ /b/a....
+/b/c//../a.../a /b/a.../a
+/b/c//../a.../. /b/a...
+/b/c//../a...// /b/a...
+/b/c//../a../aa /b/a../aa
+/b/c//../a../a. /b/a../a.
+/b/c//../a../a/ /b/a../a
+/b/c//../a../.a /b/a../.a
+/b/c//../a../.. /b
+/b/c//../a.././ /b/a..
+/b/c//../a..//a /b/a../a
+/b/c//../a..//. /b/a..
+/b/c//../a../// /b/a..
+/b/c//../a./aaa /b/a./aaa
+/b/c//../a./aa. /b/a./aa.
+/b/c//../a./aa/ /b/a./aa
+/b/c//../a./a.a /b/a./a.a
+/b/c//../a./a.. /b/a./a..
+/b/c//../a./a./ /b/a./a.
+/b/c//../a./a/a /b/a./a/a
+/b/c//../a./a/. /b/a./a
+/b/c//../a./a// /b/a./a
+/b/c//../a./.aa /b/a./.aa
+/b/c//../a./.a. /b/a./.a.
+/b/c//../a./.a/ /b/a./.a
+/b/c//../a./..a /b/a./..a
+/b/c//../a./... /b/a./...
+/b/c//../a./../ /b
+/b/c//../a././a /b/a./a
+/b/c//../a././. /b/a.
+/b/c//../a./.// /b/a.
+/b/c//../a.//aa /b/a./aa
+/b/c//../a.//a. /b/a./a.
+/b/c//../a.//a/ /b/a./a
+/b/c//../a.//.a /b/a./.a
+/b/c//../a.//.. /b
+/b/c//../a.//./ /b/a.
+/b/c//../a.///a /b/a./a
+/b/c//../a.///. /b/a.
+/b/c//../a.//// /b/a.
+/b/c//../a/aaaa /b/a/aaaa
+/b/c//../a/aaa. /b/a/aaa.
+/b/c//../a/aaa/ /b/a/aaa
+/b/c//../a/aa.a /b/a/aa.a
+/b/c//../a/aa.. /b/a/aa..
+/b/c//../a/aa./ /b/a/aa.
+/b/c//../a/aa/a /b/a/aa/a
+/b/c//../a/aa/. /b/a/aa
+/b/c//../a/aa// /b/a/aa
+/b/c//../a/a.aa /b/a/a.aa
+/b/c//../a/a.a. /b/a/a.a.
+/b/c//../a/a.a/ /b/a/a.a
+/b/c//../a/a..a /b/a/a..a
+/b/c//../a/a... /b/a/a...
+/b/c//../a/a../ /b/a/a..
+/b/c//../a/a./a /b/a/a./a
+/b/c//../a/a./. /b/a/a.
+/b/c//../a/a.// /b/a/a.
+/b/c//../a/a/aa /b/a/a/aa
+/b/c//../a/a/a. /b/a/a/a.
+/b/c//../a/a/a/ /b/a/a/a
+/b/c//../a/a/.a /b/a/a/.a
+/b/c//../a/a/.. /b/a
+/b/c//../a/a/./ /b/a/a
+/b/c//../a/a//a /b/a/a/a
+/b/c//../a/a//. /b/a/a
+/b/c//../a/a/// /b/a/a
+/b/c//../a/.aaa /b/a/.aaa
+/b/c//../a/.aa. /b/a/.aa.
+/b/c//../a/.aa/ /b/a/.aa
+/b/c//../a/.a.a /b/a/.a.a
+/b/c//../a/.a.. /b/a/.a..
+/b/c//../a/.a./ /b/a/.a.
+/b/c//../a/.a/a /b/a/.a/a
+/b/c//../a/.a/. /b/a/.a
+/b/c//../a/.a// /b/a/.a
+/b/c//../a/..aa /b/a/..aa
+/b/c//../a/..a. /b/a/..a.
+/b/c//../a/..a/ /b/a/..a
+/b/c//../a/...a /b/a/...a
+/b/c//../a/.... /b/a/....
+/b/c//../a/.../ /b/a/...
+/b/c//../a/../a /b/a
+/b/c//../a/../. /b
+/b/c//../a/..// /b
+/b/c//../a/./aa /b/a/aa
+/b/c//../a/./a. /b/a/a.
+/b/c//../a/./a/ /b/a/a
+/b/c//../a/./.a /b/a/.a
+/b/c//../a/./.. /b
+/b/c//../a/././ /b/a
+/b/c//../a/.//a /b/a/a
+/b/c//../a/.//. /b/a
+/b/c//../a/./// /b/a
+/b/c//../a//aaa /b/a/aaa
+/b/c//../a//aa. /b/a/aa.
+/b/c//../a//aa/ /b/a/aa
+/b/c//../a//a.a /b/a/a.a
+/b/c//../a//a.. /b/a/a..
+/b/c//../a//a./ /b/a/a.
+/b/c//../a//a/a /b/a/a/a
+/b/c//../a//a/. /b/a/a
+/b/c//../a//a// /b/a/a
+/b/c//../a//.aa /b/a/.aa
+/b/c//../a//.a. /b/a/.a.
+/b/c//../a//.a/ /b/a/.a
+/b/c//../a//..a /b/a/..a
+/b/c//../a//... /b/a/...
+/b/c//../a//../ /b
+/b/c//../a//./a /b/a/a
+/b/c//../a//./. /b/a
+/b/c//../a//.// /b/a
+/b/c//../a///aa /b/a/aa
+/b/c//../a///a. /b/a/a.
+/b/c//../a///a/ /b/a/a
+/b/c//../a///.a /b/a/.a
+/b/c//../a///.. /b
+/b/c//../a///./ /b/a
+/b/c//../a////a /b/a/a
+/b/c//../a////. /b/a
+/b/c//../a///// /b/a
+/b/c//../.aaaaa /b/.aaaaa
+/b/c//../.aaaa. /b/.aaaa.
+/b/c//../.aaaa/ /b/.aaaa
+/b/c//../.aaa.a /b/.aaa.a
+/b/c//../.aaa.. /b/.aaa..
+/b/c//../.aaa./ /b/.aaa.
+/b/c//../.aaa/a /b/.aaa/a
+/b/c//../.aaa/. /b/.aaa
+/b/c//../.aaa// /b/.aaa
+/b/c//../.aa.aa /b/.aa.aa
+/b/c//../.aa.a. /b/.aa.a.
+/b/c//../.aa.a/ /b/.aa.a
+/b/c//../.aa..a /b/.aa..a
+/b/c//../.aa... /b/.aa...
+/b/c//../.aa../ /b/.aa..
+/b/c//../.aa./a /b/.aa./a
+/b/c//../.aa./. /b/.aa.
+/b/c//../.aa.// /b/.aa.
+/b/c//../.aa/aa /b/.aa/aa
+/b/c//../.aa/a. /b/.aa/a.
+/b/c//../.aa/a/ /b/.aa/a
+/b/c//../.aa/.a /b/.aa/.a
+/b/c//../.aa/.. /b
+/b/c//../.aa/./ /b/.aa
+/b/c//../.aa//a /b/.aa/a
+/b/c//../.aa//. /b/.aa
+/b/c//../.aa/// /b/.aa
+/b/c//../.a.aaa /b/.a.aaa
+/b/c//../.a.aa. /b/.a.aa.
+/b/c//../.a.aa/ /b/.a.aa
+/b/c//../.a.a.a /b/.a.a.a
+/b/c//../.a.a.. /b/.a.a..
+/b/c//../.a.a./ /b/.a.a.
+/b/c//../.a.a/a /b/.a.a/a
+/b/c//../.a.a/. /b/.a.a
+/b/c//../.a.a// /b/.a.a
+/b/c//../.a..aa /b/.a..aa
+/b/c//../.a..a. /b/.a..a.
+/b/c//../.a..a/ /b/.a..a
+/b/c//../.a...a /b/.a...a
+/b/c//../.a.... /b/.a....
+/b/c//../.a.../ /b/.a...
+/b/c//../.a../a /b/.a../a
+/b/c//../.a../. /b/.a..
+/b/c//../.a..// /b/.a..
+/b/c//../.a./aa /b/.a./aa
+/b/c//../.a./a. /b/.a./a.
+/b/c//../.a./a/ /b/.a./a
+/b/c//../.a./.a /b/.a./.a
+/b/c//../.a./.. /b
+/b/c//../.a././ /b/.a.
+/b/c//../.a.//a /b/.a./a
+/b/c//../.a.//. /b/.a.
+/b/c//../.a./// /b/.a.
+/b/c//../.a/aaa /b/.a/aaa
+/b/c//../.a/aa. /b/.a/aa.
+/b/c//../.a/aa/ /b/.a/aa
+/b/c//../.a/a.a /b/.a/a.a
+/b/c//../.a/a.. /b/.a/a..
+/b/c//../.a/a./ /b/.a/a.
+/b/c//../.a/a/a /b/.a/a/a
+/b/c//../.a/a/. /b/.a/a
+/b/c//../.a/a// /b/.a/a
+/b/c//../.a/.aa /b/.a/.aa
+/b/c//../.a/.a. /b/.a/.a.
+/b/c//../.a/.a/ /b/.a/.a
+/b/c//../.a/..a /b/.a/..a
+/b/c//../.a/... /b/.a/...
+/b/c//../.a/../ /b
+/b/c//../.a/./a /b/.a/a
+/b/c//../.a/./. /b/.a
+/b/c//../.a/.// /b/.a
+/b/c//../.a//aa /b/.a/aa
+/b/c//../.a//a. /b/.a/a.
+/b/c//../.a//a/ /b/.a/a
+/b/c//../.a//.a /b/.a/.a
+/b/c//../.a//.. /b
+/b/c//../.a//./ /b/.a
+/b/c//../.a///a /b/.a/a
+/b/c//../.a///. /b/.a
+/b/c//../.a//// /b/.a
+/b/c//../..aaaa /b/..aaaa
+/b/c//../..aaa. /b/..aaa.
+/b/c//../..aaa/ /b/..aaa
+/b/c//../..aa.a /b/..aa.a
+/b/c//../..aa.. /b/..aa..
+/b/c//../..aa./ /b/..aa.
+/b/c//../..aa/a /b/..aa/a
+/b/c//../..aa/. /b/..aa
+/b/c//../..aa// /b/..aa
+/b/c//../..a.aa /b/..a.aa
+/b/c//../..a.a. /b/..a.a.
+/b/c//../..a.a/ /b/..a.a
+/b/c//../..a..a /b/..a..a
+/b/c//../..a... /b/..a...
+/b/c//../..a../ /b/..a..
+/b/c//../..a./a /b/..a./a
+/b/c//../..a./. /b/..a.
+/b/c//../..a.// /b/..a.
+/b/c//../..a/aa /b/..a/aa
+/b/c//../..a/a. /b/..a/a.
+/b/c//../..a/a/ /b/..a/a
+/b/c//../..a/.a /b/..a/.a
+/b/c//../..a/.. /b
+/b/c//../..a/./ /b/..a
+/b/c//../..a//a /b/..a/a
+/b/c//../..a//. /b/..a
+/b/c//../..a/// /b/..a
+/b/c//../...aaa /b/...aaa
+/b/c//../...aa. /b/...aa.
+/b/c//../...aa/ /b/...aa
+/b/c//../...a.a /b/...a.a
+/b/c//../...a.. /b/...a..
+/b/c//../...a./ /b/...a.
+/b/c//../...a/a /b/...a/a
+/b/c//../...a/. /b/...a
+/b/c//../...a// /b/...a
+/b/c//../....aa /b/....aa
+/b/c//../....a. /b/....a.
+/b/c//../....a/ /b/....a
+/b/c//../.....a /b/.....a
+/b/c//../...... /b/......
+/b/c//../...../ /b/.....
+/b/c//../..../a /b/..../a
+/b/c//../..../. /b/....
+/b/c//../....// /b/....
+/b/c//../.../aa /b/.../aa
+/b/c//../.../a. /b/.../a.
+/b/c//../.../a/ /b/.../a
+/b/c//../.../.a /b/.../.a
+/b/c//../.../.. /b
+/b/c//../..././ /b/...
+/b/c//../...//a /b/.../a
+/b/c//../...//. /b/...
+/b/c//../.../// /b/...
+/b/c//../../aaa /aaa
+/b/c//../../aa. /aa.
+/b/c//../../aa/ /aa
+/b/c//../../a.a /a.a
+/b/c//../../a.. /a..
+/b/c//../../a./ /a.
+/b/c//../../a/a /a/a
+/b/c//../../a/. /a
+/b/c//../../a// /a
+/b/c//../../.aa /.aa
+/b/c//../../.a. /.a.
+/b/c//../../.a/ /.a
+/b/c//../../..a /..a
+/b/c//../../... /...
+/b/c//../../../ /
+/b/c//../.././a /a
+/b/c//../.././. /
+/b/c//../../.// /
+/b/c//../..//aa /aa
+/b/c//../..//a. /a.
+/b/c//../..//a/ /a
+/b/c//../..//.a /.a
+/b/c//../..//.. /
+/b/c//../..//./ /
+/b/c//../..///a /a
+/b/c//../..///. /
+/b/c//../..//// /
+/b/c//.././aaaa /b/aaaa
+/b/c//.././aaa. /b/aaa.
+/b/c//.././aaa/ /b/aaa
+/b/c//.././aa.a /b/aa.a
+/b/c//.././aa.. /b/aa..
+/b/c//.././aa./ /b/aa.
+/b/c//.././aa/a /b/aa/a
+/b/c//.././aa/. /b/aa
+/b/c//.././aa// /b/aa
+/b/c//.././a.aa /b/a.aa
+/b/c//.././a.a. /b/a.a.
+/b/c//.././a.a/ /b/a.a
+/b/c//.././a..a /b/a..a
+/b/c//.././a... /b/a...
+/b/c//.././a../ /b/a..
+/b/c//.././a./a /b/a./a
+/b/c//.././a./. /b/a.
+/b/c//.././a.// /b/a.
+/b/c//.././a/aa /b/a/aa
+/b/c//.././a/a. /b/a/a.
+/b/c//.././a/a/ /b/a/a
+/b/c//.././a/.a /b/a/.a
+/b/c//.././a/.. /b
+/b/c//.././a/./ /b/a
+/b/c//.././a//a /b/a/a
+/b/c//.././a//. /b/a
+/b/c//.././a/// /b/a
+/b/c//.././.aaa /b/.aaa
+/b/c//.././.aa. /b/.aa.
+/b/c//.././.aa/ /b/.aa
+/b/c//.././.a.a /b/.a.a
+/b/c//.././.a.. /b/.a..
+/b/c//.././.a./ /b/.a.
+/b/c//.././.a/a /b/.a/a
+/b/c//.././.a/. /b/.a
+/b/c//.././.a// /b/.a
+/b/c//.././..aa /b/..aa
+/b/c//.././..a. /b/..a.
+/b/c//.././..a/ /b/..a
+/b/c//.././...a /b/...a
+/b/c//.././.... /b/....
+/b/c//.././.../ /b/...
+/b/c//.././../a /a
+/b/c//.././../. /
+/b/c//.././..// /
+/b/c//../././aa /b/aa
+/b/c//../././a. /b/a.
+/b/c//../././a/ /b/a
+/b/c//../././.a /b/.a
+/b/c//../././.. /
+/b/c//.././././ /b
+/b/c//../././/a /b/a
+/b/c//../././/. /b
+/b/c//../././// /b
+/b/c//.././/aaa /b/aaa
+/b/c//.././/aa. /b/aa.
+/b/c//.././/aa/ /b/aa
+/b/c//.././/a.a /b/a.a
+/b/c//.././/a.. /b/a..
+/b/c//.././/a./ /b/a.
+/b/c//.././/a/a /b/a/a
+/b/c//.././/a/. /b/a
+/b/c//.././/a// /b/a
+/b/c//.././/.aa /b/.aa
+/b/c//.././/.a. /b/.a.
+/b/c//.././/.a/ /b/.a
+/b/c//.././/..a /b/..a
+/b/c//.././/... /b/...
+/b/c//.././/../ /
+/b/c//.././/./a /b/a
+/b/c//.././/./. /b
+/b/c//.././/.// /b
+/b/c//.././//aa /b/aa
+/b/c//.././//a. /b/a.
+/b/c//.././//a/ /b/a
+/b/c//.././//.a /b/.a
+/b/c//.././//.. /
+/b/c//.././//./ /b
+/b/c//.././///a /b/a
+/b/c//.././///. /b
+/b/c//.././//// /b
+/b/c//..//aaaaa /b/aaaaa
+/b/c//..//aaaa. /b/aaaa.
+/b/c//..//aaaa/ /b/aaaa
+/b/c//..//aaa.a /b/aaa.a
+/b/c//..//aaa.. /b/aaa..
+/b/c//..//aaa./ /b/aaa.
+/b/c//..//aaa/a /b/aaa/a
+/b/c//..//aaa/. /b/aaa
+/b/c//..//aaa// /b/aaa
+/b/c//..//aa.aa /b/aa.aa
+/b/c//..//aa.a. /b/aa.a.
+/b/c//..//aa.a/ /b/aa.a
+/b/c//..//aa..a /b/aa..a
+/b/c//..//aa... /b/aa...
+/b/c//..//aa../ /b/aa..
+/b/c//..//aa./a /b/aa./a
+/b/c//..//aa./. /b/aa.
+/b/c//..//aa.// /b/aa.
+/b/c//..//aa/aa /b/aa/aa
+/b/c//..//aa/a. /b/aa/a.
+/b/c//..//aa/a/ /b/aa/a
+/b/c//..//aa/.a /b/aa/.a
+/b/c//..//aa/.. /b
+/b/c//..//aa/./ /b/aa
+/b/c//..//aa//a /b/aa/a
+/b/c//..//aa//. /b/aa
+/b/c//..//aa/// /b/aa
+/b/c//..//a.aaa /b/a.aaa
+/b/c//..//a.aa. /b/a.aa.
+/b/c//..//a.aa/ /b/a.aa
+/b/c//..//a.a.a /b/a.a.a
+/b/c//..//a.a.. /b/a.a..
+/b/c//..//a.a./ /b/a.a.
+/b/c//..//a.a/a /b/a.a/a
+/b/c//..//a.a/. /b/a.a
+/b/c//..//a.a// /b/a.a
+/b/c//..//a..aa /b/a..aa
+/b/c//..//a..a. /b/a..a.
+/b/c//..//a..a/ /b/a..a
+/b/c//..//a...a /b/a...a
+/b/c//..//a.... /b/a....
+/b/c//..//a.../ /b/a...
+/b/c//..//a../a /b/a../a
+/b/c//..//a../. /b/a..
+/b/c//..//a..// /b/a..
+/b/c//..//a./aa /b/a./aa
+/b/c//..//a./a. /b/a./a.
+/b/c//..//a./a/ /b/a./a
+/b/c//..//a./.a /b/a./.a
+/b/c//..//a./.. /b
+/b/c//..//a././ /b/a.
+/b/c//..//a.//a /b/a./a
+/b/c//..//a.//. /b/a.
+/b/c//..//a./// /b/a.
+/b/c//..//a/aaa /b/a/aaa
+/b/c//..//a/aa. /b/a/aa.
+/b/c//..//a/aa/ /b/a/aa
+/b/c//..//a/a.a /b/a/a.a
+/b/c//..//a/a.. /b/a/a..
+/b/c//..//a/a./ /b/a/a.
+/b/c//..//a/a/a /b/a/a/a
+/b/c//..//a/a/. /b/a/a
+/b/c//..//a/a// /b/a/a
+/b/c//..//a/.aa /b/a/.aa
+/b/c//..//a/.a. /b/a/.a.
+/b/c//..//a/.a/ /b/a/.a
+/b/c//..//a/..a /b/a/..a
+/b/c//..//a/... /b/a/...
+/b/c//..//a/../ /b
+/b/c//..//a/./a /b/a/a
+/b/c//..//a/./. /b/a
+/b/c//..//a/.// /b/a
+/b/c//..//a//aa /b/a/aa
+/b/c//..//a//a. /b/a/a.
+/b/c//..//a//a/ /b/a/a
+/b/c//..//a//.a /b/a/.a
+/b/c//..//a//.. /b
+/b/c//..//a//./ /b/a
+/b/c//..//a///a /b/a/a
+/b/c//..//a///. /b/a
+/b/c//..//a//// /b/a
+/b/c//..//.aaaa /b/.aaaa
+/b/c//..//.aaa. /b/.aaa.
+/b/c//..//.aaa/ /b/.aaa
+/b/c//..//.aa.a /b/.aa.a
+/b/c//..//.aa.. /b/.aa..
+/b/c//..//.aa./ /b/.aa.
+/b/c//..//.aa/a /b/.aa/a
+/b/c//..//.aa/. /b/.aa
+/b/c//..//.aa// /b/.aa
+/b/c//..//.a.aa /b/.a.aa
+/b/c//..//.a.a. /b/.a.a.
+/b/c//..//.a.a/ /b/.a.a
+/b/c//..//.a..a /b/.a..a
+/b/c//..//.a... /b/.a...
+/b/c//..//.a../ /b/.a..
+/b/c//..//.a./a /b/.a./a
+/b/c//..//.a./. /b/.a.
+/b/c//..//.a.// /b/.a.
+/b/c//..//.a/aa /b/.a/aa
+/b/c//..//.a/a. /b/.a/a.
+/b/c//..//.a/a/ /b/.a/a
+/b/c//..//.a/.a /b/.a/.a
+/b/c//..//.a/.. /b
+/b/c//..//.a/./ /b/.a
+/b/c//..//.a//a /b/.a/a
+/b/c//..//.a//. /b/.a
+/b/c//..//.a/// /b/.a
+/b/c//..//..aaa /b/..aaa
+/b/c//..//..aa. /b/..aa.
+/b/c//..//..aa/ /b/..aa
+/b/c//..//..a.a /b/..a.a
+/b/c//..//..a.. /b/..a..
+/b/c//..//..a./ /b/..a.
+/b/c//..//..a/a /b/..a/a
+/b/c//..//..a/. /b/..a
+/b/c//..//..a// /b/..a
+/b/c//..//...aa /b/...aa
+/b/c//..//...a. /b/...a.
+/b/c//..//...a/ /b/...a
+/b/c//..//....a /b/....a
+/b/c//..//..... /b/.....
+/b/c//..//..../ /b/....
+/b/c//..//.../a /b/.../a
+/b/c//..//.../. /b/...
+/b/c//..//...// /b/...
+/b/c//..//../aa /aa
+/b/c//..//../a. /a.
+/b/c//..//../a/ /a
+/b/c//..//../.a /.a
+/b/c//..//../.. /
+/b/c//..//.././ /
+/b/c//..//..//a /a
+/b/c//..//..//. /
+/b/c//..//../// /
+/b/c//..//./aaa /b/aaa
+/b/c//..//./aa. /b/aa.
+/b/c//..//./aa/ /b/aa
+/b/c//..//./a.a /b/a.a
+/b/c//..//./a.. /b/a..
+/b/c//..//./a./ /b/a.
+/b/c//..//./a/a /b/a/a
+/b/c//..//./a/. /b/a
+/b/c//..//./a// /b/a
+/b/c//..//./.aa /b/.aa
+/b/c//..//./.a. /b/.a.
+/b/c//..//./.a/ /b/.a
+/b/c//..//./..a /b/..a
+/b/c//..//./... /b/...
+/b/c//..//./../ /
+/b/c//..//././a /b/a
+/b/c//..//././. /b
+/b/c//..//./.// /b
+/b/c//..//.//aa /b/aa
+/b/c//..//.//a. /b/a.
+/b/c//..//.//a/ /b/a
+/b/c//..//.//.a /b/.a
+/b/c//..//.//.. /
+/b/c//..//.//./ /b
+/b/c//..//.///a /b/a
+/b/c//..//.///. /b
+/b/c//..//.//// /b
+/b/c//..///aaaa /b/aaaa
+/b/c//..///aaa. /b/aaa.
+/b/c//..///aaa/ /b/aaa
+/b/c//..///aa.a /b/aa.a
+/b/c//..///aa.. /b/aa..
+/b/c//..///aa./ /b/aa.
+/b/c//..///aa/a /b/aa/a
+/b/c//..///aa/. /b/aa
+/b/c//..///aa// /b/aa
+/b/c//..///a.aa /b/a.aa
+/b/c//..///a.a. /b/a.a.
+/b/c//..///a.a/ /b/a.a
+/b/c//..///a..a /b/a..a
+/b/c//..///a... /b/a...
+/b/c//..///a../ /b/a..
+/b/c//..///a./a /b/a./a
+/b/c//..///a./. /b/a.
+/b/c//..///a.// /b/a.
+/b/c//..///a/aa /b/a/aa
+/b/c//..///a/a. /b/a/a.
+/b/c//..///a/a/ /b/a/a
+/b/c//..///a/.a /b/a/.a
+/b/c//..///a/.. /b
+/b/c//..///a/./ /b/a
+/b/c//..///a//a /b/a/a
+/b/c//..///a//. /b/a
+/b/c//..///a/// /b/a
+/b/c//..///.aaa /b/.aaa
+/b/c//..///.aa. /b/.aa.
+/b/c//..///.aa/ /b/.aa
+/b/c//..///.a.a /b/.a.a
+/b/c//..///.a.. /b/.a..
+/b/c//..///.a./ /b/.a.
+/b/c//..///.a/a /b/.a/a
+/b/c//..///.a/. /b/.a
+/b/c//..///.a// /b/.a
+/b/c//..///..aa /b/..aa
+/b/c//..///..a. /b/..a.
+/b/c//..///..a/ /b/..a
+/b/c//..///...a /b/...a
+/b/c//..///.... /b/....
+/b/c//..///.../ /b/...
+/b/c//..///../a /a
+/b/c//..///../. /
+/b/c//..///..// /
+/b/c//..///./aa /b/aa
+/b/c//..///./a. /b/a.
+/b/c//..///./a/ /b/a
+/b/c//..///./.a /b/.a
+/b/c//..///./.. /
+/b/c//..///././ /b
+/b/c//..///.//a /b/a
+/b/c//..///.//. /b
+/b/c//..///./// /b
+/b/c//..////aaa /b/aaa
+/b/c//..////aa. /b/aa.
+/b/c//..////aa/ /b/aa
+/b/c//..////a.a /b/a.a
+/b/c//..////a.. /b/a..
+/b/c//..////a./ /b/a.
+/b/c//..////a/a /b/a/a
+/b/c//..////a/. /b/a
+/b/c//..////a// /b/a
+/b/c//..////.aa /b/.aa
+/b/c//..////.a. /b/.a.
+/b/c//..////.a/ /b/.a
+/b/c//..////..a /b/..a
+/b/c//..////... /b/...
+/b/c//..////../ /
+/b/c//..////./a /b/a
+/b/c//..////./. /b
+/b/c//..////.// /b
+/b/c//../////aa /b/aa
+/b/c//../////a. /b/a.
+/b/c//../////a/ /b/a
+/b/c//../////.a /b/.a
+/b/c//../////.. /
+/b/c//../////./ /b
+/b/c//..//////a /b/a
+/b/c//..//////. /b
+/b/c//../////// /b
+/b/c//./aaaaaaa /b/c/aaaaaaa
+/b/c//./aaaaaa. /b/c/aaaaaa.
+/b/c//./aaaaaa/ /b/c/aaaaaa
+/b/c//./aaaaa.a /b/c/aaaaa.a
+/b/c//./aaaaa.. /b/c/aaaaa..
+/b/c//./aaaaa./ /b/c/aaaaa.
+/b/c//./aaaaa/a /b/c/aaaaa/a
+/b/c//./aaaaa/. /b/c/aaaaa
+/b/c//./aaaaa// /b/c/aaaaa
+/b/c//./aaaa.aa /b/c/aaaa.aa
+/b/c//./aaaa.a. /b/c/aaaa.a.
+/b/c//./aaaa.a/ /b/c/aaaa.a
+/b/c//./aaaa..a /b/c/aaaa..a
+/b/c//./aaaa... /b/c/aaaa...
+/b/c//./aaaa../ /b/c/aaaa..
+/b/c//./aaaa./a /b/c/aaaa./a
+/b/c//./aaaa./. /b/c/aaaa.
+/b/c//./aaaa.// /b/c/aaaa.
+/b/c//./aaaa/aa /b/c/aaaa/aa
+/b/c//./aaaa/a. /b/c/aaaa/a.
+/b/c//./aaaa/a/ /b/c/aaaa/a
+/b/c//./aaaa/.a /b/c/aaaa/.a
+/b/c//./aaaa/.. /b/c
+/b/c//./aaaa/./ /b/c/aaaa
+/b/c//./aaaa//a /b/c/aaaa/a
+/b/c//./aaaa//. /b/c/aaaa
+/b/c//./aaaa/// /b/c/aaaa
+/b/c//./aaa.aaa /b/c/aaa.aaa
+/b/c//./aaa.aa. /b/c/aaa.aa.
+/b/c//./aaa.aa/ /b/c/aaa.aa
+/b/c//./aaa.a.a /b/c/aaa.a.a
+/b/c//./aaa.a.. /b/c/aaa.a..
+/b/c//./aaa.a./ /b/c/aaa.a.
+/b/c//./aaa.a/a /b/c/aaa.a/a
+/b/c//./aaa.a/. /b/c/aaa.a
+/b/c//./aaa.a// /b/c/aaa.a
+/b/c//./aaa..aa /b/c/aaa..aa
+/b/c//./aaa..a. /b/c/aaa..a.
+/b/c//./aaa..a/ /b/c/aaa..a
+/b/c//./aaa...a /b/c/aaa...a
+/b/c//./aaa.... /b/c/aaa....
+/b/c//./aaa.../ /b/c/aaa...
+/b/c//./aaa../a /b/c/aaa../a
+/b/c//./aaa../. /b/c/aaa..
+/b/c//./aaa..// /b/c/aaa..
+/b/c//./aaa./aa /b/c/aaa./aa
+/b/c//./aaa./a. /b/c/aaa./a.
+/b/c//./aaa./a/ /b/c/aaa./a
+/b/c//./aaa./.a /b/c/aaa./.a
+/b/c//./aaa./.. /b/c
+/b/c//./aaa././ /b/c/aaa.
+/b/c//./aaa.//a /b/c/aaa./a
+/b/c//./aaa.//. /b/c/aaa.
+/b/c//./aaa./// /b/c/aaa.
+/b/c//./aaa/aaa /b/c/aaa/aaa
+/b/c//./aaa/aa. /b/c/aaa/aa.
+/b/c//./aaa/aa/ /b/c/aaa/aa
+/b/c//./aaa/a.a /b/c/aaa/a.a
+/b/c//./aaa/a.. /b/c/aaa/a..
+/b/c//./aaa/a./ /b/c/aaa/a.
+/b/c//./aaa/a/a /b/c/aaa/a/a
+/b/c//./aaa/a/. /b/c/aaa/a
+/b/c//./aaa/a// /b/c/aaa/a
+/b/c//./aaa/.aa /b/c/aaa/.aa
+/b/c//./aaa/.a. /b/c/aaa/.a.
+/b/c//./aaa/.a/ /b/c/aaa/.a
+/b/c//./aaa/..a /b/c/aaa/..a
+/b/c//./aaa/... /b/c/aaa/...
+/b/c//./aaa/../ /b/c
+/b/c//./aaa/./a /b/c/aaa/a
+/b/c//./aaa/./. /b/c/aaa
+/b/c//./aaa/.// /b/c/aaa
+/b/c//./aaa//aa /b/c/aaa/aa
+/b/c//./aaa//a. /b/c/aaa/a.
+/b/c//./aaa//a/ /b/c/aaa/a
+/b/c//./aaa//.a /b/c/aaa/.a
+/b/c//./aaa//.. /b/c
+/b/c//./aaa//./ /b/c/aaa
+/b/c//./aaa///a /b/c/aaa/a
+/b/c//./aaa///. /b/c/aaa
+/b/c//./aaa//// /b/c/aaa
+/b/c//./aa.aaaa /b/c/aa.aaaa
+/b/c//./aa.aaa. /b/c/aa.aaa.
+/b/c//./aa.aaa/ /b/c/aa.aaa
+/b/c//./aa.aa.a /b/c/aa.aa.a
+/b/c//./aa.aa.. /b/c/aa.aa..
+/b/c//./aa.aa./ /b/c/aa.aa.
+/b/c//./aa.aa/a /b/c/aa.aa/a
+/b/c//./aa.aa/. /b/c/aa.aa
+/b/c//./aa.aa// /b/c/aa.aa
+/b/c//./aa.a.aa /b/c/aa.a.aa
+/b/c//./aa.a.a. /b/c/aa.a.a.
+/b/c//./aa.a.a/ /b/c/aa.a.a
+/b/c//./aa.a..a /b/c/aa.a..a
+/b/c//./aa.a... /b/c/aa.a...
+/b/c//./aa.a../ /b/c/aa.a..
+/b/c//./aa.a./a /b/c/aa.a./a
+/b/c//./aa.a./. /b/c/aa.a.
+/b/c//./aa.a.// /b/c/aa.a.
+/b/c//./aa.a/aa /b/c/aa.a/aa
+/b/c//./aa.a/a. /b/c/aa.a/a.
+/b/c//./aa.a/a/ /b/c/aa.a/a
+/b/c//./aa.a/.a /b/c/aa.a/.a
+/b/c//./aa.a/.. /b/c
+/b/c//./aa.a/./ /b/c/aa.a
+/b/c//./aa.a//a /b/c/aa.a/a
+/b/c//./aa.a//. /b/c/aa.a
+/b/c//./aa.a/// /b/c/aa.a
+/b/c//./aa..aaa /b/c/aa..aaa
+/b/c//./aa..aa. /b/c/aa..aa.
+/b/c//./aa..aa/ /b/c/aa..aa
+/b/c//./aa..a.a /b/c/aa..a.a
+/b/c//./aa..a.. /b/c/aa..a..
+/b/c//./aa..a./ /b/c/aa..a.
+/b/c//./aa..a/a /b/c/aa..a/a
+/b/c//./aa..a/. /b/c/aa..a
+/b/c//./aa..a// /b/c/aa..a
+/b/c//./aa...aa /b/c/aa...aa
+/b/c//./aa...a. /b/c/aa...a.
+/b/c//./aa...a/ /b/c/aa...a
+/b/c//./aa....a /b/c/aa....a
+/b/c//./aa..... /b/c/aa.....
+/b/c//./aa..../ /b/c/aa....
+/b/c//./aa.../a /b/c/aa.../a
+/b/c//./aa.../. /b/c/aa...
+/b/c//./aa...// /b/c/aa...
+/b/c//./aa../aa /b/c/aa../aa
+/b/c//./aa../a. /b/c/aa../a.
+/b/c//./aa../a/ /b/c/aa../a
+/b/c//./aa../.a /b/c/aa../.a
+/b/c//./aa../.. /b/c
+/b/c//./aa.././ /b/c/aa..
+/b/c//./aa..//a /b/c/aa../a
+/b/c//./aa..//. /b/c/aa..
+/b/c//./aa../// /b/c/aa..
+/b/c//./aa./aaa /b/c/aa./aaa
+/b/c//./aa./aa. /b/c/aa./aa.
+/b/c//./aa./aa/ /b/c/aa./aa
+/b/c//./aa./a.a /b/c/aa./a.a
+/b/c//./aa./a.. /b/c/aa./a..
+/b/c//./aa./a./ /b/c/aa./a.
+/b/c//./aa./a/a /b/c/aa./a/a
+/b/c//./aa./a/. /b/c/aa./a
+/b/c//./aa./a// /b/c/aa./a
+/b/c//./aa./.aa /b/c/aa./.aa
+/b/c//./aa./.a. /b/c/aa./.a.
+/b/c//./aa./.a/ /b/c/aa./.a
+/b/c//./aa./..a /b/c/aa./..a
+/b/c//./aa./... /b/c/aa./...
+/b/c//./aa./../ /b/c
+/b/c//./aa././a /b/c/aa./a
+/b/c//./aa././. /b/c/aa.
+/b/c//./aa./.// /b/c/aa.
+/b/c//./aa.//aa /b/c/aa./aa
+/b/c//./aa.//a. /b/c/aa./a.
+/b/c//./aa.//a/ /b/c/aa./a
+/b/c//./aa.//.a /b/c/aa./.a
+/b/c//./aa.//.. /b/c
+/b/c//./aa.//./ /b/c/aa.
+/b/c//./aa.///a /b/c/aa./a
+/b/c//./aa.///. /b/c/aa.
+/b/c//./aa.//// /b/c/aa.
+/b/c//./aa/aaaa /b/c/aa/aaaa
+/b/c//./aa/aaa. /b/c/aa/aaa.
+/b/c//./aa/aaa/ /b/c/aa/aaa
+/b/c//./aa/aa.a /b/c/aa/aa.a
+/b/c//./aa/aa.. /b/c/aa/aa..
+/b/c//./aa/aa./ /b/c/aa/aa.
+/b/c//./aa/aa/a /b/c/aa/aa/a
+/b/c//./aa/aa/. /b/c/aa/aa
+/b/c//./aa/aa// /b/c/aa/aa
+/b/c//./aa/a.aa /b/c/aa/a.aa
+/b/c//./aa/a.a. /b/c/aa/a.a.
+/b/c//./aa/a.a/ /b/c/aa/a.a
+/b/c//./aa/a..a /b/c/aa/a..a
+/b/c//./aa/a... /b/c/aa/a...
+/b/c//./aa/a../ /b/c/aa/a..
+/b/c//./aa/a./a /b/c/aa/a./a
+/b/c//./aa/a./. /b/c/aa/a.
+/b/c//./aa/a.// /b/c/aa/a.
+/b/c//./aa/a/aa /b/c/aa/a/aa
+/b/c//./aa/a/a. /b/c/aa/a/a.
+/b/c//./aa/a/a/ /b/c/aa/a/a
+/b/c//./aa/a/.a /b/c/aa/a/.a
+/b/c//./aa/a/.. /b/c/aa
+/b/c//./aa/a/./ /b/c/aa/a
+/b/c//./aa/a//a /b/c/aa/a/a
+/b/c//./aa/a//. /b/c/aa/a
+/b/c//./aa/a/// /b/c/aa/a
+/b/c//./aa/.aaa /b/c/aa/.aaa
+/b/c//./aa/.aa. /b/c/aa/.aa.
+/b/c//./aa/.aa/ /b/c/aa/.aa
+/b/c//./aa/.a.a /b/c/aa/.a.a
+/b/c//./aa/.a.. /b/c/aa/.a..
+/b/c//./aa/.a./ /b/c/aa/.a.
+/b/c//./aa/.a/a /b/c/aa/.a/a
+/b/c//./aa/.a/. /b/c/aa/.a
+/b/c//./aa/.a// /b/c/aa/.a
+/b/c//./aa/..aa /b/c/aa/..aa
+/b/c//./aa/..a. /b/c/aa/..a.
+/b/c//./aa/..a/ /b/c/aa/..a
+/b/c//./aa/...a /b/c/aa/...a
+/b/c//./aa/.... /b/c/aa/....
+/b/c//./aa/.../ /b/c/aa/...
+/b/c//./aa/../a /b/c/a
+/b/c//./aa/../. /b/c
+/b/c//./aa/..// /b/c
+/b/c//./aa/./aa /b/c/aa/aa
+/b/c//./aa/./a. /b/c/aa/a.
+/b/c//./aa/./a/ /b/c/aa/a
+/b/c//./aa/./.a /b/c/aa/.a
+/b/c//./aa/./.. /b/c
+/b/c//./aa/././ /b/c/aa
+/b/c//./aa/.//a /b/c/aa/a
+/b/c//./aa/.//. /b/c/aa
+/b/c//./aa/./// /b/c/aa
+/b/c//./aa//aaa /b/c/aa/aaa
+/b/c//./aa//aa. /b/c/aa/aa.
+/b/c//./aa//aa/ /b/c/aa/aa
+/b/c//./aa//a.a /b/c/aa/a.a
+/b/c//./aa//a.. /b/c/aa/a..
+/b/c//./aa//a./ /b/c/aa/a.
+/b/c//./aa//a/a /b/c/aa/a/a
+/b/c//./aa//a/. /b/c/aa/a
+/b/c//./aa//a// /b/c/aa/a
+/b/c//./aa//.aa /b/c/aa/.aa
+/b/c//./aa//.a. /b/c/aa/.a.
+/b/c//./aa//.a/ /b/c/aa/.a
+/b/c//./aa//..a /b/c/aa/..a
+/b/c//./aa//... /b/c/aa/...
+/b/c//./aa//../ /b/c
+/b/c//./aa//./a /b/c/aa/a
+/b/c//./aa//./. /b/c/aa
+/b/c//./aa//.// /b/c/aa
+/b/c//./aa///aa /b/c/aa/aa
+/b/c//./aa///a. /b/c/aa/a.
+/b/c//./aa///a/ /b/c/aa/a
+/b/c//./aa///.a /b/c/aa/.a
+/b/c//./aa///.. /b/c
+/b/c//./aa///./ /b/c/aa
+/b/c//./aa////a /b/c/aa/a
+/b/c//./aa////. /b/c/aa
+/b/c//./aa///// /b/c/aa
+/b/c//./a.aaaaa /b/c/a.aaaaa
+/b/c//./a.aaaa. /b/c/a.aaaa.
+/b/c//./a.aaaa/ /b/c/a.aaaa
+/b/c//./a.aaa.a /b/c/a.aaa.a
+/b/c//./a.aaa.. /b/c/a.aaa..
+/b/c//./a.aaa./ /b/c/a.aaa.
+/b/c//./a.aaa/a /b/c/a.aaa/a
+/b/c//./a.aaa/. /b/c/a.aaa
+/b/c//./a.aaa// /b/c/a.aaa
+/b/c//./a.aa.aa /b/c/a.aa.aa
+/b/c//./a.aa.a. /b/c/a.aa.a.
+/b/c//./a.aa.a/ /b/c/a.aa.a
+/b/c//./a.aa..a /b/c/a.aa..a
+/b/c//./a.aa... /b/c/a.aa...
+/b/c//./a.aa../ /b/c/a.aa..
+/b/c//./a.aa./a /b/c/a.aa./a
+/b/c//./a.aa./. /b/c/a.aa.
+/b/c//./a.aa.// /b/c/a.aa.
+/b/c//./a.aa/aa /b/c/a.aa/aa
+/b/c//./a.aa/a. /b/c/a.aa/a.
+/b/c//./a.aa/a/ /b/c/a.aa/a
+/b/c//./a.aa/.a /b/c/a.aa/.a
+/b/c//./a.aa/.. /b/c
+/b/c//./a.aa/./ /b/c/a.aa
+/b/c//./a.aa//a /b/c/a.aa/a
+/b/c//./a.aa//. /b/c/a.aa
+/b/c//./a.aa/// /b/c/a.aa
+/b/c//./a.a.aaa /b/c/a.a.aaa
+/b/c//./a.a.aa. /b/c/a.a.aa.
+/b/c//./a.a.aa/ /b/c/a.a.aa
+/b/c//./a.a.a.a /b/c/a.a.a.a
+/b/c//./a.a.a.. /b/c/a.a.a..
+/b/c//./a.a.a./ /b/c/a.a.a.
+/b/c//./a.a.a/a /b/c/a.a.a/a
+/b/c//./a.a.a/. /b/c/a.a.a
+/b/c//./a.a.a// /b/c/a.a.a
+/b/c//./a.a..aa /b/c/a.a..aa
+/b/c//./a.a..a. /b/c/a.a..a.
+/b/c//./a.a..a/ /b/c/a.a..a
+/b/c//./a.a...a /b/c/a.a...a
+/b/c//./a.a.... /b/c/a.a....
+/b/c//./a.a.../ /b/c/a.a...
+/b/c//./a.a../a /b/c/a.a../a
+/b/c//./a.a../. /b/c/a.a..
+/b/c//./a.a..// /b/c/a.a..
+/b/c//./a.a./aa /b/c/a.a./aa
+/b/c//./a.a./a. /b/c/a.a./a.
+/b/c//./a.a./a/ /b/c/a.a./a
+/b/c//./a.a./.a /b/c/a.a./.a
+/b/c//./a.a./.. /b/c
+/b/c//./a.a././ /b/c/a.a.
+/b/c//./a.a.//a /b/c/a.a./a
+/b/c//./a.a.//. /b/c/a.a.
+/b/c//./a.a./// /b/c/a.a.
+/b/c//./a.a/aaa /b/c/a.a/aaa
+/b/c//./a.a/aa. /b/c/a.a/aa.
+/b/c//./a.a/aa/ /b/c/a.a/aa
+/b/c//./a.a/a.a /b/c/a.a/a.a
+/b/c//./a.a/a.. /b/c/a.a/a..
+/b/c//./a.a/a./ /b/c/a.a/a.
+/b/c//./a.a/a/a /b/c/a.a/a/a
+/b/c//./a.a/a/. /b/c/a.a/a
+/b/c//./a.a/a// /b/c/a.a/a
+/b/c//./a.a/.aa /b/c/a.a/.aa
+/b/c//./a.a/.a. /b/c/a.a/.a.
+/b/c//./a.a/.a/ /b/c/a.a/.a
+/b/c//./a.a/..a /b/c/a.a/..a
+/b/c//./a.a/... /b/c/a.a/...
+/b/c//./a.a/../ /b/c
+/b/c//./a.a/./a /b/c/a.a/a
+/b/c//./a.a/./. /b/c/a.a
+/b/c//./a.a/.// /b/c/a.a
+/b/c//./a.a//aa /b/c/a.a/aa
+/b/c//./a.a//a. /b/c/a.a/a.
+/b/c//./a.a//a/ /b/c/a.a/a
+/b/c//./a.a//.a /b/c/a.a/.a
+/b/c//./a.a//.. /b/c
+/b/c//./a.a//./ /b/c/a.a
+/b/c//./a.a///a /b/c/a.a/a
+/b/c//./a.a///. /b/c/a.a
+/b/c//./a.a//// /b/c/a.a
+/b/c//./a..aaaa /b/c/a..aaaa
+/b/c//./a..aaa. /b/c/a..aaa.
+/b/c//./a..aaa/ /b/c/a..aaa
+/b/c//./a..aa.a /b/c/a..aa.a
+/b/c//./a..aa.. /b/c/a..aa..
+/b/c//./a..aa./ /b/c/a..aa.
+/b/c//./a..aa/a /b/c/a..aa/a
+/b/c//./a..aa/. /b/c/a..aa
+/b/c//./a..aa// /b/c/a..aa
+/b/c//./a..a.aa /b/c/a..a.aa
+/b/c//./a..a.a. /b/c/a..a.a.
+/b/c//./a..a.a/ /b/c/a..a.a
+/b/c//./a..a..a /b/c/a..a..a
+/b/c//./a..a... /b/c/a..a...
+/b/c//./a..a../ /b/c/a..a..
+/b/c//./a..a./a /b/c/a..a./a
+/b/c//./a..a./. /b/c/a..a.
+/b/c//./a..a.// /b/c/a..a.
+/b/c//./a..a/aa /b/c/a..a/aa
+/b/c//./a..a/a. /b/c/a..a/a.
+/b/c//./a..a/a/ /b/c/a..a/a
+/b/c//./a..a/.a /b/c/a..a/.a
+/b/c//./a..a/.. /b/c
+/b/c//./a..a/./ /b/c/a..a
+/b/c//./a..a//a /b/c/a..a/a
+/b/c//./a..a//. /b/c/a..a
+/b/c//./a..a/// /b/c/a..a
+/b/c//./a...aaa /b/c/a...aaa
+/b/c//./a...aa. /b/c/a...aa.
+/b/c//./a...aa/ /b/c/a...aa
+/b/c//./a...a.a /b/c/a...a.a
+/b/c//./a...a.. /b/c/a...a..
+/b/c//./a...a./ /b/c/a...a.
+/b/c//./a...a/a /b/c/a...a/a
+/b/c//./a...a/. /b/c/a...a
+/b/c//./a...a// /b/c/a...a
+/b/c//./a....aa /b/c/a....aa
+/b/c//./a....a. /b/c/a....a.
+/b/c//./a....a/ /b/c/a....a
+/b/c//./a.....a /b/c/a.....a
+/b/c//./a...... /b/c/a......
+/b/c//./a...../ /b/c/a.....
+/b/c//./a..../a /b/c/a..../a
+/b/c//./a..../. /b/c/a....
+/b/c//./a....// /b/c/a....
+/b/c//./a.../aa /b/c/a.../aa
+/b/c//./a.../a. /b/c/a.../a.
+/b/c//./a.../a/ /b/c/a.../a
+/b/c//./a.../.a /b/c/a.../.a
+/b/c//./a.../.. /b/c
+/b/c//./a..././ /b/c/a...
+/b/c//./a...//a /b/c/a.../a
+/b/c//./a...//. /b/c/a...
+/b/c//./a.../// /b/c/a...
+/b/c//./a../aaa /b/c/a../aaa
+/b/c//./a../aa. /b/c/a../aa.
+/b/c//./a../aa/ /b/c/a../aa
+/b/c//./a../a.a /b/c/a../a.a
+/b/c//./a../a.. /b/c/a../a..
+/b/c//./a../a./ /b/c/a../a.
+/b/c//./a../a/a /b/c/a../a/a
+/b/c//./a../a/. /b/c/a../a
+/b/c//./a../a// /b/c/a../a
+/b/c//./a../.aa /b/c/a../.aa
+/b/c//./a../.a. /b/c/a../.a.
+/b/c//./a../.a/ /b/c/a../.a
+/b/c//./a../..a /b/c/a../..a
+/b/c//./a../... /b/c/a../...
+/b/c//./a../../ /b/c
+/b/c//./a.././a /b/c/a../a
+/b/c//./a.././. /b/c/a..
+/b/c//./a../.// /b/c/a..
+/b/c//./a..//aa /b/c/a../aa
+/b/c//./a..//a. /b/c/a../a.
+/b/c//./a..//a/ /b/c/a../a
+/b/c//./a..//.a /b/c/a../.a
+/b/c//./a..//.. /b/c
+/b/c//./a..//./ /b/c/a..
+/b/c//./a..///a /b/c/a../a
+/b/c//./a..///. /b/c/a..
+/b/c//./a..//// /b/c/a..
+/b/c//./a./aaaa /b/c/a./aaaa
+/b/c//./a./aaa. /b/c/a./aaa.
+/b/c//./a./aaa/ /b/c/a./aaa
+/b/c//./a./aa.a /b/c/a./aa.a
+/b/c//./a./aa.. /b/c/a./aa..
+/b/c//./a./aa./ /b/c/a./aa.
+/b/c//./a./aa/a /b/c/a./aa/a
+/b/c//./a./aa/. /b/c/a./aa
+/b/c//./a./aa// /b/c/a./aa
+/b/c//./a./a.aa /b/c/a./a.aa
+/b/c//./a./a.a. /b/c/a./a.a.
+/b/c//./a./a.a/ /b/c/a./a.a
+/b/c//./a./a..a /b/c/a./a..a
+/b/c//./a./a... /b/c/a./a...
+/b/c//./a./a../ /b/c/a./a..
+/b/c//./a./a./a /b/c/a./a./a
+/b/c//./a./a./. /b/c/a./a.
+/b/c//./a./a.// /b/c/a./a.
+/b/c//./a./a/aa /b/c/a./a/aa
+/b/c//./a./a/a. /b/c/a./a/a.
+/b/c//./a./a/a/ /b/c/a./a/a
+/b/c//./a./a/.a /b/c/a./a/.a
+/b/c//./a./a/.. /b/c/a.
+/b/c//./a./a/./ /b/c/a./a
+/b/c//./a./a//a /b/c/a./a/a
+/b/c//./a./a//. /b/c/a./a
+/b/c//./a./a/// /b/c/a./a
+/b/c//./a./.aaa /b/c/a./.aaa
+/b/c//./a./.aa. /b/c/a./.aa.
+/b/c//./a./.aa/ /b/c/a./.aa
+/b/c//./a./.a.a /b/c/a./.a.a
+/b/c//./a./.a.. /b/c/a./.a..
+/b/c//./a./.a./ /b/c/a./.a.
+/b/c//./a./.a/a /b/c/a./.a/a
+/b/c//./a./.a/. /b/c/a./.a
+/b/c//./a./.a// /b/c/a./.a
+/b/c//./a./..aa /b/c/a./..aa
+/b/c//./a./..a. /b/c/a./..a.
+/b/c//./a./..a/ /b/c/a./..a
+/b/c//./a./...a /b/c/a./...a
+/b/c//./a./.... /b/c/a./....
+/b/c//./a./.../ /b/c/a./...
+/b/c//./a./../a /b/c/a
+/b/c//./a./../. /b/c
+/b/c//./a./..// /b/c
+/b/c//./a././aa /b/c/a./aa
+/b/c//./a././a. /b/c/a./a.
+/b/c//./a././a/ /b/c/a./a
+/b/c//./a././.a /b/c/a./.a
+/b/c//./a././.. /b/c
+/b/c//./a./././ /b/c/a.
+/b/c//./a././/a /b/c/a./a
+/b/c//./a././/. /b/c/a.
+/b/c//./a././// /b/c/a.
+/b/c//./a.//aaa /b/c/a./aaa
+/b/c//./a.//aa. /b/c/a./aa.
+/b/c//./a.//aa/ /b/c/a./aa
+/b/c//./a.//a.a /b/c/a./a.a
+/b/c//./a.//a.. /b/c/a./a..
+/b/c//./a.//a./ /b/c/a./a.
+/b/c//./a.//a/a /b/c/a./a/a
+/b/c//./a.//a/. /b/c/a./a
+/b/c//./a.//a// /b/c/a./a
+/b/c//./a.//.aa /b/c/a./.aa
+/b/c//./a.//.a. /b/c/a./.a.
+/b/c//./a.//.a/ /b/c/a./.a
+/b/c//./a.//..a /b/c/a./..a
+/b/c//./a.//... /b/c/a./...
+/b/c//./a.//../ /b/c
+/b/c//./a.//./a /b/c/a./a
+/b/c//./a.//./. /b/c/a.
+/b/c//./a.//.// /b/c/a.
+/b/c//./a.///aa /b/c/a./aa
+/b/c//./a.///a. /b/c/a./a.
+/b/c//./a.///a/ /b/c/a./a
+/b/c//./a.///.a /b/c/a./.a
+/b/c//./a.///.. /b/c
+/b/c//./a.///./ /b/c/a.
+/b/c//./a.////a /b/c/a./a
+/b/c//./a.////. /b/c/a.
+/b/c//./a.///// /b/c/a.
+/b/c//./a/aaaaa /b/c/a/aaaaa
+/b/c//./a/aaaa. /b/c/a/aaaa.
+/b/c//./a/aaaa/ /b/c/a/aaaa
+/b/c//./a/aaa.a /b/c/a/aaa.a
+/b/c//./a/aaa.. /b/c/a/aaa..
+/b/c//./a/aaa./ /b/c/a/aaa.
+/b/c//./a/aaa/a /b/c/a/aaa/a
+/b/c//./a/aaa/. /b/c/a/aaa
+/b/c//./a/aaa// /b/c/a/aaa
+/b/c//./a/aa.aa /b/c/a/aa.aa
+/b/c//./a/aa.a. /b/c/a/aa.a.
+/b/c//./a/aa.a/ /b/c/a/aa.a
+/b/c//./a/aa..a /b/c/a/aa..a
+/b/c//./a/aa... /b/c/a/aa...
+/b/c//./a/aa../ /b/c/a/aa..
+/b/c//./a/aa./a /b/c/a/aa./a
+/b/c//./a/aa./. /b/c/a/aa.
+/b/c//./a/aa.// /b/c/a/aa.
+/b/c//./a/aa/aa /b/c/a/aa/aa
+/b/c//./a/aa/a. /b/c/a/aa/a.
+/b/c//./a/aa/a/ /b/c/a/aa/a
+/b/c//./a/aa/.a /b/c/a/aa/.a
+/b/c//./a/aa/.. /b/c/a
+/b/c//./a/aa/./ /b/c/a/aa
+/b/c//./a/aa//a /b/c/a/aa/a
+/b/c//./a/aa//. /b/c/a/aa
+/b/c//./a/aa/// /b/c/a/aa
+/b/c//./a/a.aaa /b/c/a/a.aaa
+/b/c//./a/a.aa. /b/c/a/a.aa.
+/b/c//./a/a.aa/ /b/c/a/a.aa
+/b/c//./a/a.a.a /b/c/a/a.a.a
+/b/c//./a/a.a.. /b/c/a/a.a..
+/b/c//./a/a.a./ /b/c/a/a.a.
+/b/c//./a/a.a/a /b/c/a/a.a/a
+/b/c//./a/a.a/. /b/c/a/a.a
+/b/c//./a/a.a// /b/c/a/a.a
+/b/c//./a/a..aa /b/c/a/a..aa
+/b/c//./a/a..a. /b/c/a/a..a.
+/b/c//./a/a..a/ /b/c/a/a..a
+/b/c//./a/a...a /b/c/a/a...a
+/b/c//./a/a.... /b/c/a/a....
+/b/c//./a/a.../ /b/c/a/a...
+/b/c//./a/a../a /b/c/a/a../a
+/b/c//./a/a../. /b/c/a/a..
+/b/c//./a/a..// /b/c/a/a..
+/b/c//./a/a./aa /b/c/a/a./aa
+/b/c//./a/a./a. /b/c/a/a./a.
+/b/c//./a/a./a/ /b/c/a/a./a
+/b/c//./a/a./.a /b/c/a/a./.a
+/b/c//./a/a./.. /b/c/a
+/b/c//./a/a././ /b/c/a/a.
+/b/c//./a/a.//a /b/c/a/a./a
+/b/c//./a/a.//. /b/c/a/a.
+/b/c//./a/a./// /b/c/a/a.
+/b/c//./a/a/aaa /b/c/a/a/aaa
+/b/c//./a/a/aa. /b/c/a/a/aa.
+/b/c//./a/a/aa/ /b/c/a/a/aa
+/b/c//./a/a/a.a /b/c/a/a/a.a
+/b/c//./a/a/a.. /b/c/a/a/a..
+/b/c//./a/a/a./ /b/c/a/a/a.
+/b/c//./a/a/a/a /b/c/a/a/a/a
+/b/c//./a/a/a/. /b/c/a/a/a
+/b/c//./a/a/a// /b/c/a/a/a
+/b/c//./a/a/.aa /b/c/a/a/.aa
+/b/c//./a/a/.a. /b/c/a/a/.a.
+/b/c//./a/a/.a/ /b/c/a/a/.a
+/b/c//./a/a/..a /b/c/a/a/..a
+/b/c//./a/a/... /b/c/a/a/...
+/b/c//./a/a/../ /b/c/a
+/b/c//./a/a/./a /b/c/a/a/a
+/b/c//./a/a/./. /b/c/a/a
+/b/c//./a/a/.// /b/c/a/a
+/b/c//./a/a//aa /b/c/a/a/aa
+/b/c//./a/a//a. /b/c/a/a/a.
+/b/c//./a/a//a/ /b/c/a/a/a
+/b/c//./a/a//.a /b/c/a/a/.a
+/b/c//./a/a//.. /b/c/a
+/b/c//./a/a//./ /b/c/a/a
+/b/c//./a/a///a /b/c/a/a/a
+/b/c//./a/a///. /b/c/a/a
+/b/c//./a/a//// /b/c/a/a
+/b/c//./a/.aaaa /b/c/a/.aaaa
+/b/c//./a/.aaa. /b/c/a/.aaa.
+/b/c//./a/.aaa/ /b/c/a/.aaa
+/b/c//./a/.aa.a /b/c/a/.aa.a
+/b/c//./a/.aa.. /b/c/a/.aa..
+/b/c//./a/.aa./ /b/c/a/.aa.
+/b/c//./a/.aa/a /b/c/a/.aa/a
+/b/c//./a/.aa/. /b/c/a/.aa
+/b/c//./a/.aa// /b/c/a/.aa
+/b/c//./a/.a.aa /b/c/a/.a.aa
+/b/c//./a/.a.a. /b/c/a/.a.a.
+/b/c//./a/.a.a/ /b/c/a/.a.a
+/b/c//./a/.a..a /b/c/a/.a..a
+/b/c//./a/.a... /b/c/a/.a...
+/b/c//./a/.a../ /b/c/a/.a..
+/b/c//./a/.a./a /b/c/a/.a./a
+/b/c//./a/.a./. /b/c/a/.a.
+/b/c//./a/.a.// /b/c/a/.a.
+/b/c//./a/.a/aa /b/c/a/.a/aa
+/b/c//./a/.a/a. /b/c/a/.a/a.
+/b/c//./a/.a/a/ /b/c/a/.a/a
+/b/c//./a/.a/.a /b/c/a/.a/.a
+/b/c//./a/.a/.. /b/c/a
+/b/c//./a/.a/./ /b/c/a/.a
+/b/c//./a/.a//a /b/c/a/.a/a
+/b/c//./a/.a//. /b/c/a/.a
+/b/c//./a/.a/// /b/c/a/.a
+/b/c//./a/..aaa /b/c/a/..aaa
+/b/c//./a/..aa. /b/c/a/..aa.
+/b/c//./a/..aa/ /b/c/a/..aa
+/b/c//./a/..a.a /b/c/a/..a.a
+/b/c//./a/..a.. /b/c/a/..a..
+/b/c//./a/..a./ /b/c/a/..a.
+/b/c//./a/..a/a /b/c/a/..a/a
+/b/c//./a/..a/. /b/c/a/..a
+/b/c//./a/..a// /b/c/a/..a
+/b/c//./a/...aa /b/c/a/...aa
+/b/c//./a/...a. /b/c/a/...a.
+/b/c//./a/...a/ /b/c/a/...a
+/b/c//./a/....a /b/c/a/....a
+/b/c//./a/..... /b/c/a/.....
+/b/c//./a/..../ /b/c/a/....
+/b/c//./a/.../a /b/c/a/.../a
+/b/c//./a/.../. /b/c/a/...
+/b/c//./a/...// /b/c/a/...
+/b/c//./a/../aa /b/c/aa
+/b/c//./a/../a. /b/c/a.
+/b/c//./a/../a/ /b/c/a
+/b/c//./a/../.a /b/c/.a
+/b/c//./a/../.. /b
+/b/c//./a/.././ /b/c
+/b/c//./a/..//a /b/c/a
+/b/c//./a/..//. /b/c
+/b/c//./a/../// /b/c
+/b/c//./a/./aaa /b/c/a/aaa
+/b/c//./a/./aa. /b/c/a/aa.
+/b/c//./a/./aa/ /b/c/a/aa
+/b/c//./a/./a.a /b/c/a/a.a
+/b/c//./a/./a.. /b/c/a/a..
+/b/c//./a/./a./ /b/c/a/a.
+/b/c//./a/./a/a /b/c/a/a/a
+/b/c//./a/./a/. /b/c/a/a
+/b/c//./a/./a// /b/c/a/a
+/b/c//./a/./.aa /b/c/a/.aa
+/b/c//./a/./.a. /b/c/a/.a.
+/b/c//./a/./.a/ /b/c/a/.a
+/b/c//./a/./..a /b/c/a/..a
+/b/c//./a/./... /b/c/a/...
+/b/c//./a/./../ /b/c
+/b/c//./a/././a /b/c/a/a
+/b/c//./a/././. /b/c/a
+/b/c//./a/./.// /b/c/a
+/b/c//./a/.//aa /b/c/a/aa
+/b/c//./a/.//a. /b/c/a/a.
+/b/c//./a/.//a/ /b/c/a/a
+/b/c//./a/.//.a /b/c/a/.a
+/b/c//./a/.//.. /b/c
+/b/c//./a/.//./ /b/c/a
+/b/c//./a/.///a /b/c/a/a
+/b/c//./a/.///. /b/c/a
+/b/c//./a/.//// /b/c/a
+/b/c//./a//aaaa /b/c/a/aaaa
+/b/c//./a//aaa. /b/c/a/aaa.
+/b/c//./a//aaa/ /b/c/a/aaa
+/b/c//./a//aa.a /b/c/a/aa.a
+/b/c//./a//aa.. /b/c/a/aa..
+/b/c//./a//aa./ /b/c/a/aa.
+/b/c//./a//aa/a /b/c/a/aa/a
+/b/c//./a//aa/. /b/c/a/aa
+/b/c//./a//aa// /b/c/a/aa
+/b/c//./a//a.aa /b/c/a/a.aa
+/b/c//./a//a.a. /b/c/a/a.a.
+/b/c//./a//a.a/ /b/c/a/a.a
+/b/c//./a//a..a /b/c/a/a..a
+/b/c//./a//a... /b/c/a/a...
+/b/c//./a//a../ /b/c/a/a..
+/b/c//./a//a./a /b/c/a/a./a
+/b/c//./a//a./. /b/c/a/a.
+/b/c//./a//a.// /b/c/a/a.
+/b/c//./a//a/aa /b/c/a/a/aa
+/b/c//./a//a/a. /b/c/a/a/a.
+/b/c//./a//a/a/ /b/c/a/a/a
+/b/c//./a//a/.a /b/c/a/a/.a
+/b/c//./a//a/.. /b/c/a
+/b/c//./a//a/./ /b/c/a/a
+/b/c//./a//a//a /b/c/a/a/a
+/b/c//./a//a//. /b/c/a/a
+/b/c//./a//a/// /b/c/a/a
+/b/c//./a//.aaa /b/c/a/.aaa
+/b/c//./a//.aa. /b/c/a/.aa.
+/b/c//./a//.aa/ /b/c/a/.aa
+/b/c//./a//.a.a /b/c/a/.a.a
+/b/c//./a//.a.. /b/c/a/.a..
+/b/c//./a//.a./ /b/c/a/.a.
+/b/c//./a//.a/a /b/c/a/.a/a
+/b/c//./a//.a/. /b/c/a/.a
+/b/c//./a//.a// /b/c/a/.a
+/b/c//./a//..aa /b/c/a/..aa
+/b/c//./a//..a. /b/c/a/..a.
+/b/c//./a//..a/ /b/c/a/..a
+/b/c//./a//...a /b/c/a/...a
+/b/c//./a//.... /b/c/a/....
+/b/c//./a//.../ /b/c/a/...
+/b/c//./a//../a /b/c/a
+/b/c//./a//../. /b/c
+/b/c//./a//..// /b/c
+/b/c//./a//./aa /b/c/a/aa
+/b/c//./a//./a. /b/c/a/a.
+/b/c//./a//./a/ /b/c/a/a
+/b/c//./a//./.a /b/c/a/.a
+/b/c//./a//./.. /b/c
+/b/c//./a//././ /b/c/a
+/b/c//./a//.//a /b/c/a/a
+/b/c//./a//.//. /b/c/a
+/b/c//./a//./// /b/c/a
+/b/c//./a///aaa /b/c/a/aaa
+/b/c//./a///aa. /b/c/a/aa.
+/b/c//./a///aa/ /b/c/a/aa
+/b/c//./a///a.a /b/c/a/a.a
+/b/c//./a///a.. /b/c/a/a..
+/b/c//./a///a./ /b/c/a/a.
+/b/c//./a///a/a /b/c/a/a/a
+/b/c//./a///a/. /b/c/a/a
+/b/c//./a///a// /b/c/a/a
+/b/c//./a///.aa /b/c/a/.aa
+/b/c//./a///.a. /b/c/a/.a.
+/b/c//./a///.a/ /b/c/a/.a
+/b/c//./a///..a /b/c/a/..a
+/b/c//./a///... /b/c/a/...
+/b/c//./a///../ /b/c
+/b/c//./a///./a /b/c/a/a
+/b/c//./a///./. /b/c/a
+/b/c//./a///.// /b/c/a
+/b/c//./a////aa /b/c/a/aa
+/b/c//./a////a. /b/c/a/a.
+/b/c//./a////a/ /b/c/a/a
+/b/c//./a////.a /b/c/a/.a
+/b/c//./a////.. /b/c
+/b/c//./a////./ /b/c/a
+/b/c//./a/////a /b/c/a/a
+/b/c//./a/////. /b/c/a
+/b/c//./a////// /b/c/a
+/b/c//./.aaaaaa /b/c/.aaaaaa
+/b/c//./.aaaaa. /b/c/.aaaaa.
+/b/c//./.aaaaa/ /b/c/.aaaaa
+/b/c//./.aaaa.a /b/c/.aaaa.a
+/b/c//./.aaaa.. /b/c/.aaaa..
+/b/c//./.aaaa./ /b/c/.aaaa.
+/b/c//./.aaaa/a /b/c/.aaaa/a
+/b/c//./.aaaa/. /b/c/.aaaa
+/b/c//./.aaaa// /b/c/.aaaa
+/b/c//./.aaa.aa /b/c/.aaa.aa
+/b/c//./.aaa.a. /b/c/.aaa.a.
+/b/c//./.aaa.a/ /b/c/.aaa.a
+/b/c//./.aaa..a /b/c/.aaa..a
+/b/c//./.aaa... /b/c/.aaa...
+/b/c//./.aaa../ /b/c/.aaa..
+/b/c//./.aaa./a /b/c/.aaa./a
+/b/c//./.aaa./. /b/c/.aaa.
+/b/c//./.aaa.// /b/c/.aaa.
+/b/c//./.aaa/aa /b/c/.aaa/aa
+/b/c//./.aaa/a. /b/c/.aaa/a.
+/b/c//./.aaa/a/ /b/c/.aaa/a
+/b/c//./.aaa/.a /b/c/.aaa/.a
+/b/c//./.aaa/.. /b/c
+/b/c//./.aaa/./ /b/c/.aaa
+/b/c//./.aaa//a /b/c/.aaa/a
+/b/c//./.aaa//. /b/c/.aaa
+/b/c//./.aaa/// /b/c/.aaa
+/b/c//./.aa.aaa /b/c/.aa.aaa
+/b/c//./.aa.aa. /b/c/.aa.aa.
+/b/c//./.aa.aa/ /b/c/.aa.aa
+/b/c//./.aa.a.a /b/c/.aa.a.a
+/b/c//./.aa.a.. /b/c/.aa.a..
+/b/c//./.aa.a./ /b/c/.aa.a.
+/b/c//./.aa.a/a /b/c/.aa.a/a
+/b/c//./.aa.a/. /b/c/.aa.a
+/b/c//./.aa.a// /b/c/.aa.a
+/b/c//./.aa..aa /b/c/.aa..aa
+/b/c//./.aa..a. /b/c/.aa..a.
+/b/c//./.aa..a/ /b/c/.aa..a
+/b/c//./.aa...a /b/c/.aa...a
+/b/c//./.aa.... /b/c/.aa....
+/b/c//./.aa.../ /b/c/.aa...
+/b/c//./.aa../a /b/c/.aa../a
+/b/c//./.aa../. /b/c/.aa..
+/b/c//./.aa..// /b/c/.aa..
+/b/c//./.aa./aa /b/c/.aa./aa
+/b/c//./.aa./a. /b/c/.aa./a.
+/b/c//./.aa./a/ /b/c/.aa./a
+/b/c//./.aa./.a /b/c/.aa./.a
+/b/c//./.aa./.. /b/c
+/b/c//./.aa././ /b/c/.aa.
+/b/c//./.aa.//a /b/c/.aa./a
+/b/c//./.aa.//. /b/c/.aa.
+/b/c//./.aa./// /b/c/.aa.
+/b/c//./.aa/aaa /b/c/.aa/aaa
+/b/c//./.aa/aa. /b/c/.aa/aa.
+/b/c//./.aa/aa/ /b/c/.aa/aa
+/b/c//./.aa/a.a /b/c/.aa/a.a
+/b/c//./.aa/a.. /b/c/.aa/a..
+/b/c//./.aa/a./ /b/c/.aa/a.
+/b/c//./.aa/a/a /b/c/.aa/a/a
+/b/c//./.aa/a/. /b/c/.aa/a
+/b/c//./.aa/a// /b/c/.aa/a
+/b/c//./.aa/.aa /b/c/.aa/.aa
+/b/c//./.aa/.a. /b/c/.aa/.a.
+/b/c//./.aa/.a/ /b/c/.aa/.a
+/b/c//./.aa/..a /b/c/.aa/..a
+/b/c//./.aa/... /b/c/.aa/...
+/b/c//./.aa/../ /b/c
+/b/c//./.aa/./a /b/c/.aa/a
+/b/c//./.aa/./. /b/c/.aa
+/b/c//./.aa/.// /b/c/.aa
+/b/c//./.aa//aa /b/c/.aa/aa
+/b/c//./.aa//a. /b/c/.aa/a.
+/b/c//./.aa//a/ /b/c/.aa/a
+/b/c//./.aa//.a /b/c/.aa/.a
+/b/c//./.aa//.. /b/c
+/b/c//./.aa//./ /b/c/.aa
+/b/c//./.aa///a /b/c/.aa/a
+/b/c//./.aa///. /b/c/.aa
+/b/c//./.aa//// /b/c/.aa
+/b/c//./.a.aaaa /b/c/.a.aaaa
+/b/c//./.a.aaa. /b/c/.a.aaa.
+/b/c//./.a.aaa/ /b/c/.a.aaa
+/b/c//./.a.aa.a /b/c/.a.aa.a
+/b/c//./.a.aa.. /b/c/.a.aa..
+/b/c//./.a.aa./ /b/c/.a.aa.
+/b/c//./.a.aa/a /b/c/.a.aa/a
+/b/c//./.a.aa/. /b/c/.a.aa
+/b/c//./.a.aa// /b/c/.a.aa
+/b/c//./.a.a.aa /b/c/.a.a.aa
+/b/c//./.a.a.a. /b/c/.a.a.a.
+/b/c//./.a.a.a/ /b/c/.a.a.a
+/b/c//./.a.a..a /b/c/.a.a..a
+/b/c//./.a.a... /b/c/.a.a...
+/b/c//./.a.a../ /b/c/.a.a..
+/b/c//./.a.a./a /b/c/.a.a./a
+/b/c//./.a.a./. /b/c/.a.a.
+/b/c//./.a.a.// /b/c/.a.a.
+/b/c//./.a.a/aa /b/c/.a.a/aa
+/b/c//./.a.a/a. /b/c/.a.a/a.
+/b/c//./.a.a/a/ /b/c/.a.a/a
+/b/c//./.a.a/.a /b/c/.a.a/.a
+/b/c//./.a.a/.. /b/c
+/b/c//./.a.a/./ /b/c/.a.a
+/b/c//./.a.a//a /b/c/.a.a/a
+/b/c//./.a.a//. /b/c/.a.a
+/b/c//./.a.a/// /b/c/.a.a
+/b/c//./.a..aaa /b/c/.a..aaa
+/b/c//./.a..aa. /b/c/.a..aa.
+/b/c//./.a..aa/ /b/c/.a..aa
+/b/c//./.a..a.a /b/c/.a..a.a
+/b/c//./.a..a.. /b/c/.a..a..
+/b/c//./.a..a./ /b/c/.a..a.
+/b/c//./.a..a/a /b/c/.a..a/a
+/b/c//./.a..a/. /b/c/.a..a
+/b/c//./.a..a// /b/c/.a..a
+/b/c//./.a...aa /b/c/.a...aa
+/b/c//./.a...a. /b/c/.a...a.
+/b/c//./.a...a/ /b/c/.a...a
+/b/c//./.a....a /b/c/.a....a
+/b/c//./.a..... /b/c/.a.....
+/b/c//./.a..../ /b/c/.a....
+/b/c//./.a.../a /b/c/.a.../a
+/b/c//./.a.../. /b/c/.a...
+/b/c//./.a...// /b/c/.a...
+/b/c//./.a../aa /b/c/.a../aa
+/b/c//./.a../a. /b/c/.a../a.
+/b/c//./.a../a/ /b/c/.a../a
+/b/c//./.a../.a /b/c/.a../.a
+/b/c//./.a../.. /b/c
+/b/c//./.a.././ /b/c/.a..
+/b/c//./.a..//a /b/c/.a../a
+/b/c//./.a..//. /b/c/.a..
+/b/c//./.a../// /b/c/.a..
+/b/c//./.a./aaa /b/c/.a./aaa
+/b/c//./.a./aa. /b/c/.a./aa.
+/b/c//./.a./aa/ /b/c/.a./aa
+/b/c//./.a./a.a /b/c/.a./a.a
+/b/c//./.a./a.. /b/c/.a./a..
+/b/c//./.a./a./ /b/c/.a./a.
+/b/c//./.a./a/a /b/c/.a./a/a
+/b/c//./.a./a/. /b/c/.a./a
+/b/c//./.a./a// /b/c/.a./a
+/b/c//./.a./.aa /b/c/.a./.aa
+/b/c//./.a./.a. /b/c/.a./.a.
+/b/c//./.a./.a/ /b/c/.a./.a
+/b/c//./.a./..a /b/c/.a./..a
+/b/c//./.a./... /b/c/.a./...
+/b/c//./.a./../ /b/c
+/b/c//./.a././a /b/c/.a./a
+/b/c//./.a././. /b/c/.a.
+/b/c//./.a./.// /b/c/.a.
+/b/c//./.a.//aa /b/c/.a./aa
+/b/c//./.a.//a. /b/c/.a./a.
+/b/c//./.a.//a/ /b/c/.a./a
+/b/c//./.a.//.a /b/c/.a./.a
+/b/c//./.a.//.. /b/c
+/b/c//./.a.//./ /b/c/.a.
+/b/c//./.a.///a /b/c/.a./a
+/b/c//./.a.///. /b/c/.a.
+/b/c//./.a.//// /b/c/.a.
+/b/c//./.a/aaaa /b/c/.a/aaaa
+/b/c//./.a/aaa. /b/c/.a/aaa.
+/b/c//./.a/aaa/ /b/c/.a/aaa
+/b/c//./.a/aa.a /b/c/.a/aa.a
+/b/c//./.a/aa.. /b/c/.a/aa..
+/b/c//./.a/aa./ /b/c/.a/aa.
+/b/c//./.a/aa/a /b/c/.a/aa/a
+/b/c//./.a/aa/. /b/c/.a/aa
+/b/c//./.a/aa// /b/c/.a/aa
+/b/c//./.a/a.aa /b/c/.a/a.aa
+/b/c//./.a/a.a. /b/c/.a/a.a.
+/b/c//./.a/a.a/ /b/c/.a/a.a
+/b/c//./.a/a..a /b/c/.a/a..a
+/b/c//./.a/a... /b/c/.a/a...
+/b/c//./.a/a../ /b/c/.a/a..
+/b/c//./.a/a./a /b/c/.a/a./a
+/b/c//./.a/a./. /b/c/.a/a.
+/b/c//./.a/a.// /b/c/.a/a.
+/b/c//./.a/a/aa /b/c/.a/a/aa
+/b/c//./.a/a/a. /b/c/.a/a/a.
+/b/c//./.a/a/a/ /b/c/.a/a/a
+/b/c//./.a/a/.a /b/c/.a/a/.a
+/b/c//./.a/a/.. /b/c/.a
+/b/c//./.a/a/./ /b/c/.a/a
+/b/c//./.a/a//a /b/c/.a/a/a
+/b/c//./.a/a//. /b/c/.a/a
+/b/c//./.a/a/// /b/c/.a/a
+/b/c//./.a/.aaa /b/c/.a/.aaa
+/b/c//./.a/.aa. /b/c/.a/.aa.
+/b/c//./.a/.aa/ /b/c/.a/.aa
+/b/c//./.a/.a.a /b/c/.a/.a.a
+/b/c//./.a/.a.. /b/c/.a/.a..
+/b/c//./.a/.a./ /b/c/.a/.a.
+/b/c//./.a/.a/a /b/c/.a/.a/a
+/b/c//./.a/.a/. /b/c/.a/.a
+/b/c//./.a/.a// /b/c/.a/.a
+/b/c//./.a/..aa /b/c/.a/..aa
+/b/c//./.a/..a. /b/c/.a/..a.
+/b/c//./.a/..a/ /b/c/.a/..a
+/b/c//./.a/...a /b/c/.a/...a
+/b/c//./.a/.... /b/c/.a/....
+/b/c//./.a/.../ /b/c/.a/...
+/b/c//./.a/../a /b/c/a
+/b/c//./.a/../. /b/c
+/b/c//./.a/..// /b/c
+/b/c//./.a/./aa /b/c/.a/aa
+/b/c//./.a/./a. /b/c/.a/a.
+/b/c//./.a/./a/ /b/c/.a/a
+/b/c//./.a/./.a /b/c/.a/.a
+/b/c//./.a/./.. /b/c
+/b/c//./.a/././ /b/c/.a
+/b/c//./.a/.//a /b/c/.a/a
+/b/c//./.a/.//. /b/c/.a
+/b/c//./.a/./// /b/c/.a
+/b/c//./.a//aaa /b/c/.a/aaa
+/b/c//./.a//aa. /b/c/.a/aa.
+/b/c//./.a//aa/ /b/c/.a/aa
+/b/c//./.a//a.a /b/c/.a/a.a
+/b/c//./.a//a.. /b/c/.a/a..
+/b/c//./.a//a./ /b/c/.a/a.
+/b/c//./.a//a/a /b/c/.a/a/a
+/b/c//./.a//a/. /b/c/.a/a
+/b/c//./.a//a// /b/c/.a/a
+/b/c//./.a//.aa /b/c/.a/.aa
+/b/c//./.a//.a. /b/c/.a/.a.
+/b/c//./.a//.a/ /b/c/.a/.a
+/b/c//./.a//..a /b/c/.a/..a
+/b/c//./.a//... /b/c/.a/...
+/b/c//./.a//../ /b/c
+/b/c//./.a//./a /b/c/.a/a
+/b/c//./.a//./. /b/c/.a
+/b/c//./.a//.// /b/c/.a
+/b/c//./.a///aa /b/c/.a/aa
+/b/c//./.a///a. /b/c/.a/a.
+/b/c//./.a///a/ /b/c/.a/a
+/b/c//./.a///.a /b/c/.a/.a
+/b/c//./.a///.. /b/c
+/b/c//./.a///./ /b/c/.a
+/b/c//./.a////a /b/c/.a/a
+/b/c//./.a////. /b/c/.a
+/b/c//./.a///// /b/c/.a
+/b/c//./..aaaaa /b/c/..aaaaa
+/b/c//./..aaaa. /b/c/..aaaa.
+/b/c//./..aaaa/ /b/c/..aaaa
+/b/c//./..aaa.a /b/c/..aaa.a
+/b/c//./..aaa.. /b/c/..aaa..
+/b/c//./..aaa./ /b/c/..aaa.
+/b/c//./..aaa/a /b/c/..aaa/a
+/b/c//./..aaa/. /b/c/..aaa
+/b/c//./..aaa// /b/c/..aaa
+/b/c//./..aa.aa /b/c/..aa.aa
+/b/c//./..aa.a. /b/c/..aa.a.
+/b/c//./..aa.a/ /b/c/..aa.a
+/b/c//./..aa..a /b/c/..aa..a
+/b/c//./..aa... /b/c/..aa...
+/b/c//./..aa../ /b/c/..aa..
+/b/c//./..aa./a /b/c/..aa./a
+/b/c//./..aa./. /b/c/..aa.
+/b/c//./..aa.// /b/c/..aa.
+/b/c//./..aa/aa /b/c/..aa/aa
+/b/c//./..aa/a. /b/c/..aa/a.
+/b/c//./..aa/a/ /b/c/..aa/a
+/b/c//./..aa/.a /b/c/..aa/.a
+/b/c//./..aa/.. /b/c
+/b/c//./..aa/./ /b/c/..aa
+/b/c//./..aa//a /b/c/..aa/a
+/b/c//./..aa//. /b/c/..aa
+/b/c//./..aa/// /b/c/..aa
+/b/c//./..a.aaa /b/c/..a.aaa
+/b/c//./..a.aa. /b/c/..a.aa.
+/b/c//./..a.aa/ /b/c/..a.aa
+/b/c//./..a.a.a /b/c/..a.a.a
+/b/c//./..a.a.. /b/c/..a.a..
+/b/c//./..a.a./ /b/c/..a.a.
+/b/c//./..a.a/a /b/c/..a.a/a
+/b/c//./..a.a/. /b/c/..a.a
+/b/c//./..a.a// /b/c/..a.a
+/b/c//./..a..aa /b/c/..a..aa
+/b/c//./..a..a. /b/c/..a..a.
+/b/c//./..a..a/ /b/c/..a..a
+/b/c//./..a...a /b/c/..a...a
+/b/c//./..a.... /b/c/..a....
+/b/c//./..a.../ /b/c/..a...
+/b/c//./..a../a /b/c/..a../a
+/b/c//./..a../. /b/c/..a..
+/b/c//./..a..// /b/c/..a..
+/b/c//./..a./aa /b/c/..a./aa
+/b/c//./..a./a. /b/c/..a./a.
+/b/c//./..a./a/ /b/c/..a./a
+/b/c//./..a./.a /b/c/..a./.a
+/b/c//./..a./.. /b/c
+/b/c//./..a././ /b/c/..a.
+/b/c//./..a.//a /b/c/..a./a
+/b/c//./..a.//. /b/c/..a.
+/b/c//./..a./// /b/c/..a.
+/b/c//./..a/aaa /b/c/..a/aaa
+/b/c//./..a/aa. /b/c/..a/aa.
+/b/c//./..a/aa/ /b/c/..a/aa
+/b/c//./..a/a.a /b/c/..a/a.a
+/b/c//./..a/a.. /b/c/..a/a..
+/b/c//./..a/a./ /b/c/..a/a.
+/b/c//./..a/a/a /b/c/..a/a/a
+/b/c//./..a/a/. /b/c/..a/a
+/b/c//./..a/a// /b/c/..a/a
+/b/c//./..a/.aa /b/c/..a/.aa
+/b/c//./..a/.a. /b/c/..a/.a.
+/b/c//./..a/.a/ /b/c/..a/.a
+/b/c//./..a/..a /b/c/..a/..a
+/b/c//./..a/... /b/c/..a/...
+/b/c//./..a/../ /b/c
+/b/c//./..a/./a /b/c/..a/a
+/b/c//./..a/./. /b/c/..a
+/b/c//./..a/.// /b/c/..a
+/b/c//./..a//aa /b/c/..a/aa
+/b/c//./..a//a. /b/c/..a/a.
+/b/c//./..a//a/ /b/c/..a/a
+/b/c//./..a//.a /b/c/..a/.a
+/b/c//./..a//.. /b/c
+/b/c//./..a//./ /b/c/..a
+/b/c//./..a///a /b/c/..a/a
+/b/c//./..a///. /b/c/..a
+/b/c//./..a//// /b/c/..a
+/b/c//./...aaaa /b/c/...aaaa
+/b/c//./...aaa. /b/c/...aaa.
+/b/c//./...aaa/ /b/c/...aaa
+/b/c//./...aa.a /b/c/...aa.a
+/b/c//./...aa.. /b/c/...aa..
+/b/c//./...aa./ /b/c/...aa.
+/b/c//./...aa/a /b/c/...aa/a
+/b/c//./...aa/. /b/c/...aa
+/b/c//./...aa// /b/c/...aa
+/b/c//./...a.aa /b/c/...a.aa
+/b/c//./...a.a. /b/c/...a.a.
+/b/c//./...a.a/ /b/c/...a.a
+/b/c//./...a..a /b/c/...a..a
+/b/c//./...a... /b/c/...a...
+/b/c//./...a../ /b/c/...a..
+/b/c//./...a./a /b/c/...a./a
+/b/c//./...a./. /b/c/...a.
+/b/c//./...a.// /b/c/...a.
+/b/c//./...a/aa /b/c/...a/aa
+/b/c//./...a/a. /b/c/...a/a.
+/b/c//./...a/a/ /b/c/...a/a
+/b/c//./...a/.a /b/c/...a/.a
+/b/c//./...a/.. /b/c
+/b/c//./...a/./ /b/c/...a
+/b/c//./...a//a /b/c/...a/a
+/b/c//./...a//. /b/c/...a
+/b/c//./...a/// /b/c/...a
+/b/c//./....aaa /b/c/....aaa
+/b/c//./....aa. /b/c/....aa.
+/b/c//./....aa/ /b/c/....aa
+/b/c//./....a.a /b/c/....a.a
+/b/c//./....a.. /b/c/....a..
+/b/c//./....a./ /b/c/....a.
+/b/c//./....a/a /b/c/....a/a
+/b/c//./....a/. /b/c/....a
+/b/c//./....a// /b/c/....a
+/b/c//./.....aa /b/c/.....aa
+/b/c//./.....a. /b/c/.....a.
+/b/c//./.....a/ /b/c/.....a
+/b/c//./......a /b/c/......a
+/b/c//./....... /b/c/.......
+/b/c//./....../ /b/c/......
+/b/c//./...../a /b/c/...../a
+/b/c//./...../. /b/c/.....
+/b/c//./.....// /b/c/.....
+/b/c//./..../aa /b/c/..../aa
+/b/c//./..../a. /b/c/..../a.
+/b/c//./..../a/ /b/c/..../a
+/b/c//./..../.a /b/c/..../.a
+/b/c//./..../.. /b/c
+/b/c//./...././ /b/c/....
+/b/c//./....//a /b/c/..../a
+/b/c//./....//. /b/c/....
+/b/c//./..../// /b/c/....
+/b/c//./.../aaa /b/c/.../aaa
+/b/c//./.../aa. /b/c/.../aa.
+/b/c//./.../aa/ /b/c/.../aa
+/b/c//./.../a.a /b/c/.../a.a
+/b/c//./.../a.. /b/c/.../a..
+/b/c//./.../a./ /b/c/.../a.
+/b/c//./.../a/a /b/c/.../a/a
+/b/c//./.../a/. /b/c/.../a
+/b/c//./.../a// /b/c/.../a
+/b/c//./.../.aa /b/c/.../.aa
+/b/c//./.../.a. /b/c/.../.a.
+/b/c//./.../.a/ /b/c/.../.a
+/b/c//./.../..a /b/c/.../..a
+/b/c//./.../... /b/c/.../...
+/b/c//./.../../ /b/c
+/b/c//./..././a /b/c/.../a
+/b/c//./..././. /b/c/...
+/b/c//./.../.// /b/c/...
+/b/c//./...//aa /b/c/.../aa
+/b/c//./...//a. /b/c/.../a.
+/b/c//./...//a/ /b/c/.../a
+/b/c//./...//.a /b/c/.../.a
+/b/c//./...//.. /b/c
+/b/c//./...//./ /b/c/...
+/b/c//./...///a /b/c/.../a
+/b/c//./...///. /b/c/...
+/b/c//./...//// /b/c/...
+/b/c//./../aaaa /b/aaaa
+/b/c//./../aaa. /b/aaa.
+/b/c//./../aaa/ /b/aaa
+/b/c//./../aa.a /b/aa.a
+/b/c//./../aa.. /b/aa..
+/b/c//./../aa./ /b/aa.
+/b/c//./../aa/a /b/aa/a
+/b/c//./../aa/. /b/aa
+/b/c//./../aa// /b/aa
+/b/c//./../a.aa /b/a.aa
+/b/c//./../a.a. /b/a.a.
+/b/c//./../a.a/ /b/a.a
+/b/c//./../a..a /b/a..a
+/b/c//./../a... /b/a...
+/b/c//./../a../ /b/a..
+/b/c//./../a./a /b/a./a
+/b/c//./../a./. /b/a.
+/b/c//./../a.// /b/a.
+/b/c//./../a/aa /b/a/aa
+/b/c//./../a/a. /b/a/a.
+/b/c//./../a/a/ /b/a/a
+/b/c//./../a/.a /b/a/.a
+/b/c//./../a/.. /b
+/b/c//./../a/./ /b/a
+/b/c//./../a//a /b/a/a
+/b/c//./../a//. /b/a
+/b/c//./../a/// /b/a
+/b/c//./../.aaa /b/.aaa
+/b/c//./../.aa. /b/.aa.
+/b/c//./../.aa/ /b/.aa
+/b/c//./../.a.a /b/.a.a
+/b/c//./../.a.. /b/.a..
+/b/c//./../.a./ /b/.a.
+/b/c//./../.a/a /b/.a/a
+/b/c//./../.a/. /b/.a
+/b/c//./../.a// /b/.a
+/b/c//./../..aa /b/..aa
+/b/c//./../..a. /b/..a.
+/b/c//./../..a/ /b/..a
+/b/c//./../...a /b/...a
+/b/c//./../.... /b/....
+/b/c//./../.../ /b/...
+/b/c//./../../a /a
+/b/c//./../../. /
+/b/c//./../..// /
+/b/c//./.././aa /b/aa
+/b/c//./.././a. /b/a.
+/b/c//./.././a/ /b/a
+/b/c//./.././.a /b/.a
+/b/c//./.././.. /
+/b/c//./../././ /b
+/b/c//./.././/a /b/a
+/b/c//./.././/. /b
+/b/c//./.././// /b
+/b/c//./..//aaa /b/aaa
+/b/c//./..//aa. /b/aa.
+/b/c//./..//aa/ /b/aa
+/b/c//./..//a.a /b/a.a
+/b/c//./..//a.. /b/a..
+/b/c//./..//a./ /b/a.
+/b/c//./..//a/a /b/a/a
+/b/c//./..//a/. /b/a
+/b/c//./..//a// /b/a
+/b/c//./..//.aa /b/.aa
+/b/c//./..//.a. /b/.a.
+/b/c//./..//.a/ /b/.a
+/b/c//./..//..a /b/..a
+/b/c//./..//... /b/...
+/b/c//./..//../ /
+/b/c//./..//./a /b/a
+/b/c//./..//./. /b
+/b/c//./..//.// /b
+/b/c//./..///aa /b/aa
+/b/c//./..///a. /b/a.
+/b/c//./..///a/ /b/a
+/b/c//./..///.a /b/.a
+/b/c//./..///.. /
+/b/c//./..///./ /b
+/b/c//./..////a /b/a
+/b/c//./..////. /b
+/b/c//./..///// /b
+/b/c//././aaaaa /b/c/aaaaa
+/b/c//././aaaa. /b/c/aaaa.
+/b/c//././aaaa/ /b/c/aaaa
+/b/c//././aaa.a /b/c/aaa.a
+/b/c//././aaa.. /b/c/aaa..
+/b/c//././aaa./ /b/c/aaa.
+/b/c//././aaa/a /b/c/aaa/a
+/b/c//././aaa/. /b/c/aaa
+/b/c//././aaa// /b/c/aaa
+/b/c//././aa.aa /b/c/aa.aa
+/b/c//././aa.a. /b/c/aa.a.
+/b/c//././aa.a/ /b/c/aa.a
+/b/c//././aa..a /b/c/aa..a
+/b/c//././aa... /b/c/aa...
+/b/c//././aa../ /b/c/aa..
+/b/c//././aa./a /b/c/aa./a
+/b/c//././aa./. /b/c/aa.
+/b/c//././aa.// /b/c/aa.
+/b/c//././aa/aa /b/c/aa/aa
+/b/c//././aa/a. /b/c/aa/a.
+/b/c//././aa/a/ /b/c/aa/a
+/b/c//././aa/.a /b/c/aa/.a
+/b/c//././aa/.. /b/c
+/b/c//././aa/./ /b/c/aa
+/b/c//././aa//a /b/c/aa/a
+/b/c//././aa//. /b/c/aa
+/b/c//././aa/// /b/c/aa
+/b/c//././a.aaa /b/c/a.aaa
+/b/c//././a.aa. /b/c/a.aa.
+/b/c//././a.aa/ /b/c/a.aa
+/b/c//././a.a.a /b/c/a.a.a
+/b/c//././a.a.. /b/c/a.a..
+/b/c//././a.a./ /b/c/a.a.
+/b/c//././a.a/a /b/c/a.a/a
+/b/c//././a.a/. /b/c/a.a
+/b/c//././a.a// /b/c/a.a
+/b/c//././a..aa /b/c/a..aa
+/b/c//././a..a. /b/c/a..a.
+/b/c//././a..a/ /b/c/a..a
+/b/c//././a...a /b/c/a...a
+/b/c//././a.... /b/c/a....
+/b/c//././a.../ /b/c/a...
+/b/c//././a../a /b/c/a../a
+/b/c//././a../. /b/c/a..
+/b/c//././a..// /b/c/a..
+/b/c//././a./aa /b/c/a./aa
+/b/c//././a./a. /b/c/a./a.
+/b/c//././a./a/ /b/c/a./a
+/b/c//././a./.a /b/c/a./.a
+/b/c//././a./.. /b/c
+/b/c//././a././ /b/c/a.
+/b/c//././a.//a /b/c/a./a
+/b/c//././a.//. /b/c/a.
+/b/c//././a./// /b/c/a.
+/b/c//././a/aaa /b/c/a/aaa
+/b/c//././a/aa. /b/c/a/aa.
+/b/c//././a/aa/ /b/c/a/aa
+/b/c//././a/a.a /b/c/a/a.a
+/b/c//././a/a.. /b/c/a/a..
+/b/c//././a/a./ /b/c/a/a.
+/b/c//././a/a/a /b/c/a/a/a
+/b/c//././a/a/. /b/c/a/a
+/b/c//././a/a// /b/c/a/a
+/b/c//././a/.aa /b/c/a/.aa
+/b/c//././a/.a. /b/c/a/.a.
+/b/c//././a/.a/ /b/c/a/.a
+/b/c//././a/..a /b/c/a/..a
+/b/c//././a/... /b/c/a/...
+/b/c//././a/../ /b/c
+/b/c//././a/./a /b/c/a/a
+/b/c//././a/./. /b/c/a
+/b/c//././a/.// /b/c/a
+/b/c//././a//aa /b/c/a/aa
+/b/c//././a//a. /b/c/a/a.
+/b/c//././a//a/ /b/c/a/a
+/b/c//././a//.a /b/c/a/.a
+/b/c//././a//.. /b/c
+/b/c//././a//./ /b/c/a
+/b/c//././a///a /b/c/a/a
+/b/c//././a///. /b/c/a
+/b/c//././a//// /b/c/a
+/b/c//././.aaaa /b/c/.aaaa
+/b/c//././.aaa. /b/c/.aaa.
+/b/c//././.aaa/ /b/c/.aaa
+/b/c//././.aa.a /b/c/.aa.a
+/b/c//././.aa.. /b/c/.aa..
+/b/c//././.aa./ /b/c/.aa.
+/b/c//././.aa/a /b/c/.aa/a
+/b/c//././.aa/. /b/c/.aa
+/b/c//././.aa// /b/c/.aa
+/b/c//././.a.aa /b/c/.a.aa
+/b/c//././.a.a. /b/c/.a.a.
+/b/c//././.a.a/ /b/c/.a.a
+/b/c//././.a..a /b/c/.a..a
+/b/c//././.a... /b/c/.a...
+/b/c//././.a../ /b/c/.a..
+/b/c//././.a./a /b/c/.a./a
+/b/c//././.a./. /b/c/.a.
+/b/c//././.a.// /b/c/.a.
+/b/c//././.a/aa /b/c/.a/aa
+/b/c//././.a/a. /b/c/.a/a.
+/b/c//././.a/a/ /b/c/.a/a
+/b/c//././.a/.a /b/c/.a/.a
+/b/c//././.a/.. /b/c
+/b/c//././.a/./ /b/c/.a
+/b/c//././.a//a /b/c/.a/a
+/b/c//././.a//. /b/c/.a
+/b/c//././.a/// /b/c/.a
+/b/c//././..aaa /b/c/..aaa
+/b/c//././..aa. /b/c/..aa.
+/b/c//././..aa/ /b/c/..aa
+/b/c//././..a.a /b/c/..a.a
+/b/c//././..a.. /b/c/..a..
+/b/c//././..a./ /b/c/..a.
+/b/c//././..a/a /b/c/..a/a
+/b/c//././..a/. /b/c/..a
+/b/c//././..a// /b/c/..a
+/b/c//././...aa /b/c/...aa
+/b/c//././...a. /b/c/...a.
+/b/c//././...a/ /b/c/...a
+/b/c//././....a /b/c/....a
+/b/c//././..... /b/c/.....
+/b/c//././..../ /b/c/....
+/b/c//././.../a /b/c/.../a
+/b/c//././.../. /b/c/...
+/b/c//././...// /b/c/...
+/b/c//././../aa /b/aa
+/b/c//././../a. /b/a.
+/b/c//././../a/ /b/a
+/b/c//././../.a /b/.a
+/b/c//././../.. /
+/b/c//././.././ /b
+/b/c//././..//a /b/a
+/b/c//././..//. /b
+/b/c//././../// /b
+/b/c//./././aaa /b/c/aaa
+/b/c//./././aa. /b/c/aa.
+/b/c//./././aa/ /b/c/aa
+/b/c//./././a.a /b/c/a.a
+/b/c//./././a.. /b/c/a..
+/b/c//./././a./ /b/c/a.
+/b/c//./././a/a /b/c/a/a
+/b/c//./././a/. /b/c/a
+/b/c//./././a// /b/c/a
+/b/c//./././.aa /b/c/.aa
+/b/c//./././.a. /b/c/.a.
+/b/c//./././.a/ /b/c/.a
+/b/c//./././..a /b/c/..a
+/b/c//./././... /b/c/...
+/b/c//./././../ /b
+/b/c//././././a /b/c/a
+/b/c//././././. /b/c
+/b/c//./././.// /b/c
+/b/c//./././/aa /b/c/aa
+/b/c//./././/a. /b/c/a.
+/b/c//./././/a/ /b/c/a
+/b/c//./././/.a /b/c/.a
+/b/c//./././/.. /b
+/b/c//./././/./ /b/c
+/b/c//./././//a /b/c/a
+/b/c//./././//. /b/c
+/b/c//./././/// /b/c
+/b/c//././/aaaa /b/c/aaaa
+/b/c//././/aaa. /b/c/aaa.
+/b/c//././/aaa/ /b/c/aaa
+/b/c//././/aa.a /b/c/aa.a
+/b/c//././/aa.. /b/c/aa..
+/b/c//././/aa./ /b/c/aa.
+/b/c//././/aa/a /b/c/aa/a
+/b/c//././/aa/. /b/c/aa
+/b/c//././/aa// /b/c/aa
+/b/c//././/a.aa /b/c/a.aa
+/b/c//././/a.a. /b/c/a.a.
+/b/c//././/a.a/ /b/c/a.a
+/b/c//././/a..a /b/c/a..a
+/b/c//././/a... /b/c/a...
+/b/c//././/a../ /b/c/a..
+/b/c//././/a./a /b/c/a./a
+/b/c//././/a./. /b/c/a.
+/b/c//././/a.// /b/c/a.
+/b/c//././/a/aa /b/c/a/aa
+/b/c//././/a/a. /b/c/a/a.
+/b/c//././/a/a/ /b/c/a/a
+/b/c//././/a/.a /b/c/a/.a
+/b/c//././/a/.. /b/c
+/b/c//././/a/./ /b/c/a
+/b/c//././/a//a /b/c/a/a
+/b/c//././/a//. /b/c/a
+/b/c//././/a/// /b/c/a
+/b/c//././/.aaa /b/c/.aaa
+/b/c//././/.aa. /b/c/.aa.
+/b/c//././/.aa/ /b/c/.aa
+/b/c//././/.a.a /b/c/.a.a
+/b/c//././/.a.. /b/c/.a..
+/b/c//././/.a./ /b/c/.a.
+/b/c//././/.a/a /b/c/.a/a
+/b/c//././/.a/. /b/c/.a
+/b/c//././/.a// /b/c/.a
+/b/c//././/..aa /b/c/..aa
+/b/c//././/..a. /b/c/..a.
+/b/c//././/..a/ /b/c/..a
+/b/c//././/...a /b/c/...a
+/b/c//././/.... /b/c/....
+/b/c//././/.../ /b/c/...
+/b/c//././/../a /b/a
+/b/c//././/../. /b
+/b/c//././/..// /b
+/b/c//././/./aa /b/c/aa
+/b/c//././/./a. /b/c/a.
+/b/c//././/./a/ /b/c/a
+/b/c//././/./.a /b/c/.a
+/b/c//././/./.. /b
+/b/c//././/././ /b/c
+/b/c//././/.//a /b/c/a
+/b/c//././/.//. /b/c
+/b/c//././/./// /b/c
+/b/c//././//aaa /b/c/aaa
+/b/c//././//aa. /b/c/aa.
+/b/c//././//aa/ /b/c/aa
+/b/c//././//a.a /b/c/a.a
+/b/c//././//a.. /b/c/a..
+/b/c//././//a./ /b/c/a.
+/b/c//././//a/a /b/c/a/a
+/b/c//././//a/. /b/c/a
+/b/c//././//a// /b/c/a
+/b/c//././//.aa /b/c/.aa
+/b/c//././//.a. /b/c/.a.
+/b/c//././//.a/ /b/c/.a
+/b/c//././//..a /b/c/..a
+/b/c//././//... /b/c/...
+/b/c//././//../ /b
+/b/c//././//./a /b/c/a
+/b/c//././//./. /b/c
+/b/c//././//.// /b/c
+/b/c//././///aa /b/c/aa
+/b/c//././///a. /b/c/a.
+/b/c//././///a/ /b/c/a
+/b/c//././///.a /b/c/.a
+/b/c//././///.. /b
+/b/c//././///./ /b/c
+/b/c//././////a /b/c/a
+/b/c//././////. /b/c
+/b/c//././///// /b/c
+/b/c//.//aaaaaa /b/c/aaaaaa
+/b/c//.//aaaaa. /b/c/aaaaa.
+/b/c//.//aaaaa/ /b/c/aaaaa
+/b/c//.//aaaa.a /b/c/aaaa.a
+/b/c//.//aaaa.. /b/c/aaaa..
+/b/c//.//aaaa./ /b/c/aaaa.
+/b/c//.//aaaa/a /b/c/aaaa/a
+/b/c//.//aaaa/. /b/c/aaaa
+/b/c//.//aaaa// /b/c/aaaa
+/b/c//.//aaa.aa /b/c/aaa.aa
+/b/c//.//aaa.a. /b/c/aaa.a.
+/b/c//.//aaa.a/ /b/c/aaa.a
+/b/c//.//aaa..a /b/c/aaa..a
+/b/c//.//aaa... /b/c/aaa...
+/b/c//.//aaa../ /b/c/aaa..
+/b/c//.//aaa./a /b/c/aaa./a
+/b/c//.//aaa./. /b/c/aaa.
+/b/c//.//aaa.// /b/c/aaa.
+/b/c//.//aaa/aa /b/c/aaa/aa
+/b/c//.//aaa/a. /b/c/aaa/a.
+/b/c//.//aaa/a/ /b/c/aaa/a
+/b/c//.//aaa/.a /b/c/aaa/.a
+/b/c//.//aaa/.. /b/c
+/b/c//.//aaa/./ /b/c/aaa
+/b/c//.//aaa//a /b/c/aaa/a
+/b/c//.//aaa//. /b/c/aaa
+/b/c//.//aaa/// /b/c/aaa
+/b/c//.//aa.aaa /b/c/aa.aaa
+/b/c//.//aa.aa. /b/c/aa.aa.
+/b/c//.//aa.aa/ /b/c/aa.aa
+/b/c//.//aa.a.a /b/c/aa.a.a
+/b/c//.//aa.a.. /b/c/aa.a..
+/b/c//.//aa.a./ /b/c/aa.a.
+/b/c//.//aa.a/a /b/c/aa.a/a
+/b/c//.//aa.a/. /b/c/aa.a
+/b/c//.//aa.a// /b/c/aa.a
+/b/c//.//aa..aa /b/c/aa..aa
+/b/c//.//aa..a. /b/c/aa..a.
+/b/c//.//aa..a/ /b/c/aa..a
+/b/c//.//aa...a /b/c/aa...a
+/b/c//.//aa.... /b/c/aa....
+/b/c//.//aa.../ /b/c/aa...
+/b/c//.//aa../a /b/c/aa../a
+/b/c//.//aa../. /b/c/aa..
+/b/c//.//aa..// /b/c/aa..
+/b/c//.//aa./aa /b/c/aa./aa
+/b/c//.//aa./a. /b/c/aa./a.
+/b/c//.//aa./a/ /b/c/aa./a
+/b/c//.//aa./.a /b/c/aa./.a
+/b/c//.//aa./.. /b/c
+/b/c//.//aa././ /b/c/aa.
+/b/c//.//aa.//a /b/c/aa./a
+/b/c//.//aa.//. /b/c/aa.
+/b/c//.//aa./// /b/c/aa.
+/b/c//.//aa/aaa /b/c/aa/aaa
+/b/c//.//aa/aa. /b/c/aa/aa.
+/b/c//.//aa/aa/ /b/c/aa/aa
+/b/c//.//aa/a.a /b/c/aa/a.a
+/b/c//.//aa/a.. /b/c/aa/a..
+/b/c//.//aa/a./ /b/c/aa/a.
+/b/c//.//aa/a/a /b/c/aa/a/a
+/b/c//.//aa/a/. /b/c/aa/a
+/b/c//.//aa/a// /b/c/aa/a
+/b/c//.//aa/.aa /b/c/aa/.aa
+/b/c//.//aa/.a. /b/c/aa/.a.
+/b/c//.//aa/.a/ /b/c/aa/.a
+/b/c//.//aa/..a /b/c/aa/..a
+/b/c//.//aa/... /b/c/aa/...
+/b/c//.//aa/../ /b/c
+/b/c//.//aa/./a /b/c/aa/a
+/b/c//.//aa/./. /b/c/aa
+/b/c//.//aa/.// /b/c/aa
+/b/c//.//aa//aa /b/c/aa/aa
+/b/c//.//aa//a. /b/c/aa/a.
+/b/c//.//aa//a/ /b/c/aa/a
+/b/c//.//aa//.a /b/c/aa/.a
+/b/c//.//aa//.. /b/c
+/b/c//.//aa//./ /b/c/aa
+/b/c//.//aa///a /b/c/aa/a
+/b/c//.//aa///. /b/c/aa
+/b/c//.//aa//// /b/c/aa
+/b/c//.//a.aaaa /b/c/a.aaaa
+/b/c//.//a.aaa. /b/c/a.aaa.
+/b/c//.//a.aaa/ /b/c/a.aaa
+/b/c//.//a.aa.a /b/c/a.aa.a
+/b/c//.//a.aa.. /b/c/a.aa..
+/b/c//.//a.aa./ /b/c/a.aa.
+/b/c//.//a.aa/a /b/c/a.aa/a
+/b/c//.//a.aa/. /b/c/a.aa
+/b/c//.//a.aa// /b/c/a.aa
+/b/c//.//a.a.aa /b/c/a.a.aa
+/b/c//.//a.a.a. /b/c/a.a.a.
+/b/c//.//a.a.a/ /b/c/a.a.a
+/b/c//.//a.a..a /b/c/a.a..a
+/b/c//.//a.a... /b/c/a.a...
+/b/c//.//a.a../ /b/c/a.a..
+/b/c//.//a.a./a /b/c/a.a./a
+/b/c//.//a.a./. /b/c/a.a.
+/b/c//.//a.a.// /b/c/a.a.
+/b/c//.//a.a/aa /b/c/a.a/aa
+/b/c//.//a.a/a. /b/c/a.a/a.
+/b/c//.//a.a/a/ /b/c/a.a/a
+/b/c//.//a.a/.a /b/c/a.a/.a
+/b/c//.//a.a/.. /b/c
+/b/c//.//a.a/./ /b/c/a.a
+/b/c//.//a.a//a /b/c/a.a/a
+/b/c//.//a.a//. /b/c/a.a
+/b/c//.//a.a/// /b/c/a.a
+/b/c//.//a..aaa /b/c/a..aaa
+/b/c//.//a..aa. /b/c/a..aa.
+/b/c//.//a..aa/ /b/c/a..aa
+/b/c//.//a..a.a /b/c/a..a.a
+/b/c//.//a..a.. /b/c/a..a..
+/b/c//.//a..a./ /b/c/a..a.
+/b/c//.//a..a/a /b/c/a..a/a
+/b/c//.//a..a/. /b/c/a..a
+/b/c//.//a..a// /b/c/a..a
+/b/c//.//a...aa /b/c/a...aa
+/b/c//.//a...a. /b/c/a...a.
+/b/c//.//a...a/ /b/c/a...a
+/b/c//.//a....a /b/c/a....a
+/b/c//.//a..... /b/c/a.....
+/b/c//.//a..../ /b/c/a....
+/b/c//.//a.../a /b/c/a.../a
+/b/c//.//a.../. /b/c/a...
+/b/c//.//a...// /b/c/a...
+/b/c//.//a../aa /b/c/a../aa
+/b/c//.//a../a. /b/c/a../a.
+/b/c//.//a../a/ /b/c/a../a
+/b/c//.//a../.a /b/c/a../.a
+/b/c//.//a../.. /b/c
+/b/c//.//a.././ /b/c/a..
+/b/c//.//a..//a /b/c/a../a
+/b/c//.//a..//. /b/c/a..
+/b/c//.//a../// /b/c/a..
+/b/c//.//a./aaa /b/c/a./aaa
+/b/c//.//a./aa. /b/c/a./aa.
+/b/c//.//a./aa/ /b/c/a./aa
+/b/c//.//a./a.a /b/c/a./a.a
+/b/c//.//a./a.. /b/c/a./a..
+/b/c//.//a./a./ /b/c/a./a.
+/b/c//.//a./a/a /b/c/a./a/a
+/b/c//.//a./a/. /b/c/a./a
+/b/c//.//a./a// /b/c/a./a
+/b/c//.//a./.aa /b/c/a./.aa
+/b/c//.//a./.a. /b/c/a./.a.
+/b/c//.//a./.a/ /b/c/a./.a
+/b/c//.//a./..a /b/c/a./..a
+/b/c//.//a./... /b/c/a./...
+/b/c//.//a./../ /b/c
+/b/c//.//a././a /b/c/a./a
+/b/c//.//a././. /b/c/a.
+/b/c//.//a./.// /b/c/a.
+/b/c//.//a.//aa /b/c/a./aa
+/b/c//.//a.//a. /b/c/a./a.
+/b/c//.//a.//a/ /b/c/a./a
+/b/c//.//a.//.a /b/c/a./.a
+/b/c//.//a.//.. /b/c
+/b/c//.//a.//./ /b/c/a.
+/b/c//.//a.///a /b/c/a./a
+/b/c//.//a.///. /b/c/a.
+/b/c//.//a.//// /b/c/a.
+/b/c//.//a/aaaa /b/c/a/aaaa
+/b/c//.//a/aaa. /b/c/a/aaa.
+/b/c//.//a/aaa/ /b/c/a/aaa
+/b/c//.//a/aa.a /b/c/a/aa.a
+/b/c//.//a/aa.. /b/c/a/aa..
+/b/c//.//a/aa./ /b/c/a/aa.
+/b/c//.//a/aa/a /b/c/a/aa/a
+/b/c//.//a/aa/. /b/c/a/aa
+/b/c//.//a/aa// /b/c/a/aa
+/b/c//.//a/a.aa /b/c/a/a.aa
+/b/c//.//a/a.a. /b/c/a/a.a.
+/b/c//.//a/a.a/ /b/c/a/a.a
+/b/c//.//a/a..a /b/c/a/a..a
+/b/c//.//a/a... /b/c/a/a...
+/b/c//.//a/a../ /b/c/a/a..
+/b/c//.//a/a./a /b/c/a/a./a
+/b/c//.//a/a./. /b/c/a/a.
+/b/c//.//a/a.// /b/c/a/a.
+/b/c//.//a/a/aa /b/c/a/a/aa
+/b/c//.//a/a/a. /b/c/a/a/a.
+/b/c//.//a/a/a/ /b/c/a/a/a
+/b/c//.//a/a/.a /b/c/a/a/.a
+/b/c//.//a/a/.. /b/c/a
+/b/c//.//a/a/./ /b/c/a/a
+/b/c//.//a/a//a /b/c/a/a/a
+/b/c//.//a/a//. /b/c/a/a
+/b/c//.//a/a/// /b/c/a/a
+/b/c//.//a/.aaa /b/c/a/.aaa
+/b/c//.//a/.aa. /b/c/a/.aa.
+/b/c//.//a/.aa/ /b/c/a/.aa
+/b/c//.//a/.a.a /b/c/a/.a.a
+/b/c//.//a/.a.. /b/c/a/.a..
+/b/c//.//a/.a./ /b/c/a/.a.
+/b/c//.//a/.a/a /b/c/a/.a/a
+/b/c//.//a/.a/. /b/c/a/.a
+/b/c//.//a/.a// /b/c/a/.a
+/b/c//.//a/..aa /b/c/a/..aa
+/b/c//.//a/..a. /b/c/a/..a.
+/b/c//.//a/..a/ /b/c/a/..a
+/b/c//.//a/...a /b/c/a/...a
+/b/c//.//a/.... /b/c/a/....
+/b/c//.//a/.../ /b/c/a/...
+/b/c//.//a/../a /b/c/a
+/b/c//.//a/../. /b/c
+/b/c//.//a/..// /b/c
+/b/c//.//a/./aa /b/c/a/aa
+/b/c//.//a/./a. /b/c/a/a.
+/b/c//.//a/./a/ /b/c/a/a
+/b/c//.//a/./.a /b/c/a/.a
+/b/c//.//a/./.. /b/c
+/b/c//.//a/././ /b/c/a
+/b/c//.//a/.//a /b/c/a/a
+/b/c//.//a/.//. /b/c/a
+/b/c//.//a/./// /b/c/a
+/b/c//.//a//aaa /b/c/a/aaa
+/b/c//.//a//aa. /b/c/a/aa.
+/b/c//.//a//aa/ /b/c/a/aa
+/b/c//.//a//a.a /b/c/a/a.a
+/b/c//.//a//a.. /b/c/a/a..
+/b/c//.//a//a./ /b/c/a/a.
+/b/c//.//a//a/a /b/c/a/a/a
+/b/c//.//a//a/. /b/c/a/a
+/b/c//.//a//a// /b/c/a/a
+/b/c//.//a//.aa /b/c/a/.aa
+/b/c//.//a//.a. /b/c/a/.a.
+/b/c//.//a//.a/ /b/c/a/.a
+/b/c//.//a//..a /b/c/a/..a
+/b/c//.//a//... /b/c/a/...
+/b/c//.//a//../ /b/c
+/b/c//.//a//./a /b/c/a/a
+/b/c//.//a//./. /b/c/a
+/b/c//.//a//.// /b/c/a
+/b/c//.//a///aa /b/c/a/aa
+/b/c//.//a///a. /b/c/a/a.
+/b/c//.//a///a/ /b/c/a/a
+/b/c//.//a///.a /b/c/a/.a
+/b/c//.//a///.. /b/c
+/b/c//.//a///./ /b/c/a
+/b/c//.//a////a /b/c/a/a
+/b/c//.//a////. /b/c/a
+/b/c//.//a///// /b/c/a
+/b/c//.//.aaaaa /b/c/.aaaaa
+/b/c//.//.aaaa. /b/c/.aaaa.
+/b/c//.//.aaaa/ /b/c/.aaaa
+/b/c//.//.aaa.a /b/c/.aaa.a
+/b/c//.//.aaa.. /b/c/.aaa..
+/b/c//.//.aaa./ /b/c/.aaa.
+/b/c//.//.aaa/a /b/c/.aaa/a
+/b/c//.//.aaa/. /b/c/.aaa
+/b/c//.//.aaa// /b/c/.aaa
+/b/c//.//.aa.aa /b/c/.aa.aa
+/b/c//.//.aa.a. /b/c/.aa.a.
+/b/c//.//.aa.a/ /b/c/.aa.a
+/b/c//.//.aa..a /b/c/.aa..a
+/b/c//.//.aa... /b/c/.aa...
+/b/c//.//.aa../ /b/c/.aa..
+/b/c//.//.aa./a /b/c/.aa./a
+/b/c//.//.aa./. /b/c/.aa.
+/b/c//.//.aa.// /b/c/.aa.
+/b/c//.//.aa/aa /b/c/.aa/aa
+/b/c//.//.aa/a. /b/c/.aa/a.
+/b/c//.//.aa/a/ /b/c/.aa/a
+/b/c//.//.aa/.a /b/c/.aa/.a
+/b/c//.//.aa/.. /b/c
+/b/c//.//.aa/./ /b/c/.aa
+/b/c//.//.aa//a /b/c/.aa/a
+/b/c//.//.aa//. /b/c/.aa
+/b/c//.//.aa/// /b/c/.aa
+/b/c//.//.a.aaa /b/c/.a.aaa
+/b/c//.//.a.aa. /b/c/.a.aa.
+/b/c//.//.a.aa/ /b/c/.a.aa
+/b/c//.//.a.a.a /b/c/.a.a.a
+/b/c//.//.a.a.. /b/c/.a.a..
+/b/c//.//.a.a./ /b/c/.a.a.
+/b/c//.//.a.a/a /b/c/.a.a/a
+/b/c//.//.a.a/. /b/c/.a.a
+/b/c//.//.a.a// /b/c/.a.a
+/b/c//.//.a..aa /b/c/.a..aa
+/b/c//.//.a..a. /b/c/.a..a.
+/b/c//.//.a..a/ /b/c/.a..a
+/b/c//.//.a...a /b/c/.a...a
+/b/c//.//.a.... /b/c/.a....
+/b/c//.//.a.../ /b/c/.a...
+/b/c//.//.a../a /b/c/.a../a
+/b/c//.//.a../. /b/c/.a..
+/b/c//.//.a..// /b/c/.a..
+/b/c//.//.a./aa /b/c/.a./aa
+/b/c//.//.a./a. /b/c/.a./a.
+/b/c//.//.a./a/ /b/c/.a./a
+/b/c//.//.a./.a /b/c/.a./.a
+/b/c//.//.a./.. /b/c
+/b/c//.//.a././ /b/c/.a.
+/b/c//.//.a.//a /b/c/.a./a
+/b/c//.//.a.//. /b/c/.a.
+/b/c//.//.a./// /b/c/.a.
+/b/c//.//.a/aaa /b/c/.a/aaa
+/b/c//.//.a/aa. /b/c/.a/aa.
+/b/c//.//.a/aa/ /b/c/.a/aa
+/b/c//.//.a/a.a /b/c/.a/a.a
+/b/c//.//.a/a.. /b/c/.a/a..
+/b/c//.//.a/a./ /b/c/.a/a.
+/b/c//.//.a/a/a /b/c/.a/a/a
+/b/c//.//.a/a/. /b/c/.a/a
+/b/c//.//.a/a// /b/c/.a/a
+/b/c//.//.a/.aa /b/c/.a/.aa
+/b/c//.//.a/.a. /b/c/.a/.a.
+/b/c//.//.a/.a/ /b/c/.a/.a
+/b/c//.//.a/..a /b/c/.a/..a
+/b/c//.//.a/... /b/c/.a/...
+/b/c//.//.a/../ /b/c
+/b/c//.//.a/./a /b/c/.a/a
+/b/c//.//.a/./. /b/c/.a
+/b/c//.//.a/.// /b/c/.a
+/b/c//.//.a//aa /b/c/.a/aa
+/b/c//.//.a//a. /b/c/.a/a.
+/b/c//.//.a//a/ /b/c/.a/a
+/b/c//.//.a//.a /b/c/.a/.a
+/b/c//.//.a//.. /b/c
+/b/c//.//.a//./ /b/c/.a
+/b/c//.//.a///a /b/c/.a/a
+/b/c//.//.a///. /b/c/.a
+/b/c//.//.a//// /b/c/.a
+/b/c//.//..aaaa /b/c/..aaaa
+/b/c//.//..aaa. /b/c/..aaa.
+/b/c//.//..aaa/ /b/c/..aaa
+/b/c//.//..aa.a /b/c/..aa.a
+/b/c//.//..aa.. /b/c/..aa..
+/b/c//.//..aa./ /b/c/..aa.
+/b/c//.//..aa/a /b/c/..aa/a
+/b/c//.//..aa/. /b/c/..aa
+/b/c//.//..aa// /b/c/..aa
+/b/c//.//..a.aa /b/c/..a.aa
+/b/c//.//..a.a. /b/c/..a.a.
+/b/c//.//..a.a/ /b/c/..a.a
+/b/c//.//..a..a /b/c/..a..a
+/b/c//.//..a... /b/c/..a...
+/b/c//.//..a../ /b/c/..a..
+/b/c//.//..a./a /b/c/..a./a
+/b/c//.//..a./. /b/c/..a.
+/b/c//.//..a.// /b/c/..a.
+/b/c//.//..a/aa /b/c/..a/aa
+/b/c//.//..a/a. /b/c/..a/a.
+/b/c//.//..a/a/ /b/c/..a/a
+/b/c//.//..a/.a /b/c/..a/.a
+/b/c//.//..a/.. /b/c
+/b/c//.//..a/./ /b/c/..a
+/b/c//.//..a//a /b/c/..a/a
+/b/c//.//..a//. /b/c/..a
+/b/c//.//..a/// /b/c/..a
+/b/c//.//...aaa /b/c/...aaa
+/b/c//.//...aa. /b/c/...aa.
+/b/c//.//...aa/ /b/c/...aa
+/b/c//.//...a.a /b/c/...a.a
+/b/c//.//...a.. /b/c/...a..
+/b/c//.//...a./ /b/c/...a.
+/b/c//.//...a/a /b/c/...a/a
+/b/c//.//...a/. /b/c/...a
+/b/c//.//...a// /b/c/...a
+/b/c//.//....aa /b/c/....aa
+/b/c//.//....a. /b/c/....a.
+/b/c//.//....a/ /b/c/....a
+/b/c//.//.....a /b/c/.....a
+/b/c//.//...... /b/c/......
+/b/c//.//...../ /b/c/.....
+/b/c//.//..../a /b/c/..../a
+/b/c//.//..../. /b/c/....
+/b/c//.//....// /b/c/....
+/b/c//.//.../aa /b/c/.../aa
+/b/c//.//.../a. /b/c/.../a.
+/b/c//.//.../a/ /b/c/.../a
+/b/c//.//.../.a /b/c/.../.a
+/b/c//.//.../.. /b/c
+/b/c//.//..././ /b/c/...
+/b/c//.//...//a /b/c/.../a
+/b/c//.//...//. /b/c/...
+/b/c//.//.../// /b/c/...
+/b/c//.//../aaa /b/aaa
+/b/c//.//../aa. /b/aa.
+/b/c//.//../aa/ /b/aa
+/b/c//.//../a.a /b/a.a
+/b/c//.//../a.. /b/a..
+/b/c//.//../a./ /b/a.
+/b/c//.//../a/a /b/a/a
+/b/c//.//../a/. /b/a
+/b/c//.//../a// /b/a
+/b/c//.//../.aa /b/.aa
+/b/c//.//../.a. /b/.a.
+/b/c//.//../.a/ /b/.a
+/b/c//.//../..a /b/..a
+/b/c//.//../... /b/...
+/b/c//.//../../ /
+/b/c//.//.././a /b/a
+/b/c//.//.././. /b
+/b/c//.//../.// /b
+/b/c//.//..//aa /b/aa
+/b/c//.//..//a. /b/a.
+/b/c//.//..//a/ /b/a
+/b/c//.//..//.a /b/.a
+/b/c//.//..//.. /
+/b/c//.//..//./ /b
+/b/c//.//..///a /b/a
+/b/c//.//..///. /b
+/b/c//.//..//// /b
+/b/c//.//./aaaa /b/c/aaaa
+/b/c//.//./aaa. /b/c/aaa.
+/b/c//.//./aaa/ /b/c/aaa
+/b/c//.//./aa.a /b/c/aa.a
+/b/c//.//./aa.. /b/c/aa..
+/b/c//.//./aa./ /b/c/aa.
+/b/c//.//./aa/a /b/c/aa/a
+/b/c//.//./aa/. /b/c/aa
+/b/c//.//./aa// /b/c/aa
+/b/c//.//./a.aa /b/c/a.aa
+/b/c//.//./a.a. /b/c/a.a.
+/b/c//.//./a.a/ /b/c/a.a
+/b/c//.//./a..a /b/c/a..a
+/b/c//.//./a... /b/c/a...
+/b/c//.//./a../ /b/c/a..
+/b/c//.//./a./a /b/c/a./a
+/b/c//.//./a./. /b/c/a.
+/b/c//.//./a.// /b/c/a.
+/b/c//.//./a/aa /b/c/a/aa
+/b/c//.//./a/a. /b/c/a/a.
+/b/c//.//./a/a/ /b/c/a/a
+/b/c//.//./a/.a /b/c/a/.a
+/b/c//.//./a/.. /b/c
+/b/c//.//./a/./ /b/c/a
+/b/c//.//./a//a /b/c/a/a
+/b/c//.//./a//. /b/c/a
+/b/c//.//./a/// /b/c/a
+/b/c//.//./.aaa /b/c/.aaa
+/b/c//.//./.aa. /b/c/.aa.
+/b/c//.//./.aa/ /b/c/.aa
+/b/c//.//./.a.a /b/c/.a.a
+/b/c//.//./.a.. /b/c/.a..
+/b/c//.//./.a./ /b/c/.a.
+/b/c//.//./.a/a /b/c/.a/a
+/b/c//.//./.a/. /b/c/.a
+/b/c//.//./.a// /b/c/.a
+/b/c//.//./..aa /b/c/..aa
+/b/c//.//./..a. /b/c/..a.
+/b/c//.//./..a/ /b/c/..a
+/b/c//.//./...a /b/c/...a
+/b/c//.//./.... /b/c/....
+/b/c//.//./.../ /b/c/...
+/b/c//.//./../a /b/a
+/b/c//.//./../. /b
+/b/c//.//./..// /b
+/b/c//.//././aa /b/c/aa
+/b/c//.//././a. /b/c/a.
+/b/c//.//././a/ /b/c/a
+/b/c//.//././.a /b/c/.a
+/b/c//.//././.. /b
+/b/c//.//./././ /b/c
+/b/c//.//././/a /b/c/a
+/b/c//.//././/. /b/c
+/b/c//.//././// /b/c
+/b/c//.//.//aaa /b/c/aaa
+/b/c//.//.//aa. /b/c/aa.
+/b/c//.//.//aa/ /b/c/aa
+/b/c//.//.//a.a /b/c/a.a
+/b/c//.//.//a.. /b/c/a..
+/b/c//.//.//a./ /b/c/a.
+/b/c//.//.//a/a /b/c/a/a
+/b/c//.//.//a/. /b/c/a
+/b/c//.//.//a// /b/c/a
+/b/c//.//.//.aa /b/c/.aa
+/b/c//.//.//.a. /b/c/.a.
+/b/c//.//.//.a/ /b/c/.a
+/b/c//.//.//..a /b/c/..a
+/b/c//.//.//... /b/c/...
+/b/c//.//.//../ /b
+/b/c//.//.//./a /b/c/a
+/b/c//.//.//./. /b/c
+/b/c//.//.//.// /b/c
+/b/c//.//.///aa /b/c/aa
+/b/c//.//.///a. /b/c/a.
+/b/c//.//.///a/ /b/c/a
+/b/c//.//.///.a /b/c/.a
+/b/c//.//.///.. /b
+/b/c//.//.///./ /b/c
+/b/c//.//.////a /b/c/a
+/b/c//.//.////. /b/c
+/b/c//.//.///// /b/c
+/b/c//.///aaaaa /b/c/aaaaa
+/b/c//.///aaaa. /b/c/aaaa.
+/b/c//.///aaaa/ /b/c/aaaa
+/b/c//.///aaa.a /b/c/aaa.a
+/b/c//.///aaa.. /b/c/aaa..
+/b/c//.///aaa./ /b/c/aaa.
+/b/c//.///aaa/a /b/c/aaa/a
+/b/c//.///aaa/. /b/c/aaa
+/b/c//.///aaa// /b/c/aaa
+/b/c//.///aa.aa /b/c/aa.aa
+/b/c//.///aa.a. /b/c/aa.a.
+/b/c//.///aa.a/ /b/c/aa.a
+/b/c//.///aa..a /b/c/aa..a
+/b/c//.///aa... /b/c/aa...
+/b/c//.///aa../ /b/c/aa..
+/b/c//.///aa./a /b/c/aa./a
+/b/c//.///aa./. /b/c/aa.
+/b/c//.///aa.// /b/c/aa.
+/b/c//.///aa/aa /b/c/aa/aa
+/b/c//.///aa/a. /b/c/aa/a.
+/b/c//.///aa/a/ /b/c/aa/a
+/b/c//.///aa/.a /b/c/aa/.a
+/b/c//.///aa/.. /b/c
+/b/c//.///aa/./ /b/c/aa
+/b/c//.///aa//a /b/c/aa/a
+/b/c//.///aa//. /b/c/aa
+/b/c//.///aa/// /b/c/aa
+/b/c//.///a.aaa /b/c/a.aaa
+/b/c//.///a.aa. /b/c/a.aa.
+/b/c//.///a.aa/ /b/c/a.aa
+/b/c//.///a.a.a /b/c/a.a.a
+/b/c//.///a.a.. /b/c/a.a..
+/b/c//.///a.a./ /b/c/a.a.
+/b/c//.///a.a/a /b/c/a.a/a
+/b/c//.///a.a/. /b/c/a.a
+/b/c//.///a.a// /b/c/a.a
+/b/c//.///a..aa /b/c/a..aa
+/b/c//.///a..a. /b/c/a..a.
+/b/c//.///a..a/ /b/c/a..a
+/b/c//.///a...a /b/c/a...a
+/b/c//.///a.... /b/c/a....
+/b/c//.///a.../ /b/c/a...
+/b/c//.///a../a /b/c/a../a
+/b/c//.///a../. /b/c/a..
+/b/c//.///a..// /b/c/a..
+/b/c//.///a./aa /b/c/a./aa
+/b/c//.///a./a. /b/c/a./a.
+/b/c//.///a./a/ /b/c/a./a
+/b/c//.///a./.a /b/c/a./.a
+/b/c//.///a./.. /b/c
+/b/c//.///a././ /b/c/a.
+/b/c//.///a.//a /b/c/a./a
+/b/c//.///a.//. /b/c/a.
+/b/c//.///a./// /b/c/a.
+/b/c//.///a/aaa /b/c/a/aaa
+/b/c//.///a/aa. /b/c/a/aa.
+/b/c//.///a/aa/ /b/c/a/aa
+/b/c//.///a/a.a /b/c/a/a.a
+/b/c//.///a/a.. /b/c/a/a..
+/b/c//.///a/a./ /b/c/a/a.
+/b/c//.///a/a/a /b/c/a/a/a
+/b/c//.///a/a/. /b/c/a/a
+/b/c//.///a/a// /b/c/a/a
+/b/c//.///a/.aa /b/c/a/.aa
+/b/c//.///a/.a. /b/c/a/.a.
+/b/c//.///a/.a/ /b/c/a/.a
+/b/c//.///a/..a /b/c/a/..a
+/b/c//.///a/... /b/c/a/...
+/b/c//.///a/../ /b/c
+/b/c//.///a/./a /b/c/a/a
+/b/c//.///a/./. /b/c/a
+/b/c//.///a/.// /b/c/a
+/b/c//.///a//aa /b/c/a/aa
+/b/c//.///a//a. /b/c/a/a.
+/b/c//.///a//a/ /b/c/a/a
+/b/c//.///a//.a /b/c/a/.a
+/b/c//.///a//.. /b/c
+/b/c//.///a//./ /b/c/a
+/b/c//.///a///a /b/c/a/a
+/b/c//.///a///. /b/c/a
+/b/c//.///a//// /b/c/a
+/b/c//.///.aaaa /b/c/.aaaa
+/b/c//.///.aaa. /b/c/.aaa.
+/b/c//.///.aaa/ /b/c/.aaa
+/b/c//.///.aa.a /b/c/.aa.a
+/b/c//.///.aa.. /b/c/.aa..
+/b/c//.///.aa./ /b/c/.aa.
+/b/c//.///.aa/a /b/c/.aa/a
+/b/c//.///.aa/. /b/c/.aa
+/b/c//.///.aa// /b/c/.aa
+/b/c//.///.a.aa /b/c/.a.aa
+/b/c//.///.a.a. /b/c/.a.a.
+/b/c//.///.a.a/ /b/c/.a.a
+/b/c//.///.a..a /b/c/.a..a
+/b/c//.///.a... /b/c/.a...
+/b/c//.///.a../ /b/c/.a..
+/b/c//.///.a./a /b/c/.a./a
+/b/c//.///.a./. /b/c/.a.
+/b/c//.///.a.// /b/c/.a.
+/b/c//.///.a/aa /b/c/.a/aa
+/b/c//.///.a/a. /b/c/.a/a.
+/b/c//.///.a/a/ /b/c/.a/a
+/b/c//.///.a/.a /b/c/.a/.a
+/b/c//.///.a/.. /b/c
+/b/c//.///.a/./ /b/c/.a
+/b/c//.///.a//a /b/c/.a/a
+/b/c//.///.a//. /b/c/.a
+/b/c//.///.a/// /b/c/.a
+/b/c//.///..aaa /b/c/..aaa
+/b/c//.///..aa. /b/c/..aa.
+/b/c//.///..aa/ /b/c/..aa
+/b/c//.///..a.a /b/c/..a.a
+/b/c//.///..a.. /b/c/..a..
+/b/c//.///..a./ /b/c/..a.
+/b/c//.///..a/a /b/c/..a/a
+/b/c//.///..a/. /b/c/..a
+/b/c//.///..a// /b/c/..a
+/b/c//.///...aa /b/c/...aa
+/b/c//.///...a. /b/c/...a.
+/b/c//.///...a/ /b/c/...a
+/b/c//.///....a /b/c/....a
+/b/c//.///..... /b/c/.....
+/b/c//.///..../ /b/c/....
+/b/c//.///.../a /b/c/.../a
+/b/c//.///.../. /b/c/...
+/b/c//.///...// /b/c/...
+/b/c//.///../aa /b/aa
+/b/c//.///../a. /b/a.
+/b/c//.///../a/ /b/a
+/b/c//.///../.a /b/.a
+/b/c//.///../.. /
+/b/c//.///.././ /b
+/b/c//.///..//a /b/a
+/b/c//.///..//. /b
+/b/c//.///../// /b
+/b/c//.///./aaa /b/c/aaa
+/b/c//.///./aa. /b/c/aa.
+/b/c//.///./aa/ /b/c/aa
+/b/c//.///./a.a /b/c/a.a
+/b/c//.///./a.. /b/c/a..
+/b/c//.///./a./ /b/c/a.
+/b/c//.///./a/a /b/c/a/a
+/b/c//.///./a/. /b/c/a
+/b/c//.///./a// /b/c/a
+/b/c//.///./.aa /b/c/.aa
+/b/c//.///./.a. /b/c/.a.
+/b/c//.///./.a/ /b/c/.a
+/b/c//.///./..a /b/c/..a
+/b/c//.///./... /b/c/...
+/b/c//.///./../ /b
+/b/c//.///././a /b/c/a
+/b/c//.///././. /b/c
+/b/c//.///./.// /b/c
+/b/c//.///.//aa /b/c/aa
+/b/c//.///.//a. /b/c/a.
+/b/c//.///.//a/ /b/c/a
+/b/c//.///.//.a /b/c/.a
+/b/c//.///.//.. /b
+/b/c//.///.//./ /b/c
+/b/c//.///.///a /b/c/a
+/b/c//.///.///. /b/c
+/b/c//.///.//// /b/c
+/b/c//.////aaaa /b/c/aaaa
+/b/c//.////aaa. /b/c/aaa.
+/b/c//.////aaa/ /b/c/aaa
+/b/c//.////aa.a /b/c/aa.a
+/b/c//.////aa.. /b/c/aa..
+/b/c//.////aa./ /b/c/aa.
+/b/c//.////aa/a /b/c/aa/a
+/b/c//.////aa/. /b/c/aa
+/b/c//.////aa// /b/c/aa
+/b/c//.////a.aa /b/c/a.aa
+/b/c//.////a.a. /b/c/a.a.
+/b/c//.////a.a/ /b/c/a.a
+/b/c//.////a..a /b/c/a..a
+/b/c//.////a... /b/c/a...
+/b/c//.////a../ /b/c/a..
+/b/c//.////a./a /b/c/a./a
+/b/c//.////a./. /b/c/a.
+/b/c//.////a.// /b/c/a.
+/b/c//.////a/aa /b/c/a/aa
+/b/c//.////a/a. /b/c/a/a.
+/b/c//.////a/a/ /b/c/a/a
+/b/c//.////a/.a /b/c/a/.a
+/b/c//.////a/.. /b/c
+/b/c//.////a/./ /b/c/a
+/b/c//.////a//a /b/c/a/a
+/b/c//.////a//. /b/c/a
+/b/c//.////a/// /b/c/a
+/b/c//.////.aaa /b/c/.aaa
+/b/c//.////.aa. /b/c/.aa.
+/b/c//.////.aa/ /b/c/.aa
+/b/c//.////.a.a /b/c/.a.a
+/b/c//.////.a.. /b/c/.a..
+/b/c//.////.a./ /b/c/.a.
+/b/c//.////.a/a /b/c/.a/a
+/b/c//.////.a/. /b/c/.a
+/b/c//.////.a// /b/c/.a
+/b/c//.////..aa /b/c/..aa
+/b/c//.////..a. /b/c/..a.
+/b/c//.////..a/ /b/c/..a
+/b/c//.////...a /b/c/...a
+/b/c//.////.... /b/c/....
+/b/c//.////.../ /b/c/...
+/b/c//.////../a /b/a
+/b/c//.////../. /b
+/b/c//.////..// /b
+/b/c//.////./aa /b/c/aa
+/b/c//.////./a. /b/c/a.
+/b/c//.////./a/ /b/c/a
+/b/c//.////./.a /b/c/.a
+/b/c//.////./.. /b
+/b/c//.////././ /b/c
+/b/c//.////.//a /b/c/a
+/b/c//.////.//. /b/c
+/b/c//.////./// /b/c
+/b/c//./////aaa /b/c/aaa
+/b/c//./////aa. /b/c/aa.
+/b/c//./////aa/ /b/c/aa
+/b/c//./////a.a /b/c/a.a
+/b/c//./////a.. /b/c/a..
+/b/c//./////a./ /b/c/a.
+/b/c//./////a/a /b/c/a/a
+/b/c//./////a/. /b/c/a
+/b/c//./////a// /b/c/a
+/b/c//./////.aa /b/c/.aa
+/b/c//./////.a. /b/c/.a.
+/b/c//./////.a/ /b/c/.a
+/b/c//./////..a /b/c/..a
+/b/c//./////... /b/c/...
+/b/c//./////../ /b
+/b/c//./////./a /b/c/a
+/b/c//./////./. /b/c
+/b/c//./////.// /b/c
+/b/c//.//////aa /b/c/aa
+/b/c//.//////a. /b/c/a.
+/b/c//.//////a/ /b/c/a
+/b/c//.//////.a /b/c/.a
+/b/c//.//////.. /b
+/b/c//.//////./ /b/c
+/b/c//.///////a /b/c/a
+/b/c//.///////. /b/c
+/b/c//.//////// /b/c
+/b/c///aaaaaaaa /b/c/aaaaaaaa
+/b/c///aaaaaaa. /b/c/aaaaaaa.
+/b/c///aaaaaaa/ /b/c/aaaaaaa
+/b/c///aaaaaa.a /b/c/aaaaaa.a
+/b/c///aaaaaa.. /b/c/aaaaaa..
+/b/c///aaaaaa./ /b/c/aaaaaa.
+/b/c///aaaaaa/a /b/c/aaaaaa/a
+/b/c///aaaaaa/. /b/c/aaaaaa
+/b/c///aaaaaa// /b/c/aaaaaa
+/b/c///aaaaa.aa /b/c/aaaaa.aa
+/b/c///aaaaa.a. /b/c/aaaaa.a.
+/b/c///aaaaa.a/ /b/c/aaaaa.a
+/b/c///aaaaa..a /b/c/aaaaa..a
+/b/c///aaaaa... /b/c/aaaaa...
+/b/c///aaaaa../ /b/c/aaaaa..
+/b/c///aaaaa./a /b/c/aaaaa./a
+/b/c///aaaaa./. /b/c/aaaaa.
+/b/c///aaaaa.// /b/c/aaaaa.
+/b/c///aaaaa/aa /b/c/aaaaa/aa
+/b/c///aaaaa/a. /b/c/aaaaa/a.
+/b/c///aaaaa/a/ /b/c/aaaaa/a
+/b/c///aaaaa/.a /b/c/aaaaa/.a
+/b/c///aaaaa/.. /b/c
+/b/c///aaaaa/./ /b/c/aaaaa
+/b/c///aaaaa//a /b/c/aaaaa/a
+/b/c///aaaaa//. /b/c/aaaaa
+/b/c///aaaaa/// /b/c/aaaaa
+/b/c///aaaa.aaa /b/c/aaaa.aaa
+/b/c///aaaa.aa. /b/c/aaaa.aa.
+/b/c///aaaa.aa/ /b/c/aaaa.aa
+/b/c///aaaa.a.a /b/c/aaaa.a.a
+/b/c///aaaa.a.. /b/c/aaaa.a..
+/b/c///aaaa.a./ /b/c/aaaa.a.
+/b/c///aaaa.a/a /b/c/aaaa.a/a
+/b/c///aaaa.a/. /b/c/aaaa.a
+/b/c///aaaa.a// /b/c/aaaa.a
+/b/c///aaaa..aa /b/c/aaaa..aa
+/b/c///aaaa..a. /b/c/aaaa..a.
+/b/c///aaaa..a/ /b/c/aaaa..a
+/b/c///aaaa...a /b/c/aaaa...a
+/b/c///aaaa.... /b/c/aaaa....
+/b/c///aaaa.../ /b/c/aaaa...
+/b/c///aaaa../a /b/c/aaaa../a
+/b/c///aaaa../. /b/c/aaaa..
+/b/c///aaaa..// /b/c/aaaa..
+/b/c///aaaa./aa /b/c/aaaa./aa
+/b/c///aaaa./a. /b/c/aaaa./a.
+/b/c///aaaa./a/ /b/c/aaaa./a
+/b/c///aaaa./.a /b/c/aaaa./.a
+/b/c///aaaa./.. /b/c
+/b/c///aaaa././ /b/c/aaaa.
+/b/c///aaaa.//a /b/c/aaaa./a
+/b/c///aaaa.//. /b/c/aaaa.
+/b/c///aaaa./// /b/c/aaaa.
+/b/c///aaaa/aaa /b/c/aaaa/aaa
+/b/c///aaaa/aa. /b/c/aaaa/aa.
+/b/c///aaaa/aa/ /b/c/aaaa/aa
+/b/c///aaaa/a.a /b/c/aaaa/a.a
+/b/c///aaaa/a.. /b/c/aaaa/a..
+/b/c///aaaa/a./ /b/c/aaaa/a.
+/b/c///aaaa/a/a /b/c/aaaa/a/a
+/b/c///aaaa/a/. /b/c/aaaa/a
+/b/c///aaaa/a// /b/c/aaaa/a
+/b/c///aaaa/.aa /b/c/aaaa/.aa
+/b/c///aaaa/.a. /b/c/aaaa/.a.
+/b/c///aaaa/.a/ /b/c/aaaa/.a
+/b/c///aaaa/..a /b/c/aaaa/..a
+/b/c///aaaa/... /b/c/aaaa/...
+/b/c///aaaa/../ /b/c
+/b/c///aaaa/./a /b/c/aaaa/a
+/b/c///aaaa/./. /b/c/aaaa
+/b/c///aaaa/.// /b/c/aaaa
+/b/c///aaaa//aa /b/c/aaaa/aa
+/b/c///aaaa//a. /b/c/aaaa/a.
+/b/c///aaaa//a/ /b/c/aaaa/a
+/b/c///aaaa//.a /b/c/aaaa/.a
+/b/c///aaaa//.. /b/c
+/b/c///aaaa//./ /b/c/aaaa
+/b/c///aaaa///a /b/c/aaaa/a
+/b/c///aaaa///. /b/c/aaaa
+/b/c///aaaa//// /b/c/aaaa
+/b/c///aaa.aaaa /b/c/aaa.aaaa
+/b/c///aaa.aaa. /b/c/aaa.aaa.
+/b/c///aaa.aaa/ /b/c/aaa.aaa
+/b/c///aaa.aa.a /b/c/aaa.aa.a
+/b/c///aaa.aa.. /b/c/aaa.aa..
+/b/c///aaa.aa./ /b/c/aaa.aa.
+/b/c///aaa.aa/a /b/c/aaa.aa/a
+/b/c///aaa.aa/. /b/c/aaa.aa
+/b/c///aaa.aa// /b/c/aaa.aa
+/b/c///aaa.a.aa /b/c/aaa.a.aa
+/b/c///aaa.a.a. /b/c/aaa.a.a.
+/b/c///aaa.a.a/ /b/c/aaa.a.a
+/b/c///aaa.a..a /b/c/aaa.a..a
+/b/c///aaa.a... /b/c/aaa.a...
+/b/c///aaa.a../ /b/c/aaa.a..
+/b/c///aaa.a./a /b/c/aaa.a./a
+/b/c///aaa.a./. /b/c/aaa.a.
+/b/c///aaa.a.// /b/c/aaa.a.
+/b/c///aaa.a/aa /b/c/aaa.a/aa
+/b/c///aaa.a/a. /b/c/aaa.a/a.
+/b/c///aaa.a/a/ /b/c/aaa.a/a
+/b/c///aaa.a/.a /b/c/aaa.a/.a
+/b/c///aaa.a/.. /b/c
+/b/c///aaa.a/./ /b/c/aaa.a
+/b/c///aaa.a//a /b/c/aaa.a/a
+/b/c///aaa.a//. /b/c/aaa.a
+/b/c///aaa.a/// /b/c/aaa.a
+/b/c///aaa..aaa /b/c/aaa..aaa
+/b/c///aaa..aa. /b/c/aaa..aa.
+/b/c///aaa..aa/ /b/c/aaa..aa
+/b/c///aaa..a.a /b/c/aaa..a.a
+/b/c///aaa..a.. /b/c/aaa..a..
+/b/c///aaa..a./ /b/c/aaa..a.
+/b/c///aaa..a/a /b/c/aaa..a/a
+/b/c///aaa..a/. /b/c/aaa..a
+/b/c///aaa..a// /b/c/aaa..a
+/b/c///aaa...aa /b/c/aaa...aa
+/b/c///aaa...a. /b/c/aaa...a.
+/b/c///aaa...a/ /b/c/aaa...a
+/b/c///aaa....a /b/c/aaa....a
+/b/c///aaa..... /b/c/aaa.....
+/b/c///aaa..../ /b/c/aaa....
+/b/c///aaa.../a /b/c/aaa.../a
+/b/c///aaa.../. /b/c/aaa...
+/b/c///aaa...// /b/c/aaa...
+/b/c///aaa../aa /b/c/aaa../aa
+/b/c///aaa../a. /b/c/aaa../a.
+/b/c///aaa../a/ /b/c/aaa../a
+/b/c///aaa../.a /b/c/aaa../.a
+/b/c///aaa../.. /b/c
+/b/c///aaa.././ /b/c/aaa..
+/b/c///aaa..//a /b/c/aaa../a
+/b/c///aaa..//. /b/c/aaa..
+/b/c///aaa../// /b/c/aaa..
+/b/c///aaa./aaa /b/c/aaa./aaa
+/b/c///aaa./aa. /b/c/aaa./aa.
+/b/c///aaa./aa/ /b/c/aaa./aa
+/b/c///aaa./a.a /b/c/aaa./a.a
+/b/c///aaa./a.. /b/c/aaa./a..
+/b/c///aaa./a./ /b/c/aaa./a.
+/b/c///aaa./a/a /b/c/aaa./a/a
+/b/c///aaa./a/. /b/c/aaa./a
+/b/c///aaa./a// /b/c/aaa./a
+/b/c///aaa./.aa /b/c/aaa./.aa
+/b/c///aaa./.a. /b/c/aaa./.a.
+/b/c///aaa./.a/ /b/c/aaa./.a
+/b/c///aaa./..a /b/c/aaa./..a
+/b/c///aaa./... /b/c/aaa./...
+/b/c///aaa./../ /b/c
+/b/c///aaa././a /b/c/aaa./a
+/b/c///aaa././. /b/c/aaa.
+/b/c///aaa./.// /b/c/aaa.
+/b/c///aaa.//aa /b/c/aaa./aa
+/b/c///aaa.//a. /b/c/aaa./a.
+/b/c///aaa.//a/ /b/c/aaa./a
+/b/c///aaa.//.a /b/c/aaa./.a
+/b/c///aaa.//.. /b/c
+/b/c///aaa.//./ /b/c/aaa.
+/b/c///aaa.///a /b/c/aaa./a
+/b/c///aaa.///. /b/c/aaa.
+/b/c///aaa.//// /b/c/aaa.
+/b/c///aaa/aaaa /b/c/aaa/aaaa
+/b/c///aaa/aaa. /b/c/aaa/aaa.
+/b/c///aaa/aaa/ /b/c/aaa/aaa
+/b/c///aaa/aa.a /b/c/aaa/aa.a
+/b/c///aaa/aa.. /b/c/aaa/aa..
+/b/c///aaa/aa./ /b/c/aaa/aa.
+/b/c///aaa/aa/a /b/c/aaa/aa/a
+/b/c///aaa/aa/. /b/c/aaa/aa
+/b/c///aaa/aa// /b/c/aaa/aa
+/b/c///aaa/a.aa /b/c/aaa/a.aa
+/b/c///aaa/a.a. /b/c/aaa/a.a.
+/b/c///aaa/a.a/ /b/c/aaa/a.a
+/b/c///aaa/a..a /b/c/aaa/a..a
+/b/c///aaa/a... /b/c/aaa/a...
+/b/c///aaa/a../ /b/c/aaa/a..
+/b/c///aaa/a./a /b/c/aaa/a./a
+/b/c///aaa/a./. /b/c/aaa/a.
+/b/c///aaa/a.// /b/c/aaa/a.
+/b/c///aaa/a/aa /b/c/aaa/a/aa
+/b/c///aaa/a/a. /b/c/aaa/a/a.
+/b/c///aaa/a/a/ /b/c/aaa/a/a
+/b/c///aaa/a/.a /b/c/aaa/a/.a
+/b/c///aaa/a/.. /b/c/aaa
+/b/c///aaa/a/./ /b/c/aaa/a
+/b/c///aaa/a//a /b/c/aaa/a/a
+/b/c///aaa/a//. /b/c/aaa/a
+/b/c///aaa/a/// /b/c/aaa/a
+/b/c///aaa/.aaa /b/c/aaa/.aaa
+/b/c///aaa/.aa. /b/c/aaa/.aa.
+/b/c///aaa/.aa/ /b/c/aaa/.aa
+/b/c///aaa/.a.a /b/c/aaa/.a.a
+/b/c///aaa/.a.. /b/c/aaa/.a..
+/b/c///aaa/.a./ /b/c/aaa/.a.
+/b/c///aaa/.a/a /b/c/aaa/.a/a
+/b/c///aaa/.a/. /b/c/aaa/.a
+/b/c///aaa/.a// /b/c/aaa/.a
+/b/c///aaa/..aa /b/c/aaa/..aa
+/b/c///aaa/..a. /b/c/aaa/..a.
+/b/c///aaa/..a/ /b/c/aaa/..a
+/b/c///aaa/...a /b/c/aaa/...a
+/b/c///aaa/.... /b/c/aaa/....
+/b/c///aaa/.../ /b/c/aaa/...
+/b/c///aaa/../a /b/c/a
+/b/c///aaa/../. /b/c
+/b/c///aaa/..// /b/c
+/b/c///aaa/./aa /b/c/aaa/aa
+/b/c///aaa/./a. /b/c/aaa/a.
+/b/c///aaa/./a/ /b/c/aaa/a
+/b/c///aaa/./.a /b/c/aaa/.a
+/b/c///aaa/./.. /b/c
+/b/c///aaa/././ /b/c/aaa
+/b/c///aaa/.//a /b/c/aaa/a
+/b/c///aaa/.//. /b/c/aaa
+/b/c///aaa/./// /b/c/aaa
+/b/c///aaa//aaa /b/c/aaa/aaa
+/b/c///aaa//aa. /b/c/aaa/aa.
+/b/c///aaa//aa/ /b/c/aaa/aa
+/b/c///aaa//a.a /b/c/aaa/a.a
+/b/c///aaa//a.. /b/c/aaa/a..
+/b/c///aaa//a./ /b/c/aaa/a.
+/b/c///aaa//a/a /b/c/aaa/a/a
+/b/c///aaa//a/. /b/c/aaa/a
+/b/c///aaa//a// /b/c/aaa/a
+/b/c///aaa//.aa /b/c/aaa/.aa
+/b/c///aaa//.a. /b/c/aaa/.a.
+/b/c///aaa//.a/ /b/c/aaa/.a
+/b/c///aaa//..a /b/c/aaa/..a
+/b/c///aaa//... /b/c/aaa/...
+/b/c///aaa//../ /b/c
+/b/c///aaa//./a /b/c/aaa/a
+/b/c///aaa//./. /b/c/aaa
+/b/c///aaa//.// /b/c/aaa
+/b/c///aaa///aa /b/c/aaa/aa
+/b/c///aaa///a. /b/c/aaa/a.
+/b/c///aaa///a/ /b/c/aaa/a
+/b/c///aaa///.a /b/c/aaa/.a
+/b/c///aaa///.. /b/c
+/b/c///aaa///./ /b/c/aaa
+/b/c///aaa////a /b/c/aaa/a
+/b/c///aaa////. /b/c/aaa
+/b/c///aaa///// /b/c/aaa
+/b/c///aa.aaaaa /b/c/aa.aaaaa
+/b/c///aa.aaaa. /b/c/aa.aaaa.
+/b/c///aa.aaaa/ /b/c/aa.aaaa
+/b/c///aa.aaa.a /b/c/aa.aaa.a
+/b/c///aa.aaa.. /b/c/aa.aaa..
+/b/c///aa.aaa./ /b/c/aa.aaa.
+/b/c///aa.aaa/a /b/c/aa.aaa/a
+/b/c///aa.aaa/. /b/c/aa.aaa
+/b/c///aa.aaa// /b/c/aa.aaa
+/b/c///aa.aa.aa /b/c/aa.aa.aa
+/b/c///aa.aa.a. /b/c/aa.aa.a.
+/b/c///aa.aa.a/ /b/c/aa.aa.a
+/b/c///aa.aa..a /b/c/aa.aa..a
+/b/c///aa.aa... /b/c/aa.aa...
+/b/c///aa.aa../ /b/c/aa.aa..
+/b/c///aa.aa./a /b/c/aa.aa./a
+/b/c///aa.aa./. /b/c/aa.aa.
+/b/c///aa.aa.// /b/c/aa.aa.
+/b/c///aa.aa/aa /b/c/aa.aa/aa
+/b/c///aa.aa/a. /b/c/aa.aa/a.
+/b/c///aa.aa/a/ /b/c/aa.aa/a
+/b/c///aa.aa/.a /b/c/aa.aa/.a
+/b/c///aa.aa/.. /b/c
+/b/c///aa.aa/./ /b/c/aa.aa
+/b/c///aa.aa//a /b/c/aa.aa/a
+/b/c///aa.aa//. /b/c/aa.aa
+/b/c///aa.aa/// /b/c/aa.aa
+/b/c///aa.a.aaa /b/c/aa.a.aaa
+/b/c///aa.a.aa. /b/c/aa.a.aa.
+/b/c///aa.a.aa/ /b/c/aa.a.aa
+/b/c///aa.a.a.a /b/c/aa.a.a.a
+/b/c///aa.a.a.. /b/c/aa.a.a..
+/b/c///aa.a.a./ /b/c/aa.a.a.
+/b/c///aa.a.a/a /b/c/aa.a.a/a
+/b/c///aa.a.a/. /b/c/aa.a.a
+/b/c///aa.a.a// /b/c/aa.a.a
+/b/c///aa.a..aa /b/c/aa.a..aa
+/b/c///aa.a..a. /b/c/aa.a..a.
+/b/c///aa.a..a/ /b/c/aa.a..a
+/b/c///aa.a...a /b/c/aa.a...a
+/b/c///aa.a.... /b/c/aa.a....
+/b/c///aa.a.../ /b/c/aa.a...
+/b/c///aa.a../a /b/c/aa.a../a
+/b/c///aa.a../. /b/c/aa.a..
+/b/c///aa.a..// /b/c/aa.a..
+/b/c///aa.a./aa /b/c/aa.a./aa
+/b/c///aa.a./a. /b/c/aa.a./a.
+/b/c///aa.a./a/ /b/c/aa.a./a
+/b/c///aa.a./.a /b/c/aa.a./.a
+/b/c///aa.a./.. /b/c
+/b/c///aa.a././ /b/c/aa.a.
+/b/c///aa.a.//a /b/c/aa.a./a
+/b/c///aa.a.//. /b/c/aa.a.
+/b/c///aa.a./// /b/c/aa.a.
+/b/c///aa.a/aaa /b/c/aa.a/aaa
+/b/c///aa.a/aa. /b/c/aa.a/aa.
+/b/c///aa.a/aa/ /b/c/aa.a/aa
+/b/c///aa.a/a.a /b/c/aa.a/a.a
+/b/c///aa.a/a.. /b/c/aa.a/a..
+/b/c///aa.a/a./ /b/c/aa.a/a.
+/b/c///aa.a/a/a /b/c/aa.a/a/a
+/b/c///aa.a/a/. /b/c/aa.a/a
+/b/c///aa.a/a// /b/c/aa.a/a
+/b/c///aa.a/.aa /b/c/aa.a/.aa
+/b/c///aa.a/.a. /b/c/aa.a/.a.
+/b/c///aa.a/.a/ /b/c/aa.a/.a
+/b/c///aa.a/..a /b/c/aa.a/..a
+/b/c///aa.a/... /b/c/aa.a/...
+/b/c///aa.a/../ /b/c
+/b/c///aa.a/./a /b/c/aa.a/a
+/b/c///aa.a/./. /b/c/aa.a
+/b/c///aa.a/.// /b/c/aa.a
+/b/c///aa.a//aa /b/c/aa.a/aa
+/b/c///aa.a//a. /b/c/aa.a/a.
+/b/c///aa.a//a/ /b/c/aa.a/a
+/b/c///aa.a//.a /b/c/aa.a/.a
+/b/c///aa.a//.. /b/c
+/b/c///aa.a//./ /b/c/aa.a
+/b/c///aa.a///a /b/c/aa.a/a
+/b/c///aa.a///. /b/c/aa.a
+/b/c///aa.a//// /b/c/aa.a
+/b/c///aa..aaaa /b/c/aa..aaaa
+/b/c///aa..aaa. /b/c/aa..aaa.
+/b/c///aa..aaa/ /b/c/aa..aaa
+/b/c///aa..aa.a /b/c/aa..aa.a
+/b/c///aa..aa.. /b/c/aa..aa..
+/b/c///aa..aa./ /b/c/aa..aa.
+/b/c///aa..aa/a /b/c/aa..aa/a
+/b/c///aa..aa/. /b/c/aa..aa
+/b/c///aa..aa// /b/c/aa..aa
+/b/c///aa..a.aa /b/c/aa..a.aa
+/b/c///aa..a.a. /b/c/aa..a.a.
+/b/c///aa..a.a/ /b/c/aa..a.a
+/b/c///aa..a..a /b/c/aa..a..a
+/b/c///aa..a... /b/c/aa..a...
+/b/c///aa..a../ /b/c/aa..a..
+/b/c///aa..a./a /b/c/aa..a./a
+/b/c///aa..a./. /b/c/aa..a.
+/b/c///aa..a.// /b/c/aa..a.
+/b/c///aa..a/aa /b/c/aa..a/aa
+/b/c///aa..a/a. /b/c/aa..a/a.
+/b/c///aa..a/a/ /b/c/aa..a/a
+/b/c///aa..a/.a /b/c/aa..a/.a
+/b/c///aa..a/.. /b/c
+/b/c///aa..a/./ /b/c/aa..a
+/b/c///aa..a//a /b/c/aa..a/a
+/b/c///aa..a//. /b/c/aa..a
+/b/c///aa..a/// /b/c/aa..a
+/b/c///aa...aaa /b/c/aa...aaa
+/b/c///aa...aa. /b/c/aa...aa.
+/b/c///aa...aa/ /b/c/aa...aa
+/b/c///aa...a.a /b/c/aa...a.a
+/b/c///aa...a.. /b/c/aa...a..
+/b/c///aa...a./ /b/c/aa...a.
+/b/c///aa...a/a /b/c/aa...a/a
+/b/c///aa...a/. /b/c/aa...a
+/b/c///aa...a// /b/c/aa...a
+/b/c///aa....aa /b/c/aa....aa
+/b/c///aa....a. /b/c/aa....a.
+/b/c///aa....a/ /b/c/aa....a
+/b/c///aa.....a /b/c/aa.....a
+/b/c///aa...... /b/c/aa......
+/b/c///aa...../ /b/c/aa.....
+/b/c///aa..../a /b/c/aa..../a
+/b/c///aa..../. /b/c/aa....
+/b/c///aa....// /b/c/aa....
+/b/c///aa.../aa /b/c/aa.../aa
+/b/c///aa.../a. /b/c/aa.../a.
+/b/c///aa.../a/ /b/c/aa.../a
+/b/c///aa.../.a /b/c/aa.../.a
+/b/c///aa.../.. /b/c
+/b/c///aa..././ /b/c/aa...
+/b/c///aa...//a /b/c/aa.../a
+/b/c///aa...//. /b/c/aa...
+/b/c///aa.../// /b/c/aa...
+/b/c///aa../aaa /b/c/aa../aaa
+/b/c///aa../aa. /b/c/aa../aa.
+/b/c///aa../aa/ /b/c/aa../aa
+/b/c///aa../a.a /b/c/aa../a.a
+/b/c///aa../a.. /b/c/aa../a..
+/b/c///aa../a./ /b/c/aa../a.
+/b/c///aa../a/a /b/c/aa../a/a
+/b/c///aa../a/. /b/c/aa../a
+/b/c///aa../a// /b/c/aa../a
+/b/c///aa../.aa /b/c/aa../.aa
+/b/c///aa../.a. /b/c/aa../.a.
+/b/c///aa../.a/ /b/c/aa../.a
+/b/c///aa../..a /b/c/aa../..a
+/b/c///aa../... /b/c/aa../...
+/b/c///aa../../ /b/c
+/b/c///aa.././a /b/c/aa../a
+/b/c///aa.././. /b/c/aa..
+/b/c///aa../.// /b/c/aa..
+/b/c///aa..//aa /b/c/aa../aa
+/b/c///aa..//a. /b/c/aa../a.
+/b/c///aa..//a/ /b/c/aa../a
+/b/c///aa..//.a /b/c/aa../.a
+/b/c///aa..//.. /b/c
+/b/c///aa..//./ /b/c/aa..
+/b/c///aa..///a /b/c/aa../a
+/b/c///aa..///. /b/c/aa..
+/b/c///aa..//// /b/c/aa..
+/b/c///aa./aaaa /b/c/aa./aaaa
+/b/c///aa./aaa. /b/c/aa./aaa.
+/b/c///aa./aaa/ /b/c/aa./aaa
+/b/c///aa./aa.a /b/c/aa./aa.a
+/b/c///aa./aa.. /b/c/aa./aa..
+/b/c///aa./aa./ /b/c/aa./aa.
+/b/c///aa./aa/a /b/c/aa./aa/a
+/b/c///aa./aa/. /b/c/aa./aa
+/b/c///aa./aa// /b/c/aa./aa
+/b/c///aa./a.aa /b/c/aa./a.aa
+/b/c///aa./a.a. /b/c/aa./a.a.
+/b/c///aa./a.a/ /b/c/aa./a.a
+/b/c///aa./a..a /b/c/aa./a..a
+/b/c///aa./a... /b/c/aa./a...
+/b/c///aa./a../ /b/c/aa./a..
+/b/c///aa./a./a /b/c/aa./a./a
+/b/c///aa./a./. /b/c/aa./a.
+/b/c///aa./a.// /b/c/aa./a.
+/b/c///aa./a/aa /b/c/aa./a/aa
+/b/c///aa./a/a. /b/c/aa./a/a.
+/b/c///aa./a/a/ /b/c/aa./a/a
+/b/c///aa./a/.a /b/c/aa./a/.a
+/b/c///aa./a/.. /b/c/aa.
+/b/c///aa./a/./ /b/c/aa./a
+/b/c///aa./a//a /b/c/aa./a/a
+/b/c///aa./a//. /b/c/aa./a
+/b/c///aa./a/// /b/c/aa./a
+/b/c///aa./.aaa /b/c/aa./.aaa
+/b/c///aa./.aa. /b/c/aa./.aa.
+/b/c///aa./.aa/ /b/c/aa./.aa
+/b/c///aa./.a.a /b/c/aa./.a.a
+/b/c///aa./.a.. /b/c/aa./.a..
+/b/c///aa./.a./ /b/c/aa./.a.
+/b/c///aa./.a/a /b/c/aa./.a/a
+/b/c///aa./.a/. /b/c/aa./.a
+/b/c///aa./.a// /b/c/aa./.a
+/b/c///aa./..aa /b/c/aa./..aa
+/b/c///aa./..a. /b/c/aa./..a.
+/b/c///aa./..a/ /b/c/aa./..a
+/b/c///aa./...a /b/c/aa./...a
+/b/c///aa./.... /b/c/aa./....
+/b/c///aa./.../ /b/c/aa./...
+/b/c///aa./../a /b/c/a
+/b/c///aa./../. /b/c
+/b/c///aa./..// /b/c
+/b/c///aa././aa /b/c/aa./aa
+/b/c///aa././a. /b/c/aa./a.
+/b/c///aa././a/ /b/c/aa./a
+/b/c///aa././.a /b/c/aa./.a
+/b/c///aa././.. /b/c
+/b/c///aa./././ /b/c/aa.
+/b/c///aa././/a /b/c/aa./a
+/b/c///aa././/. /b/c/aa.
+/b/c///aa././// /b/c/aa.
+/b/c///aa.//aaa /b/c/aa./aaa
+/b/c///aa.//aa. /b/c/aa./aa.
+/b/c///aa.//aa/ /b/c/aa./aa
+/b/c///aa.//a.a /b/c/aa./a.a
+/b/c///aa.//a.. /b/c/aa./a..
+/b/c///aa.//a./ /b/c/aa./a.
+/b/c///aa.//a/a /b/c/aa./a/a
+/b/c///aa.//a/. /b/c/aa./a
+/b/c///aa.//a// /b/c/aa./a
+/b/c///aa.//.aa /b/c/aa./.aa
+/b/c///aa.//.a. /b/c/aa./.a.
+/b/c///aa.//.a/ /b/c/aa./.a
+/b/c///aa.//..a /b/c/aa./..a
+/b/c///aa.//... /b/c/aa./...
+/b/c///aa.//../ /b/c
+/b/c///aa.//./a /b/c/aa./a
+/b/c///aa.//./. /b/c/aa.
+/b/c///aa.//.// /b/c/aa.
+/b/c///aa.///aa /b/c/aa./aa
+/b/c///aa.///a. /b/c/aa./a.
+/b/c///aa.///a/ /b/c/aa./a
+/b/c///aa.///.a /b/c/aa./.a
+/b/c///aa.///.. /b/c
+/b/c///aa.///./ /b/c/aa.
+/b/c///aa.////a /b/c/aa./a
+/b/c///aa.////. /b/c/aa.
+/b/c///aa.///// /b/c/aa.
+/b/c///aa/aaaaa /b/c/aa/aaaaa
+/b/c///aa/aaaa. /b/c/aa/aaaa.
+/b/c///aa/aaaa/ /b/c/aa/aaaa
+/b/c///aa/aaa.a /b/c/aa/aaa.a
+/b/c///aa/aaa.. /b/c/aa/aaa..
+/b/c///aa/aaa./ /b/c/aa/aaa.
+/b/c///aa/aaa/a /b/c/aa/aaa/a
+/b/c///aa/aaa/. /b/c/aa/aaa
+/b/c///aa/aaa// /b/c/aa/aaa
+/b/c///aa/aa.aa /b/c/aa/aa.aa
+/b/c///aa/aa.a. /b/c/aa/aa.a.
+/b/c///aa/aa.a/ /b/c/aa/aa.a
+/b/c///aa/aa..a /b/c/aa/aa..a
+/b/c///aa/aa... /b/c/aa/aa...
+/b/c///aa/aa../ /b/c/aa/aa..
+/b/c///aa/aa./a /b/c/aa/aa./a
+/b/c///aa/aa./. /b/c/aa/aa.
+/b/c///aa/aa.// /b/c/aa/aa.
+/b/c///aa/aa/aa /b/c/aa/aa/aa
+/b/c///aa/aa/a. /b/c/aa/aa/a.
+/b/c///aa/aa/a/ /b/c/aa/aa/a
+/b/c///aa/aa/.a /b/c/aa/aa/.a
+/b/c///aa/aa/.. /b/c/aa
+/b/c///aa/aa/./ /b/c/aa/aa
+/b/c///aa/aa//a /b/c/aa/aa/a
+/b/c///aa/aa//. /b/c/aa/aa
+/b/c///aa/aa/// /b/c/aa/aa
+/b/c///aa/a.aaa /b/c/aa/a.aaa
+/b/c///aa/a.aa. /b/c/aa/a.aa.
+/b/c///aa/a.aa/ /b/c/aa/a.aa
+/b/c///aa/a.a.a /b/c/aa/a.a.a
+/b/c///aa/a.a.. /b/c/aa/a.a..
+/b/c///aa/a.a./ /b/c/aa/a.a.
+/b/c///aa/a.a/a /b/c/aa/a.a/a
+/b/c///aa/a.a/. /b/c/aa/a.a
+/b/c///aa/a.a// /b/c/aa/a.a
+/b/c///aa/a..aa /b/c/aa/a..aa
+/b/c///aa/a..a. /b/c/aa/a..a.
+/b/c///aa/a..a/ /b/c/aa/a..a
+/b/c///aa/a...a /b/c/aa/a...a
+/b/c///aa/a.... /b/c/aa/a....
+/b/c///aa/a.../ /b/c/aa/a...
+/b/c///aa/a../a /b/c/aa/a../a
+/b/c///aa/a../. /b/c/aa/a..
+/b/c///aa/a..// /b/c/aa/a..
+/b/c///aa/a./aa /b/c/aa/a./aa
+/b/c///aa/a./a. /b/c/aa/a./a.
+/b/c///aa/a./a/ /b/c/aa/a./a
+/b/c///aa/a./.a /b/c/aa/a./.a
+/b/c///aa/a./.. /b/c/aa
+/b/c///aa/a././ /b/c/aa/a.
+/b/c///aa/a.//a /b/c/aa/a./a
+/b/c///aa/a.//. /b/c/aa/a.
+/b/c///aa/a./// /b/c/aa/a.
+/b/c///aa/a/aaa /b/c/aa/a/aaa
+/b/c///aa/a/aa. /b/c/aa/a/aa.
+/b/c///aa/a/aa/ /b/c/aa/a/aa
+/b/c///aa/a/a.a /b/c/aa/a/a.a
+/b/c///aa/a/a.. /b/c/aa/a/a..
+/b/c///aa/a/a./ /b/c/aa/a/a.
+/b/c///aa/a/a/a /b/c/aa/a/a/a
+/b/c///aa/a/a/. /b/c/aa/a/a
+/b/c///aa/a/a// /b/c/aa/a/a
+/b/c///aa/a/.aa /b/c/aa/a/.aa
+/b/c///aa/a/.a. /b/c/aa/a/.a.
+/b/c///aa/a/.a/ /b/c/aa/a/.a
+/b/c///aa/a/..a /b/c/aa/a/..a
+/b/c///aa/a/... /b/c/aa/a/...
+/b/c///aa/a/../ /b/c/aa
+/b/c///aa/a/./a /b/c/aa/a/a
+/b/c///aa/a/./. /b/c/aa/a
+/b/c///aa/a/.// /b/c/aa/a
+/b/c///aa/a//aa /b/c/aa/a/aa
+/b/c///aa/a//a. /b/c/aa/a/a.
+/b/c///aa/a//a/ /b/c/aa/a/a
+/b/c///aa/a//.a /b/c/aa/a/.a
+/b/c///aa/a//.. /b/c/aa
+/b/c///aa/a//./ /b/c/aa/a
+/b/c///aa/a///a /b/c/aa/a/a
+/b/c///aa/a///. /b/c/aa/a
+/b/c///aa/a//// /b/c/aa/a
+/b/c///aa/.aaaa /b/c/aa/.aaaa
+/b/c///aa/.aaa. /b/c/aa/.aaa.
+/b/c///aa/.aaa/ /b/c/aa/.aaa
+/b/c///aa/.aa.a /b/c/aa/.aa.a
+/b/c///aa/.aa.. /b/c/aa/.aa..
+/b/c///aa/.aa./ /b/c/aa/.aa.
+/b/c///aa/.aa/a /b/c/aa/.aa/a
+/b/c///aa/.aa/. /b/c/aa/.aa
+/b/c///aa/.aa// /b/c/aa/.aa
+/b/c///aa/.a.aa /b/c/aa/.a.aa
+/b/c///aa/.a.a. /b/c/aa/.a.a.
+/b/c///aa/.a.a/ /b/c/aa/.a.a
+/b/c///aa/.a..a /b/c/aa/.a..a
+/b/c///aa/.a... /b/c/aa/.a...
+/b/c///aa/.a../ /b/c/aa/.a..
+/b/c///aa/.a./a /b/c/aa/.a./a
+/b/c///aa/.a./. /b/c/aa/.a.
+/b/c///aa/.a.// /b/c/aa/.a.
+/b/c///aa/.a/aa /b/c/aa/.a/aa
+/b/c///aa/.a/a. /b/c/aa/.a/a.
+/b/c///aa/.a/a/ /b/c/aa/.a/a
+/b/c///aa/.a/.a /b/c/aa/.a/.a
+/b/c///aa/.a/.. /b/c/aa
+/b/c///aa/.a/./ /b/c/aa/.a
+/b/c///aa/.a//a /b/c/aa/.a/a
+/b/c///aa/.a//. /b/c/aa/.a
+/b/c///aa/.a/// /b/c/aa/.a
+/b/c///aa/..aaa /b/c/aa/..aaa
+/b/c///aa/..aa. /b/c/aa/..aa.
+/b/c///aa/..aa/ /b/c/aa/..aa
+/b/c///aa/..a.a /b/c/aa/..a.a
+/b/c///aa/..a.. /b/c/aa/..a..
+/b/c///aa/..a./ /b/c/aa/..a.
+/b/c///aa/..a/a /b/c/aa/..a/a
+/b/c///aa/..a/. /b/c/aa/..a
+/b/c///aa/..a// /b/c/aa/..a
+/b/c///aa/...aa /b/c/aa/...aa
+/b/c///aa/...a. /b/c/aa/...a.
+/b/c///aa/...a/ /b/c/aa/...a
+/b/c///aa/....a /b/c/aa/....a
+/b/c///aa/..... /b/c/aa/.....
+/b/c///aa/..../ /b/c/aa/....
+/b/c///aa/.../a /b/c/aa/.../a
+/b/c///aa/.../. /b/c/aa/...
+/b/c///aa/...// /b/c/aa/...
+/b/c///aa/../aa /b/c/aa
+/b/c///aa/../a. /b/c/a.
+/b/c///aa/../a/ /b/c/a
+/b/c///aa/../.a /b/c/.a
+/b/c///aa/../.. /b
+/b/c///aa/.././ /b/c
+/b/c///aa/..//a /b/c/a
+/b/c///aa/..//. /b/c
+/b/c///aa/../// /b/c
+/b/c///aa/./aaa /b/c/aa/aaa
+/b/c///aa/./aa. /b/c/aa/aa.
+/b/c///aa/./aa/ /b/c/aa/aa
+/b/c///aa/./a.a /b/c/aa/a.a
+/b/c///aa/./a.. /b/c/aa/a..
+/b/c///aa/./a./ /b/c/aa/a.
+/b/c///aa/./a/a /b/c/aa/a/a
+/b/c///aa/./a/. /b/c/aa/a
+/b/c///aa/./a// /b/c/aa/a
+/b/c///aa/./.aa /b/c/aa/.aa
+/b/c///aa/./.a. /b/c/aa/.a.
+/b/c///aa/./.a/ /b/c/aa/.a
+/b/c///aa/./..a /b/c/aa/..a
+/b/c///aa/./... /b/c/aa/...
+/b/c///aa/./../ /b/c
+/b/c///aa/././a /b/c/aa/a
+/b/c///aa/././. /b/c/aa
+/b/c///aa/./.// /b/c/aa
+/b/c///aa/.//aa /b/c/aa/aa
+/b/c///aa/.//a. /b/c/aa/a.
+/b/c///aa/.//a/ /b/c/aa/a
+/b/c///aa/.//.a /b/c/aa/.a
+/b/c///aa/.//.. /b/c
+/b/c///aa/.//./ /b/c/aa
+/b/c///aa/.///a /b/c/aa/a
+/b/c///aa/.///. /b/c/aa
+/b/c///aa/.//// /b/c/aa
+/b/c///aa//aaaa /b/c/aa/aaaa
+/b/c///aa//aaa. /b/c/aa/aaa.
+/b/c///aa//aaa/ /b/c/aa/aaa
+/b/c///aa//aa.a /b/c/aa/aa.a
+/b/c///aa//aa.. /b/c/aa/aa..
+/b/c///aa//aa./ /b/c/aa/aa.
+/b/c///aa//aa/a /b/c/aa/aa/a
+/b/c///aa//aa/. /b/c/aa/aa
+/b/c///aa//aa// /b/c/aa/aa
+/b/c///aa//a.aa /b/c/aa/a.aa
+/b/c///aa//a.a. /b/c/aa/a.a.
+/b/c///aa//a.a/ /b/c/aa/a.a
+/b/c///aa//a..a /b/c/aa/a..a
+/b/c///aa//a... /b/c/aa/a...
+/b/c///aa//a../ /b/c/aa/a..
+/b/c///aa//a./a /b/c/aa/a./a
+/b/c///aa//a./. /b/c/aa/a.
+/b/c///aa//a.// /b/c/aa/a.
+/b/c///aa//a/aa /b/c/aa/a/aa
+/b/c///aa//a/a. /b/c/aa/a/a.
+/b/c///aa//a/a/ /b/c/aa/a/a
+/b/c///aa//a/.a /b/c/aa/a/.a
+/b/c///aa//a/.. /b/c/aa
+/b/c///aa//a/./ /b/c/aa/a
+/b/c///aa//a//a /b/c/aa/a/a
+/b/c///aa//a//. /b/c/aa/a
+/b/c///aa//a/// /b/c/aa/a
+/b/c///aa//.aaa /b/c/aa/.aaa
+/b/c///aa//.aa. /b/c/aa/.aa.
+/b/c///aa//.aa/ /b/c/aa/.aa
+/b/c///aa//.a.a /b/c/aa/.a.a
+/b/c///aa//.a.. /b/c/aa/.a..
+/b/c///aa//.a./ /b/c/aa/.a.
+/b/c///aa//.a/a /b/c/aa/.a/a
+/b/c///aa//.a/. /b/c/aa/.a
+/b/c///aa//.a// /b/c/aa/.a
+/b/c///aa//..aa /b/c/aa/..aa
+/b/c///aa//..a. /b/c/aa/..a.
+/b/c///aa//..a/ /b/c/aa/..a
+/b/c///aa//...a /b/c/aa/...a
+/b/c///aa//.... /b/c/aa/....
+/b/c///aa//.../ /b/c/aa/...
+/b/c///aa//../a /b/c/a
+/b/c///aa//../. /b/c
+/b/c///aa//..// /b/c
+/b/c///aa//./aa /b/c/aa/aa
+/b/c///aa//./a. /b/c/aa/a.
+/b/c///aa//./a/ /b/c/aa/a
+/b/c///aa//./.a /b/c/aa/.a
+/b/c///aa//./.. /b/c
+/b/c///aa//././ /b/c/aa
+/b/c///aa//.//a /b/c/aa/a
+/b/c///aa//.//. /b/c/aa
+/b/c///aa//./// /b/c/aa
+/b/c///aa///aaa /b/c/aa/aaa
+/b/c///aa///aa. /b/c/aa/aa.
+/b/c///aa///aa/ /b/c/aa/aa
+/b/c///aa///a.a /b/c/aa/a.a
+/b/c///aa///a.. /b/c/aa/a..
+/b/c///aa///a./ /b/c/aa/a.
+/b/c///aa///a/a /b/c/aa/a/a
+/b/c///aa///a/. /b/c/aa/a
+/b/c///aa///a// /b/c/aa/a
+/b/c///aa///.aa /b/c/aa/.aa
+/b/c///aa///.a. /b/c/aa/.a.
+/b/c///aa///.a/ /b/c/aa/.a
+/b/c///aa///..a /b/c/aa/..a
+/b/c///aa///... /b/c/aa/...
+/b/c///aa///../ /b/c
+/b/c///aa///./a /b/c/aa/a
+/b/c///aa///./. /b/c/aa
+/b/c///aa///.// /b/c/aa
+/b/c///aa////aa /b/c/aa/aa
+/b/c///aa////a. /b/c/aa/a.
+/b/c///aa////a/ /b/c/aa/a
+/b/c///aa////.a /b/c/aa/.a
+/b/c///aa////.. /b/c
+/b/c///aa////./ /b/c/aa
+/b/c///aa/////a /b/c/aa/a
+/b/c///aa/////. /b/c/aa
+/b/c///aa////// /b/c/aa
+/b/c///a.aaaaaa /b/c/a.aaaaaa
+/b/c///a.aaaaa. /b/c/a.aaaaa.
+/b/c///a.aaaaa/ /b/c/a.aaaaa
+/b/c///a.aaaa.a /b/c/a.aaaa.a
+/b/c///a.aaaa.. /b/c/a.aaaa..
+/b/c///a.aaaa./ /b/c/a.aaaa.
+/b/c///a.aaaa/a /b/c/a.aaaa/a
+/b/c///a.aaaa/. /b/c/a.aaaa
+/b/c///a.aaaa// /b/c/a.aaaa
+/b/c///a.aaa.aa /b/c/a.aaa.aa
+/b/c///a.aaa.a. /b/c/a.aaa.a.
+/b/c///a.aaa.a/ /b/c/a.aaa.a
+/b/c///a.aaa..a /b/c/a.aaa..a
+/b/c///a.aaa... /b/c/a.aaa...
+/b/c///a.aaa../ /b/c/a.aaa..
+/b/c///a.aaa./a /b/c/a.aaa./a
+/b/c///a.aaa./. /b/c/a.aaa.
+/b/c///a.aaa.// /b/c/a.aaa.
+/b/c///a.aaa/aa /b/c/a.aaa/aa
+/b/c///a.aaa/a. /b/c/a.aaa/a.
+/b/c///a.aaa/a/ /b/c/a.aaa/a
+/b/c///a.aaa/.a /b/c/a.aaa/.a
+/b/c///a.aaa/.. /b/c
+/b/c///a.aaa/./ /b/c/a.aaa
+/b/c///a.aaa//a /b/c/a.aaa/a
+/b/c///a.aaa//. /b/c/a.aaa
+/b/c///a.aaa/// /b/c/a.aaa
+/b/c///a.aa.aaa /b/c/a.aa.aaa
+/b/c///a.aa.aa. /b/c/a.aa.aa.
+/b/c///a.aa.aa/ /b/c/a.aa.aa
+/b/c///a.aa.a.a /b/c/a.aa.a.a
+/b/c///a.aa.a.. /b/c/a.aa.a..
+/b/c///a.aa.a./ /b/c/a.aa.a.
+/b/c///a.aa.a/a /b/c/a.aa.a/a
+/b/c///a.aa.a/. /b/c/a.aa.a
+/b/c///a.aa.a// /b/c/a.aa.a
+/b/c///a.aa..aa /b/c/a.aa..aa
+/b/c///a.aa..a. /b/c/a.aa..a.
+/b/c///a.aa..a/ /b/c/a.aa..a
+/b/c///a.aa...a /b/c/a.aa...a
+/b/c///a.aa.... /b/c/a.aa....
+/b/c///a.aa.../ /b/c/a.aa...
+/b/c///a.aa../a /b/c/a.aa../a
+/b/c///a.aa../. /b/c/a.aa..
+/b/c///a.aa..// /b/c/a.aa..
+/b/c///a.aa./aa /b/c/a.aa./aa
+/b/c///a.aa./a. /b/c/a.aa./a.
+/b/c///a.aa./a/ /b/c/a.aa./a
+/b/c///a.aa./.a /b/c/a.aa./.a
+/b/c///a.aa./.. /b/c
+/b/c///a.aa././ /b/c/a.aa.
+/b/c///a.aa.//a /b/c/a.aa./a
+/b/c///a.aa.//. /b/c/a.aa.
+/b/c///a.aa./// /b/c/a.aa.
+/b/c///a.aa/aaa /b/c/a.aa/aaa
+/b/c///a.aa/aa. /b/c/a.aa/aa.
+/b/c///a.aa/aa/ /b/c/a.aa/aa
+/b/c///a.aa/a.a /b/c/a.aa/a.a
+/b/c///a.aa/a.. /b/c/a.aa/a..
+/b/c///a.aa/a./ /b/c/a.aa/a.
+/b/c///a.aa/a/a /b/c/a.aa/a/a
+/b/c///a.aa/a/. /b/c/a.aa/a
+/b/c///a.aa/a// /b/c/a.aa/a
+/b/c///a.aa/.aa /b/c/a.aa/.aa
+/b/c///a.aa/.a. /b/c/a.aa/.a.
+/b/c///a.aa/.a/ /b/c/a.aa/.a
+/b/c///a.aa/..a /b/c/a.aa/..a
+/b/c///a.aa/... /b/c/a.aa/...
+/b/c///a.aa/../ /b/c
+/b/c///a.aa/./a /b/c/a.aa/a
+/b/c///a.aa/./. /b/c/a.aa
+/b/c///a.aa/.// /b/c/a.aa
+/b/c///a.aa//aa /b/c/a.aa/aa
+/b/c///a.aa//a. /b/c/a.aa/a.
+/b/c///a.aa//a/ /b/c/a.aa/a
+/b/c///a.aa//.a /b/c/a.aa/.a
+/b/c///a.aa//.. /b/c
+/b/c///a.aa//./ /b/c/a.aa
+/b/c///a.aa///a /b/c/a.aa/a
+/b/c///a.aa///. /b/c/a.aa
+/b/c///a.aa//// /b/c/a.aa
+/b/c///a.a.aaaa /b/c/a.a.aaaa
+/b/c///a.a.aaa. /b/c/a.a.aaa.
+/b/c///a.a.aaa/ /b/c/a.a.aaa
+/b/c///a.a.aa.a /b/c/a.a.aa.a
+/b/c///a.a.aa.. /b/c/a.a.aa..
+/b/c///a.a.aa./ /b/c/a.a.aa.
+/b/c///a.a.aa/a /b/c/a.a.aa/a
+/b/c///a.a.aa/. /b/c/a.a.aa
+/b/c///a.a.aa// /b/c/a.a.aa
+/b/c///a.a.a.aa /b/c/a.a.a.aa
+/b/c///a.a.a.a. /b/c/a.a.a.a.
+/b/c///a.a.a.a/ /b/c/a.a.a.a
+/b/c///a.a.a..a /b/c/a.a.a..a
+/b/c///a.a.a... /b/c/a.a.a...
+/b/c///a.a.a../ /b/c/a.a.a..
+/b/c///a.a.a./a /b/c/a.a.a./a
+/b/c///a.a.a./. /b/c/a.a.a.
+/b/c///a.a.a.// /b/c/a.a.a.
+/b/c///a.a.a/aa /b/c/a.a.a/aa
+/b/c///a.a.a/a. /b/c/a.a.a/a.
+/b/c///a.a.a/a/ /b/c/a.a.a/a
+/b/c///a.a.a/.a /b/c/a.a.a/.a
+/b/c///a.a.a/.. /b/c
+/b/c///a.a.a/./ /b/c/a.a.a
+/b/c///a.a.a//a /b/c/a.a.a/a
+/b/c///a.a.a//. /b/c/a.a.a
+/b/c///a.a.a/// /b/c/a.a.a
+/b/c///a.a..aaa /b/c/a.a..aaa
+/b/c///a.a..aa. /b/c/a.a..aa.
+/b/c///a.a..aa/ /b/c/a.a..aa
+/b/c///a.a..a.a /b/c/a.a..a.a
+/b/c///a.a..a.. /b/c/a.a..a..
+/b/c///a.a..a./ /b/c/a.a..a.
+/b/c///a.a..a/a /b/c/a.a..a/a
+/b/c///a.a..a/. /b/c/a.a..a
+/b/c///a.a..a// /b/c/a.a..a
+/b/c///a.a...aa /b/c/a.a...aa
+/b/c///a.a...a. /b/c/a.a...a.
+/b/c///a.a...a/ /b/c/a.a...a
+/b/c///a.a....a /b/c/a.a....a
+/b/c///a.a..... /b/c/a.a.....
+/b/c///a.a..../ /b/c/a.a....
+/b/c///a.a.../a /b/c/a.a.../a
+/b/c///a.a.../. /b/c/a.a...
+/b/c///a.a...// /b/c/a.a...
+/b/c///a.a../aa /b/c/a.a../aa
+/b/c///a.a../a. /b/c/a.a../a.
+/b/c///a.a../a/ /b/c/a.a../a
+/b/c///a.a../.a /b/c/a.a../.a
+/b/c///a.a../.. /b/c
+/b/c///a.a.././ /b/c/a.a..
+/b/c///a.a..//a /b/c/a.a../a
+/b/c///a.a..//. /b/c/a.a..
+/b/c///a.a../// /b/c/a.a..
+/b/c///a.a./aaa /b/c/a.a./aaa
+/b/c///a.a./aa. /b/c/a.a./aa.
+/b/c///a.a./aa/ /b/c/a.a./aa
+/b/c///a.a./a.a /b/c/a.a./a.a
+/b/c///a.a./a.. /b/c/a.a./a..
+/b/c///a.a./a./ /b/c/a.a./a.
+/b/c///a.a./a/a /b/c/a.a./a/a
+/b/c///a.a./a/. /b/c/a.a./a
+/b/c///a.a./a// /b/c/a.a./a
+/b/c///a.a./.aa /b/c/a.a./.aa
+/b/c///a.a./.a. /b/c/a.a./.a.
+/b/c///a.a./.a/ /b/c/a.a./.a
+/b/c///a.a./..a /b/c/a.a./..a
+/b/c///a.a./... /b/c/a.a./...
+/b/c///a.a./../ /b/c
+/b/c///a.a././a /b/c/a.a./a
+/b/c///a.a././. /b/c/a.a.
+/b/c///a.a./.// /b/c/a.a.
+/b/c///a.a.//aa /b/c/a.a./aa
+/b/c///a.a.//a. /b/c/a.a./a.
+/b/c///a.a.//a/ /b/c/a.a./a
+/b/c///a.a.//.a /b/c/a.a./.a
+/b/c///a.a.//.. /b/c
+/b/c///a.a.//./ /b/c/a.a.
+/b/c///a.a.///a /b/c/a.a./a
+/b/c///a.a.///. /b/c/a.a.
+/b/c///a.a.//// /b/c/a.a.
+/b/c///a.a/aaaa /b/c/a.a/aaaa
+/b/c///a.a/aaa. /b/c/a.a/aaa.
+/b/c///a.a/aaa/ /b/c/a.a/aaa
+/b/c///a.a/aa.a /b/c/a.a/aa.a
+/b/c///a.a/aa.. /b/c/a.a/aa..
+/b/c///a.a/aa./ /b/c/a.a/aa.
+/b/c///a.a/aa/a /b/c/a.a/aa/a
+/b/c///a.a/aa/. /b/c/a.a/aa
+/b/c///a.a/aa// /b/c/a.a/aa
+/b/c///a.a/a.aa /b/c/a.a/a.aa
+/b/c///a.a/a.a. /b/c/a.a/a.a.
+/b/c///a.a/a.a/ /b/c/a.a/a.a
+/b/c///a.a/a..a /b/c/a.a/a..a
+/b/c///a.a/a... /b/c/a.a/a...
+/b/c///a.a/a../ /b/c/a.a/a..
+/b/c///a.a/a./a /b/c/a.a/a./a
+/b/c///a.a/a./. /b/c/a.a/a.
+/b/c///a.a/a.// /b/c/a.a/a.
+/b/c///a.a/a/aa /b/c/a.a/a/aa
+/b/c///a.a/a/a. /b/c/a.a/a/a.
+/b/c///a.a/a/a/ /b/c/a.a/a/a
+/b/c///a.a/a/.a /b/c/a.a/a/.a
+/b/c///a.a/a/.. /b/c/a.a
+/b/c///a.a/a/./ /b/c/a.a/a
+/b/c///a.a/a//a /b/c/a.a/a/a
+/b/c///a.a/a//. /b/c/a.a/a
+/b/c///a.a/a/// /b/c/a.a/a
+/b/c///a.a/.aaa /b/c/a.a/.aaa
+/b/c///a.a/.aa. /b/c/a.a/.aa.
+/b/c///a.a/.aa/ /b/c/a.a/.aa
+/b/c///a.a/.a.a /b/c/a.a/.a.a
+/b/c///a.a/.a.. /b/c/a.a/.a..
+/b/c///a.a/.a./ /b/c/a.a/.a.
+/b/c///a.a/.a/a /b/c/a.a/.a/a
+/b/c///a.a/.a/. /b/c/a.a/.a
+/b/c///a.a/.a// /b/c/a.a/.a
+/b/c///a.a/..aa /b/c/a.a/..aa
+/b/c///a.a/..a. /b/c/a.a/..a.
+/b/c///a.a/..a/ /b/c/a.a/..a
+/b/c///a.a/...a /b/c/a.a/...a
+/b/c///a.a/.... /b/c/a.a/....
+/b/c///a.a/.../ /b/c/a.a/...
+/b/c///a.a/../a /b/c/a
+/b/c///a.a/../. /b/c
+/b/c///a.a/..// /b/c
+/b/c///a.a/./aa /b/c/a.a/aa
+/b/c///a.a/./a. /b/c/a.a/a.
+/b/c///a.a/./a/ /b/c/a.a/a
+/b/c///a.a/./.a /b/c/a.a/.a
+/b/c///a.a/./.. /b/c
+/b/c///a.a/././ /b/c/a.a
+/b/c///a.a/.//a /b/c/a.a/a
+/b/c///a.a/.//. /b/c/a.a
+/b/c///a.a/./// /b/c/a.a
+/b/c///a.a//aaa /b/c/a.a/aaa
+/b/c///a.a//aa. /b/c/a.a/aa.
+/b/c///a.a//aa/ /b/c/a.a/aa
+/b/c///a.a//a.a /b/c/a.a/a.a
+/b/c///a.a//a.. /b/c/a.a/a..
+/b/c///a.a//a./ /b/c/a.a/a.
+/b/c///a.a//a/a /b/c/a.a/a/a
+/b/c///a.a//a/. /b/c/a.a/a
+/b/c///a.a//a// /b/c/a.a/a
+/b/c///a.a//.aa /b/c/a.a/.aa
+/b/c///a.a//.a. /b/c/a.a/.a.
+/b/c///a.a//.a/ /b/c/a.a/.a
+/b/c///a.a//..a /b/c/a.a/..a
+/b/c///a.a//... /b/c/a.a/...
+/b/c///a.a//../ /b/c
+/b/c///a.a//./a /b/c/a.a/a
+/b/c///a.a//./. /b/c/a.a
+/b/c///a.a//.// /b/c/a.a
+/b/c///a.a///aa /b/c/a.a/aa
+/b/c///a.a///a. /b/c/a.a/a.
+/b/c///a.a///a/ /b/c/a.a/a
+/b/c///a.a///.a /b/c/a.a/.a
+/b/c///a.a///.. /b/c
+/b/c///a.a///./ /b/c/a.a
+/b/c///a.a////a /b/c/a.a/a
+/b/c///a.a////. /b/c/a.a
+/b/c///a.a///// /b/c/a.a
+/b/c///a..aaaaa /b/c/a..aaaaa
+/b/c///a..aaaa. /b/c/a..aaaa.
+/b/c///a..aaaa/ /b/c/a..aaaa
+/b/c///a..aaa.a /b/c/a..aaa.a
+/b/c///a..aaa.. /b/c/a..aaa..
+/b/c///a..aaa./ /b/c/a..aaa.
+/b/c///a..aaa/a /b/c/a..aaa/a
+/b/c///a..aaa/. /b/c/a..aaa
+/b/c///a..aaa// /b/c/a..aaa
+/b/c///a..aa.aa /b/c/a..aa.aa
+/b/c///a..aa.a. /b/c/a..aa.a.
+/b/c///a..aa.a/ /b/c/a..aa.a
+/b/c///a..aa..a /b/c/a..aa..a
+/b/c///a..aa... /b/c/a..aa...
+/b/c///a..aa../ /b/c/a..aa..
+/b/c///a..aa./a /b/c/a..aa./a
+/b/c///a..aa./. /b/c/a..aa.
+/b/c///a..aa.// /b/c/a..aa.
+/b/c///a..aa/aa /b/c/a..aa/aa
+/b/c///a..aa/a. /b/c/a..aa/a.
+/b/c///a..aa/a/ /b/c/a..aa/a
+/b/c///a..aa/.a /b/c/a..aa/.a
+/b/c///a..aa/.. /b/c
+/b/c///a..aa/./ /b/c/a..aa
+/b/c///a..aa//a /b/c/a..aa/a
+/b/c///a..aa//. /b/c/a..aa
+/b/c///a..aa/// /b/c/a..aa
+/b/c///a..a.aaa /b/c/a..a.aaa
+/b/c///a..a.aa. /b/c/a..a.aa.
+/b/c///a..a.aa/ /b/c/a..a.aa
+/b/c///a..a.a.a /b/c/a..a.a.a
+/b/c///a..a.a.. /b/c/a..a.a..
+/b/c///a..a.a./ /b/c/a..a.a.
+/b/c///a..a.a/a /b/c/a..a.a/a
+/b/c///a..a.a/. /b/c/a..a.a
+/b/c///a..a.a// /b/c/a..a.a
+/b/c///a..a..aa /b/c/a..a..aa
+/b/c///a..a..a. /b/c/a..a..a.
+/b/c///a..a..a/ /b/c/a..a..a
+/b/c///a..a...a /b/c/a..a...a
+/b/c///a..a.... /b/c/a..a....
+/b/c///a..a.../ /b/c/a..a...
+/b/c///a..a../a /b/c/a..a../a
+/b/c///a..a../. /b/c/a..a..
+/b/c///a..a..// /b/c/a..a..
+/b/c///a..a./aa /b/c/a..a./aa
+/b/c///a..a./a. /b/c/a..a./a.
+/b/c///a..a./a/ /b/c/a..a./a
+/b/c///a..a./.a /b/c/a..a./.a
+/b/c///a..a./.. /b/c
+/b/c///a..a././ /b/c/a..a.
+/b/c///a..a.//a /b/c/a..a./a
+/b/c///a..a.//. /b/c/a..a.
+/b/c///a..a./// /b/c/a..a.
+/b/c///a..a/aaa /b/c/a..a/aaa
+/b/c///a..a/aa. /b/c/a..a/aa.
+/b/c///a..a/aa/ /b/c/a..a/aa
+/b/c///a..a/a.a /b/c/a..a/a.a
+/b/c///a..a/a.. /b/c/a..a/a..
+/b/c///a..a/a./ /b/c/a..a/a.
+/b/c///a..a/a/a /b/c/a..a/a/a
+/b/c///a..a/a/. /b/c/a..a/a
+/b/c///a..a/a// /b/c/a..a/a
+/b/c///a..a/.aa /b/c/a..a/.aa
+/b/c///a..a/.a. /b/c/a..a/.a.
+/b/c///a..a/.a/ /b/c/a..a/.a
+/b/c///a..a/..a /b/c/a..a/..a
+/b/c///a..a/... /b/c/a..a/...
+/b/c///a..a/../ /b/c
+/b/c///a..a/./a /b/c/a..a/a
+/b/c///a..a/./. /b/c/a..a
+/b/c///a..a/.// /b/c/a..a
+/b/c///a..a//aa /b/c/a..a/aa
+/b/c///a..a//a. /b/c/a..a/a.
+/b/c///a..a//a/ /b/c/a..a/a
+/b/c///a..a//.a /b/c/a..a/.a
+/b/c///a..a//.. /b/c
+/b/c///a..a//./ /b/c/a..a
+/b/c///a..a///a /b/c/a..a/a
+/b/c///a..a///. /b/c/a..a
+/b/c///a..a//// /b/c/a..a
+/b/c///a...aaaa /b/c/a...aaaa
+/b/c///a...aaa. /b/c/a...aaa.
+/b/c///a...aaa/ /b/c/a...aaa
+/b/c///a...aa.a /b/c/a...aa.a
+/b/c///a...aa.. /b/c/a...aa..
+/b/c///a...aa./ /b/c/a...aa.
+/b/c///a...aa/a /b/c/a...aa/a
+/b/c///a...aa/. /b/c/a...aa
+/b/c///a...aa// /b/c/a...aa
+/b/c///a...a.aa /b/c/a...a.aa
+/b/c///a...a.a. /b/c/a...a.a.
+/b/c///a...a.a/ /b/c/a...a.a
+/b/c///a...a..a /b/c/a...a..a
+/b/c///a...a... /b/c/a...a...
+/b/c///a...a../ /b/c/a...a..
+/b/c///a...a./a /b/c/a...a./a
+/b/c///a...a./. /b/c/a...a.
+/b/c///a...a.// /b/c/a...a.
+/b/c///a...a/aa /b/c/a...a/aa
+/b/c///a...a/a. /b/c/a...a/a.
+/b/c///a...a/a/ /b/c/a...a/a
+/b/c///a...a/.a /b/c/a...a/.a
+/b/c///a...a/.. /b/c
+/b/c///a...a/./ /b/c/a...a
+/b/c///a...a//a /b/c/a...a/a
+/b/c///a...a//. /b/c/a...a
+/b/c///a...a/// /b/c/a...a
+/b/c///a....aaa /b/c/a....aaa
+/b/c///a....aa. /b/c/a....aa.
+/b/c///a....aa/ /b/c/a....aa
+/b/c///a....a.a /b/c/a....a.a
+/b/c///a....a.. /b/c/a....a..
+/b/c///a....a./ /b/c/a....a.
+/b/c///a....a/a /b/c/a....a/a
+/b/c///a....a/. /b/c/a....a
+/b/c///a....a// /b/c/a....a
+/b/c///a.....aa /b/c/a.....aa
+/b/c///a.....a. /b/c/a.....a.
+/b/c///a.....a/ /b/c/a.....a
+/b/c///a......a /b/c/a......a
+/b/c///a....... /b/c/a.......
+/b/c///a....../ /b/c/a......
+/b/c///a...../a /b/c/a...../a
+/b/c///a...../. /b/c/a.....
+/b/c///a.....// /b/c/a.....
+/b/c///a..../aa /b/c/a..../aa
+/b/c///a..../a. /b/c/a..../a.
+/b/c///a..../a/ /b/c/a..../a
+/b/c///a..../.a /b/c/a..../.a
+/b/c///a..../.. /b/c
+/b/c///a...././ /b/c/a....
+/b/c///a....//a /b/c/a..../a
+/b/c///a....//. /b/c/a....
+/b/c///a..../// /b/c/a....
+/b/c///a.../aaa /b/c/a.../aaa
+/b/c///a.../aa. /b/c/a.../aa.
+/b/c///a.../aa/ /b/c/a.../aa
+/b/c///a.../a.a /b/c/a.../a.a
+/b/c///a.../a.. /b/c/a.../a..
+/b/c///a.../a./ /b/c/a.../a.
+/b/c///a.../a/a /b/c/a.../a/a
+/b/c///a.../a/. /b/c/a.../a
+/b/c///a.../a// /b/c/a.../a
+/b/c///a.../.aa /b/c/a.../.aa
+/b/c///a.../.a. /b/c/a.../.a.
+/b/c///a.../.a/ /b/c/a.../.a
+/b/c///a.../..a /b/c/a.../..a
+/b/c///a.../... /b/c/a.../...
+/b/c///a.../../ /b/c
+/b/c///a..././a /b/c/a.../a
+/b/c///a..././. /b/c/a...
+/b/c///a.../.// /b/c/a...
+/b/c///a...//aa /b/c/a.../aa
+/b/c///a...//a. /b/c/a.../a.
+/b/c///a...//a/ /b/c/a.../a
+/b/c///a...//.a /b/c/a.../.a
+/b/c///a...//.. /b/c
+/b/c///a...//./ /b/c/a...
+/b/c///a...///a /b/c/a.../a
+/b/c///a...///. /b/c/a...
+/b/c///a...//// /b/c/a...
+/b/c///a../aaaa /b/c/a../aaaa
+/b/c///a../aaa. /b/c/a../aaa.
+/b/c///a../aaa/ /b/c/a../aaa
+/b/c///a../aa.a /b/c/a../aa.a
+/b/c///a../aa.. /b/c/a../aa..
+/b/c///a../aa./ /b/c/a../aa.
+/b/c///a../aa/a /b/c/a../aa/a
+/b/c///a../aa/. /b/c/a../aa
+/b/c///a../aa// /b/c/a../aa
+/b/c///a../a.aa /b/c/a../a.aa
+/b/c///a../a.a. /b/c/a../a.a.
+/b/c///a../a.a/ /b/c/a../a.a
+/b/c///a../a..a /b/c/a../a..a
+/b/c///a../a... /b/c/a../a...
+/b/c///a../a../ /b/c/a../a..
+/b/c///a../a./a /b/c/a../a./a
+/b/c///a../a./. /b/c/a../a.
+/b/c///a../a.// /b/c/a../a.
+/b/c///a../a/aa /b/c/a../a/aa
+/b/c///a../a/a. /b/c/a../a/a.
+/b/c///a../a/a/ /b/c/a../a/a
+/b/c///a../a/.a /b/c/a../a/.a
+/b/c///a../a/.. /b/c/a..
+/b/c///a../a/./ /b/c/a../a
+/b/c///a../a//a /b/c/a../a/a
+/b/c///a../a//. /b/c/a../a
+/b/c///a../a/// /b/c/a../a
+/b/c///a../.aaa /b/c/a../.aaa
+/b/c///a../.aa. /b/c/a../.aa.
+/b/c///a../.aa/ /b/c/a../.aa
+/b/c///a../.a.a /b/c/a../.a.a
+/b/c///a../.a.. /b/c/a../.a..
+/b/c///a../.a./ /b/c/a../.a.
+/b/c///a../.a/a /b/c/a../.a/a
+/b/c///a../.a/. /b/c/a../.a
+/b/c///a../.a// /b/c/a../.a
+/b/c///a../..aa /b/c/a../..aa
+/b/c///a../..a. /b/c/a../..a.
+/b/c///a../..a/ /b/c/a../..a
+/b/c///a../...a /b/c/a../...a
+/b/c///a../.... /b/c/a../....
+/b/c///a../.../ /b/c/a../...
+/b/c///a../../a /b/c/a
+/b/c///a../../. /b/c
+/b/c///a../..// /b/c
+/b/c///a.././aa /b/c/a../aa
+/b/c///a.././a. /b/c/a../a.
+/b/c///a.././a/ /b/c/a../a
+/b/c///a.././.a /b/c/a../.a
+/b/c///a.././.. /b/c
+/b/c///a../././ /b/c/a..
+/b/c///a.././/a /b/c/a../a
+/b/c///a.././/. /b/c/a..
+/b/c///a.././// /b/c/a..
+/b/c///a..//aaa /b/c/a../aaa
+/b/c///a..//aa. /b/c/a../aa.
+/b/c///a..//aa/ /b/c/a../aa
+/b/c///a..//a.a /b/c/a../a.a
+/b/c///a..//a.. /b/c/a../a..
+/b/c///a..//a./ /b/c/a../a.
+/b/c///a..//a/a /b/c/a../a/a
+/b/c///a..//a/. /b/c/a../a
+/b/c///a..//a// /b/c/a../a
+/b/c///a..//.aa /b/c/a../.aa
+/b/c///a..//.a. /b/c/a../.a.
+/b/c///a..//.a/ /b/c/a../.a
+/b/c///a..//..a /b/c/a../..a
+/b/c///a..//... /b/c/a../...
+/b/c///a..//../ /b/c
+/b/c///a..//./a /b/c/a../a
+/b/c///a..//./. /b/c/a..
+/b/c///a..//.// /b/c/a..
+/b/c///a..///aa /b/c/a../aa
+/b/c///a..///a. /b/c/a../a.
+/b/c///a..///a/ /b/c/a../a
+/b/c///a..///.a /b/c/a../.a
+/b/c///a..///.. /b/c
+/b/c///a..///./ /b/c/a..
+/b/c///a..////a /b/c/a../a
+/b/c///a..////. /b/c/a..
+/b/c///a..///// /b/c/a..
+/b/c///a./aaaaa /b/c/a./aaaaa
+/b/c///a./aaaa. /b/c/a./aaaa.
+/b/c///a./aaaa/ /b/c/a./aaaa
+/b/c///a./aaa.a /b/c/a./aaa.a
+/b/c///a./aaa.. /b/c/a./aaa..
+/b/c///a./aaa./ /b/c/a./aaa.
+/b/c///a./aaa/a /b/c/a./aaa/a
+/b/c///a./aaa/. /b/c/a./aaa
+/b/c///a./aaa// /b/c/a./aaa
+/b/c///a./aa.aa /b/c/a./aa.aa
+/b/c///a./aa.a. /b/c/a./aa.a.
+/b/c///a./aa.a/ /b/c/a./aa.a
+/b/c///a./aa..a /b/c/a./aa..a
+/b/c///a./aa... /b/c/a./aa...
+/b/c///a./aa../ /b/c/a./aa..
+/b/c///a./aa./a /b/c/a./aa./a
+/b/c///a./aa./. /b/c/a./aa.
+/b/c///a./aa.// /b/c/a./aa.
+/b/c///a./aa/aa /b/c/a./aa/aa
+/b/c///a./aa/a. /b/c/a./aa/a.
+/b/c///a./aa/a/ /b/c/a./aa/a
+/b/c///a./aa/.a /b/c/a./aa/.a
+/b/c///a./aa/.. /b/c/a.
+/b/c///a./aa/./ /b/c/a./aa
+/b/c///a./aa//a /b/c/a./aa/a
+/b/c///a./aa//. /b/c/a./aa
+/b/c///a./aa/// /b/c/a./aa
+/b/c///a./a.aaa /b/c/a./a.aaa
+/b/c///a./a.aa. /b/c/a./a.aa.
+/b/c///a./a.aa/ /b/c/a./a.aa
+/b/c///a./a.a.a /b/c/a./a.a.a
+/b/c///a./a.a.. /b/c/a./a.a..
+/b/c///a./a.a./ /b/c/a./a.a.
+/b/c///a./a.a/a /b/c/a./a.a/a
+/b/c///a./a.a/. /b/c/a./a.a
+/b/c///a./a.a// /b/c/a./a.a
+/b/c///a./a..aa /b/c/a./a..aa
+/b/c///a./a..a. /b/c/a./a..a.
+/b/c///a./a..a/ /b/c/a./a..a
+/b/c///a./a...a /b/c/a./a...a
+/b/c///a./a.... /b/c/a./a....
+/b/c///a./a.../ /b/c/a./a...
+/b/c///a./a../a /b/c/a./a../a
+/b/c///a./a../. /b/c/a./a..
+/b/c///a./a..// /b/c/a./a..
+/b/c///a./a./aa /b/c/a./a./aa
+/b/c///a./a./a. /b/c/a./a./a.
+/b/c///a./a./a/ /b/c/a./a./a
+/b/c///a./a./.a /b/c/a./a./.a
+/b/c///a./a./.. /b/c/a.
+/b/c///a./a././ /b/c/a./a.
+/b/c///a./a.//a /b/c/a./a./a
+/b/c///a./a.//. /b/c/a./a.
+/b/c///a./a./// /b/c/a./a.
+/b/c///a./a/aaa /b/c/a./a/aaa
+/b/c///a./a/aa. /b/c/a./a/aa.
+/b/c///a./a/aa/ /b/c/a./a/aa
+/b/c///a./a/a.a /b/c/a./a/a.a
+/b/c///a./a/a.. /b/c/a./a/a..
+/b/c///a./a/a./ /b/c/a./a/a.
+/b/c///a./a/a/a /b/c/a./a/a/a
+/b/c///a./a/a/. /b/c/a./a/a
+/b/c///a./a/a// /b/c/a./a/a
+/b/c///a./a/.aa /b/c/a./a/.aa
+/b/c///a./a/.a. /b/c/a./a/.a.
+/b/c///a./a/.a/ /b/c/a./a/.a
+/b/c///a./a/..a /b/c/a./a/..a
+/b/c///a./a/... /b/c/a./a/...
+/b/c///a./a/../ /b/c/a.
+/b/c///a./a/./a /b/c/a./a/a
+/b/c///a./a/./. /b/c/a./a
+/b/c///a./a/.// /b/c/a./a
+/b/c///a./a//aa /b/c/a./a/aa
+/b/c///a./a//a. /b/c/a./a/a.
+/b/c///a./a//a/ /b/c/a./a/a
+/b/c///a./a//.a /b/c/a./a/.a
+/b/c///a./a//.. /b/c/a.
+/b/c///a./a//./ /b/c/a./a
+/b/c///a./a///a /b/c/a./a/a
+/b/c///a./a///. /b/c/a./a
+/b/c///a./a//// /b/c/a./a
+/b/c///a./.aaaa /b/c/a./.aaaa
+/b/c///a./.aaa. /b/c/a./.aaa.
+/b/c///a./.aaa/ /b/c/a./.aaa
+/b/c///a./.aa.a /b/c/a./.aa.a
+/b/c///a./.aa.. /b/c/a./.aa..
+/b/c///a./.aa./ /b/c/a./.aa.
+/b/c///a./.aa/a /b/c/a./.aa/a
+/b/c///a./.aa/. /b/c/a./.aa
+/b/c///a./.aa// /b/c/a./.aa
+/b/c///a./.a.aa /b/c/a./.a.aa
+/b/c///a./.a.a. /b/c/a./.a.a.
+/b/c///a./.a.a/ /b/c/a./.a.a
+/b/c///a./.a..a /b/c/a./.a..a
+/b/c///a./.a... /b/c/a./.a...
+/b/c///a./.a../ /b/c/a./.a..
+/b/c///a./.a./a /b/c/a./.a./a
+/b/c///a./.a./. /b/c/a./.a.
+/b/c///a./.a.// /b/c/a./.a.
+/b/c///a./.a/aa /b/c/a./.a/aa
+/b/c///a./.a/a. /b/c/a./.a/a.
+/b/c///a./.a/a/ /b/c/a./.a/a
+/b/c///a./.a/.a /b/c/a./.a/.a
+/b/c///a./.a/.. /b/c/a.
+/b/c///a./.a/./ /b/c/a./.a
+/b/c///a./.a//a /b/c/a./.a/a
+/b/c///a./.a//. /b/c/a./.a
+/b/c///a./.a/// /b/c/a./.a
+/b/c///a./..aaa /b/c/a./..aaa
+/b/c///a./..aa. /b/c/a./..aa.
+/b/c///a./..aa/ /b/c/a./..aa
+/b/c///a./..a.a /b/c/a./..a.a
+/b/c///a./..a.. /b/c/a./..a..
+/b/c///a./..a./ /b/c/a./..a.
+/b/c///a./..a/a /b/c/a./..a/a
+/b/c///a./..a/. /b/c/a./..a
+/b/c///a./..a// /b/c/a./..a
+/b/c///a./...aa /b/c/a./...aa
+/b/c///a./...a. /b/c/a./...a.
+/b/c///a./...a/ /b/c/a./...a
+/b/c///a./....a /b/c/a./....a
+/b/c///a./..... /b/c/a./.....
+/b/c///a./..../ /b/c/a./....
+/b/c///a./.../a /b/c/a./.../a
+/b/c///a./.../. /b/c/a./...
+/b/c///a./...// /b/c/a./...
+/b/c///a./../aa /b/c/aa
+/b/c///a./../a. /b/c/a.
+/b/c///a./../a/ /b/c/a
+/b/c///a./../.a /b/c/.a
+/b/c///a./../.. /b
+/b/c///a./.././ /b/c
+/b/c///a./..//a /b/c/a
+/b/c///a./..//. /b/c
+/b/c///a./../// /b/c
+/b/c///a././aaa /b/c/a./aaa
+/b/c///a././aa. /b/c/a./aa.
+/b/c///a././aa/ /b/c/a./aa
+/b/c///a././a.a /b/c/a./a.a
+/b/c///a././a.. /b/c/a./a..
+/b/c///a././a./ /b/c/a./a.
+/b/c///a././a/a /b/c/a./a/a
+/b/c///a././a/. /b/c/a./a
+/b/c///a././a// /b/c/a./a
+/b/c///a././.aa /b/c/a./.aa
+/b/c///a././.a. /b/c/a./.a.
+/b/c///a././.a/ /b/c/a./.a
+/b/c///a././..a /b/c/a./..a
+/b/c///a././... /b/c/a./...
+/b/c///a././../ /b/c
+/b/c///a./././a /b/c/a./a
+/b/c///a./././. /b/c/a.
+/b/c///a././.// /b/c/a.
+/b/c///a././/aa /b/c/a./aa
+/b/c///a././/a. /b/c/a./a.
+/b/c///a././/a/ /b/c/a./a
+/b/c///a././/.a /b/c/a./.a
+/b/c///a././/.. /b/c
+/b/c///a././/./ /b/c/a.
+/b/c///a././//a /b/c/a./a
+/b/c///a././//. /b/c/a.
+/b/c///a././/// /b/c/a.
+/b/c///a.//aaaa /b/c/a./aaaa
+/b/c///a.//aaa. /b/c/a./aaa.
+/b/c///a.//aaa/ /b/c/a./aaa
+/b/c///a.//aa.a /b/c/a./aa.a
+/b/c///a.//aa.. /b/c/a./aa..
+/b/c///a.//aa./ /b/c/a./aa.
+/b/c///a.//aa/a /b/c/a./aa/a
+/b/c///a.//aa/. /b/c/a./aa
+/b/c///a.//aa// /b/c/a./aa
+/b/c///a.//a.aa /b/c/a./a.aa
+/b/c///a.//a.a. /b/c/a./a.a.
+/b/c///a.//a.a/ /b/c/a./a.a
+/b/c///a.//a..a /b/c/a./a..a
+/b/c///a.//a... /b/c/a./a...
+/b/c///a.//a../ /b/c/a./a..
+/b/c///a.//a./a /b/c/a./a./a
+/b/c///a.//a./. /b/c/a./a.
+/b/c///a.//a.// /b/c/a./a.
+/b/c///a.//a/aa /b/c/a./a/aa
+/b/c///a.//a/a. /b/c/a./a/a.
+/b/c///a.//a/a/ /b/c/a./a/a
+/b/c///a.//a/.a /b/c/a./a/.a
+/b/c///a.//a/.. /b/c/a.
+/b/c///a.//a/./ /b/c/a./a
+/b/c///a.//a//a /b/c/a./a/a
+/b/c///a.//a//. /b/c/a./a
+/b/c///a.//a/// /b/c/a./a
+/b/c///a.//.aaa /b/c/a./.aaa
+/b/c///a.//.aa. /b/c/a./.aa.
+/b/c///a.//.aa/ /b/c/a./.aa
+/b/c///a.//.a.a /b/c/a./.a.a
+/b/c///a.//.a.. /b/c/a./.a..
+/b/c///a.//.a./ /b/c/a./.a.
+/b/c///a.//.a/a /b/c/a./.a/a
+/b/c///a.//.a/. /b/c/a./.a
+/b/c///a.//.a// /b/c/a./.a
+/b/c///a.//..aa /b/c/a./..aa
+/b/c///a.//..a. /b/c/a./..a.
+/b/c///a.//..a/ /b/c/a./..a
+/b/c///a.//...a /b/c/a./...a
+/b/c///a.//.... /b/c/a./....
+/b/c///a.//.../ /b/c/a./...
+/b/c///a.//../a /b/c/a
+/b/c///a.//../. /b/c
+/b/c///a.//..// /b/c
+/b/c///a.//./aa /b/c/a./aa
+/b/c///a.//./a. /b/c/a./a.
+/b/c///a.//./a/ /b/c/a./a
+/b/c///a.//./.a /b/c/a./.a
+/b/c///a.//./.. /b/c
+/b/c///a.//././ /b/c/a.
+/b/c///a.//.//a /b/c/a./a
+/b/c///a.//.//. /b/c/a.
+/b/c///a.//./// /b/c/a.
+/b/c///a.///aaa /b/c/a./aaa
+/b/c///a.///aa. /b/c/a./aa.
+/b/c///a.///aa/ /b/c/a./aa
+/b/c///a.///a.a /b/c/a./a.a
+/b/c///a.///a.. /b/c/a./a..
+/b/c///a.///a./ /b/c/a./a.
+/b/c///a.///a/a /b/c/a./a/a
+/b/c///a.///a/. /b/c/a./a
+/b/c///a.///a// /b/c/a./a
+/b/c///a.///.aa /b/c/a./.aa
+/b/c///a.///.a. /b/c/a./.a.
+/b/c///a.///.a/ /b/c/a./.a
+/b/c///a.///..a /b/c/a./..a
+/b/c///a.///... /b/c/a./...
+/b/c///a.///../ /b/c
+/b/c///a.///./a /b/c/a./a
+/b/c///a.///./. /b/c/a.
+/b/c///a.///.// /b/c/a.
+/b/c///a.////aa /b/c/a./aa
+/b/c///a.////a. /b/c/a./a.
+/b/c///a.////a/ /b/c/a./a
+/b/c///a.////.a /b/c/a./.a
+/b/c///a.////.. /b/c
+/b/c///a.////./ /b/c/a.
+/b/c///a./////a /b/c/a./a
+/b/c///a./////. /b/c/a.
+/b/c///a.////// /b/c/a.
+/b/c///a/aaaaaa /b/c/a/aaaaaa
+/b/c///a/aaaaa. /b/c/a/aaaaa.
+/b/c///a/aaaaa/ /b/c/a/aaaaa
+/b/c///a/aaaa.a /b/c/a/aaaa.a
+/b/c///a/aaaa.. /b/c/a/aaaa..
+/b/c///a/aaaa./ /b/c/a/aaaa.
+/b/c///a/aaaa/a /b/c/a/aaaa/a
+/b/c///a/aaaa/. /b/c/a/aaaa
+/b/c///a/aaaa// /b/c/a/aaaa
+/b/c///a/aaa.aa /b/c/a/aaa.aa
+/b/c///a/aaa.a. /b/c/a/aaa.a.
+/b/c///a/aaa.a/ /b/c/a/aaa.a
+/b/c///a/aaa..a /b/c/a/aaa..a
+/b/c///a/aaa... /b/c/a/aaa...
+/b/c///a/aaa../ /b/c/a/aaa..
+/b/c///a/aaa./a /b/c/a/aaa./a
+/b/c///a/aaa./. /b/c/a/aaa.
+/b/c///a/aaa.// /b/c/a/aaa.
+/b/c///a/aaa/aa /b/c/a/aaa/aa
+/b/c///a/aaa/a. /b/c/a/aaa/a.
+/b/c///a/aaa/a/ /b/c/a/aaa/a
+/b/c///a/aaa/.a /b/c/a/aaa/.a
+/b/c///a/aaa/.. /b/c/a
+/b/c///a/aaa/./ /b/c/a/aaa
+/b/c///a/aaa//a /b/c/a/aaa/a
+/b/c///a/aaa//. /b/c/a/aaa
+/b/c///a/aaa/// /b/c/a/aaa
+/b/c///a/aa.aaa /b/c/a/aa.aaa
+/b/c///a/aa.aa. /b/c/a/aa.aa.
+/b/c///a/aa.aa/ /b/c/a/aa.aa
+/b/c///a/aa.a.a /b/c/a/aa.a.a
+/b/c///a/aa.a.. /b/c/a/aa.a..
+/b/c///a/aa.a./ /b/c/a/aa.a.
+/b/c///a/aa.a/a /b/c/a/aa.a/a
+/b/c///a/aa.a/. /b/c/a/aa.a
+/b/c///a/aa.a// /b/c/a/aa.a
+/b/c///a/aa..aa /b/c/a/aa..aa
+/b/c///a/aa..a. /b/c/a/aa..a.
+/b/c///a/aa..a/ /b/c/a/aa..a
+/b/c///a/aa...a /b/c/a/aa...a
+/b/c///a/aa.... /b/c/a/aa....
+/b/c///a/aa.../ /b/c/a/aa...
+/b/c///a/aa../a /b/c/a/aa../a
+/b/c///a/aa../. /b/c/a/aa..
+/b/c///a/aa..// /b/c/a/aa..
+/b/c///a/aa./aa /b/c/a/aa./aa
+/b/c///a/aa./a. /b/c/a/aa./a.
+/b/c///a/aa./a/ /b/c/a/aa./a
+/b/c///a/aa./.a /b/c/a/aa./.a
+/b/c///a/aa./.. /b/c/a
+/b/c///a/aa././ /b/c/a/aa.
+/b/c///a/aa.//a /b/c/a/aa./a
+/b/c///a/aa.//. /b/c/a/aa.
+/b/c///a/aa./// /b/c/a/aa.
+/b/c///a/aa/aaa /b/c/a/aa/aaa
+/b/c///a/aa/aa. /b/c/a/aa/aa.
+/b/c///a/aa/aa/ /b/c/a/aa/aa
+/b/c///a/aa/a.a /b/c/a/aa/a.a
+/b/c///a/aa/a.. /b/c/a/aa/a..
+/b/c///a/aa/a./ /b/c/a/aa/a.
+/b/c///a/aa/a/a /b/c/a/aa/a/a
+/b/c///a/aa/a/. /b/c/a/aa/a
+/b/c///a/aa/a// /b/c/a/aa/a
+/b/c///a/aa/.aa /b/c/a/aa/.aa
+/b/c///a/aa/.a. /b/c/a/aa/.a.
+/b/c///a/aa/.a/ /b/c/a/aa/.a
+/b/c///a/aa/..a /b/c/a/aa/..a
+/b/c///a/aa/... /b/c/a/aa/...
+/b/c///a/aa/../ /b/c/a
+/b/c///a/aa/./a /b/c/a/aa/a
+/b/c///a/aa/./. /b/c/a/aa
+/b/c///a/aa/.// /b/c/a/aa
+/b/c///a/aa//aa /b/c/a/aa/aa
+/b/c///a/aa//a. /b/c/a/aa/a.
+/b/c///a/aa//a/ /b/c/a/aa/a
+/b/c///a/aa//.a /b/c/a/aa/.a
+/b/c///a/aa//.. /b/c/a
+/b/c///a/aa//./ /b/c/a/aa
+/b/c///a/aa///a /b/c/a/aa/a
+/b/c///a/aa///. /b/c/a/aa
+/b/c///a/aa//// /b/c/a/aa
+/b/c///a/a.aaaa /b/c/a/a.aaaa
+/b/c///a/a.aaa. /b/c/a/a.aaa.
+/b/c///a/a.aaa/ /b/c/a/a.aaa
+/b/c///a/a.aa.a /b/c/a/a.aa.a
+/b/c///a/a.aa.. /b/c/a/a.aa..
+/b/c///a/a.aa./ /b/c/a/a.aa.
+/b/c///a/a.aa/a /b/c/a/a.aa/a
+/b/c///a/a.aa/. /b/c/a/a.aa
+/b/c///a/a.aa// /b/c/a/a.aa
+/b/c///a/a.a.aa /b/c/a/a.a.aa
+/b/c///a/a.a.a. /b/c/a/a.a.a.
+/b/c///a/a.a.a/ /b/c/a/a.a.a
+/b/c///a/a.a..a /b/c/a/a.a..a
+/b/c///a/a.a... /b/c/a/a.a...
+/b/c///a/a.a../ /b/c/a/a.a..
+/b/c///a/a.a./a /b/c/a/a.a./a
+/b/c///a/a.a./. /b/c/a/a.a.
+/b/c///a/a.a.// /b/c/a/a.a.
+/b/c///a/a.a/aa /b/c/a/a.a/aa
+/b/c///a/a.a/a. /b/c/a/a.a/a.
+/b/c///a/a.a/a/ /b/c/a/a.a/a
+/b/c///a/a.a/.a /b/c/a/a.a/.a
+/b/c///a/a.a/.. /b/c/a
+/b/c///a/a.a/./ /b/c/a/a.a
+/b/c///a/a.a//a /b/c/a/a.a/a
+/b/c///a/a.a//. /b/c/a/a.a
+/b/c///a/a.a/// /b/c/a/a.a
+/b/c///a/a..aaa /b/c/a/a..aaa
+/b/c///a/a..aa. /b/c/a/a..aa.
+/b/c///a/a..aa/ /b/c/a/a..aa
+/b/c///a/a..a.a /b/c/a/a..a.a
+/b/c///a/a..a.. /b/c/a/a..a..
+/b/c///a/a..a./ /b/c/a/a..a.
+/b/c///a/a..a/a /b/c/a/a..a/a
+/b/c///a/a..a/. /b/c/a/a..a
+/b/c///a/a..a// /b/c/a/a..a
+/b/c///a/a...aa /b/c/a/a...aa
+/b/c///a/a...a. /b/c/a/a...a.
+/b/c///a/a...a/ /b/c/a/a...a
+/b/c///a/a....a /b/c/a/a....a
+/b/c///a/a..... /b/c/a/a.....
+/b/c///a/a..../ /b/c/a/a....
+/b/c///a/a.../a /b/c/a/a.../a
+/b/c///a/a.../. /b/c/a/a...
+/b/c///a/a...// /b/c/a/a...
+/b/c///a/a../aa /b/c/a/a../aa
+/b/c///a/a../a. /b/c/a/a../a.
+/b/c///a/a../a/ /b/c/a/a../a
+/b/c///a/a../.a /b/c/a/a../.a
+/b/c///a/a../.. /b/c/a
+/b/c///a/a.././ /b/c/a/a..
+/b/c///a/a..//a /b/c/a/a../a
+/b/c///a/a..//. /b/c/a/a..
+/b/c///a/a../// /b/c/a/a..
+/b/c///a/a./aaa /b/c/a/a./aaa
+/b/c///a/a./aa. /b/c/a/a./aa.
+/b/c///a/a./aa/ /b/c/a/a./aa
+/b/c///a/a./a.a /b/c/a/a./a.a
+/b/c///a/a./a.. /b/c/a/a./a..
+/b/c///a/a./a./ /b/c/a/a./a.
+/b/c///a/a./a/a /b/c/a/a./a/a
+/b/c///a/a./a/. /b/c/a/a./a
+/b/c///a/a./a// /b/c/a/a./a
+/b/c///a/a./.aa /b/c/a/a./.aa
+/b/c///a/a./.a. /b/c/a/a./.a.
+/b/c///a/a./.a/ /b/c/a/a./.a
+/b/c///a/a./..a /b/c/a/a./..a
+/b/c///a/a./... /b/c/a/a./...
+/b/c///a/a./../ /b/c/a
+/b/c///a/a././a /b/c/a/a./a
+/b/c///a/a././. /b/c/a/a.
+/b/c///a/a./.// /b/c/a/a.
+/b/c///a/a.//aa /b/c/a/a./aa
+/b/c///a/a.//a. /b/c/a/a./a.
+/b/c///a/a.//a/ /b/c/a/a./a
+/b/c///a/a.//.a /b/c/a/a./.a
+/b/c///a/a.//.. /b/c/a
+/b/c///a/a.//./ /b/c/a/a.
+/b/c///a/a.///a /b/c/a/a./a
+/b/c///a/a.///. /b/c/a/a.
+/b/c///a/a.//// /b/c/a/a.
+/b/c///a/a/aaaa /b/c/a/a/aaaa
+/b/c///a/a/aaa. /b/c/a/a/aaa.
+/b/c///a/a/aaa/ /b/c/a/a/aaa
+/b/c///a/a/aa.a /b/c/a/a/aa.a
+/b/c///a/a/aa.. /b/c/a/a/aa..
+/b/c///a/a/aa./ /b/c/a/a/aa.
+/b/c///a/a/aa/a /b/c/a/a/aa/a
+/b/c///a/a/aa/. /b/c/a/a/aa
+/b/c///a/a/aa// /b/c/a/a/aa
+/b/c///a/a/a.aa /b/c/a/a/a.aa
+/b/c///a/a/a.a. /b/c/a/a/a.a.
+/b/c///a/a/a.a/ /b/c/a/a/a.a
+/b/c///a/a/a..a /b/c/a/a/a..a
+/b/c///a/a/a... /b/c/a/a/a...
+/b/c///a/a/a../ /b/c/a/a/a..
+/b/c///a/a/a./a /b/c/a/a/a./a
+/b/c///a/a/a./. /b/c/a/a/a.
+/b/c///a/a/a.// /b/c/a/a/a.
+/b/c///a/a/a/aa /b/c/a/a/a/aa
+/b/c///a/a/a/a. /b/c/a/a/a/a.
+/b/c///a/a/a/a/ /b/c/a/a/a/a
+/b/c///a/a/a/.a /b/c/a/a/a/.a
+/b/c///a/a/a/.. /b/c/a/a
+/b/c///a/a/a/./ /b/c/a/a/a
+/b/c///a/a/a//a /b/c/a/a/a/a
+/b/c///a/a/a//. /b/c/a/a/a
+/b/c///a/a/a/// /b/c/a/a/a
+/b/c///a/a/.aaa /b/c/a/a/.aaa
+/b/c///a/a/.aa. /b/c/a/a/.aa.
+/b/c///a/a/.aa/ /b/c/a/a/.aa
+/b/c///a/a/.a.a /b/c/a/a/.a.a
+/b/c///a/a/.a.. /b/c/a/a/.a..
+/b/c///a/a/.a./ /b/c/a/a/.a.
+/b/c///a/a/.a/a /b/c/a/a/.a/a
+/b/c///a/a/.a/. /b/c/a/a/.a
+/b/c///a/a/.a// /b/c/a/a/.a
+/b/c///a/a/..aa /b/c/a/a/..aa
+/b/c///a/a/..a. /b/c/a/a/..a.
+/b/c///a/a/..a/ /b/c/a/a/..a
+/b/c///a/a/...a /b/c/a/a/...a
+/b/c///a/a/.... /b/c/a/a/....
+/b/c///a/a/.../ /b/c/a/a/...
+/b/c///a/a/../a /b/c/a/a
+/b/c///a/a/../. /b/c/a
+/b/c///a/a/..// /b/c/a
+/b/c///a/a/./aa /b/c/a/a/aa
+/b/c///a/a/./a. /b/c/a/a/a.
+/b/c///a/a/./a/ /b/c/a/a/a
+/b/c///a/a/./.a /b/c/a/a/.a
+/b/c///a/a/./.. /b/c/a
+/b/c///a/a/././ /b/c/a/a
+/b/c///a/a/.//a /b/c/a/a/a
+/b/c///a/a/.//. /b/c/a/a
+/b/c///a/a/./// /b/c/a/a
+/b/c///a/a//aaa /b/c/a/a/aaa
+/b/c///a/a//aa. /b/c/a/a/aa.
+/b/c///a/a//aa/ /b/c/a/a/aa
+/b/c///a/a//a.a /b/c/a/a/a.a
+/b/c///a/a//a.. /b/c/a/a/a..
+/b/c///a/a//a./ /b/c/a/a/a.
+/b/c///a/a//a/a /b/c/a/a/a/a
+/b/c///a/a//a/. /b/c/a/a/a
+/b/c///a/a//a// /b/c/a/a/a
+/b/c///a/a//.aa /b/c/a/a/.aa
+/b/c///a/a//.a. /b/c/a/a/.a.
+/b/c///a/a//.a/ /b/c/a/a/.a
+/b/c///a/a//..a /b/c/a/a/..a
+/b/c///a/a//... /b/c/a/a/...
+/b/c///a/a//../ /b/c/a
+/b/c///a/a//./a /b/c/a/a/a
+/b/c///a/a//./. /b/c/a/a
+/b/c///a/a//.// /b/c/a/a
+/b/c///a/a///aa /b/c/a/a/aa
+/b/c///a/a///a. /b/c/a/a/a.
+/b/c///a/a///a/ /b/c/a/a/a
+/b/c///a/a///.a /b/c/a/a/.a
+/b/c///a/a///.. /b/c/a
+/b/c///a/a///./ /b/c/a/a
+/b/c///a/a////a /b/c/a/a/a
+/b/c///a/a////. /b/c/a/a
+/b/c///a/a///// /b/c/a/a
+/b/c///a/.aaaaa /b/c/a/.aaaaa
+/b/c///a/.aaaa. /b/c/a/.aaaa.
+/b/c///a/.aaaa/ /b/c/a/.aaaa
+/b/c///a/.aaa.a /b/c/a/.aaa.a
+/b/c///a/.aaa.. /b/c/a/.aaa..
+/b/c///a/.aaa./ /b/c/a/.aaa.
+/b/c///a/.aaa/a /b/c/a/.aaa/a
+/b/c///a/.aaa/. /b/c/a/.aaa
+/b/c///a/.aaa// /b/c/a/.aaa
+/b/c///a/.aa.aa /b/c/a/.aa.aa
+/b/c///a/.aa.a. /b/c/a/.aa.a.
+/b/c///a/.aa.a/ /b/c/a/.aa.a
+/b/c///a/.aa..a /b/c/a/.aa..a
+/b/c///a/.aa... /b/c/a/.aa...
+/b/c///a/.aa../ /b/c/a/.aa..
+/b/c///a/.aa./a /b/c/a/.aa./a
+/b/c///a/.aa./. /b/c/a/.aa.
+/b/c///a/.aa.// /b/c/a/.aa.
+/b/c///a/.aa/aa /b/c/a/.aa/aa
+/b/c///a/.aa/a. /b/c/a/.aa/a.
+/b/c///a/.aa/a/ /b/c/a/.aa/a
+/b/c///a/.aa/.a /b/c/a/.aa/.a
+/b/c///a/.aa/.. /b/c/a
+/b/c///a/.aa/./ /b/c/a/.aa
+/b/c///a/.aa//a /b/c/a/.aa/a
+/b/c///a/.aa//. /b/c/a/.aa
+/b/c///a/.aa/// /b/c/a/.aa
+/b/c///a/.a.aaa /b/c/a/.a.aaa
+/b/c///a/.a.aa. /b/c/a/.a.aa.
+/b/c///a/.a.aa/ /b/c/a/.a.aa
+/b/c///a/.a.a.a /b/c/a/.a.a.a
+/b/c///a/.a.a.. /b/c/a/.a.a..
+/b/c///a/.a.a./ /b/c/a/.a.a.
+/b/c///a/.a.a/a /b/c/a/.a.a/a
+/b/c///a/.a.a/. /b/c/a/.a.a
+/b/c///a/.a.a// /b/c/a/.a.a
+/b/c///a/.a..aa /b/c/a/.a..aa
+/b/c///a/.a..a. /b/c/a/.a..a.
+/b/c///a/.a..a/ /b/c/a/.a..a
+/b/c///a/.a...a /b/c/a/.a...a
+/b/c///a/.a.... /b/c/a/.a....
+/b/c///a/.a.../ /b/c/a/.a...
+/b/c///a/.a../a /b/c/a/.a../a
+/b/c///a/.a../. /b/c/a/.a..
+/b/c///a/.a..// /b/c/a/.a..
+/b/c///a/.a./aa /b/c/a/.a./aa
+/b/c///a/.a./a. /b/c/a/.a./a.
+/b/c///a/.a./a/ /b/c/a/.a./a
+/b/c///a/.a./.a /b/c/a/.a./.a
+/b/c///a/.a./.. /b/c/a
+/b/c///a/.a././ /b/c/a/.a.
+/b/c///a/.a.//a /b/c/a/.a./a
+/b/c///a/.a.//. /b/c/a/.a.
+/b/c///a/.a./// /b/c/a/.a.
+/b/c///a/.a/aaa /b/c/a/.a/aaa
+/b/c///a/.a/aa. /b/c/a/.a/aa.
+/b/c///a/.a/aa/ /b/c/a/.a/aa
+/b/c///a/.a/a.a /b/c/a/.a/a.a
+/b/c///a/.a/a.. /b/c/a/.a/a..
+/b/c///a/.a/a./ /b/c/a/.a/a.
+/b/c///a/.a/a/a /b/c/a/.a/a/a
+/b/c///a/.a/a/. /b/c/a/.a/a
+/b/c///a/.a/a// /b/c/a/.a/a
+/b/c///a/.a/.aa /b/c/a/.a/.aa
+/b/c///a/.a/.a. /b/c/a/.a/.a.
+/b/c///a/.a/.a/ /b/c/a/.a/.a
+/b/c///a/.a/..a /b/c/a/.a/..a
+/b/c///a/.a/... /b/c/a/.a/...
+/b/c///a/.a/../ /b/c/a
+/b/c///a/.a/./a /b/c/a/.a/a
+/b/c///a/.a/./. /b/c/a/.a
+/b/c///a/.a/.// /b/c/a/.a
+/b/c///a/.a//aa /b/c/a/.a/aa
+/b/c///a/.a//a. /b/c/a/.a/a.
+/b/c///a/.a//a/ /b/c/a/.a/a
+/b/c///a/.a//.a /b/c/a/.a/.a
+/b/c///a/.a//.. /b/c/a
+/b/c///a/.a//./ /b/c/a/.a
+/b/c///a/.a///a /b/c/a/.a/a
+/b/c///a/.a///. /b/c/a/.a
+/b/c///a/.a//// /b/c/a/.a
+/b/c///a/..aaaa /b/c/a/..aaaa
+/b/c///a/..aaa. /b/c/a/..aaa.
+/b/c///a/..aaa/ /b/c/a/..aaa
+/b/c///a/..aa.a /b/c/a/..aa.a
+/b/c///a/..aa.. /b/c/a/..aa..
+/b/c///a/..aa./ /b/c/a/..aa.
+/b/c///a/..aa/a /b/c/a/..aa/a
+/b/c///a/..aa/. /b/c/a/..aa
+/b/c///a/..aa// /b/c/a/..aa
+/b/c///a/..a.aa /b/c/a/..a.aa
+/b/c///a/..a.a. /b/c/a/..a.a.
+/b/c///a/..a.a/ /b/c/a/..a.a
+/b/c///a/..a..a /b/c/a/..a..a
+/b/c///a/..a... /b/c/a/..a...
+/b/c///a/..a../ /b/c/a/..a..
+/b/c///a/..a./a /b/c/a/..a./a
+/b/c///a/..a./. /b/c/a/..a.
+/b/c///a/..a.// /b/c/a/..a.
+/b/c///a/..a/aa /b/c/a/..a/aa
+/b/c///a/..a/a. /b/c/a/..a/a.
+/b/c///a/..a/a/ /b/c/a/..a/a
+/b/c///a/..a/.a /b/c/a/..a/.a
+/b/c///a/..a/.. /b/c/a
+/b/c///a/..a/./ /b/c/a/..a
+/b/c///a/..a//a /b/c/a/..a/a
+/b/c///a/..a//. /b/c/a/..a
+/b/c///a/..a/// /b/c/a/..a
+/b/c///a/...aaa /b/c/a/...aaa
+/b/c///a/...aa. /b/c/a/...aa.
+/b/c///a/...aa/ /b/c/a/...aa
+/b/c///a/...a.a /b/c/a/...a.a
+/b/c///a/...a.. /b/c/a/...a..
+/b/c///a/...a./ /b/c/a/...a.
+/b/c///a/...a/a /b/c/a/...a/a
+/b/c///a/...a/. /b/c/a/...a
+/b/c///a/...a// /b/c/a/...a
+/b/c///a/....aa /b/c/a/....aa
+/b/c///a/....a. /b/c/a/....a.
+/b/c///a/....a/ /b/c/a/....a
+/b/c///a/.....a /b/c/a/.....a
+/b/c///a/...... /b/c/a/......
+/b/c///a/...../ /b/c/a/.....
+/b/c///a/..../a /b/c/a/..../a
+/b/c///a/..../. /b/c/a/....
+/b/c///a/....// /b/c/a/....
+/b/c///a/.../aa /b/c/a/.../aa
+/b/c///a/.../a. /b/c/a/.../a.
+/b/c///a/.../a/ /b/c/a/.../a
+/b/c///a/.../.a /b/c/a/.../.a
+/b/c///a/.../.. /b/c/a
+/b/c///a/..././ /b/c/a/...
+/b/c///a/...//a /b/c/a/.../a
+/b/c///a/...//. /b/c/a/...
+/b/c///a/.../// /b/c/a/...
+/b/c///a/../aaa /b/c/aaa
+/b/c///a/../aa. /b/c/aa.
+/b/c///a/../aa/ /b/c/aa
+/b/c///a/../a.a /b/c/a.a
+/b/c///a/../a.. /b/c/a..
+/b/c///a/../a./ /b/c/a.
+/b/c///a/../a/a /b/c/a/a
+/b/c///a/../a/. /b/c/a
+/b/c///a/../a// /b/c/a
+/b/c///a/../.aa /b/c/.aa
+/b/c///a/../.a. /b/c/.a.
+/b/c///a/../.a/ /b/c/.a
+/b/c///a/../..a /b/c/..a
+/b/c///a/../... /b/c/...
+/b/c///a/../../ /b
+/b/c///a/.././a /b/c/a
+/b/c///a/.././. /b/c
+/b/c///a/../.// /b/c
+/b/c///a/..//aa /b/c/aa
+/b/c///a/..//a. /b/c/a.
+/b/c///a/..//a/ /b/c/a
+/b/c///a/..//.a /b/c/.a
+/b/c///a/..//.. /b
+/b/c///a/..//./ /b/c
+/b/c///a/..///a /b/c/a
+/b/c///a/..///. /b/c
+/b/c///a/..//// /b/c
+/b/c///a/./aaaa /b/c/a/aaaa
+/b/c///a/./aaa. /b/c/a/aaa.
+/b/c///a/./aaa/ /b/c/a/aaa
+/b/c///a/./aa.a /b/c/a/aa.a
+/b/c///a/./aa.. /b/c/a/aa..
+/b/c///a/./aa./ /b/c/a/aa.
+/b/c///a/./aa/a /b/c/a/aa/a
+/b/c///a/./aa/. /b/c/a/aa
+/b/c///a/./aa// /b/c/a/aa
+/b/c///a/./a.aa /b/c/a/a.aa
+/b/c///a/./a.a. /b/c/a/a.a.
+/b/c///a/./a.a/ /b/c/a/a.a
+/b/c///a/./a..a /b/c/a/a..a
+/b/c///a/./a... /b/c/a/a...
+/b/c///a/./a../ /b/c/a/a..
+/b/c///a/./a./a /b/c/a/a./a
+/b/c///a/./a./. /b/c/a/a.
+/b/c///a/./a.// /b/c/a/a.
+/b/c///a/./a/aa /b/c/a/a/aa
+/b/c///a/./a/a. /b/c/a/a/a.
+/b/c///a/./a/a/ /b/c/a/a/a
+/b/c///a/./a/.a /b/c/a/a/.a
+/b/c///a/./a/.. /b/c/a
+/b/c///a/./a/./ /b/c/a/a
+/b/c///a/./a//a /b/c/a/a/a
+/b/c///a/./a//. /b/c/a/a
+/b/c///a/./a/// /b/c/a/a
+/b/c///a/./.aaa /b/c/a/.aaa
+/b/c///a/./.aa. /b/c/a/.aa.
+/b/c///a/./.aa/ /b/c/a/.aa
+/b/c///a/./.a.a /b/c/a/.a.a
+/b/c///a/./.a.. /b/c/a/.a..
+/b/c///a/./.a./ /b/c/a/.a.
+/b/c///a/./.a/a /b/c/a/.a/a
+/b/c///a/./.a/. /b/c/a/.a
+/b/c///a/./.a// /b/c/a/.a
+/b/c///a/./..aa /b/c/a/..aa
+/b/c///a/./..a. /b/c/a/..a.
+/b/c///a/./..a/ /b/c/a/..a
+/b/c///a/./...a /b/c/a/...a
+/b/c///a/./.... /b/c/a/....
+/b/c///a/./.../ /b/c/a/...
+/b/c///a/./../a /b/c/a
+/b/c///a/./../. /b/c
+/b/c///a/./..// /b/c
+/b/c///a/././aa /b/c/a/aa
+/b/c///a/././a. /b/c/a/a.
+/b/c///a/././a/ /b/c/a/a
+/b/c///a/././.a /b/c/a/.a
+/b/c///a/././.. /b/c
+/b/c///a/./././ /b/c/a
+/b/c///a/././/a /b/c/a/a
+/b/c///a/././/. /b/c/a
+/b/c///a/././// /b/c/a
+/b/c///a/.//aaa /b/c/a/aaa
+/b/c///a/.//aa. /b/c/a/aa.
+/b/c///a/.//aa/ /b/c/a/aa
+/b/c///a/.//a.a /b/c/a/a.a
+/b/c///a/.//a.. /b/c/a/a..
+/b/c///a/.//a./ /b/c/a/a.
+/b/c///a/.//a/a /b/c/a/a/a
+/b/c///a/.//a/. /b/c/a/a
+/b/c///a/.//a// /b/c/a/a
+/b/c///a/.//.aa /b/c/a/.aa
+/b/c///a/.//.a. /b/c/a/.a.
+/b/c///a/.//.a/ /b/c/a/.a
+/b/c///a/.//..a /b/c/a/..a
+/b/c///a/.//... /b/c/a/...
+/b/c///a/.//../ /b/c
+/b/c///a/.//./a /b/c/a/a
+/b/c///a/.//./. /b/c/a
+/b/c///a/.//.// /b/c/a
+/b/c///a/.///aa /b/c/a/aa
+/b/c///a/.///a. /b/c/a/a.
+/b/c///a/.///a/ /b/c/a/a
+/b/c///a/.///.a /b/c/a/.a
+/b/c///a/.///.. /b/c
+/b/c///a/.///./ /b/c/a
+/b/c///a/.////a /b/c/a/a
+/b/c///a/.////. /b/c/a
+/b/c///a/.///// /b/c/a
+/b/c///a//aaaaa /b/c/a/aaaaa
+/b/c///a//aaaa. /b/c/a/aaaa.
+/b/c///a//aaaa/ /b/c/a/aaaa
+/b/c///a//aaa.a /b/c/a/aaa.a
+/b/c///a//aaa.. /b/c/a/aaa..
+/b/c///a//aaa./ /b/c/a/aaa.
+/b/c///a//aaa/a /b/c/a/aaa/a
+/b/c///a//aaa/. /b/c/a/aaa
+/b/c///a//aaa// /b/c/a/aaa
+/b/c///a//aa.aa /b/c/a/aa.aa
+/b/c///a//aa.a. /b/c/a/aa.a.
+/b/c///a//aa.a/ /b/c/a/aa.a
+/b/c///a//aa..a /b/c/a/aa..a
+/b/c///a//aa... /b/c/a/aa...
+/b/c///a//aa../ /b/c/a/aa..
+/b/c///a//aa./a /b/c/a/aa./a
+/b/c///a//aa./. /b/c/a/aa.
+/b/c///a//aa.// /b/c/a/aa.
+/b/c///a//aa/aa /b/c/a/aa/aa
+/b/c///a//aa/a. /b/c/a/aa/a.
+/b/c///a//aa/a/ /b/c/a/aa/a
+/b/c///a//aa/.a /b/c/a/aa/.a
+/b/c///a//aa/.. /b/c/a
+/b/c///a//aa/./ /b/c/a/aa
+/b/c///a//aa//a /b/c/a/aa/a
+/b/c///a//aa//. /b/c/a/aa
+/b/c///a//aa/// /b/c/a/aa
+/b/c///a//a.aaa /b/c/a/a.aaa
+/b/c///a//a.aa. /b/c/a/a.aa.
+/b/c///a//a.aa/ /b/c/a/a.aa
+/b/c///a//a.a.a /b/c/a/a.a.a
+/b/c///a//a.a.. /b/c/a/a.a..
+/b/c///a//a.a./ /b/c/a/a.a.
+/b/c///a//a.a/a /b/c/a/a.a/a
+/b/c///a//a.a/. /b/c/a/a.a
+/b/c///a//a.a// /b/c/a/a.a
+/b/c///a//a..aa /b/c/a/a..aa
+/b/c///a//a..a. /b/c/a/a..a.
+/b/c///a//a..a/ /b/c/a/a..a
+/b/c///a//a...a /b/c/a/a...a
+/b/c///a//a.... /b/c/a/a....
+/b/c///a//a.../ /b/c/a/a...
+/b/c///a//a../a /b/c/a/a../a
+/b/c///a//a../. /b/c/a/a..
+/b/c///a//a..// /b/c/a/a..
+/b/c///a//a./aa /b/c/a/a./aa
+/b/c///a//a./a. /b/c/a/a./a.
+/b/c///a//a./a/ /b/c/a/a./a
+/b/c///a//a./.a /b/c/a/a./.a
+/b/c///a//a./.. /b/c/a
+/b/c///a//a././ /b/c/a/a.
+/b/c///a//a.//a /b/c/a/a./a
+/b/c///a//a.//. /b/c/a/a.
+/b/c///a//a./// /b/c/a/a.
+/b/c///a//a/aaa /b/c/a/a/aaa
+/b/c///a//a/aa. /b/c/a/a/aa.
+/b/c///a//a/aa/ /b/c/a/a/aa
+/b/c///a//a/a.a /b/c/a/a/a.a
+/b/c///a//a/a.. /b/c/a/a/a..
+/b/c///a//a/a./ /b/c/a/a/a.
+/b/c///a//a/a/a /b/c/a/a/a/a
+/b/c///a//a/a/. /b/c/a/a/a
+/b/c///a//a/a// /b/c/a/a/a
+/b/c///a//a/.aa /b/c/a/a/.aa
+/b/c///a//a/.a. /b/c/a/a/.a.
+/b/c///a//a/.a/ /b/c/a/a/.a
+/b/c///a//a/..a /b/c/a/a/..a
+/b/c///a//a/... /b/c/a/a/...
+/b/c///a//a/../ /b/c/a
+/b/c///a//a/./a /b/c/a/a/a
+/b/c///a//a/./. /b/c/a/a
+/b/c///a//a/.// /b/c/a/a
+/b/c///a//a//aa /b/c/a/a/aa
+/b/c///a//a//a. /b/c/a/a/a.
+/b/c///a//a//a/ /b/c/a/a/a
+/b/c///a//a//.a /b/c/a/a/.a
+/b/c///a//a//.. /b/c/a
+/b/c///a//a//./ /b/c/a/a
+/b/c///a//a///a /b/c/a/a/a
+/b/c///a//a///. /b/c/a/a
+/b/c///a//a//// /b/c/a/a
+/b/c///a//.aaaa /b/c/a/.aaaa
+/b/c///a//.aaa. /b/c/a/.aaa.
+/b/c///a//.aaa/ /b/c/a/.aaa
+/b/c///a//.aa.a /b/c/a/.aa.a
+/b/c///a//.aa.. /b/c/a/.aa..
+/b/c///a//.aa./ /b/c/a/.aa.
+/b/c///a//.aa/a /b/c/a/.aa/a
+/b/c///a//.aa/. /b/c/a/.aa
+/b/c///a//.aa// /b/c/a/.aa
+/b/c///a//.a.aa /b/c/a/.a.aa
+/b/c///a//.a.a. /b/c/a/.a.a.
+/b/c///a//.a.a/ /b/c/a/.a.a
+/b/c///a//.a..a /b/c/a/.a..a
+/b/c///a//.a... /b/c/a/.a...
+/b/c///a//.a../ /b/c/a/.a..
+/b/c///a//.a./a /b/c/a/.a./a
+/b/c///a//.a./. /b/c/a/.a.
+/b/c///a//.a.// /b/c/a/.a.
+/b/c///a//.a/aa /b/c/a/.a/aa
+/b/c///a//.a/a. /b/c/a/.a/a.
+/b/c///a//.a/a/ /b/c/a/.a/a
+/b/c///a//.a/.a /b/c/a/.a/.a
+/b/c///a//.a/.. /b/c/a
+/b/c///a//.a/./ /b/c/a/.a
+/b/c///a//.a//a /b/c/a/.a/a
+/b/c///a//.a//. /b/c/a/.a
+/b/c///a//.a/// /b/c/a/.a
+/b/c///a//..aaa /b/c/a/..aaa
+/b/c///a//..aa. /b/c/a/..aa.
+/b/c///a//..aa/ /b/c/a/..aa
+/b/c///a//..a.a /b/c/a/..a.a
+/b/c///a//..a.. /b/c/a/..a..
+/b/c///a//..a./ /b/c/a/..a.
+/b/c///a//..a/a /b/c/a/..a/a
+/b/c///a//..a/. /b/c/a/..a
+/b/c///a//..a// /b/c/a/..a
+/b/c///a//...aa /b/c/a/...aa
+/b/c///a//...a. /b/c/a/...a.
+/b/c///a//...a/ /b/c/a/...a
+/b/c///a//....a /b/c/a/....a
+/b/c///a//..... /b/c/a/.....
+/b/c///a//..../ /b/c/a/....
+/b/c///a//.../a /b/c/a/.../a
+/b/c///a//.../. /b/c/a/...
+/b/c///a//...// /b/c/a/...
+/b/c///a//../aa /b/c/aa
+/b/c///a//../a. /b/c/a.
+/b/c///a//../a/ /b/c/a
+/b/c///a//../.a /b/c/.a
+/b/c///a//../.. /b
+/b/c///a//.././ /b/c
+/b/c///a//..//a /b/c/a
+/b/c///a//..//. /b/c
+/b/c///a//../// /b/c
+/b/c///a//./aaa /b/c/a/aaa
+/b/c///a//./aa. /b/c/a/aa.
+/b/c///a//./aa/ /b/c/a/aa
+/b/c///a//./a.a /b/c/a/a.a
+/b/c///a//./a.. /b/c/a/a..
+/b/c///a//./a./ /b/c/a/a.
+/b/c///a//./a/a /b/c/a/a/a
+/b/c///a//./a/. /b/c/a/a
+/b/c///a//./a// /b/c/a/a
+/b/c///a//./.aa /b/c/a/.aa
+/b/c///a//./.a. /b/c/a/.a.
+/b/c///a//./.a/ /b/c/a/.a
+/b/c///a//./..a /b/c/a/..a
+/b/c///a//./... /b/c/a/...
+/b/c///a//./../ /b/c
+/b/c///a//././a /b/c/a/a
+/b/c///a//././. /b/c/a
+/b/c///a//./.// /b/c/a
+/b/c///a//.//aa /b/c/a/aa
+/b/c///a//.//a. /b/c/a/a.
+/b/c///a//.//a/ /b/c/a/a
+/b/c///a//.//.a /b/c/a/.a
+/b/c///a//.//.. /b/c
+/b/c///a//.//./ /b/c/a
+/b/c///a//.///a /b/c/a/a
+/b/c///a//.///. /b/c/a
+/b/c///a//.//// /b/c/a
+/b/c///a///aaaa /b/c/a/aaaa
+/b/c///a///aaa. /b/c/a/aaa.
+/b/c///a///aaa/ /b/c/a/aaa
+/b/c///a///aa.a /b/c/a/aa.a
+/b/c///a///aa.. /b/c/a/aa..
+/b/c///a///aa./ /b/c/a/aa.
+/b/c///a///aa/a /b/c/a/aa/a
+/b/c///a///aa/. /b/c/a/aa
+/b/c///a///aa// /b/c/a/aa
+/b/c///a///a.aa /b/c/a/a.aa
+/b/c///a///a.a. /b/c/a/a.a.
+/b/c///a///a.a/ /b/c/a/a.a
+/b/c///a///a..a /b/c/a/a..a
+/b/c///a///a... /b/c/a/a...
+/b/c///a///a../ /b/c/a/a..
+/b/c///a///a./a /b/c/a/a./a
+/b/c///a///a./. /b/c/a/a.
+/b/c///a///a.// /b/c/a/a.
+/b/c///a///a/aa /b/c/a/a/aa
+/b/c///a///a/a. /b/c/a/a/a.
+/b/c///a///a/a/ /b/c/a/a/a
+/b/c///a///a/.a /b/c/a/a/.a
+/b/c///a///a/.. /b/c/a
+/b/c///a///a/./ /b/c/a/a
+/b/c///a///a//a /b/c/a/a/a
+/b/c///a///a//. /b/c/a/a
+/b/c///a///a/// /b/c/a/a
+/b/c///a///.aaa /b/c/a/.aaa
+/b/c///a///.aa. /b/c/a/.aa.
+/b/c///a///.aa/ /b/c/a/.aa
+/b/c///a///.a.a /b/c/a/.a.a
+/b/c///a///.a.. /b/c/a/.a..
+/b/c///a///.a./ /b/c/a/.a.
+/b/c///a///.a/a /b/c/a/.a/a
+/b/c///a///.a/. /b/c/a/.a
+/b/c///a///.a// /b/c/a/.a
+/b/c///a///..aa /b/c/a/..aa
+/b/c///a///..a. /b/c/a/..a.
+/b/c///a///..a/ /b/c/a/..a
+/b/c///a///...a /b/c/a/...a
+/b/c///a///.... /b/c/a/....
+/b/c///a///.../ /b/c/a/...
+/b/c///a///../a /b/c/a
+/b/c///a///../. /b/c
+/b/c///a///..// /b/c
+/b/c///a///./aa /b/c/a/aa
+/b/c///a///./a. /b/c/a/a.
+/b/c///a///./a/ /b/c/a/a
+/b/c///a///./.a /b/c/a/.a
+/b/c///a///./.. /b/c
+/b/c///a///././ /b/c/a
+/b/c///a///.//a /b/c/a/a
+/b/c///a///.//. /b/c/a
+/b/c///a///./// /b/c/a
+/b/c///a////aaa /b/c/a/aaa
+/b/c///a////aa. /b/c/a/aa.
+/b/c///a////aa/ /b/c/a/aa
+/b/c///a////a.a /b/c/a/a.a
+/b/c///a////a.. /b/c/a/a..
+/b/c///a////a./ /b/c/a/a.
+/b/c///a////a/a /b/c/a/a/a
+/b/c///a////a/. /b/c/a/a
+/b/c///a////a// /b/c/a/a
+/b/c///a////.aa /b/c/a/.aa
+/b/c///a////.a. /b/c/a/.a.
+/b/c///a////.a/ /b/c/a/.a
+/b/c///a////..a /b/c/a/..a
+/b/c///a////... /b/c/a/...
+/b/c///a////../ /b/c
+/b/c///a////./a /b/c/a/a
+/b/c///a////./. /b/c/a
+/b/c///a////.// /b/c/a
+/b/c///a/////aa /b/c/a/aa
+/b/c///a/////a. /b/c/a/a.
+/b/c///a/////a/ /b/c/a/a
+/b/c///a/////.a /b/c/a/.a
+/b/c///a/////.. /b/c
+/b/c///a/////./ /b/c/a
+/b/c///a//////a /b/c/a/a
+/b/c///a//////. /b/c/a
+/b/c///a/////// /b/c/a
+/b/c///.aaaaaaa /b/c/.aaaaaaa
+/b/c///.aaaaaa. /b/c/.aaaaaa.
+/b/c///.aaaaaa/ /b/c/.aaaaaa
+/b/c///.aaaaa.a /b/c/.aaaaa.a
+/b/c///.aaaaa.. /b/c/.aaaaa..
+/b/c///.aaaaa./ /b/c/.aaaaa.
+/b/c///.aaaaa/a /b/c/.aaaaa/a
+/b/c///.aaaaa/. /b/c/.aaaaa
+/b/c///.aaaaa// /b/c/.aaaaa
+/b/c///.aaaa.aa /b/c/.aaaa.aa
+/b/c///.aaaa.a. /b/c/.aaaa.a.
+/b/c///.aaaa.a/ /b/c/.aaaa.a
+/b/c///.aaaa..a /b/c/.aaaa..a
+/b/c///.aaaa... /b/c/.aaaa...
+/b/c///.aaaa../ /b/c/.aaaa..
+/b/c///.aaaa./a /b/c/.aaaa./a
+/b/c///.aaaa./. /b/c/.aaaa.
+/b/c///.aaaa.// /b/c/.aaaa.
+/b/c///.aaaa/aa /b/c/.aaaa/aa
+/b/c///.aaaa/a. /b/c/.aaaa/a.
+/b/c///.aaaa/a/ /b/c/.aaaa/a
+/b/c///.aaaa/.a /b/c/.aaaa/.a
+/b/c///.aaaa/.. /b/c
+/b/c///.aaaa/./ /b/c/.aaaa
+/b/c///.aaaa//a /b/c/.aaaa/a
+/b/c///.aaaa//. /b/c/.aaaa
+/b/c///.aaaa/// /b/c/.aaaa
+/b/c///.aaa.aaa /b/c/.aaa.aaa
+/b/c///.aaa.aa. /b/c/.aaa.aa.
+/b/c///.aaa.aa/ /b/c/.aaa.aa
+/b/c///.aaa.a.a /b/c/.aaa.a.a
+/b/c///.aaa.a.. /b/c/.aaa.a..
+/b/c///.aaa.a./ /b/c/.aaa.a.
+/b/c///.aaa.a/a /b/c/.aaa.a/a
+/b/c///.aaa.a/. /b/c/.aaa.a
+/b/c///.aaa.a// /b/c/.aaa.a
+/b/c///.aaa..aa /b/c/.aaa..aa
+/b/c///.aaa..a. /b/c/.aaa..a.
+/b/c///.aaa..a/ /b/c/.aaa..a
+/b/c///.aaa...a /b/c/.aaa...a
+/b/c///.aaa.... /b/c/.aaa....
+/b/c///.aaa.../ /b/c/.aaa...
+/b/c///.aaa../a /b/c/.aaa../a
+/b/c///.aaa../. /b/c/.aaa..
+/b/c///.aaa..// /b/c/.aaa..
+/b/c///.aaa./aa /b/c/.aaa./aa
+/b/c///.aaa./a. /b/c/.aaa./a.
+/b/c///.aaa./a/ /b/c/.aaa./a
+/b/c///.aaa./.a /b/c/.aaa./.a
+/b/c///.aaa./.. /b/c
+/b/c///.aaa././ /b/c/.aaa.
+/b/c///.aaa.//a /b/c/.aaa./a
+/b/c///.aaa.//. /b/c/.aaa.
+/b/c///.aaa./// /b/c/.aaa.
+/b/c///.aaa/aaa /b/c/.aaa/aaa
+/b/c///.aaa/aa. /b/c/.aaa/aa.
+/b/c///.aaa/aa/ /b/c/.aaa/aa
+/b/c///.aaa/a.a /b/c/.aaa/a.a
+/b/c///.aaa/a.. /b/c/.aaa/a..
+/b/c///.aaa/a./ /b/c/.aaa/a.
+/b/c///.aaa/a/a /b/c/.aaa/a/a
+/b/c///.aaa/a/. /b/c/.aaa/a
+/b/c///.aaa/a// /b/c/.aaa/a
+/b/c///.aaa/.aa /b/c/.aaa/.aa
+/b/c///.aaa/.a. /b/c/.aaa/.a.
+/b/c///.aaa/.a/ /b/c/.aaa/.a
+/b/c///.aaa/..a /b/c/.aaa/..a
+/b/c///.aaa/... /b/c/.aaa/...
+/b/c///.aaa/../ /b/c
+/b/c///.aaa/./a /b/c/.aaa/a
+/b/c///.aaa/./. /b/c/.aaa
+/b/c///.aaa/.// /b/c/.aaa
+/b/c///.aaa//aa /b/c/.aaa/aa
+/b/c///.aaa//a. /b/c/.aaa/a.
+/b/c///.aaa//a/ /b/c/.aaa/a
+/b/c///.aaa//.a /b/c/.aaa/.a
+/b/c///.aaa//.. /b/c
+/b/c///.aaa//./ /b/c/.aaa
+/b/c///.aaa///a /b/c/.aaa/a
+/b/c///.aaa///. /b/c/.aaa
+/b/c///.aaa//// /b/c/.aaa
+/b/c///.aa.aaaa /b/c/.aa.aaaa
+/b/c///.aa.aaa. /b/c/.aa.aaa.
+/b/c///.aa.aaa/ /b/c/.aa.aaa
+/b/c///.aa.aa.a /b/c/.aa.aa.a
+/b/c///.aa.aa.. /b/c/.aa.aa..
+/b/c///.aa.aa./ /b/c/.aa.aa.
+/b/c///.aa.aa/a /b/c/.aa.aa/a
+/b/c///.aa.aa/. /b/c/.aa.aa
+/b/c///.aa.aa// /b/c/.aa.aa
+/b/c///.aa.a.aa /b/c/.aa.a.aa
+/b/c///.aa.a.a. /b/c/.aa.a.a.
+/b/c///.aa.a.a/ /b/c/.aa.a.a
+/b/c///.aa.a..a /b/c/.aa.a..a
+/b/c///.aa.a... /b/c/.aa.a...
+/b/c///.aa.a../ /b/c/.aa.a..
+/b/c///.aa.a./a /b/c/.aa.a./a
+/b/c///.aa.a./. /b/c/.aa.a.
+/b/c///.aa.a.// /b/c/.aa.a.
+/b/c///.aa.a/aa /b/c/.aa.a/aa
+/b/c///.aa.a/a. /b/c/.aa.a/a.
+/b/c///.aa.a/a/ /b/c/.aa.a/a
+/b/c///.aa.a/.a /b/c/.aa.a/.a
+/b/c///.aa.a/.. /b/c
+/b/c///.aa.a/./ /b/c/.aa.a
+/b/c///.aa.a//a /b/c/.aa.a/a
+/b/c///.aa.a//. /b/c/.aa.a
+/b/c///.aa.a/// /b/c/.aa.a
+/b/c///.aa..aaa /b/c/.aa..aaa
+/b/c///.aa..aa. /b/c/.aa..aa.
+/b/c///.aa..aa/ /b/c/.aa..aa
+/b/c///.aa..a.a /b/c/.aa..a.a
+/b/c///.aa..a.. /b/c/.aa..a..
+/b/c///.aa..a./ /b/c/.aa..a.
+/b/c///.aa..a/a /b/c/.aa..a/a
+/b/c///.aa..a/. /b/c/.aa..a
+/b/c///.aa..a// /b/c/.aa..a
+/b/c///.aa...aa /b/c/.aa...aa
+/b/c///.aa...a. /b/c/.aa...a.
+/b/c///.aa...a/ /b/c/.aa...a
+/b/c///.aa....a /b/c/.aa....a
+/b/c///.aa..... /b/c/.aa.....
+/b/c///.aa..../ /b/c/.aa....
+/b/c///.aa.../a /b/c/.aa.../a
+/b/c///.aa.../. /b/c/.aa...
+/b/c///.aa...// /b/c/.aa...
+/b/c///.aa../aa /b/c/.aa../aa
+/b/c///.aa../a. /b/c/.aa../a.
+/b/c///.aa../a/ /b/c/.aa../a
+/b/c///.aa../.a /b/c/.aa../.a
+/b/c///.aa../.. /b/c
+/b/c///.aa.././ /b/c/.aa..
+/b/c///.aa..//a /b/c/.aa../a
+/b/c///.aa..//. /b/c/.aa..
+/b/c///.aa../// /b/c/.aa..
+/b/c///.aa./aaa /b/c/.aa./aaa
+/b/c///.aa./aa. /b/c/.aa./aa.
+/b/c///.aa./aa/ /b/c/.aa./aa
+/b/c///.aa./a.a /b/c/.aa./a.a
+/b/c///.aa./a.. /b/c/.aa./a..
+/b/c///.aa./a./ /b/c/.aa./a.
+/b/c///.aa./a/a /b/c/.aa./a/a
+/b/c///.aa./a/. /b/c/.aa./a
+/b/c///.aa./a// /b/c/.aa./a
+/b/c///.aa./.aa /b/c/.aa./.aa
+/b/c///.aa./.a. /b/c/.aa./.a.
+/b/c///.aa./.a/ /b/c/.aa./.a
+/b/c///.aa./..a /b/c/.aa./..a
+/b/c///.aa./... /b/c/.aa./...
+/b/c///.aa./../ /b/c
+/b/c///.aa././a /b/c/.aa./a
+/b/c///.aa././. /b/c/.aa.
+/b/c///.aa./.// /b/c/.aa.
+/b/c///.aa.//aa /b/c/.aa./aa
+/b/c///.aa.//a. /b/c/.aa./a.
+/b/c///.aa.//a/ /b/c/.aa./a
+/b/c///.aa.//.a /b/c/.aa./.a
+/b/c///.aa.//.. /b/c
+/b/c///.aa.//./ /b/c/.aa.
+/b/c///.aa.///a /b/c/.aa./a
+/b/c///.aa.///. /b/c/.aa.
+/b/c///.aa.//// /b/c/.aa.
+/b/c///.aa/aaaa /b/c/.aa/aaaa
+/b/c///.aa/aaa. /b/c/.aa/aaa.
+/b/c///.aa/aaa/ /b/c/.aa/aaa
+/b/c///.aa/aa.a /b/c/.aa/aa.a
+/b/c///.aa/aa.. /b/c/.aa/aa..
+/b/c///.aa/aa./ /b/c/.aa/aa.
+/b/c///.aa/aa/a /b/c/.aa/aa/a
+/b/c///.aa/aa/. /b/c/.aa/aa
+/b/c///.aa/aa// /b/c/.aa/aa
+/b/c///.aa/a.aa /b/c/.aa/a.aa
+/b/c///.aa/a.a. /b/c/.aa/a.a.
+/b/c///.aa/a.a/ /b/c/.aa/a.a
+/b/c///.aa/a..a /b/c/.aa/a..a
+/b/c///.aa/a... /b/c/.aa/a...
+/b/c///.aa/a../ /b/c/.aa/a..
+/b/c///.aa/a./a /b/c/.aa/a./a
+/b/c///.aa/a./. /b/c/.aa/a.
+/b/c///.aa/a.// /b/c/.aa/a.
+/b/c///.aa/a/aa /b/c/.aa/a/aa
+/b/c///.aa/a/a. /b/c/.aa/a/a.
+/b/c///.aa/a/a/ /b/c/.aa/a/a
+/b/c///.aa/a/.a /b/c/.aa/a/.a
+/b/c///.aa/a/.. /b/c/.aa
+/b/c///.aa/a/./ /b/c/.aa/a
+/b/c///.aa/a//a /b/c/.aa/a/a
+/b/c///.aa/a//. /b/c/.aa/a
+/b/c///.aa/a/// /b/c/.aa/a
+/b/c///.aa/.aaa /b/c/.aa/.aaa
+/b/c///.aa/.aa. /b/c/.aa/.aa.
+/b/c///.aa/.aa/ /b/c/.aa/.aa
+/b/c///.aa/.a.a /b/c/.aa/.a.a
+/b/c///.aa/.a.. /b/c/.aa/.a..
+/b/c///.aa/.a./ /b/c/.aa/.a.
+/b/c///.aa/.a/a /b/c/.aa/.a/a
+/b/c///.aa/.a/. /b/c/.aa/.a
+/b/c///.aa/.a// /b/c/.aa/.a
+/b/c///.aa/..aa /b/c/.aa/..aa
+/b/c///.aa/..a. /b/c/.aa/..a.
+/b/c///.aa/..a/ /b/c/.aa/..a
+/b/c///.aa/...a /b/c/.aa/...a
+/b/c///.aa/.... /b/c/.aa/....
+/b/c///.aa/.../ /b/c/.aa/...
+/b/c///.aa/../a /b/c/a
+/b/c///.aa/../. /b/c
+/b/c///.aa/..// /b/c
+/b/c///.aa/./aa /b/c/.aa/aa
+/b/c///.aa/./a. /b/c/.aa/a.
+/b/c///.aa/./a/ /b/c/.aa/a
+/b/c///.aa/./.a /b/c/.aa/.a
+/b/c///.aa/./.. /b/c
+/b/c///.aa/././ /b/c/.aa
+/b/c///.aa/.//a /b/c/.aa/a
+/b/c///.aa/.//. /b/c/.aa
+/b/c///.aa/./// /b/c/.aa
+/b/c///.aa//aaa /b/c/.aa/aaa
+/b/c///.aa//aa. /b/c/.aa/aa.
+/b/c///.aa//aa/ /b/c/.aa/aa
+/b/c///.aa//a.a /b/c/.aa/a.a
+/b/c///.aa//a.. /b/c/.aa/a..
+/b/c///.aa//a./ /b/c/.aa/a.
+/b/c///.aa//a/a /b/c/.aa/a/a
+/b/c///.aa//a/. /b/c/.aa/a
+/b/c///.aa//a// /b/c/.aa/a
+/b/c///.aa//.aa /b/c/.aa/.aa
+/b/c///.aa//.a. /b/c/.aa/.a.
+/b/c///.aa//.a/ /b/c/.aa/.a
+/b/c///.aa//..a /b/c/.aa/..a
+/b/c///.aa//... /b/c/.aa/...
+/b/c///.aa//../ /b/c
+/b/c///.aa//./a /b/c/.aa/a
+/b/c///.aa//./. /b/c/.aa
+/b/c///.aa//.// /b/c/.aa
+/b/c///.aa///aa /b/c/.aa/aa
+/b/c///.aa///a. /b/c/.aa/a.
+/b/c///.aa///a/ /b/c/.aa/a
+/b/c///.aa///.a /b/c/.aa/.a
+/b/c///.aa///.. /b/c
+/b/c///.aa///./ /b/c/.aa
+/b/c///.aa////a /b/c/.aa/a
+/b/c///.aa////. /b/c/.aa
+/b/c///.aa///// /b/c/.aa
+/b/c///.a.aaaaa /b/c/.a.aaaaa
+/b/c///.a.aaaa. /b/c/.a.aaaa.
+/b/c///.a.aaaa/ /b/c/.a.aaaa
+/b/c///.a.aaa.a /b/c/.a.aaa.a
+/b/c///.a.aaa.. /b/c/.a.aaa..
+/b/c///.a.aaa./ /b/c/.a.aaa.
+/b/c///.a.aaa/a /b/c/.a.aaa/a
+/b/c///.a.aaa/. /b/c/.a.aaa
+/b/c///.a.aaa// /b/c/.a.aaa
+/b/c///.a.aa.aa /b/c/.a.aa.aa
+/b/c///.a.aa.a. /b/c/.a.aa.a.
+/b/c///.a.aa.a/ /b/c/.a.aa.a
+/b/c///.a.aa..a /b/c/.a.aa..a
+/b/c///.a.aa... /b/c/.a.aa...
+/b/c///.a.aa../ /b/c/.a.aa..
+/b/c///.a.aa./a /b/c/.a.aa./a
+/b/c///.a.aa./. /b/c/.a.aa.
+/b/c///.a.aa.// /b/c/.a.aa.
+/b/c///.a.aa/aa /b/c/.a.aa/aa
+/b/c///.a.aa/a. /b/c/.a.aa/a.
+/b/c///.a.aa/a/ /b/c/.a.aa/a
+/b/c///.a.aa/.a /b/c/.a.aa/.a
+/b/c///.a.aa/.. /b/c
+/b/c///.a.aa/./ /b/c/.a.aa
+/b/c///.a.aa//a /b/c/.a.aa/a
+/b/c///.a.aa//. /b/c/.a.aa
+/b/c///.a.aa/// /b/c/.a.aa
+/b/c///.a.a.aaa /b/c/.a.a.aaa
+/b/c///.a.a.aa. /b/c/.a.a.aa.
+/b/c///.a.a.aa/ /b/c/.a.a.aa
+/b/c///.a.a.a.a /b/c/.a.a.a.a
+/b/c///.a.a.a.. /b/c/.a.a.a..
+/b/c///.a.a.a./ /b/c/.a.a.a.
+/b/c///.a.a.a/a /b/c/.a.a.a/a
+/b/c///.a.a.a/. /b/c/.a.a.a
+/b/c///.a.a.a// /b/c/.a.a.a
+/b/c///.a.a..aa /b/c/.a.a..aa
+/b/c///.a.a..a. /b/c/.a.a..a.
+/b/c///.a.a..a/ /b/c/.a.a..a
+/b/c///.a.a...a /b/c/.a.a...a
+/b/c///.a.a.... /b/c/.a.a....
+/b/c///.a.a.../ /b/c/.a.a...
+/b/c///.a.a../a /b/c/.a.a../a
+/b/c///.a.a../. /b/c/.a.a..
+/b/c///.a.a..// /b/c/.a.a..
+/b/c///.a.a./aa /b/c/.a.a./aa
+/b/c///.a.a./a. /b/c/.a.a./a.
+/b/c///.a.a./a/ /b/c/.a.a./a
+/b/c///.a.a./.a /b/c/.a.a./.a
+/b/c///.a.a./.. /b/c
+/b/c///.a.a././ /b/c/.a.a.
+/b/c///.a.a.//a /b/c/.a.a./a
+/b/c///.a.a.//. /b/c/.a.a.
+/b/c///.a.a./// /b/c/.a.a.
+/b/c///.a.a/aaa /b/c/.a.a/aaa
+/b/c///.a.a/aa. /b/c/.a.a/aa.
+/b/c///.a.a/aa/ /b/c/.a.a/aa
+/b/c///.a.a/a.a /b/c/.a.a/a.a
+/b/c///.a.a/a.. /b/c/.a.a/a..
+/b/c///.a.a/a./ /b/c/.a.a/a.
+/b/c///.a.a/a/a /b/c/.a.a/a/a
+/b/c///.a.a/a/. /b/c/.a.a/a
+/b/c///.a.a/a// /b/c/.a.a/a
+/b/c///.a.a/.aa /b/c/.a.a/.aa
+/b/c///.a.a/.a. /b/c/.a.a/.a.
+/b/c///.a.a/.a/ /b/c/.a.a/.a
+/b/c///.a.a/..a /b/c/.a.a/..a
+/b/c///.a.a/... /b/c/.a.a/...
+/b/c///.a.a/../ /b/c
+/b/c///.a.a/./a /b/c/.a.a/a
+/b/c///.a.a/./. /b/c/.a.a
+/b/c///.a.a/.// /b/c/.a.a
+/b/c///.a.a//aa /b/c/.a.a/aa
+/b/c///.a.a//a. /b/c/.a.a/a.
+/b/c///.a.a//a/ /b/c/.a.a/a
+/b/c///.a.a//.a /b/c/.a.a/.a
+/b/c///.a.a//.. /b/c
+/b/c///.a.a//./ /b/c/.a.a
+/b/c///.a.a///a /b/c/.a.a/a
+/b/c///.a.a///. /b/c/.a.a
+/b/c///.a.a//// /b/c/.a.a
+/b/c///.a..aaaa /b/c/.a..aaaa
+/b/c///.a..aaa. /b/c/.a..aaa.
+/b/c///.a..aaa/ /b/c/.a..aaa
+/b/c///.a..aa.a /b/c/.a..aa.a
+/b/c///.a..aa.. /b/c/.a..aa..
+/b/c///.a..aa./ /b/c/.a..aa.
+/b/c///.a..aa/a /b/c/.a..aa/a
+/b/c///.a..aa/. /b/c/.a..aa
+/b/c///.a..aa// /b/c/.a..aa
+/b/c///.a..a.aa /b/c/.a..a.aa
+/b/c///.a..a.a. /b/c/.a..a.a.
+/b/c///.a..a.a/ /b/c/.a..a.a
+/b/c///.a..a..a /b/c/.a..a..a
+/b/c///.a..a... /b/c/.a..a...
+/b/c///.a..a../ /b/c/.a..a..
+/b/c///.a..a./a /b/c/.a..a./a
+/b/c///.a..a./. /b/c/.a..a.
+/b/c///.a..a.// /b/c/.a..a.
+/b/c///.a..a/aa /b/c/.a..a/aa
+/b/c///.a..a/a. /b/c/.a..a/a.
+/b/c///.a..a/a/ /b/c/.a..a/a
+/b/c///.a..a/.a /b/c/.a..a/.a
+/b/c///.a..a/.. /b/c
+/b/c///.a..a/./ /b/c/.a..a
+/b/c///.a..a//a /b/c/.a..a/a
+/b/c///.a..a//. /b/c/.a..a
+/b/c///.a..a/// /b/c/.a..a
+/b/c///.a...aaa /b/c/.a...aaa
+/b/c///.a...aa. /b/c/.a...aa.
+/b/c///.a...aa/ /b/c/.a...aa
+/b/c///.a...a.a /b/c/.a...a.a
+/b/c///.a...a.. /b/c/.a...a..
+/b/c///.a...a./ /b/c/.a...a.
+/b/c///.a...a/a /b/c/.a...a/a
+/b/c///.a...a/. /b/c/.a...a
+/b/c///.a...a// /b/c/.a...a
+/b/c///.a....aa /b/c/.a....aa
+/b/c///.a....a. /b/c/.a....a.
+/b/c///.a....a/ /b/c/.a....a
+/b/c///.a.....a /b/c/.a.....a
+/b/c///.a...... /b/c/.a......
+/b/c///.a...../ /b/c/.a.....
+/b/c///.a..../a /b/c/.a..../a
+/b/c///.a..../. /b/c/.a....
+/b/c///.a....// /b/c/.a....
+/b/c///.a.../aa /b/c/.a.../aa
+/b/c///.a.../a. /b/c/.a.../a.
+/b/c///.a.../a/ /b/c/.a.../a
+/b/c///.a.../.a /b/c/.a.../.a
+/b/c///.a.../.. /b/c
+/b/c///.a..././ /b/c/.a...
+/b/c///.a...//a /b/c/.a.../a
+/b/c///.a...//. /b/c/.a...
+/b/c///.a.../// /b/c/.a...
+/b/c///.a../aaa /b/c/.a../aaa
+/b/c///.a../aa. /b/c/.a../aa.
+/b/c///.a../aa/ /b/c/.a../aa
+/b/c///.a../a.a /b/c/.a../a.a
+/b/c///.a../a.. /b/c/.a../a..
+/b/c///.a../a./ /b/c/.a../a.
+/b/c///.a../a/a /b/c/.a../a/a
+/b/c///.a../a/. /b/c/.a../a
+/b/c///.a../a// /b/c/.a../a
+/b/c///.a../.aa /b/c/.a../.aa
+/b/c///.a../.a. /b/c/.a../.a.
+/b/c///.a../.a/ /b/c/.a../.a
+/b/c///.a../..a /b/c/.a../..a
+/b/c///.a../... /b/c/.a../...
+/b/c///.a../../ /b/c
+/b/c///.a.././a /b/c/.a../a
+/b/c///.a.././. /b/c/.a..
+/b/c///.a../.// /b/c/.a..
+/b/c///.a..//aa /b/c/.a../aa
+/b/c///.a..//a. /b/c/.a../a.
+/b/c///.a..//a/ /b/c/.a../a
+/b/c///.a..//.a /b/c/.a../.a
+/b/c///.a..//.. /b/c
+/b/c///.a..//./ /b/c/.a..
+/b/c///.a..///a /b/c/.a../a
+/b/c///.a..///. /b/c/.a..
+/b/c///.a..//// /b/c/.a..
+/b/c///.a./aaaa /b/c/.a./aaaa
+/b/c///.a./aaa. /b/c/.a./aaa.
+/b/c///.a./aaa/ /b/c/.a./aaa
+/b/c///.a./aa.a /b/c/.a./aa.a
+/b/c///.a./aa.. /b/c/.a./aa..
+/b/c///.a./aa./ /b/c/.a./aa.
+/b/c///.a./aa/a /b/c/.a./aa/a
+/b/c///.a./aa/. /b/c/.a./aa
+/b/c///.a./aa// /b/c/.a./aa
+/b/c///.a./a.aa /b/c/.a./a.aa
+/b/c///.a./a.a. /b/c/.a./a.a.
+/b/c///.a./a.a/ /b/c/.a./a.a
+/b/c///.a./a..a /b/c/.a./a..a
+/b/c///.a./a... /b/c/.a./a...
+/b/c///.a./a../ /b/c/.a./a..
+/b/c///.a./a./a /b/c/.a./a./a
+/b/c///.a./a./. /b/c/.a./a.
+/b/c///.a./a.// /b/c/.a./a.
+/b/c///.a./a/aa /b/c/.a./a/aa
+/b/c///.a./a/a. /b/c/.a./a/a.
+/b/c///.a./a/a/ /b/c/.a./a/a
+/b/c///.a./a/.a /b/c/.a./a/.a
+/b/c///.a./a/.. /b/c/.a.
+/b/c///.a./a/./ /b/c/.a./a
+/b/c///.a./a//a /b/c/.a./a/a
+/b/c///.a./a//. /b/c/.a./a
+/b/c///.a./a/// /b/c/.a./a
+/b/c///.a./.aaa /b/c/.a./.aaa
+/b/c///.a./.aa. /b/c/.a./.aa.
+/b/c///.a./.aa/ /b/c/.a./.aa
+/b/c///.a./.a.a /b/c/.a./.a.a
+/b/c///.a./.a.. /b/c/.a./.a..
+/b/c///.a./.a./ /b/c/.a./.a.
+/b/c///.a./.a/a /b/c/.a./.a/a
+/b/c///.a./.a/. /b/c/.a./.a
+/b/c///.a./.a// /b/c/.a./.a
+/b/c///.a./..aa /b/c/.a./..aa
+/b/c///.a./..a. /b/c/.a./..a.
+/b/c///.a./..a/ /b/c/.a./..a
+/b/c///.a./...a /b/c/.a./...a
+/b/c///.a./.... /b/c/.a./....
+/b/c///.a./.../ /b/c/.a./...
+/b/c///.a./../a /b/c/a
+/b/c///.a./../. /b/c
+/b/c///.a./..// /b/c
+/b/c///.a././aa /b/c/.a./aa
+/b/c///.a././a. /b/c/.a./a.
+/b/c///.a././a/ /b/c/.a./a
+/b/c///.a././.a /b/c/.a./.a
+/b/c///.a././.. /b/c
+/b/c///.a./././ /b/c/.a.
+/b/c///.a././/a /b/c/.a./a
+/b/c///.a././/. /b/c/.a.
+/b/c///.a././// /b/c/.a.
+/b/c///.a.//aaa /b/c/.a./aaa
+/b/c///.a.//aa. /b/c/.a./aa.
+/b/c///.a.//aa/ /b/c/.a./aa
+/b/c///.a.//a.a /b/c/.a./a.a
+/b/c///.a.//a.. /b/c/.a./a..
+/b/c///.a.//a./ /b/c/.a./a.
+/b/c///.a.//a/a /b/c/.a./a/a
+/b/c///.a.//a/. /b/c/.a./a
+/b/c///.a.//a// /b/c/.a./a
+/b/c///.a.//.aa /b/c/.a./.aa
+/b/c///.a.//.a. /b/c/.a./.a.
+/b/c///.a.//.a/ /b/c/.a./.a
+/b/c///.a.//..a /b/c/.a./..a
+/b/c///.a.//... /b/c/.a./...
+/b/c///.a.//../ /b/c
+/b/c///.a.//./a /b/c/.a./a
+/b/c///.a.//./. /b/c/.a.
+/b/c///.a.//.// /b/c/.a.
+/b/c///.a.///aa /b/c/.a./aa
+/b/c///.a.///a. /b/c/.a./a.
+/b/c///.a.///a/ /b/c/.a./a
+/b/c///.a.///.a /b/c/.a./.a
+/b/c///.a.///.. /b/c
+/b/c///.a.///./ /b/c/.a.
+/b/c///.a.////a /b/c/.a./a
+/b/c///.a.////. /b/c/.a.
+/b/c///.a.///// /b/c/.a.
+/b/c///.a/aaaaa /b/c/.a/aaaaa
+/b/c///.a/aaaa. /b/c/.a/aaaa.
+/b/c///.a/aaaa/ /b/c/.a/aaaa
+/b/c///.a/aaa.a /b/c/.a/aaa.a
+/b/c///.a/aaa.. /b/c/.a/aaa..
+/b/c///.a/aaa./ /b/c/.a/aaa.
+/b/c///.a/aaa/a /b/c/.a/aaa/a
+/b/c///.a/aaa/. /b/c/.a/aaa
+/b/c///.a/aaa// /b/c/.a/aaa
+/b/c///.a/aa.aa /b/c/.a/aa.aa
+/b/c///.a/aa.a. /b/c/.a/aa.a.
+/b/c///.a/aa.a/ /b/c/.a/aa.a
+/b/c///.a/aa..a /b/c/.a/aa..a
+/b/c///.a/aa... /b/c/.a/aa...
+/b/c///.a/aa../ /b/c/.a/aa..
+/b/c///.a/aa./a /b/c/.a/aa./a
+/b/c///.a/aa./. /b/c/.a/aa.
+/b/c///.a/aa.// /b/c/.a/aa.
+/b/c///.a/aa/aa /b/c/.a/aa/aa
+/b/c///.a/aa/a. /b/c/.a/aa/a.
+/b/c///.a/aa/a/ /b/c/.a/aa/a
+/b/c///.a/aa/.a /b/c/.a/aa/.a
+/b/c///.a/aa/.. /b/c/.a
+/b/c///.a/aa/./ /b/c/.a/aa
+/b/c///.a/aa//a /b/c/.a/aa/a
+/b/c///.a/aa//. /b/c/.a/aa
+/b/c///.a/aa/// /b/c/.a/aa
+/b/c///.a/a.aaa /b/c/.a/a.aaa
+/b/c///.a/a.aa. /b/c/.a/a.aa.
+/b/c///.a/a.aa/ /b/c/.a/a.aa
+/b/c///.a/a.a.a /b/c/.a/a.a.a
+/b/c///.a/a.a.. /b/c/.a/a.a..
+/b/c///.a/a.a./ /b/c/.a/a.a.
+/b/c///.a/a.a/a /b/c/.a/a.a/a
+/b/c///.a/a.a/. /b/c/.a/a.a
+/b/c///.a/a.a// /b/c/.a/a.a
+/b/c///.a/a..aa /b/c/.a/a..aa
+/b/c///.a/a..a. /b/c/.a/a..a.
+/b/c///.a/a..a/ /b/c/.a/a..a
+/b/c///.a/a...a /b/c/.a/a...a
+/b/c///.a/a.... /b/c/.a/a....
+/b/c///.a/a.../ /b/c/.a/a...
+/b/c///.a/a../a /b/c/.a/a../a
+/b/c///.a/a../. /b/c/.a/a..
+/b/c///.a/a..// /b/c/.a/a..
+/b/c///.a/a./aa /b/c/.a/a./aa
+/b/c///.a/a./a. /b/c/.a/a./a.
+/b/c///.a/a./a/ /b/c/.a/a./a
+/b/c///.a/a./.a /b/c/.a/a./.a
+/b/c///.a/a./.. /b/c/.a
+/b/c///.a/a././ /b/c/.a/a.
+/b/c///.a/a.//a /b/c/.a/a./a
+/b/c///.a/a.//. /b/c/.a/a.
+/b/c///.a/a./// /b/c/.a/a.
+/b/c///.a/a/aaa /b/c/.a/a/aaa
+/b/c///.a/a/aa. /b/c/.a/a/aa.
+/b/c///.a/a/aa/ /b/c/.a/a/aa
+/b/c///.a/a/a.a /b/c/.a/a/a.a
+/b/c///.a/a/a.. /b/c/.a/a/a..
+/b/c///.a/a/a./ /b/c/.a/a/a.
+/b/c///.a/a/a/a /b/c/.a/a/a/a
+/b/c///.a/a/a/. /b/c/.a/a/a
+/b/c///.a/a/a// /b/c/.a/a/a
+/b/c///.a/a/.aa /b/c/.a/a/.aa
+/b/c///.a/a/.a. /b/c/.a/a/.a.
+/b/c///.a/a/.a/ /b/c/.a/a/.a
+/b/c///.a/a/..a /b/c/.a/a/..a
+/b/c///.a/a/... /b/c/.a/a/...
+/b/c///.a/a/../ /b/c/.a
+/b/c///.a/a/./a /b/c/.a/a/a
+/b/c///.a/a/./. /b/c/.a/a
+/b/c///.a/a/.// /b/c/.a/a
+/b/c///.a/a//aa /b/c/.a/a/aa
+/b/c///.a/a//a. /b/c/.a/a/a.
+/b/c///.a/a//a/ /b/c/.a/a/a
+/b/c///.a/a//.a /b/c/.a/a/.a
+/b/c///.a/a//.. /b/c/.a
+/b/c///.a/a//./ /b/c/.a/a
+/b/c///.a/a///a /b/c/.a/a/a
+/b/c///.a/a///. /b/c/.a/a
+/b/c///.a/a//// /b/c/.a/a
+/b/c///.a/.aaaa /b/c/.a/.aaaa
+/b/c///.a/.aaa. /b/c/.a/.aaa.
+/b/c///.a/.aaa/ /b/c/.a/.aaa
+/b/c///.a/.aa.a /b/c/.a/.aa.a
+/b/c///.a/.aa.. /b/c/.a/.aa..
+/b/c///.a/.aa./ /b/c/.a/.aa.
+/b/c///.a/.aa/a /b/c/.a/.aa/a
+/b/c///.a/.aa/. /b/c/.a/.aa
+/b/c///.a/.aa// /b/c/.a/.aa
+/b/c///.a/.a.aa /b/c/.a/.a.aa
+/b/c///.a/.a.a. /b/c/.a/.a.a.
+/b/c///.a/.a.a/ /b/c/.a/.a.a
+/b/c///.a/.a..a /b/c/.a/.a..a
+/b/c///.a/.a... /b/c/.a/.a...
+/b/c///.a/.a../ /b/c/.a/.a..
+/b/c///.a/.a./a /b/c/.a/.a./a
+/b/c///.a/.a./. /b/c/.a/.a.
+/b/c///.a/.a.// /b/c/.a/.a.
+/b/c///.a/.a/aa /b/c/.a/.a/aa
+/b/c///.a/.a/a. /b/c/.a/.a/a.
+/b/c///.a/.a/a/ /b/c/.a/.a/a
+/b/c///.a/.a/.a /b/c/.a/.a/.a
+/b/c///.a/.a/.. /b/c/.a
+/b/c///.a/.a/./ /b/c/.a/.a
+/b/c///.a/.a//a /b/c/.a/.a/a
+/b/c///.a/.a//. /b/c/.a/.a
+/b/c///.a/.a/// /b/c/.a/.a
+/b/c///.a/..aaa /b/c/.a/..aaa
+/b/c///.a/..aa. /b/c/.a/..aa.
+/b/c///.a/..aa/ /b/c/.a/..aa
+/b/c///.a/..a.a /b/c/.a/..a.a
+/b/c///.a/..a.. /b/c/.a/..a..
+/b/c///.a/..a./ /b/c/.a/..a.
+/b/c///.a/..a/a /b/c/.a/..a/a
+/b/c///.a/..a/. /b/c/.a/..a
+/b/c///.a/..a// /b/c/.a/..a
+/b/c///.a/...aa /b/c/.a/...aa
+/b/c///.a/...a. /b/c/.a/...a.
+/b/c///.a/...a/ /b/c/.a/...a
+/b/c///.a/....a /b/c/.a/....a
+/b/c///.a/..... /b/c/.a/.....
+/b/c///.a/..../ /b/c/.a/....
+/b/c///.a/.../a /b/c/.a/.../a
+/b/c///.a/.../. /b/c/.a/...
+/b/c///.a/...// /b/c/.a/...
+/b/c///.a/../aa /b/c/aa
+/b/c///.a/../a. /b/c/a.
+/b/c///.a/../a/ /b/c/a
+/b/c///.a/../.a /b/c/.a
+/b/c///.a/../.. /b
+/b/c///.a/.././ /b/c
+/b/c///.a/..//a /b/c/a
+/b/c///.a/..//. /b/c
+/b/c///.a/../// /b/c
+/b/c///.a/./aaa /b/c/.a/aaa
+/b/c///.a/./aa. /b/c/.a/aa.
+/b/c///.a/./aa/ /b/c/.a/aa
+/b/c///.a/./a.a /b/c/.a/a.a
+/b/c///.a/./a.. /b/c/.a/a..
+/b/c///.a/./a./ /b/c/.a/a.
+/b/c///.a/./a/a /b/c/.a/a/a
+/b/c///.a/./a/. /b/c/.a/a
+/b/c///.a/./a// /b/c/.a/a
+/b/c///.a/./.aa /b/c/.a/.aa
+/b/c///.a/./.a. /b/c/.a/.a.
+/b/c///.a/./.a/ /b/c/.a/.a
+/b/c///.a/./..a /b/c/.a/..a
+/b/c///.a/./... /b/c/.a/...
+/b/c///.a/./../ /b/c
+/b/c///.a/././a /b/c/.a/a
+/b/c///.a/././. /b/c/.a
+/b/c///.a/./.// /b/c/.a
+/b/c///.a/.//aa /b/c/.a/aa
+/b/c///.a/.//a. /b/c/.a/a.
+/b/c///.a/.//a/ /b/c/.a/a
+/b/c///.a/.//.a /b/c/.a/.a
+/b/c///.a/.//.. /b/c
+/b/c///.a/.//./ /b/c/.a
+/b/c///.a/.///a /b/c/.a/a
+/b/c///.a/.///. /b/c/.a
+/b/c///.a/.//// /b/c/.a
+/b/c///.a//aaaa /b/c/.a/aaaa
+/b/c///.a//aaa. /b/c/.a/aaa.
+/b/c///.a//aaa/ /b/c/.a/aaa
+/b/c///.a//aa.a /b/c/.a/aa.a
+/b/c///.a//aa.. /b/c/.a/aa..
+/b/c///.a//aa./ /b/c/.a/aa.
+/b/c///.a//aa/a /b/c/.a/aa/a
+/b/c///.a//aa/. /b/c/.a/aa
+/b/c///.a//aa// /b/c/.a/aa
+/b/c///.a//a.aa /b/c/.a/a.aa
+/b/c///.a//a.a. /b/c/.a/a.a.
+/b/c///.a//a.a/ /b/c/.a/a.a
+/b/c///.a//a..a /b/c/.a/a..a
+/b/c///.a//a... /b/c/.a/a...
+/b/c///.a//a../ /b/c/.a/a..
+/b/c///.a//a./a /b/c/.a/a./a
+/b/c///.a//a./. /b/c/.a/a.
+/b/c///.a//a.// /b/c/.a/a.
+/b/c///.a//a/aa /b/c/.a/a/aa
+/b/c///.a//a/a. /b/c/.a/a/a.
+/b/c///.a//a/a/ /b/c/.a/a/a
+/b/c///.a//a/.a /b/c/.a/a/.a
+/b/c///.a//a/.. /b/c/.a
+/b/c///.a//a/./ /b/c/.a/a
+/b/c///.a//a//a /b/c/.a/a/a
+/b/c///.a//a//. /b/c/.a/a
+/b/c///.a//a/// /b/c/.a/a
+/b/c///.a//.aaa /b/c/.a/.aaa
+/b/c///.a//.aa. /b/c/.a/.aa.
+/b/c///.a//.aa/ /b/c/.a/.aa
+/b/c///.a//.a.a /b/c/.a/.a.a
+/b/c///.a//.a.. /b/c/.a/.a..
+/b/c///.a//.a./ /b/c/.a/.a.
+/b/c///.a//.a/a /b/c/.a/.a/a
+/b/c///.a//.a/. /b/c/.a/.a
+/b/c///.a//.a// /b/c/.a/.a
+/b/c///.a//..aa /b/c/.a/..aa
+/b/c///.a//..a. /b/c/.a/..a.
+/b/c///.a//..a/ /b/c/.a/..a
+/b/c///.a//...a /b/c/.a/...a
+/b/c///.a//.... /b/c/.a/....
+/b/c///.a//.../ /b/c/.a/...
+/b/c///.a//../a /b/c/a
+/b/c///.a//../. /b/c
+/b/c///.a//..// /b/c
+/b/c///.a//./aa /b/c/.a/aa
+/b/c///.a//./a. /b/c/.a/a.
+/b/c///.a//./a/ /b/c/.a/a
+/b/c///.a//./.a /b/c/.a/.a
+/b/c///.a//./.. /b/c
+/b/c///.a//././ /b/c/.a
+/b/c///.a//.//a /b/c/.a/a
+/b/c///.a//.//. /b/c/.a
+/b/c///.a//./// /b/c/.a
+/b/c///.a///aaa /b/c/.a/aaa
+/b/c///.a///aa. /b/c/.a/aa.
+/b/c///.a///aa/ /b/c/.a/aa
+/b/c///.a///a.a /b/c/.a/a.a
+/b/c///.a///a.. /b/c/.a/a..
+/b/c///.a///a./ /b/c/.a/a.
+/b/c///.a///a/a /b/c/.a/a/a
+/b/c///.a///a/. /b/c/.a/a
+/b/c///.a///a// /b/c/.a/a
+/b/c///.a///.aa /b/c/.a/.aa
+/b/c///.a///.a. /b/c/.a/.a.
+/b/c///.a///.a/ /b/c/.a/.a
+/b/c///.a///..a /b/c/.a/..a
+/b/c///.a///... /b/c/.a/...
+/b/c///.a///../ /b/c
+/b/c///.a///./a /b/c/.a/a
+/b/c///.a///./. /b/c/.a
+/b/c///.a///.// /b/c/.a
+/b/c///.a////aa /b/c/.a/aa
+/b/c///.a////a. /b/c/.a/a.
+/b/c///.a////a/ /b/c/.a/a
+/b/c///.a////.a /b/c/.a/.a
+/b/c///.a////.. /b/c
+/b/c///.a////./ /b/c/.a
+/b/c///.a/////a /b/c/.a/a
+/b/c///.a/////. /b/c/.a
+/b/c///.a////// /b/c/.a
+/b/c///..aaaaaa /b/c/..aaaaaa
+/b/c///..aaaaa. /b/c/..aaaaa.
+/b/c///..aaaaa/ /b/c/..aaaaa
+/b/c///..aaaa.a /b/c/..aaaa.a
+/b/c///..aaaa.. /b/c/..aaaa..
+/b/c///..aaaa./ /b/c/..aaaa.
+/b/c///..aaaa/a /b/c/..aaaa/a
+/b/c///..aaaa/. /b/c/..aaaa
+/b/c///..aaaa// /b/c/..aaaa
+/b/c///..aaa.aa /b/c/..aaa.aa
+/b/c///..aaa.a. /b/c/..aaa.a.
+/b/c///..aaa.a/ /b/c/..aaa.a
+/b/c///..aaa..a /b/c/..aaa..a
+/b/c///..aaa... /b/c/..aaa...
+/b/c///..aaa../ /b/c/..aaa..
+/b/c///..aaa./a /b/c/..aaa./a
+/b/c///..aaa./. /b/c/..aaa.
+/b/c///..aaa.// /b/c/..aaa.
+/b/c///..aaa/aa /b/c/..aaa/aa
+/b/c///..aaa/a. /b/c/..aaa/a.
+/b/c///..aaa/a/ /b/c/..aaa/a
+/b/c///..aaa/.a /b/c/..aaa/.a
+/b/c///..aaa/.. /b/c
+/b/c///..aaa/./ /b/c/..aaa
+/b/c///..aaa//a /b/c/..aaa/a
+/b/c///..aaa//. /b/c/..aaa
+/b/c///..aaa/// /b/c/..aaa
+/b/c///..aa.aaa /b/c/..aa.aaa
+/b/c///..aa.aa. /b/c/..aa.aa.
+/b/c///..aa.aa/ /b/c/..aa.aa
+/b/c///..aa.a.a /b/c/..aa.a.a
+/b/c///..aa.a.. /b/c/..aa.a..
+/b/c///..aa.a./ /b/c/..aa.a.
+/b/c///..aa.a/a /b/c/..aa.a/a
+/b/c///..aa.a/. /b/c/..aa.a
+/b/c///..aa.a// /b/c/..aa.a
+/b/c///..aa..aa /b/c/..aa..aa
+/b/c///..aa..a. /b/c/..aa..a.
+/b/c///..aa..a/ /b/c/..aa..a
+/b/c///..aa...a /b/c/..aa...a
+/b/c///..aa.... /b/c/..aa....
+/b/c///..aa.../ /b/c/..aa...
+/b/c///..aa../a /b/c/..aa../a
+/b/c///..aa../. /b/c/..aa..
+/b/c///..aa..// /b/c/..aa..
+/b/c///..aa./aa /b/c/..aa./aa
+/b/c///..aa./a. /b/c/..aa./a.
+/b/c///..aa./a/ /b/c/..aa./a
+/b/c///..aa./.a /b/c/..aa./.a
+/b/c///..aa./.. /b/c
+/b/c///..aa././ /b/c/..aa.
+/b/c///..aa.//a /b/c/..aa./a
+/b/c///..aa.//. /b/c/..aa.
+/b/c///..aa./// /b/c/..aa.
+/b/c///..aa/aaa /b/c/..aa/aaa
+/b/c///..aa/aa. /b/c/..aa/aa.
+/b/c///..aa/aa/ /b/c/..aa/aa
+/b/c///..aa/a.a /b/c/..aa/a.a
+/b/c///..aa/a.. /b/c/..aa/a..
+/b/c///..aa/a./ /b/c/..aa/a.
+/b/c///..aa/a/a /b/c/..aa/a/a
+/b/c///..aa/a/. /b/c/..aa/a
+/b/c///..aa/a// /b/c/..aa/a
+/b/c///..aa/.aa /b/c/..aa/.aa
+/b/c///..aa/.a. /b/c/..aa/.a.
+/b/c///..aa/.a/ /b/c/..aa/.a
+/b/c///..aa/..a /b/c/..aa/..a
+/b/c///..aa/... /b/c/..aa/...
+/b/c///..aa/../ /b/c
+/b/c///..aa/./a /b/c/..aa/a
+/b/c///..aa/./. /b/c/..aa
+/b/c///..aa/.// /b/c/..aa
+/b/c///..aa//aa /b/c/..aa/aa
+/b/c///..aa//a. /b/c/..aa/a.
+/b/c///..aa//a/ /b/c/..aa/a
+/b/c///..aa//.a /b/c/..aa/.a
+/b/c///..aa//.. /b/c
+/b/c///..aa//./ /b/c/..aa
+/b/c///..aa///a /b/c/..aa/a
+/b/c///..aa///. /b/c/..aa
+/b/c///..aa//// /b/c/..aa
+/b/c///..a.aaaa /b/c/..a.aaaa
+/b/c///..a.aaa. /b/c/..a.aaa.
+/b/c///..a.aaa/ /b/c/..a.aaa
+/b/c///..a.aa.a /b/c/..a.aa.a
+/b/c///..a.aa.. /b/c/..a.aa..
+/b/c///..a.aa./ /b/c/..a.aa.
+/b/c///..a.aa/a /b/c/..a.aa/a
+/b/c///..a.aa/. /b/c/..a.aa
+/b/c///..a.aa// /b/c/..a.aa
+/b/c///..a.a.aa /b/c/..a.a.aa
+/b/c///..a.a.a. /b/c/..a.a.a.
+/b/c///..a.a.a/ /b/c/..a.a.a
+/b/c///..a.a..a /b/c/..a.a..a
+/b/c///..a.a... /b/c/..a.a...
+/b/c///..a.a../ /b/c/..a.a..
+/b/c///..a.a./a /b/c/..a.a./a
+/b/c///..a.a./. /b/c/..a.a.
+/b/c///..a.a.// /b/c/..a.a.
+/b/c///..a.a/aa /b/c/..a.a/aa
+/b/c///..a.a/a. /b/c/..a.a/a.
+/b/c///..a.a/a/ /b/c/..a.a/a
+/b/c///..a.a/.a /b/c/..a.a/.a
+/b/c///..a.a/.. /b/c
+/b/c///..a.a/./ /b/c/..a.a
+/b/c///..a.a//a /b/c/..a.a/a
+/b/c///..a.a//. /b/c/..a.a
+/b/c///..a.a/// /b/c/..a.a
+/b/c///..a..aaa /b/c/..a..aaa
+/b/c///..a..aa. /b/c/..a..aa.
+/b/c///..a..aa/ /b/c/..a..aa
+/b/c///..a..a.a /b/c/..a..a.a
+/b/c///..a..a.. /b/c/..a..a..
+/b/c///..a..a./ /b/c/..a..a.
+/b/c///..a..a/a /b/c/..a..a/a
+/b/c///..a..a/. /b/c/..a..a
+/b/c///..a..a// /b/c/..a..a
+/b/c///..a...aa /b/c/..a...aa
+/b/c///..a...a. /b/c/..a...a.
+/b/c///..a...a/ /b/c/..a...a
+/b/c///..a....a /b/c/..a....a
+/b/c///..a..... /b/c/..a.....
+/b/c///..a..../ /b/c/..a....
+/b/c///..a.../a /b/c/..a.../a
+/b/c///..a.../. /b/c/..a...
+/b/c///..a...// /b/c/..a...
+/b/c///..a../aa /b/c/..a../aa
+/b/c///..a../a. /b/c/..a../a.
+/b/c///..a../a/ /b/c/..a../a
+/b/c///..a../.a /b/c/..a../.a
+/b/c///..a../.. /b/c
+/b/c///..a.././ /b/c/..a..
+/b/c///..a..//a /b/c/..a../a
+/b/c///..a..//. /b/c/..a..
+/b/c///..a../// /b/c/..a..
+/b/c///..a./aaa /b/c/..a./aaa
+/b/c///..a./aa. /b/c/..a./aa.
+/b/c///..a./aa/ /b/c/..a./aa
+/b/c///..a./a.a /b/c/..a./a.a
+/b/c///..a./a.. /b/c/..a./a..
+/b/c///..a./a./ /b/c/..a./a.
+/b/c///..a./a/a /b/c/..a./a/a
+/b/c///..a./a/. /b/c/..a./a
+/b/c///..a./a// /b/c/..a./a
+/b/c///..a./.aa /b/c/..a./.aa
+/b/c///..a./.a. /b/c/..a./.a.
+/b/c///..a./.a/ /b/c/..a./.a
+/b/c///..a./..a /b/c/..a./..a
+/b/c///..a./... /b/c/..a./...
+/b/c///..a./../ /b/c
+/b/c///..a././a /b/c/..a./a
+/b/c///..a././. /b/c/..a.
+/b/c///..a./.// /b/c/..a.
+/b/c///..a.//aa /b/c/..a./aa
+/b/c///..a.//a. /b/c/..a./a.
+/b/c///..a.//a/ /b/c/..a./a
+/b/c///..a.//.a /b/c/..a./.a
+/b/c///..a.//.. /b/c
+/b/c///..a.//./ /b/c/..a.
+/b/c///..a.///a /b/c/..a./a
+/b/c///..a.///. /b/c/..a.
+/b/c///..a.//// /b/c/..a.
+/b/c///..a/aaaa /b/c/..a/aaaa
+/b/c///..a/aaa. /b/c/..a/aaa.
+/b/c///..a/aaa/ /b/c/..a/aaa
+/b/c///..a/aa.a /b/c/..a/aa.a
+/b/c///..a/aa.. /b/c/..a/aa..
+/b/c///..a/aa./ /b/c/..a/aa.
+/b/c///..a/aa/a /b/c/..a/aa/a
+/b/c///..a/aa/. /b/c/..a/aa
+/b/c///..a/aa// /b/c/..a/aa
+/b/c///..a/a.aa /b/c/..a/a.aa
+/b/c///..a/a.a. /b/c/..a/a.a.
+/b/c///..a/a.a/ /b/c/..a/a.a
+/b/c///..a/a..a /b/c/..a/a..a
+/b/c///..a/a... /b/c/..a/a...
+/b/c///..a/a../ /b/c/..a/a..
+/b/c///..a/a./a /b/c/..a/a./a
+/b/c///..a/a./. /b/c/..a/a.
+/b/c///..a/a.// /b/c/..a/a.
+/b/c///..a/a/aa /b/c/..a/a/aa
+/b/c///..a/a/a. /b/c/..a/a/a.
+/b/c///..a/a/a/ /b/c/..a/a/a
+/b/c///..a/a/.a /b/c/..a/a/.a
+/b/c///..a/a/.. /b/c/..a
+/b/c///..a/a/./ /b/c/..a/a
+/b/c///..a/a//a /b/c/..a/a/a
+/b/c///..a/a//. /b/c/..a/a
+/b/c///..a/a/// /b/c/..a/a
+/b/c///..a/.aaa /b/c/..a/.aaa
+/b/c///..a/.aa. /b/c/..a/.aa.
+/b/c///..a/.aa/ /b/c/..a/.aa
+/b/c///..a/.a.a /b/c/..a/.a.a
+/b/c///..a/.a.. /b/c/..a/.a..
+/b/c///..a/.a./ /b/c/..a/.a.
+/b/c///..a/.a/a /b/c/..a/.a/a
+/b/c///..a/.a/. /b/c/..a/.a
+/b/c///..a/.a// /b/c/..a/.a
+/b/c///..a/..aa /b/c/..a/..aa
+/b/c///..a/..a. /b/c/..a/..a.
+/b/c///..a/..a/ /b/c/..a/..a
+/b/c///..a/...a /b/c/..a/...a
+/b/c///..a/.... /b/c/..a/....
+/b/c///..a/.../ /b/c/..a/...
+/b/c///..a/../a /b/c/a
+/b/c///..a/../. /b/c
+/b/c///..a/..// /b/c
+/b/c///..a/./aa /b/c/..a/aa
+/b/c///..a/./a. /b/c/..a/a.
+/b/c///..a/./a/ /b/c/..a/a
+/b/c///..a/./.a /b/c/..a/.a
+/b/c///..a/./.. /b/c
+/b/c///..a/././ /b/c/..a
+/b/c///..a/.//a /b/c/..a/a
+/b/c///..a/.//. /b/c/..a
+/b/c///..a/./// /b/c/..a
+/b/c///..a//aaa /b/c/..a/aaa
+/b/c///..a//aa. /b/c/..a/aa.
+/b/c///..a//aa/ /b/c/..a/aa
+/b/c///..a//a.a /b/c/..a/a.a
+/b/c///..a//a.. /b/c/..a/a..
+/b/c///..a//a./ /b/c/..a/a.
+/b/c///..a//a/a /b/c/..a/a/a
+/b/c///..a//a/. /b/c/..a/a
+/b/c///..a//a// /b/c/..a/a
+/b/c///..a//.aa /b/c/..a/.aa
+/b/c///..a//.a. /b/c/..a/.a.
+/b/c///..a//.a/ /b/c/..a/.a
+/b/c///..a//..a /b/c/..a/..a
+/b/c///..a//... /b/c/..a/...
+/b/c///..a//../ /b/c
+/b/c///..a//./a /b/c/..a/a
+/b/c///..a//./. /b/c/..a
+/b/c///..a//.// /b/c/..a
+/b/c///..a///aa /b/c/..a/aa
+/b/c///..a///a. /b/c/..a/a.
+/b/c///..a///a/ /b/c/..a/a
+/b/c///..a///.a /b/c/..a/.a
+/b/c///..a///.. /b/c
+/b/c///..a///./ /b/c/..a
+/b/c///..a////a /b/c/..a/a
+/b/c///..a////. /b/c/..a
+/b/c///..a///// /b/c/..a
+/b/c///...aaaaa /b/c/...aaaaa
+/b/c///...aaaa. /b/c/...aaaa.
+/b/c///...aaaa/ /b/c/...aaaa
+/b/c///...aaa.a /b/c/...aaa.a
+/b/c///...aaa.. /b/c/...aaa..
+/b/c///...aaa./ /b/c/...aaa.
+/b/c///...aaa/a /b/c/...aaa/a
+/b/c///...aaa/. /b/c/...aaa
+/b/c///...aaa// /b/c/...aaa
+/b/c///...aa.aa /b/c/...aa.aa
+/b/c///...aa.a. /b/c/...aa.a.
+/b/c///...aa.a/ /b/c/...aa.a
+/b/c///...aa..a /b/c/...aa..a
+/b/c///...aa... /b/c/...aa...
+/b/c///...aa../ /b/c/...aa..
+/b/c///...aa./a /b/c/...aa./a
+/b/c///...aa./. /b/c/...aa.
+/b/c///...aa.// /b/c/...aa.
+/b/c///...aa/aa /b/c/...aa/aa
+/b/c///...aa/a. /b/c/...aa/a.
+/b/c///...aa/a/ /b/c/...aa/a
+/b/c///...aa/.a /b/c/...aa/.a
+/b/c///...aa/.. /b/c
+/b/c///...aa/./ /b/c/...aa
+/b/c///...aa//a /b/c/...aa/a
+/b/c///...aa//. /b/c/...aa
+/b/c///...aa/// /b/c/...aa
+/b/c///...a.aaa /b/c/...a.aaa
+/b/c///...a.aa. /b/c/...a.aa.
+/b/c///...a.aa/ /b/c/...a.aa
+/b/c///...a.a.a /b/c/...a.a.a
+/b/c///...a.a.. /b/c/...a.a..
+/b/c///...a.a./ /b/c/...a.a.
+/b/c///...a.a/a /b/c/...a.a/a
+/b/c///...a.a/. /b/c/...a.a
+/b/c///...a.a// /b/c/...a.a
+/b/c///...a..aa /b/c/...a..aa
+/b/c///...a..a. /b/c/...a..a.
+/b/c///...a..a/ /b/c/...a..a
+/b/c///...a...a /b/c/...a...a
+/b/c///...a.... /b/c/...a....
+/b/c///...a.../ /b/c/...a...
+/b/c///...a../a /b/c/...a../a
+/b/c///...a../. /b/c/...a..
+/b/c///...a..// /b/c/...a..
+/b/c///...a./aa /b/c/...a./aa
+/b/c///...a./a. /b/c/...a./a.
+/b/c///...a./a/ /b/c/...a./a
+/b/c///...a./.a /b/c/...a./.a
+/b/c///...a./.. /b/c
+/b/c///...a././ /b/c/...a.
+/b/c///...a.//a /b/c/...a./a
+/b/c///...a.//. /b/c/...a.
+/b/c///...a./// /b/c/...a.
+/b/c///...a/aaa /b/c/...a/aaa
+/b/c///...a/aa. /b/c/...a/aa.
+/b/c///...a/aa/ /b/c/...a/aa
+/b/c///...a/a.a /b/c/...a/a.a
+/b/c///...a/a.. /b/c/...a/a..
+/b/c///...a/a./ /b/c/...a/a.
+/b/c///...a/a/a /b/c/...a/a/a
+/b/c///...a/a/. /b/c/...a/a
+/b/c///...a/a// /b/c/...a/a
+/b/c///...a/.aa /b/c/...a/.aa
+/b/c///...a/.a. /b/c/...a/.a.
+/b/c///...a/.a/ /b/c/...a/.a
+/b/c///...a/..a /b/c/...a/..a
+/b/c///...a/... /b/c/...a/...
+/b/c///...a/../ /b/c
+/b/c///...a/./a /b/c/...a/a
+/b/c///...a/./. /b/c/...a
+/b/c///...a/.// /b/c/...a
+/b/c///...a//aa /b/c/...a/aa
+/b/c///...a//a. /b/c/...a/a.
+/b/c///...a//a/ /b/c/...a/a
+/b/c///...a//.a /b/c/...a/.a
+/b/c///...a//.. /b/c
+/b/c///...a//./ /b/c/...a
+/b/c///...a///a /b/c/...a/a
+/b/c///...a///. /b/c/...a
+/b/c///...a//// /b/c/...a
+/b/c///....aaaa /b/c/....aaaa
+/b/c///....aaa. /b/c/....aaa.
+/b/c///....aaa/ /b/c/....aaa
+/b/c///....aa.a /b/c/....aa.a
+/b/c///....aa.. /b/c/....aa..
+/b/c///....aa./ /b/c/....aa.
+/b/c///....aa/a /b/c/....aa/a
+/b/c///....aa/. /b/c/....aa
+/b/c///....aa// /b/c/....aa
+/b/c///....a.aa /b/c/....a.aa
+/b/c///....a.a. /b/c/....a.a.
+/b/c///....a.a/ /b/c/....a.a
+/b/c///....a..a /b/c/....a..a
+/b/c///....a... /b/c/....a...
+/b/c///....a../ /b/c/....a..
+/b/c///....a./a /b/c/....a./a
+/b/c///....a./. /b/c/....a.
+/b/c///....a.// /b/c/....a.
+/b/c///....a/aa /b/c/....a/aa
+/b/c///....a/a. /b/c/....a/a.
+/b/c///....a/a/ /b/c/....a/a
+/b/c///....a/.a /b/c/....a/.a
+/b/c///....a/.. /b/c
+/b/c///....a/./ /b/c/....a
+/b/c///....a//a /b/c/....a/a
+/b/c///....a//. /b/c/....a
+/b/c///....a/// /b/c/....a
+/b/c///.....aaa /b/c/.....aaa
+/b/c///.....aa. /b/c/.....aa.
+/b/c///.....aa/ /b/c/.....aa
+/b/c///.....a.a /b/c/.....a.a
+/b/c///.....a.. /b/c/.....a..
+/b/c///.....a./ /b/c/.....a.
+/b/c///.....a/a /b/c/.....a/a
+/b/c///.....a/. /b/c/.....a
+/b/c///.....a// /b/c/.....a
+/b/c///......aa /b/c/......aa
+/b/c///......a. /b/c/......a.
+/b/c///......a/ /b/c/......a
+/b/c///.......a /b/c/.......a
+/b/c///........ /b/c/........
+/b/c///......./ /b/c/.......
+/b/c///....../a /b/c/....../a
+/b/c///....../. /b/c/......
+/b/c///......// /b/c/......
+/b/c///...../aa /b/c/...../aa
+/b/c///...../a. /b/c/...../a.
+/b/c///...../a/ /b/c/...../a
+/b/c///...../.a /b/c/...../.a
+/b/c///...../.. /b/c
+/b/c///....././ /b/c/.....
+/b/c///.....//a /b/c/...../a
+/b/c///.....//. /b/c/.....
+/b/c///...../// /b/c/.....
+/b/c///..../aaa /b/c/..../aaa
+/b/c///..../aa. /b/c/..../aa.
+/b/c///..../aa/ /b/c/..../aa
+/b/c///..../a.a /b/c/..../a.a
+/b/c///..../a.. /b/c/..../a..
+/b/c///..../a./ /b/c/..../a.
+/b/c///..../a/a /b/c/..../a/a
+/b/c///..../a/. /b/c/..../a
+/b/c///..../a// /b/c/..../a
+/b/c///..../.aa /b/c/..../.aa
+/b/c///..../.a. /b/c/..../.a.
+/b/c///..../.a/ /b/c/..../.a
+/b/c///..../..a /b/c/..../..a
+/b/c///..../... /b/c/..../...
+/b/c///..../../ /b/c
+/b/c///...././a /b/c/..../a
+/b/c///...././. /b/c/....
+/b/c///..../.// /b/c/....
+/b/c///....//aa /b/c/..../aa
+/b/c///....//a. /b/c/..../a.
+/b/c///....//a/ /b/c/..../a
+/b/c///....//.a /b/c/..../.a
+/b/c///....//.. /b/c
+/b/c///....//./ /b/c/....
+/b/c///....///a /b/c/..../a
+/b/c///....///. /b/c/....
+/b/c///....//// /b/c/....
+/b/c///.../aaaa /b/c/.../aaaa
+/b/c///.../aaa. /b/c/.../aaa.
+/b/c///.../aaa/ /b/c/.../aaa
+/b/c///.../aa.a /b/c/.../aa.a
+/b/c///.../aa.. /b/c/.../aa..
+/b/c///.../aa./ /b/c/.../aa.
+/b/c///.../aa/a /b/c/.../aa/a
+/b/c///.../aa/. /b/c/.../aa
+/b/c///.../aa// /b/c/.../aa
+/b/c///.../a.aa /b/c/.../a.aa
+/b/c///.../a.a. /b/c/.../a.a.
+/b/c///.../a.a/ /b/c/.../a.a
+/b/c///.../a..a /b/c/.../a..a
+/b/c///.../a... /b/c/.../a...
+/b/c///.../a../ /b/c/.../a..
+/b/c///.../a./a /b/c/.../a./a
+/b/c///.../a./. /b/c/.../a.
+/b/c///.../a.// /b/c/.../a.
+/b/c///.../a/aa /b/c/.../a/aa
+/b/c///.../a/a. /b/c/.../a/a.
+/b/c///.../a/a/ /b/c/.../a/a
+/b/c///.../a/.a /b/c/.../a/.a
+/b/c///.../a/.. /b/c/...
+/b/c///.../a/./ /b/c/.../a
+/b/c///.../a//a /b/c/.../a/a
+/b/c///.../a//. /b/c/.../a
+/b/c///.../a/// /b/c/.../a
+/b/c///.../.aaa /b/c/.../.aaa
+/b/c///.../.aa. /b/c/.../.aa.
+/b/c///.../.aa/ /b/c/.../.aa
+/b/c///.../.a.a /b/c/.../.a.a
+/b/c///.../.a.. /b/c/.../.a..
+/b/c///.../.a./ /b/c/.../.a.
+/b/c///.../.a/a /b/c/.../.a/a
+/b/c///.../.a/. /b/c/.../.a
+/b/c///.../.a// /b/c/.../.a
+/b/c///.../..aa /b/c/.../..aa
+/b/c///.../..a. /b/c/.../..a.
+/b/c///.../..a/ /b/c/.../..a
+/b/c///.../...a /b/c/.../...a
+/b/c///.../.... /b/c/.../....
+/b/c///.../.../ /b/c/.../...
+/b/c///.../../a /b/c/a
+/b/c///.../../. /b/c
+/b/c///.../..// /b/c
+/b/c///..././aa /b/c/.../aa
+/b/c///..././a. /b/c/.../a.
+/b/c///..././a/ /b/c/.../a
+/b/c///..././.a /b/c/.../.a
+/b/c///..././.. /b/c
+/b/c///.../././ /b/c/...
+/b/c///..././/a /b/c/.../a
+/b/c///..././/. /b/c/...
+/b/c///..././// /b/c/...
+/b/c///...//aaa /b/c/.../aaa
+/b/c///...//aa. /b/c/.../aa.
+/b/c///...//aa/ /b/c/.../aa
+/b/c///...//a.a /b/c/.../a.a
+/b/c///...//a.. /b/c/.../a..
+/b/c///...//a./ /b/c/.../a.
+/b/c///...//a/a /b/c/.../a/a
+/b/c///...//a/. /b/c/.../a
+/b/c///...//a// /b/c/.../a
+/b/c///...//.aa /b/c/.../.aa
+/b/c///...//.a. /b/c/.../.a.
+/b/c///...//.a/ /b/c/.../.a
+/b/c///...//..a /b/c/.../..a
+/b/c///...//... /b/c/.../...
+/b/c///...//../ /b/c
+/b/c///...//./a /b/c/.../a
+/b/c///...//./. /b/c/...
+/b/c///...//.// /b/c/...
+/b/c///...///aa /b/c/.../aa
+/b/c///...///a. /b/c/.../a.
+/b/c///...///a/ /b/c/.../a
+/b/c///...///.a /b/c/.../.a
+/b/c///...///.. /b/c
+/b/c///...///./ /b/c/...
+/b/c///...////a /b/c/.../a
+/b/c///...////. /b/c/...
+/b/c///...///// /b/c/...
+/b/c///../aaaaa /b/aaaaa
+/b/c///../aaaa. /b/aaaa.
+/b/c///../aaaa/ /b/aaaa
+/b/c///../aaa.a /b/aaa.a
+/b/c///../aaa.. /b/aaa..
+/b/c///../aaa./ /b/aaa.
+/b/c///../aaa/a /b/aaa/a
+/b/c///../aaa/. /b/aaa
+/b/c///../aaa// /b/aaa
+/b/c///../aa.aa /b/aa.aa
+/b/c///../aa.a. /b/aa.a.
+/b/c///../aa.a/ /b/aa.a
+/b/c///../aa..a /b/aa..a
+/b/c///../aa... /b/aa...
+/b/c///../aa../ /b/aa..
+/b/c///../aa./a /b/aa./a
+/b/c///../aa./. /b/aa.
+/b/c///../aa.// /b/aa.
+/b/c///../aa/aa /b/aa/aa
+/b/c///../aa/a. /b/aa/a.
+/b/c///../aa/a/ /b/aa/a
+/b/c///../aa/.a /b/aa/.a
+/b/c///../aa/.. /b
+/b/c///../aa/./ /b/aa
+/b/c///../aa//a /b/aa/a
+/b/c///../aa//. /b/aa
+/b/c///../aa/// /b/aa
+/b/c///../a.aaa /b/a.aaa
+/b/c///../a.aa. /b/a.aa.
+/b/c///../a.aa/ /b/a.aa
+/b/c///../a.a.a /b/a.a.a
+/b/c///../a.a.. /b/a.a..
+/b/c///../a.a./ /b/a.a.
+/b/c///../a.a/a /b/a.a/a
+/b/c///../a.a/. /b/a.a
+/b/c///../a.a// /b/a.a
+/b/c///../a..aa /b/a..aa
+/b/c///../a..a. /b/a..a.
+/b/c///../a..a/ /b/a..a
+/b/c///../a...a /b/a...a
+/b/c///../a.... /b/a....
+/b/c///../a.../ /b/a...
+/b/c///../a../a /b/a../a
+/b/c///../a../. /b/a..
+/b/c///../a..// /b/a..
+/b/c///../a./aa /b/a./aa
+/b/c///../a./a. /b/a./a.
+/b/c///../a./a/ /b/a./a
+/b/c///../a./.a /b/a./.a
+/b/c///../a./.. /b
+/b/c///../a././ /b/a.
+/b/c///../a.//a /b/a./a
+/b/c///../a.//. /b/a.
+/b/c///../a./// /b/a.
+/b/c///../a/aaa /b/a/aaa
+/b/c///../a/aa. /b/a/aa.
+/b/c///../a/aa/ /b/a/aa
+/b/c///../a/a.a /b/a/a.a
+/b/c///../a/a.. /b/a/a..
+/b/c///../a/a./ /b/a/a.
+/b/c///../a/a/a /b/a/a/a
+/b/c///../a/a/. /b/a/a
+/b/c///../a/a// /b/a/a
+/b/c///../a/.aa /b/a/.aa
+/b/c///../a/.a. /b/a/.a.
+/b/c///../a/.a/ /b/a/.a
+/b/c///../a/..a /b/a/..a
+/b/c///../a/... /b/a/...
+/b/c///../a/../ /b
+/b/c///../a/./a /b/a/a
+/b/c///../a/./. /b/a
+/b/c///../a/.// /b/a
+/b/c///../a//aa /b/a/aa
+/b/c///../a//a. /b/a/a.
+/b/c///../a//a/ /b/a/a
+/b/c///../a//.a /b/a/.a
+/b/c///../a//.. /b
+/b/c///../a//./ /b/a
+/b/c///../a///a /b/a/a
+/b/c///../a///. /b/a
+/b/c///../a//// /b/a
+/b/c///../.aaaa /b/.aaaa
+/b/c///../.aaa. /b/.aaa.
+/b/c///../.aaa/ /b/.aaa
+/b/c///../.aa.a /b/.aa.a
+/b/c///../.aa.. /b/.aa..
+/b/c///../.aa./ /b/.aa.
+/b/c///../.aa/a /b/.aa/a
+/b/c///../.aa/. /b/.aa
+/b/c///../.aa// /b/.aa
+/b/c///../.a.aa /b/.a.aa
+/b/c///../.a.a. /b/.a.a.
+/b/c///../.a.a/ /b/.a.a
+/b/c///../.a..a /b/.a..a
+/b/c///../.a... /b/.a...
+/b/c///../.a../ /b/.a..
+/b/c///../.a./a /b/.a./a
+/b/c///../.a./. /b/.a.
+/b/c///../.a.// /b/.a.
+/b/c///../.a/aa /b/.a/aa
+/b/c///../.a/a. /b/.a/a.
+/b/c///../.a/a/ /b/.a/a
+/b/c///../.a/.a /b/.a/.a
+/b/c///../.a/.. /b
+/b/c///../.a/./ /b/.a
+/b/c///../.a//a /b/.a/a
+/b/c///../.a//. /b/.a
+/b/c///../.a/// /b/.a
+/b/c///../..aaa /b/..aaa
+/b/c///../..aa. /b/..aa.
+/b/c///../..aa/ /b/..aa
+/b/c///../..a.a /b/..a.a
+/b/c///../..a.. /b/..a..
+/b/c///../..a./ /b/..a.
+/b/c///../..a/a /b/..a/a
+/b/c///../..a/. /b/..a
+/b/c///../..a// /b/..a
+/b/c///../...aa /b/...aa
+/b/c///../...a. /b/...a.
+/b/c///../...a/ /b/...a
+/b/c///../....a /b/....a
+/b/c///../..... /b/.....
+/b/c///../..../ /b/....
+/b/c///../.../a /b/.../a
+/b/c///../.../. /b/...
+/b/c///../...// /b/...
+/b/c///../../aa /aa
+/b/c///../../a. /a.
+/b/c///../../a/ /a
+/b/c///../../.a /.a
+/b/c///../../.. /
+/b/c///../.././ /
+/b/c///../..//a /a
+/b/c///../..//. /
+/b/c///../../// /
+/b/c///.././aaa /b/aaa
+/b/c///.././aa. /b/aa.
+/b/c///.././aa/ /b/aa
+/b/c///.././a.a /b/a.a
+/b/c///.././a.. /b/a..
+/b/c///.././a./ /b/a.
+/b/c///.././a/a /b/a/a
+/b/c///.././a/. /b/a
+/b/c///.././a// /b/a
+/b/c///.././.aa /b/.aa
+/b/c///.././.a. /b/.a.
+/b/c///.././.a/ /b/.a
+/b/c///.././..a /b/..a
+/b/c///.././... /b/...
+/b/c///.././../ /
+/b/c///../././a /b/a
+/b/c///../././. /b
+/b/c///.././.// /b
+/b/c///.././/aa /b/aa
+/b/c///.././/a. /b/a.
+/b/c///.././/a/ /b/a
+/b/c///.././/.a /b/.a
+/b/c///.././/.. /
+/b/c///.././/./ /b
+/b/c///.././//a /b/a
+/b/c///.././//. /b
+/b/c///.././/// /b
+/b/c///..//aaaa /b/aaaa
+/b/c///..//aaa. /b/aaa.
+/b/c///..//aaa/ /b/aaa
+/b/c///..//aa.a /b/aa.a
+/b/c///..//aa.. /b/aa..
+/b/c///..//aa./ /b/aa.
+/b/c///..//aa/a /b/aa/a
+/b/c///..//aa/. /b/aa
+/b/c///..//aa// /b/aa
+/b/c///..//a.aa /b/a.aa
+/b/c///..//a.a. /b/a.a.
+/b/c///..//a.a/ /b/a.a
+/b/c///..//a..a /b/a..a
+/b/c///..//a... /b/a...
+/b/c///..//a../ /b/a..
+/b/c///..//a./a /b/a./a
+/b/c///..//a./. /b/a.
+/b/c///..//a.// /b/a.
+/b/c///..//a/aa /b/a/aa
+/b/c///..//a/a. /b/a/a.
+/b/c///..//a/a/ /b/a/a
+/b/c///..//a/.a /b/a/.a
+/b/c///..//a/.. /b
+/b/c///..//a/./ /b/a
+/b/c///..//a//a /b/a/a
+/b/c///..//a//. /b/a
+/b/c///..//a/// /b/a
+/b/c///..//.aaa /b/.aaa
+/b/c///..//.aa. /b/.aa.
+/b/c///..//.aa/ /b/.aa
+/b/c///..//.a.a /b/.a.a
+/b/c///..//.a.. /b/.a..
+/b/c///..//.a./ /b/.a.
+/b/c///..//.a/a /b/.a/a
+/b/c///..//.a/. /b/.a
+/b/c///..//.a// /b/.a
+/b/c///..//..aa /b/..aa
+/b/c///..//..a. /b/..a.
+/b/c///..//..a/ /b/..a
+/b/c///..//...a /b/...a
+/b/c///..//.... /b/....
+/b/c///..//.../ /b/...
+/b/c///..//../a /a
+/b/c///..//../. /
+/b/c///..//..// /
+/b/c///..//./aa /b/aa
+/b/c///..//./a. /b/a.
+/b/c///..//./a/ /b/a
+/b/c///..//./.a /b/.a
+/b/c///..//./.. /
+/b/c///..//././ /b
+/b/c///..//.//a /b/a
+/b/c///..//.//. /b
+/b/c///..//./// /b
+/b/c///..///aaa /b/aaa
+/b/c///..///aa. /b/aa.
+/b/c///..///aa/ /b/aa
+/b/c///..///a.a /b/a.a
+/b/c///..///a.. /b/a..
+/b/c///..///a./ /b/a.
+/b/c///..///a/a /b/a/a
+/b/c///..///a/. /b/a
+/b/c///..///a// /b/a
+/b/c///..///.aa /b/.aa
+/b/c///..///.a. /b/.a.
+/b/c///..///.a/ /b/.a
+/b/c///..///..a /b/..a
+/b/c///..///... /b/...
+/b/c///..///../ /
+/b/c///..///./a /b/a
+/b/c///..///./. /b
+/b/c///..///.// /b
+/b/c///..////aa /b/aa
+/b/c///..////a. /b/a.
+/b/c///..////a/ /b/a
+/b/c///..////.a /b/.a
+/b/c///..////.. /
+/b/c///..////./ /b
+/b/c///../////a /b/a
+/b/c///../////. /b
+/b/c///..////// /b
+/b/c///./aaaaaa /b/c/aaaaaa
+/b/c///./aaaaa. /b/c/aaaaa.
+/b/c///./aaaaa/ /b/c/aaaaa
+/b/c///./aaaa.a /b/c/aaaa.a
+/b/c///./aaaa.. /b/c/aaaa..
+/b/c///./aaaa./ /b/c/aaaa.
+/b/c///./aaaa/a /b/c/aaaa/a
+/b/c///./aaaa/. /b/c/aaaa
+/b/c///./aaaa// /b/c/aaaa
+/b/c///./aaa.aa /b/c/aaa.aa
+/b/c///./aaa.a. /b/c/aaa.a.
+/b/c///./aaa.a/ /b/c/aaa.a
+/b/c///./aaa..a /b/c/aaa..a
+/b/c///./aaa... /b/c/aaa...
+/b/c///./aaa../ /b/c/aaa..
+/b/c///./aaa./a /b/c/aaa./a
+/b/c///./aaa./. /b/c/aaa.
+/b/c///./aaa.// /b/c/aaa.
+/b/c///./aaa/aa /b/c/aaa/aa
+/b/c///./aaa/a. /b/c/aaa/a.
+/b/c///./aaa/a/ /b/c/aaa/a
+/b/c///./aaa/.a /b/c/aaa/.a
+/b/c///./aaa/.. /b/c
+/b/c///./aaa/./ /b/c/aaa
+/b/c///./aaa//a /b/c/aaa/a
+/b/c///./aaa//. /b/c/aaa
+/b/c///./aaa/// /b/c/aaa
+/b/c///./aa.aaa /b/c/aa.aaa
+/b/c///./aa.aa. /b/c/aa.aa.
+/b/c///./aa.aa/ /b/c/aa.aa
+/b/c///./aa.a.a /b/c/aa.a.a
+/b/c///./aa.a.. /b/c/aa.a..
+/b/c///./aa.a./ /b/c/aa.a.
+/b/c///./aa.a/a /b/c/aa.a/a
+/b/c///./aa.a/. /b/c/aa.a
+/b/c///./aa.a// /b/c/aa.a
+/b/c///./aa..aa /b/c/aa..aa
+/b/c///./aa..a. /b/c/aa..a.
+/b/c///./aa..a/ /b/c/aa..a
+/b/c///./aa...a /b/c/aa...a
+/b/c///./aa.... /b/c/aa....
+/b/c///./aa.../ /b/c/aa...
+/b/c///./aa../a /b/c/aa../a
+/b/c///./aa../. /b/c/aa..
+/b/c///./aa..// /b/c/aa..
+/b/c///./aa./aa /b/c/aa./aa
+/b/c///./aa./a. /b/c/aa./a.
+/b/c///./aa./a/ /b/c/aa./a
+/b/c///./aa./.a /b/c/aa./.a
+/b/c///./aa./.. /b/c
+/b/c///./aa././ /b/c/aa.
+/b/c///./aa.//a /b/c/aa./a
+/b/c///./aa.//. /b/c/aa.
+/b/c///./aa./// /b/c/aa.
+/b/c///./aa/aaa /b/c/aa/aaa
+/b/c///./aa/aa. /b/c/aa/aa.
+/b/c///./aa/aa/ /b/c/aa/aa
+/b/c///./aa/a.a /b/c/aa/a.a
+/b/c///./aa/a.. /b/c/aa/a..
+/b/c///./aa/a./ /b/c/aa/a.
+/b/c///./aa/a/a /b/c/aa/a/a
+/b/c///./aa/a/. /b/c/aa/a
+/b/c///./aa/a// /b/c/aa/a
+/b/c///./aa/.aa /b/c/aa/.aa
+/b/c///./aa/.a. /b/c/aa/.a.
+/b/c///./aa/.a/ /b/c/aa/.a
+/b/c///./aa/..a /b/c/aa/..a
+/b/c///./aa/... /b/c/aa/...
+/b/c///./aa/../ /b/c
+/b/c///./aa/./a /b/c/aa/a
+/b/c///./aa/./. /b/c/aa
+/b/c///./aa/.// /b/c/aa
+/b/c///./aa//aa /b/c/aa/aa
+/b/c///./aa//a. /b/c/aa/a.
+/b/c///./aa//a/ /b/c/aa/a
+/b/c///./aa//.a /b/c/aa/.a
+/b/c///./aa//.. /b/c
+/b/c///./aa//./ /b/c/aa
+/b/c///./aa///a /b/c/aa/a
+/b/c///./aa///. /b/c/aa
+/b/c///./aa//// /b/c/aa
+/b/c///./a.aaaa /b/c/a.aaaa
+/b/c///./a.aaa. /b/c/a.aaa.
+/b/c///./a.aaa/ /b/c/a.aaa
+/b/c///./a.aa.a /b/c/a.aa.a
+/b/c///./a.aa.. /b/c/a.aa..
+/b/c///./a.aa./ /b/c/a.aa.
+/b/c///./a.aa/a /b/c/a.aa/a
+/b/c///./a.aa/. /b/c/a.aa
+/b/c///./a.aa// /b/c/a.aa
+/b/c///./a.a.aa /b/c/a.a.aa
+/b/c///./a.a.a. /b/c/a.a.a.
+/b/c///./a.a.a/ /b/c/a.a.a
+/b/c///./a.a..a /b/c/a.a..a
+/b/c///./a.a... /b/c/a.a...
+/b/c///./a.a../ /b/c/a.a..
+/b/c///./a.a./a /b/c/a.a./a
+/b/c///./a.a./. /b/c/a.a.
+/b/c///./a.a.// /b/c/a.a.
+/b/c///./a.a/aa /b/c/a.a/aa
+/b/c///./a.a/a. /b/c/a.a/a.
+/b/c///./a.a/a/ /b/c/a.a/a
+/b/c///./a.a/.a /b/c/a.a/.a
+/b/c///./a.a/.. /b/c
+/b/c///./a.a/./ /b/c/a.a
+/b/c///./a.a//a /b/c/a.a/a
+/b/c///./a.a//. /b/c/a.a
+/b/c///./a.a/// /b/c/a.a
+/b/c///./a..aaa /b/c/a..aaa
+/b/c///./a..aa. /b/c/a..aa.
+/b/c///./a..aa/ /b/c/a..aa
+/b/c///./a..a.a /b/c/a..a.a
+/b/c///./a..a.. /b/c/a..a..
+/b/c///./a..a./ /b/c/a..a.
+/b/c///./a..a/a /b/c/a..a/a
+/b/c///./a..a/. /b/c/a..a
+/b/c///./a..a// /b/c/a..a
+/b/c///./a...aa /b/c/a...aa
+/b/c///./a...a. /b/c/a...a.
+/b/c///./a...a/ /b/c/a...a
+/b/c///./a....a /b/c/a....a
+/b/c///./a..... /b/c/a.....
+/b/c///./a..../ /b/c/a....
+/b/c///./a.../a /b/c/a.../a
+/b/c///./a.../. /b/c/a...
+/b/c///./a...// /b/c/a...
+/b/c///./a../aa /b/c/a../aa
+/b/c///./a../a. /b/c/a../a.
+/b/c///./a../a/ /b/c/a../a
+/b/c///./a../.a /b/c/a../.a
+/b/c///./a../.. /b/c
+/b/c///./a.././ /b/c/a..
+/b/c///./a..//a /b/c/a../a
+/b/c///./a..//. /b/c/a..
+/b/c///./a../// /b/c/a..
+/b/c///./a./aaa /b/c/a./aaa
+/b/c///./a./aa. /b/c/a./aa.
+/b/c///./a./aa/ /b/c/a./aa
+/b/c///./a./a.a /b/c/a./a.a
+/b/c///./a./a.. /b/c/a./a..
+/b/c///./a./a./ /b/c/a./a.
+/b/c///./a./a/a /b/c/a./a/a
+/b/c///./a./a/. /b/c/a./a
+/b/c///./a./a// /b/c/a./a
+/b/c///./a./.aa /b/c/a./.aa
+/b/c///./a./.a. /b/c/a./.a.
+/b/c///./a./.a/ /b/c/a./.a
+/b/c///./a./..a /b/c/a./..a
+/b/c///./a./... /b/c/a./...
+/b/c///./a./../ /b/c
+/b/c///./a././a /b/c/a./a
+/b/c///./a././. /b/c/a.
+/b/c///./a./.// /b/c/a.
+/b/c///./a.//aa /b/c/a./aa
+/b/c///./a.//a. /b/c/a./a.
+/b/c///./a.//a/ /b/c/a./a
+/b/c///./a.//.a /b/c/a./.a
+/b/c///./a.//.. /b/c
+/b/c///./a.//./ /b/c/a.
+/b/c///./a.///a /b/c/a./a
+/b/c///./a.///. /b/c/a.
+/b/c///./a.//// /b/c/a.
+/b/c///./a/aaaa /b/c/a/aaaa
+/b/c///./a/aaa. /b/c/a/aaa.
+/b/c///./a/aaa/ /b/c/a/aaa
+/b/c///./a/aa.a /b/c/a/aa.a
+/b/c///./a/aa.. /b/c/a/aa..
+/b/c///./a/aa./ /b/c/a/aa.
+/b/c///./a/aa/a /b/c/a/aa/a
+/b/c///./a/aa/. /b/c/a/aa
+/b/c///./a/aa// /b/c/a/aa
+/b/c///./a/a.aa /b/c/a/a.aa
+/b/c///./a/a.a. /b/c/a/a.a.
+/b/c///./a/a.a/ /b/c/a/a.a
+/b/c///./a/a..a /b/c/a/a..a
+/b/c///./a/a... /b/c/a/a...
+/b/c///./a/a../ /b/c/a/a..
+/b/c///./a/a./a /b/c/a/a./a
+/b/c///./a/a./. /b/c/a/a.
+/b/c///./a/a.// /b/c/a/a.
+/b/c///./a/a/aa /b/c/a/a/aa
+/b/c///./a/a/a. /b/c/a/a/a.
+/b/c///./a/a/a/ /b/c/a/a/a
+/b/c///./a/a/.a /b/c/a/a/.a
+/b/c///./a/a/.. /b/c/a
+/b/c///./a/a/./ /b/c/a/a
+/b/c///./a/a//a /b/c/a/a/a
+/b/c///./a/a//. /b/c/a/a
+/b/c///./a/a/// /b/c/a/a
+/b/c///./a/.aaa /b/c/a/.aaa
+/b/c///./a/.aa. /b/c/a/.aa.
+/b/c///./a/.aa/ /b/c/a/.aa
+/b/c///./a/.a.a /b/c/a/.a.a
+/b/c///./a/.a.. /b/c/a/.a..
+/b/c///./a/.a./ /b/c/a/.a.
+/b/c///./a/.a/a /b/c/a/.a/a
+/b/c///./a/.a/. /b/c/a/.a
+/b/c///./a/.a// /b/c/a/.a
+/b/c///./a/..aa /b/c/a/..aa
+/b/c///./a/..a. /b/c/a/..a.
+/b/c///./a/..a/ /b/c/a/..a
+/b/c///./a/...a /b/c/a/...a
+/b/c///./a/.... /b/c/a/....
+/b/c///./a/.../ /b/c/a/...
+/b/c///./a/../a /b/c/a
+/b/c///./a/../. /b/c
+/b/c///./a/..// /b/c
+/b/c///./a/./aa /b/c/a/aa
+/b/c///./a/./a. /b/c/a/a.
+/b/c///./a/./a/ /b/c/a/a
+/b/c///./a/./.a /b/c/a/.a
+/b/c///./a/./.. /b/c
+/b/c///./a/././ /b/c/a
+/b/c///./a/.//a /b/c/a/a
+/b/c///./a/.//. /b/c/a
+/b/c///./a/./// /b/c/a
+/b/c///./a//aaa /b/c/a/aaa
+/b/c///./a//aa. /b/c/a/aa.
+/b/c///./a//aa/ /b/c/a/aa
+/b/c///./a//a.a /b/c/a/a.a
+/b/c///./a//a.. /b/c/a/a..
+/b/c///./a//a./ /b/c/a/a.
+/b/c///./a//a/a /b/c/a/a/a
+/b/c///./a//a/. /b/c/a/a
+/b/c///./a//a// /b/c/a/a
+/b/c///./a//.aa /b/c/a/.aa
+/b/c///./a//.a. /b/c/a/.a.
+/b/c///./a//.a/ /b/c/a/.a
+/b/c///./a//..a /b/c/a/..a
+/b/c///./a//... /b/c/a/...
+/b/c///./a//../ /b/c
+/b/c///./a//./a /b/c/a/a
+/b/c///./a//./. /b/c/a
+/b/c///./a//.// /b/c/a
+/b/c///./a///aa /b/c/a/aa
+/b/c///./a///a. /b/c/a/a.
+/b/c///./a///a/ /b/c/a/a
+/b/c///./a///.a /b/c/a/.a
+/b/c///./a///.. /b/c
+/b/c///./a///./ /b/c/a
+/b/c///./a////a /b/c/a/a
+/b/c///./a////. /b/c/a
+/b/c///./a///// /b/c/a
+/b/c///./.aaaaa /b/c/.aaaaa
+/b/c///./.aaaa. /b/c/.aaaa.
+/b/c///./.aaaa/ /b/c/.aaaa
+/b/c///./.aaa.a /b/c/.aaa.a
+/b/c///./.aaa.. /b/c/.aaa..
+/b/c///./.aaa./ /b/c/.aaa.
+/b/c///./.aaa/a /b/c/.aaa/a
+/b/c///./.aaa/. /b/c/.aaa
+/b/c///./.aaa// /b/c/.aaa
+/b/c///./.aa.aa /b/c/.aa.aa
+/b/c///./.aa.a. /b/c/.aa.a.
+/b/c///./.aa.a/ /b/c/.aa.a
+/b/c///./.aa..a /b/c/.aa..a
+/b/c///./.aa... /b/c/.aa...
+/b/c///./.aa../ /b/c/.aa..
+/b/c///./.aa./a /b/c/.aa./a
+/b/c///./.aa./. /b/c/.aa.
+/b/c///./.aa.// /b/c/.aa.
+/b/c///./.aa/aa /b/c/.aa/aa
+/b/c///./.aa/a. /b/c/.aa/a.
+/b/c///./.aa/a/ /b/c/.aa/a
+/b/c///./.aa/.a /b/c/.aa/.a
+/b/c///./.aa/.. /b/c
+/b/c///./.aa/./ /b/c/.aa
+/b/c///./.aa//a /b/c/.aa/a
+/b/c///./.aa//. /b/c/.aa
+/b/c///./.aa/// /b/c/.aa
+/b/c///./.a.aaa /b/c/.a.aaa
+/b/c///./.a.aa. /b/c/.a.aa.
+/b/c///./.a.aa/ /b/c/.a.aa
+/b/c///./.a.a.a /b/c/.a.a.a
+/b/c///./.a.a.. /b/c/.a.a..
+/b/c///./.a.a./ /b/c/.a.a.
+/b/c///./.a.a/a /b/c/.a.a/a
+/b/c///./.a.a/. /b/c/.a.a
+/b/c///./.a.a// /b/c/.a.a
+/b/c///./.a..aa /b/c/.a..aa
+/b/c///./.a..a. /b/c/.a..a.
+/b/c///./.a..a/ /b/c/.a..a
+/b/c///./.a...a /b/c/.a...a
+/b/c///./.a.... /b/c/.a....
+/b/c///./.a.../ /b/c/.a...
+/b/c///./.a../a /b/c/.a../a
+/b/c///./.a../. /b/c/.a..
+/b/c///./.a..// /b/c/.a..
+/b/c///./.a./aa /b/c/.a./aa
+/b/c///./.a./a. /b/c/.a./a.
+/b/c///./.a./a/ /b/c/.a./a
+/b/c///./.a./.a /b/c/.a./.a
+/b/c///./.a./.. /b/c
+/b/c///./.a././ /b/c/.a.
+/b/c///./.a.//a /b/c/.a./a
+/b/c///./.a.//. /b/c/.a.
+/b/c///./.a./// /b/c/.a.
+/b/c///./.a/aaa /b/c/.a/aaa
+/b/c///./.a/aa. /b/c/.a/aa.
+/b/c///./.a/aa/ /b/c/.a/aa
+/b/c///./.a/a.a /b/c/.a/a.a
+/b/c///./.a/a.. /b/c/.a/a..
+/b/c///./.a/a./ /b/c/.a/a.
+/b/c///./.a/a/a /b/c/.a/a/a
+/b/c///./.a/a/. /b/c/.a/a
+/b/c///./.a/a// /b/c/.a/a
+/b/c///./.a/.aa /b/c/.a/.aa
+/b/c///./.a/.a. /b/c/.a/.a.
+/b/c///./.a/.a/ /b/c/.a/.a
+/b/c///./.a/..a /b/c/.a/..a
+/b/c///./.a/... /b/c/.a/...
+/b/c///./.a/../ /b/c
+/b/c///./.a/./a /b/c/.a/a
+/b/c///./.a/./. /b/c/.a
+/b/c///./.a/.// /b/c/.a
+/b/c///./.a//aa /b/c/.a/aa
+/b/c///./.a//a. /b/c/.a/a.
+/b/c///./.a//a/ /b/c/.a/a
+/b/c///./.a//.a /b/c/.a/.a
+/b/c///./.a//.. /b/c
+/b/c///./.a//./ /b/c/.a
+/b/c///./.a///a /b/c/.a/a
+/b/c///./.a///. /b/c/.a
+/b/c///./.a//// /b/c/.a
+/b/c///./..aaaa /b/c/..aaaa
+/b/c///./..aaa. /b/c/..aaa.
+/b/c///./..aaa/ /b/c/..aaa
+/b/c///./..aa.a /b/c/..aa.a
+/b/c///./..aa.. /b/c/..aa..
+/b/c///./..aa./ /b/c/..aa.
+/b/c///./..aa/a /b/c/..aa/a
+/b/c///./..aa/. /b/c/..aa
+/b/c///./..aa// /b/c/..aa
+/b/c///./..a.aa /b/c/..a.aa
+/b/c///./..a.a. /b/c/..a.a.
+/b/c///./..a.a/ /b/c/..a.a
+/b/c///./..a..a /b/c/..a..a
+/b/c///./..a... /b/c/..a...
+/b/c///./..a../ /b/c/..a..
+/b/c///./..a./a /b/c/..a./a
+/b/c///./..a./. /b/c/..a.
+/b/c///./..a.// /b/c/..a.
+/b/c///./..a/aa /b/c/..a/aa
+/b/c///./..a/a. /b/c/..a/a.
+/b/c///./..a/a/ /b/c/..a/a
+/b/c///./..a/.a /b/c/..a/.a
+/b/c///./..a/.. /b/c
+/b/c///./..a/./ /b/c/..a
+/b/c///./..a//a /b/c/..a/a
+/b/c///./..a//. /b/c/..a
+/b/c///./..a/// /b/c/..a
+/b/c///./...aaa /b/c/...aaa
+/b/c///./...aa. /b/c/...aa.
+/b/c///./...aa/ /b/c/...aa
+/b/c///./...a.a /b/c/...a.a
+/b/c///./...a.. /b/c/...a..
+/b/c///./...a./ /b/c/...a.
+/b/c///./...a/a /b/c/...a/a
+/b/c///./...a/. /b/c/...a
+/b/c///./...a// /b/c/...a
+/b/c///./....aa /b/c/....aa
+/b/c///./....a. /b/c/....a.
+/b/c///./....a/ /b/c/....a
+/b/c///./.....a /b/c/.....a
+/b/c///./...... /b/c/......
+/b/c///./...../ /b/c/.....
+/b/c///./..../a /b/c/..../a
+/b/c///./..../. /b/c/....
+/b/c///./....// /b/c/....
+/b/c///./.../aa /b/c/.../aa
+/b/c///./.../a. /b/c/.../a.
+/b/c///./.../a/ /b/c/.../a
+/b/c///./.../.a /b/c/.../.a
+/b/c///./.../.. /b/c
+/b/c///./..././ /b/c/...
+/b/c///./...//a /b/c/.../a
+/b/c///./...//. /b/c/...
+/b/c///./.../// /b/c/...
+/b/c///./../aaa /b/aaa
+/b/c///./../aa. /b/aa.
+/b/c///./../aa/ /b/aa
+/b/c///./../a.a /b/a.a
+/b/c///./../a.. /b/a..
+/b/c///./../a./ /b/a.
+/b/c///./../a/a /b/a/a
+/b/c///./../a/. /b/a
+/b/c///./../a// /b/a
+/b/c///./../.aa /b/.aa
+/b/c///./../.a. /b/.a.
+/b/c///./../.a/ /b/.a
+/b/c///./../..a /b/..a
+/b/c///./../... /b/...
+/b/c///./../../ /
+/b/c///./.././a /b/a
+/b/c///./.././. /b
+/b/c///./../.// /b
+/b/c///./..//aa /b/aa
+/b/c///./..//a. /b/a.
+/b/c///./..//a/ /b/a
+/b/c///./..//.a /b/.a
+/b/c///./..//.. /
+/b/c///./..//./ /b
+/b/c///./..///a /b/a
+/b/c///./..///. /b
+/b/c///./..//// /b
+/b/c///././aaaa /b/c/aaaa
+/b/c///././aaa. /b/c/aaa.
+/b/c///././aaa/ /b/c/aaa
+/b/c///././aa.a /b/c/aa.a
+/b/c///././aa.. /b/c/aa..
+/b/c///././aa./ /b/c/aa.
+/b/c///././aa/a /b/c/aa/a
+/b/c///././aa/. /b/c/aa
+/b/c///././aa// /b/c/aa
+/b/c///././a.aa /b/c/a.aa
+/b/c///././a.a. /b/c/a.a.
+/b/c///././a.a/ /b/c/a.a
+/b/c///././a..a /b/c/a..a
+/b/c///././a... /b/c/a...
+/b/c///././a../ /b/c/a..
+/b/c///././a./a /b/c/a./a
+/b/c///././a./. /b/c/a.
+/b/c///././a.// /b/c/a.
+/b/c///././a/aa /b/c/a/aa
+/b/c///././a/a. /b/c/a/a.
+/b/c///././a/a/ /b/c/a/a
+/b/c///././a/.a /b/c/a/.a
+/b/c///././a/.. /b/c
+/b/c///././a/./ /b/c/a
+/b/c///././a//a /b/c/a/a
+/b/c///././a//. /b/c/a
+/b/c///././a/// /b/c/a
+/b/c///././.aaa /b/c/.aaa
+/b/c///././.aa. /b/c/.aa.
+/b/c///././.aa/ /b/c/.aa
+/b/c///././.a.a /b/c/.a.a
+/b/c///././.a.. /b/c/.a..
+/b/c///././.a./ /b/c/.a.
+/b/c///././.a/a /b/c/.a/a
+/b/c///././.a/. /b/c/.a
+/b/c///././.a// /b/c/.a
+/b/c///././..aa /b/c/..aa
+/b/c///././..a. /b/c/..a.
+/b/c///././..a/ /b/c/..a
+/b/c///././...a /b/c/...a
+/b/c///././.... /b/c/....
+/b/c///././.../ /b/c/...
+/b/c///././../a /b/a
+/b/c///././../. /b
+/b/c///././..// /b
+/b/c///./././aa /b/c/aa
+/b/c///./././a. /b/c/a.
+/b/c///./././a/ /b/c/a
+/b/c///./././.a /b/c/.a
+/b/c///./././.. /b
+/b/c///././././ /b/c
+/b/c///./././/a /b/c/a
+/b/c///./././/. /b/c
+/b/c///./././// /b/c
+/b/c///././/aaa /b/c/aaa
+/b/c///././/aa. /b/c/aa.
+/b/c///././/aa/ /b/c/aa
+/b/c///././/a.a /b/c/a.a
+/b/c///././/a.. /b/c/a..
+/b/c///././/a./ /b/c/a.
+/b/c///././/a/a /b/c/a/a
+/b/c///././/a/. /b/c/a
+/b/c///././/a// /b/c/a
+/b/c///././/.aa /b/c/.aa
+/b/c///././/.a. /b/c/.a.
+/b/c///././/.a/ /b/c/.a
+/b/c///././/..a /b/c/..a
+/b/c///././/... /b/c/...
+/b/c///././/../ /b
+/b/c///././/./a /b/c/a
+/b/c///././/./. /b/c
+/b/c///././/.// /b/c
+/b/c///././//aa /b/c/aa
+/b/c///././//a. /b/c/a.
+/b/c///././//a/ /b/c/a
+/b/c///././//.a /b/c/.a
+/b/c///././//.. /b
+/b/c///././//./ /b/c
+/b/c///././///a /b/c/a
+/b/c///././///. /b/c
+/b/c///././//// /b/c
+/b/c///.//aaaaa /b/c/aaaaa
+/b/c///.//aaaa. /b/c/aaaa.
+/b/c///.//aaaa/ /b/c/aaaa
+/b/c///.//aaa.a /b/c/aaa.a
+/b/c///.//aaa.. /b/c/aaa..
+/b/c///.//aaa./ /b/c/aaa.
+/b/c///.//aaa/a /b/c/aaa/a
+/b/c///.//aaa/. /b/c/aaa
+/b/c///.//aaa// /b/c/aaa
+/b/c///.//aa.aa /b/c/aa.aa
+/b/c///.//aa.a. /b/c/aa.a.
+/b/c///.//aa.a/ /b/c/aa.a
+/b/c///.//aa..a /b/c/aa..a
+/b/c///.//aa... /b/c/aa...
+/b/c///.//aa../ /b/c/aa..
+/b/c///.//aa./a /b/c/aa./a
+/b/c///.//aa./. /b/c/aa.
+/b/c///.//aa.// /b/c/aa.
+/b/c///.//aa/aa /b/c/aa/aa
+/b/c///.//aa/a. /b/c/aa/a.
+/b/c///.//aa/a/ /b/c/aa/a
+/b/c///.//aa/.a /b/c/aa/.a
+/b/c///.//aa/.. /b/c
+/b/c///.//aa/./ /b/c/aa
+/b/c///.//aa//a /b/c/aa/a
+/b/c///.//aa//. /b/c/aa
+/b/c///.//aa/// /b/c/aa
+/b/c///.//a.aaa /b/c/a.aaa
+/b/c///.//a.aa. /b/c/a.aa.
+/b/c///.//a.aa/ /b/c/a.aa
+/b/c///.//a.a.a /b/c/a.a.a
+/b/c///.//a.a.. /b/c/a.a..
+/b/c///.//a.a./ /b/c/a.a.
+/b/c///.//a.a/a /b/c/a.a/a
+/b/c///.//a.a/. /b/c/a.a
+/b/c///.//a.a// /b/c/a.a
+/b/c///.//a..aa /b/c/a..aa
+/b/c///.//a..a. /b/c/a..a.
+/b/c///.//a..a/ /b/c/a..a
+/b/c///.//a...a /b/c/a...a
+/b/c///.//a.... /b/c/a....
+/b/c///.//a.../ /b/c/a...
+/b/c///.//a../a /b/c/a../a
+/b/c///.//a../. /b/c/a..
+/b/c///.//a..// /b/c/a..
+/b/c///.//a./aa /b/c/a./aa
+/b/c///.//a./a. /b/c/a./a.
+/b/c///.//a./a/ /b/c/a./a
+/b/c///.//a./.a /b/c/a./.a
+/b/c///.//a./.. /b/c
+/b/c///.//a././ /b/c/a.
+/b/c///.//a.//a /b/c/a./a
+/b/c///.//a.//. /b/c/a.
+/b/c///.//a./// /b/c/a.
+/b/c///.//a/aaa /b/c/a/aaa
+/b/c///.//a/aa. /b/c/a/aa.
+/b/c///.//a/aa/ /b/c/a/aa
+/b/c///.//a/a.a /b/c/a/a.a
+/b/c///.//a/a.. /b/c/a/a..
+/b/c///.//a/a./ /b/c/a/a.
+/b/c///.//a/a/a /b/c/a/a/a
+/b/c///.//a/a/. /b/c/a/a
+/b/c///.//a/a// /b/c/a/a
+/b/c///.//a/.aa /b/c/a/.aa
+/b/c///.//a/.a. /b/c/a/.a.
+/b/c///.//a/.a/ /b/c/a/.a
+/b/c///.//a/..a /b/c/a/..a
+/b/c///.//a/... /b/c/a/...
+/b/c///.//a/../ /b/c
+/b/c///.//a/./a /b/c/a/a
+/b/c///.//a/./. /b/c/a
+/b/c///.//a/.// /b/c/a
+/b/c///.//a//aa /b/c/a/aa
+/b/c///.//a//a. /b/c/a/a.
+/b/c///.//a//a/ /b/c/a/a
+/b/c///.//a//.a /b/c/a/.a
+/b/c///.//a//.. /b/c
+/b/c///.//a//./ /b/c/a
+/b/c///.//a///a /b/c/a/a
+/b/c///.//a///. /b/c/a
+/b/c///.//a//// /b/c/a
+/b/c///.//.aaaa /b/c/.aaaa
+/b/c///.//.aaa. /b/c/.aaa.
+/b/c///.//.aaa/ /b/c/.aaa
+/b/c///.//.aa.a /b/c/.aa.a
+/b/c///.//.aa.. /b/c/.aa..
+/b/c///.//.aa./ /b/c/.aa.
+/b/c///.//.aa/a /b/c/.aa/a
+/b/c///.//.aa/. /b/c/.aa
+/b/c///.//.aa// /b/c/.aa
+/b/c///.//.a.aa /b/c/.a.aa
+/b/c///.//.a.a. /b/c/.a.a.
+/b/c///.//.a.a/ /b/c/.a.a
+/b/c///.//.a..a /b/c/.a..a
+/b/c///.//.a... /b/c/.a...
+/b/c///.//.a../ /b/c/.a..
+/b/c///.//.a./a /b/c/.a./a
+/b/c///.//.a./. /b/c/.a.
+/b/c///.//.a.// /b/c/.a.
+/b/c///.//.a/aa /b/c/.a/aa
+/b/c///.//.a/a. /b/c/.a/a.
+/b/c///.//.a/a/ /b/c/.a/a
+/b/c///.//.a/.a /b/c/.a/.a
+/b/c///.//.a/.. /b/c
+/b/c///.//.a/./ /b/c/.a
+/b/c///.//.a//a /b/c/.a/a
+/b/c///.//.a//. /b/c/.a
+/b/c///.//.a/// /b/c/.a
+/b/c///.//..aaa /b/c/..aaa
+/b/c///.//..aa. /b/c/..aa.
+/b/c///.//..aa/ /b/c/..aa
+/b/c///.//..a.a /b/c/..a.a
+/b/c///.//..a.. /b/c/..a..
+/b/c///.//..a./ /b/c/..a.
+/b/c///.//..a/a /b/c/..a/a
+/b/c///.//..a/. /b/c/..a
+/b/c///.//..a// /b/c/..a
+/b/c///.//...aa /b/c/...aa
+/b/c///.//...a. /b/c/...a.
+/b/c///.//...a/ /b/c/...a
+/b/c///.//....a /b/c/....a
+/b/c///.//..... /b/c/.....
+/b/c///.//..../ /b/c/....
+/b/c///.//.../a /b/c/.../a
+/b/c///.//.../. /b/c/...
+/b/c///.//...// /b/c/...
+/b/c///.//../aa /b/aa
+/b/c///.//../a. /b/a.
+/b/c///.//../a/ /b/a
+/b/c///.//../.a /b/.a
+/b/c///.//../.. /
+/b/c///.//.././ /b
+/b/c///.//..//a /b/a
+/b/c///.//..//. /b
+/b/c///.//../// /b
+/b/c///.//./aaa /b/c/aaa
+/b/c///.//./aa. /b/c/aa.
+/b/c///.//./aa/ /b/c/aa
+/b/c///.//./a.a /b/c/a.a
+/b/c///.//./a.. /b/c/a..
+/b/c///.//./a./ /b/c/a.
+/b/c///.//./a/a /b/c/a/a
+/b/c///.//./a/. /b/c/a
+/b/c///.//./a// /b/c/a
+/b/c///.//./.aa /b/c/.aa
+/b/c///.//./.a. /b/c/.a.
+/b/c///.//./.a/ /b/c/.a
+/b/c///.//./..a /b/c/..a
+/b/c///.//./... /b/c/...
+/b/c///.//./../ /b
+/b/c///.//././a /b/c/a
+/b/c///.//././. /b/c
+/b/c///.//./.// /b/c
+/b/c///.//.//aa /b/c/aa
+/b/c///.//.//a. /b/c/a.
+/b/c///.//.//a/ /b/c/a
+/b/c///.//.//.a /b/c/.a
+/b/c///.//.//.. /b
+/b/c///.//.//./ /b/c
+/b/c///.//.///a /b/c/a
+/b/c///.//.///. /b/c
+/b/c///.//.//// /b/c
+/b/c///.///aaaa /b/c/aaaa
+/b/c///.///aaa. /b/c/aaa.
+/b/c///.///aaa/ /b/c/aaa
+/b/c///.///aa.a /b/c/aa.a
+/b/c///.///aa.. /b/c/aa..
+/b/c///.///aa./ /b/c/aa.
+/b/c///.///aa/a /b/c/aa/a
+/b/c///.///aa/. /b/c/aa
+/b/c///.///aa// /b/c/aa
+/b/c///.///a.aa /b/c/a.aa
+/b/c///.///a.a. /b/c/a.a.
+/b/c///.///a.a/ /b/c/a.a
+/b/c///.///a..a /b/c/a..a
+/b/c///.///a... /b/c/a...
+/b/c///.///a../ /b/c/a..
+/b/c///.///a./a /b/c/a./a
+/b/c///.///a./. /b/c/a.
+/b/c///.///a.// /b/c/a.
+/b/c///.///a/aa /b/c/a/aa
+/b/c///.///a/a. /b/c/a/a.
+/b/c///.///a/a/ /b/c/a/a
+/b/c///.///a/.a /b/c/a/.a
+/b/c///.///a/.. /b/c
+/b/c///.///a/./ /b/c/a
+/b/c///.///a//a /b/c/a/a
+/b/c///.///a//. /b/c/a
+/b/c///.///a/// /b/c/a
+/b/c///.///.aaa /b/c/.aaa
+/b/c///.///.aa. /b/c/.aa.
+/b/c///.///.aa/ /b/c/.aa
+/b/c///.///.a.a /b/c/.a.a
+/b/c///.///.a.. /b/c/.a..
+/b/c///.///.a./ /b/c/.a.
+/b/c///.///.a/a /b/c/.a/a
+/b/c///.///.a/. /b/c/.a
+/b/c///.///.a// /b/c/.a
+/b/c///.///..aa /b/c/..aa
+/b/c///.///..a. /b/c/..a.
+/b/c///.///..a/ /b/c/..a
+/b/c///.///...a /b/c/...a
+/b/c///.///.... /b/c/....
+/b/c///.///.../ /b/c/...
+/b/c///.///../a /b/a
+/b/c///.///../. /b
+/b/c///.///..// /b
+/b/c///.///./aa /b/c/aa
+/b/c///.///./a. /b/c/a.
+/b/c///.///./a/ /b/c/a
+/b/c///.///./.a /b/c/.a
+/b/c///.///./.. /b
+/b/c///.///././ /b/c
+/b/c///.///.//a /b/c/a
+/b/c///.///.//. /b/c
+/b/c///.///./// /b/c
+/b/c///.////aaa /b/c/aaa
+/b/c///.////aa. /b/c/aa.
+/b/c///.////aa/ /b/c/aa
+/b/c///.////a.a /b/c/a.a
+/b/c///.////a.. /b/c/a..
+/b/c///.////a./ /b/c/a.
+/b/c///.////a/a /b/c/a/a
+/b/c///.////a/. /b/c/a
+/b/c///.////a// /b/c/a
+/b/c///.////.aa /b/c/.aa
+/b/c///.////.a. /b/c/.a.
+/b/c///.////.a/ /b/c/.a
+/b/c///.////..a /b/c/..a
+/b/c///.////... /b/c/...
+/b/c///.////../ /b
+/b/c///.////./a /b/c/a
+/b/c///.////./. /b/c
+/b/c///.////.// /b/c
+/b/c///./////aa /b/c/aa
+/b/c///./////a. /b/c/a.
+/b/c///./////a/ /b/c/a
+/b/c///./////.a /b/c/.a
+/b/c///./////.. /b
+/b/c///./////./ /b/c
+/b/c///.//////a /b/c/a
+/b/c///.//////. /b/c
+/b/c///./////// /b/c
+/b/c////aaaaaaa /b/c/aaaaaaa
+/b/c////aaaaaa. /b/c/aaaaaa.
+/b/c////aaaaaa/ /b/c/aaaaaa
+/b/c////aaaaa.a /b/c/aaaaa.a
+/b/c////aaaaa.. /b/c/aaaaa..
+/b/c////aaaaa./ /b/c/aaaaa.
+/b/c////aaaaa/a /b/c/aaaaa/a
+/b/c////aaaaa/. /b/c/aaaaa
+/b/c////aaaaa// /b/c/aaaaa
+/b/c////aaaa.aa /b/c/aaaa.aa
+/b/c////aaaa.a. /b/c/aaaa.a.
+/b/c////aaaa.a/ /b/c/aaaa.a
+/b/c////aaaa..a /b/c/aaaa..a
+/b/c////aaaa... /b/c/aaaa...
+/b/c////aaaa../ /b/c/aaaa..
+/b/c////aaaa./a /b/c/aaaa./a
+/b/c////aaaa./. /b/c/aaaa.
+/b/c////aaaa.// /b/c/aaaa.
+/b/c////aaaa/aa /b/c/aaaa/aa
+/b/c////aaaa/a. /b/c/aaaa/a.
+/b/c////aaaa/a/ /b/c/aaaa/a
+/b/c////aaaa/.a /b/c/aaaa/.a
+/b/c////aaaa/.. /b/c
+/b/c////aaaa/./ /b/c/aaaa
+/b/c////aaaa//a /b/c/aaaa/a
+/b/c////aaaa//. /b/c/aaaa
+/b/c////aaaa/// /b/c/aaaa
+/b/c////aaa.aaa /b/c/aaa.aaa
+/b/c////aaa.aa. /b/c/aaa.aa.
+/b/c////aaa.aa/ /b/c/aaa.aa
+/b/c////aaa.a.a /b/c/aaa.a.a
+/b/c////aaa.a.. /b/c/aaa.a..
+/b/c////aaa.a./ /b/c/aaa.a.
+/b/c////aaa.a/a /b/c/aaa.a/a
+/b/c////aaa.a/. /b/c/aaa.a
+/b/c////aaa.a// /b/c/aaa.a
+/b/c////aaa..aa /b/c/aaa..aa
+/b/c////aaa..a. /b/c/aaa..a.
+/b/c////aaa..a/ /b/c/aaa..a
+/b/c////aaa...a /b/c/aaa...a
+/b/c////aaa.... /b/c/aaa....
+/b/c////aaa.../ /b/c/aaa...
+/b/c////aaa../a /b/c/aaa../a
+/b/c////aaa../. /b/c/aaa..
+/b/c////aaa..// /b/c/aaa..
+/b/c////aaa./aa /b/c/aaa./aa
+/b/c////aaa./a. /b/c/aaa./a.
+/b/c////aaa./a/ /b/c/aaa./a
+/b/c////aaa./.a /b/c/aaa./.a
+/b/c////aaa./.. /b/c
+/b/c////aaa././ /b/c/aaa.
+/b/c////aaa.//a /b/c/aaa./a
+/b/c////aaa.//. /b/c/aaa.
+/b/c////aaa./// /b/c/aaa.
+/b/c////aaa/aaa /b/c/aaa/aaa
+/b/c////aaa/aa. /b/c/aaa/aa.
+/b/c////aaa/aa/ /b/c/aaa/aa
+/b/c////aaa/a.a /b/c/aaa/a.a
+/b/c////aaa/a.. /b/c/aaa/a..
+/b/c////aaa/a./ /b/c/aaa/a.
+/b/c////aaa/a/a /b/c/aaa/a/a
+/b/c////aaa/a/. /b/c/aaa/a
+/b/c////aaa/a// /b/c/aaa/a
+/b/c////aaa/.aa /b/c/aaa/.aa
+/b/c////aaa/.a. /b/c/aaa/.a.
+/b/c////aaa/.a/ /b/c/aaa/.a
+/b/c////aaa/..a /b/c/aaa/..a
+/b/c////aaa/... /b/c/aaa/...
+/b/c////aaa/../ /b/c
+/b/c////aaa/./a /b/c/aaa/a
+/b/c////aaa/./. /b/c/aaa
+/b/c////aaa/.// /b/c/aaa
+/b/c////aaa//aa /b/c/aaa/aa
+/b/c////aaa//a. /b/c/aaa/a.
+/b/c////aaa//a/ /b/c/aaa/a
+/b/c////aaa//.a /b/c/aaa/.a
+/b/c////aaa//.. /b/c
+/b/c////aaa//./ /b/c/aaa
+/b/c////aaa///a /b/c/aaa/a
+/b/c////aaa///. /b/c/aaa
+/b/c////aaa//// /b/c/aaa
+/b/c////aa.aaaa /b/c/aa.aaaa
+/b/c////aa.aaa. /b/c/aa.aaa.
+/b/c////aa.aaa/ /b/c/aa.aaa
+/b/c////aa.aa.a /b/c/aa.aa.a
+/b/c////aa.aa.. /b/c/aa.aa..
+/b/c////aa.aa./ /b/c/aa.aa.
+/b/c////aa.aa/a /b/c/aa.aa/a
+/b/c////aa.aa/. /b/c/aa.aa
+/b/c////aa.aa// /b/c/aa.aa
+/b/c////aa.a.aa /b/c/aa.a.aa
+/b/c////aa.a.a. /b/c/aa.a.a.
+/b/c////aa.a.a/ /b/c/aa.a.a
+/b/c////aa.a..a /b/c/aa.a..a
+/b/c////aa.a... /b/c/aa.a...
+/b/c////aa.a../ /b/c/aa.a..
+/b/c////aa.a./a /b/c/aa.a./a
+/b/c////aa.a./. /b/c/aa.a.
+/b/c////aa.a.// /b/c/aa.a.
+/b/c////aa.a/aa /b/c/aa.a/aa
+/b/c////aa.a/a. /b/c/aa.a/a.
+/b/c////aa.a/a/ /b/c/aa.a/a
+/b/c////aa.a/.a /b/c/aa.a/.a
+/b/c////aa.a/.. /b/c
+/b/c////aa.a/./ /b/c/aa.a
+/b/c////aa.a//a /b/c/aa.a/a
+/b/c////aa.a//. /b/c/aa.a
+/b/c////aa.a/// /b/c/aa.a
+/b/c////aa..aaa /b/c/aa..aaa
+/b/c////aa..aa. /b/c/aa..aa.
+/b/c////aa..aa/ /b/c/aa..aa
+/b/c////aa..a.a /b/c/aa..a.a
+/b/c////aa..a.. /b/c/aa..a..
+/b/c////aa..a./ /b/c/aa..a.
+/b/c////aa..a/a /b/c/aa..a/a
+/b/c////aa..a/. /b/c/aa..a
+/b/c////aa..a// /b/c/aa..a
+/b/c////aa...aa /b/c/aa...aa
+/b/c////aa...a. /b/c/aa...a.
+/b/c////aa...a/ /b/c/aa...a
+/b/c////aa....a /b/c/aa....a
+/b/c////aa..... /b/c/aa.....
+/b/c////aa..../ /b/c/aa....
+/b/c////aa.../a /b/c/aa.../a
+/b/c////aa.../. /b/c/aa...
+/b/c////aa...// /b/c/aa...
+/b/c////aa../aa /b/c/aa../aa
+/b/c////aa../a. /b/c/aa../a.
+/b/c////aa../a/ /b/c/aa../a
+/b/c////aa../.a /b/c/aa../.a
+/b/c////aa../.. /b/c
+/b/c////aa.././ /b/c/aa..
+/b/c////aa..//a /b/c/aa../a
+/b/c////aa..//. /b/c/aa..
+/b/c////aa../// /b/c/aa..
+/b/c////aa./aaa /b/c/aa./aaa
+/b/c////aa./aa. /b/c/aa./aa.
+/b/c////aa./aa/ /b/c/aa./aa
+/b/c////aa./a.a /b/c/aa./a.a
+/b/c////aa./a.. /b/c/aa./a..
+/b/c////aa./a./ /b/c/aa./a.
+/b/c////aa./a/a /b/c/aa./a/a
+/b/c////aa./a/. /b/c/aa./a
+/b/c////aa./a// /b/c/aa./a
+/b/c////aa./.aa /b/c/aa./.aa
+/b/c////aa./.a. /b/c/aa./.a.
+/b/c////aa./.a/ /b/c/aa./.a
+/b/c////aa./..a /b/c/aa./..a
+/b/c////aa./... /b/c/aa./...
+/b/c////aa./../ /b/c
+/b/c////aa././a /b/c/aa./a
+/b/c////aa././. /b/c/aa.
+/b/c////aa./.// /b/c/aa.
+/b/c////aa.//aa /b/c/aa./aa
+/b/c////aa.//a. /b/c/aa./a.
+/b/c////aa.//a/ /b/c/aa./a
+/b/c////aa.//.a /b/c/aa./.a
+/b/c////aa.//.. /b/c
+/b/c////aa.//./ /b/c/aa.
+/b/c////aa.///a /b/c/aa./a
+/b/c////aa.///. /b/c/aa.
+/b/c////aa.//// /b/c/aa.
+/b/c////aa/aaaa /b/c/aa/aaaa
+/b/c////aa/aaa. /b/c/aa/aaa.
+/b/c////aa/aaa/ /b/c/aa/aaa
+/b/c////aa/aa.a /b/c/aa/aa.a
+/b/c////aa/aa.. /b/c/aa/aa..
+/b/c////aa/aa./ /b/c/aa/aa.
+/b/c////aa/aa/a /b/c/aa/aa/a
+/b/c////aa/aa/. /b/c/aa/aa
+/b/c////aa/aa// /b/c/aa/aa
+/b/c////aa/a.aa /b/c/aa/a.aa
+/b/c////aa/a.a. /b/c/aa/a.a.
+/b/c////aa/a.a/ /b/c/aa/a.a
+/b/c////aa/a..a /b/c/aa/a..a
+/b/c////aa/a... /b/c/aa/a...
+/b/c////aa/a../ /b/c/aa/a..
+/b/c////aa/a./a /b/c/aa/a./a
+/b/c////aa/a./. /b/c/aa/a.
+/b/c////aa/a.// /b/c/aa/a.
+/b/c////aa/a/aa /b/c/aa/a/aa
+/b/c////aa/a/a. /b/c/aa/a/a.
+/b/c////aa/a/a/ /b/c/aa/a/a
+/b/c////aa/a/.a /b/c/aa/a/.a
+/b/c////aa/a/.. /b/c/aa
+/b/c////aa/a/./ /b/c/aa/a
+/b/c////aa/a//a /b/c/aa/a/a
+/b/c////aa/a//. /b/c/aa/a
+/b/c////aa/a/// /b/c/aa/a
+/b/c////aa/.aaa /b/c/aa/.aaa
+/b/c////aa/.aa. /b/c/aa/.aa.
+/b/c////aa/.aa/ /b/c/aa/.aa
+/b/c////aa/.a.a /b/c/aa/.a.a
+/b/c////aa/.a.. /b/c/aa/.a..
+/b/c////aa/.a./ /b/c/aa/.a.
+/b/c////aa/.a/a /b/c/aa/.a/a
+/b/c////aa/.a/. /b/c/aa/.a
+/b/c////aa/.a// /b/c/aa/.a
+/b/c////aa/..aa /b/c/aa/..aa
+/b/c////aa/..a. /b/c/aa/..a.
+/b/c////aa/..a/ /b/c/aa/..a
+/b/c////aa/...a /b/c/aa/...a
+/b/c////aa/.... /b/c/aa/....
+/b/c////aa/.../ /b/c/aa/...
+/b/c////aa/../a /b/c/a
+/b/c////aa/../. /b/c
+/b/c////aa/..// /b/c
+/b/c////aa/./aa /b/c/aa/aa
+/b/c////aa/./a. /b/c/aa/a.
+/b/c////aa/./a/ /b/c/aa/a
+/b/c////aa/./.a /b/c/aa/.a
+/b/c////aa/./.. /b/c
+/b/c////aa/././ /b/c/aa
+/b/c////aa/.//a /b/c/aa/a
+/b/c////aa/.//. /b/c/aa
+/b/c////aa/./// /b/c/aa
+/b/c////aa//aaa /b/c/aa/aaa
+/b/c////aa//aa. /b/c/aa/aa.
+/b/c////aa//aa/ /b/c/aa/aa
+/b/c////aa//a.a /b/c/aa/a.a
+/b/c////aa//a.. /b/c/aa/a..
+/b/c////aa//a./ /b/c/aa/a.
+/b/c////aa//a/a /b/c/aa/a/a
+/b/c////aa//a/. /b/c/aa/a
+/b/c////aa//a// /b/c/aa/a
+/b/c////aa//.aa /b/c/aa/.aa
+/b/c////aa//.a. /b/c/aa/.a.
+/b/c////aa//.a/ /b/c/aa/.a
+/b/c////aa//..a /b/c/aa/..a
+/b/c////aa//... /b/c/aa/...
+/b/c////aa//../ /b/c
+/b/c////aa//./a /b/c/aa/a
+/b/c////aa//./. /b/c/aa
+/b/c////aa//.// /b/c/aa
+/b/c////aa///aa /b/c/aa/aa
+/b/c////aa///a. /b/c/aa/a.
+/b/c////aa///a/ /b/c/aa/a
+/b/c////aa///.a /b/c/aa/.a
+/b/c////aa///.. /b/c
+/b/c////aa///./ /b/c/aa
+/b/c////aa////a /b/c/aa/a
+/b/c////aa////. /b/c/aa
+/b/c////aa///// /b/c/aa
+/b/c////a.aaaaa /b/c/a.aaaaa
+/b/c////a.aaaa. /b/c/a.aaaa.
+/b/c////a.aaaa/ /b/c/a.aaaa
+/b/c////a.aaa.a /b/c/a.aaa.a
+/b/c////a.aaa.. /b/c/a.aaa..
+/b/c////a.aaa./ /b/c/a.aaa.
+/b/c////a.aaa/a /b/c/a.aaa/a
+/b/c////a.aaa/. /b/c/a.aaa
+/b/c////a.aaa// /b/c/a.aaa
+/b/c////a.aa.aa /b/c/a.aa.aa
+/b/c////a.aa.a. /b/c/a.aa.a.
+/b/c////a.aa.a/ /b/c/a.aa.a
+/b/c////a.aa..a /b/c/a.aa..a
+/b/c////a.aa... /b/c/a.aa...
+/b/c////a.aa../ /b/c/a.aa..
+/b/c////a.aa./a /b/c/a.aa./a
+/b/c////a.aa./. /b/c/a.aa.
+/b/c////a.aa.// /b/c/a.aa.
+/b/c////a.aa/aa /b/c/a.aa/aa
+/b/c////a.aa/a. /b/c/a.aa/a.
+/b/c////a.aa/a/ /b/c/a.aa/a
+/b/c////a.aa/.a /b/c/a.aa/.a
+/b/c////a.aa/.. /b/c
+/b/c////a.aa/./ /b/c/a.aa
+/b/c////a.aa//a /b/c/a.aa/a
+/b/c////a.aa//. /b/c/a.aa
+/b/c////a.aa/// /b/c/a.aa
+/b/c////a.a.aaa /b/c/a.a.aaa
+/b/c////a.a.aa. /b/c/a.a.aa.
+/b/c////a.a.aa/ /b/c/a.a.aa
+/b/c////a.a.a.a /b/c/a.a.a.a
+/b/c////a.a.a.. /b/c/a.a.a..
+/b/c////a.a.a./ /b/c/a.a.a.
+/b/c////a.a.a/a /b/c/a.a.a/a
+/b/c////a.a.a/. /b/c/a.a.a
+/b/c////a.a.a// /b/c/a.a.a
+/b/c////a.a..aa /b/c/a.a..aa
+/b/c////a.a..a. /b/c/a.a..a.
+/b/c////a.a..a/ /b/c/a.a..a
+/b/c////a.a...a /b/c/a.a...a
+/b/c////a.a.... /b/c/a.a....
+/b/c////a.a.../ /b/c/a.a...
+/b/c////a.a../a /b/c/a.a../a
+/b/c////a.a../. /b/c/a.a..
+/b/c////a.a..// /b/c/a.a..
+/b/c////a.a./aa /b/c/a.a./aa
+/b/c////a.a./a. /b/c/a.a./a.
+/b/c////a.a./a/ /b/c/a.a./a
+/b/c////a.a./.a /b/c/a.a./.a
+/b/c////a.a./.. /b/c
+/b/c////a.a././ /b/c/a.a.
+/b/c////a.a.//a /b/c/a.a./a
+/b/c////a.a.//. /b/c/a.a.
+/b/c////a.a./// /b/c/a.a.
+/b/c////a.a/aaa /b/c/a.a/aaa
+/b/c////a.a/aa. /b/c/a.a/aa.
+/b/c////a.a/aa/ /b/c/a.a/aa
+/b/c////a.a/a.a /b/c/a.a/a.a
+/b/c////a.a/a.. /b/c/a.a/a..
+/b/c////a.a/a./ /b/c/a.a/a.
+/b/c////a.a/a/a /b/c/a.a/a/a
+/b/c////a.a/a/. /b/c/a.a/a
+/b/c////a.a/a// /b/c/a.a/a
+/b/c////a.a/.aa /b/c/a.a/.aa
+/b/c////a.a/.a. /b/c/a.a/.a.
+/b/c////a.a/.a/ /b/c/a.a/.a
+/b/c////a.a/..a /b/c/a.a/..a
+/b/c////a.a/... /b/c/a.a/...
+/b/c////a.a/../ /b/c
+/b/c////a.a/./a /b/c/a.a/a
+/b/c////a.a/./. /b/c/a.a
+/b/c////a.a/.// /b/c/a.a
+/b/c////a.a//aa /b/c/a.a/aa
+/b/c////a.a//a. /b/c/a.a/a.
+/b/c////a.a//a/ /b/c/a.a/a
+/b/c////a.a//.a /b/c/a.a/.a
+/b/c////a.a//.. /b/c
+/b/c////a.a//./ /b/c/a.a
+/b/c////a.a///a /b/c/a.a/a
+/b/c////a.a///. /b/c/a.a
+/b/c////a.a//// /b/c/a.a
+/b/c////a..aaaa /b/c/a..aaaa
+/b/c////a..aaa. /b/c/a..aaa.
+/b/c////a..aaa/ /b/c/a..aaa
+/b/c////a..aa.a /b/c/a..aa.a
+/b/c////a..aa.. /b/c/a..aa..
+/b/c////a..aa./ /b/c/a..aa.
+/b/c////a..aa/a /b/c/a..aa/a
+/b/c////a..aa/. /b/c/a..aa
+/b/c////a..aa// /b/c/a..aa
+/b/c////a..a.aa /b/c/a..a.aa
+/b/c////a..a.a. /b/c/a..a.a.
+/b/c////a..a.a/ /b/c/a..a.a
+/b/c////a..a..a /b/c/a..a..a
+/b/c////a..a... /b/c/a..a...
+/b/c////a..a../ /b/c/a..a..
+/b/c////a..a./a /b/c/a..a./a
+/b/c////a..a./. /b/c/a..a.
+/b/c////a..a.// /b/c/a..a.
+/b/c////a..a/aa /b/c/a..a/aa
+/b/c////a..a/a. /b/c/a..a/a.
+/b/c////a..a/a/ /b/c/a..a/a
+/b/c////a..a/.a /b/c/a..a/.a
+/b/c////a..a/.. /b/c
+/b/c////a..a/./ /b/c/a..a
+/b/c////a..a//a /b/c/a..a/a
+/b/c////a..a//. /b/c/a..a
+/b/c////a..a/// /b/c/a..a
+/b/c////a...aaa /b/c/a...aaa
+/b/c////a...aa. /b/c/a...aa.
+/b/c////a...aa/ /b/c/a...aa
+/b/c////a...a.a /b/c/a...a.a
+/b/c////a...a.. /b/c/a...a..
+/b/c////a...a./ /b/c/a...a.
+/b/c////a...a/a /b/c/a...a/a
+/b/c////a...a/. /b/c/a...a
+/b/c////a...a// /b/c/a...a
+/b/c////a....aa /b/c/a....aa
+/b/c////a....a. /b/c/a....a.
+/b/c////a....a/ /b/c/a....a
+/b/c////a.....a /b/c/a.....a
+/b/c////a...... /b/c/a......
+/b/c////a...../ /b/c/a.....
+/b/c////a..../a /b/c/a..../a
+/b/c////a..../. /b/c/a....
+/b/c////a....// /b/c/a....
+/b/c////a.../aa /b/c/a.../aa
+/b/c////a.../a. /b/c/a.../a.
+/b/c////a.../a/ /b/c/a.../a
+/b/c////a.../.a /b/c/a.../.a
+/b/c////a.../.. /b/c
+/b/c////a..././ /b/c/a...
+/b/c////a...//a /b/c/a.../a
+/b/c////a...//. /b/c/a...
+/b/c////a.../// /b/c/a...
+/b/c////a../aaa /b/c/a../aaa
+/b/c////a../aa. /b/c/a../aa.
+/b/c////a../aa/ /b/c/a../aa
+/b/c////a../a.a /b/c/a../a.a
+/b/c////a../a.. /b/c/a../a..
+/b/c////a../a./ /b/c/a../a.
+/b/c////a../a/a /b/c/a../a/a
+/b/c////a../a/. /b/c/a../a
+/b/c////a../a// /b/c/a../a
+/b/c////a../.aa /b/c/a../.aa
+/b/c////a../.a. /b/c/a../.a.
+/b/c////a../.a/ /b/c/a../.a
+/b/c////a../..a /b/c/a../..a
+/b/c////a../... /b/c/a../...
+/b/c////a../../ /b/c
+/b/c////a.././a /b/c/a../a
+/b/c////a.././. /b/c/a..
+/b/c////a../.// /b/c/a..
+/b/c////a..//aa /b/c/a../aa
+/b/c////a..//a. /b/c/a../a.
+/b/c////a..//a/ /b/c/a../a
+/b/c////a..//.a /b/c/a../.a
+/b/c////a..//.. /b/c
+/b/c////a..//./ /b/c/a..
+/b/c////a..///a /b/c/a../a
+/b/c////a..///. /b/c/a..
+/b/c////a..//// /b/c/a..
+/b/c////a./aaaa /b/c/a./aaaa
+/b/c////a./aaa. /b/c/a./aaa.
+/b/c////a./aaa/ /b/c/a./aaa
+/b/c////a./aa.a /b/c/a./aa.a
+/b/c////a./aa.. /b/c/a./aa..
+/b/c////a./aa./ /b/c/a./aa.
+/b/c////a./aa/a /b/c/a./aa/a
+/b/c////a./aa/. /b/c/a./aa
+/b/c////a./aa// /b/c/a./aa
+/b/c////a./a.aa /b/c/a./a.aa
+/b/c////a./a.a. /b/c/a./a.a.
+/b/c////a./a.a/ /b/c/a./a.a
+/b/c////a./a..a /b/c/a./a..a
+/b/c////a./a... /b/c/a./a...
+/b/c////a./a../ /b/c/a./a..
+/b/c////a./a./a /b/c/a./a./a
+/b/c////a./a./. /b/c/a./a.
+/b/c////a./a.// /b/c/a./a.
+/b/c////a./a/aa /b/c/a./a/aa
+/b/c////a./a/a. /b/c/a./a/a.
+/b/c////a./a/a/ /b/c/a./a/a
+/b/c////a./a/.a /b/c/a./a/.a
+/b/c////a./a/.. /b/c/a.
+/b/c////a./a/./ /b/c/a./a
+/b/c////a./a//a /b/c/a./a/a
+/b/c////a./a//. /b/c/a./a
+/b/c////a./a/// /b/c/a./a
+/b/c////a./.aaa /b/c/a./.aaa
+/b/c////a./.aa. /b/c/a./.aa.
+/b/c////a./.aa/ /b/c/a./.aa
+/b/c////a./.a.a /b/c/a./.a.a
+/b/c////a./.a.. /b/c/a./.a..
+/b/c////a./.a./ /b/c/a./.a.
+/b/c////a./.a/a /b/c/a./.a/a
+/b/c////a./.a/. /b/c/a./.a
+/b/c////a./.a// /b/c/a./.a
+/b/c////a./..aa /b/c/a./..aa
+/b/c////a./..a. /b/c/a./..a.
+/b/c////a./..a/ /b/c/a./..a
+/b/c////a./...a /b/c/a./...a
+/b/c////a./.... /b/c/a./....
+/b/c////a./.../ /b/c/a./...
+/b/c////a./../a /b/c/a
+/b/c////a./../. /b/c
+/b/c////a./..// /b/c
+/b/c////a././aa /b/c/a./aa
+/b/c////a././a. /b/c/a./a.
+/b/c////a././a/ /b/c/a./a
+/b/c////a././.a /b/c/a./.a
+/b/c////a././.. /b/c
+/b/c////a./././ /b/c/a.
+/b/c////a././/a /b/c/a./a
+/b/c////a././/. /b/c/a.
+/b/c////a././// /b/c/a.
+/b/c////a.//aaa /b/c/a./aaa
+/b/c////a.//aa. /b/c/a./aa.
+/b/c////a.//aa/ /b/c/a./aa
+/b/c////a.//a.a /b/c/a./a.a
+/b/c////a.//a.. /b/c/a./a..
+/b/c////a.//a./ /b/c/a./a.
+/b/c////a.//a/a /b/c/a./a/a
+/b/c////a.//a/. /b/c/a./a
+/b/c////a.//a// /b/c/a./a
+/b/c////a.//.aa /b/c/a./.aa
+/b/c////a.//.a. /b/c/a./.a.
+/b/c////a.//.a/ /b/c/a./.a
+/b/c////a.//..a /b/c/a./..a
+/b/c////a.//... /b/c/a./...
+/b/c////a.//../ /b/c
+/b/c////a.//./a /b/c/a./a
+/b/c////a.//./. /b/c/a.
+/b/c////a.//.// /b/c/a.
+/b/c////a.///aa /b/c/a./aa
+/b/c////a.///a. /b/c/a./a.
+/b/c////a.///a/ /b/c/a./a
+/b/c////a.///.a /b/c/a./.a
+/b/c////a.///.. /b/c
+/b/c////a.///./ /b/c/a.
+/b/c////a.////a /b/c/a./a
+/b/c////a.////. /b/c/a.
+/b/c////a.///// /b/c/a.
+/b/c////a/aaaaa /b/c/a/aaaaa
+/b/c////a/aaaa. /b/c/a/aaaa.
+/b/c////a/aaaa/ /b/c/a/aaaa
+/b/c////a/aaa.a /b/c/a/aaa.a
+/b/c////a/aaa.. /b/c/a/aaa..
+/b/c////a/aaa./ /b/c/a/aaa.
+/b/c////a/aaa/a /b/c/a/aaa/a
+/b/c////a/aaa/. /b/c/a/aaa
+/b/c////a/aaa// /b/c/a/aaa
+/b/c////a/aa.aa /b/c/a/aa.aa
+/b/c////a/aa.a. /b/c/a/aa.a.
+/b/c////a/aa.a/ /b/c/a/aa.a
+/b/c////a/aa..a /b/c/a/aa..a
+/b/c////a/aa... /b/c/a/aa...
+/b/c////a/aa../ /b/c/a/aa..
+/b/c////a/aa./a /b/c/a/aa./a
+/b/c////a/aa./. /b/c/a/aa.
+/b/c////a/aa.// /b/c/a/aa.
+/b/c////a/aa/aa /b/c/a/aa/aa
+/b/c////a/aa/a. /b/c/a/aa/a.
+/b/c////a/aa/a/ /b/c/a/aa/a
+/b/c////a/aa/.a /b/c/a/aa/.a
+/b/c////a/aa/.. /b/c/a
+/b/c////a/aa/./ /b/c/a/aa
+/b/c////a/aa//a /b/c/a/aa/a
+/b/c////a/aa//. /b/c/a/aa
+/b/c////a/aa/// /b/c/a/aa
+/b/c////a/a.aaa /b/c/a/a.aaa
+/b/c////a/a.aa. /b/c/a/a.aa.
+/b/c////a/a.aa/ /b/c/a/a.aa
+/b/c////a/a.a.a /b/c/a/a.a.a
+/b/c////a/a.a.. /b/c/a/a.a..
+/b/c////a/a.a./ /b/c/a/a.a.
+/b/c////a/a.a/a /b/c/a/a.a/a
+/b/c////a/a.a/. /b/c/a/a.a
+/b/c////a/a.a// /b/c/a/a.a
+/b/c////a/a..aa /b/c/a/a..aa
+/b/c////a/a..a. /b/c/a/a..a.
+/b/c////a/a..a/ /b/c/a/a..a
+/b/c////a/a...a /b/c/a/a...a
+/b/c////a/a.... /b/c/a/a....
+/b/c////a/a.../ /b/c/a/a...
+/b/c////a/a../a /b/c/a/a../a
+/b/c////a/a../. /b/c/a/a..
+/b/c////a/a..// /b/c/a/a..
+/b/c////a/a./aa /b/c/a/a./aa
+/b/c////a/a./a. /b/c/a/a./a.
+/b/c////a/a./a/ /b/c/a/a./a
+/b/c////a/a./.a /b/c/a/a./.a
+/b/c////a/a./.. /b/c/a
+/b/c////a/a././ /b/c/a/a.
+/b/c////a/a.//a /b/c/a/a./a
+/b/c////a/a.//. /b/c/a/a.
+/b/c////a/a./// /b/c/a/a.
+/b/c////a/a/aaa /b/c/a/a/aaa
+/b/c////a/a/aa. /b/c/a/a/aa.
+/b/c////a/a/aa/ /b/c/a/a/aa
+/b/c////a/a/a.a /b/c/a/a/a.a
+/b/c////a/a/a.. /b/c/a/a/a..
+/b/c////a/a/a./ /b/c/a/a/a.
+/b/c////a/a/a/a /b/c/a/a/a/a
+/b/c////a/a/a/. /b/c/a/a/a
+/b/c////a/a/a// /b/c/a/a/a
+/b/c////a/a/.aa /b/c/a/a/.aa
+/b/c////a/a/.a. /b/c/a/a/.a.
+/b/c////a/a/.a/ /b/c/a/a/.a
+/b/c////a/a/..a /b/c/a/a/..a
+/b/c////a/a/... /b/c/a/a/...
+/b/c////a/a/../ /b/c/a
+/b/c////a/a/./a /b/c/a/a/a
+/b/c////a/a/./. /b/c/a/a
+/b/c////a/a/.// /b/c/a/a
+/b/c////a/a//aa /b/c/a/a/aa
+/b/c////a/a//a. /b/c/a/a/a.
+/b/c////a/a//a/ /b/c/a/a/a
+/b/c////a/a//.a /b/c/a/a/.a
+/b/c////a/a//.. /b/c/a
+/b/c////a/a//./ /b/c/a/a
+/b/c////a/a///a /b/c/a/a/a
+/b/c////a/a///. /b/c/a/a
+/b/c////a/a//// /b/c/a/a
+/b/c////a/.aaaa /b/c/a/.aaaa
+/b/c////a/.aaa. /b/c/a/.aaa.
+/b/c////a/.aaa/ /b/c/a/.aaa
+/b/c////a/.aa.a /b/c/a/.aa.a
+/b/c////a/.aa.. /b/c/a/.aa..
+/b/c////a/.aa./ /b/c/a/.aa.
+/b/c////a/.aa/a /b/c/a/.aa/a
+/b/c////a/.aa/. /b/c/a/.aa
+/b/c////a/.aa// /b/c/a/.aa
+/b/c////a/.a.aa /b/c/a/.a.aa
+/b/c////a/.a.a. /b/c/a/.a.a.
+/b/c////a/.a.a/ /b/c/a/.a.a
+/b/c////a/.a..a /b/c/a/.a..a
+/b/c////a/.a... /b/c/a/.a...
+/b/c////a/.a../ /b/c/a/.a..
+/b/c////a/.a./a /b/c/a/.a./a
+/b/c////a/.a./. /b/c/a/.a.
+/b/c////a/.a.// /b/c/a/.a.
+/b/c////a/.a/aa /b/c/a/.a/aa
+/b/c////a/.a/a. /b/c/a/.a/a.
+/b/c////a/.a/a/ /b/c/a/.a/a
+/b/c////a/.a/.a /b/c/a/.a/.a
+/b/c////a/.a/.. /b/c/a
+/b/c////a/.a/./ /b/c/a/.a
+/b/c////a/.a//a /b/c/a/.a/a
+/b/c////a/.a//. /b/c/a/.a
+/b/c////a/.a/// /b/c/a/.a
+/b/c////a/..aaa /b/c/a/..aaa
+/b/c////a/..aa. /b/c/a/..aa.
+/b/c////a/..aa/ /b/c/a/..aa
+/b/c////a/..a.a /b/c/a/..a.a
+/b/c////a/..a.. /b/c/a/..a..
+/b/c////a/..a./ /b/c/a/..a.
+/b/c////a/..a/a /b/c/a/..a/a
+/b/c////a/..a/. /b/c/a/..a
+/b/c////a/..a// /b/c/a/..a
+/b/c////a/...aa /b/c/a/...aa
+/b/c////a/...a. /b/c/a/...a.
+/b/c////a/...a/ /b/c/a/...a
+/b/c////a/....a /b/c/a/....a
+/b/c////a/..... /b/c/a/.....
+/b/c////a/..../ /b/c/a/....
+/b/c////a/.../a /b/c/a/.../a
+/b/c////a/.../. /b/c/a/...
+/b/c////a/...// /b/c/a/...
+/b/c////a/../aa /b/c/aa
+/b/c////a/../a. /b/c/a.
+/b/c////a/../a/ /b/c/a
+/b/c////a/../.a /b/c/.a
+/b/c////a/../.. /b
+/b/c////a/.././ /b/c
+/b/c////a/..//a /b/c/a
+/b/c////a/..//. /b/c
+/b/c////a/../// /b/c
+/b/c////a/./aaa /b/c/a/aaa
+/b/c////a/./aa. /b/c/a/aa.
+/b/c////a/./aa/ /b/c/a/aa
+/b/c////a/./a.a /b/c/a/a.a
+/b/c////a/./a.. /b/c/a/a..
+/b/c////a/./a./ /b/c/a/a.
+/b/c////a/./a/a /b/c/a/a/a
+/b/c////a/./a/. /b/c/a/a
+/b/c////a/./a// /b/c/a/a
+/b/c////a/./.aa /b/c/a/.aa
+/b/c////a/./.a. /b/c/a/.a.
+/b/c////a/./.a/ /b/c/a/.a
+/b/c////a/./..a /b/c/a/..a
+/b/c////a/./... /b/c/a/...
+/b/c////a/./../ /b/c
+/b/c////a/././a /b/c/a/a
+/b/c////a/././. /b/c/a
+/b/c////a/./.// /b/c/a
+/b/c////a/.//aa /b/c/a/aa
+/b/c////a/.//a. /b/c/a/a.
+/b/c////a/.//a/ /b/c/a/a
+/b/c////a/.//.a /b/c/a/.a
+/b/c////a/.//.. /b/c
+/b/c////a/.//./ /b/c/a
+/b/c////a/.///a /b/c/a/a
+/b/c////a/.///. /b/c/a
+/b/c////a/.//// /b/c/a
+/b/c////a//aaaa /b/c/a/aaaa
+/b/c////a//aaa. /b/c/a/aaa.
+/b/c////a//aaa/ /b/c/a/aaa
+/b/c////a//aa.a /b/c/a/aa.a
+/b/c////a//aa.. /b/c/a/aa..
+/b/c////a//aa./ /b/c/a/aa.
+/b/c////a//aa/a /b/c/a/aa/a
+/b/c////a//aa/. /b/c/a/aa
+/b/c////a//aa// /b/c/a/aa
+/b/c////a//a.aa /b/c/a/a.aa
+/b/c////a//a.a. /b/c/a/a.a.
+/b/c////a//a.a/ /b/c/a/a.a
+/b/c////a//a..a /b/c/a/a..a
+/b/c////a//a... /b/c/a/a...
+/b/c////a//a../ /b/c/a/a..
+/b/c////a//a./a /b/c/a/a./a
+/b/c////a//a./. /b/c/a/a.
+/b/c////a//a.// /b/c/a/a.
+/b/c////a//a/aa /b/c/a/a/aa
+/b/c////a//a/a. /b/c/a/a/a.
+/b/c////a//a/a/ /b/c/a/a/a
+/b/c////a//a/.a /b/c/a/a/.a
+/b/c////a//a/.. /b/c/a
+/b/c////a//a/./ /b/c/a/a
+/b/c////a//a//a /b/c/a/a/a
+/b/c////a//a//. /b/c/a/a
+/b/c////a//a/// /b/c/a/a
+/b/c////a//.aaa /b/c/a/.aaa
+/b/c////a//.aa. /b/c/a/.aa.
+/b/c////a//.aa/ /b/c/a/.aa
+/b/c////a//.a.a /b/c/a/.a.a
+/b/c////a//.a.. /b/c/a/.a..
+/b/c////a//.a./ /b/c/a/.a.
+/b/c////a//.a/a /b/c/a/.a/a
+/b/c////a//.a/. /b/c/a/.a
+/b/c////a//.a// /b/c/a/.a
+/b/c////a//..aa /b/c/a/..aa
+/b/c////a//..a. /b/c/a/..a.
+/b/c////a//..a/ /b/c/a/..a
+/b/c////a//...a /b/c/a/...a
+/b/c////a//.... /b/c/a/....
+/b/c////a//.../ /b/c/a/...
+/b/c////a//../a /b/c/a
+/b/c////a//../. /b/c
+/b/c////a//..// /b/c
+/b/c////a//./aa /b/c/a/aa
+/b/c////a//./a. /b/c/a/a.
+/b/c////a//./a/ /b/c/a/a
+/b/c////a//./.a /b/c/a/.a
+/b/c////a//./.. /b/c
+/b/c////a//././ /b/c/a
+/b/c////a//.//a /b/c/a/a
+/b/c////a//.//. /b/c/a
+/b/c////a//./// /b/c/a
+/b/c////a///aaa /b/c/a/aaa
+/b/c////a///aa. /b/c/a/aa.
+/b/c////a///aa/ /b/c/a/aa
+/b/c////a///a.a /b/c/a/a.a
+/b/c////a///a.. /b/c/a/a..
+/b/c////a///a./ /b/c/a/a.
+/b/c////a///a/a /b/c/a/a/a
+/b/c////a///a/. /b/c/a/a
+/b/c////a///a// /b/c/a/a
+/b/c////a///.aa /b/c/a/.aa
+/b/c////a///.a. /b/c/a/.a.
+/b/c////a///.a/ /b/c/a/.a
+/b/c////a///..a /b/c/a/..a
+/b/c////a///... /b/c/a/...
+/b/c////a///../ /b/c
+/b/c////a///./a /b/c/a/a
+/b/c////a///./. /b/c/a
+/b/c////a///.// /b/c/a
+/b/c////a////aa /b/c/a/aa
+/b/c////a////a. /b/c/a/a.
+/b/c////a////a/ /b/c/a/a
+/b/c////a////.a /b/c/a/.a
+/b/c////a////.. /b/c
+/b/c////a////./ /b/c/a
+/b/c////a/////a /b/c/a/a
+/b/c////a/////. /b/c/a
+/b/c////a////// /b/c/a
+/b/c////.aaaaaa /b/c/.aaaaaa
+/b/c////.aaaaa. /b/c/.aaaaa.
+/b/c////.aaaaa/ /b/c/.aaaaa
+/b/c////.aaaa.a /b/c/.aaaa.a
+/b/c////.aaaa.. /b/c/.aaaa..
+/b/c////.aaaa./ /b/c/.aaaa.
+/b/c////.aaaa/a /b/c/.aaaa/a
+/b/c////.aaaa/. /b/c/.aaaa
+/b/c////.aaaa// /b/c/.aaaa
+/b/c////.aaa.aa /b/c/.aaa.aa
+/b/c////.aaa.a. /b/c/.aaa.a.
+/b/c////.aaa.a/ /b/c/.aaa.a
+/b/c////.aaa..a /b/c/.aaa..a
+/b/c////.aaa... /b/c/.aaa...
+/b/c////.aaa../ /b/c/.aaa..
+/b/c////.aaa./a /b/c/.aaa./a
+/b/c////.aaa./. /b/c/.aaa.
+/b/c////.aaa.// /b/c/.aaa.
+/b/c////.aaa/aa /b/c/.aaa/aa
+/b/c////.aaa/a. /b/c/.aaa/a.
+/b/c////.aaa/a/ /b/c/.aaa/a
+/b/c////.aaa/.a /b/c/.aaa/.a
+/b/c////.aaa/.. /b/c
+/b/c////.aaa/./ /b/c/.aaa
+/b/c////.aaa//a /b/c/.aaa/a
+/b/c////.aaa//. /b/c/.aaa
+/b/c////.aaa/// /b/c/.aaa
+/b/c////.aa.aaa /b/c/.aa.aaa
+/b/c////.aa.aa. /b/c/.aa.aa.
+/b/c////.aa.aa/ /b/c/.aa.aa
+/b/c////.aa.a.a /b/c/.aa.a.a
+/b/c////.aa.a.. /b/c/.aa.a..
+/b/c////.aa.a./ /b/c/.aa.a.
+/b/c////.aa.a/a /b/c/.aa.a/a
+/b/c////.aa.a/. /b/c/.aa.a
+/b/c////.aa.a// /b/c/.aa.a
+/b/c////.aa..aa /b/c/.aa..aa
+/b/c////.aa..a. /b/c/.aa..a.
+/b/c////.aa..a/ /b/c/.aa..a
+/b/c////.aa...a /b/c/.aa...a
+/b/c////.aa.... /b/c/.aa....
+/b/c////.aa.../ /b/c/.aa...
+/b/c////.aa../a /b/c/.aa../a
+/b/c////.aa../. /b/c/.aa..
+/b/c////.aa..// /b/c/.aa..
+/b/c////.aa./aa /b/c/.aa./aa
+/b/c////.aa./a. /b/c/.aa./a.
+/b/c////.aa./a/ /b/c/.aa./a
+/b/c////.aa./.a /b/c/.aa./.a
+/b/c////.aa./.. /b/c
+/b/c////.aa././ /b/c/.aa.
+/b/c////.aa.//a /b/c/.aa./a
+/b/c////.aa.//. /b/c/.aa.
+/b/c////.aa./// /b/c/.aa.
+/b/c////.aa/aaa /b/c/.aa/aaa
+/b/c////.aa/aa. /b/c/.aa/aa.
+/b/c////.aa/aa/ /b/c/.aa/aa
+/b/c////.aa/a.a /b/c/.aa/a.a
+/b/c////.aa/a.. /b/c/.aa/a..
+/b/c////.aa/a./ /b/c/.aa/a.
+/b/c////.aa/a/a /b/c/.aa/a/a
+/b/c////.aa/a/. /b/c/.aa/a
+/b/c////.aa/a// /b/c/.aa/a
+/b/c////.aa/.aa /b/c/.aa/.aa
+/b/c////.aa/.a. /b/c/.aa/.a.
+/b/c////.aa/.a/ /b/c/.aa/.a
+/b/c////.aa/..a /b/c/.aa/..a
+/b/c////.aa/... /b/c/.aa/...
+/b/c////.aa/../ /b/c
+/b/c////.aa/./a /b/c/.aa/a
+/b/c////.aa/./. /b/c/.aa
+/b/c////.aa/.// /b/c/.aa
+/b/c////.aa//aa /b/c/.aa/aa
+/b/c////.aa//a. /b/c/.aa/a.
+/b/c////.aa//a/ /b/c/.aa/a
+/b/c////.aa//.a /b/c/.aa/.a
+/b/c////.aa//.. /b/c
+/b/c////.aa//./ /b/c/.aa
+/b/c////.aa///a /b/c/.aa/a
+/b/c////.aa///. /b/c/.aa
+/b/c////.aa//// /b/c/.aa
+/b/c////.a.aaaa /b/c/.a.aaaa
+/b/c////.a.aaa. /b/c/.a.aaa.
+/b/c////.a.aaa/ /b/c/.a.aaa
+/b/c////.a.aa.a /b/c/.a.aa.a
+/b/c////.a.aa.. /b/c/.a.aa..
+/b/c////.a.aa./ /b/c/.a.aa.
+/b/c////.a.aa/a /b/c/.a.aa/a
+/b/c////.a.aa/. /b/c/.a.aa
+/b/c////.a.aa// /b/c/.a.aa
+/b/c////.a.a.aa /b/c/.a.a.aa
+/b/c////.a.a.a. /b/c/.a.a.a.
+/b/c////.a.a.a/ /b/c/.a.a.a
+/b/c////.a.a..a /b/c/.a.a..a
+/b/c////.a.a... /b/c/.a.a...
+/b/c////.a.a../ /b/c/.a.a..
+/b/c////.a.a./a /b/c/.a.a./a
+/b/c////.a.a./. /b/c/.a.a.
+/b/c////.a.a.// /b/c/.a.a.
+/b/c////.a.a/aa /b/c/.a.a/aa
+/b/c////.a.a/a. /b/c/.a.a/a.
+/b/c////.a.a/a/ /b/c/.a.a/a
+/b/c////.a.a/.a /b/c/.a.a/.a
+/b/c////.a.a/.. /b/c
+/b/c////.a.a/./ /b/c/.a.a
+/b/c////.a.a//a /b/c/.a.a/a
+/b/c////.a.a//. /b/c/.a.a
+/b/c////.a.a/// /b/c/.a.a
+/b/c////.a..aaa /b/c/.a..aaa
+/b/c////.a..aa. /b/c/.a..aa.
+/b/c////.a..aa/ /b/c/.a..aa
+/b/c////.a..a.a /b/c/.a..a.a
+/b/c////.a..a.. /b/c/.a..a..
+/b/c////.a..a./ /b/c/.a..a.
+/b/c////.a..a/a /b/c/.a..a/a
+/b/c////.a..a/. /b/c/.a..a
+/b/c////.a..a// /b/c/.a..a
+/b/c////.a...aa /b/c/.a...aa
+/b/c////.a...a. /b/c/.a...a.
+/b/c////.a...a/ /b/c/.a...a
+/b/c////.a....a /b/c/.a....a
+/b/c////.a..... /b/c/.a.....
+/b/c////.a..../ /b/c/.a....
+/b/c////.a.../a /b/c/.a.../a
+/b/c////.a.../. /b/c/.a...
+/b/c////.a...// /b/c/.a...
+/b/c////.a../aa /b/c/.a../aa
+/b/c////.a../a. /b/c/.a../a.
+/b/c////.a../a/ /b/c/.a../a
+/b/c////.a../.a /b/c/.a../.a
+/b/c////.a../.. /b/c
+/b/c////.a.././ /b/c/.a..
+/b/c////.a..//a /b/c/.a../a
+/b/c////.a..//. /b/c/.a..
+/b/c////.a../// /b/c/.a..
+/b/c////.a./aaa /b/c/.a./aaa
+/b/c////.a./aa. /b/c/.a./aa.
+/b/c////.a./aa/ /b/c/.a./aa
+/b/c////.a./a.a /b/c/.a./a.a
+/b/c////.a./a.. /b/c/.a./a..
+/b/c////.a./a./ /b/c/.a./a.
+/b/c////.a./a/a /b/c/.a./a/a
+/b/c////.a./a/. /b/c/.a./a
+/b/c////.a./a// /b/c/.a./a
+/b/c////.a./.aa /b/c/.a./.aa
+/b/c////.a./.a. /b/c/.a./.a.
+/b/c////.a./.a/ /b/c/.a./.a
+/b/c////.a./..a /b/c/.a./..a
+/b/c////.a./... /b/c/.a./...
+/b/c////.a./../ /b/c
+/b/c////.a././a /b/c/.a./a
+/b/c////.a././. /b/c/.a.
+/b/c////.a./.// /b/c/.a.
+/b/c////.a.//aa /b/c/.a./aa
+/b/c////.a.//a. /b/c/.a./a.
+/b/c////.a.//a/ /b/c/.a./a
+/b/c////.a.//.a /b/c/.a./.a
+/b/c////.a.//.. /b/c
+/b/c////.a.//./ /b/c/.a.
+/b/c////.a.///a /b/c/.a./a
+/b/c////.a.///. /b/c/.a.
+/b/c////.a.//// /b/c/.a.
+/b/c////.a/aaaa /b/c/.a/aaaa
+/b/c////.a/aaa. /b/c/.a/aaa.
+/b/c////.a/aaa/ /b/c/.a/aaa
+/b/c////.a/aa.a /b/c/.a/aa.a
+/b/c////.a/aa.. /b/c/.a/aa..
+/b/c////.a/aa./ /b/c/.a/aa.
+/b/c////.a/aa/a /b/c/.a/aa/a
+/b/c////.a/aa/. /b/c/.a/aa
+/b/c////.a/aa// /b/c/.a/aa
+/b/c////.a/a.aa /b/c/.a/a.aa
+/b/c////.a/a.a. /b/c/.a/a.a.
+/b/c////.a/a.a/ /b/c/.a/a.a
+/b/c////.a/a..a /b/c/.a/a..a
+/b/c////.a/a... /b/c/.a/a...
+/b/c////.a/a../ /b/c/.a/a..
+/b/c////.a/a./a /b/c/.a/a./a
+/b/c////.a/a./. /b/c/.a/a.
+/b/c////.a/a.// /b/c/.a/a.
+/b/c////.a/a/aa /b/c/.a/a/aa
+/b/c////.a/a/a. /b/c/.a/a/a.
+/b/c////.a/a/a/ /b/c/.a/a/a
+/b/c////.a/a/.a /b/c/.a/a/.a
+/b/c////.a/a/.. /b/c/.a
+/b/c////.a/a/./ /b/c/.a/a
+/b/c////.a/a//a /b/c/.a/a/a
+/b/c////.a/a//. /b/c/.a/a
+/b/c////.a/a/// /b/c/.a/a
+/b/c////.a/.aaa /b/c/.a/.aaa
+/b/c////.a/.aa. /b/c/.a/.aa.
+/b/c////.a/.aa/ /b/c/.a/.aa
+/b/c////.a/.a.a /b/c/.a/.a.a
+/b/c////.a/.a.. /b/c/.a/.a..
+/b/c////.a/.a./ /b/c/.a/.a.
+/b/c////.a/.a/a /b/c/.a/.a/a
+/b/c////.a/.a/. /b/c/.a/.a
+/b/c////.a/.a// /b/c/.a/.a
+/b/c////.a/..aa /b/c/.a/..aa
+/b/c////.a/..a. /b/c/.a/..a.
+/b/c////.a/..a/ /b/c/.a/..a
+/b/c////.a/...a /b/c/.a/...a
+/b/c////.a/.... /b/c/.a/....
+/b/c////.a/.../ /b/c/.a/...
+/b/c////.a/../a /b/c/a
+/b/c////.a/../. /b/c
+/b/c////.a/..// /b/c
+/b/c////.a/./aa /b/c/.a/aa
+/b/c////.a/./a. /b/c/.a/a.
+/b/c////.a/./a/ /b/c/.a/a
+/b/c////.a/./.a /b/c/.a/.a
+/b/c////.a/./.. /b/c
+/b/c////.a/././ /b/c/.a
+/b/c////.a/.//a /b/c/.a/a
+/b/c////.a/.//. /b/c/.a
+/b/c////.a/./// /b/c/.a
+/b/c////.a//aaa /b/c/.a/aaa
+/b/c////.a//aa. /b/c/.a/aa.
+/b/c////.a//aa/ /b/c/.a/aa
+/b/c////.a//a.a /b/c/.a/a.a
+/b/c////.a//a.. /b/c/.a/a..
+/b/c////.a//a./ /b/c/.a/a.
+/b/c////.a//a/a /b/c/.a/a/a
+/b/c////.a//a/. /b/c/.a/a
+/b/c////.a//a// /b/c/.a/a
+/b/c////.a//.aa /b/c/.a/.aa
+/b/c////.a//.a. /b/c/.a/.a.
+/b/c////.a//.a/ /b/c/.a/.a
+/b/c////.a//..a /b/c/.a/..a
+/b/c////.a//... /b/c/.a/...
+/b/c////.a//../ /b/c
+/b/c////.a//./a /b/c/.a/a
+/b/c////.a//./. /b/c/.a
+/b/c////.a//.// /b/c/.a
+/b/c////.a///aa /b/c/.a/aa
+/b/c////.a///a. /b/c/.a/a.
+/b/c////.a///a/ /b/c/.a/a
+/b/c////.a///.a /b/c/.a/.a
+/b/c////.a///.. /b/c
+/b/c////.a///./ /b/c/.a
+/b/c////.a////a /b/c/.a/a
+/b/c////.a////. /b/c/.a
+/b/c////.a///// /b/c/.a
+/b/c////..aaaaa /b/c/..aaaaa
+/b/c////..aaaa. /b/c/..aaaa.
+/b/c////..aaaa/ /b/c/..aaaa
+/b/c////..aaa.a /b/c/..aaa.a
+/b/c////..aaa.. /b/c/..aaa..
+/b/c////..aaa./ /b/c/..aaa.
+/b/c////..aaa/a /b/c/..aaa/a
+/b/c////..aaa/. /b/c/..aaa
+/b/c////..aaa// /b/c/..aaa
+/b/c////..aa.aa /b/c/..aa.aa
+/b/c////..aa.a. /b/c/..aa.a.
+/b/c////..aa.a/ /b/c/..aa.a
+/b/c////..aa..a /b/c/..aa..a
+/b/c////..aa... /b/c/..aa...
+/b/c////..aa../ /b/c/..aa..
+/b/c////..aa./a /b/c/..aa./a
+/b/c////..aa./. /b/c/..aa.
+/b/c////..aa.// /b/c/..aa.
+/b/c////..aa/aa /b/c/..aa/aa
+/b/c////..aa/a. /b/c/..aa/a.
+/b/c////..aa/a/ /b/c/..aa/a
+/b/c////..aa/.a /b/c/..aa/.a
+/b/c////..aa/.. /b/c
+/b/c////..aa/./ /b/c/..aa
+/b/c////..aa//a /b/c/..aa/a
+/b/c////..aa//. /b/c/..aa
+/b/c////..aa/// /b/c/..aa
+/b/c////..a.aaa /b/c/..a.aaa
+/b/c////..a.aa. /b/c/..a.aa.
+/b/c////..a.aa/ /b/c/..a.aa
+/b/c////..a.a.a /b/c/..a.a.a
+/b/c////..a.a.. /b/c/..a.a..
+/b/c////..a.a./ /b/c/..a.a.
+/b/c////..a.a/a /b/c/..a.a/a
+/b/c////..a.a/. /b/c/..a.a
+/b/c////..a.a// /b/c/..a.a
+/b/c////..a..aa /b/c/..a..aa
+/b/c////..a..a. /b/c/..a..a.
+/b/c////..a..a/ /b/c/..a..a
+/b/c////..a...a /b/c/..a...a
+/b/c////..a.... /b/c/..a....
+/b/c////..a.../ /b/c/..a...
+/b/c////..a../a /b/c/..a../a
+/b/c////..a../. /b/c/..a..
+/b/c////..a..// /b/c/..a..
+/b/c////..a./aa /b/c/..a./aa
+/b/c////..a./a. /b/c/..a./a.
+/b/c////..a./a/ /b/c/..a./a
+/b/c////..a./.a /b/c/..a./.a
+/b/c////..a./.. /b/c
+/b/c////..a././ /b/c/..a.
+/b/c////..a.//a /b/c/..a./a
+/b/c////..a.//. /b/c/..a.
+/b/c////..a./// /b/c/..a.
+/b/c////..a/aaa /b/c/..a/aaa
+/b/c////..a/aa. /b/c/..a/aa.
+/b/c////..a/aa/ /b/c/..a/aa
+/b/c////..a/a.a /b/c/..a/a.a
+/b/c////..a/a.. /b/c/..a/a..
+/b/c////..a/a./ /b/c/..a/a.
+/b/c////..a/a/a /b/c/..a/a/a
+/b/c////..a/a/. /b/c/..a/a
+/b/c////..a/a// /b/c/..a/a
+/b/c////..a/.aa /b/c/..a/.aa
+/b/c////..a/.a. /b/c/..a/.a.
+/b/c////..a/.a/ /b/c/..a/.a
+/b/c////..a/..a /b/c/..a/..a
+/b/c////..a/... /b/c/..a/...
+/b/c////..a/../ /b/c
+/b/c////..a/./a /b/c/..a/a
+/b/c////..a/./. /b/c/..a
+/b/c////..a/.// /b/c/..a
+/b/c////..a//aa /b/c/..a/aa
+/b/c////..a//a. /b/c/..a/a.
+/b/c////..a//a/ /b/c/..a/a
+/b/c////..a//.a /b/c/..a/.a
+/b/c////..a//.. /b/c
+/b/c////..a//./ /b/c/..a
+/b/c////..a///a /b/c/..a/a
+/b/c////..a///. /b/c/..a
+/b/c////..a//// /b/c/..a
+/b/c////...aaaa /b/c/...aaaa
+/b/c////...aaa. /b/c/...aaa.
+/b/c////...aaa/ /b/c/...aaa
+/b/c////...aa.a /b/c/...aa.a
+/b/c////...aa.. /b/c/...aa..
+/b/c////...aa./ /b/c/...aa.
+/b/c////...aa/a /b/c/...aa/a
+/b/c////...aa/. /b/c/...aa
+/b/c////...aa// /b/c/...aa
+/b/c////...a.aa /b/c/...a.aa
+/b/c////...a.a. /b/c/...a.a.
+/b/c////...a.a/ /b/c/...a.a
+/b/c////...a..a /b/c/...a..a
+/b/c////...a... /b/c/...a...
+/b/c////...a../ /b/c/...a..
+/b/c////...a./a /b/c/...a./a
+/b/c////...a./. /b/c/...a.
+/b/c////...a.// /b/c/...a.
+/b/c////...a/aa /b/c/...a/aa
+/b/c////...a/a. /b/c/...a/a.
+/b/c////...a/a/ /b/c/...a/a
+/b/c////...a/.a /b/c/...a/.a
+/b/c////...a/.. /b/c
+/b/c////...a/./ /b/c/...a
+/b/c////...a//a /b/c/...a/a
+/b/c////...a//. /b/c/...a
+/b/c////...a/// /b/c/...a
+/b/c////....aaa /b/c/....aaa
+/b/c////....aa. /b/c/....aa.
+/b/c////....aa/ /b/c/....aa
+/b/c////....a.a /b/c/....a.a
+/b/c////....a.. /b/c/....a..
+/b/c////....a./ /b/c/....a.
+/b/c////....a/a /b/c/....a/a
+/b/c////....a/. /b/c/....a
+/b/c////....a// /b/c/....a
+/b/c////.....aa /b/c/.....aa
+/b/c////.....a. /b/c/.....a.
+/b/c////.....a/ /b/c/.....a
+/b/c////......a /b/c/......a
+/b/c////....... /b/c/.......
+/b/c////....../ /b/c/......
+/b/c////...../a /b/c/...../a
+/b/c////...../. /b/c/.....
+/b/c////.....// /b/c/.....
+/b/c////..../aa /b/c/..../aa
+/b/c////..../a. /b/c/..../a.
+/b/c////..../a/ /b/c/..../a
+/b/c////..../.a /b/c/..../.a
+/b/c////..../.. /b/c
+/b/c////...././ /b/c/....
+/b/c////....//a /b/c/..../a
+/b/c////....//. /b/c/....
+/b/c////..../// /b/c/....
+/b/c////.../aaa /b/c/.../aaa
+/b/c////.../aa. /b/c/.../aa.
+/b/c////.../aa/ /b/c/.../aa
+/b/c////.../a.a /b/c/.../a.a
+/b/c////.../a.. /b/c/.../a..
+/b/c////.../a./ /b/c/.../a.
+/b/c////.../a/a /b/c/.../a/a
+/b/c////.../a/. /b/c/.../a
+/b/c////.../a// /b/c/.../a
+/b/c////.../.aa /b/c/.../.aa
+/b/c////.../.a. /b/c/.../.a.
+/b/c////.../.a/ /b/c/.../.a
+/b/c////.../..a /b/c/.../..a
+/b/c////.../... /b/c/.../...
+/b/c////.../../ /b/c
+/b/c////..././a /b/c/.../a
+/b/c////..././. /b/c/...
+/b/c////.../.// /b/c/...
+/b/c////...//aa /b/c/.../aa
+/b/c////...//a. /b/c/.../a.
+/b/c////...//a/ /b/c/.../a
+/b/c////...//.a /b/c/.../.a
+/b/c////...//.. /b/c
+/b/c////...//./ /b/c/...
+/b/c////...///a /b/c/.../a
+/b/c////...///. /b/c/...
+/b/c////...//// /b/c/...
+/b/c////../aaaa /b/aaaa
+/b/c////../aaa. /b/aaa.
+/b/c////../aaa/ /b/aaa
+/b/c////../aa.a /b/aa.a
+/b/c////../aa.. /b/aa..
+/b/c////../aa./ /b/aa.
+/b/c////../aa/a /b/aa/a
+/b/c////../aa/. /b/aa
+/b/c////../aa// /b/aa
+/b/c////../a.aa /b/a.aa
+/b/c////../a.a. /b/a.a.
+/b/c////../a.a/ /b/a.a
+/b/c////../a..a /b/a..a
+/b/c////../a... /b/a...
+/b/c////../a../ /b/a..
+/b/c////../a./a /b/a./a
+/b/c////../a./. /b/a.
+/b/c////../a.// /b/a.
+/b/c////../a/aa /b/a/aa
+/b/c////../a/a. /b/a/a.
+/b/c////../a/a/ /b/a/a
+/b/c////../a/.a /b/a/.a
+/b/c////../a/.. /b
+/b/c////../a/./ /b/a
+/b/c////../a//a /b/a/a
+/b/c////../a//. /b/a
+/b/c////../a/// /b/a
+/b/c////../.aaa /b/.aaa
+/b/c////../.aa. /b/.aa.
+/b/c////../.aa/ /b/.aa
+/b/c////../.a.a /b/.a.a
+/b/c////../.a.. /b/.a..
+/b/c////../.a./ /b/.a.
+/b/c////../.a/a /b/.a/a
+/b/c////../.a/. /b/.a
+/b/c////../.a// /b/.a
+/b/c////../..aa /b/..aa
+/b/c////../..a. /b/..a.
+/b/c////../..a/ /b/..a
+/b/c////../...a /b/...a
+/b/c////../.... /b/....
+/b/c////../.../ /b/...
+/b/c////../../a /a
+/b/c////../../. /
+/b/c////../..// /
+/b/c////.././aa /b/aa
+/b/c////.././a. /b/a.
+/b/c////.././a/ /b/a
+/b/c////.././.a /b/.a
+/b/c////.././.. /
+/b/c////../././ /b
+/b/c////.././/a /b/a
+/b/c////.././/. /b
+/b/c////.././// /b
+/b/c////..//aaa /b/aaa
+/b/c////..//aa. /b/aa.
+/b/c////..//aa/ /b/aa
+/b/c////..//a.a /b/a.a
+/b/c////..//a.. /b/a..
+/b/c////..//a./ /b/a.
+/b/c////..//a/a /b/a/a
+/b/c////..//a/. /b/a
+/b/c////..//a// /b/a
+/b/c////..//.aa /b/.aa
+/b/c////..//.a. /b/.a.
+/b/c////..//.a/ /b/.a
+/b/c////..//..a /b/..a
+/b/c////..//... /b/...
+/b/c////..//../ /
+/b/c////..//./a /b/a
+/b/c////..//./. /b
+/b/c////..//.// /b
+/b/c////..///aa /b/aa
+/b/c////..///a. /b/a.
+/b/c////..///a/ /b/a
+/b/c////..///.a /b/.a
+/b/c////..///.. /
+/b/c////..///./ /b
+/b/c////..////a /b/a
+/b/c////..////. /b
+/b/c////..///// /b
+/b/c////./aaaaa /b/c/aaaaa
+/b/c////./aaaa. /b/c/aaaa.
+/b/c////./aaaa/ /b/c/aaaa
+/b/c////./aaa.a /b/c/aaa.a
+/b/c////./aaa.. /b/c/aaa..
+/b/c////./aaa./ /b/c/aaa.
+/b/c////./aaa/a /b/c/aaa/a
+/b/c////./aaa/. /b/c/aaa
+/b/c////./aaa// /b/c/aaa
+/b/c////./aa.aa /b/c/aa.aa
+/b/c////./aa.a. /b/c/aa.a.
+/b/c////./aa.a/ /b/c/aa.a
+/b/c////./aa..a /b/c/aa..a
+/b/c////./aa... /b/c/aa...
+/b/c////./aa../ /b/c/aa..
+/b/c////./aa./a /b/c/aa./a
+/b/c////./aa./. /b/c/aa.
+/b/c////./aa.// /b/c/aa.
+/b/c////./aa/aa /b/c/aa/aa
+/b/c////./aa/a. /b/c/aa/a.
+/b/c////./aa/a/ /b/c/aa/a
+/b/c////./aa/.a /b/c/aa/.a
+/b/c////./aa/.. /b/c
+/b/c////./aa/./ /b/c/aa
+/b/c////./aa//a /b/c/aa/a
+/b/c////./aa//. /b/c/aa
+/b/c////./aa/// /b/c/aa
+/b/c////./a.aaa /b/c/a.aaa
+/b/c////./a.aa. /b/c/a.aa.
+/b/c////./a.aa/ /b/c/a.aa
+/b/c////./a.a.a /b/c/a.a.a
+/b/c////./a.a.. /b/c/a.a..
+/b/c////./a.a./ /b/c/a.a.
+/b/c////./a.a/a /b/c/a.a/a
+/b/c////./a.a/. /b/c/a.a
+/b/c////./a.a// /b/c/a.a
+/b/c////./a..aa /b/c/a..aa
+/b/c////./a..a. /b/c/a..a.
+/b/c////./a..a/ /b/c/a..a
+/b/c////./a...a /b/c/a...a
+/b/c////./a.... /b/c/a....
+/b/c////./a.../ /b/c/a...
+/b/c////./a../a /b/c/a../a
+/b/c////./a../. /b/c/a..
+/b/c////./a..// /b/c/a..
+/b/c////./a./aa /b/c/a./aa
+/b/c////./a./a. /b/c/a./a.
+/b/c////./a./a/ /b/c/a./a
+/b/c////./a./.a /b/c/a./.a
+/b/c////./a./.. /b/c
+/b/c////./a././ /b/c/a.
+/b/c////./a.//a /b/c/a./a
+/b/c////./a.//. /b/c/a.
+/b/c////./a./// /b/c/a.
+/b/c////./a/aaa /b/c/a/aaa
+/b/c////./a/aa. /b/c/a/aa.
+/b/c////./a/aa/ /b/c/a/aa
+/b/c////./a/a.a /b/c/a/a.a
+/b/c////./a/a.. /b/c/a/a..
+/b/c////./a/a./ /b/c/a/a.
+/b/c////./a/a/a /b/c/a/a/a
+/b/c////./a/a/. /b/c/a/a
+/b/c////./a/a// /b/c/a/a
+/b/c////./a/.aa /b/c/a/.aa
+/b/c////./a/.a. /b/c/a/.a.
+/b/c////./a/.a/ /b/c/a/.a
+/b/c////./a/..a /b/c/a/..a
+/b/c////./a/... /b/c/a/...
+/b/c////./a/../ /b/c
+/b/c////./a/./a /b/c/a/a
+/b/c////./a/./. /b/c/a
+/b/c////./a/.// /b/c/a
+/b/c////./a//aa /b/c/a/aa
+/b/c////./a//a. /b/c/a/a.
+/b/c////./a//a/ /b/c/a/a
+/b/c////./a//.a /b/c/a/.a
+/b/c////./a//.. /b/c
+/b/c////./a//./ /b/c/a
+/b/c////./a///a /b/c/a/a
+/b/c////./a///. /b/c/a
+/b/c////./a//// /b/c/a
+/b/c////./.aaaa /b/c/.aaaa
+/b/c////./.aaa. /b/c/.aaa.
+/b/c////./.aaa/ /b/c/.aaa
+/b/c////./.aa.a /b/c/.aa.a
+/b/c////./.aa.. /b/c/.aa..
+/b/c////./.aa./ /b/c/.aa.
+/b/c////./.aa/a /b/c/.aa/a
+/b/c////./.aa/. /b/c/.aa
+/b/c////./.aa// /b/c/.aa
+/b/c////./.a.aa /b/c/.a.aa
+/b/c////./.a.a. /b/c/.a.a.
+/b/c////./.a.a/ /b/c/.a.a
+/b/c////./.a..a /b/c/.a..a
+/b/c////./.a... /b/c/.a...
+/b/c////./.a../ /b/c/.a..
+/b/c////./.a./a /b/c/.a./a
+/b/c////./.a./. /b/c/.a.
+/b/c////./.a.// /b/c/.a.
+/b/c////./.a/aa /b/c/.a/aa
+/b/c////./.a/a. /b/c/.a/a.
+/b/c////./.a/a/ /b/c/.a/a
+/b/c////./.a/.a /b/c/.a/.a
+/b/c////./.a/.. /b/c
+/b/c////./.a/./ /b/c/.a
+/b/c////./.a//a /b/c/.a/a
+/b/c////./.a//. /b/c/.a
+/b/c////./.a/// /b/c/.a
+/b/c////./..aaa /b/c/..aaa
+/b/c////./..aa. /b/c/..aa.
+/b/c////./..aa/ /b/c/..aa
+/b/c////./..a.a /b/c/..a.a
+/b/c////./..a.. /b/c/..a..
+/b/c////./..a./ /b/c/..a.
+/b/c////./..a/a /b/c/..a/a
+/b/c////./..a/. /b/c/..a
+/b/c////./..a// /b/c/..a
+/b/c////./...aa /b/c/...aa
+/b/c////./...a. /b/c/...a.
+/b/c////./...a/ /b/c/...a
+/b/c////./....a /b/c/....a
+/b/c////./..... /b/c/.....
+/b/c////./..../ /b/c/....
+/b/c////./.../a /b/c/.../a
+/b/c////./.../. /b/c/...
+/b/c////./...// /b/c/...
+/b/c////./../aa /b/aa
+/b/c////./../a. /b/a.
+/b/c////./../a/ /b/a
+/b/c////./../.a /b/.a
+/b/c////./../.. /
+/b/c////./.././ /b
+/b/c////./..//a /b/a
+/b/c////./..//. /b
+/b/c////./../// /b
+/b/c////././aaa /b/c/aaa
+/b/c////././aa. /b/c/aa.
+/b/c////././aa/ /b/c/aa
+/b/c////././a.a /b/c/a.a
+/b/c////././a.. /b/c/a..
+/b/c////././a./ /b/c/a.
+/b/c////././a/a /b/c/a/a
+/b/c////././a/. /b/c/a
+/b/c////././a// /b/c/a
+/b/c////././.aa /b/c/.aa
+/b/c////././.a. /b/c/.a.
+/b/c////././.a/ /b/c/.a
+/b/c////././..a /b/c/..a
+/b/c////././... /b/c/...
+/b/c////././../ /b
+/b/c////./././a /b/c/a
+/b/c////./././. /b/c
+/b/c////././.// /b/c
+/b/c////././/aa /b/c/aa
+/b/c////././/a. /b/c/a.
+/b/c////././/a/ /b/c/a
+/b/c////././/.a /b/c/.a
+/b/c////././/.. /b
+/b/c////././/./ /b/c
+/b/c////././//a /b/c/a
+/b/c////././//. /b/c
+/b/c////././/// /b/c
+/b/c////.//aaaa /b/c/aaaa
+/b/c////.//aaa. /b/c/aaa.
+/b/c////.//aaa/ /b/c/aaa
+/b/c////.//aa.a /b/c/aa.a
+/b/c////.//aa.. /b/c/aa..
+/b/c////.//aa./ /b/c/aa.
+/b/c////.//aa/a /b/c/aa/a
+/b/c////.//aa/. /b/c/aa
+/b/c////.//aa// /b/c/aa
+/b/c////.//a.aa /b/c/a.aa
+/b/c////.//a.a. /b/c/a.a.
+/b/c////.//a.a/ /b/c/a.a
+/b/c////.//a..a /b/c/a..a
+/b/c////.//a... /b/c/a...
+/b/c////.//a../ /b/c/a..
+/b/c////.//a./a /b/c/a./a
+/b/c////.//a./. /b/c/a.
+/b/c////.//a.// /b/c/a.
+/b/c////.//a/aa /b/c/a/aa
+/b/c////.//a/a. /b/c/a/a.
+/b/c////.//a/a/ /b/c/a/a
+/b/c////.//a/.a /b/c/a/.a
+/b/c////.//a/.. /b/c
+/b/c////.//a/./ /b/c/a
+/b/c////.//a//a /b/c/a/a
+/b/c////.//a//. /b/c/a
+/b/c////.//a/// /b/c/a
+/b/c////.//.aaa /b/c/.aaa
+/b/c////.//.aa. /b/c/.aa.
+/b/c////.//.aa/ /b/c/.aa
+/b/c////.//.a.a /b/c/.a.a
+/b/c////.//.a.. /b/c/.a..
+/b/c////.//.a./ /b/c/.a.
+/b/c////.//.a/a /b/c/.a/a
+/b/c////.//.a/. /b/c/.a
+/b/c////.//.a// /b/c/.a
+/b/c////.//..aa /b/c/..aa
+/b/c////.//..a. /b/c/..a.
+/b/c////.//..a/ /b/c/..a
+/b/c////.//...a /b/c/...a
+/b/c////.//.... /b/c/....
+/b/c////.//.../ /b/c/...
+/b/c////.//../a /b/a
+/b/c////.//../. /b
+/b/c////.//..// /b
+/b/c////.//./aa /b/c/aa
+/b/c////.//./a. /b/c/a.
+/b/c////.//./a/ /b/c/a
+/b/c////.//./.a /b/c/.a
+/b/c////.//./.. /b
+/b/c////.//././ /b/c
+/b/c////.//.//a /b/c/a
+/b/c////.//.//. /b/c
+/b/c////.//./// /b/c
+/b/c////.///aaa /b/c/aaa
+/b/c////.///aa. /b/c/aa.
+/b/c////.///aa/ /b/c/aa
+/b/c////.///a.a /b/c/a.a
+/b/c////.///a.. /b/c/a..
+/b/c////.///a./ /b/c/a.
+/b/c////.///a/a /b/c/a/a
+/b/c////.///a/. /b/c/a
+/b/c////.///a// /b/c/a
+/b/c////.///.aa /b/c/.aa
+/b/c////.///.a. /b/c/.a.
+/b/c////.///.a/ /b/c/.a
+/b/c////.///..a /b/c/..a
+/b/c////.///... /b/c/...
+/b/c////.///../ /b
+/b/c////.///./a /b/c/a
+/b/c////.///./. /b/c
+/b/c////.///.// /b/c
+/b/c////.////aa /b/c/aa
+/b/c////.////a. /b/c/a.
+/b/c////.////a/ /b/c/a
+/b/c////.////.a /b/c/.a
+/b/c////.////.. /b
+/b/c////.////./ /b/c
+/b/c////./////a /b/c/a
+/b/c////./////. /b/c
+/b/c////.////// /b/c
+/b/c/////aaaaaa /b/c/aaaaaa
+/b/c/////aaaaa. /b/c/aaaaa.
+/b/c/////aaaaa/ /b/c/aaaaa
+/b/c/////aaaa.a /b/c/aaaa.a
+/b/c/////aaaa.. /b/c/aaaa..
+/b/c/////aaaa./ /b/c/aaaa.
+/b/c/////aaaa/a /b/c/aaaa/a
+/b/c/////aaaa/. /b/c/aaaa
+/b/c/////aaaa// /b/c/aaaa
+/b/c/////aaa.aa /b/c/aaa.aa
+/b/c/////aaa.a. /b/c/aaa.a.
+/b/c/////aaa.a/ /b/c/aaa.a
+/b/c/////aaa..a /b/c/aaa..a
+/b/c/////aaa... /b/c/aaa...
+/b/c/////aaa../ /b/c/aaa..
+/b/c/////aaa./a /b/c/aaa./a
+/b/c/////aaa./. /b/c/aaa.
+/b/c/////aaa.// /b/c/aaa.
+/b/c/////aaa/aa /b/c/aaa/aa
+/b/c/////aaa/a. /b/c/aaa/a.
+/b/c/////aaa/a/ /b/c/aaa/a
+/b/c/////aaa/.a /b/c/aaa/.a
+/b/c/////aaa/.. /b/c
+/b/c/////aaa/./ /b/c/aaa
+/b/c/////aaa//a /b/c/aaa/a
+/b/c/////aaa//. /b/c/aaa
+/b/c/////aaa/// /b/c/aaa
+/b/c/////aa.aaa /b/c/aa.aaa
+/b/c/////aa.aa. /b/c/aa.aa.
+/b/c/////aa.aa/ /b/c/aa.aa
+/b/c/////aa.a.a /b/c/aa.a.a
+/b/c/////aa.a.. /b/c/aa.a..
+/b/c/////aa.a./ /b/c/aa.a.
+/b/c/////aa.a/a /b/c/aa.a/a
+/b/c/////aa.a/. /b/c/aa.a
+/b/c/////aa.a// /b/c/aa.a
+/b/c/////aa..aa /b/c/aa..aa
+/b/c/////aa..a. /b/c/aa..a.
+/b/c/////aa..a/ /b/c/aa..a
+/b/c/////aa...a /b/c/aa...a
+/b/c/////aa.... /b/c/aa....
+/b/c/////aa.../ /b/c/aa...
+/b/c/////aa../a /b/c/aa../a
+/b/c/////aa../. /b/c/aa..
+/b/c/////aa..// /b/c/aa..
+/b/c/////aa./aa /b/c/aa./aa
+/b/c/////aa./a. /b/c/aa./a.
+/b/c/////aa./a/ /b/c/aa./a
+/b/c/////aa./.a /b/c/aa./.a
+/b/c/////aa./.. /b/c
+/b/c/////aa././ /b/c/aa.
+/b/c/////aa.//a /b/c/aa./a
+/b/c/////aa.//. /b/c/aa.
+/b/c/////aa./// /b/c/aa.
+/b/c/////aa/aaa /b/c/aa/aaa
+/b/c/////aa/aa. /b/c/aa/aa.
+/b/c/////aa/aa/ /b/c/aa/aa
+/b/c/////aa/a.a /b/c/aa/a.a
+/b/c/////aa/a.. /b/c/aa/a..
+/b/c/////aa/a./ /b/c/aa/a.
+/b/c/////aa/a/a /b/c/aa/a/a
+/b/c/////aa/a/. /b/c/aa/a
+/b/c/////aa/a// /b/c/aa/a
+/b/c/////aa/.aa /b/c/aa/.aa
+/b/c/////aa/.a. /b/c/aa/.a.
+/b/c/////aa/.a/ /b/c/aa/.a
+/b/c/////aa/..a /b/c/aa/..a
+/b/c/////aa/... /b/c/aa/...
+/b/c/////aa/../ /b/c
+/b/c/////aa/./a /b/c/aa/a
+/b/c/////aa/./. /b/c/aa
+/b/c/////aa/.// /b/c/aa
+/b/c/////aa//aa /b/c/aa/aa
+/b/c/////aa//a. /b/c/aa/a.
+/b/c/////aa//a/ /b/c/aa/a
+/b/c/////aa//.a /b/c/aa/.a
+/b/c/////aa//.. /b/c
+/b/c/////aa//./ /b/c/aa
+/b/c/////aa///a /b/c/aa/a
+/b/c/////aa///. /b/c/aa
+/b/c/////aa//// /b/c/aa
+/b/c/////a.aaaa /b/c/a.aaaa
+/b/c/////a.aaa. /b/c/a.aaa.
+/b/c/////a.aaa/ /b/c/a.aaa
+/b/c/////a.aa.a /b/c/a.aa.a
+/b/c/////a.aa.. /b/c/a.aa..
+/b/c/////a.aa./ /b/c/a.aa.
+/b/c/////a.aa/a /b/c/a.aa/a
+/b/c/////a.aa/. /b/c/a.aa
+/b/c/////a.aa// /b/c/a.aa
+/b/c/////a.a.aa /b/c/a.a.aa
+/b/c/////a.a.a. /b/c/a.a.a.
+/b/c/////a.a.a/ /b/c/a.a.a
+/b/c/////a.a..a /b/c/a.a..a
+/b/c/////a.a... /b/c/a.a...
+/b/c/////a.a../ /b/c/a.a..
+/b/c/////a.a./a /b/c/a.a./a
+/b/c/////a.a./. /b/c/a.a.
+/b/c/////a.a.// /b/c/a.a.
+/b/c/////a.a/aa /b/c/a.a/aa
+/b/c/////a.a/a. /b/c/a.a/a.
+/b/c/////a.a/a/ /b/c/a.a/a
+/b/c/////a.a/.a /b/c/a.a/.a
+/b/c/////a.a/.. /b/c
+/b/c/////a.a/./ /b/c/a.a
+/b/c/////a.a//a /b/c/a.a/a
+/b/c/////a.a//. /b/c/a.a
+/b/c/////a.a/// /b/c/a.a
+/b/c/////a..aaa /b/c/a..aaa
+/b/c/////a..aa. /b/c/a..aa.
+/b/c/////a..aa/ /b/c/a..aa
+/b/c/////a..a.a /b/c/a..a.a
+/b/c/////a..a.. /b/c/a..a..
+/b/c/////a..a./ /b/c/a..a.
+/b/c/////a..a/a /b/c/a..a/a
+/b/c/////a..a/. /b/c/a..a
+/b/c/////a..a// /b/c/a..a
+/b/c/////a...aa /b/c/a...aa
+/b/c/////a...a. /b/c/a...a.
+/b/c/////a...a/ /b/c/a...a
+/b/c/////a....a /b/c/a....a
+/b/c/////a..... /b/c/a.....
+/b/c/////a..../ /b/c/a....
+/b/c/////a.../a /b/c/a.../a
+/b/c/////a.../. /b/c/a...
+/b/c/////a...// /b/c/a...
+/b/c/////a../aa /b/c/a../aa
+/b/c/////a../a. /b/c/a../a.
+/b/c/////a../a/ /b/c/a../a
+/b/c/////a../.a /b/c/a../.a
+/b/c/////a../.. /b/c
+/b/c/////a.././ /b/c/a..
+/b/c/////a..//a /b/c/a../a
+/b/c/////a..//. /b/c/a..
+/b/c/////a../// /b/c/a..
+/b/c/////a./aaa /b/c/a./aaa
+/b/c/////a./aa. /b/c/a./aa.
+/b/c/////a./aa/ /b/c/a./aa
+/b/c/////a./a.a /b/c/a./a.a
+/b/c/////a./a.. /b/c/a./a..
+/b/c/////a./a./ /b/c/a./a.
+/b/c/////a./a/a /b/c/a./a/a
+/b/c/////a./a/. /b/c/a./a
+/b/c/////a./a// /b/c/a./a
+/b/c/////a./.aa /b/c/a./.aa
+/b/c/////a./.a. /b/c/a./.a.
+/b/c/////a./.a/ /b/c/a./.a
+/b/c/////a./..a /b/c/a./..a
+/b/c/////a./... /b/c/a./...
+/b/c/////a./../ /b/c
+/b/c/////a././a /b/c/a./a
+/b/c/////a././. /b/c/a.
+/b/c/////a./.// /b/c/a.
+/b/c/////a.//aa /b/c/a./aa
+/b/c/////a.//a. /b/c/a./a.
+/b/c/////a.//a/ /b/c/a./a
+/b/c/////a.//.a /b/c/a./.a
+/b/c/////a.//.. /b/c
+/b/c/////a.//./ /b/c/a.
+/b/c/////a.///a /b/c/a./a
+/b/c/////a.///. /b/c/a.
+/b/c/////a.//// /b/c/a.
+/b/c/////a/aaaa /b/c/a/aaaa
+/b/c/////a/aaa. /b/c/a/aaa.
+/b/c/////a/aaa/ /b/c/a/aaa
+/b/c/////a/aa.a /b/c/a/aa.a
+/b/c/////a/aa.. /b/c/a/aa..
+/b/c/////a/aa./ /b/c/a/aa.
+/b/c/////a/aa/a /b/c/a/aa/a
+/b/c/////a/aa/. /b/c/a/aa
+/b/c/////a/aa// /b/c/a/aa
+/b/c/////a/a.aa /b/c/a/a.aa
+/b/c/////a/a.a. /b/c/a/a.a.
+/b/c/////a/a.a/ /b/c/a/a.a
+/b/c/////a/a..a /b/c/a/a..a
+/b/c/////a/a... /b/c/a/a...
+/b/c/////a/a../ /b/c/a/a..
+/b/c/////a/a./a /b/c/a/a./a
+/b/c/////a/a./. /b/c/a/a.
+/b/c/////a/a.// /b/c/a/a.
+/b/c/////a/a/aa /b/c/a/a/aa
+/b/c/////a/a/a. /b/c/a/a/a.
+/b/c/////a/a/a/ /b/c/a/a/a
+/b/c/////a/a/.a /b/c/a/a/.a
+/b/c/////a/a/.. /b/c/a
+/b/c/////a/a/./ /b/c/a/a
+/b/c/////a/a//a /b/c/a/a/a
+/b/c/////a/a//. /b/c/a/a
+/b/c/////a/a/// /b/c/a/a
+/b/c/////a/.aaa /b/c/a/.aaa
+/b/c/////a/.aa. /b/c/a/.aa.
+/b/c/////a/.aa/ /b/c/a/.aa
+/b/c/////a/.a.a /b/c/a/.a.a
+/b/c/////a/.a.. /b/c/a/.a..
+/b/c/////a/.a./ /b/c/a/.a.
+/b/c/////a/.a/a /b/c/a/.a/a
+/b/c/////a/.a/. /b/c/a/.a
+/b/c/////a/.a// /b/c/a/.a
+/b/c/////a/..aa /b/c/a/..aa
+/b/c/////a/..a. /b/c/a/..a.
+/b/c/////a/..a/ /b/c/a/..a
+/b/c/////a/...a /b/c/a/...a
+/b/c/////a/.... /b/c/a/....
+/b/c/////a/.../ /b/c/a/...
+/b/c/////a/../a /b/c/a
+/b/c/////a/../. /b/c
+/b/c/////a/..// /b/c
+/b/c/////a/./aa /b/c/a/aa
+/b/c/////a/./a. /b/c/a/a.
+/b/c/////a/./a/ /b/c/a/a
+/b/c/////a/./.a /b/c/a/.a
+/b/c/////a/./.. /b/c
+/b/c/////a/././ /b/c/a
+/b/c/////a/.//a /b/c/a/a
+/b/c/////a/.//. /b/c/a
+/b/c/////a/./// /b/c/a
+/b/c/////a//aaa /b/c/a/aaa
+/b/c/////a//aa. /b/c/a/aa.
+/b/c/////a//aa/ /b/c/a/aa
+/b/c/////a//a.a /b/c/a/a.a
+/b/c/////a//a.. /b/c/a/a..
+/b/c/////a//a./ /b/c/a/a.
+/b/c/////a//a/a /b/c/a/a/a
+/b/c/////a//a/. /b/c/a/a
+/b/c/////a//a// /b/c/a/a
+/b/c/////a//.aa /b/c/a/.aa
+/b/c/////a//.a. /b/c/a/.a.
+/b/c/////a//.a/ /b/c/a/.a
+/b/c/////a//..a /b/c/a/..a
+/b/c/////a//... /b/c/a/...
+/b/c/////a//../ /b/c
+/b/c/////a//./a /b/c/a/a
+/b/c/////a//./. /b/c/a
+/b/c/////a//.// /b/c/a
+/b/c/////a///aa /b/c/a/aa
+/b/c/////a///a. /b/c/a/a.
+/b/c/////a///a/ /b/c/a/a
+/b/c/////a///.a /b/c/a/.a
+/b/c/////a///.. /b/c
+/b/c/////a///./ /b/c/a
+/b/c/////a////a /b/c/a/a
+/b/c/////a////. /b/c/a
+/b/c/////a///// /b/c/a
+/b/c/////.aaaaa /b/c/.aaaaa
+/b/c/////.aaaa. /b/c/.aaaa.
+/b/c/////.aaaa/ /b/c/.aaaa
+/b/c/////.aaa.a /b/c/.aaa.a
+/b/c/////.aaa.. /b/c/.aaa..
+/b/c/////.aaa./ /b/c/.aaa.
+/b/c/////.aaa/a /b/c/.aaa/a
+/b/c/////.aaa/. /b/c/.aaa
+/b/c/////.aaa// /b/c/.aaa
+/b/c/////.aa.aa /b/c/.aa.aa
+/b/c/////.aa.a. /b/c/.aa.a.
+/b/c/////.aa.a/ /b/c/.aa.a
+/b/c/////.aa..a /b/c/.aa..a
+/b/c/////.aa... /b/c/.aa...
+/b/c/////.aa../ /b/c/.aa..
+/b/c/////.aa./a /b/c/.aa./a
+/b/c/////.aa./. /b/c/.aa.
+/b/c/////.aa.// /b/c/.aa.
+/b/c/////.aa/aa /b/c/.aa/aa
+/b/c/////.aa/a. /b/c/.aa/a.
+/b/c/////.aa/a/ /b/c/.aa/a
+/b/c/////.aa/.a /b/c/.aa/.a
+/b/c/////.aa/.. /b/c
+/b/c/////.aa/./ /b/c/.aa
+/b/c/////.aa//a /b/c/.aa/a
+/b/c/////.aa//. /b/c/.aa
+/b/c/////.aa/// /b/c/.aa
+/b/c/////.a.aaa /b/c/.a.aaa
+/b/c/////.a.aa. /b/c/.a.aa.
+/b/c/////.a.aa/ /b/c/.a.aa
+/b/c/////.a.a.a /b/c/.a.a.a
+/b/c/////.a.a.. /b/c/.a.a..
+/b/c/////.a.a./ /b/c/.a.a.
+/b/c/////.a.a/a /b/c/.a.a/a
+/b/c/////.a.a/. /b/c/.a.a
+/b/c/////.a.a// /b/c/.a.a
+/b/c/////.a..aa /b/c/.a..aa
+/b/c/////.a..a. /b/c/.a..a.
+/b/c/////.a..a/ /b/c/.a..a
+/b/c/////.a...a /b/c/.a...a
+/b/c/////.a.... /b/c/.a....
+/b/c/////.a.../ /b/c/.a...
+/b/c/////.a../a /b/c/.a../a
+/b/c/////.a../. /b/c/.a..
+/b/c/////.a..// /b/c/.a..
+/b/c/////.a./aa /b/c/.a./aa
+/b/c/////.a./a. /b/c/.a./a.
+/b/c/////.a./a/ /b/c/.a./a
+/b/c/////.a./.a /b/c/.a./.a
+/b/c/////.a./.. /b/c
+/b/c/////.a././ /b/c/.a.
+/b/c/////.a.//a /b/c/.a./a
+/b/c/////.a.//. /b/c/.a.
+/b/c/////.a./// /b/c/.a.
+/b/c/////.a/aaa /b/c/.a/aaa
+/b/c/////.a/aa. /b/c/.a/aa.
+/b/c/////.a/aa/ /b/c/.a/aa
+/b/c/////.a/a.a /b/c/.a/a.a
+/b/c/////.a/a.. /b/c/.a/a..
+/b/c/////.a/a./ /b/c/.a/a.
+/b/c/////.a/a/a /b/c/.a/a/a
+/b/c/////.a/a/. /b/c/.a/a
+/b/c/////.a/a// /b/c/.a/a
+/b/c/////.a/.aa /b/c/.a/.aa
+/b/c/////.a/.a. /b/c/.a/.a.
+/b/c/////.a/.a/ /b/c/.a/.a
+/b/c/////.a/..a /b/c/.a/..a
+/b/c/////.a/... /b/c/.a/...
+/b/c/////.a/../ /b/c
+/b/c/////.a/./a /b/c/.a/a
+/b/c/////.a/./. /b/c/.a
+/b/c/////.a/.// /b/c/.a
+/b/c/////.a//aa /b/c/.a/aa
+/b/c/////.a//a. /b/c/.a/a.
+/b/c/////.a//a/ /b/c/.a/a
+/b/c/////.a//.a /b/c/.a/.a
+/b/c/////.a//.. /b/c
+/b/c/////.a//./ /b/c/.a
+/b/c/////.a///a /b/c/.a/a
+/b/c/////.a///. /b/c/.a
+/b/c/////.a//// /b/c/.a
+/b/c/////..aaaa /b/c/..aaaa
+/b/c/////..aaa. /b/c/..aaa.
+/b/c/////..aaa/ /b/c/..aaa
+/b/c/////..aa.a /b/c/..aa.a
+/b/c/////..aa.. /b/c/..aa..
+/b/c/////..aa./ /b/c/..aa.
+/b/c/////..aa/a /b/c/..aa/a
+/b/c/////..aa/. /b/c/..aa
+/b/c/////..aa// /b/c/..aa
+/b/c/////..a.aa /b/c/..a.aa
+/b/c/////..a.a. /b/c/..a.a.
+/b/c/////..a.a/ /b/c/..a.a
+/b/c/////..a..a /b/c/..a..a
+/b/c/////..a... /b/c/..a...
+/b/c/////..a../ /b/c/..a..
+/b/c/////..a./a /b/c/..a./a
+/b/c/////..a./. /b/c/..a.
+/b/c/////..a.// /b/c/..a.
+/b/c/////..a/aa /b/c/..a/aa
+/b/c/////..a/a. /b/c/..a/a.
+/b/c/////..a/a/ /b/c/..a/a
+/b/c/////..a/.a /b/c/..a/.a
+/b/c/////..a/.. /b/c
+/b/c/////..a/./ /b/c/..a
+/b/c/////..a//a /b/c/..a/a
+/b/c/////..a//. /b/c/..a
+/b/c/////..a/// /b/c/..a
+/b/c/////...aaa /b/c/...aaa
+/b/c/////...aa. /b/c/...aa.
+/b/c/////...aa/ /b/c/...aa
+/b/c/////...a.a /b/c/...a.a
+/b/c/////...a.. /b/c/...a..
+/b/c/////...a./ /b/c/...a.
+/b/c/////...a/a /b/c/...a/a
+/b/c/////...a/. /b/c/...a
+/b/c/////...a// /b/c/...a
+/b/c/////....aa /b/c/....aa
+/b/c/////....a. /b/c/....a.
+/b/c/////....a/ /b/c/....a
+/b/c/////.....a /b/c/.....a
+/b/c/////...... /b/c/......
+/b/c/////...../ /b/c/.....
+/b/c/////..../a /b/c/..../a
+/b/c/////..../. /b/c/....
+/b/c/////....// /b/c/....
+/b/c/////.../aa /b/c/.../aa
+/b/c/////.../a. /b/c/.../a.
+/b/c/////.../a/ /b/c/.../a
+/b/c/////.../.a /b/c/.../.a
+/b/c/////.../.. /b/c
+/b/c/////..././ /b/c/...
+/b/c/////...//a /b/c/.../a
+/b/c/////...//. /b/c/...
+/b/c/////.../// /b/c/...
+/b/c/////../aaa /b/aaa
+/b/c/////../aa. /b/aa.
+/b/c/////../aa/ /b/aa
+/b/c/////../a.a /b/a.a
+/b/c/////../a.. /b/a..
+/b/c/////../a./ /b/a.
+/b/c/////../a/a /b/a/a
+/b/c/////../a/. /b/a
+/b/c/////../a// /b/a
+/b/c/////../.aa /b/.aa
+/b/c/////../.a. /b/.a.
+/b/c/////../.a/ /b/.a
+/b/c/////../..a /b/..a
+/b/c/////../... /b/...
+/b/c/////../../ /
+/b/c/////.././a /b/a
+/b/c/////.././. /b
+/b/c/////../.// /b
+/b/c/////..//aa /b/aa
+/b/c/////..//a. /b/a.
+/b/c/////..//a/ /b/a
+/b/c/////..//.a /b/.a
+/b/c/////..//.. /
+/b/c/////..//./ /b
+/b/c/////..///a /b/a
+/b/c/////..///. /b
+/b/c/////..//// /b
+/b/c/////./aaaa /b/c/aaaa
+/b/c/////./aaa. /b/c/aaa.
+/b/c/////./aaa/ /b/c/aaa
+/b/c/////./aa.a /b/c/aa.a
+/b/c/////./aa.. /b/c/aa..
+/b/c/////./aa./ /b/c/aa.
+/b/c/////./aa/a /b/c/aa/a
+/b/c/////./aa/. /b/c/aa
+/b/c/////./aa// /b/c/aa
+/b/c/////./a.aa /b/c/a.aa
+/b/c/////./a.a. /b/c/a.a.
+/b/c/////./a.a/ /b/c/a.a
+/b/c/////./a..a /b/c/a..a
+/b/c/////./a... /b/c/a...
+/b/c/////./a../ /b/c/a..
+/b/c/////./a./a /b/c/a./a
+/b/c/////./a./. /b/c/a.
+/b/c/////./a.// /b/c/a.
+/b/c/////./a/aa /b/c/a/aa
+/b/c/////./a/a. /b/c/a/a.
+/b/c/////./a/a/ /b/c/a/a
+/b/c/////./a/.a /b/c/a/.a
+/b/c/////./a/.. /b/c
+/b/c/////./a/./ /b/c/a
+/b/c/////./a//a /b/c/a/a
+/b/c/////./a//. /b/c/a
+/b/c/////./a/// /b/c/a
+/b/c/////./.aaa /b/c/.aaa
+/b/c/////./.aa. /b/c/.aa.
+/b/c/////./.aa/ /b/c/.aa
+/b/c/////./.a.a /b/c/.a.a
+/b/c/////./.a.. /b/c/.a..
+/b/c/////./.a./ /b/c/.a.
+/b/c/////./.a/a /b/c/.a/a
+/b/c/////./.a/. /b/c/.a
+/b/c/////./.a// /b/c/.a
+/b/c/////./..aa /b/c/..aa
+/b/c/////./..a. /b/c/..a.
+/b/c/////./..a/ /b/c/..a
+/b/c/////./...a /b/c/...a
+/b/c/////./.... /b/c/....
+/b/c/////./.../ /b/c/...
+/b/c/////./../a /b/a
+/b/c/////./../. /b
+/b/c/////./..// /b
+/b/c/////././aa /b/c/aa
+/b/c/////././a. /b/c/a.
+/b/c/////././a/ /b/c/a
+/b/c/////././.a /b/c/.a
+/b/c/////././.. /b
+/b/c/////./././ /b/c
+/b/c/////././/a /b/c/a
+/b/c/////././/. /b/c
+/b/c/////././// /b/c
+/b/c/////.//aaa /b/c/aaa
+/b/c/////.//aa. /b/c/aa.
+/b/c/////.//aa/ /b/c/aa
+/b/c/////.//a.a /b/c/a.a
+/b/c/////.//a.. /b/c/a..
+/b/c/////.//a./ /b/c/a.
+/b/c/////.//a/a /b/c/a/a
+/b/c/////.//a/. /b/c/a
+/b/c/////.//a// /b/c/a
+/b/c/////.//.aa /b/c/.aa
+/b/c/////.//.a. /b/c/.a.
+/b/c/////.//.a/ /b/c/.a
+/b/c/////.//..a /b/c/..a
+/b/c/////.//... /b/c/...
+/b/c/////.//../ /b
+/b/c/////.//./a /b/c/a
+/b/c/////.//./. /b/c
+/b/c/////.//.// /b/c
+/b/c/////.///aa /b/c/aa
+/b/c/////.///a. /b/c/a.
+/b/c/////.///a/ /b/c/a
+/b/c/////.///.a /b/c/.a
+/b/c/////.///.. /b
+/b/c/////.///./ /b/c
+/b/c/////.////a /b/c/a
+/b/c/////.////. /b/c
+/b/c/////.///// /b/c
+/b/c//////aaaaa /b/c/aaaaa
+/b/c//////aaaa. /b/c/aaaa.
+/b/c//////aaaa/ /b/c/aaaa
+/b/c//////aaa.a /b/c/aaa.a
+/b/c//////aaa.. /b/c/aaa..
+/b/c//////aaa./ /b/c/aaa.
+/b/c//////aaa/a /b/c/aaa/a
+/b/c//////aaa/. /b/c/aaa
+/b/c//////aaa// /b/c/aaa
+/b/c//////aa.aa /b/c/aa.aa
+/b/c//////aa.a. /b/c/aa.a.
+/b/c//////aa.a/ /b/c/aa.a
+/b/c//////aa..a /b/c/aa..a
+/b/c//////aa... /b/c/aa...
+/b/c//////aa../ /b/c/aa..
+/b/c//////aa./a /b/c/aa./a
+/b/c//////aa./. /b/c/aa.
+/b/c//////aa.// /b/c/aa.
+/b/c//////aa/aa /b/c/aa/aa
+/b/c//////aa/a. /b/c/aa/a.
+/b/c//////aa/a/ /b/c/aa/a
+/b/c//////aa/.a /b/c/aa/.a
+/b/c//////aa/.. /b/c
+/b/c//////aa/./ /b/c/aa
+/b/c//////aa//a /b/c/aa/a
+/b/c//////aa//. /b/c/aa
+/b/c//////aa/// /b/c/aa
+/b/c//////a.aaa /b/c/a.aaa
+/b/c//////a.aa. /b/c/a.aa.
+/b/c//////a.aa/ /b/c/a.aa
+/b/c//////a.a.a /b/c/a.a.a
+/b/c//////a.a.. /b/c/a.a..
+/b/c//////a.a./ /b/c/a.a.
+/b/c//////a.a/a /b/c/a.a/a
+/b/c//////a.a/. /b/c/a.a
+/b/c//////a.a// /b/c/a.a
+/b/c//////a..aa /b/c/a..aa
+/b/c//////a..a. /b/c/a..a.
+/b/c//////a..a/ /b/c/a..a
+/b/c//////a...a /b/c/a...a
+/b/c//////a.... /b/c/a....
+/b/c//////a.../ /b/c/a...
+/b/c//////a../a /b/c/a../a
+/b/c//////a../. /b/c/a..
+/b/c//////a..// /b/c/a..
+/b/c//////a./aa /b/c/a./aa
+/b/c//////a./a. /b/c/a./a.
+/b/c//////a./a/ /b/c/a./a
+/b/c//////a./.a /b/c/a./.a
+/b/c//////a./.. /b/c
+/b/c//////a././ /b/c/a.
+/b/c//////a.//a /b/c/a./a
+/b/c//////a.//. /b/c/a.
+/b/c//////a./// /b/c/a.
+/b/c//////a/aaa /b/c/a/aaa
+/b/c//////a/aa. /b/c/a/aa.
+/b/c//////a/aa/ /b/c/a/aa
+/b/c//////a/a.a /b/c/a/a.a
+/b/c//////a/a.. /b/c/a/a..
+/b/c//////a/a./ /b/c/a/a.
+/b/c//////a/a/a /b/c/a/a/a
+/b/c//////a/a/. /b/c/a/a
+/b/c//////a/a// /b/c/a/a
+/b/c//////a/.aa /b/c/a/.aa
+/b/c//////a/.a. /b/c/a/.a.
+/b/c//////a/.a/ /b/c/a/.a
+/b/c//////a/..a /b/c/a/..a
+/b/c//////a/... /b/c/a/...
+/b/c//////a/../ /b/c
+/b/c//////a/./a /b/c/a/a
+/b/c//////a/./. /b/c/a
+/b/c//////a/.// /b/c/a
+/b/c//////a//aa /b/c/a/aa
+/b/c//////a//a. /b/c/a/a.
+/b/c//////a//a/ /b/c/a/a
+/b/c//////a//.a /b/c/a/.a
+/b/c//////a//.. /b/c
+/b/c//////a//./ /b/c/a
+/b/c//////a///a /b/c/a/a
+/b/c//////a///. /b/c/a
+/b/c//////a//// /b/c/a
+/b/c//////.aaaa /b/c/.aaaa
+/b/c//////.aaa. /b/c/.aaa.
+/b/c//////.aaa/ /b/c/.aaa
+/b/c//////.aa.a /b/c/.aa.a
+/b/c//////.aa.. /b/c/.aa..
+/b/c//////.aa./ /b/c/.aa.
+/b/c//////.aa/a /b/c/.aa/a
+/b/c//////.aa/. /b/c/.aa
+/b/c//////.aa// /b/c/.aa
+/b/c//////.a.aa /b/c/.a.aa
+/b/c//////.a.a. /b/c/.a.a.
+/b/c//////.a.a/ /b/c/.a.a
+/b/c//////.a..a /b/c/.a..a
+/b/c//////.a... /b/c/.a...
+/b/c//////.a../ /b/c/.a..
+/b/c//////.a./a /b/c/.a./a
+/b/c//////.a./. /b/c/.a.
+/b/c//////.a.// /b/c/.a.
+/b/c//////.a/aa /b/c/.a/aa
+/b/c//////.a/a. /b/c/.a/a.
+/b/c//////.a/a/ /b/c/.a/a
+/b/c//////.a/.a /b/c/.a/.a
+/b/c//////.a/.. /b/c
+/b/c//////.a/./ /b/c/.a
+/b/c//////.a//a /b/c/.a/a
+/b/c//////.a//. /b/c/.a
+/b/c//////.a/// /b/c/.a
+/b/c//////..aaa /b/c/..aaa
+/b/c//////..aa. /b/c/..aa.
+/b/c//////..aa/ /b/c/..aa
+/b/c//////..a.a /b/c/..a.a
+/b/c//////..a.. /b/c/..a..
+/b/c//////..a./ /b/c/..a.
+/b/c//////..a/a /b/c/..a/a
+/b/c//////..a/. /b/c/..a
+/b/c//////..a// /b/c/..a
+/b/c//////...aa /b/c/...aa
+/b/c//////...a. /b/c/...a.
+/b/c//////...a/ /b/c/...a
+/b/c//////....a /b/c/....a
+/b/c//////..... /b/c/.....
+/b/c//////..../ /b/c/....
+/b/c//////.../a /b/c/.../a
+/b/c//////.../. /b/c/...
+/b/c//////...// /b/c/...
+/b/c//////../aa /b/aa
+/b/c//////../a. /b/a.
+/b/c//////../a/ /b/a
+/b/c//////../.a /b/.a
+/b/c//////../.. /
+/b/c//////.././ /b
+/b/c//////..//a /b/a
+/b/c//////..//. /b
+/b/c//////../// /b
+/b/c//////./aaa /b/c/aaa
+/b/c//////./aa. /b/c/aa.
+/b/c//////./aa/ /b/c/aa
+/b/c//////./a.a /b/c/a.a
+/b/c//////./a.. /b/c/a..
+/b/c//////./a./ /b/c/a.
+/b/c//////./a/a /b/c/a/a
+/b/c//////./a/. /b/c/a
+/b/c//////./a// /b/c/a
+/b/c//////./.aa /b/c/.aa
+/b/c//////./.a. /b/c/.a.
+/b/c//////./.a/ /b/c/.a
+/b/c//////./..a /b/c/..a
+/b/c//////./... /b/c/...
+/b/c//////./../ /b
+/b/c//////././a /b/c/a
+/b/c//////././. /b/c
+/b/c//////./.// /b/c
+/b/c//////.//aa /b/c/aa
+/b/c//////.//a. /b/c/a.
+/b/c//////.//a/ /b/c/a
+/b/c//////.//.a /b/c/.a
+/b/c//////.//.. /b
+/b/c//////.//./ /b/c
+/b/c//////.///a /b/c/a
+/b/c//////.///. /b/c
+/b/c//////.//// /b/c
+/b/c///////aaaa /b/c/aaaa
+/b/c///////aaa. /b/c/aaa.
+/b/c///////aaa/ /b/c/aaa
+/b/c///////aa.a /b/c/aa.a
+/b/c///////aa.. /b/c/aa..
+/b/c///////aa./ /b/c/aa.
+/b/c///////aa/a /b/c/aa/a
+/b/c///////aa/. /b/c/aa
+/b/c///////aa// /b/c/aa
+/b/c///////a.aa /b/c/a.aa
+/b/c///////a.a. /b/c/a.a.
+/b/c///////a.a/ /b/c/a.a
+/b/c///////a..a /b/c/a..a
+/b/c///////a... /b/c/a...
+/b/c///////a../ /b/c/a..
+/b/c///////a./a /b/c/a./a
+/b/c///////a./. /b/c/a.
+/b/c///////a.// /b/c/a.
+/b/c///////a/aa /b/c/a/aa
+/b/c///////a/a. /b/c/a/a.
+/b/c///////a/a/ /b/c/a/a
+/b/c///////a/.a /b/c/a/.a
+/b/c///////a/.. /b/c
+/b/c///////a/./ /b/c/a
+/b/c///////a//a /b/c/a/a
+/b/c///////a//. /b/c/a
+/b/c///////a/// /b/c/a
+/b/c///////.aaa /b/c/.aaa
+/b/c///////.aa. /b/c/.aa.
+/b/c///////.aa/ /b/c/.aa
+/b/c///////.a.a /b/c/.a.a
+/b/c///////.a.. /b/c/.a..
+/b/c///////.a./ /b/c/.a.
+/b/c///////.a/a /b/c/.a/a
+/b/c///////.a/. /b/c/.a
+/b/c///////.a// /b/c/.a
+/b/c///////..aa /b/c/..aa
+/b/c///////..a. /b/c/..a.
+/b/c///////..a/ /b/c/..a
+/b/c///////...a /b/c/...a
+/b/c///////.... /b/c/....
+/b/c///////.../ /b/c/...
+/b/c///////../a /b/a
+/b/c///////../. /b
+/b/c///////..// /b
+/b/c///////./aa /b/c/aa
+/b/c///////./a. /b/c/a.
+/b/c///////./a/ /b/c/a
+/b/c///////./.a /b/c/.a
+/b/c///////./.. /b
+/b/c///////././ /b/c
+/b/c///////.//a /b/c/a
+/b/c///////.//. /b/c
+/b/c///////./// /b/c
+/b/c////////aaa /b/c/aaa
+/b/c////////aa. /b/c/aa.
+/b/c////////aa/ /b/c/aa
+/b/c////////a.a /b/c/a.a
+/b/c////////a.. /b/c/a..
+/b/c////////a./ /b/c/a.
+/b/c////////a/a /b/c/a/a
+/b/c////////a/. /b/c/a
+/b/c////////a// /b/c/a
+/b/c////////.aa /b/c/.aa
+/b/c////////.a. /b/c/.a.
+/b/c////////.a/ /b/c/.a
+/b/c////////..a /b/c/..a
+/b/c////////... /b/c/...
+/b/c////////../ /b
+/b/c////////./a /b/c/a
+/b/c////////./. /b/c
+/b/c////////.// /b/c
+/b/c/////////aa /b/c/aa
+/b/c/////////a. /b/c/a.
+/b/c/////////a/ /b/c/a
+/b/c/////////.a /b/c/.a
+/b/c/////////.. /b
+/b/c/////////./ /b/c
+/b/c//////////a /b/c/a
+/b/c//////////. /b/c
+/b/c/////////// /b/c
diff --git a/guava-tests/test/com/google/common/math/BigIntegerMathTest.java b/guava-tests/test/com/google/common/math/BigIntegerMathTest.java
new file mode 100644
index 0000000..504d8c2
--- /dev/null
+++ b/guava-tests/test/com/google/common/math/BigIntegerMathTest.java
@@ -0,0 +1,444 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.math;
+
+import static com.google.common.math.MathTesting.ALL_BIGINTEGER_CANDIDATES;
+import static com.google.common.math.MathTesting.ALL_ROUNDING_MODES;
+import static com.google.common.math.MathTesting.ALL_SAFE_ROUNDING_MODES;
+import static com.google.common.math.MathTesting.NEGATIVE_BIGINTEGER_CANDIDATES;
+import static com.google.common.math.MathTesting.NEGATIVE_INTEGER_CANDIDATES;
+import static com.google.common.math.MathTesting.NONZERO_BIGINTEGER_CANDIDATES;
+import static com.google.common.math.MathTesting.POSITIVE_BIGINTEGER_CANDIDATES;
+import static java.math.BigInteger.ONE;
+import static java.math.BigInteger.TEN;
+import static java.math.BigInteger.ZERO;
+import static java.math.RoundingMode.CEILING;
+import static java.math.RoundingMode.DOWN;
+import static java.math.RoundingMode.FLOOR;
+import static java.math.RoundingMode.HALF_DOWN;
+import static java.math.RoundingMode.HALF_EVEN;
+import static java.math.RoundingMode.HALF_UP;
+import static java.math.RoundingMode.UNNECESSARY;
+import static java.math.RoundingMode.UP;
+import static java.util.Arrays.asList;
+
+import com.google.common.testing.NullPointerTester;
+
+import junit.framework.TestCase;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.math.RoundingMode;
+
+/**
+ * Tests for BigIntegerMath.
+ *
+ * @author Louis Wasserman
+ */
+public class BigIntegerMathTest extends TestCase {
+  public void testConstantSqrt2PrecomputedBits() {
+    assertEquals(BigIntegerMath.sqrt(
+        BigInteger.ZERO.setBit(2 * BigIntegerMath.SQRT2_PRECOMPUTE_THRESHOLD + 1), FLOOR),
+        BigIntegerMath.SQRT2_PRECOMPUTED_BITS);
+  }
+  
+  public void testIsPowerOfTwo() {
+    for (BigInteger x : ALL_BIGINTEGER_CANDIDATES) {
+      // Checks for a single bit set.
+      boolean expected = x.signum() > 0 & x.and(x.subtract(ONE)).equals(ZERO);
+      assertEquals(expected, BigIntegerMath.isPowerOfTwo(x));
+    }
+  }
+
+  public void testLog2ZeroAlwaysThrows() {
+    for (RoundingMode mode : ALL_ROUNDING_MODES) {
+      try {
+        BigIntegerMath.log2(ZERO, mode);
+        fail("Expected IllegalArgumentException");
+      } catch (IllegalArgumentException expected) {}
+    }
+  }
+
+  public void testLog2NegativeAlwaysThrows() {
+    for (BigInteger x : POSITIVE_BIGINTEGER_CANDIDATES) {
+      for (RoundingMode mode : ALL_ROUNDING_MODES) {
+        try {
+          BigIntegerMath.log2(x.negate(), mode);
+          fail("Expected IllegalArgumentException");
+        } catch (IllegalArgumentException expected) {}
+      }
+    }
+  }
+
+  public void testLog2Floor() {
+    for (BigInteger x : POSITIVE_BIGINTEGER_CANDIDATES) {
+      for (RoundingMode mode : asList(FLOOR, DOWN)) {
+        int result = BigIntegerMath.log2(x, mode);
+        assertTrue(ZERO.setBit(result).compareTo(x) <= 0);
+        assertTrue(ZERO.setBit(result + 1).compareTo(x) > 0);
+      }
+    }
+  }
+
+  public void testLog2Ceiling() {
+    for (BigInteger x : POSITIVE_BIGINTEGER_CANDIDATES) {
+      for (RoundingMode mode : asList(CEILING, UP)) {
+        int result = BigIntegerMath.log2(x, mode);
+        assertTrue(ZERO.setBit(result).compareTo(x) >= 0);
+        assertTrue(result == 0 || ZERO.setBit(result - 1).compareTo(x) < 0);
+      }
+    }
+  }
+
+  // Relies on the correctness of isPowerOfTwo(BigInteger).
+  public void testLog2Exact() {
+    for (BigInteger x : POSITIVE_BIGINTEGER_CANDIDATES) {
+      // We only expect an exception if x was not a power of 2.
+      boolean isPowerOf2 = BigIntegerMath.isPowerOfTwo(x);
+      try {
+        assertEquals(x, ZERO.setBit(BigIntegerMath.log2(x, UNNECESSARY)));
+        assertTrue(isPowerOf2);
+      } catch (ArithmeticException e) {
+        assertFalse(isPowerOf2);
+      }
+    }
+  }
+
+  public void testLog2HalfUp() {
+    for (BigInteger x : POSITIVE_BIGINTEGER_CANDIDATES) {
+      int result = BigIntegerMath.log2(x, HALF_UP);
+      BigInteger x2 = x.pow(2);
+      // x^2 < 2^(2 * result + 1), or else we would have rounded up
+      assertTrue(ZERO.setBit(2 * result + 1).compareTo(x2) > 0);
+      // x^2 >= 2^(2 * result - 1), or else we would have rounded down
+      assertTrue(result == 0 || ZERO.setBit(2 * result - 1).compareTo(x2) <= 0);
+    }
+  }
+
+  public void testLog2HalfDown() {
+    for (BigInteger x : POSITIVE_BIGINTEGER_CANDIDATES) {
+      int result = BigIntegerMath.log2(x, HALF_DOWN);
+      BigInteger x2 = x.pow(2);
+      // x^2 <= 2^(2 * result + 1), or else we would have rounded up
+      assertTrue(ZERO.setBit(2 * result + 1).compareTo(x2) >= 0);
+      // x^2 > 2^(2 * result - 1), or else we would have rounded down
+      assertTrue(result == 0 || ZERO.setBit(2 * result - 1).compareTo(x2) < 0);
+    }
+  }
+
+  // Relies on the correctness of log2(BigInteger, {HALF_UP,HALF_DOWN}).
+  public void testLog2HalfEven() {
+    for (BigInteger x : POSITIVE_BIGINTEGER_CANDIDATES) {
+      int halfEven = BigIntegerMath.log2(x, HALF_EVEN);
+      // Now figure out what rounding mode we should behave like (it depends if FLOOR was
+      // odd/even).
+      boolean floorWasEven = (BigIntegerMath.log2(x, FLOOR) & 1) == 0;
+      assertEquals(BigIntegerMath.log2(x, floorWasEven ? HALF_DOWN : HALF_UP), halfEven);
+    }
+  }
+
+  public void testLog10ZeroAlwaysThrows() {
+    for (RoundingMode mode : ALL_ROUNDING_MODES) {
+      try {
+        BigIntegerMath.log10(ZERO, mode);
+        fail("Expected IllegalArgumentException");
+      } catch (IllegalArgumentException expected) {}
+    }
+  }
+
+  public void testLog10NegativeAlwaysThrows() {
+    for (BigInteger x : POSITIVE_BIGINTEGER_CANDIDATES) {
+      for (RoundingMode mode : ALL_ROUNDING_MODES) {
+        try {
+          BigIntegerMath.log10(x.negate(), mode);
+          fail("Expected IllegalArgumentException");
+        } catch (IllegalArgumentException expected) {}
+      }
+    }
+  }
+
+  public void testLog10Floor() {
+    for (BigInteger x : POSITIVE_BIGINTEGER_CANDIDATES) {
+      for (RoundingMode mode : asList(FLOOR, DOWN)) {
+        int result = BigIntegerMath.log10(x, mode);
+        assertTrue(TEN.pow(result).compareTo(x) <= 0);
+        assertTrue(TEN.pow(result + 1).compareTo(x) > 0);
+      }
+    }
+  }
+
+  public void testLog10Ceiling() {
+    for (BigInteger x : POSITIVE_BIGINTEGER_CANDIDATES) {
+      for (RoundingMode mode : asList(CEILING, UP)) {
+        int result = BigIntegerMath.log10(x, mode);
+        assertTrue(TEN.pow(result).compareTo(x) >= 0);
+        assertTrue(result == 0 || TEN.pow(result - 1).compareTo(x) < 0);
+      }
+    }
+  }
+
+  // Relies on the correctness of log10(BigInteger, FLOOR).
+  public void testLog10Exact() {
+    for (BigInteger x : POSITIVE_BIGINTEGER_CANDIDATES) {
+      int logFloor = BigIntegerMath.log10(x, FLOOR);
+      boolean expectSuccess = TEN.pow(logFloor).equals(x);
+      try {
+        assertEquals(logFloor, BigIntegerMath.log10(x, UNNECESSARY));
+        assertTrue(expectSuccess);
+      } catch (ArithmeticException e) {
+        assertFalse(expectSuccess);
+      }
+    }
+  }
+
+  public void testLog10HalfUp() {
+    for (BigInteger x : POSITIVE_BIGINTEGER_CANDIDATES) {
+      int result = BigIntegerMath.log10(x, HALF_UP);
+      BigInteger x2 = x.pow(2);
+      // x^2 < 10^(2 * result + 1), or else we would have rounded up
+      assertTrue(TEN.pow(2 * result + 1).compareTo(x2) > 0);
+      // x^2 >= 10^(2 * result - 1), or else we would have rounded down
+      assertTrue(result == 0 || TEN.pow(2 * result - 1).compareTo(x2) <= 0);
+    }
+  }
+
+  public void testLog10HalfDown() {
+    for (BigInteger x : POSITIVE_BIGINTEGER_CANDIDATES) {
+      int result = BigIntegerMath.log10(x, HALF_DOWN);
+      BigInteger x2 = x.pow(2);
+      // x^2 <= 10^(2 * result + 1), or else we would have rounded up
+      assertTrue(TEN.pow(2 * result + 1).compareTo(x2) >= 0);
+      // x^2 > 10^(2 * result - 1), or else we would have rounded down
+      assertTrue(result == 0 || TEN.pow(2 * result - 1).compareTo(x2) < 0);
+    }
+  }
+
+  // Relies on the correctness of log10(BigInteger, {HALF_UP,HALF_DOWN}).
+  public void testLog10HalfEven() {
+    for (BigInteger x : POSITIVE_BIGINTEGER_CANDIDATES) {
+      int halfEven = BigIntegerMath.log10(x, HALF_EVEN);
+      // Now figure out what rounding mode we should behave like (it depends if FLOOR was
+      // odd/even).
+      boolean floorWasEven = (BigIntegerMath.log10(x, FLOOR) & 1) == 0;
+      assertEquals(BigIntegerMath.log10(x, floorWasEven ? HALF_DOWN : HALF_UP), halfEven);
+    }
+  }
+
+  public void testLog10TrivialOnPowerOf10() {
+    BigInteger x = BigInteger.TEN.pow(100);
+    for (RoundingMode mode : ALL_ROUNDING_MODES) {
+      assertEquals(100, BigIntegerMath.log10(x, mode));
+    }
+  }
+
+  public void testSqrtZeroAlwaysZero() {
+    for (RoundingMode mode : ALL_ROUNDING_MODES) {
+      assertEquals(ZERO, BigIntegerMath.sqrt(ZERO, mode));
+    }
+  }
+
+  public void testSqrtNegativeAlwaysThrows() {
+    for (BigInteger x : NEGATIVE_BIGINTEGER_CANDIDATES) {
+      for (RoundingMode mode : ALL_ROUNDING_MODES) {
+        try {
+          BigIntegerMath.sqrt(x, mode);
+          fail("Expected IllegalArgumentException");
+        } catch (IllegalArgumentException expected) {}
+      }
+    }
+  }
+
+  public void testSqrtFloor() {
+    for (BigInteger x : POSITIVE_BIGINTEGER_CANDIDATES) {
+      for (RoundingMode mode : asList(FLOOR, DOWN)) {
+        BigInteger result = BigIntegerMath.sqrt(x, mode);
+        assertTrue(result.compareTo(ZERO) > 0);
+        assertTrue(result.pow(2).compareTo(x) <= 0);
+        assertTrue(result.add(ONE).pow(2).compareTo(x) > 0);
+      }
+    }
+  }
+
+  public void testSqrtCeiling() {
+    for (BigInteger x : POSITIVE_BIGINTEGER_CANDIDATES) {
+      for (RoundingMode mode : asList(CEILING, UP)) {
+        BigInteger result = BigIntegerMath.sqrt(x, mode);
+        assertTrue(result.compareTo(ZERO) > 0);
+        assertTrue(result.pow(2).compareTo(x) >= 0);
+        assertTrue(result.signum() == 0 || result.subtract(ONE).pow(2).compareTo(x) < 0);
+      }
+    }
+  }
+
+  // Relies on the correctness of sqrt(BigInteger, FLOOR).
+  public void testSqrtExact() {
+    for (BigInteger x : POSITIVE_BIGINTEGER_CANDIDATES) {
+      BigInteger floor = BigIntegerMath.sqrt(x, FLOOR);
+      // We only expect an exception if x was not a perfect square.
+      boolean isPerfectSquare = floor.pow(2).equals(x);
+      try {
+        assertEquals(floor, BigIntegerMath.sqrt(x, UNNECESSARY));
+        assertTrue(isPerfectSquare);
+      } catch (ArithmeticException e) {
+        assertFalse(isPerfectSquare);
+      }
+    }
+  }
+
+  public void testSqrtHalfUp() {
+    for (BigInteger x : POSITIVE_BIGINTEGER_CANDIDATES) {
+      BigInteger result = BigIntegerMath.sqrt(x, HALF_UP);
+      BigInteger plusHalfSquared = result.pow(2).add(result).shiftLeft(2).add(ONE);
+      BigInteger x4 = x.shiftLeft(2);
+      // sqrt(x) < result + 0.5, so 4 * x < (result + 0.5)^2 * 4
+      // (result + 0.5)^2 * 4 = (result^2 + result)*4 + 1
+      assertTrue(x4.compareTo(plusHalfSquared) < 0);
+      BigInteger minusHalfSquared = result.pow(2).subtract(result).shiftLeft(2).add(ONE);
+      // sqrt(x) > result - 0.5, so 4 * x > (result - 0.5)^2 * 4
+      // (result - 0.5)^2 * 4 = (result^2 - result)*4 + 1
+      assertTrue(result.equals(ZERO) || x4.compareTo(minusHalfSquared) >= 0);
+    }
+  }
+
+  public void testSqrtHalfDown() {
+    for (BigInteger x : POSITIVE_BIGINTEGER_CANDIDATES) {
+      BigInteger result = BigIntegerMath.sqrt(x, HALF_DOWN);
+      BigInteger plusHalfSquared = result.pow(2).add(result).shiftLeft(2).add(ONE);
+      BigInteger x4 = x.shiftLeft(2);
+      // sqrt(x) <= result + 0.5, so 4 * x <= (result + 0.5)^2 * 4
+      // (result + 0.5)^2 * 4 = (result^2 + result)*4 + 1
+      assertTrue(x4.compareTo(plusHalfSquared) <= 0);
+      BigInteger minusHalfSquared = result.pow(2).subtract(result).shiftLeft(2).add(ONE);
+      // sqrt(x) > result - 0.5, so 4 * x > (result - 0.5)^2 * 4
+      // (result - 0.5)^2 * 4 = (result^2 - result)*4 + 1
+      assertTrue(result.equals(ZERO) || x4.compareTo(minusHalfSquared) > 0);
+    }
+  }
+
+  // Relies on the correctness of sqrt(BigInteger, {HALF_UP,HALF_DOWN}).
+  public void testSqrtHalfEven() {
+    for (BigInteger x : POSITIVE_BIGINTEGER_CANDIDATES) {
+      BigInteger halfEven = BigIntegerMath.sqrt(x, HALF_EVEN);
+      // Now figure out what rounding mode we should behave like (it depends if FLOOR was
+      // odd/even).
+      boolean floorWasOdd = BigIntegerMath.sqrt(x, FLOOR).testBit(0);
+      assertEquals(BigIntegerMath.sqrt(x, floorWasOdd ? HALF_UP : HALF_DOWN), halfEven);
+    }
+  }
+
+  public void testDivNonZero() {
+    for (BigInteger p : NONZERO_BIGINTEGER_CANDIDATES) {
+      for (BigInteger q : NONZERO_BIGINTEGER_CANDIDATES) {
+        for (RoundingMode mode : ALL_SAFE_ROUNDING_MODES) {
+          BigInteger expected =
+              new BigDecimal(p).divide(new BigDecimal(q), 0, mode).toBigIntegerExact();
+          assertEquals(expected, BigIntegerMath.divide(p, q, mode));
+        }
+      }
+    }
+  }
+
+  public void testDivNonZeroExact() {
+    for (BigInteger p : NONZERO_BIGINTEGER_CANDIDATES) {
+      for (BigInteger q : NONZERO_BIGINTEGER_CANDIDATES) {
+        boolean dividesEvenly = p.remainder(q).equals(ZERO);
+
+        try {
+          assertEquals(p, BigIntegerMath.divide(p, q, UNNECESSARY).multiply(q));
+          assertTrue(dividesEvenly);
+        } catch (ArithmeticException e) {
+          assertFalse(dividesEvenly);
+        }
+      }
+    }
+  }
+
+  public void testZeroDivIsAlwaysZero() {
+    for (BigInteger q : NONZERO_BIGINTEGER_CANDIDATES) {
+      for (RoundingMode mode : ALL_ROUNDING_MODES) {
+        assertEquals(ZERO, BigIntegerMath.divide(ZERO, q, mode));
+      }
+    }
+  }
+
+  public void testDivByZeroAlwaysFails() {
+    for (BigInteger p : ALL_BIGINTEGER_CANDIDATES) {
+      for (RoundingMode mode : ALL_ROUNDING_MODES) {
+        try {
+          BigIntegerMath.divide(p, ZERO, mode);
+          fail("Expected ArithmeticException");
+        } catch (ArithmeticException expected) {}
+      }
+    }
+  }
+
+  public void testFactorial() {
+    BigInteger expected = BigInteger.ONE;
+    for (int i = 1; i <= 300; i++) {
+      expected = expected.multiply(BigInteger.valueOf(i));
+      assertEquals(expected, BigIntegerMath.factorial(i));
+    }
+  }
+
+  public void testFactorial0() {
+    assertEquals(BigInteger.ONE, BigIntegerMath.factorial(0));
+  }
+
+  public void testFactorialNegative() {
+    for (int n : NEGATIVE_INTEGER_CANDIDATES) {
+      try {
+        BigIntegerMath.factorial(n);
+        fail("Expected IllegalArgumentException");
+      } catch (IllegalArgumentException expected) {}
+    }
+  }
+  
+  // Depends on the correctness of BigIntegerMath.factorial
+  public void testBinomial() {
+    for (int n = 0; n <= 50; n++) {
+      for (int k = 0; k <= n; k++) {
+        BigInteger expected = BigIntegerMath
+            .factorial(n)
+            .divide(BigIntegerMath.factorial(k))
+            .divide(BigIntegerMath.factorial(n - k));
+        assertEquals(expected, BigIntegerMath.binomial(n, k));
+      }
+    }
+  }
+
+  public void testBinomialOutside() {
+    for (int n = 0; n <= 50; n++) {
+      try {
+        BigIntegerMath.binomial(n, -1);
+        fail("Expected IllegalArgumentException");
+      } catch (IllegalArgumentException expected) {}
+      try {
+        BigIntegerMath.binomial(n, n + 1);
+        fail("Expected IllegalArgumentException");
+      } catch (IllegalArgumentException expected) {}
+    }
+  }
+
+  public void testNullPointers() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.setDefault(BigInteger.class, ONE);
+    tester.setDefault(RoundingMode.class, FLOOR);
+    tester.setDefault(int.class, 1);
+    tester.setDefault(long.class, 1L);
+    tester.testAllPublicStaticMethods(BigIntegerMath.class);
+  }
+}
diff --git a/guava-tests/test/com/google/common/math/DoubleMathTest.java b/guava-tests/test/com/google/common/math/DoubleMathTest.java
new file mode 100644
index 0000000..9fe6d90
--- /dev/null
+++ b/guava-tests/test/com/google/common/math/DoubleMathTest.java
@@ -0,0 +1,485 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.math;
+
+import static com.google.common.math.MathTesting.ALL_DOUBLE_CANDIDATES;
+import static com.google.common.math.MathTesting.ALL_ROUNDING_MODES;
+import static com.google.common.math.MathTesting.ALL_SAFE_ROUNDING_MODES;
+import static com.google.common.math.MathTesting.FRACTIONAL_DOUBLE_CANDIDATES;
+import static com.google.common.math.MathTesting.INTEGRAL_DOUBLE_CANDIDATES;
+import static com.google.common.math.MathTesting.NEGATIVE_INTEGER_CANDIDATES;
+import static com.google.common.math.MathTesting.POSITIVE_FINITE_DOUBLE_CANDIDATES;
+import static java.math.RoundingMode.CEILING;
+import static java.math.RoundingMode.DOWN;
+import static java.math.RoundingMode.FLOOR;
+import static java.math.RoundingMode.HALF_DOWN;
+import static java.math.RoundingMode.HALF_EVEN;
+import static java.math.RoundingMode.HALF_UP;
+import static java.math.RoundingMode.UNNECESSARY;
+import static java.math.RoundingMode.UP;
+import static java.util.Arrays.asList;
+
+import com.google.common.testing.NullPointerTester;
+
+import junit.framework.TestCase;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.math.RoundingMode;
+import java.util.Arrays;
+
+/**
+ * Tests for {@code DoubleMath}.
+ *
+ * @author Louis Wasserman
+ */
+public class DoubleMathTest extends TestCase {
+
+  private static final BigDecimal MAX_INT_AS_BIG_DECIMAL = BigDecimal.valueOf(Integer.MAX_VALUE);
+  private static final BigDecimal MIN_INT_AS_BIG_DECIMAL = BigDecimal.valueOf(Integer.MIN_VALUE);
+
+  private static final BigDecimal MAX_LONG_AS_BIG_DECIMAL = BigDecimal.valueOf(Long.MAX_VALUE);
+  private static final BigDecimal MIN_LONG_AS_BIG_DECIMAL = BigDecimal.valueOf(Long.MIN_VALUE);
+
+  public void testConstantsMaxFactorial(){
+    BigInteger MAX_DOUBLE_VALUE = BigDecimal.valueOf(Double.MAX_VALUE).toBigInteger();
+    assertTrue(BigIntegerMath.factorial(DoubleMath.MAX_FACTORIAL).compareTo(MAX_DOUBLE_VALUE) <= 0);
+    assertTrue(
+        BigIntegerMath.factorial(DoubleMath.MAX_FACTORIAL + 1).compareTo(MAX_DOUBLE_VALUE) > 0);
+  }
+
+  public void testConstantsEverySixteenthFactorial() {
+    for (int i = 0, n = 0; n <= DoubleMath.MAX_FACTORIAL; i++, n += 16) {
+      assertEquals(
+          BigIntegerMath.factorial(n).doubleValue(), DoubleMath.EVERY_SIXTEENTH_FACTORIAL[i]);
+    }
+  }
+  
+  public void testRoundIntegralDoubleToInt() {
+    for (double d : INTEGRAL_DOUBLE_CANDIDATES) {
+      for (RoundingMode mode : ALL_SAFE_ROUNDING_MODES) {
+        BigDecimal expected = new BigDecimal(d).setScale(0, mode);
+        boolean isInBounds = expected.compareTo(MAX_INT_AS_BIG_DECIMAL) <= 0
+            & expected.compareTo(MIN_INT_AS_BIG_DECIMAL) >= 0;
+
+        try {
+          assertEquals(expected.intValue(), DoubleMath.roundToInt(d, mode));
+          assertTrue(isInBounds);
+        } catch (ArithmeticException e) {
+          assertFalse(isInBounds);
+        }
+      }
+    }
+  }
+
+  public void testRoundFractionalDoubleToInt() {
+    for (double d : FRACTIONAL_DOUBLE_CANDIDATES) {
+      for (RoundingMode mode : ALL_SAFE_ROUNDING_MODES) {
+        BigDecimal expected = new BigDecimal(d).setScale(0, mode);
+        boolean isInBounds = expected.compareTo(MAX_INT_AS_BIG_DECIMAL) <= 0
+            & expected.compareTo(MIN_INT_AS_BIG_DECIMAL) >= 0;
+
+        try {
+          assertEquals(expected.intValue(), DoubleMath.roundToInt(d, mode));
+          assertTrue(isInBounds);
+        } catch (ArithmeticException e) {
+          assertFalse(isInBounds);
+        }
+      }
+    }
+  }
+
+  public void testRoundExactIntegralDoubleToInt() {
+    for (double d : INTEGRAL_DOUBLE_CANDIDATES) {
+      BigDecimal expected = new BigDecimal(d).setScale(0, UNNECESSARY);
+      boolean isInBounds = expected.compareTo(MAX_INT_AS_BIG_DECIMAL) <= 0
+          & expected.compareTo(MIN_INT_AS_BIG_DECIMAL) >= 0;
+
+      try {
+        assertEquals(expected.intValue(), DoubleMath.roundToInt(d, UNNECESSARY));
+        assertTrue(isInBounds);
+      } catch (ArithmeticException e) {
+        assertFalse(isInBounds);
+      }
+    }
+  }
+
+  public void testRoundExactFractionalDoubleToIntFails() {
+    for (double d : FRACTIONAL_DOUBLE_CANDIDATES) {
+      try {
+        DoubleMath.roundToInt(d, UNNECESSARY);
+        fail("Expected ArithmeticException");
+      } catch (ArithmeticException expected) {}
+    }
+  }
+
+  public void testRoundNaNToIntAlwaysFails() {
+    for (RoundingMode mode : ALL_ROUNDING_MODES) {
+      try {
+        DoubleMath.roundToInt(Double.NaN, mode);
+        fail("Expected ArithmeticException");
+      } catch (ArithmeticException expected) {}
+    }
+  }
+
+  public void testRoundInfiniteToIntAlwaysFails() {
+    for (RoundingMode mode : ALL_ROUNDING_MODES) {
+      try {
+        DoubleMath.roundToInt(Double.POSITIVE_INFINITY, mode);
+        fail("Expected ArithmeticException");
+      } catch (ArithmeticException expected) {}
+      try {
+        DoubleMath.roundToInt(Double.NEGATIVE_INFINITY, mode);
+        fail("Expected ArithmeticException");
+      } catch (ArithmeticException expected) {}
+    }
+  }
+
+  public void testRoundIntegralDoubleToLong() {
+    for (double d : INTEGRAL_DOUBLE_CANDIDATES) {
+      for (RoundingMode mode : ALL_SAFE_ROUNDING_MODES) {
+        BigDecimal expected = new BigDecimal(d).setScale(0, mode);
+        boolean isInBounds = expected.compareTo(MAX_LONG_AS_BIG_DECIMAL) <= 0
+            & expected.compareTo(MIN_LONG_AS_BIG_DECIMAL) >= 0;
+
+        try {
+          assertEquals(expected.longValue(), DoubleMath.roundToLong(d, mode));
+          assertTrue(isInBounds);
+        } catch (ArithmeticException e) {
+          assertFalse(isInBounds);
+        }
+      }
+    }
+  }
+
+  public void testRoundFractionalDoubleToLong() {
+    for (double d : FRACTIONAL_DOUBLE_CANDIDATES) {
+      for (RoundingMode mode : ALL_SAFE_ROUNDING_MODES) {
+        BigDecimal expected = new BigDecimal(d).setScale(0, mode);
+        boolean isInBounds = expected.compareTo(MAX_LONG_AS_BIG_DECIMAL) <= 0
+            & expected.compareTo(MIN_LONG_AS_BIG_DECIMAL) >= 0;
+
+        try {
+          assertEquals(expected.longValue(), DoubleMath.roundToLong(d, mode));
+          assertTrue(isInBounds);
+        } catch (ArithmeticException e) {
+          assertFalse(isInBounds);
+        }
+      }
+    }
+  }
+
+  public void testRoundExactIntegralDoubleToLong() {
+    for (double d : INTEGRAL_DOUBLE_CANDIDATES) {
+      // every mode except UNNECESSARY
+      BigDecimal expected = new BigDecimal(d).setScale(0, UNNECESSARY);
+      boolean isInBounds = expected.compareTo(MAX_LONG_AS_BIG_DECIMAL) <= 0
+          & expected.compareTo(MIN_LONG_AS_BIG_DECIMAL) >= 0;
+
+      try {
+        assertEquals(expected.longValue(), DoubleMath.roundToLong(d, UNNECESSARY));
+        assertTrue(isInBounds);
+      } catch (ArithmeticException e) {
+        assertFalse(isInBounds);
+      }
+    }
+  }
+
+  public void testRoundExactFractionalDoubleToLongFails() {
+    for (double d : FRACTIONAL_DOUBLE_CANDIDATES) {
+      try {
+        DoubleMath.roundToLong(d, UNNECESSARY);
+        fail("Expected ArithmeticException");
+      } catch (ArithmeticException expected) {}
+    }
+  }
+
+  public void testRoundNaNToLongAlwaysFails() {
+    for (RoundingMode mode : ALL_ROUNDING_MODES) {
+      try {
+        DoubleMath.roundToLong(Double.NaN, mode);
+        fail("Expected ArithmeticException");
+      } catch (ArithmeticException expected) {}
+    }
+  }
+
+  public void testRoundInfiniteToLongAlwaysFails() {
+    for (RoundingMode mode : ALL_ROUNDING_MODES) {
+      try {
+        DoubleMath.roundToLong(Double.POSITIVE_INFINITY, mode);
+        fail("Expected ArithmeticException");
+      } catch (ArithmeticException expected) {}
+      try {
+        DoubleMath.roundToLong(Double.NEGATIVE_INFINITY, mode);
+        fail("Expected ArithmeticException");
+      } catch (ArithmeticException expected) {}
+    }
+  }
+
+  public void testRoundIntegralDoubleToBigInteger() {
+    for (double d : INTEGRAL_DOUBLE_CANDIDATES) {
+      for (RoundingMode mode : ALL_SAFE_ROUNDING_MODES) {
+        BigDecimal expected = new BigDecimal(d).setScale(0, mode);
+        assertEquals(expected.toBigInteger(), DoubleMath.roundToBigInteger(d, mode));
+      }
+    }
+  }
+
+  public void testRoundFractionalDoubleToBigInteger() {
+    for (double d : FRACTIONAL_DOUBLE_CANDIDATES) {
+      for (RoundingMode mode : ALL_SAFE_ROUNDING_MODES) {
+        BigDecimal expected = new BigDecimal(d).setScale(0, mode);
+        assertEquals(expected.toBigInteger(), DoubleMath.roundToBigInteger(d, mode));
+      }
+    }
+  }
+
+  public void testRoundExactIntegralDoubleToBigInteger() {
+    for (double d : INTEGRAL_DOUBLE_CANDIDATES) {
+      BigDecimal expected = new BigDecimal(d).setScale(0, UNNECESSARY);
+      assertEquals(expected.toBigInteger(), DoubleMath.roundToBigInteger(d, UNNECESSARY));
+    }
+  }
+
+  public void testRoundExactFractionalDoubleToBigIntegerFails() {
+    for (double d : FRACTIONAL_DOUBLE_CANDIDATES) {
+      try {
+        DoubleMath.roundToBigInteger(d, UNNECESSARY);
+        fail("Expected ArithmeticException");
+      } catch (ArithmeticException expected) {}
+    }
+  }
+
+  public void testRoundNaNToBigIntegerAlwaysFails() {
+    for (RoundingMode mode : ALL_ROUNDING_MODES) {
+      try {
+        DoubleMath.roundToBigInteger(Double.NaN, mode);
+        fail("Expected ArithmeticException");
+      } catch (ArithmeticException expected) {}
+    }
+  }
+
+  public void testRoundInfiniteToBigIntegerAlwaysFails() {
+    for (RoundingMode mode : ALL_ROUNDING_MODES) {
+      try {
+        DoubleMath.roundToBigInteger(Double.POSITIVE_INFINITY, mode);
+        fail("Expected ArithmeticException");
+      } catch (ArithmeticException expected) {}
+      try {
+        DoubleMath.roundToBigInteger(Double.NEGATIVE_INFINITY, mode);
+        fail("Expected ArithmeticException");
+      } catch (ArithmeticException expected) {}
+    }
+  }
+
+  public void testRoundLog2Floor() {
+    for (double d : POSITIVE_FINITE_DOUBLE_CANDIDATES) {
+      int log2 = DoubleMath.log2(d, FLOOR);
+      assertTrue(StrictMath.pow(2.0, log2) <= d);
+      assertTrue(StrictMath.pow(2.0, log2 + 1) > d);
+    }
+  }
+
+  public void testRoundLog2Ceiling() {
+    for (double d : POSITIVE_FINITE_DOUBLE_CANDIDATES) {
+      int log2 = DoubleMath.log2(d, CEILING);
+      assertTrue(StrictMath.pow(2.0, log2) >= d);
+      double z = StrictMath.pow(2.0, log2 - 1);
+      assertTrue(z < d);
+    }
+  }
+
+  public void testRoundLog2Down() {
+    for (double d : POSITIVE_FINITE_DOUBLE_CANDIDATES) {
+      int log2 = DoubleMath.log2(d, DOWN);
+      if (d >= 1.0) {
+        assertTrue(log2 >= 0);
+        assertTrue(StrictMath.pow(2.0, log2) <= d);
+        assertTrue(StrictMath.pow(2.0, log2 + 1) > d);
+      } else {
+        assertTrue(log2 <= 0);
+        assertTrue(StrictMath.pow(2.0, log2) >= d);
+        assertTrue(StrictMath.pow(2.0, log2 - 1) < d);
+      }
+    }
+  }
+
+  public void testRoundLog2Up() {
+    for (double d : POSITIVE_FINITE_DOUBLE_CANDIDATES) {
+      int log2 = DoubleMath.log2(d, UP);
+      if (d >= 1.0) {
+        assertTrue(log2 >= 0);
+        assertTrue(StrictMath.pow(2.0, log2) >= d);
+        assertTrue(StrictMath.pow(2.0, log2 - 1) < d);
+      } else {
+        assertTrue(log2 <= 0);
+        assertTrue(StrictMath.pow(2.0, log2) <= d);
+        assertTrue(StrictMath.pow(2.0, log2 + 1) > d);
+      }
+    }
+  }
+
+  public void testRoundLog2Half() {
+    // We don't expect perfect rounding accuracy.
+    for (int exp : asList(-1022, -50, -1, 0, 1, 2, 3, 4, 100, 1022, 1023)) {
+      for (RoundingMode mode : asList(HALF_EVEN, HALF_UP, HALF_DOWN)) {
+        double x = Math.scalb(Math.sqrt(2) + 0.001, exp);
+        double y = Math.scalb(Math.sqrt(2) - 0.001, exp);
+        if (exp < 0) {
+          assertEquals(exp + 1, DoubleMath.log2(x, mode));
+          assertEquals(exp, DoubleMath.log2(y, mode));
+        } else {
+          assertEquals(exp + 1, DoubleMath.log2(x, mode));
+          assertEquals(exp, DoubleMath.log2(y, mode));
+        }
+      }
+    }
+  }
+
+  public void testRoundLog2ThrowsOnZerosInfinitiesAndNaN() {
+    for (RoundingMode mode : ALL_ROUNDING_MODES) {
+      for (double d :
+          asList(0.0, -0.0, Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY, Double.NaN)) {
+        try {
+          DoubleMath.log2(d, mode);
+          fail("Expected IllegalArgumentException");
+        } catch (IllegalArgumentException e) {}
+      }
+    }
+  }
+
+  public void testRoundLog2ThrowsOnNegative() {
+    for (RoundingMode mode : ALL_ROUNDING_MODES) {
+      for (double d : POSITIVE_FINITE_DOUBLE_CANDIDATES) {
+        try {
+          DoubleMath.log2(-d, mode);
+          fail("Expected IllegalArgumentException");
+        } catch (IllegalArgumentException e) {}
+      }
+    }
+  }
+
+  public void testIsPowerOfTwoYes() {
+    for (int i = -1074; i <= 1023; i++) {
+      assertTrue(DoubleMath.isPowerOfTwo(StrictMath.pow(2.0, i)));
+    }
+  }
+
+  public void testIsPowerOfTwo() {
+    for (double x : ALL_DOUBLE_CANDIDATES) {
+      boolean expected = x > 0 && !Double.isInfinite(x) && !Double.isNaN(x)
+          && StrictMath.pow(2.0, DoubleMath.log2(x, FLOOR)) == x;
+      assertEquals(expected, DoubleMath.isPowerOfTwo(x));
+    }
+  }
+
+  public void testLog2Accuracy() {
+    for (double d : POSITIVE_FINITE_DOUBLE_CANDIDATES) {
+      double dmLog2 = DoubleMath.log2(d);
+      double trueLog2 = trueLog2(d);
+      assertTrue(Math.abs(dmLog2 - trueLog2) <= Math.ulp(trueLog2));
+    }
+  }
+
+  public void testLog2SemiMonotonic(){
+    for (double d : POSITIVE_FINITE_DOUBLE_CANDIDATES) {
+      assertTrue(DoubleMath.log2(d + 0.01) >= DoubleMath.log2(d));
+    }
+  }
+  
+  public void testLog2Negative() {
+    for (double d : POSITIVE_FINITE_DOUBLE_CANDIDATES) {
+      assertTrue(Double.isNaN(DoubleMath.log2(-d)));
+    }
+  }
+
+  public void testLog2Zero() {
+    assertEquals(Double.NEGATIVE_INFINITY, DoubleMath.log2(0.0));
+    assertEquals(Double.NEGATIVE_INFINITY, DoubleMath.log2(-0.0));
+  }
+
+  public void testLog2NaNInfinity() {
+    assertEquals(Double.POSITIVE_INFINITY, DoubleMath.log2(Double.POSITIVE_INFINITY));
+    assertTrue(Double.isNaN(DoubleMath.log2(Double.NEGATIVE_INFINITY)));
+    assertTrue(Double.isNaN(DoubleMath.log2(Double.NaN)));
+  }
+
+  private strictfp double trueLog2(double d) {
+    double trueLog2 = StrictMath.log(d) / StrictMath.log(2);
+    // increment until it's >= the true value
+    while (StrictMath.pow(2.0, trueLog2) < d) {
+      trueLog2 = StrictMath.nextUp(trueLog2);
+    }
+    // decrement until it's <= the true value
+    while (StrictMath.pow(2.0, trueLog2) > d) {
+      trueLog2 = StrictMath.nextAfter(trueLog2, Double.NEGATIVE_INFINITY);
+    }
+    if (StrictMath.abs(StrictMath.pow(2.0, trueLog2) - d)
+        > StrictMath.abs(StrictMath.pow(2.0, StrictMath.nextUp(trueLog2)) - d)) {
+      trueLog2 = StrictMath.nextUp(trueLog2);
+    }
+    return trueLog2;
+  }
+
+  public void testIsMathematicalIntegerIntegral() {
+    for (double d : INTEGRAL_DOUBLE_CANDIDATES) {
+      assertTrue(DoubleMath.isMathematicalInteger(d));
+    }
+  }
+
+  public void testIsMathematicalIntegerFractional() {
+    for (double d : FRACTIONAL_DOUBLE_CANDIDATES) {
+      assertFalse(DoubleMath.isMathematicalInteger(d));
+    }
+  }
+
+  public void testIsMathematicalIntegerNotFinite() {
+    for (double d :
+        Arrays.asList(Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY, Double.NaN)) {
+      assertFalse(DoubleMath.isMathematicalInteger(d));
+    }
+  }
+
+  public void testFactorial() {
+    for (int i = 0; i <= DoubleMath.MAX_FACTORIAL; i++) {
+      double actual = BigIntegerMath.factorial(i).doubleValue();
+      double result = DoubleMath.factorial(i);
+      assertEquals(actual, result, Math.ulp(actual));
+    }
+  }
+
+  public void testFactorialTooHigh() {
+    assertEquals(Double.POSITIVE_INFINITY, DoubleMath.factorial(DoubleMath.MAX_FACTORIAL + 1));
+    assertEquals(Double.POSITIVE_INFINITY, DoubleMath.factorial(DoubleMath.MAX_FACTORIAL + 20));
+  }
+
+  public void testFactorialNegative() {
+    for (int n : NEGATIVE_INTEGER_CANDIDATES) {
+      try {
+        DoubleMath.factorial(n);
+        fail("Expected IllegalArgumentException");
+      } catch (IllegalArgumentException expected) {}
+    }
+  }
+  
+  public void testNullPointers() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.setDefault(RoundingMode.class, FLOOR);
+    tester.setDefault(double.class, 3.0);
+    tester.testAllPublicStaticMethods(DoubleMath.class);
+  }
+}
diff --git a/guava-tests/test/com/google/common/math/DoubleUtilsTest.java b/guava-tests/test/com/google/common/math/DoubleUtilsTest.java
new file mode 100644
index 0000000..f2f99a7
--- /dev/null
+++ b/guava-tests/test/com/google/common/math/DoubleUtilsTest.java
@@ -0,0 +1,45 @@
+package com.google.common.math;
+
+import static com.google.common.math.MathTesting.ALL_BIGINTEGER_CANDIDATES;
+import static com.google.common.math.MathTesting.ALL_DOUBLE_CANDIDATES;
+import static com.google.common.math.MathTesting.EXPONENTS;
+import static com.google.common.math.MathTesting.FINITE_DOUBLE_CANDIDATES;
+
+import java.math.BigInteger;
+
+import junit.framework.TestCase;
+import sun.misc.FpUtils;
+
+public class DoubleUtilsTest extends TestCase {
+  public strictfp void testScalbPositiveExponent() {
+    for (int k : EXPONENTS) {
+      for (double d : ALL_DOUBLE_CANDIDATES) {
+        assertEquals(d * StrictMath.pow(2.0, k), DoubleUtils.scalb(d, k));
+      }
+    }
+  }
+
+  public void testGetExponent() {
+    for (double d : ALL_DOUBLE_CANDIDATES) {
+      assertEquals(FpUtils.getExponent(d), DoubleUtils.getExponent(d));
+    }
+  }
+
+  public void testNextUp() {
+    for (double d : FINITE_DOUBLE_CANDIDATES) {
+      assertEquals(FpUtils.nextUp(d), DoubleUtils.next(d, true));
+    }
+  }
+
+  public void testNextDown() {
+    for (double d : FINITE_DOUBLE_CANDIDATES) {
+      assertEquals(FpUtils.nextDown(d), DoubleUtils.next(d, false));
+    }
+  }
+  
+  public void testBigToDouble() {
+    for (BigInteger b : ALL_BIGINTEGER_CANDIDATES) {
+      assertEquals(b.doubleValue(), DoubleUtils.bigToDouble(b));
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/math/IntMathTest.java b/guava-tests/test/com/google/common/math/IntMathTest.java
new file mode 100644
index 0000000..7f773ea
--- /dev/null
+++ b/guava-tests/test/com/google/common/math/IntMathTest.java
@@ -0,0 +1,506 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.math;
+
+import static com.google.common.math.MathTesting.ALL_INTEGER_CANDIDATES;
+import static com.google.common.math.MathTesting.ALL_ROUNDING_MODES;
+import static com.google.common.math.MathTesting.ALL_SAFE_ROUNDING_MODES;
+import static com.google.common.math.MathTesting.EXPONENTS;
+import static com.google.common.math.MathTesting.NEGATIVE_INTEGER_CANDIDATES;
+import static com.google.common.math.MathTesting.NONZERO_INTEGER_CANDIDATES;
+import static com.google.common.math.MathTesting.POSITIVE_INTEGER_CANDIDATES;
+import static java.math.BigInteger.valueOf;
+import static java.math.RoundingMode.FLOOR;
+import static java.math.RoundingMode.UNNECESSARY;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.testing.NullPointerTester;
+
+import junit.framework.TestCase;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.math.RoundingMode;
+
+/**
+ * Tests for {@link IntMath}.
+ *
+ * @author Louis Wasserman
+ */
+@GwtCompatible(emulated = true)
+public class IntMathTest extends TestCase {
+  @GwtIncompatible("BigIntegerMath") // TODO(cpovirk): GWT-enable BigIntegerMath
+  public void testConstantMaxPowerOfSqrt2Unsigned() {
+    assertEquals(
+        BigIntegerMath.sqrt(BigInteger.ZERO.setBit(2 * Integer.SIZE - 1), FLOOR).intValue(),
+        IntMath.MAX_POWER_OF_SQRT2_UNSIGNED);
+  }
+
+  @GwtIncompatible("pow()")
+  public void testConstantsPowersOf10() {
+    for (int i = 0; i < IntMath.POWERS_OF_10.length; i++) {
+      assertEquals(IntMath.pow(10, i), IntMath.POWERS_OF_10[i]);
+    }
+  }
+
+  @GwtIncompatible("BigIntegerMath") // TODO(cpovirk): GWT-enable BigIntegerMath
+  public void testConstantsHalfPowersOf10() {
+    for (int i = 0; i < IntMath.HALF_POWERS_OF_10.length; i++) {
+      assert IntMath.HALF_POWERS_OF_10[i]
+          == Math.min(Integer.MAX_VALUE,
+              BigIntegerMath.sqrt(BigInteger.TEN.pow(2 * i + 1), FLOOR).longValue());
+    }
+  }
+
+  @GwtIncompatible("BigIntegerMath") // TODO(cpovirk): GWT-enable BigIntegerMath
+  public void testConstantsBiggestBinomials(){
+    for (int k = 0; k < IntMath.BIGGEST_BINOMIALS.length; k++) {
+      assertTrue(fitsInInt(BigIntegerMath.binomial(IntMath.BIGGEST_BINOMIALS[k], k)));
+      assertTrue(IntMath.BIGGEST_BINOMIALS[k] == Integer.MAX_VALUE
+          || !fitsInInt(BigIntegerMath.binomial(IntMath.BIGGEST_BINOMIALS[k] + 1, k)));
+      // In the first case, any int is valid; in the second, we want to test that the next-bigger
+      // int overflows.
+    }
+    assertFalse(
+        fitsInInt(BigIntegerMath.binomial(
+            2 * IntMath.BIGGEST_BINOMIALS.length, IntMath.BIGGEST_BINOMIALS.length)));
+  }
+  
+  @GwtIncompatible("sqrt")
+  public void testPowersSqrtMaxInt() {
+    assertEquals(IntMath.sqrt(Integer.MAX_VALUE, FLOOR), IntMath.FLOOR_SQRT_MAX_INT);
+  }
+
+  public void testIsPowerOfTwo() {
+    for (int x : ALL_INTEGER_CANDIDATES) {
+      // Checks for a single bit set.
+      boolean expected = x > 0 & (x & (x - 1)) == 0;
+      assertEquals(expected, IntMath.isPowerOfTwo(x));
+    }
+  }
+
+  @GwtIncompatible("log2")
+  public void testLog2ZeroAlwaysThrows() {
+    for (RoundingMode mode : ALL_ROUNDING_MODES) {
+      try {
+        IntMath.log2(0, mode);
+        fail("Expected IllegalArgumentException");
+      } catch (IllegalArgumentException expected) {}
+    }
+  }
+
+  @GwtIncompatible("log2")
+  public void testLog2NegativeAlwaysThrows() {
+    for (int x : NEGATIVE_INTEGER_CANDIDATES) {
+      for (RoundingMode mode : ALL_ROUNDING_MODES) {
+        try {
+          IntMath.log2(x, mode);
+          fail("Expected IllegalArgumentException");
+        } catch (IllegalArgumentException expected) {}
+      }
+    }
+  }
+
+  // Relies on the correctness of BigIntegrerMath.log2 for all modes except UNNECESSARY.
+  @GwtIncompatible("BigIntegerMath") // TODO(cpovirk): GWT-enable BigIntegerMath
+  public void testLog2MatchesBigInteger() {
+    for (int x : POSITIVE_INTEGER_CANDIDATES) {
+      for (RoundingMode mode : ALL_SAFE_ROUNDING_MODES) {
+        assertEquals(BigIntegerMath.log2(valueOf(x), mode), IntMath.log2(x, mode));
+      }
+    }
+  }
+
+  // Relies on the correctness of isPowerOfTwo(int).
+  @GwtIncompatible("log2")
+  public void testLog2Exact() {
+    for (int x : POSITIVE_INTEGER_CANDIDATES) {
+      // We only expect an exception if x was not a power of 2.
+      boolean isPowerOf2 = IntMath.isPowerOfTwo(x);
+      try {
+        assertEquals(x, 1 << IntMath.log2(x, UNNECESSARY));
+        assertTrue(isPowerOf2);
+      } catch (ArithmeticException e) {
+        assertFalse(isPowerOf2);
+      }
+    }
+  }
+
+  @GwtIncompatible("log10")
+  public void testLog10ZeroAlwaysThrows() {
+    for (RoundingMode mode : ALL_ROUNDING_MODES) {
+      try {
+        IntMath.log10(0, mode);
+        fail("Expected IllegalArgumentException");
+      } catch (IllegalArgumentException expected) {}
+    }
+  }
+
+  @GwtIncompatible("log10")
+  public void testLog10NegativeAlwaysThrows() {
+    for (int x : NEGATIVE_INTEGER_CANDIDATES) {
+      for (RoundingMode mode : ALL_ROUNDING_MODES) {
+        try {
+          IntMath.log10(x, mode);
+          fail("Expected IllegalArgumentException");
+        } catch (IllegalArgumentException expected) {}
+      }
+    }
+  }
+
+  // Relies on the correctness of BigIntegerMath.log10 for all modes except UNNECESSARY.
+  @GwtIncompatible("BigIntegerMath") // TODO(cpovirk): GWT-enable BigIntegerMath
+  public void testLog10MatchesBigInteger() {
+    for (int x : POSITIVE_INTEGER_CANDIDATES) {
+      for (RoundingMode mode : ALL_SAFE_ROUNDING_MODES) {
+        // The BigInteger implementation is tested separately, use it as the reference.
+        assertEquals(BigIntegerMath.log10(valueOf(x), mode), IntMath.log10(x, mode));
+      }
+    }
+  }
+
+  // Relies on the correctness of log10(int, FLOOR) and of pow(int, int).
+  @GwtIncompatible("pow()")
+  public void testLog10Exact() {
+    for (int x : POSITIVE_INTEGER_CANDIDATES) {
+      int floor = IntMath.log10(x, FLOOR);
+      boolean expectSuccess = IntMath.pow(10, floor) == x;
+      try {
+        assertEquals(floor, IntMath.log10(x, UNNECESSARY));
+        assertTrue(expectSuccess);
+      } catch (ArithmeticException e) {
+        assertFalse(expectSuccess);
+      }
+    }
+  }
+
+  @GwtIncompatible("log10")
+  public void testLog10TrivialOnPowerOfTen() {
+    int x = 1000000;
+    for (RoundingMode mode : ALL_ROUNDING_MODES) {
+      assertEquals(6, IntMath.log10(x, mode));
+    }
+  }
+
+  // Simple test to cover sqrt(0) for all types and all modes.
+  @GwtIncompatible("sqrt")
+  public void testSqrtZeroAlwaysZero() {
+    for (RoundingMode mode : ALL_ROUNDING_MODES) {
+      assertEquals(0, IntMath.sqrt(0, mode));
+    }
+  }
+
+  @GwtIncompatible("sqrt")
+  public void testSqrtNegativeAlwaysThrows() {
+    for (int x : NEGATIVE_INTEGER_CANDIDATES) {
+      for (RoundingMode mode : RoundingMode.values()) {
+        try {
+          IntMath.sqrt(x, mode);
+          fail("Expected IllegalArgumentException");
+        } catch (IllegalArgumentException expected) {}
+      }
+    }
+  }
+
+  /* Relies on the correctness of BigIntegerMath.sqrt for all modes except UNNECESSARY. */
+  @GwtIncompatible("BigIntegerMath") // TODO(cpovirk): GWT-enable BigIntegerMath
+  public void testSqrtMatchesBigInteger() {
+    for (int x : POSITIVE_INTEGER_CANDIDATES) {
+      for (RoundingMode mode : ALL_SAFE_ROUNDING_MODES) {
+        // The BigInteger implementation is tested separately, use it as the reference.
+        // Promote the int value (rather than using intValue() on the expected value) to avoid
+        // any risk of truncation which could lead to a false positive.
+        assertEquals(BigIntegerMath.sqrt(valueOf(x), mode), valueOf(IntMath.sqrt(x, mode)));
+      }
+    }
+  }
+
+  /* Relies on the correctness of sqrt(int, FLOOR). */
+  @GwtIncompatible("sqrt")
+  public void testSqrtExactMatchesFloorOrThrows() {
+    for (int x : POSITIVE_INTEGER_CANDIDATES) {
+      int floor = IntMath.sqrt(x, FLOOR);
+      // We only expect an exception if x was not a perfect square.
+      boolean isPerfectSquare = (floor * floor == x);
+      try {
+        assertEquals(floor, IntMath.sqrt(x, UNNECESSARY));
+        assertTrue(isPerfectSquare);
+      } catch (ArithmeticException e) {
+        assertFalse(isPerfectSquare);
+      }
+    }
+  }
+
+  @GwtIncompatible("2147483646^2 expected=4")
+  public void testPow() {
+    for (int i : ALL_INTEGER_CANDIDATES) {
+      for (int pow : EXPONENTS) {
+        assertEquals(i + "^" + pow, BigInteger.valueOf(i).pow(pow).intValue(), IntMath.pow(i, pow));
+      }
+    }
+  }
+
+  @GwtIncompatible("-2147483648/1 expected=2147483648")
+  public void testDivNonZero() {
+    for (int p : NONZERO_INTEGER_CANDIDATES) {
+      for (int q : NONZERO_INTEGER_CANDIDATES) {
+        for (RoundingMode mode : ALL_SAFE_ROUNDING_MODES) {
+          int expected =
+              new BigDecimal(valueOf(p)).divide(new BigDecimal(valueOf(q)), 0, mode).intValue();
+          assertEquals(p + "/" + q, expected, IntMath.divide(p, q, mode));
+        }
+      }
+    }
+  }
+
+  @GwtIncompatible("-2147483648/-1 not expected to divide evenly")
+  public void testDivNonZeroExact() {
+    for (int p : NONZERO_INTEGER_CANDIDATES) {
+      for (int q : NONZERO_INTEGER_CANDIDATES) {
+        boolean dividesEvenly = (p % q) == 0;
+
+        try {
+          assertEquals(p + "/" + q, p, IntMath.divide(p, q, UNNECESSARY) * q);
+          assertTrue(p + "/" + q + " expected to divide evenly", dividesEvenly);
+        } catch (ArithmeticException e) {
+          assertFalse(p + "/" + q + " not expected to divide evenly", dividesEvenly);
+        }
+      }
+    }
+  }
+
+  @GwtIncompatible("pow()")
+  public void testZeroDivIsAlwaysZero() {
+    for (int q : NONZERO_INTEGER_CANDIDATES) {
+      for (RoundingMode mode : ALL_ROUNDING_MODES) {
+        assertEquals(0, IntMath.divide(0, q, mode));
+      }
+    }
+  }
+
+  @GwtIncompatible("pow()")
+  public void testDivByZeroAlwaysFails() {
+    for (int p : ALL_INTEGER_CANDIDATES) {
+      for (RoundingMode mode : ALL_ROUNDING_MODES) {
+        try {
+          IntMath.divide(p, 0, mode);
+          fail("Expected ArithmeticException");
+        } catch (ArithmeticException expected) {}
+      }
+    }
+  }
+
+  public void testMod() {
+    for (int x : ALL_INTEGER_CANDIDATES) {
+      for (int m : POSITIVE_INTEGER_CANDIDATES) {
+        assertEquals(valueOf(x).mod(valueOf(m)).intValue(), IntMath.mod(x, m));
+      }
+    }
+  }
+
+  public void testModNegativeModulusFails() {
+    for (int x : POSITIVE_INTEGER_CANDIDATES) {
+      for (int m : NEGATIVE_INTEGER_CANDIDATES) {
+        try {
+          IntMath.mod(x, m);
+          fail("Expected ArithmeticException");
+        } catch (ArithmeticException expected) {}
+      }
+    }
+  }
+
+  public void testModZeroModulusFails() {
+    for (int x : ALL_INTEGER_CANDIDATES) {
+      try {
+        IntMath.mod(x, 0);
+        fail("Expected ArithmeticException");
+      } catch (ArithmeticException expected) {}
+    }
+  }
+
+  public void testGCD() {
+    for (int a : POSITIVE_INTEGER_CANDIDATES) {
+      for (int b : POSITIVE_INTEGER_CANDIDATES) {
+        assertEquals(valueOf(a).gcd(valueOf(b)), valueOf(IntMath.gcd(a, b)));
+      }
+    }
+  }
+
+  public void testGCDZero() {
+    for (int a : POSITIVE_INTEGER_CANDIDATES) {
+      assertEquals(a, IntMath.gcd(a, 0));
+      assertEquals(a, IntMath.gcd(0, a));
+    }
+    assertEquals(0, IntMath.gcd(0, 0));
+  }
+
+  public void testGCDNegativePositiveThrows() {
+    for (int a : NEGATIVE_INTEGER_CANDIDATES) {
+      try {
+        IntMath.gcd(a, 3);
+        fail("Expected IllegalArgumentException");
+      } catch (IllegalArgumentException expected) {}
+      try {
+        IntMath.gcd(3, a);
+        fail("Expected IllegalArgumentException");
+      } catch (IllegalArgumentException expected) {}
+    }
+  }
+
+  public void testGCDNegativeZeroThrows() {
+    for (int a : NEGATIVE_INTEGER_CANDIDATES) {
+      try {
+        IntMath.gcd(a, 0);
+        fail("Expected IllegalArgumentException");
+      } catch (IllegalArgumentException expected) {}
+      try {
+        IntMath.gcd(0, a);
+        fail("Expected IllegalArgumentException");
+      } catch (IllegalArgumentException expected) {}
+    }
+  }
+
+  public void testCheckedAdd() {
+    for (int a : ALL_INTEGER_CANDIDATES) {
+      for (int b : ALL_INTEGER_CANDIDATES) {
+        BigInteger expectedResult = valueOf(a).add(valueOf(b));
+        boolean expectedSuccess = fitsInInt(expectedResult);
+        try {
+          assertEquals(a + b, IntMath.checkedAdd(a, b));
+          assertTrue(expectedSuccess);
+        } catch (ArithmeticException e) {
+          assertFalse(expectedSuccess);
+        }
+      }
+    }
+  }
+
+  public void testCheckedSubtract() {
+    for (int a : ALL_INTEGER_CANDIDATES) {
+      for (int b : ALL_INTEGER_CANDIDATES) {
+        BigInteger expectedResult = valueOf(a).subtract(valueOf(b));
+        boolean expectedSuccess = fitsInInt(expectedResult);
+        try {
+          assertEquals(a - b, IntMath.checkedSubtract(a, b));
+          assertTrue(expectedSuccess);
+        } catch (ArithmeticException e) {
+          assertFalse(expectedSuccess);
+        }
+      }
+    }
+  }
+
+  public void testCheckedMultiply() {
+    for (int a : ALL_INTEGER_CANDIDATES) {
+      for (int b : ALL_INTEGER_CANDIDATES) {
+        BigInteger expectedResult = valueOf(a).multiply(valueOf(b));
+        boolean expectedSuccess = fitsInInt(expectedResult);
+        try {
+          assertEquals(a * b, IntMath.checkedMultiply(a, b));
+          assertTrue(expectedSuccess);
+        } catch (ArithmeticException e) {
+          assertFalse(expectedSuccess);
+        }
+      }
+    }
+  }
+
+  @GwtIncompatible("-2147483648^1 expected=2147483648")
+  public void testCheckedPow() {
+    for (int b : ALL_INTEGER_CANDIDATES) {
+      for (int k : EXPONENTS) {
+        BigInteger expectedResult = valueOf(b).pow(k);
+        boolean expectedSuccess = fitsInInt(expectedResult);
+        try {
+          assertEquals(b + "^" + k, expectedResult.intValue(), IntMath.checkedPow(b, k));
+          assertTrue(b + "^" + k + " should have succeeded", expectedSuccess);
+        } catch (ArithmeticException e) {
+          assertFalse(b + "^" + k + " should have failed", expectedSuccess);
+        }
+      }
+    }
+  }
+
+  // Depends on the correctness of BigIntegerMath.factorial.
+  @GwtIncompatible("BigIntegerMath") // TODO(cpovirk): GWT-enable BigIntegerMath
+  public void testFactorial() {
+    for (int n = 0; n <= 50; n++) {
+      BigInteger expectedBig = BigIntegerMath.factorial(n);
+      int expectedInt = fitsInInt(expectedBig) ? expectedBig.intValue() : Integer.MAX_VALUE;
+      assertEquals(expectedInt, IntMath.factorial(n));
+    }
+  }
+
+  @GwtIncompatible("factorial")
+  public void testFactorialNegative() {
+    for (int n : NEGATIVE_INTEGER_CANDIDATES) {
+      try {
+        IntMath.factorial(n);
+        fail("Expected IllegalArgumentException");
+      } catch (IllegalArgumentException expected) {}
+    }
+  }
+
+  // Depends on the correctness of BigIntegerMath.binomial.
+  @GwtIncompatible("BigIntegerMath") // TODO(cpovirk): GWT-enable BigIntegerMath
+  public void testBinomial() {
+    for (int n = 0; n <= 50; n++) {
+      for (int k = 0; k <= n; k++) {
+        BigInteger expectedBig = BigIntegerMath.binomial(n, k);
+        int expectedInt = fitsInInt(expectedBig) ? expectedBig.intValue() : Integer.MAX_VALUE;
+        assertEquals(expectedInt, IntMath.binomial(n, k));
+      }
+    }
+  }
+
+  @GwtIncompatible("binomial")
+  public void testBinomialOutside() {
+    for (int n = 0; n <= 50; n++) {
+      try {
+        IntMath.binomial(n, -1);
+        fail("Expected IllegalArgumentException");
+      } catch (IllegalArgumentException expected) {}
+      try {
+        IntMath.binomial(n, n + 1);
+        fail("Expected IllegalArgumentException");
+      } catch (IllegalArgumentException expected) {}
+    }
+  }
+
+  @GwtIncompatible("binomial")
+  public void testBinomialNegative() {
+    for (int n : NEGATIVE_INTEGER_CANDIDATES) {
+      try {
+        IntMath.binomial(n, 0);
+        fail("Expected IllegalArgumentException");
+      } catch (IllegalArgumentException expected) {}
+    }
+  }
+
+  private boolean fitsInInt(BigInteger big) {
+    return big.bitLength() <= 31;
+  }
+  
+  @GwtIncompatible("NullPointerTester")
+  public void testNullPointers() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.setDefault(int.class, 1);
+    tester.setDefault(RoundingMode.class, FLOOR);
+    tester.testAllPublicStaticMethods(IntMath.class);
+  }
+}
diff --git a/guava-tests/test/com/google/common/math/LongMathTest.java b/guava-tests/test/com/google/common/math/LongMathTest.java
new file mode 100644
index 0000000..3ab0a8e
--- /dev/null
+++ b/guava-tests/test/com/google/common/math/LongMathTest.java
@@ -0,0 +1,541 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.math;
+
+import static com.google.common.math.MathTesting.ALL_INTEGER_CANDIDATES;
+import static com.google.common.math.MathTesting.ALL_LONG_CANDIDATES;
+import static com.google.common.math.MathTesting.ALL_ROUNDING_MODES;
+import static com.google.common.math.MathTesting.ALL_SAFE_ROUNDING_MODES;
+import static com.google.common.math.MathTesting.EXPONENTS;
+import static com.google.common.math.MathTesting.NEGATIVE_INTEGER_CANDIDATES;
+import static com.google.common.math.MathTesting.NEGATIVE_LONG_CANDIDATES;
+import static com.google.common.math.MathTesting.NONZERO_LONG_CANDIDATES;
+import static com.google.common.math.MathTesting.POSITIVE_INTEGER_CANDIDATES;
+import static com.google.common.math.MathTesting.POSITIVE_LONG_CANDIDATES;
+import static java.math.BigInteger.valueOf;
+import static java.math.RoundingMode.FLOOR;
+import static java.math.RoundingMode.UNNECESSARY;
+
+import com.google.common.testing.NullPointerTester;
+
+import junit.framework.TestCase;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.math.RoundingMode;
+
+/**
+ * Tests for LongMath.
+ *
+ * @author Louis Wasserman
+ */
+public class LongMathTest extends TestCase {
+  public void testConstantMaxPowerOfSqrt2Unsigned() {
+    assertEquals(BigIntegerMath.sqrt(BigInteger.ZERO.setBit(2 * Long.SIZE - 1), FLOOR).longValue(),
+        LongMath.MAX_POWER_OF_SQRT2_UNSIGNED);
+  }
+
+  public void testConstantsPowersOf10() {
+    for (int i = 0; i < LongMath.POWERS_OF_10.length; i++) {
+      assertEquals(LongMath.checkedPow(10, i), LongMath.POWERS_OF_10[i]);
+    }
+    try {
+      LongMath.checkedPow(10, LongMath.POWERS_OF_10.length);
+      fail("Expected ArithmeticException");
+    } catch (ArithmeticException expected) {}
+  }
+
+  public void testConstantsHalfPowersOf10() {
+    for (int i = 0; i < LongMath.HALF_POWERS_OF_10.length; i++) {
+      assertEquals(BigIntegerMath.sqrt(BigInteger.TEN.pow(2 * i + 1), FLOOR),
+          BigInteger.valueOf(LongMath.HALF_POWERS_OF_10[i]));
+    }
+    BigInteger nextBigger =
+        BigIntegerMath.sqrt(BigInteger.TEN.pow(2 * LongMath.HALF_POWERS_OF_10.length + 1), FLOOR);
+    assertTrue(nextBigger.compareTo(BigInteger.valueOf(Long.MAX_VALUE)) > 0);
+  }
+
+  public void testConstantsSqrtMaxLong() {
+    assertEquals(LongMath.sqrt(Long.MAX_VALUE, FLOOR), LongMath.FLOOR_SQRT_MAX_LONG);
+  }
+
+  public void testConstantsFactorials() {
+    long expected = 1;
+    for (int i = 0; i < LongMath.FACTORIALS.length; i++, expected *= i) {
+      assertEquals(expected, LongMath.FACTORIALS[i]);
+    }
+    try {
+      LongMath.checkedMultiply(
+          LongMath.FACTORIALS[LongMath.FACTORIALS.length - 1], LongMath.FACTORIALS.length);
+      fail("Expected ArithmeticException");
+    } catch (ArithmeticException expect) {}
+  }
+
+  public void testConstantsBiggestBinomials() {
+    for (int k = 0; k < LongMath.BIGGEST_BINOMIALS.length; k++) {
+      assertTrue(fitsInLong(BigIntegerMath.binomial(LongMath.BIGGEST_BINOMIALS[k], k)));
+      assertTrue(LongMath.BIGGEST_BINOMIALS[k] == Integer.MAX_VALUE
+          || !fitsInLong(BigIntegerMath.binomial(LongMath.BIGGEST_BINOMIALS[k] + 1, k)));
+      // In the first case, any long is valid; in the second, we want to test that the next-bigger
+      // long overflows.
+    }
+    int k = LongMath.BIGGEST_BINOMIALS.length;
+    assertFalse(fitsInLong(BigIntegerMath.binomial(2 * k, k)));
+    // 2 * k is the smallest value for which we don't replace k with (n-k).
+  }
+
+  public void testConstantsBiggestSimpleBinomials() {
+    for (int k = 0; k < LongMath.BIGGEST_SIMPLE_BINOMIALS.length; k++) {
+      assertTrue(LongMath.BIGGEST_SIMPLE_BINOMIALS[k] <= LongMath.BIGGEST_BINOMIALS[k]);
+      simpleBinomial(LongMath.BIGGEST_SIMPLE_BINOMIALS[k], k); // mustn't throw
+      if (LongMath.BIGGEST_SIMPLE_BINOMIALS[k] < Integer.MAX_VALUE) {
+        // unless all n are fair game with this k
+        try {
+          simpleBinomial(LongMath.BIGGEST_SIMPLE_BINOMIALS[k] + 1, k);
+          fail("Expected ArithmeticException");
+        } catch (ArithmeticException expected) {}
+      }
+    }
+    try {
+      int k = LongMath.BIGGEST_SIMPLE_BINOMIALS.length;
+      simpleBinomial(2 * k, k);
+      // 2 * k is the smallest value for which we don't replace k with (n-k).
+      fail("Expected ArithmeticException");
+    } catch (ArithmeticException expected) {}
+  }
+
+  // Throws an ArithmeticException if "the simple implementation" of binomial coefficients overflows
+  private long simpleBinomial(int n, int k) {
+    long accum = 1;
+    for (int i = 0; i < k; i++) {
+      accum = LongMath.checkedMultiply(accum, n - i);
+      accum /= i + 1;
+    }
+    return accum;
+  }
+
+  public void testIsPowerOfTwo() {
+    for (long x : ALL_LONG_CANDIDATES) {
+      // Checks for a single bit set.
+      boolean expected = x > 0 & (x & (x - 1)) == 0L;
+      assertEquals(expected, LongMath.isPowerOfTwo(x));
+    }
+  }
+
+  public void testLog2ZeroAlwaysThrows() {
+    for (RoundingMode mode : ALL_ROUNDING_MODES) {
+      try {
+        LongMath.log2(0L, mode);
+        fail("Expected IllegalArgumentException");
+      } catch (IllegalArgumentException expected) {}
+    }
+  }
+
+  public void testLog2NegativeAlwaysThrows() {
+    for (long x : NEGATIVE_LONG_CANDIDATES) {
+      for (RoundingMode mode : ALL_ROUNDING_MODES) {
+        try {
+          LongMath.log2(x, mode);
+          fail("Expected IllegalArgumentException");
+        } catch (IllegalArgumentException expected) {}
+      }
+    }
+  }
+
+  /* Relies on the correctness of BigIntegerMath.log2 for all modes except UNNECESSARY. */
+  public void testLog2MatchesBigInteger() {
+    for (long x : POSITIVE_LONG_CANDIDATES) {
+      for (RoundingMode mode : ALL_SAFE_ROUNDING_MODES) {
+        // The BigInteger implementation is tested separately, use it as the reference.
+        assertEquals(BigIntegerMath.log2(valueOf(x), mode), LongMath.log2(x, mode));
+      }
+    }
+  }
+
+  /* Relies on the correctness of isPowerOfTwo(long). */
+  public void testLog2Exact() {
+    for (long x : POSITIVE_LONG_CANDIDATES) {
+      // We only expect an exception if x was not a power of 2.
+      boolean isPowerOf2 = LongMath.isPowerOfTwo(x);
+      try {
+        assertEquals(x, 1L << LongMath.log2(x, UNNECESSARY));
+        assertTrue(isPowerOf2);
+      } catch (ArithmeticException e) {
+        assertFalse(isPowerOf2);
+      }
+    }
+  }
+
+  public void testLog10ZeroAlwaysThrows() {
+    for (RoundingMode mode : ALL_ROUNDING_MODES) {
+      try {
+        LongMath.log10(0L, mode);
+        fail("Expected IllegalArgumentException");
+      } catch (IllegalArgumentException expected) {}
+    }
+  }
+
+  public void testLog10NegativeAlwaysThrows() {
+    for (long x : NEGATIVE_LONG_CANDIDATES) {
+      for (RoundingMode mode : ALL_ROUNDING_MODES) {
+        try {
+          LongMath.log10(x, mode);
+          fail("Expected IllegalArgumentException");
+        } catch (IllegalArgumentException expected) {}
+      }
+    }
+  }
+
+  // Relies on the correctness of BigIntegerMath.log10 for all modes except UNNECESSARY.
+  public void testLog10MatchesBigInteger() {
+    for (long x : POSITIVE_LONG_CANDIDATES) {
+      for (RoundingMode mode : ALL_SAFE_ROUNDING_MODES) {
+        assertEquals(BigIntegerMath.log10(valueOf(x), mode), LongMath.log10(x, mode));
+      }
+    }
+  }
+
+  // Relies on the correctness of log10(long, FLOOR) and of pow(long, int).
+  public void testLog10Exact() {
+    for (long x : POSITIVE_LONG_CANDIDATES) {
+      int floor = LongMath.log10(x, FLOOR);
+      boolean expectSuccess = LongMath.pow(10, floor) == x;
+      try {
+        assertEquals(floor, LongMath.log10(x, UNNECESSARY));
+        assertTrue(expectSuccess);
+      } catch (ArithmeticException e) {
+        assertFalse(expectSuccess);
+      }
+    }
+  }
+
+  public void testLog10TrivialOnPowerOf10() {
+    long x = 1000000000000L;
+    for (RoundingMode mode : ALL_ROUNDING_MODES) {
+      assertEquals(12, LongMath.log10(x, mode));
+    }
+  }
+
+  public void testSqrtNegativeAlwaysThrows() {
+    for (long x : NEGATIVE_LONG_CANDIDATES) {
+      for (RoundingMode mode : ALL_ROUNDING_MODES) {
+        try {
+          LongMath.sqrt(x, mode);
+          fail("Expected IllegalArgumentException");
+        } catch (IllegalArgumentException expected) {}
+      }
+    }
+  }
+
+  // Relies on the correctness of BigIntegerMath.sqrt for all modes except UNNECESSARY.
+  public void testSqrtMatchesBigInteger() {
+    for (long x : POSITIVE_LONG_CANDIDATES) {
+      for (RoundingMode mode : ALL_SAFE_ROUNDING_MODES) {
+        // Promote the long value (rather than using longValue() on the expected value) to avoid
+        // any risk of truncation which could lead to a false positive.
+        assertEquals(BigIntegerMath.sqrt(valueOf(x), mode), valueOf(LongMath.sqrt(x, mode)));
+      }
+    }
+  }
+
+  /* Relies on the correctness of sqrt(long, FLOOR). */
+  public void testSqrtExactMatchesFloorOrThrows() {
+    for (long x : POSITIVE_LONG_CANDIDATES) {
+      long logFloor = LongMath.sqrt(x, FLOOR);
+      // We only expect an exception if x was not a perfect square.
+      boolean isPerfectSquare = (logFloor * logFloor == x);
+      try {
+        assertEquals(logFloor, LongMath.sqrt(x, UNNECESSARY));
+        assertTrue(isPerfectSquare);
+      } catch (ArithmeticException e) {
+        assertFalse(isPerfectSquare);
+      }
+    }
+  }
+
+  public void testPow() {
+    for (long i : ALL_LONG_CANDIDATES) {
+      for (int exp : EXPONENTS) {
+        assertEquals(LongMath.pow(i, exp), valueOf(i)
+            .pow(exp)
+            .longValue());
+      }
+    }
+  }
+
+  public void testDivNonZero() {
+    for (long p : NONZERO_LONG_CANDIDATES) {
+      for (long q : NONZERO_LONG_CANDIDATES) {
+        for (RoundingMode mode : ALL_SAFE_ROUNDING_MODES) {
+          long expected =
+              new BigDecimal(valueOf(p)).divide(new BigDecimal(valueOf(q)), 0, mode).longValue();
+          assertEquals(expected, LongMath.divide(p, q, mode));
+        }
+      }
+    }
+  }
+
+  public void testDivNonZeroExact() {
+    for (long p : NONZERO_LONG_CANDIDATES) {
+      for (long q : NONZERO_LONG_CANDIDATES) {
+        boolean dividesEvenly = (p % q) == 0L;
+
+        try {
+          assertEquals(p, LongMath.divide(p, q, UNNECESSARY) * q);
+          assertTrue(dividesEvenly);
+        } catch (ArithmeticException e) {
+          assertFalse(dividesEvenly);
+        }
+      }
+    }
+  }
+
+  public void testZeroDivIsAlwaysZero() {
+    for (long q : NONZERO_LONG_CANDIDATES) {
+      for (RoundingMode mode : ALL_ROUNDING_MODES) {
+        assertEquals(0L, LongMath.divide(0L, q, mode));
+      }
+    }
+  }
+
+  public void testDivByZeroAlwaysFails() {
+    for (long p : ALL_LONG_CANDIDATES) {
+      for (RoundingMode mode : ALL_ROUNDING_MODES) {
+        try {
+          LongMath.divide(p, 0L, mode);
+          fail("Expected ArithmeticException");
+        } catch (ArithmeticException expected) {}
+      }
+    }
+  }
+
+  public void testIntMod() {
+    for (long x : ALL_LONG_CANDIDATES) {
+      for (int m : POSITIVE_INTEGER_CANDIDATES) {
+        assertEquals(valueOf(x)
+            .mod(valueOf(m))
+            .intValue(), LongMath.mod(x, m));
+      }
+    }
+  }
+
+  public void testIntModNegativeModulusFails() {
+    for (long x : ALL_LONG_CANDIDATES) {
+      for (int m : NEGATIVE_INTEGER_CANDIDATES) {
+        try {
+          LongMath.mod(x, m);
+          fail("Expected ArithmeticException");
+        } catch (ArithmeticException expected) {}
+      }
+    }
+  }
+
+  public void testIntModZeroModulusFails() {
+    for (long x : ALL_LONG_CANDIDATES) {
+      try {
+        LongMath.mod(x, 0);
+        fail("Expected AE");
+      } catch (ArithmeticException expected) {}
+    }
+  }
+
+  public void testMod() {
+    for (long x : ALL_LONG_CANDIDATES) {
+      for (long m : POSITIVE_LONG_CANDIDATES) {
+        assertEquals(valueOf(x)
+            .mod(valueOf(m))
+            .longValue(), LongMath.mod(x, m));
+      }
+    }
+  }
+
+  public void testModNegativeModulusFails() {
+    for (long x : ALL_LONG_CANDIDATES) {
+      for (long m : NEGATIVE_LONG_CANDIDATES) {
+        try {
+          LongMath.mod(x, m);
+          fail("Expected ArithmeticException");
+        } catch (ArithmeticException expected) {}
+      }
+    }
+  }
+
+  public void testGCD() {
+    for (long a : POSITIVE_LONG_CANDIDATES) {
+      for (long b : POSITIVE_LONG_CANDIDATES) {
+        assertEquals(valueOf(a).gcd(valueOf(b)), valueOf(LongMath.gcd(a, b)));
+      }
+    }
+  }
+
+  public void testGCDZero() {
+    for (long a : POSITIVE_LONG_CANDIDATES) {
+      assertEquals(a, LongMath.gcd(a, 0));
+      assertEquals(a, LongMath.gcd(0, a));
+    }
+    assertEquals(0, LongMath.gcd(0, 0));
+  }
+
+  public void testGCDNegativePositiveThrows() {
+    for (long a : NEGATIVE_LONG_CANDIDATES) {
+      try {
+        LongMath.gcd(a, 3);
+        fail("Expected IllegalArgumentException");
+      } catch (IllegalArgumentException expected) {}
+      try {
+        LongMath.gcd(3, a);
+        fail("Expected IllegalArgumentException");
+      } catch (IllegalArgumentException expected) {}
+    }
+  }
+
+  public void testGCDNegativeZeroThrows() {
+    for (long a : NEGATIVE_LONG_CANDIDATES) {
+      try {
+        LongMath.gcd(a, 0);
+        fail("Expected IllegalArgumentException");
+      } catch (IllegalArgumentException expected) {}
+      try {
+        LongMath.gcd(0, a);
+        fail("Expected IllegalArgumentException");
+      } catch (IllegalArgumentException expected) {}
+    }
+  }
+
+  public void testCheckedAdd() {
+    for (long a : ALL_INTEGER_CANDIDATES) {
+      for (long b : ALL_INTEGER_CANDIDATES) {
+        BigInteger expectedResult = valueOf(a).add(valueOf(b));
+        boolean expectedSuccess = fitsInLong(expectedResult);
+        try {
+          assertEquals(a + b, LongMath.checkedAdd(a, b));
+          assertTrue(expectedSuccess);
+        } catch (ArithmeticException e) {
+          assertFalse(expectedSuccess);
+        }
+      }
+    }
+  }
+
+  public void testCheckedSubtract() {
+    for (long a : ALL_INTEGER_CANDIDATES) {
+      for (long b : ALL_INTEGER_CANDIDATES) {
+        BigInteger expectedResult = valueOf(a).subtract(valueOf(b));
+        boolean expectedSuccess = fitsInLong(expectedResult);
+        try {
+          assertEquals(a - b, LongMath.checkedSubtract(a, b));
+          assertTrue(expectedSuccess);
+        } catch (ArithmeticException e) {
+          assertFalse(expectedSuccess);
+        }
+      }
+    }
+  }
+
+  public void testCheckedMultiply() {
+    for (long a : ALL_INTEGER_CANDIDATES) {
+      for (long b : ALL_INTEGER_CANDIDATES) {
+        BigInteger expectedResult = valueOf(a).multiply(valueOf(b));
+        boolean expectedSuccess = fitsInLong(expectedResult);
+        try {
+          assertEquals(a * b, LongMath.checkedMultiply(a, b));
+          assertTrue(expectedSuccess);
+        } catch (ArithmeticException e) {
+          assertFalse(expectedSuccess);
+        }
+      }
+    }
+  }
+
+  public void testCheckedPow() {
+    for (long b : ALL_INTEGER_CANDIDATES) {
+      for (int exp : EXPONENTS) {
+        BigInteger expectedResult = valueOf(b).pow(exp);
+        boolean expectedSuccess = fitsInLong(expectedResult);
+        try {
+          assertEquals(expectedResult.longValue(), LongMath.checkedPow(b, exp));
+          assertTrue(expectedSuccess);
+        } catch (ArithmeticException e) {
+          assertFalse(expectedSuccess);
+        }
+      }
+    }
+  }
+
+  // Depends on the correctness of BigIntegerMath.factorial.
+  public void testFactorial() {
+    for (int n = 0; n <= 50; n++) {
+      BigInteger expectedBig = BigIntegerMath.factorial(n);
+      long expectedLong = fitsInLong(expectedBig) ? expectedBig.longValue() : Long.MAX_VALUE;
+      assertEquals(expectedLong, LongMath.factorial(n));
+    }
+  }
+
+  public void testFactorialNegative() {
+    for (int n : NEGATIVE_INTEGER_CANDIDATES) {
+      try {
+        LongMath.factorial(n);
+        fail("Expected IllegalArgumentException");
+      } catch (IllegalArgumentException expected) {}
+    }
+  }
+
+  // Depends on the correctness of BigIntegerMath.binomial.
+  public void testBinomial() {
+    for (int n = 0; n <= 70; n++) {
+      for (int k = 0; k <= n; k++) {
+        BigInteger expectedBig = BigIntegerMath.binomial(n, k);
+        long expectedLong = fitsInLong(expectedBig) ? expectedBig.longValue() : Long.MAX_VALUE;
+        assertEquals(expectedLong, LongMath.binomial(n, k));
+      }
+    }
+  }
+
+  public void testBinomialOutside() {
+    for (int n = 0; n <= 50; n++) {
+      try {
+        LongMath.binomial(n, -1);
+        fail("Expected IllegalArgumentException");
+      } catch (IllegalArgumentException expected) {}
+      try {
+        LongMath.binomial(n, n + 1);
+        fail("Expected IllegalArgumentException");
+      } catch (IllegalArgumentException expected) {}
+    }
+  }
+
+  public void testBinomialNegative() {
+    for (int n : NEGATIVE_INTEGER_CANDIDATES) {
+      try {
+        LongMath.binomial(n, 0);
+        fail("Expected IllegalArgumentException");
+      } catch (IllegalArgumentException expected) {}
+    }
+  }
+
+  private boolean fitsInLong(BigInteger big) {
+    return big.bitLength() <= 63;
+  }
+
+  public void testNullPointers() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.setDefault(RoundingMode.class, FLOOR);
+    tester.setDefault(int.class, 1);
+    tester.setDefault(long.class, 1L);
+    tester.testAllPublicStaticMethods(LongMath.class);
+  }
+}
diff --git a/guava-tests/test/com/google/common/math/MathTesting.java b/guava-tests/test/com/google/common/math/MathTesting.java
new file mode 100644
index 0000000..df4c5c4
--- /dev/null
+++ b/guava-tests/test/com/google/common/math/MathTesting.java
@@ -0,0 +1,253 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.math;
+
+import static java.math.BigInteger.ONE;
+import static java.math.BigInteger.ZERO;
+import static java.math.RoundingMode.CEILING;
+import static java.math.RoundingMode.DOWN;
+import static java.math.RoundingMode.FLOOR;
+import static java.math.RoundingMode.HALF_DOWN;
+import static java.math.RoundingMode.HALF_EVEN;
+import static java.math.RoundingMode.HALF_UP;
+import static java.math.RoundingMode.UP;
+import static java.util.Arrays.asList;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Function;
+import com.google.common.base.Predicate;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Iterables;
+import com.google.common.primitives.Doubles;
+
+import java.math.BigInteger;
+import java.math.RoundingMode;
+
+/**
+ * Exhaustive input sets for every integral type.
+ * 
+ * @author lowasser@google.com (Louis Wasserman)
+ */
+@GwtCompatible
+public class MathTesting {
+  static final ImmutableSet<RoundingMode> ALL_ROUNDING_MODES = ImmutableSet.copyOf(RoundingMode
+      .values());
+
+  static final ImmutableList<RoundingMode> ALL_SAFE_ROUNDING_MODES = ImmutableList.of(DOWN, UP,
+      FLOOR, CEILING, HALF_EVEN, HALF_UP, HALF_DOWN);
+
+  // Exponents to test for the pow() function.
+  static final ImmutableList<Integer> EXPONENTS = ImmutableList.of(0, 1, 2, 3, 4, 5, 6, 7, 10, 15,
+      20, 25, 30, 40, 70);
+
+  /* Helper function to make a Long value from an Integer. */
+  private static final Function<Integer, Long> TO_LONG = new Function<Integer, Long>() {
+    @Override
+    public Long apply(Integer n) {
+      return Long.valueOf(n);
+    }
+  };
+
+  /* Helper function to make a BigInteger value from a Long. */
+  private static final Function<Long, BigInteger> TO_BIGINTEGER =
+      new Function<Long, BigInteger>() {
+        @Override
+        public BigInteger apply(Long n) {
+          return BigInteger.valueOf(n);
+        }
+      };
+
+  private static final Function<Integer, Integer> NEGATE_INT = new Function<Integer, Integer>() {
+    @Override
+    public Integer apply(Integer x) {
+      return -x;
+    }
+  };
+
+  private static final Function<Long, Long> NEGATE_LONG = new Function<Long, Long>() {
+    @Override
+    public Long apply(Long x) {
+      return -x;
+    }
+  };
+
+  private static final Function<BigInteger, BigInteger> NEGATE_BIGINT =
+      new Function<BigInteger, BigInteger>() {
+        @Override
+        public BigInteger apply(BigInteger x) {
+          return x.negate();
+        }
+      };
+
+  /*
+   * This list contains values that attempt to provoke overflow in integer operations. It contains
+   * positive values on or near 2^N for N near multiples of 8 (near byte boundaries).
+   */
+  static final ImmutableSet<Integer> POSITIVE_INTEGER_CANDIDATES;
+
+  static final Iterable<Integer> NEGATIVE_INTEGER_CANDIDATES;
+
+  static final Iterable<Integer> NONZERO_INTEGER_CANDIDATES;
+
+  static final Iterable<Integer> ALL_INTEGER_CANDIDATES;
+
+  static {
+    ImmutableSet.Builder<Integer> intValues = ImmutableSet.builder();
+    // Add boundary values manually to avoid over/under flow (this covers 2^N for 0 and 31).
+    intValues.add(Integer.MAX_VALUE - 1, Integer.MAX_VALUE);
+    // Add values up to 64. This covers cases like "square of a prime" and such.
+    for (int i = 1; i <= 64; i++) {
+      intValues.add(i);
+    }
+    // Now add values near 2^N for lots of values of N.
+    for (int exponent : asList(2, 3, 4, 5, 6, 7, 8, 9, 15, 16, 17, 23, 24, 25)) {
+      int x = 1 << exponent;
+      intValues.add(x, x + 1, x - 1);
+    }
+    intValues.add(9999).add(10000).add(10001).add(1000000); // near powers of 10
+    intValues.add(5792).add(5793); // sqrt(2^25) rounded up and down
+    POSITIVE_INTEGER_CANDIDATES = intValues.build();
+    NEGATIVE_INTEGER_CANDIDATES =
+        Iterables.concat(Iterables.transform(POSITIVE_INTEGER_CANDIDATES, NEGATE_INT),
+            ImmutableList.of(Integer.MIN_VALUE));
+    NONZERO_INTEGER_CANDIDATES =
+        Iterables.concat(POSITIVE_INTEGER_CANDIDATES, NEGATIVE_INTEGER_CANDIDATES);
+    ALL_INTEGER_CANDIDATES = Iterables.concat(NONZERO_INTEGER_CANDIDATES, ImmutableList.of(0));
+  }
+
+  /*
+   * This list contains values that attempt to provoke overflow in long operations. It contains
+   * positive values on or near 2^N for N near multiples of 8 (near byte boundaries). This list is
+   * a superset of POSITIVE_INTEGER_CANDIDATES.
+   */
+  static final ImmutableSet<Long> POSITIVE_LONG_CANDIDATES;
+
+  static final Iterable<Long> NEGATIVE_LONG_CANDIDATES;
+
+  static final Iterable<Long> NONZERO_LONG_CANDIDATES;
+
+  static final Iterable<Long> ALL_LONG_CANDIDATES;
+
+  static {
+    ImmutableSet.Builder<Long> longValues = ImmutableSet.builder();
+    // First of all add all the integer candidate values.
+    longValues.addAll(Iterables.transform(POSITIVE_INTEGER_CANDIDATES, TO_LONG));
+    // Add boundary values manually to avoid over/under flow (this covers 2^N for 31 and 63).
+    longValues.add(Integer.MAX_VALUE + 1L, Long.MAX_VALUE - 1L, Long.MAX_VALUE);
+    // Now add values near 2^N for lots of values of N.
+    for (int exponent : asList(32, 33, 39, 40, 41, 47, 48, 49, 55, 56, 57)) {
+      long x = 1L << exponent;
+      longValues.add(x, x + 1, x - 1);
+    }
+    longValues.add(194368031998L).add(194368031999L); // sqrt(2^75) rounded up and down
+    POSITIVE_LONG_CANDIDATES = longValues.build();
+    NEGATIVE_LONG_CANDIDATES =
+        Iterables.concat(Iterables.transform(POSITIVE_LONG_CANDIDATES, NEGATE_LONG),
+            ImmutableList.of(Long.MIN_VALUE));
+    NONZERO_LONG_CANDIDATES = Iterables.concat(POSITIVE_LONG_CANDIDATES, NEGATIVE_LONG_CANDIDATES);
+    ALL_LONG_CANDIDATES = Iterables.concat(NONZERO_LONG_CANDIDATES, ImmutableList.of(0L));
+  }
+
+  /*
+   * This list contains values that attempt to provoke overflow in big integer operations. It
+   * contains positive values on or near 2^N for N near multiples of 8 (near byte boundaries). This
+   * list is a superset of POSITIVE_LONG_CANDIDATES.
+   */
+  static final ImmutableSet<BigInteger> POSITIVE_BIGINTEGER_CANDIDATES;
+
+  static final Iterable<BigInteger> NEGATIVE_BIGINTEGER_CANDIDATES;
+
+  static final Iterable<BigInteger> NONZERO_BIGINTEGER_CANDIDATES;
+
+  static final Iterable<BigInteger> ALL_BIGINTEGER_CANDIDATES;
+
+  static {
+    ImmutableSet.Builder<BigInteger> bigValues = ImmutableSet.builder();
+    // First of all add all the long candidate values.
+    bigValues.addAll(Iterables.transform(POSITIVE_LONG_CANDIDATES, TO_BIGINTEGER));
+    // Add boundary values manually to avoid over/under flow.
+    bigValues.add(BigInteger.valueOf(Long.MAX_VALUE).add(ONE));
+    // Now add values near 2^N for lots of values of N.
+    for (int exponent : asList(64, 65, 71, 72, 73, 79, 80, 81, 255, 256, 257, 511, 512, 513,
+        Double.MAX_EXPONENT - 1, Double.MAX_EXPONENT, Double.MAX_EXPONENT + 1)) {
+      BigInteger x = ONE.shiftLeft(exponent);
+      bigValues.add(x, x.add(ONE), x.subtract(ONE));
+    }
+    bigValues.add(new BigInteger("218838949120258359057546633")); // sqrt(2^175) rounded up and
+                                                                  // down
+    bigValues.add(new BigInteger("218838949120258359057546634"));
+    POSITIVE_BIGINTEGER_CANDIDATES = bigValues.build();
+    NEGATIVE_BIGINTEGER_CANDIDATES =
+        Iterables.transform(POSITIVE_BIGINTEGER_CANDIDATES, NEGATE_BIGINT);
+    NONZERO_BIGINTEGER_CANDIDATES =
+        Iterables.concat(POSITIVE_BIGINTEGER_CANDIDATES, NEGATIVE_BIGINTEGER_CANDIDATES);
+    ALL_BIGINTEGER_CANDIDATES =
+        Iterables.concat(NONZERO_BIGINTEGER_CANDIDATES, ImmutableList.of(ZERO));
+  }
+
+  static final ImmutableSet<Double> INTEGRAL_DOUBLE_CANDIDATES;
+  static final ImmutableSet<Double> FRACTIONAL_DOUBLE_CANDIDATES;
+  static final Iterable<Double> FINITE_DOUBLE_CANDIDATES;
+  static final Iterable<Double> POSITIVE_FINITE_DOUBLE_CANDIDATES;
+  static final Iterable<Double> ALL_DOUBLE_CANDIDATES;
+  static {
+    ImmutableSet.Builder<Double> integralBuilder = ImmutableSet.builder();
+    ImmutableSet.Builder<Double> fractionalBuilder = ImmutableSet.builder();
+    integralBuilder.addAll(Doubles.asList(0.0, -0.0, Double.MAX_VALUE, -Double.MAX_VALUE));
+    // Add small multiples of MIN_VALUE and MIN_NORMAL
+    for (int scale = 1; scale <= 4; scale++) {
+      for (double d : Doubles.asList(Double.MIN_VALUE, Double.MIN_NORMAL)) {
+        fractionalBuilder.add(d * scale).add(-d * scale);
+      }
+    }
+    for (double d : Doubles.asList(0, 1, 2, 7, 51, 102, Math.scalb(1.0, 53), Integer.MIN_VALUE,
+        Integer.MAX_VALUE, Long.MIN_VALUE, Long.MAX_VALUE)) {
+      for (double delta : Doubles.asList(0.0, 1.0, 2.0)) {
+        integralBuilder.addAll(Doubles.asList(d + delta, d - delta, -d - delta, -d + delta));
+      }
+      for (double delta : Doubles.asList(0.01, 0.1, 0.25, 0.499, 0.5, 0.501, 0.7, 0.8)) {
+        double x = d + delta;
+        if (x != Math.round(x)) {
+          fractionalBuilder.add(x);
+        }
+      }
+    }
+    INTEGRAL_DOUBLE_CANDIDATES = integralBuilder.build();
+    fractionalBuilder.add(1.414).add(1.415).add(Math.sqrt(2));
+    fractionalBuilder.add(5.656).add(5.657).add(4 * Math.sqrt(2));
+    for (double d : INTEGRAL_DOUBLE_CANDIDATES) {
+      double x = 1 / d;
+      if (x != Math.rint(x)) {
+        fractionalBuilder.add(x);
+      }
+    }
+    FRACTIONAL_DOUBLE_CANDIDATES = fractionalBuilder.build();
+    FINITE_DOUBLE_CANDIDATES =
+        Iterables.concat(FRACTIONAL_DOUBLE_CANDIDATES, INTEGRAL_DOUBLE_CANDIDATES);
+    POSITIVE_FINITE_DOUBLE_CANDIDATES =
+        Iterables.filter(FINITE_DOUBLE_CANDIDATES, new Predicate<Double>() {
+          @Override
+          public boolean apply(Double input) {
+            return input.doubleValue() > 0.0;
+          }
+        });
+    ALL_DOUBLE_CANDIDATES =
+        Iterables.concat(FINITE_DOUBLE_CANDIDATES,
+            asList(Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY, Double.NaN));
+  }
+}
diff --git a/guava-tests/test/com/google/common/net/HostSpecifierTest.java b/guava-tests/test/com/google/common/net/HostSpecifierTest.java
new file mode 100644
index 0000000..f66c128
--- /dev/null
+++ b/guava-tests/test/com/google/common/net/HostSpecifierTest.java
@@ -0,0 +1,121 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.net;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.testing.EqualsTester;
+import com.google.common.testing.NullPointerTester;
+
+import junit.framework.TestCase;
+
+import java.text.ParseException;
+import java.util.List;
+
+/**
+ * {@link TestCase} for {@link HostSpecifier}.  This is a relatively
+ * cursory test, as HostSpecifier is a thin wrapper around
+ * {@link InetAddresses} and {@link InternetDomainName}; the unit tests for
+ * those classes explore numerous corner cases.  The intent here is to
+ * confirm that everything is wired up properly.
+ *
+ * @author Craig Berry
+ */
+public final class HostSpecifierTest extends TestCase {
+
+  private static final List<String> GOOD_IPS = ImmutableList.of(
+      "1.2.3.4", "2001:db8::1", "[2001:db8::1]");
+
+  private static final List<String> BAD_IPS = ImmutableList.of(
+      "1.2.3", "2001:db8::1::::::0", "[2001:db8::1", "[::]:80");
+
+  private static final List<String> GOOD_DOMAINS = ImmutableList.of(
+      "com", "google.com", "foo.co.uk");
+
+  private static final List<String> BAD_DOMAINS = ImmutableList.of(
+      "foo.blah", "", "[google.com]");
+
+  public void testGoodIpAddresses() throws ParseException {
+    for (String spec : GOOD_IPS) {
+      assertGood(spec);
+    }
+  }
+
+  public void testBadIpAddresses() {
+    for (String spec : BAD_IPS) {
+      assertBad(spec);
+    }
+  }
+
+  public void testGoodDomains() throws ParseException {
+    for (String spec : GOOD_DOMAINS) {
+      assertGood(spec);
+    }
+  }
+
+  public void testBadDomains() {
+    for (String spec : BAD_DOMAINS) {
+      assertBad(spec);
+    }
+  }
+
+  public void testEquality() {
+    new EqualsTester()
+        .addEqualityGroup(spec("1.2.3.4"), spec("1.2.3.4"))
+        .addEqualityGroup(
+            spec("2001:db8::1"), spec("2001:db8::1"), spec("[2001:db8::1]"))
+        .addEqualityGroup(spec("2001:db8::2"))
+        .addEqualityGroup(spec("google.com"), spec("google.com"))
+        .addEqualityGroup(spec("www.google.com"))
+        .testEquals();
+  }
+
+  private static HostSpecifier spec(String specifier) {
+    return HostSpecifier.fromValid(specifier);
+  }
+
+  public void testNulls() throws Exception {
+    final NullPointerTester tester = new NullPointerTester();
+
+    tester.testAllPublicStaticMethods(HostSpecifier.class);
+    tester.testAllPublicInstanceMethods(HostSpecifier.fromValid("google.com"));
+  }
+
+  private void assertGood(String spec) throws ParseException {
+    HostSpecifier.fromValid(spec);  // Throws exception if not working correctly
+    HostSpecifier.from(spec);
+    assertTrue(HostSpecifier.isValid(spec));
+  }
+
+  private void assertBad(String spec) {
+    try {
+      HostSpecifier.fromValid(spec);
+      fail("Should have thrown IllegalArgumentException: " + spec);
+    } catch (IllegalArgumentException expected) {
+      // Expected outcome
+    }
+
+    try {
+      HostSpecifier.from(spec);
+      fail("Should have thrown ParseException: " + spec);
+    } catch (ParseException expected) {
+      assertTrue(expected.getCause() instanceof IllegalArgumentException);
+    }
+
+    assertFalse(HostSpecifier.isValid(spec));
+  }
+
+}
diff --git a/guava-tests/test/com/google/common/net/HttpHeadersTest.java b/guava-tests/test/com/google/common/net/HttpHeadersTest.java
new file mode 100644
index 0000000..513767c
--- /dev/null
+++ b/guava-tests/test/com/google/common/net/HttpHeadersTest.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.net;
+
+import com.google.common.base.Ascii;
+import com.google.common.base.Joiner;
+import com.google.common.base.Splitter;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Lists;
+
+import junit.framework.TestCase;
+
+import java.lang.reflect.Field;
+import java.util.List;
+
+/**
+ * Tests for the HttpHeaders class.
+ *
+ * @author Kurt Aflred Kluever
+ */
+public class HttpHeadersTest extends TestCase {
+  public void testConstantNameMatchesString() throws Exception {
+    for (Field field : HttpHeaders.class.getDeclaredFields()) {
+      /*
+       * Coverage mode generates synthetic fields.  If we ever add private
+       * fields, they will cause similar problems, and we may want to switch
+       * this check to isAccessible().
+       */
+      if (!field.isSynthetic()) {
+        assertEquals(upperToHttpHeaderName(field.getName()), field.get(null));
+      }
+    }
+  }
+
+  private static final ImmutableSet<String> UPPERCASE_ACRONYMS = ImmutableSet.of(
+      "ID", "DNT", "GFE", "IP", "MD5", "P3P", "TE", "UID", "URL", "WWW", "XSS");
+
+  private static final Splitter SPLITTER = Splitter.on('_');
+  private static final Joiner JOINER = Joiner.on('-');
+
+  private static String upperToHttpHeaderName(String constantName) {
+    // Special case some of the weird HTTP Header names...
+    if (constantName.equals("ETAG")) {
+      return "ETag";
+    }
+
+    List<String> parts = Lists.newArrayList();
+    for (String part : SPLITTER.split(constantName)) {
+      if (!UPPERCASE_ACRONYMS.contains(part)) {
+        part = part.charAt(0) + Ascii.toLowerCase(part.substring(1));
+      }
+      parts.add(part);
+    }
+    return JOINER.join(parts);
+  }
+}
diff --git a/guava-tests/test/com/google/common/net/InetAddressesTest.java b/guava-tests/test/com/google/common/net/InetAddressesTest.java
new file mode 100644
index 0000000..41564eb
--- /dev/null
+++ b/guava-tests/test/com/google/common/net/InetAddressesTest.java
@@ -0,0 +1,705 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.net;
+
+import com.google.common.testing.NullPointerTester;
+
+import junit.framework.TestCase;
+
+import java.net.Inet4Address;
+import java.net.Inet6Address;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+
+/**
+ * Tests for {@link InetAddresses}.
+ *
+ * @author Erik Kline
+ */
+public class InetAddressesTest extends TestCase {
+
+  public void testNulls() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+
+    tester.testAllPublicStaticMethods(InetAddresses.class);
+  }
+
+  public void testForStringBogusInput() {
+    String[] bogusInputs = {
+        "",
+        "016.016.016.016",
+        "016.016.016",
+        "016.016",
+        "016",
+        "000.000.000.000",
+        "000",
+        "0x0a.0x0a.0x0a.0x0a",
+        "0x0a.0x0a.0x0a",
+        "0x0a.0x0a",
+        "0x0a",
+        "42.42.42.42.42",
+        "42.42.42",
+        "42.42",
+        "42",
+        "42..42.42",
+        "42..42.42.42",
+        "42.42.42.42.",
+        "42.42.42.42...",
+        ".42.42.42.42",
+        "...42.42.42.42",
+        "42.42.42.-0",
+        "42.42.42.+0",
+        ".",
+        "...",
+        "bogus",
+        "bogus.com",
+        "192.168.0.1.com",
+        "12345.67899.-54321.-98765",
+        "257.0.0.0",
+        "42.42.42.-42",
+        "3ffe::1.net",
+        "3ffe::1::1",
+        "1::2::3::4:5",
+        "::7:6:5:4:3:2:",  // should end with ":0"
+        ":6:5:4:3:2:1::",  // should begin with "0:"
+        "2001::db:::1",
+        "FEDC:9878",
+        "+1.+2.+3.4",
+        "1.2.3.4e0",
+        "::7:6:5:4:3:2:1:0",  // too many parts
+        "7:6:5:4:3:2:1:0::",  // too many parts
+        "9:8:7:6:5:4:3::2:1",  // too many parts
+        "0:1:2:3::4:5:6:7",  // :: must remove at least one 0.
+        "3ffe:0:0:0:0:0:0:0:1",  // too many parts (9 instead of 8)
+        "3ffe::10000",  // hextet exceeds 16 bits
+        "3ffe::goog",
+        "3ffe::-0",
+        "3ffe::+0",
+        "3ffe::-1",
+        ":",
+        ":::",
+        "::1.2.3",
+        "::1.2.3.4.5",
+        "::1.2.3.4:",
+        "1.2.3.4::",
+        "2001:db8::1:",
+        ":2001:db8::1",
+        ":1:2:3:4:5:6:7",
+        "1:2:3:4:5:6:7:",
+        ":1:2:3:4:5:6:"
+    };
+
+    for (int i = 0; i < bogusInputs.length; i++) {
+      try {
+        InetAddresses.forString(bogusInputs[i]);
+        fail("IllegalArgumentException expected for '" + bogusInputs[i] + "'");
+      } catch (IllegalArgumentException expected) {
+        // expected behavior
+      }
+      assertFalse(InetAddresses.isInetAddress(bogusInputs[i]));
+    }
+  }
+
+  public void test3ff31() {
+    try {
+      InetAddresses.forString("3ffe:::1");
+      fail("IllegalArgumentException expected");
+    } catch (IllegalArgumentException expected) {
+      // expected behavior
+    }
+    assertFalse(InetAddresses.isInetAddress("016.016.016.016"));
+  }
+
+  public void testForStringIPv4Input() throws UnknownHostException {
+    String ipStr = "192.168.0.1";
+    InetAddress ipv4Addr = null;
+    // Shouldn't hit DNS, because it's an IP string literal.
+    ipv4Addr = InetAddress.getByName(ipStr);
+    assertEquals(ipv4Addr, InetAddresses.forString(ipStr));
+    assertTrue(InetAddresses.isInetAddress(ipStr));
+  }
+
+  public void testForStringIPv6Input() throws UnknownHostException {
+    String ipStr = "3ffe::1";
+    InetAddress ipv6Addr = null;
+    // Shouldn't hit DNS, because it's an IP string literal.
+    ipv6Addr = InetAddress.getByName(ipStr);
+    assertEquals(ipv6Addr, InetAddresses.forString(ipStr));
+    assertTrue(InetAddresses.isInetAddress(ipStr));
+  }
+
+  public void testForStringIPv6EightColons() throws UnknownHostException {
+    String[] eightColons = {
+      "::7:6:5:4:3:2:1",
+      "::7:6:5:4:3:2:0",
+      "7:6:5:4:3:2:1::",
+      "0:6:5:4:3:2:1::",
+    };
+
+    for (int i = 0; i < eightColons.length; i++) {
+      InetAddress ipv6Addr = null;
+      // Shouldn't hit DNS, because it's an IP string literal.
+      ipv6Addr = InetAddress.getByName(eightColons[i]);
+      assertEquals(ipv6Addr, InetAddresses.forString(eightColons[i]));
+      assertTrue(InetAddresses.isInetAddress(eightColons[i]));
+    }
+  }
+
+  public void testConvertDottedQuadToHex() throws UnknownHostException {
+    String[] ipStrings = {"7::0.128.0.127", "7::0.128.0.128",
+        "7::128.128.0.127", "7::0.128.128.127"};
+
+    for (String ipString : ipStrings) {
+      // Shouldn't hit DNS, because it's an IP string literal.
+      InetAddress ipv6Addr = InetAddress.getByName(ipString);
+      assertEquals(ipv6Addr, InetAddresses.forString(ipString));
+      assertTrue(InetAddresses.isInetAddress(ipString));
+    }
+  }
+
+  public void testToAddrStringIPv4() {
+    // Don't need to test IPv4 much; it just calls getHostAddress().
+    assertEquals("1.2.3.4",
+                 InetAddresses.toAddrString(
+                     InetAddresses.forString("1.2.3.4")));
+  }
+
+  public void testToAddrStringIPv6() {
+    assertEquals("1:2:3:4:5:6:7:8",
+                 InetAddresses.toAddrString(
+                     InetAddresses.forString("1:2:3:4:5:6:7:8")));
+    assertEquals("2001:0:0:4::8",
+                 InetAddresses.toAddrString(
+                     InetAddresses.forString("2001:0:0:4:0:0:0:8")));
+    assertEquals("2001::4:5:6:7:8",
+                 InetAddresses.toAddrString(
+                     InetAddresses.forString("2001:0:0:4:5:6:7:8")));
+    assertEquals("2001:0:3:4:5:6:7:8",
+                 InetAddresses.toAddrString(
+                     InetAddresses.forString("2001:0:3:4:5:6:7:8")));
+    assertEquals("0:0:3::ffff",
+                 InetAddresses.toAddrString(
+                     InetAddresses.forString("0:0:3:0:0:0:0:ffff")));
+    assertEquals("::4:0:0:0:ffff",
+                 InetAddresses.toAddrString(
+                     InetAddresses.forString("0:0:0:4:0:0:0:ffff")));
+    assertEquals("::5:0:0:ffff",
+                 InetAddresses.toAddrString(
+                     InetAddresses.forString("0:0:0:0:5:0:0:ffff")));
+    assertEquals("1::4:0:0:7:8",
+                 InetAddresses.toAddrString(
+                     InetAddresses.forString("1:0:0:4:0:0:7:8")));
+    assertEquals("::",
+                 InetAddresses.toAddrString(
+                     InetAddresses.forString("0:0:0:0:0:0:0:0")));
+    assertEquals("::1",
+                 InetAddresses.toAddrString(
+                     InetAddresses.forString("0:0:0:0:0:0:0:1")));
+    assertEquals("2001:658:22a:cafe::",
+                 InetAddresses.toAddrString(
+                     InetAddresses.forString("2001:0658:022a:cafe::")));
+    assertEquals("::102:304",
+                 InetAddresses.toAddrString(
+                     InetAddresses.forString("::1.2.3.4")));
+  }
+
+  public void testToUriStringIPv4() {
+    String ipStr = "1.2.3.4";
+    InetAddress ip = InetAddresses.forString(ipStr);
+    assertEquals("1.2.3.4", InetAddresses.toUriString(ip));
+  }
+
+  public void testToUriStringIPv6() {
+    // Unfortunately the InetAddress.toString() method for IPv6 addresses
+    // does not collapse contiguous shorts of zeroes with the :: abbreviation.
+    String ipStr = "3ffe::1";
+    InetAddress ip = InetAddresses.forString(ipStr);
+    assertEquals("[3ffe::1]", InetAddresses.toUriString(ip));
+  }
+
+  public void testForUriStringIPv4() {
+    Inet4Address expected = (Inet4Address) InetAddresses.forString("192.168.1.1");
+    assertEquals(expected, InetAddresses.forUriString("192.168.1.1"));
+  }
+
+  public void testForUriStringIPv6() {
+    Inet6Address expected = (Inet6Address) InetAddresses.forString("3ffe:0:0:0:0:0:0:1");
+    assertEquals(expected, InetAddresses.forUriString("[3ffe:0:0:0:0:0:0:1]"));
+  }
+
+  public void testIsUriInetAddress() {
+    assertTrue(InetAddresses.isUriInetAddress("192.168.1.1"));
+    assertTrue(InetAddresses.isUriInetAddress("[3ffe:0:0:0:0:0:0:1]"));
+
+    assertFalse(InetAddresses.isUriInetAddress("[192.168.1.1"));
+    assertFalse(InetAddresses.isUriInetAddress("192.168.1.1]"));
+    assertFalse(InetAddresses.isUriInetAddress(""));
+    assertFalse(InetAddresses.isUriInetAddress("192.168.999.888"));
+    assertFalse(InetAddresses.isUriInetAddress("www.google.com"));
+    assertFalse(InetAddresses.isUriInetAddress("1:2e"));
+    assertFalse(InetAddresses.isUriInetAddress("[3ffe:0:0:0:0:0:0:1"));
+    assertFalse(InetAddresses.isUriInetAddress("3ffe:0:0:0:0:0:0:1]"));
+  }
+
+  public void testForUriStringBad() {
+    try {
+      InetAddresses.forUriString("");
+      fail("expected IllegalArgumentException");  // COV_NF_LINE
+    } catch (IllegalArgumentException e) {
+      // expected
+    }
+
+    try {
+      InetAddresses.forUriString("192.168.999.888");
+      fail("expected IllegalArgumentException");  // COV_NF_LINE
+    } catch (IllegalArgumentException e) {
+      // expected
+    }
+
+    try {
+      InetAddresses.forUriString("www.google.com");
+      fail("expected IllegalArgumentException");  // COV_NF_LINE
+    } catch (IllegalArgumentException e) {
+      // expected
+    }
+
+    try {
+      InetAddresses.forUriString("[1:2e]");
+      fail("expected IllegalArgumentException");  // COV_NF_LINE
+    } catch (IllegalArgumentException e) {
+      // expected
+    }
+
+    try {
+      InetAddresses.forUriString("[192.168.1.1]");
+      fail("expected IllegalArgumentException");  // COV_NF_LINE
+    } catch (IllegalArgumentException e) {
+      // expected
+    }
+
+    try {
+      InetAddresses.forUriString("192.168.1.1]");
+      fail("expected IllegalArgumentException");  // COV_NF_LINE
+    } catch (IllegalArgumentException e) {
+      // expected
+    }
+
+    try {
+      InetAddresses.forUriString("[192.168.1.1");
+      fail("expected IllegalArgumentException");  // COV_NF_LINE
+    } catch (IllegalArgumentException e) {
+      // expected
+    }
+
+    try {
+      InetAddresses.forUriString("[3ffe:0:0:0:0:0:0:1");
+      fail("expected IllegalArgumentException");  // COV_NF_LINE
+    } catch (IllegalArgumentException e) {
+      // expected
+    }
+
+    try {
+      InetAddresses.forUriString("3ffe:0:0:0:0:0:0:1]");
+      fail("expected IllegalArgumentException");  // COV_NF_LINE
+    } catch (IllegalArgumentException e) {
+      // expected
+    }
+  }
+
+  public void testCompatIPv4Addresses() {
+    String[] nonCompatAddresses = {
+        "3ffe::1",
+        "::",
+        "::1",
+    };
+
+    for (int i = 0; i < nonCompatAddresses.length; i++) {
+      InetAddress ip = InetAddresses.forString(nonCompatAddresses[i]);
+      assertFalse(InetAddresses.isCompatIPv4Address((Inet6Address) ip));
+      try {
+        InetAddresses.getCompatIPv4Address((Inet6Address) ip);
+        fail("IllegalArgumentException expected for '" +
+             nonCompatAddresses[i] + "'");
+      } catch (IllegalArgumentException expected) {
+        // expected behavior
+      }
+    }
+
+    String[] validCompatAddresses = {
+        "::1.2.3.4",
+        "::102:304",
+    };
+    String compatStr = "1.2.3.4";
+    InetAddress compat = InetAddresses.forString(compatStr);
+
+    for (int i = 0; i < validCompatAddresses.length; i++) {
+      InetAddress ip = InetAddresses.forString(validCompatAddresses[i]);
+      assertTrue("checking '" + validCompatAddresses[i] + "'", ip instanceof Inet6Address);
+      assertTrue("checking '" + validCompatAddresses[i] + "'",
+          InetAddresses.isCompatIPv4Address((Inet6Address) ip));
+      assertEquals("checking '" + validCompatAddresses[i] + "'", compat,
+                   InetAddresses.getCompatIPv4Address((Inet6Address) ip));
+    }
+  }
+
+  public void testMappedIPv4Addresses() throws UnknownHostException {
+    /*
+     * Verify that it is not possible to instantiate an Inet6Address
+     * from an "IPv4 mapped" IPv6 address.  Our String-based method can
+     * at least identify them, however.
+     */
+    String mappedStr = "::ffff:192.168.0.1";
+    assertTrue(InetAddresses.isMappedIPv4Address(mappedStr));
+    InetAddress mapped = InetAddresses.forString(mappedStr);
+    assertFalse(mapped instanceof Inet6Address);
+    assertEquals(InetAddress.getByName("192.168.0.1"), mapped);
+
+    // check upper case
+    mappedStr = "::FFFF:192.168.0.1";
+    assertTrue(InetAddresses.isMappedIPv4Address(mappedStr));
+    mapped = InetAddresses.forString(mappedStr);
+    assertFalse(mapped instanceof Inet6Address);
+    assertEquals(InetAddress.getByName("192.168.0.1"), mapped);
+
+    mappedStr = "0:00:000:0000:0:ffff:1.2.3.4";
+    assertTrue(InetAddresses.isMappedIPv4Address(mappedStr));
+    mapped = InetAddresses.forString(mappedStr);
+    assertFalse(mapped instanceof Inet6Address);
+    assertEquals(InetAddress.getByName("1.2.3.4"), mapped);
+
+    mappedStr = "::ffff:0102:0304";
+    assertTrue(InetAddresses.isMappedIPv4Address(mappedStr));
+    mapped = InetAddresses.forString(mappedStr);
+    assertFalse(mapped instanceof Inet6Address);
+    assertEquals(InetAddress.getByName("1.2.3.4"), mapped);
+
+    assertFalse(InetAddresses.isMappedIPv4Address("::"));
+    assertFalse(InetAddresses.isMappedIPv4Address("::ffff"));
+    assertFalse(InetAddresses.isMappedIPv4Address("::ffff:0"));
+    assertFalse(InetAddresses.isMappedIPv4Address("::fffe:0:0"));
+    assertFalse(InetAddresses.isMappedIPv4Address("::1:ffff:0:0"));
+    assertFalse(InetAddresses.isMappedIPv4Address("foo"));
+    assertFalse(InetAddresses.isMappedIPv4Address("192.0.2.1"));
+  }
+
+  public void test6to4Addresses() {
+    String[] non6to4Addresses = {
+        "::1.2.3.4",
+        "3ffe::1",
+        "::",
+        "::1",
+    };
+
+    for (int i = 0; i < non6to4Addresses.length; i++) {
+      InetAddress ip = InetAddresses.forString(non6to4Addresses[i]);
+      assertFalse(InetAddresses.is6to4Address((Inet6Address) ip));
+      try {
+        InetAddresses.get6to4IPv4Address(
+            (Inet6Address) ip);
+        fail("IllegalArgumentException expected for '" +
+             non6to4Addresses[i] + "'");
+      } catch (IllegalArgumentException expected) {
+        // expected behavior
+      }
+    }
+
+    String valid6to4Address = "2002:0102:0304::1";
+    String ipv4Str = "1.2.3.4";
+
+    InetAddress ipv4 = InetAddresses.forString(ipv4Str);
+    InetAddress ip = InetAddresses.forString(valid6to4Address);
+    assertTrue(InetAddresses.is6to4Address((Inet6Address) ip));
+    assertEquals(ipv4, InetAddresses.get6to4IPv4Address((Inet6Address) ip));
+  }
+
+  public void testTeredoAddresses() {
+    String[] nonTeredoAddresses = {
+        "::1.2.3.4",
+        "3ffe::1",
+        "::",
+        "::1",
+    };
+
+    for (int i = 0; i < nonTeredoAddresses.length; i++) {
+      InetAddress ip = InetAddresses.forString(nonTeredoAddresses[i]);
+      assertFalse(InetAddresses.isTeredoAddress((Inet6Address) ip));
+      try {
+        InetAddresses.getTeredoInfo((Inet6Address) ip);
+        fail("IllegalArgumentException expected for '" +
+             nonTeredoAddresses[i] + "'");
+      } catch (IllegalArgumentException expected) {
+        // expected behavior
+      }
+    }
+
+    String validTeredoAddress = "2001:0000:4136:e378:8000:63bf:3fff:fdd2";
+    String serverStr = "65.54.227.120";
+    String clientStr = "192.0.2.45";
+    int port = 40000;
+    int flags = 0x8000;
+
+    InetAddress ip = InetAddresses.forString(validTeredoAddress);
+    assertTrue(InetAddresses.isTeredoAddress((Inet6Address) ip));
+    InetAddresses.TeredoInfo teredo =
+        InetAddresses.getTeredoInfo((Inet6Address) ip);
+
+    InetAddress server = InetAddresses.forString(serverStr);
+    assertEquals(server, teredo.getServer());
+
+    InetAddress client = InetAddresses.forString(clientStr);
+    assertEquals(client, teredo.getClient());
+
+    assertEquals(port, teredo.getPort());
+    assertEquals(flags, teredo.getFlags());
+  }
+
+  public void testIsatapAddresses() {
+    InetAddress ipv4 = InetAddresses.forString("1.2.3.4");
+    String[] validIsatapAddresses = {
+        "2001:db8::5efe:102:304",
+        "2001:db8::100:5efe:102:304",  // Private Multicast? Not likely.
+        "2001:db8::200:5efe:102:304",
+        "2001:db8::300:5efe:102:304"   // Public Multicast? Also unlikely.
+    };
+    String[] nonIsatapAddresses = {
+        "::1.2.3.4",
+        "3ffe::1",
+        "::",
+        "::1",
+        "2001:db8::0040:5efe:102:304",
+        "2001:db8::5ffe:102:304",
+        "2001:db8::5eff:102:304",
+        "2001:0:102:203:200:5efe:506:708",  // Teredo address; not ISATAP
+    };
+
+    for (int i = 0; i < validIsatapAddresses.length; i++) {
+      InetAddress ip = InetAddresses.forString(validIsatapAddresses[i]);
+      assertTrue(InetAddresses.isIsatapAddress((Inet6Address) ip));
+      assertEquals("checking '" + validIsatapAddresses[i] + "'", ipv4,
+                   InetAddresses.getIsatapIPv4Address((Inet6Address) ip));
+    }
+    for (int i = 0; i < nonIsatapAddresses.length; i++) {
+      InetAddress ip = InetAddresses.forString(nonIsatapAddresses[i]);
+      assertFalse(InetAddresses.isIsatapAddress((Inet6Address) ip));
+      try {
+        InetAddresses.getIsatapIPv4Address((Inet6Address) ip);
+        fail("IllegalArgumentException expected for '" +
+             nonIsatapAddresses[i] + "'");
+      } catch (IllegalArgumentException expected) {
+        // expected behavior
+      }
+    }
+  }
+
+  public void testGetEmbeddedIPv4ClientAddress() {
+    Inet6Address testIp;
+
+    // Test regular global unicast address.
+    testIp = (Inet6Address) InetAddresses.forString("2001:db8::1");
+    assertFalse(InetAddresses.hasEmbeddedIPv4ClientAddress(testIp));
+
+    // Test ISATAP address.
+    testIp = (Inet6Address) InetAddresses.forString("2001:db8::5efe:102:304");
+    assertFalse(InetAddresses.hasEmbeddedIPv4ClientAddress(testIp));
+
+    // Test compat address.
+    testIp = (Inet6Address) InetAddresses.forString("::1.2.3.4");
+    assertTrue(InetAddresses.hasEmbeddedIPv4ClientAddress(testIp));
+    InetAddress ipv4 = InetAddresses.forString("1.2.3.4");
+    assertEquals(ipv4, InetAddresses.getEmbeddedIPv4ClientAddress(testIp));
+
+    // Test 6to4 address.
+    testIp = (Inet6Address) InetAddresses.forString("2002:0102:0304::1");
+    assertTrue(InetAddresses.hasEmbeddedIPv4ClientAddress(testIp));
+    ipv4 = InetAddresses.forString("1.2.3.4");
+    assertEquals(ipv4, InetAddresses.getEmbeddedIPv4ClientAddress(testIp));
+
+    // Test Teredo address.
+    testIp = (Inet6Address) InetAddresses.forString(
+        "2001:0000:4136:e378:8000:63bf:3fff:fdd2");
+    assertTrue(InetAddresses.hasEmbeddedIPv4ClientAddress(testIp));
+    ipv4 = InetAddresses.forString("192.0.2.45");
+    assertEquals(ipv4, InetAddresses.getEmbeddedIPv4ClientAddress(testIp));
+  }
+
+  public void testGetCoercedIPv4Address() {
+    // Check that a coerced IPv4 address is unaltered.
+    InetAddress localHost4 = InetAddresses.forString("127.0.0.1");
+    assertEquals(localHost4,
+                 InetAddresses.getCoercedIPv4Address(localHost4));
+
+    // ::1 special case
+    assertEquals(localHost4,
+                 InetAddresses.getCoercedIPv4Address(
+                     InetAddresses.forString("::1")));
+
+    // :: special case
+    assertEquals(InetAddresses.forString("0.0.0.0"),
+                 InetAddresses.getCoercedIPv4Address(
+                     InetAddresses.forString("::")));
+
+    // test compat address (should be hashed)
+    assertTrue(InetAddresses.forString("1.2.3.4") !=
+               InetAddresses.getCoercedIPv4Address(
+                   InetAddresses.forString("::1.2.3.4")));
+
+    // test 6to4 address (should be hashed)
+    assertTrue(InetAddresses.forString("1.2.3.4") !=
+               InetAddresses.getCoercedIPv4Address(
+                   InetAddresses.forString("2002:0102:0304::1")));
+
+    // 2 6to4 addresses differing in the embedded IPv4 address should
+    // hash to the different values.
+    assertTrue(InetAddresses.getCoercedIPv4Address(
+                   InetAddresses.forString("2002:0102:0304::1")) !=
+               InetAddresses.getCoercedIPv4Address(
+                   InetAddresses.forString("2002:0506:0708::1")));
+
+    // 2 6to4 addresses NOT differing in the embedded IPv4 address should
+    // hash to the same value.
+    assertTrue(InetAddresses.getCoercedIPv4Address(
+                   InetAddresses.forString("2002:0102:0304::1")) !=
+               InetAddresses.getCoercedIPv4Address(
+                   InetAddresses.forString("2002:0102:0304::2")));
+
+    // test Teredo address (should be hashed)
+    assertTrue(InetAddresses.forString("192.0.2.45") !=
+               InetAddresses.getCoercedIPv4Address(
+                   InetAddresses.forString(
+                       "2001:0000:4136:e378:8000:63bf:3fff:fdd2")));
+
+    // 2 Teredo addresses differing in the embedded IPv4 address should
+    // hash to the different values.
+    assertTrue(InetAddresses.getCoercedIPv4Address(
+                   InetAddresses.forString(
+                       "2001:0000:4136:e378:8000:63bf:3fff:fdd2")) !=
+               InetAddresses.getCoercedIPv4Address(
+                   InetAddresses.forString(
+                       "2001:0000:4136:e379:8000:63bf:3fff:fdd2")));
+
+    // 2 Teredo addresses NOT differing in the embedded IPv4 address should
+    // hash to the same value.
+    assertEquals(InetAddresses.getCoercedIPv4Address(
+                     InetAddresses.forString(
+                         "2001:0000:4136:e378:8000:63bf:3fff:fdd2")),
+                 InetAddresses.getCoercedIPv4Address(
+                     InetAddresses.forString(
+                         "2001:0000:4136:e378:9000:63bf:3fff:fdd2")));
+
+    // Test that an address hashes in to the 224.0.0.0/3 number-space.
+    InetAddress coerced = InetAddresses.getCoercedIPv4Address(
+                              InetAddresses.forString("2001:4860::1"));
+    assertTrue(0xe0000000 <= InetAddresses.coerceToInteger(coerced));
+    assertTrue(InetAddresses.coerceToInteger(coerced) <= 0xfffffffe);
+  }
+
+  public void testHash64To32() {
+    // Make sure the output looks reasonably sane.
+    assertEquals(532412650, InetAddresses.hash64To32(-1));
+    assertEquals(720020139, InetAddresses.hash64To32(0));
+    assertEquals(357654460, InetAddresses.hash64To32(1));
+    assertEquals(-1977349188, InetAddresses.hash64To32(0x7fffffffffffffffL));
+  }
+
+  public void testToInteger() {
+    InetAddress ipv4Addr = InetAddresses.forString("127.0.0.1");
+    assertEquals(0x7f000001, InetAddresses.coerceToInteger(ipv4Addr));
+  }
+
+  public void testFromInteger() {
+    assertEquals(InetAddresses.fromInteger(0x7f000001),
+                 InetAddresses.forString("127.0.0.1"));
+  }
+
+  public void testFromLittleEndianByteArray() throws UnknownHostException {
+    assertEquals(
+        InetAddresses.fromLittleEndianByteArray(new byte[] {1, 2, 3, 4}),
+        InetAddress.getByAddress(new byte[] {4, 3, 2, 1}));
+
+    assertEquals(
+        InetAddresses.fromLittleEndianByteArray(
+            new byte[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}),
+        InetAddress.getByAddress(
+            new byte[] {16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1}));
+
+    try {
+      InetAddresses.fromLittleEndianByteArray(new byte[3]);
+      fail("expected exception");
+    } catch (UnknownHostException expected) {
+      // success
+    }
+  }
+
+  public void testIsMaximum() throws UnknownHostException {
+    InetAddress address = InetAddress.getByName("255.255.255.254");
+    assertFalse(InetAddresses.isMaximum(address));
+
+    address = InetAddress.getByName("255.255.255.255");
+    assertTrue(InetAddresses.isMaximum(address));
+
+    address = InetAddress.getByName("ffff:ffff:ffff:ffff:ffff:ffff:ffff:fffe");
+    assertFalse(InetAddresses.isMaximum(address));
+
+    address = InetAddress.getByName("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff");
+    assertTrue(InetAddresses.isMaximum(address));
+  }
+
+  public void testIncrementIPv4() throws UnknownHostException {
+    InetAddress address_66_0 = InetAddress.getByName("172.24.66.0");
+    InetAddress address_66_255 = InetAddress.getByName("172.24.66.255");
+    InetAddress address_67_0 = InetAddress.getByName("172.24.67.0");
+
+    InetAddress address = address_66_0;
+    for (int i = 0; i < 255; i++) {
+      address = InetAddresses.increment(address);
+    }
+    assertEquals(address_66_255, address);
+
+    address = InetAddresses.increment(address);
+    assertEquals(address_67_0, address);
+
+    InetAddress address_ffffff = InetAddress.getByName("255.255.255.255");
+    address = address_ffffff;
+    try {
+      address = InetAddresses.increment(address);
+      fail();
+    } catch (IllegalArgumentException expected) { }
+  }
+
+  public void testIncrementIPv6() throws UnknownHostException {
+    InetAddress addressV6_66_0 = InetAddress.getByName("2001:db8::6600");
+    InetAddress addressV6_66_ff = InetAddress.getByName("2001:db8::66ff");
+    InetAddress addressV6_67_0 = InetAddress.getByName("2001:db8::6700");
+
+    InetAddress address = addressV6_66_0;
+    for (int i = 0; i < 255; i++) {
+      address = InetAddresses.increment(address);
+    }
+    assertEquals(addressV6_66_ff, address);
+
+    address = InetAddresses.increment(address);
+    assertEquals(addressV6_67_0, address);
+
+    InetAddress addressV6_ffffff =
+        InetAddress.getByName("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff");
+    address = addressV6_ffffff;
+    try {
+      address = InetAddresses.increment(address);
+      fail();
+    } catch (IllegalArgumentException expected) { }
+  }
+}
diff --git a/guava-tests/test/com/google/common/net/InternetDomainNameTest.java b/guava-tests/test/com/google/common/net/InternetDomainNameTest.java
new file mode 100644
index 0000000..1fb869f
--- /dev/null
+++ b/guava-tests/test/com/google/common/net/InternetDomainNameTest.java
@@ -0,0 +1,403 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.net;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.base.Strings;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Iterables;
+import com.google.common.testing.EqualsTester;
+import com.google.common.testing.NullPointerTester;
+
+import junit.framework.TestCase;
+
+import java.util.List;
+import java.util.Locale;
+
+/**
+ * {@link TestCase} for {@link InternetDomainName}.
+ *
+ * @author Craig Berry
+ */
+@GwtCompatible(emulated = true)
+public final class InternetDomainNameTest extends TestCase {
+  private static final InternetDomainName UNICODE_EXAMPLE =
+      InternetDomainName.from("j\u00f8rpeland.no");
+  private static final InternetDomainName PUNYCODE_EXAMPLE =
+      InternetDomainName.from("xn--jrpeland-54a.no");
+
+  /**
+   * The Greek letter delta, used in unicode testing.
+   */
+  private static final String DELTA = "\u0394";
+
+  /**
+   * A domain part which is valid under lenient validation, but invalid under
+   * strict validation.
+   */
+  static final String LOTS_OF_DELTAS = Strings.repeat(DELTA, 62);
+
+  private static final String ALMOST_TOO_MANY_LEVELS =
+      Strings.repeat("a.", 127);
+
+  private static final String ALMOST_TOO_LONG =
+      Strings.repeat("aaaaa.", 40) + "1234567890.c";
+
+  private static final List<String> VALID_NAME = ImmutableList.of(
+      "foo.com",
+      "f-_-o.cOM",
+      "f--1.com",
+      "f11-1.com",
+      "www",
+      "abc.a23",
+      "biz.com.ua",
+      "x",
+      "fOo",
+      "f--o",
+      "f_a",
+      "foo.net.us\uFF61ocm",
+      "woo.com.",
+      "a" + DELTA + "b.com",
+      ALMOST_TOO_MANY_LEVELS,
+      ALMOST_TOO_LONG);
+
+  private static final List<String> INVALID_NAME = ImmutableList.of(
+      "",
+      " ",
+      "127.0.0.1",
+      "::1", "13",
+      "abc.12c",
+      "foo-.com",
+      "_bar.quux",
+      "foo+bar.com",
+      "foo!bar.com",
+      ".foo.com",
+      "..bar.com",
+      "baz..com",
+      "..quiffle.com",
+      "fleeb.com..",
+      ".",
+      "..",
+      "...",
+      "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.com",
+      "a" + DELTA + " .com",
+      ALMOST_TOO_MANY_LEVELS + "com",
+      ALMOST_TOO_LONG + ".c");
+
+  private static final List<String> PS = ImmutableList.of(
+      "com",
+      "co.uk",
+      "foo.ar",
+      "xxxxxx.ar",
+      "org.mK",
+      "us",
+      "uk\uFF61com.",  // Alternate dot character
+      "\u7f51\u7edc.Cn",  // "网络.Cn"
+      "j\u00f8rpeland.no",  // "jorpeland.no" (first o slashed)
+      "xn--jrpeland-54a.no"  // IDNA (punycode) encoding of above
+  );
+
+  private static final List<String> NO_PS = ImmutableList.of(
+      "www", "foo.google", "x.y.z");
+
+  private static final List<String> NON_PS = ImmutableList.of(
+      "foo.bar.com", "foo.ca", "foo.bar.ca",
+      "foo.bar.co.il", "state.CA.us", "www.state.pa.us", "pvt.k12.ca.us",
+      "www.google.com", "www4.yahoo.co.uk", "home.netscape.com",
+      "web.MIT.edu", "foo.eDu.au", "utenti.blah.IT", "dominio.com.co");
+
+  private static final List<String> TOP_PRIVATE_DOMAIN = ImmutableList.of(
+      "google.com", "foo.Co.uk", "foo.ca.us.");
+
+  private static final List<String> UNDER_PRIVATE_DOMAIN = ImmutableList.of(
+      "foo.bar.google.com", "a.b.co.uk", "x.y.ca.us");
+
+  private static final List<String> VALID_IP_ADDRS = ImmutableList.of(
+      "1.2.3.4", "127.0.0.1", "::1", "2001:db8::1");
+
+  private static final List<String> INVALID_IP_ADDRS = ImmutableList.of(
+      "", "1", "1.2.3", "...", "1.2.3.4.5", "400.500.600.700",
+      ":", ":::1", "2001:db8:");
+
+  private static final List<String> SOMEWHERE_UNDER_PS = ImmutableList.of(
+      "foo.bar.google.com",
+      "a.b.c.1.2.3.ca.us",
+      "site.jp",
+      "uomi-online.kir.jp",
+      "jprs.co.jp",
+      "site.quick.jp",
+      "site.tenki.jp",
+      "site.or.jp",
+      "site.gr.jp",
+      "site.ne.jp",
+      "site.ac.jp",
+      "site.ad.jp",
+      "site.ed.jp",
+      "site.geo.jp",
+      "site.go.jp",
+      "site.lg.jp",
+      "1.fm",
+      "site.cc",
+      "site.ee",
+      "site.fi",
+      "site.fm",
+      "site.gr",
+      "www.leguide.ma",
+      "site.ma",
+      "some.org.mk",
+      "site.mk",
+      "site.tv",
+      "site.us",
+      "www.odev.us",
+      "www.GOOGLE.com",
+      "www.com",
+      "google.com",
+      "www7.google.co.uk",
+      "google.Co.uK",
+      "jobs.kt.com.",
+      "home.netscape.com",
+      "web.stanford.edu",
+      "stanford.edu",
+      "state.ca.us",
+      "www.state.ca.us",
+      "state.ca.us",
+      "pvt.k12.ca.us",
+      "www.rave.ca.",
+      "cnn.ca",
+      "ledger-enquirer.com",
+      "it-trace.ch",
+      "cool.dk",
+      "cool.co.uk",
+      "cool.de",
+      "cool.es",
+      "cool\uFF61fr", // Alternate dot character
+      "cool.nl",
+      "members.blah.nl.",
+      "cool.se",
+      "utenti.blah.it",
+      "kt.co",
+      "a\u7f51\u7edcA.\u7f51\u7edc.Cn"  // "a网络A.网络.Cn"
+  );
+
+  public void testValid() {
+    for (String name : VALID_NAME) {
+      InternetDomainName.from(name);
+    }
+  }
+
+  public void testInvalid() {
+    for (String name : INVALID_NAME) {
+      try {
+        InternetDomainName.from(name);
+        fail("Should have been invalid: '" + name + "'");
+      } catch (IllegalArgumentException expected) {
+        // Expected case
+      }
+    }
+  }
+
+  public void testPublicSuffix() {
+    for (String name : PS) {
+      final InternetDomainName domain = InternetDomainName.from(name);
+      assertTrue(name, domain.isPublicSuffix());
+      assertTrue(name, domain.hasPublicSuffix());
+      assertFalse(name, domain.isUnderPublicSuffix());
+      assertFalse(name, domain.isTopPrivateDomain());
+      assertEquals(domain, domain.publicSuffix());
+    }
+
+    for (String name : NO_PS) {
+      final InternetDomainName domain = InternetDomainName.from(name);
+      assertFalse(name, domain.isPublicSuffix());
+      assertFalse(name, domain.hasPublicSuffix());
+      assertFalse(name, domain.isUnderPublicSuffix());
+      assertFalse(name, domain.isTopPrivateDomain());
+      assertNull(domain.publicSuffix());
+    }
+
+    for (String name : NON_PS) {
+      final InternetDomainName domain = InternetDomainName.from(name);
+      assertFalse(name, domain.isPublicSuffix());
+      assertTrue(name, domain.hasPublicSuffix());
+      assertTrue(name, domain.isUnderPublicSuffix());
+    }
+  }
+
+  public void testUnderPublicSuffix() {
+    for (String name : SOMEWHERE_UNDER_PS) {
+      final InternetDomainName domain = InternetDomainName.from(name);
+      assertFalse(name, domain.isPublicSuffix());
+      assertTrue(name, domain.hasPublicSuffix());
+      assertTrue(name, domain.isUnderPublicSuffix());
+    }
+  }
+
+  public void testTopPrivateDomain() {
+    for (String name : TOP_PRIVATE_DOMAIN) {
+      final InternetDomainName domain = InternetDomainName.from(name);
+      assertFalse(name, domain.isPublicSuffix());
+      assertTrue(name, domain.hasPublicSuffix());
+      assertTrue(name, domain.isUnderPublicSuffix());
+      assertTrue(name, domain.isTopPrivateDomain());
+      assertEquals(domain.parent(), domain.publicSuffix());
+    }
+  }
+
+  public void testUnderPrivateDomain() {
+    for (String name : UNDER_PRIVATE_DOMAIN) {
+      final InternetDomainName domain = InternetDomainName.from(name);
+      assertFalse(name, domain.isPublicSuffix());
+      assertTrue(name, domain.hasPublicSuffix());
+      assertTrue(name, domain.isUnderPublicSuffix());
+      assertFalse(name, domain.isTopPrivateDomain());
+    }
+  }
+
+  public void testParent() {
+    assertEquals(
+        "com",
+        InternetDomainName.from("google.com").parent().name());
+    assertEquals(
+        "uk",
+        InternetDomainName.from("co.uk").parent().name());
+    assertEquals(
+        "google.com",
+        InternetDomainName.from("www.google.com").parent().name());
+
+    try {
+      InternetDomainName.from("com").parent();
+      fail("'com' should throw ISE on .parent() call");
+    } catch (IllegalStateException expected) {
+    }
+  }
+
+  public void testChild() {
+    InternetDomainName domain = InternetDomainName.from("foo.com");
+
+    assertEquals("www.foo.com", domain.child("www").name());
+
+    try {
+      domain.child("www.");
+      fail("www..google.com should have been invalid");
+    } catch (IllegalArgumentException expected) {
+      // Expected outcome
+    }
+  }
+
+  public void testParentChild() {
+    InternetDomainName origin = InternetDomainName.from("foo.com");
+    InternetDomainName parent = origin.parent();
+    assertEquals("com", parent.name());
+
+    // These would throw an exception if leniency were not preserved during parent() and child()
+    // calls.
+    InternetDomainName child = parent.child(LOTS_OF_DELTAS);
+    child.child(LOTS_OF_DELTAS);
+  }
+
+  public void testValidTopPrivateDomain() {
+    InternetDomainName googleDomain = InternetDomainName.from("google.com");
+
+    assertEquals(googleDomain, googleDomain.topPrivateDomain());
+    assertEquals(googleDomain, googleDomain.child("mail").topPrivateDomain());
+    assertEquals(googleDomain, googleDomain.child("foo.bar").topPrivateDomain());
+  }
+
+  public void testInvalidTopPrivateDomain() {
+    List<String> badCookieDomains = ImmutableList.of("co.uk", "foo", "com");
+
+    for (String domain : badCookieDomains) {
+      try {
+        InternetDomainName.from(domain).topPrivateDomain();
+        fail(domain);
+      } catch (IllegalStateException expected) {
+      }
+    }
+  }
+
+  public void testIsValid() {
+    final Iterable<String> validCases = Iterables.concat(
+        VALID_NAME, PS, NO_PS, NON_PS);
+    final Iterable<String> invalidCases = Iterables.concat(
+        INVALID_NAME, VALID_IP_ADDRS, INVALID_IP_ADDRS);
+
+    for (String valid : validCases) {
+      assertTrue(valid, InternetDomainName.isValid(valid));
+    }
+
+    for (String invalid : invalidCases) {
+      assertFalse(invalid, InternetDomainName.isValid(invalid));
+    }
+  }
+
+  // TODO(hhchan): Resurrect this test after removing the reference to
+  // String.toLowerCase(Locale)
+  @GwtIncompatible("String.toLowerCase(Locale)")
+  public void testName() {
+    for (String inputName : SOMEWHERE_UNDER_PS) {
+      InternetDomainName domain = InternetDomainName.from(inputName);
+
+      /*
+       * We would ordinarily use constants for the expected results, but
+       * doing it by derivation allows us to reuse the test case definitions
+       * used in other tests.
+       */
+
+      String expectedName = inputName.toLowerCase(Locale.ENGLISH);
+      expectedName = expectedName.replaceAll("[\u3002\uFF0E\uFF61]", ".");
+
+      if (expectedName.endsWith(".")) {
+        expectedName = expectedName.substring(0, expectedName.length() - 1);
+      }
+
+      assertEquals(expectedName, domain.name());
+    }
+  }
+
+  public void testExclusion() {
+    InternetDomainName domain = InternetDomainName.from("foo.nhs.uk");
+    assertTrue(domain.hasPublicSuffix());
+    assertEquals("uk", domain.publicSuffix().name());
+
+    // Behold the weirdness!
+    assertFalse(domain.publicSuffix().isPublicSuffix());
+  }
+
+  public void testEquality() {
+    new EqualsTester()
+        .addEqualityGroup(
+            idn("google.com"), idn("google.com"), idn("GOOGLE.COM"))
+        .addEqualityGroup(idn("www.google.com"))
+        .addEqualityGroup(UNICODE_EXAMPLE)
+        .addEqualityGroup(PUNYCODE_EXAMPLE)
+        .testEquals();
+  }
+
+  private static InternetDomainName idn(String domain) {
+    return InternetDomainName.from(domain);
+  }
+
+  @GwtIncompatible("NullPointerTester")
+  public void testNulls() throws Exception {
+    final NullPointerTester tester = new NullPointerTester();
+
+    tester.testAllPublicStaticMethods(InternetDomainName.class);
+    tester.testAllPublicInstanceMethods(InternetDomainName.from("google.com"));
+  }
+
+}
diff --git a/guava-tests/test/com/google/common/primitives/BooleansTest.java b/guava-tests/test/com/google/common/primitives/BooleansTest.java
new file mode 100644
index 0000000..b20a01c
--- /dev/null
+++ b/guava-tests/test/com/google/common/primitives/BooleansTest.java
@@ -0,0 +1,213 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.primitives;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.collect.testing.Helpers;
+import com.google.common.testing.NullPointerTester;
+import com.google.common.testing.SerializableTester;
+
+import junit.framework.TestCase;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+/**
+ * Unit test for {@link Booleans}.
+ *
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible(emulated = true)
+public class BooleansTest extends TestCase {
+  private static final boolean[] EMPTY = {};
+  private static final boolean[] ARRAY_FALSE = {false};
+  private static final boolean[] ARRAY_FALSE_FALSE = {false, false};
+  private static final boolean[] ARRAY_FALSE_TRUE = {false, true};
+
+  private static final boolean[] VALUES = {false, true};
+
+  public void testHashCode() {
+    assertEquals(Boolean.TRUE.hashCode(), Booleans.hashCode(true));
+    assertEquals(Boolean.FALSE.hashCode(), Booleans.hashCode(false));
+  }
+
+  public void testCompare() {
+    for (boolean x : VALUES) {
+      for (boolean y : VALUES) {
+        // note: spec requires only that the sign is the same
+        assertEquals(x + ", " + y,
+                     Boolean.valueOf(x).compareTo(y),
+                     Booleans.compare(x, y));
+      }
+    }
+  }
+
+  public void testContains() {
+    assertFalse(Booleans.contains(EMPTY, false));
+    assertFalse(Booleans.contains(ARRAY_FALSE, true));
+    assertTrue(Booleans.contains(ARRAY_FALSE, false));
+    assertTrue(Booleans.contains(ARRAY_FALSE_TRUE, false));
+    assertTrue(Booleans.contains(ARRAY_FALSE_TRUE, true));
+  }
+
+  public void testIndexOf() {
+    assertEquals(-1, Booleans.indexOf(EMPTY, false));
+    assertEquals(-1, Booleans.indexOf(ARRAY_FALSE, true));
+    assertEquals(-1, Booleans.indexOf(ARRAY_FALSE_FALSE, true));
+    assertEquals(0, Booleans.indexOf(ARRAY_FALSE, false));
+    assertEquals(0, Booleans.indexOf(ARRAY_FALSE_TRUE, false));
+    assertEquals(1, Booleans.indexOf(ARRAY_FALSE_TRUE, true));
+    assertEquals(2, Booleans.indexOf(new boolean[] {false, false, true}, true));
+  }
+
+  public void testLastIndexOf() {
+    assertEquals(-1, Booleans.lastIndexOf(EMPTY, false));
+    assertEquals(-1, Booleans.lastIndexOf(ARRAY_FALSE, true));
+    assertEquals(-1, Booleans.lastIndexOf(ARRAY_FALSE_FALSE, true));
+    assertEquals(0, Booleans.lastIndexOf(ARRAY_FALSE, false));
+    assertEquals(0, Booleans.lastIndexOf(ARRAY_FALSE_TRUE, false));
+    assertEquals(1, Booleans.lastIndexOf(ARRAY_FALSE_TRUE, true));
+    assertEquals(2, Booleans.lastIndexOf(new boolean[] {false, true, true}, true));
+  }
+
+  public void testConcat() {
+    assertTrue(Arrays.equals(EMPTY, Booleans.concat()));
+    assertTrue(Arrays.equals(EMPTY, Booleans.concat(EMPTY)));
+    assertTrue(Arrays.equals(EMPTY, Booleans.concat(EMPTY, EMPTY, EMPTY)));
+    assertTrue(Arrays.equals(ARRAY_FALSE, Booleans.concat(ARRAY_FALSE)));
+    assertNotSame(ARRAY_FALSE, Booleans.concat(ARRAY_FALSE));
+    assertTrue(Arrays.equals(ARRAY_FALSE, Booleans.concat(EMPTY, ARRAY_FALSE, EMPTY)));
+    assertTrue(Arrays.equals(
+        new boolean[] {false, false, false},
+        Booleans.concat(ARRAY_FALSE, ARRAY_FALSE, ARRAY_FALSE)));
+    assertTrue(Arrays.equals(
+        new boolean[] {false, false, true},
+        Booleans.concat(ARRAY_FALSE, ARRAY_FALSE_TRUE)));
+  }
+
+  public void testEnsureCapacity() {
+    assertSame(EMPTY, Booleans.ensureCapacity(EMPTY, 0, 1));
+    assertSame(ARRAY_FALSE, Booleans.ensureCapacity(ARRAY_FALSE, 0, 1));
+    assertSame(ARRAY_FALSE, Booleans.ensureCapacity(ARRAY_FALSE, 1, 1));
+    assertTrue(Arrays.equals(
+        new boolean[] {true, false, false},
+        Booleans.ensureCapacity(new boolean[] {true}, 2, 1)));
+  }
+
+  public void testEnsureCapacity_fail() {
+    try {
+      Booleans.ensureCapacity(ARRAY_FALSE, -1, 1);
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+    try {
+      // notice that this should even fail when no growth was needed
+      Booleans.ensureCapacity(ARRAY_FALSE, 1, -1);
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  public void testJoin() {
+    assertEquals("", Booleans.join(",", EMPTY));
+    assertEquals("false", Booleans.join(",", ARRAY_FALSE));
+    assertEquals("false,true", Booleans.join(",", false, true));
+    assertEquals("falsetruefalse",
+        Booleans.join("", false, true, false));
+  }
+
+  public void testLexicographicalComparator() {
+    List<boolean[]> ordered = Arrays.asList(
+        new boolean[] {},
+        new boolean[] {false},
+        new boolean[] {false, false},
+        new boolean[] {false, true},
+        new boolean[] {true},
+        new boolean[] {true, false},
+        new boolean[] {true, true},
+        new boolean[] {true, true, true});
+
+    Comparator<boolean[]> comparator = Booleans.lexicographicalComparator();
+    Helpers.testComparator(comparator, ordered);
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testLexicographicalComparatorSerializable() {
+    Comparator<boolean[]> comparator = Booleans.lexicographicalComparator();
+    assertSame(comparator, SerializableTester.reserialize(comparator));
+  }
+
+  public void testToArray() {
+    // need explicit type parameter to avoid javac warning!?
+    List<Boolean> none = Arrays.<Boolean>asList();
+    assertTrue(Arrays.equals(EMPTY, Booleans.toArray(none)));
+
+    List<Boolean> one = Arrays.asList(false);
+    assertTrue(Arrays.equals(ARRAY_FALSE, Booleans.toArray(one)));
+
+    boolean[] array = {false, false, true};
+
+    List<Boolean> three = Arrays.asList(false, false, true);
+    assertTrue(Arrays.equals(array, Booleans.toArray(three)));
+
+    assertTrue(Arrays.equals(array, Booleans.toArray(Booleans.asList(array))));
+  }
+
+  public void testToArray_threadSafe() {
+    // Only for booleans, we lengthen VALUES
+    boolean[] VALUES = BooleansTest.VALUES;
+    VALUES = Booleans.concat(VALUES, VALUES);
+
+    for (int delta : new int[] { +1, 0, -1 }) {
+      for (int i = 0; i < VALUES.length; i++) {
+        List<Boolean> list = Booleans.asList(VALUES).subList(0, i);
+        Collection<Boolean> misleadingSize =
+            Helpers.misleadingSizeCollection(delta);
+        misleadingSize.addAll(list);
+        boolean[] arr = Booleans.toArray(misleadingSize);
+        assertEquals(i, arr.length);
+        for (int j = 0; j < i; j++) {
+          assertEquals(VALUES[j], arr[j]);
+        }
+      }
+    }
+  }
+
+  public void testToArray_withNull() {
+    List<Boolean> list = Arrays.asList(false, true, null);
+    try {
+      Booleans.toArray(list);
+      fail();
+    } catch (NullPointerException expected) {
+    }
+  }
+
+  public void testAsListEmpty() {
+    assertSame(Collections.emptyList(), Booleans.asList(EMPTY));
+  }
+
+  @GwtIncompatible("NullPointerTester")
+  public void testNulls() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.setDefault(boolean[].class, new boolean[0]);
+    tester.testAllPublicStaticMethods(Booleans.class);
+  }
+}
diff --git a/guava-tests/test/com/google/common/primitives/ByteArrayAsListTest.java b/guava-tests/test/com/google/common/primitives/ByteArrayAsListTest.java
new file mode 100644
index 0000000..49ffa74
--- /dev/null
+++ b/guava-tests/test/com/google/common/primitives/ByteArrayAsListTest.java
@@ -0,0 +1,162 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.primitives;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.testing.ListTestSuiteBuilder;
+import com.google.common.collect.testing.SampleElements;
+import com.google.common.collect.testing.TestListGenerator;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.ListFeature;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import java.util.List;
+
+/**
+ * Test suite covering {@link Bytes#asList(byte[])}.
+ *
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible
+public class ByteArrayAsListTest extends TestCase {
+
+  private static List<Byte> asList(Byte[] values) {
+    byte[] temp = new byte[values.length];
+    for (int i = 0; i < values.length; i++) {
+      temp[i] = checkNotNull(values[i]);  // checkNotNull for GWT (do not optimize).
+    }
+    return Bytes.asList(temp);
+  }
+
+  public static Test suite() {
+    List<ListTestSuiteBuilder<Byte>> builders =
+        ImmutableList.of(
+            ListTestSuiteBuilder.using(new BytesAsListGenerator())
+                .named("Bytes.asList"),
+
+            ListTestSuiteBuilder.using(new BytesAsListHeadSubListGenerator())
+                .named("Bytes.asList, head subList"),
+
+            ListTestSuiteBuilder.using(new BytesAsListTailSubListGenerator())
+                .named("Bytes.asList, tail subList"),
+
+            ListTestSuiteBuilder.using(new BytesAsListMiddleSubListGenerator())
+                .named("Bytes.asList, middle subList")
+        );
+
+    TestSuite suite = new TestSuite();
+    for (ListTestSuiteBuilder<Byte> builder : builders) {
+      suite.addTest(
+          builder
+          .withFeatures(CollectionSize.ONE,
+                        CollectionSize.SEVERAL,
+                        CollectionFeature.RESTRICTS_ELEMENTS,
+                        ListFeature.SUPPORTS_SET)
+          .createTestSuite());
+    }
+    return suite;
+  }
+
+  // Test generators.  To let the GWT test suite generator access them, they need to be
+  // public named classes with a public default constructor.
+
+  public static final class BytesAsListGenerator extends TestByteListGenerator {
+    @Override protected List<Byte> create(Byte[] elements) {
+      return asList(elements);
+    }
+  }
+
+  public static final class BytesAsListHeadSubListGenerator extends TestByteListGenerator {
+    @Override protected List<Byte> create(Byte[] elements) {
+      Byte[] suffix = {Byte.MIN_VALUE, Byte.MAX_VALUE};
+      Byte[] all = concat(elements, suffix);
+      return asList(all).subList(0, elements.length);
+    }
+  }
+
+  public static final class BytesAsListTailSubListGenerator extends TestByteListGenerator {
+    @Override protected List<Byte> create(Byte[] elements) {
+      Byte[] prefix = {(byte) 86, (byte) 99};
+      Byte[] all = concat(prefix, elements);
+      return asList(all).subList(2, elements.length + 2);
+    }
+  }
+
+  public static final class BytesAsListMiddleSubListGenerator extends TestByteListGenerator {
+    @Override protected List<Byte> create(Byte[] elements) {
+      Byte[] prefix = {Byte.MIN_VALUE, Byte.MAX_VALUE};
+      Byte[] suffix = {(byte) 86, (byte) 99};
+      Byte[] all = concat(concat(prefix, elements), suffix);
+      return asList(all).subList(2, elements.length + 2);
+    }
+  }
+
+  private static Byte[] concat(Byte[] left, Byte[] right) {
+    Byte[] result = new Byte[left.length + right.length];
+    System.arraycopy(left, 0, result, 0, left.length);
+    System.arraycopy(right, 0, result, left.length, right.length);
+    return result;
+  }
+
+  public static abstract class TestByteListGenerator
+      implements TestListGenerator<Byte> {
+    @Override
+    public SampleElements<Byte> samples() {
+      return new SampleBytes();
+    }
+
+    @Override
+    public List<Byte> create(Object... elements) {
+      Byte[] array = new Byte[elements.length];
+      int i = 0;
+      for (Object e : elements) {
+        array[i++] = (Byte) e;
+      }
+      return create(array);
+    }
+
+    /**
+     * Creates a new collection containing the given elements; implement this
+     * method instead of {@link #create(Object...)}.
+     */
+    protected abstract List<Byte> create(Byte[] elements);
+
+    @Override
+    public Byte[] createArray(int length) {
+      return new Byte[length];
+    }
+
+    /** Returns the original element list, unchanged. */
+    @Override
+    public List<Byte> order(List<Byte> insertionOrder) {
+      return insertionOrder;
+    }
+  }
+
+  public static class SampleBytes extends SampleElements<Byte> {
+    public SampleBytes() {
+      super((byte) 0, (byte) 1, (byte) 2, (byte) 3, (byte) 4);
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/primitives/BytesTest.java b/guava-tests/test/com/google/common/primitives/BytesTest.java
new file mode 100644
index 0000000..a30061c
--- /dev/null
+++ b/guava-tests/test/com/google/common/primitives/BytesTest.java
@@ -0,0 +1,245 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.primitives;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.collect.testing.Helpers;
+import com.google.common.testing.NullPointerTester;
+
+import junit.framework.TestCase;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * Unit test for {@link Bytes}.
+ *
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible(emulated = true)
+public class BytesTest extends TestCase {
+  private static final byte[] EMPTY = {};
+  private static final byte[] ARRAY1 = {(byte) 1};
+  private static final byte[] ARRAY234
+      = {(byte) 2, (byte) 3, (byte) 4};
+
+  private static final byte[] VALUES =
+      { Byte.MIN_VALUE, -1, 0, 1, Byte.MAX_VALUE };
+
+  public void testHashCode() {
+    for (byte value : VALUES) {
+      assertEquals(((Byte) value).hashCode(), Bytes.hashCode(value));
+    }
+  }
+
+  public void testContains() {
+    assertFalse(Bytes.contains(EMPTY, (byte) 1));
+    assertFalse(Bytes.contains(ARRAY1, (byte) 2));
+    assertFalse(Bytes.contains(ARRAY234, (byte) 1));
+    assertTrue(Bytes.contains(new byte[] {(byte) -1}, (byte) -1));
+    assertTrue(Bytes.contains(ARRAY234, (byte) 2));
+    assertTrue(Bytes.contains(ARRAY234, (byte) 3));
+    assertTrue(Bytes.contains(ARRAY234, (byte) 4));
+  }
+
+  public void testIndexOf() {
+    assertEquals(-1, Bytes.indexOf(EMPTY, (byte) 1));
+    assertEquals(-1, Bytes.indexOf(ARRAY1, (byte) 2));
+    assertEquals(-1, Bytes.indexOf(ARRAY234, (byte) 1));
+    assertEquals(0, Bytes.indexOf(
+        new byte[] {(byte) -1}, (byte) -1));
+    assertEquals(0, Bytes.indexOf(ARRAY234, (byte) 2));
+    assertEquals(1, Bytes.indexOf(ARRAY234, (byte) 3));
+    assertEquals(2, Bytes.indexOf(ARRAY234, (byte) 4));
+    assertEquals(1, Bytes.indexOf(
+        new byte[] { (byte) 2, (byte) 3, (byte) 2, (byte) 3 },
+        (byte) 3));
+  }
+
+  public void testIndexOf_arrayTarget() {
+    assertEquals(0, Bytes.indexOf(EMPTY, EMPTY));
+    assertEquals(0, Bytes.indexOf(ARRAY234, EMPTY));
+    assertEquals(-1, Bytes.indexOf(EMPTY, ARRAY234));
+    assertEquals(-1, Bytes.indexOf(ARRAY234, ARRAY1));
+    assertEquals(-1, Bytes.indexOf(ARRAY1, ARRAY234));
+    assertEquals(0, Bytes.indexOf(ARRAY1, ARRAY1));
+    assertEquals(0, Bytes.indexOf(ARRAY234, ARRAY234));
+    assertEquals(0, Bytes.indexOf(
+        ARRAY234, new byte[] { (byte) 2, (byte) 3 }));
+    assertEquals(1, Bytes.indexOf(
+        ARRAY234, new byte[] { (byte) 3, (byte) 4 }));
+    assertEquals(1, Bytes.indexOf(ARRAY234, new byte[] { (byte) 3 }));
+    assertEquals(2, Bytes.indexOf(ARRAY234, new byte[] { (byte) 4 }));
+    assertEquals(1, Bytes.indexOf(new byte[] { (byte) 2, (byte) 3,
+        (byte) 3, (byte) 3, (byte) 3 },
+        new byte[] { (byte) 3 }
+    ));
+    assertEquals(2, Bytes.indexOf(
+        new byte[] { (byte) 2, (byte) 3, (byte) 2,
+            (byte) 3, (byte) 4, (byte) 2, (byte) 3},
+        new byte[] { (byte) 2, (byte) 3, (byte) 4}
+    ));
+    assertEquals(1, Bytes.indexOf(
+        new byte[] { (byte) 2, (byte) 2, (byte) 3,
+            (byte) 4, (byte) 2, (byte) 3, (byte) 4},
+        new byte[] { (byte) 2, (byte) 3, (byte) 4}
+    ));
+    assertEquals(-1, Bytes.indexOf(
+        new byte[] { (byte) 4, (byte) 3, (byte) 2},
+        new byte[] { (byte) 2, (byte) 3, (byte) 4}
+    ));
+  }
+
+  public void testLastIndexOf() {
+    assertEquals(-1, Bytes.lastIndexOf(EMPTY, (byte) 1));
+    assertEquals(-1, Bytes.lastIndexOf(ARRAY1, (byte) 2));
+    assertEquals(-1, Bytes.lastIndexOf(ARRAY234, (byte) 1));
+    assertEquals(0, Bytes.lastIndexOf(
+        new byte[] {(byte) -1}, (byte) -1));
+    assertEquals(0, Bytes.lastIndexOf(ARRAY234, (byte) 2));
+    assertEquals(1, Bytes.lastIndexOf(ARRAY234, (byte) 3));
+    assertEquals(2, Bytes.lastIndexOf(ARRAY234, (byte) 4));
+    assertEquals(3, Bytes.lastIndexOf(
+        new byte[] { (byte) 2, (byte) 3, (byte) 2, (byte) 3 },
+        (byte) 3));
+  }
+
+  public void testConcat() {
+    assertTrue(Arrays.equals(EMPTY, Bytes.concat()));
+    assertTrue(Arrays.equals(EMPTY, Bytes.concat(EMPTY)));
+    assertTrue(Arrays.equals(EMPTY, Bytes.concat(EMPTY, EMPTY, EMPTY)));
+    assertTrue(Arrays.equals(ARRAY1, Bytes.concat(ARRAY1)));
+    assertNotSame(ARRAY1, Bytes.concat(ARRAY1));
+    assertTrue(Arrays.equals(ARRAY1, Bytes.concat(EMPTY, ARRAY1, EMPTY)));
+    assertTrue(Arrays.equals(
+        new byte[] {(byte) 1, (byte) 1, (byte) 1},
+        Bytes.concat(ARRAY1, ARRAY1, ARRAY1)));
+    assertTrue(Arrays.equals(
+        new byte[] {(byte) 1, (byte) 2, (byte) 3, (byte) 4},
+        Bytes.concat(ARRAY1, ARRAY234)));
+  }
+
+  public void testEnsureCapacity() {
+    assertSame(EMPTY, Bytes.ensureCapacity(EMPTY, 0, 1));
+    assertSame(ARRAY1, Bytes.ensureCapacity(ARRAY1, 0, 1));
+    assertSame(ARRAY1, Bytes.ensureCapacity(ARRAY1, 1, 1));
+    assertTrue(Arrays.equals(
+        new byte[] {(byte) 1, (byte) 0, (byte) 0},
+        Bytes.ensureCapacity(ARRAY1, 2, 1)));
+  }
+
+  public void testEnsureCapacity_fail() {
+    try {
+      Bytes.ensureCapacity(ARRAY1, -1, 1);
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+    try {
+      // notice that this should even fail when no growth was needed
+      Bytes.ensureCapacity(ARRAY1, 1, -1);
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  public void testToArray() {
+    // need explicit type parameter to avoid javac warning!?
+    List<Byte> none = Arrays.<Byte>asList();
+    assertTrue(Arrays.equals(EMPTY, Bytes.toArray(none)));
+
+    List<Byte> one = Arrays.asList((byte) 1);
+    assertTrue(Arrays.equals(ARRAY1, Bytes.toArray(one)));
+
+    byte[] array = {(byte) 0, (byte) 1, (byte) 0x55};
+
+    List<Byte> three = Arrays.asList((byte) 0, (byte) 1, (byte) 0x55);
+    assertTrue(Arrays.equals(array, Bytes.toArray(three)));
+
+    assertTrue(Arrays.equals(array, Bytes.toArray(Bytes.asList(array))));
+  }
+
+  public void testToArray_threadSafe() {
+    for (int delta : new int[] { +1, 0, -1 }) {
+      for (int i = 0; i < VALUES.length; i++) {
+        List<Byte> list = Bytes.asList(VALUES).subList(0, i);
+        Collection<Byte> misleadingSize =
+            Helpers.misleadingSizeCollection(delta);
+        misleadingSize.addAll(list);
+        byte[] arr = Bytes.toArray(misleadingSize);
+        assertEquals(i, arr.length);
+        for (int j = 0; j < i; j++) {
+          assertEquals(VALUES[j], arr[j]);
+        }
+      }
+    }
+  }
+
+  public void testToArray_withNull() {
+    List<Byte> list = Arrays.asList((byte) 0, (byte) 1, null);
+    try {
+      Bytes.toArray(list);
+      fail();
+    } catch (NullPointerException expected) {
+    }
+  }
+
+  public void testAsList_isAView() {
+    byte[] array = {(byte) 0, (byte) 1};
+    List<Byte> list = Bytes.asList(array);
+    list.set(0, (byte) 2);
+    assertTrue(Arrays.equals(new byte[] {(byte) 2, (byte) 1}, array));
+    array[1] = (byte) 3;
+    assertEquals(Arrays.asList((byte) 2, (byte) 3), list);
+  }
+
+  public void testAsList_toArray_roundTrip() {
+    byte[] array = { (byte) 0, (byte) 1, (byte) 2 };
+    List<Byte> list = Bytes.asList(array);
+    byte[] newArray = Bytes.toArray(list);
+
+    // Make sure it returned a copy
+    list.set(0, (byte) 4);
+    assertTrue(Arrays.equals(
+        new byte[] { (byte) 0, (byte) 1, (byte) 2 }, newArray));
+    newArray[1] = (byte) 5;
+    assertEquals((byte) 1, (byte) list.get(1));
+  }
+
+  // This test stems from a real bug found by andrewk
+  public void testAsList_subList_toArray_roundTrip() {
+    byte[] array = { (byte) 0, (byte) 1, (byte) 2, (byte) 3 };
+    List<Byte> list = Bytes.asList(array);
+    assertTrue(Arrays.equals(new byte[] { (byte) 1, (byte) 2 },
+        Bytes.toArray(list.subList(1, 3))));
+    assertTrue(Arrays.equals(new byte[] {},
+        Bytes.toArray(list.subList(2, 2))));
+  }
+
+  public void testAsListEmpty() {
+    assertSame(Collections.emptyList(), Bytes.asList(EMPTY));
+  }
+
+  @GwtIncompatible("NullPointerTester")
+  public void testNulls() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.setDefault(byte[].class, new byte[0]);
+    tester.testAllPublicStaticMethods(Bytes.class);
+  }
+}
diff --git a/guava-tests/test/com/google/common/primitives/CharArrayAsListTest.java b/guava-tests/test/com/google/common/primitives/CharArrayAsListTest.java
new file mode 100644
index 0000000..23b88b1
--- /dev/null
+++ b/guava-tests/test/com/google/common/primitives/CharArrayAsListTest.java
@@ -0,0 +1,162 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.primitives;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.testing.ListTestSuiteBuilder;
+import com.google.common.collect.testing.SampleElements;
+import com.google.common.collect.testing.TestListGenerator;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.ListFeature;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import java.util.List;
+
+/**
+ * Test suite covering {@link Chars#asList(char[])}.
+ *
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible
+public class CharArrayAsListTest extends TestCase {
+
+  private static List<Character> asList(Character[] values) {
+    char[] temp = new char[values.length];
+    for (int i = 0; i < values.length; i++) {
+      temp[i] = checkNotNull(values[i]);  // checkNotNull for GWT (do not optimize).
+    }
+    return Chars.asList(temp);
+  }
+
+  public static Test suite() {
+    List<ListTestSuiteBuilder<Character>> builders =
+        ImmutableList.of(
+            ListTestSuiteBuilder.using(new CharsAsListGenerator())
+                .named("Chars.asList"),
+
+            ListTestSuiteBuilder.using(new CharsAsListHeadSubListGenerator())
+                .named("Chars.asList, head subList"),
+
+            ListTestSuiteBuilder.using(new CharsAsListTailSubListGenerator())
+                .named("Chars.asList, tail subList"),
+
+            ListTestSuiteBuilder.using(new CharsAsListMiddleSubListGenerator())
+                .named("Chars.asList, middle subList")
+            );
+
+    TestSuite suite = new TestSuite();
+    for (ListTestSuiteBuilder<Character> builder : builders) {
+      suite.addTest(
+          builder
+          .withFeatures(CollectionSize.ONE,
+                        CollectionSize.SEVERAL,
+                        CollectionFeature.RESTRICTS_ELEMENTS,
+                        ListFeature.SUPPORTS_SET)
+          .createTestSuite());
+    }
+    return suite;
+  }
+
+  // Test generators.  To let the GWT test suite generator access them, they need to be
+  // public named classes with a public default constructor.
+
+  public static final class CharsAsListGenerator extends TestCharListGenerator {
+    @Override protected List<Character> create(Character[] elements) {
+      return asList(elements);
+    }
+  }
+
+  public static final class CharsAsListHeadSubListGenerator extends TestCharListGenerator {
+    @Override protected List<Character> create(Character[] elements) {
+      Character[] suffix = {Character.MIN_VALUE, Character.MAX_VALUE};
+      Character[] all = concat(elements, suffix);
+      return asList(all).subList(0, elements.length);
+    }
+  }
+
+  public static final class CharsAsListTailSubListGenerator extends TestCharListGenerator {
+    @Override protected List<Character> create(Character[] elements) {
+      Character[] prefix = {(char) 86, (char) 99};
+      Character[] all = concat(prefix, elements);
+      return asList(all).subList(2, elements.length + 2);
+    }
+  }
+
+  public static final class CharsAsListMiddleSubListGenerator extends TestCharListGenerator {
+    @Override protected List<Character> create(Character[] elements) {
+      Character[] prefix = {Character.MIN_VALUE, Character.MAX_VALUE};
+      Character[] suffix = {(char) 86, (char) 99};
+      Character[] all = concat(concat(prefix, elements), suffix);
+      return asList(all).subList(2, elements.length + 2);
+    }
+  }
+
+  private static Character[] concat(Character[] left, Character[] right) {
+    Character[] result = new Character[left.length + right.length];
+    System.arraycopy(left, 0, result, 0, left.length);
+    System.arraycopy(right, 0, result, left.length, right.length);
+    return result;
+  }
+
+  public static abstract class TestCharListGenerator
+      implements TestListGenerator<Character> {
+    @Override
+    public SampleElements<Character> samples() {
+      return new SampleChars();
+    }
+
+    @Override
+    public List<Character> create(Object... elements) {
+      Character[] array = new Character[elements.length];
+      int i = 0;
+      for (Object e : elements) {
+        array[i++] = (Character) e;
+      }
+      return create(array);
+    }
+
+    /**
+     * Creates a new collection containing the given elements; implement this
+     * method instead of {@link #create(Object...)}.
+     */
+    protected abstract List<Character> create(Character[] elements);
+
+    @Override
+    public Character[] createArray(int length) {
+      return new Character[length];
+    }
+
+    /** Returns the original element list, unchanged. */
+    @Override
+    public List<Character> order(List<Character> insertionOrder) {
+      return insertionOrder;
+    }
+  }
+
+  public static class SampleChars extends SampleElements<Character> {
+    public SampleChars() {
+      super((char) 0, (char) 1, (char) 2, (char) 3, (char) 4);
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/primitives/CharsTest.java b/guava-tests/test/com/google/common/primitives/CharsTest.java
new file mode 100644
index 0000000..adc1898
--- /dev/null
+++ b/guava-tests/test/com/google/common/primitives/CharsTest.java
@@ -0,0 +1,398 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.primitives;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.collect.testing.Helpers;
+import com.google.common.testing.NullPointerTester;
+import com.google.common.testing.SerializableTester;
+
+import junit.framework.TestCase;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+/**
+ * Unit test for {@link Chars}.
+ *
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible(emulated = true)
+@SuppressWarnings("cast") // redundant casts are intentional and harmless
+public class CharsTest extends TestCase {
+  private static final char[] EMPTY = {};
+  private static final char[] ARRAY1 = {(char) 1};
+  private static final char[] ARRAY234
+      = {(char) 2, (char) 3, (char) 4};
+
+  private static final char LEAST = Character.MIN_VALUE;
+  private static final char GREATEST = Character.MAX_VALUE;
+
+  private static final char[] VALUES =
+      {LEAST, 'a', '\u00e0', '\udcaa', GREATEST};
+
+  public void testHashCode() {
+    for (char value : VALUES) {
+      assertEquals(((Character) value).hashCode(), Chars.hashCode(value));
+    }
+  }
+
+  public void testCheckedCast() {
+    for (char value : VALUES) {
+      assertEquals(value, Chars.checkedCast((long) value));
+    }
+    assertCastFails(GREATEST + 1L);
+    assertCastFails(LEAST - 1L);
+    assertCastFails(Long.MAX_VALUE);
+    assertCastFails(Long.MIN_VALUE);
+  }
+
+  public void testSaturatedCast() {
+    for (char value : VALUES) {
+      assertEquals(value, Chars.saturatedCast((long) value));
+    }
+    assertEquals(GREATEST, Chars.saturatedCast(GREATEST + 1L));
+    assertEquals(LEAST, Chars.saturatedCast(LEAST - 1L));
+    assertEquals(GREATEST, Chars.saturatedCast(Long.MAX_VALUE));
+    assertEquals(LEAST, Chars.saturatedCast(Long.MIN_VALUE));
+  }
+
+  private void assertCastFails(long value) {
+    try {
+      Chars.checkedCast(value);
+      fail("Cast to char should have failed: " + value);
+    } catch (IllegalArgumentException ex) {
+      assertTrue(value + " not found in exception text: " + ex.getMessage(),
+          ex.getMessage().contains(String.valueOf(value)));
+    }
+  }
+
+  public void testCompare() {
+    for (char x : VALUES) {
+      for (char y : VALUES) {
+        // note: spec requires only that the sign is the same
+        assertEquals(x + ", " + y,
+                     Character.valueOf(x).compareTo(y),
+                     Chars.compare(x, y));
+      }
+    }
+  }
+
+  public void testContains() {
+    assertFalse(Chars.contains(EMPTY, (char) 1));
+    assertFalse(Chars.contains(ARRAY1, (char) 2));
+    assertFalse(Chars.contains(ARRAY234, (char) 1));
+    assertTrue(Chars.contains(new char[] {(char) -1}, (char) -1));
+    assertTrue(Chars.contains(ARRAY234, (char) 2));
+    assertTrue(Chars.contains(ARRAY234, (char) 3));
+    assertTrue(Chars.contains(ARRAY234, (char) 4));
+  }
+
+  public void testIndexOf() {
+    assertEquals(-1, Chars.indexOf(EMPTY, (char) 1));
+    assertEquals(-1, Chars.indexOf(ARRAY1, (char) 2));
+    assertEquals(-1, Chars.indexOf(ARRAY234, (char) 1));
+    assertEquals(0, Chars.indexOf(
+        new char[] {(char) -1}, (char) -1));
+    assertEquals(0, Chars.indexOf(ARRAY234, (char) 2));
+    assertEquals(1, Chars.indexOf(ARRAY234, (char) 3));
+    assertEquals(2, Chars.indexOf(ARRAY234, (char) 4));
+    assertEquals(1, Chars.indexOf(
+        new char[] { (char) 2, (char) 3, (char) 2, (char) 3 },
+        (char) 3));
+  }
+
+  public void testIndexOf_arrayTarget() {
+    assertEquals(0, Chars.indexOf(EMPTY, EMPTY));
+    assertEquals(0, Chars.indexOf(ARRAY234, EMPTY));
+    assertEquals(-1, Chars.indexOf(EMPTY, ARRAY234));
+    assertEquals(-1, Chars.indexOf(ARRAY234, ARRAY1));
+    assertEquals(-1, Chars.indexOf(ARRAY1, ARRAY234));
+    assertEquals(0, Chars.indexOf(ARRAY1, ARRAY1));
+    assertEquals(0, Chars.indexOf(ARRAY234, ARRAY234));
+    assertEquals(0, Chars.indexOf(
+        ARRAY234, new char[] { (char) 2, (char) 3 }));
+    assertEquals(1, Chars.indexOf(
+        ARRAY234, new char[] { (char) 3, (char) 4 }));
+    assertEquals(1, Chars.indexOf(ARRAY234, new char[] { (char) 3 }));
+    assertEquals(2, Chars.indexOf(ARRAY234, new char[] { (char) 4 }));
+    assertEquals(1, Chars.indexOf(new char[] { (char) 2, (char) 3,
+        (char) 3, (char) 3, (char) 3 },
+        new char[] { (char) 3 }
+    ));
+    assertEquals(2, Chars.indexOf(
+        new char[] { (char) 2, (char) 3, (char) 2,
+            (char) 3, (char) 4, (char) 2, (char) 3},
+        new char[] { (char) 2, (char) 3, (char) 4}
+    ));
+    assertEquals(1, Chars.indexOf(
+        new char[] { (char) 2, (char) 2, (char) 3,
+            (char) 4, (char) 2, (char) 3, (char) 4},
+        new char[] { (char) 2, (char) 3, (char) 4}
+    ));
+    assertEquals(-1, Chars.indexOf(
+        new char[] { (char) 4, (char) 3, (char) 2},
+        new char[] { (char) 2, (char) 3, (char) 4}
+    ));
+  }
+
+  public void testLastIndexOf() {
+    assertEquals(-1, Chars.lastIndexOf(EMPTY, (char) 1));
+    assertEquals(-1, Chars.lastIndexOf(ARRAY1, (char) 2));
+    assertEquals(-1, Chars.lastIndexOf(ARRAY234, (char) 1));
+    assertEquals(0, Chars.lastIndexOf(
+        new char[] {(char) -1}, (char) -1));
+    assertEquals(0, Chars.lastIndexOf(ARRAY234, (char) 2));
+    assertEquals(1, Chars.lastIndexOf(ARRAY234, (char) 3));
+    assertEquals(2, Chars.lastIndexOf(ARRAY234, (char) 4));
+    assertEquals(3, Chars.lastIndexOf(
+        new char[] { (char) 2, (char) 3, (char) 2, (char) 3 },
+        (char) 3));
+  }
+
+  public void testMax_noArgs() {
+    try {
+      Chars.max();
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  public void testMax() {
+    assertEquals(LEAST, Chars.max(LEAST));
+    assertEquals(GREATEST, Chars.max(GREATEST));
+    assertEquals((char) 9, Chars.max(
+        (char) 8, (char) 6, (char) 7,
+        (char) 5, (char) 3, (char) 0, (char) 9));
+  }
+
+  public void testMin_noArgs() {
+    try {
+      Chars.min();
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  public void testMin() {
+    assertEquals(LEAST, Chars.min(LEAST));
+    assertEquals(GREATEST, Chars.min(GREATEST));
+    assertEquals((char) 0, Chars.min(
+        (char) 8, (char) 6, (char) 7,
+        (char) 5, (char) 3, (char) 0, (char) 9));
+  }
+
+  public void testConcat() {
+    assertTrue(Arrays.equals(EMPTY, Chars.concat()));
+    assertTrue(Arrays.equals(EMPTY, Chars.concat(EMPTY)));
+    assertTrue(Arrays.equals(EMPTY, Chars.concat(EMPTY, EMPTY, EMPTY)));
+    assertTrue(Arrays.equals(ARRAY1, Chars.concat(ARRAY1)));
+    assertNotSame(ARRAY1, Chars.concat(ARRAY1));
+    assertTrue(Arrays.equals(ARRAY1, Chars.concat(EMPTY, ARRAY1, EMPTY)));
+    assertTrue(Arrays.equals(
+        new char[] {(char) 1, (char) 1, (char) 1},
+        Chars.concat(ARRAY1, ARRAY1, ARRAY1)));
+    assertTrue(Arrays.equals(
+        new char[] {(char) 1, (char) 2, (char) 3, (char) 4},
+        Chars.concat(ARRAY1, ARRAY234)));
+  }
+
+  @GwtIncompatible("Chars.fromByteArray")
+  public void testFromByteArray() {
+    assertEquals('\u2345', Chars.fromByteArray(
+        new byte[] {0x23, 0x45, (byte) 0xDC}));
+    assertEquals('\uFEDC', Chars.fromByteArray(
+        new byte[] {(byte) 0xFE, (byte) 0xDC}));
+
+    try {
+      Chars.fromByteArray(new byte[Chars.BYTES - 1]);
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  @GwtIncompatible("Chars.fromBytes")
+  public void testFromBytes() {
+    assertEquals('\u2345', Chars.fromBytes((byte) 0x23, (byte) 0x45));
+    assertEquals('\uFEDC', Chars.fromBytes((byte) 0xFE, (byte) 0xDC));
+  }
+
+  @GwtIncompatible("Chars.fromByteArray, Chars.toByteArray")
+  public void testByteArrayRoundTrips() {
+    char c = 0;
+    for (int hi = 0; hi < 256; hi++) {
+      for (int lo = 0; lo < 256; lo++) {
+        char result = Chars.fromByteArray(new byte[]{(byte) hi, (byte) lo});
+        assertEquals(String.format("hi=%s, lo=%s, expected=%s, result=%s",
+            hi, lo, (int) c, (int) result), c, result);
+
+        byte[] bytes = Chars.toByteArray(c);
+        assertEquals((byte) hi, bytes[0]);
+        assertEquals((byte) lo, bytes[1]);
+
+        c++;
+      }
+    }
+    assertEquals((char) 0, c); // sanity check
+
+    try {
+      Chars.fromByteArray(new byte[] {0x11});
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  public void testEnsureCapacity() {
+    assertSame(EMPTY, Chars.ensureCapacity(EMPTY, 0, 1));
+    assertSame(ARRAY1, Chars.ensureCapacity(ARRAY1, 0, 1));
+    assertSame(ARRAY1, Chars.ensureCapacity(ARRAY1, 1, 1));
+    assertTrue(Arrays.equals(
+        new char[] {(char) 1, (char) 0, (char) 0},
+        Chars.ensureCapacity(ARRAY1, 2, 1)));
+  }
+
+  public void testEnsureCapacity_fail() {
+    try {
+      Chars.ensureCapacity(ARRAY1, -1, 1);
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+    try {
+      // notice that this should even fail when no growth was needed
+      Chars.ensureCapacity(ARRAY1, 1, -1);
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  public void testJoin() {
+    assertEquals("", Chars.join(",", EMPTY));
+    assertEquals("1", Chars.join(",", '1'));
+    assertEquals("1,2", Chars.join(",", '1', '2'));
+    assertEquals("123", Chars.join("", '1', '2', '3'));
+  }
+
+  public void testLexicographicalComparator() {
+    List<char[]> ordered = Arrays.asList(
+        new char[] {},
+        new char[] {LEAST},
+        new char[] {LEAST, LEAST},
+        new char[] {LEAST, (char) 1},
+        new char[] {(char) 1},
+        new char[] {(char) 1, LEAST},
+        new char[] {GREATEST, GREATEST - (char) 1},
+        new char[] {GREATEST, GREATEST},
+        new char[] {GREATEST, GREATEST, GREATEST});
+
+    Comparator<char[]> comparator = Chars.lexicographicalComparator();
+    Helpers.testComparator(comparator, ordered);
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testLexicographicalComparatorSerializable() {
+    Comparator<char[]> comparator = Chars.lexicographicalComparator();
+    assertSame(comparator, SerializableTester.reserialize(comparator));
+  }
+
+  public void testToArray() {
+    // need explicit type parameter to avoid javac warning!?
+    List<Character> none = Arrays.<Character>asList();
+    assertTrue(Arrays.equals(EMPTY, Chars.toArray(none)));
+
+    List<Character> one = Arrays.asList((char) 1);
+    assertTrue(Arrays.equals(ARRAY1, Chars.toArray(one)));
+
+    char[] array = {(char) 0, (char) 1, 'A'};
+
+    List<Character> three = Arrays.asList((char) 0, (char) 1, 'A');
+    assertTrue(Arrays.equals(array, Chars.toArray(three)));
+
+    assertTrue(Arrays.equals(array, Chars.toArray(Chars.asList(array))));
+  }
+
+  public void testToArray_threadSafe() {
+    for (int delta : new int[] { +1, 0, -1 }) {
+      for (int i = 0; i < VALUES.length; i++) {
+        List<Character> list = Chars.asList(VALUES).subList(0, i);
+        Collection<Character> misleadingSize =
+            Helpers.misleadingSizeCollection(delta);
+        misleadingSize.addAll(list);
+        char[] arr = Chars.toArray(misleadingSize);
+        assertEquals(i, arr.length);
+        for (int j = 0; j < i; j++) {
+          assertEquals(VALUES[j], arr[j]);
+        }
+      }
+    }
+  }
+
+  public void testToArray_withNull() {
+    List<Character> list = Arrays.asList((char) 0, (char) 1, null);
+    try {
+      Chars.toArray(list);
+      fail();
+    } catch (NullPointerException expected) {
+    }
+  }
+
+  public void testAsList_isAView() {
+    char[] array = {(char) 0, (char) 1};
+    List<Character> list = Chars.asList(array);
+    list.set(0, (char) 2);
+    assertTrue(Arrays.equals(new char[] {(char) 2, (char) 1}, array));
+    array[1] = (char) 3;
+    assertEquals(Arrays.asList((char) 2, (char) 3), list);
+  }
+
+  public void testAsList_toArray_roundTrip() {
+    char[] array = { (char) 0, (char) 1, (char) 2 };
+    List<Character> list = Chars.asList(array);
+    char[] newArray = Chars.toArray(list);
+
+    // Make sure it returned a copy
+    list.set(0, (char) 4);
+    assertTrue(Arrays.equals(
+        new char[] { (char) 0, (char) 1, (char) 2 }, newArray));
+    newArray[1] = (char) 5;
+    assertEquals((char) 1, (char) list.get(1));
+  }
+
+  // This test stems from a real bug found by andrewk
+  public void testAsList_subList_toArray_roundTrip() {
+    char[] array = { (char) 0, (char) 1, (char) 2, (char) 3 };
+    List<Character> list = Chars.asList(array);
+    assertTrue(Arrays.equals(new char[] { (char) 1, (char) 2 },
+        Chars.toArray(list.subList(1, 3))));
+    assertTrue(Arrays.equals(new char[] {},
+        Chars.toArray(list.subList(2, 2))));
+  }
+
+  public void testAsListEmpty() {
+    assertSame(Collections.emptyList(), Chars.asList(EMPTY));
+  }
+
+  @GwtIncompatible("NullPointerTester")
+  public void testNulls() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.setDefault(char[].class, new char[0]);
+    tester.testAllPublicStaticMethods(Chars.class);
+  }
+}
diff --git a/guava-tests/test/com/google/common/primitives/DoubleArrayAsListTest.java b/guava-tests/test/com/google/common/primitives/DoubleArrayAsListTest.java
new file mode 100644
index 0000000..1fa39d7
--- /dev/null
+++ b/guava-tests/test/com/google/common/primitives/DoubleArrayAsListTest.java
@@ -0,0 +1,162 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.primitives;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.testing.ListTestSuiteBuilder;
+import com.google.common.collect.testing.SampleElements;
+import com.google.common.collect.testing.TestListGenerator;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.ListFeature;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import java.util.List;
+
+/**
+ * Test suite covering {@link Doubles#asList(double[])}.
+ *
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible
+public class DoubleArrayAsListTest extends TestCase {
+
+  private static List<Double> asList(Double[] values) {
+    double[] temp = new double[values.length];
+    for (int i = 0; i < values.length; i++) {
+      temp[i] = checkNotNull(values[i]);  // checkNotNull for GWT (do not optimize).
+    }
+    return Doubles.asList(temp);
+  }
+
+  public static Test suite() {
+    List<ListTestSuiteBuilder<Double>> builders =
+        ImmutableList.of(
+            ListTestSuiteBuilder.using(new DoublesAsListGenerator())
+                .named("Doubles.asList"),
+
+            ListTestSuiteBuilder.using(new DoublsAsListHeadSubListGenerator())
+                .named("Doubles.asList, head subList"),
+
+            ListTestSuiteBuilder.using(new DoublesAsListTailSubListGenerator())
+                .named("Doubles.asList, tail subList"),
+
+            ListTestSuiteBuilder.using(new DoublesAsListMiddleSubListGenerator())
+                .named("Doubles.asList, middle subList")
+        );
+
+    TestSuite suite = new TestSuite();
+    for (ListTestSuiteBuilder<Double> builder : builders) {
+      suite.addTest(
+          builder
+          .withFeatures(CollectionSize.ONE,
+                        CollectionSize.SEVERAL,
+                        CollectionFeature.RESTRICTS_ELEMENTS,
+                        ListFeature.SUPPORTS_SET)
+          .createTestSuite());
+    }
+    return suite;
+  }
+
+  // Test generators.  To let the GWT test suite generator access them, they need to be
+  // public named classes with a public default constructor.
+
+  public static final class DoublesAsListGenerator extends TestDoubleListGenerator {
+    @Override protected List<Double> create(Double[] elements) {
+      return asList(elements);
+    }
+  }
+
+  public static final class DoublsAsListHeadSubListGenerator extends TestDoubleListGenerator {
+    @Override protected List<Double> create(Double[] elements) {
+      Double[] suffix = {Double.MIN_VALUE, Double.MAX_VALUE};
+      Double[] all = concat(elements, suffix);
+      return asList(all).subList(0, elements.length);
+    }
+  }
+
+  public static final class DoublesAsListTailSubListGenerator extends TestDoubleListGenerator {
+    @Override protected List<Double> create(Double[] elements) {
+      Double[] prefix = {(double) 86, (double) 99};
+      Double[] all = concat(prefix, elements);
+      return asList(all).subList(2, elements.length + 2);
+    }
+  }
+
+  public static final class DoublesAsListMiddleSubListGenerator extends TestDoubleListGenerator {
+    @Override protected List<Double> create(Double[] elements) {
+      Double[] prefix = {Double.MIN_VALUE, Double.MAX_VALUE};
+      Double[] suffix = {(double) 86, (double) 99};
+      Double[] all = concat(concat(prefix, elements), suffix);
+      return asList(all).subList(2, elements.length + 2);
+    }
+  }
+
+  private static Double[] concat(Double[] left, Double[] right) {
+    Double[] result = new Double[left.length + right.length];
+    System.arraycopy(left, 0, result, 0, left.length);
+    System.arraycopy(right, 0, result, left.length, right.length);
+    return result;
+  }
+
+  public static abstract class TestDoubleListGenerator
+      implements TestListGenerator<Double> {
+    @Override
+    public SampleElements<Double> samples() {
+      return new SampleDoubles();
+    }
+
+    @Override
+    public List<Double> create(Object... elements) {
+      Double[] array = new Double[elements.length];
+      int i = 0;
+      for (Object e : elements) {
+        array[i++] = (Double) e;
+      }
+      return create(array);
+    }
+
+    /**
+     * Creates a new collection containing the given elements; implement this
+     * method instead of {@link #create(Object...)}.
+     */
+    protected abstract List<Double> create(Double[] elements);
+
+    @Override
+    public Double[] createArray(int length) {
+      return new Double[length];
+    }
+
+    /** Returns the original element list, unchanged. */
+    @Override
+    public List<Double> order(List<Double> insertionOrder) {
+      return insertionOrder;
+    }
+  }
+
+  public static class SampleDoubles extends SampleElements<Double> {
+    public SampleDoubles() {
+      super((double) 0, (double) 1, (double) 2, (double) 3, (double) 4);
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/primitives/DoublesTest.java b/guava-tests/test/com/google/common/primitives/DoublesTest.java
new file mode 100644
index 0000000..68fdc59
--- /dev/null
+++ b/guava-tests/test/com/google/common/primitives/DoublesTest.java
@@ -0,0 +1,382 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.primitives;
+
+import static java.lang.Double.NaN;
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.collect.testing.Helpers;
+import com.google.common.testing.NullPointerTester;
+import com.google.common.testing.SerializableTester;
+
+import junit.framework.TestCase;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+/**
+ * Unit test for {@link Doubles}.
+ *
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible(emulated = true)
+@SuppressWarnings("cast") // redundant casts are intentional and harmless
+public class DoublesTest extends TestCase {
+  private static final double[] EMPTY = {};
+  private static final double[] ARRAY1 = {(double) 1};
+  private static final double[] ARRAY234
+      = {(double) 2, (double) 3, (double) 4};
+
+  private static final double LEAST = Double.NEGATIVE_INFINITY;
+  private static final double GREATEST = Double.POSITIVE_INFINITY;
+
+  private static final double[] NUMBERS = new double[] {
+      LEAST, -Double.MAX_VALUE, -1.0, -0.0, 0.0, 1.0, Double.MAX_VALUE, GREATEST,
+      Double.MIN_NORMAL, -Double.MIN_NORMAL,  Double.MIN_VALUE, -Double.MIN_VALUE,
+      Integer.MIN_VALUE, Integer.MAX_VALUE, Long.MIN_VALUE, Long.MAX_VALUE
+  };
+
+  private static final double[] VALUES
+      = Doubles.concat(NUMBERS, new double[] {NaN});
+
+  public void testHashCode() {
+    for (double value : VALUES) {
+      assertEquals(((Double) value).hashCode(), Doubles.hashCode(value));
+    }
+  }
+
+  public void testIsFinite() {
+    for (double value : NUMBERS) {
+      assertEquals(!(Double.isNaN(value) || Double.isInfinite(value)), Doubles.isFinite(value));
+    }
+  }
+
+  public void testCompare() {
+    for (double x : VALUES) {
+      for (double y : VALUES) {
+        // note: spec requires only that the sign is the same
+        assertEquals(x + ", " + y,
+                     Double.valueOf(x).compareTo(y),
+                     Doubles.compare(x, y));
+      }
+    }
+  }
+
+  public void testContains() {
+    assertFalse(Doubles.contains(EMPTY, (double) 1));
+    assertFalse(Doubles.contains(ARRAY1, (double) 2));
+    assertFalse(Doubles.contains(ARRAY234, (double) 1));
+    assertTrue(Doubles.contains(new double[] {(double) -1}, (double) -1));
+    assertTrue(Doubles.contains(ARRAY234, (double) 2));
+    assertTrue(Doubles.contains(ARRAY234, (double) 3));
+    assertTrue(Doubles.contains(ARRAY234, (double) 4));
+
+    for (double value : NUMBERS) {
+      assertTrue("" + value,
+          Doubles.contains(new double[] {5.0, value}, value));
+    }
+    assertFalse(Doubles.contains(new double[] {5.0, NaN}, NaN));
+  }
+
+  public void testIndexOf() {
+    assertEquals(-1, Doubles.indexOf(EMPTY, (double) 1));
+    assertEquals(-1, Doubles.indexOf(ARRAY1, (double) 2));
+    assertEquals(-1, Doubles.indexOf(ARRAY234, (double) 1));
+    assertEquals(0, Doubles.indexOf(
+        new double[] {(double) -1}, (double) -1));
+    assertEquals(0, Doubles.indexOf(ARRAY234, (double) 2));
+    assertEquals(1, Doubles.indexOf(ARRAY234, (double) 3));
+    assertEquals(2, Doubles.indexOf(ARRAY234, (double) 4));
+    assertEquals(1, Doubles.indexOf(
+        new double[] { (double) 2, (double) 3, (double) 2, (double) 3 },
+        (double) 3));
+
+    for (double value : NUMBERS) {
+      assertEquals("" + value,
+          1, Doubles.indexOf(new double[] {5.0, value}, value));
+    }
+    assertEquals(-1, Doubles.indexOf(new double[] {5.0, NaN}, NaN));
+  }
+
+  public void testIndexOf_arrayTarget() {
+    assertEquals(0, Doubles.indexOf(EMPTY, EMPTY));
+    assertEquals(0, Doubles.indexOf(ARRAY234, EMPTY));
+    assertEquals(-1, Doubles.indexOf(EMPTY, ARRAY234));
+    assertEquals(-1, Doubles.indexOf(ARRAY234, ARRAY1));
+    assertEquals(-1, Doubles.indexOf(ARRAY1, ARRAY234));
+    assertEquals(0, Doubles.indexOf(ARRAY1, ARRAY1));
+    assertEquals(0, Doubles.indexOf(ARRAY234, ARRAY234));
+    assertEquals(0, Doubles.indexOf(
+        ARRAY234, new double[] { (double) 2, (double) 3 }));
+    assertEquals(1, Doubles.indexOf(
+        ARRAY234, new double[] { (double) 3, (double) 4 }));
+    assertEquals(1, Doubles.indexOf(ARRAY234, new double[] { (double) 3 }));
+    assertEquals(2, Doubles.indexOf(ARRAY234, new double[] { (double) 4 }));
+    assertEquals(1, Doubles.indexOf(new double[] { (double) 2, (double) 3,
+        (double) 3, (double) 3, (double) 3 },
+        new double[] { (double) 3 }
+    ));
+    assertEquals(2, Doubles.indexOf(
+        new double[] { (double) 2, (double) 3, (double) 2,
+            (double) 3, (double) 4, (double) 2, (double) 3},
+        new double[] { (double) 2, (double) 3, (double) 4}
+    ));
+    assertEquals(1, Doubles.indexOf(
+        new double[] { (double) 2, (double) 2, (double) 3,
+            (double) 4, (double) 2, (double) 3, (double) 4},
+        new double[] { (double) 2, (double) 3, (double) 4}
+    ));
+    assertEquals(-1, Doubles.indexOf(
+        new double[] { (double) 4, (double) 3, (double) 2},
+        new double[] { (double) 2, (double) 3, (double) 4}
+    ));
+
+    for (double value : NUMBERS) {
+      assertEquals("" + value, 1, Doubles.indexOf(
+          new double[] {5.0, value, value, 5.0}, new double[] {value, value}));
+    }
+    assertEquals(-1, Doubles.indexOf(
+        new double[] {5.0, NaN, NaN, 5.0}, new double[] {NaN, NaN}));
+  }
+
+  public void testLastIndexOf() {
+    assertEquals(-1, Doubles.lastIndexOf(EMPTY, (double) 1));
+    assertEquals(-1, Doubles.lastIndexOf(ARRAY1, (double) 2));
+    assertEquals(-1, Doubles.lastIndexOf(ARRAY234, (double) 1));
+    assertEquals(0, Doubles.lastIndexOf(
+        new double[] {(double) -1}, (double) -1));
+    assertEquals(0, Doubles.lastIndexOf(ARRAY234, (double) 2));
+    assertEquals(1, Doubles.lastIndexOf(ARRAY234, (double) 3));
+    assertEquals(2, Doubles.lastIndexOf(ARRAY234, (double) 4));
+    assertEquals(3, Doubles.lastIndexOf(
+        new double[] { (double) 2, (double) 3, (double) 2, (double) 3 },
+        (double) 3));
+
+    for (double value : NUMBERS) {
+      assertEquals("" + value,
+          0, Doubles.lastIndexOf(new double[] {value, 5.0}, value));
+    }
+    assertEquals(-1, Doubles.lastIndexOf(new double[] {NaN, 5.0}, NaN));
+  }
+
+  public void testMax_noArgs() {
+    try {
+      Doubles.max();
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  public void testMax() {
+    assertEquals(LEAST, Doubles.max(LEAST));
+    assertEquals(GREATEST, Doubles.max(GREATEST));
+    assertEquals((double) 9, Doubles.max(
+        (double) 8, (double) 6, (double) 7,
+        (double) 5, (double) 3, (double) 0, (double) 9));
+
+    assertEquals(0.0, Doubles.max(-0.0, 0.0));
+    assertEquals(0.0, Doubles.max(0.0, -0.0));
+    assertEquals(GREATEST, Doubles.max(NUMBERS));
+    assertTrue(Double.isNaN(Doubles.max(VALUES)));
+  }
+
+  public void testMin_noArgs() {
+    try {
+      Doubles.min();
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  public void testMin() {
+    assertEquals(LEAST, Doubles.min(LEAST));
+    assertEquals(GREATEST, Doubles.min(GREATEST));
+    assertEquals((double) 0, Doubles.min(
+        (double) 8, (double) 6, (double) 7,
+        (double) 5, (double) 3, (double) 0, (double) 9));
+
+    assertEquals(-0.0, Doubles.min(-0.0, 0.0));
+    assertEquals(-0.0, Doubles.min(0.0, -0.0));
+    assertEquals(LEAST, Doubles.min(NUMBERS));
+    assertTrue(Double.isNaN(Doubles.min(VALUES)));
+  }
+
+  public void testConcat() {
+    assertTrue(Arrays.equals(EMPTY, Doubles.concat()));
+    assertTrue(Arrays.equals(EMPTY, Doubles.concat(EMPTY)));
+    assertTrue(Arrays.equals(EMPTY, Doubles.concat(EMPTY, EMPTY, EMPTY)));
+    assertTrue(Arrays.equals(ARRAY1, Doubles.concat(ARRAY1)));
+    assertNotSame(ARRAY1, Doubles.concat(ARRAY1));
+    assertTrue(Arrays.equals(ARRAY1, Doubles.concat(EMPTY, ARRAY1, EMPTY)));
+    assertTrue(Arrays.equals(
+        new double[] {(double) 1, (double) 1, (double) 1},
+        Doubles.concat(ARRAY1, ARRAY1, ARRAY1)));
+    assertTrue(Arrays.equals(
+        new double[] {(double) 1, (double) 2, (double) 3, (double) 4},
+        Doubles.concat(ARRAY1, ARRAY234)));
+  }
+
+  public void testEnsureCapacity() {
+    assertSame(EMPTY, Doubles.ensureCapacity(EMPTY, 0, 1));
+    assertSame(ARRAY1, Doubles.ensureCapacity(ARRAY1, 0, 1));
+    assertSame(ARRAY1, Doubles.ensureCapacity(ARRAY1, 1, 1));
+    assertTrue(Arrays.equals(
+        new double[] {(double) 1, (double) 0, (double) 0},
+        Doubles.ensureCapacity(ARRAY1, 2, 1)));
+  }
+
+  public void testEnsureCapacity_fail() {
+    try {
+      Doubles.ensureCapacity(ARRAY1, -1, 1);
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+    try {
+      // notice that this should even fail when no growth was needed
+      Doubles.ensureCapacity(ARRAY1, 1, -1);
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  @GwtIncompatible("Double.toString returns different value in GWT.")
+  public void testJoin() {
+    assertEquals("", Doubles.join(",", EMPTY));
+    assertEquals("1.0", Doubles.join(",", ARRAY1));
+    assertEquals("1.0,2.0", Doubles.join(",", (double) 1, (double) 2));
+    assertEquals("1.02.03.0",
+        Doubles.join("", (double) 1, (double) 2, (double) 3));
+  }
+
+  public void testJoinNonTrivialDoubles() {
+    assertEquals("", Doubles.join(",", EMPTY));
+    assertEquals("1.2", Doubles.join(",", 1.2));
+    assertEquals("1.3,2.4", Doubles.join(",", 1.3, 2.4));
+    assertEquals("1.42.53.6", Doubles.join("", 1.4, 2.5, 3.6));
+  }
+
+  public void testLexicographicalComparator() {
+    List<double[]> ordered = Arrays.asList(
+        new double[] {},
+        new double[] {LEAST},
+        new double[] {LEAST, LEAST},
+        new double[] {LEAST, (double) 1},
+        new double[] {(double) 1},
+        new double[] {(double) 1, LEAST},
+        new double[] {GREATEST, Double.MAX_VALUE},
+        new double[] {GREATEST, GREATEST},
+        new double[] {GREATEST, GREATEST, GREATEST});
+
+    Comparator<double[]> comparator = Doubles.lexicographicalComparator();
+    Helpers.testComparator(comparator, ordered);
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testLexicographicalComparatorSerializable() {
+    Comparator<double[]> comparator = Doubles.lexicographicalComparator();
+    assertSame(comparator, SerializableTester.reserialize(comparator));
+  }
+
+  public void testToArray() {
+    // need explicit type parameter to avoid javac warning!?
+    List<Double> none = Arrays.<Double>asList();
+    assertTrue(Arrays.equals(EMPTY, Doubles.toArray(none)));
+
+    List<Double> one = Arrays.asList((double) 1);
+    assertTrue(Arrays.equals(ARRAY1, Doubles.toArray(one)));
+
+    double[] array = {(double) 0, (double) 1, Math.PI};
+
+    List<Double> three = Arrays.asList((double) 0, (double) 1, Math.PI);
+    assertTrue(Arrays.equals(array, Doubles.toArray(three)));
+
+    assertTrue(Arrays.equals(array, Doubles.toArray(Doubles.asList(array))));
+  }
+
+  public void testToArray_threadSafe() {
+    for (int delta : new int[] { +1, 0, -1 }) {
+      for (int i = 0; i < VALUES.length; i++) {
+        List<Double> list = Doubles.asList(VALUES).subList(0, i);
+        Collection<Double> misleadingSize =
+            Helpers.misleadingSizeCollection(delta);
+        misleadingSize.addAll(list);
+        double[] arr = Doubles.toArray(misleadingSize);
+        assertEquals(i, arr.length);
+        for (int j = 0; j < i; j++) {
+          assertEquals(VALUES[j], arr[j]);
+        }
+      }
+    }
+  }
+
+  public void testToArray_withNull() {
+    List<Double> list = Arrays.asList((double) 0, (double) 1, null);
+    try {
+      Doubles.toArray(list);
+      fail();
+    } catch (NullPointerException expected) {
+    }
+  }
+
+  public void testAsList_isAView() {
+    double[] array = {(double) 0, (double) 1};
+    List<Double> list = Doubles.asList(array);
+    list.set(0, (double) 2);
+    assertTrue(Arrays.equals(new double[] {(double) 2, (double) 1}, array));
+    array[1] = (double) 3;
+    ASSERT.that(list).hasContentsInOrder((double) 2, (double) 3);
+  }
+
+  public void testAsList_toArray_roundTrip() {
+    double[] array = { (double) 0, (double) 1, (double) 2 };
+    List<Double> list = Doubles.asList(array);
+    double[] newArray = Doubles.toArray(list);
+
+    // Make sure it returned a copy
+    list.set(0, (double) 4);
+    assertTrue(Arrays.equals(
+        new double[] { (double) 0, (double) 1, (double) 2 }, newArray));
+    newArray[1] = (double) 5;
+    assertEquals((double) 1, (double) list.get(1));
+  }
+
+  // This test stems from a real bug found by andrewk
+  public void testAsList_subList_toArray_roundTrip() {
+    double[] array = { (double) 0, (double) 1, (double) 2, (double) 3 };
+    List<Double> list = Doubles.asList(array);
+    assertTrue(Arrays.equals(new double[] { (double) 1, (double) 2 },
+        Doubles.toArray(list.subList(1, 3))));
+    assertTrue(Arrays.equals(new double[] {},
+        Doubles.toArray(list.subList(2, 2))));
+  }
+
+  public void testAsListEmpty() {
+    assertSame(Collections.emptyList(), Doubles.asList(EMPTY));
+  }
+
+  @GwtIncompatible("NullPointerTester")
+  public void testNulls() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.setDefault(double[].class, new double[0]);
+    tester.testAllPublicStaticMethods(Doubles.class);
+  }
+}
diff --git a/guava-tests/test/com/google/common/primitives/FloatArrayAsListTest.java b/guava-tests/test/com/google/common/primitives/FloatArrayAsListTest.java
new file mode 100644
index 0000000..ded5a77
--- /dev/null
+++ b/guava-tests/test/com/google/common/primitives/FloatArrayAsListTest.java
@@ -0,0 +1,162 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.primitives;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.testing.ListTestSuiteBuilder;
+import com.google.common.collect.testing.SampleElements;
+import com.google.common.collect.testing.TestListGenerator;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.ListFeature;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import java.util.List;
+
+/**
+ * Test suite covering {@link Floats#asList(float[])})}.
+ *
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible
+public class FloatArrayAsListTest extends TestCase {
+
+  private static List<Float> asList(Float[] values) {
+    float[] temp = new float[values.length];
+    for (int i = 0; i < values.length; i++) {
+      temp[i] = checkNotNull(values[i]);  // checkNotNull for GWT (do not optimize).
+    }
+    return Floats.asList(temp);
+  }
+
+  public static Test suite() {
+    List<ListTestSuiteBuilder<Float>> builders =
+        ImmutableList.of(
+            ListTestSuiteBuilder.using(new FloatsAsListGenerator())
+                .named("Floats.asList"),
+
+            ListTestSuiteBuilder.using(new FloatsAsListHeadSubListGenerator())
+                .named("Floats.asList, head subList"),
+
+            ListTestSuiteBuilder.using(new FloatsAsListTailSubListGenerator())
+                .named("Floats.asList, tail subList"),
+
+            ListTestSuiteBuilder.using(new FloatsAsListMiddleSubListGenerator())
+                .named("Floats.asList, middle subList")
+            );
+
+    TestSuite suite = new TestSuite();
+    for (ListTestSuiteBuilder<Float> builder : builders) {
+      suite.addTest(
+          builder
+          .withFeatures(CollectionSize.ONE,
+                        CollectionSize.SEVERAL,
+                        CollectionFeature.RESTRICTS_ELEMENTS,
+                        ListFeature.SUPPORTS_SET)
+          .createTestSuite());
+    }
+    return suite;
+  }
+
+  // Test generators.  To let the GWT test suite generator access them, they need to be
+  // public named classes with a public default constructor.
+
+  public static final class FloatsAsListGenerator extends TestFloatListGenerator {
+    @Override protected List<Float> create(Float[] elements) {
+      return asList(elements);
+    }
+  }
+
+  public static final class FloatsAsListHeadSubListGenerator extends TestFloatListGenerator {
+    @Override protected List<Float> create(Float[] elements) {
+      Float[] suffix = {Float.MIN_VALUE, Float.MAX_VALUE};
+      Float[] all = concat(elements, suffix);
+      return asList(all).subList(0, elements.length);
+    }
+  }
+
+  public static final class FloatsAsListTailSubListGenerator extends TestFloatListGenerator {
+    @Override protected List<Float> create(Float[] elements) {
+      Float[] prefix = {(float) 86, (float) 99};
+      Float[] all = concat(prefix, elements);
+      return asList(all).subList(2, elements.length + 2);
+    }
+  }
+
+  public static final class FloatsAsListMiddleSubListGenerator extends TestFloatListGenerator {
+    @Override protected List<Float> create(Float[] elements) {
+      Float[] prefix = {Float.MIN_VALUE, Float.MAX_VALUE};
+      Float[] suffix = {(float) 86, (float) 99};
+      Float[] all = concat(concat(prefix, elements), suffix);
+      return asList(all).subList(2, elements.length + 2);
+    }
+  }
+
+  private static Float[] concat(Float[] left, Float[] right) {
+    Float[] result = new Float[left.length + right.length];
+    System.arraycopy(left, 0, result, 0, left.length);
+    System.arraycopy(right, 0, result, left.length, right.length);
+    return result;
+  }
+
+  public static abstract class TestFloatListGenerator
+      implements TestListGenerator<Float> {
+    @Override
+    public SampleElements<Float> samples() {
+      return new SampleFloats();
+    }
+
+    @Override
+    public List<Float> create(Object... elements) {
+      Float[] array = new Float[elements.length];
+      int i = 0;
+      for (Object e : elements) {
+        array[i++] = (Float) e;
+      }
+      return create(array);
+    }
+
+    /**
+     * Creates a new collection containing the given elements; implement this
+     * method instead of {@link #create(Object...)}.
+     */
+    protected abstract List<Float> create(Float[] elements);
+
+    @Override
+    public Float[] createArray(int length) {
+      return new Float[length];
+    }
+
+    /** Returns the original element list, unchanged. */
+    @Override
+    public List<Float> order(List<Float> insertionOrder) {
+      return insertionOrder;
+    }
+  }
+
+  public static class SampleFloats extends SampleElements<Float> {
+    public SampleFloats() {
+      super((float) 0, (float) 1, (float) 2, (float) 3, (float) 4);
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/primitives/FloatsTest.java b/guava-tests/test/com/google/common/primitives/FloatsTest.java
new file mode 100644
index 0000000..55f5bbc
--- /dev/null
+++ b/guava-tests/test/com/google/common/primitives/FloatsTest.java
@@ -0,0 +1,374 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.primitives;
+
+import static java.lang.Float.NaN;
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.collect.testing.Helpers;
+import com.google.common.testing.NullPointerTester;
+import com.google.common.testing.SerializableTester;
+
+import junit.framework.TestCase;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+/**
+ * Unit test for {@link Floats}.
+ *
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible(emulated = true)
+@SuppressWarnings("cast") // redundant casts are intentional and harmless
+public class FloatsTest extends TestCase {
+  private static final float[] EMPTY = {};
+  private static final float[] ARRAY1 = {(float) 1};
+  private static final float[] ARRAY234
+      = {(float) 2, (float) 3, (float) 4};
+
+  private static final float LEAST = Float.NEGATIVE_INFINITY;
+  private static final float GREATEST = Float.POSITIVE_INFINITY;
+
+  private static final float[] NUMBERS = new float[] {
+      LEAST, -Float.MAX_VALUE, -1f, -0f, 0f, 1f, Float.MAX_VALUE, GREATEST,
+      Float.MIN_NORMAL, -Float.MIN_NORMAL,  Float.MIN_VALUE, -Float.MIN_VALUE,
+      Integer.MIN_VALUE, Integer.MAX_VALUE, Long.MIN_VALUE, Long.MAX_VALUE
+  };
+
+  private static final float[] VALUES
+      = Floats.concat(NUMBERS, new float[] {NaN});
+
+  public void testHashCode() {
+    for (float value : VALUES) {
+      assertEquals(((Float) value).hashCode(), Floats.hashCode(value));
+    }
+  }
+
+  public void testIsFinite() {
+    for (float value : NUMBERS) {
+      assertEquals(!(Float.isInfinite(value) || Float.isNaN(value)), Floats.isFinite(value));
+    }
+  }
+
+  public void testCompare() {
+    for (float x : VALUES) {
+      for (float y : VALUES) {
+        // note: spec requires only that the sign is the same
+        assertEquals(x + ", " + y,
+                     Float.valueOf(x).compareTo(y),
+                     Floats.compare(x, y));
+      }
+    }
+  }
+
+  public void testContains() {
+    assertFalse(Floats.contains(EMPTY, (float) 1));
+    assertFalse(Floats.contains(ARRAY1, (float) 2));
+    assertFalse(Floats.contains(ARRAY234, (float) 1));
+    assertTrue(Floats.contains(new float[] {(float) -1}, (float) -1));
+    assertTrue(Floats.contains(ARRAY234, (float) 2));
+    assertTrue(Floats.contains(ARRAY234, (float) 3));
+    assertTrue(Floats.contains(ARRAY234, (float) 4));
+
+    for (float value : NUMBERS) {
+      assertTrue("" + value, Floats.contains(new float[] {5f, value}, value));
+    }
+    assertFalse(Floats.contains(new float[] {5f, NaN}, NaN));
+  }
+
+  public void testIndexOf() {
+    assertEquals(-1, Floats.indexOf(EMPTY, (float) 1));
+    assertEquals(-1, Floats.indexOf(ARRAY1, (float) 2));
+    assertEquals(-1, Floats.indexOf(ARRAY234, (float) 1));
+    assertEquals(0, Floats.indexOf(
+        new float[] {(float) -1}, (float) -1));
+    assertEquals(0, Floats.indexOf(ARRAY234, (float) 2));
+    assertEquals(1, Floats.indexOf(ARRAY234, (float) 3));
+    assertEquals(2, Floats.indexOf(ARRAY234, (float) 4));
+    assertEquals(1, Floats.indexOf(
+        new float[] { (float) 2, (float) 3, (float) 2, (float) 3 },
+        (float) 3));
+
+    for (float value : NUMBERS) {
+      assertEquals("" + value, 1,
+          Floats.indexOf(new float[] {5f, value}, value));
+    }
+    assertEquals(-1, Floats.indexOf(new float[] {5f, NaN}, NaN));
+  }
+
+  public void testIndexOf_arrayTarget() {
+    assertEquals(0, Floats.indexOf(EMPTY, EMPTY));
+    assertEquals(0, Floats.indexOf(ARRAY234, EMPTY));
+    assertEquals(-1, Floats.indexOf(EMPTY, ARRAY234));
+    assertEquals(-1, Floats.indexOf(ARRAY234, ARRAY1));
+    assertEquals(-1, Floats.indexOf(ARRAY1, ARRAY234));
+    assertEquals(0, Floats.indexOf(ARRAY1, ARRAY1));
+    assertEquals(0, Floats.indexOf(ARRAY234, ARRAY234));
+    assertEquals(0, Floats.indexOf(
+        ARRAY234, new float[] { (float) 2, (float) 3 }));
+    assertEquals(1, Floats.indexOf(
+        ARRAY234, new float[] { (float) 3, (float) 4 }));
+    assertEquals(1, Floats.indexOf(ARRAY234, new float[] { (float) 3 }));
+    assertEquals(2, Floats.indexOf(ARRAY234, new float[] { (float) 4 }));
+    assertEquals(1, Floats.indexOf(new float[] { (float) 2, (float) 3,
+        (float) 3, (float) 3, (float) 3 },
+        new float[] { (float) 3 }
+    ));
+    assertEquals(2, Floats.indexOf(
+        new float[] { (float) 2, (float) 3, (float) 2,
+            (float) 3, (float) 4, (float) 2, (float) 3},
+        new float[] { (float) 2, (float) 3, (float) 4}
+    ));
+    assertEquals(1, Floats.indexOf(
+        new float[] { (float) 2, (float) 2, (float) 3,
+            (float) 4, (float) 2, (float) 3, (float) 4},
+        new float[] { (float) 2, (float) 3, (float) 4}
+    ));
+    assertEquals(-1, Floats.indexOf(
+        new float[] { (float) 4, (float) 3, (float) 2},
+        new float[] { (float) 2, (float) 3, (float) 4}
+    ));
+
+    for (float value : NUMBERS) {
+      assertEquals("" + value, 1, Floats.indexOf(
+          new float[] {5f, value, value, 5f}, new float[] {value, value}));
+    }
+    assertEquals(-1, Floats.indexOf(
+        new float[] {5f, NaN, NaN, 5f}, new float[] {NaN, NaN}));
+  }
+
+  public void testLastIndexOf() {
+    assertEquals(-1, Floats.lastIndexOf(EMPTY, (float) 1));
+    assertEquals(-1, Floats.lastIndexOf(ARRAY1, (float) 2));
+    assertEquals(-1, Floats.lastIndexOf(ARRAY234, (float) 1));
+    assertEquals(0, Floats.lastIndexOf(
+        new float[] {(float) -1}, (float) -1));
+    assertEquals(0, Floats.lastIndexOf(ARRAY234, (float) 2));
+    assertEquals(1, Floats.lastIndexOf(ARRAY234, (float) 3));
+    assertEquals(2, Floats.lastIndexOf(ARRAY234, (float) 4));
+    assertEquals(3, Floats.lastIndexOf(
+        new float[] { (float) 2, (float) 3, (float) 2, (float) 3 },
+        (float) 3));
+
+    for (float value : NUMBERS) {
+      assertEquals("" + value,
+          0, Floats.lastIndexOf(new float[] {value, 5f}, value));
+    }
+    assertEquals(-1, Floats.lastIndexOf(new float[] {NaN, 5f}, NaN));
+  }
+
+  public void testMax_noArgs() {
+    try {
+      Floats.max();
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  public void testMax() {
+    assertEquals(GREATEST, Floats.max(GREATEST));
+    assertEquals(LEAST, Floats.max(LEAST));
+    assertEquals((float) 9, Floats.max(
+        (float) 8, (float) 6, (float) 7,
+        (float) 5, (float) 3, (float) 0, (float) 9));
+
+    assertEquals(0f, Floats.max(-0f, 0f));
+    assertEquals(0f, Floats.max(0f, -0f));
+    assertEquals(GREATEST, Floats.max(NUMBERS));
+    assertTrue(Float.isNaN(Floats.max(VALUES)));
+  }
+
+  public void testMin_noArgs() {
+    try {
+      Floats.min();
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  public void testMin() {
+    assertEquals(LEAST, Floats.min(LEAST));
+    assertEquals(GREATEST, Floats.min(GREATEST));
+    assertEquals((float) 0, Floats.min(
+        (float) 8, (float) 6, (float) 7,
+        (float) 5, (float) 3, (float) 0, (float) 9));
+
+    assertEquals(-0f, Floats.min(-0f, 0f));
+    assertEquals(-0f, Floats.min(0f, -0f));
+    assertEquals(LEAST, Floats.min(NUMBERS));
+    assertTrue(Float.isNaN(Floats.min(VALUES)));
+  }
+
+  public void testConcat() {
+    assertTrue(Arrays.equals(EMPTY, Floats.concat()));
+    assertTrue(Arrays.equals(EMPTY, Floats.concat(EMPTY)));
+    assertTrue(Arrays.equals(EMPTY, Floats.concat(EMPTY, EMPTY, EMPTY)));
+    assertTrue(Arrays.equals(ARRAY1, Floats.concat(ARRAY1)));
+    assertNotSame(ARRAY1, Floats.concat(ARRAY1));
+    assertTrue(Arrays.equals(ARRAY1, Floats.concat(EMPTY, ARRAY1, EMPTY)));
+    assertTrue(Arrays.equals(
+        new float[] {(float) 1, (float) 1, (float) 1},
+        Floats.concat(ARRAY1, ARRAY1, ARRAY1)));
+    assertTrue(Arrays.equals(
+        new float[] {(float) 1, (float) 2, (float) 3, (float) 4},
+        Floats.concat(ARRAY1, ARRAY234)));
+  }
+
+  public void testEnsureCapacity() {
+    assertSame(EMPTY, Floats.ensureCapacity(EMPTY, 0, 1));
+    assertSame(ARRAY1, Floats.ensureCapacity(ARRAY1, 0, 1));
+    assertSame(ARRAY1, Floats.ensureCapacity(ARRAY1, 1, 1));
+    assertTrue(Arrays.equals(
+        new float[] {(float) 1, (float) 0, (float) 0},
+        Floats.ensureCapacity(ARRAY1, 2, 1)));
+  }
+
+  public void testEnsureCapacity_fail() {
+    try {
+      Floats.ensureCapacity(ARRAY1, -1, 1);
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+    try {
+      // notice that this should even fail when no growth was needed
+      Floats.ensureCapacity(ARRAY1, 1, -1);
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  @GwtIncompatible("Float.toString returns different value in GWT.")
+  public void testJoin() {
+    assertEquals("", Floats.join(",", EMPTY));
+    assertEquals("1.0", Floats.join(",", ARRAY1));
+    assertEquals("1.0,2.0", Floats.join(",", (float) 1, (float) 2));
+    assertEquals("1.02.03.0",
+        Floats.join("", (float) 1, (float) 2, (float) 3));
+  }
+
+  public void testLexicographicalComparator() {
+    List<float[]> ordered = Arrays.asList(
+        new float[] {},
+        new float[] {LEAST},
+        new float[] {LEAST, LEAST},
+        new float[] {LEAST, (float) 1},
+        new float[] {(float) 1},
+        new float[] {(float) 1, LEAST},
+        new float[] {GREATEST, Float.MAX_VALUE},
+        new float[] {GREATEST, GREATEST},
+        new float[] {GREATEST, GREATEST, GREATEST});
+
+    Comparator<float[]> comparator = Floats.lexicographicalComparator();
+    Helpers.testComparator(comparator, ordered);
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testLexicographicalComparatorSerializable() {
+    Comparator<float[]> comparator = Floats.lexicographicalComparator();
+    assertSame(comparator, SerializableTester.reserialize(comparator));
+  }
+
+  public void testToArray() {
+    // need explicit type parameter to avoid javac warning!?
+    List<Float> none = Arrays.<Float>asList();
+    assertTrue(Arrays.equals(EMPTY, Floats.toArray(none)));
+
+    List<Float> one = Arrays.asList((float) 1);
+    assertTrue(Arrays.equals(ARRAY1, Floats.toArray(one)));
+
+    float[] array = {(float) 0, (float) 1, (float) 3};
+
+    List<Float> three = Arrays.asList((float) 0, (float) 1, (float) 3);
+    assertTrue(Arrays.equals(array, Floats.toArray(three)));
+
+    assertTrue(Arrays.equals(array, Floats.toArray(Floats.asList(array))));
+  }
+
+  public void testToArray_threadSafe() {
+    for (int delta : new int[] { +1, 0, -1 }) {
+      for (int i = 0; i < VALUES.length; i++) {
+        List<Float> list = Floats.asList(VALUES).subList(0, i);
+        Collection<Float> misleadingSize =
+            Helpers.misleadingSizeCollection(delta);
+        misleadingSize.addAll(list);
+        float[] arr = Floats.toArray(misleadingSize);
+        assertEquals(i, arr.length);
+        for (int j = 0; j < i; j++) {
+          assertEquals(VALUES[j], arr[j]);
+        }
+      }
+    }
+  }
+
+  public void testToArray_withNull() {
+    List<Float> list = Arrays.asList((float) 0, (float) 1, null);
+    try {
+      Floats.toArray(list);
+      fail();
+    } catch (NullPointerException expected) {
+    }
+  }
+
+  public void testAsList_isAView() {
+    float[] array = {(float) 0, (float) 1};
+    List<Float> list = Floats.asList(array);
+    list.set(0, (float) 2);
+    assertTrue(Arrays.equals(new float[] {(float) 2, (float) 1}, array));
+    array[1] = (float) 3;
+    ASSERT.that(list).hasContentsInOrder((float) 2, (float) 3);
+  }
+
+  public void testAsList_toArray_roundTrip() {
+    float[] array = { (float) 0, (float) 1, (float) 2 };
+    List<Float> list = Floats.asList(array);
+    float[] newArray = Floats.toArray(list);
+
+    // Make sure it returned a copy
+    list.set(0, (float) 4);
+    assertTrue(Arrays.equals(
+        new float[] { (float) 0, (float) 1, (float) 2 }, newArray));
+    newArray[1] = (float) 5;
+    assertEquals((float) 1, (float) list.get(1));
+  }
+
+  // This test stems from a real bug found by andrewk
+  public void testAsList_subList_toArray_roundTrip() {
+    float[] array = { (float) 0, (float) 1, (float) 2, (float) 3 };
+    List<Float> list = Floats.asList(array);
+    assertTrue(Arrays.equals(new float[] { (float) 1, (float) 2 },
+        Floats.toArray(list.subList(1, 3))));
+    assertTrue(Arrays.equals(new float[] {},
+        Floats.toArray(list.subList(2, 2))));
+  }
+
+  public void testAsListEmpty() {
+    assertSame(Collections.emptyList(), Floats.asList(EMPTY));
+  }
+
+  @GwtIncompatible("NullPointerTester")
+  public void testNulls() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.setDefault(float[].class, new float[0]);
+    tester.testAllPublicStaticMethods(Floats.class);
+  }
+}
diff --git a/guava-tests/test/com/google/common/primitives/IntArrayAsListTest.java b/guava-tests/test/com/google/common/primitives/IntArrayAsListTest.java
new file mode 100644
index 0000000..d384149
--- /dev/null
+++ b/guava-tests/test/com/google/common/primitives/IntArrayAsListTest.java
@@ -0,0 +1,162 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.primitives;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.testing.ListTestSuiteBuilder;
+import com.google.common.collect.testing.SampleElements;
+import com.google.common.collect.testing.TestListGenerator;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.ListFeature;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import java.util.List;
+
+/**
+ * Test suite covering {@link Ints#asList(int[])}.
+ *
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible
+@SuppressWarnings("cast") // redundant casts are intentional and harmless
+public class IntArrayAsListTest extends TestCase {
+
+  private static List<Integer> asList(Integer[] values) {
+    int[] temp = new int[values.length];
+    for (int i = 0; i < values.length; i++) {
+      temp[i] = checkNotNull(values[i]);  // checkNotNull for GWT (do not optimize).
+    }
+    return Ints.asList(temp);
+  }
+
+  public static Test suite() {
+    List<ListTestSuiteBuilder<Integer>> builders =
+        ImmutableList.of(
+            ListTestSuiteBuilder.using(new IntsAsListGenerator())
+                .named("Ints.asList"),
+
+            ListTestSuiteBuilder.using(new IntsAsListHeadSubListGenerator())
+                .named("Ints.asList, head subList"),
+
+            ListTestSuiteBuilder.using(new IntsAsListTailSubListGenerator())
+                .named("Ints.asList, tail subList"),
+
+            ListTestSuiteBuilder.using(new IntsAsListMiddleSubListGenerator())
+                .named("Ints.asList, middle subList")
+        );
+
+    TestSuite suite = new TestSuite();
+    for (ListTestSuiteBuilder<Integer> builder : builders) {
+      suite.addTest(
+          builder
+          .withFeatures(CollectionSize.ONE,
+                        CollectionSize.SEVERAL,
+                        CollectionFeature.RESTRICTS_ELEMENTS,
+                        ListFeature.SUPPORTS_SET)
+          .createTestSuite());
+    }
+    return suite;
+  }
+
+  // Test generators.  To let the GWT test suite generator access them, they need to be
+  // public named classes with a public default constructor.
+
+  public static final class IntsAsListGenerator extends TestIntegerListGenerator {
+    @Override protected List<Integer> create(Integer[] elements) {
+      return asList(elements);
+    }
+  }
+
+  public static final class IntsAsListHeadSubListGenerator extends TestIntegerListGenerator {
+    @Override protected List<Integer> create(Integer[] elements) {
+      Integer[] suffix = {Integer.MIN_VALUE, Integer.MAX_VALUE};
+      Integer[] all = concat(elements, suffix);
+      return asList(all).subList(0, elements.length);
+    }
+  }
+
+  public static final class IntsAsListTailSubListGenerator extends TestIntegerListGenerator {
+    @Override protected List<Integer> create(Integer[] elements) {
+      Integer[] prefix = {(int) 86, (int) 99};
+      Integer[] all = concat(prefix, elements);
+      return asList(all).subList(2, elements.length + 2);
+    }
+  }
+
+  public static final class IntsAsListMiddleSubListGenerator extends TestIntegerListGenerator {
+    @Override protected List<Integer> create(Integer[] elements) {
+      Integer[] prefix = {Integer.MIN_VALUE, Integer.MAX_VALUE};
+      Integer[] suffix = {(int) 86, (int) 99};
+      Integer[] all = concat(concat(prefix, elements), suffix);
+      return asList(all).subList(2, elements.length + 2);
+    }
+  }
+
+  private static Integer[] concat(Integer[] left, Integer[] right) {
+    Integer[] result = new Integer[left.length + right.length];
+    System.arraycopy(left, 0, result, 0, left.length);
+    System.arraycopy(right, 0, result, left.length, right.length);
+    return result;
+  }
+
+  public static abstract class TestIntegerListGenerator
+      implements TestListGenerator<Integer> {
+    @Override
+    public SampleElements<Integer> samples() {
+      return new SampleIntegers();
+    }
+
+    @Override
+    public List<Integer> create(Object... elements) {
+      Integer[] array = new Integer[elements.length];
+      int i = 0;
+      for (Object e : elements) {
+        array[i++] = (Integer) e;
+      }
+      return create(array);
+    }
+
+    /**
+     * Creates a new collection containing the given elements; implement this
+     * method instead of {@link #create(Object...)}.
+     */
+    protected abstract List<Integer> create(Integer[] elements);
+
+    @Override public Integer[] createArray(int length) {
+      return new Integer[length];
+    }
+
+    /** Returns the original element list, unchanged. */
+    @Override
+    public List<Integer> order(List<Integer> insertionOrder) {
+      return insertionOrder;
+    }
+  }
+
+  public static class SampleIntegers extends SampleElements<Integer> {
+    public SampleIntegers() {
+      super((int) 0, (int) 1, (int) 2, (int) 3, (int) 4);
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/primitives/IntsTest.java b/guava-tests/test/com/google/common/primitives/IntsTest.java
new file mode 100644
index 0000000..8265b80
--- /dev/null
+++ b/guava-tests/test/com/google/common/primitives/IntsTest.java
@@ -0,0 +1,430 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.primitives;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.collect.testing.Helpers;
+import com.google.common.testing.NullPointerTester;
+import com.google.common.testing.SerializableTester;
+
+import junit.framework.TestCase;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Random;
+
+/**
+ * Unit test for {@link Ints}.
+ *
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible(emulated = true)
+@SuppressWarnings("cast") // redundant casts are intentional and harmless
+public class IntsTest extends TestCase {
+  private static final int[] EMPTY = {};
+  private static final int[] ARRAY1 = {(int) 1};
+  private static final int[] ARRAY234
+      = {(int) 2, (int) 3, (int) 4};
+
+  private static final int LEAST = Integer.MIN_VALUE;
+  private static final int GREATEST = Integer.MAX_VALUE;
+
+  private static final int[] VALUES =
+      { LEAST, (int) -1, (int) 0, (int) 1, GREATEST };
+
+  public void testHashCode() {
+    for (int value : VALUES) {
+      assertEquals(((Integer) value).hashCode(), Ints.hashCode(value));
+    }
+  }
+
+  public void testCheckedCast() {
+    for (int value : VALUES) {
+      assertEquals(value, Ints.checkedCast((long) value));
+    }
+    assertCastFails(GREATEST + 1L);
+    assertCastFails(LEAST - 1L);
+    assertCastFails(Long.MAX_VALUE);
+    assertCastFails(Long.MIN_VALUE);
+  }
+
+  public void testSaturatedCast() {
+    for (int value : VALUES) {
+      assertEquals(value, Ints.saturatedCast((long) value));
+    }
+    assertEquals(GREATEST, Ints.saturatedCast(GREATEST + 1L));
+    assertEquals(LEAST, Ints.saturatedCast(LEAST - 1L));
+    assertEquals(GREATEST, Ints.saturatedCast(Long.MAX_VALUE));
+    assertEquals(LEAST, Ints.saturatedCast(Long.MIN_VALUE));
+  }
+
+  private void assertCastFails(long value) {
+    try {
+      Ints.checkedCast(value);
+      fail("Cast to int should have failed: " + value);
+    } catch (IllegalArgumentException ex) {
+      assertTrue(value + " not found in exception text: " + ex.getMessage(),
+          ex.getMessage().contains(String.valueOf(value)));
+    }
+  }
+
+  public void testCompare() {
+    for (int x : VALUES) {
+      for (int y : VALUES) {
+        // note: spec requires only that the sign is the same
+        assertEquals(x + ", " + y,
+                     Integer.valueOf(x).compareTo(y),
+                     Ints.compare(x, y));
+      }
+    }
+  }
+
+  public void testContains() {
+    assertFalse(Ints.contains(EMPTY, (int) 1));
+    assertFalse(Ints.contains(ARRAY1, (int) 2));
+    assertFalse(Ints.contains(ARRAY234, (int) 1));
+    assertTrue(Ints.contains(new int[] {(int) -1}, (int) -1));
+    assertTrue(Ints.contains(ARRAY234, (int) 2));
+    assertTrue(Ints.contains(ARRAY234, (int) 3));
+    assertTrue(Ints.contains(ARRAY234, (int) 4));
+  }
+
+  public void testIndexOf() {
+    assertEquals(-1, Ints.indexOf(EMPTY, (int) 1));
+    assertEquals(-1, Ints.indexOf(ARRAY1, (int) 2));
+    assertEquals(-1, Ints.indexOf(ARRAY234, (int) 1));
+    assertEquals(0, Ints.indexOf(
+        new int[] {(int) -1}, (int) -1));
+    assertEquals(0, Ints.indexOf(ARRAY234, (int) 2));
+    assertEquals(1, Ints.indexOf(ARRAY234, (int) 3));
+    assertEquals(2, Ints.indexOf(ARRAY234, (int) 4));
+    assertEquals(1, Ints.indexOf(
+        new int[] { (int) 2, (int) 3, (int) 2, (int) 3 },
+        (int) 3));
+  }
+
+  public void testIndexOf_arrayTarget() {
+    assertEquals(0, Ints.indexOf(EMPTY, EMPTY));
+    assertEquals(0, Ints.indexOf(ARRAY234, EMPTY));
+    assertEquals(-1, Ints.indexOf(EMPTY, ARRAY234));
+    assertEquals(-1, Ints.indexOf(ARRAY234, ARRAY1));
+    assertEquals(-1, Ints.indexOf(ARRAY1, ARRAY234));
+    assertEquals(0, Ints.indexOf(ARRAY1, ARRAY1));
+    assertEquals(0, Ints.indexOf(ARRAY234, ARRAY234));
+    assertEquals(0, Ints.indexOf(
+        ARRAY234, new int[] { (int) 2, (int) 3 }));
+    assertEquals(1, Ints.indexOf(
+        ARRAY234, new int[] { (int) 3, (int) 4 }));
+    assertEquals(1, Ints.indexOf(ARRAY234, new int[] { (int) 3 }));
+    assertEquals(2, Ints.indexOf(ARRAY234, new int[] { (int) 4 }));
+    assertEquals(1, Ints.indexOf(new int[] { (int) 2, (int) 3,
+        (int) 3, (int) 3, (int) 3 },
+        new int[] { (int) 3 }
+    ));
+    assertEquals(2, Ints.indexOf(
+        new int[] { (int) 2, (int) 3, (int) 2,
+            (int) 3, (int) 4, (int) 2, (int) 3},
+        new int[] { (int) 2, (int) 3, (int) 4}
+    ));
+    assertEquals(1, Ints.indexOf(
+        new int[] { (int) 2, (int) 2, (int) 3,
+            (int) 4, (int) 2, (int) 3, (int) 4},
+        new int[] { (int) 2, (int) 3, (int) 4}
+    ));
+    assertEquals(-1, Ints.indexOf(
+        new int[] { (int) 4, (int) 3, (int) 2},
+        new int[] { (int) 2, (int) 3, (int) 4}
+    ));
+  }
+
+  public void testLastIndexOf() {
+    assertEquals(-1, Ints.lastIndexOf(EMPTY, (int) 1));
+    assertEquals(-1, Ints.lastIndexOf(ARRAY1, (int) 2));
+    assertEquals(-1, Ints.lastIndexOf(ARRAY234, (int) 1));
+    assertEquals(0, Ints.lastIndexOf(
+        new int[] {(int) -1}, (int) -1));
+    assertEquals(0, Ints.lastIndexOf(ARRAY234, (int) 2));
+    assertEquals(1, Ints.lastIndexOf(ARRAY234, (int) 3));
+    assertEquals(2, Ints.lastIndexOf(ARRAY234, (int) 4));
+    assertEquals(3, Ints.lastIndexOf(
+        new int[] { (int) 2, (int) 3, (int) 2, (int) 3 },
+        (int) 3));
+  }
+
+  public void testMax_noArgs() {
+    try {
+      Ints.max();
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  public void testMax() {
+    assertEquals(LEAST, Ints.max(LEAST));
+    assertEquals(GREATEST, Ints.max(GREATEST));
+    assertEquals((int) 9, Ints.max(
+        (int) 8, (int) 6, (int) 7,
+        (int) 5, (int) 3, (int) 0, (int) 9));
+  }
+
+  public void testMin_noArgs() {
+    try {
+      Ints.min();
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  public void testMin() {
+    assertEquals(LEAST, Ints.min(LEAST));
+    assertEquals(GREATEST, Ints.min(GREATEST));
+    assertEquals((int) 0, Ints.min(
+        (int) 8, (int) 6, (int) 7,
+        (int) 5, (int) 3, (int) 0, (int) 9));
+  }
+
+  public void testConcat() {
+    assertTrue(Arrays.equals(EMPTY, Ints.concat()));
+    assertTrue(Arrays.equals(EMPTY, Ints.concat(EMPTY)));
+    assertTrue(Arrays.equals(EMPTY, Ints.concat(EMPTY, EMPTY, EMPTY)));
+    assertTrue(Arrays.equals(ARRAY1, Ints.concat(ARRAY1)));
+    assertNotSame(ARRAY1, Ints.concat(ARRAY1));
+    assertTrue(Arrays.equals(ARRAY1, Ints.concat(EMPTY, ARRAY1, EMPTY)));
+    assertTrue(Arrays.equals(
+        new int[] {(int) 1, (int) 1, (int) 1},
+        Ints.concat(ARRAY1, ARRAY1, ARRAY1)));
+    assertTrue(Arrays.equals(
+        new int[] {(int) 1, (int) 2, (int) 3, (int) 4},
+        Ints.concat(ARRAY1, ARRAY234)));
+  }
+
+  @GwtIncompatible("Ints.toByteArray")
+  public void testToByteArray() {
+    assertTrue(Arrays.equals(
+        new byte[] {0x12, 0x13, 0x14, 0x15}, Ints.toByteArray(0x12131415)));
+    assertTrue(Arrays.equals(
+        new byte[] {(byte) 0xFF, (byte) 0xEE, (byte) 0xDD, (byte) 0xCC},
+        Ints.toByteArray(0xFFEEDDCC)));
+  }
+
+  @GwtIncompatible("Ints.fromByteArray")
+  public void testFromByteArray() {
+    assertEquals(0x12131415,
+        Ints.fromByteArray(new byte[] {0x12, 0x13, 0x14, 0x15, 0x33}));
+    assertEquals(0xFFEEDDCC, Ints.fromByteArray(
+        new byte[] {(byte) 0xFF, (byte) 0xEE, (byte) 0xDD, (byte) 0xCC}));
+
+    try {
+      Ints.fromByteArray(new byte[Ints.BYTES - 1]);
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  @GwtIncompatible("Ints.fromBytes")
+  public void testFromBytes() {
+    assertEquals(0x12131415, Ints.fromBytes(
+        (byte) 0x12, (byte) 0x13, (byte) 0x14, (byte) 0x15));
+    assertEquals(0xFFEEDDCC, Ints.fromBytes(
+        (byte) 0xFF, (byte) 0xEE, (byte) 0xDD, (byte) 0xCC));
+  }
+
+  @GwtIncompatible("Ints.fromByteArray, Ints.toByteArray")
+  public void testByteArrayRoundTrips() {
+    Random r = new Random(5);
+    byte[] b = new byte[Ints.BYTES];
+
+    // total overkill, but, it takes 0.1 sec so why not...
+    for (int i = 0; i < 10000; i++) {
+      int num = r.nextInt();
+      assertEquals(num, Ints.fromByteArray(Ints.toByteArray(num)));
+
+      r.nextBytes(b);
+      assertTrue(Arrays.equals(b, Ints.toByteArray(Ints.fromByteArray(b))));
+    }
+  }
+
+  public void testEnsureCapacity() {
+    assertSame(EMPTY, Ints.ensureCapacity(EMPTY, 0, 1));
+    assertSame(ARRAY1, Ints.ensureCapacity(ARRAY1, 0, 1));
+    assertSame(ARRAY1, Ints.ensureCapacity(ARRAY1, 1, 1));
+    assertTrue(Arrays.equals(
+        new int[] {(int) 1, (int) 0, (int) 0},
+        Ints.ensureCapacity(ARRAY1, 2, 1)));
+  }
+
+  public void testEnsureCapacity_fail() {
+    try {
+      Ints.ensureCapacity(ARRAY1, -1, 1);
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+    try {
+      // notice that this should even fail when no growth was needed
+      Ints.ensureCapacity(ARRAY1, 1, -1);
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  public void testJoin() {
+    assertEquals("", Ints.join(",", EMPTY));
+    assertEquals("1", Ints.join(",", ARRAY1));
+    assertEquals("1,2", Ints.join(",", (int) 1, (int) 2));
+    assertEquals("123",
+        Ints.join("", (int) 1, (int) 2, (int) 3));
+  }
+
+  public void testLexicographicalComparator() {
+    List<int[]> ordered = Arrays.asList(
+        new int[] {},
+        new int[] {LEAST},
+        new int[] {LEAST, LEAST},
+        new int[] {LEAST, (int) 1},
+        new int[] {(int) 1},
+        new int[] {(int) 1, LEAST},
+        new int[] {GREATEST, GREATEST - (int) 1},
+        new int[] {GREATEST, GREATEST},
+        new int[] {GREATEST, GREATEST, GREATEST});
+
+    Comparator<int[]> comparator = Ints.lexicographicalComparator();
+    Helpers.testComparator(comparator, ordered);
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testLexicographicalComparatorSerializable() {
+    Comparator<int[]> comparator = Ints.lexicographicalComparator();
+    assertSame(comparator, SerializableTester.reserialize(comparator));
+  }
+
+  public void testToArray() {
+    // need explicit type parameter to avoid javac warning!?
+    List<Integer> none = Arrays.<Integer>asList();
+    assertTrue(Arrays.equals(EMPTY, Ints.toArray(none)));
+
+    List<Integer> one = Arrays.asList((int) 1);
+    assertTrue(Arrays.equals(ARRAY1, Ints.toArray(one)));
+
+    int[] array = {(int) 0, (int) 1, (int) 0xdeadbeef};
+
+    List<Integer> three = Arrays.asList((int) 0, (int) 1, (int) 0xdeadbeef);
+    assertTrue(Arrays.equals(array, Ints.toArray(three)));
+
+    assertTrue(Arrays.equals(array, Ints.toArray(Ints.asList(array))));
+  }
+
+  public void testToArray_threadSafe() {
+    for (int delta : new int[] { +1, 0, -1 }) {
+      for (int i = 0; i < VALUES.length; i++) {
+        List<Integer> list = Ints.asList(VALUES).subList(0, i);
+        Collection<Integer> misleadingSize =
+            Helpers.misleadingSizeCollection(delta);
+        misleadingSize.addAll(list);
+        int[] arr = Ints.toArray(misleadingSize);
+        assertEquals(i, arr.length);
+        for (int j = 0; j < i; j++) {
+          assertEquals(VALUES[j], arr[j]);
+        }
+      }
+    }
+  }
+
+  public void testToArray_withNull() {
+    List<Integer> list = Arrays.asList((int) 0, (int) 1, null);
+    try {
+      Ints.toArray(list);
+      fail();
+    } catch (NullPointerException expected) {
+    }
+  }
+
+  public void testAsList_isAView() {
+    int[] array = {(int) 0, (int) 1};
+    List<Integer> list = Ints.asList(array);
+    list.set(0, (int) 2);
+    assertTrue(Arrays.equals(new int[] {(int) 2, (int) 1}, array));
+    array[1] = (int) 3;
+    assertEquals(Arrays.asList((int) 2, (int) 3), list);
+  }
+
+  public void testAsList_toArray_roundTrip() {
+    int[] array = { (int) 0, (int) 1, (int) 2 };
+    List<Integer> list = Ints.asList(array);
+    int[] newArray = Ints.toArray(list);
+
+    // Make sure it returned a copy
+    list.set(0, (int) 4);
+    assertTrue(Arrays.equals(
+        new int[] { (int) 0, (int) 1, (int) 2 }, newArray));
+    newArray[1] = (int) 5;
+    assertEquals((int) 1, (int) list.get(1));
+  }
+
+  // This test stems from a real bug found by andrewk
+  public void testAsList_subList_toArray_roundTrip() {
+    int[] array = { (int) 0, (int) 1, (int) 2, (int) 3 };
+    List<Integer> list = Ints.asList(array);
+    assertTrue(Arrays.equals(new int[] { (int) 1, (int) 2 },
+        Ints.toArray(list.subList(1, 3))));
+    assertTrue(Arrays.equals(new int[] {},
+        Ints.toArray(list.subList(2, 2))));
+  }
+
+  public void testAsListEmpty() {
+    assertSame(Collections.emptyList(), Ints.asList(EMPTY));
+  }
+
+  @GwtIncompatible("NullPointerTester")
+  public void testNulls() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.setDefault(int[].class, new int[0]);
+    tester.testAllPublicStaticMethods(Ints.class);
+  }
+
+  @GwtIncompatible("AndroidInteger")
+  public void testTryParse() {
+    tryParseAndAssertEquals(0, "0");
+    tryParseAndAssertEquals(0, "-0");
+    tryParseAndAssertEquals(1, "1");
+    tryParseAndAssertEquals(-1, "-1");
+    tryParseAndAssertEquals(8900, "8900");
+    tryParseAndAssertEquals(-8900, "-8900");
+    tryParseAndAssertEquals(GREATEST, Integer.toString(GREATEST));
+    tryParseAndAssertEquals(LEAST, Integer.toString(LEAST));
+    assertNull(Ints.tryParse(""));
+    assertNull(Ints.tryParse("-"));
+    assertNull(Ints.tryParse("+1"));
+    assertNull(Ints.tryParse("9999999999999999"));
+    assertNull("Max integer + 1",
+        Ints.tryParse(Long.toString(((long) GREATEST) + 1)));
+    assertNull("Min integer - 1",
+        Ints.tryParse(Long.toString(((long) LEAST) - 1)));
+  }
+
+  /**
+   * Applies {@link Ints#tryParse(String)} to the given string and asserts that
+   * the result is as expected.
+   */
+  @GwtIncompatible("AndroidInteger")
+  private static void tryParseAndAssertEquals(Integer expected, String value) {
+    assertEquals(expected, Ints.tryParse(value));
+  }
+}
diff --git a/guava-tests/test/com/google/common/primitives/LongArrayAsListTest.java b/guava-tests/test/com/google/common/primitives/LongArrayAsListTest.java
new file mode 100644
index 0000000..1fa140f
--- /dev/null
+++ b/guava-tests/test/com/google/common/primitives/LongArrayAsListTest.java
@@ -0,0 +1,162 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.primitives;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.testing.ListTestSuiteBuilder;
+import com.google.common.collect.testing.SampleElements;
+import com.google.common.collect.testing.TestListGenerator;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.ListFeature;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import java.util.List;
+
+/**
+ * Test suite covering {@link Longs#asList(long[])}.
+ *
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible
+public class LongArrayAsListTest extends TestCase {
+
+  private static List<Long> asList(Long[] values) {
+    long[] temp = new long[values.length];
+    for (int i = 0; i < values.length; i++) {
+      temp[i] = checkNotNull(values[i]);  // checkNotNull for GWT (do not optimize).
+    }
+    return Longs.asList(temp);
+  }
+
+  public static Test suite() {
+    List<ListTestSuiteBuilder<Long>> builders =
+        ImmutableList.of(
+            ListTestSuiteBuilder.using(new LongsAsListGenerator())
+                .named("Longs.asList"),
+
+            ListTestSuiteBuilder.using(new LongsAsListHeadSubListGenerator())
+                .named("Longs.asList, head subList"),
+
+            ListTestSuiteBuilder.using(new LongsAsListTailSubListGenerator())
+                .named("Longs.asList, tail subList"),
+
+            ListTestSuiteBuilder.using(new LongsAsListMiddleSubListGenerator())
+                .named("Longs.asList, middle subList")
+            );
+
+    TestSuite suite = new TestSuite();
+    for (ListTestSuiteBuilder<Long> builder : builders) {
+      suite.addTest(
+          builder
+          .withFeatures(CollectionSize.ONE,
+                        CollectionSize.SEVERAL,
+                        CollectionFeature.RESTRICTS_ELEMENTS,
+                        ListFeature.SUPPORTS_SET)
+          .createTestSuite());
+    }
+    return suite;
+  }
+
+  // Test generators.  To let the GWT test suite generator access them, they need to be
+  // public named classes with a public default constructor.
+
+  public static final class LongsAsListGenerator extends TestLongListGenerator {
+    @Override protected List<Long> create(Long[] elements) {
+      return asList(elements);
+    }
+  }
+
+  public static final class LongsAsListHeadSubListGenerator extends TestLongListGenerator {
+    @Override protected List<Long> create(Long[] elements) {
+      Long[] suffix = {Long.MIN_VALUE, Long.MAX_VALUE};
+      Long[] all = concat(elements, suffix);
+      return asList(all).subList(0, elements.length);
+    }
+  }
+
+  public static final class LongsAsListTailSubListGenerator extends TestLongListGenerator {
+    @Override protected List<Long> create(Long[] elements) {
+      Long[] prefix = {(long) 86, (long) 99};
+      Long[] all = concat(prefix, elements);
+      return asList(all).subList(2, elements.length + 2);
+    }
+  }
+
+  public static final class LongsAsListMiddleSubListGenerator extends TestLongListGenerator {
+    @Override protected List<Long> create(Long[] elements) {
+      Long[] prefix = {Long.MIN_VALUE, Long.MAX_VALUE};
+      Long[] suffix = {(long) 86, (long) 99};
+      Long[] all = concat(concat(prefix, elements), suffix);
+      return asList(all).subList(2, elements.length + 2);
+    }
+  }
+
+  private static Long[] concat(Long[] left, Long[] right) {
+    Long[] result = new Long[left.length + right.length];
+    System.arraycopy(left, 0, result, 0, left.length);
+    System.arraycopy(right, 0, result, left.length, right.length);
+    return result;
+  }
+
+  public static abstract class TestLongListGenerator
+      implements TestListGenerator<Long> {
+    @Override
+    public SampleElements<Long> samples() {
+      return new SampleLongs();
+    }
+
+    @Override
+    public List<Long> create(Object... elements) {
+      Long[] array = new Long[elements.length];
+      int i = 0;
+      for (Object e : elements) {
+        array[i++] = (Long) e;
+      }
+      return create(array);
+    }
+
+    /**
+     * Creates a new collection containing the given elements; implement this
+     * method instead of {@link #create(Object...)}.
+     */
+    protected abstract List<Long> create(Long[] elements);
+
+    @Override
+    public Long[] createArray(int length) {
+      return new Long[length];
+    }
+
+    /** Returns the original element list, unchanged. */
+    @Override
+    public List<Long> order(List<Long> insertionOrder) {
+      return insertionOrder;
+    }
+  }
+
+  public static class SampleLongs extends SampleElements<Long> {
+    public SampleLongs() {
+      super((long) 0, (long) 1, (long) 2, (long) 3, (long) 4);
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/primitives/LongsTest.java b/guava-tests/test/com/google/common/primitives/LongsTest.java
new file mode 100644
index 0000000..b92dd67
--- /dev/null
+++ b/guava-tests/test/com/google/common/primitives/LongsTest.java
@@ -0,0 +1,381 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.primitives;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.collect.testing.Helpers;
+import com.google.common.testing.NullPointerTester;
+import com.google.common.testing.SerializableTester;
+
+import junit.framework.TestCase;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Random;
+
+/**
+ * Unit test for {@link Longs}.
+ *
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible(emulated = true)
+@SuppressWarnings("cast") // redundant casts are intentional and harmless
+public class LongsTest extends TestCase {
+  private static final long[] EMPTY = {};
+  private static final long[] ARRAY1 = {(long) 1};
+  private static final long[] ARRAY234
+      = {(long) 2, (long) 3, (long) 4};
+
+  private static final long LEAST = Long.MIN_VALUE;
+  private static final long GREATEST = Long.MAX_VALUE;
+
+  private static final long[] VALUES =
+      { LEAST, (long) -1, (long) 0, (long) 1, GREATEST };
+
+  @GwtIncompatible("Long.hashCode returns different values in GWT.")
+  public void testHashCode() {
+    for (long value : VALUES) {
+      assertEquals("hashCode for " + value,
+          ((Long) value).hashCode(), Longs.hashCode(value));
+    }
+  }
+
+  public void testCompare() {
+    for (long x : VALUES) {
+      for (long y : VALUES) {
+        // note: spec requires only that the sign is the same
+        assertEquals(x + ", " + y,
+                     Long.valueOf(x).compareTo(y),
+                     Longs.compare(x, y));
+      }
+    }
+  }
+
+  public void testContains() {
+    assertFalse(Longs.contains(EMPTY, (long) 1));
+    assertFalse(Longs.contains(ARRAY1, (long) 2));
+    assertFalse(Longs.contains(ARRAY234, (long) 1));
+    assertTrue(Longs.contains(new long[] {(long) -1}, (long) -1));
+    assertTrue(Longs.contains(ARRAY234, (long) 2));
+    assertTrue(Longs.contains(ARRAY234, (long) 3));
+    assertTrue(Longs.contains(ARRAY234, (long) 4));
+  }
+
+  public void testIndexOf() {
+    assertEquals(-1, Longs.indexOf(EMPTY, (long) 1));
+    assertEquals(-1, Longs.indexOf(ARRAY1, (long) 2));
+    assertEquals(-1, Longs.indexOf(ARRAY234, (long) 1));
+    assertEquals(0, Longs.indexOf(
+        new long[] {(long) -1}, (long) -1));
+    assertEquals(0, Longs.indexOf(ARRAY234, (long) 2));
+    assertEquals(1, Longs.indexOf(ARRAY234, (long) 3));
+    assertEquals(2, Longs.indexOf(ARRAY234, (long) 4));
+    assertEquals(1, Longs.indexOf(
+        new long[] { (long) 2, (long) 3, (long) 2, (long) 3 },
+        (long) 3));
+  }
+
+  public void testIndexOf_arrayTarget() {
+    assertEquals(0, Longs.indexOf(EMPTY, EMPTY));
+    assertEquals(0, Longs.indexOf(ARRAY234, EMPTY));
+    assertEquals(-1, Longs.indexOf(EMPTY, ARRAY234));
+    assertEquals(-1, Longs.indexOf(ARRAY234, ARRAY1));
+    assertEquals(-1, Longs.indexOf(ARRAY1, ARRAY234));
+    assertEquals(0, Longs.indexOf(ARRAY1, ARRAY1));
+    assertEquals(0, Longs.indexOf(ARRAY234, ARRAY234));
+    assertEquals(0, Longs.indexOf(
+        ARRAY234, new long[] { (long) 2, (long) 3 }));
+    assertEquals(1, Longs.indexOf(
+        ARRAY234, new long[] { (long) 3, (long) 4 }));
+    assertEquals(1, Longs.indexOf(ARRAY234, new long[] { (long) 3 }));
+    assertEquals(2, Longs.indexOf(ARRAY234, new long[] { (long) 4 }));
+    assertEquals(1, Longs.indexOf(new long[] { (long) 2, (long) 3,
+        (long) 3, (long) 3, (long) 3 },
+        new long[] { (long) 3 }
+    ));
+    assertEquals(2, Longs.indexOf(
+        new long[] { (long) 2, (long) 3, (long) 2,
+            (long) 3, (long) 4, (long) 2, (long) 3},
+        new long[] { (long) 2, (long) 3, (long) 4}
+    ));
+    assertEquals(1, Longs.indexOf(
+        new long[] { (long) 2, (long) 2, (long) 3,
+            (long) 4, (long) 2, (long) 3, (long) 4},
+        new long[] { (long) 2, (long) 3, (long) 4}
+    ));
+    assertEquals(-1, Longs.indexOf(
+        new long[] { (long) 4, (long) 3, (long) 2},
+        new long[] { (long) 2, (long) 3, (long) 4}
+    ));
+  }
+
+  public void testLastIndexOf() {
+    assertEquals(-1, Longs.lastIndexOf(EMPTY, (long) 1));
+    assertEquals(-1, Longs.lastIndexOf(ARRAY1, (long) 2));
+    assertEquals(-1, Longs.lastIndexOf(ARRAY234, (long) 1));
+    assertEquals(0, Longs.lastIndexOf(
+        new long[] {(long) -1}, (long) -1));
+    assertEquals(0, Longs.lastIndexOf(ARRAY234, (long) 2));
+    assertEquals(1, Longs.lastIndexOf(ARRAY234, (long) 3));
+    assertEquals(2, Longs.lastIndexOf(ARRAY234, (long) 4));
+    assertEquals(3, Longs.lastIndexOf(
+        new long[] { (long) 2, (long) 3, (long) 2, (long) 3 },
+        (long) 3));
+  }
+
+  public void testMax_noArgs() {
+    try {
+      Longs.max();
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  public void testMax() {
+    assertEquals(LEAST, Longs.max(LEAST));
+    assertEquals(GREATEST, Longs.max(GREATEST));
+    assertEquals((long) 9, Longs.max(
+        (long) 8, (long) 6, (long) 7,
+        (long) 5, (long) 3, (long) 0, (long) 9));
+  }
+
+  public void testMin_noArgs() {
+    try {
+      Longs.min();
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  public void testMin() {
+    assertEquals(LEAST, Longs.min(LEAST));
+    assertEquals(GREATEST, Longs.min(GREATEST));
+    assertEquals((long) 0, Longs.min(
+        (long) 8, (long) 6, (long) 7,
+        (long) 5, (long) 3, (long) 0, (long) 9));
+  }
+
+  public void testConcat() {
+    assertTrue(Arrays.equals(EMPTY, Longs.concat()));
+    assertTrue(Arrays.equals(EMPTY, Longs.concat(EMPTY)));
+    assertTrue(Arrays.equals(EMPTY, Longs.concat(EMPTY, EMPTY, EMPTY)));
+    assertTrue(Arrays.equals(ARRAY1, Longs.concat(ARRAY1)));
+    assertNotSame(ARRAY1, Longs.concat(ARRAY1));
+    assertTrue(Arrays.equals(ARRAY1, Longs.concat(EMPTY, ARRAY1, EMPTY)));
+    assertTrue(Arrays.equals(
+        new long[] {(long) 1, (long) 1, (long) 1},
+        Longs.concat(ARRAY1, ARRAY1, ARRAY1)));
+    assertTrue(Arrays.equals(
+        new long[] {(long) 1, (long) 2, (long) 3, (long) 4},
+        Longs.concat(ARRAY1, ARRAY234)));
+  }
+
+  @GwtIncompatible("Longs.toByteArray")
+  public void testToByteArray() {
+    assertTrue(Arrays.equals(
+        new byte[] {0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19},
+        Longs.toByteArray(0x1213141516171819L)));
+    assertTrue(Arrays.equals(
+        new byte[] {
+            (byte) 0xFF, (byte) 0xEE, (byte) 0xDD, (byte) 0xCC,
+            (byte) 0xBB, (byte) 0xAA, (byte) 0x99, (byte) 0x88},
+        Longs.toByteArray(0xFFEEDDCCBBAA9988L)));
+  }
+
+  @GwtIncompatible("Longs.fromByteArray")
+  public void testFromByteArray() {
+    assertEquals(0x1213141516171819L, Longs.fromByteArray(
+        new byte[] {0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x33}));
+    assertEquals(0xFFEEDDCCBBAA9988L, Longs.fromByteArray(
+        new byte[] {
+            (byte) 0xFF, (byte) 0xEE, (byte) 0xDD, (byte) 0xCC,
+            (byte) 0xBB, (byte) 0xAA, (byte) 0x99, (byte) 0x88}));
+
+    try {
+      Longs.fromByteArray(new byte[Longs.BYTES - 1]);
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  @GwtIncompatible("Longs.fromBytes")
+  public void testFromBytes() {
+    assertEquals(0x1213141516171819L, Longs.fromBytes(
+        (byte) 0x12, (byte) 0x13, (byte) 0x14, (byte) 0x15,
+        (byte) 0x16, (byte) 0x17, (byte) 0x18, (byte) 0x19));
+    assertEquals(0xFFEEDDCCBBAA9988L, Longs.fromBytes(
+        (byte) 0xFF, (byte) 0xEE, (byte) 0xDD, (byte) 0xCC,
+        (byte) 0xBB, (byte) 0xAA, (byte) 0x99, (byte) 0x88));
+  }
+
+  @GwtIncompatible("Longs.fromByteArray, Longs.toByteArray")
+  public void testByteArrayRoundTrips() {
+    Random r = new Random(5);
+    byte[] b = new byte[Longs.BYTES];
+
+    // total overkill, but, it takes 0.1 sec so why not...
+    for (int i = 0; i < 10000; i++) {
+      long num = r.nextLong();
+      assertEquals(num, Longs.fromByteArray(Longs.toByteArray(num)));
+
+      r.nextBytes(b);
+      long value = Longs.fromByteArray(b);
+      assertTrue("" + value, Arrays.equals(b, Longs.toByteArray(value)));
+    }
+  }
+
+  public void testEnsureCapacity() {
+    assertSame(EMPTY, Longs.ensureCapacity(EMPTY, 0, 1));
+    assertSame(ARRAY1, Longs.ensureCapacity(ARRAY1, 0, 1));
+    assertSame(ARRAY1, Longs.ensureCapacity(ARRAY1, 1, 1));
+    assertTrue(Arrays.equals(
+        new long[] {(long) 1, (long) 0, (long) 0},
+        Longs.ensureCapacity(ARRAY1, 2, 1)));
+  }
+
+  public void testEnsureCapacity_fail() {
+    try {
+      Longs.ensureCapacity(ARRAY1, -1, 1);
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+    try {
+      // notice that this should even fail when no growth was needed
+      Longs.ensureCapacity(ARRAY1, 1, -1);
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  public void testJoin() {
+    assertEquals("", Longs.join(",", EMPTY));
+    assertEquals("1", Longs.join(",", ARRAY1));
+    assertEquals("1,2", Longs.join(",", (long) 1, (long) 2));
+    assertEquals("123",
+        Longs.join("", (long) 1, (long) 2, (long) 3));
+  }
+
+  public void testLexicographicalComparator() {
+    List<long[]> ordered = Arrays.asList(
+        new long[] {},
+        new long[] {LEAST},
+        new long[] {LEAST, LEAST},
+        new long[] {LEAST, (long) 1},
+        new long[] {(long) 1},
+        new long[] {(long) 1, LEAST},
+        new long[] {GREATEST, GREATEST - (long) 1},
+        new long[] {GREATEST, GREATEST},
+        new long[] {GREATEST, GREATEST, GREATEST});
+
+    Comparator<long[]> comparator = Longs.lexicographicalComparator();
+    Helpers.testComparator(comparator, ordered);
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testLexicographicalComparatorSerializable() {
+    Comparator<long[]> comparator = Longs.lexicographicalComparator();
+    assertSame(comparator, SerializableTester.reserialize(comparator));
+  }
+
+  public void testToArray() {
+    // need explicit type parameter to avoid javac warning!?
+    List<Long> none = Arrays.<Long>asList();
+    assertTrue(Arrays.equals(EMPTY, Longs.toArray(none)));
+
+    List<Long> one = Arrays.asList((long) 1);
+    assertTrue(Arrays.equals(ARRAY1, Longs.toArray(one)));
+
+    long[] array = {(long) 0, (long) 1, 0x0FF1C1AL};
+
+    List<Long> three = Arrays.asList((long) 0, (long) 1, 0x0FF1C1AL);
+    assertTrue(Arrays.equals(array, Longs.toArray(three)));
+
+    assertTrue(Arrays.equals(array, Longs.toArray(Longs.asList(array))));
+  }
+
+  public void testToArray_threadSafe() {
+    for (int delta : new int[] { +1, 0, -1 }) {
+      for (int i = 0; i < VALUES.length; i++) {
+        List<Long> list = Longs.asList(VALUES).subList(0, i);
+        Collection<Long> misleadingSize =
+            Helpers.misleadingSizeCollection(delta);
+        misleadingSize.addAll(list);
+        long[] arr = Longs.toArray(misleadingSize);
+        assertEquals(i, arr.length);
+        for (int j = 0; j < i; j++) {
+          assertEquals(VALUES[j], arr[j]);
+        }
+      }
+    }
+  }
+
+  public void testToArray_withNull() {
+    List<Long> list = Arrays.asList((long) 0, (long) 1, null);
+    try {
+      Longs.toArray(list);
+      fail();
+    } catch (NullPointerException expected) {
+    }
+  }
+
+  public void testAsList_isAView() {
+    long[] array = {(long) 0, (long) 1};
+    List<Long> list = Longs.asList(array);
+    list.set(0, (long) 2);
+    assertTrue(Arrays.equals(new long[] {(long) 2, (long) 1}, array));
+    array[1] = (long) 3;
+    assertEquals(Arrays.asList((long) 2, (long) 3), list);
+  }
+
+  public void testAsList_toArray_roundTrip() {
+    long[] array = { (long) 0, (long) 1, (long) 2 };
+    List<Long> list = Longs.asList(array);
+    long[] newArray = Longs.toArray(list);
+
+    // Make sure it returned a copy
+    list.set(0, (long) 4);
+    assertTrue(Arrays.equals(
+        new long[] { (long) 0, (long) 1, (long) 2 }, newArray));
+    newArray[1] = (long) 5;
+    assertEquals((long) 1, (long) list.get(1));
+  }
+
+  // This test stems from a real bug found by andrewk
+  public void testAsList_subList_toArray_roundTrip() {
+    long[] array = { (long) 0, (long) 1, (long) 2, (long) 3 };
+    List<Long> list = Longs.asList(array);
+    assertTrue(Arrays.equals(new long[] { (long) 1, (long) 2 },
+        Longs.toArray(list.subList(1, 3))));
+    assertTrue(Arrays.equals(new long[] {},
+        Longs.toArray(list.subList(2, 2))));
+  }
+
+  public void testAsListEmpty() {
+    assertSame(Collections.emptyList(), Longs.asList(EMPTY));
+  }
+
+  @GwtIncompatible("NullPointerTester")
+  public void testNulls() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.setDefault(long[].class, new long[0]);
+    tester.testAllPublicStaticMethods(Longs.class);
+  }
+}
diff --git a/guava-tests/test/com/google/common/primitives/PrimitivesTest.java b/guava-tests/test/com/google/common/primitives/PrimitivesTest.java
new file mode 100644
index 0000000..9fba2aa
--- /dev/null
+++ b/guava-tests/test/com/google/common/primitives/PrimitivesTest.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.primitives;
+
+import com.google.common.collect.ImmutableSet;
+import com.google.common.testing.NullPointerTester;
+
+import junit.framework.TestCase;
+
+import java.util.Set;
+
+/**
+ * Unit test for {@link Primitives}.
+ *
+ * @author Kevin Bourrillion
+ */
+public class PrimitivesTest extends TestCase {
+  public void testIsWrapperType() {
+    assertTrue(Primitives.isWrapperType(Void.class));
+    assertFalse(Primitives.isWrapperType(void.class));
+  }
+
+  public void testWrap() {
+    assertSame(Integer.class, Primitives.wrap(int.class));
+    assertSame(Integer.class, Primitives.wrap(Integer.class));
+    assertSame(String.class, Primitives.wrap(String.class));
+  }
+
+  public void testUnwrap() {
+    assertSame(int.class, Primitives.unwrap(Integer.class));
+    assertSame(int.class, Primitives.unwrap(int.class));
+    assertSame(String.class, Primitives.unwrap(String.class));
+  }
+
+  public void testAllPrimitiveTypes() {
+    Set<Class<?>> primitives = Primitives.allPrimitiveTypes();
+    assertEquals(
+        ImmutableSet.<Object>of(
+            boolean.class, byte.class, char.class, double.class,
+            float.class, int.class, long.class, short.class, void.class),
+        primitives);
+
+    try {
+      primitives.remove(boolean.class);
+      fail();
+    } catch (UnsupportedOperationException expected) {
+    }
+  }
+
+  public void testAllWrapperTypes() {
+    Set<Class<?>> wrappers = Primitives.allWrapperTypes();
+    assertEquals(
+        ImmutableSet.<Object>of(
+            Boolean.class, Byte.class, Character.class, Double.class,
+            Float.class, Integer.class, Long.class, Short.class, Void.class),
+        wrappers);
+
+    try {
+      wrappers.remove(Boolean.class);
+      fail();
+    } catch (UnsupportedOperationException expected) {
+    }
+  }
+
+  public void testNullPointerExceptions() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.testAllPublicStaticMethods(Primitives.class);
+  }
+}
diff --git a/guava-tests/test/com/google/common/primitives/ShortArrayAsListTest.java b/guava-tests/test/com/google/common/primitives/ShortArrayAsListTest.java
new file mode 100644
index 0000000..3fb6a4d
--- /dev/null
+++ b/guava-tests/test/com/google/common/primitives/ShortArrayAsListTest.java
@@ -0,0 +1,162 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.primitives;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.testing.ListTestSuiteBuilder;
+import com.google.common.collect.testing.SampleElements;
+import com.google.common.collect.testing.TestListGenerator;
+import com.google.common.collect.testing.features.CollectionFeature;
+import com.google.common.collect.testing.features.CollectionSize;
+import com.google.common.collect.testing.features.ListFeature;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import java.util.List;
+
+/**
+ * Test suite covering {@link Shorts#asList(short[])}.
+ *
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible
+public class ShortArrayAsListTest extends TestCase {
+
+  private static List<Short> asList(Short[] values) {
+    short[] temp = new short[values.length];
+    for (short i = 0; i < values.length; i++) {
+      temp[i] = checkNotNull(values[i]);  // checkNotNull for GWT (do not optimize).
+    }
+    return Shorts.asList(temp);
+  }
+
+  public static Test suite() {
+    List<ListTestSuiteBuilder<Short>> builders =
+        ImmutableList.of(
+            ListTestSuiteBuilder.using(new ShortsAsListGenerator())
+                .named("Shorts.asList"),
+
+            ListTestSuiteBuilder.using(new ShortsAsListHeadSubListGenerator())
+                .named("Shorts.asList, head subList"),
+
+            ListTestSuiteBuilder.using(new ShortsAsListTailSubListGenerator())
+                .named("Shorts.asList, tail subList"),
+
+            ListTestSuiteBuilder.using(new ShortsAsListMiddleSubListGenerator())
+                .named("Shorts.asList, middle subList")
+            );
+
+    TestSuite suite = new TestSuite();
+    for (ListTestSuiteBuilder<Short> builder : builders) {
+      suite.addTest(
+          builder
+          .withFeatures(CollectionSize.ONE,
+                        CollectionSize.SEVERAL,
+                        CollectionFeature.RESTRICTS_ELEMENTS,
+                        ListFeature.SUPPORTS_SET)
+          .createTestSuite());
+    }
+    return suite;
+  }
+
+  // Test generators.  To let the GWT test suite generator access them, they need to be
+  // public named classes with a public default constructor.
+
+  public static final class ShortsAsListGenerator extends TestShortListGenerator {
+    @Override protected List<Short> create(Short[] elements) {
+      return asList(elements);
+    }
+  }
+
+  public static final class ShortsAsListHeadSubListGenerator extends TestShortListGenerator {
+    @Override protected List<Short> create(Short[] elements) {
+      Short[] suffix = {Short.MIN_VALUE, Short.MAX_VALUE};
+      Short[] all = concat(elements, suffix);
+      return asList(all).subList(0, elements.length);
+    }
+  }
+
+  public static final class ShortsAsListTailSubListGenerator extends TestShortListGenerator {
+    @Override protected List<Short> create(Short[] elements) {
+      Short[] prefix = {(short) 86, (short) 99};
+      Short[] all = concat(prefix, elements);
+      return asList(all).subList(2, elements.length + 2);
+    }
+  }
+
+  public static final class ShortsAsListMiddleSubListGenerator extends TestShortListGenerator {
+    @Override protected List<Short> create(Short[] elements) {
+      Short[] prefix = {Short.MIN_VALUE, Short.MAX_VALUE};
+      Short[] suffix = {(short) 86, (short) 99};
+      Short[] all = concat(concat(prefix, elements), suffix);
+      return asList(all).subList(2, elements.length + 2);
+    }
+  }
+
+  private static Short[] concat(Short[] left, Short[] right) {
+    Short[] result = new Short[left.length + right.length];
+    System.arraycopy(left, 0, result, 0, left.length);
+    System.arraycopy(right, 0, result, left.length, right.length);
+    return result;
+  }
+
+  public static abstract class TestShortListGenerator
+      implements TestListGenerator<Short> {
+    @Override
+    public SampleElements<Short> samples() {
+      return new SampleShorts();
+    }
+
+    @Override
+    public List<Short> create(Object... elements) {
+      Short[] array = new Short[elements.length];
+      short i = 0;
+      for (Object e : elements) {
+        array[i++] = (Short) e;
+      }
+      return create(array);
+    }
+
+    /**
+     * Creates a new collection containing the given elements; implement this
+     * method instead of {@link #create(Object...)}.
+     */
+    protected abstract List<Short> create(Short[] elements);
+
+    @Override
+    public Short[] createArray(int length) {
+      return new Short[length];
+    }
+
+    /** Returns the original element list, unchanged. */
+    @Override
+    public List<Short> order(List<Short> insertionOrder) {
+      return insertionOrder;
+    }
+  }
+
+  public static class SampleShorts extends SampleElements<Short> {
+    public SampleShorts() {
+      super((short) 0, (short) 1, (short) 2, (short) 3, (short) 4);
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/primitives/ShortsTest.java b/guava-tests/test/com/google/common/primitives/ShortsTest.java
new file mode 100644
index 0000000..e98510a
--- /dev/null
+++ b/guava-tests/test/com/google/common/primitives/ShortsTest.java
@@ -0,0 +1,408 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.primitives;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.collect.testing.Helpers;
+import com.google.common.testing.NullPointerTester;
+import com.google.common.testing.SerializableTester;
+
+import junit.framework.TestCase;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Random;
+
+/**
+ * Unit test for {@link Shorts}.
+ *
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible(emulated = true)
+@SuppressWarnings("cast") // redundant casts are intentional and harmless
+public class ShortsTest extends TestCase {
+  private static final short[] EMPTY = {};
+  private static final short[] ARRAY1 = {(short) 1};
+  private static final short[] ARRAY234
+      = {(short) 2, (short) 3, (short) 4};
+
+  private static final short LEAST = Short.MIN_VALUE;
+  private static final short GREATEST = Short.MAX_VALUE;
+
+  private static final short[] VALUES =
+      { LEAST, (short) -1, (short) 0, (short) 1, GREATEST };
+
+  public void testHashCode() {
+    for (short value : VALUES) {
+      assertEquals(((Short) value).hashCode(), Shorts.hashCode(value));
+    }
+  }
+
+  public void testCheckedCast() {
+    for (short value : VALUES) {
+      assertEquals(value, Shorts.checkedCast((long) value));
+    }
+    assertCastFails(GREATEST + 1L);
+    assertCastFails(LEAST - 1L);
+    assertCastFails(Long.MAX_VALUE);
+    assertCastFails(Long.MIN_VALUE);
+  }
+
+  public void testSaturatedCast() {
+    for (short value : VALUES) {
+      assertEquals(value, Shorts.saturatedCast((long) value));
+    }
+    assertEquals(GREATEST, Shorts.saturatedCast(GREATEST + 1L));
+    assertEquals(LEAST, Shorts.saturatedCast(LEAST - 1L));
+    assertEquals(GREATEST, Shorts.saturatedCast(Long.MAX_VALUE));
+    assertEquals(LEAST, Shorts.saturatedCast(Long.MIN_VALUE));
+  }
+
+  private void assertCastFails(long value) {
+    try {
+      Shorts.checkedCast(value);
+      fail("Cast to short should have failed: " + value);
+    } catch (IllegalArgumentException ex) {
+      assertTrue(value + " not found in exception text: " + ex.getMessage(),
+          ex.getMessage().contains(String.valueOf(value)));
+    }
+  }
+
+  public void testCompare() {
+    for (short x : VALUES) {
+      for (short y : VALUES) {
+        // Only compare the sign of the result of compareTo().
+        int expected = Short.valueOf(x).compareTo(y);
+        int actual = Shorts.compare(x, y);
+        if (expected == 0) {
+          assertEquals(x + ", " + y, expected, actual);
+        } else if (expected < 0) {
+          assertTrue(x + ", " + y + " (expected: " + expected + ", actual" + actual + ")",
+              actual < 0);
+        } else {
+          assertTrue(x + ", " + y + " (expected: " + expected + ", actual" + actual + ")",
+              actual > 0);
+        }
+      }
+    }
+  }
+
+  public void testContains() {
+    assertFalse(Shorts.contains(EMPTY, (short) 1));
+    assertFalse(Shorts.contains(ARRAY1, (short) 2));
+    assertFalse(Shorts.contains(ARRAY234, (short) 1));
+    assertTrue(Shorts.contains(new short[] {(short) -1}, (short) -1));
+    assertTrue(Shorts.contains(ARRAY234, (short) 2));
+    assertTrue(Shorts.contains(ARRAY234, (short) 3));
+    assertTrue(Shorts.contains(ARRAY234, (short) 4));
+  }
+
+  public void testIndexOf() {
+    assertEquals(-1, Shorts.indexOf(EMPTY, (short) 1));
+    assertEquals(-1, Shorts.indexOf(ARRAY1, (short) 2));
+    assertEquals(-1, Shorts.indexOf(ARRAY234, (short) 1));
+    assertEquals(0, Shorts.indexOf(
+        new short[] {(short) -1}, (short) -1));
+    assertEquals(0, Shorts.indexOf(ARRAY234, (short) 2));
+    assertEquals(1, Shorts.indexOf(ARRAY234, (short) 3));
+    assertEquals(2, Shorts.indexOf(ARRAY234, (short) 4));
+    assertEquals(1, Shorts.indexOf(
+        new short[] { (short) 2, (short) 3, (short) 2, (short) 3 },
+        (short) 3));
+  }
+
+  public void testIndexOf_arrayTarget() {
+    assertEquals(0, Shorts.indexOf(EMPTY, EMPTY));
+    assertEquals(0, Shorts.indexOf(ARRAY234, EMPTY));
+    assertEquals(-1, Shorts.indexOf(EMPTY, ARRAY234));
+    assertEquals(-1, Shorts.indexOf(ARRAY234, ARRAY1));
+    assertEquals(-1, Shorts.indexOf(ARRAY1, ARRAY234));
+    assertEquals(0, Shorts.indexOf(ARRAY1, ARRAY1));
+    assertEquals(0, Shorts.indexOf(ARRAY234, ARRAY234));
+    assertEquals(0, Shorts.indexOf(
+        ARRAY234, new short[] { (short) 2, (short) 3 }));
+    assertEquals(1, Shorts.indexOf(
+        ARRAY234, new short[] { (short) 3, (short) 4 }));
+    assertEquals(1, Shorts.indexOf(ARRAY234, new short[] { (short) 3 }));
+    assertEquals(2, Shorts.indexOf(ARRAY234, new short[] { (short) 4 }));
+    assertEquals(1, Shorts.indexOf(new short[] { (short) 2, (short) 3,
+        (short) 3, (short) 3, (short) 3 },
+        new short[] { (short) 3 }
+    ));
+    assertEquals(2, Shorts.indexOf(
+        new short[] { (short) 2, (short) 3, (short) 2,
+            (short) 3, (short) 4, (short) 2, (short) 3},
+        new short[] { (short) 2, (short) 3, (short) 4}
+    ));
+    assertEquals(1, Shorts.indexOf(
+        new short[] { (short) 2, (short) 2, (short) 3,
+            (short) 4, (short) 2, (short) 3, (short) 4},
+        new short[] { (short) 2, (short) 3, (short) 4}
+    ));
+    assertEquals(-1, Shorts.indexOf(
+        new short[] { (short) 4, (short) 3, (short) 2},
+        new short[] { (short) 2, (short) 3, (short) 4}
+    ));
+  }
+
+  public void testLastIndexOf() {
+    assertEquals(-1, Shorts.lastIndexOf(EMPTY, (short) 1));
+    assertEquals(-1, Shorts.lastIndexOf(ARRAY1, (short) 2));
+    assertEquals(-1, Shorts.lastIndexOf(ARRAY234, (short) 1));
+    assertEquals(0, Shorts.lastIndexOf(
+        new short[] {(short) -1}, (short) -1));
+    assertEquals(0, Shorts.lastIndexOf(ARRAY234, (short) 2));
+    assertEquals(1, Shorts.lastIndexOf(ARRAY234, (short) 3));
+    assertEquals(2, Shorts.lastIndexOf(ARRAY234, (short) 4));
+    assertEquals(3, Shorts.lastIndexOf(
+        new short[] { (short) 2, (short) 3, (short) 2, (short) 3 },
+        (short) 3));
+  }
+
+  public void testMax_noArgs() {
+    try {
+      Shorts.max();
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  public void testMax() {
+    assertEquals(LEAST, Shorts.max(LEAST));
+    assertEquals(GREATEST, Shorts.max(GREATEST));
+    assertEquals((short) 9, Shorts.max(
+        (short) 8, (short) 6, (short) 7,
+        (short) 5, (short) 3, (short) 0, (short) 9));
+  }
+
+  public void testMin_noArgs() {
+    try {
+      Shorts.min();
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  public void testMin() {
+    assertEquals(LEAST, Shorts.min(LEAST));
+    assertEquals(GREATEST, Shorts.min(GREATEST));
+    assertEquals((short) 0, Shorts.min(
+        (short) 8, (short) 6, (short) 7,
+        (short) 5, (short) 3, (short) 0, (short) 9));
+  }
+
+  public void testConcat() {
+    assertTrue(Arrays.equals(EMPTY, Shorts.concat()));
+    assertTrue(Arrays.equals(EMPTY, Shorts.concat(EMPTY)));
+    assertTrue(Arrays.equals(EMPTY, Shorts.concat(EMPTY, EMPTY, EMPTY)));
+    assertTrue(Arrays.equals(ARRAY1, Shorts.concat(ARRAY1)));
+    assertNotSame(ARRAY1, Shorts.concat(ARRAY1));
+    assertTrue(Arrays.equals(ARRAY1, Shorts.concat(EMPTY, ARRAY1, EMPTY)));
+    assertTrue(Arrays.equals(
+        new short[] {(short) 1, (short) 1, (short) 1},
+        Shorts.concat(ARRAY1, ARRAY1, ARRAY1)));
+    assertTrue(Arrays.equals(
+        new short[] {(short) 1, (short) 2, (short) 3, (short) 4},
+        Shorts.concat(ARRAY1, ARRAY234)));
+  }
+
+  @GwtIncompatible("Shorts.toByteArray")
+  public void testToByteArray() {
+    assertTrue(Arrays.equals(
+        new byte[] {0x23, 0x45}, Shorts.toByteArray((short) 0x2345)));
+    assertTrue(Arrays.equals(
+        new byte[] {(byte) 0xFE, (byte) 0xDC},
+        Shorts.toByteArray((short) 0xFEDC)));
+  }
+
+  @GwtIncompatible("Shorts.fromByteArray")
+  public void testFromByteArray() {
+    assertEquals((short) 0x2345,
+        Shorts.fromByteArray(new byte[] {0x23, 0x45}));
+    assertEquals((short) 0xFEDC, Shorts.fromByteArray(
+        new byte[] {(byte) 0xFE, (byte) 0xDC}));
+
+    try {
+      Shorts.fromByteArray(new byte[] {0x01});
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  @GwtIncompatible("Shorts.fromBytes")
+  public void testFromBytes() {
+    assertEquals((short) 0x2345, Shorts.fromBytes((byte) 0x23, (byte) 0x45));
+    assertEquals((short) 0xFEDC, Shorts.fromBytes((byte) 0xFE, (byte) 0xDC));
+  }
+
+  @GwtIncompatible("Shorts.fromByteArray, Shorts.toByteArray")
+  public void testByteArrayRoundTrips() {
+    Random r = new Random(5);
+    byte[] b = new byte[Shorts.BYTES];
+
+    // total overkill, but, it takes 0.1 sec so why not...
+    for (int i = 0; i < 10000; i++) {
+      short num = (short) r.nextInt();
+      assertEquals(num, Shorts.fromByteArray(Shorts.toByteArray(num)));
+
+      r.nextBytes(b);
+      assertTrue(Arrays.equals(b,
+          Shorts.toByteArray(Shorts.fromByteArray(b))));
+    }
+  }
+
+  public void testEnsureCapacity() {
+    assertSame(EMPTY, Shorts.ensureCapacity(EMPTY, 0, 1));
+    assertSame(ARRAY1, Shorts.ensureCapacity(ARRAY1, 0, 1));
+    assertSame(ARRAY1, Shorts.ensureCapacity(ARRAY1, 1, 1));
+    assertTrue(Arrays.equals(
+        new short[] {(short) 1, (short) 0, (short) 0},
+        Shorts.ensureCapacity(ARRAY1, 2, 1)));
+  }
+
+  public void testEnsureCapacity_fail() {
+    try {
+      Shorts.ensureCapacity(ARRAY1, -1, 1);
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+    try {
+      // notice that this should even fail when no growth was needed
+      Shorts.ensureCapacity(ARRAY1, 1, -1);
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  public void testJoin() {
+    assertEquals("", Shorts.join(",", EMPTY));
+    assertEquals("1", Shorts.join(",", ARRAY1));
+    assertEquals("1,2", Shorts.join(",", (short) 1, (short) 2));
+    assertEquals("123",
+        Shorts.join("", (short) 1, (short) 2, (short) 3));
+  }
+
+  public void testLexicographicalComparator() {
+    List<short[]> ordered = Arrays.asList(
+        new short[] {},
+        new short[] {LEAST},
+        new short[] {LEAST, LEAST},
+        new short[] {LEAST, (short) 1},
+        new short[] {(short) 1},
+        new short[] {(short) 1, LEAST},
+        new short[] {GREATEST, GREATEST - (short) 1},
+        new short[] {GREATEST, GREATEST},
+        new short[] {GREATEST, GREATEST, GREATEST});
+
+    Comparator<short[]> comparator = Shorts.lexicographicalComparator();
+    Helpers.testComparator(comparator, ordered);
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testLexicographicalComparatorSerializable() {
+    Comparator<short[]> comparator = Shorts.lexicographicalComparator();
+    assertSame(comparator, SerializableTester.reserialize(comparator));
+  }
+
+  public void testToArray() {
+    // need explicit type parameter to avoid javac warning!?
+    List<Short> none = Arrays.<Short>asList();
+    assertTrue(Arrays.equals(EMPTY, Shorts.toArray(none)));
+
+    List<Short> one = Arrays.asList((short) 1);
+    assertTrue(Arrays.equals(ARRAY1, Shorts.toArray(one)));
+
+    short[] array = {(short) 0, (short) 1, (short) 3};
+
+    List<Short> three = Arrays.asList((short) 0, (short) 1, (short) 3);
+    assertTrue(Arrays.equals(array, Shorts.toArray(three)));
+
+    assertTrue(Arrays.equals(array, Shorts.toArray(Shorts.asList(array))));
+  }
+
+  public void testToArray_threadSafe() {
+    for (int delta : new int[] { +1, 0, -1 }) {
+      for (int i = 0; i < VALUES.length; i++) {
+        List<Short> list = Shorts.asList(VALUES).subList(0, i);
+        Collection<Short> misleadingSize =
+            Helpers.misleadingSizeCollection(delta);
+        misleadingSize.addAll(list);
+        short[] arr = Shorts.toArray(misleadingSize);
+        assertEquals(i, arr.length);
+        for (int j = 0; j < i; j++) {
+          assertEquals(VALUES[j], arr[j]);
+        }
+      }
+    }
+  }
+
+  public void testToArray_withNull() {
+    List<Short> list = Arrays.asList((short) 0, (short) 1, null);
+    try {
+      Shorts.toArray(list);
+      fail();
+    } catch (NullPointerException expected) {
+    }
+  }
+
+  public void testAsList_isAView() {
+    short[] array = {(short) 0, (short) 1};
+    List<Short> list = Shorts.asList(array);
+    list.set(0, (short) 2);
+    assertTrue(Arrays.equals(new short[] {(short) 2, (short) 1}, array));
+    array[1] = (short) 3;
+    assertEquals(Arrays.asList((short) 2, (short) 3), list);
+  }
+
+  public void testAsList_toArray_roundTrip() {
+    short[] array = { (short) 0, (short) 1, (short) 2 };
+    List<Short> list = Shorts.asList(array);
+    short[] newArray = Shorts.toArray(list);
+
+    // Make sure it returned a copy
+    list.set(0, (short) 4);
+    assertTrue(Arrays.equals(
+        new short[] { (short) 0, (short) 1, (short) 2 }, newArray));
+    newArray[1] = (short) 5;
+    assertEquals((short) 1, (short) list.get(1));
+  }
+
+  // This test stems from a real bug found by andrewk
+  public void testAsList_subList_toArray_roundTrip() {
+    short[] array = { (short) 0, (short) 1, (short) 2, (short) 3 };
+    List<Short> list = Shorts.asList(array);
+    assertTrue(Arrays.equals(new short[] { (short) 1, (short) 2 },
+        Shorts.toArray(list.subList(1, 3))));
+    assertTrue(Arrays.equals(new short[] {},
+        Shorts.toArray(list.subList(2, 2))));
+  }
+
+  public void testAsListEmpty() {
+    assertSame(Collections.emptyList(), Shorts.asList(EMPTY));
+  }
+
+  @GwtIncompatible("NullPointerTester")
+  public void testNulls() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.setDefault(short[].class, new short[0]);
+    tester.testAllPublicStaticMethods(Shorts.class);
+  }
+}
diff --git a/guava-tests/test/com/google/common/primitives/SignedBytesTest.java b/guava-tests/test/com/google/common/primitives/SignedBytesTest.java
new file mode 100644
index 0000000..18863a5
--- /dev/null
+++ b/guava-tests/test/com/google/common/primitives/SignedBytesTest.java
@@ -0,0 +1,163 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.primitives;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.collect.testing.Helpers;
+import com.google.common.testing.NullPointerTester;
+import com.google.common.testing.SerializableTester;
+
+import junit.framework.TestCase;
+
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.List;
+
+/**
+ * Unit test for {@link SignedBytes}.
+ *
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible(emulated = true)
+@SuppressWarnings("cast") // redundant casts are intentional and harmless
+public class SignedBytesTest extends TestCase {
+  private static final byte[] EMPTY = {};
+  private static final byte[] ARRAY1 = {(byte) 1};
+
+  private static final byte LEAST = Byte.MIN_VALUE;
+  private static final byte GREATEST = Byte.MAX_VALUE;
+
+  private static final byte[] VALUES =
+      {LEAST, -1, 0, 1, GREATEST};
+
+  public void testCheckedCast() {
+    for (byte value : VALUES) {
+      assertEquals(value, SignedBytes.checkedCast((long) value));
+    }
+    assertCastFails(GREATEST + 1L);
+    assertCastFails(LEAST - 1L);
+    assertCastFails(Long.MAX_VALUE);
+    assertCastFails(Long.MIN_VALUE);
+  }
+
+  public void testSaturatedCast() {
+    for (byte value : VALUES) {
+      assertEquals(value, SignedBytes.saturatedCast((long) value));
+    }
+    assertEquals(GREATEST, SignedBytes.saturatedCast(GREATEST + 1L));
+    assertEquals(LEAST, SignedBytes.saturatedCast(LEAST - 1L));
+    assertEquals(GREATEST, SignedBytes.saturatedCast(Long.MAX_VALUE));
+    assertEquals(LEAST, SignedBytes.saturatedCast(Long.MIN_VALUE));
+  }
+
+  private void assertCastFails(long value) {
+    try {
+      SignedBytes.checkedCast(value);
+      fail("Cast to byte should have failed: " + value);
+    } catch (IllegalArgumentException ex) {
+      assertTrue(value + " not found in exception text: " + ex.getMessage(),
+          ex.getMessage().contains(String.valueOf(value)));
+    }
+  }
+
+  public void testCompare() {
+    for (byte x : VALUES) {
+      for (byte y : VALUES) {
+        // Only compare the sign of the result of compareTo().
+        int expected = Byte.valueOf(x).compareTo(y);
+        int actual = SignedBytes.compare(x, y);
+        if (expected == 0) {
+          assertEquals(x + ", " + y, expected, actual);
+        } else if (expected < 0) {
+          assertTrue(x + ", " + y + " (expected: " + expected + ", actual" + actual + ")",
+              actual < 0);
+        } else {
+          assertTrue(x + ", " + y + " (expected: " + expected + ", actual" + actual + ")",
+              actual > 0);
+        }
+      }
+    }
+  }
+
+  public void testMax_noArgs() {
+    try {
+      SignedBytes.max();
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  public void testMax() {
+    assertEquals(LEAST, SignedBytes.max(LEAST));
+    assertEquals(GREATEST, SignedBytes.max(GREATEST));
+    assertEquals((byte) 127, SignedBytes.max(
+        (byte) 0, (byte) -128, (byte) -1, (byte) 127, (byte) 1));
+  }
+
+  public void testMin_noArgs() {
+    try {
+      SignedBytes.min();
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  public void testMin() {
+    assertEquals(LEAST, SignedBytes.min(LEAST));
+    assertEquals(GREATEST, SignedBytes.min(GREATEST));
+    assertEquals((byte) -128, SignedBytes.min(
+        (byte) 0, (byte) -128, (byte) -1, (byte) 127, (byte) 1));
+  }
+
+  public void testJoin() {
+    assertEquals("", SignedBytes.join(",", EMPTY));
+    assertEquals("1", SignedBytes.join(",", ARRAY1));
+    assertEquals("1,2", SignedBytes.join(",", (byte) 1, (byte) 2));
+    assertEquals("123", SignedBytes.join("", (byte) 1, (byte) 2, (byte) 3));
+    assertEquals("-128,-1", SignedBytes.join(",", (byte) -128, (byte) -1));
+  }
+
+  public void testLexicographicalComparator() {
+    List<byte[]> ordered = Arrays.asList(
+        new byte[] {},
+        new byte[] {LEAST},
+        new byte[] {LEAST, LEAST},
+        new byte[] {LEAST, (byte) 1},
+        new byte[] {(byte) 1},
+        new byte[] {(byte) 1, LEAST},
+        new byte[] {GREATEST, GREATEST - (byte) 1},
+        new byte[] {GREATEST, GREATEST},
+        new byte[] {GREATEST, GREATEST, GREATEST});
+
+    Comparator<byte[]> comparator = SignedBytes.lexicographicalComparator();
+    Helpers.testComparator(comparator, ordered);
+  }
+
+  @GwtIncompatible("SerializableTester")
+  public void testLexicographicalComparatorSerializable() {
+    Comparator<byte[]> comparator = SignedBytes.lexicographicalComparator();
+    assertSame(comparator, SerializableTester.reserialize(comparator));
+  }
+
+  @GwtIncompatible("NullPointerTester")
+  public void testNulls() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.setDefault(byte[].class, new byte[0]);
+    tester.testAllPublicStaticMethods(SignedBytes.class);
+  }
+}
diff --git a/guava-tests/test/com/google/common/primitives/UnsignedBytesTest.java b/guava-tests/test/com/google/common/primitives/UnsignedBytesTest.java
new file mode 100644
index 0000000..88ef454
--- /dev/null
+++ b/guava-tests/test/com/google/common/primitives/UnsignedBytesTest.java
@@ -0,0 +1,172 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.primitives;
+
+import com.google.common.collect.testing.Helpers;
+import com.google.common.testing.NullPointerTester;
+import com.google.common.testing.SerializableTester;
+
+import junit.framework.TestCase;
+
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.List;
+
+/**
+ * Unit test for {@link UnsignedBytes}.
+ *
+ * @author Kevin Bourrillion
+ */
+public class UnsignedBytesTest extends TestCase {
+  private static final byte LEAST = 0;
+  private static final byte GREATEST = (byte) 255;
+
+  // Only in this class, VALUES must be strictly ascending
+  private static final byte[] VALUES =
+      {LEAST, 127, (byte) 128, (byte) 129, GREATEST};
+
+  public void testToInt() {
+    assertEquals(0, UnsignedBytes.toInt((byte) 0));
+    assertEquals(1, UnsignedBytes.toInt((byte) 1));
+    assertEquals(127, UnsignedBytes.toInt((byte) 127));
+    assertEquals(128, UnsignedBytes.toInt((byte) -128));
+    assertEquals(129, UnsignedBytes.toInt((byte) -127));
+    assertEquals(255, UnsignedBytes.toInt((byte) -1));
+  }
+
+  public void testCheckedCast() {
+    for (byte value : VALUES) {
+      assertEquals(value,
+          UnsignedBytes.checkedCast(UnsignedBytes.toInt(value)));
+    }
+    assertCastFails(256L);
+    assertCastFails(-1L);
+    assertCastFails(Long.MAX_VALUE);
+    assertCastFails(Long.MIN_VALUE);
+  }
+
+  public void testSaturatedCast() {
+    for (byte value : VALUES) {
+      assertEquals(value,
+          UnsignedBytes.saturatedCast(UnsignedBytes.toInt(value)));
+    }
+    assertEquals(GREATEST, UnsignedBytes.saturatedCast(256L));
+    assertEquals(LEAST, UnsignedBytes.saturatedCast(-1L));
+    assertEquals(GREATEST, UnsignedBytes.saturatedCast(Long.MAX_VALUE));
+    assertEquals(LEAST, UnsignedBytes.saturatedCast(Long.MIN_VALUE));
+  }
+
+  private void assertCastFails(long value) {
+    try {
+      UnsignedBytes.checkedCast(value);
+      fail("Cast to byte should have failed: " + value);
+    } catch (IllegalArgumentException ex) {
+      assertTrue(value + " not found in exception text: " + ex.getMessage(),
+          ex.getMessage().contains(String.valueOf(value)));
+    }
+  }
+
+  public void testCompare() {
+    // This is the only ordering for primitives that does not have a
+    // corresponding Comparable wrapper in java.lang.
+    for (int i = 0; i < VALUES.length; i++) {
+      for (int j = 0; j < VALUES.length; j++) {
+        byte x = VALUES[i];
+        byte y = VALUES[j];
+        // note: spec requires only that the sign is the same
+        assertEquals(x + ", " + y,
+                     Math.signum(UnsignedBytes.compare(x, y)),
+                     Math.signum(Ints.compare(i, j)));
+      }
+    }
+  }
+
+  public void testMax_noArgs() {
+    try {
+      UnsignedBytes.max();
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  public void testMax() {
+    assertEquals(LEAST, UnsignedBytes.max(LEAST));
+    assertEquals(GREATEST, UnsignedBytes.max(GREATEST));
+    assertEquals((byte) 255, UnsignedBytes.max(
+        (byte) 0, (byte) -128, (byte) -1, (byte) 127, (byte) 1));
+  }
+
+  public void testMin_noArgs() {
+    try {
+      UnsignedBytes.min();
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  public void testMin() {
+    assertEquals(LEAST, UnsignedBytes.min(LEAST));
+    assertEquals(GREATEST, UnsignedBytes.min(GREATEST));
+    assertEquals((byte) 0, UnsignedBytes.min(
+        (byte) 0, (byte) -128, (byte) -1, (byte) 127, (byte) 1));
+  }
+
+  public void testJoin() {
+    assertEquals("", UnsignedBytes.join(",", new byte[] {}));
+    assertEquals("1", UnsignedBytes.join(",", new byte[] {(byte) 1}));
+    assertEquals("1,2", UnsignedBytes.join(",", (byte) 1, (byte) 2));
+    assertEquals("123", UnsignedBytes.join("", (byte) 1, (byte) 2, (byte) 3));
+    assertEquals("128,255", UnsignedBytes.join(",", (byte) 128, (byte) -1));
+  }
+
+  public void testLexicographicalComparatorDefaultChoice() {
+    Comparator<byte[]> defaultComparator =
+        UnsignedBytes.lexicographicalComparator();
+    Comparator<byte[]> unsafeComparator =
+        UnsignedBytes.LexicographicalComparatorHolder.UnsafeComparator.INSTANCE;
+    assertSame(defaultComparator, unsafeComparator);
+  }
+
+  public void testLexicographicalComparator() {
+    List<byte[]> ordered = Arrays.asList(
+        new byte[] {},
+        new byte[] {LEAST},
+        new byte[] {LEAST, LEAST},
+        new byte[] {LEAST, (byte) 1},
+        new byte[] {(byte) 1},
+        new byte[] {(byte) 1, LEAST},
+        new byte[] {GREATEST, GREATEST - (byte) 1},
+        new byte[] {GREATEST, GREATEST},
+        new byte[] {GREATEST, GREATEST, GREATEST});
+
+    // The Unsafe implementation if it's available. Otherwise, the Java implementation.
+    Comparator<byte[]> comparator = UnsignedBytes.lexicographicalComparator();
+    Helpers.testComparator(comparator, ordered);
+    assertSame(comparator, SerializableTester.reserialize(comparator));
+
+    // The Java implementation.
+    Comparator<byte[]> javaImpl = UnsignedBytes.lexicographicalComparatorJavaImpl();
+    Helpers.testComparator(javaImpl, ordered);
+    assertSame(javaImpl, SerializableTester.reserialize(javaImpl));
+  }
+
+  public void testNulls() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.setDefault(byte[].class, new byte[0]);
+    tester.testAllPublicStaticMethods(UnsignedBytes.class);
+  }
+}
diff --git a/guava-tests/test/com/google/common/primitives/UnsignedIntegerTest.java b/guava-tests/test/com/google/common/primitives/UnsignedIntegerTest.java
new file mode 100644
index 0000000..fece9c9
--- /dev/null
+++ b/guava-tests/test/com/google/common/primitives/UnsignedIntegerTest.java
@@ -0,0 +1,236 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ * 
+ * Licensed 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.
+ */
+
+package com.google.common.primitives;
+
+import junit.framework.TestCase;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.testing.EqualsTester;
+import com.google.common.testing.NullPointerTester;
+import com.google.common.testing.SerializableTester;
+
+/**
+ * Tests for {@code UnsignedInteger}.
+ * 
+ * @author Louis Wasserman
+ */
+@GwtCompatible(emulated = true)
+public class UnsignedIntegerTest extends TestCase {
+  private static final ImmutableSet<Integer> TEST_INTS;
+
+  private static int force32(int value) {
+    // GWT doesn't overflow values to make them 32-bit, so we need to force it.
+    return value & 0xffffffff;
+  }
+
+  static {
+    ImmutableSet.Builder<Integer> testIntsBuilder = ImmutableSet.builder();
+    for (int i = -3; i <= 3; i++) {
+      testIntsBuilder.add(i).add(-i).add(force32(Integer.MIN_VALUE + i))
+          .add(force32(Integer.MAX_VALUE + i));
+    }
+    TEST_INTS = testIntsBuilder.build();
+  }
+
+  public void testAsUnsignedAndIntValueAreInverses() {
+    for (int value : TEST_INTS) {
+      assertEquals(UnsignedInts.toString(value), value, UnsignedInteger.asUnsigned(value)
+          .intValue());
+    }
+  }
+
+  public void testAsUnsignedLongValue() {
+    for (int value : TEST_INTS) {
+      long expected = value & 0xffffffffL;
+      assertEquals(UnsignedInts.toString(value), expected, UnsignedInteger.asUnsigned(value)
+          .longValue());
+    }
+  }
+
+  public void testToString() {
+    for (int value : TEST_INTS) {
+      UnsignedInteger unsignedValue = UnsignedInteger.asUnsigned(value);
+      assertEquals(unsignedValue.bigIntegerValue().toString(), unsignedValue.toString());
+    }
+  }
+
+  @GwtIncompatible("too slow")
+  public void testToStringRadix() {
+    for (int radix = Character.MIN_RADIX; radix <= Character.MAX_RADIX; radix++) {
+      for (int l : TEST_INTS) {
+        UnsignedInteger value = UnsignedInteger.asUnsigned(l);
+        assertEquals(value.bigIntegerValue().toString(radix), value.toString(radix));
+      }
+    }
+  }
+
+  public void testToStringRadixQuick() {
+    int[] radices = {2, 3, 5, 7, 10, 12, 16, 21, 31, 36};
+    for (int radix : radices) {
+      for (int l : TEST_INTS) {
+        UnsignedInteger value = UnsignedInteger.asUnsigned(l);
+        assertEquals(value.bigIntegerValue().toString(radix), value.toString(radix));
+      }
+    }
+  }
+
+  public void testFloatValue() {
+    for (int value : TEST_INTS) {
+      UnsignedInteger unsignedValue = UnsignedInteger.asUnsigned(value);
+      assertEquals(unsignedValue.bigIntegerValue().floatValue(), unsignedValue.floatValue());
+    }
+  }
+
+  public void testDoubleValue() {
+    for (int value : TEST_INTS) {
+      UnsignedInteger unsignedValue = UnsignedInteger.asUnsigned(value);
+      assertEquals(unsignedValue.bigIntegerValue().doubleValue(), unsignedValue.doubleValue());
+    }
+  }
+
+  public void testAdd() {
+    for (int a : TEST_INTS) {
+      for (int b : TEST_INTS) {
+        UnsignedInteger aUnsigned = UnsignedInteger.asUnsigned(a);
+        UnsignedInteger bUnsigned = UnsignedInteger.asUnsigned(b);
+        int expected = aUnsigned.bigIntegerValue().add(bUnsigned.bigIntegerValue()).intValue();
+        UnsignedInteger unsignedSum = aUnsigned.add(bUnsigned);
+        assertEquals(expected, unsignedSum.intValue());
+      }
+    }
+  }
+
+  public void testSubtract() {
+    for (int a : TEST_INTS) {
+      for (int b : TEST_INTS) {
+        UnsignedInteger aUnsigned = UnsignedInteger.asUnsigned(a);
+        UnsignedInteger bUnsigned = UnsignedInteger.asUnsigned(b);
+        int expected =
+            force32(aUnsigned.bigIntegerValue().subtract(bUnsigned.bigIntegerValue()).intValue());
+        UnsignedInteger unsignedSub = aUnsigned.subtract(bUnsigned);
+        assertEquals(expected, unsignedSub.intValue());
+      }
+    }
+  }
+
+  @GwtIncompatible("multiply")
+  public void testMultiply() {
+    for (int a : TEST_INTS) {
+      for (int b : TEST_INTS) {
+        UnsignedInteger aUnsigned = UnsignedInteger.asUnsigned(a);
+        UnsignedInteger bUnsigned = UnsignedInteger.asUnsigned(b);
+        int expected =
+            force32(aUnsigned.bigIntegerValue().multiply(bUnsigned.bigIntegerValue()).intValue());
+        UnsignedInteger unsignedMul = aUnsigned.multiply(bUnsigned);
+        assertEquals(aUnsigned + " * " + bUnsigned, expected, unsignedMul.intValue());
+      }
+    }
+  }
+
+  public void testDivide() {
+    for (int a : TEST_INTS) {
+      for (int b : TEST_INTS) {
+        if (b != 0) {
+          UnsignedInteger aUnsigned = UnsignedInteger.asUnsigned(a);
+          UnsignedInteger bUnsigned = UnsignedInteger.asUnsigned(b);
+          int expected =
+              aUnsigned.bigIntegerValue().divide(bUnsigned.bigIntegerValue()).intValue();
+          UnsignedInteger unsignedDiv = aUnsigned.divide(bUnsigned);
+          assertEquals(expected, unsignedDiv.intValue());
+        }
+      }
+    }
+  }
+
+  public void testDivideByZeroThrows() {
+    for (int a : TEST_INTS) {
+      try {
+        UnsignedInteger.asUnsigned(a).divide(UnsignedInteger.ZERO);
+        fail("Expected ArithmeticException");
+      } catch (ArithmeticException expected) {}
+    }
+  }
+
+  public void testRemainder() {
+    for (int a : TEST_INTS) {
+      for (int b : TEST_INTS) {
+        if (b != 0) {
+          UnsignedInteger aUnsigned = UnsignedInteger.asUnsigned(a);
+          UnsignedInteger bUnsigned = UnsignedInteger.asUnsigned(b);
+          int expected =
+              aUnsigned.bigIntegerValue().remainder(bUnsigned.bigIntegerValue()).intValue();
+          UnsignedInteger unsignedRem = aUnsigned.remainder(bUnsigned);
+          assertEquals(expected, unsignedRem.intValue());
+        }
+      }
+    }
+  }
+
+  public void testRemainderByZero() {
+    for (int a : TEST_INTS) {
+      try {
+        UnsignedInteger.asUnsigned(a).remainder(UnsignedInteger.ZERO);
+        fail("Expected ArithmeticException");
+      } catch (ArithmeticException expected) {}
+    }
+  }
+
+  public void testCompare() {
+    for (int a : TEST_INTS) {
+      for (int b : TEST_INTS) {
+        UnsignedInteger aUnsigned = UnsignedInteger.asUnsigned(a);
+        UnsignedInteger bUnsigned = UnsignedInteger.asUnsigned(b);
+        assertEquals(aUnsigned.bigIntegerValue().compareTo(bUnsigned.bigIntegerValue()),
+            aUnsigned.compareTo(bUnsigned));
+      }
+    }
+  }
+
+  @GwtIncompatible("too slow")
+  public void testEqualsAndValueOf() {
+    EqualsTester equalsTester = new EqualsTester();
+    for (int a : TEST_INTS) {
+      long value = a & 0xffffffffL;
+      equalsTester.addEqualityGroup(UnsignedInteger.asUnsigned(a), UnsignedInteger.valueOf(value),
+          UnsignedInteger.valueOf(Long.toString(value)),
+          UnsignedInteger.valueOf(Long.toString(value, 16), 16));
+    }
+    equalsTester.testEquals();
+  }
+
+  public void testIntValue() {
+    for (int a : TEST_INTS) {
+      UnsignedInteger aUnsigned = UnsignedInteger.asUnsigned(a);
+      int intValue = aUnsigned.bigIntegerValue().intValue();
+      assertEquals(intValue, aUnsigned.intValue());
+    }
+  }
+
+  @GwtIncompatible("serialization")
+  public void testSerialization() {
+    for (int a : TEST_INTS) {
+      SerializableTester.reserializeAndAssert(UnsignedInteger.asUnsigned(a));
+    }
+  }
+
+  @GwtIncompatible("NullPointerTester")
+  public void testNulls() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.setDefault(UnsignedInteger.class, UnsignedInteger.ONE);
+    tester.testAllPublicStaticMethods(UnsignedInteger.class);
+  }
+}
diff --git a/guava-tests/test/com/google/common/primitives/UnsignedIntsTest.java b/guava-tests/test/com/google/common/primitives/UnsignedIntsTest.java
new file mode 100644
index 0000000..4ab36de
--- /dev/null
+++ b/guava-tests/test/com/google/common/primitives/UnsignedIntsTest.java
@@ -0,0 +1,174 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ * 
+ * Licensed 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.
+ */
+
+package com.google.common.primitives;
+
+import java.util.Random;
+
+import junit.framework.TestCase;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.testing.NullPointerTester;
+
+/**
+ * Tests for UnsignedInts
+ * 
+ * @author Louis Wasserman
+ */
+@GwtCompatible(emulated = true)
+public class UnsignedIntsTest extends TestCase {
+  private static final long[] UNSIGNED_INTS = {
+      0L,
+      1L,
+      2L,
+      3L,
+      0x12345678L,
+      0x5a4316b8L,
+      0x6cf78a4bL,
+      0xff1a618bL,
+      0xfffffffdL,
+      0xfffffffeL,
+      0xffffffffL};
+
+  public void testToLong() {
+    for (long a : UNSIGNED_INTS) {
+      assertEquals(a, UnsignedInts.toLong((int) a));
+    }
+  }
+
+  public void testCompare() {
+    for (long a : UNSIGNED_INTS) {
+      for (long b : UNSIGNED_INTS) {
+        int cmpAsLongs = Longs.compare(a, b);
+        int cmpAsUInt = UnsignedInts.compare((int) a, (int) b);
+        assertEquals(Integer.signum(cmpAsLongs), Integer.signum(cmpAsUInt));
+      }
+    }
+  }
+
+  public void testDivide() {
+    for (long a : UNSIGNED_INTS) {
+      for (long b : UNSIGNED_INTS) {
+        try {
+          assertEquals((int) (a / b), UnsignedInts.divide((int) a, (int) b));
+          assertFalse(b == 0);
+        } catch (ArithmeticException e) {
+          assertEquals(0, b);
+        }
+      }
+    }
+  }
+
+  public void testRemainder() {
+    for (long a : UNSIGNED_INTS) {
+      for (long b : UNSIGNED_INTS) {
+        try {
+          assertEquals((int) (a % b), UnsignedInts.remainder((int) a, (int) b));
+          assertFalse(b == 0);
+        } catch (ArithmeticException e) {
+          assertEquals(0, b);
+        }
+      }
+    }
+  }
+
+  @GwtIncompatible("Too slow in GWT (~3min fully optimized)")
+  public void testDivideRemainderEuclideanProperty() {
+    // Use a seed so that the test is deterministic:
+    Random r = new Random(0L);
+    for (int i = 0; i < 1000000; i++) {
+      int dividend = r.nextInt();
+      int divisor = r.nextInt();
+      // Test that the Euclidean property is preserved:
+      assertTrue(dividend
+          - (divisor * UnsignedInts.divide(dividend, divisor) + UnsignedInts.remainder(dividend,
+              divisor)) == 0);
+    }
+  }
+
+  public void testParseInt() {
+    try {
+      for (long a : UNSIGNED_INTS) {
+        assertEquals((int) a, UnsignedInts.parseUnsignedInt(Long.toString(a)));
+      }
+    } catch (NumberFormatException e) {
+      fail(e.getMessage());
+    }
+
+    try {
+      UnsignedInts.parseUnsignedInt(Long.toString(1L << 32));
+      fail("Expected NumberFormatException");
+    } catch (NumberFormatException expected) {}
+  }
+
+  public void testParseLongWithRadix() throws NumberFormatException {
+    for (long a : UNSIGNED_INTS) {
+      for (int radix = Character.MIN_RADIX; radix <= Character.MAX_RADIX; radix++) {
+        assertEquals((int) a, UnsignedInts.parseUnsignedInt(Long.toString(a, radix), radix));
+      }
+    }
+
+    // loops through all legal radix values.
+    for (int radix = Character.MIN_RADIX; radix <= Character.MAX_RADIX; radix++) {
+      // tests can successfully parse a number string with this radix.
+      String maxAsString = Long.toString((1L << 32) - 1, radix);
+      assertEquals(-1, UnsignedInts.parseUnsignedInt(maxAsString, radix));
+
+      try {
+        // tests that we get exception whre an overflow would occur.
+        long overflow = 1L << 32;
+        String overflowAsString = Long.toString(overflow, radix);
+        UnsignedInts.parseUnsignedInt(overflowAsString, radix);
+        fail();
+      } catch (NumberFormatException expected) {}
+    }
+  }
+
+  public void testParseLongThrowsExceptionForInvalidRadix() {
+    // Valid radix values are Character.MIN_RADIX to Character.MAX_RADIX,
+    // inclusive.
+    try {
+      UnsignedInts.parseUnsignedInt("0", Character.MIN_RADIX - 1);
+      fail();
+    } catch (NumberFormatException expected) {}
+
+    try {
+      UnsignedInts.parseUnsignedInt("0", Character.MAX_RADIX + 1);
+      fail();
+    } catch (NumberFormatException expected) {}
+
+    // The radix is used as an array index, so try a negative value.
+    try {
+      UnsignedInts.parseUnsignedInt("0", -1);
+      fail();
+    } catch (NumberFormatException expected) {}
+  }
+
+  public void testToString() {
+    int[] bases = {2, 5, 7, 8, 10, 16};
+    for (long a : UNSIGNED_INTS) {
+      for (int base : bases) {
+        assertEquals(UnsignedInts.toString((int) a, base), Long.toString(a, base));
+      }
+    }
+  }
+
+  @GwtIncompatible("NullPointerTester")
+  public void testNulls() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.setDefault(int[].class, new int[0]);
+    tester.testAllPublicStaticMethods(UnsignedInts.class);
+  }
+}
diff --git a/guava-tests/test/com/google/common/primitives/UnsignedLongTest.java b/guava-tests/test/com/google/common/primitives/UnsignedLongTest.java
new file mode 100644
index 0000000..81f1644
--- /dev/null
+++ b/guava-tests/test/com/google/common/primitives/UnsignedLongTest.java
@@ -0,0 +1,249 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.primitives;
+
+import java.math.BigInteger;
+
+import junit.framework.TestCase;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.testing.EqualsTester;
+import com.google.common.testing.NullPointerTester;
+import com.google.common.testing.SerializableTester;
+
+/**
+ * Tests for {@code UnsignedLong}.
+ *
+ * @author Louis Wasserman
+ */
+@GwtCompatible(emulated = true)
+public class UnsignedLongTest extends TestCase {
+  private static final ImmutableSet<Long> TEST_LONGS;
+
+  static {
+    ImmutableSet.Builder<Long> testLongsBuilder = ImmutableSet.builder();
+    for (long i = -3; i <= 3; i++) {
+      testLongsBuilder
+          .add(i)
+          .add(Long.MAX_VALUE + i)
+          .add(Long.MIN_VALUE + i)
+          .add(Integer.MIN_VALUE + i)
+          .add(Integer.MAX_VALUE + i);
+    }
+    TEST_LONGS = testLongsBuilder.build();
+  }
+
+  public void testAsUnsignedAndLongValueAreInverses() {
+    for (long value : TEST_LONGS) {
+      assertEquals(
+          UnsignedLongs.toString(value), value, UnsignedLong.asUnsigned(value).longValue());
+    }
+  }
+
+  public void testAsUnsignedBigIntegerValue() {
+    for (long value : TEST_LONGS) {
+      BigInteger expected = (value >= 0)
+          ? BigInteger.valueOf(value)
+          : BigInteger.valueOf(value).add(BigInteger.ZERO.setBit(64));
+      assertEquals(UnsignedLongs.toString(value), expected,
+          UnsignedLong.asUnsigned(value).bigIntegerValue());
+    }
+  }
+
+  public void testToString() {
+    for (long value : TEST_LONGS) {
+      UnsignedLong unsignedValue = UnsignedLong.asUnsigned(value);
+      assertEquals(unsignedValue.bigIntegerValue().toString(), unsignedValue.toString());
+    }
+  }
+
+  @GwtIncompatible("too slow")
+  public void testToStringRadix() {
+    for (int radix = Character.MIN_RADIX; radix <= Character.MAX_RADIX; radix++) {
+      for (long l : TEST_LONGS) {
+        UnsignedLong value = UnsignedLong.asUnsigned(l);
+        assertEquals(value.bigIntegerValue().toString(radix), value.toString(radix));
+      }
+    }
+  }
+
+  public void testToStringRadixQuick() {
+    int[] radices = {2, 3, 5, 7, 10, 12, 16, 21, 31, 36};
+    for (int radix : radices) {
+      for (long l : TEST_LONGS) {
+        UnsignedLong value = UnsignedLong.asUnsigned(l);
+        assertEquals(value.bigIntegerValue().toString(radix), value.toString(radix));
+      }
+    }
+  }
+
+  public void testFloatValue() {
+    for (long value : TEST_LONGS) {
+      UnsignedLong unsignedValue = UnsignedLong.asUnsigned(value);
+      assertEquals(unsignedValue.bigIntegerValue().floatValue(), unsignedValue.floatValue());
+    }
+  }
+
+  public void testDoubleValue() {
+    for (long value : TEST_LONGS) {
+      UnsignedLong unsignedValue = UnsignedLong.asUnsigned(value);
+      assertEquals(unsignedValue.bigIntegerValue().doubleValue(), unsignedValue.doubleValue());
+    }
+  }
+
+  public void testAdd() {
+    for (long a : TEST_LONGS) {
+      for (long b : TEST_LONGS) {
+        UnsignedLong aUnsigned = UnsignedLong.asUnsigned(a);
+        UnsignedLong bUnsigned = UnsignedLong.asUnsigned(b);
+        long expected = aUnsigned
+            .bigIntegerValue()
+            .add(bUnsigned.bigIntegerValue())
+            .longValue();
+        UnsignedLong unsignedSum = aUnsigned.add(bUnsigned);
+        assertEquals(expected, unsignedSum.longValue());
+      }
+    }
+  }
+
+  public void testSubtract() {
+    for (long a : TEST_LONGS) {
+      for (long b : TEST_LONGS) {
+        UnsignedLong aUnsigned = UnsignedLong.asUnsigned(a);
+        UnsignedLong bUnsigned = UnsignedLong.asUnsigned(b);
+        long expected = aUnsigned
+            .bigIntegerValue()
+            .subtract(bUnsigned.bigIntegerValue())
+            .longValue();
+        UnsignedLong unsignedSub = aUnsigned.subtract(bUnsigned);
+        assertEquals(expected, unsignedSub.longValue());
+      }
+    }
+  }
+
+  public void testMultiply() {
+    for (long a : TEST_LONGS) {
+      for (long b : TEST_LONGS) {
+        UnsignedLong aUnsigned = UnsignedLong.asUnsigned(a);
+        UnsignedLong bUnsigned = UnsignedLong.asUnsigned(b);
+        long expected = aUnsigned
+            .bigIntegerValue()
+            .multiply(bUnsigned.bigIntegerValue())
+            .longValue();
+        UnsignedLong unsignedMul = aUnsigned.multiply(bUnsigned);
+        assertEquals(expected, unsignedMul.longValue());
+      }
+    }
+  }
+
+  public void testDivide() {
+    for (long a : TEST_LONGS) {
+      for (long b : TEST_LONGS) {
+        if (b != 0) {
+          UnsignedLong aUnsigned = UnsignedLong.asUnsigned(a);
+          UnsignedLong bUnsigned = UnsignedLong.asUnsigned(b);
+          long expected = aUnsigned
+              .bigIntegerValue()
+              .divide(bUnsigned.bigIntegerValue())
+              .longValue();
+          UnsignedLong unsignedDiv = aUnsigned.divide(bUnsigned);
+          assertEquals(expected, unsignedDiv.longValue());
+        }
+      }
+    }
+  }
+
+  public void testDivideByZeroThrows() {
+    for (long a : TEST_LONGS) {
+      try {
+        UnsignedLong.asUnsigned(a).divide(UnsignedLong.ZERO);
+        fail("Expected ArithmeticException");
+      } catch (ArithmeticException expected) {}
+    }
+  }
+
+  public void testRemainder() {
+    for (long a : TEST_LONGS) {
+      for (long b : TEST_LONGS) {
+        if (b != 0) {
+          UnsignedLong aUnsigned = UnsignedLong.asUnsigned(a);
+          UnsignedLong bUnsigned = UnsignedLong.asUnsigned(b);
+          long expected = aUnsigned
+              .bigIntegerValue()
+              .remainder(bUnsigned.bigIntegerValue())
+              .longValue();
+          UnsignedLong unsignedRem = aUnsigned.remainder(bUnsigned);
+          assertEquals(expected, unsignedRem.longValue());
+        }
+      }
+    }
+  }
+
+  public void testRemainderByZero() {
+    for (long a : TEST_LONGS) {
+      try {
+        UnsignedLong.asUnsigned(a).remainder(UnsignedLong.ZERO);
+        fail("Expected ArithmeticException");
+      } catch (ArithmeticException expected) {}
+    }
+  }
+
+  public void testCompare() {
+    for (long a : TEST_LONGS) {
+      for (long b : TEST_LONGS) {
+        UnsignedLong aUnsigned = UnsignedLong.asUnsigned(a);
+        UnsignedLong bUnsigned = UnsignedLong.asUnsigned(b);
+        assertEquals(aUnsigned.bigIntegerValue().compareTo(bUnsigned.bigIntegerValue()),
+            aUnsigned.compareTo(bUnsigned));
+      }
+    }
+  }
+
+  @GwtIncompatible("too slow")
+  public void testEqualsAndValueOf() {
+    EqualsTester equalsTester = new EqualsTester();
+    for (long a : TEST_LONGS) {
+      BigInteger big =
+          (a >= 0) ? BigInteger.valueOf(a) : BigInteger.valueOf(a).add(BigInteger.ZERO.setBit(64));
+      equalsTester.addEqualityGroup(UnsignedLong.asUnsigned(a), UnsignedLong.valueOf(big),
+          UnsignedLong.valueOf(big.toString()), UnsignedLong.valueOf(big.toString(16), 16));
+    }
+    equalsTester.testEquals();
+  }
+
+  public void testIntValue() {
+    for (long a : TEST_LONGS) {
+      UnsignedLong aUnsigned = UnsignedLong.asUnsigned(a);
+      int intValue = aUnsigned.bigIntegerValue().intValue();
+      assertEquals(intValue, aUnsigned.intValue());
+    }
+  }
+
+  @GwtIncompatible("serialization")
+  public void testSerialization() {
+    for (long a : TEST_LONGS) {
+      SerializableTester.reserializeAndAssert(UnsignedLong.asUnsigned(a));
+    }
+  }
+
+  @GwtIncompatible("NullPointerTester")
+  public void testNulls() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.setDefault(UnsignedLong.class, UnsignedLong.ONE);
+    tester.testAllPublicStaticMethods(UnsignedLong.class);
+  }
+}
diff --git a/guava-tests/test/com/google/common/primitives/UnsignedLongsTest.java b/guava-tests/test/com/google/common/primitives/UnsignedLongsTest.java
new file mode 100644
index 0000000..5928f7e
--- /dev/null
+++ b/guava-tests/test/com/google/common/primitives/UnsignedLongsTest.java
@@ -0,0 +1,186 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ * 
+ * Licensed 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.
+ */
+
+package com.google.common.primitives;
+
+import static java.math.BigInteger.ONE;
+
+import java.math.BigInteger;
+import java.util.Random;
+
+import junit.framework.TestCase;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.testing.NullPointerTester;
+
+/**
+ * Tests for UnsignedLongs
+ * 
+ * @author Brian Milch
+ * @author Louis Wasserman
+ */
+@GwtCompatible(emulated = true)
+public class UnsignedLongsTest extends TestCase {
+
+  public void testCompare() {
+    // max value
+    assertTrue((UnsignedLongs.compare(0, 0xffffffffffffffffL) < 0));
+    assertTrue((UnsignedLongs.compare(0xffffffffffffffffL, 0) > 0));
+
+    // both with high bit set
+    assertTrue((UnsignedLongs.compare(0xff1a618b7f65ea12L, 0xffffffffffffffffL) < 0));
+    assertTrue((UnsignedLongs.compare(0xffffffffffffffffL, 0xff1a618b7f65ea12L) > 0));
+
+    // one with high bit set
+    assertTrue((UnsignedLongs.compare(0x5a4316b8c153ac4dL, 0xff1a618b7f65ea12L) < 0));
+    assertTrue((UnsignedLongs.compare(0xff1a618b7f65ea12L, 0x5a4316b8c153ac4dL) > 0));
+
+    // neither with high bit set
+    assertTrue((UnsignedLongs.compare(0x5a4316b8c153ac4dL, 0x6cf78a4b139a4e2aL) < 0));
+    assertTrue((UnsignedLongs.compare(0x6cf78a4b139a4e2aL, 0x5a4316b8c153ac4dL) > 0));
+
+    // same value
+    assertTrue((UnsignedLongs.compare(0xff1a618b7f65ea12L, 0xff1a618b7f65ea12L) == 0));
+  }
+
+  public void testDivide() {
+    assertEquals(2, UnsignedLongs.divide(14, 5));
+    assertEquals(0, UnsignedLongs.divide(0, 50));
+    assertEquals(1, UnsignedLongs.divide(0xfffffffffffffffeL, 0xfffffffffffffffdL));
+    assertEquals(0, UnsignedLongs.divide(0xfffffffffffffffdL, 0xfffffffffffffffeL));
+    assertEquals(281479271743488L, UnsignedLongs.divide(0xfffffffffffffffeL, 65535));
+    assertEquals(0x7fffffffffffffffL, UnsignedLongs.divide(0xfffffffffffffffeL, 2));
+    assertEquals(3689348814741910322L, UnsignedLongs.divide(0xfffffffffffffffeL, 5));
+  }
+
+  public void testRemainder() {
+    assertEquals(4, UnsignedLongs.remainder(14, 5));
+    assertEquals(0, UnsignedLongs.remainder(0, 50));
+    assertEquals(1, UnsignedLongs.remainder(0xfffffffffffffffeL, 0xfffffffffffffffdL));
+    assertEquals(0xfffffffffffffffdL,
+        UnsignedLongs.remainder(0xfffffffffffffffdL, 0xfffffffffffffffeL));
+    assertEquals(65534L, UnsignedLongs.remainder(0xfffffffffffffffeL, 65535));
+    assertEquals(0, UnsignedLongs.remainder(0xfffffffffffffffeL, 2));
+    assertEquals(4, UnsignedLongs.remainder(0xfffffffffffffffeL, 5));
+  }
+
+  @GwtIncompatible("Too slow in GWT (~3min fully optimized)")
+  public void testDivideRemainderEuclideanProperty() {
+    // Use a seed so that the test is deterministic:
+    Random r = new Random(0L);
+    for (int i = 0; i < 1000000; i++) {
+      long dividend = r.nextLong();
+      long divisor = r.nextLong();
+      // Test that the Euclidean property is preserved:
+      assertTrue(dividend - (divisor * UnsignedLongs.divide(dividend, divisor) 
+          + UnsignedLongs.remainder(dividend, divisor)) == 0);
+    }
+  }
+
+  public void testParseLong() {
+    try {
+      assertEquals(0xffffffffffffffffL, UnsignedLongs.parseUnsignedLong("18446744073709551615"));
+      assertEquals(0x7fffffffffffffffL, UnsignedLongs.parseUnsignedLong("9223372036854775807"));
+      assertEquals(0xff1a618b7f65ea12L, UnsignedLongs.parseUnsignedLong("18382112080831834642"));
+      assertEquals(0x5a4316b8c153ac4dL, UnsignedLongs.parseUnsignedLong("6504067269626408013"));
+      assertEquals(0x6cf78a4b139a4e2aL, UnsignedLongs.parseUnsignedLong("7851896530399809066"));
+    } catch (NumberFormatException e) {
+      fail(e.getMessage());
+    }
+
+    boolean overflowCaught = false;
+    try {
+      // One more than maximum value
+      UnsignedLongs.parseUnsignedLong("18446744073709551616");
+    } catch (NumberFormatException e) {
+      overflowCaught = true;
+    }
+    assertTrue(overflowCaught);
+  }
+
+  public void testParseLongWithRadix() throws NumberFormatException {
+    assertEquals(0xffffffffffffffffL, UnsignedLongs.parseUnsignedLong("ffffffffffffffff", 16));
+    assertEquals(0x1234567890abcdefL, UnsignedLongs.parseUnsignedLong("1234567890abcdef", 16));
+
+    BigInteger max = BigInteger.ZERO.setBit(64).subtract(ONE);
+    // loops through all legal radix values.
+    for (int radix = Character.MIN_RADIX; radix <= Character.MAX_RADIX; radix++) {
+      // tests can successfully parse a number string with this radix.
+      String maxAsString = max.toString(radix);
+      assertEquals(max.longValue(), UnsignedLongs.parseUnsignedLong(maxAsString, radix));
+
+      try {
+        // tests that we get exception whre an overflow would occur.
+        BigInteger overflow = max.add(ONE);
+        String overflowAsString = overflow.toString(radix);
+        UnsignedLongs.parseUnsignedLong(overflowAsString, radix);
+        fail();
+      } catch (NumberFormatException nfe) {
+        // expected
+      }
+    }
+  }
+
+  public void testParseLongThrowsExceptionForInvalidRadix() {
+    // Valid radix values are Character.MIN_RADIX to Character.MAX_RADIX,
+    // inclusive.
+    try {
+      UnsignedLongs.parseUnsignedLong("0", Character.MIN_RADIX - 1);
+      fail();
+    } catch (NumberFormatException nfe) {
+      // expected
+    }
+
+    try {
+      UnsignedLongs.parseUnsignedLong("0", Character.MAX_RADIX + 1);
+      fail();
+    } catch (NumberFormatException nfe) {
+      // expected
+    }
+
+    // The radix is used as an array index, so try a negative value.
+    try {
+      UnsignedLongs.parseUnsignedLong("0", -1);
+      fail();
+    } catch (NumberFormatException nfe) {
+      // expected
+    }
+  }
+
+  public void testToString() {
+    String[] tests = {
+        "ffffffffffffffff",
+        "7fffffffffffffff",
+        "ff1a618b7f65ea12",
+        "5a4316b8c153ac4d",
+        "6cf78a4b139a4e2a"};
+    int[] bases = {2, 5, 7, 8, 10, 16};
+    for (int base : bases) {
+      for (String x : tests) {
+        BigInteger xValue = new BigInteger(x, 16);
+        long xLong = xValue.longValue(); // signed
+        assertEquals(xValue.toString(base), UnsignedLongs.toString(xLong, base));
+      }
+    }
+  }
+
+  @GwtIncompatible("NullPointerTester")
+  public void testNulls() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.setDefault(long[].class, new long[0]);
+    tester.setDefault(BigInteger.class, BigInteger.ZERO);
+    tester.testAllPublicStaticMethods(UnsignedLongs.class);
+  }
+}
diff --git a/guava-tests/test/com/google/common/testing/EqualsTesterTest.java b/guava-tests/test/com/google/common/testing/EqualsTesterTest.java
new file mode 100644
index 0000000..e2ec18a
--- /dev/null
+++ b/guava-tests/test/com/google/common/testing/EqualsTesterTest.java
@@ -0,0 +1,438 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.testing;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Sets;
+
+import junit.framework.AssertionFailedError;
+import junit.framework.TestCase;
+
+import java.util.Set;
+
+/**
+ * Unit tests for {@link EqualsTester}.
+ *
+ * @author Jim McMaster
+ */
+@GwtCompatible
+public class EqualsTesterTest extends TestCase {
+  private ValidTestObject reference;
+  private EqualsTester equalsTester;
+  private ValidTestObject equalObject1;
+  private ValidTestObject equalObject2;
+  private ValidTestObject notEqualObject1;
+  private ValidTestObject notEqualObject2;
+
+  @Override
+  public void setUp() throws Exception {
+    super.setUp();
+    reference = new ValidTestObject(1, 2);
+    equalsTester = new EqualsTester();
+    equalObject1 = new ValidTestObject(1, 2);
+    equalObject2 = new ValidTestObject(1, 2);
+    notEqualObject1 = new ValidTestObject(0, 2);
+    notEqualObject2 = new ValidTestObject(1, 0);
+  }
+
+  /**
+   * Test null reference yields error
+   */
+  public void testAddNullReference() {
+    try {
+      equalsTester.addEqualityGroup((Object) null);
+      fail("Should fail on null reference");
+    } catch (NullPointerException e) {}
+  }
+
+  /**
+   * Test equalObjects after adding multiple instances at once with a null
+   */
+  public void testAddTwoEqualObjectsAtOnceWithNull() {
+    try {
+      equalsTester.addEqualityGroup(reference, equalObject1, null);
+      fail("Should fail on null equal object");
+    } catch (NullPointerException e) {}
+  }
+
+  /**
+   * Test adding null equal object yields error
+   */
+  public void testAddNullEqualObject() {
+    try {
+      equalsTester.addEqualityGroup(reference, (Object[]) null);
+      fail("Should fail on null equal object");
+    } catch (NullPointerException e) {}
+  }
+
+  /**
+   * Test adding objects only by addEqualityGroup, with no reference object
+   * specified in the constructor.
+   */
+  public void testAddEqualObjectWithOArgConstructor() {
+    equalsTester.addEqualityGroup(equalObject1, notEqualObject1);
+    try {
+      equalsTester.testEquals();
+    } catch (AssertionFailedError e) {
+      assertErrorMessage(
+        e,
+        equalObject1 + " [group 1, item 1] must be equal to "
+            + notEqualObject1 + " [group 1, item 2]");
+      return;
+    }
+    fail("Should get not equal to equal object error");
+  }
+
+  /**
+   * Test EqualsTester with no equals or not equals objects.  This checks
+   * proper handling of null, incompatible class and reflexive tests
+   */
+  public void testTestEqualsEmptyLists() {
+    equalsTester.addEqualityGroup(reference);
+    equalsTester.testEquals();
+  }
+
+  /**
+   * Test EqualsTester after populating equalObjects.  This checks proper
+   * handling of equality and verifies hashCode for valid objects
+   */
+  public void testTestEqualsEqualsObjects() {
+    equalsTester.addEqualityGroup(reference, equalObject1, equalObject2);
+    equalsTester.testEquals();
+  }
+
+  /**
+   * Test proper handling of case where an object is not equal to itself
+   */
+  public void testNonreflexiveEquals() {
+    Object obj = new NonReflexiveObject();
+    equalsTester.addEqualityGroup(obj);
+    try {
+      equalsTester.testEquals();
+    } catch (AssertionFailedError e) {
+      assertErrorMessage(
+          e, obj + " must be equal to itself");
+      return;
+    }
+    fail("Should get non-reflexive error");
+  }
+
+  /**
+   * Test proper handling where an object tests equal to null
+   */
+  public void testInvalidEqualsNull() {
+    Object obj = new InvalidEqualsNullObject();
+    equalsTester.addEqualityGroup(obj);
+    try {
+      equalsTester.testEquals();
+    } catch (AssertionFailedError e) {
+      assertErrorMessage(
+          e, obj + " must be unequal to null");
+      return;
+    }
+    fail("Should get equal to null error");
+  }
+
+  /**
+   * Test proper handling where an object incorrectly tests for an
+   * incompatible class
+   */
+  public void testInvalidEqualsIncompatibleClass() {
+    Object obj = new InvalidEqualsIncompatibleClassObject();
+    equalsTester.addEqualityGroup(obj);
+    try {
+      equalsTester.testEquals();
+    } catch (AssertionFailedError e) {
+      assertErrorMessage(
+          e,
+          obj
+          + " must be unequal to an arbitrary object of another class");
+      return;
+    }
+    fail("Should get equal to incompatible class error");
+  }
+
+  /**
+   * Test proper handling where an object is not equal to one the user has
+   * said should be equal
+   */
+  public void testInvalidNotEqualsEqualObject() {
+    equalsTester.addEqualityGroup(reference, notEqualObject1);
+    try {
+      equalsTester.testEquals();
+    } catch (AssertionFailedError e) {
+      assertErrorMessage(e, reference.toString() + " [group 1, item 1]");
+      assertErrorMessage(e, notEqualObject1.toString() + " [group 1, item 2]");
+      return;
+    }
+    fail("Should get not equal to equal object error");
+  }
+
+  /**
+   * Test for an invalid hashCode method, i.e., one that returns different
+   * value for objects that are equal according to the equals method
+   */
+  public void testInvalidHashCode() {
+    Object a = new InvalidHashCodeObject(1, 2);
+    Object b = new InvalidHashCodeObject(1, 2);
+    equalsTester.addEqualityGroup(a, b);
+    try {
+      equalsTester.testEquals();
+    } catch (AssertionFailedError e) {
+      assertErrorMessage(
+          e, "the hash (" + a.hashCode() + ") of " + a
+          + " [group 1, item 1] must be equal to the hash (" + b.hashCode() + ") of " + b);
+      return;
+    }
+    fail("Should get invalid hashCode error");
+  }
+
+  public void testNullEqualityGroup() {
+    EqualsTester tester = new EqualsTester();
+    try {
+      tester.addEqualityGroup((Object[]) null);
+      fail();
+    } catch (NullPointerException e) {}
+  }
+
+  public void testNullObjectInEqualityGroup() {
+    EqualsTester tester = new EqualsTester();
+    try {
+      tester.addEqualityGroup(1, null, 3);
+      fail();
+    } catch (NullPointerException e) {
+      assertErrorMessage(e, "at index 1");
+    }
+  }
+
+  public void testSymmetryBroken() {
+    EqualsTester tester = new EqualsTester()
+        .addEqualityGroup(named("foo").addPeers("bar"), named("bar"));
+    try {
+      tester.testEquals();
+    } catch (AssertionFailedError e) {
+      assertErrorMessage(
+          e,
+          "bar [group 1, item 2] must be equal to foo [group 1, item 1]");
+      return;
+    }
+    fail("should failed because symmetry is broken");
+  }
+
+  public void testTransitivityBrokenInEqualityGroup() {
+    EqualsTester tester = new EqualsTester()
+        .addEqualityGroup(
+            named("foo").addPeers("bar", "baz"),
+            named("bar").addPeers("foo"),
+            named("baz").addPeers("foo"));
+    try {
+      tester.testEquals();
+    } catch (AssertionFailedError e) {
+      assertErrorMessage(
+          e,
+          "bar [group 1, item 2] must be equal to baz [group 1, item 3]");
+      return;
+    }
+    fail("should failed because transitivity is broken");
+  }
+
+  public void testUnequalObjectsInEqualityGroup() {
+    EqualsTester tester = new EqualsTester()
+        .addEqualityGroup(named("foo"), named("bar"));
+    try {
+      tester.testEquals();
+    } catch (AssertionFailedError e) {
+      assertErrorMessage(
+          e,
+          "foo [group 1, item 1] must be equal to bar [group 1, item 2]");
+      return;
+    }
+    fail("should failed because of unequal objects in the same equality group");
+  }
+
+  public void testTransitivityBrokenAcrossEqualityGroups() {
+    EqualsTester tester = new EqualsTester()
+        .addEqualityGroup(
+            named("foo").addPeers("bar"),
+            named("bar").addPeers("foo", "x"))
+        .addEqualityGroup(
+            named("baz").addPeers("x"),
+            named("x").addPeers("baz", "bar"));
+    try {
+      tester.testEquals();
+    } catch (AssertionFailedError e) {
+      assertErrorMessage(
+          e,
+          "bar [group 1, item 2] must be unequal to x [group 2, item 2]");
+      return;
+    }
+    fail("should failed because transitivity is broken");
+  }
+
+  public void testEqualityGroups() {
+    new EqualsTester()
+        .addEqualityGroup(
+            named("foo").addPeers("bar"), named("bar").addPeers("foo"))
+        .addEqualityGroup(named("baz"), named("baz"))
+        .testEquals();
+  }
+
+  private static void assertErrorMessage(Throwable e, String message) {
+    // TODO(kevinb): use a Truth assertion here
+    if (!e.getMessage().contains(message)) {
+      fail("expected <" + e.getMessage() + "> to contain <" + message + ">");
+    }
+  }
+
+  /**
+   * Test class with valid equals and hashCode methods.  Testers created
+   * with instances of this class should always pass.
+   */
+  private static class ValidTestObject {
+    private int aspect1;
+    private int aspect2;
+
+    ValidTestObject(int aspect1, int aspect2) {
+      this.aspect1 = aspect1;
+      this.aspect2 = aspect2;
+    }
+
+    @Override public boolean equals(Object o) {
+      if (!(o instanceof ValidTestObject)) {
+        return false;
+      }
+      ValidTestObject other = (ValidTestObject) o;
+      if (aspect1 != other.aspect1) {
+        return false;
+      }
+      if (aspect2 != other.aspect2) {
+        return false;
+      }
+      return true;
+    }
+
+    @Override public int hashCode() {
+      int result = 17;
+      result = 37 * result + aspect1;
+      result = 37 * result + aspect2;
+      return result;
+    }
+  }
+
+  /** Test class with invalid hashCode method. */
+  private static class InvalidHashCodeObject {
+    private int aspect1;
+    private int aspect2;
+
+    InvalidHashCodeObject(int aspect1, int aspect2) {
+      this.aspect1 = aspect1;
+      this.aspect2 = aspect2;
+    }
+
+    @Override public boolean equals(Object o) {
+      if (!(o instanceof InvalidHashCodeObject)) {
+        return false;
+      }
+      InvalidHashCodeObject other = (InvalidHashCodeObject) o;
+      if (aspect1 != other.aspect1) {
+        return false;
+      }
+      if (aspect2 != other.aspect2) {
+        return false;
+      }
+      return true;
+    }
+  }
+
+  /** Test class that violates reflexitivity.  It is not equal to itself */
+  private static class NonReflexiveObject{
+
+    @Override public boolean equals(Object o) {
+      return false;
+    }
+
+    @Override public int hashCode() {
+      return super.hashCode();
+    }
+  }
+
+  /** Test class that returns true if the test object is null */
+  private static class InvalidEqualsNullObject{
+
+    @Override public boolean equals(Object o) {
+      return o == this || o == null;
+    }
+
+    @Override public int hashCode() {
+      return 0;
+    }
+  }
+
+  /**
+   * Test class that returns true even if the test object is of the wrong class
+   */
+  private static class InvalidEqualsIncompatibleClassObject{
+
+    @Override public boolean equals(Object o) {
+      if (o == null) {
+        return false;
+      }
+      return true;
+    }
+
+    @Override public int hashCode() {
+      return 0;
+    }
+  }
+
+  private static NamedObject named(String name) {
+    return new NamedObject(name);
+  }
+
+  private static class NamedObject {
+    private final Set<String> peerNames = Sets.newHashSet();
+
+    private final String name;
+
+    NamedObject(String name) {
+      this.name = Preconditions.checkNotNull(name);
+    }
+
+    NamedObject addPeers(String... names) {
+      peerNames.addAll(ImmutableList.copyOf(names));
+      return this;
+    }
+
+    @Override public boolean equals(Object obj) {
+      if (obj instanceof NamedObject) {
+        NamedObject that = (NamedObject) obj;
+        return name.equals(that.name) || peerNames.contains(that.name);
+      }
+      return false;
+    }
+
+    @Override public int hashCode() {
+      return 0;
+    }
+
+    @Override public String toString() {
+      return name;
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/testing/EquivalenceTesterTest.java b/guava-tests/test/com/google/common/testing/EquivalenceTesterTest.java
new file mode 100644
index 0000000..0bfb8f1
--- /dev/null
+++ b/guava-tests/test/com/google/common/testing/EquivalenceTesterTest.java
@@ -0,0 +1,246 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.testing;
+
+import static com.google.common.base.Preconditions.checkState;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Equivalence;
+import com.google.common.base.Objects;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableTable;
+
+import junit.framework.AssertionFailedError;
+import junit.framework.TestCase;
+
+/**
+ * Tests for {@link EquivalenceTester}.
+ *
+ * @author Gregory Kick
+ */
+@GwtCompatible
+public class EquivalenceTesterTest extends TestCase {
+  private EquivalenceTester<Object> tester;
+  private MockEquivalence equivalenceMock;
+
+  @Override public void setUp() throws Exception {
+    super.setUp();
+    this.equivalenceMock = new MockEquivalence();
+    this.tester = EquivalenceTester.of(equivalenceMock);
+  }
+
+  /** Test null reference yields error */
+  public void testOf_NullPointerException() {
+    try {
+      EquivalenceTester.of(null);
+      fail("Should fail on null reference");
+    } catch (NullPointerException expected) {}
+  }
+
+  public void testTest_NoData() {
+    tester.test();
+  }
+
+  public void testTest() {
+    Object group1Item1 = new TestObject(1, 1);
+    Object group1Item2 = new TestObject(1, 2);
+    Object group2Item1 = new TestObject(2, 1);
+    Object group2Item2 = new TestObject(2, 2);
+
+    equivalenceMock.expectEquivalent(group1Item1, group1Item2);
+    equivalenceMock.expectDistinct(group1Item1, group2Item1);
+    equivalenceMock.expectDistinct(group1Item1, group2Item2);
+    equivalenceMock.expectEquivalent(group1Item2, group1Item1);
+    equivalenceMock.expectDistinct(group1Item2, group2Item1);
+    equivalenceMock.expectDistinct(group1Item2, group2Item2);
+    equivalenceMock.expectDistinct(group2Item1, group1Item1);
+    equivalenceMock.expectDistinct(group2Item1, group1Item2);
+    equivalenceMock.expectEquivalent(group2Item1, group2Item2);
+    equivalenceMock.expectDistinct(group2Item2, group1Item1);
+    equivalenceMock.expectDistinct(group2Item2, group1Item2);
+    equivalenceMock.expectEquivalent(group2Item2, group2Item1);
+
+    equivalenceMock.expectHash(group1Item1, 1);
+    equivalenceMock.expectHash(group1Item2, 1);
+    equivalenceMock.expectHash(group2Item1, 2);
+    equivalenceMock.expectHash(group2Item2, 2);
+
+    equivalenceMock.replay();
+
+    tester.addEquivalenceGroup(group1Item1, group1Item2)
+        .addEquivalenceGroup(group2Item1, group2Item2)
+        .test();
+  }
+
+  public void testTest_symmetric() {
+    Object group1Item1 = new TestObject(1, 1);
+    Object group1Item2 = new TestObject(1, 2);
+
+    equivalenceMock.expectEquivalent(group1Item1, group1Item2);
+    equivalenceMock.expectDistinct(group1Item2, group1Item1);
+
+    equivalenceMock.expectHash(group1Item1, 1);
+    equivalenceMock.expectHash(group1Item2, 1);
+
+    equivalenceMock.replay();
+
+    try {
+      tester.addEquivalenceGroup(group1Item1, group1Item2).test();
+    } catch (AssertionFailedError expected) {
+      assertEquals("TestObject{group=1, item=2} [group 1, item 2] must be equivalent to "
+          + "TestObject{group=1, item=1} [group 1, item 1]", expected.getMessage());
+      return;
+    }
+    fail();
+  }
+
+  public void testTest_trasitive() {
+    Object group1Item1 = new TestObject(1, 1);
+    Object group1Item2 = new TestObject(1, 2);
+    Object group1Item3 = new TestObject(1, 3);
+
+    equivalenceMock.expectEquivalent(group1Item1, group1Item2);
+    equivalenceMock.expectEquivalent(group1Item1, group1Item3);
+    equivalenceMock.expectEquivalent(group1Item2, group1Item1);
+    equivalenceMock.expectDistinct(group1Item2, group1Item3);
+    equivalenceMock.expectEquivalent(group1Item3, group1Item1);
+    equivalenceMock.expectEquivalent(group1Item3, group1Item2);
+
+    equivalenceMock.expectHash(group1Item1, 1);
+    equivalenceMock.expectHash(group1Item2, 1);
+    equivalenceMock.expectHash(group1Item3, 1);
+
+    equivalenceMock.replay();
+
+    try {
+      tester.addEquivalenceGroup(group1Item1, group1Item2, group1Item3).test();
+    } catch (AssertionFailedError expected) {
+      assertEquals("TestObject{group=1, item=2} [group 1, item 2] must be equivalent to "
+          + "TestObject{group=1, item=3} [group 1, item 3]", expected.getMessage());
+      return;
+    }
+    fail();
+  }
+
+  public void testTest_inequivalence() {
+    Object group1Item1 = new TestObject(1, 1);
+    Object group2Item1 = new TestObject(2, 1);
+
+    equivalenceMock.expectEquivalent(group1Item1, group2Item1);
+    equivalenceMock.expectDistinct(group2Item1, group1Item1);
+
+    equivalenceMock.expectHash(group1Item1, 1);
+    equivalenceMock.expectHash(group2Item1, 2);
+
+    equivalenceMock.replay();
+
+    try {
+      tester.addEquivalenceGroup(group1Item1).addEquivalenceGroup(group2Item1).test();
+    } catch (AssertionFailedError expected) {
+      assertEquals("TestObject{group=1, item=1} [group 1, item 1] must be inequivalent to "
+          + "TestObject{group=2, item=1} [group 2, item 1]", expected.getMessage());
+      return;
+    }
+    fail();
+  }
+
+  public void testTest_hash() {
+    Object group1Item1 = new TestObject(1, 1);
+    Object group1Item2 = new TestObject(1, 2);
+
+    equivalenceMock.expectEquivalent(group1Item1, group1Item2);
+    equivalenceMock.expectEquivalent(group1Item2, group1Item1);
+
+    equivalenceMock.expectHash(group1Item1, 1);
+    equivalenceMock.expectHash(group1Item2, 2);
+
+    equivalenceMock.replay();
+
+    try {
+      tester.addEquivalenceGroup(group1Item1, group1Item2).test();
+    } catch (AssertionFailedError expected) {
+      String expectedMessage =
+          "the hash (1) of TestObject{group=1, item=1} [group 1, item 1] must be "
+          + "equal to the hash (2) of TestObject{group=1, item=2} [group 1, item 2]";
+      if (!expected.getMessage().contains(expectedMessage)) {
+        fail("<" + expected.getMessage() + "> expected to contain <" + expectedMessage + ">");
+      }
+      return;
+    }
+    fail();
+  }
+
+  /** An object with a friendly {@link #toString()}. */
+  private static final class TestObject {
+    final int group;
+    final int item;
+
+    TestObject(int group , int item) {
+      this.group = group;
+      this.item = item;
+    }
+
+    @Override public String toString() {
+      return Objects.toStringHelper("TestObject")
+          .add("group", group)
+          .add("item", item)
+          .toString();
+    }
+  }
+
+  private static final class MockEquivalence extends Equivalence<Object> {
+    final ImmutableTable.Builder<Object, Object, Boolean> equivalentExpectationsBuilder =
+        ImmutableTable.builder();
+    final ImmutableMap.Builder<Object, Integer> hashExpectationsBuilder =
+        ImmutableMap.builder();
+    ImmutableTable<Object, Object, Boolean> equivalentExpectations;
+    ImmutableMap<Object, Integer> hashExpectations;
+
+    void expectEquivalent(Object a, Object b) {
+      checkRecording();
+      equivalentExpectationsBuilder.put(a, b, true);
+    }
+
+    void expectDistinct(Object a, Object b) {
+      checkRecording();
+      equivalentExpectationsBuilder.put(a, b, false);
+    }
+
+    void expectHash(Object object, int hash) {
+      checkRecording();
+      hashExpectationsBuilder.put(object, hash);
+    }
+
+    void replay() {
+      checkRecording();
+      equivalentExpectations = equivalentExpectationsBuilder.build();
+      hashExpectations = hashExpectationsBuilder.build();
+    }
+
+    @Override protected boolean doEquivalent(Object a, Object b) {
+      return equivalentExpectations.get(a, b);
+    }
+
+    @Override protected int doHash(Object object) {
+      return hashExpectations.get(object);
+    }
+
+    void checkRecording() {
+      checkState(equivalentExpectations == null && hashExpectations == null);
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/testing/FakeTickerTest.java b/guava-tests/test/com/google/common/testing/FakeTickerTest.java
new file mode 100644
index 0000000..10a1886
--- /dev/null
+++ b/guava-tests/test/com/google/common/testing/FakeTickerTest.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.testing;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+
+import junit.framework.TestCase;
+
+import java.util.concurrent.Callable;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Unit test for {@link FakeTicker}.
+ *
+ * @author benyu@google.com (Jige Yu)
+ */
+@GwtCompatible(emulated = true)
+public class FakeTickerTest extends TestCase {
+
+  public void testAdvance() {
+    FakeTicker ticker = new FakeTicker();
+    assertEquals(0, ticker.read());
+    assertSame(ticker, ticker.advance(10));
+    assertEquals(10, ticker.read());
+    ticker.advance(1, TimeUnit.MILLISECONDS);
+    assertEquals(1000010L, ticker.read());
+  }
+
+  @GwtIncompatible("concurrency")
+
+  public void testConcurrentAdvance() throws Exception {
+    final FakeTicker ticker = new FakeTicker();
+
+    int numberOfThreads = 64;
+    ExecutorService executorService = Executors.newFixedThreadPool(numberOfThreads);
+    final CountDownLatch startLatch = new CountDownLatch(numberOfThreads);
+    final CountDownLatch doneLatch = new CountDownLatch(numberOfThreads);
+    for (int i = numberOfThreads; i > 0; i--) {
+      executorService.submit(new Callable<Void>() {
+        @Override
+        public Void call() throws Exception {
+          // adds two nanoseconds to the ticker
+          startLatch.countDown();
+          startLatch.await();
+          ticker.advance(1L);
+          Thread.sleep(10);
+          ticker.advance(1L);
+          doneLatch.countDown();
+          return null;
+        }
+      });
+    }
+    doneLatch.await();
+    assertEquals(numberOfThreads * 2, ticker.read());
+  }
+}
diff --git a/guava-tests/test/com/google/common/testing/GcFinalizationTest.java b/guava-tests/test/com/google/common/testing/GcFinalizationTest.java
new file mode 100644
index 0000000..35299f5
--- /dev/null
+++ b/guava-tests/test/com/google/common/testing/GcFinalizationTest.java
@@ -0,0 +1,178 @@
+// Copyright 2011 Google Inc. All Rights Reserved.
+
+package com.google.common.testing;
+
+import com.google.common.testing.GcFinalization.FinalizationPredicate;
+import com.google.common.util.concurrent.SettableFuture;
+
+import junit.framework.TestCase;
+
+import java.lang.ref.WeakReference;
+import java.util.WeakHashMap;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+/**
+ * Tests for {@link GcFinalization}.
+ *
+ * @author martinrb@google.com (Martin Buchholz)
+ * @author schmoe@google.com (mike nonemacher)
+ */
+
+public class GcFinalizationTest extends TestCase {
+
+  //----------------------------------------------------------------
+  // Ordinary tests of successful method execution
+  //----------------------------------------------------------------
+
+  public void testAwait_CountDownLatch() {
+    final CountDownLatch latch = new CountDownLatch(1);
+    Object x = new Object() {
+      protected void finalize() { latch.countDown(); }
+    };
+    x = null;  // Hint to the JIT that x is unreachable
+    GcFinalization.await(latch);
+    assertEquals(0, latch.getCount());
+  }
+
+  public void testAwaitDone_Future() {
+    final SettableFuture<Void> future = SettableFuture.create();
+    Object x = new Object() {
+      protected void finalize() { future.set(null); }
+    };
+    x = null;  // Hint to the JIT that x is unreachable
+    GcFinalization.awaitDone(future);
+    assertTrue(future.isDone());
+    assertFalse(future.isCancelled());
+  }
+
+  public void testAwaitDone_Future_Cancel() {
+    final SettableFuture<Void> future = SettableFuture.create();
+    Object x = new Object() {
+      protected void finalize() { future.cancel(false); }
+    };
+    x = null;  // Hint to the JIT that x is unreachable
+    GcFinalization.awaitDone(future);
+    assertTrue(future.isDone());
+    assertTrue(future.isCancelled());
+  }
+
+  public void testAwaitClear() {
+    final WeakReference<Object> ref = new WeakReference<Object>(new Object());
+    GcFinalization.awaitClear(ref);
+    assertNull(ref.get());
+  }
+
+  public void testAwaitDone_FinalizationPredicate() {
+    final WeakHashMap<Object, Object> map = new WeakHashMap<Object, Object>();
+    map.put(new Object(), Boolean.TRUE);
+    GcFinalization.awaitDone(new FinalizationPredicate() {
+      public boolean isDone() {
+        return map.isEmpty();
+      }
+    });
+    assertTrue(map.isEmpty());
+  }
+
+  //----------------------------------------------------------------
+  // Test that interrupts result in RuntimeException, not InterruptedException.
+  // Trickier than it looks, because runFinalization swallows interrupts.
+  //----------------------------------------------------------------
+
+  class Interruptenator extends Thread {
+    final AtomicBoolean shutdown;
+    Interruptenator(final Thread interruptee) {
+      this(interruptee, new AtomicBoolean(false));
+    }
+    Interruptenator(final Thread interruptee,
+                    final AtomicBoolean shutdown) {
+      super(new Runnable() {
+          public void run() {
+            while (!shutdown.get()) {
+              interruptee.interrupt();
+              Thread.yield();
+            }}});
+      this.shutdown = shutdown;
+      start();
+    }
+    void shutdown() {
+      shutdown.set(true);
+      while (this.isAlive()) {
+        Thread.yield();
+      }
+    }
+  }
+
+  void assertWrapsInterruptedException(RuntimeException e) {
+    assertTrue(e.getMessage().contains("Unexpected interrupt"));
+    assertTrue(e.getCause() instanceof InterruptedException);
+  }
+
+  public void testAwait_CountDownLatch_Interrupted() {
+    Interruptenator interruptenator = new Interruptenator(Thread.currentThread());
+    try {
+      final CountDownLatch latch = new CountDownLatch(1);
+      try {
+        GcFinalization.await(latch);
+        fail("should throw");
+      } catch (RuntimeException expected) {
+        assertWrapsInterruptedException(expected);
+      }
+    } finally {
+      interruptenator.shutdown();
+      Thread.interrupted();
+    }
+  }
+
+  public void testAwaitDone_Future_Interrupted_Interrupted() {
+    Interruptenator interruptenator = new Interruptenator(Thread.currentThread());
+    try {
+      final SettableFuture<Void> future = SettableFuture.create();
+      try {
+        GcFinalization.awaitDone(future);
+        fail("should throw");
+      } catch (RuntimeException expected) {
+        assertWrapsInterruptedException(expected);
+      }
+    } finally {
+      interruptenator.shutdown();
+      Thread.interrupted();
+    }
+  }
+
+  public void testAwaitClear_Interrupted() {
+    Interruptenator interruptenator = new Interruptenator(Thread.currentThread());
+    try {
+      final WeakReference<Object> ref = new WeakReference<Object>(Boolean.TRUE);
+      try {
+        GcFinalization.awaitClear(ref);
+        fail("should throw");
+      } catch (RuntimeException expected) {
+        assertWrapsInterruptedException(expected);
+      }
+    } finally {
+      interruptenator.shutdown();
+      Thread.interrupted();
+    }
+  }
+
+  public void testAwaitDone_FinalizationPredicate_Interrupted() {
+    Interruptenator interruptenator = new Interruptenator(Thread.currentThread());
+    try {
+      try {
+        GcFinalization.awaitDone(new FinalizationPredicate() {
+            public boolean isDone() {
+              return false;
+            }
+          });
+        fail("should throw");
+      } catch (RuntimeException expected) {
+        assertWrapsInterruptedException(expected);
+      }
+    } finally {
+      interruptenator.shutdown();
+      Thread.interrupted();
+    }
+  }
+
+}
diff --git a/guava-tests/test/com/google/common/testing/NullPointerTesterTest.java b/guava-tests/test/com/google/common/testing/NullPointerTesterTest.java
new file mode 100644
index 0000000..7d0ea99
--- /dev/null
+++ b/guava-tests/test/com/google/common/testing/NullPointerTesterTest.java
@@ -0,0 +1,601 @@
+/*
+ * Copyright (C) 2005 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.testing;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
+
+import junit.framework.AssertionFailedError;
+import junit.framework.TestCase;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
+import java.util.List;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * Unit test for {@link NullPointerTester}.
+ *
+ * @author Kevin Bourrillion
+ * @author Mick Killianey
+ */
+public class NullPointerTesterTest extends TestCase {
+
+  private NullPointerTester tester;
+
+  @Override protected void setUp() throws Exception {
+    super.setUp();
+    tester = new NullPointerTester();
+  }
+
+  /** Non-NPE RuntimeException. */
+  public static class FooException extends RuntimeException {
+    private static final long serialVersionUID = 1L;
+  }
+
+  /**
+   * Class for testing all permutations of static/non-static one-argument
+   * methods using methodParameter().
+   */
+  public static class OneArg {
+
+    public static void staticOneArgCorrectlyThrowsNpe(String s) {
+      checkNotNull(s); // expect NPE here on null
+    }
+    public static void staticOneArgThrowsOtherThanNpe(String s) {
+      throw new FooException();  // should catch as failure
+    }
+    public static void staticOneArgShouldThrowNpeButDoesnt(String s) {
+      // should catch as failure
+    }
+    public static void
+    staticOneArgNullableCorrectlyDoesNotThrowNPE(@Nullable String s) {
+      // null?  no problem
+    }
+    public static void
+    staticOneArgNullableCorrectlyThrowsOtherThanNPE(@Nullable String s) {
+      throw new FooException(); // ok, as long as it's not NullPointerException
+    }
+    public static void
+    staticOneArgNullableThrowsNPE(@Nullable String s) {
+      checkNotNull(s); // doesn't check if you said you'd accept null, but you don't
+    }
+
+    public void oneArgCorrectlyThrowsNpe(String s) {
+      checkNotNull(s); // expect NPE here on null
+    }
+    public void oneArgThrowsOtherThanNpe(String s) {
+      throw new FooException();  // should catch as failure
+    }
+    public void oneArgShouldThrowNpeButDoesnt(String s) {
+      // should catch as failure
+    }
+    public void oneArgNullableCorrectlyDoesNotThrowNPE(@Nullable String s) {
+      // null?  no problem
+    }
+    public void oneArgNullableCorrectlyThrowsOtherThanNPE(@Nullable String s) {
+      throw new FooException(); // ok, as long as it's not NullPointerException
+    }
+    public void oneArgNullableThrowsNPE(@Nullable String s) {
+      checkNotNull(s); // doesn't check if you said you'd accept null, but you don't
+    }
+  }
+
+  private static final String[] STATIC_ONE_ARG_METHODS_SHOULD_PASS = {
+    "staticOneArgCorrectlyThrowsNpe",
+    "staticOneArgNullableCorrectlyDoesNotThrowNPE",
+    "staticOneArgNullableCorrectlyThrowsOtherThanNPE",
+    "staticOneArgNullableThrowsNPE",
+  };
+  private static final String[] STATIC_ONE_ARG_METHODS_SHOULD_FAIL = {
+    "staticOneArgThrowsOtherThanNpe",
+    "staticOneArgShouldThrowNpeButDoesnt",
+  };
+  private static final String[] NONSTATIC_ONE_ARG_METHODS_SHOULD_PASS = {
+    "oneArgCorrectlyThrowsNpe",
+    "oneArgNullableCorrectlyDoesNotThrowNPE",
+    "oneArgNullableCorrectlyThrowsOtherThanNPE",
+    "oneArgNullableThrowsNPE",
+  };
+  private static final String[] NONSTATIC_ONE_ARG_METHODS_SHOULD_FAIL = {
+    "oneArgThrowsOtherThanNpe",
+    "oneArgShouldThrowNpeButDoesnt",
+  };
+
+  public void testStaticOneArgMethodsThatShouldPass() throws Exception {
+    for (String methodName : STATIC_ONE_ARG_METHODS_SHOULD_PASS) {
+      Method method = OneArg.class.getMethod(methodName, String.class);
+      try {
+        tester.testMethodParameter(OneArg.class, method, 0);
+      } catch (AssertionFailedError unexpected) {
+        fail("Should not have flagged method " + methodName);
+      }
+    }
+  }
+
+  public void testStaticOneArgMethodsThatShouldFail() throws Exception {
+    for (String methodName : STATIC_ONE_ARG_METHODS_SHOULD_FAIL) {
+      Method method = OneArg.class.getMethod(methodName, String.class);
+      boolean foundProblem = false;
+      try {
+        tester.testMethodParameter(OneArg.class, method, 0);
+      } catch (AssertionFailedError expected) {
+        foundProblem = true;
+      }
+      assertTrue("Should report error in method " + methodName, foundProblem);
+    }
+  }
+
+  public void testNonStaticOneArgMethodsThatShouldPass() throws Exception {
+    OneArg foo = new OneArg();
+    for (String methodName : NONSTATIC_ONE_ARG_METHODS_SHOULD_PASS) {
+      Method method = OneArg.class.getMethod(methodName, String.class);
+      try {
+        tester.testMethodParameter(foo, method, 0);
+      } catch (AssertionFailedError unexpected) {
+        fail("Should not have flagged method " + methodName);
+      }
+    }
+  }
+
+  public void testNonStaticOneArgMethodsThatShouldFail() throws Exception {
+    OneArg foo = new OneArg();
+    for (String methodName : NONSTATIC_ONE_ARG_METHODS_SHOULD_FAIL) {
+      Method method = OneArg.class.getMethod(methodName, String.class);
+      boolean foundProblem = false;
+      try {
+        tester.testMethodParameter(foo, method, 0);
+      } catch (AssertionFailedError expected) {
+        foundProblem = true;
+      }
+      assertTrue("Should report error in method " + methodName, foundProblem);
+    }
+  }
+
+  /**
+   * Class for testing all permutations of nullable/non-nullable two-argument
+   * methods using testMethod().
+   *
+   *   normalNormal:  two params, neither is Nullable
+   *   nullableNormal:  only first param is Nullable
+   *   normalNullable:  only second param is Nullable
+   *   nullableNullable:  both params are Nullable
+   */
+  public static class TwoArg {
+    /** Action to take on a null param. */
+    public enum Action {
+      THROW_A_NPE {
+        @Override public void act() {
+          throw new NullPointerException();
+        }
+      },
+      THROW_OTHER {
+        @Override public void act() {
+          throw new FooException();
+        }
+      },
+      JUST_RETURN {
+        @Override public void act() {}
+      };
+
+      public abstract void act();
+    }
+    Action actionWhenFirstParamIsNull;
+    Action actionWhenSecondParamIsNull;
+
+    public TwoArg(
+        Action actionWhenFirstParamIsNull,
+        Action actionWhenSecondParamIsNull) {
+      this.actionWhenFirstParamIsNull = actionWhenFirstParamIsNull;
+      this.actionWhenSecondParamIsNull = actionWhenSecondParamIsNull;
+    }
+
+    /** Method that decides how to react to parameters. */
+    public void reactToNullParameters(Object first, Object second) {
+      if (first == null) {
+        actionWhenFirstParamIsNull.act();
+      }
+      if (second == null) {
+        actionWhenSecondParamIsNull.act();
+      }
+    }
+
+    /** Two-arg method with no Nullable params. */
+    public void normalNormal(String first, Integer second) {
+      reactToNullParameters(first, second);
+    }
+
+    /** Two-arg method with the second param Nullable. */
+    public void normalNullable(String first, @Nullable Integer second) {
+      reactToNullParameters(first, second);
+    }
+
+    /** Two-arg method with the first param Nullable. */
+    public void nullableNormal(@Nullable String first, Integer second) {
+      reactToNullParameters(first, second);
+    }
+
+    /** Two-arg method with the both params Nullable. */
+    public void nullableNullable(
+        @Nullable String first, @Nullable Integer second) {
+      reactToNullParameters(first, second);
+    }
+
+    /** To provide sanity during debugging. */
+    @Override public String toString() {
+      return String.format("Bar(%s, %s)",
+          actionWhenFirstParamIsNull, actionWhenSecondParamIsNull);
+    }
+  }
+
+  public void verifyBarPass(Method method, TwoArg bar) throws Exception {
+    try {
+      tester.testMethod(bar, method);
+    } catch (AssertionFailedError incorrectError) {
+      String errorMessage = String.format(
+          "Should not have flagged method %s for %s", method.getName(), bar);
+      assertNull(errorMessage, incorrectError);
+    }
+  }
+
+  public void verifyBarFail(Method method, TwoArg bar) throws Exception {
+    try {
+      tester.testMethod(bar, method);
+    } catch (AssertionFailedError expected) {
+      return; // good...we wanted a failure
+    }
+    String errorMessage = String.format(
+        "Should have flagged method %s for %s", method.getName(), bar);
+    fail(errorMessage);
+  }
+
+  public void testTwoArgNormalNormal() throws Exception {
+    Method method = TwoArg.class.getMethod(
+        "normalNormal", String.class, Integer.class);
+    for (TwoArg.Action first : TwoArg.Action.values()) {
+      for (TwoArg.Action second : TwoArg.Action.values()) {
+        TwoArg bar = new TwoArg(first, second);
+        if (first.equals(TwoArg.Action.THROW_A_NPE)
+            && second.equals(TwoArg.Action.THROW_A_NPE)) {
+          verifyBarPass(method, bar); // require both params to throw NPE
+        } else {
+          verifyBarFail(method, bar);
+        }
+      }
+    }
+  }
+
+  public void testTwoArgNormalNullable() throws Exception {
+    Method method = TwoArg.class.getMethod(
+        "normalNullable", String.class, Integer.class);
+    for (TwoArg.Action first : TwoArg.Action.values()) {
+      for (TwoArg.Action second : TwoArg.Action.values()) {
+        TwoArg bar = new TwoArg(first, second);
+        if (first.equals(TwoArg.Action.THROW_A_NPE)) {
+          verifyBarPass(method, bar); // only pass if 1st param throws NPE
+        } else {
+          verifyBarFail(method, bar);
+        }
+      }
+    }
+  }
+
+  public void testTwoArgNullableNormal() throws Exception {
+    Method method = TwoArg.class.getMethod(
+        "nullableNormal", String.class, Integer.class);
+    for (TwoArg.Action first : TwoArg.Action.values()) {
+      for (TwoArg.Action second : TwoArg.Action.values()) {
+        TwoArg bar = new TwoArg(first, second);
+        if (second.equals(TwoArg.Action.THROW_A_NPE)) {
+          verifyBarPass(method, bar); // only pass if 2nd param throws NPE
+        } else {
+          verifyBarFail(method, bar);
+        }
+      }
+    }
+  }
+
+  public void testTwoArgNullableNullable() throws Exception {
+    Method method = TwoArg.class.getMethod(
+        "nullableNullable", String.class, Integer.class);
+    for (TwoArg.Action first : TwoArg.Action.values()) {
+      for (TwoArg.Action second : TwoArg.Action.values()) {
+        TwoArg bar = new TwoArg(first, second);
+        verifyBarPass(method, bar); // All args nullable:  anything goes!
+      }
+    }
+  }
+
+  /*
+   * This next part consists of several sample classes that provide
+   * demonstrations of conditions that cause NullPointerTester
+   * to succeed/fail.
+   *
+   * Add naughty classes to failClasses to verify that NullPointerTest
+   * raises an AssertionFailedError.
+   *
+   * Add acceptable classes to passClasses to verify that NullPointerTest
+   * doesn't complain.
+   */
+
+  /** List of classes that NullPointerTester should pass as acceptable. */
+  static List<Class<?>> failClasses = Lists.newArrayList();
+
+  /** List of classes that NullPointerTester should flag as problematic. */
+  static List<Class<?>> passClasses = Lists.newArrayList();
+
+  /** Lots of well-behaved methods. */
+  public static class PassObject {
+    public static void doThrow(Object arg) {
+      if (arg == null) {
+        throw new FooException();
+      }
+    }
+    public void noArg() {}
+    public void oneArg(String s) { checkNotNull(s); }
+    public void oneNullableArg(@Nullable String s) {}
+    public void oneNullableArgThrows(@Nullable String s) { doThrow(s); }
+
+    public void twoArg(String s, Integer i) { checkNotNull(s); i.intValue(); }
+    public void twoMixedArgs(String s, @Nullable Integer i) { checkNotNull(s); }
+    public void twoMixedArgsThrows(String s, @Nullable Integer i) {
+      checkNotNull(s); doThrow(i);
+    }
+    public void twoMixedArgs(@Nullable Integer i, String s) { checkNotNull(s); }
+    public void twoMixedArgsThrows(@Nullable Integer i, String s) {
+      checkNotNull(s); doThrow(i);
+    }
+    public void twoNullableArgs(@Nullable String s,
+        @javax.annotation.Nullable Integer i) { }
+    public void twoNullableArgsThrowsFirstArg(
+        @Nullable String s, @Nullable Integer i) {
+      doThrow(s);
+    }
+    public void twoNullableArgsThrowsSecondArg(
+        @Nullable String s, @Nullable Integer i) {
+      doThrow(i);
+    }
+    public static void staticOneArg(String s) { checkNotNull(s); }
+    public static void staticOneNullableArg(@Nullable String s) { }
+    public static void staticOneNullableArgThrows(@Nullable String s) {
+      doThrow(s);
+    }
+  }
+  static { passClasses.add(PassObject.class); }
+
+  static class FailOneArgDoesntThrowNPE extends PassObject {
+    @Override public void oneArg(String s) {
+      // Fail:  missing NPE for s
+    }
+  }
+  static { failClasses.add(FailOneArgDoesntThrowNPE.class); }
+
+  static class FailOneArgThrowsWrongType extends PassObject {
+    @Override public void oneArg(String s) {
+      doThrow(s); // Fail:  throwing non-NPE exception for null s
+    }
+  }
+  static { failClasses.add(FailOneArgThrowsWrongType.class); }
+
+  static class PassOneNullableArgThrowsNPE extends PassObject {
+    @Override public void oneNullableArg(@Nullable String s) {
+      checkNotNull(s); // ok to throw NPE
+    }
+  }
+  static { passClasses.add(PassOneNullableArgThrowsNPE.class); }
+
+  static class FailTwoArgsFirstArgDoesntThrowNPE extends PassObject {
+    @Override public void twoArg(String s, Integer i) {
+      // Fail: missing NPE for s
+      i.intValue();
+    }
+  }
+  static { failClasses.add(FailTwoArgsFirstArgDoesntThrowNPE.class); }
+
+  static class FailTwoArgsFirstArgThrowsWrongType extends PassObject {
+    @Override public void twoArg(String s, Integer i) {
+      doThrow(s); // Fail:  throwing non-NPE exception for null s
+      i.intValue();
+    }
+  }
+  static { failClasses.add(FailTwoArgsFirstArgThrowsWrongType.class); }
+
+  static class FailTwoArgsSecondArgDoesntThrowNPE extends PassObject {
+    @Override public void twoArg(String s, Integer i) {
+      checkNotNull(s);
+      // Fail: missing NPE for i
+    }
+  }
+  static { failClasses.add(FailTwoArgsSecondArgDoesntThrowNPE.class); }
+
+  static class FailTwoArgsSecondArgThrowsWrongType extends PassObject {
+    @Override public void twoArg(String s, Integer i) {
+      checkNotNull(s);
+      doThrow(i); // Fail:  throwing non-NPE exception for null i
+    }
+  }
+  static { failClasses.add(FailTwoArgsSecondArgThrowsWrongType.class); }
+
+  static class FailTwoMixedArgsFirstArgDoesntThrowNPE extends PassObject {
+    @Override public void twoMixedArgs(String s, @Nullable Integer i) {
+      // Fail: missing NPE for s
+    }
+  }
+  static { failClasses.add(FailTwoMixedArgsFirstArgDoesntThrowNPE.class); }
+
+  static class FailTwoMixedArgsFirstArgThrowsWrongType extends PassObject {
+    @Override public void twoMixedArgs(String s, @Nullable Integer i) {
+      doThrow(s); // Fail:  throwing non-NPE exception for null s
+    }
+  }
+  static { failClasses.add(FailTwoMixedArgsFirstArgThrowsWrongType.class); }
+
+  static class PassTwoMixedArgsNullableArgThrowsNPE extends PassObject {
+    @Override public void twoMixedArgs(String s, @Nullable Integer i) {
+      checkNotNull(s);
+      i.intValue(); // ok to throw NPE?
+    }
+  }
+  static { passClasses.add(PassTwoMixedArgsNullableArgThrowsNPE.class); }
+
+  static class PassTwoMixedArgSecondNullableArgThrowsOther extends PassObject {
+    @Override public void twoMixedArgs(String s, @Nullable Integer i) {
+      checkNotNull(s);
+      doThrow(i); // ok to throw non-NPE exception for null i
+    }
+  }
+  static { passClasses.add(PassTwoMixedArgSecondNullableArgThrowsOther.class); }
+
+  static class FailTwoMixedArgsSecondArgDoesntThrowNPE extends PassObject {
+    @Override public void twoMixedArgs(@Nullable Integer i, String s) {
+      // Fail: missing NPE for null s
+    }
+  }
+  static { failClasses.add(FailTwoMixedArgsSecondArgDoesntThrowNPE.class); }
+
+  static class FailTwoMixedArgsSecondArgThrowsWrongType extends PassObject {
+    @Override public void twoMixedArgs(@Nullable Integer i, String s) {
+      doThrow(s); // Fail:  throwing non-NPE exception for null s
+    }
+  }
+  static { failClasses.add(FailTwoMixedArgsSecondArgThrowsWrongType.class); }
+
+  static class PassTwoNullableArgsFirstThrowsNPE extends PassObject {
+    @Override public void twoNullableArgs(
+        @Nullable String s, @Nullable Integer i) {
+      checkNotNull(s); // ok to throw NPE?
+    }
+  }
+  static { passClasses.add(PassTwoNullableArgsFirstThrowsNPE.class); }
+
+  static class PassTwoNullableArgsFirstThrowsOther extends PassObject {
+    @Override public void twoNullableArgs(
+        @Nullable String s, @Nullable Integer i) {
+      doThrow(s); // ok to throw non-NPE exception for null s
+    }
+  }
+  static { passClasses.add(PassTwoNullableArgsFirstThrowsOther.class); }
+
+  static class PassTwoNullableArgsSecondThrowsNPE extends PassObject {
+    @Override public void twoNullableArgs(
+        @Nullable String s, @Nullable Integer i) {
+      i.intValue(); // ok to throw NPE?
+    }
+  }
+  static { passClasses.add(PassTwoNullableArgsSecondThrowsNPE.class); }
+
+  static class PassTwoNullableArgsSecondThrowsOther extends PassObject {
+    @Override public void twoNullableArgs(
+        @Nullable String s, @Nullable Integer i) {
+      doThrow(i); // ok to throw non-NPE exception for null i
+    }
+  }
+  static { passClasses.add(PassTwoNullableArgsSecondThrowsOther.class); }
+
+  static class PassTwoNullableArgsNeitherThrowsAnything extends PassObject {
+    @Override public void twoNullableArgs(
+        @Nullable String s, @Nullable Integer i) {
+      // ok to do nothing
+    }
+  }
+  static { passClasses.add(PassTwoNullableArgsNeitherThrowsAnything.class); }
+
+  /** Sanity check:  it's easy to make typos. */
+  private void checkClasses(String message, List<Class<?>> classes) {
+    Set<Class<?>> set = Sets.newHashSet(classes);
+    for (Class<?> clazz : classes) {
+      if (!set.remove(clazz)) {
+        fail(String.format("%s: %s appears twice. Typo?",
+            message, clazz.getSimpleName()));
+      }
+    }
+  }
+
+  public void testDidntMakeTypoInTestCases() {
+    checkClasses("passClass", passClasses);
+    checkClasses("failClasses", failClasses);
+    List<Class<?>> allClasses = Lists.newArrayList(passClasses);
+    allClasses.addAll(failClasses);
+    checkClasses("allClasses", allClasses);
+  }
+
+  public void testShouldNotFindProblemInPassClass() throws Exception {
+    for (Class<?> passClass : passClasses) {
+      Object instance = passClass.newInstance();
+      try {
+        tester.testAllPublicInstanceMethods(instance);
+      } catch (AssertionFailedError e) {
+        assertNull("Should not detect problem in " + passClass.getSimpleName(),
+            e);
+      }
+    }
+  }
+
+  public void testShouldFindProblemInFailClass() throws Exception {
+    for (Class<?> failClass : failClasses) {
+      Object instance = failClass.newInstance();
+      boolean foundProblem = false;
+      try {
+        tester.testAllPublicInstanceMethods(instance);
+      } catch (AssertionFailedError e) {
+        foundProblem = true;
+      }
+      assertTrue("Should detect problem in " + failClass.getSimpleName(),
+          foundProblem);
+    }
+  }
+
+  private static class PrivateClassWithPrivateConstructor {
+    private PrivateClassWithPrivateConstructor(@Nullable Integer argument) {}
+  }
+
+  public void testPrivateClass() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    for (Constructor<?> constructor
+        : PrivateClassWithPrivateConstructor.class.getDeclaredConstructors()) {
+      tester.testConstructor(constructor);
+    }
+  }
+  
+  private interface Foo<T> {
+    void doSomething(T bar, Integer baz);
+  }
+  
+  private static class StringFoo implements Foo<String> {
+
+    @Override public void doSomething(String bar, Integer baz) {
+      checkNotNull(bar);
+      checkNotNull(baz);
+    }
+  }
+  
+  public void testBidgeMethodIgnored() throws Exception {
+    new NullPointerTester().testAllPublicInstanceMethods(new StringFoo());
+  }
+
+  /*
+   *
+   * TODO(kevinb): This is only a very small start.
+   * Must come back and finish.
+   *
+   */
+
+}
diff --git a/guava-tests/test/com/google/common/testing/SerializableTesterTest.java b/guava-tests/test/com/google/common/testing/SerializableTesterTest.java
new file mode 100644
index 0000000..d62860b
--- /dev/null
+++ b/guava-tests/test/com/google/common/testing/SerializableTesterTest.java
@@ -0,0 +1,133 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.testing;
+
+import junit.framework.AssertionFailedError;
+import junit.framework.TestCase;
+
+import java.io.Serializable;
+
+/**
+ * Tests for {@link SerializableTester}.
+ *
+ * @author Nick Kralevich
+ */
+public class SerializableTesterTest extends TestCase {
+  public void testStringAssertions() {
+    String original = "hello world";
+    String copy = SerializableTester.reserializeAndAssert(original);
+    assertEquals(original, copy);
+    assertNotSame(original, copy);
+  }
+
+  public void testClassWhichDoesNotImplementEquals() {
+    ClassWhichDoesNotImplementEquals orig =
+        new ClassWhichDoesNotImplementEquals();
+    boolean errorNotThrown = false;
+    try {
+      SerializableTester.reserializeAndAssert(orig);
+      errorNotThrown = true;
+    } catch (AssertionFailedError error) {
+      // expected
+      assertContains("must be equal to", error.getMessage());
+    }
+    assertFalse(errorNotThrown);
+  }
+
+  public void testClassWhichIsAlwaysEqualButHasDifferentHashcodes() {
+    ClassWhichIsAlwaysEqualButHasDifferentHashcodes orig =
+        new ClassWhichIsAlwaysEqualButHasDifferentHashcodes();
+    boolean errorNotThrown = false;
+    try {
+      SerializableTester.reserializeAndAssert(orig);
+      errorNotThrown = true;
+    } catch (AssertionFailedError error) {
+      // expected
+      assertContains("must be equal to the hash", error.getMessage());
+    }
+    assertFalse(errorNotThrown);
+  }
+
+  public void testObjectWhichIsEqualButChangesClass() {
+    ObjectWhichIsEqualButChangesClass orig =
+        new ObjectWhichIsEqualButChangesClass();
+    boolean errorNotThrown = false;
+    try {
+      SerializableTester.reserializeAndAssert(orig);
+      errorNotThrown = true;
+    } catch (AssertionFailedError error) {
+      // expected
+      assertContains("expected:<class ", error.getMessage());
+    }
+    assertFalse(errorNotThrown);
+  }
+
+  private static class ClassWhichDoesNotImplementEquals
+      implements Serializable {
+    private static final long serialVersionUID = 1L;
+  }
+
+  private static class ClassWhichIsAlwaysEqualButHasDifferentHashcodes
+      implements Serializable {
+    private static final long serialVersionUID = 2L;
+
+    @Override
+    public boolean equals(Object other) {
+      return (other instanceof ClassWhichIsAlwaysEqualButHasDifferentHashcodes);
+    }
+  }
+
+  private static class ObjectWhichIsEqualButChangesClass
+      implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @Override
+    public boolean equals(Object other) {
+      return (other instanceof ObjectWhichIsEqualButChangesClass
+          || other instanceof OtherForm);
+    }
+
+    @Override
+    public int hashCode() {
+      return 1;
+    }
+
+    private Object writeReplace() {
+      return new OtherForm();
+    }
+
+    private static class OtherForm implements Serializable {
+      @Override
+      public boolean equals(Object other) {
+        return (other instanceof ObjectWhichIsEqualButChangesClass
+            || other instanceof OtherForm);
+      }
+
+      @Override
+      public int hashCode() {
+        return 1;
+      }
+    }
+  }
+
+  private static void assertContains(String expectedSubstring, String actual) {
+    // TODO(kevinb): use a Truth assertion here
+    if (!actual.contains(expectedSubstring)) {
+      fail("expected <" + actual + "> to contain <" + expectedSubstring + ">");
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/testing/TearDownStackTest.java b/guava-tests/test/com/google/common/testing/TearDownStackTest.java
new file mode 100644
index 0000000..ee26536
--- /dev/null
+++ b/guava-tests/test/com/google/common/testing/TearDownStackTest.java
@@ -0,0 +1,174 @@
+/*
+ * Copyright (C) 2010 Google Inc.
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.testing;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
+import com.google.common.annotations.GwtCompatible;
+
+import junit.framework.TestCase;
+
+import org.junit.Test;
+
+/**
+ * @author Luiz-Otavio "Z" Zorzella
+ */
+@GwtCompatible
+public class TearDownStackTest extends TestCase {
+
+  private TearDownStack tearDownStack = new TearDownStack();
+
+  @Test
+  public void testSingleTearDown() throws Exception {
+    final TearDownStack stack = buildTearDownStack();
+
+    final SimpleTearDown tearDown = new SimpleTearDown();
+    stack.addTearDown(tearDown);
+
+    assertEquals(false, tearDown.ran);
+
+    stack.runTearDown();
+
+    assertEquals("tearDown should have run", true, tearDown.ran);
+  }
+
+  @Test
+  public void testMultipleTearDownsHappenInOrder() throws Exception {
+    final TearDownStack stack = buildTearDownStack();
+
+    final SimpleTearDown tearDownOne = new SimpleTearDown();
+    stack.addTearDown(tearDownOne);
+
+    final Callback callback = new Callback() {
+      @Override
+      public void run() {
+        assertEquals("tearDownTwo should have been run before tearDownOne",
+          false, tearDownOne.ran);
+      }
+    };
+
+    final SimpleTearDown tearDownTwo = new SimpleTearDown(callback);
+    stack.addTearDown(tearDownTwo);
+
+    assertEquals(false, tearDownOne.ran);
+    assertEquals(false, tearDownTwo.ran);
+
+    stack.runTearDown();
+
+    assertEquals("tearDownOne should have run", true, tearDownOne.ran);
+    assertEquals("tearDownTwo should have run", true, tearDownTwo.ran);
+  }
+
+  @Test
+  public void testThrowingTearDown() throws Exception {
+    final TearDownStack stack = buildTearDownStack();
+
+    final ThrowingTearDown tearDownOne = new ThrowingTearDown("one");
+    stack.addTearDown(tearDownOne);
+
+    final ThrowingTearDown tearDownTwo = new ThrowingTearDown("two");
+    stack.addTearDown(tearDownTwo);
+
+    assertEquals(false, tearDownOne.ran);
+    assertEquals(false, tearDownTwo.ran);
+
+    try {
+      stack.runTearDown();
+      fail("runTearDown should have thrown an exception");
+    } catch (ClusterException expected) {
+      assertEquals("two", expected.getCause().getMessage());
+    } catch (RuntimeException e) {
+      throw new RuntimeException(
+        "A ClusterException should have been thrown, rather than a " + e.getClass().getName(), e);
+    }
+
+    assertEquals(true, tearDownOne.ran);
+    assertEquals(true, tearDownTwo.ran);
+  }
+
+  @Override public final void runBare() throws Throwable {
+    try {
+      setUp();
+      runTest();
+    } finally {
+      tearDown();
+    }
+  }
+
+  @Override protected void tearDown() {
+    tearDownStack.runTearDown();
+  }
+
+  /**
+   * Builds a {@link TearDownStack} that makes sure it's clear by the end of
+   * this test.
+   */
+  private TearDownStack buildTearDownStack() {
+    final TearDownStack result = new TearDownStack();
+    tearDownStack.addTearDown(new TearDown() {
+
+      @Override
+      public void tearDown() throws Exception {
+        assertEquals(
+          "The test should have cleared the stack (say, by virtue of running runTearDown)",
+          0, result.stack.size());
+      }
+    });
+    return result;
+  }
+
+  private static final class ThrowingTearDown implements TearDown {
+
+    private final String id;
+    boolean ran = false;
+
+    ThrowingTearDown(String id) {
+      this.id = id;
+    }
+
+    @Override
+    public void tearDown() throws Exception {
+      ran = true;
+      throw new RuntimeException(id);
+    }
+  }
+
+  private static final class SimpleTearDown implements TearDown {
+
+    boolean ran = false;
+    Callback callback = null;
+
+    public SimpleTearDown() {}
+
+    public SimpleTearDown(Callback callback) {
+      this.callback = callback;
+    }
+
+    @Override
+    public void tearDown() throws Exception {
+      if (callback != null) {
+        callback.run();
+      }
+      ran = true;
+    }
+  }
+
+  private interface Callback {
+    void run();
+  }
+}
diff --git a/guava-tests/test/com/google/common/testing/TestLogHandlerTest.java b/guava-tests/test/com/google/common/testing/TestLogHandlerTest.java
new file mode 100644
index 0000000..9dd4ad3
--- /dev/null
+++ b/guava-tests/test/com/google/common/testing/TestLogHandlerTest.java
@@ -0,0 +1,97 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.testing;
+
+import junit.framework.TestCase;
+
+import java.util.logging.Level;
+import java.util.logging.LogRecord;
+import java.util.logging.Logger;
+
+/**
+ * Unit test for {@link TestLogHandler}.
+ *
+ * @author kevinb
+ */
+public class TestLogHandlerTest extends TestCase {
+
+  private TestLogHandler handler;
+  private TearDownStack stack = new TearDownStack();
+
+  @Override protected void setUp() throws Exception {
+    super.setUp();
+
+    handler = new TestLogHandler();
+
+    // You could also apply it higher up the Logger hierarchy than this
+    ExampleClassUnderTest.logger.addHandler(handler);
+
+    ExampleClassUnderTest.logger.setUseParentHandlers(false); // optional
+
+    stack.addTearDown(new TearDown() {
+      @Override
+      public void tearDown() throws Exception {
+        ExampleClassUnderTest.logger.setUseParentHandlers(true);
+        ExampleClassUnderTest.logger.removeHandler(handler);
+      }
+    });
+  }
+
+  public void test() throws Exception {
+    assertTrue(handler.getStoredLogRecords().isEmpty());
+    ExampleClassUnderTest.foo();
+    LogRecord record = handler.getStoredLogRecords().iterator().next();
+    assertEquals(Level.INFO, record.getLevel());
+    assertEquals("message", record.getMessage());
+    assertSame(EXCEPTION, record.getThrown());
+  }
+
+  public void testConcurrentModification() throws Exception {
+    // Tests for the absence of a bug where logging while iterating over the
+    // stored log records causes a ConcurrentModificationException
+    assertTrue(handler.getStoredLogRecords().isEmpty());
+    ExampleClassUnderTest.foo();
+    ExampleClassUnderTest.foo();
+    for (LogRecord record : handler.getStoredLogRecords()) {
+      ExampleClassUnderTest.foo();
+    }
+  }
+
+  @Override public final void runBare() throws Throwable {
+    try {
+      setUp();
+      runTest();
+    } finally {
+      tearDown();
+    }
+  }
+
+  @Override protected void tearDown() {
+    stack.runTearDown();
+  }
+
+  static final Exception EXCEPTION = new Exception();
+
+  static class ExampleClassUnderTest {
+    static final Logger logger
+        = Logger.getLogger(ExampleClassUnderTest.class.getName());
+
+    static void foo() {
+      logger.log(Level.INFO,  "message", EXCEPTION);
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/util/concurrent/AbstractChainedListenableFutureTest.java b/guava-tests/test/com/google/common/util/concurrent/AbstractChainedListenableFutureTest.java
new file mode 100644
index 0000000..3e57992
--- /dev/null
+++ b/guava-tests/test/com/google/common/util/concurrent/AbstractChainedListenableFutureTest.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import com.google.common.util.concurrent.testing.MockFutureListener;
+
+import junit.framework.TestCase;
+
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+
+/**
+ * Unit tests for any listenable future that chains other listenable futures.
+ * Unit tests need only override buildChainingFuture and getSuccessfulResult,
+ * but they can add custom tests as needed.
+ *
+ * @author Nishant Thakkar
+ */
+public abstract class AbstractChainedListenableFutureTest<T> extends TestCase {
+  protected static final int EXCEPTION_DATA = -1;
+  protected static final int VALID_INPUT_DATA = 1;
+  protected static final Exception EXCEPTION = new Exception("Test exception");
+
+  protected SettableFuture<Integer> inputFuture;
+  protected ListenableFuture<T> resultFuture;
+  protected MockFutureListener listener;
+
+  @Override
+  protected void setUp() throws Exception {
+    super.setUp();
+
+    inputFuture = SettableFuture.create();
+    resultFuture = buildChainingFuture(inputFuture);
+    listener = new MockFutureListener(resultFuture);
+
+  }
+
+  public void testFutureGetBeforeCallback() throws Exception {
+    // Verify that get throws a timeout exception before the callback is called.
+    try {
+      resultFuture.get(1L, TimeUnit.MILLISECONDS);
+      fail("The data is not yet ready, so a TimeoutException is expected");
+    } catch (TimeoutException expected) {}
+  }
+
+  public void testFutureGetThrowsWrappedException() throws Exception {
+    inputFuture.setException(EXCEPTION);
+    listener.assertException(EXCEPTION);
+  }
+
+  public void testFutureGetThrowsWrappedError() throws Exception {
+    Error error = new Error();
+    try {
+      inputFuture.setException(error);
+      fail("Expected an Error to be thrown");  // COV_NF_LINE
+    } catch (Error expected) {
+      assertSame(error, expected);
+    }
+
+    // Verify that get throws an ExecutionException, caused by an Error, when
+    // the callback is called.
+    listener.assertException(error);
+  }
+
+  public void testAddListenerAfterCallback() throws Throwable {
+    inputFuture.set(VALID_INPUT_DATA);
+
+    listener.assertSuccess(getSuccessfulResult());
+  }
+
+  public void testFutureBeforeCallback() throws Throwable {
+    inputFuture.set(VALID_INPUT_DATA);
+
+    listener.assertSuccess(getSuccessfulResult());
+  }
+
+  /**
+   * Override to return a chaining listenableFuture that returns the result of
+   * getSuccessfulResult() when inputFuture returns VALID_INPUT_DATA, and sets
+   * the exception to EXCEPTION in all other cases.
+   */
+  protected abstract ListenableFuture<T> buildChainingFuture(
+      ListenableFuture<Integer> inputFuture);
+
+  /**
+   * Override to return the result when VALID_INPUT_DATA is passed in to
+   * the chaining listenableFuture
+   */
+  protected abstract T getSuccessfulResult();
+}
diff --git a/guava-tests/test/com/google/common/util/concurrent/AbstractExecutionThreadServiceTest.java b/guava-tests/test/com/google/common/util/concurrent/AbstractExecutionThreadServiceTest.java
new file mode 100644
index 0000000..d7fd91e
--- /dev/null
+++ b/guava-tests/test/com/google/common/util/concurrent/AbstractExecutionThreadServiceTest.java
@@ -0,0 +1,302 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import com.google.common.base.Throwables;
+
+import junit.framework.TestCase;
+
+import java.lang.Thread.UncaughtExceptionHandler;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Executor;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+
+/**
+ * Unit test for {@link AbstractExecutionThreadService}.
+ *
+ * @author Jesse Wilson
+ */
+public class AbstractExecutionThreadServiceTest extends TestCase {
+
+  private final CountDownLatch enterRun = new CountDownLatch(1);
+  private final CountDownLatch exitRun = new CountDownLatch(1);
+
+  private Thread executionThread;
+  private Throwable thrownByExecutionThread;
+  private final Executor executor = new Executor() {
+    @Override
+    public void execute(Runnable command) {
+      executionThread = new Thread(command);
+      executionThread.setUncaughtExceptionHandler(new UncaughtExceptionHandler() {
+        @Override
+        public void uncaughtException(Thread thread, Throwable e) {
+          thrownByExecutionThread = e;
+        }
+      });
+      executionThread.start();
+    }
+  };
+
+  public void testServiceStartStop() throws Exception {
+    WaitOnRunService service = new WaitOnRunService();
+    assertFalse(service.startUpCalled);
+
+    service.start().get();
+    assertTrue(service.startUpCalled);
+    assertEquals(Service.State.RUNNING, service.state());
+
+    enterRun.await(); // to avoid stopping the service until run() is invoked
+
+    service.stop().get();
+    assertTrue(service.shutDownCalled);
+    assertEquals(Service.State.TERMINATED, service.state());
+    executionThread.join();
+    assertNull(thrownByExecutionThread);
+  }
+
+  public void testServiceStartStopIdempotence() throws Exception {
+    WaitOnRunService service = new WaitOnRunService();
+
+    service.start();
+    service.start();
+    service.startAndWait();
+    assertEquals(Service.State.RUNNING, service.state());
+    service.startAndWait();
+    assertEquals(Service.State.RUNNING, service.state());
+
+    enterRun.await(); // to avoid stopping the service until run() is invoked
+
+    service.stop();
+    service.stop();
+    service.stopAndWait();
+    assertEquals(Service.State.TERMINATED, service.state());
+    service.stopAndWait();
+    assertEquals(Service.State.TERMINATED, service.state());
+
+    assertEquals(Service.State.RUNNING, service.start().get());
+    assertEquals(Service.State.RUNNING, service.startAndWait());
+    assertEquals(Service.State.TERMINATED, service.stop().get());
+    assertEquals(Service.State.TERMINATED, service.stopAndWait());
+
+    executionThread.join();
+    assertNull(thrownByExecutionThread);
+  }
+
+  public void testServiceExitingOnItsOwn() throws Exception {
+    WaitOnRunService service = new WaitOnRunService();
+    service.expectedShutdownState = Service.State.RUNNING;
+
+    service.start().get();
+    assertTrue(service.startUpCalled);
+    assertEquals(Service.State.RUNNING, service.state());
+
+    exitRun.countDown(); // the service will exit voluntarily
+    executionThread.join();
+
+    assertTrue(service.shutDownCalled);
+    assertEquals(Service.State.TERMINATED, service.state());
+    assertNull(thrownByExecutionThread);
+
+    service.stop().get(); // no-op
+    assertEquals(Service.State.TERMINATED, service.state());
+    assertTrue(service.shutDownCalled);
+  }
+
+  private class WaitOnRunService extends AbstractExecutionThreadService {
+    private boolean startUpCalled = false;
+    private boolean runCalled = false;
+    private boolean shutDownCalled = false;
+    private State expectedShutdownState = State.STOPPING;
+
+    @Override protected void startUp() {
+      assertFalse(startUpCalled);
+      assertFalse(runCalled);
+      assertFalse(shutDownCalled);
+      startUpCalled = true;
+      assertEquals(State.STARTING, state());
+    }
+
+    @Override protected void run() {
+      assertTrue(startUpCalled);
+      assertFalse(runCalled);
+      assertFalse(shutDownCalled);
+      runCalled = true;
+      assertEquals(State.RUNNING, state());
+
+      enterRun.countDown();
+      try {
+        exitRun.await();
+      } catch (InterruptedException e) {
+        throw Throwables.propagate(e);
+      }
+    }
+
+    @Override protected void shutDown() {
+      assertTrue(startUpCalled);
+      assertTrue(runCalled);
+      assertFalse(shutDownCalled);
+      shutDownCalled = true;
+      assertEquals(expectedShutdownState, state());
+    }
+
+    @Override protected void triggerShutdown() {
+      exitRun.countDown();
+    }
+
+    @Override protected Executor executor() {
+      return executor;
+    }
+  }
+
+  public void testServiceThrowOnStartUp() throws Exception {
+    ThrowOnStartUpService service = new ThrowOnStartUpService();
+    assertFalse(service.startUpCalled);
+
+    Future<Service.State> startupFuture = service.start();
+    try {
+      startupFuture.get();
+      fail();
+    } catch (ExecutionException expected) {
+      assertEquals("kaboom!", expected.getCause().getMessage());
+    }
+    executionThread.join();
+
+    assertTrue(service.startUpCalled);
+    assertEquals(Service.State.FAILED, service.state());
+    assertTrue(thrownByExecutionThread.getMessage().equals("kaboom!"));
+  }
+
+  private class ThrowOnStartUpService extends AbstractExecutionThreadService {
+    private boolean startUpCalled = false;
+
+    @Override protected void startUp() {
+      startUpCalled = true;
+      throw new UnsupportedOperationException("kaboom!");
+    }
+
+    @Override protected void run() {
+      throw new AssertionError("run() should not be called");
+    }
+
+    @Override protected Executor executor() {
+      return executor;
+    }
+  }
+
+  public void testServiceThrowOnRun() throws Exception {
+    ThrowOnRunService service = new ThrowOnRunService();
+
+    service.start().get();
+
+    executionThread.join();
+    assertTrue(service.shutDownCalled);
+    assertEquals(Service.State.FAILED, service.state());
+    assertEquals("kaboom!", thrownByExecutionThread.getMessage());
+  }
+
+  public void testServiceThrowOnRunAndThenAgainOnShutDown() throws Exception {
+    ThrowOnRunService service = new ThrowOnRunService();
+    service.throwOnShutDown = true;
+
+    service.start().get();
+    executionThread.join();
+
+    assertTrue(service.shutDownCalled);
+    assertEquals(Service.State.FAILED, service.state());
+    assertEquals("kaboom!", thrownByExecutionThread.getMessage());
+  }
+
+  private class ThrowOnRunService extends AbstractExecutionThreadService {
+    private boolean shutDownCalled = false;
+    private boolean throwOnShutDown = false;
+
+    @Override protected void run() {
+      throw new UnsupportedOperationException("kaboom!");
+    }
+
+    @Override protected void shutDown() {
+      shutDownCalled = true;
+      if (throwOnShutDown) {
+        throw new UnsupportedOperationException("double kaboom!");
+      }
+    }
+
+    @Override protected Executor executor() {
+      return executor;
+    }
+  }
+
+  public void testServiceThrowOnShutDown() throws Exception {
+    ThrowOnShutDown service = new ThrowOnShutDown();
+
+    service.start().get();
+    assertEquals(Service.State.RUNNING, service.state());
+
+    service.stop();
+    enterRun.countDown();
+    executionThread.join();
+
+    assertEquals(Service.State.FAILED, service.state());
+    assertEquals("kaboom!", thrownByExecutionThread.getMessage());
+  }
+
+  private class ThrowOnShutDown extends AbstractExecutionThreadService {
+    @Override protected void run() {
+      try {
+        enterRun.await();
+      } catch (InterruptedException e) {
+        throw Throwables.propagate(e);
+      }
+    }
+
+    @Override protected void shutDown() {
+      throw new UnsupportedOperationException("kaboom!");
+    }
+
+    @Override protected Executor executor() {
+      return executor;
+    }
+  }
+
+  public void testServiceTimeoutOnStartUp() throws Exception {
+    TimeoutOnStartUp service = new TimeoutOnStartUp();
+
+    try {
+      service.start().get(1, TimeUnit.MILLISECONDS);
+      fail();
+    } catch (TimeoutException e) {
+      assertTrue(e.getMessage().contains(Service.State.STARTING.toString()));
+    }
+  }
+
+  private class TimeoutOnStartUp extends AbstractExecutionThreadService {
+    @Override protected Executor executor() {
+      return new Executor() {
+        @Override public void execute(Runnable command) {
+        }
+      };
+    }
+
+    @Override
+    protected void run() throws Exception {
+    }
+  }
+
+}
diff --git a/guava-tests/test/com/google/common/util/concurrent/AbstractFutureTest.java b/guava-tests/test/com/google/common/util/concurrent/AbstractFutureTest.java
new file mode 100644
index 0000000..a7dd412
--- /dev/null
+++ b/guava-tests/test/com/google/common/util/concurrent/AbstractFutureTest.java
@@ -0,0 +1,186 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import junit.framework.AssertionFailedError;
+import junit.framework.TestCase;
+
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.atomic.AtomicReference;
+
+/**
+ * Tests for {@link AbstractFuture}.
+ *
+ * @author Brian Stoler
+ */
+
+public class AbstractFutureTest extends TestCase {
+  public void testSuccess() throws ExecutionException, InterruptedException {
+    final Object value = new Object();
+    assertSame(value, new AbstractFuture<Object>() {
+      {
+        set(value);
+      }
+    }.get());
+  }
+
+  public void testException() throws InterruptedException {
+    final Throwable failure = new Throwable();
+    AbstractFuture<String> future = new AbstractFuture<String>() {
+      {
+        setException(failure);
+      }
+    };
+
+    ExecutionException ee1 = getExpectingExecutionException(future);
+    ExecutionException ee2 = getExpectingExecutionException(future);
+
+    // Ensure we get a unique execution exception on each get
+    assertNotSame(ee1, ee2);
+
+    assertSame(failure, ee1.getCause());
+    assertSame(failure, ee2.getCause());
+
+    checkStackTrace(ee1);
+    checkStackTrace(ee2);
+  }
+
+  public void testCancel_notDoneNoInterrupt() {
+    InterruptibleFuture future = new InterruptibleFuture();
+    assertTrue(future.cancel(false));
+    assertTrue(future.isCancelled());
+    assertTrue(future.isDone());
+    assertFalse(future.wasInterrupted);
+  }
+
+  public void testCancel_notDoneInterrupt() {
+    InterruptibleFuture future = new InterruptibleFuture();
+    assertTrue(future.cancel(true));
+    assertTrue(future.isCancelled());
+    assertTrue(future.isDone());
+    assertTrue(future.wasInterrupted);
+  }
+
+  public void testCancel_done() {
+    AbstractFuture<String> future = new AbstractFuture<String>() {
+      {
+        set("foo");
+      }
+    };
+    assertFalse(future.cancel(true));
+    assertFalse(future.isCancelled());
+    assertTrue(future.isDone());
+  }
+
+  public void testCompletionFinishesWithDone() {
+    ExecutorService executor = Executors.newFixedThreadPool(10);
+    for (int i = 0; i < 50000; i++) {
+      final AbstractFuture<String> future = new AbstractFuture<String>() {};
+      final AtomicReference<String> errorMessage = new AtomicReference<String>();
+      executor.execute(new Runnable() {
+        @Override
+        public void run() {
+          future.set("success");
+          if (!future.isDone()) {
+            errorMessage.set("Set call exited before future was complete.");
+          }
+        }
+      });
+      executor.execute(new Runnable() {
+        @Override
+        public void run() {
+          future.setException(new IllegalArgumentException("failure"));
+          if (!future.isDone()) {
+            errorMessage.set("SetException call exited before future was complete.");
+          }
+        }
+      });
+      executor.execute(new Runnable() {
+        @Override
+        public void run() {
+          future.cancel(true);
+          if (!future.isDone()) {
+            errorMessage.set("Cancel call exited before future was complete.");
+          }
+        }
+      });
+      try {
+        future.get();
+      } catch (Throwable t) {
+        // Ignore, we just wanted to block.
+      }
+      String error = errorMessage.get();
+      assertNull(error, error);
+    }
+    executor.shutdown();
+  }
+
+  private void checkStackTrace(ExecutionException e) {
+    // Our call site for get() should be in the trace.
+    int index = findStackFrame(
+        e, getClass().getName(), "getExpectingExecutionException");
+
+    ASSERT.that(index).isNotEqualTo(0);
+
+    // Above our method should be the call to get(). Don't assert on the class
+    // because it could be some superclass.
+    ASSERT.that(e.getStackTrace()[index - 1].getMethodName()).isEqualTo("get");
+  }
+
+  private static int findStackFrame(
+      ExecutionException e, String clazz, String method) {
+    StackTraceElement[] elements = e.getStackTrace();
+    for (int i = 0; i < elements.length; i++) {
+      StackTraceElement element = elements[i];
+      if (element.getClassName().equals(clazz)
+          && element.getMethodName().equals(method)) {
+        return i;
+      }
+    }
+    AssertionFailedError failure =
+        new AssertionFailedError("Expected element " + clazz + "." + method
+            + " not found in stack trace");
+    failure.initCause(e);
+    throw failure;
+  }
+
+  private ExecutionException getExpectingExecutionException(
+      AbstractFuture<String> future) throws InterruptedException {
+    try {
+      String got = future.get();
+      fail("Expected exception but got " + got);
+    } catch (ExecutionException e) {
+      return e;
+    }
+
+    // unreachable, but compiler doesn't know that fail() always throws
+    return null;
+  }
+
+  private static final class InterruptibleFuture
+      extends AbstractFuture<String> {
+    boolean wasInterrupted;
+
+    @Override protected void interruptTask() {
+      wasInterrupted = true;
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/util/concurrent/AbstractIdleServiceTest.java b/guava-tests/test/com/google/common/util/concurrent/AbstractIdleServiceTest.java
new file mode 100644
index 0000000..8131a37
--- /dev/null
+++ b/guava-tests/test/com/google/common/util/concurrent/AbstractIdleServiceTest.java
@@ -0,0 +1,127 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import com.google.common.util.concurrent.Service.State;
+
+import junit.framework.TestCase;
+
+import java.lang.Thread.UncaughtExceptionHandler;
+import java.util.concurrent.Executor;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+
+/**
+ * Unit test for {@link AbstractIdleService}.
+ *
+ * @author Chris Nokleberg
+ */
+public class AbstractIdleServiceTest extends TestCase {
+  private Thread executorThread;
+  private Throwable thrownByExecutorThread;
+  private final Executor executor = new Executor() {
+    @Override
+    public void execute(Runnable command) {
+      executorThread = new Thread(command);
+      executorThread.setUncaughtExceptionHandler(
+          new UncaughtExceptionHandler() {
+            @Override
+            public void uncaughtException(Thread thread, Throwable e) {
+              thrownByExecutorThread = e;
+            }
+          });
+      executorThread.start();
+    }
+  };
+
+  public void testServiceStartStop() throws Exception {
+    NullService service = new NullService();
+    assertFalse(service.startUpCalled);
+
+    service.start().get();
+    assertTrue(service.startUpCalled);
+    assertEquals(Service.State.RUNNING, service.state());
+
+    service.stop().get();
+    assertTrue(service.shutDownCalled);
+    assertEquals(Service.State.TERMINATED, service.state());
+    executorThread.join();
+    assertNull(thrownByExecutorThread);
+  }
+
+  public void testServiceToString() throws Exception {
+    NullService service = new NullService();
+    assertEquals("NullService [" + Service.State.NEW + "]", service.toString());
+    service.start().get();
+    assertEquals("NullService [" + Service.State.RUNNING + "]", service.toString());
+    service.stop().get();
+    assertEquals("NullService [" + Service.State.TERMINATED + "]", service.toString());
+  }
+
+  public void testTimeout() throws Exception {
+    // Create a service whose executor will never run its commands
+    Service service = new NullService() {
+      @Override protected Executor executor(Service.State state) {
+        return new Executor() {
+          @Override public void execute(Runnable command) {
+          }
+        };
+      }
+    };
+
+    try {
+      service.start().get(1, TimeUnit.MILLISECONDS);
+      fail("Expected timeout");
+    } catch (TimeoutException e) {
+      assertTrue(e.getMessage().contains(State.STARTING.toString()));
+    }
+  }
+
+  private class NullService extends AbstractIdleService {
+    boolean startUpCalled = false;
+    boolean shutDownCalled = false;
+    State expectedShutdownState = State.STOPPING;
+
+    @Override protected void startUp() {
+      assertFalse(startUpCalled);
+      assertFalse(shutDownCalled);
+      startUpCalled = true;
+      assertEquals(State.STARTING, state());
+    }
+
+    @Override protected void shutDown() {
+      assertTrue(startUpCalled);
+      assertFalse(shutDownCalled);
+      shutDownCalled = true;
+      assertEquals(expectedShutdownState, state());
+    }
+
+    @Override protected Executor executor(Service.State state) {
+      switch (state) {
+        case STARTING:
+          assertFalse(startUpCalled);
+          return executor;
+        case STOPPING:
+          assertTrue(startUpCalled);
+          assertFalse(shutDownCalled);
+          return executor;
+        default:
+          throw new IllegalStateException("unexpected state " + state);
+      }
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/util/concurrent/AbstractListeningExecutorServiceTest.java b/guava-tests/test/com/google/common/util/concurrent/AbstractListeningExecutorServiceTest.java
new file mode 100644
index 0000000..1ef4a17
--- /dev/null
+++ b/guava-tests/test/com/google/common/util/concurrent/AbstractListeningExecutorServiceTest.java
@@ -0,0 +1,640 @@
+/*
+ * This file is a modified version of
+ * http://gee.cs.oswego.edu/cgi-bin/viewcvs.cgi/jsr166/src/test/tck/AbstractExecutorServiceTest.java?revision=1.30
+ * which contained the following notice:
+ *
+ * Written by Doug Lea with assistance from members of JCP JSR-166
+ * Expert Group and released to the public domain, as explained at
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ * Other contributors include Andrew Wright, Jeffrey Hayes,
+ * Pat Fisher, Mike Judd.
+ */
+
+package com.google.common.util.concurrent;
+
+import static java.util.concurrent.TimeUnit.MILLISECONDS;
+
+import java.security.PrivilegedAction;
+import java.security.PrivilegedExceptionAction;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.concurrent.ArrayBlockingQueue;
+import java.util.concurrent.Callable;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+
+public class AbstractListeningExecutorServiceTest extends JSR166TestCase {
+    /**
+     * A no-frills implementation of AbstractListeningExecutorService, designed
+     * to test the submit methods only.
+     */
+    static class DirectExecutorService
+            extends AbstractListeningExecutorService {
+        public void execute(Runnable r) { r.run(); }
+        public void shutdown() { shutdown = true; }
+        public List<Runnable> shutdownNow() {
+            shutdown = true;
+            return Collections.emptyList();
+        }
+        public boolean isShutdown() { return shutdown; }
+        public boolean isTerminated() { return isShutdown(); }
+        public boolean awaitTermination(long timeout, TimeUnit unit) {
+            return isShutdown();
+        }
+        private volatile boolean shutdown = false;
+    }
+
+    /**
+     * execute(runnable) runs it to completion
+     */
+    public void testExecuteRunnable() throws Exception {
+        ExecutorService e = new DirectExecutorService();
+        TrackedShortRunnable task = new TrackedShortRunnable();
+        assertFalse(task.done);
+        Future<?> future = e.submit(task);
+        future.get();
+        assertTrue(task.done);
+    }
+
+    /**
+     * Completed submit(callable) returns result
+     */
+    public void testSubmitCallable() throws Exception {
+        ExecutorService e = new DirectExecutorService();
+        Future<String> future = e.submit(new StringTask());
+        String result = future.get();
+        assertSame(TEST_STRING, result);
+    }
+
+    /**
+     * Completed submit(runnable) returns successfully
+     */
+    public void testSubmitRunnable() throws Exception {
+        ExecutorService e = new DirectExecutorService();
+        Future<?> future = e.submit(new NoOpRunnable());
+        future.get();
+        assertTrue(future.isDone());
+    }
+
+    /**
+     * Completed submit(runnable, result) returns result
+     */
+    public void testSubmitRunnable2() throws Exception {
+        ExecutorService e = new DirectExecutorService();
+        Future<String> future = e.submit(new NoOpRunnable(), TEST_STRING);
+        String result = future.get();
+        assertSame(TEST_STRING, result);
+    }
+
+    /**
+     * A submitted privileged action runs to completion
+     */
+    public void testSubmitPrivilegedAction() throws Exception {
+        Runnable r = new CheckedRunnable() {
+            @Override
+            public void realRun() throws Exception {
+                ExecutorService e = new DirectExecutorService();
+                Future future = e.submit(Executors.callable(
+                    new PrivilegedAction() {
+                        public Object run() {
+                            return TEST_STRING;
+                        }}));
+
+                assertSame(TEST_STRING, future.get());
+            }};
+
+        runWithPermissions(r,
+                           new RuntimePermission("getClassLoader"),
+                           new RuntimePermission("setContextClassLoader"),
+                           new RuntimePermission("modifyThread"));
+    }
+
+    /**
+     * A submitted privileged exception action runs to completion
+     */
+    public void testSubmitPrivilegedExceptionAction() throws Exception {
+        Runnable r = new CheckedRunnable() {
+            @Override
+            public void realRun() throws Exception {
+                ExecutorService e = new DirectExecutorService();
+                Future future = e.submit(Executors.callable(
+                    new PrivilegedExceptionAction() {
+                        public Object run() {
+                            return TEST_STRING;
+                        }}));
+
+                assertSame(TEST_STRING, future.get());
+            }};
+
+        runWithPermissions(r);
+    }
+
+    /**
+     * A submitted failed privileged exception action reports exception
+     */
+    public void testSubmitFailedPrivilegedExceptionAction() throws Exception {
+        Runnable r = new CheckedRunnable() {
+            @Override
+            public void realRun() throws Exception {
+                ExecutorService e = new DirectExecutorService();
+                Future future = e.submit(Executors.callable(
+                    new PrivilegedExceptionAction() {
+                        public Object run() throws Exception {
+                            throw new IndexOutOfBoundsException();
+                        }}));
+
+                try {
+                    future.get();
+                    shouldThrow();
+                } catch (ExecutionException success) {
+                    assertTrue(success.getCause()
+                        instanceof IndexOutOfBoundsException);
+                }}};
+
+        runWithPermissions(r);
+    }
+
+    /**
+     * execute(null runnable) throws NPE
+     */
+    public void testExecuteNullRunnable() {
+        try {
+            ExecutorService e = new DirectExecutorService();
+            e.submit((Runnable) null);
+            shouldThrow();
+        } catch (NullPointerException success) {}
+    }
+
+    /**
+     * submit(null callable) throws NPE
+     */
+    public void testSubmitNullCallable() {
+        try {
+            ExecutorService e = new DirectExecutorService();
+            e.submit((Callable<?>) null);
+            shouldThrow();
+        } catch (NullPointerException success) {}
+    }
+
+    /**
+     * submit(callable).get() throws InterruptedException if interrupted
+     */
+
+    public void testInterruptedSubmit() throws InterruptedException {
+        final CountDownLatch submitted    = new CountDownLatch(1);
+        final CountDownLatch quittingTime = new CountDownLatch(1);
+        final ExecutorService p
+            = new ThreadPoolExecutor(1,1,60, TimeUnit.SECONDS,
+                                     new ArrayBlockingQueue<Runnable>(10));
+        final Callable<Void> awaiter = new CheckedCallable<Void>() {
+            @Override
+            public Void realCall() throws InterruptedException {
+                quittingTime.await();
+                return null;
+            }};
+        try {
+            Thread t = new Thread(new CheckedInterruptedRunnable() {
+                @Override
+                public void realRun() throws Exception {
+                    Future<Void> future = p.submit(awaiter);
+                    submitted.countDown();
+                    future.get();
+                }});
+            t.start();
+            submitted.await();
+            t.interrupt();
+            t.join();
+        } finally {
+            quittingTime.countDown();
+            joinPool(p);
+        }
+    }
+
+    /**
+     * get of submit(callable) throws ExecutionException if callable
+     * throws exception
+     */
+
+    public void testSubmitEE() throws InterruptedException {
+        ThreadPoolExecutor p =
+            new ThreadPoolExecutor(1, 1,
+                                   60, TimeUnit.SECONDS,
+                                   new ArrayBlockingQueue<Runnable>(10));
+
+        Callable<Object> c = new Callable<Object>() {
+            public Object call() {
+                throw new ArithmeticException("/ by zero");
+            }};
+
+        try {
+            p.submit(c).get();
+            shouldThrow();
+        } catch (ExecutionException success) {
+            assertTrue(success.getCause() instanceof ArithmeticException);
+        }
+        joinPool(p);
+    }
+
+    /**
+     * invokeAny(null) throws NPE
+     */
+    public void testInvokeAny1() throws Exception {
+        ExecutorService e = new DirectExecutorService();
+        try {
+            e.invokeAny(null);
+            shouldThrow();
+        } catch (NullPointerException success) {
+        } finally {
+            joinPool(e);
+        }
+    }
+
+    /**
+     * invokeAny(empty collection) throws IAE
+     */
+    public void testInvokeAny2() throws Exception {
+        ExecutorService e = new DirectExecutorService();
+        try {
+            e.invokeAny(new ArrayList<Callable<String>>());
+            shouldThrow();
+        } catch (IllegalArgumentException success) {
+        } finally {
+            joinPool(e);
+        }
+    }
+
+    /**
+     * invokeAny(c) throws NPE if c has null elements
+     */
+    public void testInvokeAny3() throws Exception {
+        ExecutorService e = new DirectExecutorService();
+        List<Callable<Integer>> l = new ArrayList<Callable<Integer>>();
+        l.add(new Callable<Integer>() {
+            public Integer call() {
+                throw new ArithmeticException("/ by zero");
+            }});
+        l.add(null);
+        try {
+            e.invokeAny(l);
+            shouldThrow();
+        } catch (NullPointerException success) {
+        } finally {
+            joinPool(e);
+        }
+    }
+
+    /**
+     * invokeAny(c) throws ExecutionException if no task in c completes
+     */
+    public void testInvokeAny4() throws InterruptedException {
+        ExecutorService e = new DirectExecutorService();
+        List<Callable<String>> l = new ArrayList<Callable<String>>();
+        l.add(new NPETask());
+        try {
+            e.invokeAny(l);
+            shouldThrow();
+        } catch (ExecutionException success) {
+            assertTrue(success.getCause() instanceof NullPointerException);
+        } finally {
+            joinPool(e);
+        }
+    }
+
+    /**
+     * invokeAny(c) returns result of some task in c if at least one completes
+     */
+    public void testInvokeAny5() throws Exception {
+        ExecutorService e = new DirectExecutorService();
+        try {
+            List<Callable<String>> l = new ArrayList<Callable<String>>();
+            l.add(new StringTask());
+            l.add(new StringTask());
+            String result = e.invokeAny(l);
+            assertSame(TEST_STRING, result);
+        } finally {
+            joinPool(e);
+        }
+    }
+
+    /**
+     * invokeAll(null) throws NPE
+     */
+    public void testInvokeAll1() throws InterruptedException {
+        ExecutorService e = new DirectExecutorService();
+        try {
+            e.invokeAll(null);
+            shouldThrow();
+        } catch (NullPointerException success) {
+        } finally {
+            joinPool(e);
+        }
+    }
+
+    /**
+     * invokeAll(empty collection) returns empty collection
+     */
+    public void testInvokeAll2() throws InterruptedException {
+        ExecutorService e = new DirectExecutorService();
+        try {
+            List<Future<String>> r =
+                e.invokeAll(new ArrayList<Callable<String>>());
+            assertTrue(r.isEmpty());
+        } finally {
+            joinPool(e);
+        }
+    }
+
+    /**
+     * invokeAll(c) throws NPE if c has null elements
+     */
+    public void testInvokeAll3() throws InterruptedException {
+        ExecutorService e = new DirectExecutorService();
+        List<Callable<String>> l = new ArrayList<Callable<String>>();
+        l.add(new StringTask());
+        l.add(null);
+        try {
+            e.invokeAll(l);
+            shouldThrow();
+        } catch (NullPointerException success) {
+        } finally {
+            joinPool(e);
+        }
+    }
+
+    /**
+     * get of returned element of invokeAll(c) throws exception on failed task
+     */
+    public void testInvokeAll4() throws Exception {
+        ExecutorService e = new DirectExecutorService();
+        try {
+            List<Callable<String>> l = new ArrayList<Callable<String>>();
+            l.add(new NPETask());
+            List<Future<String>> futures = e.invokeAll(l);
+            assertEquals(1, futures.size());
+            try {
+                futures.get(0).get();
+                shouldThrow();
+            } catch (ExecutionException success) {
+                assertTrue(success.getCause() instanceof NullPointerException);
+            }
+        } finally {
+            joinPool(e);
+        }
+    }
+
+    /**
+     * invokeAll(c) returns results of all completed tasks in c
+     */
+    public void testInvokeAll5() throws Exception {
+        ExecutorService e = new DirectExecutorService();
+        try {
+            List<Callable<String>> l = new ArrayList<Callable<String>>();
+            l.add(new StringTask());
+            l.add(new StringTask());
+            List<Future<String>> futures = e.invokeAll(l);
+            assertEquals(2, futures.size());
+            for (Future<String> future : futures)
+                assertSame(TEST_STRING, future.get());
+        } finally {
+            joinPool(e);
+        }
+    }
+
+    /**
+     * timed invokeAny(null) throws NPE
+     */
+    public void testTimedInvokeAny1() throws Exception {
+        ExecutorService e = new DirectExecutorService();
+        try {
+            e.invokeAny(null, MEDIUM_DELAY_MS, MILLISECONDS);
+            shouldThrow();
+        } catch (NullPointerException success) {
+        } finally {
+            joinPool(e);
+        }
+    }
+
+    /**
+     * timed invokeAny(null time unit) throws NPE
+     */
+    public void testTimedInvokeAnyNullTimeUnit() throws Exception {
+        ExecutorService e = new DirectExecutorService();
+        List<Callable<String>> l = new ArrayList<Callable<String>>();
+        l.add(new StringTask());
+        try {
+            e.invokeAny(l, MEDIUM_DELAY_MS, null);
+            shouldThrow();
+        } catch (NullPointerException success) {
+        } finally {
+            joinPool(e);
+        }
+    }
+
+    /**
+     * timed invokeAny(empty collection) throws IAE
+     */
+    public void testTimedInvokeAny2() throws Exception {
+        ExecutorService e = new DirectExecutorService();
+        try {
+            e.invokeAny(new ArrayList<Callable<String>>(),
+                MEDIUM_DELAY_MS, MILLISECONDS);
+            shouldThrow();
+        } catch (IllegalArgumentException success) {
+        } finally {
+            joinPool(e);
+        }
+    }
+
+    /**
+     * timed invokeAny(c) throws NPE if c has null elements
+     */
+    public void testTimedInvokeAny3() throws Exception {
+        ExecutorService e = new DirectExecutorService();
+        List<Callable<Integer>> l = new ArrayList<Callable<Integer>>();
+        l.add(new Callable<Integer>() {
+            public Integer call() {
+                throw new ArithmeticException("/ by zero");
+            }});
+        l.add(null);
+        try {
+            e.invokeAny(l, MEDIUM_DELAY_MS, MILLISECONDS);
+            shouldThrow();
+        } catch (NullPointerException success) {
+        } finally {
+            joinPool(e);
+        }
+    }
+
+    /**
+     * timed invokeAny(c) throws ExecutionException if no task completes
+     */
+    public void testTimedInvokeAny4() throws Exception {
+        ExecutorService e = new DirectExecutorService();
+        List<Callable<String>> l = new ArrayList<Callable<String>>();
+        l.add(new NPETask());
+        try {
+            e.invokeAny(l, MEDIUM_DELAY_MS, MILLISECONDS);
+            shouldThrow();
+        } catch (ExecutionException success) {
+            assertTrue(success.getCause() instanceof NullPointerException);
+        } finally {
+            joinPool(e);
+        }
+    }
+
+    /**
+     * timed invokeAny(c) returns result of some task in c
+     */
+    public void testTimedInvokeAny5() throws Exception {
+        ExecutorService e = new DirectExecutorService();
+        try {
+            List<Callable<String>> l = new ArrayList<Callable<String>>();
+            l.add(new StringTask());
+            l.add(new StringTask());
+            String result = e.invokeAny(l, MEDIUM_DELAY_MS, MILLISECONDS);
+            assertSame(TEST_STRING, result);
+        } finally {
+            joinPool(e);
+        }
+    }
+
+    /**
+     * timed invokeAll(null) throws NPE
+     */
+    public void testTimedInvokeAll1() throws InterruptedException {
+        ExecutorService e = new DirectExecutorService();
+        try {
+            e.invokeAll(null, MEDIUM_DELAY_MS, MILLISECONDS);
+            shouldThrow();
+        } catch (NullPointerException success) {
+        } finally {
+            joinPool(e);
+        }
+    }
+
+    /**
+     * timed invokeAll(null time unit) throws NPE
+     */
+    public void testTimedInvokeAllNullTimeUnit() throws InterruptedException {
+        ExecutorService e = new DirectExecutorService();
+        List<Callable<String>> l = new ArrayList<Callable<String>>();
+        l.add(new StringTask());
+        try {
+            e.invokeAll(l, MEDIUM_DELAY_MS, null);
+            shouldThrow();
+        } catch (NullPointerException success) {
+        } finally {
+            joinPool(e);
+        }
+    }
+
+    /**
+     * timed invokeAll(empty collection) returns empty collection
+     */
+    public void testTimedInvokeAll2() throws InterruptedException {
+        ExecutorService e = new DirectExecutorService();
+        try {
+            List<Future<String>> r = e.invokeAll(
+                new ArrayList<Callable<String>>(), MEDIUM_DELAY_MS,
+                MILLISECONDS);
+            assertTrue(r.isEmpty());
+        } finally {
+            joinPool(e);
+        }
+    }
+
+    /**
+     * timed invokeAll(c) throws NPE if c has null elements
+     */
+    public void testTimedInvokeAll3() throws InterruptedException {
+        ExecutorService e = new DirectExecutorService();
+        List<Callable<String>> l = new ArrayList<Callable<String>>();
+        l.add(new StringTask());
+        l.add(null);
+        try {
+            e.invokeAll(l, MEDIUM_DELAY_MS, MILLISECONDS);
+            shouldThrow();
+        } catch (NullPointerException success) {
+        } finally {
+            joinPool(e);
+        }
+    }
+
+    /**
+     * get of returned element of invokeAll(c) throws exception on failed task
+     */
+    public void testTimedInvokeAll4() throws Exception {
+        ExecutorService e = new DirectExecutorService();
+        try {
+            List<Callable<String>> l = new ArrayList<Callable<String>>();
+            l.add(new NPETask());
+            List<Future<String>> futures =
+                e.invokeAll(l, MEDIUM_DELAY_MS, MILLISECONDS);
+            assertEquals(1, futures.size());
+            try {
+                futures.get(0).get();
+                shouldThrow();
+            } catch (ExecutionException success) {
+                assertTrue(success.getCause() instanceof NullPointerException);
+            }
+        } finally {
+            joinPool(e);
+        }
+    }
+
+    /**
+     * timed invokeAll(c) returns results of all completed tasks in c
+     */
+    public void testTimedInvokeAll5() throws Exception {
+        ExecutorService e = new DirectExecutorService();
+        try {
+            List<Callable<String>> l = new ArrayList<Callable<String>>();
+            l.add(new StringTask());
+            l.add(new StringTask());
+            List<Future<String>> futures =
+                e.invokeAll(l, MEDIUM_DELAY_MS, MILLISECONDS);
+            assertEquals(2, futures.size());
+            for (Future<String> future : futures)
+                assertSame(TEST_STRING, future.get());
+        } finally {
+            joinPool(e);
+        }
+    }
+
+    /**
+     * timed invokeAll cancels tasks not completed by timeout
+     */
+    public void testTimedInvokeAll6() throws InterruptedException {
+        ExecutorService e = new DirectExecutorService();
+        try {
+            List<Callable<String>> l = new ArrayList<Callable<String>>();
+            l.add(new StringTask());
+            l.add(Executors.callable(
+                possiblyInterruptedRunnable(2 * SHORT_DELAY_MS), TEST_STRING));
+            l.add(new StringTask());
+            List<Future<String>> futures =
+                e.invokeAll(l, SHORT_DELAY_MS, MILLISECONDS);
+            assertEquals(3, futures.size());
+            Iterator<Future<String>> it = futures.iterator();
+            Future<String> f1 = it.next();
+            Future<String> f2 = it.next();
+            Future<String> f3 = it.next();
+            assertTrue(f1.isDone());
+            assertFalse(f1.isCancelled());
+            assertTrue(f2.isDone());
+            assertFalse(f2.isCancelled());
+            assertTrue(f3.isDone());
+            assertTrue(f3.isCancelled());
+        } finally {
+            joinPool(e);
+        }
+    }
+
+}
diff --git a/guava-tests/test/com/google/common/util/concurrent/AbstractScheduledServiceTest.java b/guava-tests/test/com/google/common/util/concurrent/AbstractScheduledServiceTest.java
new file mode 100644
index 0000000..c839e44
--- /dev/null
+++ b/guava-tests/test/com/google/common/util/concurrent/AbstractScheduledServiceTest.java
@@ -0,0 +1,434 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import com.google.common.util.concurrent.AbstractScheduledService.Scheduler;
+import com.google.common.util.concurrent.Service.State;
+
+import junit.framework.TestCase;
+
+import java.util.concurrent.CyclicBarrier;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledFuture;
+import java.util.concurrent.ScheduledThreadPoolExecutor;
+
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ * Unit test for {@link AbstractScheduledService}.
+ *
+ * @author Luke Sandberg
+ */
+
+public class AbstractScheduledServiceTest extends TestCase {
+
+  volatile Scheduler configuration = Scheduler.newFixedDelaySchedule(0, 10, TimeUnit.MILLISECONDS);
+  volatile ScheduledFuture<?> future = null;
+
+  volatile boolean atFixedRateCalled = false;
+  volatile boolean withFixedDelayCalled = false;
+  volatile boolean scheduleCalled = false;
+
+  final ScheduledExecutorService executor = new ScheduledThreadPoolExecutor(10) {
+    @Override
+    public ScheduledFuture<?> scheduleWithFixedDelay(Runnable command, long initialDelay,
+        long delay, TimeUnit unit) {
+      return future = super.scheduleWithFixedDelay(command, initialDelay, delay, unit);
+    }
+  };
+
+  public void testServiceStartStop() throws Exception {
+    NullService service = new NullService();
+    service.startAndWait();
+    assertFalse(future.isDone());
+    service.stopAndWait();
+    assertTrue(future.isCancelled());
+  }
+
+  private class NullService extends AbstractScheduledService {
+    @Override protected void runOneIteration() throws Exception { }
+    @Override protected void startUp() throws Exception { }
+    @Override protected void shutDown() throws Exception { }
+    @Override protected Scheduler scheduler() { return configuration; }
+    @Override protected ScheduledExecutorService executor() { return executor; }
+  }
+
+  public void testFailOnExceptionFromRun() throws Exception {
+    TestService service = new TestService();
+    service.runException = new Exception();
+    service.startAndWait();
+    service.runFirstBarrier.await();
+    service.runSecondBarrier.await();
+    try {
+      future.get();
+      fail();
+    } catch (ExecutionException e) {
+      // An execution exception holds a runtime exception (from throwables.propogate) that holds our
+      // original exception.
+      assertEquals(service.runException, e.getCause().getCause());
+    }
+    assertEquals(service.state(), Service.State.FAILED);
+  }
+
+  public void testFailOnExceptionFromStartUp() {
+    TestService service = new TestService();
+    service.startUpException = new Exception();
+    try {
+      service.startAndWait();
+      fail();
+    } catch (UncheckedExecutionException e) {
+      assertEquals(service.startUpException, e.getCause());
+    }
+    assertEquals(0, service.numberOfTimesRunCalled.get());
+    assertEquals(Service.State.FAILED, service.state());
+  }
+
+  public void testFailOnExceptionFromShutDown() throws Exception {
+    TestService service = new TestService();
+    service.shutDownException = new Exception();
+    service.startAndWait();
+    service.runFirstBarrier.await();
+    ListenableFuture<Service.State> stopHandle = service.stop();
+    service.runSecondBarrier.await();
+    try {
+      stopHandle.get();
+      fail();
+    } catch (ExecutionException e) {
+      assertEquals(service.shutDownException, e.getCause());
+    }
+    assertEquals(Service.State.FAILED, service.state());
+  }
+
+  public void testRunOneIterationCalledMultipleTimes() throws Exception {
+    TestService service = new TestService();
+    service.startAndWait();
+    for (int i = 1; i < 10; i++) {
+      service.runFirstBarrier.await();
+      assertEquals(i, service.numberOfTimesRunCalled.get());
+      service.runSecondBarrier.await();
+    }
+    service.runFirstBarrier.await();
+    service.stop();
+    service.runSecondBarrier.await();
+    service.stopAndWait();
+  }
+
+  public void testExecutorOnlyCalledOnce() throws Exception {
+    TestService service = new TestService();
+    service.startAndWait();
+    // It should be called once during startup.
+    assertEquals(1, service.numberOfTimesExecutorCalled.get());
+    for (int i = 1; i < 10; i++) {
+      service.runFirstBarrier.await();
+      assertEquals(i, service.numberOfTimesRunCalled.get());
+      service.runSecondBarrier.await();
+    }
+    service.runFirstBarrier.await();
+    service.stop();
+    service.runSecondBarrier.await();
+    service.stopAndWait();
+    // Only called once overall.
+    assertEquals(1, service.numberOfTimesExecutorCalled.get());
+  }
+
+  public void testSchedulerOnlyCalledOnce() throws Exception {
+    TestService service = new TestService();
+    service.startAndWait();
+    // It should be called once during startup.
+    assertEquals(1, service.numberOfTimesSchedulerCalled.get());
+    for (int i = 1; i < 10; i++) {
+      service.runFirstBarrier.await();
+      assertEquals(i, service.numberOfTimesRunCalled.get());
+      service.runSecondBarrier.await();
+    }
+    service.runFirstBarrier.await();
+    service.stop();
+    service.runSecondBarrier.await();
+    service.stopAndWait();
+    // Only called once overall.
+    assertEquals(1, service.numberOfTimesSchedulerCalled.get());
+  }
+
+  private class TestService extends AbstractScheduledService {
+    CyclicBarrier runFirstBarrier = new CyclicBarrier(2);
+    CyclicBarrier runSecondBarrier = new CyclicBarrier(2);
+
+    volatile boolean startUpCalled = false;
+    volatile boolean shutDownCalled = false;
+    AtomicInteger numberOfTimesRunCalled = new AtomicInteger(0);
+    AtomicInteger numberOfTimesExecutorCalled = new AtomicInteger(0);
+    AtomicInteger numberOfTimesSchedulerCalled = new AtomicInteger(0);
+    volatile Exception runException = null;
+    volatile Exception startUpException = null;
+    volatile Exception shutDownException = null;
+
+    @Override
+    protected void runOneIteration() throws Exception {
+      assertTrue(startUpCalled);
+      assertFalse(shutDownCalled);
+      numberOfTimesRunCalled.incrementAndGet();
+      assertEquals(State.RUNNING, state());
+      runFirstBarrier.await();
+      runSecondBarrier.await();
+      if (runException != null) {
+        throw runException;
+      }
+    }
+
+    @Override
+    protected void startUp() throws Exception {
+      assertFalse(startUpCalled);
+      assertFalse(shutDownCalled);
+      startUpCalled = true;
+      assertEquals(State.STARTING, state());
+      if (startUpException != null) {
+        throw startUpException;
+      }
+    }
+
+    @Override
+    protected void shutDown() throws Exception {
+      assertTrue(startUpCalled);
+      assertFalse(shutDownCalled);
+      shutDownCalled = true;
+      if (shutDownException != null) {
+        throw shutDownException;
+      }
+    }
+
+    @Override
+    protected ScheduledExecutorService executor() {
+      numberOfTimesExecutorCalled.incrementAndGet();
+      return executor;
+    }
+
+    @Override
+    protected Scheduler scheduler() {
+      numberOfTimesSchedulerCalled.incrementAndGet();
+      return configuration;
+    }
+  }
+
+  public static class SchedulerTest extends TestCase {
+    // These constants are arbitrary and just used to make sure that the correct method is called
+    // with the correct parameters.
+    private static final int initialDelay = 10;
+    private static final int delay = 20;
+    private static final TimeUnit unit = TimeUnit.MILLISECONDS;
+
+    // Unique runnable object used for comparison.
+    final Runnable testRunnable = new Runnable() {@Override public void run() {}};
+    boolean called = false;
+
+    private void assertSingleCallWithCorrectParameters(Runnable command, long initialDelay,
+        long delay, TimeUnit unit) {
+      assertFalse(called);  // only called once.
+      called = true;
+      assertEquals(SchedulerTest.initialDelay, initialDelay);
+      assertEquals(SchedulerTest.delay, delay);
+      assertEquals(SchedulerTest.unit, unit);
+      assertEquals(testRunnable, command);
+    }
+
+    public void testFixedRateSchedule() {
+      Scheduler schedule = Scheduler.newFixedRateSchedule(initialDelay, delay, unit);
+      schedule.schedule(null, new ScheduledThreadPoolExecutor(1) {
+        @Override
+        public ScheduledFuture<?> scheduleAtFixedRate(Runnable command, long initialDelay,
+            long period, TimeUnit unit) {
+          assertSingleCallWithCorrectParameters(command, initialDelay, delay, unit);
+          return null;
+        }
+      }, testRunnable);
+      assertTrue(called);
+    }
+
+    public void testFixedDelaySchedule() {
+      Scheduler schedule = Scheduler.newFixedDelaySchedule(initialDelay, delay, unit);
+      schedule.schedule(null, new ScheduledThreadPoolExecutor(10) {
+        @Override
+        public ScheduledFuture<?> scheduleWithFixedDelay(Runnable command, long initialDelay,
+            long delay, TimeUnit unit) {
+          assertSingleCallWithCorrectParameters(command, initialDelay, delay, unit);
+          return null;
+        }
+      }, testRunnable);
+      assertTrue(called);
+    }
+
+    private class TestCustomScheduler extends AbstractScheduledService.CustomScheduler {
+      public AtomicInteger scheduleCounter = new AtomicInteger(0);
+      @Override
+      protected Schedule getNextSchedule() throws Exception {
+        scheduleCounter.incrementAndGet();
+        return new Schedule(0, TimeUnit.SECONDS);
+      }
+    }
+
+    public void testCustomSchedule_startStop() throws Exception {
+      final CyclicBarrier firstBarrier = new CyclicBarrier(2);
+      final CyclicBarrier secondBarrier = new CyclicBarrier(2);
+      final AtomicBoolean shouldWait = new AtomicBoolean(true);
+      Runnable task = new Runnable() {
+        @Override public void run() {
+          try {
+            if (shouldWait.get()) {
+              firstBarrier.await();
+              secondBarrier.await();
+            }
+          } catch (Exception e) {
+            throw new RuntimeException(e);
+          }
+        }
+      };
+      TestCustomScheduler scheduler = new TestCustomScheduler();
+      Future<?> future = scheduler.schedule(null, Executors.newScheduledThreadPool(10), task);
+      firstBarrier.await();
+      assertEquals(1, scheduler.scheduleCounter.get());
+      secondBarrier.await();
+      firstBarrier.await();
+      assertEquals(2, scheduler.scheduleCounter.get());
+      shouldWait.set(false);
+      secondBarrier.await();
+      future.cancel(false);
+    }
+
+    public void testCustomSchedulerServiceStop() throws Exception {
+      TestAbstractScheduledCustomService service = new TestAbstractScheduledCustomService();
+      service.startAndWait();
+      service.firstBarrier.await();
+      assertEquals(1, service.numIterations.get());
+      service.stop();
+      service.secondBarrier.await();
+      service.stopAndWait();
+      // Sleep for a while just to ensure that our task wasn't called again.
+      Thread.sleep(unit.toMillis(3 * delay));
+      assertEquals(1, service.numIterations.get());
+    }
+
+    public void testBig() throws Exception {
+      TestAbstractScheduledCustomService service = new TestAbstractScheduledCustomService() {
+        @Override protected Scheduler scheduler() {
+          return new AbstractScheduledService.CustomScheduler(){
+            @Override
+            protected Schedule getNextSchedule() throws Exception {
+              // Explicitly yield to increase the probability of a pathological scheduling.
+              Thread.yield();
+              return new Schedule(0, TimeUnit.SECONDS);
+            }
+          };
+        }
+      };
+      service.useBarriers = false;
+      service.startAndWait();
+      Thread.sleep(50);
+      service.useBarriers = true;
+      service.firstBarrier.await();
+      int numIterations = service.numIterations.get();
+      service.stop();
+      service.secondBarrier.await();
+      service.stopAndWait();
+      assertEquals(numIterations, service.numIterations.get());
+    }
+
+    private static class TestAbstractScheduledCustomService extends AbstractScheduledService {
+      final AtomicInteger numIterations = new AtomicInteger(0);
+      volatile boolean useBarriers = true;
+      final CyclicBarrier firstBarrier = new CyclicBarrier(2);
+      final CyclicBarrier secondBarrier = new CyclicBarrier(2);
+
+      @Override protected void runOneIteration() throws Exception {
+        numIterations.incrementAndGet();
+        if (useBarriers) {
+          firstBarrier.await();
+          secondBarrier.await();
+        }
+      }
+
+      @Override protected ScheduledExecutorService executor() {
+        // use a bunch of threads so that weird overlapping schedules are more likely to happen.
+        return Executors.newScheduledThreadPool(10);
+      }
+
+      @Override protected void startUp() throws Exception { }
+
+      @Override protected void shutDown() throws Exception { }
+
+      @Override protected Scheduler scheduler() {
+        return new CustomScheduler() {
+          @Override
+          protected Schedule getNextSchedule() throws Exception {
+            return new Schedule(delay, unit);
+          }};
+      }
+    }
+
+    public void testCustomSchedulerFailure() throws Exception {
+      TestFailingCustomScheduledService service = new TestFailingCustomScheduledService();
+      service.startAndWait();
+      for (int i = 1; i < 4; i++) {
+        service.firstBarrier.await();
+        assertEquals(i, service.numIterations.get());
+        service.secondBarrier.await();
+      }
+      Thread.sleep(1000);
+      try {
+        service.stop().get(100, TimeUnit.SECONDS);
+        fail();
+      } catch (ExecutionException e) {
+        assertEquals(State.FAILED, service.state());
+      }
+    }
+
+    private static class TestFailingCustomScheduledService extends AbstractScheduledService {
+      final AtomicInteger numIterations = new AtomicInteger(0);
+      final CyclicBarrier firstBarrier = new CyclicBarrier(2);
+      final CyclicBarrier secondBarrier = new CyclicBarrier(2);
+
+      @Override protected void runOneIteration() throws Exception {
+        numIterations.incrementAndGet();
+        firstBarrier.await();
+        secondBarrier.await();
+      }
+
+      @Override protected ScheduledExecutorService executor() {
+        // use a bunch of threads so that weird overlapping schedules are more likely to happen.
+        return Executors.newScheduledThreadPool(10);
+      }
+
+      @Override protected void startUp() throws Exception { }
+
+      @Override protected void shutDown() throws Exception { }
+
+      @Override protected Scheduler scheduler() {
+        return new CustomScheduler() {
+          @Override
+          protected Schedule getNextSchedule() throws Exception {
+            if (numIterations.get() > 2) {
+              throw new IllegalStateException("Failed");
+            }
+            return new Schedule(delay, unit);
+          }};
+      }
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/util/concurrent/AbstractServiceTest.java b/guava-tests/test/com/google/common/util/concurrent/AbstractServiceTest.java
new file mode 100644
index 0000000..c4d4f8e
--- /dev/null
+++ b/guava-tests/test/com/google/common/util/concurrent/AbstractServiceTest.java
@@ -0,0 +1,418 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import static java.lang.Thread.currentThread;
+import static java.util.concurrent.TimeUnit.SECONDS;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+import java.lang.Thread.UncaughtExceptionHandler;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.Future;
+
+/**
+ * Unit test for {@link AbstractService}.
+ *
+ * @author Jesse Wilson
+ */
+public class AbstractServiceTest extends TestCase {
+
+  private Thread executionThread;
+  private Throwable thrownByExecutionThread;
+
+  public void testNoOpServiceStartStop() {
+    NoOpService service = new NoOpService();
+    Assert.assertEquals(Service.State.NEW, service.state());
+    assertFalse(service.isRunning());
+    assertFalse(service.running);
+
+    service.start();
+    assertEquals(Service.State.RUNNING, service.state());
+    assertTrue(service.isRunning());
+    assertTrue(service.running);
+
+    service.stop();
+    assertEquals(Service.State.TERMINATED, service.state());
+    assertFalse(service.isRunning());
+    assertFalse(service.running);
+  }
+
+  public void testNoOpServiceStartAndWaitStopAndWait() throws Exception {
+    NoOpService service = new NoOpService();
+
+    service.start().get();
+    assertEquals(Service.State.RUNNING, service.state());
+
+    service.stop().get();
+    assertEquals(Service.State.TERMINATED, service.state());
+  }
+
+  public void testNoOpServiceStartStopIdempotence() throws Exception {
+    NoOpService service = new NoOpService();
+
+    service.start();
+    service.start();
+    assertEquals(Service.State.RUNNING, service.state());
+
+    service.stop();
+    service.stop();
+    assertEquals(Service.State.TERMINATED, service.state());
+  }
+
+  public void testNoOpServiceStartStopIdempotenceAfterWait() throws Exception {
+    NoOpService service = new NoOpService();
+
+    service.start().get();
+    service.start();
+    assertEquals(Service.State.RUNNING, service.state());
+
+    service.stop().get();
+    service.stop();
+    assertEquals(Service.State.TERMINATED, service.state());
+  }
+
+  public void testNoOpServiceStartStopIdempotenceDoubleWait() throws Exception {
+    NoOpService service = new NoOpService();
+
+    service.start().get();
+    service.start().get();
+    assertEquals(Service.State.RUNNING, service.state());
+
+    service.stop().get();
+    service.stop().get();
+    assertEquals(Service.State.TERMINATED, service.state());
+  }
+
+  public void testNoOpServiceStartStopAndWaitUninterruptible()
+      throws Exception {
+    NoOpService service = new NoOpService();
+
+    currentThread().interrupt();
+    try {
+      service.startAndWait();
+      assertEquals(Service.State.RUNNING, service.state());
+
+      service.stopAndWait();
+      assertEquals(Service.State.TERMINATED, service.state());
+
+      assertTrue(currentThread().isInterrupted());
+    } finally {
+      Thread.interrupted(); // clear interrupt for future tests
+    }
+  }
+
+  private static class NoOpService extends AbstractService {
+    boolean running = false;
+
+    @Override protected void doStart() {
+      assertFalse(running);
+      running = true;
+      notifyStarted();
+    }
+
+    @Override protected void doStop() {
+      assertTrue(running);
+      running = false;
+      notifyStopped();
+    }
+  }
+
+  public void testManualServiceStartStop() {
+    ManualSwitchedService service = new ManualSwitchedService();
+
+    service.start();
+    assertEquals(Service.State.STARTING, service.state());
+    assertFalse(service.isRunning());
+    assertTrue(service.doStartCalled);
+
+    service.notifyStarted(); // usually this would be invoked by another thread
+    assertEquals(Service.State.RUNNING, service.state());
+    assertTrue(service.isRunning());
+
+    service.stop();
+    assertEquals(Service.State.STOPPING, service.state());
+    assertFalse(service.isRunning());
+    assertTrue(service.doStopCalled);
+
+    service.notifyStopped(); // usually this would be invoked by another thread
+    assertEquals(Service.State.TERMINATED, service.state());
+    assertFalse(service.isRunning());
+  }
+
+  public void testManualServiceStopWhileStarting() {
+    ManualSwitchedService service = new ManualSwitchedService();
+
+    service.start();
+    assertEquals(Service.State.STARTING, service.state());
+    assertFalse(service.isRunning());
+    assertTrue(service.doStartCalled);
+
+    service.stop();
+    assertEquals(Service.State.STOPPING, service.state());
+    assertFalse(service.isRunning());
+    assertFalse(service.doStopCalled);
+
+    service.notifyStarted();
+    assertEquals(Service.State.STOPPING, service.state());
+    assertFalse(service.isRunning());
+    assertTrue(service.doStopCalled);
+
+    service.notifyStopped();
+    assertEquals(Service.State.TERMINATED, service.state());
+    assertFalse(service.isRunning());
+  }
+
+  public void testManualServiceUnrequestedStop() {
+    ManualSwitchedService service = new ManualSwitchedService();
+
+    service.start();
+
+    service.notifyStarted();
+    assertEquals(Service.State.RUNNING, service.state());
+    assertTrue(service.isRunning());
+    assertFalse(service.doStopCalled);
+
+    service.notifyStopped();
+    assertEquals(Service.State.TERMINATED, service.state());
+    assertFalse(service.isRunning());
+    assertFalse(service.doStopCalled);
+  }
+
+  /**
+   * The user of this service should call {@link #notifyStarted} and {@link
+   * #notifyStopped} after calling {@link #start} and {@link #stop}.
+   */
+  private static class ManualSwitchedService extends AbstractService {
+    boolean doStartCalled = false;
+    boolean doStopCalled = false;
+
+    @Override protected void doStart() {
+      assertFalse(doStartCalled);
+      doStartCalled = true;
+    }
+
+    @Override protected void doStop() {
+      assertFalse(doStopCalled);
+      doStopCalled = true;
+    }
+  }
+
+  public void testThreadedServiceStartAndWaitStopAndWait() throws Throwable {
+    ThreadedService service = new ThreadedService();
+
+    service.start().get();
+    assertEquals(Service.State.RUNNING, service.state());
+
+    service.awaitRunChecks();
+
+    service.stop().get();
+    assertEquals(Service.State.TERMINATED, service.state());
+
+    throwIfSet(thrownByExecutionThread);
+  }
+
+  public void testThreadedServiceStartStopIdempotence() throws Throwable {
+    ThreadedService service = new ThreadedService();
+
+    service.start();
+    service.start().get();
+    assertEquals(Service.State.RUNNING, service.state());
+
+    service.awaitRunChecks();
+
+    service.stop();
+    service.stop().get();
+    assertEquals(Service.State.TERMINATED, service.state());
+
+    throwIfSet(thrownByExecutionThread);
+  }
+
+  public void testThreadedServiceStartStopIdempotenceAfterWait()
+      throws Throwable {
+    ThreadedService service = new ThreadedService();
+
+    service.start().get();
+    service.start();
+    assertEquals(Service.State.RUNNING, service.state());
+
+    service.awaitRunChecks();
+
+    service.stop().get();
+    service.stop();
+    assertEquals(Service.State.TERMINATED, service.state());
+
+    executionThread.join();
+
+    throwIfSet(thrownByExecutionThread);
+  }
+
+  public void testThreadedServiceStartStopIdempotenceDoubleWait()
+      throws Throwable {
+    ThreadedService service = new ThreadedService();
+
+    service.start().get();
+    service.start().get();
+    assertEquals(Service.State.RUNNING, service.state());
+
+    service.awaitRunChecks();
+
+    service.stop().get();
+    service.stop().get();
+    assertEquals(Service.State.TERMINATED, service.state());
+
+    throwIfSet(thrownByExecutionThread);
+  }
+
+  private class ThreadedService extends AbstractService {
+    final CountDownLatch hasConfirmedIsRunning = new CountDownLatch(1);
+
+    /*
+     * The main test thread tries to stop() the service shortly after
+     * confirming that it is running. Meanwhile, the service itself is trying
+     * to confirm that it is running. If the main thread's stop() call happens
+     * before it has the chance, the test will fail. To avoid this, the main
+     * thread calls this method, which waits until the service has performed
+     * its own "running" check.
+     */
+    void awaitRunChecks() throws InterruptedException {
+      assertTrue("Service thread hasn't finished its checks. "
+          + "Exception status (possibly stale): " + thrownByExecutionThread,
+          hasConfirmedIsRunning.await(10, SECONDS));
+    }
+
+    @Override protected void doStart() {
+      assertEquals(State.STARTING, state());
+      invokeOnExecutionThreadForTest(new Runnable() {
+        @Override public void run() {
+          assertEquals(State.STARTING, state());
+          notifyStarted();
+          assertEquals(State.RUNNING, state());
+          hasConfirmedIsRunning.countDown();
+        }
+      });
+    }
+
+    @Override protected void doStop() {
+      assertEquals(State.STOPPING, state());
+      invokeOnExecutionThreadForTest(new Runnable() {
+        @Override public void run() {
+          assertEquals(State.STOPPING, state());
+          notifyStopped();
+          assertEquals(State.TERMINATED, state());
+        }
+      });
+    }
+  }
+
+  private void invokeOnExecutionThreadForTest(Runnable runnable) {
+    executionThread = new Thread(runnable);
+    executionThread.setUncaughtExceptionHandler(new UncaughtExceptionHandler() {
+      @Override
+      public void uncaughtException(Thread thread, Throwable e) {
+        thrownByExecutionThread = e;
+      }
+    });
+    executionThread.start();
+  }
+
+  private static void throwIfSet(Throwable t) throws Throwable {
+    if (t != null) {
+      throw t;
+    }
+  }
+
+  public void testStopUnstartedService() throws Exception {
+    NoOpService service = new NoOpService();
+    Future<Service.State> stopResult = service.stop();
+    assertEquals(Service.State.TERMINATED, service.state());
+    assertEquals(Service.State.TERMINATED, stopResult.get());
+
+    Future<Service.State> startResult = service.start();
+    assertEquals(Service.State.TERMINATED, service.state());
+    assertEquals(Service.State.TERMINATED, startResult.get());
+  }
+
+  public void testThrowingServiceStartAndWait() throws Exception {
+    StartThrowingService service = new StartThrowingService();
+
+    try {
+      service.startAndWait();
+      fail();
+    } catch (UncheckedExecutionException e) {
+      assertEquals(EXCEPTION, e.getCause());
+    }
+  }
+
+  public void testThrowingServiceStopAndWait_stopThrowing() throws Exception {
+    StopThrowingService service = new StopThrowingService();
+
+    service.startAndWait();
+    try {
+      service.stopAndWait();
+      fail();
+    } catch (UncheckedExecutionException e) {
+      assertEquals(EXCEPTION, e.getCause());
+    }
+  }
+
+  public void testThrowingServiceStopAndWait_runThrowing() throws Exception {
+    RunThrowingService service = new RunThrowingService();
+
+    service.startAndWait();
+    try {
+      service.stopAndWait();
+      fail();
+    } catch (UncheckedExecutionException e) {
+      assertEquals(EXCEPTION, e.getCause().getCause());
+    }
+  }
+
+  private static class StartThrowingService extends AbstractService {
+    @Override protected void doStart() {
+      notifyFailed(EXCEPTION);
+    }
+
+    @Override protected void doStop() {
+      fail();
+    }
+  }
+
+  private static class RunThrowingService extends AbstractService {
+    @Override protected void doStart() {
+      notifyStarted();
+      notifyFailed(EXCEPTION);
+    }
+
+    @Override protected void doStop() {
+      fail();
+    }
+  }
+
+  private static class StopThrowingService extends AbstractService {
+    @Override protected void doStart() {
+      notifyStarted();
+    }
+
+    @Override protected void doStop() {
+      notifyFailed(EXCEPTION);
+    }
+  }
+
+  private static final Exception EXCEPTION = new Exception();
+}
diff --git a/guava-tests/test/com/google/common/util/concurrent/AtomicDoubleArrayTest.java b/guava-tests/test/com/google/common/util/concurrent/AtomicDoubleArrayTest.java
new file mode 100644
index 0000000..f3aa63f
--- /dev/null
+++ b/guava-tests/test/com/google/common/util/concurrent/AtomicDoubleArrayTest.java
@@ -0,0 +1,381 @@
+/*
+ * Written by Doug Lea and Martin Buchholz with assistance from
+ * members of JCP JSR-166 Expert Group and released to the public
+ * domain, as explained at
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+/*
+ * Source:
+ * http://gee.cs.oswego.edu/cgi-bin/viewcvs.cgi/jsr166/src/test/tck-jsr166e/AtomicDoubleArrayTest.java?revision=1.13
+ * (Modified to adapt to guava coding conventions)
+ */
+
+package com.google.common.util.concurrent;
+
+import junit.framework.*;
+import java.util.Arrays;
+
+/**
+ * Unit test for {@link AtomicDoubleArray}.
+ */
+public class AtomicDoubleArrayTest extends JSR166TestCase {
+
+  private static final double[] VALUES = {
+    Double.NEGATIVE_INFINITY,
+    -Double.MAX_VALUE,
+    (double) Long.MIN_VALUE,
+    (double) Integer.MIN_VALUE,
+    -Math.PI,
+    -1.0,
+    -Double.MIN_VALUE,
+    -0.0,
+    +0.0,
+    Double.MIN_VALUE,
+    1.0,
+    Math.PI,
+    (double) Integer.MAX_VALUE,
+    (double) Long.MAX_VALUE,
+    Double.MAX_VALUE,
+    Double.POSITIVE_INFINITY,
+    Double.NaN,
+    Float.MAX_VALUE,
+  };
+
+  /** The notion of equality used by AtomicDoubleArray */
+  static boolean bitEquals(double x, double y) {
+    return Double.doubleToRawLongBits(x) == Double.doubleToRawLongBits(y);
+  }
+
+  static void assertBitEquals(double x, double y) {
+    assertEquals(Double.doubleToRawLongBits(x),
+                 Double.doubleToRawLongBits(y));
+  }
+
+  /**
+   * constructor creates array of given size with all elements zero
+   */
+  public void testConstructor() {
+    AtomicDoubleArray aa = new AtomicDoubleArray(SIZE);
+    for (int i = 0; i < SIZE; i++) {
+      assertBitEquals(0.0, aa.get(i));
+    }
+  }
+
+  /**
+   * constructor with null array throws NPE
+   */
+  public void testConstructor2NPE() {
+    try {
+      double[] a = null;
+      AtomicDoubleArray aa = new AtomicDoubleArray(a);
+      shouldThrow();
+    } catch (NullPointerException success) {}
+  }
+
+  /**
+   * constructor with array is of same size and has all elements
+   */
+  public void testConstructor2() {
+    AtomicDoubleArray aa = new AtomicDoubleArray(VALUES);
+    assertEquals(VALUES.length, aa.length());
+    for (int i = 0; i < VALUES.length; i++) {
+      assertBitEquals(VALUES[i], aa.get(i));
+    }
+  }
+
+  /**
+   * constructor with empty array has size 0 and contains no elements
+   */
+  public void testConstructorEmptyArray() {
+    AtomicDoubleArray aa = new AtomicDoubleArray(new double[0]);
+    assertEquals(0, aa.length());
+    try {
+      aa.get(0);
+      shouldThrow();
+    } catch (IndexOutOfBoundsException success) {}
+  }
+
+  /**
+   * constructor with length zero has size 0 and contains no elements
+   */
+  public void testConstructorZeroLength() {
+    AtomicDoubleArray aa = new AtomicDoubleArray(0);
+    assertEquals(0, aa.length());
+    try {
+      aa.get(0);
+      shouldThrow();
+    } catch (IndexOutOfBoundsException success) {}
+  }
+
+  /**
+   * get and set for out of bound indices throw IndexOutOfBoundsException
+   */
+  public void testIndexing() {
+    AtomicDoubleArray aa = new AtomicDoubleArray(SIZE);
+    for (int index : new int[] { -1, SIZE }) {
+      try {
+        aa.get(index);
+        shouldThrow();
+      } catch (IndexOutOfBoundsException success) {}
+      try {
+        aa.set(index, 1.0);
+        shouldThrow();
+      } catch (IndexOutOfBoundsException success) {}
+      try {
+        aa.lazySet(index, 1.0);
+        shouldThrow();
+      } catch (IndexOutOfBoundsException success) {}
+      try {
+        aa.compareAndSet(index, 1.0, 2.0);
+        shouldThrow();
+      } catch (IndexOutOfBoundsException success) {}
+      try {
+        aa.weakCompareAndSet(index, 1.0, 2.0);
+        shouldThrow();
+      } catch (IndexOutOfBoundsException success) {}
+      try {
+        aa.getAndAdd(index, 1.0);
+        shouldThrow();
+      } catch (IndexOutOfBoundsException success) {}
+      try {
+        aa.addAndGet(index, 1.0);
+        shouldThrow();
+      } catch (IndexOutOfBoundsException success) {}
+    }
+  }
+
+  /**
+   * get returns the last value set at index
+   */
+  public void testGetSet() {
+    AtomicDoubleArray aa = new AtomicDoubleArray(VALUES.length);
+    for (int i = 0; i < VALUES.length; i++) {
+      assertBitEquals(0.0, aa.get(i));
+      aa.set(i, VALUES[i]);
+      assertBitEquals(VALUES[i], aa.get(i));
+      aa.set(i, -3.0);
+      assertBitEquals(-3.0, aa.get(i));
+    }
+  }
+
+  /**
+   * get returns the last value lazySet at index by same thread
+   */
+  public void testGetLazySet() {
+    AtomicDoubleArray aa = new AtomicDoubleArray(VALUES.length);
+    for (int i = 0; i < VALUES.length; i++) {
+      assertBitEquals(0.0, aa.get(i));
+      aa.lazySet(i, VALUES[i]);
+      assertBitEquals(VALUES[i], aa.get(i));
+      aa.lazySet(i, -3.0);
+      assertBitEquals(-3.0, aa.get(i));
+    }
+  }
+
+  /**
+   * compareAndSet succeeds in changing value if equal to expected else fails
+   */
+  public void testCompareAndSet() {
+    AtomicDoubleArray aa = new AtomicDoubleArray(SIZE);
+    for (int i : new int[] { 0, SIZE - 1}) {
+      double prev = 0.0;
+      double unused = Math.E + Math.PI;
+      for (double x : VALUES) {
+        assertBitEquals(prev, aa.get(i));
+        assertFalse(aa.compareAndSet(i, unused, x));
+        assertBitEquals(prev, aa.get(i));
+        assertTrue(aa.compareAndSet(i, prev, x));
+        assertBitEquals(x, aa.get(i));
+        prev = x;
+      }
+    }
+  }
+
+  /**
+   * compareAndSet in one thread enables another waiting for value
+   * to succeed
+   */
+
+      public void testCompareAndSetInMultipleThreads() throws InterruptedException {
+    final AtomicDoubleArray a = new AtomicDoubleArray(1);
+    a.set(0, 1.0);
+    Thread t = newStartedThread(new CheckedRunnable() {
+        public void realRun() {
+          while (!a.compareAndSet(0, 2.0, 3.0)) {
+            Thread.yield();
+          }
+        }});
+
+    assertTrue(a.compareAndSet(0, 1.0, 2.0));
+    awaitTermination(t);
+    assertBitEquals(3.0, a.get(0));
+  }
+
+  /**
+   * repeated weakCompareAndSet succeeds in changing value when equal
+   * to expected
+   */
+  public void testWeakCompareAndSet() {
+    AtomicDoubleArray aa = new AtomicDoubleArray(SIZE);
+    for (int i : new int[] { 0, SIZE - 1}) {
+      double prev = 0.0;
+      double unused = Math.E + Math.PI;
+      for (double x : VALUES) {
+        assertBitEquals(prev, aa.get(i));
+        assertFalse(aa.weakCompareAndSet(i, unused, x));
+        assertBitEquals(prev, aa.get(i));
+        while (!aa.weakCompareAndSet(i, prev, x)) {
+          ;
+        }
+        assertBitEquals(x, aa.get(i));
+        prev = x;
+      }
+    }
+  }
+
+  /**
+   * getAndSet returns previous value and sets to given value at given index
+   */
+  public void testGetAndSet() {
+    AtomicDoubleArray aa = new AtomicDoubleArray(SIZE);
+    for (int i : new int[] { 0, SIZE - 1}) {
+      double prev = 0.0;
+      for (double x : VALUES) {
+        assertBitEquals(prev, aa.getAndSet(i, x));
+        prev = x;
+      }
+    }
+  }
+
+  /**
+   * getAndAdd returns previous value and adds given value
+   */
+  public void testGetAndAdd() {
+    AtomicDoubleArray aa = new AtomicDoubleArray(SIZE);
+    for (int i : new int[] { 0, SIZE - 1}) {
+      for (double x : VALUES) {
+        for (double y : VALUES) {
+          aa.set(i, x);
+          double z = aa.getAndAdd(i, y);
+          assertBitEquals(x, z);
+          assertBitEquals(x + y, aa.get(i));
+        }
+      }
+    }
+  }
+
+  /**
+   * addAndGet adds given value to current, and returns current value
+   */
+  public void testAddAndGet() {
+    AtomicDoubleArray aa = new AtomicDoubleArray(SIZE);
+    for (int i : new int[] { 0, SIZE - 1}) {
+      for (double x : VALUES) {
+        for (double y : VALUES) {
+          aa.set(i, x);
+          double z = aa.addAndGet(i, y);
+          assertBitEquals(x + y, z);
+          assertBitEquals(x + y, aa.get(i));
+        }
+      }
+    }
+  }
+
+  static final long COUNTDOWN = 100000;
+
+  class Counter extends CheckedRunnable {
+    final AtomicDoubleArray aa;
+    volatile long counts;
+    Counter(AtomicDoubleArray a) { aa = a; }
+    public void realRun() {
+      for (;;) {
+        boolean done = true;
+        for (int i = 0; i < aa.length(); i++) {
+          double v = aa.get(i);
+          assertTrue(v >= 0);
+          if (v != 0) {
+            done = false;
+            if (aa.compareAndSet(i, v, v - 1.0)) {
+              ++counts;
+            }
+          }
+        }
+        if (done) {
+          break;
+        }
+      }
+    }
+  }
+
+  /**
+   * Multiple threads using same array of counters successfully
+   * update a number of times equal to total count
+   */
+
+      public void testCountingInMultipleThreads() throws InterruptedException {
+    final AtomicDoubleArray aa = new AtomicDoubleArray(SIZE);
+    for (int i = 0; i < SIZE; i++) {
+      aa.set(i, (double) COUNTDOWN);
+    }
+    Counter c1 = new Counter(aa);
+    Counter c2 = new Counter(aa);
+    Thread t1 = newStartedThread(c1);
+    Thread t2 = newStartedThread(c2);
+    awaitTermination(t1);
+    awaitTermination(t2);
+    assertEquals(c1.counts + c2.counts, SIZE * COUNTDOWN);
+  }
+
+  /**
+   * a deserialized serialized array holds same values
+   */
+  public void testSerialization() throws Exception {
+    AtomicDoubleArray x = new AtomicDoubleArray(SIZE);
+    for (int i = 0; i < SIZE; i++) {
+      x.set(i, (double) -i);
+    }
+    AtomicDoubleArray y = serialClone(x);
+    assertTrue(x != y);
+    assertEquals(x.length(), y.length());
+    for (int i = 0; i < SIZE; i++) {
+      assertBitEquals(x.get(i), y.get(i));
+    }
+
+    AtomicDoubleArray a = new AtomicDoubleArray(VALUES);
+    AtomicDoubleArray b = serialClone(a);
+    assertFalse(a.equals(b));
+    assertFalse(b.equals(a));
+    assertEquals(a.length(), b.length());
+    for (int i = 0; i < VALUES.length; i++) {
+      assertBitEquals(a.get(i), b.get(i));
+    }
+  }
+
+  /**
+   * toString returns current value
+   */
+  public void testToString() {
+    AtomicDoubleArray aa = new AtomicDoubleArray(VALUES);
+    assertEquals(Arrays.toString(VALUES), aa.toString());
+    assertEquals("[]", new AtomicDoubleArray(0).toString());
+    assertEquals("[]", new AtomicDoubleArray(new double[0]).toString());
+  }
+
+  /**
+   * compareAndSet treats +0.0 and -0.0 as distinct values
+   */
+  public void testDistinctZeros() {
+    AtomicDoubleArray aa = new AtomicDoubleArray(SIZE);
+    for (int i : new int[] { 0, SIZE - 1}) {
+      assertFalse(aa.compareAndSet(i, -0.0, 7.0));
+      assertFalse(aa.weakCompareAndSet(i, -0.0, 7.0));
+      assertBitEquals(+0.0, aa.get(i));
+      assertTrue(aa.compareAndSet(i, +0.0, -0.0));
+      assertBitEquals(-0.0, aa.get(i));
+      assertFalse(aa.compareAndSet(i, +0.0, 7.0));
+      assertFalse(aa.weakCompareAndSet(i, +0.0, 7.0));
+      assertBitEquals(-0.0, aa.get(i));
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/util/concurrent/AtomicDoubleTest.java b/guava-tests/test/com/google/common/util/concurrent/AtomicDoubleTest.java
new file mode 100644
index 0000000..edf4fcb
--- /dev/null
+++ b/guava-tests/test/com/google/common/util/concurrent/AtomicDoubleTest.java
@@ -0,0 +1,284 @@
+/*
+ * Written by Doug Lea and Martin Buchholz with assistance from
+ * members of JCP JSR-166 Expert Group and released to the public
+ * domain, as explained at
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+/*
+ * Source:
+ * http://gee.cs.oswego.edu/cgi-bin/viewcvs.cgi/jsr166/src/test/tck-jsr166e/AtomicDoubleTest.java?revision=1.8
+ * (Modified to adapt to guava coding conventions)
+ */
+
+package com.google.common.util.concurrent;
+
+import junit.framework.*;
+
+/**
+ * Unit test for {@link AtomicDouble}.
+ */
+public class AtomicDoubleTest extends JSR166TestCase {
+
+  private static final double[] VALUES = {
+    Double.NEGATIVE_INFINITY,
+    -Double.MAX_VALUE,
+    (double) Long.MIN_VALUE,
+    (double) Integer.MIN_VALUE,
+    -Math.PI,
+    -1.0,
+    -Double.MIN_VALUE,
+    -0.0,
+    +0.0,
+    Double.MIN_VALUE,
+    1.0,
+    Math.PI,
+    (double) Integer.MAX_VALUE,
+    (double) Long.MAX_VALUE,
+    Double.MAX_VALUE,
+    Double.POSITIVE_INFINITY,
+    Double.NaN,
+    Float.MAX_VALUE,
+  };
+
+  /** The notion of equality used by AtomicDouble */
+  static boolean bitEquals(double x, double y) {
+    return Double.doubleToRawLongBits(x) == Double.doubleToRawLongBits(y);
+  }
+
+  static void assertBitEquals(double x, double y) {
+    assertEquals(Double.doubleToRawLongBits(x),
+                 Double.doubleToRawLongBits(y));
+  }
+
+  /**
+   * constructor initializes to given value
+   */
+  public void testConstructor() {
+    for (double x : VALUES) {
+      AtomicDouble a = new AtomicDouble(x);
+      assertBitEquals(x, a.get());
+    }
+  }
+
+  /**
+   * default constructed initializes to zero
+   */
+  public void testConstructor2() {
+    AtomicDouble a = new AtomicDouble();
+    assertBitEquals(0.0, a.get());
+  }
+
+  /**
+   * get returns the last value set
+   */
+  public void testGetSet() {
+    AtomicDouble at = new AtomicDouble(1.0);
+    assertBitEquals(1.0, at.get());
+    for (double x : VALUES) {
+      at.set(x);
+      assertBitEquals(x, at.get());
+    }
+  }
+
+  /**
+   * get returns the last value lazySet in same thread
+   */
+  public void testGetLazySet() {
+    AtomicDouble at = new AtomicDouble(1.0);
+    assertBitEquals(1.0, at.get());
+    for (double x : VALUES) {
+      at.lazySet(x);
+      assertBitEquals(x, at.get());
+    }
+  }
+
+  /**
+   * compareAndSet succeeds in changing value if equal to expected else fails
+   */
+  public void testCompareAndSet() {
+    double prev = Math.E;
+    double unused = Math.E + Math.PI;
+    AtomicDouble at = new AtomicDouble(prev);
+    for (double x : VALUES) {
+      assertBitEquals(prev, at.get());
+      assertFalse(at.compareAndSet(unused, x));
+      assertBitEquals(prev, at.get());
+      assertTrue(at.compareAndSet(prev, x));
+      assertBitEquals(x, at.get());
+      prev = x;
+    }
+  }
+
+  /**
+   * compareAndSet in one thread enables another waiting for value
+   * to succeed
+   */
+
+      public void testCompareAndSetInMultipleThreads() throws Exception {
+    final AtomicDouble at = new AtomicDouble(1.0);
+    Thread t = newStartedThread(new CheckedRunnable() {
+        public void realRun() {
+          while (!at.compareAndSet(2.0, 3.0)) {
+            Thread.yield();
+          }
+        }});
+
+    assertTrue(at.compareAndSet(1.0, 2.0));
+    awaitTermination(t);
+    assertBitEquals(3.0, at.get());
+  }
+
+  /**
+   * repeated weakCompareAndSet succeeds in changing value when equal
+   * to expected
+   */
+  public void testWeakCompareAndSet() {
+    double prev = Math.E;
+    double unused = Math.E + Math.PI;
+    AtomicDouble at = new AtomicDouble(prev);
+    for (double x : VALUES) {
+      assertBitEquals(prev, at.get());
+      assertFalse(at.weakCompareAndSet(unused, x));
+      assertBitEquals(prev, at.get());
+      while (!at.weakCompareAndSet(prev, x)) {
+        ;
+      }
+      assertBitEquals(x, at.get());
+      prev = x;
+    }
+  }
+
+  /**
+   * getAndSet returns previous value and sets to given value
+   */
+  public void testGetAndSet() {
+    double prev = Math.E;
+    AtomicDouble at = new AtomicDouble(prev);
+    for (double x : VALUES) {
+      assertBitEquals(prev, at.getAndSet(x));
+      prev = x;
+    }
+  }
+
+  /**
+   * getAndAdd returns previous value and adds given value
+   */
+  public void testGetAndAdd() {
+    for (double x : VALUES) {
+      for (double y : VALUES) {
+        AtomicDouble a = new AtomicDouble(x);
+        double z = a.getAndAdd(y);
+        assertBitEquals(x, z);
+        assertBitEquals(x + y, a.get());
+      }
+    }
+  }
+
+  /**
+   * addAndGet adds given value to current, and returns current value
+   */
+  public void testAddAndGet() {
+    for (double x : VALUES) {
+      for (double y : VALUES) {
+        AtomicDouble a = new AtomicDouble(x);
+        double z = a.addAndGet(y);
+        assertBitEquals(x + y, z);
+        assertBitEquals(x + y, a.get());
+      }
+    }
+  }
+
+  /**
+   * a deserialized serialized atomic holds same value
+   */
+  public void testSerialization() throws Exception {
+    AtomicDouble a = new AtomicDouble();
+    AtomicDouble b = serialClone(a);
+    assertTrue(a != b);
+    a.set(-22.0);
+    AtomicDouble c = serialClone(a);
+    assertBitEquals(-22.0, a.get());
+    assertBitEquals(0.0, b.get());
+    assertBitEquals(-22.0, c.get());
+    for (double x : VALUES) {
+      AtomicDouble d = new AtomicDouble(x);
+      assertBitEquals(serialClone(d).get(), d.get());
+    }
+  }
+
+  /**
+   * toString returns current value
+   */
+  public void testToString() {
+    AtomicDouble at = new AtomicDouble();
+    assertEquals("0.0", at.toString());
+    for (double x : VALUES) {
+      at.set(x);
+      assertEquals(Double.toString(x), at.toString());
+    }
+  }
+
+  /**
+   * intValue returns current value.
+   */
+  public void testIntValue() {
+    AtomicDouble at = new AtomicDouble();
+    assertEquals(0, at.intValue());
+    for (double x : VALUES) {
+      at.set(x);
+      assertEquals((int) x, at.intValue());
+    }
+  }
+
+  /**
+   * longValue returns current value.
+   */
+  public void testLongValue() {
+    AtomicDouble at = new AtomicDouble();
+    assertEquals(0L, at.longValue());
+    for (double x : VALUES) {
+      at.set(x);
+      assertEquals((long) x, at.longValue());
+    }
+  }
+
+  /**
+   * floatValue returns current value.
+   */
+  public void testFloatValue() {
+    AtomicDouble at = new AtomicDouble();
+    assertEquals(0.0f, at.floatValue());
+    for (double x : VALUES) {
+      at.set(x);
+      assertEquals((float) x, at.floatValue());
+    }
+  }
+
+  /**
+   * doubleValue returns current value.
+   */
+  public void testDoubleValue() {
+    AtomicDouble at = new AtomicDouble();
+    assertEquals(0.0d, at.doubleValue());
+    for (double x : VALUES) {
+      at.set(x);
+      assertBitEquals(x, at.doubleValue());
+    }
+  }
+
+  /**
+   * compareAndSet treats +0.0 and -0.0 as distinct values
+   */
+  public void testDistinctZeros() {
+    AtomicDouble at = new AtomicDouble(+0.0);
+    assertFalse(at.compareAndSet(-0.0, 7.0));
+    assertFalse(at.weakCompareAndSet(-0.0, 7.0));
+    assertBitEquals(+0.0, at.get());
+    assertTrue(at.compareAndSet(+0.0, -0.0));
+    assertBitEquals(-0.0, at.get());
+    assertFalse(at.compareAndSet(+0.0, 7.0));
+    assertFalse(at.weakCompareAndSet(+0.0, 7.0));
+    assertBitEquals(-0.0, at.get());
+  }
+}
diff --git a/guava-tests/test/com/google/common/util/concurrent/AtomicLongMapTest.java b/guava-tests/test/com/google/common/util/concurrent/AtomicLongMapTest.java
new file mode 100644
index 0000000..8bffaa1
--- /dev/null
+++ b/guava-tests/test/com/google/common/util/concurrent/AtomicLongMapTest.java
@@ -0,0 +1,616 @@
+// Copyright 2011 Google Inc. All Rights Reserved.
+
+package com.google.common.util.concurrent;
+
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Sets;
+import com.google.common.testing.NullPointerTester;
+
+import junit.framework.TestCase;
+
+import java.util.Map;
+import java.util.Random;
+import java.util.Set;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicLong;
+
+/**
+ * Tests for {@link AtomicLongMap}.
+ *
+ * @author schmoe@google.com (mike nonemacher)
+ */
+public class AtomicLongMapTest extends TestCase {
+  private static final int ITERATIONS = 100;
+  private static final int MAX_ADDEND = 100;
+
+  private Random random = new Random(301);
+
+  public void testNulls() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.testAllPublicConstructors(AtomicLongMap.class);
+    tester.testAllPublicStaticMethods(AtomicLongMap.class);
+    AtomicLongMap<Object> map = AtomicLongMap.create();
+    tester.testAllPublicInstanceMethods(map);
+  }
+
+  public void testCreate_map() {
+    Map<String, Long> in = ImmutableMap.of("1", 1L, "2", 2L, "3", 3L);
+    AtomicLongMap<String> map = AtomicLongMap.create(in);
+    assertFalse(map.isEmpty());
+    assertSame(3, map.size());
+    assertTrue(map.containsKey("1"));
+    assertTrue(map.containsKey("2"));
+    assertTrue(map.containsKey("3"));
+    assertEquals(1L, map.get("1"));
+    assertEquals(2L, map.get("2"));
+    assertEquals(3L, map.get("3"));
+  }
+
+  public void testIncrementAndGet() {
+    AtomicLongMap<String> map = AtomicLongMap.create();
+    String key = "key";
+    for (int i = 0; i < ITERATIONS; i++) {
+      long before = map.get(key);
+      long result = map.incrementAndGet(key);
+      long after = map.get(key);
+      assertEquals(before + 1, after);
+      assertEquals(after, result);
+    }
+    assertEquals(1, map.size());
+    assertTrue(!map.isEmpty());
+    assertTrue(map.containsKey(key));
+    assertEquals(ITERATIONS, (int) map.get(key));
+  }
+
+  public void testIncrementAndGet_zero() {
+    AtomicLongMap<String> map = AtomicLongMap.create();
+    String key = "key";
+    assertEquals(0L, map.get(key));
+    assertFalse(map.containsKey(key));
+
+    assertEquals(1L, map.incrementAndGet(key));
+    assertEquals(1L, map.get(key));
+
+    assertEquals(0L, map.decrementAndGet(key));
+    assertEquals(0L, map.get(key));
+    assertTrue(map.containsKey(key));
+
+    assertEquals(1L, map.incrementAndGet(key));
+    assertEquals(1L, map.get(key));
+  }
+
+  public void testGetAndIncrement() {
+    AtomicLongMap<String> map = AtomicLongMap.create();
+    String key = "key";
+    for (int i = 0; i < ITERATIONS; i++) {
+      long before = map.get(key);
+      long result = map.getAndIncrement(key);
+      long after = map.get(key);
+      assertEquals(before + 1, after);
+      assertEquals(before, result);
+    }
+    assertEquals(1, map.size());
+    assertTrue(!map.isEmpty());
+    assertTrue(map.containsKey(key));
+    assertEquals(ITERATIONS, (int) map.get(key));
+  }
+
+  public void testGetAndIncrement_zero() {
+    AtomicLongMap<String> map = AtomicLongMap.create();
+    String key = "key";
+    assertEquals(0L, map.get(key));
+    assertFalse(map.containsKey(key));
+
+    assertEquals(0L, map.getAndIncrement(key));
+    assertEquals(1L, map.get(key));
+
+    assertEquals(1L, map.getAndDecrement(key));
+    assertEquals(0L, map.get(key));
+    assertTrue(map.containsKey(key));
+
+    assertEquals(0L, map.getAndIncrement(key));
+    assertEquals(1L, map.get(key));
+  }
+
+  public void testDecrementAndGet() {
+    AtomicLongMap<String> map = AtomicLongMap.create();
+    String key = "key";
+    for (int i = 0; i < ITERATIONS; i++) {
+      long before = map.get(key);
+      long result = map.decrementAndGet(key);
+      long after = map.get(key);
+      assertEquals(before - 1, after);
+      assertEquals(after, result);
+    }
+    assertEquals(1, map.size());
+    assertTrue(!map.isEmpty());
+    assertTrue(map.containsKey(key));
+    assertEquals(-1 * ITERATIONS, (int) map.get(key));
+  }
+
+  public void testDecrementAndGet_zero() {
+    AtomicLongMap<String> map = AtomicLongMap.create();
+    String key = "key";
+    assertEquals(0L, map.get(key));
+    assertFalse(map.containsKey(key));
+
+    assertEquals(-1L, map.decrementAndGet(key));
+    assertEquals(-1L, map.get(key));
+
+    assertEquals(0L, map.incrementAndGet(key));
+    assertEquals(0L, map.get(key));
+    assertTrue(map.containsKey(key));
+
+    assertEquals(-1L, map.decrementAndGet(key));
+    assertEquals(-1L, map.get(key));
+  }
+
+  public void testGetAndDecrement() {
+    AtomicLongMap<String> map = AtomicLongMap.create();
+    String key = "key";
+    for (int i = 0; i < ITERATIONS; i++) {
+      long before = map.get(key);
+      long result = map.getAndDecrement(key);
+      long after = map.get(key);
+      assertEquals(before - 1, after);
+      assertEquals(before, result);
+    }
+    assertEquals(1, map.size());
+    assertTrue(!map.isEmpty());
+    assertTrue(map.containsKey(key));
+    assertEquals(-1 * ITERATIONS, (int) map.get(key));
+  }
+
+  public void testGetAndDecrement_zero() {
+    AtomicLongMap<String> map = AtomicLongMap.create();
+    String key = "key";
+    assertEquals(0L, map.get(key));
+    assertFalse(map.containsKey(key));
+
+    assertEquals(0L, map.getAndDecrement(key));
+    assertEquals(-1L, map.get(key));
+
+    assertEquals(-1L, map.getAndIncrement(key));
+    assertEquals(0L, map.get(key));
+    assertTrue(map.containsKey(key));
+
+    assertEquals(0L, map.getAndDecrement(key));
+    assertEquals(-1L, map.get(key));
+  }
+
+  public void testAddAndGet() {
+    AtomicLongMap<String> map = AtomicLongMap.create();
+    String key = "key";
+    long addend = random.nextInt(MAX_ADDEND);
+    for (int i = 0; i < ITERATIONS; i++) {
+      long before = map.get(key);
+      long result = map.addAndGet(key, addend);
+      long after = map.get(key);
+      assertEquals(before + addend, after);
+      assertEquals(after, result);
+      addend = after;
+    }
+    assertEquals(1, map.size());
+    assertTrue(!map.isEmpty());
+    assertTrue(map.containsKey(key));
+  }
+
+  public void testAddAndGet_zero() {
+    AtomicLongMap<String> map = AtomicLongMap.create();
+    String key = "key";
+    long value = random.nextInt(MAX_ADDEND);
+    assertEquals(0L, map.get(key));
+    assertFalse(map.containsKey(key));
+
+    assertEquals(value, map.addAndGet(key, value));
+    assertEquals(value, map.get(key));
+
+    assertEquals(0L, map.addAndGet(key, -1 * value));
+    assertEquals(0L, map.get(key));
+    assertTrue(map.containsKey(key));
+
+    assertEquals(value, map.addAndGet(key, value));
+    assertEquals(value, map.get(key));
+  }
+
+  public void testGetAndAdd() {
+    AtomicLongMap<String> map = AtomicLongMap.create();
+    String key = "key";
+    long addend = random.nextInt(MAX_ADDEND);
+    for (int i = 0; i < ITERATIONS; i++) {
+      long before = map.get(key);
+      long result = map.getAndAdd(key, addend);
+      long after = map.get(key);
+      assertEquals(before + addend, after);
+      assertEquals(before, result);
+      addend = after;
+    }
+    assertEquals(1, map.size());
+    assertTrue(!map.isEmpty());
+    assertTrue(map.containsKey(key));
+  }
+
+  public void testGetAndAdd_zero() {
+    AtomicLongMap<String> map = AtomicLongMap.create();
+    String key = "key";
+    long value = random.nextInt(MAX_ADDEND);
+    assertEquals(0L, map.get(key));
+    assertFalse(map.containsKey(key));
+
+    assertEquals(0L, map.getAndAdd(key, value));
+    assertEquals(value, map.get(key));
+
+    assertEquals(value, map.getAndAdd(key, -1 * value));
+    assertEquals(0L, map.get(key));
+    assertTrue(map.containsKey(key));
+
+    assertEquals(0L, map.getAndAdd(key, value));
+    assertEquals(value, map.get(key));
+  }
+
+  public void testPut() {
+    AtomicLongMap<String> map = AtomicLongMap.create();
+    String key = "key";
+    long newValue = random.nextInt(MAX_ADDEND);
+    for (int i = 0; i < ITERATIONS; i++) {
+      long before = map.get(key);
+      long result = map.put(key, newValue);
+      long after = map.get(key);
+      assertEquals(newValue, after);
+      assertEquals(before, result);
+      newValue += newValue;
+    }
+    assertEquals(1, map.size());
+    assertTrue(!map.isEmpty());
+    assertTrue(map.containsKey(key));
+  }
+
+  public void testPut_zero() {
+    AtomicLongMap<String> map = AtomicLongMap.create();
+    String key = "key";
+    long value = random.nextInt(MAX_ADDEND);
+    assertEquals(0L, map.get(key));
+    assertFalse(map.containsKey(key));
+
+    assertEquals(0L, map.put(key, value));
+    assertEquals(value, map.get(key));
+
+    assertEquals(value, map.put(key, 0L));
+    assertEquals(0L, map.get(key));
+    assertTrue(map.containsKey(key));
+
+    assertEquals(0L, map.put(key, value));
+    assertEquals(value, map.get(key));
+  }
+
+  public void testPutAll() {
+    Map<String, Long> in = ImmutableMap.of("1", 1L, "2", 2L, "3", 3L);
+    AtomicLongMap<String> map = AtomicLongMap.create();
+    assertTrue(map.isEmpty());
+    assertSame(0, map.size());
+    assertFalse(map.containsKey("1"));
+    assertFalse(map.containsKey("2"));
+    assertFalse(map.containsKey("3"));
+    assertEquals(0L, map.get("1"));
+    assertEquals(0L, map.get("2"));
+    assertEquals(0L, map.get("3"));
+
+    map.putAll(in);
+    assertFalse(map.isEmpty());
+    assertSame(3, map.size());
+    assertTrue(map.containsKey("1"));
+    assertTrue(map.containsKey("2"));
+    assertTrue(map.containsKey("3"));
+    assertEquals(1L, map.get("1"));
+    assertEquals(2L, map.get("2"));
+    assertEquals(3L, map.get("3"));
+  }
+
+  public void testPutIfAbsent() {
+    AtomicLongMap<String> map = AtomicLongMap.create();
+    String key = "key";
+    long newValue = random.nextInt(MAX_ADDEND);
+    for (int i = 0; i < ITERATIONS; i++) {
+      long before = map.get(key);
+      long result = map.putIfAbsent(key, newValue);
+      long after = map.get(key);
+      assertEquals(before, result);
+      assertEquals(before == 0 ? newValue : before, after);
+
+      map.remove(key);
+      before = map.get(key);
+      result = map.putIfAbsent(key, newValue);
+      after = map.get(key);
+      assertEquals(0, before);
+      assertEquals(before, result);
+      assertEquals(newValue, after);
+
+      map.put(key, 0L);
+      before = map.get(key);
+      result = map.putIfAbsent(key, newValue);
+      after = map.get(key);
+      assertEquals(0, before);
+      assertEquals(before, result);
+      assertEquals(newValue, after);
+
+      newValue += newValue;
+    }
+    assertEquals(1, map.size());
+    assertTrue(!map.isEmpty());
+    assertTrue(map.containsKey(key));
+  }
+
+  public void testPutIfAbsent_zero() {
+    AtomicLongMap<String> map = AtomicLongMap.create();
+    String key = "key";
+    long value = random.nextInt(MAX_ADDEND);
+    assertEquals(0L, map.get(key));
+    assertFalse(map.containsKey(key));
+
+    assertEquals(0L, map.putIfAbsent(key, value));
+    assertEquals(value, map.get(key));
+
+    assertEquals(value, map.put(key, 0L));
+    assertEquals(0L, map.get(key));
+    assertTrue(map.containsKey(key));
+
+    assertEquals(0L, map.putIfAbsent(key, value));
+    assertEquals(value, map.get(key));
+  }
+
+  public void testReplace() {
+    AtomicLongMap<String> map = AtomicLongMap.create();
+    String key = "key";
+    long newValue = random.nextInt(MAX_ADDEND);
+    for (int i = 0; i < ITERATIONS; i++) {
+      long before = map.get(key);
+      assertFalse(map.replace(key, before + 1, newValue + 1));
+      assertFalse(map.replace(key, before - 1, newValue - 1));
+      assertTrue(map.replace(key, before, newValue));
+      long after = map.get(key);
+      assertEquals(newValue, after);
+      newValue += newValue;
+    }
+    assertEquals(1, map.size());
+    assertTrue(!map.isEmpty());
+    assertTrue(map.containsKey(key));
+  }
+
+  public void testReplace_zero() {
+    AtomicLongMap<String> map = AtomicLongMap.create();
+    String key = "key";
+    long value = random.nextInt(MAX_ADDEND);
+    assertEquals(0L, map.get(key));
+    assertFalse(map.containsKey(key));
+
+    assertTrue(map.replace(key, 0L, value));
+    assertEquals(value, map.get(key));
+
+    assertTrue(map.replace(key, value, 0L));
+    assertEquals(0L, map.get(key));
+    assertTrue(map.containsKey(key));
+
+    assertTrue(map.replace(key, 0L, value));
+    assertEquals(value, map.get(key));
+  }
+
+  public void testRemove() {
+    AtomicLongMap<String> map = AtomicLongMap.create();
+    String key = "key";
+    assertEquals(0, map.size());
+    assertTrue(map.isEmpty());
+    assertEquals(0L, map.remove(key));
+
+    long newValue = random.nextInt(MAX_ADDEND);
+    for (int i = 0; i < ITERATIONS; i++) {
+      map.put(key, newValue);
+      assertTrue(map.containsKey(key));
+
+      long before = map.get(key);
+      long result = map.remove(key);
+      long after = map.get(key);
+      assertFalse(map.containsKey(key));
+      assertEquals(before, result);
+      assertEquals(0L, after);
+      newValue += newValue;
+    }
+    assertEquals(0, map.size());
+    assertTrue(map.isEmpty());
+  }
+
+  public void testRemove_zero() {
+    AtomicLongMap<String> map = AtomicLongMap.create();
+    String key = "key";
+    assertEquals(0L, map.get(key));
+    assertFalse(map.containsKey(key));
+
+    assertEquals(0L, map.remove(key));
+    assertEquals(0L, map.get(key));
+    assertFalse(map.containsKey(key));
+
+    assertEquals(0L, map.put(key, 0L));
+    assertEquals(0L, map.get(key));
+    assertTrue(map.containsKey(key));
+
+    assertEquals(0L, map.remove(key));
+    assertEquals(0L, map.get(key));
+    assertFalse(map.containsKey(key));
+  }
+
+  public void testRemoveValue() {
+    AtomicLongMap<String> map = AtomicLongMap.create();
+    String key = "key";
+    assertEquals(0, map.size());
+    assertTrue(map.isEmpty());
+    assertFalse(map.remove(key, 0L));
+
+    long newValue = random.nextInt(MAX_ADDEND);
+    for (int i = 0; i < ITERATIONS; i++) {
+      map.put(key, newValue);
+      assertTrue(map.containsKey(key));
+
+      long before = map.get(key);
+      assertFalse(map.remove(key, newValue + 1));
+      assertFalse(map.remove(key, newValue - 1));
+      assertTrue(map.remove(key, newValue));
+      long after = map.get(key);
+      assertFalse(map.containsKey(key));
+      assertEquals(0L, after);
+      newValue += newValue;
+    }
+    assertEquals(0, map.size());
+    assertTrue(map.isEmpty());
+  }
+
+  public void testRemoveValue_zero() {
+    AtomicLongMap<String> map = AtomicLongMap.create();
+    String key = "key";
+    assertEquals(0L, map.get(key));
+    assertFalse(map.containsKey(key));
+
+    assertFalse(map.remove(key, 0L));
+    assertEquals(0L, map.get(key));
+    assertFalse(map.containsKey(key));
+
+    assertEquals(0L, map.put(key, 0L));
+    assertEquals(0L, map.get(key));
+    assertTrue(map.containsKey(key));
+
+    assertTrue(map.remove(key, 0L));
+    assertEquals(0L, map.get(key));
+    assertFalse(map.containsKey(key));
+  }
+
+  public void testRemoveZeros() {
+    AtomicLongMap<Object> map = AtomicLongMap.create();
+    Set<Object> nonZeroKeys = Sets.newHashSet();
+    for (int i = 0; i < ITERATIONS; i++) {
+      Object key = new Object();
+      long value = i % 2;
+      map.put(key, value);
+      if (value != 0L) {
+        nonZeroKeys.add(key);
+      }
+    }
+    assertEquals(ITERATIONS, map.size());
+    assertTrue(map.asMap().containsValue(0L));
+
+    map.removeAllZeros();
+    assertFalse(map.asMap().containsValue(0L));
+    assertEquals(ITERATIONS / 2, map.size());
+    assertEquals(nonZeroKeys, map.asMap().keySet());
+  }
+
+  public void testClear() {
+    AtomicLongMap<Object> map = AtomicLongMap.create();
+    for (int i = 0; i < ITERATIONS; i++) {
+      map.put(new Object(), i);
+    }
+    assertEquals(ITERATIONS, map.size());
+
+    map.clear();
+    assertEquals(0, map.size());
+    assertTrue(map.isEmpty());
+  }
+
+  public void testSum() {
+    AtomicLongMap<Object> map = AtomicLongMap.create();
+    long sum = 0;
+    for (int i = 0; i < ITERATIONS; i++) {
+      map.put(new Object(), i);
+      sum += i;
+    }
+    assertEquals(ITERATIONS, map.size());
+    assertEquals(sum, map.sum());
+  }
+
+  public void testEmpty() {
+    AtomicLongMap<String> map = AtomicLongMap.create();
+    assertEquals(0L, map.get("a"));
+    assertEquals(0, map.size());
+    assertTrue(map.isEmpty());
+    assertFalse(map.remove("a", 1L));
+    assertFalse(map.remove("a", 0L));
+    assertFalse(map.replace("a", 1L, 0L));
+  }
+
+  public void testModify_basher() throws InterruptedException {
+    int nTasks = 3000;
+    int nThreads = 100;
+    final int getsPerTask = 1000;
+    final int deltaRange = 10000;
+    final String key = "key";
+
+    final AtomicLong sum = new AtomicLong();
+    final AtomicLongMap<String> map = AtomicLongMap.create();
+
+    ExecutorService threadPool = Executors.newFixedThreadPool(nThreads);
+    for (int i = 0; i < nTasks; i++) {
+      threadPool.submit(new Runnable() {
+        @Override public void run() {
+          int threadSum = 0;
+          for (int j = 0; j < getsPerTask; j++) {
+            long delta = random.nextInt(deltaRange);
+            int behavior = random.nextInt(10);
+            switch (behavior) {
+              case 0:
+                map.incrementAndGet(key);
+                threadSum++;
+                break;
+              case 1:
+                map.decrementAndGet(key);
+                threadSum--;
+                break;
+              case 2:
+                map.addAndGet(key, delta);
+                threadSum += delta;
+                break;
+              case 3:
+                map.getAndIncrement(key);
+                threadSum++;
+                break;
+              case 4:
+                map.getAndDecrement(key);
+                threadSum--;
+                break;
+              case 5:
+                map.getAndAdd(key, delta);
+                threadSum += delta;
+                break;
+              case 6:
+                long oldValue = map.put(key, delta);
+                threadSum += delta - oldValue;
+                break;
+              case 7:
+                oldValue = map.get(key);
+                if (map.replace(key, oldValue, delta)) {
+                  threadSum += delta - oldValue;
+                }
+                break;
+              case 8:
+                oldValue = map.remove(key);
+                threadSum -= oldValue;
+                break;
+              case 9:
+                oldValue = map.get(key);
+                if (map.remove(key, oldValue)) {
+                  threadSum -= oldValue;
+                }
+                break;
+              default:
+                throw new AssertionError();
+            }
+          }
+          sum.addAndGet(threadSum);
+        }
+      });
+    }
+
+    threadPool.shutdown();
+    assertTrue(threadPool.awaitTermination(300, TimeUnit.SECONDS));
+
+    assertEquals(sum.get(), map.get(key));
+  }
+}
diff --git a/guava-tests/test/com/google/common/util/concurrent/AtomicsTest.java b/guava-tests/test/com/google/common/util/concurrent/AtomicsTest.java
new file mode 100644
index 0000000..66f2b13
--- /dev/null
+++ b/guava-tests/test/com/google/common/util/concurrent/AtomicsTest.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import com.google.common.testing.NullPointerTester;
+
+import junit.framework.TestCase;
+
+import java.util.concurrent.atomic.AtomicReferenceArray;
+
+/**
+ * Unit test for {@link Atomics}.
+ *
+ * @author Kurt Alfred Kluever
+ */
+public class AtomicsTest extends TestCase {
+
+  private static final Object OBJECT = new Object();
+
+  public void testNewReference() throws Exception {
+    assertEquals(null, Atomics.newReference().get());
+  }
+
+  public void testNewReference_withInitialValue() throws Exception {
+    assertEquals(null, Atomics.newReference(null).get());
+    assertEquals(OBJECT, Atomics.newReference(OBJECT).get());
+  }
+
+  public void testNewReferenceArray_withLength() throws Exception {
+    int length = 42;
+    AtomicReferenceArray<String> refArray = Atomics.newReferenceArray(length);
+    for (int i = 0; i < length; ++i) {
+      assertEquals(null, refArray.get(i));
+    }
+    try {
+      refArray.get(length);
+      fail();
+    } catch (IndexOutOfBoundsException expected) {
+    }
+  }
+
+  public void testNewReferenceArray_withNegativeLength() throws Exception {
+    try {
+      Atomics.newReferenceArray(-1);
+      fail();
+    } catch (NegativeArraySizeException expected) {
+    }
+  }
+
+  public void testNewReferenceArray_withStringArray() throws Exception {
+    String[] array = {"foo", "bar", "baz"};
+    AtomicReferenceArray<String> refArray = Atomics.newReferenceArray(array);
+    for (int i = 0; i < array.length; ++i) {
+      assertEquals(array[i], refArray.get(i));
+    }
+    try {
+      refArray.get(array.length);
+      fail();
+    } catch (IndexOutOfBoundsException expected) {
+    }
+  }
+
+  public void testNewReferenceArray_withNullArray() throws Exception {
+    try {
+      Atomics.newReferenceArray(null);
+      fail();
+    } catch (NullPointerException expected) {
+    }
+  }
+
+  public void testNullPointers() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.testAllPublicConstructors(Atomics.class); // there aren't any
+    tester.testAllPublicStaticMethods(Atomics.class);
+  }
+}
diff --git a/guava-tests/test/com/google/common/util/concurrent/CallablesTest.java b/guava-tests/test/com/google/common/util/concurrent/CallablesTest.java
new file mode 100644
index 0000000..63f63ac
--- /dev/null
+++ b/guava-tests/test/com/google/common/util/concurrent/CallablesTest.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import junit.framework.TestCase;
+
+import java.util.concurrent.Callable;
+
+/**
+ * Unit tests for {@link Callables}.
+ *
+ * @author Isaac Shum
+ */
+public class CallablesTest extends TestCase {
+
+  public void testReturning() throws Exception {
+    assertNull(Callables.returning(null).call());
+
+    Object value = new Object();
+    Callable<Object> callable = Callables.returning(value);
+    assertSame(value, callable.call());
+    // Expect the same value on subsequent calls
+    assertSame(value, callable.call());
+  }
+}
diff --git a/guava-tests/test/com/google/common/util/concurrent/ExecutionListTest.java b/guava-tests/test/com/google/common/util/concurrent/ExecutionListTest.java
new file mode 100644
index 0000000..a4a2a8d
--- /dev/null
+++ b/guava-tests/test/com/google/common/util/concurrent/ExecutionListTest.java
@@ -0,0 +1,101 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import static com.google.common.util.concurrent.MoreExecutors.sameThreadExecutor;
+
+import com.google.common.testing.NullPointerTester;
+import com.google.common.util.concurrent.ExecutionList;
+
+import junit.framework.TestCase;
+
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.Executor;
+import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Unit tests for {@link ExecutionList}.
+ *
+ * @author Nishant Thakkar
+ * @author Sven Mawson
+ */
+public class ExecutionListTest extends TestCase {
+
+  protected ExecutionList list = new ExecutionList();
+  protected Executor exec = Executors.newCachedThreadPool();
+
+  public void testRunOnPopulatedList() throws Exception {
+    CountDownLatch countDownLatch = new CountDownLatch(3);
+    list.add(new MockRunnable(countDownLatch), exec);
+    list.add(new MockRunnable(countDownLatch), exec);
+    list.add(new MockRunnable(countDownLatch), exec);
+    assertEquals(countDownLatch.getCount(), 3L);
+
+    list.execute();
+
+    // Verify that all of the runnables execute in a reasonable amount of time.
+    assertTrue(countDownLatch.await(1L, TimeUnit.SECONDS));
+  }
+
+  public void testAddAfterRun() throws Exception {
+    // Run the previous test
+    testRunOnPopulatedList();
+
+    // If it passed, then verify an Add will be executed without calling run
+    CountDownLatch countDownLatch = new CountDownLatch(1);
+    list.add(new MockRunnable(countDownLatch), exec);
+    assertTrue(countDownLatch.await(1L, TimeUnit.SECONDS));
+  }
+
+  private class MockRunnable implements Runnable {
+    CountDownLatch countDownLatch;
+
+    MockRunnable(CountDownLatch countDownLatch) {
+      this.countDownLatch = countDownLatch;
+    }
+
+    @Override
+    public void run() {
+      countDownLatch.countDown();
+    }
+  }
+
+  public void testExceptionsCaught() {
+    ExecutionList list = new ExecutionList();
+    list.add(THROWING_RUNNABLE, sameThreadExecutor());
+    list.execute();
+    list.add(THROWING_RUNNABLE, sameThreadExecutor());
+  }
+
+  public void testNulls() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.setDefault(Executor.class, sameThreadExecutor());
+    tester.setDefault(Runnable.class, DO_NOTHING);
+    tester.testAllPublicInstanceMethods(new ExecutionList());
+  }
+
+  private static final Runnable THROWING_RUNNABLE = new Runnable() {
+    @Override public void run() {
+      throw new RuntimeException();
+    }
+  };
+  private static final Runnable DO_NOTHING = new Runnable() {
+    @Override public void run() {
+    }
+  };
+}
diff --git a/guava-tests/test/com/google/common/util/concurrent/ForwardingCheckedFutureTest.java b/guava-tests/test/com/google/common/util/concurrent/ForwardingCheckedFutureTest.java
new file mode 100644
index 0000000..b78c287
--- /dev/null
+++ b/guava-tests/test/com/google/common/util/concurrent/ForwardingCheckedFutureTest.java
@@ -0,0 +1,114 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import static org.easymock.EasyMock.createMock;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.replay;
+import static org.easymock.EasyMock.verify;
+
+import com.google.common.util.concurrent.ForwardingCheckedFuture.SimpleForwardingCheckedFuture;
+
+import junit.framework.TestCase;
+
+import java.io.IOException;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+
+/**
+ * Test for {@link ForwardingCheckedFuture}
+ * 
+ * @author Anthony Zana
+ */
+public class ForwardingCheckedFutureTest extends TestCase {
+  private static final String VALUE = "delegated";
+  private static final TimeUnit TIME_UNIT = TimeUnit.MILLISECONDS;
+
+  @SuppressWarnings("unchecked")
+  private CheckedFuture<String, IOException> delegate =
+      createMock(CheckedFuture.class);
+
+  private TestDelegateFuture forwarded = new TestDelegateFuture();
+  private TestSimpleFuture simple = new TestSimpleFuture();
+
+  public void testCheckedGet() throws IOException {
+    expect(delegate.checkedGet()).andReturn(VALUE).times(2);
+    replay(delegate);
+    assertEquals(VALUE, forwarded.checkedGet());
+    assertEquals(VALUE, simple.checkedGet());
+    verify(delegate);
+  }
+
+  public void testTimedCheckedGet() throws TimeoutException, IOException {
+    expect(delegate.checkedGet(100, TIME_UNIT)).andReturn(VALUE).times(2);
+    replay(delegate);
+    assertEquals(VALUE, forwarded.checkedGet(100, TIME_UNIT));
+    assertEquals(VALUE, simple.checkedGet(100, TIME_UNIT));
+    verify(delegate);
+  }
+
+  public void testTimedCheckedGet_timeout()
+      throws IOException, TimeoutException {
+    expect(delegate.checkedGet(100, TIME_UNIT))
+        .andThrow(new TimeoutException()).times(2);
+    replay(delegate);
+    try {
+      forwarded.checkedGet(100, TIME_UNIT);
+      fail();
+    } catch (TimeoutException expected) {}
+    try {
+      simple.checkedGet(100, TIME_UNIT);
+      fail();
+    } catch (TimeoutException expected) {}
+    verify(delegate);
+  }
+
+  public void testCheckedGetException() throws IOException {
+    IOException expected = new IOException("expected");
+    expect(delegate.checkedGet()).andThrow(expected).times(2);
+    replay(delegate);
+    try {
+      delegate.checkedGet();
+      fail();
+    } catch (IOException e) {
+      assertEquals(expected.getMessage(), e.getMessage());
+    }
+    try {
+      simple.checkedGet();
+      fail();
+    } catch (IOException e) {
+      assertEquals(expected.getMessage(), e.getMessage());
+    }
+    verify(delegate);
+  }
+
+  private class TestDelegateFuture 
+      extends ForwardingCheckedFuture<String, IOException> {
+    @Override
+    protected CheckedFuture<String, IOException> delegate() {
+      return delegate;
+    }
+  }
+
+  private class TestSimpleFuture 
+      extends SimpleForwardingCheckedFuture<String, IOException> {
+    public TestSimpleFuture() {
+      super(delegate);
+    }
+  }
+  
+}
diff --git a/guava-tests/test/com/google/common/util/concurrent/ForwardingListenableFutureTest.java b/guava-tests/test/com/google/common/util/concurrent/ForwardingListenableFutureTest.java
new file mode 100644
index 0000000..4424e8d
--- /dev/null
+++ b/guava-tests/test/com/google/common/util/concurrent/ForwardingListenableFutureTest.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import junit.framework.TestCase;
+
+/**
+ * Tests for {@link ForwardingListenableFuture}.
+ *
+ * @author Shardul Deo
+ */
+public class ForwardingListenableFutureTest extends TestCase {
+
+  private SettableFuture<String> delegate;
+  private ListenableFuture<String> forwardingFuture;
+
+  private ListenableFutureTester tester;
+
+  @Override
+  protected void setUp() throws Exception {
+    super.setUp();
+
+    delegate = SettableFuture.create();
+    forwardingFuture = new ForwardingListenableFuture<String>() {
+      @Override
+      protected ListenableFuture<String> delegate() {
+        return delegate;
+      }
+    };
+    tester = new ListenableFutureTester(forwardingFuture);
+    tester.setUp();
+  }
+
+  @Override
+  protected void tearDown() throws Exception {
+    tester.tearDown();
+    super.tearDown();
+  }
+
+  public void testCompletedFuture() throws Exception {
+    delegate.set("foo");
+    tester.testCompletedFuture("foo");
+  }
+
+  public void testCancelledFuture() throws Exception {
+    delegate.cancel(true); // parameter is ignored
+    tester.testCancelledFuture();
+  }
+
+  public void testFailedFuture() throws Exception {
+    delegate.setException(new Exception("failed"));
+    tester.testFailedFuture("failed");
+  }
+}
diff --git a/guava-tests/test/com/google/common/util/concurrent/FuturesTest.java b/guava-tests/test/com/google/common/util/concurrent/FuturesTest.java
new file mode 100644
index 0000000..ea9a3da
--- /dev/null
+++ b/guava-tests/test/com/google/common/util/concurrent/FuturesTest.java
@@ -0,0 +1,1942 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import static com.google.common.base.Throwables.propagateIfInstanceOf;
+import static com.google.common.util.concurrent.Futures.allAsList;
+import static com.google.common.util.concurrent.Futures.get;
+import static com.google.common.util.concurrent.Futures.getUnchecked;
+import static com.google.common.util.concurrent.Futures.immediateFailedFuture;
+import static com.google.common.util.concurrent.Futures.immediateFuture;
+import static com.google.common.util.concurrent.Futures.successfulAsList;
+import static java.util.concurrent.Executors.newSingleThreadExecutor;
+import static java.util.concurrent.TimeUnit.MILLISECONDS;
+import static java.util.concurrent.TimeUnit.SECONDS;
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import com.google.common.base.Function;
+import com.google.common.base.Functions;
+import com.google.common.base.Joiner;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Sets;
+import com.google.common.testing.NullPointerTester;
+import com.google.common.util.concurrent.ForwardingFuture.SimpleForwardingFuture;
+
+import junit.framework.AssertionFailedError;
+import junit.framework.TestCase;
+
+import org.easymock.EasyMock;
+import org.easymock.IMocksControl;
+
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Set;
+import java.util.concurrent.Callable;
+import java.util.concurrent.CancellationException;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Executor;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+
+import javax.annotation.Nullable;
+
+/**
+ * Unit tests for {@link Futures}.
+ *
+ * TODO: Add tests for other Futures methods
+ *
+ * @author Nishant Thakkar
+ */
+public class FuturesTest extends TestCase {
+  private static final String DATA1 = "data";
+  private static final String DATA2 = "more data";
+  private static final String DATA3 = "most data";
+
+  private IMocksControl mocksControl;
+
+  @Override protected void setUp() throws Exception {
+    super.setUp();
+
+    mocksControl = EasyMock.createControl();
+  }
+
+  @Override protected void tearDown() throws Exception {
+    /*
+     * Clear interrupt for future tests.
+     *
+     * (Ideally we would perform interrupts only in threads that we create, but
+     * it's hard to imagine that anything will break in practice.)
+     */
+    Thread.interrupted();
+
+    super.tearDown();
+  }
+
+  public void testImmediateFuture() throws Exception {
+    ListenableFuture<String> future = Futures.immediateFuture(DATA1);
+
+    // Verify that the proper object is returned without waiting
+    assertSame(DATA1, future.get(0L, TimeUnit.MILLISECONDS));
+  }
+
+  public void testMultipleImmediateFutures() throws Exception {
+    ListenableFuture<String> future1 = Futures.immediateFuture(DATA1);
+    ListenableFuture<String> future2 = Futures.immediateFuture(DATA2);
+
+    // Verify that the proper objects are returned without waiting
+    assertSame(DATA1, future1.get(0L, TimeUnit.MILLISECONDS));
+    assertSame(DATA2, future2.get(0L, TimeUnit.MILLISECONDS));
+  }
+
+  public void testImmediateFailedFuture() throws Exception {
+    Exception exception = new Exception();
+    ListenableFuture<String> future =
+        Futures.immediateFailedFuture(exception);
+
+    try {
+      future.get(0L, TimeUnit.MILLISECONDS);
+      fail("This call was supposed to throw an ExecutionException");
+    } catch (ExecutionException expected) {
+      // This is good and expected
+      assertSame(exception, expected.getCause());
+    }
+  }
+
+  private static class MyException extends Exception {}
+
+  public void testImmediateCheckedFuture() throws Exception {
+    CheckedFuture<String, MyException> future = Futures.immediateCheckedFuture(
+        DATA1);
+
+    // Verify that the proper object is returned without waiting
+    assertSame(DATA1, future.get(0L, TimeUnit.MILLISECONDS));
+    assertSame(DATA1, future.checkedGet(0L, TimeUnit.MILLISECONDS));
+  }
+
+  public void testMultipleImmediateCheckedFutures() throws Exception {
+    CheckedFuture<String, MyException> future1 = Futures.immediateCheckedFuture(
+        DATA1);
+    CheckedFuture<String, MyException> future2 = Futures.immediateCheckedFuture(
+        DATA2);
+
+    // Verify that the proper objects are returned without waiting
+    assertSame(DATA1, future1.get(0L, TimeUnit.MILLISECONDS));
+    assertSame(DATA1, future1.checkedGet(0L, TimeUnit.MILLISECONDS));
+    assertSame(DATA2, future2.get(0L, TimeUnit.MILLISECONDS));
+    assertSame(DATA2, future2.checkedGet(0L, TimeUnit.MILLISECONDS));
+  }
+
+  public void testImmediateFailedCheckedFuture() throws Exception {
+    MyException exception = new MyException();
+    CheckedFuture<String, MyException> future =
+        Futures.immediateFailedCheckedFuture(exception);
+
+    try {
+      future.get(0L, TimeUnit.MILLISECONDS);
+      fail("This call was supposed to throw an ExecutionException");
+    } catch (ExecutionException expected) {
+      // This is good and expected
+      assertSame(exception, expected.getCause());
+    }
+
+    try {
+      future.checkedGet(0L, TimeUnit.MILLISECONDS);
+      fail("This call was supposed to throw an MyException");
+    } catch (MyException expected) {
+      // This is good and expected
+      assertSame(exception, expected);
+    }
+  }
+
+  // Class hierarchy for generics sanity checks
+  private static class Foo {}
+  private static class FooChild extends Foo {}
+  private static class Bar {}
+  private static class BarChild extends Bar {}
+
+  public void testTransform_ListenableFuture_genericsNull() throws Exception {
+    ListenableFuture<?> nullFuture = Futures.immediateFuture(null);
+    ListenableFuture<?> transformedFuture =
+        Futures.transform(nullFuture, Functions.constant(null));
+    assertNull(transformedFuture.get());
+  }
+
+  public void testTransform_ListenableFuture_genericsHierarchy()
+      throws Exception {
+    ListenableFuture<FooChild> future = Futures.immediateFuture(null);
+    final BarChild barChild = new BarChild();
+    Function<Foo, BarChild> function = new Function<Foo, BarChild>() {
+      @Override public BarChild apply(Foo unused) {
+        return barChild;
+      }
+    };
+    Bar bar = Futures.transform(future, function).get();
+    assertSame(barChild, bar);
+  }
+
+  /**
+   * {@link ListenableFuture} variant of
+   * {@link #testTransformValueRemainsMemoized_Future()}.
+   */
+  public void testTransformValueRemainsMemoized_ListenableFuture()
+      throws Exception {
+    class Holder {
+      int value = 2;
+    }
+    final Holder holder = new Holder();
+
+    // This function adds the holder's value to the input value.
+    Function<Integer, Integer> adder = new Function<Integer, Integer>() {
+      @Override public Integer apply(Integer from) {
+        return from + holder.value;
+      }
+    };
+
+    // Since holder.value is 2, applying 4 should yield 6.
+    assertEquals(6, adder.apply(4).intValue());
+
+    ListenableFuture<Integer> immediateFuture = Futures.immediateFuture(4);
+    Future<Integer> transformedFuture = Futures.transform(immediateFuture, adder);
+
+    // The composed future also yields 6.
+    assertEquals(6, transformedFuture.get().intValue());
+
+    // Repeated calls yield the same value even though the function's behavior
+    // changes
+    holder.value = 3;
+    assertEquals(6, transformedFuture.get().intValue());
+    assertEquals(7, adder.apply(4).intValue());
+
+    // Once more, with feeling.
+    holder.value = 4;
+    assertEquals(6, transformedFuture.get().intValue());
+    assertEquals(8, adder.apply(4).intValue());
+
+    // Memoized get also retains the value.
+    assertEquals(6, transformedFuture.get(1000, TimeUnit.SECONDS).intValue());
+
+    // Unsurprisingly, recomposing the future will return an updated value.
+    assertEquals(8, Futures.transform(immediateFuture, adder).get().intValue());
+
+    // Repeating, with the timeout version
+    assertEquals(8, Futures.transform(immediateFuture, adder).get(
+        1000, TimeUnit.SECONDS).intValue());
+  }
+
+  static class MyError extends Error {}
+  static class MyRuntimeException extends RuntimeException {}
+
+  /**
+   * {@link ListenableFuture} variant of
+   * {@link #testTransformExceptionRemainsMemoized_Future()}.
+   */
+  public void testTransformExceptionRemainsMemoized_ListenableFuture()
+      throws Throwable {
+    SettableFuture<Integer> input = SettableFuture.create();
+
+    ListenableFuture<Integer> exceptionComposedFuture =
+        Futures.transform(input, newOneTimeExceptionThrower());
+    ListenableFuture<Integer> errorComposedFuture =
+        Futures.transform(input, newOneTimeErrorThrower());
+
+    try {
+      input.set(0);
+      fail();
+    } catch (MyError expected) {
+      /*
+       * The ListenableFuture variant rethrows errors from execute() as well
+       * as assigning them to the output of the future.
+       */
+    }
+
+    runGetIdempotencyTest(exceptionComposedFuture, MyRuntimeException.class);
+    runGetIdempotencyTest(errorComposedFuture, MyError.class);
+
+    /*
+     * Try again when the input's value is already filled in, since the flow is
+     * slightly different in that case.
+     */
+    exceptionComposedFuture =
+        Futures.transform(input, newOneTimeExceptionThrower());
+    runGetIdempotencyTest(exceptionComposedFuture, MyRuntimeException.class);
+
+    try {
+      Futures.transform(input, newOneTimeErrorThrower());
+      fail();
+    } catch (MyError expected) {
+    }
+  }
+
+  private static void runGetIdempotencyTest(Future<Integer> transformedFuture,
+      Class<? extends Throwable> expectedExceptionClass) throws Throwable {
+    for (int i = 0; i < 5; i++) {
+      try {
+        transformedFuture.get();
+        fail();
+      } catch (ExecutionException expected) {
+        if (!expectedExceptionClass.isInstance(expected.getCause())) {
+          throw expected.getCause();
+        }
+      }
+    }
+  }
+
+  private static <I, O> Function<I, O> newOneTimeValueReturner(final O output) {
+    return new Function<I, O>() {
+      int calls = 0;
+
+      @Override
+      public O apply(I arg0) {
+        if (++calls > 1) {
+          fail();
+        }
+        return output;
+      }
+    };
+  }
+
+  private static Function<Integer, Integer> newOneTimeExceptionThrower() {
+    return new Function<Integer, Integer>() {
+      int calls = 0;
+
+      @Override public Integer apply(Integer from) {
+        if (++calls > 1) {
+          fail();
+        }
+        throw new MyRuntimeException();
+      }
+    };
+  }
+
+  private static Function<Integer, Integer> newOneTimeErrorThrower() {
+    return new Function<Integer, Integer>() {
+      int calls = 0;
+
+      @Override public Integer apply(Integer from) {
+        if (++calls > 1) {
+          fail();
+        }
+        throw new MyError();
+      }
+    };
+  }
+
+  // TODO(cpovirk): top-level class?
+  static class ExecutorSpy implements Executor {
+    Executor delegate;
+    boolean wasExecuted;
+
+    public ExecutorSpy(Executor delegate) {
+      this.delegate = delegate;
+    }
+
+    @Override public void execute(Runnable command) {
+      delegate.execute(command);
+      wasExecuted = true;
+    }
+  }
+
+  public void testTransform_Executor() throws Exception {
+    Object value = new Object();
+    ExecutorSpy spy = new ExecutorSpy(MoreExecutors.sameThreadExecutor());
+
+    assertFalse(spy.wasExecuted);
+
+    ListenableFuture<Object> future = Futures.transform(
+        Futures.immediateFuture(value),
+        Functions.identity(), spy);
+
+    assertSame(value, future.get());
+    assertTrue(spy.wasExecuted);
+  }
+
+  public void testLazyTransform() throws Exception {
+    FunctionSpy<Object, String> spy =
+        new FunctionSpy<Object, String>(Functions.constant("bar"));
+    Future<String> input = Futures.immediateFuture("foo");
+    Future<String> transformed = Futures.lazyTransform(input, spy);
+    assertEquals(0, spy.getApplyCount());
+    assertEquals("bar", transformed.get());
+    assertEquals(1, spy.getApplyCount());
+    assertEquals("bar", transformed.get());
+    assertEquals(2, spy.getApplyCount());
+  }
+
+  private static class FunctionSpy<I, O> implements Function<I, O> {
+    private int applyCount;
+    private final Function<I, O> delegate;
+
+    public FunctionSpy(Function<I, O> delegate) {
+      this.delegate = delegate;
+    }
+
+    @Override
+    public O apply(I input) {
+      applyCount++;
+      return delegate.apply(input);
+    }
+
+    public int getApplyCount() {
+      return applyCount;
+    }
+  }
+
+  public void testTransform_genericsWildcard_AsyncFunction() throws Exception {
+    ListenableFuture<?> nullFuture = Futures.immediateFuture(null);
+    ListenableFuture<?> chainedFuture =
+        Futures.transform(nullFuture, constantAsyncFunction(nullFuture));
+    assertNull(chainedFuture.get());
+  }
+
+  private static <I, O> AsyncFunction<I, O> constantAsyncFunction(
+      final ListenableFuture<O> output) {
+    return new AsyncFunction<I, O>() {
+      @Override
+      public ListenableFuture<O> apply(I input) {
+        return output;
+      }
+    };
+  }
+
+  public void testTransform_genericsHierarchy_AsyncFunction() throws Exception {
+    ListenableFuture<FooChild> future = Futures.immediateFuture(null);
+    final BarChild barChild = new BarChild();
+    AsyncFunction<Foo, BarChild> function =
+        new AsyncFunction<Foo, BarChild>() {
+          @Override public AbstractFuture<BarChild> apply(Foo unused) {
+            AbstractFuture<BarChild> future = new AbstractFuture<BarChild>() {};
+            future.set(barChild);
+            return future;
+          }
+        };
+    Bar bar = Futures.transform(future, function).get();
+    assertSame(barChild, bar);
+  }
+
+  public void testTransform_delegatesBlockingGet_AsyncFunction() throws Exception {
+    performAsyncFunctionTransformedFutureDelgationTest(0, null);
+  }
+
+  public void testTransform_delegatesTimedGet_AsyncFunction() throws Exception {
+    performAsyncFunctionTransformedFutureDelgationTest(25, TimeUnit.SECONDS);
+  }
+
+  private void performAsyncFunctionTransformedFutureDelgationTest(
+      long timeout, TimeUnit unit)
+      throws InterruptedException, ExecutionException, TimeoutException {
+    final Foo foo = new Foo();
+    MockRequiresGetCallFuture<Foo> fooFuture =
+        new MockRequiresGetCallFuture<Foo>(foo);
+
+    Bar bar = new Bar();
+    final MockRequiresGetCallFuture<Bar> barFuture =
+        new MockRequiresGetCallFuture<Bar>(bar);
+    AsyncFunction<Foo, Bar> function =
+        new AsyncFunction<Foo, Bar>() {
+          @Override public ListenableFuture<Bar> apply(Foo from) {
+            assertSame(foo, from);
+            return barFuture;
+          }
+        };
+
+    ListenableFuture<Bar> chainFuture = Futures.transform(fooFuture, function);
+    Bar theBar;
+    if (unit != null) {
+      theBar = chainFuture.get(timeout, unit);
+    } else {
+      theBar = chainFuture.get();
+    }
+    assertSame(bar, theBar);
+    assertTrue(fooFuture.getWasGetCalled());
+    assertTrue(barFuture.getWasGetCalled());
+  }
+
+  /**
+   * A mock listenable future that requires the caller invoke
+   * either form of get() before the future will make its value
+   * available or invoke listeners.
+   */
+  private static class MockRequiresGetCallFuture<T> extends AbstractFuture<T> {
+
+    private final T value;
+    private boolean getWasCalled;
+
+    MockRequiresGetCallFuture(T value) {
+      this.value = value;
+    }
+
+    @Override public T get() throws InterruptedException, ExecutionException {
+      set(value);
+      getWasCalled = true;
+      return super.get();
+    }
+
+    @Override public T get(long timeout, TimeUnit unit)
+        throws TimeoutException, ExecutionException, InterruptedException {
+      set(value);
+      getWasCalled = true;
+      return super.get(timeout, unit);
+    }
+
+    boolean getWasGetCalled() {
+      return getWasCalled;
+    }
+  }
+
+  /**
+   * Runnable which can be called a single time, and only after
+   * {@link #expectCall} is called.
+   */
+  // TODO(cpovirk): top-level class?
+  static class SingleCallListener implements Runnable {
+    private boolean expectCall = false;
+    private final CountDownLatch calledCountDown =
+        new CountDownLatch(1);
+
+    @Override public void run() {
+      assertTrue("Listener called before it was expected", expectCall);
+      assertFalse("Listener called more than once", wasCalled());
+      calledCountDown.countDown();
+    }
+
+    public void expectCall() {
+      assertFalse("expectCall is already true", expectCall);
+      expectCall = true;
+    }
+
+    public boolean wasCalled() {
+      return calledCountDown.getCount() == 0;
+    }
+
+    public void waitForCall() throws InterruptedException {
+      assertTrue("expectCall is false", expectCall);
+      calledCountDown.await();
+    }
+  }
+
+  public void testAllAsList() throws Exception {
+    // Create input and output
+    SettableFuture<String> future1 = SettableFuture.create();
+    SettableFuture<String> future2 = SettableFuture.create();
+    SettableFuture<String> future3 = SettableFuture.create();
+    @SuppressWarnings("unchecked") // array is never modified
+    ListenableFuture<List<String>> compound =
+        Futures.allAsList(future1, future2, future3);
+
+    // Attach a listener
+    SingleCallListener listener = new SingleCallListener();
+    compound.addListener(listener, MoreExecutors.sameThreadExecutor());
+
+    // Satisfy each input and check the output
+    assertFalse(compound.isDone());
+    future1.set(DATA1);
+    assertFalse(compound.isDone());
+    future2.set(DATA2);
+    assertFalse(compound.isDone());
+    listener.expectCall();
+    future3.set(DATA3);
+    assertTrue(compound.isDone());
+    assertTrue(listener.wasCalled());
+
+    List<String> results = compound.get();
+    ASSERT.that(results).hasContentsInOrder(DATA1, DATA2, DATA3);
+  }
+
+  public void testAllAsList_emptyList() throws Exception {
+    SingleCallListener listener = new SingleCallListener();
+    listener.expectCall();
+    List<ListenableFuture<String>> futures = ImmutableList.of();
+    ListenableFuture<List<String>> compound = Futures.allAsList(futures);
+    compound.addListener(listener, MoreExecutors.sameThreadExecutor());
+    assertTrue(compound.isDone());
+    assertTrue(compound.get().isEmpty());
+    assertTrue(listener.wasCalled());
+  }
+
+  public void testAllAsList_emptyArray() throws Exception {
+    SingleCallListener listener = new SingleCallListener();
+    listener.expectCall();
+    @SuppressWarnings("unchecked") // array is never modified
+    ListenableFuture<List<String>> compound = Futures.allAsList();
+    compound.addListener(listener, MoreExecutors.sameThreadExecutor());
+    assertTrue(compound.isDone());
+    assertTrue(compound.get().isEmpty());
+    assertTrue(listener.wasCalled());
+  }
+
+  public void testAllAsList_failure() throws Exception {
+    SingleCallListener listener = new SingleCallListener();
+    SettableFuture<String> future1 = SettableFuture.create();
+    SettableFuture<String> future2 = SettableFuture.create();
+    @SuppressWarnings("unchecked") // array is never modified
+    ListenableFuture<List<String>> compound =
+        Futures.allAsList(future1, future2);
+    compound.addListener(listener, MoreExecutors.sameThreadExecutor());
+
+    listener.expectCall();
+    Throwable exception = new Throwable("failed1");
+    future1.setException(exception);
+    assertTrue(compound.isDone());
+    assertTrue(listener.wasCalled());
+    future2.set("result2");
+
+    try {
+      compound.get();
+      fail("Expected exception not thrown");
+    } catch (ExecutionException e) {
+      assertSame(exception, e.getCause());
+    }
+  }
+
+  public void testAllAsList_singleFailure() throws Exception {
+    Throwable exception = new Throwable("failed");
+    ListenableFuture<String> future = Futures.immediateFailedFuture(exception);
+    ListenableFuture<List<String>> compound = Futures.allAsList(ImmutableList.of(future));
+
+    try {
+      compound.get();
+      fail("Expected exception not thrown");
+    } catch (ExecutionException e) {
+      assertSame(exception, e.getCause());
+    }
+  }
+
+  public void testAllAsList_immediateFailure() throws Exception {
+    Throwable exception = new Throwable("failed");
+    ListenableFuture<String> future1 = Futures.immediateFailedFuture(exception);
+    ListenableFuture<String> future2 = Futures.immediateFuture("results");
+    ListenableFuture<List<String>> compound = Futures.allAsList(ImmutableList.of(future1, future2));
+
+    try {
+      compound.get();
+      fail("Expected exception not thrown");
+    } catch (ExecutionException e) {
+      assertSame(exception, e.getCause());
+    }
+  }
+
+  public void testAllAsList_cancelled() throws Exception {
+    SingleCallListener listener = new SingleCallListener();
+    SettableFuture<String> future1 = SettableFuture.create();
+    SettableFuture<String> future2 = SettableFuture.create();
+    @SuppressWarnings("unchecked") // array is never modified
+    ListenableFuture<List<String>> compound =
+        Futures.allAsList(future1, future2);
+    compound.addListener(listener, MoreExecutors.sameThreadExecutor());
+
+    listener.expectCall();
+    future1.cancel(true);
+    assertTrue(compound.isDone());
+    assertTrue(listener.wasCalled());
+    future2.setException(new Throwable("failed2"));
+
+    try {
+      compound.get();
+      fail("Expected exception not thrown");
+    } catch (CancellationException e) {
+      // Expected
+    }
+  }
+
+  public void testAllAsList_buggyInputFutures() throws Exception {
+    final Foo foo1 = new Foo();
+    MockRequiresGetCallFuture<Foo> foo1Future =
+        new MockRequiresGetCallFuture<Foo>(foo1);
+    final Foo foo2 = new Foo();
+    MockRequiresGetCallFuture<Foo> foo2Future =
+        new MockRequiresGetCallFuture<Foo>(foo2);
+
+    @SuppressWarnings("unchecked") // array is never modified
+    ListenableFuture<List<Foo>> compound =
+        Futures.allAsList(foo1Future, foo2Future);
+
+    assertFalse(compound.isDone());
+    ASSERT.that(compound.get()).hasContentsAnyOrder(foo1, foo2);
+    assertTrue(foo1Future.getWasGetCalled());
+    assertTrue(foo2Future.getWasGetCalled());
+  }
+
+  /**
+   * Test the case where the futures are fulfilled prior to
+   * constructing the ListFuture.  There was a bug where the
+   * loop that connects a Listener to each of the futures would die
+   * on the last loop-check as done() on ListFuture nulled out the
+   * variable being looped over (the list of futures).
+   */
+  public void testAllAsList_doneFutures() throws Exception {
+    // Create input and output
+    SettableFuture<String> future1 = SettableFuture.create();
+    SettableFuture<String> future2 = SettableFuture.create();
+    SettableFuture<String> future3 = SettableFuture.create();
+
+    // Satisfy each input prior to creating compound and check the output
+    future1.set(DATA1);
+    future2.set(DATA2);
+    future3.set(DATA3);
+
+    @SuppressWarnings("unchecked") // array is never modified
+    ListenableFuture<List<String>> compound =
+        Futures.allAsList(future1, future2, future3);
+
+    // Attach a listener
+    SingleCallListener listener = new SingleCallListener();
+    listener.expectCall();
+    compound.addListener(listener, MoreExecutors.sameThreadExecutor());
+
+    assertTrue(compound.isDone());
+    assertTrue(listener.wasCalled());
+
+    List<String> results = compound.get();
+    ASSERT.that(results).hasContentsInOrder(DATA1, DATA2, DATA3);
+  }
+
+  private String createCombinedResult(Integer i, Boolean b) {
+    return "-" + i + "-" + b;
+  }
+
+  /*
+   * TODO(cpovirk): maybe pass around TestFuture instances instead of
+   * ListenableFuture instances
+   */
+  /**
+   * A future in {@link TestFutureBatch} that also has a name for debugging
+   * purposes and a {@code finisher}, a task that will complete the future in
+   * some fashion when it is called, allowing for testing both before and after
+   * the completion of the future.
+   */
+  private static final class TestFuture {
+    final ListenableFuture<String> future;
+    final String name;
+    final Runnable finisher;
+
+    TestFuture(
+        ListenableFuture<String> future, String name, Runnable finisher) {
+      this.future = future;
+      this.name = name;
+      this.finisher = finisher;
+    }
+  }
+
+  /**
+   * A collection of several futures, covering cancellation, success, and
+   * failure (both {@link ExecutionException} and {@link RuntimeException}),
+   * both immediate and delayed. We use each possible pair of these futures in
+   * {@link FuturesTest#runExtensiveMergerTest}.
+   *
+   * <p>Each test requires a new {@link TestFutureBatch} because we need new
+   * delayed futures each time, as the old delayed futures were completed as
+   * part of the old test.
+   */
+  private static final class TestFutureBatch {
+    final ListenableFuture<String> doneSuccess = immediateFuture("a");
+    final ListenableFuture<String> doneFailed =
+        immediateFailedFuture(new Exception());
+    final SettableFuture<String> doneCancelled = SettableFuture.create();
+    {
+      doneCancelled.cancel(true);
+    }
+
+    final ListenableFuture<String> doneRuntimeException =
+        new ForwardingListenableFuture<String>() {
+          final ListenableFuture<String> delegate =
+              immediateFuture("Should never be seen");
+
+          @Override
+          protected ListenableFuture<String> delegate() {
+            return delegate;
+          }
+
+          @Override
+          public String get() {
+            throw new RuntimeException();
+          }
+
+          @Override
+          public String get(long timeout, TimeUnit unit) {
+            throw new RuntimeException();
+          }
+    };
+
+    final SettableFuture<String> delayedSuccess = SettableFuture.create();
+    final SettableFuture<String> delayedFailed = SettableFuture.create();
+    final SettableFuture<String> delayedCancelled = SettableFuture.create();
+
+    final SettableFuture<String> delegateForDelayedRuntimeException =
+        SettableFuture.create();
+    final ListenableFuture<String> delayedRuntimeException =
+        new ForwardingListenableFuture<String>() {
+          @Override
+          protected ListenableFuture<String> delegate() {
+            return delegateForDelayedRuntimeException;
+          }
+
+          @Override
+          public String get() throws ExecutionException, InterruptedException {
+            delegateForDelayedRuntimeException.get();
+            throw new RuntimeException();
+          }
+
+          @Override
+          public String get(long timeout, TimeUnit unit) throws
+              ExecutionException, InterruptedException, TimeoutException {
+            delegateForDelayedRuntimeException.get(timeout, unit);
+            throw new RuntimeException();
+          }
+    };
+
+    final Runnable doNothing = new Runnable() {
+      @Override
+      public void run() {
+      }
+    };
+    final Runnable finishSuccess = new Runnable() {
+      @Override
+      public void run() {
+        delayedSuccess.set("b");
+      }
+    };
+    final Runnable finishFailure = new Runnable() {
+      @Override
+      public void run() {
+        delayedFailed.setException(new Exception());
+      }
+    };
+    final Runnable finishCancelled = new Runnable() {
+      @Override
+      public void run() {
+        delayedCancelled.cancel(true);
+      }
+    };
+    final Runnable finishRuntimeException = new Runnable() {
+      @Override
+      public void run() {
+        delegateForDelayedRuntimeException.set("Should never be seen");
+      }
+    };
+
+    /**
+     * All the futures, together with human-readable names for use by
+     * {@link #smartToString}.
+     */
+    final ImmutableList<TestFuture> allFutures =
+        ImmutableList.of(new TestFuture(doneSuccess, "doneSuccess", doNothing),
+            new TestFuture(doneFailed, "doneFailed", doNothing),
+            new TestFuture(doneCancelled, "doneCancelled", doNothing),
+            new TestFuture(
+                doneRuntimeException, "doneRuntimeException", doNothing),
+            new TestFuture(delayedSuccess, "delayedSuccess", finishSuccess),
+            new TestFuture(delayedFailed, "delayedFailed", finishFailure),
+            new TestFuture(
+                delayedCancelled, "delayedCancelled", finishCancelled),
+            new TestFuture(delayedRuntimeException, "delayedRuntimeException",
+                finishRuntimeException));
+
+    final Function<ListenableFuture<String>, String> nameGetter =
+      new Function<ListenableFuture<String>, String>() {
+        @Override
+        public String apply(ListenableFuture<String> input) {
+          for (TestFuture future : allFutures) {
+            if (future.future == input) {
+              return future.name;
+            }
+          }
+          throw new IllegalArgumentException(input.toString());
+        }
+      };
+
+    static boolean intersect(Set<?> a, Set<?> b) {
+      return !Sets.intersection(a, b).isEmpty();
+    }
+
+    /**
+     * Like {@code inputs.toString()}, but with the nonsense {@code toString}
+     * representations replaced with the name of each future from
+     * {@link #allFutures}.
+     */
+    String smartToString(ImmutableSet<ListenableFuture<String>> inputs) {
+      Iterable<String> inputNames = Iterables.transform(inputs, nameGetter);
+      return Joiner.on(", ").join(inputNames);
+    }
+
+    void smartAssertTrue(ImmutableSet<ListenableFuture<String>> inputs,
+        Exception cause, boolean expression) {
+      if (!expression) {
+        failWithCause(cause, smartToString(inputs));
+      }
+    }
+
+    boolean hasDelayed(ListenableFuture<String> a, ListenableFuture<String> b) {
+      ImmutableSet<ListenableFuture<String>> inputs = ImmutableSet.of(a, b);
+      return intersect(inputs, ImmutableSet.of(
+          delayedSuccess, delayedFailed, delayedCancelled,
+          delayedRuntimeException));
+    }
+
+    void assertHasDelayed(
+        ListenableFuture<String> a, ListenableFuture<String> b, Exception e) {
+      ImmutableSet<ListenableFuture<String>> inputs = ImmutableSet.of(a, b);
+      smartAssertTrue(inputs, e, hasDelayed(a, b));
+    }
+
+    void assertHasFailure(
+        ListenableFuture<String> a, ListenableFuture<String> b, Exception e) {
+      ImmutableSet<ListenableFuture<String>> inputs = ImmutableSet.of(a, b);
+      smartAssertTrue(inputs, e, intersect(inputs, ImmutableSet.of(doneFailed,
+          doneRuntimeException, delayedFailed, delayedRuntimeException)));
+    }
+
+    void assertHasCancel(
+        ListenableFuture<String> a, ListenableFuture<String> b, Exception e) {
+      ImmutableSet<ListenableFuture<String>> inputs = ImmutableSet.of(a, b);
+      smartAssertTrue(inputs, e,
+          intersect(inputs, ImmutableSet.of(doneCancelled, delayedCancelled)));
+    }
+
+    void assertHasImmediateFailure(
+        ListenableFuture<String> a, ListenableFuture<String> b, Exception e) {
+      ImmutableSet<ListenableFuture<String>> inputs = ImmutableSet.of(a, b);
+      smartAssertTrue(inputs, e, intersect(
+          inputs, ImmutableSet.of(doneFailed, doneRuntimeException)));
+    }
+
+    void assertHasImmediateCancel(
+        ListenableFuture<String> a, ListenableFuture<String> b, Exception e) {
+      ImmutableSet<ListenableFuture<String>> inputs = ImmutableSet.of(a, b);
+      smartAssertTrue(inputs, e,
+          intersect(inputs, ImmutableSet.of(doneCancelled)));
+    }
+  }
+
+  /**
+   * {@link Futures#allAsList(Iterable)} or
+   * {@link Futures#successfulAsList(Iterable)}, hidden behind a common
+   * interface for testing.
+   */
+  private interface Merger {
+    ListenableFuture<List<String>> merged(
+        ListenableFuture<String> a, ListenableFuture<String> b);
+
+    Merger allMerger = new Merger() {
+      @Override
+      public ListenableFuture<List<String>> merged(
+          ListenableFuture<String> a, ListenableFuture<String> b) {
+        return allAsList(ImmutableSet.of(a, b));
+      }
+    };
+    Merger successMerger = new Merger() {
+      @Override
+      public ListenableFuture<List<String>> merged(
+          ListenableFuture<String> a, ListenableFuture<String> b) {
+        return successfulAsList(ImmutableSet.of(a, b));
+      }
+    };
+  }
+
+  /**
+   * Very rough equivalent of a timed get, produced by calling the no-arg get
+   * method in another thread and waiting a short time for it.
+   *
+   * <p>We need this to test the behavior of no-arg get methods without hanging
+   * the main test thread forever in the case of failure.
+   */
+  private static <V> V pseudoTimedGet(
+      final Future<V> input, long timeout, TimeUnit unit)
+      throws InterruptedException, ExecutionException, TimeoutException {
+    ExecutorService executor = newSingleThreadExecutor();
+    Future<V> waiter = executor.submit(new Callable<V>() {
+      @Override
+      public V call() throws Exception {
+        return input.get();
+      }
+    });
+
+    try {
+      return waiter.get(timeout, unit);
+    } catch (ExecutionException e) {
+      propagateIfInstanceOf(e.getCause(), ExecutionException.class);
+      propagateIfInstanceOf(e.getCause(), CancellationException.class);
+      AssertionFailedError error =
+          new AssertionFailedError("Unexpected exception");
+      error.initCause(e);
+      throw error;
+    } finally {
+      executor.shutdownNow();
+      assertTrue(executor.awaitTermination(10, SECONDS));
+    }
+  }
+
+  /**
+   * For each possible pair of futures from {@link TestFutureBatch}, for each
+   * possible completion order of those futures, test that various get calls
+   * (timed before future completion, untimed before future completion, and
+   * untimed after future completion) return or throw the proper values.
+   */
+  private static void runExtensiveMergerTest(Merger merger)
+      throws InterruptedException {
+    int inputCount = new TestFutureBatch().allFutures.size();
+
+    for (int i = 0; i < inputCount; i++) {
+      for (int j = 0; j < inputCount; j++) {
+        for (boolean iBeforeJ : new boolean[] { true, false }) {
+          TestFutureBatch inputs = new TestFutureBatch();
+          ListenableFuture<String> iFuture = inputs.allFutures.get(i).future;
+          ListenableFuture<String> jFuture = inputs.allFutures.get(j).future;
+          ListenableFuture<List<String>> future =
+              merger.merged(iFuture, jFuture);
+
+          // Test timed get before we've completed any delayed futures.
+          try {
+            List<String> result = future.get(0, MILLISECONDS);
+            assertTrue("Got " + result,
+                Arrays.asList("a", null).containsAll(result));
+          } catch (CancellationException e) {
+            assertTrue(merger == Merger.allMerger);
+            inputs.assertHasImmediateCancel(iFuture, jFuture, e);
+          } catch (ExecutionException e) {
+            assertTrue(merger == Merger.allMerger);
+            inputs.assertHasImmediateFailure(iFuture, jFuture, e);
+          } catch (TimeoutException e) {
+            inputs.assertHasDelayed(iFuture, jFuture, e);
+          }
+
+          // Same tests with pseudoTimedGet.
+          try {
+            List<String> result = conditionalPseudoTimedGet(
+                inputs, iFuture, jFuture, future, 20, MILLISECONDS);
+            assertTrue("Got " + result,
+                Arrays.asList("a", null).containsAll(result));
+          } catch (CancellationException e) {
+            assertTrue(merger == Merger.allMerger);
+            inputs.assertHasImmediateCancel(iFuture, jFuture, e);
+          } catch (ExecutionException e) {
+            assertTrue(merger == Merger.allMerger);
+            inputs.assertHasImmediateFailure(iFuture, jFuture, e);
+          } catch (TimeoutException e) {
+            inputs.assertHasDelayed(iFuture, jFuture, e);
+          }
+
+          // Finish the two futures in the currently specified order:
+          inputs.allFutures.get(iBeforeJ ? i : j).finisher.run();
+          inputs.allFutures.get(iBeforeJ ? j : i).finisher.run();
+
+          // Test untimed get now that we've completed any delayed futures.
+          try {
+            List<String> result = future.get();
+            assertTrue("Got " + result,
+                Arrays.asList("a", "b", null).containsAll(result));
+          } catch (CancellationException e) {
+            assertTrue(merger == Merger.allMerger);
+            inputs.assertHasCancel(iFuture, jFuture, e);
+          } catch (ExecutionException e) {
+            assertTrue(merger == Merger.allMerger);
+            inputs.assertHasFailure(iFuture, jFuture, e);
+          }
+        }
+      }
+    }
+  }
+
+  /**
+   * Call the non-timed {@link Future#get()} in a way that allows us to abort if
+   * it's expected to hang forever. More precisely, if it's expected to return,
+   * we simply call it[*], but if it's expected to hang (because one of the
+   * input futures that we know makes it up isn't done yet), then we call it in
+   * a separate thread (using pseudoTimedGet). The result is that we wait as
+   * long as necessary when the method is expected to return (at the cost of
+   * hanging forever if there is a bug in the class under test) but that we time
+   * out fairly promptly when the method is expected to hang (possibly too
+   * quickly, but too-quick failures should be very unlikely, given that we used
+   * to bail after 20ms during the expected-successful tests, and there we saw a
+   * failure rate of ~1/5000, meaning that the other thread's get() call nearly
+   * always completes within 20ms if it's going to complete at all).
+   *
+   * [*] To avoid hangs, I've disabled the in-thread calls. This makes the test
+   * take (very roughly) 2.5s longer. (2.5s is also the maximum length of time
+   * we will wait for a timed get that is expected to succeed; the fact that the
+   * numbers match is only a coincidence.) See the comment below for how to
+   * restore the fast but hang-y version.
+   */
+  private static List<String> conditionalPseudoTimedGet(
+      TestFutureBatch inputs,
+      ListenableFuture<String> iFuture,
+      ListenableFuture<String> jFuture,
+      ListenableFuture<List<String>> future,
+      int timeout,
+      TimeUnit unit)
+      throws InterruptedException, ExecutionException, TimeoutException {
+    /*
+     * For faster tests (that may hang indefinitely if the class under test has
+     * a bug!), switch the second branch to call untimed future.get() instead of
+     * pseudoTimedGet.
+     */
+    return (inputs.hasDelayed(iFuture, jFuture))
+        ? pseudoTimedGet(future, timeout, unit)
+        : pseudoTimedGet(future, 2500, MILLISECONDS);
+  }
+
+  public void testAllAsList_extensive() throws InterruptedException {
+    runExtensiveMergerTest(Merger.allMerger);
+  }
+
+  public void testSuccessfulAsList_extensive() throws InterruptedException {
+    runExtensiveMergerTest(Merger.successMerger);
+  }
+
+  public void testSuccessfulAsList() throws Exception {
+    // Create input and output
+    SettableFuture<String> future1 = SettableFuture.create();
+    SettableFuture<String> future2 = SettableFuture.create();
+    SettableFuture<String> future3 = SettableFuture.create();
+    @SuppressWarnings("unchecked") // array is never modified
+    ListenableFuture<List<String>> compound =
+        Futures.successfulAsList(future1, future2, future3);
+
+    // Attach a listener
+    SingleCallListener listener = new SingleCallListener();
+    compound.addListener(listener, MoreExecutors.sameThreadExecutor());
+
+    // Satisfy each input and check the output
+    assertFalse(compound.isDone());
+    future1.set(DATA1);
+    assertFalse(compound.isDone());
+    future2.set(DATA2);
+    assertFalse(compound.isDone());
+    listener.expectCall();
+    future3.set(DATA3);
+    assertTrue(compound.isDone());
+    assertTrue(listener.wasCalled());
+
+    List<String> results = compound.get();
+    ASSERT.that(results).hasContentsInOrder(DATA1, DATA2, DATA3);
+  }
+
+  public void testSuccessfulAsList_emptyList() throws Exception {
+    SingleCallListener listener = new SingleCallListener();
+    listener.expectCall();
+    List<ListenableFuture<String>> futures = ImmutableList.of();
+    ListenableFuture<List<String>> compound = Futures.successfulAsList(futures);
+    compound.addListener(listener, MoreExecutors.sameThreadExecutor());
+    assertTrue(compound.isDone());
+    assertTrue(compound.get().isEmpty());
+    assertTrue(listener.wasCalled());
+  }
+
+  public void testSuccessfulAsList_emptyArray() throws Exception {
+    SingleCallListener listener = new SingleCallListener();
+    listener.expectCall();
+    @SuppressWarnings("unchecked") // array is never modified
+    ListenableFuture<List<String>> compound = Futures.successfulAsList();
+    compound.addListener(listener, MoreExecutors.sameThreadExecutor());
+    assertTrue(compound.isDone());
+    assertTrue(compound.get().isEmpty());
+    assertTrue(listener.wasCalled());
+  }
+
+  public void testSuccessfulAsList_partialFailure() throws Exception {
+    SingleCallListener listener = new SingleCallListener();
+    SettableFuture<String> future1 = SettableFuture.create();
+    SettableFuture<String> future2 = SettableFuture.create();
+    @SuppressWarnings("unchecked") // array is never modified
+    ListenableFuture<List<String>> compound =
+        Futures.successfulAsList(future1, future2);
+    compound.addListener(listener, MoreExecutors.sameThreadExecutor());
+
+    assertFalse(compound.isDone());
+    future1.setException(new Throwable("failed1"));
+    assertFalse(compound.isDone());
+    listener.expectCall();
+    future2.set(DATA2);
+    assertTrue(compound.isDone());
+    assertTrue(listener.wasCalled());
+
+    List<String> results = compound.get();
+    ASSERT.that(results).hasContentsInOrder(null, DATA2);
+  }
+
+  public void testSuccessfulAsList_totalFailure() throws Exception {
+    SingleCallListener listener = new SingleCallListener();
+    SettableFuture<String> future1 = SettableFuture.create();
+    SettableFuture<String> future2 = SettableFuture.create();
+    @SuppressWarnings("unchecked") // array is never modified
+    ListenableFuture<List<String>> compound =
+        Futures.successfulAsList(future1, future2);
+    compound.addListener(listener, MoreExecutors.sameThreadExecutor());
+
+    assertFalse(compound.isDone());
+    future1.setException(new Throwable("failed1"));
+    assertFalse(compound.isDone());
+    listener.expectCall();
+    future2.setException(new Throwable("failed2"));
+    assertTrue(compound.isDone());
+    assertTrue(listener.wasCalled());
+
+    List<String> results = compound.get();
+    ASSERT.that(results).hasContentsInOrder(null, null);
+  }
+
+  public void testSuccessfulAsList_cancelled() throws Exception {
+    SingleCallListener listener = new SingleCallListener();
+    SettableFuture<String> future1 = SettableFuture.create();
+    SettableFuture<String> future2 = SettableFuture.create();
+    @SuppressWarnings("unchecked") // array is never modified
+    ListenableFuture<List<String>> compound =
+        Futures.successfulAsList(future1, future2);
+    compound.addListener(listener, MoreExecutors.sameThreadExecutor());
+
+    assertFalse(compound.isDone());
+    future1.cancel(true);
+    assertFalse(compound.isDone());
+    listener.expectCall();
+    future2.set(DATA2);
+    assertTrue(compound.isDone());
+    assertTrue(listener.wasCalled());
+
+    List<String> results = compound.get();
+    ASSERT.that(results).hasContentsInOrder(null, DATA2);
+  }
+
+  public void testSuccessfulAsList_mixed() throws Exception {
+    SingleCallListener listener = new SingleCallListener();
+    SettableFuture<String> future1 = SettableFuture.create();
+    SettableFuture<String> future2 = SettableFuture.create();
+    SettableFuture<String> future3 = SettableFuture.create();
+    @SuppressWarnings("unchecked") // array is never modified
+    ListenableFuture<List<String>> compound =
+        Futures.successfulAsList(future1, future2, future3);
+    compound.addListener(listener, MoreExecutors.sameThreadExecutor());
+
+    // First is cancelled, second fails, third succeeds
+    assertFalse(compound.isDone());
+    future1.cancel(true);
+    assertFalse(compound.isDone());
+    future2.setException(new Throwable("failed2"));
+    assertFalse(compound.isDone());
+    listener.expectCall();
+    future3.set(DATA3);
+    assertTrue(compound.isDone());
+    assertTrue(listener.wasCalled());
+
+    List<String> results = compound.get();
+    ASSERT.that(results).hasContentsInOrder(null, null, DATA3);
+  }
+
+  public void testSuccessfulAsList_buggyInputFutures() throws Exception {
+    final Foo foo1 = new Foo();
+    MockRequiresGetCallFuture<Foo> foo1Future =
+        new MockRequiresGetCallFuture<Foo>(foo1);
+    final Foo foo2 = new Foo();
+    MockRequiresGetCallFuture<Foo> foo2Future =
+        new MockRequiresGetCallFuture<Foo>(foo2);
+
+    @SuppressWarnings("unchecked") // array is never modified
+    ListenableFuture<List<Foo>> compound =
+        Futures.successfulAsList(foo1Future, foo2Future);
+
+    assertFalse(compound.isDone());
+    ASSERT.that(compound.get()).hasContentsAnyOrder(foo1, foo2);
+    assertTrue(foo1Future.getWasGetCalled());
+    assertTrue(foo2Future.getWasGetCalled());
+  }
+
+  private static class TestException extends Exception {
+    TestException(@Nullable Throwable cause) {
+      super(cause);
+    }
+  }
+
+  private static final Function<Exception, TestException> mapper =
+      new Function<Exception, TestException>() {
+    @Override public TestException apply(Exception from) {
+      if (from instanceof ExecutionException) {
+        return new TestException(from.getCause());
+      } else {
+        assertTrue("got " + from.getClass(),
+            from instanceof InterruptedException
+                || from instanceof CancellationException);
+        return new TestException(from);
+      }
+    }
+  };
+
+  public void testMakeChecked_mapsExecutionExceptions() throws Exception {
+    SettableFuture<String> future = SettableFuture.create();
+
+    CheckedFuture<String, TestException> checked = Futures.makeChecked(
+        future, mapper);
+
+    future.setException(new IOException("checked"));
+
+    assertTrue(checked.isDone());
+    assertFalse(checked.isCancelled());
+
+    try {
+      checked.get();
+      fail();
+    } catch (ExecutionException e) {
+      assertTrue(e.getCause() instanceof IOException);
+    }
+
+    try {
+      checked.get(5, TimeUnit.SECONDS);
+      fail();
+    } catch (ExecutionException e) {
+      assertTrue(e.getCause() instanceof IOException);
+    }
+
+    try {
+      checked.checkedGet();
+      fail();
+    } catch (TestException e) {
+      assertTrue(e.getCause() instanceof IOException);
+    }
+
+    try {
+      checked.checkedGet(5, TimeUnit.SECONDS);
+      fail();
+    } catch (TestException e) {
+      assertTrue(e.getCause() instanceof IOException);
+    }
+  }
+
+  public void testMakeChecked_mapsInterruption() throws Exception {
+    SettableFuture<String> future = SettableFuture.create();
+
+    CheckedFuture<String, TestException> checked = Futures.makeChecked(
+        future, mapper);
+
+    Thread.currentThread().interrupt();
+
+    try {
+      checked.get();
+      fail();
+    } catch (InterruptedException e) {
+      // Expected.
+    }
+
+    Thread.currentThread().interrupt();
+
+    try {
+      checked.get(5, TimeUnit.SECONDS);
+      fail();
+    } catch (InterruptedException e) {
+      // Expected.
+    }
+
+    Thread.currentThread().interrupt();
+
+    try {
+      checked.checkedGet();
+      fail();
+    } catch (TestException e) {
+      assertTrue(e.getCause() instanceof InterruptedException);
+    }
+
+    Thread.currentThread().interrupt();
+
+    try {
+      checked.checkedGet(5, TimeUnit.SECONDS);
+      fail();
+    } catch (TestException e) {
+      assertTrue(e.getCause() instanceof InterruptedException);
+    }
+  }
+
+  public void testMakeChecked_mapsCancellation() throws Exception {
+    SettableFuture<String> future = SettableFuture.create();
+
+    CheckedFuture<String, TestException> checked = Futures.makeChecked(
+        future, mapper);
+
+    assertTrue(future.cancel(true)); // argument is ignored
+
+    try {
+      checked.get();
+      fail();
+    } catch (CancellationException expected) {}
+
+    try {
+      checked.get(5, TimeUnit.SECONDS);
+      fail();
+    } catch (CancellationException expected) {}
+
+    try {
+      checked.checkedGet();
+      fail();
+    } catch (TestException expected) {
+      assertTrue(expected.getCause() instanceof CancellationException);
+    }
+
+    try {
+      checked.checkedGet(5, TimeUnit.SECONDS);
+      fail();
+    } catch (TestException expected) {
+      assertTrue(expected.getCause() instanceof CancellationException);
+    }
+  }
+
+  public void testMakeChecked_propagatesFailedMappers() throws Exception {
+    SettableFuture<String> future = SettableFuture.create();
+
+    CheckedFuture<String, TestException> checked = Futures.makeChecked(
+        future, new Function<Exception, TestException>() {
+          @Override public TestException apply(Exception from) {
+            throw new NullPointerException();
+          }
+    });
+
+    future.setException(new Exception("failed"));
+
+    try {
+      checked.checkedGet();
+      fail();
+    } catch (NullPointerException expected) {}
+
+    try {
+      checked.checkedGet(5, TimeUnit.SECONDS);
+      fail();
+    } catch (NullPointerException expected) {}
+  }
+
+  public void testMakeChecked_listenersRunOnceCompleted() throws Exception {
+    SettableFuture<String> future = SettableFuture.create();
+
+    CheckedFuture<String, TestException> checked = Futures.makeChecked(
+        future, new Function<Exception, TestException>() {
+          @Override public TestException apply(Exception from) {
+            throw new NullPointerException();
+          }
+    });
+
+    ListenableFutureTester tester = new ListenableFutureTester(checked);
+    tester.setUp();
+    future.set(DATA1);
+    tester.testCompletedFuture(DATA1);
+    tester.tearDown();
+  }
+
+  public void testMakeChecked_listenersRunOnCancel() throws Exception {
+    SettableFuture<String> future = SettableFuture.create();
+
+    CheckedFuture<String, TestException> checked = Futures.makeChecked(
+        future, new Function<Exception, TestException>() {
+          @Override public TestException apply(Exception from) {
+            throw new NullPointerException();
+          }
+    });
+
+    ListenableFutureTester tester = new ListenableFutureTester(checked);
+    tester.setUp();
+    future.cancel(true); // argument is ignored
+    tester.testCancelledFuture();
+    tester.tearDown();
+  }
+
+  public void testMakeChecked_listenersRunOnFailure() throws Exception {
+    SettableFuture<String> future = SettableFuture.create();
+
+    CheckedFuture<String, TestException> checked = Futures.makeChecked(
+        future, new Function<Exception, TestException>() {
+          @Override public TestException apply(Exception from) {
+            throw new NullPointerException();
+          }
+    });
+
+    ListenableFutureTester tester = new ListenableFutureTester(checked);
+    tester.setUp();
+    future.setException(new Exception("failed"));
+    tester.testFailedFuture("failed");
+    tester.tearDown();
+  }
+
+  private interface MapperFunction extends Function<Throwable, Exception> {}
+
+  private static final class OtherThrowable extends Throwable {}
+
+  private static final Exception CHECKED_EXCEPTION = new Exception("mymessage");
+  private static final Future<String> FAILED_FUTURE_CHECKED_EXCEPTION =
+      immediateFailedFuture(CHECKED_EXCEPTION);
+  private static final RuntimeException UNCHECKED_EXCEPTION =
+      new RuntimeException("mymessage");
+  private static final Future<String> FAILED_FUTURE_UNCHECKED_EXCEPTION =
+      immediateFailedFuture(UNCHECKED_EXCEPTION);
+  private static final RuntimeException RUNTIME_EXCEPTION =
+      new RuntimeException();
+  private static final OtherThrowable OTHER_THROWABLE = new OtherThrowable();
+  private static final Future<String> FAILED_FUTURE_OTHER_THROWABLE =
+      immediateFailedFuture(OTHER_THROWABLE);
+  private static final Error ERROR = new Error("mymessage");
+  private static final Future<String> FAILED_FUTURE_ERROR;
+  /*
+   * We can't write "= immediateFailedFuture(ERROR)" because setException
+   * rethrows the error....
+   */
+  static {
+    SettableFuture<String> f = SettableFuture.create();
+    try {
+      f.setException(ERROR);
+    } catch (Error e) {
+      assertEquals(e, ERROR);
+    }
+    FAILED_FUTURE_ERROR = f;
+  }
+  private static final Future<String> RUNTIME_EXCEPTION_FUTURE =
+      new SimpleForwardingFuture<String>(FAILED_FUTURE_CHECKED_EXCEPTION) {
+        @Override public String get() {
+          throw RUNTIME_EXCEPTION;
+        }
+
+        @Override public String get(long timeout, TimeUnit unit) {
+          throw RUNTIME_EXCEPTION;
+        }
+      };
+
+  // Boring untimed-get tests:
+
+  public void testGetUntimed_success()
+      throws TwoArgConstructorException {
+    assertEquals("foo",
+        get(immediateFuture("foo"), TwoArgConstructorException.class));
+  }
+
+  public void testGetUntimed_interrupted() {
+    Thread.currentThread().interrupt();
+    try {
+      get(immediateFuture("foo"), TwoArgConstructorException.class);
+      fail();
+    } catch (TwoArgConstructorException expected) {
+      assertTrue(expected.getCause() instanceof InterruptedException);
+      assertTrue(Thread.currentThread().isInterrupted());
+    } finally {
+      Thread.interrupted();
+    }
+  }
+
+  public void testGetUntimed_cancelled()
+      throws TwoArgConstructorException {
+    SettableFuture<String> future = SettableFuture.create();
+    future.cancel(true);
+    try {
+      get(future, TwoArgConstructorException.class);
+      fail();
+    } catch (CancellationException expected) {
+    }
+  }
+
+  public void testGetUntimed_ExecutionExceptionChecked() {
+    try {
+      get(FAILED_FUTURE_CHECKED_EXCEPTION, TwoArgConstructorException.class);
+      fail();
+    } catch (TwoArgConstructorException expected) {
+      assertEquals(CHECKED_EXCEPTION, expected.getCause());
+    }
+  }
+
+  public void testGetUntimed_ExecutionExceptionUnchecked()
+      throws TwoArgConstructorException {
+    try {
+      get(FAILED_FUTURE_UNCHECKED_EXCEPTION, TwoArgConstructorException.class);
+      fail();
+    } catch (UncheckedExecutionException expected) {
+      assertEquals(UNCHECKED_EXCEPTION, expected.getCause());
+    }
+  }
+
+  public void testGetUntimed_ExecutionExceptionError()
+      throws TwoArgConstructorException {
+    try {
+      get(FAILED_FUTURE_ERROR, TwoArgConstructorException.class);
+      fail();
+    } catch (ExecutionError expected) {
+      assertEquals(ERROR, expected.getCause());
+    }
+  }
+
+  public void testGetUntimed_ExecutionExceptionOtherThrowable() {
+    try {
+      get(FAILED_FUTURE_OTHER_THROWABLE, TwoArgConstructorException.class);
+      fail();
+    } catch (TwoArgConstructorException expected) {
+      assertEquals(OTHER_THROWABLE, expected.getCause());
+    }
+  }
+
+  public void testGetUntimed_RuntimeException()
+      throws TwoArgConstructorException {
+    try {
+      get(RUNTIME_EXCEPTION_FUTURE, TwoArgConstructorException.class);
+      fail();
+    } catch (RuntimeException expected) {
+      assertEquals(RUNTIME_EXCEPTION, expected);
+    }
+  }
+
+  // Boring timed-get tests:
+
+  public void testGetTimed_success()
+      throws TwoArgConstructorException {
+    assertEquals("foo", get(
+        immediateFuture("foo"), 0, SECONDS, TwoArgConstructorException.class));
+  }
+
+  public void testGetTimed_interrupted() {
+    Thread.currentThread().interrupt();
+    try {
+      get(immediateFuture("foo"), 0, SECONDS, TwoArgConstructorException.class);
+      fail();
+    } catch (TwoArgConstructorException expected) {
+      assertTrue(expected.getCause() instanceof InterruptedException);
+      assertTrue(Thread.currentThread().isInterrupted());
+    } finally {
+      Thread.interrupted();
+    }
+  }
+
+  public void testGetTimed_cancelled()
+      throws TwoArgConstructorException {
+    SettableFuture<String> future = SettableFuture.create();
+    future.cancel(true);
+    try {
+      get(future, 0, SECONDS, TwoArgConstructorException.class);
+      fail();
+    } catch (CancellationException expected) {
+    }
+  }
+
+  public void testGetTimed_ExecutionExceptionChecked() {
+    try {
+      get(FAILED_FUTURE_CHECKED_EXCEPTION, 0, SECONDS,
+          TwoArgConstructorException.class);
+      fail();
+    } catch (TwoArgConstructorException expected) {
+      assertEquals(CHECKED_EXCEPTION, expected.getCause());
+    }
+  }
+
+  public void testGetTimed_ExecutionExceptionUnchecked()
+      throws TwoArgConstructorException {
+    try {
+      get(FAILED_FUTURE_UNCHECKED_EXCEPTION, 0, SECONDS,
+          TwoArgConstructorException.class);
+      fail();
+    } catch (UncheckedExecutionException expected) {
+      assertEquals(UNCHECKED_EXCEPTION, expected.getCause());
+    }
+  }
+
+  public void testGetTimed_ExecutionExceptionError()
+      throws TwoArgConstructorException {
+    try {
+      get(FAILED_FUTURE_ERROR, 0, SECONDS, TwoArgConstructorException.class);
+      fail();
+    } catch (ExecutionError expected) {
+      assertEquals(ERROR, expected.getCause());
+    }
+  }
+
+  public void testGetTimed_ExecutionExceptionOtherThrowable() {
+    try {
+      get(FAILED_FUTURE_OTHER_THROWABLE, 0, SECONDS,
+          TwoArgConstructorException.class);
+      fail();
+    } catch (TwoArgConstructorException expected) {
+      assertEquals(OTHER_THROWABLE, expected.getCause());
+    }
+  }
+
+  public void testGetTimed_RuntimeException()
+      throws TwoArgConstructorException {
+    try {
+      get(RUNTIME_EXCEPTION_FUTURE, 0, SECONDS,
+          TwoArgConstructorException.class);
+      fail();
+    } catch (RuntimeException expected) {
+      assertEquals(RUNTIME_EXCEPTION, expected);
+    }
+  }
+
+  public void testGetTimed_TimeoutException() {
+    SettableFuture<String> future = SettableFuture.create();
+    try {
+      get(future, 0, SECONDS, TwoArgConstructorException.class);
+      fail();
+    } catch (TwoArgConstructorException expected) {
+      assertTrue(expected.getCause() instanceof TimeoutException);
+    }
+  }
+
+  // Boring getUnchecked tests:
+
+  public void testGetUnchecked_success() {
+    assertEquals("foo", getUnchecked(immediateFuture("foo")));
+  }
+
+  public void testGetUnchecked_interrupted() {
+    Thread.currentThread().interrupt();
+    try {
+      assertEquals("foo", getUnchecked(immediateFuture("foo")));
+      assertTrue(Thread.currentThread().isInterrupted());
+    } finally {
+      Thread.interrupted();
+    }
+  }
+
+  public void testGetUnchecked_cancelled() {
+    SettableFuture<String> future = SettableFuture.create();
+    future.cancel(true);
+    try {
+      getUnchecked(future);
+      fail();
+    } catch (CancellationException expected) {
+    }
+  }
+
+  public void testGetUnchecked_ExecutionExceptionChecked() {
+    try {
+      getUnchecked(FAILED_FUTURE_CHECKED_EXCEPTION);
+      fail();
+    } catch (UncheckedExecutionException expected) {
+      assertEquals(CHECKED_EXCEPTION, expected.getCause());
+    }
+  }
+
+  public void testGetUnchecked_ExecutionExceptionUnchecked() {
+    try {
+      getUnchecked(FAILED_FUTURE_UNCHECKED_EXCEPTION);
+      fail();
+    } catch (UncheckedExecutionException expected) {
+      assertEquals(UNCHECKED_EXCEPTION, expected.getCause());
+    }
+  }
+
+  public void testGetUnchecked_ExecutionExceptionError() {
+    try {
+      getUnchecked(FAILED_FUTURE_ERROR);
+      fail();
+    } catch (ExecutionError expected) {
+      assertEquals(ERROR, expected.getCause());
+    }
+  }
+
+  public void testGetUnchecked_ExecutionExceptionOtherThrowable() {
+    try {
+      getUnchecked(FAILED_FUTURE_OTHER_THROWABLE);
+      fail();
+    } catch (UncheckedExecutionException expected) {
+      assertEquals(OTHER_THROWABLE, expected.getCause());
+    }
+  }
+
+  public void testGetUnchecked_RuntimeException() {
+    try {
+      getUnchecked(RUNTIME_EXCEPTION_FUTURE);
+      fail();
+    } catch (RuntimeException expected) {
+      assertEquals(RUNTIME_EXCEPTION, expected);
+    }
+  }
+
+  // Edge case tests of the exception-construction code through untimed get():
+
+  public void testGetUntimed_exceptionClassIsRuntimeException() {
+    try {
+      get(FAILED_FUTURE_CHECKED_EXCEPTION,
+          TwoArgConstructorRuntimeException.class);
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  public void testGetUntimed_exceptionClassSomePublicConstructors() {
+    try {
+      get(FAILED_FUTURE_CHECKED_EXCEPTION,
+          ExceptionWithSomePrivateConstructors.class);
+      fail();
+    } catch (ExceptionWithSomePrivateConstructors expected) {
+    }
+  }
+
+  public void testGetUntimed_exceptionClassNoPublicConstructor()
+      throws ExceptionWithPrivateConstructor {
+    try {
+      get(FAILED_FUTURE_CHECKED_EXCEPTION,
+          ExceptionWithPrivateConstructor.class);
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  public void testGetUntimed_exceptionClassPublicConstructorWrongType()
+      throws ExceptionWithWrongTypesConstructor {
+    try {
+      get(FAILED_FUTURE_CHECKED_EXCEPTION,
+          ExceptionWithWrongTypesConstructor.class);
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  public void testGetUntimed_exceptionClassPrefersStringConstructor() {
+    try {
+      get(FAILED_FUTURE_CHECKED_EXCEPTION,
+          ExceptionWithManyConstructors.class);
+      fail();
+    } catch (ExceptionWithManyConstructors expected) {
+      assertTrue(expected.usedExpectedConstructor);
+    }
+  }
+
+  public void testGetUntimed_exceptionClassUsedInitCause() {
+    try {
+      get(FAILED_FUTURE_CHECKED_EXCEPTION,
+          ExceptionWithoutThrowableConstructor.class);
+      fail();
+    } catch (ExceptionWithoutThrowableConstructor expected) {
+      ASSERT.that(expected.getMessage()).contains("mymessage");
+      assertEquals(CHECKED_EXCEPTION, expected.getCause());
+    }
+  }
+
+  public static final class TwoArgConstructorException extends Exception {
+    public TwoArgConstructorException(String message, Throwable cause) {
+      super(message, cause);
+    }
+  }
+
+  public static final class TwoArgConstructorRuntimeException
+      extends RuntimeException {
+    public TwoArgConstructorRuntimeException(String message, Throwable cause) {
+      super(message, cause);
+    }
+  }
+
+  public static final class ExceptionWithPrivateConstructor extends Exception {
+    private ExceptionWithPrivateConstructor(String message, Throwable cause) {
+      super(message, cause);
+    }
+  }
+
+  @SuppressWarnings("unused") // we're testing that they're not used
+  public static final class ExceptionWithSomePrivateConstructors
+      extends Exception {
+    private ExceptionWithSomePrivateConstructors(String a) {
+    }
+
+    private ExceptionWithSomePrivateConstructors(String a, String b) {
+    }
+
+    public ExceptionWithSomePrivateConstructors(
+        String a, String b, String c) {
+    }
+
+    private ExceptionWithSomePrivateConstructors(
+        String a, String b, String c, String d) {
+    }
+
+    private ExceptionWithSomePrivateConstructors(
+        String a, String b, String c, String d, String e) {
+    }
+  }
+
+  public static final class ExceptionWithManyConstructors extends Exception {
+    boolean usedExpectedConstructor;
+
+    public ExceptionWithManyConstructors() {
+    }
+
+    public ExceptionWithManyConstructors(Integer i) {
+    }
+
+    public ExceptionWithManyConstructors(Throwable a) {
+    }
+
+    public ExceptionWithManyConstructors(Throwable a, Throwable b) {
+    }
+
+    public ExceptionWithManyConstructors(String s, Throwable b) {
+      usedExpectedConstructor = true;
+    }
+
+    public ExceptionWithManyConstructors(
+        Throwable a, Throwable b, Throwable c) {
+    }
+
+    public ExceptionWithManyConstructors(
+        Throwable a, Throwable b, Throwable c, Throwable d) {
+    }
+
+    public ExceptionWithManyConstructors(
+        Throwable a, Throwable b, Throwable c, Throwable d, Throwable e) {
+    }
+
+    public ExceptionWithManyConstructors(Throwable a, Throwable b, Throwable c,
+        Throwable d, Throwable e, String s, Integer i) {
+    }
+  }
+
+  public static final class ExceptionWithoutThrowableConstructor
+      extends Exception {
+    public ExceptionWithoutThrowableConstructor(String s) {
+      super(s);
+    }
+  }
+
+  public static final class ExceptionWithWrongTypesConstructor
+      extends Exception {
+    public ExceptionWithWrongTypesConstructor(Integer i, String s) {
+      super(s);
+    }
+  }
+
+  public void testNullArguments() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.setDefault(ListenableFuture.class, Futures.immediateFuture(DATA1));
+    tester.setDefault(ListenableFuture[].class,
+        new ListenableFuture[] {Futures.immediateFuture(DATA1)});
+    tester.setDefault(Future.class, Futures.immediateFuture(DATA1));
+    tester.setDefault(Executor.class, MoreExecutors.sameThreadExecutor());
+    tester.setDefault(Callable.class, Callables.returning(null));
+    tester.setDefault(AsyncFunction.class, new AsyncFunction() {
+      @Override
+      public ListenableFuture apply(Object input) throws Exception {
+        return immediateFuture(DATA1);
+      }
+    });
+
+    FutureCallback<Object> callback =
+        new FutureCallback<Object>() {
+          @Override
+          public void onSuccess(Object result) {}
+          @Override
+          public void onFailure(Throwable t) {}
+        };
+    tester.setDefault(FutureCallback.class, callback);
+
+    tester.testAllPublicStaticMethods(Futures.class);
+  }
+
+  private static void failWithCause(Throwable cause, String message) {
+    AssertionFailedError failure = new AssertionFailedError(message);
+    failure.initCause(cause);
+    throw failure;
+  }
+}
diff --git a/guava-tests/test/com/google/common/util/concurrent/FuturesTransformAsyncFunctionTest.java b/guava-tests/test/com/google/common/util/concurrent/FuturesTransformAsyncFunctionTest.java
new file mode 100644
index 0000000..4b51bed
--- /dev/null
+++ b/guava-tests/test/com/google/common/util/concurrent/FuturesTransformAsyncFunctionTest.java
@@ -0,0 +1,187 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import static com.google.common.util.concurrent.Uninterruptibles.awaitUninterruptibly;
+
+import com.google.common.util.concurrent.ForwardingListenableFuture.SimpleForwardingListenableFuture;
+
+import java.lang.reflect.UndeclaredThrowableException;
+import java.util.concurrent.CancellationException;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutionException;
+
+/**
+ * Unit tests for {@link Futures#transform(ListenableFuture, AsyncFunction)}.
+ *
+ * @author Nishant Thakkar
+ */
+public class FuturesTransformAsyncFunctionTest
+    extends AbstractChainedListenableFutureTest<String> {
+  protected static final int SLOW_OUTPUT_VALID_INPUT_DATA = 2;
+  protected static final int SLOW_FUNC_VALID_INPUT_DATA = 3;
+  private static final String RESULT_DATA = "SUCCESS";
+
+  private SettableFuture<String> outputFuture;
+  // Signals that the function is waiting to complete
+  private CountDownLatch funcIsWaitingLatch;
+  // Signals the function so it will complete
+  private CountDownLatch funcCompletionLatch;
+
+  @Override protected ListenableFuture<String> buildChainingFuture(
+      ListenableFuture<Integer> inputFuture) {
+    outputFuture = SettableFuture.create();
+    funcIsWaitingLatch = new CountDownLatch(1);
+    funcCompletionLatch = new CountDownLatch(1);
+    return Futures.transform(inputFuture, new ChainingFunction());
+  }
+
+  @Override protected String getSuccessfulResult() {
+    return RESULT_DATA;
+  }
+
+  private class ChainingFunction implements AsyncFunction<Integer, String> {
+    @Override
+    public ListenableFuture<String> apply(Integer input) {
+      switch (input) {
+        case VALID_INPUT_DATA: outputFuture.set(RESULT_DATA); break;
+        case SLOW_OUTPUT_VALID_INPUT_DATA: break;  // do nothing to the result
+        case SLOW_FUNC_VALID_INPUT_DATA:
+          funcIsWaitingLatch.countDown();
+          awaitUninterruptibly(funcCompletionLatch);
+          break;
+        default: throw new UndeclaredThrowableException(EXCEPTION);
+      }
+      return outputFuture;
+    }
+  }
+
+  public void testFutureGetThrowsFunctionException() throws Exception {
+    inputFuture.set(EXCEPTION_DATA);
+    listener.assertException(EXCEPTION);
+  }
+
+  public void testFutureGetThrowsCancellationIfInputCancelled()
+      throws Exception {
+    inputFuture.cancel(true); // argument is ignored
+    try {
+      resultFuture.get();
+      fail("Result future must throw CancellationException"
+          + " if input future is cancelled.");
+    } catch (CancellationException expected) {}
+  }
+
+  public void testFutureGetThrowsCancellationIfOutputCancelled()
+      throws Exception {
+    inputFuture.set(SLOW_OUTPUT_VALID_INPUT_DATA);
+    outputFuture.cancel(true); // argument is ignored
+    try {
+      resultFuture.get();
+      fail("Result future must throw CancellationException"
+          + " if function output future is cancelled.");
+    } catch (CancellationException expected) {}
+  }
+
+  public void testFutureCancelBeforeInputCompletion() throws Exception {
+    assertTrue(resultFuture.cancel(true));
+    assertTrue(resultFuture.isCancelled());
+    assertTrue(inputFuture.isCancelled());
+    assertFalse(outputFuture.isCancelled());
+    try {
+      resultFuture.get();
+      fail("Result future is cancelled and should have thrown a"
+          + " CancellationException");
+    } catch (CancellationException expected) {}
+  }
+
+  public void testFutureCancellableBeforeOutputCompletion() throws Exception {
+    inputFuture.set(SLOW_OUTPUT_VALID_INPUT_DATA);
+    assertTrue(resultFuture.cancel(true));
+    assertTrue(resultFuture.isCancelled());
+    assertFalse(inputFuture.isCancelled());
+    assertTrue(outputFuture.isCancelled());
+    try {
+      resultFuture.get();
+      fail("Result future is cancelled and should have thrown a"
+          + " CancellationException");
+    } catch (CancellationException expected) {}
+  }
+
+  public void testFutureCancellableBeforeFunctionCompletion() throws Exception {
+    // Set the result in a separate thread since this test runs the function
+    // (which will block) in the same thread.
+    new Thread() {
+      @Override
+      public void run() {
+        inputFuture.set(SLOW_FUNC_VALID_INPUT_DATA);
+      }
+    }.start();
+    funcIsWaitingLatch.await();
+
+    assertTrue(resultFuture.cancel(true));
+    assertTrue(resultFuture.isCancelled());
+    assertFalse(inputFuture.isCancelled());
+    assertFalse(outputFuture.isCancelled());
+    try {
+      resultFuture.get();
+      fail("Result future is cancelled and should have thrown a"
+          + " CancellationException");
+    } catch (CancellationException expected) {}
+
+    funcCompletionLatch.countDown();  // allow the function to complete
+    try {
+      outputFuture.get();
+      fail("The function output future is cancelled and should have thrown a"
+          + " CancellationException");
+    } catch (CancellationException expected) {}
+  }
+
+  public void testFutureCancelAfterCompletion() throws Exception {
+    inputFuture.set(VALID_INPUT_DATA);
+    assertFalse(resultFuture.cancel(true));
+    assertFalse(resultFuture.isCancelled());
+    assertFalse(inputFuture.isCancelled());
+    assertFalse(outputFuture.isCancelled());
+    assertEquals(RESULT_DATA, resultFuture.get());
+  }
+
+  public void testFutureGetThrowsRuntimeException() throws Exception {
+    BadFuture badInput = new BadFuture(Futures.immediateFuture(20));
+    ListenableFuture<String> chain = buildChainingFuture(badInput);
+    try {
+      chain.get();
+      fail("Future.get must throw an exception when the input future fails.");
+    } catch (ExecutionException e) {
+      assertSame(RuntimeException.class, e.getCause().getClass());
+    }
+  }
+
+  /**
+   * Proxy to throw a {@link RuntimeException} out of the {@link #get()} method.
+   */
+  public static class BadFuture
+      extends SimpleForwardingListenableFuture<Integer> {
+    protected BadFuture(ListenableFuture<Integer> delegate) {
+      super(delegate);
+    }
+
+    @Override
+    public Integer get() {
+      throw new RuntimeException("Oops");
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/util/concurrent/FuturesTransformTest.java b/guava-tests/test/com/google/common/util/concurrent/FuturesTransformTest.java
new file mode 100644
index 0000000..64b50ec
--- /dev/null
+++ b/guava-tests/test/com/google/common/util/concurrent/FuturesTransformTest.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import com.google.common.base.Function;
+
+import java.lang.reflect.UndeclaredThrowableException;
+
+/**
+ * Unit tests for {@link Futures#transform(ListenableFuture, Function)}.
+ *
+ * @author Nishant Thakkar
+ */
+public class FuturesTransformTest
+    extends AbstractChainedListenableFutureTest<String> {
+  private static final String RESULT_DATA = "SUCCESS";
+
+  @Override protected ListenableFuture<String> buildChainingFuture(
+      ListenableFuture<Integer> inputFuture) {
+    return Futures.transform(inputFuture,
+        new ComposeFunction());
+  }
+
+  @Override protected String getSuccessfulResult() {
+    return RESULT_DATA;
+  }
+
+  private class ComposeFunction
+      implements Function<Integer, String> {
+    @Override
+    public String apply(Integer input) {
+      if (input.intValue() == VALID_INPUT_DATA) {
+        return RESULT_DATA;
+      } else {
+        throw new UndeclaredThrowableException(EXCEPTION);
+      }
+    }
+  }
+
+  public void testFutureGetThrowsFunctionException() throws Exception {
+    inputFuture.set(EXCEPTION_DATA);
+    listener.assertException(EXCEPTION);
+  }
+}
diff --git a/guava-tests/test/com/google/common/util/concurrent/InterruptionUtil.java b/guava-tests/test/com/google/common/util/concurrent/InterruptionUtil.java
new file mode 100644
index 0000000..e610b20
--- /dev/null
+++ b/guava-tests/test/com/google/common/util/concurrent/InterruptionUtil.java
@@ -0,0 +1,140 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import static java.util.concurrent.TimeUnit.MILLISECONDS;
+import static java.util.concurrent.TimeUnit.NANOSECONDS;
+import static junit.framework.Assert.fail;
+
+import com.google.common.testing.TearDown;
+import com.google.common.testing.TearDownAccepter;
+
+import java.util.concurrent.TimeUnit;
+import java.util.logging.Logger;
+
+/**
+ * Utilities for performing thread interruption in tests
+ * 
+ * @author Kevin Bourrillion
+ * @author Chris Povirk
+ */
+final class InterruptionUtil {
+  private static final Logger logger =
+      Logger.getLogger(InterruptionUtil.class.getName());
+
+  /**
+   * Runnable which will interrupt the target thread repeatedly when run.
+   */
+  private static final class Interruptenator implements Runnable {
+    private final long everyMillis;
+    private final Thread interruptee;
+    private volatile boolean shouldStop = false;
+
+    Interruptenator(Thread interruptee, long everyMillis) {
+      this.everyMillis = everyMillis;
+      this.interruptee = interruptee;
+    }
+
+    @Override
+    public void run() {
+      while (true) {
+        try {
+          Thread.sleep(everyMillis);
+        } catch (InterruptedException e) {
+          // ok. just stop sleeping.
+        }
+        if (shouldStop) {
+          break;
+        }
+        interruptee.interrupt();
+      }
+    }
+
+    void stopInterrupting() {
+      shouldStop = true;
+    }
+  }
+
+  /**
+   * Interrupts the current thread after sleeping for the specified delay.
+   */
+  static void requestInterruptIn(final long time, final TimeUnit unit) {
+    final Thread interruptee = Thread.currentThread();
+    new Thread(new Runnable() {
+      @Override
+      public void run() {
+        try {
+          unit.sleep(time);
+        } catch (InterruptedException wontHappen) {
+          throw new AssertionError(wontHappen);
+        }
+        interruptee.interrupt();
+      }
+    }).start();
+  }
+
+  static void repeatedlyInterruptTestThread(
+      long interruptPeriodMillis, TearDownAccepter tearDownAccepter) {
+    final Interruptenator interruptingTask =
+        new Interruptenator(Thread.currentThread(), interruptPeriodMillis);
+    final Thread interruptingThread = new Thread(interruptingTask);
+    interruptingThread.start();
+    tearDownAccepter.addTearDown(new TearDown() {
+      @Override public void tearDown() throws Exception {
+        interruptingTask.stopInterrupting();
+        interruptingThread.interrupt();
+        joinUninterruptibly(interruptingThread, 2500, MILLISECONDS);
+        Thread.interrupted();
+        if (interruptingThread.isAlive()) {
+          // This will be hidden by test-output redirection:
+          logger.severe(
+              "InterruptenatorTask did not exit; future tests may be affected");
+          /*
+           * This won't do any good under JUnit 3, but I'll leave it around in
+           * case we ever switch to JUnit 4:
+           */
+          fail();
+        }
+      }
+    });
+  }
+
+  // TODO(cpovirk): promote to Uninterruptibles, and add untimed version
+  private static void joinUninterruptibly(
+      Thread thread, long timeout, TimeUnit unit) {
+    boolean interrupted = false;
+    try {
+      long remainingNanos = unit.toNanos(timeout);
+      long end = System.nanoTime() + remainingNanos;
+
+      while (true) {
+        try {
+          // TimeUnit.timedJoin() treats negative timeouts just like zero.
+          NANOSECONDS.timedJoin(thread, remainingNanos);
+          return;
+        } catch (InterruptedException e) {
+          interrupted = true;
+          remainingNanos = end - System.nanoTime();
+        }
+      }
+    } finally {
+      if (interrupted) {
+        Thread.currentThread().interrupt();
+      }
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/util/concurrent/JSR166TestCase.java b/guava-tests/test/com/google/common/util/concurrent/JSR166TestCase.java
new file mode 100644
index 0000000..80b9599
--- /dev/null
+++ b/guava-tests/test/com/google/common/util/concurrent/JSR166TestCase.java
@@ -0,0 +1,1229 @@
+/*
+ * Written by Doug Lea with assistance from members of JCP JSR-166
+ * Expert Group and released to the public domain, as explained at
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ * Other contributors include Andrew Wright, Jeffrey Hayes,
+ * Pat Fisher, Mike Judd.
+ */
+
+/*
+ * Source:
+ * http://gee.cs.oswego.edu/cgi-bin/viewcvs.cgi/jsr166/src/test/tck/JSR166TestCase.java?revision=1.90
+ * (We have made some trivial local modifications (commented out
+ * uncompilable code).)
+ */
+
+package com.google.common.util.concurrent;
+
+import junit.framework.*;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.NoSuchElementException;
+import java.util.PropertyPermission;
+import java.util.concurrent.*;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicReference;
+import static java.util.concurrent.TimeUnit.MILLISECONDS;
+import static java.util.concurrent.TimeUnit.NANOSECONDS;
+import java.security.CodeSource;
+import java.security.Permission;
+import java.security.PermissionCollection;
+import java.security.Permissions;
+import java.security.Policy;
+import java.security.ProtectionDomain;
+import java.security.SecurityPermission;
+
+/**
+ * Base class for JSR166 Junit TCK tests.  Defines some constants,
+ * utility methods and classes, as well as a simple framework for
+ * helping to make sure that assertions failing in generated threads
+ * cause the associated test that generated them to itself fail (which
+ * JUnit does not otherwise arrange).  The rules for creating such
+ * tests are:
+ *
+ * <ol>
+ *
+ * <li> All assertions in code running in generated threads must use
+ * the forms {@link #threadFail}, {@link #threadAssertTrue}, {@link
+ * #threadAssertEquals}, or {@link #threadAssertNull}, (not
+ * {@code fail}, {@code assertTrue}, etc.) It is OK (but not
+ * particularly recommended) for other code to use these forms too.
+ * Only the most typically used JUnit assertion methods are defined
+ * this way, but enough to live with.</li>
+ *
+ * <li> If you override {@link #setUp} or {@link #tearDown}, make sure
+ * to invoke {@code super.setUp} and {@code super.tearDown} within
+ * them. These methods are used to clear and check for thread
+ * assertion failures.</li>
+ *
+ * <li>All delays and timeouts must use one of the constants {@code
+ * SHORT_DELAY_MS}, {@code SMALL_DELAY_MS}, {@code MEDIUM_DELAY_MS},
+ * {@code LONG_DELAY_MS}. The idea here is that a SHORT is always
+ * discriminable from zero time, and always allows enough time for the
+ * small amounts of computation (creating a thread, calling a few
+ * methods, etc) needed to reach a timeout point. Similarly, a SMALL
+ * is always discriminable as larger than SHORT and smaller than
+ * MEDIUM.  And so on. These constants are set to conservative values,
+ * but even so, if there is ever any doubt, they can all be increased
+ * in one spot to rerun tests on slower platforms.</li>
+ *
+ * <li> All threads generated must be joined inside each test case
+ * method (or {@code fail} to do so) before returning from the
+ * method. The {@code joinPool} method can be used to do this when
+ * using Executors.</li>
+ *
+ * </ol>
+ *
+ * <p> <b>Other notes</b>
+ * <ul>
+ *
+ * <li> Usually, there is one testcase method per JSR166 method
+ * covering "normal" operation, and then as many exception-testing
+ * methods as there are exceptions the method can throw. Sometimes
+ * there are multiple tests per JSR166 method when the different
+ * "normal" behaviors differ significantly. And sometimes testcases
+ * cover multiple methods when they cannot be tested in
+ * isolation.</li>
+ *
+ * <li> The documentation style for testcases is to provide as javadoc
+ * a simple sentence or two describing the property that the testcase
+ * method purports to test. The javadocs do not say anything about how
+ * the property is tested. To find out, read the code.</li>
+ *
+ * <li> These tests are "conformance tests", and do not attempt to
+ * test throughput, latency, scalability or other performance factors
+ * (see the separate "jtreg" tests for a set intended to check these
+ * for the most central aspects of functionality.) So, most tests use
+ * the smallest sensible numbers of threads, collection sizes, etc
+ * needed to check basic conformance.</li>
+ *
+ * <li>The test classes currently do not declare inclusion in
+ * any particular package to simplify things for people integrating
+ * them in TCK test suites.</li>
+ *
+ * <li> As a convenience, the {@code main} of this class (JSR166TestCase)
+ * runs all JSR166 unit tests.</li>
+ *
+ * </ul>
+ */
+abstract class JSR166TestCase extends TestCase {
+    private static final boolean useSecurityManager =
+        Boolean.getBoolean("jsr166.useSecurityManager");
+
+    protected static final boolean expensiveTests =
+        Boolean.getBoolean("jsr166.expensiveTests");
+
+    /**
+     * If true, report on stdout all "slow" tests, that is, ones that
+     * take more than profileThreshold milliseconds to execute.
+     */
+    private static final boolean profileTests =
+        Boolean.getBoolean("jsr166.profileTests");
+
+    /**
+     * The number of milliseconds that tests are permitted for
+     * execution without being reported, when profileTests is set.
+     */
+    private static final long profileThreshold =
+        Long.getLong("jsr166.profileThreshold", 100);
+
+    protected void runTest() throws Throwable {
+        if (profileTests)
+            runTestProfiled();
+        else
+            super.runTest();
+    }
+
+    protected void runTestProfiled() throws Throwable {
+        long t0 = System.nanoTime();
+        try {
+            super.runTest();
+        } finally {
+            long elapsedMillis =
+                (System.nanoTime() - t0) / (1000L * 1000L);
+            if (elapsedMillis >= profileThreshold)
+                System.out.printf("%n%s: %d%n", toString(), elapsedMillis);
+        }
+    }
+
+//     /**
+//      * Runs all JSR166 unit tests using junit.textui.TestRunner
+//      */
+//     public static void main(String[] args) {
+//         if (useSecurityManager) {
+//             System.err.println("Setting a permissive security manager");
+//             Policy.setPolicy(permissivePolicy());
+//             System.setSecurityManager(new SecurityManager());
+//         }
+//         int iters = (args.length == 0) ? 1 : Integer.parseInt(args[0]);
+
+//         Test s = suite();
+//         for (int i = 0; i < iters; ++i) {
+//             junit.textui.TestRunner.run(s);
+//             System.gc();
+//             System.runFinalization();
+//         }
+//         System.exit(0);
+//     }
+
+//     public static TestSuite newTestSuite(Object... suiteOrClasses) {
+//         TestSuite suite = new TestSuite();
+//         for (Object suiteOrClass : suiteOrClasses) {
+//             if (suiteOrClass instanceof TestSuite)
+//                 suite.addTest((TestSuite) suiteOrClass);
+//             else if (suiteOrClass instanceof Class)
+//                 suite.addTest(new TestSuite((Class<?>) suiteOrClass));
+//             else
+//                 throw new ClassCastException("not a test suite or class");
+//         }
+//         return suite;
+//     }
+
+//     /**
+//      * Collects all JSR166 unit tests as one suite.
+//      */
+//     public static Test suite() {
+//         return newTestSuite(
+//             ForkJoinPoolTest.suite(),
+//             ForkJoinTaskTest.suite(),
+//             RecursiveActionTest.suite(),
+//             RecursiveTaskTest.suite(),
+//             LinkedTransferQueueTest.suite(),
+//             PhaserTest.suite(),
+//             ThreadLocalRandomTest.suite(),
+//             AbstractExecutorServiceTest.suite(),
+//             AbstractQueueTest.suite(),
+//             AbstractQueuedSynchronizerTest.suite(),
+//             AbstractQueuedLongSynchronizerTest.suite(),
+//             ArrayBlockingQueueTest.suite(),
+//             ArrayDequeTest.suite(),
+//             AtomicBooleanTest.suite(),
+//             AtomicIntegerArrayTest.suite(),
+//             AtomicIntegerFieldUpdaterTest.suite(),
+//             AtomicIntegerTest.suite(),
+//             AtomicLongArrayTest.suite(),
+//             AtomicLongFieldUpdaterTest.suite(),
+//             AtomicLongTest.suite(),
+//             AtomicMarkableReferenceTest.suite(),
+//             AtomicReferenceArrayTest.suite(),
+//             AtomicReferenceFieldUpdaterTest.suite(),
+//             AtomicReferenceTest.suite(),
+//             AtomicStampedReferenceTest.suite(),
+//             ConcurrentHashMapTest.suite(),
+//             ConcurrentLinkedDequeTest.suite(),
+//             ConcurrentLinkedQueueTest.suite(),
+//             ConcurrentSkipListMapTest.suite(),
+//             ConcurrentSkipListSubMapTest.suite(),
+//             ConcurrentSkipListSetTest.suite(),
+//             ConcurrentSkipListSubSetTest.suite(),
+//             CopyOnWriteArrayListTest.suite(),
+//             CopyOnWriteArraySetTest.suite(),
+//             CountDownLatchTest.suite(),
+//             CyclicBarrierTest.suite(),
+//             DelayQueueTest.suite(),
+//             EntryTest.suite(),
+//             ExchangerTest.suite(),
+//             ExecutorsTest.suite(),
+//             ExecutorCompletionServiceTest.suite(),
+//             FutureTaskTest.suite(),
+//             LinkedBlockingDequeTest.suite(),
+//             LinkedBlockingQueueTest.suite(),
+//             LinkedListTest.suite(),
+//             LockSupportTest.suite(),
+//             PriorityBlockingQueueTest.suite(),
+//             PriorityQueueTest.suite(),
+//             ReentrantLockTest.suite(),
+//             ReentrantReadWriteLockTest.suite(),
+//             ScheduledExecutorTest.suite(),
+//             ScheduledExecutorSubclassTest.suite(),
+//             SemaphoreTest.suite(),
+//             SynchronousQueueTest.suite(),
+//             SystemTest.suite(),
+//             ThreadLocalTest.suite(),
+//             ThreadPoolExecutorTest.suite(),
+//             ThreadPoolExecutorSubclassTest.suite(),
+//             ThreadTest.suite(),
+//             TimeUnitTest.suite(),
+//             TreeMapTest.suite(),
+//             TreeSetTest.suite(),
+//             TreeSubMapTest.suite(),
+//             TreeSubSetTest.suite());
+//     }
+
+    public static long SHORT_DELAY_MS;
+    public static long SMALL_DELAY_MS;
+    public static long MEDIUM_DELAY_MS;
+    public static long LONG_DELAY_MS;
+
+    /**
+     * Returns the shortest timed delay. This could
+     * be reimplemented to use for example a Property.
+     */
+    protected long getShortDelay() {
+        return 50;
+    }
+
+    /**
+     * Sets delays as multiples of SHORT_DELAY.
+     */
+    protected void setDelays() {
+        SHORT_DELAY_MS = getShortDelay();
+        SMALL_DELAY_MS  = SHORT_DELAY_MS * 5;
+        MEDIUM_DELAY_MS = SHORT_DELAY_MS * 10;
+        LONG_DELAY_MS   = SHORT_DELAY_MS * 200;
+    }
+
+    /**
+     * Returns a timeout in milliseconds to be used in tests that
+     * verify that operations block or time out.
+     */
+    long timeoutMillis() {
+        return SHORT_DELAY_MS / 4;
+    }
+
+    /**
+     * Returns a new Date instance representing a time delayMillis
+     * milliseconds in the future.
+     */
+    Date delayedDate(long delayMillis) {
+        return new Date(System.currentTimeMillis() + delayMillis);
+    }
+
+    /**
+     * The first exception encountered if any threadAssertXXX method fails.
+     */
+    private final AtomicReference<Throwable> threadFailure
+        = new AtomicReference<Throwable>(null);
+
+    /**
+     * Records an exception so that it can be rethrown later in the test
+     * harness thread, triggering a test case failure.  Only the first
+     * failure is recorded; subsequent calls to this method from within
+     * the same test have no effect.
+     */
+    public void threadRecordFailure(Throwable t) {
+        threadFailure.compareAndSet(null, t);
+    }
+
+    public void setUp() {
+        setDelays();
+    }
+
+    /**
+     * Extra checks that get done for all test cases.
+     *
+     * Triggers test case failure if any thread assertions have failed,
+     * by rethrowing, in the test harness thread, any exception recorded
+     * earlier by threadRecordFailure.
+     *
+     * Triggers test case failure if interrupt status is set in the main thread.
+     */
+    public void tearDown() throws Exception {
+        Throwable t = threadFailure.getAndSet(null);
+        if (t != null) {
+            if (t instanceof Error)
+                throw (Error) t;
+            else if (t instanceof RuntimeException)
+                throw (RuntimeException) t;
+            else if (t instanceof Exception)
+                throw (Exception) t;
+            else {
+                AssertionFailedError afe =
+                    new AssertionFailedError(t.toString());
+                afe.initCause(t);
+                throw afe;
+            }
+        }
+
+        if (Thread.interrupted())
+            throw new AssertionFailedError("interrupt status set in main thread");
+    }
+
+    /**
+     * Just like fail(reason), but additionally recording (using
+     * threadRecordFailure) any AssertionFailedError thrown, so that
+     * the current testcase will fail.
+     */
+    public void threadFail(String reason) {
+        try {
+            fail(reason);
+        } catch (AssertionFailedError t) {
+            threadRecordFailure(t);
+            fail(reason);
+        }
+    }
+
+    /**
+     * Just like assertTrue(b), but additionally recording (using
+     * threadRecordFailure) any AssertionFailedError thrown, so that
+     * the current testcase will fail.
+     */
+    public void threadAssertTrue(boolean b) {
+        try {
+            assertTrue(b);
+        } catch (AssertionFailedError t) {
+            threadRecordFailure(t);
+            throw t;
+        }
+    }
+
+    /**
+     * Just like assertFalse(b), but additionally recording (using
+     * threadRecordFailure) any AssertionFailedError thrown, so that
+     * the current testcase will fail.
+     */
+    public void threadAssertFalse(boolean b) {
+        try {
+            assertFalse(b);
+        } catch (AssertionFailedError t) {
+            threadRecordFailure(t);
+            throw t;
+        }
+    }
+
+    /**
+     * Just like assertNull(x), but additionally recording (using
+     * threadRecordFailure) any AssertionFailedError thrown, so that
+     * the current testcase will fail.
+     */
+    public void threadAssertNull(Object x) {
+        try {
+            assertNull(x);
+        } catch (AssertionFailedError t) {
+            threadRecordFailure(t);
+            throw t;
+        }
+    }
+
+    /**
+     * Just like assertEquals(x, y), but additionally recording (using
+     * threadRecordFailure) any AssertionFailedError thrown, so that
+     * the current testcase will fail.
+     */
+    public void threadAssertEquals(long x, long y) {
+        try {
+            assertEquals(x, y);
+        } catch (AssertionFailedError t) {
+            threadRecordFailure(t);
+            throw t;
+        }
+    }
+
+    /**
+     * Just like assertEquals(x, y), but additionally recording (using
+     * threadRecordFailure) any AssertionFailedError thrown, so that
+     * the current testcase will fail.
+     */
+    public void threadAssertEquals(Object x, Object y) {
+        try {
+            assertEquals(x, y);
+        } catch (AssertionFailedError t) {
+            threadRecordFailure(t);
+            throw t;
+        } catch (Throwable t) {
+            threadUnexpectedException(t);
+        }
+    }
+
+    /**
+     * Just like assertSame(x, y), but additionally recording (using
+     * threadRecordFailure) any AssertionFailedError thrown, so that
+     * the current testcase will fail.
+     */
+    public void threadAssertSame(Object x, Object y) {
+        try {
+            assertSame(x, y);
+        } catch (AssertionFailedError t) {
+            threadRecordFailure(t);
+            throw t;
+        }
+    }
+
+    /**
+     * Calls threadFail with message "should throw exception".
+     */
+    public void threadShouldThrow() {
+        threadFail("should throw exception");
+    }
+
+    /**
+     * Calls threadFail with message "should throw" + exceptionName.
+     */
+    public void threadShouldThrow(String exceptionName) {
+        threadFail("should throw " + exceptionName);
+    }
+
+    /**
+     * Records the given exception using {@link #threadRecordFailure},
+     * then rethrows the exception, wrapping it in an
+     * AssertionFailedError if necessary.
+     */
+    public void threadUnexpectedException(Throwable t) {
+        threadRecordFailure(t);
+        t.printStackTrace();
+        if (t instanceof RuntimeException)
+            throw (RuntimeException) t;
+        else if (t instanceof Error)
+            throw (Error) t;
+        else {
+            AssertionFailedError afe =
+                new AssertionFailedError("unexpected exception: " + t);
+            afe.initCause(t);
+            throw afe;
+        }
+    }
+
+    /**
+     * Delays, via Thread.sleep, for the given millisecond delay, but
+     * if the sleep is shorter than specified, may re-sleep or yield
+     * until time elapses.
+     */
+    static void delay(long millis) throws InterruptedException {
+        long startTime = System.nanoTime();
+        long ns = millis * 1000 * 1000;
+        for (;;) {
+            if (millis > 0L)
+                Thread.sleep(millis);
+            else // too short to sleep
+                Thread.yield();
+            long d = ns - (System.nanoTime() - startTime);
+            if (d > 0L)
+                millis = d / (1000 * 1000);
+            else
+                break;
+        }
+    }
+
+    /**
+     * Waits out termination of a thread pool or fails doing so.
+     */
+    void joinPool(ExecutorService exec) {
+        try {
+            exec.shutdown();
+            assertTrue("ExecutorService did not terminate in a timely manner",
+                       exec.awaitTermination(2 * LONG_DELAY_MS, MILLISECONDS));
+        } catch (SecurityException ok) {
+            // Allowed in case test doesn't have privs
+        } catch (InterruptedException ie) {
+            fail("Unexpected InterruptedException");
+        }
+    }
+
+    /**
+     * Checks that thread does not terminate within the default
+     * millisecond delay of {@code timeoutMillis()}.
+     */
+    void assertThreadStaysAlive(Thread thread) {
+        assertThreadStaysAlive(thread, timeoutMillis());
+    }
+
+    /**
+     * Checks that thread does not terminate within the given millisecond delay.
+     */
+    void assertThreadStaysAlive(Thread thread, long millis) {
+        try {
+            // No need to optimize the failing case via Thread.join.
+            delay(millis);
+            assertTrue(thread.isAlive());
+        } catch (InterruptedException ie) {
+            fail("Unexpected InterruptedException");
+        }
+    }
+
+    /**
+     * Checks that the threads do not terminate within the default
+     * millisecond delay of {@code timeoutMillis()}.
+     */
+    void assertThreadsStayAlive(Thread... threads) {
+        assertThreadsStayAlive(timeoutMillis(), threads);
+    }
+
+    /**
+     * Checks that the threads do not terminate within the given millisecond delay.
+     */
+    void assertThreadsStayAlive(long millis, Thread... threads) {
+        try {
+            // No need to optimize the failing case via Thread.join.
+            delay(millis);
+            for (Thread thread : threads)
+                assertTrue(thread.isAlive());
+        } catch (InterruptedException ie) {
+            fail("Unexpected InterruptedException");
+        }
+    }
+
+    /**
+     * Checks that future.get times out, with the default timeout of
+     * {@code timeoutMillis()}.
+     */
+    void assertFutureTimesOut(Future future) {
+        assertFutureTimesOut(future, timeoutMillis());
+    }
+
+    /**
+     * Checks that future.get times out, with the given millisecond timeout.
+     */
+    void assertFutureTimesOut(Future future, long timeoutMillis) {
+        long startTime = System.nanoTime();
+        try {
+            future.get(timeoutMillis, MILLISECONDS);
+            shouldThrow();
+        } catch (TimeoutException success) {
+        } catch (Exception e) {
+            threadUnexpectedException(e);
+        } finally { future.cancel(true); }
+        assertTrue(millisElapsedSince(startTime) >= timeoutMillis);
+    }
+
+    /**
+     * Fails with message "should throw exception".
+     */
+    public void shouldThrow() {
+        fail("Should throw exception");
+    }
+
+    /**
+     * Fails with message "should throw " + exceptionName.
+     */
+    public void shouldThrow(String exceptionName) {
+        fail("Should throw " + exceptionName);
+    }
+
+    /**
+     * The number of elements to place in collections, arrays, etc.
+     */
+    public static final int SIZE = 20;
+
+    // Some convenient Integer constants
+
+    public static final Integer zero  = new Integer(0);
+    public static final Integer one   = new Integer(1);
+    public static final Integer two   = new Integer(2);
+    public static final Integer three = new Integer(3);
+    public static final Integer four  = new Integer(4);
+    public static final Integer five  = new Integer(5);
+    public static final Integer six   = new Integer(6);
+    public static final Integer seven = new Integer(7);
+    public static final Integer eight = new Integer(8);
+    public static final Integer nine  = new Integer(9);
+    public static final Integer m1  = new Integer(-1);
+    public static final Integer m2  = new Integer(-2);
+    public static final Integer m3  = new Integer(-3);
+    public static final Integer m4  = new Integer(-4);
+    public static final Integer m5  = new Integer(-5);
+    public static final Integer m6  = new Integer(-6);
+    public static final Integer m10 = new Integer(-10);
+
+    /**
+     * Runs Runnable r with a security policy that permits precisely
+     * the specified permissions.  If there is no current security
+     * manager, the runnable is run twice, both with and without a
+     * security manager.  We require that any security manager permit
+     * getPolicy/setPolicy.
+     */
+    public void runWithPermissions(Runnable r, Permission... permissions) {
+        SecurityManager sm = System.getSecurityManager();
+        if (sm == null) {
+            r.run();
+            Policy savedPolicy = Policy.getPolicy();
+            try {
+                Policy.setPolicy(permissivePolicy());
+                System.setSecurityManager(new SecurityManager());
+                runWithPermissions(r, permissions);
+            } finally {
+                System.setSecurityManager(null);
+                Policy.setPolicy(savedPolicy);
+            }
+        } else {
+            Policy savedPolicy = Policy.getPolicy();
+            AdjustablePolicy policy = new AdjustablePolicy(permissions);
+            Policy.setPolicy(policy);
+
+            try {
+                r.run();
+            } finally {
+                policy.addPermission(new SecurityPermission("setPolicy"));
+                Policy.setPolicy(savedPolicy);
+            }
+        }
+    }
+
+    /**
+     * Runs a runnable without any permissions.
+     */
+    public void runWithoutPermissions(Runnable r) {
+        runWithPermissions(r);
+    }
+
+    /**
+     * A security policy where new permissions can be dynamically added
+     * or all cleared.
+     */
+    public static class AdjustablePolicy extends java.security.Policy {
+        Permissions perms = new Permissions();
+        AdjustablePolicy(Permission... permissions) {
+            for (Permission permission : permissions)
+                perms.add(permission);
+        }
+        void addPermission(Permission perm) { perms.add(perm); }
+        void clearPermissions() { perms = new Permissions(); }
+        public PermissionCollection getPermissions(CodeSource cs) {
+            return perms;
+        }
+        public PermissionCollection getPermissions(ProtectionDomain pd) {
+            return perms;
+        }
+        public boolean implies(ProtectionDomain pd, Permission p) {
+            return perms.implies(p);
+        }
+        public void refresh() {}
+    }
+
+    /**
+     * Returns a policy containing all the permissions we ever need.
+     */
+    public static Policy permissivePolicy() {
+        return new AdjustablePolicy
+            // Permissions j.u.c. needs directly
+            (new RuntimePermission("modifyThread"),
+             new RuntimePermission("getClassLoader"),
+             new RuntimePermission("setContextClassLoader"),
+             // Permissions needed to change permissions!
+             new SecurityPermission("getPolicy"),
+             new SecurityPermission("setPolicy"),
+             new RuntimePermission("setSecurityManager"),
+             // Permissions needed by the junit test harness
+             new RuntimePermission("accessDeclaredMembers"),
+             new PropertyPermission("*", "read"),
+             new java.io.FilePermission("<<ALL FILES>>", "read"));
+    }
+
+    /**
+     * Sleeps until the given time has elapsed.
+     * Throws AssertionFailedError if interrupted.
+     */
+    void sleep(long millis) {
+        try {
+            delay(millis);
+        } catch (InterruptedException ie) {
+            AssertionFailedError afe =
+                new AssertionFailedError("Unexpected InterruptedException");
+            afe.initCause(ie);
+            throw afe;
+        }
+    }
+
+    /**
+     * Spin-waits up to the specified number of milliseconds for the given
+     * thread to enter a wait state: BLOCKED, WAITING, or TIMED_WAITING.
+     */
+    void waitForThreadToEnterWaitState(Thread thread, long timeoutMillis) {
+        long startTime = System.nanoTime();
+        for (;;) {
+            Thread.State s = thread.getState();
+            if (s == Thread.State.BLOCKED ||
+                s == Thread.State.WAITING ||
+                s == Thread.State.TIMED_WAITING)
+                return;
+            else if (s == Thread.State.TERMINATED)
+                fail("Unexpected thread termination");
+            else if (millisElapsedSince(startTime) > timeoutMillis) {
+                threadAssertTrue(thread.isAlive());
+                return;
+            }
+            Thread.yield();
+        }
+    }
+
+    /**
+     * Waits up to LONG_DELAY_MS for the given thread to enter a wait
+     * state: BLOCKED, WAITING, or TIMED_WAITING.
+     */
+    void waitForThreadToEnterWaitState(Thread thread) {
+        waitForThreadToEnterWaitState(thread, LONG_DELAY_MS);
+    }
+
+    /**
+     * Returns the number of milliseconds since time given by
+     * startNanoTime, which must have been previously returned from a
+     * call to {@link System.nanoTime()}.
+     */
+    long millisElapsedSince(long startNanoTime) {
+        return NANOSECONDS.toMillis(System.nanoTime() - startNanoTime);
+    }
+
+    /**
+     * Returns a new started daemon Thread running the given runnable.
+     */
+    Thread newStartedThread(Runnable runnable) {
+        Thread t = new Thread(runnable);
+        t.setDaemon(true);
+        t.start();
+        return t;
+    }
+
+    /**
+     * Waits for the specified time (in milliseconds) for the thread
+     * to terminate (using {@link Thread#join(long)}), else interrupts
+     * the thread (in the hope that it may terminate later) and fails.
+     */
+    void awaitTermination(Thread t, long timeoutMillis) {
+        try {
+            t.join(timeoutMillis);
+        } catch (InterruptedException ie) {
+            threadUnexpectedException(ie);
+        } finally {
+            if (t.getState() != Thread.State.TERMINATED) {
+                t.interrupt();
+                fail("Test timed out");
+            }
+        }
+    }
+
+    /**
+     * Waits for LONG_DELAY_MS milliseconds for the thread to
+     * terminate (using {@link Thread#join(long)}), else interrupts
+     * the thread (in the hope that it may terminate later) and fails.
+     */
+    void awaitTermination(Thread t) {
+        awaitTermination(t, LONG_DELAY_MS);
+    }
+
+    // Some convenient Runnable classes
+
+    public abstract class CheckedRunnable implements Runnable {
+        protected abstract void realRun() throws Throwable;
+
+        public final void run() {
+            try {
+                realRun();
+            } catch (Throwable t) {
+                threadUnexpectedException(t);
+            }
+        }
+    }
+
+    public abstract class RunnableShouldThrow implements Runnable {
+        protected abstract void realRun() throws Throwable;
+
+        final Class<?> exceptionClass;
+
+        <T extends Throwable> RunnableShouldThrow(Class<T> exceptionClass) {
+            this.exceptionClass = exceptionClass;
+        }
+
+        public final void run() {
+            try {
+                realRun();
+                threadShouldThrow(exceptionClass.getSimpleName());
+            } catch (Throwable t) {
+                if (! exceptionClass.isInstance(t))
+                    threadUnexpectedException(t);
+            }
+        }
+    }
+
+    public abstract class ThreadShouldThrow extends Thread {
+        protected abstract void realRun() throws Throwable;
+
+        final Class<?> exceptionClass;
+
+        <T extends Throwable> ThreadShouldThrow(Class<T> exceptionClass) {
+            this.exceptionClass = exceptionClass;
+        }
+
+        public final void run() {
+            try {
+                realRun();
+                threadShouldThrow(exceptionClass.getSimpleName());
+            } catch (Throwable t) {
+                if (! exceptionClass.isInstance(t))
+                    threadUnexpectedException(t);
+            }
+        }
+    }
+
+    public abstract class CheckedInterruptedRunnable implements Runnable {
+        protected abstract void realRun() throws Throwable;
+
+        public final void run() {
+            try {
+                realRun();
+                threadShouldThrow("InterruptedException");
+            } catch (InterruptedException success) {
+                threadAssertFalse(Thread.interrupted());
+            } catch (Throwable t) {
+                threadUnexpectedException(t);
+            }
+        }
+    }
+
+    public abstract class CheckedCallable<T> implements Callable<T> {
+        protected abstract T realCall() throws Throwable;
+
+        public final T call() {
+            try {
+                return realCall();
+            } catch (Throwable t) {
+                threadUnexpectedException(t);
+                return null;
+            }
+        }
+    }
+
+    public abstract class CheckedInterruptedCallable<T>
+        implements Callable<T> {
+        protected abstract T realCall() throws Throwable;
+
+        public final T call() {
+            try {
+                T result = realCall();
+                threadShouldThrow("InterruptedException");
+                return result;
+            } catch (InterruptedException success) {
+                threadAssertFalse(Thread.interrupted());
+            } catch (Throwable t) {
+                threadUnexpectedException(t);
+            }
+            return null;
+        }
+    }
+
+    public static class NoOpRunnable implements Runnable {
+        public void run() {}
+    }
+
+    public static class NoOpCallable implements Callable {
+        public Object call() { return Boolean.TRUE; }
+    }
+
+    public static final String TEST_STRING = "a test string";
+
+    public static class StringTask implements Callable<String> {
+        public String call() { return TEST_STRING; }
+    }
+
+    public Callable<String> latchAwaitingStringTask(final CountDownLatch latch) {
+        return new CheckedCallable<String>() {
+            protected String realCall() {
+                try {
+                    latch.await();
+                } catch (InterruptedException quittingTime) {}
+                return TEST_STRING;
+            }};
+    }
+
+    public Runnable awaiter(final CountDownLatch latch) {
+        return new CheckedRunnable() {
+            public void realRun() throws InterruptedException {
+                await(latch);
+            }};
+    }
+
+    public void await(CountDownLatch latch) {
+        try {
+            assertTrue(latch.await(LONG_DELAY_MS, MILLISECONDS));
+        } catch (Throwable t) {
+            threadUnexpectedException(t);
+        }
+    }
+
+    public void await(Semaphore semaphore) {
+        try {
+            assertTrue(semaphore.tryAcquire(LONG_DELAY_MS, MILLISECONDS));
+        } catch (Throwable t) {
+            threadUnexpectedException(t);
+        }
+    }
+
+//     /**
+//      * Spin-waits up to LONG_DELAY_MS until flag becomes true.
+//      */
+//     public void await(AtomicBoolean flag) {
+//         await(flag, LONG_DELAY_MS);
+//     }
+
+//     /**
+//      * Spin-waits up to the specified timeout until flag becomes true.
+//      */
+//     public void await(AtomicBoolean flag, long timeoutMillis) {
+//         long startTime = System.nanoTime();
+//         while (!flag.get()) {
+//             if (millisElapsedSince(startTime) > timeoutMillis)
+//                 throw new AssertionFailedError("timed out");
+//             Thread.yield();
+//         }
+//     }
+
+    public static class NPETask implements Callable<String> {
+        public String call() { throw new NullPointerException(); }
+    }
+
+    public static class CallableOne implements Callable<Integer> {
+        public Integer call() { return one; }
+    }
+
+    public class ShortRunnable extends CheckedRunnable {
+        protected void realRun() throws Throwable {
+            delay(SHORT_DELAY_MS);
+        }
+    }
+
+    public class ShortInterruptedRunnable extends CheckedInterruptedRunnable {
+        protected void realRun() throws InterruptedException {
+            delay(SHORT_DELAY_MS);
+        }
+    }
+
+    public class SmallRunnable extends CheckedRunnable {
+        protected void realRun() throws Throwable {
+            delay(SMALL_DELAY_MS);
+        }
+    }
+
+    public class SmallPossiblyInterruptedRunnable extends CheckedRunnable {
+        protected void realRun() {
+            try {
+                delay(SMALL_DELAY_MS);
+            } catch (InterruptedException ok) {}
+        }
+    }
+
+    public class SmallCallable extends CheckedCallable {
+        protected Object realCall() throws InterruptedException {
+            delay(SMALL_DELAY_MS);
+            return Boolean.TRUE;
+        }
+    }
+
+    public class MediumRunnable extends CheckedRunnable {
+        protected void realRun() throws Throwable {
+            delay(MEDIUM_DELAY_MS);
+        }
+    }
+
+    public class MediumInterruptedRunnable extends CheckedInterruptedRunnable {
+        protected void realRun() throws InterruptedException {
+            delay(MEDIUM_DELAY_MS);
+        }
+    }
+
+    public Runnable possiblyInterruptedRunnable(final long timeoutMillis) {
+        return new CheckedRunnable() {
+            protected void realRun() {
+                try {
+                    delay(timeoutMillis);
+                } catch (InterruptedException ok) {}
+            }};
+    }
+
+    public class MediumPossiblyInterruptedRunnable extends CheckedRunnable {
+        protected void realRun() {
+            try {
+                delay(MEDIUM_DELAY_MS);
+            } catch (InterruptedException ok) {}
+        }
+    }
+
+    public class LongPossiblyInterruptedRunnable extends CheckedRunnable {
+        protected void realRun() {
+            try {
+                delay(LONG_DELAY_MS);
+            } catch (InterruptedException ok) {}
+        }
+    }
+
+    /**
+     * For use as ThreadFactory in constructors
+     */
+    public static class SimpleThreadFactory implements ThreadFactory {
+        public Thread newThread(Runnable r) {
+            return new Thread(r);
+        }
+    }
+
+    public interface TrackedRunnable extends Runnable {
+        boolean isDone();
+    }
+
+    public static TrackedRunnable trackedRunnable(final long timeoutMillis) {
+        return new TrackedRunnable() {
+                private volatile boolean done = false;
+                public boolean isDone() { return done; }
+                public void run() {
+                    try {
+                        delay(timeoutMillis);
+                        done = true;
+                    } catch (InterruptedException ok) {}
+                }
+            };
+    }
+
+    public static class TrackedShortRunnable implements Runnable {
+        public volatile boolean done = false;
+        public void run() {
+            try {
+                delay(SHORT_DELAY_MS);
+                done = true;
+            } catch (InterruptedException ok) {}
+        }
+    }
+
+    public static class TrackedSmallRunnable implements Runnable {
+        public volatile boolean done = false;
+        public void run() {
+            try {
+                delay(SMALL_DELAY_MS);
+                done = true;
+            } catch (InterruptedException ok) {}
+        }
+    }
+
+    public static class TrackedMediumRunnable implements Runnable {
+        public volatile boolean done = false;
+        public void run() {
+            try {
+                delay(MEDIUM_DELAY_MS);
+                done = true;
+            } catch (InterruptedException ok) {}
+        }
+    }
+
+    public static class TrackedLongRunnable implements Runnable {
+        public volatile boolean done = false;
+        public void run() {
+            try {
+                delay(LONG_DELAY_MS);
+                done = true;
+            } catch (InterruptedException ok) {}
+        }
+    }
+
+    public static class TrackedNoOpRunnable implements Runnable {
+        public volatile boolean done = false;
+        public void run() {
+            done = true;
+        }
+    }
+
+    public static class TrackedCallable implements Callable {
+        public volatile boolean done = false;
+        public Object call() {
+            try {
+                delay(SMALL_DELAY_MS);
+                done = true;
+            } catch (InterruptedException ok) {}
+            return Boolean.TRUE;
+        }
+    }
+
+//     /**
+//      * Analog of CheckedRunnable for RecursiveAction
+//      */
+//     public abstract class CheckedRecursiveAction extends RecursiveAction {
+//         protected abstract void realCompute() throws Throwable;
+
+//         public final void compute() {
+//             try {
+//                 realCompute();
+//             } catch (Throwable t) {
+//                 threadUnexpectedException(t);
+//             }
+//         }
+//     }
+
+//     /**
+//      * Analog of CheckedCallable for RecursiveTask
+//      */
+//     public abstract class CheckedRecursiveTask<T> extends RecursiveTask<T> {
+//         protected abstract T realCompute() throws Throwable;
+
+//         public final T compute() {
+//             try {
+//                 return realCompute();
+//             } catch (Throwable t) {
+//                 threadUnexpectedException(t);
+//                 return null;
+//             }
+//         }
+//     }
+
+    /**
+     * For use as RejectedExecutionHandler in constructors
+     */
+    public static class NoOpREHandler implements RejectedExecutionHandler {
+        public void rejectedExecution(Runnable r,
+                                      ThreadPoolExecutor executor) {}
+    }
+
+    /**
+     * A CyclicBarrier that uses timed await and fails with
+     * AssertionFailedErrors instead of throwing checked exceptions.
+     */
+    public class CheckedBarrier extends CyclicBarrier {
+        public CheckedBarrier(int parties) { super(parties); }
+
+        public int await() {
+            try {
+                return super.await(2 * LONG_DELAY_MS, MILLISECONDS);
+            } catch (TimeoutException e) {
+                throw new AssertionFailedError("timed out");
+            } catch (Exception e) {
+                AssertionFailedError afe =
+                    new AssertionFailedError("Unexpected exception: " + e);
+                afe.initCause(e);
+                throw afe;
+            }
+        }
+    }
+
+    void checkEmpty(BlockingQueue q) {
+        try {
+            assertTrue(q.isEmpty());
+            assertEquals(0, q.size());
+            assertNull(q.peek());
+            assertNull(q.poll());
+            assertNull(q.poll(0, MILLISECONDS));
+            assertEquals(q.toString(), "[]");
+            assertTrue(Arrays.equals(q.toArray(), new Object[0]));
+            assertFalse(q.iterator().hasNext());
+            try {
+                q.element();
+                shouldThrow();
+            } catch (NoSuchElementException success) {}
+            try {
+                q.iterator().next();
+                shouldThrow();
+            } catch (NoSuchElementException success) {}
+            try {
+                q.remove();
+                shouldThrow();
+            } catch (NoSuchElementException success) {}
+        } catch (InterruptedException ie) {
+            threadUnexpectedException(ie);
+        }
+    }
+
+    @SuppressWarnings("unchecked")
+    <T> T serialClone(T o) {
+        try {
+            ByteArrayOutputStream bos = new ByteArrayOutputStream();
+            ObjectOutputStream oos = new ObjectOutputStream(bos);
+            oos.writeObject(o);
+            oos.flush();
+            oos.close();
+            ObjectInputStream ois = new ObjectInputStream
+                (new ByteArrayInputStream(bos.toByteArray()));
+            T clone = (T) ois.readObject();
+            assertSame(o.getClass(), clone.getClass());
+            return clone;
+        } catch (Throwable t) {
+            threadUnexpectedException(t);
+            return null;
+        }
+    }
+}
diff --git a/guava-tests/test/com/google/common/util/concurrent/JdkFutureAdaptersTest.java b/guava-tests/test/com/google/common/util/concurrent/JdkFutureAdaptersTest.java
new file mode 100644
index 0000000..298733f
--- /dev/null
+++ b/guava-tests/test/com/google/common/util/concurrent/JdkFutureAdaptersTest.java
@@ -0,0 +1,214 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import static com.google.common.base.Preconditions.checkState;
+import static com.google.common.util.concurrent.Futures.immediateFuture;
+import static com.google.common.util.concurrent.JdkFutureAdapters.listenInPoolThread;
+import static com.google.common.util.concurrent.MoreExecutors.sameThreadExecutor;
+import static java.util.concurrent.Executors.newCachedThreadPool;
+import static java.util.concurrent.TimeUnit.SECONDS;
+
+import com.google.common.testing.NullPointerTester;
+import com.google.common.util.concurrent.FuturesTest.ExecutorSpy;
+import com.google.common.util.concurrent.FuturesTest.SingleCallListener;
+
+import junit.framework.AssertionFailedError;
+import junit.framework.TestCase;
+
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Unit tests for {@link JdkFutureAdapters}.
+ *
+ * @author Sven Mawson
+ * @author Kurt Alfred Kluever
+ */
+public class JdkFutureAdaptersTest extends TestCase {
+  private static final String DATA1 = "data";
+
+  public void testListenInPoolThreadReturnsSameFuture() throws Exception {
+    ListenableFuture<String> listenableFuture = immediateFuture(DATA1);
+    assertSame(listenableFuture, listenInPoolThread(listenableFuture));
+  }
+
+  public void testListenInPoolThreadIgnoresExecutorWhenDelegateIsDone()
+      throws Exception {
+    NonListenableSettableFuture<String> abstractFuture =
+        NonListenableSettableFuture.create();
+    abstractFuture.set(DATA1);
+    ExecutorSpy spy = new ExecutorSpy(sameThreadExecutor());
+    ListenableFuture<String> listenableFuture =
+        listenInPoolThread(abstractFuture, spy);
+
+    SingleCallListener singleCallListener = new SingleCallListener();
+    singleCallListener.expectCall();
+
+    assertFalse(spy.wasExecuted);
+    assertFalse(singleCallListener.wasCalled());
+    assertTrue(listenableFuture.isDone()); // We call AbstractFuture#set above.
+
+    // #addListener() will run the listener immediately because the Future is
+    // already finished (we explicitly set the result of it above).
+    listenableFuture.addListener(singleCallListener, sameThreadExecutor());
+    assertEquals(DATA1, listenableFuture.get());
+
+    // 'spy' should have been ignored since 'abstractFuture' was done before
+    // a listener was added.
+    assertFalse(spy.wasExecuted);
+    assertTrue(singleCallListener.wasCalled());
+    assertTrue(listenableFuture.isDone());
+  }
+
+  public void testListenInPoolThreadUsesGivenExecutor() throws Exception {
+    ExecutorService executorService = newCachedThreadPool(
+        new ThreadFactoryBuilder().setDaemon(true).build());
+    NonListenableSettableFuture<String> abstractFuture =
+        NonListenableSettableFuture.create();
+    ExecutorSpy spy = new ExecutorSpy(executorService);
+    ListenableFuture<String> listenableFuture =
+        listenInPoolThread(abstractFuture, spy);
+
+    SingleCallListener singleCallListener = new SingleCallListener();
+    singleCallListener.expectCall();
+
+    assertFalse(spy.wasExecuted);
+    assertFalse(singleCallListener.wasCalled());
+    assertFalse(listenableFuture.isDone());
+
+    listenableFuture.addListener(singleCallListener, executorService);
+    abstractFuture.set(DATA1);
+    assertEquals(DATA1, listenableFuture.get());
+    singleCallListener.waitForCall();
+
+    assertTrue(spy.wasExecuted);
+    assertTrue(singleCallListener.wasCalled());
+    assertTrue(listenableFuture.isDone());
+  }
+
+  /**
+   * A Future that doesn't implement ListenableFuture, useful for testing
+   * listenInPoolThread.
+   */
+  private static final class NonListenableSettableFuture<V>
+      extends ForwardingFuture<V> {
+    static <V> NonListenableSettableFuture<V> create() {
+      return new NonListenableSettableFuture<V>();
+    }
+
+    final SettableFuture<V> delegate = SettableFuture.create();
+
+    @Override protected Future<V> delegate() {
+      return delegate;
+    }
+
+    void set(V value) {
+      delegate.set(value);
+    }
+  }
+
+  private static final class RuntimeExceptionThrowingFuture<V>
+      implements Future<V> {
+    final CountDownLatch allowGetToComplete = new CountDownLatch(1);
+
+    @Override
+    public boolean cancel(boolean mayInterruptIfRunning) {
+      throw new AssertionFailedError();
+    }
+
+    @Override
+    public V get() throws InterruptedException {
+      /*
+       * Wait a little to give us time to call addListener before the future's
+       * value is set in addition to the call we'll make after then.
+       */
+      allowGetToComplete.await(1, SECONDS);
+      throw new RuntimeException("expected, should be caught");
+    }
+
+    @Override
+    public V get(long timeout, TimeUnit unit) {
+      throw new AssertionFailedError();
+    }
+
+    @Override
+    public boolean isCancelled() {
+      throw new AssertionFailedError();
+    }
+
+    @Override
+    public boolean isDone() {
+      /*
+       * If isDone is true during the call to listenInPoolThread,
+       * listenInPoolThread doesn't start a thread. Make sure it's false the
+       * first time through (and forever after, since no one else cares about
+       * it).
+       */
+      return false;
+    }
+  }
+
+  private static final class RecordingRunnable implements Runnable {
+    final CountDownLatch wasRun = new CountDownLatch(1);
+
+    // synchronized so that checkState works as expected.
+    @Override
+    public synchronized void run() {
+      checkState(wasRun.getCount() > 0);
+      wasRun.countDown();
+    }
+  }
+
+  public void testListenInPoolThreadRunsListenerAfterRuntimeException()
+      throws Exception {
+    RuntimeExceptionThrowingFuture<String> input =
+        new RuntimeExceptionThrowingFuture<String>();
+    /*
+     * The compiler recognizes that "input instanceof ListenableFuture" is
+     * impossible. We want the test, though, in case that changes in the future,
+     * so we use isInstance instead.
+     */
+    assertFalse("Can't test the main listenInPoolThread path "
+        + "if the input is already a ListenableFuture",
+        ListenableFuture.class.isInstance(input));
+    ListenableFuture<String> listenable = listenInPoolThread(input);
+    /*
+     * This will occur before the waiting get() in the
+     * listenInPoolThread-spawned thread completes:
+     */
+    RecordingRunnable earlyListener = new RecordingRunnable();
+    listenable.addListener(earlyListener, sameThreadExecutor());
+
+    input.allowGetToComplete.countDown();
+    // Now give the get() thread time to finish:
+    assertTrue(earlyListener.wasRun.await(1, SECONDS));
+
+    // Now test an additional addListener call, which will be run in-thread:
+    RecordingRunnable lateListener = new RecordingRunnable();
+    listenable.addListener(lateListener, sameThreadExecutor());
+    assertTrue(lateListener.wasRun.await(1, SECONDS));
+  }
+
+  public void testNullArguments() throws Exception {
+    NullPointerTester tester = new NullPointerTester();
+    tester.setDefault(Future.class, immediateFuture(DATA1));
+    tester.testAllPublicStaticMethods(JdkFutureAdapters.class);
+  }
+}
diff --git a/guava-tests/test/com/google/common/util/concurrent/ListenableFutureTaskTest.java b/guava-tests/test/com/google/common/util/concurrent/ListenableFutureTaskTest.java
new file mode 100644
index 0000000..479e569
--- /dev/null
+++ b/guava-tests/test/com/google/common/util/concurrent/ListenableFutureTaskTest.java
@@ -0,0 +1,155 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import junit.framework.TestCase;
+
+import java.util.concurrent.Callable;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Test case for {@link ListenableFutureTask}.
+ *
+ * @author Sven Mawson
+ */
+public class ListenableFutureTaskTest extends TestCase {
+
+  private ExecutorService exec;
+
+  protected final CountDownLatch runLatch = new CountDownLatch(1);
+  protected final CountDownLatch taskLatch = new CountDownLatch(1);
+  protected final CountDownLatch listenerLatch = new CountDownLatch(1);
+
+  protected volatile boolean throwException = false;
+
+  protected final ListenableFutureTask<Integer> task =
+      ListenableFutureTask.create(new Callable<Integer>() {
+    @Override
+    public Integer call() throws Exception {
+      runLatch.countDown();
+      taskLatch.await();
+      if (throwException) {
+        throw new IllegalStateException("Fail");
+      }
+      return 25;
+    }
+  });
+
+  @Override
+  protected void setUp() throws Exception {
+    super.setUp();
+
+    exec = Executors.newCachedThreadPool();
+
+    task.addListener(new Runnable() {
+      @Override
+      public void run() {
+        listenerLatch.countDown();
+      }
+    }, MoreExecutors.sameThreadExecutor());
+  }
+
+  @Override
+  protected void tearDown() throws Exception {
+    if (exec != null) {
+      exec.shutdown();
+    }
+
+    super.tearDown();
+  }
+
+  public void testListenerDoesNotRunUntilTaskCompletes() throws Exception {
+
+    // Test default state of not started.
+    assertEquals(1, listenerLatch.getCount());
+    assertFalse(task.isDone());
+    assertFalse(task.isCancelled());
+
+    // Start the task to put it in the RUNNING state.  Have to use a separate
+    // thread because the task will block on the task latch after unblocking
+    // the run latch.
+    exec.execute(task);
+    runLatch.await();
+    assertEquals(1, listenerLatch.getCount());
+    assertFalse(task.isDone());
+    assertFalse(task.isCancelled());
+
+    // Finish the task by unblocking the task latch.  Then wait for the
+    // listener to be called by blocking on the listener latch.
+    taskLatch.countDown();
+    assertEquals(25, task.get().intValue());
+    assertTrue(listenerLatch.await(5, TimeUnit.SECONDS));
+    assertTrue(task.isDone());
+    assertFalse(task.isCancelled());
+  }
+
+  public void testListenerCalledOnException() throws Exception {
+    throwException = true;
+
+    // Start up the task and unblock the latch to finish the task.
+    exec.execute(task);
+    runLatch.await();
+    taskLatch.countDown();
+
+    try {
+      task.get(5, TimeUnit.SECONDS);
+      fail("Should have propagated the failure.");
+    } catch (ExecutionException e) {
+      assertEquals(IllegalStateException.class, e.getCause().getClass());
+    }
+
+    assertTrue(listenerLatch.await(5, TimeUnit.SECONDS));
+    assertTrue(task.isDone());
+    assertFalse(task.isCancelled());
+  }
+
+  public void testListenerCalledOnCancelFromNotRunning() throws Exception {
+    task.cancel(false);
+    assertTrue(task.isDone());
+    assertTrue(task.isCancelled());
+    assertEquals(1, runLatch.getCount());
+
+    // Wait for the listeners to be called, don't rely on the same-thread exec.
+    listenerLatch.await(5, TimeUnit.SECONDS);
+    assertTrue(task.isDone());
+    assertTrue(task.isCancelled());
+
+    // Make sure we didn't run anything.
+    assertEquals(1, runLatch.getCount());
+  }
+
+  public void testListenerCalledOnCancelFromRunning() throws Exception {
+    exec.execute(task);
+    runLatch.await();
+
+    // Task has started up, cancel it while it's running.
+    task.cancel(true);
+    assertTrue(task.isDone());
+    assertTrue(task.isCancelled());
+    assertEquals(1, taskLatch.getCount());
+
+    // Wait for the listeners to be called.
+    listenerLatch.await(5, TimeUnit.SECONDS);
+    assertTrue(task.isDone());
+    assertTrue(task.isCancelled());
+    assertEquals(1, taskLatch.getCount());
+  }
+}
diff --git a/guava-tests/test/com/google/common/util/concurrent/ListenableFutureTester.java b/guava-tests/test/com/google/common/util/concurrent/ListenableFutureTester.java
new file mode 100644
index 0000000..367b95a
--- /dev/null
+++ b/guava-tests/test/com/google/common/util/concurrent/ListenableFutureTester.java
@@ -0,0 +1,107 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertFalse;
+import static junit.framework.Assert.assertTrue;
+import static junit.framework.Assert.fail;
+
+import java.util.concurrent.CancellationException;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Used to test listenable future implementations.
+ *
+ * @author Sven Mawson
+ */
+public class ListenableFutureTester {
+
+  private final ExecutorService exec;
+  private final ListenableFuture<?> future;
+  private final CountDownLatch latch;
+
+  public ListenableFutureTester(ListenableFuture<?> future) {
+    this.exec = Executors.newCachedThreadPool();
+    this.future = future;
+    this.latch = new CountDownLatch(1);
+  }
+
+  public void setUp() {
+    future.addListener(new Runnable() {
+      @Override public void run() {
+        latch.countDown();
+      }
+    }, exec);
+
+    assertEquals(1, latch.getCount());
+    assertFalse(future.isDone());
+    assertFalse(future.isCancelled());
+  }
+
+  public void tearDown() {
+    exec.shutdown();
+  }
+
+  public void testCompletedFuture(Object expectedValue)
+      throws InterruptedException, ExecutionException {
+    assertTrue(future.isDone());
+    assertFalse(future.isCancelled());
+
+    assertTrue(latch.await(5, TimeUnit.SECONDS));
+    assertTrue(future.isDone());
+    assertFalse(future.isCancelled());
+
+    assertEquals(expectedValue, future.get());
+  }
+
+  public void testCancelledFuture()
+      throws InterruptedException, ExecutionException {
+    assertTrue(future.isDone());
+    assertTrue(future.isCancelled());
+
+    assertTrue(latch.await(5, TimeUnit.SECONDS));
+    assertTrue(future.isDone());
+    assertTrue(future.isCancelled());
+
+    try {
+      future.get();
+      fail("Future should throw CancellationException on cancel.");
+    } catch (CancellationException expected) {}
+  }
+
+  public void testFailedFuture(String message)
+      throws InterruptedException {
+    assertTrue(future.isDone());
+    assertFalse(future.isCancelled());
+
+    assertTrue(latch.await(5, TimeUnit.SECONDS));
+    assertTrue(future.isDone());
+    assertFalse(future.isCancelled());
+
+    try {
+      future.get();
+      fail("Future should rethrow the exception.");
+    } catch (ExecutionException e) {
+      assertEquals(message, e.getCause().getMessage());
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/util/concurrent/MoreExecutorsTest.java b/guava-tests/test/com/google/common/util/concurrent/MoreExecutorsTest.java
new file mode 100644
index 0000000..99a6be3
--- /dev/null
+++ b/guava-tests/test/com/google/common/util/concurrent/MoreExecutorsTest.java
@@ -0,0 +1,239 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import static com.google.common.collect.Iterables.getOnlyElement;
+import static com.google.common.util.concurrent.MoreExecutors.listeningDecorator;
+import static com.google.common.util.concurrent.MoreExecutors.sameThreadExecutor;
+import static java.util.concurrent.TimeUnit.SECONDS;
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import com.google.common.base.Throwables;
+import com.google.common.collect.ImmutableList;
+
+import junit.framework.TestCase;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.concurrent.Callable;
+import java.util.concurrent.CyclicBarrier;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Future;
+import java.util.concurrent.RejectedExecutionException;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicReference;
+
+/**
+ * Tests for MoreExecutors.
+ *
+ * @author Kyle Littlefield (klittle)
+ */
+public class MoreExecutorsTest extends TestCase {
+
+  public void testSameThreadExecutorServiceInThreadExecution()
+      throws Exception {
+    final ListeningExecutorService executor =
+        MoreExecutors.sameThreadExecutor();
+    final ThreadLocal<Integer> threadLocalCount = new ThreadLocal<Integer>() {
+      @Override
+      protected Integer initialValue() {
+        return 0;
+      }
+    };
+    final AtomicReference<Throwable> throwableFromOtherThread =
+        new AtomicReference<Throwable>(null);
+    final Runnable incrementTask =
+        new Runnable() {
+          @Override
+          public void run() {
+            threadLocalCount.set(threadLocalCount.get() + 1);
+          }
+        };
+
+    Thread otherThread = new Thread(
+        new Runnable() {
+          @Override
+          public void run() {
+            try {
+              Future<?> future = executor.submit(incrementTask);
+              assertTrue(future.isDone());
+              assertEquals(1, threadLocalCount.get().intValue());
+            } catch (Throwable Throwable) {
+              throwableFromOtherThread.set(Throwable);
+            }
+          }
+        });
+
+    otherThread.start();
+
+    ListenableFuture<?> future = executor.submit(incrementTask);
+    assertTrue(future.isDone());
+    assertListenerRunImmediately(future);
+    assertEquals(1, threadLocalCount.get().intValue());
+    otherThread.join(1000);
+    assertEquals(Thread.State.TERMINATED, otherThread.getState());
+    Throwable throwable = throwableFromOtherThread.get();
+    assertNull("Throwable from other thread: "
+        + (throwable == null ? null : Throwables.getStackTraceAsString(throwable)),
+        throwableFromOtherThread.get());
+  }
+
+  public void testSameThreadExecutorInvokeAll() throws Exception {
+    final ExecutorService executor = MoreExecutors.sameThreadExecutor();
+    final ThreadLocal<Integer> threadLocalCount = new ThreadLocal<Integer>() {
+      @Override
+      protected Integer initialValue() {
+        return 0;
+      }
+    };
+
+    final Callable<Integer> incrementTask = new Callable<Integer>() {
+      @Override
+      public Integer call() {
+        int i = threadLocalCount.get();
+        threadLocalCount.set(i + 1);
+        return i;
+      }
+    };
+
+    List<Future<Integer>> futures =
+        executor.invokeAll(Collections.nCopies(10, incrementTask));
+
+    for (int i = 0; i < 10; i++) {
+      Future<Integer> future = futures.get(i);
+      assertTrue("Task should have been run before being returned", future.isDone());
+      assertEquals(i, future.get().intValue());
+    }
+
+    assertEquals(10, threadLocalCount.get().intValue());
+  }
+
+  public void testSameThreadExecutorServiceTermination()
+      throws Exception {
+    final ExecutorService executor = MoreExecutors.sameThreadExecutor();
+    final CyclicBarrier barrier = new CyclicBarrier(2);
+    final AtomicReference<Throwable> throwableFromOtherThread =
+        new AtomicReference<Throwable>(null);
+    final Runnable doNothingRunnable = new Runnable() {
+        @Override public void run() {
+        }};
+
+    Thread otherThread = new Thread(new Runnable() {
+      @Override
+      public void run() {
+        try {
+          Future<?> future = executor.submit(new Callable<Void>() {
+            @Override
+            public Void call() throws Exception {
+              // WAIT #1
+              barrier.await(1, TimeUnit.SECONDS);
+
+              // WAIT #2
+              barrier.await(1, TimeUnit.SECONDS);
+              assertTrue(executor.isShutdown());
+              assertFalse(executor.isTerminated());
+
+              // WAIT #3
+              barrier.await(1, TimeUnit.SECONDS);
+              return null;
+            }
+          });
+          assertTrue(future.isDone());
+          assertTrue(executor.isShutdown());
+          assertTrue(executor.isTerminated());
+        } catch (Throwable Throwable) {
+          throwableFromOtherThread.set(Throwable);
+        }
+      }});
+
+    otherThread.start();
+
+    // WAIT #1
+    barrier.await(1, TimeUnit.SECONDS);
+    assertFalse(executor.isShutdown());
+    assertFalse(executor.isTerminated());
+
+    executor.shutdown();
+    assertTrue(executor.isShutdown());
+    try {
+      executor.submit(doNothingRunnable);
+      fail("Should have encountered RejectedExecutionException");
+    } catch (RejectedExecutionException ex) {
+      // good to go
+    }
+    assertFalse(executor.isTerminated());
+
+    // WAIT #2
+    barrier.await(1, TimeUnit.SECONDS);
+    assertFalse(executor.awaitTermination(20, TimeUnit.MILLISECONDS));
+
+    // WAIT #3
+    barrier.await(1, TimeUnit.SECONDS);
+    assertTrue(executor.awaitTermination(1, TimeUnit.SECONDS));
+    assertTrue(executor.awaitTermination(0, TimeUnit.SECONDS));
+    assertTrue(executor.isShutdown());
+    try {
+      executor.submit(doNothingRunnable);
+      fail("Should have encountered RejectedExecutionException");
+    } catch (RejectedExecutionException ex) {
+      // good to go
+    }
+    assertTrue(executor.isTerminated());
+
+    otherThread.join(1000);
+    assertEquals(Thread.State.TERMINATED, otherThread.getState());
+    Throwable throwable = throwableFromOtherThread.get();
+    assertNull("Throwable from other thread: "
+        + (throwable == null ? null : Throwables.getStackTraceAsString(throwable)),
+        throwableFromOtherThread.get());
+  }
+
+  public void testListeningDecorator() throws Exception {
+    ListeningExecutorService service =
+        listeningDecorator(MoreExecutors.sameThreadExecutor());
+    assertSame(service, listeningDecorator(service));
+    List<Callable<String>> callables =
+        ImmutableList.of(Callables.returning("x"));
+    List<Future<String>> results;
+
+    results = service.invokeAll(callables);
+    ASSERT.that(getOnlyElement(results)).isA(ListenableFutureTask.class);
+
+    results = service.invokeAll(callables, 1, SECONDS);
+    ASSERT.that(getOnlyElement(results)).isA(ListenableFutureTask.class);
+
+    /*
+     * TODO(cpovirk): move ForwardingTestCase somewhere common, and use it to
+     * test the forwarded methods
+     */
+  }
+
+  private static void assertListenerRunImmediately(ListenableFuture<?> future) {
+    CountingRunnable listener = new CountingRunnable();
+    future.addListener(listener, sameThreadExecutor());
+    assertEquals(1, listener.count);
+  }
+
+  private static final class CountingRunnable implements Runnable {
+    int count;
+
+    @Override
+    public void run() {
+      count++;
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/util/concurrent/SettableFutureTest.java b/guava-tests/test/com/google/common/util/concurrent/SettableFutureTest.java
new file mode 100644
index 0000000..47f71c0
--- /dev/null
+++ b/guava-tests/test/com/google/common/util/concurrent/SettableFutureTest.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import junit.framework.TestCase;
+
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+
+/**
+ * Test cases for {@link SettableFuture}.
+ *
+ * @author Sven Mawson
+ */
+public class SettableFutureTest extends TestCase {
+
+  private SettableFuture<String> future;
+  private ListenableFutureTester tester;
+
+  @Override
+  protected void setUp() throws Exception {
+    super.setUp();
+
+    future = SettableFuture.create();
+    tester = new ListenableFutureTester(future);
+    tester.setUp();
+  }
+
+  public void testDefaultState() throws Exception {
+    try {
+      future.get(5, TimeUnit.MILLISECONDS);
+      fail();
+    } catch (TimeoutException expected) {}
+  }
+
+  public void testSetValue() throws Exception {
+    assertTrue(future.set("value"));
+    tester.testCompletedFuture("value");
+  }
+
+  public void testSetFailure() throws Exception {
+    assertTrue(future.setException(new Exception("failure")));
+    tester.testFailedFuture("failure");
+  }
+
+  public void testSetFailureNull() throws Exception {
+    try {
+      future.setException(null);
+      fail();
+    } catch (NullPointerException expected) {
+    }
+    assertFalse(future.isDone());
+    assertTrue(future.setException(new Exception("failure")));
+    tester.testFailedFuture("failure");
+  }
+
+  public void testCancel() throws Exception {
+    assertTrue(future.cancel(true));
+    tester.testCancelledFuture();
+  }
+}
diff --git a/guava-tests/test/com/google/common/util/concurrent/SimpleTimeLimiterTest.java b/guava-tests/test/com/google/common/util/concurrent/SimpleTimeLimiterTest.java
new file mode 100644
index 0000000..1db434a
--- /dev/null
+++ b/guava-tests/test/com/google/common/util/concurrent/SimpleTimeLimiterTest.java
@@ -0,0 +1,210 @@
+/*
+ * Copyright (C) 2006 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import junit.framework.TestCase;
+
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Unit test for {@link SimpleTimeLimiter}.
+ *
+ * @author kevinb
+ */
+public class SimpleTimeLimiterTest extends TestCase {
+
+  private static final int DELAY_MS = 50;
+  private static final int ENOUGH_MS = 500;
+  private static final int NOT_ENOUGH_MS = 5;
+
+  private TimeLimiter service;
+
+  private static final ExecutorService executor
+      = Executors.newFixedThreadPool(1);
+
+  private static String someGoodStaticMethod() throws InterruptedException {
+    TimeUnit.MILLISECONDS.sleep(DELAY_MS);
+    return "yes";
+  }
+
+  private static String someBadStaticMethod() throws InterruptedException,
+      SampleException {
+    TimeUnit.MILLISECONDS.sleep(DELAY_MS);
+    throw new SampleException();
+  }
+
+  @Override protected void setUp() throws Exception {
+    super.setUp();
+    service = new SimpleTimeLimiter(executor);
+  }
+
+  public void testGoodCallableWithEnoughTime() throws Exception {
+    long start = System.nanoTime();
+    String result = service.callWithTimeout(
+        new Callable<String>() {
+          @Override
+          public String call() throws InterruptedException {
+            return someGoodStaticMethod();
+          }
+        }, ENOUGH_MS, TimeUnit.MILLISECONDS, true);
+    assertEquals("yes", result);
+    assertTheCallTookBetween(start, DELAY_MS, ENOUGH_MS);
+  }
+
+  public void testGoodCallableWithNotEnoughTime() throws Exception {
+    long start = System.nanoTime();
+    try {
+      service.callWithTimeout(
+          new Callable<String>() {
+            @Override
+            public String call() throws InterruptedException {
+              return someGoodStaticMethod();
+            }
+          }, NOT_ENOUGH_MS, TimeUnit.MILLISECONDS, true);
+      fail("no exception thrown");
+    } catch (UncheckedTimeoutException expected) {
+    }
+    assertTheCallTookBetween(start, NOT_ENOUGH_MS, DELAY_MS);
+  }
+
+  public void testBadCallableWithEnoughTime() throws Exception {
+    long start = System.nanoTime();
+    try {
+      service.callWithTimeout(
+          new Callable<String>() {
+            @Override
+            public String call() throws SampleException, InterruptedException {
+              return someBadStaticMethod();
+            }
+          }, ENOUGH_MS, TimeUnit.MILLISECONDS, true);
+      fail("no exception thrown");
+    } catch (SampleException expected) {
+    }
+    assertTheCallTookBetween(start, DELAY_MS, ENOUGH_MS);
+  }
+
+  public void testBadCallableWithNotEnoughTime() throws Exception {
+    long start = System.nanoTime();
+    try {
+      service.callWithTimeout(
+          new Callable<String>() {
+            @Override
+            public String call() throws SampleException, InterruptedException {
+              return someBadStaticMethod();
+            }
+          }, NOT_ENOUGH_MS, TimeUnit.MILLISECONDS, true);
+      fail("no exception thrown");
+    } catch (UncheckedTimeoutException expected) {
+    }
+    assertTheCallTookBetween(start, NOT_ENOUGH_MS, DELAY_MS);
+  }
+
+  public void testGoodMethodWithEnoughTime() throws Exception {
+    SampleImpl target = new SampleImpl();
+    Sample proxy = service.newProxy(
+        target, Sample.class, ENOUGH_MS, TimeUnit.MILLISECONDS);
+    long start = System.nanoTime();
+    assertEquals("x", proxy.sleepThenReturnInput("x"));
+    assertTheCallTookBetween(start, DELAY_MS, ENOUGH_MS);
+    assertTrue(target.finished);
+  }
+
+  public void testGoodMethodWithNotEnoughTime() throws Exception {
+    SampleImpl target = new SampleImpl();
+    Sample proxy = service.newProxy(
+        target, Sample.class, NOT_ENOUGH_MS, TimeUnit.MILLISECONDS);
+    long start = System.nanoTime();
+    try {
+      proxy.sleepThenReturnInput("x");
+      fail("no exception thrown");
+    } catch (UncheckedTimeoutException expected) {
+    }
+    assertTheCallTookBetween(start, NOT_ENOUGH_MS, DELAY_MS);
+
+    // Is it still computing away anyway?
+    assertFalse(target.finished);
+    TimeUnit.MILLISECONDS.sleep(ENOUGH_MS);
+    assertFalse(target.finished);
+  }
+
+  public void testBadMethodWithEnoughTime() throws Exception {
+    SampleImpl target = new SampleImpl();
+    Sample proxy = service.newProxy(
+        target, Sample.class, ENOUGH_MS, TimeUnit.MILLISECONDS);
+    long start = System.nanoTime();
+    try {
+      proxy.sleepThenThrowException();
+      fail("no exception thrown");
+    } catch (SampleException expected) {
+    }
+    assertTheCallTookBetween(start, DELAY_MS, ENOUGH_MS);
+  }
+
+  public void testBadMethodWithNotEnoughTime() throws Exception {
+    SampleImpl target = new SampleImpl();
+    Sample proxy = service.newProxy(
+        target, Sample.class, NOT_ENOUGH_MS, TimeUnit.MILLISECONDS);
+    long start = System.nanoTime();
+    try {
+      proxy.sleepThenThrowException();
+      fail("no exception thrown");
+    } catch (UncheckedTimeoutException expected) {
+    }
+    assertTheCallTookBetween(start, NOT_ENOUGH_MS, DELAY_MS);
+  }
+
+  private static void assertTheCallTookBetween(
+      long startNanos, int atLeastMillis, int atMostMillis) {
+    long nanos = System.nanoTime() - startNanos;
+    assertTrue(nanos >= atLeastMillis * 1000000);
+    assertTrue(nanos <= atMostMillis * 1000000);
+  }
+
+  public interface Sample {
+    String sleepThenReturnInput(String input);
+    void sleepThenThrowException() throws SampleException;
+  }
+
+  @SuppressWarnings("serial")
+  public static class SampleException extends Exception { }
+
+  public static class SampleImpl implements Sample {
+    boolean finished;
+
+    @Override
+    public String sleepThenReturnInput(String input) {
+      try {
+        TimeUnit.MILLISECONDS.sleep(DELAY_MS);
+        finished = true;
+        return input;
+      } catch (InterruptedException e) {
+        return null;
+      }
+    }
+    @Override
+    public void sleepThenThrowException() throws SampleException {
+      try {
+        TimeUnit.MILLISECONDS.sleep(DELAY_MS);
+      } catch (InterruptedException e) {
+      }
+      throw new SampleException();
+    }
+  }
+}
diff --git a/guava-tests/test/com/google/common/util/concurrent/ThreadFactoryBuilderTest.java b/guava-tests/test/com/google/common/util/concurrent/ThreadFactoryBuilderTest.java
new file mode 100644
index 0000000..ec850d3
--- /dev/null
+++ b/guava-tests/test/com/google/common/util/concurrent/ThreadFactoryBuilderTest.java
@@ -0,0 +1,206 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import static org.junit.contrib.truth.Truth.ASSERT;
+
+import com.google.common.testing.NullPointerTester;
+
+import junit.framework.TestCase;
+
+import java.lang.Thread.UncaughtExceptionHandler;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ThreadFactory;
+
+/**
+ * Tests for ThreadFactoryBuilder.
+ *
+ * @author Kurt Alfred Kluever
+ * @author Martin Buchholz
+ */
+public class ThreadFactoryBuilderTest extends TestCase {
+  private final Runnable monitoredRunnable = new Runnable() {
+    @Override public void run() {
+      completed = true;
+    }
+  };
+
+  private static final UncaughtExceptionHandler UNCAUGHT_EXCEPTION_HANDLER =
+      new UncaughtExceptionHandler() {
+        @Override public void uncaughtException(Thread t, Throwable e) {
+          // No-op
+        }
+      };
+
+  private ThreadFactoryBuilder builder;
+  private volatile boolean completed = false;
+
+  @Override public void setUp() {
+    builder = new ThreadFactoryBuilder();
+  }
+
+  public void testThreadFactoryBuilder_defaults() throws InterruptedException {
+    ThreadFactory threadFactory = builder.build();
+    Thread thread = threadFactory.newThread(monitoredRunnable);
+    checkThreadPoolName(thread, 1);
+
+    Thread defaultThread =
+        Executors.defaultThreadFactory().newThread(monitoredRunnable);
+    assertEquals(defaultThread.isDaemon(), thread.isDaemon());
+    assertEquals(defaultThread.getPriority(), thread.getPriority());
+    assertSame(defaultThread.getThreadGroup(), thread.getThreadGroup());
+    assertSame(defaultThread.getUncaughtExceptionHandler(),
+        thread.getUncaughtExceptionHandler());
+
+    assertFalse(completed);
+    thread.start();
+    thread.join();
+    assertTrue(completed);
+
+    // Creating a new thread from the same ThreadFactory will have the same
+    // pool ID but a thread ID of 2.
+    Thread thread2 = threadFactory.newThread(monitoredRunnable);
+    checkThreadPoolName(thread2, 2);
+    assertEquals(
+        thread.getName().substring(0, thread.getName().lastIndexOf('-')),
+        thread2.getName().substring(0, thread.getName().lastIndexOf('-')));
+
+    // Building again should give us a different pool ID.
+    ThreadFactory threadFactory2 = builder.build();
+    Thread thread3 = threadFactory2.newThread(monitoredRunnable);
+    checkThreadPoolName(thread3, 1);
+    ASSERT.that(
+        thread2.getName().substring(0, thread.getName().lastIndexOf('-')))
+        .isNotEqualTo(
+            thread3.getName().substring(0, thread.getName().lastIndexOf('-')));
+  }
+
+  private static void checkThreadPoolName(Thread thread, int threadId) {
+    assertTrue(thread.getName().matches("^pool-\\d+-thread-" + threadId + "$"));
+  }
+
+  public void testNameFormat_custom() {
+    final String NAME_FORMAT = "super duper thread #%s";
+    ThreadFactory factory = builder.setNameFormat(NAME_FORMAT).build();
+    for (int i = 0; i < 10; i++) {
+      assertEquals(String.format(NAME_FORMAT, i),
+          factory.newThread(monitoredRunnable).getName());
+    }
+  }
+
+  public void testDaemon_false() {
+    ThreadFactory factory = builder.setDaemon(false).build();
+    Thread thread = factory.newThread(monitoredRunnable);
+    assertFalse(thread.isDaemon());
+  }
+
+  public void testDaemon_true() {
+    ThreadFactory factory = builder.setDaemon(true).build();
+    Thread thread = factory.newThread(monitoredRunnable);
+    assertTrue(thread.isDaemon());
+  }
+
+  public void testPriority_custom() {
+    for (int i = Thread.MIN_PRIORITY; i <= Thread.MAX_PRIORITY; i++) {
+      ThreadFactory factory = builder.setPriority(i).build();
+      Thread thread = factory.newThread(monitoredRunnable);
+      assertEquals(i, thread.getPriority());
+    }
+  }
+
+  public void testPriority_tooLow() {
+    try {
+      builder.setPriority(Thread.MIN_PRIORITY - 1);
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  public void testPriority_tooHigh() {
+    try {
+      builder.setPriority(Thread.MAX_PRIORITY + 1);
+      fail();
+    } catch (IllegalArgumentException expected) {
+    }
+  }
+
+  public void testUncaughtExceptionHandler_custom() {
+    assertEquals(UNCAUGHT_EXCEPTION_HANDLER,
+        builder.setUncaughtExceptionHandler(UNCAUGHT_EXCEPTION_HANDLER).build()
+        .newThread(monitoredRunnable).getUncaughtExceptionHandler());
+  }
+
+  public void testBuildMutateBuild() {
+    ThreadFactory factory1 = builder.setPriority(1).build();
+    assertEquals(1, factory1.newThread(monitoredRunnable).getPriority());
+
+    ThreadFactory factory2 = builder.setPriority(2).build();
+    assertEquals(1, factory1.newThread(monitoredRunnable).getPriority());
+    assertEquals(2, factory2.newThread(monitoredRunnable).getPriority());
+  }
+
+  public void testBuildTwice() {
+    builder.build();  // this is allowed
+    builder.build();  // this is *also* allowed
+  }
+
+  public void testBuildMutate() {
+    ThreadFactory factory1 = builder.setPriority(1).build();
+    assertEquals(1, factory1.newThread(monitoredRunnable).getPriority());
+
+    builder.setPriority(2);  // change the state of the builder
+    assertEquals(1, factory1.newThread(monitoredRunnable).getPriority());
+  }
+
+  public void testThreadFactory() throws InterruptedException {
+    final String THREAD_NAME = "ludicrous speed";
+    final int THREAD_PRIORITY = 1;
+    final boolean THREAD_DAEMON = false;
+    ThreadFactory backingThreadFactory = new ThreadFactory() {
+      @Override public Thread newThread(Runnable r) {
+        Thread thread = new Thread(r);
+        thread.setName(THREAD_NAME);
+        thread.setPriority(THREAD_PRIORITY);
+        thread.setDaemon(THREAD_DAEMON);
+        thread.setUncaughtExceptionHandler(UNCAUGHT_EXCEPTION_HANDLER);
+        return thread;
+      }
+    };
+
+    Thread thread = builder.setThreadFactory(backingThreadFactory).build()
+        .newThread(monitoredRunnable);
+
+    assertEquals(THREAD_NAME, thread.getName());
+    assertEquals(THREAD_PRIORITY, thread.getPriority());
+    assertEquals(THREAD_DAEMON, thread.isDaemon());
+    assertSame(UNCAUGHT_EXCEPTION_HANDLER,
+        thread.getUncaughtExceptionHandler());
+    assertSame(Thread.State.NEW, thread.getState());
+
+    assertFalse(completed);
+    thread.start();
+    thread.join();
+    assertTrue(completed);
+  }
+
+  public void testNulls() throws Exception {
+    NullPointerTester npTester = new NullPointerTester();
+    npTester.testAllPublicConstructors(ThreadFactoryBuilder.class);
+    npTester.testAllPublicStaticMethods(ThreadFactoryBuilder.class);
+    npTester.testAllPublicInstanceMethods(builder);
+  }
+}
diff --git a/guava-tests/test/com/google/common/util/concurrent/UncaughtExceptionHandlersTest.java b/guava-tests/test/com/google/common/util/concurrent/UncaughtExceptionHandlersTest.java
new file mode 100644
index 0000000..79539ec
--- /dev/null
+++ b/guava-tests/test/com/google/common/util/concurrent/UncaughtExceptionHandlersTest.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import static org.easymock.EasyMock.createMock;
+import static org.easymock.EasyMock.replay;
+import static org.easymock.EasyMock.verify;
+
+import com.google.common.util.concurrent.UncaughtExceptionHandlers.Exiter;
+
+import junit.framework.TestCase;
+
+import org.junit.Test;
+
+/**
+ * @author Gregory Kick
+ */
+
+public class UncaughtExceptionHandlersTest extends TestCase {
+
+  private Runtime runtimeMock;
+
+  @Override protected void setUp() {
+    runtimeMock = createMock(Runtime.class);
+  }
+
+  @Test public void testExiter() {
+    runtimeMock.exit(1);
+    replay(runtimeMock);
+    new Exiter(runtimeMock).uncaughtException(new Thread(), new Exception());
+    verify(runtimeMock);
+  }
+}
diff --git a/guava.iml b/guava.iml
deleted file mode 100644
index 45bbe49..0000000
--- a/guava.iml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module type="JAVA_MODULE" version="4">
-  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_5" inherit-compiler-output="true">
-    <exclude-output />
-    <content url="file://$MODULE_DIR$">
-      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
-    </content>
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/lib/jsr305.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-  </component>
-</module>
-
diff --git a/guava.ipr b/guava.ipr
deleted file mode 100644
index c3d0861..0000000
--- a/guava.ipr
+++ /dev/null
@@ -1,312 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="AntConfiguration">
-    <defaultAnt bundledAnt="true" />
-  </component>
-  <component name="ClientPropertiesManager">
-    <properties class="javax.swing.AbstractButton">
-      <property name="hideActionText" class="java.lang.Boolean" />
-    </properties>
-    <properties class="javax.swing.JComponent">
-      <property name="html.disable" class="java.lang.Boolean" />
-    </properties>
-    <properties class="javax.swing.JEditorPane">
-      <property name="JEditorPane.w3cLengthUnits" class="java.lang.Boolean" />
-      <property name="JEditorPane.honorDisplayProperties" class="java.lang.Boolean" />
-      <property name="charset" class="java.lang.String" />
-    </properties>
-    <properties class="javax.swing.JList">
-      <property name="List.isFileList" class="java.lang.Boolean" />
-    </properties>
-    <properties class="javax.swing.JPasswordField">
-      <property name="JPasswordField.cutCopyAllowed" class="java.lang.Boolean" />
-    </properties>
-    <properties class="javax.swing.JSlider">
-      <property name="Slider.paintThumbArrowShape" class="java.lang.Boolean" />
-      <property name="JSlider.isFilled" class="java.lang.Boolean" />
-    </properties>
-    <properties class="javax.swing.JTable">
-      <property name="Table.isFileList" class="java.lang.Boolean" />
-      <property name="JTable.autoStartsEdit" class="java.lang.Boolean" />
-      <property name="terminateEditOnFocusLost" class="java.lang.Boolean" />
-    </properties>
-    <properties class="javax.swing.JToolBar">
-      <property name="JToolBar.isRollover" class="java.lang.Boolean" />
-    </properties>
-    <properties class="javax.swing.JTree">
-      <property name="JTree.lineStyle" class="java.lang.String" />
-    </properties>
-    <properties class="javax.swing.text.JTextComponent">
-      <property name="caretAspectRatio" class="java.lang.Double" />
-      <property name="caretWidth" class="java.lang.Integer" />
-    </properties>
-  </component>
-  <component name="CodeStyleSettingsManager">
-    <option name="PER_PROJECT_SETTINGS">
-      <value>
-        <option name="LAYOUT_STATIC_IMPORTS_SEPARATELY" value="false" />
-        <option name="USE_FQ_CLASS_NAMES_IN_JAVADOC" value="false" />
-        <option name="INSERT_INNER_CLASS_IMPORTS" value="true" />
-        <option name="CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND" value="59" />
-        <option name="NAMES_COUNT_TO_USE_IMPORT_ON_DEMAND" value="39" />
-        <option name="PACKAGES_TO_USE_IMPORT_ON_DEMAND">
-          <value />
-        </option>
-        <option name="IMPORT_LAYOUT_TABLE">
-          <value>
-            <package name="com.google" withSubpackages="true" static="false" />
-            <emptyLine />
-            <package name="java" withSubpackages="true" static="false" />
-            <emptyLine />
-            <package name="javax" withSubpackages="true" static="false" />
-            <emptyLine />
-            <package name="" withSubpackages="true" static="false" />
-            <emptyLine />
-          </value>
-        </option>
-        <ADDITIONAL_INDENT_OPTIONS fileType="">
-          <option name="INDENT_SIZE" value="4" />
-          <option name="CONTINUATION_INDENT_SIZE" value="8" />
-          <option name="TAB_SIZE" value="4" />
-          <option name="USE_TAB_CHARACTER" value="false" />
-          <option name="SMART_TABS" value="false" />
-          <option name="LABEL_INDENT_SIZE" value="0" />
-          <option name="LABEL_INDENT_ABSOLUTE" value="false" />
-        </ADDITIONAL_INDENT_OPTIONS>
-        <ADDITIONAL_INDENT_OPTIONS fileType="groovy">
-          <option name="INDENT_SIZE" value="2" />
-          <option name="CONTINUATION_INDENT_SIZE" value="8" />
-          <option name="TAB_SIZE" value="4" />
-          <option name="USE_TAB_CHARACTER" value="false" />
-          <option name="SMART_TABS" value="false" />
-          <option name="LABEL_INDENT_SIZE" value="0" />
-          <option name="LABEL_INDENT_ABSOLUTE" value="false" />
-        </ADDITIONAL_INDENT_OPTIONS>
-        <ADDITIONAL_INDENT_OPTIONS fileType="java">
-          <option name="INDENT_SIZE" value="4" />
-          <option name="CONTINUATION_INDENT_SIZE" value="8" />
-          <option name="TAB_SIZE" value="4" />
-          <option name="USE_TAB_CHARACTER" value="false" />
-          <option name="SMART_TABS" value="false" />
-          <option name="LABEL_INDENT_SIZE" value="0" />
-          <option name="LABEL_INDENT_ABSOLUTE" value="false" />
-        </ADDITIONAL_INDENT_OPTIONS>
-        <ADDITIONAL_INDENT_OPTIONS fileType="xml">
-          <option name="INDENT_SIZE" value="4" />
-          <option name="CONTINUATION_INDENT_SIZE" value="8" />
-          <option name="TAB_SIZE" value="4" />
-          <option name="USE_TAB_CHARACTER" value="false" />
-          <option name="SMART_TABS" value="false" />
-          <option name="LABEL_INDENT_SIZE" value="0" />
-          <option name="LABEL_INDENT_ABSOLUTE" value="false" />
-        </ADDITIONAL_INDENT_OPTIONS>
-      </value>
-    </option>
-    <option name="USE_PER_PROJECT_SETTINGS" value="true" />
-  </component>
-  <component name="CompilerConfiguration">
-    <option name="DEFAULT_COMPILER" value="Javac" />
-    <resourceExtensions>
-      <entry name=".+\.(properties|xml|html|dtd|tld)" />
-      <entry name=".+\.(gif|png|jpeg|jpg)" />
-    </resourceExtensions>
-    <wildcardResourcePatterns>
-      <entry name="?*.properties" />
-      <entry name="?*.xml" />
-      <entry name="?*.gif" />
-      <entry name="?*.png" />
-      <entry name="?*.jpeg" />
-      <entry name="?*.jpg" />
-      <entry name="?*.html" />
-      <entry name="?*.dtd" />
-      <entry name="?*.tld" />
-      <entry name="?*.ftl" />
-      <entry name="?*.properties" />
-      <entry name="?*.xml" />
-      <entry name="?*.html" />
-      <entry name="?*.dtd" />
-      <entry name="?*.tld" />
-      <entry name="?*.gif" />
-      <entry name="?*.png" />
-      <entry name="?*.jpeg" />
-      <entry name="?*.jpg" />
-    </wildcardResourcePatterns>
-    <annotationProcessing enabled="false" useClasspath="true" />
-  </component>
-  <component name="CopyrightManager" default="">
-    <copyright>
-      <option name="notice" value="Copyright (C) &amp;#36;today.year Google Inc.&#10;&#10;Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);&#10;you may not use this file except in compliance with the License.&#10;You may obtain a copy of the License at&#10;&#10;http://www.apache.org/licenses/LICENSE-2.0&#10;&#10;Unless required by applicable law or agreed to in writing, software&#10;distributed under the License is distributed on an &quot;AS IS&quot; BASIS,&#10;WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.&#10;See the License for the specific language governing permissions and&#10;limitations under the License." />
-      <option name="keyword" value="Copyright" />
-      <option name="allowReplaceKeyword" value="Copyright" />
-      <option name="myName" value="Apache 2.0/Google" />
-      <option name="myLocal" value="true" />
-    </copyright>
-    <module2copyright />
-  </component>
-  <component name="DependencyValidationManager">
-    <option name="SKIP_IMPORT_STATEMENTS" value="false" />
-  </component>
-  <component name="Encoding" useUTFGuessing="true" native2AsciiForPropertiesFiles="false" />
-  <component name="JavacSettings">
-    <option name="ADDITIONAL_OPTIONS_STRING" value="-source 1.5 -target 1.5" />
-  </component>
-  <component name="JavadocGenerationManager">
-    <option name="OUTPUT_DIRECTORY" />
-    <option name="OPTION_SCOPE" value="protected" />
-    <option name="OPTION_HIERARCHY" value="true" />
-    <option name="OPTION_NAVIGATOR" value="true" />
-    <option name="OPTION_INDEX" value="true" />
-    <option name="OPTION_SEPARATE_INDEX" value="true" />
-    <option name="OPTION_DOCUMENT_TAG_USE" value="false" />
-    <option name="OPTION_DOCUMENT_TAG_AUTHOR" value="false" />
-    <option name="OPTION_DOCUMENT_TAG_VERSION" value="false" />
-    <option name="OPTION_DOCUMENT_TAG_DEPRECATED" value="true" />
-    <option name="OPTION_DEPRECATED_LIST" value="true" />
-    <option name="OTHER_OPTIONS" value="" />
-    <option name="HEAP_SIZE" />
-    <option name="LOCALE" />
-    <option name="OPEN_IN_BROWSER" value="true" />
-  </component>
-  <component name="Palette2">
-    <group name="Swing">
-      <item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
-        <default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
-      </item>
-      <item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
-        <default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
-      </item>
-      <item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false">
-        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
-      </item>
-      <item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true">
-        <default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
-      </item>
-      <item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false" auto-create-binding="true" can-attach-label="false">
-        <default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
-        <initial-values>
-          <property name="text" value="Button" />
-        </initial-values>
-      </item>
-      <item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false" auto-create-binding="true" can-attach-label="false">
-        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
-        <initial-values>
-          <property name="text" value="RadioButton" />
-        </initial-values>
-      </item>
-      <item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false">
-        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
-        <initial-values>
-          <property name="text" value="CheckBox" />
-        </initial-values>
-      </item>
-      <item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false" auto-create-binding="false" can-attach-label="false">
-        <default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
-        <initial-values>
-          <property name="text" value="Label" />
-        </initial-values>
-      </item>
-      <item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false" auto-create-binding="true" can-attach-label="true">
-        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
-          <preferred-size width="150" height="-1" />
-        </default-constraints>
-      </item>
-      <item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false" auto-create-binding="true" can-attach-label="true">
-        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
-          <preferred-size width="150" height="-1" />
-        </default-constraints>
-      </item>
-      <item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false" auto-create-binding="true" can-attach-label="true">
-        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
-          <preferred-size width="150" height="-1" />
-        </default-constraints>
-      </item>
-      <item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false" auto-create-binding="true" can-attach-label="true">
-        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
-          <preferred-size width="150" height="50" />
-        </default-constraints>
-      </item>
-      <item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
-        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
-          <preferred-size width="150" height="50" />
-        </default-constraints>
-      </item>
-      <item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
-        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
-          <preferred-size width="150" height="50" />
-        </default-constraints>
-      </item>
-      <item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false" auto-create-binding="true" can-attach-label="true">
-        <default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
-      </item>
-      <item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false" auto-create-binding="true" can-attach-label="false">
-        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
-          <preferred-size width="150" height="50" />
-        </default-constraints>
-      </item>
-      <item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false" auto-create-binding="true" can-attach-label="false">
-        <default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
-          <preferred-size width="150" height="50" />
-        </default-constraints>
-      </item>
-      <item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false" auto-create-binding="true" can-attach-label="false">
-        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
-          <preferred-size width="150" height="50" />
-        </default-constraints>
-      </item>
-      <item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false" auto-create-binding="true" can-attach-label="false">
-        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
-          <preferred-size width="200" height="200" />
-        </default-constraints>
-      </item>
-      <item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false" auto-create-binding="false" can-attach-label="false">
-        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
-          <preferred-size width="200" height="200" />
-        </default-constraints>
-      </item>
-      <item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false" auto-create-binding="true" can-attach-label="true">
-        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
-      </item>
-      <item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false" auto-create-binding="true" can-attach-label="false">
-        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
-      </item>
-      <item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.png" removable="false" auto-create-binding="false" can-attach-label="false">
-        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
-      </item>
-      <item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
-        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
-      </item>
-      <item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.png" removable="false" auto-create-binding="false" can-attach-label="false">
-        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
-          <preferred-size width="-1" height="20" />
-        </default-constraints>
-      </item>
-      <item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.png" removable="false" auto-create-binding="false" can-attach-label="false">
-        <default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
-      </item>
-      <item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
-        <default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
-      </item>
-    </group>
-  </component>
-  <component name="ProjectDetails">
-    <option name="projectName" value="guava" />
-  </component>
-  <component name="ProjectDictionaryState">
-    <dictionary name="kevinb" />
-  </component>
-  <component name="ProjectModuleManager">
-    <modules>
-      <module fileurl="file://$PROJECT_DIR$/guava.iml" filepath="$PROJECT_DIR$/guava.iml" />
-    </modules>
-  </component>
-  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_5" assert-keyword="true" jdk-15="true" project-jdk-name="1.6" project-jdk-type="JavaSDK">
-    <output url="file://$PROJECT_DIR$/out" />
-  </component>
-  <component name="SvnBranchConfigurationManager">
-    <option name="mySupportsUserInfoFilter" value="true" />
-  </component>
-  <component name="VcsDirectoryMappings">
-    <mapping directory="" vcs="svn" />
-  </component>
-</project>
-
diff --git a/guava/lib/jdiff.jar b/guava/lib/jdiff.jar
new file mode 100644
index 0000000..5fc7ed0
--- /dev/null
+++ b/guava/lib/jdiff.jar
Binary files differ
diff --git a/guava/pom.xml b/guava/pom.xml
new file mode 100644
index 0000000..14709e9
--- /dev/null
+++ b/guava/pom.xml
@@ -0,0 +1,151 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>com.google.guava</groupId>
+    <artifactId>guava-parent</artifactId>
+    <version>11.0.2</version>
+  </parent>
+  <artifactId>guava</artifactId>
+  <name>Guava: Google Core Libraries for Java</name>
+  <description>
+    Guava is a suite of core and expanded libraries that include
+    utility classes, google's collections, io classes, and much
+    much more.
+
+    This project is a complete packaging of all the Guava libraries
+    into a single jar.  Individual portions of Guava can be used
+    by downloading the appropriate module and its dependencies.
+
+    Guava (complete) has only one code dependency - javax.annotation,
+    per the JSR-305 spec.
+  </description>
+  <dependencies>
+    <dependency>
+      <groupId>com.google.code.findbugs</groupId>
+      <artifactId>jsr305</artifactId>
+      <version>1.3.9</version>
+    </dependency>
+    <dependency>
+      <groupId>${project.groupId}</groupId>
+      <artifactId>guava-bootstrap</artifactId>
+      <version>${project.version}</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>4.5</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <version>2.3.2</version>
+        <configuration>
+          <source>1.5</source>
+          <target>1.5</target>
+          <!-- Prepend guava-bootstrap to avoid an API incompatibility between JDK5 and JDK6 -->
+          <compilerArgument>-Xbootclasspath/p:${project.build.directory}/dependency/guava-bootstrap-${project.version}.jar</compilerArgument>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-dependency-plugin</artifactId>
+        <version>2.3</version>
+        <executions>
+          <execution>
+            <id>prep-guava-bootstrap</id>
+            <phase>process-sources</phase>
+            <goals><goal>copy-dependencies</goal></goals>
+            <configuration>
+              <includeArtifactIds>guava-bootstrap</includeArtifactIds>
+              <excludeTransitive>true</excludeTransitive>
+              <includeScope>provided</includeScope>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-source-plugin</artifactId>
+        <version>2.1.2</version>
+        <executions>
+          <execution>
+            <id>attach-sources</id>
+            <phase>verify</phase>
+            <goals>
+              <goal>jar-no-fork</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>animal-sniffer-maven-plugin</artifactId>
+        <version>1.7</version>
+        <configuration>
+          <signature>
+            <groupId>org.codehaus.mojo.signature</groupId>
+            <artifactId>java15-sun</artifactId>
+            <version>1.0</version>
+          </signature>
+        </configuration>
+        <executions>
+          <execution>
+            <id>check-java15</id>
+            <phase>test</phase>
+            <goals>
+              <goal>check</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-javadoc-plugin</artifactId>
+        <version>2.8</version>
+        <configuration>
+          <encoding>UTF-8</encoding>
+          <docencoding>UTF-8</docencoding>
+          <charset>UTF-8</charset>
+          <additionalparam>-XDignore.symbol.file</additionalparam>
+          <excludePackageNames>com.google.common.base.internal</excludePackageNames>
+          <linksource>true</linksource>
+          <links>
+            <link>http://jsr-305.googlecode.com/svn/trunk/javadoc</link>
+          </links>
+        </configuration>
+        <executions>
+          <execution>
+            <id>generate-javadoc</id>
+            <phase>site</phase>
+            <goals><goal>javadoc</goal></goals>
+          </execution>
+          <execution>
+            <id>generate-jdiff</id>
+            <phase>site</phase>
+            <goals><goal>javadoc</goal></goals>
+            <configuration>
+              <doclet>jdiff.JDiff</doclet>
+              <docletPath>${project.basedir}/lib/jdiff.jar</docletPath>
+              <additionalparam>
+                -XDignore.symbol.file -apiname 'Guava ${project.version}'
+              </additionalparam>
+              <useStandardDocletOptions>false</useStandardDocletOptions>
+              <reportOutputDirectory>${project.reporting.outputDirectory}</reportOutputDirectory>
+              <destDir>jdiff</destDir>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+    <finalName>${project.artifactId}-${project.version}</finalName>
+    <sourceDirectory>src</sourceDirectory>
+    <testSourceDirectory>disabled</testSourceDirectory>
+  </build>
+</project>
diff --git a/guava/src/com/google/common/annotations/Beta.java b/guava/src/com/google/common/annotations/Beta.java
new file mode 100644
index 0000000..07009b0
--- /dev/null
+++ b/guava/src/com/google/common/annotations/Beta.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.annotations;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Signifies that a public API (public class, method or field) is subject to
+ * incompatible changes, or even removal, in a future release. An API bearing
+ * this annotation is exempt from any compatibility guarantees made by its
+ * containing library.
+ *
+ * @author Kevin Bourrillion
+ */
+@Retention(RetentionPolicy.CLASS)
+@Target({
+    ElementType.ANNOTATION_TYPE,
+    ElementType.CONSTRUCTOR,
+    ElementType.FIELD,
+    ElementType.METHOD,
+    ElementType.TYPE})
+@Documented
+@GwtCompatible
+@Beta
+public @interface Beta {}
diff --git a/guava/src/com/google/common/annotations/GwtCompatible.java b/guava/src/com/google/common/annotations/GwtCompatible.java
new file mode 100644
index 0000000..e8d62c0
--- /dev/null
+++ b/guava/src/com/google/common/annotations/GwtCompatible.java
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.annotations;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * The presence of this annotation on a type indicates that the type may be
+ * used with the
+ * <a href="http://code.google.com/webtoolkit/">Google Web Toolkit</a> (GWT).
+ * When applied to a method, the return type of the method is GWT compatible.
+ * It's useful to indicate that an instance created by factory methods has a GWT
+ * serializable type.  In the following example,
+ *
+ * <pre style="code">
+ * {@literal @}GwtCompatible
+ * class Lists {
+ *   ...
+ *   {@literal @}GwtCompatible(serializable = true)
+ *   static &lt;E> List&lt;E> newArrayList(E... elements) {
+ *     ...
+ *   }
+ * }
+ * </pre>
+ * The return value of {@code Lists.newArrayList(E[])} has GWT
+ * serializable type.  It is also useful in specifying contracts of interface
+ * methods.  In the following example,
+ *
+ * <pre style="code">
+ * {@literal @}GwtCompatible
+ * interface ListFactory {
+ *   ...
+ *   {@literal @}GwtCompatible(serializable = true)
+ *   &lt;E> List&lt;E> newArrayList(E... elements);
+ * }
+ * </pre>
+ * The {@code newArrayList(E[])} method of all implementations of {@code
+ * ListFactory} is expected to return a value with a GWT serializable type.
+ *
+ * <p>Note that a {@code GwtCompatible} type may have some {@link
+ * GwtIncompatible} methods.
+ *
+ * @author Charles Fry
+ * @author Hayward Chan
+ */
+@Retention(RetentionPolicy.CLASS)
+@Target({ ElementType.TYPE, ElementType.METHOD })
+@Documented
+@GwtCompatible
+public @interface GwtCompatible {
+
+  /**
+   * When {@code true}, the annotated type or the type of the method return
+   * value is GWT serializable.
+   *
+   * @see <a href="http://code.google.com/webtoolkit/doc/latest/DevGuideServerCommunication.html#DevGuideSerializableTypes">
+   *     Documentation about GWT serialization</a>
+   */
+  boolean serializable() default false;
+
+  /**
+   * When {@code true}, the annotated type is emulated in GWT. The emulated
+   * source (also known as super-source) is different from the implementation
+   * used by the JVM.
+   *
+   * @see <a href="http://code.google.com/webtoolkit/doc/latest/DevGuideOrganizingProjects.html#DevGuideModules">
+   *     Documentation about GWT emulated source</a>
+   */
+  boolean emulated() default false;
+}
diff --git a/guava/src/com/google/common/annotations/GwtIncompatible.java b/guava/src/com/google/common/annotations/GwtIncompatible.java
new file mode 100644
index 0000000..43ae705
--- /dev/null
+++ b/guava/src/com/google/common/annotations/GwtIncompatible.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.annotations;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * The presence of this annotation on a method indicates that the method may
+ * <em>not</em> be used with the
+ * <a href="http://code.google.com/webtoolkit/">Google Web Toolkit</a> (GWT),
+ * even though its type is annotated as {@link GwtCompatible} and accessible in
+ * GWT.  They can cause GWT compilation errors or simply unexpected exceptions
+ * when used in GWT.
+ *
+ * <p>Note that this annotation should only be applied to methods, fields, or
+ * inner classes of types which are annotated as {@link GwtCompatible}.
+ *
+ * @author Charles Fry
+ */
+@Retention(RetentionPolicy.CLASS)
+@Target({ ElementType.TYPE, ElementType.METHOD, ElementType.CONSTRUCTOR, ElementType.FIELD })
+@Documented
+@GwtCompatible
+public @interface GwtIncompatible {
+
+  /**
+   * Describes why the annotated element is incompatible with GWT. Since this is
+   * generally due to a dependence on a type/method which GWT doesn't support,
+   * it is sufficient to simply reference the unsupported type/method. E.g.
+   * "Class.isInstance".
+   */
+  String value();
+
+}
diff --git a/guava/src/com/google/common/annotations/VisibleForTesting.java b/guava/src/com/google/common/annotations/VisibleForTesting.java
new file mode 100644
index 0000000..e591719
--- /dev/null
+++ b/guava/src/com/google/common/annotations/VisibleForTesting.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2006 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.annotations;
+
+/**
+ * An annotation that indicates that the visibility of a type or member has
+ * been relaxed to make the code testable.
+ *
+ * @author Johannes Henkel
+ */
+@GwtCompatible
+public @interface VisibleForTesting {
+}
diff --git a/guava/src/com/google/common/annotations/package-info.java b/guava/src/com/google/common/annotations/package-info.java
new file mode 100644
index 0000000..2bf8b21
--- /dev/null
+++ b/guava/src/com/google/common/annotations/package-info.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+/**
+ * Common annotation types. This package is a part of the open-source
+ * <a href="http://guava-libraries.googlecode.com">Guava libraries</a>.
+ */
+package com.google.common.annotations;
diff --git a/guava/src/com/google/common/base/AbstractIterator.java b/guava/src/com/google/common/base/AbstractIterator.java
new file mode 100644
index 0000000..d171af2
--- /dev/null
+++ b/guava/src/com/google/common/base/AbstractIterator.java
@@ -0,0 +1,84 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base;
+
+import static com.google.common.base.Preconditions.checkState;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+
+/**
+ * Note this class is a copy of
+ * {@link com.google.common.collect.AbstractIterator} (for dependency reasons).
+ */
+@GwtCompatible
+abstract class AbstractIterator<T> implements Iterator<T> {
+  private State state = State.NOT_READY;
+
+  protected AbstractIterator() {}
+
+  private enum State {
+    READY, NOT_READY, DONE, FAILED,
+  }
+
+  private T next;
+
+  protected abstract T computeNext();
+
+  protected final T endOfData() {
+    state = State.DONE;
+    return null;
+  }
+
+  @Override
+  public final boolean hasNext() {
+    checkState(state != State.FAILED);
+    switch (state) {
+      case DONE:
+        return false;
+      case READY:
+        return true;
+      default:
+    }
+    return tryToComputeNext();
+  }
+
+  private boolean tryToComputeNext() {
+    state = State.FAILED; // temporary pessimism
+    next = computeNext();
+    if (state != State.DONE) {
+      state = State.READY;
+      return true;
+    }
+    return false;
+  }
+
+  @Override
+  public final T next() {
+    if (!hasNext()) {
+      throw new NoSuchElementException();
+    }
+    state = State.NOT_READY;
+    return next;
+  }
+
+  @Override public final void remove() {
+    throw new UnsupportedOperationException();
+  }
+}
diff --git a/guava/src/com/google/common/base/Ascii.java b/guava/src/com/google/common/base/Ascii.java
new file mode 100644
index 0000000..a23a11f
--- /dev/null
+++ b/guava/src/com/google/common/base/Ascii.java
@@ -0,0 +1,466 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+
+/**
+ * Static methods pertaining to ASCII characters (those in the range of values
+ * {@code 0x00} through {@code 0x7F}), and to strings containing such
+ * characters.
+ *
+ * <p>ASCII utilities also exist in other classes of this package:
+ * <ul>
+ * <!-- TODO(kevinb): how can we make this not produce a warning when building gwt javadoc? -->
+ * <li>{@link Charsets#US_ASCII} specifies the {@code Charset} of ASCII characters.
+ * <li>{@link CharMatcher#ASCII} matches ASCII characters and provides text processing methods
+ *     which operate only on the ASCII characters of a string.
+ * </ul>
+ *
+ * @author Craig Berry
+ * @author Gregory Kick
+ * @since 7.0
+ */
+@GwtCompatible
+public final class Ascii {
+
+  private Ascii() {}
+
+  /* The ASCII control characters, per RFC 20. */
+  /**
+   * Null ('\0'): The all-zeros character which may serve to accomplish
+   * time fill and media fill.  Normally used as a C string terminator.
+   * <p>Although RFC 20 names this as "Null", note that it is distinct
+   * from the C/C++ "NULL" pointer.
+   *
+   * @since 8.0
+   */
+  public static final byte NUL = 0;
+
+  /**
+   * Start of Heading: A communication control character used at
+   * the beginning of a sequence of characters which constitute a
+   * machine-sensible address or routing information.  Such a sequence is
+   * referred to as the "heading."  An STX character has the effect of
+   * terminating a heading.
+   *
+   * @since 8.0
+   */
+  public static final byte SOH = 1;
+
+  /**
+   * Start of Text: A communication control character which
+   * precedes a sequence of characters that is to be treated as an entity
+   * and entirely transmitted through to the ultimate destination.  Such a
+   * sequence is referred to as "text."  STX may be used to terminate a
+   * sequence of characters started by SOH.
+   *
+   * @since 8.0
+   */
+  public static final byte STX = 2;
+
+  /**
+   * End of Text: A communication control character used to
+   * terminate a sequence of characters started with STX and transmitted
+   * as an entity.
+   *
+   * @since 8.0
+   */
+  public static final byte ETX = 3;
+
+  /**
+   * End of Transmission: A communication control character used
+   * to indicate the conclusion of a transmission, which may have
+   * contained one or more texts and any associated headings.
+   *
+   * @since 8.0
+   */
+  public static final byte EOT = 4;
+
+  /**
+   * Enquiry: A communication control character used in data
+   * communication systems as a request for a response from a remote
+   * station.  It may be used as a "Who Are You" (WRU) to obtain
+   * identification, or may be used to obtain station status, or both.
+   *
+   * @since 8.0
+   */
+  public static final byte ENQ = 5;
+
+  /**
+   * Acknowledge: A communication control character transmitted
+   * by a receiver as an affirmative response to a sender.
+   *
+   * @since 8.0
+   */
+  public static final byte ACK = 6;
+
+  /**
+   * Bell ('\a'): A character for use when there is a need to call for
+   * human attention.  It may control alarm or attention devices.
+   *
+   * @since 8.0
+   */
+  public static final byte BEL = 7;
+
+  /**
+   * Backspace ('\b'): A format effector which controls the movement of
+   * the printing position one printing space backward on the same
+   * printing line.  (Applicable also to display devices.)
+   *
+   * @since 8.0
+   */
+  public static final byte BS = 8;
+
+  /**
+   * Horizontal Tabulation ('\t'): A format effector which controls the
+   * movement of the printing position to the next in a series of
+   * predetermined positions along the printing line.  (Applicable also to
+   * display devices and the skip function on punched cards.)
+   *
+   * @since 8.0
+   */
+  public static final byte HT = 9;
+
+  /**
+   * Line Feed ('\n'): A format effector which controls the movement of
+   * the printing position to the next printing line.  (Applicable also to
+   * display devices.) Where appropriate, this character may have the
+   * meaning "New Line" (NL), a format effector which controls the
+   * movement of the printing point to the first printing position on the
+   * next printing line.  Use of this convention requires agreement
+   * between sender and recipient of data.
+   *
+   * @since 8.0
+   */
+  public static final byte LF = 10;
+
+  /**
+   * Alternate name for {@link #LF}.  ({@code LF} is preferred.)
+   *
+   * @since 8.0
+   */
+  public static final byte NL = 10;
+
+  /**
+   * Vertical Tabulation ('\v'): A format effector which controls the
+   * movement of the printing position to the next in a series of
+   * predetermined printing lines.  (Applicable also to display devices.)
+   *
+   * @since 8.0
+   */
+  public static final byte VT = 11;
+
+  /**
+   * Form Feed ('\f'): A format effector which controls the movement of
+   * the printing position to the first pre-determined printing line on
+   * the next form or page.  (Applicable also to display devices.)
+   *
+   * @since 8.0
+   */
+  public static final byte FF = 12;
+
+  /**
+   * Carriage Return ('\r'): A format effector which controls the
+   * movement of the printing position to the first printing position on
+   * the same printing line.  (Applicable also to display devices.)
+   *
+   * @since 8.0
+   */
+  public static final byte CR = 13;
+
+  /**
+   * Shift Out: A control character indicating that the code
+   * combinations which follow shall be interpreted as outside of the
+   * character set of the standard code table until a Shift In character
+   * is reached.
+   *
+   * @since 8.0
+   */
+  public static final byte SO = 14;
+
+  /**
+   * Shift In: A control character indicating that the code
+   * combinations which follow shall be interpreted according to the
+   * standard code table.
+   *
+   * @since 8.0
+   */
+  public static final byte SI = 15;
+
+  /**
+   * Data Link Escape: A communication control character which
+   * will change the meaning of a limited number of contiguously following
+   * characters.  It is used exclusively to provide supplementary controls
+   * in data communication networks.
+   *
+   * @since 8.0
+   */
+  public static final byte DLE = 16;
+
+  /**
+   * Device Controls: Characters for the control
+   * of ancillary devices associated with data processing or
+   * telecommunication systems, more especially switching devices "on" or
+   * "off."  (If a single "stop" control is required to interrupt or turn
+   * off ancillary devices, DC4 is the preferred assignment.)
+   *
+   * @since 8.0
+   */
+  public static final byte DC1 = 17; // aka XON
+
+  /**
+   * Transmission on/off: Although originally defined as DC1, this ASCII
+   * control character is now better known as the XON code used for software
+   * flow control in serial communications.  The main use is restarting
+   * the transmission after the communication has been stopped by the XOFF
+   * control code.
+   *
+   * @since 8.0
+   */
+  public static final byte XON = 17; // aka DC1
+
+  /**
+   * @see #DC1
+   *
+   * @since 8.0
+   */
+  public static final byte DC2 = 18;
+
+  /**
+   * @see #DC1
+   *
+   * @since 8.0
+   */
+  public static final byte DC3 = 19; // aka XOFF
+
+  /**
+   * Transmission off. @see #XON
+   *
+   * @since 8.0
+   */
+  public static final byte XOFF = 19; // aka DC3
+
+  /**
+   * @see #DC1
+   *
+   * @since 8.0
+   */
+  public static final byte DC4 = 20;
+
+  /**
+   * Negative Acknowledge: A communication control character
+   * transmitted by a receiver as a negative response to the sender.
+   *
+   * @since 8.0
+   */
+  public static final byte NAK = 21;
+
+  /**
+   * Synchronous Idle: A communication control character used by
+   * a synchronous transmission system in the absence of any other
+   * character to provide a signal from which synchronism may be achieved
+   * or retained.
+   *
+   * @since 8.0
+   */
+  public static final byte SYN = 22;
+
+  /**
+   * End of Transmission Block: A communication control character
+   * used to indicate the end of a block of data for communication
+   * purposes.  ETB is used for blocking data where the block structure is
+   * not necessarily related to the processing format.
+   *
+   * @since 8.0
+   */
+  public static final byte ETB = 23;
+
+  /**
+   * Cancel: A control character used to indicate that the data
+   * with which it is sent is in error or is to be disregarded.
+   *
+   * @since 8.0
+   */
+  public static final byte CAN = 24;
+
+  /**
+   * End of Medium: A control character associated with the sent
+   * data which may be used to identify the physical end of the medium, or
+   * the end of the used, or wanted, portion of information recorded on a
+   * medium.  (The position of this character does not necessarily
+   * correspond to the physical end of the medium.)
+   *
+   * @since 8.0
+   */
+  public static final byte EM = 25;
+
+  /**
+   * Substitute: A character that may be substituted for a
+   * character which is determined to be invalid or in error.
+   *
+   * @since 8.0
+   */
+  public static final byte SUB = 26;
+
+  /**
+   * Escape: A control character intended to provide code
+   * extension (supplementary characters) in general information
+   * interchange.  The Escape character itself is a prefix affecting the
+   * interpretation of a limited number of contiguously following
+   * characters.
+   *
+   * @since 8.0
+   */
+  public static final byte ESC = 27;
+
+  /**
+   * File/Group/Record/Unit Separator: These information separators may be
+   * used within data in optional fashion, except that their hierarchical
+   * relationship shall be: FS is the most inclusive, then GS, then RS,
+   * and US is least inclusive.  (The content and length of a File, Group,
+   * Record, or Unit are not specified.)
+   *
+   * @since 8.0
+   */
+  public static final byte FS = 28;
+
+  /**
+   * @see #FS
+   *
+   * @since 8.0
+   */
+  public static final byte GS = 29;
+
+  /**
+   * @see #FS
+   *
+   * @since 8.0
+   */
+  public static final byte RS = 30;
+
+  /**
+   * @see #FS
+   *
+   * @since 8.0
+   */
+  public static final byte US = 31;
+
+  /**
+   * Space: A normally non-printing graphic character used to
+   * separate words.  It is also a format effector which controls the
+   * movement of the printing position, one printing position forward.
+   * (Applicable also to display devices.)
+   *
+   * @since 8.0
+   */
+  public static final byte SP = 32;
+
+  /**
+   * Alternate name for {@link #SP}.
+   *
+   * @since 8.0
+   */
+  public static final byte SPACE = 32;
+
+  /**
+   * Delete: This character is used primarily to "erase" or
+   * "obliterate" erroneous or unwanted characters in perforated tape.
+   *
+   * @since 8.0
+   */
+  public static final byte DEL = 127;
+
+  /**
+   * The minimum value of an ASCII character.
+   *
+   * @since 9.0
+   */
+  @Beta
+  public static final int MIN = 0;
+
+  /**
+   * The maximum value of an ASCII character.
+   *
+   * @since 9.0
+   */
+  @Beta
+  public static final int MAX = 127;
+
+  /**
+   * Returns a copy of the input string in which all {@linkplain #isUpperCase(char) uppercase ASCII
+   * characters} have been converted to lowercase. All other characters are copied without
+   * modification.
+   */
+  public static String toLowerCase(String string) {
+    int length = string.length();
+    StringBuilder builder = new StringBuilder(length);
+    for (int i = 0; i < length; i++) {
+      builder.append(toLowerCase(string.charAt(i)));
+    }
+    return builder.toString();
+  }
+
+  /**
+   * If the argument is an {@linkplain #isUpperCase(char) uppercase ASCII character} returns the
+   * lowercase equivalent. Otherwise returns the argument.
+   */
+  public static char toLowerCase(char c) {
+    return isUpperCase(c) ? (char) (c ^ 0x20) : c;
+  }
+
+  /**
+   * Returns a copy of the input string in which all {@linkplain #isLowerCase(char) lowercase ASCII
+   * characters} have been converted to uppercase. All other characters are copied without
+   * modification.
+   */
+  public static String toUpperCase(String string) {
+    int length = string.length();
+    StringBuilder builder = new StringBuilder(length);
+    for (int i = 0; i < length; i++) {
+      builder.append(toUpperCase(string.charAt(i)));
+    }
+    return builder.toString();
+  }
+
+  /**
+   * If the argument is a {@linkplain #isLowerCase(char) lowercase ASCII character} returns the
+   * uppercase equivalent. Otherwise returns the argument.
+   */
+  public static char toUpperCase(char c) {
+    return isLowerCase(c) ? (char) (c & 0x5f) : c;
+  }
+
+  /**
+   * Indicates whether {@code c} is one of the twenty-six lowercase ASCII alphabetic characters
+   * between {@code 'a'} and {@code 'z'} inclusive. All others (including non-ASCII characters)
+   * return {@code false}.
+   */
+  public static boolean isLowerCase(char c) {
+    return (c >= 'a') && (c <= 'z');
+  }
+
+  /**
+   * Indicates whether {@code c} is one of the twenty-six uppercase ASCII alphabetic characters
+   * between {@code 'A'} and {@code 'Z'} inclusive. All others (including non-ASCII characters)
+   * return {@code false}.
+   */
+  public static boolean isUpperCase(char c) {
+    return (c >= 'A') && (c <= 'Z');
+  }
+}
diff --git a/guava/src/com/google/common/base/CaseFormat.java b/guava/src/com/google/common/base/CaseFormat.java
new file mode 100644
index 0000000..8ef7c5c
--- /dev/null
+++ b/guava/src/com/google/common/base/CaseFormat.java
@@ -0,0 +1,164 @@
+/*
+ * Copyright (C) 2006 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base;
+
+import com.google.common.annotations.GwtCompatible;
+
+/**
+ * Utility class for converting between various ASCII case formats.
+ *
+ * @author Mike Bostock
+ * @since 1.0
+ */
+@GwtCompatible
+public enum CaseFormat {
+  /**
+   * Hyphenated variable naming convention, e.g., "lower-hyphen".
+   */
+  LOWER_HYPHEN(CharMatcher.is('-'), "-"),
+
+  /**
+   * C++ variable naming convention, e.g., "lower_underscore".
+   */
+  LOWER_UNDERSCORE(CharMatcher.is('_'), "_"),
+
+  /**
+   * Java variable naming convention, e.g., "lowerCamel".
+   */
+  LOWER_CAMEL(CharMatcher.inRange('A', 'Z'), ""),
+
+  /**
+   * Java and C++ class naming convention, e.g., "UpperCamel".
+   */
+  UPPER_CAMEL(CharMatcher.inRange('A', 'Z'), ""),
+
+  /**
+   * Java and C++ constant naming convention, e.g., "UPPER_UNDERSCORE".
+   */
+  UPPER_UNDERSCORE(CharMatcher.is('_'), "_");
+
+  private final CharMatcher wordBoundary;
+  private final String wordSeparator;
+
+  CaseFormat(CharMatcher wordBoundary, String wordSeparator) {
+    this.wordBoundary = wordBoundary;
+    this.wordSeparator = wordSeparator;
+  }
+
+  /**
+   * Converts the specified {@code String s} from this format to the specified {@code format}. A
+   * "best effort" approach is taken; if {@code s} does not conform to the assumed format, then the
+   * behavior of this method is undefined but we make a reasonable effort at converting anyway.
+   */
+  public String to(CaseFormat format, String s) {
+    if (format == null) {
+      throw new NullPointerException();
+    }
+    if (s == null) {
+      throw new NullPointerException();
+    }
+
+    if (format == this) {
+      return s;
+    }
+
+    /* optimize cases where no camel conversion is required */
+    switch (this) {
+      case LOWER_HYPHEN:
+        switch (format) {
+          case LOWER_UNDERSCORE:
+            return s.replace('-', '_');
+          case UPPER_UNDERSCORE:
+            return Ascii.toUpperCase(s.replace('-', '_'));
+        }
+        break;
+      case LOWER_UNDERSCORE:
+        switch (format) {
+          case LOWER_HYPHEN:
+            return s.replace('_', '-');
+          case UPPER_UNDERSCORE:
+            return Ascii.toUpperCase(s);
+        }
+        break;
+      case UPPER_UNDERSCORE:
+        switch (format) {
+          case LOWER_HYPHEN:
+            return Ascii.toLowerCase(s.replace('_', '-'));
+          case LOWER_UNDERSCORE:
+            return Ascii.toLowerCase(s);
+        }
+        break;
+    }
+
+    // otherwise, deal with camel conversion
+    StringBuilder out = null;
+    int i = 0;
+    int j = -1;
+    while ((j = wordBoundary.indexIn(s, ++j)) != -1) {
+      if (i == 0) {
+        // include some extra space for separators
+        out = new StringBuilder(s.length() + 4 * wordSeparator.length());
+        out.append(format.normalizeFirstWord(s.substring(i, j)));
+      } else {
+        out.append(format.normalizeWord(s.substring(i, j)));
+      }
+      out.append(format.wordSeparator);
+      i = j + wordSeparator.length();
+    }
+    if (i == 0) {
+      return format.normalizeFirstWord(s);
+    }
+    out.append(format.normalizeWord(s.substring(i)));
+    return out.toString();
+  }
+
+  private String normalizeFirstWord(String word) {
+    switch (this) {
+      case LOWER_CAMEL:
+        return Ascii.toLowerCase(word);
+      default:
+        return normalizeWord(word);
+    }
+  }
+
+  private String normalizeWord(String word) {
+    switch (this) {
+      case LOWER_HYPHEN:
+        return Ascii.toLowerCase(word);
+      case LOWER_UNDERSCORE:
+        return Ascii.toLowerCase(word);
+      case LOWER_CAMEL:
+        return firstCharOnlyToUpper(word);
+      case UPPER_CAMEL:
+        return firstCharOnlyToUpper(word);
+      case UPPER_UNDERSCORE:
+        return Ascii.toUpperCase(word);
+    }
+    throw new RuntimeException("unknown case: " + this);
+  }
+
+  private static String firstCharOnlyToUpper(String word) {
+    int length = word.length();
+    if (length == 0) {
+      return word;
+    }
+    return new StringBuilder(length)
+        .append(Ascii.toUpperCase(word.charAt(0)))
+        .append(Ascii.toLowerCase(word.substring(1)))
+        .toString();
+  }
+}
diff --git a/guava/src/com/google/common/base/CharMatcher.java b/guava/src/com/google/common/base/CharMatcher.java
new file mode 100644
index 0000000..1bea5c8
--- /dev/null
+++ b/guava/src/com/google/common/base/CharMatcher.java
@@ -0,0 +1,1148 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import javax.annotation.CheckReturnValue;
+
+/**
+ * Determines a true or false value for any Java {@code char} value, just as {@link Predicate} does
+ * for any {@link Object}. Also offers basic text processing methods based on this function.
+ * Implementations are strongly encouraged to be side-effect-free and immutable.
+ *
+ * <p>Throughout the documentation of this class, the phrase "matching character" is used to mean
+ * "any character {@code c} for which {@code this.matches(c)} returns {@code true}".
+ *
+ * <p><b>Note:</b> This class deals only with {@code char} values; it does not understand
+ * supplementary Unicode code points in the range {@code 0x10000} to {@code 0x10FFFF}. Such logical
+ * characters are encoded into a {@code String} using surrogate pairs, and a {@code CharMatcher}
+ * treats these just as two separate characters.
+ *
+ * <p>Example usages: <pre>
+ *   String trimmed = {@link #WHITESPACE WHITESPACE}.{@link #trimFrom trimFrom}(userInput);
+ *   if ({@link #ASCII ASCII}.{@link #matchesAllOf matchesAllOf}(s)) { ... }</pre>
+ *
+ * @author Kevin Bourrillion
+ * @since 1.0
+ */
+@Beta // Possibly change from chars to code points; decide constants vs. methods
+@GwtCompatible
+public abstract class CharMatcher implements Predicate<Character> {
+  // Constants
+
+  // Excludes 2000-2000a, which is handled as a range
+  private static final String BREAKING_WHITESPACE_CHARS =
+      "\t\n\013\f\r \u0085\u1680\u2028\u2029\u205f\u3000";
+
+  // Excludes 2007, which is handled as a gap in a pair of ranges
+  private static final String NON_BREAKING_WHITESPACE_CHARS =
+      "\u00a0\u180e\u202f";
+
+  /**
+   * Determines whether a character is whitespace according to the latest Unicode standard, as
+   * illustrated
+   * <a href="http://unicode.org/cldr/utility/list-unicodeset.jsp?a=%5Cp%7Bwhitespace%7D">here</a>.
+   * This is not the same definition used by other Java APIs. (See a
+   * <a href="http://spreadsheets.google.com/pub?key=pd8dAQyHbdewRsnE5x5GzKQ">comparison of several
+   * definitions of "whitespace"</a>.)
+   *
+   * <p><b>Note:</b> as the Unicode definition evolves, we will modify this constant to keep it up
+   * to date.
+   */
+  public static final CharMatcher WHITESPACE =
+      anyOf(BREAKING_WHITESPACE_CHARS + NON_BREAKING_WHITESPACE_CHARS)
+          .or(inRange('\u2000', '\u200a'))
+          .precomputed();
+
+  /**
+   * Determines whether a character is a breaking whitespace (that is, a whitespace which can be
+   * interpreted as a break between words for formatting purposes). See {@link #WHITESPACE} for a
+   * discussion of that term.
+   *
+   * @since 2.0
+   */
+  public static final CharMatcher BREAKING_WHITESPACE =
+      anyOf(BREAKING_WHITESPACE_CHARS)
+          .or(inRange('\u2000', '\u2006'))
+          .or(inRange('\u2008', '\u200a'))
+          .precomputed();
+
+  /**
+   * Determines whether a character is ASCII, meaning that its code point is less than 128.
+   */
+  public static final CharMatcher ASCII = inRange('\0', '\u007f');
+
+  /**
+   * Determines whether a character is a digit according to
+   * <a href="http://unicode.org/cldr/utility/list-unicodeset.jsp?a=%5Cp%7Bdigit%7D">Unicode</a>.
+   */
+  public static final CharMatcher DIGIT;
+
+  static {
+    CharMatcher digit = inRange('0', '9');
+    String zeroes =
+        "\u0660\u06f0\u07c0\u0966\u09e6\u0a66\u0ae6\u0b66\u0be6\u0c66"
+            + "\u0ce6\u0d66\u0e50\u0ed0\u0f20\u1040\u1090\u17e0\u1810\u1946"
+            + "\u19d0\u1b50\u1bb0\u1c40\u1c50\ua620\ua8d0\ua900\uaa50\uff10";
+    for (char base : zeroes.toCharArray()) {
+      digit = digit.or(inRange(base, (char) (base + 9)));
+    }
+    DIGIT = digit.precomputed();
+  }
+
+  /**
+   * Determines whether a character is a digit according to {@link Character#isDigit(char) Java's
+   * definition}. If you only care to match ASCII digits, you can use {@code inRange('0', '9')}.
+   */
+  public static final CharMatcher JAVA_DIGIT = new CharMatcher() {
+    @Override public boolean matches(char c) {
+      return Character.isDigit(c);
+    }
+  };
+
+  /**
+   * Determines whether a character is a letter according to {@link Character#isLetter(char) Java's
+   * definition}. If you only care to match letters of the Latin alphabet, you can use {@code
+   * inRange('a', 'z').or(inRange('A', 'Z'))}.
+   */
+  public static final CharMatcher JAVA_LETTER = new CharMatcher() {
+    @Override public boolean matches(char c) {
+      return Character.isLetter(c);
+    }
+  };
+
+  /**
+   * Determines whether a character is a letter or digit according to {@link
+   * Character#isLetterOrDigit(char) Java's definition}.
+   */
+  public static final CharMatcher JAVA_LETTER_OR_DIGIT = new CharMatcher() {
+    @Override public boolean matches(char c) {
+      return Character.isLetterOrDigit(c);
+    }
+  };
+
+  /**
+   * Determines whether a character is upper case according to {@link Character#isUpperCase(char)
+   * Java's definition}.
+   */
+  public static final CharMatcher JAVA_UPPER_CASE = new CharMatcher() {
+    @Override public boolean matches(char c) {
+      return Character.isUpperCase(c);
+    }
+  };
+
+  /**
+   * Determines whether a character is lower case according to {@link Character#isLowerCase(char)
+   * Java's definition}.
+   */
+  public static final CharMatcher JAVA_LOWER_CASE = new CharMatcher() {
+    @Override public boolean matches(char c) {
+      return Character.isLowerCase(c);
+    }
+  };
+
+  /**
+   * Determines whether a character is an ISO control character as specified by {@link
+   * Character#isISOControl(char)}.
+   */
+  public static final CharMatcher JAVA_ISO_CONTROL =
+      inRange('\u0000', '\u001f').or(inRange('\u007f', '\u009f'));
+
+  /**
+   * Determines whether a character is invisible; that is, if its Unicode category is any of
+   * SPACE_SEPARATOR, LINE_SEPARATOR, PARAGRAPH_SEPARATOR, CONTROL, FORMAT, SURROGATE, and
+   * PRIVATE_USE according to ICU4J.
+   */
+  public static final CharMatcher INVISIBLE = inRange('\u0000', '\u0020')
+      .or(inRange('\u007f', '\u00a0'))
+      .or(is('\u00ad'))
+      .or(inRange('\u0600', '\u0603'))
+      .or(anyOf("\u06dd\u070f\u1680\u17b4\u17b5\u180e"))
+      .or(inRange('\u2000', '\u200f'))
+      .or(inRange('\u2028', '\u202f'))
+      .or(inRange('\u205f', '\u2064'))
+      .or(inRange('\u206a', '\u206f'))
+      .or(is('\u3000'))
+      .or(inRange('\ud800', '\uf8ff'))
+      .or(anyOf("\ufeff\ufff9\ufffa\ufffb"))
+      .precomputed();
+
+  /**
+   * Determines whether a character is single-width (not double-width). When in doubt, this matcher
+   * errs on the side of returning {@code false} (that is, it tends to assume a character is
+   * double-width).
+   *
+   * <p><b>Note:</b> as the reference file evolves, we will modify this constant to keep it up to
+   * date.
+   */
+  public static final CharMatcher SINGLE_WIDTH = inRange('\u0000', '\u04f9')
+      .or(is('\u05be'))
+      .or(inRange('\u05d0', '\u05ea'))
+      .or(is('\u05f3'))
+      .or(is('\u05f4'))
+      .or(inRange('\u0600', '\u06ff'))
+      .or(inRange('\u0750', '\u077f'))
+      .or(inRange('\u0e00', '\u0e7f'))
+      .or(inRange('\u1e00', '\u20af'))
+      .or(inRange('\u2100', '\u213a'))
+      .or(inRange('\ufb50', '\ufdff'))
+      .or(inRange('\ufe70', '\ufeff'))
+      .or(inRange('\uff61', '\uffdc'))
+      .precomputed();
+
+  /** Matches any character. */
+  public static final CharMatcher ANY =
+      new CharMatcher() {
+        @Override public boolean matches(char c) {
+          return true;
+        }
+
+        @Override public int indexIn(CharSequence sequence) {
+          return (sequence.length() == 0) ? -1 : 0;
+        }
+
+        @Override public int indexIn(CharSequence sequence, int start) {
+          int length = sequence.length();
+          Preconditions.checkPositionIndex(start, length);
+          return (start == length) ? -1 : start;
+        }
+
+        @Override public int lastIndexIn(CharSequence sequence) {
+          return sequence.length() - 1;
+        }
+
+        @Override public boolean matchesAllOf(CharSequence sequence) {
+          checkNotNull(sequence);
+          return true;
+        }
+
+        @Override public boolean matchesNoneOf(CharSequence sequence) {
+          return sequence.length() == 0;
+        }
+
+        @Override public String removeFrom(CharSequence sequence) {
+          checkNotNull(sequence);
+          return "";
+        }
+
+        @Override public String replaceFrom(CharSequence sequence, char replacement) {
+          char[] array = new char[sequence.length()];
+          Arrays.fill(array, replacement);
+          return new String(array);
+        }
+
+        @Override public String replaceFrom(CharSequence sequence, CharSequence replacement) {
+          StringBuilder retval = new StringBuilder(sequence.length() * replacement.length());
+          for (int i = 0; i < sequence.length(); i++) {
+            retval.append(replacement);
+          }
+          return retval.toString();
+        }
+
+        @Override public String collapseFrom(CharSequence sequence, char replacement) {
+          return (sequence.length() == 0) ? "" : String.valueOf(replacement);
+        }
+
+        @Override public String trimFrom(CharSequence sequence) {
+          checkNotNull(sequence);
+          return "";
+        }
+
+        @Override public int countIn(CharSequence sequence) {
+          return sequence.length();
+        }
+
+        @Override public CharMatcher and(CharMatcher other) {
+          return checkNotNull(other);
+        }
+
+        @Override public CharMatcher or(CharMatcher other) {
+          checkNotNull(other);
+          return this;
+        }
+
+        @Override public CharMatcher negate() {
+          return NONE;
+        }
+
+        @Override public CharMatcher precomputed() {
+          return this;
+        }
+      };
+
+  /** Matches no characters. */
+  public static final CharMatcher NONE =
+      new CharMatcher() {
+        @Override public boolean matches(char c) {
+          return false;
+        }
+
+        @Override public int indexIn(CharSequence sequence) {
+          checkNotNull(sequence);
+          return -1;
+        }
+
+        @Override public int indexIn(CharSequence sequence, int start) {
+          int length = sequence.length();
+          Preconditions.checkPositionIndex(start, length);
+          return -1;
+        }
+
+        @Override public int lastIndexIn(CharSequence sequence) {
+          checkNotNull(sequence);
+          return -1;
+        }
+
+        @Override public boolean matchesAllOf(CharSequence sequence) {
+          return sequence.length() == 0;
+        }
+
+        @Override public boolean matchesNoneOf(CharSequence sequence) {
+          checkNotNull(sequence);
+          return true;
+        }
+
+        @Override public String removeFrom(CharSequence sequence) {
+          return sequence.toString();
+        }
+
+        @Override public String replaceFrom(CharSequence sequence, char replacement) {
+          return sequence.toString();
+        }
+
+        @Override public String replaceFrom(CharSequence sequence, CharSequence replacement) {
+          checkNotNull(replacement);
+          return sequence.toString();
+        }
+
+        @Override public String collapseFrom(CharSequence sequence, char replacement) {
+          return sequence.toString();
+        }
+
+        @Override public String trimFrom(CharSequence sequence) {
+          return sequence.toString();
+        }
+
+        @Override public int countIn(CharSequence sequence) {
+          checkNotNull(sequence);
+          return 0;
+        }
+
+        @Override public CharMatcher and(CharMatcher other) {
+          checkNotNull(other);
+          return this;
+        }
+
+        @Override public CharMatcher or(CharMatcher other) {
+          return checkNotNull(other);
+        }
+
+        @Override public CharMatcher negate() {
+          return ANY;
+        }
+
+        @Override void setBits(LookupTable table) {}
+
+        @Override public CharMatcher precomputed() {
+          return this;
+        }
+      };
+
+  // Static factories
+
+  /**
+   * Returns a {@code char} matcher that matches only one specified character.
+   */
+  public static CharMatcher is(final char match) {
+    return new CharMatcher() {
+      @Override public boolean matches(char c) {
+        return c == match;
+      }
+
+      @Override public String replaceFrom(CharSequence sequence, char replacement) {
+        return sequence.toString().replace(match, replacement);
+      }
+
+      @Override public CharMatcher and(CharMatcher other) {
+        return other.matches(match) ? this : NONE;
+      }
+
+      @Override public CharMatcher or(CharMatcher other) {
+        return other.matches(match) ? other : super.or(other);
+      }
+
+      @Override public CharMatcher negate() {
+        return isNot(match);
+      }
+
+      @Override void setBits(LookupTable table) {
+        table.set(match);
+      }
+
+      @Override public CharMatcher precomputed() {
+        return this;
+      }
+    };
+  }
+
+  /**
+   * Returns a {@code char} matcher that matches any character except the one specified.
+   *
+   * <p>To negate another {@code CharMatcher}, use {@link #negate()}.
+   */
+  public static CharMatcher isNot(final char match) {
+    return new CharMatcher() {
+      @Override public boolean matches(char c) {
+        return c != match;
+      }
+
+      @Override public CharMatcher and(CharMatcher other) {
+        return other.matches(match) ? super.and(other) : other;
+      }
+
+      @Override public CharMatcher or(CharMatcher other) {
+        return other.matches(match) ? ANY : this;
+      }
+
+      @Override public CharMatcher negate() {
+        return is(match);
+      }
+    };
+  }
+
+  /**
+   * Returns a {@code char} matcher that matches any character present in the given character
+   * sequence.
+   */
+  public static CharMatcher anyOf(final CharSequence sequence) {
+    switch (sequence.length()) {
+      case 0:
+        return NONE;
+      case 1:
+        return is(sequence.charAt(0));
+      case 2:
+        final char match1 = sequence.charAt(0);
+        final char match2 = sequence.charAt(1);
+        return new CharMatcher() {
+          @Override public boolean matches(char c) {
+            return c == match1 || c == match2;
+          }
+
+          @Override void setBits(LookupTable table) {
+            table.set(match1);
+            table.set(match2);
+          }
+
+          @Override public CharMatcher precomputed() {
+            return this;
+          }
+        };
+    }
+
+    final char[] chars = sequence.toString().toCharArray();
+    Arrays.sort(chars); // not worth collapsing duplicates
+
+    return new CharMatcher() {
+      @Override public boolean matches(char c) {
+        return Arrays.binarySearch(chars, c) >= 0;
+      }
+
+      @Override void setBits(LookupTable table) {
+        for (char c : chars) {
+          table.set(c);
+        }
+      }
+    };
+  }
+
+  /**
+   * Returns a {@code char} matcher that matches any character not present in the given character
+   * sequence.
+   */
+  public static CharMatcher noneOf(CharSequence sequence) {
+    return anyOf(sequence).negate();
+  }
+
+  /**
+   * Returns a {@code char} matcher that matches any character in a given range (both endpoints are
+   * inclusive). For example, to match any lowercase letter of the English alphabet, use {@code
+   * CharMatcher.inRange('a', 'z')}.
+   *
+   * @throws IllegalArgumentException if {@code endInclusive < startInclusive}
+   */
+  public static CharMatcher inRange(final char startInclusive, final char endInclusive) {
+    checkArgument(endInclusive >= startInclusive);
+    return new CharMatcher() {
+      @Override public boolean matches(char c) {
+        return startInclusive <= c && c <= endInclusive;
+      }
+
+      @Override void setBits(LookupTable table) {
+        char c = startInclusive;
+        while (true) {
+          table.set(c);
+          if (c++ == endInclusive) {
+            break;
+          }
+        }
+      }
+
+      @Override public CharMatcher precomputed() {
+        return this;
+      }
+    };
+  }
+
+  /**
+   * Returns a matcher with identical behavior to the given {@link Character}-based predicate, but
+   * which operates on primitive {@code char} instances instead.
+   */
+  public static CharMatcher forPredicate(final Predicate<? super Character> predicate) {
+    checkNotNull(predicate);
+    if (predicate instanceof CharMatcher) {
+      return (CharMatcher) predicate;
+    }
+    return new CharMatcher() {
+      @Override public boolean matches(char c) {
+        return predicate.apply(c);
+      }
+
+      @Override public boolean apply(Character character) {
+        return predicate.apply(checkNotNull(character));
+      }
+    };
+  }
+
+  // Constructors
+
+  /**
+   * Constructor for use by subclasses.
+   */
+  protected CharMatcher() {}
+
+  // Abstract methods
+
+  /** Determines a true or false value for the given character. */
+  public abstract boolean matches(char c);
+
+  // Non-static factories
+
+  /**
+   * Returns a matcher that matches any character not matched by this matcher.
+   */
+  public CharMatcher negate() {
+    final CharMatcher original = this;
+    return new CharMatcher() {
+      @Override public boolean matches(char c) {
+        return !original.matches(c);
+      }
+
+      @Override public boolean matchesAllOf(CharSequence sequence) {
+        return original.matchesNoneOf(sequence);
+      }
+
+      @Override public boolean matchesNoneOf(CharSequence sequence) {
+        return original.matchesAllOf(sequence);
+      }
+
+      @Override public int countIn(CharSequence sequence) {
+        return sequence.length() - original.countIn(sequence);
+      }
+
+      @Override public CharMatcher negate() {
+        return original;
+      }
+    };
+  }
+
+  /**
+   * Returns a matcher that matches any character matched by both this matcher and {@code other}.
+   */
+  public CharMatcher and(CharMatcher other) {
+    return new And(Arrays.asList(this, checkNotNull(other)));
+  }
+
+  private static class And extends CharMatcher {
+    List<CharMatcher> components;
+
+    And(List<CharMatcher> components) {
+      this.components = components; // Skip defensive copy (private)
+    }
+
+    @Override public boolean matches(char c) {
+      for (CharMatcher matcher : components) {
+        if (!matcher.matches(c)) {
+          return false;
+        }
+      }
+      return true;
+    }
+
+    @Override public CharMatcher and(CharMatcher other) {
+      List<CharMatcher> newComponents = new ArrayList<CharMatcher>(components);
+      newComponents.add(checkNotNull(other));
+      return new And(newComponents);
+    }
+  }
+
+  /**
+   * Returns a matcher that matches any character matched by either this matcher or {@code other}.
+   */
+  public CharMatcher or(CharMatcher other) {
+    return new Or(Arrays.asList(this, checkNotNull(other)));
+  }
+
+  private static class Or extends CharMatcher {
+    List<CharMatcher> components;
+
+    Or(List<CharMatcher> components) {
+      this.components = components; // Skip defensive copy (private)
+    }
+
+    @Override public boolean matches(char c) {
+      for (CharMatcher matcher : components) {
+        if (matcher.matches(c)) {
+          return true;
+        }
+      }
+      return false;
+    }
+
+    @Override public CharMatcher or(CharMatcher other) {
+      List<CharMatcher> newComponents = new ArrayList<CharMatcher>(components);
+      newComponents.add(checkNotNull(other));
+      return new Or(newComponents);
+    }
+
+    @Override void setBits(LookupTable table) {
+      for (CharMatcher matcher : components) {
+        matcher.setBits(table);
+      }
+    }
+  }
+
+  /**
+   * Returns a {@code char} matcher functionally equivalent to this one, but which may be faster to
+   * query than the original; your mileage may vary. Precomputation takes time and is likely to be
+   * worthwhile only if the precomputed matcher is queried many thousands of times.
+   *
+   * <p>This method has no effect (returns {@code this}) when called in GWT: it's unclear whether a
+   * precomputed matcher is faster, but it certainly consumes more memory, which doesn't seem like a
+   * worthwhile tradeoff in a browser.
+   */
+  public CharMatcher precomputed() {
+    return Platform.precomputeCharMatcher(this);
+  }
+
+  /**
+   * This is the actual implementation of {@link #precomputed}, but we bounce calls through a method
+   * on {@link Platform} so that we can have different behavior in GWT.
+   *
+   * <p>The default precomputation is to cache the configuration of the original matcher in an
+   * eight-kilobyte bit array. In some situations this produces a matcher which is faster to query
+   * than the original.
+   *
+   * <p>The default implementation creates a new bit array and passes it to {@link
+   * #setBits(LookupTable)}.
+   */
+  CharMatcher precomputedInternal() {
+    final LookupTable table = new LookupTable();
+    setBits(table);
+
+    return new CharMatcher() {
+      @Override public boolean matches(char c) {
+        return table.get(c);
+      }
+
+      // TODO(kevinb): make methods like negate() smart?
+
+      @Override public CharMatcher precomputed() {
+        return this;
+      }
+    };
+  }
+
+  /**
+   * For use by implementors; sets the bit corresponding to each character ('\0' to '{@literal
+   * \}uFFFF') that matches this matcher in the given bit array, leaving all other bits untouched.
+   *
+   * <p>The default implementation loops over every possible character value, invoking {@link
+   * #matches} for each one.
+   */
+  void setBits(LookupTable table) {
+    char c = Character.MIN_VALUE;
+    while (true) {
+      if (matches(c)) {
+        table.set(c);
+      }
+      if (c++ == Character.MAX_VALUE) {
+        break;
+      }
+    }
+  }
+
+  /**
+   * A bit array with one bit per {@code char} value, used by {@link CharMatcher#precomputed}.
+   *
+   * <p>TODO(kevinb): possibly share a common BitArray class with BloomFilter and others... a
+   * simpler java.util.BitSet.
+   */
+  private static final class LookupTable {
+    int[] data = new int[2048];
+
+    void set(char index) {
+      data[index >> 5] |= (1 << index);
+    }
+
+    boolean get(char index) {
+      return (data[index >> 5] & (1 << index)) != 0;
+    }
+  }
+
+  // Text processing routines
+
+  /**
+   * Returns {@code true} if a character sequence contains at least one matching character.
+   * Equivalent to {@code !matchesNoneOf(sequence)}.
+   *
+   * <p>The default implementation iterates over the sequence, invoking {@link #matches} for each
+   * character, until this returns {@code true} or the end is reached.
+   *
+   * @param sequence the character sequence to examine, possibly empty
+   * @return {@code true} if this matcher matches at least one character in the sequence
+   * @since 8.0
+   */
+  public boolean matchesAnyOf(CharSequence sequence) {
+    return !matchesNoneOf(sequence);
+  }
+
+  /**
+   * Returns {@code true} if a character sequence contains only matching characters.
+   *
+   * <p>The default implementation iterates over the sequence, invoking {@link #matches} for each
+   * character, until this returns {@code false} or the end is reached.
+   *
+   * @param sequence the character sequence to examine, possibly empty
+   * @return {@code true} if this matcher matches every character in the sequence, including when
+   *         the sequence is empty
+   */
+  public boolean matchesAllOf(CharSequence sequence) {
+    for (int i = sequence.length() - 1; i >= 0; i--) {
+      if (!matches(sequence.charAt(i))) {
+        return false;
+      }
+    }
+    return true;
+  }
+
+  /**
+   * Returns {@code true} if a character sequence contains no matching characters. Equivalent to
+   * {@code !matchesAnyOf(sequence)}.
+   *
+   * <p>The default implementation iterates over the sequence, invoking {@link #matches} for each
+   * character, until this returns {@code false} or the end is reached.
+   *
+   * @param sequence the character sequence to examine, possibly empty
+   * @return {@code true} if this matcher matches every character in the sequence, including when
+   *         the sequence is empty
+   */
+  public boolean matchesNoneOf(CharSequence sequence) {
+    return indexIn(sequence) == -1;
+  }
+
+  // TODO(kevinb): add matchesAnyOf()
+
+  /**
+   * Returns the index of the first matching character in a character sequence, or {@code -1} if no
+   * matching character is present.
+   *
+   * <p>The default implementation iterates over the sequence in forward order calling {@link
+   * #matches} for each character.
+   *
+   * @param sequence the character sequence to examine from the beginning
+   * @return an index, or {@code -1} if no character matches
+   */
+  public int indexIn(CharSequence sequence) {
+    int length = sequence.length();
+    for (int i = 0; i < length; i++) {
+      if (matches(sequence.charAt(i))) {
+        return i;
+      }
+    }
+    return -1;
+  }
+
+  /**
+   * Returns the index of the first matching character in a character sequence, starting from a
+   * given position, or {@code -1} if no character matches after that position.
+   *
+   * <p>The default implementation iterates over the sequence in forward order, beginning at {@code
+   * start}, calling {@link #matches} for each character.
+   *
+   * @param sequence the character sequence to examine
+   * @param start the first index to examine; must be nonnegative and no greater than {@code
+   *        sequence.length()}
+   * @return the index of the first matching character, guaranteed to be no less than {@code start},
+   *         or {@code -1} if no character matches
+   * @throws IndexOutOfBoundsException if start is negative or greater than {@code
+   *         sequence.length()}
+   */
+  public int indexIn(CharSequence sequence, int start) {
+    int length = sequence.length();
+    Preconditions.checkPositionIndex(start, length);
+    for (int i = start; i < length; i++) {
+      if (matches(sequence.charAt(i))) {
+        return i;
+      }
+    }
+    return -1;
+  }
+
+  /**
+   * Returns the index of the last matching character in a character sequence, or {@code -1} if no
+   * matching character is present.
+   *
+   * <p>The default implementation iterates over the sequence in reverse order calling {@link
+   * #matches} for each character.
+   *
+   * @param sequence the character sequence to examine from the end
+   * @return an index, or {@code -1} if no character matches
+   */
+  public int lastIndexIn(CharSequence sequence) {
+    for (int i = sequence.length() - 1; i >= 0; i--) {
+      if (matches(sequence.charAt(i))) {
+        return i;
+      }
+    }
+    return -1;
+  }
+
+  /**
+   * Returns the number of matching characters found in a character sequence.
+   */
+  public int countIn(CharSequence sequence) {
+    int count = 0;
+    for (int i = 0; i < sequence.length(); i++) {
+      if (matches(sequence.charAt(i))) {
+        count++;
+      }
+    }
+    return count;
+  }
+
+  /**
+   * Returns a string containing all non-matching characters of a character sequence, in order. For
+   * example: <pre>   {@code
+   *
+   *   CharMatcher.is('a').removeFrom("bazaar")}</pre>
+   *
+   * ... returns {@code "bzr"}.
+   */
+  @CheckReturnValue
+  public String removeFrom(CharSequence sequence) {
+    String string = sequence.toString();
+    int pos = indexIn(string);
+    if (pos == -1) {
+      return string;
+    }
+
+    char[] chars = string.toCharArray();
+    int spread = 1;
+
+    // This unusual loop comes from extensive benchmarking
+    OUT: while (true) {
+      pos++;
+      while (true) {
+        if (pos == chars.length) {
+          break OUT;
+        }
+        if (matches(chars[pos])) {
+          break;
+        }
+        chars[pos - spread] = chars[pos];
+        pos++;
+      }
+      spread++;
+    }
+    return new String(chars, 0, pos - spread);
+  }
+
+  /**
+   * Returns a string containing all matching characters of a character sequence, in order. For
+   * example: <pre>   {@code
+   *
+   *   CharMatcher.is('a').retainFrom("bazaar")}</pre>
+   *
+   * ... returns {@code "aaa"}.
+   */
+  @CheckReturnValue
+  public String retainFrom(CharSequence sequence) {
+    return negate().removeFrom(sequence);
+  }
+
+  /**
+   * Returns a string copy of the input character sequence, with each character that matches this
+   * matcher replaced by a given replacement character. For example: <pre>   {@code
+   *
+   *   CharMatcher.is('a').replaceFrom("radar", 'o')}</pre>
+   *
+   * ... returns {@code "rodor"}.
+   *
+   * <p>The default implementation uses {@link #indexIn(CharSequence)} to find the first matching
+   * character, then iterates the remainder of the sequence calling {@link #matches(char)} for each
+   * character.
+   *
+   * @param sequence the character sequence to replace matching characters in
+   * @param replacement the character to append to the result string in place of each matching
+   *        character in {@code sequence}
+   * @return the new string
+   */
+  @CheckReturnValue
+  public String replaceFrom(CharSequence sequence, char replacement) {
+    String string = sequence.toString();
+    int pos = indexIn(string);
+    if (pos == -1) {
+      return string;
+    }
+    char[] chars = string.toCharArray();
+    chars[pos] = replacement;
+    for (int i = pos + 1; i < chars.length; i++) {
+      if (matches(chars[i])) {
+        chars[i] = replacement;
+      }
+    }
+    return new String(chars);
+  }
+
+  /**
+   * Returns a string copy of the input character sequence, with each character that matches this
+   * matcher replaced by a given replacement sequence. For example: <pre>   {@code
+   *
+   *   CharMatcher.is('a').replaceFrom("yaha", "oo")}</pre>
+   *
+   * ... returns {@code "yoohoo"}.
+   *
+   * <p><b>Note:</b> If the replacement is a fixed string with only one character, you are better
+   * off calling {@link #replaceFrom(CharSequence, char)} directly.
+   *
+   * @param sequence the character sequence to replace matching characters in
+   * @param replacement the characters to append to the result string in place of each matching
+   *        character in {@code sequence}
+   * @return the new string
+   */
+  @CheckReturnValue
+  public String replaceFrom(CharSequence sequence, CharSequence replacement) {
+    int replacementLen = replacement.length();
+    if (replacementLen == 0) {
+      return removeFrom(sequence);
+    }
+    if (replacementLen == 1) {
+      return replaceFrom(sequence, replacement.charAt(0));
+    }
+
+    String string = sequence.toString();
+    int pos = indexIn(string);
+    if (pos == -1) {
+      return string;
+    }
+
+    int len = string.length();
+    StringBuilder buf = new StringBuilder((len * 3 / 2) + 16);
+
+    int oldpos = 0;
+    do {
+      buf.append(string, oldpos, pos);
+      buf.append(replacement);
+      oldpos = pos + 1;
+      pos = indexIn(string, oldpos);
+    } while (pos != -1);
+
+    buf.append(string, oldpos, len);
+    return buf.toString();
+  }
+
+  /**
+   * Returns a substring of the input character sequence that omits all characters this matcher
+   * matches from the beginning and from the end of the string. For example: <pre>   {@code
+   *
+   *   CharMatcher.anyOf("ab").trimFrom("abacatbab")}</pre>
+   *
+   * ... returns {@code "cat"}.
+   *
+   * <p>Note that: <pre>   {@code
+   *
+   *   CharMatcher.inRange('\0', ' ').trimFrom(str)}</pre>
+   *
+   * ... is equivalent to {@link String#trim()}.
+   */
+  @CheckReturnValue
+  public String trimFrom(CharSequence sequence) {
+    int len = sequence.length();
+    int first;
+    int last;
+
+    for (first = 0; first < len; first++) {
+      if (!matches(sequence.charAt(first))) {
+        break;
+      }
+    }
+    for (last = len - 1; last > first; last--) {
+      if (!matches(sequence.charAt(last))) {
+        break;
+      }
+    }
+
+    return sequence.subSequence(first, last + 1).toString();
+  }
+
+  /**
+   * Returns a substring of the input character sequence that omits all characters this matcher
+   * matches from the beginning of the string. For example: <pre> {@code
+   *
+   *   CharMatcher.anyOf("ab").trimLeadingFrom("abacatbab")}</pre>
+   *
+   * ... returns {@code "catbab"}.
+   */
+  @CheckReturnValue
+  public String trimLeadingFrom(CharSequence sequence) {
+    int len = sequence.length();
+    int first;
+
+    for (first = 0; first < len; first++) {
+      if (!matches(sequence.charAt(first))) {
+        break;
+      }
+    }
+
+    return sequence.subSequence(first, len).toString();
+  }
+
+  /**
+   * Returns a substring of the input character sequence that omits all characters this matcher
+   * matches from the end of the string. For example: <pre> {@code
+   *
+   *   CharMatcher.anyOf("ab").trimTrailingFrom("abacatbab")}</pre>
+   *
+   * ... returns {@code "abacat"}.
+   */
+  @CheckReturnValue
+  public String trimTrailingFrom(CharSequence sequence) {
+    int len = sequence.length();
+    int last;
+
+    for (last = len - 1; last >= 0; last--) {
+      if (!matches(sequence.charAt(last))) {
+        break;
+      }
+    }
+
+    return sequence.subSequence(0, last + 1).toString();
+  }
+
+  /**
+   * Returns a string copy of the input character sequence, with each group of consecutive
+   * characters that match this matcher replaced by a single replacement character. For example:
+   * <pre>   {@code
+   *
+   *   CharMatcher.anyOf("eko").collapseFrom("bookkeeper", '-')}</pre>
+   *
+   * ... returns {@code "b-p-r"}.
+   *
+   * <p>The default implementation uses {@link #indexIn(CharSequence)} to find the first matching
+   * character, then iterates the remainder of the sequence calling {@link #matches(char)} for each
+   * character.
+   *
+   * @param sequence the character sequence to replace matching groups of characters in
+   * @param replacement the character to append to the result string in place of each group of
+   *        matching characters in {@code sequence}
+   * @return the new string
+   */
+  @CheckReturnValue
+  public String collapseFrom(CharSequence sequence, char replacement) {
+    int first = indexIn(sequence);
+    if (first == -1) {
+      return sequence.toString();
+    }
+
+    // TODO(kevinb): see if this implementation can be made faster
+    StringBuilder builder = new StringBuilder(sequence.length())
+        .append(sequence.subSequence(0, first))
+        .append(replacement);
+    boolean in = true;
+    for (int i = first + 1; i < sequence.length(); i++) {
+      char c = sequence.charAt(i);
+      if (apply(c)) {
+        if (!in) {
+          builder.append(replacement);
+          in = true;
+        }
+      } else {
+        builder.append(c);
+        in = false;
+      }
+    }
+    return builder.toString();
+  }
+
+  /**
+   * Collapses groups of matching characters exactly as {@link #collapseFrom} does, except that
+   * groups of matching characters at the start or end of the sequence are removed without
+   * replacement.
+   */
+  @CheckReturnValue
+  public String trimAndCollapseFrom(CharSequence sequence, char replacement) {
+    int first = negate().indexIn(sequence);
+    if (first == -1) {
+      return ""; // everything matches. nothing's left.
+    }
+    StringBuilder builder = new StringBuilder(sequence.length());
+    boolean inMatchingGroup = false;
+    for (int i = first; i < sequence.length(); i++) {
+      char c = sequence.charAt(i);
+      if (apply(c)) {
+        inMatchingGroup = true;
+      } else {
+        if (inMatchingGroup) {
+          builder.append(replacement);
+          inMatchingGroup = false;
+        }
+        builder.append(c);
+      }
+    }
+    return builder.toString();
+  }
+
+  // Predicate interface
+
+  /**
+   * Returns {@code true} if this matcher matches the given character.
+   *
+   * @throws NullPointerException if {@code character} is null
+   */
+  @Override public boolean apply(Character character) {
+    return matches(character);
+  }
+}
diff --git a/guava/src/com/google/common/base/Charsets.java b/guava/src/com/google/common/base/Charsets.java
new file mode 100644
index 0000000..407e798
--- /dev/null
+++ b/guava/src/com/google/common/base/Charsets.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base;
+
+import java.nio.charset.Charset;
+
+/**
+ * Contains constant definitions for the six standard {@link Charset} instances, which are
+ * guaranteed to be supported by all Java platform implementations.
+ *
+ * @author Mike Bostock
+ * @since 1.0
+ */
+public final class Charsets {
+  private Charsets() {}
+
+  /**
+   * US-ASCII: seven-bit ASCII, the Basic Latin block of the Unicode character set (ISO646-US).
+   */
+  public static final Charset US_ASCII = Charset.forName("US-ASCII");
+
+  /**
+   * ISO-8859-1: ISO Latin Alphabet Number 1 (ISO-LATIN-1).
+   */
+  public static final Charset ISO_8859_1 = Charset.forName("ISO-8859-1");
+
+  /**
+   * UTF-8: eight-bit UCS Transformation Format.
+   */
+  public static final Charset UTF_8 = Charset.forName("UTF-8");
+
+  /**
+   * UTF-16BE: sixteen-bit UCS Transformation Format, big-endian byte order.
+   */
+  public static final Charset UTF_16BE = Charset.forName("UTF-16BE");
+
+  /**
+   * UTF-16LE: sixteen-bit UCS Transformation Format, little-endian byte order.
+   */
+  public static final Charset UTF_16LE = Charset.forName("UTF-16LE");
+
+  /**
+   * UTF-16: sixteen-bit UCS Transformation Format, byte order identified by an optional byte-order
+   * mark.
+   */
+  public static final Charset UTF_16 = Charset.forName("UTF-16");
+
+  /*
+   * Please do not add new Charset references to this class, unless those character encodings are
+   * part of the set required to be supported by all Java platform implementations! Any Charsets
+   * initialized here may cause unexpected delays when this class is loaded. See the Charset
+   * Javadocs for the list of built-in character encodings.
+   */
+}
diff --git a/guava/src/com/google/common/base/Defaults.java b/guava/src/com/google/common/base/Defaults.java
new file mode 100644
index 0000000..f98cbbf
--- /dev/null
+++ b/guava/src/com/google/common/base/Defaults.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * This class provides default values for all Java types, as defined by the JLS.
+ *
+ * @author Ben Yu
+ */
+public final class Defaults {
+  private Defaults() {}
+
+  private static final Map<Class<?>, Object> DEFAULTS;
+
+  static {
+    Map<Class<?>, Object> map = new HashMap<Class<?>, Object>();
+    put(map, boolean.class, false);
+    put(map, char.class, '\0');
+    put(map, byte.class, (byte) 0);
+    put(map, short.class, (short) 0);
+    put(map, int.class, 0);
+    put(map, long.class, 0L);
+    put(map, float.class, 0f);
+    put(map, double.class, 0d);
+    DEFAULTS = Collections.unmodifiableMap(map);
+  }
+
+  private static <T> void put(Map<Class<?>, Object> map, Class<T> type, T value) {
+    map.put(type, value);
+  }
+
+  /**
+   * Returns the default value of {@code type} as defined by JLS --- {@code 0} for numbers, {@code
+   * false} for {@code boolean} and {@code '\0'} for {@code char}. For non-primitive types and
+   * {@code void}, null is returned.
+   */
+  @SuppressWarnings("unchecked")
+  public static <T> T defaultValue(Class<T> type) {
+    return (T) DEFAULTS.get(type);
+  }
+}
diff --git a/guava/src/com/google/common/base/Enums.java b/guava/src/com/google/common/base/Enums.java
new file mode 100644
index 0000000..f98e164
--- /dev/null
+++ b/guava/src/com/google/common/base/Enums.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+
+import java.io.Serializable;
+
+import javax.annotation.Nullable;
+
+/**
+ * Utility methods for working with {@link Enum} instances.
+ *
+ * @author Steve McKay
+ *
+ * @since 9.0
+ */
+@GwtCompatible
+@Beta
+public final class Enums {
+
+  private Enums() {}
+
+  /**
+   * Returns a {@link Function} that maps an {@link Enum} name to the associated
+   * {@code Enum} constant. The {@code Function} will return {@code null} if the
+   * {@code Enum} constant does not exist.
+   *
+   * @param enumClass the {@link Class} of the {@code Enum} declaring the
+   *     constant values.
+   */
+  public static <T extends Enum<T>> Function<String, T> valueOfFunction(Class<T> enumClass) {
+    return new ValueOfFunction<T>(enumClass);
+  }
+
+  /**
+   * {@link Function} that maps an {@link Enum} name to the associated
+   * constant, or {@code null} if the constant does not exist.
+   */
+  private static final class ValueOfFunction<T extends Enum<T>> implements
+      Function<String, T>, Serializable {
+
+    private final Class<T> enumClass;
+
+    private ValueOfFunction(Class<T> enumClass) {
+      this.enumClass = checkNotNull(enumClass);
+    }
+
+    @Override
+    public T apply(String value) {
+      try {
+        return Enum.valueOf(enumClass, value);
+      } catch (IllegalArgumentException e) {
+        return null;
+      }
+    }
+
+    @Override public boolean equals(@Nullable Object obj) {
+      return obj instanceof ValueOfFunction &&
+          enumClass.equals(((ValueOfFunction) obj).enumClass);
+    }
+
+    @Override public int hashCode() {
+      return enumClass.hashCode();
+    }
+
+    @Override public String toString() {
+      return "Enums.valueOf(" + enumClass + ")";
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+}
diff --git a/guava/src/com/google/common/base/Equivalence.java b/guava/src/com/google/common/base/Equivalence.java
new file mode 100644
index 0000000..f6e89bd
--- /dev/null
+++ b/guava/src/com/google/common/base/Equivalence.java
@@ -0,0 +1,296 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+
+import java.io.Serializable;
+
+import javax.annotation.Nullable;
+
+/**
+ * A strategy for determining whether two instances are considered equivalent. Examples of
+ * equivalences are the {@link Equivalences#identity() identity equivalence} and {@link
+ * Equivalences#equals equals equivalence}.
+ *
+ * @author Bob Lee
+ * @author Ben Yu
+ * @author Gregory Kick
+ * @since 10.0 (<a href="http://code.google.com/p/guava-libraries/wiki/Compatibility"
+ *        >mostly source-compatible</a> since 4.0)
+ */
+@Beta
+@GwtCompatible
+public abstract class Equivalence<T> {
+  /**
+   * Constructor for use by subclasses.
+   */
+  protected Equivalence() {}
+
+  /**
+   * Returns {@code true} if the given objects are considered equivalent.
+   *
+   * <p>The {@code equivalent} method implements an equivalence relation on object references:
+   *
+   * <ul>
+   * <li>It is <i>reflexive</i>: for any reference {@code x}, including null, {@code
+   *     equivalent(x, x)} returns {@code true}.
+   * <li>It is <i>symmetric</i>: for any references {@code x} and {@code y}, {@code
+   *     equivalent(x, y) == equivalent(y, x)}.
+   * <li>It is <i>transitive</i>: for any references {@code x}, {@code y}, and {@code z}, if
+   *     {@code equivalent(x, y)} returns {@code true} and {@code equivalent(y, z)} returns {@code
+   *     true}, then {@code equivalent(x, z)} returns {@code true}.
+   * <li>It is <i>consistent</i>: for any references {@code x} and {@code y}, multiple invocations
+   *     of {@code equivalent(x, y)} consistently return {@code true} or consistently return {@code
+   *     false} (provided that neither {@code x} nor {@code y} is modified).
+   * </ul>
+   */
+  public final boolean equivalent(@Nullable T a, @Nullable T b) {
+    if (a == b) {
+      return true;
+    }
+    if (a == null || b == null) {
+      return false;
+    }
+    return doEquivalent(a, b);
+  }
+
+  /**
+   * Returns {@code true} if {@code a} and {@code b} are considered equivalent.
+   *
+   * <p>Called by {@link #equivalent}. {@code a} and {@code b} are not the same
+   * object and are not nulls.
+   *
+   * @since 10.0 (previously, subclasses would override equivalent())
+   */
+  protected abstract boolean doEquivalent(T a, T b);
+
+  /**
+   * Returns a hash code for {@code t}.
+   *
+   * <p>The {@code hash} has the following properties:
+   * <ul>
+   * <li>It is <i>consistent</i>: for any reference {@code x}, multiple invocations of
+   *     {@code hash(x}} consistently return the same value provided {@code x} remains unchanged
+   *     according to the definition of the equivalence. The hash need not remain consistent from
+   *     one execution of an application to another execution of the same application.
+   * <li>It is <i>distributable accross equivalence</i>: for any references {@code x} and {@code y},
+   *     if {@code equivalent(x, y)}, then {@code hash(x) == hash(y)}. It is <i>not</i> necessary
+   *     that the hash be distributable accorss <i>inequivalence</i>. If {@code equivalence(x, y)}
+   *     is false, {@code hash(x) == hash(y)} may still be true.
+   * <li>{@code hash(null)} is {@code 0}.
+   * </ul>
+   */
+  public final int hash(@Nullable T t) {
+    if (t == null) {
+      return 0;
+    }
+    return doHash(t);
+  }
+
+  /**
+   * Returns a hash code for non-null object {@code t}.
+   *
+   * <p>Called by {@link #hash}.
+   *
+   * @since 10.0 (previously, subclasses would override hash())
+   */
+  protected abstract int doHash(T t);
+
+  /**
+   * Returns a new equivalence relation for {@code F} which evaluates equivalence by first applying
+   * {@code function} to the argument, then evaluating using {@code this}. That is, for any pair of
+   * non-null objects {@code x} and {@code y}, {@code
+   * equivalence.onResultOf(function).equivalent(a, b)} is true if and only if {@code
+   * equivalence.equivalent(function.apply(a), function.apply(b))} is true.
+   *
+   * <p>For example: <pre>   {@code
+   *
+   *    Equivalence<Person> SAME_AGE = Equivalences.equals().onResultOf(GET_PERSON_AGE);
+   * }</pre>
+   * 
+   * <p>{@code function} will never be invoked with a null value.
+   * 
+   * <p>Note that {@code function} must be consistent according to {@code this} equivalence
+   * relation. That is, invoking {@link Function#apply} multiple times for a given value must return
+   * equivalent results.
+   * For example, {@code Equivalences.identity().onResultOf(Functions.toStringFunction())} is broken
+   * because it's not guaranteed that {@link Object#toString}) always returns the same string
+   * instance.
+   * 
+   * @since 10.0
+   */
+  public final <F> Equivalence<F> onResultOf(Function<F, ? extends T> function) {
+    return new FunctionalEquivalence<F, T>(function, this);
+  }
+  
+  /**
+   * Returns a wrapper of {@code reference} that implements
+   * {@link Wrapper#equals(Object) Object.equals()} such that
+   * {@code wrap(this, a).equals(wrap(this, b))} if and only if {@code this.equivalent(a, b)}.
+   * 
+   * @since 10.0
+   */
+  public final <S extends T> Wrapper<S> wrap(@Nullable S reference) {
+    return new Wrapper<S>(this, reference);
+  }
+
+  /**
+   * Wraps an object so that {@link #equals(Object)} and {@link #hashCode()} delegate to an
+   * {@link Equivalence}.
+   *
+   * <p>For example, given an {@link Equivalence} for {@link String strings} named {@code equiv}
+   * that tests equivalence using their lengths:
+   *
+   * <pre>   {@code
+   *   equiv.wrap("a").equals(equiv.wrap("b")) // true
+   *   equiv.wrap("a").equals(equiv.wrap("hello")) // false
+   * }</pre>
+   *
+   * <p>Note in particular that an equivalence wrapper is never equal to the object it wraps.
+   *
+   * <pre>   {@code
+   *   equiv.wrap(obj).equals(obj) // always false
+   * }</pre>
+   *
+   * @since 10.0
+   */
+  @Beta
+  public static final class Wrapper<T> implements Serializable {
+    private final Equivalence<? super T> equivalence;
+    @Nullable private final T reference;
+
+    private Wrapper(Equivalence<? super T> equivalence, @Nullable T reference) {
+      this.equivalence = checkNotNull(equivalence);
+      this.reference = reference;
+    }
+
+    /** Returns the (possibly null) reference wrapped by this instance. */
+    @Nullable public T get() {
+      return reference;
+    }
+
+    /**
+     * Returns {@code true} if {@link Equivalence#equivalent(Object, Object)} applied to the wrapped
+     * references is {@code true} and both wrappers use the {@link Object#equals(Object) same}
+     * equivalence.
+     */
+    @Override public boolean equals(@Nullable Object obj) {
+      if (obj == this) {
+        return true;
+      } else if (obj instanceof Wrapper) {
+        Wrapper<?> that = (Wrapper<?>) obj;
+        /*
+         * We cast to Equivalence<Object> here because we can't check the type of the reference held
+         * by the other wrapper.  But, by checking that the Equivalences are equal, we know that
+         * whatever type it is, it is assignable to the type handled by this wrapper's equivalence.
+         */
+        @SuppressWarnings("unchecked")
+        Equivalence<Object> equivalence = (Equivalence<Object>) this.equivalence;
+        return equivalence.equals(that.equivalence)
+            && equivalence.equivalent(this.reference, that.reference);
+      } else {
+        return false;
+      }
+    }
+
+    /**
+     * Returns the result of {@link Equivalence#hash(Object)} applied to the the wrapped reference.
+     */
+    @Override public int hashCode() {
+      return equivalence.hash(reference);
+    }
+
+    /**
+     * Returns a string representation for this equivalence wrapper. The form of this string
+     * representation is not specified.
+     */
+    @Override public String toString() {
+      return equivalence + ".wrap(" + reference + ")";
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  /**
+   * Returns an equivalence over iterables based on the equivalence of their elements.  More
+   * specifically, two iterables are considered equivalent if they both contain the same number of
+   * elements, and each pair of corresponding elements is equivalent according to
+   * {@code this}.  Null iterables are equivalent to one another.
+   * 
+   * <p>Note that this method performs a similar function for equivalences as {@link
+   * com.google.common.collect.Ordering#lexicographical} does for orderings.
+   *
+   * @since 10.0
+   */
+  @GwtCompatible(serializable = true)
+  public final <S extends T> Equivalence<Iterable<S>> pairwise() {
+    // Ideally, the returned equivalence would support Iterable<? extends T>. However,
+    // the need for this is so rare that it's not worth making callers deal with the ugly wildcard.
+    return new PairwiseEquivalence<S>(this);
+  }
+  
+  /**
+   * Returns a predicate that evaluates to true if and only if the input is
+   * equivalent to {@code target} according to this equivalence relation.
+   * 
+   * @since 10.0
+   */
+  public final Predicate<T> equivalentTo(@Nullable T target) {
+    return new EquivalentToPredicate<T>(this, target);
+  }
+
+  private static final class EquivalentToPredicate<T> implements Predicate<T>, Serializable {
+
+    private final Equivalence<T> equivalence;
+    @Nullable private final T target;
+
+    EquivalentToPredicate(Equivalence<T> equivalence, @Nullable T target) {
+      this.equivalence = checkNotNull(equivalence);
+      this.target = target;
+    }
+
+    @Override public boolean apply(@Nullable T input) {
+      return equivalence.equivalent(input, target);
+    }
+
+    @Override public boolean equals(@Nullable Object obj) {
+      if (this == obj) {
+        return true;
+      }
+      if (obj instanceof EquivalentToPredicate) {
+        EquivalentToPredicate<?> that = (EquivalentToPredicate<?>) obj;
+        return equivalence.equals(that.equivalence)
+            && Objects.equal(target, that.target);
+      }
+      return false;
+    }
+
+    @Override public int hashCode() {
+      return Objects.hashCode(equivalence, target);
+    }
+
+    @Override public String toString() {
+      return equivalence + ".equivalentTo(" + target + ")";
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+}
diff --git a/guava/src/com/google/common/base/Equivalences.java b/guava/src/com/google/common/base/Equivalences.java
new file mode 100644
index 0000000..6c88dcf
--- /dev/null
+++ b/guava/src/com/google/common/base/Equivalences.java
@@ -0,0 +1,97 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+
+import java.io.Serializable;
+
+/**
+ * Contains static factory methods for creating {@code Equivalence} instances.
+ *
+ * <p>All methods return serializable instances.
+ *
+ * @author Bob Lee
+ * @author Kurt Alfred Kluever
+ * @author Gregory Kick
+ * @since 4.0
+ */
+@Beta
+@GwtCompatible
+public final class Equivalences {
+  private Equivalences() {}
+
+  /**
+   * Returns an equivalence that delegates to {@link Object#equals} and {@link Object#hashCode}.
+   * {@link Equivalence#equivalent} returns {@code true} if both values are null, or if neither
+   * value is null and {@link Object#equals} returns {@code true}. {@link Equivalence#hash} returns
+   * {@code 0} if passed a null value.
+   *
+   * @since 8.0 (present null-friendly behavior)
+   * @since 4.0 (otherwise)
+   */
+  public static Equivalence<Object> equals() {
+    return Equals.INSTANCE;
+  }
+
+  /**
+   * Returns an equivalence that uses {@code ==} to compare values and {@link
+   * System#identityHashCode(Object)} to compute the hash code.  {@link Equivalence#equivalent}
+   * returns {@code true} if {@code a == b}, including in the case that a and b are both null.
+   */
+  public static Equivalence<Object> identity() {
+    return Identity.INSTANCE;
+  }
+
+  private static final class Equals extends Equivalence<Object>
+      implements Serializable {
+    
+    static final Equals INSTANCE = new Equals();
+
+    @Override protected boolean doEquivalent(Object a, Object b) {
+      return a.equals(b);
+    }
+    @Override public int doHash(Object o) {
+      return o.hashCode();
+    }
+
+    private Object readResolve() {
+      return INSTANCE;
+    } 
+    private static final long serialVersionUID = 1;
+  }
+  
+  private static final class Identity extends Equivalence<Object>
+      implements Serializable {
+    
+    static final Identity INSTANCE = new Identity();
+    
+    @Override protected boolean doEquivalent(Object a, Object b) {
+      return false;
+    }
+
+    @Override protected int doHash(Object o) {
+      return System.identityHashCode(o);
+    }
+ 
+    private Object readResolve() {
+      return INSTANCE;
+    }
+    private static final long serialVersionUID = 1;
+  }
+}
diff --git a/guava/src/com/google/common/base/FinalizablePhantomReference.java b/guava/src/com/google/common/base/FinalizablePhantomReference.java
new file mode 100644
index 0000000..c694bc9
--- /dev/null
+++ b/guava/src/com/google/common/base/FinalizablePhantomReference.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base;
+
+import java.lang.ref.PhantomReference;
+import java.lang.ref.ReferenceQueue;
+
+/**
+ * Phantom reference with a {@code finalizeReferent()} method which a background thread invokes
+ * after the garbage collector reclaims the referent. This is a simpler alternative to using a
+ * {@link ReferenceQueue}.
+ *
+ * <p>Unlike a normal phantom reference, this reference will be cleared automatically.
+ *
+ * @author Bob Lee
+ * @since 2.0 (imported from Google Collections Library)
+ */
+public abstract class FinalizablePhantomReference<T> extends PhantomReference<T>
+    implements FinalizableReference {
+  /**
+   * Constructs a new finalizable phantom reference.
+   *
+   * @param referent to phantom reference
+   * @param queue that should finalize the referent
+   */
+  protected FinalizablePhantomReference(T referent, FinalizableReferenceQueue queue) {
+    super(referent, queue.queue);
+    queue.cleanUp();
+  }
+}
diff --git a/guava/src/com/google/common/base/FinalizableReference.java b/guava/src/com/google/common/base/FinalizableReference.java
new file mode 100644
index 0000000..ab2dec3
--- /dev/null
+++ b/guava/src/com/google/common/base/FinalizableReference.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base;
+
+/**
+ * Implemented by references that have code to run after garbage collection of their referents.
+ *
+ * @see FinalizableReferenceQueue
+ * @author Bob Lee
+ * @since 2.0 (imported from Google Collections Library)
+ */
+public interface FinalizableReference {
+  /**
+   * Invoked on a background thread after the referent has been garbage collected unless security
+   * restrictions prevented starting a background thread, in which case this method is invoked when
+   * new references are created.
+   */
+  void finalizeReferent();
+}
diff --git a/guava/src/com/google/common/base/FinalizableReferenceQueue.java b/guava/src/com/google/common/base/FinalizableReferenceQueue.java
new file mode 100644
index 0000000..f300b33
--- /dev/null
+++ b/guava/src/com/google/common/base/FinalizableReferenceQueue.java
@@ -0,0 +1,286 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base;
+
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.lang.ref.Reference;
+import java.lang.ref.ReferenceQueue;
+import java.lang.reflect.Method;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * A reference queue with an associated background thread that dequeues references and invokes
+ * {@link FinalizableReference#finalizeReferent()} on them.
+ *
+ * <p>Keep a strong reference to this object until all of the associated referents have been
+ * finalized. If this object is garbage collected earlier, the backing thread will not invoke {@code
+ * finalizeReferent()} on the remaining references.
+ *
+ * @author Bob Lee
+ * @since 2.0 (imported from Google Collections Library)
+ */
+public class FinalizableReferenceQueue {
+  /*
+   * The Finalizer thread keeps a phantom reference to this object. When the client (for example, a
+   * map built by MapMaker) no longer has a strong reference to this object, the garbage collector
+   * will reclaim it and enqueue the phantom reference. The enqueued reference will trigger the
+   * Finalizer to stop.
+   *
+   * If this library is loaded in the system class loader, FinalizableReferenceQueue can load
+   * Finalizer directly with no problems.
+   *
+   * If this library is loaded in an application class loader, it's important that Finalizer not
+   * have a strong reference back to the class loader. Otherwise, you could have a graph like this:
+   *
+   * Finalizer Thread runs instance of -> Finalizer.class loaded by -> Application class loader
+   * which loaded -> ReferenceMap.class which has a static -> FinalizableReferenceQueue instance
+   *
+   * Even if no other references to classes from the application class loader remain, the Finalizer
+   * thread keeps an indirect strong reference to the queue in ReferenceMap, which keeps the
+   * Finalizer running, and as a result, the application class loader can never be reclaimed.
+   *
+   * This means that dynamically loaded web applications and OSGi bundles can't be unloaded.
+   *
+   * If the library is loaded in an application class loader, we try to break the cycle by loading
+   * Finalizer in its own independent class loader:
+   *
+   * System class loader -> Application class loader -> ReferenceMap -> FinalizableReferenceQueue
+   * -> etc. -> Decoupled class loader -> Finalizer
+   *
+   * Now, Finalizer no longer keeps an indirect strong reference to the static
+   * FinalizableReferenceQueue field in ReferenceMap. The application class loader can be reclaimed
+   * at which point the Finalizer thread will stop and its decoupled class loader can also be
+   * reclaimed.
+   *
+   * If any of this fails along the way, we fall back to loading Finalizer directly in the
+   * application class loader.
+   */
+
+  private static final Logger logger = Logger.getLogger(FinalizableReferenceQueue.class.getName());
+
+  private static final String FINALIZER_CLASS_NAME = "com.google.common.base.internal.Finalizer";
+
+  /** Reference to Finalizer.startFinalizer(). */
+  private static final Method startFinalizer;
+  static {
+    Class<?> finalizer = loadFinalizer(
+        new SystemLoader(), new DecoupledLoader(), new DirectLoader());
+    startFinalizer = getStartFinalizer(finalizer);
+  }
+
+  /**
+   * The actual reference queue that our background thread will poll.
+   */
+  final ReferenceQueue<Object> queue;
+
+  /**
+   * Whether or not the background thread started successfully.
+   */
+  final boolean threadStarted;
+
+  /**
+   * Constructs a new queue.
+   */
+  @SuppressWarnings("unchecked")
+  public FinalizableReferenceQueue() {
+    // We could start the finalizer lazily, but I'd rather it blow up early.
+    ReferenceQueue<Object> queue;
+    boolean threadStarted = false;
+    try {
+      queue = (ReferenceQueue<Object>)
+          startFinalizer.invoke(null, FinalizableReference.class, this);
+      threadStarted = true;
+    } catch (IllegalAccessException impossible) {
+      throw new AssertionError(impossible); // startFinalizer() is public
+    } catch (Throwable t) {
+      logger.log(Level.INFO, "Failed to start reference finalizer thread."
+          + " Reference cleanup will only occur when new references are created.", t);
+      queue = new ReferenceQueue<Object>();
+    }
+
+    this.queue = queue;
+    this.threadStarted = threadStarted;
+  }
+
+  /**
+   * Repeatedly dequeues references from the queue and invokes {@link
+   * FinalizableReference#finalizeReferent()} on them until the queue is empty. This method is a
+   * no-op if the background thread was created successfully.
+   */
+  void cleanUp() {
+    if (threadStarted) {
+      return;
+    }
+
+    Reference<?> reference;
+    while ((reference = queue.poll()) != null) {
+      /*
+       * This is for the benefit of phantom references. Weak and soft references will have already
+       * been cleared by this point.
+       */
+      reference.clear();
+      try {
+        ((FinalizableReference) reference).finalizeReferent();
+      } catch (Throwable t) {
+        logger.log(Level.SEVERE, "Error cleaning up after reference.", t);
+      }
+    }
+  }
+
+  /**
+   * Iterates through the given loaders until it finds one that can load Finalizer.
+   *
+   * @return Finalizer.class
+   */
+  private static Class<?> loadFinalizer(FinalizerLoader... loaders) {
+    for (FinalizerLoader loader : loaders) {
+      Class<?> finalizer = loader.loadFinalizer();
+      if (finalizer != null) {
+        return finalizer;
+      }
+    }
+
+    throw new AssertionError();
+  }
+
+  /**
+   * Loads Finalizer.class.
+   */
+  interface FinalizerLoader {
+
+    /**
+     * Returns Finalizer.class or null if this loader shouldn't or can't load it.
+     *
+     * @throws SecurityException if we don't have the appropriate privileges
+     */
+    Class<?> loadFinalizer();
+  }
+
+  /**
+   * Tries to load Finalizer from the system class loader. If Finalizer is in the system class path,
+   * we needn't create a separate loader.
+   */
+  static class SystemLoader implements FinalizerLoader {
+    @Override
+    public Class<?> loadFinalizer() {
+      ClassLoader systemLoader;
+      try {
+        systemLoader = ClassLoader.getSystemClassLoader();
+      } catch (SecurityException e) {
+        logger.info("Not allowed to access system class loader.");
+        return null;
+      }
+      if (systemLoader != null) {
+        try {
+          return systemLoader.loadClass(FINALIZER_CLASS_NAME);
+        } catch (ClassNotFoundException e) {
+          // Ignore. Finalizer is simply in a child class loader.
+          return null;
+        }
+      } else {
+        return null;
+      }
+    }
+  }
+
+  /**
+   * Try to load Finalizer in its own class loader. If Finalizer's thread had a direct reference to
+   * our class loader (which could be that of a dynamically loaded web application or OSGi bundle),
+   * it would prevent our class loader from getting garbage collected.
+   */
+  static class DecoupledLoader implements FinalizerLoader {
+    private static final String LOADING_ERROR = "Could not load Finalizer in its own class loader."
+        + "Loading Finalizer in the current class loader instead. As a result, you will not be able"
+        + "to garbage collect this class loader. To support reclaiming this class loader, either"
+        + "resolve the underlying issue, or move Google Collections to your system class path.";
+
+    @Override
+    public Class<?> loadFinalizer() {
+      try {
+        /*
+         * We use URLClassLoader because it's the only concrete class loader implementation in the
+         * JDK. If we used our own ClassLoader subclass, Finalizer would indirectly reference this
+         * class loader:
+         *
+         * Finalizer.class -> CustomClassLoader -> CustomClassLoader.class -> This class loader
+         *
+         * System class loader will (and must) be the parent.
+         */
+        ClassLoader finalizerLoader = newLoader(getBaseUrl());
+        return finalizerLoader.loadClass(FINALIZER_CLASS_NAME);
+      } catch (Exception e) {
+        logger.log(Level.WARNING, LOADING_ERROR, e);
+        return null;
+      }
+    }
+
+    /**
+     * Gets URL for base of path containing Finalizer.class.
+     */
+    URL getBaseUrl() throws IOException {
+      // Find URL pointing to Finalizer.class file.
+      String finalizerPath = FINALIZER_CLASS_NAME.replace('.', '/') + ".class";
+      URL finalizerUrl = getClass().getClassLoader().getResource(finalizerPath);
+      if (finalizerUrl == null) {
+        throw new FileNotFoundException(finalizerPath);
+      }
+
+      // Find URL pointing to base of class path.
+      String urlString = finalizerUrl.toString();
+      if (!urlString.endsWith(finalizerPath)) {
+        throw new IOException("Unsupported path style: " + urlString);
+      }
+      urlString = urlString.substring(0, urlString.length() - finalizerPath.length());
+      return new URL(finalizerUrl, urlString);
+    }
+
+    /** Creates a class loader with the given base URL as its classpath. */
+    URLClassLoader newLoader(URL base) {
+      return new URLClassLoader(new URL[] {base});
+    }
+  }
+
+  /**
+   * Loads Finalizer directly using the current class loader. We won't be able to garbage collect
+   * this class loader, but at least the world doesn't end.
+   */
+  static class DirectLoader implements FinalizerLoader {
+    @Override
+    public Class<?> loadFinalizer() {
+      try {
+        return Class.forName(FINALIZER_CLASS_NAME);
+      } catch (ClassNotFoundException e) {
+        throw new AssertionError(e);
+      }
+    }
+  }
+
+  /**
+   * Looks up Finalizer.startFinalizer().
+   */
+  static Method getStartFinalizer(Class<?> finalizer) {
+    try {
+      return finalizer.getMethod("startFinalizer", Class.class, Object.class);
+    } catch (NoSuchMethodException e) {
+      throw new AssertionError(e);
+    }
+  }
+}
diff --git a/guava/src/com/google/common/base/FinalizableSoftReference.java b/guava/src/com/google/common/base/FinalizableSoftReference.java
new file mode 100644
index 0000000..88607f4
--- /dev/null
+++ b/guava/src/com/google/common/base/FinalizableSoftReference.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base;
+
+import java.lang.ref.ReferenceQueue;
+import java.lang.ref.SoftReference;
+
+/**
+ * Soft reference with a {@code finalizeReferent()} method which a background thread invokes after
+ * the garbage collector reclaims the referent. This is a simpler alternative to using a {@link
+ * ReferenceQueue}.
+ *
+ * @author Bob Lee
+ * @since 2.0 (imported from Google Collections Library)
+ */
+public abstract class FinalizableSoftReference<T> extends SoftReference<T>
+    implements FinalizableReference {
+  /**
+   * Constructs a new finalizable soft reference.
+   *
+   * @param referent to softly reference
+   * @param queue that should finalize the referent
+   */
+  protected FinalizableSoftReference(T referent, FinalizableReferenceQueue queue) {
+    super(referent, queue.queue);
+    queue.cleanUp();
+  }
+}
diff --git a/guava/src/com/google/common/base/FinalizableWeakReference.java b/guava/src/com/google/common/base/FinalizableWeakReference.java
new file mode 100644
index 0000000..b14d023
--- /dev/null
+++ b/guava/src/com/google/common/base/FinalizableWeakReference.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base;
+
+import java.lang.ref.ReferenceQueue;
+import java.lang.ref.WeakReference;
+
+/**
+ * Weak reference with a {@code finalizeReferent()} method which a background thread invokes after
+ * the garbage collector reclaims the referent. This is a simpler alternative to using a {@link
+ * ReferenceQueue}.
+ *
+ * @author Bob Lee
+ * @since 2.0 (imported from Google Collections Library)
+ */
+public abstract class FinalizableWeakReference<T> extends WeakReference<T>
+    implements FinalizableReference {
+  /**
+   * Constructs a new finalizable weak reference.
+   *
+   * @param referent to weakly reference
+   * @param queue that should finalize the referent
+   */
+  protected FinalizableWeakReference(T referent, FinalizableReferenceQueue queue) {
+    super(referent, queue.queue);
+    queue.cleanUp();
+  }
+}
diff --git a/guava/src/com/google/common/base/Function.java b/guava/src/com/google/common/base/Function.java
new file mode 100644
index 0000000..6289fa4
--- /dev/null
+++ b/guava/src/com/google/common/base/Function.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base;
+
+import com.google.common.annotations.GwtCompatible;
+
+import javax.annotation.Nullable;
+
+/**
+ * Determines an output value based on an input value.
+ *
+ * @author Kevin Bourrillion
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible
+public interface Function<F, T> {
+  /**
+   * Returns the result of applying this function to {@code input}. This method is <i>generally
+   * expected</i>, but not absolutely required, to have the following properties:
+   *
+   * <ul>
+   * <li>Its execution does not cause any observable side effects.
+   * <li>The computation is <i>consistent with equals</i>; that is, {@link Objects#equal
+   *     Objects.equal}{@code (a, b)} implies that {@code Objects.equal(function.apply(a),
+   *     function.apply(b))}.
+   * </ul>
+   *
+   * @throws NullPointerException if {@code input} is null and this function does not accept null
+   *     arguments
+   */
+  T apply(@Nullable F input);
+
+  /**
+   * Indicates whether another object is equal to this function.
+   *
+   * <p>Most implementations will have no reason to override the behavior of {@link Object#equals}.
+   * However, an implementation may also choose to return {@code true} whenever {@code object} is a
+   * {@link Function} that it considers <i>interchangeable</i> with this one. "Interchangeable"
+   * <i>typically</i> means that {@code Objects.equal(this.apply(f), that.apply(f))} is true for all
+   * {@code f} of type {@code F}. Note that a {@code false} result from this method does not imply
+   * that the functions are known <i>not</i> to be interchangeable.
+   */
+  @Override
+  boolean equals(@Nullable Object object);
+}
diff --git a/guava/src/com/google/common/base/FunctionalEquivalence.java b/guava/src/com/google/common/base/FunctionalEquivalence.java
new file mode 100644
index 0000000..a5e9c13
--- /dev/null
+++ b/guava/src/com/google/common/base/FunctionalEquivalence.java
@@ -0,0 +1,77 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+
+import java.io.Serializable;
+
+import javax.annotation.Nullable;
+
+/**
+ * Equivalence applied on functional result.
+ *
+ * @author Bob Lee
+ * @since 10.0
+ */
+@Beta
+@GwtCompatible
+final class FunctionalEquivalence<F, T> extends Equivalence<F>
+    implements Serializable {
+
+  private static final long serialVersionUID = 0;
+
+  private final Function<F, ? extends T> function;
+  private final Equivalence<T> resultEquivalence;
+
+  FunctionalEquivalence(
+      Function<F, ? extends T> function, Equivalence<T> resultEquivalence) {
+    this.function = checkNotNull(function);
+    this.resultEquivalence = checkNotNull(resultEquivalence);
+  }
+
+  @Override protected boolean doEquivalent(F a, F b) {
+    return resultEquivalence.equivalent(function.apply(a), function.apply(b));
+  }
+
+  @Override protected int doHash(F a) {
+    return resultEquivalence.hash(function.apply(a));
+  }
+
+  @Override public boolean equals(@Nullable Object obj) {
+    if (obj == this) {
+      return true;
+    }
+    if (obj instanceof FunctionalEquivalence) {
+      FunctionalEquivalence<?, ?> that = (FunctionalEquivalence<?, ?>) obj;
+      return function.equals(that.function)
+          && resultEquivalence.equals(that.resultEquivalence);
+    }
+    return false;
+  }
+
+  @Override public int hashCode() {
+    return Objects.hashCode(function, resultEquivalence);
+  }
+
+  @Override public String toString() {
+    return resultEquivalence + ".onResultOf(" + function + ")";
+  }
+}
diff --git a/guava/src/com/google/common/base/Functions.java b/guava/src/com/google/common/base/Functions.java
new file mode 100644
index 0000000..cca629a
--- /dev/null
+++ b/guava/src/com/google/common/base/Functions.java
@@ -0,0 +1,352 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+
+import java.io.Serializable;
+import java.util.Map;
+
+import javax.annotation.Nullable;
+
+/**
+ * Static utility methods pertaining to {@code Function} instances.
+ *
+ * <p>All methods returns serializable functions as long as they're given serializable parameters.
+ *
+ * @author Mike Bostock
+ * @author Jared Levy
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible
+public final class Functions {
+  private Functions() {}
+
+  /**
+   * Returns a function that calls {@code toString()} on its argument. The function does not accept
+   * nulls; it will throw a {@link NullPointerException} when applied to {@code null}.
+   *
+   * <p><b>Warning:</b> The returned function may not be <i>consistent with equals</i> (as
+   * documented at {@link Function#apply}). For example, this function yields different results for
+   * the two equal instances {@code ImmutableSet.of(1, 2)} and {@code ImmutableSet.of(2, 1)}.
+   */
+  public static Function<Object, String> toStringFunction() {
+    return ToStringFunction.INSTANCE;
+  }
+
+  // enum singleton pattern
+  private enum ToStringFunction implements Function<Object, String> {
+    INSTANCE;
+
+    @Override
+    public String apply(Object o) {
+      checkNotNull(o);  // eager for GWT.
+      return o.toString();
+    }
+
+    @Override public String toString() {
+      return "toString";
+    }
+  }
+
+  /**
+   * Returns the identity function.
+   */
+  @SuppressWarnings("unchecked")
+  public static <E> Function<E, E> identity() {
+    return (Function<E, E>) IdentityFunction.INSTANCE;
+  }
+
+  // enum singleton pattern
+  private enum IdentityFunction implements Function<Object, Object> {
+    INSTANCE;
+
+    @Override
+    public Object apply(Object o) {
+      return o;
+    }
+
+    @Override public String toString() {
+      return "identity";
+    }
+  }
+
+  /**
+   * Returns a function which performs a map lookup. The returned function throws an {@link
+   * IllegalArgumentException} if given a key that does not exist in the map.
+   */
+  public static <K, V> Function<K, V> forMap(Map<K, V> map) {
+    return new FunctionForMapNoDefault<K, V>(map);
+  }
+
+  private static class FunctionForMapNoDefault<K, V> implements Function<K, V>, Serializable {
+    final Map<K, V> map;
+
+    FunctionForMapNoDefault(Map<K, V> map) {
+      this.map = checkNotNull(map);
+    }
+
+    @Override
+    public V apply(K key) {
+      V result = map.get(key);
+      checkArgument(result != null || map.containsKey(key), "Key '%s' not present in map", key);
+      return result;
+    }
+
+    @Override public boolean equals(@Nullable Object o) {
+      if (o instanceof FunctionForMapNoDefault) {
+        FunctionForMapNoDefault<?, ?> that = (FunctionForMapNoDefault<?, ?>) o;
+        return map.equals(that.map);
+      }
+      return false;
+    }
+
+    @Override public int hashCode() {
+      return map.hashCode();
+    }
+
+    @Override public String toString() {
+      return "forMap(" + map + ")";
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  /**
+   * Returns a function which performs a map lookup with a default value. The function created by
+   * this method returns {@code defaultValue} for all inputs that do not belong to the map's key
+   * set.
+   *
+   * @param map source map that determines the function behavior
+   * @param defaultValue the value to return for inputs that aren't map keys
+   * @return function that returns {@code map.get(a)} when {@code a} is a key, or {@code
+   *         defaultValue} otherwise
+   */
+  public static <K, V> Function<K, V> forMap(Map<K, ? extends V> map, @Nullable V defaultValue) {
+    return new ForMapWithDefault<K, V>(map, defaultValue);
+  }
+
+  private static class ForMapWithDefault<K, V> implements Function<K, V>, Serializable {
+    final Map<K, ? extends V> map;
+    final V defaultValue;
+
+    ForMapWithDefault(Map<K, ? extends V> map, @Nullable V defaultValue) {
+      this.map = checkNotNull(map);
+      this.defaultValue = defaultValue;
+    }
+
+    @Override
+    public V apply(K key) {
+      V result = map.get(key);
+      return (result != null || map.containsKey(key)) ? result : defaultValue;
+    }
+
+    @Override public boolean equals(@Nullable Object o) {
+      if (o instanceof ForMapWithDefault) {
+        ForMapWithDefault<?, ?> that = (ForMapWithDefault<?, ?>) o;
+        return map.equals(that.map) && Objects.equal(defaultValue, that.defaultValue);
+      }
+      return false;
+    }
+
+    @Override public int hashCode() {
+      return Objects.hashCode(map, defaultValue);
+    }
+
+    @Override public String toString() {
+      return "forMap(" + map + ", defaultValue=" + defaultValue + ")";
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  /**
+   * Returns the composition of two functions. For {@code f: A->B} and {@code g: B->C}, composition
+   * is defined as the function h such that {@code h(a) == g(f(a))} for each {@code a}.
+   *
+   * @param g the second function to apply
+   * @param f the first function to apply
+   * @return the composition of {@code f} and {@code g}
+   * @see <a href="//en.wikipedia.org/wiki/Function_composition">function composition</a>
+   */
+  public static <A, B, C> Function<A, C> compose(Function<B, C> g, Function<A, ? extends B> f) {
+    return new FunctionComposition<A, B, C>(g, f);
+  }
+
+  private static class FunctionComposition<A, B, C> implements Function<A, C>, Serializable {
+    private final Function<B, C> g;
+    private final Function<A, ? extends B> f;
+
+    public FunctionComposition(Function<B, C> g, Function<A, ? extends B> f) {
+      this.g = checkNotNull(g);
+      this.f = checkNotNull(f);
+    }
+
+    @Override
+    public C apply(A a) {
+      return g.apply(f.apply(a));
+    }
+
+    @Override public boolean equals(@Nullable Object obj) {
+      if (obj instanceof FunctionComposition) {
+        FunctionComposition<?, ?, ?> that = (FunctionComposition<?, ?, ?>) obj;
+        return f.equals(that.f) && g.equals(that.g);
+      }
+      return false;
+    }
+
+    @Override public int hashCode() {
+      return f.hashCode() ^ g.hashCode();
+    }
+
+    @Override public String toString() {
+      return g.toString() + "(" + f.toString() + ")";
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  /**
+   * Creates a function that returns the same boolean output as the given predicate for all inputs.
+   *
+   * <p>The returned function is <i>consistent with equals</i> (as documented at {@link
+   * Function#apply}) if and only if {@code predicate} is itself consistent with equals.
+   */
+  public static <T> Function<T, Boolean> forPredicate(Predicate<T> predicate) {
+    return new PredicateFunction<T>(predicate);
+  }
+
+  /** @see Functions#forPredicate */
+  private static class PredicateFunction<T> implements Function<T, Boolean>, Serializable {
+    private final Predicate<T> predicate;
+
+    private PredicateFunction(Predicate<T> predicate) {
+      this.predicate = checkNotNull(predicate);
+    }
+
+    @Override
+    public Boolean apply(T t) {
+      return predicate.apply(t);
+    }
+
+    @Override public boolean equals(@Nullable Object obj) {
+      if (obj instanceof PredicateFunction) {
+        PredicateFunction<?> that = (PredicateFunction<?>) obj;
+        return predicate.equals(that.predicate);
+      }
+      return false;
+    }
+
+    @Override public int hashCode() {
+      return predicate.hashCode();
+    }
+
+    @Override public String toString() {
+      return "forPredicate(" + predicate + ")";
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  /**
+   * Creates a function that returns {@code value} for any input.
+   *
+   * @param value the constant value for the function to return
+   * @return a function that always returns {@code value}
+   */
+  public static <E> Function<Object, E> constant(@Nullable E value) {
+    return new ConstantFunction<E>(value);
+  }
+
+  private static class ConstantFunction<E> implements Function<Object, E>, Serializable {
+    private final E value;
+
+    public ConstantFunction(@Nullable E value) {
+      this.value = value;
+    }
+
+    @Override
+    public E apply(@Nullable Object from) {
+      return value;
+    }
+
+    @Override public boolean equals(@Nullable Object obj) {
+      if (obj instanceof ConstantFunction) {
+        ConstantFunction<?> that = (ConstantFunction<?>) obj;
+        return Objects.equal(value, that.value);
+      }
+      return false;
+    }
+
+    @Override public int hashCode() {
+      return (value == null) ? 0 : value.hashCode();
+    }
+
+    @Override public String toString() {
+      return "constant(" + value + ")";
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  /**
+   * Returns a function that always returns the result of invoking {@link Supplier#get} on {@code
+   * supplier}, regardless of its input.
+   * 
+   * @since 10.0
+   */
+  @Beta
+  public static <T> Function<Object, T> forSupplier(Supplier<T> supplier) {
+    return new SupplierFunction<T>(supplier);
+  }
+
+  /** @see Functions#forSupplier*/
+  private static class SupplierFunction<T> implements Function<Object, T>, Serializable {
+    
+    private final Supplier<T> supplier;
+
+    private SupplierFunction(Supplier<T> supplier) {
+      this.supplier = checkNotNull(supplier);
+    }
+
+    @Override public T apply(@Nullable Object input) {
+      return supplier.get();
+    }
+    
+    @Override public boolean equals(@Nullable Object obj) {
+      if (obj instanceof SupplierFunction) {
+        SupplierFunction<?> that = (SupplierFunction<?>) obj;
+        return this.supplier.equals(that.supplier);
+      }
+      return false;
+    }
+    
+    @Override public int hashCode() {
+      return supplier.hashCode();
+    }
+    
+    @Override public String toString() {
+      return "forSupplier(" + supplier + ")";
+    }
+    
+    private static final long serialVersionUID = 0;
+  }
+}
diff --git a/guava/src/com/google/common/base/Joiner.java b/guava/src/com/google/common/base/Joiner.java
new file mode 100644
index 0000000..048e477
--- /dev/null
+++ b/guava/src/com/google/common/base/Joiner.java
@@ -0,0 +1,556 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+
+import java.io.IOException;
+import java.util.AbstractList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import javax.annotation.CheckReturnValue;
+import javax.annotation.Nullable;
+
+/**
+ * An object which joins pieces of text (specified as an array, {@link Iterable}, varargs or even a
+ * {@link Map}) with a separator. It either appends the results to an {@link Appendable} or returns
+ * them as a {@link String}. Example: <pre>   {@code
+ *
+ *   Joiner joiner = Joiner.on("; ").skipNulls();
+ *    . . .
+ *   return joiner.join("Harry", null, "Ron", "Hermione");}</pre>
+ *
+ * This returns the string {@code "Harry; Ron; Hermione"}. Note that all input elements are
+ * converted to strings using {@link Object#toString()} before being appended.
+ *
+ * <p>If neither {@link #skipNulls()} nor {@link #useForNull(String)} is specified, the joining
+ * methods will throw {@link NullPointerException} if any given element is null.
+ *
+ * <p><b>Warning: joiner instances are always immutable</b>; a configuration method such as {@code
+ * useForNull} has no effect on the instance it is invoked on! You must store and use the new joiner
+ * instance returned by the method. This makes joiners thread-safe, and safe to store as {@code
+ * static final} constants. <pre>   {@code
+ *
+ *   // Bad! Do not do this!
+ *   Joiner joiner = Joiner.on(',');
+ *   joiner.skipNulls(); // does nothing!
+ *   return joiner.join("wrong", null, "wrong");}</pre>
+ *
+ * @author Kevin Bourrillion
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible
+public class Joiner {
+  /**
+   * Returns a joiner which automatically places {@code separator} between consecutive elements.
+   */
+  public static Joiner on(String separator) {
+    return new Joiner(separator);
+  }
+
+  /**
+   * Returns a joiner which automatically places {@code separator} between consecutive elements.
+   */
+  public static Joiner on(char separator) {
+    return new Joiner(String.valueOf(separator));
+  }
+
+  private final String separator;
+
+  private Joiner(String separator) {
+    this.separator = checkNotNull(separator);
+  }
+
+  private Joiner(Joiner prototype) {
+    this.separator = prototype.separator;
+  }
+
+  /**
+   * <b>Deprecated.</b>
+   *
+   * @since 11.0
+   * @deprecated use {@link #appendTo(Appendable, Iterator)} by casting {@code parts} to
+   *     {@code Iterator<?>}, or better yet, by implementing only {@code Iterator} and not
+   *     {@code Iterable}. <b>This method is scheduled for deletion in June 2013.</b>
+   */
+  @Beta
+  @Deprecated
+  public final <A extends Appendable, I extends Object & Iterable<?> & Iterator<?>> A
+      appendTo(A appendable, I parts) throws IOException {
+    return appendTo(appendable, (Iterator<?>) parts);
+  }
+
+  /**
+   * Appends the string representation of each of {@code parts}, using the previously configured
+   * separator between each, to {@code appendable}.
+   */
+  public <A extends Appendable> A appendTo(A appendable, Iterable<?> parts) throws IOException {
+    return appendTo(appendable, parts.iterator());
+  }
+
+  /**
+   * Appends the string representation of each of {@code parts}, using the previously configured
+   * separator between each, to {@code appendable}.
+   *
+   * @since 11.0
+   */
+  @Beta
+  public <A extends Appendable> A appendTo(A appendable, Iterator<?> parts) throws IOException {
+    checkNotNull(appendable);
+    if (parts.hasNext()) {
+      appendable.append(toString(parts.next()));
+      while (parts.hasNext()) {
+        appendable.append(separator);
+        appendable.append(toString(parts.next()));
+      }
+    }
+    return appendable;
+  }
+
+  /**
+   * Appends the string representation of each of {@code parts}, using the previously configured
+   * separator between each, to {@code appendable}.
+   */
+  public final <A extends Appendable> A appendTo(A appendable, Object[] parts) throws IOException {
+    return appendTo(appendable, Arrays.asList(parts));
+  }
+
+  /**
+   * Appends to {@code appendable} the string representation of each of the remaining arguments.
+   */
+  public final <A extends Appendable> A appendTo(
+      A appendable, @Nullable Object first, @Nullable Object second, Object... rest)
+          throws IOException {
+    return appendTo(appendable, iterable(first, second, rest));
+  }
+
+  /**
+   * <b>Deprecated.</b>
+   *
+   * @since 11.0
+   * @deprecated use {@link #appendTo(StringBuilder, Iterator)} by casting {@code parts} to
+   *     {@code Iterator<?>}, or better yet, by implementing only {@code Iterator} and not
+   *     {@code Iterable}. <b>This method is scheduled for deletion in June 2013.</b>
+   */
+  @Beta
+  @Deprecated
+  public final <I extends Object & Iterable<?> & Iterator<?>> StringBuilder
+      appendTo(StringBuilder builder, I parts) {
+    return appendTo(builder, (Iterator<?>) parts);
+  }
+
+  /**
+   * Appends the string representation of each of {@code parts}, using the previously configured
+   * separator between each, to {@code builder}. Identical to {@link #appendTo(Appendable,
+   * Iterable)}, except that it does not throw {@link IOException}.
+   */
+  public final StringBuilder appendTo(StringBuilder builder, Iterable<?> parts) {
+    return appendTo(builder, parts.iterator());
+  }
+
+  /**
+   * Appends the string representation of each of {@code parts}, using the previously configured
+   * separator between each, to {@code builder}. Identical to {@link #appendTo(Appendable,
+   * Iterable)}, except that it does not throw {@link IOException}.
+   *
+   * @since 11.0
+   */
+  @Beta
+  public final StringBuilder appendTo(StringBuilder builder, Iterator<?> parts) {
+    try {
+      appendTo((Appendable) builder, parts);
+    } catch (IOException impossible) {
+      throw new AssertionError(impossible);
+    }
+    return builder;
+  }
+
+  /**
+   * Appends the string representation of each of {@code parts}, using the previously configured
+   * separator between each, to {@code builder}. Identical to {@link #appendTo(Appendable,
+   * Iterable)}, except that it does not throw {@link IOException}.
+   */
+  public final StringBuilder appendTo(StringBuilder builder, Object[] parts) {
+    return appendTo(builder, Arrays.asList(parts));
+  }
+
+  /**
+   * Appends to {@code builder} the string representation of each of the remaining arguments.
+   * Identical to {@link #appendTo(Appendable, Object, Object, Object...)}, except that it does not
+   * throw {@link IOException}.
+   */
+  public final StringBuilder appendTo(
+      StringBuilder builder, @Nullable Object first, @Nullable Object second, Object... rest) {
+    return appendTo(builder, iterable(first, second, rest));
+  }
+
+  /**
+   * <b>Deprecated.</b>
+   *
+   * @since 11.0
+   * @deprecated use {@link #join(Iterator)} by casting {@code parts} to
+   *     {@code Iterator<?>}, or better yet, by implementing only {@code Iterator} and not
+   *     {@code Iterable}. <b>This method is scheduled for deletion in June 2013.</b>
+   */
+  @Beta
+  @Deprecated
+  public final <I extends Object & Iterable<?> & Iterator<?>> String join(I parts) {
+    return join((Iterator<?>) parts);
+  }
+
+  /**
+   * Returns a string containing the string representation of each of {@code parts}, using the
+   * previously configured separator between each.
+   */
+  public final String join(Iterable<?> parts) {
+    return join(parts.iterator());
+  }
+
+  /**
+   * Returns a string containing the string representation of each of {@code parts}, using the
+   * previously configured separator between each.
+   *
+   * @since 11.0
+   */
+  @Beta
+  public final String join(Iterator<?> parts) {
+    return appendTo(new StringBuilder(), parts).toString();
+  }
+
+  /**
+   * Returns a string containing the string representation of each of {@code parts}, using the
+   * previously configured separator between each.
+   */
+  public final String join(Object[] parts) {
+    return join(Arrays.asList(parts));
+  }
+
+  /**
+   * Returns a string containing the string representation of each argument, using the previously
+   * configured separator between each.
+   */
+  public final String join(@Nullable Object first, @Nullable Object second, Object... rest) {
+    return join(iterable(first, second, rest));
+  }
+
+  /**
+   * Returns a joiner with the same behavior as this one, except automatically substituting {@code
+   * nullText} for any provided null elements.
+   */
+  @CheckReturnValue
+  public Joiner useForNull(final String nullText) {
+    checkNotNull(nullText);
+    return new Joiner(this) {
+      @Override CharSequence toString(Object part) {
+        return (part == null) ? nullText : Joiner.this.toString(part);
+      }
+
+      @Override public Joiner useForNull(String nullText) {
+        checkNotNull(nullText); // weird: just to satisfy NullPointerTester.
+        throw new UnsupportedOperationException("already specified useForNull");
+      }
+
+      @Override public Joiner skipNulls() {
+        throw new UnsupportedOperationException("already specified useForNull");
+      }
+    };
+  }
+
+  /**
+   * Returns a joiner with the same behavior as this joiner, except automatically skipping over any
+   * provided null elements.
+   */
+  @CheckReturnValue
+  public Joiner skipNulls() {
+    return new Joiner(this) {
+      @Override public <A extends Appendable> A appendTo(A appendable, Iterator<?> parts)
+          throws IOException {
+        checkNotNull(appendable, "appendable");
+        checkNotNull(parts, "parts");
+        while (parts.hasNext()) {
+          Object part = parts.next();
+          if (part != null) {
+            appendable.append(Joiner.this.toString(part));
+            break;
+          }
+        }
+        while (parts.hasNext()) {
+          Object part = parts.next();
+          if (part != null) {
+            appendable.append(separator);
+            appendable.append(Joiner.this.toString(part));
+          }
+        }
+        return appendable;
+      }
+
+      @Override public Joiner useForNull(String nullText) {
+        checkNotNull(nullText); // weird: just to satisfy NullPointerTester.
+        throw new UnsupportedOperationException("already specified skipNulls");
+      }
+
+      @Override public MapJoiner withKeyValueSeparator(String kvs) {
+        checkNotNull(kvs); // weird: just to satisfy NullPointerTester.
+        throw new UnsupportedOperationException("can't use .skipNulls() with maps");
+      }
+    };
+  }
+
+  /**
+   * Returns a {@code MapJoiner} using the given key-value separator, and the same configuration as
+   * this {@code Joiner} otherwise.
+   */
+  @CheckReturnValue
+  public MapJoiner withKeyValueSeparator(String keyValueSeparator) {
+    return new MapJoiner(this, keyValueSeparator);
+  }
+
+  /**
+   * An object that joins map entries in the same manner as {@code Joiner} joins iterables and
+   * arrays. Like {@code Joiner}, it is thread-safe and immutable.
+   *
+   * <p>In addition to operating on {@code Map} instances, {@code MapJoiner} can operate on {@code
+   * Multimap} entries in two distinct modes:
+   *
+   * <ul>
+   * <li>To output a separate entry for each key-value pair, pass {@code multimap.entries()} to a
+   *     {@code MapJoiner} method that accepts entries as input, and receive output of the form
+   *     {@code key1=A&key1=B&key2=C}.
+   * <li>To output a single entry for each key, pass {@code multimap.asMap()} to a {@code MapJoiner}
+   *     method that accepts a map as input, and receive output of the form {@code
+   *     key1=[A, B]&key2=C}.
+   * </ul>
+   *
+   * @since 2.0 (imported from Google Collections Library)
+   */
+  public final static class MapJoiner {
+    private final Joiner joiner;
+    private final String keyValueSeparator;
+
+    private MapJoiner(Joiner joiner, String keyValueSeparator) {
+      this.joiner = joiner; // only "this" is ever passed, so don't checkNotNull
+      this.keyValueSeparator = checkNotNull(keyValueSeparator);
+    }
+
+    /**
+     * Appends the string representation of each entry of {@code map}, using the previously
+     * configured separator and key-value separator, to {@code appendable}.
+     */
+    public <A extends Appendable> A appendTo(A appendable, Map<?, ?> map) throws IOException {
+      return appendTo(appendable, map.entrySet());
+    }
+
+    /**
+     * Appends the string representation of each entry of {@code map}, using the previously
+     * configured separator and key-value separator, to {@code builder}. Identical to {@link
+     * #appendTo(Appendable, Map)}, except that it does not throw {@link IOException}.
+     */
+    public StringBuilder appendTo(StringBuilder builder, Map<?, ?> map) {
+      return appendTo(builder, map.entrySet());
+    }
+
+    /**
+     * Returns a string containing the string representation of each entry of {@code map}, using the
+     * previously configured separator and key-value separator.
+     */
+    public String join(Map<?, ?> map) {
+      return join(map.entrySet());
+    }
+
+    /**
+     * <b>Deprecated.</b>
+     *
+     * @since 11.0
+     * @deprecated use {@link #appendTo(Appendable, Iterator)} by casting {@code entries} to
+     *     {@code Iterator<? extends Entry<?, ?>>}, or better yet, by implementing only
+     *     {@code Iterator} and not {@code Iterable}. <b>This method is scheduled for deletion
+     *     in June 2013.</b>
+     */
+    @Beta
+    @Deprecated
+    public <A extends Appendable,
+        I extends Object & Iterable<? extends Entry<?, ?>> & Iterator<? extends Entry<?, ?>>>
+        A appendTo(A appendable, I entries) throws IOException {
+      Iterator<? extends Entry<?, ?>> iterator = entries;
+      return appendTo(appendable, iterator);
+    }
+
+    /**
+     * Appends the string representation of each entry in {@code entries}, using the previously
+     * configured separator and key-value separator, to {@code appendable}.
+     *
+     * @since 10.0
+     */
+    @Beta
+    public <A extends Appendable> A appendTo(A appendable, Iterable<? extends Entry<?, ?>> entries)
+        throws IOException {
+      return appendTo(appendable, entries.iterator());
+    }
+
+    /**
+     * Appends the string representation of each entry in {@code entries}, using the previously
+     * configured separator and key-value separator, to {@code appendable}.
+     *
+     * @since 11.0
+     */
+    @Beta
+    public <A extends Appendable> A appendTo(A appendable, Iterator<? extends Entry<?, ?>> parts)
+        throws IOException {
+      checkNotNull(appendable);
+      if (parts.hasNext()) {
+        Entry<?, ?> entry = parts.next();
+        appendable.append(joiner.toString(entry.getKey()));
+        appendable.append(keyValueSeparator);
+        appendable.append(joiner.toString(entry.getValue()));
+        while (parts.hasNext()) {
+          appendable.append(joiner.separator);
+          Entry<?, ?> e = parts.next();
+          appendable.append(joiner.toString(e.getKey()));
+          appendable.append(keyValueSeparator);
+          appendable.append(joiner.toString(e.getValue()));
+        }
+      }
+      return appendable;
+    }
+
+    /**
+     * <b>Deprecated.</b>
+     *
+     * @since 11.0
+     * @deprecated use {@link #appendTo(StringBuilder, Iterator)} by casting {@code entries} to
+     *     {@code Iterator<? extends Entry<?, ?>>}, or better yet, by implementing only
+     *     {@code Iterator} and not {@code Iterable}. <b>This method is scheduled for deletion
+     *     in June 2013.</b>
+     */
+    @Beta
+    @Deprecated
+    public <I extends Object & Iterable<? extends Entry<?, ?>> & Iterator<? extends Entry<?, ?>>>
+        StringBuilder appendTo(StringBuilder builder, I entries) throws IOException {
+      Iterator<? extends Entry<?, ?>> iterator = entries;
+      return appendTo(builder, iterator);
+    }
+
+    /**
+     * Appends the string representation of each entry in {@code entries}, using the previously
+     * configured separator and key-value separator, to {@code builder}. Identical to {@link
+     * #appendTo(Appendable, Iterable)}, except that it does not throw {@link IOException}.
+     *
+     * @since 10.0
+     */
+    @Beta
+    public StringBuilder appendTo(StringBuilder builder, Iterable<? extends Entry<?, ?>> entries) {
+      return appendTo(builder, entries.iterator());
+    }
+
+    /**
+     * Appends the string representation of each entry in {@code entries}, using the previously
+     * configured separator and key-value separator, to {@code builder}. Identical to {@link
+     * #appendTo(Appendable, Iterable)}, except that it does not throw {@link IOException}.
+     *
+     * @since 11.0
+     */
+    @Beta
+    public StringBuilder appendTo(StringBuilder builder, Iterator<? extends Entry<?, ?>> entries) {
+      try {
+        appendTo((Appendable) builder, entries);
+      } catch (IOException impossible) {
+        throw new AssertionError(impossible);
+      }
+      return builder;
+    }
+
+    /**
+     * <b>Deprecated.</b>
+     *
+     * @since 11.0
+     * @deprecated use {@link #join(Iterator)} by casting {@code entries} to
+     *     {@code Iterator<? extends Entry<?, ?>>}, or better yet, by implementing only
+     *     {@code Iterator} and not {@code Iterable}. <b>This method is scheduled for deletion
+     *     in June 2013.</b>
+     */
+    @Beta
+    @Deprecated
+    public <I extends Object & Iterable<? extends Entry<?, ?>> & Iterator<? extends Entry<?, ?>>>
+        String join(I entries) throws IOException {
+      Iterator<? extends Entry<?, ?>> iterator = entries;
+      return join(iterator);
+    }
+
+    /**
+     * Returns a string containing the string representation of each entry in {@code entries}, using
+     * the previously configured separator and key-value separator.
+     *
+     * @since 10.0
+     */
+    @Beta
+    public String join(Iterable<? extends Entry<?, ?>> entries) {
+      return join(entries.iterator());
+    }
+
+    /**
+     * Returns a string containing the string representation of each entry in {@code entries}, using
+     * the previously configured separator and key-value separator.
+     *
+     * @since 11.0
+     */
+    @Beta
+    public String join(Iterator<? extends Entry<?, ?>> entries) {
+      return appendTo(new StringBuilder(), entries).toString();
+    }
+
+    /**
+     * Returns a map joiner with the same behavior as this one, except automatically substituting
+     * {@code nullText} for any provided null keys or values.
+     */
+    @CheckReturnValue
+    public MapJoiner useForNull(String nullText) {
+      return new MapJoiner(joiner.useForNull(nullText), keyValueSeparator);
+    }
+  }
+
+  CharSequence toString(Object part) {
+    checkNotNull(part);  // checkNotNull for GWT (do not optimize).
+    return (part instanceof CharSequence) ? (CharSequence) part : part.toString();
+  }
+
+  private static Iterable<Object> iterable(
+      final Object first, final Object second, final Object[] rest) {
+    checkNotNull(rest);
+    return new AbstractList<Object>() {
+      @Override public int size() {
+        return rest.length + 2;
+      }
+
+      @Override public Object get(int index) {
+        switch (index) {
+          case 0:
+            return first;
+          case 1:
+            return second;
+          default:
+            return rest[index - 2];
+        }
+      }
+    };
+  }
+}
diff --git a/guava/src/com/google/common/base/Objects.java b/guava/src/com/google/common/base/Objects.java
new file mode 100644
index 0000000..ffac9c4
--- /dev/null
+++ b/guava/src/com/google/common/base/Objects.java
@@ -0,0 +1,388 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Arrays;
+
+import javax.annotation.Nullable;
+
+/**
+ * Helper functions that can operate on any {@code Object}.
+ *
+ * @author Laurence Gonsalves
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible
+public final class Objects {
+  private Objects() {}
+
+  /**
+   * Determines whether two possibly-null objects are equal. Returns:
+   *
+   * <ul>
+   * <li>{@code true} if {@code a} and {@code b} are both null.
+   * <li>{@code true} if {@code a} and {@code b} are both non-null and they are
+   *     equal according to {@link Object#equals(Object)}.
+   * <li>{@code false} in all other situations.
+   * </ul>
+   *
+   * <p>This assumes that any non-null objects passed to this function conform
+   * to the {@code equals()} contract.
+   */
+  public static boolean equal(@Nullable Object a, @Nullable Object b) {
+    return a == b || (a != null && a.equals(b));
+  }
+
+  /**
+   * Generates a hash code for multiple values. The hash code is generated by
+   * calling {@link Arrays#hashCode(Object[])}.
+   *
+   * <p>This is useful for implementing {@link Object#hashCode()}. For example,
+   * in an object that has three properties, {@code x}, {@code y}, and
+   * {@code z}, one could write:
+   * <pre>
+   * public int hashCode() {
+   *   return Objects.hashCode(getX(), getY(), getZ());
+   * }</pre>
+   *
+   * <b>Warning</b>: When a single object is supplied, the returned hash code
+   * does not equal the hash code of that object.
+   */
+  public static int hashCode(@Nullable Object... objects) {
+    return Arrays.hashCode(objects);
+  }
+
+  /**
+   * Creates an instance of {@link ToStringHelper}.
+   *
+   * <p>This is helpful for implementing {@link Object#toString()}.
+   * Specification by example: <pre>   {@code
+   *   // Returns "ClassName{}"
+   *   Objects.toStringHelper(this)
+   *       .toString();
+   *
+   *   // Returns "ClassName{x=1}"
+   *   Objects.toStringHelper(this)
+   *       .add("x", 1)
+   *       .toString();
+   *
+   *   // Returns "MyObject{x=1}"
+   *   Objects.toStringHelper("MyObject")
+   *       .add("x", 1)
+   *       .toString();
+   *
+   *   // Returns "ClassName{x=1, y=foo}"
+   *   Objects.toStringHelper(this)
+   *       .add("x", 1)
+   *       .add("y", "foo")
+   *       .toString();
+   *   }}</pre>
+   *
+   * <p>Note that in GWT, class names are often obfuscated.
+   *
+   * @param self the object to generate the string for (typically {@code this}),
+   *        used only for its class name
+   * @since 2.0
+   */
+  public static ToStringHelper toStringHelper(Object self) {
+    return new ToStringHelper(simpleName(self.getClass()));
+  }
+
+  /**
+   * Creates an instance of {@link ToStringHelper} in the same manner as
+   * {@link Objects#toStringHelper(Object)}, but using the name of {@code clazz}
+   * instead of using an instance's {@link Object#getClass()}.
+   *
+   * <p>Note that in GWT, class names are often obfuscated.
+   *
+   * @param clazz the {@link Class} of the instance
+   * @since 7.0 (source-compatible since 2.0)
+   */
+  public static ToStringHelper toStringHelper(Class<?> clazz) {
+    return new ToStringHelper(simpleName(clazz));
+  }
+
+  /**
+   * Creates an instance of {@link ToStringHelper} in the same manner as
+   * {@link Objects#toStringHelper(Object)}, but using {@code className} instead
+   * of using an instance's {@link Object#getClass()}.
+   *
+   * @param className the name of the instance type
+   * @since 7.0 (source-compatible since 2.0)
+   */
+  public static ToStringHelper toStringHelper(String className) {
+    return new ToStringHelper(className);
+  }
+
+  /**
+   * {@link Class#getSimpleName()} is not GWT compatible yet, so we
+   * provide our own implementation.
+   */
+  private static String simpleName(Class<?> clazz) {
+    String name = clazz.getName();
+
+    // the nth anonymous class has a class name ending in "Outer$n"
+    // and local inner classes have names ending in "Outer.$1Inner"
+    name = name.replaceAll("\\$[0-9]+", "\\$");
+
+    // we want the name of the inner class all by its lonesome
+    int start = name.lastIndexOf('$');
+
+    // if this isn't an inner class, just find the start of the
+    // top level class name.
+    if (start == -1) {
+      start = name.lastIndexOf('.');
+    }
+    return name.substring(start + 1);
+  }
+
+  /**
+   * Returns the first of two given parameters that is not {@code null}, if
+   * either is, or otherwise throws a {@link NullPointerException}.
+   *
+   * <p><b>Note:</b> if {@code first} is represented as an {@code Optional<T>},
+   * this can be accomplished with {@code first.or(second)}. That approach also
+   * allows for lazy evaluation of the fallback instance, using
+   * {@code first.or(Supplier)}.
+   *
+   * @return {@code first} if {@code first} is not {@code null}, or
+   *     {@code second} if {@code first} is {@code null} and {@code second} is
+   *     not {@code null}
+   * @throws NullPointerException if both {@code first} and {@code second} were
+   *     {@code null}
+   * @since 3.0
+   */
+  public static <T> T firstNonNull(@Nullable T first, @Nullable T second) {
+    return first != null ? first : checkNotNull(second);
+  }
+
+  /**
+   * Support class for {@link Objects#toStringHelper}.
+   *
+   * @author Jason Lee
+   * @since 2.0
+   */
+  public static final class ToStringHelper {
+    private final StringBuilder builder;
+    private boolean needsSeparator = false;
+
+    /**
+     * Use {@link Objects#toStringHelper(Object)} to create an instance.
+     */
+    private ToStringHelper(String className) {
+      checkNotNull(className);
+      this.builder = new StringBuilder(32).append(className).append('{');
+    }
+
+    /**
+     * Adds a name/value pair to the formatted output in {@code name=value}
+     * format. If {@code value} is {@code null}, the string {@code "null"}
+     * is used.
+     */
+    public ToStringHelper add(String name, @Nullable Object value) {
+      checkNameAndAppend(name).append(value);
+      return this;
+    }
+
+    /**
+     * Adds a name/value pair to the formatted output in {@code name=value}
+     * format.
+     *
+     * @since 11.0 (source-compatible since 2.0)
+     */
+    public ToStringHelper add(String name, boolean value) {
+      checkNameAndAppend(name).append(value);
+      return this;
+    }
+
+    /**
+     * Adds a name/value pair to the formatted output in {@code name=value}
+     * format.
+     *
+     * @since 11.0 (source-compatible since 2.0)
+     */
+    public ToStringHelper add(String name, char value) {
+      checkNameAndAppend(name).append(value);
+      return this;
+    }
+
+    /**
+     * Adds a name/value pair to the formatted output in {@code name=value}
+     * format.
+     *
+     * @since 11.0 (source-compatible since 2.0)
+     */
+    public ToStringHelper add(String name, double value) {
+      checkNameAndAppend(name).append(value);
+      return this;
+    }
+
+    /**
+     * Adds a name/value pair to the formatted output in {@code name=value}
+     * format.
+     *
+     * @since 11.0 (source-compatible since 2.0)
+     */
+    public ToStringHelper add(String name, float value) {
+      checkNameAndAppend(name).append(value);
+      return this;
+    }
+
+    /**
+     * Adds a name/value pair to the formatted output in {@code name=value}
+     * format.
+     *
+     * @since 11.0 (source-compatible since 2.0)
+     */
+    public ToStringHelper add(String name, int value) {
+      checkNameAndAppend(name).append(value);
+      return this;
+    }
+
+    /**
+     * Adds a name/value pair to the formatted output in {@code name=value}
+     * format.
+     *
+     * @since 11.0 (source-compatible since 2.0)
+     */
+    public ToStringHelper add(String name, long value) {
+      checkNameAndAppend(name).append(value);
+      return this;
+    }
+
+    private StringBuilder checkNameAndAppend(String name) {
+      checkNotNull(name);
+      return maybeAppendSeparator().append(name).append('=');
+    }
+
+    /**
+     * Adds an unnamed value to the formatted output.
+     *
+     * <p>It is strongly encouraged to use {@link #add(String, Object)} instead
+     * and give value a readable name.
+     */
+    public ToStringHelper addValue(@Nullable Object value) {
+      maybeAppendSeparator().append(value);
+      return this;
+    }
+
+    /**
+     * Adds an unnamed value to the formatted output.
+     *
+     * <p>It is strongly encouraged to use {@link #add(String, boolean)} instead
+     * and give value a readable name.
+     *
+     * @since 11.0 (source-compatible since 2.0)
+     */
+    public ToStringHelper addValue(boolean value) {
+      maybeAppendSeparator().append(value);
+      return this;
+    }
+
+    /**
+     * Adds an unnamed value to the formatted output.
+     *
+     * <p>It is strongly encouraged to use {@link #add(String, char)} instead
+     * and give value a readable name.
+     *
+     * @since 11.0 (source-compatible since 2.0)
+     */
+    public ToStringHelper addValue(char value) {
+      maybeAppendSeparator().append(value);
+      return this;
+    }
+
+    /**
+     * Adds an unnamed value to the formatted output.
+     *
+     * <p>It is strongly encouraged to use {@link #add(String, double)} instead
+     * and give value a readable name.
+     *
+     * @since 11.0 (source-compatible since 2.0)
+     */
+    public ToStringHelper addValue(double value) {
+      maybeAppendSeparator().append(value);
+      return this;
+    }
+
+    /**
+     * Adds an unnamed value to the formatted output.
+     *
+     * <p>It is strongly encouraged to use {@link #add(String, float)} instead
+     * and give value a readable name.
+     *
+     * @since 11.0 (source-compatible since 2.0)
+     */
+    public ToStringHelper addValue(float value) {
+      maybeAppendSeparator().append(value);
+      return this;
+    }
+
+    /**
+     * Adds an unnamed value to the formatted output.
+     *
+     * <p>It is strongly encouraged to use {@link #add(String, int)} instead
+     * and give value a readable name.
+     *
+     * @since 11.0 (source-compatible since 2.0)
+     */
+    public ToStringHelper addValue(int value) {
+      maybeAppendSeparator().append(value);
+      return this;
+    }
+
+    /**
+     * Adds an unnamed value to the formatted output.
+     *
+     * <p>It is strongly encouraged to use {@link #add(String, long)} instead
+     * and give value a readable name.
+     *
+     * @since 11.0 (source-compatible since 2.0)
+     */
+    public ToStringHelper addValue(long value) {
+      maybeAppendSeparator().append(value);
+      return this;
+    }
+
+    /**
+     * Returns a string in the format specified by {@link
+     * Objects#toStringHelper(Object)}.
+     */
+    @Override public String toString() {
+      try {
+        return builder.append('}').toString();
+      } finally {
+        // Slice off the closing brace in case there are additional calls to
+        // #add or #addValue.
+        builder.setLength(builder.length() - 1);
+      }
+    }
+
+    private StringBuilder maybeAppendSeparator() {
+      if (needsSeparator) {
+        return builder.append(", ");
+      } else {
+        needsSeparator = true;
+        return builder;
+      }
+    }
+  }
+}
diff --git a/guava/src/com/google/common/base/Optional.java b/guava/src/com/google/common/base/Optional.java
new file mode 100644
index 0000000..035f96c
--- /dev/null
+++ b/guava/src/com/google/common/base/Optional.java
@@ -0,0 +1,306 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+
+import java.io.Serializable;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * An immutable object that may contain a non-null reference to another object. Each
+ * instance of this type either contains a non-null reference, or contains nothing (in
+ * which case we say that the reference is "absent"); it is never said to "contain {@code
+ * null}".
+ *
+ * <p>A non-null {@code Optional<T>} reference can be used as a replacement for a nullable
+ * {@code T} reference. It allows you to represent "a {@code T} that must be present" and
+ * a "a {@code T} that might be absent" as two distinct types in your program, which can
+ * aid clarity.
+ *
+ * <p>Some uses of this class include
+ *
+ * <ul>
+ * <li>As a method return type, as an alternative to returning {@code null} to indicate
+ *     that no value was available
+ * <li>To distinguish between "unknown" (for example, not present in a map) and "known to
+ *     have no value" (present in the map, with value {@code Optional.absent()})
+ * <li>To wrap nullable references for storage in a collection that does not support
+ *     {@code null} (though there are
+ *     <a href="http://code.google.com/p/guava-libraries/wiki/LivingWithNullHostileCollections">
+ *     several other approaches to this</a> that should be considered first)
+ * </ul>
+ *
+ * <p>A common alternative to using this class is to find or create a suitable
+ * <a href="http://en.wikipedia.org/wiki/Null_Object_pattern">null object</a> for the
+ * type in question.
+ *
+ * <p>This class is not intended as a direct analogue of any existing "option" or "maybe"
+ * construct from other programming environments, though it may bear some similarities.
+ *
+ * @param <T> the type of instance that can be contained. {@code Optional} is naturally
+ *     covariant on this type, so it is safe to cast an {@code Optional<T>} to {@code
+ *     Optional<S>} for any supertype {@code S} of {@code T}.
+ * @author Kurt Alfred Kluever
+ * @author Kevin Bourrillion
+ * @since 10.0
+ */
+@Beta
+@GwtCompatible
+public abstract class Optional<T> implements Serializable {
+  /**
+   * Returns an {@code Optional} instance with no contained reference.
+   */
+  @SuppressWarnings("unchecked")
+  public static <T> Optional<T> absent() {
+    return (Optional<T>) Absent.INSTANCE;
+  }
+
+  /**
+   * Returns an {@code Optional} instance containing the given non-null reference.
+   */
+  public static <T> Optional<T> of(T reference) {
+    return new Present<T>(checkNotNull(reference));
+  }
+
+  /**
+   * If {@code nullableReference} is non-null, returns an {@code Optional} instance containing that
+   * reference; otherwise returns {@link Optional#absent}.
+   */
+  public static <T> Optional<T> fromNullable(@Nullable T nullableReference) {
+    return (nullableReference == null)
+        ? Optional.<T>absent()
+        : new Present<T>(nullableReference);
+  }
+
+  private Optional() {}
+
+  /**
+   * Returns {@code true} if this holder contains a (non-null) instance.
+   */
+  public abstract boolean isPresent();
+
+  /**
+   * Returns the contained instance, which must be present. If the instance might be
+   * absent, use {@link #or(Object)} or {@link #orNull} instead.
+   *
+   * @throws IllegalStateException if the instance is absent ({@link #isPresent} returns
+   *     {@code false})
+   */
+  public abstract T get();
+
+  /**
+   * Returns the contained instance if it is present; {@code defaultValue} otherwise. If
+   * no default value should be required because the instance is known to be present, use
+   * {@link #get()} instead. For a default value of {@code null}, use {@link #orNull}.
+   */
+  public abstract T or(T defaultValue);
+
+  /**
+   * Returns this {@code Optional} if it has a value present; {@code secondChoice}
+   * otherwise.
+   */
+  public abstract Optional<T> or(Optional<? extends T> secondChoice);
+
+  /**
+   * Returns the contained instance if it is present; {@code supplier.get()} otherwise. If the
+   * supplier returns {@code null}, a {@link NullPointerException} will be thrown.
+   *
+   * @throws NullPointerException if the supplier returns {@code null}
+   */
+  public abstract T or(Supplier<? extends T> supplier);
+
+  /**
+   * Returns the contained instance if it is present; {@code null} otherwise. If the
+   * instance is known to be present, use {@link #get()} instead.
+   */
+  @Nullable public abstract T orNull();
+
+  /**
+   * Returns an immutable singleton {@link Set} whose only element is the
+   * contained instance if it is present; an empty immutable {@link Set}
+   * otherwise.
+   *
+   * @since 11.0
+   */
+  public abstract Set<T> asSet();
+
+  /**
+   * Returns {@code true} if {@code object} is an {@code Optional} instance, and either
+   * the contained references are {@linkplain Object#equals equal} to each other or both
+   * are absent. Note that {@code Optional} instances of differing parameterized types can
+   * be equal.
+   */
+  @Override public abstract boolean equals(@Nullable Object object);
+
+  /**
+   * Returns a hash code for this instance.
+   */
+  @Override public abstract int hashCode();
+
+  /**
+   * Returns a string representation for this instance. The form of this string
+   * representation is unspecified.
+   */
+  @Override public abstract String toString();
+
+  /**
+   * Returns the value of each present instance from the supplied {@code optionals}, in order,
+   * skipping over occurrences of {@link Optional#absent}. Iterators are unmodifiable and are
+   * evaluated lazily.
+   *
+   * @since 11.0
+   */
+  public static <T> Iterable<T> presentInstances(final Iterable<Optional<T>> optionals) {
+    checkNotNull(optionals);
+    return new Iterable<T>() {
+      @Override public Iterator<T> iterator() {
+        return new AbstractIterator<T>() {
+          private final Iterator<Optional<T>> iterator = checkNotNull(optionals.iterator());
+
+          @Override protected T computeNext() {
+            while (iterator.hasNext()) {
+              Optional<T> optional = iterator.next();
+              if (optional.isPresent()) {
+                return optional.get();
+              }
+            }
+            return endOfData();
+          }
+        };
+      };
+    };
+  }
+
+  private static final long serialVersionUID = 0;
+
+  private static final class Present<T> extends Optional<T> {
+    private final T reference;
+
+    Present(T reference) {
+      this.reference = reference;
+    }
+
+    @Override public boolean isPresent() {
+      return true;
+    }
+
+    @Override public T get() {
+      return reference;
+    }
+
+    @Override public T or(T defaultValue) {
+      checkNotNull(defaultValue, "use orNull() instead of or(null)");
+      return reference;
+    }
+
+    @Override public Optional<T> or(Optional<? extends T> secondChoice) {
+      checkNotNull(secondChoice);
+      return this;
+    }
+
+    @Override public T or(Supplier<? extends T> supplier) {
+      checkNotNull(supplier);
+      return reference;
+    }
+
+    @Override public T orNull() {
+      return reference;
+    }
+
+    @Override public Set<T> asSet() {
+      return Collections.singleton(reference);
+    }
+
+    @Override public boolean equals(@Nullable Object object) {
+      if (object instanceof Present) {
+        Present<?> other = (Present<?>) object;
+        return reference.equals(other.reference);
+      }
+      return false;
+    }
+
+    @Override public int hashCode() {
+      return 0x598df91c + reference.hashCode();
+    }
+
+    @Override public String toString() {
+      return "Optional.of(" + reference + ")";
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  private static final class Absent extends Optional<Object> {
+    private static final Absent INSTANCE = new Absent();
+
+    @Override public boolean isPresent() {
+      return false;
+    }
+
+    @Override public Object get() {
+      throw new IllegalStateException("value is absent");
+    }
+
+    @Override public Object or(Object defaultValue) {
+      return checkNotNull(defaultValue, "use orNull() instead of or(null)");
+    }
+
+    @SuppressWarnings("unchecked") // safe covariant cast
+    @Override public Optional<Object> or(Optional<?> secondChoice) {
+      return (Optional) checkNotNull(secondChoice);
+    }
+
+    @Override public Object or(Supplier<?> supplier) {
+      return checkNotNull(supplier.get(),
+          "use orNull() instead of a Supplier that returns null");
+    }
+
+    @Override @Nullable public Object orNull() {
+      return null;
+    }
+
+    @Override public Set<Object> asSet() {
+      return Collections.emptySet();
+    }
+
+    @Override public boolean equals(@Nullable Object object) {
+      return object == this;
+    }
+
+    @Override public int hashCode() {
+      return 0x598df91c;
+    }
+
+    @Override public String toString() {
+      return "Optional.absent()";
+    }
+
+    private Object readResolve() {
+      return INSTANCE;
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+}
diff --git a/guava/src/com/google/common/base/PairwiseEquivalence.java b/guava/src/com/google/common/base/PairwiseEquivalence.java
new file mode 100644
index 0000000..23ab539
--- /dev/null
+++ b/guava/src/com/google/common/base/PairwiseEquivalence.java
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.io.Serializable;
+import java.util.Iterator;
+
+import javax.annotation.Nullable;
+
+@GwtCompatible(serializable = true)
+final class PairwiseEquivalence<T> extends Equivalence<Iterable<T>>
+    implements Serializable {
+
+  final Equivalence<? super T> elementEquivalence;
+
+  PairwiseEquivalence(Equivalence<? super T> elementEquivalence) {
+    this.elementEquivalence = Preconditions.checkNotNull(elementEquivalence);
+  }
+
+  @Override
+  protected boolean doEquivalent(Iterable<T> iterableA, Iterable<T> iterableB) {
+    Iterator<T> iteratorA = iterableA.iterator();
+    Iterator<T> iteratorB = iterableB.iterator();
+
+    while (iteratorA.hasNext() && iteratorB.hasNext()) {
+      if (!elementEquivalence.equivalent(iteratorA.next(), iteratorB.next())) {
+        return false;
+      }
+    }
+
+    return !iteratorA.hasNext() && !iteratorB.hasNext();
+  }
+
+  @Override
+  protected int doHash(Iterable<T> iterable) {
+    int hash = 78721;
+    for (T element : iterable) {
+      hash = hash * 24943 + elementEquivalence.hash(element);
+    }
+    return hash;
+  }
+
+  @Override
+  public boolean equals(@Nullable Object object) {
+    if (object instanceof PairwiseEquivalence) {
+      PairwiseEquivalence<?> that = (PairwiseEquivalence<?>) object;
+      return this.elementEquivalence.equals(that.elementEquivalence);
+    }
+
+    return false;
+  }
+
+  @Override
+  public int hashCode() {
+    return elementEquivalence.hashCode() ^ 0x46a3eb07;
+  }
+
+  @Override
+  public String toString() {
+    return elementEquivalence + ".pairwise()";
+  }
+
+  private static final long serialVersionUID = 1;
+}
diff --git a/guava/src/com/google/common/base/Platform.java b/guava/src/com/google/common/base/Platform.java
new file mode 100644
index 0000000..dcbe06c
--- /dev/null
+++ b/guava/src/com/google/common/base/Platform.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base;
+
+import com.google.common.annotations.GwtCompatible;
+
+/**
+ * Methods factored out so that they can be emulated differently in GWT.
+ *
+ * @author Jesse Wilson
+ */
+@GwtCompatible(emulated = true)
+final class Platform {
+  private Platform() {}
+
+  /** Returns a thread-local 1024-char array. */
+  static char[] charBufferFromThreadLocal() {
+    return DEST_TL.get();
+  }
+  
+  /** Calls {@link System#nanoTime()}. */
+  static long systemNanoTime() {
+    return System.nanoTime();
+  }
+
+  /**
+   * A thread-local destination buffer to keep us from creating new buffers.
+   * The starting size is 1024 characters.  If we grow past this we don't
+   * put it back in the threadlocal, we just keep going and grow as needed.
+   */
+  private static final ThreadLocal<char[]> DEST_TL = new ThreadLocal<char[]>() {
+    @Override
+    protected char[] initialValue() {
+      return new char[1024];
+    }
+  };
+
+  static CharMatcher precomputeCharMatcher(CharMatcher matcher) {
+    return matcher.precomputedInternal();
+  }
+}
diff --git a/guava/src/com/google/common/base/Preconditions.java b/guava/src/com/google/common/base/Preconditions.java
new file mode 100644
index 0000000..4c22f1e
--- /dev/null
+++ b/guava/src/com/google/common/base/Preconditions.java
@@ -0,0 +1,445 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.VisibleForTesting;
+
+import java.util.NoSuchElementException;
+
+import javax.annotation.Nullable;
+
+/**
+ * Simple static methods to be called at the start of your own methods to verify
+ * correct arguments and state. This allows constructs such as
+ * <pre>
+ *     if (count <= 0) {
+ *       throw new IllegalArgumentException("must be positive: " + count);
+ *     }</pre>
+ *
+ * to be replaced with the more compact
+ * <pre>
+ *     checkArgument(count > 0, "must be positive: %s", count);</pre>
+ *
+ * Note that the sense of the expression is inverted; with {@code Preconditions}
+ * you declare what you expect to be <i>true</i>, just as you do with an
+ * <a href="http://java.sun.com/j2se/1.5.0/docs/guide/language/assert.html">
+ * {@code assert}</a> or a JUnit {@code assertTrue} call.
+ *
+ * <p><b>Warning:</b> only the {@code "%s"} specifier is recognized as a
+ * placeholder in these messages, not the full range of {@link
+ * String#format(String, Object[])} specifiers.
+ *
+ * <p>Take care not to confuse precondition checking with other similar types
+ * of checks! Precondition exceptions -- including those provided here, but also
+ * {@link IndexOutOfBoundsException}, {@link NoSuchElementException}, {@link
+ * UnsupportedOperationException} and others -- are used to signal that the
+ * <i>calling method</i> has made an error. This tells the caller that it should
+ * not have invoked the method when it did, with the arguments it did, or
+ * perhaps ever. Postcondition or other invariant failures should not throw
+ * these types of exceptions.
+ *
+ * @author Kevin Bourrillion
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible
+public final class Preconditions {
+  private Preconditions() {}
+
+  /**
+   * Ensures the truth of an expression involving one or more parameters to the
+   * calling method.
+   *
+   * @param expression a boolean expression
+   * @throws IllegalArgumentException if {@code expression} is false
+   */
+  public static void checkArgument(boolean expression) {
+    if (!expression) {
+      throw new IllegalArgumentException();
+    }
+  }
+
+  /**
+   * Ensures the truth of an expression involving one or more parameters to the
+   * calling method.
+   *
+   * @param expression a boolean expression
+   * @param errorMessage the exception message to use if the check fails; will
+   *     be converted to a string using {@link String#valueOf(Object)}
+   * @throws IllegalArgumentException if {@code expression} is false
+   */
+  public static void checkArgument(
+      boolean expression, @Nullable Object errorMessage) {
+    if (!expression) {
+      throw new IllegalArgumentException(String.valueOf(errorMessage));
+    }
+  }
+
+  /**
+   * Ensures the truth of an expression involving one or more parameters to the
+   * calling method.
+   *
+   * @param expression a boolean expression
+   * @param errorMessageTemplate a template for the exception message should the
+   *     check fail. The message is formed by replacing each {@code %s}
+   *     placeholder in the template with an argument. These are matched by
+   *     position - the first {@code %s} gets {@code errorMessageArgs[0]}, etc.
+   *     Unmatched arguments will be appended to the formatted message in square
+   *     braces. Unmatched placeholders will be left as-is.
+   * @param errorMessageArgs the arguments to be substituted into the message
+   *     template. Arguments are converted to strings using
+   *     {@link String#valueOf(Object)}.
+   * @throws IllegalArgumentException if {@code expression} is false
+   * @throws NullPointerException if the check fails and either {@code
+   *     errorMessageTemplate} or {@code errorMessageArgs} is null (don't let
+   *     this happen)
+   */
+  public static void checkArgument(boolean expression,
+      @Nullable String errorMessageTemplate,
+      @Nullable Object... errorMessageArgs) {
+    if (!expression) {
+      throw new IllegalArgumentException(
+          format(errorMessageTemplate, errorMessageArgs));
+    }
+  }
+
+  /**
+   * Ensures the truth of an expression involving the state of the calling
+   * instance, but not involving any parameters to the calling method.
+   *
+   * @param expression a boolean expression
+   * @throws IllegalStateException if {@code expression} is false
+   */
+  public static void checkState(boolean expression) {
+    if (!expression) {
+      throw new IllegalStateException();
+    }
+  }
+
+  /**
+   * Ensures the truth of an expression involving the state of the calling
+   * instance, but not involving any parameters to the calling method.
+   *
+   * @param expression a boolean expression
+   * @param errorMessage the exception message to use if the check fails; will
+   *     be converted to a string using {@link String#valueOf(Object)}
+   * @throws IllegalStateException if {@code expression} is false
+   */
+  public static void checkState(
+      boolean expression, @Nullable Object errorMessage) {
+    if (!expression) {
+      throw new IllegalStateException(String.valueOf(errorMessage));
+    }
+  }
+
+  /**
+   * Ensures the truth of an expression involving the state of the calling
+   * instance, but not involving any parameters to the calling method.
+   *
+   * @param expression a boolean expression
+   * @param errorMessageTemplate a template for the exception message should the
+   *     check fail. The message is formed by replacing each {@code %s}
+   *     placeholder in the template with an argument. These are matched by
+   *     position - the first {@code %s} gets {@code errorMessageArgs[0]}, etc.
+   *     Unmatched arguments will be appended to the formatted message in square
+   *     braces. Unmatched placeholders will be left as-is.
+   * @param errorMessageArgs the arguments to be substituted into the message
+   *     template. Arguments are converted to strings using
+   *     {@link String#valueOf(Object)}.
+   * @throws IllegalStateException if {@code expression} is false
+   * @throws NullPointerException if the check fails and either {@code
+   *     errorMessageTemplate} or {@code errorMessageArgs} is null (don't let
+   *     this happen)
+   */
+  public static void checkState(boolean expression,
+      @Nullable String errorMessageTemplate,
+      @Nullable Object... errorMessageArgs) {
+    if (!expression) {
+      throw new IllegalStateException(
+          format(errorMessageTemplate, errorMessageArgs));
+    }
+  }
+
+  /**
+   * Ensures that an object reference passed as a parameter to the calling
+   * method is not null.
+   *
+   * @param reference an object reference
+   * @return the non-null reference that was validated
+   * @throws NullPointerException if {@code reference} is null
+   */
+  public static <T> T checkNotNull(T reference) {
+    if (reference == null) {
+      throw new NullPointerException();
+    }
+    return reference;
+  }
+
+  /**
+   * Ensures that an object reference passed as a parameter to the calling
+   * method is not null.
+   *
+   * @param reference an object reference
+   * @param errorMessage the exception message to use if the check fails; will
+   *     be converted to a string using {@link String#valueOf(Object)}
+   * @return the non-null reference that was validated
+   * @throws NullPointerException if {@code reference} is null
+   */
+  public static <T> T checkNotNull(T reference, @Nullable Object errorMessage) {
+    if (reference == null) {
+      throw new NullPointerException(String.valueOf(errorMessage));
+    }
+    return reference;
+  }
+
+  /**
+   * Ensures that an object reference passed as a parameter to the calling
+   * method is not null.
+   *
+   * @param reference an object reference
+   * @param errorMessageTemplate a template for the exception message should the
+   *     check fail. The message is formed by replacing each {@code %s}
+   *     placeholder in the template with an argument. These are matched by
+   *     position - the first {@code %s} gets {@code errorMessageArgs[0]}, etc.
+   *     Unmatched arguments will be appended to the formatted message in square
+   *     braces. Unmatched placeholders will be left as-is.
+   * @param errorMessageArgs the arguments to be substituted into the message
+   *     template. Arguments are converted to strings using
+   *     {@link String#valueOf(Object)}.
+   * @return the non-null reference that was validated
+   * @throws NullPointerException if {@code reference} is null
+   */
+  public static <T> T checkNotNull(T reference,
+      @Nullable String errorMessageTemplate,
+      @Nullable Object... errorMessageArgs) {
+    if (reference == null) {
+      // If either of these parameters is null, the right thing happens anyway
+      throw new NullPointerException(
+          format(errorMessageTemplate, errorMessageArgs));
+    }
+    return reference;
+  }
+
+  /*
+   * All recent hotspots (as of 2009) *really* like to have the natural code
+   *
+   * if (guardExpression) {
+   *    throw new BadException(messageExpression);
+   * }
+   *
+   * refactored so that messageExpression is moved to a separate
+   * String-returning method.
+   *
+   * if (guardExpression) {
+   *    throw new BadException(badMsg(...));
+   * }
+   *
+   * The alternative natural refactorings into void or Exception-returning
+   * methods are much slower.  This is a big deal - we're talking factors of
+   * 2-8 in microbenchmarks, not just 10-20%.  (This is a hotspot optimizer
+   * bug, which should be fixed, but that's a separate, big project).
+   *
+   * The coding pattern above is heavily used in java.util, e.g. in ArrayList.
+   * There is a RangeCheckMicroBenchmark in the JDK that was used to test this.
+   *
+   * But the methods in this class want to throw different exceptions,
+   * depending on the args, so it appears that this pattern is not directly
+   * applicable.  But we can use the ridiculous, devious trick of throwing an
+   * exception in the middle of the construction of another exception.
+   * Hotspot is fine with that.
+   */
+
+  /**
+   * Ensures that {@code index} specifies a valid <i>element</i> in an array,
+   * list or string of size {@code size}. An element index may range from zero,
+   * inclusive, to {@code size}, exclusive.
+   *
+   * @param index a user-supplied index identifying an element of an array, list
+   *     or string
+   * @param size the size of that array, list or string
+   * @return the value of {@code index}
+   * @throws IndexOutOfBoundsException if {@code index} is negative or is not
+   *     less than {@code size}
+   * @throws IllegalArgumentException if {@code size} is negative
+   */
+  public static int checkElementIndex(int index, int size) {
+    return checkElementIndex(index, size, "index");
+  }
+
+  /**
+   * Ensures that {@code index} specifies a valid <i>element</i> in an array,
+   * list or string of size {@code size}. An element index may range from zero,
+   * inclusive, to {@code size}, exclusive.
+   *
+   * @param index a user-supplied index identifying an element of an array, list
+   *     or string
+   * @param size the size of that array, list or string
+   * @param desc the text to use to describe this index in an error message
+   * @return the value of {@code index}
+   * @throws IndexOutOfBoundsException if {@code index} is negative or is not
+   *     less than {@code size}
+   * @throws IllegalArgumentException if {@code size} is negative
+   */
+  public static int checkElementIndex(
+      int index, int size, @Nullable String desc) {
+    // Carefully optimized for execution by hotspot (explanatory comment above)
+    if (index < 0 || index >= size) {
+      throw new IndexOutOfBoundsException(badElementIndex(index, size, desc));
+    }
+    return index;
+  }
+
+  private static String badElementIndex(int index, int size, String desc) {
+    if (index < 0) {
+      return format("%s (%s) must not be negative", desc, index);
+    } else if (size < 0) {
+      throw new IllegalArgumentException("negative size: " + size);
+    } else { // index >= size
+      return format("%s (%s) must be less than size (%s)", desc, index, size);
+    }
+  }
+
+  /**
+   * Ensures that {@code index} specifies a valid <i>position</i> in an array,
+   * list or string of size {@code size}. A position index may range from zero
+   * to {@code size}, inclusive.
+   *
+   * @param index a user-supplied index identifying a position in an array, list
+   *     or string
+   * @param size the size of that array, list or string
+   * @return the value of {@code index}
+   * @throws IndexOutOfBoundsException if {@code index} is negative or is
+   *     greater than {@code size}
+   * @throws IllegalArgumentException if {@code size} is negative
+   */
+  public static int checkPositionIndex(int index, int size) {
+    return checkPositionIndex(index, size, "index");
+  }
+
+  /**
+   * Ensures that {@code index} specifies a valid <i>position</i> in an array,
+   * list or string of size {@code size}. A position index may range from zero
+   * to {@code size}, inclusive.
+   *
+   * @param index a user-supplied index identifying a position in an array, list
+   *     or string
+   * @param size the size of that array, list or string
+   * @param desc the text to use to describe this index in an error message
+   * @return the value of {@code index}
+   * @throws IndexOutOfBoundsException if {@code index} is negative or is
+   *     greater than {@code size}
+   * @throws IllegalArgumentException if {@code size} is negative
+   */
+  public static int checkPositionIndex(
+      int index, int size, @Nullable String desc) {
+    // Carefully optimized for execution by hotspot (explanatory comment above)
+    if (index < 0 || index > size) {
+      throw new IndexOutOfBoundsException(badPositionIndex(index, size, desc));
+    }
+    return index;
+  }
+
+  private static String badPositionIndex(int index, int size, String desc) {
+    if (index < 0) {
+      return format("%s (%s) must not be negative", desc, index);
+    } else if (size < 0) {
+      throw new IllegalArgumentException("negative size: " + size);
+    } else { // index > size
+      return format("%s (%s) must not be greater than size (%s)",
+                    desc, index, size);
+    }
+  }
+
+  /**
+   * Ensures that {@code start} and {@code end} specify a valid <i>positions</i>
+   * in an array, list or string of size {@code size}, and are in order. A
+   * position index may range from zero to {@code size}, inclusive.
+   *
+   * @param start a user-supplied index identifying a starting position in an
+   *     array, list or string
+   * @param end a user-supplied index identifying a ending position in an array,
+   *     list or string
+   * @param size the size of that array, list or string
+   * @throws IndexOutOfBoundsException if either index is negative or is
+   *     greater than {@code size}, or if {@code end} is less than {@code start}
+   * @throws IllegalArgumentException if {@code size} is negative
+   */
+  public static void checkPositionIndexes(int start, int end, int size) {
+    // Carefully optimized for execution by hotspot (explanatory comment above)
+    if (start < 0 || end < start || end > size) {
+      throw new IndexOutOfBoundsException(badPositionIndexes(start, end, size));
+    }
+  }
+
+  private static String badPositionIndexes(int start, int end, int size) {
+    if (start < 0 || start > size) {
+      return badPositionIndex(start, size, "start index");
+    }
+    if (end < 0 || end > size) {
+      return badPositionIndex(end, size, "end index");
+    }
+    // end < start
+    return format("end index (%s) must not be less than start index (%s)",
+                  end, start);
+  }
+
+  /**
+   * Substitutes each {@code %s} in {@code template} with an argument. These
+   * are matched by position - the first {@code %s} gets {@code args[0]}, etc.
+   * If there are more arguments than placeholders, the unmatched arguments will
+   * be appended to the end of the formatted message in square braces.
+   *
+   * @param template a non-null string containing 0 or more {@code %s}
+   *     placeholders.
+   * @param args the arguments to be substituted into the message
+   *     template. Arguments are converted to strings using
+   *     {@link String#valueOf(Object)}. Arguments can be null.
+   */
+  @VisibleForTesting static String format(String template,
+      @Nullable Object... args) {
+    template = String.valueOf(template); // null -> "null"
+
+    // start substituting the arguments into the '%s' placeholders
+    StringBuilder builder = new StringBuilder(
+        template.length() + 16 * args.length);
+    int templateStart = 0;
+    int i = 0;
+    while (i < args.length) {
+      int placeholderStart = template.indexOf("%s", templateStart);
+      if (placeholderStart == -1) {
+        break;
+      }
+      builder.append(template.substring(templateStart, placeholderStart));
+      builder.append(args[i++]);
+      templateStart = placeholderStart + 2;
+    }
+    builder.append(template.substring(templateStart));
+
+    // if we run out of placeholders, append the extra args in square braces
+    if (i < args.length) {
+      builder.append(" [");
+      builder.append(args[i++]);
+      while (i < args.length) {
+        builder.append(", ");
+        builder.append(args[i++]);
+      }
+      builder.append(']');
+    }
+
+    return builder.toString();
+  }
+}
diff --git a/guava/src/com/google/common/base/Predicate.java b/guava/src/com/google/common/base/Predicate.java
new file mode 100644
index 0000000..08d9f64
--- /dev/null
+++ b/guava/src/com/google/common/base/Predicate.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base;
+
+import com.google.common.annotations.GwtCompatible;
+
+import javax.annotation.Nullable;
+
+/**
+ * Determines a true or false value for a given input.
+ *
+ * @author Kevin Bourrillion
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible
+public interface Predicate<T> {
+  /**
+   * Returns the result of applying this predicate to {@code input}. This method is <i>generally
+   * expected</i>, but not absolutely required, to have the following properties:
+   *
+   * <ul>
+   * <li>Its execution does not cause any observable side effects.
+   * <li>The computation is <i>consistent with equals</i>; that is, {@link Objects#equal
+   *     Objects.equal}{@code (a, b)} implies that {@code predicate.apply(a) ==
+   *     predicate.apply(b))}.
+   * </ul>
+   *
+   * @throws NullPointerException if {@code input} is null and this predicate does not accept null
+   *     arguments
+   */
+  boolean apply(@Nullable T input);
+
+  /**
+   * Indicates whether another object is equal to this predicate.
+   *
+   * <p>Most implementations will have no reason to override the behavior of {@link Object#equals}.
+   * However, an implementation may also choose to return {@code true} whenever {@code object} is a
+   * {@link Predicate} that it considers <i>interchangeable</i> with this one. "Interchangeable"
+   * <i>typically</i> means that {@code this.apply(t) == that.apply(t)} for all {@code t} of type
+   * {@code T}). Note that a {@code false} result from this method does not imply that the
+   * predicates are known <i>not</i> to be interchangeable.
+   */
+  @Override
+  boolean equals(@Nullable Object object);
+}
diff --git a/guava/src/com/google/common/base/Predicates.java b/guava/src/com/google/common/base/Predicates.java
new file mode 100644
index 0000000..5c77a28
--- /dev/null
+++ b/guava/src/com/google/common/base/Predicates.java
@@ -0,0 +1,620 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+import java.util.regex.Pattern;
+
+import javax.annotation.Nullable;
+
+/**
+ * Static utility methods pertaining to {@code Predicate} instances.
+ *
+ * <p>All methods returns serializable predicates as long as they're given
+ * serializable parameters.
+ *
+ * @author Kevin Bourrillion
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible(emulated = true)
+public final class Predicates {
+  private Predicates() {}
+
+  // TODO(kevinb): considering having these implement a VisitablePredicate
+  // interface which specifies an accept(PredicateVisitor) method.
+
+  /**
+   * Returns a predicate that always evaluates to {@code true}.
+   */
+  @GwtCompatible(serializable = true)
+  public static <T> Predicate<T> alwaysTrue() {
+    return ObjectPredicate.ALWAYS_TRUE.withNarrowedType();
+  }
+
+  /**
+   * Returns a predicate that always evaluates to {@code false}.
+   */
+  @GwtCompatible(serializable = true)
+  public static <T> Predicate<T> alwaysFalse() {
+    return ObjectPredicate.ALWAYS_FALSE.withNarrowedType();
+  }
+
+  /**
+   * Returns a predicate that evaluates to {@code true} if the object reference
+   * being tested is null.
+   */
+  @GwtCompatible(serializable = true)
+  public static <T> Predicate<T> isNull() {
+    return ObjectPredicate.IS_NULL.withNarrowedType();
+  }
+
+  /**
+   * Returns a predicate that evaluates to {@code true} if the object reference
+   * being tested is not null.
+   */
+  @GwtCompatible(serializable = true)
+  public static <T> Predicate<T> notNull() {
+    return ObjectPredicate.NOT_NULL.withNarrowedType();
+  }
+
+  /**
+   * Returns a predicate that evaluates to {@code true} if the given predicate
+   * evaluates to {@code false}.
+   */
+  public static <T> Predicate<T> not(Predicate<T> predicate) {
+    return new NotPredicate<T>(predicate);
+  }
+
+  /**
+   * Returns a predicate that evaluates to {@code true} if each of its
+   * components evaluates to {@code true}. The components are evaluated in
+   * order, and evaluation will be "short-circuited" as soon as a false
+   * predicate is found. It defensively copies the iterable passed in, so future
+   * changes to it won't alter the behavior of this predicate. If {@code
+   * components} is empty, the returned predicate will always evaluate to {@code
+   * true}.
+   */
+  public static <T> Predicate<T> and(
+      Iterable<? extends Predicate<? super T>> components) {
+    return new AndPredicate<T>(defensiveCopy(components));
+  }
+
+  /**
+   * Returns a predicate that evaluates to {@code true} if each of its
+   * components evaluates to {@code true}. The components are evaluated in
+   * order, and evaluation will be "short-circuited" as soon as a false
+   * predicate is found. It defensively copies the array passed in, so future
+   * changes to it won't alter the behavior of this predicate. If {@code
+   * components} is empty, the returned predicate will always evaluate to {@code
+   * true}.
+   */
+  public static <T> Predicate<T> and(Predicate<? super T>... components) {
+    return new AndPredicate<T>(defensiveCopy(components));
+  }
+
+  /**
+   * Returns a predicate that evaluates to {@code true} if both of its
+   * components evaluate to {@code true}. The components are evaluated in
+   * order, and evaluation will be "short-circuited" as soon as a false
+   * predicate is found.
+   */
+  public static <T> Predicate<T> and(Predicate<? super T> first,
+      Predicate<? super T> second) {
+    return new AndPredicate<T>(Predicates.<T>asList(
+        checkNotNull(first), checkNotNull(second)));
+  }
+
+  /**
+   * Returns a predicate that evaluates to {@code true} if any one of its
+   * components evaluates to {@code true}. The components are evaluated in
+   * order, and evaluation will be "short-circuited" as soon as a
+   * true predicate is found. It defensively copies the iterable passed in, so
+   * future changes to it won't alter the behavior of this predicate. If {@code
+   * components} is empty, the returned predicate will always evaluate to {@code
+   * false}.
+   */
+  public static <T> Predicate<T> or(
+      Iterable<? extends Predicate<? super T>> components) {
+    return new OrPredicate<T>(defensiveCopy(components));
+  }
+
+  /**
+   * Returns a predicate that evaluates to {@code true} if any one of its
+   * components evaluates to {@code true}. The components are evaluated in
+   * order, and evaluation will be "short-circuited" as soon as a
+   * true predicate is found. It defensively copies the array passed in, so
+   * future changes to it won't alter the behavior of this predicate. If {@code
+   * components} is empty, the returned predicate will always evaluate to {@code
+   * false}.
+   */
+  public static <T> Predicate<T> or(Predicate<? super T>... components) {
+    return new OrPredicate<T>(defensiveCopy(components));
+  }
+
+  /**
+   * Returns a predicate that evaluates to {@code true} if either of its
+   * components evaluates to {@code true}. The components are evaluated in
+   * order, and evaluation will be "short-circuited" as soon as a
+   * true predicate is found.
+   */
+  public static <T> Predicate<T> or(
+      Predicate<? super T> first, Predicate<? super T> second) {
+    return new OrPredicate<T>(Predicates.<T>asList(
+        checkNotNull(first), checkNotNull(second)));
+  }
+
+  /**
+   * Returns a predicate that evaluates to {@code true} if the object being
+   * tested {@code equals()} the given target or both are null.
+   */
+  public static <T> Predicate<T> equalTo(@Nullable T target) {
+    return (target == null)
+        ? Predicates.<T>isNull()
+        : new IsEqualToPredicate<T>(target);
+  }
+
+  /**
+   * Returns a predicate that evaluates to {@code true} if the object being
+   * tested is an instance of the given class. If the object being tested
+   * is {@code null} this predicate evaluates to {@code false}.
+   *
+   * <p>If you want to filter an {@code Iterable} to narrow its type, consider
+   * using {@link com.google.common.collect.Iterables#filter(Iterable, Class)}
+   * in preference.
+   *
+   * <p><b>Warning:</b> contrary to the typical assumptions about predicates (as
+   * documented at {@link Predicate#apply}), the returned predicate may not be
+   * <i>consistent with equals</i>. For example, {@code
+   * instanceOf(ArrayList.class)} will yield different results for the two equal
+   * instances {@code Lists.newArrayList(1)} and {@code Arrays.asList(1)}.
+   */
+  @GwtIncompatible("Class.isInstance")
+  public static Predicate<Object> instanceOf(Class<?> clazz) {
+    return new InstanceOfPredicate(clazz);
+  }
+  
+  /**
+   * Returns a predicate that evaluates to {@code true} if the class being
+   * tested is assignable from the given class.  The returned predicate
+   * does not allow null inputs.
+   * 
+   * @since 10.0
+   */
+  @GwtIncompatible("Class.isAssignableFrom")
+  @Beta
+  public static Predicate<Class<?>> assignableFrom(Class<?> clazz) {
+    return new AssignableFromPredicate(clazz);
+  }
+
+  /**
+   * Returns a predicate that evaluates to {@code true} if the object reference
+   * being tested is a member of the given collection. It does not defensively
+   * copy the collection passed in, so future changes to it will alter the
+   * behavior of the predicate.
+   *
+   * <p>This method can technically accept any {@code Collection<?>}, but using
+   * a typed collection helps prevent bugs. This approach doesn't block any
+   * potential users since it is always possible to use {@code
+   * Predicates.<Object>in()}.
+   *
+   * @param target the collection that may contain the function input
+   */
+  public static <T> Predicate<T> in(Collection<? extends T> target) {
+    return new InPredicate<T>(target);
+  }
+
+  /**
+   * Returns the composition of a function and a predicate. For every {@code x},
+   * the generated predicate returns {@code predicate(function(x))}.
+   *
+   * @return the composition of the provided function and predicate
+   */
+  public static <A, B> Predicate<A> compose(
+      Predicate<B> predicate, Function<A, ? extends B> function) {
+    return new CompositionPredicate<A, B>(predicate, function);
+  }
+
+  /**
+   * Returns a predicate that evaluates to {@code true} if the
+   * {@code CharSequence} being tested contains any match for the given
+   * regular expression pattern. The test used is equivalent to
+   * {@code Pattern.compile(pattern).matcher(arg).find()}
+   *
+   * @throws java.util.regex.PatternSyntaxException if the pattern is invalid
+   * @since 3.0
+   */
+  @GwtIncompatible(value = "java.util.regex.Pattern")
+  public static Predicate<CharSequence> containsPattern(String pattern) {
+    return new ContainsPatternPredicate(pattern);
+  }
+
+  /**
+   * Returns a predicate that evaluates to {@code true} if the
+   * {@code CharSequence} being tested contains any match for the given
+   * regular expression pattern. The test used is equivalent to
+   * {@code pattern.matcher(arg).find()}
+   *
+   * @since 3.0
+   */
+  @GwtIncompatible(value = "java.util.regex.Pattern")
+  public static Predicate<CharSequence> contains(Pattern pattern) {
+    return new ContainsPatternPredicate(pattern);
+  }
+
+  // End public API, begin private implementation classes.
+
+  // Package private for GWT serialization.
+  enum ObjectPredicate implements Predicate<Object> {
+    ALWAYS_TRUE {
+      @Override public boolean apply(@Nullable Object o) {
+        return true;
+      }
+    },
+    ALWAYS_FALSE {
+      @Override public boolean apply(@Nullable Object o) {
+        return false;
+      }
+    },
+    IS_NULL {
+      @Override public boolean apply(@Nullable Object o) {
+        return o == null;
+      }
+    },
+    NOT_NULL {
+      @Override public boolean apply(@Nullable Object o) {
+        return o != null;
+      }
+    };
+    
+    @SuppressWarnings("unchecked") // these Object predicates work for any T
+    <T> Predicate<T> withNarrowedType() {
+      return (Predicate<T>) this;
+    }
+  }
+
+  /** @see Predicates#not(Predicate) */
+  private static class NotPredicate<T> implements Predicate<T>, Serializable {
+    final Predicate<T> predicate;
+
+    NotPredicate(Predicate<T> predicate) {
+      this.predicate = checkNotNull(predicate);
+    }
+    @Override
+    public boolean apply(T t) {
+      return !predicate.apply(t);
+    }
+    @Override public int hashCode() {
+      return ~predicate.hashCode();
+    }
+    @Override public boolean equals(@Nullable Object obj) {
+      if (obj instanceof NotPredicate) {
+        NotPredicate<?> that = (NotPredicate<?>) obj;
+        return predicate.equals(that.predicate);
+      }
+      return false;
+    }
+    @Override public String toString() {
+      return "Not(" + predicate.toString() + ")";
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  private static final Joiner COMMA_JOINER = Joiner.on(",");
+
+  /** @see Predicates#and(Iterable) */
+  private static class AndPredicate<T> implements Predicate<T>, Serializable {
+    private final List<? extends Predicate<? super T>> components;
+
+    private AndPredicate(List<? extends Predicate<? super T>> components) {
+      this.components = components;
+    }
+    @Override
+    public boolean apply(T t) {
+      for (int i = 0; i < components.size(); i++) {
+        if (!components.get(i).apply(t)) {
+          return false;
+        }
+      }
+      return true;
+    }
+    @Override public int hashCode() {
+      // 0x12472c2c is a random number to help avoid collisions with OrPredicate
+      return components.hashCode() + 0x12472c2c;
+    }
+    @Override public boolean equals(@Nullable Object obj) {
+      if (obj instanceof AndPredicate) {
+        AndPredicate<?> that = (AndPredicate<?>) obj;
+        return components.equals(that.components);
+      }
+      return false;
+    }
+    @Override public String toString() {
+      return "And(" + COMMA_JOINER.join(components) + ")";
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  /** @see Predicates#or(Iterable) */
+  private static class OrPredicate<T> implements Predicate<T>, Serializable {
+    private final List<? extends Predicate<? super T>> components;
+
+    private OrPredicate(List<? extends Predicate<? super T>> components) {
+      this.components = components;
+    }
+    @Override
+    public boolean apply(T t) {
+      for (int i = 0; i < components.size(); i++) {
+        if (components.get(i).apply(t)) {
+          return true;
+        }
+      }
+      return false;
+    }
+    @Override public int hashCode() {
+      // 0x053c91cf is a random number to help avoid collisions with AndPredicate
+      return components.hashCode() + 0x053c91cf;
+    }
+    @Override public boolean equals(@Nullable Object obj) {
+      if (obj instanceof OrPredicate) {
+        OrPredicate<?> that = (OrPredicate<?>) obj;
+        return components.equals(that.components);
+      }
+      return false;
+    }
+    @Override public String toString() {
+      return "Or(" + COMMA_JOINER.join(components) + ")";
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  /** @see Predicates#equalTo(Object) */
+  private static class IsEqualToPredicate<T>
+      implements Predicate<T>, Serializable {
+    private final T target;
+
+    private IsEqualToPredicate(T target) {
+      this.target = target;
+    }
+    @Override
+    public boolean apply(T t) {
+      return target.equals(t);
+    }
+    @Override public int hashCode() {
+      return target.hashCode();
+    }
+    @Override public boolean equals(@Nullable Object obj) {
+      if (obj instanceof IsEqualToPredicate) {
+        IsEqualToPredicate<?> that = (IsEqualToPredicate<?>) obj;
+        return target.equals(that.target);
+      }
+      return false;
+    }
+    @Override public String toString() {
+      return "IsEqualTo(" + target + ")";
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  /** @see Predicates#instanceOf(Class) */
+  @GwtIncompatible("Class.isInstance")
+  private static class InstanceOfPredicate
+      implements Predicate<Object>, Serializable {
+    private final Class<?> clazz;
+
+    private InstanceOfPredicate(Class<?> clazz) {
+      this.clazz = checkNotNull(clazz);
+    }
+    @Override
+    public boolean apply(@Nullable Object o) {
+      return clazz.isInstance(o);
+    }
+    @Override public int hashCode() {
+      return clazz.hashCode();
+    }
+    @Override public boolean equals(@Nullable Object obj) {
+      if (obj instanceof InstanceOfPredicate) {
+        InstanceOfPredicate that = (InstanceOfPredicate) obj;
+        return clazz == that.clazz;
+      }
+      return false;
+    }
+    @Override public String toString() {
+      return "IsInstanceOf(" + clazz.getName() + ")";
+    }
+    private static final long serialVersionUID = 0;
+  }
+  
+  /** @see Predicates#assignableFrom(Class) */
+  @GwtIncompatible("Class.isAssignableFrom")
+  private static class AssignableFromPredicate
+      implements Predicate<Class<?>>, Serializable {
+    private final Class<?> clazz;
+
+    private AssignableFromPredicate(Class<?> clazz) {
+      this.clazz = checkNotNull(clazz);
+    }
+    @Override
+    public boolean apply(Class<?> input) {
+      return clazz.isAssignableFrom(input);
+    }
+    @Override public int hashCode() {
+      return clazz.hashCode();
+    }
+    @Override public boolean equals(@Nullable Object obj) {
+      if (obj instanceof AssignableFromPredicate) {
+        AssignableFromPredicate that = (AssignableFromPredicate) obj;
+        return clazz == that.clazz;
+      }
+      return false;
+    }
+    @Override public String toString() {
+      return "IsAssignableFrom(" + clazz.getName() + ")";
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  /** @see Predicates#in(Collection) */
+  private static class InPredicate<T> implements Predicate<T>, Serializable {
+    private final Collection<?> target;
+
+    private InPredicate(Collection<?> target) {
+      this.target = checkNotNull(target);
+    }
+
+    @Override
+    public boolean apply(T t) {
+      try {
+        return target.contains(t);
+      } catch (NullPointerException e) {
+        return false;
+      } catch (ClassCastException e) {
+        return false;
+      }
+    }
+
+    @Override public boolean equals(@Nullable Object obj) {
+      if (obj instanceof InPredicate) {
+        InPredicate<?> that = (InPredicate<?>) obj;
+        return target.equals(that.target);
+      }
+      return false;
+    }
+
+    @Override public int hashCode() {
+      return target.hashCode();
+    }
+
+    @Override public String toString() {
+      return "In(" + target + ")";
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  /** @see Predicates#compose(Predicate, Function) */
+  private static class CompositionPredicate<A, B>
+      implements Predicate<A>, Serializable {
+    final Predicate<B> p;
+    final Function<A, ? extends B> f;
+
+    private CompositionPredicate(Predicate<B> p, Function<A, ? extends B> f) {
+      this.p = checkNotNull(p);
+      this.f = checkNotNull(f);
+    }
+
+    @Override
+    public boolean apply(A a) {
+      return p.apply(f.apply(a));
+    }
+
+    @Override public boolean equals(@Nullable Object obj) {
+      if (obj instanceof CompositionPredicate) {
+        CompositionPredicate<?, ?> that = (CompositionPredicate<?, ?>) obj;
+        return f.equals(that.f) && p.equals(that.p);
+      }
+      return false;
+    }
+
+    @Override public int hashCode() {
+      return f.hashCode() ^ p.hashCode();
+    }
+
+    @Override public String toString() {
+      return p.toString() + "(" + f.toString() + ")";
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  /**
+   * @see Predicates#contains(Pattern)
+   * @see Predicates#containsPattern(String)
+   */
+  @GwtIncompatible("Only used by other GWT-incompatible code.")
+  private static class ContainsPatternPredicate
+      implements Predicate<CharSequence>, Serializable {
+    final Pattern pattern;
+
+    ContainsPatternPredicate(Pattern pattern) {
+      this.pattern = checkNotNull(pattern);
+    }
+
+    ContainsPatternPredicate(String patternStr) {
+      this(Pattern.compile(patternStr));
+    }
+
+    @Override
+    public boolean apply(CharSequence t) {
+      return pattern.matcher(t).find();
+    }
+
+    @Override public int hashCode() {
+      // Pattern uses Object.hashCode, so we have to reach
+      // inside to build a hashCode consistent with equals.
+
+      return Objects.hashCode(pattern.pattern(), pattern.flags());
+    }
+
+    @Override public boolean equals(@Nullable Object obj) {
+      if (obj instanceof ContainsPatternPredicate) {
+        ContainsPatternPredicate that = (ContainsPatternPredicate) obj;
+
+        // Pattern uses Object (identity) equality, so we have to reach
+        // inside to compare individual fields.
+        return Objects.equal(pattern.pattern(), that.pattern.pattern())
+            && Objects.equal(pattern.flags(), that.pattern.flags());
+      }
+      return false;
+    }
+
+    @Override public String toString() {
+      return Objects.toStringHelper(this)
+          .add("pattern", pattern)
+          .add("pattern.flags", Integer.toHexString(pattern.flags()))
+          .toString();
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  @SuppressWarnings("unchecked")
+  private static <T> List<Predicate<? super T>> asList(
+      Predicate<? super T> first, Predicate<? super T> second) {
+    return Arrays.<Predicate<? super T>>asList(first, second);
+  }
+
+  private static <T> List<T> defensiveCopy(T... array) {
+    return defensiveCopy(Arrays.asList(array));
+  }
+
+  static <T> List<T> defensiveCopy(Iterable<T> iterable) {
+    ArrayList<T> list = new ArrayList<T>();
+    for (T element : iterable) {
+      list.add(checkNotNull(element));
+    }
+    return list;
+  }
+}
diff --git a/guava/src/com/google/common/base/Splitter.java b/guava/src/com/google/common/base/Splitter.java
new file mode 100644
index 0000000..da7da95
--- /dev/null
+++ b/guava/src/com/google/common/base/Splitter.java
@@ -0,0 +1,539 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.annotation.CheckReturnValue;
+
+/**
+ * An object that divides strings (or other instances of {@code CharSequence})
+ * into substrings, by recognizing a <i>separator</i> (a.k.a. "delimiter")
+ * which can be expressed as a single character, literal string, regular
+ * expression, {@code CharMatcher}, or by using a fixed substring length. This
+ * class provides the complementary functionality to {@link Joiner}.
+ *
+ * <p>Here is the most basic example of {@code Splitter} usage: <pre>   {@code
+ *
+ *   Splitter.on(',').split("foo,bar")}</pre>
+ *
+ * This invocation returns an {@code Iterable<String>} containing {@code "foo"}
+ * and {@code "bar"}, in that order.
+ *
+ * <p>By default {@code Splitter}'s behavior is very simplistic: <pre>   {@code
+ *
+ *   Splitter.on(',').split("foo,,bar, quux")}</pre>
+ *
+ * This returns an iterable containing {@code ["foo", "", "bar", " quux"]}.
+ * Notice that the splitter does not assume that you want empty strings removed,
+ * or that you wish to trim whitespace. If you want features like these, simply
+ * ask for them: <pre> {@code
+ *
+ *   private static final Splitter MY_SPLITTER = Splitter.on(',')
+ *       .trimResults()
+ *       .omitEmptyStrings();}</pre>
+ *
+ * Now {@code MY_SPLITTER.split("foo, ,bar, quux,")} returns an iterable
+ * containing just {@code ["foo", "bar", "quux"]}. Note that the order in which
+ * the configuration methods are called is never significant; for instance,
+ * trimming is always applied first before checking for an empty result,
+ * regardless of the order in which the {@link #trimResults()} and
+ * {@link #omitEmptyStrings()} methods were invoked.
+ *
+ * <p><b>Warning: splitter instances are always immutable</b>; a configuration
+ * method such as {@code omitEmptyStrings} has no effect on the instance it
+ * is invoked on! You must store and use the new splitter instance returned by
+ * the method. This makes splitters thread-safe, and safe to store as {@code
+ * static final} constants (as illustrated above). <pre>   {@code
+ *
+ *   // Bad! Do not do this!
+ *   Splitter splitter = Splitter.on('/');
+ *   splitter.trimResults(); // does nothing!
+ *   return splitter.split("wrong / wrong / wrong");}</pre>
+ *
+ * The separator recognized by the splitter does not have to be a single
+ * literal character as in the examples above. See the methods {@link
+ * #on(String)}, {@link #on(Pattern)} and {@link #on(CharMatcher)} for examples
+ * of other ways to specify separators.
+ *
+ * <p><b>Note:</b> this class does not mimic any of the quirky behaviors of
+ * similar JDK methods; for instance, it does not silently discard trailing
+ * separators, as does {@link String#split(String)}, nor does it have a default
+ * behavior of using five particular whitespace characters as separators, like
+ * {@link java.util.StringTokenizer}.
+ *
+ * @author Julien Silland
+ * @author Jesse Wilson
+ * @author Kevin Bourrillion
+ * @author Louis Wasserman
+ * @since 1.0
+ */
+@GwtCompatible(emulated = true)
+public final class Splitter {
+  private final CharMatcher trimmer;
+  private final boolean omitEmptyStrings;
+  private final Strategy strategy;
+  private final int limit;
+
+  private Splitter(Strategy strategy) {
+    this(strategy, false, CharMatcher.NONE, Integer.MAX_VALUE);
+  }
+
+  private Splitter(Strategy strategy, boolean omitEmptyStrings,
+      CharMatcher trimmer, int limit) {
+    this.strategy = strategy;
+    this.omitEmptyStrings = omitEmptyStrings;
+    this.trimmer = trimmer;
+    this.limit = limit;
+  }
+
+  /**
+   * Returns a splitter that uses the given single-character separator. For
+   * example, {@code Splitter.on(',').split("foo,,bar")} returns an iterable
+   * containing {@code ["foo", "", "bar"]}.
+   *
+   * @param separator the character to recognize as a separator
+   * @return a splitter, with default settings, that recognizes that separator
+   */
+  public static Splitter on(char separator) {
+    return on(CharMatcher.is(separator));
+  }
+
+  /**
+   * Returns a splitter that considers any single character matched by the
+   * given {@code CharMatcher} to be a separator. For example, {@code
+   * Splitter.on(CharMatcher.anyOf(";,")).split("foo,;bar,quux")} returns an
+   * iterable containing {@code ["foo", "", "bar", "quux"]}.
+   *
+   * @param separatorMatcher a {@link CharMatcher} that determines whether a
+   *     character is a separator
+   * @return a splitter, with default settings, that uses this matcher
+   */
+  public static Splitter on(final CharMatcher separatorMatcher) {
+    checkNotNull(separatorMatcher);
+
+    return new Splitter(new Strategy() {
+      @Override public SplittingIterator iterator(
+          Splitter splitter, final CharSequence toSplit) {
+        return new SplittingIterator(splitter, toSplit) {
+          @Override int separatorStart(int start) {
+            return separatorMatcher.indexIn(toSplit, start);
+          }
+
+          @Override int separatorEnd(int separatorPosition) {
+            return separatorPosition + 1;
+          }
+        };
+      }
+    });
+  }
+
+  /**
+   * Returns a splitter that uses the given fixed string as a separator. For
+   * example, {@code Splitter.on(", ").split("foo, bar, baz,qux")} returns an
+   * iterable containing {@code ["foo", "bar", "baz,qux"]}.
+   *
+   * @param separator the literal, nonempty string to recognize as a separator
+   * @return a splitter, with default settings, that recognizes that separator
+   */
+  public static Splitter on(final String separator) {
+    checkArgument(separator.length() != 0,
+        "The separator may not be the empty string.");
+
+    return new Splitter(new Strategy() {
+      @Override public SplittingIterator iterator(
+          Splitter splitter, CharSequence toSplit) {
+        return new SplittingIterator(splitter, toSplit) {
+          @Override public int separatorStart(int start) {
+            int delimeterLength = separator.length();
+
+            positions:
+            for (int p = start, last = toSplit.length() - delimeterLength;
+                p <= last; p++) {
+              for (int i = 0; i < delimeterLength; i++) {
+                if (toSplit.charAt(i + p) != separator.charAt(i)) {
+                  continue positions;
+                }
+              }
+              return p;
+            }
+            return -1;
+          }
+
+          @Override public int separatorEnd(int separatorPosition) {
+            return separatorPosition + separator.length();
+          }
+        };
+      }
+    });
+  }
+
+  /**
+   * Returns a splitter that considers any subsequence matching {@code
+   * pattern} to be a separator. For example, {@code
+   * Splitter.on(Pattern.compile("\r?\n")).split(entireFile)} splits a string
+   * into lines whether it uses DOS-style or UNIX-style line terminators.
+   *
+   * @param separatorPattern the pattern that determines whether a subsequence
+   *     is a separator. This pattern may not match the empty string.
+   * @return a splitter, with default settings, that uses this pattern
+   * @throws IllegalArgumentException if {@code separatorPattern} matches the
+   *     empty string
+   */
+  @GwtIncompatible("java.util.regex")
+  public static Splitter on(final Pattern separatorPattern) {
+    checkNotNull(separatorPattern);
+    checkArgument(!separatorPattern.matcher("").matches(),
+        "The pattern may not match the empty string: %s", separatorPattern);
+
+    return new Splitter(new Strategy() {
+      @Override public SplittingIterator iterator(
+          final Splitter splitter, CharSequence toSplit) {
+        final Matcher matcher = separatorPattern.matcher(toSplit);
+        return new SplittingIterator(splitter, toSplit) {
+          @Override public int separatorStart(int start) {
+            return matcher.find(start) ? matcher.start() : -1;
+          }
+
+          @Override public int separatorEnd(int separatorPosition) {
+            return matcher.end();
+          }
+        };
+      }
+    });
+  }
+
+  /**
+   * Returns a splitter that considers any subsequence matching a given
+   * pattern (regular expression) to be a separator. For example, {@code
+   * Splitter.onPattern("\r?\n").split(entireFile)} splits a string into lines
+   * whether it uses DOS-style or UNIX-style line terminators. This is
+   * equivalent to {@code Splitter.on(Pattern.compile(pattern))}.
+   *
+   * @param separatorPattern the pattern that determines whether a subsequence
+   *     is a separator. This pattern may not match the empty string.
+   * @return a splitter, with default settings, that uses this pattern
+   * @throws java.util.regex.PatternSyntaxException if {@code separatorPattern}
+   *     is a malformed expression
+   * @throws IllegalArgumentException if {@code separatorPattern} matches the
+   *     empty string
+   */
+  @GwtIncompatible("java.util.regex")
+  public static Splitter onPattern(String separatorPattern) {
+    return on(Pattern.compile(separatorPattern));
+  }
+
+  /**
+   * Returns a splitter that divides strings into pieces of the given length.
+   * For example, {@code Splitter.fixedLength(2).split("abcde")} returns an
+   * iterable containing {@code ["ab", "cd", "e"]}. The last piece can be
+   * smaller than {@code length} but will never be empty.
+   *
+   * @param length the desired length of pieces after splitting
+   * @return a splitter, with default settings, that can split into fixed sized
+   *     pieces
+   */
+  public static Splitter fixedLength(final int length) {
+    checkArgument(length > 0, "The length may not be less than 1");
+
+    return new Splitter(new Strategy() {
+      @Override public SplittingIterator iterator(
+          final Splitter splitter, CharSequence toSplit) {
+        return new SplittingIterator(splitter, toSplit) {
+          @Override public int separatorStart(int start) {
+            int nextChunkStart = start + length;
+            return (nextChunkStart < toSplit.length() ? nextChunkStart : -1);
+          }
+
+          @Override public int separatorEnd(int separatorPosition) {
+            return separatorPosition;
+          }
+        };
+      }
+    });
+  }
+
+  /**
+   * Returns a splitter that behaves equivalently to {@code this} splitter, but
+   * automatically omits empty strings from the results. For example, {@code
+   * Splitter.on(',').omitEmptyStrings().split(",a,,,b,c,,")} returns an
+   * iterable containing only {@code ["a", "b", "c"]}.
+   *
+   * <p>If either {@code trimResults} option is also specified when creating a
+   * splitter, that splitter always trims results first before checking for
+   * emptiness. So, for example, {@code
+   * Splitter.on(':').omitEmptyStrings().trimResults().split(": : : ")} returns
+   * an empty iterable.
+   *
+   * <p>Note that it is ordinarily not possible for {@link #split(CharSequence)}
+   * to return an empty iterable, but when using this option, it can (if the
+   * input sequence consists of nothing but separators).
+   *
+   * @return a splitter with the desired configuration
+   */
+  @CheckReturnValue
+  public Splitter omitEmptyStrings() {
+    return new Splitter(strategy, true, trimmer, limit);
+  }
+
+  /**
+   * Returns a splitter that behaves equivalently to {@code this} splitter but
+   * stops splitting after it reaches the limit.
+   * The limit defines the maximum number of items returned by the iterator.
+   *
+   * <p>For example,
+   * {@code Splitter.on(',').limit(3).split("a,b,c,d")} returns an iterable
+   * containing {@code ["a", "b", "c,d"]}.  When omitting empty strings, the
+   * omitted strings do no count.  Hence,
+   * {@code Splitter.on(',').limit(3).omitEmptyStrings().split("a,,,b,,,c,d")}
+   * returns an iterable containing {@code ["a", "b", "c,d"}.
+   * When trim is requested, all entries, including the last are trimmed.  Hence
+   * {@code Splitter.on(',').limit(3).trimResults().split(" a , b , c , d ")}
+   * results in @{code ["a", "b", "c , d"]}.
+   *
+   * @param limit the maximum number of items returns
+   * @return a splitter with the desired configuration
+   * @since 9.0
+   */
+  @CheckReturnValue
+  public Splitter limit(int limit) {
+    checkArgument(limit > 0, "must be greater than zero: %s", limit);
+    return new Splitter(strategy, omitEmptyStrings, trimmer, limit);
+  }
+
+  /**
+   * Returns a splitter that behaves equivalently to {@code this} splitter, but
+   * automatically removes leading and trailing {@linkplain
+   * CharMatcher#WHITESPACE whitespace} from each returned substring; equivalent
+   * to {@code trimResults(CharMatcher.WHITESPACE)}. For example, {@code
+   * Splitter.on(',').trimResults().split(" a, b ,c ")} returns an iterable
+   * containing {@code ["a", "b", "c"]}.
+   *
+   * @return a splitter with the desired configuration
+   */
+  @CheckReturnValue
+  public Splitter trimResults() {
+    return trimResults(CharMatcher.WHITESPACE);
+  }
+
+  /**
+   * Returns a splitter that behaves equivalently to {@code this} splitter, but
+   * removes all leading or trailing characters matching the given {@code
+   * CharMatcher} from each returned substring. For example, {@code
+   * Splitter.on(',').trimResults(CharMatcher.is('_')).split("_a ,_b_ ,c__")}
+   * returns an iterable containing {@code ["a ", "b_ ", "c"]}.
+   *
+   * @param trimmer a {@link CharMatcher} that determines whether a character
+   *     should be removed from the beginning/end of a subsequence
+   * @return a splitter with the desired configuration
+   */
+  // TODO(kevinb): throw if a trimmer was already specified!
+  @CheckReturnValue
+  public Splitter trimResults(CharMatcher trimmer) {
+    checkNotNull(trimmer);
+    return new Splitter(strategy, omitEmptyStrings, trimmer, limit);
+  }
+
+  /**
+   * Splits {@code sequence} into string components and makes them available
+   * through an {@link Iterator}, which may be lazily evaluated.
+   *
+   * @param sequence the sequence of characters to split
+   * @return an iteration over the segments split from the parameter.
+   */
+  public Iterable<String> split(final CharSequence sequence) {
+    checkNotNull(sequence);
+
+    return new Iterable<String>() {
+      @Override public Iterator<String> iterator() {
+        return spliterator(sequence);
+      }
+    };
+  }
+
+  private Iterator<String> spliterator(CharSequence sequence) {
+    return strategy.iterator(this, sequence);
+  }
+
+  /**
+   * Returns a {@code MapSplitter} which splits entries based on this splitter,
+   * and splits entries into keys and values using the specified separator.
+   *
+   * @since 10.0
+   */
+  @CheckReturnValue
+  @Beta
+  public MapSplitter withKeyValueSeparator(String separator) {
+    return withKeyValueSeparator(on(separator));
+  }
+
+  /**
+   * Returns a {@code MapSplitter} which splits entries based on this splitter,
+   * and splits entries into keys and values using the specified key-value
+   * splitter.
+   *
+   * @since 10.0
+   */
+  @CheckReturnValue
+  @Beta
+  public MapSplitter withKeyValueSeparator(Splitter keyValueSplitter) {
+    return new MapSplitter(this, keyValueSplitter);
+  }
+
+  /**
+   * An object that splits strings into maps as {@code Splitter} splits
+   * iterables and lists. Like {@code Splitter}, it is thread-safe and
+   * immutable.
+   *
+   * @since 10.0
+   */
+  @Beta
+  public static final class MapSplitter {
+    private static final String INVALID_ENTRY_MESSAGE =
+        "Chunk [%s] is not a valid entry";
+    private final Splitter outerSplitter;
+    private final Splitter entrySplitter;
+
+    private MapSplitter(Splitter outerSplitter, Splitter entrySplitter) {
+      this.outerSplitter = outerSplitter; // only "this" is passed
+      this.entrySplitter = checkNotNull(entrySplitter);
+    }
+
+    /**
+     * Splits {@code sequence} into substrings, splits each substring into
+     * an entry, and returns an unmodifiable map with each of the entries. For
+     * example, <code>
+     * Splitter.on(';').trimResults().withKeyValueSeparator("=>")
+     * .split("a=>b ; c=>b")
+     * </code> will return a mapping from {@code "a"} to {@code "b"} and
+     * {@code "c"} to {@code b}.
+     *
+     * <p>The returned map preserves the order of the entries from
+     * {@code sequence}.
+     *
+     * @throws IllegalArgumentException if the specified sequence does not split
+     *         into valid map entries, or if there are duplicate keys
+     */
+    public Map<String, String> split(CharSequence sequence) {
+      Map<String, String> map = new LinkedHashMap<String, String>();
+      for (String entry : outerSplitter.split(sequence)) {
+        Iterator<String> entryFields = entrySplitter.spliterator(entry);
+
+        checkArgument(entryFields.hasNext(), INVALID_ENTRY_MESSAGE, entry);
+        String key = entryFields.next();
+        checkArgument(!map.containsKey(key), "Duplicate key [%s] found.", key);
+
+        checkArgument(entryFields.hasNext(), INVALID_ENTRY_MESSAGE, entry);
+        String value = entryFields.next();
+        map.put(key, value);
+
+        checkArgument(!entryFields.hasNext(), INVALID_ENTRY_MESSAGE, entry);
+      }
+      return Collections.unmodifiableMap(map);
+    }
+  }
+
+  private interface Strategy {
+    Iterator<String> iterator(Splitter splitter, CharSequence toSplit);
+  }
+
+  private abstract static class SplittingIterator
+      extends AbstractIterator<String> {
+    final CharSequence toSplit;
+    final CharMatcher trimmer;
+    final boolean omitEmptyStrings;
+
+    /**
+     * Returns the first index in {@code toSplit} at or after {@code start}
+     * that contains the separator.
+     */
+    abstract int separatorStart(int start);
+
+    /**
+     * Returns the first index in {@code toSplit} after {@code
+     * separatorPosition} that does not contain a separator. This method is only
+     * invoked after a call to {@code separatorStart}.
+     */
+    abstract int separatorEnd(int separatorPosition);
+
+    int offset = 0;
+    int limit;
+
+    protected SplittingIterator(Splitter splitter, CharSequence toSplit) {
+      this.trimmer = splitter.trimmer;
+      this.omitEmptyStrings = splitter.omitEmptyStrings;
+      this.limit = splitter.limit;
+      this.toSplit = toSplit;
+    }
+
+    @Override protected String computeNext() {
+      while (offset != -1) {
+        int start = offset;
+        int end;
+
+        int separatorPosition = separatorStart(offset);
+        if (separatorPosition == -1) {
+          end = toSplit.length();
+          offset = -1;
+        } else {
+          end = separatorPosition;
+          offset = separatorEnd(separatorPosition);
+        }
+
+        while (start < end && trimmer.matches(toSplit.charAt(start))) {
+          start++;
+        }
+        while (end > start && trimmer.matches(toSplit.charAt(end - 1))) {
+          end--;
+        }
+
+        if (omitEmptyStrings && start == end) {
+          continue;
+        }
+
+        if (limit == 1) {
+          // The limit has been reached, return the rest of the string as the
+          // final item.  This is tested after empty string removal so that
+          // empty strings do not count towards the limit.
+          end = toSplit.length();
+          offset = -1;
+          // Since we may have changed the end, we need to trim it again.
+          while (end > start && trimmer.matches(toSplit.charAt(end - 1))) {
+            end--;
+          }
+        } else {
+          limit--;
+        }
+
+        return toSplit.subSequence(start, end).toString();
+      }
+      return endOfData();
+    }
+  }
+}
diff --git a/guava/src/com/google/common/base/Stopwatch.java b/guava/src/com/google/common/base/Stopwatch.java
new file mode 100644
index 0000000..ec9cc9c
--- /dev/null
+++ b/guava/src/com/google/common/base/Stopwatch.java
@@ -0,0 +1,223 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkState;
+import static java.util.concurrent.TimeUnit.MICROSECONDS;
+import static java.util.concurrent.TimeUnit.MILLISECONDS;
+import static java.util.concurrent.TimeUnit.NANOSECONDS;
+import static java.util.concurrent.TimeUnit.SECONDS;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+
+import java.util.concurrent.TimeUnit;
+
+/**
+ * An object that measures elapsed time in nanoseconds. It is useful to measure
+ * elapsed time using this class instead of direct calls to {@link
+ * System#nanoTime} for a few reasons:
+ *
+ * <ul>
+ * <li>An alternate time source can be substituted, for testing or performance
+ *     reasons.
+ * <li>As documented by {@code nanoTime}, the value returned has no absolute
+ *     meaning, and can only be interpreted as relative to another timestamp
+ *     returned by {@code nanoTime} at a different time. {@code Stopwatch} is a
+ *     more effective abstraction because it exposes only these relative values,
+ *     not the absolute ones.
+ * </ul>
+ *
+ * <p>Basic usage:
+ * <pre>
+ *   Stopwatch stopwatch = new Stopwatch().{@link #start start}();
+ *   doSomething();
+ *   stopwatch.{@link #stop stop}(); // optional
+ *
+ *   long millis = stopwatch.{@link #elapsedMillis elapsedMillis}();
+ *
+ *   log.info("that took: " + stopwatch); // formatted string like "12.3 ms"
+ * </pre>
+ *
+ * <p>Stopwatch methods are not idempotent; it is an error to start or stop a
+ * stopwatch that is already in the desired state.
+ *
+ * <p>When testing code that uses this class, use the {@linkplain
+ * #Stopwatch(Ticker) alternate constructor} to supply a fake or mock ticker.
+ * <!-- TODO(kevinb): restore the "such as" --> This allows you to
+ * simulate any valid behavior of the stopwatch.
+ *
+ * <p><b>Note:</b> This class is not thread-safe.
+ *
+ * @author Kevin Bourrillion
+ * @since 10.0
+ */
+@Beta
+@GwtCompatible(emulated=true)
+public final class Stopwatch {
+  private final Ticker ticker;
+  private boolean isRunning;
+  private long elapsedNanos;
+  private long startTick;
+
+  /**
+   * Creates (but does not start) a new stopwatch using {@link System#nanoTime}
+   * as its time source.
+   */
+  public Stopwatch() {
+    this(Ticker.systemTicker());
+  }
+
+  /**
+   * Creates (but does not start) a new stopwatch, using the specified time
+   * source.
+   */
+  public Stopwatch(Ticker ticker) {
+    this.ticker = checkNotNull(ticker);
+  }
+
+  /**
+   * Returns {@code true} if {@link #start()} has been called on this stopwatch,
+   * and {@link #stop()} has not been called since the last call to {@code
+   * start()}.
+   */
+  public boolean isRunning() {
+    return isRunning;
+  }
+
+  /**
+   * Starts the stopwatch.
+   *
+   * @return this {@code Stopwatch} instance
+   * @throws IllegalStateException if the stopwatch is already running.
+   */
+  public Stopwatch start() {
+    checkState(!isRunning);
+    isRunning = true;
+    startTick = ticker.read();
+    return this;
+  }
+
+  /**
+   * Stops the stopwatch. Future reads will return the fixed duration that had
+   * elapsed up to this point.
+   *
+   * @return this {@code Stopwatch} instance
+   * @throws IllegalStateException if the stopwatch is already stopped.
+   */
+  public Stopwatch stop() {
+    long tick = ticker.read();
+    checkState(isRunning);
+    isRunning = false;
+    elapsedNanos += tick - startTick;
+    return this;
+  }
+
+  /**
+   * Sets the elapsed time for this stopwatch to zero,
+   * and places it in a stopped state.
+   *
+   * @return this {@code Stopwatch} instance
+   */
+  public Stopwatch reset() {
+    elapsedNanos = 0;
+    isRunning = false;
+    return this;
+  }
+
+  private long elapsedNanos() {
+    return isRunning ? ticker.read() - startTick + elapsedNanos : elapsedNanos;
+  }
+
+  /**
+   * Returns the current elapsed time shown on this stopwatch, expressed
+   * in the desired time unit, with any fraction rounded down.
+   *
+   * <p>Note that the overhead of measurement can be more than a microsecond, so
+   * it is generally not useful to specify {@link TimeUnit#NANOSECONDS}
+   * precision here.
+   */
+  public long elapsedTime(TimeUnit desiredUnit) {
+    return desiredUnit.convert(elapsedNanos(), NANOSECONDS);
+  }
+
+  /**
+   * Returns the current elapsed time shown on this stopwatch, expressed
+   * in milliseconds, with any fraction rounded down. This is identical to
+   * {@code elapsedTime(TimeUnit.MILLISECONDS}.
+   */
+  public long elapsedMillis() {
+    return elapsedTime(MILLISECONDS);
+  }
+
+  /**
+   * Returns a string representation of the current elapsed time; equivalent to
+   * {@code toString(4)} (four significant figures).
+   */
+  @GwtIncompatible("String.format()")
+  @Override public String toString() {
+    return toString(4);
+  }
+
+  /**
+   * Returns a string representation of the current elapsed time, choosing an
+   * appropriate unit and using the specified number of significant figures.
+   * For example, at the instant when {@code elapsedTime(NANOSECONDS)} would
+   * return {1234567}, {@code toString(4)} returns {@code "1.235 ms"}.
+   */
+  @GwtIncompatible("String.format()")
+  public String toString(int significantDigits) {
+    long nanos = elapsedNanos();
+
+    TimeUnit unit = chooseUnit(nanos);
+    double value = (double) nanos / NANOSECONDS.convert(1, unit);
+
+    // Too bad this functionality is not exposed as a regular method call
+    return String.format("%." + significantDigits + "g %s",
+        value, abbreviate(unit));
+  }
+
+  private static TimeUnit chooseUnit(long nanos) {
+    if (SECONDS.convert(nanos, NANOSECONDS) > 0) {
+      return SECONDS;
+    }
+    if (MILLISECONDS.convert(nanos, NANOSECONDS) > 0) {
+      return MILLISECONDS;
+    }
+    if (MICROSECONDS.convert(nanos, NANOSECONDS) > 0) {
+      return MICROSECONDS;
+    }
+    return NANOSECONDS;
+  }
+
+  private static String abbreviate(TimeUnit unit) {
+    switch (unit) {
+      case NANOSECONDS:
+        return "ns";
+      case MICROSECONDS:
+        return "\u03bcs"; // μs
+      case MILLISECONDS:
+        return "ms";
+      case SECONDS:
+        return "s";
+      default:
+        throw new AssertionError();
+    }
+  }
+}
diff --git a/guava/src/com/google/common/base/Strings.java b/guava/src/com/google/common/base/Strings.java
new file mode 100644
index 0000000..7697452
--- /dev/null
+++ b/guava/src/com/google/common/base/Strings.java
@@ -0,0 +1,241 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.VisibleForTesting;
+
+import java.util.Formatter;
+
+import javax.annotation.Nullable;
+
+/**
+ * Static utility methods pertaining to {@code String} or {@code CharSequence}
+ * instances.
+ *
+ * @author Kevin Bourrillion
+ * @since 3.0
+ */
+@GwtCompatible
+public final class Strings {
+  private Strings() {}
+
+  /**
+   * Returns the given string if it is non-null; the empty string otherwise.
+   *
+   * @param string the string to test and possibly return
+   * @return {@code string} itself if it is non-null; {@code ""} if it is null
+   */
+  public static String nullToEmpty(@Nullable String string) {
+    return (string == null) ? "" : string;
+  }
+
+  /**
+   * Returns the given string if it is nonempty; {@code null} otherwise.
+   *
+   * @param string the string to test and possibly return
+   * @return {@code string} itself if it is nonempty; {@code null} if it is
+   *     empty or null
+   */
+  public static @Nullable String emptyToNull(@Nullable String string) {
+    return isNullOrEmpty(string) ? null : string;
+  }
+
+  /**
+   * Returns {@code true} if the given string is null or is the empty string.
+   *
+   * <p>Consider normalizing your string references with {@link #nullToEmpty}.
+   * If you do, you can use {@link String#isEmpty()} instead of this
+   * method, and you won't need special null-safe forms of methods like {@link
+   * String#toUpperCase} either. Or, if you'd like to normalize "in the other
+   * direction," converting empty strings to {@code null}, you can use {@link
+   * #emptyToNull}.
+   *
+   * @param string a string reference to check
+   * @return {@code true} if the string is null or is the empty string
+   */
+  public static boolean isNullOrEmpty(@Nullable String string) {
+    return string == null || string.length() == 0; // string.isEmpty() in Java 6
+  }
+
+  /**
+   * Returns a string, of length at least {@code minLength}, consisting of
+   * {@code string} prepended with as many copies of {@code padChar} as are
+   * necessary to reach that length. For example,
+   *
+   * <ul>
+   * <li>{@code padStart("7", 3, '0')} returns {@code "007"}
+   * <li>{@code padStart("2010", 3, '0')} returns {@code "2010"}
+   * </ul>
+   *
+   * <p>See {@link Formatter} for a richer set of formatting capabilities.
+   *
+   * @param string the string which should appear at the end of the result
+   * @param minLength the minimum length the resulting string must have. Can be
+   *     zero or negative, in which case the input string is always returned.
+   * @param padChar the character to insert at the beginning of the result until
+   *     the minimum length is reached
+   * @return the padded string
+   */
+  public static String padStart(String string, int minLength, char padChar) {
+    checkNotNull(string);  // eager for GWT.
+    if (string.length() >= minLength) {
+      return string;
+    }
+    StringBuilder sb = new StringBuilder(minLength);
+    for (int i = string.length(); i < minLength; i++) {
+      sb.append(padChar);
+    }
+    sb.append(string);
+    return sb.toString();
+  }
+
+  /**
+   * Returns a string, of length at least {@code minLength}, consisting of
+   * {@code string} appended with as many copies of {@code padChar} as are
+   * necessary to reach that length. For example,
+   *
+   * <ul>
+   * <li>{@code padEnd("4.", 5, '0')} returns {@code "4.000"}
+   * <li>{@code padEnd("2010", 3, '!')} returns {@code "2010"}
+   * </ul>
+   *
+   * <p>See {@link Formatter} for a richer set of formatting capabilities.
+   *
+   * @param string the string which should appear at the beginning of the result
+   * @param minLength the minimum length the resulting string must have. Can be
+   *     zero or negative, in which case the input string is always returned.
+   * @param padChar the character to append to the end of the result until the
+   *     minimum length is reached
+   * @return the padded string
+   */
+  public static String padEnd(String string, int minLength, char padChar) {
+    checkNotNull(string);  // eager for GWT.
+    if (string.length() >= minLength) {
+      return string;
+    }
+    StringBuilder sb = new StringBuilder(minLength);
+    sb.append(string);
+    for (int i = string.length(); i < minLength; i++) {
+      sb.append(padChar);
+    }
+    return sb.toString();
+  }
+
+  /**
+   * Returns a string consisting of a specific number of concatenated copies of
+   * an input string. For example, {@code repeat("hey", 3)} returns the string
+   * {@code "heyheyhey"}.
+   *
+   * @param string any non-null string
+   * @param count the number of times to repeat it; a nonnegative integer
+   * @return a string containing {@code string} repeated {@code count} times
+   *     (the empty string if {@code count} is zero)
+   * @throws IllegalArgumentException if {@code count} is negative
+   */
+  public static String repeat(String string, int count) {
+    checkNotNull(string);  // eager for GWT.
+
+    if (count <= 1) {
+      checkArgument(count >= 0, "invalid count: %s", count);
+      return (count == 0) ? "" : string;
+    }
+
+    // IF YOU MODIFY THE CODE HERE, you must update StringsRepeatBenchmark
+    final int len = string.length();
+    final long longSize = (long) len * (long) count;
+    final int size = (int) longSize;
+    if (size != longSize) {
+      throw new ArrayIndexOutOfBoundsException("Required array size too large: "
+          + String.valueOf(longSize));
+    }
+
+    final char[] array = new char[size];
+    string.getChars(0, len, array, 0);
+    int n;
+    for (n = len; n < size - n; n <<= 1) {
+      System.arraycopy(array, 0, array, n, n);
+    }
+    System.arraycopy(array, 0, array, n, size - n);
+    return new String(array);
+  }
+
+  /**
+   * Returns the longest string {@code prefix} such that
+   * {@code a.toString().startsWith(prefix) && b.toString().startsWith(prefix)},
+   * taking care not to split surrogate pairs. If {@code a} and {@code b} have
+   * no common prefix, returns the empty string.
+   *
+   * @since 11.0
+   */
+  @Beta
+  public static String commonPrefix(CharSequence a, CharSequence b) {
+    checkNotNull(a);
+    checkNotNull(b);
+
+    int maxPrefixLength = Math.min(a.length(), b.length());
+    int p = 0;
+    while (p < maxPrefixLength && a.charAt(p) == b.charAt(p)) {
+      p++;
+    }
+    if (validSurrogatePairAt(a, p - 1) || validSurrogatePairAt(b, p - 1)) {
+      p--;
+    }
+    return a.subSequence(0, p).toString();
+  }
+
+  /**
+   * Returns the longest string {@code suffix} such that
+   * {@code a.toString().endsWith(suffix) && b.toString().endsWith(suffix)},
+   * taking care not to split surrogate pairs. If {@code a} and {@code b} have
+   * no common suffix, returns the empty string.
+   *
+   * @since 11.0
+   */
+  @Beta
+  public static String commonSuffix(CharSequence a, CharSequence b) {
+    checkNotNull(a);
+    checkNotNull(b);
+
+    int maxSuffixLength = Math.min(a.length(), b.length());
+    int s = 0;
+    while (s < maxSuffixLength
+        && a.charAt(a.length() - s - 1) == b.charAt(b.length() - s - 1)) {
+      s++;
+    }
+    if (validSurrogatePairAt(a, a.length() - s - 1)
+        || validSurrogatePairAt(b, b.length() - s - 1)) {
+      s--;
+    }
+    return a.subSequence(a.length() - s, a.length()).toString();
+  }
+
+  /**
+   * True when a valid surrogate pair starts at the given {@code index} in the
+   * given {@code string}. Out-of-range indexes return false.
+   */
+  @VisibleForTesting
+  static boolean validSurrogatePairAt(CharSequence string, int index) {
+    return index >= 0 && index <= (string.length() - 2)
+        && Character.isHighSurrogate(string.charAt(index))
+        && Character.isLowSurrogate(string.charAt(index + 1));
+  }
+}
diff --git a/guava/src/com/google/common/base/Supplier.java b/guava/src/com/google/common/base/Supplier.java
new file mode 100644
index 0000000..ab8b908
--- /dev/null
+++ b/guava/src/com/google/common/base/Supplier.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base;
+
+import com.google.common.annotations.GwtCompatible;
+
+/**
+ * A class that can supply objects of a single type.  Semantically, this could
+ * be a factory, generator, builder, closure, or something else entirely. No
+ * guarantees are implied by this interface.
+ *
+ * @author Harry Heymann
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible
+public interface Supplier<T> {
+  /**
+   * Retrieves an instance of the appropriate type. The returned object may or
+   * may not be a new instance, depending on the implementation.
+   *
+   * @return an instance of the appropriate type
+   */
+  T get();
+}
diff --git a/guava/src/com/google/common/base/Suppliers.java b/guava/src/com/google/common/base/Suppliers.java
new file mode 100644
index 0000000..5f418c0
--- /dev/null
+++ b/guava/src/com/google/common/base/Suppliers.java
@@ -0,0 +1,254 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.VisibleForTesting;
+
+import java.io.Serializable;
+import java.util.concurrent.TimeUnit;
+
+import javax.annotation.Nullable;
+
+/**
+ * Useful suppliers.
+ *
+ * <p>All methods return serializable suppliers as long as they're given
+ * serializable parameters.
+ *
+ * @author Laurence Gonsalves
+ * @author Harry Heymann
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible
+public final class Suppliers {
+  private Suppliers() {}
+
+  /**
+   * Returns a new supplier which is the composition of the provided function
+   * and supplier. In other words, the new supplier's value will be computed by
+   * retrieving the value from {@code supplier}, and then applying
+   * {@code function} to that value. Note that the resulting supplier will not
+   * call {@code supplier} or invoke {@code function} until it is called.
+   */
+  public static <F, T> Supplier<T> compose(
+      Function<? super F, T> function, Supplier<F> supplier) {
+    Preconditions.checkNotNull(function);
+    Preconditions.checkNotNull(supplier);
+    return new SupplierComposition<F, T>(function, supplier);
+  }
+
+  private static class SupplierComposition<F, T>
+      implements Supplier<T>, Serializable {
+    final Function<? super F, T> function;
+    final Supplier<F> supplier;
+
+    SupplierComposition(Function<? super F, T> function, Supplier<F> supplier) {
+      this.function = function;
+      this.supplier = supplier;
+    }
+    @Override
+    public T get() {
+      return function.apply(supplier.get());
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  /**
+   * Returns a supplier which caches the instance retrieved during the first
+   * call to {@code get()} and returns that value on subsequent calls to
+   * {@code get()}. See:
+   * <a href="http://en.wikipedia.org/wiki/Memoization">memoization</a>
+   *
+   * <p>The returned supplier is thread-safe. The supplier's serialized form
+   * does not contain the cached value, which will be recalculated when {@code
+   * get()} is called on the reserialized instance.
+   *
+   * <p>If {@code delegate} is an instance created by an earlier call to {@code
+   * memoize}, it is returned directly.
+   */
+  public static <T> Supplier<T> memoize(Supplier<T> delegate) {
+    return (delegate instanceof MemoizingSupplier)
+        ? delegate
+        : new MemoizingSupplier<T>(Preconditions.checkNotNull(delegate));
+  }
+
+  @VisibleForTesting
+  static class MemoizingSupplier<T> implements Supplier<T>, Serializable {
+    final Supplier<T> delegate;
+    transient volatile boolean initialized;
+    // "value" does not need to be volatile; visibility piggy-backs
+    // on volatile read of "initialized".
+    transient T value;
+
+    MemoizingSupplier(Supplier<T> delegate) {
+      this.delegate = delegate;
+    }
+
+    @Override
+    public T get() {
+      // A 2-field variant of Double Checked Locking.
+      if (!initialized) {
+        synchronized (this) {
+          if (!initialized) {
+            T t = delegate.get();
+            value = t;
+            initialized = true;
+            return t;
+          }
+        }
+      }
+      return value;
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  /**
+   * Returns a supplier that caches the instance supplied by the delegate and
+   * removes the cached value after the specified time has passed. Subsequent
+   * calls to {@code get()} return the cached value if the expiration time has
+   * not passed. After the expiration time, a new value is retrieved, cached,
+   * and returned. See:
+   * <a href="http://en.wikipedia.org/wiki/Memoization">memoization</a>
+   *
+   * <p>The returned supplier is thread-safe. The supplier's serialized form
+   * does not contain the cached value, which will be recalculated when {@code
+   * get()} is called on the reserialized instance.
+   *
+   * @param duration the length of time after a value is created that it
+   *     should stop being returned by subsequent {@code get()} calls
+   * @param unit the unit that {@code duration} is expressed in
+   * @throws IllegalArgumentException if {@code duration} is not positive
+   * @since 2.0
+   */
+  public static <T> Supplier<T> memoizeWithExpiration(
+      Supplier<T> delegate, long duration, TimeUnit unit) {
+    return new ExpiringMemoizingSupplier<T>(delegate, duration, unit);
+  }
+
+  @VisibleForTesting static class ExpiringMemoizingSupplier<T>
+      implements Supplier<T>, Serializable {
+    final Supplier<T> delegate;
+    final long durationNanos;
+    transient volatile T value;
+    // The special value 0 means "not yet initialized".
+    transient volatile long expirationNanos;
+
+    ExpiringMemoizingSupplier(
+        Supplier<T> delegate, long duration, TimeUnit unit) {
+      this.delegate = Preconditions.checkNotNull(delegate);
+      this.durationNanos = unit.toNanos(duration);
+      Preconditions.checkArgument(duration > 0);
+    }
+
+    @Override
+    public T get() {
+      // Another variant of Double Checked Locking.
+      //
+      // We use two volatile reads.  We could reduce this to one by
+      // putting our fields into a holder class, but (at least on x86)
+      // the extra memory consumption and indirection are more
+      // expensive than the extra volatile reads.
+      long nanos = expirationNanos;
+      long now = Platform.systemNanoTime();
+      if (nanos == 0 || now - nanos >= 0) {
+        synchronized (this) {
+          if (nanos == expirationNanos) {  // recheck for lost race
+            T t = delegate.get();
+            value = t;
+            nanos = now + durationNanos;
+            // In the very unlikely event that nanos is 0, set it to 1;
+            // no one will notice 1 ns of tardiness.
+            expirationNanos = (nanos == 0) ? 1 : nanos;
+            return t;
+          }
+        }
+      }
+      return value;
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  /**
+   * Returns a supplier that always supplies {@code instance}.
+   */
+  public static <T> Supplier<T> ofInstance(@Nullable T instance) {
+    return new SupplierOfInstance<T>(instance);
+  }
+
+  private static class SupplierOfInstance<T>
+      implements Supplier<T>, Serializable {
+    final T instance;
+
+    SupplierOfInstance(@Nullable T instance) {
+      this.instance = instance;
+    }
+    @Override
+    public T get() {
+      return instance;
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  /**
+   * Returns a supplier whose {@code get()} method synchronizes on
+   * {@code delegate} before calling it, making it thread-safe.
+   */
+  public static <T> Supplier<T> synchronizedSupplier(Supplier<T> delegate) {
+    return new ThreadSafeSupplier<T>(Preconditions.checkNotNull(delegate));
+  }
+
+  private static class ThreadSafeSupplier<T>
+      implements Supplier<T>, Serializable {
+    final Supplier<T> delegate;
+
+    ThreadSafeSupplier(Supplier<T> delegate) {
+      this.delegate = delegate;
+    }
+    @Override
+    public T get() {
+      synchronized (delegate) {
+        return delegate.get();
+      }
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  /**
+   * Returns a function that accepts a supplier and returns the result of
+   * invoking {@link Supplier#get} on that supplier.
+   *
+   * @since 8.0
+   */
+  @Beta
+  @SuppressWarnings("unchecked") // SupplierFunction works for any T.
+  public static <T> Function<Supplier<T>, T> supplierFunction() {
+    return (Function) SupplierFunction.INSTANCE;
+  }
+
+  private enum SupplierFunction implements Function<Supplier<?>, Object> {
+    INSTANCE;
+
+    @Override
+    public Object apply(Supplier<?> input) {
+      return input.get();
+    }
+  }
+}
diff --git a/guava/src/com/google/common/base/Throwables.java b/guava/src/com/google/common/base/Throwables.java
new file mode 100644
index 0000000..793c5f9
--- /dev/null
+++ b/guava/src/com/google/common/base/Throwables.java
@@ -0,0 +1,216 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.Beta;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import javax.annotation.Nullable;
+
+/**
+ * Static utility methods pertaining to instances of {@link Throwable}.
+ *
+ * @author Kevin Bourrillion
+ * @author Ben Yu
+ * @since 1.0
+ */
+public final class Throwables {
+  private Throwables() {}
+
+  /**
+   * Propagates {@code throwable} exactly as-is, if and only if it is an
+   * instance of {@code declaredType}.  Example usage:
+   * <pre>
+   *   try {
+   *     someMethodThatCouldThrowAnything();
+   *   } catch (IKnowWhatToDoWithThisException e) {
+   *     handle(e);
+   *   } catch (Throwable t) {
+   *     Throwables.propagateIfInstanceOf(t, IOException.class);
+   *     Throwables.propagateIfInstanceOf(t, SQLException.class);
+   *     throw Throwables.propagate(t);
+   *   }
+   * </pre>
+   */
+  public static <X extends Throwable> void propagateIfInstanceOf(
+      @Nullable Throwable throwable, Class<X> declaredType) throws X {
+    // Check for null is needed to avoid frequent JNI calls to isInstance().
+    if (throwable != null && declaredType.isInstance(throwable)) {
+      throw declaredType.cast(throwable);
+    }
+  }
+
+  /**
+   * Propagates {@code throwable} exactly as-is, if and only if it is an
+   * instance of {@link RuntimeException} or {@link Error}.  Example usage:
+   * <pre>
+   *   try {
+   *     someMethodThatCouldThrowAnything();
+   *   } catch (IKnowWhatToDoWithThisException e) {
+   *     handle(e);
+   *   } catch (Throwable t) {
+   *     Throwables.propagateIfPossible(t);
+   *     throw new RuntimeException("unexpected", t);
+   *   }
+   * </pre>
+   */
+  public static void propagateIfPossible(@Nullable Throwable throwable) {
+    propagateIfInstanceOf(throwable, Error.class);
+    propagateIfInstanceOf(throwable, RuntimeException.class);
+  }
+
+  /**
+   * Propagates {@code throwable} exactly as-is, if and only if it is an
+   * instance of {@link RuntimeException}, {@link Error}, or
+   * {@code declaredType}. Example usage:
+   * <pre>
+   *   try {
+   *     someMethodThatCouldThrowAnything();
+   *   } catch (IKnowWhatToDoWithThisException e) {
+   *     handle(e);
+   *   } catch (Throwable t) {
+   *     Throwables.propagateIfPossible(t, OtherException.class);
+   *     throw new RuntimeException("unexpected", t);
+   *   }
+   * </pre>
+   *
+   * @param throwable the Throwable to possibly propagate
+   * @param declaredType the single checked exception type declared by the
+   *     calling method
+   */
+  public static <X extends Throwable> void propagateIfPossible(
+      @Nullable Throwable throwable, Class<X> declaredType) throws X {
+    propagateIfInstanceOf(throwable, declaredType);
+    propagateIfPossible(throwable);
+  }
+
+  /**
+   * Propagates {@code throwable} exactly as-is, if and only if it is an
+   * instance of {@link RuntimeException}, {@link Error}, {@code declaredType1},
+   * or {@code declaredType2}.  In the unlikely case that you have three or more
+   * declared checked exception types, you can handle them all by invoking these
+   * methods repeatedly. See usage example in {@link
+   * #propagateIfPossible(Throwable, Class)}.
+   *
+   * @param throwable the Throwable to possibly propagate
+   * @param declaredType1 any checked exception type declared by the calling
+   *     method
+   * @param declaredType2 any other checked exception type declared by the
+   *     calling method
+   */
+  public static <X1 extends Throwable, X2 extends Throwable>
+      void propagateIfPossible(@Nullable Throwable throwable,
+          Class<X1> declaredType1, Class<X2> declaredType2) throws X1, X2 {
+    checkNotNull(declaredType2);
+    propagateIfInstanceOf(throwable, declaredType1);
+    propagateIfPossible(throwable, declaredType2);
+  }
+
+  /**
+   * Propagates {@code throwable} as-is if it is an instance of
+   * {@link RuntimeException} or {@link Error}, or else as a last resort, wraps
+   * it in a {@code RuntimeException} then propagates.
+   * <p>
+   * This method always throws an exception. The {@code RuntimeException} return
+   * type is only for client code to make Java type system happy in case a
+   * return value is required by the enclosing method. Example usage:
+   * <pre>
+   *   T doSomething() {
+   *     try {
+   *       return someMethodThatCouldThrowAnything();
+   *     } catch (IKnowWhatToDoWithThisException e) {
+   *       return handle(e);
+   *     } catch (Throwable t) {
+   *       throw Throwables.propagate(t);
+   *     }
+   *   }
+   * </pre>
+   *
+   * @param throwable the Throwable to propagate
+   * @return nothing will ever be returned; this return type is only for your
+   *     convenience, as illustrated in the example above
+   */
+  public static RuntimeException propagate(Throwable throwable) {
+    propagateIfPossible(checkNotNull(throwable));
+    throw new RuntimeException(throwable);
+  }
+
+  /**
+   * Returns the innermost cause of {@code throwable}. The first throwable in a
+   * chain provides context from when the error or exception was initially
+   * detected. Example usage:
+   * <pre>
+   *   assertEquals("Unable to assign a customer id",
+   *       Throwables.getRootCause(e).getMessage());
+   * </pre>
+   */
+  public static Throwable getRootCause(Throwable throwable) {
+    Throwable cause;
+    while ((cause = throwable.getCause()) != null) {
+      throwable = cause;
+    }
+    return throwable;
+  }
+
+  /**
+   * Gets a {@code Throwable} cause chain as a list.  The first entry in the
+   * list will be {@code throwable} followed by its cause hierarchy.  Note
+   * that this is a snapshot of the cause chain and will not reflect
+   * any subsequent changes to the cause chain.
+   *
+   * <p>Here's an example of how it can be used to find specific types
+   * of exceptions in the cause chain:
+   *
+   * <pre>
+   * Iterables.filter(Throwables.getCausalChain(e), IOException.class));
+   * </pre>
+   *
+   * @param throwable the non-null {@code Throwable} to extract causes from
+   * @return an unmodifiable list containing the cause chain starting with
+   *     {@code throwable}
+   */
+  @Beta // TODO(kevinb): decide best return type
+  public static List<Throwable> getCausalChain(Throwable throwable) {
+    checkNotNull(throwable);
+    List<Throwable> causes = new ArrayList<Throwable>(4);
+    while (throwable != null) {
+      causes.add(throwable);
+      throwable = throwable.getCause();
+    }
+    return Collections.unmodifiableList(causes);
+  }
+
+  /**
+   * Returns a string containing the result of
+   * {@link Throwable#toString() toString()}, followed by the full, recursive
+   * stack trace of {@code throwable}. Note that you probably should not be
+   * parsing the resulting string; if you need programmatic access to the stack
+   * frames, you can call {@link Throwable#getStackTrace()}.
+   */
+  public static String getStackTraceAsString(Throwable throwable) {
+    StringWriter stringWriter = new StringWriter();
+    throwable.printStackTrace(new PrintWriter(stringWriter));
+    return stringWriter.toString();
+  }
+}
diff --git a/guava/src/com/google/common/base/Ticker.java b/guava/src/com/google/common/base/Ticker.java
new file mode 100644
index 0000000..e074cf1
--- /dev/null
+++ b/guava/src/com/google/common/base/Ticker.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+
+/**
+ * A time source; returns a time value representing the number of nanoseconds
+ * elapsed since some fixed but arbitrary point in time.
+ *
+ * @author Kevin Bourrillion
+ * @since 10.0
+ *     (<a href="http://code.google.com/p/guava-libraries/wiki/Compatibility"
+ *     >mostly source-compatible</a> since 9.0)
+ */
+@Beta
+@GwtCompatible
+public abstract class Ticker {
+  /**
+   * Constructor for use by subclasses.
+   */
+  protected Ticker() {}
+
+  /**
+   * Returns the number of nanoseconds elapsed since this ticker's fixed
+   * point of reference.
+   */
+  public abstract long read();
+
+  /**
+   * A ticker that reads the current time using {@link System#nanoTime}.
+   *
+   * @since 10.0
+   */
+  public static Ticker systemTicker() {
+    return SYSTEM_TICKER;
+  }
+
+  private static final Ticker SYSTEM_TICKER = new Ticker() {
+    @Override
+    public long read() {
+      return Platform.systemNanoTime();
+    }
+  };
+}
diff --git a/guava/src/com/google/common/base/internal/Finalizer.java b/guava/src/com/google/common/base/internal/Finalizer.java
new file mode 100644
index 0000000..6be4eec
--- /dev/null
+++ b/guava/src/com/google/common/base/internal/Finalizer.java
@@ -0,0 +1,207 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.base.internal;
+
+import java.lang.ref.PhantomReference;
+import java.lang.ref.Reference;
+import java.lang.ref.ReferenceQueue;
+import java.lang.ref.WeakReference;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * Thread that finalizes referents. All references should implement
+ * {@code com.google.common.base.FinalizableReference}.
+ *
+ * <p>While this class is public, we consider it to be *internal* and not part
+ * of our published API. It is public so we can access it reflectively across
+ * class loaders in secure environments.
+ *
+ * <p>This class can't depend on other Google Collections code. If we were
+ * to load this class in the same class loader as the rest of
+ * Google Collections, this thread would keep an indirect strong reference
+ * to the class loader and prevent it from being garbage collected. This
+ * poses a problem for environments where you want to throw away the class
+ * loader. For example, dynamically reloading a web application or unloading
+ * an OSGi bundle.
+ *
+ * <p>{@code com.google.common.base.FinalizableReferenceQueue} loads this class
+ * in its own class loader. That way, this class doesn't prevent the main
+ * class loader from getting garbage collected, and this class can detect when
+ * the main class loader has been garbage collected and stop itself.
+ */
+public class Finalizer extends Thread {
+
+  private static final Logger logger
+      = Logger.getLogger(Finalizer.class.getName());
+
+  /** Name of FinalizableReference.class. */
+  private static final String FINALIZABLE_REFERENCE
+      = "com.google.common.base.FinalizableReference";
+
+  /**
+   * Starts the Finalizer thread. FinalizableReferenceQueue calls this method
+   * reflectively.
+   *
+   * @param finalizableReferenceClass FinalizableReference.class
+   * @param frq reference to instance of FinalizableReferenceQueue that started
+   *  this thread
+   * @return ReferenceQueue which Finalizer will poll
+   */
+  public static ReferenceQueue<Object> startFinalizer(
+      Class<?> finalizableReferenceClass, Object frq) {
+    /*
+     * We use FinalizableReference.class for two things:
+     *
+     * 1) To invoke FinalizableReference.finalizeReferent()
+     *
+     * 2) To detect when FinalizableReference's class loader has to be garbage
+     * collected, at which point, Finalizer can stop running
+     */
+    if (!finalizableReferenceClass.getName().equals(FINALIZABLE_REFERENCE)) {
+      throw new IllegalArgumentException(
+          "Expected " + FINALIZABLE_REFERENCE + ".");
+    }
+
+    Finalizer finalizer = new Finalizer(finalizableReferenceClass, frq);
+    finalizer.start();
+    return finalizer.queue;
+  }
+
+  private final WeakReference<Class<?>> finalizableReferenceClassReference;
+  private final PhantomReference<Object> frqReference;
+  private final ReferenceQueue<Object> queue = new ReferenceQueue<Object>();
+
+  private static final Field inheritableThreadLocals
+      = getInheritableThreadLocalsField();
+
+  /** Constructs a new finalizer thread. */
+  private Finalizer(Class<?> finalizableReferenceClass, Object frq) {
+    super(Finalizer.class.getName());
+
+    this.finalizableReferenceClassReference
+        = new WeakReference<Class<?>>(finalizableReferenceClass);
+
+    // Keep track of the FRQ that started us so we know when to stop.
+    this.frqReference = new PhantomReference<Object>(frq, queue);
+
+    setDaemon(true);
+
+    try {
+      if (inheritableThreadLocals != null) {
+        inheritableThreadLocals.set(this, null);
+      }
+    } catch (Throwable t) {
+      logger.log(Level.INFO, "Failed to clear thread local values inherited"
+          + " by reference finalizer thread.", t);
+    }
+
+    // TODO(fry): Priority?
+  }
+
+  /**
+   * Loops continuously, pulling references off the queue and cleaning them up.
+   */
+  @SuppressWarnings("InfiniteLoopStatement")
+  @Override
+  public void run() {
+    try {
+      while (true) {
+        try {
+          cleanUp(queue.remove());
+        } catch (InterruptedException e) { /* ignore */ }
+      }
+    } catch (ShutDown shutDown) { /* ignore */ }
+  }
+
+  /**
+   * Cleans up a single reference. Catches and logs all throwables.
+   */
+  private void cleanUp(Reference<?> reference) throws ShutDown {
+    Method finalizeReferentMethod = getFinalizeReferentMethod();
+    do {
+      /*
+       * This is for the benefit of phantom references. Weak and soft
+       * references will have already been cleared by this point.
+       */
+      reference.clear();
+
+      if (reference == frqReference) {
+        /*
+         * The client no longer has a reference to the
+         * FinalizableReferenceQueue. We can stop.
+         */
+        throw new ShutDown();
+      }
+
+      try {
+        finalizeReferentMethod.invoke(reference);
+      } catch (Throwable t) {
+        logger.log(Level.SEVERE, "Error cleaning up after reference.", t);
+      }
+
+      /*
+       * Loop as long as we have references available so as not to waste
+       * CPU looking up the Method over and over again.
+       */
+    } while ((reference = queue.poll()) != null);
+  }
+
+  /**
+   * Looks up FinalizableReference.finalizeReferent() method.
+   */
+  private Method getFinalizeReferentMethod() throws ShutDown {
+    Class<?> finalizableReferenceClass
+        = finalizableReferenceClassReference.get();
+    if (finalizableReferenceClass == null) {
+      /*
+       * FinalizableReference's class loader was reclaimed. While there's a
+       * chance that other finalizable references could be enqueued
+       * subsequently (at which point the class loader would be resurrected
+       * by virtue of us having a strong reference to it), we should pretty
+       * much just shut down and make sure we don't keep it alive any longer
+       * than necessary.
+       */
+      throw new ShutDown();
+    }
+    try {
+      return finalizableReferenceClass.getMethod("finalizeReferent");
+    } catch (NoSuchMethodException e) {
+      throw new AssertionError(e);
+    }
+  }
+
+  public static Field getInheritableThreadLocalsField() {
+    try {
+      Field inheritableThreadLocals
+          = Thread.class.getDeclaredField("inheritableThreadLocals");
+      inheritableThreadLocals.setAccessible(true);
+      return inheritableThreadLocals;
+    } catch (Throwable t) {
+      logger.log(Level.INFO, "Couldn't access Thread.inheritableThreadLocals."
+          + " Reference finalizer threads will inherit thread local"
+          + " values.");
+      return null;
+    }
+  }
+
+  /** Indicates that it's time to shut down the Finalizer. */
+  @SuppressWarnings("serial") // Never serialized or thrown out of this class.
+  private static class ShutDown extends Exception { }
+}
diff --git a/guava/src/com/google/common/base/package-info.java b/guava/src/com/google/common/base/package-info.java
new file mode 100644
index 0000000..66e7177
--- /dev/null
+++ b/guava/src/com/google/common/base/package-info.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+/**
+ * Basic utility libraries and interfaces.
+ *
+ * <p>This package is a part of the open-source
+ * <a href="http://guava-libraries.googlecode.com">Guava libraries</a>.
+ *
+ * <h2>Contents</h2>
+ *
+ * <h3>String-related utilities</h3>
+ *
+ * <ul>
+ * <li>{@link com.google.common.base.Ascii}
+ * <li>{@link com.google.common.base.CaseFormat}
+ * <li>{@link com.google.common.base.CharMatcher}
+ * <li>{@link com.google.common.base.Charsets}
+ * <li>{@link com.google.common.base.Joiner}
+ * <li>{@link com.google.common.base.Splitter}
+ * <li>{@link com.google.common.base.Strings}
+ * </ul>
+ *
+ * <h3>Function types</h3>
+ *
+ * <ul>
+ * <li>{@link com.google.common.base.Function},
+ *     {@link com.google.common.base.Functions}
+ * <li>{@link com.google.common.base.Predicate},
+ *     {@link com.google.common.base.Predicates}
+ * <li>{@link com.google.common.base.Equivalence},
+ *     {@link com.google.common.base.Equivalences}
+ * <li>{@link com.google.common.base.Supplier},
+ *     {@link com.google.common.base.Suppliers}
+ * </ul>
+ *
+ * <h3>Other</h3>
+ *
+ * <ul>
+ * <li>{@link com.google.common.base.Defaults}
+ * <li>{@link com.google.common.base.Enums}
+ * <li>{@link com.google.common.base.Objects}
+ * <li>{@link com.google.common.base.Optional}
+ * <li>{@link com.google.common.base.Preconditions}
+ * <li>{@link com.google.common.base.Stopwatch}
+ * <li>{@link com.google.common.base.Throwables}
+ * </ul>
+ *
+ */
+@ParametersAreNonnullByDefault
+package com.google.common.base;
+
+import javax.annotation.ParametersAreNonnullByDefault;
diff --git a/guava/src/com/google/common/cache/AbstractCache.java b/guava/src/com/google/common/cache/AbstractCache.java
new file mode 100644
index 0000000..8ce941d
--- /dev/null
+++ b/guava/src/com/google/common/cache/AbstractCache.java
@@ -0,0 +1,269 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.cache;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Maps;
+import com.google.common.util.concurrent.UncheckedExecutionException;
+
+import java.util.Map;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.atomic.AtomicLong;
+
+/**
+ * This class provides a skeletal implementation of the {@code Cache} interface to minimize the
+ * effort required to implement this interface.
+ *
+ * <p>To implement a cache, the programmer needs only to extend this class and provide an
+ * implementation for the {@link #getIfPresent} method. {@link #getAllPresent} is implemented in
+ * terms of {@code getIfPresent}; {@link #invalidateAll(Iterable)} is implemented in terms of
+ * {@link #invalidate}. The method {@link #cleanUp} is a no-op. All other methods throw an
+ * {@link UnsupportedOperationException}.
+ *
+ * @author Charles Fry
+ * @since 10.0
+ */
+@Beta
+@GwtCompatible
+public abstract class AbstractCache<K, V> implements Cache<K, V> {
+
+  /** Constructor for use by subclasses. */
+  protected AbstractCache() {}
+
+  /**
+   * @since 11.0
+   */
+  @Override
+  public V get(K key, Callable<? extends V> valueLoader) throws ExecutionException {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * @since 11.0
+   */
+  @Override
+  public ImmutableMap<K, V> getAllPresent(Iterable<? extends K> keys) {
+    Map<K, V> result = Maps.newLinkedHashMap();
+    for (K key : keys) {
+      if (!result.containsKey(key)) {
+        result.put(key, getIfPresent(key));
+      }
+    }
+    return ImmutableMap.copyOf(result);
+  }
+
+  /**
+   * @since 11.0
+   */
+  @Override
+  public void put(K key, V value) {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public void cleanUp() {}
+
+  @Override
+  public long size() {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public void invalidate(Object key) {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * @since 11.0
+   */
+  @Override
+  public void invalidateAll(Iterable<?> keys) {
+    for (Object key : keys) {
+      invalidate(key);
+    }
+  }
+
+  @Override
+  public void invalidateAll() {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public CacheStats stats() {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public ConcurrentMap<K, V> asMap() {
+    throw new UnsupportedOperationException();
+  }
+
+  @Deprecated
+  @Override
+  public V getUnchecked(K key) {
+    try {
+      return get(key);
+    } catch (ExecutionException e) {
+      throw new UncheckedExecutionException(e.getCause());
+    }
+  }
+
+  @Deprecated
+  @Override
+  public V apply(K key) {
+    return getUnchecked(key);
+  }
+
+  /**
+   * Accumulates statistics during the operation of a {@link Cache} for presentation by {@link
+   * Cache#stats}. This is solely intended for consumption by {@code Cache} implementors.
+   *
+   * @since 10.0
+   */
+  @Beta
+  public interface StatsCounter {
+    /**
+     * Records cache hits. This should be called when a cache request returns a cached value.
+     *
+     * @param count the number of hits to record
+     * @since 11.0
+     */
+    public void recordHits(int count);
+
+    /**
+     * Records cache misses. This should be called when a cache request returns a value that was
+     * not found in the cache. This method should be called by the loading thread, as well as by
+     * threads blocking on the load. Multiple concurrent calls to {@link Cache} lookup methods with
+     * the same key on an absent value should result in a single call to either
+     * {@code recordLoadSuccess} or {@code recordLoadException} and multiple calls to this method,
+     * despite all being served by the results of a single load operation.
+     *
+     * @param count the number of misses to record
+     * @since 11.0
+     */
+    public void recordMisses(int count);
+
+    /**
+     * Records the successful load of a new entry. This should be called when a cache request
+     * causes an entry to be loaded, and the loading completes successfully. In contrast to
+     * {@link #recordConcurrentMiss}, this method should only be called by the loading thread.
+     *
+     * @param loadTime the number of nanoseconds the cache spent computing or retrieving the new
+     *     value
+     */
+    public void recordLoadSuccess(long loadTime);
+
+    /**
+     * Records the failed load of a new entry. This should be called when a cache request causes
+     * an entry to be loaded, but an exception is thrown while loading the entry. In contrast to
+     * {@link #recordConcurrentMiss}, this method should only be called by the loading thread.
+     *
+     * @param loadTime the number of nanoseconds the cache spent computing or retrieving the new
+     *     value prior to an exception being thrown
+     */
+    public void recordLoadException(long loadTime);
+
+    /**
+     * Records the eviction of an entry from the cache. This should only been called when an entry
+     * is evicted due to the cache's eviction strategy, and not as a result of manual {@linkplain
+     * Cache#invalidate invalidations}.
+     */
+    public void recordEviction();
+
+    /**
+     * Returns a snapshot of this counter's values. Note that this may be an inconsistent view, as
+     * it may be interleaved with update operations.
+     */
+    public CacheStats snapshot();
+  }
+
+  /**
+   * A thread-safe {@link StatsCounter} implementation for use by {@link Cache} implementors.
+   *
+   * @since 10.0
+   */
+  @Beta
+  public static class SimpleStatsCounter implements StatsCounter {
+    private final AtomicLong hitCount = new AtomicLong();
+    private final AtomicLong missCount = new AtomicLong();
+    private final AtomicLong loadSuccessCount = new AtomicLong();
+    private final AtomicLong loadExceptionCount = new AtomicLong();
+    private final AtomicLong totalLoadTime = new AtomicLong();
+    private final AtomicLong evictionCount = new AtomicLong();
+
+    /**
+     * @since 11.0
+     */
+    @Override
+    public void recordHits(int count) {
+      hitCount.addAndGet(count);
+    }
+
+    /**
+     * @since 11.0
+     */
+    @Override
+    public void recordMisses(int count) {
+      missCount.addAndGet(count);
+    }
+
+    @Override
+    public void recordLoadSuccess(long loadTime) {
+      loadSuccessCount.incrementAndGet();
+      totalLoadTime.addAndGet(loadTime);
+    }
+
+    @Override
+    public void recordLoadException(long loadTime) {
+      loadExceptionCount.incrementAndGet();
+      totalLoadTime.addAndGet(loadTime);
+    }
+
+    @Override
+    public void recordEviction() {
+      evictionCount.incrementAndGet();
+    }
+
+    @Override
+    public CacheStats snapshot() {
+      return new CacheStats(
+          hitCount.get(),
+          missCount.get(),
+          loadSuccessCount.get(),
+          loadExceptionCount.get(),
+          totalLoadTime.get(),
+          evictionCount.get());
+    }
+
+    /**
+     * Increments all counters by the values in {@code other}.
+     */
+    public void incrementBy(StatsCounter other) {
+      CacheStats otherStats = other.snapshot();
+      hitCount.addAndGet(otherStats.hitCount());
+      missCount.addAndGet(otherStats.missCount());
+      loadSuccessCount.addAndGet(otherStats.loadSuccessCount());
+      loadExceptionCount.addAndGet(otherStats.loadExceptionCount());
+      totalLoadTime.addAndGet(otherStats.totalLoadTime());
+      evictionCount.addAndGet(otherStats.evictionCount());
+    }
+  }
+}
diff --git a/guava/src/com/google/common/cache/AbstractLoadingCache.java b/guava/src/com/google/common/cache/AbstractLoadingCache.java
new file mode 100644
index 0000000..22ef81b
--- /dev/null
+++ b/guava/src/com/google/common/cache/AbstractLoadingCache.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.cache;
+
+import com.google.common.annotations.Beta;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Maps;
+import com.google.common.util.concurrent.UncheckedExecutionException;
+
+import java.util.Map;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutionException;
+
+/**
+ * This class provides a skeletal implementation of the {@code Cache} interface to minimize the
+ * effort required to implement this interface.
+ *
+ * <p>To implement a cache, the programmer needs only to extend this class and provide an
+ * implementation for the {@link #get} and {@link #getIfPresent} methods. {@link #getUnchecked},
+ * {@link #get(K, Callable)}, and {@link #getAll} are implemented in terms of {@code get};
+ * {@link #getAllPresent} is implemented in terms of {@code get}; {@link #invalidateAll(Iterable)}
+ * is implemented in terms of {@link #invalidate}. The method {@link #cleanUp} is a no-op. All other
+ * methods throw an {@link UnsupportedOperationException}.
+ *
+ * @author Charles Fry
+ * @since 11.0
+ */
+@Beta
+public abstract class AbstractLoadingCache<K, V>
+    extends AbstractCache<K, V> implements LoadingCache<K, V> {
+
+  /** Constructor for use by subclasses. */
+  protected AbstractLoadingCache() {}
+
+  @Override
+  public V getUnchecked(K key) {
+    try {
+      return get(key);
+    } catch (ExecutionException e) {
+      throw new UncheckedExecutionException(e.getCause());
+    }
+  }
+
+  @Override
+  public ImmutableMap<K, V> getAll(Iterable<? extends K> keys) throws ExecutionException {
+    Map<K, V> result = Maps.newLinkedHashMap();
+    for (K key : keys) {
+      if (!result.containsKey(key)) {
+        result.put(key, get(key));
+      }
+    }
+    return ImmutableMap.copyOf(result);
+  }
+
+  @Override
+  public final V apply(K key) {
+    return getUnchecked(key);
+  }
+
+  @Override
+  public void refresh(K key) {
+    throw new UnsupportedOperationException();
+  }
+}
diff --git a/guava/src/com/google/common/cache/Cache.java b/guava/src/com/google/common/cache/Cache.java
new file mode 100644
index 0000000..f243adc
--- /dev/null
+++ b/guava/src/com/google/common/cache/Cache.java
@@ -0,0 +1,189 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.cache;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Function;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.util.concurrent.ExecutionError;
+import com.google.common.util.concurrent.UncheckedExecutionException;
+
+import java.util.concurrent.Callable;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.ExecutionException;
+
+import javax.annotation.Nullable;
+
+/**
+ * A semi-persistent mapping from keys to values. Cache entries are manually added using
+ * {@link #get(K, Callable)} or {@link #put(K, V)}, and are stored in the cache until either
+ * evicted or manually invalidated.
+ *
+ * <p><b>Note:</b> in release 12.0, all methods moved from {@code Cache} to {@link LoadingCache}
+ * will be deleted from {@code Cache}. As part of this transition {@code Cache} will no longer
+ * extend {@link Function}.
+ *
+ * <p>Implementations of this interface are expected to be thread-safe, and can be safely accessed
+ * by multiple concurrent threads.
+ *
+ * <p>All methods other than {@link #getIfPresent} are optional.
+ *
+ * @author Charles Fry
+ * @since 10.0
+ */
+@Beta
+@GwtCompatible
+public interface Cache<K, V> extends Function<K, V> {
+
+  /**
+   * Returns the value associated with {@code key} in this cache, or {@code null} if there is no
+   * cached value for {@code key}.
+   *
+   * @since 11.0
+   */
+  @Nullable
+  V getIfPresent(K key);
+
+  /**
+   * Returns the value associated with {@code key} in this cache, obtaining that value from
+   * {@code valueLoader} if necessary. No observable state associated with this cache is modified
+   * until loading completes. This method provides a simple substitute for the conventional
+   * "if cached, return; otherwise create, cache and return" pattern.
+   *
+   * <p><b>Warning:</b> as with {@link CacheLoader#load}, {@code valueLoader} <b>must not</b> return
+   * {@code null}; it may either return a non-null value or throw an exception.
+   *
+   * @throws ExecutionException if a checked exception was thrown while loading the value
+   * @throws UncheckedExecutionException if an unchecked exception was thrown while loading the
+   *     value
+   * @throws ExecutionError if an error was thrown while loading the value
+   *
+   * @since 11.0
+   */
+  V get(K key, Callable<? extends V> valueLoader) throws ExecutionException;
+
+  /**
+   * Returns a map of the values associated with {@code keys} in this cache. The returned map will
+   * only contain entries which are already present in the cache.
+   *
+   * @since 11.0
+   */
+  ImmutableMap<K, V> getAllPresent(Iterable<? extends K> keys);
+
+  /**
+   * Associates {@code value} with {@code key} in this cache. If the cache previously contained a
+   * value associated with {@code key}, the old value is replaced by {@code value}.
+   *
+   * <p>Prefer {@link #get(Object, Callable)} when using the conventional "if cached, return;
+   * otherwise create, cache and return" pattern.
+   *
+   * @since 11.0
+   */
+  void put(K key, V value);
+
+  /**
+   * Discards any cached value for key {@code key}.
+   */
+  void invalidate(Object key);
+
+  /**
+   * Discards any cached values for keys {@code keys}.
+   *
+   * @since 11.0
+   */
+  void invalidateAll(Iterable<?> keys);
+
+  /**
+   * Discards all entries in the cache.
+   */
+  void invalidateAll();
+
+  /**
+   * Returns the approximate number of entries in this cache.
+   */
+  long size();
+
+  /**
+   * Returns a current snapshot of this cache's cumulative statistics. All stats are initialized
+   * to zero, and are monotonically increasing over the lifetime of the cache.
+   */
+  CacheStats stats();
+
+  /**
+   * Returns a view of the entries stored in this cache as a thread-safe map. Modifications made to
+   * the map directly affect the cache.
+   */
+  ConcurrentMap<K, V> asMap();
+
+  /**
+   * Performs any pending maintenance operations needed by the cache. Exactly which activities are
+   * performed -- if any -- is implementation-dependent.
+   */
+  void cleanUp();
+
+  /**
+   * Returns the value associated with {@code key} in this cache, first loading that value if
+   * necessary. No observable state associated with this cache is modified until loading completes.
+   *
+   * @throws ExecutionException if a checked exception was thrown while loading the value
+   * @throws UncheckedExecutionException if an unchecked exception was thrown while loading the
+   *     value
+   * @throws ExecutionError if an error was thrown while loading the value
+   * @deprecated This method has been split out into the {@link LoadingCache} interface, and will be
+   * removed from {@code Cache} in Guava release 12.0. Note that
+   * {@link CacheBuilder#build(CacheLoader)} now returns a {@code LoadingCache}, so this deprecation
+   * (migration) can be dealt with by simply changing the type of references to the results of
+   * {@link CacheBuilder#build(CacheLoader)}.
+   */
+  @Deprecated V get(K key) throws ExecutionException;
+
+  /**
+   * Returns the value associated with {@code key} in this cache, first loading that value if
+   * necessary. No observable state associated with this cache is modified until computation
+   * completes. Unlike {@link #get}, this method does not throw a checked exception, and thus should
+   * only be used in situations where checked exceptions are not thrown by the cache loader.
+   *
+   * <p><b>Warning:</b> this method silently converts checked exceptions to unchecked exceptions,
+   * and should not be used with cache loaders which throw checked exceptions.
+   *
+   * @throws UncheckedExecutionException if an exception was thrown while loading the value,
+   *     regardless of whether the exception was checked or unchecked
+   * @throws ExecutionError if an error was thrown while loading the value
+   * @deprecated This method has been split out into the {@link LoadingCache} interface, and will be
+   * removed from {@code Cache} in Guava release 12.0. Note that
+   * {@link CacheBuilder#build(CacheLoader)} now returns a {@code LoadingCache}, so this deprecation
+   * (migration) can be dealt with by simply changing the type of references to the results of
+   * {@link CacheBuilder#build(CacheLoader)}.
+   */
+  @Deprecated V getUnchecked(K key);
+
+  /**
+   * Discouraged. Provided to satisfy the {@code Function} interface; use {@link #get} or
+   * {@link #getUnchecked} instead.
+   *
+   * @throws UncheckedExecutionException if an exception was thrown while loading the value,
+   *     regardless of whether the exception was checked or unchecked
+   * @throws ExecutionError if an error was thrown while loading the value
+   * @deprecated This method has been split out into the {@link LoadingCache} interface, and will be
+   * removed from {@code Cache} in Guava release 12.0. Note that
+   * {@link CacheBuilder#build(CacheLoader)} now returns a {@code LoadingCache}, so this deprecation
+   * (migration) can be dealt with by simply changing the type of references to the results of
+   * {@link CacheBuilder#build(CacheLoader)}.
+   */
+  @Deprecated V apply(K key);
+}
diff --git a/guava/src/com/google/common/cache/CacheBuilder.java b/guava/src/com/google/common/cache/CacheBuilder.java
new file mode 100644
index 0000000..8eef200
--- /dev/null
+++ b/guava/src/com/google/common/cache/CacheBuilder.java
@@ -0,0 +1,821 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.cache;
+
+import static com.google.common.base.Objects.firstNonNull;
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkState;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.base.Ascii;
+import com.google.common.base.Equivalence;
+import com.google.common.base.Equivalences;
+import com.google.common.base.Objects;
+import com.google.common.base.Supplier;
+import com.google.common.base.Suppliers;
+import com.google.common.base.Ticker;
+import com.google.common.cache.AbstractCache.SimpleStatsCounter;
+import com.google.common.cache.AbstractCache.StatsCounter;
+import com.google.common.cache.LocalCache.Strength;
+
+import java.lang.ref.SoftReference;
+import java.lang.ref.WeakReference;
+import java.util.ConcurrentModificationException;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.TimeUnit;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.annotation.CheckReturnValue;
+
+/**
+ * <p>A builder of {@link LoadingCache} and {@link Cache} instances having any combination of the
+ * following features:
+ *
+ * <ul>
+ * <li>automatic loading of entries into the cache
+ * <li>least-recently-used eviction when a maximum size is exceeded
+ * <li>time-based expiration of entries, measured since last access or last write
+ * <li>keys automatically wrapped in {@linkplain WeakReference weak} references
+ * <li>values automatically wrapped in {@linkplain WeakReference weak} or
+ *     {@linkplain SoftReference soft} references
+ * <li>notification of evicted (or otherwise removed) entries
+ * </ul>
+ *
+ * <p>Usage example: <pre>   {@code
+ *
+ *   LoadingCache<Key, Graph> graphs = CacheBuilder.newBuilder()
+ *       .maximumSize(10000)
+ *       .expireAfterWrite(10, TimeUnit.MINUTES)
+ *       .removalListener(MY_LISTENER)
+ *       .build(
+ *           new CacheLoader<Key, Graph>() {
+ *             public Graph load(Key key) throws AnyException {
+ *               return createExpensiveGraph(key);
+ *             }
+ *           });}</pre>
+ *
+ *
+ * These features are all optional.
+ *
+ * <p>The returned cache is implemented as a hash table with similar performance characteristics to
+ * {@link ConcurrentHashMap}. It implements all optional operations of the {@link LoadingCache} and
+ * {@link Cache} interfaces. The {@code asMap} view (and its collection views) have <i>weakly
+ * consistent iterators</i>. This means that they are safe for concurrent use, but if other threads
+ * modify the cache after the iterator is created, it is undefined which of these changes, if any,
+ * are reflected in that iterator. These iterators never throw {@link
+ * ConcurrentModificationException}.
+ *
+ * <p><b>Note:</b> by default, the returned cache uses equality comparisons (the
+ * {@link Object#equals equals} method) to determine equality for keys or values. However, if
+ * {@link #weakKeys} was specified, the cache uses identity ({@code ==})
+ * comparisons instead for keys. Likewise, if {@link #weakValues} or {@link #softValues} was
+ * specified, the cache uses identity comparisons for values.
+ *
+ * <p>Entries are automatically evicted from the cache when any of
+ * {@linkplain #maximumSize(long) maximumSize}, {@linkplain #maximumWeight(long) maximumWeight},
+ * {@linkplain #expireAfterWrite expireAfterWrite},
+ * {@linkplain #expireAfterAccess expireAfterAccess}, {@linkplain #weakKeys weakKeys},
+ * {@linkplain #weakValues weakValues}, or {@linkplain #softValues softValues} are requested.
+ *
+ * <p>If {@linkplain #maximumSize(long) maximumSize} or
+ * {@linkplain #maximumWeight(long) maximumWeight} is requested entries may be evicted on each cache
+ * modification.
+ *
+ * <p>If {@linkplain #expireAfterWrite expireAfterWrite} or
+ * {@linkplain #expireAfterAccess expireAfterAccess} is requested entries may be evicted on each
+ * cache modification, on occasional cache accesses, or on calls to {@link Cache#cleanUp}. Expired
+ * entries may be counted in {@link Cache#size}, but will never be visible to read or write
+ * operations.
+ *
+ * <p>If {@linkplain #weakKeys weakKeys}, {@linkplain #weakValues weakValues}, or
+ * {@linkplain #softValues softValues} are requested, it is possible for a key or value present in
+ * the cache to be reclaimed by the garbage collector. Entries with reclaimed keys or values may be
+ * removed from the cache on each cache modification, on occasional cache accesses, or on calls to
+ * {@link Cache#cleanUp}; such entries may be counted in {@link Cache#size}, but will never be
+ * visible to read or write operations.
+ *
+ * <p>Certain cache configurations will result in the accrual of periodic maintenance tasks which
+ * will be performed during write operations, or during occasional read operations in the absense of
+ * writes. The {@link Cache#cleanUp} method of the returned cache will also perform maintenance, but
+ * calling it should not be necessary with a high throughput cache. Only caches built with
+ * {@linkplain #removalListener removalListener}, {@linkplain #expireAfterWrite expireAfterWrite},
+ * {@linkplain #expireAfterAccess expireAfterAccess}, {@linkplain #weakKeys weakKeys},
+ * {@linkplain #weakValues weakValues}, or {@linkplain #softValues softValues} perform periodic
+ * maintenance.
+ *
+ * <p>The caches produced by {@code CacheBuilder} are serializable, and the deserialized caches
+ * retain all the configuration properties of the original cache. Note that the serialized form does
+ * <i>not</i> include cache contents, but only configuration.
+ *
+ * @param <K> the base key type for all caches created by this builder
+ * @param <V> the base value type for all caches created by this builder
+ * @author Charles Fry
+ * @author Kevin Bourrillion
+ * @since 10.0
+ */
+@Beta
+@GwtCompatible(emulated = true)
+public final class CacheBuilder<K, V> {
+  private static final int DEFAULT_INITIAL_CAPACITY = 16;
+  private static final int DEFAULT_CONCURRENCY_LEVEL = 4;
+  private static final int DEFAULT_EXPIRATION_NANOS = 0;
+  private static final int DEFAULT_REFRESH_NANOS = 0;
+
+  static final Supplier<? extends StatsCounter> NULL_STATS_COUNTER = Suppliers.ofInstance(
+      new StatsCounter() {
+        @Override
+        public void recordHits(int count) {}
+
+        @Override
+        public void recordMisses(int count) {}
+
+        @Override
+        public void recordLoadSuccess(long loadTime) {}
+
+        @Override
+        public void recordLoadException(long loadTime) {}
+
+        @Override
+        public void recordEviction() {}
+
+        @Override
+        public CacheStats snapshot() {
+          return EMPTY_STATS;
+        }
+      });
+  static final CacheStats EMPTY_STATS = new CacheStats(0, 0, 0, 0, 0, 0);
+
+  static final Supplier<SimpleStatsCounter> CACHE_STATS_COUNTER =
+      new Supplier<SimpleStatsCounter>() {
+    @Override
+    public SimpleStatsCounter get() {
+      return new SimpleStatsCounter();
+    }
+  };
+
+  enum NullListener implements RemovalListener<Object, Object> {
+    INSTANCE;
+
+    @Override
+    public void onRemoval(RemovalNotification<Object, Object> notification) {}
+  }
+
+  enum OneWeigher implements Weigher<Object, Object> {
+    INSTANCE;
+
+    @Override
+    public int weigh(Object key, Object value) {
+      return 1;
+    }
+  }
+
+  static final Ticker NULL_TICKER = new Ticker() {
+    @Override
+    public long read() {
+      return 0;
+    }
+  };
+
+  private static final Logger logger = Logger.getLogger(CacheBuilder.class.getName());
+
+  static final int UNSET_INT = -1;
+
+  boolean strictParsing = true;
+
+  int initialCapacity = UNSET_INT;
+  int concurrencyLevel = UNSET_INT;
+  long maximumSize = UNSET_INT;
+  long maximumWeight = UNSET_INT;
+  Weigher<? super K, ? super V> weigher;
+
+  Strength keyStrength;
+  Strength valueStrength;
+
+  long expireAfterWriteNanos = UNSET_INT;
+  long expireAfterAccessNanos = UNSET_INT;
+  long refreshNanos = UNSET_INT;
+
+  Equivalence<Object> keyEquivalence;
+  Equivalence<Object> valueEquivalence;
+
+  RemovalListener<? super K, ? super V> removalListener;
+  Ticker ticker;
+
+  Supplier<? extends StatsCounter> statsCounterSupplier = CACHE_STATS_COUNTER;
+
+  // TODO(fry): make constructor private and update tests to use newBuilder
+  CacheBuilder() {}
+
+  /**
+   * Constructs a new {@code CacheBuilder} instance with default settings, including strong keys,
+   * strong values, and no automatic eviction of any kind.
+   */
+  public static CacheBuilder<Object, Object> newBuilder() {
+    return new CacheBuilder<Object, Object>();
+  }
+
+  /**
+   * Enables lenient parsing. Useful for tests and spec parsing.
+   */
+  CacheBuilder<K, V> lenientParsing() {
+    strictParsing = false;
+    return this;
+  }
+
+  /**
+   * Sets a custom {@code Equivalence} strategy for comparing keys.
+   *
+   * <p>By default, the cache uses {@link Equivalences#identity} to determine key equality when
+   * {@link #weakKeys} is specified, and {@link Equivalences#equals()} otherwise.
+   */
+  CacheBuilder<K, V> keyEquivalence(Equivalence<Object> equivalence) {
+    checkState(keyEquivalence == null, "key equivalence was already set to %s", keyEquivalence);
+    keyEquivalence = checkNotNull(equivalence);
+    return this;
+  }
+
+  Equivalence<Object> getKeyEquivalence() {
+    return firstNonNull(keyEquivalence, getKeyStrength().defaultEquivalence());
+  }
+
+  /**
+   * Sets a custom {@code Equivalence} strategy for comparing values.
+   *
+   * <p>By default, the cache uses {@link Equivalences#identity} to determine value equality when
+   * {@link #weakValues} or {@link #softValues} is specified, and {@link Equivalences#equals()}
+   * otherwise.
+   */
+  CacheBuilder<K, V> valueEquivalence(Equivalence<Object> equivalence) {
+    checkState(valueEquivalence == null,
+        "value equivalence was already set to %s", valueEquivalence);
+    this.valueEquivalence = checkNotNull(equivalence);
+    return this;
+  }
+
+  Equivalence<Object> getValueEquivalence() {
+    return firstNonNull(valueEquivalence, getValueStrength().defaultEquivalence());
+  }
+
+  /**
+   * Sets the minimum total size for the internal hash tables. For example, if the initial capacity
+   * is {@code 60}, and the concurrency level is {@code 8}, then eight segments are created, each
+   * having a hash table of size eight. Providing a large enough estimate at construction time
+   * avoids the need for expensive resizing operations later, but setting this value unnecessarily
+   * high wastes memory.
+   *
+   * @throws IllegalArgumentException if {@code initialCapacity} is negative
+   * @throws IllegalStateException if an initial capacity was already set
+   */
+  public CacheBuilder<K, V> initialCapacity(int initialCapacity) {
+    checkState(this.initialCapacity == UNSET_INT, "initial capacity was already set to %s",
+        this.initialCapacity);
+    checkArgument(initialCapacity >= 0);
+    this.initialCapacity = initialCapacity;
+    return this;
+  }
+
+  int getInitialCapacity() {
+    return (initialCapacity == UNSET_INT) ? DEFAULT_INITIAL_CAPACITY : initialCapacity;
+  }
+
+  /**
+   * Guides the allowed concurrency among update operations. Used as a hint for internal sizing. The
+   * table is internally partitioned to try to permit the indicated number of concurrent updates
+   * without contention. Because assignment of entries to these partitions is not necessarily
+   * uniform, the actual concurrency observed may vary. Ideally, you should choose a value to
+   * accommodate as many threads as will ever concurrently modify the table. Using a significantly
+   * higher value than you need can waste space and time, and a significantly lower value can lead
+   * to thread contention. But overestimates and underestimates within an order of magnitude do not
+   * usually have much noticeable impact. A value of one permits only one thread to modify the cache
+   * at a time, but since read operations can proceed concurrently, this still yields higher
+   * concurrency than full synchronization. Defaults to 4.
+   *
+   * <p><b>Note:</b>The default may change in the future. If you care about this value, you should
+   * always choose it explicitly.
+   *
+   * @throws IllegalArgumentException if {@code concurrencyLevel} is nonpositive
+   * @throws IllegalStateException if a concurrency level was already set
+   */
+  public CacheBuilder<K, V> concurrencyLevel(int concurrencyLevel) {
+    checkState(this.concurrencyLevel == UNSET_INT, "concurrency level was already set to %s",
+        this.concurrencyLevel);
+    checkArgument(concurrencyLevel > 0);
+    this.concurrencyLevel = concurrencyLevel;
+    return this;
+  }
+
+  int getConcurrencyLevel() {
+    return (concurrencyLevel == UNSET_INT) ? DEFAULT_CONCURRENCY_LEVEL : concurrencyLevel;
+  }
+
+  /**
+   * Specifies the maximum number of entries the cache may contain. Note that the cache <b>may evict
+   * an entry before this limit is exceeded</b>. As the cache size grows close to the maximum, the
+   * cache evicts entries that are less likely to be used again. For example, the cache may evict an
+   * entry because it hasn't been used recently or very often.
+   *
+   * <p>When {@code size} is zero, elements will be evicted immediately after being loaded into the
+   * cache. This can be useful in testing, or to disable caching temporarily without a code change.
+   *
+   * @param size the maximum size of the cache
+   * @throws IllegalArgumentException if {@code size} is negative
+   * @throws IllegalStateException if a maximum size was already set
+   */
+  public CacheBuilder<K, V> maximumSize(long size) {
+    checkState(this.maximumSize == UNSET_INT, "maximum size was already set to %s",
+        this.maximumSize);
+    checkState(this.maximumWeight == UNSET_INT, "maximum weight was already set to %s",
+        this.maximumWeight);
+    checkState(this.weigher == null, "maximum size can not be combined with weigher");
+    checkArgument(size >= 0, "maximum size must not be negative");
+    this.maximumSize = size;
+    return this;
+  }
+
+  /**
+   * Specifies the maximum weight of entries the cache may contain. Weight is determined using the
+   * {@link Weigher} specified with {@link #weigher}, and use of this method requires a
+   * corresponding call to {@link #weigher} prior to calling {@link #build}.
+   *
+   * <p>Note that the cache <b>may evict an entry before this limit is exceeded</b>. As the cache
+   * size grows close to the maximum, the cache evicts entries that are less likely to be used
+   * again. For example, the cache may evict an entry because it hasn't been used recently or very
+   * often.
+   *
+   * <p>When {@code weight} is zero, elements will be evicted immediately after being loaded into
+   * cache. This can be useful in testing, or to disable caching temporarily without a code
+   * change.
+   *
+   * @param weight the maximum weight the cache may contain
+   * @throws IllegalArgumentException if {@code size} is negative
+   * @throws IllegalStateException if a maximum size was already set
+   * @since 11.0
+   */
+  public CacheBuilder<K, V> maximumWeight(long weight) {
+    checkState(this.maximumWeight == UNSET_INT, "maximum weight was already set to %s",
+        this.maximumWeight);
+    checkState(this.maximumSize == UNSET_INT, "maximum size was already set to %s",
+        this.maximumSize);
+    this.maximumWeight = weight;
+    checkArgument(weight >= 0, "maximum weight must not be negative");
+    return this;
+  }
+
+  /**
+   * Specifies the weigher to use in determining the weight of entries. Entry weight is taken
+   * into consideration by {@link #maximumWeight(long)} when determining which entries to evict, and
+   * use of this method requires a corresponding call to {@link #maximumWeight(long)} prior to
+   * calling {@link #build}. Weights are measured and recorded when entries are inserted into the
+   * cache, and are thus effectively static during the lifetime of a cache entry.
+   *
+   * <p>When the weight of an entry is zero it will not be considered for size-based eviction
+   * (though it still may be evicted by other means).
+   *
+   * <p><b>Important note:</b> Instead of returning <em>this</em> as a {@code CacheBuilder}
+   * instance, this method returns {@code CacheBuilder<K1, V1>}. From this point on, either the
+   * original reference or the returned reference may be used to complete configuration and build
+   * the cache, but only the "generic" one is type-safe. That is, it will properly prevent you from
+   * building caches whose key or value types are incompatible with the types accepted by the
+   * weigher already provided; the {@code CacheBuilder} type cannot do this. For best results,
+   * simply use the standard method-chaining idiom, as illustrated in the documentation at top,
+   * configuring a {@code CacheBuilder} and building your {@link Cache} all in a single statement.
+   *
+   * <p><b>Warning:</b> if you ignore the above advice, and use this {@code CacheBuilder} to build
+   * a cache whose key or value type is incompatible with the weigher, you will likely experience
+   * a {@link ClassCastException} at some <i>undefined</i> point in the future.
+   *
+   * @param weigher the weigher to use in calculating the weight of cache entries
+   * @throws IllegalArgumentException if {@code size} is negative
+   * @throws IllegalStateException if a maximum size was already set
+   * @since 11.0
+   */
+  public <K1 extends K, V1 extends V> CacheBuilder<K1, V1> weigher(
+      Weigher<? super K1, ? super V1> weigher) {
+    checkState(this.weigher == null);
+    if (strictParsing) {
+      checkState(this.maximumSize == UNSET_INT, "weigher can not be combined with maximum size",
+          this.maximumSize);
+    }
+
+    // safely limiting the kinds of caches this can produce
+    @SuppressWarnings("unchecked")
+    CacheBuilder<K1, V1> me = (CacheBuilder<K1, V1>) this;
+    me.weigher = checkNotNull(weigher);
+    return me;
+  }
+
+  long getMaximumWeight() {
+    if (expireAfterWriteNanos == 0 || expireAfterAccessNanos == 0) {
+      return 0;
+    }
+    return (weigher == null) ? maximumSize : maximumWeight;
+  }
+
+  // Make a safe contravariant cast now so we don't have to do it over and over.
+  @SuppressWarnings("unchecked")
+  <K1 extends K, V1 extends V> Weigher<K1, V1> getWeigher() {
+    return (Weigher<K1, V1>) Objects.firstNonNull(weigher, OneWeigher.INSTANCE);
+  }
+
+  /**
+   * Specifies that each key (not value) stored in the cache should be strongly referenced.
+   *
+   * @throws IllegalStateException if the key strength was already set
+   */
+  CacheBuilder<K, V> strongKeys() {
+    return setKeyStrength(Strength.STRONG);
+  }
+
+  /**
+   * Specifies that each key (not value) stored in the cache should be wrapped in a {@link
+   * WeakReference} (by default, strong references are used).
+   *
+   * <p><b>Warning:</b> when this method is used, the resulting cache will use identity ({@code ==})
+   * comparison to determine equality of keys.
+   *
+   * <p>Entries with keys that have been garbage collected may be counted in {@link Cache#size},
+   * but will never be visible to read or write operations; such entries are cleaned up as part of
+   * the routine maintenance described in the class javadoc.
+   *
+   * @throws IllegalStateException if the key strength was already set
+   */
+  @GwtIncompatible("java.lang.ref.WeakReference")
+  public CacheBuilder<K, V> weakKeys() {
+    return setKeyStrength(Strength.WEAK);
+  }
+
+  CacheBuilder<K, V> setKeyStrength(Strength strength) {
+    checkState(keyStrength == null, "Key strength was already set to %s", keyStrength);
+    keyStrength = checkNotNull(strength);
+    return this;
+  }
+
+  Strength getKeyStrength() {
+    return firstNonNull(keyStrength, Strength.STRONG);
+  }
+
+  /**
+   * Specifies that each value (not key) stored in the cache should be strongly referenced.
+   *
+   * @throws IllegalStateException if the value strength was already set
+   */
+  CacheBuilder<K, V> strongValues() {
+    return setValueStrength(Strength.STRONG);
+  }
+
+  /**
+   * Specifies that each value (not key) stored in the cache should be wrapped in a
+   * {@link WeakReference} (by default, strong references are used).
+   *
+   * <p>Weak values will be garbage collected once they are weakly reachable. This makes them a poor
+   * candidate for caching; consider {@link #softValues} instead.
+   *
+   * <p><b>Note:</b> when this method is used, the resulting cache will use identity ({@code ==})
+   * comparison to determine equality of values.
+   *
+   * <p>Entries with values that have been garbage collected may be counted in {@link Cache#size},
+   * but will never be visible to read or write operations; such entries are cleaned up as part of
+   * the routine maintenance described in the class javadoc.
+   *
+   * @throws IllegalStateException if the value strength was already set
+   */
+  @GwtIncompatible("java.lang.ref.WeakReference")
+  public CacheBuilder<K, V> weakValues() {
+    return setValueStrength(Strength.WEAK);
+  }
+
+  /**
+   * Specifies that each value (not key) stored in the cache should be wrapped in a
+   * {@link SoftReference} (by default, strong references are used). Softly-referenced objects will
+   * be garbage-collected in a <i>globally</i> least-recently-used manner, in response to memory
+   * demand.
+   *
+   * <p><b>Warning:</b> in most circumstances it is better to set a per-cache {@linkplain
+   * #maximumSize(long) maximum size} instead of using soft references. You should only use this
+   * method if you are well familiar with the practical consequences of soft references.
+   *
+   * <p><b>Note:</b> when this method is used, the resulting cache will use identity ({@code ==})
+   * comparison to determine equality of values.
+   *
+   * <p>Entries with values that have been garbage collected may be counted in {@link Cache#size},
+   * but will never be visible to read or write operations; such entries are cleaned up as part of
+   * the routine maintenance described in the class javadoc.
+   *
+   * @throws IllegalStateException if the value strength was already set
+   */
+  @GwtIncompatible("java.lang.ref.SoftReference")
+  public CacheBuilder<K, V> softValues() {
+    return setValueStrength(Strength.SOFT);
+  }
+
+  CacheBuilder<K, V> setValueStrength(Strength strength) {
+    checkState(valueStrength == null, "Value strength was already set to %s", valueStrength);
+    valueStrength = checkNotNull(strength);
+    return this;
+  }
+
+  Strength getValueStrength() {
+    return firstNonNull(valueStrength, Strength.STRONG);
+  }
+
+  /**
+   * Specifies that each entry should be automatically removed from the cache once a fixed duration
+   * has elapsed after the entry's creation, or the most recent replacement of its value.
+   *
+   * <p>When {@code duration} is zero, this method hands off to
+   * {@link #maximumSize(long) maximumSize}{@code (0)}, ignoring any otherwise-specificed maximum
+   * size or weight. This can be useful in testing, or to disable caching temporarily without a code
+   * change.
+   *
+   * <p>Expired entries may be counted in {@link Cache#size}, but will never be visible to read or
+   * write operations. Expired entries are cleaned up as part of the routine maintenance described
+   * in the class javadoc.
+   *
+   * @param duration the length of time after an entry is created that it should be automatically
+   *     removed
+   * @param unit the unit that {@code duration} is expressed in
+   * @throws IllegalArgumentException if {@code duration} is negative
+   * @throws IllegalStateException if the time to live or time to idle was already set
+   */
+  public CacheBuilder<K, V> expireAfterWrite(long duration, TimeUnit unit) {
+    checkState(expireAfterWriteNanos == UNSET_INT, "expireAfterWrite was already set to %s ns",
+        expireAfterWriteNanos);
+    checkArgument(duration >= 0, "duration cannot be negative: %s %s", duration, unit);
+    this.expireAfterWriteNanos = unit.toNanos(duration);
+    return this;
+  }
+
+  long getExpireAfterWriteNanos() {
+    return (expireAfterWriteNanos == UNSET_INT) ? DEFAULT_EXPIRATION_NANOS : expireAfterWriteNanos;
+  }
+
+  /**
+   * Specifies that each entry should be automatically removed from the cache once a fixed duration
+   * has elapsed after the entry's creation, the most recent replacement of its value, or its last
+   * access. Access time is reset by all cache read and write operations (including
+   * {@code Cache.asMap().get(Object)} and {@code Cache.asMap().put(K, V)}), but not by operations
+   * on the collection-views of {@link Cache#asMap}.
+   *
+   * <p>When {@code duration} is zero, this method hands off to
+   * {@link #maximumSize(long) maximumSize}{@code (0)}, ignoring any otherwise-specificed maximum
+   * size or weight. This can be useful in testing, or to disable caching temporarily without a code
+   * change.
+   *
+   * <p>Expired entries may be counted in {@link Cache#size}, but will never be visible to read or
+   * write operations. Expired entries are cleaned up as part of the routine maintenance described
+   * in the class javadoc.
+   *
+   * @param duration the length of time after an entry is last accessed that it should be
+   *     automatically removed
+   * @param unit the unit that {@code duration} is expressed in
+   * @throws IllegalArgumentException if {@code duration} is negative
+   * @throws IllegalStateException if the time to idle or time to live was already set
+   */
+  public CacheBuilder<K, V> expireAfterAccess(long duration, TimeUnit unit) {
+    checkState(expireAfterAccessNanos == UNSET_INT, "expireAfterAccess was already set to %s ns",
+        expireAfterAccessNanos);
+    checkArgument(duration >= 0, "duration cannot be negative: %s %s", duration, unit);
+    this.expireAfterAccessNanos = unit.toNanos(duration);
+    return this;
+  }
+
+  long getExpireAfterAccessNanos() {
+    return (expireAfterAccessNanos == UNSET_INT)
+        ? DEFAULT_EXPIRATION_NANOS : expireAfterAccessNanos;
+  }
+
+  /**
+   * Specifies that active entries are eligible for automatic refresh once a fixed duration has
+   * elapsed after the entry's creation, or the most recent replacement of its value. The semantics
+   * of refreshes are specified in {@link LoadingCache#refresh}, and are performed by calling
+   * {@link CacheLoader#reload}.
+   *
+   * <p>As the default implementation of {@link CacheLoader#reload} is synchronous, it is
+   * recommended that users of this method override {@link CacheLoader#reload} with an asynchrnous
+   * implementation; otherwise refreshes will block other cache operations.
+   *
+   * <p>Currently automatic refreshes are performed when the first stale request for an entry
+   * occurs. The request triggering refresh will make a blocking call to {@link CacheLoader#reload}
+   * and immediately return the new value if the returned future is complete, and the old value
+   * otherwise.
+   *
+   * <p><b>Note:</b> <i>all exceptions thrown during refresh will be logged and then swallowed</i>.
+   *
+   * @param duration the length of time after an entry is created that it should be considered
+   *     stale, and thus eligible for refresh
+   * @param unit the unit that {@code duration} is expressed in
+   * @throws IllegalArgumentException if {@code duration} is negative
+   * @throws IllegalStateException if the refresh interval was already set
+   * @since 11.0
+   */
+  @GwtIncompatible("To be supported")
+  public CacheBuilder<K, V> refreshAfterWrite(long duration, TimeUnit unit) {
+    checkNotNull(unit);
+    checkState(refreshNanos == UNSET_INT, "refresh was already set to %s ns", refreshNanos);
+    checkArgument(duration > 0, "duration must be positive: %s %s", duration, unit);
+    this.refreshNanos = unit.toNanos(duration);
+    return this;
+  }
+
+  long getRefreshNanos() {
+    return (refreshNanos == UNSET_INT) ? DEFAULT_REFRESH_NANOS : refreshNanos;
+  }
+
+  /**
+   * Specifies a nanosecond-precision time source for use in determining when entries should be
+   * expired. By default, {@link System#nanoTime} is used.
+   *
+   * <p>The primary intent of this method is to facilitate testing of caches which have been
+   * configured with {@link #expireAfterWrite} or {@link #expireAfterAccess}.
+   *
+   * @throws IllegalStateException if a ticker was already set
+   */
+  @GwtIncompatible("To be supported")
+  public CacheBuilder<K, V> ticker(Ticker ticker) {
+    checkState(this.ticker == null);
+    this.ticker = checkNotNull(ticker);
+    return this;
+  }
+
+  Ticker getTicker(boolean recordsTime) {
+    if (ticker != null) {
+      return ticker;
+    }
+    return recordsTime ? Ticker.systemTicker() : NULL_TICKER;
+  }
+
+  /**
+   * Specifies a listener instance, which all caches built using this {@code CacheBuilder} will
+   * notify each time an entry is removed from the cache by any means.
+   *
+   * <p>Each cache built by this {@code CacheBuilder} after this method is called invokes the
+   * supplied listener after removing an element for any reason (see removal causes in {@link
+   * RemovalCause}). It will invoke the listener as part of the routine maintenance described
+   * in the class javadoc.
+   *
+   * <p><b>Note:</b> <i>all exceptions thrown by {@code listener} will be logged (using
+   * {@link java.util.logging.Logger})and then swallowed</i>.
+   *
+   * <p><b>Important note:</b> Instead of returning <em>this</em> as a {@code CacheBuilder}
+   * instance, this method returns {@code CacheBuilder<K1, V1>}. From this point on, either the
+   * original reference or the returned reference may be used to complete configuration and build
+   * the cache, but only the "generic" one is type-safe. That is, it will properly prevent you from
+   * building caches whose key or value types are incompatible with the types accepted by the
+   * listener already provided; the {@code CacheBuilder} type cannot do this. For best results,
+   * simply use the standard method-chaining idiom, as illustrated in the documentation at top,
+   * configuring a {@code CacheBuilder} and building your {@link Cache} all in a single statement.
+   *
+   * <p><b>Warning:</b> if you ignore the above advice, and use this {@code CacheBuilder} to build
+   * a cache whose key or value type is incompatible with the listener, you will likely experience
+   * a {@link ClassCastException} at some <i>undefined</i> point in the future.
+   *
+   * @throws IllegalStateException if a removal listener was already set
+   */
+  @CheckReturnValue
+  @GwtIncompatible("To be supported")
+  public <K1 extends K, V1 extends V> CacheBuilder<K1, V1> removalListener(
+      RemovalListener<? super K1, ? super V1> listener) {
+    checkState(this.removalListener == null);
+
+    // safely limiting the kinds of caches this can produce
+    @SuppressWarnings("unchecked")
+    CacheBuilder<K1, V1> me = (CacheBuilder<K1, V1>) this;
+    me.removalListener = checkNotNull(listener);
+    return me;
+  }
+
+  // Make a safe contravariant cast now so we don't have to do it over and over.
+  @SuppressWarnings("unchecked")
+  <K1 extends K, V1 extends V> RemovalListener<K1, V1> getRemovalListener() {
+    return (RemovalListener<K1, V1>) Objects.firstNonNull(removalListener, NullListener.INSTANCE);
+  }
+
+  /**
+   * Disable the accumulation of {@link CacheStats} during the operation of the cache.
+   */
+  CacheBuilder<K, V> disableStats() {
+    checkState(statsCounterSupplier == CACHE_STATS_COUNTER);
+    statsCounterSupplier = NULL_STATS_COUNTER;
+    return this;
+  }
+
+  Supplier<? extends StatsCounter> getStatsCounterSupplier() {
+    return statsCounterSupplier;
+  }
+
+  /**
+   * Builds a cache, which either returns an already-loaded value for a given key or atomically
+   * computes or retrieves it using the supplied {@code CacheLoader}. If another thread is currently
+   * loading the value for this key, simply waits for that thread to finish and returns its
+   * loaded value. Note that multiple threads can concurrently load values for distinct keys.
+   *
+   * <p>This method does not alter the state of this {@code CacheBuilder} instance, so it can be
+   * invoked again to create multiple independent caches.
+   *
+   * @param loader the cache loader used to obtain new values
+   * @return a cache having the requested features
+   */
+  public <K1 extends K, V1 extends V> LoadingCache<K1, V1> build(
+      CacheLoader<? super K1, V1> loader) {
+    checkWeightWithWeigher();
+    return new LocalCache.LocalLoadingCache<K1, V1>(this, loader);
+  }
+
+  /**
+   * Builds a cache which does not automatically load values when keys are requested.
+   *
+   * <p>Consider {@link #build(CacheLoader)} instead, if it is feasible to implement a
+   * {@code CacheLoader}.
+   *
+   * <p>This method does not alter the state of this {@code CacheBuilder} instance, so it can be
+   * invoked again to create multiple independent caches.
+   *
+   * @return a cache having the requested features
+   * @since 11.0
+   */
+  public <K1 extends K, V1 extends V> Cache<K1, V1> build() {
+    checkWeightWithWeigher();
+    checkNonLoadingCache();
+    return new LocalCache.LocalManualCache<K1, V1>(this);
+  }
+
+  private void checkNonLoadingCache() {
+    checkState(refreshNanos == UNSET_INT, "refreshAfterWrite requires a LoadingCache");
+  }
+
+  private void checkWeightWithWeigher() {
+    if (weigher == null) {
+      checkState(maximumWeight == UNSET_INT, "maximumWeight requires weigher");
+    } else {
+      if (strictParsing) {
+        checkState(maximumWeight != UNSET_INT, "weigher requires maximumWeight");
+      } else {
+        if (maximumWeight == UNSET_INT) {
+          logger.log(Level.WARNING, "ignoring weigher specified without maximumWeight");
+        }
+      }
+    }
+  }
+
+  /**
+   * Returns a string representation for this CacheBuilder instance. The exact form of the returned
+   * string is not specified.
+   */
+  @Override
+  public String toString() {
+    Objects.ToStringHelper s = Objects.toStringHelper(this);
+    if (initialCapacity != UNSET_INT) {
+      s.add("initialCapacity", initialCapacity);
+    }
+    if (concurrencyLevel != UNSET_INT) {
+      s.add("concurrencyLevel", concurrencyLevel);
+    }
+    if (maximumWeight != UNSET_INT) {
+      if (weigher == null) {
+        s.add("maximumSize", maximumWeight);
+      } else {
+        s.add("maximumWeight", maximumWeight);
+      }
+    }
+    if (expireAfterWriteNanos != UNSET_INT) {
+      s.add("expireAfterWrite", expireAfterWriteNanos + "ns");
+    }
+    if (expireAfterAccessNanos != UNSET_INT) {
+      s.add("expireAfterAccess", expireAfterAccessNanos + "ns");
+    }
+    if (keyStrength != null) {
+      s.add("keyStrength", Ascii.toLowerCase(keyStrength.toString()));
+    }
+    if (valueStrength != null) {
+      s.add("valueStrength", Ascii.toLowerCase(valueStrength.toString()));
+    }
+    if (keyEquivalence != null) {
+      s.addValue("keyEquivalence");
+    }
+    if (valueEquivalence != null) {
+      s.addValue("valueEquivalence");
+    }
+    if (removalListener != null) {
+      s.addValue("removalListener");
+    }
+    return s.toString();
+  }
+}
diff --git a/guava/src/com/google/common/cache/CacheLoader.java b/guava/src/com/google/common/cache/CacheLoader.java
new file mode 100644
index 0000000..21811e8
--- /dev/null
+++ b/guava/src/com/google/common/cache/CacheLoader.java
@@ -0,0 +1,161 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.cache;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.base.Function;
+import com.google.common.base.Supplier;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
+
+import java.io.Serializable;
+import java.util.Map;
+
+/**
+ * Computes or retrieves values, based on a key, for use in populating a {@code Cache}.
+ *
+ * <p>Most implementations will only need to implement {@link #load}. Other methods may be
+ * overridden as desired.
+ *
+ * @author Charles Fry
+ * @since 10.0
+ */
+@Beta
+@GwtCompatible(emulated = true)
+public abstract class CacheLoader<K, V> {
+  /**
+   * Constructor for use by subclasses.
+   */
+  protected CacheLoader() {}
+
+  /**
+   * Computes or retrieves the value corresponding to {@code key}.
+   *
+   * @param key the non-null key whose value should be loaded
+   * @return the value associated with {@code key}; <b>must not be null</b>
+   */
+  public abstract V load(K key) throws Exception;
+
+  /**
+   * Computes or retrieves a replacement value corresponding to an already-cached {@code key}. This
+   * method is called when an existing cache entry is refreshed by
+   * {@link CacheBuilder#refreshAfterWrite}, or through a call to {@link Cache#refresh}.
+   *
+   * <p>This implementation synchronously delegates to {@link #load}. It is recommended that it be
+   * overridden with an asynchronous implementation when using
+   * {@link CacheBuilder#refreshAfterWrite}.
+   *
+   * <p><b>Note:</b> <i>all exceptions thrown by this method will be logged and then swallowed</i>.
+   *
+   * @param key the non-null key whose value should be loaded
+   * @param oldValue the non-null old value corresponding to {@code key}
+   * @return the future new value associated with {@code key};
+   *     <b>must not be null, must not return null</b>
+   * @since 11.0
+   */
+  @GwtIncompatible("Futures")
+  public ListenableFuture<V> reload(K key, V oldValue) throws Exception {
+    return Futures.immediateFuture(load(key));
+  }
+
+  /**
+   * Computes or retrieves the values corresponding to {@code keys}. This method is called by
+   * {@link Cache#getAll}.
+   *
+   * <p>If the returned map doesn't contain all requested {@code keys} then the entries it does
+   * contain will be cached, but {@code getAll} will throw an exception. If the returned map
+   * contains extra keys not present in {@code keys} then all returned entries will be cached,
+   * but only the entries for {@code keys} will be returned from {@code getAll}.
+   *
+   * <p>This method should be overriden when bulk retrieval is significantly more efficient than
+   * many individual lookups. Note that {@link Cache#getAll} will defer to individual calls to
+   * {@link Cache#get} if this method is not overriden.
+   *
+   * @param keys the unique, non-null keys whose values should be loaded
+   * @return a map from each key in {@code keys} to the value associated with that key;
+   *     <b>may not contain null values</b>
+   * @since 11.0
+   */
+  public Map<K, V> loadAll(Iterable<? extends K> keys) throws Exception {
+    // This will be caught by getAll(), causing it to fall back to multiple calls to Cache.get
+    throw new UnsupportedLoadingOperationException();
+  }
+
+  /**
+   * Returns a {@code CacheLoader} which creates values by applying a {@code Function} to the key.
+   */
+  public static <K, V> CacheLoader<K, V> from(Function<K, V> function) {
+    return new FunctionToCacheLoader<K, V>(function);
+  }
+
+  private static final class FunctionToCacheLoader<K, V>
+      extends CacheLoader<K, V> implements Serializable {
+    private final Function<K, V> computingFunction;
+
+    public FunctionToCacheLoader(Function<K, V> computingFunction) {
+      this.computingFunction = checkNotNull(computingFunction);
+    }
+
+    @Override
+    public V load(K key) {
+      return computingFunction.apply(key);
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  /**
+   * Returns a {@code CacheLoader} which obtains values from a {@code Supplier} (independent of the
+   * key).
+   */
+  public static <V> CacheLoader<Object, V> from(Supplier<V> supplier) {
+    return new SupplierToCacheLoader<V>(supplier);
+  }
+
+  private static final class SupplierToCacheLoader<V>
+      extends CacheLoader<Object, V> implements Serializable {
+    private final Supplier<V> computingSupplier;
+
+    public SupplierToCacheLoader(Supplier<V> computingSupplier) {
+      this.computingSupplier = checkNotNull(computingSupplier);
+    }
+
+    @Override
+    public V load(Object key) {
+      return computingSupplier.get();
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  static final class UnsupportedLoadingOperationException extends UnsupportedOperationException {}
+
+  /**
+   * Thrown to indicate that an invalid response was returned from a call to {@link CacheLoader}.
+   *
+   * @since 11.0
+   */
+  public static final class InvalidCacheLoadException extends RuntimeException {
+    public InvalidCacheLoadException(String message) {
+      super(message);
+    }
+  }
+}
diff --git a/guava/src/com/google/common/cache/CacheStats.java b/guava/src/com/google/common/cache/CacheStats.java
new file mode 100644
index 0000000..04d442c
--- /dev/null
+++ b/guava/src/com/google/common/cache/CacheStats.java
@@ -0,0 +1,269 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.cache;
+
+import static com.google.common.base.Preconditions.checkArgument;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Objects;
+
+import javax.annotation.Nullable;
+
+/**
+ * Statistics about the performance of a {@link Cache}. Instances of this class are immutable.
+ *
+ * <p>Cache statistics are incremented according to the following rules:
+ *
+ * <ul>
+ * <li>When a cache lookup encounters an existing cache entry {@code hitCount} is incremented.
+ * <li>When a cache lookup first encounters a missing cache entry, a new entry is loaded.
+ * <ul>
+ * <li>After successfully loading an entry {@code missCount} and {@code loadSuccessCount} are
+ *     incremented, and the total loading time, in nanoseconds, is added to
+ *     {@code totalLoadTime}.
+ * <li>When an exception is thrown while loading an entry, {@code missCount} and {@code
+ *     loadExceptionCount} are incremented, and the total loading time, in nanoseconds, is
+ *     added to {@code totalLoadTime}.
+ * <li>Cache lookups that encounter a missing cache entry that is still loading will wait
+ *     for loading to complete (whether successful or not) and then increment {@code missCount}.
+ * </ul>
+ * <li>When an entry is evicted from the cache, {@code evictionCount} is incremented.
+ * <li>No stats are modified when a cache entry is invalidated or manually removed.
+ * <li>No stats are modified by operations invoked on the {@linkplain Cache#asMap asMap} view of
+ *     the cache.
+ * </ul>
+ *
+ * @author Charles Fry
+ * @since 10.0
+ */
+@Beta
+@GwtCompatible
+public final class CacheStats {
+  private final long hitCount;
+  private final long missCount;
+  private final long loadSuccessCount;
+  private final long loadExceptionCount;
+  private final long totalLoadTime;
+  private final long evictionCount;
+
+  /**
+   * Constructs a new {@code CacheStats} instance.
+   *
+   * <p>Five parameters of the same type in a row is a bad thing, but this class is not constructed
+   * by end users and is too fine-grained for a builder.
+   */
+  public CacheStats(long hitCount, long missCount, long loadSuccessCount,
+      long loadExceptionCount, long totalLoadTime, long evictionCount) {
+    checkArgument(hitCount >= 0);
+    checkArgument(missCount >= 0);
+    checkArgument(loadSuccessCount >= 0);
+    checkArgument(loadExceptionCount >= 0);
+    checkArgument(totalLoadTime >= 0);
+    checkArgument(evictionCount >= 0);
+
+    this.hitCount = hitCount;
+    this.missCount = missCount;
+    this.loadSuccessCount = loadSuccessCount;
+    this.loadExceptionCount = loadExceptionCount;
+    this.totalLoadTime = totalLoadTime;
+    this.evictionCount = evictionCount;
+  }
+
+  /**
+   * Returns the number of times {@link Cache} lookup methods have returned either a cached or
+   * uncached value. This is defined as {@code hitCount + missCount}.
+   */
+  public long requestCount() {
+    return hitCount + missCount;
+  }
+
+  /**
+   * Returns the number of times {@link Cache} lookup methods have returned a cached value.
+   */
+  public long hitCount() {
+    return hitCount;
+  }
+
+  /**
+   * Returns the ratio of cache requests which were hits. This is defined as
+   * {@code hitCount / requestCount}, or {@code 1.0} when {@code requestCount == 0}.
+   * Note that {@code hitRate + missRate =~ 1.0}.
+   */
+  public double hitRate() {
+    long requestCount = requestCount();
+    return (requestCount == 0) ? 1.0 : (double) hitCount / requestCount;
+  }
+
+  /**
+   * Returns the number of times {@link Cache} lookup methods have returned an uncached (newly
+   * loaded) value, or null. Multiple concurrent calls to {@link Cache} lookup methods on an absent
+   * value can result in multiple misses, all returning the results of a single cache load
+   * operation.
+   */
+  public long missCount() {
+    return missCount;
+  }
+
+  /**
+   * Returns the ratio of cache requests which were misses. This is defined as
+   * {@code missCount / requestCount}, or {@code 0.0} when {@code requestCount == 0}.
+   * Note that {@code hitRate + missRate =~ 1.0}. Cache misses include all requests which
+   * weren't cache hits, including requests which resulted in either successful or failed loading
+   * attempts, and requests which waited for other threads to finish loading. It is thus the case
+   * that {@code missCount &gt;= loadSuccessCount + loadExceptionCount}. Multiple
+   * concurrent misses for the same key will result in a single load operation.
+   */
+  public double missRate() {
+    long requestCount = requestCount();
+    return (requestCount == 0) ? 0.0 : (double) missCount / requestCount;
+  }
+
+  /**
+   * Returns the total number of times that {@link Cache} lookup methods attempted to load new
+   * values. This includes both successful load operations, as well as those that threw
+   * exceptions. This is defined as {@code loadSuccessCount + loadExceptionCount}.
+   */
+  public long loadCount() {
+    return loadSuccessCount + loadExceptionCount;
+  }
+
+  /**
+   * Returns the number of times {@link Cache} lookup methods have successfully loaded a new value.
+   * This is always incremented in conjunction with {@link #missCount}, though {@code missCount}
+   * is also incremented when an exception is encountered during cache loading (see
+   * {@link #loadExceptionCount}). Multiple concurrent misses for the same key will result in a
+   * single load operation.
+   */
+  public long loadSuccessCount() {
+    return loadSuccessCount;
+  }
+
+  /**
+   * Returns the number of times {@link Cache} lookup methods threw an exception while loading a
+   * new value. This is always incremented in conjunction with {@code missCount}, though
+   * {@code missCount} is also incremented when cache loading completes successfully (see
+   * {@link #loadSuccessCount}). Multiple concurrent misses for the same key will result in a
+   * single load operation.
+   */
+  public long loadExceptionCount() {
+    return loadExceptionCount;
+  }
+
+  /**
+   * Returns the ratio of cache loading attempts which threw exceptions. This is defined as
+   * {@code loadExceptionCount / (loadSuccessCount + loadExceptionCount)}, or
+   * {@code 0.0} when {@code loadSuccessCount + loadExceptionCount == 0}.
+   */
+  public double loadExceptionRate() {
+    long totalLoadCount = loadSuccessCount + loadExceptionCount;
+    return (totalLoadCount == 0)
+        ? 0.0
+        : (double) loadExceptionCount / totalLoadCount;
+  }
+
+  /**
+   * Returns the total number of nanoseconds the cache has spent loading new values. This can be
+   * used to calculate the miss penalty. This value is increased every time
+   * {@code loadSuccessCount} or {@code loadExceptionCount} is incremented.
+   */
+  public long totalLoadTime() {
+    return totalLoadTime;
+  }
+
+  /**
+   * Returns the average time spent loading new values. This is defined as
+   * {@code totalLoadTime / (loadSuccessCount + loadExceptionCount)}.
+   */
+  public double averageLoadPenalty() {
+    long totalLoadCount = loadSuccessCount + loadExceptionCount;
+    return (totalLoadCount == 0)
+        ? 0.0
+        : (double) totalLoadTime / totalLoadCount;
+  }
+
+  /**
+   * Returns the number of times an entry has been evicted. This count does not include manual
+   * {@linkplain Cache#invalidate invalidations}.
+   */
+  public long evictionCount() {
+    return evictionCount;
+  }
+
+  /**
+   * Returns a new {@code CacheStats} representing the difference between this {@code CacheStats}
+   * and {@code other}. Negative values, which aren't supported by {@code CacheStats} will be
+   * rounded up to zero.
+   */
+  public CacheStats minus(CacheStats other) {
+    return new CacheStats(
+        Math.max(0, hitCount - other.hitCount),
+        Math.max(0, missCount - other.missCount),
+        Math.max(0, loadSuccessCount - other.loadSuccessCount),
+        Math.max(0, loadExceptionCount - other.loadExceptionCount),
+        Math.max(0, totalLoadTime - other.totalLoadTime),
+        Math.max(0, evictionCount - other.evictionCount));
+  }
+
+  /**
+   * Returns a new {@code CacheStats} representing the sum of this {@code CacheStats}
+   * and {@code other}.
+   *
+   * @since 11.0
+   */
+  public CacheStats plus(CacheStats other) {
+    return new CacheStats(
+        hitCount + other.hitCount,
+        missCount + other.missCount,
+        loadSuccessCount + other.loadSuccessCount,
+        loadExceptionCount + other.loadExceptionCount,
+        totalLoadTime + other.totalLoadTime,
+        evictionCount + other.evictionCount);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hashCode(hitCount, missCount, loadSuccessCount, loadExceptionCount,
+        totalLoadTime, evictionCount);
+  }
+
+  @Override
+  public boolean equals(@Nullable Object object) {
+    if (object instanceof CacheStats) {
+      CacheStats other = (CacheStats) object;
+      return hitCount == other.hitCount
+          && missCount == other.missCount
+          && loadSuccessCount == other.loadSuccessCount
+          && loadExceptionCount == other.loadExceptionCount
+          && totalLoadTime == other.totalLoadTime
+          && evictionCount == other.evictionCount;
+    }
+    return false;
+  }
+
+  @Override
+  public String toString() {
+    return Objects.toStringHelper(this)
+        .add("hitCount", hitCount)
+        .add("missCount", missCount)
+        .add("loadSuccessCount", loadSuccessCount)
+        .add("loadExceptionCount", loadExceptionCount)
+        .add("totalLoadTime", totalLoadTime)
+        .add("evictionCount", evictionCount)
+        .toString();
+  }
+}
diff --git a/guava/src/com/google/common/cache/ForwardingCache.java b/guava/src/com/google/common/cache/ForwardingCache.java
new file mode 100644
index 0000000..4404593
--- /dev/null
+++ b/guava/src/com/google/common/cache/ForwardingCache.java
@@ -0,0 +1,155 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.cache;
+
+import com.google.common.annotations.Beta;
+import com.google.common.base.Preconditions;
+import com.google.common.collect.ForwardingObject;
+import com.google.common.collect.ImmutableMap;
+
+import java.util.concurrent.Callable;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.ExecutionException;
+
+import javax.annotation.Nullable;
+
+/**
+ * A cache which forwards all its method calls to another cache. Subclasses should override one or
+ * more methods to modify the behavior of the backing cache as desired per the
+ * <a href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
+ *
+ * @author Charles Fry
+ * @since 10.0
+ */
+@Beta
+public abstract class ForwardingCache<K, V> extends ForwardingObject implements Cache<K, V> {
+
+  /** Constructor for use by subclasses. */
+  protected ForwardingCache() {}
+
+  @Override
+  protected abstract Cache<K, V> delegate();
+
+  /**
+   * @since 11.0
+   */
+  @Override
+  @Nullable
+  public V getIfPresent(K key) {
+    return delegate().getIfPresent(key);
+  }
+
+  /**
+   * @since 11.0
+   */
+  @Override
+  public V get(K key, Callable<? extends V> valueLoader) throws ExecutionException {
+    return delegate().get(key, valueLoader);
+  }
+
+  /**
+   * @since 11.0
+   */
+  @Override
+  public ImmutableMap<K, V> getAllPresent(Iterable<? extends K> keys) {
+    return delegate().getAllPresent(keys);
+  }
+
+  /**
+   * @since 11.0
+   */
+  @Override
+  public void put(K key, V value) {
+    delegate().put(key, value);
+  }
+
+  @Override
+  public void invalidate(Object key) {
+    delegate().invalidate(key);
+  }
+
+  /**
+   * @since 11.0
+   */
+  @Override
+  public void invalidateAll(Iterable<?> keys) {
+    delegate().invalidateAll(keys);
+  }
+
+  @Override
+  public void invalidateAll() {
+    delegate().invalidateAll();
+  }
+
+  @Override
+  public long size() {
+    return delegate().size();
+  }
+
+  @Override
+  public CacheStats stats() {
+    return delegate().stats();
+  }
+
+  @Override
+  public ConcurrentMap<K, V> asMap() {
+    return delegate().asMap();
+  }
+
+  @Override
+  public void cleanUp() {
+    delegate().cleanUp();
+  }
+
+  @Deprecated
+  @Override
+  public V get(K key) throws ExecutionException {
+    return delegate().get(key);
+  }
+
+  @Deprecated
+  @Override
+  public V getUnchecked(K key) {
+    return delegate().getUnchecked(key);
+  }
+
+  @Deprecated
+  @Override
+  public V apply(K key) {
+    return delegate().apply(key);
+  }
+
+  /**
+   * A simplified version of {@link ForwardingCache} where subclasses can pass in an already
+   * constructed {@link Cache} as the delegete.
+   *
+   * @since 10.0
+   */
+  @Beta
+  public abstract static class SimpleForwardingCache<K, V> extends ForwardingCache<K, V> {
+    private final Cache<K, V> delegate;
+
+    protected SimpleForwardingCache(Cache<K, V> delegate) {
+      this.delegate = Preconditions.checkNotNull(delegate);
+    }
+
+    @Override
+    protected final Cache<K, V> delegate() {
+      return delegate;
+    }
+  }
+}
diff --git a/guava/src/com/google/common/cache/ForwardingLoadingCache.java b/guava/src/com/google/common/cache/ForwardingLoadingCache.java
new file mode 100644
index 0000000..93732ff
--- /dev/null
+++ b/guava/src/com/google/common/cache/ForwardingLoadingCache.java
@@ -0,0 +1,91 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.cache;
+
+import com.google.common.annotations.Beta;
+import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableMap;
+
+import java.util.concurrent.ExecutionException;
+
+/**
+ * A cache which forwards all its method calls to another cache. Subclasses should override one or
+ * more methods to modify the behavior of the backing cache as desired per the
+ * <a href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
+ *
+ * <p>Note that {@link #get}, {@link #getUnchecked}, and {@link #apply} all expose the same
+ * underlying functionality, so should probably be overridden as a group.
+ *
+ * @author Charles Fry
+ * @since 11.0
+ */
+@Beta
+public abstract class ForwardingLoadingCache<K, V>
+    extends ForwardingCache<K, V> implements LoadingCache<K, V> {
+
+  /** Constructor for use by subclasses. */
+  protected ForwardingLoadingCache() {}
+
+  @Override
+  protected abstract LoadingCache<K, V> delegate();
+
+  @Override
+  public V get(K key) throws ExecutionException {
+    return delegate().get(key);
+  }
+
+  @Override
+  public V getUnchecked(K key) {
+    return delegate().getUnchecked(key);
+  }
+
+  @Override
+  public ImmutableMap<K, V> getAll(Iterable<? extends K> keys) throws ExecutionException {
+    return delegate().getAll(keys);
+  }
+
+  @Override
+  public V apply(K key) {
+    return delegate().apply(key);
+  }
+
+  @Override
+  public void refresh(K key) {
+    delegate().refresh(key);
+  }
+
+  /**
+   * A simplified version of {@link ForwardingLoadingCache} where subclasses can pass in an already
+   * constructed {@link LoadingCache} as the delegete.
+   *
+   * @since 10.0
+   */
+  @Beta
+  public abstract static class SimpleForwardingLoadingCache<K, V>
+      extends ForwardingLoadingCache<K, V> {
+    private final LoadingCache<K, V> delegate;
+
+    protected SimpleForwardingLoadingCache(LoadingCache<K, V> delegate) {
+      this.delegate = Preconditions.checkNotNull(delegate);
+    }
+
+    @Override
+    protected final LoadingCache<K, V> delegate() {
+      return delegate;
+    }
+  }
+}
diff --git a/guava/src/com/google/common/cache/LoadingCache.java b/guava/src/com/google/common/cache/LoadingCache.java
new file mode 100644
index 0000000..471c31a
--- /dev/null
+++ b/guava/src/com/google/common/cache/LoadingCache.java
@@ -0,0 +1,158 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.cache;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Function;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.util.concurrent.ExecutionError;
+import com.google.common.util.concurrent.UncheckedExecutionException;
+
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.ExecutionException;
+
+/**
+ * A semi-persistent mapping from keys to values. Values are automatically loaded by the cache,
+ * and are stored in the cache until either evicted or manually invalidated.
+ *
+ * <p>Implementations of this interface are expected to be thread-safe, and can be safely accessed
+ * by multiple concurrent threads.
+ *
+ * <p>All methods other than {@link #get} and {@link #getUnchecked} are optional.
+ *
+ * <p>When evaluated as a {@link Function}, a cache yields the same result as invoking
+ * {@link #getUnchecked}.
+ *
+ * @author Charles Fry
+ * @since 11.0
+ */
+@Beta
+@GwtCompatible
+public interface LoadingCache<K, V> extends Cache<K, V>, Function<K, V> {
+
+  /**
+   * Returns the value associated with {@code key} in this cache, first loading that value if
+   * necessary. No observable state associated with this cache is modified until loading completes.
+   *
+   * <p>If another call to {@link #get} or {@link #getUnchecked} is currently loading the value for
+   * {@code key}, simply waits for that thread to finish and returns its loaded value. Note that
+   * multiple threads can concurrently load values for distinct keys.
+   *
+   * <p>Caches loaded by a {@link CacheLoader} will call {@link CacheLoader#load} to load new values
+   * into the cache. Newly loaded values are added to the cache using
+   * {@code Cache.asMap().putIfAbsent} after loading has completed; if another value was associated
+   * with {@code key} while the new value was loading then a removal notification will be sent for
+   * the new value.
+   *
+   * <p>If the cache loader associated with this cache is known not to throw checked
+   * exceptions, then prefer {@link #getUnchecked} over this method.
+   *
+   * @throws ExecutionException if a checked exception was thrown while loading the value
+   * @throws UncheckedExecutionException if an unchecked exception was thrown while loading the
+   *     value
+   * @throws ExecutionError if an error was thrown while loading the value
+   */
+  V get(K key) throws ExecutionException;
+
+  /**
+   * Returns the value associated with {@code key} in this cache, first loading that value if
+   * necessary. No observable state associated with this cache is modified until loading
+   * completes. Unlike {@link #get}, this method does not throw a checked exception, and thus should
+   * only be used in situations where checked exceptions are not thrown by the cache loader.
+   *
+   * <p>If another call to {@link #get} or {@link #getUnchecked} is currently loading the value for
+   * {@code key}, simply waits for that thread to finish and returns its loaded value. Note that
+   * multiple threads can concurrently load values for distinct keys.
+   *
+   * <p>Caches loaded by a {@link CacheLoader} will call {@link CacheLoader#load} to load new values
+   * into the cache. Newly loaded values are added to the cache using
+   * {@code Cache.asMap().putIfAbsent} after loading has completed; if another value was associated
+   * with {@code key} while the new value was loading then a removal notification will be sent for
+   * the new value.
+   *
+   * <p><b>Warning:</b> this method silently converts checked exceptions to unchecked exceptions,
+   * and should not be used with cache loaders which throw checked exceptions. In such cases use
+   * {@link #get} instead.
+   *
+   * @throws UncheckedExecutionException if an exception was thrown while loading the value,
+   *     regardless of whether the exception was checked or unchecked
+   * @throws ExecutionError if an error was thrown while loading the value
+   */
+  V getUnchecked(K key);
+
+  /**
+   * Returns a map of the values associated with {@code keys}, creating or retrieving those values
+   * if necessary. The returned map contains entries that were already cached, combined with newly
+   * loaded entries; it will never contain null keys or values.
+   *
+   * <p>Caches loaded by a {@link CacheLoader} will issue a single request to
+   * {@link CacheLoader#loadAll} for all keys which are not already present in the cache. All
+   * entries returned by {@link CacheLoader#loadAll} will be stored in the cache, over-writing
+   * any previously cached values. This method will throw an exception if
+   * {@link CacheLoader#loadAll} returns {@code null}, returns a map containing null keys or values,
+   * or fails to return an entry for each requested key.
+   *
+   * <p>Note that duplicate elements in {@code keys}, as determined by {@link Object#equals}, will
+   * be ignored.
+   *
+   * @throws ExecutionException if a checked exception was thrown while loading the values
+   * @throws UncheckedExecutionException if an unchecked exception was thrown while loading the
+   *     values
+   * @throws ExecutionError if an error was thrown while loading the values
+   * @since 11.0
+   */
+  ImmutableMap<K, V> getAll(Iterable<? extends K> keys) throws ExecutionException;
+
+  /**
+   * Discouraged. Provided to satisfy the {@code Function} interface; use {@link #get} or
+   * {@link #getUnchecked} instead.
+   *
+   * @throws UncheckedExecutionException if an exception was thrown while loading the value,
+   *     regardless of whether the exception was checked or unchecked
+   * @throws ExecutionError if an error was thrown while loading the value
+   */
+  @Override
+  V apply(K key);
+
+  /**
+   * Loads a new value for key {@code key}, possibly asynchronously. While the new value is loading
+   * the previous value (if any) will continue to be returned by {@code get(key)} unless it is
+   * evicted. If the new value is loaded successfully it will replace the previous value in the
+   * cache; if an exception is thrown while refreshing the previous value will remain, <i>and the
+   * exception will be logged (using {@link java.util.logging.Logger}) and swallowed</i>.
+   *
+   * <p>Caches loaded by a {@link CacheLoader} will call {@link CacheLoader#reload} if the
+   * cache currently contains a value for {@code key}, and {@link CacheLoader#load} otherwise.
+   *
+   * <p>Returns without doing anything if another thread is currently loading the value for
+   * {@code key}. If the cache loader associated with this cache performs refresh asynchronously
+   * then this method may return before refresh completes.
+   *
+   * @since 11.0
+   */
+  void refresh(K key);
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p><b>Note that although the view <i>is</i> modifiable, no method on the returned map will ever
+   * cause entries to be automatically loaded.</b>
+   */
+  @Override
+  ConcurrentMap<K, V> asMap();
+}
diff --git a/guava/src/com/google/common/cache/LocalCache.java b/guava/src/com/google/common/cache/LocalCache.java
new file mode 100644
index 0000000..4973429
--- /dev/null
+++ b/guava/src/com/google/common/cache/LocalCache.java
@@ -0,0 +1,4881 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.cache;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkState;
+import static com.google.common.cache.CacheBuilder.NULL_TICKER;
+import static com.google.common.cache.CacheBuilder.UNSET_INT;
+import static com.google.common.util.concurrent.Uninterruptibles.getUninterruptibly;
+import static java.util.concurrent.TimeUnit.NANOSECONDS;
+
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Equivalence;
+import com.google.common.base.Equivalences;
+import com.google.common.base.Stopwatch;
+import com.google.common.base.Ticker;
+import com.google.common.cache.AbstractCache.SimpleStatsCounter;
+import com.google.common.cache.AbstractCache.StatsCounter;
+import com.google.common.cache.CacheBuilder.NullListener;
+import com.google.common.cache.CacheBuilder.OneWeigher;
+import com.google.common.cache.CacheLoader.InvalidCacheLoadException;
+import com.google.common.cache.CacheLoader.UnsupportedLoadingOperationException;
+import com.google.common.collect.AbstractLinkedIterator;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Iterators;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
+import com.google.common.primitives.Ints;
+import com.google.common.util.concurrent.ExecutionError;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.ListeningExecutorService;
+import com.google.common.util.concurrent.MoreExecutors;
+import com.google.common.util.concurrent.SettableFuture;
+import com.google.common.util.concurrent.UncheckedExecutionException;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.Serializable;
+import java.lang.ref.Reference;
+import java.lang.ref.ReferenceQueue;
+import java.lang.ref.SoftReference;
+import java.lang.ref.WeakReference;
+import java.util.AbstractCollection;
+import java.util.AbstractMap;
+import java.util.AbstractQueue;
+import java.util.AbstractSet;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.NoSuchElementException;
+import java.util.Queue;
+import java.util.Set;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ConcurrentLinkedQueue;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicReferenceArray;
+import java.util.concurrent.locks.ReentrantLock;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.annotation.Nullable;
+import javax.annotation.concurrent.GuardedBy;
+
+/**
+ * The concurrent hash map implementation built by {@link CacheBuilder}.
+ *
+ * <p>This implementation is heavily derived from revision 1.96 of <a
+ * href="http://tinyurl.com/ConcurrentHashMap">ConcurrentHashMap.java</a>.
+ *
+ * @author Charles Fry
+ * @author Bob Lee ({@code com.google.common.collect.MapMaker})
+ * @author Doug Lea ({@code ConcurrentHashMap})
+ */
+class LocalCache<K, V> extends AbstractMap<K, V> implements ConcurrentMap<K, V> {
+
+  /*
+   * The basic strategy is to subdivide the table among Segments, each of which itself is a
+   * concurrently readable hash table. The map supports non-blocking reads and concurrent writes
+   * across different segments.
+   *
+   * If a maximum size is specified, a best-effort bounding is performed per segment, using a
+   * page-replacement algorithm to determine which entries to evict when the capacity has been
+   * exceeded.
+   *
+   * The page replacement algorithm's data structures are kept casually consistent with the map. The
+   * ordering of writes to a segment is sequentially consistent. An update to the map and recording
+   * of reads may not be immediately reflected on the algorithm's data structures. These structures
+   * are guarded by a lock and operations are applied in batches to avoid lock contention. The
+   * penalty of applying the batches is spread across threads so that the amortized cost is slightly
+   * higher than performing just the operation without enforcing the capacity constraint.
+   *
+   * This implementation uses a per-segment queue to record a memento of the additions, removals,
+   * and accesses that were performed on the map. The queue is drained on writes and when it exceeds
+   * its capacity threshold.
+   *
+   * The Least Recently Used page replacement algorithm was chosen due to its simplicity, high hit
+   * rate, and ability to be implemented with O(1) time complexity. The initial LRU implementation
+   * operates per-segment rather than globally for increased implementation simplicity. We expect
+   * the cache hit rate to be similar to that of a global LRU algorithm.
+   */
+
+  // Constants
+
+  /**
+   * The maximum capacity, used if a higher value is implicitly specified by either of the
+   * constructors with arguments. MUST be a power of two <= 1<<30 to ensure that entries are
+   * indexable using ints.
+   */
+  static final int MAXIMUM_CAPACITY = 1 << 30;
+
+  /** The maximum number of segments to allow; used to bound constructor arguments. */
+  static final int MAX_SEGMENTS = 1 << 16; // slightly conservative
+
+  /** Number of (unsynchronized) retries in the containsValue method. */
+  static final int CONTAINS_VALUE_RETRIES = 3;
+
+  /**
+   * Number of cache access operations that can be buffered per segment before the cache's recency
+   * ordering information is updated. This is used to avoid lock contention by recording a memento
+   * of reads and delaying a lock acquisition until the threshold is crossed or a mutation occurs.
+   *
+   * <p>This must be a (2^n)-1 as it is used as a mask.
+   */
+  static final int DRAIN_THRESHOLD = 0x3F;
+
+  /**
+   * Maximum number of entries to be drained in a single cleanup run. This applies independently to
+   * the cleanup queue and both reference queues.
+   */
+  // TODO(fry): empirically optimize this
+  static final int DRAIN_MAX = 16;
+
+  // Fields
+
+  static final Logger logger = Logger.getLogger(LocalCache.class.getName());
+
+  static final ListeningExecutorService sameThreadExecutor = MoreExecutors.sameThreadExecutor();
+
+  /**
+   * Mask value for indexing into segments. The upper bits of a key's hash code are used to choose
+   * the segment.
+   */
+  final int segmentMask;
+
+  /**
+   * Shift value for indexing within segments. Helps prevent entries that end up in the same segment
+   * from also ending up in the same bucket.
+   */
+  final int segmentShift;
+
+  /** The segments, each of which is a specialized hash table. */
+  final Segment<K, V>[] segments;
+
+  /** The concurrency level. */
+  final int concurrencyLevel;
+
+  /** Strategy for comparing keys. */
+  final Equivalence<Object> keyEquivalence;
+
+  /** Strategy for comparing values. */
+  final Equivalence<Object> valueEquivalence;
+
+  /** Strategy for referencing keys. */
+  final Strength keyStrength;
+
+  /** Strategy for referencing values. */
+  final Strength valueStrength;
+
+  /** The maximum weight of this map. UNSET_INT if there is no maximum. */
+  final long maxWeight;
+
+  /** Weigher to weigh cache entries. */
+  final Weigher<K, V> weigher;
+
+  /** How long after the last access to an entry the map will retain that entry. */
+  final long expireAfterAccessNanos;
+
+  /** How long after the last write to an entry the map will retain that entry. */
+  final long expireAfterWriteNanos;
+
+  /** How long after the last write an entry becomes a candidate for refresh. */
+  final long refreshNanos;
+
+  /** Entries waiting to be consumed by the removal listener. */
+  // TODO(fry): define a new type which creates event objects and automates the clear logic
+  final Queue<RemovalNotification<K, V>> removalNotificationQueue;
+
+  /**
+   * A listener that is invoked when an entry is removed due to expiration or garbage collection of
+   * soft/weak entries.
+   */
+  final RemovalListener<K, V> removalListener;
+
+  /** Measures time in a testable way. */
+  final Ticker ticker;
+
+  /** Factory used to create new entries. */
+  final EntryFactory entryFactory;
+
+  /**
+   * Accumulates global cache statistics. Note that there are also per-segments stats counters
+   * which must be aggregated to obtain a global stats view.
+   */
+  final StatsCounter globalStatsCounter;
+
+  /**
+   * The default cache loader to use on loading operations.
+   */
+  @Nullable
+  final CacheLoader<? super K, V> defaultLoader;
+
+  /**
+   * Creates a new, empty map with the specified strategy, initial capacity and concurrency level.
+   */
+  LocalCache(CacheBuilder<? super K, ? super V> builder, CacheLoader<? super K, V> loader) {
+    concurrencyLevel = Math.min(builder.getConcurrencyLevel(), MAX_SEGMENTS);
+
+    keyStrength = builder.getKeyStrength();
+    valueStrength = builder.getValueStrength();
+
+    keyEquivalence = builder.getKeyEquivalence();
+    valueEquivalence = builder.getValueEquivalence();
+
+    maxWeight = builder.getMaximumWeight();
+    weigher = builder.getWeigher();
+    expireAfterAccessNanos = builder.getExpireAfterAccessNanos();
+    expireAfterWriteNanos = builder.getExpireAfterWriteNanos();
+    refreshNanos = builder.getRefreshNanos();
+
+    removalListener = builder.getRemovalListener();
+    removalNotificationQueue = (removalListener == NullListener.INSTANCE)
+        ? LocalCache.<RemovalNotification<K, V>>discardingQueue()
+        : new ConcurrentLinkedQueue<RemovalNotification<K, V>>();
+
+    ticker = builder.getTicker(recordsTime());
+    entryFactory = EntryFactory.getFactory(keyStrength, usesAccessEntries(), usesWriteEntries());
+    globalStatsCounter = builder.getStatsCounterSupplier().get();
+    defaultLoader = loader;
+
+    int initialCapacity = Math.min(builder.getInitialCapacity(), MAXIMUM_CAPACITY);
+    if (evictsBySize() && !customWeigher()) {
+      initialCapacity = Math.min(initialCapacity, (int) maxWeight);
+    }
+
+    // Find power-of-two sizes best matching arguments. Constraints:
+    // (segmentCount <= maxWeight)
+    // && (concurrencyLevel > maxWeight || segmentCount > concurrencyLevel)
+    int segmentShift = 0;
+    int segmentCount = 1;
+    while (segmentCount < concurrencyLevel
+        && (!evictsBySize() || customWeigher() || segmentCount * 2 <= maxWeight)) {
+      ++segmentShift;
+      segmentCount <<= 1;
+    }
+    this.segmentShift = 32 - segmentShift;
+    segmentMask = segmentCount - 1;
+
+    this.segments = newSegmentArray(segmentCount);
+
+    int segmentCapacity = initialCapacity / segmentCount;
+    if (segmentCapacity * segmentCount < initialCapacity) {
+      ++segmentCapacity;
+    }
+
+    int segmentSize = 1;
+    while (segmentSize < segmentCapacity) {
+      segmentSize <<= 1;
+    }
+
+    if (evictsBySize()) {
+      // Ensure sum of segment max weights = overall max weights
+      long maxSegmentWeight = maxWeight / segmentCount + 1;
+      long remainder = maxWeight % segmentCount;
+      for (int i = 0; i < this.segments.length; ++i) {
+        if (i == remainder) {
+          maxSegmentWeight--;
+        }
+        this.segments[i] =
+            createSegment(segmentSize, maxSegmentWeight, builder.getStatsCounterSupplier().get());
+      }
+    } else {
+      for (int i = 0; i < this.segments.length; ++i) {
+        this.segments[i] =
+            createSegment(segmentSize, UNSET_INT, builder.getStatsCounterSupplier().get());
+      }
+    }
+  }
+
+  boolean evictsBySize() {
+    return maxWeight >= 0;
+  }
+
+  boolean customWeigher() {
+    return weigher != OneWeigher.INSTANCE;
+  }
+
+  boolean expires() {
+    return expiresAfterWrite() || expiresAfterAccess();
+  }
+
+  boolean expiresAfterWrite() {
+    return expireAfterWriteNanos > 0;
+  }
+
+  boolean expiresAfterAccess() {
+    return expireAfterAccessNanos > 0;
+  }
+
+  boolean refreshes() {
+    return refreshNanos > 0;
+  }
+
+  boolean usesAccessQueue() {
+    return expiresAfterAccess() || evictsBySize();
+  }
+
+  boolean usesWriteQueue() {
+    return expiresAfterWrite();
+  }
+
+  boolean recordsWrite() {
+    return expiresAfterWrite() || refreshes();
+  }
+
+  boolean recordsAccess() {
+    return expiresAfterAccess();
+  }
+
+  boolean recordsTime() {
+    return recordsWrite() || recordsAccess();
+  }
+
+  boolean usesWriteEntries() {
+    return usesWriteQueue() || recordsWrite();
+  }
+
+  boolean usesAccessEntries() {
+    return usesAccessQueue() || recordsAccess();
+  }
+
+  boolean usesKeyReferences() {
+    return keyStrength != Strength.STRONG;
+  }
+
+  boolean usesValueReferences() {
+    return valueStrength != Strength.STRONG;
+  }
+
+  enum Strength {
+    /*
+     * TODO(kevinb): If we strongly reference the value and aren't loading, we needn't wrap the
+     * value. This could save ~8 bytes per entry.
+     */
+
+    STRONG {
+      @Override
+      <K, V> ValueReference<K, V> referenceValue(
+          Segment<K, V> segment, ReferenceEntry<K, V> entry, V value, int weight) {
+        return (weight == 1)
+            ? new StrongValueReference<K, V>(value)
+            : new WeightedStrongValueReference<K, V>(value, weight);
+      }
+
+      @Override
+      Equivalence<Object> defaultEquivalence() {
+        return Equivalences.equals();
+      }
+    },
+
+    SOFT {
+      @Override
+      <K, V> ValueReference<K, V> referenceValue(
+          Segment<K, V> segment, ReferenceEntry<K, V> entry, V value, int weight) {
+        return (weight == 1)
+            ? new SoftValueReference<K, V>(segment.valueReferenceQueue, value, entry)
+            : new WeightedSoftValueReference<K, V>(
+                segment.valueReferenceQueue, value, entry, weight);
+      }
+
+      @Override
+      Equivalence<Object> defaultEquivalence() {
+        return Equivalences.identity();
+      }
+    },
+
+    WEAK {
+      @Override
+      <K, V> ValueReference<K, V> referenceValue(
+          Segment<K, V> segment, ReferenceEntry<K, V> entry, V value, int weight) {
+        return (weight == 1)
+            ? new WeakValueReference<K, V>(segment.valueReferenceQueue, value, entry)
+            : new WeightedWeakValueReference<K, V>(
+                segment.valueReferenceQueue, value, entry, weight);
+      }
+
+      @Override
+      Equivalence<Object> defaultEquivalence() {
+        return Equivalences.identity();
+      }
+    };
+
+    /**
+     * Creates a reference for the given value according to this value strength.
+     */
+    abstract <K, V> ValueReference<K, V> referenceValue(
+        Segment<K, V> segment, ReferenceEntry<K, V> entry, V value, int weight);
+
+    /**
+     * Returns the default equivalence strategy used to compare and hash keys or values referenced
+     * at this strength. This strategy will be used unless the user explicitly specifies an
+     * alternate strategy.
+     */
+    abstract Equivalence<Object> defaultEquivalence();
+  }
+
+  /**
+   * Creates new entries.
+   */
+  enum EntryFactory {
+    STRONG {
+      @Override
+      <K, V> ReferenceEntry<K, V> newEntry(
+          Segment<K, V> segment, K key, int hash, @Nullable ReferenceEntry<K, V> next) {
+        return new StrongEntry<K, V>(key, hash, next);
+      }
+    },
+    STRONG_ACCESS {
+      @Override
+      <K, V> ReferenceEntry<K, V> newEntry(
+          Segment<K, V> segment, K key, int hash, @Nullable ReferenceEntry<K, V> next) {
+        return new StrongAccessEntry<K, V>(key, hash, next);
+      }
+
+      @Override
+      <K, V> ReferenceEntry<K, V> copyEntry(
+          Segment<K, V> segment, ReferenceEntry<K, V> original, ReferenceEntry<K, V> newNext) {
+        ReferenceEntry<K, V> newEntry = super.copyEntry(segment, original, newNext);
+        copyAccessEntry(original, newEntry);
+        return newEntry;
+      }
+    },
+    STRONG_WRITE {
+      @Override
+      <K, V> ReferenceEntry<K, V> newEntry(
+          Segment<K, V> segment, K key, int hash, @Nullable ReferenceEntry<K, V> next) {
+        return new StrongWriteEntry<K, V>(key, hash, next);
+      }
+
+      @Override
+      <K, V> ReferenceEntry<K, V> copyEntry(
+          Segment<K, V> segment, ReferenceEntry<K, V> original, ReferenceEntry<K, V> newNext) {
+        ReferenceEntry<K, V> newEntry = super.copyEntry(segment, original, newNext);
+        copyWriteEntry(original, newEntry);
+        return newEntry;
+      }
+    },
+    STRONG_ACCESS_WRITE {
+      @Override
+      <K, V> ReferenceEntry<K, V> newEntry(
+          Segment<K, V> segment, K key, int hash, @Nullable ReferenceEntry<K, V> next) {
+        return new StrongAccessWriteEntry<K, V>(key, hash, next);
+      }
+
+      @Override
+      <K, V> ReferenceEntry<K, V> copyEntry(
+          Segment<K, V> segment, ReferenceEntry<K, V> original, ReferenceEntry<K, V> newNext) {
+        ReferenceEntry<K, V> newEntry = super.copyEntry(segment, original, newNext);
+        copyAccessEntry(original, newEntry);
+        copyWriteEntry(original, newEntry);
+        return newEntry;
+      }
+    },
+
+    WEAK {
+      @Override
+      <K, V> ReferenceEntry<K, V> newEntry(
+          Segment<K, V> segment, K key, int hash, @Nullable ReferenceEntry<K, V> next) {
+        return new WeakEntry<K, V>(segment.keyReferenceQueue, key, hash, next);
+      }
+    },
+    WEAK_ACCESS {
+      @Override
+      <K, V> ReferenceEntry<K, V> newEntry(
+          Segment<K, V> segment, K key, int hash, @Nullable ReferenceEntry<K, V> next) {
+        return new WeakAccessEntry<K, V>(segment.keyReferenceQueue, key, hash, next);
+      }
+
+      @Override
+      <K, V> ReferenceEntry<K, V> copyEntry(
+          Segment<K, V> segment, ReferenceEntry<K, V> original, ReferenceEntry<K, V> newNext) {
+        ReferenceEntry<K, V> newEntry = super.copyEntry(segment, original, newNext);
+        copyAccessEntry(original, newEntry);
+        return newEntry;
+      }
+    },
+    WEAK_WRITE {
+      @Override
+      <K, V> ReferenceEntry<K, V> newEntry(
+          Segment<K, V> segment, K key, int hash, @Nullable ReferenceEntry<K, V> next) {
+        return new WeakWriteEntry<K, V>(segment.keyReferenceQueue, key, hash, next);
+      }
+
+      @Override
+      <K, V> ReferenceEntry<K, V> copyEntry(
+          Segment<K, V> segment, ReferenceEntry<K, V> original, ReferenceEntry<K, V> newNext) {
+        ReferenceEntry<K, V> newEntry = super.copyEntry(segment, original, newNext);
+        copyWriteEntry(original, newEntry);
+        return newEntry;
+      }
+    },
+    WEAK_ACCESS_WRITE {
+      @Override
+      <K, V> ReferenceEntry<K, V> newEntry(
+          Segment<K, V> segment, K key, int hash, @Nullable ReferenceEntry<K, V> next) {
+        return new WeakAccessWriteEntry<K, V>(segment.keyReferenceQueue, key, hash, next);
+      }
+
+      @Override
+      <K, V> ReferenceEntry<K, V> copyEntry(
+          Segment<K, V> segment, ReferenceEntry<K, V> original, ReferenceEntry<K, V> newNext) {
+        ReferenceEntry<K, V> newEntry = super.copyEntry(segment, original, newNext);
+        copyAccessEntry(original, newEntry);
+        copyWriteEntry(original, newEntry);
+        return newEntry;
+      }
+    };
+
+    /**
+     * Masks used to compute indices in the following table.
+     */
+    static final int ACCESS_MASK = 1;
+    static final int WRITE_MASK = 2;
+    static final int WEAK_MASK = 4;
+
+    /**
+     * Look-up table for factories.
+     */
+    static final EntryFactory[] factories = {
+      STRONG, STRONG_ACCESS, STRONG_WRITE, STRONG_ACCESS_WRITE,
+      WEAK, WEAK_ACCESS, WEAK_WRITE, WEAK_ACCESS_WRITE,
+    };
+
+    static EntryFactory getFactory(Strength keyStrength, boolean usesAccessQueue,
+        boolean usesWriteQueue) {
+      int flags = ((keyStrength == Strength.WEAK) ? WEAK_MASK : 0)
+          | (usesAccessQueue ? ACCESS_MASK : 0)
+          | (usesWriteQueue ? WRITE_MASK : 0);
+      return factories[flags];
+    }
+
+    /**
+     * Creates a new entry.
+     *
+     * @param segment to create the entry for
+     * @param key of the entry
+     * @param hash of the key
+     * @param next entry in the same bucket
+     */
+    abstract <K, V> ReferenceEntry<K, V> newEntry(
+        Segment<K, V> segment, K key, int hash, @Nullable ReferenceEntry<K, V> next);
+
+    /**
+     * Copies an entry, assigning it a new {@code next} entry.
+     *
+     * @param original the entry to copy
+     * @param newNext entry in the same bucket
+     */
+    @GuardedBy("Segment.this")
+    <K, V> ReferenceEntry<K, V> copyEntry(
+        Segment<K, V> segment, ReferenceEntry<K, V> original, ReferenceEntry<K, V> newNext) {
+      return newEntry(segment, original.getKey(), original.getHash(), newNext);
+    }
+
+    @GuardedBy("Segment.this")
+    <K, V> void copyAccessEntry(ReferenceEntry<K, V> original, ReferenceEntry<K, V> newEntry) {
+      // TODO(fry): when we link values instead of entries this method can go
+      // away, as can connectAccessOrder, nullifyAccessOrder.
+      newEntry.setAccessTime(original.getAccessTime());
+
+      connectAccessOrder(original.getPreviousInAccessQueue(), newEntry);
+      connectAccessOrder(newEntry, original.getNextInAccessQueue());
+
+      nullifyAccessOrder(original);
+    }
+
+    @GuardedBy("Segment.this")
+    <K, V> void copyWriteEntry(ReferenceEntry<K, V> original, ReferenceEntry<K, V> newEntry) {
+      // TODO(fry): when we link values instead of entries this method can go
+      // away, as can connectWriteOrder, nullifyWriteOrder.
+      newEntry.setWriteTime(original.getWriteTime());
+
+      connectWriteOrder(original.getPreviousInWriteQueue(), newEntry);
+      connectWriteOrder(newEntry, original.getNextInWriteQueue());
+
+      nullifyWriteOrder(original);
+    }
+  }
+
+  /**
+   * A reference to a value.
+   */
+  interface ValueReference<K, V> {
+    /**
+     * Returns the value. Does not block or throw exceptions.
+     */
+    @Nullable
+    V get();
+
+    /**
+     * Waits for a value that may still be loading. Unlike get(), this method can block (in the
+     * case of FutureValueReference).
+     *
+     * @throws ExecutionException if the loading thread throws an exception
+     * @throws ExecutionError if the loading thread throws an error
+     */
+    V waitForValue() throws ExecutionException;
+
+    /**
+     * Returns the weight of this entry. This is assumed to be static between calls to setValue.
+     */
+    int getWeight();
+
+    /**
+     * Returns the entry associated with this value reference, or {@code null} if this value
+     * reference is independent of any entry.
+     */
+    @Nullable
+    ReferenceEntry<K, V> getEntry();
+
+    /**
+     * Creates a copy of this reference for the given entry.
+     */
+    ValueReference<K, V> copyFor(ReferenceQueue<V> queue, ReferenceEntry<K, V> entry);
+
+    /**
+     * Notifify pending loads that a new value was set. This is only relevant to loading
+     * value references.
+     */
+    void notifyNewValue(@Nullable V newValue);
+
+    /**
+     * Returns true if a new value is currently loading, regardless of whether or not there is an
+     * existing value. It is assumed that the return value of this method is constant for any given
+     * ValueReference instance.
+     */
+    boolean isLoading();
+
+    /**
+     * Returns true if this reference contains an active value, meaning one that is still considered
+     * present in the cache. Active values consist of live values, which are returned by cache
+     * lookups, and dead values, which have been evicted but awaiting removal. Non-active values
+     * consist strictly of loading values, though during refresh a value may be both active and
+     * loading.
+     */
+    boolean isActive();
+  }
+
+  /**
+   * Placeholder. Indicates that the value hasn't been set yet.
+   */
+  static final ValueReference<Object, Object> UNSET = new ValueReference<Object, Object>() {
+    @Override
+    public Object get() {
+      return null;
+    }
+
+    @Override
+    public int getWeight() {
+      return 0;
+    }
+
+    @Override
+    public ReferenceEntry<Object, Object> getEntry() {
+      return null;
+    }
+
+    @Override
+    public ValueReference<Object, Object> copyFor(
+        ReferenceQueue<Object> queue, ReferenceEntry<Object, Object> entry) {
+      return this;
+    }
+
+    @Override
+    public boolean isLoading() {
+      return false;
+    }
+
+    @Override
+    public boolean isActive() {
+      return false;
+    }
+
+    @Override
+    public Object waitForValue() {
+      return null;
+    }
+
+    @Override
+    public void notifyNewValue(Object newValue) {}
+  };
+
+  /**
+   * Singleton placeholder that indicates a value is being loaded.
+   */
+  @SuppressWarnings("unchecked") // impl never uses a parameter or returns any non-null value
+  static <K, V> ValueReference<K, V> unset() {
+    return (ValueReference<K, V>) UNSET;
+  }
+
+  /**
+   * An entry in a reference map.
+   *
+   * Entries in the map can be in the following states:
+   *
+   * Valid:
+   * - Live: valid key/value are set
+   * - Loading: loading is pending
+   *
+   * Invalid:
+   * - Expired: time expired (key/value may still be set)
+   * - Collected: key/value was partially collected, but not yet cleaned up
+   * - Unset: marked as unset, awaiting cleanup or reuse
+   */
+  interface ReferenceEntry<K, V> {
+    /**
+     * Returns the value reference from this entry.
+     */
+    ValueReference<K, V> getValueReference();
+
+    /**
+     * Sets the value reference for this entry.
+     */
+    void setValueReference(ValueReference<K, V> valueReference);
+
+    /**
+     * Returns the next entry in the chain.
+     */
+    @Nullable
+    ReferenceEntry<K, V> getNext();
+
+    /**
+     * Returns the entry's hash.
+     */
+    int getHash();
+
+    /**
+     * Returns the key for this entry.
+     */
+    @Nullable
+    K getKey();
+
+    /*
+     * Used by entries that use access order. Access entries are maintained in a doubly-linked list.
+     * New entries are added at the tail of the list at write time; stale entries are expired from
+     * the head of the list.
+     */
+
+    /**
+     * Returns the time that this entry was last accessed, in ns.
+     */
+    long getAccessTime();
+
+    /**
+     * Sets the entry access time in ns.
+     */
+    void setAccessTime(long time);
+
+    /**
+     * Returns the next entry in the access queue.
+     */
+    ReferenceEntry<K, V> getNextInAccessQueue();
+
+    /**
+     * Sets the next entry in the access queue.
+     */
+    void setNextInAccessQueue(ReferenceEntry<K, V> next);
+
+    /**
+     * Returns the previous entry in the access queue.
+     */
+    ReferenceEntry<K, V> getPreviousInAccessQueue();
+
+    /**
+     * Sets the previous entry in the access queue.
+     */
+    void setPreviousInAccessQueue(ReferenceEntry<K, V> previous);
+
+    /*
+     * Implemented by entries that use write order. Write entries are maintained in a
+     * doubly-linked list. New entries are added at the tail of the list at write time and stale
+     * entries are expired from the head of the list.
+     */
+
+    /**
+     * Returns the time that this entry was last written, in ns.
+     */
+    long getWriteTime();
+
+    /**
+     * Sets the entry write time in ns.
+     */
+    void setWriteTime(long time);
+
+    /**
+     * Returns the next entry in the write queue.
+     */
+    ReferenceEntry<K, V> getNextInWriteQueue();
+
+    /**
+     * Sets the next entry in the write queue.
+     */
+    void setNextInWriteQueue(ReferenceEntry<K, V> next);
+
+    /**
+     * Returns the previous entry in the write queue.
+     */
+    ReferenceEntry<K, V> getPreviousInWriteQueue();
+
+    /**
+     * Sets the previous entry in the write queue.
+     */
+    void setPreviousInWriteQueue(ReferenceEntry<K, V> previous);
+  }
+
+  private enum NullEntry implements ReferenceEntry<Object, Object> {
+    INSTANCE;
+
+    @Override
+    public ValueReference<Object, Object> getValueReference() {
+      return null;
+    }
+
+    @Override
+    public void setValueReference(ValueReference<Object, Object> valueReference) {}
+
+    @Override
+    public ReferenceEntry<Object, Object> getNext() {
+      return null;
+    }
+
+    @Override
+    public int getHash() {
+      return 0;
+    }
+
+    @Override
+    public Object getKey() {
+      return null;
+    }
+
+    @Override
+    public long getAccessTime() {
+      return 0;
+    }
+
+    @Override
+    public void setAccessTime(long time) {}
+
+    @Override
+    public ReferenceEntry<Object, Object> getNextInAccessQueue() {
+      return this;
+    }
+
+    @Override
+    public void setNextInAccessQueue(ReferenceEntry<Object, Object> next) {}
+
+    @Override
+    public ReferenceEntry<Object, Object> getPreviousInAccessQueue() {
+      return this;
+    }
+
+    @Override
+    public void setPreviousInAccessQueue(ReferenceEntry<Object, Object> previous) {}
+
+    @Override
+    public long getWriteTime() {
+      return 0;
+    }
+
+    @Override
+    public void setWriteTime(long time) {}
+
+    @Override
+    public ReferenceEntry<Object, Object> getNextInWriteQueue() {
+      return this;
+    }
+
+    @Override
+    public void setNextInWriteQueue(ReferenceEntry<Object, Object> next) {}
+
+    @Override
+    public ReferenceEntry<Object, Object> getPreviousInWriteQueue() {
+      return this;
+    }
+
+    @Override
+    public void setPreviousInWriteQueue(ReferenceEntry<Object, Object> previous) {}
+  }
+
+  static abstract class AbstractReferenceEntry<K, V> implements ReferenceEntry<K, V> {
+    @Override
+    public ValueReference<K, V> getValueReference() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void setValueReference(ValueReference<K, V> valueReference) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public ReferenceEntry<K, V> getNext() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public int getHash() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public K getKey() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public long getAccessTime() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void setAccessTime(long time) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public ReferenceEntry<K, V> getNextInAccessQueue() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void setNextInAccessQueue(ReferenceEntry<K, V> next) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public ReferenceEntry<K, V> getPreviousInAccessQueue() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void setPreviousInAccessQueue(ReferenceEntry<K, V> previous) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public long getWriteTime() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void setWriteTime(long time) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public ReferenceEntry<K, V> getNextInWriteQueue() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void setNextInWriteQueue(ReferenceEntry<K, V> next) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public ReferenceEntry<K, V> getPreviousInWriteQueue() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void setPreviousInWriteQueue(ReferenceEntry<K, V> previous) {
+      throw new UnsupportedOperationException();
+    }
+  }
+
+  @SuppressWarnings("unchecked") // impl never uses a parameter or returns any non-null value
+  static <K, V> ReferenceEntry<K, V> nullEntry() {
+    return (ReferenceEntry<K, V>) NullEntry.INSTANCE;
+  }
+
+  static final Queue<? extends Object> DISCARDING_QUEUE = new AbstractQueue<Object>() {
+    @Override
+    public boolean offer(Object o) {
+      return true;
+    }
+
+    @Override
+    public Object peek() {
+      return null;
+    }
+
+    @Override
+    public Object poll() {
+      return null;
+    }
+
+    @Override
+    public int size() {
+      return 0;
+    }
+
+    @Override
+    public Iterator<Object> iterator() {
+      return Iterators.emptyIterator();
+    }
+  };
+
+  /**
+   * Queue that discards all elements.
+   */
+  @SuppressWarnings("unchecked") // impl never uses a parameter or returns any non-null value
+  static <E> Queue<E> discardingQueue() {
+    return (Queue) DISCARDING_QUEUE;
+  }
+
+  /*
+   * Note: All of this duplicate code sucks, but it saves a lot of memory. If only Java had mixins!
+   * To maintain this code, make a change for the strong reference type. Then, cut and paste, and
+   * replace "Strong" with "Soft" or "Weak" within the pasted text. The primary difference is that
+   * strong entries store the key reference directly while soft and weak entries delegate to their
+   * respective superclasses.
+   */
+
+  /**
+   * Used for strongly-referenced keys.
+   */
+  static class StrongEntry<K, V> implements ReferenceEntry<K, V> {
+    final K key;
+
+    StrongEntry(K key, int hash, @Nullable ReferenceEntry<K, V> next) {
+      this.key = key;
+      this.hash = hash;
+      this.next = next;
+    }
+
+    @Override
+    public K getKey() {
+      return this.key;
+    }
+
+    // null access
+
+    @Override
+    public long getAccessTime() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void setAccessTime(long time) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public ReferenceEntry<K, V> getNextInAccessQueue() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void setNextInAccessQueue(ReferenceEntry<K, V> next) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public ReferenceEntry<K, V> getPreviousInAccessQueue() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void setPreviousInAccessQueue(ReferenceEntry<K, V> previous) {
+      throw new UnsupportedOperationException();
+    }
+
+    // null write
+
+    @Override
+    public long getWriteTime() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void setWriteTime(long time) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public ReferenceEntry<K, V> getNextInWriteQueue() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void setNextInWriteQueue(ReferenceEntry<K, V> next) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public ReferenceEntry<K, V> getPreviousInWriteQueue() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void setPreviousInWriteQueue(ReferenceEntry<K, V> previous) {
+      throw new UnsupportedOperationException();
+    }
+
+    // The code below is exactly the same for each entry type.
+
+    final int hash;
+    final ReferenceEntry<K, V> next;
+    volatile ValueReference<K, V> valueReference = unset();
+
+    @Override
+    public ValueReference<K, V> getValueReference() {
+      return valueReference;
+    }
+
+    @Override
+    public void setValueReference(ValueReference<K, V> valueReference) {
+      this.valueReference = valueReference;
+    }
+
+    @Override
+    public int getHash() {
+      return hash;
+    }
+
+    @Override
+    public ReferenceEntry<K, V> getNext() {
+      return next;
+    }
+  }
+
+  static final class StrongAccessEntry<K, V> extends StrongEntry<K, V>
+      implements ReferenceEntry<K, V> {
+    StrongAccessEntry(K key, int hash, @Nullable ReferenceEntry<K, V> next) {
+      super(key, hash, next);
+    }
+
+    // The code below is exactly the same for each access entry type.
+
+    volatile long accessTime = Long.MAX_VALUE;
+
+    @Override
+    public long getAccessTime() {
+      return accessTime;
+    }
+
+    @Override
+    public void setAccessTime(long time) {
+      this.accessTime = time;
+    }
+
+    @GuardedBy("Segment.this")
+    ReferenceEntry<K, V> nextAccess = nullEntry();
+
+    @Override
+    public ReferenceEntry<K, V> getNextInAccessQueue() {
+      return nextAccess;
+    }
+
+    @Override
+    public void setNextInAccessQueue(ReferenceEntry<K, V> next) {
+      this.nextAccess = next;
+    }
+
+    @GuardedBy("Segment.this")
+    ReferenceEntry<K, V> previousAccess = nullEntry();
+
+    @Override
+    public ReferenceEntry<K, V> getPreviousInAccessQueue() {
+      return previousAccess;
+    }
+
+    @Override
+    public void setPreviousInAccessQueue(ReferenceEntry<K, V> previous) {
+      this.previousAccess = previous;
+    }
+  }
+
+  static final class StrongWriteEntry<K, V>
+      extends StrongEntry<K, V> implements ReferenceEntry<K, V> {
+    StrongWriteEntry(K key, int hash, @Nullable ReferenceEntry<K, V> next) {
+      super(key, hash, next);
+    }
+
+    // The code below is exactly the same for each write entry type.
+
+    volatile long writeTime = Long.MAX_VALUE;
+
+    @Override
+    public long getWriteTime() {
+      return writeTime;
+    }
+
+    @Override
+    public void setWriteTime(long time) {
+      this.writeTime = time;
+    }
+
+    @GuardedBy("Segment.this")
+    ReferenceEntry<K, V> nextWrite = nullEntry();
+
+    @Override
+    public ReferenceEntry<K, V> getNextInWriteQueue() {
+      return nextWrite;
+    }
+
+    @Override
+    public void setNextInWriteQueue(ReferenceEntry<K, V> next) {
+      this.nextWrite = next;
+    }
+
+    @GuardedBy("Segment.this")
+    ReferenceEntry<K, V> previousWrite = nullEntry();
+
+    @Override
+    public ReferenceEntry<K, V> getPreviousInWriteQueue() {
+      return previousWrite;
+    }
+
+    @Override
+    public void setPreviousInWriteQueue(ReferenceEntry<K, V> previous) {
+      this.previousWrite = previous;
+    }
+  }
+
+  static final class StrongAccessWriteEntry<K, V>
+      extends StrongEntry<K, V> implements ReferenceEntry<K, V> {
+    StrongAccessWriteEntry(K key, int hash, @Nullable ReferenceEntry<K, V> next) {
+      super(key, hash, next);
+    }
+
+    // The code below is exactly the same for each access entry type.
+
+    volatile long accessTime = Long.MAX_VALUE;
+
+    @Override
+    public long getAccessTime() {
+      return accessTime;
+    }
+
+    @Override
+    public void setAccessTime(long time) {
+      this.accessTime = time;
+    }
+
+    @GuardedBy("Segment.this")
+    ReferenceEntry<K, V> nextAccess = nullEntry();
+
+    @Override
+    public ReferenceEntry<K, V> getNextInAccessQueue() {
+      return nextAccess;
+    }
+
+    @Override
+    public void setNextInAccessQueue(ReferenceEntry<K, V> next) {
+      this.nextAccess = next;
+    }
+
+    @GuardedBy("Segment.this")
+    ReferenceEntry<K, V> previousAccess = nullEntry();
+
+    @Override
+    public ReferenceEntry<K, V> getPreviousInAccessQueue() {
+      return previousAccess;
+    }
+
+    @Override
+    public void setPreviousInAccessQueue(ReferenceEntry<K, V> previous) {
+      this.previousAccess = previous;
+    }
+
+    // The code below is exactly the same for each write entry type.
+
+    volatile long writeTime = Long.MAX_VALUE;
+
+    @Override
+    public long getWriteTime() {
+      return writeTime;
+    }
+
+    @Override
+    public void setWriteTime(long time) {
+      this.writeTime = time;
+    }
+
+    @GuardedBy("Segment.this")
+    ReferenceEntry<K, V> nextWrite = nullEntry();
+
+    @Override
+    public ReferenceEntry<K, V> getNextInWriteQueue() {
+      return nextWrite;
+    }
+
+    @Override
+    public void setNextInWriteQueue(ReferenceEntry<K, V> next) {
+      this.nextWrite = next;
+    }
+
+    @GuardedBy("Segment.this")
+    ReferenceEntry<K, V> previousWrite = nullEntry();
+
+    @Override
+    public ReferenceEntry<K, V> getPreviousInWriteQueue() {
+      return previousWrite;
+    }
+
+    @Override
+    public void setPreviousInWriteQueue(ReferenceEntry<K, V> previous) {
+      this.previousWrite = previous;
+    }
+  }
+
+  /**
+   * Used for weakly-referenced keys.
+   */
+  static class WeakEntry<K, V> extends WeakReference<K> implements ReferenceEntry<K, V> {
+    WeakEntry(ReferenceQueue<K> queue, K key, int hash, @Nullable ReferenceEntry<K, V> next) {
+      super(key, queue);
+      this.hash = hash;
+      this.next = next;
+    }
+
+    @Override
+    public K getKey() {
+      return get();
+    }
+
+    // null access
+
+    @Override
+    public long getAccessTime() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void setAccessTime(long time) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public ReferenceEntry<K, V> getNextInAccessQueue() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void setNextInAccessQueue(ReferenceEntry<K, V> next) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public ReferenceEntry<K, V> getPreviousInAccessQueue() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void setPreviousInAccessQueue(ReferenceEntry<K, V> previous) {
+      throw new UnsupportedOperationException();
+    }
+
+    // null write
+
+    @Override
+    public long getWriteTime() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void setWriteTime(long time) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public ReferenceEntry<K, V> getNextInWriteQueue() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void setNextInWriteQueue(ReferenceEntry<K, V> next) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public ReferenceEntry<K, V> getPreviousInWriteQueue() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void setPreviousInWriteQueue(ReferenceEntry<K, V> previous) {
+      throw new UnsupportedOperationException();
+    }
+
+    // The code below is exactly the same for each entry type.
+
+    final int hash;
+    final ReferenceEntry<K, V> next;
+    volatile ValueReference<K, V> valueReference = unset();
+
+    @Override
+    public ValueReference<K, V> getValueReference() {
+      return valueReference;
+    }
+
+    @Override
+    public void setValueReference(ValueReference<K, V> valueReference) {
+      this.valueReference = valueReference;
+    }
+
+    @Override
+    public int getHash() {
+      return hash;
+    }
+
+    @Override
+    public ReferenceEntry<K, V> getNext() {
+      return next;
+    }
+  }
+
+  static final class WeakAccessEntry<K, V>
+      extends WeakEntry<K, V> implements ReferenceEntry<K, V> {
+    WeakAccessEntry(
+        ReferenceQueue<K> queue, K key, int hash, @Nullable ReferenceEntry<K, V> next) {
+      super(queue, key, hash, next);
+    }
+
+    // The code below is exactly the same for each access entry type.
+
+    volatile long accessTime = Long.MAX_VALUE;
+
+    @Override
+    public long getAccessTime() {
+      return accessTime;
+    }
+
+    @Override
+    public void setAccessTime(long time) {
+      this.accessTime = time;
+    }
+
+    @GuardedBy("Segment.this")
+    ReferenceEntry<K, V> nextAccess = nullEntry();
+
+    @Override
+    public ReferenceEntry<K, V> getNextInAccessQueue() {
+      return nextAccess;
+    }
+
+    @Override
+    public void setNextInAccessQueue(ReferenceEntry<K, V> next) {
+      this.nextAccess = next;
+    }
+
+    @GuardedBy("Segment.this")
+    ReferenceEntry<K, V> previousAccess = nullEntry();
+
+    @Override
+    public ReferenceEntry<K, V> getPreviousInAccessQueue() {
+      return previousAccess;
+    }
+
+    @Override
+    public void setPreviousInAccessQueue(ReferenceEntry<K, V> previous) {
+      this.previousAccess = previous;
+    }
+  }
+
+  static final class WeakWriteEntry<K, V>
+      extends WeakEntry<K, V> implements ReferenceEntry<K, V> {
+    WeakWriteEntry(
+        ReferenceQueue<K> queue, K key, int hash, @Nullable ReferenceEntry<K, V> next) {
+      super(queue, key, hash, next);
+    }
+
+    // The code below is exactly the same for each write entry type.
+
+    volatile long writeTime = Long.MAX_VALUE;
+
+    @Override
+    public long getWriteTime() {
+      return writeTime;
+    }
+
+    @Override
+    public void setWriteTime(long time) {
+      this.writeTime = time;
+    }
+
+    @GuardedBy("Segment.this")
+    ReferenceEntry<K, V> nextWrite = nullEntry();
+
+    @Override
+    public ReferenceEntry<K, V> getNextInWriteQueue() {
+      return nextWrite;
+    }
+
+    @Override
+    public void setNextInWriteQueue(ReferenceEntry<K, V> next) {
+      this.nextWrite = next;
+    }
+
+    @GuardedBy("Segment.this")
+    ReferenceEntry<K, V> previousWrite = nullEntry();
+
+    @Override
+    public ReferenceEntry<K, V> getPreviousInWriteQueue() {
+      return previousWrite;
+    }
+
+    @Override
+    public void setPreviousInWriteQueue(ReferenceEntry<K, V> previous) {
+      this.previousWrite = previous;
+    }
+  }
+
+  static final class WeakAccessWriteEntry<K, V>
+      extends WeakEntry<K, V> implements ReferenceEntry<K, V> {
+    WeakAccessWriteEntry(
+        ReferenceQueue<K> queue, K key, int hash, @Nullable ReferenceEntry<K, V> next) {
+      super(queue, key, hash, next);
+    }
+
+    // The code below is exactly the same for each access entry type.
+
+    volatile long accessTime = Long.MAX_VALUE;
+
+    @Override
+    public long getAccessTime() {
+      return accessTime;
+    }
+
+    @Override
+    public void setAccessTime(long time) {
+      this.accessTime = time;
+    }
+
+    @GuardedBy("Segment.this")
+    ReferenceEntry<K, V> nextAccess = nullEntry();
+
+    @Override
+    public ReferenceEntry<K, V> getNextInAccessQueue() {
+      return nextAccess;
+    }
+
+    @Override
+    public void setNextInAccessQueue(ReferenceEntry<K, V> next) {
+      this.nextAccess = next;
+    }
+
+    @GuardedBy("Segment.this")
+    ReferenceEntry<K, V> previousAccess = nullEntry();
+
+    @Override
+    public ReferenceEntry<K, V> getPreviousInAccessQueue() {
+      return previousAccess;
+    }
+
+    @Override
+    public void setPreviousInAccessQueue(ReferenceEntry<K, V> previous) {
+      this.previousAccess = previous;
+    }
+
+    // The code below is exactly the same for each write entry type.
+
+    volatile long writeTime = Long.MAX_VALUE;
+
+    @Override
+    public long getWriteTime() {
+      return writeTime;
+    }
+
+    @Override
+    public void setWriteTime(long time) {
+      this.writeTime = time;
+    }
+
+    @GuardedBy("Segment.this")
+    ReferenceEntry<K, V> nextWrite = nullEntry();
+
+    @Override
+    public ReferenceEntry<K, V> getNextInWriteQueue() {
+      return nextWrite;
+    }
+
+    @Override
+    public void setNextInWriteQueue(ReferenceEntry<K, V> next) {
+      this.nextWrite = next;
+    }
+
+    @GuardedBy("Segment.this")
+    ReferenceEntry<K, V> previousWrite = nullEntry();
+
+    @Override
+    public ReferenceEntry<K, V> getPreviousInWriteQueue() {
+      return previousWrite;
+    }
+
+    @Override
+    public void setPreviousInWriteQueue(ReferenceEntry<K, V> previous) {
+      this.previousWrite = previous;
+    }
+  }
+
+  /**
+   * References a weak value.
+   */
+  static class WeakValueReference<K, V>
+      extends WeakReference<V> implements ValueReference<K, V> {
+    final ReferenceEntry<K, V> entry;
+
+    WeakValueReference(ReferenceQueue<V> queue, V referent, ReferenceEntry<K, V> entry) {
+      super(referent, queue);
+      this.entry = entry;
+    }
+
+    @Override
+    public int getWeight() {
+      return 1;
+    }
+
+    @Override
+    public ReferenceEntry<K, V> getEntry() {
+      return entry;
+    }
+
+    @Override
+    public void notifyNewValue(V newValue) {}
+
+    @Override
+    public ValueReference<K, V> copyFor(
+        ReferenceQueue<V> queue, ReferenceEntry<K, V> entry) {
+      return new WeakValueReference<K, V>(queue, get(), entry);
+    }
+
+    @Override
+    public boolean isLoading() {
+      return false;
+    }
+
+    @Override
+    public boolean isActive() {
+      return true;
+    }
+
+    @Override
+    public V waitForValue() {
+      return get();
+    }
+  }
+
+  /**
+   * References a soft value.
+   */
+  static class SoftValueReference<K, V>
+      extends SoftReference<V> implements ValueReference<K, V> {
+    final ReferenceEntry<K, V> entry;
+
+    SoftValueReference(ReferenceQueue<V> queue, V referent, ReferenceEntry<K, V> entry) {
+      super(referent, queue);
+      this.entry = entry;
+    }
+
+    @Override
+    public int getWeight() {
+      return 1;
+    }
+
+    @Override
+    public ReferenceEntry<K, V> getEntry() {
+      return entry;
+    }
+
+    @Override
+    public void notifyNewValue(V newValue) {}
+
+    @Override
+    public ValueReference<K, V> copyFor(ReferenceQueue<V> queue, ReferenceEntry<K, V> entry) {
+      return new SoftValueReference<K, V>(queue, get(), entry);
+    }
+
+    @Override
+    public boolean isLoading() {
+      return false;
+    }
+
+    @Override
+    public boolean isActive() {
+      return true;
+    }
+
+    @Override
+    public V waitForValue() {
+      return get();
+    }
+  }
+
+  /**
+   * References a strong value.
+   */
+  static class StrongValueReference<K, V> implements ValueReference<K, V> {
+    final V referent;
+
+    StrongValueReference(V referent) {
+      this.referent = referent;
+    }
+
+    @Override
+    public V get() {
+      return referent;
+    }
+
+    @Override
+    public int getWeight() {
+      return 1;
+    }
+
+    @Override
+    public ReferenceEntry<K, V> getEntry() {
+      return null;
+    }
+
+    @Override
+    public ValueReference<K, V> copyFor(ReferenceQueue<V> queue, ReferenceEntry<K, V> entry) {
+      return this;
+    }
+
+    @Override
+    public boolean isLoading() {
+      return false;
+    }
+
+    @Override
+    public boolean isActive() {
+      return true;
+    }
+
+    @Override
+    public V waitForValue() {
+      return get();
+    }
+
+    @Override
+    public void notifyNewValue(V newValue) {}
+  }
+
+  /**
+   * References a weak value.
+   */
+  static final class WeightedWeakValueReference<K, V> extends WeakValueReference<K, V> {
+    final int weight;
+
+    WeightedWeakValueReference(ReferenceQueue<V> queue, V referent, ReferenceEntry<K, V> entry,
+        int weight) {
+      super(queue, referent, entry);
+      this.weight = weight;
+    }
+
+    @Override
+    public int getWeight() {
+      return weight;
+    }
+
+    @Override
+    public ValueReference<K, V> copyFor(
+        ReferenceQueue<V> queue, ReferenceEntry<K, V> entry) {
+      return new WeightedWeakValueReference<K, V>(queue, get(), entry, weight);
+    }
+  }
+
+  /**
+   * References a soft value.
+   */
+  static final class WeightedSoftValueReference<K, V> extends SoftValueReference<K, V> {
+    final int weight;
+
+    WeightedSoftValueReference(ReferenceQueue<V> queue, V referent, ReferenceEntry<K, V> entry,
+        int weight) {
+      super(queue, referent, entry);
+      this.weight = weight;
+    }
+
+    @Override
+    public int getWeight() {
+      return weight;
+    }
+    @Override
+    public ValueReference<K, V> copyFor(ReferenceQueue<V> queue, ReferenceEntry<K, V> entry) {
+      return new WeightedSoftValueReference<K, V>(queue, get(), entry, weight);
+    }
+
+  }
+
+  /**
+   * References a strong value.
+   */
+  static final class WeightedStrongValueReference<K, V> extends StrongValueReference<K, V> {
+    final int weight;
+
+    WeightedStrongValueReference(V referent, int weight) {
+      super(referent);
+      this.weight = weight;
+    }
+
+    @Override
+    public int getWeight() {
+      return weight;
+    }
+  }
+
+  /**
+   * Applies a supplemental hash function to a given hash code, which defends against poor quality
+   * hash functions. This is critical when the concurrent hash map uses power-of-two length hash
+   * tables, that otherwise encounter collisions for hash codes that do not differ in lower or
+   * upper bits.
+   *
+   * @param h hash code
+   */
+  static int rehash(int h) {
+    // Spread bits to regularize both segment and index locations,
+    // using variant of single-word Wang/Jenkins hash.
+    // TODO(kevinb): use Hashing/move this to Hashing?
+    h += (h << 15) ^ 0xffffcd7d;
+    h ^= (h >>> 10);
+    h += (h << 3);
+    h ^= (h >>> 6);
+    h += (h << 2) + (h << 14);
+    return h ^ (h >>> 16);
+  }
+
+  /**
+   * This method is a convenience for testing. Code should call {@link Segment#newEntry} directly.
+   */
+  @GuardedBy("Segment.this")
+  @VisibleForTesting
+  ReferenceEntry<K, V> newEntry(K key, int hash, @Nullable ReferenceEntry<K, V> next) {
+    return segmentFor(hash).newEntry(key, hash, next);
+  }
+
+  /**
+   * This method is a convenience for testing. Code should call {@link Segment#copyEntry} directly.
+   */
+  @GuardedBy("Segment.this")
+  @VisibleForTesting
+  ReferenceEntry<K, V> copyEntry(ReferenceEntry<K, V> original, ReferenceEntry<K, V> newNext) {
+    int hash = original.getHash();
+    return segmentFor(hash).copyEntry(original, newNext);
+  }
+
+  /**
+   * This method is a convenience for testing. Code should call {@link Segment#setValue} instead.
+   */
+  @GuardedBy("Segment.this")
+  @VisibleForTesting
+  ValueReference<K, V> newValueReference(ReferenceEntry<K, V> entry, V value, int weight) {
+    int hash = entry.getHash();
+    return valueStrength.referenceValue(segmentFor(hash), entry, value, weight);
+  }
+
+  int hash(Object key) {
+    int h = keyEquivalence.hash(key);
+    return rehash(h);
+  }
+
+  void reclaimValue(ValueReference<K, V> valueReference) {
+    ReferenceEntry<K, V> entry = valueReference.getEntry();
+    int hash = entry.getHash();
+    segmentFor(hash).reclaimValue(entry.getKey(), hash, valueReference);
+  }
+
+  void reclaimKey(ReferenceEntry<K, V> entry) {
+    int hash = entry.getHash();
+    segmentFor(hash).reclaimKey(entry, hash);
+  }
+
+  /**
+   * This method is a convenience for testing. Code should call {@link Segment#getLiveValue}
+   * instead.
+   */
+  @VisibleForTesting
+  boolean isLive(ReferenceEntry<K, V> entry, long now) {
+    return segmentFor(entry.getHash()).getLiveValue(entry, now) != null;
+  }
+
+  /**
+   * Returns the segment that should be used for a key with the given hash.
+   *
+   * @param hash the hash code for the key
+   * @return the segment
+   */
+  Segment<K, V> segmentFor(int hash) {
+    // TODO(fry): Lazily create segments?
+    return segments[(hash >>> segmentShift) & segmentMask];
+  }
+
+  Segment<K, V> createSegment(
+      int initialCapacity, long maxSegmentWeight, StatsCounter statsCounter) {
+    return new Segment<K, V>(this, initialCapacity, maxSegmentWeight, statsCounter);
+  }
+
+  /**
+   * Gets the value from an entry. Returns null if the entry is invalid, partially-collected,
+   * loading, or expired. Unlike {@link Segment#getLiveValue} this method does not attempt to
+   * cleanup stale entries. As such it should only be called outside of a segment context, such as
+   * during iteration.
+   */
+  @Nullable
+  V getLiveValue(ReferenceEntry<K, V> entry, long now) {
+    if (entry.getKey() == null) {
+      return null;
+    }
+    V value = entry.getValueReference().get();
+    if (value == null) {
+      return null;
+    }
+
+    if (isExpired(entry, now)) {
+      return null;
+    }
+    return value;
+  }
+
+  // expiration
+
+  /**
+   * Returns true if the entry has expired.
+   */
+  boolean isExpired(ReferenceEntry<K, V> entry, long now) {
+    if (expiresAfterAccess()
+        && (now - entry.getAccessTime() > expireAfterAccessNanos)) {
+      return true;
+    }
+    if (expiresAfterWrite()
+        && (now - entry.getWriteTime() > expireAfterWriteNanos)) {
+      return true;
+    }
+    return false;
+  }
+
+  // queues
+
+  @GuardedBy("Segment.this")
+  static <K, V> void connectAccessOrder(ReferenceEntry<K, V> previous, ReferenceEntry<K, V> next) {
+    previous.setNextInAccessQueue(next);
+    next.setPreviousInAccessQueue(previous);
+  }
+
+  @GuardedBy("Segment.this")
+  static <K, V> void nullifyAccessOrder(ReferenceEntry<K, V> nulled) {
+    ReferenceEntry<K, V> nullEntry = nullEntry();
+    nulled.setNextInAccessQueue(nullEntry);
+    nulled.setPreviousInAccessQueue(nullEntry);
+  }
+
+  @GuardedBy("Segment.this")
+  static <K, V> void connectWriteOrder(ReferenceEntry<K, V> previous, ReferenceEntry<K, V> next) {
+    previous.setNextInWriteQueue(next);
+    next.setPreviousInWriteQueue(previous);
+  }
+
+  @GuardedBy("Segment.this")
+  static <K, V> void nullifyWriteOrder(ReferenceEntry<K, V> nulled) {
+    ReferenceEntry<K, V> nullEntry = nullEntry();
+    nulled.setNextInWriteQueue(nullEntry);
+    nulled.setPreviousInWriteQueue(nullEntry);
+  }
+
+  /**
+   * Notifies listeners that an entry has been automatically removed due to expiration, eviction,
+   * or eligibility for garbage collection. This should be called every time expireEntries or
+   * evictEntry is called (once the lock is released).
+   */
+  void processPendingNotifications() {
+    RemovalNotification<K, V> notification;
+    while ((notification = removalNotificationQueue.poll()) != null) {
+      try {
+        removalListener.onRemoval(notification);
+      } catch (Throwable e) {
+        logger.log(Level.WARNING, "Exception thrown by removal listener", e);
+      }
+    }
+  }
+
+  @SuppressWarnings("unchecked")
+  final Segment<K, V>[] newSegmentArray(int ssize) {
+    return new Segment[ssize];
+  }
+
+  // Inner Classes
+
+  /**
+   * Segments are specialized versions of hash tables. This subclass inherits from ReentrantLock
+   * opportunistically, just to simplify some locking and avoid separate construction.
+   */
+  @SuppressWarnings("serial") // This class is never serialized.
+  static class Segment<K, V> extends ReentrantLock {
+
+    /*
+     * TODO(fry): Consider copying variables (like evictsBySize) from outer class into this class.
+     * It will require more memory but will reduce indirection.
+     */
+
+    /*
+     * Segments maintain a table of entry lists that are ALWAYS kept in a consistent state, so can
+     * be read without locking. Next fields of nodes are immutable (final). All list additions are
+     * performed at the front of each bin. This makes it easy to check changes, and also fast to
+     * traverse. When nodes would otherwise be changed, new nodes are created to replace them. This
+     * works well for hash tables since the bin lists tend to be short. (The average length is less
+     * than two.)
+     *
+     * Read operations can thus proceed without locking, but rely on selected uses of volatiles to
+     * ensure that completed write operations performed by other threads are noticed. For most
+     * purposes, the "count" field, tracking the number of elements, serves as that volatile
+     * variable ensuring visibility. This is convenient because this field needs to be read in many
+     * read operations anyway:
+     *
+     * - All (unsynchronized) read operations must first read the "count" field, and should not
+     * look at table entries if it is 0.
+     *
+     * - All (synchronized) write operations should write to the "count" field after structurally
+     * changing any bin. The operations must not take any action that could even momentarily
+     * cause a concurrent read operation to see inconsistent data. This is made easier by the
+     * nature of the read operations in Map. For example, no operation can reveal that the table
+     * has grown but the threshold has not yet been updated, so there are no atomicity requirements
+     * for this with respect to reads.
+     *
+     * As a guide, all critical volatile reads and writes to the count field are marked in code
+     * comments.
+     */
+
+    final LocalCache<K, V> map;
+
+    /**
+     * The number of live elements in this segment's region.
+     */
+    volatile int count;
+
+    /**
+     * The weight of the live elements in this segment's region.
+     */
+    @GuardedBy("Segment.this")
+    int totalWeight;
+
+    /**
+     * Number of updates that alter the size of the table. This is used during bulk-read methods to
+     * make sure they see a consistent snapshot: If modCounts change during a traversal of segments
+     * loading size or checking containsValue, then we might have an inconsistent view of state
+     * so (usually) must retry.
+     */
+    int modCount;
+
+    /**
+     * The table is expanded when its size exceeds this threshold. (The value of this field is
+     * always {@code (int)(capacity * 0.75)}.)
+     */
+    int threshold;
+
+    /**
+     * The per-segment table.
+     */
+    volatile AtomicReferenceArray<ReferenceEntry<K, V>> table;
+
+    /**
+     * The maximum weight of this segment. UNSET_INT if there is no maximum.
+     */
+    final long maxSegmentWeight;
+
+    /**
+     * The key reference queue contains entries whose keys have been garbage collected, and which
+     * need to be cleaned up internally.
+     */
+    final ReferenceQueue<K> keyReferenceQueue;
+
+    /**
+     * The value reference queue contains value references whose values have been garbage collected,
+     * and which need to be cleaned up internally.
+     */
+    final ReferenceQueue<V> valueReferenceQueue;
+
+    /**
+     * The recency queue is used to record which entries were accessed for updating the access
+     * list's ordering. It is drained as a batch operation when either the DRAIN_THRESHOLD is
+     * crossed or a write occurs on the segment.
+     */
+    final Queue<ReferenceEntry<K, V>> recencyQueue;
+
+    /**
+     * A counter of the number of reads since the last write, used to drain queues on a small
+     * fraction of read operations.
+     */
+    final AtomicInteger readCount = new AtomicInteger();
+
+    /**
+     * A queue of elements currently in the map, ordered by write time. Elements are added to the
+     * tail of the queue on write.
+     */
+    @GuardedBy("Segment.this")
+    final Queue<ReferenceEntry<K, V>> writeQueue;
+
+    /**
+     * A queue of elements currently in the map, ordered by access time. Elements are added to the
+     * tail of the queue on access (note that writes count as accesses).
+     */
+    @GuardedBy("Segment.this")
+    final Queue<ReferenceEntry<K, V>> accessQueue;
+
+    /** Accumulates cache statistics. */
+    final StatsCounter statsCounter;
+
+    Segment(LocalCache<K, V> map, int initialCapacity, long maxSegmentWeight,
+        StatsCounter statsCounter) {
+      this.map = map;
+      this.maxSegmentWeight = maxSegmentWeight;
+      this.statsCounter = statsCounter;
+      initTable(newEntryArray(initialCapacity));
+
+      keyReferenceQueue = map.usesKeyReferences()
+           ? new ReferenceQueue<K>() : null;
+
+      valueReferenceQueue = map.usesValueReferences()
+           ? new ReferenceQueue<V>() : null;
+
+      recencyQueue = map.usesAccessQueue()
+          ? new ConcurrentLinkedQueue<ReferenceEntry<K, V>>()
+          : LocalCache.<ReferenceEntry<K, V>>discardingQueue();
+
+      writeQueue = map.usesWriteQueue()
+          ? new WriteQueue<K, V>()
+          : LocalCache.<ReferenceEntry<K, V>>discardingQueue();
+
+      accessQueue = map.usesAccessQueue()
+          ? new AccessQueue<K, V>()
+          : LocalCache.<ReferenceEntry<K, V>>discardingQueue();
+    }
+
+    AtomicReferenceArray<ReferenceEntry<K, V>> newEntryArray(int size) {
+      return new AtomicReferenceArray<ReferenceEntry<K, V>>(size);
+    }
+
+    void initTable(AtomicReferenceArray<ReferenceEntry<K, V>> newTable) {
+      this.threshold = newTable.length() * 3 / 4; // 0.75
+      if (!map.customWeigher() && this.threshold == maxSegmentWeight) {
+        // prevent spurious expansion before eviction
+        this.threshold++;
+      }
+      this.table = newTable;
+    }
+
+    @GuardedBy("Segment.this")
+    ReferenceEntry<K, V> newEntry(K key, int hash, @Nullable ReferenceEntry<K, V> next) {
+      return map.entryFactory.newEntry(this, key, hash, next);
+    }
+
+    @GuardedBy("Segment.this")
+    ReferenceEntry<K, V> copyEntry(ReferenceEntry<K, V> original, ReferenceEntry<K, V> newNext) {
+      ValueReference<K, V> valueReference = original.getValueReference();
+      ReferenceEntry<K, V> newEntry = map.entryFactory.copyEntry(this, original, newNext);
+      newEntry.setValueReference(valueReference.copyFor(this.valueReferenceQueue, newEntry));
+      return newEntry;
+    }
+
+    /**
+     * Sets a new value of an entry. Adds newly created entries at the end of the access queue.
+     */
+    @GuardedBy("Segment.this")
+    void setValue(ReferenceEntry<K, V> entry, K key, V value, long now) {
+      ValueReference<K, V> previous = entry.getValueReference();
+      int weight = map.weigher.weigh(key, value);
+      checkState(weight >= 0, "Weights must be non-negative");
+
+      ValueReference<K, V> valueReference =
+          map.valueStrength.referenceValue(this, entry, value, weight);
+      entry.setValueReference(valueReference);
+      recordWrite(entry, weight, now);
+      previous.notifyNewValue(value);
+    }
+
+    // loading
+
+    V get(K key, int hash, CacheLoader<? super K, V> loader) throws ExecutionException {
+      try {
+        if (count != 0) { // read-volatile
+          // don't call getLiveEntry, which would ignore loading values
+          ReferenceEntry<K, V> e = getEntry(key, hash);
+          if (e != null) {
+            long now = map.ticker.read();
+            V value = getLiveValue(e, now);
+            if (value != null) {
+              recordRead(e, now);
+              statsCounter.recordHits(1);
+              return scheduleRefresh(e, key, hash, value, now, loader);
+            }
+            ValueReference<K, V> valueReference = e.getValueReference();
+            if (valueReference.isLoading()) {
+              return waitForLoadingValue(e, key, valueReference);
+            }
+          }
+        }
+
+        // at this point e is either null or expired;
+        return lockedGetOrLoad(key, hash, loader);
+      } catch (ExecutionException ee) {
+        Throwable cause = ee.getCause();
+        if (cause instanceof Error) {
+          throw new ExecutionError((Error) cause);
+        } else if (cause instanceof RuntimeException) {
+          throw new UncheckedExecutionException(cause);
+        }
+        throw ee;
+      } finally {
+        postReadCleanup();
+      }
+    }
+
+    V lockedGetOrLoad(K key, int hash, CacheLoader<? super K, V> loader)
+        throws ExecutionException {
+      ReferenceEntry<K, V> e;
+      ValueReference<K, V> valueReference = null;
+      LoadingValueReference<K, V> loadingValueReference = null;
+      boolean createNewEntry = true;
+
+      lock();
+      try {
+        // re-read ticker once inside the lock
+        long now = map.ticker.read();
+        preWriteCleanup(now);
+
+        int newCount = this.count - 1;
+        AtomicReferenceArray<ReferenceEntry<K, V>> table = this.table;
+        int index = hash & (table.length() - 1);
+        ReferenceEntry<K, V> first = table.get(index);
+
+        for (e = first; e != null; e = e.getNext()) {
+          K entryKey = e.getKey();
+          if (e.getHash() == hash && entryKey != null
+              && map.keyEquivalence.equivalent(key, entryKey)) {
+            valueReference = e.getValueReference();
+            if (valueReference.isLoading()) {
+              createNewEntry = false;
+            } else {
+              V value = valueReference.get();
+              if (value == null) {
+                enqueueNotification(entryKey, hash, valueReference, RemovalCause.COLLECTED);
+              } else if (map.isExpired(e, now)) {
+                // This is a duplicate check, as preWriteCleanup already purged expired
+                // entries, but let's accomodate an incorrect expiration queue.
+                enqueueNotification(entryKey, hash, valueReference, RemovalCause.EXPIRED);
+              } else {
+                recordLockedRead(e, now);
+                statsCounter.recordHits(1);
+                // we were concurrent with loading; don't consider refresh
+                return value;
+              }
+
+              // immediately reuse invalid entries
+              writeQueue.remove(e);
+              accessQueue.remove(e);
+              this.count = newCount; // write-volatile
+            }
+            break;
+          }
+        }
+
+        if (createNewEntry) {
+          loadingValueReference = new LoadingValueReference<K, V>();
+
+          if (e == null) {
+            e = newEntry(key, hash, first);
+            e.setValueReference(loadingValueReference);
+            table.set(index, e);
+          } else {
+            e.setValueReference(loadingValueReference);
+          }
+        }
+      } finally {
+        unlock();
+        postWriteCleanup();
+      }
+
+      if (createNewEntry) {
+        try {
+          // Synchronizes on the entry to allow failing fast when a recursive load is
+          // detected. This may be circumvented when an entry is copied, but will fail fast most
+          // of the time.
+          synchronized (e) {
+            return loadSync(key, hash, loadingValueReference, loader);
+          }
+        } finally {
+          statsCounter.recordMisses(1);
+        }
+      } else {
+        // The entry already exists. Wait for loading.
+        return waitForLoadingValue(e, key, valueReference);
+      }
+    }
+
+    V waitForLoadingValue(ReferenceEntry<K, V> e, K key, ValueReference<K, V> valueReference)
+        throws ExecutionException {
+      if (!valueReference.isLoading()) {
+        throw new AssertionError();
+      }
+
+      checkState(!Thread.holdsLock(e), "Recursive load");
+      // don't consider expiration as we're concurrent with loading
+      try {
+        V value = valueReference.waitForValue();
+        if (value == null) {
+          throw new InvalidCacheLoadException("CacheLoader returned null for key " + key + ".");
+        }
+        // re-read ticker now that loading has completed
+        long now = map.ticker.read();
+        recordRead(e, now);
+        return value;
+      } finally {
+        statsCounter.recordMisses(1);
+      }
+    }
+
+    // at most one of loadSync/loadAsync may be called for any given LoadingValueReference
+
+    V loadSync(K key, int hash, LoadingValueReference<K, V> loadingValueReference,
+        CacheLoader<? super K, V> loader) throws ExecutionException {
+      ListenableFuture<V> loadingFuture = loadingValueReference.loadFuture(key, loader);
+      return getAndRecordStats(key, hash, loadingValueReference, loadingFuture);
+    }
+
+    ListenableFuture<V> loadAsync(final K key, final int hash,
+        final LoadingValueReference<K, V> loadingValueReference, CacheLoader<? super K, V> loader) {
+      final ListenableFuture<V> loadingFuture = loadingValueReference.loadFuture(key, loader);
+      loadingFuture.addListener(
+          new Runnable() {
+            @Override
+            public void run() {
+              try {
+                V newValue = getAndRecordStats(key, hash, loadingValueReference, loadingFuture);
+                // update loadingFuture for the sake of other pending requests
+                loadingValueReference.set(newValue);
+              } catch (Throwable t) {
+                logger.log(Level.WARNING, "Exception thrown during refresh", t);
+                loadingValueReference.setException(t);
+              }
+            }
+          }, sameThreadExecutor);
+      return loadingFuture;
+    }
+
+    /**
+     * Waits uninterruptibly for {@code newValue} to be loaded, and then records loading stats.
+     */
+    V getAndRecordStats(K key, int hash, LoadingValueReference<K, V> loadingValueReference,
+        ListenableFuture<V> newValue) throws ExecutionException {
+      V value = null;
+      try {
+        value = getUninterruptibly(newValue);
+        if (value == null) {
+          throw new InvalidCacheLoadException("CacheLoader returned null for key " + key + ".");
+        }
+        statsCounter.recordLoadSuccess(loadingValueReference.elapsedNanos());
+        storeLoadedValue(key, hash, loadingValueReference, value);
+        return value;
+      } finally {
+        if (value == null) {
+          statsCounter.recordLoadException(loadingValueReference.elapsedNanos());
+          removeLoadingValue(key, hash, loadingValueReference);
+        }
+      }
+    }
+
+    V scheduleRefresh(ReferenceEntry<K, V> entry, K key, int hash, V oldValue, long now,
+        CacheLoader<? super K, V> loader) {
+      if (map.refreshes() && (now - entry.getWriteTime() > map.refreshNanos)) {
+        V newValue = refresh(key, hash, loader);
+        if (newValue != null) {
+          return newValue;
+        }
+      }
+      return oldValue;
+    }
+
+    /**
+     * Refreshes the value associated with {@code key}, unless another thread is already doing so.
+     * Returns the newly refreshed value associated with {@code key} if it was refreshed inline, or
+     * {@code null} if another thread is performing the refresh or if an error occurs during
+     * refresh.
+     */
+    @Nullable
+    V refresh(K key, int hash, CacheLoader<? super K, V> loader) {
+      final LoadingValueReference<K, V> loadingValueReference =
+          insertLoadingValueReference(key, hash);
+      if (loadingValueReference == null) {
+        return null;
+      }
+
+      ListenableFuture<V> result = loadAsync(key, hash, loadingValueReference, loader);
+      if (result.isDone()) {
+        try {
+          return result.get();
+        } catch (Throwable t) {
+          // don't let refresh exceptions propagate; error was already logged
+        }
+      }
+      return null;
+    }
+
+    /**
+     * Returns a newly inserted {@code LoadingValueReference}, or null if the live value reference
+     * is already loading.
+     */
+    @Nullable
+    LoadingValueReference<K, V> insertLoadingValueReference(final K key, final int hash) {
+      ReferenceEntry<K, V> e = null;
+      lock();
+      try {
+        long now = map.ticker.read();
+        preWriteCleanup(now);
+
+        AtomicReferenceArray<ReferenceEntry<K, V>> table = this.table;
+        int index = hash & (table.length() - 1);
+        ReferenceEntry<K, V> first = table.get(index);
+
+        // Look for an existing entry.
+        for (e = first; e != null; e = e.getNext()) {
+          K entryKey = e.getKey();
+          if (e.getHash() == hash && entryKey != null
+              && map.keyEquivalence.equivalent(key, entryKey)) {
+            // We found an existing entry.
+
+            ValueReference<K, V> valueReference = e.getValueReference();
+            if (valueReference.isLoading()) {
+              // refresh is a no-op if loading is pending
+              return null;
+            }
+
+            // continue returning old value while loading
+            ++modCount;
+            LoadingValueReference<K, V> loadingValueReference =
+                new LoadingValueReference<K, V>(valueReference);
+            e.setValueReference(loadingValueReference);
+            return loadingValueReference;
+          }
+        }
+
+        ++modCount;
+        LoadingValueReference<K, V> loadingValueReference = new LoadingValueReference<K, V>();
+        e = newEntry(key, hash, first);
+        e.setValueReference(loadingValueReference);
+        table.set(index, e);
+        return loadingValueReference;
+      } finally {
+        unlock();
+        postWriteCleanup();
+      }
+    }
+
+    // reference queues, for garbage collection cleanup
+
+    /**
+     * Cleanup collected entries when the lock is available.
+     */
+    void tryDrainReferenceQueues() {
+      if (tryLock()) {
+        try {
+          drainReferenceQueues();
+        } finally {
+          unlock();
+        }
+      }
+    }
+
+    /**
+     * Drain the key and value reference queues, cleaning up internal entries containing garbage
+     * collected keys or values.
+     */
+    @GuardedBy("Segment.this")
+    void drainReferenceQueues() {
+      if (map.usesKeyReferences()) {
+        drainKeyReferenceQueue();
+      }
+      if (map.usesValueReferences()) {
+        drainValueReferenceQueue();
+      }
+    }
+
+    @GuardedBy("Segment.this")
+    void drainKeyReferenceQueue() {
+      Reference<? extends K> ref;
+      int i = 0;
+      while ((ref = keyReferenceQueue.poll()) != null) {
+        @SuppressWarnings("unchecked")
+        ReferenceEntry<K, V> entry = (ReferenceEntry<K, V>) ref;
+        map.reclaimKey(entry);
+        if (++i == DRAIN_MAX) {
+          break;
+        }
+      }
+    }
+
+    @GuardedBy("Segment.this")
+    void drainValueReferenceQueue() {
+      Reference<? extends V> ref;
+      int i = 0;
+      while ((ref = valueReferenceQueue.poll()) != null) {
+        @SuppressWarnings("unchecked")
+        ValueReference<K, V> valueReference = (ValueReference<K, V>) ref;
+        map.reclaimValue(valueReference);
+        if (++i == DRAIN_MAX) {
+          break;
+        }
+      }
+    }
+
+    /**
+     * Clears all entries from the key and value reference queues.
+     */
+    void clearReferenceQueues() {
+      if (map.usesKeyReferences()) {
+        clearKeyReferenceQueue();
+      }
+      if (map.usesValueReferences()) {
+        clearValueReferenceQueue();
+      }
+    }
+
+    void clearKeyReferenceQueue() {
+      while (keyReferenceQueue.poll() != null) {}
+    }
+
+    void clearValueReferenceQueue() {
+      while (valueReferenceQueue.poll() != null) {}
+    }
+
+    // recency queue, shared by expiration and eviction
+
+    /**
+     * Records the relative order in which this read was performed by adding {@code entry} to the
+     * recency queue. At write-time, or when the queue is full past the threshold, the queue will
+     * be drained and the entries therein processed.
+     *
+     * <p>Note: locked reads should use {@link #recordLockedRead}.
+     */
+    void recordRead(ReferenceEntry<K, V> entry, long now) {
+      if (map.recordsAccess()) {
+        entry.setAccessTime(now);
+      }
+      recencyQueue.add(entry);
+    }
+
+    /**
+     * Updates the eviction metadata that {@code entry} was just read. This currently amounts to
+     * adding {@code entry} to relevant eviction lists.
+     *
+     * <p>Note: this method should only be called under lock, as it directly manipulates the
+     * eviction queues. Unlocked reads should use {@link #recordRead}.
+     */
+    @GuardedBy("Segment.this")
+    void recordLockedRead(ReferenceEntry<K, V> entry, long now) {
+      if (map.recordsAccess()) {
+        entry.setAccessTime(now);
+      }
+      accessQueue.add(entry);
+    }
+
+    /**
+     * Updates eviction metadata that {@code entry} was just written. This currently amounts to
+     * adding {@code entry} to relevant eviction lists.
+     */
+    @GuardedBy("Segment.this")
+    void recordWrite(ReferenceEntry<K, V> entry, int weight, long now) {
+      // we are already under lock, so drain the recency queue immediately
+      drainRecencyQueue();
+      totalWeight += weight;
+
+      if (map.recordsAccess()) {
+        entry.setAccessTime(now);
+      }
+      if (map.recordsWrite()) {
+        entry.setWriteTime(now);
+      }
+      accessQueue.add(entry);
+      writeQueue.add(entry);
+    }
+
+    /**
+     * Drains the recency queue, updating eviction metadata that the entries therein were read in
+     * the specified relative order. This currently amounts to adding them to relevant eviction
+     * lists (accounting for the fact that they could have been removed from the map since being
+     * added to the recency queue).
+     */
+    @GuardedBy("Segment.this")
+    void drainRecencyQueue() {
+      ReferenceEntry<K, V> e;
+      while ((e = recencyQueue.poll()) != null) {
+        // An entry may be in the recency queue despite it being removed from
+        // the map . This can occur when the entry was concurrently read while a
+        // writer is removing it from the segment or after a clear has removed
+        // all of the segment's entries.
+        if (accessQueue.contains(e)) {
+          accessQueue.add(e);
+        }
+      }
+    }
+
+    // expiration
+
+    /**
+     * Cleanup expired entries when the lock is available.
+     */
+    void tryExpireEntries(long now) {
+      if (tryLock()) {
+        try {
+          expireEntries(now);
+        } finally {
+          unlock();
+          // don't call postWriteCleanup as we're in a read
+        }
+      }
+    }
+
+    @GuardedBy("Segment.this")
+    void expireEntries(long now) {
+      drainRecencyQueue();
+
+      ReferenceEntry<K, V> e;
+      while ((e = writeQueue.peek()) != null && map.isExpired(e, now)) {
+        if (!removeEntry(e, e.getHash(), RemovalCause.EXPIRED)) {
+          throw new AssertionError();
+        }
+      }
+      while ((e = accessQueue.peek()) != null && map.isExpired(e, now)) {
+        if (!removeEntry(e, e.getHash(), RemovalCause.EXPIRED)) {
+          throw new AssertionError();
+        }
+      }
+    }
+
+    // eviction
+
+    @GuardedBy("Segment.this")
+    void enqueueNotification(ReferenceEntry<K, V> entry, RemovalCause cause) {
+      enqueueNotification(entry.getKey(), entry.getHash(), entry.getValueReference(), cause);
+    }
+
+    @GuardedBy("Segment.this")
+    void enqueueNotification(@Nullable K key, int hash, ValueReference<K, V> valueReference,
+        RemovalCause cause) {
+      totalWeight -= valueReference.getWeight();
+      if (cause.wasEvicted()) {
+        statsCounter.recordEviction();
+      }
+      if (map.removalNotificationQueue != DISCARDING_QUEUE) {
+        V value = valueReference.get();
+        RemovalNotification<K, V> notification = new RemovalNotification<K, V>(key, value, cause);
+        map.removalNotificationQueue.offer(notification);
+      }
+    }
+
+    /**
+     * Performs eviction if the segment is full. This should only be called prior to adding a new
+     * entry and increasing {@code count}.
+     */
+    @GuardedBy("Segment.this")
+    void evictEntries() {
+      if (!map.evictsBySize()) {
+        return;
+      }
+
+      drainRecencyQueue();
+      while (totalWeight > maxSegmentWeight) {
+        ReferenceEntry<K, V> e = getNextEvictable();
+        if (!removeEntry(e, e.getHash(), RemovalCause.SIZE)) {
+          throw new AssertionError();
+        }
+      }
+    }
+
+    // TODO(fry): instead implement this with an eviction head
+    ReferenceEntry<K, V> getNextEvictable() {
+      for (ReferenceEntry<K, V> e : accessQueue) {
+        int weight = e.getValueReference().getWeight();
+        if (weight > 0) {
+          return e;
+        }
+      }
+      throw new AssertionError();
+    }
+
+    /**
+     * Returns first entry of bin for given hash.
+     */
+    ReferenceEntry<K, V> getFirst(int hash) {
+      // read this volatile field only once
+      AtomicReferenceArray<ReferenceEntry<K, V>> table = this.table;
+      return table.get(hash & (table.length() - 1));
+    }
+
+    // Specialized implementations of map methods
+
+    @Nullable
+    ReferenceEntry<K, V> getEntry(Object key, int hash) {
+      for (ReferenceEntry<K, V> e = getFirst(hash); e != null; e = e.getNext()) {
+        if (e.getHash() != hash) {
+          continue;
+        }
+
+        K entryKey = e.getKey();
+        if (entryKey == null) {
+          tryDrainReferenceQueues();
+          continue;
+        }
+
+        if (map.keyEquivalence.equivalent(key, entryKey)) {
+          return e;
+        }
+      }
+
+      return null;
+    }
+
+    @Nullable
+    ReferenceEntry<K, V> getLiveEntry(Object key, int hash, long now) {
+      ReferenceEntry<K, V> e = getEntry(key, hash);
+      if (e == null) {
+        return null;
+      } else if (map.isExpired(e, now)) {
+        tryExpireEntries(now);
+        return null;
+      }
+      return e;
+    }
+
+    /**
+     * Gets the value from an entry. Returns null if the entry is invalid, partially-collected,
+     * loading, or expired.
+     */
+    V getLiveValue(ReferenceEntry<K, V> entry, long now) {
+      if (entry.getKey() == null) {
+        tryDrainReferenceQueues();
+        return null;
+      }
+      V value = entry.getValueReference().get();
+      if (value == null) {
+        tryDrainReferenceQueues();
+        return null;
+      }
+
+      if (map.isExpired(entry, now)) {
+        tryExpireEntries(now);
+        return null;
+      }
+      return value;
+    }
+
+    @Nullable
+    V get(Object key, int hash) {
+      try {
+        if (count != 0) { // read-volatile
+          long now = map.ticker.read();
+          ReferenceEntry<K, V> e = getLiveEntry(key, hash, now);
+          if (e == null) {
+            return null;
+          }
+
+          V value = e.getValueReference().get();
+          if (value != null) {
+            recordRead(e, now);
+            return scheduleRefresh(e, e.getKey(), hash, value, now, map.defaultLoader);
+          }
+          tryDrainReferenceQueues();
+        }
+        return null;
+      } finally {
+        postReadCleanup();
+      }
+    }
+
+    boolean containsKey(Object key, int hash) {
+      try {
+        if (count != 0) { // read-volatile
+          long now = map.ticker.read();
+          ReferenceEntry<K, V> e = getLiveEntry(key, hash, now);
+          if (e == null) {
+            return false;
+          }
+          return e.getValueReference().get() != null;
+        }
+
+        return false;
+      } finally {
+        postReadCleanup();
+      }
+    }
+
+    /**
+     * This method is a convenience for testing. Code should call {@link
+     * LocalCache#containsValue} directly.
+     */
+    @VisibleForTesting
+    boolean containsValue(Object value) {
+      try {
+        if (count != 0) { // read-volatile
+          long now = map.ticker.read();
+          AtomicReferenceArray<ReferenceEntry<K, V>> table = this.table;
+          int length = table.length();
+          for (int i = 0; i < length; ++i) {
+            for (ReferenceEntry<K, V> e = table.get(i); e != null; e = e.getNext()) {
+              V entryValue = getLiveValue(e, now);
+              if (entryValue == null) {
+                continue;
+              }
+              if (map.valueEquivalence.equivalent(value, entryValue)) {
+                return true;
+              }
+            }
+          }
+        }
+
+        return false;
+      } finally {
+        postReadCleanup();
+      }
+    }
+
+    @Nullable
+    V put(K key, int hash, V value, boolean onlyIfAbsent) {
+      lock();
+      try {
+        long now = map.ticker.read();
+        preWriteCleanup(now);
+
+        int newCount = this.count + 1;
+        if (newCount > this.threshold) { // ensure capacity
+          expand();
+          newCount = this.count + 1;
+        }
+
+        AtomicReferenceArray<ReferenceEntry<K, V>> table = this.table;
+        int index = hash & (table.length() - 1);
+        ReferenceEntry<K, V> first = table.get(index);
+
+        // Look for an existing entry.
+        for (ReferenceEntry<K, V> e = first; e != null; e = e.getNext()) {
+          K entryKey = e.getKey();
+          if (e.getHash() == hash && entryKey != null
+              && map.keyEquivalence.equivalent(key, entryKey)) {
+            // We found an existing entry.
+
+            ValueReference<K, V> valueReference = e.getValueReference();
+            V entryValue = valueReference.get();
+
+            if (entryValue == null) {
+              ++modCount;
+              if (valueReference.isActive()) {
+                enqueueNotification(key, hash, valueReference, RemovalCause.COLLECTED);
+                setValue(e, key, value, now);
+                newCount = this.count; // count remains unchanged
+              } else {
+                setValue(e, key, value, now);
+                newCount = this.count + 1;
+              }
+              this.count = newCount; // write-volatile
+              evictEntries();
+              return null;
+            } else if (onlyIfAbsent) {
+              // Mimic
+              // "if (!map.containsKey(key)) ...
+              // else return map.get(key);
+              recordLockedRead(e, now);
+              return entryValue;
+            } else {
+              // clobber existing entry, count remains unchanged
+              ++modCount;
+              enqueueNotification(key, hash, valueReference, RemovalCause.REPLACED);
+              setValue(e, key, value, now);
+              evictEntries();
+              return entryValue;
+            }
+          }
+        }
+
+        // Create a new entry.
+        ++modCount;
+        ReferenceEntry<K, V> newEntry = newEntry(key, hash, first);
+        setValue(newEntry, key, value, now);
+        table.set(index, newEntry);
+        newCount = this.count + 1;
+        this.count = newCount; // write-volatile
+        evictEntries();
+        return null;
+      } finally {
+        unlock();
+        postWriteCleanup();
+      }
+    }
+
+    /**
+     * Expands the table if possible.
+     */
+    @GuardedBy("Segment.this")
+    void expand() {
+      AtomicReferenceArray<ReferenceEntry<K, V>> oldTable = table;
+      int oldCapacity = oldTable.length();
+      if (oldCapacity >= MAXIMUM_CAPACITY) {
+        return;
+      }
+
+      /*
+       * Reclassify nodes in each list to new Map. Because we are using power-of-two expansion, the
+       * elements from each bin must either stay at same index, or move with a power of two offset.
+       * We eliminate unnecessary node creation by catching cases where old nodes can be reused
+       * because their next fields won't change. Statistically, at the default threshold, only
+       * about one-sixth of them need cloning when a table doubles. The nodes they replace will be
+       * garbage collectable as soon as they are no longer referenced by any reader thread that may
+       * be in the midst of traversing table right now.
+       */
+
+      int newCount = count;
+      AtomicReferenceArray<ReferenceEntry<K, V>> newTable = newEntryArray(oldCapacity << 1);
+      threshold = newTable.length() * 3 / 4;
+      int newMask = newTable.length() - 1;
+      for (int oldIndex = 0; oldIndex < oldCapacity; ++oldIndex) {
+        // We need to guarantee that any existing reads of old Map can
+        // proceed. So we cannot yet null out each bin.
+        ReferenceEntry<K, V> head = oldTable.get(oldIndex);
+
+        if (head != null) {
+          ReferenceEntry<K, V> next = head.getNext();
+          int headIndex = head.getHash() & newMask;
+
+          // Single node on list
+          if (next == null) {
+            newTable.set(headIndex, head);
+          } else {
+            // Reuse the consecutive sequence of nodes with the same target
+            // index from the end of the list. tail points to the first
+            // entry in the reusable list.
+            ReferenceEntry<K, V> tail = head;
+            int tailIndex = headIndex;
+            for (ReferenceEntry<K, V> e = next; e != null; e = e.getNext()) {
+              int newIndex = e.getHash() & newMask;
+              if (newIndex != tailIndex) {
+                // The index changed. We'll need to copy the previous entry.
+                tailIndex = newIndex;
+                tail = e;
+              }
+            }
+            newTable.set(tailIndex, tail);
+
+            // Clone nodes leading up to the tail.
+            for (ReferenceEntry<K, V> e = head; e != tail; e = e.getNext()) {
+              if (isCollected(e)) {
+                removeCollectedEntry(e);
+                newCount--;
+              } else {
+                int newIndex = e.getHash() & newMask;
+                ReferenceEntry<K, V> newNext = newTable.get(newIndex);
+                ReferenceEntry<K, V> newFirst = copyEntry(e, newNext);
+                newTable.set(newIndex, newFirst);
+              }
+            }
+          }
+        }
+      }
+      table = newTable;
+      this.count = newCount;
+    }
+
+    boolean replace(K key, int hash, V oldValue, V newValue) {
+      lock();
+      try {
+        long now = map.ticker.read();
+        preWriteCleanup(now);
+
+        AtomicReferenceArray<ReferenceEntry<K, V>> table = this.table;
+        int index = hash & (table.length() - 1);
+        ReferenceEntry<K, V> first = table.get(index);
+
+        for (ReferenceEntry<K, V> e = first; e != null; e = e.getNext()) {
+          K entryKey = e.getKey();
+          if (e.getHash() == hash && entryKey != null
+              && map.keyEquivalence.equivalent(key, entryKey)) {
+            ValueReference<K, V> valueReference = e.getValueReference();
+            V entryValue = valueReference.get();
+            if (entryValue == null) {
+              if (valueReference.isActive()) {
+                // If the value disappeared, this entry is partially collected.
+                int newCount = this.count - 1;
+                ++modCount;
+                ReferenceEntry<K, V> newFirst = removeValueFromChain(
+                    first, e, entryKey, hash, valueReference, RemovalCause.COLLECTED);
+                newCount = this.count - 1;
+                table.set(index, newFirst);
+                this.count = newCount; // write-volatile
+              }
+              return false;
+            }
+
+            if (map.valueEquivalence.equivalent(oldValue, entryValue)) {
+              ++modCount;
+              enqueueNotification(key, hash, valueReference, RemovalCause.REPLACED);
+              setValue(e, key, newValue, now);
+              evictEntries();
+              return true;
+            } else {
+              // Mimic
+              // "if (map.containsKey(key) && map.get(key).equals(oldValue))..."
+              recordLockedRead(e, now);
+              return false;
+            }
+          }
+        }
+
+        return false;
+      } finally {
+        unlock();
+        postWriteCleanup();
+      }
+    }
+
+    @Nullable
+    V replace(K key, int hash, V newValue) {
+      lock();
+      try {
+        long now = map.ticker.read();
+        preWriteCleanup(now);
+
+        AtomicReferenceArray<ReferenceEntry<K, V>> table = this.table;
+        int index = hash & (table.length() - 1);
+        ReferenceEntry<K, V> first = table.get(index);
+
+        for (ReferenceEntry<K, V> e = first; e != null; e = e.getNext()) {
+          K entryKey = e.getKey();
+          if (e.getHash() == hash && entryKey != null
+              && map.keyEquivalence.equivalent(key, entryKey)) {
+            ValueReference<K, V> valueReference = e.getValueReference();
+            V entryValue = valueReference.get();
+            if (entryValue == null) {
+              if (valueReference.isActive()) {
+                // If the value disappeared, this entry is partially collected.
+                int newCount = this.count - 1;
+                ++modCount;
+                ReferenceEntry<K, V> newFirst = removeValueFromChain(
+                    first, e, entryKey, hash, valueReference, RemovalCause.COLLECTED);
+                newCount = this.count - 1;
+                table.set(index, newFirst);
+                this.count = newCount; // write-volatile
+              }
+              return null;
+            }
+
+            ++modCount;
+            enqueueNotification(key, hash, valueReference, RemovalCause.REPLACED);
+            setValue(e, key, newValue, now);
+            evictEntries();
+            return entryValue;
+          }
+        }
+
+        return null;
+      } finally {
+        unlock();
+        postWriteCleanup();
+      }
+    }
+
+    @Nullable
+    V remove(Object key, int hash) {
+      lock();
+      try {
+        long now = map.ticker.read();
+        preWriteCleanup(now);
+
+        int newCount = this.count - 1;
+        AtomicReferenceArray<ReferenceEntry<K, V>> table = this.table;
+        int index = hash & (table.length() - 1);
+        ReferenceEntry<K, V> first = table.get(index);
+
+        for (ReferenceEntry<K, V> e = first; e != null; e = e.getNext()) {
+          K entryKey = e.getKey();
+          if (e.getHash() == hash && entryKey != null
+              && map.keyEquivalence.equivalent(key, entryKey)) {
+            ValueReference<K, V> valueReference = e.getValueReference();
+            V entryValue = valueReference.get();
+
+            RemovalCause cause;
+            if (entryValue != null) {
+              cause = RemovalCause.EXPLICIT;
+            } else if (valueReference.isActive()) {
+              cause = RemovalCause.COLLECTED;
+            } else {
+              // currently loading
+              return null;
+            }
+
+            ++modCount;
+            ReferenceEntry<K, V> newFirst = removeValueFromChain(
+                first, e, entryKey, hash, valueReference, cause);
+            newCount = this.count - 1;
+            table.set(index, newFirst);
+            this.count = newCount; // write-volatile
+            return entryValue;
+          }
+        }
+
+        return null;
+      } finally {
+        unlock();
+        postWriteCleanup();
+      }
+    }
+
+    boolean storeLoadedValue(K key, int hash, LoadingValueReference<K, V> oldValueReference,
+        V newValue) {
+      lock();
+      try {
+        long now = map.ticker.read();
+        preWriteCleanup(now);
+
+        int newCount = this.count + 1;
+        AtomicReferenceArray<ReferenceEntry<K, V>> table = this.table;
+        int index = hash & (table.length() - 1);
+        ReferenceEntry<K, V> first = table.get(index);
+
+        for (ReferenceEntry<K, V> e = first; e != null; e = e.getNext()) {
+          K entryKey = e.getKey();
+          if (e.getHash() == hash && entryKey != null
+              && map.keyEquivalence.equivalent(key, entryKey)) {
+            ValueReference<K, V> valueReference = e.getValueReference();
+            V entryValue = valueReference.get();
+            if (entryValue == null || oldValueReference == valueReference) {
+              ++modCount;
+              if (oldValueReference.isActive()) {
+                RemovalCause cause =
+                    (entryValue == null) ? RemovalCause.COLLECTED : RemovalCause.REPLACED;
+                enqueueNotification(key, hash, oldValueReference, cause);
+                newCount--;
+              }
+              setValue(e, key, newValue, now);
+              this.count = newCount; // write-volatile
+              evictEntries();
+              return true;
+            }
+
+            // the loaded value was already clobbered
+            valueReference = new WeightedStrongValueReference<K, V>(newValue, 0);
+            enqueueNotification(key, hash, valueReference, RemovalCause.REPLACED);
+            return false;
+          }
+        }
+
+        ++modCount;
+        ReferenceEntry<K, V> newEntry = newEntry(key, hash, first);
+        setValue(newEntry, key, newValue, now);
+        table.set(index, newEntry);
+        this.count = newCount; // write-volatile
+        evictEntries();
+        return true;
+      } finally {
+        unlock();
+        postWriteCleanup();
+      }
+    }
+
+    boolean remove(Object key, int hash, Object value) {
+      lock();
+      try {
+        long now = map.ticker.read();
+        preWriteCleanup(now);
+
+        int newCount = this.count - 1;
+        AtomicReferenceArray<ReferenceEntry<K, V>> table = this.table;
+        int index = hash & (table.length() - 1);
+        ReferenceEntry<K, V> first = table.get(index);
+
+        for (ReferenceEntry<K, V> e = first; e != null; e = e.getNext()) {
+          K entryKey = e.getKey();
+          if (e.getHash() == hash && entryKey != null
+              && map.keyEquivalence.equivalent(key, entryKey)) {
+            ValueReference<K, V> valueReference = e.getValueReference();
+            V entryValue = valueReference.get();
+
+            RemovalCause cause;
+            if (map.valueEquivalence.equivalent(value, entryValue)) {
+              cause = RemovalCause.EXPLICIT;
+            } else if (entryValue == null && valueReference.isActive()) {
+              cause = RemovalCause.COLLECTED;
+            } else {
+              // currently loading
+              return false;
+            }
+
+            ++modCount;
+            ReferenceEntry<K, V> newFirst = removeValueFromChain(
+                first, e, entryKey, hash, valueReference, cause);
+            newCount = this.count - 1;
+            table.set(index, newFirst);
+            this.count = newCount; // write-volatile
+            return (cause == RemovalCause.EXPLICIT);
+          }
+        }
+
+        return false;
+      } finally {
+        unlock();
+        postWriteCleanup();
+      }
+    }
+
+    void clear() {
+      if (count != 0) { // read-volatile
+        lock();
+        try {
+          AtomicReferenceArray<ReferenceEntry<K, V>> table = this.table;
+          for (int i = 0; i < table.length(); ++i) {
+            for (ReferenceEntry<K, V> e = table.get(i); e != null; e = e.getNext()) {
+              // Loading references aren't actually in the map yet.
+              if (e.getValueReference().isActive()) {
+                enqueueNotification(e, RemovalCause.EXPLICIT);
+              }
+            }
+          }
+          for (int i = 0; i < table.length(); ++i) {
+            table.set(i, null);
+          }
+          clearReferenceQueues();
+          writeQueue.clear();
+          accessQueue.clear();
+          readCount.set(0);
+
+          ++modCount;
+          count = 0; // write-volatile
+        } finally {
+          unlock();
+          postWriteCleanup();
+        }
+      }
+    }
+
+    @GuardedBy("Segment.this")
+    @Nullable
+    ReferenceEntry<K, V> removeValueFromChain(ReferenceEntry<K, V> first,
+        ReferenceEntry<K, V> entry, @Nullable K key, int hash, ValueReference<K, V> valueReference,
+        RemovalCause cause) {
+      enqueueNotification(key, hash, valueReference, cause);
+      writeQueue.remove(entry);
+      accessQueue.remove(entry);
+
+      if (valueReference.isLoading()) {
+        valueReference.notifyNewValue(null);
+        return first;
+      } else {
+        return removeEntryFromChain(first, entry);
+      }
+    }
+
+    @GuardedBy("Segment.this")
+    @Nullable
+    ReferenceEntry<K, V> removeEntryFromChain(ReferenceEntry<K, V> first,
+        ReferenceEntry<K, V> entry) {
+      int newCount = count;
+      ReferenceEntry<K, V> newFirst = entry.getNext();
+      for (ReferenceEntry<K, V> e = first; e != entry; e = e.getNext()) {
+        if (isCollected(e)) {
+          removeCollectedEntry(e);
+          newCount--;
+        } else {
+          newFirst = copyEntry(e, newFirst);
+        }
+      }
+      this.count = newCount;
+      return newFirst;
+    }
+
+    @GuardedBy("Segment.this")
+    void removeCollectedEntry(ReferenceEntry<K, V> entry) {
+      enqueueNotification(entry, RemovalCause.COLLECTED);
+      writeQueue.remove(entry);
+      accessQueue.remove(entry);
+    }
+
+    /**
+     * Removes an entry whose key has been garbage collected.
+     */
+    boolean reclaimKey(ReferenceEntry<K, V> entry, int hash) {
+      lock();
+      try {
+        int newCount = count - 1;
+        AtomicReferenceArray<ReferenceEntry<K, V>> table = this.table;
+        int index = hash & (table.length() - 1);
+        ReferenceEntry<K, V> first = table.get(index);
+
+        for (ReferenceEntry<K, V> e = first; e != null; e = e.getNext()) {
+          if (e == entry) {
+            ++modCount;
+            ReferenceEntry<K, V> newFirst = removeValueFromChain(
+                first, e, e.getKey(), hash, e.getValueReference(), RemovalCause.COLLECTED);
+            newCount = this.count - 1;
+            table.set(index, newFirst);
+            this.count = newCount; // write-volatile
+            return true;
+          }
+        }
+
+        return false;
+      } finally {
+        unlock();
+        postWriteCleanup();
+      }
+    }
+
+    /**
+     * Removes an entry whose value has been garbage collected.
+     */
+    boolean reclaimValue(K key, int hash, ValueReference<K, V> valueReference) {
+      lock();
+      try {
+        int newCount = this.count - 1;
+        AtomicReferenceArray<ReferenceEntry<K, V>> table = this.table;
+        int index = hash & (table.length() - 1);
+        ReferenceEntry<K, V> first = table.get(index);
+
+        for (ReferenceEntry<K, V> e = first; e != null; e = e.getNext()) {
+          K entryKey = e.getKey();
+          if (e.getHash() == hash && entryKey != null
+              && map.keyEquivalence.equivalent(key, entryKey)) {
+            ValueReference<K, V> v = e.getValueReference();
+            if (v == valueReference) {
+              ++modCount;
+              ReferenceEntry<K, V> newFirst = removeValueFromChain(
+                  first, e, entryKey, hash, valueReference, RemovalCause.COLLECTED);
+              newCount = this.count - 1;
+              table.set(index, newFirst);
+              this.count = newCount; // write-volatile
+              return true;
+            }
+            return false;
+          }
+        }
+
+        return false;
+      } finally {
+        unlock();
+        if (!isHeldByCurrentThread()) { // don't cleanup inside of put
+          postWriteCleanup();
+        }
+      }
+    }
+
+    boolean removeLoadingValue(K key, int hash, LoadingValueReference<K, V> valueReference) {
+      lock();
+      try {
+        AtomicReferenceArray<ReferenceEntry<K, V>> table = this.table;
+        int index = hash & (table.length() - 1);
+        ReferenceEntry<K, V> first = table.get(index);
+
+        for (ReferenceEntry<K, V> e = first; e != null; e = e.getNext()) {
+          K entryKey = e.getKey();
+          if (e.getHash() == hash && entryKey != null
+              && map.keyEquivalence.equivalent(key, entryKey)) {
+            ValueReference<K, V> v = e.getValueReference();
+            if (v == valueReference) {
+              if (valueReference.isActive()) {
+                e.setValueReference(valueReference.getOldValue());
+              } else {
+                ReferenceEntry<K, V> newFirst = removeEntryFromChain(first, e);
+                table.set(index, newFirst);
+              }
+              return true;
+            }
+            return false;
+          }
+        }
+
+        return false;
+      } finally {
+        unlock();
+        postWriteCleanup();
+      }
+    }
+
+    @GuardedBy("Segment.this")
+    boolean removeEntry(ReferenceEntry<K, V> entry, int hash, RemovalCause cause) {
+      int newCount = this.count - 1;
+      AtomicReferenceArray<ReferenceEntry<K, V>> table = this.table;
+      int index = hash & (table.length() - 1);
+      ReferenceEntry<K, V> first = table.get(index);
+
+      for (ReferenceEntry<K, V> e = first; e != null; e = e.getNext()) {
+        if (e == entry) {
+          ++modCount;
+          ReferenceEntry<K, V> newFirst = removeValueFromChain(
+              first, e, e.getKey(), hash, e.getValueReference(), cause);
+          newCount = this.count - 1;
+          table.set(index, newFirst);
+          this.count = newCount; // write-volatile
+          return true;
+        }
+      }
+
+      return false;
+    }
+
+    /**
+     * Returns true if the entry has been partially collected, meaning that either the key is null,
+     * or the value is active but null.
+     */
+    boolean isCollected(ReferenceEntry<K, V> entry) {
+      if (entry.getKey() == null) {
+        return true;
+      }
+      ValueReference<K, V> valueReference = entry.getValueReference();
+      return (valueReference.get() == null) && valueReference.isActive();
+    }
+
+    /**
+     * Performs routine cleanup following a read. Normally cleanup happens during writes. If cleanup
+     * is not observed after a sufficient number of reads, try cleaning up from the read thread.
+     */
+    void postReadCleanup() {
+      if ((readCount.incrementAndGet() & DRAIN_THRESHOLD) == 0) {
+        cleanUp();
+      }
+    }
+
+    /**
+     * Performs routine cleanup prior to executing a write. This should be called every time a
+     * write thread acquires the segment lock, immediately after acquiring the lock.
+     *
+     * <p>Post-condition: expireEntries has been run.
+     */
+    @GuardedBy("Segment.this")
+    void preWriteCleanup(long now) {
+      runLockedCleanup(now);
+    }
+
+    /**
+     * Performs routine cleanup following a write.
+     */
+    void postWriteCleanup() {
+      runUnlockedCleanup();
+    }
+
+    void cleanUp() {
+      long now = map.ticker.read();
+      runLockedCleanup(now);
+      runUnlockedCleanup();
+    }
+
+    void runLockedCleanup(long now) {
+      if (tryLock()) {
+        try {
+          drainReferenceQueues();
+          expireEntries(now); // calls drainRecencyQueue
+          readCount.set(0);
+        } finally {
+          unlock();
+        }
+      }
+    }
+
+    void runUnlockedCleanup() {
+      // locked cleanup may generate notifications we can send unlocked
+      if (!isHeldByCurrentThread()) {
+        map.processPendingNotifications();
+      }
+    }
+
+  }
+
+  static class LoadingValueReference<K, V> implements ValueReference<K, V> {
+    volatile ValueReference<K, V> oldValue;
+
+    // TODO(fry): rename get, then extend AbstractFuture instead of containing SettableFuture
+    final SettableFuture<V> futureValue = SettableFuture.create();
+    final Stopwatch stopwatch = new Stopwatch();
+
+    public LoadingValueReference() {
+      this(LocalCache.<K, V>unset());
+    }
+
+    public LoadingValueReference(ValueReference<K, V> oldValue) {
+      this.oldValue = oldValue;
+    }
+
+    @Override
+    public boolean isLoading() {
+      return true;
+    }
+
+    @Override
+    public boolean isActive() {
+      return oldValue.isActive();
+    }
+
+    @Override
+    public int getWeight() {
+      return oldValue.getWeight();
+    }
+
+    public boolean set(@Nullable V newValue) {
+      return futureValue.set(newValue);
+    }
+
+    public boolean setException(Throwable t) {
+      return setException(futureValue, t);
+    }
+
+    private static boolean setException(SettableFuture<?> future, Throwable t) {
+      try {
+        return future.setException(t);
+      } catch (Error e) {
+        // the error will already be propagated by the loading thread
+        return false;
+      }
+    }
+
+    private ListenableFuture<V> fullyFailedFuture(Throwable t) {
+      SettableFuture<V> future = SettableFuture.create();
+      setException(future, t);
+      return future;
+    }
+
+    @Override
+    public void notifyNewValue(@Nullable V newValue) {
+      if (newValue != null) {
+        // The pending load was clobbered by a manual write.
+        // Unblock all pending gets, and have them return the new value.
+        set(newValue);
+      } else {
+        // The pending load was removed. Delay notifications until loading completes.
+        oldValue = unset();
+      }
+
+      // TODO(fry): could also cancel loading if we had a handle on its future
+    }
+
+    public ListenableFuture<V> loadFuture(K key, CacheLoader<? super K, V> loader) {
+      stopwatch.start();
+      V previousValue = oldValue.get();
+      try {
+        if (previousValue == null) {
+          V newValue = loader.load(key);
+          return set(newValue) ? futureValue : Futures.immediateFuture(newValue);
+        } else {
+          ListenableFuture<V> newValue = loader.reload(key, previousValue);
+          // rely on loadAsync to call set in order to avoid adding a second listener here
+          return newValue != null ? newValue : Futures.<V>immediateFuture(null);
+        }
+      } catch (Throwable t) {
+        return setException(t) ? futureValue : fullyFailedFuture(t);
+      }
+    }
+
+    public long elapsedNanos() {
+      return stopwatch.elapsedTime(NANOSECONDS);
+    }
+
+    @Override
+    public V waitForValue() throws ExecutionException {
+      return getUninterruptibly(futureValue);
+    }
+
+    @Override
+    public V get() {
+      return oldValue.get();
+    }
+
+    public ValueReference<K, V> getOldValue() {
+      return oldValue;
+    }
+
+    @Override
+    public ReferenceEntry<K, V> getEntry() {
+      return null;
+    }
+
+    @Override
+    public ValueReference<K, V> copyFor(ReferenceQueue<V> queue, ReferenceEntry<K, V> entry) {
+      return this;
+    }
+  }
+
+  // Queues
+
+  /**
+   * A custom queue for managing eviction order. Note that this is tightly integrated with {@code
+   * ReferenceEntry}, upon which it relies to perform its linking.
+   *
+   * <p>Note that this entire implementation makes the assumption that all elements which are in
+   * the map are also in this queue, and that all elements not in the queue are not in the map.
+   *
+   * <p>The benefits of creating our own queue are that (1) we can replace elements in the middle
+   * of the queue as part of copyWriteEntry, and (2) the contains method is highly optimized
+   * for the current model.
+   */
+  static final class WriteQueue<K, V> extends AbstractQueue<ReferenceEntry<K, V>> {
+    final ReferenceEntry<K, V> head = new AbstractReferenceEntry<K, V>() {
+
+      @Override
+      public long getWriteTime() {
+        return Long.MAX_VALUE;
+      }
+
+      @Override
+      public void setWriteTime(long time) {}
+
+      ReferenceEntry<K, V> nextWrite = this;
+
+      @Override
+      public ReferenceEntry<K, V> getNextInWriteQueue() {
+        return nextWrite;
+      }
+
+      @Override
+      public void setNextInWriteQueue(ReferenceEntry<K, V> next) {
+        this.nextWrite = next;
+      }
+
+      ReferenceEntry<K, V> previousWrite = this;
+
+      @Override
+      public ReferenceEntry<K, V> getPreviousInWriteQueue() {
+        return previousWrite;
+      }
+
+      @Override
+      public void setPreviousInWriteQueue(ReferenceEntry<K, V> previous) {
+        this.previousWrite = previous;
+      }
+    };
+
+    // implements Queue
+
+    @Override
+    public boolean offer(ReferenceEntry<K, V> entry) {
+      // unlink
+      connectWriteOrder(entry.getPreviousInWriteQueue(), entry.getNextInWriteQueue());
+
+      // add to tail
+      connectWriteOrder(head.getPreviousInWriteQueue(), entry);
+      connectWriteOrder(entry, head);
+
+      return true;
+    }
+
+    @Override
+    public ReferenceEntry<K, V> peek() {
+      ReferenceEntry<K, V> next = head.getNextInWriteQueue();
+      return (next == head) ? null : next;
+    }
+
+    @Override
+    public ReferenceEntry<K, V> poll() {
+      ReferenceEntry<K, V> next = head.getNextInWriteQueue();
+      if (next == head) {
+        return null;
+      }
+
+      remove(next);
+      return next;
+    }
+
+    @Override
+    @SuppressWarnings("unchecked")
+    public boolean remove(Object o) {
+      ReferenceEntry<K, V> e = (ReferenceEntry) o;
+      ReferenceEntry<K, V> previous = e.getPreviousInWriteQueue();
+      ReferenceEntry<K, V> next = e.getNextInWriteQueue();
+      connectWriteOrder(previous, next);
+      nullifyWriteOrder(e);
+
+      return next != NullEntry.INSTANCE;
+    }
+
+    @Override
+    @SuppressWarnings("unchecked")
+    public boolean contains(Object o) {
+      ReferenceEntry<K, V> e = (ReferenceEntry) o;
+      return e.getNextInWriteQueue() != NullEntry.INSTANCE;
+    }
+
+    @Override
+    public boolean isEmpty() {
+      return head.getNextInWriteQueue() == head;
+    }
+
+    @Override
+    public int size() {
+      int size = 0;
+      for (ReferenceEntry<K, V> e = head.getNextInWriteQueue(); e != head;
+          e = e.getNextInWriteQueue()) {
+        size++;
+      }
+      return size;
+    }
+
+    @Override
+    public void clear() {
+      ReferenceEntry<K, V> e = head.getNextInWriteQueue();
+      while (e != head) {
+        ReferenceEntry<K, V> next = e.getNextInWriteQueue();
+        nullifyWriteOrder(e);
+        e = next;
+      }
+
+      head.setNextInWriteQueue(head);
+      head.setPreviousInWriteQueue(head);
+    }
+
+    @Override
+    public Iterator<ReferenceEntry<K, V>> iterator() {
+      return new AbstractLinkedIterator<ReferenceEntry<K, V>>(peek()) {
+        @Override
+        protected ReferenceEntry<K, V> computeNext(ReferenceEntry<K, V> previous) {
+          ReferenceEntry<K, V> next = previous.getNextInWriteQueue();
+          return (next == head) ? null : next;
+        }
+      };
+    }
+  }
+
+  /**
+   * A custom queue for managing access order. Note that this is tightly integrated with
+   * {@code ReferenceEntry}, upon which it reliese to perform its linking.
+   *
+   * <p>Note that this entire implementation makes the assumption that all elements which are in
+   * the map are also in this queue, and that all elements not in the queue are not in the map.
+   *
+   * <p>The benefits of creating our own queue are that (1) we can replace elements in the middle
+   * of the queue as part of copyWriteEntry, and (2) the contains method is highly optimized
+   * for the current model.
+   */
+  static final class AccessQueue<K, V> extends AbstractQueue<ReferenceEntry<K, V>> {
+    final ReferenceEntry<K, V> head = new AbstractReferenceEntry<K, V>() {
+
+      @Override
+      public long getAccessTime() {
+        return Long.MAX_VALUE;
+      }
+
+      @Override
+      public void setAccessTime(long time) {}
+
+      ReferenceEntry<K, V> nextAccess = this;
+
+      @Override
+      public ReferenceEntry<K, V> getNextInAccessQueue() {
+        return nextAccess;
+      }
+
+      @Override
+      public void setNextInAccessQueue(ReferenceEntry<K, V> next) {
+        this.nextAccess = next;
+      }
+
+      ReferenceEntry<K, V> previousAccess = this;
+
+      @Override
+      public ReferenceEntry<K, V> getPreviousInAccessQueue() {
+        return previousAccess;
+      }
+
+      @Override
+      public void setPreviousInAccessQueue(ReferenceEntry<K, V> previous) {
+        this.previousAccess = previous;
+      }
+    };
+
+    // implements Queue
+
+    @Override
+    public boolean offer(ReferenceEntry<K, V> entry) {
+      // unlink
+      connectAccessOrder(entry.getPreviousInAccessQueue(), entry.getNextInAccessQueue());
+
+      // add to tail
+      connectAccessOrder(head.getPreviousInAccessQueue(), entry);
+      connectAccessOrder(entry, head);
+
+      return true;
+    }
+
+    @Override
+    public ReferenceEntry<K, V> peek() {
+      ReferenceEntry<K, V> next = head.getNextInAccessQueue();
+      return (next == head) ? null : next;
+    }
+
+    @Override
+    public ReferenceEntry<K, V> poll() {
+      ReferenceEntry<K, V> next = head.getNextInAccessQueue();
+      if (next == head) {
+        return null;
+      }
+
+      remove(next);
+      return next;
+    }
+
+    @Override
+    @SuppressWarnings("unchecked")
+    public boolean remove(Object o) {
+      ReferenceEntry<K, V> e = (ReferenceEntry) o;
+      ReferenceEntry<K, V> previous = e.getPreviousInAccessQueue();
+      ReferenceEntry<K, V> next = e.getNextInAccessQueue();
+      connectAccessOrder(previous, next);
+      nullifyAccessOrder(e);
+
+      return next != NullEntry.INSTANCE;
+    }
+
+    @Override
+    @SuppressWarnings("unchecked")
+    public boolean contains(Object o) {
+      ReferenceEntry<K, V> e = (ReferenceEntry) o;
+      return e.getNextInAccessQueue() != NullEntry.INSTANCE;
+    }
+
+    @Override
+    public boolean isEmpty() {
+      return head.getNextInAccessQueue() == head;
+    }
+
+    @Override
+    public int size() {
+      int size = 0;
+      for (ReferenceEntry<K, V> e = head.getNextInAccessQueue(); e != head;
+          e = e.getNextInAccessQueue()) {
+        size++;
+      }
+      return size;
+    }
+
+    @Override
+    public void clear() {
+      ReferenceEntry<K, V> e = head.getNextInAccessQueue();
+      while (e != head) {
+        ReferenceEntry<K, V> next = e.getNextInAccessQueue();
+        nullifyAccessOrder(e);
+        e = next;
+      }
+
+      head.setNextInAccessQueue(head);
+      head.setPreviousInAccessQueue(head);
+    }
+
+    @Override
+    public Iterator<ReferenceEntry<K, V>> iterator() {
+      return new AbstractLinkedIterator<ReferenceEntry<K, V>>(peek()) {
+        @Override
+        protected ReferenceEntry<K, V> computeNext(ReferenceEntry<K, V> previous) {
+          ReferenceEntry<K, V> next = previous.getNextInAccessQueue();
+          return (next == head) ? null : next;
+        }
+      };
+    }
+  }
+
+  // Cache support
+
+  public void cleanUp() {
+    for (Segment<?, ?> segment : segments) {
+      segment.cleanUp();
+    }
+  }
+
+  // ConcurrentMap methods
+
+  @Override
+  public boolean isEmpty() {
+    /*
+     * Sum per-segment modCounts to avoid mis-reporting when elements are concurrently added and
+     * removed in one segment while checking another, in which case the table was never actually
+     * empty at any point. (The sum ensures accuracy up through at least 1<<31 per-segment
+     * modifications before recheck.)  Method containsValue() uses similar constructions for
+     * stability checks.
+     */
+    long sum = 0L;
+    Segment<K, V>[] segments = this.segments;
+    for (int i = 0; i < segments.length; ++i) {
+      if (segments[i].count != 0) {
+        return false;
+      }
+      sum += segments[i].modCount;
+    }
+
+    if (sum != 0L) { // recheck unless no modifications
+      for (int i = 0; i < segments.length; ++i) {
+        if (segments[i].count != 0) {
+          return false;
+        }
+        sum -= segments[i].modCount;
+      }
+      if (sum != 0L) {
+        return false;
+      }
+    }
+    return true;
+  }
+
+  long longSize() {
+    Segment<K, V>[] segments = this.segments;
+    long sum = 0;
+    for (int i = 0; i < segments.length; ++i) {
+      sum += segments[i].count;
+    }
+    return sum;
+  }
+
+  @Override
+  public int size() {
+    return Ints.saturatedCast(longSize());
+  }
+
+  @Override
+  @Nullable
+  public V get(@Nullable Object key) {
+    if (key == null) {
+      return null;
+    }
+    int hash = hash(key);
+    return segmentFor(hash).get(key, hash);
+  }
+
+  @Nullable
+  public V getIfPresent(Object key) {
+    int hash = hash(checkNotNull(key));
+    V value = segmentFor(hash).get(key, hash);
+    if (value == null) {
+      globalStatsCounter.recordMisses(1);
+    } else {
+      globalStatsCounter.recordHits(1);
+    }
+    return value;
+  }
+
+  V get(K key, CacheLoader<? super K, V> loader) throws ExecutionException {
+    int hash = hash(checkNotNull(key));
+    return segmentFor(hash).get(key, hash, loader);
+  }
+
+  V getOrLoad(K key) throws ExecutionException {
+    return get(key, defaultLoader);
+  }
+
+  ImmutableMap<K, V> getAllPresent(Iterable<? extends K> keys) {
+    int hits = 0;
+    int misses = 0;
+
+    Map<K, V> result = Maps.newLinkedHashMap();
+    for (K key : keys) {
+      V value = get(key);
+      if (value == null) {
+        misses++;
+      } else {
+        result.put(key, value);
+        hits++;
+      }
+    }
+    globalStatsCounter.recordHits(hits);
+    globalStatsCounter.recordMisses(misses);
+    return ImmutableMap.copyOf(result);
+  }
+
+  ImmutableMap<K, V> getAll(Iterable<? extends K> keys)
+      throws ExecutionException {
+    int hits = 0;
+    int misses = 0;
+
+    Map<K, V> result = Maps.newLinkedHashMap();
+    Set<K> keysToLoad = Sets.newLinkedHashSet();
+    for (K key : keys) {
+      V value = get(key);
+      if (!result.containsKey(key)) {
+        result.put(key, value);
+        if (value == null) {
+          misses++;
+          keysToLoad.add(key);
+        } else {
+          hits++;
+        }
+      }
+    }
+
+    try {
+      if (!keysToLoad.isEmpty()) {
+        try {
+          Map<K, V> newEntries = loadAll(keysToLoad, defaultLoader);
+          for (K key : keysToLoad) {
+            V value = newEntries.get(key);
+            if (value == null) {
+              throw new InvalidCacheLoadException("loadAll failed to return a value for " + key);
+            }
+            result.put(key, value);
+          }
+        } catch (UnsupportedLoadingOperationException e) {
+          // loadAll not implemented, fallback to load
+          for (K key : keysToLoad) {
+            misses--; // get will count this miss
+            result.put(key, get(key, defaultLoader));
+          }
+        }
+      }
+      return ImmutableMap.copyOf(result);
+    } finally {
+      globalStatsCounter.recordHits(hits);
+      globalStatsCounter.recordMisses(misses);
+    }
+  }
+
+  /**
+   * Returns the result of calling {@link CacheLoader#loadAll}, or null if {@code loader} doesn't
+   * implement {@code loadAll}.
+   */
+  @Nullable
+  Map<K, V> loadAll(Set<? extends K> keys, CacheLoader<? super K, V> loader)
+      throws ExecutionException {
+    Stopwatch stopwatch = new Stopwatch().start();
+    Map<K, V> result;
+    boolean success = false;
+    try {
+      @SuppressWarnings("unchecked") // safe since all keys extend K
+      Map<K, V> map = (Map<K, V>) loader.loadAll(keys);
+      result = map;
+      success = true;
+    } catch (UnsupportedLoadingOperationException e) {
+      success = true;
+      throw e;
+    } catch (RuntimeException e) {
+      throw new UncheckedExecutionException(e);
+    } catch (Exception e) {
+      throw new ExecutionException(e);
+    } catch (Error e) {
+      throw new ExecutionError(e);
+    } finally {
+      if (!success) {
+        globalStatsCounter.recordLoadException(stopwatch.elapsedTime(NANOSECONDS));
+      }
+    }
+
+    if (result == null) {
+      globalStatsCounter.recordLoadException(stopwatch.elapsedTime(NANOSECONDS));
+      throw new InvalidCacheLoadException(loader + " returned null map from loadAll");
+    }
+
+    stopwatch.stop();
+    // TODO(fry): batch by segment
+    boolean nullsPresent = false;
+    for (Map.Entry<K, V> entry : result.entrySet()) {
+      K key = entry.getKey();
+      V value = entry.getValue();
+      if (key == null || value == null) {
+        // delay failure until non-null entries are stored
+        nullsPresent = true;
+      } else {
+        put(key, value);
+      }
+    }
+
+    if (nullsPresent) {
+      globalStatsCounter.recordLoadException(stopwatch.elapsedTime(NANOSECONDS));
+      throw new InvalidCacheLoadException(loader + " returned null keys or values from loadAll");
+    }
+
+    // TODO(fry): record count of loaded entries
+    globalStatsCounter.recordLoadSuccess(stopwatch.elapsedTime(NANOSECONDS));
+    return result;
+  }
+
+  /**
+   * Returns the internal entry for the specified key. The entry may be loading, expired, or
+   * partially collected.
+   */
+  ReferenceEntry<K, V> getEntry(@Nullable Object key) {
+    // does not impact recency ordering
+    if (key == null) {
+      return null;
+    }
+    int hash = hash(key);
+    return segmentFor(hash).getEntry(key, hash);
+  }
+
+  /**
+   * Returns the live internal entry for the specified key.
+   */
+  ReferenceEntry<K, V> getLiveEntry(@Nullable Object key) {
+    // does not impact recency ordering
+    if (key == null) {
+      return null;
+    }
+    int hash = hash(key);
+    return segmentFor(hash).getLiveEntry(key, hash, ticker.read());
+  }
+
+  void refresh(K key) {
+    int hash = hash(checkNotNull(key));
+    segmentFor(hash).refresh(key, hash, defaultLoader);
+  }
+
+  @Override
+  public boolean containsKey(@Nullable Object key) {
+    // does not impact recency ordering
+    if (key == null) {
+      return false;
+    }
+    int hash = hash(key);
+    return segmentFor(hash).containsKey(key, hash);
+  }
+
+  @Override
+  public boolean containsValue(@Nullable Object value) {
+    // does not impact recency ordering
+    if (value == null) {
+      return false;
+    }
+
+    // This implementation is patterned after ConcurrentHashMap, but without the locking. The only
+    // way for it to return a false negative would be for the target value to jump around in the map
+    // such that none of the subsequent iterations observed it, despite the fact that at every point
+    // in time it was present somewhere int the map. This becomes increasingly unlikely as
+    // CONTAINS_VALUE_RETRIES increases, though without locking it is theoretically possible.
+    long now = ticker.read();
+    final Segment<K,V>[] segments = this.segments;
+    long last = -1L;
+    for (int i = 0; i < CONTAINS_VALUE_RETRIES; i++) {
+      long sum = 0L;
+      for (Segment<K, V> segment : segments) {
+        // ensure visibility of most recent completed write
+        @SuppressWarnings({"UnusedDeclaration", "unused"})
+        int c = segment.count; // read-volatile
+
+        AtomicReferenceArray<ReferenceEntry<K, V>> table = segment.table;
+        for (int j = 0 ; j < table.length(); j++) {
+          for (ReferenceEntry<K, V> e = table.get(j); e != null; e = e.getNext()) {
+            V v = segment.getLiveValue(e, now);
+            if (v != null && valueEquivalence.equivalent(value, v)) {
+              return true;
+            }
+          }
+        }
+        sum += segment.modCount;
+      }
+      if (sum == last) {
+        break;
+      }
+      last = sum;
+    }
+    return false;
+  }
+
+  @Override
+  public V put(K key, V value) {
+    checkNotNull(key);
+    checkNotNull(value);
+    int hash = hash(key);
+    return segmentFor(hash).put(key, hash, value, false);
+  }
+
+  @Override
+  public V putIfAbsent(K key, V value) {
+    checkNotNull(key);
+    checkNotNull(value);
+    int hash = hash(key);
+    return segmentFor(hash).put(key, hash, value, true);
+  }
+
+  @Override
+  public void putAll(Map<? extends K, ? extends V> m) {
+    for (Entry<? extends K, ? extends V> e : m.entrySet()) {
+      put(e.getKey(), e.getValue());
+    }
+  }
+
+  @Override
+  public V remove(@Nullable Object key) {
+    if (key == null) {
+      return null;
+    }
+    int hash = hash(key);
+    return segmentFor(hash).remove(key, hash);
+  }
+
+  @Override
+  public boolean remove(@Nullable Object key, @Nullable Object value) {
+    if (key == null || value == null) {
+      return false;
+    }
+    int hash = hash(key);
+    return segmentFor(hash).remove(key, hash, value);
+  }
+
+  @Override
+  public boolean replace(K key, @Nullable V oldValue, V newValue) {
+    checkNotNull(key);
+    checkNotNull(newValue);
+    if (oldValue == null) {
+      return false;
+    }
+    int hash = hash(key);
+    return segmentFor(hash).replace(key, hash, oldValue, newValue);
+  }
+
+  @Override
+  public V replace(K key, V value) {
+    checkNotNull(key);
+    checkNotNull(value);
+    int hash = hash(key);
+    return segmentFor(hash).replace(key, hash, value);
+  }
+
+  @Override
+  public void clear() {
+    for (Segment<K, V> segment : segments) {
+      segment.clear();
+    }
+  }
+
+  void invalidateAll(Iterable<?> keys) {
+    // TODO(fry): batch by segment
+    for (Object key : keys) {
+      remove(key);
+    }
+  }
+
+  Set<K> keySet;
+
+  @Override
+  public Set<K> keySet() {
+    // does not impact recency ordering
+    Set<K> ks = keySet;
+    return (ks != null) ? ks : (keySet = new KeySet());
+  }
+
+  Collection<V> values;
+
+  @Override
+  public Collection<V> values() {
+    // does not impact recency ordering
+    Collection<V> vs = values;
+    return (vs != null) ? vs : (values = new Values());
+  }
+
+  Set<Entry<K, V>> entrySet;
+
+  @Override
+  public Set<Entry<K, V>> entrySet() {
+    // does not impact recency ordering
+    Set<Entry<K, V>> es = entrySet;
+    return (es != null) ? es : (entrySet = new EntrySet());
+  }
+
+  // Iterator Support
+
+  abstract class HashIterator {
+
+    int nextSegmentIndex;
+    int nextTableIndex;
+    Segment<K, V> currentSegment;
+    AtomicReferenceArray<ReferenceEntry<K, V>> currentTable;
+    ReferenceEntry<K, V> nextEntry;
+    WriteThroughEntry nextExternal;
+    WriteThroughEntry lastReturned;
+
+    HashIterator() {
+      nextSegmentIndex = segments.length - 1;
+      nextTableIndex = -1;
+      advance();
+    }
+
+    final void advance() {
+      nextExternal = null;
+
+      if (nextInChain()) {
+        return;
+      }
+
+      if (nextInTable()) {
+        return;
+      }
+
+      while (nextSegmentIndex >= 0) {
+        currentSegment = segments[nextSegmentIndex--];
+        if (currentSegment.count != 0) {
+          currentTable = currentSegment.table;
+          nextTableIndex = currentTable.length() - 1;
+          if (nextInTable()) {
+            return;
+          }
+        }
+      }
+    }
+
+    /**
+     * Finds the next entry in the current chain. Returns true if an entry was found.
+     */
+    boolean nextInChain() {
+      if (nextEntry != null) {
+        for (nextEntry = nextEntry.getNext(); nextEntry != null; nextEntry = nextEntry.getNext()) {
+          if (advanceTo(nextEntry)) {
+            return true;
+          }
+        }
+      }
+      return false;
+    }
+
+    /**
+     * Finds the next entry in the current table. Returns true if an entry was found.
+     */
+    boolean nextInTable() {
+      while (nextTableIndex >= 0) {
+        if ((nextEntry = currentTable.get(nextTableIndex--)) != null) {
+          if (advanceTo(nextEntry) || nextInChain()) {
+            return true;
+          }
+        }
+      }
+      return false;
+    }
+
+    /**
+     * Advances to the given entry. Returns true if the entry was valid, false if it should be
+     * skipped.
+     */
+    boolean advanceTo(ReferenceEntry<K, V> entry) {
+      try {
+        long now = ticker.read();
+        K key = entry.getKey();
+        V value = getLiveValue(entry, now);
+        if (value != null) {
+          nextExternal = new WriteThroughEntry(key, value);
+          return true;
+        } else {
+          // Skip stale entry.
+          return false;
+        }
+      } finally {
+        currentSegment.postReadCleanup();
+      }
+    }
+
+    public boolean hasNext() {
+      return nextExternal != null;
+    }
+
+    WriteThroughEntry nextEntry() {
+      if (nextExternal == null) {
+        throw new NoSuchElementException();
+      }
+      lastReturned = nextExternal;
+      advance();
+      return lastReturned;
+    }
+
+    public void remove() {
+      checkState(lastReturned != null);
+      LocalCache.this.remove(lastReturned.getKey());
+      lastReturned = null;
+    }
+  }
+
+  final class KeyIterator extends HashIterator implements Iterator<K> {
+
+    @Override
+    public K next() {
+      return nextEntry().getKey();
+    }
+  }
+
+  final class ValueIterator extends HashIterator implements Iterator<V> {
+
+    @Override
+    public V next() {
+      return nextEntry().getValue();
+    }
+  }
+
+  /**
+   * Custom Entry class used by EntryIterator.next(), that relays setValue changes to the
+   * underlying map.
+   */
+  final class WriteThroughEntry implements Entry<K, V> {
+    final K key; // non-null
+    V value; // non-null
+
+    WriteThroughEntry(K key, V value) {
+      this.key = key;
+      this.value = value;
+    }
+
+    @Override
+    public K getKey() {
+      return key;
+    }
+
+    @Override
+    public V getValue() {
+      return value;
+    }
+
+    @Override
+    public boolean equals(@Nullable Object object) {
+      // Cannot use key and value equivalence
+      if (object instanceof Entry) {
+        Entry<?, ?> that = (Entry<?, ?>) object;
+        return key.equals(that.getKey()) && value.equals(that.getValue());
+      }
+      return false;
+    }
+
+    @Override
+    public int hashCode() {
+      // Cannot use key and value equivalence
+      return key.hashCode() ^ value.hashCode();
+    }
+
+    @Override
+    public V setValue(V newValue) {
+      throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Returns a string representation of the form <code>{key}={value}</code>.
+     */
+    @Override public String toString() {
+      return getKey() + "=" + getValue();
+    }
+  }
+
+  final class EntryIterator extends HashIterator implements Iterator<Entry<K, V>> {
+
+    @Override
+    public Entry<K, V> next() {
+      return nextEntry();
+    }
+  }
+
+  final class KeySet extends AbstractSet<K> {
+
+    @Override
+    public Iterator<K> iterator() {
+      return new KeyIterator();
+    }
+
+    @Override
+    public int size() {
+      return LocalCache.this.size();
+    }
+
+    @Override
+    public boolean isEmpty() {
+      return LocalCache.this.isEmpty();
+    }
+
+    @Override
+    public boolean contains(Object o) {
+      return LocalCache.this.containsKey(o);
+    }
+
+    @Override
+    public boolean remove(Object o) {
+      return LocalCache.this.remove(o) != null;
+    }
+
+    @Override
+    public void clear() {
+      LocalCache.this.clear();
+    }
+  }
+
+  final class Values extends AbstractCollection<V> {
+
+    @Override
+    public Iterator<V> iterator() {
+      return new ValueIterator();
+    }
+
+    @Override
+    public int size() {
+      return LocalCache.this.size();
+    }
+
+    @Override
+    public boolean isEmpty() {
+      return LocalCache.this.isEmpty();
+    }
+
+    @Override
+    public boolean contains(Object o) {
+      return LocalCache.this.containsValue(o);
+    }
+
+    @Override
+    public void clear() {
+      LocalCache.this.clear();
+    }
+  }
+
+  final class EntrySet extends AbstractSet<Entry<K, V>> {
+
+    @Override
+    public Iterator<Entry<K, V>> iterator() {
+      return new EntryIterator();
+    }
+
+    @Override
+    public boolean contains(Object o) {
+      if (!(o instanceof Entry)) {
+        return false;
+      }
+      Entry<?, ?> e = (Entry<?, ?>) o;
+      Object key = e.getKey();
+      if (key == null) {
+        return false;
+      }
+      V v = LocalCache.this.get(key);
+
+      return v != null && valueEquivalence.equivalent(e.getValue(), v);
+    }
+
+    @Override
+    public boolean remove(Object o) {
+      if (!(o instanceof Entry)) {
+        return false;
+      }
+      Entry<?, ?> e = (Entry<?, ?>) o;
+      Object key = e.getKey();
+      return key != null && LocalCache.this.remove(key, e.getValue());
+    }
+
+    @Override
+    public int size() {
+      return LocalCache.this.size();
+    }
+
+    @Override
+    public boolean isEmpty() {
+      return LocalCache.this.isEmpty();
+    }
+
+    @Override
+    public void clear() {
+      LocalCache.this.clear();
+    }
+  }
+
+  // Serialization Support
+
+  /**
+   * Serializes the configuration of a LocalCache, reconsitituting it as a Cache using
+   * CacheBuilder upon deserialization. An instance of this class is fit for use by the writeReplace
+   * of LocalManualCache.
+   *
+   * Unfortunately, readResolve() doesn't get called when a circular dependency is present, so the
+   * proxy must be able to behave as the cache itself.
+   */
+  static class ManualSerializationProxy<K, V>
+      extends ForwardingCache<K, V> implements Serializable {
+    private static final long serialVersionUID = 1;
+
+    final Strength keyStrength;
+    final Strength valueStrength;
+    final Equivalence<Object> keyEquivalence;
+    final Equivalence<Object> valueEquivalence;
+    final long expireAfterWriteNanos;
+    final long expireAfterAccessNanos;
+    final long maxWeight;
+    final Weigher<K, V> weigher;
+    final int concurrencyLevel;
+    final RemovalListener<? super K, ? super V> removalListener;
+    final Ticker ticker;
+    final CacheLoader<? super K, V> loader;
+
+    transient Cache<K, V> delegate;
+
+    ManualSerializationProxy(LocalCache<K, V> cache) {
+      this(
+          cache.keyStrength,
+          cache.valueStrength,
+          cache.keyEquivalence,
+          cache.valueEquivalence,
+          cache.expireAfterWriteNanos,
+          cache.expireAfterAccessNanos,
+          cache.maxWeight,
+          cache.weigher,
+          cache.concurrencyLevel,
+          cache.removalListener,
+          cache.ticker,
+          cache.defaultLoader);
+    }
+
+    private ManualSerializationProxy(
+        Strength keyStrength, Strength valueStrength,
+        Equivalence<Object> keyEquivalence, Equivalence<Object> valueEquivalence,
+        long expireAfterWriteNanos, long expireAfterAccessNanos, long maxWeight,
+        Weigher<K, V> weigher, int concurrencyLevel,
+        RemovalListener<? super K, ? super V> removalListener,
+        Ticker ticker, CacheLoader<? super K, V> loader) {
+      this.keyStrength = keyStrength;
+      this.valueStrength = valueStrength;
+      this.keyEquivalence = keyEquivalence;
+      this.valueEquivalence = valueEquivalence;
+      this.expireAfterWriteNanos = expireAfterWriteNanos;
+      this.expireAfterAccessNanos = expireAfterAccessNanos;
+      this.maxWeight = maxWeight;
+      this.weigher = weigher;
+      this.concurrencyLevel = concurrencyLevel;
+      this.removalListener = removalListener;
+      this.ticker = (ticker == Ticker.systemTicker() || ticker == NULL_TICKER)
+          ? null : ticker;
+      this.loader = loader;
+    }
+
+   CacheBuilder<Object, Object> recreateCacheBuilder() {
+      CacheBuilder<Object, Object> builder = CacheBuilder.newBuilder()
+          .setKeyStrength(keyStrength)
+          .setValueStrength(valueStrength)
+          .keyEquivalence(keyEquivalence)
+          .valueEquivalence(valueEquivalence)
+          .concurrencyLevel(concurrencyLevel);
+      builder.strictParsing = false;
+      builder.removalListener(removalListener);
+      if (expireAfterWriteNanos > 0) {
+        builder.expireAfterWrite(expireAfterWriteNanos, TimeUnit.NANOSECONDS);
+      }
+      if (expireAfterAccessNanos > 0) {
+        builder.expireAfterAccess(expireAfterAccessNanos, TimeUnit.NANOSECONDS);
+      }
+      if (weigher != OneWeigher.INSTANCE) {
+        builder.weigher(weigher);
+        if (maxWeight != UNSET_INT) {
+          builder.maximumWeight(maxWeight);
+        }
+      } else {
+        if (maxWeight != UNSET_INT) {
+          builder.maximumSize(maxWeight);
+        }
+      }
+      if (ticker != null) {
+        builder.ticker(ticker);
+      }
+      return builder;
+    }
+
+    private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
+      in.defaultReadObject();
+      CacheBuilder<Object, Object> builder = recreateCacheBuilder();
+      this.delegate = builder.build();
+    }
+
+    private Object readResolve() {
+      return delegate;
+    }
+
+    @Override
+    protected Cache<K, V> delegate() {
+      return delegate;
+    }
+  }
+
+  /**
+   * Serializes the configuration of a LocalCache, reconsitituting it as an LoadingCache using
+   * CacheBuilder upon deserialization. An instance of this class is fit for use by the writeReplace
+   * of LocalLoadingCache.
+   *
+   * Unfortunately, readResolve() doesn't get called when a circular dependency is present, so the
+   * proxy must be able to behave as the cache itself.
+   */
+  static final class LoadingSerializationProxy<K, V>
+      extends ManualSerializationProxy<K, V> implements LoadingCache<K, V>, Serializable {
+    private static final long serialVersionUID = 1;
+
+    transient LoadingCache<K, V> autoDelegate;
+
+    LoadingSerializationProxy(LocalCache<K, V> cache) {
+      super(cache);
+    }
+
+    private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
+      in.defaultReadObject();
+      CacheBuilder<Object, Object> builder = recreateCacheBuilder();
+      this.autoDelegate = builder.build(loader);
+    }
+
+    @Override
+    public V get(K key) throws ExecutionException {
+      return autoDelegate.get(key);
+    }
+
+    @Override
+    public V getUnchecked(K key) {
+      return autoDelegate.getUnchecked(key);
+    }
+
+    @Override
+    public ImmutableMap<K, V> getAll(Iterable<? extends K> keys) throws ExecutionException {
+      return autoDelegate.getAll(keys);
+    }
+
+    @Override
+    public final V apply(K key) {
+      return autoDelegate.apply(key);
+    }
+
+    @Override
+    public void refresh(K key) {
+      autoDelegate.refresh(key);
+    }
+
+    private Object readResolve() {
+      return autoDelegate;
+    }
+  }
+
+  static class LocalManualCache<K, V> implements Cache<K, V>, Serializable {
+    final LocalCache<K, V> localCache;
+
+    LocalManualCache(CacheBuilder<? super K, ? super V> builder) {
+      this(builder, null);
+    }
+
+    protected LocalManualCache(CacheBuilder<? super K, ? super V> builder,
+        CacheLoader<? super K, V> loader) {
+      this.localCache = new LocalCache<K, V>(builder, loader);
+    }
+
+    // Cache methods
+
+    @Override
+    @Nullable
+    public V getIfPresent(K key) {
+      return localCache.getIfPresent(key);
+    }
+
+    @Override
+    public V get(K key, final Callable<? extends V> valueLoader) throws ExecutionException {
+      checkNotNull(valueLoader);
+      return localCache.get(key, new CacheLoader<Object, V>() {
+        @Override
+        public V load(Object key) throws Exception {
+          return valueLoader.call();
+        }
+      });
+    }
+
+    @Override
+    public ImmutableMap<K, V> getAllPresent(Iterable<? extends K> keys) {
+      return localCache.getAllPresent(keys);
+    }
+
+    @Override
+    public void put(K key, V value) {
+      localCache.put(key, value);
+    }
+
+    @Override
+    public void invalidate(Object key) {
+      checkNotNull(key);
+      localCache.remove(key);
+    }
+
+    @Override
+    public void invalidateAll(Iterable<?> keys) {
+      localCache.invalidateAll(keys);
+    }
+
+    @Override
+    public void invalidateAll() {
+      localCache.clear();
+    }
+
+    @Override
+    public long size() {
+      return localCache.longSize();
+    }
+
+    @Override
+    public ConcurrentMap<K, V> asMap() {
+      return localCache;
+    }
+
+    @Override
+    public CacheStats stats() {
+      SimpleStatsCounter aggregator = new SimpleStatsCounter();
+      aggregator.incrementBy(localCache.globalStatsCounter);
+      for (Segment<K, V> segment : localCache.segments) {
+        aggregator.incrementBy(segment.statsCounter);
+      }
+      return aggregator.snapshot();
+    }
+
+    @Override
+    public void cleanUp() {
+      localCache.cleanUp();
+    }
+
+    /*
+     * These methods have been moved to LoadingCache, but they temporarily
+     * remain in Cache in Guava.
+     */
+
+    public V get(K key) throws ExecutionException {
+      return localCache.getOrLoad(key);
+    }
+
+    public V getUnchecked(K key) {
+      try {
+        return get(key);
+      } catch (ExecutionException e) {
+        throw new UncheckedExecutionException(e.getCause());
+      }
+    }
+
+    public final V apply(K key) {
+      return getUnchecked(key);
+    }
+
+    // Serialization Support
+
+    private static final long serialVersionUID = 1;
+
+    Object writeReplace() {
+      return new ManualSerializationProxy<K, V>(localCache);
+    }
+  }
+
+  static class LocalLoadingCache<K, V>
+      extends LocalManualCache<K, V> implements LoadingCache<K, V> {
+
+    LocalLoadingCache(CacheBuilder<? super K, ? super V> builder,
+        CacheLoader<? super K, V> loader) {
+      super(builder, checkNotNull(loader));
+    }
+
+    // Cache methods
+
+    @Override
+    public ImmutableMap<K, V> getAll(Iterable<? extends K> keys) throws ExecutionException {
+      return localCache.getAll(keys);
+    }
+
+    @Override
+    public void refresh(K key) {
+      localCache.refresh(key);
+    }
+
+    // Serialization Support
+
+    private static final long serialVersionUID = 1;
+
+    Object writeReplace() {
+      return new LoadingSerializationProxy<K, V>(localCache);
+    }
+  }
+}
diff --git a/guava/src/com/google/common/cache/RemovalCause.java b/guava/src/com/google/common/cache/RemovalCause.java
new file mode 100644
index 0000000..6574b0e
--- /dev/null
+++ b/guava/src/com/google/common/cache/RemovalCause.java
@@ -0,0 +1,97 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.cache;
+
+import com.google.common.annotations.Beta;
+
+import java.util.Iterator;
+import java.util.Map;
+import java.util.concurrent.ConcurrentMap;
+
+/**
+ * The reason why a cached entry was removed.
+ *
+ * @author Charles Fry
+ * @since 10.0
+ */
+@Beta
+public enum RemovalCause {
+  /**
+   * The entry was manually removed by the user. This can result from the user invoking
+   * {@link Cache#invalidate}, {@link Cache#invalidateAll(Iterable)}, {@link Cache#invalidateAll()},
+   * {@link Map#remove}, {@link ConcurrentMap#remove}, or {@link Iterator#remove}.
+   */
+  EXPLICIT {
+    @Override
+    boolean wasEvicted() {
+      return false;
+    }
+  },
+
+  /**
+   * The entry itself was not actually removed, but its value was replaced by the user. This can
+   * result from the user invoking {@link Cache#put}, {@link LoadingCache#refresh}, {@link Map#put},
+   * {@link Map#putAll}, {@link ConcurrentMap#replace(Object, Object)}, or
+   * {@link ConcurrentMap#replace(Object, Object, Object)}.
+   */
+  REPLACED {
+    @Override
+    boolean wasEvicted() {
+      return false;
+    }
+  },
+
+  /**
+   * The entry was removed automatically because its key or value was garbage-collected. This
+   * can occur when using {@link CacheBuilder#weakKeys}, {@link CacheBuilder#weakValues}, or
+   * {@link CacheBuilder#softValues}.
+   */
+  COLLECTED {
+    @Override
+    boolean wasEvicted() {
+      return true;
+    }
+  },
+
+  /**
+   * The entry's expiration timestamp has passed. This can occur when using
+   * {@link CacheBuilder#expireAfterWrite} or {@link CacheBuilder#expireAfterAccess}.
+   */
+  EXPIRED {
+    @Override
+    boolean wasEvicted() {
+      return true;
+    }
+  },
+
+  /**
+   * The entry was evicted due to size constraints. This can occur when using
+   * {@link CacheBuilder#maximumSize} or {@link CacheBuilder#maximumWeight}.
+   */
+  SIZE {
+    @Override
+    boolean wasEvicted() {
+      return true;
+    }
+  };
+
+  /**
+   * Returns {@code true} if there was an automatic removal due to eviction (the cause is neither
+   * {@link #EXPLICIT} nor {@link #REPLACED}).
+   */
+  abstract boolean wasEvicted();
+}
diff --git a/guava/src/com/google/common/cache/RemovalListener.java b/guava/src/com/google/common/cache/RemovalListener.java
new file mode 100644
index 0000000..e9b6c2c
--- /dev/null
+++ b/guava/src/com/google/common/cache/RemovalListener.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.cache;
+
+import com.google.common.annotations.Beta;
+
+/**
+ * An object that can receive a notification when an entry is removed from a cache. The removal
+ * resulting in notification could have occured to an entry being manually removed or replaced, or
+ * due to eviction resulting from timed expiration, exceeding a maximum size, or garbage
+ * collection.
+ *
+ * <p>An instance may be called concurrently by multiple threads to process different entries.
+ * Implementations of this interface should avoid performing blocking calls or synchronizing on
+ * shared resources.
+ *
+ * @param <K> the most general type of keys this listener can listen for; for
+ *     example {@code Object} if any key is acceptable
+ * @param <V> the most general type of values this listener can listen for; for
+ *     example {@code Object} if any key is acceptable
+ * @author Charles Fry
+ * @since 10.0
+ */
+@Beta
+public interface RemovalListener<K, V> {
+  /**
+   * Notifies the listener that a removal occurred at some point in the past.
+   */
+  // Technically should accept RemovalNotification<? extends K, ? extends V>, but because
+  // RemovalNotification is guaranteed covariant, let's make users' lives simpler.
+  void onRemoval(RemovalNotification<K, V> notification);
+}
diff --git a/guava/src/com/google/common/cache/RemovalListeners.java b/guava/src/com/google/common/cache/RemovalListeners.java
new file mode 100644
index 0000000..18292fd
--- /dev/null
+++ b/guava/src/com/google/common/cache/RemovalListeners.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.cache;
+
+import com.google.common.annotations.Beta;
+
+import java.util.concurrent.Executor;
+
+/**
+ * A collection of common removal listeners.
+ *
+ * @author Charles Fry
+ * @since 10.0
+ */
+@Beta
+public final class RemovalListeners {
+
+  private RemovalListeners() {}
+
+  /**
+   * Returns a {@code RemovalListener} which processes all eviction
+   * notifications using {@code executor}.
+   *
+   * @param listener the backing listener
+   * @param executor the executor with which removal notifications are
+   *     asynchronously executed
+   */
+  public static <K, V> RemovalListener<K, V> asynchronous(
+      final RemovalListener<K, V> listener, final Executor executor) {
+    return new RemovalListener<K, V>() {
+      @Override
+      public void onRemoval(final RemovalNotification<K, V> notification) {
+        executor.execute(new Runnable() {
+          @Override
+          public void run() {
+            listener.onRemoval(notification);
+          }
+        });
+      }
+    };
+  }
+
+}
diff --git a/guava/src/com/google/common/cache/RemovalNotification.java b/guava/src/com/google/common/cache/RemovalNotification.java
new file mode 100644
index 0000000..8e0066e
--- /dev/null
+++ b/guava/src/com/google/common/cache/RemovalNotification.java
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.cache;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.Beta;
+import com.google.common.base.Objects;
+
+import java.util.Map.Entry;
+
+import javax.annotation.Nullable;
+
+/**
+ * A notification of the removal of a single entry. The key and/or value may be null if they were
+ * already garbage collected.
+ *
+ * <p>Like other {@code Map.Entry} instances associated with {@code CacheBuilder}, this class holds
+ * strong references to the key and value, regardless of the type of references the cache may be
+ * using.
+ *
+ * @author Charles Fry
+ * @since 10.0
+ */
+@Beta
+public final class RemovalNotification<K, V> implements Entry<K, V> {
+  @Nullable private final K key;
+  @Nullable private final V value;
+  private final RemovalCause cause;
+
+  RemovalNotification(@Nullable K key, @Nullable V value, RemovalCause cause) {
+    this.key = key;
+    this.value = value;
+    this.cause = checkNotNull(cause);
+  }
+
+  /**
+   * Returns the cause for which the entry was removed.
+   */
+  public RemovalCause getCause() {
+    return cause;
+  }
+
+  /**
+   * Returns {@code true} if there was an automatic removal due to eviction (the cause is neither
+   * {@link RemovalCause#EXPLICIT} nor {@link RemovalCause#REPLACED}).
+   */
+  public boolean wasEvicted() {
+    return cause.wasEvicted();
+  }
+
+  @Nullable @Override public K getKey() {
+    return key;
+  }
+
+  @Nullable @Override public V getValue() {
+    return value;
+  }
+
+  @Override public final V setValue(V value){
+    throw new UnsupportedOperationException();
+  }
+
+  @Override public boolean equals(@Nullable Object object) {
+    if (object instanceof Entry) {
+      Entry<?, ?> that = (Entry<?, ?>) object;
+      return Objects.equal(this.getKey(), that.getKey())
+          && Objects.equal(this.getValue(), that.getValue());
+    }
+    return false;
+  }
+
+  @Override public int hashCode() {
+    K k = getKey();
+    V v = getValue();
+    return ((k == null) ? 0 : k.hashCode()) ^ ((v == null) ? 0 : v.hashCode());
+  }
+
+  /**
+   * Returns a string representation of the form <code>{key}={value}</code>.
+   */
+  @Override public String toString() {
+    return getKey() + "=" + getValue();
+  }
+  private static final long serialVersionUID = 0;
+}
diff --git a/guava/src/com/google/common/cache/Weigher.java b/guava/src/com/google/common/cache/Weigher.java
new file mode 100644
index 0000000..bbb0a33
--- /dev/null
+++ b/guava/src/com/google/common/cache/Weigher.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.cache;
+
+import com.google.common.annotations.Beta;
+
+/**
+ * Calculates the weights of cache entries.
+ *
+ * @author fry@google.com (Charles Fry)
+ * @since 11.0
+ */
+@Beta
+public interface Weigher<K, V> {
+
+  /**
+   * Returns the weight of a cache entry. There is no unit for entry weights; rather they are simply
+   * relative to each other.
+   *
+   * @return the weight of the entry; must be non-negative
+   */
+  int weigh(K key, V value);
+
+}
diff --git a/guava/src/com/google/common/cache/package-info.java b/guava/src/com/google/common/cache/package-info.java
new file mode 100644
index 0000000..1c5391c
--- /dev/null
+++ b/guava/src/com/google/common/cache/package-info.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+/**
+ * This package contains caching utilities.
+ *
+ * <p>The core interface used to represent caches is {@link com.google.common.cache.Cache}.
+ * In-memory caches can be configured and created using
+ * {@link com.google.common.cache.CacheBuilder}, with cache entries being loaded by
+ * {@link com.google.common.cache.CacheLoader}. Statistics about cache performance are exposed using
+ * {@link com.google.common.cache.CacheStats}.
+ *
+ * <p>This package is a part of the open-source
+ * <a href="http://guava-libraries.googlecode.com">Guava libraries</a>.
+ *
+ * @author Charles Fry
+ */
+@ParametersAreNonnullByDefault
+package com.google.common.cache;
+
+import javax.annotation.ParametersAreNonnullByDefault;
diff --git a/guava/src/com/google/common/collect/AbstractBiMap.java b/guava/src/com/google/common/collect/AbstractBiMap.java
new file mode 100644
index 0000000..2a94f88
--- /dev/null
+++ b/guava/src/com/google/common/collect/AbstractBiMap.java
@@ -0,0 +1,414 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkState;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.base.Objects;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * A general-purpose bimap implementation using any two backing {@code Map}
+ * instances.
+ *
+ * <p>Note that this class contains {@code equals()} calls that keep it from
+ * supporting {@code IdentityHashMap} backing maps.
+ *
+ * @author Kevin Bourrillion
+ * @author Mike Bostock
+ */
+@GwtCompatible(emulated = true)
+abstract class AbstractBiMap<K, V> extends ForwardingMap<K, V>
+    implements BiMap<K, V>, Serializable {
+
+  private transient Map<K, V> delegate;
+  private transient AbstractBiMap<V, K> inverse;
+
+  /** Package-private constructor for creating a map-backed bimap. */
+  AbstractBiMap(Map<K, V> forward, Map<V, K> backward) {
+    setDelegates(forward, backward);
+  }
+
+  /** Private constructor for inverse bimap. */
+  private AbstractBiMap(Map<K, V> backward, AbstractBiMap<V, K> forward) {
+    delegate = backward;
+    inverse = forward;
+  }
+
+  @Override protected Map<K, V> delegate() {
+    return delegate;
+  }
+
+  /**
+   * Specifies the delegate maps going in each direction. Called by the
+   * constructor and by subclasses during deserialization.
+   */
+  void setDelegates(Map<K, V> forward, Map<V, K> backward) {
+    checkState(delegate == null);
+    checkState(inverse == null);
+    checkArgument(forward.isEmpty());
+    checkArgument(backward.isEmpty());
+    checkArgument(forward != backward);
+    delegate = forward;
+    inverse = new Inverse<V, K>(backward, this);
+  }
+
+  void setInverse(AbstractBiMap<V, K> inverse) {
+    this.inverse = inverse;
+  }
+
+  // Query Operations (optimizations)
+
+  @Override public boolean containsValue(Object value) {
+    return inverse.containsKey(value);
+  }
+
+  // Modification Operations
+
+  @Override public V put(K key, V value) {
+    return putInBothMaps(key, value, false);
+  }
+
+  @Override
+  public V forcePut(K key, V value) {
+    return putInBothMaps(key, value, true);
+  }
+
+  private V putInBothMaps(@Nullable K key, @Nullable V value, boolean force) {
+    boolean containedKey = containsKey(key);
+    if (containedKey && Objects.equal(value, get(key))) {
+      return value;
+    }
+    if (force) {
+      inverse().remove(value);
+    } else {
+      checkArgument(!containsValue(value), "value already present: %s", value);
+    }
+    V oldValue = delegate.put(key, value);
+    updateInverseMap(key, containedKey, oldValue, value);
+    return oldValue;
+  }
+
+  private void updateInverseMap(
+      K key, boolean containedKey, V oldValue, V newValue) {
+    if (containedKey) {
+      removeFromInverseMap(oldValue);
+    }
+    inverse.delegate.put(newValue, key);
+  }
+
+  @Override public V remove(Object key) {
+    return containsKey(key) ? removeFromBothMaps(key) : null;
+  }
+
+  private V removeFromBothMaps(Object key) {
+    V oldValue = delegate.remove(key);
+    removeFromInverseMap(oldValue);
+    return oldValue;
+  }
+
+  private void removeFromInverseMap(V oldValue) {
+    inverse.delegate.remove(oldValue);
+  }
+
+  // Bulk Operations
+
+  @Override public void putAll(Map<? extends K, ? extends V> map) {
+    for (Entry<? extends K, ? extends V> entry : map.entrySet()) {
+      put(entry.getKey(), entry.getValue());
+    }
+  }
+
+  @Override public void clear() {
+    delegate.clear();
+    inverse.delegate.clear();
+  }
+
+  // Views
+
+  @Override
+  public BiMap<V, K> inverse() {
+    return inverse;
+  }
+
+  private transient Set<K> keySet;
+
+  @Override public Set<K> keySet() {
+    Set<K> result = keySet;
+    return (result == null) ? keySet = new KeySet() : result;
+  }
+
+  private class KeySet extends ForwardingSet<K> {
+    @Override protected Set<K> delegate() {
+      return delegate.keySet();
+    }
+
+    @Override public void clear() {
+      AbstractBiMap.this.clear();
+    }
+
+    @Override public boolean remove(Object key) {
+      if (!contains(key)) {
+        return false;
+      }
+      removeFromBothMaps(key);
+      return true;
+    }
+
+    @Override public boolean removeAll(Collection<?> keysToRemove) {
+      return standardRemoveAll(keysToRemove);
+    }
+
+    @Override public boolean retainAll(Collection<?> keysToRetain) {
+      return standardRetainAll(keysToRetain);
+    }
+
+    @Override public Iterator<K> iterator() {
+      final Iterator<Entry<K, V>> iterator = delegate.entrySet().iterator();
+      return new Iterator<K>() {
+        Entry<K, V> entry;
+
+        @Override
+        public boolean hasNext() {
+          return iterator.hasNext();
+        }
+        @Override
+        public K next() {
+          entry = iterator.next();
+          return entry.getKey();
+        }
+        @Override
+        public void remove() {
+          checkState(entry != null);
+          V value = entry.getValue();
+          iterator.remove();
+          removeFromInverseMap(value);
+        }
+      };
+    }
+  }
+
+  private transient Set<V> valueSet;
+
+  @Override public Set<V> values() {
+    /*
+     * We can almost reuse the inverse's keySet, except we have to fix the
+     * iteration order so that it is consistent with the forward map.
+     */
+    Set<V> result = valueSet;
+    return (result == null) ? valueSet = new ValueSet() : result;
+  }
+
+  private class ValueSet extends ForwardingSet<V> {
+    final Set<V> valuesDelegate = inverse.keySet();
+
+    @Override protected Set<V> delegate() {
+      return valuesDelegate;
+    }
+
+    @Override public Iterator<V> iterator() {
+      final Iterator<V> iterator = delegate.values().iterator();
+      return new Iterator<V>() {
+        V valueToRemove;
+
+        @Override public boolean hasNext() {
+          return iterator.hasNext();
+        }
+
+        @Override public V next() {
+          return valueToRemove = iterator.next();
+        }
+
+        @Override public void remove() {
+          iterator.remove();
+          removeFromInverseMap(valueToRemove);
+        }
+      };
+    }
+
+    @Override public Object[] toArray() {
+      return standardToArray();
+    }
+
+    @Override public <T> T[] toArray(T[] array) {
+      return standardToArray(array);
+    }
+
+    @Override public String toString() {
+      return standardToString();
+    }
+  }
+
+  private transient Set<Entry<K, V>> entrySet;
+
+  @Override public Set<Entry<K, V>> entrySet() {
+    Set<Entry<K, V>> result = entrySet;
+    return (result == null) ? entrySet = new EntrySet() : result;
+  }
+
+  private class EntrySet extends ForwardingSet<Entry<K, V>> {
+    final Set<Entry<K, V>> esDelegate = delegate.entrySet();
+
+    @Override protected Set<Entry<K, V>> delegate() {
+      return esDelegate;
+    }
+
+    @Override public void clear() {
+      AbstractBiMap.this.clear();
+    }
+
+    @Override public boolean remove(Object object) {
+      if (!esDelegate.contains(object)) {
+        return false;
+      }
+
+      // safe because esDelgate.contains(object).
+      Entry<?, ?> entry = (Entry<?, ?>) object;
+      inverse.delegate.remove(entry.getValue());
+      /*
+       * Remove the mapping in inverse before removing from esDelegate because
+       * if entry is part of esDelegate, entry might be invalidated after the
+       * mapping is removed from esDelegate.
+       */
+      esDelegate.remove(entry);
+      return true;
+    }
+
+    @Override public Iterator<Entry<K, V>> iterator() {
+      final Iterator<Entry<K, V>> iterator = esDelegate.iterator();
+      return new Iterator<Entry<K, V>>() {
+        Entry<K, V> entry;
+
+        @Override public boolean hasNext() {
+          return iterator.hasNext();
+        }
+
+        @Override public Entry<K, V> next() {
+          entry = iterator.next();
+          final Entry<K, V> finalEntry = entry;
+
+          return new ForwardingMapEntry<K, V>() {
+            @Override protected Entry<K, V> delegate() {
+              return finalEntry;
+            }
+
+            @Override public V setValue(V value) {
+              // Preconditions keep the map and inverse consistent.
+              checkState(contains(this), "entry no longer in map");
+              // similar to putInBothMaps, but set via entry
+              if (Objects.equal(value, getValue())) {
+                return value;
+              }
+              checkArgument(!containsValue(value),
+                  "value already present: %s", value);
+              V oldValue = finalEntry.setValue(value);
+              checkState(Objects.equal(value, get(getKey())),
+                  "entry no longer in map");
+              updateInverseMap(getKey(), true, oldValue, value);
+              return oldValue;
+            }
+          };
+        }
+
+        @Override public void remove() {
+          checkState(entry != null);
+          V value = entry.getValue();
+          iterator.remove();
+          removeFromInverseMap(value);
+        }
+      };
+    }
+
+    // See java.util.Collections.CheckedEntrySet for details on attacks.
+
+    @Override public Object[] toArray() {
+      return standardToArray();
+    }
+    @Override public <T> T[] toArray(T[] array) {
+      return standardToArray(array);
+    }
+    @Override public boolean contains(Object o) {
+      return Maps.containsEntryImpl(delegate(), o);
+    }
+    @Override public boolean containsAll(Collection<?> c) {
+      return standardContainsAll(c);
+    }
+    @Override public boolean removeAll(Collection<?> c) {
+      return standardRemoveAll(c);
+    }
+    @Override public boolean retainAll(Collection<?> c) {
+      return standardRetainAll(c);
+    }
+  }
+
+  /** The inverse of any other {@code AbstractBiMap} subclass. */
+  private static class Inverse<K, V> extends AbstractBiMap<K, V> {
+    private Inverse(Map<K, V> backward, AbstractBiMap<V, K> forward) {
+      super(backward, forward);
+    }
+
+    /*
+     * Serialization stores the forward bimap, the inverse of this inverse.
+     * Deserialization calls inverse() on the forward bimap and returns that
+     * inverse.
+     *
+     * If a bimap and its inverse are serialized together, the deserialized
+     * instances have inverse() methods that return the other.
+     */
+
+    /**
+     * @serialData the forward bimap
+     */
+    @GwtIncompatible("java.io.ObjectOuputStream")
+    private void writeObject(ObjectOutputStream stream) throws IOException {
+      stream.defaultWriteObject();
+      stream.writeObject(inverse());
+    }
+
+    @GwtIncompatible("java.io.ObjectInputStream")
+    @SuppressWarnings("unchecked") // reading data stored by writeObject
+    private void readObject(ObjectInputStream stream)
+        throws IOException, ClassNotFoundException {
+      stream.defaultReadObject();
+      setInverse((AbstractBiMap<V, K>) stream.readObject());
+    }
+
+    @GwtIncompatible("Not needed in the emulated source.")
+    Object readResolve() {
+      return inverse().inverse();
+    }
+
+    @GwtIncompatible("Not needed in emulated source.")
+    private static final long serialVersionUID = 0;
+  }
+
+  @GwtIncompatible("Not needed in emulated source.")
+  private static final long serialVersionUID = 0;
+}
diff --git a/guava/src/com/google/common/collect/AbstractIndexedListIterator.java b/guava/src/com/google/common/collect/AbstractIndexedListIterator.java
new file mode 100644
index 0000000..a58a2a0
--- /dev/null
+++ b/guava/src/com/google/common/collect/AbstractIndexedListIterator.java
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkPositionIndex;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.ListIterator;
+import java.util.NoSuchElementException;
+
+/**
+ * This class provides a skeletal implementation of the {@link ListIterator}
+ * interface across a fixed number of elements that may be retrieved by
+ * position. It does not support {@link #remove}, {@link #set}, or {@link #add}.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible
+abstract class AbstractIndexedListIterator<E>
+    extends UnmodifiableListIterator<E> {
+  private final int size;
+  private int position;
+
+  /**
+   * Returns the element with the specified index. This method is called by
+   * {@link #next()}.
+   */
+  protected abstract E get(int index);
+
+  /**
+   * Constructs an iterator across a sequence of the given size whose initial
+   * position is 0. That is, the first call to {@link #next()} will return the
+   * first element (or throw {@link NoSuchElementException} if {@code size} is
+   * zero).
+   *
+   * @throws IllegalArgumentException if {@code size} is negative
+   */
+  protected AbstractIndexedListIterator(int size) {
+    this(size, 0);
+  }
+
+  /**
+   * Constructs an iterator across a sequence of the given size with the given
+   * initial position. That is, the first call to {@link #nextIndex()} will
+   * return {@code position}, and the first call to {@link #next()} will return
+   * the element at that index, if available. Calls to {@link #previous()} can
+   * retrieve the preceding {@code position} elements.
+   *
+   * @throws IndexOutOfBoundsException if {@code position} is negative or is
+   *         greater than {@code size}
+   * @throws IllegalArgumentException if {@code size} is negative
+   */
+  protected AbstractIndexedListIterator(int size, int position) {
+    checkPositionIndex(position, size);
+    this.size = size;
+    this.position = position;
+  }
+
+  @Override
+  public final boolean hasNext() {
+    return position < size;
+  }
+
+  @Override
+  public final E next() {
+    if (!hasNext()) {
+      throw new NoSuchElementException();
+    }
+    return get(position++);
+  }
+
+  @Override
+  public final int nextIndex() {
+    return position;
+  }
+
+  @Override
+  public final boolean hasPrevious() {
+    return position > 0;
+  }
+
+  @Override
+  public final E previous() {
+    if (!hasPrevious()) {
+      throw new NoSuchElementException();
+    }
+    return get(--position);
+  }
+
+  @Override
+  public final int previousIndex() {
+    return position - 1;
+  }
+}
diff --git a/guava/src/com/google/common/collect/AbstractIterator.java b/guava/src/com/google/common/collect/AbstractIterator.java
new file mode 100644
index 0000000..b81a69c
--- /dev/null
+++ b/guava/src/com/google/common/collect/AbstractIterator.java
@@ -0,0 +1,173 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkState;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.NoSuchElementException;
+
+/**
+ * This class provides a skeletal implementation of the {@code Iterator}
+ * interface, to make this interface easier to implement for certain types of
+ * data sources.
+ *
+ * <p>{@code Iterator} requires its implementations to support querying the
+ * end-of-data status without changing the iterator's state, using the {@link
+ * #hasNext} method. But many data sources, such as {@link
+ * java.io.Reader#read()}, do not expose this information; the only way to
+ * discover whether there is any data left is by trying to retrieve it. These
+ * types of data sources are ordinarily difficult to write iterators for. But
+ * using this class, one must implement only the {@link #computeNext} method,
+ * and invoke the {@link #endOfData} method when appropriate.
+ *
+ * <p>Another example is an iterator that skips over null elements in a backing
+ * iterator. This could be implemented as: <pre>   {@code
+ *
+ *   public static Iterator<String> skipNulls(final Iterator<String> in) {
+ *     return new AbstractIterator<String>() {
+ *       protected String computeNext() {
+ *         while (in.hasNext()) {
+ *           String s = in.next();
+ *           if (s != null) {
+ *             return s;
+ *           }
+ *         }
+ *         return endOfData();
+ *       }
+ *     };
+ *   }}</pre>
+ *
+ * This class supports iterators that include null elements.
+ *
+ * @author Kevin Bourrillion
+ * @since 2.0 (imported from Google Collections Library)
+ */
+// When making changes to this class, please also update the copy at
+// com.google.common.base.AbstractIterator
+@GwtCompatible
+public abstract class AbstractIterator<T> extends UnmodifiableIterator<T> {
+  private State state = State.NOT_READY;
+
+  /** Constructor for use by subclasses. */
+  protected AbstractIterator() {}
+
+  private enum State {
+    /** We have computed the next element and haven't returned it yet. */
+    READY,
+
+    /** We haven't yet computed or have already returned the element. */
+    NOT_READY,
+
+    /** We have reached the end of the data and are finished. */
+    DONE,
+
+    /** We've suffered an exception and are kaput. */
+    FAILED,
+  }
+
+  private T next;
+
+  /**
+   * Returns the next element. <b>Note:</b> the implementation must call {@link
+   * #endOfData()} when there are no elements left in the iteration. Failure to
+   * do so could result in an infinite loop.
+   *
+   * <p>The initial invocation of {@link #hasNext()} or {@link #next()} calls
+   * this method, as does the first invocation of {@code hasNext} or {@code
+   * next} following each successful call to {@code next}. Once the
+   * implementation either invokes {@code endOfData} or throws an exception,
+   * {@code computeNext} is guaranteed to never be called again.
+   *
+   * <p>If this method throws an exception, it will propagate outward to the
+   * {@code hasNext} or {@code next} invocation that invoked this method. Any
+   * further attempts to use the iterator will result in an {@link
+   * IllegalStateException}.
+   *
+   * <p>The implementation of this method may not invoke the {@code hasNext},
+   * {@code next}, or {@link #peek()} methods on this instance; if it does, an
+   * {@code IllegalStateException} will result.
+   *
+   * @return the next element if there was one. If {@code endOfData} was called
+   *     during execution, the return value will be ignored.
+   * @throws RuntimeException if any unrecoverable error happens. This exception
+   *     will propagate outward to the {@code hasNext()}, {@code next()}, or
+   *     {@code peek()} invocation that invoked this method. Any further
+   *     attempts to use the iterator will result in an
+   *     {@link IllegalStateException}.
+   */
+  protected abstract T computeNext();
+
+  /**
+   * Implementations of {@link #computeNext} <b>must</b> invoke this method when
+   * there are no elements left in the iteration.
+   *
+   * @return {@code null}; a convenience so your {@code computeNext}
+   *     implementation can use the simple statement {@code return endOfData();}
+   */
+  protected final T endOfData() {
+    state = State.DONE;
+    return null;
+  }
+
+  @Override
+  public final boolean hasNext() {
+    checkState(state != State.FAILED);
+    switch (state) {
+      case DONE:
+        return false;
+      case READY:
+        return true;
+      default:
+    }
+    return tryToComputeNext();
+  }
+
+  private boolean tryToComputeNext() {
+    state = State.FAILED; // temporary pessimism
+    next = computeNext();
+    if (state != State.DONE) {
+      state = State.READY;
+      return true;
+    }
+    return false;
+  }
+
+  @Override
+  public final T next() {
+    if (!hasNext()) {
+      throw new NoSuchElementException();
+    }
+    state = State.NOT_READY;
+    return next;
+  }
+
+  /**
+   * Returns the next element in the iteration without advancing the iteration,
+   * according to the contract of {@link PeekingIterator#peek()}.
+   *
+   * <p>Implementations of {@code AbstractIterator} that wish to expose this
+   * functionality should implement {@code PeekingIterator}.
+   */
+  public final T peek() {
+    if (!hasNext()) {
+      throw new NoSuchElementException();
+    }
+    return next;
+  }
+}
diff --git a/guava/src/com/google/common/collect/AbstractLinkedIterator.java b/guava/src/com/google/common/collect/AbstractLinkedIterator.java
new file mode 100644
index 0000000..e796b9b
--- /dev/null
+++ b/guava/src/com/google/common/collect/AbstractLinkedIterator.java
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.NoSuchElementException;
+
+import javax.annotation.Nullable;
+
+/**
+ * This class provides a skeletal implementation of the {@code Iterator}
+ * interface for sequences whose next element can always be derived from the
+ * previous element. Null elements are not supported, nor is the
+ * {@link #remove()} method.
+ *
+ * <p>Example: <pre>   {@code
+ *
+ *   Iterator<Integer> powersOfTwo = new AbstractLinkedIterator<Integer>(1) {
+ *     protected Integer computeNext(Integer previous) {
+ *       return (previous == 1 << 30) ? null : previous * 2;
+ *     }
+ *   };}</pre>
+ *
+ * @author Chris Povirk
+ * @since 8.0
+ */
+@Beta
+@GwtCompatible
+public abstract class AbstractLinkedIterator<T>
+    extends UnmodifiableIterator<T> {
+  private T nextOrNull;
+
+  /**
+   * Creates a new iterator with the given first element, or, if {@code
+   * firstOrNull} is null, creates a new empty iterator.
+   */
+  protected AbstractLinkedIterator(@Nullable T firstOrNull) {
+    this.nextOrNull = firstOrNull;
+  }
+
+  /**
+   * Returns the element that follows {@code previous}, or returns {@code null}
+   * if no elements remain. This method is invoked during each call to
+   * {@link #next()} in order to compute the result of a <i>future</i> call to
+   * {@code next()}.
+   */
+  protected abstract T computeNext(T previous);
+
+  @Override
+  public final boolean hasNext() {
+    return nextOrNull != null;
+  }
+
+  @Override
+  public final T next() {
+    if (!hasNext()) {
+      throw new NoSuchElementException();
+    }
+    try {
+      return nextOrNull;
+    } finally {
+      nextOrNull = computeNext(nextOrNull);
+    }
+  }
+}
diff --git a/guava/src/com/google/common/collect/AbstractListMultimap.java b/guava/src/com/google/common/collect/AbstractListMultimap.java
new file mode 100644
index 0000000..ad24011
--- /dev/null
+++ b/guava/src/com/google/common/collect/AbstractListMultimap.java
@@ -0,0 +1,120 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import javax.annotation.Nullable;
+
+/**
+ * Basic implementation of the {@link ListMultimap} interface. It's a wrapper
+ * around {@link AbstractMultimap} that converts the returned collections into
+ * {@code Lists}. The {@link #createCollection} method must return a {@code
+ * List}.
+ *
+ * @author Jared Levy
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible
+abstract class AbstractListMultimap<K, V>
+    extends AbstractMultimap<K, V> implements ListMultimap<K, V> {
+  /**
+   * Creates a new multimap that uses the provided map.
+   *
+   * @param map place to store the mapping from each key to its corresponding
+   *     values
+   */
+  protected AbstractListMultimap(Map<K, Collection<V>> map) {
+    super(map);
+  }
+
+  @Override abstract List<V> createCollection();
+
+  // Following Javadoc copied from ListMultimap.
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>Because the values for a given key may have duplicates and follow the
+   * insertion ordering, this method returns a {@link List}, instead of the
+   * {@link Collection} specified in the {@link Multimap} interface.
+   */
+  @Override public List<V> get(@Nullable K key) {
+    return (List<V>) super.get(key);
+  }
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>Because the values for a given key may have duplicates and follow the
+   * insertion ordering, this method returns a {@link List}, instead of the
+   * {@link Collection} specified in the {@link Multimap} interface.
+   */
+  @Override public List<V> removeAll(@Nullable Object key) {
+    return (List<V>) super.removeAll(key);
+  }
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>Because the values for a given key may have duplicates and follow the
+   * insertion ordering, this method returns a {@link List}, instead of the
+   * {@link Collection} specified in the {@link Multimap} interface.
+   */
+  @Override public List<V> replaceValues(
+      @Nullable K key, Iterable<? extends V> values) {
+    return (List<V>) super.replaceValues(key, values);
+  }
+
+  /**
+   * Stores a key-value pair in the multimap.
+   *
+   * @param key key to store in the multimap
+   * @param value value to store in the multimap
+   * @return {@code true} always
+   */
+  @Override public boolean put(@Nullable K key, @Nullable V value) {
+    return super.put(key, value);
+  }
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>Though the method signature doesn't say so explicitly, the returned map
+   * has {@link List} values.
+   */
+  @Override public Map<K, Collection<V>> asMap() {
+    return super.asMap();
+  }
+
+  /**
+   * Compares the specified object to this multimap for equality.
+   *
+   * <p>Two {@code ListMultimap} instances are equal if, for each key, they
+   * contain the same values in the same order. If the value orderings disagree,
+   * the multimaps will not be considered equal.
+   */
+  @Override public boolean equals(@Nullable Object object) {
+    return super.equals(object);
+  }
+
+  private static final long serialVersionUID = 6588350623831699109L;
+}
diff --git a/guava/src/com/google/common/collect/AbstractMapBasedMultiset.java b/guava/src/com/google/common/collect/AbstractMapBasedMultiset.java
new file mode 100644
index 0000000..362386c
--- /dev/null
+++ b/guava/src/com/google/common/collect/AbstractMapBasedMultiset.java
@@ -0,0 +1,406 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkState;
+import static com.google.common.collect.Multisets.checkNonnegative;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.primitives.Ints;
+
+import java.io.InvalidObjectException;
+import java.io.ObjectStreamException;
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.ConcurrentModificationException;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * Basic implementation of {@code Multiset<E>} backed by an instance of {@code
+ * Map<E, AtomicInteger>}.
+ *
+ * <p>For serialization to work, the subclass must specify explicit {@code
+ * readObject} and {@code writeObject} methods.
+ *
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible(emulated = true)
+abstract class AbstractMapBasedMultiset<E> extends AbstractMultiset<E>
+    implements Serializable {
+
+  private transient Map<E, Count> backingMap;
+
+  /*
+   * Cache the size for efficiency. Using a long lets us avoid the need for
+   * overflow checking and ensures that size() will function correctly even if
+   * the multiset had once been larger than Integer.MAX_VALUE.
+   */
+  private transient long size;
+
+  /** Standard constructor. */
+  protected AbstractMapBasedMultiset(Map<E, Count> backingMap) {
+    this.backingMap = checkNotNull(backingMap);
+    this.size = super.size();
+  }
+
+  Map<E, Count> backingMap() {
+    return backingMap;
+  }
+
+  /** Used during deserialization only. The backing map must be empty. */
+  void setBackingMap(Map<E, Count> backingMap) {
+    this.backingMap = backingMap;
+  }
+
+  // Required Implementations
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>Invoking {@link Multiset.Entry#getCount} on an entry in the returned
+   * set always returns the current count of that element in the multiset, as
+   * opposed to the count at the time the entry was retrieved.
+   */
+  @Override
+  public Set<Multiset.Entry<E>> entrySet() {
+    return super.entrySet();
+  }
+
+  @Override
+  Iterator<Entry<E>> entryIterator() {
+    final Iterator<Map.Entry<E, Count>> backingEntries =
+        backingMap.entrySet().iterator();
+    return new Iterator<Multiset.Entry<E>>() {
+      Map.Entry<E, Count> toRemove;
+
+      @Override
+      public boolean hasNext() {
+        return backingEntries.hasNext();
+      }
+
+      @Override
+      public Multiset.Entry<E> next() {
+        final Map.Entry<E, Count> mapEntry = backingEntries.next();
+        toRemove = mapEntry;
+        return new Multisets.AbstractEntry<E>() {
+          @Override
+          public E getElement() {
+            return mapEntry.getKey();
+          }
+          @Override
+          public int getCount() {
+            int count = mapEntry.getValue().get();
+            if (count == 0) {
+              Count frequency = backingMap.get(getElement());
+              if (frequency != null) {
+                count = frequency.get();
+              }
+            }
+            return count;
+          }
+        };
+      }
+
+      @Override
+      public void remove() {
+        checkState(toRemove != null,
+            "no calls to next() since the last call to remove()");
+        size -= toRemove.getValue().getAndSet(0);
+        backingEntries.remove();
+        toRemove = null;
+      }
+    };
+  }
+
+  @Override
+  public void clear() {
+    for (Count frequency : backingMap.values()) {
+      frequency.set(0);
+    }
+    backingMap.clear();
+    size = 0L;
+  }
+
+  @Override
+  int distinctElements() {
+    return backingMap.size();
+  }
+
+  // Optimizations - Query Operations
+
+  @Override public int size() {
+    return Ints.saturatedCast(size);
+  }
+
+  @Override public Iterator<E> iterator() {
+    return new MapBasedMultisetIterator();
+  }
+
+  /*
+   * Not subclassing AbstractMultiset$MultisetIterator because next() needs to
+   * retrieve the Map.Entry<E, AtomicInteger> entry, which can then be used for
+   * a more efficient remove() call.
+   */
+  private class MapBasedMultisetIterator implements Iterator<E> {
+    final Iterator<Map.Entry<E, Count>> entryIterator;
+    Map.Entry<E, Count> currentEntry;
+    int occurrencesLeft;
+    boolean canRemove;
+
+    MapBasedMultisetIterator() {
+      this.entryIterator = backingMap.entrySet().iterator();
+    }
+
+    @Override
+    public boolean hasNext() {
+      return occurrencesLeft > 0 || entryIterator.hasNext();
+    }
+
+    @Override
+    public E next() {
+      if (occurrencesLeft == 0) {
+        currentEntry = entryIterator.next();
+        occurrencesLeft = currentEntry.getValue().get();
+      }
+      occurrencesLeft--;
+      canRemove = true;
+      return currentEntry.getKey();
+    }
+
+    @Override
+    public void remove() {
+      checkState(canRemove,
+          "no calls to next() since the last call to remove()");
+      int frequency = currentEntry.getValue().get();
+      if (frequency <= 0) {
+        throw new ConcurrentModificationException();
+      }
+      if (currentEntry.getValue().addAndGet(-1) == 0) {
+        entryIterator.remove();
+      }
+      size--;
+      canRemove = false;
+    }
+  }
+
+  @Override public int count(@Nullable Object element) {
+    try {
+      Count frequency = backingMap.get(element);
+      return (frequency == null) ? 0 : frequency.get();
+    } catch (NullPointerException e) {
+      return 0;
+    } catch (ClassCastException e) {
+      return 0;
+    }
+  }
+
+  // Optional Operations - Modification Operations
+
+  /**
+   * {@inheritDoc}
+   *
+   * @throws IllegalArgumentException if the call would result in more than
+   *     {@link Integer#MAX_VALUE} occurrences of {@code element} in this
+   *     multiset.
+   */
+  @Override public int add(@Nullable E element, int occurrences) {
+    if (occurrences == 0) {
+      return count(element);
+    }
+    checkArgument(
+        occurrences > 0, "occurrences cannot be negative: %s", occurrences);
+    Count frequency = backingMap.get(element);
+    int oldCount;
+    if (frequency == null) {
+      oldCount = 0;
+      backingMap.put(element, new Count(occurrences));
+    } else {
+      oldCount = frequency.get();
+      long newCount = (long) oldCount + (long) occurrences;
+      checkArgument(newCount <= Integer.MAX_VALUE,
+          "too many occurrences: %s", newCount);
+      frequency.getAndAdd(occurrences);
+    }
+    size += occurrences;
+    return oldCount;
+  }
+
+  @Override public int remove(@Nullable Object element, int occurrences) {
+    if (occurrences == 0) {
+      return count(element);
+    }
+    checkArgument(
+        occurrences > 0, "occurrences cannot be negative: %s", occurrences);
+    Count frequency = backingMap.get(element);
+    if (frequency == null) {
+      return 0;
+    }
+
+    int oldCount = frequency.get();
+
+    int numberRemoved;
+    if (oldCount > occurrences) {
+      numberRemoved = occurrences;
+    } else {
+      numberRemoved = oldCount;
+      backingMap.remove(element);
+    }
+
+    frequency.addAndGet(-numberRemoved);
+    size -= numberRemoved;
+    return oldCount;
+  }
+
+  // Roughly a 33% performance improvement over AbstractMultiset.setCount().
+  @Override public int setCount(E element, int count) {
+    checkNonnegative(count, "count");
+
+    Count existingCounter;
+    int oldCount;
+    if (count == 0) {
+      existingCounter = backingMap.remove(element);
+      oldCount = getAndSet(existingCounter, count);
+    } else {
+      existingCounter = backingMap.get(element);
+      oldCount = getAndSet(existingCounter, count);
+
+      if (existingCounter == null) {
+        backingMap.put(element, new Count(count));
+      }
+    }
+
+    size += (count - oldCount);
+    return oldCount;
+  }
+
+  private static int getAndSet(Count i, int count) {
+    if (i == null) {
+      return 0;
+    }
+
+    return i.getAndSet(count);
+  }
+
+  private int removeAllOccurrences(@Nullable Object element,
+      Map<E, Count> map) {
+    Count frequency = map.remove(element);
+    if (frequency == null) {
+      return 0;
+    }
+    int numberRemoved = frequency.getAndSet(0);
+    size -= numberRemoved;
+    return numberRemoved;
+  }
+
+  // Views
+
+  @Override Set<E> createElementSet() {
+    return new MapBasedElementSet(backingMap);
+  }
+
+  // TODO(user): once TreeMultiset is replaced with a SortedMultiset
+  // implementation, replace this with a subclass of Multisets.ElementSet.
+  class MapBasedElementSet extends ForwardingSet<E> {
+
+    // This mapping is the usually the same as 'backingMap', but can be a
+    // submap in some implementations.
+    private final Map<E, Count> map;
+    private final Set<E> delegate;
+
+    MapBasedElementSet(Map<E, Count> map) {
+      this.map = map;
+      delegate = map.keySet();
+    }
+
+    @Override protected Set<E> delegate() {
+      return delegate;
+    }
+
+    @Override public Iterator<E> iterator() {
+      final Iterator<Map.Entry<E, Count>> entries
+          = map.entrySet().iterator();
+      return new Iterator<E>() {
+        Map.Entry<E, Count> toRemove;
+
+        @Override
+        public boolean hasNext() {
+          return entries.hasNext();
+        }
+
+        @Override
+        public E next() {
+          toRemove = entries.next();
+          return toRemove.getKey();
+        }
+
+        @Override
+        public void remove() {
+          checkState(toRemove != null,
+              "no calls to next() since the last call to remove()");
+          size -= toRemove.getValue().getAndSet(0);
+          entries.remove();
+          toRemove = null;
+        }
+      };
+    }
+
+    @Override public boolean remove(Object element) {
+      return removeAllOccurrences(element, map) != 0;
+    }
+
+    @Override public boolean removeAll(Collection<?> elementsToRemove) {
+      return Iterators.removeAll(iterator(), elementsToRemove);
+    }
+
+    @Override public boolean retainAll(Collection<?> elementsToRetain) {
+      return Iterators.retainAll(iterator(), elementsToRetain);
+    }
+
+    @Override public void clear() {
+      if (map == backingMap) {
+        AbstractMapBasedMultiset.this.clear();
+      } else {
+        Iterator<E> i = iterator();
+        while (i.hasNext()) {
+          i.next();
+          i.remove();
+        }
+      }
+    }
+
+    public Map<E, Count> getMap() {
+      return map;
+    }
+  }
+
+  // Don't allow default serialization.
+  @GwtIncompatible("java.io.ObjectStreamException")
+  @SuppressWarnings("unused") // actually used during deserialization
+  private void readObjectNoData() throws ObjectStreamException {
+    throw new InvalidObjectException("Stream data required");
+  }
+
+  @GwtIncompatible("not needed in emulated source.")
+  private static final long serialVersionUID = -2250766705698539974L;
+}
diff --git a/guava/src/com/google/common/collect/AbstractMapEntry.java b/guava/src/com/google/common/collect/AbstractMapEntry.java
new file mode 100644
index 0000000..d790748
--- /dev/null
+++ b/guava/src/com/google/common/collect/AbstractMapEntry.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Objects;
+
+import java.util.Map.Entry;
+
+import javax.annotation.Nullable;
+
+/**
+ * Implementation of the {@code equals}, {@code hashCode}, and {@code toString}
+ * methods of {@code Entry}.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible
+abstract class AbstractMapEntry<K, V> implements Entry<K, V> {
+
+  @Override
+  public abstract K getKey();
+
+  @Override
+  public abstract V getValue();
+
+  @Override
+  public V setValue(V value) {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override public boolean equals(@Nullable Object object) {
+    if (object instanceof Entry) {
+      Entry<?, ?> that = (Entry<?, ?>) object;
+      return Objects.equal(this.getKey(), that.getKey())
+          && Objects.equal(this.getValue(), that.getValue());
+    }
+    return false;
+  }
+
+  @Override public int hashCode() {
+    K k = getKey();
+    V v = getValue();
+    return ((k == null) ? 0 : k.hashCode()) ^ ((v == null) ? 0 : v.hashCode());
+  }
+
+  /**
+   * Returns a string representation of the form {@code {key}={value}}.
+   */
+  @Override public String toString() {
+    return getKey() + "=" + getValue();
+  }
+}
diff --git a/guava/src/com/google/common/collect/AbstractMultimap.java b/guava/src/com/google/common/collect/AbstractMultimap.java
new file mode 100644
index 0000000..38f69ec
--- /dev/null
+++ b/guava/src/com/google/common/collect/AbstractMultimap.java
@@ -0,0 +1,1387 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkState;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.io.Serializable;
+import java.util.AbstractCollection;
+import java.util.AbstractMap;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.ConcurrentModificationException;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.RandomAccess;
+import java.util.Set;
+import java.util.SortedMap;
+import java.util.SortedSet;
+
+import javax.annotation.Nullable;
+
+/**
+ * Basic implementation of the {@link Multimap} interface. This class represents
+ * a multimap as a map that associates each key with a collection of values. All
+ * methods of {@link Multimap} are supported, including those specified as
+ * optional in the interface.
+ *
+ * <p>To implement a multimap, a subclass must define the method {@link
+ * #createCollection()}, which creates an empty collection of values for a key.
+ *
+ * <p>The multimap constructor takes a map that has a single entry for each
+ * distinct key. When you insert a key-value pair with a key that isn't already
+ * in the multimap, {@code AbstractMultimap} calls {@link #createCollection()}
+ * to create the collection of values for that key. The subclass should not call
+ * {@link #createCollection()} directly, and a new instance should be created
+ * every time the method is called.
+ *
+ * <p>For example, the subclass could pass a {@link java.util.TreeMap} during
+ * construction, and {@link #createCollection()} could return a {@link
+ * java.util.TreeSet}, in which case the multimap's iterators would propagate
+ * through the keys and values in sorted order.
+ *
+ * <p>Keys and values may be null, as long as the underlying collection classes
+ * support null elements.
+ *
+ * <p>The collections created by {@link #createCollection()} may or may not
+ * allow duplicates. If the collection, such as a {@link Set}, does not support
+ * duplicates, an added key-value pair will replace an existing pair with the
+ * same key and value, if such a pair is present. With collections like {@link
+ * List} that allow duplicates, the collection will keep the existing key-value
+ * pairs while adding a new pair.
+ *
+ * <p>This class is not threadsafe when any concurrent operations update the
+ * multimap, even if the underlying map and {@link #createCollection()} method
+ * return threadsafe classes. Concurrent read operations will work correctly. To
+ * allow concurrent update operations, wrap your multimap with a call to {@link
+ * Multimaps#synchronizedMultimap}.
+ *
+ * <p>For serialization to work, the subclass must specify explicit
+ * {@code readObject} and {@code writeObject} methods.
+ *
+ * @author Jared Levy
+ * @author Louis Wasserman
+ */
+@GwtCompatible
+abstract class AbstractMultimap<K, V> implements Multimap<K, V>, Serializable {
+  /*
+   * Here's an outline of the overall design.
+   *
+   * The map variable contains the collection of values associated with each
+   * key. When a key-value pair is added to a multimap that didn't previously
+   * contain any values for that key, a new collection generated by
+   * createCollection is added to the map. That same collection instance
+   * remains in the map as long as the multimap has any values for the key. If
+   * all values for the key are removed, the key and collection are removed
+   * from the map.
+   *
+   * The get method returns a WrappedCollection, which decorates the collection
+   * in the map (if the key is present) or an empty collection (if the key is
+   * not present). When the collection delegate in the WrappedCollection is
+   * empty, the multimap may contain subsequently added values for that key. To
+   * handle that situation, the WrappedCollection checks whether map contains
+   * an entry for the provided key, and if so replaces the delegate.
+   */
+
+  private transient Map<K, Collection<V>> map;
+  private transient int totalSize;
+
+  /**
+   * Creates a new multimap that uses the provided map.
+   *
+   * @param map place to store the mapping from each key to its corresponding
+   *     values
+   * @throws IllegalArgumentException if {@code map} is not empty
+   */
+  protected AbstractMultimap(Map<K, Collection<V>> map) {
+    checkArgument(map.isEmpty());
+    this.map = map;
+  }
+
+  /** Used during deserialization only. */
+  final void setMap(Map<K, Collection<V>> map) {
+    this.map = map;
+    totalSize = 0;
+    for (Collection<V> values : map.values()) {
+      checkArgument(!values.isEmpty());
+      totalSize += values.size();
+    }
+  }
+
+  /**
+   * Creates the collection of values for a single key.
+   *
+   * <p>Collections with weak, soft, or phantom references are not supported.
+   * Each call to {@code createCollection} should create a new instance.
+   *
+   * <p>The returned collection class determines whether duplicate key-value
+   * pairs are allowed.
+   *
+   * @return an empty collection of values
+   */
+  abstract Collection<V> createCollection();
+
+  /**
+   * Creates the collection of values for an explicitly provided key. By
+   * default, it simply calls {@link #createCollection()}, which is the correct
+   * behavior for most implementations. The {@link LinkedHashMultimap} class
+   * overrides it.
+   *
+   * @param key key to associate with values in the collection
+   * @return an empty collection of values
+   */
+  Collection<V> createCollection(@Nullable K key) {
+    return createCollection();
+  }
+
+  Map<K, Collection<V>> backingMap() {
+    return map;
+  }
+
+  // Query Operations
+
+  @Override
+  public int size() {
+    return totalSize;
+  }
+
+  @Override
+  public boolean isEmpty() {
+    return totalSize == 0;
+  }
+
+  @Override
+  public boolean containsKey(@Nullable Object key) {
+    return map.containsKey(key);
+  }
+
+  @Override
+  public boolean containsValue(@Nullable Object value) {
+    for (Collection<V> collection : map.values()) {
+      if (collection.contains(value)) {
+        return true;
+      }
+    }
+
+    return false;
+  }
+
+  @Override
+  public boolean containsEntry(@Nullable Object key, @Nullable Object value) {
+    Collection<V> collection = map.get(key);
+    return collection != null && collection.contains(value);
+  }
+
+  // Modification Operations
+
+  @Override
+  public boolean put(@Nullable K key, @Nullable V value) {
+    Collection<V> collection = getOrCreateCollection(key);
+
+    if (collection.add(value)) {
+      totalSize++;
+      return true;
+    } else {
+      return false;
+    }
+  }
+
+  private Collection<V> getOrCreateCollection(@Nullable K key) {
+    Collection<V> collection = map.get(key);
+    if (collection == null) {
+      collection = createCollection(key);
+      map.put(key, collection);
+    }
+    return collection;
+  }
+
+  @Override
+  public boolean remove(@Nullable Object key, @Nullable Object value) {
+    Collection<V> collection = map.get(key);
+    if (collection == null) {
+      return false;
+    }
+
+    boolean changed = collection.remove(value);
+    if (changed) {
+      totalSize--;
+      if (collection.isEmpty()) {
+        map.remove(key);
+      }
+    }
+    return changed;
+  }
+
+  // Bulk Operations
+
+  @Override
+  public boolean putAll(@Nullable K key, Iterable<? extends V> values) {
+    if (!values.iterator().hasNext()) {
+      return false;
+    }
+    Collection<V> collection = getOrCreateCollection(key);
+    int oldSize = collection.size();
+
+    boolean changed = false;
+    if (values instanceof Collection) {
+      Collection<? extends V> c = Collections2.cast(values);
+      changed = collection.addAll(c);
+    } else {
+      for (V value : values) {
+        changed |= collection.add(value);
+      }
+    }
+
+    totalSize += (collection.size() - oldSize);
+    return changed;
+  }
+
+  @Override
+  public boolean putAll(Multimap<? extends K, ? extends V> multimap) {
+    boolean changed = false;
+    for (Map.Entry<? extends K, ? extends V> entry : multimap.entries()) {
+      changed |= put(entry.getKey(), entry.getValue());
+    }
+    return changed;
+  }
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>The returned collection is immutable.
+   */
+  @Override
+  public Collection<V> replaceValues(
+      @Nullable K key, Iterable<? extends V> values) {
+    Iterator<? extends V> iterator = values.iterator();
+    if (!iterator.hasNext()) {
+      return removeAll(key);
+    }
+
+    Collection<V> collection = getOrCreateCollection(key);
+    Collection<V> oldValues = createCollection();
+    oldValues.addAll(collection);
+
+    totalSize -= collection.size();
+    collection.clear();
+
+    while (iterator.hasNext()) {
+      if (collection.add(iterator.next())) {
+        totalSize++;
+      }
+    }
+
+    return unmodifiableCollectionSubclass(oldValues);
+  }
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>The returned collection is immutable.
+   */
+  @Override
+  public Collection<V> removeAll(@Nullable Object key) {
+    Collection<V> collection = map.remove(key);
+    Collection<V> output = createCollection();
+
+    if (collection != null) {
+      output.addAll(collection);
+      totalSize -= collection.size();
+      collection.clear();
+    }
+
+    return unmodifiableCollectionSubclass(output);
+  }
+
+  private Collection<V> unmodifiableCollectionSubclass(
+      Collection<V> collection) {
+    if (collection instanceof SortedSet) {
+      return Collections.unmodifiableSortedSet((SortedSet<V>) collection);
+    } else if (collection instanceof Set) {
+      return Collections.unmodifiableSet((Set<V>) collection);
+    } else if (collection instanceof List) {
+      return Collections.unmodifiableList((List<V>) collection);
+    } else {
+      return Collections.unmodifiableCollection(collection);
+    }
+  }
+
+  @Override
+  public void clear() {
+    // Clear each collection, to make previously returned collections empty.
+    for (Collection<V> collection : map.values()) {
+      collection.clear();
+    }
+    map.clear();
+    totalSize = 0;
+  }
+
+  // Views
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>The returned collection is not serializable.
+   */
+  @Override
+  public Collection<V> get(@Nullable K key) {
+    Collection<V> collection = map.get(key);
+    if (collection == null) {
+      collection = createCollection(key);
+    }
+    return wrapCollection(key, collection);
+  }
+
+  /**
+   * Generates a decorated collection that remains consistent with the values in
+   * the multimap for the provided key. Changes to the multimap may alter the
+   * returned collection, and vice versa.
+   */
+  private Collection<V> wrapCollection(
+      @Nullable K key, Collection<V> collection) {
+    if (collection instanceof SortedSet) {
+      return new WrappedSortedSet(key, (SortedSet<V>) collection, null);
+    } else if (collection instanceof Set) {
+      return new WrappedSet(key, (Set<V>) collection);
+    } else if (collection instanceof List) {
+      return wrapList(key, (List<V>) collection, null);
+    } else {
+      return new WrappedCollection(key, collection, null);
+    }
+  }
+
+  private List<V> wrapList(
+      @Nullable K key, List<V> list, @Nullable WrappedCollection ancestor) {
+    return (list instanceof RandomAccess)
+        ? new RandomAccessWrappedList(key, list, ancestor)
+        : new WrappedList(key, list, ancestor);
+  }
+
+  /**
+   * Collection decorator that stays in sync with the multimap values for a key.
+   * There are two kinds of wrapped collections: full and subcollections. Both
+   * have a delegate pointing to the underlying collection class.
+   *
+   * <p>Full collections, identified by a null ancestor field, contain all
+   * multimap values for a given key. Its delegate is a value in {@link
+   * AbstractMultimap#map} whenever the delegate is non-empty. The {@code
+   * refreshIfEmpty}, {@code removeIfEmpty}, and {@code addToMap} methods ensure
+   * that the {@code WrappedCollection} and map remain consistent.
+   *
+   * <p>A subcollection, such as a sublist, contains some of the values for a
+   * given key. Its ancestor field points to the full wrapped collection with
+   * all values for the key. The subcollection {@code refreshIfEmpty}, {@code
+   * removeIfEmpty}, and {@code addToMap} methods call the corresponding methods
+   * of the full wrapped collection.
+   */
+  private class WrappedCollection extends AbstractCollection<V> {
+    final K key;
+    Collection<V> delegate;
+    final WrappedCollection ancestor;
+    final Collection<V> ancestorDelegate;
+
+    WrappedCollection(@Nullable K key, Collection<V> delegate,
+        @Nullable WrappedCollection ancestor) {
+      this.key = key;
+      this.delegate = delegate;
+      this.ancestor = ancestor;
+      this.ancestorDelegate
+          = (ancestor == null) ? null : ancestor.getDelegate();
+    }
+
+    /**
+     * If the delegate collection is empty, but the multimap has values for the
+     * key, replace the delegate with the new collection for the key.
+     *
+     * <p>For a subcollection, refresh its ancestor and validate that the
+     * ancestor delegate hasn't changed.
+     */
+    void refreshIfEmpty() {
+      if (ancestor != null) {
+        ancestor.refreshIfEmpty();
+        if (ancestor.getDelegate() != ancestorDelegate) {
+          throw new ConcurrentModificationException();
+        }
+      } else if (delegate.isEmpty()) {
+        Collection<V> newDelegate = map.get(key);
+        if (newDelegate != null) {
+          delegate = newDelegate;
+        }
+      }
+    }
+
+    /**
+     * If collection is empty, remove it from {@code AbstractMultimap.this.map}.
+     * For subcollections, check whether the ancestor collection is empty.
+     */
+    void removeIfEmpty() {
+      if (ancestor != null) {
+        ancestor.removeIfEmpty();
+      } else if (delegate.isEmpty()) {
+        map.remove(key);
+      }
+    }
+
+    K getKey() {
+      return key;
+    }
+
+    /**
+     * Add the delegate to the map. Other {@code WrappedCollection} methods
+     * should call this method after adding elements to a previously empty
+     * collection.
+     *
+     * <p>Subcollection add the ancestor's delegate instead.
+     */
+    void addToMap() {
+      if (ancestor != null) {
+        ancestor.addToMap();
+      } else {
+        map.put(key, delegate);
+      }
+    }
+
+    @Override public int size() {
+      refreshIfEmpty();
+      return delegate.size();
+    }
+
+    @Override public boolean equals(@Nullable Object object) {
+      if (object == this) {
+        return true;
+      }
+      refreshIfEmpty();
+      return delegate.equals(object);
+    }
+
+    @Override public int hashCode() {
+      refreshIfEmpty();
+      return delegate.hashCode();
+    }
+
+    @Override public String toString() {
+      refreshIfEmpty();
+      return delegate.toString();
+    }
+
+    Collection<V> getDelegate() {
+      return delegate;
+    }
+
+    @Override public Iterator<V> iterator() {
+      refreshIfEmpty();
+      return new WrappedIterator();
+    }
+
+    /** Collection iterator for {@code WrappedCollection}. */
+    class WrappedIterator implements Iterator<V> {
+      final Iterator<V> delegateIterator;
+      final Collection<V> originalDelegate = delegate;
+
+      WrappedIterator() {
+        delegateIterator = iteratorOrListIterator(delegate);
+      }
+
+      WrappedIterator(Iterator<V> delegateIterator) {
+        this.delegateIterator = delegateIterator;
+      }
+
+      /**
+       * If the delegate changed since the iterator was created, the iterator is
+       * no longer valid.
+       */
+      void validateIterator() {
+        refreshIfEmpty();
+        if (delegate != originalDelegate) {
+          throw new ConcurrentModificationException();
+        }
+      }
+
+      @Override
+      public boolean hasNext() {
+        validateIterator();
+        return delegateIterator.hasNext();
+      }
+
+      @Override
+      public V next() {
+        validateIterator();
+        return delegateIterator.next();
+      }
+
+      @Override
+      public void remove() {
+        delegateIterator.remove();
+        totalSize--;
+        removeIfEmpty();
+      }
+
+      Iterator<V> getDelegateIterator() {
+        validateIterator();
+        return delegateIterator;
+      }
+    }
+
+    @Override public boolean add(V value) {
+      refreshIfEmpty();
+      boolean wasEmpty = delegate.isEmpty();
+      boolean changed = delegate.add(value);
+      if (changed) {
+        totalSize++;
+        if (wasEmpty) {
+          addToMap();
+        }
+      }
+      return changed;
+    }
+
+    WrappedCollection getAncestor() {
+      return ancestor;
+    }
+
+    // The following methods are provided for better performance.
+
+    @Override public boolean addAll(Collection<? extends V> collection) {
+      if (collection.isEmpty()) {
+        return false;
+      }
+      int oldSize = size();  // calls refreshIfEmpty
+      boolean changed = delegate.addAll(collection);
+      if (changed) {
+        int newSize = delegate.size();
+        totalSize += (newSize - oldSize);
+        if (oldSize == 0) {
+          addToMap();
+        }
+      }
+      return changed;
+    }
+
+    @Override public boolean contains(Object o) {
+      refreshIfEmpty();
+      return delegate.contains(o);
+    }
+
+    @Override public boolean containsAll(Collection<?> c) {
+      refreshIfEmpty();
+      return delegate.containsAll(c);
+    }
+
+    @Override public void clear() {
+      int oldSize = size();  // calls refreshIfEmpty
+      if (oldSize == 0) {
+        return;
+      }
+      delegate.clear();
+      totalSize -= oldSize;
+      removeIfEmpty();       // maybe shouldn't be removed if this is a sublist
+    }
+
+    @Override public boolean remove(Object o) {
+      refreshIfEmpty();
+      boolean changed = delegate.remove(o);
+      if (changed) {
+        totalSize--;
+        removeIfEmpty();
+      }
+      return changed;
+    }
+
+    @Override public boolean removeAll(Collection<?> c) {
+      if (c.isEmpty()) {
+        return false;
+      }
+      int oldSize = size();  // calls refreshIfEmpty
+      boolean changed = delegate.removeAll(c);
+      if (changed) {
+        int newSize = delegate.size();
+        totalSize += (newSize - oldSize);
+        removeIfEmpty();
+      }
+      return changed;
+    }
+
+    @Override public boolean retainAll(Collection<?> c) {
+      checkNotNull(c);
+      int oldSize = size();  // calls refreshIfEmpty
+      boolean changed = delegate.retainAll(c);
+      if (changed) {
+        int newSize = delegate.size();
+        totalSize += (newSize - oldSize);
+        removeIfEmpty();
+      }
+      return changed;
+    }
+  }
+
+  private Iterator<V> iteratorOrListIterator(Collection<V> collection) {
+    return (collection instanceof List)
+        ? ((List<V>) collection).listIterator()
+        : collection.iterator();
+  }
+
+  /** Set decorator that stays in sync with the multimap values for a key. */
+  private class WrappedSet extends WrappedCollection implements Set<V> {
+    WrappedSet(@Nullable K key, Set<V> delegate) {
+      super(key, delegate, null);
+    }
+  }
+
+  /**
+   * SortedSet decorator that stays in sync with the multimap values for a key.
+   */
+  private class WrappedSortedSet extends WrappedCollection
+      implements SortedSet<V> {
+    WrappedSortedSet(@Nullable K key, SortedSet<V> delegate,
+        @Nullable WrappedCollection ancestor) {
+      super(key, delegate, ancestor);
+    }
+
+    SortedSet<V> getSortedSetDelegate() {
+      return (SortedSet<V>) getDelegate();
+    }
+
+    @Override
+    public Comparator<? super V> comparator() {
+      return getSortedSetDelegate().comparator();
+    }
+
+    @Override
+    public V first() {
+      refreshIfEmpty();
+      return getSortedSetDelegate().first();
+    }
+
+    @Override
+    public V last() {
+      refreshIfEmpty();
+      return getSortedSetDelegate().last();
+    }
+
+    @Override
+    public SortedSet<V> headSet(V toElement) {
+      refreshIfEmpty();
+      return new WrappedSortedSet(
+          getKey(), getSortedSetDelegate().headSet(toElement),
+          (getAncestor() == null) ? this : getAncestor());
+    }
+
+    @Override
+    public SortedSet<V> subSet(V fromElement, V toElement) {
+      refreshIfEmpty();
+      return new WrappedSortedSet(
+          getKey(), getSortedSetDelegate().subSet(fromElement, toElement),
+          (getAncestor() == null) ? this : getAncestor());
+    }
+
+    @Override
+    public SortedSet<V> tailSet(V fromElement) {
+      refreshIfEmpty();
+      return new WrappedSortedSet(
+          getKey(), getSortedSetDelegate().tailSet(fromElement),
+          (getAncestor() == null) ? this : getAncestor());
+    }
+  }
+
+  /** List decorator that stays in sync with the multimap values for a key. */
+  private class WrappedList extends WrappedCollection implements List<V> {
+    WrappedList(@Nullable K key, List<V> delegate,
+        @Nullable WrappedCollection ancestor) {
+      super(key, delegate, ancestor);
+    }
+
+    List<V> getListDelegate() {
+      return (List<V>) getDelegate();
+    }
+
+    @Override
+    public boolean addAll(int index, Collection<? extends V> c) {
+      if (c.isEmpty()) {
+        return false;
+      }
+      int oldSize = size();  // calls refreshIfEmpty
+      boolean changed = getListDelegate().addAll(index, c);
+      if (changed) {
+        int newSize = getDelegate().size();
+        totalSize += (newSize - oldSize);
+        if (oldSize == 0) {
+          addToMap();
+        }
+      }
+      return changed;
+    }
+
+    @Override
+    public V get(int index) {
+      refreshIfEmpty();
+      return getListDelegate().get(index);
+    }
+
+    @Override
+    public V set(int index, V element) {
+      refreshIfEmpty();
+      return getListDelegate().set(index, element);
+    }
+
+    @Override
+    public void add(int index, V element) {
+      refreshIfEmpty();
+      boolean wasEmpty = getDelegate().isEmpty();
+      getListDelegate().add(index, element);
+      totalSize++;
+      if (wasEmpty) {
+        addToMap();
+      }
+    }
+
+    @Override
+    public V remove(int index) {
+      refreshIfEmpty();
+      V value = getListDelegate().remove(index);
+      totalSize--;
+      removeIfEmpty();
+      return value;
+    }
+
+    @Override
+    public int indexOf(Object o) {
+      refreshIfEmpty();
+      return getListDelegate().indexOf(o);
+    }
+
+    @Override
+    public int lastIndexOf(Object o) {
+      refreshIfEmpty();
+      return getListDelegate().lastIndexOf(o);
+    }
+
+    @Override
+    public ListIterator<V> listIterator() {
+      refreshIfEmpty();
+      return new WrappedListIterator();
+    }
+
+    @Override
+    public ListIterator<V> listIterator(int index) {
+      refreshIfEmpty();
+      return new WrappedListIterator(index);
+    }
+
+    @Override
+    public List<V> subList(int fromIndex, int toIndex) {
+      refreshIfEmpty();
+      return wrapList(getKey(),
+          getListDelegate().subList(fromIndex, toIndex),
+          (getAncestor() == null) ? this : getAncestor());
+    }
+
+    /** ListIterator decorator. */
+    private class WrappedListIterator extends WrappedIterator
+        implements ListIterator<V> {
+      WrappedListIterator() {}
+
+      public WrappedListIterator(int index) {
+        super(getListDelegate().listIterator(index));
+      }
+
+      private ListIterator<V> getDelegateListIterator() {
+        return (ListIterator<V>) getDelegateIterator();
+      }
+
+      @Override
+      public boolean hasPrevious() {
+        return getDelegateListIterator().hasPrevious();
+      }
+
+      @Override
+      public V previous() {
+        return getDelegateListIterator().previous();
+      }
+
+      @Override
+      public int nextIndex() {
+        return getDelegateListIterator().nextIndex();
+      }
+
+      @Override
+      public int previousIndex() {
+        return getDelegateListIterator().previousIndex();
+      }
+
+      @Override
+      public void set(V value) {
+        getDelegateListIterator().set(value);
+      }
+
+      @Override
+      public void add(V value) {
+        boolean wasEmpty = isEmpty();
+        getDelegateListIterator().add(value);
+        totalSize++;
+        if (wasEmpty) {
+          addToMap();
+        }
+      }
+    }
+  }
+
+  /**
+   * List decorator that stays in sync with the multimap values for a key and
+   * supports rapid random access.
+   */
+  private class RandomAccessWrappedList extends WrappedList
+      implements RandomAccess {
+    RandomAccessWrappedList(@Nullable K key, List<V> delegate,
+        @Nullable WrappedCollection ancestor) {
+      super(key, delegate, ancestor);
+    }
+  }
+
+  private transient Set<K> keySet;
+
+  @Override
+  public Set<K> keySet() {
+    Set<K> result = keySet;
+    return (result == null) ? keySet = createKeySet() : result;
+  }
+
+  private Set<K> createKeySet() {
+    return (map instanceof SortedMap)
+        ? new SortedKeySet((SortedMap<K, Collection<V>>) map) : new KeySet(map);
+  }
+
+  private class KeySet extends Maps.KeySet<K, Collection<V>> {
+
+    /**
+     * This is usually the same as map, except when someone requests a
+     * subcollection of a {@link SortedKeySet}.
+     */
+    final Map<K, Collection<V>> subMap;
+
+    KeySet(final Map<K, Collection<V>> subMap) {
+      this.subMap = subMap;
+    }
+
+    @Override
+    Map<K, Collection<V>> map() {
+      return subMap;
+    }
+
+    @Override public Iterator<K> iterator() {
+      return new Iterator<K>() {
+        final Iterator<Map.Entry<K, Collection<V>>> entryIterator
+            = subMap.entrySet().iterator();
+        Map.Entry<K, Collection<V>> entry;
+
+        @Override
+        public boolean hasNext() {
+          return entryIterator.hasNext();
+        }
+        @Override
+        public K next() {
+          entry = entryIterator.next();
+          return entry.getKey();
+        }
+        @Override
+        public void remove() {
+          checkState(entry != null);
+          Collection<V> collection = entry.getValue();
+          entryIterator.remove();
+          totalSize -= collection.size();
+          collection.clear();
+        }
+      };
+    }
+
+    // The following methods are included for better performance.
+
+    @Override public boolean remove(Object key) {
+      int count = 0;
+      Collection<V> collection = subMap.remove(key);
+      if (collection != null) {
+        count = collection.size();
+        collection.clear();
+        totalSize -= count;
+      }
+      return count > 0;
+    }
+
+    @Override
+    public void clear() {
+      Iterators.clear(iterator());
+    }
+
+    @Override public boolean containsAll(Collection<?> c) {
+      return subMap.keySet().containsAll(c);
+    }
+
+    @Override public boolean equals(@Nullable Object object) {
+      return this == object || this.subMap.keySet().equals(object);
+    }
+
+    @Override public int hashCode() {
+      return subMap.keySet().hashCode();
+    }
+  }
+
+  private class SortedKeySet extends KeySet implements SortedSet<K> {
+
+    SortedKeySet(SortedMap<K, Collection<V>> subMap) {
+      super(subMap);
+    }
+
+    SortedMap<K, Collection<V>> sortedMap() {
+      return (SortedMap<K, Collection<V>>) subMap;
+    }
+
+    @Override
+    public Comparator<? super K> comparator() {
+      return sortedMap().comparator();
+    }
+
+    @Override
+    public K first() {
+      return sortedMap().firstKey();
+    }
+
+    @Override
+    public SortedSet<K> headSet(K toElement) {
+      return new SortedKeySet(sortedMap().headMap(toElement));
+    }
+
+    @Override
+    public K last() {
+      return sortedMap().lastKey();
+    }
+
+    @Override
+    public SortedSet<K> subSet(K fromElement, K toElement) {
+      return new SortedKeySet(sortedMap().subMap(fromElement, toElement));
+    }
+
+    @Override
+    public SortedSet<K> tailSet(K fromElement) {
+      return new SortedKeySet(sortedMap().tailMap(fromElement));
+    }
+  }
+
+  private transient Multiset<K> multiset;
+
+  @Override
+  public Multiset<K> keys() {
+    Multiset<K> result = multiset;
+    if (result == null) {
+      return multiset = new Multimaps.Keys<K, V>() {
+        @Override Multimap<K, V> multimap() {
+          return AbstractMultimap.this;
+        }
+      };
+    }
+    return result;
+  }
+
+  /**
+   * Removes all values for the provided key. Unlike {@link #removeAll}, it
+   * returns the number of removed mappings.
+   */
+  private int removeValuesForKey(Object key) {
+    Collection<V> collection;
+    try {
+      collection = map.remove(key);
+    } catch (NullPointerException e) {
+      return 0;
+    } catch (ClassCastException e) {
+      return 0;
+    }
+
+    int count = 0;
+    if (collection != null) {
+      count = collection.size();
+      collection.clear();
+      totalSize -= count;
+    }
+    return count;
+  }
+
+  private transient Collection<V> valuesCollection;
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>The iterator generated by the returned collection traverses the values
+   * for one key, followed by the values of a second key, and so on.
+   */
+  @Override public Collection<V> values() {
+    Collection<V> result = valuesCollection;
+    if (result == null) {
+      return valuesCollection = new Multimaps.Values<K, V>() {
+        @Override Multimap<K, V> multimap() {
+          return AbstractMultimap.this;
+        }
+      };
+    }
+    return result;
+  }
+
+  private transient Collection<Map.Entry<K, V>> entries;
+
+  /*
+   * TODO(kevinb): should we copy this javadoc to each concrete class, so that
+   * classes like LinkedHashMultimap that need to say something different are
+   * still able to {@inheritDoc} all the way from Multimap?
+   */
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>The iterator generated by the returned collection traverses the values
+   * for one key, followed by the values of a second key, and so on.
+   *
+   * <p>Each entry is an immutable snapshot of a key-value mapping in the
+   * multimap, taken at the time the entry is returned by a method call to the
+   * collection or its iterator.
+   */
+  @Override
+  public Collection<Map.Entry<K, V>> entries() {
+    Collection<Map.Entry<K, V>> result = entries;
+    return (result == null) ? entries = createEntries() : result;
+  }
+
+  Collection<Map.Entry<K, V>> createEntries() {
+    if (this instanceof SetMultimap) {
+      return new Multimaps.EntrySet<K, V>() {
+        @Override Multimap<K, V> multimap() {
+          return AbstractMultimap.this;
+        }
+
+        @Override public Iterator<Entry<K, V>> iterator() {
+          return createEntryIterator();
+        }
+      };
+    }
+    return new Multimaps.Entries<K, V>() {
+      @Override Multimap<K, V> multimap() {
+        return AbstractMultimap.this;
+      }
+
+      @Override public Iterator<Entry<K, V>> iterator() {
+        return createEntryIterator();
+      }
+    };
+  }
+
+  /**
+   * Returns an iterator across all key-value map entries, used by {@code
+   * entries().iterator()} and {@code values().iterator()}. The default
+   * behavior, which traverses the values for one key, the values for a second
+   * key, and so on, suffices for most {@code AbstractMultimap} implementations.
+   *
+   * @return an iterator across map entries
+   */
+  Iterator<Map.Entry<K, V>> createEntryIterator() {
+    return new EntryIterator();
+  }
+
+  /** Iterator across all key-value pairs. */
+  private class EntryIterator implements Iterator<Map.Entry<K, V>> {
+    final Iterator<Map.Entry<K, Collection<V>>> keyIterator;
+    K key;
+    Collection<V> collection;
+    Iterator<V> valueIterator;
+
+    EntryIterator() {
+      keyIterator = map.entrySet().iterator();
+      if (keyIterator.hasNext()) {
+        findValueIteratorAndKey();
+      } else {
+        valueIterator = Iterators.emptyModifiableIterator();
+      }
+    }
+
+    void findValueIteratorAndKey() {
+      Map.Entry<K, Collection<V>> entry = keyIterator.next();
+      key = entry.getKey();
+      collection = entry.getValue();
+      valueIterator = collection.iterator();
+    }
+
+    @Override
+    public boolean hasNext() {
+      return keyIterator.hasNext() || valueIterator.hasNext();
+    }
+
+    @Override
+    public Map.Entry<K, V> next() {
+      if (!valueIterator.hasNext()) {
+        findValueIteratorAndKey();
+      }
+      return Maps.immutableEntry(key, valueIterator.next());
+    }
+
+    @Override
+    public void remove() {
+      valueIterator.remove();
+      if (collection.isEmpty()) {
+        keyIterator.remove();
+      }
+      totalSize--;
+    }
+  }
+
+  private transient Map<K, Collection<V>> asMap;
+
+  @Override
+  public Map<K, Collection<V>> asMap() {
+    Map<K, Collection<V>> result = asMap;
+    return (result == null) ? asMap = createAsMap() : result;
+  }
+
+  private Map<K, Collection<V>> createAsMap() {
+    return (map instanceof SortedMap)
+        ? new SortedAsMap((SortedMap<K, Collection<V>>) map) : new AsMap(map);
+  }
+
+  private class AsMap extends AbstractMap<K, Collection<V>> {
+    /**
+     * Usually the same as map, but smaller for the headMap(), tailMap(), or
+     * subMap() of a SortedAsMap.
+     */
+    final transient Map<K, Collection<V>> submap;
+
+    AsMap(Map<K, Collection<V>> submap) {
+      this.submap = submap;
+    }
+
+    transient Set<Map.Entry<K, Collection<V>>> entrySet;
+
+    @Override public Set<Map.Entry<K, Collection<V>>> entrySet() {
+      Set<Map.Entry<K, Collection<V>>> result = entrySet;
+      return (result == null) ? entrySet = new AsMapEntries() : result;
+    }
+
+    // The following methods are included for performance.
+
+    @Override public boolean containsKey(Object key) {
+      return Maps.safeContainsKey(submap, key);
+    }
+
+    @Override public Collection<V> get(Object key) {
+      Collection<V> collection = Maps.safeGet(submap, key);
+      if (collection == null) {
+        return null;
+      }
+      @SuppressWarnings("unchecked")
+      K k = (K) key;
+      return wrapCollection(k, collection);
+    }
+
+    @Override public Set<K> keySet() {
+      return AbstractMultimap.this.keySet();
+    }
+
+    @Override
+    public int size() {
+      return submap.size();
+    }
+
+    @Override public Collection<V> remove(Object key) {
+      Collection<V> collection = submap.remove(key);
+      if (collection == null) {
+        return null;
+      }
+
+      Collection<V> output = createCollection();
+      output.addAll(collection);
+      totalSize -= collection.size();
+      collection.clear();
+      return output;
+    }
+
+    @Override public boolean equals(@Nullable Object object) {
+      return this == object || submap.equals(object);
+    }
+
+    @Override public int hashCode() {
+      return submap.hashCode();
+    }
+
+    @Override public String toString() {
+      return submap.toString();
+    }
+
+    @Override
+    public void clear() {
+      if (submap == map) {
+        AbstractMultimap.this.clear();
+      } else {
+
+        Iterators.clear(new AsMapIterator());
+      }
+    }
+
+    class AsMapEntries extends Maps.EntrySet<K, Collection<V>> {
+      @Override
+      Map<K, Collection<V>> map() {
+        return AsMap.this;
+      }
+
+      @Override public Iterator<Map.Entry<K, Collection<V>>> iterator() {
+        return new AsMapIterator();
+      }
+
+      // The following methods are included for performance.
+
+      @Override public boolean contains(Object o) {
+        return Collections2.safeContains(submap.entrySet(), o);
+      }
+
+      @Override public boolean remove(Object o) {
+        if (!contains(o)) {
+          return false;
+        }
+        Map.Entry<?, ?> entry = (Map.Entry<?, ?>) o;
+        removeValuesForKey(entry.getKey());
+        return true;
+      }
+    }
+
+    /** Iterator across all keys and value collections. */
+    class AsMapIterator implements Iterator<Map.Entry<K, Collection<V>>> {
+      final Iterator<Map.Entry<K, Collection<V>>> delegateIterator
+          = submap.entrySet().iterator();
+      Collection<V> collection;
+
+      @Override
+      public boolean hasNext() {
+        return delegateIterator.hasNext();
+      }
+
+      @Override
+      public Map.Entry<K, Collection<V>> next() {
+        Map.Entry<K, Collection<V>> entry = delegateIterator.next();
+        K key = entry.getKey();
+        collection = entry.getValue();
+        return Maps.immutableEntry(key, wrapCollection(key, collection));
+      }
+
+      @Override
+      public void remove() {
+        delegateIterator.remove();
+        totalSize -= collection.size();
+        collection.clear();
+      }
+    }
+  }
+
+  private class SortedAsMap extends AsMap
+      implements SortedMap<K, Collection<V>> {
+    SortedAsMap(SortedMap<K, Collection<V>> submap) {
+      super(submap);
+    }
+
+    SortedMap<K, Collection<V>> sortedMap() {
+      return (SortedMap<K, Collection<V>>) submap;
+    }
+
+    @Override
+    public Comparator<? super K> comparator() {
+      return sortedMap().comparator();
+    }
+
+    @Override
+    public K firstKey() {
+      return sortedMap().firstKey();
+    }
+
+    @Override
+    public K lastKey() {
+      return sortedMap().lastKey();
+    }
+
+    @Override
+    public SortedMap<K, Collection<V>> headMap(K toKey) {
+      return new SortedAsMap(sortedMap().headMap(toKey));
+    }
+
+    @Override
+    public SortedMap<K, Collection<V>> subMap(K fromKey, K toKey) {
+      return new SortedAsMap(sortedMap().subMap(fromKey, toKey));
+    }
+
+    @Override
+    public SortedMap<K, Collection<V>> tailMap(K fromKey) {
+      return new SortedAsMap(sortedMap().tailMap(fromKey));
+    }
+
+    SortedSet<K> sortedKeySet;
+
+    // returns a SortedSet, even though returning a Set would be sufficient to
+    // satisfy the SortedMap.keySet() interface
+    @Override public SortedSet<K> keySet() {
+      SortedSet<K> result = sortedKeySet;
+      return (result == null)
+          ? sortedKeySet = new SortedKeySet(sortedMap()) : result;
+    }
+  }
+
+  // Comparison and hashing
+
+  @Override public boolean equals(@Nullable Object object) {
+    if (object == this) {
+      return true;
+    }
+    if (object instanceof Multimap) {
+      Multimap<?, ?> that = (Multimap<?, ?>) object;
+      return this.map.equals(that.asMap());
+    }
+    return false;
+  }
+
+  /**
+   * Returns the hash code for this multimap.
+   *
+   * <p>The hash code of a multimap is defined as the hash code of the map view,
+   * as returned by {@link Multimap#asMap}.
+   *
+   * @see Map#hashCode
+   */
+  @Override public int hashCode() {
+    return map.hashCode();
+  }
+
+  /**
+   * Returns a string representation of the multimap, generated by calling
+   * {@code toString} on the map returned by {@link Multimap#asMap}.
+   *
+   * @return a string representation of the multimap
+   */
+  @Override
+  public String toString() {
+    return map.toString();
+  }
+
+  private static final long serialVersionUID = 2447537837011683357L;
+}
+
diff --git a/guava/src/com/google/common/collect/AbstractMultiset.java b/guava/src/com/google/common/collect/AbstractMultiset.java
new file mode 100644
index 0000000..c0d2c4a
--- /dev/null
+++ b/guava/src/com/google/common/collect/AbstractMultiset.java
@@ -0,0 +1,221 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.collect.Multisets.setCountImpl;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Objects;
+
+import java.util.AbstractCollection;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * This class provides a skeletal implementation of the {@link Multiset}
+ * interface. A new multiset implementation can be created easily by extending
+ * this class and implementing the {@link Multiset#entrySet()} method, plus
+ * optionally overriding {@link #add(Object, int)} and
+ * {@link #remove(Object, int)} to enable modifications to the multiset.
+ *
+ * <p>The {@link #count} and {@link #size} implementations all iterate across
+ * the set returned by {@link Multiset#entrySet()}, as do many methods acting on
+ * the set returned by {@link #elementSet()}. Override those methods for better
+ * performance.
+ *
+ * @author Kevin Bourrillion
+ * @author Louis Wasserman
+ */
+@GwtCompatible
+abstract class AbstractMultiset<E> extends AbstractCollection<E>
+    implements Multiset<E> {
+  // Query Operations
+
+  @Override public int size() {
+    return Multisets.sizeImpl(this);
+  }
+
+  @Override public boolean isEmpty() {
+    return entrySet().isEmpty();
+  }
+
+  @Override public boolean contains(@Nullable Object element) {
+    return count(element) > 0;
+  }
+
+  @Override public Iterator<E> iterator() {
+    return Multisets.iteratorImpl(this);
+  }
+
+  @Override
+  public int count(Object element) {
+    for (Entry<E> entry : entrySet()) {
+      if (Objects.equal(entry.getElement(), element)) {
+        return entry.getCount();
+      }
+    }
+    return 0;
+  }
+
+  // Modification Operations
+
+  @Override public boolean add(@Nullable E element) {
+    add(element, 1);
+    return true;
+  }
+
+  @Override
+  public int add(E element, int occurrences) {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override public boolean remove(Object element) {
+    return remove(element, 1) > 0;
+  }
+
+  @Override
+  public int remove(Object element, int occurrences) {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public int setCount(E element, int count) {
+    return setCountImpl(this, element, count);
+  }
+
+  @Override
+  public boolean setCount(E element, int oldCount, int newCount) {
+    return setCountImpl(this, element, oldCount, newCount);
+  }
+
+  // Bulk Operations
+
+  /**
+   * {@inheritDoc}
+   * 
+   * <p>This implementation is highly efficient when {@code elementsToAdd}
+   * is itself a {@link Multiset}.
+   */
+  @Override public boolean addAll(Collection<? extends E> elementsToAdd) {
+    return Multisets.addAllImpl(this, elementsToAdd);
+  }
+
+  @Override public boolean removeAll(Collection<?> elementsToRemove) {
+    return Multisets.removeAllImpl(this, elementsToRemove);
+  }
+
+  @Override public boolean retainAll(Collection<?> elementsToRetain) {
+    return Multisets.retainAllImpl(this, elementsToRetain);
+  }
+
+  @Override public void clear() {
+    Iterators.clear(entryIterator());
+  }
+
+  // Views
+
+  private transient Set<E> elementSet;
+
+  @Override
+  public Set<E> elementSet() {
+    Set<E> result = elementSet;
+    if (result == null) {
+      elementSet = result = createElementSet();
+    }
+    return result;
+  }
+
+  /**
+   * Creates a new instance of this multiset's element set, which will be
+   * returned by {@link #elementSet()}.
+   */
+  Set<E> createElementSet() {
+    return new ElementSet();
+  }
+
+  class ElementSet extends Multisets.ElementSet<E> {
+    @Override
+    Multiset<E> multiset() {
+      return AbstractMultiset.this;
+    }
+  }
+
+  abstract Iterator<Entry<E>> entryIterator();
+  
+  abstract int distinctElements();
+
+  private transient Set<Entry<E>> entrySet;
+  
+  @Override public Set<Entry<E>> entrySet() {
+    Set<Entry<E>> result = entrySet;
+    return (result == null) ? entrySet = createEntrySet() : result;
+  }
+
+  class EntrySet extends Multisets.EntrySet<E> {
+    @Override Multiset<E> multiset() {
+      return AbstractMultiset.this;
+    }
+
+    @Override public Iterator<Entry<E>> iterator() {
+      return entryIterator();
+    }
+
+    @Override public int size() {
+      return distinctElements();
+    }
+  }
+
+  Set<Entry<E>> createEntrySet() {
+    return new EntrySet();
+  }
+
+  // Object methods
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>This implementation returns {@code true} if {@code object} is a multiset
+   * of the same size and if, for each element, the two multisets have the same
+   * count.
+   */
+  @Override public boolean equals(@Nullable Object object) {
+    return Multisets.equalsImpl(this, object);
+  }
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>This implementation returns the hash code of {@link
+   * Multiset#entrySet()}.
+   */
+  @Override public int hashCode() {
+    return entrySet().hashCode();
+  }
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>This implementation returns the result of invoking {@code toString} on
+   * {@link Multiset#entrySet()}.
+   */
+  @Override public String toString() {
+    return entrySet().toString();
+  }
+}
diff --git a/guava/src/com/google/common/collect/AbstractSetMultimap.java b/guava/src/com/google/common/collect/AbstractSetMultimap.java
new file mode 100644
index 0000000..fe68470
--- /dev/null
+++ b/guava/src/com/google/common/collect/AbstractSetMultimap.java
@@ -0,0 +1,132 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Collection;
+import java.util.Map;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * Basic implementation of the {@link SetMultimap} interface. It's a wrapper
+ * around {@link AbstractMultimap} that converts the returned collections into
+ * {@code Sets}. The {@link #createCollection} method must return a {@code Set}.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible
+abstract class AbstractSetMultimap<K, V>
+    extends AbstractMultimap<K, V> implements SetMultimap<K, V> {
+  /**
+   * Creates a new multimap that uses the provided map.
+   *
+   * @param map place to store the mapping from each key to its corresponding
+   *     values
+   */
+  protected AbstractSetMultimap(Map<K, Collection<V>> map) {
+    super(map);
+  }
+
+  @Override abstract Set<V> createCollection();
+
+  // Following Javadoc copied from SetMultimap.
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>Because a {@code SetMultimap} has unique values for a given key, this
+   * method returns a {@link Set}, instead of the {@link Collection} specified
+   * in the {@link Multimap} interface.
+   */
+  @Override public Set<V> get(@Nullable K key) {
+    return (Set<V>) super.get(key);
+  }
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>Because a {@code SetMultimap} has unique values for a given key, this
+   * method returns a {@link Set}, instead of the {@link Collection} specified
+   * in the {@link Multimap} interface.
+   */
+  @Override public Set<Map.Entry<K, V>> entries() {
+    return (Set<Map.Entry<K, V>>) super.entries();
+  }
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>Because a {@code SetMultimap} has unique values for a given key, this
+   * method returns a {@link Set}, instead of the {@link Collection} specified
+   * in the {@link Multimap} interface.
+   */
+  @Override public Set<V> removeAll(@Nullable Object key) {
+    return (Set<V>) super.removeAll(key);
+  }
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>Because a {@code SetMultimap} has unique values for a given key, this
+   * method returns a {@link Set}, instead of the {@link Collection} specified
+   * in the {@link Multimap} interface.
+   *
+   * <p>Any duplicates in {@code values} will be stored in the multimap once.
+   */
+  @Override public Set<V> replaceValues(
+      @Nullable K key, Iterable<? extends V> values) {
+    return (Set<V>) super.replaceValues(key, values);
+  }
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>Though the method signature doesn't say so explicitly, the returned map
+   * has {@link Set} values.
+   */
+  @Override public Map<K, Collection<V>> asMap() {
+    return super.asMap();
+  }
+
+  /**
+   * Stores a key-value pair in the multimap.
+   *
+   * @param key key to store in the multimap
+   * @param value value to store in the multimap
+   * @return {@code true} if the method increased the size of the multimap, or
+   *     {@code false} if the multimap already contained the key-value pair
+   */
+  @Override public boolean put(K key, V value) {
+    return super.put(key, value);
+  }
+
+  /**
+   * Compares the specified object to this multimap for equality.
+   *
+   * <p>Two {@code SetMultimap} instances are equal if, for each key, they
+   * contain the same values. Equality does not depend on the ordering of keys
+   * or values.
+   */
+  @Override public boolean equals(@Nullable Object object) {
+    return super.equals(object);
+  }
+
+  private static final long serialVersionUID = 7431625294878419160L;
+}
diff --git a/guava/src/com/google/common/collect/AbstractSortedMultiset.java b/guava/src/com/google/common/collect/AbstractSortedMultiset.java
new file mode 100644
index 0000000..b1a1d54
--- /dev/null
+++ b/guava/src/com/google/common/collect/AbstractSortedMultiset.java
@@ -0,0 +1,142 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ * 
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.SortedSet;
+
+/**
+ * This class provides a skeletal implementation of the {@link SortedMultiset} interface.
+ *
+ * <p>The {@link #count} and {@link #size} implementations all iterate across the set returned by
+ * {@link Multiset#entrySet()}, as do many methods acting on the set returned by
+ * {@link #elementSet()}. Override those methods for better performance.
+ *
+ * @author Louis Wasserman
+ */
+@GwtCompatible
+abstract class AbstractSortedMultiset<E> extends AbstractMultiset<E> implements SortedMultiset<E> {
+  final Comparator<? super E> comparator;
+
+  // needed for serialization
+  @SuppressWarnings("unchecked")
+  AbstractSortedMultiset() {
+    this((Comparator) Ordering.natural());
+  }
+  
+  AbstractSortedMultiset(Comparator<? super E> comparator) {
+    this.comparator = checkNotNull(comparator);
+  }
+
+  @Override
+  public SortedSet<E> elementSet() {
+    return (SortedSet<E>) super.elementSet();
+  }
+
+  @Override
+  SortedSet<E> createElementSet() {
+    return new SortedMultisets.ElementSet<E>() {
+      @Override
+      SortedMultiset<E> multiset() {
+        return AbstractSortedMultiset.this;
+      }
+    };
+  }
+
+  @Override
+  public Comparator<? super E> comparator() {
+    return comparator;
+  }
+
+  @Override
+  public Entry<E> firstEntry() {
+    Iterator<Entry<E>> entryIterator = entryIterator();
+    return entryIterator.hasNext() ? entryIterator.next() : null;
+  }
+
+  @Override
+  public Entry<E> lastEntry() {
+    Iterator<Entry<E>> entryIterator = descendingEntryIterator();
+    return entryIterator.hasNext() ? entryIterator.next() : null;
+  }
+
+  @Override
+  public Entry<E> pollFirstEntry() {
+    Iterator<Entry<E>> entryIterator = entryIterator();
+    if (entryIterator.hasNext()) {
+      Entry<E> result = entryIterator.next();
+      result = Multisets.immutableEntry(result.getElement(), result.getCount());
+      entryIterator.remove();
+      return result;
+    }
+    return null;
+  }
+
+  @Override
+  public Entry<E> pollLastEntry() {
+    Iterator<Entry<E>> entryIterator = descendingEntryIterator();
+    if (entryIterator.hasNext()) {
+      Entry<E> result = entryIterator.next();
+      result = Multisets.immutableEntry(result.getElement(), result.getCount());
+      entryIterator.remove();
+      return result;
+    }
+    return null;
+  }
+
+  @Override
+  public SortedMultiset<E> subMultiset(E fromElement, BoundType fromBoundType, E toElement,
+      BoundType toBoundType) {
+    return tailMultiset(fromElement, fromBoundType).headMultiset(toElement, toBoundType);
+  }
+
+  abstract Iterator<Entry<E>> descendingEntryIterator();
+
+  Iterator<E> descendingIterator() {
+    return Multisets.iteratorImpl(descendingMultiset());
+  }
+
+  private transient SortedMultiset<E> descendingMultiset;
+
+  @Override
+  public SortedMultiset<E> descendingMultiset() {
+    SortedMultiset<E> result = descendingMultiset;
+    return (result == null) ? descendingMultiset = createDescendingMultiset() : result;
+  }
+
+  SortedMultiset<E> createDescendingMultiset() {
+    return new SortedMultisets.DescendingMultiset<E>() {
+      @Override
+      SortedMultiset<E> forwardMultiset() {
+        return AbstractSortedMultiset.this;
+      }
+
+      @Override
+      Iterator<Entry<E>> entryIterator() {
+        return descendingEntryIterator();
+      }
+
+      @Override
+      public Iterator<E> iterator() {
+        return descendingIterator();
+      }
+    };
+  }
+}
diff --git a/guava/src/com/google/common/collect/AbstractSortedSetMultimap.java b/guava/src/com/google/common/collect/AbstractSortedSetMultimap.java
new file mode 100644
index 0000000..2be5f4b
--- /dev/null
+++ b/guava/src/com/google/common/collect/AbstractSortedSetMultimap.java
@@ -0,0 +1,124 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Collection;
+import java.util.Map;
+import java.util.SortedSet;
+
+import javax.annotation.Nullable;
+
+/**
+ * Basic implementation of the {@link SortedSetMultimap} interface. It's a
+ * wrapper around {@link AbstractMultimap} that converts the returned
+ * collections into sorted sets. The {@link #createCollection} method
+ * must return a {@code SortedSet}.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible
+abstract class AbstractSortedSetMultimap<K, V>
+    extends AbstractSetMultimap<K, V> implements SortedSetMultimap<K, V> {
+  /**
+   * Creates a new multimap that uses the provided map.
+   *
+   * @param map place to store the mapping from each key to its corresponding
+   *     values
+   */
+  protected AbstractSortedSetMultimap(Map<K, Collection<V>> map) {
+    super(map);
+  }
+
+  @Override abstract SortedSet<V> createCollection();
+
+  // Following Javadoc copied from Multimap and SortedSetMultimap.
+
+  /**
+   * Returns a collection view of all values associated with a key. If no
+   * mappings in the multimap have the provided key, an empty collection is
+   * returned.
+   *
+   * <p>Changes to the returned collection will update the underlying multimap,
+   * and vice versa.
+   *
+   * <p>Because a {@code SortedSetMultimap} has unique sorted values for a given
+   * key, this method returns a {@link SortedSet}, instead of the
+   * {@link Collection} specified in the {@link Multimap} interface.
+   */
+  @Override public SortedSet<V> get(@Nullable K key) {
+    return (SortedSet<V>) super.get(key);
+  }
+
+  /**
+   * Removes all values associated with a given key. The returned collection is
+   * immutable.
+   *
+   * <p>Because a {@code SortedSetMultimap} has unique sorted values for a given
+   * key, this method returns a {@link SortedSet}, instead of the
+   * {@link Collection} specified in the {@link Multimap} interface.
+   */
+  @Override public SortedSet<V> removeAll(@Nullable Object key) {
+    return (SortedSet<V>) super.removeAll(key);
+  }
+
+  /**
+   * Stores a collection of values with the same key, replacing any existing
+   * values for that key. The returned collection is immutable.
+   *
+   * <p>Because a {@code SortedSetMultimap} has unique sorted values for a given
+   * key, this method returns a {@link SortedSet}, instead of the
+   * {@link Collection} specified in the {@link Multimap} interface.
+   *
+   * <p>Any duplicates in {@code values} will be stored in the multimap once.
+   */
+  @Override public SortedSet<V> replaceValues(
+      K key, Iterable<? extends V> values) {
+    return (SortedSet<V>) super.replaceValues(key, values);
+  }
+
+  /**
+   * Returns a map view that associates each key with the corresponding values
+   * in the multimap. Changes to the returned map, such as element removal, will
+   * update the underlying multimap. The map does not support {@code setValue}
+   * on its entries, {@code put}, or {@code putAll}.
+   *
+   * <p>When passed a key that is present in the map, {@code
+   * asMap().get(Object)} has the same behavior as {@link #get}, returning a
+   * live collection. When passed a key that is not present, however, {@code
+   * asMap().get(Object)} returns {@code null} instead of an empty collection.
+   *
+   * <p>Though the method signature doesn't say so explicitly, the returned map
+   * has {@link SortedSet} values.
+   */
+  @Override public Map<K, Collection<V>> asMap() {
+    return super.asMap();
+  }
+
+  /**
+   * {@inheritDoc}
+   *
+   * Consequently, the values do not follow their natural ordering or the
+   * ordering of the value comparator.
+   */
+  @Override public Collection<V> values() {
+    return super.values();
+  }
+
+  private static final long serialVersionUID = 430848587173315748L;
+}
diff --git a/guava/src/com/google/common/collect/ArrayListMultimap.java b/guava/src/com/google/common/collect/ArrayListMultimap.java
new file mode 100644
index 0000000..43d42c3
--- /dev/null
+++ b/guava/src/com/google/common/collect/ArrayListMultimap.java
@@ -0,0 +1,164 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkArgument;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.annotations.VisibleForTesting;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Implementation of {@code Multimap} that uses an {@code ArrayList} to store
+ * the values for a given key. A {@link HashMap} associates each key with an
+ * {@link ArrayList} of values.
+ *
+ * <p>When iterating through the collections supplied by this class, the
+ * ordering of values for a given key agrees with the order in which the values
+ * were added.
+ *
+ * <p>This multimap allows duplicate key-value pairs. After adding a new
+ * key-value pair equal to an existing key-value pair, the {@code
+ * ArrayListMultimap} will contain entries for both the new value and the old
+ * value.
+ *
+ * <p>Keys and values may be null. All optional multimap methods are supported,
+ * and all returned views are modifiable.
+ *
+ * <p>The lists returned by {@link #get}, {@link #removeAll}, and {@link
+ * #replaceValues} all implement {@link java.util.RandomAccess}.
+ *
+ * <p>This class is not threadsafe when any concurrent operations update the
+ * multimap. Concurrent read operations will work correctly. To allow concurrent
+ * update operations, wrap your multimap with a call to {@link
+ * Multimaps#synchronizedListMultimap}.
+ *
+ * @author Jared Levy
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible(serializable = true, emulated = true)
+public final class ArrayListMultimap<K, V> extends AbstractListMultimap<K, V> {
+  // Default from ArrayList
+  private static final int DEFAULT_VALUES_PER_KEY = 10;
+
+  @VisibleForTesting transient int expectedValuesPerKey;
+
+  /**
+   * Creates a new, empty {@code ArrayListMultimap} with the default initial
+   * capacities.
+   */
+  public static <K, V> ArrayListMultimap<K, V> create() {
+    return new ArrayListMultimap<K, V>();
+  }
+
+  /**
+   * Constructs an empty {@code ArrayListMultimap} with enough capacity to hold
+   * the specified numbers of keys and values without resizing.
+   *
+   * @param expectedKeys the expected number of distinct keys
+   * @param expectedValuesPerKey the expected average number of values per key
+   * @throws IllegalArgumentException if {@code expectedKeys} or {@code
+   *      expectedValuesPerKey} is negative
+   */
+  public static <K, V> ArrayListMultimap<K, V> create(
+      int expectedKeys, int expectedValuesPerKey) {
+    return new ArrayListMultimap<K, V>(expectedKeys, expectedValuesPerKey);
+  }
+
+  /**
+   * Constructs an {@code ArrayListMultimap} with the same mappings as the
+   * specified multimap.
+   *
+   * @param multimap the multimap whose contents are copied to this multimap
+   */
+  public static <K, V> ArrayListMultimap<K, V> create(
+      Multimap<? extends K, ? extends V> multimap) {
+    return new ArrayListMultimap<K, V>(multimap);
+  }
+
+  private ArrayListMultimap() {
+    super(new HashMap<K, Collection<V>>());
+    expectedValuesPerKey = DEFAULT_VALUES_PER_KEY;
+  }
+
+  private ArrayListMultimap(int expectedKeys, int expectedValuesPerKey) {
+    super(Maps.<K, Collection<V>>newHashMapWithExpectedSize(expectedKeys));
+    checkArgument(expectedValuesPerKey >= 0);
+    this.expectedValuesPerKey = expectedValuesPerKey;
+  }
+
+  private ArrayListMultimap(Multimap<? extends K, ? extends V> multimap) {
+    this(multimap.keySet().size(),
+        (multimap instanceof ArrayListMultimap) ?
+            ((ArrayListMultimap<?, ?>) multimap).expectedValuesPerKey :
+            DEFAULT_VALUES_PER_KEY);
+    putAll(multimap);
+  }
+
+  /**
+   * Creates a new, empty {@code ArrayList} to hold the collection of values for
+   * an arbitrary key.
+   */
+  @Override List<V> createCollection() {
+    return new ArrayList<V>(expectedValuesPerKey);
+  }
+
+  /**
+   * Reduces the memory used by this {@code ArrayListMultimap}, if feasible.
+   */
+  public void trimToSize() {
+    for (Collection<V> collection : backingMap().values()) {
+      ArrayList<V> arrayList = (ArrayList<V>) collection;
+      arrayList.trimToSize();
+    }
+  }
+
+  /**
+   * @serialData expectedValuesPerKey, number of distinct keys, and then for
+   *     each distinct key: the key, number of values for that key, and the
+   *     key's values
+   */
+  @GwtIncompatible("java.io.ObjectOutputStream")
+  private void writeObject(ObjectOutputStream stream) throws IOException {
+    stream.defaultWriteObject();
+    stream.writeInt(expectedValuesPerKey);
+    Serialization.writeMultimap(this, stream);
+  }
+
+  @GwtIncompatible("java.io.ObjectOutputStream")
+  private void readObject(ObjectInputStream stream)
+      throws IOException, ClassNotFoundException {
+    stream.defaultReadObject();
+    expectedValuesPerKey = stream.readInt();
+    int distinctKeys = Serialization.readCount(stream);
+    Map<K, Collection<V>> map = Maps.newHashMapWithExpectedSize(distinctKeys);
+    setMap(map);
+    Serialization.populateMultimap(this, stream, distinctKeys);
+  }
+
+  @GwtIncompatible("Not needed in emulated source.")
+  private static final long serialVersionUID = 0;
+}
diff --git a/guava/src/com/google/common/collect/ArrayTable.java b/guava/src/com/google/common/collect/ArrayTable.java
new file mode 100644
index 0000000..28eb5b8
--- /dev/null
+++ b/guava/src/com/google/common/collect/ArrayTable.java
@@ -0,0 +1,842 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.Beta;
+import com.google.common.base.Objects;
+
+import java.io.Serializable;
+import java.lang.reflect.Array;
+import java.util.AbstractCollection;
+import java.util.AbstractMap;
+import java.util.AbstractSet;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * Fixed-size {@link Table} implementation backed by a two-dimensional array.
+ *
+ * <p>The allowed row and column keys must be supplied when the table is
+ * created. The table always contains a mapping for every row key / column pair.
+ * The value corresponding to a given row and column is null unless another
+ * value is provided.
+ *
+ * <p>The table's size is constant: the product of the number of supplied row
+ * keys and the number of supplied column keys. The {@code remove} and {@code
+ * clear} methods are not supported by the table or its views. The {@link
+ * #erase} and {@link #eraseAll} methods may be used instead.
+ *
+ * <p>The ordering of the row and column keys provided when the table is
+ * constructed determines the iteration ordering across rows and columns in the
+ * table's views. None of the view iterators support {@link Iterator#remove}.
+ * If the table is modified after an iterator is created, the iterator remains
+ * valid.
+ *
+ * <p>This class requires less memory than the {@link HashBasedTable} and {@link
+ * TreeBasedTable} implementations, except when the table is sparse.
+ *
+ * <p>Null row keys or column keys are not permitted.
+ *
+ * <p>This class provides methods involving the underlying array structure,
+ * where the array indices correspond to the position of a row or column in the
+ * lists of allowed keys and values. See the {@link #at}, {@link #set}, {@link
+ * #toArray}, {@link #rowKeyList}, and {@link #columnKeyList} methods for more
+ * details.
+ *
+ * <p>Note that this implementation is not synchronized. If multiple threads
+ * access the same cell of an {@code ArrayTable} concurrently and one of the
+ * threads modifies its value, there is no guarantee that the new value will be
+ * fully visible to the other threads. To guarantee that modifications are
+ * visible, synchronize access to the table. Unlike other {@code Table}
+ * implementations, synchronization is unnecessary between a thread that writes
+ * to one cell and a thread that reads from another.
+ *
+ * @author Jared Levy
+ * @since 10.0
+ */
+@Beta
+public final class ArrayTable<R, C, V> implements Table<R, C, V>, Serializable {
+
+  /**
+   * Creates an empty {@code ArrayTable}.
+   *
+   * @param rowKeys row keys that may be stored in the generated table
+   * @param columnKeys column keys that may be stored in the generated table
+   * @throws NullPointerException if any of the provided keys is null
+   * @throws IllegalArgumentException if {@code rowKeys} or {@code columnKeys}
+   *     contains duplicates or is empty
+   */
+  public static <R, C, V> ArrayTable<R, C, V> create(
+      Iterable<? extends R> rowKeys, Iterable<? extends C> columnKeys) {
+    return new ArrayTable<R, C, V>(rowKeys, columnKeys);
+  }
+
+  /*
+   * TODO(jlevy): Add factory methods taking an Enum class, instead of an
+   * iterable, to specify the allowed row keys and/or column keys. Note that
+   * custom serialization logic is needed to support different enum sizes during
+   * serialization and deserialization.
+   */
+
+  /**
+   * Creates an {@code ArrayTable} with the mappings in the provided table.
+   *
+   * <p>If {@code table} includes a mapping with row key {@code r} and a
+   * separate mapping with column key {@code c}, the returned table contains a
+   * mapping with row key {@code r} and column key {@code c}. If that row key /
+   * column key pair in not in {@code table}, the pair maps to {@code null} in
+   * the generated table.
+   *
+   * <p>The returned table allows subsequent {@code put} calls with the row keys
+   * in {@code table.rowKeySet()} and the column keys in {@code
+   * table.columnKeySet()}. Calling {@link #put} with other keys leads to an
+   * {@code IllegalArgumentException}.
+   *
+   * <p>The ordering of {@code table.rowKeySet()} and {@code
+   * table.columnKeySet()} determines the row and column iteration ordering of
+   * the returned table.
+   *
+   * @throws NullPointerException if {@code table} has a null key
+   * @throws IllegalArgumentException if the provided table is empty
+   */
+  public static <R, C, V> ArrayTable<R, C, V> create(Table<R, C, V> table) {
+    return new ArrayTable<R, C, V>(table);
+  }
+
+  /**
+   * Creates an {@code ArrayTable} with the same mappings, allowed keys, and
+   * iteration ordering as the provided {@code ArrayTable}.
+   */
+  public static <R, C, V> ArrayTable<R, C, V> create(
+      ArrayTable<R, C, V> table) {
+    return new ArrayTable<R, C, V>(table);
+  }
+
+  private final ImmutableList<R> rowList;
+  private final ImmutableList<C> columnList;
+
+  // TODO(jlevy): Add getters returning rowKeyToIndex and columnKeyToIndex?
+  private final ImmutableMap<R, Integer> rowKeyToIndex;
+  private final ImmutableMap<C, Integer> columnKeyToIndex;
+  private final V[][] array;
+
+  private ArrayTable(Iterable<? extends R> rowKeys,
+      Iterable<? extends C> columnKeys) {
+    this.rowList = ImmutableList.copyOf(rowKeys);
+    this.columnList = ImmutableList.copyOf(columnKeys);
+    checkArgument(!rowList.isEmpty());
+    checkArgument(!columnList.isEmpty());
+
+    /*
+     * TODO(jlevy): Support empty rowKeys or columnKeys? If we do, when
+     * columnKeys is empty but rowKeys isn't, the table is empty but
+     * containsRow() can return true and rowKeySet() isn't empty.
+     */
+    ImmutableMap.Builder<R, Integer> rowBuilder = ImmutableMap.builder();
+    for (int i = 0; i < rowList.size(); i++) {
+      rowBuilder.put(rowList.get(i), i);
+    }
+    rowKeyToIndex = rowBuilder.build();
+
+    ImmutableMap.Builder<C, Integer> columnBuilder = ImmutableMap.builder();
+    for (int i = 0; i < columnList.size(); i++) {
+      columnBuilder.put(columnList.get(i), i);
+    }
+    columnKeyToIndex = columnBuilder.build();
+
+    @SuppressWarnings("unchecked")
+    V[][] tmpArray
+        = (V[][]) new Object[rowList.size()][columnList.size()];
+    array = tmpArray;
+  }
+
+  private ArrayTable(Table<R, C, V> table) {
+    this(table.rowKeySet(), table.columnKeySet());
+    putAll(table);
+  }
+
+  private ArrayTable(ArrayTable<R, C, V> table) {
+    rowList = table.rowList;
+    columnList = table.columnList;
+    rowKeyToIndex = table.rowKeyToIndex;
+    columnKeyToIndex = table.columnKeyToIndex;
+    @SuppressWarnings("unchecked")
+    V[][] copy = (V[][]) new Object[rowList.size()][columnList.size()];
+    array = copy;
+    for (int i = 0; i < rowList.size(); i++) {
+      System.arraycopy(table.array[i], 0, copy[i], 0, table.array[i].length);
+    }
+  }
+
+  /**
+   * Returns, as an immutable list, the row keys provided when the table was
+   * constructed, including those that are mapped to null values only.
+   */
+  public ImmutableList<R> rowKeyList() {
+    return rowList;
+  }
+
+  /**
+   * Returns, as an immutable list, the column keys provided when the table was
+   * constructed, including those that are mapped to null values only.
+   */
+  public ImmutableList<C> columnKeyList() {
+    return columnList;
+  }
+
+  /**
+   * Returns the value corresponding to the specified row and column indices.
+   * The same value is returned by {@code
+   * get(rowKeyList().get(rowIndex), columnKeyList().get(columnIndex))}, but
+   * this method runs more quickly.
+   *
+   * @param rowIndex position of the row key in {@link #rowKeyList()}
+   * @param columnIndex position of the row key in {@link #columnKeyList()}
+   * @return the value with the specified row and column
+   * @throws IndexOutOfBoundsException if either index is negative, {@code
+   *     rowIndex} is greater then or equal to the number of allowed row keys,
+   *     or {@code columnIndex} is greater then or equal to the number of
+   *     allowed column keys
+   */
+  public V at(int rowIndex, int columnIndex) {
+    return array[rowIndex][columnIndex];
+  }
+
+  /**
+   * Associates {@code value} with the specified row and column indices. The
+   * logic {@code
+   * put(rowKeyList().get(rowIndex), columnKeyList().get(columnIndex), value)}
+   * has the same behavior, but this method runs more quickly.
+   *
+   * @param rowIndex position of the row key in {@link #rowKeyList()}
+   * @param columnIndex position of the row key in {@link #columnKeyList()}
+   * @param value value to store in the table
+   * @return the previous value with the specified row and column
+   * @throws IndexOutOfBoundsException if either index is negative, {@code
+   *     rowIndex} is greater then or equal to the number of allowed row keys,
+   *     or {@code columnIndex} is greater then or equal to the number of
+   *     allowed column keys
+   */
+  public V set(int rowIndex, int columnIndex, @Nullable V value) {
+    V oldValue = array[rowIndex][columnIndex];
+    array[rowIndex][columnIndex] = value;
+    return oldValue;
+  }
+
+  /**
+   * Returns a two-dimensional array with the table contents. The row and column
+   * indices correspond to the positions of the row and column in the iterables
+   * provided during table construction. If the table lacks a mapping for a
+   * given row and column, the corresponding array element is null.
+   *
+   * <p>Subsequent table changes will not modify the array, and vice versa.
+   *
+   * @param valueClass class of values stored in the returned array
+   */
+  public V[][] toArray(Class<V> valueClass) {
+    // Can change to use varargs in JDK 1.6 if we want
+    @SuppressWarnings("unchecked") // TODO: safe?
+    V[][] copy = (V[][]) Array.newInstance(
+        valueClass, new int[] { rowList.size(), columnList.size() });
+    for (int i = 0; i < rowList.size(); i++) {
+      System.arraycopy(array[i], 0, copy[i], 0, array[i].length);
+    }
+    return copy;
+  }
+
+  /**
+   * Not supported. Use {@link #eraseAll} instead.
+   *
+   * @throws UnsupportedOperationException always
+   * @deprecated Use {@link #eraseAll}
+   */
+  @Override
+  @Deprecated public void clear() {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * Associates the value {@code null} with every pair of allowed row and column
+   * keys.
+   */
+  public void eraseAll() {
+    for (V[] row : array) {
+      Arrays.fill(row, null);
+    }
+  }
+
+  /**
+   * Returns {@code true} if the provided keys are among the keys provided when
+   * the table was constructed.
+   */
+  @Override
+  public boolean contains(@Nullable Object rowKey, @Nullable Object columnKey) {
+    return containsRow(rowKey) && containsColumn(columnKey);
+  }
+
+  /**
+   * Returns {@code true} if the provided column key is among the column keys
+   * provided when the table was constructed.
+   */
+  @Override
+  public boolean containsColumn(@Nullable Object columnKey) {
+    return columnKeyToIndex.containsKey(columnKey);
+  }
+
+  /**
+   * Returns {@code true} if the provided row key is among the row keys
+   * provided when the table was constructed.
+   */
+  @Override
+  public boolean containsRow(@Nullable Object rowKey) {
+    return rowKeyToIndex.containsKey(rowKey);
+  }
+
+  @Override
+  public boolean containsValue(@Nullable Object value) {
+    for (V[] row : array) {
+      for (V element : row) {
+        if (Objects.equal(value, element)) {
+          return true;
+        }
+      }
+    }
+    return false;
+  }
+
+  @Override
+  public V get(@Nullable Object rowKey, @Nullable Object columnKey) {
+    Integer rowIndex = rowKeyToIndex.get(rowKey);
+    Integer columnIndex = columnKeyToIndex.get(columnKey);
+    return getIndexed(rowIndex, columnIndex);
+  }
+
+  private V getIndexed(Integer rowIndex, Integer columnIndex) {
+    return (rowIndex == null || columnIndex == null)
+        ? null : array[rowIndex][columnIndex];
+  }
+
+  /**
+   * Always returns {@code false}.
+   */
+  @Override
+  public boolean isEmpty() {
+    return false;
+  }
+
+  /**
+   * {@inheritDoc}
+   *
+   * @throws IllegalArgumentException if {@code rowKey} is not in {@link
+   *     #rowKeySet()} or {@code columnKey} is not in {@link #columnKeySet()}.
+   */
+  @Override
+  public V put(R rowKey, C columnKey, @Nullable V value) {
+    checkNotNull(rowKey);
+    checkNotNull(columnKey);
+    Integer rowIndex = rowKeyToIndex.get(rowKey);
+    checkArgument(rowIndex != null, "Row %s not in %s", rowKey, rowList);
+    Integer columnIndex = columnKeyToIndex.get(columnKey);
+    checkArgument(columnIndex != null,
+        "Column %s not in %s", columnKey, columnList);
+    return set(rowIndex, columnIndex, value);
+  }
+
+  /*
+   * TODO(jlevy): Consider creating a merge() method, similar to putAll() but
+   * copying non-null values only.
+   */
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>If {@code table} is an {@code ArrayTable}, its null values will be
+   * stored in this table, possibly replacing values that were previously
+   * non-null.
+   *
+   * @throws NullPointerException if {@code table} has a null key
+   * @throws IllegalArgumentException if any of the provided table's row keys or
+   *     column keys is not in {@link #rowKeySet()} or {@link #columnKeySet()}
+   */
+  @Override
+  public void putAll(Table<? extends R, ? extends C, ? extends V> table) {
+    for (Cell<? extends R, ? extends C, ? extends V> cell : table.cellSet()) {
+      put(cell.getRowKey(), cell.getColumnKey(), cell.getValue());
+    }
+  }
+
+  /**
+   * Not supported. Use {@link #erase} instead.
+   *
+   * @throws UnsupportedOperationException always
+   * @deprecated Use {@link #erase}
+   */
+  @Override
+  @Deprecated public V remove(Object rowKey, Object columnKey) {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * Associates the value {@code null} with the specified keys, assuming both
+   * keys are valid. If either key is null or isn't among the keys provided
+   * during construction, this method has no effect.
+   *
+   * <p>This method is equivalent to {@code put(rowKey, columnKey, null)} when
+   * both provided keys are valid.
+   *
+   * @param rowKey row key of mapping to be erased
+   * @param columnKey column key of mapping to be erased
+   * @return the value previously associated with the keys, or {@code null} if
+   *     no mapping existed for the keys
+   */
+  public V erase(@Nullable Object rowKey, @Nullable Object columnKey) {
+    Integer rowIndex = rowKeyToIndex.get(rowKey);
+    Integer columnIndex = columnKeyToIndex.get(columnKey);
+    if (rowIndex == null || columnIndex == null) {
+      return null;
+    }
+    return set(rowIndex, columnIndex, null);
+  }
+
+  // TODO(jlevy): Add eraseRow and eraseColumn methods?
+
+  @Override
+  public int size() {
+    return rowList.size() * columnList.size();
+  }
+
+  @Override public boolean equals(@Nullable Object obj) {
+    if (obj instanceof Table) {
+      Table<?, ?, ?> other = (Table<?, ?, ?>) obj;
+      return cellSet().equals(other.cellSet());
+    }
+    return false;
+  }
+
+  @Override public int hashCode() {
+    return cellSet().hashCode();
+  }
+
+  /**
+   * Returns the string representation {@code rowMap().toString()}.
+   */
+  @Override public String toString() {
+    return rowMap().toString();
+  }
+
+  private transient CellSet cellSet;
+
+  /**
+   * Returns an unmodifiable set of all row key / column key / value
+   * triplets. Changes to the table will update the returned set.
+   *
+   * <p>The returned set's iterator traverses the mappings with the first row
+   * key, the mappings with the second row key, and so on.
+   *
+   * <p>The value in the returned cells may change if the table subsequently
+   * changes.
+   *
+   * @return set of table cells consisting of row key / column key / value
+   *     triplets
+   */
+  @Override
+  public Set<Cell<R, C, V>> cellSet() {
+    CellSet set = cellSet;
+    return (set == null) ? cellSet = new CellSet() : set;
+  }
+
+  private class CellSet extends AbstractSet<Cell<R, C, V>> {
+
+    @Override public Iterator<Cell<R, C, V>> iterator() {
+      return new AbstractIndexedListIterator<Cell<R, C, V>>(size()) {
+        @Override protected Cell<R, C, V> get(final int index) {
+          return new Tables.AbstractCell<R, C, V>() {
+            final int rowIndex = index / columnList.size();
+            final int columnIndex = index % columnList.size();
+            @Override
+            public R getRowKey() {
+              return rowList.get(rowIndex);
+            }
+            @Override
+            public C getColumnKey() {
+              return columnList.get(columnIndex);
+            }
+            @Override
+            public V getValue() {
+              return array[rowIndex][columnIndex];
+            }
+          };
+        }
+      };
+    }
+
+    @Override public int size() {
+      return ArrayTable.this.size();
+    }
+
+    @Override public boolean contains(Object obj) {
+      if (obj instanceof Cell) {
+        Cell<?, ?, ?> cell = (Cell<?, ?, ?>) obj;
+        Integer rowIndex = rowKeyToIndex.get(cell.getRowKey());
+        Integer columnIndex = columnKeyToIndex.get(cell.getColumnKey());
+        return rowIndex != null
+            && columnIndex != null
+            && Objects.equal(array[rowIndex][columnIndex], cell.getValue());
+      }
+      return false;
+    }
+  }
+
+  /**
+   * Returns a view of all mappings that have the given column key. If the
+   * column key isn't in {@link #columnKeySet()}, an empty immutable map is
+   * returned.
+   *
+   * <p>Otherwise, for each row key in {@link #rowKeySet()}, the returned map
+   * associates the row key with the corresponding value in the table. Changes
+   * to the returned map will update the underlying table, and vice versa.
+   *
+   * @param columnKey key of column to search for in the table
+   * @return the corresponding map from row keys to values
+   */
+  @Override
+  public Map<R, V> column(C columnKey) {
+    checkNotNull(columnKey);
+    Integer columnIndex = columnKeyToIndex.get(columnKey);
+    return (columnIndex == null)
+        ? ImmutableMap.<R, V>of() : new Column(columnIndex);
+  }
+
+  private class Column extends AbstractMap<R, V> {
+    final int columnIndex;
+
+    Column(int columnIndex) {
+      this.columnIndex = columnIndex;
+    }
+
+    ColumnEntrySet entrySet;
+
+    @Override public Set<Entry<R, V>> entrySet() {
+      ColumnEntrySet set = entrySet;
+      return (set == null) ? entrySet = new ColumnEntrySet(columnIndex) : set;
+    }
+
+    @Override public V get(Object rowKey) {
+      Integer rowIndex = rowKeyToIndex.get(rowKey);
+      return getIndexed(rowIndex, columnIndex);
+    }
+
+    @Override public boolean containsKey(Object rowKey) {
+      return rowKeyToIndex.containsKey(rowKey);
+    }
+
+    @Override public V put(R rowKey, V value) {
+      checkNotNull(rowKey);
+      Integer rowIndex = rowKeyToIndex.get(rowKey);
+      checkArgument(rowIndex != null, "Row %s not in %s", rowKey, rowList);
+      return set(rowIndex, columnIndex, value);
+    }
+
+    @Override public Set<R> keySet() {
+      return rowKeySet();
+    }
+  }
+
+  private class ColumnEntrySet extends AbstractSet<Entry<R, V>> {
+    final int columnIndex;
+
+    ColumnEntrySet(int columnIndex) {
+      this.columnIndex = columnIndex;
+    }
+
+    @Override public Iterator<Entry<R, V>> iterator() {
+      return new AbstractIndexedListIterator<Entry<R, V>>(size()) {
+        @Override protected Entry<R, V> get(final int rowIndex) {
+          return new AbstractMapEntry<R, V>() {
+            @Override public R getKey() {
+              return rowList.get(rowIndex);
+            }
+            @Override public V getValue() {
+              return array[rowIndex][columnIndex];
+            }
+            @Override public V setValue(V value) {
+              return ArrayTable.this.set(rowIndex, columnIndex, value);
+            }
+          };
+        }
+      };
+    }
+
+    @Override public int size() {
+      return rowList.size();
+    }
+  }
+
+  /**
+   * Returns an immutable set of the valid column keys, including those that
+   * are associated with null values only.
+   *
+   * @return immutable set of column keys
+   */
+  @Override
+  public ImmutableSet<C> columnKeySet() {
+    return columnKeyToIndex.keySet();
+  }
+
+  private transient ColumnMap columnMap;
+
+  @Override
+  public Map<C, Map<R, V>> columnMap() {
+    ColumnMap map = columnMap;
+    return (map == null) ? columnMap = new ColumnMap() : map;
+  }
+
+  private class ColumnMap extends AbstractMap<C, Map<R, V>> {
+    transient ColumnMapEntrySet entrySet;
+
+    @Override public Set<Entry<C, Map<R, V>>> entrySet() {
+      ColumnMapEntrySet set = entrySet;
+      return (set == null) ? entrySet = new ColumnMapEntrySet() : set;
+    }
+
+    @Override public Map<R, V> get(Object columnKey) {
+      Integer columnIndex = columnKeyToIndex.get(columnKey);
+      return (columnIndex == null) ? null : new Column(columnIndex);
+    }
+
+    @Override public boolean containsKey(Object columnKey) {
+      return containsColumn(columnKey);
+    }
+
+    @Override public Set<C> keySet() {
+      return columnKeySet();
+    }
+
+    @Override public Map<R, V> remove(Object columnKey) {
+      throw new UnsupportedOperationException();
+    }
+  }
+
+  private class ColumnMapEntrySet extends AbstractSet<Entry<C, Map<R, V>>> {
+    @Override public Iterator<Entry<C, Map<R, V>>> iterator() {
+      return new AbstractIndexedListIterator<Entry<C, Map<R, V>>>(size()) {
+        @Override protected Entry<C, Map<R, V>> get(int index) {
+          return Maps.<C, Map<R, V>>immutableEntry(columnList.get(index),
+              new Column(index));
+        }
+      };
+    }
+
+    @Override public int size() {
+      return columnList.size();
+    }
+  }
+
+  /**
+   * Returns a view of all mappings that have the given row key. If the
+   * row key isn't in {@link #rowKeySet()}, an empty immutable map is
+   * returned.
+   *
+   * <p>Otherwise, for each column key in {@link #columnKeySet()}, the returned
+   * map associates the column key with the corresponding value in the
+   * table. Changes to the returned map will update the underlying table, and
+   * vice versa.
+   *
+   * @param rowKey key of row to search for in the table
+   * @return the corresponding map from column keys to values
+   */
+  @Override
+  public Map<C, V> row(R rowKey) {
+    checkNotNull(rowKey);
+    Integer rowIndex = rowKeyToIndex.get(rowKey);
+    return (rowIndex == null) ? ImmutableMap.<C, V>of() : new Row(rowIndex);
+  }
+
+  private class Row extends AbstractMap<C, V> {
+    final int rowIndex;
+
+    Row(int rowIndex) {
+      this.rowIndex = rowIndex;
+    }
+
+    RowEntrySet entrySet;
+
+    @Override public Set<Entry<C, V>> entrySet() {
+      RowEntrySet set = entrySet;
+      return (set == null) ? entrySet = new RowEntrySet(rowIndex) : set;
+    }
+
+    @Override public V get(Object columnKey) {
+      Integer columnIndex = columnKeyToIndex.get(columnKey);
+      return getIndexed(rowIndex, columnIndex);
+    }
+
+    @Override public boolean containsKey(Object columnKey) {
+      return containsColumn(columnKey);
+    }
+
+    @Override public V put(C columnKey, V value) {
+      checkNotNull(columnKey);
+      Integer columnIndex = columnKeyToIndex.get(columnKey);
+      checkArgument(columnIndex != null,
+          "Column %s not in %s", columnKey, columnList);
+      return set(rowIndex, columnIndex, value);
+    }
+
+    @Override public Set<C> keySet() {
+      return columnKeySet();
+    }
+  }
+
+  private class RowEntrySet extends AbstractSet<Entry<C, V>> {
+    final int rowIndex;
+
+    RowEntrySet(int rowIndex) {
+      this.rowIndex = rowIndex;
+    }
+
+    @Override public Iterator<Entry<C, V>> iterator() {
+      return new AbstractIndexedListIterator<Entry<C, V>>(size()) {
+        @Override protected Entry<C, V> get(final int columnIndex) {
+          return new AbstractMapEntry<C, V>() {
+            @Override public C getKey() {
+              return columnList.get(columnIndex);
+            }
+            @Override public V getValue() {
+              return array[rowIndex][columnIndex];
+            }
+            @Override public V setValue(V value) {
+              return ArrayTable.this.set(rowIndex, columnIndex, value);
+            }
+          };
+        }
+      };
+    }
+
+    @Override public int size() {
+      return columnList.size();
+    }
+  }
+
+  /**
+   * Returns an immutable set of the valid row keys, including those that are
+   * associated with null values only.
+   *
+   * @return immutable set of row keys
+   */
+  @Override
+  public ImmutableSet<R> rowKeySet() {
+    return rowKeyToIndex.keySet();
+  }
+
+  private transient RowMap rowMap;
+
+  @Override
+  public Map<R, Map<C, V>> rowMap() {
+    RowMap map = rowMap;
+    return (map == null) ? rowMap = new RowMap() : map;
+  }
+
+  private class RowMap extends AbstractMap<R, Map<C, V>> {
+    transient RowMapEntrySet entrySet;
+
+    @Override public Set<Entry<R, Map<C, V>>> entrySet() {
+      RowMapEntrySet set = entrySet;
+      return (set == null) ? entrySet = new RowMapEntrySet() : set;
+    }
+
+    @Override public Map<C, V> get(Object rowKey) {
+      Integer rowIndex = rowKeyToIndex.get(rowKey);
+      return (rowIndex == null) ? null : new Row(rowIndex);
+    }
+
+    @Override public boolean containsKey(Object rowKey) {
+      return containsRow(rowKey);
+    }
+
+    @Override public Set<R> keySet() {
+      return rowKeySet();
+    }
+
+    @Override public Map<C, V> remove(Object rowKey) {
+      throw new UnsupportedOperationException();
+    }
+  }
+
+  private class RowMapEntrySet extends AbstractSet<Entry<R, Map<C, V>>> {
+    @Override public Iterator<Entry<R, Map<C, V>>> iterator() {
+      return new AbstractIndexedListIterator<Entry<R, Map<C, V>>>(size()) {
+        @Override protected Entry<R, Map<C, V>> get(int index) {
+          return Maps.<R, Map<C, V>>immutableEntry(rowList.get(index),
+              new Row(index));
+        }
+      };
+    }
+
+    @Override public int size() {
+      return rowList.size();
+    }
+  }
+
+  private transient Collection<V> values;
+
+  /**
+   * Returns an unmodifiable collection of all values, which may contain
+   * duplicates. Changes to the table will update the returned collection.
+   *
+   * <p>The returned collection's iterator traverses the values of the first row
+   * key, the values of the second row key, and so on.
+   *
+   * @return collection of values
+   */
+  @Override
+  public Collection<V> values() {
+    Collection<V> v = values;
+    return (v == null) ? values = new Values() : v;
+  }
+
+  private class Values extends AbstractCollection<V> {
+    @Override public Iterator<V> iterator() {
+      return new AbstractIndexedListIterator<V>(size()) {
+        @Override protected V get(int index) {
+          int rowIndex = index / columnList.size();
+          int columnIndex = index % columnList.size();
+          return array[rowIndex][columnIndex];
+        }
+      };
+    }
+
+    @Override public int size() {
+      return ArrayTable.this.size();
+    }
+
+    @Override public boolean contains(Object value) {
+      return containsValue(value);
+    }
+  }
+
+  private static final long serialVersionUID = 0;
+}
diff --git a/guava/src/com/google/common/collect/AsynchronousComputationException.java b/guava/src/com/google/common/collect/AsynchronousComputationException.java
new file mode 100644
index 0000000..e64e17b
--- /dev/null
+++ b/guava/src/com/google/common/collect/AsynchronousComputationException.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+/**
+ * Wraps an exception that occurred during a computation in a different thread.
+ *
+ * @author Bob Lee
+ * @since 2.0 (imported from Google Collections Library)
+ * @deprecated this class is unused by com.google.common.collect. <b>This class
+ *     is scheduled for deletion in November 2012.</b>
+ */
+@Deprecated
+public
+class AsynchronousComputationException extends ComputationException {
+  /**
+   * Creates a new instance with the given cause.
+   */
+  public AsynchronousComputationException(Throwable cause) {
+    super(cause);
+  }
+  private static final long serialVersionUID = 0;
+}
diff --git a/guava/src/com/google/common/collect/BiMap.java b/guava/src/com/google/common/collect/BiMap.java
new file mode 100644
index 0000000..34d6677
--- /dev/null
+++ b/guava/src/com/google/common/collect/BiMap.java
@@ -0,0 +1,106 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Map;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * A bimap (or "bidirectional map") is a map that preserves the uniqueness of
+ * its values as well as that of its keys. This constraint enables bimaps to
+ * support an "inverse view", which is another bimap containing the same entries
+ * as this bimap but with reversed keys and values.
+ *
+ * @author Kevin Bourrillion
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible
+public interface BiMap<K, V> extends Map<K, V> {
+  // Modification Operations
+
+  /**
+   * {@inheritDoc}
+   *
+   * @throws IllegalArgumentException if the given value is already bound to a
+   *     different key in this bimap. The bimap will remain unmodified in this
+   *     event. To avoid this exception, call {@link #forcePut} instead.
+   */
+  @Override
+  V put(@Nullable K key, @Nullable V value);
+
+  /**
+   * An alternate form of {@code put} that silently removes any existing entry
+   * with the value {@code value} before proceeding with the {@link #put}
+   * operation. If the bimap previously contained the provided key-value
+   * mapping, this method has no effect.
+   *
+   * <p>Note that a successful call to this method could cause the size of the
+   * bimap to increase by one, stay the same, or even decrease by one.
+   *
+   * <p><b>Warning:</b> If an existing entry with this value is removed, the key
+   * for that entry is discarded and not returned.
+   *
+   * @param key the key with which the specified value is to be associated
+   * @param value the value to be associated with the specified key
+   * @return the value which was previously associated with the key, which may
+   *     be {@code null}, or {@code null} if there was no previous entry
+   */
+  V forcePut(@Nullable K key, @Nullable V value);
+
+  // Bulk Operations
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p><b>Warning:</b> the results of calling this method may vary depending on
+   * the iteration order of {@code map}.
+   *
+   * @throws IllegalArgumentException if an attempt to {@code put} any
+   *     entry fails. Note that some map entries may have been added to the
+   *     bimap before the exception was thrown.
+   */
+  @Override
+  void putAll(Map<? extends K, ? extends V> map);
+
+  // Views
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>Because a bimap has unique values, this method returns a {@link Set},
+   * instead of the {@link java.util.Collection} specified in the {@link Map}
+   * interface.
+   */
+  @Override
+  Set<V> values();
+
+  /**
+   * Returns the inverse view of this bimap, which maps each of this bimap's
+   * values to its associated key. The two bimaps are backed by the same data;
+   * any changes to one will appear in the other.
+   *
+   * <p><b>Note:</b>There is no guaranteed correspondence between the iteration
+   * order of a bimap and that of its inverse.
+   *
+   * @return the inverse view of this bimap
+   */
+  BiMap<V, K> inverse();
+}
diff --git a/guava/src/com/google/common/collect/BoundType.java b/guava/src/com/google/common/collect/BoundType.java
new file mode 100644
index 0000000..3632b32
--- /dev/null
+++ b/guava/src/com/google/common/collect/BoundType.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+
+/**
+ * Indicates whether an endpoint of some range is contained in the range itself ("closed") or not
+ * ("open"). If a range is unbounded on a side, it is neither open nor closed on that side; the
+ * bound simply does not exist.
+ *
+ * @since 10.0
+ */
+@Beta
+@GwtCompatible
+public enum BoundType {
+  /**
+   * The endpoint value <i>is not</i> considered part of the set ("exclusive").
+   */
+  OPEN,
+
+  /**
+   * The endpoint value <i>is</i> considered part of the set ("inclusive").
+   */
+  CLOSED;
+
+  /**
+   * Returns the bound type corresponding to a boolean value for inclusivity.
+   */
+  static BoundType forBoolean(boolean inclusive) {
+    return inclusive ? CLOSED : OPEN;
+  }
+}
diff --git a/guava/src/com/google/common/collect/BstAggregate.java b/guava/src/com/google/common/collect/BstAggregate.java
new file mode 100644
index 0000000..84d150f
--- /dev/null
+++ b/guava/src/com/google/common/collect/BstAggregate.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import javax.annotation.Nullable;
+
+/**
+ * An integer-valued function on binary search tree nodes that adds between nodes.
+ * 
+ * <p>The value of individual entries must fit into an {@code int}, but the value of an entire
+ * tree can require a {@code long}.
+ * 
+ * @author Louis Wasserman
+ */
+@GwtCompatible
+interface BstAggregate<N extends BstNode<?, N>> {
+  /**
+   * The total value on an entire subtree. Must be equal to the sum of the {@link #entryValue
+   * entryValue} of this node and all its descendants.
+   */
+  long treeValue(@Nullable N tree);
+
+  /**
+   * The value on a single entry, ignoring its descendants.
+   */
+  int entryValue(N entry);
+}
diff --git a/guava/src/com/google/common/collect/BstBalancePolicy.java b/guava/src/com/google/common/collect/BstBalancePolicy.java
new file mode 100644
index 0000000..d1e93d0
--- /dev/null
+++ b/guava/src/com/google/common/collect/BstBalancePolicy.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import javax.annotation.Nullable;
+
+/**
+ * A local balancing policy for modified nodes in binary search trees.
+ *
+ * @author Louis Wasserman
+ * @param <N> The type of the nodes in the trees that this {@code BstRebalancePolicy} can
+ *        rebalance.
+ */
+@GwtCompatible
+interface BstBalancePolicy<N extends BstNode<?, N>> {
+  /**
+   * Constructs a locally balanced tree around the key and value data in {@code source}, and the
+   * subtrees {@code left} and {@code right}. It is guaranteed that the resulting tree will have
+   * the same inorder traversal order as the subtree {@code left}, then the entry {@code source},
+   * then the subtree {@code right}.
+   */
+  N balance(BstNodeFactory<N> nodeFactory, N source, @Nullable N left, @Nullable N right);
+
+  /**
+   * Constructs a locally balanced tree around the subtrees {@code left} and {@code right}. It is
+   * guaranteed that the resulting tree will have the same inorder traversal order as the subtree
+   * {@code left}, then the subtree {@code right}.
+   */
+  @Nullable
+  N combine(BstNodeFactory<N> nodeFactory, @Nullable N left, @Nullable N right);
+}
diff --git a/guava/src/com/google/common/collect/BstCountBasedBalancePolicies.java b/guava/src/com/google/common/collect/BstCountBasedBalancePolicies.java
new file mode 100644
index 0000000..5b98b91
--- /dev/null
+++ b/guava/src/com/google/common/collect/BstCountBasedBalancePolicies.java
@@ -0,0 +1,212 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.collect.BstOperations.extractMax;
+import static com.google.common.collect.BstOperations.extractMin;
+import static com.google.common.collect.BstOperations.insertMax;
+import static com.google.common.collect.BstOperations.insertMin;
+import static com.google.common.collect.BstSide.LEFT;
+import static com.google.common.collect.BstSide.RIGHT;
+
+import com.google.common.annotations.GwtCompatible;
+
+import javax.annotation.Nullable;
+
+/**
+ * A tree-size-based set of balancing policies, based on <a
+ * href="http://www.swiss.ai.mit.edu/~adams/BB/"> Stephen Adams, "Efficient sets: a balancing
+ * act."</a>.
+ *
+ * @author Louis Wasserman
+ */
+@GwtCompatible
+final class BstCountBasedBalancePolicies {
+  private BstCountBasedBalancePolicies() {}
+
+  private static final int SINGLE_ROTATE_RATIO = 4;
+  private static final int SECOND_ROTATE_RATIO = 2;
+
+  /**
+   * Returns a balance policy that does no balancing or the bare minimum (for {@code combine}).
+   */
+  public static <N extends BstNode<?, N>> BstBalancePolicy<N> noRebalancePolicy(
+      final BstAggregate<N> countAggregate) {
+    checkNotNull(countAggregate);
+    return new BstBalancePolicy<N>() {
+      @Override
+      public N balance(
+          BstNodeFactory<N> nodeFactory, N source, @Nullable N left, @Nullable N right) {
+        return checkNotNull(nodeFactory).createNode(source, left, right);
+      }
+
+      @Nullable
+      @Override
+      public N combine(BstNodeFactory<N> nodeFactory, @Nullable N left, @Nullable N right) {
+        if (left == null) {
+          return right;
+        } else if (right == null) {
+          return left;
+        } else if (countAggregate.treeValue(left) > countAggregate.treeValue(right)) {
+          return nodeFactory.createNode(
+              left, left.childOrNull(LEFT), combine(nodeFactory, left.childOrNull(RIGHT), right));
+        } else {
+          return nodeFactory.createNode(right, combine(nodeFactory, left, right.childOrNull(LEFT)),
+              right.childOrNull(RIGHT));
+        }
+      }
+    };
+  }
+
+  /**
+   * Returns a balance policy that expects the sizes of each side to be at most one node (added or
+   * removed) away from being balanced. {@code balance} takes {@code O(1)} time, and {@code
+   * combine} takes {@code O(log n)} time.
+   */
+  public static <K, N extends BstNode<K, N>> BstBalancePolicy<N> singleRebalancePolicy(
+      final BstAggregate<N> countAggregate) {
+    checkNotNull(countAggregate);
+    return new BstBalancePolicy<N>() {
+      @Override
+      public N balance(
+          BstNodeFactory<N> nodeFactory, N source, @Nullable N left, @Nullable N right) {
+        long countL = countAggregate.treeValue(left);
+        long countR = countAggregate.treeValue(right);
+        if (countL + countR > 1) {
+          if (countR >= SINGLE_ROTATE_RATIO * countL) {
+            return rotateL(nodeFactory, source, left, right);
+          } else if (countL >= SINGLE_ROTATE_RATIO * countR) {
+            return rotateR(nodeFactory, source, left, right);
+          }
+        }
+        return nodeFactory.createNode(source, left, right);
+      }
+
+      private N rotateL(BstNodeFactory<N> nodeFactory, N source, @Nullable N left, N right) {
+        checkNotNull(right);
+        N rl = right.childOrNull(LEFT);
+        N rr = right.childOrNull(RIGHT);
+        if (countAggregate.treeValue(rl) >= SECOND_ROTATE_RATIO * countAggregate.treeValue(rr)) {
+          right = singleR(nodeFactory, right, rl, rr);
+        }
+        return singleL(nodeFactory, source, left, right);
+      }
+
+      private N rotateR(BstNodeFactory<N> nodeFactory, N source, N left, @Nullable N right) {
+        checkNotNull(left);
+        N lr = left.childOrNull(RIGHT);
+        N ll = left.childOrNull(LEFT);
+        if (countAggregate.treeValue(lr) >= SECOND_ROTATE_RATIO * countAggregate.treeValue(ll)) {
+          left = singleL(nodeFactory, left, ll, lr);
+        }
+        return singleR(nodeFactory, source, left, right);
+      }
+
+      private N singleL(BstNodeFactory<N> nodeFactory, N source, @Nullable N left, N right) {
+        checkNotNull(right);
+        return nodeFactory.createNode(right,
+            nodeFactory.createNode(source, left, right.childOrNull(LEFT)),
+            right.childOrNull(RIGHT));
+      }
+
+      private N singleR(BstNodeFactory<N> nodeFactory, N source, N left, @Nullable N right) {
+        checkNotNull(left);
+        return nodeFactory.createNode(left, left.childOrNull(LEFT),
+            nodeFactory.createNode(source, left.childOrNull(RIGHT), right));
+      }
+
+      @Nullable
+      @Override
+      public N combine(BstNodeFactory<N> nodeFactory, @Nullable N left, @Nullable N right) {
+        if (left == null) {
+          return right;
+        } else if (right == null) {
+          return left;
+        }
+        N newRootSource;
+        if (countAggregate.treeValue(left) > countAggregate.treeValue(right)) {
+          BstMutationResult<K, N> extractLeftMax = extractMax(left, nodeFactory, this);
+          newRootSource = extractLeftMax.getOriginalTarget();
+          left = extractLeftMax.getChangedRoot();
+        } else {
+          BstMutationResult<K, N> extractRightMin = extractMin(right, nodeFactory, this);
+          newRootSource = extractRightMin.getOriginalTarget();
+          right = extractRightMin.getChangedRoot();
+        }
+        return nodeFactory.createNode(newRootSource, left, right);
+      }
+    };
+  }
+
+  /**
+   * Returns a balance policy that makes no assumptions on the relative balance of the two sides
+   * and performs a full rebalancing as necessary. Both {@code balance} and {@code combine} take
+   * {@code O(log n)} time.
+   */
+  public static <K, N extends BstNode<K, N>> BstBalancePolicy<N> fullRebalancePolicy(
+      final BstAggregate<N> countAggregate) {
+    checkNotNull(countAggregate);
+    final BstBalancePolicy<N> singleBalancePolicy =
+        BstCountBasedBalancePolicies.<K, N>singleRebalancePolicy(countAggregate);
+    return new BstBalancePolicy<N>() {
+      @Override
+      public N balance(
+          BstNodeFactory<N> nodeFactory, N source, @Nullable N left, @Nullable N right) {
+        if (left == null) {
+          return insertMin(right, source, nodeFactory, singleBalancePolicy);
+        } else if (right == null) {
+          return insertMax(left, source, nodeFactory, singleBalancePolicy);
+        }
+        long countL = countAggregate.treeValue(left);
+        long countR = countAggregate.treeValue(right);
+        if (SINGLE_ROTATE_RATIO * countL <= countR) {
+          N resultLeft = balance(nodeFactory, source, left, right.childOrNull(LEFT));
+          return singleBalancePolicy.balance(
+              nodeFactory, right, resultLeft, right.childOrNull(RIGHT));
+        } else if (SINGLE_ROTATE_RATIO * countR <= countL) {
+          N resultRight = balance(nodeFactory, source, left.childOrNull(RIGHT), right);
+          return singleBalancePolicy.balance(
+              nodeFactory, left, left.childOrNull(LEFT), resultRight);
+        } else {
+          return nodeFactory.createNode(source, left, right);
+        }
+      }
+
+      @Nullable
+      @Override
+      public N combine(BstNodeFactory<N> nodeFactory, @Nullable N left, @Nullable N right) {
+        if (left == null) {
+          return right;
+        } else if (right == null) {
+          return left;
+        }
+        long countL = countAggregate.treeValue(left);
+        long countR = countAggregate.treeValue(right);
+        if (SINGLE_ROTATE_RATIO * countL <= countR) {
+          N resultLeft = combine(nodeFactory, left, right.childOrNull(LEFT));
+          return singleBalancePolicy.balance(
+              nodeFactory, right, resultLeft, right.childOrNull(RIGHT));
+        } else if (SINGLE_ROTATE_RATIO * countR <= countL) {
+          N resultRight = combine(nodeFactory, left.childOrNull(RIGHT), right);
+          return singleBalancePolicy.balance(
+              nodeFactory, left, left.childOrNull(LEFT), resultRight);
+        } else {
+          return singleBalancePolicy.combine(nodeFactory, left, right);
+        }
+      }
+    };
+  }
+}
diff --git a/guava/src/com/google/common/collect/BstInOrderPath.java b/guava/src/com/google/common/collect/BstInOrderPath.java
new file mode 100644
index 0000000..de14c39
--- /dev/null
+++ b/guava/src/com/google/common/collect/BstInOrderPath.java
@@ -0,0 +1,126 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Optional;
+
+import java.util.NoSuchElementException;
+
+import javax.annotation.Nullable;
+
+/**
+ * A {@code BstPath} supporting inorder traversal operations.
+ *
+ * @author Louis Wasserman
+ */
+@GwtCompatible
+final class BstInOrderPath<N extends BstNode<?, N>> extends BstPath<N, BstInOrderPath<N>> {
+  /**
+   * The factory to use to construct {@code BstInOrderPath} values.
+   */
+  public static <N extends BstNode<?, N>> BstPathFactory<N, BstInOrderPath<N>> inOrderFactory() {
+    return new BstPathFactory<N, BstInOrderPath<N>>() {
+      @Override
+      public BstInOrderPath<N> extension(BstInOrderPath<N> path, BstSide side) {
+        return BstInOrderPath.extension(path, side);
+      }
+
+      @Override
+      public BstInOrderPath<N> initialPath(N root) {
+        return new BstInOrderPath<N>(root, null, null);
+      }
+    };
+  }
+
+  private static <N extends BstNode<?, N>> BstInOrderPath<N> extension(
+      BstInOrderPath<N> path, BstSide side) {
+    checkNotNull(path);
+    N tip = path.getTip();
+    return new BstInOrderPath<N>(tip.getChild(side), side, path);
+  }
+
+  private final BstSide sideExtension;
+  private transient Optional<BstInOrderPath<N>> prevInOrder;
+  private transient Optional<BstInOrderPath<N>> nextInOrder;
+
+  private BstInOrderPath(
+      N tip, @Nullable BstSide sideExtension, @Nullable BstInOrderPath<N> tail) {
+    super(tip, tail);
+    this.sideExtension = sideExtension;
+    assert (sideExtension == null) == (tail == null);
+  }
+
+  private Optional<BstInOrderPath<N>> computeNextInOrder(BstSide side) {
+    if (getTip().hasChild(side)) {
+      BstInOrderPath<N> path = extension(this, side);
+      BstSide otherSide = side.other();
+      while (path.getTip().hasChild(otherSide)) {
+        path = extension(path, otherSide);
+      }
+      return Optional.of(path);
+    } else {
+      BstInOrderPath<N> current = this;
+      while (current.sideExtension == side) {
+        current = current.getPrefix();
+      }
+      current = current.prefixOrNull();
+      return Optional.fromNullable(current);
+    }
+  }
+
+  private Optional<BstInOrderPath<N>> nextInOrder(BstSide side) {
+    Optional<BstInOrderPath<N>> result;
+    switch (side) {
+      case LEFT:
+        result = prevInOrder;
+        return (result == null) ? prevInOrder = computeNextInOrder(side) : result;
+      case RIGHT:
+        result = nextInOrder;
+        return (result == null) ? nextInOrder = computeNextInOrder(side) : result;
+      default:
+        throw new AssertionError();
+    }
+  }
+
+  /**
+   * Returns {@code true} if there is a next path in an in-order traversal in the given direction.
+   */
+  public boolean hasNext(BstSide side) {
+    return nextInOrder(side).isPresent();
+  }
+
+  /**
+   * Returns the next path in an in-order traversal in the given direction.
+   *
+   * @throws NoSuchElementException if this would be the last path in an in-order traversal
+   */
+  public BstInOrderPath<N> next(BstSide side) {
+    if (!hasNext(side)) {
+      throw new NoSuchElementException();
+    }
+    return nextInOrder(side).get();
+  }
+
+  /**
+   * Returns the direction this path went in relative to its tail path, or {@code null} if this
+   * path has no tail.
+   */
+  public BstSide getSideOfExtension() {
+    return sideExtension;
+  }
+}
diff --git a/guava/src/com/google/common/collect/BstModificationResult.java b/guava/src/com/google/common/collect/BstModificationResult.java
new file mode 100644
index 0000000..2c7c036
--- /dev/null
+++ b/guava/src/com/google/common/collect/BstModificationResult.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.GwtCompatible;
+
+import javax.annotation.Nullable;
+
+/**
+ * The result of a {@code BstModifier}.
+ *
+ * @author Louis Wasserman
+ */
+@GwtCompatible
+final class BstModificationResult<N extends BstNode<?, N>> {
+  enum ModificationType {
+    IDENTITY, REBUILDING_CHANGE, REBALANCING_CHANGE;
+  }
+
+  static <N extends BstNode<?, N>> BstModificationResult<N> identity(@Nullable N target) {
+    return new BstModificationResult<N>(target, target, ModificationType.IDENTITY);
+  }
+
+  static <N extends BstNode<?, N>> BstModificationResult<N> rebuildingChange(
+      @Nullable N originalTarget, @Nullable N changedTarget) {
+    return new BstModificationResult<N>(
+        originalTarget, changedTarget, ModificationType.REBUILDING_CHANGE);
+  }
+
+  static <N extends BstNode<?, N>> BstModificationResult<N> rebalancingChange(
+      @Nullable N originalTarget, @Nullable N changedTarget) {
+    return new BstModificationResult<N>(
+        originalTarget, changedTarget, ModificationType.REBALANCING_CHANGE);
+  }
+
+  @Nullable private final N originalTarget;
+  @Nullable private final N changedTarget;
+  private final ModificationType type;
+
+  private BstModificationResult(
+      @Nullable N originalTarget, @Nullable N changedTarget, ModificationType type) {
+    this.originalTarget = originalTarget;
+    this.changedTarget = changedTarget;
+    this.type = checkNotNull(type);
+  }
+
+  @Nullable
+  N getOriginalTarget() {
+    return originalTarget;
+  }
+
+  @Nullable
+  N getChangedTarget() {
+    return changedTarget;
+  }
+
+  ModificationType getType() {
+    return type;
+  }
+}
diff --git a/guava/src/com/google/common/collect/BstModifier.java b/guava/src/com/google/common/collect/BstModifier.java
new file mode 100644
index 0000000..d972800
--- /dev/null
+++ b/guava/src/com/google/common/collect/BstModifier.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import javax.annotation.Nullable;
+
+/**
+ * A specification for a local change to an entry in a binary search tree.
+ *
+ * @author Louis Wasserman
+ */
+@GwtCompatible
+interface BstModifier<K, N extends BstNode<K, N>> {
+
+  /**
+   * Given a target key and the original entry (if any) with the specified key, returns the entry
+   * with key {@code key} after this mutation has been performed. The result must either be {@code
+   * null} or must have a key that compares as equal to {@code key}. A deletion operation, for
+   * example, would always return {@code null}, or an insertion operation would always return a
+   * non-null {@code insertedEntry}.
+   *
+   * <p>If this method returns a non-null entry of type {@code N}, any children it has will be
+   * ignored.
+   *
+   * <p>This method may return {@code originalEntry} itself to indicate that no change is made.
+   *
+   * @param key The key being targeted for modification.
+   * @param originalEntry The original entry in the binary search tree with the specified key, if
+   *        any. No guarantees are made about the children of this entry when treated as a node; in
+   *        particular, they are not necessarily the children of the corresponding node in the
+   *        binary search tree.
+   * @return the entry (if any) with the specified key after this modification is performed
+   */
+  BstModificationResult<N> modify(K key, @Nullable N originalEntry);
+}
diff --git a/guava/src/com/google/common/collect/BstMutationResult.java b/guava/src/com/google/common/collect/BstMutationResult.java
new file mode 100644
index 0000000..68309a8
--- /dev/null
+++ b/guava/src/com/google/common/collect/BstMutationResult.java
@@ -0,0 +1,156 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.collect.BstModificationResult.ModificationType.IDENTITY;
+import static com.google.common.collect.BstModificationResult.ModificationType.REBUILDING_CHANGE;
+import static com.google.common.collect.BstModificationResult.ModificationType.REBALANCING_CHANGE;
+import static com.google.common.collect.BstSide.LEFT;
+import static com.google.common.collect.BstSide.RIGHT;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.collect.BstModificationResult.ModificationType;
+
+import javax.annotation.Nullable;
+
+/**
+ * The result of a mutation operation performed at a single location in a binary search tree.
+ *
+ * @author Louis Wasserman
+ * @param <K> The key type of the nodes in the modified binary search tree.
+ * @param <N> The type of the nodes in the modified binary search tree.
+ */
+@GwtCompatible
+final class BstMutationResult<K, N extends BstNode<K, N>> {
+  /**
+   * Creates a {@code BstMutationResult}.
+   *
+   * @param targetKey The key targeted for modification. If {@code originalTarget} or {@code
+   *        changedTarget} are non-null, their keys must compare as equal to {@code targetKey}.
+   * @param originalRoot The root of the subtree that was modified.
+   * @param changedRoot The root of the subtree, after the modification and any rebalancing.
+   * @param modificationResult The result of the local modification to an entry.
+   */
+  public static <K, N extends BstNode<K, N>> BstMutationResult<K, N> mutationResult(
+      @Nullable K targetKey, @Nullable N originalRoot, @Nullable N changedRoot,
+      BstModificationResult<N> modificationResult) {
+    return new BstMutationResult<K, N>(targetKey, originalRoot, changedRoot, modificationResult);
+  }
+
+  private final K targetKey;
+
+  @Nullable
+  private N originalRoot;
+
+  @Nullable
+  private N changedRoot;
+  
+  private final BstModificationResult<N> modificationResult;
+
+  private BstMutationResult(@Nullable K targetKey, @Nullable N originalRoot,
+      @Nullable N changedRoot, BstModificationResult<N> modificationResult) {
+    this.targetKey = targetKey;
+    this.originalRoot = originalRoot;
+    this.changedRoot = changedRoot;
+    this.modificationResult = checkNotNull(modificationResult);
+  }
+
+  /**
+   * Returns the key which was the target of this modification.
+   */
+  public K getTargetKey() {
+    return targetKey;
+  }
+
+  /**
+   * Returns the root of the subtree that was modified.
+   */
+  @Nullable
+  public N getOriginalRoot() {
+    return originalRoot;
+  }
+
+  /**
+   * Returns the root of the subtree, after the modification and any rebalancing was performed.
+   */
+  @Nullable
+  public N getChangedRoot() {
+    return changedRoot;
+  }
+
+  /**
+   * Returns the entry in the original subtree with key {@code targetKey}, if any. This should not
+   * be treated as a subtree, but only as an entry, and no guarantees are made about its children
+   * when viewed as a subtree.
+   */
+  @Nullable
+  public N getOriginalTarget() {
+    return modificationResult.getOriginalTarget();
+  }
+
+  /**
+   * Returns the result of the modification to {@link #getOriginalTarget()}. This should not be
+   * treated as a subtree, but only as an entry, and no guarantees are made about its children when
+   * viewed as a subtree.
+   */
+  @Nullable
+  public N getChangedTarget() {
+    return modificationResult.getChangedTarget();
+  }
+
+  ModificationType modificationType() {
+    return modificationResult.getType();
+  }
+
+  /**
+   * If this mutation was to an immediate child subtree of the specified root on the specified
+   * side, returns the {@code BstMutationResult} of applying the mutation to the appropriate child
+   * of the specified root and rebalancing using the specified mutation rule.
+   */
+  public BstMutationResult<K, N> lift(N liftOriginalRoot, BstSide side,
+      BstNodeFactory<N> nodeFactory, BstBalancePolicy<N> balancePolicy) {
+    assert liftOriginalRoot != null & side != null & nodeFactory != null & balancePolicy != null;
+    switch (modificationType()) {
+      case IDENTITY:
+        this.originalRoot = this.changedRoot = liftOriginalRoot;
+        return this;
+      case REBUILDING_CHANGE:
+      case REBALANCING_CHANGE:
+        this.originalRoot = liftOriginalRoot;
+        N resultLeft = liftOriginalRoot.childOrNull(LEFT);
+        N resultRight = liftOriginalRoot.childOrNull(RIGHT);
+        switch (side) {
+          case LEFT:
+            resultLeft = changedRoot;
+            break;
+          case RIGHT:
+            resultRight = changedRoot;
+            break;
+          default:
+            throw new AssertionError();
+        }
+        if (modificationType() == REBUILDING_CHANGE) {
+          this.changedRoot = nodeFactory.createNode(liftOriginalRoot, resultLeft, resultRight);
+        } else {
+          this.changedRoot =
+              balancePolicy.balance(nodeFactory, liftOriginalRoot, resultLeft, resultRight);
+        }
+        return this;
+      default:
+        throw new AssertionError();
+    }
+  }
+}
diff --git a/guava/src/com/google/common/collect/BstMutationRule.java b/guava/src/com/google/common/collect/BstMutationRule.java
new file mode 100644
index 0000000..7f90f8c
--- /dev/null
+++ b/guava/src/com/google/common/collect/BstMutationRule.java
@@ -0,0 +1,77 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.GwtCompatible;
+
+/**
+ * A rule for a local mutation to a binary search tree, that changes at most one entry. In addition
+ * to specifying how it modifies a particular entry via a {@code BstModifier}, it specifies a
+ * {@link BstBalancePolicy} for rebalancing the tree after the modification is performed and a
+ * {@link BstNodeFactory} for constructing newly rebalanced nodes.
+ *
+ * @author Louis Wasserman
+ * @param <K> The key type of the nodes in binary search trees that this rule can modify.
+ * @param <N> The type of the nodes in binary search trees that this rule can modify.
+ */
+@GwtCompatible
+final class BstMutationRule<K, N extends BstNode<K, N>> {
+  /**
+   * Constructs a {@code BstMutationRule} with the specified modifier, balance policy, and node
+   * factory.
+   */
+  public static <K, N extends BstNode<K, N>> BstMutationRule<K, N> createRule(
+      BstModifier<K, N> modifier, BstBalancePolicy<N> balancePolicy,
+      BstNodeFactory<N> nodeFactory) {
+    return new BstMutationRule<K, N>(modifier, balancePolicy, nodeFactory);
+  }
+
+  private final BstModifier<K, N> modifier;
+  private final BstBalancePolicy<N> balancePolicy;
+  private final BstNodeFactory<N> nodeFactory;
+
+  private BstMutationRule(BstModifier<K, N> modifier, BstBalancePolicy<N> balancePolicy,
+      BstNodeFactory<N> nodeFactory) {
+    this.balancePolicy = checkNotNull(balancePolicy);
+    this.nodeFactory = checkNotNull(nodeFactory);
+    this.modifier = checkNotNull(modifier);
+  }
+
+  /**
+   * Returns the {@link BstModifier} that specifies the change to a targeted entry in a binary
+   * search tree.
+   */
+  public BstModifier<K, N> getModifier() {
+    return modifier;
+  }
+
+  /**
+   * Returns the policy used to rebalance nodes in the tree after this modification has been
+   * performed.
+   */
+  public BstBalancePolicy<N> getBalancePolicy() {
+    return balancePolicy;
+  }
+
+  /**
+   * Returns the node factory used to create new nodes in the tree after this modification has been
+   * performed.
+   */
+  public BstNodeFactory<N> getNodeFactory() {
+    return nodeFactory;
+  }
+}
diff --git a/guava/src/com/google/common/collect/BstNode.java b/guava/src/com/google/common/collect/BstNode.java
new file mode 100644
index 0000000..818f85a
--- /dev/null
+++ b/guava/src/com/google/common/collect/BstNode.java
@@ -0,0 +1,125 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkState;
+import static com.google.common.collect.BstSide.LEFT;
+import static com.google.common.collect.BstSide.RIGHT;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Comparator;
+
+import javax.annotation.Nullable;
+
+/**
+ * A reusable abstraction for a node in a binary search tree. Null keys are allowed.
+ *
+ * <p>The node is considered to be immutable. Any subclass with mutable fields must create a new
+ * {@code BstNode} object upon any mutation, as the {@code Bst} classes assume that two nodes
+ * {@code a} and {@code b} represent exactly the same tree if and only if {@code a == b}.
+ *
+ * <p>A {@code BstNode} can be considered to be an <i>entry</i>, containing a key and possibly some
+ * value data, or it can be considered to be a <i>subtree</i>, representative of it and all its
+ * descendants.
+ *
+ * @author Louis Wasserman
+ * @param <K> The key type associated with this tree.
+ * @param <N> The type of the nodes in this tree.
+ */
+@GwtCompatible
+class BstNode<K, N extends BstNode<K, N>> {
+  /**
+   * The key on which this binary search tree is ordered. All descendants of the left subtree of
+   * this node must have keys strictly less than {@code this.key}.
+   */
+  private final K key;
+
+  /**
+   * The left child of this node. A null value indicates that this node has no left child.
+   */
+  @Nullable
+  private final N left;
+
+  /**
+   * The right child of this node. A null value indicates that this node has no right child.
+   */
+  @Nullable
+  private final N right;
+
+  BstNode(@Nullable K key, @Nullable N left, @Nullable N right) {
+    this.key = key;
+    this.left = left;
+    this.right = right;
+  }
+
+  /**
+   * Returns the ordered key associated with this node.
+   */
+  @Nullable
+  public final K getKey() {
+    return key;
+  }
+
+  /**
+   * Returns the child on the specified side, or {@code null} if there is no such child.
+   */
+  @Nullable
+  public final N childOrNull(BstSide side) {
+    switch (side) {
+      case LEFT:
+        return left;
+      case RIGHT:
+        return right;
+      default:
+        throw new AssertionError();
+    }
+  }
+
+  /**
+   * Returns {@code true} if this node has a child on the specified side.
+   */
+  public final boolean hasChild(BstSide side) {
+    return childOrNull(side) != null;
+  }
+
+  /**
+   * Returns this node's child on the specified side.
+   *
+   * @throws IllegalStateException if this node has no such child
+   */
+  public final N getChild(BstSide side) {
+    N child = childOrNull(side);
+    checkState(child != null);
+    return child;
+  }
+
+  /**
+   * Returns {@code true} if the traditional binary search tree ordering invariant holds with
+   * respect to the specified {@code comparator}.
+   */
+  protected final boolean orderingInvariantHolds(Comparator<? super K> comparator) {
+    checkNotNull(comparator);
+    boolean result = true;
+    if (hasChild(LEFT)) {
+      result &= comparator.compare(getChild(LEFT).getKey(), key) < 0;
+    }
+    if (hasChild(RIGHT)) {
+      result &= comparator.compare(getChild(RIGHT).getKey(), key) > 0;
+    }
+    return result;
+  }
+}
diff --git a/guava/src/com/google/common/collect/BstNodeFactory.java b/guava/src/com/google/common/collect/BstNodeFactory.java
new file mode 100644
index 0000000..8e1476c
--- /dev/null
+++ b/guava/src/com/google/common/collect/BstNodeFactory.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import javax.annotation.Nullable;
+
+/**
+ * A factory for copying nodes in binary search trees with different children.
+ *
+ * <p>Typically, nodes will carry more information than the fields in the {@link BstNode} class,
+ * often some kind of value or some aggregate data for the subtree. This factory is responsible for
+ * copying this additional data between nodes.
+ *
+ * @author Louis Wasserman
+ * @param <N> The type of the tree nodes constructed with this {@code BstNodeFactory}.
+ */
+@GwtCompatible
+abstract class BstNodeFactory<N extends BstNode<?, N>> {
+  /**
+   * Returns a new {@code N} with the key and value data from {@code source}, with left child
+   * {@code left}, and right child {@code right}. If {@code left} or {@code right} is null, the
+   * returned node will not have a child on the corresponding side.
+   */
+  public abstract N createNode(N source, @Nullable N left, @Nullable N right);
+
+  /**
+   * Returns a new {@code N} with the key and value data from {@code source} that is a leaf.
+   */
+  public final N createLeaf(N source) {
+    return createNode(source, null, null);
+  }
+}
diff --git a/guava/src/com/google/common/collect/BstOperations.java b/guava/src/com/google/common/collect/BstOperations.java
new file mode 100644
index 0000000..1f933d4
--- /dev/null
+++ b/guava/src/com/google/common/collect/BstOperations.java
@@ -0,0 +1,228 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.collect.BstSide.LEFT;
+import static com.google.common.collect.BstSide.RIGHT;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Comparator;
+
+import javax.annotation.Nullable;
+
+/**
+ * Tools to perform single-key queries and mutations in binary search trees.
+ *
+ * @author Louis Wasserman
+ */
+@GwtCompatible
+final class BstOperations {
+  private BstOperations() {}
+
+  /**
+   * Returns the node with key {@code key} in {@code tree}, if any.
+   */
+  @Nullable
+  public static <K, N extends BstNode<K, N>> N seek(
+      Comparator<? super K> comparator, @Nullable N tree, @Nullable K key) {
+    checkNotNull(comparator);
+    if (tree == null) {
+      return null;
+    }
+    int cmp = comparator.compare(key, tree.getKey());
+    if (cmp == 0) {
+      return tree;
+    } else {
+      BstSide side = (cmp < 0) ? LEFT : RIGHT;
+      return seek(comparator, tree.childOrNull(side), key);
+    }
+  }
+
+  /**
+   * Returns the result of performing the mutation specified by {@code mutationRule} in {@code
+   * tree} at the location with key {@code key}.
+   *
+   * <ul>
+   * <li>If the returned {@link BstModificationResult} has type {@code IDENTITY}, the exact
+   * original tree is returned.
+   * <li>If the returned {@code BstModificationResult} has type {@code REBUILDING_CHANGE},
+   * the tree will be rebuilt with the node factory of the mutation rule, but not rebalanced.
+   * <li>If the returned {@code BstModificationResult} has type {@code REBALANCING_CHANGE},
+   * the tree will be rebalanced using the balance policy of the mutation rule.
+   * </ul>
+   */
+  public static <K, N extends BstNode<K, N>> BstMutationResult<K, N> mutate(
+      Comparator<? super K> comparator, BstMutationRule<K, N> mutationRule, @Nullable N tree,
+      @Nullable K key) {
+    checkNotNull(comparator);
+    checkNotNull(mutationRule);
+
+    if (tree != null) {
+      int cmp = comparator.compare(key, tree.getKey());
+      if (cmp != 0) {
+        BstSide side = (cmp < 0) ? LEFT : RIGHT;
+        BstMutationResult<K, N> mutation =
+            mutate(comparator, mutationRule, tree.childOrNull(side), key);
+        return mutation.lift(
+            tree, side, mutationRule.getNodeFactory(), mutationRule.getBalancePolicy());
+      }
+    }
+    return modify(tree, key, mutationRule);
+  }
+
+  /**
+   * Perform the local mutation at the tip of the specified path.
+   */
+  public static <K, N extends BstNode<K, N>> BstMutationResult<K, N> mutate(
+      BstInOrderPath<N> path, BstMutationRule<K, N> mutationRule) {
+    checkNotNull(path);
+    checkNotNull(mutationRule);
+    BstBalancePolicy<N> balancePolicy = mutationRule.getBalancePolicy();
+    BstNodeFactory<N> nodeFactory = mutationRule.getNodeFactory();
+    BstModifier<K, N> modifier = mutationRule.getModifier();
+
+    N target = path.getTip();
+    K key = target.getKey();
+    BstMutationResult<K, N> result = modify(target, key, mutationRule);
+    while (path.hasPrefix()) {
+      BstInOrderPath<N> prefix = path.getPrefix();
+      result = result.lift(prefix.getTip(), path.getSideOfExtension(), nodeFactory, balancePolicy);
+      path = prefix;
+    }
+    return result;
+  }
+
+  /**
+   * Perform the local mutation right here, at the specified node.
+   */
+  private static <K, N extends BstNode<K, N>> BstMutationResult<K, N> modify(
+      @Nullable N tree, K key, BstMutationRule<K, N> mutationRule) {
+    BstBalancePolicy<N> rebalancePolicy = mutationRule.getBalancePolicy();
+    BstNodeFactory<N> nodeFactory = mutationRule.getNodeFactory();
+    BstModifier<K, N> modifier = mutationRule.getModifier();
+
+    N originalRoot = tree;
+    N changedRoot;
+    N originalTarget = (tree == null) ? null : nodeFactory.createLeaf(tree);
+    BstModificationResult<N> modResult = modifier.modify(key, originalTarget);
+    N originalLeft = null;
+    N originalRight = null;
+    if (tree != null) {
+      originalLeft = tree.childOrNull(LEFT);
+      originalRight = tree.childOrNull(RIGHT);
+    }
+    switch (modResult.getType()) {
+      case IDENTITY:
+        changedRoot = tree;
+        break;
+      case REBUILDING_CHANGE:
+        if (modResult.getChangedTarget() != null) {
+          changedRoot =
+              nodeFactory.createNode(modResult.getChangedTarget(), originalLeft, originalRight);
+        } else if (tree == null) {
+          changedRoot = null;
+        } else {
+          throw new AssertionError(
+              "Modification result is a REBUILDING_CHANGE, but rebalancing required");
+        }
+        break;
+      case REBALANCING_CHANGE:
+        if (modResult.getChangedTarget() != null) {
+          changedRoot = rebalancePolicy.balance(
+              nodeFactory, modResult.getChangedTarget(), originalLeft, originalRight);
+        } else if (tree != null) {
+          changedRoot = rebalancePolicy.combine(nodeFactory, originalLeft, originalRight);
+        } else {
+          changedRoot = null;
+        }
+        break;
+      default:
+        throw new AssertionError();
+    }
+    return BstMutationResult.mutationResult(key, originalRoot, changedRoot, modResult);
+  }
+
+  /**
+   * Returns the result of removing the minimum element from the specified subtree.
+   */
+  public static <K, N extends BstNode<K, N>> BstMutationResult<K, N> extractMin(
+      N root, BstNodeFactory<N> nodeFactory, BstBalancePolicy<N> balancePolicy) {
+    checkNotNull(root);
+    checkNotNull(nodeFactory);
+    checkNotNull(balancePolicy);
+    if (root.hasChild(LEFT)) {
+      BstMutationResult<K, N> subResult =
+          extractMin(root.getChild(LEFT), nodeFactory, balancePolicy);
+      return subResult.lift(root, LEFT, nodeFactory, balancePolicy);
+    }
+    return BstMutationResult.mutationResult(
+        root.getKey(), root, root.childOrNull(RIGHT), 
+        BstModificationResult.rebalancingChange(root, null));
+  }
+
+  /**
+   * Returns the result of removing the maximum element from the specified subtree.
+   */
+  public static <K, N extends BstNode<K, N>> BstMutationResult<K, N> extractMax(
+      N root, BstNodeFactory<N> nodeFactory, BstBalancePolicy<N> balancePolicy) {
+    checkNotNull(root);
+    checkNotNull(nodeFactory);
+    checkNotNull(balancePolicy);
+    if (root.hasChild(RIGHT)) {
+      BstMutationResult<K, N> subResult =
+          extractMax(root.getChild(RIGHT), nodeFactory, balancePolicy);
+      return subResult.lift(root, RIGHT, nodeFactory, balancePolicy);
+    }
+    return BstMutationResult.mutationResult(root.getKey(), root, root.childOrNull(LEFT),
+        BstModificationResult.rebalancingChange(root, null));
+  }
+
+  /**
+   * Inserts the specified entry into the tree as the minimum entry. Assumes that {@code
+   * entry.getKey()} is less than the key of all nodes in the subtree {@code root}.
+   */
+  public static <N extends BstNode<?, N>> N insertMin(@Nullable N root, N entry,
+      BstNodeFactory<N> nodeFactory, BstBalancePolicy<N> balancePolicy) {
+    checkNotNull(entry);
+    checkNotNull(nodeFactory);
+    checkNotNull(balancePolicy);
+    if (root == null) {
+      return nodeFactory.createLeaf(entry);
+    } else {
+      return balancePolicy.balance(nodeFactory, root,
+          insertMin(root.childOrNull(LEFT), entry, nodeFactory, balancePolicy),
+          root.childOrNull(RIGHT));
+    }
+  }
+
+  /**
+   * Inserts the specified entry into the tree as the maximum entry. Assumes that {@code
+   * entry.getKey()} is greater than the key of all nodes in the subtree {@code root}.
+   */
+  public static <N extends BstNode<?, N>> N insertMax(@Nullable N root, N entry,
+      BstNodeFactory<N> nodeFactory, BstBalancePolicy<N> balancePolicy) {
+    checkNotNull(entry);
+    checkNotNull(nodeFactory);
+    checkNotNull(balancePolicy);
+    if (root == null) {
+      return nodeFactory.createLeaf(entry);
+    } else {
+      return balancePolicy.balance(nodeFactory, root, root.childOrNull(LEFT),
+          insertMax(root.childOrNull(RIGHT), entry, nodeFactory, balancePolicy));
+    }
+  }
+}
diff --git a/guava/src/com/google/common/collect/BstPath.java b/guava/src/com/google/common/collect/BstPath.java
new file mode 100644
index 0000000..dd564c7
--- /dev/null
+++ b/guava/src/com/google/common/collect/BstPath.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkState;
+
+import com.google.common.annotations.GwtCompatible;
+
+import javax.annotation.Nullable;
+
+/**
+ * A path to a node in a binary search tree, originating at the root.
+ *
+ * @author Louis Wasserman
+ * @param <N> The type of nodes in this binary search tree.
+ * @param <P> This path type, and the path type of all suffix paths.
+ */
+@GwtCompatible
+abstract class BstPath<N extends BstNode<?, N>, P extends BstPath<N, P>> {
+  private final N tip;
+  @Nullable
+  private final P prefix;
+
+  BstPath(N tip, @Nullable P prefix) {
+    this.tip = checkNotNull(tip);
+    this.prefix = prefix;
+  }
+
+  /**
+   * Return the end of this {@code BstPath}, the deepest node in the path.
+   */
+  public final N getTip() {
+    return tip;
+  }
+
+  /**
+   * Returns {@code true} if this path has a prefix.
+   */
+  public final boolean hasPrefix() {
+    return prefix != null;
+  }
+
+  /**
+   * Returns the prefix of this path, which reaches to the parent of the end of this path. Returns
+   * {@code null} if this path has no prefix.
+   */
+  @Nullable
+  public final P prefixOrNull() {
+    return prefix;
+  }
+
+  /**
+   * Returns the prefix of this path, which reaches to the parent of the end of this path.
+   *
+   * @throws IllegalStateException if this path has no prefix.
+   */
+  public final P getPrefix() {
+    checkState(hasPrefix());
+    return prefix;
+  }
+}
diff --git a/guava/src/com/google/common/collect/BstPathFactory.java b/guava/src/com/google/common/collect/BstPathFactory.java
new file mode 100644
index 0000000..92086ae
--- /dev/null
+++ b/guava/src/com/google/common/collect/BstPathFactory.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+/**
+ * A factory for extending paths in a binary search tree.
+ *
+ * @author Louis Wasserman
+ * @param <N> The type of binary search tree nodes used in the paths generated by this {@code
+ *        BstPathFactory}.
+ * @param <P> The type of paths constructed by this {@code BstPathFactory}.
+ */
+@GwtCompatible
+interface BstPathFactory<N extends BstNode<?, N>, P extends BstPath<N, P>> {
+  /**
+   * Returns this path extended by one node to the specified {@code side}.
+   */
+  P extension(P path, BstSide side);
+
+  /**
+   * Returns the trivial path that starts at {@code root} and goes no further.
+   */
+  P initialPath(N root);
+}
diff --git a/guava/src/com/google/common/collect/BstRangeOps.java b/guava/src/com/google/common/collect/BstRangeOps.java
new file mode 100644
index 0000000..10d5931
--- /dev/null
+++ b/guava/src/com/google/common/collect/BstRangeOps.java
@@ -0,0 +1,175 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.collect.BstSide.LEFT;
+import static com.google.common.collect.BstSide.RIGHT;
+
+import com.google.common.annotations.GwtCompatible;
+
+import javax.annotation.Nullable;
+
+/**
+ * A utility class with operations on binary search trees that operate on some interval.
+ *
+ * @author Louis Wasserman
+ */
+@GwtCompatible
+final class BstRangeOps {
+  /**
+   * Returns the total value of the specified aggregation function on the specified tree restricted
+   * to the specified range. Assumes that the tree satisfies the binary search ordering property
+   * relative to {@code range.comparator()}.
+   */
+  public static <K, N extends BstNode<K, N>> long totalInRange(
+      BstAggregate<? super N> aggregate, GeneralRange<K> range, @Nullable N root) {
+    checkNotNull(aggregate);
+    checkNotNull(range);
+    if (root == null || range.isEmpty()) {
+      return 0;
+    }
+    long total = aggregate.treeValue(root);
+    if (range.hasLowerBound()) {
+      total -= totalBeyondRangeToSide(aggregate, range, LEFT, root);
+    }
+    if (range.hasUpperBound()) {
+      total -= totalBeyondRangeToSide(aggregate, range, RIGHT, root);
+    }
+    return total;
+  }
+
+  // Returns total value strictly to the specified side of the specified range.
+  private static <K, N extends BstNode<K, N>> long totalBeyondRangeToSide(
+      BstAggregate<? super N> aggregate, GeneralRange<K> range, BstSide side, @Nullable N root) {
+    long accum = 0;
+    while (root != null) {
+      if (beyond(range, root.getKey(), side)) {
+        accum += aggregate.entryValue(root);
+        accum += aggregate.treeValue(root.childOrNull(side));
+        root = root.childOrNull(side.other());
+      } else {
+        root = root.childOrNull(side);
+      }
+    }
+    return accum;
+  }
+
+  /**
+   * Returns a balanced tree containing all nodes from the specified tree that were <i>not</i> in
+   * the specified range, using the specified balance policy. Assumes that the tree satisfies the
+   * binary search ordering property relative to {@code range.comparator()}.
+   */
+  @Nullable
+  public static <K, N extends BstNode<K, N>> N minusRange(GeneralRange<K> range,
+      BstBalancePolicy<N> balancePolicy, BstNodeFactory<N> nodeFactory, @Nullable N root) {
+    checkNotNull(range);
+    checkNotNull(balancePolicy);
+    checkNotNull(nodeFactory);
+    N higher = range.hasUpperBound()
+        ? subTreeBeyondRangeToSide(range, balancePolicy, nodeFactory, RIGHT, root)
+        : null;
+    N lower = range.hasLowerBound()
+        ? subTreeBeyondRangeToSide(range, balancePolicy, nodeFactory, LEFT, root)
+        : null;
+    return balancePolicy.combine(nodeFactory, lower, higher);
+  }
+
+  /*
+   * Returns a balanced tree containing all nodes in the specified tree that are strictly to the
+   * specified side of the specified range.
+   */
+  @Nullable
+  private static <K, N extends BstNode<K, N>> N subTreeBeyondRangeToSide(GeneralRange<K> range,
+      BstBalancePolicy<N> balancePolicy, BstNodeFactory<N> nodeFactory, BstSide side,
+      @Nullable N root) {
+    if (root == null) {
+      return null;
+    }
+    if (beyond(range, root.getKey(), side)) {
+      N left = root.childOrNull(LEFT);
+      N right = root.childOrNull(RIGHT);
+      switch (side) {
+        case LEFT:
+          right = subTreeBeyondRangeToSide(range, balancePolicy, nodeFactory, LEFT, right);
+          break;
+        case RIGHT:
+          left = subTreeBeyondRangeToSide(range, balancePolicy, nodeFactory, RIGHT, left);
+          break;
+        default:
+          throw new AssertionError();
+      }
+      return balancePolicy.balance(nodeFactory, root, left, right);
+    } else {
+      return subTreeBeyondRangeToSide(
+          range, balancePolicy, nodeFactory, side, root.childOrNull(side));
+    }
+  }
+
+  /**
+   * Returns the furthest path to the specified side in the specified tree that falls into the
+   * specified range.
+   */
+  @Nullable
+  public static <K, N extends BstNode<K, N>, P extends BstPath<N, P>> P furthestPath(
+      GeneralRange<K> range, BstSide side, BstPathFactory<N, P> pathFactory, @Nullable N root) {
+    checkNotNull(range);
+    checkNotNull(pathFactory);
+    checkNotNull(side);
+    if (root == null) {
+      return null;
+    }
+    P path = pathFactory.initialPath(root);
+    return furthestPath(range, side, pathFactory, path);
+  }
+
+  private static <K, N extends BstNode<K, N>, P extends BstPath<N, P>> P furthestPath(
+      GeneralRange<K> range, BstSide side, BstPathFactory<N, P> pathFactory, P currentPath) {
+    N tip = currentPath.getTip();
+    K tipKey = tip.getKey();
+    if (beyond(range, tipKey, side)) {
+      if (tip.hasChild(side.other())) {
+        currentPath = pathFactory.extension(currentPath, side.other());
+        return furthestPath(range, side, pathFactory, currentPath);
+      } else {
+        return null;
+      }
+    } else if (tip.hasChild(side)) {
+      P alphaPath = pathFactory.extension(currentPath, side);
+      alphaPath = furthestPath(range, side, pathFactory, alphaPath);
+      if (alphaPath != null) {
+        return alphaPath;
+      }
+    }
+    return beyond(range, tipKey, side.other()) ? null : currentPath;
+  }
+
+  /**
+   * Returns {@code true} if {@code key} is beyond the specified side of the specified range.
+   */
+  public static <K> boolean beyond(GeneralRange<K> range, @Nullable K key, BstSide side) {
+    checkNotNull(range);
+    switch (side) {
+      case LEFT:
+        return range.tooLow(key);
+      case RIGHT:
+        return range.tooHigh(key);
+      default:
+        throw new AssertionError();
+    }
+  }
+
+  private BstRangeOps() {}
+}
diff --git a/guava/src/com/google/common/collect/BstSide.java b/guava/src/com/google/common/collect/BstSide.java
new file mode 100644
index 0000000..5dec1bc
--- /dev/null
+++ b/guava/src/com/google/common/collect/BstSide.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+/**
+ * A side of a binary search tree node, used to index its children.
+ *
+ * @author Louis Wasserman
+ */
+@GwtCompatible
+enum BstSide {
+  LEFT {
+    @Override
+    public BstSide other() {
+      return RIGHT;
+    }
+  },
+  RIGHT {
+    @Override
+    public BstSide other() {
+      return LEFT;
+    }
+  };
+
+  abstract BstSide other();
+}
diff --git a/guava/src/com/google/common/collect/ByFunctionOrdering.java b/guava/src/com/google/common/collect/ByFunctionOrdering.java
new file mode 100644
index 0000000..c148ba9
--- /dev/null
+++ b/guava/src/com/google/common/collect/ByFunctionOrdering.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Function;
+import com.google.common.base.Objects;
+
+import java.io.Serializable;
+
+import javax.annotation.Nullable;
+
+/**
+ * An ordering that orders elements by applying an order to the result of a
+ * function on those elements.
+ */
+@GwtCompatible(serializable = true)
+final class ByFunctionOrdering<F, T>
+    extends Ordering<F> implements Serializable {
+  final Function<F, ? extends T> function;
+  final Ordering<T> ordering;
+
+  ByFunctionOrdering(
+      Function<F, ? extends T> function, Ordering<T> ordering) {
+    this.function = checkNotNull(function);
+    this.ordering = checkNotNull(ordering);
+  }
+
+  @Override public int compare(F left, F right) {
+    return ordering.compare(function.apply(left), function.apply(right));
+  }
+
+  @Override public boolean equals(@Nullable Object object) {
+    if (object == this) {
+      return true;
+    }
+    if (object instanceof ByFunctionOrdering) {
+      ByFunctionOrdering<?, ?> that = (ByFunctionOrdering<?, ?>) object;
+      return this.function.equals(that.function)
+          && this.ordering.equals(that.ordering);
+    }
+    return false;
+  }
+
+  @Override public int hashCode() {
+    return Objects.hashCode(function, ordering);
+  }
+
+  @Override public String toString() {
+    return ordering + ".onResultOf(" + function + ")";
+  }
+
+  private static final long serialVersionUID = 0;
+}
diff --git a/guava/src/com/google/common/collect/ClassToInstanceMap.java b/guava/src/com/google/common/collect/ClassToInstanceMap.java
new file mode 100644
index 0000000..6b6fb5b
--- /dev/null
+++ b/guava/src/com/google/common/collect/ClassToInstanceMap.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Map;
+
+import javax.annotation.Nullable;
+
+/**
+ * A map, each entry of which maps a Java
+ * <a href="http://tinyurl.com/2cmwkz">raw type</a> to an instance of that type.
+ * In addition to implementing {@code Map}, the additional type-safe operations
+ * {@link #putInstance} and {@link #getInstance} are available.
+ *
+ * <p>Like any other {@code Map<Class, Object>}, this map may contain entries
+ * for primitive types, and a primitive type and its corresponding wrapper type
+ * may map to different values.
+ *
+ * @param <B> the common supertype that all entries must share; often this is
+ *     simply {@link Object}
+ *
+ * @author Kevin Bourrillion
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible
+public interface ClassToInstanceMap<B> extends Map<Class<? extends B>, B> {
+  /**
+   * Returns the value the specified class is mapped to, or {@code null} if no
+   * entry for this class is present. This will only return a value that was
+   * bound to this specific class, not a value that may have been bound to a
+   * subtype.
+   */
+  <T extends B> T getInstance(Class<T> type);
+
+  /**
+   * Maps the specified class to the specified value. Does <i>not</i> associate
+   * this value with any of the class's supertypes.
+   *
+   * @return the value previously associated with this class (possibly {@code
+   *     null}), or {@code null} if there was no previous entry.
+   */
+  <T extends B> T putInstance(Class<T> type, @Nullable T value);
+}
diff --git a/guava/src/com/google/common/collect/Collections2.java b/guava/src/com/google/common/collect/Collections2.java
new file mode 100644
index 0000000..603fa8b
--- /dev/null
+++ b/guava/src/com/google/common/collect/Collections2.java
@@ -0,0 +1,348 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Function;
+import com.google.common.base.Joiner;
+import com.google.common.base.Predicate;
+import com.google.common.base.Predicates;
+import com.google.common.primitives.Ints;
+
+import java.util.AbstractCollection;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * Provides static methods for working with {@code Collection} instances.
+ *
+ * @author Chris Povirk
+ * @author Mike Bostock
+ * @author Jared Levy
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible
+public final class Collections2 {
+  private Collections2() {}
+
+  /**
+   * Returns the elements of {@code unfiltered} that satisfy a predicate. The
+   * returned collection is a live view of {@code unfiltered}; changes to one
+   * affect the other.
+   *
+   * <p>The resulting collection's iterator does not support {@code remove()},
+   * but all other collection methods are supported. When given an element that
+   * doesn't satisfy the predicate, the collection's {@code add()} and {@code
+   * addAll()} methods throw an {@link IllegalArgumentException}. When methods
+   * such as {@code removeAll()} and {@code clear()} are called on the filtered
+   * collection, only elements that satisfy the filter will be removed from the
+   * underlying collection.
+   *
+   * <p>The returned collection isn't threadsafe or serializable, even if
+   * {@code unfiltered} is.
+   *
+   * <p>Many of the filtered collection's methods, such as {@code size()},
+   * iterate across every element in the underlying collection and determine
+   * which elements satisfy the filter. When a live view is <i>not</i> needed,
+   * it may be faster to copy {@code Iterables.filter(unfiltered, predicate)}
+   * and use the copy.
+   *
+   * <p><b>Warning:</b> {@code predicate} must be <i>consistent with equals</i>,
+   * as documented at {@link Predicate#apply}. Do not provide a predicate such
+   * as {@code Predicates.instanceOf(ArrayList.class)}, which is inconsistent
+   * with equals. (See {@link Iterables#filter(Iterable, Class)} for related
+   * functionality.)
+   */
+  // TODO(kevinb): how can we omit that Iterables link when building gwt
+  // javadoc?
+  public static <E> Collection<E> filter(
+      Collection<E> unfiltered, Predicate<? super E> predicate) {
+    if (unfiltered instanceof FilteredCollection) {
+      // Support clear(), removeAll(), and retainAll() when filtering a filtered
+      // collection.
+      return ((FilteredCollection<E>) unfiltered).createCombined(predicate);
+    }
+
+    return new FilteredCollection<E>(
+        checkNotNull(unfiltered), checkNotNull(predicate));
+  }
+
+  /**
+   * Delegates to {@link Collection#contains}. Returns {@code false} if the
+   * {@code contains} method throws a {@code ClassCastException}.
+   */
+  static boolean safeContains(Collection<?> collection, Object object) {
+    try {
+      return collection.contains(object);
+    } catch (ClassCastException e) {
+      return false;
+    }
+  }
+
+  static class FilteredCollection<E> implements Collection<E> {
+    final Collection<E> unfiltered;
+    final Predicate<? super E> predicate;
+
+    FilteredCollection(Collection<E> unfiltered,
+        Predicate<? super E> predicate) {
+      this.unfiltered = unfiltered;
+      this.predicate = predicate;
+    }
+
+    FilteredCollection<E> createCombined(Predicate<? super E> newPredicate) {
+      return new FilteredCollection<E>(unfiltered,
+          Predicates.<E>and(predicate, newPredicate));
+      // .<E> above needed to compile in JDK 5
+    }
+
+    @Override
+    public boolean add(E element) {
+      checkArgument(predicate.apply(element));
+      return unfiltered.add(element);
+    }
+
+    @Override
+    public boolean addAll(Collection<? extends E> collection) {
+      for (E element : collection) {
+        checkArgument(predicate.apply(element));
+      }
+      return unfiltered.addAll(collection);
+    }
+
+    @Override
+    public void clear() {
+      Iterables.removeIf(unfiltered, predicate);
+    }
+
+    @Override
+    public boolean contains(Object element) {
+      try {
+        // unsafe cast can result in a CCE from predicate.apply(), which we
+        // will catch
+        @SuppressWarnings("unchecked")
+        E e = (E) element;
+
+        /*
+         * We check whether e satisfies the predicate, when we really mean to
+         * check whether the element contained in the set does. This is ok as
+         * long as the predicate is consistent with equals, as required.
+         */
+        return predicate.apply(e) && unfiltered.contains(element);
+      } catch (NullPointerException e) {
+        return false;
+      } catch (ClassCastException e) {
+        return false;
+      }
+    }
+
+    @Override
+    public boolean containsAll(Collection<?> collection) {
+      for (Object element : collection) {
+        if (!contains(element)) {
+          return false;
+        }
+      }
+      return true;
+    }
+
+    @Override
+    public boolean isEmpty() {
+      return !Iterators.any(unfiltered.iterator(), predicate);
+    }
+
+    @Override
+    public Iterator<E> iterator() {
+      return Iterators.filter(unfiltered.iterator(), predicate);
+    }
+
+    @Override
+    public boolean remove(Object element) {
+      try {
+        // unsafe cast can result in a CCE from predicate.apply(), which we
+        // will catch
+        @SuppressWarnings("unchecked")
+        E e = (E) element;
+
+        // See comment in contains() concerning predicate.apply(e)
+        return predicate.apply(e) && unfiltered.remove(element);
+      } catch (NullPointerException e) {
+        return false;
+      } catch (ClassCastException e) {
+        return false;
+      }
+    }
+
+    @Override
+    public boolean removeAll(final Collection<?> collection) {
+      checkNotNull(collection);
+      Predicate<E> combinedPredicate = new Predicate<E>() {
+        @Override
+        public boolean apply(E input) {
+          return predicate.apply(input) && collection.contains(input);
+        }
+      };
+      return Iterables.removeIf(unfiltered, combinedPredicate);
+    }
+
+    @Override
+    public boolean retainAll(final Collection<?> collection) {
+      checkNotNull(collection);
+      Predicate<E> combinedPredicate = new Predicate<E>() {
+        @Override
+        public boolean apply(E input) {
+          // See comment in contains() concerning predicate.apply(e)
+          return predicate.apply(input) && !collection.contains(input);
+        }
+      };
+      return Iterables.removeIf(unfiltered, combinedPredicate);
+    }
+
+    @Override
+    public int size() {
+      return Iterators.size(iterator());
+    }
+
+    @Override
+    public Object[] toArray() {
+      // creating an ArrayList so filtering happens once
+      return Lists.newArrayList(iterator()).toArray();
+    }
+
+    @Override
+    public <T> T[] toArray(T[] array) {
+      return Lists.newArrayList(iterator()).toArray(array);
+    }
+
+    @Override public String toString() {
+      return Iterators.toString(iterator());
+    }
+  }
+
+  /**
+   * Returns a collection that applies {@code function} to each element of
+   * {@code fromCollection}. The returned collection is a live view of {@code
+   * fromCollection}; changes to one affect the other.
+   *
+   * <p>The returned collection's {@code add()} and {@code addAll()} methods
+   * throw an {@link UnsupportedOperationException}. All other collection
+   * methods are supported, as long as {@code fromCollection} supports them.
+   *
+   * <p>The returned collection isn't threadsafe or serializable, even if
+   * {@code fromCollection} is.
+   *
+   * <p>When a live view is <i>not</i> needed, it may be faster to copy the
+   * transformed collection and use the copy.
+   *
+   * <p>If the input {@code Collection} is known to be a {@code List}, consider
+   * {@link Lists#transform}. If only an {@code Iterable} is available, use
+   * {@link Iterables#transform}.
+   */
+  public static <F, T> Collection<T> transform(Collection<F> fromCollection,
+      Function<? super F, T> function) {
+    return new TransformedCollection<F, T>(fromCollection, function);
+  }
+
+  static class TransformedCollection<F, T> extends AbstractCollection<T> {
+    final Collection<F> fromCollection;
+    final Function<? super F, ? extends T> function;
+
+    TransformedCollection(Collection<F> fromCollection,
+        Function<? super F, ? extends T> function) {
+      this.fromCollection = checkNotNull(fromCollection);
+      this.function = checkNotNull(function);
+    }
+
+    @Override public void clear() {
+      fromCollection.clear();
+    }
+
+    @Override public boolean isEmpty() {
+      return fromCollection.isEmpty();
+    }
+
+    @Override public Iterator<T> iterator() {
+      return Iterators.transform(fromCollection.iterator(), function);
+    }
+
+    @Override public int size() {
+      return fromCollection.size();
+    }
+  }
+
+  /**
+   * Returns {@code true} if the collection {@code self} contains all of the
+   * elements in the collection {@code c}.
+   *
+   * <p>This method iterates over the specified collection {@code c}, checking
+   * each element returned by the iterator in turn to see if it is contained in
+   * the specified collection {@code self}. If all elements are so contained,
+   * {@code true} is returned, otherwise {@code false}.
+   *
+   * @param self a collection which might contain all elements in {@code c}
+   * @param c a collection whose elements might be contained by {@code self}
+   */
+  static boolean containsAllImpl(Collection<?> self, Collection<?> c) {
+    checkNotNull(self);
+    for (Object o : c) {
+      if (!self.contains(o)) {
+        return false;
+      }
+    }
+    return true;
+  }
+
+  /**
+   * An implementation of {@link Collection#toString()}.
+   */
+  static String toStringImpl(final Collection<?> collection) {
+    StringBuilder sb
+        = newStringBuilderForCollection(collection.size()).append('[');
+    STANDARD_JOINER.appendTo(
+        sb, Iterables.transform(collection, new Function<Object, Object>() {
+          @Override public Object apply(Object input) {
+            return input == collection ? "(this Collection)" : input;
+          }
+        }));
+    return sb.append(']').toString();
+  }
+
+  /**
+   * Returns best-effort-sized StringBuilder based on the given collection size.
+   */
+  static StringBuilder newStringBuilderForCollection(int size) {
+    checkArgument(size >= 0, "size must be non-negative");
+    return new StringBuilder((int) Math.min(size * 8L, Ints.MAX_POWER_OF_TWO));
+  }
+
+  /**
+   * Used to avoid http://bugs.sun.com/view_bug.do?bug_id=6558557
+   */
+  static <T> Collection<T> cast(Iterable<T> iterable) {
+    return (Collection<T>) iterable;
+  }
+
+  static final Joiner STANDARD_JOINER = Joiner.on(", ");
+
+  // TODO(user): Maybe move the mathematical methods to a separate
+  // package-permission class.
+}
diff --git a/guava/src/com/google/common/collect/ComparatorOrdering.java b/guava/src/com/google/common/collect/ComparatorOrdering.java
new file mode 100644
index 0000000..77fe58d
--- /dev/null
+++ b/guava/src/com/google/common/collect/ComparatorOrdering.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.io.Serializable;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+import javax.annotation.Nullable;
+
+/** An ordering for a pre-existing comparator. */
+@GwtCompatible(serializable = true)
+final class ComparatorOrdering<T> extends Ordering<T> implements Serializable {
+  final Comparator<T> comparator;
+
+  ComparatorOrdering(Comparator<T> comparator) {
+    this.comparator = checkNotNull(comparator);
+  }
+
+  @Override public int compare(T a, T b) {
+    return comparator.compare(a, b);
+  }
+
+  // Override just to remove a level of indirection from inner loops
+  @Override public int binarySearch(List<? extends T> sortedList, T key) {
+    return Collections.binarySearch(sortedList, key, comparator);
+  }
+
+  // Override just to remove a level of indirection from inner loops
+  @Override public <E extends T> List<E> sortedCopy(Iterable<E> iterable) {
+    List<E> list = Lists.newArrayList(iterable);
+    Collections.sort(list, comparator);
+    return list;
+  }
+
+  @Override public boolean equals(@Nullable Object object) {
+    if (object == this) {
+      return true;
+    }
+    if (object instanceof ComparatorOrdering) {
+      ComparatorOrdering<?> that = (ComparatorOrdering<?>) object;
+      return this.comparator.equals(that.comparator);
+    }
+    return false;
+  }
+
+  @Override public int hashCode() {
+    return comparator.hashCode();
+  }
+
+  @Override public String toString() {
+    return comparator.toString();
+  }
+
+  private static final long serialVersionUID = 0;
+}
diff --git a/guava/src/com/google/common/collect/ComparisonChain.java b/guava/src/com/google/common/collect/ComparisonChain.java
new file mode 100644
index 0000000..cc90357
--- /dev/null
+++ b/guava/src/com/google/common/collect/ComparisonChain.java
@@ -0,0 +1,191 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.primitives.Booleans;
+import com.google.common.primitives.Ints;
+import com.google.common.primitives.Longs;
+
+import java.util.Comparator;
+
+import javax.annotation.Nullable;
+
+/**
+ * A utility for performing a "lazy" chained comparison statement, which 
+ * performs comparisons only until it finds a nonzero result. For example:
+ * <pre>   {@code
+ *
+ *   public int compareTo(Foo that) {
+ *     return ComparisonChain.start()
+ *         .compare(this.aString, that.aString)
+ *         .compare(this.anInt, that.anInt)
+ *         .compare(this.anEnum, that.anEnum, Ordering.natural().nullsLast())
+ *         .result();
+ *   }}</pre>
+ *
+ * The value of this expression will have the same sign as the <i>first
+ * nonzero</i> comparison result in the chain, or will be zero if every
+ * comparison result was zero.
+ *
+ * <p>Once any comparison returns a nonzero value, remaining comparisons are
+ * "short-circuited".
+ *
+ * @author Mark Davis
+ * @author Kevin Bourrillion
+ * @since 2.0
+ */
+@GwtCompatible
+public abstract class ComparisonChain {
+  private ComparisonChain() {}
+
+  /**
+   * Begins a new chained comparison statement. See example in the class
+   * documentation.
+   */
+  public static ComparisonChain start() {
+    return ACTIVE;
+  }
+
+  private static final ComparisonChain ACTIVE = new ComparisonChain() {
+    @SuppressWarnings("unchecked")
+    @Override public ComparisonChain compare(
+        Comparable left, Comparable right) {
+      return classify(left.compareTo(right));
+    }
+    @Override public <T> ComparisonChain compare(
+        @Nullable T left, @Nullable T right, Comparator<T> comparator) {
+      return classify(comparator.compare(left, right));
+    }
+    @Override public ComparisonChain compare(int left, int right) {
+      return classify(Ints.compare(left, right));
+    }
+    @Override public ComparisonChain compare(long left, long right) {
+      return classify(Longs.compare(left, right));
+    }
+    @Override public ComparisonChain compare(float left, float right) {
+      return classify(Float.compare(left, right));
+    }
+    @Override public ComparisonChain compare(double left, double right) {
+      return classify(Double.compare(left, right));
+    }
+    @Override public ComparisonChain compare(boolean left, boolean right) {
+      return classify(Booleans.compare(left, right));
+    }
+    ComparisonChain classify(int result) {
+      return (result < 0) ? LESS : (result > 0) ? GREATER : ACTIVE;
+    }
+    @Override public int result() {
+      return 0;
+    }
+  };
+
+  private static final ComparisonChain LESS = new InactiveComparisonChain(-1);
+
+  private static final ComparisonChain GREATER = new InactiveComparisonChain(1);
+
+  private static final class InactiveComparisonChain extends ComparisonChain {
+    final int result;
+
+    InactiveComparisonChain(int result) {
+      this.result = result;
+    }
+    @Override public ComparisonChain compare(
+        @Nullable Comparable left, @Nullable Comparable right) {
+      return this;
+    }
+    @Override public <T> ComparisonChain compare(@Nullable T left,
+        @Nullable T right, @Nullable Comparator<T> comparator) {
+      return this;
+    }
+    @Override public ComparisonChain compare(int left, int right) {
+      return this;
+    }
+    @Override public ComparisonChain compare(long left, long right) {
+      return this;
+    }
+    @Override public ComparisonChain compare(float left, float right) {
+      return this;
+    }
+    @Override public ComparisonChain compare(double left, double right) {
+      return this;
+    }
+    @Override public ComparisonChain compare(boolean left, boolean right) {
+      return this;
+    }
+    @Override public int result() {
+      return result;
+    }
+  }
+
+  /**
+   * Compares two comparable objects as specified by {@link
+   * Comparable#compareTo}, <i>if</i> the result of this comparison chain
+   * has not already been determined.
+   */
+  public abstract ComparisonChain compare(
+      Comparable<?> left, Comparable<?> right);
+
+  /**
+   * Compares two objects using a comparator, <i>if</i> the result of this
+   * comparison chain has not already been determined.
+   */
+  public abstract <T> ComparisonChain compare(
+      @Nullable T left, @Nullable T right, Comparator<T> comparator);
+
+  /**
+   * Compares two {@code int} values as specified by {@link Ints#compare},
+   * <i>if</i> the result of this comparison chain has not already been
+   * determined.
+   */
+  public abstract ComparisonChain compare(int left, int right);
+
+  /**
+   * Compares two {@code long} values as specified by {@link Longs#compare},
+   * <i>if</i> the result of this comparison chain has not already been
+   * determined.
+   */
+  public abstract ComparisonChain compare(long left, long right);
+
+  /**
+   * Compares two {@code float} values as specified by {@link
+   * Float#compare}, <i>if</i> the result of this comparison chain has not
+   * already been determined.
+   */
+  public abstract ComparisonChain compare(float left, float right);
+
+  /**
+   * Compares two {@code double} values as specified by {@link
+   * Double#compare}, <i>if</i> the result of this comparison chain has not
+   * already been determined.
+   */
+  public abstract ComparisonChain compare(double left, double right);
+
+  /**
+   * Compares two {@code boolean} values as specified by {@link
+   * Booleans#compare}, <i>if</i> the result of this comparison chain has not
+   * already been determined.
+   */
+  public abstract ComparisonChain compare(boolean left, boolean right);
+
+  /**
+   * Ends this comparison chain and returns its result: a value having the
+   * same sign as the first nonzero comparison result in the chain, or zero if
+   * every result was zero.
+   */
+  public abstract int result();
+}
diff --git a/guava/src/com/google/common/collect/CompoundOrdering.java b/guava/src/com/google/common/collect/CompoundOrdering.java
new file mode 100644
index 0000000..f669a62
--- /dev/null
+++ b/guava/src/com/google/common/collect/CompoundOrdering.java
@@ -0,0 +1,76 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.io.Serializable;
+import java.util.Comparator;
+import java.util.List;
+
+/** An ordering that tries several comparators in order. */
+@GwtCompatible(serializable = true)
+final class CompoundOrdering<T> extends Ordering<T> implements Serializable {
+  final ImmutableList<Comparator<? super T>> comparators;
+
+  CompoundOrdering(Comparator<? super T> primary,
+      Comparator<? super T> secondary) {
+    this.comparators
+        = ImmutableList.<Comparator<? super T>>of(primary, secondary);
+  }
+
+  CompoundOrdering(Iterable<? extends Comparator<? super T>> comparators) {
+    this.comparators = ImmutableList.copyOf(comparators);
+  }
+
+  CompoundOrdering(List<? extends Comparator<? super T>> comparators,
+      Comparator<? super T> lastComparator) {
+    this.comparators = new ImmutableList.Builder<Comparator<? super T>>()
+        .addAll(comparators).add(lastComparator).build();
+  }
+
+  @Override public int compare(T left, T right) {
+    for (Comparator<? super T> comparator : comparators) {
+      int result = comparator.compare(left, right);
+      if (result != 0) {
+        return result;
+      }
+    }
+    return 0;
+  }
+
+  @Override public boolean equals(Object object) {
+    if (object == this) {
+      return true;
+    }
+    if (object instanceof CompoundOrdering) {
+      CompoundOrdering<?> that = (CompoundOrdering<?>) object;
+      return this.comparators.equals(that.comparators);
+    }
+    return false;
+  }
+
+  @Override public int hashCode() {
+    return comparators.hashCode();
+  }
+
+  @Override public String toString() {
+    return "Ordering.compound(" + comparators + ")";
+  }
+
+  private static final long serialVersionUID = 0;
+}
diff --git a/guava/src/com/google/common/collect/ComputationException.java b/guava/src/com/google/common/collect/ComputationException.java
new file mode 100644
index 0000000..5401aff
--- /dev/null
+++ b/guava/src/com/google/common/collect/ComputationException.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+/**
+ * Wraps an exception that occurred during a computation.
+ *
+ * @author Bob Lee
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible
+public class ComputationException extends RuntimeException {
+  /**
+   * Creates a new instance with the given cause.
+   */
+  public ComputationException(Throwable cause) {
+    super(cause);
+  }
+  private static final long serialVersionUID = 0;
+}
diff --git a/guava/src/com/google/common/collect/ComputingConcurrentHashMap.java b/guava/src/com/google/common/collect/ComputingConcurrentHashMap.java
new file mode 100644
index 0000000..4b0c18a
--- /dev/null
+++ b/guava/src/com/google/common/collect/ComputingConcurrentHashMap.java
@@ -0,0 +1,451 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkState;
+
+import com.google.common.base.Equivalence;
+import com.google.common.base.Function;
+import com.google.common.base.Throwables;
+import com.google.common.collect.MapMaker.RemovalCause;
+import com.google.common.collect.MapMaker.RemovalListener;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+import java.lang.ref.ReferenceQueue;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.atomic.AtomicReferenceArray;
+
+import javax.annotation.Nullable;
+import javax.annotation.concurrent.GuardedBy;
+
+/**
+ * Adds computing functionality to {@link MapMakerInternalMap}.
+ *
+ * @author Bob Lee
+ * @author Charles Fry
+ */
+class ComputingConcurrentHashMap<K, V> extends MapMakerInternalMap<K, V> {
+  final Function<? super K, ? extends V> computingFunction;
+
+  /**
+   * Creates a new, empty map with the specified strategy, initial capacity, load factor and
+   * concurrency level.
+   */
+  ComputingConcurrentHashMap(MapMaker builder,
+      Function<? super K, ? extends V> computingFunction) {
+    super(builder);
+    this.computingFunction = checkNotNull(computingFunction);
+  }
+
+  @Override
+  Segment<K, V> createSegment(int initialCapacity, int maxSegmentSize) {
+    return new ComputingSegment<K, V>(this, initialCapacity, maxSegmentSize);
+  }
+
+  @Override
+  ComputingSegment<K, V> segmentFor(int hash) {
+    return (ComputingSegment<K, V>) super.segmentFor(hash);
+  }
+
+  V getOrCompute(K key) throws ExecutionException {
+    int hash = hash(checkNotNull(key));
+    return segmentFor(hash).getOrCompute(key, hash, computingFunction);
+  }
+
+  @SuppressWarnings("serial") // This class is never serialized.
+  static final class ComputingSegment<K, V> extends Segment<K, V> {
+    ComputingSegment(MapMakerInternalMap<K, V> map, int initialCapacity, int maxSegmentSize) {
+      super(map, initialCapacity, maxSegmentSize);
+    }
+
+    V getOrCompute(K key, int hash, Function<? super K, ? extends V> computingFunction)
+        throws ExecutionException {
+      try {
+        outer: while (true) {
+          // don't call getLiveEntry, which would ignore computing values
+          ReferenceEntry<K, V> e = getEntry(key, hash);
+          if (e != null) {
+            V value = getLiveValue(e);
+            if (value != null) {
+              recordRead(e);
+              return value;
+            }
+          }
+
+          // at this point e is either null, computing, or expired;
+          // avoid locking if it's already computing
+          if (e == null || !e.getValueReference().isComputingReference()) {
+            boolean createNewEntry = true;
+            ComputingValueReference<K, V> computingValueReference = null;
+            lock();
+            try {
+              preWriteCleanup();
+
+              int newCount = this.count - 1;
+              AtomicReferenceArray<ReferenceEntry<K, V>> table = this.table;
+              int index = hash & (table.length() - 1);
+              ReferenceEntry<K, V> first = table.get(index);
+
+              for (e = first; e != null; e = e.getNext()) {
+                K entryKey = e.getKey();
+                if (e.getHash() == hash && entryKey != null
+                    && map.keyEquivalence.equivalent(key, entryKey)) {
+                  ValueReference<K, V> valueReference = e.getValueReference();
+                  if (valueReference.isComputingReference()) {
+                    createNewEntry = false;
+                  } else {
+                    V value = e.getValueReference().get();
+                    if (value == null) {
+                      enqueueNotification(entryKey, hash, value, RemovalCause.COLLECTED);
+                    } else if (map.expires() && map.isExpired(e)) {
+                      // This is a duplicate check, as preWriteCleanup already purged expired
+                      // entries, but let's accomodate an incorrect expiration queue.
+                      enqueueNotification(entryKey, hash, value, RemovalCause.EXPIRED);
+                    } else {
+                      recordLockedRead(e);
+                      return value;
+                    }
+
+                    // immediately reuse invalid entries
+                    evictionQueue.remove(e);
+                    expirationQueue.remove(e);
+                    this.count = newCount; // write-volatile
+                  }
+                  break;
+                }
+              }
+
+              if (createNewEntry) {
+                computingValueReference = new ComputingValueReference<K, V>(computingFunction);
+
+                if (e == null) {
+                  e = newEntry(key, hash, first);
+                  e.setValueReference(computingValueReference);
+                  table.set(index, e);
+                } else {
+                  e.setValueReference(computingValueReference);
+                }
+              }
+            } finally {
+              unlock();
+              postWriteCleanup();
+            }
+
+            if (createNewEntry) {
+              // This thread solely created the entry.
+              return compute(key, hash, e, computingValueReference);
+            }
+          }
+
+          // The entry already exists. Wait for the computation.
+          checkState(!Thread.holdsLock(e), "Recursive computation");
+          // don't consider expiration as we're concurrent with computation
+          V value = e.getValueReference().waitForValue();
+          if (value != null) {
+            recordRead(e);
+            return value;
+          }
+          // else computing thread will clearValue
+          continue outer;
+        }
+      } finally {
+        postReadCleanup();
+      }
+    }
+
+    V compute(K key, int hash, ReferenceEntry<K, V> e,
+        ComputingValueReference<K, V> computingValueReference)
+        throws ExecutionException {
+      V value = null;
+      long start = System.nanoTime();
+      long end = 0;
+      try {
+        // Synchronizes on the entry to allow failing fast when a recursive computation is
+        // detected. This is not fool-proof since the entry may be copied when the segment
+        // is written to.
+        synchronized (e) {
+          value = computingValueReference.compute(key, hash);
+          end = System.nanoTime();
+        }
+        if (value != null) {
+          // putIfAbsent
+          V oldValue = put(key, hash, value, true);
+          if (oldValue != null) {
+            // the computed value was already clobbered
+            enqueueNotification(key, hash, value, RemovalCause.REPLACED);
+          }
+        }
+        return value;
+      } finally {
+        if (end == 0) {
+          end = System.nanoTime();
+        }
+        if (value == null) {
+          clearValue(key, hash, computingValueReference);
+        }
+      }
+    }
+  }
+
+  /**
+   * Used to provide computation exceptions to other threads.
+   */
+  private static final class ComputationExceptionReference<K, V> implements ValueReference<K, V> {
+    final Throwable t;
+
+    ComputationExceptionReference(Throwable t) {
+      this.t = t;
+    }
+
+    @Override
+    public V get() {
+      return null;
+    }
+
+    @Override
+    public ReferenceEntry<K, V> getEntry() {
+      return null;
+    }
+
+    @Override
+    public ValueReference<K, V> copyFor(ReferenceQueue<V> queue, ReferenceEntry<K, V> entry) {
+      return this;
+    }
+
+    @Override
+    public boolean isComputingReference() {
+      return false;
+    }
+
+    @Override
+    public V waitForValue() throws ExecutionException {
+      throw new ExecutionException(t);
+    }
+
+    @Override
+    public void clear(ValueReference<K, V> newValue) {}
+  }
+
+  /**
+   * Used to provide computation result to other threads.
+   */
+  private static final class ComputedReference<K, V> implements ValueReference<K, V> {
+    final V value;
+
+    ComputedReference(@Nullable V value) {
+      this.value = value;
+    }
+
+    @Override
+    public V get() {
+      return value;
+    }
+
+    @Override
+    public ReferenceEntry<K, V> getEntry() {
+      return null;
+    }
+
+    @Override
+    public ValueReference<K, V> copyFor(ReferenceQueue<V> queue, ReferenceEntry<K, V> entry) {
+      return this;
+    }
+
+    @Override
+    public boolean isComputingReference() {
+      return false;
+    }
+
+    @Override
+    public V waitForValue() {
+      return get();
+    }
+
+    @Override
+    public void clear(ValueReference<K, V> newValue) {}
+  }
+
+  private static final class ComputingValueReference<K, V> implements ValueReference<K, V> {
+    final Function<? super K, ? extends V> computingFunction;
+
+    @GuardedBy("ComputingValueReference.this") // writes
+    volatile ValueReference<K, V> computedReference = unset();
+
+    public ComputingValueReference(Function<? super K, ? extends V> computingFunction) {
+      this.computingFunction = computingFunction;
+    }
+
+    @Override
+    public V get() {
+      // All computation lookups go through waitForValue. This method thus is
+      // only used by put, to whom we always want to appear absent.
+      return null;
+    }
+
+    @Override
+    public ReferenceEntry<K, V> getEntry() {
+      return null;
+    }
+
+    @Override
+    public ValueReference<K, V> copyFor(ReferenceQueue<V> queue, ReferenceEntry<K, V> entry) {
+      return this;
+    }
+
+    @Override
+    public boolean isComputingReference() {
+      return true;
+    }
+
+    /**
+     * Waits for a computation to complete. Returns the result of the computation.
+     */
+    @Override
+    public V waitForValue() throws ExecutionException {
+      if (computedReference == UNSET) {
+        boolean interrupted = false;
+        try {
+          synchronized (this) {
+            while (computedReference == UNSET) {
+              try {
+                wait();
+              } catch (InterruptedException ie) {
+                interrupted = true;
+              }
+            }
+          }
+        } finally {
+          if (interrupted) {
+            Thread.currentThread().interrupt();
+          }
+        }
+      }
+      return computedReference.waitForValue();
+    }
+
+    @Override
+    public void clear(ValueReference<K, V> newValue) {
+      // The pending computation was clobbered by a manual write. Unblock all
+      // pending gets, and have them return the new value.
+      setValueReference(newValue);
+
+      // TODO(fry): could also cancel computation if we had a thread handle
+    }
+
+    V compute(K key, int hash) throws ExecutionException {
+      V value;
+      try {
+        value = computingFunction.apply(key);
+      } catch (Throwable t) {
+        setValueReference(new ComputationExceptionReference<K, V>(t));
+        throw new ExecutionException(t);
+      }
+
+      setValueReference(new ComputedReference<K, V>(value));
+      return value;
+    }
+
+    void setValueReference(ValueReference<K, V> valueReference) {
+      synchronized (this) {
+        if (computedReference == UNSET) {
+          computedReference = valueReference;
+          notifyAll();
+        }
+      }
+    }
+  }
+
+  /**
+   * Overrides get() to compute on demand. Also throws an exception when {@code null} is returned
+   * from a computation.
+   */
+  static final class ComputingMapAdapter<K, V>
+      extends ComputingConcurrentHashMap<K, V> implements Serializable {
+    private static final long serialVersionUID = 0;
+
+    ComputingMapAdapter(MapMaker mapMaker,
+        Function<? super K, ? extends V> computingFunction) {
+      super(mapMaker, computingFunction);
+    }
+
+    @SuppressWarnings("unchecked") // unsafe, which is one advantage of Cache over Map
+    @Override
+    public V get(Object key) {
+      V value;
+      try {
+        value = getOrCompute((K) key);
+      } catch (ExecutionException e) {
+        Throwable cause = e.getCause();
+        Throwables.propagateIfInstanceOf(cause, ComputationException.class);
+        throw new ComputationException(cause);
+      }
+
+      if (value == null) {
+        throw new NullPointerException(computingFunction + " returned null for key " + key + ".");
+      }
+      return value;
+    }
+  }
+
+  // Serialization Support
+
+  private static final long serialVersionUID = 4;
+
+  @Override
+  Object writeReplace() {
+    return new ComputingSerializationProxy<K, V>(keyStrength, valueStrength, keyEquivalence,
+        valueEquivalence, expireAfterWriteNanos, expireAfterAccessNanos, maximumSize,
+        concurrencyLevel, removalListener, this, computingFunction);
+  }
+
+  static final class ComputingSerializationProxy<K, V> extends AbstractSerializationProxy<K, V> {
+
+    final Function<? super K, ? extends V> computingFunction;
+
+    ComputingSerializationProxy(Strength keyStrength, Strength valueStrength,
+        Equivalence<Object> keyEquivalence, Equivalence<Object> valueEquivalence,
+        long expireAfterWriteNanos, long expireAfterAccessNanos, int maximumSize,
+        int concurrencyLevel, RemovalListener<? super K, ? super V> removalListener,
+        ConcurrentMap<K, V> delegate, Function<? super K, ? extends V> computingFunction) {
+      super(keyStrength, valueStrength, keyEquivalence, valueEquivalence, expireAfterWriteNanos,
+          expireAfterAccessNanos, maximumSize, concurrencyLevel, removalListener, delegate);
+      this.computingFunction = computingFunction;
+    }
+
+    private void writeObject(ObjectOutputStream out) throws IOException {
+      out.defaultWriteObject();
+      writeMapTo(out);
+    }
+
+    @SuppressWarnings("deprecation") // self-use
+    private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
+      in.defaultReadObject();
+      MapMaker mapMaker = readMapMaker(in);
+      delegate = mapMaker.makeComputingMap(computingFunction);
+      readEntries(in);
+    }
+
+    Object readResolve() {
+      return delegate;
+    }
+
+    private static final long serialVersionUID = 4;
+  }
+}
diff --git a/guava/src/com/google/common/collect/ConcurrentHashMultiset.java b/guava/src/com/google/common/collect/ConcurrentHashMultiset.java
new file mode 100644
index 0000000..46b8d6e
--- /dev/null
+++ b/guava/src/com/google/common/collect/ConcurrentHashMultiset.java
@@ -0,0 +1,584 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkState;
+import static com.google.common.collect.Multisets.checkNonnegative;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.collect.Serialization.FieldSetter;
+import com.google.common.math.IntMath;
+import com.google.common.primitives.Ints;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import javax.annotation.Nullable;
+
+/**
+ * A multiset that supports concurrent modifications and that provides atomic versions of most
+ * {@code Multiset} operations (exceptions where noted). Null elements are not supported.
+ *
+ * @author Cliff L. Biffle
+ * @author mike nonemacher
+ * @since 2.0 (imported from Google Collections Library)
+ */
+public final class ConcurrentHashMultiset<E> extends AbstractMultiset<E> implements Serializable {
+
+  /*
+   * The ConcurrentHashMultiset's atomic operations are implemented primarily in terms of
+   * AtomicInteger's atomic operations, with some help from ConcurrentMap's atomic operations on
+   * creation and removal (including automatic removal of zeroes). If the modification of an
+   * AtomicInteger results in zero, we compareAndSet the value to zero; if that succeeds, we remove
+   * the entry from the Map. If another operation sees a zero in the map, it knows that the entry is
+   * about to be removed, so this operation may remove it (often by replacing it with a new
+   * AtomicInteger).
+   */
+
+  /** The number of occurrences of each element. */
+  private final transient ConcurrentMap<E, AtomicInteger> countMap;
+
+  // This constant allows the deserialization code to set a final field. This holder class
+  // makes sure it is not initialized unless an instance is deserialized.
+  private static class FieldSettersHolder {
+    static final FieldSetter<ConcurrentHashMultiset> COUNT_MAP_FIELD_SETTER =
+        Serialization.getFieldSetter(ConcurrentHashMultiset.class, "countMap");
+  }
+
+  /**
+   * Creates a new, empty {@code ConcurrentHashMultiset} using the default
+   * initial capacity, load factor, and concurrency settings.
+   */
+  public static <E> ConcurrentHashMultiset<E> create() {
+    // TODO(schmoe): provide a way to use this class with other (possibly arbitrary)
+    // ConcurrentMap implementors. One possibility is to extract most of this class into
+    // an AbstractConcurrentMapMultiset.
+    return new ConcurrentHashMultiset<E>(new ConcurrentHashMap<E, AtomicInteger>());
+  }
+
+  /**
+   * Creates a new {@code ConcurrentHashMultiset} containing the specified elements, using
+   * the default initial capacity, load factor, and concurrency settings.
+   *
+   * <p>This implementation is highly efficient when {@code elements} is itself a {@link Multiset}.
+   *
+   * @param elements the elements that the multiset should contain
+   */
+  public static <E> ConcurrentHashMultiset<E> create(Iterable<? extends E> elements) {
+    ConcurrentHashMultiset<E> multiset = ConcurrentHashMultiset.create();
+    Iterables.addAll(multiset, elements);
+    return multiset;
+  }
+
+  /**
+   * Creates a new, empty {@code ConcurrentHashMultiset} using {@code mapMaker}
+   * to construct the internal backing map.
+   *
+   * <p>If this {@link MapMaker} is configured to use entry eviction of any kind, this eviction
+   * applies to all occurrences of a given element as a single unit. However, most updates to the
+   * multiset do not count as map updates at all, since we're usually just mutating the value
+   * stored in the map, so {@link MapMaker#expireAfterAccess} makes sense (evict the entry that
+   * was queried or updated longest ago), but {@link MapMaker#expireAfterWrite} doesn't, because
+   * the eviction time is measured from when we saw the first occurrence of the object.
+   *
+   * <p>The returned multiset is serializable but any serialization caveats
+   * given in {@code MapMaker} apply.
+   *
+   * <p>Finally, soft/weak values can be used but are not very useful: the values are created
+   * internally and not exposed externally, so no one else will have a strong reference to the
+   * values. Weak keys on the other hand can be useful in some scenarios.
+   * 
+   * @since 7.0
+   */
+  @Beta
+  public static <E> ConcurrentHashMultiset<E> create(
+      GenericMapMaker<? super E, ? super Number> mapMaker) {
+    return new ConcurrentHashMultiset<E>(mapMaker.<E, AtomicInteger>makeMap());
+  }
+
+  /**
+   * Creates an instance using {@code countMap} to store elements and their counts.
+   *
+   * <p>This instance will assume ownership of {@code countMap}, and other code
+   * should not maintain references to the map or modify it in any way.
+   *
+   * @param countMap backing map for storing the elements in the multiset and
+   *     their counts. It must be empty.
+   * @throws IllegalArgumentException if {@code countMap} is not empty
+   */
+  @VisibleForTesting ConcurrentHashMultiset(ConcurrentMap<E, AtomicInteger> countMap) {
+    checkArgument(countMap.isEmpty());
+    this.countMap = countMap;
+  }
+
+  // Query Operations
+
+  /**
+   * Returns the number of occurrences of {@code element} in this multiset.
+   *
+   * @param element the element to look for
+   * @return the nonnegative number of occurrences of the element
+   */
+  @Override public int count(@Nullable Object element) {
+    AtomicInteger existingCounter = safeGet(element);
+    return (existingCounter == null) ? 0 : existingCounter.get();
+  }
+
+  /**
+   * Depending on the type of the underlying map, map.get may throw NullPointerException or
+   * ClassCastException, if the object is null or of the wrong type. We usually just want to treat
+   * those cases as if the element isn't in the map, by catching the exceptions and returning null.
+   */
+  private AtomicInteger safeGet(Object element) {
+    try {
+      return countMap.get(element);
+    } catch (NullPointerException e) {
+      return null;
+    } catch (ClassCastException e) {
+      return null;
+    }
+  }
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>If the data in the multiset is modified by any other threads during this method,
+   * it is undefined which (if any) of these modifications will be reflected in the result.
+   */
+  @Override public int size() {
+    long sum = 0L;
+    for (AtomicInteger value : countMap.values()) {
+      sum += value.get();
+    }
+    return Ints.saturatedCast(sum);
+  }
+
+  /*
+   * Note: the superclass toArray() methods assume that size() gives a correct
+   * answer, which ours does not.
+   */
+
+  @Override public Object[] toArray() {
+    return snapshot().toArray();
+  }
+
+  @Override public <T> T[] toArray(T[] array) {
+    return snapshot().toArray(array);
+  }
+
+  /*
+   * We'd love to use 'new ArrayList(this)' or 'list.addAll(this)', but
+   * either of these would recurse back to us again!
+   */
+  private List<E> snapshot() {
+    List<E> list = Lists.newArrayListWithExpectedSize(size());
+    for (Multiset.Entry<E> entry : entrySet()) {
+      E element = entry.getElement();
+      for (int i = entry.getCount(); i > 0; i--) {
+        list.add(element);
+      }
+    }
+    return list;
+  }
+
+  // Modification Operations
+
+  /**
+   * Adds a number of occurrences of the specified element to this multiset.
+   *
+   * @param element the element to add
+   * @param occurrences the number of occurrences to add
+   * @return the previous count of the element before the operation; possibly zero
+   * @throws IllegalArgumentException if {@code occurrences} is negative, or if
+   *     the resulting amount would exceed {@link Integer#MAX_VALUE}
+   */
+  @Override public int add(E element, int occurrences) {
+    if (occurrences == 0) {
+      return count(element);
+    }
+    checkArgument(occurrences > 0, "Invalid occurrences: %s", occurrences);
+
+    while (true) {
+      AtomicInteger existingCounter = safeGet(element);
+      if (existingCounter == null) {
+        existingCounter = countMap.putIfAbsent(element, new AtomicInteger(occurrences));
+        if (existingCounter == null) {
+          return 0;
+        }
+        // existingCounter != null: fall through to operate against the existing AtomicInteger
+      }
+
+      while (true) {
+        int oldValue = existingCounter.get();
+        if (oldValue != 0) {
+          try {
+            int newValue = IntMath.checkedAdd(oldValue, occurrences);
+            if (existingCounter.compareAndSet(oldValue, newValue)) {
+              // newValue can't == 0, so no need to check & remove
+              return oldValue;
+            }
+          } catch (ArithmeticException overflow) {
+            throw new IllegalArgumentException("Overflow adding " + occurrences
+                + " occurrences to a count of " + oldValue);
+          }
+        } else {
+          // In the case of a concurrent remove, we might observe a zero value, which means another
+          // thread is about to remove (element, existingCounter) from the map. Rather than wait,
+          // we can just do that work here.
+          AtomicInteger newCounter = new AtomicInteger(occurrences);
+          if ((countMap.putIfAbsent(element, newCounter) == null)
+              || countMap.replace(element, existingCounter, newCounter)) {
+            return 0;
+          }
+          break;
+        }
+      }
+
+      // If we're still here, there was a race, so just try again.
+    }
+  }
+
+  /**
+   * Removes a number of occurrences of the specified element from this multiset. If the multiset
+   * contains fewer than this number of occurrences to begin with, all occurrences will be removed.
+   *
+   * @param element the element whose occurrences should be removed
+   * @param occurrences the number of occurrences of the element to remove
+   * @return the count of the element before the operation; possibly zero
+   * @throws IllegalArgumentException if {@code occurrences} is negative
+   */
+  @Override public int remove(@Nullable Object element, int occurrences) {
+    if (occurrences == 0) {
+      return count(element);
+    }
+    checkArgument(occurrences > 0, "Invalid occurrences: %s", occurrences);
+
+    AtomicInteger existingCounter = safeGet(element);
+    if (existingCounter == null) {
+      return 0;
+    }
+    while (true) {
+      int oldValue = existingCounter.get();
+      if (oldValue != 0) {
+        int newValue = Math.max(0, oldValue - occurrences);
+        if (existingCounter.compareAndSet(oldValue, newValue)) {
+          if (newValue == 0) {
+            // Just CASed to 0; remove the entry to clean up the map. If the removal fails,
+            // another thread has already replaced it with a new counter, which is fine.
+            countMap.remove(element, existingCounter);
+          }
+          return oldValue;
+        }
+      } else {
+        return 0;
+      }
+    }
+  }
+
+  /**
+   * Removes exactly the specified number of occurrences of {@code element}, or makes no
+   * change if this is not possible.
+   *
+   * <p>This method, in contrast to {@link #remove(Object, int)}, has no effect when the
+   * element count is smaller than {@code occurrences}.
+   *
+   * @param element the element to remove
+   * @param occurrences the number of occurrences of {@code element} to remove
+   * @return {@code true} if the removal was possible (including if {@code occurrences} is zero)
+   */
+  public boolean removeExactly(@Nullable Object element, int occurrences) {
+    if (occurrences == 0) {
+      return true;
+    }
+    checkArgument(occurrences > 0, "Invalid occurrences: %s", occurrences);
+
+    AtomicInteger existingCounter = safeGet(element);
+    if (existingCounter == null) {
+      return false;
+    }
+    while (true) {
+      int oldValue = existingCounter.get();
+      if (oldValue < occurrences) {
+        return false;
+      }
+      int newValue = oldValue - occurrences;
+      if (existingCounter.compareAndSet(oldValue, newValue)) {
+        if (newValue == 0) {
+          // Just CASed to 0; remove the entry to clean up the map. If the removal fails,
+          // another thread has already replaced it with a new counter, which is fine.
+          countMap.remove(element, existingCounter);
+        }
+        return true;
+      }
+    }
+  }
+
+  /**
+   * Adds or removes occurrences of {@code element} such that the {@link #count} of the
+   * element becomes {@code count}.
+   *
+   * @return the count of {@code element} in the multiset before this call
+   * @throws IllegalArgumentException if {@code count} is negative
+   */
+  @Override public int setCount(E element, int count) {
+    checkNonnegative(count, "count");
+    while (true) {
+      AtomicInteger existingCounter = safeGet(element);
+      if (existingCounter == null) {
+        if (count == 0) {
+          return 0;
+        } else {
+          existingCounter = countMap.putIfAbsent(element, new AtomicInteger(count));
+          if (existingCounter == null) {
+            return 0;
+          }
+          // existingCounter != null: fall through
+        }
+      }
+
+      while (true) {
+        int oldValue = existingCounter.get();
+        if (oldValue == 0) {
+          if (count == 0) {
+            return 0;
+          } else {
+            AtomicInteger newCounter = new AtomicInteger(count);
+            if ((countMap.putIfAbsent(element, newCounter) == null)
+                || countMap.replace(element, existingCounter, newCounter)) {
+              return 0;
+            }
+          }
+          break;
+        } else {
+          if (existingCounter.compareAndSet(oldValue, count)) {
+            if (count == 0) {
+              // Just CASed to 0; remove the entry to clean up the map. If the removal fails,
+              // another thread has already replaced it with a new counter, which is fine.
+              countMap.remove(element, existingCounter);
+            }
+            return oldValue;
+          }
+        }
+      }
+    }
+  }
+
+  /**
+   * Sets the number of occurrences of {@code element} to {@code newCount}, but only if
+   * the count is currently {@code expectedOldCount}. If {@code element} does not appear
+   * in the multiset exactly {@code expectedOldCount} times, no changes will be made.
+   *
+   * @return {@code true} if the change was successful. This usually indicates
+   *     that the multiset has been modified, but not always: in the case that
+   *     {@code expectedOldCount == newCount}, the method will return {@code true} if
+   *     the condition was met.
+   * @throws IllegalArgumentException if {@code expectedOldCount} or {@code newCount} is negative
+   */
+  @Override public boolean setCount(E element, int expectedOldCount, int newCount) {
+    checkNonnegative(expectedOldCount, "oldCount");
+    checkNonnegative(newCount, "newCount");
+
+    AtomicInteger existingCounter = safeGet(element);
+    if (existingCounter == null) {
+      if (expectedOldCount != 0) {
+        return false;
+      } else if (newCount == 0) {
+        return true;
+      } else {
+        // if our write lost the race, it must have lost to a nonzero value, so we can stop
+        return countMap.putIfAbsent(element, new AtomicInteger(newCount)) == null;
+      }
+    }
+    int oldValue = existingCounter.get();
+    if (oldValue == expectedOldCount) {
+      if (oldValue == 0) {
+        if (newCount == 0) {
+          // Just observed a 0; try to remove the entry to clean up the map
+          countMap.remove(element, existingCounter);
+          return true;
+        } else {
+          AtomicInteger newCounter = new AtomicInteger(newCount);
+          return (countMap.putIfAbsent(element, newCounter) == null)
+              || countMap.replace(element, existingCounter, newCounter);
+        }
+      } else {
+        if (existingCounter.compareAndSet(oldValue, newCount)) {
+          if (newCount == 0) {
+            // Just CASed to 0; remove the entry to clean up the map. If the removal fails,
+            // another thread has already replaced it with a new counter, which is fine.
+            countMap.remove(element, existingCounter);
+          }
+          return true;
+        }
+      }
+    }
+    return false;
+  }
+
+  // Views
+
+  @Override Set<E> createElementSet() {
+    final Set<E> delegate = countMap.keySet();
+    return new ForwardingSet<E>() {
+      @Override protected Set<E> delegate() {
+        return delegate;
+      }
+      @Override public boolean remove(Object object) {
+        try {
+          return delegate.remove(object);
+        } catch (NullPointerException e) {
+          return false;
+        } catch (ClassCastException e) {
+          return false;
+        }
+      }
+    };
+  }
+
+  private transient EntrySet entrySet;
+
+  @Override public Set<Multiset.Entry<E>> entrySet() {
+    EntrySet result = entrySet;
+    if (result == null) {
+      entrySet = result = new EntrySet();
+    }
+    return result;
+  }
+
+  @Override int distinctElements() {
+    return countMap.size();
+  }
+
+  @Override public boolean isEmpty() {
+    return countMap.isEmpty();
+  }
+
+  @Override Iterator<Entry<E>> entryIterator() {
+    // AbstractIterator makes this fairly clean, but it doesn't support remove(). To support
+    // remove(), we create an AbstractIterator, and then use ForwardingIterator to delegate to it.
+    final Iterator<Entry<E>> readOnlyIterator =
+        new AbstractIterator<Entry<E>>() {
+          private Iterator<Map.Entry<E, AtomicInteger>> mapEntries = countMap.entrySet().iterator();
+
+          @Override protected Entry<E> computeNext() {
+            while (true) {
+              if (!mapEntries.hasNext()) {
+                return endOfData();
+              }
+              Map.Entry<E, AtomicInteger> mapEntry = mapEntries.next();
+              int count = mapEntry.getValue().get();
+              if (count != 0) {
+                return Multisets.immutableEntry(mapEntry.getKey(), count);
+              }
+            }
+          }
+        };
+
+    return new ForwardingIterator<Entry<E>>() {
+      private Entry<E> last;
+
+      @Override protected Iterator<Entry<E>> delegate() {
+        return readOnlyIterator;
+      }
+
+      @Override public Entry<E> next() {
+        last = super.next();
+        return last;
+      }
+
+      @Override public void remove() {
+        checkState(last != null);
+        ConcurrentHashMultiset.this.setCount(last.getElement(), 0);
+        last = null;
+      }
+    };
+  }
+
+  @Override public void clear() {
+    countMap.clear();
+  }
+
+  private class EntrySet extends AbstractMultiset<E>.EntrySet {
+    @Override ConcurrentHashMultiset<E> multiset() {
+      return ConcurrentHashMultiset.this;
+    }
+
+    /*
+     * Note: the superclass toArray() methods assume that size() gives a correct
+     * answer, which ours does not.
+     */
+
+    @Override public Object[] toArray() {
+      return snapshot().toArray();
+    }
+
+    @Override public <T> T[] toArray(T[] array) {
+      return snapshot().toArray(array);
+    }
+
+    private List<Multiset.Entry<E>> snapshot() {
+      List<Multiset.Entry<E>> list = Lists.newArrayListWithExpectedSize(size());
+      // Not Iterables.addAll(list, this), because that'll forward right back here.
+      Iterators.addAll(list, iterator());
+      return list;
+    }
+
+    @Override public boolean remove(Object object) {
+      if (object instanceof Multiset.Entry) {
+        Multiset.Entry<?> entry = (Multiset.Entry<?>) object;
+        Object element = entry.getElement();
+        int entryCount = entry.getCount();
+        if (entryCount != 0) {
+          // Safe as long as we never add a new entry, which we won't.
+          @SuppressWarnings("unchecked")
+          Multiset<Object> multiset = (Multiset) multiset();
+          return multiset.setCount(element, entryCount, 0);
+        }
+      }
+      return false;
+    }
+  }
+
+  /**
+   * @serialData the ConcurrentMap of elements and their counts.
+   */
+  private void writeObject(ObjectOutputStream stream) throws IOException {
+    stream.defaultWriteObject();
+    stream.writeObject(countMap);
+  }
+
+  private void readObject(ObjectInputStream stream) throws IOException, ClassNotFoundException {
+    stream.defaultReadObject();
+    @SuppressWarnings("unchecked") // reading data stored by writeObject
+    ConcurrentMap<E, Integer> deserializedCountMap =
+        (ConcurrentMap<E, Integer>) stream.readObject();
+    FieldSettersHolder.COUNT_MAP_FIELD_SETTER.set(this, deserializedCountMap);
+  }
+
+  private static final long serialVersionUID = 1;
+}
diff --git a/guava/src/com/google/common/collect/Constraint.java b/guava/src/com/google/common/collect/Constraint.java
new file mode 100644
index 0000000..93b683b
--- /dev/null
+++ b/guava/src/com/google/common/collect/Constraint.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+
+/**
+ * A constraint that an element must satisfy in order to be added to a
+ * collection. For example, {@link Constraints#notNull()}, which prevents a
+ * collection from including any null elements, could be implemented like this:
+ * <pre>   {@code
+ *
+ *   public Object checkElement(Object element) {
+ *     if (element == null) {
+ *       throw new NullPointerException();
+ *     }
+ *     return element;
+ *   }}</pre>
+ *
+ * In order to be effective, constraints should be deterministic; that is,
+ * they should not depend on state that can change (such as external state,
+ * random variables, and time) and should only depend on the value of the
+ * passed-in element. A non-deterministic constraint cannot reliably enforce
+ * that all the collection's elements meet the constraint, since the constraint
+ * is only enforced when elements are added.
+ *
+ * @see Constraints
+ * @see MapConstraint
+ * @author Mike Bostock
+ * @since 3.0
+ */
+@Beta
+@GwtCompatible
+public interface Constraint<E> {
+  /**
+   * Throws a suitable {@code RuntimeException} if the specified element is
+   * illegal. Typically this is either a {@link NullPointerException}, an
+   * {@link IllegalArgumentException}, or a {@link ClassCastException}, though
+   * an application-specific exception class may be used if appropriate.
+   *
+   * @param element the element to check
+   * @return the provided element
+   */
+  E checkElement(E element);
+
+  /**
+   * Returns a brief human readable description of this constraint, such as
+   * "Not null" or "Positive number".
+   */
+  @Override
+  String toString();
+}
diff --git a/guava/src/com/google/common/collect/Constraints.java b/guava/src/com/google/common/collect/Constraints.java
new file mode 100644
index 0000000..3b7f8bb
--- /dev/null
+++ b/guava/src/com/google/common/collect/Constraints.java
@@ -0,0 +1,382 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.RandomAccess;
+import java.util.Set;
+import java.util.SortedSet;
+
+/**
+ * Factories and utilities pertaining to the {@link Constraint} interface.
+ *
+ * @see MapConstraints
+ * @author Mike Bostock
+ * @author Jared Levy
+ * @since 3.0
+ */
+@Beta
+@GwtCompatible
+public final class Constraints {
+  private Constraints() {}
+
+  // enum singleton pattern
+  private enum NotNullConstraint implements Constraint<Object> {
+    INSTANCE;
+
+    @Override
+    public Object checkElement(Object element) {
+      return checkNotNull(element);
+    }
+
+    @Override public String toString() {
+      return "Not null";
+    }
+  }
+
+  /**
+   * Returns a constraint that verifies that the element is not null. If the
+   * element is null, a {@link NullPointerException} is thrown.
+   */
+  // safe to narrow the type since checkElement returns its argument directly
+  @SuppressWarnings("unchecked")
+  public static <E> Constraint<E> notNull() {
+    return (Constraint<E>) NotNullConstraint.INSTANCE;
+  }
+
+  /**
+   * Returns a constrained view of the specified collection, using the specified
+   * constraint. Any operations that add new elements to the collection will
+   * call the provided constraint. However, this method does not verify that
+   * existing elements satisfy the constraint.
+   *
+   * <p>The returned collection is not serializable.
+   *
+   * @param collection the collection to constrain
+   * @param constraint the constraint that validates added elements
+   * @return a constrained view of the collection
+   */
+  public static <E> Collection<E> constrainedCollection(
+      Collection<E> collection, Constraint<? super E> constraint) {
+    return new ConstrainedCollection<E>(collection, constraint);
+  }
+
+  /** @see Constraints#constrainedCollection */
+  static class ConstrainedCollection<E> extends ForwardingCollection<E> {
+    private final Collection<E> delegate;
+    private final Constraint<? super E> constraint;
+
+    public ConstrainedCollection(
+        Collection<E> delegate, Constraint<? super E> constraint) {
+      this.delegate = checkNotNull(delegate);
+      this.constraint = checkNotNull(constraint);
+    }
+    @Override protected Collection<E> delegate() {
+      return delegate;
+    }
+    @Override public boolean add(E element) {
+      constraint.checkElement(element);
+      return delegate.add(element);
+    }
+    @Override public boolean addAll(Collection<? extends E> elements) {
+      return delegate.addAll(checkElements(elements, constraint));
+    }
+  }
+
+  /**
+   * Returns a constrained view of the specified set, using the specified
+   * constraint. Any operations that add new elements to the set will call the
+   * provided constraint. However, this method does not verify that existing
+   * elements satisfy the constraint.
+   *
+   * <p>The returned set is not serializable.
+   *
+   * @param set the set to constrain
+   * @param constraint the constraint that validates added elements
+   * @return a constrained view of the set
+   */
+  public static <E> Set<E> constrainedSet(
+      Set<E> set, Constraint<? super E> constraint) {
+    return new ConstrainedSet<E>(set, constraint);
+  }
+
+  /** @see Constraints#constrainedSet */
+  static class ConstrainedSet<E> extends ForwardingSet<E> {
+    private final Set<E> delegate;
+    private final Constraint<? super E> constraint;
+
+    public ConstrainedSet(Set<E> delegate, Constraint<? super E> constraint) {
+      this.delegate = checkNotNull(delegate);
+      this.constraint = checkNotNull(constraint);
+    }
+    @Override protected Set<E> delegate() {
+      return delegate;
+    }
+    @Override public boolean add(E element) {
+      constraint.checkElement(element);
+      return delegate.add(element);
+    }
+    @Override public boolean addAll(Collection<? extends E> elements) {
+      return delegate.addAll(checkElements(elements, constraint));
+    }
+  }
+
+  /**
+   * Returns a constrained view of the specified sorted set, using the specified
+   * constraint. Any operations that add new elements to the sorted set will
+   * call the provided constraint. However, this method does not verify that
+   * existing elements satisfy the constraint.
+   *
+   * <p>The returned set is not serializable.
+   *
+   * @param sortedSet the sorted set to constrain
+   * @param constraint the constraint that validates added elements
+   * @return a constrained view of the sorted set
+   */
+  public static <E> SortedSet<E> constrainedSortedSet(
+      SortedSet<E> sortedSet, Constraint<? super E> constraint) {
+    return new ConstrainedSortedSet<E>(sortedSet, constraint);
+  }
+
+  /** @see Constraints#constrainedSortedSet */
+  private static class ConstrainedSortedSet<E> extends ForwardingSortedSet<E> {
+    final SortedSet<E> delegate;
+    final Constraint<? super E> constraint;
+
+    ConstrainedSortedSet(
+        SortedSet<E> delegate, Constraint<? super E> constraint) {
+      this.delegate = checkNotNull(delegate);
+      this.constraint = checkNotNull(constraint);
+    }
+    @Override protected SortedSet<E> delegate() {
+      return delegate;
+    }
+    @Override public SortedSet<E> headSet(E toElement) {
+      return constrainedSortedSet(delegate.headSet(toElement), constraint);
+    }
+    @Override public SortedSet<E> subSet(E fromElement, E toElement) {
+      return constrainedSortedSet(
+          delegate.subSet(fromElement, toElement), constraint);
+    }
+    @Override public SortedSet<E> tailSet(E fromElement) {
+      return constrainedSortedSet(delegate.tailSet(fromElement), constraint);
+    }
+    @Override public boolean add(E element) {
+      constraint.checkElement(element);
+      return delegate.add(element);
+    }
+    @Override public boolean addAll(Collection<? extends E> elements) {
+      return delegate.addAll(checkElements(elements, constraint));
+    }
+  }
+
+  /**
+   * Returns a constrained view of the specified list, using the specified
+   * constraint. Any operations that add new elements to the list will call the
+   * provided constraint. However, this method does not verify that existing
+   * elements satisfy the constraint.
+   *
+   * <p>If {@code list} implements {@link RandomAccess}, so will the returned
+   * list. The returned list is not serializable.
+   *
+   * @param list the list to constrain
+   * @param constraint the constraint that validates added elements
+   * @return a constrained view of the list
+   */
+  public static <E> List<E> constrainedList(
+      List<E> list, Constraint<? super E> constraint) {
+    return (list instanceof RandomAccess)
+        ? new ConstrainedRandomAccessList<E>(list, constraint)
+        : new ConstrainedList<E>(list, constraint);
+  }
+
+  /** @see Constraints#constrainedList */
+  @GwtCompatible
+  private static class ConstrainedList<E> extends ForwardingList<E> {
+    final List<E> delegate;
+    final Constraint<? super E> constraint;
+
+    ConstrainedList(List<E> delegate, Constraint<? super E> constraint) {
+      this.delegate = checkNotNull(delegate);
+      this.constraint = checkNotNull(constraint);
+    }
+    @Override protected List<E> delegate() {
+      return delegate;
+    }
+
+    @Override public boolean add(E element) {
+      constraint.checkElement(element);
+      return delegate.add(element);
+    }
+    @Override public void add(int index, E element) {
+      constraint.checkElement(element);
+      delegate.add(index, element);
+    }
+    @Override public boolean addAll(Collection<? extends E> elements) {
+      return delegate.addAll(checkElements(elements, constraint));
+    }
+    @Override public boolean addAll(int index, Collection<? extends E> elements)
+    {
+      return delegate.addAll(index, checkElements(elements, constraint));
+    }
+    @Override public ListIterator<E> listIterator() {
+      return constrainedListIterator(delegate.listIterator(), constraint);
+    }
+    @Override public ListIterator<E> listIterator(int index) {
+      return constrainedListIterator(delegate.listIterator(index), constraint);
+    }
+    @Override public E set(int index, E element) {
+      constraint.checkElement(element);
+      return delegate.set(index, element);
+    }
+    @Override public List<E> subList(int fromIndex, int toIndex) {
+      return constrainedList(
+          delegate.subList(fromIndex, toIndex), constraint);
+    }
+  }
+
+  /** @see Constraints#constrainedList */
+  static class ConstrainedRandomAccessList<E> extends ConstrainedList<E>
+      implements RandomAccess {
+    ConstrainedRandomAccessList(
+        List<E> delegate, Constraint<? super E> constraint) {
+      super(delegate, constraint);
+    }
+  }
+
+  /**
+   * Returns a constrained view of the specified list iterator, using the
+   * specified constraint. Any operations that would add new elements to the
+   * underlying list will be verified by the constraint.
+   *
+   * @param listIterator the iterator for which to return a constrained view
+   * @param constraint the constraint for elements in the list
+   * @return a constrained view of the specified iterator
+   */
+  private static <E> ListIterator<E> constrainedListIterator(
+      ListIterator<E> listIterator, Constraint<? super E> constraint) {
+    return new ConstrainedListIterator<E>(listIterator, constraint);
+  }
+
+  /** @see Constraints#constrainedListIterator */
+  static class ConstrainedListIterator<E> extends ForwardingListIterator<E> {
+    private final ListIterator<E> delegate;
+    private final Constraint<? super E> constraint;
+
+    public ConstrainedListIterator(
+        ListIterator<E> delegate, Constraint<? super E> constraint) {
+      this.delegate = delegate;
+      this.constraint = constraint;
+    }
+    @Override protected ListIterator<E> delegate() {
+      return delegate;
+    }
+
+    @Override public void add(E element) {
+      constraint.checkElement(element);
+      delegate.add(element);
+    }
+    @Override public void set(E element) {
+      constraint.checkElement(element);
+      delegate.set(element);
+    }
+  }
+
+  static <E> Collection<E> constrainedTypePreservingCollection(
+      Collection<E> collection, Constraint<E> constraint) {
+    if (collection instanceof SortedSet) {
+      return constrainedSortedSet((SortedSet<E>) collection, constraint);
+    } else if (collection instanceof Set) {
+      return constrainedSet((Set<E>) collection, constraint);
+    } else if (collection instanceof List) {
+      return constrainedList((List<E>) collection, constraint);
+    } else {
+      return constrainedCollection(collection, constraint);
+    }
+  }
+
+  /**
+   * Returns a constrained view of the specified multiset, using the specified
+   * constraint. Any operations that add new elements to the multiset will call
+   * the provided constraint. However, this method does not verify that
+   * existing elements satisfy the constraint.
+   *
+   * <p>The returned multiset is not serializable.
+   *
+   * @param multiset the multiset to constrain
+   * @param constraint the constraint that validates added elements
+   * @return a constrained view of the multiset
+   */
+  public static <E> Multiset<E> constrainedMultiset(
+      Multiset<E> multiset, Constraint<? super E> constraint) {
+    return new ConstrainedMultiset<E>(multiset, constraint);
+  }
+
+  /** @see Constraints#constrainedMultiset */
+  static class ConstrainedMultiset<E> extends ForwardingMultiset<E> {
+    private Multiset<E> delegate;
+    private final Constraint<? super E> constraint;
+
+    public ConstrainedMultiset(
+        Multiset<E> delegate, Constraint<? super E> constraint) {
+      this.delegate = checkNotNull(delegate);
+      this.constraint = checkNotNull(constraint);
+    }
+    @Override protected Multiset<E> delegate() {
+      return delegate;
+    }
+    @Override public boolean add(E element) {
+      return standardAdd(element);
+    }
+    @Override public boolean addAll(Collection<? extends E> elements) {
+      return delegate.addAll(checkElements(elements, constraint));
+    }
+    @Override public int add(E element, int occurrences) {
+      constraint.checkElement(element);
+      return delegate.add(element, occurrences);
+    }
+    @Override public int setCount(E element, int count) {
+      constraint.checkElement(element);
+      return delegate.setCount(element, count);
+    }
+    @Override public boolean setCount(E element, int oldCount, int newCount) {
+      constraint.checkElement(element);
+      return delegate.setCount(element, oldCount, newCount);
+    }
+  }
+
+  /*
+   * TODO(kevinb): For better performance, avoid making a copy of the elements
+   * by having addAll() call add() repeatedly instead.
+   */
+
+  private static <E> Collection<E> checkElements(
+      Collection<E> elements, Constraint<? super E> constraint) {
+    Collection<E> copy = Lists.newArrayList(elements);
+    for (E element : copy) {
+      constraint.checkElement(element);
+    }
+    return copy;
+  }
+}
diff --git a/guava/src/com/google/common/collect/ContiguousSet.java b/guava/src/com/google/common/collect/ContiguousSet.java
new file mode 100644
index 0000000..439f675
--- /dev/null
+++ b/guava/src/com/google/common/collect/ContiguousSet.java
@@ -0,0 +1,116 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.NoSuchElementException;
+
+/**
+ * A sorted set of contiguous values in a given {@link DiscreteDomain}.
+ *
+ * @author Gregory Kick
+ * @since 10.0
+ */
+@Beta
+@GwtCompatible
+@SuppressWarnings("unchecked") // allow ungenerified Comparable types
+public abstract class ContiguousSet<C extends Comparable> extends ImmutableSortedSet<C> {
+  final DiscreteDomain<C> domain;
+
+  ContiguousSet(DiscreteDomain<C> domain) {
+    super(Ordering.natural());
+    this.domain = domain;
+  }
+
+  @Override public ContiguousSet<C> headSet(C toElement) {
+    return headSet(checkNotNull(toElement), false);
+  }
+
+  @Override ContiguousSet<C> headSet(C toElement, boolean inclusive) {
+    return headSetImpl(checkNotNull(toElement), inclusive);
+  }
+
+  @Override public ContiguousSet<C> subSet(C fromElement, C toElement) {
+    checkNotNull(fromElement);
+    checkNotNull(toElement);
+    checkArgument(comparator().compare(fromElement, toElement) <= 0);
+    return subSet(fromElement, true, toElement, false);
+  }
+
+  @Override ContiguousSet<C> subSet(C fromElement, boolean fromInclusive, C toElement,
+      boolean toInclusive) {
+    checkNotNull(fromElement);
+    checkNotNull(toElement);
+    checkArgument(comparator().compare(fromElement, toElement) <= 0);
+    return subSetImpl(fromElement, fromInclusive, toElement, toInclusive);
+  }
+
+  @Override public ContiguousSet<C> tailSet(C fromElement) {
+    return tailSet(checkNotNull(fromElement), true);
+  }
+
+  @Override ContiguousSet<C> tailSet(C fromElement, boolean inclusive){
+    return tailSetImpl(checkNotNull(fromElement), inclusive);
+  }
+
+  /*
+   * These methods perform most headSet, subSet, and tailSet logic, besides parameter validation.
+   */
+  /*@Override*/ abstract ContiguousSet<C> headSetImpl(C toElement, boolean inclusive);
+
+  /*@Override*/ abstract ContiguousSet<C> subSetImpl(C fromElement, boolean fromInclusive,
+      C toElement, boolean toInclusive);
+
+  /*@Override*/ abstract ContiguousSet<C> tailSetImpl(C fromElement, boolean inclusive);
+
+  /**
+   * Returns the set of values that are contained in both this set and the other.
+   *
+   * <p>This method should always be used instead of
+   * {@link Sets#intersection} for {@link ContiguousSet} instances.
+   */
+  public abstract ContiguousSet<C> intersection(ContiguousSet<C> other);
+
+  /**
+   * Returns a range, closed on both ends, whose endpoints are the minimum and maximum values
+   * contained in this set.  This is equivalent to {@code range(CLOSED, CLOSED)}.
+   *
+   * @throws NoSuchElementException if this set is empty
+   */
+  public abstract Range<C> range();
+
+  /**
+   * Returns the minimal range with the given boundary types for which all values in this set are
+   * {@linkplain Range#contains(Comparable) contained} within the range.
+   *
+   * <p>Note that this method will return ranges with unbounded endpoints if {@link BoundType#OPEN}
+   * is requested for a domain minimum or maximum.  For example, if {@code set} was created from the
+   * range {@code [1..Integer.MAX_VALUE]} then {@code set.range(CLOSED, OPEN)} must return
+   * {@code [1..∞)}.
+   *
+   * @throws NoSuchElementException if this set is empty
+   */
+  public abstract Range<C> range(BoundType lowerBoundType, BoundType upperBoundType);
+
+  /** Returns a short-hand representation of the contents such as {@code "[1..100]"}. */
+  @Override public String toString() {
+    return range().toString();
+  }
+}
diff --git a/guava/src/com/google/common/collect/Count.java b/guava/src/com/google/common/collect/Count.java
new file mode 100644
index 0000000..a095119
--- /dev/null
+++ b/guava/src/com/google/common/collect/Count.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.io.Serializable;
+
+import javax.annotation.Nullable;
+
+/**
+ * A mutable value of type {@code int}, for multisets to use in tracking counts of values.
+ *
+ * @author Louis Wasserman
+ */
+@GwtCompatible
+final class Count implements Serializable {
+  private int value;
+
+  Count() {
+    this(0);
+  }
+
+  Count(int value) {
+    this.value = value;
+  }
+
+  public int get() {
+    return value;
+  }
+
+  public int getAndAdd(int delta) {
+    int result = value;
+    value = result + delta;
+    return result;
+  }
+
+  public int addAndGet(int delta) {
+    return value += delta;
+  }
+
+  public void set(int newValue) {
+    value = newValue;
+  }
+
+  public int getAndSet(int newValue) {
+    int result = value;
+    value = newValue;
+    return result;
+  }
+
+  @Override
+  public int hashCode() {
+    return value;
+  }
+
+  @Override
+  public boolean equals(@Nullable Object obj) {
+    return obj instanceof Count && ((Count) obj).value == value;
+  }
+
+  @Override
+  public String toString() {
+    return Integer.toString(value);
+  }
+}
diff --git a/guava/src/com/google/common/collect/Cut.java b/guava/src/com/google/common/collect/Cut.java
new file mode 100644
index 0000000..204ea0c
--- /dev/null
+++ b/guava/src/com/google/common/collect/Cut.java
@@ -0,0 +1,347 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.primitives.Booleans;
+
+import java.io.Serializable;
+import java.util.NoSuchElementException;
+
+import javax.annotation.Nullable;
+
+/**
+ * Implementation detail for the internal structure of {@link Range} instances. Represents
+ * a unique way of "cutting" a "number line" (actually of instances of type {@code C}, not
+ * necessarily "numbers") into two sections; this can be done below a certain value, above
+ * a certain value, below all values or above all values. With this object defined in this
+ * way, an interval can always be represented by a pair of {@code Cut} instances.
+ *
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible
+abstract class Cut<C extends Comparable> implements Comparable<Cut<C>>, Serializable {
+  final C endpoint;
+
+  Cut(@Nullable C endpoint) {
+    this.endpoint = endpoint;
+  }
+
+  abstract boolean isLessThan(C value);
+
+  abstract BoundType typeAsLowerBound();
+  abstract BoundType typeAsUpperBound();
+
+  abstract Cut<C> withLowerBoundType(BoundType boundType, DiscreteDomain<C> domain);
+  abstract Cut<C> withUpperBoundType(BoundType boundType, DiscreteDomain<C> domain);
+
+  abstract void describeAsLowerBound(StringBuilder sb);
+  abstract void describeAsUpperBound(StringBuilder sb);
+
+  abstract C leastValueAbove(DiscreteDomain<C> domain);
+  abstract C greatestValueBelow(DiscreteDomain<C> domain);
+
+  /*
+   * The canonical form is a BelowValue cut whenever possible, otherwise ABOVE_ALL, or
+   * (only in the case of types that are unbounded below) BELOW_ALL.
+   */
+  Cut<C> canonical(DiscreteDomain<C> domain) {
+    return this;
+  }
+
+  // note: overriden by {BELOW,ABOVE}_ALL
+  @Override
+  public int compareTo(Cut<C> that) {
+    if (that == belowAll()) {
+      return 1;
+    }
+    if (that == aboveAll()) {
+      return -1;
+    }
+    int result = Range.compareOrThrow(endpoint, that.endpoint);
+    if (result != 0) {
+      return result;
+    }
+    // same value. below comes before above
+    return Booleans.compare(
+        this instanceof AboveValue, that instanceof AboveValue);
+  }
+
+  C endpoint() {
+    return endpoint;
+  }
+
+  @SuppressWarnings("unchecked") // catching CCE
+  @Override public boolean equals(Object obj) {
+    if (obj instanceof Cut) {
+      // It might not really be a Cut<C>, but we'll catch a CCE if it's not
+      Cut<C> that = (Cut<C>) obj;
+      try {
+        int compareResult = compareTo(that);
+        return compareResult == 0;
+      } catch (ClassCastException ignored) {
+      }
+    }
+    return false;
+  }
+
+  /*
+   * The implementation neither produces nor consumes any non-null instance of type C, so
+   * casting the type parameter is safe.
+   */
+  @SuppressWarnings("unchecked")
+  static <C extends Comparable> Cut<C> belowAll() {
+    return (Cut<C>) BelowAll.INSTANCE;
+  }
+
+  private static final long serialVersionUID = 0;
+
+  private static final class BelowAll extends Cut<Comparable<?>> {
+    private static final BelowAll INSTANCE = new BelowAll();
+
+    private BelowAll() {
+      super(null);
+    }
+    @Override Comparable<?> endpoint() {
+      throw new IllegalStateException("range unbounded on this side");
+    }
+    @Override boolean isLessThan(Comparable<?> value) {
+      return true;
+    }
+    @Override BoundType typeAsLowerBound() {
+      throw new IllegalStateException();
+    }
+    @Override BoundType typeAsUpperBound() {
+      throw new AssertionError("this statement should be unreachable");
+    }
+    @Override Cut<Comparable<?>> withLowerBoundType(BoundType boundType,
+        DiscreteDomain<Comparable<?>> domain) {
+      throw new IllegalStateException();
+    }
+    @Override Cut<Comparable<?>> withUpperBoundType(BoundType boundType,
+        DiscreteDomain<Comparable<?>> domain) {
+      throw new AssertionError("this statement should be unreachable");
+    }
+    @Override void describeAsLowerBound(StringBuilder sb) {
+      sb.append("(-\u221e");
+    }
+    @Override void describeAsUpperBound(StringBuilder sb) {
+      throw new AssertionError();
+    }
+    @Override Comparable<?> leastValueAbove(
+        DiscreteDomain<Comparable<?>> domain) {
+      return domain.minValue();
+    }
+    @Override Comparable<?> greatestValueBelow(
+        DiscreteDomain<Comparable<?>> domain) {
+      throw new AssertionError();
+    }
+    @Override Cut<Comparable<?>> canonical(
+        DiscreteDomain<Comparable<?>> domain) {
+      try {
+        return Cut.<Comparable<?>>belowValue(domain.minValue());
+      } catch (NoSuchElementException e) {
+        return this;
+      }
+    }
+    @Override public int compareTo(Cut<Comparable<?>> o) {
+      return (o == this) ? 0 : -1;
+    }
+    private Object readResolve() {
+      return INSTANCE;
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  /*
+   * The implementation neither produces nor consumes any non-null instance of
+   * type C, so casting the type parameter is safe.
+   */
+  @SuppressWarnings("unchecked")
+  static <C extends Comparable> Cut<C> aboveAll() {
+    return (Cut<C>) AboveAll.INSTANCE;
+  }
+
+  private static final class AboveAll extends Cut<Comparable<?>> {
+    private static final AboveAll INSTANCE = new AboveAll();
+
+    private AboveAll() {
+      super(null);
+    }
+    @Override Comparable<?> endpoint() {
+      throw new IllegalStateException("range unbounded on this side");
+    }
+    @Override boolean isLessThan(Comparable<?> value) {
+      return false;
+    }
+    @Override BoundType typeAsLowerBound() {
+      throw new AssertionError("this statement should be unreachable");
+    }
+    @Override BoundType typeAsUpperBound() {
+      throw new IllegalStateException();
+    }
+    @Override Cut<Comparable<?>> withLowerBoundType(BoundType boundType,
+        DiscreteDomain<Comparable<?>> domain) {
+      throw new AssertionError("this statement should be unreachable");
+    }
+    @Override Cut<Comparable<?>> withUpperBoundType(BoundType boundType,
+        DiscreteDomain<Comparable<?>> domain) {
+      throw new IllegalStateException();
+    }
+    @Override void describeAsLowerBound(StringBuilder sb) {
+      throw new AssertionError();
+    }
+    @Override void describeAsUpperBound(StringBuilder sb) {
+      sb.append("+\u221e)");
+    }
+    @Override Comparable<?> leastValueAbove(
+        DiscreteDomain<Comparable<?>> domain) {
+      throw new AssertionError();
+    }
+    @Override Comparable<?> greatestValueBelow(
+        DiscreteDomain<Comparable<?>> domain) {
+      return domain.maxValue();
+    }
+    @Override public int compareTo(Cut<Comparable<?>> o) {
+      return (o == this) ? 0 : 1;
+    }
+    private Object readResolve() {
+      return INSTANCE;
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  static <C extends Comparable> Cut<C> belowValue(C endpoint) {
+    return new BelowValue<C>(endpoint);
+  }
+
+  private static final class BelowValue<C extends Comparable> extends Cut<C> {
+    BelowValue(C endpoint) {
+      super(checkNotNull(endpoint));
+    }
+
+    @Override boolean isLessThan(C value) {
+      return Range.compareOrThrow(endpoint, value) <= 0;
+    }
+    @Override BoundType typeAsLowerBound() {
+      return BoundType.CLOSED;
+    }
+    @Override BoundType typeAsUpperBound() {
+      return BoundType.OPEN;
+    }
+    @Override Cut<C> withLowerBoundType(BoundType boundType, DiscreteDomain<C> domain) {
+      switch (boundType) {
+        case CLOSED:
+          return this;
+        case OPEN:
+          @Nullable C previous = domain.previous(endpoint);
+          return (previous == null) ? Cut.<C>belowAll() : new AboveValue<C>(previous);
+        default:
+          throw new AssertionError();
+      }
+    }
+    @Override Cut<C> withUpperBoundType(BoundType boundType, DiscreteDomain<C> domain) {
+      switch (boundType) {
+        case CLOSED:
+          @Nullable C previous = domain.previous(endpoint);
+          return (previous == null) ? Cut.<C>aboveAll() : new AboveValue<C>(previous);
+        case OPEN:
+          return this;
+        default:
+          throw new AssertionError();
+      }
+    }
+    @Override void describeAsLowerBound(StringBuilder sb) {
+      sb.append('[').append(endpoint);
+    }
+    @Override void describeAsUpperBound(StringBuilder sb) {
+      sb.append(endpoint).append(')');
+    }
+    @Override C leastValueAbove(DiscreteDomain<C> domain) {
+      return endpoint;
+    }
+    @Override C greatestValueBelow(DiscreteDomain<C> domain) {
+      return domain.previous(endpoint);
+    }
+    @Override public int hashCode() {
+      return endpoint.hashCode();
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  static <C extends Comparable> Cut<C> aboveValue(C endpoint) {
+    return new AboveValue<C>(endpoint);
+  }
+
+  private static final class AboveValue<C extends Comparable> extends Cut<C> {
+    AboveValue(C endpoint) {
+      super(checkNotNull(endpoint));
+    }
+
+    @Override boolean isLessThan(C value) {
+      return Range.compareOrThrow(endpoint, value) < 0;
+    }
+    @Override BoundType typeAsLowerBound() {
+      return BoundType.OPEN;
+    }
+    @Override BoundType typeAsUpperBound() {
+      return BoundType.CLOSED;
+    }
+    @Override Cut<C> withLowerBoundType(BoundType boundType, DiscreteDomain<C> domain) {
+      switch (boundType) {
+        case OPEN:
+          return this;
+        case CLOSED:
+          @Nullable C next = domain.next(endpoint);
+          return (next == null) ? Cut.<C>belowAll() : belowValue(next);
+        default:
+          throw new AssertionError();
+      }
+    }
+    @Override Cut<C> withUpperBoundType(BoundType boundType, DiscreteDomain<C> domain) {
+      switch (boundType) {
+        case OPEN:
+          @Nullable C next = domain.next(endpoint);
+          return (next == null) ? Cut.<C>aboveAll() : belowValue(next);
+        case CLOSED:
+          return this;
+        default:
+          throw new AssertionError();
+      }
+    }
+    @Override void describeAsLowerBound(StringBuilder sb) {
+      sb.append('(').append(endpoint);
+    }
+    @Override void describeAsUpperBound(StringBuilder sb) {
+      sb.append(endpoint).append(']');
+    }
+    @Override C leastValueAbove(DiscreteDomain<C> domain) {
+      return domain.next(endpoint);
+    }
+    @Override C greatestValueBelow(DiscreteDomain<C> domain) {
+      return endpoint;
+    }
+    @Override Cut<C> canonical(DiscreteDomain<C> domain) {
+      C next = leastValueAbove(domain);
+      return (next != null) ? belowValue(next) : Cut.<C>aboveAll();
+    }
+    @Override public int hashCode() {
+      return ~endpoint.hashCode();
+    }
+    private static final long serialVersionUID = 0;
+  }
+}
diff --git a/guava/src/com/google/common/collect/DescendingImmutableSortedMultiset.java b/guava/src/com/google/common/collect/DescendingImmutableSortedMultiset.java
new file mode 100644
index 0000000..f5630dd
--- /dev/null
+++ b/guava/src/com/google/common/collect/DescendingImmutableSortedMultiset.java
@@ -0,0 +1,96 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ * 
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import javax.annotation.Nullable;
+
+/**
+ * A descending wrapper around an {@code ImmutableSortedMultiset}
+ * 
+ * @author Louis Wasserman
+ */
+final class DescendingImmutableSortedMultiset<E> extends ImmutableSortedMultiset<E> {
+  private final transient ImmutableSortedMultiset<E> forward;
+
+  DescendingImmutableSortedMultiset(ImmutableSortedMultiset<E> forward) {
+    super(forward.reverseComparator());
+    this.forward = forward;
+  }
+
+  @Override
+  public int count(@Nullable Object element) {
+    return forward.count(element);
+  }
+
+  @Override
+  public Entry<E> firstEntry() {
+    return forward.lastEntry();
+  }
+
+  @Override
+  public Entry<E> lastEntry() {
+    return forward.firstEntry();
+  }
+
+  @Override
+  public int size() {
+    return forward.size();
+  }
+
+  @Override
+  ImmutableSortedSet<E> createElementSet() {
+    return forward.createDescendingElementSet();
+  }
+
+  @Override
+  ImmutableSortedSet<E> createDescendingElementSet() {
+    return forward.elementSet();
+  }
+
+  @Override
+  UnmodifiableIterator<Entry<E>> descendingEntryIterator() {
+    return forward.entryIterator();
+  }
+
+  @Override
+  public ImmutableSortedMultiset<E> descendingMultiset() {
+    return forward;
+  }
+
+  @Override
+  public ImmutableSortedMultiset<E> headMultiset(E upperBound, BoundType boundType) {
+    return forward.tailMultiset(upperBound, boundType).descendingMultiset();
+  }
+
+  @Override
+  public ImmutableSortedMultiset<E> tailMultiset(E lowerBound, BoundType boundType) {
+    return forward.headMultiset(lowerBound, boundType).descendingMultiset();
+  }
+
+  @Override
+  UnmodifiableIterator<Entry<E>> entryIterator() {
+    return forward.descendingEntryIterator();
+  }
+
+  @Override
+  int distinctElements() {
+    return forward.distinctElements();
+  }
+
+  @Override
+  boolean isPartialView() {
+    return forward.isPartialView();
+  }
+}
diff --git a/guava/src/com/google/common/collect/DiscreteDomain.java b/guava/src/com/google/common/collect/DiscreteDomain.java
new file mode 100644
index 0000000..893bbbb
--- /dev/null
+++ b/guava/src/com/google/common/collect/DiscreteDomain.java
@@ -0,0 +1,113 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.NoSuchElementException;
+
+/**
+ * A descriptor for a <i>discrete</i> {@code Comparable} domain such as all
+ * {@link Integer}s. A discrete domain is one that supports the three basic
+ * operations: {@link #next}, {@link #previous} and {@link #distance}, according
+ * to their specifications. The methods {@link #minValue} and {@link #maxValue}
+ * should also be overridden for bounded types.
+ *
+ * <p>A discrete domain always represents the <i>entire</i> set of values of its
+ * type; it cannot represent partial domains such as "prime integers" or
+ * "strings of length 5."
+ *
+ * @author Kevin Bourrillion
+ * @since 10.0
+ * @see DiscreteDomains
+ */
+@GwtCompatible
+@Beta
+public abstract class DiscreteDomain<C extends Comparable> {
+  /** Constructor for use by subclasses. */
+  protected DiscreteDomain() {}
+
+  /**
+   * Returns the unique least value of type {@code C} that is greater than
+   * {@code value}, or {@code null} if none exists. Inverse operation to {@link
+   * #previous}.
+   *
+   * @param value any value of type {@code C}
+   * @return the least value greater than {@code value}, or {@code null} if
+   *     {@code value} is {@code maxValue()}
+   */
+  public abstract C next(C value);
+
+  /**
+   * Returns the unique greatest value of type {@code C} that is less than
+   * {@code value}, or {@code null} if none exists. Inverse operation to {@link
+   * #next}.
+   *
+   * @param value any value of type {@code C}
+   * @return the greatest value less than {@code value}, or {@code null} if
+   *     {@code value} is {@code minValue()}
+   */
+  public abstract C previous(C value);
+
+  /**
+   * Returns a signed value indicating how many nested invocations of {@link
+   * #next} (if positive) or {@link #previous} (if negative) are needed to reach
+   * {@code end} starting from {@code start}. For example, if {@code end =
+   * next(next(next(start)))}, then {@code distance(start, end) == 3} and {@code
+   * distance(end, start) == -3}. As well, {@code distance(a, a)} is always
+   * zero.
+   *
+   * <p>Note that this function is necessarily well-defined for any discrete
+   * type.
+   *
+   * @return the distance as described above, or {@link Long#MIN_VALUE} or
+   *     {@link Long#MIN_VALUE} if the distance is too small or too large,
+   *     respectively.
+   */
+  public abstract long distance(C start, C end);
+
+  /**
+   * Returns the minimum value of type {@code C}, if it has one. The minimum
+   * value is the unique value for which {@link Comparable#compareTo(Object)}
+   * never returns a positive value for any input of type {@code C}.
+   *
+   * <p>The default implementation throws {@code NoSuchElementException}.
+   *
+   * @return the minimum value of type {@code C}; never null
+   * @throws NoSuchElementException if the type has no (practical) minimum
+   *     value; for example, {@link java.math.BigInteger}
+   */
+  public C minValue() {
+    throw new NoSuchElementException();
+  }
+
+  /**
+   * Returns the maximum value of type {@code C}, if it has one. The maximum
+   * value is the unique value for which {@link Comparable#compareTo(Object)}
+   * never returns a negative value for any input of type {@code C}.
+   *
+   * <p>The default implementation throws {@code NoSuchElementException}.
+   *
+   * @return the maximum value of type {@code C}; never null
+   * @throws NoSuchElementException if the type has no (practical) maximum
+   *     value; for example, {@link java.math.BigInteger}
+   */
+  public C maxValue() {
+    throw new NoSuchElementException();
+  }
+}
diff --git a/guava/src/com/google/common/collect/DiscreteDomains.java b/guava/src/com/google/common/collect/DiscreteDomains.java
new file mode 100644
index 0000000..8cb2ae7
--- /dev/null
+++ b/guava/src/com/google/common/collect/DiscreteDomains.java
@@ -0,0 +1,158 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+
+import java.io.Serializable;
+import java.math.BigInteger;
+
+/**
+ * Factories for common {@link DiscreteDomain} instances.
+ *
+ * @author Gregory Kick
+ * @since 10.0
+ */
+@GwtCompatible
+@Beta
+public final class DiscreteDomains {
+  private DiscreteDomains() {}
+
+  /**
+   * Returns the discrete domain for values of type {@code Integer}.
+   */
+  public static DiscreteDomain<Integer> integers() {
+    return IntegerDomain.INSTANCE;
+  }
+
+  private static final class IntegerDomain extends DiscreteDomain<Integer>
+      implements Serializable {
+    private static final IntegerDomain INSTANCE = new IntegerDomain();
+
+    @Override public Integer next(Integer value) {
+      int i = value;
+      return (i == Integer.MAX_VALUE) ? null : i + 1;
+    }
+
+    @Override public Integer previous(Integer value) {
+      int i = value;
+      return (i == Integer.MIN_VALUE) ? null : i - 1;
+    }
+
+    @Override public long distance(Integer start, Integer end) {
+      return (long) end - start;
+    }
+
+    @Override public Integer minValue() {
+      return Integer.MIN_VALUE;
+    }
+
+    @Override public Integer maxValue() {
+      return Integer.MAX_VALUE;
+    }
+
+    private Object readResolve() {
+      return INSTANCE;
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  /**
+   * Returns the discrete domain for values of type {@code Long}.
+   */
+  public static DiscreteDomain<Long> longs() {
+    return LongDomain.INSTANCE;
+  }
+
+  private static final class LongDomain extends DiscreteDomain<Long>
+      implements Serializable {
+    private static final LongDomain INSTANCE = new LongDomain();
+
+    @Override public Long next(Long value) {
+      long l = value;
+      return (l == Long.MAX_VALUE) ? null : l + 1;
+    }
+
+    @Override public Long previous(Long value) {
+      long l = value;
+      return (l == Long.MIN_VALUE) ? null : l - 1;
+    }
+
+    @Override public long distance(Long start, Long end) {
+      long result = end - start;
+      if (end > start && result < 0) { // overflow
+        return Long.MAX_VALUE;
+      }
+      if (end < start && result > 0) { // underflow
+        return Long.MIN_VALUE;
+      }
+      return result;
+    }
+
+    @Override public Long minValue() {
+      return Long.MIN_VALUE;
+    }
+
+    @Override public Long maxValue() {
+      return Long.MAX_VALUE;
+    }
+
+    private Object readResolve() {
+      return INSTANCE;
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  /**
+   * Returns the discrete domain for values of type {@code BigInteger}.
+   */
+  // TODO(kevinb): make sure it's tested, and make it public
+  static DiscreteDomain<BigInteger> bigIntegers() {
+    return BigIntegerDomain.INSTANCE;
+  }
+
+  private static final class BigIntegerDomain extends DiscreteDomain<BigInteger>
+      implements Serializable {
+    private static final BigIntegerDomain INSTANCE = new BigIntegerDomain();
+
+    private static final BigInteger MIN_LONG =
+        BigInteger.valueOf(Long.MIN_VALUE);
+    private static final BigInteger MAX_LONG =
+        BigInteger.valueOf(Long.MAX_VALUE);
+
+    @Override public BigInteger next(BigInteger value) {
+      return value.add(BigInteger.ONE);
+    }
+
+    @Override public BigInteger previous(BigInteger value) {
+      return value.subtract(BigInteger.ONE);
+    }
+
+    @Override public long distance(BigInteger start, BigInteger end) {
+      return start.subtract(end).max(MIN_LONG).min(MAX_LONG).longValue();
+    }
+
+    private Object readResolve() {
+      return INSTANCE;
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+}
diff --git a/guava/src/com/google/common/collect/EmptyContiguousSet.java b/guava/src/com/google/common/collect/EmptyContiguousSet.java
new file mode 100644
index 0000000..2bec7bd
--- /dev/null
+++ b/guava/src/com/google/common/collect/EmptyContiguousSet.java
@@ -0,0 +1,131 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+*/
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+
+import java.io.Serializable;
+import java.util.NoSuchElementException;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * An empty contiguous set.
+ *
+ * @author Gregory Kick
+ */
+@GwtCompatible(emulated = true)
+@SuppressWarnings("unchecked") // allow ungenerified Comparable types
+final class EmptyContiguousSet<C extends Comparable> extends ContiguousSet<C> {
+  EmptyContiguousSet(DiscreteDomain<C> domain) {
+    super(domain);
+  }
+
+  @Override public C first() {
+    throw new NoSuchElementException();
+  }
+
+  @Override public C last() {
+    throw new NoSuchElementException();
+  }
+
+  @Override public int size() {
+    return 0;
+  }
+
+  @Override public ContiguousSet<C> intersection(ContiguousSet<C> other) {
+    return this;
+  }
+
+  @Override public Range<C> range() {
+    throw new NoSuchElementException();
+  }
+
+  @Override public Range<C> range(BoundType lowerBoundType, BoundType upperBoundType) {
+    throw new NoSuchElementException();
+  }
+
+  @Override ContiguousSet<C> headSetImpl(C toElement, boolean inclusive) {
+    return this;
+  }
+
+  @Override ContiguousSet<C> subSetImpl(
+      C fromElement, boolean fromInclusive, C toElement, boolean toInclusive) {
+    return this;
+  }
+
+  @Override ContiguousSet<C> tailSetImpl(C fromElement, boolean fromInclusive) {
+    return this;
+  }
+
+  //Abstract method doesn't exist in GWT emulation
+  /* @Override */ int indexOf(Object target) {
+    return -1;
+  }
+
+  @Override public UnmodifiableIterator<C> iterator() {
+    return Iterators.emptyIterator();
+  }
+
+  @Override boolean isPartialView() {
+    return false;
+  }
+
+  @Override public boolean isEmpty() {
+    return true;
+  }
+
+  @Override public ImmutableList<C> asList() {
+    return ImmutableList.of();
+  }
+
+  @Override public String toString() {
+    return "[]";
+  }
+
+  @Override public boolean equals(@Nullable Object object) {
+    if (object instanceof Set) {
+      Set<?> that = (Set<?>) object;
+      return that.isEmpty();
+    }
+    return false;
+  }
+
+  @Override public int hashCode() {
+    return 0;
+  }
+
+  @GwtIncompatible("serialization")
+  private static final class SerializedForm<C extends Comparable> implements Serializable {
+    private final DiscreteDomain<C> domain;
+
+    private SerializedForm(DiscreteDomain<C> domain) {
+      this.domain = domain;
+    }
+
+    private Object readResolve() {
+      return new EmptyContiguousSet<C>(domain);
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  @GwtIncompatible("serialization")
+  @Override
+  Object writeReplace() {
+    return new SerializedForm<C>(domain);
+  }
+}
diff --git a/guava/src/com/google/common/collect/EmptyImmutableList.java b/guava/src/com/google/common/collect/EmptyImmutableList.java
new file mode 100644
index 0000000..ec685dd
--- /dev/null
+++ b/guava/src/com/google/common/collect/EmptyImmutableList.java
@@ -0,0 +1,161 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkElementIndex;
+import static com.google.common.base.Preconditions.checkPositionIndex;
+import static com.google.common.base.Preconditions.checkPositionIndexes;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.NoSuchElementException;
+
+import javax.annotation.Nullable;
+
+/**
+ * An empty immutable list.
+ * 
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible(serializable = true, emulated = true)
+final class EmptyImmutableList extends ImmutableList<Object> {
+  static final EmptyImmutableList INSTANCE = new EmptyImmutableList();
+  static final UnmodifiableListIterator<Object> ITERATOR =
+      new UnmodifiableListIterator<Object>() {
+
+        @Override public boolean hasNext() {
+          return false;
+        }
+
+        @Override public boolean hasPrevious() {
+          return false;
+        }
+
+        @Override public Object next() {
+          throw new NoSuchElementException();
+        }
+
+        @Override public int nextIndex() {
+          return 0;
+        }
+
+        @Override public Object previous() {
+          throw new NoSuchElementException();
+        }
+
+        @Override public int previousIndex() {
+          return -1;
+        }
+      };
+
+  private EmptyImmutableList() {}
+
+  @Override
+  public int size() {
+    return 0;
+  }
+
+  @Override public boolean isEmpty() {
+    return true;
+  }
+
+  @Override boolean isPartialView() {
+    return false;
+  }
+
+  @Override public boolean contains(Object target) {
+    return false;
+  }
+
+  @Override public UnmodifiableIterator<Object> iterator() {
+    return Iterators.emptyIterator();
+  }
+
+  private static final Object[] EMPTY_ARRAY = new Object[0];
+
+  @Override public Object[] toArray() {
+    return EMPTY_ARRAY;
+  }
+
+  @Override public <T> T[] toArray(T[] a) {
+    if (a.length > 0) {
+      a[0] = null;
+    }
+    return a;
+  }
+
+  @Override
+  public Object get(int index) {
+    // guaranteed to fail, but at least we get a consistent message
+    checkElementIndex(index, 0);
+    throw new AssertionError("unreachable");
+  }
+
+  @Override public int indexOf(@Nullable Object target) {
+    return -1;
+  }
+
+  @Override public int lastIndexOf(@Nullable Object target) {
+    return -1;
+  }
+
+  @Override public ImmutableList<Object> subList(int fromIndex, int toIndex) {
+    checkPositionIndexes(fromIndex, toIndex, 0);
+    return this;
+  }
+
+  @Override public ImmutableList<Object> reverse() {
+    return this;
+  }
+
+  @Override public UnmodifiableListIterator<Object> listIterator(){
+    return ITERATOR;
+  }
+
+  @Override public UnmodifiableListIterator<Object> listIterator(int start) {
+    checkPositionIndex(start, 0);
+    return ITERATOR;
+  }
+
+  @Override public boolean containsAll(Collection<?> targets) {
+    return targets.isEmpty();
+  }
+
+  @Override public boolean equals(@Nullable Object object) {
+    if (object instanceof List) {
+      List<?> that = (List<?>) object;
+      return that.isEmpty();
+    }
+    return false;
+  }
+
+  @Override public int hashCode() {
+    return 1;
+  }
+
+  @Override public String toString() {
+    return "[]";
+  }
+
+  Object readResolve() {
+    return INSTANCE; // preserve singleton property
+  }
+
+  private static final long serialVersionUID = 0;
+}
diff --git a/guava/src/com/google/common/collect/EmptyImmutableListMultimap.java b/guava/src/com/google/common/collect/EmptyImmutableListMultimap.java
new file mode 100644
index 0000000..2a6836d
--- /dev/null
+++ b/guava/src/com/google/common/collect/EmptyImmutableListMultimap.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+/**
+ * Implementation of {@link ImmutableListMultimap} with no entries.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible(serializable = true)
+class EmptyImmutableListMultimap extends ImmutableListMultimap<Object, Object> {
+  static final EmptyImmutableListMultimap INSTANCE
+      = new EmptyImmutableListMultimap();
+
+  private EmptyImmutableListMultimap() {
+    super(ImmutableMap.<Object, ImmutableList<Object>>of(), 0);
+  }
+
+  private Object readResolve() {
+    return INSTANCE; // preserve singleton property
+  }
+
+  private static final long serialVersionUID = 0;
+}
diff --git a/guava/src/com/google/common/collect/EmptyImmutableMap.java b/guava/src/com/google/common/collect/EmptyImmutableMap.java
new file mode 100644
index 0000000..8d58021
--- /dev/null
+++ b/guava/src/com/google/common/collect/EmptyImmutableMap.java
@@ -0,0 +1,95 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Map;
+
+import javax.annotation.Nullable;
+
+/**
+ * An empty immutable map.
+ * 
+ * @author Jesse Wilson
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible(serializable = true, emulated = true)
+final class EmptyImmutableMap extends ImmutableMap<Object, Object> {
+  static final EmptyImmutableMap INSTANCE = new EmptyImmutableMap();
+
+  private EmptyImmutableMap() {}
+
+  @Override public Object get(@Nullable Object key) {
+    return null;
+  }
+
+  @Override
+  public int size() {
+    return 0;
+  }
+
+  @Override public boolean isEmpty() {
+    return true;
+  }
+
+  @Override public boolean containsKey(@Nullable Object key) {
+    return false;
+  }
+
+  @Override public boolean containsValue(@Nullable Object value) {
+    return false;
+  }
+
+  @Override public ImmutableSet<Entry<Object, Object>> entrySet() {
+    return ImmutableSet.of();
+  }
+
+  @Override public ImmutableSet<Object> keySet() {
+    return ImmutableSet.of();
+  }
+
+  @Override public ImmutableCollection<Object> values() {
+    return ImmutableCollection.EMPTY_IMMUTABLE_COLLECTION;
+  }
+
+  @Override public boolean equals(@Nullable Object object) {
+    if (object instanceof Map) {
+      Map<?, ?> that = (Map<?, ?>) object;
+      return that.isEmpty();
+    }
+    return false;
+  }
+
+  @Override boolean isPartialView() {
+    return false;
+  }
+
+  @Override public int hashCode() {
+    return 0;
+  }
+
+  @Override public String toString() {
+    return "{}";
+  }
+
+  Object readResolve() {
+    return INSTANCE; // preserve singleton property
+  }
+
+  private static final long serialVersionUID = 0;
+}
diff --git a/guava/src/com/google/common/collect/EmptyImmutableMultiset.java b/guava/src/com/google/common/collect/EmptyImmutableMultiset.java
new file mode 100644
index 0000000..2a72a2b
--- /dev/null
+++ b/guava/src/com/google/common/collect/EmptyImmutableMultiset.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ * 
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import javax.annotation.Nullable;
+
+/**
+ * An empty immutable multiset.
+ * 
+ * @author Jared Levy
+ * @author Louis Wasserman
+ */
+@GwtCompatible(serializable = true)
+final class EmptyImmutableMultiset extends ImmutableMultiset<Object> {
+  static final EmptyImmutableMultiset INSTANCE = new EmptyImmutableMultiset();
+
+  @Override
+  public int count(@Nullable Object element) {
+    return 0;
+  }
+
+  @Override
+  public ImmutableSet<Object> elementSet() {
+    return ImmutableSet.of();
+  }
+
+  @Override
+  public int size() {
+    return 0;
+  }
+
+  @Override
+  UnmodifiableIterator<Entry<Object>> entryIterator() {
+    return Iterators.emptyIterator();
+  }
+
+  @Override
+  int distinctElements() {
+    return 0;
+  }
+
+  @Override
+  boolean isPartialView() {
+    return false;
+  }
+
+  @Override
+  ImmutableSet<Entry<Object>> createEntrySet() {
+    return ImmutableSet.of();
+  }
+
+  private static final long serialVersionUID = 0;
+}
diff --git a/guava/src/com/google/common/collect/EmptyImmutableSet.java b/guava/src/com/google/common/collect/EmptyImmutableSet.java
new file mode 100644
index 0000000..8722bdf
--- /dev/null
+++ b/guava/src/com/google/common/collect/EmptyImmutableSet.java
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Collection;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * An empty immutable set.
+ * 
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible(serializable = true, emulated = true)
+final class EmptyImmutableSet extends ImmutableSet<Object> {
+  static final EmptyImmutableSet INSTANCE = new EmptyImmutableSet();
+
+  private EmptyImmutableSet() {}
+
+  @Override
+  public int size() {
+    return 0;
+  }
+
+  @Override public boolean isEmpty() {
+    return true;
+  }
+
+  @Override public boolean contains(Object target) {
+    return false;
+  }
+
+  @Override public UnmodifiableIterator<Object> iterator() {
+    return Iterators.emptyIterator();
+  }
+
+  @Override boolean isPartialView() {
+    return false;
+  }
+
+  private static final Object[] EMPTY_ARRAY = new Object[0];
+
+  @Override public Object[] toArray() {
+    return EMPTY_ARRAY;
+  }
+
+  @Override public <T> T[] toArray(T[] a) {
+    if (a.length > 0) {
+      a[0] = null;
+    }
+    return a;
+  }
+
+  @Override public boolean containsAll(Collection<?> targets) {
+    return targets.isEmpty();
+  }
+
+  @Override public boolean equals(@Nullable Object object) {
+    if (object instanceof Set) {
+      Set<?> that = (Set<?>) object;
+      return that.isEmpty();
+    }
+    return false;
+  }
+
+  @Override public final int hashCode() {
+    return 0;
+  }
+
+  @Override boolean isHashCodeFast() {
+    return true;
+  }
+
+  @Override public String toString() {
+    return "[]";
+  }
+
+  Object readResolve() {
+    return INSTANCE; // preserve singleton property
+  }
+
+  private static final long serialVersionUID = 0;
+}
diff --git a/guava/src/com/google/common/collect/EmptyImmutableSetMultimap.java b/guava/src/com/google/common/collect/EmptyImmutableSetMultimap.java
new file mode 100644
index 0000000..810de3c
--- /dev/null
+++ b/guava/src/com/google/common/collect/EmptyImmutableSetMultimap.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+/**
+ * Implementation of {@link ImmutableListMultimap} with no entries.
+ *
+ * @author Mike Ward
+ */
+@GwtCompatible(serializable = true)
+class EmptyImmutableSetMultimap extends ImmutableSetMultimap<Object, Object> {
+  static final EmptyImmutableSetMultimap INSTANCE
+      = new EmptyImmutableSetMultimap();
+
+  private EmptyImmutableSetMultimap() {
+    super(ImmutableMap.<Object, ImmutableSet<Object>>of(), 0, null);
+  }
+
+  private Object readResolve() {
+    return INSTANCE; // preserve singleton property
+  }
+
+  private static final long serialVersionUID = 0;
+}
diff --git a/guava/src/com/google/common/collect/EmptyImmutableSortedMultiset.java b/guava/src/com/google/common/collect/EmptyImmutableSortedMultiset.java
new file mode 100644
index 0000000..623050c
--- /dev/null
+++ b/guava/src/com/google/common/collect/EmptyImmutableSortedMultiset.java
@@ -0,0 +1,96 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ * 
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.util.Comparator;
+
+import javax.annotation.Nullable;
+
+/**
+ * An empty immutable sorted multiset.
+ *
+ * @author Louis Wasserman
+ */
+final class EmptyImmutableSortedMultiset<E> extends ImmutableSortedMultiset<E> {
+  EmptyImmutableSortedMultiset(Comparator<? super E> comparator) {
+    super(comparator);
+  }
+
+  @Override
+  public Entry<E> firstEntry() {
+    return null;
+  }
+
+  @Override
+  public Entry<E> lastEntry() {
+    return null;
+  }
+
+  @Override
+  public int count(@Nullable Object element) {
+    return 0;
+  }
+
+  @Override
+  public int size() {
+    return 0;
+  }
+
+  @Override
+  ImmutableSortedSet<E> createElementSet() {
+    return ImmutableSortedSet.emptySet(comparator());
+  }
+
+  @Override
+  ImmutableSortedSet<E> createDescendingElementSet() {
+    return ImmutableSortedSet.emptySet(reverseComparator());
+  }
+
+  @Override
+  UnmodifiableIterator<Entry<E>> descendingEntryIterator() {
+    return Iterators.emptyIterator();
+  }
+
+  @Override
+  UnmodifiableIterator<Entry<E>> entryIterator() {
+    return Iterators.emptyIterator();
+  }
+
+  @Override
+  public ImmutableSortedMultiset<E> headMultiset(E upperBound, BoundType boundType) {
+    checkNotNull(upperBound);
+    checkNotNull(boundType);
+    return this;
+  }
+
+  @Override
+  public ImmutableSortedMultiset<E> tailMultiset(E lowerBound, BoundType boundType) {
+    checkNotNull(lowerBound);
+    checkNotNull(boundType);
+    return this;
+  }
+
+  @Override
+  int distinctElements() {
+    return 0;
+  }
+
+  @Override
+  boolean isPartialView() {
+    return false;
+  }
+}
diff --git a/guava/src/com/google/common/collect/EmptyImmutableSortedSet.java b/guava/src/com/google/common/collect/EmptyImmutableSortedSet.java
new file mode 100644
index 0000000..e406163
--- /dev/null
+++ b/guava/src/com/google/common/collect/EmptyImmutableSortedSet.java
@@ -0,0 +1,123 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.NoSuchElementException;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * An empty immutable sorted set.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible(serializable = true, emulated = true)
+@SuppressWarnings("serial") // uses writeReplace(), not default serialization
+class EmptyImmutableSortedSet<E> extends ImmutableSortedSet<E> {
+  EmptyImmutableSortedSet(Comparator<? super E> comparator) {
+    super(comparator);
+  }
+
+  @Override
+  public int size() {
+    return 0;
+  }
+
+  @Override public boolean isEmpty() {
+    return true;
+  }
+
+  @Override public boolean contains(Object target) {
+    return false;
+  }
+
+  @Override public UnmodifiableIterator<E> iterator() {
+    return Iterators.emptyIterator();
+  }
+
+  @Override boolean isPartialView() {
+    return false;
+  }
+
+  private static final Object[] EMPTY_ARRAY = new Object[0];
+
+  @Override public Object[] toArray() {
+    return EMPTY_ARRAY;
+  }
+
+  @Override public <T> T[] toArray(T[] a) {
+    if (a.length > 0) {
+      a[0] = null;
+    }
+    return a;
+  }
+
+  @Override public boolean containsAll(Collection<?> targets) {
+    return targets.isEmpty();
+  }
+
+  @Override public boolean equals(@Nullable Object object) {
+    if (object instanceof Set) {
+      Set<?> that = (Set<?>) object;
+      return that.isEmpty();
+    }
+    return false;
+  }
+
+  @Override public int hashCode() {
+    return 0;
+  }
+
+  @Override public String toString() {
+    return "[]";
+  }
+
+  @Override
+  public E first() {
+    throw new NoSuchElementException();
+  }
+
+  @Override
+  public E last() {
+    throw new NoSuchElementException();
+  }
+
+  @Override
+  ImmutableSortedSet<E> headSetImpl(E toElement, boolean inclusive) {
+    return this;
+  }
+
+  @Override
+  ImmutableSortedSet<E> subSetImpl(
+      E fromElement, boolean fromInclusive, E toElement, boolean toInclusive) {
+    return this;
+  }
+
+  @Override
+  ImmutableSortedSet<E> tailSetImpl(E fromElement, boolean inclusive) {
+    return this;
+  }
+
+  @Override int indexOf(@Nullable Object target) {
+    return -1;
+  }
+}
diff --git a/guava/src/com/google/common/collect/EmptyImmutableTable.java b/guava/src/com/google/common/collect/EmptyImmutableTable.java
new file mode 100644
index 0000000..61949ca
--- /dev/null
+++ b/guava/src/com/google/common/collect/EmptyImmutableTable.java
@@ -0,0 +1,128 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Map;
+
+import javax.annotation.Nullable;
+import javax.annotation.concurrent.Immutable;
+
+/**
+ * An empty implementation of {@link ImmutableTable}.
+ *
+ * @author gak@google.com (Gregory Kick)
+ */
+@GwtCompatible
+@Immutable
+final class EmptyImmutableTable extends ImmutableTable<Object, Object, Object> {
+  static final EmptyImmutableTable INSTANCE = new EmptyImmutableTable();
+
+  private EmptyImmutableTable() {}
+
+  @Override public int size() {
+    return 0;
+  }
+
+  @Override public Object get(@Nullable Object rowKey,
+      @Nullable Object columnKey) {
+    return null;
+  }
+
+  @Override public boolean isEmpty() {
+    return true;
+  }
+
+  @Override public boolean equals(@Nullable Object obj) {
+    if (obj == this) {
+      return true;
+    } else if (obj instanceof Table<?, ?, ?>) {
+      Table<?, ?, ?> that = (Table<?, ?, ?>) obj;
+      return that.isEmpty();
+    } else {
+      return false;
+    }
+  }
+
+  @Override public int hashCode() {
+    return 0;
+  }
+
+  @Override public ImmutableSet<Cell<Object, Object, Object>> cellSet() {
+    return ImmutableSet.of();
+  }
+
+  @Override public ImmutableMap<Object, Object> column(Object columnKey) {
+    checkNotNull(columnKey);
+    return ImmutableMap.of();
+  }
+
+  @Override public ImmutableSet<Object> columnKeySet() {
+    return ImmutableSet.of();
+  }
+
+  @Override public ImmutableMap<Object, Map<Object, Object>> columnMap() {
+    return ImmutableMap.of();
+  }
+
+  @Override public boolean contains(@Nullable Object rowKey,
+      @Nullable Object columnKey) {
+    return false;
+  }
+
+  @Override public boolean containsColumn(@Nullable Object columnKey) {
+    return false;
+  }
+
+  @Override public boolean containsRow(@Nullable Object rowKey) {
+    return false;
+  }
+
+  @Override public boolean containsValue(@Nullable Object value) {
+    return false;
+  }
+
+  @Override public ImmutableMap<Object, Object> row(Object rowKey) {
+    checkNotNull(rowKey);
+    return ImmutableMap.of();
+  }
+
+  @Override public ImmutableSet<Object> rowKeySet() {
+    return ImmutableSet.of();
+  }
+
+  @Override public ImmutableMap<Object, Map<Object, Object>> rowMap() {
+    return ImmutableMap.of();
+  }
+
+  @Override public String toString() {
+    return "{}";
+  }
+
+  @Override public ImmutableCollection<Object> values() {
+    return ImmutableSet.of();
+  }
+
+  Object readResolve() {
+    return INSTANCE; // preserve singleton property
+  }
+
+  private static final long serialVersionUID = 0;
+}
diff --git a/guava/src/com/google/common/collect/EnumBiMap.java b/guava/src/com/google/common/collect/EnumBiMap.java
new file mode 100644
index 0000000..9a94ddd
--- /dev/null
+++ b/guava/src/com/google/common/collect/EnumBiMap.java
@@ -0,0 +1,136 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkArgument;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.EnumMap;
+import java.util.Map;
+
+/**
+ * A {@code BiMap} backed by two {@code EnumMap} instances. Null keys and values
+ * are not permitted. An {@code EnumBiMap} and its inverse are both
+ * serializable.
+ *
+ * @author Mike Bostock
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible(emulated = true)
+public final class EnumBiMap<K extends Enum<K>, V extends Enum<V>>
+    extends AbstractBiMap<K, V> {
+  private transient Class<K> keyType;
+  private transient Class<V> valueType;
+
+  /**
+   * Returns a new, empty {@code EnumBiMap} using the specified key and value
+   * types.
+   *
+   * @param keyType the key type
+   * @param valueType the value type
+   */
+  public static <K extends Enum<K>, V extends Enum<V>> EnumBiMap<K, V>
+      create(Class<K> keyType, Class<V> valueType) {
+    return new EnumBiMap<K, V>(keyType, valueType);
+  }
+
+  /**
+   * Returns a new bimap with the same mappings as the specified map. If the
+   * specified map is an {@code EnumBiMap}, the new bimap has the same types as
+   * the provided map. Otherwise, the specified map must contain at least one
+   * mapping, in order to determine the key and value types.
+   *
+   * @param map the map whose mappings are to be placed in this map
+   * @throws IllegalArgumentException if map is not an {@code EnumBiMap}
+   *     instance and contains no mappings
+   */
+  public static <K extends Enum<K>, V extends Enum<V>> EnumBiMap<K, V>
+      create(Map<K, V> map) {
+    EnumBiMap<K, V> bimap = create(inferKeyType(map), inferValueType(map));
+    bimap.putAll(map);
+    return bimap;
+  }
+
+  private EnumBiMap(Class<K> keyType, Class<V> valueType) {
+    super(WellBehavedMap.wrap(new EnumMap<K, V>(keyType)),
+        WellBehavedMap.wrap(new EnumMap<V, K>(valueType)));
+    this.keyType = keyType;
+    this.valueType = valueType;
+  }
+
+  static <K extends Enum<K>> Class<K> inferKeyType(Map<K, ?> map) {
+    if (map instanceof EnumBiMap) {
+      return ((EnumBiMap<K, ?>) map).keyType();
+    }
+    if (map instanceof EnumHashBiMap) {
+      return ((EnumHashBiMap<K, ?>) map).keyType();
+    }
+    checkArgument(!map.isEmpty());
+    return map.keySet().iterator().next().getDeclaringClass();
+  }
+
+  private static <V extends Enum<V>> Class<V> inferValueType(Map<?, V> map) {
+    if (map instanceof EnumBiMap) {
+      return ((EnumBiMap<?, V>) map).valueType;
+    }
+    checkArgument(!map.isEmpty());
+    return map.values().iterator().next().getDeclaringClass();
+  }
+
+  /** Returns the associated key type. */
+  public Class<K> keyType() {
+    return keyType;
+  }
+
+  /** Returns the associated value type. */
+  public Class<V> valueType() {
+    return valueType;
+  }
+
+  /**
+   * @serialData the key class, value class, number of entries, first key, first
+   *     value, second key, second value, and so on.
+   */
+  @GwtIncompatible("java.io.ObjectOutputStream")
+  private void writeObject(ObjectOutputStream stream) throws IOException {
+    stream.defaultWriteObject();
+    stream.writeObject(keyType);
+    stream.writeObject(valueType);
+    Serialization.writeMap(this, stream);
+  }
+
+  @SuppressWarnings("unchecked") // reading fields populated by writeObject
+  @GwtIncompatible("java.io.ObjectInputStream")
+  private void readObject(ObjectInputStream stream)
+      throws IOException, ClassNotFoundException {
+    stream.defaultReadObject();
+    keyType = (Class<K>) stream.readObject();
+    valueType = (Class<V>) stream.readObject();
+    setDelegates(
+        WellBehavedMap.wrap(new EnumMap<K, V>(keyType)),
+        WellBehavedMap.wrap(new EnumMap<V, K>(valueType)));
+    Serialization.populateMap(this, stream);
+  }
+
+  @GwtIncompatible("not needed in emulated source.")
+  private static final long serialVersionUID = 0;
+}
diff --git a/guava/src/com/google/common/collect/EnumHashBiMap.java b/guava/src/com/google/common/collect/EnumHashBiMap.java
new file mode 100644
index 0000000..8f32515
--- /dev/null
+++ b/guava/src/com/google/common/collect/EnumHashBiMap.java
@@ -0,0 +1,119 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.EnumMap;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.annotation.Nullable;
+
+/**
+ * A {@code BiMap} backed by an {@code EnumMap} instance for keys-to-values, and
+ * a {@code HashMap} instance for values-to-keys. Null keys are not permitted,
+ * but null values are. An {@code EnumHashBiMap} and its inverse are both
+ * serializable.
+ *
+ * @author Mike Bostock
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible(emulated = true)
+public final class EnumHashBiMap<K extends Enum<K>, V>
+    extends AbstractBiMap<K, V> {
+  private transient Class<K> keyType;
+
+  /**
+   * Returns a new, empty {@code EnumHashBiMap} using the specified key type.
+   *
+   * @param keyType the key type
+   */
+  public static <K extends Enum<K>, V> EnumHashBiMap<K, V>
+      create(Class<K> keyType) {
+    return new EnumHashBiMap<K, V>(keyType);
+  }
+
+  /**
+   * Constructs a new bimap with the same mappings as the specified map. If the
+   * specified map is an {@code EnumHashBiMap} or an {@link EnumBiMap}, the new
+   * bimap has the same key type as the input bimap. Otherwise, the specified
+   * map must contain at least one mapping, in order to determine the key type.
+   *
+   * @param map the map whose mappings are to be placed in this map
+   * @throws IllegalArgumentException if map is not an {@code EnumBiMap} or an
+   *     {@code EnumHashBiMap} instance and contains no mappings
+   */
+  public static <K extends Enum<K>, V> EnumHashBiMap<K, V>
+      create(Map<K, ? extends V> map) {
+    EnumHashBiMap<K, V> bimap = create(EnumBiMap.inferKeyType(map));
+    bimap.putAll(map);
+    return bimap;
+  }
+
+  private EnumHashBiMap(Class<K> keyType) {
+    super(WellBehavedMap.wrap(
+        new EnumMap<K, V>(keyType)),
+        Maps.<V, K>newHashMapWithExpectedSize(
+            keyType.getEnumConstants().length));
+    this.keyType = keyType;
+  }
+
+  // Overriding these two methods to show that values may be null (but not keys)
+
+  @Override public V put(K key, @Nullable V value) {
+    return super.put(key, value);
+  }
+
+  @Override public V forcePut(K key, @Nullable V value) {
+    return super.forcePut(key, value);
+  }
+
+  /** Returns the associated key type. */
+  public Class<K> keyType() {
+    return keyType;
+  }
+
+  /**
+   * @serialData the key class, number of entries, first key, first value,
+   *     second key, second value, and so on.
+   */
+  @GwtIncompatible("java.io.ObjectOutputStream")
+  private void writeObject(ObjectOutputStream stream) throws IOException {
+    stream.defaultWriteObject();
+    stream.writeObject(keyType);
+    Serialization.writeMap(this, stream);
+  }
+
+  @SuppressWarnings("unchecked") // reading field populated by writeObject
+  @GwtIncompatible("java.io.ObjectInputStream")
+  private void readObject(ObjectInputStream stream)
+      throws IOException, ClassNotFoundException {
+    stream.defaultReadObject();
+    keyType = (Class<K>) stream.readObject();
+    setDelegates(WellBehavedMap.wrap(new EnumMap<K, V>(keyType)),
+        new HashMap<V, K>(keyType.getEnumConstants().length * 3 / 2));
+    Serialization.populateMap(this, stream);
+  }
+
+  @GwtIncompatible("only needed in emulated source.")
+  private static final long serialVersionUID = 0;
+}
diff --git a/guava/src/com/google/common/collect/EnumMultiset.java b/guava/src/com/google/common/collect/EnumMultiset.java
new file mode 100644
index 0000000..560bf7c
--- /dev/null
+++ b/guava/src/com/google/common/collect/EnumMultiset.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkArgument;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.EnumMap;
+import java.util.Iterator;
+
+/**
+ * Multiset implementation backed by an {@link EnumMap}.
+ *
+ * @author Jared Levy
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible(emulated = true)
+public final class EnumMultiset<E extends Enum<E>> extends AbstractMapBasedMultiset<E> {
+  /** Creates an empty {@code EnumMultiset}. */
+  public static <E extends Enum<E>> EnumMultiset<E> create(Class<E> type) {
+    return new EnumMultiset<E>(type);
+  }
+
+  /**
+   * Creates a new {@code EnumMultiset} containing the specified elements.
+   *
+   * <p>This implementation is highly efficient when {@code elements} is itself a {@link
+   * Multiset}.
+   *
+   * @param elements the elements that the multiset should contain
+   * @throws IllegalArgumentException if {@code elements} is empty
+   */
+  public static <E extends Enum<E>> EnumMultiset<E> create(Iterable<E> elements) {
+    Iterator<E> iterator = elements.iterator();
+    checkArgument(iterator.hasNext(), "EnumMultiset constructor passed empty Iterable");
+    EnumMultiset<E> multiset = new EnumMultiset<E>(iterator.next().getDeclaringClass());
+    Iterables.addAll(multiset, elements);
+    return multiset;
+  }
+
+  private transient Class<E> type;
+
+  /** Creates an empty {@code EnumMultiset}. */
+  private EnumMultiset(Class<E> type) {
+    super(WellBehavedMap.wrap(new EnumMap<E, Count>(type)));
+    this.type = type;
+  }
+
+  @GwtIncompatible("java.io.ObjectOutputStream")
+  private void writeObject(ObjectOutputStream stream) throws IOException {
+    stream.defaultWriteObject();
+    stream.writeObject(type);
+    Serialization.writeMultiset(this, stream);
+  }
+
+  /**
+   * @serialData the {@code Class<E>} for the enum type, the number of distinct
+   *             elements, the first element, its count, the second element, its
+   *             count, and so on
+   */
+  @GwtIncompatible("java.io.ObjectInputStream")
+  private void readObject(ObjectInputStream stream) throws IOException, ClassNotFoundException {
+    stream.defaultReadObject();
+    @SuppressWarnings("unchecked") // reading data stored by writeObject
+    Class<E> localType = (Class<E>) stream.readObject();
+    type = localType;
+    setBackingMap(WellBehavedMap.wrap(new EnumMap<E, Count>(type)));
+    Serialization.populateMultiset(this, stream);
+  }
+
+  @GwtIncompatible("Not needed in emulated source")
+  private static final long serialVersionUID = 0;
+}
diff --git a/guava/src/com/google/common/collect/ExplicitOrdering.java b/guava/src/com/google/common/collect/ExplicitOrdering.java
new file mode 100644
index 0000000..0a2e181
--- /dev/null
+++ b/guava/src/com/google/common/collect/ExplicitOrdering.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.io.Serializable;
+import java.util.List;
+
+import javax.annotation.Nullable;
+
+/** An ordering that compares objects according to a given order. */
+@GwtCompatible(serializable = true)
+final class ExplicitOrdering<T> extends Ordering<T> implements Serializable {
+  final ImmutableMap<T, Integer> rankMap;
+
+  ExplicitOrdering(List<T> valuesInOrder) {
+    this(buildRankMap(valuesInOrder));
+  }
+
+  ExplicitOrdering(ImmutableMap<T, Integer> rankMap) {
+    this.rankMap = rankMap;
+  }
+
+  @Override public int compare(T left, T right) {
+    return rank(left) - rank(right); // safe because both are nonnegative
+  }
+
+  private int rank(T value) {
+    Integer rank = rankMap.get(value);
+    if (rank == null) {
+      throw new IncomparableValueException(value);
+    }
+    return rank;
+  }
+
+  private static <T> ImmutableMap<T, Integer> buildRankMap(
+      List<T> valuesInOrder) {
+    ImmutableMap.Builder<T, Integer> builder = ImmutableMap.builder();
+    int rank = 0;
+    for (T value : valuesInOrder) {
+      builder.put(value, rank++);
+    }
+    return builder.build();
+  }
+
+  @Override public boolean equals(@Nullable Object object) {
+    if (object instanceof ExplicitOrdering) {
+      ExplicitOrdering<?> that = (ExplicitOrdering<?>) object;
+      return this.rankMap.equals(that.rankMap);
+    }
+    return false;
+  }
+
+  @Override public int hashCode() {
+    return rankMap.hashCode();
+  }
+
+  @Override public String toString() {
+    return "Ordering.explicit(" + rankMap.keySet() + ")";
+  }
+
+  private static final long serialVersionUID = 0;
+}
diff --git a/guava/src/com/google/common/collect/ForwardingCollection.java b/guava/src/com/google/common/collect/ForwardingCollection.java
new file mode 100644
index 0000000..a6a46f0
--- /dev/null
+++ b/guava/src/com/google/common/collect/ForwardingCollection.java
@@ -0,0 +1,265 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Objects;
+
+import java.util.Collection;
+import java.util.Iterator;
+
+import javax.annotation.Nullable;
+
+/**
+ * A collection which forwards all its method calls to another collection.
+ * Subclasses should override one or more methods to modify the behavior of the
+ * backing collection as desired per the <a
+ * href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
+ *
+ * <p><b>Warning:</b> The methods of {@code ForwardingCollection} forward
+ * <b>indiscriminately</b> to the methods of the delegate. For example,
+ * overriding {@link #add} alone <b>will not</b> change the behavior of {@link
+ * #addAll}, which can lead to unexpected behavior. In this case, you should
+ * override {@code addAll} as well, either providing your own implementation, or
+ * delegating to the provided {@code standardAddAll} method.
+ *
+ * <p>The {@code standard} methods are not guaranteed to be thread-safe, even
+ * when all of the methods that they depend on are thread-safe.
+ *
+ * @author Kevin Bourrillion
+ * @author Louis Wasserman
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible
+public abstract class ForwardingCollection<E> extends ForwardingObject
+    implements Collection<E> {
+  // TODO(user): identify places where thread safety is actually lost
+
+  /** Constructor for use by subclasses. */
+  protected ForwardingCollection() {}
+
+  @Override protected abstract Collection<E> delegate();
+
+  @Override
+  public Iterator<E> iterator() {
+    return delegate().iterator();
+  }
+
+  @Override
+  public int size() {
+    return delegate().size();
+  }
+
+  @Override
+  public boolean removeAll(Collection<?> collection) {
+    return delegate().removeAll(collection);
+  }
+
+  @Override
+  public boolean isEmpty() {
+    return delegate().isEmpty();
+  }
+
+  @Override
+  public boolean contains(Object object) {
+    return delegate().contains(object);
+  }
+
+  @Override
+  public boolean add(E element) {
+    return delegate().add(element);
+  }
+
+  @Override
+  public boolean remove(Object object) {
+    return delegate().remove(object);
+  }
+
+  @Override
+  public boolean containsAll(Collection<?> collection) {
+    return delegate().containsAll(collection);
+  }
+
+  @Override
+  public boolean addAll(Collection<? extends E> collection) {
+    return delegate().addAll(collection);
+  }
+
+  @Override
+  public boolean retainAll(Collection<?> collection) {
+    return delegate().retainAll(collection);
+  }
+
+  @Override
+  public void clear() {
+    delegate().clear();
+  }
+
+  @Override
+  public Object[] toArray() {
+    return delegate().toArray();
+  }
+
+  @Override
+  public <T> T[] toArray(T[] array) {
+    return delegate().toArray(array);
+  }
+
+  /**
+   * A sensible definition of {@link #contains} in terms of {@link #iterator}.
+   * If you override {@link #iterator}, you may wish to override {@link
+   * #contains} to forward to this implementation.
+   *
+   * @since 7.0
+   */
+  @Beta protected boolean standardContains(@Nullable Object object) {
+    return Iterators.contains(iterator(), object);
+  }
+
+  /**
+   * A sensible definition of {@link #containsAll} in terms of {@link #contains}
+   * . If you override {@link #contains}, you may wish to override {@link
+   * #containsAll} to forward to this implementation.
+   *
+   * @since 7.0
+   */
+  @Beta protected boolean standardContainsAll(Collection<?> collection) {
+    for (Object o : collection) {
+      if (!contains(o)) {
+        return false;
+      }
+    }
+    return true;
+  }
+
+  /**
+   * A sensible definition of {@link #addAll} in terms of {@link #add}. If you
+   * override {@link #add}, you may wish to override {@link #addAll} to forward
+   * to this implementation.
+   *
+   * @since 7.0
+   */
+  @Beta protected boolean standardAddAll(Collection<? extends E> collection) {
+    return Iterators.addAll(this, collection.iterator());
+  }
+
+  /**
+   * A sensible definition of {@link #remove} in terms of {@link #iterator},
+   * using the iterator's {@code remove} method. If you override {@link
+   * #iterator}, you may wish to override {@link #remove} to forward to this
+   * implementation.
+   *
+   * @since 7.0
+   */
+  @Beta protected boolean standardRemove(@Nullable Object object) {
+    Iterator<E> iterator = iterator();
+    while (iterator.hasNext()) {
+      if (Objects.equal(iterator.next(), object)) {
+        iterator.remove();
+        return true;
+      }
+    }
+    return false;
+  }
+
+  /**
+   * A sensible definition of {@link #removeAll} in terms of {@link #iterator},
+   * using the iterator's {@code remove} method. If you override {@link
+   * #iterator}, you may wish to override {@link #removeAll} to forward to this
+   * implementation.
+   *
+   * @since 7.0
+   */
+  @Beta protected boolean standardRemoveAll(Collection<?> collection) {
+    return Iterators.removeAll(iterator(), collection);
+  }
+
+  /**
+   * A sensible definition of {@link #retainAll} in terms of {@link #iterator},
+   * using the iterator's {@code remove} method. If you override {@link
+   * #iterator}, you may wish to override {@link #retainAll} to forward to this
+   * implementation.
+   *
+   * @since 7.0
+   */
+  @Beta protected boolean standardRetainAll(Collection<?> collection) {
+    return Iterators.retainAll(iterator(), collection);
+  }
+
+  /**
+   * A sensible definition of {@link #clear} in terms of {@link #iterator},
+   * using the iterator's {@code remove} method. If you override {@link
+   * #iterator}, you may wish to override {@link #clear} to forward to this
+   * implementation.
+   *
+   * @since 7.0
+   */
+  @Beta protected void standardClear() {
+    Iterator<E> iterator = iterator();
+    while (iterator.hasNext()) {
+      iterator.next();
+      iterator.remove();
+    }
+  }
+
+  /**
+   * A sensible definition of {@link #isEmpty} as {@code !iterator().hasNext}.
+   * If you override {@link #isEmpty}, you may wish to override {@link #isEmpty}
+   * to forward to this implementation. Alternately, it may be more efficient to
+   * implement {@code isEmpty} as {@code size() == 0}.
+   *
+   * @since 7.0
+   */
+  @Beta protected boolean standardIsEmpty() {
+    return !iterator().hasNext();
+  }
+
+  /**
+   * A sensible definition of {@link #toString} in terms of {@link #iterator}.
+   * If you override {@link #iterator}, you may wish to override {@link
+   * #toString} to forward to this implementation.
+   *
+   * @since 7.0
+   */
+  @Beta protected String standardToString() {
+    return Collections2.toStringImpl(this);
+  }
+
+  /**
+   * A sensible definition of {@link #toArray()} in terms of {@link
+   * #toArray(Object[])}. If you override {@link #toArray(Object[])}, you may
+   * wish to override {@link #toArray} to forward to this implementation.
+   *
+   * @since 7.0
+   */
+  @Beta protected Object[] standardToArray() {
+    Object[] newArray = new Object[size()];
+    return toArray(newArray);
+  }
+
+  /**
+   * A sensible definition of {@link #toArray(Object[])} in terms of {@link
+   * #size} and {@link #iterator}. If you override either of these methods, you
+   * may wish to override {@link #toArray} to forward to this implementation.
+   *
+   * @since 7.0
+   */
+  @Beta protected <T> T[] standardToArray(T[] array) {
+    return ObjectArrays.toArrayImpl(this, array);
+  }
+}
diff --git a/guava/src/com/google/common/collect/ForwardingConcurrentMap.java b/guava/src/com/google/common/collect/ForwardingConcurrentMap.java
new file mode 100644
index 0000000..0336dd1
--- /dev/null
+++ b/guava/src/com/google/common/collect/ForwardingConcurrentMap.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.concurrent.ConcurrentMap;
+
+/**
+ * A concurrent map which forwards all its method calls to another concurrent
+ * map. Subclasses should override one or more methods to modify the behavior of
+ * the backing map as desired per the <a
+ * href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
+ *
+ * @author Charles Fry
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible
+public abstract class ForwardingConcurrentMap<K, V> extends ForwardingMap<K, V>
+    implements ConcurrentMap<K, V> {
+
+  /** Constructor for use by subclasses. */
+  protected ForwardingConcurrentMap() {}
+
+  @Override protected abstract ConcurrentMap<K, V> delegate();
+
+  @Override
+  public V putIfAbsent(K key, V value) {
+    return delegate().putIfAbsent(key, value);
+  }
+
+  @Override
+  public boolean remove(Object key, Object value) {
+    return delegate().remove(key, value);
+  }
+
+  @Override
+  public V replace(K key, V value) {
+    return delegate().replace(key, value);
+  }
+
+  @Override
+  public boolean replace(K key, V oldValue, V newValue) {
+    return delegate().replace(key, oldValue, newValue);
+  }
+
+}
diff --git a/guava/src/com/google/common/collect/ForwardingIterator.java b/guava/src/com/google/common/collect/ForwardingIterator.java
new file mode 100644
index 0000000..b8927d4
--- /dev/null
+++ b/guava/src/com/google/common/collect/ForwardingIterator.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Iterator;
+
+/**
+ * An iterator which forwards all its method calls to another iterator.
+ * Subclasses should override one or more methods to modify the behavior of the
+ * backing iterator as desired per the <a
+ * href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
+ *
+ * @author Kevin Bourrillion
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible
+public abstract class ForwardingIterator<T>
+    extends ForwardingObject implements Iterator<T> {
+
+  /** Constructor for use by subclasses. */
+  protected ForwardingIterator() {}
+
+  @Override protected abstract Iterator<T> delegate();
+
+  @Override
+  public boolean hasNext() {
+    return delegate().hasNext();
+  }
+
+  @Override
+  public T next() {
+    return delegate().next();
+  }
+
+  @Override
+  public void remove() {
+    delegate().remove();
+  }
+}
diff --git a/guava/src/com/google/common/collect/ForwardingList.java b/guava/src/com/google/common/collect/ForwardingList.java
new file mode 100644
index 0000000..e59e662
--- /dev/null
+++ b/guava/src/com/google/common/collect/ForwardingList.java
@@ -0,0 +1,238 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+
+import javax.annotation.Nullable;
+
+/**
+ * A list which forwards all its method calls to another list. Subclasses should
+ * override one or more methods to modify the behavior of the backing list as
+ * desired per the <a
+ * href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
+ *
+ * <p>This class does not implement {@link java.util.RandomAccess}. If the
+ * delegate supports random access, the {@code ForwardingList} subclass should
+ * implement the {@code RandomAccess} interface.
+ *
+ * <p><b>Warning:</b> The methods of {@code ForwardingList} forward
+ * <b>indiscriminately</b> to the methods of the delegate. For example,
+ * overriding {@link #add} alone <b>will not</b> change the behavior of {@link
+ * #addAll}, which can lead to unexpected behavior. In this case, you should
+ * override {@code addAll} as well, either providing your own implementation, or
+ * delegating to the provided {@code standardAddAll} method.
+ *
+ * <p>The {@code standard} methods and any collection views they return are not
+ * guaranteed to be thread-safe, even when all of the methods that they depend
+ * on are thread-safe.
+ *
+ * @author Mike Bostock
+ * @author Louis Wasserman
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible
+public abstract class ForwardingList<E> extends ForwardingCollection<E>
+    implements List<E> {
+  // TODO(user): identify places where thread safety is actually lost
+
+  /** Constructor for use by subclasses. */
+  protected ForwardingList() {}
+
+  @Override protected abstract List<E> delegate();
+
+  @Override
+  public void add(int index, E element) {
+    delegate().add(index, element);
+  }
+
+  @Override
+  public boolean addAll(int index, Collection<? extends E> elements) {
+    return delegate().addAll(index, elements);
+  }
+
+  @Override
+  public E get(int index) {
+    return delegate().get(index);
+  }
+
+  @Override
+  public int indexOf(Object element) {
+    return delegate().indexOf(element);
+  }
+
+  @Override
+  public int lastIndexOf(Object element) {
+    return delegate().lastIndexOf(element);
+  }
+
+  @Override
+  public ListIterator<E> listIterator() {
+    return delegate().listIterator();
+  }
+
+  @Override
+  public ListIterator<E> listIterator(int index) {
+    return delegate().listIterator(index);
+  }
+
+  @Override
+  public E remove(int index) {
+    return delegate().remove(index);
+  }
+
+  @Override
+  public E set(int index, E element) {
+    return delegate().set(index, element);
+  }
+
+  @Override
+  public List<E> subList(int fromIndex, int toIndex) {
+    return delegate().subList(fromIndex, toIndex);
+  }
+
+  @Override public boolean equals(@Nullable Object object) {
+    return object == this || delegate().equals(object);
+  }
+
+  @Override public int hashCode() {
+    return delegate().hashCode();
+  }
+
+  /**
+   * A sensible default implementation of {@link #add(Object)}, in terms of
+   * {@link #add(int, Object)}. If you override {@link #add(int, Object)}, you
+   * may wish to override {@link #add(Object)} to forward to this
+   * implementation.
+   *
+   * @since 7.0
+   */
+  @Beta protected boolean standardAdd(E element){
+    add(size(), element);
+    return true;
+  }
+
+  /**
+   * A sensible default implementation of {@link #addAll(int, Collection)}, in
+   * terms of the {@code add} method of {@link #listIterator(int)}. If you
+   * override {@link #listIterator(int)}, you may wish to override {@link
+   * #addAll(int, Collection)} to forward to this implementation.
+   *
+   * @since 7.0
+   */
+  @Beta protected boolean standardAddAll(
+      int index, Iterable<? extends E> elements) {
+    return Lists.addAllImpl(this, index, elements);
+  }
+
+  /**
+   * A sensible default implementation of {@link #indexOf}, in terms of {@link
+   * #listIterator()}. If you override {@link #listIterator()}, you may wish to
+   * override {@link #indexOf} to forward to this implementation.
+   *
+   * @since 7.0
+   */
+  @Beta protected int standardIndexOf(@Nullable Object element) {
+    return Lists.indexOfImpl(this, element);
+  }
+
+  /**
+   * A sensible default implementation of {@link #lastIndexOf}, in terms of
+   * {@link #listIterator(int)}. If you override {@link #listIterator(int)}, you
+   * may wish to override {@link #lastIndexOf} to forward to this
+   * implementation.
+   *
+   * @since 7.0
+   */
+  @Beta protected int standardLastIndexOf(@Nullable Object element) {
+    return Lists.lastIndexOfImpl(this, element);
+  }
+
+  /**
+   * A sensible default implementation of {@link #iterator}, in terms of
+   * {@link #listIterator()}. If you override {@link #listIterator()}, you may
+   * wish to override {@link #iterator} to forward to this implementation.
+   *
+   * @since 7.0
+   */
+  @Beta protected Iterator<E> standardIterator() {
+    return listIterator();
+  }
+
+  /**
+   * A sensible default implementation of {@link #listIterator()}, in terms of
+   * {@link #listIterator(int)}. If you override {@link #listIterator(int)}, you
+   * may wish to override {@link #listIterator()} to forward to this
+   * implementation.
+   *
+   * @since 7.0
+   */
+  @Beta protected ListIterator<E> standardListIterator(){
+    return listIterator(0);
+  }
+
+  /**
+   * A sensible default implementation of {@link #listIterator(int)}, in terms
+   * of {@link #size} and {@link #get(int)}. If you override either of these
+   * methods you may wish to override {@link #listIterator(int)} to forward to
+   * this implementation.
+   *
+   * @since 7.0
+   */
+  @Beta protected ListIterator<E> standardListIterator(int start) {
+    return Lists.listIteratorImpl(this, start);
+  }
+
+  /**
+   * A sensible default implementation of {@link #subList(int, int)}. If you
+   * override any other methods, you may wish to override {@link #subList(int,
+   * int)} to forward to this implementation.
+   *
+   * @since 7.0
+   */
+  @Beta protected List<E> standardSubList(int fromIndex, int toIndex) {
+    return Lists.subListImpl(this, fromIndex, toIndex);
+  }
+
+  /**
+   * A sensible definition of {@link #equals(Object)} in terms of {@link #size}
+   * and {@link #iterator}. If you override either of those methods, you may
+   * wish to override {@link #equals(Object)} to forward to this implementation.
+   *
+   * @since 7.0
+   */
+  @Beta protected boolean standardEquals(@Nullable Object object) {
+    return Lists.equalsImpl(this, object);
+  }
+
+  /**
+   * A sensible definition of {@link #hashCode} in terms of {@link #iterator}.
+   * If you override {@link #iterator}, you may wish to override {@link
+   * #hashCode} to forward to this implementation.
+   *
+   * @since 7.0
+   */
+  @Beta protected int standardHashCode() {
+    return Lists.hashCodeImpl(this);
+  }
+}
diff --git a/guava/src/com/google/common/collect/ForwardingListIterator.java b/guava/src/com/google/common/collect/ForwardingListIterator.java
new file mode 100644
index 0000000..e2ebe55
--- /dev/null
+++ b/guava/src/com/google/common/collect/ForwardingListIterator.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.ListIterator;
+
+/**
+ * A list iterator which forwards all its method calls to another list
+ * iterator. Subclasses should override one or more methods to modify the
+ * behavior of the backing iterator as desired per the <a
+ * href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
+ *
+ * @author Mike Bostock
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible
+public abstract class ForwardingListIterator<E> extends ForwardingIterator<E>
+    implements ListIterator<E> {
+
+  /** Constructor for use by subclasses. */
+  protected ForwardingListIterator() {}
+
+  @Override protected abstract ListIterator<E> delegate();
+
+  @Override
+  public void add(E element) {
+    delegate().add(element);
+  }
+
+  @Override
+  public boolean hasPrevious() {
+    return delegate().hasPrevious();
+  }
+
+  @Override
+  public int nextIndex() {
+    return delegate().nextIndex();
+  }
+
+  @Override
+  public E previous() {
+    return delegate().previous();
+  }
+
+  @Override
+  public int previousIndex() {
+    return delegate().previousIndex();
+  }
+
+  @Override
+  public void set(E element) {
+    delegate().set(element);
+  }
+}
diff --git a/guava/src/com/google/common/collect/ForwardingListMultimap.java b/guava/src/com/google/common/collect/ForwardingListMultimap.java
new file mode 100644
index 0000000..3b1d55e
--- /dev/null
+++ b/guava/src/com/google/common/collect/ForwardingListMultimap.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.List;
+
+import javax.annotation.Nullable;
+
+/**
+ * A list multimap which forwards all its method calls to another list multimap.
+ * Subclasses should override one or more methods to modify the behavior of
+ * the backing multimap as desired per the <a
+ * href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
+ *
+ * @author Kurt Alfred Kluever
+ * @since 3.0
+ */
+@GwtCompatible
+public abstract class ForwardingListMultimap<K, V>
+    extends ForwardingMultimap<K, V> implements ListMultimap<K, V> {
+
+  /** Constructor for use by subclasses. */
+  protected ForwardingListMultimap() {}
+
+  @Override protected abstract ListMultimap<K, V> delegate();
+
+  @Override public List<V> get(@Nullable K key) {
+    return delegate().get(key);
+  }
+
+  @Override public List<V> removeAll(@Nullable Object key) {
+    return delegate().removeAll(key);
+  }
+
+  @Override public List<V> replaceValues(K key, Iterable<? extends V> values) {
+    return delegate().replaceValues(key, values);
+  }
+}
diff --git a/guava/src/com/google/common/collect/ForwardingMap.java b/guava/src/com/google/common/collect/ForwardingMap.java
new file mode 100644
index 0000000..9b3a489
--- /dev/null
+++ b/guava/src/com/google/common/collect/ForwardingMap.java
@@ -0,0 +1,316 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Objects;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * A map which forwards all its method calls to another map. Subclasses should
+ * override one or more methods to modify the behavior of the backing map as
+ * desired per the <a
+ * href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
+ *
+ * <p><i>Warning:</i> The methods of {@code ForwardingMap} forward
+ * <i>indiscriminately</i> to the methods of the delegate. For example,
+ * overriding {@link #put} alone <i>will not</i> change the behavior of {@link
+ * #putAll}, which can lead to unexpected behavior. In this case, you should
+ * override {@code putAll} as well, either providing your own implementation, or
+ * delegating to the provided {@code standardPutAll} method.
+ *
+ * <p>Each of the {@code standard} methods, where appropriate, use {@link
+ * Objects#equal} to test equality for both keys and values. This may not be
+ * the desired behavior for map implementations that use non-standard notions of
+ * key equality, such as a {@code SortedMap} whose comparator is not consistent
+ * with {@code equals}.
+ *
+ * <p>The {@code standard} methods and the collection views they return are not
+ * guaranteed to be thread-safe, even when all of the methods that they depend
+ * on are thread-safe.
+ *
+ * @author Kevin Bourrillion
+ * @author Jared Levy
+ * @author Louis Wasserman
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible
+public abstract class ForwardingMap<K, V> extends ForwardingObject
+    implements Map<K, V> {
+  // TODO(user): identify places where thread safety is actually lost
+
+  /** Constructor for use by subclasses. */
+  protected ForwardingMap() {}
+
+  @Override protected abstract Map<K, V> delegate();
+
+  @Override
+  public int size() {
+    return delegate().size();
+  }
+
+  @Override
+  public boolean isEmpty() {
+    return delegate().isEmpty();
+  }
+
+  @Override
+  public V remove(Object object) {
+    return delegate().remove(object);
+  }
+
+  @Override
+  public void clear() {
+    delegate().clear();
+  }
+
+  @Override
+  public boolean containsKey(Object key) {
+    return delegate().containsKey(key);
+  }
+
+  @Override
+  public boolean containsValue(Object value) {
+    return delegate().containsValue(value);
+  }
+
+  @Override
+  public V get(Object key) {
+    return delegate().get(key);
+  }
+
+  @Override
+  public V put(K key, V value) {
+    return delegate().put(key, value);
+  }
+
+  @Override
+  public void putAll(Map<? extends K, ? extends V> map) {
+    delegate().putAll(map);
+  }
+
+  @Override
+  public Set<K> keySet() {
+    return delegate().keySet();
+  }
+
+  @Override
+  public Collection<V> values() {
+    return delegate().values();
+  }
+
+  @Override
+  public Set<Entry<K, V>> entrySet() {
+    return delegate().entrySet();
+  }
+
+  @Override public boolean equals(@Nullable Object object) {
+    return object == this || delegate().equals(object);
+  }
+
+  @Override public int hashCode() {
+    return delegate().hashCode();
+  }
+
+  /**
+   * A sensible definition of {@link #putAll(Map)} in terms of {@link
+   * #put(Object, Object)}. If you override {@link #put(Object, Object)}, you
+   * may wish to override {@link #putAll(Map)} to forward to this
+   * implementation.
+   *
+   * @since 7.0
+   */
+  @Beta protected void standardPutAll(Map<? extends K, ? extends V> map) {
+    Maps.putAllImpl(this, map);
+  }
+
+  /**
+   * A sensible, albeit inefficient, definition of {@link #remove} in terms of
+   * the {@code iterator} method of {@link #entrySet}. If you override {@link
+   * #entrySet}, you may wish to override {@link #remove} to forward to this
+   * implementation.
+   *
+   * <p>Alternately, you may wish to override {@link #remove} with {@code
+   * keySet().remove}, assuming that approach would not lead to an infinite
+   * loop.
+   *
+   * @since 7.0
+   */
+  @Beta protected V standardRemove(@Nullable Object key) {
+    Iterator<Entry<K, V>> entryIterator = entrySet().iterator();
+    while (entryIterator.hasNext()) {
+      Entry<K, V> entry = entryIterator.next();
+      if (Objects.equal(entry.getKey(), key)) {
+        V value = entry.getValue();
+        entryIterator.remove();
+        return value;
+      }
+    }
+    return null;
+  }
+
+  /**
+   * A sensible definition of {@link #clear} in terms of the {@code iterator}
+   * method of {@link #entrySet}. In many cases, you may wish to override
+   * {@link #clear} to forward to this implementation.
+   *
+   * @since 7.0
+   */
+  @Beta protected void standardClear() {
+    Iterator<Entry<K, V>> entryIterator = entrySet().iterator();
+    while (entryIterator.hasNext()) {
+      entryIterator.next();
+      entryIterator.remove();
+    }
+  }
+
+  /**
+   * A sensible implementation of {@link Map#keySet} in terms of the following
+   * methods: {@link ForwardingMap#clear}, {@link ForwardingMap#containsKey},
+   * {@link ForwardingMap#isEmpty}, {@link ForwardingMap#remove}, {@link
+   * ForwardingMap#size}, and the {@link Set#iterator} method of {@link
+   * ForwardingMap#entrySet}. In many cases, you may wish to override {@link
+   * ForwardingMap#keySet} to forward to this implementation or a subclass
+   * thereof.
+   *
+   * @since 10.0
+   */
+  @Beta
+  protected class StandardKeySet extends Maps.KeySet<K, V> {
+    public StandardKeySet() {}
+
+    @Override
+    Map<K, V> map() {
+      return ForwardingMap.this;
+    }
+  }
+
+  /**
+   * A sensible, albeit inefficient, definition of {@link #containsKey} in terms
+   * of the {@code iterator} method of {@link #entrySet}. If you override {@link
+   * #entrySet}, you may wish to override {@link #containsKey} to forward to
+   * this implementation.
+   *
+   * @since 7.0
+   */
+  @Beta protected boolean standardContainsKey(@Nullable Object key) {
+    return Maps.containsKeyImpl(this, key);
+  }
+
+  /**
+   * A sensible implementation of {@link Map#values} in terms of the following
+   * methods: {@link ForwardingMap#clear}, {@link ForwardingMap#containsValue},
+   * {@link ForwardingMap#isEmpty}, {@link ForwardingMap#size}, and the {@link
+   * Set#iterator} method of {@link ForwardingMap#entrySet}. In many cases, you
+   * may wish to override {@link ForwardingMap#values} to forward to this
+   * implementation or a subclass thereof.
+   *
+   * @since 10.0
+   */
+  @Beta
+  protected class StandardValues extends Maps.Values<K, V> {
+    public StandardValues() {}
+
+    @Override
+    Map<K, V> map() {
+      return ForwardingMap.this;
+    }
+  }
+
+  /**
+   * A sensible definition of {@link #containsValue} in terms of the {@code
+   * iterator} method of {@link #entrySet}. If you override {@link #entrySet},
+   * you may wish to override {@link #containsValue} to forward to this
+   * implementation.
+   *
+   * @since 7.0
+   */
+  @Beta protected boolean standardContainsValue(@Nullable Object value) {
+    return Maps.containsValueImpl(this, value);
+  }
+
+  /**
+   * A sensible implementation of {@link Map#entrySet} in terms of the following
+   * methods: {@link ForwardingMap#clear}, {@link ForwardingMap#containsKey},
+   * {@link ForwardingMap#get}, {@link ForwardingMap#isEmpty}, {@link
+   * ForwardingMap#remove}, and {@link ForwardingMap#size}. In many cases, you
+   * may wish to override {@link #entrySet} to forward to this implementation
+   * or a subclass thereof.
+   *
+   * @since 10.0
+   */
+  @Beta
+  protected abstract class StandardEntrySet extends Maps.EntrySet<K, V> {
+    public StandardEntrySet() {}
+
+    @Override
+    Map<K, V> map() {
+      return ForwardingMap.this;
+    }
+  }
+
+  /**
+   * A sensible definition of {@link #isEmpty} in terms of the {@code iterator}
+   * method of {@link #entrySet}. If you override {@link #entrySet}, you may
+   * wish to override {@link #isEmpty} to forward to this implementation.
+   *
+   * @since 7.0
+   */
+  @Beta protected boolean standardIsEmpty() {
+    return !entrySet().iterator().hasNext();
+  }
+
+  /**
+   * A sensible definition of {@link #equals} in terms of the {@code equals}
+   * method of {@link #entrySet}. If you override {@link #entrySet}, you may
+   * wish to override {@link #equals} to forward to this implementation.
+   *
+   * @since 7.0
+   */
+  @Beta protected boolean standardEquals(@Nullable Object object) {
+    return Maps.equalsImpl(this, object);
+  }
+
+  /**
+   * A sensible definition of {@link #hashCode} in terms of the {@code iterator}
+   * method of {@link #entrySet}. If you override {@link #entrySet}, you may
+   * wish to override {@link #hashCode} to forward to this implementation.
+   *
+   * @since 7.0
+   */
+  @Beta protected int standardHashCode() {
+    return Sets.hashCodeImpl(entrySet());
+  }
+
+  /**
+   * A sensible definition of {@link #toString} in terms of the {@code iterator}
+   * method of {@link #entrySet}. If you override {@link #entrySet}, you may
+   * wish to override {@link #toString} to forward to this implementation.
+   *
+   * @since 7.0
+   */
+  @Beta protected String standardToString() {
+    return Maps.toStringImpl(this);
+  }
+}
diff --git a/guava/src/com/google/common/collect/ForwardingMapEntry.java b/guava/src/com/google/common/collect/ForwardingMapEntry.java
new file mode 100644
index 0000000..ff201a5
--- /dev/null
+++ b/guava/src/com/google/common/collect/ForwardingMapEntry.java
@@ -0,0 +1,128 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Objects;
+
+import java.util.Map;
+import java.util.Map.Entry;
+
+import javax.annotation.Nullable;
+
+/**
+ * A map entry which forwards all its method calls to another map entry.
+ * Subclasses should override one or more methods to modify the behavior of the
+ * backing map entry as desired per the <a
+ * href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
+ *
+ * <p><i>Warning:</i> The methods of {@code ForwardingMapEntry} forward
+ * <i>indiscriminately</i> to the methods of the delegate. For example,
+ * overriding {@link #getValue} alone <i>will not</i> change the behavior of
+ * {@link #equals}, which can lead to unexpected behavior. In this case, you
+ * should override {@code equals} as well, either providing your own
+ * implementation, or delegating to the provided {@code standardEquals} method.
+ *
+ * <p>Each of the {@code standard} methods, where appropriate, use {@link
+ * Objects#equal} to test equality for both keys and values. This may not be
+ * the desired behavior for map implementations that use non-standard notions of
+ * key equality, such as the entry of a {@code SortedMap} whose comparator is
+ * not consistent with {@code equals}.
+ *
+ * <p>The {@code standard} methods are not guaranteed to be thread-safe, even
+ * when all of the methods that they depend on are thread-safe.
+ *
+ * @author Mike Bostock
+ * @author Louis Wasserman
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible
+public abstract class ForwardingMapEntry<K, V>
+    extends ForwardingObject implements Map.Entry<K, V> {
+  // TODO(user): identify places where thread safety is actually lost
+
+  /** Constructor for use by subclasses. */
+  protected ForwardingMapEntry() {}
+
+  @Override protected abstract Map.Entry<K, V> delegate();
+
+  @Override
+  public K getKey() {
+    return delegate().getKey();
+  }
+
+  @Override
+  public V getValue() {
+    return delegate().getValue();
+  }
+
+  @Override
+  public V setValue(V value) {
+    return delegate().setValue(value);
+  }
+
+  @Override public boolean equals(@Nullable Object object) {
+    return delegate().equals(object);
+  }
+
+  @Override public int hashCode() {
+    return delegate().hashCode();
+  }
+
+  /**
+   * A sensible definition of {@link #equals(Object)} in terms of {@link
+   * #getKey()} and {@link #getValue()}. If you override either of these
+   * methods, you may wish to override {@link #equals(Object)} to forward to
+   * this implementation.
+   *
+   * @since 7.0
+   */
+  @Beta protected boolean standardEquals(@Nullable Object object) {
+    if (object instanceof Entry) {
+      Entry<?, ?> that = (Entry<?, ?>) object;
+      return Objects.equal(this.getKey(), that.getKey())
+          && Objects.equal(this.getValue(), that.getValue());
+    }
+    return false;
+  }
+
+  /**
+   * A sensible definition of {@link #hashCode()} in terms of {@link #getKey()}
+   * and {@link #getValue()}. If you override either of these methods, you may
+   * wish to override {@link #hashCode()} to forward to this implementation.
+   *
+   * @since 7.0
+   */
+  @Beta protected int standardHashCode() {
+    K k = getKey();
+    V v = getValue();
+    return ((k == null) ? 0 : k.hashCode()) ^ ((v == null) ? 0 : v.hashCode());
+  }
+
+  /**
+   * A sensible definition of {@link #toString} in terms of {@link
+   * #getKey} and {@link #getValue}. If you override either of these
+   * methods, you may wish to override {@link #equals} to forward to this
+   * implementation.
+   *
+   * @since 7.0
+   */
+  @Beta protected String standardToString() {
+    return getKey() + "=" + getValue();
+  }
+}
diff --git a/guava/src/com/google/common/collect/ForwardingMultimap.java b/guava/src/com/google/common/collect/ForwardingMultimap.java
new file mode 100644
index 0000000..c860820
--- /dev/null
+++ b/guava/src/com/google/common/collect/ForwardingMultimap.java
@@ -0,0 +1,143 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Collection;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * A multimap which forwards all its method calls to another multimap.
+ * Subclasses should override one or more methods to modify the behavior of
+ * the backing multimap as desired per the <a
+ * href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
+ *
+ * @author Robert Konigsberg
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible
+public abstract class ForwardingMultimap<K, V> extends ForwardingObject
+    implements Multimap<K, V> {
+
+  /** Constructor for use by subclasses. */
+  protected ForwardingMultimap() {}
+
+  @Override protected abstract Multimap<K, V> delegate();
+
+  @Override
+  public Map<K, Collection<V>> asMap() {
+    return delegate().asMap();
+  }
+
+  @Override
+  public void clear() {
+    delegate().clear();
+  }
+
+  @Override
+  public boolean containsEntry(@Nullable Object key, @Nullable Object value) {
+    return delegate().containsEntry(key, value);
+  }
+
+  @Override
+  public boolean containsKey(@Nullable Object key) {
+    return delegate().containsKey(key);
+  }
+
+  @Override
+  public boolean containsValue(@Nullable Object value) {
+    return delegate().containsValue(value);
+  }
+
+  @Override
+  public Collection<Entry<K, V>> entries() {
+    return delegate().entries();
+  }
+
+  @Override
+  public Collection<V> get(@Nullable K key) {
+    return delegate().get(key);
+  }
+
+  @Override
+  public boolean isEmpty() {
+    return delegate().isEmpty();
+  }
+
+  @Override
+  public Multiset<K> keys() {
+    return delegate().keys();
+  }
+
+  @Override
+  public Set<K> keySet() {
+    return delegate().keySet();
+  }
+
+  @Override
+  public boolean put(K key, V value) {
+    return delegate().put(key, value);
+  }
+
+  @Override
+  public boolean putAll(K key, Iterable<? extends V> values) {
+    return delegate().putAll(key, values);
+  }
+
+  @Override
+  public boolean putAll(Multimap<? extends K, ? extends V> multimap) {
+    return delegate().putAll(multimap);
+  }
+
+  @Override
+  public boolean remove(@Nullable Object key, @Nullable Object value) {
+    return delegate().remove(key, value);
+  }
+
+  @Override
+  public Collection<V> removeAll(@Nullable Object key) {
+    return delegate().removeAll(key);
+  }
+
+  @Override
+  public Collection<V> replaceValues(K key, Iterable<? extends V> values) {
+    return delegate().replaceValues(key, values);
+  }
+
+  @Override
+  public int size() {
+    return delegate().size();
+  }
+
+  @Override
+  public Collection<V> values() {
+    return delegate().values();
+  }
+
+  @Override public boolean equals(@Nullable Object object) {
+    return object == this || delegate().equals(object);
+  }
+
+  @Override public int hashCode() {
+    return delegate().hashCode();
+  }
+}
diff --git a/guava/src/com/google/common/collect/ForwardingMultiset.java b/guava/src/com/google/common/collect/ForwardingMultiset.java
new file mode 100644
index 0000000..4e1ceed
--- /dev/null
+++ b/guava/src/com/google/common/collect/ForwardingMultiset.java
@@ -0,0 +1,312 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Objects;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * A multiset which forwards all its method calls to another multiset.
+ * Subclasses should override one or more methods to modify the behavior of the
+ * backing multiset as desired per the <a
+ * href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
+ *
+ * <p><b>Warning:</b> The methods of {@code ForwardingMultiset} forward
+ * <b>indiscriminately</b> to the methods of the delegate. For example,
+ * overriding {@link #add(Object, int)} alone <b>will not</b> change the
+ * behavior of {@link #add(Object)}, which can lead to unexpected behavior. In
+ * this case, you should override {@code add(Object)} as well, either providing
+ * your own implementation, or delegating to the provided {@code standardAdd}
+ * method.
+ *
+ * <p>The {@code standard} methods and any collection views they return are not
+ * guaranteed to be thread-safe, even when all of the methods that they depend
+ * on are thread-safe.
+ *
+ * @author Kevin Bourrillion
+ * @author Louis Wasserman
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible
+public abstract class ForwardingMultiset<E> extends ForwardingCollection<E>
+    implements Multiset<E> {
+
+  /** Constructor for use by subclasses. */
+  protected ForwardingMultiset() {}
+
+  @Override protected abstract Multiset<E> delegate();
+
+  @Override
+  public int count(Object element) {
+    return delegate().count(element);
+  }
+
+  @Override
+  public int add(E element, int occurrences) {
+    return delegate().add(element, occurrences);
+  }
+
+  @Override
+  public int remove(Object element, int occurrences) {
+    return delegate().remove(element, occurrences);
+  }
+
+  @Override
+  public Set<E> elementSet() {
+    return delegate().elementSet();
+  }
+
+  @Override
+  public Set<Entry<E>> entrySet() {
+    return delegate().entrySet();
+  }
+
+  @Override public boolean equals(@Nullable Object object) {
+    return object == this || delegate().equals(object);
+  }
+
+  @Override public int hashCode() {
+    return delegate().hashCode();
+  }
+
+  @Override
+  public int setCount(E element, int count) {
+    return delegate().setCount(element, count);
+  }
+
+  @Override
+  public boolean setCount(E element, int oldCount, int newCount) {
+    return delegate().setCount(element, oldCount, newCount);
+  }
+
+  /**
+   * A sensible definition of {@link #contains} in terms of {@link #count}. If
+   * you override {@link #count}, you may wish to override {@link #contains} to
+   * forward to this implementation.
+   * 
+   * @since 7.0
+   */
+  @Override @Beta protected boolean standardContains(@Nullable Object object) {
+    return count(object) > 0;
+  }
+
+  /**
+   * A sensible definition of {@link #clear} in terms of the {@code iterator}
+   * method of {@link #entrySet}. If you override {@link #entrySet}, you may
+   * wish to override {@link #clear} to forward to this implementation.
+   *
+   * @since 7.0
+   */
+  @Override @Beta protected void standardClear() {
+    Iterator<Entry<E>> entryIterator = entrySet().iterator();
+    while (entryIterator.hasNext()) {
+      entryIterator.next();
+      entryIterator.remove();
+    }
+  }
+
+  /**
+   * A sensible, albeit inefficient, definition of {@link #count} in terms of
+   * {@link #entrySet}. If you override {@link #entrySet}, you may wish to
+   * override {@link #count} to forward to this implementation.
+   * 
+   * @since 7.0
+   */
+  @Beta protected int standardCount(@Nullable Object object) {
+    for (Entry<?> entry : this.entrySet()) {
+      if (Objects.equal(entry.getElement(), object)) {
+        return entry.getCount();
+      }
+    }
+    return 0;
+  }
+
+  /**
+   * A sensible definition of {@link #add(Object)} in terms of {@link
+   * #add(Object, int)}. If you override {@link #add(Object, int)}, you may
+   * wish to override {@link #add(Object)} to forward to this implementation.
+   * 
+   * @since 7.0
+   */
+  @Beta protected boolean standardAdd(E element) {
+    add(element, 1);
+    return true;
+  }
+
+  /**
+   * A sensible definition of {@link #addAll(Collection)} in terms of {@link
+   * #add(Object)} and {@link #add(Object, int)}. If you override either of
+   * these methods, you may wish to override {@link #addAll(Collection)} to
+   * forward to this implementation.
+   * 
+   * @since 7.0
+   */
+  @Beta @Override protected boolean standardAddAll(
+      Collection<? extends E> elementsToAdd) {
+    return Multisets.addAllImpl(this, elementsToAdd);
+  }
+
+  /**
+   * A sensible definition of {@link #remove(Object)} in terms of {@link
+   * #remove(Object, int)}. If you override {@link #remove(Object, int)}, you
+   * may wish to override {@link #remove(Object)} to forward to this
+   * implementation.
+   * 
+   * @since 7.0
+   */
+  @Beta @Override protected boolean standardRemove(Object element) {
+    return remove(element, 1) > 0;
+  }
+
+  /**
+   * A sensible definition of {@link #removeAll} in terms of the {@code
+   * removeAll} method of {@link #elementSet}. If you override {@link
+   * #elementSet}, you may wish to override {@link #removeAll} to forward to
+   * this implementation.
+   *
+   * @since 7.0
+   */
+  @Beta @Override protected boolean standardRemoveAll(
+      Collection<?> elementsToRemove) {
+    return Multisets.removeAllImpl(this, elementsToRemove);
+  }
+
+  /**
+   * A sensible definition of {@link #retainAll} in terms of the {@code
+   * retainAll} method of {@link #elementSet}. If you override {@link
+   * #elementSet}, you may wish to override {@link #retainAll} to forward to
+   * this implementation.
+   *
+   * @since 7.0
+   */
+  @Beta @Override protected boolean standardRetainAll(
+      Collection<?> elementsToRetain) {
+    return Multisets.retainAllImpl(this, elementsToRetain);
+  }
+
+  /**
+   * A sensible definition of {@link #setCount(Object, int)} in terms of {@link
+   * #count(Object)}, {@link #add(Object, int)}, and {@link #remove(Object,
+   * int)}. {@link #entrySet()}. If you override any of these methods, you may
+   * wish to override {@link #setCount(Object, int)} to forward to this
+   * implementation.
+   * 
+   * @since 7.0
+   */
+  @Beta protected int standardSetCount(E element, int count) {
+    return Multisets.setCountImpl(this, element, count);
+  }
+
+  /**
+   * A sensible definition of {@link #setCount(Object, int, int)} in terms of
+   * {@link #count(Object)} and {@link #setCount(Object, int)}. If you override
+   * either of these methods, you may wish to override {@link #setCount(Object,
+   * int, int)} to forward to this implementation.
+   *
+   * @since 7.0
+   */
+  @Beta protected boolean standardSetCount(
+      E element, int oldCount, int newCount) {
+    return Multisets.setCountImpl(this, element, oldCount, newCount);
+  }
+
+  /**
+   * A sensible implementation of {@link Multiset#elementSet} in terms of the
+   * following methods: {@link ForwardingMultiset#clear}, {@link
+   * ForwardingMultiset#contains}, {@link ForwardingMultiset#containsAll},
+   * {@link ForwardingMultiset#count}, {@link ForwardingMultiset#isEmpty}, the
+   * {@link Set#size} and {@link Set#iterator} methods of {@link
+   * ForwardingMultiset#entrySet}, and {@link ForwardingMultiset#remove(Object,
+   * int)}.  In many situations, you may wish to override {@link
+   * ForwardingMultiset#elementSet} to forward to this implementation or a
+   * subclass thereof.
+   *
+   * @since 10.0
+   */
+  @Beta
+  protected class StandardElementSet extends Multisets.ElementSet<E> {
+    public StandardElementSet() {}
+
+    @Override
+    Multiset<E> multiset() {
+      return ForwardingMultiset.this;
+    }
+  }
+  
+  /**
+   * A sensible definition of {@link #iterator} in terms of {@link #entrySet}
+   * and {@link #remove(Object)}. If you override either of these methods, you
+   * may wish to override {@link #iterator} to forward to this implementation.
+   * 
+   * @since 7.0
+   */
+  @Beta protected Iterator<E> standardIterator() {
+    return Multisets.iteratorImpl(this);
+  }
+
+  /**
+   * A sensible, albeit inefficient, definition of {@link #size} in terms of
+   * {@link #entrySet}. If you override {@link #entrySet}, you may wish to
+   * override {@link #size} to forward to this implementation.
+   * 
+   * @since 7.0
+   */
+  @Beta protected int standardSize() {
+    return Multisets.sizeImpl(this);
+  }
+
+  /**
+   * A sensible, albeit inefficient, definition of {@link #size} in terms of
+   * {@code entrySet().size()} and {@link #count}. If you override either of
+   * these methods, you may wish to override {@link #size} to forward to this
+   * implementation.
+   *
+   * @since 7.0
+   */
+  @Beta protected boolean standardEquals(@Nullable Object object) {
+    return Multisets.equalsImpl(this, object);
+  }
+
+  /**
+   * A sensible definition of {@link #hashCode} as {@code entrySet().hashCode()}
+   * . If you override {@link #entrySet}, you may wish to override {@link
+   * #hashCode} to forward to this implementation.
+   *
+   * @since 7.0
+   */
+  @Beta protected int standardHashCode() {
+    return entrySet().hashCode();
+  }
+
+  /**
+   * A sensible definition of {@link #toString} as {@code entrySet().toString()}
+   * . If you override {@link #entrySet}, you may wish to override {@link
+   * #toString} to forward to this implementation.
+   *
+   * @since 7.0
+   */
+  @Beta @Override protected String standardToString() {
+    return entrySet().toString();
+  }
+}
diff --git a/guava/src/com/google/common/collect/ForwardingObject.java b/guava/src/com/google/common/collect/ForwardingObject.java
new file mode 100644
index 0000000..7fecdee
--- /dev/null
+++ b/guava/src/com/google/common/collect/ForwardingObject.java
@@ -0,0 +1,76 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.io.Serializable;
+
+/**
+ * An abstract base class for implementing the <a
+ * href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
+ * The {@link #delegate()} method must be overridden to return the instance
+ * being decorated.
+ *
+ * <p>This class does <i>not</i> forward the {@code hashCode} and {@code equals}
+ * methods through to the backing object, but relies on {@code Object}'s
+ * implementation. This is necessary to preserve the symmetry of {@code equals}.
+ * Custom definitions of equality are usually based on an interface, such as
+ * {@code Set} or {@code List}, so that the implementation of {@code equals} can
+ * cast the object being tested for equality to the custom interface. {@code
+ * ForwardingObject} implements no such custom interfaces directly; they
+ * are implemented only in subclasses. Therefore, forwarding {@code equals}
+ * would break symmetry, as the forwarding object might consider itself equal to
+ * the object being tested, but the reverse could not be true. This behavior is
+ * consistent with the JDK's collection wrappers, such as
+ * {@link java.util.Collections#unmodifiableCollection}. Use an
+ * interface-specific subclass of {@code ForwardingObject}, such as {@link
+ * ForwardingList}, to preserve equality behavior, or override {@code equals}
+ * directly.
+ *
+ * <p>The {@code toString} method is forwarded to the delegate. Although this
+ * class does not implement {@link Serializable}, a serializable subclass may be
+ * created since this class has a parameter-less constructor.
+ *
+ * @author Mike Bostock
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible
+public abstract class ForwardingObject {
+
+  /** Constructor for use by subclasses. */
+  protected ForwardingObject() {}
+
+  /**
+   * Returns the backing delegate instance that methods are forwarded to.
+   * Abstract subclasses generally override this method with an abstract method
+   * that has a more specific return type, such as {@link
+   * ForwardingSet#delegate}. Concrete subclasses override this method to supply
+   * the instance being decorated.
+   */
+  protected abstract Object delegate();
+
+  /**
+   * Returns the string representation generated by the delegate's
+   * {@code toString} method.
+   */
+  @Override public String toString() {
+    return delegate().toString();
+  }
+
+  /* No equals or hashCode. See class comments for details. */
+}
diff --git a/guava/src/com/google/common/collect/ForwardingQueue.java b/guava/src/com/google/common/collect/ForwardingQueue.java
new file mode 100644
index 0000000..3d30aaf
--- /dev/null
+++ b/guava/src/com/google/common/collect/ForwardingQueue.java
@@ -0,0 +1,123 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.NoSuchElementException;
+import java.util.Queue;
+
+/**
+ * A queue which forwards all its method calls to another queue. Subclasses
+ * should override one or more methods to modify the behavior of the backing
+ * queue as desired per the <a
+ * href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
+ *
+ * <p><b>Warning:</b> The methods of {@code ForwardingQueue} forward
+ * <b>indiscriminately</b> to the methods of the delegate. For example,
+ * overriding {@link #add} alone <b>will not</b> change the behavior of {@link
+ * #offer} which can lead to unexpected behavior. In this case, you should
+ * override {@code offer} as well, either providing your own implementation, or
+ * delegating to the provided {@code standardOffer} method.
+ *
+ * <p>The {@code standard} methods are not guaranteed to be thread-safe, even
+ * when all of the methods that they depend on are thread-safe.
+ *
+ * @author Mike Bostock
+ * @author Louis Wasserman
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible
+public abstract class ForwardingQueue<E> extends ForwardingCollection<E>
+    implements Queue<E> {
+
+  /** Constructor for use by subclasses. */
+  protected ForwardingQueue() {}
+
+  @Override protected abstract Queue<E> delegate();
+
+  @Override
+  public boolean offer(E o) {
+    return delegate().offer(o);
+  }
+
+  @Override
+  public E poll() {
+    return delegate().poll();
+  }
+
+  @Override
+  public E remove() {
+    return delegate().remove();
+  }
+
+  @Override
+  public E peek() {
+    return delegate().peek();
+  }
+
+  @Override
+  public E element() {
+    return delegate().element();
+  }
+
+  /**
+   * A sensible definition of {@link #offer} in terms of {@link #add}. If you
+   * override {@link #add}, you may wish to override {@link #offer} to forward
+   * to this implementation.
+   * 
+   * @since 7.0
+   */
+  @Beta protected boolean standardOffer(E e) {
+    try {
+      return add(e);
+    } catch (IllegalStateException caught) {
+      return false;
+    }
+  }
+
+  /**
+   * A sensible definition of {@link #peek} in terms of {@link #element}. If you
+   * override {@link #element}, you may wish to override {@link #peek} to
+   * forward to this implementation.
+   * 
+   * @since 7.0
+   */
+  @Beta protected E standardPeek() {
+    try {
+      return element();
+    } catch (NoSuchElementException caught) {
+      return null;
+    }
+  }
+
+  /**
+   * A sensible definition of {@link #poll} in terms of {@link #remove}. If you
+   * override {@link #remove}, you may wish to override {@link #poll} to forward
+   * to this implementation.
+   * 
+   * @since 7.0
+   */
+  @Beta protected E standardPoll() {
+    try {
+      return remove();
+    } catch (NoSuchElementException caught) {
+      return null;
+    }
+  }
+}
diff --git a/guava/src/com/google/common/collect/ForwardingSet.java b/guava/src/com/google/common/collect/ForwardingSet.java
new file mode 100644
index 0000000..4c3dccd
--- /dev/null
+++ b/guava/src/com/google/common/collect/ForwardingSet.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * A set which forwards all its method calls to another set. Subclasses should
+ * override one or more methods to modify the behavior of the backing set as
+ * desired per the <a
+ * href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
+ *
+ * <p><b>Warning:</b> The methods of {@code ForwardingSet} forward
+ * <b>indiscriminately</b> to the methods of the delegate. For example,
+ * overriding {@link #add} alone <b>will not</b> change the behavior of {@link
+ * #addAll}, which can lead to unexpected behavior. In this case, you should
+ * override {@code addAll} as well, either providing your own implementation, or
+ * delegating to the provided {@code standardAddAll} method.
+ *
+ * <p>The {@code standard} methods are not guaranteed to be thread-safe, even
+ * when all of the methods that they depend on are thread-safe.
+ *
+ * @author Kevin Bourrillion
+ * @author Louis Wasserman
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible
+public abstract class ForwardingSet<E> extends ForwardingCollection<E>
+    implements Set<E> {
+  // TODO(user): identify places where thread safety is actually lost
+
+  /** Constructor for use by subclasses. */
+  protected ForwardingSet() {}
+
+  @Override protected abstract Set<E> delegate();
+
+  @Override public boolean equals(@Nullable Object object) {
+    return object == this || delegate().equals(object);
+  }
+
+  @Override public int hashCode() {
+    return delegate().hashCode();
+  }
+
+  /**
+   * A sensible definition of {@link #equals} in terms of {@link #size} and
+   * {@link #containsAll}. If you override either of those methods, you may wish
+   * to override {@link #equals} to forward to this implementation.
+   *
+   * @since 7.0
+   */
+  @Beta protected boolean standardEquals(@Nullable Object object) {
+    return Sets.equalsImpl(this, object);
+  }
+
+  /**
+   * A sensible definition of {@link #hashCode} in terms of {@link #iterator}.
+   * If you override {@link #iterator}, you may wish to override {@link #equals}
+   * to forward to this implementation.
+   *
+   * @since 7.0
+   */
+  @Beta protected int standardHashCode() {
+    return Sets.hashCodeImpl(this);
+  }
+}
diff --git a/guava/src/com/google/common/collect/ForwardingSetMultimap.java b/guava/src/com/google/common/collect/ForwardingSetMultimap.java
new file mode 100644
index 0000000..a923946
--- /dev/null
+++ b/guava/src/com/google/common/collect/ForwardingSetMultimap.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Map.Entry;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * A set multimap which forwards all its method calls to another set multimap.
+ * Subclasses should override one or more methods to modify the behavior of
+ * the backing multimap as desired per the <a
+ * href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
+ *
+ * @author Kurt Alfred Kluever
+ * @since 3.0
+ */
+@GwtCompatible
+public abstract class ForwardingSetMultimap<K, V>
+    extends ForwardingMultimap<K, V> implements SetMultimap<K, V> {
+
+  @Override protected abstract SetMultimap<K, V> delegate();
+
+  @Override public Set<Entry<K, V>> entries() {
+    return delegate().entries();
+  }
+
+  @Override public Set<V> get(@Nullable K key) {
+    return delegate().get(key);
+  }
+
+  @Override public Set<V> removeAll(@Nullable Object key) {
+    return delegate().removeAll(key);
+  }
+
+  @Override public Set<V> replaceValues(K key, Iterable<? extends V> values) {
+    return delegate().replaceValues(key, values);
+  }
+}
diff --git a/guava/src/com/google/common/collect/ForwardingSortedMap.java b/guava/src/com/google/common/collect/ForwardingSortedMap.java
new file mode 100644
index 0000000..0808039
--- /dev/null
+++ b/guava/src/com/google/common/collect/ForwardingSortedMap.java
@@ -0,0 +1,171 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+import java.util.SortedMap;
+
+import javax.annotation.Nullable;
+
+/**
+ * A sorted map which forwards all its method calls to another sorted map.
+ * Subclasses should override one or more methods to modify the behavior of
+ * the backing sorted map as desired per the <a
+ * href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
+ *
+ * <p><i>Warning:</i> The methods of {@code ForwardingSortedMap} forward
+ * <i>indiscriminately</i> to the methods of the delegate. For example,
+ * overriding {@link #put} alone <i>will not</i> change the behavior of {@link
+ * #putAll}, which can lead to unexpected behavior. In this case, you should
+ * override {@code putAll} as well, either providing your own implementation, or
+ * delegating to the provided {@code standardPutAll} method.
+ *
+ * <p>Each of the {@code standard} methods, where appropriate, use the
+ * comparator of the map to test equality for both keys and values, unlike
+ * {@code ForwardingMap}.
+ *
+ * <p>The {@code standard} methods and the collection views they return are not
+ * guaranteed to be thread-safe, even when all of the methods that they depend
+ * on are thread-safe.
+ *
+ * @author Mike Bostock
+ * @author Louis Wasserman
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible
+public abstract class ForwardingSortedMap<K, V> extends ForwardingMap<K, V>
+    implements SortedMap<K, V> {
+  // TODO(user): identify places where thread safety is actually lost
+
+  /** Constructor for use by subclasses. */
+  protected ForwardingSortedMap() {}
+
+  @Override protected abstract SortedMap<K, V> delegate();
+
+  @Override
+  public Comparator<? super K> comparator() {
+    return delegate().comparator();
+  }
+
+  @Override
+  public K firstKey() {
+    return delegate().firstKey();
+  }
+
+  @Override
+  public SortedMap<K, V> headMap(K toKey) {
+    return delegate().headMap(toKey);
+  }
+
+  @Override
+  public K lastKey() {
+    return delegate().lastKey();
+  }
+
+  @Override
+  public SortedMap<K, V> subMap(K fromKey, K toKey) {
+    return delegate().subMap(fromKey, toKey);
+  }
+
+  @Override
+  public SortedMap<K, V> tailMap(K fromKey) {
+    return delegate().tailMap(fromKey);
+  }
+
+  // unsafe, but worst case is a CCE is thrown, which callers will be expecting
+  @SuppressWarnings("unchecked")
+  private int unsafeCompare(Object k1, Object k2) {
+    Comparator<? super K> comparator = comparator();
+    if (comparator == null) {
+      return ((Comparable<Object>) k1).compareTo(k2);
+    } else {
+      return ((Comparator<Object>) comparator).compare(k1, k2);
+    }
+  }
+
+  /**
+   * A sensible definition of {@link #containsKey} in terms of the {@code
+   * firstKey()} method of {@link #tailMap}. If you override {@link #tailMap},
+   * you may wish to override {@link #containsKey} to forward to this
+   * implementation.
+   *
+   * @since 7.0
+   */
+  @Override @Beta protected boolean standardContainsKey(@Nullable Object key) {
+    try {
+      // any CCE will be caught
+      @SuppressWarnings("unchecked")
+      SortedMap<Object, V> self = (SortedMap<Object, V>) this;
+      Object ceilingKey = self.tailMap(key).firstKey();
+      return unsafeCompare(ceilingKey, key) == 0;
+    } catch (ClassCastException e) {
+      return false;
+    } catch (NoSuchElementException e) {
+      return false;
+    } catch (NullPointerException e) {
+      return false;
+    }
+  }
+
+  /**
+   * A sensible definition of {@link #remove} in terms of the {@code
+   * iterator()} of the {@code entrySet()} of {@link #tailMap}. If you override
+   * {@link #tailMap}, you may wish to override {@link #remove} to forward
+   * to this implementation.
+   *
+   * @since 7.0
+   */
+  @Override @Beta protected V standardRemove(@Nullable Object key) {
+    try {
+      // any CCE will be caught
+      @SuppressWarnings("unchecked")
+      SortedMap<Object, V> self = (SortedMap<Object, V>) this;
+      Iterator<Entry<Object, V>> entryIterator =
+          self.tailMap(key).entrySet().iterator();
+      if (entryIterator.hasNext()) {
+        Entry<Object, V> ceilingEntry = entryIterator.next();
+        if (unsafeCompare(ceilingEntry.getKey(), key) == 0) {
+          V value = ceilingEntry.getValue();
+          entryIterator.remove();
+          return value;
+        }
+      }
+    } catch (ClassCastException e) {
+      return null;
+    } catch (NullPointerException e) {
+      return null;
+    }
+    return null;
+  }
+
+  /**
+   * A sensible default implementation of {@link #subMap(Object, Object)} in
+   * terms of {@link #headMap(Object)} and {@link #tailMap(Object)}. In some
+   * situations, you may wish to override {@link #subMap(Object, Object)} to
+   * forward to this implementation.
+   *
+   * @since 7.0
+   */
+  @Beta protected SortedMap<K, V> standardSubMap(K fromKey, K toKey) {
+    return tailMap(fromKey).headMap(toKey);
+  }
+}
diff --git a/guava/src/com/google/common/collect/ForwardingSortedSet.java b/guava/src/com/google/common/collect/ForwardingSortedSet.java
new file mode 100644
index 0000000..756d9af
--- /dev/null
+++ b/guava/src/com/google/common/collect/ForwardingSortedSet.java
@@ -0,0 +1,166 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+import java.util.SortedSet;
+
+import javax.annotation.Nullable;
+
+/**
+ * A sorted set which forwards all its method calls to another sorted set.
+ * Subclasses should override one or more methods to modify the behavior of the
+ * backing sorted set as desired per the <a
+ * href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
+ *
+ * <p><i>Warning:</i> The methods of {@code ForwardingSortedSet} forward
+ * <i>indiscriminately</i> to the methods of the delegate. For example,
+ * overriding {@link #add} alone <i>will not</i> change the behavior of {@link
+ * #addAll}, which can lead to unexpected behavior. In this case, you should
+ * override {@code addAll} as well, either providing your own implementation, or
+ * delegating to the provided {@code standardAddAll} method.
+ *
+ * <p>Each of the {@code standard} methods, where appropriate, uses the set's
+ * comparator (or the natural ordering of the elements, if there is no
+ * comparator) to test element equality. As a result, if the comparator is not
+ * consistent with equals, some of the standard implementations may violate the
+ * {@code Set} contract.
+ *
+ * <p>The {@code standard} methods and the collection views they return are not
+ * guaranteed to be thread-safe, even when all of the methods that they depend
+ * on are thread-safe.
+ *
+ * @author Mike Bostock
+ * @author Louis Wasserman
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible
+public abstract class ForwardingSortedSet<E> extends ForwardingSet<E>
+    implements SortedSet<E> {
+
+  /** Constructor for use by subclasses. */
+  protected ForwardingSortedSet() {}
+
+  @Override protected abstract SortedSet<E> delegate();
+
+  @Override
+  public Comparator<? super E> comparator() {
+    return delegate().comparator();
+  }
+
+  @Override
+  public E first() {
+    return delegate().first();
+  }
+
+  @Override
+  public SortedSet<E> headSet(E toElement) {
+    return delegate().headSet(toElement);
+  }
+
+  @Override
+  public E last() {
+    return delegate().last();
+  }
+
+  @Override
+  public SortedSet<E> subSet(E fromElement, E toElement) {
+    return delegate().subSet(fromElement, toElement);
+  }
+
+  @Override
+  public SortedSet<E> tailSet(E fromElement) {
+    return delegate().tailSet(fromElement);
+  }
+
+  // unsafe, but worst case is a CCE is thrown, which callers will be expecting
+  @SuppressWarnings("unchecked")
+  private int unsafeCompare(Object o1, Object o2) {
+    Comparator<? super E> comparator = comparator();
+    return (comparator == null)
+        ? ((Comparable<Object>) o1).compareTo(o2)
+        : ((Comparator<Object>) comparator).compare(o1, o2);
+  }
+
+  /**
+   * A sensible definition of {@link #contains} in terms of the {@code first()}
+   * method of {@link #tailSet}. If you override {@link #tailSet}, you may wish
+   * to override {@link #contains} to forward to this implementation.
+   *
+   * @since 7.0
+   */
+  @Override @Beta protected boolean standardContains(@Nullable Object object) {
+    try {
+      // any ClassCastExceptions are caught
+      @SuppressWarnings("unchecked")
+      SortedSet<Object> self = (SortedSet<Object>) this;
+      Object ceiling = self.tailSet(object).first();
+      return unsafeCompare(ceiling, object) == 0;
+    } catch (ClassCastException e) {
+      return false;
+    } catch (NoSuchElementException e) {
+      return false;
+    } catch (NullPointerException e) {
+      return false;
+    }
+  }
+
+  /**
+   * A sensible definition of {@link #remove} in terms of the {@code iterator()}
+   * method of {@link #tailSet}. If you override {@link #tailSet}, you may wish
+   * to override {@link #remove} to forward to this implementation.
+   *
+   * @since 7.0
+   */
+  @Override @Beta protected boolean standardRemove(@Nullable Object object) {
+    try {
+      // any ClassCastExceptions are caught
+      @SuppressWarnings("unchecked")
+      SortedSet<Object> self = (SortedSet<Object>) this;
+      Iterator<Object> iterator = self.tailSet(object).iterator();
+      if (iterator.hasNext()) {
+        Object ceiling = iterator.next();
+        if (unsafeCompare(ceiling, object) == 0) {
+          iterator.remove();
+          return true;
+        }
+      }
+    } catch (ClassCastException e) {
+      return false;
+    } catch (NullPointerException e) {
+      return false;
+    }
+    return false;
+  }
+
+  /**
+   * A sensible default implementation of {@link #subSet(Object, Object)} in
+   * terms of {@link #headSet(Object)} and {@link #tailSet(Object)}. In some
+   * situations, you may wish to override {@link #subSet(Object, Object)} to
+   * forward to this implementation.
+   *
+   * @since 7.0
+   */
+  @Beta protected SortedSet<E> standardSubSet(E fromElement, E toElement) {
+    return tailSet(fromElement).headSet(toElement);
+  }
+}
diff --git a/guava/src/com/google/common/collect/ForwardingSortedSetMultimap.java b/guava/src/com/google/common/collect/ForwardingSortedSetMultimap.java
new file mode 100644
index 0000000..d90c305
--- /dev/null
+++ b/guava/src/com/google/common/collect/ForwardingSortedSetMultimap.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Comparator;
+import java.util.SortedSet;
+
+import javax.annotation.Nullable;
+
+/**
+ * A sorted set multimap which forwards all its method calls to another sorted
+ * set multimap. Subclasses should override one or more methods to modify the
+ * behavior of the backing multimap as desired per the <a
+ * href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
+ *
+ * @author Kurt Alfred Kluever
+ * @since 3.0
+ */
+@GwtCompatible
+public abstract class ForwardingSortedSetMultimap<K, V>
+    extends ForwardingSetMultimap<K, V> implements SortedSetMultimap<K, V> {
+
+  /** Constructor for use by subclasses. */
+  protected ForwardingSortedSetMultimap() {}
+
+  @Override protected abstract SortedSetMultimap<K, V> delegate();
+
+  @Override public SortedSet<V> get(@Nullable K key) {
+    return delegate().get(key);
+  }
+
+  @Override public SortedSet<V> removeAll(@Nullable Object key) {
+    return delegate().removeAll(key);
+  }
+
+  @Override public SortedSet<V> replaceValues(
+      K key, Iterable<? extends V> values) {
+    return delegate().replaceValues(key, values);
+  }
+
+  @Override public Comparator<? super V> valueComparator() {
+    return delegate().valueComparator();
+  }
+}
diff --git a/guava/src/com/google/common/collect/ForwardingTable.java b/guava/src/com/google/common/collect/ForwardingTable.java
new file mode 100644
index 0000000..2c59705
--- /dev/null
+++ b/guava/src/com/google/common/collect/ForwardingTable.java
@@ -0,0 +1,146 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Collection;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * A table which forwards all its method calls to another table. Subclasses
+ * should override one or more methods to modify the behavior of the backing
+ * map as desired per the <a
+ * href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
+ *
+ * @author Gregory Kick
+ * @since 7.0
+ */
+@Beta
+@GwtCompatible
+public abstract class ForwardingTable<R, C, V> extends ForwardingObject
+    implements Table<R, C, V> {
+  /** Constructor for use by subclasses. */
+  protected ForwardingTable() {}
+
+  @Override protected abstract Table<R, C, V> delegate();
+
+  @Override
+  public Set<Cell<R, C, V>> cellSet() {
+    return delegate().cellSet();
+  }
+
+  @Override
+  public void clear() {
+    delegate().clear();
+  }
+
+  @Override
+  public Map<R, V> column(C columnKey) {
+    return delegate().column(columnKey);
+  }
+
+  @Override
+  public Set<C> columnKeySet() {
+    return delegate().columnKeySet();
+  }
+
+  @Override
+  public Map<C, Map<R, V>> columnMap() {
+    return delegate().columnMap();
+  }
+
+  @Override
+  public boolean contains(Object rowKey, Object columnKey) {
+    return delegate().contains(rowKey, columnKey);
+  }
+
+  @Override
+  public boolean containsColumn(Object columnKey) {
+    return delegate().containsColumn(columnKey);
+  }
+
+  @Override
+  public boolean containsRow(Object rowKey) {
+    return delegate().containsRow(rowKey);
+  }
+
+  @Override
+  public boolean containsValue(Object value) {
+    return delegate().containsValue(value);
+  }
+
+  @Override
+  public V get(Object rowKey, Object columnKey) {
+    return delegate().get(rowKey, columnKey);
+  }
+
+  @Override
+  public boolean isEmpty() {
+    return delegate().isEmpty();
+  }
+
+  @Override
+  public V put(R rowKey, C columnKey, V value) {
+    return delegate().put(rowKey, columnKey, value);
+  }
+
+  @Override
+  public void putAll(Table<? extends R, ? extends C, ? extends V> table) {
+    delegate().putAll(table);
+  }
+
+  @Override
+  public V remove(Object rowKey, Object columnKey) {
+    return delegate().remove(rowKey, columnKey);
+  }
+
+  @Override
+  public Map<C, V> row(R rowKey) {
+    return delegate().row(rowKey);
+  }
+
+  @Override
+  public Set<R> rowKeySet() {
+    return delegate().rowKeySet();
+  }
+
+  @Override
+  public Map<R, Map<C, V>> rowMap() {
+    return delegate().rowMap();
+  }
+
+  @Override
+  public int size() {
+    return delegate().size();
+  }
+
+  @Override
+  public Collection<V> values() {
+    return delegate().values();
+  }
+
+  @Override public boolean equals(Object obj) {
+    return (obj == this) || delegate().equals(obj);
+  }
+
+  @Override public int hashCode() {
+    return delegate().hashCode();
+  }
+}
diff --git a/guava/src/com/google/common/collect/GeneralRange.java b/guava/src/com/google/common/collect/GeneralRange.java
new file mode 100644
index 0000000..5a3980f
--- /dev/null
+++ b/guava/src/com/google/common/collect/GeneralRange.java
@@ -0,0 +1,288 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ * 
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.collect.BoundType.CLOSED;
+import static com.google.common.collect.BoundType.OPEN;
+
+import java.io.Serializable;
+import java.util.Comparator;
+
+import javax.annotation.Nullable;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Objects;
+
+/**
+ * A generalized interval on any ordering, for internal use. Supports {@code null}. Unlike
+ * {@link Range}, this allows the use of an arbitrary comparator. This is designed for use in the
+ * implementation of subcollections of sorted collection types.
+ * 
+ * <p>Whenever possible, use {@code Range} instead, which is better supported.
+ * 
+ * @author Louis Wasserman
+ */
+@GwtCompatible(serializable = true)
+final class GeneralRange<T> implements Serializable {
+  /**
+   * Converts a Range to a GeneralRange.
+   */
+  static <T extends Comparable> GeneralRange<T> from(Range<T> range) {
+    @Nullable
+    T lowerEndpoint = range.hasLowerBound() ? range.lowerEndpoint() : null;
+    BoundType lowerBoundType = range.hasLowerBound() ? range.lowerBoundType() : OPEN;
+
+    @Nullable
+    T upperEndpoint = range.hasUpperBound() ? range.upperEndpoint() : null;
+    BoundType upperBoundType = range.hasUpperBound() ? range.upperBoundType() : OPEN;
+    return new GeneralRange<T>(Ordering.natural(), range.hasLowerBound(), lowerEndpoint,
+        lowerBoundType, range.hasUpperBound(), upperEndpoint, upperBoundType);
+  }
+
+  /**
+   * Returns the whole range relative to the specified comparator.
+   */
+  static <T> GeneralRange<T> all(Comparator<? super T> comparator) {
+    return new GeneralRange<T>(comparator, false, null, OPEN, false, null, OPEN);
+  }
+
+  /**
+   * Returns everything above the endpoint relative to the specified comparator, with the specified
+   * endpoint behavior.
+   */
+  static <T> GeneralRange<T> downTo(Comparator<? super T> comparator, @Nullable T endpoint,
+      BoundType boundType) {
+    return new GeneralRange<T>(comparator, true, endpoint, boundType, false, null, OPEN);
+  }
+
+  /**
+   * Returns everything below the endpoint relative to the specified comparator, with the specified
+   * endpoint behavior.
+   */
+  static <T> GeneralRange<T> upTo(Comparator<? super T> comparator, @Nullable T endpoint,
+      BoundType boundType) {
+    return new GeneralRange<T>(comparator, false, null, OPEN, true, endpoint, boundType);
+  }
+
+  /**
+   * Returns everything between the endpoints relative to the specified comparator, with the
+   * specified endpoint behavior.
+   */
+  static <T> GeneralRange<T> range(Comparator<? super T> comparator, @Nullable T lower,
+      BoundType lowerType, @Nullable T upper, BoundType upperType) {
+    return new GeneralRange<T>(comparator, true, lower, lowerType, true, upper, upperType);
+  }
+
+  private final Comparator<? super T> comparator;
+  private final boolean hasLowerBound;
+  @Nullable
+  private final T lowerEndpoint;
+  private final BoundType lowerBoundType;
+  private final boolean hasUpperBound;
+  @Nullable
+  private final T upperEndpoint;
+  private final BoundType upperBoundType;
+
+  private GeneralRange(Comparator<? super T> comparator, boolean hasLowerBound,
+      @Nullable T lowerEndpoint, BoundType lowerBoundType, boolean hasUpperBound,
+      @Nullable T upperEndpoint, BoundType upperBoundType) {
+    this.comparator = checkNotNull(comparator);
+    this.hasLowerBound = hasLowerBound;
+    this.hasUpperBound = hasUpperBound;
+    this.lowerEndpoint = lowerEndpoint;
+    this.lowerBoundType = checkNotNull(lowerBoundType);
+    this.upperEndpoint = upperEndpoint;
+    this.upperBoundType = checkNotNull(upperBoundType);
+
+    if (hasLowerBound) {
+      comparator.compare(lowerEndpoint, lowerEndpoint);
+    }
+    if (hasUpperBound) {
+      comparator.compare(upperEndpoint, upperEndpoint);
+    }
+    if (hasLowerBound && hasUpperBound) {
+      int cmp = comparator.compare(lowerEndpoint, upperEndpoint);
+      // be consistent with Range
+      checkArgument(cmp <= 0, "lowerEndpoint (%s) > upperEndpoint (%s)", lowerEndpoint,
+          upperEndpoint);
+      if (cmp == 0) {
+        checkArgument(lowerBoundType != OPEN | upperBoundType != OPEN);
+      }
+    }
+  }
+
+  Comparator<? super T> comparator() {
+    return comparator;
+  }
+
+  boolean hasLowerBound() {
+    return hasLowerBound;
+  }
+
+  boolean hasUpperBound() {
+    return hasUpperBound;
+  }
+
+  boolean isEmpty() {
+    return (hasUpperBound() && tooLow(upperEndpoint))
+        || (hasLowerBound() && tooHigh(lowerEndpoint));
+  }
+
+  boolean tooLow(@Nullable T t) {
+    if (!hasLowerBound()) {
+      return false;
+    }
+    T lbound = lowerEndpoint;
+    int cmp = comparator.compare(t, lbound);
+    return cmp < 0 | (cmp == 0 & lowerBoundType == OPEN);
+  }
+
+  boolean tooHigh(@Nullable T t) {
+    if (!hasUpperBound()) {
+      return false;
+    }
+    T ubound = upperEndpoint;
+    int cmp = comparator.compare(t, ubound);
+    return cmp > 0 | (cmp == 0 & upperBoundType == OPEN);
+  }
+
+  boolean contains(@Nullable T t) {
+    return !tooLow(t) && !tooHigh(t);
+  }
+
+  /**
+   * Returns the intersection of the two ranges, or an empty range if their intersection is empty.
+   */
+  GeneralRange<T> intersect(GeneralRange<T> other) {
+    checkNotNull(other);
+    checkArgument(comparator.equals(other.comparator));
+
+    boolean hasLowBound = this.hasLowerBound;
+    @Nullable
+    T lowEnd = lowerEndpoint;
+    BoundType lowType = lowerBoundType;
+    if (!hasLowerBound()) {
+      hasLowBound = other.hasLowerBound;
+      lowEnd = other.lowerEndpoint;
+      lowType = other.lowerBoundType;
+    } else if (other.hasLowerBound()) {
+      int cmp = comparator.compare(lowerEndpoint, other.lowerEndpoint);
+      if (cmp < 0 || (cmp == 0 && other.lowerBoundType == OPEN)) {
+        lowEnd = other.lowerEndpoint;
+        lowType = other.lowerBoundType;
+      }
+    }
+
+    boolean hasUpBound = this.hasUpperBound;
+    @Nullable
+    T upEnd = upperEndpoint;
+    BoundType upType = upperBoundType;
+    if (!hasUpperBound()) {
+      hasUpBound = other.hasUpperBound;
+      upEnd = other.upperEndpoint;
+      upType = other.upperBoundType;
+    } else if (other.hasUpperBound()) {
+      int cmp = comparator.compare(upperEndpoint, other.upperEndpoint);
+      if (cmp > 0 || (cmp == 0 && other.upperBoundType == OPEN)) {
+        upEnd = other.upperEndpoint;
+        upType = other.upperBoundType;
+      }
+    }
+
+    if (hasLowBound && hasUpBound) {
+      int cmp = comparator.compare(lowEnd, upEnd);
+      if (cmp > 0 || (cmp == 0 && lowType == OPEN && upType == OPEN)) {
+        // force allowed empty range
+        lowEnd = upEnd;
+        lowType = OPEN;
+        upType = CLOSED;
+      }
+    }
+
+    return new GeneralRange<T>(comparator, hasLowBound, lowEnd, lowType, hasUpBound, upEnd, upType);
+  }
+
+  @Override
+  public boolean equals(@Nullable Object obj) {
+    if (obj instanceof GeneralRange) {
+      GeneralRange<?> r = (GeneralRange<?>) obj;
+      return comparator.equals(r.comparator) && hasLowerBound == r.hasLowerBound
+          && hasUpperBound == r.hasUpperBound && lowerBoundType.equals(r.lowerBoundType)
+          && upperBoundType.equals(r.upperBoundType)
+          && Objects.equal(lowerEndpoint, r.lowerEndpoint)
+          && Objects.equal(upperEndpoint, r.upperEndpoint);
+    }
+    return false;
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hashCode(comparator, lowerEndpoint, lowerBoundType, upperEndpoint,
+        upperBoundType);
+  }
+
+  private transient GeneralRange<T> reverse;
+
+  /**
+   * Returns the same range relative to the reversed comparator.
+   */
+  public GeneralRange<T> reverse() {
+    GeneralRange<T> result = reverse;
+    if (result == null) {
+      result =
+          new GeneralRange<T>(Ordering.from(comparator).reverse(), hasUpperBound, upperEndpoint,
+              upperBoundType, hasLowerBound, lowerEndpoint, lowerBoundType);
+      result.reverse = this;
+      return this.reverse = result;
+    }
+    return result;
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder builder = new StringBuilder();
+    builder.append(comparator).append(":");
+    switch (lowerBoundType) {
+      case CLOSED:
+        builder.append('[');
+        break;
+      case OPEN:
+        builder.append('(');
+        break;
+    }
+    if (hasLowerBound()) {
+      builder.append(lowerEndpoint);
+    } else {
+      builder.append("-\u221e");
+    }
+    builder.append(',');
+    if (hasUpperBound()) {
+      builder.append(upperEndpoint);
+    } else {
+      builder.append("\u221e");
+    }
+    switch (upperBoundType) {
+      case CLOSED:
+        builder.append(']');
+        break;
+      case OPEN:
+        builder.append(')');
+        break;
+    }
+    return builder.toString();
+  }
+}
diff --git a/guava/src/com/google/common/collect/GenericMapMaker.java b/guava/src/com/google/common/collect/GenericMapMaker.java
new file mode 100644
index 0000000..8c5bbeb
--- /dev/null
+++ b/guava/src/com/google/common/collect/GenericMapMaker.java
@@ -0,0 +1,166 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.base.Equivalence;
+import com.google.common.base.Function;
+import com.google.common.base.Objects;
+import com.google.common.collect.MapMaker.RemovalListener;
+import com.google.common.collect.MapMaker.RemovalNotification;
+
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * A class exactly like {@link MapMaker}, except restricted in the types of maps it can build.
+ * For the most part, you should probably just ignore the existence of this class.
+ *
+ * @param <K0> the base type for all key types of maps built by this map maker
+ * @param <V0> the base type for all value types of maps built by this map maker
+ * @author Kevin Bourrillion
+ * @since 7.0
+ */
+@Beta
+@GwtCompatible(emulated = true)
+public abstract class GenericMapMaker<K0, V0> {
+  @GwtIncompatible("To be supported")
+  enum NullListener implements RemovalListener<Object, Object> {
+    INSTANCE;
+
+    @Override
+    public void onRemoval(RemovalNotification<Object, Object> notification) {}
+  }
+
+  // Set by MapMaker, but sits in this class to preserve the type relationship
+  @GwtIncompatible("To be supported")
+  RemovalListener<K0, V0> removalListener;
+
+  // No subclasses but our own
+  GenericMapMaker() {}
+
+  /**
+   * See {@link MapMaker#keyEquivalence}.
+   */
+  @GwtIncompatible("To be supported")
+  abstract GenericMapMaker<K0, V0> keyEquivalence(Equivalence<Object> equivalence);
+
+  /**
+   * See {@link MapMaker#valueEquivalence}.
+   */
+  @GwtIncompatible("To be supported")
+  abstract GenericMapMaker<K0, V0> valueEquivalence(Equivalence<Object> equivalence);
+
+  /**
+   * See {@link MapMaker#initialCapacity}.
+   */
+  public abstract GenericMapMaker<K0, V0> initialCapacity(int initialCapacity);
+
+  /**
+   * See {@link MapMaker#maximumSize}.
+   */
+  abstract GenericMapMaker<K0, V0> maximumSize(int maximumSize);
+
+  /**
+   * See {@link MapMaker#strongKeys}.
+   */
+  abstract GenericMapMaker<K0, V0> strongKeys();
+
+  /**
+   * See {@link MapMaker#concurrencyLevel}.
+   */
+  public abstract GenericMapMaker<K0, V0> concurrencyLevel(int concurrencyLevel);
+
+  /**
+   * See {@link MapMaker#weakKeys}.
+   */
+  @GwtIncompatible("java.lang.ref.WeakReference")
+  public abstract GenericMapMaker<K0, V0> weakKeys();
+
+  /**
+   * See {@link MapMaker#strongValues}.
+   */
+  abstract GenericMapMaker<K0, V0> strongValues();
+
+  /**
+   * See {@link MapMaker#softKeys}.
+   */
+  @Deprecated
+  @GwtIncompatible("java.lang.ref.SoftReference")
+  public abstract GenericMapMaker<K0, V0> softKeys();
+
+  /**
+   * See {@link MapMaker#weakValues}.
+   */
+  @GwtIncompatible("java.lang.ref.WeakReference")
+  public abstract GenericMapMaker<K0, V0> weakValues();
+
+  /**
+   * See {@link MapMaker#softValues}.
+   */
+  @GwtIncompatible("java.lang.ref.SoftReference")
+  public abstract GenericMapMaker<K0, V0> softValues();
+
+  /**
+   * See {@link MapMaker#expiration}.
+   */
+  @Deprecated
+  public
+  abstract GenericMapMaker<K0, V0> expiration(long duration, TimeUnit unit);
+
+  /**
+   * See {@link MapMaker#expireAfterWrite}.
+   */
+  abstract GenericMapMaker<K0, V0> expireAfterWrite(long duration, TimeUnit unit);
+
+  /**
+   * See {@link MapMaker#expireAfterAccess}.
+   */
+  @GwtIncompatible("To be supported")
+  abstract GenericMapMaker<K0, V0> expireAfterAccess(long duration, TimeUnit unit);
+
+  /*
+   * Note that MapMaker's removalListener() is not here, because once you're interacting with a
+   * GenericMapMaker you've already called that, and shouldn't be calling it again.
+   */
+
+  @SuppressWarnings("unchecked") // safe covariant cast
+  @GwtIncompatible("To be supported")
+  <K extends K0, V extends V0> RemovalListener<K, V> getRemovalListener() {
+    return (RemovalListener<K, V>) Objects.firstNonNull(removalListener, NullListener.INSTANCE);
+  }
+
+  /**
+   * See {@link MapMaker#makeMap}.
+   */
+  public abstract <K extends K0, V extends V0> ConcurrentMap<K, V> makeMap();
+
+  /**
+   * See {@link MapMaker#makeCustomMap}.
+   */
+  @GwtIncompatible("MapMakerInternalMap")
+  abstract <K, V> MapMakerInternalMap<K, V> makeCustomMap();
+
+  /**
+   * See {@link MapMaker#makeComputingMap}.
+   */
+  @Deprecated
+  public abstract <K extends K0, V extends V0> ConcurrentMap<K, V> makeComputingMap(
+      Function<? super K, ? extends V> computingFunction);
+}
diff --git a/guava/src/com/google/common/collect/GwtTransient.java b/guava/src/com/google/common/collect/GwtTransient.java
new file mode 100644
index 0000000..a9a15e9
--- /dev/null
+++ b/guava/src/com/google/common/collect/GwtTransient.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+/**
+ * Private replacement for {@link com.google.gwt.user.client.rpc.GwtTransient}
+ * to work around build-system quirks. This annotation should be used
+ * <b>only</b> in {@code com.google.common.collect}.
+ */
+@Documented
+@GwtCompatible
+@Retention(RUNTIME)
+@Target(FIELD)
+@interface GwtTransient {
+}
diff --git a/guava/src/com/google/common/collect/HashBasedTable.java b/guava/src/com/google/common/collect/HashBasedTable.java
new file mode 100644
index 0000000..8c92ec1
--- /dev/null
+++ b/guava/src/com/google/common/collect/HashBasedTable.java
@@ -0,0 +1,146 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkArgument;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Supplier;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.annotation.Nullable;
+
+/**
+ * Implementation of {@link Table} using hash tables.
+ *
+ * <p>The views returned by {@link #column}, {@link #columnKeySet()}, and {@link
+ * #columnMap()} have iterators that don't support {@code remove()}. Otherwise,
+ * all optional operations are supported. Null row keys, columns keys, and
+ * values are not supported.
+ *
+ * <p>Lookups by row key are often faster than lookups by column key, because
+ * the data is stored in a {@code Map<R, Map<C, V>>}. A method call like {@code
+ * column(columnKey).get(rowKey)} still runs quickly, since the row key is
+ * provided. However, {@code column(columnKey).size()} takes longer, since an
+ * iteration across all row keys occurs.
+ *
+ * <p>Note that this implementation is not synchronized. If multiple threads
+ * access this table concurrently and one of the threads modifies the table, it
+ * must be synchronized externally.
+ *
+ * @author Jared Levy
+ * @since 7.0
+ */
+@GwtCompatible(serializable = true)
+@Beta
+public class HashBasedTable<R, C, V> extends StandardTable<R, C, V> {
+  private static class Factory<C, V>
+      implements Supplier<Map<C, V>>, Serializable {
+    final int expectedSize;
+    Factory(int expectedSize) {
+      this.expectedSize = expectedSize;
+    }
+    @Override
+    public Map<C, V> get() {
+      return Maps.newHashMapWithExpectedSize(expectedSize);
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  /**
+   * Creates an empty {@code HashBasedTable}.
+   */
+  public static <R, C, V> HashBasedTable<R, C, V> create() {
+    return new HashBasedTable<R, C, V>(
+        new HashMap<R, Map<C, V>>(), new Factory<C, V>(0));
+  }
+
+  /**
+   * Creates an empty {@code HashBasedTable} with the specified map sizes.
+   *
+   * @param expectedRows the expected number of distinct row keys
+   * @param expectedCellsPerRow the expected number of column key / value
+   *     mappings in each row
+   * @throws IllegalArgumentException if {@code expectedRows} or {@code
+   *     expectedCellsPerRow} is negative
+   */
+  public static <R, C, V> HashBasedTable<R, C, V> create(
+      int expectedRows, int expectedCellsPerRow) {
+    checkArgument(expectedCellsPerRow >= 0);
+    Map<R, Map<C, V>> backingMap =
+        Maps.newHashMapWithExpectedSize(expectedRows);
+    return new HashBasedTable<R, C, V>(
+        backingMap, new Factory<C, V>(expectedCellsPerRow));
+  }
+
+  /**
+   * Creates a {@code HashBasedTable} with the same mappings as the specified
+   * table.
+   *
+   * @param table the table to copy
+   * @throws NullPointerException if any of the row keys, column keys, or values
+   *     in {@code table} is null
+   */
+  public static <R, C, V> HashBasedTable<R, C, V> create(
+      Table<? extends R, ? extends C, ? extends V> table) {
+    HashBasedTable<R, C, V> result = create();
+    result.putAll(table);
+    return result;
+  }
+
+  HashBasedTable(Map<R, Map<C, V>> backingMap, Factory<C, V> factory) {
+    super(backingMap, factory);
+  }
+
+  // Overriding so NullPointerTester test passes.
+
+  @Override public boolean contains(
+      @Nullable Object rowKey, @Nullable Object columnKey) {
+    return super.contains(rowKey, columnKey);
+  }
+
+  @Override public boolean containsColumn(@Nullable Object columnKey) {
+    return super.containsColumn(columnKey);
+  }
+
+  @Override public boolean containsRow(@Nullable Object rowKey) {
+    return super.containsRow(rowKey);
+  }
+
+  @Override public boolean containsValue(@Nullable Object value) {
+    return super.containsValue(value);
+  }
+
+  @Override public V get(@Nullable Object rowKey, @Nullable Object columnKey) {
+    return super.get(rowKey, columnKey);
+  }
+
+  @Override public boolean equals(@Nullable Object obj) {
+    return super.equals(obj);
+  }
+
+  @Override public V remove(
+      @Nullable Object rowKey, @Nullable Object columnKey) {
+    return super.remove(rowKey, columnKey);
+  }
+
+  private static final long serialVersionUID = 0;
+}
diff --git a/guava/src/com/google/common/collect/HashBiMap.java b/guava/src/com/google/common/collect/HashBiMap.java
new file mode 100644
index 0000000..26d11e1
--- /dev/null
+++ b/guava/src/com/google/common/collect/HashBiMap.java
@@ -0,0 +1,114 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.annotation.Nullable;
+
+/**
+ * A {@link BiMap} backed by two {@link HashMap} instances. This implementation
+ * allows null keys and values. A {@code HashBiMap} and its inverse are both
+ * serializable.
+ *
+ * @author Mike Bostock
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible(emulated = true)
+public final class HashBiMap<K, V> extends AbstractBiMap<K, V> {
+
+  /**
+   * Returns a new, empty {@code HashBiMap} with the default initial capacity
+   * (16).
+   */
+  public static <K, V> HashBiMap<K, V> create() {
+    return new HashBiMap<K, V>();
+  }
+
+  /**
+   * Constructs a new, empty bimap with the specified expected size.
+   *
+   * @param expectedSize the expected number of entries
+   * @throws IllegalArgumentException if the specified expected size is
+   *     negative
+   */
+  public static <K, V> HashBiMap<K, V> create(int expectedSize) {
+    return new HashBiMap<K, V>(expectedSize);
+  }
+
+  /**
+   * Constructs a new bimap containing initial values from {@code map}. The
+   * bimap is created with an initial capacity sufficient to hold the mappings
+   * in the specified map.
+   */
+  public static <K, V> HashBiMap<K, V> create(
+      Map<? extends K, ? extends V> map) {
+    HashBiMap<K, V> bimap = create(map.size());
+    bimap.putAll(map);
+    return bimap;
+  }
+
+  private HashBiMap() {
+    super(new HashMap<K, V>(), new HashMap<V, K>());
+  }
+
+  private HashBiMap(int expectedSize) {
+    super(
+        Maps.<K, V>newHashMapWithExpectedSize(expectedSize),
+        Maps.<V, K>newHashMapWithExpectedSize(expectedSize));
+  }
+
+  // Override these two methods to show that keys and values may be null
+
+  @Override public V put(@Nullable K key, @Nullable V value) {
+    return super.put(key, value);
+  }
+
+  @Override public V forcePut(@Nullable K key, @Nullable V value) {
+    return super.forcePut(key, value);
+  }
+
+  /**
+   * @serialData the number of entries, first key, first value, second key,
+   *     second value, and so on.
+   */
+  @GwtIncompatible("java.io.ObjectOutputStream")
+  private void writeObject(ObjectOutputStream stream) throws IOException {
+    stream.defaultWriteObject();
+    Serialization.writeMap(this, stream);
+  }
+
+  @GwtIncompatible("java.io.ObjectInputStream")
+  private void readObject(ObjectInputStream stream)
+      throws IOException, ClassNotFoundException {
+    stream.defaultReadObject();
+    int size = Serialization.readCount(stream);
+    setDelegates(Maps.<K, V>newHashMapWithExpectedSize(size),
+        Maps.<V, K>newHashMapWithExpectedSize(size));
+    Serialization.populateMap(this, stream, size);
+  }
+
+  @GwtIncompatible("Not needed in emulated source")
+  private static final long serialVersionUID = 0;
+}
diff --git a/guava/src/com/google/common/collect/HashMultimap.java b/guava/src/com/google/common/collect/HashMultimap.java
new file mode 100644
index 0000000..d347ff1
--- /dev/null
+++ b/guava/src/com/google/common/collect/HashMultimap.java
@@ -0,0 +1,142 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Preconditions;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Implementation of {@link Multimap} using hash tables.
+ *
+ * <p>The multimap does not store duplicate key-value pairs. Adding a new
+ * key-value pair equal to an existing key-value pair has no effect.
+ *
+ * <p>Keys and values may be null. All optional multimap methods are supported,
+ * and all returned views are modifiable.
+ *
+ * <p>This class is not threadsafe when any concurrent operations update the
+ * multimap. Concurrent read operations will work correctly. To allow concurrent
+ * update operations, wrap your multimap with a call to {@link
+ * Multimaps#synchronizedSetMultimap}.
+ *
+ * @author Jared Levy
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible(serializable = true, emulated = true)
+public final class HashMultimap<K, V> extends AbstractSetMultimap<K, V> {
+  private static final int DEFAULT_VALUES_PER_KEY = 8;
+
+  @VisibleForTesting
+  transient int expectedValuesPerKey = DEFAULT_VALUES_PER_KEY;
+
+  /**
+   * Creates a new, empty {@code HashMultimap} with the default initial
+   * capacities.
+   */
+  public static <K, V> HashMultimap<K, V> create() {
+    return new HashMultimap<K, V>();
+  }
+
+  /**
+   * Constructs an empty {@code HashMultimap} with enough capacity to hold the
+   * specified numbers of keys and values without rehashing.
+   *
+   * @param expectedKeys the expected number of distinct keys
+   * @param expectedValuesPerKey the expected average number of values per key
+   * @throws IllegalArgumentException if {@code expectedKeys} or {@code
+   *      expectedValuesPerKey} is negative
+   */
+  public static <K, V> HashMultimap<K, V> create(
+      int expectedKeys, int expectedValuesPerKey) {
+    return new HashMultimap<K, V>(expectedKeys, expectedValuesPerKey);
+  }
+
+  /**
+   * Constructs a {@code HashMultimap} with the same mappings as the specified
+   * multimap. If a key-value mapping appears multiple times in the input
+   * multimap, it only appears once in the constructed multimap.
+   *
+   * @param multimap the multimap whose contents are copied to this multimap
+   */
+  public static <K, V> HashMultimap<K, V> create(
+      Multimap<? extends K, ? extends V> multimap) {
+    return new HashMultimap<K, V>(multimap);
+  }
+
+  private HashMultimap() {
+    super(new HashMap<K, Collection<V>>());
+  }
+
+  private HashMultimap(int expectedKeys, int expectedValuesPerKey) {
+    super(Maps.<K, Collection<V>>newHashMapWithExpectedSize(expectedKeys));
+    Preconditions.checkArgument(expectedValuesPerKey >= 0);
+    this.expectedValuesPerKey = expectedValuesPerKey;
+  }
+
+  private HashMultimap(Multimap<? extends K, ? extends V> multimap) {
+    super(Maps.<K, Collection<V>>newHashMapWithExpectedSize(
+        multimap.keySet().size()));
+    putAll(multimap);
+  }
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>Creates an empty {@code HashSet} for a collection of values for one key.
+   *
+   * @return a new {@code HashSet} containing a collection of values for one key
+   */
+  @Override Set<V> createCollection() {
+    return Sets.<V>newHashSetWithExpectedSize(expectedValuesPerKey);
+  }
+
+  /**
+   * @serialData expectedValuesPerKey, number of distinct keys, and then for
+   *     each distinct key: the key, number of values for that key, and the
+   *     key's values
+   */
+  @GwtIncompatible("java.io.ObjectOutputStream")
+  private void writeObject(ObjectOutputStream stream) throws IOException {
+    stream.defaultWriteObject();
+    stream.writeInt(expectedValuesPerKey);
+    Serialization.writeMultimap(this, stream);
+  }
+
+  @GwtIncompatible("java.io.ObjectInputStream")
+  private void readObject(ObjectInputStream stream)
+      throws IOException, ClassNotFoundException {
+    stream.defaultReadObject();
+    expectedValuesPerKey = stream.readInt();
+    int distinctKeys = Serialization.readCount(stream);
+    Map<K, Collection<V>> map = Maps.newHashMapWithExpectedSize(distinctKeys);
+    setMap(map);
+    Serialization.populateMultimap(this, stream, distinctKeys);
+  }
+
+  @GwtIncompatible("Not needed in emulated source")
+  private static final long serialVersionUID = 0;
+}
diff --git a/guava/src/com/google/common/collect/HashMultiset.java b/guava/src/com/google/common/collect/HashMultiset.java
new file mode 100644
index 0000000..51cf7fb
--- /dev/null
+++ b/guava/src/com/google/common/collect/HashMultiset.java
@@ -0,0 +1,101 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.HashMap;
+
+/**
+ * Multiset implementation backed by a {@link HashMap}.
+ *
+ * @author Kevin Bourrillion
+ * @author Jared Levy
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible(serializable = true, emulated = true)
+public final class HashMultiset<E> extends AbstractMapBasedMultiset<E> {
+
+  /**
+   * Creates a new, empty {@code HashMultiset} using the default initial
+   * capacity.
+   */
+  public static <E> HashMultiset<E> create() {
+    return new HashMultiset<E>();
+  }
+
+  /**
+   * Creates a new, empty {@code HashMultiset} with the specified expected
+   * number of distinct elements.
+   *
+   * @param distinctElements the expected number of distinct elements
+   * @throws IllegalArgumentException if {@code distinctElements} is negative
+   */
+  public static <E> HashMultiset<E> create(int distinctElements) {
+    return new HashMultiset<E>(distinctElements);
+  }
+
+  /**
+   * Creates a new {@code HashMultiset} containing the specified elements.
+   * 
+   * <p>This implementation is highly efficient when {@code elements} is itself
+   * a {@link Multiset}.
+   * 
+   * @param elements the elements that the multiset should contain
+   */
+  public static <E> HashMultiset<E> create(Iterable<? extends E> elements) {
+    HashMultiset<E> multiset =
+        create(Multisets.inferDistinctElements(elements));
+    Iterables.addAll(multiset, elements);
+    return multiset;
+  }
+
+  private HashMultiset() {
+    super(new HashMap<E, Count>());
+  }
+
+  private HashMultiset(int distinctElements) {
+    super(Maps.<E, Count>newHashMapWithExpectedSize(distinctElements));
+  }
+
+  /**
+   * @serialData the number of distinct elements, the first element, its count,
+   *     the second element, its count, and so on
+   */
+  @GwtIncompatible("java.io.ObjectOutputStream")
+  private void writeObject(ObjectOutputStream stream) throws IOException {
+    stream.defaultWriteObject();
+    Serialization.writeMultiset(this, stream);
+  }
+
+  @GwtIncompatible("java.io.ObjectInputStream")
+  private void readObject(ObjectInputStream stream)
+      throws IOException, ClassNotFoundException {
+    stream.defaultReadObject();
+    int distinctElements = Serialization.readCount(stream);
+    setBackingMap(
+        Maps.<E, Count>newHashMapWithExpectedSize(distinctElements));
+    Serialization.populateMultiset(this, stream, distinctElements);
+  }
+
+  @GwtIncompatible("Not needed in emulated source.")
+  private static final long serialVersionUID = 0;
+}
diff --git a/guava/src/com/google/common/collect/Hashing.java b/guava/src/com/google/common/collect/Hashing.java
new file mode 100644
index 0000000..9c5f6bc
--- /dev/null
+++ b/guava/src/com/google/common/collect/Hashing.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+/**
+ * Static methods for implementing hash-based collections.
+ *
+ * @author Kevin Bourrillion
+ * @author Jesse Wilson
+ */
+@GwtCompatible
+final class Hashing {
+  private Hashing() {}
+
+  /*
+   * This method was written by Doug Lea with assistance from members of JCP
+   * JSR-166 Expert Group and released to the public domain, as explained at
+   * http://creativecommons.org/licenses/publicdomain
+   * 
+   * As of 2010/06/11, this method is identical to the (package private) hash
+   * method in OpenJDK 7's java.util.HashMap class.
+   */
+  static int smear(int hashCode) {
+    hashCode ^= (hashCode >>> 20) ^ (hashCode >>> 12);
+    return hashCode ^ (hashCode >>> 7) ^ (hashCode >>> 4);
+  }
+}
diff --git a/guava/src/com/google/common/collect/ImmutableAsList.java b/guava/src/com/google/common/collect/ImmutableAsList.java
new file mode 100644
index 0000000..9eb87de
--- /dev/null
+++ b/guava/src/com/google/common/collect/ImmutableAsList.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.io.InvalidObjectException;
+import java.io.ObjectInputStream;
+import java.io.Serializable;
+
+/**
+ * List returned by {@link ImmutableCollection#asList} when the collection isn't
+ * an {@link ImmutableList} or an {@link ImmutableSortedSet}.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible(serializable = true, emulated = true)
+@SuppressWarnings("serial")
+final class ImmutableAsList<E> extends RegularImmutableList<E> {
+  private final transient ImmutableCollection<E> collection;
+
+  ImmutableAsList(Object[] array, ImmutableCollection<E> collection) {
+    super(array, 0, array.length);
+    this.collection = collection;
+  }
+
+  @Override public boolean contains(Object target) {
+    // The collection's contains() is at least as fast as RegularImmutableList's
+    // and is often faster.
+    return collection.contains(target);
+  }
+
+  /**
+   * Serialized form that leads to the same performance as the original list.
+   */
+  static class SerializedForm implements Serializable {
+    final ImmutableCollection<?> collection;
+    SerializedForm(ImmutableCollection<?> collection) {
+      this.collection = collection;
+    }
+    Object readResolve() {
+      return collection.asList();
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  private void readObject(ObjectInputStream stream)
+      throws InvalidObjectException {
+    throw new InvalidObjectException("Use SerializedForm");
+  }
+
+  @Override Object writeReplace() {
+    return new SerializedForm(collection);
+  }
+}
diff --git a/guava/src/com/google/common/collect/ImmutableBiMap.java b/guava/src/com/google/common/collect/ImmutableBiMap.java
new file mode 100644
index 0000000..9d8e144
--- /dev/null
+++ b/guava/src/com/google/common/collect/ImmutableBiMap.java
@@ -0,0 +1,325 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Map;
+
+import javax.annotation.Nullable;
+
+/**
+ * An immutable {@link BiMap} with reliable user-specified iteration order. Does
+ * not permit null keys or values. An {@code ImmutableBiMap} and its inverse
+ * have the same iteration ordering.
+ *
+ * <p>An instance of {@code ImmutableBiMap} contains its own data and will
+ * <i>never</i> change. {@code ImmutableBiMap} is convenient for
+ * {@code public static final} maps ("constant maps") and also lets you easily
+ * make a "defensive copy" of a bimap provided to your class by a caller.
+ *
+ * <p><b>Note:</b> Although this class is not final, it cannot be subclassed as
+ * it has no public or protected constructors. Thus, instances of this class are
+ * guaranteed to be immutable.
+ *
+ * @author Jared Levy
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible(serializable = true, emulated = true)
+public abstract class ImmutableBiMap<K, V> extends ImmutableMap<K, V>
+    implements BiMap<K, V> {
+
+  private static final ImmutableBiMap<Object, Object> EMPTY_IMMUTABLE_BIMAP
+      = new EmptyBiMap();
+
+  /**
+   * Returns the empty bimap.
+   */
+  // Casting to any type is safe because the set will never hold any elements.
+  @SuppressWarnings("unchecked")
+  public static <K, V> ImmutableBiMap<K, V> of() {
+    return (ImmutableBiMap<K, V>) EMPTY_IMMUTABLE_BIMAP;
+  }
+
+  /**
+   * Returns an immutable bimap containing a single entry.
+   */
+  public static <K, V> ImmutableBiMap<K, V> of(K k1, V v1) {
+    return new RegularImmutableBiMap<K, V>(ImmutableMap.of(k1, v1));
+  }
+
+  /**
+   * Returns an immutable map containing the given entries, in order.
+   *
+   * @throws IllegalArgumentException if duplicate keys or values are added
+   */
+  public static <K, V> ImmutableBiMap<K, V> of(K k1, V v1, K k2, V v2) {
+    return new RegularImmutableBiMap<K, V>(ImmutableMap.of(k1, v1, k2, v2));
+  }
+
+  /**
+   * Returns an immutable map containing the given entries, in order.
+   *
+   * @throws IllegalArgumentException if duplicate keys or values are added
+   */
+  public static <K, V> ImmutableBiMap<K, V> of(
+      K k1, V v1, K k2, V v2, K k3, V v3) {
+    return new RegularImmutableBiMap<K, V>(ImmutableMap.of(
+        k1, v1, k2, v2, k3, v3));
+  }
+
+  /**
+   * Returns an immutable map containing the given entries, in order.
+   *
+   * @throws IllegalArgumentException if duplicate keys or values are added
+   */
+  public static <K, V> ImmutableBiMap<K, V> of(
+      K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4) {
+    return new RegularImmutableBiMap<K, V>(ImmutableMap.of(
+        k1, v1, k2, v2, k3, v3, k4, v4));
+  }
+
+  /**
+   * Returns an immutable map containing the given entries, in order.
+   *
+   * @throws IllegalArgumentException if duplicate keys or values are added
+   */
+  public static <K, V> ImmutableBiMap<K, V> of(
+      K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5) {
+    return new RegularImmutableBiMap<K, V>(ImmutableMap.of(
+        k1, v1, k2, v2, k3, v3, k4, v4, k5, v5));
+  }
+
+  // looking for of() with > 5 entries? Use the builder instead.
+
+  /**
+   * Returns a new builder. The generated builder is equivalent to the builder
+   * created by the {@link Builder} constructor.
+   */
+  public static <K, V> Builder<K, V> builder() {
+    return new Builder<K, V>();
+  }
+
+  /**
+   * A builder for creating immutable bimap instances, especially {@code public
+   * static final} bimaps ("constant bimaps"). Example: <pre>   {@code
+   *
+   *   static final ImmutableBiMap<String, Integer> WORD_TO_INT =
+   *       new ImmutableBiMap.Builder<String, Integer>()
+   *           .put("one", 1)
+   *           .put("two", 2)
+   *           .put("three", 3)
+   *           .build();}</pre>
+   *
+   * For <i>small</i> immutable bimaps, the {@code ImmutableBiMap.of()} methods
+   * are even more convenient.
+   *
+   * <p>Builder instances can be reused - it is safe to call {@link #build}
+   * multiple times to build multiple bimaps in series. Each bimap is a superset
+   * of the bimaps created before it.
+   *
+   * @since 2.0 (imported from Google Collections Library)
+   */
+  public static final class Builder<K, V> extends ImmutableMap.Builder<K, V> {
+
+    /**
+     * Creates a new builder. The returned builder is equivalent to the builder
+     * generated by {@link ImmutableBiMap#builder}.
+     */
+    public Builder() {}
+
+    /**
+     * Associates {@code key} with {@code value} in the built bimap. Duplicate
+     * keys or values are not allowed, and will cause {@link #build} to fail.
+     */
+    @Override public Builder<K, V> put(K key, V value) {
+      super.put(key, value);
+      return this;
+    }
+
+    /**
+     * Associates all of the given map's keys and values in the built bimap.
+     * Duplicate keys or values are not allowed, and will cause {@link #build}
+     * to fail.
+     *
+     * @throws NullPointerException if any key or value in {@code map} is null
+     */
+    @Override public Builder<K, V> putAll(Map<? extends K, ? extends V> map) {
+      super.putAll(map);
+      return this;
+    }
+
+    /**
+     * Returns a newly-created immutable bimap.
+     *
+     * @throws IllegalArgumentException if duplicate keys or values were added
+     */
+    @Override public ImmutableBiMap<K, V> build() {
+      ImmutableMap<K, V> map = super.build();
+      if (map.isEmpty()) {
+        return of();
+      }
+      return new RegularImmutableBiMap<K, V>(map);
+    }
+  }
+
+  /**
+   * Returns an immutable bimap containing the same entries as {@code map}. If
+   * {@code map} somehow contains entries with duplicate keys (for example, if
+   * it is a {@code SortedMap} whose comparator is not <i>consistent with
+   * equals</i>), the results of this method are undefined.
+   *
+   * <p>Despite the method name, this method attempts to avoid actually copying
+   * the data when it is safe to do so. The exact circumstances under which a
+   * copy will or will not be performed are undocumented and subject to change.
+   *
+   * @throws IllegalArgumentException if two keys have the same value
+   * @throws NullPointerException if any key or value in {@code map} is null
+   */
+  public static <K, V> ImmutableBiMap<K, V> copyOf(
+      Map<? extends K, ? extends V> map) {
+    if (map instanceof ImmutableBiMap) {
+      @SuppressWarnings("unchecked") // safe since map is not writable
+      ImmutableBiMap<K, V> bimap = (ImmutableBiMap<K, V>) map;
+      // TODO(user): if we need to make a copy of a BiMap because the
+      // forward map is a view, don't make a copy of the non-view delegate map
+      if (!bimap.isPartialView()) {
+        return bimap;
+      }
+    }
+
+    if (map.isEmpty()) {
+      return of();
+    }
+
+    ImmutableMap<K, V> immutableMap = ImmutableMap.copyOf(map);
+    return new RegularImmutableBiMap<K, V>(immutableMap);
+  }
+
+  ImmutableBiMap() {}
+
+  abstract ImmutableMap<K, V> delegate();
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>The inverse of an {@code ImmutableBiMap} is another
+   * {@code ImmutableBiMap}.
+   */
+  @Override
+  public abstract ImmutableBiMap<V, K> inverse();
+
+  @Override public boolean containsKey(@Nullable Object key) {
+    return delegate().containsKey(key);
+  }
+
+  @Override public boolean containsValue(@Nullable Object value) {
+    return inverse().containsKey(value);
+  }
+
+  @Override public ImmutableSet<Entry<K, V>> entrySet() {
+    return delegate().entrySet();
+  }
+
+  @Override public V get(@Nullable Object key) {
+    return delegate().get(key);
+  }
+
+  @Override public ImmutableSet<K> keySet() {
+    return delegate().keySet();
+  }
+
+  /**
+   * Returns an immutable set of the values in this map. The values are in the
+   * same order as the parameters used to build this map.
+   */
+  @Override public ImmutableSet<V> values() {
+    return inverse().keySet();
+  }
+
+  /**
+   * Guaranteed to throw an exception and leave the bimap unmodified.
+   *
+   * @throws UnsupportedOperationException always
+   */
+  @Override
+  public V forcePut(K key, V value) {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override public boolean isEmpty() {
+    return delegate().isEmpty();
+  }
+
+  @Override
+  public int size() {
+    return delegate().size();
+  }
+
+  @Override public boolean equals(@Nullable Object object) {
+    return object == this || delegate().equals(object);
+  }
+
+  @Override public int hashCode() {
+    return delegate().hashCode();
+  }
+
+  @Override public String toString() {
+    return delegate().toString();
+  }
+
+  /** Bimap with no mappings. */
+  @SuppressWarnings("serial") // uses writeReplace(), not default serialization
+  static class EmptyBiMap extends ImmutableBiMap<Object, Object> {
+    @Override ImmutableMap<Object, Object> delegate() {
+      return ImmutableMap.of();
+    }
+    @Override public ImmutableBiMap<Object, Object> inverse() {
+      return this;
+    }
+    @Override boolean isPartialView() {
+      return false;
+    }
+    Object readResolve() {
+      return EMPTY_IMMUTABLE_BIMAP; // preserve singleton property
+    }
+  }
+
+  /**
+   * Serialized type for all ImmutableBiMap instances. It captures the logical
+   * contents and they are reconstructed using public factory methods. This
+   * ensures that the implementation types remain as implementation details.
+   *
+   * Since the bimap is immutable, ImmutableBiMap doesn't require special logic
+   * for keeping the bimap and its inverse in sync during serialization, the way
+   * AbstractBiMap does.
+   */
+  private static class SerializedForm extends ImmutableMap.SerializedForm {
+    SerializedForm(ImmutableBiMap<?, ?> bimap) {
+      super(bimap);
+    }
+    @Override Object readResolve() {
+      Builder<Object, Object> builder = new Builder<Object, Object>();
+      return createMap(builder);
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  @Override Object writeReplace() {
+    return new SerializedForm(this);
+  }
+}
diff --git a/guava/src/com/google/common/collect/ImmutableClassToInstanceMap.java b/guava/src/com/google/common/collect/ImmutableClassToInstanceMap.java
new file mode 100644
index 0000000..1c596e2
--- /dev/null
+++ b/guava/src/com/google/common/collect/ImmutableClassToInstanceMap.java
@@ -0,0 +1,154 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.primitives.Primitives;
+
+import java.util.Map;
+
+/**
+ * A class-to-instance map backed by an {@link ImmutableMap}. See also {@link
+ * MutableClassToInstanceMap}.
+ *
+ * @author Kevin Bourrillion
+ * @since 2.0 (imported from Google Collections Library)
+ */
+public final class ImmutableClassToInstanceMap<B> extends
+    ForwardingMap<Class<? extends B>, B> implements ClassToInstanceMap<B> {
+  /**
+   * Returns a new builder. The generated builder is equivalent to the builder
+   * created by the {@link Builder} constructor.
+   */
+  public static <B> Builder<B> builder() {
+    return new Builder<B>();
+  }
+
+  /**
+   * A builder for creating immutable class-to-instance maps. Example:
+   * <pre>   {@code
+   *
+   *   static final ImmutableClassToInstanceMap<Handler> HANDLERS =
+   *       new ImmutableClassToInstanceMap.Builder<Handler>()
+   *           .put(FooHandler.class, new FooHandler())
+   *           .put(BarHandler.class, new SubBarHandler())
+   *           .put(Handler.class, new QuuxHandler())
+   *           .build();}</pre>
+   *
+   * After invoking {@link #build()} it is still possible to add more entries
+   * and build again. Thus each map generated by this builder will be a superset
+   * of any map generated before it.
+   *
+   * @since 2.0 (imported from Google Collections Library)
+   */
+  public static final class Builder<B> {
+    private final ImmutableMap.Builder<Class<? extends B>, B> mapBuilder
+        = ImmutableMap.builder();
+
+    /**
+     * Associates {@code key} with {@code value} in the built map. Duplicate
+     * keys are not allowed, and will cause {@link #build} to fail.
+     */
+    public <T extends B> Builder<B> put(Class<T> key, T value) {
+      mapBuilder.put(key, value);
+      return this;
+    }
+
+    /**
+     * Associates all of {@code map's} keys and values in the built map.
+     * Duplicate keys are not allowed, and will cause {@link #build} to fail.
+     *
+     * @throws NullPointerException if any key or value in {@code map} is null
+     * @throws ClassCastException if any value is not an instance of the type
+     *     specified by its key
+     */
+    public <T extends B> Builder<B> putAll(
+        Map<? extends Class<? extends T>, ? extends T> map) {
+      for (Entry<? extends Class<? extends T>, ? extends T> entry
+          : map.entrySet()) {
+        Class<? extends T> type = entry.getKey();
+        T value = entry.getValue();
+        mapBuilder.put(type, cast(type, value));
+      }
+      return this;
+    }
+
+    private static <B, T extends B> T cast(Class<T> type, B value) {
+      return Primitives.wrap(type).cast(value);
+    }
+
+    /**
+     * Returns a new immutable class-to-instance map containing the entries
+     * provided to this builder.
+     *
+     * @throws IllegalArgumentException if duplicate keys were added
+     */
+    public ImmutableClassToInstanceMap<B> build() {
+      return new ImmutableClassToInstanceMap<B>(mapBuilder.build());
+    }
+  }
+
+  /**
+   * Returns an immutable map containing the same entries as {@code map}. If
+   * {@code map} somehow contains entries with duplicate keys (for example, if
+   * it is a {@code SortedMap} whose comparator is not <i>consistent with
+   * equals</i>), the results of this method are undefined.
+   *
+   * <p><b>Note:</b> Despite what the method name suggests, if {@code map} is
+   * an {@code ImmutableClassToInstanceMap}, no copy will actually be performed.
+   *
+   * @throws NullPointerException if any key or value in {@code map} is null
+   * @throws ClassCastException if any value is not an instance of the type
+   *     specified by its key
+   */
+  public static <B, S extends B> ImmutableClassToInstanceMap<B> copyOf(
+      Map<? extends Class<? extends S>, ? extends S> map) {
+    if (map instanceof ImmutableClassToInstanceMap) {
+      @SuppressWarnings("unchecked") // covariant casts safe (unmodifiable)
+      // Eclipse won't compile if we cast to the parameterized type.
+      ImmutableClassToInstanceMap<B> cast = (ImmutableClassToInstanceMap) map;
+      return cast;
+    }
+    return new Builder<B>().putAll(map).build();
+  }
+
+  private final ImmutableMap<Class<? extends B>, B> delegate;
+
+  private ImmutableClassToInstanceMap(
+      ImmutableMap<Class<? extends B>, B> delegate) {
+    this.delegate = delegate;
+  }
+
+  @Override protected Map<Class<? extends B>, B> delegate() {
+    return delegate;
+  }
+
+  @Override
+  @SuppressWarnings("unchecked") // value could not get in if not a T
+  public <T extends B> T getInstance(Class<T> type) {
+    return (T) delegate.get(type);
+  }
+
+  /**
+   * Guaranteed to throw an exception and leave the map unmodified.
+   *
+   * @throws UnsupportedOperationException always
+   */
+  @Override
+  public <T extends B> T putInstance(Class<T> type, T value) {
+    throw new UnsupportedOperationException();
+  }
+}
diff --git a/guava/src/com/google/common/collect/ImmutableCollection.java b/guava/src/com/google/common/collect/ImmutableCollection.java
new file mode 100644
index 0000000..5fca2aa
--- /dev/null
+++ b/guava/src/com/google/common/collect/ImmutableCollection.java
@@ -0,0 +1,357 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.Iterator;
+
+import javax.annotation.Nullable;
+
+/**
+ * An immutable collection. Does not permit null elements.
+ *
+ * <p>In addition to the {@link Collection} methods, this class has an {@link
+ * #asList()} method, which returns a list view of the collection's elements.
+ *
+ * <p><b>Note:</b> Although this class is not final, it cannot be subclassed
+ * outside of this package as it has no public or protected constructors. Thus,
+ * instances of this type are guaranteed to be immutable.
+ *
+ * @author Jesse Wilson
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible(emulated = true)
+@SuppressWarnings("serial") // we're overriding default serialization
+public abstract class ImmutableCollection<E>
+    implements Collection<E>, Serializable {
+  static final ImmutableCollection<Object> EMPTY_IMMUTABLE_COLLECTION
+      = new EmptyImmutableCollection();
+
+  ImmutableCollection() {}
+
+  /**
+   * Returns an unmodifiable iterator across the elements in this collection.
+   */
+  @Override
+  public abstract UnmodifiableIterator<E> iterator();
+
+  @Override
+  public Object[] toArray() {
+    return ObjectArrays.toArrayImpl(this);
+  }
+
+  @Override
+  public <T> T[] toArray(T[] other) {
+    return ObjectArrays.toArrayImpl(this, other);
+  }
+
+  @Override
+  public boolean contains(@Nullable Object object) {
+    return object != null && Iterators.contains(iterator(), object);
+  }
+
+  @Override
+  public boolean containsAll(Collection<?> targets) {
+    return Collections2.containsAllImpl(this, targets);
+  }
+
+  @Override
+  public boolean isEmpty() {
+    return size() == 0;
+  }
+
+  @Override public String toString() {
+    return Collections2.toStringImpl(this);
+  }
+
+  /**
+   * Guaranteed to throw an exception and leave the collection unmodified.
+   *
+   * @throws UnsupportedOperationException always
+   */
+  @Override
+  public final boolean add(E e) {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * Guaranteed to throw an exception and leave the collection unmodified.
+   *
+   * @throws UnsupportedOperationException always
+   */
+  @Override
+  public final boolean remove(Object object) {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * Guaranteed to throw an exception and leave the collection unmodified.
+   *
+   * @throws UnsupportedOperationException always
+   */
+  @Override
+  public final boolean addAll(Collection<? extends E> newElements) {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * Guaranteed to throw an exception and leave the collection unmodified.
+   *
+   * @throws UnsupportedOperationException always
+   */
+  @Override
+  public final boolean removeAll(Collection<?> oldElements) {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * Guaranteed to throw an exception and leave the collection unmodified.
+   *
+   * @throws UnsupportedOperationException always
+   */
+  @Override
+  public final boolean retainAll(Collection<?> elementsToKeep) {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * Guaranteed to throw an exception and leave the collection unmodified.
+   *
+   * @throws UnsupportedOperationException always
+   */
+  @Override
+  public final void clear() {
+    throw new UnsupportedOperationException();
+  }
+
+  /*
+   * TODO(kevinb): Restructure code so ImmutableList doesn't contain this
+   * variable, which it doesn't use.
+   */
+  private transient ImmutableList<E> asList;
+
+  /**
+   * Returns a list view of the collection.
+   *
+   * @since 2.0
+   */
+  public ImmutableList<E> asList() {
+    ImmutableList<E> list = asList;
+    return (list == null) ? (asList = createAsList()) : list;
+  }
+
+  ImmutableList<E> createAsList() {
+    switch (size()) {
+      case 0:
+        return ImmutableList.of();
+      case 1:
+        return ImmutableList.of(iterator().next());
+      default:
+        return new ImmutableAsList<E>(toArray(), this);
+    }
+  }
+
+  abstract boolean isPartialView();
+
+  private static class EmptyImmutableCollection
+      extends ImmutableCollection<Object> {
+    @Override
+    public int size() {
+      return 0;
+    }
+
+    @Override public boolean isEmpty() {
+      return true;
+    }
+
+    @Override public boolean contains(@Nullable Object object) {
+      return false;
+    }
+
+    @Override public UnmodifiableIterator<Object> iterator() {
+      return Iterators.EMPTY_ITERATOR;
+    }
+
+    private static final Object[] EMPTY_ARRAY = new Object[0];
+
+    @Override public Object[] toArray() {
+      return EMPTY_ARRAY;
+    }
+
+    @Override public <T> T[] toArray(T[] array) {
+      if (array.length > 0) {
+        array[0] = null;
+      }
+      return array;
+    }
+
+    @Override ImmutableList<Object> createAsList() {
+      return ImmutableList.of();
+    }
+
+    @Override boolean isPartialView() {
+      return false;
+    }
+  }
+
+  /**
+   * Nonempty collection stored in an array.
+   */
+  private static class ArrayImmutableCollection<E>
+      extends ImmutableCollection<E> {
+    private final E[] elements;
+
+    ArrayImmutableCollection(E[] elements) {
+      this.elements = elements;
+    }
+
+    @Override
+    public int size() {
+      return elements.length;
+    }
+
+    @Override public boolean isEmpty() {
+      return false;
+    }
+
+    @Override public UnmodifiableIterator<E> iterator() {
+      return Iterators.forArray(elements);
+    }
+
+    @Override ImmutableList<E> createAsList() {
+      return elements.length == 1 ? new SingletonImmutableList<E>(elements[0])
+          : new RegularImmutableList<E>(elements);
+    }
+
+    @Override boolean isPartialView() {
+      return false;
+    }
+  }
+
+  /*
+   * Serializes ImmutableCollections as their logical contents. This ensures
+   * that implementation types do not leak into the serialized representation.
+   */
+  private static class SerializedForm implements Serializable {
+    final Object[] elements;
+    SerializedForm(Object[] elements) {
+      this.elements = elements;
+    }
+    Object readResolve() {
+      return elements.length == 0
+          ? EMPTY_IMMUTABLE_COLLECTION
+          : new ArrayImmutableCollection<Object>(Platform.clone(elements));
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  Object writeReplace() {
+    return new SerializedForm(toArray());
+  }
+
+  /**
+   * Abstract base class for builders of {@link ImmutableCollection} types.
+   *
+   * @since 10.0
+   */
+  public abstract static class Builder<E> {
+
+    Builder() {
+    }
+
+    /**
+     * Adds {@code element} to the {@code ImmutableCollection} being built.
+     *
+     * <p>Note that each builder class covariantly returns its own type from
+     * this method.
+     *
+     * @param element the element to add
+     * @return this {@code Builder} instance
+     * @throws NullPointerException if {@code element} is null
+     */
+    public abstract Builder<E> add(E element);
+
+    /**
+     * Adds each element of {@code elements} to the {@code ImmutableCollection}
+     * being built.
+     *
+     * <p>Note that each builder class overrides this method in order to
+     * covariantly return its own type.
+     *
+     * @param elements the elements to add
+     * @return this {@code Builder} instance
+     * @throws NullPointerException if {@code elements} is null or contains a
+     *     null element
+     */
+    public Builder<E> add(E... elements) {
+      for (E element : elements) {
+        add(element);
+      }
+      return this;
+    }
+
+    /**
+     * Adds each element of {@code elements} to the {@code ImmutableCollection}
+     * being built.
+     *
+     * <p>Note that each builder class overrides this method in order to
+     * covariantly return its own type.
+     *
+     * @param elements the elements to add
+     * @return this {@code Builder} instance
+     * @throws NullPointerException if {@code elements} is null or contains a
+     *     null element
+     */
+    public Builder<E> addAll(Iterable<? extends E> elements) {
+      for (E element : elements) {
+        add(element);
+      }
+      return this;
+    }
+
+    /**
+     * Adds each element of {@code elements} to the {@code ImmutableCollection}
+     * being built.
+     *
+     * <p>Note that each builder class overrides this method in order to
+     * covariantly return its own type.
+     *
+     * @param elements the elements to add
+     * @return this {@code Builder} instance
+     * @throws NullPointerException if {@code elements} is null or contains a
+     *     null element
+     */
+    public Builder<E> addAll(Iterator<? extends E> elements) {
+      while (elements.hasNext()) {
+        add(elements.next());
+      }
+      return this;
+    }
+
+    /**
+     * Returns a newly-created {@code ImmutableCollection} of the appropriate
+     * type, containing the elements provided to this builder.
+     *
+     * <p>Note that each builder class covariantly returns the appropriate type
+     * of {@code ImmutableCollection} from this method.
+     */
+    public abstract ImmutableCollection<E> build();
+  }
+}
diff --git a/guava/src/com/google/common/collect/ImmutableEntry.java b/guava/src/com/google/common/collect/ImmutableEntry.java
new file mode 100644
index 0000000..3824d7a
--- /dev/null
+++ b/guava/src/com/google/common/collect/ImmutableEntry.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.io.Serializable;
+
+import javax.annotation.Nullable;
+
+/**
+ * @see com.google.common.collect.Maps#immutableEntry(Object, Object)
+ */
+@GwtCompatible(serializable = true)
+class ImmutableEntry<K, V> extends AbstractMapEntry<K, V>
+    implements Serializable {
+  private final K key;
+  private final V value;
+
+  ImmutableEntry(@Nullable K key, @Nullable V value) {
+    this.key = key;
+    this.value = value;
+  }
+
+  @Nullable @Override public K getKey() {
+    return key;
+  }
+
+  @Nullable @Override public V getValue() {
+    return value;
+  }
+
+  @Override public final V setValue(V value){
+    throw new UnsupportedOperationException();
+  }
+
+  private static final long serialVersionUID = 0;
+}
diff --git a/guava/src/com/google/common/collect/ImmutableEnumSet.java b/guava/src/com/google/common/collect/ImmutableEnumSet.java
new file mode 100644
index 0000000..ac6dd0e
--- /dev/null
+++ b/guava/src/com/google/common/collect/ImmutableEnumSet.java
@@ -0,0 +1,116 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.EnumSet;
+
+/**
+ * Implementation of {@link ImmutableSet} backed by a non-empty {@link
+ * java.util.EnumSet}.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible(serializable = true, emulated = true)
+@SuppressWarnings("serial") // we're overriding default serialization
+final class ImmutableEnumSet<E extends Enum<E>> extends ImmutableSet<E> {
+  /*
+   * Notes on EnumSet and <E extends Enum<E>>:
+   *
+   * This class isn't an arbitrary ForwardingImmutableSet because we need to
+   * know that calling {@code clone()} during deserialization will return an
+   * object that no one else has a reference to, allowing us to guarantee
+   * immutability. Hence, we support only {@link EnumSet}.
+   */
+  private final transient EnumSet<E> delegate;
+
+  ImmutableEnumSet(EnumSet<E> delegate) {
+    this.delegate = delegate;
+  }
+
+  @Override boolean isPartialView() {
+    return false;
+  }
+
+  @Override public UnmodifiableIterator<E> iterator() {
+    return Iterators.unmodifiableIterator(delegate.iterator());
+  }
+
+  @Override
+  public int size() {
+    return delegate.size();
+  }
+
+  @Override public boolean contains(Object object) {
+    return delegate.contains(object);
+  }
+
+  @Override public boolean containsAll(Collection<?> collection) {
+    return delegate.containsAll(collection);
+  }
+
+  @Override public boolean isEmpty() {
+    return delegate.isEmpty();
+  }
+
+  @Override public Object[] toArray() {
+    return delegate.toArray();
+  }
+
+  @Override public <T> T[] toArray(T[] array) {
+    return delegate.toArray(array);
+  }
+
+  @Override public boolean equals(Object object) {
+    return object == this || delegate.equals(object);
+  }
+
+  private transient int hashCode;
+
+  @Override public int hashCode() {
+    int result = hashCode;
+    return (result == 0) ? hashCode = delegate.hashCode() : result;
+  }
+
+  @Override public String toString() {
+    return delegate.toString();
+  }
+
+  // All callers of the constructor are restricted to <E extends Enum<E>>.
+  @Override Object writeReplace() {
+    return new EnumSerializedForm<E>(delegate);
+  }
+
+  /*
+   * This class is used to serialize ImmutableEnumSet instances.
+   */
+  private static class EnumSerializedForm<E extends Enum<E>>
+      implements Serializable {
+    final EnumSet<E> delegate;
+    EnumSerializedForm(EnumSet<E> delegate) {
+      this.delegate = delegate;
+    }
+    Object readResolve() {
+      // EJ2 #76: Write readObject() methods defensively.
+      return new ImmutableEnumSet<E>(delegate.clone());
+    }
+    private static final long serialVersionUID = 0;
+  }
+}
diff --git a/guava/src/com/google/common/collect/ImmutableList.java b/guava/src/com/google/common/collect/ImmutableList.java
new file mode 100644
index 0000000..cd8235a
--- /dev/null
+++ b/guava/src/com/google/common/collect/ImmutableList.java
@@ -0,0 +1,627 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Preconditions;
+
+import java.io.InvalidObjectException;
+import java.io.ObjectInputStream;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.RandomAccess;
+
+import javax.annotation.Nullable;
+
+/**
+ * A high-performance, immutable, random-access {@code List} implementation.
+ * Does not permit null elements.
+ *
+ * <p>Unlike {@link Collections#unmodifiableList}, which is a <i>view</i> of a
+ * separate collection that can still change, an instance of {@code
+ * ImmutableList} contains its own private data and will <i>never</i> change.
+ * {@code ImmutableList} is convenient for {@code public static final} lists
+ * ("constant lists") and also lets you easily make a "defensive copy" of a list
+ * provided to your class by a caller.
+ *
+ * <p><b>Note:</b> Although this class is not final, it cannot be subclassed as
+ * it has no public or protected constructors. Thus, instances of this type are
+ * guaranteed to be immutable.
+ *
+ * @see ImmutableMap
+ * @see ImmutableSet
+ * @author Kevin Bourrillion
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible(serializable = true, emulated = true)
+@SuppressWarnings("serial") // we're overriding default serialization
+public abstract class ImmutableList<E> extends ImmutableCollection<E>
+    implements List<E>, RandomAccess {
+  /**
+   * Returns the empty immutable list. This set behaves and performs comparably
+   * to {@link Collections#emptyList}, and is preferable mainly for consistency
+   * and maintainability of your code.
+   */
+  // Casting to any type is safe because the list will never hold any elements.
+  @SuppressWarnings("unchecked")
+  public static <E> ImmutableList<E> of() {
+    return (ImmutableList<E>) EmptyImmutableList.INSTANCE;
+  }
+
+  /**
+   * Returns an immutable list containing a single element. This list behaves
+   * and performs comparably to {@link Collections#singleton}, but will not
+   * accept a null element. It is preferable mainly for consistency and
+   * maintainability of your code.
+   *
+   * @throws NullPointerException if {@code element} is null
+   */
+  public static <E> ImmutableList<E> of(E element) {
+    return new SingletonImmutableList<E>(element);
+  }
+
+  /**
+   * Returns an immutable list containing the given elements, in order.
+   *
+   * @throws NullPointerException if any element is null
+   */
+  public static <E> ImmutableList<E> of(E e1, E e2) {
+    return construct(e1, e2);
+  }
+
+  /**
+   * Returns an immutable list containing the given elements, in order.
+   *
+   * @throws NullPointerException if any element is null
+   */
+  public static <E> ImmutableList<E> of(E e1, E e2, E e3) {
+    return construct(e1, e2, e3);
+  }
+
+  /**
+   * Returns an immutable list containing the given elements, in order.
+   *
+   * @throws NullPointerException if any element is null
+   */
+  public static <E> ImmutableList<E> of(E e1, E e2, E e3, E e4) {
+    return construct(e1, e2, e3, e4);
+  }
+
+  /**
+   * Returns an immutable list containing the given elements, in order.
+   *
+   * @throws NullPointerException if any element is null
+   */
+  public static <E> ImmutableList<E> of(E e1, E e2, E e3, E e4, E e5) {
+    return construct(e1, e2, e3, e4, e5);
+  }
+
+  /**
+   * Returns an immutable list containing the given elements, in order.
+   *
+   * @throws NullPointerException if any element is null
+   */
+  public static <E> ImmutableList<E> of(E e1, E e2, E e3, E e4, E e5, E e6) {
+    return construct(e1, e2, e3, e4, e5, e6);
+  }
+
+  /**
+   * Returns an immutable list containing the given elements, in order.
+   *
+   * @throws NullPointerException if any element is null
+   */
+  public static <E> ImmutableList<E> of(
+      E e1, E e2, E e3, E e4, E e5, E e6, E e7) {
+    return construct(e1, e2, e3, e4, e5, e6, e7);
+  }
+
+  /**
+   * Returns an immutable list containing the given elements, in order.
+   *
+   * @throws NullPointerException if any element is null
+   */
+  public static <E> ImmutableList<E> of(
+      E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8) {
+    return construct(e1, e2, e3, e4, e5, e6, e7, e8);
+  }
+
+  /**
+   * Returns an immutable list containing the given elements, in order.
+   *
+   * @throws NullPointerException if any element is null
+   */
+  public static <E> ImmutableList<E> of(
+      E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9) {
+    return construct(e1, e2, e3, e4, e5, e6, e7, e8, e9);
+  }
+
+  /**
+   * Returns an immutable list containing the given elements, in order.
+   *
+   * @throws NullPointerException if any element is null
+   */
+  public static <E> ImmutableList<E> of(
+      E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9, E e10) {
+    return construct(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10);
+  }
+
+  /**
+   * Returns an immutable list containing the given elements, in order.
+   *
+   * @throws NullPointerException if any element is null
+   */
+  public static <E> ImmutableList<E> of(
+      E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9, E e10, E e11) {
+    return construct(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11);
+  }
+
+  // These go up to eleven. After that, you just get the varargs form, and
+  // whatever warnings might come along with it. :(
+
+  /**
+   * Returns an immutable list containing the given elements, in order.
+   *
+   * @throws NullPointerException if any element is null
+   * @since 3.0 (source-compatible since 2.0)
+   */
+  public static <E> ImmutableList<E> of(
+      E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9, E e10, E e11, E e12,
+      E... others) {
+    Object[] array = new Object[12 + others.length];
+    array[0] = e1;
+    array[1] = e2;
+    array[2] = e3;
+    array[3] = e4;
+    array[4] = e5;
+    array[5] = e6;
+    array[6] = e7;
+    array[7] = e8;
+    array[8] = e9;
+    array[9] = e10;
+    array[10] = e11;
+    array[11] = e12;
+    System.arraycopy(others, 0, array, 12, others.length);
+    return construct(array);
+  }
+
+  /**
+   * Returns an immutable list containing the given elements, in order. If
+   * {@code elements} is a {@link Collection}, this method behaves exactly as
+   * {@link #copyOf(Collection)}; otherwise, it behaves exactly as {@code
+   * copyOf(elements.iterator()}.
+   *
+   * @throws NullPointerException if any of {@code elements} is null
+   */
+  public static <E> ImmutableList<E> copyOf(Iterable<? extends E> elements) {
+    checkNotNull(elements); // TODO(kevinb): is this here only for GWT?
+    return (elements instanceof Collection)
+      ? copyOf(Collections2.cast(elements))
+      : copyOf(elements.iterator());
+  }
+
+  /**
+   * Returns an immutable list containing the given elements, in order.
+   *
+   * <p>Despite the method name, this method attempts to avoid actually copying
+   * the data when it is safe to do so. The exact circumstances under which a
+   * copy will or will not be performed are undocumented and subject to change.
+   *
+   * <p>Note that if {@code list} is a {@code List<String>}, then {@code
+   * ImmutableList.copyOf(list)} returns an {@code ImmutableList<String>}
+   * containing each of the strings in {@code list}, while
+   * ImmutableList.of(list)} returns an {@code ImmutableList<List<String>>}
+   * containing one element (the given list itself).
+   *
+   * <p>This method is safe to use even when {@code elements} is a synchronized
+   * or concurrent collection that is currently being modified by another
+   * thread.
+   *
+   * @throws NullPointerException if any of {@code elements} is null
+   */
+  public static <E> ImmutableList<E> copyOf(Collection<? extends E> elements) {
+    if (elements instanceof ImmutableCollection) {
+      @SuppressWarnings("unchecked") // all supported methods are covariant
+      ImmutableList<E> list = ((ImmutableCollection<E>) elements).asList();
+      return list.isPartialView() ? copyFromCollection(list) : list;
+    }
+    return copyFromCollection(elements);
+  }
+
+  /**
+   * Returns an immutable list containing the given elements, in order.
+   *
+   * @throws NullPointerException if any of {@code elements} is null
+   */
+  public static <E> ImmutableList<E> copyOf(Iterator<? extends E> elements) {
+    return copyFromCollection(Lists.newArrayList(elements));
+  }
+
+  /**
+   * Returns an immutable list containing the given elements, in order.
+   *
+   * @throws NullPointerException if any of {@code elements} is null
+   * @since 3.0
+   */
+  public static <E> ImmutableList<E> copyOf(E[] elements) {
+    switch (elements.length) {
+      case 0:
+        return ImmutableList.of();
+      case 1:
+        return new SingletonImmutableList<E>(elements[0]);
+      default:
+        return construct(elements.clone());
+    }
+  }
+
+  private static <E> ImmutableList<E> copyFromCollection(
+      Collection<? extends E> collection) {
+    Object[] elements = collection.toArray();
+    switch (elements.length) {
+      case 0:
+        return of();
+      case 1:
+        @SuppressWarnings("unchecked") // collection had only Es in it
+        ImmutableList<E> list = new SingletonImmutableList<E>((E) elements[0]);
+        return list;
+      default:
+        // safe to use the array without copying it
+        // as specified by Collection.toArray().
+        return construct(elements);
+    }
+  }
+  
+  /** {@code elements} has to be internally created array. */
+  private static <E> ImmutableList<E> construct(Object... elements) {
+    for (int i = 0; i < elements.length; i++) {
+      checkElementNotNull(elements[i], i);
+    }
+    return new RegularImmutableList<E>(elements);
+  }
+
+  // We do this instead of Preconditions.checkNotNull to save boxing and array
+  // creation cost.
+  private static Object checkElementNotNull(Object element, int index) {
+    if (element == null) {
+      throw new NullPointerException("at index " + index);
+    }
+    return element;
+  }
+
+  ImmutableList() {}
+
+  // This declaration is needed to make List.iterator() and
+  // ImmutableCollection.iterator() consistent.
+  @Override public UnmodifiableIterator<E> iterator() {
+    return listIterator();
+  }
+
+  @Override public UnmodifiableListIterator<E> listIterator() {
+    return listIterator(0);
+  }
+
+  @Override public abstract UnmodifiableListIterator<E> listIterator(int index);
+
+  // Mark these two methods with @Nullable
+
+  @Override
+  public abstract int indexOf(@Nullable Object object);
+
+  @Override
+  public abstract int lastIndexOf(@Nullable Object object);
+
+  // constrain the return type to ImmutableList<E>
+
+  /**
+   * Returns an immutable list of the elements between the specified {@code
+   * fromIndex}, inclusive, and {@code toIndex}, exclusive. (If {@code
+   * fromIndex} and {@code toIndex} are equal, the empty immutable list is
+   * returned.)
+   */
+  @Override
+  public abstract ImmutableList<E> subList(int fromIndex, int toIndex);
+
+  /**
+   * Guaranteed to throw an exception and leave the list unmodified.
+   *
+   * @throws UnsupportedOperationException always
+   */
+  @Override
+  public final boolean addAll(int index, Collection<? extends E> newElements) {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * Guaranteed to throw an exception and leave the list unmodified.
+   *
+   * @throws UnsupportedOperationException always
+   */
+  @Override
+  public final E set(int index, E element) {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * Guaranteed to throw an exception and leave the list unmodified.
+   *
+   * @throws UnsupportedOperationException always
+   */
+  @Override
+  public final void add(int index, E element) {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * Guaranteed to throw an exception and leave the list unmodified.
+   *
+   * @throws UnsupportedOperationException always
+   */
+  @Override
+  public final E remove(int index) {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * Returns this list instance.
+   *
+   * @since 2.0
+   */
+  @Override public ImmutableList<E> asList() {
+    return this;
+  }
+
+  /**
+   * Returns a view of this immutable list in reverse order. For example, {@code
+   * ImmutableList.of(1, 2, 3).reverse()} is equivalent to {@code
+   * ImmutableList.of(3, 2, 1)}.
+   *
+   * @return a view of this immutable list in reverse order
+   * @since 7.0
+   */
+  public ImmutableList<E> reverse() {
+    return new ReverseImmutableList<E>(this);
+  }
+
+  private static class ReverseImmutableList<E> extends ImmutableList<E> {
+    private transient final ImmutableList<E> forwardList;
+    private transient final int size;
+
+    ReverseImmutableList(ImmutableList<E> backingList) {
+      this.forwardList = backingList;
+      this.size = backingList.size();
+    }
+
+    private int reverseIndex(int index) {
+      return (size - 1) - index;
+    }
+
+    private int reversePosition(int index) {
+      return size - index;
+    }
+
+    @Override public ImmutableList<E> reverse() {
+      return forwardList;
+    }
+
+    @Override public boolean contains(@Nullable Object object) {
+      return forwardList.contains(object);
+    }
+
+    @Override public boolean containsAll(Collection<?> targets) {
+      return forwardList.containsAll(targets);
+    }
+
+    @Override public int indexOf(@Nullable Object object) {
+      int index = forwardList.lastIndexOf(object);
+      return (index >= 0) ? reverseIndex(index) : -1;
+    }
+
+    @Override public int lastIndexOf(@Nullable Object object) {
+      int index = forwardList.indexOf(object);
+      return (index >= 0) ? reverseIndex(index) : -1;
+    }
+
+    @Override public ImmutableList<E> subList(int fromIndex, int toIndex) {
+      Preconditions.checkPositionIndexes(fromIndex, toIndex, size);
+      return forwardList.subList(
+          reversePosition(toIndex), reversePosition(fromIndex)).reverse();
+    }
+
+    @Override public E get(int index) {
+      Preconditions.checkElementIndex(index, size);
+      return forwardList.get(reverseIndex(index));
+    }
+
+    @Override public UnmodifiableListIterator<E> listIterator(int index) {
+      Preconditions.checkPositionIndex(index, size);
+      final UnmodifiableListIterator<E> forward =
+          forwardList.listIterator(reversePosition(index));
+      return new UnmodifiableListIterator<E>() {
+        @Override public boolean hasNext() {
+          return forward.hasPrevious();
+        }
+
+        @Override public boolean hasPrevious() {
+          return forward.hasNext();
+        }
+
+        @Override public E next() {
+          return forward.previous();
+        }
+
+        @Override public int nextIndex() {
+          return reverseIndex(forward.previousIndex());
+        }
+
+        @Override public E previous() {
+          return forward.next();
+        }
+
+        @Override public int previousIndex() {
+          return reverseIndex(forward.nextIndex());
+        }
+      };
+    }
+
+    @Override public int size() {
+      return size;
+    }
+
+    @Override public boolean isEmpty() {
+      return forwardList.isEmpty();
+    }
+
+    @Override boolean isPartialView() {
+      return forwardList.isPartialView();
+    }
+  }
+  
+  @Override public boolean equals(Object obj) {
+    return Lists.equalsImpl(this, obj);
+  }
+
+  @Override public int hashCode() {
+    return Lists.hashCodeImpl(this);
+  }
+
+  /*
+   * Serializes ImmutableLists as their logical contents. This ensures that
+   * implementation types do not leak into the serialized representation.
+   */
+  private static class SerializedForm implements Serializable {
+    final Object[] elements;
+    SerializedForm(Object[] elements) {
+      this.elements = elements;
+    }
+    Object readResolve() {
+      return copyOf(elements);
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  private void readObject(ObjectInputStream stream)
+      throws InvalidObjectException {
+    throw new InvalidObjectException("Use SerializedForm");
+  }
+
+  @Override Object writeReplace() {
+    return new SerializedForm(toArray());
+  }
+
+  /**
+   * Returns a new builder. The generated builder is equivalent to the builder
+   * created by the {@link Builder} constructor.
+   */
+  public static <E> Builder<E> builder() {
+    return new Builder<E>();
+  }
+
+  /**
+   * A builder for creating immutable list instances, especially {@code public
+   * static final} lists ("constant lists"). Example: <pre>   {@code
+   *
+   *   public static final ImmutableList<Color> GOOGLE_COLORS
+   *       = new ImmutableList.Builder<Color>()
+   *           .addAll(WEBSAFE_COLORS)
+   *           .add(new Color(0, 191, 255))
+   *           .build();}</pre>
+   *
+   * Builder instances can be reused; it is safe to call {@link #build} multiple
+   * times to build multiple lists in series. Each new list contains all the
+   * elements of the ones created before it.
+   *
+   * @since 2.0 (imported from Google Collections Library)
+   */
+  public static final class Builder<E> extends ImmutableCollection.Builder<E> {
+    private final ArrayList<E> contents = Lists.newArrayList();
+
+    /**
+     * Creates a new builder. The returned builder is equivalent to the builder
+     * generated by {@link ImmutableList#builder}.
+     */
+    public Builder() {}
+
+    /**
+     * Adds {@code element} to the {@code ImmutableList}.
+     *
+     * @param element the element to add
+     * @return this {@code Builder} object
+     * @throws NullPointerException if {@code element} is null
+     */
+    @Override public Builder<E> add(E element) {
+      contents.add(checkNotNull(element));
+      return this;
+    }
+
+    /**
+     * Adds each element of {@code elements} to the {@code ImmutableList}.
+     *
+     * @param elements the {@code Iterable} to add to the {@code ImmutableList}
+     * @return this {@code Builder} object
+     * @throws NullPointerException if {@code elements} is null or contains a
+     *     null element
+     */
+    @Override public Builder<E> addAll(Iterable<? extends E> elements) {
+      if (elements instanceof Collection) {
+        Collection<?> collection = (Collection<?>) elements;
+        contents.ensureCapacity(contents.size() + collection.size());
+      }
+      super.addAll(elements);
+      return this;
+    }
+
+    /**
+     * Adds each element of {@code elements} to the {@code ImmutableList}.
+     *
+     * @param elements the {@code Iterable} to add to the {@code ImmutableList}
+     * @return this {@code Builder} object
+     * @throws NullPointerException if {@code elements} is null or contains a
+     *     null element
+     */
+    @Override public Builder<E> add(E... elements) {
+      contents.ensureCapacity(contents.size() + elements.length);
+      super.add(elements);
+      return this;
+    }
+
+    /**
+     * Adds each element of {@code elements} to the {@code ImmutableList}.
+     *
+     * @param elements the {@code Iterable} to add to the {@code ImmutableList}
+     * @return this {@code Builder} object
+     * @throws NullPointerException if {@code elements} is null or contains a
+     *     null element
+     */
+    @Override public Builder<E> addAll(Iterator<? extends E> elements) {
+      super.addAll(elements);
+      return this;
+    }
+
+    /**
+     * Returns a newly-created {@code ImmutableList} based on the contents of
+     * the {@code Builder}.
+     */
+    @Override public ImmutableList<E> build() {
+      return copyOf(contents);
+    }
+  }
+}
diff --git a/guava/src/com/google/common/collect/ImmutableListMultimap.java b/guava/src/com/google/common/collect/ImmutableListMultimap.java
new file mode 100644
index 0000000..3071075
--- /dev/null
+++ b/guava/src/com/google/common/collect/ImmutableListMultimap.java
@@ -0,0 +1,383 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+
+import java.io.IOException;
+import java.io.InvalidObjectException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.Map.Entry;
+
+import javax.annotation.Nullable;
+
+/**
+ * An immutable {@link ListMultimap} with reliable user-specified key and value
+ * iteration order. Does not permit null keys or values.
+ *
+ * <p>Unlike {@link Multimaps#unmodifiableListMultimap(ListMultimap)}, which is
+ * a <i>view</i> of a separate multimap which can still change, an instance of
+ * {@code ImmutableListMultimap} contains its own data and will <i>never</i>
+ * change. {@code ImmutableListMultimap} is convenient for
+ * {@code public static final} multimaps ("constant multimaps") and also lets
+ * you easily make a "defensive copy" of a multimap provided to your class by
+ * a caller.
+ *
+ * <p><b>Note:</b> Although this class is not final, it cannot be subclassed as
+ * it has no public or protected constructors. Thus, instances of this class
+ * are guaranteed to be immutable.
+ *
+ * @author Jared Levy
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible(serializable = true, emulated = true)
+public class ImmutableListMultimap<K, V>
+    extends ImmutableMultimap<K, V>
+    implements ListMultimap<K, V> {
+
+  /** Returns the empty multimap. */
+  // Casting is safe because the multimap will never hold any elements.
+  @SuppressWarnings("unchecked")
+  public static <K, V> ImmutableListMultimap<K, V> of() {
+    return (ImmutableListMultimap<K, V>) EmptyImmutableListMultimap.INSTANCE;
+  }
+
+  /**
+   * Returns an immutable multimap containing a single entry.
+   */
+  public static <K, V> ImmutableListMultimap<K, V> of(K k1, V v1) {
+    ImmutableListMultimap.Builder<K, V> builder
+        = ImmutableListMultimap.builder();
+    builder.put(k1, v1);
+    return builder.build();
+  }
+
+  /**
+   * Returns an immutable multimap containing the given entries, in order.
+   */
+  public static <K, V> ImmutableListMultimap<K, V> of(K k1, V v1, K k2, V v2) {
+    ImmutableListMultimap.Builder<K, V> builder
+        = ImmutableListMultimap.builder();
+    builder.put(k1, v1);
+    builder.put(k2, v2);
+    return builder.build();
+  }
+
+  /**
+   * Returns an immutable multimap containing the given entries, in order.
+   */
+  public static <K, V> ImmutableListMultimap<K, V> of(
+      K k1, V v1, K k2, V v2, K k3, V v3) {
+    ImmutableListMultimap.Builder<K, V> builder
+        = ImmutableListMultimap.builder();
+    builder.put(k1, v1);
+    builder.put(k2, v2);
+    builder.put(k3, v3);
+    return builder.build();
+  }
+
+  /**
+   * Returns an immutable multimap containing the given entries, in order.
+   */
+  public static <K, V> ImmutableListMultimap<K, V> of(
+      K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4) {
+    ImmutableListMultimap.Builder<K, V> builder
+        = ImmutableListMultimap.builder();
+    builder.put(k1, v1);
+    builder.put(k2, v2);
+    builder.put(k3, v3);
+    builder.put(k4, v4);
+    return builder.build();
+  }
+
+  /**
+   * Returns an immutable multimap containing the given entries, in order.
+   */
+  public static <K, V> ImmutableListMultimap<K, V> of(
+      K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5) {
+    ImmutableListMultimap.Builder<K, V> builder
+        = ImmutableListMultimap.builder();
+    builder.put(k1, v1);
+    builder.put(k2, v2);
+    builder.put(k3, v3);
+    builder.put(k4, v4);
+    builder.put(k5, v5);
+    return builder.build();
+  }
+
+  // looking for of() with > 5 entries? Use the builder instead.
+
+  /**
+   * Returns a new builder. The generated builder is equivalent to the builder
+   * created by the {@link Builder} constructor.
+   */
+  public static <K, V> Builder<K, V> builder() {
+    return new Builder<K, V>();
+  }
+
+  /**
+   * A builder for creating immutable {@code ListMultimap} instances, especially
+   * {@code public static final} multimaps ("constant multimaps"). Example:
+   * <pre>   {@code
+   *
+   *   static final Multimap<String, Integer> STRING_TO_INTEGER_MULTIMAP =
+   *       new ImmutableListMultimap.Builder<String, Integer>()
+   *           .put("one", 1)
+   *           .putAll("several", 1, 2, 3)
+   *           .putAll("many", 1, 2, 3, 4, 5)
+   *           .build();}</pre>
+   *
+   * Builder instances can be reused; it is safe to call {@link #build} multiple
+   * times to build multiple multimaps in series. Each multimap contains the
+   * key-value mappings in the previously created multimaps.
+   *
+   * @since 2.0 (imported from Google Collections Library)
+   */
+  public static final class Builder<K, V>
+      extends ImmutableMultimap.Builder<K, V> {
+    /**
+     * Creates a new builder. The returned builder is equivalent to the builder
+     * generated by {@link ImmutableListMultimap#builder}.
+     */
+    public Builder() {}
+
+    @Override public Builder<K, V> put(K key, V value) {
+      super.put(key, value);
+      return this;
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * @since 11.0
+     */
+    @Override public Builder<K, V> put(
+        Entry<? extends K, ? extends V> entry) {
+      super.put(entry);
+      return this;
+    }
+
+    @Override public Builder<K, V> putAll(K key, Iterable<? extends V> values) {
+      super.putAll(key, values);
+      return this;
+    }
+
+    @Override public Builder<K, V> putAll(K key, V... values) {
+      super.putAll(key, values);
+      return this;
+    }
+
+    @Override public Builder<K, V> putAll(
+        Multimap<? extends K, ? extends V> multimap) {
+      super.putAll(multimap);
+      return this;
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * @since 8.0
+     */
+    @Beta @Override
+    public Builder<K, V> orderKeysBy(Comparator<? super K> keyComparator) {
+      super.orderKeysBy(keyComparator);
+      return this;
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * @since 8.0
+     */
+    @Beta @Override
+    public Builder<K, V> orderValuesBy(Comparator<? super V> valueComparator) {
+      super.orderValuesBy(valueComparator);
+      return this;
+    }
+
+    /**
+     * Returns a newly-created immutable list multimap.
+     */
+    @Override public ImmutableListMultimap<K, V> build() {
+      return (ImmutableListMultimap<K, V>) super.build();
+    }
+  }
+
+  /**
+   * Returns an immutable multimap containing the same mappings as {@code
+   * multimap}. The generated multimap's key and value orderings correspond to
+   * the iteration ordering of the {@code multimap.asMap()} view.
+   *
+   * <p>Despite the method name, this method attempts to avoid actually copying
+   * the data when it is safe to do so. The exact circumstances under which a
+   * copy will or will not be performed are undocumented and subject to change.
+   *
+   * @throws NullPointerException if any key or value in {@code multimap} is
+   *         null
+   */
+  public static <K, V> ImmutableListMultimap<K, V> copyOf(
+      Multimap<? extends K, ? extends V> multimap) {
+    if (multimap.isEmpty()) {
+      return of();
+    }
+
+    // TODO(user): copy ImmutableSetMultimap by using asList() on the sets
+    if (multimap instanceof ImmutableListMultimap) {
+      @SuppressWarnings("unchecked") // safe since multimap is not writable
+      ImmutableListMultimap<K, V> kvMultimap
+          = (ImmutableListMultimap<K, V>) multimap;
+      if (!kvMultimap.isPartialView()) {
+        return kvMultimap;
+      }
+    }
+
+    ImmutableMap.Builder<K, ImmutableList<V>> builder = ImmutableMap.builder();
+    int size = 0;
+
+    for (Entry<? extends K, ? extends Collection<? extends V>> entry
+        : multimap.asMap().entrySet()) {
+      ImmutableList<V> list = ImmutableList.copyOf(entry.getValue());
+      if (!list.isEmpty()) {
+        builder.put(entry.getKey(), list);
+        size += list.size();
+      }
+    }
+
+    return new ImmutableListMultimap<K, V>(builder.build(), size);
+  }
+
+  ImmutableListMultimap(ImmutableMap<K, ImmutableList<V>> map, int size) {
+    super(map, size);
+  }
+
+  // views
+
+  /**
+   * Returns an immutable list of the values for the given key.  If no mappings
+   * in the multimap have the provided key, an empty immutable list is
+   * returned. The values are in the same order as the parameters used to build
+   * this multimap.
+   */
+  @Override public ImmutableList<V> get(@Nullable K key) {
+    // This cast is safe as its type is known in constructor.
+    ImmutableList<V> list = (ImmutableList<V>) map.get(key);
+    return (list == null) ? ImmutableList.<V>of() : list;
+  }
+
+  private transient ImmutableListMultimap<V, K> inverse;
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>Because an inverse of a list multimap can contain multiple pairs with the same key and
+   * value, this method returns an {@code ImmutableListMultimap} rather than the
+   * {@code ImmutableMultimap} specified in the {@code ImmutableMultimap} class.
+   *
+   * @since 11
+   */
+  @Beta
+  public ImmutableListMultimap<V, K> inverse() {
+    ImmutableListMultimap<V, K> result = inverse;
+    return (result == null) ? (inverse = invert()) : result;
+  }
+
+  private ImmutableListMultimap<V, K> invert() {
+    Builder<V, K> builder = builder();
+    for (Entry<K, V> entry : entries()) {
+      builder.put(entry.getValue(), entry.getKey());
+    }
+    ImmutableListMultimap<V, K> invertedMultimap = builder.build();
+    invertedMultimap.inverse = this;
+    return invertedMultimap;
+  }
+
+  /**
+   * Guaranteed to throw an exception and leave the multimap unmodified.
+   *
+   * @throws UnsupportedOperationException always
+   */
+  @Override public ImmutableList<V> removeAll(Object key) {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * Guaranteed to throw an exception and leave the multimap unmodified.
+   *
+   * @throws UnsupportedOperationException always
+   */
+  @Override public ImmutableList<V> replaceValues(
+      K key, Iterable<? extends V> values) {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * @serialData number of distinct keys, and then for each distinct key: the
+   *     key, the number of values for that key, and the key's values
+   */
+  @GwtIncompatible("java.io.ObjectOutputStream")
+  private void writeObject(ObjectOutputStream stream) throws IOException {
+    stream.defaultWriteObject();
+    Serialization.writeMultimap(this, stream);
+  }
+
+  @GwtIncompatible("java.io.ObjectInputStream")
+  private void readObject(ObjectInputStream stream)
+      throws IOException, ClassNotFoundException {
+    stream.defaultReadObject();
+    int keyCount = stream.readInt();
+    if (keyCount < 0) {
+      throw new InvalidObjectException("Invalid key count " + keyCount);
+    }
+    ImmutableMap.Builder<Object, ImmutableList<Object>> builder
+        = ImmutableMap.builder();
+    int tmpSize = 0;
+
+    for (int i = 0; i < keyCount; i++) {
+      Object key = stream.readObject();
+      int valueCount = stream.readInt();
+      if (valueCount <= 0) {
+        throw new InvalidObjectException("Invalid value count " + valueCount);
+      }
+
+      Object[] array = new Object[valueCount];
+      for (int j = 0; j < valueCount; j++) {
+        array[j] = stream.readObject();
+      }
+      builder.put(key, ImmutableList.copyOf(array));
+      tmpSize += valueCount;
+    }
+
+    ImmutableMap<Object, ImmutableList<Object>> tmpMap;
+    try {
+      tmpMap = builder.build();
+    } catch (IllegalArgumentException e) {
+      throw (InvalidObjectException)
+          new InvalidObjectException(e.getMessage()).initCause(e);
+    }
+
+    FieldSettersHolder.MAP_FIELD_SETTER.set(this, tmpMap);
+    FieldSettersHolder.SIZE_FIELD_SETTER.set(this, tmpSize);
+  }
+
+  @GwtIncompatible("Not needed in emulated source")
+  private static final long serialVersionUID = 0;
+}
diff --git a/guava/src/com/google/common/collect/ImmutableMap.java b/guava/src/com/google/common/collect/ImmutableMap.java
new file mode 100644
index 0000000..0a2ef77
--- /dev/null
+++ b/guava/src/com/google/common/collect/ImmutableMap.java
@@ -0,0 +1,431 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.collect.Iterables.getOnlyElement;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.annotation.Nullable;
+
+/**
+ * An immutable, hash-based {@link Map} with reliable user-specified iteration
+ * order. Does not permit null keys or values.
+ *
+ * <p>Unlike {@link Collections#unmodifiableMap}, which is a <i>view</i> of a
+ * separate map which can still change, an instance of {@code ImmutableMap}
+ * contains its own data and will <i>never</i> change. {@code ImmutableMap} is
+ * convenient for {@code public static final} maps ("constant maps") and also
+ * lets you easily make a "defensive copy" of a map provided to your class by a
+ * caller.
+ *
+ * <p><i>Performance notes:</i> unlike {@link HashMap}, {@code ImmutableMap} is
+ * not optimized for element types that have slow {@link Object#equals} or
+ * {@link Object#hashCode} implementations. You can get better performance by
+ * having your element type cache its own hash codes, and by making use of the
+ * cached values to short-circuit a slow {@code equals} algorithm.
+ *
+ * @author Jesse Wilson
+ * @author Kevin Bourrillion
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible(serializable = true, emulated = true)
+@SuppressWarnings("serial") // we're overriding default serialization
+public abstract class ImmutableMap<K, V> implements Map<K, V>, Serializable {
+  /**
+   * Returns the empty map. This map behaves and performs comparably to
+   * {@link Collections#emptyMap}, and is preferable mainly for consistency
+   * and maintainability of your code.
+   */
+  // Casting to any type is safe because the set will never hold any elements.
+  @SuppressWarnings("unchecked")
+  public static <K, V> ImmutableMap<K, V> of() {
+    return (ImmutableMap<K, V>) EmptyImmutableMap.INSTANCE;
+  }
+
+  /**
+   * Returns an immutable map containing a single entry. This map behaves and
+   * performs comparably to {@link Collections#singletonMap} but will not accept
+   * a null key or value. It is preferable mainly for consistency and
+   * maintainability of your code.
+   */
+  public static <K, V> ImmutableMap<K, V> of(K k1, V v1) {
+    return new SingletonImmutableMap<K, V>(
+        checkNotNull(k1), checkNotNull(v1));
+  }
+
+  /**
+   * Returns an immutable map containing the given entries, in order.
+   *
+   * @throws IllegalArgumentException if duplicate keys are provided
+   */
+  public static <K, V> ImmutableMap<K, V> of(K k1, V v1, K k2, V v2) {
+    return new RegularImmutableMap<K, V>(entryOf(k1, v1), entryOf(k2, v2));
+  }
+
+  /**
+   * Returns an immutable map containing the given entries, in order.
+   *
+   * @throws IllegalArgumentException if duplicate keys are provided
+   */
+  public static <K, V> ImmutableMap<K, V> of(
+      K k1, V v1, K k2, V v2, K k3, V v3) {
+    return new RegularImmutableMap<K, V>(
+        entryOf(k1, v1), entryOf(k2, v2), entryOf(k3, v3));
+  }
+
+  /**
+   * Returns an immutable map containing the given entries, in order.
+   *
+   * @throws IllegalArgumentException if duplicate keys are provided
+   */
+  public static <K, V> ImmutableMap<K, V> of(
+      K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4) {
+    return new RegularImmutableMap<K, V>(
+        entryOf(k1, v1), entryOf(k2, v2), entryOf(k3, v3), entryOf(k4, v4));
+  }
+
+  /**
+   * Returns an immutable map containing the given entries, in order.
+   *
+   * @throws IllegalArgumentException if duplicate keys are provided
+   */
+  public static <K, V> ImmutableMap<K, V> of(
+      K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5) {
+    return new RegularImmutableMap<K, V>(entryOf(k1, v1),
+        entryOf(k2, v2), entryOf(k3, v3), entryOf(k4, v4), entryOf(k5, v5));
+  }
+
+  // looking for of() with > 5 entries? Use the builder instead.
+
+  /**
+   * Returns a new builder. The generated builder is equivalent to the builder
+   * created by the {@link Builder} constructor.
+   */
+  public static <K, V> Builder<K, V> builder() {
+    return new Builder<K, V>();
+  }
+
+  /**
+   * Verifies that {@code key} and {@code value} are non-null, and returns a new
+   * immutable entry with those values.
+   *
+   * <p>A call to {@link Map.Entry#setValue} on the returned entry will always
+   * throw {@link UnsupportedOperationException}.
+   */
+  static <K, V> Entry<K, V> entryOf(K key, V value) {
+    return Maps.immutableEntry(
+        checkNotNull(key, "null key"),
+        checkNotNull(value, "null value"));
+  }
+
+  /**
+   * A builder for creating immutable map instances, especially {@code public
+   * static final} maps ("constant maps"). Example: <pre>   {@code
+   *
+   *   static final ImmutableMap<String, Integer> WORD_TO_INT =
+   *       new ImmutableMap.Builder<String, Integer>()
+   *           .put("one", 1)
+   *           .put("two", 2)
+   *           .put("three", 3)
+   *           .build();}</pre>
+   *
+   * For <i>small</i> immutable maps, the {@code ImmutableMap.of()} methods are
+   * even more convenient.
+   *
+   * <p>Builder instances can be reused - it is safe to call {@link #build}
+   * multiple times to build multiple maps in series. Each map is a superset of
+   * the maps created before it.
+   *
+   * @since 2.0 (imported from Google Collections Library)
+   */
+  public static class Builder<K, V> {
+    final ArrayList<Entry<K, V>> entries = Lists.newArrayList();
+
+    /**
+     * Creates a new builder. The returned builder is equivalent to the builder
+     * generated by {@link ImmutableMap#builder}.
+     */
+    public Builder() {}
+
+    /**
+     * Associates {@code key} with {@code value} in the built map. Duplicate
+     * keys are not allowed, and will cause {@link #build} to fail.
+     */
+    public Builder<K, V> put(K key, V value) {
+      entries.add(entryOf(key, value));
+      return this;
+    }
+
+    /**
+     * Adds the given {@code entry} to the map, making it immutable if
+     * necessary. Duplicate keys are not allowed, and will cause {@link #build}
+     * to fail.
+     *
+     * @since 11.0
+     */
+    public Builder<K, V> put(Entry<? extends K, ? extends V> entry) {
+      K key = entry.getKey();
+      V value = entry.getValue();
+      if (entry instanceof ImmutableEntry<?, ?>) {
+        checkNotNull(key);
+        checkNotNull(value);
+        @SuppressWarnings("unchecked") // all supported methods are covariant
+        Entry<K, V> immutableEntry = (Entry<K, V>) entry;
+        entries.add(immutableEntry);
+      } else {
+        // Directly calling entryOf(entry.getKey(), entry.getValue()) can cause
+        // compilation error in Eclipse.
+        entries.add(entryOf(key, value));
+      }
+      return this;
+    }
+
+    /**
+     * Associates all of the given map's keys and values in the built map.
+     * Duplicate keys are not allowed, and will cause {@link #build} to fail.
+     *
+     * @throws NullPointerException if any key or value in {@code map} is null
+     */
+    public Builder<K, V> putAll(Map<? extends K, ? extends V> map) {
+      entries.ensureCapacity(entries.size() + map.size());
+      for (Entry<? extends K, ? extends V> entry : map.entrySet()) {
+        put(entry.getKey(), entry.getValue());
+      }
+      return this;
+    }
+
+    /*
+     * TODO(kevinb): Should build() and the ImmutableBiMap & ImmutableSortedMap
+     * versions throw an IllegalStateException instead?
+     */
+
+    /**
+     * Returns a newly-created immutable map.
+     *
+     * @throws IllegalArgumentException if duplicate keys were added
+     */
+    public ImmutableMap<K, V> build() {
+      return fromEntryList(entries);
+    }
+
+    private static <K, V> ImmutableMap<K, V> fromEntryList(
+        List<Entry<K, V>> entries) {
+      int size = entries.size();
+      switch (size) {
+        case 0:
+          return of();
+        case 1:
+          return new SingletonImmutableMap<K, V>(getOnlyElement(entries));
+        default:
+          Entry<?, ?>[] entryArray
+              = entries.toArray(new Entry<?, ?>[entries.size()]);
+          return new RegularImmutableMap<K, V>(entryArray);
+      }
+    }
+  }
+
+  /**
+   * Returns an immutable map containing the same entries as {@code map}. If
+   * {@code map} somehow contains entries with duplicate keys (for example, if
+   * it is a {@code SortedMap} whose comparator is not <i>consistent with
+   * equals</i>), the results of this method are undefined.
+   *
+   * <p>Despite the method name, this method attempts to avoid actually copying
+   * the data when it is safe to do so. The exact circumstances under which a
+   * copy will or will not be performed are undocumented and subject to change.
+   *
+   * @throws NullPointerException if any key or value in {@code map} is null
+   */
+  public static <K, V> ImmutableMap<K, V> copyOf(
+      Map<? extends K, ? extends V> map) {
+    if ((map instanceof ImmutableMap) && !(map instanceof ImmutableSortedMap)) {
+      // TODO(user): Make ImmutableMap.copyOf(immutableBiMap) call copyOf()
+      // on the ImmutableMap delegate(), rather than the bimap itself
+
+      @SuppressWarnings("unchecked") // safe since map is not writable
+      ImmutableMap<K, V> kvMap = (ImmutableMap<K, V>) map;
+      if (!kvMap.isPartialView()) {
+        return kvMap;
+      }
+    }
+
+    @SuppressWarnings("unchecked") // we won't write to this array
+    Entry<K, V>[] entries = map.entrySet().toArray(new Entry[0]);
+    switch (entries.length) {
+      case 0:
+        return of();
+      case 1:
+        return new SingletonImmutableMap<K, V>(entryOf(
+            entries[0].getKey(), entries[0].getValue()));
+      default:
+        for (int i = 0; i < entries.length; i++) {
+          K k = entries[i].getKey();
+          V v = entries[i].getValue();
+          entries[i] = entryOf(k, v);
+        }
+        return new RegularImmutableMap<K, V>(entries);
+    }
+  }
+
+  ImmutableMap() {}
+
+  /**
+   * Guaranteed to throw an exception and leave the map unmodified.
+   *
+   * @throws UnsupportedOperationException always
+   */
+  @Override
+  public final V put(K k, V v) {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * Guaranteed to throw an exception and leave the map unmodified.
+   *
+   * @throws UnsupportedOperationException always
+   */
+  @Override
+  public final V remove(Object o) {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * Guaranteed to throw an exception and leave the map unmodified.
+   *
+   * @throws UnsupportedOperationException always
+   */
+  @Override
+  public final void putAll(Map<? extends K, ? extends V> map) {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * Guaranteed to throw an exception and leave the map unmodified.
+   *
+   * @throws UnsupportedOperationException always
+   */
+  @Override
+  public final void clear() {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public boolean isEmpty() {
+    return size() == 0;
+  }
+
+  @Override
+  public boolean containsKey(@Nullable Object key) {
+    return get(key) != null;
+  }
+
+  // Overriding to mark it Nullable
+  @Override
+  public abstract boolean containsValue(@Nullable Object value);
+
+  // Overriding to mark it Nullable
+  @Override
+  public abstract V get(@Nullable Object key);
+
+  /**
+   * Returns an immutable set of the mappings in this map. The entries are in
+   * the same order as the parameters used to build this map.
+   */
+  @Override
+  public abstract ImmutableSet<Entry<K, V>> entrySet();
+
+  /**
+   * Returns an immutable set of the keys in this map. These keys are in
+   * the same order as the parameters used to build this map.
+   */
+  @Override
+  public abstract ImmutableSet<K> keySet();
+
+  /**
+   * Returns an immutable collection of the values in this map. The values are
+   * in the same order as the parameters used to build this map.
+   */
+  @Override
+  public abstract ImmutableCollection<V> values();
+
+  @Override public boolean equals(@Nullable Object object) {
+    if (object == this) {
+      return true;
+    }
+    if (object instanceof Map) {
+      Map<?, ?> that = (Map<?, ?>) object;
+      return this.entrySet().equals(that.entrySet());
+    }
+    return false;
+  }
+
+  abstract boolean isPartialView();
+
+  @Override public int hashCode() {
+    // not caching hash code since it could change if map values are mutable
+    // in a way that modifies their hash codes
+    return entrySet().hashCode();
+  }
+
+  @Override public String toString() {
+    return Maps.toStringImpl(this);
+  }
+
+  /**
+   * Serialized type for all ImmutableMap instances. It captures the logical
+   * contents and they are reconstructed using public factory methods. This
+   * ensures that the implementation types remain as implementation details.
+   */
+  static class SerializedForm implements Serializable {
+    private final Object[] keys;
+    private final Object[] values;
+    SerializedForm(ImmutableMap<?, ?> map) {
+      keys = new Object[map.size()];
+      values = new Object[map.size()];
+      int i = 0;
+      for (Entry<?, ?> entry : map.entrySet()) {
+        keys[i] = entry.getKey();
+        values[i] = entry.getValue();
+        i++;
+      }
+    }
+    Object readResolve() {
+      Builder<Object, Object> builder = new Builder<Object, Object>();
+      return createMap(builder);
+    }
+    Object createMap(Builder<Object, Object> builder) {
+      for (int i = 0; i < keys.length; i++) {
+        builder.put(keys[i], values[i]);
+      }
+      return builder.build();
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  Object writeReplace() {
+    return new SerializedForm(this);
+  }
+}
diff --git a/guava/src/com/google/common/collect/ImmutableMultimap.java b/guava/src/com/google/common/collect/ImmutableMultimap.java
new file mode 100644
index 0000000..13e213e
--- /dev/null
+++ b/guava/src/com/google/common/collect/ImmutableMultimap.java
@@ -0,0 +1,629 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+
+import java.io.Serializable;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map.Entry;
+import java.util.TreeMap;
+
+import javax.annotation.Nullable;
+
+/**
+ * An immutable {@link Multimap}. Does not permit null keys or values.
+ *
+ * <p>Unlike {@link Multimaps#unmodifiableMultimap(Multimap)}, which is
+ * a <i>view</i> of a separate multimap which can still change, an instance of
+ * {@code ImmutableMultimap} contains its own data and will <i>never</i>
+ * change. {@code ImmutableMultimap} is convenient for
+ * {@code public static final} multimaps ("constant multimaps") and also lets
+ * you easily make a "defensive copy" of a multimap provided to your class by
+ * a caller.
+ *
+ * <p><b>Note:</b> Although this class is not final, it cannot be subclassed as
+ * it has no public or protected constructors. Thus, instances of this class
+ * are guaranteed to be immutable.
+ *
+ * <p>In addition to methods defined by {@link Multimap}, an {@link #inverse}
+ * method is also supported.
+ *
+ * @author Jared Levy
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible(emulated = true)
+// TODO(user): If BiMultimap graduates from labs, this class should implement it.
+public abstract class ImmutableMultimap<K, V>
+    implements Multimap<K, V>, Serializable {
+
+  /** Returns an empty multimap. */
+  public static <K, V> ImmutableMultimap<K, V> of() {
+    return ImmutableListMultimap.of();
+  }
+
+  /**
+   * Returns an immutable multimap containing a single entry.
+   */
+  public static <K, V> ImmutableMultimap<K, V> of(K k1, V v1) {
+    return ImmutableListMultimap.of(k1, v1);
+  }
+
+  /**
+   * Returns an immutable multimap containing the given entries, in order.
+   */
+  public static <K, V> ImmutableMultimap<K, V> of(K k1, V v1, K k2, V v2) {
+    return ImmutableListMultimap.of(k1, v1, k2, v2);
+  }
+
+  /**
+   * Returns an immutable multimap containing the given entries, in order.
+   */
+  public static <K, V> ImmutableMultimap<K, V> of(
+      K k1, V v1, K k2, V v2, K k3, V v3) {
+    return ImmutableListMultimap.of(k1, v1, k2, v2, k3, v3);
+  }
+
+  /**
+   * Returns an immutable multimap containing the given entries, in order.
+   */
+  public static <K, V> ImmutableMultimap<K, V> of(
+      K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4) {
+    return ImmutableListMultimap.of(k1, v1, k2, v2, k3, v3, k4, v4);
+  }
+
+  /**
+   * Returns an immutable multimap containing the given entries, in order.
+   */
+  public static <K, V> ImmutableMultimap<K, V> of(
+      K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5) {
+    return ImmutableListMultimap.of(k1, v1, k2, v2, k3, v3, k4, v4, k5, v5);
+  }
+
+  // looking for of() with > 5 entries? Use the builder instead.
+
+  /**
+   * Returns a new builder. The generated builder is equivalent to the builder
+   * created by the {@link Builder} constructor.
+   */
+  public static <K, V> Builder<K, V> builder() {
+    return new Builder<K, V>();
+  }
+
+  /**
+   * Multimap for {@link ImmutableMultimap.Builder} that maintains key and
+   * value orderings, allows duplicate values, and performs better than
+   * {@link LinkedListMultimap}.
+   */
+  private static class BuilderMultimap<K, V> extends AbstractMultimap<K, V> {
+    BuilderMultimap() {
+      super(new LinkedHashMap<K, Collection<V>>());
+    }
+    @Override Collection<V> createCollection() {
+      return Lists.newArrayList();
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  /**
+   * Multimap for {@link ImmutableMultimap.Builder} that sorts key and allows
+   * duplicate values,
+   */
+  private static class SortedKeyBuilderMultimap<K, V>
+      extends AbstractMultimap<K, V> {
+    SortedKeyBuilderMultimap(
+        Comparator<? super K> keyComparator, Multimap<K, V> multimap) {
+      super(new TreeMap<K, Collection<V>>(keyComparator));
+      putAll(multimap);
+    }
+    @Override Collection<V> createCollection() {
+      return Lists.newArrayList();
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  /**
+   * A builder for creating immutable multimap instances, especially
+   * {@code public static final} multimaps ("constant multimaps"). Example:
+   * <pre>   {@code
+   *
+   *   static final Multimap<String, Integer> STRING_TO_INTEGER_MULTIMAP =
+   *       new ImmutableMultimap.Builder<String, Integer>()
+   *           .put("one", 1)
+   *           .putAll("several", 1, 2, 3)
+   *           .putAll("many", 1, 2, 3, 4, 5)
+   *           .build();}</pre>
+   *
+   * Builder instances can be reused; it is safe to call {@link #build} multiple
+   * times to build multiple multimaps in series. Each multimap contains the
+   * key-value mappings in the previously created multimaps.
+   *
+   * @since 2.0 (imported from Google Collections Library)
+   */
+  public static class Builder<K, V> {
+    Multimap<K, V> builderMultimap = new BuilderMultimap<K, V>();
+    Comparator<? super V> valueComparator;
+
+    /**
+     * Creates a new builder. The returned builder is equivalent to the builder
+     * generated by {@link ImmutableMultimap#builder}.
+     */
+    public Builder() {}
+
+    /**
+     * Adds a key-value mapping to the built multimap.
+     */
+    public Builder<K, V> put(K key, V value) {
+      builderMultimap.put(checkNotNull(key), checkNotNull(value));
+      return this;
+    }
+
+    /**
+     * Adds an entry to the built multimap.
+     *
+     * @since 11.0
+     */
+    public Builder<K, V> put(Entry<? extends K, ? extends V> entry) {
+      builderMultimap.put(
+          checkNotNull(entry.getKey()), checkNotNull(entry.getValue()));
+      return this;
+    }
+
+    /**
+     * Stores a collection of values with the same key in the built multimap.
+     *
+     * @throws NullPointerException if {@code key}, {@code values}, or any
+     *     element in {@code values} is null. The builder is left in an invalid
+     *     state.
+     */
+    public Builder<K, V> putAll(K key, Iterable<? extends V> values) {
+      Collection<V> valueList = builderMultimap.get(checkNotNull(key));
+      for (V value : values) {
+        valueList.add(checkNotNull(value));
+      }
+      return this;
+    }
+
+    /**
+     * Stores an array of values with the same key in the built multimap.
+     *
+     * @throws NullPointerException if the key or any value is null. The builder
+     *     is left in an invalid state.
+     */
+    public Builder<K, V> putAll(K key, V... values) {
+      return putAll(key, Arrays.asList(values));
+    }
+
+    /**
+     * Stores another multimap's entries in the built multimap. The generated
+     * multimap's key and value orderings correspond to the iteration ordering
+     * of the {@code multimap.asMap()} view, with new keys and values following
+     * any existing keys and values.
+     *
+     * @throws NullPointerException if any key or value in {@code multimap} is
+     *     null. The builder is left in an invalid state.
+     */
+    public Builder<K, V> putAll(Multimap<? extends K, ? extends V> multimap) {
+      for (Entry<? extends K, ? extends Collection<? extends V>> entry
+          : multimap.asMap().entrySet()) {
+        putAll(entry.getKey(), entry.getValue());
+      }
+      return this;
+    }
+
+    /**
+     * Specifies the ordering of the generated multimap's keys.
+     *
+     * @since 8.0
+     */
+    @Beta
+    public Builder<K, V> orderKeysBy(Comparator<? super K> keyComparator) {
+      builderMultimap = new SortedKeyBuilderMultimap<K, V>(
+          checkNotNull(keyComparator), builderMultimap);
+      return this;
+    }
+
+    /**
+     * Specifies the ordering of the generated multimap's values for each key.
+     *
+     * @since 8.0
+     */
+    @Beta
+    public Builder<K, V> orderValuesBy(Comparator<? super V> valueComparator) {
+      this.valueComparator = checkNotNull(valueComparator);
+      return this;
+    }
+
+    /**
+     * Returns a newly-created immutable multimap.
+     */
+    public ImmutableMultimap<K, V> build() {
+      if (valueComparator != null) {
+        for (Collection<V> values : builderMultimap.asMap().values()) {
+          List<V> list = (List <V>) values;
+          Collections.sort(list, valueComparator);
+        }
+      }
+      return copyOf(builderMultimap);
+    }
+  }
+
+  /**
+   * Returns an immutable multimap containing the same mappings as {@code
+   * multimap}. The generated multimap's key and value orderings correspond to
+   * the iteration ordering of the {@code multimap.asMap()} view.
+   *
+   * <p>Despite the method name, this method attempts to avoid actually copying
+   * the data when it is safe to do so. The exact circumstances under which a
+   * copy will or will not be performed are undocumented and subject to change.
+   *
+   * @throws NullPointerException if any key or value in {@code multimap} is
+   *         null
+   */
+  public static <K, V> ImmutableMultimap<K, V> copyOf(
+      Multimap<? extends K, ? extends V> multimap) {
+    if (multimap instanceof ImmutableMultimap) {
+      @SuppressWarnings("unchecked") // safe since multimap is not writable
+      ImmutableMultimap<K, V> kvMultimap
+          = (ImmutableMultimap<K, V>) multimap;
+      if (!kvMultimap.isPartialView()) {
+        return kvMultimap;
+      }
+    }
+    return ImmutableListMultimap.copyOf(multimap);
+  }
+
+  final transient ImmutableMap<K, ? extends ImmutableCollection<V>> map;
+  final transient int size;
+
+  // These constants allow the deserialization code to set final fields. This
+  // holder class makes sure they are not initialized unless an instance is
+  // deserialized.
+  @GwtIncompatible("java serialization is not supported")
+  static class FieldSettersHolder {
+    static final Serialization.FieldSetter<ImmutableMultimap>
+        MAP_FIELD_SETTER = Serialization.getFieldSetter(
+        ImmutableMultimap.class, "map");
+    static final Serialization.FieldSetter<ImmutableMultimap>
+        SIZE_FIELD_SETTER = Serialization.getFieldSetter(
+        ImmutableMultimap.class, "size");
+  }
+
+  ImmutableMultimap(ImmutableMap<K, ? extends ImmutableCollection<V>> map,
+      int size) {
+    this.map = map;
+    this.size = size;
+  }
+
+  // mutators (not supported)
+
+  /**
+   * Guaranteed to throw an exception and leave the multimap unmodified.
+   *
+   * @throws UnsupportedOperationException always
+   */
+  @Override
+  public ImmutableCollection<V> removeAll(Object key) {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * Guaranteed to throw an exception and leave the multimap unmodified.
+   *
+   * @throws UnsupportedOperationException always
+   */
+  @Override
+  public ImmutableCollection<V> replaceValues(K key,
+      Iterable<? extends V> values) {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * Guaranteed to throw an exception and leave the multimap unmodified.
+   *
+   * @throws UnsupportedOperationException always
+   */
+  @Override
+  public void clear() {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * Returns an immutable collection of the values for the given key.  If no
+   * mappings in the multimap have the provided key, an empty immutable
+   * collection is returned. The values are in the same order as the parameters
+   * used to build this multimap.
+   */
+  @Override
+  public abstract ImmutableCollection<V> get(K key);
+
+  /**
+   * Returns an immutable multimap which is the inverse of this one. For every
+   * key-value mapping in the original, the result will have a mapping with
+   * key and value reversed.
+   *
+   * @since 11
+   */
+  @Beta
+  public abstract ImmutableMultimap<V, K> inverse();
+
+  /**
+   * Guaranteed to throw an exception and leave the multimap unmodified.
+   *
+   * @throws UnsupportedOperationException always
+   */
+  @Override
+  public boolean put(K key, V value) {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * Guaranteed to throw an exception and leave the multimap unmodified.
+   *
+   * @throws UnsupportedOperationException always
+   */
+  @Override
+  public boolean putAll(K key, Iterable<? extends V> values) {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * Guaranteed to throw an exception and leave the multimap unmodified.
+   *
+   * @throws UnsupportedOperationException always
+   */
+  @Override
+  public boolean putAll(Multimap<? extends K, ? extends V> multimap) {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * Guaranteed to throw an exception and leave the multimap unmodified.
+   *
+   * @throws UnsupportedOperationException always
+   */
+  @Override
+  public boolean remove(Object key, Object value) {
+    throw new UnsupportedOperationException();
+  }
+
+  boolean isPartialView(){
+    return map.isPartialView();
+  }
+
+  // accessors
+
+  @Override
+  public boolean containsEntry(@Nullable Object key, @Nullable Object value) {
+    Collection<V> values = map.get(key);
+    return values != null && values.contains(value);
+  }
+
+  @Override
+  public boolean containsKey(@Nullable Object key) {
+    return map.containsKey(key);
+  }
+
+  @Override
+  public boolean containsValue(@Nullable Object value) {
+    for (Collection<V> valueCollection : map.values()) {
+      if (valueCollection.contains(value)) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  @Override
+  public boolean isEmpty() {
+    return size == 0;
+  }
+
+  @Override
+  public int size() {
+    return size;
+  }
+
+  @Override public boolean equals(@Nullable Object object) {
+    if (object instanceof Multimap) {
+      Multimap<?, ?> that = (Multimap<?, ?>) object;
+      return this.map.equals(that.asMap());
+    }
+    return false;
+  }
+
+  @Override public int hashCode() {
+    return map.hashCode();
+  }
+
+  @Override public String toString() {
+    return map.toString();
+  }
+
+  // views
+
+  /**
+   * Returns an immutable set of the distinct keys in this multimap. These keys
+   * are ordered according to when they first appeared during the construction
+   * of this multimap.
+   */
+  @Override
+  public ImmutableSet<K> keySet() {
+    return map.keySet();
+  }
+
+  /**
+   * Returns an immutable map that associates each key with its corresponding
+   * values in the multimap.
+   */
+  @Override
+  @SuppressWarnings("unchecked") // a widening cast
+  public ImmutableMap<K, Collection<V>> asMap() {
+    return (ImmutableMap) map;
+  }
+
+  private transient ImmutableCollection<Entry<K, V>> entries;
+
+  /**
+   * Returns an immutable collection of all key-value pairs in the multimap. Its
+   * iterator traverses the values for the first key, the values for the second
+   * key, and so on.
+   */
+  @Override
+  public ImmutableCollection<Entry<K, V>> entries() {
+    ImmutableCollection<Entry<K, V>> result = entries;
+    return (result == null)
+        ? (entries = new EntryCollection<K, V>(this)) : result;
+  }
+
+  private static class EntryCollection<K, V>
+      extends ImmutableCollection<Entry<K, V>> {
+    final ImmutableMultimap<K, V> multimap;
+
+    EntryCollection(ImmutableMultimap<K, V> multimap) {
+      this.multimap = multimap;
+    }
+
+    @Override public UnmodifiableIterator<Entry<K, V>> iterator() {
+      final Iterator<? extends Entry<K, ? extends ImmutableCollection<V>>>
+          mapIterator = this.multimap.map.entrySet().iterator();
+
+      return new UnmodifiableIterator<Entry<K, V>>() {
+        K key;
+        Iterator<V> valueIterator;
+
+        @Override
+        public boolean hasNext() {
+          return (key != null && valueIterator.hasNext())
+              || mapIterator.hasNext();
+        }
+
+        @Override
+        public Entry<K, V> next() {
+          if (key == null || !valueIterator.hasNext()) {
+            Entry<K, ? extends ImmutableCollection<V>> entry
+                = mapIterator.next();
+            key = entry.getKey();
+            valueIterator = entry.getValue().iterator();
+          }
+          return Maps.immutableEntry(key, valueIterator.next());
+        }
+      };
+    }
+
+    @Override boolean isPartialView() {
+      return multimap.isPartialView();
+    }
+
+    @Override
+    public int size() {
+      return multimap.size();
+    }
+
+    @Override public boolean contains(Object object) {
+      if (object instanceof Entry) {
+        Entry<?, ?> entry = (Entry<?, ?>) object;
+        return multimap.containsEntry(entry.getKey(), entry.getValue());
+      }
+      return false;
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  private transient ImmutableMultiset<K> keys;
+
+  /**
+   * Returns a collection, which may contain duplicates, of all keys. The number
+   * of times a key appears in the returned multiset equals the number of
+   * mappings the key has in the multimap. Duplicate keys appear consecutively
+   * in the multiset's iteration order.
+   */
+  @Override
+  public ImmutableMultiset<K> keys() {
+    ImmutableMultiset<K> result = keys;
+    return (result == null) ? (keys = createKeys()) : result;
+  }
+
+  private ImmutableMultiset<K> createKeys() {
+    ImmutableMultiset.Builder<K> builder = ImmutableMultiset.builder();
+    for (Entry<K, ? extends ImmutableCollection<V>> entry
+        : map.entrySet()) {
+      builder.addCopies(entry.getKey(), entry.getValue().size());
+    }
+    return builder.build();
+  }
+
+  private transient ImmutableCollection<V> values;
+
+  /**
+   * Returns an immutable collection of the values in this multimap. Its
+   * iterator traverses the values for the first key, the values for the second
+   * key, and so on.
+   */
+  @Override
+  public ImmutableCollection<V> values() {
+    ImmutableCollection<V> result = values;
+    return (result == null) ? (values = new Values<V>(this)) : result;
+  }
+
+  private static class Values<V> extends ImmutableCollection<V> {
+    final ImmutableMultimap<?, V> multimap;
+
+    Values(ImmutableMultimap<?, V> multimap) {
+      this.multimap = multimap;
+    }
+
+    @Override public UnmodifiableIterator<V> iterator() {
+      final Iterator<? extends Entry<?, V>> entryIterator
+          = multimap.entries().iterator();
+      return new UnmodifiableIterator<V>() {
+        @Override
+        public boolean hasNext() {
+          return entryIterator.hasNext();
+        }
+        @Override
+        public V next() {
+          return entryIterator.next().getValue();
+        }
+      };
+    }
+
+    @Override
+    public int size() {
+      return multimap.size();
+    }
+
+    @Override boolean isPartialView() {
+      return true;
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  private static final long serialVersionUID = 0;
+}
diff --git a/guava/src/com/google/common/collect/ImmutableMultiset.java b/guava/src/com/google/common/collect/ImmutableMultiset.java
new file mode 100644
index 0000000..bd07423
--- /dev/null
+++ b/guava/src/com/google/common/collect/ImmutableMultiset.java
@@ -0,0 +1,632 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.collect.Multiset.Entry;
+import com.google.common.primitives.Ints;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * An immutable hash-based multiset. Does not permit null elements.
+ *
+ * <p>Its iterator orders elements according to the first appearance of the
+ * element among the items passed to the factory method or builder. When the
+ * multiset contains multiple instances of an element, those instances are
+ * consecutive in the iteration order.
+ *
+ * @author Jared Levy
+ * @author Louis Wasserman
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible(serializable = true)
+@SuppressWarnings("serial") // we're overriding default serialization
+// TODO(user): write an efficient asList() implementation
+public abstract class ImmutableMultiset<E> extends ImmutableCollection<E>
+    implements Multiset<E> {
+
+  /**
+   * Returns the empty immutable multiset.
+   */
+  @SuppressWarnings("unchecked") // all supported methods are covariant
+  public static <E> ImmutableMultiset<E> of() {
+    return (ImmutableMultiset<E>) EmptyImmutableMultiset.INSTANCE;
+  }
+
+  /**
+   * Returns an immutable multiset containing a single element.
+   *
+   * @throws NullPointerException if {@code element} is null
+   * @since 6.0 (source-compatible since 2.0)
+   */
+  @SuppressWarnings("unchecked") // generic array created but never written
+  public static <E> ImmutableMultiset<E> of(E element) {
+    return copyOfInternal(element);
+  }
+
+  /**
+   * Returns an immutable multiset containing the given elements, in order.
+   *
+   * @throws NullPointerException if any element is null
+   * @since 6.0 (source-compatible since 2.0)
+   */
+  @SuppressWarnings("unchecked") //
+  public static <E> ImmutableMultiset<E> of(E e1, E e2) {
+    return copyOfInternal(e1, e2);
+  }
+
+  /**
+   * Returns an immutable multiset containing the given elements, in order.
+   *
+   * @throws NullPointerException if any element is null
+   * @since 6.0 (source-compatible since 2.0)
+   */
+  @SuppressWarnings("unchecked") //
+  public static <E> ImmutableMultiset<E> of(E e1, E e2, E e3) {
+    return copyOfInternal(e1, e2, e3);
+  }
+
+  /**
+   * Returns an immutable multiset containing the given elements, in order.
+   *
+   * @throws NullPointerException if any element is null
+   * @since 6.0 (source-compatible since 2.0)
+   */
+  @SuppressWarnings("unchecked") //
+  public static <E> ImmutableMultiset<E> of(E e1, E e2, E e3, E e4) {
+    return copyOfInternal(e1, e2, e3, e4);
+  }
+
+  /**
+   * Returns an immutable multiset containing the given elements, in order.
+   *
+   * @throws NullPointerException if any element is null
+   * @since 6.0 (source-compatible since 2.0)
+   */
+  @SuppressWarnings("unchecked") //
+  public static <E> ImmutableMultiset<E> of(E e1, E e2, E e3, E e4, E e5) {
+    return copyOfInternal(e1, e2, e3, e4, e5);
+  }
+
+  /**
+   * Returns an immutable multiset containing the given elements, in order.
+   *
+   * @throws NullPointerException if any element is null
+   * @since 6.0 (source-compatible since 2.0)
+   */
+  @SuppressWarnings("unchecked") //
+  public static <E> ImmutableMultiset<E> of(
+      E e1, E e2, E e3, E e4, E e5, E e6, E... others) {
+    int size = others.length + 6;
+    List<E> all = new ArrayList<E>(size);
+    Collections.addAll(all, e1, e2, e3, e4, e5, e6);
+    Collections.addAll(all, others);
+    return copyOf(all);
+  }
+
+  /**
+   * Returns an immutable multiset containing the given elements.
+   *
+   * <p>The multiset is ordered by the first occurrence of each element. For
+   * example, {@code ImmutableMultiset.of(2, 3, 1, 3)} yields a multiset with
+   * elements in the order {@code 2, 3, 3, 1}.
+   *
+   * @throws NullPointerException if any of {@code elements} is null
+   * @deprecated use {@link #copyOf(Object[])}. <b>This method is scheduled for
+   *     deletion in January 2012.</b>
+   * @since 2.0 (changed from varargs in 6.0)
+   */
+  @Deprecated
+  public static <E> ImmutableMultiset<E> of(E[] elements) {
+    return copyOf(Arrays.asList(elements));
+  }
+
+  /**
+   * Returns an immutable multiset containing the given elements.
+   *
+   * <p>The multiset is ordered by the first occurrence of each element. For
+   * example, {@code ImmutableMultiset.copyOf([2, 3, 1, 3])} yields a multiset
+   * with elements in the order {@code 2, 3, 3, 1}.
+   *
+   * @throws NullPointerException if any of {@code elements} is null
+   * @since 6.0
+   */
+  public static <E> ImmutableMultiset<E> copyOf(E[] elements) {
+    return copyOf(Arrays.asList(elements));
+  }
+
+  /**
+   * Returns an immutable multiset containing the given elements.
+   *
+   * <p>The multiset is ordered by the first occurrence of each element. For
+   * example, {@code ImmutableMultiset.copyOf(Arrays.asList(2, 3, 1, 3))} yields
+   * a multiset with elements in the order {@code 2, 3, 3, 1}.
+   *
+   * <p>Despite the method name, this method attempts to avoid actually copying
+   * the data when it is safe to do so. The exact circumstances under which a
+   * copy will or will not be performed are undocumented and subject to change.
+   *
+   * <p><b>Note:</b> Despite what the method name suggests, if {@code elements}
+   * is an {@code ImmutableMultiset}, no copy will actually be performed, and
+   * the given multiset itself will be returned.
+   *
+   * @throws NullPointerException if any of {@code elements} is null
+   */
+  public static <E> ImmutableMultiset<E> copyOf(
+      Iterable<? extends E> elements) {
+    if (elements instanceof ImmutableMultiset) {
+      @SuppressWarnings("unchecked") // all supported methods are covariant
+      ImmutableMultiset<E> result = (ImmutableMultiset<E>) elements;
+      if (!result.isPartialView()) {
+        return result;
+      }
+    }
+
+    Multiset<? extends E> multiset = (elements instanceof Multiset)
+        ? Multisets.cast(elements)
+        : LinkedHashMultiset.create(elements);
+
+    return copyOfInternal(multiset);
+  }
+
+  private static <E> ImmutableMultiset<E> copyOfInternal(E... elements) {
+    return copyOf(Arrays.asList(elements));
+  }
+
+  private static <E> ImmutableMultiset<E> copyOfInternal(
+      Multiset<? extends E> multiset) {
+    return copyFromEntries(multiset.entrySet());
+  }
+
+  static <E> ImmutableMultiset<E> copyFromEntries(
+      Collection<? extends Entry<? extends E>> entries) {
+    long size = 0;
+    ImmutableMap.Builder<E, Integer> builder = ImmutableMap.builder();
+    for (Entry<? extends E> entry : entries) {
+      int count = entry.getCount();
+      if (count > 0) {
+        // Since ImmutableMap.Builder throws an NPE if an element is null, no
+        // other null checks are needed.
+        builder.put(entry.getElement(), count);
+        size += count;
+      }
+    }
+
+    if (size == 0) {
+      return of();
+    }
+    return new RegularImmutableMultiset<E>(builder.build(), Ints.saturatedCast(size));
+  }
+
+  /**
+   * Returns an immutable multiset containing the given elements.
+   *
+   * <p>The multiset is ordered by the first occurrence of each element. For
+   * example,
+   * {@code ImmutableMultiset.copyOf(Arrays.asList(2, 3, 1, 3).iterator())}
+   * yields a multiset with elements in the order {@code 2, 3, 3, 1}.
+   *
+   * @throws NullPointerException if any of {@code elements} is null
+   */
+  public static <E> ImmutableMultiset<E> copyOf(
+      Iterator<? extends E> elements) {
+    Multiset<E> multiset = LinkedHashMultiset.create();
+    Iterators.addAll(multiset, elements);
+    return copyOfInternal(multiset);
+  }
+
+  ImmutableMultiset() {}
+
+  @Override public UnmodifiableIterator<E> iterator() {
+    final Iterator<Entry<E>> entryIterator = entryIterator();
+
+    return new UnmodifiableIterator<E>() {
+      int remaining;
+      E element;
+
+      @Override
+      public boolean hasNext() {
+        return (remaining > 0) || entryIterator.hasNext();
+      }
+
+      @Override
+      public E next() {
+        if (remaining <= 0) {
+          Entry<E> entry = entryIterator.next();
+          element = entry.getElement();
+          remaining = entry.getCount();
+        }
+        remaining--;
+        return element;
+      }
+    };
+  }
+
+  @Override
+  public boolean contains(@Nullable Object object) {
+    return count(object) > 0;
+  }
+
+  @Override
+  public boolean containsAll(Collection<?> targets) {
+    return elementSet().containsAll(targets);
+  }
+
+  /**
+   * Guaranteed to throw an exception and leave the collection unmodified.
+   *
+   * @throws UnsupportedOperationException always
+   */
+  @Override
+  public final int add(E element, int occurrences) {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * Guaranteed to throw an exception and leave the collection unmodified.
+   *
+   * @throws UnsupportedOperationException always
+   */
+  @Override
+  public final int remove(Object element, int occurrences) {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * Guaranteed to throw an exception and leave the collection unmodified.
+   *
+   * @throws UnsupportedOperationException always
+   */
+  @Override
+  public final int setCount(E element, int count) {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * Guaranteed to throw an exception and leave the collection unmodified.
+   *
+   * @throws UnsupportedOperationException always
+   */
+  @Override
+  public final boolean setCount(E element, int oldCount, int newCount) {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override public boolean equals(@Nullable Object object) {
+    if (object == this) {
+      return true;
+    }
+    if (object instanceof Multiset) {
+      Multiset<?> that = (Multiset<?>) object;
+      if (this.size() != that.size()) {
+        return false;
+      }
+      for (Entry<?> entry : that.entrySet()) {
+        if (count(entry.getElement()) != entry.getCount()) {
+          return false;
+        }
+      }
+      return true;
+    }
+    return false;
+  }
+
+  @Override public int hashCode() {
+    return Sets.hashCodeImpl(entrySet());
+  }
+
+  @Override public String toString() {
+    return entrySet().toString();
+  }
+
+  private transient ImmutableSet<Entry<E>> entrySet;
+
+  @Override
+  public Set<Entry<E>> entrySet() {
+    ImmutableSet<Entry<E>> es = entrySet;
+    return (es == null) ? (entrySet = createEntrySet()) : es;
+  }
+
+  abstract UnmodifiableIterator<Entry<E>> entryIterator();
+
+  abstract int distinctElements();
+
+  ImmutableSet<Entry<E>> createEntrySet() {
+    return new EntrySet<E>(this);
+  }
+
+  static class EntrySet<E> extends ImmutableSet<Entry<E>> {
+    transient final ImmutableMultiset<E> multiset;
+
+    public EntrySet(ImmutableMultiset<E> multiset) {
+      this.multiset = multiset;
+    }
+
+    @Override
+    public UnmodifiableIterator<Entry<E>> iterator() {
+      return multiset.entryIterator();
+    }
+
+    @Override
+    public int size() {
+      return multiset.distinctElements();
+    }
+
+    @Override
+    boolean isPartialView() {
+      return multiset.isPartialView();
+    }
+
+    @Override
+    public boolean contains(Object o) {
+      if (o instanceof Entry) {
+        Entry<?> entry = (Entry<?>) o;
+        if (entry.getCount() <= 0) {
+          return false;
+        }
+        int count = multiset.count(entry.getElement());
+        return count == entry.getCount();
+      }
+      return false;
+    }
+
+    /*
+     * TODO(hhchan): Revert once we have a separate, manual emulation of this
+     * class.
+     */
+    @Override
+    public Object[] toArray() {
+      Object[] newArray = new Object[size()];
+      return toArray(newArray);
+    }
+
+    /*
+     * TODO(hhchan): Revert once we have a separate, manual emulation of this
+     * class.
+     */
+    @Override
+    public <T> T[] toArray(T[] other) {
+      int size = size();
+      if (other.length < size) {
+        other = ObjectArrays.newArray(other, size);
+      } else if (other.length > size) {
+        other[size] = null;
+      }
+
+      // Writes will produce ArrayStoreException when the toArray() doc requires
+      Object[] otherAsObjectArray = other;
+      int index = 0;
+      for (Entry<?> element : this) {
+        otherAsObjectArray[index++] = element;
+      }
+      return other;
+    }
+
+    @Override
+    public int hashCode() {
+      return multiset.hashCode();
+    }
+
+    // We can't label this with @Override, because it doesn't override anything
+    // in the GWT emulated version.
+    Object writeReplace() {
+      return new EntrySetSerializedForm<E>(multiset);
+    }
+
+    static class EntrySetSerializedForm<E> implements Serializable {
+      final ImmutableMultiset<E> multiset;
+
+      EntrySetSerializedForm(ImmutableMultiset<E> multiset) {
+        this.multiset = multiset;
+      }
+
+      Object readResolve() {
+        return multiset.entrySet();
+      }
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  private static class SerializedForm implements Serializable {
+    final Object[] elements;
+    final int[] counts;
+
+    SerializedForm(Multiset<?> multiset) {
+      int distinct = multiset.entrySet().size();
+      elements = new Object[distinct];
+      counts = new int[distinct];
+      int i = 0;
+      for (Entry<?> entry : multiset.entrySet()) {
+        elements[i] = entry.getElement();
+        counts[i] = entry.getCount();
+        i++;
+      }
+    }
+
+    Object readResolve() {
+      LinkedHashMultiset<Object> multiset =
+          LinkedHashMultiset.create(elements.length);
+      for (int i = 0; i < elements.length; i++) {
+        multiset.add(elements[i], counts[i]);
+      }
+      return ImmutableMultiset.copyOf(multiset);
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  // We can't label this with @Override, because it doesn't override anything
+  // in the GWT emulated version.
+  Object writeReplace() {
+    return new SerializedForm(this);
+  }
+
+  /**
+   * Returns a new builder. The generated builder is equivalent to the builder
+   * created by the {@link Builder} constructor.
+   */
+  public static <E> Builder<E> builder() {
+    return new Builder<E>();
+  }
+
+  /**
+   * A builder for creating immutable multiset instances, especially {@code
+   * public static final} multisets ("constant multisets"). Example:
+   * <pre> {@code
+   *
+   *   public static final ImmutableMultiset<Bean> BEANS =
+   *       new ImmutableMultiset.Builder<Bean>()
+   *           .addCopies(Bean.COCOA, 4)
+   *           .addCopies(Bean.GARDEN, 6)
+   *           .addCopies(Bean.RED, 8)
+   *           .addCopies(Bean.BLACK_EYED, 10)
+   *           .build();}</pre>
+   *
+   * Builder instances can be reused; it is safe to call {@link #build} multiple
+   * times to build multiple multisets in series.
+   *
+   * @since 2.0 (imported from Google Collections Library)
+   */
+  public static class Builder<E> extends ImmutableCollection.Builder<E> {
+    final Multiset<E> contents;
+
+    /**
+     * Creates a new builder. The returned builder is equivalent to the builder
+     * generated by {@link ImmutableMultiset#builder}.
+     */
+    public Builder() {
+      this(LinkedHashMultiset.<E>create());
+    }
+
+    Builder(Multiset<E> contents) {
+      this.contents = contents;
+    }
+
+    /**
+     * Adds {@code element} to the {@code ImmutableMultiset}.
+     *
+     * @param element the element to add
+     * @return this {@code Builder} object
+     * @throws NullPointerException if {@code element} is null
+     */
+    @Override public Builder<E> add(E element) {
+      contents.add(checkNotNull(element));
+      return this;
+    }
+
+    /**
+     * Adds a number of occurrences of an element to this {@code
+     * ImmutableMultiset}.
+     *
+     * @param element the element to add
+     * @param occurrences the number of occurrences of the element to add. May
+     *     be zero, in which case no change will be made.
+     * @return this {@code Builder} object
+     * @throws NullPointerException if {@code element} is null
+     * @throws IllegalArgumentException if {@code occurrences} is negative, or
+     *     if this operation would result in more than {@link Integer#MAX_VALUE}
+     *     occurrences of the element
+     */
+    public Builder<E> addCopies(E element, int occurrences) {
+      contents.add(checkNotNull(element), occurrences);
+      return this;
+    }
+
+    /**
+     * Adds or removes the necessary occurrences of an element such that the
+     * element attains the desired count.
+     *
+     * @param element the element to add or remove occurrences of
+     * @param count the desired count of the element in this multiset
+     * @return this {@code Builder} object
+     * @throws NullPointerException if {@code element} is null
+     * @throws IllegalArgumentException if {@code count} is negative
+     */
+    public Builder<E> setCount(E element, int count) {
+      contents.setCount(checkNotNull(element), count);
+      return this;
+    }
+
+    /**
+     * Adds each element of {@code elements} to the {@code ImmutableMultiset}.
+     *
+     * @param elements the elements to add
+     * @return this {@code Builder} object
+     * @throws NullPointerException if {@code elements} is null or contains a
+     *     null element
+     */
+    @Override public Builder<E> add(E... elements) {
+      super.add(elements);
+      return this;
+    }
+
+    /**
+     * Adds each element of {@code elements} to the {@code ImmutableMultiset}.
+     *
+     * @param elements the {@code Iterable} to add to the {@code
+     *     ImmutableMultiset}
+     * @return this {@code Builder} object
+     * @throws NullPointerException if {@code elements} is null or contains a
+     *     null element
+     */
+    @Override public Builder<E> addAll(Iterable<? extends E> elements) {
+      if (elements instanceof Multiset) {
+        Multiset<? extends E> multiset = Multisets.cast(elements);
+        for (Entry<? extends E> entry : multiset.entrySet()) {
+          addCopies(entry.getElement(), entry.getCount());
+        }
+      } else {
+        super.addAll(elements);
+      }
+      return this;
+    }
+
+    /**
+     * Adds each element of {@code elements} to the {@code ImmutableMultiset}.
+     *
+     * @param elements the elements to add to the {@code ImmutableMultiset}
+     * @return this {@code Builder} object
+     * @throws NullPointerException if {@code elements} is null or contains a
+     *     null element
+     */
+    @Override public Builder<E> addAll(Iterator<? extends E> elements) {
+      super.addAll(elements);
+      return this;
+    }
+
+    /**
+     * Returns a newly-created {@code ImmutableMultiset} based on the contents
+     * of the {@code Builder}.
+     */
+    @Override public ImmutableMultiset<E> build() {
+      return copyOf(contents);
+    }
+  }
+}
diff --git a/guava/src/com/google/common/collect/ImmutableSet.java b/guava/src/com/google/common/collect/ImmutableSet.java
new file mode 100644
index 0000000..fb60ce6
--- /dev/null
+++ b/guava/src/com/google/common/collect/ImmutableSet.java
@@ -0,0 +1,630 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.primitives.Ints;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * A high-performance, immutable {@code Set} with reliable, user-specified
+ * iteration order. Does not permit null elements.
+ *
+ * <p>Unlike {@link Collections#unmodifiableSet}, which is a <i>view</i> of a
+ * separate collection that can still change, an instance of this class contains
+ * its own private data and will <i>never</i> change. This class is convenient
+ * for {@code public static final} sets ("constant sets") and also lets you
+ * easily make a "defensive copy" of a set provided to your class by a caller.
+ *
+ * <p><b>Warning:</b> Like most sets, an {@code ImmutableSet} will not function
+ * correctly if an element is modified after being placed in the set. For this
+ * reason, and to avoid general confusion, it is strongly recommended to place
+ * only immutable objects into this collection.
+ *
+ * <p>This class has been observed to perform significantly better than {@link
+ * HashSet} for objects with very fast {@link Object#hashCode} implementations
+ * (as a well-behaved immutable object should). While this class's factory
+ * methods create hash-based instances, the {@link ImmutableSortedSet} subclass
+ * performs binary searches instead.
+ *
+ * <p><b>Note:</b> Although this class is not final, it cannot be subclassed
+ * outside its package as it has no public or protected constructors. Thus,
+ * instances of this type are guaranteed to be immutable.
+ *
+ * @see ImmutableList
+ * @see ImmutableMap
+ * @author Kevin Bourrillion
+ * @author Nick Kralevich
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible(serializable = true, emulated = true)
+@SuppressWarnings("serial") // we're overriding default serialization
+public abstract class ImmutableSet<E> extends ImmutableCollection<E>
+    implements Set<E> {
+  /**
+   * Returns the empty immutable set. This set behaves and performs comparably
+   * to {@link Collections#emptySet}, and is preferable mainly for consistency
+   * and maintainability of your code.
+   */
+  // Casting to any type is safe because the set will never hold any elements.
+  @SuppressWarnings({"unchecked"})
+  public static <E> ImmutableSet<E> of() {
+    return (ImmutableSet<E>) EmptyImmutableSet.INSTANCE;
+  }
+
+  /**
+   * Returns an immutable set containing a single element. This set behaves and
+   * performs comparably to {@link Collections#singleton}, but will not accept
+   * a null element. It is preferable mainly for consistency and
+   * maintainability of your code.
+   */
+  public static <E> ImmutableSet<E> of(E element) {
+    return new SingletonImmutableSet<E>(element);
+  }
+
+  /**
+   * Returns an immutable set containing the given elements, in order. Repeated
+   * occurrences of an element (according to {@link Object#equals}) after the
+   * first are ignored.
+   *
+   * @throws NullPointerException if any element is null
+   */
+  public static <E> ImmutableSet<E> of(E e1, E e2) {
+    return construct(e1, e2);
+  }
+
+  /**
+   * Returns an immutable set containing the given elements, in order. Repeated
+   * occurrences of an element (according to {@link Object#equals}) after the
+   * first are ignored.
+   *
+   * @throws NullPointerException if any element is null
+   */
+  public static <E> ImmutableSet<E> of(E e1, E e2, E e3) {
+    return construct(e1, e2, e3);
+  }
+
+  /**
+   * Returns an immutable set containing the given elements, in order. Repeated
+   * occurrences of an element (according to {@link Object#equals}) after the
+   * first are ignored.
+   *
+   * @throws NullPointerException if any element is null
+   */
+  public static <E> ImmutableSet<E> of(E e1, E e2, E e3, E e4) {
+    return construct(e1, e2, e3, e4);
+  }
+
+  /**
+   * Returns an immutable set containing the given elements, in order. Repeated
+   * occurrences of an element (according to {@link Object#equals}) after the
+   * first are ignored.
+   *
+   * @throws NullPointerException if any element is null
+   */
+  public static <E> ImmutableSet<E> of(E e1, E e2, E e3, E e4, E e5) {
+    return construct(e1, e2, e3, e4, e5);
+  }
+
+  /**
+   * Returns an immutable set containing the given elements, in order. Repeated
+   * occurrences of an element (according to {@link Object#equals}) after the
+   * first are ignored.
+   *
+   * @throws NullPointerException if any element is null
+   * @since 3.0 (source-compatible since 2.0)
+   */
+  public static <E> ImmutableSet<E> of(E e1, E e2, E e3, E e4, E e5, E e6,
+      E... others) {
+    final int paramCount = 6;
+    Object[] elements = new Object[paramCount + others.length];
+    elements[0] = e1;
+    elements[1] = e2;
+    elements[2] = e3;
+    elements[3] = e4;
+    elements[4] = e5;
+    elements[5] = e6;
+    for (int i = paramCount; i < elements.length; i++) {
+      elements[i] = others[i - paramCount];
+    }
+    return construct(elements);
+  }
+
+  /** {@code elements} has to be internally created array. */
+  private static <E> ImmutableSet<E> construct(Object... elements) {
+    int tableSize = chooseTableSize(elements.length);
+    Object[] table = new Object[tableSize];
+    int mask = tableSize - 1;
+    ArrayList<Object> uniqueElementsList = null;
+    int hashCode = 0;
+    for (int i = 0; i < elements.length; i++) {
+      Object element = elements[i];
+      int hash = element.hashCode();
+      for (int j = Hashing.smear(hash); ; j++) {
+        int index = j & mask;
+        Object value = table[index];
+        if (value == null) {
+          if (uniqueElementsList != null) {
+            uniqueElementsList.add(element);
+          }
+          // Came to an empty slot. Put the element here.
+          table[index] = element;
+          hashCode += hash;
+          break;
+        } else if (value.equals(element)) {
+          if (uniqueElementsList == null) {
+            // first dup
+            uniqueElementsList = new ArrayList<Object>(elements.length);
+            for (int k = 0; k < i; k++) {
+              Object previous = elements[k];
+              uniqueElementsList.add(previous);
+            }
+          }
+          break;
+        }
+      }
+    }
+    Object[] uniqueElements = uniqueElementsList == null
+        ? elements
+        : uniqueElementsList.toArray();
+    if (uniqueElements.length == 1) {
+      // There is only one element or elements are all duplicates
+      @SuppressWarnings("unchecked") // we are careful to only pass in E
+      E element = (E) uniqueElements[0];
+      return new SingletonImmutableSet<E>(element, hashCode);
+    } else if (tableSize > 2 * chooseTableSize(uniqueElements.length)) {
+      // Resize the table when the array includes too many duplicates.
+      // when this happens, we have already made a copy
+      return construct(uniqueElements);
+    } else {
+      return new RegularImmutableSet<E>(uniqueElements, hashCode, table, mask);
+    }
+  }
+
+  // We use power-of-2 tables, and this is the highest int that's a power of 2
+  static final int MAX_TABLE_SIZE = Ints.MAX_POWER_OF_TWO;
+
+  // If the set has this many elements, it will "max out" the table size
+  static final int CUTOFF = 1 << 29;
+
+  /**
+   * Returns an array size suitable for the backing array of a hash table that
+   * uses linear probing in its implementation.  The returned size is the
+   * smallest power of two that can hold setSize elements while being at most
+   * 50% full, if possible.
+   */
+  static int chooseTableSize(int setSize) {
+    if (setSize < CUTOFF) {
+      return Integer.highestOneBit(setSize) << 2;
+    }
+
+    // The table can't be completely full or we'll get infinite reprobes
+    checkArgument(setSize < MAX_TABLE_SIZE, "collection too large");
+    return MAX_TABLE_SIZE;
+  }
+
+  /**
+   * Returns an immutable set containing the given elements, in order. Repeated
+   * occurrences of an element (according to {@link Object#equals}) after the
+   * first are ignored.
+   *
+   * @throws NullPointerException if any of {@code elements} is null
+   * @since 3.0
+   */
+  public static <E> ImmutableSet<E> copyOf(E[] elements) {
+    // TODO(benyu): could we delegate to
+    // copyFromCollection(Arrays.asList(elements))?
+    switch (elements.length) {
+      case 0:
+        return of();
+      case 1:
+        return of(elements[0]);
+      default:
+        return construct(elements.clone());
+    }
+  }
+
+  /**
+   * Returns an immutable set containing the given elements, in order. Repeated
+   * occurrences of an element (according to {@link Object#equals}) after the
+   * first are ignored. This method iterates over {@code elements} at most once.
+   *
+   * <p>Note that if {@code s} is a {@code Set<String>}, then {@code
+   * ImmutableSet.copyOf(s)} returns an {@code ImmutableSet<String>} containing
+   * each of the strings in {@code s}, while {@code ImmutableSet.of(s)} returns
+   * a {@code ImmutableSet<Set<String>>} containing one element (the given set
+   * itself).
+   *
+   * <p>Despite the method name, this method attempts to avoid actually copying
+   * the data when it is safe to do so. The exact circumstances under which a
+   * copy will or will not be performed are undocumented and subject to change.
+   *
+   * @throws NullPointerException if any of {@code elements} is null
+   */
+  public static <E> ImmutableSet<E> copyOf(Iterable<? extends E> elements) {
+    return (elements instanceof Collection)
+        ? copyOf(Collections2.cast(elements))
+        : copyOf(elements.iterator());
+  }
+
+  /**
+   * Returns an immutable set containing the given elements, in order. Repeated
+   * occurrences of an element (according to {@link Object#equals}) after the
+   * first are ignored.
+   *
+   * @throws NullPointerException if any of {@code elements} is null
+   */
+  public static <E> ImmutableSet<E> copyOf(Iterator<? extends E> elements) {
+    // TODO(benyu): here we could avoid toArray() for 0 or 1-element list,
+    // worth it?
+    return copyFromCollection(Lists.newArrayList(elements));
+  }
+
+  /**
+   * Returns an immutable set containing the given elements, in order. Repeated
+   * occurrences of an element (according to {@link Object#equals}) after the
+   * first are ignored. This method iterates over {@code elements} at most
+   * once.
+   *
+   * <p>Note that if {@code s} is a {@code Set<String>}, then {@code
+   * ImmutableSet.copyOf(s)} returns an {@code ImmutableSet<String>} containing
+   * each of the strings in {@code s}, while {@code ImmutableSet.of(s)} returns
+   * a {@code ImmutableSet<Set<String>>} containing one element (the given set
+   * itself).
+   *
+   * <p><b>Note:</b> Despite what the method name suggests, {@code copyOf} will
+   * return constant-space views, rather than linear-space copies, of some
+   * inputs known to be immutable. For some other immutable inputs, such as key
+   * sets of an {@code ImmutableMap}, it still performs a copy in order to avoid
+   * holding references to the values of the map. The heuristics used in this
+   * decision are undocumented and subject to change except that:
+   * <ul>
+   * <li>A full copy will be done of any {@code ImmutableSortedSet}.</li>
+   * <li>{@code ImmutableSet.copyOf()} is idempotent with respect to pointer
+   * equality.</li>
+   * </ul>
+   *
+   * <p>This method is safe to use even when {@code elements} is a synchronized
+   * or concurrent collection that is currently being modified by another
+   * thread.
+   *
+   * @throws NullPointerException if any of {@code elements} is null
+   * @since 7.0 (source-compatible since 2.0)
+   */
+  public static <E> ImmutableSet<E> copyOf(Collection<? extends E> elements) {
+    if (elements instanceof ImmutableSet
+        && !(elements instanceof ImmutableSortedSet)) {
+      @SuppressWarnings("unchecked") // all supported methods are covariant
+      ImmutableSet<E> set = (ImmutableSet<E>) elements;
+      if (!set.isPartialView()) {
+        return set;
+      }
+    }
+    return copyFromCollection(elements);
+  }
+
+  private static <E> ImmutableSet<E> copyFromCollection(
+      Collection<? extends E> collection) {
+    Object[] elements = collection.toArray();
+    switch (elements.length) {
+      case 0:
+        return of();
+      case 1:
+        @SuppressWarnings("unchecked") // collection had only Es in it
+        E onlyElement = (E) elements[0];
+        return of(onlyElement);
+      default:
+        // safe to use the array without copying it
+        // as specified by Collection.toArray().
+        return construct(elements);
+    }
+  }
+
+  ImmutableSet() {}
+
+  /** Returns {@code true} if the {@code hashCode()} method runs quickly. */
+  boolean isHashCodeFast() {
+    return false;
+  }
+
+  @Override public boolean equals(@Nullable Object object) {
+    if (object == this) {
+      return true;
+    }
+    if (object instanceof ImmutableSet
+        && isHashCodeFast()
+        && ((ImmutableSet<?>) object).isHashCodeFast()
+        && hashCode() != object.hashCode()) {
+      return false;
+    }
+    return Sets.equalsImpl(this, object);
+  }
+
+  @Override public int hashCode() {
+    return Sets.hashCodeImpl(this);
+  }
+
+  // This declaration is needed to make Set.iterator() and
+  // ImmutableCollection.iterator() consistent.
+  @Override public abstract UnmodifiableIterator<E> iterator();
+
+  abstract static class ArrayImmutableSet<E> extends ImmutableSet<E> {
+    // the elements (two or more) in the desired order.
+    final transient Object[] elements;
+
+    ArrayImmutableSet(Object[] elements) {
+      this.elements = elements;
+    }
+
+    @Override
+    public int size() {
+      return elements.length;
+    }
+
+    @Override public boolean isEmpty() {
+      return false;
+    }
+
+    /*
+     * The cast is safe because the only way to create an instance is via the
+     * create() method above, which only permits elements of type E.
+     */
+    @SuppressWarnings("unchecked")
+    @Override public UnmodifiableIterator<E> iterator() {
+      return (UnmodifiableIterator<E>) Iterators.forArray(elements);
+    }
+
+    @Override public Object[] toArray() {
+      Object[] array = new Object[size()];
+      System.arraycopy(elements, 0, array, 0, size());
+      return array;
+    }
+
+    @Override public <T> T[] toArray(T[] array) {
+      int size = size();
+      if (array.length < size) {
+        array = ObjectArrays.newArray(array, size);
+      } else if (array.length > size) {
+        array[size] = null;
+      }
+      System.arraycopy(elements, 0, array, 0, size);
+      return array;
+    }
+
+    @Override public boolean containsAll(Collection<?> targets) {
+      if (targets == this) {
+        return true;
+      }
+      if (!(targets instanceof ArrayImmutableSet)) {
+        return super.containsAll(targets);
+      }
+      if (targets.size() > size()) {
+        return false;
+      }
+      for (Object target : ((ArrayImmutableSet<?>) targets).elements) {
+        if (!contains(target)) {
+          return false;
+        }
+      }
+      return true;
+    }
+
+    @Override boolean isPartialView() {
+      return false;
+    }
+
+    @Override ImmutableList<E> createAsList() {
+      return new ImmutableAsList<E>(elements, this);
+    }
+  }
+
+  /** such as ImmutableMap.keySet() */
+  abstract static class TransformedImmutableSet<D, E> extends ImmutableSet<E> {
+    final D[] source;
+    final int hashCode;
+
+    TransformedImmutableSet(D[] source, int hashCode) {
+      this.source = source;
+      this.hashCode = hashCode;
+    }
+
+    abstract E transform(D element);
+
+    @Override
+    public int size() {
+      return source.length;
+    }
+
+    @Override public boolean isEmpty() {
+      return false;
+    }
+
+    @Override public UnmodifiableIterator<E> iterator() {
+      return new AbstractIndexedListIterator<E>(source.length) {
+        @Override protected E get(int index) {
+          return transform(source[index]);
+        }
+      };
+    }
+
+    @Override public Object[] toArray() {
+      return toArray(new Object[size()]);
+    }
+
+    @Override public <T> T[] toArray(T[] array) {
+      int size = size();
+      if (array.length < size) {
+        array = ObjectArrays.newArray(array, size);
+      } else if (array.length > size) {
+        array[size] = null;
+      }
+
+      // Writes will produce ArrayStoreException when the toArray() doc requires
+      Object[] objectArray = array;
+      for (int i = 0; i < source.length; i++) {
+        objectArray[i] = transform(source[i]);
+      }
+      return array;
+    }
+
+    @Override public final int hashCode() {
+      return hashCode;
+    }
+
+    @Override boolean isHashCodeFast() {
+      return true;
+    }
+  }
+
+  /*
+   * This class is used to serialize all ImmutableSet instances, except for
+   * ImmutableEnumSet/ImmutableSortedSet, regardless of implementation type. It
+   * captures their "logical contents" and they are reconstructed using public
+   * static factories. This is necessary to ensure that the existence of a
+   * particular implementation type is an implementation detail.
+   */
+  private static class SerializedForm implements Serializable {
+    final Object[] elements;
+    SerializedForm(Object[] elements) {
+      this.elements = elements;
+    }
+    Object readResolve() {
+      return copyOf(elements);
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  @Override Object writeReplace() {
+    return new SerializedForm(toArray());
+  }
+
+  /**
+   * Returns a new builder. The generated builder is equivalent to the builder
+   * created by the {@link Builder} constructor.
+   */
+  public static <E> Builder<E> builder() {
+    return new Builder<E>();
+  }
+
+  /**
+   * A builder for creating immutable set instances, especially {@code public
+   * static final} sets ("constant sets"). Example: <pre>   {@code
+   *
+   *   public static final ImmutableSet<Color> GOOGLE_COLORS =
+   *       new ImmutableSet.Builder<Color>()
+   *           .addAll(WEBSAFE_COLORS)
+   *           .add(new Color(0, 191, 255))
+   *           .build();}</pre>
+   *
+   * Builder instances can be reused; it is safe to call {@link #build} multiple
+   * times to build multiple sets in series. Each set is a superset of the set
+   * created before it.
+   *
+   * @since 2.0 (imported from Google Collections Library)
+   */
+  public static class Builder<E> extends ImmutableCollection.Builder<E> {
+    // accessed directly by ImmutableSortedSet
+    final ArrayList<E> contents = Lists.newArrayList();
+
+    /**
+     * Creates a new builder. The returned builder is equivalent to the builder
+     * generated by {@link ImmutableSet#builder}.
+     */
+    public Builder() {}
+
+    /**
+     * Adds {@code element} to the {@code ImmutableSet}.  If the {@code
+     * ImmutableSet} already contains {@code element}, then {@code add} has no
+     * effect (only the previously added element is retained).
+     *
+     * @param element the element to add
+     * @return this {@code Builder} object
+     * @throws NullPointerException if {@code element} is null
+     */
+    @Override public Builder<E> add(E element) {
+      contents.add(checkNotNull(element));
+      return this;
+    }
+
+    /**
+     * Adds each element of {@code elements} to the {@code ImmutableSet},
+     * ignoring duplicate elements (only the first duplicate element is added).
+     *
+     * @param elements the elements to add
+     * @return this {@code Builder} object
+     * @throws NullPointerException if {@code elements} is null or contains a
+     *     null element
+     */
+    @Override public Builder<E> add(E... elements) {
+      contents.ensureCapacity(contents.size() + elements.length);
+      super.add(elements);
+      return this;
+    }
+
+    /**
+     * Adds each element of {@code elements} to the {@code ImmutableSet},
+     * ignoring duplicate elements (only the first duplicate element is added).
+     *
+     * @param elements the {@code Iterable} to add to the {@code ImmutableSet}
+     * @return this {@code Builder} object
+     * @throws NullPointerException if {@code elements} is null or contains a
+     *     null element
+     */
+    @Override public Builder<E> addAll(Iterable<? extends E> elements) {
+      if (elements instanceof Collection) {
+        Collection<?> collection = (Collection<?>) elements;
+        contents.ensureCapacity(contents.size() + collection.size());
+      }
+      super.addAll(elements);
+      return this;
+    }
+
+    /**
+     * Adds each element of {@code elements} to the {@code ImmutableSet},
+     * ignoring duplicate elements (only the first duplicate element is added).
+     *
+     * @param elements the elements to add to the {@code ImmutableSet}
+     * @return this {@code Builder} object
+     * @throws NullPointerException if {@code elements} is null or contains a
+     *     null element
+     */
+    @Override public Builder<E> addAll(Iterator<? extends E> elements) {
+      super.addAll(elements);
+      return this;
+    }
+
+    /**
+     * Returns a newly-created {@code ImmutableSet} based on the contents of
+     * the {@code Builder}.
+     */
+    @Override public ImmutableSet<E> build() {
+      return copyOf(contents);
+    }
+  }
+}
diff --git a/guava/src/com/google/common/collect/ImmutableSetMultimap.java b/guava/src/com/google/common/collect/ImmutableSetMultimap.java
new file mode 100644
index 0000000..04a6978
--- /dev/null
+++ b/guava/src/com/google/common/collect/ImmutableSetMultimap.java
@@ -0,0 +1,485 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+
+import java.io.IOException;
+import java.io.InvalidObjectException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.LinkedHashMap;
+import java.util.Map.Entry;
+import java.util.TreeMap;
+
+import javax.annotation.Nullable;
+
+/**
+ * An immutable {@link SetMultimap} with reliable user-specified key and value
+ * iteration order. Does not permit null keys or values.
+ *
+ * <p>Unlike {@link Multimaps#unmodifiableSetMultimap(SetMultimap)}, which is
+ * a <i>view</i> of a separate multimap which can still change, an instance of
+ * {@code ImmutableSetMultimap} contains its own data and will <i>never</i>
+ * change. {@code ImmutableSetMultimap} is convenient for
+ * {@code public static final} multimaps ("constant multimaps") and also lets
+ * you easily make a "defensive copy" of a multimap provided to your class by
+ * a caller.
+ *
+ * <p><b>Note:</b> Although this class is not final, it cannot be subclassed as
+ * it has no public or protected constructors. Thus, instances of this class
+ * are guaranteed to be immutable.
+ *
+ * @author Mike Ward
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible(serializable = true, emulated = true)
+public class ImmutableSetMultimap<K, V>
+    extends ImmutableMultimap<K, V>
+    implements SetMultimap<K, V> {
+
+  /** Returns the empty multimap. */
+  // Casting is safe because the multimap will never hold any elements.
+  @SuppressWarnings("unchecked")
+  public static <K, V> ImmutableSetMultimap<K, V> of() {
+    return (ImmutableSetMultimap<K, V>) EmptyImmutableSetMultimap.INSTANCE;
+  }
+
+  /**
+   * Returns an immutable multimap containing a single entry.
+   */
+  public static <K, V> ImmutableSetMultimap<K, V> of(K k1, V v1) {
+    ImmutableSetMultimap.Builder<K, V> builder = ImmutableSetMultimap.builder();
+    builder.put(k1, v1);
+    return builder.build();
+  }
+
+  /**
+   * Returns an immutable multimap containing the given entries, in order.
+   * Repeated occurrences of an entry (according to {@link Object#equals}) after
+   * the first are ignored.
+   */
+  public static <K, V> ImmutableSetMultimap<K, V> of(K k1, V v1, K k2, V v2) {
+    ImmutableSetMultimap.Builder<K, V> builder = ImmutableSetMultimap.builder();
+    builder.put(k1, v1);
+    builder.put(k2, v2);
+    return builder.build();
+  }
+
+  /**
+   * Returns an immutable multimap containing the given entries, in order.
+   * Repeated occurrences of an entry (according to {@link Object#equals}) after
+   * the first are ignored.
+   */
+  public static <K, V> ImmutableSetMultimap<K, V> of(
+      K k1, V v1, K k2, V v2, K k3, V v3) {
+    ImmutableSetMultimap.Builder<K, V> builder = ImmutableSetMultimap.builder();
+    builder.put(k1, v1);
+    builder.put(k2, v2);
+    builder.put(k3, v3);
+    return builder.build();
+  }
+
+  /**
+   * Returns an immutable multimap containing the given entries, in order.
+   * Repeated occurrences of an entry (according to {@link Object#equals}) after
+   * the first are ignored.
+   */
+  public static <K, V> ImmutableSetMultimap<K, V> of(
+      K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4) {
+    ImmutableSetMultimap.Builder<K, V> builder = ImmutableSetMultimap.builder();
+    builder.put(k1, v1);
+    builder.put(k2, v2);
+    builder.put(k3, v3);
+    builder.put(k4, v4);
+    return builder.build();
+  }
+
+  /**
+   * Returns an immutable multimap containing the given entries, in order.
+   * Repeated occurrences of an entry (according to {@link Object#equals}) after
+   * the first are ignored.
+   */
+  public static <K, V> ImmutableSetMultimap<K, V> of(
+      K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5) {
+    ImmutableSetMultimap.Builder<K, V> builder = ImmutableSetMultimap.builder();
+    builder.put(k1, v1);
+    builder.put(k2, v2);
+    builder.put(k3, v3);
+    builder.put(k4, v4);
+    builder.put(k5, v5);
+    return builder.build();
+  }
+
+  // looking for of() with > 5 entries? Use the builder instead.
+
+  /**
+   * Returns a new {@link Builder}.
+   */
+  public static <K, V> Builder<K, V> builder() {
+    return new Builder<K, V>();
+  }
+
+  /**
+   * Multimap for {@link ImmutableSetMultimap.Builder} that maintains key
+   * and value orderings and performs better than {@link LinkedHashMultimap}.
+   */
+  private static class BuilderMultimap<K, V> extends AbstractMultimap<K, V> {
+    BuilderMultimap() {
+      super(new LinkedHashMap<K, Collection<V>>());
+    }
+    @Override Collection<V> createCollection() {
+      return Sets.newLinkedHashSet();
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  /**
+   * Multimap for {@link ImmutableSetMultimap.Builder} that sorts keys and
+   * maintains value orderings.
+   */
+  private static class SortedKeyBuilderMultimap<K, V> 
+      extends AbstractMultimap<K, V> {
+    SortedKeyBuilderMultimap(
+        Comparator<? super K> keyComparator, Multimap<K, V> multimap) {
+      super(new TreeMap<K, Collection<V>>(keyComparator));
+      putAll(multimap);
+    }
+    @Override Collection<V> createCollection() {
+      return Sets.newLinkedHashSet();
+    }
+    private static final long serialVersionUID = 0;
+  }
+  
+  /**
+   * A builder for creating immutable {@code SetMultimap} instances, especially
+   * {@code public static final} multimaps ("constant multimaps"). Example:
+   * <pre>   {@code
+   *
+   *   static final Multimap<String, Integer> STRING_TO_INTEGER_MULTIMAP =
+   *       new ImmutableSetMultimap.Builder<String, Integer>()
+   *           .put("one", 1)
+   *           .putAll("several", 1, 2, 3)
+   *           .putAll("many", 1, 2, 3, 4, 5)
+   *           .build();}</pre>
+   *
+   * Builder instances can be reused; it is safe to call {@link #build} multiple
+   * times to build multiple multimaps in series. Each multimap contains the
+   * key-value mappings in the previously created multimaps.
+   *
+   * @since 2.0 (imported from Google Collections Library)
+   */
+  public static final class Builder<K, V>
+      extends ImmutableMultimap.Builder<K, V> {
+    /**
+     * Creates a new builder. The returned builder is equivalent to the builder
+     * generated by {@link ImmutableSetMultimap#builder}.
+     */
+    public Builder() {
+      builderMultimap = new BuilderMultimap<K, V>();      
+    }
+
+    /**
+     * Adds a key-value mapping to the built multimap if it is not already
+     * present.
+     */
+    @Override public Builder<K, V> put(K key, V value) {
+      builderMultimap.put(checkNotNull(key), checkNotNull(value));
+      return this;
+    }
+
+    /**
+     * Adds an entry to the built multimap if it is not already present.
+     *
+     * @since 11.0
+     */
+    @Override public Builder<K, V> put(Entry<? extends K, ? extends V> entry) {
+      builderMultimap.put(
+          checkNotNull(entry.getKey()), checkNotNull(entry.getValue()));
+      return this;
+    }
+
+    @Override public Builder<K, V> putAll(K key, Iterable<? extends V> values) {
+      Collection<V> collection = builderMultimap.get(checkNotNull(key));
+      for (V value : values) {
+        collection.add(checkNotNull(value));
+      }
+      return this;
+    }
+
+    @Override public Builder<K, V> putAll(K key, V... values) {
+      return putAll(key, Arrays.asList(values));
+    }
+
+    @Override public Builder<K, V> putAll(
+        Multimap<? extends K, ? extends V> multimap) {
+      for (Entry<? extends K, ? extends Collection<? extends V>> entry
+          : multimap.asMap().entrySet()) {
+        putAll(entry.getKey(), entry.getValue());
+      }
+      return this;
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * @since 8.0
+     */
+    @Beta @Override
+    public Builder<K, V> orderKeysBy(Comparator<? super K> keyComparator) {
+      builderMultimap = new SortedKeyBuilderMultimap<K, V>(
+          checkNotNull(keyComparator), builderMultimap);
+      return this;
+    }
+
+    /**
+     * Specifies the ordering of the generated multimap's values for each key.
+     * 
+     * <p>If this method is called, the sets returned by the {@code get()} 
+     * method of the generated multimap and its {@link Multimap#asMap()} view
+     * are {@link ImmutableSortedSet} instances. However, serialization does not
+     * preserve that property, though it does maintain the key and value
+     * ordering.
+     * 
+     * @since 8.0
+     */
+    // TODO: Make serialization behavior consistent.
+    @Beta @Override
+    public Builder<K, V> orderValuesBy(Comparator<? super V> valueComparator) {
+      super.orderValuesBy(valueComparator);
+      return this;
+    }
+
+    /**
+     * Returns a newly-created immutable set multimap.
+     */
+    @Override public ImmutableSetMultimap<K, V> build() {
+      return copyOf(builderMultimap, valueComparator);
+    }
+  }
+
+  /**
+   * Returns an immutable set multimap containing the same mappings as
+   * {@code multimap}. The generated multimap's key and value orderings
+   * correspond to the iteration ordering of the {@code multimap.asMap()} view.
+   * Repeated occurrences of an entry in the multimap after the first are
+   * ignored.
+   *
+   * <p>Despite the method name, this method attempts to avoid actually copying
+   * the data when it is safe to do so. The exact circumstances under which a
+   * copy will or will not be performed are undocumented and subject to change.
+   *
+   * @throws NullPointerException if any key or value in {@code multimap} is
+   *     null
+   */
+  public static <K, V> ImmutableSetMultimap<K, V> copyOf(
+      Multimap<? extends K, ? extends V> multimap) {
+    return copyOf(multimap, null);
+  }
+  
+  private static <K, V> ImmutableSetMultimap<K, V> copyOf(
+      Multimap<? extends K, ? extends V> multimap,
+      Comparator<? super V> valueComparator) {
+    checkNotNull(multimap); // eager for GWT
+    if (multimap.isEmpty() && valueComparator == null) {
+      return of();
+    }
+
+    if (multimap instanceof ImmutableSetMultimap) {
+      @SuppressWarnings("unchecked") // safe since multimap is not writable
+      ImmutableSetMultimap<K, V> kvMultimap
+          = (ImmutableSetMultimap<K, V>) multimap;
+      if (!kvMultimap.isPartialView()) {
+        return kvMultimap;
+      }
+    }
+
+    ImmutableMap.Builder<K, ImmutableSet<V>> builder = ImmutableMap.builder();
+    int size = 0;
+
+    for (Entry<? extends K, ? extends Collection<? extends V>> entry
+        : multimap.asMap().entrySet()) {
+      K key = entry.getKey();
+      Collection<? extends V> values = entry.getValue();
+      ImmutableSet<V> set = (valueComparator == null)
+          ? ImmutableSet.copyOf(values) 
+          : ImmutableSortedSet.copyOf(valueComparator, values);
+      if (!set.isEmpty()) {
+        builder.put(key, set);
+        size += set.size();
+      }
+    }
+
+    return new ImmutableSetMultimap<K, V>(
+        builder.build(), size, valueComparator);
+  }
+
+  // Returned by get() when values are sorted and a missing key is provided.
+  private final transient ImmutableSortedSet<V> emptySet;
+
+  ImmutableSetMultimap(ImmutableMap<K, ImmutableSet<V>> map, int size, 
+      @Nullable Comparator<? super V> valueComparator) {
+    super(map, size);
+    this.emptySet = (valueComparator == null) 
+        ? null : ImmutableSortedSet.<V>emptySet(valueComparator);
+  }
+
+  // views
+
+  /**
+   * Returns an immutable set of the values for the given key.  If no mappings
+   * in the multimap have the provided key, an empty immutable set is returned.
+   * The values are in the same order as the parameters used to build this
+   * multimap.
+   */
+  @Override public ImmutableSet<V> get(@Nullable K key) {
+    // This cast is safe as its type is known in constructor.
+    ImmutableSet<V> set = (ImmutableSet<V>) map.get(key);
+    if (set != null) {
+      return set;
+    } else if (emptySet != null) {
+      return emptySet;
+    } else {
+      return ImmutableSet.<V>of();
+    }
+  }
+
+  private transient ImmutableSetMultimap<V, K> inverse;
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>Because an inverse of a set multimap cannot contain multiple pairs with the same key and
+   * value, this method returns an {@code ImmutableSetMultimap} rather than the
+   * {@code ImmutableMultimap} specified in the {@code ImmutableMultimap} class.
+   *
+   * @since 11
+   */
+  @Beta
+  public ImmutableSetMultimap<V, K> inverse() {
+    ImmutableSetMultimap<V, K> result = inverse;
+    return (result == null) ? (inverse = invert()) : result;
+  }
+
+  private ImmutableSetMultimap<V, K> invert() {
+    Builder<V, K> builder = builder();
+    for (Entry<K, V> entry : entries()) {
+      builder.put(entry.getValue(), entry.getKey());
+    }
+    ImmutableSetMultimap<V, K> invertedMultimap = builder.build();
+    invertedMultimap.inverse = this;
+    return invertedMultimap;
+  }
+
+  /**
+   * Guaranteed to throw an exception and leave the multimap unmodified.
+   *
+   * @throws UnsupportedOperationException always
+   */
+  @Override public ImmutableSet<V> removeAll(Object key) {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * Guaranteed to throw an exception and leave the multimap unmodified.
+   *
+   * @throws UnsupportedOperationException always
+   */
+  @Override public ImmutableSet<V> replaceValues(
+      K key, Iterable<? extends V> values) {
+    throw new UnsupportedOperationException();
+  }
+
+  private transient ImmutableSet<Entry<K, V>> entries;
+
+  /**
+   * Returns an immutable collection of all key-value pairs in the multimap.
+   * Its iterator traverses the values for the first key, the values for the
+   * second key, and so on.
+   */
+  // TODO(kevinb): Fix this so that two copies of the entries are not created.
+  @Override public ImmutableSet<Entry<K, V>> entries() {
+    ImmutableSet<Entry<K, V>> result = entries;
+    return (result == null)
+        ? (entries = ImmutableSet.copyOf(super.entries()))
+        : result;
+  }
+
+  /**
+   * @serialData number of distinct keys, and then for each distinct key: the
+   *     key, the number of values for that key, and the key's values
+   */
+  @GwtIncompatible("java.io.ObjectOutputStream")
+  private void writeObject(ObjectOutputStream stream) throws IOException {
+    stream.defaultWriteObject();
+    Serialization.writeMultimap(this, stream);
+  }
+
+  @GwtIncompatible("java.io.ObjectInputStream")
+  private void readObject(ObjectInputStream stream)
+      throws IOException, ClassNotFoundException {
+    stream.defaultReadObject();
+    int keyCount = stream.readInt();
+    if (keyCount < 0) {
+      throw new InvalidObjectException("Invalid key count " + keyCount);
+    }
+    ImmutableMap.Builder<Object, ImmutableSet<Object>> builder
+        = ImmutableMap.builder();
+    int tmpSize = 0;
+
+    for (int i = 0; i < keyCount; i++) {
+      Object key = stream.readObject();
+      int valueCount = stream.readInt();
+      if (valueCount <= 0) {
+        throw new InvalidObjectException("Invalid value count " + valueCount);
+      }
+
+      Object[] array = new Object[valueCount];
+      for (int j = 0; j < valueCount; j++) {
+        array[j] = stream.readObject();
+      }
+      ImmutableSet<Object> valueSet = ImmutableSet.copyOf(array);
+      if (valueSet.size() != array.length) {
+        throw new InvalidObjectException(
+            "Duplicate key-value pairs exist for key " + key);
+      }
+      builder.put(key, valueSet);
+      tmpSize += valueCount;
+    }
+
+    ImmutableMap<Object, ImmutableSet<Object>> tmpMap;
+    try {
+      tmpMap = builder.build();
+    } catch (IllegalArgumentException e) {
+      throw (InvalidObjectException)
+          new InvalidObjectException(e.getMessage()).initCause(e);
+    }
+
+    FieldSettersHolder.MAP_FIELD_SETTER.set(this, tmpMap);
+    FieldSettersHolder.SIZE_FIELD_SETTER.set(this, tmpSize);
+  }
+
+  @GwtIncompatible("not needed in emulated source.")
+  private static final long serialVersionUID = 0;
+}
diff --git a/guava/src/com/google/common/collect/ImmutableSortedAsList.java b/guava/src/com/google/common/collect/ImmutableSortedAsList.java
new file mode 100644
index 0000000..e557570
--- /dev/null
+++ b/guava/src/com/google/common/collect/ImmutableSortedAsList.java
@@ -0,0 +1,105 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.base.Preconditions;
+
+import java.util.Comparator;
+
+import javax.annotation.Nullable;
+
+/**
+ * List returned by {@code ImmutableSortedSet.asList()} when the set isn't empty.
+ *
+ * @author Jared Levy
+ * @author Louis Wasserman
+ */
+@SuppressWarnings("serial")
+final class ImmutableSortedAsList<E> extends ImmutableList<E> implements SortedIterable<E> {
+  private final transient ImmutableSortedSet<E> backingSet;
+  private final transient ImmutableList<E> backingList;
+
+  ImmutableSortedAsList(
+      ImmutableSortedSet<E> backingSet, ImmutableList<E> backingList) {
+    this.backingSet = backingSet;
+    this.backingList = backingList;
+  }
+
+  @Override public Comparator<? super E> comparator() {
+    return backingSet.comparator();
+  }
+
+  // Override contains(), indexOf(), and lastIndexOf() to be O(log N) instead of O(N).
+
+  @Override public boolean contains(@Nullable Object target) {
+    // TODO: why not contains(target)?
+    return backingSet.indexOf(target) >= 0;
+  }
+
+  @Override public int indexOf(@Nullable Object target) {
+    return backingSet.indexOf(target);
+  }
+
+  @Override public int lastIndexOf(@Nullable Object target) {
+    return backingSet.indexOf(target);
+  }
+
+  // The returned ImmutableSortedAsList maintains the contains(), indexOf(), and
+  // lastIndexOf() performance benefits.
+  @Override public ImmutableList<E> subList(int fromIndex, int toIndex) {
+    Preconditions.checkPositionIndexes(fromIndex, toIndex, size());
+    return (fromIndex == toIndex) ? ImmutableList.<E>of()
+        : new RegularImmutableSortedSet<E>(
+            backingList.subList(fromIndex, toIndex), backingSet.comparator())
+            .asList();
+  }
+
+  // The ImmutableAsList serialized form has the correct behavior.
+  @Override Object writeReplace() {
+    return new ImmutableAsList.SerializedForm(backingSet);
+  }
+
+  @Override public UnmodifiableIterator<E> iterator() {
+    return backingList.iterator();
+  }
+
+  @Override public E get(int index) {
+    return backingList.get(index);
+  }
+
+  @Override public UnmodifiableListIterator<E> listIterator() {
+    return backingList.listIterator();
+  }
+
+  @Override public UnmodifiableListIterator<E> listIterator(int index) {
+    return backingList.listIterator(index);
+  }
+
+  @Override public int size() {
+    return backingList.size();
+  }
+
+  @Override public boolean equals(@Nullable Object obj) {
+    return backingList.equals(obj);
+  }
+
+  @Override public int hashCode() {
+    return backingList.hashCode();
+  }
+
+  @Override boolean isPartialView() {
+    return backingList.isPartialView();
+  }
+}
diff --git a/guava/src/com/google/common/collect/ImmutableSortedMap.java b/guava/src/com/google/common/collect/ImmutableSortedMap.java
new file mode 100644
index 0000000..c700f7f
--- /dev/null
+++ b/guava/src/com/google/common/collect/ImmutableSortedMap.java
@@ -0,0 +1,767 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.collect.SortedLists.KeyAbsentBehavior.INVERTED_INSERTION_INDEX;
+import static com.google.common.collect.SortedLists.KeyAbsentBehavior.NEXT_HIGHER;
+import static com.google.common.collect.SortedLists.KeyAbsentBehavior.NEXT_LOWER;
+import static com.google.common.collect.SortedLists.KeyPresentBehavior.ANY_PRESENT;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.collect.SortedLists.KeyAbsentBehavior;
+import com.google.common.collect.SortedLists.KeyPresentBehavior;
+
+import java.io.Serializable;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Map;
+import java.util.NoSuchElementException;
+import java.util.SortedMap;
+import java.util.TreeMap;
+
+import javax.annotation.Nullable;
+
+/**
+ * An immutable {@link SortedMap}. Does not permit null keys or values.
+ *
+ * <p>Unlike {@link Collections#unmodifiableSortedMap}, which is a <i>view</i>
+ * of a separate map which can still change, an instance of {@code
+ * ImmutableSortedMap} contains its own data and will <i>never</i> change.
+ * {@code ImmutableSortedMap} is convenient for {@code public static final} maps
+ * ("constant maps") and also lets you easily make a "defensive copy" of a map
+ * provided to your class by a caller.
+ *
+ * <p><b>Note:</b> Although this class is not final, it cannot be subclassed as
+ * it has no public or protected constructors. Thus, instances of this class are
+ * guaranteed to be immutable.
+ *
+ * @author Jared Levy
+ * @author Louis Wasserman
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible(serializable = true, emulated = true)
+public class ImmutableSortedMap<K, V>
+    extends ImmutableSortedMapFauxverideShim<K, V> implements SortedMap<K, V> {
+  /*
+   * TODO(kevinb): Confirm that ImmutableSortedMap is faster to construct and
+   * uses less memory than TreeMap; then say so in the class Javadoc.
+   *
+   * TODO(kevinb): Create separate subclasses for empty, single-entry, and
+   * multiple-entry instances, if it's deemed beneficial.
+   */
+
+  private static final Comparator<Comparable> NATURAL_ORDER =
+      Ordering.natural();
+
+  private static final ImmutableSortedMap<Comparable, Object>
+      NATURAL_EMPTY_MAP =
+          new ImmutableSortedMap<Comparable, Object>(
+              ImmutableList.<Entry<Comparable, Object>>of(), NATURAL_ORDER);
+
+  /**
+   * Returns the empty sorted map.
+   */
+  @SuppressWarnings("unchecked")
+  // unsafe, comparator() returns a comparator on the specified type
+  // TODO(kevinb): evaluate whether or not of().comparator() should return null
+  public static <K, V> ImmutableSortedMap<K, V> of() {
+    return (ImmutableSortedMap<K, V>) NATURAL_EMPTY_MAP;
+  }
+
+  @SuppressWarnings("unchecked")
+  private static <K, V> ImmutableSortedMap<K, V> emptyMap(
+      Comparator<? super K> comparator) {
+    if (NATURAL_ORDER.equals(comparator)) {
+      return (ImmutableSortedMap<K, V>) NATURAL_EMPTY_MAP;
+    } else {
+      return new ImmutableSortedMap<K, V>(
+          ImmutableList.<Entry<K, V>>of(), comparator);
+    }
+  }
+
+  /**
+   * Returns an immutable map containing a single entry.
+   */
+  public static <K extends Comparable<? super K>, V>
+      ImmutableSortedMap<K, V> of(K k1, V v1) {
+    return new ImmutableSortedMap<K, V>(
+        ImmutableList.of(entryOf(k1, v1)), Ordering.natural());
+  }
+
+  /**
+   * Returns an immutable sorted map containing the given entries, sorted by the
+   * natural ordering of their keys.
+   *
+   * @throws IllegalArgumentException if the two keys are equal according to
+   *     their natural ordering
+   */
+  public static <K extends Comparable<? super K>, V> ImmutableSortedMap<K, V>
+      of(K k1, V v1, K k2, V v2) {
+    return new Builder<K, V>(Ordering.natural())
+        .put(k1, v1).put(k2, v2).build();
+  }
+
+  /**
+   * Returns an immutable sorted map containing the given entries, sorted by the
+   * natural ordering of their keys.
+   *
+   * @throws IllegalArgumentException if any two keys are equal according to
+   *     their natural ordering
+   */
+  public static <K extends Comparable<? super K>, V> ImmutableSortedMap<K, V>
+      of(K k1, V v1, K k2, V v2, K k3, V v3) {
+    return new Builder<K, V>(Ordering.natural())
+        .put(k1, v1).put(k2, v2).put(k3, v3).build();
+  }
+
+  /**
+   * Returns an immutable sorted map containing the given entries, sorted by the
+   * natural ordering of their keys.
+   *
+   * @throws IllegalArgumentException if any two keys are equal according to
+   *     their natural ordering
+   */
+  public static <K extends Comparable<? super K>, V> ImmutableSortedMap<K, V>
+      of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4) {
+    return new Builder<K, V>(Ordering.natural())
+        .put(k1, v1).put(k2, v2).put(k3, v3).put(k4, v4).build();
+  }
+
+  /**
+   * Returns an immutable sorted map containing the given entries, sorted by the
+   * natural ordering of their keys.
+   *
+   * @throws IllegalArgumentException if any two keys are equal according to
+   *     their natural ordering
+   */
+  public static <K extends Comparable<? super K>, V> ImmutableSortedMap<K, V>
+      of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5) {
+    return new Builder<K, V>(Ordering.natural())
+        .put(k1, v1).put(k2, v2).put(k3, v3).put(k4, v4).put(k5, v5).build();
+  }
+
+  /**
+   * Returns an immutable map containing the same entries as {@code map}, sorted
+   * by the natural ordering of the keys.
+   *
+   * <p>Despite the method name, this method attempts to avoid actually copying
+   * the data when it is safe to do so. The exact circumstances under which a
+   * copy will or will not be performed are undocumented and subject to change.
+   *
+   * <p>This method is not type-safe, as it may be called on a map with keys
+   * that are not mutually comparable.
+   *
+   * @throws ClassCastException if the keys in {@code map} are not mutually
+   *         comparable
+   * @throws NullPointerException if any key or value in {@code map} is null
+   * @throws IllegalArgumentException if any two keys are equal according to
+   *         their natural ordering
+   */
+  public static <K, V> ImmutableSortedMap<K, V> copyOf(
+      Map<? extends K, ? extends V> map) {
+    // Hack around K not being a subtype of Comparable.
+    // Unsafe, see ImmutableSortedSetFauxverideShim.
+    @SuppressWarnings("unchecked")
+    Ordering<K> naturalOrder = (Ordering<K>) Ordering.<Comparable>natural();
+    return copyOfInternal(map, naturalOrder);
+  }
+
+  /**
+   * Returns an immutable map containing the same entries as {@code map}, with
+   * keys sorted by the provided comparator.
+   *
+   * <p>Despite the method name, this method attempts to avoid actually copying
+   * the data when it is safe to do so. The exact circumstances under which a
+   * copy will or will not be performed are undocumented and subject to change.
+   *
+   * @throws NullPointerException if any key or value in {@code map} is null
+   * @throws IllegalArgumentException if any two keys are equal according to the
+   *         comparator
+   */
+  public static <K, V> ImmutableSortedMap<K, V> copyOf(
+      Map<? extends K, ? extends V> map, Comparator<? super K> comparator) {
+    return copyOfInternal(map, checkNotNull(comparator));
+  }
+
+  /**
+   * Returns an immutable map containing the same entries as the provided sorted
+   * map, with the same ordering.
+   *
+   * <p>Despite the method name, this method attempts to avoid actually copying
+   * the data when it is safe to do so. The exact circumstances under which a
+   * copy will or will not be performed are undocumented and subject to change.
+   *
+   * @throws NullPointerException if any key or value in {@code map} is null
+   */
+  @SuppressWarnings("unchecked")
+  public static <K, V> ImmutableSortedMap<K, V> copyOfSorted(
+      SortedMap<K, ? extends V> map) {
+    Comparator<? super K> comparator = map.comparator();
+    if (comparator == null) {
+      // If map has a null comparator, the keys should have a natural ordering,
+      // even though K doesn't explicitly implement Comparable.
+      comparator = (Comparator<? super K>) NATURAL_ORDER;
+    }
+    return copyOfInternal(map, comparator);
+  }
+
+  private static <K, V> ImmutableSortedMap<K, V> copyOfInternal(
+      Map<? extends K, ? extends V> map, Comparator<? super K> comparator) {
+    boolean sameComparator = false;
+    if (map instanceof SortedMap) {
+      SortedMap<?, ?> sortedMap = (SortedMap<?, ?>) map;
+      Comparator<?> comparator2 = sortedMap.comparator();
+      sameComparator = (comparator2 == null)
+          ? comparator == NATURAL_ORDER 
+          : comparator.equals(comparator2);
+    }
+
+    if (sameComparator && (map instanceof ImmutableSortedMap)) {
+      // TODO(kevinb): Prove that this cast is safe, even though
+      // Collections.unmodifiableSortedMap requires the same key type.
+      @SuppressWarnings("unchecked")
+      ImmutableSortedMap<K, V> kvMap = (ImmutableSortedMap<K, V>) map;
+      if (!kvMap.isPartialView()) {
+        return kvMap;
+      }
+    }
+
+    // "adding" type params to an array of a raw type should be safe as
+    // long as no one can ever cast that same array instance back to a 
+    // raw type.
+    @SuppressWarnings("unchecked")
+    Entry<K, V>[] entries = map.entrySet().toArray(new Entry[0]);
+
+    for (int i = 0; i < entries.length; i++) {
+      Entry<K, V> entry = entries[i];
+      entries[i] = entryOf(entry.getKey(), entry.getValue());
+    }
+
+    List<Entry<K, V>> list = Arrays.asList(entries);
+
+    if (!sameComparator) {
+      sortEntries(list, comparator);
+      validateEntries(list, comparator);
+    }
+
+    return new ImmutableSortedMap<K, V>(ImmutableList.copyOf(list), comparator);
+  }
+  
+  private static <K, V> void sortEntries(
+      List<Entry<K, V>> entries, final Comparator<? super K> comparator) {
+    Comparator<Entry<K, V>> entryComparator = new Comparator<Entry<K, V>>() {
+
+      @Override public int compare(Entry<K, V> entry1, Entry<K, V> entry2) {
+        return comparator.compare(entry1.getKey(), entry2.getKey());
+      }
+    };
+    
+    Collections.sort(entries, entryComparator);
+  }
+
+  private static <K, V> void validateEntries(List<Entry<K, V>> entries,
+      Comparator<? super K> comparator) {
+    for (int i = 1; i < entries.size(); i++) {
+      if (comparator.compare(
+          entries.get(i - 1).getKey(), entries.get(i).getKey()) == 0) {
+        throw new IllegalArgumentException(
+            "Duplicate keys in mappings " + entries.get(i - 1) + " and "
+                + entries.get(i));
+      }
+    }
+  }
+
+  /**
+   * Returns a builder that creates immutable sorted maps whose keys are
+   * ordered by their natural ordering. The sorted maps use {@link
+   * Ordering#natural()} as the comparator.
+   *
+   * <p>Note: the type parameter {@code K} extends {@code Comparable<K>} rather
+   * than {@code Comparable<? super K>} as a workaround for javac <a
+   * href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6468354">bug
+   * 6468354</a>.
+   */
+  public static <K extends Comparable<K>, V> Builder<K, V> naturalOrder() {
+    return new Builder<K, V>(Ordering.natural());
+  }
+
+  /**
+   * Returns a builder that creates immutable sorted maps with an explicit
+   * comparator. If the comparator has a more general type than the map's keys,
+   * such as creating a {@code SortedMap<Integer, String>} with a {@code
+   * Comparator<Number>}, use the {@link Builder} constructor instead.
+   *
+   * @throws NullPointerException if {@code comparator} is null
+   */
+  public static <K, V> Builder<K, V> orderedBy(Comparator<K> comparator) {
+    return new Builder<K, V>(comparator);
+  }
+
+  /**
+   * Returns a builder that creates immutable sorted maps whose keys are
+   * ordered by the reverse of their natural ordering.
+   *
+   * <p>Note: the type parameter {@code K} extends {@code Comparable<K>} rather
+   * than {@code Comparable<? super K>} as a workaround for javac <a
+   * href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6468354">bug
+   * 6468354</a>.
+   */
+  public static <K extends Comparable<K>, V> Builder<K, V> reverseOrder() {
+    return new Builder<K, V>(Ordering.natural().reverse());
+  }
+
+  /**
+   * A builder for creating immutable sorted map instances, especially {@code
+   * public static final} maps ("constant maps"). Example: <pre>   {@code
+   *
+   *   static final ImmutableSortedMap<Integer, String> INT_TO_WORD =
+   *       new ImmutableSortedMap.Builder<Integer, String>(Ordering.natural())
+   *           .put(1, "one")
+   *           .put(2, "two")
+   *           .put(3, "three")
+   *           .build();}</pre>
+   *
+   * For <i>small</i> immutable sorted maps, the {@code ImmutableSortedMap.of()}
+   * methods are even more convenient.
+   *
+   * <p>Builder instances can be reused - it is safe to call {@link #build}
+   * multiple times to build multiple maps in series. Each map is a superset of
+   * the maps created before it.
+   *
+   * @since 2.0 (imported from Google Collections Library)
+   */
+  public static class Builder<K, V> extends ImmutableMap.Builder<K, V> {
+    private final Comparator<? super K> comparator;
+
+    /**
+     * Creates a new builder. The returned builder is equivalent to the builder
+     * generated by {@link ImmutableSortedMap#orderedBy}.
+     */
+    public Builder(Comparator<? super K> comparator) {
+      this.comparator = checkNotNull(comparator);
+    }
+
+    /**
+     * Associates {@code key} with {@code value} in the built map. Duplicate
+     * keys, according to the comparator (which might be the keys' natural
+     * order), are not allowed, and will cause {@link #build} to fail.
+     */
+    @Override public Builder<K, V> put(K key, V value) {
+      entries.add(entryOf(key, value));
+      return this;
+    }
+
+    /**
+     * Adds the given {@code entry} to the map, making it immutable if
+     * necessary. Duplicate keys, according to the comparator (which might be
+     * the keys' natural order), are not allowed, and will cause {@link #build}
+     * to fail.
+     *
+     * @since 11.0
+     */
+    @Override public Builder<K, V> put(Entry<? extends K, ? extends V> entry) {
+      super.put(entry);
+      return this;
+    }
+
+    /**
+     * Associates all of the given map's keys and values in the built map.
+     * Duplicate keys, according to the comparator (which might be the keys'
+     * natural order), are not allowed, and will cause {@link #build} to fail.
+     *
+     * @throws NullPointerException if any key or value in {@code map} is null
+     */
+    @Override public Builder<K, V> putAll(Map<? extends K, ? extends V> map) {
+      for (Entry<? extends K, ? extends V> entry : map.entrySet()) {
+        put(entry.getKey(), entry.getValue());
+      }
+      return this;
+    }
+
+    /**
+     * Returns a newly-created immutable sorted map.
+     *
+     * @throws IllegalArgumentException if any two keys are equal according to
+     *     the comparator (which might be the keys' natural order)
+     */
+    @Override public ImmutableSortedMap<K, V> build() {
+      sortEntries(entries, comparator);
+      validateEntries(entries, comparator);
+      return new ImmutableSortedMap<K, V>(
+          ImmutableList.copyOf(entries), comparator);
+    }
+  }
+
+  final transient ImmutableList<Entry<K, V>> entries;
+  private final transient Comparator<? super K> comparator;
+
+  ImmutableSortedMap(
+      ImmutableList<Entry<K, V>> entries, Comparator<? super K> comparator) {
+    this.entries = entries;
+    this.comparator = comparator;
+  }
+
+  @Override
+  public int size() {
+    return entries.size();
+  }
+  
+  // Pretend the comparator can compare anything. If it turns out it can't
+  // compare two elements, it'll throw a CCE. Only methods that are specified to
+  // throw CCE should call this.
+  @SuppressWarnings("unchecked")
+  Comparator<Object> unsafeComparator() {
+    return (Comparator<Object>) comparator;
+  }
+  
+  @Override public V get(@Nullable Object key) {
+    if (key == null) {
+      return null;
+    }
+    int i;
+    try {
+      i = index(key, ANY_PRESENT, INVERTED_INSERTION_INDEX);
+    } catch (ClassCastException e) {
+      return null;
+    }
+    return i >= 0 ? entries.get(i).getValue() : null;
+  }
+
+  @Override public boolean containsValue(@Nullable Object value) {
+    if (value == null) {
+      return false;
+    }
+    return Iterators.contains(valueIterator(), value);
+  }
+
+  @Override boolean isPartialView() {
+    return entries.isPartialView();
+  }
+
+  private transient ImmutableSet<Entry<K, V>> entrySet;
+
+  /**
+   * Returns an immutable set of the mappings in this map, sorted by the key
+   * ordering.
+   */
+  @Override public ImmutableSet<Entry<K, V>> entrySet() {
+    ImmutableSet<Entry<K, V>> es = entrySet;
+    return (es == null) ? (entrySet = createEntrySet()) : es;
+  }
+
+  private ImmutableSet<Entry<K, V>> createEntrySet() {
+    return isEmpty() ? ImmutableSet.<Entry<K, V>>of()
+        : new EntrySet<K, V>(this);
+  }
+
+  @SuppressWarnings("serial") // uses writeReplace(), not default serialization
+  private static class EntrySet<K, V> extends ImmutableSet<Entry<K, V>> {
+    final transient ImmutableSortedMap<K, V> map;
+
+    EntrySet(ImmutableSortedMap<K, V> map) {
+      this.map = map;
+    }
+
+    @Override boolean isPartialView() {
+      return map.isPartialView();
+    }
+
+    @Override
+    public int size() {
+      return map.size();
+    }
+
+    @Override public UnmodifiableIterator<Entry<K, V>> iterator() {
+      return map.entries.iterator();
+    }
+
+    @Override public boolean contains(Object target) {
+      if (target instanceof Entry) {
+        Entry<?, ?> entry = (Entry<?, ?>) target;
+        V mappedValue = map.get(entry.getKey());
+        return mappedValue != null && mappedValue.equals(entry.getValue());
+      }
+      return false;
+    }
+
+    @Override Object writeReplace() {
+      return new EntrySetSerializedForm<K, V>(map);
+    }
+  }
+
+  private static class EntrySetSerializedForm<K, V> implements Serializable {
+    final ImmutableSortedMap<K, V> map;
+    EntrySetSerializedForm(ImmutableSortedMap<K, V> map) {
+      this.map = map;
+    }
+    Object readResolve() {
+      return map.entrySet();
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  private transient ImmutableSortedSet<K> keySet;
+
+  /**
+   * Returns an immutable sorted set of the keys in this map.
+   */
+  @Override public ImmutableSortedSet<K> keySet() {
+    ImmutableSortedSet<K> ks = keySet;
+    return (ks == null) ? (keySet = createKeySet()) : ks;
+  }
+
+  @SuppressWarnings("serial") // does not use default serialization
+  private ImmutableSortedSet<K> createKeySet() {
+    if (isEmpty()) {
+      return ImmutableSortedSet.emptySet(comparator);
+    }
+
+    return new RegularImmutableSortedSet<K>(
+        new TransformedImmutableList<Entry<K, V>, K>(entries) {
+
+          @Override K transform(Entry<K, V> entry) {
+            return entry.getKey();
+          }
+        }, comparator);
+  }
+  
+  private transient ImmutableCollection<V> values;
+
+  /**
+   * Returns an immutable collection of the values in this map, sorted by the
+   * ordering of the corresponding keys.
+   */
+  @Override public ImmutableCollection<V> values() {
+    ImmutableCollection<V> v = values;
+    return (v == null) ? (values = new Values<V>(this)) : v;
+  }
+  
+  UnmodifiableIterator<V> valueIterator(){
+    final UnmodifiableIterator<Entry<K, V>> entryIterator = entries.iterator();
+    return new UnmodifiableIterator<V>() {
+
+      @Override public boolean hasNext() {
+        return entryIterator.hasNext();
+      }
+
+      @Override public V next() {
+        return entryIterator.next().getValue();
+      }
+    };
+  }
+
+  @SuppressWarnings("serial") // uses writeReplace(), not default serialization
+  private static class Values<V> extends ImmutableCollection<V> {
+    private final ImmutableSortedMap<?, V> map;
+
+    Values(ImmutableSortedMap<?, V> map) {
+      this.map = map;
+    }
+
+    @Override
+    public int size() {
+      return map.size();
+    }
+
+    @Override public UnmodifiableIterator<V> iterator() {
+      return map.valueIterator();
+    }
+
+    @Override public boolean contains(Object target) {
+      return map.containsValue(target);
+    }
+
+    @Override boolean isPartialView() {
+      return true;
+    }
+
+    @Override Object writeReplace() {
+      return new ValuesSerializedForm<V>(map);
+    }
+  }
+
+  private static class ValuesSerializedForm<V> implements Serializable {
+    final ImmutableSortedMap<?, V> map;
+    ValuesSerializedForm(ImmutableSortedMap<?, V> map) {
+      this.map = map;
+    }
+    Object readResolve() {
+      return map.values();
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  /**
+   * Returns the comparator that orders the keys, which is
+   * {@link Ordering#natural()} when the natural ordering of the keys is used.
+   * Note that its behavior is not consistent with {@link TreeMap#comparator()},
+   * which returns {@code null} to indicate natural ordering.
+   */
+  @Override
+  public Comparator<? super K> comparator() {
+    return comparator;
+  }
+
+  @Override
+  public K firstKey() {
+    if (isEmpty()) {
+      throw new NoSuchElementException();
+    }
+    return entries.get(0).getKey();
+  }
+
+  @Override
+  public K lastKey() {
+    if (isEmpty()) {
+      throw new NoSuchElementException();
+    }
+    return entries.get(size() - 1).getKey();
+  }
+
+  /**
+   * This method returns a {@code ImmutableSortedMap}, consisting of the entries
+   * whose keys are less than {@code toKey}.
+   *
+   * <p>The {@link SortedMap#headMap} documentation states that a submap of a
+   * submap throws an {@link IllegalArgumentException} if passed a {@code toKey}
+   * greater than an earlier {@code toKey}. However, this method doesn't throw
+   * an exception in that situation, but instead keeps the original {@code
+   * toKey}.
+   */
+  @Override
+  public ImmutableSortedMap<K, V> headMap(K toKey) {
+    return headMap(toKey, false);
+  }
+
+  ImmutableSortedMap<K, V> headMap(K toKey, boolean inclusive){
+    int index;
+    if (inclusive) {
+      index = index(toKey, ANY_PRESENT, NEXT_LOWER) + 1;
+    } else {
+      index = index(toKey, ANY_PRESENT, NEXT_HIGHER);
+    }
+    return createSubmap(0, index);
+  }
+
+  /**
+   * This method returns a {@code ImmutableSortedMap}, consisting of the entries
+   * whose keys ranges from {@code fromKey}, inclusive, to {@code toKey},
+   * exclusive.
+   *
+   * <p>The {@link SortedMap#subMap} documentation states that a submap of a
+   * submap throws an {@link IllegalArgumentException} if passed a {@code
+   * fromKey} less than an earlier {@code fromKey}. However, this method doesn't
+   * throw an exception in that situation, but instead keeps the original {@code
+   * fromKey}. Similarly, this method keeps the original {@code toKey}, instead
+   * of throwing an exception, if passed a {@code toKey} greater than an earlier
+   * {@code toKey}.
+   */
+  @Override
+  public ImmutableSortedMap<K, V> subMap(K fromKey, K toKey) {
+    return subMap(fromKey, true, toKey, false);
+  }
+
+  ImmutableSortedMap<K, V> subMap(K fromKey, boolean fromInclusive, K toKey,
+      boolean toInclusive) {
+    checkNotNull(fromKey);
+    checkNotNull(toKey);
+    checkArgument(comparator.compare(fromKey, toKey) <= 0);
+    return tailMap(fromKey, fromInclusive).headMap(toKey, toInclusive);
+  }
+
+  /**
+   * This method returns a {@code ImmutableSortedMap}, consisting of the entries
+   * whose keys are greater than or equals to {@code fromKey}.
+   *
+   * <p>The {@link SortedMap#tailMap} documentation states that a submap of a
+   * submap throws an {@link IllegalArgumentException} if passed a {@code
+   * fromKey} less than an earlier {@code fromKey}. However, this method doesn't
+   * throw an exception in that situation, but instead keeps the original {@code
+   * fromKey}.
+   */
+  @Override
+  public ImmutableSortedMap<K, V> tailMap(K fromKey) {
+    return tailMap(fromKey, true);
+  }
+
+  ImmutableSortedMap<K, V> tailMap(K fromKey, boolean inclusive) {
+    int index;
+    if (inclusive) {
+      index = index(fromKey, ANY_PRESENT, NEXT_HIGHER);
+    } else {
+      index = index(fromKey, ANY_PRESENT, NEXT_LOWER) + 1;
+    }
+    return createSubmap(index, size());
+  }
+
+  private ImmutableList<K> keyList() {
+    return new TransformedImmutableList<Entry<K, V>, K>(entries) {
+      @Override
+      K transform(Entry<K, V> entry) {
+        return entry.getKey();
+      }
+    };
+  }
+
+  private int index(
+      Object key, KeyPresentBehavior presentBehavior, KeyAbsentBehavior absentBehavior) {
+    return SortedLists.binarySearch(
+        keyList(), checkNotNull(key), unsafeComparator(), presentBehavior, absentBehavior);
+  }
+
+  private ImmutableSortedMap<K, V> createSubmap(
+      int newFromIndex, int newToIndex) {
+    if (newFromIndex < newToIndex) {
+      return new ImmutableSortedMap<K, V>(
+          entries.subList(newFromIndex, newToIndex), comparator);
+    } else {
+      return emptyMap(comparator);
+    }
+  }
+
+  /**
+   * Serialized type for all ImmutableSortedMap instances. It captures the
+   * logical contents and they are reconstructed using public factory methods.
+   * This ensures that the implementation types remain as implementation
+   * details.
+   */
+  private static class SerializedForm extends ImmutableMap.SerializedForm {
+    private final Comparator<Object> comparator;
+    @SuppressWarnings("unchecked")
+    SerializedForm(ImmutableSortedMap<?, ?> sortedMap) {
+      super(sortedMap);
+      comparator = (Comparator<Object>) sortedMap.comparator();
+    }
+    @Override Object readResolve() {
+      Builder<Object, Object> builder = new Builder<Object, Object>(comparator);
+      return createMap(builder);
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  @Override Object writeReplace() {
+    return new SerializedForm(this);
+  }
+
+  // This class is never actually serialized directly, but we have to make the
+  // warning go away (and suppressing would suppress for all nested classes too)
+  private static final long serialVersionUID = 0;
+}
diff --git a/guava/src/com/google/common/collect/ImmutableSortedMapFauxverideShim.java b/guava/src/com/google/common/collect/ImmutableSortedMapFauxverideShim.java
new file mode 100644
index 0000000..855f223
--- /dev/null
+++ b/guava/src/com/google/common/collect/ImmutableSortedMapFauxverideShim.java
@@ -0,0 +1,117 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+/**
+ * "Overrides" the {@link ImmutableMap} static methods that lack
+ * {@link ImmutableSortedMap} equivalents with deprecated, exception-throwing
+ * versions. See {@link ImmutableSortedSetFauxverideShim} for details.
+ *
+ * @author Chris Povirk
+ */
+@GwtCompatible
+abstract class ImmutableSortedMapFauxverideShim<K, V>
+    extends ImmutableMap<K, V> {
+  /**
+   * Not supported. Use {@link ImmutableSortedMap#naturalOrder}, which offers
+   * better type-safety, instead. This method exists only to hide
+   * {@link ImmutableMap#builder} from consumers of {@code ImmutableSortedMap}.
+   *
+   * @throws UnsupportedOperationException always
+   * @deprecated Use {@link ImmutableSortedMap#naturalOrder}, which offers
+   *     better type-safety.
+   */
+  @Deprecated public static <K, V> ImmutableSortedMap.Builder<K, V> builder() {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * Not supported. <b>You are attempting to create a map that may contain a
+   * non-{@code Comparable} key.</b> Proper calls will resolve to the version in
+   * {@code ImmutableSortedMap}, not this dummy version.
+   *
+   * @throws UnsupportedOperationException always
+   * @deprecated <b>Pass a key of type {@code Comparable} to use {@link
+   *     ImmutableSortedMap#of(Comparable, Object)}.</b>
+   */
+  @Deprecated public static <K, V> ImmutableSortedMap<K, V> of(K k1, V v1) {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * Not supported. <b>You are attempting to create a map that may contain
+   * non-{@code Comparable} keys.</b> Proper calls will resolve to the version
+   * in {@code ImmutableSortedMap}, not this dummy version.
+   *
+   * @throws UnsupportedOperationException always
+   * @deprecated <b>Pass keys of type {@code Comparable} to use {@link
+   *     ImmutableSortedMap#of(Comparable, Object, Comparable, Object)}.</b>
+   */
+  @Deprecated public static <K, V> ImmutableSortedMap<K, V> of(
+      K k1, V v1, K k2, V v2) {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * Not supported. <b>You are attempting to create a map that may contain
+   * non-{@code Comparable} keys.</b> Proper calls to will resolve to the
+   * version in {@code ImmutableSortedMap}, not this dummy version.
+   *
+   * @throws UnsupportedOperationException always
+   * @deprecated <b>Pass keys of type {@code Comparable} to use {@link
+   *     ImmutableSortedMap#of(Comparable, Object, Comparable, Object,
+   *     Comparable, Object)}.</b>
+   */
+  @Deprecated public static <K, V> ImmutableSortedMap<K, V> of(
+      K k1, V v1, K k2, V v2, K k3, V v3) {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * Not supported. <b>You are attempting to create a map that may contain
+   * non-{@code Comparable} keys.</b> Proper calls will resolve to the version
+   * in {@code ImmutableSortedMap}, not this dummy version.
+   *
+   * @throws UnsupportedOperationException always
+   * @deprecated <b>Pass keys of type {@code Comparable} to use {@link
+   *     ImmutableSortedMap#of(Comparable, Object, Comparable, Object,
+   *     Comparable, Object, Comparable, Object)}.</b>
+   */
+  @Deprecated public static <K, V> ImmutableSortedMap<K, V> of(
+      K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4) {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * Not supported. <b>You are attempting to create a map that may contain
+   * non-{@code Comparable} keys.</b> Proper calls will resolve to the version
+   * in {@code ImmutableSortedMap}, not this dummy version.
+   *
+   * @throws UnsupportedOperationException always
+   * @deprecated <b>Pass keys of type {@code Comparable} to use {@link
+   *     ImmutableSortedMap#of(Comparable, Object, Comparable, Object,
+   *     Comparable, Object, Comparable, Object, Comparable, Object)}.</b>
+   */
+  @Deprecated public static <K, V> ImmutableSortedMap<K, V> of(
+      K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5) {
+    throw new UnsupportedOperationException();
+  }
+
+  // No copyOf() fauxveride; see ImmutableSortedSetFauxverideShim.
+}
diff --git a/guava/src/com/google/common/collect/ImmutableSortedMultiset.java b/guava/src/com/google/common/collect/ImmutableSortedMultiset.java
new file mode 100644
index 0000000..82f4abe
--- /dev/null
+++ b/guava/src/com/google/common/collect/ImmutableSortedMultiset.java
@@ -0,0 +1,606 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.GwtIncompatible;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * An immutable {@code SortedMultiset} that stores its elements in a sorted array. Some instances
+ * are ordered by an explicit comparator, while others follow the natural sort ordering of their
+ * elements. Either way, null elements are not supported.
+ *
+ * <p>Unlike {@link Multisets#unmodifiableSortedMultiset}, which is a <i>view</i> of a separate
+ * collection that can still change, an instance of {@code ImmutableSortedMultiset} contains its
+ * own private data and will <i>never</i> change. This class is convenient for {@code public static
+ * final} multisets ("constant multisets") and also lets you easily make a "defensive copy" of a
+ * set provided to your class by a caller.
+ *
+ * <p>The multisets returned by the {@link #headMultiset}, {@link #tailMultiset}, and
+ * {@link #subMultiset} methods share the same array as the original multiset, preventing that
+ * array from being garbage collected. If this is a concern, the data may be copied into a
+ * correctly-sized array by calling {@link #copyOfSorted}.
+ *
+ * <p><b>Note on element equivalence:</b> The {@link #contains(Object)},
+ * {@link #containsAll(Collection)}, and {@link #equals(Object)} implementations must check whether
+ * a provided object is equivalent to an element in the collection. Unlike most collections, an
+ * {@code ImmutableSortedMultiset} doesn't use {@link Object#equals} to determine if two elements
+ * are equivalent. Instead, with an explicit comparator, the following relation determines whether
+ * elements {@code x} and {@code y} are equivalent:
+ *
+ * <pre>   {@code
+ *
+ *   {(x, y) | comparator.compare(x, y) == 0}}</pre>
+ *
+ * With natural ordering of elements, the following relation determines whether two elements are
+ * equivalent:
+ *
+ * <pre>   {@code
+ *
+ *   {(x, y) | x.compareTo(y) == 0}}</pre>
+ *
+ *  <b>Warning:</b> Like most multisets, an {@code ImmutableSortedMultiset} will not function
+ * correctly if an element is modified after being placed in the multiset. For this reason, and to
+ * avoid general confusion, it is strongly recommended to place only immutable objects into this
+ * collection.
+ *
+ * <p><b>Note:</b> Although this class is not final, it cannot be subclassed as it has no public or
+ * protected constructors. Thus, instances of this type are guaranteed to be immutable.
+ *
+ * @author Louis Wasserman
+ */
+@GwtIncompatible("hasn't been tested yet")
+abstract class ImmutableSortedMultiset<E> extends ImmutableSortedMultisetFauxverideShim<E>
+    implements SortedMultiset<E> {
+  // TODO(user): GWT compatibility
+
+  private static final Comparator<Comparable> NATURAL_ORDER = Ordering.natural();
+
+  private static final ImmutableSortedMultiset<Comparable> NATURAL_EMPTY_MULTISET =
+      new EmptyImmutableSortedMultiset<Comparable>(NATURAL_ORDER);
+
+  /**
+   * Returns the empty immutable sorted multiset.
+   */
+  @SuppressWarnings("unchecked")
+  public static <E> ImmutableSortedMultiset<E> of() {
+    return (ImmutableSortedMultiset) NATURAL_EMPTY_MULTISET;
+  }
+
+  /**
+   * Returns an immutable sorted multiset containing a single element.
+   */
+  public static <E extends Comparable<? super E>> ImmutableSortedMultiset<E> of(E element) {
+    return RegularImmutableSortedMultiset.createFromSorted(
+        NATURAL_ORDER, ImmutableList.of(Multisets.immutableEntry(checkNotNull(element), 1)));
+  }
+
+  /**
+   * Returns an immutable sorted multiset containing the given elements sorted by their natural
+   * ordering.
+   *
+   * @throws NullPointerException if any element is null
+   */
+  @SuppressWarnings("unchecked")
+  public static <E extends Comparable<? super E>> ImmutableSortedMultiset<E> of(E e1, E e2) {
+    return copyOf(Ordering.natural(), Arrays.asList(e1, e2));
+  }
+
+  /**
+   * Returns an immutable sorted multiset containing the given elements sorted by their natural
+   * ordering.
+   *
+   * @throws NullPointerException if any element is null
+   */
+  @SuppressWarnings("unchecked")
+  public static <E extends Comparable<? super E>> ImmutableSortedMultiset<E> of(E e1, E e2, E e3) {
+    return copyOf(Ordering.natural(), Arrays.asList(e1, e2, e3));
+  }
+
+  /**
+   * Returns an immutable sorted multiset containing the given elements sorted by their natural
+   * ordering.
+   *
+   * @throws NullPointerException if any element is null
+   */
+  @SuppressWarnings("unchecked")
+  public static <E extends Comparable<? super E>> ImmutableSortedMultiset<E> of(
+      E e1, E e2, E e3, E e4) {
+    return copyOf(Ordering.natural(), Arrays.asList(e1, e2, e3, e4));
+  }
+
+  /**
+   * Returns an immutable sorted multiset containing the given elements sorted by their natural
+   * ordering.
+   *
+   * @throws NullPointerException if any element is null
+   */
+  @SuppressWarnings("unchecked")
+  public static <E extends Comparable<? super E>> ImmutableSortedMultiset<E> of(
+      E e1, E e2, E e3, E e4, E e5) {
+    return copyOf(Ordering.natural(), Arrays.asList(e1, e2, e3, e4, e5));
+  }
+
+  /**
+   * Returns an immutable sorted multiset containing the given elements sorted by their natural
+   * ordering.
+   *
+   * @throws NullPointerException if any element is null
+   */
+  @SuppressWarnings("unchecked")
+  public static <E extends Comparable<? super E>> ImmutableSortedMultiset<E> of(
+      E e1,
+      E e2,
+      E e3,
+      E e4,
+      E e5,
+      E e6,
+      E... remaining) {
+    int size = remaining.length + 6;
+    List<E> all = new ArrayList<E>(size);
+    Collections.addAll(all, e1, e2, e3, e4, e5, e6);
+    Collections.addAll(all, remaining);
+    return copyOf(Ordering.natural(), all);
+  }
+
+  /**
+   * Returns an immutable sorted multiset containing the given elements sorted by their natural
+   * ordering.
+   *
+   * @throws NullPointerException if any of {@code elements} is null
+   */
+  public static <E extends Comparable<? super E>> ImmutableSortedMultiset<E> copyOf(E[] elements) {
+    return copyOf(Ordering.natural(), Arrays.asList(elements));
+  }
+
+  /**
+   * Returns an immutable sorted multiset containing the given elements sorted by their natural
+   * ordering. To create a copy of a {@code SortedMultiset} that preserves the
+   * comparator, call {@link #copyOfSorted} instead. This method iterates over {@code elements} at
+   * most once.
+   *
+   * <p>Note that if {@code s} is a {@code multiset<String>}, then {@code
+   * ImmutableSortedMultiset.copyOf(s)} returns an {@code ImmutableSortedMultiset<String>}
+   * containing each of the strings in {@code s}, while {@code ImmutableSortedMultiset.of(s)}
+   * returns an {@code ImmutableSortedMultiset<multiset<String>>} containing one element (the given
+   * multiset itself).
+   *
+   * <p>Despite the method name, this method attempts to avoid actually copying the data when it is
+   * safe to do so. The exact circumstances under which a copy will or will not be performed are
+   * undocumented and subject to change.
+   *
+   * <p>This method is not type-safe, as it may be called on elements that are not mutually
+   * comparable.
+   *
+   * @throws ClassCastException if the elements are not mutually comparable
+   * @throws NullPointerException if any of {@code elements} is null
+   */
+  public static <E> ImmutableSortedMultiset<E> copyOf(Iterable<? extends E> elements) {
+    // Hack around E not being a subtype of Comparable.
+    // Unsafe, see ImmutableSortedMultisetFauxverideShim.
+    @SuppressWarnings("unchecked")
+    Ordering<E> naturalOrder = (Ordering<E>) Ordering.<Comparable>natural();
+    return copyOf(naturalOrder, elements);
+  }
+
+  /**
+   * Returns an immutable sorted multiset containing the given elements sorted by their natural
+   * ordering.
+   *
+   * <p>This method is not type-safe, as it may be called on elements that are not mutually
+   * comparable.
+   *
+   * @throws ClassCastException if the elements are not mutually comparable
+   * @throws NullPointerException if any of {@code elements} is null
+   */
+  public static <E> ImmutableSortedMultiset<E> copyOf(Iterator<? extends E> elements) {
+    // Hack around E not being a subtype of Comparable.
+    // Unsafe, see ImmutableSortedMultisetFauxverideShim.
+    @SuppressWarnings("unchecked")
+    Ordering<E> naturalOrder = (Ordering<E>) Ordering.<Comparable>natural();
+    return copyOfInternal(naturalOrder, elements);
+  }
+
+  /**
+   * Returns an immutable sorted multiset containing the given elements sorted by the given {@code
+   * Comparator}.
+   *
+   * @throws NullPointerException if {@code comparator} or any of {@code elements} is null
+   */
+  public static <E> ImmutableSortedMultiset<E> copyOf(
+      Comparator<? super E> comparator, Iterator<? extends E> elements) {
+    checkNotNull(comparator);
+    return copyOfInternal(comparator, elements);
+  }
+
+  /**
+   * Returns an immutable sorted multiset containing the given elements sorted by the given {@code
+   * Comparator}. This method iterates over {@code elements} at most once.
+   *
+   * <p>Despite the method name, this method attempts to avoid actually copying the data when it is
+   * safe to do so. The exact circumstances under which a copy will or will not be performed are
+   * undocumented and subject to change.
+   *
+   * @throws NullPointerException if {@code comparator} or any of {@code elements} is null
+   */
+  public static <E> ImmutableSortedMultiset<E> copyOf(
+      Comparator<? super E> comparator, Iterable<? extends E> elements) {
+    checkNotNull(comparator);
+    return copyOfInternal(comparator, elements);
+  }
+
+  /**
+   * Returns an immutable sorted multiset containing the elements of a sorted multiset, sorted by
+   * the same {@code Comparator}. That behavior differs from {@link #copyOf(Iterable)}, which
+   * always uses the natural ordering of the elements.
+   *
+   * <p>Despite the method name, this method attempts to avoid actually copying the data when it is
+   * safe to do so. The exact circumstances under which a copy will or will not be performed are
+   * undocumented and subject to change.
+   *
+   * <p>This method is safe to use even when {@code sortedMultiset} is a synchronized or concurrent
+   * collection that is currently being modified by another thread.
+   *
+   * @throws NullPointerException if {@code sortedMultiset} or any of its elements is null
+   */
+  @SuppressWarnings("unchecked")
+  public static <E> ImmutableSortedMultiset<E> copyOfSorted(SortedMultiset<E> sortedMultiset) {
+    Comparator<? super E> comparator = sortedMultiset.comparator();
+    if (comparator == null) {
+      comparator = (Comparator<? super E>) NATURAL_ORDER;
+    }
+    return copyOfInternal(comparator, sortedMultiset);
+  }
+
+  @SuppressWarnings("unchecked")
+  private static <E> ImmutableSortedMultiset<E> copyOfInternal(
+      Comparator<? super E> comparator, Iterable<? extends E> iterable) {
+    if (SortedIterables.hasSameComparator(comparator, iterable)
+        && iterable instanceof ImmutableSortedMultiset<?>) {
+      ImmutableSortedMultiset<E> multiset = (ImmutableSortedMultiset<E>) iterable;
+      if (!multiset.isPartialView()) {
+        return (ImmutableSortedMultiset<E>) iterable;
+      }
+    }
+    ImmutableList<Entry<E>> entries =
+        (ImmutableList) ImmutableList.copyOf(SortedIterables.sortedCounts(comparator, iterable));
+    if (entries.isEmpty()) {
+      return emptyMultiset(comparator);
+    }
+    verifyEntries(entries);
+    return RegularImmutableSortedMultiset.createFromSorted(comparator, entries);
+  }
+
+  private static <E> ImmutableSortedMultiset<E> copyOfInternal(
+      Comparator<? super E> comparator, Iterator<? extends E> iterator) {
+    @SuppressWarnings("unchecked") // We can safely cast from IL<Entry<? extends E>> to IL<Entry<E>>
+    ImmutableList<Entry<E>> entries =
+        (ImmutableList) ImmutableList.copyOf(SortedIterables.sortedCounts(comparator, iterator));
+    if (entries.isEmpty()) {
+      return emptyMultiset(comparator);
+    }
+    verifyEntries(entries);
+    return RegularImmutableSortedMultiset.createFromSorted(comparator, entries);
+  }
+
+  private static <E> void verifyEntries(Collection<Entry<E>> entries) {
+    for (Entry<E> entry : entries) {
+      checkNotNull(entry.getElement());
+    }
+  }
+
+  @SuppressWarnings("unchecked")
+  static <E> ImmutableSortedMultiset<E> emptyMultiset(Comparator<? super E> comparator) {
+    if (NATURAL_ORDER.equals(comparator)) {
+      return (ImmutableSortedMultiset) NATURAL_EMPTY_MULTISET;
+    }
+    return new EmptyImmutableSortedMultiset<E>(comparator);
+  }
+
+  private final transient Comparator<? super E> comparator;
+
+  ImmutableSortedMultiset(Comparator<? super E> comparator) {
+    this.comparator = checkNotNull(comparator);
+  }
+
+  @Override
+  public Comparator<? super E> comparator() {
+    return comparator;
+  }
+
+  // Pretend the comparator can compare anything. If it turns out it can't
+  // compare two elements, it'll throw a CCE. Only methods that are specified to
+  // throw CCE should call this.
+  @SuppressWarnings("unchecked")
+  Comparator<Object> unsafeComparator() {
+    return (Comparator<Object>) comparator;
+  }
+
+  private transient Comparator<? super E> reverseComparator;
+
+  Comparator<? super E> reverseComparator() {
+    Comparator<? super E> result = reverseComparator;
+    if (result == null) {
+      return reverseComparator = Ordering.from(comparator).<E>reverse();
+    }
+    return result;
+  }
+
+  private transient ImmutableSortedSet<E> elementSet;
+
+  @Override
+  public ImmutableSortedSet<E> elementSet() {
+    ImmutableSortedSet<E> result = elementSet;
+    if (result == null) {
+      return elementSet = createElementSet();
+    }
+    return result;
+  }
+
+  abstract ImmutableSortedSet<E> createElementSet();
+
+  abstract ImmutableSortedSet<E> createDescendingElementSet();
+
+  transient ImmutableSortedMultiset<E> descendingMultiset;
+
+  @Override
+  public ImmutableSortedMultiset<E> descendingMultiset() {
+    ImmutableSortedMultiset<E> result = descendingMultiset;
+    if (result == null) {
+      return descendingMultiset = new DescendingImmutableSortedMultiset<E>(this);
+    }
+    return result;
+  }
+
+  abstract UnmodifiableIterator<Entry<E>> descendingEntryIterator();
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>This implementation is guaranteed to throw an {@link UnsupportedOperationException}.
+   */
+  @Override
+  public final Entry<E> pollFirstEntry() {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>This implementation is guaranteed to throw an {@link UnsupportedOperationException}.
+   */
+  @Override
+  public Entry<E> pollLastEntry() {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public abstract ImmutableSortedMultiset<E> headMultiset(E upperBound, BoundType boundType);
+
+  @Override
+  public ImmutableSortedMultiset<E> subMultiset(
+      E lowerBound, BoundType lowerBoundType, E upperBound, BoundType upperBoundType) {
+    return tailMultiset(lowerBound, lowerBoundType).headMultiset(upperBound, upperBoundType);
+  }
+
+  @Override
+  public abstract ImmutableSortedMultiset<E> tailMultiset(E lowerBound, BoundType boundType);
+
+  /**
+   * Returns a builder that creates immutable sorted multisets with an explicit comparator. If the
+   * comparator has a more general type than the set being generated, such as creating a {@code
+   * SortedMultiset<Integer>} with a {@code Comparator<Number>}, use the {@link Builder}
+   * constructor instead.
+   *
+   * @throws NullPointerException if {@code comparator} is null
+   */
+  public static <E> Builder<E> orderedBy(Comparator<E> comparator) {
+    return new Builder<E>(comparator);
+  }
+
+  /**
+   * Returns a builder that creates immutable sorted multisets whose elements are ordered by the
+   * reverse of their natural ordering.
+   *
+   * <p>Note: the type parameter {@code E} extends {@code Comparable<E>} rather than {@code
+   * Comparable<? super E>} as a workaround for javac <a
+   * href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6468354">bug 6468354</a>.
+   */
+  public static <E extends Comparable<E>> Builder<E> reverseOrder() {
+    return new Builder<E>(Ordering.natural().reverse());
+  }
+
+  /**
+   * Returns a builder that creates immutable sorted multisets whose elements are ordered by their
+   * natural ordering. The sorted multisets use {@link Ordering#natural()} as the comparator. This
+   * method provides more type-safety than {@link #builder}, as it can be called only for classes
+   * that implement {@link Comparable}.
+   *
+   * <p>Note: the type parameter {@code E} extends {@code Comparable<E>} rather than {@code
+   * Comparable<? super E>} as a workaround for javac <a
+   * href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6468354">bug 6468354</a>.
+   */
+  public static <E extends Comparable<E>> Builder<E> naturalOrder() {
+    return new Builder<E>(Ordering.natural());
+  }
+
+  /**
+   * A builder for creating immutable multiset instances, especially {@code public static final}
+   * multisets ("constant multisets"). Example:
+   *
+   * <pre> {@code
+   *
+   *   public static final ImmutableSortedMultiset<Bean> BEANS =
+   *       new ImmutableSortedMultiset.Builder<Bean>()
+   *           .addCopies(Bean.COCOA, 4)
+   *           .addCopies(Bean.GARDEN, 6)
+   *           .addCopies(Bean.RED, 8)
+   *           .addCopies(Bean.BLACK_EYED, 10)
+   *           .build();}</pre>
+   *
+   * Builder instances can be reused; it is safe to call {@link #build} multiple times to build
+   * multiple multisets in series.
+   */
+  public static class Builder<E> extends ImmutableMultiset.Builder<E> {
+    private final Comparator<? super E> comparator;
+
+    /**
+     * Creates a new builder. The returned builder is equivalent to the builder generated by
+     * {@link ImmutableSortedMultiset#orderedBy(Comparator)}.
+     */
+    public Builder(Comparator<? super E> comparator) {
+      super(TreeMultiset.<E>create(comparator));
+      this.comparator = checkNotNull(comparator);
+    }
+
+    /**
+     * Adds {@code element} to the {@code ImmutableSortedMultiset}.
+     *
+     * @param element the element to add
+     * @return this {@code Builder} object
+     * @throws NullPointerException if {@code element} is null
+     */
+    @Override
+    public Builder<E> add(E element) {
+      super.add(element);
+      return this;
+    }
+
+    /**
+     * Adds a number of occurrences of an element to this {@code ImmutableSortedMultiset}.
+     *
+     * @param element the element to add
+     * @param occurrences the number of occurrences of the element to add. May be zero, in which
+     *        case no change will be made.
+     * @return this {@code Builder} object
+     * @throws NullPointerException if {@code element} is null
+     * @throws IllegalArgumentException if {@code occurrences} is negative, or if this operation
+     *         would result in more than {@link Integer#MAX_VALUE} occurrences of the element
+     */
+    @Override
+    public Builder<E> addCopies(E element, int occurrences) {
+      super.addCopies(element, occurrences);
+      return this;
+    }
+
+    /**
+     * Adds or removes the necessary occurrences of an element such that the element attains the
+     * desired count.
+     *
+     * @param element the element to add or remove occurrences of
+     * @param count the desired count of the element in this multiset
+     * @return this {@code Builder} object
+     * @throws NullPointerException if {@code element} is null
+     * @throws IllegalArgumentException if {@code count} is negative
+     */
+    @Override
+    public Builder<E> setCount(E element, int count) {
+      super.setCount(element, count);
+      return this;
+    }
+
+    /**
+     * Adds each element of {@code elements} to the {@code ImmutableSortedMultiset}.
+     *
+     * @param elements the elements to add
+     * @return this {@code Builder} object
+     * @throws NullPointerException if {@code elements} is null or contains a null element
+     */
+    @Override
+    public Builder<E> add(E... elements) {
+      super.add(elements);
+      return this;
+    }
+
+    /**
+     * Adds each element of {@code elements} to the {@code ImmutableSortedMultiset}.
+     *
+     * @param elements the {@code Iterable} to add to the {@code ImmutableSortedMultiset}
+     * @return this {@code Builder} object
+     * @throws NullPointerException if {@code elements} is null or contains a null element
+     */
+    @Override
+    public Builder<E> addAll(Iterable<? extends E> elements) {
+      super.addAll(elements);
+      return this;
+    }
+
+    /**
+     * Adds each element of {@code elements} to the {@code ImmutableSortedMultiset}.
+     *
+     * @param elements the elements to add to the {@code ImmutableSortedMultiset}
+     * @return this {@code Builder} object
+     * @throws NullPointerException if {@code elements} is null or contains a null element
+     */
+    @Override
+    public Builder<E> addAll(Iterator<? extends E> elements) {
+      super.addAll(elements);
+      return this;
+    }
+
+    /**
+     * Returns a newly-created {@code ImmutableSortedMultiset} based on the contents of the {@code
+     * Builder}.
+     */
+    @Override
+    public ImmutableSortedMultiset<E> build() {
+      return copyOf(comparator, contents);
+    }
+  }
+
+  private static final class SerializedForm implements Serializable {
+    Comparator comparator;
+    Object[] elements;
+    int[] counts;
+
+    SerializedForm(SortedMultiset<?> multiset) {
+      this.comparator = multiset.comparator();
+      int n = multiset.entrySet().size();
+      elements = new Object[n];
+      counts = new int[n];
+      int i = 0;
+      for (Entry<?> entry : multiset.entrySet()) {
+        elements[i] = entry.getElement();
+        counts[i] = entry.getCount();
+        i++;
+      }
+    }
+
+    @SuppressWarnings("unchecked")
+    Object readResolve() {
+      int n = elements.length;
+      Builder<Object> builder = orderedBy(comparator);
+      for (int i = 0; i < n; i++) {
+        builder.addCopies(elements[i], counts[i]);
+      }
+      return builder.build();
+    }
+  }
+
+  @Override
+  Object writeReplace() {
+    return new SerializedForm(this);
+  }
+}
diff --git a/guava/src/com/google/common/collect/ImmutableSortedMultisetFauxverideShim.java b/guava/src/com/google/common/collect/ImmutableSortedMultisetFauxverideShim.java
new file mode 100644
index 0000000..e7d74c8
--- /dev/null
+++ b/guava/src/com/google/common/collect/ImmutableSortedMultisetFauxverideShim.java
@@ -0,0 +1,170 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+/**
+ * "Overrides" the {@link ImmutableMultiset} static methods that lack
+ * {@link ImmutableSortedMultiset} equivalents with deprecated, exception-throwing versions. This
+ * prevents accidents like the following:
+ *
+ * <pre>   {@code
+ * 
+ *   List<Object> objects = ...;
+ *   // Sort them:
+ *   Set<Object> sorted = ImmutableSortedMultiset.copyOf(objects);
+ *   // BAD CODE! The returned multiset is actually an unsorted ImmutableMultiset!}</pre>
+ *
+ * While we could put the overrides in {@link ImmutableSortedMultiset} itself, it seems clearer to
+ * separate these "do not call" methods from those intended for normal use.
+ *
+ * @author Louis Wasserman
+ */
+abstract class ImmutableSortedMultisetFauxverideShim<E> extends ImmutableMultiset<E> {
+  /**
+   * Not supported. Use {@link ImmutableSortedMultiset#naturalOrder}, which offers better
+   * type-safety, instead. This method exists only to hide {@link ImmutableMultiset#builder} from
+   * consumers of {@code ImmutableSortedMultiset}.
+   *
+   * @throws UnsupportedOperationException always
+   * @deprecated Use {@link ImmutableSortedMultiset#naturalOrder}, which offers better type-safety.
+   */
+  @Deprecated
+  public static <E> ImmutableSortedMultiset.Builder<E> builder() {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * Not supported. <b>You are attempting to create a multiset that may contain a non-{@code
+   * Comparable} element.</b> Proper calls will resolve to the version in {@code
+   * ImmutableSortedMultiset}, not this dummy version.
+   *
+   * @throws UnsupportedOperationException always
+   * @deprecated <b>Pass a parameter of type {@code Comparable} to use
+   *             {@link ImmutableSortedMultiset#of(Comparable)}.</b>
+   */
+  @Deprecated
+  public static <E> ImmutableSortedMultiset<E> of(E element) {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * Not supported. <b>You are attempting to create a multiset that may contain a non-{@code
+   * Comparable} element.</b> Proper calls will resolve to the version in {@code
+   * ImmutableSortedMultiset}, not this dummy version.
+   *
+   * @throws UnsupportedOperationException always
+   * @deprecated <b>Pass the parameters of type {@code Comparable} to use
+   *             {@link ImmutableSortedMultiset#of(Comparable, Comparable)}.</b>
+   */
+  @Deprecated
+  public static <E> ImmutableSortedMultiset<E> of(E e1, E e2) {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * Not supported. <b>You are attempting to create a multiset that may contain a non-{@code
+   * Comparable} element.</b> Proper calls will resolve to the version in {@code
+   * ImmutableSortedMultiset}, not this dummy version.
+   *
+   * @throws UnsupportedOperationException always
+   * @deprecated <b>Pass the parameters of type {@code Comparable} to use
+   *             {@link ImmutableSortedMultiset#of(Comparable, Comparable, Comparable)}.</b>
+   */
+  @Deprecated
+  public static <E> ImmutableSortedMultiset<E> of(E e1, E e2, E e3) {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * Not supported. <b>You are attempting to create a multiset that may contain a non-{@code
+   * Comparable} element.</b> Proper calls will resolve to the version in {@code
+   * ImmutableSortedMultiset}, not this dummy version.
+   *
+   * @throws UnsupportedOperationException always
+   * @deprecated <b>Pass the parameters of type {@code Comparable} to use {@link
+   *             ImmutableSortedMultiset#of(Comparable, Comparable, Comparable, Comparable)}. </b>
+   */
+  @Deprecated
+  public static <E> ImmutableSortedMultiset<E> of(E e1, E e2, E e3, E e4) {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * Not supported. <b>You are attempting to create a multiset that may contain a non-{@code
+   * Comparable} element.</b> Proper calls will resolve to the version in {@code
+   * ImmutableSortedMultiset}, not this dummy version.
+   *
+   * @throws UnsupportedOperationException always
+   * @deprecated <b>Pass the parameters of type {@code Comparable} to use {@link
+   *             ImmutableSortedMultiset#of(Comparable, Comparable, Comparable, Comparable,
+   *             Comparable)} . </b>
+   */
+  @Deprecated
+  public static <E> ImmutableSortedMultiset<E> of(E e1, E e2, E e3, E e4, E e5) {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * Not supported. <b>You are attempting to create a multiset that may contain a non-{@code
+   * Comparable} element.</b> Proper calls will resolve to the version in {@code
+   * ImmutableSortedMultiset}, not this dummy version.
+   *
+   * @throws UnsupportedOperationException always
+   * @deprecated <b>Pass the parameters of type {@code Comparable} to use {@link
+   *             ImmutableSortedMultiset#of(Comparable, Comparable, Comparable, Comparable,
+   *             Comparable, Comparable, Comparable...)} . </b>
+   */
+  @Deprecated
+  public static <E> ImmutableSortedMultiset<E> of(
+      E e1,
+      E e2,
+      E e3,
+      E e4,
+      E e5,
+      E e6,
+      E... remaining) {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * Not supported. <b>You are attempting to create a multiset that may contain non-{@code
+   * Comparable} elements.</b> Proper calls will resolve to the version in {@code
+   * ImmutableSortedMultiset}, not this dummy version.
+   *
+   * @throws UnsupportedOperationException always
+   * @deprecated <b>Pass parameters of type {@code Comparable} to use
+   *             {@link ImmutableSortedMultiset#copyOf(Comparable[])}.</b>
+   */
+  @Deprecated
+  public static <E> ImmutableSortedMultiset<E> copyOf(E[] elements) {
+    throw new UnsupportedOperationException();
+  }
+
+  /*
+   * We would like to include an unsupported "<E> copyOf(Iterable<E>)" here, providing only the
+   * properly typed "<E extends Comparable<E>> copyOf(Iterable<E>)" in ImmutableSortedMultiset (and
+   * likewise for the Iterator equivalent). However, due to a change in Sun's interpretation of the
+   * JLS (as described at http://bugs.sun.com/view_bug.do?bug_id=6182950), the OpenJDK 7 compiler
+   * available as of this writing rejects our attempts. To maintain compatibility with that version
+   * and with any other compilers that interpret the JLS similarly, there is no definition of
+   * copyOf() here, and the definition in ImmutableSortedMultiset matches that in
+   * ImmutableMultiset.
+   *
+   * The result is that ImmutableSortedMultiset.copyOf() may be called on non-Comparable elements.
+   * We have not discovered a better solution. In retrospect, the static factory methods should
+   * have gone in a separate class so that ImmutableSortedMultiset wouldn't "inherit"
+   * too-permissive factory methods from ImmutableMultiset.
+   */
+}
diff --git a/guava/src/com/google/common/collect/ImmutableSortedSet.java b/guava/src/com/google/common/collect/ImmutableSortedSet.java
new file mode 100644
index 0000000..b2d871f
--- /dev/null
+++ b/guava/src/com/google/common/collect/ImmutableSortedSet.java
@@ -0,0 +1,699 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.io.InvalidObjectException;
+import java.io.ObjectInputStream;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+import java.util.SortedSet;
+
+import javax.annotation.Nullable;
+
+/**
+ * An immutable {@code SortedSet} that stores its elements in a sorted array.
+ * Some instances are ordered by an explicit comparator, while others follow the
+ * natural sort ordering of their elements. Either way, null elements are not
+ * supported.
+ *
+ * <p>Unlike {@link Collections#unmodifiableSortedSet}, which is a <i>view</i>
+ * of a separate collection that can still change, an instance of {@code
+ * ImmutableSortedSet} contains its own private data and will <i>never</i>
+ * change. This class is convenient for {@code public static final} sets
+ * ("constant sets") and also lets you easily make a "defensive copy" of a set
+ * provided to your class by a caller.
+ *
+ * <p>The sets returned by the {@link #headSet}, {@link #tailSet}, and
+ * {@link #subSet} methods share the same array as the original set, preventing
+ * that array from being garbage collected. If this is a concern, the data may
+ * be copied into a correctly-sized array by calling {@link #copyOfSorted}.
+ *
+ * <p><b>Note on element equivalence:</b> The {@link #contains(Object)},
+ * {@link #containsAll(Collection)}, and {@link #equals(Object)}
+ * implementations must check whether a provided object is equivalent to an
+ * element in the collection. Unlike most collections, an
+ * {@code ImmutableSortedSet} doesn't use {@link Object#equals} to determine if
+ * two elements are equivalent. Instead, with an explicit comparator, the
+ * following relation determines whether elements {@code x} and {@code y} are
+ * equivalent: <pre>   {@code
+ *
+ *   {(x, y) | comparator.compare(x, y) == 0}}</pre>
+ *
+ * With natural ordering of elements, the following relation determines whether
+ * two elements are equivalent: <pre>   {@code
+ *
+ *   {(x, y) | x.compareTo(y) == 0}}</pre>
+ *
+ * <b>Warning:</b> Like most sets, an {@code ImmutableSortedSet} will not
+ * function correctly if an element is modified after being placed in the set.
+ * For this reason, and to avoid general confusion, it is strongly recommended
+ * to place only immutable objects into this collection.
+ *
+ * <p><b>Note:</b> Although this class is not final, it cannot be subclassed as
+ * it has no public or protected constructors. Thus, instances of this type are
+ * guaranteed to be immutable.
+ *
+ * @see ImmutableSet
+ * @author Jared Levy
+ * @author Louis Wasserman
+ * @since 2.0 (imported from Google Collections Library)
+ */
+// TODO(benyu): benchmark and optimize all creation paths, which are a mess now
+@GwtCompatible(serializable = true, emulated = true)
+@SuppressWarnings("serial") // we're overriding default serialization
+public abstract class ImmutableSortedSet<E> extends ImmutableSortedSetFauxverideShim<E>
+    implements SortedSet<E>, SortedIterable<E> {
+
+  private static final Comparator<Comparable> NATURAL_ORDER =
+      Ordering.natural();
+
+  private static final ImmutableSortedSet<Comparable> NATURAL_EMPTY_SET =
+      new EmptyImmutableSortedSet<Comparable>(NATURAL_ORDER);
+
+  @SuppressWarnings("unchecked")
+  private static <E> ImmutableSortedSet<E> emptySet() {
+    return (ImmutableSortedSet<E>) NATURAL_EMPTY_SET;
+  }
+
+  static <E> ImmutableSortedSet<E> emptySet(
+      Comparator<? super E> comparator) {
+    if (NATURAL_ORDER.equals(comparator)) {
+      return emptySet();
+    } else {
+      return new EmptyImmutableSortedSet<E>(comparator);
+    }
+  }
+
+  /**
+   * Returns the empty immutable sorted set.
+   */
+  public static <E> ImmutableSortedSet<E> of() {
+    return emptySet();
+  }
+
+  /**
+   * Returns an immutable sorted set containing a single element.
+   */
+  public static <E extends Comparable<? super E>> ImmutableSortedSet<E> of(
+      E element) {
+    return new RegularImmutableSortedSet<E>(
+        ImmutableList.of(element), Ordering.natural());
+  }
+
+  /**
+   * Returns an immutable sorted set containing the given elements sorted by
+   * their natural ordering. When multiple elements are equivalent according to
+   * {@link Comparable#compareTo}, only the first one specified is included.
+   *
+   * @throws NullPointerException if any element is null
+   */
+  @SuppressWarnings("unchecked")
+  public static <E extends Comparable<? super E>> ImmutableSortedSet<E> of(
+      E e1, E e2) {
+    return copyOf(Ordering.natural(), Arrays.asList(e1, e2));
+  }
+
+  /**
+   * Returns an immutable sorted set containing the given elements sorted by
+   * their natural ordering. When multiple elements are equivalent according to
+   * {@link Comparable#compareTo}, only the first one specified is included.
+   *
+   * @throws NullPointerException if any element is null
+   */
+  @SuppressWarnings("unchecked")
+  public static <E extends Comparable<? super E>> ImmutableSortedSet<E> of(
+      E e1, E e2, E e3) {
+    return copyOf(Ordering.natural(), Arrays.asList(e1, e2, e3));
+  }
+
+  /**
+   * Returns an immutable sorted set containing the given elements sorted by
+   * their natural ordering. When multiple elements are equivalent according to
+   * {@link Comparable#compareTo}, only the first one specified is included.
+   *
+   * @throws NullPointerException if any element is null
+   */
+  @SuppressWarnings("unchecked")
+  public static <E extends Comparable<? super E>> ImmutableSortedSet<E> of(
+      E e1, E e2, E e3, E e4) {
+    return copyOf(Ordering.natural(), Arrays.asList(e1, e2, e3, e4));
+  }
+
+  /**
+   * Returns an immutable sorted set containing the given elements sorted by
+   * their natural ordering. When multiple elements are equivalent according to
+   * {@link Comparable#compareTo}, only the first one specified is included.
+   *
+   * @throws NullPointerException if any element is null
+   */
+  @SuppressWarnings("unchecked")
+  public static <E extends Comparable<? super E>> ImmutableSortedSet<E> of(
+      E e1, E e2, E e3, E e4, E e5) {
+    return copyOf(Ordering.natural(), Arrays.asList(e1, e2, e3, e4, e5));
+  }
+  
+  /**
+   * Returns an immutable sorted set containing the given elements sorted by
+   * their natural ordering. When multiple elements are equivalent according to
+   * {@link Comparable#compareTo}, only the first one specified is included.
+   *
+   * @throws NullPointerException if any element is null
+   * @since 3.0 (source-compatible since 2.0)
+   */
+  @SuppressWarnings("unchecked")
+  public static <E extends Comparable<? super E>> ImmutableSortedSet<E> of(
+      E e1, E e2, E e3, E e4, E e5, E e6, E... remaining) {
+    int size = remaining.length + 6;
+    List<E> all = new ArrayList<E>(size);
+    Collections.addAll(all, e1, e2, e3, e4, e5, e6);
+    Collections.addAll(all, remaining);
+    return copyOf(Ordering.natural(), all);
+  }
+
+  // TODO(kevinb): Consider factory methods that reject duplicates
+
+  /**
+   * Returns an immutable sorted set containing the given elements sorted by
+   * their natural ordering. When multiple elements are equivalent according to
+   * {@link Comparable#compareTo}, only the first one specified is included.
+   *
+   * @throws NullPointerException if any of {@code elements} is null
+   * @since 3.0
+   */
+  public static <E extends Comparable<? super E>> ImmutableSortedSet<E> copyOf(
+      E[] elements) {
+    return copyOf(Ordering.natural(), Arrays.asList(elements));
+  }
+
+  /**
+   * Returns an immutable sorted set containing the given elements sorted by
+   * their natural ordering. When multiple elements are equivalent according to
+   * {@code compareTo()}, only the first one specified is included. To create a
+   * copy of a {@code SortedSet} that preserves the comparator, call {@link
+   * #copyOfSorted} instead. This method iterates over {@code elements} at most
+   * once.
+
+   *
+   * <p>Note that if {@code s} is a {@code Set<String>}, then {@code
+   * ImmutableSortedSet.copyOf(s)} returns an {@code ImmutableSortedSet<String>}
+   * containing each of the strings in {@code s}, while {@code
+   * ImmutableSortedSet.of(s)} returns an {@code
+   * ImmutableSortedSet<Set<String>>} containing one element (the given set
+   * itself).
+   *
+   * <p>Despite the method name, this method attempts to avoid actually copying
+   * the data when it is safe to do so. The exact circumstances under which a
+   * copy will or will not be performed are undocumented and subject to change.
+   *
+   * <p>This method is not type-safe, as it may be called on elements that are
+   * not mutually comparable.
+   *
+   * @throws ClassCastException if the elements are not mutually comparable
+   * @throws NullPointerException if any of {@code elements} is null
+   */
+  public static <E> ImmutableSortedSet<E> copyOf(
+      Iterable<? extends E> elements) {
+    // Hack around E not being a subtype of Comparable.
+    // Unsafe, see ImmutableSortedSetFauxverideShim.
+    @SuppressWarnings("unchecked")
+    Ordering<E> naturalOrder = (Ordering<E>) Ordering.<Comparable>natural();
+    return copyOf(naturalOrder, elements);
+  }
+
+  /**
+   * Returns an immutable sorted set containing the given elements sorted by
+   * their natural ordering. When multiple elements are equivalent according to
+   * {@code compareTo()}, only the first one specified is included. To create a
+   * copy of a {@code SortedSet} that preserves the comparator, call
+   * {@link #copyOfSorted} instead. This method iterates over {@code elements}
+   * at most once.
+   *
+   * <p>Note that if {@code s} is a {@code Set<String>}, then
+   * {@code ImmutableSortedSet.copyOf(s)} returns an
+   * {@code ImmutableSortedSet<String>} containing each of the strings in
+   * {@code s}, while {@code ImmutableSortedSet.of(s)} returns an
+   * {@code ImmutableSortedSet<Set<String>>} containing one element (the given
+   * set itself).
+   *
+   * <p><b>Note:</b> Despite what the method name suggests, if {@code elements}
+   * is an {@code ImmutableSortedSet}, it may be returned instead of a copy.
+   *
+   * <p>This method is not type-safe, as it may be called on elements that are
+   * not mutually comparable.
+   *
+   * <p>This method is safe to use even when {@code elements} is a synchronized
+   * or concurrent collection that is currently being modified by another
+   * thread.
+   *
+   * @throws ClassCastException if the elements are not mutually comparable
+   * @throws NullPointerException if any of {@code elements} is null
+   * @since 7.0 (source-compatible since 2.0)
+   */
+  public static <E> ImmutableSortedSet<E> copyOf(
+      Collection<? extends E> elements) {
+    // Hack around E not being a subtype of Comparable.
+    // Unsafe, see ImmutableSortedSetFauxverideShim.
+    @SuppressWarnings("unchecked")
+    Ordering<E> naturalOrder = (Ordering<E>) Ordering.<Comparable>natural();
+    return copyOf(naturalOrder, elements);
+  }
+
+  /**
+   * Returns an immutable sorted set containing the given elements sorted by
+   * their natural ordering. When multiple elements are equivalent according to
+   * {@code compareTo()}, only the first one specified is included.
+   *
+   * <p>This method is not type-safe, as it may be called on elements that are
+   * not mutually comparable.
+   *
+   * @throws ClassCastException if the elements are not mutually comparable
+   * @throws NullPointerException if any of {@code elements} is null
+   */
+  public static <E> ImmutableSortedSet<E> copyOf(
+      Iterator<? extends E> elements) {
+    // Hack around E not being a subtype of Comparable.
+    // Unsafe, see ImmutableSortedSetFauxverideShim.
+    @SuppressWarnings("unchecked")
+    Ordering<E> naturalOrder = (Ordering<E>) Ordering.<Comparable>natural();
+    return copyOfInternal(naturalOrder, elements);
+  }
+
+  /**
+   * Returns an immutable sorted set containing the given elements sorted by
+   * the given {@code Comparator}. When multiple elements are equivalent
+   * according to {@code compareTo()}, only the first one specified is
+   * included.
+   *
+   * @throws NullPointerException if {@code comparator} or any of
+   *     {@code elements} is null
+   */
+  public static <E> ImmutableSortedSet<E> copyOf(
+      Comparator<? super E> comparator, Iterator<? extends E> elements) {
+    checkNotNull(comparator);
+    return copyOfInternal(comparator, elements);
+  }
+
+  /**
+   * Returns an immutable sorted set containing the given elements sorted by
+   * the given {@code Comparator}. When multiple elements are equivalent
+   * according to {@code compare()}, only the first one specified is
+   * included. This method iterates over {@code elements} at most once.
+   *
+   * <p>Despite the method name, this method attempts to avoid actually copying
+   * the data when it is safe to do so. The exact circumstances under which a
+   * copy will or will not be performed are undocumented and subject to change.
+   *
+   * @throws NullPointerException if {@code comparator} or any of {@code
+   *         elements} is null
+   */
+  public static <E> ImmutableSortedSet<E> copyOf(
+      Comparator<? super E> comparator, Iterable<? extends E> elements) {
+    checkNotNull(comparator);
+    return copyOfInternal(comparator, elements);
+  }
+
+  /**
+   * Returns an immutable sorted set containing the given elements sorted by
+   * the given {@code Comparator}. When multiple elements are equivalent
+   * according to {@code compareTo()}, only the first one specified is
+   * included.
+   *
+   * <p>Despite the method name, this method attempts to avoid actually copying
+   * the data when it is safe to do so. The exact circumstances under which a
+   * copy will or will not be performed are undocumented and subject to change.
+   *
+   * <p>This method is safe to use even when {@code elements} is a synchronized
+   * or concurrent collection that is currently being modified by another
+   * thread.
+   *
+   * @throws NullPointerException if {@code comparator} or any of
+   *     {@code elements} is null
+   * @since 7.0 (source-compatible since 2.0)
+   */
+  public static <E> ImmutableSortedSet<E> copyOf(
+      Comparator<? super E> comparator, Collection<? extends E> elements) {
+    checkNotNull(comparator);
+    return copyOfInternal(comparator, elements);
+  }
+
+  /**
+   * Returns an immutable sorted set containing the elements of a sorted set,
+   * sorted by the same {@code Comparator}. That behavior differs from {@link
+   * #copyOf(Iterable)}, which always uses the natural ordering of the
+   * elements.
+   *
+   * <p>Despite the method name, this method attempts to avoid actually copying
+   * the data when it is safe to do so. The exact circumstances under which a
+   * copy will or will not be performed are undocumented and subject to change.
+   *
+   * <p>This method is safe to use even when {@code sortedSet} is a synchronized
+   * or concurrent collection that is currently being modified by another
+   * thread.
+   *
+   * @throws NullPointerException if {@code sortedSet} or any of its elements
+   *     is null
+   */
+  @SuppressWarnings("unchecked")
+  public static <E> ImmutableSortedSet<E> copyOfSorted(SortedSet<E> sortedSet) {
+    Comparator<? super E> comparator = sortedSet.comparator();
+    if (comparator == null) {
+      comparator = (Comparator<? super E>) NATURAL_ORDER;
+    }
+    return copyOfInternal(comparator, sortedSet);
+  }
+
+  private static <E> ImmutableSortedSet<E> copyOfInternal(
+      Comparator<? super E> comparator, Iterable<? extends E> elements) {
+    boolean hasSameComparator =
+        SortedIterables.hasSameComparator(comparator, elements);
+
+    if (hasSameComparator && (elements instanceof ImmutableSortedSet)) {
+      @SuppressWarnings("unchecked")
+      ImmutableSortedSet<E> original = (ImmutableSortedSet<E>) elements;
+      if (!original.isPartialView()) {
+        return original;
+      }
+    }
+    ImmutableList<E> list = ImmutableList.copyOf(
+        SortedIterables.sortedUnique(comparator, elements));
+    return list.isEmpty()
+        ? ImmutableSortedSet.<E>emptySet(comparator)
+        : new RegularImmutableSortedSet<E>(list, comparator);
+  }
+
+  private static <E> ImmutableSortedSet<E> copyOfInternal(
+      Comparator<? super E> comparator, Iterator<? extends E> elements) {
+    ImmutableList<E> list =
+        ImmutableList.copyOf(SortedIterables.sortedUnique(comparator, elements));
+    return list.isEmpty()
+        ? ImmutableSortedSet.<E>emptySet(comparator)
+        : new RegularImmutableSortedSet<E>(list, comparator);
+  }
+
+  /**
+   * Returns a builder that creates immutable sorted sets with an explicit
+   * comparator. If the comparator has a more general type than the set being
+   * generated, such as creating a {@code SortedSet<Integer>} with a
+   * {@code Comparator<Number>}, use the {@link Builder} constructor instead.
+   *
+   * @throws NullPointerException if {@code comparator} is null
+   */
+  public static <E> Builder<E> orderedBy(Comparator<E> comparator) {
+    return new Builder<E>(comparator);
+  }
+
+  /**
+   * Returns a builder that creates immutable sorted sets whose elements are
+   * ordered by the reverse of their natural ordering.
+   *
+   * <p>Note: the type parameter {@code E} extends {@code Comparable<E>} rather
+   * than {@code Comparable<? super E>} as a workaround for javac <a
+   * href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6468354">bug
+   * 6468354</a>.
+   */
+  public static <E extends Comparable<E>> Builder<E> reverseOrder() {
+    return new Builder<E>(Ordering.natural().reverse());
+  }
+
+  /**
+   * Returns a builder that creates immutable sorted sets whose elements are
+   * ordered by their natural ordering. The sorted sets use {@link
+   * Ordering#natural()} as the comparator. This method provides more
+   * type-safety than {@link #builder}, as it can be called only for classes
+   * that implement {@link Comparable}.
+   *
+   * <p>Note: the type parameter {@code E} extends {@code Comparable<E>} rather
+   * than {@code Comparable<? super E>} as a workaround for javac <a
+   * href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6468354">bug
+   * 6468354</a>.
+   */
+  public static <E extends Comparable<E>> Builder<E> naturalOrder() {
+    return new Builder<E>(Ordering.natural());
+  }
+
+  /**
+   * A builder for creating immutable sorted set instances, especially {@code
+   * public static final} sets ("constant sets"), with a given comparator.
+   * Example: <pre>   {@code
+   *
+   *   public static final ImmutableSortedSet<Number> LUCKY_NUMBERS =
+   *       new ImmutableSortedSet.Builder<Number>(ODDS_FIRST_COMPARATOR)
+   *           .addAll(SINGLE_DIGIT_PRIMES)
+   *           .add(42)
+   *           .build();}</pre>
+   *
+   * Builder instances can be reused; it is safe to call {@link #build} multiple
+   * times to build multiple sets in series. Each set is a superset of the set
+   * created before it.
+   *
+   * @since 2.0 (imported from Google Collections Library)
+   */
+  public static final class Builder<E> extends ImmutableSet.Builder<E> {
+    private final Comparator<? super E> comparator;
+
+    /**
+     * Creates a new builder. The returned builder is equivalent to the builder
+     * generated by {@link ImmutableSortedSet#orderedBy}.
+     */
+    public Builder(Comparator<? super E> comparator) {
+      this.comparator = checkNotNull(comparator);
+    }
+
+    /**
+     * Adds {@code element} to the {@code ImmutableSortedSet}.  If the
+     * {@code ImmutableSortedSet} already contains {@code element}, then
+     * {@code add} has no effect. (only the previously added element
+     * is retained).
+     *
+     * @param element the element to add
+     * @return this {@code Builder} object
+     * @throws NullPointerException if {@code element} is null
+     */
+    @Override public Builder<E> add(E element) {
+      super.add(element);
+      return this;
+    }
+
+    /**
+     * Adds each element of {@code elements} to the {@code ImmutableSortedSet},
+     * ignoring duplicate elements (only the first duplicate element is added).
+     *
+     * @param elements the elements to add
+     * @return this {@code Builder} object
+     * @throws NullPointerException if {@code elements} contains a null element
+     */
+    @Override public Builder<E> add(E... elements) {
+      super.add(elements);
+      return this;
+    }
+
+    /**
+     * Adds each element of {@code elements} to the {@code ImmutableSortedSet},
+     * ignoring duplicate elements (only the first duplicate element is added).
+     *
+     * @param elements the elements to add to the {@code ImmutableSortedSet}
+     * @return this {@code Builder} object
+     * @throws NullPointerException if {@code elements} contains a null element
+     */
+    @Override public Builder<E> addAll(Iterable<? extends E> elements) {
+      super.addAll(elements);
+      return this;
+    }
+
+    /**
+     * Adds each element of {@code elements} to the {@code ImmutableSortedSet},
+     * ignoring duplicate elements (only the first duplicate element is added).
+     *
+     * @param elements the elements to add to the {@code ImmutableSortedSet}
+     * @return this {@code Builder} object
+     * @throws NullPointerException if {@code elements} contains a null element
+     */
+    @Override public Builder<E> addAll(Iterator<? extends E> elements) {
+      super.addAll(elements);
+      return this;
+    }
+
+    /**
+     * Returns a newly-created {@code ImmutableSortedSet} based on the contents
+     * of the {@code Builder} and its comparator.
+     */
+    @Override public ImmutableSortedSet<E> build() {
+      return copyOfInternal(comparator, contents.iterator());
+    }
+  }
+
+  int unsafeCompare(Object a, Object b) {
+    return unsafeCompare(comparator, a, b);
+  }
+
+  static int unsafeCompare(
+      Comparator<?> comparator, Object a, Object b) {
+    // Pretend the comparator can compare anything. If it turns out it can't
+    // compare a and b, we should get a CCE on the subsequent line. Only methods
+    // that are spec'd to throw CCE should call this.
+    @SuppressWarnings("unchecked")
+    Comparator<Object> unsafeComparator = (Comparator<Object>) comparator;
+    return unsafeComparator.compare(a, b);
+  }
+
+  final transient Comparator<? super E> comparator;
+
+  ImmutableSortedSet(Comparator<? super E> comparator) {
+    this.comparator = comparator;
+  }
+
+  /**
+   * Returns the comparator that orders the elements, which is
+   * {@link Ordering#natural()} when the natural ordering of the
+   * elements is used. Note that its behavior is not consistent with
+   * {@link SortedSet#comparator()}, which returns {@code null} to indicate
+   * natural ordering.
+   */
+  @Override
+  public Comparator<? super E> comparator() {
+    return comparator;
+  }
+
+  @Override // needed to unify the iterator() methods in Collection and SortedIterable
+  public abstract UnmodifiableIterator<E> iterator();
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>This method returns a serializable {@code ImmutableSortedSet}.
+   *
+   * <p>The {@link SortedSet#headSet} documentation states that a subset of a
+   * subset throws an {@link IllegalArgumentException} if passed a
+   * {@code toElement} greater than an earlier {@code toElement}. However, this
+   * method doesn't throw an exception in that situation, but instead keeps the
+   * original {@code toElement}.
+   */
+  @Override
+  public ImmutableSortedSet<E> headSet(E toElement) {
+    return headSet(toElement, false);
+  }
+
+  ImmutableSortedSet<E> headSet(E toElement, boolean inclusive) {
+    return headSetImpl(checkNotNull(toElement), inclusive);
+  }
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>This method returns a serializable {@code ImmutableSortedSet}.
+   *
+   * <p>The {@link SortedSet#subSet} documentation states that a subset of a
+   * subset throws an {@link IllegalArgumentException} if passed a
+   * {@code fromElement} smaller than an earlier {@code fromElement}. However,
+   * this method doesn't throw an exception in that situation, but instead keeps
+   * the original {@code fromElement}. Similarly, this method keeps the
+   * original {@code toElement}, instead of throwing an exception, if passed a
+   * {@code toElement} greater than an earlier {@code toElement}.
+   */
+  @Override
+  public ImmutableSortedSet<E> subSet(E fromElement, E toElement) {
+    return subSet(fromElement, true, toElement, false);
+  }
+
+  ImmutableSortedSet<E> subSet(
+      E fromElement, boolean fromInclusive, E toElement, boolean toInclusive) {
+    checkNotNull(fromElement);
+    checkNotNull(toElement);
+    checkArgument(comparator.compare(fromElement, toElement) <= 0);
+    return subSetImpl(fromElement, fromInclusive, toElement, toInclusive);
+  }
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>This method returns a serializable {@code ImmutableSortedSet}.
+   *
+   * <p>The {@link SortedSet#tailSet} documentation states that a subset of a
+   * subset throws an {@link IllegalArgumentException} if passed a
+   * {@code fromElement} smaller than an earlier {@code fromElement}. However,
+   * this method doesn't throw an exception in that situation, but instead keeps
+   * the original {@code fromElement}.
+   */
+  @Override
+  public ImmutableSortedSet<E> tailSet(E fromElement) {
+    return tailSet(fromElement, true);
+  }
+
+  ImmutableSortedSet<E> tailSet(E fromElement, boolean inclusive) {
+    return tailSetImpl(checkNotNull(fromElement), inclusive);
+  }
+
+  /*
+   * These methods perform most headSet, subSet, and tailSet logic, besides
+   * parameter validation.
+   */
+  abstract ImmutableSortedSet<E> headSetImpl(E toElement, boolean inclusive);
+
+  abstract ImmutableSortedSet<E> subSetImpl(
+      E fromElement, boolean fromInclusive, E toElement, boolean toInclusive);
+
+  abstract ImmutableSortedSet<E> tailSetImpl(E fromElement, boolean inclusive);
+
+  /**
+   * Returns the position of an element within the set, or -1 if not present.
+   */
+  abstract int indexOf(@Nullable Object target);
+
+  /*
+   * This class is used to serialize all ImmutableSortedSet instances,
+   * regardless of implementation type. It captures their "logical contents"
+   * only. This is necessary to ensure that the existence of a particular
+   * implementation type is an implementation detail.
+   */
+  private static class SerializedForm<E> implements Serializable {
+    final Comparator<? super E> comparator;
+    final Object[] elements;
+
+    public SerializedForm(Comparator<? super E> comparator, Object[] elements) {
+      this.comparator = comparator;
+      this.elements = elements;
+    }
+
+    @SuppressWarnings("unchecked")
+    Object readResolve() {
+      return new Builder<E>(comparator).add((E[]) elements).build();
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  private void readObject(ObjectInputStream stream)
+      throws InvalidObjectException {
+    throw new InvalidObjectException("Use SerializedForm");
+  }
+
+  @Override Object writeReplace() {
+    return new SerializedForm<E>(comparator, toArray());
+  }
+}
+
diff --git a/guava/src/com/google/common/collect/ImmutableSortedSetFauxverideShim.java b/guava/src/com/google/common/collect/ImmutableSortedSetFauxverideShim.java
new file mode 100644
index 0000000..302e912
--- /dev/null
+++ b/guava/src/com/google/common/collect/ImmutableSortedSetFauxverideShim.java
@@ -0,0 +1,167 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+/**
+ * "Overrides" the {@link ImmutableSet} static methods that lack
+ * {@link ImmutableSortedSet} equivalents with deprecated, exception-throwing
+ * versions. This prevents accidents like the following: <pre>   {@code
+ *
+ *   List<Object> objects = ...;
+ *   // Sort them:
+ *   Set<Object> sorted = ImmutableSortedSet.copyOf(objects);
+ *   // BAD CODE! The returned set is actually an unsorted ImmutableSet!}</pre>
+ *
+ * While we could put the overrides in {@link ImmutableSortedSet} itself, it
+ * seems clearer to separate these "do not call" methods from those intended for
+ * normal use.
+ *
+ * @author Chris Povirk
+ */
+@GwtCompatible
+abstract class ImmutableSortedSetFauxverideShim<E> extends ImmutableSet<E> {
+  /**
+   * Not supported. Use {@link ImmutableSortedSet#naturalOrder}, which offers
+   * better type-safety, instead. This method exists only to hide
+   * {@link ImmutableSet#builder} from consumers of {@code ImmutableSortedSet}.
+   *
+   * @throws UnsupportedOperationException always
+   * @deprecated Use {@link ImmutableSortedSet#naturalOrder}, which offers
+   *     better type-safety.
+   */
+  @Deprecated public static <E> ImmutableSortedSet.Builder<E> builder() {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * Not supported. <b>You are attempting to create a set that may contain a
+   * non-{@code Comparable} element.</b> Proper calls will resolve to the
+   * version in {@code ImmutableSortedSet}, not this dummy version.
+   *
+   * @throws UnsupportedOperationException always
+   * @deprecated <b>Pass a parameter of type {@code Comparable} to use {@link
+   *     ImmutableSortedSet#of(Comparable)}.</b>
+   */
+  @Deprecated public static <E> ImmutableSortedSet<E> of(E element) {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * Not supported. <b>You are attempting to create a set that may contain a
+   * non-{@code Comparable} element.</b> Proper calls will resolve to the
+   * version in {@code ImmutableSortedSet}, not this dummy version.
+   *
+   * @throws UnsupportedOperationException always
+   * @deprecated <b>Pass the parameters of type {@code Comparable} to use {@link
+   *     ImmutableSortedSet#of(Comparable, Comparable)}.</b>
+   */
+  @Deprecated public static <E> ImmutableSortedSet<E> of(E e1, E e2) {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * Not supported. <b>You are attempting to create a set that may contain a
+   * non-{@code Comparable} element.</b> Proper calls will resolve to the
+   * version in {@code ImmutableSortedSet}, not this dummy version.
+   *
+   * @throws UnsupportedOperationException always
+   * @deprecated <b>Pass the parameters of type {@code Comparable} to use {@link
+   *     ImmutableSortedSet#of(Comparable, Comparable, Comparable)}.</b>
+   */
+  @Deprecated public static <E> ImmutableSortedSet<E> of(E e1, E e2, E e3) {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * Not supported. <b>You are attempting to create a set that may contain a
+   * non-{@code Comparable} element.</b> Proper calls will resolve to the
+   * version in {@code ImmutableSortedSet}, not this dummy version.
+   *
+   * @throws UnsupportedOperationException always
+   * @deprecated <b>Pass the parameters of type {@code Comparable} to use {@link
+   *     ImmutableSortedSet#of(Comparable, Comparable, Comparable, Comparable)}.
+   * </b>
+   */
+  @Deprecated public static <E> ImmutableSortedSet<E> of(
+      E e1, E e2, E e3, E e4) {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * Not supported. <b>You are attempting to create a set that may contain a
+   * non-{@code Comparable} element.</b> Proper calls will resolve to the
+   * version in {@code ImmutableSortedSet}, not this dummy version.
+   *
+   * @throws UnsupportedOperationException always
+   * @deprecated <b>Pass the parameters of type {@code Comparable} to use {@link
+   *     ImmutableSortedSet#of(
+   *     Comparable, Comparable, Comparable, Comparable, Comparable)}. </b>
+   */
+  @Deprecated public static <E> ImmutableSortedSet<E> of(
+      E e1, E e2, E e3, E e4, E e5) {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * Not supported. <b>You are attempting to create a set that may contain a
+   * non-{@code Comparable} element.</b> Proper calls will resolve to the
+   * version in {@code ImmutableSortedSet}, not this dummy version.
+   *
+   * @throws UnsupportedOperationException always
+   * @deprecated <b>Pass the parameters of type {@code Comparable} to use {@link
+   *     ImmutableSortedSet#of(Comparable, Comparable, Comparable, Comparable, 
+   *     Comparable, Comparable, Comparable...)}. </b>
+   */
+  @Deprecated public static <E> ImmutableSortedSet<E> of(
+      E e1, E e2, E e3, E e4, E e5, E e6, E... remaining) {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * Not supported. <b>You are attempting to create a set that may contain
+   * non-{@code Comparable} elements.</b> Proper calls will resolve to the
+   * version in {@code ImmutableSortedSet}, not this dummy version.
+   *
+   * @throws UnsupportedOperationException always
+   * @deprecated <b>Pass parameters of type {@code Comparable} to use {@link
+   *     ImmutableSortedSet#copyOf(Comparable[])}.</b>
+   */
+  @Deprecated public static <E> ImmutableSortedSet<E> copyOf(E[] elements) {
+    throw new UnsupportedOperationException();
+  }
+
+  /*
+   * We would like to include an unsupported "<E> copyOf(Iterable<E>)" here,
+   * providing only the properly typed
+   * "<E extends Comparable<E>> copyOf(Iterable<E>)" in ImmutableSortedSet (and
+   * likewise for the Iterator equivalent). However, due to a change in Sun's
+   * interpretation of the JLS (as described at
+   * http://bugs.sun.com/view_bug.do?bug_id=6182950), the OpenJDK 7 compiler
+   * available as of this writing rejects our attempts. To maintain
+   * compatibility with that version and with any other compilers that interpret
+   * the JLS similarly, there is no definition of copyOf() here, and the
+   * definition in ImmutableSortedSet matches that in ImmutableSet.
+   * 
+   * The result is that ImmutableSortedSet.copyOf() may be called on
+   * non-Comparable elements. We have not discovered a better solution. In
+   * retrospect, the static factory methods should have gone in a separate class
+   * so that ImmutableSortedSet wouldn't "inherit" too-permissive factory
+   * methods from ImmutableSet.
+   */
+}
diff --git a/guava/src/com/google/common/collect/ImmutableTable.java b/guava/src/com/google/common/collect/ImmutableTable.java
new file mode 100644
index 0000000..debd49b
--- /dev/null
+++ b/guava/src/com/google/common/collect/ImmutableTable.java
@@ -0,0 +1,334 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Comparator;
+import java.util.List;
+import java.util.Map;
+
+import javax.annotation.Nullable;
+
+/**
+ * An immutable {@link Table} with reliable user-specified iteration order.
+ * Does not permit null keys or values.
+ *
+ * <p><b>Note</b>: Although this class is not final, it cannot be subclassed as
+ * it has no public or protected constructors. Thus, instances of this class are
+ * guaranteed to be immutable.
+ *
+ * @author gak@google.com (Gregory Kick)
+ * @since 11.0
+ */
+@Beta
+@GwtCompatible
+// TODO(gak): make serializable
+public abstract class ImmutableTable<R, C, V> implements Table<R, C, V> {
+  /** Returns an empty immutable table. */
+  @SuppressWarnings("unchecked")
+  public static final <R, C, V> ImmutableTable<R, C, V> of() {
+    return (ImmutableTable<R, C, V>) EmptyImmutableTable.INSTANCE;
+  }
+
+  /** Returns an immutable table containing a single cell. */
+  public static final <R, C, V> ImmutableTable<R, C, V> of(R rowKey,
+      C columnKey, V value) {
+    return new SingletonImmutableTable<R, C, V>(rowKey, columnKey, value);
+  }
+
+  /**
+   * Returns an immutable copy of the provided table.
+   *
+   * <p>The {@link Table#cellSet()} iteration order of the provided table
+   * determines the iteration ordering of all views in the returned table. Note
+   * that some views of the original table and the copied table may have
+   * different iteration orders. For more control over the ordering, create a
+   * {@link Builder} and call {@link Builder#orderRowsBy},
+   * {@link Builder#orderColumnsBy}, and {@link Builder#putAll}
+   *
+   * <p>Despite the method name, this method attempts to avoid actually copying
+   * the data when it is safe to do so. The exact circumstances under which a
+   * copy will or will not be performed are undocumented and subject to change.
+   */
+  public static final <R, C, V> ImmutableTable<R, C, V> copyOf(
+      Table<? extends R, ? extends C, ? extends V> table) {
+    if (table instanceof ImmutableTable<?, ?, ?>) {
+      @SuppressWarnings("unchecked")
+      ImmutableTable<R, C, V> parameterizedTable
+          = (ImmutableTable<R, C, V>) table;
+      return parameterizedTable;
+    } else {
+      int size = table.size();
+      switch (size) {
+        case 0:
+          return of();
+        case 1:
+          Cell<? extends R, ? extends C, ? extends V> onlyCell
+              = Iterables.getOnlyElement(table.cellSet());
+          return ImmutableTable.<R, C, V>of(onlyCell.getRowKey(),
+              onlyCell.getColumnKey(), onlyCell.getValue());
+        default:
+          ImmutableSet.Builder<Cell<R, C, V>> cellSetBuilder
+              = ImmutableSet.builder();
+          for (Cell<? extends R, ? extends C, ? extends V> cell :
+              table.cellSet()) {
+            /*
+             * Must cast to be able to create a Cell<R, C, V> rather than a
+             * Cell<? extends R, ? extends C, ? extends V>
+             */
+            cellSetBuilder.add(cellOf((R) cell.getRowKey(),
+                (C) cell.getColumnKey(), (V) cell.getValue()));
+          }
+          return RegularImmutableTable.forCells(cellSetBuilder.build());
+      }
+    }
+  }
+
+  /**
+   * Returns a new builder. The generated builder is equivalent to the builder
+   * created by the {@link Builder#Builder()} constructor.
+   */
+  public static final <R, C, V> Builder<R, C, V> builder() {
+    return new Builder<R, C, V>();
+  }
+
+  /**
+   * Verifies that {@code rowKey}, {@code columnKey} and {@code value} are
+   * non-null, and returns a new entry with those values.
+   */
+  static <R, C, V> Cell<R, C, V> cellOf(R rowKey, C columnKey, V value) {
+    return Tables.immutableCell(checkNotNull(rowKey), checkNotNull(columnKey),
+        checkNotNull(value));
+  }
+
+  /**
+   * A builder for creating immutable table instances, especially {@code public
+   * static final} tables ("constant tables"). Example: <pre>   {@code
+   *
+   *   static final ImmutableTable<Integer, Character, String> SPREADSHEET =
+   *       new ImmutableTable.Builder<Integer, Character, String>()
+   *           .put(1, 'A', "foo")
+   *           .put(1, 'B', "bar")
+   *           .put(2, 'A', "baz")
+   *           .build();}</pre>
+   *
+   * <p>By default, the order in which cells are added to the builder determines
+   * the iteration ordering of all views in the returned table, with {@link
+   * #putAll} following the {@link Table#cellSet()} iteration order. However, if
+   * {@link #orderRowsBy} or {@link #orderColumnsBy} is called, the views are
+   * sorted by the supplied comparators.
+   *
+   * For empty or single-cell immutable tables, {@link #of()} and
+   * {@link #of(Object, Object, Object)} are even more convenient.
+   *
+   * <p>Builder instances can be reused - it is safe to call {@link #build}
+   * multiple times to build multiple tables in series. Each table is a superset
+   * of the tables created before it.
+   *
+   * @since 11.0
+   */
+  public static final class Builder<R, C, V> {
+    private final List<Cell<R, C, V>> cells = Lists.newArrayList();
+    private Comparator<? super R> rowComparator;
+    private Comparator<? super C> columnComparator;
+
+    /**
+     * Creates a new builder. The returned builder is equivalent to the builder
+     * generated by {@link ImmutableTable#builder}.
+     */
+    public Builder() {}
+
+    /**
+     * Specifies the ordering of the generated table's rows.
+     */
+    public Builder<R, C, V> orderRowsBy(Comparator<? super R> rowComparator) {
+      this.rowComparator = checkNotNull(rowComparator);
+      return this;
+    }
+
+    /**
+     * Specifies the ordering of the generated table's columns.
+     */
+    public Builder<R, C, V> orderColumnsBy(
+        Comparator<? super C> columnComparator) {
+      this.columnComparator = checkNotNull(columnComparator);
+      return this;
+    }
+
+    /**
+     * Associates the ({@code rowKey}, {@code columnKey}) pair with {@code
+     * value} in the built table. Duplicate key pairs are not allowed and will
+     * cause {@link #build} to fail.
+     */
+    public Builder<R, C, V> put(R rowKey, C columnKey, V value) {
+      cells.add(cellOf(rowKey, columnKey, value));
+      return this;
+    }
+
+    /**
+     * Adds the given {@code cell} to the table, making it immutable if
+     * necessary. Duplicate key pairs are not allowed and will cause {@link
+     * #build} to fail.
+     */
+    public Builder<R, C, V> put(
+        Cell<? extends R, ? extends C, ? extends V> cell) {
+      if (cell instanceof Tables.ImmutableCell) {
+        checkNotNull(cell.getRowKey());
+        checkNotNull(cell.getColumnKey());
+        checkNotNull(cell.getValue());
+        @SuppressWarnings("unchecked") // all supported methods are covariant
+        Cell<R, C, V> immutableCell = (Cell<R, C, V>) cell;
+        cells.add(immutableCell);
+      } else {
+        put(cell.getRowKey(), cell.getColumnKey(), cell.getValue());
+      }
+      return this;
+    }
+
+    /**
+     * Associates all of the given table's keys and values in the built table.
+     * Duplicate row key column key pairs are not allowed, and will cause
+     * {@link #build} to fail.
+     *
+     * @throws NullPointerException if any key or value in {@code table} is null
+     */
+    public Builder<R, C, V> putAll(
+        Table<? extends R, ? extends C, ? extends V> table) {
+      for (Cell<? extends R, ? extends C, ? extends V> cell : table.cellSet()) {
+        put(cell);
+      }
+      return this;
+    }
+
+    /**
+     * Returns a newly-created immutable table.
+     *
+     * @throws IllegalArgumentException if duplicate key pairs were added
+     */
+    public ImmutableTable<R, C, V> build() {
+      int size = cells.size();
+      switch (size) {
+        case 0:
+          return of();
+        case 1:
+          return new SingletonImmutableTable<R, C, V>(
+              Iterables.getOnlyElement(cells));
+        default:
+         return RegularImmutableTable.forCells(
+             cells, rowComparator, columnComparator);
+      }
+    }
+  }
+
+  ImmutableTable() {}
+
+  @Override public abstract ImmutableSet<Cell<R, C, V>> cellSet();
+
+  /**
+   * {@inheritDoc}
+   *
+   * @throws NullPointerException if {@code columnKey} is {@code null}
+   */
+  @Override public abstract ImmutableMap<R, V> column(C columnKey);
+
+  @Override public abstract ImmutableSet<C> columnKeySet();
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>The value {@code Map<R, V>}s in the returned map are
+   * {@link ImmutableMap}s as well.
+   */
+  @Override public abstract ImmutableMap<C, Map<R, V>> columnMap();
+
+  /**
+   * {@inheritDoc}
+   *
+   * @throws NullPointerException if {@code rowKey} is {@code null}
+   */
+  @Override public abstract ImmutableMap<C, V> row(R rowKey);
+
+  @Override public abstract ImmutableSet<R> rowKeySet();
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>The value {@code Map<C, V>}s in the returned map are
+   * {@link ImmutableMap}s as well.
+   */
+  @Override public abstract ImmutableMap<R, Map<C, V>> rowMap();
+
+  /**
+   * Guaranteed to throw an exception and leave the table unmodified.
+   *
+   * @throws UnsupportedOperationException always
+   */
+  @Override public final void clear() {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * Guaranteed to throw an exception and leave the table unmodified.
+   *
+   * @throws UnsupportedOperationException always
+   */
+  @Override public final V put(R rowKey, C columnKey, V value) {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * Guaranteed to throw an exception and leave the table unmodified.
+   *
+   * @throws UnsupportedOperationException always
+   */
+  @Override public final void putAll(
+      Table<? extends R, ? extends C, ? extends V> table) {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * Guaranteed to throw an exception and leave the table unmodified.
+   *
+   * @throws UnsupportedOperationException always
+   */
+  @Override public final V remove(Object rowKey, Object columnKey) {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override public boolean equals(@Nullable Object obj) {
+    if (obj == this) {
+      return true;
+    } else if (obj instanceof Table<?, ?, ?>) {
+      Table<?, ?, ?> that = (Table<?, ?, ?>) obj;
+      return this.cellSet().equals(that.cellSet());
+    } else {
+      return false;
+    }
+  }
+
+  @Override public int hashCode() {
+    return cellSet().hashCode();
+  }
+
+  @Override public String toString() {
+    return rowMap().toString();
+  }
+}
diff --git a/guava/src/com/google/common/collect/Interner.java b/guava/src/com/google/common/collect/Interner.java
new file mode 100644
index 0000000..cd5e930
--- /dev/null
+++ b/guava/src/com/google/common/collect/Interner.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.Beta;
+
+/**
+ * Provides equivalent behavior to {@link String#intern} for other immutable
+ * types.
+ *
+ * @author Kevin Bourrillion
+ * @since 3.0
+ */
+@Beta
+public interface Interner<E> {
+  /**
+   * Chooses and returns the representative instance for any of a collection of
+   * instances that are equal to each other. If two {@linkplain Object#equals
+   * equal} inputs are given to this method, both calls will return the same
+   * instance.  That is, {@code intern(a).equals(a)} always holds, and {@code
+   * intern(a) == intern(b)} if and only if {@code a.equals(b)}. Note that
+   * {@code intern(a)} is permitted to return one instance now and a different
+   * instance later if the original interned instance was garbage-collected.
+   *
+   * <p><b>Warning:</b> do not use with mutable objects.
+   *
+   * @throws NullPointerException if {@code sample} is null
+   */
+  E intern(E sample);
+}
diff --git a/guava/src/com/google/common/collect/Interners.java b/guava/src/com/google/common/collect/Interners.java
new file mode 100644
index 0000000..f5a6c85
--- /dev/null
+++ b/guava/src/com/google/common/collect/Interners.java
@@ -0,0 +1,140 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.base.Equivalences;
+import com.google.common.base.Function;
+import com.google.common.collect.MapMakerInternalMap.ReferenceEntry;
+
+import java.util.concurrent.ConcurrentMap;
+
+/**
+ * Contains static methods pertaining to instances of {@link Interner}.
+ *
+ * @author Kevin Bourrillion
+ * @since 3.0
+ */
+@Beta
+public final class Interners {
+  private Interners() {}
+
+  /**
+   * Returns a new thread-safe interner which retains a strong reference to each instance it has
+   * interned, thus preventing these instances from being garbage-collected. If this retention is
+   * acceptable, this implementation may perform better than {@link #newWeakInterner}. Note that
+   * unlike {@link String#intern}, using this interner does not consume memory in the permanent
+   * generation.
+   */
+  public static <E> Interner<E> newStrongInterner() {
+    final ConcurrentMap<E, E> map = new MapMaker().makeMap();
+    return new Interner<E>() {
+      @Override public E intern(E sample) {
+        E canonical = map.putIfAbsent(checkNotNull(sample), sample);
+        return (canonical == null) ? sample : canonical;
+      }
+    };
+  }
+
+  private static class CustomInterner<E> implements Interner<E> {
+    // MapMaker is our friend, we know about this type
+    private final MapMakerInternalMap<E, Dummy> map;
+
+    CustomInterner(GenericMapMaker<? super E, Object> mm) {
+      this.map = mm
+          .strongValues()
+          .keyEquivalence(Equivalences.equals())
+          .makeCustomMap();
+    }
+
+    @Override public E intern(E sample) {
+      while (true) {
+        // trying to read the canonical...
+        ReferenceEntry<E, Dummy> entry = map.getEntry(sample);
+        if (entry != null) {
+          E canonical = entry.getKey();
+          if (canonical != null) { // only matters if weak/soft keys are used
+            return canonical;
+          }
+        }
+
+        // didn't see it, trying to put it instead...
+        Dummy sneaky = map.putIfAbsent(sample, Dummy.VALUE);
+        if (sneaky == null) {
+          return sample;
+        } else {
+          /* Someone beat us to it! Trying again...
+           *
+           * Technically this loop not guaranteed to terminate, so theoretically (extremely
+           * unlikely) this thread might starve, but even then, there is always going to be another
+           * thread doing progress here.
+           */
+        }
+      }
+    }
+
+    private enum Dummy { VALUE }
+  }
+
+  /**
+   * Returns a new thread-safe interner which retains a weak reference to each instance it has
+   * interned, and so does not prevent these instances from being garbage-collected. This most
+   * likely does not perform as well as {@link #newStrongInterner}, but is the best alternative
+   * when the memory usage of that implementation is unacceptable. Note that unlike {@link
+   * String#intern}, using this interner does not consume memory in the permanent generation.
+   */
+  @GwtIncompatible("java.lang.ref.WeakReference")
+  public static <E> Interner<E> newWeakInterner() {
+    return new CustomInterner<E>(new MapMaker().weakKeys());
+  }
+
+  /**
+   * Returns a function that delegates to the {@link Interner#intern} method of the given interner.
+   *
+   * @since 8.0
+   */
+  public static <E> Function<E, E> asFunction(Interner<E> interner) {
+    return new InternerFunction<E>(checkNotNull(interner));
+  }
+
+  private static class InternerFunction<E> implements Function<E, E> {
+
+    private final Interner<E> interner;
+
+    public InternerFunction(Interner<E> interner) {
+      this.interner = interner;
+    }
+
+    @Override public E apply(E input) {
+      return interner.intern(input);
+    }
+
+    @Override public int hashCode() {
+      return interner.hashCode();
+    }
+
+    @Override public boolean equals(Object other) {
+      if (other instanceof InternerFunction<?>) {
+        InternerFunction<?> that = (InternerFunction<?>) other;
+        return interner.equals(that.interner);
+      }
+
+      return false;
+    }
+  }
+}
diff --git a/guava/src/com/google/common/collect/Iterables.java b/guava/src/com/google/common/collect/Iterables.java
new file mode 100644
index 0000000..a92c2b2
--- /dev/null
+++ b/guava/src/com/google/common/collect/Iterables.java
@@ -0,0 +1,1132 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.base.Function;
+import com.google.common.base.Objects;
+import com.google.common.base.Optional;
+import com.google.common.base.Preconditions;
+import com.google.common.base.Predicate;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.NoSuchElementException;
+import java.util.Queue;
+import java.util.RandomAccess;
+import java.util.Set;
+import java.util.SortedSet;
+
+import javax.annotation.Nullable;
+
+/**
+ * This class contains static utility methods that operate on or return objects
+ * of type {@code Iterable}. Except as noted, each method has a corresponding
+ * {@link Iterator}-based method in the {@link Iterators} class.
+ *
+ * <p><i>Performance notes:</i> Unless otherwise noted, all of the iterables
+ * produced in this class are <i>lazy</i>, which means that their iterators
+ * only advance the backing iteration when absolutely necessary.
+ *
+ * @author Kevin Bourrillion
+ * @author Jared Levy
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible(emulated = true)
+public final class Iterables {
+  private Iterables() {}
+
+  /** Returns an unmodifiable view of {@code iterable}. */
+  public static <T> Iterable<T> unmodifiableIterable(
+      final Iterable<T> iterable) {
+    checkNotNull(iterable);
+    if (iterable instanceof UnmodifiableIterable ||
+        iterable instanceof ImmutableCollection) {
+      return iterable;
+    }
+    return new UnmodifiableIterable<T>(iterable);
+  }
+
+  /**
+   * Simply returns its argument.
+   *
+   * @deprecated no need to use this
+   * @since 10.0
+   */
+  @Deprecated public static <E> Iterable<E> unmodifiableIterable(
+      ImmutableCollection<E> iterable) {
+    return checkNotNull(iterable);
+  }
+
+  private static final class UnmodifiableIterable<T> implements Iterable<T> {
+    private final Iterable<T> iterable;
+
+    private UnmodifiableIterable(Iterable<T> iterable) {
+      this.iterable = iterable;
+    }
+
+    @Override
+    public Iterator<T> iterator() {
+      return Iterators.unmodifiableIterator(iterable.iterator());
+    }
+
+    @Override
+    public String toString() {
+      return iterable.toString();
+    }
+    // no equals and hashCode; it would break the contract!
+  }
+
+  /**
+   * Returns the number of elements in {@code iterable}.
+   */
+  public static int size(Iterable<?> iterable) {
+    return (iterable instanceof Collection)
+        ? ((Collection<?>) iterable).size()
+        : Iterators.size(iterable.iterator());
+  }
+
+  /**
+   * Returns {@code true} if {@code iterable} contains {@code element}; that is,
+   * any object for which {@code equals(element)} is true.
+   */
+  public static boolean contains(Iterable<?> iterable, @Nullable Object element)
+  {
+    if (iterable instanceof Collection) {
+      Collection<?> collection = (Collection<?>) iterable;
+      try {
+        return collection.contains(element);
+      } catch (NullPointerException e) {
+        return false;
+      } catch (ClassCastException e) {
+        return false;
+      }
+    }
+    return Iterators.contains(iterable.iterator(), element);
+  }
+
+  /**
+   * Removes, from an iterable, every element that belongs to the provided
+   * collection.
+   *
+   * <p>This method calls {@link Collection#removeAll} if {@code iterable} is a
+   * collection, and {@link Iterators#removeAll} otherwise.
+   *
+   * @param removeFrom the iterable to (potentially) remove elements from
+   * @param elementsToRemove the elements to remove
+   * @return {@code true} if any element was removed from {@code iterable}
+   */
+  public static boolean removeAll(
+      Iterable<?> removeFrom, Collection<?> elementsToRemove) {
+    return (removeFrom instanceof Collection)
+        ? ((Collection<?>) removeFrom).removeAll(checkNotNull(elementsToRemove))
+        : Iterators.removeAll(removeFrom.iterator(), elementsToRemove);
+  }
+
+  /**
+   * Removes, from an iterable, every element that does not belong to the
+   * provided collection.
+   *
+   * <p>This method calls {@link Collection#retainAll} if {@code iterable} is a
+   * collection, and {@link Iterators#retainAll} otherwise.
+   *
+   * @param removeFrom the iterable to (potentially) remove elements from
+   * @param elementsToRetain the elements to retain
+   * @return {@code true} if any element was removed from {@code iterable}
+   */
+  public static boolean retainAll(
+      Iterable<?> removeFrom, Collection<?> elementsToRetain) {
+    return (removeFrom instanceof Collection)
+        ? ((Collection<?>) removeFrom).retainAll(checkNotNull(elementsToRetain))
+        : Iterators.retainAll(removeFrom.iterator(), elementsToRetain);
+  }
+
+  /**
+   * Removes, from an iterable, every element that satisfies the provided
+   * predicate.
+   *
+   * @param removeFrom the iterable to (potentially) remove elements from
+   * @param predicate a predicate that determines whether an element should
+   *     be removed
+   * @return {@code true} if any elements were removed from the iterable
+   *
+   * @throws UnsupportedOperationException if the iterable does not support
+   *     {@code remove()}.
+   * @since 2.0
+   */
+  public static <T> boolean removeIf(
+      Iterable<T> removeFrom, Predicate<? super T> predicate) {
+    if (removeFrom instanceof RandomAccess && removeFrom instanceof List) {
+      return removeIfFromRandomAccessList(
+          (List<T>) removeFrom, checkNotNull(predicate));
+    }
+    return Iterators.removeIf(removeFrom.iterator(), predicate);
+  }
+
+  private static <T> boolean removeIfFromRandomAccessList(
+      List<T> list, Predicate<? super T> predicate) {
+    // Note: Not all random access lists support set() so we need to deal with
+    // those that don't and attempt the slower remove() based solution.
+    int from = 0;
+    int to = 0;
+
+    for (; from < list.size(); from++) {
+      T element = list.get(from);
+      if (!predicate.apply(element)) {
+        if (from > to) {
+          try {
+            list.set(to, element);
+          } catch (UnsupportedOperationException e) {
+            slowRemoveIfForRemainingElements(list, predicate, to, from);
+            return true;
+          }
+        }
+        to++;
+      }
+    }
+
+    // Clear the tail of any remaining items
+    list.subList(to, list.size()).clear();
+    return from != to;
+  }
+
+  private static <T> void slowRemoveIfForRemainingElements(List<T> list,
+      Predicate<? super T> predicate, int to, int from) {
+    // Here we know that:
+    // * (to < from) and that both are valid indices.
+    // * Everything with (index < to) should be kept.
+    // * Everything with (to <= index < from) should be removed.
+    // * The element with (index == from) should be kept.
+    // * Everything with (index > from) has not been checked yet.
+
+    // Check from the end of the list backwards (minimize expected cost of
+    // moving elements when remove() is called). Stop before 'from' because
+    // we already know that should be kept.
+    for (int n = list.size() - 1; n > from; n--) {
+      if (predicate.apply(list.get(n))) {
+        list.remove(n);
+      }
+    }
+    // And now remove everything in the range [to, from) (going backwards).
+    for (int n = from - 1; n >= to; n--) {
+      list.remove(n);
+    }
+  }
+
+  /**
+   * Determines whether two iterables contain equal elements in the same order.
+   * More specifically, this method returns {@code true} if {@code iterable1}
+   * and {@code iterable2} contain the same number of elements and every element
+   * of {@code iterable1} is equal to the corresponding element of
+   * {@code iterable2}.
+   */
+  public static boolean elementsEqual(
+      Iterable<?> iterable1, Iterable<?> iterable2) {
+    return Iterators.elementsEqual(iterable1.iterator(), iterable2.iterator());
+  }
+
+  /**
+   * Returns a string representation of {@code iterable}, with the format
+   * {@code [e1, e2, ..., en]}.
+   */
+  public static String toString(Iterable<?> iterable) {
+    return Iterators.toString(iterable.iterator());
+  }
+
+  /**
+   * Returns the single element contained in {@code iterable}.
+   *
+   * @throws NoSuchElementException if the iterable is empty
+   * @throws IllegalArgumentException if the iterable contains multiple
+   *     elements
+   */
+  public static <T> T getOnlyElement(Iterable<T> iterable) {
+    return Iterators.getOnlyElement(iterable.iterator());
+  }
+
+  /**
+   * Returns the single element contained in {@code iterable}, or {@code
+   * defaultValue} if the iterable is empty.
+   *
+   * @throws IllegalArgumentException if the iterator contains multiple
+   *     elements
+   */
+  public static <T> T getOnlyElement(
+      Iterable<T> iterable, @Nullable T defaultValue) {
+    return Iterators.getOnlyElement(iterable.iterator(), defaultValue);
+  }
+
+  /**
+   * Copies an iterable's elements into an array.
+   *
+   * @param iterable the iterable to copy
+   * @param type the type of the elements
+   * @return a newly-allocated array into which all the elements of the iterable
+   *     have been copied
+   */
+  @GwtIncompatible("Array.newInstance(Class, int)")
+  public static <T> T[] toArray(Iterable<? extends T> iterable, Class<T> type) {
+    Collection<? extends T> collection = toCollection(iterable);
+    T[] array = ObjectArrays.newArray(type, collection.size());
+    return collection.toArray(array);
+  }
+
+  /**
+   * Copies an iterable's elements into an array.
+   *
+   * @param iterable the iterable to copy
+   * @return a newly-allocated array into which all the elements of the iterable
+   *     have been copied
+   */
+  static Object[] toArray(Iterable<?> iterable) {
+    return toCollection(iterable).toArray();
+  }
+
+  /**
+   * Converts an iterable into a collection. If the iterable is already a
+   * collection, it is returned. Otherwise, an {@link java.util.ArrayList} is
+   * created with the contents of the iterable in the same iteration order.
+   */
+  private static <E> Collection<E> toCollection(Iterable<E> iterable) {
+    return (iterable instanceof Collection)
+        ? (Collection<E>) iterable
+        : Lists.newArrayList(iterable.iterator());
+  }
+
+  /**
+   * Adds all elements in {@code iterable} to {@code collection}.
+   *
+   * @return {@code true} if {@code collection} was modified as a result of this
+   *     operation.
+   */
+  public static <T> boolean addAll(
+      Collection<T> addTo, Iterable<? extends T> elementsToAdd) {
+    if (elementsToAdd instanceof Collection) {
+      Collection<? extends T> c = Collections2.cast(elementsToAdd);
+      return addTo.addAll(c);
+    }
+    return Iterators.addAll(addTo, elementsToAdd.iterator());
+  }
+
+  /**
+   * Returns the number of elements in the specified iterable that equal the
+   * specified object. This implementation avoids a full iteration when the
+   * iterable is a {@link Multiset} or {@link Set}.
+   *
+   * @see Collections#frequency
+   */
+  public static int frequency(Iterable<?> iterable, @Nullable Object element) {
+    if ((iterable instanceof Multiset)) {
+      return ((Multiset<?>) iterable).count(element);
+    }
+    if ((iterable instanceof Set)) {
+      return ((Set<?>) iterable).contains(element) ? 1 : 0;
+    }
+    return Iterators.frequency(iterable.iterator(), element);
+  }
+
+  /**
+   * Returns an iterable whose iterators cycle indefinitely over the elements of
+   * {@code iterable}.
+   *
+   * <p>That iterator supports {@code remove()} if {@code iterable.iterator()}
+   * does. After {@code remove()} is called, subsequent cycles omit the removed
+   * element, which is no longer in {@code iterable}. The iterator's
+   * {@code hasNext()} method returns {@code true} until {@code iterable} is
+   * empty.
+   *
+   * <p><b>Warning:</b> Typical uses of the resulting iterator may produce an
+   * infinite loop. You should use an explicit {@code break} or be certain that
+   * you will eventually remove all the elements.
+   *
+   * <p>To cycle over the iterable {@code n} times, use the following:
+   * {@code Iterables.concat(Collections.nCopies(n, iterable))}
+   */
+  public static <T> Iterable<T> cycle(final Iterable<T> iterable) {
+    checkNotNull(iterable);
+    return new Iterable<T>() {
+      @Override
+      public Iterator<T> iterator() {
+        return Iterators.cycle(iterable);
+      }
+      @Override public String toString() {
+        return iterable.toString() + " (cycled)";
+      }
+    };
+  }
+
+  /**
+   * Returns an iterable whose iterators cycle indefinitely over the provided
+   * elements.
+   *
+   * <p>After {@code remove} is invoked on a generated iterator, the removed
+   * element will no longer appear in either that iterator or any other iterator
+   * created from the same source iterable. That is, this method behaves exactly
+   * as {@code Iterables.cycle(Lists.newArrayList(elements))}. The iterator's
+   * {@code hasNext} method returns {@code true} until all of the original
+   * elements have been removed.
+   *
+   * <p><b>Warning:</b> Typical uses of the resulting iterator may produce an
+   * infinite loop. You should use an explicit {@code break} or be certain that
+   * you will eventually remove all the elements.
+   *
+   * <p>To cycle over the elements {@code n} times, use the following:
+   * {@code Iterables.concat(Collections.nCopies(n, Arrays.asList(elements)))}
+   */
+  public static <T> Iterable<T> cycle(T... elements) {
+    return cycle(Lists.newArrayList(elements));
+  }
+
+  /**
+   * Combines two iterables into a single iterable. The returned iterable has an
+   * iterator that traverses the elements in {@code a}, followed by the elements
+   * in {@code b}. The source iterators are not polled until necessary.
+   *
+   * <p>The returned iterable's iterator supports {@code remove()} when the
+   * corresponding input iterator supports it.
+   */
+  @SuppressWarnings("unchecked")
+  public static <T> Iterable<T> concat(
+      Iterable<? extends T> a, Iterable<? extends T> b) {
+    checkNotNull(a);
+    checkNotNull(b);
+    return concat(Arrays.asList(a, b));
+  }
+
+  /**
+   * Combines three iterables into a single iterable. The returned iterable has
+   * an iterator that traverses the elements in {@code a}, followed by the
+   * elements in {@code b}, followed by the elements in {@code c}. The source
+   * iterators are not polled until necessary.
+   *
+   * <p>The returned iterable's iterator supports {@code remove()} when the
+   * corresponding input iterator supports it.
+   */
+  @SuppressWarnings("unchecked")
+  public static <T> Iterable<T> concat(Iterable<? extends T> a,
+      Iterable<? extends T> b, Iterable<? extends T> c) {
+    checkNotNull(a);
+    checkNotNull(b);
+    checkNotNull(c);
+    return concat(Arrays.asList(a, b, c));
+  }
+
+  /**
+   * Combines four iterables into a single iterable. The returned iterable has
+   * an iterator that traverses the elements in {@code a}, followed by the
+   * elements in {@code b}, followed by the elements in {@code c}, followed by
+   * the elements in {@code d}. The source iterators are not polled until
+   * necessary.
+   *
+   * <p>The returned iterable's iterator supports {@code remove()} when the
+   * corresponding input iterator supports it.
+   */
+  @SuppressWarnings("unchecked")
+  public static <T> Iterable<T> concat(Iterable<? extends T> a,
+      Iterable<? extends T> b, Iterable<? extends T> c,
+      Iterable<? extends T> d) {
+    checkNotNull(a);
+    checkNotNull(b);
+    checkNotNull(c);
+    checkNotNull(d);
+    return concat(Arrays.asList(a, b, c, d));
+  }
+
+  /**
+   * Combines multiple iterables into a single iterable. The returned iterable
+   * has an iterator that traverses the elements of each iterable in
+   * {@code inputs}. The input iterators are not polled until necessary.
+   *
+   * <p>The returned iterable's iterator supports {@code remove()} when the
+   * corresponding input iterator supports it.
+   *
+   * @throws NullPointerException if any of the provided iterables is null
+   */
+  public static <T> Iterable<T> concat(Iterable<? extends T>... inputs) {
+    return concat(ImmutableList.copyOf(inputs));
+  }
+
+  /**
+   * Combines multiple iterables into a single iterable. The returned iterable
+   * has an iterator that traverses the elements of each iterable in
+   * {@code inputs}. The input iterators are not polled until necessary.
+   *
+   * <p>The returned iterable's iterator supports {@code remove()} when the
+   * corresponding input iterator supports it. The methods of the returned
+   * iterable may throw {@code NullPointerException} if any of the input
+   * iterators is null.
+   */
+  public static <T> Iterable<T> concat(
+      final Iterable<? extends Iterable<? extends T>> inputs) {
+    checkNotNull(inputs);
+    return new IterableWithToString<T>() {
+      @Override
+      public Iterator<T> iterator() {
+        return Iterators.concat(iterators(inputs));
+      }
+    };
+  }
+
+  /**
+   * Returns an iterator over the iterators of the given iterables.
+   */
+  private static <T> UnmodifiableIterator<Iterator<? extends T>> iterators(
+      Iterable<? extends Iterable<? extends T>> iterables) {
+    final Iterator<? extends Iterable<? extends T>> iterableIterator =
+        iterables.iterator();
+    return new UnmodifiableIterator<Iterator<? extends T>>() {
+      @Override
+      public boolean hasNext() {
+        return iterableIterator.hasNext();
+      }
+      @Override
+      public Iterator<? extends T> next() {
+        return iterableIterator.next().iterator();
+      }
+    };
+  }
+
+  /**
+   * Divides an iterable into unmodifiable sublists of the given size (the final
+   * iterable may be smaller). For example, partitioning an iterable containing
+   * {@code [a, b, c, d, e]} with a partition size of 3 yields {@code
+   * [[a, b, c], [d, e]]} -- an outer iterable containing two inner lists of
+   * three and two elements, all in the original order.
+   *
+   * <p>Iterators returned by the returned iterable do not support the {@link
+   * Iterator#remove()} method. The returned lists implement {@link
+   * RandomAccess}, whether or not the input list does.
+   *
+   * <p><b>Note:</b> if {@code iterable} is a {@link List}, use {@link
+   * Lists#partition(List, int)} instead.
+   *
+   * @param iterable the iterable to return a partitioned view of
+   * @param size the desired size of each partition (the last may be smaller)
+   * @return an iterable of unmodifiable lists containing the elements of {@code
+   *     iterable} divided into partitions
+   * @throws IllegalArgumentException if {@code size} is nonpositive
+   */
+  public static <T> Iterable<List<T>> partition(
+      final Iterable<T> iterable, final int size) {
+    checkNotNull(iterable);
+    checkArgument(size > 0);
+    return new IterableWithToString<List<T>>() {
+      @Override
+      public Iterator<List<T>> iterator() {
+        return Iterators.partition(iterable.iterator(), size);
+      }
+    };
+  }
+
+  /**
+   * Divides an iterable into unmodifiable sublists of the given size, padding
+   * the final iterable with null values if necessary. For example, partitioning
+   * an iterable containing {@code [a, b, c, d, e]} with a partition size of 3
+   * yields {@code [[a, b, c], [d, e, null]]} -- an outer iterable containing
+   * two inner lists of three elements each, all in the original order.
+   *
+   * <p>Iterators returned by the returned iterable do not support the {@link
+   * Iterator#remove()} method.
+   *
+   * @param iterable the iterable to return a partitioned view of
+   * @param size the desired size of each partition
+   * @return an iterable of unmodifiable lists containing the elements of {@code
+   *     iterable} divided into partitions (the final iterable may have
+   *     trailing null elements)
+   * @throws IllegalArgumentException if {@code size} is nonpositive
+   */
+  public static <T> Iterable<List<T>> paddedPartition(
+      final Iterable<T> iterable, final int size) {
+    checkNotNull(iterable);
+    checkArgument(size > 0);
+    return new IterableWithToString<List<T>>() {
+      @Override
+      public Iterator<List<T>> iterator() {
+        return Iterators.paddedPartition(iterable.iterator(), size);
+      }
+    };
+  }
+
+  /**
+   * Returns the elements of {@code unfiltered} that satisfy a predicate. The
+   * resulting iterable's iterator does not support {@code remove()}.
+   */
+  public static <T> Iterable<T> filter(
+      final Iterable<T> unfiltered, final Predicate<? super T> predicate) {
+    checkNotNull(unfiltered);
+    checkNotNull(predicate);
+    return new IterableWithToString<T>() {
+      @Override
+      public Iterator<T> iterator() {
+        return Iterators.filter(unfiltered.iterator(), predicate);
+      }
+    };
+  }
+
+  /**
+   * Returns all instances of class {@code type} in {@code unfiltered}. The
+   * returned iterable has elements whose class is {@code type} or a subclass of
+   * {@code type}. The returned iterable's iterator does not support
+   * {@code remove()}.
+   *
+   * @param unfiltered an iterable containing objects of any type
+   * @param type the type of elements desired
+   * @return an unmodifiable iterable containing all elements of the original
+   *     iterable that were of the requested type
+   */
+  @GwtIncompatible("Class.isInstance")
+  public static <T> Iterable<T> filter(
+      final Iterable<?> unfiltered, final Class<T> type) {
+    checkNotNull(unfiltered);
+    checkNotNull(type);
+    return new IterableWithToString<T>() {
+      @Override
+      public Iterator<T> iterator() {
+        return Iterators.filter(unfiltered.iterator(), type);
+      }
+    };
+  }
+
+  /**
+   * Returns {@code true} if one or more elements in {@code iterable} satisfy
+   * the predicate.
+   */
+  public static <T> boolean any(
+      Iterable<T> iterable, Predicate<? super T> predicate) {
+    return Iterators.any(iterable.iterator(), predicate);
+  }
+
+  /**
+   * Returns {@code true} if every element in {@code iterable} satisfies the
+   * predicate. If {@code iterable} is empty, {@code true} is returned.
+   */
+  public static <T> boolean all(
+      Iterable<T> iterable, Predicate<? super T> predicate) {
+    return Iterators.all(iterable.iterator(), predicate);
+  }
+
+  /**
+   * Returns the first element in {@code iterable} that satisfies the given
+   * predicate; use this method only when such an element is known to exist. If
+   * it is possible that <i>no</i> element will match, use {@link
+   * #tryFind)} or {@link #find(Iterable, Predicate, T)} instead.
+   *
+   * @throws NoSuchElementException if no element in {@code iterable} matches
+   *     the given predicate
+   */
+  public static <T> T find(Iterable<T> iterable,
+      Predicate<? super T> predicate) {
+    return Iterators.find(iterable.iterator(), predicate);
+  }
+
+  /**
+   * Returns the first element in {@code iterable} that satisfies the given
+   * predicate, or {@code defaultValue} if none found. Note that this can
+   * usually be handled more naturally using {@code
+   * tryFind(iterable, predicate).or(defaultValue)}.
+   *
+   * @since 7.0
+   */
+  public static <T> T find(Iterable<T> iterable,
+      Predicate<? super T> predicate, @Nullable T defaultValue) {
+    return Iterators.find(iterable.iterator(), predicate, defaultValue);
+  }
+
+  /**
+   * Returns an {@link Optional} containing the first element in {@code
+   * iterable} that satisfies the given predicate, if such an element exists.
+   *
+   * <p><b>Warning:</b> avoid using a {@code predicate} that matches {@code
+   * null}. If {@code null} is matched in {@code iterable}, a
+   * NullPointerException will be thrown.
+   *
+   * @since 11.0
+   */
+  public static <T> Optional<T> tryFind(Iterable<T> iterable,
+      Predicate<? super T> predicate) {
+    return Iterators.tryFind(iterable.iterator(), predicate);
+  }
+
+  /**
+   * Returns the index in {@code iterable} of the first element that satisfies
+   * the provided {@code predicate}, or {@code -1} if the Iterable has no such
+   * elements.
+   *
+   * <p>More formally, returns the lowest index {@code i} such that
+   * {@code predicate.apply(Iterables.get(iterable, i))} returns {@code true},
+   * or {@code -1} if there is no such index.
+   *
+   * @since 2.0
+   */
+  public static <T> int indexOf(
+      Iterable<T> iterable, Predicate<? super T> predicate) {
+    return Iterators.indexOf(iterable.iterator(), predicate);
+  }
+
+  /**
+   * Returns an iterable that applies {@code function} to each element of {@code
+   * fromIterable}.
+   *
+   * <p>The returned iterable's iterator supports {@code remove()} if the
+   * provided iterator does. After a successful {@code remove()} call,
+   * {@code fromIterable} no longer contains the corresponding element.
+   *
+   * <p>If the input {@code Iterable} is known to be a {@code List} or other
+   * {@code Collection}, consider {@link Lists#transform} and {@link
+   * Collections2#transform}.
+   */
+  public static <F, T> Iterable<T> transform(final Iterable<F> fromIterable,
+      final Function<? super F, ? extends T> function) {
+    checkNotNull(fromIterable);
+    checkNotNull(function);
+    return new IterableWithToString<T>() {
+      @Override
+      public Iterator<T> iterator() {
+        return Iterators.transform(fromIterable.iterator(), function);
+      }
+    };
+  }
+
+  /**
+   * Returns the element at the specified position in an iterable.
+   *
+   * @param position position of the element to return
+   * @return the element at the specified position in {@code iterable}
+   * @throws IndexOutOfBoundsException if {@code position} is negative or
+   *     greater than or equal to the size of {@code iterable}
+   */
+  public static <T> T get(Iterable<T> iterable, int position) {
+    checkNotNull(iterable);
+    if (iterable instanceof List) {
+      return ((List<T>) iterable).get(position);
+    }
+
+    if (iterable instanceof Collection) {
+      // Can check both ends
+      Collection<T> collection = (Collection<T>) iterable;
+      Preconditions.checkElementIndex(position, collection.size());
+    } else {
+      // Can only check the lower end
+      checkNonnegativeIndex(position);
+    }
+    return Iterators.get(iterable.iterator(), position);
+  }
+
+  private static void checkNonnegativeIndex(int position) {
+    if (position < 0) {
+      throw new IndexOutOfBoundsException(
+          "position cannot be negative: " + position);
+    }
+  }
+
+  /**
+   * Returns the element at the specified position in an iterable or a default
+   * value otherwise.
+   *
+   * @param position position of the element to return
+   * @param defaultValue the default value to return if {@code position} is
+   *     greater than or equal to the size of the iterable
+   * @return the element at the specified position in {@code iterable} or
+   *     {@code defaultValue} if {@code iterable} contains fewer than
+   *     {@code position + 1} elements.
+   * @throws IndexOutOfBoundsException if {@code position} is negative
+   * @since 4.0
+   */
+  public static <T> T get(Iterable<T> iterable, int position,
+      @Nullable T defaultValue) {
+    checkNotNull(iterable);
+    checkNonnegativeIndex(position);
+
+    try {
+      return get(iterable, position);
+    } catch (IndexOutOfBoundsException e) {
+      return defaultValue;
+    }
+  }
+
+  /**
+   * Returns the first element in {@code iterable} or {@code defaultValue} if
+   * the iterable is empty.  The {@link Iterators} analog to this method is
+   * {@link Iterators#getNext}.
+   *
+   * @param defaultValue the default value to return if the iterable is empty
+   * @return the first element of {@code iterable} or the default value
+   * @since 7.0
+   */
+  public static <T> T getFirst(Iterable<T> iterable, @Nullable T defaultValue) {
+    return Iterators.getNext(iterable.iterator(), defaultValue);
+  }
+
+  /**
+   * Returns the last element of {@code iterable}.
+   *
+   * @return the last element of {@code iterable}
+   * @throws NoSuchElementException if the iterable is empty
+   */
+  public static <T> T getLast(Iterable<T> iterable) {
+    // TODO(kevinb): Support a concurrently modified collection?
+    if (iterable instanceof List) {
+      List<T> list = (List<T>) iterable;
+      if (list.isEmpty()) {
+        throw new NoSuchElementException();
+      }
+      return getLastInNonemptyList(list);
+    }
+
+    /*
+     * TODO(kevinb): consider whether this "optimization" is worthwhile. Users
+     * with SortedSets tend to know they are SortedSets and probably would not
+     * call this method.
+     */
+    if (iterable instanceof SortedSet) {
+      SortedSet<T> sortedSet = (SortedSet<T>) iterable;
+      return sortedSet.last();
+    }
+
+    return Iterators.getLast(iterable.iterator());
+  }
+
+  /**
+   * Returns the last element of {@code iterable} or {@code defaultValue} if
+   * the iterable is empty.
+   *
+   * @param defaultValue the value to return if {@code iterable} is empty
+   * @return the last element of {@code iterable} or the default value
+   * @since 3.0
+   */
+  public static <T> T getLast(Iterable<T> iterable, @Nullable T defaultValue) {
+    if (iterable instanceof Collection) {
+      Collection<T> collection = (Collection<T>) iterable;
+      if (collection.isEmpty()) {
+        return defaultValue;
+      }
+    }
+
+    if (iterable instanceof List) {
+      List<T> list = (List<T>) iterable;
+      return getLastInNonemptyList(list);
+    }
+
+    /*
+     * TODO(kevinb): consider whether this "optimization" is worthwhile. Users
+     * with SortedSets tend to know they are SortedSets and probably would not
+     * call this method.
+     */
+    if (iterable instanceof SortedSet) {
+      SortedSet<T> sortedSet = (SortedSet<T>) iterable;
+      return sortedSet.last();
+    }
+
+    return Iterators.getLast(iterable.iterator(), defaultValue);
+  }
+
+  private static <T> T getLastInNonemptyList(List<T> list) {
+    return list.get(list.size() - 1);
+  }
+
+  /**
+   * Returns a view of {@code iterable} that skips its first
+   * {@code numberToSkip} elements. If {@code iterable} contains fewer than
+   * {@code numberToSkip} elements, the returned iterable skips all of its
+   * elements.
+   *
+   * <p>Modifications to the underlying {@link Iterable} before a call to
+   * {@code iterator()} are reflected in the returned iterator. That is, the
+   * iterator skips the first {@code numberToSkip} elements that exist when the
+   * {@code Iterator} is created, not when {@code skip()} is called.
+   *
+   * <p>The returned iterable's iterator supports {@code remove()} if the
+   * iterator of the underlying iterable supports it. Note that it is
+   * <i>not</i> possible to delete the last skipped element by immediately
+   * calling {@code remove()} on that iterator, as the {@code Iterator}
+   * contract states that a call to {@code remove()} before a call to
+   * {@code next()} will throw an {@link IllegalStateException}.
+   *
+   * @since 3.0
+   */
+  public static <T> Iterable<T> skip(final Iterable<T> iterable,
+      final int numberToSkip) {
+    checkNotNull(iterable);
+    checkArgument(numberToSkip >= 0, "number to skip cannot be negative");
+
+    if (iterable instanceof List) {
+      final List<T> list = (List<T>) iterable;
+      return new IterableWithToString<T>() {
+        @Override
+        public Iterator<T> iterator() {
+          // TODO(kevinb): Support a concurrently modified collection?
+          return (numberToSkip >= list.size())
+              ? Iterators.<T>emptyIterator()
+              : list.subList(numberToSkip, list.size()).iterator();
+        }
+      };
+    }
+
+    return new IterableWithToString<T>() {
+      @Override
+      public Iterator<T> iterator() {
+        final Iterator<T> iterator = iterable.iterator();
+
+        Iterators.skip(iterator, numberToSkip);
+
+        /*
+         * We can't just return the iterator because an immediate call to its
+         * remove() method would remove one of the skipped elements instead of
+         * throwing an IllegalStateException.
+         */
+        return new Iterator<T>() {
+          boolean atStart = true;
+
+          @Override
+          public boolean hasNext() {
+            return iterator.hasNext();
+          }
+
+          @Override
+          public T next() {
+            if (!hasNext()) {
+              throw new NoSuchElementException();
+            }
+
+            try {
+              return iterator.next();
+            } finally {
+              atStart = false;
+            }
+          }
+
+          @Override
+          public void remove() {
+            if (atStart) {
+              throw new IllegalStateException();
+            }
+            iterator.remove();
+          }
+        };
+      }
+    };
+  }
+
+  /**
+   * Creates an iterable with the first {@code limitSize} elements of the given
+   * iterable. If the original iterable does not contain that many elements, the
+   * returned iterator will have the same behavior as the original iterable. The
+   * returned iterable's iterator supports {@code remove()} if the original
+   * iterator does.
+   *
+   * @param iterable the iterable to limit
+   * @param limitSize the maximum number of elements in the returned iterator
+   * @throws IllegalArgumentException if {@code limitSize} is negative
+   * @since 3.0
+   */
+  public static <T> Iterable<T> limit(
+      final Iterable<T> iterable, final int limitSize) {
+    checkNotNull(iterable);
+    checkArgument(limitSize >= 0, "limit is negative");
+    return new IterableWithToString<T>() {
+      @Override
+      public Iterator<T> iterator() {
+        return Iterators.limit(iterable.iterator(), limitSize);
+      }
+    };
+  }
+
+  /**
+   * Returns a view of the supplied iterable that wraps each generated
+   * {@link Iterator} through {@link Iterators#consumingIterator(Iterator)}.
+   *
+   * <p>Note: If {@code iterable} is a {@link Queue}, the returned iterable will
+   * get entries from {@link Queue#remove()} since {@link Queue}'s iteration
+   * order is undefined.  Calling {@link Iterator#hasNext()} on a generated
+   * iterator from the returned iterable may cause an item to be immediately
+   * dequeued for return on a subsequent call to {@link Iterator#next()}.
+   *
+   * @param iterable the iterable to wrap
+   * @return a view of the supplied iterable that wraps each generated iterator
+   *     through {@link Iterators#consumingIterator(Iterator)}; for queues,
+   *     an iterable that generates iterators that return and consume the
+   *     queue's elements in queue order
+   *
+   * @see Iterators#consumingIterator(Iterator)
+   * @since 2.0
+   */
+  public static <T> Iterable<T> consumingIterable(final Iterable<T> iterable) {
+    if (iterable instanceof Queue) {
+      return new Iterable<T>() {
+        @Override
+        public Iterator<T> iterator() {
+          return new ConsumingQueueIterator<T>((Queue<T>) iterable);
+        }
+      };
+    }
+
+    checkNotNull(iterable);
+
+    return new Iterable<T>() {
+      @Override
+      public Iterator<T> iterator() {
+        return Iterators.consumingIterator(iterable.iterator());
+      }
+    };
+  }
+
+  private static class ConsumingQueueIterator<T> extends AbstractIterator<T> {
+    private final Queue<T> queue;
+
+    private ConsumingQueueIterator(Queue<T> queue) {
+      this.queue = queue;
+    }
+
+    @Override public T computeNext() {
+      try {
+        return queue.remove();
+      } catch (NoSuchElementException e) {
+        return endOfData();
+      }
+    }
+  }
+
+  // Methods only in Iterables, not in Iterators
+
+  /**
+   * Adapts a list to an iterable with reversed iteration order. It is
+   * especially useful in foreach-style loops: <pre>   {@code
+   *
+   *   List<String> mylist = ...
+   *   for (String str : Iterables.reverse(mylist)) {
+   *     ...
+   *   }}</pre>
+   *
+   * There is no corresponding method in {@link Iterators}, since {@link
+   * Iterable#iterator} can simply be invoked on the result of calling this
+   * method.
+   *
+   * @return an iterable with the same elements as the list, in reverse
+   *
+   * @deprecated use {@link Lists#reverse(List)} or {@link
+   *     ImmutableList#reverse()}. <b>This method is scheduled for deletion in
+   *     July 2012.</b>
+   */
+  @Deprecated
+  public static <T> Iterable<T> reverse(final List<T> list) {
+    return Lists.reverse(list);
+  }
+
+  /**
+   * Determines if the given iterable contains no elements.
+   *
+   * <p>There is no precise {@link Iterator} equivalent to this method, since
+   * one can only ask an iterator whether it has any elements <i>remaining</i>
+   * (which one does using {@link Iterator#hasNext}).
+   *
+   * @return {@code true} if the iterable contains no elements
+   */
+  public static boolean isEmpty(Iterable<?> iterable) {
+    if (iterable instanceof Collection) {
+      return ((Collection<?>) iterable).isEmpty();
+    }
+    return !iterable.iterator().hasNext();
+  }
+
+  // Non-public
+
+  /**
+   * Removes the specified element from the specified iterable.
+   *
+   * <p>This method iterates over the iterable, checking each element returned
+   * by the iterator in turn to see if it equals the object {@code o}. If they
+   * are equal, it is removed from the iterable with the iterator's
+   * {@code remove} method. At most one element is removed, even if the iterable
+   * contains multiple members that equal {@code o}.
+   *
+   * <p><b>Warning:</b> Do not use this method for a collection, such as a
+   * {@link HashSet}, that has a fast {@code remove} method.
+   *
+   * @param iterable the iterable from which to remove
+   * @param o an element to remove from the collection
+   * @return {@code true} if the iterable changed as a result
+   * @throws UnsupportedOperationException if the iterator does not support the
+   *     {@code remove} method and the iterable contains the object
+   */
+  static boolean remove(Iterable<?> iterable, @Nullable Object o) {
+    Iterator<?> i = iterable.iterator();
+    while (i.hasNext()) {
+      if (Objects.equal(i.next(), o)) {
+        i.remove();
+        return true;
+      }
+    }
+    return false;
+  }
+
+  abstract static class IterableWithToString<E> implements Iterable<E> {
+    @Override public String toString() {
+      return Iterables.toString(this);
+    }
+  }
+
+  /**
+   * Returns an iterable over the merged contents of all given
+   * {@code iterables}. Equivalent entries will not be de-duplicated.
+   *
+   * <p>Callers must ensure that the source {@code iterables} are in
+   * non-descending order as this method does not sort its input.
+   *
+   * <p>For any equivalent elements across all {@code iterables}, it is
+   * undefined which element is returned first.
+   *
+   * @since 11.0
+   */
+  @Beta
+  public static <T> Iterable<T> mergeSorted(
+      final Iterable<? extends Iterable<? extends T>> iterables,
+      final Comparator<? super T> comparator) {
+    checkNotNull(iterables, "iterables");
+    checkNotNull(comparator, "comparator");
+    Iterable<T> iterable = new Iterable<T>() {
+      @Override
+      public Iterator<T> iterator() {
+        return Iterators.mergeSorted(
+            Iterables.transform(iterables, Iterables.<T>toIterator()),
+            comparator);
+      }
+    };
+    return new UnmodifiableIterable<T>(iterable);
+  }
+
+  // TODO(user): Is this the best place for this? Move to fluent functions?
+  // Useful as a public method?
+  private static <T> Function<Iterable<? extends T>, Iterator<? extends T>>
+      toIterator() {
+    return new Function<Iterable<? extends T>, Iterator<? extends T>>() {
+      @Override
+      public Iterator<? extends T> apply(Iterable<? extends T> iterable) {
+        return iterable.iterator();
+      }
+    };
+  }
+}
diff --git a/guava/src/com/google/common/collect/Iterators.java b/guava/src/com/google/common/collect/Iterators.java
new file mode 100644
index 0000000..847d1dd
--- /dev/null
+++ b/guava/src/com/google/common/collect/Iterators.java
@@ -0,0 +1,1329 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkState;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.base.Function;
+import com.google.common.base.Objects;
+import com.google.common.base.Optional;
+import com.google.common.base.Preconditions;
+import com.google.common.base.Predicate;
+import com.google.common.base.Predicates;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.List;
+import java.util.NoSuchElementException;
+import java.util.PriorityQueue;
+import java.util.Queue;
+
+import javax.annotation.Nullable;
+
+/**
+ * This class contains static utility methods that operate on or return objects
+ * of type {@link Iterator}. Except as noted, each method has a corresponding
+ * {@link Iterable}-based method in the {@link Iterables} class.
+ *
+ * <p><i>Performance notes:</i> Unless otherwise noted, all of the iterators
+ * produced in this class are <i>lazy</i>, which means that they only advance
+ * the backing iteration when absolutely necessary.
+ *
+ * @author Kevin Bourrillion
+ * @author Jared Levy
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible(emulated = true)
+public final class Iterators {
+  private Iterators() {}
+
+  static final UnmodifiableIterator<Object> EMPTY_ITERATOR
+      = new UnmodifiableIterator<Object>() {
+        @Override
+        public boolean hasNext() {
+          return false;
+        }
+        @Override
+        public Object next() {
+          throw new NoSuchElementException();
+        }
+      };
+
+  /**
+   * Returns the empty iterator.
+   *
+   * <p>The {@link Iterable} equivalent of this method is {@link
+   * ImmutableSet#of()}.
+   */
+  // Casting to any type is safe since there are no actual elements.
+  @SuppressWarnings("unchecked")
+  public static <T> UnmodifiableIterator<T> emptyIterator() {
+    return (UnmodifiableIterator<T>) EMPTY_ITERATOR;
+  }
+
+  private static final Iterator<Object> EMPTY_MODIFIABLE_ITERATOR =
+      new Iterator<Object>() {
+        @Override public boolean hasNext() {
+          return false;
+        }
+
+        @Override public Object next() {
+          throw new NoSuchElementException();
+        }
+
+        @Override public void remove() {
+          throw new IllegalStateException();
+        }
+      };
+
+  /**
+   * Returns the empty {@code Iterator} that throws
+   * {@link IllegalStateException} instead of
+   * {@link UnsupportedOperationException} on a call to
+   * {@link Iterator#remove()}.
+   */
+  // Casting to any type is safe since there are no actual elements.
+  @SuppressWarnings("unchecked")
+  static <T> Iterator<T> emptyModifiableIterator() {
+    return (Iterator<T>) EMPTY_MODIFIABLE_ITERATOR;
+  }
+
+  /** Returns an unmodifiable view of {@code iterator}. */
+  public static <T> UnmodifiableIterator<T> unmodifiableIterator(
+      final Iterator<T> iterator) {
+    checkNotNull(iterator);
+    if (iterator instanceof UnmodifiableIterator) {
+      return (UnmodifiableIterator<T>) iterator;
+    }
+    return new UnmodifiableIterator<T>() {
+      @Override
+      public boolean hasNext() {
+        return iterator.hasNext();
+      }
+      @Override
+      public T next() {
+        return iterator.next();
+      }
+    };
+  }
+
+  /**
+   * Simply returns its argument.
+   *
+   * @deprecated no need to use this
+   * @since 10.0
+   */
+  @Deprecated public static <T> UnmodifiableIterator<T> unmodifiableIterator(
+      UnmodifiableIterator<T> iterator) {
+    return checkNotNull(iterator);
+  }
+
+  /**
+   * Returns the number of elements remaining in {@code iterator}. The iterator
+   * will be left exhausted: its {@code hasNext()} method will return
+   * {@code false}.
+   */
+  public static int size(Iterator<?> iterator) {
+    int count = 0;
+    while (iterator.hasNext()) {
+      iterator.next();
+      count++;
+    }
+    return count;
+  }
+
+  /**
+   * Returns {@code true} if {@code iterator} contains {@code element}.
+   */
+  public static boolean contains(Iterator<?> iterator, @Nullable Object element)
+  {
+    if (element == null) {
+      while (iterator.hasNext()) {
+        if (iterator.next() == null) {
+          return true;
+        }
+      }
+    } else {
+      while (iterator.hasNext()) {
+        if (element.equals(iterator.next())) {
+          return true;
+        }
+      }
+    }
+    return false;
+  }
+
+  /**
+   * Traverses an iterator and removes every element that belongs to the
+   * provided collection. The iterator will be left exhausted: its
+   * {@code hasNext()} method will return {@code false}.
+   *
+   * @param removeFrom the iterator to (potentially) remove elements from
+   * @param elementsToRemove the elements to remove
+   * @return {@code true} if any element was removed from {@code iterator}
+   */
+  public static boolean removeAll(
+      Iterator<?> removeFrom, Collection<?> elementsToRemove) {
+    checkNotNull(elementsToRemove);
+    boolean modified = false;
+    while (removeFrom.hasNext()) {
+      if (elementsToRemove.contains(removeFrom.next())) {
+        removeFrom.remove();
+        modified = true;
+      }
+    }
+    return modified;
+  }
+
+  /**
+   * Removes every element that satisfies the provided predicate from the
+   * iterator. The iterator will be left exhausted: its {@code hasNext()}
+   * method will return {@code false}.
+   *
+   * @param removeFrom the iterator to (potentially) remove elements from
+   * @param predicate a predicate that determines whether an element should
+   *     be removed
+   * @return {@code true} if any elements were removed from the iterator
+   * @since 2.0
+   */
+  public static <T> boolean removeIf(
+      Iterator<T> removeFrom, Predicate<? super T> predicate) {
+    checkNotNull(predicate);
+    boolean modified = false;
+    while (removeFrom.hasNext()) {
+      if (predicate.apply(removeFrom.next())) {
+        removeFrom.remove();
+        modified = true;
+      }
+    }
+    return modified;
+  }
+
+  /**
+   * Traverses an iterator and removes every element that does not belong to the
+   * provided collection. The iterator will be left exhausted: its
+   * {@code hasNext()} method will return {@code false}.
+   *
+   * @param removeFrom the iterator to (potentially) remove elements from
+   * @param elementsToRetain the elements to retain
+   * @return {@code true} if any element was removed from {@code iterator}
+   */
+  public static boolean retainAll(
+      Iterator<?> removeFrom, Collection<?> elementsToRetain) {
+    checkNotNull(elementsToRetain);
+    boolean modified = false;
+    while (removeFrom.hasNext()) {
+      if (!elementsToRetain.contains(removeFrom.next())) {
+        removeFrom.remove();
+        modified = true;
+      }
+    }
+    return modified;
+  }
+
+  /**
+   * Determines whether two iterators contain equal elements in the same order.
+   * More specifically, this method returns {@code true} if {@code iterator1}
+   * and {@code iterator2} contain the same number of elements and every element
+   * of {@code iterator1} is equal to the corresponding element of
+   * {@code iterator2}.
+   *
+   * <p>Note that this will modify the supplied iterators, since they will have
+   * been advanced some number of elements forward.
+   */
+  public static boolean elementsEqual(
+      Iterator<?> iterator1, Iterator<?> iterator2) {
+    while (iterator1.hasNext()) {
+      if (!iterator2.hasNext()) {
+        return false;
+      }
+      Object o1 = iterator1.next();
+      Object o2 = iterator2.next();
+      if (!Objects.equal(o1, o2)) {
+        return false;
+      }
+    }
+    return !iterator2.hasNext();
+  }
+
+  /**
+   * Returns a string representation of {@code iterator}, with the format
+   * {@code [e1, e2, ..., en]}. The iterator will be left exhausted: its
+   * {@code hasNext()} method will return {@code false}.
+   */
+  public static String toString(Iterator<?> iterator) {
+    if (!iterator.hasNext()) {
+      return "[]";
+    }
+    StringBuilder builder = new StringBuilder();
+    builder.append('[').append(iterator.next());
+    while (iterator.hasNext()) {
+      builder.append(", ").append(iterator.next());
+    }
+    return builder.append(']').toString();
+  }
+
+  /**
+   * Returns the single element contained in {@code iterator}.
+   *
+   * @throws NoSuchElementException if the iterator is empty
+   * @throws IllegalArgumentException if the iterator contains multiple
+   *     elements.  The state of the iterator is unspecified.
+   */
+  public static <T> T getOnlyElement(Iterator<T> iterator) {
+    T first = iterator.next();
+    if (!iterator.hasNext()) {
+      return first;
+    }
+
+    StringBuilder sb = new StringBuilder();
+    sb.append("expected one element but was: <" + first);
+    for (int i = 0; i < 4 && iterator.hasNext(); i++) {
+      sb.append(", " + iterator.next());
+    }
+    if (iterator.hasNext()) {
+      sb.append(", ...");
+    }
+    sb.append('>');
+
+    throw new IllegalArgumentException(sb.toString());
+  }
+
+  /**
+   * Returns the single element contained in {@code iterator}, or {@code
+   * defaultValue} if the iterator is empty.
+   *
+   * @throws IllegalArgumentException if the iterator contains multiple
+   *     elements.  The state of the iterator is unspecified.
+   */
+  public static <T> T getOnlyElement(
+      Iterator<T> iterator, @Nullable T defaultValue) {
+    return iterator.hasNext() ? getOnlyElement(iterator) : defaultValue;
+  }
+
+  /**
+   * Copies an iterator's elements into an array. The iterator will be left
+   * exhausted: its {@code hasNext()} method will return {@code false}.
+   *
+   * @param iterator the iterator to copy
+   * @param type the type of the elements
+   * @return a newly-allocated array into which all the elements of the iterator
+   *         have been copied
+   */
+  @GwtIncompatible("Array.newInstance(Class, int)")
+  public static <T> T[] toArray(
+      Iterator<? extends T> iterator, Class<T> type) {
+    List<T> list = Lists.newArrayList(iterator);
+    return Iterables.toArray(list, type);
+  }
+
+  /**
+   * Adds all elements in {@code iterator} to {@code collection}. The iterator
+   * will be left exhausted: its {@code hasNext()} method will return
+   * {@code false}.
+   *
+   * @return {@code true} if {@code collection} was modified as a result of this
+   *         operation
+   */
+  public static <T> boolean addAll(
+      Collection<T> addTo, Iterator<? extends T> iterator) {
+    checkNotNull(addTo);
+    boolean wasModified = false;
+    while (iterator.hasNext()) {
+      wasModified |= addTo.add(iterator.next());
+    }
+    return wasModified;
+  }
+
+  /**
+   * Returns the number of elements in the specified iterator that equal the
+   * specified object. The iterator will be left exhausted: its
+   * {@code hasNext()} method will return {@code false}.
+   *
+   * @see Collections#frequency
+   */
+  public static int frequency(Iterator<?> iterator, @Nullable Object element) {
+    int result = 0;
+    if (element == null) {
+      while (iterator.hasNext()) {
+        if (iterator.next() == null) {
+          result++;
+        }
+      }
+    } else {
+      while (iterator.hasNext()) {
+        if (element.equals(iterator.next())) {
+          result++;
+        }
+      }
+    }
+    return result;
+  }
+
+  /**
+   * Returns an iterator that cycles indefinitely over the elements of {@code
+   * iterable}.
+   *
+   * <p>The returned iterator supports {@code remove()} if the provided iterator
+   * does. After {@code remove()} is called, subsequent cycles omit the removed
+   * element, which is no longer in {@code iterable}. The iterator's
+   * {@code hasNext()} method returns {@code true} until {@code iterable} is
+   * empty.
+   *
+   * <p><b>Warning:</b> Typical uses of the resulting iterator may produce an
+   * infinite loop. You should use an explicit {@code break} or be certain that
+   * you will eventually remove all the elements.
+   */
+  public static <T> Iterator<T> cycle(final Iterable<T> iterable) {
+    checkNotNull(iterable);
+    return new Iterator<T>() {
+      Iterator<T> iterator = emptyIterator();
+      Iterator<T> removeFrom;
+
+      @Override
+      public boolean hasNext() {
+        if (!iterator.hasNext()) {
+          iterator = iterable.iterator();
+        }
+        return iterator.hasNext();
+      }
+      @Override
+      public T next() {
+        if (!hasNext()) {
+          throw new NoSuchElementException();
+        }
+        removeFrom = iterator;
+        return iterator.next();
+      }
+      @Override
+      public void remove() {
+        checkState(removeFrom != null,
+            "no calls to next() since last call to remove()");
+        removeFrom.remove();
+        removeFrom = null;
+      }
+    };
+  }
+
+  /**
+   * Returns an iterator that cycles indefinitely over the provided elements.
+   *
+   * <p>The returned iterator supports {@code remove()} if the provided iterator
+   * does. After {@code remove()} is called, subsequent cycles omit the removed
+   * element, but {@code elements} does not change. The iterator's
+   * {@code hasNext()} method returns {@code true} until all of the original
+   * elements have been removed.
+   *
+   * <p><b>Warning:</b> Typical uses of the resulting iterator may produce an
+   * infinite loop. You should use an explicit {@code break} or be certain that
+   * you will eventually remove all the elements.
+   */
+  public static <T> Iterator<T> cycle(T... elements) {
+    return cycle(Lists.newArrayList(elements));
+  }
+
+  /**
+   * Combines two iterators into a single iterator. The returned iterator
+   * iterates across the elements in {@code a}, followed by the elements in
+   * {@code b}. The source iterators are not polled until necessary.
+   *
+   * <p>The returned iterator supports {@code remove()} when the corresponding
+   * input iterator supports it.
+   */
+  @SuppressWarnings("unchecked")
+  public static <T> Iterator<T> concat(Iterator<? extends T> a,
+      Iterator<? extends T> b) {
+    checkNotNull(a);
+    checkNotNull(b);
+    return concat(Arrays.asList(a, b).iterator());
+  }
+
+  /**
+   * Combines three iterators into a single iterator. The returned iterator
+   * iterates across the elements in {@code a}, followed by the elements in
+   * {@code b}, followed by the elements in {@code c}. The source iterators
+   * are not polled until necessary.
+   *
+   * <p>The returned iterator supports {@code remove()} when the corresponding
+   * input iterator supports it.
+   */
+  @SuppressWarnings("unchecked")
+  public static <T> Iterator<T> concat(Iterator<? extends T> a,
+      Iterator<? extends T> b, Iterator<? extends T> c) {
+    checkNotNull(a);
+    checkNotNull(b);
+    checkNotNull(c);
+    return concat(Arrays.asList(a, b, c).iterator());
+  }
+
+  /**
+   * Combines four iterators into a single iterator. The returned iterator
+   * iterates across the elements in {@code a}, followed by the elements in
+   * {@code b}, followed by the elements in {@code c}, followed by the elements
+   * in {@code d}. The source iterators are not polled until necessary.
+   *
+   * <p>The returned iterator supports {@code remove()} when the corresponding
+   * input iterator supports it.
+   */
+  @SuppressWarnings("unchecked")
+  public static <T> Iterator<T> concat(Iterator<? extends T> a,
+      Iterator<? extends T> b, Iterator<? extends T> c,
+      Iterator<? extends T> d) {
+    checkNotNull(a);
+    checkNotNull(b);
+    checkNotNull(c);
+    checkNotNull(d);
+    return concat(Arrays.asList(a, b, c, d).iterator());
+  }
+
+  /**
+   * Combines multiple iterators into a single iterator. The returned iterator
+   * iterates across the elements of each iterator in {@code inputs}. The input
+   * iterators are not polled until necessary.
+   *
+   * <p>The returned iterator supports {@code remove()} when the corresponding
+   * input iterator supports it.
+   *
+   * @throws NullPointerException if any of the provided iterators is null
+   */
+  public static <T> Iterator<T> concat(Iterator<? extends T>... inputs) {
+    return concat(ImmutableList.copyOf(inputs).iterator());
+  }
+
+  /**
+   * Combines multiple iterators into a single iterator. The returned iterator
+   * iterates across the elements of each iterator in {@code inputs}. The input
+   * iterators are not polled until necessary.
+   *
+   * <p>The returned iterator supports {@code remove()} when the corresponding
+   * input iterator supports it. The methods of the returned iterator may throw
+   * {@code NullPointerException} if any of the input iterators is null.
+   */
+  public static <T> Iterator<T> concat(
+      final Iterator<? extends Iterator<? extends T>> inputs) {
+    checkNotNull(inputs);
+    return new Iterator<T>() {
+      Iterator<? extends T> current = emptyIterator();
+      Iterator<? extends T> removeFrom;
+
+      @Override
+      public boolean hasNext() {
+        // http://code.google.com/p/google-collections/issues/detail?id=151
+        // current.hasNext() might be relatively expensive, worth minimizing.
+        boolean currentHasNext;
+        // checkNotNull eager for GWT
+        // note: it must be here & not where 'current' is assigned,
+        // because otherwise we'll have called inputs.next() before throwing
+        // the first NPE, and the next time around we'll call inputs.next()
+        // again, incorrectly moving beyond the error.
+        while (!(currentHasNext = checkNotNull(current).hasNext())
+            && inputs.hasNext()) {
+          current = inputs.next();
+        }
+        return currentHasNext;
+      }
+      @Override
+      public T next() {
+        if (!hasNext()) {
+          throw new NoSuchElementException();
+        }
+        removeFrom = current;
+        return current.next();
+      }
+      @Override
+      public void remove() {
+        checkState(removeFrom != null,
+            "no calls to next() since last call to remove()");
+        removeFrom.remove();
+        removeFrom = null;
+      }
+    };
+  }
+
+  /**
+   * Divides an iterator into unmodifiable sublists of the given size (the final
+   * list may be smaller). For example, partitioning an iterator containing
+   * {@code [a, b, c, d, e]} with a partition size of 3 yields {@code
+   * [[a, b, c], [d, e]]} -- an outer iterator containing two inner lists of
+   * three and two elements, all in the original order.
+   *
+   * <p>The returned lists implement {@link java.util.RandomAccess}.
+   *
+   * @param iterator the iterator to return a partitioned view of
+   * @param size the desired size of each partition (the last may be smaller)
+   * @return an iterator of immutable lists containing the elements of {@code
+   *     iterator} divided into partitions
+   * @throws IllegalArgumentException if {@code size} is nonpositive
+   */
+  public static <T> UnmodifiableIterator<List<T>> partition(
+      Iterator<T> iterator, int size) {
+    return partitionImpl(iterator, size, false);
+  }
+
+  /**
+   * Divides an iterator into unmodifiable sublists of the given size, padding
+   * the final iterator with null values if necessary. For example, partitioning
+   * an iterator containing {@code [a, b, c, d, e]} with a partition size of 3
+   * yields {@code [[a, b, c], [d, e, null]]} -- an outer iterator containing
+   * two inner lists of three elements each, all in the original order.
+   *
+   * <p>The returned lists implement {@link java.util.RandomAccess}.
+   *
+   * @param iterator the iterator to return a partitioned view of
+   * @param size the desired size of each partition
+   * @return an iterator of immutable lists containing the elements of {@code
+   *     iterator} divided into partitions (the final iterable may have
+   *     trailing null elements)
+   * @throws IllegalArgumentException if {@code size} is nonpositive
+   */
+  public static <T> UnmodifiableIterator<List<T>> paddedPartition(
+      Iterator<T> iterator, int size) {
+    return partitionImpl(iterator, size, true);
+  }
+
+  private static <T> UnmodifiableIterator<List<T>> partitionImpl(
+      final Iterator<T> iterator, final int size, final boolean pad) {
+    checkNotNull(iterator);
+    checkArgument(size > 0);
+    return new UnmodifiableIterator<List<T>>() {
+      @Override
+      public boolean hasNext() {
+        return iterator.hasNext();
+      }
+      @Override
+      public List<T> next() {
+        if (!hasNext()) {
+          throw new NoSuchElementException();
+        }
+        Object[] array = new Object[size];
+        int count = 0;
+        for (; count < size && iterator.hasNext(); count++) {
+          array[count] = iterator.next();
+        }
+        for (int i = count; i < size; i++) {
+          array[i] = null; // for GWT
+        }
+
+        @SuppressWarnings("unchecked") // we only put Ts in it
+        List<T> list = Collections.unmodifiableList(
+            (List<T>) Arrays.asList(array));
+        return (pad || count == size) ? list : list.subList(0, count);
+      }
+    };
+  }
+
+  /**
+   * Returns the elements of {@code unfiltered} that satisfy a predicate.
+   */
+  public static <T> UnmodifiableIterator<T> filter(
+      final Iterator<T> unfiltered, final Predicate<? super T> predicate) {
+    checkNotNull(unfiltered);
+    checkNotNull(predicate);
+    return new AbstractIterator<T>() {
+      @Override protected T computeNext() {
+        while (unfiltered.hasNext()) {
+          T element = unfiltered.next();
+          if (predicate.apply(element)) {
+            return element;
+          }
+        }
+        return endOfData();
+      }
+    };
+  }
+
+  /**
+   * Returns all instances of class {@code type} in {@code unfiltered}. The
+   * returned iterator has elements whose class is {@code type} or a subclass of
+   * {@code type}.
+   *
+   * @param unfiltered an iterator containing objects of any type
+   * @param type the type of elements desired
+   * @return an unmodifiable iterator containing all elements of the original
+   *     iterator that were of the requested type
+   */
+  @SuppressWarnings("unchecked") // can cast to <T> because non-Ts are removed
+  @GwtIncompatible("Class.isInstance")
+  public static <T> UnmodifiableIterator<T> filter(
+      Iterator<?> unfiltered, Class<T> type) {
+    return (UnmodifiableIterator<T>)
+        filter(unfiltered, Predicates.instanceOf(type));
+  }
+
+  /**
+   * Returns {@code true} if one or more elements returned by {@code iterator}
+   * satisfy the given predicate.
+   */
+  public static <T> boolean any(
+      Iterator<T> iterator, Predicate<? super T> predicate) {
+    checkNotNull(predicate);
+    while (iterator.hasNext()) {
+      T element = iterator.next();
+      if (predicate.apply(element)) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  /**
+   * Returns {@code true} if every element returned by {@code iterator}
+   * satisfies the given predicate. If {@code iterator} is empty, {@code true}
+   * is returned.
+   */
+  public static <T> boolean all(
+      Iterator<T> iterator, Predicate<? super T> predicate) {
+    checkNotNull(predicate);
+    while (iterator.hasNext()) {
+      T element = iterator.next();
+      if (!predicate.apply(element)) {
+        return false;
+      }
+    }
+    return true;
+  }
+
+  /**
+   * Returns the first element in {@code iterator} that satisfies the given
+   * predicate; use this method only when such an element is known to exist. If
+   * no such element is found, the iterator will be left exhausted: its {@code
+   * hasNext()} method will return {@code false}. If it is possible that
+   * <i>no</i> element will match, use {@link #tryFind)} or {@link
+   * #find(Iterator, Predicate, T)} instead.
+   *
+   * @throws NoSuchElementException if no element in {@code iterator} matches
+   *     the given predicate
+   */
+  public static <T> T find(
+      Iterator<T> iterator, Predicate<? super T> predicate) {
+    return filter(iterator, predicate).next();
+  }
+
+  /**
+   * Returns the first element in {@code iterator} that satisfies the given
+   * predicate. If no such element is found, {@code defaultValue} will be
+   * returned from this method and the iterator will be left exhausted: its
+   * {@code hasNext()} method will return {@code false}. Note that this can
+   * usually be handled more naturally using {@code
+   * tryFind(iterator, predicate).or(defaultValue)}.
+   *
+   * @since 7.0
+   */
+  public static <T> T find(Iterator<T> iterator, Predicate<? super T> predicate,
+      @Nullable T defaultValue) {
+    UnmodifiableIterator<T> filteredIterator = filter(iterator, predicate);
+    return filteredIterator.hasNext() ? filteredIterator.next() : defaultValue;
+  }
+
+  /**
+   * Returns an {@link Optional} containing the first element in {@code
+   * iterator} that satisfies the given predicate, if such an element exists. If
+   * no such element is found, an empty {@link Optional} will be returned from
+   * this method and the the iterator will be left exhausted: its {@code
+   * hasNext()} method will return {@code false}.
+   *
+   * <p><b>Warning:</b> avoid using a {@code predicate} that matches {@code
+   * null}. If {@code null} is matched in {@code iterator}, a
+   * NullPointerException will be thrown.
+   *
+   * @since 11.0
+   */
+  public static <T> Optional<T> tryFind(
+      Iterator<T> iterator, Predicate<? super T> predicate) {
+    UnmodifiableIterator<T> filteredIterator = filter(iterator, predicate);
+    return filteredIterator.hasNext()
+        ? Optional.of(filteredIterator.next())
+        : Optional.<T>absent();
+  }
+
+  /**
+   * Returns the index in {@code iterator} of the first element that satisfies
+   * the provided {@code predicate}, or {@code -1} if the Iterator has no such
+   * elements.
+   *
+   * <p>More formally, returns the lowest index {@code i} such that
+   * {@code predicate.apply(Iterators.get(iterator, i))} returns {@code true},
+   * or {@code -1} if there is no such index.
+   *
+   * <p>If -1 is returned, the iterator will be left exhausted: its
+   * {@code hasNext()} method will return {@code false}.  Otherwise,
+   * the iterator will be set to the element which satisfies the
+   * {@code predicate}.
+   *
+   * @since 2.0
+   */
+  public static <T> int indexOf(
+      Iterator<T> iterator, Predicate<? super T> predicate) {
+    checkNotNull(predicate, "predicate");
+    int i = 0;
+    while (iterator.hasNext()) {
+      T current = iterator.next();
+      if (predicate.apply(current)) {
+        return i;
+      }
+      i++;
+    }
+    return -1;
+  }
+
+  /**
+   * Returns an iterator that applies {@code function} to each element of {@code
+   * fromIterator}.
+   *
+   * <p>The returned iterator supports {@code remove()} if the provided iterator
+   * does. After a successful {@code remove()} call, {@code fromIterator} no
+   * longer contains the corresponding element.
+   */
+  public static <F, T> Iterator<T> transform(final Iterator<F> fromIterator,
+      final Function<? super F, ? extends T> function) {
+    checkNotNull(fromIterator);
+    checkNotNull(function);
+    return new Iterator<T>() {
+      @Override
+      public boolean hasNext() {
+        return fromIterator.hasNext();
+      }
+      @Override
+      public T next() {
+        F from = fromIterator.next();
+        return function.apply(from);
+      }
+      @Override
+      public void remove() {
+        fromIterator.remove();
+      }
+    };
+  }
+
+  /**
+   * Advances {@code iterator} {@code position + 1} times, returning the
+   * element at the {@code position}th position.
+   *
+   * @param position position of the element to return
+   * @return the element at the specified position in {@code iterator}
+   * @throws IndexOutOfBoundsException if {@code position} is negative or
+   *     greater than or equal to the number of elements remaining in
+   *     {@code iterator}
+   */
+  public static <T> T get(Iterator<T> iterator, int position) {
+    checkNonnegative(position);
+
+    int skipped = 0;
+    while (iterator.hasNext()) {
+      T t = iterator.next();
+      if (skipped++ == position) {
+        return t;
+      }
+    }
+
+    throw new IndexOutOfBoundsException("position (" + position
+        + ") must be less than the number of elements that remained ("
+        + skipped + ")");
+  }
+
+  private static void checkNonnegative(int position) {
+    if (position < 0) {
+      throw new IndexOutOfBoundsException("position (" + position
+          + ") must not be negative");
+    }
+  }
+
+  /**
+   * Advances {@code iterator} {@code position + 1} times, returning the
+   * element at the {@code position}th position or {@code defaultValue}
+   * otherwise.
+   *
+   * @param position position of the element to return
+   * @param defaultValue the default value to return if the iterator is empty
+   *     or if {@code position} is greater than the number of elements
+   *     remaining in {@code iterator}
+   * @return the element at the specified position in {@code iterator} or
+   *     {@code defaultValue} if {@code iterator} produces fewer than
+   *     {@code position + 1} elements.
+   * @throws IndexOutOfBoundsException if {@code position} is negative
+   * @since 4.0
+   */
+  public static <T> T get(Iterator<T> iterator, int position,
+      @Nullable T defaultValue) {
+    checkNonnegative(position);
+
+    try {
+      return get(iterator, position);
+    } catch (IndexOutOfBoundsException e) {
+      return defaultValue;
+    }
+  }
+
+  /**
+   * Returns the next element in {@code iterator} or {@code defaultValue} if
+   * the iterator is empty.  The {@link Iterables} analog to this method is
+   * {@link Iterables#getFirst}.
+   *
+   * @param defaultValue the default value to return if the iterator is empty
+   * @return the next element of {@code iterator} or the default value
+   * @since 7.0
+   */
+  public static <T> T getNext(Iterator<T> iterator, @Nullable T defaultValue) {
+    return iterator.hasNext() ? iterator.next() : defaultValue;
+  }
+
+  /**
+   * Advances {@code iterator} to the end, returning the last element.
+   *
+   * @return the last element of {@code iterator}
+   * @throws NoSuchElementException if the iterator is empty
+   */
+  public static <T> T getLast(Iterator<T> iterator) {
+    while (true) {
+      T current = iterator.next();
+      if (!iterator.hasNext()) {
+        return current;
+      }
+    }
+  }
+
+  /**
+   * Advances {@code iterator} to the end, returning the last element or
+   * {@code defaultValue} if the iterator is empty.
+   *
+   * @param defaultValue the default value to return if the iterator is empty
+   * @return the last element of {@code iterator}
+   * @since 3.0
+   */
+  public static <T> T getLast(Iterator<T> iterator, @Nullable T defaultValue) {
+    return iterator.hasNext() ? getLast(iterator) : defaultValue;
+  }
+
+  /**
+   * Calls {@code next()} on {@code iterator}, either {@code numberToSkip} times
+   * or until {@code hasNext()} returns {@code false}, whichever comes first.
+   *
+   * @return the number of elements skipped
+   * @since 3.0
+   */
+  @Beta
+  public static <T> int skip(Iterator<T> iterator, int numberToSkip) {
+    checkNotNull(iterator);
+    checkArgument(numberToSkip >= 0, "number to skip cannot be negative");
+
+    int i;
+    for (i = 0; i < numberToSkip && iterator.hasNext(); i++) {
+      iterator.next();
+    }
+    return i;
+  }
+
+  /**
+   * Creates an iterator returning the first {@code limitSize} elements of the
+   * given iterator. If the original iterator does not contain that many
+   * elements, the returned iterator will have the same behavior as the original
+   * iterator. The returned iterator supports {@code remove()} if the original
+   * iterator does.
+   *
+   * @param iterator the iterator to limit
+   * @param limitSize the maximum number of elements in the returned iterator
+   * @throws IllegalArgumentException if {@code limitSize} is negative
+   * @since 3.0
+   */
+  public static <T> Iterator<T> limit(
+      final Iterator<T> iterator, final int limitSize) {
+    checkNotNull(iterator);
+    checkArgument(limitSize >= 0, "limit is negative");
+    return new Iterator<T>() {
+      private int count;
+
+      @Override
+      public boolean hasNext() {
+        return count < limitSize && iterator.hasNext();
+      }
+
+      @Override
+      public T next() {
+        if (!hasNext()) {
+          throw new NoSuchElementException();
+        }
+        count++;
+        return iterator.next();
+      }
+
+      @Override
+      public void remove() {
+        iterator.remove();
+      }
+    };
+  }
+
+  /**
+   * Returns a view of the supplied {@code iterator} that removes each element
+   * from the supplied {@code iterator} as it is returned.
+   *
+   * <p>The provided iterator must support {@link Iterator#remove()} or
+   * else the returned iterator will fail on the first call to {@code
+   * next}.
+   *
+   * @param iterator the iterator to remove and return elements from
+   * @return an iterator that removes and returns elements from the
+   *     supplied iterator
+   * @since 2.0
+   */
+  public static <T> Iterator<T> consumingIterator(final Iterator<T> iterator) {
+    checkNotNull(iterator);
+    return new UnmodifiableIterator<T>() {
+      @Override
+      public boolean hasNext() {
+        return iterator.hasNext();
+      }
+
+      @Override
+      public T next() {
+        T next = iterator.next();
+        iterator.remove();
+        return next;
+      }
+    };
+  }
+
+  // Methods only in Iterators, not in Iterables
+
+  /**
+   * Clears the iterator using its remove method.
+   */
+  static void clear(Iterator<?> iterator) {
+    checkNotNull(iterator);
+    while (iterator.hasNext()) {
+      iterator.next();
+      iterator.remove();
+    }
+  }
+
+  /**
+   * Returns an iterator containing the elements of {@code array} in order. The
+   * returned iterator is a view of the array; subsequent changes to the array
+   * will be reflected in the iterator.
+   *
+   * <p><b>Note:</b> It is often preferable to represent your data using a
+   * collection type, for example using {@link Arrays#asList(Object[])}, making
+   * this method unnecessary.
+   *
+   * <p>The {@code Iterable} equivalent of this method is either {@link
+   * Arrays#asList(Object[])}, {@link ImmutableList#copyOf(Object[])}},
+   * or {@link ImmutableList#of}.
+   */
+  public static <T> UnmodifiableIterator<T> forArray(final T... array) {
+    // TODO(kevinb): compare performance with Arrays.asList(array).iterator().
+    checkNotNull(array);  // eager for GWT.
+    return new AbstractIndexedListIterator<T>(array.length) {
+      @Override protected T get(int index) {
+        return array[index];
+      }
+    };
+  }
+
+  /**
+   * Returns an iterator containing the elements in the specified range of
+   * {@code array} in order. The returned iterator is a view of the array;
+   * subsequent changes to the array will be reflected in the iterator.
+   *
+   * <p>The {@code Iterable} equivalent of this method is {@code
+   * Arrays.asList(array).subList(offset, offset + length)}.
+   *
+   * @param array array to read elements out of
+   * @param offset index of first array element to retrieve
+   * @param length number of elements in iteration
+   * @throws IndexOutOfBoundsException if {@code offset} is negative, {@code
+   *     length} is negative, or {@code offset + length > array.length}
+   */
+  static <T> UnmodifiableIterator<T> forArray(
+      final T[] array, final int offset, int length) {
+    checkArgument(length >= 0);
+    int end = offset + length;
+
+    // Technically we should give a slightly more descriptive error on overflow
+    Preconditions.checkPositionIndexes(offset, end, array.length);
+
+    /*
+     * We can't use call the two-arg constructor with arguments (offset, end)
+     * because the returned Iterator is a ListIterator that may be moved back
+     * past the beginning of the iteration.
+     */
+    return new AbstractIndexedListIterator<T>(length) {
+      @Override protected T get(int index) {
+        return array[offset + index];
+      }
+    };
+  }
+
+  /**
+   * Returns an iterator containing only {@code value}.
+   *
+   * <p>The {@link Iterable} equivalent of this method is {@link
+   * Collections#singleton}.
+   */
+  public static <T> UnmodifiableIterator<T> singletonIterator(
+      @Nullable final T value) {
+    return new UnmodifiableIterator<T>() {
+      boolean done;
+      @Override
+      public boolean hasNext() {
+        return !done;
+      }
+      @Override
+      public T next() {
+        if (done) {
+          throw new NoSuchElementException();
+        }
+        done = true;
+        return value;
+      }
+    };
+  }
+
+  /**
+   * Adapts an {@code Enumeration} to the {@code Iterator} interface.
+   *
+   * <p>This method has no equivalent in {@link Iterables} because viewing an
+   * {@code Enumeration} as an {@code Iterable} is impossible. However, the
+   * contents can be <i>copied</i> into a collection using {@link
+   * Collections#list}.
+   */
+  public static <T> UnmodifiableIterator<T> forEnumeration(
+      final Enumeration<T> enumeration) {
+    checkNotNull(enumeration);
+    return new UnmodifiableIterator<T>() {
+      @Override
+      public boolean hasNext() {
+        return enumeration.hasMoreElements();
+      }
+      @Override
+      public T next() {
+        return enumeration.nextElement();
+      }
+    };
+  }
+
+  /**
+   * Adapts an {@code Iterator} to the {@code Enumeration} interface.
+   *
+   * <p>The {@code Iterable} equivalent of this method is either {@link
+   * Collections#enumeration} (if you have a {@link Collection}), or
+   * {@code Iterators.asEnumeration(collection.iterator())}.
+   */
+  public static <T> Enumeration<T> asEnumeration(final Iterator<T> iterator) {
+    checkNotNull(iterator);
+    return new Enumeration<T>() {
+      @Override
+      public boolean hasMoreElements() {
+        return iterator.hasNext();
+      }
+      @Override
+      public T nextElement() {
+        return iterator.next();
+      }
+    };
+  }
+
+  /**
+   * Implementation of PeekingIterator that avoids peeking unless necessary.
+   */
+  private static class PeekingImpl<E> implements PeekingIterator<E> {
+
+    private final Iterator<? extends E> iterator;
+    private boolean hasPeeked;
+    private E peekedElement;
+
+    public PeekingImpl(Iterator<? extends E> iterator) {
+      this.iterator = checkNotNull(iterator);
+    }
+
+    @Override
+    public boolean hasNext() {
+      return hasPeeked || iterator.hasNext();
+    }
+
+    @Override
+    public E next() {
+      if (!hasPeeked) {
+        return iterator.next();
+      }
+      E result = peekedElement;
+      hasPeeked = false;
+      peekedElement = null;
+      return result;
+    }
+
+    @Override
+    public void remove() {
+      checkState(!hasPeeked, "Can't remove after you've peeked at next");
+      iterator.remove();
+    }
+
+    @Override
+    public E peek() {
+      if (!hasPeeked) {
+        peekedElement = iterator.next();
+        hasPeeked = true;
+      }
+      return peekedElement;
+    }
+  }
+
+  /**
+   * Returns a {@code PeekingIterator} backed by the given iterator.
+   *
+   * <p>Calls to the {@code peek} method with no intervening calls to {@code
+   * next} do not affect the iteration, and hence return the same object each
+   * time. A subsequent call to {@code next} is guaranteed to return the same
+   * object again. For example: <pre>   {@code
+   *
+   *   PeekingIterator<String> peekingIterator =
+   *       Iterators.peekingIterator(Iterators.forArray("a", "b"));
+   *   String a1 = peekingIterator.peek(); // returns "a"
+   *   String a2 = peekingIterator.peek(); // also returns "a"
+   *   String a3 = peekingIterator.next(); // also returns "a"}</pre>
+   *
+   * Any structural changes to the underlying iteration (aside from those
+   * performed by the iterator's own {@link PeekingIterator#remove()} method)
+   * will leave the iterator in an undefined state.
+   *
+   * <p>The returned iterator does not support removal after peeking, as
+   * explained by {@link PeekingIterator#remove()}.
+   *
+   * <p>Note: If the given iterator is already a {@code PeekingIterator},
+   * it <i>might</i> be returned to the caller, although this is neither
+   * guaranteed to occur nor required to be consistent.  For example, this
+   * method <i>might</i> choose to pass through recognized implementations of
+   * {@code PeekingIterator} when the behavior of the implementation is
+   * known to meet the contract guaranteed by this method.
+   *
+   * <p>There is no {@link Iterable} equivalent to this method, so use this
+   * method to wrap each individual iterator as it is generated.
+   *
+   * @param iterator the backing iterator. The {@link PeekingIterator} assumes
+   *     ownership of this iterator, so users should cease making direct calls
+   *     to it after calling this method.
+   * @return a peeking iterator backed by that iterator. Apart from the
+   *     additional {@link PeekingIterator#peek()} method, this iterator behaves
+   *     exactly the same as {@code iterator}.
+   */
+  public static <T> PeekingIterator<T> peekingIterator(
+      Iterator<? extends T> iterator) {
+    if (iterator instanceof PeekingImpl) {
+      // Safe to cast <? extends T> to <T> because PeekingImpl only uses T
+      // covariantly (and cannot be subclassed to add non-covariant uses).
+      @SuppressWarnings("unchecked")
+      PeekingImpl<T> peeking = (PeekingImpl<T>) iterator;
+      return peeking;
+    }
+    return new PeekingImpl<T>(iterator);
+  }
+
+  /**
+   * Simply returns its argument.
+   *
+   * @deprecated no need to use this
+   * @since 10.0
+   */
+  @Deprecated public static <T> PeekingIterator<T> peekingIterator(
+      PeekingIterator<T> iterator) {
+    return checkNotNull(iterator);
+  }
+
+  /**
+   * Returns an iterator over the merged contents of all given
+   * {@code iterators}, traversing every element of the input iterators.
+   * Equivalent entries will not be de-duplicated.
+   *
+   * <p>Callers must ensure that the source {@code iterators} are in
+   * non-descending order as this method does not sort its input.
+   *
+   * <p>For any equivalent elements across all {@code iterators}, it is
+   * undefined which element is returned first.
+   *
+   * @since 11.0
+   */
+  @Beta
+  public static <T> UnmodifiableIterator<T> mergeSorted(
+      Iterable<? extends Iterator<? extends T>> iterators,
+      Comparator<? super T> comparator) {
+    checkNotNull(iterators, "iterators");
+    checkNotNull(comparator, "comparator");
+
+    return new MergingIterator<T>(iterators, comparator);
+  }
+
+  /**
+   * An iterator that performs a lazy N-way merge, calculating the next value
+   * each time the iterator is polled. This amortizes the sorting cost over the
+   * iteration and requires less memory than sorting all elements at once.
+   *
+   * <p>Retrieving a single element takes approximately O(log(M)) time, where M
+   * is the number of iterators. (Retrieving all elements takes approximately
+   * O(N*log(M)) time, where N is the total number of elements.)
+   */
+  private static class MergingIterator<T> extends AbstractIterator<T> {
+    final Queue<PeekingIterator<T>> queue;
+    final Comparator<? super T> comparator;
+
+    public MergingIterator(Iterable<? extends Iterator<? extends T>> iterators,
+        Comparator<? super T> itemComparator) {
+      this.comparator = itemComparator;
+
+      // A comparator that's used by the heap, allowing the heap
+      // to be sorted based on the top of each iterator.
+      Comparator<PeekingIterator<T>> heapComparator =
+          new Comparator<PeekingIterator<T>>() {
+            @Override
+            public int compare(PeekingIterator<T> o1, PeekingIterator<T> o2) {
+              return comparator.compare(o1.peek(), o2.peek());
+            }
+          };
+
+      queue = new PriorityQueue<PeekingIterator<T>>(2, heapComparator);
+
+      for (Iterator<? extends T> iterator : iterators) {
+        if (iterator.hasNext()) {
+          queue.add(Iterators.peekingIterator(iterator));
+        }
+      }
+    }
+
+    @Override
+    protected T computeNext() {
+      if (queue.isEmpty()) {
+        return endOfData();
+      }
+
+      PeekingIterator<T> nextIter = queue.poll();
+      T next = nextIter.next();
+
+      if (nextIter.hasNext()) {
+        queue.add(nextIter);
+      }
+
+      return next;
+    }
+  }
+}
diff --git a/guava/src/com/google/common/collect/LexicographicalOrdering.java b/guava/src/com/google/common/collect/LexicographicalOrdering.java
new file mode 100644
index 0000000..0d993e4
--- /dev/null
+++ b/guava/src/com/google/common/collect/LexicographicalOrdering.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.io.Serializable;
+import java.util.Iterator;
+
+import javax.annotation.Nullable;
+
+/**
+ * An ordering which sorts iterables by comparing corresponding elements
+ * pairwise.
+ */
+@GwtCompatible(serializable = true)
+final class LexicographicalOrdering<T>
+    extends Ordering<Iterable<T>> implements Serializable {
+  final Ordering<? super T> elementOrder;
+
+  LexicographicalOrdering(Ordering<? super T> elementOrder) {
+    this.elementOrder = elementOrder;
+  }
+
+  @Override public int compare(
+      Iterable<T> leftIterable, Iterable<T> rightIterable) {
+    Iterator<T> left = leftIterable.iterator();
+    Iterator<T> right = rightIterable.iterator();
+    while (left.hasNext()) {
+      if (!right.hasNext()) {
+        return LEFT_IS_GREATER; // because it's longer
+      }
+      int result = elementOrder.compare(left.next(), right.next());
+      if (result != 0) {
+        return result;
+      }
+    }
+    if (right.hasNext()) {
+      return RIGHT_IS_GREATER; // because it's longer
+    }
+    return 0;
+  }
+
+  @Override public boolean equals(@Nullable Object object) {
+    if (object == this) {
+      return true;
+    }
+    if (object instanceof LexicographicalOrdering) {
+      LexicographicalOrdering<?> that = (LexicographicalOrdering<?>) object;
+      return this.elementOrder.equals(that.elementOrder);
+    }
+    return false;
+  }
+
+  @Override public int hashCode() {
+    return elementOrder.hashCode() ^ 2075626741; // meaningless
+  }
+
+  @Override public String toString() {
+    return elementOrder + ".lexicographical()";
+  }
+
+  private static final long serialVersionUID = 0;
+}
diff --git a/guava/src/com/google/common/collect/LinkedHashMultimap.java b/guava/src/com/google/common/collect/LinkedHashMultimap.java
new file mode 100644
index 0000000..39c0bfb
--- /dev/null
+++ b/guava/src/com/google/common/collect/LinkedHashMultimap.java
@@ -0,0 +1,396 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Preconditions;
+import com.google.common.primitives.Ints;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
+import java.util.Map;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * Implementation of {@code Multimap} that does not allow duplicate key-value
+ * entries and that returns collections whose iterators follow the ordering in
+ * which the data was added to the multimap.
+ *
+ * <p>The collections returned by {@code keySet}, {@code keys}, and {@code
+ * asMap} iterate through the keys in the order they were first added to the
+ * multimap. Similarly, {@code get}, {@code removeAll}, and {@code
+ * replaceValues} return collections that iterate through the values in the
+ * order they were added. The collections generated by {@code entries} and
+ * {@code values} iterate across the key-value mappings in the order they were
+ * added to the multimap.
+ *
+ * <p>The iteration ordering of the collections generated by {@code keySet},
+ * {@code keys}, and {@code asMap} has a few subtleties. As long as the set of
+ * keys remains unchanged, adding or removing mappings does not affect the key
+ * iteration order. However, if you remove all values associated with a key and
+ * then add the key back to the multimap, that key will come last in the key
+ * iteration order.
+ *
+ * <p>The multimap does not store duplicate key-value pairs. Adding a new
+ * key-value pair equal to an existing key-value pair has no effect.
+ *
+ * <p>Keys and values may be null. All optional multimap methods are supported,
+ * and all returned views are modifiable.
+ *
+ * <p>This class is not threadsafe when any concurrent operations update the
+ * multimap. Concurrent read operations will work correctly. To allow concurrent
+ * update operations, wrap your multimap with a call to {@link
+ * Multimaps#synchronizedSetMultimap}.
+ *
+ * @author Jared Levy
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible(serializable = true, emulated = true)
+public final class LinkedHashMultimap<K, V> extends AbstractSetMultimap<K, V> {
+  private static final int DEFAULT_VALUES_PER_KEY = 8;
+
+  @VisibleForTesting
+  transient int expectedValuesPerKey = DEFAULT_VALUES_PER_KEY;
+
+  /**
+   * Map entries with an iteration order corresponding to the order in which the
+   * key-value pairs were added to the multimap.
+   */
+  // package-private for GWT deserialization
+  transient Collection<Map.Entry<K, V>> linkedEntries;
+
+  /**
+   * Creates a new, empty {@code LinkedHashMultimap} with the default initial
+   * capacities.
+   */
+  public static <K, V> LinkedHashMultimap<K, V> create() {
+    return new LinkedHashMultimap<K, V>();
+  }
+
+  /**
+   * Constructs an empty {@code LinkedHashMultimap} with enough capacity to hold
+   * the specified numbers of keys and values without rehashing.
+   *
+   * @param expectedKeys the expected number of distinct keys
+   * @param expectedValuesPerKey the expected average number of values per key
+   * @throws IllegalArgumentException if {@code expectedKeys} or {@code
+   *      expectedValuesPerKey} is negative
+   */
+  public static <K, V> LinkedHashMultimap<K, V> create(
+      int expectedKeys, int expectedValuesPerKey) {
+    return new LinkedHashMultimap<K, V>(expectedKeys, expectedValuesPerKey);
+  }
+
+  /**
+   * Constructs a {@code LinkedHashMultimap} with the same mappings as the
+   * specified multimap. If a key-value mapping appears multiple times in the
+   * input multimap, it only appears once in the constructed multimap. The new
+   * multimap has the same {@link Multimap#entries()} iteration order as the
+   * input multimap, except for excluding duplicate mappings.
+   *
+   * @param multimap the multimap whose contents are copied to this multimap
+   */
+  public static <K, V> LinkedHashMultimap<K, V> create(
+      Multimap<? extends K, ? extends V> multimap) {
+    return new LinkedHashMultimap<K, V>(multimap);
+  }
+
+  private LinkedHashMultimap() {
+    super(new LinkedHashMap<K, Collection<V>>());
+    linkedEntries = Sets.newLinkedHashSet();
+  }
+
+  private LinkedHashMultimap(int expectedKeys, int expectedValuesPerKey) {
+    super(new LinkedHashMap<K, Collection<V>>(expectedKeys));
+    Preconditions.checkArgument(expectedValuesPerKey >= 0);
+    this.expectedValuesPerKey = expectedValuesPerKey;
+    linkedEntries = new LinkedHashSet<Map.Entry<K, V>>(
+        (int) Math.min(Ints.MAX_POWER_OF_TWO,
+            ((long) expectedKeys) * expectedValuesPerKey));
+  }
+
+  private LinkedHashMultimap(Multimap<? extends K, ? extends V> multimap) {
+    super(new LinkedHashMap<K, Collection<V>>(
+        Maps.capacity(multimap.keySet().size())));
+    linkedEntries
+        = new LinkedHashSet<Map.Entry<K, V>>(Maps.capacity(multimap.size()));
+    putAll(multimap);
+  }
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>Creates an empty {@code LinkedHashSet} for a collection of values for
+   * one key.
+   *
+   * @return a new {@code LinkedHashSet} containing a collection of values for
+   *     one key
+   */
+  @Override Set<V> createCollection() {
+    return new LinkedHashSet<V>(Maps.capacity(expectedValuesPerKey));
+  }
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>Creates a decorated {@code LinkedHashSet} that also keeps track of the
+   * order in which key-value pairs are added to the multimap.
+   *
+   * @param key key to associate with values in the collection
+   * @return a new decorated {@code LinkedHashSet} containing a collection of
+   *     values for one key
+   */
+  @Override Collection<V> createCollection(@Nullable K key) {
+    return new SetDecorator(key, createCollection());
+  }
+
+  private class SetDecorator extends ForwardingSet<V> {
+    final Set<V> delegate;
+    final K key;
+
+    SetDecorator(@Nullable K key, Set<V> delegate) {
+      this.delegate = delegate;
+      this.key = key;
+    }
+
+    @Override protected Set<V> delegate() {
+      return delegate;
+    }
+
+    <E> Map.Entry<K, E> createEntry(@Nullable E value) {
+      return Maps.immutableEntry(key, value);
+    }
+
+    <E> Collection<Map.Entry<K, E>> createEntries(Collection<E> values) {
+      // converts a collection of values into a list of key/value map entries
+      Collection<Map.Entry<K, E>> entries
+          = Lists.newArrayListWithExpectedSize(values.size());
+      for (E value : values) {
+        entries.add(createEntry(value));
+      }
+      return entries;
+    }
+
+    @Override public boolean add(@Nullable V value) {
+      boolean changed = delegate.add(value);
+      if (changed) {
+        linkedEntries.add(createEntry(value));
+      }
+      return changed;
+    }
+
+    @Override public boolean addAll(Collection<? extends V> values) {
+      boolean changed = delegate.addAll(values);
+      if (changed) {
+        linkedEntries.addAll(createEntries(delegate()));
+      }
+      return changed;
+    }
+
+    @Override public void clear() {
+      for (V value : delegate) {
+        linkedEntries.remove(createEntry(value));
+      }
+      delegate.clear();
+    }
+
+    @Override public Iterator<V> iterator() {
+      final Iterator<V> delegateIterator = delegate.iterator();
+      return new Iterator<V>() {
+        V value;
+
+        @Override
+        public boolean hasNext() {
+          return delegateIterator.hasNext();
+        }
+        @Override
+        public V next() {
+          value = delegateIterator.next();
+          return value;
+        }
+        @Override
+        public void remove() {
+          delegateIterator.remove();
+          linkedEntries.remove(createEntry(value));
+        }
+      };
+    }
+
+    @Override public boolean remove(@Nullable Object value) {
+      boolean changed = delegate.remove(value);
+      if (changed) {
+        /*
+         * linkedEntries.remove() will return false when this method is called
+         * by entries().iterator().remove()
+         */
+        linkedEntries.remove(createEntry(value));
+      }
+      return changed;
+    }
+
+    @Override public boolean removeAll(Collection<?> values) {
+      boolean changed = delegate.removeAll(values);
+      if (changed) {
+        linkedEntries.removeAll(createEntries(values));
+      }
+      return changed;
+    }
+
+    @Override public boolean retainAll(Collection<?> values) {
+      /*
+       * Calling linkedEntries.retainAll() would incorrectly remove values
+       * with other keys.
+       */
+      boolean changed = false;
+      Iterator<V> iterator = delegate.iterator();
+      while (iterator.hasNext()) {
+        V value = iterator.next();
+        if (!values.contains(value)) {
+          iterator.remove();
+          linkedEntries.remove(Maps.immutableEntry(key, value));
+          changed = true;
+        }
+      }
+      return changed;
+    }
+  }
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>Generates an iterator across map entries that follows the ordering in
+   * which the key-value pairs were added to the multimap.
+   *
+   * @return a key-value iterator with the correct ordering
+   */
+  @Override Iterator<Map.Entry<K, V>> createEntryIterator() {
+    final Iterator<Map.Entry<K, V>> delegateIterator = linkedEntries.iterator();
+
+    return new Iterator<Map.Entry<K, V>>() {
+      Map.Entry<K, V> entry;
+
+      @Override
+      public boolean hasNext() {
+        return delegateIterator.hasNext();
+      }
+
+      @Override
+      public Map.Entry<K, V> next() {
+        entry = delegateIterator.next();
+        return entry;
+      }
+
+      @Override
+      public void remove() {
+        // Remove from iterator first to keep iterator valid.
+        delegateIterator.remove();
+        LinkedHashMultimap.this.remove(entry.getKey(), entry.getValue());
+      }
+    };
+  }
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>If {@code values} is not empty and the multimap already contains a
+   * mapping for {@code key}, the {@code keySet()} ordering is unchanged.
+   * However, the provided values always come last in the {@link #entries()} and
+   * {@link #values()} iteration orderings.
+   */
+  @Override public Set<V> replaceValues(
+      @Nullable K key, Iterable<? extends V> values) {
+    return super.replaceValues(key, values);
+  }
+
+  /**
+   * Returns a set of all key-value pairs. Changes to the returned set will
+   * update the underlying multimap, and vice versa. The entries set does not
+   * support the {@code add} or {@code addAll} operations.
+   *
+   * <p>The iterator generated by the returned set traverses the entries in the
+   * order they were added to the multimap.
+   *
+   * <p>Each entry is an immutable snapshot of a key-value mapping in the
+   * multimap, taken at the time the entry is returned by a method call to the
+   * collection or its iterator.
+   */
+  @Override public Set<Map.Entry<K, V>> entries() {
+    return super.entries();
+  }
+
+  /**
+   * Returns a collection of all values in the multimap. Changes to the returned
+   * collection will update the underlying multimap, and vice versa.
+   *
+   * <p>The iterator generated by the returned collection traverses the values
+   * in the order they were added to the multimap.
+   */
+  @Override public Collection<V> values() {
+    return super.values();
+  }
+
+  // Unfortunately, the entries() ordering does not determine the key ordering;
+  // see the example in the LinkedListMultimap class Javadoc.
+
+  /**
+   * @serialData the number of distinct keys, and then for each distinct key:
+   *     the first key, the number of values for that key, and the key's values,
+   *     followed by successive keys and values from the entries() ordering
+   */
+  @GwtIncompatible("java.io.ObjectOutputStream")
+  private void writeObject(ObjectOutputStream stream) throws IOException {
+    stream.defaultWriteObject();
+    stream.writeInt(expectedValuesPerKey);
+    Serialization.writeMultimap(this, stream);
+    for (Map.Entry<K, V> entry : linkedEntries) {
+      stream.writeObject(entry.getKey());
+      stream.writeObject(entry.getValue());
+    }
+  }
+
+  @GwtIncompatible("java.io.ObjectInputStream")
+  private void readObject(ObjectInputStream stream)
+      throws IOException, ClassNotFoundException {
+    stream.defaultReadObject();
+    expectedValuesPerKey = stream.readInt();
+    int distinctKeys = Serialization.readCount(stream);
+    setMap(new LinkedHashMap<K, Collection<V>>(Maps.capacity(distinctKeys)));
+    linkedEntries = new LinkedHashSet<Map.Entry<K, V>>(
+        distinctKeys * expectedValuesPerKey);
+    Serialization.populateMultimap(this, stream, distinctKeys);
+    linkedEntries.clear(); // will clear and repopulate entries
+    for (int i = 0; i < size(); i++) {
+      @SuppressWarnings("unchecked") // reading data stored by writeObject
+      K key = (K) stream.readObject();
+      @SuppressWarnings("unchecked") // reading data stored by writeObject
+      V value = (V) stream.readObject();
+      linkedEntries.add(Maps.immutableEntry(key, value));
+    }
+  }
+
+  @GwtIncompatible("java serialization not supported")
+  private static final long serialVersionUID = 0;
+}
diff --git a/guava/src/com/google/common/collect/LinkedHashMultiset.java b/guava/src/com/google/common/collect/LinkedHashMultiset.java
new file mode 100644
index 0000000..c8db8e2
--- /dev/null
+++ b/guava/src/com/google/common/collect/LinkedHashMultiset.java
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.LinkedHashMap;
+
+/**
+ * A {@code Multiset} implementation with predictable iteration order. Its
+ * iterator orders elements according to when the first occurrence of the
+ * element was added. When the multiset contains multiple instances of an
+ * element, those instances are consecutive in the iteration order. If all
+ * occurrences of an element are removed, after which that element is added to
+ * the multiset, the element will appear at the end of the iteration.
+ *
+ * @author Kevin Bourrillion
+ * @author Jared Levy
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible(serializable = true, emulated = true)
+@SuppressWarnings("serial") // we're overriding default serialization
+public final class LinkedHashMultiset<E> extends AbstractMapBasedMultiset<E> {
+
+  /**
+   * Creates a new, empty {@code LinkedHashMultiset} using the default initial
+   * capacity.
+   */
+  public static <E> LinkedHashMultiset<E> create() {
+    return new LinkedHashMultiset<E>();
+  }
+
+  /**
+   * Creates a new, empty {@code LinkedHashMultiset} with the specified expected
+   * number of distinct elements.
+   *
+   * @param distinctElements the expected number of distinct elements
+   * @throws IllegalArgumentException if {@code distinctElements} is negative
+   */
+  public static <E> LinkedHashMultiset<E> create(int distinctElements) {
+    return new LinkedHashMultiset<E>(distinctElements);
+  }
+
+  /**
+   * Creates a new {@code LinkedHashMultiset} containing the specified elements.
+   *
+   * <p>This implementation is highly efficient when {@code elements} is itself
+   * a {@link Multiset}.
+   *
+   * @param elements the elements that the multiset should contain
+   */
+  public static <E> LinkedHashMultiset<E> create(
+      Iterable<? extends E> elements) {
+    LinkedHashMultiset<E> multiset =
+        create(Multisets.inferDistinctElements(elements));
+    Iterables.addAll(multiset, elements);
+    return multiset;
+  }
+
+  private LinkedHashMultiset() {
+    super(new LinkedHashMap<E, Count>());
+  }
+
+  private LinkedHashMultiset(int distinctElements) {
+    // Could use newLinkedHashMapWithExpectedSize() if it existed
+    super(new LinkedHashMap<E, Count>(Maps.capacity(distinctElements)));
+  }
+
+  /**
+   * @serialData the number of distinct elements, the first element, its count,
+   *     the second element, its count, and so on
+   */
+  @GwtIncompatible("java.io.ObjectOutputStream")
+  private void writeObject(ObjectOutputStream stream) throws IOException {
+    stream.defaultWriteObject();
+    Serialization.writeMultiset(this, stream);
+  }
+
+  @GwtIncompatible("java.io.ObjectInputStream")
+  private void readObject(ObjectInputStream stream)
+      throws IOException, ClassNotFoundException {
+    stream.defaultReadObject();
+    int distinctElements = Serialization.readCount(stream);
+    setBackingMap(new LinkedHashMap<E, Count>(
+        Maps.capacity(distinctElements)));
+    Serialization.populateMultiset(this, stream, distinctElements);
+  }
+
+  @GwtIncompatible("not needed in emulated source")
+  private static final long serialVersionUID = 0;
+}
diff --git a/guava/src/com/google/common/collect/LinkedListMultimap.java b/guava/src/com/google/common/collect/LinkedListMultimap.java
new file mode 100644
index 0000000..336ca72
--- /dev/null
+++ b/guava/src/com/google/common/collect/LinkedListMultimap.java
@@ -0,0 +1,1146 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkState;
+import static com.google.common.collect.Multisets.setCountImpl;
+import static java.util.Collections.unmodifiableList;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.base.Objects;
+import com.google.common.base.Preconditions;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+import java.util.AbstractCollection;
+import java.util.AbstractMap;
+import java.util.AbstractSequentialList;
+import java.util.AbstractSet;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.NoSuchElementException;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * An implementation of {@code ListMultimap} that supports deterministic
+ * iteration order for both keys and values. The iteration order is preserved
+ * across non-distinct key values. For example, for the following multimap
+ * definition: <pre>   {@code
+ *
+ *   Multimap<K, V> multimap = LinkedListMultimap.create();
+ *   multimap.put(key1, foo);
+ *   multimap.put(key2, bar);
+ *   multimap.put(key1, baz);}</pre>
+ *
+ * ... the iteration order for {@link #keys()} is {@code [key1, key2, key1]},
+ * and similarly for {@link #entries()}. Unlike {@link LinkedHashMultimap}, the
+ * iteration order is kept consistent between keys, entries and values. For
+ * example, calling: <pre>   {@code
+ *
+ *   map.remove(key1, foo);}</pre>
+ *
+ * changes the entries iteration order to {@code [key2=bar, key1=baz]} and the
+ * key iteration order to {@code [key2, key1]}. The {@link #entries()} iterator
+ * returns mutable map entries, and {@link #replaceValues} attempts to preserve
+ * iteration order as much as possible.
+ *
+ * <p>The collections returned by {@link #keySet()} and {@link #asMap} iterate
+ * through the keys in the order they were first added to the multimap.
+ * Similarly, {@link #get}, {@link #removeAll}, and {@link #replaceValues}
+ * return collections that iterate through the values in the order they were
+ * added. The collections generated by {@link #entries()}, {@link #keys()}, and
+ * {@link #values} iterate across the key-value mappings in the order they were
+ * added to the multimap.
+ *
+ * <p>The {@link #values()} and {@link #entries()} methods both return a
+ * {@code List}, instead of the {@code Collection} specified by the {@link
+ * ListMultimap} interface.
+ *
+ * <p>The methods {@link #get}, {@link #keySet()}, {@link #keys()},
+ * {@link #values}, {@link #entries()}, and {@link #asMap} return collections
+ * that are views of the multimap. If the multimap is modified while an
+ * iteration over any of those collections is in progress, except through the
+ * iterator's methods, the results of the iteration are undefined.
+ *
+ * <p>Keys and values may be null. All optional multimap methods are supported,
+ * and all returned views are modifiable.
+ *
+ * <p>This class is not threadsafe when any concurrent operations update the
+ * multimap. Concurrent read operations will work correctly. To allow concurrent
+ * update operations, wrap your multimap with a call to {@link
+ * Multimaps#synchronizedListMultimap}.
+ *
+ * @author Mike Bostock
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible(serializable = true, emulated = true)
+public class LinkedListMultimap<K, V>
+    implements ListMultimap<K, V>, Serializable {
+  /*
+   * Order is maintained using a linked list containing all key-value pairs. In
+   * addition, a series of disjoint linked lists of "siblings", each containing
+   * the values for a specific key, is used to implement {@link
+   * ValueForKeyIterator} in constant time.
+   */
+
+  private static final class Node<K, V> {
+    final K key;
+    V value;
+    Node<K, V> next; // the next node (with any key)
+    Node<K, V> previous; // the previous node (with any key)
+    Node<K, V> nextSibling; // the next node with the same key
+    Node<K, V> previousSibling; // the previous node with the same key
+
+    Node(@Nullable K key, @Nullable V value) {
+      this.key = key;
+      this.value = value;
+    }
+
+    @Override public String toString() {
+      return key + "=" + value;
+    }
+  }
+
+  private transient Node<K, V> head; // the head for all keys
+  private transient Node<K, V> tail; // the tail for all keys
+  private transient Multiset<K> keyCount; // the number of values for each key
+  private transient Map<K, Node<K, V>> keyToKeyHead; // the head for a given key
+  private transient Map<K, Node<K, V>> keyToKeyTail; // the tail for a given key
+
+  /**
+   * Creates a new, empty {@code LinkedListMultimap} with the default initial
+   * capacity.
+   */
+  public static <K, V> LinkedListMultimap<K, V> create() {
+    return new LinkedListMultimap<K, V>();
+  }
+
+  /**
+   * Constructs an empty {@code LinkedListMultimap} with enough capacity to hold
+   * the specified number of keys without rehashing.
+   *
+   * @param expectedKeys the expected number of distinct keys
+   * @throws IllegalArgumentException if {@code expectedKeys} is negative
+   */
+  public static <K, V> LinkedListMultimap<K, V> create(int expectedKeys) {
+    return new LinkedListMultimap<K, V>(expectedKeys);
+  }
+
+  /**
+   * Constructs a {@code LinkedListMultimap} with the same mappings as the
+   * specified {@code Multimap}. The new multimap has the same
+   * {@link Multimap#entries()} iteration order as the input multimap.
+   *
+   * @param multimap the multimap whose contents are copied to this multimap
+   */
+  public static <K, V> LinkedListMultimap<K, V> create(
+      Multimap<? extends K, ? extends V> multimap) {
+    return new LinkedListMultimap<K, V>(multimap);
+  }
+
+  LinkedListMultimap() {
+    keyCount = LinkedHashMultiset.create();
+    keyToKeyHead = Maps.newHashMap();
+    keyToKeyTail = Maps.newHashMap();
+  }
+
+  private LinkedListMultimap(int expectedKeys) {
+    keyCount = LinkedHashMultiset.create(expectedKeys);
+    keyToKeyHead = Maps.newHashMapWithExpectedSize(expectedKeys);
+    keyToKeyTail = Maps.newHashMapWithExpectedSize(expectedKeys);
+  }
+
+  private LinkedListMultimap(Multimap<? extends K, ? extends V> multimap) {
+    this(multimap.keySet().size());
+    putAll(multimap);
+  }
+
+  /**
+   * Adds a new node for the specified key-value pair before the specified
+   * {@code nextSibling} element, or at the end of the list if {@code
+   * nextSibling} is null. Note: if {@code nextSibling} is specified, it MUST be
+   * for an node for the same {@code key}!
+   */
+  private Node<K, V> addNode(
+      @Nullable K key, @Nullable V value, @Nullable Node<K, V> nextSibling) {
+    Node<K, V> node = new Node<K, V>(key, value);
+    if (head == null) { // empty list
+      head = tail = node;
+      keyToKeyHead.put(key, node);
+      keyToKeyTail.put(key, node);
+    } else if (nextSibling == null) { // non-empty list, add to tail
+      tail.next = node;
+      node.previous = tail;
+      Node<K, V> keyTail = keyToKeyTail.get(key);
+      if (keyTail == null) { // first for this key
+        keyToKeyHead.put(key, node);
+      } else {
+        keyTail.nextSibling = node;
+        node.previousSibling = keyTail;
+      }
+      keyToKeyTail.put(key, node);
+      tail = node;
+    } else { // non-empty list, insert before nextSibling
+      node.previous = nextSibling.previous;
+      node.previousSibling = nextSibling.previousSibling;
+      node.next = nextSibling;
+      node.nextSibling = nextSibling;
+      if (nextSibling.previousSibling == null) { // nextSibling was key head
+        keyToKeyHead.put(key, node);
+      } else {
+        nextSibling.previousSibling.nextSibling = node;
+      }
+      if (nextSibling.previous == null) { // nextSibling was head
+        head = node;
+      } else {
+        nextSibling.previous.next = node;
+      }
+      nextSibling.previous = node;
+      nextSibling.previousSibling = node;
+    }
+    keyCount.add(key);
+    return node;
+  }
+
+  /**
+   * Removes the specified node from the linked list. This method is only
+   * intended to be used from the {@code Iterator} classes. See also {@link
+   * LinkedListMultimap#removeAllNodes(Object)}.
+   */
+  private void removeNode(Node<K, V> node) {
+    if (node.previous != null) {
+      node.previous.next = node.next;
+    } else { // node was head
+      head = node.next;
+    }
+    if (node.next != null) {
+      node.next.previous = node.previous;
+    } else { // node was tail
+      tail = node.previous;
+    }
+    if (node.previousSibling != null) {
+      node.previousSibling.nextSibling = node.nextSibling;
+    } else if (node.nextSibling != null) { // node was key head
+      keyToKeyHead.put(node.key, node.nextSibling);
+    } else {
+      keyToKeyHead.remove(node.key); // don't leak a key-null entry
+    }
+    if (node.nextSibling != null) {
+      node.nextSibling.previousSibling = node.previousSibling;
+    } else if (node.previousSibling != null) { // node was key tail
+      keyToKeyTail.put(node.key, node.previousSibling);
+    } else {
+      keyToKeyTail.remove(node.key); // don't leak a key-null entry
+    }
+    keyCount.remove(node.key);
+  }
+
+  /** Removes all nodes for the specified key. */
+  private void removeAllNodes(@Nullable Object key) {
+    for (Iterator<V> i = new ValueForKeyIterator(key); i.hasNext();) {
+      i.next();
+      i.remove();
+    }
+  }
+
+  /** Helper method for verifying that an iterator element is present. */
+  private static void checkElement(@Nullable Object node) {
+    if (node == null) {
+      throw new NoSuchElementException();
+    }
+  }
+
+  /** An {@code Iterator} over all nodes. */
+  private class NodeIterator implements ListIterator<Node<K, V>> {
+    int nextIndex;
+    Node<K, V> next;
+    Node<K, V> current;
+    Node<K, V> previous;
+
+    NodeIterator() {
+      next = head;
+    }
+    NodeIterator(int index) {
+      int size = size();
+      Preconditions.checkPositionIndex(index, size);
+      if (index >= (size / 2)) {
+        previous = tail;
+        nextIndex = size;
+        while (index++ < size) {
+          previous();
+        }
+      } else {
+        next = head;
+        while (index-- > 0) {
+          next();
+        }
+      }
+      current = null;
+    }
+    @Override
+    public boolean hasNext() {
+      return next != null;
+    }
+    @Override
+    public Node<K, V> next() {
+      checkElement(next);
+      previous = current = next;
+      next = next.next;
+      nextIndex++;
+      return current;
+    }
+    @Override
+    public void remove() {
+      checkState(current != null);
+      if (current != next) { // after call to next()
+        previous = current.previous;
+        nextIndex--;
+      } else { // after call to previous()
+        next = current.next;
+      }
+      removeNode(current);
+      current = null;
+    }
+    @Override
+    public boolean hasPrevious() {
+      return previous != null;
+    }
+    @Override
+    public Node<K, V> previous() {
+      checkElement(previous);
+      next = current = previous;
+      previous = previous.previous;
+      nextIndex--;
+      return current;
+    }
+    @Override
+    public int nextIndex() {
+      return nextIndex;
+    }
+    @Override
+    public int previousIndex() {
+      return nextIndex - 1;
+    }
+    @Override
+    public void set(Node<K, V> e) {
+      throw new UnsupportedOperationException();
+    }
+    @Override
+    public void add(Node<K, V> e) {
+      throw new UnsupportedOperationException();
+    }
+    void setValue(V value) {
+      checkState(current != null);
+      current.value = value;
+    }
+  }
+
+  /** An {@code Iterator} over distinct keys in key head order. */
+  private class DistinctKeyIterator implements Iterator<K> {
+    final Set<K> seenKeys = Sets.<K>newHashSetWithExpectedSize(keySet().size());
+    Node<K, V> next = head;
+    Node<K, V> current;
+
+    @Override
+    public boolean hasNext() {
+      return next != null;
+    }
+    @Override
+    public K next() {
+      checkElement(next);
+      current = next;
+      seenKeys.add(current.key);
+      do { // skip ahead to next unseen key
+        next = next.next;
+      } while ((next != null) && !seenKeys.add(next.key));
+      return current.key;
+    }
+    @Override
+    public void remove() {
+      checkState(current != null);
+      removeAllNodes(current.key);
+      current = null;
+    }
+  }
+
+  /** A {@code ListIterator} over values for a specified key. */
+  private class ValueForKeyIterator implements ListIterator<V> {
+    final Object key;
+    int nextIndex;
+    Node<K, V> next;
+    Node<K, V> current;
+    Node<K, V> previous;
+
+    /** Constructs a new iterator over all values for the specified key. */
+    ValueForKeyIterator(@Nullable Object key) {
+      this.key = key;
+      next = keyToKeyHead.get(key);
+    }
+
+    /**
+     * Constructs a new iterator over all values for the specified key starting
+     * at the specified index. This constructor is optimized so that it starts
+     * at either the head or the tail, depending on which is closer to the
+     * specified index. This allows adds to the tail to be done in constant
+     * time.
+     *
+     * @throws IndexOutOfBoundsException if index is invalid
+     */
+    public ValueForKeyIterator(@Nullable Object key, int index) {
+      int size = keyCount.count(key);
+      Preconditions.checkPositionIndex(index, size);
+      if (index >= (size / 2)) {
+        previous = keyToKeyTail.get(key);
+        nextIndex = size;
+        while (index++ < size) {
+          previous();
+        }
+      } else {
+        next = keyToKeyHead.get(key);
+        while (index-- > 0) {
+          next();
+        }
+      }
+      this.key = key;
+      current = null;
+    }
+
+    @Override
+    public boolean hasNext() {
+      return next != null;
+    }
+
+    @Override
+    public V next() {
+      checkElement(next);
+      previous = current = next;
+      next = next.nextSibling;
+      nextIndex++;
+      return current.value;
+    }
+
+    @Override
+    public boolean hasPrevious() {
+      return previous != null;
+    }
+
+    @Override
+    public V previous() {
+      checkElement(previous);
+      next = current = previous;
+      previous = previous.previousSibling;
+      nextIndex--;
+      return current.value;
+    }
+
+    @Override
+    public int nextIndex() {
+      return nextIndex;
+    }
+
+    @Override
+    public int previousIndex() {
+      return nextIndex - 1;
+    }
+
+    @Override
+    public void remove() {
+      checkState(current != null);
+      if (current != next) { // after call to next()
+        previous = current.previousSibling;
+        nextIndex--;
+      } else { // after call to previous()
+        next = current.nextSibling;
+      }
+      removeNode(current);
+      current = null;
+    }
+
+    @Override
+    public void set(V value) {
+      checkState(current != null);
+      current.value = value;
+    }
+
+    @Override
+    @SuppressWarnings("unchecked")
+    public void add(V value) {
+      previous = addNode((K) key, value, next);
+      nextIndex++;
+      current = null;
+    }
+  }
+
+  // Query Operations
+
+  @Override
+  public int size() {
+    return keyCount.size();
+  }
+
+  @Override
+  public boolean isEmpty() {
+    return head == null;
+  }
+
+  @Override
+  public boolean containsKey(@Nullable Object key) {
+    return keyToKeyHead.containsKey(key);
+  }
+
+  @Override
+  public boolean containsValue(@Nullable Object value) {
+    for (Iterator<Node<K, V>> i = new NodeIterator(); i.hasNext();) {
+      if (Objects.equal(i.next().value, value)) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  @Override
+  public boolean containsEntry(@Nullable Object key, @Nullable Object value) {
+    for (Iterator<V> i = new ValueForKeyIterator(key); i.hasNext();) {
+      if (Objects.equal(i.next(), value)) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  // Modification Operations
+
+  /**
+   * Stores a key-value pair in the multimap.
+   *
+   * @param key key to store in the multimap
+   * @param value value to store in the multimap
+   * @return {@code true} always
+   */
+  @Override
+  public boolean put(@Nullable K key, @Nullable V value) {
+    addNode(key, value, null);
+    return true;
+  }
+
+  @Override
+  public boolean remove(@Nullable Object key, @Nullable Object value) {
+    Iterator<V> values = new ValueForKeyIterator(key);
+    while (values.hasNext()) {
+      if (Objects.equal(values.next(), value)) {
+        values.remove();
+        return true;
+      }
+    }
+    return false;
+  }
+
+  // Bulk Operations
+
+  @Override
+  public boolean putAll(@Nullable K key, Iterable<? extends V> values) {
+    boolean changed = false;
+    for (V value : values) {
+      changed |= put(key, value);
+    }
+    return changed;
+  }
+
+  @Override
+  public boolean putAll(Multimap<? extends K, ? extends V> multimap) {
+    boolean changed = false;
+    for (Entry<? extends K, ? extends V> entry : multimap.entries()) {
+      changed |= put(entry.getKey(), entry.getValue());
+    }
+    return changed;
+  }
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>If any entries for the specified {@code key} already exist in the
+   * multimap, their values are changed in-place without affecting the iteration
+   * order.
+   *
+   * <p>The returned list is immutable and implements
+   * {@link java.util.RandomAccess}.
+   */
+  @Override
+  public List<V> replaceValues(@Nullable K key, Iterable<? extends V> values) {
+    List<V> oldValues = getCopy(key);
+    ListIterator<V> keyValues = new ValueForKeyIterator(key);
+    Iterator<? extends V> newValues = values.iterator();
+
+    // Replace existing values, if any.
+    while (keyValues.hasNext() && newValues.hasNext()) {
+      keyValues.next();
+      keyValues.set(newValues.next());
+    }
+
+    // Remove remaining old values, if any.
+    while (keyValues.hasNext()) {
+      keyValues.next();
+      keyValues.remove();
+    }
+
+    // Add remaining new values, if any.
+    while (newValues.hasNext()) {
+      keyValues.add(newValues.next());
+    }
+
+    return oldValues;
+  }
+
+  private List<V> getCopy(@Nullable Object key) {
+    return unmodifiableList(Lists.newArrayList(new ValueForKeyIterator(key)));
+  }
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>The returned list is immutable and implements
+   * {@link java.util.RandomAccess}.
+   */
+  @Override
+  public List<V> removeAll(@Nullable Object key) {
+    List<V> oldValues = getCopy(key);
+    removeAllNodes(key);
+    return oldValues;
+  }
+
+  @Override
+  public void clear() {
+    head = null;
+    tail = null;
+    keyCount.clear();
+    keyToKeyHead.clear();
+    keyToKeyTail.clear();
+  }
+
+  // Views
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>If the multimap is modified while an iteration over the list is in
+   * progress (except through the iterator's own {@code add}, {@code set} or
+   * {@code remove} operations) the results of the iteration are undefined.
+   *
+   * <p>The returned list is not serializable and does not have random access.
+   */
+  @Override
+  public List<V> get(final @Nullable K key) {
+    return new AbstractSequentialList<V>() {
+      @Override public int size() {
+        return keyCount.count(key);
+      }
+      @Override public ListIterator<V> listIterator(int index) {
+        return new ValueForKeyIterator(key, index);
+      }
+      @Override public boolean removeAll(Collection<?> c) {
+        return Iterators.removeAll(iterator(), c);
+      }
+      @Override public boolean retainAll(Collection<?> c) {
+        return Iterators.retainAll(iterator(), c);
+      }
+    };
+  }
+
+  private transient Set<K> keySet;
+
+  @Override
+  public Set<K> keySet() {
+    Set<K> result = keySet;
+    if (result == null) {
+      keySet = result = new AbstractSet<K>() {
+        @Override public int size() {
+          return keyCount.elementSet().size();
+        }
+        @Override public Iterator<K> iterator() {
+          return new DistinctKeyIterator();
+        }
+        @Override public boolean contains(Object key) { // for performance
+          return keyCount.contains(key);
+        }
+        @Override public boolean removeAll(Collection<?> c) {
+          checkNotNull(c); // eager for GWT
+          return super.removeAll(c);
+        }
+      };
+    }
+    return result;
+  }
+
+  private transient Multiset<K> keys;
+
+  @Override
+  public Multiset<K> keys() {
+    Multiset<K> result = keys;
+    if (result == null) {
+      keys = result = new MultisetView();
+    }
+    return result;
+  }
+
+  private class MultisetView extends AbstractCollection<K>
+      implements Multiset<K> {
+
+    @Override public int size() {
+      return keyCount.size();
+    }
+
+    @Override public Iterator<K> iterator() {
+      final Iterator<Node<K, V>> nodes = new NodeIterator();
+      return new Iterator<K>() {
+        @Override
+        public boolean hasNext() {
+          return nodes.hasNext();
+        }
+        @Override
+        public K next() {
+          return nodes.next().key;
+        }
+        @Override
+        public void remove() {
+          nodes.remove();
+        }
+      };
+    }
+
+    @Override
+    public int count(@Nullable Object key) {
+      return keyCount.count(key);
+    }
+
+    @Override
+    public int add(@Nullable K key, int occurrences) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public int remove(@Nullable Object key, int occurrences) {
+      checkArgument(occurrences >= 0);
+      int oldCount = count(key);
+      Iterator<V> values = new ValueForKeyIterator(key);
+      while ((occurrences-- > 0) && values.hasNext()) {
+        values.next();
+        values.remove();
+      }
+      return oldCount;
+    }
+
+    @Override
+    public int setCount(K element, int count) {
+      return setCountImpl(this, element, count);
+    }
+
+    @Override
+    public boolean setCount(K element, int oldCount, int newCount) {
+      return setCountImpl(this, element, oldCount, newCount);
+    }
+
+    @Override public boolean removeAll(Collection<?> c) {
+      return Iterators.removeAll(iterator(), c);
+    }
+
+    @Override public boolean retainAll(Collection<?> c) {
+      return Iterators.retainAll(iterator(), c);
+    }
+
+    @Override
+    public Set<K> elementSet() {
+      return keySet();
+    }
+
+    @Override
+    public Set<Entry<K>> entrySet() {
+      // TODO(jlevy): lazy init?
+      return new AbstractSet<Entry<K>>() {
+        @Override public int size() {
+          return keyCount.elementSet().size();
+        }
+
+        @Override public Iterator<Entry<K>> iterator() {
+          final Iterator<K> keyIterator = new DistinctKeyIterator();
+          return new Iterator<Entry<K>>() {
+            @Override
+            public boolean hasNext() {
+              return keyIterator.hasNext();
+            }
+            @Override
+            public Entry<K> next() {
+              final K key = keyIterator.next();
+              return new Multisets.AbstractEntry<K>() {
+                @Override
+                public K getElement() {
+                  return key;
+                }
+                @Override
+                public int getCount() {
+                  return keyCount.count(key);
+                }
+              };
+            }
+            @Override
+            public void remove() {
+              keyIterator.remove();
+            }
+          };
+        }
+      };
+    }
+
+    @Override public boolean equals(@Nullable Object object) {
+      return keyCount.equals(object);
+    }
+
+    @Override public int hashCode() {
+      return keyCount.hashCode();
+    }
+
+    @Override public String toString() {
+      return keyCount.toString(); // XXX observe order?
+    }
+  }
+
+  private transient List<V> valuesList;
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>The iterator generated by the returned collection traverses the values
+   * in the order they were added to the multimap. Because the values may have
+   * duplicates and follow the insertion ordering, this method returns a {@link
+   * List}, instead of the {@link Collection} specified in the {@link
+   * ListMultimap} interface.
+   */
+  @Override
+  public List<V> values() {
+    List<V> result = valuesList;
+    if (result == null) {
+      valuesList = result = new AbstractSequentialList<V>() {
+        @Override public int size() {
+          return keyCount.size();
+        }
+        @Override
+        public ListIterator<V> listIterator(int index) {
+          final NodeIterator nodes = new NodeIterator(index);
+          return new ListIterator<V>() {
+            @Override
+            public boolean hasNext() {
+              return nodes.hasNext();
+            }
+            @Override
+            public V next() {
+              return nodes.next().value;
+            }
+            @Override
+            public boolean hasPrevious() {
+              return nodes.hasPrevious();
+            }
+            @Override
+            public V previous() {
+              return nodes.previous().value;
+            }
+            @Override
+            public int nextIndex() {
+              return nodes.nextIndex();
+            }
+            @Override
+            public int previousIndex() {
+              return nodes.previousIndex();
+            }
+            @Override
+            public void remove() {
+              nodes.remove();
+            }
+            @Override
+            public void set(V e) {
+              nodes.setValue(e);
+            }
+            @Override
+            public void add(V e) {
+              throw new UnsupportedOperationException();
+            }
+          };
+        }
+      };
+    }
+    return result;
+  }
+
+  private static <K, V> Entry<K, V> createEntry(final Node<K, V> node) {
+    return new AbstractMapEntry<K, V>() {
+      @Override public K getKey() {
+        return node.key;
+      }
+      @Override public V getValue() {
+        return node.value;
+      }
+      @Override public V setValue(V value) {
+        V oldValue = node.value;
+        node.value = value;
+        return oldValue;
+      }
+    };
+  }
+
+  private transient List<Entry<K, V>> entries;
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>The iterator generated by the returned collection traverses the entries
+   * in the order they were added to the multimap. Because the entries may have
+   * duplicates and follow the insertion ordering, this method returns a {@link
+   * List}, instead of the {@link Collection} specified in the {@link
+   * ListMultimap} interface.
+   *
+   * <p>An entry's {@link Entry#getKey} method always returns the same key,
+   * regardless of what happens subsequently. As long as the corresponding
+   * key-value mapping is not removed from the multimap, {@link Entry#getValue}
+   * returns the value from the multimap, which may change over time, and {@link
+   * Entry#setValue} modifies that value. Removing the mapping from the
+   * multimap does not alter the value returned by {@code getValue()}, though a
+   * subsequent {@code setValue()} call won't update the multimap but will lead
+   * to a revised value being returned by {@code getValue()}.
+   */
+  @Override
+  public List<Entry<K, V>> entries() {
+    List<Entry<K, V>> result = entries;
+    if (result == null) {
+      entries = result = new AbstractSequentialList<Entry<K, V>>() {
+        @Override public int size() {
+          return keyCount.size();
+        }
+
+        @Override public ListIterator<Entry<K, V>> listIterator(int index) {
+          final ListIterator<Node<K, V>> nodes = new NodeIterator(index);
+          return new ListIterator<Entry<K, V>>() {
+            @Override
+            public boolean hasNext() {
+              return nodes.hasNext();
+            }
+
+            @Override
+            public Entry<K, V> next() {
+              return createEntry(nodes.next());
+            }
+
+            @Override
+            public void remove() {
+              nodes.remove();
+            }
+
+            @Override
+            public boolean hasPrevious() {
+              return nodes.hasPrevious();
+            }
+
+            @Override
+            public Map.Entry<K, V> previous() {
+              return createEntry(nodes.previous());
+            }
+
+            @Override
+            public int nextIndex() {
+              return nodes.nextIndex();
+            }
+
+            @Override
+            public int previousIndex() {
+              return nodes.previousIndex();
+            }
+
+            @Override
+            public void set(Map.Entry<K, V> e) {
+              throw new UnsupportedOperationException();
+            }
+
+            @Override
+            public void add(Map.Entry<K, V> e) {
+              throw new UnsupportedOperationException();
+            }
+          };
+        }
+      };
+    }
+    return result;
+  }
+
+  private class AsMapEntries extends AbstractSet<Entry<K, Collection<V>>> {
+    @Override public int size() {
+      return keyCount.elementSet().size();
+    }
+
+    @Override public Iterator<Entry<K, Collection<V>>> iterator() {
+      final Iterator<K> keyIterator = new DistinctKeyIterator();
+      return new Iterator<Entry<K, Collection<V>>>() {
+        @Override
+        public boolean hasNext() {
+          return keyIterator.hasNext();
+        }
+
+        @Override
+        public Entry<K, Collection<V>> next() {
+          final K key = keyIterator.next();
+          return new AbstractMapEntry<K, Collection<V>>() {
+            @Override public K getKey() {
+              return key;
+            }
+
+            @Override public Collection<V> getValue() {
+              return LinkedListMultimap.this.get(key);
+            }
+          };
+        }
+
+        @Override
+        public void remove() {
+          keyIterator.remove();
+        }
+      };
+    }
+
+    // TODO(jlevy): Override contains() and remove() for better performance.
+  }
+
+  private transient Map<K, Collection<V>> map;
+
+  @Override
+  public Map<K, Collection<V>> asMap() {
+    Map<K, Collection<V>> result = map;
+    if (result == null) {
+      map = result = new AbstractMap<K, Collection<V>>() {
+        Set<Entry<K, Collection<V>>> entrySet;
+
+        @Override public Set<Entry<K, Collection<V>>> entrySet() {
+          Set<Entry<K, Collection<V>>> result = entrySet;
+          if (result == null) {
+            entrySet = result = new AsMapEntries();
+          }
+          return result;
+        }
+
+        // The following methods are included for performance.
+
+        @Override public boolean containsKey(@Nullable Object key) {
+          return LinkedListMultimap.this.containsKey(key);
+        }
+
+        @SuppressWarnings("unchecked")
+        @Override public Collection<V> get(@Nullable Object key) {
+          Collection<V> collection = LinkedListMultimap.this.get((K) key);
+          return collection.isEmpty() ? null : collection;
+        }
+
+        @Override public Collection<V> remove(@Nullable Object key) {
+          Collection<V> collection = removeAll(key);
+          return collection.isEmpty() ? null : collection;
+        }
+      };
+    }
+
+    return result;
+  }
+
+  // Comparison and hashing
+
+  /**
+   * Compares the specified object to this multimap for equality.
+   *
+   * <p>Two {@code ListMultimap} instances are equal if, for each key, they
+   * contain the same values in the same order. If the value orderings disagree,
+   * the multimaps will not be considered equal.
+   */
+  @Override public boolean equals(@Nullable Object other) {
+    if (other == this) {
+      return true;
+    }
+    if (other instanceof Multimap) {
+      Multimap<?, ?> that = (Multimap<?, ?>) other;
+      return this.asMap().equals(that.asMap());
+    }
+    return false;
+  }
+
+  /**
+   * Returns the hash code for this multimap.
+   *
+   * <p>The hash code of a multimap is defined as the hash code of the map view,
+   * as returned by {@link Multimap#asMap}.
+   */
+  @Override public int hashCode() {
+    return asMap().hashCode();
+  }
+
+  /**
+   * Returns a string representation of the multimap, generated by calling
+   * {@code toString} on the map returned by {@link Multimap#asMap}.
+   *
+   * @return a string representation of the multimap
+   */
+  @Override public String toString() {
+    return asMap().toString();
+  }
+
+  /**
+   * @serialData the number of distinct keys, and then for each distinct key:
+   *     the first key, the number of values for that key, and the key's values,
+   *     followed by successive keys and values from the entries() ordering
+   */
+  @GwtIncompatible("java.io.ObjectOutputStream")
+  private void writeObject(ObjectOutputStream stream) throws IOException {
+    stream.defaultWriteObject();
+    stream.writeInt(size());
+    for (Entry<K, V> entry : entries()) {
+      stream.writeObject(entry.getKey());
+      stream.writeObject(entry.getValue());
+    }
+  }
+
+  @GwtIncompatible("java.io.ObjectInputStream")
+  private void readObject(ObjectInputStream stream)
+      throws IOException, ClassNotFoundException {
+    stream.defaultReadObject();
+    keyCount = LinkedHashMultiset.create();
+    keyToKeyHead = Maps.newHashMap();
+    keyToKeyTail = Maps.newHashMap();
+    int size = stream.readInt();
+    for (int i = 0; i < size; i++) {
+      @SuppressWarnings("unchecked") // reading data stored by writeObject
+      K key = (K) stream.readObject();
+      @SuppressWarnings("unchecked") // reading data stored by writeObject
+      V value = (V) stream.readObject();
+      put(key, value);
+    }
+  }
+
+  @GwtIncompatible("java serialization not supported")
+  private static final long serialVersionUID = 0;
+}
diff --git a/guava/src/com/google/common/collect/ListMultimap.java b/guava/src/com/google/common/collect/ListMultimap.java
new file mode 100644
index 0000000..cf4cbaa
--- /dev/null
+++ b/guava/src/com/google/common/collect/ListMultimap.java
@@ -0,0 +1,91 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import javax.annotation.Nullable;
+
+/**
+ * A {@code Multimap} that can hold duplicate key-value pairs and that maintains
+ * the insertion ordering of values for a given key.
+ *
+ * <p>The {@link #get}, {@link #removeAll}, and {@link #replaceValues} methods
+ * each return a {@link List} of values. Though the method signature doesn't say
+ * so explicitly, the map returned by {@link #asMap} has {@code List} values.
+ *
+ * @author Jared Levy
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible
+public interface ListMultimap<K, V> extends Multimap<K, V> {
+  /**
+   * {@inheritDoc}
+   *
+   * <p>Because the values for a given key may have duplicates and follow the
+   * insertion ordering, this method returns a {@link List}, instead of the
+   * {@link java.util.Collection} specified in the {@link Multimap} interface.
+   */
+  @Override
+  List<V> get(@Nullable K key);
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>Because the values for a given key may have duplicates and follow the
+   * insertion ordering, this method returns a {@link List}, instead of the
+   * {@link java.util.Collection} specified in the {@link Multimap} interface.
+   */
+  @Override
+  List<V> removeAll(@Nullable Object key);
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>Because the values for a given key may have duplicates and follow the
+   * insertion ordering, this method returns a {@link List}, instead of the
+   * {@link java.util.Collection} specified in the {@link Multimap} interface.
+   */
+  @Override
+  List<V> replaceValues(K key, Iterable<? extends V> values);
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>Though the method signature doesn't say so explicitly, the returned map
+   * has {@link List} values.
+   */
+  @Override
+  Map<K, Collection<V>> asMap();
+
+  /**
+   * Compares the specified object to this multimap for equality.
+   *
+   * <p>Two {@code ListMultimap} instances are equal if, for each key, they
+   * contain the same values in the same order. If the value orderings disagree,
+   * the multimaps will not be considered equal.
+   *
+   * <p>An empty {@code ListMultimap} is equal to any other empty {@code
+   * Multimap}, including an empty {@code SetMultimap}.
+   */
+  @Override
+  boolean equals(@Nullable Object obj);
+}
diff --git a/guava/src/com/google/common/collect/Lists.java b/guava/src/com/google/common/collect/Lists.java
new file mode 100644
index 0000000..850d87e
--- /dev/null
+++ b/guava/src/com/google/common/collect/Lists.java
@@ -0,0 +1,1031 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkElementIndex;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkPositionIndex;
+import static com.google.common.base.Preconditions.checkPositionIndexes;
+import static com.google.common.base.Preconditions.checkState;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Function;
+import com.google.common.base.Objects;
+import com.google.common.primitives.Ints;
+
+import java.io.Serializable;
+import java.util.AbstractList;
+import java.util.AbstractSequentialList;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.NoSuchElementException;
+import java.util.RandomAccess;
+
+import javax.annotation.Nullable;
+
+/**
+ * Static utility methods pertaining to {@link List} instances. Also see this
+ * class's counterparts {@link Sets} and {@link Maps}.
+ *
+ * @author Kevin Bourrillion
+ * @author Mike Bostock
+ * @author Louis Wasserman
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible
+public final class Lists {
+  private Lists() {}
+
+  // ArrayList
+
+  /**
+   * Creates a <i>mutable</i>, empty {@code ArrayList} instance.
+   *
+   * <p><b>Note:</b> if mutability is not required, use {@link
+   * ImmutableList#of()} instead.
+   *
+   * @return a new, empty {@code ArrayList}
+   */
+  @GwtCompatible(serializable = true)
+  public static <E> ArrayList<E> newArrayList() {
+    return new ArrayList<E>();
+  }
+
+  /**
+   * Creates a <i>mutable</i> {@code ArrayList} instance containing the given
+   * elements.
+   *
+   * <p><b>Note:</b> if mutability is not required and the elements are
+   * non-null, use an overload of {@link ImmutableList#of()} (for varargs) or
+   * {@link ImmutableList#copyOf(Object[])} (for an array) instead.
+   *
+   * @param elements the elements that the list should contain, in order
+   * @return a new {@code ArrayList} containing those elements
+   */
+  @GwtCompatible(serializable = true)
+  public static <E> ArrayList<E> newArrayList(E... elements) {
+    checkNotNull(elements); // for GWT
+    // Avoid integer overflow when a large array is passed in
+    int capacity = computeArrayListCapacity(elements.length);
+    ArrayList<E> list = new ArrayList<E>(capacity);
+    Collections.addAll(list, elements);
+    return list;
+  }
+
+  @VisibleForTesting static int computeArrayListCapacity(int arraySize) {
+    checkArgument(arraySize >= 0);
+
+    // TODO(kevinb): Figure out the right behavior, and document it
+    return Ints.saturatedCast(5L + arraySize + (arraySize / 10));
+  }
+
+  /**
+   * Creates a <i>mutable</i> {@code ArrayList} instance containing the given
+   * elements.
+   *
+   * <p><b>Note:</b> if mutability is not required and the elements are
+   * non-null, use {@link ImmutableList#copyOf(Iterator)} instead.
+   *
+   * @param elements the elements that the list should contain, in order
+   * @return a new {@code ArrayList} containing those elements
+   */
+  @GwtCompatible(serializable = true)
+  public static <E> ArrayList<E> newArrayList(Iterable<? extends E> elements) {
+    checkNotNull(elements); // for GWT
+    // Let ArrayList's sizing logic work, if possible
+    return (elements instanceof Collection)
+        ? new ArrayList<E>(Collections2.cast(elements))
+        : newArrayList(elements.iterator());
+  }
+
+  /**
+   * Creates a <i>mutable</i> {@code ArrayList} instance containing the given
+   * elements.
+   *
+   * <p><b>Note:</b> if mutability is not required and the elements are
+   * non-null, use {@link ImmutableList#copyOf(Iterator)} instead.
+   *
+   * @param elements the elements that the list should contain, in order
+   * @return a new {@code ArrayList} containing those elements
+   */
+  @GwtCompatible(serializable = true)
+  public static <E> ArrayList<E> newArrayList(Iterator<? extends E> elements) {
+    checkNotNull(elements); // for GWT
+    ArrayList<E> list = newArrayList();
+    while (elements.hasNext()) {
+      list.add(elements.next());
+    }
+    return list;
+  }
+
+  /**
+   * Creates an {@code ArrayList} instance backed by an array of the
+   * <i>exact</i> size specified; equivalent to
+   * {@link ArrayList#ArrayList(int)}.
+   *
+   * <p><b>Note:</b> if you know the exact size your list will be, consider
+   * using a fixed-size list ({@link Arrays#asList(Object[])}) or an {@link
+   * ImmutableList} instead of a growable {@link ArrayList}.
+   *
+   * <p><b>Note:</b> If you have only an <i>estimate</i> of the eventual size of
+   * the list, consider padding this estimate by a suitable amount, or simply
+   * use {@link #newArrayListWithExpectedSize(int)} instead.
+   *
+   * @param initialArraySize the exact size of the initial backing array for
+   *     the returned array list ({@code ArrayList} documentation calls this
+   *     value the "capacity")
+   * @return a new, empty {@code ArrayList} which is guaranteed not to resize
+   *     itself unless its size reaches {@code initialArraySize + 1}
+   * @throws IllegalArgumentException if {@code initialArraySize} is negative
+   */
+  @GwtCompatible(serializable = true)
+  public static <E> ArrayList<E> newArrayListWithCapacity(
+      int initialArraySize) {
+    checkArgument(initialArraySize >= 0);  // for GWT.
+    return new ArrayList<E>(initialArraySize);
+  }
+
+  /**
+   * Creates an {@code ArrayList} instance sized appropriately to hold an
+   * <i>estimated</i> number of elements without resizing. A small amount of
+   * padding is added in case the estimate is low.
+   *
+   * <p><b>Note:</b> If you know the <i>exact</i> number of elements the list
+   * will hold, or prefer to calculate your own amount of padding, refer to
+   * {@link #newArrayListWithCapacity(int)}.
+   *
+   * @param estimatedSize an estimate of the eventual {@link List#size()} of
+   *     the new list
+   * @return a new, empty {@code ArrayList}, sized appropriately to hold the
+   *     estimated number of elements
+   * @throws IllegalArgumentException if {@code estimatedSize} is negative
+   */
+  @GwtCompatible(serializable = true)
+  public static <E> ArrayList<E> newArrayListWithExpectedSize(
+      int estimatedSize) {
+    return new ArrayList<E>(computeArrayListCapacity(estimatedSize));
+  }
+
+  // LinkedList
+
+  /**
+   * Creates an empty {@code LinkedList} instance.
+   *
+   * <p><b>Note:</b> if you need an immutable empty {@link List}, use
+   * {@link ImmutableList#of()} instead.
+   *
+   * @return a new, empty {@code LinkedList}
+   */
+  @GwtCompatible(serializable = true)
+  public static <E> LinkedList<E> newLinkedList() {
+    return new LinkedList<E>();
+  }
+
+  /**
+   * Creates a {@code LinkedList} instance containing the given elements.
+   *
+   * @param elements the elements that the list should contain, in order
+   * @return a new {@code LinkedList} containing those elements
+   */
+  @GwtCompatible(serializable = true)
+  public static <E> LinkedList<E> newLinkedList(
+      Iterable<? extends E> elements) {
+    LinkedList<E> list = newLinkedList();
+    for (E element : elements) {
+      list.add(element);
+    }
+    return list;
+  }
+
+  /**
+   * Returns an unmodifiable list containing the specified first element and
+   * backed by the specified array of additional elements. Changes to the {@code
+   * rest} array will be reflected in the returned list. Unlike {@link
+   * Arrays#asList}, the returned list is unmodifiable.
+   *
+   * <p>This is useful when a varargs method needs to use a signature such as
+   * {@code (Foo firstFoo, Foo... moreFoos)}, in order to avoid overload
+   * ambiguity or to enforce a minimum argument count.
+   *
+   * <p>The returned list is serializable and implements {@link RandomAccess}.
+   *
+   * @param first the first element
+   * @param rest an array of additional elements, possibly empty
+   * @return an unmodifiable list containing the specified elements
+   */
+  public static <E> List<E> asList(@Nullable E first, E[] rest) {
+    return new OnePlusArrayList<E>(first, rest);
+  }
+
+  /** @see Lists#asList(Object, Object[]) */
+  private static class OnePlusArrayList<E> extends AbstractList<E>
+      implements Serializable, RandomAccess {
+    final E first;
+    final E[] rest;
+
+    OnePlusArrayList(@Nullable E first, E[] rest) {
+      this.first = first;
+      this.rest = checkNotNull(rest);
+    }
+    @Override public int size() {
+      return rest.length + 1;
+    }
+    @Override public E get(int index) {
+      // check explicitly so the IOOBE will have the right message
+      checkElementIndex(index, size());
+      return (index == 0) ? first : rest[index - 1];
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  /**
+   * Returns an unmodifiable list containing the specified first and second
+   * element, and backed by the specified array of additional elements. Changes
+   * to the {@code rest} array will be reflected in the returned list. Unlike
+   * {@link Arrays#asList}, the returned list is unmodifiable.
+   *
+   * <p>This is useful when a varargs method needs to use a signature such as
+   * {@code (Foo firstFoo, Foo secondFoo, Foo... moreFoos)}, in order to avoid
+   * overload ambiguity or to enforce a minimum argument count.
+   *
+   * <p>The returned list is serializable and implements {@link RandomAccess}.
+   *
+   * @param first the first element
+   * @param second the second element
+   * @param rest an array of additional elements, possibly empty
+   * @return an unmodifiable list containing the specified elements
+   */
+  public static <E> List<E> asList(
+      @Nullable E first, @Nullable E second, E[] rest) {
+    return new TwoPlusArrayList<E>(first, second, rest);
+  }
+
+  /** @see Lists#asList(Object, Object, Object[]) */
+  private static class TwoPlusArrayList<E> extends AbstractList<E>
+      implements Serializable, RandomAccess {
+    final E first;
+    final E second;
+    final E[] rest;
+
+    TwoPlusArrayList(@Nullable E first, @Nullable E second, E[] rest) {
+      this.first = first;
+      this.second = second;
+      this.rest = checkNotNull(rest);
+    }
+    @Override public int size() {
+      return rest.length + 2;
+    }
+    @Override public E get(int index) {
+      switch (index) {
+        case 0:
+          return first;
+        case 1:
+          return second;
+        default:
+          // check explicitly so the IOOBE will have the right message
+          checkElementIndex(index, size());
+          return rest[index - 2];
+      }
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  /**
+   * Returns a list that applies {@code function} to each element of {@code
+   * fromList}. The returned list is a transformed view of {@code fromList};
+   * changes to {@code fromList} will be reflected in the returned list and vice
+   * versa.
+   *
+   * <p>Since functions are not reversible, the transform is one-way and new
+   * items cannot be stored in the returned list. The {@code add},
+   * {@code addAll} and {@code set} methods are unsupported in the returned
+   * list.
+   *
+   * <p>The function is applied lazily, invoked when needed. This is necessary
+   * for the returned list to be a view, but it means that the function will be
+   * applied many times for bulk operations like {@link List#contains} and
+   * {@link List#hashCode}. For this to perform well, {@code function} should be
+   * fast. To avoid lazy evaluation when the returned list doesn't need to be a
+   * view, copy the returned list into a new list of your choosing.
+   *
+   * <p>If {@code fromList} implements {@link RandomAccess}, so will the
+   * returned list. The returned list always implements {@link Serializable},
+   * but serialization will succeed only when {@code fromList} and
+   * {@code function} are serializable. The returned list is threadsafe if the
+   * supplied list and function are.
+   *
+   * <p>If only a {@code Collection} or {@code Iterable} input is available, use
+   * {@link Collections2#transform} or {@link Iterables#transform}.
+   */
+  public static <F, T> List<T> transform(
+      List<F> fromList, Function<? super F, ? extends T> function) {
+    return (fromList instanceof RandomAccess)
+        ? new TransformingRandomAccessList<F, T>(fromList, function)
+        : new TransformingSequentialList<F, T>(fromList, function);
+  }
+
+  /**
+   * Implementation of a sequential transforming list.
+   *
+   * @see Lists#transform
+   */
+  private static class TransformingSequentialList<F, T>
+      extends AbstractSequentialList<T> implements Serializable {
+    final List<F> fromList;
+    final Function<? super F, ? extends T> function;
+
+    TransformingSequentialList(
+        List<F> fromList, Function<? super F, ? extends T> function) {
+      this.fromList = checkNotNull(fromList);
+      this.function = checkNotNull(function);
+    }
+    /**
+     * The default implementation inherited is based on iteration and removal of
+     * each element which can be overkill. That's why we forward this call
+     * directly to the backing list.
+     */
+    @Override public void clear() {
+      fromList.clear();
+    }
+    @Override public int size() {
+      return fromList.size();
+    }
+    @Override public ListIterator<T> listIterator(final int index) {
+      final ListIterator<F> delegate = fromList.listIterator(index);
+      return new ListIterator<T>() {
+        @Override
+        public void add(T e) {
+          throw new UnsupportedOperationException();
+        }
+
+        @Override
+        public boolean hasNext() {
+          return delegate.hasNext();
+        }
+
+        @Override
+        public boolean hasPrevious() {
+          return delegate.hasPrevious();
+        }
+
+        @Override
+        public T next() {
+          return function.apply(delegate.next());
+        }
+
+        @Override
+        public int nextIndex() {
+          return delegate.nextIndex();
+        }
+
+        @Override
+        public T previous() {
+          return function.apply(delegate.previous());
+        }
+
+        @Override
+        public int previousIndex() {
+          return delegate.previousIndex();
+        }
+
+        @Override
+        public void remove() {
+          delegate.remove();
+        }
+
+        @Override
+        public void set(T e) {
+          throw new UnsupportedOperationException("not supported");
+        }
+      };
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  /**
+   * Implementation of a transforming random access list. We try to make as many
+   * of these methods pass-through to the source list as possible so that the
+   * performance characteristics of the source list and transformed list are
+   * similar.
+   *
+   * @see Lists#transform
+   */
+  private static class TransformingRandomAccessList<F, T>
+      extends AbstractList<T> implements RandomAccess, Serializable {
+    final List<F> fromList;
+    final Function<? super F, ? extends T> function;
+
+    TransformingRandomAccessList(
+        List<F> fromList, Function<? super F, ? extends T> function) {
+      this.fromList = checkNotNull(fromList);
+      this.function = checkNotNull(function);
+    }
+    @Override public void clear() {
+      fromList.clear();
+    }
+    @Override public T get(int index) {
+      return function.apply(fromList.get(index));
+    }
+    @Override public boolean isEmpty() {
+      return fromList.isEmpty();
+    }
+    @Override public T remove(int index) {
+      return function.apply(fromList.remove(index));
+    }
+    @Override public int size() {
+      return fromList.size();
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  /**
+   * Returns consecutive {@linkplain List#subList(int, int) sublists} of a list,
+   * each of the same size (the final list may be smaller). For example,
+   * partitioning a list containing {@code [a, b, c, d, e]} with a partition
+   * size of 3 yields {@code [[a, b, c], [d, e]]} -- an outer list containing
+   * two inner lists of three and two elements, all in the original order.
+   *
+   * <p>The outer list is unmodifiable, but reflects the latest state of the
+   * source list. The inner lists are sublist views of the original list,
+   * produced on demand using {@link List#subList(int, int)}, and are subject
+   * to all the usual caveats about modification as explained in that API.
+   *
+   * @param list the list to return consecutive sublists of
+   * @param size the desired size of each sublist (the last may be
+   *     smaller)
+   * @return a list of consecutive sublists
+   * @throws IllegalArgumentException if {@code partitionSize} is nonpositive
+   */
+  public static <T> List<List<T>> partition(List<T> list, int size) {
+    checkNotNull(list);
+    checkArgument(size > 0);
+    return (list instanceof RandomAccess)
+        ? new RandomAccessPartition<T>(list, size)
+        : new Partition<T>(list, size);
+  }
+
+  private static class Partition<T> extends AbstractList<List<T>> {
+    final List<T> list;
+    final int size;
+
+    Partition(List<T> list, int size) {
+      this.list = list;
+      this.size = size;
+    }
+
+    @Override public List<T> get(int index) {
+      int listSize = size();
+      checkElementIndex(index, listSize);
+      int start = index * size;
+      int end = Math.min(start + size, list.size());
+      return list.subList(start, end);
+    }
+
+    @Override public int size() {
+      // TODO(user): refactor to common.math.IntMath.divide
+      int result = list.size() / size;
+      if (result * size != list.size()) {
+        result++;
+      }
+      return result;
+    }
+
+    @Override public boolean isEmpty() {
+      return list.isEmpty();
+    }
+  }
+
+  private static class RandomAccessPartition<T> extends Partition<T>
+      implements RandomAccess {
+    RandomAccessPartition(List<T> list, int size) {
+      super(list, size);
+    }
+  }
+
+  /**
+   * Returns a view of the specified string as an immutable list of {@code
+   * Character} values.
+   *
+   * @since 7.0
+   */
+  @Beta public static ImmutableList<Character> charactersOf(String string) {
+    return new StringAsImmutableList(checkNotNull(string));
+  }
+
+  @SuppressWarnings("serial") // serialized using ImmutableList serialization
+  private static final class StringAsImmutableList
+      extends ImmutableList<Character> {
+
+    private final String string;
+
+    StringAsImmutableList(String string) {
+      this.string = string;
+    }
+
+    @Override public boolean contains(@Nullable Object object) {
+      return indexOf(object) >= 0;
+    }
+
+    @Override public int indexOf(@Nullable Object object) {
+      return (object instanceof Character)
+          ? string.indexOf((Character) object) : -1;
+    }
+
+    @Override public int lastIndexOf(@Nullable Object object) {
+      return (object instanceof Character)
+          ? string.lastIndexOf((Character) object) : -1;
+    }
+
+    @Override public UnmodifiableListIterator<Character> listIterator(
+        int index) {
+      return new AbstractIndexedListIterator<Character>(size(), index) {
+        @Override protected Character get(int index) {
+          return string.charAt(index);
+        }
+      };
+    }
+
+    @Override public ImmutableList<Character> subList(
+        int fromIndex, int toIndex) {
+      return charactersOf(string.substring(fromIndex, toIndex));
+    }
+
+    @Override boolean isPartialView() {
+      return false;
+    }
+
+    @Override public Character get(int index) {
+      return string.charAt(index);
+    }
+
+    @Override public int size() {
+      return string.length();
+    }
+
+    @Override public boolean equals(@Nullable Object obj) {
+      if (!(obj instanceof List)) {
+        return false;
+      }
+      List<?> list = (List<?>) obj;
+      int n = string.length();
+      if (n != list.size()) {
+        return false;
+      }
+      Iterator<?> iterator = list.iterator();
+      for (int i = 0; i < n; i++) {
+        Object elem = iterator.next();
+        if (!(elem instanceof Character)
+            || ((Character) elem).charValue() != string.charAt(i)) {
+          return false;
+        }
+      }
+      return true;
+    }
+
+    int hash = 0;
+
+    @Override public int hashCode() {
+      int h = hash;
+      if (h == 0) {
+        h = 1;
+        for (int i = 0; i < string.length(); i++) {
+          h = h * 31 + string.charAt(i);
+        }
+        hash = h;
+      }
+      return h;
+    }
+  }
+
+  /**
+   * Returns a view of the specified {@code CharSequence} as a {@code
+   * List<Character>}, viewing {@code sequence} as a sequence of Unicode code
+   * units. The view does not support any modification operations, but reflects
+   * any changes to the underlying character sequence.
+   *
+   * @param sequence the character sequence to view as a {@code List} of
+   *        characters
+   * @return an {@code List<Character>} view of the character sequence
+   * @since 7.0
+   */
+  @Beta public static List<Character> charactersOf(CharSequence sequence) {
+    return new CharSequenceAsList(checkNotNull(sequence));
+  }
+
+  private static final class CharSequenceAsList
+      extends AbstractList<Character> {
+    private final CharSequence sequence;
+
+    CharSequenceAsList(CharSequence sequence) {
+      this.sequence = sequence;
+    }
+
+    @Override public Character get(int index) {
+      return sequence.charAt(index);
+    }
+
+    @Override public boolean contains(@Nullable Object o) {
+      return indexOf(o) >= 0;
+    }
+
+    @Override public int indexOf(@Nullable Object o) {
+      if (o instanceof Character) {
+        char c = (Character) o;
+        for (int i = 0; i < sequence.length(); i++) {
+          if (sequence.charAt(i) == c) {
+            return i;
+          }
+        }
+      }
+      return -1;
+    }
+
+    @Override public int lastIndexOf(@Nullable Object o) {
+      if (o instanceof Character) {
+        char c = ((Character) o).charValue();
+        for (int i = sequence.length() - 1; i >= 0; i--) {
+          if (sequence.charAt(i) == c) {
+            return i;
+          }
+        }
+      }
+      return -1;
+    }
+
+    @Override public int size() {
+      return sequence.length();
+    }
+
+    @Override public List<Character> subList(int fromIndex, int toIndex) {
+      return charactersOf(sequence.subSequence(fromIndex, toIndex));
+    }
+
+    @Override public int hashCode() {
+      int hash = 1;
+      for (int i = 0; i < sequence.length(); i++) {
+        hash = hash * 31 + sequence.charAt(i);
+      }
+      return hash;
+    }
+
+    @Override public boolean equals(@Nullable Object o) {
+      if (!(o instanceof List)) {
+        return false;
+      }
+      List<?> list = (List<?>) o;
+      int n = sequence.length();
+      if (n != list.size()) {
+        return false;
+      }
+      Iterator<?> iterator = list.iterator();
+      for (int i = 0; i < n; i++) {
+        Object elem = iterator.next();
+        if (!(elem instanceof Character)
+            || ((Character) elem).charValue() != sequence.charAt(i)) {
+          return false;
+        }
+      }
+      return true;
+    }
+  }
+
+  /**
+   * Returns a reversed view of the specified list. For example, {@code
+   * Lists.reverse(Arrays.asList(1, 2, 3))} returns a list containing {@code 3,
+   * 2, 1}. The returned list is backed by this list, so changes in the returned
+   * list are reflected in this list, and vice-versa. The returned list supports
+   * all of the optional list operations supported by this list.
+   *
+   * <p>The returned list is random-access if the specified list is random
+   * access.
+   *
+   * @since 7.0
+   */
+  public static <T> List<T> reverse(List<T> list) {
+    if (list instanceof ReverseList) {
+      return ((ReverseList<T>) list).getForwardList();
+    } else if (list instanceof RandomAccess) {
+      return new RandomAccessReverseList<T>(list);
+    } else {
+      return new ReverseList<T>(list);
+    }
+  }
+
+  private static class ReverseList<T> extends AbstractList<T> {
+    private final List<T> forwardList;
+
+    ReverseList(List<T> forwardList) {
+      this.forwardList = checkNotNull(forwardList);
+    }
+
+    List<T> getForwardList() {
+      return forwardList;
+    }
+
+    private int reverseIndex(int index) {
+      int size = size();
+      checkElementIndex(index, size);
+      return (size - 1) - index;
+    }
+
+    private int reversePosition(int index) {
+      int size = size();
+      checkPositionIndex(index, size);
+      return size - index;
+    }
+
+    @Override public void add(int index, @Nullable T element) {
+      forwardList.add(reversePosition(index), element);
+    }
+
+    @Override public void clear() {
+      forwardList.clear();
+    }
+
+    @Override public T remove(int index) {
+      return forwardList.remove(reverseIndex(index));
+    }
+
+    @Override protected void removeRange(int fromIndex, int toIndex) {
+      subList(fromIndex, toIndex).clear();
+    }
+
+    @Override public T set(int index, @Nullable T element) {
+      return forwardList.set(reverseIndex(index), element);
+    }
+
+    @Override public T get(int index) {
+      return forwardList.get(reverseIndex(index));
+    }
+
+    @Override public boolean isEmpty() {
+      return forwardList.isEmpty();
+    }
+
+    @Override public int size() {
+      return forwardList.size();
+    }
+
+    @Override public boolean contains(@Nullable Object o) {
+      return forwardList.contains(o);
+    }
+
+    @Override public boolean containsAll(Collection<?> c) {
+      return forwardList.containsAll(c);
+    }
+
+    @Override public List<T> subList(int fromIndex, int toIndex) {
+      checkPositionIndexes(fromIndex, toIndex, size());
+      return reverse(forwardList.subList(
+          reversePosition(toIndex), reversePosition(fromIndex)));
+    }
+
+    @Override public int indexOf(@Nullable Object o) {
+      int index = forwardList.lastIndexOf(o);
+      return (index >= 0) ? reverseIndex(index) : -1;
+    }
+
+    @Override public int lastIndexOf(@Nullable Object o) {
+      int index = forwardList.indexOf(o);
+      return (index >= 0) ? reverseIndex(index) : -1;
+    }
+
+    @Override public Iterator<T> iterator() {
+      return listIterator();
+    }
+
+    @Override public ListIterator<T> listIterator(int index) {
+      int start = reversePosition(index);
+      final ListIterator<T> forwardIterator = forwardList.listIterator(start);
+      return new ListIterator<T>() {
+
+        boolean canRemove;
+        boolean canSet;
+
+        @Override public void add(T e) {
+          forwardIterator.add(e);
+          forwardIterator.previous();
+          canSet = canRemove = false;
+        }
+
+        @Override public boolean hasNext() {
+          return forwardIterator.hasPrevious();
+        }
+
+        @Override public boolean hasPrevious() {
+          return forwardIterator.hasNext();
+        }
+
+        @Override public T next() {
+          if (!hasNext()) {
+            throw new NoSuchElementException();
+          }
+          canSet = canRemove = true;
+          return forwardIterator.previous();
+        }
+
+        @Override public int nextIndex() {
+          return reversePosition(forwardIterator.nextIndex());
+        }
+
+        @Override public T previous() {
+          if (!hasPrevious()) {
+            throw new NoSuchElementException();
+          }
+          canSet = canRemove = true;
+          return forwardIterator.next();
+        }
+
+        @Override public int previousIndex() {
+          return nextIndex() - 1;
+        }
+
+        @Override public void remove() {
+          checkState(canRemove);
+          forwardIterator.remove();
+          canRemove = canSet = false;
+        }
+
+        @Override public void set(T e) {
+          checkState(canSet);
+          forwardIterator.set(e);
+        }
+      };
+    }
+  }
+
+  private static class RandomAccessReverseList<T> extends ReverseList<T>
+      implements RandomAccess {
+    RandomAccessReverseList(List<T> forwardList) {
+      super(forwardList);
+    }
+  }
+
+  /**
+   * An implementation of {@link List#hashCode()}.
+   */
+  static int hashCodeImpl(List<?> list){
+    int hashCode = 1;
+    for (Object o : list) {
+      hashCode = 31 * hashCode + (o == null ? 0 : o.hashCode());
+    }
+    return hashCode;
+  }
+
+  /**
+   * An implementation of {@link List#equals(Object)}.
+   */
+  static boolean equalsImpl(List<?> list, @Nullable Object object) {
+    if (object == checkNotNull(list)) {
+      return true;
+    }
+    if (!(object instanceof List)) {
+      return false;
+    }
+
+    List<?> o = (List<?>) object;
+
+    return list.size() == o.size()
+        && Iterators.elementsEqual(list.iterator(), o.iterator());
+  }
+
+  /**
+   * An implementation of {@link List#addAll(int, Collection)}.
+   */
+  static <E> boolean addAllImpl(
+      List<E> list, int index, Iterable<? extends E> elements) {
+    boolean changed = false;
+    ListIterator<E> listIterator = list.listIterator(index);
+    for (E e : elements) {
+      listIterator.add(e);
+      changed = true;
+    }
+    return changed;
+  }
+
+  /**
+   * An implementation of {@link List#indexOf(Object)}.
+   */
+  static int indexOfImpl(List<?> list, @Nullable Object element){
+    ListIterator<?> listIterator = list.listIterator();
+    while (listIterator.hasNext()) {
+      if (Objects.equal(element, listIterator.next())) {
+        return listIterator.previousIndex();
+      }
+    }
+    return -1;
+  }
+
+  /**
+   * An implementation of {@link List#lastIndexOf(Object)}.
+   */
+  static int lastIndexOfImpl(List<?> list, @Nullable Object element){
+    ListIterator<?> listIterator = list.listIterator(list.size());
+    while (listIterator.hasPrevious()) {
+      if (Objects.equal(element, listIterator.previous())) {
+        return listIterator.nextIndex();
+      }
+    }
+    return -1;
+  }
+
+  /**
+   * Returns an implementation of {@link List#listIterator(int)}.
+   */
+  static <E> ListIterator<E> listIteratorImpl(List<E> list, int index) {
+    return new AbstractListWrapper<E>(list).listIterator(index);
+  }
+
+  /**
+   * An implementation of {@link List#subList(int, int)}.
+   */
+  static <E> List<E> subListImpl(
+      final List<E> list, int fromIndex, int toIndex) {
+    List<E> wrapper;
+    if (list instanceof RandomAccess) {
+      wrapper = new RandomAccessListWrapper<E>(list) {
+        @Override public ListIterator<E> listIterator(int index) {
+          return backingList.listIterator(index);
+        }
+
+        private static final long serialVersionUID = 0;
+      };
+    } else {
+      wrapper = new AbstractListWrapper<E>(list) {
+        @Override public ListIterator<E> listIterator(int index) {
+          return backingList.listIterator(index);
+        }
+
+        private static final long serialVersionUID = 0;
+      };
+    }
+    return wrapper.subList(fromIndex, toIndex);
+  }
+
+  private static class AbstractListWrapper<E> extends AbstractList<E> {
+    final List<E> backingList;
+
+    AbstractListWrapper(List<E> backingList) {
+      this.backingList = checkNotNull(backingList);
+    }
+
+    @Override public void add(int index, E element) {
+      backingList.add(index, element);
+    }
+
+    @Override public boolean addAll(int index, Collection<? extends E> c) {
+      return backingList.addAll(index, c);
+    }
+
+    @Override public E get(int index) {
+      return backingList.get(index);
+    }
+
+    @Override public E remove(int index) {
+      return backingList.remove(index);
+    }
+
+    @Override public E set(int index, E element) {
+      return backingList.set(index, element);
+    }
+
+    @Override public boolean contains(Object o) {
+      return backingList.contains(o);
+    }
+
+    @Override public int size() {
+      return backingList.size();
+    }
+  }
+
+  private static class RandomAccessListWrapper<E>
+      extends AbstractListWrapper<E> implements RandomAccess {
+    RandomAccessListWrapper(List<E> backingList) {
+      super(backingList);
+    }
+  }
+}
diff --git a/guava/src/com/google/common/collect/MapConstraint.java b/guava/src/com/google/common/collect/MapConstraint.java
new file mode 100644
index 0000000..b2f1e80
--- /dev/null
+++ b/guava/src/com/google/common/collect/MapConstraint.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+
+import javax.annotation.Nullable;
+
+/**
+ * A constraint on the keys and values that may be added to a {@code Map} or
+ * {@code Multimap}. For example, {@link MapConstraints#notNull()}, which
+ * prevents a map from including any null keys or values, could be implemented
+ * like this: <pre>   {@code
+ *
+ *   public void checkKeyValue(Object key, Object value) {
+ *     if (key == null || value == null) {
+ *       throw new NullPointerException();
+ *     }
+ *   }}</pre>
+ *
+ * In order to be effective, constraints should be deterministic; that is, they
+ * should not depend on state that can change (such as external state, random
+ * variables, and time) and should only depend on the value of the passed-in key
+ * and value. A non-deterministic constraint cannot reliably enforce that all
+ * the collection's elements meet the constraint, since the constraint is only
+ * enforced when elements are added.
+ *
+ * @author Mike Bostock
+ * @see MapConstraints
+ * @see Constraint
+ * @since 3.0
+ */
+@GwtCompatible
+@Beta
+public interface MapConstraint<K, V> {
+  /**
+   * Throws a suitable {@code RuntimeException} if the specified key or value is
+   * illegal. Typically this is either a {@link NullPointerException}, an
+   * {@link IllegalArgumentException}, or a {@link ClassCastException}, though
+   * an application-specific exception class may be used if appropriate.
+   */
+  void checkKeyValue(@Nullable K key, @Nullable V value);
+
+  /**
+   * Returns a brief human readable description of this constraint, such as
+   * "Not null".
+   */
+  @Override
+  String toString();
+}
diff --git a/guava/src/com/google/common/collect/MapConstraints.java b/guava/src/com/google/common/collect/MapConstraints.java
new file mode 100644
index 0000000..11351bb
--- /dev/null
+++ b/guava/src/com/google/common/collect/MapConstraints.java
@@ -0,0 +1,783 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.SortedSet;
+
+import javax.annotation.Nullable;
+
+/**
+ * Factory and utilities pertaining to the {@code MapConstraint} interface.
+ *
+ * @see Constraints
+ * @author Mike Bostock
+ * @since 3.0
+ */
+@Beta
+@GwtCompatible
+public final class MapConstraints {
+  private MapConstraints() {}
+
+  /**
+   * Returns a constraint that verifies that neither the key nor the value is
+   * null. If either is null, a {@link NullPointerException} is thrown.
+   */
+  public static MapConstraint<Object, Object> notNull() {
+    return NotNullMapConstraint.INSTANCE;
+  }
+
+  // enum singleton pattern
+  private enum NotNullMapConstraint implements MapConstraint<Object, Object> {
+    INSTANCE;
+
+    @Override
+    public void checkKeyValue(Object key, Object value) {
+      checkNotNull(key);
+      checkNotNull(value);
+    }
+
+    @Override public String toString() {
+      return "Not null";
+    }
+  }
+
+  /**
+   * Returns a constrained view of the specified map, using the specified
+   * constraint. Any operations that add new mappings will call the provided
+   * constraint. However, this method does not verify that existing mappings
+   * satisfy the constraint.
+   *
+   * <p>The returned map is not serializable.
+   *
+   * @param map the map to constrain
+   * @param constraint the constraint that validates added entries
+   * @return a constrained view of the specified map
+   */
+  public static <K, V> Map<K, V> constrainedMap(
+      Map<K, V> map, MapConstraint<? super K, ? super V> constraint) {
+    return new ConstrainedMap<K, V>(map, constraint);
+  }
+
+  /**
+   * Returns a constrained view of the specified multimap, using the specified
+   * constraint. Any operations that add new mappings will call the provided
+   * constraint. However, this method does not verify that existing mappings
+   * satisfy the constraint.
+   *
+   * <p>Note that the generated multimap's {@link Multimap#removeAll} and
+   * {@link Multimap#replaceValues} methods return collections that are not
+   * constrained.
+   *
+   * <p>The returned multimap is not serializable.
+   *
+   * @param multimap the multimap to constrain
+   * @param constraint the constraint that validates added entries
+   * @return a constrained view of the multimap
+   */
+  public static <K, V> Multimap<K, V> constrainedMultimap(
+      Multimap<K, V> multimap, MapConstraint<? super K, ? super V> constraint) {
+    return new ConstrainedMultimap<K, V>(multimap, constraint);
+  }
+
+  /**
+   * Returns a constrained view of the specified list multimap, using the
+   * specified constraint. Any operations that add new mappings will call the
+   * provided constraint. However, this method does not verify that existing
+   * mappings satisfy the constraint.
+   *
+   * <p>Note that the generated multimap's {@link Multimap#removeAll} and
+   * {@link Multimap#replaceValues} methods return collections that are not
+   * constrained.
+   *
+   * <p>The returned multimap is not serializable.
+   *
+   * @param multimap the multimap to constrain
+   * @param constraint the constraint that validates added entries
+   * @return a constrained view of the specified multimap
+   */
+  public static <K, V> ListMultimap<K, V> constrainedListMultimap(
+      ListMultimap<K, V> multimap,
+      MapConstraint<? super K, ? super V> constraint) {
+    return new ConstrainedListMultimap<K, V>(multimap, constraint);
+  }
+
+  /**
+   * Returns a constrained view of the specified set multimap, using the
+   * specified constraint. Any operations that add new mappings will call the
+   * provided constraint. However, this method does not verify that existing
+   * mappings satisfy the constraint.
+   *
+   * <p>Note that the generated multimap's {@link Multimap#removeAll} and
+   * {@link Multimap#replaceValues} methods return collections that are not
+   * constrained.
+   * <p>The returned multimap is not serializable.
+   *
+   * @param multimap the multimap to constrain
+   * @param constraint the constraint that validates added entries
+   * @return a constrained view of the specified multimap
+   */
+  public static <K, V> SetMultimap<K, V> constrainedSetMultimap(
+      SetMultimap<K, V> multimap,
+      MapConstraint<? super K, ? super V> constraint) {
+    return new ConstrainedSetMultimap<K, V>(multimap, constraint);
+  }
+
+  /**
+   * Returns a constrained view of the specified sorted-set multimap, using the
+   * specified constraint. Any operations that add new mappings will call the
+   * provided constraint. However, this method does not verify that existing
+   * mappings satisfy the constraint.
+   *
+   * <p>Note that the generated multimap's {@link Multimap#removeAll} and
+   * {@link Multimap#replaceValues} methods return collections that are not
+   * constrained.
+   * <p>The returned multimap is not serializable.
+   *
+   * @param multimap the multimap to constrain
+   * @param constraint the constraint that validates added entries
+   * @return a constrained view of the specified multimap
+   */
+  public static <K, V> SortedSetMultimap<K, V> constrainedSortedSetMultimap(
+      SortedSetMultimap<K, V> multimap,
+      MapConstraint<? super K, ? super V> constraint) {
+    return new ConstrainedSortedSetMultimap<K, V>(multimap, constraint);
+  }
+
+  /**
+   * Returns a constrained view of the specified entry, using the specified
+   * constraint. The {@link Entry#setValue} operation will be verified with the
+   * constraint.
+   *
+   * @param entry the entry to constrain
+   * @param constraint the constraint for the entry
+   * @return a constrained view of the specified entry
+   */
+  private static <K, V> Entry<K, V> constrainedEntry(
+      final Entry<K, V> entry,
+      final MapConstraint<? super K, ? super V> constraint) {
+    checkNotNull(entry);
+    checkNotNull(constraint);
+    return new ForwardingMapEntry<K, V>() {
+      @Override protected Entry<K, V> delegate() {
+        return entry;
+      }
+      @Override public V setValue(V value) {
+        constraint.checkKeyValue(getKey(), value);
+        return entry.setValue(value);
+      }
+    };
+  }
+
+  /**
+   * Returns a constrained view of the specified {@code asMap} entry, using the
+   * specified constraint. The {@link Entry#setValue} operation will be verified
+   * with the constraint, and the collection returned by {@link Entry#getValue}
+   * will be similarly constrained.
+   *
+   * @param entry the {@code asMap} entry to constrain
+   * @param constraint the constraint for the entry
+   * @return a constrained view of the specified entry
+   */
+  private static <K, V> Entry<K, Collection<V>> constrainedAsMapEntry(
+      final Entry<K, Collection<V>> entry,
+      final MapConstraint<? super K, ? super V> constraint) {
+    checkNotNull(entry);
+    checkNotNull(constraint);
+    return new ForwardingMapEntry<K, Collection<V>>() {
+      @Override protected Entry<K, Collection<V>> delegate() {
+        return entry;
+      }
+      @Override public Collection<V> getValue() {
+        return Constraints.constrainedTypePreservingCollection(
+            entry.getValue(), new Constraint<V>() {
+          @Override
+          public V checkElement(V value) {
+            constraint.checkKeyValue(getKey(), value);
+            return value;
+          }
+        });
+      }
+    };
+  }
+
+  /**
+   * Returns a constrained view of the specified set of {@code asMap} entries,
+   * using the specified constraint. The {@link Entry#setValue} operation will
+   * be verified with the constraint, and the collection returned by {@link
+   * Entry#getValue} will be similarly constrained. The {@code add} and {@code
+   * addAll} operations simply forward to the underlying set, which throws an
+   * {@link UnsupportedOperationException} per the multimap specification.
+   *
+   * @param entries the entries to constrain
+   * @param constraint the constraint for the entries
+   * @return a constrained view of the entries
+   */
+  private static <K, V> Set<Entry<K, Collection<V>>> constrainedAsMapEntries(
+      Set<Entry<K, Collection<V>>> entries,
+      MapConstraint<? super K, ? super V> constraint) {
+    return new ConstrainedAsMapEntries<K, V>(entries, constraint);
+  }
+
+  /**
+   * Returns a constrained view of the specified collection (or set) of entries,
+   * using the specified constraint. The {@link Entry#setValue} operation will
+   * be verified with the constraint, along with add operations on the returned
+   * collection. The {@code add} and {@code addAll} operations simply forward to
+   * the underlying collection, which throws an {@link
+   * UnsupportedOperationException} per the map and multimap specification.
+   *
+   * @param entries the entries to constrain
+   * @param constraint the constraint for the entries
+   * @return a constrained view of the specified entries
+   */
+  private static <K, V> Collection<Entry<K, V>> constrainedEntries(
+      Collection<Entry<K, V>> entries,
+      MapConstraint<? super K, ? super V> constraint) {
+    if (entries instanceof Set) {
+      return constrainedEntrySet((Set<Entry<K, V>>) entries, constraint);
+    }
+    return new ConstrainedEntries<K, V>(entries, constraint);
+  }
+
+  /**
+   * Returns a constrained view of the specified set of entries, using the
+   * specified constraint. The {@link Entry#setValue} operation will be verified
+   * with the constraint, along with add operations on the returned set. The
+   * {@code add} and {@code addAll} operations simply forward to the underlying
+   * set, which throws an {@link UnsupportedOperationException} per the map and
+   * multimap specification.
+   *
+   * <p>The returned multimap is not serializable.
+   *
+   * @param entries the entries to constrain
+   * @param constraint the constraint for the entries
+   * @return a constrained view of the specified entries
+   */
+  private static <K, V> Set<Entry<K, V>> constrainedEntrySet(
+      Set<Entry<K, V>> entries,
+      MapConstraint<? super K, ? super V> constraint) {
+    return new ConstrainedEntrySet<K, V>(entries, constraint);
+  }
+
+  /** @see MapConstraints#constrainedMap */
+  static class ConstrainedMap<K, V> extends ForwardingMap<K, V> {
+    private final Map<K, V> delegate;
+    final MapConstraint<? super K, ? super V> constraint;
+    private transient Set<Entry<K, V>> entrySet;
+
+    ConstrainedMap(
+        Map<K, V> delegate, MapConstraint<? super K, ? super V> constraint) {
+      this.delegate = checkNotNull(delegate);
+      this.constraint = checkNotNull(constraint);
+    }
+    @Override protected Map<K, V> delegate() {
+      return delegate;
+    }
+    @Override public Set<Entry<K, V>> entrySet() {
+      Set<Entry<K, V>> result = entrySet;
+      if (result == null) {
+        entrySet = result =
+            constrainedEntrySet(delegate.entrySet(), constraint);
+      }
+      return result;
+    }
+    @Override public V put(K key, V value) {
+      constraint.checkKeyValue(key, value);
+      return delegate.put(key, value);
+    }
+    @Override public void putAll(Map<? extends K, ? extends V> map) {
+      delegate.putAll(checkMap(map, constraint));
+    }
+  }
+
+  /**
+   * Returns a constrained view of the specified bimap, using the specified
+   * constraint. Any operations that modify the bimap will have the associated
+   * keys and values verified with the constraint.
+   *
+   * <p>The returned bimap is not serializable.
+   *
+   * @param map the bimap to constrain
+   * @param constraint the constraint that validates added entries
+   * @return a constrained view of the specified bimap
+   */
+  public static <K, V> BiMap<K, V> constrainedBiMap(
+      BiMap<K, V> map, MapConstraint<? super K, ? super V> constraint) {
+    return new ConstrainedBiMap<K, V>(map, null, constraint);
+  }
+
+  /** @see MapConstraints#constrainedBiMap */
+  private static class ConstrainedBiMap<K, V> extends ConstrainedMap<K, V>
+      implements BiMap<K, V> {
+    /*
+     * We could switch to racy single-check lazy init and remove volatile, but
+     * there's a downside. That's because this field is also written in the
+     * constructor. Without volatile, the constructor's write of the existing
+     * inverse BiMap could occur after inverse()'s read of the field's initial
+     * null value, leading inverse() to overwrite the existing inverse with a
+     * doubly indirect version. This wouldn't be catastrophic, but it's
+     * something to keep in mind if we make the change.
+     *
+     * Note that UnmodifiableBiMap *does* use racy single-check lazy init.
+     * TODO(cpovirk): pick one and standardize
+     */
+    volatile BiMap<V, K> inverse;
+
+    ConstrainedBiMap(BiMap<K, V> delegate, @Nullable BiMap<V, K> inverse,
+        MapConstraint<? super K, ? super V> constraint) {
+      super(delegate, constraint);
+      this.inverse = inverse;
+    }
+
+    @Override protected BiMap<K, V> delegate() {
+      return (BiMap<K, V>) super.delegate();
+    }
+
+    @Override
+    public V forcePut(K key, V value) {
+      constraint.checkKeyValue(key, value);
+      return delegate().forcePut(key, value);
+    }
+
+    @Override
+    public BiMap<V, K> inverse() {
+      if (inverse == null) {
+        inverse = new ConstrainedBiMap<V, K>(delegate().inverse(), this,
+            new InverseConstraint<V, K>(constraint));
+      }
+      return inverse;
+    }
+
+    @Override public Set<V> values() {
+      return delegate().values();
+    }
+  }
+
+  /** @see MapConstraints#constrainedBiMap */
+  private static class InverseConstraint<K, V> implements MapConstraint<K, V> {
+    final MapConstraint<? super V, ? super K> constraint;
+
+    public InverseConstraint(MapConstraint<? super V, ? super K> constraint) {
+      this.constraint = checkNotNull(constraint);
+    }
+    @Override
+    public void checkKeyValue(K key, V value) {
+      constraint.checkKeyValue(value, key);
+    }
+  }
+
+  /** @see MapConstraints#constrainedMultimap */
+  private static class ConstrainedMultimap<K, V>
+      extends ForwardingMultimap<K, V> {
+    final MapConstraint<? super K, ? super V> constraint;
+    final Multimap<K, V> delegate;
+    transient Collection<Entry<K, V>> entries;
+    transient Map<K, Collection<V>> asMap;
+
+    public ConstrainedMultimap(Multimap<K, V> delegate,
+        MapConstraint<? super K, ? super V> constraint) {
+      this.delegate = checkNotNull(delegate);
+      this.constraint = checkNotNull(constraint);
+    }
+
+    @Override protected Multimap<K, V> delegate() {
+      return delegate;
+    }
+
+    @Override public Map<K, Collection<V>> asMap() {
+      Map<K, Collection<V>> result = asMap;
+      if (result == null) {
+        final Map<K, Collection<V>> asMapDelegate = delegate.asMap();
+
+        asMap = result = new ForwardingMap<K, Collection<V>>() {
+          Set<Entry<K, Collection<V>>> entrySet;
+          Collection<Collection<V>> values;
+
+          @Override protected Map<K, Collection<V>> delegate() {
+            return asMapDelegate;
+          }
+
+          @Override public Set<Entry<K, Collection<V>>> entrySet() {
+            Set<Entry<K, Collection<V>>> result = entrySet;
+            if (result == null) {
+              entrySet = result = constrainedAsMapEntries(
+                  asMapDelegate.entrySet(), constraint);
+            }
+            return result;
+          }
+
+          @SuppressWarnings("unchecked")
+          @Override public Collection<V> get(Object key) {
+            try {
+              Collection<V> collection = ConstrainedMultimap.this.get((K) key);
+              return collection.isEmpty() ? null : collection;
+            } catch (ClassCastException e) {
+              return null; // key wasn't a K
+            }
+          }
+
+          @Override public Collection<Collection<V>> values() {
+            Collection<Collection<V>> result = values;
+            if (result == null) {
+              values = result = new ConstrainedAsMapValues<K, V>(
+                  delegate().values(), entrySet());
+            }
+            return result;
+          }
+
+          @Override public boolean containsValue(Object o) {
+            return values().contains(o);
+          }
+        };
+      }
+      return result;
+    }
+
+    @Override public Collection<Entry<K, V>> entries() {
+      Collection<Entry<K, V>> result = entries;
+      if (result == null) {
+        entries = result = constrainedEntries(delegate.entries(), constraint);
+      }
+      return result;
+    }
+
+    @Override public Collection<V> get(final K key) {
+      return Constraints.constrainedTypePreservingCollection(
+          delegate.get(key), new Constraint<V>() {
+        @Override
+        public V checkElement(V value) {
+          constraint.checkKeyValue(key, value);
+          return value;
+        }
+      });
+    }
+
+    @Override public boolean put(K key, V value) {
+      constraint.checkKeyValue(key, value);
+      return delegate.put(key, value);
+    }
+
+    @Override public boolean putAll(K key, Iterable<? extends V> values) {
+      return delegate.putAll(key, checkValues(key, values, constraint));
+    }
+
+    @Override public boolean putAll(
+        Multimap<? extends K, ? extends V> multimap) {
+      boolean changed = false;
+      for (Entry<? extends K, ? extends V> entry : multimap.entries()) {
+        changed |= put(entry.getKey(), entry.getValue());
+      }
+      return changed;
+    }
+
+    @Override public Collection<V> replaceValues(
+        K key, Iterable<? extends V> values) {
+      return delegate.replaceValues(key, checkValues(key, values, constraint));
+    }
+  }
+
+  /** @see ConstrainedMultimap#asMap */
+  private static class ConstrainedAsMapValues<K, V>
+      extends ForwardingCollection<Collection<V>> {
+    final Collection<Collection<V>> delegate;
+    final Set<Entry<K, Collection<V>>> entrySet;
+
+    /**
+     * @param entrySet map entries, linking each key with its corresponding
+     *     values, that already enforce the constraint
+     */
+    ConstrainedAsMapValues(Collection<Collection<V>> delegate,
+        Set<Entry<K, Collection<V>>> entrySet) {
+      this.delegate = delegate;
+      this.entrySet = entrySet;
+    }
+    @Override protected Collection<Collection<V>> delegate() {
+      return delegate;
+    }
+
+    @Override public Iterator<Collection<V>> iterator() {
+      final Iterator<Entry<K, Collection<V>>> iterator = entrySet.iterator();
+      return new Iterator<Collection<V>>() {
+        @Override
+        public boolean hasNext() {
+          return iterator.hasNext();
+        }
+        @Override
+        public Collection<V> next() {
+          return iterator.next().getValue();
+        }
+        @Override
+        public void remove() {
+          iterator.remove();
+        }
+      };
+    }
+
+    @Override public Object[] toArray() {
+      return standardToArray();
+    }
+    @Override public <T> T[] toArray(T[] array) {
+      return standardToArray(array);
+    }
+    @Override public boolean contains(Object o) {
+      return standardContains(o);
+    }
+    @Override public boolean containsAll(Collection<?> c) {
+      return standardContainsAll(c);
+    }
+    @Override public boolean remove(Object o) {
+      return standardRemove(o);
+    }
+    @Override public boolean removeAll(Collection<?> c) {
+      return standardRemoveAll(c);
+    }
+    @Override public boolean retainAll(Collection<?> c) {
+      return standardRetainAll(c);
+    }
+  }
+
+  /** @see MapConstraints#constrainedEntries */
+  private static class ConstrainedEntries<K, V>
+      extends ForwardingCollection<Entry<K, V>> {
+    final MapConstraint<? super K, ? super V> constraint;
+    final Collection<Entry<K, V>> entries;
+
+    ConstrainedEntries(Collection<Entry<K, V>> entries,
+        MapConstraint<? super K, ? super V> constraint) {
+      this.entries = entries;
+      this.constraint = constraint;
+    }
+    @Override protected Collection<Entry<K, V>> delegate() {
+      return entries;
+    }
+
+    @Override public Iterator<Entry<K, V>> iterator() {
+      final Iterator<Entry<K, V>> iterator = entries.iterator();
+      return new ForwardingIterator<Entry<K, V>>() {
+        @Override public Entry<K, V> next() {
+          return constrainedEntry(iterator.next(), constraint);
+        }
+        @Override protected Iterator<Entry<K, V>> delegate() {
+          return iterator;
+        }
+      };
+    }
+
+    // See Collections.CheckedMap.CheckedEntrySet for details on attacks.
+
+    @Override public Object[] toArray() {
+      return standardToArray();
+    }
+    @Override public <T> T[] toArray(T[] array) {
+      return standardToArray(array);
+    }
+    @Override public boolean contains(Object o) {
+      return Maps.containsEntryImpl(delegate(), o);
+    }
+    @Override public boolean containsAll(Collection<?> c) {
+      return standardContainsAll(c);
+    }
+    @Override public boolean remove(Object o) {
+      return Maps.removeEntryImpl(delegate(), o);
+    }
+    @Override public boolean removeAll(Collection<?> c) {
+      return standardRemoveAll(c);
+    }
+    @Override public boolean retainAll(Collection<?> c) {
+      return standardRetainAll(c);
+    }
+  }
+
+  /** @see MapConstraints#constrainedEntrySet */
+  static class ConstrainedEntrySet<K, V>
+      extends ConstrainedEntries<K, V> implements Set<Entry<K, V>> {
+    ConstrainedEntrySet(Set<Entry<K, V>> entries,
+        MapConstraint<? super K, ? super V> constraint) {
+      super(entries, constraint);
+    }
+
+    // See Collections.CheckedMap.CheckedEntrySet for details on attacks.
+
+    @Override public boolean equals(@Nullable Object object) {
+      return Sets.equalsImpl(this, object);
+    }
+
+    @Override public int hashCode() {
+      return Sets.hashCodeImpl(this);
+    }
+  }
+
+  /** @see MapConstraints#constrainedAsMapEntries */
+  static class ConstrainedAsMapEntries<K, V>
+      extends ForwardingSet<Entry<K, Collection<V>>> {
+    private final MapConstraint<? super K, ? super V> constraint;
+    private final Set<Entry<K, Collection<V>>> entries;
+
+    ConstrainedAsMapEntries(Set<Entry<K, Collection<V>>> entries,
+        MapConstraint<? super K, ? super V> constraint) {
+      this.entries = entries;
+      this.constraint = constraint;
+    }
+
+    @Override protected Set<Entry<K, Collection<V>>> delegate() {
+      return entries;
+    }
+
+    @Override public Iterator<Entry<K, Collection<V>>> iterator() {
+      final Iterator<Entry<K, Collection<V>>> iterator = entries.iterator();
+      return new ForwardingIterator<Entry<K, Collection<V>>>() {
+        @Override public Entry<K, Collection<V>> next() {
+          return constrainedAsMapEntry(iterator.next(), constraint);
+        }
+        @Override protected Iterator<Entry<K, Collection<V>>> delegate() {
+          return iterator;
+        }
+      };
+    }
+
+    // See Collections.CheckedMap.CheckedEntrySet for details on attacks.
+
+    @Override public Object[] toArray() {
+      return standardToArray();
+    }
+
+    @Override public <T> T[] toArray(T[] array) {
+      return standardToArray(array);
+    }
+
+    @Override public boolean contains(Object o) {
+      return Maps.containsEntryImpl(delegate(), o);
+    }
+
+    @Override public boolean containsAll(Collection<?> c) {
+      return standardContainsAll(c);
+    }
+
+    @Override public boolean equals(@Nullable Object object) {
+      return standardEquals(object);
+    }
+
+    @Override public int hashCode() {
+      return standardHashCode();
+    }
+
+    @Override public boolean remove(Object o) {
+      return Maps.removeEntryImpl(delegate(), o);
+    }
+
+    @Override public boolean removeAll(Collection<?> c) {
+      return standardRemoveAll(c);
+    }
+
+    @Override public boolean retainAll(Collection<?> c) {
+      return standardRetainAll(c);
+    }
+  }
+
+  private static class ConstrainedListMultimap<K, V>
+      extends ConstrainedMultimap<K, V> implements ListMultimap<K, V> {
+    ConstrainedListMultimap(ListMultimap<K, V> delegate,
+        MapConstraint<? super K, ? super V> constraint) {
+      super(delegate, constraint);
+    }
+    @Override public List<V> get(K key) {
+      return (List<V>) super.get(key);
+    }
+    @Override public List<V> removeAll(Object key) {
+      return (List<V>) super.removeAll(key);
+    }
+    @Override public List<V> replaceValues(
+        K key, Iterable<? extends V> values) {
+      return (List<V>) super.replaceValues(key, values);
+    }
+  }
+
+  private static class ConstrainedSetMultimap<K, V>
+      extends ConstrainedMultimap<K, V> implements SetMultimap<K, V> {
+    ConstrainedSetMultimap(SetMultimap<K, V> delegate,
+        MapConstraint<? super K, ? super V> constraint) {
+      super(delegate, constraint);
+    }
+    @Override public Set<V> get(K key) {
+      return (Set<V>) super.get(key);
+    }
+    @Override public Set<Map.Entry<K, V>> entries() {
+      return (Set<Map.Entry<K, V>>) super.entries();
+    }
+    @Override public Set<V> removeAll(Object key) {
+      return (Set<V>) super.removeAll(key);
+    }
+    @Override public Set<V> replaceValues(
+        K key, Iterable<? extends V> values) {
+      return (Set<V>) super.replaceValues(key, values);
+    }
+  }
+
+  private static class ConstrainedSortedSetMultimap<K, V>
+      extends ConstrainedSetMultimap<K, V> implements SortedSetMultimap<K, V> {
+    ConstrainedSortedSetMultimap(SortedSetMultimap<K, V> delegate,
+        MapConstraint<? super K, ? super V> constraint) {
+      super(delegate, constraint);
+    }
+    @Override public SortedSet<V> get(K key) {
+      return (SortedSet<V>) super.get(key);
+    }
+    @Override public SortedSet<V> removeAll(Object key) {
+      return (SortedSet<V>) super.removeAll(key);
+    }
+    @Override public SortedSet<V> replaceValues(
+        K key, Iterable<? extends V> values) {
+      return (SortedSet<V>) super.replaceValues(key, values);
+    }
+    @Override
+    public Comparator<? super V> valueComparator() {
+      return ((SortedSetMultimap<K, V>) delegate()).valueComparator();
+    }
+  }
+
+  private static <K, V> Collection<V> checkValues(K key,
+      Iterable<? extends V> values,
+      MapConstraint<? super K, ? super V> constraint) {
+    Collection<V> copy = Lists.newArrayList(values);
+    for (V value : copy) {
+      constraint.checkKeyValue(key, value);
+    }
+    return copy;
+  }
+
+  private static <K, V> Map<K, V> checkMap(Map<? extends K, ? extends V> map,
+      MapConstraint<? super K, ? super V> constraint) {
+    Map<K, V> copy = new LinkedHashMap<K, V>(map);
+    for (Entry<K, V> entry : copy.entrySet()) {
+      constraint.checkKeyValue(entry.getKey(), entry.getValue());
+    }
+    return copy;
+  }
+}
diff --git a/guava/src/com/google/common/collect/MapDifference.java b/guava/src/com/google/common/collect/MapDifference.java
new file mode 100644
index 0000000..484cf67
--- /dev/null
+++ b/guava/src/com/google/common/collect/MapDifference.java
@@ -0,0 +1,114 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Map;
+
+import javax.annotation.Nullable;
+
+/**
+ * An object representing the differences between two maps.
+ *
+ * @author Kevin Bourrillion
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible
+public interface MapDifference<K, V> {
+  /**
+   * Returns {@code true} if there are no differences between the two maps;
+   * that is, if the maps are equal.
+   */
+  boolean areEqual();
+
+  /**
+   * Returns an unmodifiable map containing the entries from the left map whose
+   * keys are not present in the right map.
+   */
+  Map<K, V> entriesOnlyOnLeft();
+
+  /**
+   * Returns an unmodifiable map containing the entries from the right map whose
+   * keys are not present in the left map.
+   */
+  Map<K, V> entriesOnlyOnRight();
+
+  /**
+   * Returns an unmodifiable map containing the entries that appear in both
+   * maps; that is, the intersection of the two maps.
+   */
+  Map<K, V> entriesInCommon();
+
+  /**
+   * Returns an unmodifiable map describing keys that appear in both maps, but
+   * with different values.
+   */
+  Map<K, ValueDifference<V>> entriesDiffering();
+
+  /**
+   * Compares the specified object with this instance for equality. Returns
+   * {@code true} if the given object is also a {@code MapDifference} and the
+   * values returned by the {@link #entriesOnlyOnLeft()}, {@link
+   * #entriesOnlyOnRight()}, {@link #entriesInCommon()} and {@link
+   * #entriesDiffering()} of the two instances are equal.
+   */
+  @Override
+  boolean equals(@Nullable Object object);
+
+  /**
+   * Returns the hash code for this instance. This is defined as the hash code
+   * of <pre>   {@code
+   *
+   *   Arrays.asList(entriesOnlyOnLeft(), entriesOnlyOnRight(),
+   *       entriesInCommon(), entriesDiffering())}</pre>
+   */
+  @Override
+  int hashCode();
+
+  /**
+   * A difference between the mappings from two maps with the same key. The
+   * {@link #leftValue} and {@link #rightValue} are not equal, and one but not
+   * both of them may be null.
+   *
+   * @since 2.0 (imported from Google Collections Library)
+   */
+  interface ValueDifference<V> {
+    /**
+     * Returns the value from the left map (possibly null).
+     */
+    V leftValue();
+
+    /**
+     * Returns the value from the right map (possibly null).
+     */
+    V rightValue();
+
+    /**
+     * Two instances are considered equal if their {@link #leftValue()}
+     * values are equal and their {@link #rightValue()} values are also equal.
+     */
+    @Override boolean equals(@Nullable Object other);
+
+    /**
+     * The hash code equals the value
+     * {@code Arrays.asList(leftValue(), rightValue()).hashCode()}.
+     */
+    @Override int hashCode();
+  }
+
+}
diff --git a/guava/src/com/google/common/collect/MapMaker.java b/guava/src/com/google/common/collect/MapMaker.java
new file mode 100644
index 0000000..9cec045
--- /dev/null
+++ b/guava/src/com/google/common/collect/MapMaker.java
@@ -0,0 +1,950 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Objects.firstNonNull;
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkState;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.base.Ascii;
+import com.google.common.base.Equivalence;
+import com.google.common.base.Equivalences;
+import com.google.common.base.Function;
+import com.google.common.base.Objects;
+import com.google.common.base.Ticker;
+import com.google.common.collect.ComputingConcurrentHashMap.ComputingMapAdapter;
+import com.google.common.collect.MapMakerInternalMap.Strength;
+
+import java.io.Serializable;
+import java.lang.ref.SoftReference;
+import java.lang.ref.WeakReference;
+import java.util.AbstractMap;
+import java.util.Collections;
+import java.util.ConcurrentModificationException;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.TimeUnit;
+
+import javax.annotation.Nullable;
+
+/**
+ * <p>A builder of {@link ConcurrentMap} instances having any combination of the following features:
+ *
+ * <ul>
+ * <li>keys or values automatically wrapped in {@linkplain WeakReference weak} or {@linkplain
+ *     SoftReference soft} references
+ * <li>least-recently-used eviction when a maximum size is exceeded
+ * <li>time-based expiration of entries, measured since last access or last write
+ * <li>notification of evicted (or otherwise removed) entries
+ * <li>on-demand computation of values for keys not already present
+ * </ul>
+ *
+ * <p>Usage example: <pre>   {@code
+ *
+ *   ConcurrentMap<Key, Graph> graphs = new MapMaker()
+ *       .concurrencyLevel(4)
+ *       .weakKeys()
+ *       .maximumSize(10000)
+ *       .expireAfterWrite(10, TimeUnit.MINUTES)
+ *       .makeComputingMap(
+ *           new Function<Key, Graph>() {
+ *             public Graph apply(Key key) {
+ *               return createExpensiveGraph(key);
+ *             }
+ *           });}</pre>
+ *
+ * These features are all optional; {@code new MapMaker().makeMap()} returns a valid concurrent map
+ * that behaves similarly to a {@link ConcurrentHashMap}.
+ *
+ * <p>The returned map is implemented as a hash table with similar performance characteristics to
+ * {@link ConcurrentHashMap}. It supports all optional operations of the {@code ConcurrentMap}
+ * interface. It does not permit null keys or values.
+ *
+ * <p><b>Note:</b> by default, the returned map uses equality comparisons (the {@link Object#equals
+ * equals} method) to determine equality for keys or values. However, if {@link #weakKeys} or {@link
+ * #softKeys} was specified, the map uses identity ({@code ==}) comparisons instead for keys.
+ * Likewise, if {@link #weakValues} or {@link #softValues} was specified, the map uses identity
+ * comparisons for values.
+ *
+ * <p>The view collections of the returned map have <i>weakly consistent iterators</i>. This means
+ * that they are safe for concurrent use, but if other threads modify the map after the iterator is
+ * created, it is undefined which of these changes, if any, are reflected in that iterator. These
+ * iterators never throw {@link ConcurrentModificationException}.
+ *
+ * <p>If soft or weak references were requested, it is possible for a key or value present in the
+ * the map to be reclaimed by the garbage collector. If this happens, the entry automatically
+ * disappears from the map. A partially-reclaimed entry is never exposed to the user. Any {@link
+ * java.util.Map.Entry} instance retrieved from the map's {@linkplain Map#entrySet entry set} is a
+ * snapshot of that entry's state at the time of retrieval; such entries do, however, support {@link
+ * java.util.Map.Entry#setValue}, which simply calls {@link Map#put} on the entry's key.
+ *
+ * <p>The maps produced by {@code MapMaker} are serializable, and the deserialized maps retain all
+ * the configuration properties of the original map. During deserialization, if the original map had
+ * used soft or weak references, the entries are reconstructed as they were, but it's not unlikely
+ * they'll be quickly garbage-collected before they are ever accessed.
+ *
+ * <p>{@code new MapMaker().weakKeys().makeMap()} is a recommended replacement for {@link
+ * java.util.WeakHashMap}, but note that it compares keys using object identity whereas {@code
+ * WeakHashMap} uses {@link Object#equals}.
+ *
+ * @author Bob Lee
+ * @author Charles Fry
+ * @author Kevin Bourrillion
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible(emulated = true)
+public final class MapMaker extends GenericMapMaker<Object, Object> {
+  private static final int DEFAULT_INITIAL_CAPACITY = 16;
+  private static final int DEFAULT_CONCURRENCY_LEVEL = 4;
+  private static final int DEFAULT_EXPIRATION_NANOS = 0;
+
+  static final int UNSET_INT = -1;
+
+  // TODO(kevinb): dispense with this after benchmarking
+  boolean useCustomMap;
+
+  int initialCapacity = UNSET_INT;
+  int concurrencyLevel = UNSET_INT;
+  int maximumSize = UNSET_INT;
+
+  Strength keyStrength;
+  Strength valueStrength;
+
+  long expireAfterWriteNanos = UNSET_INT;
+  long expireAfterAccessNanos = UNSET_INT;
+
+  RemovalCause nullRemovalCause;
+
+  Equivalence<Object> keyEquivalence;
+  Equivalence<Object> valueEquivalence;
+
+  Ticker ticker;
+
+  /**
+   * Constructs a new {@code MapMaker} instance with default settings, including strong keys, strong
+   * values, and no automatic eviction of any kind.
+   */
+  public MapMaker() {}
+
+  private boolean useNullMap() {
+    return (nullRemovalCause == null);
+  }
+
+  /**
+   * Sets a custom {@code Equivalence} strategy for comparing keys.
+   *
+   * <p>By default, the map uses {@link Equivalences#identity} to determine key equality when
+   * {@link #weakKeys} or {@link #softKeys} is specified, and {@link Equivalences#equals()}
+   * otherwise.
+   */
+  @GwtIncompatible("To be supported")
+  @Override
+  MapMaker keyEquivalence(Equivalence<Object> equivalence) {
+    checkState(keyEquivalence == null, "key equivalence was already set to %s", keyEquivalence);
+    keyEquivalence = checkNotNull(equivalence);
+    this.useCustomMap = true;
+    return this;
+  }
+
+  Equivalence<Object> getKeyEquivalence() {
+    return firstNonNull(keyEquivalence, getKeyStrength().defaultEquivalence());
+  }
+
+  /**
+   * Sets a custom {@code Equivalence} strategy for comparing values.
+   *
+   * <p>By default, the map uses {@link Equivalences#identity} to determine value equality when
+   * {@link #weakValues} or {@link #softValues} is specified, and {@link Equivalences#equals()}
+   * otherwise.
+   */
+  @GwtIncompatible("To be supported")
+  @Override
+  MapMaker valueEquivalence(Equivalence<Object> equivalence) {
+    checkState(valueEquivalence == null,
+        "value equivalence was already set to %s", valueEquivalence);
+    this.valueEquivalence = checkNotNull(equivalence);
+    this.useCustomMap = true;
+    return this;
+  }
+
+  Equivalence<Object> getValueEquivalence() {
+    return firstNonNull(valueEquivalence, getValueStrength().defaultEquivalence());
+  }
+
+  /**
+   * Sets the minimum total size for the internal hash tables. For example, if the initial capacity
+   * is {@code 60}, and the concurrency level is {@code 8}, then eight segments are created, each
+   * having a hash table of size eight. Providing a large enough estimate at construction time
+   * avoids the need for expensive resizing operations later, but setting this value unnecessarily
+   * high wastes memory.
+   *
+   * @throws IllegalArgumentException if {@code initialCapacity} is negative
+   * @throws IllegalStateException if an initial capacity was already set
+   */
+  @Override
+  public MapMaker initialCapacity(int initialCapacity) {
+    checkState(this.initialCapacity == UNSET_INT, "initial capacity was already set to %s",
+        this.initialCapacity);
+    checkArgument(initialCapacity >= 0);
+    this.initialCapacity = initialCapacity;
+    return this;
+  }
+
+  int getInitialCapacity() {
+    return (initialCapacity == UNSET_INT) ? DEFAULT_INITIAL_CAPACITY : initialCapacity;
+  }
+
+  /**
+   * Specifies the maximum number of entries the map may contain. Note that the map <b>may evict an
+   * entry before this limit is exceeded</b>. As the map size grows close to the maximum, the map
+   * evicts entries that are less likely to be used again. For example, the map may evict an entry
+   * because it hasn't been used recently or very often.
+   *
+   * <p>When {@code size} is zero, elements can be successfully added to the map, but are evicted
+   * immediately. This has the same effect as invoking {@link #expireAfterWrite
+   * expireAfterWrite}{@code (0, unit)} or {@link #expireAfterAccess expireAfterAccess}{@code (0,
+   * unit)}. It can be useful in testing, or to disable caching temporarily without a code change.
+   *
+   * <p>Caching functionality in {@code MapMaker} is being moved to
+   * {@link com.google.common.cache.CacheBuilder}.
+   *
+   * @param size the maximum size of the map
+   * @throws IllegalArgumentException if {@code size} is negative
+   * @throws IllegalStateException if a maximum size was already set
+   * @deprecated Caching functionality in {@code MapMaker} is being moved to
+   *     {@link com.google.common.cache.CacheBuilder}, with {@link #maximumSize} being
+   *     replaced by {@link com.google.common.cache.CacheBuilder#maximumSize}.
+   */
+  @Deprecated
+  @Override
+  MapMaker maximumSize(int size) {
+    checkState(this.maximumSize == UNSET_INT, "maximum size was already set to %s",
+        this.maximumSize);
+    checkArgument(size >= 0, "maximum size must not be negative");
+    this.maximumSize = size;
+    this.useCustomMap = true;
+    if (maximumSize == 0) {
+      // SIZE trumps EXPIRED
+      this.nullRemovalCause = RemovalCause.SIZE;
+    }
+    return this;
+  }
+
+  /**
+   * Guides the allowed concurrency among update operations. Used as a hint for internal sizing. The
+   * table is internally partitioned to try to permit the indicated number of concurrent updates
+   * without contention. Because assignment of entries to these partitions is not necessarily
+   * uniform, the actual concurrency observed may vary. Ideally, you should choose a value to
+   * accommodate as many threads as will ever concurrently modify the table. Using a significantly
+   * higher value than you need can waste space and time, and a significantly lower value can lead
+   * to thread contention. But overestimates and underestimates within an order of magnitude do not
+   * usually have much noticeable impact. A value of one permits only one thread to modify the map
+   * at a time, but since read operations can proceed concurrently, this still yields higher
+   * concurrency than full synchronization. Defaults to 4.
+   *
+   * <p><b>Note:</b> Prior to Guava release 9.0, the default was 16. It is possible the default will
+   * change again in the future. If you care about this value, you should always choose it
+   * explicitly.
+   *
+   * @throws IllegalArgumentException if {@code concurrencyLevel} is nonpositive
+   * @throws IllegalStateException if a concurrency level was already set
+   */
+  @Override
+  public MapMaker concurrencyLevel(int concurrencyLevel) {
+    checkState(this.concurrencyLevel == UNSET_INT, "concurrency level was already set to %s",
+        this.concurrencyLevel);
+    checkArgument(concurrencyLevel > 0);
+    this.concurrencyLevel = concurrencyLevel;
+    return this;
+  }
+
+  int getConcurrencyLevel() {
+    return (concurrencyLevel == UNSET_INT) ? DEFAULT_CONCURRENCY_LEVEL : concurrencyLevel;
+  }
+
+  /**
+   * Specifies that each key (not value) stored in the map should be strongly referenced.
+   *
+   * @throws IllegalStateException if the key strength was already set
+   */
+  @Override
+  MapMaker strongKeys() {
+    return setKeyStrength(Strength.STRONG);
+  }
+
+  /**
+   * Specifies that each key (not value) stored in the map should be wrapped in a {@link
+   * WeakReference} (by default, strong references are used).
+   *
+   * <p><b>Warning:</b> when this method is used, the resulting map will use identity ({@code ==})
+   * comparison to determine equality of keys, which is a technical violation of the {@link Map}
+   * specification, and may not be what you expect.
+   *
+   * @throws IllegalStateException if the key strength was already set
+   * @see WeakReference
+   */
+  @GwtIncompatible("java.lang.ref.WeakReference")
+  @Override
+  public MapMaker weakKeys() {
+    return setKeyStrength(Strength.WEAK);
+  }
+
+  /**
+   * <b>This method is broken.</b> Maps with soft keys offer no functional advantage over maps with
+   * weak keys, and they waste memory by keeping unreachable elements in the map. If your goal is to
+   * create a memory-sensitive map, then consider using soft values instead.
+   *
+   * <p>Specifies that each key (not value) stored in the map should be wrapped in a
+   * {@link SoftReference} (by default, strong references are used). Softly-referenced objects will
+   * be garbage-collected in a <i>globally</i> least-recently-used manner, in response to memory
+   * demand.
+   *
+   * <p><b>Warning:</b> when this method is used, the resulting map will use identity ({@code ==})
+   * comparison to determine equality of keys, which is a technical violation of the {@link Map}
+   * specification, and may not be what you expect.
+   *
+   * @throws IllegalStateException if the key strength was already set
+   * @see SoftReference
+   * @deprecated use {@link #softValues} to create a memory-sensitive map, or {@link #weakKeys} to
+   *     create a map that doesn't hold strong references to the keys.
+   *     <b>This method is scheduled for deletion in January 2013.</b>
+   */
+  @Deprecated
+  @GwtIncompatible("java.lang.ref.SoftReference")
+  @Override
+  public MapMaker softKeys() {
+    return setKeyStrength(Strength.SOFT);
+  }
+
+  MapMaker setKeyStrength(Strength strength) {
+    checkState(keyStrength == null, "Key strength was already set to %s", keyStrength);
+    keyStrength = checkNotNull(strength);
+    if (strength != Strength.STRONG) {
+      // STRONG could be used during deserialization.
+      useCustomMap = true;
+    }
+    return this;
+  }
+
+  Strength getKeyStrength() {
+    return firstNonNull(keyStrength, Strength.STRONG);
+  }
+
+  /**
+   * Specifies that each value (not key) stored in the map should be strongly referenced.
+   *
+   * @throws IllegalStateException if the value strength was already set
+   */
+  @Override
+  MapMaker strongValues() {
+    return setValueStrength(Strength.STRONG);
+  }
+
+  /**
+   * Specifies that each value (not key) stored in the map should be wrapped in a
+   * {@link WeakReference} (by default, strong references are used).
+   *
+   * <p>Weak values will be garbage collected once they are weakly reachable. This makes them a poor
+   * candidate for caching; consider {@link #softValues} instead.
+   *
+   * <p><b>Warning:</b> when this method is used, the resulting map will use identity ({@code ==})
+   * comparison to determine equality of values. This technically violates the specifications of
+   * the methods {@link Map#containsValue containsValue},
+   * {@link ConcurrentMap#remove(Object, Object) remove(Object, Object)} and
+   * {@link ConcurrentMap#replace(Object, Object, Object) replace(K, V, V)}, and may not be what you
+   * expect.
+   *
+   * @throws IllegalStateException if the value strength was already set
+   * @see WeakReference
+   */
+  @GwtIncompatible("java.lang.ref.WeakReference")
+  @Override
+  public MapMaker weakValues() {
+    return setValueStrength(Strength.WEAK);
+  }
+
+  /**
+   * Specifies that each value (not key) stored in the map should be wrapped in a
+   * {@link SoftReference} (by default, strong references are used). Softly-referenced objects will
+   * be garbage-collected in a <i>globally</i> least-recently-used manner, in response to memory
+   * demand.
+   *
+   * <p><b>Warning:</b> in most circumstances it is better to set a per-cache {@linkplain
+   * #maximumSize maximum size} instead of using soft references. You should only use this method if
+   * you are well familiar with the practical consequences of soft references.
+   *
+   * <p><b>Warning:</b> when this method is used, the resulting map will use identity ({@code ==})
+   * comparison to determine equality of values. This technically violates the specifications of
+   * the methods {@link Map#containsValue containsValue},
+   * {@link ConcurrentMap#remove(Object, Object) remove(Object, Object)} and
+   * {@link ConcurrentMap#replace(Object, Object, Object) replace(K, V, V)}, and may not be what you
+   * expect.
+   *
+   * @throws IllegalStateException if the value strength was already set
+   * @see SoftReference
+   */
+  @GwtIncompatible("java.lang.ref.SoftReference")
+  @Override
+  public MapMaker softValues() {
+    return setValueStrength(Strength.SOFT);
+  }
+
+  MapMaker setValueStrength(Strength strength) {
+    checkState(valueStrength == null, "Value strength was already set to %s", valueStrength);
+    valueStrength = checkNotNull(strength);
+    if (strength != Strength.STRONG) {
+      // STRONG could be used during deserialization.
+      useCustomMap = true;
+    }
+    return this;
+  }
+
+  Strength getValueStrength() {
+    return firstNonNull(valueStrength, Strength.STRONG);
+  }
+
+  /**
+   * Old name of {@link #expireAfterWrite}.
+   *
+   * @deprecated Caching functionality in {@code MapMaker} is being moved to
+   *     {@link com.google.common.cache.CacheBuilder}. Functionality equivalent to
+   *     {@link MapMaker#expiration} is provided by
+   *     {@link com.google.common.cache.CacheBuilder#expireAfterWrite}.
+   *     <b>This method is scheduled for deletion in July 2012.</b>
+   */
+  @Deprecated
+  @Override
+  public
+  MapMaker expiration(long duration, TimeUnit unit) {
+    return expireAfterWrite(duration, unit);
+  }
+
+  /**
+   * Specifies that each entry should be automatically removed from the map once a fixed duration
+   * has elapsed after the entry's creation, or the most recent replacement of its value.
+   *
+   * <p>When {@code duration} is zero, elements can be successfully added to the map, but are
+   * evicted immediately. This has a very similar effect to invoking {@link #maximumSize
+   * maximumSize}{@code (0)}. It can be useful in testing, or to disable caching temporarily without
+   * a code change.
+   *
+   * <p>Expired entries may be counted by {@link Map#size}, but will never be visible to read or
+   * write operations. Expired entries are currently cleaned up during write operations, or during
+   * occasional read operations in the absense of writes; though this behavior may change in the
+   * future.
+   *
+   * @param duration the length of time after an entry is created that it should be automatically
+   *     removed
+   * @param unit the unit that {@code duration} is expressed in
+   * @throws IllegalArgumentException if {@code duration} is negative
+   * @throws IllegalStateException if the time to live or time to idle was already set
+   * @deprecated Caching functionality in {@code MapMaker} is being moved to
+   *     {@link com.google.common.cache.CacheBuilder}, with {@link #expireAfterWrite} being
+   *     replaced by {@link com.google.common.cache.CacheBuilder#expireAfterWrite}.
+   */
+  @Deprecated
+  @Override
+  MapMaker expireAfterWrite(long duration, TimeUnit unit) {
+    checkExpiration(duration, unit);
+    this.expireAfterWriteNanos = unit.toNanos(duration);
+    if (duration == 0 && this.nullRemovalCause == null) {
+      // SIZE trumps EXPIRED
+      this.nullRemovalCause = RemovalCause.EXPIRED;
+    }
+    useCustomMap = true;
+    return this;
+  }
+
+  private void checkExpiration(long duration, TimeUnit unit) {
+    checkState(expireAfterWriteNanos == UNSET_INT, "expireAfterWrite was already set to %s ns",
+        expireAfterWriteNanos);
+    checkState(expireAfterAccessNanos == UNSET_INT, "expireAfterAccess was already set to %s ns",
+        expireAfterAccessNanos);
+    checkArgument(duration >= 0, "duration cannot be negative: %s %s", duration, unit);
+  }
+
+  long getExpireAfterWriteNanos() {
+    return (expireAfterWriteNanos == UNSET_INT) ? DEFAULT_EXPIRATION_NANOS : expireAfterWriteNanos;
+  }
+
+  /**
+   * Specifies that each entry should be automatically removed from the map once a fixed duration
+   * has elapsed after the entry's last read or write access.
+   *
+   * <p>When {@code duration} is zero, elements can be successfully added to the map, but are
+   * evicted immediately. This has a very similar effect to invoking {@link #maximumSize
+   * maximumSize}{@code (0)}. It can be useful in testing, or to disable caching temporarily without
+   * a code change.
+   *
+   * <p>Expired entries may be counted by {@link Map#size}, but will never be visible to read or
+   * write operations. Expired entries are currently cleaned up during write operations, or during
+   * occasional read operations in the absense of writes; though this behavior may change in the
+   * future.
+   *
+   * @param duration the length of time after an entry is last accessed that it should be
+   *     automatically removed
+   * @param unit the unit that {@code duration} is expressed in
+   * @throws IllegalArgumentException if {@code duration} is negative
+   * @throws IllegalStateException if the time to idle or time to live was already set
+   * @deprecated Caching functionality in {@code MapMaker} is being moved to
+   *     {@link com.google.common.cache.CacheBuilder}, with {@link #expireAfterAccess} being
+   *     replaced by {@link com.google.common.cache.CacheBuilder#expireAfterAccess}.
+   */
+  @Deprecated
+  @GwtIncompatible("To be supported")
+  @Override
+  MapMaker expireAfterAccess(long duration, TimeUnit unit) {
+    checkExpiration(duration, unit);
+    this.expireAfterAccessNanos = unit.toNanos(duration);
+    if (duration == 0 && this.nullRemovalCause == null) {
+      // SIZE trumps EXPIRED
+      this.nullRemovalCause = RemovalCause.EXPIRED;
+    }
+    useCustomMap = true;
+    return this;
+  }
+
+  long getExpireAfterAccessNanos() {
+    return (expireAfterAccessNanos == UNSET_INT)
+        ? DEFAULT_EXPIRATION_NANOS : expireAfterAccessNanos;
+  }
+
+  Ticker getTicker() {
+    return firstNonNull(ticker, Ticker.systemTicker());
+  }
+
+  /**
+   * Specifies a listener instance, which all maps built using this {@code MapMaker} will notify
+   * each time an entry is removed from the map by any means.
+   *
+   * <p>Each map built by this map maker after this method is called invokes the supplied listener
+   * after removing an element for any reason (see removal causes in {@link RemovalCause}). It will
+   * invoke the listener during invocations of any of that map's public methods (even read-only
+   * methods).
+   *
+   * <p><b>Important note:</b> Instead of returning <i>this</i> as a {@code MapMaker} instance,
+   * this method returns {@code GenericMapMaker<K, V>}. From this point on, either the original
+   * reference or the returned reference may be used to complete configuration and build the map,
+   * but only the "generic" one is type-safe. That is, it will properly prevent you from building
+   * maps whose key or value types are incompatible with the types accepted by the listener already
+   * provided; the {@code MapMaker} type cannot do this. For best results, simply use the standard
+   * method-chaining idiom, as illustrated in the documentation at top, configuring a {@code
+   * MapMaker} and building your {@link Map} all in a single statement.
+   *
+   * <p><b>Warning:</b> if you ignore the above advice, and use this {@code MapMaker} to build a map
+   * or cache whose key or value type is incompatible with the listener, you will likely experience
+   * a {@link ClassCastException} at some <i>undefined</i> point in the future.
+   *
+   * @throws IllegalStateException if a removal listener was already set
+   * @deprecated Caching functionality in {@code MapMaker} is being moved to
+   *     {@link com.google.common.cache.CacheBuilder}, with {@link #removalListener} being
+   *     replaced by {@link com.google.common.cache.CacheBuilder#removalListener}.
+   */
+  @Deprecated
+  @GwtIncompatible("To be supported")
+  <K, V> GenericMapMaker<K, V> removalListener(RemovalListener<K, V> listener) {
+    checkState(this.removalListener == null);
+
+    // safely limiting the kinds of maps this can produce
+    @SuppressWarnings("unchecked")
+    GenericMapMaker<K, V> me = (GenericMapMaker<K, V>) this;
+    me.removalListener = checkNotNull(listener);
+    useCustomMap = true;
+    return me;
+  }
+
+  /**
+   * Builds a thread-safe map, without on-demand computation of values. This method does not alter
+   * the state of this {@code MapMaker} instance, so it can be invoked again to create multiple
+   * independent maps.
+   *
+   * <p>The bulk operations {@code putAll}, {@code equals}, and {@code clear} are not guaranteed to
+   * be performed atomically on the returned map. Additionally, {@code size} and {@code
+   * containsValue} are implemented as bulk read operations, and thus may fail to observe concurrent
+   * writes.
+   *
+   * @return a serializable concurrent map having the requested features
+   */
+  @Override
+  public <K, V> ConcurrentMap<K, V> makeMap() {
+    if (!useCustomMap) {
+      return new ConcurrentHashMap<K, V>(getInitialCapacity(), 0.75f, getConcurrencyLevel());
+    }
+    return (nullRemovalCause == null)
+        ? new MapMakerInternalMap<K, V>(this)
+        : new NullConcurrentMap<K, V>(this);
+  }
+
+  /**
+   * Returns a MapMakerInternalMap for the benefit of internal callers that use features of
+   * that class not exposed through ConcurrentMap.
+   */
+  @Override
+  @GwtIncompatible("MapMakerInternalMap")
+  <K, V> MapMakerInternalMap<K, V> makeCustomMap() {
+    return new MapMakerInternalMap<K, V>(this);
+  }
+
+  /**
+   * Builds a map that supports atomic, on-demand computation of values. {@link Map#get} either
+   * returns an already-computed value for the given key, atomically computes it using the supplied
+   * function, or, if another thread is currently computing the value for this key, simply waits for
+   * that thread to finish and returns its computed value. Note that the function may be executed
+   * concurrently by multiple threads, but only for distinct keys.
+   *
+   * <p>New code should use {@link com.google.common.cache.CacheBuilder}, which supports
+   * {@linkplain com.google.common.cache.CacheStats statistics} collection, introduces the
+   * {@link com.google.common.cache.CacheLoader} interface for loading entries into the cache
+   * (allowing checked exceptions to be thrown in the process), and more cleanly separates
+   * computation from the cache's {@code Map} view.
+   *
+   * <p>If an entry's value has not finished computing yet, query methods besides {@code get} return
+   * immediately as if an entry doesn't exist. In other words, an entry isn't externally visible
+   * until the value's computation completes.
+   *
+   * <p>{@link Map#get} on the returned map will never return {@code null}. It may throw:
+   *
+   * <ul>
+   * <li>{@link NullPointerException} if the key is null or the computing function returns a null
+   *     result
+   * <li>{@link ComputationException} if an exception was thrown by the computing function. If that
+   * exception is already of type {@link ComputationException} it is propagated directly; otherwise
+   * it is wrapped.
+   * </ul>
+   *
+   * <p><b>Note:</b> Callers of {@code get} <i>must</i> ensure that the key argument is of type
+   * {@code K}. The {@code get} method accepts {@code Object}, so the key type is not checked at
+   * compile time. Passing an object of a type other than {@code K} can result in that object being
+   * unsafely passed to the computing function as type {@code K}, and unsafely stored in the map.
+   *
+   * <p>If {@link Map#put} is called before a computation completes, other threads waiting on the
+   * computation will wake up and return the stored value.
+   *
+   * <p>This method does not alter the state of this {@code MapMaker} instance, so it can be invoked
+   * again to create multiple independent maps.
+   *
+   * <p>Insertion, removal, update, and access operations on the returned map safely execute
+   * concurrently by multiple threads. Iterators on the returned map are weakly consistent,
+   * returning elements reflecting the state of the map at some point at or since the creation of
+   * the iterator. They do not throw {@link ConcurrentModificationException}, and may proceed
+   * concurrently with other operations.
+   *
+   * <p>The bulk operations {@code putAll}, {@code equals}, and {@code clear} are not guaranteed to
+   * be performed atomically on the returned map. Additionally, {@code size} and {@code
+   * containsValue} are implemented as bulk read operations, and thus may fail to observe concurrent
+   * writes.
+   *
+   * @param computingFunction the function used to compute new values
+   * @return a serializable concurrent map having the requested features
+   * @deprecated Caching functionality in {@code MapMaker} is being moved to
+   *     {@link com.google.common.cache.CacheBuilder}, with {@link #makeComputingMap} being replaced
+   *     by {@link com.google.common.cache.CacheBuilder#build}. Note that uses of
+   *     {@link #makeComputingMap} with {@code AtomicLong} values can often be migrated to
+   *     {@link AtomicLongMap}.
+   *     <b>This method is scheduled for deletion in February 2013.</b>
+   *
+   */
+  @Deprecated
+  @Override
+  public <K, V> ConcurrentMap<K, V> makeComputingMap(
+      Function<? super K, ? extends V> computingFunction) {
+    return useNullMap()
+        ? new ComputingMapAdapter<K, V>(this, computingFunction)
+        : new NullComputingConcurrentMap<K, V>(this, computingFunction);
+  }
+
+  /**
+   * Returns a string representation for this MapMaker instance. The exact form of the returned
+   * string is not specificed.
+   */
+  @Override
+  public String toString() {
+    Objects.ToStringHelper s = Objects.toStringHelper(this);
+    if (initialCapacity != UNSET_INT) {
+      s.add("initialCapacity", initialCapacity);
+    }
+    if (concurrencyLevel != UNSET_INT) {
+      s.add("concurrencyLevel", concurrencyLevel);
+    }
+    if (maximumSize != UNSET_INT) {
+      s.add("maximumSize", maximumSize);
+    }
+    if (expireAfterWriteNanos != UNSET_INT) {
+      s.add("expireAfterWrite", expireAfterWriteNanos + "ns");
+    }
+    if (expireAfterAccessNanos != UNSET_INT) {
+      s.add("expireAfterAccess", expireAfterAccessNanos + "ns");
+    }
+    if (keyStrength != null) {
+      s.add("keyStrength", Ascii.toLowerCase(keyStrength.toString()));
+    }
+    if (valueStrength != null) {
+      s.add("valueStrength", Ascii.toLowerCase(valueStrength.toString()));
+    }
+    if (keyEquivalence != null) {
+      s.addValue("keyEquivalence");
+    }
+    if (valueEquivalence != null) {
+      s.addValue("valueEquivalence");
+    }
+    if (removalListener != null) {
+      s.addValue("removalListener");
+    }
+    return s.toString();
+  }
+
+  /**
+   * An object that can receive a notification when an entry is removed from a map. The removal
+   * resulting in notification could have occured to an entry being manually removed or replaced, or
+   * due to eviction resulting from timed expiration, exceeding a maximum size, or garbage
+   * collection.
+   *
+   * <p>An instance may be called concurrently by multiple threads to process different entries.
+   * Implementations of this interface should avoid performing blocking calls or synchronizing on
+   * shared resources.
+   *
+   * @param <K> the most general type of keys this listener can listen for; for
+   *     example {@code Object} if any key is acceptable
+   * @param <V> the most general type of values this listener can listen for; for
+   *     example {@code Object} if any key is acceptable
+   */
+  interface RemovalListener<K, V> {
+    /**
+     * Notifies the listener that a removal occurred at some point in the past.
+     */
+    void onRemoval(RemovalNotification<K, V> notification);
+  }
+
+  /**
+   * A notification of the removal of a single entry. The key or value may be null if it was already
+   * garbage collected.
+   *
+   * <p>Like other {@code Map.Entry} instances associated with MapMaker, this class holds strong
+   * references to the key and value, regardless of the type of references the map may be using.
+   */
+  static final class RemovalNotification<K, V> extends ImmutableEntry<K, V> {
+    private static final long serialVersionUID = 0;
+
+    private final RemovalCause cause;
+
+    RemovalNotification(@Nullable K key, @Nullable V value, RemovalCause cause) {
+      super(key, value);
+      this.cause = cause;
+    }
+
+    /**
+     * Returns the cause for which the entry was removed.
+     */
+    public RemovalCause getCause() {
+      return cause;
+    }
+
+    /**
+     * Returns {@code true} if there was an automatic removal due to eviction (the cause is neither
+     * {@link RemovalCause#EXPLICIT} nor {@link RemovalCause#REPLACED}).
+     */
+    public boolean wasEvicted() {
+      return cause.wasEvicted();
+    }
+  }
+
+  /**
+   * The reason why an entry was removed.
+   */
+  enum RemovalCause {
+    /**
+     * The entry was manually removed by the user. This can result from the user invoking
+     * {@link Map#remove}, {@link ConcurrentMap#remove}, or {@link java.util.Iterator#remove}.
+     */
+    EXPLICIT {
+      @Override
+      boolean wasEvicted() {
+        return false;
+      }
+    },
+
+    /**
+     * The entry itself was not actually removed, but its value was replaced by the user. This can
+     * result from the user invoking {@link Map#put}, {@link Map#putAll},
+     * {@link ConcurrentMap#replace(Object, Object)}, or
+     * {@link ConcurrentMap#replace(Object, Object, Object)}.
+     */
+    REPLACED {
+      @Override
+      boolean wasEvicted() {
+        return false;
+      }
+    },
+
+    /**
+     * The entry was removed automatically because its key or value was garbage-collected. This
+     * can occur when using {@link #softKeys}, {@link #softValues}, {@link #weakKeys}, or {@link
+     * #weakValues}.
+     */
+    COLLECTED {
+      @Override
+      boolean wasEvicted() {
+        return true;
+      }
+    },
+
+    /**
+     * The entry's expiration timestamp has passed. This can occur when using {@link
+     * #expireAfterWrite} or {@link #expireAfterAccess}.
+     */
+    EXPIRED {
+      @Override
+      boolean wasEvicted() {
+        return true;
+      }
+    },
+
+    /**
+     * The entry was evicted due to size constraints. This can occur when using {@link
+     * #maximumSize}.
+     */
+    SIZE {
+      @Override
+      boolean wasEvicted() {
+        return true;
+      }
+    };
+
+    /**
+     * Returns {@code true} if there was an automatic removal due to eviction (the cause is neither
+     * {@link #EXPLICIT} nor {@link #REPLACED}).
+     */
+    abstract boolean wasEvicted();
+  }
+
+  /** A map that is always empty and evicts on insertion. */
+  static class NullConcurrentMap<K, V> extends AbstractMap<K, V>
+      implements ConcurrentMap<K, V>, Serializable {
+    private static final long serialVersionUID = 0;
+
+    private final RemovalListener<K, V> removalListener;
+    private final RemovalCause removalCause;
+
+    NullConcurrentMap(MapMaker mapMaker) {
+      removalListener = mapMaker.getRemovalListener();
+      removalCause = mapMaker.nullRemovalCause;
+    }
+
+    // implements ConcurrentMap
+
+    @Override
+    public boolean containsKey(@Nullable Object key) {
+      return false;
+    }
+
+    @Override
+    public boolean containsValue(@Nullable Object value) {
+      return false;
+    }
+
+    @Override
+    public V get(@Nullable Object key) {
+      return null;
+    }
+
+    void notifyRemoval(K key, V value) {
+      RemovalNotification<K, V> notification =
+          new RemovalNotification<K, V>(key, value, removalCause);
+      removalListener.onRemoval(notification);
+    }
+
+    @Override
+    public V put(K key, V value) {
+      checkNotNull(key);
+      checkNotNull(value);
+      notifyRemoval(key, value);
+      return null;
+    }
+
+    @Override
+    public V putIfAbsent(K key, V value) {
+      return put(key, value);
+    }
+
+    @Override
+    public V remove(@Nullable Object key) {
+      return null;
+    }
+
+    @Override
+    public boolean remove(@Nullable Object key, @Nullable Object value) {
+      return false;
+    }
+
+    @Override
+    public V replace(K key, V value) {
+      checkNotNull(key);
+      checkNotNull(value);
+      return null;
+    }
+
+    @Override
+    public boolean replace(K key, @Nullable V oldValue, V newValue) {
+      checkNotNull(key);
+      checkNotNull(newValue);
+      return false;
+    }
+
+    @Override
+    public Set<Entry<K, V>> entrySet() {
+      return Collections.emptySet();
+    }
+  }
+
+  /** Computes on retrieval and evicts the result. */
+  static final class NullComputingConcurrentMap<K, V> extends NullConcurrentMap<K, V> {
+    private static final long serialVersionUID = 0;
+
+    final Function<? super K, ? extends V> computingFunction;
+
+    NullComputingConcurrentMap(
+        MapMaker mapMaker, Function<? super K, ? extends V> computingFunction) {
+      super(mapMaker);
+      this.computingFunction = checkNotNull(computingFunction);
+    }
+
+    @SuppressWarnings("unchecked") // unsafe, which is why Cache is preferred
+    @Override
+    public V get(Object k) {
+      K key = (K) k;
+      V value = compute(key);
+      checkNotNull(value, computingFunction + " returned null for key " + key + ".");
+      notifyRemoval(key, value);
+      return value;
+    }
+
+    private V compute(K key) {
+      checkNotNull(key);
+      try {
+        return computingFunction.apply(key);
+      } catch (ComputationException e) {
+        throw e;
+      } catch (Throwable t) {
+        throw new ComputationException(t);
+      }
+    }
+  }
+
+}
diff --git a/guava/src/com/google/common/collect/MapMakerInternalMap.java b/guava/src/com/google/common/collect/MapMakerInternalMap.java
new file mode 100644
index 0000000..a5a6be8
--- /dev/null
+++ b/guava/src/com/google/common/collect/MapMakerInternalMap.java
@@ -0,0 +1,4062 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkState;
+
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Equivalence;
+import com.google.common.base.Equivalences;
+import com.google.common.base.Ticker;
+import com.google.common.collect.GenericMapMaker.NullListener;
+import com.google.common.collect.MapMaker.RemovalCause;
+import com.google.common.collect.MapMaker.RemovalListener;
+import com.google.common.collect.MapMaker.RemovalNotification;
+import com.google.common.primitives.Ints;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+import java.lang.ref.Reference;
+import java.lang.ref.ReferenceQueue;
+import java.lang.ref.SoftReference;
+import java.lang.ref.WeakReference;
+import java.util.AbstractCollection;
+import java.util.AbstractMap;
+import java.util.AbstractQueue;
+import java.util.AbstractSet;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.NoSuchElementException;
+import java.util.Queue;
+import java.util.Set;
+import java.util.concurrent.CancellationException;
+import java.util.concurrent.ConcurrentLinkedQueue;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicReferenceArray;
+import java.util.concurrent.locks.ReentrantLock;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.annotation.Nullable;
+import javax.annotation.concurrent.GuardedBy;
+
+/**
+ * The concurrent hash map implementation built by {@link MapMaker}.
+ *
+ * <p>This implementation is heavily derived from revision 1.96 of <a
+ * href="http://tinyurl.com/ConcurrentHashMap">ConcurrentHashMap.java</a>.
+ *
+ * @author Bob Lee
+ * @author Charles Fry
+ * @author Doug Lea ({@code ConcurrentHashMap})
+ */
+class MapMakerInternalMap<K, V>
+    extends AbstractMap<K, V> implements ConcurrentMap<K, V>, Serializable {
+
+  /*
+   * The basic strategy is to subdivide the table among Segments, each of which itself is a
+   * concurrently readable hash table. The map supports non-blocking reads and concurrent writes
+   * across different segments.
+   *
+   * If a maximum size is specified, a best-effort bounding is performed per segment, using a
+   * page-replacement algorithm to determine which entries to evict when the capacity has been
+   * exceeded.
+   *
+   * The page replacement algorithm's data structures are kept casually consistent with the map. The
+   * ordering of writes to a segment is sequentially consistent. An update to the map and recording
+   * of reads may not be immediately reflected on the algorithm's data structures. These structures
+   * are guarded by a lock and operations are applied in batches to avoid lock contention. The
+   * penalty of applying the batches is spread across threads so that the amortized cost is slightly
+   * higher than performing just the operation without enforcing the capacity constraint.
+   *
+   * This implementation uses a per-segment queue to record a memento of the additions, removals,
+   * and accesses that were performed on the map. The queue is drained on writes and when it exceeds
+   * its capacity threshold.
+   *
+   * The Least Recently Used page replacement algorithm was chosen due to its simplicity, high hit
+   * rate, and ability to be implemented with O(1) time complexity. The initial LRU implementation
+   * operates per-segment rather than globally for increased implementation simplicity. We expect
+   * the cache hit rate to be similar to that of a global LRU algorithm.
+   */
+
+  // Constants
+
+  /**
+   * The maximum capacity, used if a higher value is implicitly specified by either of the
+   * constructors with arguments. MUST be a power of two <= 1<<30 to ensure that entries are
+   * indexable using ints.
+   */
+  static final int MAXIMUM_CAPACITY = Ints.MAX_POWER_OF_TWO;
+
+  /** The maximum number of segments to allow; used to bound constructor arguments. */
+  static final int MAX_SEGMENTS = 1 << 16; // slightly conservative
+
+  /** Number of (unsynchronized) retries in the containsValue method. */
+  static final int CONTAINS_VALUE_RETRIES = 3;
+
+  /**
+   * Number of cache access operations that can be buffered per segment before the cache's recency
+   * ordering information is updated. This is used to avoid lock contention by recording a memento
+   * of reads and delaying a lock acquisition until the threshold is crossed or a mutation occurs.
+   *
+   * <p>This must be a (2^n)-1 as it is used as a mask.
+   */
+  static final int DRAIN_THRESHOLD = 0x3F;
+
+  /**
+   * Maximum number of entries to be drained in a single cleanup run. This applies independently to
+   * the cleanup queue and both reference queues.
+   */
+  // TODO(fry): empirically optimize this
+  static final int DRAIN_MAX = 16;
+
+  static final long CLEANUP_EXECUTOR_DELAY_SECS = 60;
+
+  // Fields
+
+  private static final Logger logger = Logger.getLogger(MapMakerInternalMap.class.getName());
+
+  /**
+   * Mask value for indexing into segments. The upper bits of a key's hash code are used to choose
+   * the segment.
+   */
+  final transient int segmentMask;
+
+  /**
+   * Shift value for indexing within segments. Helps prevent entries that end up in the same segment
+   * from also ending up in the same bucket.
+   */
+  final transient int segmentShift;
+
+  /** The segments, each of which is a specialized hash table. */
+  final transient Segment<K, V>[] segments;
+
+  /** The concurrency level. */
+  final int concurrencyLevel;
+
+  /** Strategy for comparing keys. */
+  final Equivalence<Object> keyEquivalence;
+
+  /** Strategy for comparing values. */
+  final Equivalence<Object> valueEquivalence;
+
+  /** Strategy for referencing keys. */
+  final Strength keyStrength;
+
+  /** Strategy for referencing values. */
+  final Strength valueStrength;
+
+  /** The maximum size of this map. MapMaker.UNSET_INT if there is no maximum. */
+  final int maximumSize;
+
+  /** How long after the last access to an entry the map will retain that entry. */
+  final long expireAfterAccessNanos;
+
+  /** How long after the last write to an entry the map will retain that entry. */
+  final long expireAfterWriteNanos;
+
+  /** Entries waiting to be consumed by the removal listener. */
+  // TODO(fry): define a new type which creates event objects and automates the clear logic
+  final Queue<RemovalNotification<K, V>> removalNotificationQueue;
+
+  /**
+   * A listener that is invoked when an entry is removed due to expiration or garbage collection of
+   * soft/weak entries.
+   */
+  final RemovalListener<K, V> removalListener;
+
+  /** Factory used to create new entries. */
+  final transient EntryFactory entryFactory;
+
+  /** Measures time in a testable way. */
+  final Ticker ticker;
+
+  /**
+   * Creates a new, empty map with the specified strategy, initial capacity and concurrency level.
+   */
+  MapMakerInternalMap(MapMaker builder) {
+    concurrencyLevel = Math.min(builder.getConcurrencyLevel(), MAX_SEGMENTS);
+
+    keyStrength = builder.getKeyStrength();
+    valueStrength = builder.getValueStrength();
+
+    keyEquivalence = builder.getKeyEquivalence();
+    valueEquivalence = builder.getValueEquivalence();
+
+    maximumSize = builder.maximumSize;
+    expireAfterAccessNanos = builder.getExpireAfterAccessNanos();
+    expireAfterWriteNanos = builder.getExpireAfterWriteNanos();
+
+    entryFactory = EntryFactory.getFactory(keyStrength, expires(), evictsBySize());
+    ticker = builder.getTicker();
+
+    removalListener = builder.getRemovalListener();
+    removalNotificationQueue = (removalListener == NullListener.INSTANCE)
+        ? MapMakerInternalMap.<RemovalNotification<K, V>>discardingQueue()
+        : new ConcurrentLinkedQueue<RemovalNotification<K, V>>();
+
+    int initialCapacity = Math.min(builder.getInitialCapacity(), MAXIMUM_CAPACITY);
+    if (evictsBySize()) {
+      initialCapacity = Math.min(initialCapacity, maximumSize);
+    }
+
+    // Find power-of-two sizes best matching arguments. Constraints:
+    // (segmentCount <= maximumSize)
+    // && (concurrencyLevel > maximumSize || segmentCount > concurrencyLevel)
+    int segmentShift = 0;
+    int segmentCount = 1;
+    while (segmentCount < concurrencyLevel
+        && (!evictsBySize() || segmentCount * 2 <= maximumSize)) {
+      ++segmentShift;
+      segmentCount <<= 1;
+    }
+    this.segmentShift = 32 - segmentShift;
+    segmentMask = segmentCount - 1;
+
+    this.segments = newSegmentArray(segmentCount);
+
+    int segmentCapacity = initialCapacity / segmentCount;
+    if (segmentCapacity * segmentCount < initialCapacity) {
+      ++segmentCapacity;
+    }
+
+    int segmentSize = 1;
+    while (segmentSize < segmentCapacity) {
+      segmentSize <<= 1;
+    }
+
+    if (evictsBySize()) {
+      // Ensure sum of segment max sizes = overall max size
+      int maximumSegmentSize = maximumSize / segmentCount + 1;
+      int remainder = maximumSize % segmentCount;
+      for (int i = 0; i < this.segments.length; ++i) {
+        if (i == remainder) {
+          maximumSegmentSize--;
+        }
+        this.segments[i] =
+            createSegment(segmentSize, maximumSegmentSize);
+      }
+    } else {
+      for (int i = 0; i < this.segments.length; ++i) {
+        this.segments[i] =
+            createSegment(segmentSize, MapMaker.UNSET_INT);
+      }
+    }
+  }
+
+  boolean evictsBySize() {
+    return maximumSize != MapMaker.UNSET_INT;
+  }
+
+  boolean expires() {
+    return expiresAfterWrite() || expiresAfterAccess();
+  }
+
+  boolean expiresAfterWrite() {
+    return expireAfterWriteNanos > 0;
+  }
+
+  boolean expiresAfterAccess() {
+    return expireAfterAccessNanos > 0;
+  }
+
+  boolean usesKeyReferences() {
+    return keyStrength != Strength.STRONG;
+  }
+
+  boolean usesValueReferences() {
+    return valueStrength != Strength.STRONG;
+  }
+
+  enum Strength {
+    /*
+     * TODO(kevinb): If we strongly reference the value and aren't computing, we needn't wrap the
+     * value. This could save ~8 bytes per entry.
+     */
+
+    STRONG {
+      @Override
+      <K, V> ValueReference<K, V> referenceValue(
+          Segment<K, V> segment, ReferenceEntry<K, V> entry, V value) {
+        return new StrongValueReference<K, V>(value);
+      }
+
+      @Override
+      Equivalence<Object> defaultEquivalence() {
+        return Equivalences.equals();
+      }
+    },
+
+    SOFT {
+      @Override
+      <K, V> ValueReference<K, V> referenceValue(
+          Segment<K, V> segment, ReferenceEntry<K, V> entry, V value) {
+        return new SoftValueReference<K, V>(segment.valueReferenceQueue, value, entry);
+      }
+
+      @Override
+      Equivalence<Object> defaultEquivalence() {
+        return Equivalences.identity();
+      }
+    },
+
+    WEAK {
+      @Override
+      <K, V> ValueReference<K, V> referenceValue(
+          Segment<K, V> segment, ReferenceEntry<K, V> entry, V value) {
+        return new WeakValueReference<K, V>(segment.valueReferenceQueue, value, entry);
+      }
+
+      @Override
+      Equivalence<Object> defaultEquivalence() {
+        return Equivalences.identity();
+      }
+    };
+
+    /**
+     * Creates a reference for the given value according to this value strength.
+     */
+    abstract <K, V> ValueReference<K, V> referenceValue(
+        Segment<K, V> segment, ReferenceEntry<K, V> entry, V value);
+
+    /**
+     * Returns the default equivalence strategy used to compare and hash keys or values referenced
+     * at this strength. This strategy will be used unless the user explicitly specifies an
+     * alternate strategy.
+     */
+    abstract Equivalence<Object> defaultEquivalence();
+  }
+
+  /**
+   * Creates new entries.
+   */
+  enum EntryFactory {
+    STRONG {
+      @Override
+      <K, V> ReferenceEntry<K, V> newEntry(
+          Segment<K, V> segment, K key, int hash, @Nullable ReferenceEntry<K, V> next) {
+        return new StrongEntry<K, V>(key, hash, next);
+      }
+    },
+    STRONG_EXPIRABLE {
+      @Override
+      <K, V> ReferenceEntry<K, V> newEntry(
+          Segment<K, V> segment, K key, int hash, @Nullable ReferenceEntry<K, V> next) {
+        return new StrongExpirableEntry<K, V>(key, hash, next);
+      }
+
+      @Override
+      <K, V> ReferenceEntry<K, V> copyEntry(
+          Segment<K, V> segment, ReferenceEntry<K, V> original, ReferenceEntry<K, V> newNext) {
+        ReferenceEntry<K, V> newEntry = super.copyEntry(segment, original, newNext);
+        copyExpirableEntry(original, newEntry);
+        return newEntry;
+      }
+    },
+    STRONG_EVICTABLE {
+      @Override
+      <K, V> ReferenceEntry<K, V> newEntry(
+          Segment<K, V> segment, K key, int hash, @Nullable ReferenceEntry<K, V> next) {
+        return new StrongEvictableEntry<K, V>(key, hash, next);
+      }
+
+      @Override
+      <K, V> ReferenceEntry<K, V> copyEntry(
+          Segment<K, V> segment, ReferenceEntry<K, V> original, ReferenceEntry<K, V> newNext) {
+        ReferenceEntry<K, V> newEntry = super.copyEntry(segment, original, newNext);
+        copyEvictableEntry(original, newEntry);
+        return newEntry;
+      }
+    },
+    STRONG_EXPIRABLE_EVICTABLE {
+      @Override
+      <K, V> ReferenceEntry<K, V> newEntry(
+          Segment<K, V> segment, K key, int hash, @Nullable ReferenceEntry<K, V> next) {
+        return new StrongExpirableEvictableEntry<K, V>(key, hash, next);
+      }
+
+      @Override
+      <K, V> ReferenceEntry<K, V> copyEntry(
+          Segment<K, V> segment, ReferenceEntry<K, V> original, ReferenceEntry<K, V> newNext) {
+        ReferenceEntry<K, V> newEntry = super.copyEntry(segment, original, newNext);
+        copyExpirableEntry(original, newEntry);
+        copyEvictableEntry(original, newEntry);
+        return newEntry;
+      }
+    },
+
+    SOFT {
+      @Override
+      <K, V> ReferenceEntry<K, V> newEntry(
+          Segment<K, V> segment, K key, int hash, @Nullable ReferenceEntry<K, V> next) {
+        return new SoftEntry<K, V>(segment.keyReferenceQueue, key, hash, next);
+      }
+    },
+    SOFT_EXPIRABLE {
+      @Override
+      <K, V> ReferenceEntry<K, V> newEntry(
+          Segment<K, V> segment, K key, int hash, @Nullable ReferenceEntry<K, V> next) {
+        return new SoftExpirableEntry<K, V>(segment.keyReferenceQueue, key, hash, next);
+      }
+
+      @Override
+      <K, V> ReferenceEntry<K, V> copyEntry(
+          Segment<K, V> segment, ReferenceEntry<K, V> original, ReferenceEntry<K, V> newNext) {
+        ReferenceEntry<K, V> newEntry = super.copyEntry(segment, original, newNext);
+        copyExpirableEntry(original, newEntry);
+        return newEntry;
+      }
+    },
+    SOFT_EVICTABLE {
+      @Override
+      <K, V> ReferenceEntry<K, V> newEntry(
+          Segment<K, V> segment, K key, int hash, @Nullable ReferenceEntry<K, V> next) {
+        return new SoftEvictableEntry<K, V>(segment.keyReferenceQueue, key, hash, next);
+      }
+
+      @Override
+      <K, V> ReferenceEntry<K, V> copyEntry(
+          Segment<K, V> segment, ReferenceEntry<K, V> original, ReferenceEntry<K, V> newNext) {
+        ReferenceEntry<K, V> newEntry = super.copyEntry(segment, original, newNext);
+        copyEvictableEntry(original, newEntry);
+        return newEntry;
+      }
+    },
+    SOFT_EXPIRABLE_EVICTABLE {
+      @Override
+      <K, V> ReferenceEntry<K, V> newEntry(
+          Segment<K, V> segment, K key, int hash, @Nullable ReferenceEntry<K, V> next) {
+        return new SoftExpirableEvictableEntry<K, V>(segment.keyReferenceQueue, key, hash, next);
+      }
+
+      @Override
+      <K, V> ReferenceEntry<K, V> copyEntry(
+          Segment<K, V> segment, ReferenceEntry<K, V> original, ReferenceEntry<K, V> newNext) {
+        ReferenceEntry<K, V> newEntry = super.copyEntry(segment, original, newNext);
+        copyExpirableEntry(original, newEntry);
+        copyEvictableEntry(original, newEntry);
+        return newEntry;
+      }
+    },
+
+    WEAK {
+      @Override
+      <K, V> ReferenceEntry<K, V> newEntry(
+          Segment<K, V> segment, K key, int hash, @Nullable ReferenceEntry<K, V> next) {
+        return new WeakEntry<K, V>(segment.keyReferenceQueue, key, hash, next);
+      }
+    },
+    WEAK_EXPIRABLE {
+      @Override
+      <K, V> ReferenceEntry<K, V> newEntry(
+          Segment<K, V> segment, K key, int hash, @Nullable ReferenceEntry<K, V> next) {
+        return new WeakExpirableEntry<K, V>(segment.keyReferenceQueue, key, hash, next);
+      }
+
+      @Override
+      <K, V> ReferenceEntry<K, V> copyEntry(
+          Segment<K, V> segment, ReferenceEntry<K, V> original, ReferenceEntry<K, V> newNext) {
+        ReferenceEntry<K, V> newEntry = super.copyEntry(segment, original, newNext);
+        copyExpirableEntry(original, newEntry);
+        return newEntry;
+      }
+    },
+    WEAK_EVICTABLE {
+      @Override
+      <K, V> ReferenceEntry<K, V> newEntry(
+          Segment<K, V> segment, K key, int hash, @Nullable ReferenceEntry<K, V> next) {
+        return new WeakEvictableEntry<K, V>(segment.keyReferenceQueue, key, hash, next);
+      }
+
+      @Override
+      <K, V> ReferenceEntry<K, V> copyEntry(
+          Segment<K, V> segment, ReferenceEntry<K, V> original, ReferenceEntry<K, V> newNext) {
+        ReferenceEntry<K, V> newEntry = super.copyEntry(segment, original, newNext);
+        copyEvictableEntry(original, newEntry);
+        return newEntry;
+      }
+    },
+    WEAK_EXPIRABLE_EVICTABLE {
+      @Override
+      <K, V> ReferenceEntry<K, V> newEntry(
+          Segment<K, V> segment, K key, int hash, @Nullable ReferenceEntry<K, V> next) {
+        return new WeakExpirableEvictableEntry<K, V>(segment.keyReferenceQueue, key, hash, next);
+      }
+
+      @Override
+      <K, V> ReferenceEntry<K, V> copyEntry(
+          Segment<K, V> segment, ReferenceEntry<K, V> original, ReferenceEntry<K, V> newNext) {
+        ReferenceEntry<K, V> newEntry = super.copyEntry(segment, original, newNext);
+        copyExpirableEntry(original, newEntry);
+        copyEvictableEntry(original, newEntry);
+        return newEntry;
+      }
+    };
+
+    /**
+     * Masks used to compute indices in the following table.
+     */
+    static final int EXPIRABLE_MASK = 1;
+    static final int EVICTABLE_MASK = 2;
+
+    /**
+     * Look-up table for factories. First dimension is the reference type. The second dimension is
+     * the result of OR-ing the feature masks.
+     */
+    static final EntryFactory[][] factories = {
+      { STRONG, STRONG_EXPIRABLE, STRONG_EVICTABLE, STRONG_EXPIRABLE_EVICTABLE },
+      { SOFT, SOFT_EXPIRABLE, SOFT_EVICTABLE, SOFT_EXPIRABLE_EVICTABLE },
+      { WEAK, WEAK_EXPIRABLE, WEAK_EVICTABLE, WEAK_EXPIRABLE_EVICTABLE }
+    };
+
+    static EntryFactory getFactory(Strength keyStrength, boolean expireAfterWrite,
+        boolean evictsBySize) {
+      int flags = (expireAfterWrite ? EXPIRABLE_MASK : 0) | (evictsBySize ? EVICTABLE_MASK : 0);
+      return factories[keyStrength.ordinal()][flags];
+    }
+
+    /**
+     * Creates a new entry.
+     *
+     * @param segment to create the entry for
+     * @param key of the entry
+     * @param hash of the key
+     * @param next entry in the same bucket
+     */
+    abstract <K, V> ReferenceEntry<K, V> newEntry(
+        Segment<K, V> segment, K key, int hash, @Nullable ReferenceEntry<K, V> next);
+
+    /**
+     * Copies an entry, assigning it a new {@code next} entry.
+     *
+     * @param original the entry to copy
+     * @param newNext entry in the same bucket
+     */
+    @GuardedBy("Segment.this")
+    <K, V> ReferenceEntry<K, V> copyEntry(
+        Segment<K, V> segment, ReferenceEntry<K, V> original, ReferenceEntry<K, V> newNext) {
+      return newEntry(segment, original.getKey(), original.getHash(), newNext);
+    }
+
+    @GuardedBy("Segment.this")
+    <K, V> void copyExpirableEntry(ReferenceEntry<K, V> original, ReferenceEntry<K, V> newEntry) {
+      // TODO(fry): when we link values instead of entries this method can go
+      // away, as can connectExpirables, nullifyExpirable.
+      newEntry.setExpirationTime(original.getExpirationTime());
+
+      connectExpirables(original.getPreviousExpirable(), newEntry);
+      connectExpirables(newEntry, original.getNextExpirable());
+
+      nullifyExpirable(original);
+    }
+
+    @GuardedBy("Segment.this")
+    <K, V> void copyEvictableEntry(ReferenceEntry<K, V> original, ReferenceEntry<K, V> newEntry) {
+      // TODO(fry): when we link values instead of entries this method can go
+      // away, as can connectEvictables, nullifyEvictable.
+      connectEvictables(original.getPreviousEvictable(), newEntry);
+      connectEvictables(newEntry, original.getNextEvictable());
+
+      nullifyEvictable(original);
+    }
+  }
+
+  /**
+   * A reference to a value.
+   */
+  interface ValueReference<K, V> {
+    /**
+     * Gets the value. Does not block or throw exceptions.
+     */
+    V get();
+
+    /**
+     * Waits for a value that may still be computing. Unlike get(), this method can block (in the
+     * case of FutureValueReference).
+     *
+     * @throws ExecutionException if the computing thread throws an exception
+     */
+    V waitForValue() throws ExecutionException;
+
+    /**
+     * Returns the entry associated with this value reference, or {@code null} if this value
+     * reference is independent of any entry.
+     */
+    ReferenceEntry<K, V> getEntry();
+
+    /**
+     * Creates a copy of this reference for the given entry.
+     */
+    ValueReference<K, V> copyFor(ReferenceQueue<V> queue, ReferenceEntry<K, V> entry);
+
+    /**
+     * Clears this reference object.
+     *
+     * @param newValue the new value reference which will replace this one; this is only used during
+     *     computation to immediately notify blocked threads of the new value
+     */
+    void clear(@Nullable ValueReference<K, V> newValue);
+
+    /**
+     * Returns {@code true} if the value type is a computing reference (regardless of whether or not
+     * computation has completed). This is necessary to distiguish between partially-collected
+     * entries and computing entries, which need to be cleaned up differently.
+     */
+    boolean isComputingReference();
+  }
+
+  /**
+   * Placeholder. Indicates that the value hasn't been set yet.
+   */
+  static final ValueReference<Object, Object> UNSET = new ValueReference<Object, Object>() {
+    @Override
+    public Object get() {
+      return null;
+    }
+
+    @Override
+    public ReferenceEntry<Object, Object> getEntry() {
+      return null;
+    }
+
+    @Override
+    public ValueReference<Object, Object> copyFor(
+        ReferenceQueue<Object> queue, ReferenceEntry<Object, Object> entry) {
+      return this;
+    }
+
+    @Override
+    public boolean isComputingReference() {
+      return false;
+    }
+
+    @Override
+    public Object waitForValue() {
+      return null;
+    }
+
+    @Override
+    public void clear(ValueReference<Object, Object> newValue) {}
+  };
+
+  /**
+   * Singleton placeholder that indicates a value is being computed.
+   */
+  @SuppressWarnings("unchecked") // impl never uses a parameter or returns any non-null value
+  static <K, V> ValueReference<K, V> unset() {
+    return (ValueReference<K, V>) UNSET;
+  }
+
+  /**
+   * An entry in a reference map.
+   *
+   * Entries in the map can be in the following states:
+   *
+   * Valid:
+   * - Live: valid key/value are set
+   * - Computing: computation is pending
+   *
+   * Invalid:
+   * - Expired: time expired (key/value may still be set)
+   * - Collected: key/value was partially collected, but not yet cleaned up
+   */
+  interface ReferenceEntry<K, V> {
+    /**
+     * Gets the value reference from this entry.
+     */
+    ValueReference<K, V> getValueReference();
+
+    /**
+     * Sets the value reference for this entry.
+     */
+    void setValueReference(ValueReference<K, V> valueReference);
+
+    /**
+     * Gets the next entry in the chain.
+     */
+    ReferenceEntry<K, V> getNext();
+
+    /**
+     * Gets the entry's hash.
+     */
+    int getHash();
+
+    /**
+     * Gets the key for this entry.
+     */
+    K getKey();
+
+    /*
+     * Used by entries that are expirable. Expirable entries are maintained in a doubly-linked list.
+     * New entries are added at the tail of the list at write time; stale entries are expired from
+     * the head of the list.
+     */
+
+    /**
+     * Gets the entry expiration time in ns.
+     */
+    long getExpirationTime();
+
+    /**
+     * Sets the entry expiration time in ns.
+     */
+    void setExpirationTime(long time);
+
+    /**
+     * Gets the next entry in the recency list.
+     */
+    ReferenceEntry<K, V> getNextExpirable();
+
+    /**
+     * Sets the next entry in the recency list.
+     */
+    void setNextExpirable(ReferenceEntry<K, V> next);
+
+    /**
+     * Gets the previous entry in the recency list.
+     */
+    ReferenceEntry<K, V> getPreviousExpirable();
+
+    /**
+     * Sets the previous entry in the recency list.
+     */
+    void setPreviousExpirable(ReferenceEntry<K, V> previous);
+
+    /*
+     * Implemented by entries that are evictable. Evictable entries are maintained in a
+     * doubly-linked list. New entries are added at the tail of the list at write time and stale
+     * entries are expired from the head of the list.
+     */
+
+    /**
+     * Gets the next entry in the recency list.
+     */
+    ReferenceEntry<K, V> getNextEvictable();
+
+    /**
+     * Sets the next entry in the recency list.
+     */
+    void setNextEvictable(ReferenceEntry<K, V> next);
+
+    /**
+     * Gets the previous entry in the recency list.
+     */
+    ReferenceEntry<K, V> getPreviousEvictable();
+
+    /**
+     * Sets the previous entry in the recency list.
+     */
+    void setPreviousEvictable(ReferenceEntry<K, V> previous);
+  }
+
+  private enum NullEntry implements ReferenceEntry<Object, Object> {
+    INSTANCE;
+
+    @Override
+    public ValueReference<Object, Object> getValueReference() {
+      return null;
+    }
+
+    @Override
+    public void setValueReference(ValueReference<Object, Object> valueReference) {}
+
+    @Override
+    public ReferenceEntry<Object, Object> getNext() {
+      return null;
+    }
+
+    @Override
+    public int getHash() {
+      return 0;
+    }
+
+    @Override
+    public Object getKey() {
+      return null;
+    }
+
+    @Override
+    public long getExpirationTime() {
+      return 0;
+    }
+
+    @Override
+    public void setExpirationTime(long time) {}
+
+    @Override
+    public ReferenceEntry<Object, Object> getNextExpirable() {
+      return this;
+    }
+
+    @Override
+    public void setNextExpirable(ReferenceEntry<Object, Object> next) {}
+
+    @Override
+    public ReferenceEntry<Object, Object> getPreviousExpirable() {
+      return this;
+    }
+
+    @Override
+    public void setPreviousExpirable(ReferenceEntry<Object, Object> previous) {}
+
+    @Override
+    public ReferenceEntry<Object, Object> getNextEvictable() {
+      return this;
+    }
+
+    @Override
+    public void setNextEvictable(ReferenceEntry<Object, Object> next) {}
+
+    @Override
+    public ReferenceEntry<Object, Object> getPreviousEvictable() {
+      return this;
+    }
+
+    @Override
+    public void setPreviousEvictable(ReferenceEntry<Object, Object> previous) {}
+  }
+
+  static abstract class AbstractReferenceEntry<K, V> implements ReferenceEntry<K, V> {
+    @Override
+    public ValueReference<K, V> getValueReference() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void setValueReference(ValueReference<K, V> valueReference) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public ReferenceEntry<K, V> getNext() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public int getHash() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public K getKey() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public long getExpirationTime() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void setExpirationTime(long time) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public ReferenceEntry<K, V> getNextExpirable() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void setNextExpirable(ReferenceEntry<K, V> next) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public ReferenceEntry<K, V> getPreviousExpirable() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void setPreviousExpirable(ReferenceEntry<K, V> previous) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public ReferenceEntry<K, V> getNextEvictable() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void setNextEvictable(ReferenceEntry<K, V> next) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public ReferenceEntry<K, V> getPreviousEvictable() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void setPreviousEvictable(ReferenceEntry<K, V> previous) {
+      throw new UnsupportedOperationException();
+    }
+  }
+
+  @SuppressWarnings("unchecked") // impl never uses a parameter or returns any non-null value
+  static <K, V> ReferenceEntry<K, V> nullEntry() {
+    return (ReferenceEntry<K, V>) NullEntry.INSTANCE;
+  }
+
+  static final Queue<? extends Object> DISCARDING_QUEUE = new AbstractQueue<Object>() {
+    @Override
+    public boolean offer(Object o) {
+      return true;
+    }
+
+    @Override
+    public Object peek() {
+      return null;
+    }
+
+    @Override
+    public Object poll() {
+      return null;
+    }
+
+    @Override
+    public int size() {
+      return 0;
+    }
+
+    @Override
+    public Iterator<Object> iterator() {
+      return Iterators.emptyIterator();
+    }
+  };
+
+  /**
+   * Queue that discards all elements.
+   */
+  @SuppressWarnings("unchecked") // impl never uses a parameter or returns any non-null value
+  static <E> Queue<E> discardingQueue() {
+    return (Queue) DISCARDING_QUEUE;
+  }
+
+  /*
+   * Note: All of this duplicate code sucks, but it saves a lot of memory. If only Java had mixins!
+   * To maintain this code, make a change for the strong reference type. Then, cut and paste, and
+   * replace "Strong" with "Soft" or "Weak" within the pasted text. The primary difference is that
+   * strong entries store the key reference directly while soft and weak entries delegate to their
+   * respective superclasses.
+   */
+
+  /**
+   * Used for strongly-referenced keys.
+   */
+  static class StrongEntry<K, V> implements ReferenceEntry<K, V> {
+    final K key;
+
+    StrongEntry(K key, int hash, @Nullable ReferenceEntry<K, V> next) {
+      this.key = key;
+      this.hash = hash;
+      this.next = next;
+    }
+
+    @Override
+    public K getKey() {
+      return this.key;
+    }
+
+    // null expiration
+
+    @Override
+    public long getExpirationTime() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void setExpirationTime(long time) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public ReferenceEntry<K, V> getNextExpirable() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void setNextExpirable(ReferenceEntry<K, V> next) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public ReferenceEntry<K, V> getPreviousExpirable() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void setPreviousExpirable(ReferenceEntry<K, V> previous) {
+      throw new UnsupportedOperationException();
+    }
+
+    // null eviction
+
+    @Override
+    public ReferenceEntry<K, V> getNextEvictable() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void setNextEvictable(ReferenceEntry<K, V> next) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public ReferenceEntry<K, V> getPreviousEvictable() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void setPreviousEvictable(ReferenceEntry<K, V> previous) {
+      throw new UnsupportedOperationException();
+    }
+
+    // The code below is exactly the same for each entry type.
+
+    final int hash;
+    final ReferenceEntry<K, V> next;
+    volatile ValueReference<K, V> valueReference = unset();
+
+    @Override
+    public ValueReference<K, V> getValueReference() {
+      return valueReference;
+    }
+
+    @Override
+    public void setValueReference(ValueReference<K, V> valueReference) {
+      ValueReference<K, V> previous = this.valueReference;
+      this.valueReference = valueReference;
+      previous.clear(valueReference);
+    }
+
+    @Override
+    public int getHash() {
+      return hash;
+    }
+
+    @Override
+    public ReferenceEntry<K, V> getNext() {
+      return next;
+    }
+  }
+
+  static final class StrongExpirableEntry<K, V> extends StrongEntry<K, V>
+      implements ReferenceEntry<K, V> {
+    StrongExpirableEntry(K key, int hash, @Nullable ReferenceEntry<K, V> next) {
+      super(key, hash, next);
+    }
+
+    // The code below is exactly the same for each expirable entry type.
+
+    volatile long time = Long.MAX_VALUE;
+
+    @Override
+    public long getExpirationTime() {
+      return time;
+    }
+
+    @Override
+    public void setExpirationTime(long time) {
+      this.time = time;
+    }
+
+    @GuardedBy("Segment.this")
+    ReferenceEntry<K, V> nextExpirable = nullEntry();
+
+    @Override
+    public ReferenceEntry<K, V> getNextExpirable() {
+      return nextExpirable;
+    }
+
+    @Override
+    public void setNextExpirable(ReferenceEntry<K, V> next) {
+      this.nextExpirable = next;
+    }
+
+    @GuardedBy("Segment.this")
+    ReferenceEntry<K, V> previousExpirable = nullEntry();
+
+    @Override
+    public ReferenceEntry<K, V> getPreviousExpirable() {
+      return previousExpirable;
+    }
+
+    @Override
+    public void setPreviousExpirable(ReferenceEntry<K, V> previous) {
+      this.previousExpirable = previous;
+    }
+  }
+
+  static final class StrongEvictableEntry<K, V>
+      extends StrongEntry<K, V> implements ReferenceEntry<K, V> {
+    StrongEvictableEntry(K key, int hash, @Nullable ReferenceEntry<K, V> next) {
+      super(key, hash, next);
+    }
+
+    // The code below is exactly the same for each evictable entry type.
+
+    @GuardedBy("Segment.this")
+    ReferenceEntry<K, V> nextEvictable = nullEntry();
+
+    @Override
+    public ReferenceEntry<K, V> getNextEvictable() {
+      return nextEvictable;
+    }
+
+    @Override
+    public void setNextEvictable(ReferenceEntry<K, V> next) {
+      this.nextEvictable = next;
+    }
+
+    @GuardedBy("Segment.this")
+    ReferenceEntry<K, V> previousEvictable = nullEntry();
+
+    @Override
+    public ReferenceEntry<K, V> getPreviousEvictable() {
+      return previousEvictable;
+    }
+
+    @Override
+    public void setPreviousEvictable(ReferenceEntry<K, V> previous) {
+      this.previousEvictable = previous;
+    }
+  }
+
+  static final class StrongExpirableEvictableEntry<K, V>
+      extends StrongEntry<K, V> implements ReferenceEntry<K, V> {
+    StrongExpirableEvictableEntry(K key, int hash, @Nullable ReferenceEntry<K, V> next) {
+      super(key, hash, next);
+    }
+
+    // The code below is exactly the same for each expirable entry type.
+
+    volatile long time = Long.MAX_VALUE;
+
+    @Override
+    public long getExpirationTime() {
+      return time;
+    }
+
+    @Override
+    public void setExpirationTime(long time) {
+      this.time = time;
+    }
+
+    @GuardedBy("Segment.this")
+    ReferenceEntry<K, V> nextExpirable = nullEntry();
+
+    @Override
+    public ReferenceEntry<K, V> getNextExpirable() {
+      return nextExpirable;
+    }
+
+    @Override
+    public void setNextExpirable(ReferenceEntry<K, V> next) {
+      this.nextExpirable = next;
+    }
+
+    @GuardedBy("Segment.this")
+    ReferenceEntry<K, V> previousExpirable = nullEntry();
+
+    @Override
+    public ReferenceEntry<K, V> getPreviousExpirable() {
+      return previousExpirable;
+    }
+
+    @Override
+    public void setPreviousExpirable(ReferenceEntry<K, V> previous) {
+      this.previousExpirable = previous;
+    }
+
+    // The code below is exactly the same for each evictable entry type.
+
+    @GuardedBy("Segment.this")
+    ReferenceEntry<K, V> nextEvictable = nullEntry();
+
+    @Override
+    public ReferenceEntry<K, V> getNextEvictable() {
+      return nextEvictable;
+    }
+
+    @Override
+    public void setNextEvictable(ReferenceEntry<K, V> next) {
+      this.nextEvictable = next;
+    }
+
+    @GuardedBy("Segment.this")
+    ReferenceEntry<K, V> previousEvictable = nullEntry();
+
+    @Override
+    public ReferenceEntry<K, V> getPreviousEvictable() {
+      return previousEvictable;
+    }
+
+    @Override
+    public void setPreviousEvictable(ReferenceEntry<K, V> previous) {
+      this.previousEvictable = previous;
+    }
+  }
+
+  /**
+   * Used for softly-referenced keys.
+   */
+  static class SoftEntry<K, V> extends SoftReference<K> implements ReferenceEntry<K, V> {
+    SoftEntry(ReferenceQueue<K> queue, K key, int hash, @Nullable ReferenceEntry<K, V> next) {
+      super(key, queue);
+      this.hash = hash;
+      this.next = next;
+    }
+
+    @Override
+    public K getKey() {
+      return get();
+    }
+
+    // null expiration
+    @Override
+    public long getExpirationTime() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void setExpirationTime(long time) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public ReferenceEntry<K, V> getNextExpirable() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void setNextExpirable(ReferenceEntry<K, V> next) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public ReferenceEntry<K, V> getPreviousExpirable() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void setPreviousExpirable(ReferenceEntry<K, V> previous) {
+      throw new UnsupportedOperationException();
+    }
+
+    // null eviction
+
+    @Override
+    public ReferenceEntry<K, V> getNextEvictable() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void setNextEvictable(ReferenceEntry<K, V> next) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public ReferenceEntry<K, V> getPreviousEvictable() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void setPreviousEvictable(ReferenceEntry<K, V> previous) {
+      throw new UnsupportedOperationException();
+    }
+
+    // The code below is exactly the same for each entry type.
+
+    final int hash;
+    final ReferenceEntry<K, V> next;
+    volatile ValueReference<K, V> valueReference = unset();
+
+    @Override
+    public ValueReference<K, V> getValueReference() {
+      return valueReference;
+    }
+
+    @Override
+    public void setValueReference(ValueReference<K, V> valueReference) {
+      ValueReference<K, V> previous = this.valueReference;
+      this.valueReference = valueReference;
+      previous.clear(valueReference);
+    }
+
+    @Override
+    public int getHash() {
+      return hash;
+    }
+
+    @Override
+    public ReferenceEntry<K, V> getNext() {
+      return next;
+    }
+  }
+
+  static final class SoftExpirableEntry<K, V>
+      extends SoftEntry<K, V> implements ReferenceEntry<K, V> {
+    SoftExpirableEntry(
+        ReferenceQueue<K> queue, K key, int hash, @Nullable ReferenceEntry<K, V> next) {
+      super(queue, key, hash, next);
+    }
+
+    // The code below is exactly the same for each expirable entry type.
+
+    volatile long time = Long.MAX_VALUE;
+
+    @Override
+    public long getExpirationTime() {
+      return time;
+    }
+
+    @Override
+    public void setExpirationTime(long time) {
+      this.time = time;
+    }
+
+    @GuardedBy("Segment.this")
+    ReferenceEntry<K, V> nextExpirable = nullEntry();
+
+    @Override
+    public ReferenceEntry<K, V> getNextExpirable() {
+      return nextExpirable;
+    }
+
+    @Override
+    public void setNextExpirable(ReferenceEntry<K, V> next) {
+      this.nextExpirable = next;
+    }
+
+    @GuardedBy("Segment.this")
+    ReferenceEntry<K, V> previousExpirable = nullEntry();
+
+    @Override
+    public ReferenceEntry<K, V> getPreviousExpirable() {
+      return previousExpirable;
+    }
+
+    @Override
+    public void setPreviousExpirable(ReferenceEntry<K, V> previous) {
+      this.previousExpirable = previous;
+    }
+  }
+
+  static final class SoftEvictableEntry<K, V>
+      extends SoftEntry<K, V> implements ReferenceEntry<K, V> {
+    SoftEvictableEntry(
+        ReferenceQueue<K> queue, K key, int hash, @Nullable ReferenceEntry<K, V> next) {
+      super(queue, key, hash, next);
+    }
+
+    // The code below is exactly the same for each evictable entry type.
+
+    @GuardedBy("Segment.this")
+    ReferenceEntry<K, V> nextEvictable = nullEntry();
+
+    @Override
+    public ReferenceEntry<K, V> getNextEvictable() {
+      return nextEvictable;
+    }
+
+    @Override
+    public void setNextEvictable(ReferenceEntry<K, V> next) {
+      this.nextEvictable = next;
+    }
+
+    @GuardedBy("Segment.this")
+    ReferenceEntry<K, V> previousEvictable = nullEntry();
+
+    @Override
+    public ReferenceEntry<K, V> getPreviousEvictable() {
+      return previousEvictable;
+    }
+
+    @Override
+    public void setPreviousEvictable(ReferenceEntry<K, V> previous) {
+      this.previousEvictable = previous;
+    }
+  }
+
+  static final class SoftExpirableEvictableEntry<K, V>
+      extends SoftEntry<K, V> implements ReferenceEntry<K, V> {
+    SoftExpirableEvictableEntry(
+        ReferenceQueue<K> queue, K key, int hash, @Nullable ReferenceEntry<K, V> next) {
+      super(queue, key, hash, next);
+    }
+
+    // The code below is exactly the same for each expirable entry type.
+
+    volatile long time = Long.MAX_VALUE;
+
+    @Override
+    public long getExpirationTime() {
+      return time;
+    }
+
+    @Override
+    public void setExpirationTime(long time) {
+      this.time = time;
+    }
+
+    @GuardedBy("Segment.this")
+    ReferenceEntry<K, V> nextExpirable = nullEntry();
+
+    @Override
+    public ReferenceEntry<K, V> getNextExpirable() {
+      return nextExpirable;
+    }
+
+    @Override
+    public void setNextExpirable(ReferenceEntry<K, V> next) {
+      this.nextExpirable = next;
+    }
+
+    @GuardedBy("Segment.this")
+    ReferenceEntry<K, V> previousExpirable = nullEntry();
+
+    @Override
+    public ReferenceEntry<K, V> getPreviousExpirable() {
+      return previousExpirable;
+    }
+
+    @Override
+    public void setPreviousExpirable(ReferenceEntry<K, V> previous) {
+      this.previousExpirable = previous;
+    }
+
+    // The code below is exactly the same for each evictable entry type.
+
+    @GuardedBy("Segment.this")
+    ReferenceEntry<K, V> nextEvictable = nullEntry();
+
+    @Override
+    public ReferenceEntry<K, V> getNextEvictable() {
+      return nextEvictable;
+    }
+
+    @Override
+    public void setNextEvictable(ReferenceEntry<K, V> next) {
+      this.nextEvictable = next;
+    }
+
+    @GuardedBy("Segment.this")
+    ReferenceEntry<K, V> previousEvictable = nullEntry();
+
+    @Override
+    public ReferenceEntry<K, V> getPreviousEvictable() {
+      return previousEvictable;
+    }
+
+    @Override
+    public void setPreviousEvictable(ReferenceEntry<K, V> previous) {
+      this.previousEvictable = previous;
+    }
+  }
+
+  /**
+   * Used for weakly-referenced keys.
+   */
+  static class WeakEntry<K, V> extends WeakReference<K> implements ReferenceEntry<K, V> {
+    WeakEntry(ReferenceQueue<K> queue, K key, int hash, @Nullable ReferenceEntry<K, V> next) {
+      super(key, queue);
+      this.hash = hash;
+      this.next = next;
+    }
+
+    @Override
+    public K getKey() {
+      return get();
+    }
+
+    // null expiration
+
+    @Override
+    public long getExpirationTime() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void setExpirationTime(long time) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public ReferenceEntry<K, V> getNextExpirable() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void setNextExpirable(ReferenceEntry<K, V> next) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public ReferenceEntry<K, V> getPreviousExpirable() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void setPreviousExpirable(ReferenceEntry<K, V> previous) {
+      throw new UnsupportedOperationException();
+    }
+
+    // null eviction
+
+    @Override
+    public ReferenceEntry<K, V> getNextEvictable() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void setNextEvictable(ReferenceEntry<K, V> next) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public ReferenceEntry<K, V> getPreviousEvictable() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void setPreviousEvictable(ReferenceEntry<K, V> previous) {
+      throw new UnsupportedOperationException();
+    }
+
+    // The code below is exactly the same for each entry type.
+
+    final int hash;
+    final ReferenceEntry<K, V> next;
+    volatile ValueReference<K, V> valueReference = unset();
+
+    @Override
+    public ValueReference<K, V> getValueReference() {
+      return valueReference;
+    }
+
+    @Override
+    public void setValueReference(ValueReference<K, V> valueReference) {
+      ValueReference<K, V> previous = this.valueReference;
+      this.valueReference = valueReference;
+      previous.clear(valueReference);
+    }
+
+    @Override
+    public int getHash() {
+      return hash;
+    }
+
+    @Override
+    public ReferenceEntry<K, V> getNext() {
+      return next;
+    }
+  }
+
+  static final class WeakExpirableEntry<K, V>
+      extends WeakEntry<K, V> implements ReferenceEntry<K, V> {
+    WeakExpirableEntry(
+        ReferenceQueue<K> queue, K key, int hash, @Nullable ReferenceEntry<K, V> next) {
+      super(queue, key, hash, next);
+    }
+
+    // The code below is exactly the same for each expirable entry type.
+
+    volatile long time = Long.MAX_VALUE;
+
+    @Override
+    public long getExpirationTime() {
+      return time;
+    }
+
+    @Override
+    public void setExpirationTime(long time) {
+      this.time = time;
+    }
+
+    @GuardedBy("Segment.this")
+    ReferenceEntry<K, V> nextExpirable = nullEntry();
+
+    @Override
+    public ReferenceEntry<K, V> getNextExpirable() {
+      return nextExpirable;
+    }
+
+    @Override
+    public void setNextExpirable(ReferenceEntry<K, V> next) {
+      this.nextExpirable = next;
+    }
+
+    @GuardedBy("Segment.this")
+    ReferenceEntry<K, V> previousExpirable = nullEntry();
+
+    @Override
+    public ReferenceEntry<K, V> getPreviousExpirable() {
+      return previousExpirable;
+    }
+
+    @Override
+    public void setPreviousExpirable(ReferenceEntry<K, V> previous) {
+      this.previousExpirable = previous;
+    }
+  }
+
+  static final class WeakEvictableEntry<K, V>
+      extends WeakEntry<K, V> implements ReferenceEntry<K, V> {
+    WeakEvictableEntry(
+        ReferenceQueue<K> queue, K key, int hash, @Nullable ReferenceEntry<K, V> next) {
+      super(queue, key, hash, next);
+    }
+
+    // The code below is exactly the same for each evictable entry type.
+
+    @GuardedBy("Segment.this")
+    ReferenceEntry<K, V> nextEvictable = nullEntry();
+
+    @Override
+    public ReferenceEntry<K, V> getNextEvictable() {
+      return nextEvictable;
+    }
+
+    @Override
+    public void setNextEvictable(ReferenceEntry<K, V> next) {
+      this.nextEvictable = next;
+    }
+
+    @GuardedBy("Segment.this")
+    ReferenceEntry<K, V> previousEvictable = nullEntry();
+
+    @Override
+    public ReferenceEntry<K, V> getPreviousEvictable() {
+      return previousEvictable;
+    }
+
+    @Override
+    public void setPreviousEvictable(ReferenceEntry<K, V> previous) {
+      this.previousEvictable = previous;
+    }
+  }
+
+  static final class WeakExpirableEvictableEntry<K, V>
+      extends WeakEntry<K, V> implements ReferenceEntry<K, V> {
+    WeakExpirableEvictableEntry(
+        ReferenceQueue<K> queue, K key, int hash, @Nullable ReferenceEntry<K, V> next) {
+      super(queue, key, hash, next);
+    }
+
+    // The code below is exactly the same for each expirable entry type.
+
+    volatile long time = Long.MAX_VALUE;
+
+    @Override
+    public long getExpirationTime() {
+      return time;
+    }
+
+    @Override
+    public void setExpirationTime(long time) {
+      this.time = time;
+    }
+
+    @GuardedBy("Segment.this")
+    ReferenceEntry<K, V> nextExpirable = nullEntry();
+
+    @Override
+    public ReferenceEntry<K, V> getNextExpirable() {
+      return nextExpirable;
+    }
+
+    @Override
+    public void setNextExpirable(ReferenceEntry<K, V> next) {
+      this.nextExpirable = next;
+    }
+
+    @GuardedBy("Segment.this")
+    ReferenceEntry<K, V> previousExpirable = nullEntry();
+
+    @Override
+    public ReferenceEntry<K, V> getPreviousExpirable() {
+      return previousExpirable;
+    }
+
+    @Override
+    public void setPreviousExpirable(ReferenceEntry<K, V> previous) {
+      this.previousExpirable = previous;
+    }
+
+    // The code below is exactly the same for each evictable entry type.
+
+    @GuardedBy("Segment.this")
+    ReferenceEntry<K, V> nextEvictable = nullEntry();
+
+    @Override
+    public ReferenceEntry<K, V> getNextEvictable() {
+      return nextEvictable;
+    }
+
+    @Override
+    public void setNextEvictable(ReferenceEntry<K, V> next) {
+      this.nextEvictable = next;
+    }
+
+    @GuardedBy("Segment.this")
+    ReferenceEntry<K, V> previousEvictable = nullEntry();
+
+    @Override
+    public ReferenceEntry<K, V> getPreviousEvictable() {
+      return previousEvictable;
+    }
+
+    @Override
+    public void setPreviousEvictable(ReferenceEntry<K, V> previous) {
+      this.previousEvictable = previous;
+    }
+  }
+
+  /**
+   * References a weak value.
+   */
+  static final class WeakValueReference<K, V>
+      extends WeakReference<V> implements ValueReference<K, V> {
+    final ReferenceEntry<K, V> entry;
+
+    WeakValueReference(ReferenceQueue<V> queue, V referent, ReferenceEntry<K, V> entry) {
+      super(referent, queue);
+      this.entry = entry;
+    }
+
+    @Override
+    public ReferenceEntry<K, V> getEntry() {
+      return entry;
+    }
+
+    @Override
+    public void clear(ValueReference<K, V> newValue) {
+      clear();
+    }
+
+    @Override
+    public ValueReference<K, V> copyFor(
+        ReferenceQueue<V> queue, ReferenceEntry<K, V> entry) {
+      return new WeakValueReference<K, V>(queue, get(), entry);
+    }
+
+    @Override
+    public boolean isComputingReference() {
+      return false;
+    }
+
+    @Override
+    public V waitForValue() {
+      return get();
+    }
+  }
+
+  /**
+   * References a soft value.
+   */
+  static final class SoftValueReference<K, V>
+      extends SoftReference<V> implements ValueReference<K, V> {
+    final ReferenceEntry<K, V> entry;
+
+    SoftValueReference(ReferenceQueue<V> queue, V referent, ReferenceEntry<K, V> entry) {
+      super(referent, queue);
+      this.entry = entry;
+    }
+
+    @Override
+    public ReferenceEntry<K, V> getEntry() {
+      return entry;
+    }
+
+    @Override
+    public void clear(ValueReference<K, V> newValue) {
+      clear();
+    }
+
+    @Override
+    public ValueReference<K, V> copyFor(ReferenceQueue<V> queue, ReferenceEntry<K, V> entry) {
+      return new SoftValueReference<K, V>(queue, get(), entry);
+    }
+
+    @Override
+    public boolean isComputingReference() {
+      return false;
+    }
+
+    @Override
+    public V waitForValue() {
+      return get();
+    }
+  }
+
+  /**
+   * References a strong value.
+   */
+  static final class StrongValueReference<K, V> implements ValueReference<K, V> {
+    final V referent;
+
+    StrongValueReference(V referent) {
+      this.referent = referent;
+    }
+
+    @Override
+    public V get() {
+      return referent;
+    }
+
+    @Override
+    public ReferenceEntry<K, V> getEntry() {
+      return null;
+    }
+
+    @Override
+    public ValueReference<K, V> copyFor(ReferenceQueue<V> queue, ReferenceEntry<K, V> entry) {
+      return this;
+    }
+
+    @Override
+    public boolean isComputingReference() {
+      return false;
+    }
+
+    @Override
+    public V waitForValue() {
+      return get();
+    }
+
+    @Override
+    public void clear(ValueReference<K, V> newValue) {}
+  }
+
+  /**
+   * Applies a supplemental hash function to a given hash code, which defends against poor quality
+   * hash functions. This is critical when the concurrent hash map uses power-of-two length hash
+   * tables, that otherwise encounter collisions for hash codes that do not differ in lower or
+   * upper bits.
+   *
+   * @param h hash code
+   */
+  static int rehash(int h) {
+    // Spread bits to regularize both segment and index locations,
+    // using variant of single-word Wang/Jenkins hash.
+    // TODO(kevinb): use Hashing/move this to Hashing?
+    h += (h << 15) ^ 0xffffcd7d;
+    h ^= (h >>> 10);
+    h += (h << 3);
+    h ^= (h >>> 6);
+    h += (h << 2) + (h << 14);
+    return h ^ (h >>> 16);
+  }
+
+  /**
+   * This method is a convenience for testing. Code should call {@link Segment#newEntry} directly.
+   */
+  @GuardedBy("Segment.this")
+  @VisibleForTesting
+  ReferenceEntry<K, V> newEntry(K key, int hash, @Nullable ReferenceEntry<K, V> next) {
+    return segmentFor(hash).newEntry(key, hash, next);
+  }
+
+  /**
+   * This method is a convenience for testing. Code should call {@link Segment#copyEntry} directly.
+   */
+  @GuardedBy("Segment.this")
+  @VisibleForTesting
+  ReferenceEntry<K, V> copyEntry(ReferenceEntry<K, V> original, ReferenceEntry<K, V> newNext) {
+    int hash = original.getHash();
+    return segmentFor(hash).copyEntry(original, newNext);
+  }
+
+  /**
+   * This method is a convenience for testing. Code should call {@link Segment#setValue} instead.
+   */
+  @GuardedBy("Segment.this")
+  @VisibleForTesting
+  ValueReference<K, V> newValueReference(ReferenceEntry<K, V> entry, V value) {
+    int hash = entry.getHash();
+    return valueStrength.referenceValue(segmentFor(hash), entry, value);
+  }
+
+  int hash(Object key) {
+    int h = keyEquivalence.hash(key);
+    return rehash(h);
+  }
+
+  void reclaimValue(ValueReference<K, V> valueReference) {
+    ReferenceEntry<K, V> entry = valueReference.getEntry();
+    int hash = entry.getHash();
+    segmentFor(hash).reclaimValue(entry.getKey(), hash, valueReference);
+  }
+
+  void reclaimKey(ReferenceEntry<K, V> entry) {
+    int hash = entry.getHash();
+    segmentFor(hash).reclaimKey(entry, hash);
+  }
+
+  /**
+   * This method is a convenience for testing. Code should call {@link Segment#getLiveValue}
+   * instead.
+   */
+  @VisibleForTesting
+  boolean isLive(ReferenceEntry<K, V> entry) {
+    return segmentFor(entry.getHash()).getLiveValue(entry) != null;
+  }
+
+  /**
+   * Returns the segment that should be used for a key with the given hash.
+   *
+   * @param hash the hash code for the key
+   * @return the segment
+   */
+  Segment<K, V> segmentFor(int hash) {
+    // TODO(fry): Lazily create segments?
+    return segments[(hash >>> segmentShift) & segmentMask];
+  }
+
+  Segment<K, V> createSegment(int initialCapacity, int maxSegmentSize) {
+    return new Segment<K, V>(this, initialCapacity, maxSegmentSize);
+  }
+
+  /**
+   * Gets the value from an entry. Returns {@code null} if the entry is invalid,
+   * partially-collected, computing, or expired. Unlike {@link Segment#getLiveValue} this method
+   * does not attempt to clean up stale entries.
+   */
+  V getLiveValue(ReferenceEntry<K, V> entry) {
+    if (entry.getKey() == null) {
+      return null;
+    }
+    V value = entry.getValueReference().get();
+    if (value == null) {
+      return null;
+    }
+
+    if (expires() && isExpired(entry)) {
+      return null;
+    }
+    return value;
+  }
+
+  // expiration
+
+  /**
+   * Returns {@code true} if the entry has expired.
+   */
+  boolean isExpired(ReferenceEntry<K, V> entry) {
+    return isExpired(entry, ticker.read());
+  }
+
+  /**
+   * Returns {@code true} if the entry has expired.
+   */
+  boolean isExpired(ReferenceEntry<K, V> entry, long now) {
+    // if the expiration time had overflowed, this "undoes" the overflow
+    return now - entry.getExpirationTime() > 0;
+  }
+
+  @GuardedBy("Segment.this")
+  static <K, V> void connectExpirables(ReferenceEntry<K, V> previous, ReferenceEntry<K, V> next) {
+    previous.setNextExpirable(next);
+    next.setPreviousExpirable(previous);
+  }
+
+  @GuardedBy("Segment.this")
+  static <K, V> void nullifyExpirable(ReferenceEntry<K, V> nulled) {
+    ReferenceEntry<K, V> nullEntry = nullEntry();
+    nulled.setNextExpirable(nullEntry);
+    nulled.setPreviousExpirable(nullEntry);
+  }
+
+  // eviction
+
+  /**
+   * Notifies listeners that an entry has been automatically removed due to expiration, eviction,
+   * or eligibility for garbage collection. This should be called every time expireEntries or
+   * evictEntry is called (once the lock is released).
+   */
+  void processPendingNotifications() {
+    RemovalNotification<K, V> notification;
+    while ((notification = removalNotificationQueue.poll()) != null) {
+      try {
+        removalListener.onRemoval(notification);
+      } catch (Exception e) {
+        logger.log(Level.WARNING, "Exception thrown by removal listener", e);
+      }
+    }
+  }
+
+  /** Links the evitables together. */
+  @GuardedBy("Segment.this")
+  static <K, V> void connectEvictables(ReferenceEntry<K, V> previous, ReferenceEntry<K, V> next) {
+    previous.setNextEvictable(next);
+    next.setPreviousEvictable(previous);
+  }
+
+  @GuardedBy("Segment.this")
+  static <K, V> void nullifyEvictable(ReferenceEntry<K, V> nulled) {
+    ReferenceEntry<K, V> nullEntry = nullEntry();
+    nulled.setNextEvictable(nullEntry);
+    nulled.setPreviousEvictable(nullEntry);
+  }
+
+  @SuppressWarnings("unchecked")
+  final Segment<K, V>[] newSegmentArray(int ssize) {
+    return new Segment[ssize];
+  }
+
+  // Inner Classes
+
+  /**
+   * Segments are specialized versions of hash tables. This subclass inherits from ReentrantLock
+   * opportunistically, just to simplify some locking and avoid separate construction.
+   */
+  @SuppressWarnings("serial") // This class is never serialized.
+  static class Segment<K, V> extends ReentrantLock {
+
+    /*
+     * TODO(fry): Consider copying variables (like evictsBySize) from outer class into this class.
+     * It will require more memory but will reduce indirection.
+     */
+
+    /*
+     * Segments maintain a table of entry lists that are ALWAYS kept in a consistent state, so can
+     * be read without locking. Next fields of nodes are immutable (final). All list additions are
+     * performed at the front of each bin. This makes it easy to check changes, and also fast to
+     * traverse. When nodes would otherwise be changed, new nodes are created to replace them. This
+     * works well for hash tables since the bin lists tend to be short. (The average length is less
+     * than two.)
+     *
+     * Read operations can thus proceed without locking, but rely on selected uses of volatiles to
+     * ensure that completed write operations performed by other threads are noticed. For most
+     * purposes, the "count" field, tracking the number of elements, serves as that volatile
+     * variable ensuring visibility. This is convenient because this field needs to be read in many
+     * read operations anyway:
+     *
+     * - All (unsynchronized) read operations must first read the "count" field, and should not
+     * look at table entries if it is 0.
+     *
+     * - All (synchronized) write operations should write to the "count" field after structurally
+     * changing any bin. The operations must not take any action that could even momentarily
+     * cause a concurrent read operation to see inconsistent data. This is made easier by the
+     * nature of the read operations in Map. For example, no operation can reveal that the table
+     * has grown but the threshold has not yet been updated, so there are no atomicity requirements
+     * for this with respect to reads.
+     *
+     * As a guide, all critical volatile reads and writes to the count field are marked in code
+     * comments.
+     */
+
+    final MapMakerInternalMap<K, V> map;
+
+    /**
+     * The number of live elements in this segment's region. This does not include unset elements
+     * which are awaiting cleanup.
+     */
+    volatile int count;
+
+    /**
+     * Number of updates that alter the size of the table. This is used during bulk-read methods to
+     * make sure they see a consistent snapshot: If modCounts change during a traversal of segments
+     * computing size or checking containsValue, then we might have an inconsistent view of state
+     * so (usually) must retry.
+     */
+    int modCount;
+
+    /**
+     * The table is expanded when its size exceeds this threshold. (The value of this field is
+     * always {@code (int)(capacity * 0.75)}.)
+     */
+    int threshold;
+
+    /**
+     * The per-segment table.
+     */
+    volatile AtomicReferenceArray<ReferenceEntry<K, V>> table;
+
+    /**
+     * The maximum size of this map. MapMaker.UNSET_INT if there is no maximum.
+     */
+    final int maxSegmentSize;
+
+    /**
+     * The key reference queue contains entries whose keys have been garbage collected, and which
+     * need to be cleaned up internally.
+     */
+    final ReferenceQueue<K> keyReferenceQueue;
+
+    /**
+     * The value reference queue contains value references whose values have been garbage collected,
+     * and which need to be cleaned up internally.
+     */
+    final ReferenceQueue<V> valueReferenceQueue;
+
+    /**
+     * The recency queue is used to record which entries were accessed for updating the eviction
+     * list's ordering. It is drained as a batch operation when either the DRAIN_THRESHOLD is
+     * crossed or a write occurs on the segment.
+     */
+    final Queue<ReferenceEntry<K, V>> recencyQueue;
+
+    /**
+     * A counter of the number of reads since the last write, used to drain queues on a small
+     * fraction of read operations.
+     */
+    final AtomicInteger readCount = new AtomicInteger();
+
+    /**
+     * A queue of elements currently in the map, ordered by access time. Elements are added to the
+     * tail of the queue on access/write.
+     */
+    @GuardedBy("Segment.this")
+    final Queue<ReferenceEntry<K, V>> evictionQueue;
+
+    /**
+     * A queue of elements currently in the map, ordered by expiration time (either access or write
+     * time). Elements are added to the tail of the queue on access/write.
+     */
+    @GuardedBy("Segment.this")
+    final Queue<ReferenceEntry<K, V>> expirationQueue;
+
+    Segment(MapMakerInternalMap<K, V> map, int initialCapacity, int maxSegmentSize) {
+      this.map = map;
+      this.maxSegmentSize = maxSegmentSize;
+      initTable(newEntryArray(initialCapacity));
+
+      keyReferenceQueue = map.usesKeyReferences()
+           ? new ReferenceQueue<K>() : null;
+
+      valueReferenceQueue = map.usesValueReferences()
+           ? new ReferenceQueue<V>() : null;
+
+      recencyQueue = (map.evictsBySize() || map.expiresAfterAccess())
+          ? new ConcurrentLinkedQueue<ReferenceEntry<K, V>>()
+          : MapMakerInternalMap.<ReferenceEntry<K, V>>discardingQueue();
+
+      evictionQueue = map.evictsBySize()
+          ? new EvictionQueue<K, V>()
+          : MapMakerInternalMap.<ReferenceEntry<K, V>>discardingQueue();
+
+      expirationQueue = map.expires()
+          ? new ExpirationQueue<K, V>()
+          : MapMakerInternalMap.<ReferenceEntry<K, V>>discardingQueue();
+    }
+
+    AtomicReferenceArray<ReferenceEntry<K, V>> newEntryArray(int size) {
+      return new AtomicReferenceArray<ReferenceEntry<K, V>>(size);
+    }
+
+    void initTable(AtomicReferenceArray<ReferenceEntry<K, V>> newTable) {
+      this.threshold = newTable.length() * 3 / 4; // 0.75
+      if (this.threshold == maxSegmentSize) {
+        // prevent spurious expansion before eviction
+        this.threshold++;
+      }
+      this.table = newTable;
+    }
+
+    @GuardedBy("Segment.this")
+    ReferenceEntry<K, V> newEntry(K key, int hash, @Nullable ReferenceEntry<K, V> next) {
+      return map.entryFactory.newEntry(this, key, hash, next);
+    }
+
+    @GuardedBy("Segment.this")
+    ReferenceEntry<K, V> copyEntry(ReferenceEntry<K, V> original, ReferenceEntry<K, V> newNext) {
+      ValueReference<K, V> valueReference = original.getValueReference();
+      ReferenceEntry<K, V> newEntry = map.entryFactory.copyEntry(this, original, newNext);
+      newEntry.setValueReference(valueReference.copyFor(this.valueReferenceQueue, newEntry));
+      return newEntry;
+    }
+
+    /**
+     * Sets a new value of an entry. Adds newly created entries at the end of the expiration queue.
+     */
+    @GuardedBy("Segment.this")
+    void setValue(ReferenceEntry<K, V> entry, V value) {
+      ValueReference<K, V> valueReference = map.valueStrength.referenceValue(this, entry, value);
+      entry.setValueReference(valueReference);
+      recordWrite(entry);
+    }
+
+    // reference queues, for garbage collection cleanup
+
+    /**
+     * Cleanup collected entries when the lock is available.
+     */
+    void tryDrainReferenceQueues() {
+      if (tryLock()) {
+        try {
+          drainReferenceQueues();
+        } finally {
+          unlock();
+        }
+      }
+    }
+
+    /**
+     * Drain the key and value reference queues, cleaning up internal entries containing garbage
+     * collected keys or values.
+     */
+    @GuardedBy("Segment.this")
+    void drainReferenceQueues() {
+      if (map.usesKeyReferences()) {
+        drainKeyReferenceQueue();
+      }
+      if (map.usesValueReferences()) {
+        drainValueReferenceQueue();
+      }
+    }
+
+    @GuardedBy("Segment.this")
+    void drainKeyReferenceQueue() {
+      Reference<? extends K> ref;
+      int i = 0;
+      while ((ref = keyReferenceQueue.poll()) != null) {
+        @SuppressWarnings("unchecked")
+        ReferenceEntry<K, V> entry = (ReferenceEntry<K, V>) ref;
+        map.reclaimKey(entry);
+        if (++i == DRAIN_MAX) {
+          break;
+        }
+      }
+    }
+
+    @GuardedBy("Segment.this")
+    void drainValueReferenceQueue() {
+      Reference<? extends V> ref;
+      int i = 0;
+      while ((ref = valueReferenceQueue.poll()) != null) {
+        @SuppressWarnings("unchecked")
+        ValueReference<K, V> valueReference = (ValueReference<K, V>) ref;
+        map.reclaimValue(valueReference);
+        if (++i == DRAIN_MAX) {
+          break;
+        }
+      }
+    }
+
+    /**
+     * Clears all entries from the key and value reference queues.
+     */
+    void clearReferenceQueues() {
+      if (map.usesKeyReferences()) {
+        clearKeyReferenceQueue();
+      }
+      if (map.usesValueReferences()) {
+        clearValueReferenceQueue();
+      }
+    }
+
+    void clearKeyReferenceQueue() {
+      while (keyReferenceQueue.poll() != null) {}
+    }
+
+    void clearValueReferenceQueue() {
+      while (valueReferenceQueue.poll() != null) {}
+    }
+
+    // recency queue, shared by expiration and eviction
+
+    /**
+     * Records the relative order in which this read was performed by adding {@code entry} to the
+     * recency queue. At write-time, or when the queue is full past the threshold, the queue will
+     * be drained and the entries therein processed.
+     *
+     * <p>Note: locked reads should use {@link #recordLockedRead}.
+     */
+    void recordRead(ReferenceEntry<K, V> entry) {
+      if (map.expiresAfterAccess()) {
+        recordExpirationTime(entry, map.expireAfterAccessNanos);
+      }
+      recencyQueue.add(entry);
+    }
+
+    /**
+     * Updates the eviction metadata that {@code entry} was just read. This currently amounts to
+     * adding {@code entry} to relevant eviction lists.
+     *
+     * <p>Note: this method should only be called under lock, as it directly manipulates the
+     * eviction queues. Unlocked reads should use {@link #recordRead}.
+     */
+    @GuardedBy("Segment.this")
+    void recordLockedRead(ReferenceEntry<K, V> entry) {
+      evictionQueue.add(entry);
+      if (map.expiresAfterAccess()) {
+        recordExpirationTime(entry, map.expireAfterAccessNanos);
+        expirationQueue.add(entry);
+      }
+    }
+
+    /**
+     * Updates eviction metadata that {@code entry} was just written. This currently amounts to
+     * adding {@code entry} to relevant eviction lists.
+     */
+    @GuardedBy("Segment.this")
+    void recordWrite(ReferenceEntry<K, V> entry) {
+      // we are already under lock, so drain the recency queue immediately
+      drainRecencyQueue();
+      evictionQueue.add(entry);
+      if (map.expires()) {
+        // currently MapMaker ensures that expireAfterWrite and
+        // expireAfterAccess are mutually exclusive
+        long expiration = map.expiresAfterAccess()
+            ? map.expireAfterAccessNanos
+            : map.expireAfterWriteNanos;
+        recordExpirationTime(entry, expiration);
+        expirationQueue.add(entry);
+      }
+    }
+
+    /**
+     * Drains the recency queue, updating eviction metadata that the entries therein were read in
+     * the specified relative order. This currently amounts to adding them to relevant eviction
+     * lists (accounting for the fact that they could have been removed from the map since being
+     * added to the recency queue).
+     */
+    @GuardedBy("Segment.this")
+    void drainRecencyQueue() {
+      ReferenceEntry<K, V> e;
+      while ((e = recencyQueue.poll()) != null) {
+        // An entry may be in the recency queue despite it being removed from
+        // the map . This can occur when the entry was concurrently read while a
+        // writer is removing it from the segment or after a clear has removed
+        // all of the segment's entries.
+        if (evictionQueue.contains(e)) {
+          evictionQueue.add(e);
+        }
+        if (map.expiresAfterAccess() && expirationQueue.contains(e)) {
+          expirationQueue.add(e);
+        }
+      }
+    }
+
+    // expiration
+
+    void recordExpirationTime(ReferenceEntry<K, V> entry, long expirationNanos) {
+      // might overflow, but that's okay (see isExpired())
+      entry.setExpirationTime(map.ticker.read() + expirationNanos);
+    }
+
+    /**
+     * Cleanup expired entries when the lock is available.
+     */
+    void tryExpireEntries() {
+      if (tryLock()) {
+        try {
+          expireEntries();
+        } finally {
+          unlock();
+          // don't call postWriteCleanup as we're in a read
+        }
+      }
+    }
+
+    @GuardedBy("Segment.this")
+    void expireEntries() {
+      drainRecencyQueue();
+
+      if (expirationQueue.isEmpty()) {
+        // There's no point in calling nanoTime() if we have no entries to
+        // expire.
+        return;
+      }
+      long now = map.ticker.read();
+      ReferenceEntry<K, V> e;
+      while ((e = expirationQueue.peek()) != null && map.isExpired(e, now)) {
+        if (!removeEntry(e, e.getHash(), RemovalCause.EXPIRED)) {
+          throw new AssertionError();
+        }
+      }
+    }
+
+    // eviction
+
+    void enqueueNotification(ReferenceEntry<K, V> entry, RemovalCause cause) {
+      enqueueNotification(entry.getKey(), entry.getHash(), entry.getValueReference().get(), cause);
+    }
+
+    void enqueueNotification(@Nullable K key, int hash, @Nullable V value, RemovalCause cause) {
+      if (map.removalNotificationQueue != DISCARDING_QUEUE) {
+        RemovalNotification<K, V> notification = new RemovalNotification<K, V>(key, value, cause);
+        map.removalNotificationQueue.offer(notification);
+      }
+    }
+
+    /**
+     * Performs eviction if the segment is full. This should only be called prior to adding a new
+     * entry and increasing {@code count}.
+     *
+     * @return {@code true} if eviction occurred
+     */
+    @GuardedBy("Segment.this")
+    boolean evictEntries() {
+      if (map.evictsBySize() && count >= maxSegmentSize) {
+        drainRecencyQueue();
+
+        ReferenceEntry<K, V> e = evictionQueue.remove();
+        if (!removeEntry(e, e.getHash(), RemovalCause.SIZE)) {
+          throw new AssertionError();
+        }
+        return true;
+      }
+      return false;
+    }
+
+    /**
+     * Returns first entry of bin for given hash.
+     */
+    ReferenceEntry<K, V> getFirst(int hash) {
+      // read this volatile field only once
+      AtomicReferenceArray<ReferenceEntry<K, V>> table = this.table;
+      return table.get(hash & (table.length() - 1));
+    }
+
+    // Specialized implementations of map methods
+
+    ReferenceEntry<K, V> getEntry(Object key, int hash) {
+      if (count != 0) { // read-volatile
+        for (ReferenceEntry<K, V> e = getFirst(hash); e != null; e = e.getNext()) {
+          if (e.getHash() != hash) {
+            continue;
+          }
+
+          K entryKey = e.getKey();
+          if (entryKey == null) {
+            tryDrainReferenceQueues();
+            continue;
+          }
+
+          if (map.keyEquivalence.equivalent(key, entryKey)) {
+            return e;
+          }
+        }
+      }
+
+      return null;
+    }
+
+    ReferenceEntry<K, V> getLiveEntry(Object key, int hash) {
+      ReferenceEntry<K, V> e = getEntry(key, hash);
+      if (e == null) {
+        return null;
+      } else if (map.expires() && map.isExpired(e)) {
+        tryExpireEntries();
+        return null;
+      }
+      return e;
+    }
+
+    V get(Object key, int hash) {
+      try {
+        ReferenceEntry<K, V> e = getLiveEntry(key, hash);
+        if (e == null) {
+          return null;
+        }
+
+        V value = e.getValueReference().get();
+        if (value != null) {
+          recordRead(e);
+        } else {
+          tryDrainReferenceQueues();
+        }
+        return value;
+      } finally {
+        postReadCleanup();
+      }
+    }
+
+    boolean containsKey(Object key, int hash) {
+      try {
+        if (count != 0) { // read-volatile
+          ReferenceEntry<K, V> e = getLiveEntry(key, hash);
+          if (e == null) {
+            return false;
+          }
+          return e.getValueReference().get() != null;
+        }
+
+        return false;
+      } finally {
+        postReadCleanup();
+      }
+    }
+
+    /**
+     * This method is a convenience for testing. Code should call {@link
+     * MapMakerInternalMap#containsValue} directly.
+     */
+    @VisibleForTesting
+    boolean containsValue(Object value) {
+      try {
+        if (count != 0) { // read-volatile
+          AtomicReferenceArray<ReferenceEntry<K, V>> table = this.table;
+          int length = table.length();
+          for (int i = 0; i < length; ++i) {
+            for (ReferenceEntry<K, V> e = table.get(i); e != null; e = e.getNext()) {
+              V entryValue = getLiveValue(e);
+              if (entryValue == null) {
+                continue;
+              }
+              if (map.valueEquivalence.equivalent(value, entryValue)) {
+                return true;
+              }
+            }
+          }
+        }
+
+        return false;
+      } finally {
+        postReadCleanup();
+      }
+    }
+
+    V put(K key, int hash, V value, boolean onlyIfAbsent) {
+      lock();
+      try {
+        preWriteCleanup();
+
+        int newCount = this.count + 1;
+        if (newCount > this.threshold) { // ensure capacity
+          expand();
+          newCount = this.count + 1;
+        }
+
+        AtomicReferenceArray<ReferenceEntry<K, V>> table = this.table;
+        int index = hash & (table.length() - 1);
+        ReferenceEntry<K, V> first = table.get(index);
+
+        // Look for an existing entry.
+        for (ReferenceEntry<K, V> e = first; e != null; e = e.getNext()) {
+          K entryKey = e.getKey();
+          if (e.getHash() == hash && entryKey != null
+              && map.keyEquivalence.equivalent(key, entryKey)) {
+            // We found an existing entry.
+
+            ValueReference<K, V> valueReference = e.getValueReference();
+            V entryValue = valueReference.get();
+
+            if (entryValue == null) {
+              ++modCount;
+              setValue(e, value);
+              if (!valueReference.isComputingReference()) {
+                enqueueNotification(key, hash, entryValue, RemovalCause.COLLECTED);
+                newCount = this.count; // count remains unchanged
+              } else if (evictEntries()) { // evictEntries after setting new value
+                newCount = this.count + 1;
+              }
+              this.count = newCount; // write-volatile
+              return null;
+            } else if (onlyIfAbsent) {
+              // Mimic
+              // "if (!map.containsKey(key)) ...
+              // else return map.get(key);
+              recordLockedRead(e);
+              return entryValue;
+            } else {
+              // clobber existing entry, count remains unchanged
+              ++modCount;
+              enqueueNotification(key, hash, entryValue, RemovalCause.REPLACED);
+              setValue(e, value);
+              return entryValue;
+            }
+          }
+        }
+
+        // Create a new entry.
+        ++modCount;
+        ReferenceEntry<K, V> newEntry = newEntry(key, hash, first);
+        setValue(newEntry, value);
+        table.set(index, newEntry);
+        if (evictEntries()) { // evictEntries after setting new value
+          newCount = this.count + 1;
+        }
+        this.count = newCount; // write-volatile
+        return null;
+      } finally {
+        unlock();
+        postWriteCleanup();
+      }
+    }
+
+    /**
+     * Expands the table if possible.
+     */
+    @GuardedBy("Segment.this")
+    void expand() {
+      AtomicReferenceArray<ReferenceEntry<K, V>> oldTable = table;
+      int oldCapacity = oldTable.length();
+      if (oldCapacity >= MAXIMUM_CAPACITY) {
+        return;
+      }
+
+      /*
+       * Reclassify nodes in each list to new Map. Because we are using power-of-two expansion, the
+       * elements from each bin must either stay at same index, or move with a power of two offset.
+       * We eliminate unnecessary node creation by catching cases where old nodes can be reused
+       * because their next fields won't change. Statistically, at the default threshold, only
+       * about one-sixth of them need cloning when a table doubles. The nodes they replace will be
+       * garbage collectable as soon as they are no longer referenced by any reader thread that may
+       * be in the midst of traversing table right now.
+       */
+
+      int newCount = count;
+      AtomicReferenceArray<ReferenceEntry<K, V>> newTable = newEntryArray(oldCapacity << 1);
+      threshold = newTable.length() * 3 / 4;
+      int newMask = newTable.length() - 1;
+      for (int oldIndex = 0; oldIndex < oldCapacity; ++oldIndex) {
+        // We need to guarantee that any existing reads of old Map can
+        // proceed. So we cannot yet null out each bin.
+        ReferenceEntry<K, V> head = oldTable.get(oldIndex);
+
+        if (head != null) {
+          ReferenceEntry<K, V> next = head.getNext();
+          int headIndex = head.getHash() & newMask;
+
+          // Single node on list
+          if (next == null) {
+            newTable.set(headIndex, head);
+          } else {
+            // Reuse the consecutive sequence of nodes with the same target
+            // index from the end of the list. tail points to the first
+            // entry in the reusable list.
+            ReferenceEntry<K, V> tail = head;
+            int tailIndex = headIndex;
+            for (ReferenceEntry<K, V> e = next; e != null; e = e.getNext()) {
+              int newIndex = e.getHash() & newMask;
+              if (newIndex != tailIndex) {
+                // The index changed. We'll need to copy the previous entry.
+                tailIndex = newIndex;
+                tail = e;
+              }
+            }
+            newTable.set(tailIndex, tail);
+
+            // Clone nodes leading up to the tail.
+            for (ReferenceEntry<K, V> e = head; e != tail; e = e.getNext()) {
+              if (isCollected(e)) {
+                removeCollectedEntry(e);
+                newCount--;
+              } else {
+                int newIndex = e.getHash() & newMask;
+                ReferenceEntry<K, V> newNext = newTable.get(newIndex);
+                ReferenceEntry<K, V> newFirst = copyEntry(e, newNext);
+                newTable.set(newIndex, newFirst);
+              }
+            }
+          }
+        }
+      }
+      table = newTable;
+      this.count = newCount;
+    }
+
+    boolean replace(K key, int hash, V oldValue, V newValue) {
+      lock();
+      try {
+        preWriteCleanup();
+
+        AtomicReferenceArray<ReferenceEntry<K, V>> table = this.table;
+        int index = hash & (table.length() - 1);
+        ReferenceEntry<K, V> first = table.get(index);
+
+        for (ReferenceEntry<K, V> e = first; e != null; e = e.getNext()) {
+          K entryKey = e.getKey();
+          if (e.getHash() == hash && entryKey != null
+              && map.keyEquivalence.equivalent(key, entryKey)) {
+            // If the value disappeared, this entry is partially collected,
+            // and we should pretend like it doesn't exist.
+            ValueReference<K, V> valueReference = e.getValueReference();
+            V entryValue = valueReference.get();
+            if (entryValue == null) {
+              if (isCollected(valueReference)) {
+                int newCount = this.count - 1;
+                ++modCount;
+                enqueueNotification(entryKey, hash, entryValue, RemovalCause.COLLECTED);
+                ReferenceEntry<K, V> newFirst = removeFromChain(first, e);
+                newCount = this.count - 1;
+                table.set(index, newFirst);
+                this.count = newCount; // write-volatile
+              }
+              return false;
+            }
+
+            if (map.valueEquivalence.equivalent(oldValue, entryValue)) {
+              ++modCount;
+              enqueueNotification(key, hash, entryValue, RemovalCause.REPLACED);
+              setValue(e, newValue);
+              return true;
+            } else {
+              // Mimic
+              // "if (map.containsKey(key) && map.get(key).equals(oldValue))..."
+              recordLockedRead(e);
+              return false;
+            }
+          }
+        }
+
+        return false;
+      } finally {
+        unlock();
+        postWriteCleanup();
+      }
+    }
+
+    V replace(K key, int hash, V newValue) {
+      lock();
+      try {
+        preWriteCleanup();
+
+        AtomicReferenceArray<ReferenceEntry<K, V>> table = this.table;
+        int index = hash & (table.length() - 1);
+        ReferenceEntry<K, V> first = table.get(index);
+
+        for (ReferenceEntry<K, V> e = first; e != null; e = e.getNext()) {
+          K entryKey = e.getKey();
+          if (e.getHash() == hash && entryKey != null
+              && map.keyEquivalence.equivalent(key, entryKey)) {
+            // If the value disappeared, this entry is partially collected,
+            // and we should pretend like it doesn't exist.
+            ValueReference<K, V> valueReference = e.getValueReference();
+            V entryValue = valueReference.get();
+            if (entryValue == null) {
+              if (isCollected(valueReference)) {
+                int newCount = this.count - 1;
+                ++modCount;
+                enqueueNotification(entryKey, hash, entryValue, RemovalCause.COLLECTED);
+                ReferenceEntry<K, V> newFirst = removeFromChain(first, e);
+                newCount = this.count - 1;
+                table.set(index, newFirst);
+                this.count = newCount; // write-volatile
+              }
+              return null;
+            }
+
+            ++modCount;
+            enqueueNotification(key, hash, entryValue, RemovalCause.REPLACED);
+            setValue(e, newValue);
+            return entryValue;
+          }
+        }
+
+        return null;
+      } finally {
+        unlock();
+        postWriteCleanup();
+      }
+    }
+
+    V remove(Object key, int hash) {
+      lock();
+      try {
+        preWriteCleanup();
+
+        int newCount = this.count - 1;
+        AtomicReferenceArray<ReferenceEntry<K, V>> table = this.table;
+        int index = hash & (table.length() - 1);
+        ReferenceEntry<K, V> first = table.get(index);
+
+        for (ReferenceEntry<K, V> e = first; e != null; e = e.getNext()) {
+          K entryKey = e.getKey();
+          if (e.getHash() == hash && entryKey != null
+              && map.keyEquivalence.equivalent(key, entryKey)) {
+            ValueReference<K, V> valueReference = e.getValueReference();
+            V entryValue = valueReference.get();
+
+            RemovalCause cause;
+            if (entryValue != null) {
+              cause = RemovalCause.EXPLICIT;
+            } else if (isCollected(valueReference)) {
+              cause = RemovalCause.COLLECTED;
+            } else {
+              return null;
+            }
+
+            ++modCount;
+            enqueueNotification(entryKey, hash, entryValue, cause);
+            ReferenceEntry<K, V> newFirst = removeFromChain(first, e);
+            newCount = this.count - 1;
+            table.set(index, newFirst);
+            this.count = newCount; // write-volatile
+            return entryValue;
+          }
+        }
+
+        return null;
+      } finally {
+        unlock();
+        postWriteCleanup();
+      }
+    }
+
+    boolean remove(Object key, int hash, Object value) {
+      lock();
+      try {
+        preWriteCleanup();
+
+        int newCount = this.count - 1;
+        AtomicReferenceArray<ReferenceEntry<K, V>> table = this.table;
+        int index = hash & (table.length() - 1);
+        ReferenceEntry<K, V> first = table.get(index);
+
+        for (ReferenceEntry<K, V> e = first; e != null; e = e.getNext()) {
+          K entryKey = e.getKey();
+          if (e.getHash() == hash && entryKey != null
+              && map.keyEquivalence.equivalent(key, entryKey)) {
+            ValueReference<K, V> valueReference = e.getValueReference();
+            V entryValue = valueReference.get();
+
+            RemovalCause cause;
+            if (map.valueEquivalence.equivalent(value, entryValue)) {
+              cause = RemovalCause.EXPLICIT;
+            } else if (isCollected(valueReference)) {
+              cause = RemovalCause.COLLECTED;
+            } else {
+              return false;
+            }
+
+            ++modCount;
+            enqueueNotification(entryKey, hash, entryValue, cause);
+            ReferenceEntry<K, V> newFirst = removeFromChain(first, e);
+            newCount = this.count - 1;
+            table.set(index, newFirst);
+            this.count = newCount; // write-volatile
+            return (cause == RemovalCause.EXPLICIT);
+          }
+        }
+
+        return false;
+      } finally {
+        unlock();
+        postWriteCleanup();
+      }
+    }
+
+    void clear() {
+      if (count != 0) {
+        lock();
+        try {
+          AtomicReferenceArray<ReferenceEntry<K, V>> table = this.table;
+          if (map.removalNotificationQueue != DISCARDING_QUEUE) {
+            for (int i = 0; i < table.length(); ++i) {
+              for (ReferenceEntry<K, V> e = table.get(i); e != null; e = e.getNext()) {
+                // Computing references aren't actually in the map yet.
+                if (!e.getValueReference().isComputingReference()) {
+                  enqueueNotification(e, RemovalCause.EXPLICIT);
+                }
+              }
+            }
+          }
+          for (int i = 0; i < table.length(); ++i) {
+            table.set(i, null);
+          }
+          clearReferenceQueues();
+          evictionQueue.clear();
+          expirationQueue.clear();
+          readCount.set(0);
+
+          ++modCount;
+          count = 0; // write-volatile
+        } finally {
+          unlock();
+          postWriteCleanup();
+        }
+      }
+    }
+
+    /**
+     * Removes an entry from within a table. All entries following the removed node can stay, but
+     * all preceding ones need to be cloned.
+     *
+     * <p>This method does not decrement count for the removed entry, but does decrement count for
+     * all partially collected entries which are skipped. As such callers which are modifying count
+     * must re-read it after calling removeFromChain.
+     *
+     * @param first the first entry of the table
+     * @param entry the entry being removed from the table
+     * @return the new first entry for the table
+     */
+    @GuardedBy("Segment.this")
+    ReferenceEntry<K, V> removeFromChain(ReferenceEntry<K, V> first, ReferenceEntry<K, V> entry) {
+      evictionQueue.remove(entry);
+      expirationQueue.remove(entry);
+
+      int newCount = count;
+      ReferenceEntry<K, V> newFirst = entry.getNext();
+      for (ReferenceEntry<K, V> e = first; e != entry; e = e.getNext()) {
+        if (isCollected(e)) {
+          removeCollectedEntry(e);
+          newCount--;
+        } else {
+          newFirst = copyEntry(e, newFirst);
+        }
+      }
+      this.count = newCount;
+      return newFirst;
+    }
+
+    void removeCollectedEntry(ReferenceEntry<K, V> entry) {
+      enqueueNotification(entry, RemovalCause.COLLECTED);
+      evictionQueue.remove(entry);
+      expirationQueue.remove(entry);
+    }
+
+    /**
+     * Removes an entry whose key has been garbage collected.
+     */
+    boolean reclaimKey(ReferenceEntry<K, V> entry, int hash) {
+      lock();
+      try {
+        int newCount = count - 1;
+        AtomicReferenceArray<ReferenceEntry<K, V>> table = this.table;
+        int index = hash & (table.length() - 1);
+        ReferenceEntry<K, V> first = table.get(index);
+
+        for (ReferenceEntry<K, V> e = first; e != null; e = e.getNext()) {
+          if (e == entry) {
+            ++modCount;
+            enqueueNotification(
+                e.getKey(), hash, e.getValueReference().get(), RemovalCause.COLLECTED);
+            ReferenceEntry<K, V> newFirst = removeFromChain(first, e);
+            newCount = this.count - 1;
+            table.set(index, newFirst);
+            this.count = newCount; // write-volatile
+            return true;
+          }
+        }
+
+        return false;
+      } finally {
+        unlock();
+        postWriteCleanup();
+      }
+    }
+
+    /**
+     * Removes an entry whose value has been garbage collected.
+     */
+    boolean reclaimValue(K key, int hash, ValueReference<K, V> valueReference) {
+      lock();
+      try {
+        int newCount = this.count - 1;
+        AtomicReferenceArray<ReferenceEntry<K, V>> table = this.table;
+        int index = hash & (table.length() - 1);
+        ReferenceEntry<K, V> first = table.get(index);
+
+        for (ReferenceEntry<K, V> e = first; e != null; e = e.getNext()) {
+          K entryKey = e.getKey();
+          if (e.getHash() == hash && entryKey != null
+              && map.keyEquivalence.equivalent(key, entryKey)) {
+            ValueReference<K, V> v = e.getValueReference();
+            if (v == valueReference) {
+              ++modCount;
+              enqueueNotification(key, hash, valueReference.get(), RemovalCause.COLLECTED);
+              ReferenceEntry<K, V> newFirst = removeFromChain(first, e);
+              newCount = this.count - 1;
+              table.set(index, newFirst);
+              this.count = newCount; // write-volatile
+              return true;
+            }
+            return false;
+          }
+        }
+
+        return false;
+      } finally {
+        unlock();
+        if (!isHeldByCurrentThread()) { // don't cleanup inside of put
+          postWriteCleanup();
+        }
+      }
+    }
+
+    /**
+     * Clears a value that has not yet been set, and thus does not require count to be modified.
+     */
+    boolean clearValue(K key, int hash, ValueReference<K, V> valueReference) {
+      lock();
+      try {
+        AtomicReferenceArray<ReferenceEntry<K, V>> table = this.table;
+        int index = hash & (table.length() - 1);
+        ReferenceEntry<K, V> first = table.get(index);
+
+        for (ReferenceEntry<K, V> e = first; e != null; e = e.getNext()) {
+          K entryKey = e.getKey();
+          if (e.getHash() == hash && entryKey != null
+              && map.keyEquivalence.equivalent(key, entryKey)) {
+            ValueReference<K, V> v = e.getValueReference();
+            if (v == valueReference) {
+              ReferenceEntry<K, V> newFirst = removeFromChain(first, e);
+              table.set(index, newFirst);
+              return true;
+            }
+            return false;
+          }
+        }
+
+        return false;
+      } finally {
+        unlock();
+        postWriteCleanup();
+      }
+    }
+
+    @GuardedBy("Segment.this")
+    boolean removeEntry(ReferenceEntry<K, V> entry, int hash, RemovalCause cause) {
+      int newCount = this.count - 1;
+      AtomicReferenceArray<ReferenceEntry<K, V>> table = this.table;
+      int index = hash & (table.length() - 1);
+      ReferenceEntry<K, V> first = table.get(index);
+
+      for (ReferenceEntry<K, V> e = first; e != null; e = e.getNext()) {
+        if (e == entry) {
+          ++modCount;
+          enqueueNotification(e.getKey(), hash, e.getValueReference().get(), cause);
+          ReferenceEntry<K, V> newFirst = removeFromChain(first, e);
+          newCount = this.count - 1;
+          table.set(index, newFirst);
+          this.count = newCount; // write-volatile
+          return true;
+        }
+      }
+
+      return false;
+    }
+
+    /**
+     * Returns {@code true} if the entry has been partially collected, meaning that either the key
+     * is null, or the value is null and it is not computing.
+     */
+    boolean isCollected(ReferenceEntry<K, V> entry) {
+      if (entry.getKey() == null) {
+        return true;
+      }
+      return isCollected(entry.getValueReference());
+    }
+
+    /**
+     * Returns {@code true} if the value has been partially collected, meaning that the value is
+     * null and it is not computing.
+     */
+    boolean isCollected(ValueReference<K, V> valueReference) {
+      if (valueReference.isComputingReference()) {
+        return false;
+      }
+      return (valueReference.get() == null);
+    }
+
+    /**
+     * Gets the value from an entry. Returns {@code null} if the entry is invalid,
+     * partially-collected, computing, or expired.
+     */
+    V getLiveValue(ReferenceEntry<K, V> entry) {
+      if (entry.getKey() == null) {
+        tryDrainReferenceQueues();
+        return null;
+      }
+      V value = entry.getValueReference().get();
+      if (value == null) {
+        tryDrainReferenceQueues();
+        return null;
+      }
+
+      if (map.expires() && map.isExpired(entry)) {
+        tryExpireEntries();
+        return null;
+      }
+      return value;
+    }
+
+    /**
+     * Performs routine cleanup following a read. Normally cleanup happens during writes, or from
+     * the cleanupExecutor. If cleanup is not observed after a sufficient number of reads, try
+     * cleaning up from the read thread.
+     */
+    void postReadCleanup() {
+      if ((readCount.incrementAndGet() & DRAIN_THRESHOLD) == 0) {
+        runCleanup();
+      }
+    }
+
+    /**
+     * Performs routine cleanup prior to executing a write. This should be called every time a
+     * write thread acquires the segment lock, immediately after acquiring the lock.
+     *
+     * <p>Post-condition: expireEntries has been run.
+     */
+    @GuardedBy("Segment.this")
+    void preWriteCleanup() {
+      runLockedCleanup();
+    }
+
+    /**
+     * Performs routine cleanup following a write.
+     */
+    void postWriteCleanup() {
+      runUnlockedCleanup();
+    }
+
+    void runCleanup() {
+      runLockedCleanup();
+      runUnlockedCleanup();
+    }
+
+    void runLockedCleanup() {
+      if (tryLock()) {
+        try {
+          drainReferenceQueues();
+          expireEntries(); // calls drainRecencyQueue
+          readCount.set(0);
+        } finally {
+          unlock();
+        }
+      }
+    }
+
+    void runUnlockedCleanup() {
+      // locked cleanup may generate notifications we can send unlocked
+      if (!isHeldByCurrentThread()) {
+        map.processPendingNotifications();
+      }
+    }
+
+  }
+
+  // Queues
+
+  /**
+   * A custom queue for managing eviction order. Note that this is tightly integrated with {@code
+   * ReferenceEntry}, upon which it relies to perform its linking.
+   *
+   * <p>Note that this entire implementation makes the assumption that all elements which are in
+   * the map are also in this queue, and that all elements not in the queue are not in the map.
+   *
+   * <p>The benefits of creating our own queue are that (1) we can replace elements in the middle
+   * of the queue as part of copyEvictableEntry, and (2) the contains method is highly optimized
+   * for the current model.
+   */
+  static final class EvictionQueue<K, V> extends AbstractQueue<ReferenceEntry<K, V>> {
+    final ReferenceEntry<K, V> head = new AbstractReferenceEntry<K, V>() {
+
+      ReferenceEntry<K, V> nextEvictable = this;
+
+      @Override
+      public ReferenceEntry<K, V> getNextEvictable() {
+        return nextEvictable;
+      }
+
+      @Override
+      public void setNextEvictable(ReferenceEntry<K, V> next) {
+        this.nextEvictable = next;
+      }
+
+      ReferenceEntry<K, V> previousEvictable = this;
+
+      @Override
+      public ReferenceEntry<K, V> getPreviousEvictable() {
+        return previousEvictable;
+      }
+
+      @Override
+      public void setPreviousEvictable(ReferenceEntry<K, V> previous) {
+        this.previousEvictable = previous;
+      }
+    };
+
+    // implements Queue
+
+    @Override
+    public boolean offer(ReferenceEntry<K, V> entry) {
+      // unlink
+      connectEvictables(entry.getPreviousEvictable(), entry.getNextEvictable());
+
+      // add to tail
+      connectEvictables(head.getPreviousEvictable(), entry);
+      connectEvictables(entry, head);
+
+      return true;
+    }
+
+    @Override
+    public ReferenceEntry<K, V> peek() {
+      ReferenceEntry<K, V> next = head.getNextEvictable();
+      return (next == head) ? null : next;
+    }
+
+    @Override
+    public ReferenceEntry<K, V> poll() {
+      ReferenceEntry<K, V> next = head.getNextEvictable();
+      if (next == head) {
+        return null;
+      }
+
+      remove(next);
+      return next;
+    }
+
+    @Override
+    @SuppressWarnings("unchecked")
+    public boolean remove(Object o) {
+      ReferenceEntry<K, V> e = (ReferenceEntry) o;
+      ReferenceEntry<K, V> previous = e.getPreviousEvictable();
+      ReferenceEntry<K, V> next = e.getNextEvictable();
+      connectEvictables(previous, next);
+      nullifyEvictable(e);
+
+      return next != NullEntry.INSTANCE;
+    }
+
+    @Override
+    @SuppressWarnings("unchecked")
+    public boolean contains(Object o) {
+      ReferenceEntry<K, V> e = (ReferenceEntry) o;
+      return e.getNextEvictable() != NullEntry.INSTANCE;
+    }
+
+    @Override
+    public boolean isEmpty() {
+      return head.getNextEvictable() == head;
+    }
+
+    @Override
+    public int size() {
+      int size = 0;
+      for (ReferenceEntry<K, V> e = head.getNextEvictable(); e != head; e = e.getNextEvictable()) {
+        size++;
+      }
+      return size;
+    }
+
+    @Override
+    public void clear() {
+      ReferenceEntry<K, V> e = head.getNextEvictable();
+      while (e != head) {
+        ReferenceEntry<K, V> next = e.getNextEvictable();
+        nullifyEvictable(e);
+        e = next;
+      }
+
+      head.setNextEvictable(head);
+      head.setPreviousEvictable(head);
+    }
+
+    @Override
+    public Iterator<ReferenceEntry<K, V>> iterator() {
+      return new AbstractLinkedIterator<ReferenceEntry<K, V>>(peek()) {
+        @Override
+        protected ReferenceEntry<K, V> computeNext(ReferenceEntry<K, V> previous) {
+          ReferenceEntry<K, V> next = previous.getNextEvictable();
+          return (next == head) ? null : next;
+        }
+      };
+    }
+  }
+
+  /**
+   * A custom queue for managing expiration order. Note that this is tightly integrated with
+   * {@code ReferenceEntry}, upon which it reliese to perform its linking.
+   *
+   * <p>Note that this entire implementation makes the assumption that all elements which are in
+   * the map are also in this queue, and that all elements not in the queue are not in the map.
+   *
+   * <p>The benefits of creating our own queue are that (1) we can replace elements in the middle
+   * of the queue as part of copyEvictableEntry, and (2) the contains method is highly optimized
+   * for the current model.
+   */
+  static final class ExpirationQueue<K, V> extends AbstractQueue<ReferenceEntry<K, V>> {
+    final ReferenceEntry<K, V> head = new AbstractReferenceEntry<K, V>() {
+
+      @Override
+      public long getExpirationTime() {
+        return Long.MAX_VALUE;
+      }
+
+      @Override
+      public void setExpirationTime(long time) {}
+
+      ReferenceEntry<K, V> nextExpirable = this;
+
+      @Override
+      public ReferenceEntry<K, V> getNextExpirable() {
+        return nextExpirable;
+      }
+
+      @Override
+      public void setNextExpirable(ReferenceEntry<K, V> next) {
+        this.nextExpirable = next;
+      }
+
+      ReferenceEntry<K, V> previousExpirable = this;
+
+      @Override
+      public ReferenceEntry<K, V> getPreviousExpirable() {
+        return previousExpirable;
+      }
+
+      @Override
+      public void setPreviousExpirable(ReferenceEntry<K, V> previous) {
+        this.previousExpirable = previous;
+      }
+    };
+
+    // implements Queue
+
+    @Override
+    public boolean offer(ReferenceEntry<K, V> entry) {
+      // unlink
+      connectExpirables(entry.getPreviousExpirable(), entry.getNextExpirable());
+
+      // add to tail
+      connectExpirables(head.getPreviousExpirable(), entry);
+      connectExpirables(entry, head);
+
+      return true;
+    }
+
+    @Override
+    public ReferenceEntry<K, V> peek() {
+      ReferenceEntry<K, V> next = head.getNextExpirable();
+      return (next == head) ? null : next;
+    }
+
+    @Override
+    public ReferenceEntry<K, V> poll() {
+      ReferenceEntry<K, V> next = head.getNextExpirable();
+      if (next == head) {
+        return null;
+      }
+
+      remove(next);
+      return next;
+    }
+
+    @Override
+    @SuppressWarnings("unchecked")
+    public boolean remove(Object o) {
+      ReferenceEntry<K, V> e = (ReferenceEntry) o;
+      ReferenceEntry<K, V> previous = e.getPreviousExpirable();
+      ReferenceEntry<K, V> next = e.getNextExpirable();
+      connectExpirables(previous, next);
+      nullifyExpirable(e);
+
+      return next != NullEntry.INSTANCE;
+    }
+
+    @Override
+    @SuppressWarnings("unchecked")
+    public boolean contains(Object o) {
+      ReferenceEntry<K, V> e = (ReferenceEntry) o;
+      return e.getNextExpirable() != NullEntry.INSTANCE;
+    }
+
+    @Override
+    public boolean isEmpty() {
+      return head.getNextExpirable() == head;
+    }
+
+    @Override
+    public int size() {
+      int size = 0;
+      for (ReferenceEntry<K, V> e = head.getNextExpirable(); e != head; e = e.getNextExpirable()) {
+        size++;
+      }
+      return size;
+    }
+
+    @Override
+    public void clear() {
+      ReferenceEntry<K, V> e = head.getNextExpirable();
+      while (e != head) {
+        ReferenceEntry<K, V> next = e.getNextExpirable();
+        nullifyExpirable(e);
+        e = next;
+      }
+
+      head.setNextExpirable(head);
+      head.setPreviousExpirable(head);
+    }
+
+    @Override
+    public Iterator<ReferenceEntry<K, V>> iterator() {
+      return new AbstractLinkedIterator<ReferenceEntry<K, V>>(peek()) {
+        @Override
+        protected ReferenceEntry<K, V> computeNext(ReferenceEntry<K, V> previous) {
+          ReferenceEntry<K, V> next = previous.getNextExpirable();
+          return (next == head) ? null : next;
+        }
+      };
+    }
+  }
+
+  static final class CleanupMapTask implements Runnable {
+    final WeakReference<MapMakerInternalMap<?, ?>> mapReference;
+
+    public CleanupMapTask(MapMakerInternalMap<?, ?> map) {
+      this.mapReference = new WeakReference<MapMakerInternalMap<?, ?>>(map);
+    }
+
+    @Override
+    public void run() {
+      MapMakerInternalMap<?, ?> map = mapReference.get();
+      if (map == null) {
+        throw new CancellationException();
+      }
+
+      for (Segment<?, ?> segment : map.segments) {
+        segment.runCleanup();
+      }
+    }
+  }
+
+  // ConcurrentMap methods
+
+  @Override
+  public boolean isEmpty() {
+    /*
+     * Sum per-segment modCounts to avoid mis-reporting when elements are concurrently added and
+     * removed in one segment while checking another, in which case the table was never actually
+     * empty at any point. (The sum ensures accuracy up through at least 1<<31 per-segment
+     * modifications before recheck.)  Method containsValue() uses similar constructions for
+     * stability checks.
+     */
+    long sum = 0L;
+    Segment<K, V>[] segments = this.segments;
+    for (int i = 0; i < segments.length; ++i) {
+      if (segments[i].count != 0) {
+        return false;
+      }
+      sum += segments[i].modCount;
+    }
+
+    if (sum != 0L) { // recheck unless no modifications
+      for (int i = 0; i < segments.length; ++i) {
+        if (segments[i].count != 0) {
+          return false;
+        }
+        sum -= segments[i].modCount;
+      }
+      if (sum != 0L) {
+        return false;
+      }
+    }
+    return true;
+  }
+
+  @Override
+  public int size() {
+    Segment<K, V>[] segments = this.segments;
+    long sum = 0;
+    for (int i = 0; i < segments.length; ++i) {
+      sum += segments[i].count;
+    }
+    return Ints.saturatedCast(sum);
+  }
+
+  @Override
+  public V get(@Nullable Object key) {
+    if (key == null) {
+      return null;
+    }
+    int hash = hash(key);
+    return segmentFor(hash).get(key, hash);
+  }
+
+  /**
+   * Returns the internal entry for the specified key. The entry may be computing, expired, or
+   * partially collected. Does not impact recency ordering.
+   */
+  ReferenceEntry<K, V> getEntry(@Nullable Object key) {
+    if (key == null) {
+      return null;
+    }
+    int hash = hash(key);
+    return segmentFor(hash).getEntry(key, hash);
+  }
+
+  /**
+   * Returns the live internal entry for the specified key. Does not impact recency ordering.
+   */
+  ReferenceEntry<K, V> getLiveEntry(@Nullable Object key) {
+    if (key == null) {
+      return null;
+    }
+    int hash = hash(key);
+    return segmentFor(hash).getLiveEntry(key, hash);
+  }
+
+  @Override
+  public boolean containsKey(@Nullable Object key) {
+    if (key == null) {
+      return false;
+    }
+    int hash = hash(key);
+    return segmentFor(hash).containsKey(key, hash);
+  }
+
+  @Override
+  public boolean containsValue(@Nullable Object value) {
+    if (value == null) {
+      return false;
+    }
+
+    // This implementation is patterned after ConcurrentHashMap, but without the locking. The only
+    // way for it to return a false negative would be for the target value to jump around in the map
+    // such that none of the subsequent iterations observed it, despite the fact that at every point
+    // in time it was present somewhere int the map. This becomes increasingly unlikely as
+    // CONTAINS_VALUE_RETRIES increases, though without locking it is theoretically possible.
+    final Segment<K,V>[] segments = this.segments;
+    long last = -1L;
+    for (int i = 0; i < CONTAINS_VALUE_RETRIES; i++) {
+      long sum = 0L;
+      for (Segment<K, V> segment : segments) {
+        // ensure visibility of most recent completed write
+        @SuppressWarnings({"UnusedDeclaration", "unused"})
+        int c = segment.count; // read-volatile
+
+        AtomicReferenceArray<ReferenceEntry<K, V>> table = segment.table;
+        for (int j = 0 ; j < table.length(); j++) {
+          for (ReferenceEntry<K, V> e = table.get(j); e != null; e = e.getNext()) {
+            V v = segment.getLiveValue(e);
+            if (v != null && valueEquivalence.equivalent(value, v)) {
+              return true;
+            }
+          }
+        }
+        sum += segment.modCount;
+      }
+      if (sum == last) {
+        break;
+      }
+      last = sum;
+    }
+    return false;
+  }
+
+  @Override
+  public V put(K key, V value) {
+    checkNotNull(key);
+    checkNotNull(value);
+    int hash = hash(key);
+    return segmentFor(hash).put(key, hash, value, false);
+  }
+
+  @Override
+  public V putIfAbsent(K key, V value) {
+    checkNotNull(key);
+    checkNotNull(value);
+    int hash = hash(key);
+    return segmentFor(hash).put(key, hash, value, true);
+  }
+
+  @Override
+  public void putAll(Map<? extends K, ? extends V> m) {
+    for (Entry<? extends K, ? extends V> e : m.entrySet()) {
+      put(e.getKey(), e.getValue());
+    }
+  }
+
+  @Override
+  public V remove(@Nullable Object key) {
+    if (key == null) {
+      return null;
+    }
+    int hash = hash(key);
+    return segmentFor(hash).remove(key, hash);
+  }
+
+  @Override
+  public boolean remove(@Nullable Object key, @Nullable Object value) {
+    if (key == null || value == null) {
+      return false;
+    }
+    int hash = hash(key);
+    return segmentFor(hash).remove(key, hash, value);
+  }
+
+  @Override
+  public boolean replace(K key, @Nullable V oldValue, V newValue) {
+    checkNotNull(key);
+    checkNotNull(newValue);
+    if (oldValue == null) {
+      return false;
+    }
+    int hash = hash(key);
+    return segmentFor(hash).replace(key, hash, oldValue, newValue);
+  }
+
+  @Override
+  public V replace(K key, V value) {
+    checkNotNull(key);
+    checkNotNull(value);
+    int hash = hash(key);
+    return segmentFor(hash).replace(key, hash, value);
+  }
+
+  @Override
+  public void clear() {
+    for (Segment<K, V> segment : segments) {
+      segment.clear();
+    }
+  }
+
+  Set<K> keySet;
+
+  @Override
+  public Set<K> keySet() {
+    Set<K> ks = keySet;
+    return (ks != null) ? ks : (keySet = new KeySet());
+  }
+
+  Collection<V> values;
+
+  @Override
+  public Collection<V> values() {
+    Collection<V> vs = values;
+    return (vs != null) ? vs : (values = new Values());
+  }
+
+  Set<Entry<K, V>> entrySet;
+
+  @Override
+  public Set<Entry<K, V>> entrySet() {
+    Set<Entry<K, V>> es = entrySet;
+    return (es != null) ? es : (entrySet = new EntrySet());
+  }
+
+  // Iterator Support
+
+  abstract class HashIterator {
+
+    int nextSegmentIndex;
+    int nextTableIndex;
+    Segment<K, V> currentSegment;
+    AtomicReferenceArray<ReferenceEntry<K, V>> currentTable;
+    ReferenceEntry<K, V> nextEntry;
+    WriteThroughEntry nextExternal;
+    WriteThroughEntry lastReturned;
+
+    HashIterator() {
+      nextSegmentIndex = segments.length - 1;
+      nextTableIndex = -1;
+      advance();
+    }
+
+    final void advance() {
+      nextExternal = null;
+
+      if (nextInChain()) {
+        return;
+      }
+
+      if (nextInTable()) {
+        return;
+      }
+
+      while (nextSegmentIndex >= 0) {
+        currentSegment = segments[nextSegmentIndex--];
+        if (currentSegment.count != 0) {
+          currentTable = currentSegment.table;
+          nextTableIndex = currentTable.length() - 1;
+          if (nextInTable()) {
+            return;
+          }
+        }
+      }
+    }
+
+    /**
+     * Finds the next entry in the current chain. Returns {@code true} if an entry was found.
+     */
+    boolean nextInChain() {
+      if (nextEntry != null) {
+        for (nextEntry = nextEntry.getNext(); nextEntry != null; nextEntry = nextEntry.getNext()) {
+          if (advanceTo(nextEntry)) {
+            return true;
+          }
+        }
+      }
+      return false;
+    }
+
+    /**
+     * Finds the next entry in the current table. Returns {@code true} if an entry was found.
+     */
+    boolean nextInTable() {
+      while (nextTableIndex >= 0) {
+        if ((nextEntry = currentTable.get(nextTableIndex--)) != null) {
+          if (advanceTo(nextEntry) || nextInChain()) {
+            return true;
+          }
+        }
+      }
+      return false;
+    }
+
+    /**
+     * Advances to the given entry. Returns {@code true} if the entry was valid, {@code false} if it
+     * should be skipped.
+     */
+    boolean advanceTo(ReferenceEntry<K, V> entry) {
+      try {
+        K key = entry.getKey();
+        V value = getLiveValue(entry);
+        if (value != null) {
+          nextExternal = new WriteThroughEntry(key, value);
+          return true;
+        } else {
+          // Skip stale entry.
+          return false;
+        }
+      } finally {
+        currentSegment.postReadCleanup();
+      }
+    }
+
+    public boolean hasNext() {
+      return nextExternal != null;
+    }
+
+    WriteThroughEntry nextEntry() {
+      if (nextExternal == null) {
+        throw new NoSuchElementException();
+      }
+      lastReturned = nextExternal;
+      advance();
+      return lastReturned;
+    }
+
+    public void remove() {
+      checkState(lastReturned != null);
+      MapMakerInternalMap.this.remove(lastReturned.getKey());
+      lastReturned = null;
+    }
+  }
+
+  final class KeyIterator extends HashIterator implements Iterator<K> {
+
+    @Override
+    public K next() {
+      return nextEntry().getKey();
+    }
+  }
+
+  final class ValueIterator extends HashIterator implements Iterator<V> {
+
+    @Override
+    public V next() {
+      return nextEntry().getValue();
+    }
+  }
+
+  /**
+   * Custom Entry class used by EntryIterator.next(), that relays setValue changes to the
+   * underlying map.
+   */
+  final class WriteThroughEntry extends AbstractMapEntry<K, V> {
+    final K key; // non-null
+    V value; // non-null
+
+    WriteThroughEntry(K key, V value) {
+      this.key = key;
+      this.value = value;
+    }
+
+    @Override
+    public K getKey() {
+      return key;
+    }
+
+    @Override
+    public V getValue() {
+      return value;
+    }
+
+    @Override
+    public boolean equals(@Nullable Object object) {
+      // Cannot use key and value equivalence
+      if (object instanceof Entry) {
+        Entry<?, ?> that = (Entry<?, ?>) object;
+        return key.equals(that.getKey()) && value.equals(that.getValue());
+      }
+      return false;
+    }
+
+    @Override
+    public int hashCode() {
+      // Cannot use key and value equivalence
+      return key.hashCode() ^ value.hashCode();
+    }
+
+    @Override
+    public V setValue(V newValue) {
+      V oldValue = put(key, newValue);
+      value = newValue; // only if put succeeds
+      return oldValue;
+    }
+  }
+
+  final class EntryIterator extends HashIterator implements Iterator<Entry<K, V>> {
+
+    @Override
+    public Entry<K, V> next() {
+      return nextEntry();
+    }
+  }
+
+  final class KeySet extends AbstractSet<K> {
+
+    @Override
+    public Iterator<K> iterator() {
+      return new KeyIterator();
+    }
+
+    @Override
+    public int size() {
+      return MapMakerInternalMap.this.size();
+    }
+
+    @Override
+    public boolean isEmpty() {
+      return MapMakerInternalMap.this.isEmpty();
+    }
+
+    @Override
+    public boolean contains(Object o) {
+      return MapMakerInternalMap.this.containsKey(o);
+    }
+
+    @Override
+    public boolean remove(Object o) {
+      return MapMakerInternalMap.this.remove(o) != null;
+    }
+
+    @Override
+    public void clear() {
+      MapMakerInternalMap.this.clear();
+    }
+  }
+
+  final class Values extends AbstractCollection<V> {
+
+    @Override
+    public Iterator<V> iterator() {
+      return new ValueIterator();
+    }
+
+    @Override
+    public int size() {
+      return MapMakerInternalMap.this.size();
+    }
+
+    @Override
+    public boolean isEmpty() {
+      return MapMakerInternalMap.this.isEmpty();
+    }
+
+    @Override
+    public boolean contains(Object o) {
+      return MapMakerInternalMap.this.containsValue(o);
+    }
+
+    @Override
+    public void clear() {
+      MapMakerInternalMap.this.clear();
+    }
+  }
+
+  final class EntrySet extends AbstractSet<Entry<K, V>> {
+
+    @Override
+    public Iterator<Entry<K, V>> iterator() {
+      return new EntryIterator();
+    }
+
+    @Override
+    public boolean contains(Object o) {
+      if (!(o instanceof Entry)) {
+        return false;
+      }
+      Entry<?, ?> e = (Entry<?, ?>) o;
+      Object key = e.getKey();
+      if (key == null) {
+        return false;
+      }
+      V v = MapMakerInternalMap.this.get(key);
+
+      return v != null && valueEquivalence.equivalent(e.getValue(), v);
+    }
+
+    @Override
+    public boolean remove(Object o) {
+      if (!(o instanceof Entry)) {
+        return false;
+      }
+      Entry<?, ?> e = (Entry<?, ?>) o;
+      Object key = e.getKey();
+      return key != null && MapMakerInternalMap.this.remove(key, e.getValue());
+    }
+
+    @Override
+    public int size() {
+      return MapMakerInternalMap.this.size();
+    }
+
+    @Override
+    public boolean isEmpty() {
+      return MapMakerInternalMap.this.isEmpty();
+    }
+
+    @Override
+    public void clear() {
+      MapMakerInternalMap.this.clear();
+    }
+  }
+
+  // Serialization Support
+
+  private static final long serialVersionUID = 5;
+
+  Object writeReplace() {
+    return new SerializationProxy<K, V>(keyStrength, valueStrength, keyEquivalence,
+        valueEquivalence, expireAfterWriteNanos, expireAfterAccessNanos, maximumSize,
+        concurrencyLevel, removalListener, this);
+  }
+
+  /**
+   * The actual object that gets serialized. Unfortunately, readResolve() doesn't get called when a
+   * circular dependency is present, so the proxy must be able to behave as the map itself.
+   */
+  abstract static class AbstractSerializationProxy<K, V>
+      extends ForwardingConcurrentMap<K, V> implements Serializable {
+    private static final long serialVersionUID = 3;
+
+    final Strength keyStrength;
+    final Strength valueStrength;
+    final Equivalence<Object> keyEquivalence;
+    final Equivalence<Object> valueEquivalence;
+    final long expireAfterWriteNanos;
+    final long expireAfterAccessNanos;
+    final int maximumSize;
+    final int concurrencyLevel;
+    final RemovalListener<? super K, ? super V> removalListener;
+
+    transient ConcurrentMap<K, V> delegate;
+
+    AbstractSerializationProxy(Strength keyStrength, Strength valueStrength,
+        Equivalence<Object> keyEquivalence, Equivalence<Object> valueEquivalence,
+        long expireAfterWriteNanos, long expireAfterAccessNanos, int maximumSize,
+        int concurrencyLevel, RemovalListener<? super K, ? super V> removalListener,
+        ConcurrentMap<K, V> delegate) {
+      this.keyStrength = keyStrength;
+      this.valueStrength = valueStrength;
+      this.keyEquivalence = keyEquivalence;
+      this.valueEquivalence = valueEquivalence;
+      this.expireAfterWriteNanos = expireAfterWriteNanos;
+      this.expireAfterAccessNanos = expireAfterAccessNanos;
+      this.maximumSize = maximumSize;
+      this.concurrencyLevel = concurrencyLevel;
+      this.removalListener = removalListener;
+      this.delegate = delegate;
+    }
+
+    @Override
+    protected ConcurrentMap<K, V> delegate() {
+      return delegate;
+    }
+
+    void writeMapTo(ObjectOutputStream out) throws IOException {
+      out.writeInt(delegate.size());
+      for (Entry<K, V> entry : delegate.entrySet()) {
+        out.writeObject(entry.getKey());
+        out.writeObject(entry.getValue());
+      }
+      out.writeObject(null); // terminate entries
+    }
+
+    @SuppressWarnings("deprecation") // serialization of deprecated feature
+    MapMaker readMapMaker(ObjectInputStream in) throws IOException {
+      int size = in.readInt();
+      MapMaker mapMaker = new MapMaker()
+          .initialCapacity(size)
+          .setKeyStrength(keyStrength)
+          .setValueStrength(valueStrength)
+          .keyEquivalence(keyEquivalence)
+          .valueEquivalence(valueEquivalence)
+          .concurrencyLevel(concurrencyLevel);
+      mapMaker.removalListener(removalListener);
+      if (expireAfterWriteNanos > 0) {
+        mapMaker.expireAfterWrite(expireAfterWriteNanos, TimeUnit.NANOSECONDS);
+      }
+      if (expireAfterAccessNanos > 0) {
+        mapMaker.expireAfterAccess(expireAfterAccessNanos, TimeUnit.NANOSECONDS);
+      }
+      if (maximumSize != MapMaker.UNSET_INT) {
+        mapMaker.maximumSize(maximumSize);
+      }
+      return mapMaker;
+    }
+
+    @SuppressWarnings("unchecked")
+    void readEntries(ObjectInputStream in) throws IOException, ClassNotFoundException {
+      while (true) {
+        K key = (K) in.readObject();
+        if (key == null) {
+          break; // terminator
+        }
+        V value = (V) in.readObject();
+        delegate.put(key, value);
+      }
+    }
+  }
+
+  /**
+   * The actual object that gets serialized. Unfortunately, readResolve() doesn't get called when a
+   * circular dependency is present, so the proxy must be able to behave as the map itself.
+   */
+  private static final class SerializationProxy<K, V> extends AbstractSerializationProxy<K, V> {
+    private static final long serialVersionUID = 3;
+
+    SerializationProxy(Strength keyStrength, Strength valueStrength,
+        Equivalence<Object> keyEquivalence, Equivalence<Object> valueEquivalence,
+        long expireAfterWriteNanos, long expireAfterAccessNanos, int maximumSize,
+        int concurrencyLevel, RemovalListener<? super K, ? super V> removalListener,
+        ConcurrentMap<K, V> delegate) {
+      super(keyStrength, valueStrength, keyEquivalence, valueEquivalence, expireAfterWriteNanos,
+          expireAfterAccessNanos, maximumSize, concurrencyLevel, removalListener, delegate);
+    }
+
+    private void writeObject(ObjectOutputStream out) throws IOException {
+      out.defaultWriteObject();
+      writeMapTo(out);
+    }
+
+    private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
+      in.defaultReadObject();
+      MapMaker mapMaker = readMapMaker(in);
+      delegate = mapMaker.makeMap();
+      readEntries(in);
+    }
+
+    private Object readResolve() {
+      return delegate;
+    }
+  }
+}
diff --git a/guava/src/com/google/common/collect/Maps.java b/guava/src/com/google/common/collect/Maps.java
new file mode 100644
index 0000000..2aea6b7
--- /dev/null
+++ b/guava/src/com/google/common/collect/Maps.java
@@ -0,0 +1,2291 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.base.Equivalence;
+import com.google.common.base.Equivalences;
+import com.google.common.base.Function;
+import com.google.common.base.Joiner.MapJoiner;
+import com.google.common.base.Objects;
+import com.google.common.base.Preconditions;
+import com.google.common.base.Predicate;
+import com.google.common.base.Predicates;
+import com.google.common.collect.MapDifference.ValueDifference;
+import com.google.common.primitives.Ints;
+
+import java.io.Serializable;
+import java.util.AbstractCollection;
+import java.util.AbstractMap;
+import java.util.AbstractSet;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.EnumMap;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.IdentityHashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Properties;
+import java.util.Set;
+import java.util.SortedMap;
+import java.util.TreeMap;
+import java.util.concurrent.ConcurrentMap;
+
+import javax.annotation.Nullable;
+
+/**
+ * Static utility methods pertaining to {@link Map} instances. Also see this
+ * class's counterparts {@link Lists} and {@link Sets}.
+ *
+ * @author Kevin Bourrillion
+ * @author Mike Bostock
+ * @author Isaac Shum
+ * @author Louis Wasserman
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible(emulated = true)
+public final class Maps {
+  private Maps() {}
+
+  /**
+   * Creates a <i>mutable</i>, empty {@code HashMap} instance.
+   *
+   * <p><b>Note:</b> if mutability is not required, use {@link
+   * ImmutableMap#of()} instead.
+   *
+   * <p><b>Note:</b> if {@code K} is an {@code enum} type, use {@link
+   * #newEnumMap} instead.
+   *
+   * @return a new, empty {@code HashMap}
+   */
+  public static <K, V> HashMap<K, V> newHashMap() {
+    return new HashMap<K, V>();
+  }
+
+  /**
+   * Creates a {@code HashMap} instance, with a high enough "initial capacity"
+   * that it <i>should</i> hold {@code expectedSize} elements without growth.
+   * This behavior cannot be broadly guaranteed, but it is observed to be true
+   * for OpenJDK 1.6. It also can't be guaranteed that the method isn't
+   * inadvertently <i>oversizing</i> the returned map.
+   *
+   * @param expectedSize the number of elements you expect to add to the
+   *        returned map
+   * @return a new, empty {@code HashMap} with enough capacity to hold {@code
+   *         expectedSize} elements without resizing
+   * @throws IllegalArgumentException if {@code expectedSize} is negative
+   */
+  public static <K, V> HashMap<K, V> newHashMapWithExpectedSize(
+      int expectedSize) {
+    return new HashMap<K, V>(capacity(expectedSize));
+  }
+
+  /**
+   * Returns a capacity that is sufficient to keep the map from being resized as
+   * long as it grows no larger than expectedSize and the load factor is >= its
+   * default (0.75).
+   */
+  static int capacity(int expectedSize) {
+    if (expectedSize < 3) {
+      checkArgument(expectedSize >= 0);
+      return expectedSize + 1;
+    }
+    if (expectedSize < Ints.MAX_POWER_OF_TWO) {
+      return expectedSize + expectedSize / 3;
+    }
+    return Integer.MAX_VALUE; // any large value
+  }
+
+  /**
+   * Creates a <i>mutable</i> {@code HashMap} instance with the same mappings as
+   * the specified map.
+   *
+   * <p><b>Note:</b> if mutability is not required, use {@link
+   * ImmutableMap#copyOf(Map)} instead.
+   *
+   * <p><b>Note:</b> if {@code K} is an {@link Enum} type, use {@link
+   * #newEnumMap} instead.
+   *
+   * @param map the mappings to be placed in the new map
+   * @return a new {@code HashMap} initialized with the mappings from {@code
+   *         map}
+   */
+  public static <K, V> HashMap<K, V> newHashMap(
+      Map<? extends K, ? extends V> map) {
+    return new HashMap<K, V>(map);
+  }
+
+  /**
+   * Creates a <i>mutable</i>, empty, insertion-ordered {@code LinkedHashMap}
+   * instance.
+   *
+   * <p><b>Note:</b> if mutability is not required, use {@link
+   * ImmutableMap#of()} instead.
+   *
+   * @return a new, empty {@code LinkedHashMap}
+   */
+  public static <K, V> LinkedHashMap<K, V> newLinkedHashMap() {
+    return new LinkedHashMap<K, V>();
+  }
+
+  /**
+   * Creates a <i>mutable</i>, insertion-ordered {@code LinkedHashMap} instance
+   * with the same mappings as the specified map.
+   *
+   * <p><b>Note:</b> if mutability is not required, use {@link
+   * ImmutableMap#copyOf(Map)} instead.
+   *
+   * @param map the mappings to be placed in the new map
+   * @return a new, {@code LinkedHashMap} initialized with the mappings from
+   *         {@code map}
+   */
+  public static <K, V> LinkedHashMap<K, V> newLinkedHashMap(
+      Map<? extends K, ? extends V> map) {
+    return new LinkedHashMap<K, V>(map);
+  }
+
+  /**
+   * Returns a general-purpose instance of {@code ConcurrentMap}, which supports
+   * all optional operations of the ConcurrentMap interface. It does not permit
+   * null keys or values. It is serializable.
+   *
+   * <p>This is currently accomplished by calling {@link MapMaker#makeMap()}.
+   *
+   * <p>It is preferable to use {@code MapMaker} directly (rather than through
+   * this method), as it presents numerous useful configuration options,
+   * such as the concurrency level, load factor, key/value reference types,
+   * and value computation.
+   *
+   * @return a new, empty {@code ConcurrentMap}
+   * @since 3.0
+   */
+  public static <K, V> ConcurrentMap<K, V> newConcurrentMap() {
+    return new MapMaker().<K, V>makeMap();
+  }
+
+  /**
+   * Creates a <i>mutable</i>, empty {@code TreeMap} instance using the natural
+   * ordering of its elements.
+   *
+   * <p><b>Note:</b> if mutability is not required, use {@link
+   * ImmutableSortedMap#of()} instead.
+   *
+   * @return a new, empty {@code TreeMap}
+   */
+  public static <K extends Comparable, V> TreeMap<K, V> newTreeMap() {
+    return new TreeMap<K, V>();
+  }
+
+  /**
+   * Creates a <i>mutable</i> {@code TreeMap} instance with the same mappings as
+   * the specified map and using the same ordering as the specified map.
+   *
+   * <p><b>Note:</b> if mutability is not required, use {@link
+   * ImmutableSortedMap#copyOfSorted(SortedMap)} instead.
+   *
+   * @param map the sorted map whose mappings are to be placed in the new map
+   *        and whose comparator is to be used to sort the new map
+   * @return a new {@code TreeMap} initialized with the mappings from {@code
+   *         map} and using the comparator of {@code map}
+   */
+  public static <K, V> TreeMap<K, V> newTreeMap(SortedMap<K, ? extends V> map) {
+    return new TreeMap<K, V>(map);
+  }
+
+  /**
+   * Creates a <i>mutable</i>, empty {@code TreeMap} instance using the given
+   * comparator.
+   *
+   * <p><b>Note:</b> if mutability is not required, use {@code
+   * ImmutableSortedMap.orderedBy(comparator).build()} instead.
+   *
+   * @param comparator the comparator to sort the keys with
+   * @return a new, empty {@code TreeMap}
+   */
+  public static <C, K extends C, V> TreeMap<K, V> newTreeMap(
+      @Nullable Comparator<C> comparator) {
+    // Ideally, the extra type parameter "C" shouldn't be necessary. It is a
+    // work-around of a compiler type inference quirk that prevents the
+    // following code from being compiled:
+    // Comparator<Class<?>> comparator = null;
+    // Map<Class<? extends Throwable>, String> map = newTreeMap(comparator);
+    return new TreeMap<K, V>(comparator);
+  }
+
+  /**
+   * Creates an {@code EnumMap} instance.
+   *
+   * @param type the key type for this map
+   * @return a new, empty {@code EnumMap}
+   */
+  public static <K extends Enum<K>, V> EnumMap<K, V> newEnumMap(Class<K> type) {
+    return new EnumMap<K, V>(checkNotNull(type));
+  }
+
+  /**
+   * Creates an {@code EnumMap} with the same mappings as the specified map.
+   *
+   * @param map the map from which to initialize this {@code EnumMap}
+   * @return a new {@code EnumMap} initialized with the mappings from {@code
+   *         map}
+   * @throws IllegalArgumentException if {@code m} is not an {@code EnumMap}
+   *         instance and contains no mappings
+   */
+  public static <K extends Enum<K>, V> EnumMap<K, V> newEnumMap(
+      Map<K, ? extends V> map) {
+    return new EnumMap<K, V>(map);
+  }
+
+  /**
+   * Creates an {@code IdentityHashMap} instance.
+   *
+   * @return a new, empty {@code IdentityHashMap}
+   */
+  public static <K, V> IdentityHashMap<K, V> newIdentityHashMap() {
+    return new IdentityHashMap<K, V>();
+  }
+
+  /**
+   * Returns a synchronized (thread-safe) bimap backed by the specified bimap.
+   * In order to guarantee serial access, it is critical that <b>all</b> access
+   * to the backing bimap is accomplished through the returned bimap.
+   *
+   * <p>It is imperative that the user manually synchronize on the returned map
+   * when accessing any of its collection views: <pre>   {@code
+   *
+   *   BiMap<Long, String> map = Maps.synchronizedBiMap(
+   *       HashBiMap.<Long, String>create());
+   *   ...
+   *   Set<Long> set = map.keySet();  // Needn't be in synchronized block
+   *   ...
+   *   synchronized (map) {  // Synchronizing on map, not set!
+   *     Iterator<Long> it = set.iterator(); // Must be in synchronized block
+   *     while (it.hasNext()) {
+   *       foo(it.next());
+   *     }
+   *   }}</pre>
+   *
+   * Failure to follow this advice may result in non-deterministic behavior.
+   *
+   * <p>The returned bimap will be serializable if the specified bimap is
+   * serializable.
+   *
+   * @param bimap the bimap to be wrapped in a synchronized view
+   * @return a sychronized view of the specified bimap
+   */
+  public static <K, V> BiMap<K, V> synchronizedBiMap(BiMap<K, V> bimap) {
+    return Synchronized.biMap(bimap, null);
+  }
+
+  /**
+   * Computes the difference between two maps. This difference is an immutable
+   * snapshot of the state of the maps at the time this method is called. It
+   * will never change, even if the maps change at a later time.
+   *
+   * <p>Since this method uses {@code HashMap} instances internally, the keys of
+   * the supplied maps must be well-behaved with respect to
+   * {@link Object#equals} and {@link Object#hashCode}.
+   *
+   * <p><b>Note:</b>If you only need to know whether two maps have the same
+   * mappings, call {@code left.equals(right)} instead of this method.
+   *
+   * @param left the map to treat as the "left" map for purposes of comparison
+   * @param right the map to treat as the "right" map for purposes of comparison
+   * @return the difference between the two maps
+   */
+  @SuppressWarnings("unchecked")
+  public static <K, V> MapDifference<K, V> difference(
+      Map<? extends K, ? extends V> left, Map<? extends K, ? extends V> right) {
+    if (left instanceof SortedMap) {
+      SortedMap<K, ? extends V> sortedLeft = (SortedMap<K, ? extends V>) left;
+      SortedMapDifference<K, V> result = difference(sortedLeft, right);
+      return result;
+    }
+    return difference(left, right, Equivalences.equals());
+  }
+
+  /**
+   * Computes the difference between two maps. This difference is an immutable
+   * snapshot of the state of the maps at the time this method is called. It
+   * will never change, even if the maps change at a later time.
+   *
+   * <p>Values are compared using a provided equivalence, in the case of
+   * equality, the value on the 'left' is returned in the difference.
+   *
+   * <p>Since this method uses {@code HashMap} instances internally, the keys of
+   * the supplied maps must be well-behaved with respect to
+   * {@link Object#equals} and {@link Object#hashCode}.
+   *
+   * @param left the map to treat as the "left" map for purposes of comparison
+   * @param right the map to treat as the "right" map for purposes of comparison
+   * @param valueEquivalence the equivalence relationship to use to compare
+   *    values
+   * @return the difference between the two maps
+   * @since 10.0
+   */
+  @Beta
+  public static <K, V> MapDifference<K, V> difference(
+      Map<? extends K, ? extends V> left, Map<? extends K, ? extends V> right,
+      Equivalence<? super V> valueEquivalence) {
+    Preconditions.checkNotNull(valueEquivalence);
+
+    Map<K, V> onlyOnLeft = newHashMap();
+    Map<K, V> onlyOnRight = new HashMap<K, V>(right); // will whittle it down
+    Map<K, V> onBoth = newHashMap();
+    Map<K, MapDifference.ValueDifference<V>> differences = newHashMap();
+    boolean eq = true;
+
+    for (Entry<? extends K, ? extends V> entry : left.entrySet()) {
+      K leftKey = entry.getKey();
+      V leftValue = entry.getValue();
+      if (right.containsKey(leftKey)) {
+        V rightValue = onlyOnRight.remove(leftKey);
+        if (valueEquivalence.equivalent(leftValue, rightValue)) {
+          onBoth.put(leftKey, leftValue);
+        } else {
+          eq = false;
+          differences.put(
+              leftKey, ValueDifferenceImpl.create(leftValue, rightValue));
+        }
+      } else {
+        eq = false;
+        onlyOnLeft.put(leftKey, leftValue);
+      }
+    }
+
+    boolean areEqual = eq && onlyOnRight.isEmpty();
+    return mapDifference(
+        areEqual, onlyOnLeft, onlyOnRight, onBoth, differences);
+  }
+
+  private static <K, V> MapDifference<K, V> mapDifference(boolean areEqual,
+      Map<K, V> onlyOnLeft, Map<K, V> onlyOnRight, Map<K, V> onBoth,
+      Map<K, ValueDifference<V>> differences) {
+    return new MapDifferenceImpl<K, V>(areEqual,
+        Collections.unmodifiableMap(onlyOnLeft),
+        Collections.unmodifiableMap(onlyOnRight),
+        Collections.unmodifiableMap(onBoth),
+        Collections.unmodifiableMap(differences));
+  }
+
+  static class MapDifferenceImpl<K, V> implements MapDifference<K, V> {
+    final boolean areEqual;
+    final Map<K, V> onlyOnLeft;
+    final Map<K, V> onlyOnRight;
+    final Map<K, V> onBoth;
+    final Map<K, ValueDifference<V>> differences;
+
+    MapDifferenceImpl(boolean areEqual, Map<K, V> onlyOnLeft,
+        Map<K, V> onlyOnRight, Map<K, V> onBoth,
+        Map<K, ValueDifference<V>> differences) {
+      this.areEqual = areEqual;
+      this.onlyOnLeft = onlyOnLeft;
+      this.onlyOnRight = onlyOnRight;
+      this.onBoth = onBoth;
+      this.differences = differences;
+    }
+
+    @Override
+    public boolean areEqual() {
+      return areEqual;
+    }
+
+    @Override
+    public Map<K, V> entriesOnlyOnLeft() {
+      return onlyOnLeft;
+    }
+
+    @Override
+    public Map<K, V> entriesOnlyOnRight() {
+      return onlyOnRight;
+    }
+
+    @Override
+    public Map<K, V> entriesInCommon() {
+      return onBoth;
+    }
+
+    @Override
+    public Map<K, ValueDifference<V>> entriesDiffering() {
+      return differences;
+    }
+
+    @Override public boolean equals(Object object) {
+      if (object == this) {
+        return true;
+      }
+      if (object instanceof MapDifference) {
+        MapDifference<?, ?> other = (MapDifference<?, ?>) object;
+        return entriesOnlyOnLeft().equals(other.entriesOnlyOnLeft())
+            && entriesOnlyOnRight().equals(other.entriesOnlyOnRight())
+            && entriesInCommon().equals(other.entriesInCommon())
+            && entriesDiffering().equals(other.entriesDiffering());
+      }
+      return false;
+    }
+
+    @Override public int hashCode() {
+      return Objects.hashCode(entriesOnlyOnLeft(), entriesOnlyOnRight(),
+          entriesInCommon(), entriesDiffering());
+    }
+
+    @Override public String toString() {
+      if (areEqual) {
+        return "equal";
+      }
+
+      StringBuilder result = new StringBuilder("not equal");
+      if (!onlyOnLeft.isEmpty()) {
+        result.append(": only on left=").append(onlyOnLeft);
+      }
+      if (!onlyOnRight.isEmpty()) {
+        result.append(": only on right=").append(onlyOnRight);
+      }
+      if (!differences.isEmpty()) {
+        result.append(": value differences=").append(differences);
+      }
+      return result.toString();
+    }
+  }
+
+  static class ValueDifferenceImpl<V>
+      implements MapDifference.ValueDifference<V> {
+    private final V left;
+    private final V right;
+
+    static <V> ValueDifference<V> create(@Nullable V left, @Nullable V right) {
+      return new ValueDifferenceImpl<V>(left, right);
+    }
+
+    private ValueDifferenceImpl(@Nullable V left, @Nullable V right) {
+      this.left = left;
+      this.right = right;
+    }
+
+    @Override
+    public V leftValue() {
+      return left;
+    }
+
+    @Override
+    public V rightValue() {
+      return right;
+    }
+
+    @Override public boolean equals(@Nullable Object object) {
+      if (object instanceof MapDifference.ValueDifference<?>) {
+        MapDifference.ValueDifference<?> that =
+            (MapDifference.ValueDifference<?>) object;
+        return Objects.equal(this.left, that.leftValue())
+            && Objects.equal(this.right, that.rightValue());
+      }
+      return false;
+    }
+
+    @Override public int hashCode() {
+      return Objects.hashCode(left, right);
+    }
+
+    @Override public String toString() {
+      return "(" + left + ", " + right + ")";
+    }
+  }
+
+  /**
+   * Computes the difference between two sorted maps, using the comparator of
+   * the left map, or {@code Ordering.natural()} if the left map uses the
+   * natural ordering of its elements. This difference is an immutable snapshot
+   * of the state of the maps at the time this method is called. It will never
+   * change, even if the maps change at a later time.
+   *
+   * <p>Since this method uses {@code TreeMap} instances internally, the keys of
+   * the right map must all compare as distinct according to the comparator
+   * of the left map.
+   *
+   * <p><b>Note:</b>If you only need to know whether two sorted maps have the
+   * same mappings, call {@code left.equals(right)} instead of this method.
+   *
+   * @param left the map to treat as the "left" map for purposes of comparison
+   * @param right the map to treat as the "right" map for purposes of comparison
+   * @return the difference between the two maps
+   * @since 11.0
+   */
+  @Beta
+  public static <K, V> SortedMapDifference<K, V> difference(
+      SortedMap<K, ? extends V> left, Map<? extends K, ? extends V> right) {
+    checkNotNull(left);
+    checkNotNull(right);
+    Comparator<? super K> comparator = orNaturalOrder(left.comparator());
+    SortedMap<K, V> onlyOnLeft = Maps.newTreeMap(comparator);
+    SortedMap<K, V> onlyOnRight = Maps.newTreeMap(comparator);
+    onlyOnRight.putAll(right); // will whittle it down
+    SortedMap<K, V> onBoth = Maps.newTreeMap(comparator);
+    SortedMap<K, MapDifference.ValueDifference<V>> differences =
+        Maps.newTreeMap(comparator);
+    boolean eq = true;
+
+    for (Entry<? extends K, ? extends V> entry : left.entrySet()) {
+      K leftKey = entry.getKey();
+      V leftValue = entry.getValue();
+      if (right.containsKey(leftKey)) {
+        V rightValue = onlyOnRight.remove(leftKey);
+        if (Objects.equal(leftValue, rightValue)) {
+          onBoth.put(leftKey, leftValue);
+        } else {
+          eq = false;
+          differences.put(
+              leftKey, ValueDifferenceImpl.create(leftValue, rightValue));
+        }
+      } else {
+        eq = false;
+        onlyOnLeft.put(leftKey, leftValue);
+      }
+    }
+
+    boolean areEqual = eq && onlyOnRight.isEmpty();
+    return sortedMapDifference(
+        areEqual, onlyOnLeft, onlyOnRight, onBoth, differences);
+  }
+
+  private static <K, V> SortedMapDifference<K, V> sortedMapDifference(
+      boolean areEqual, SortedMap<K, V> onlyOnLeft, SortedMap<K, V> onlyOnRight,
+      SortedMap<K, V> onBoth, SortedMap<K, ValueDifference<V>> differences) {
+    return new SortedMapDifferenceImpl<K, V>(areEqual,
+        Collections.unmodifiableSortedMap(onlyOnLeft),
+        Collections.unmodifiableSortedMap(onlyOnRight),
+        Collections.unmodifiableSortedMap(onBoth),
+        Collections.unmodifiableSortedMap(differences));
+  }
+
+  static class SortedMapDifferenceImpl<K, V> extends MapDifferenceImpl<K, V>
+      implements SortedMapDifference<K, V> {
+    SortedMapDifferenceImpl(boolean areEqual, SortedMap<K, V> onlyOnLeft,
+        SortedMap<K, V> onlyOnRight, SortedMap<K, V> onBoth,
+        SortedMap<K, ValueDifference<V>> differences) {
+      super(areEqual, onlyOnLeft, onlyOnRight, onBoth, differences);
+    }
+
+    @Override public SortedMap<K, ValueDifference<V>> entriesDiffering() {
+      return (SortedMap<K, ValueDifference<V>>) super.entriesDiffering();
+    }
+
+    @Override public SortedMap<K, V> entriesInCommon() {
+      return (SortedMap<K, V>) super.entriesInCommon();
+    }
+
+    @Override public SortedMap<K, V> entriesOnlyOnLeft() {
+      return (SortedMap<K, V>) super.entriesOnlyOnLeft();
+    }
+
+    @Override public SortedMap<K, V> entriesOnlyOnRight() {
+      return (SortedMap<K, V>) super.entriesOnlyOnRight();
+    }
+  }
+
+  /**
+   * Returns the specified comparator if not null; otherwise returns {@code
+   * Ordering.natural()}. This method is an abomination of generics; the only
+   * purpose of this method is to contain the ugly type-casting in one place.
+   */
+  @SuppressWarnings("unchecked")
+  static <E> Comparator<? super E> orNaturalOrder(
+      @Nullable Comparator<? super E> comparator) {
+    if (comparator != null) { // can't use ? : because of javac bug 5080917
+      return comparator;
+    }
+    return (Comparator<E>) Ordering.natural();
+  }
+  /**
+   * Returns an immutable map for which the {@link Map#values} are the given
+   * elements in the given order, and each key is the product of invoking a
+   * supplied function on its corresponding value.
+   *
+   * @param values the values to use when constructing the {@code Map}
+   * @param keyFunction the function used to produce the key for each value
+   * @return a map mapping the result of evaluating the function {@code
+   *         keyFunction} on each value in the input collection to that value
+   * @throws IllegalArgumentException if {@code keyFunction} produces the same
+   *         key for more than one value in the input collection
+   * @throws NullPointerException if any elements of {@code values} is null, or
+   *         if {@code keyFunction} produces {@code null} for any value
+   */
+  public static <K, V> ImmutableMap<K, V> uniqueIndex(
+      Iterable<V> values, Function<? super V, K> keyFunction) {
+    return uniqueIndex(values.iterator(), keyFunction);
+  }
+
+  /**
+   * <b>Deprecated.</b>
+   *
+   * @since 10.0
+   * @deprecated use {@link #uniqueIndex(Iterator, Function)} by casting {@code
+   *     values} to {@code Iterator<V>}, or better yet, by implementing only
+   *     {@code Iterator} and not {@code Iterable}. <b>This method is scheduled
+   *     for deletion in March 2012.</b>
+   */
+  @Beta
+  @Deprecated
+  public static <K, V, I extends Object & Iterable<V> & Iterator<V>>
+      ImmutableMap<K, V> uniqueIndex(
+          I values, Function<? super V, K> keyFunction) {
+    Iterable<V> valuesIterable = checkNotNull(values);
+    return uniqueIndex(valuesIterable, keyFunction);
+  }
+
+  /**
+   * Returns an immutable map for which the {@link Map#values} are the given
+   * elements in the given order, and each key is the product of invoking a
+   * supplied function on its corresponding value.
+   *
+   * @param values the values to use when constructing the {@code Map}
+   * @param keyFunction the function used to produce the key for each value
+   * @return a map mapping the result of evaluating the function {@code
+   *         keyFunction} on each value in the input collection to that value
+   * @throws IllegalArgumentException if {@code keyFunction} produces the same
+   *         key for more than one value in the input collection
+   * @throws NullPointerException if any elements of {@code values} is null, or
+   *         if {@code keyFunction} produces {@code null} for any value
+   * @since 10.0
+   */
+  public static <K, V> ImmutableMap<K, V> uniqueIndex(
+      Iterator<V> values, Function<? super V, K> keyFunction) {
+    checkNotNull(keyFunction);
+    ImmutableMap.Builder<K, V> builder = ImmutableMap.builder();
+    while (values.hasNext()) {
+      V value = values.next();
+      builder.put(keyFunction.apply(value), value);
+    }
+    return builder.build();
+  }
+
+  /**
+   * Creates an {@code ImmutableMap<String, String>} from a {@code Properties}
+   * instance. Properties normally derive from {@code Map<Object, Object>}, but
+   * they typically contain strings, which is awkward. This method lets you get
+   * a plain-old-{@code Map} out of a {@code Properties}.
+   *
+   * @param properties a {@code Properties} object to be converted
+   * @return an immutable map containing all the entries in {@code properties}
+   * @throws ClassCastException if any key in {@code Properties} is not a {@code
+   *         String}
+   * @throws NullPointerException if any key or value in {@code Properties} is
+   *         null
+   */
+  @GwtIncompatible("java.util.Properties")
+  public static ImmutableMap<String, String> fromProperties(
+      Properties properties) {
+    ImmutableMap.Builder<String, String> builder = ImmutableMap.builder();
+
+    for (Enumeration<?> e = properties.propertyNames(); e.hasMoreElements();) {
+      String key = (String) e.nextElement();
+      builder.put(key, properties.getProperty(key));
+    }
+
+    return builder.build();
+  }
+
+  /**
+   * Returns an immutable map entry with the specified key and value. The {@link
+   * Entry#setValue} operation throws an {@link UnsupportedOperationException}.
+   *
+   * <p>The returned entry is serializable.
+   *
+   * @param key the key to be associated with the returned entry
+   * @param value the value to be associated with the returned entry
+   */
+  @GwtCompatible(serializable = true)
+  public static <K, V> Entry<K, V> immutableEntry(
+      @Nullable K key, @Nullable V value) {
+    return new ImmutableEntry<K, V>(key, value);
+  }
+
+  /**
+   * Returns an unmodifiable view of the specified set of entries. The {@link
+   * Entry#setValue} operation throws an {@link UnsupportedOperationException},
+   * as do any operations that would modify the returned set.
+   *
+   * @param entrySet the entries for which to return an unmodifiable view
+   * @return an unmodifiable view of the entries
+   */
+  static <K, V> Set<Entry<K, V>> unmodifiableEntrySet(
+      Set<Entry<K, V>> entrySet) {
+    return new UnmodifiableEntrySet<K, V>(
+        Collections.unmodifiableSet(entrySet));
+  }
+
+  /**
+   * Returns an unmodifiable view of the specified map entry. The {@link
+   * Entry#setValue} operation throws an {@link UnsupportedOperationException}.
+   * This also has the side-effect of redefining {@code equals} to comply with
+   * the Entry contract, to avoid a possible nefarious implementation of equals.
+   *
+   * @param entry the entry for which to return an unmodifiable view
+   * @return an unmodifiable view of the entry
+   */
+  static <K, V> Entry<K, V> unmodifiableEntry(final Entry<K, V> entry) {
+    checkNotNull(entry);
+    return new AbstractMapEntry<K, V>() {
+      @Override public K getKey() {
+        return entry.getKey();
+      }
+
+      @Override public V getValue() {
+        return entry.getValue();
+      }
+    };
+  }
+
+  /** @see Multimaps#unmodifiableEntries */
+  static class UnmodifiableEntries<K, V>
+      extends ForwardingCollection<Entry<K, V>> {
+    private final Collection<Entry<K, V>> entries;
+
+    UnmodifiableEntries(Collection<Entry<K, V>> entries) {
+      this.entries = entries;
+    }
+
+    @Override protected Collection<Entry<K, V>> delegate() {
+      return entries;
+    }
+
+    @Override public Iterator<Entry<K, V>> iterator() {
+      final Iterator<Entry<K, V>> delegate = super.iterator();
+      return new ForwardingIterator<Entry<K, V>>() {
+        @Override public Entry<K, V> next() {
+          return unmodifiableEntry(super.next());
+        }
+
+        @Override public void remove() {
+          throw new UnsupportedOperationException();
+        }
+
+        @Override protected Iterator<Entry<K, V>> delegate() {
+          return delegate;
+        }
+      };
+    }
+
+    // See java.util.Collections.UnmodifiableEntrySet for details on attacks.
+
+    @Override public boolean add(Entry<K, V> element) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override public boolean addAll(
+        Collection<? extends Entry<K, V>> collection) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override public void clear() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override public boolean remove(Object object) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override public boolean removeAll(Collection<?> collection) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override public boolean retainAll(Collection<?> collection) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override public Object[] toArray() {
+      return standardToArray();
+    }
+
+    @Override public <T> T[] toArray(T[] array) {
+      return standardToArray(array);
+    }
+  }
+
+  /** @see Maps#unmodifiableEntrySet(Set) */
+  static class UnmodifiableEntrySet<K, V>
+      extends UnmodifiableEntries<K, V> implements Set<Entry<K, V>> {
+    UnmodifiableEntrySet(Set<Entry<K, V>> entries) {
+      super(entries);
+    }
+
+    // See java.util.Collections.UnmodifiableEntrySet for details on attacks.
+
+    @Override public boolean equals(@Nullable Object object) {
+      return Sets.equalsImpl(this, object);
+    }
+
+    @Override public int hashCode() {
+      return Sets.hashCodeImpl(this);
+    }
+  }
+
+  /**
+   * Returns an unmodifiable view of the specified bimap. This method allows
+   * modules to provide users with "read-only" access to internal bimaps. Query
+   * operations on the returned bimap "read through" to the specified bimap, and
+   * attempts to modify the returned map, whether direct or via its collection
+   * views, result in an {@code UnsupportedOperationException}.
+   *
+   * <p>The returned bimap will be serializable if the specified bimap is
+   * serializable.
+   *
+   * @param bimap the bimap for which an unmodifiable view is to be returned
+   * @return an unmodifiable view of the specified bimap
+   */
+  public static <K, V> BiMap<K, V> unmodifiableBiMap(
+      BiMap<? extends K, ? extends V> bimap) {
+    return new UnmodifiableBiMap<K, V>(bimap, null);
+  }
+
+  /** @see Maps#unmodifiableBiMap(BiMap) */
+  private static class UnmodifiableBiMap<K, V>
+      extends ForwardingMap<K, V> implements BiMap<K, V>, Serializable {
+    final Map<K, V> unmodifiableMap;
+    final BiMap<? extends K, ? extends V> delegate;
+    transient BiMap<V, K> inverse;
+    transient Set<V> values;
+
+    UnmodifiableBiMap(BiMap<? extends K, ? extends V> delegate,
+        @Nullable BiMap<V, K> inverse) {
+      unmodifiableMap = Collections.unmodifiableMap(delegate);
+      this.delegate = delegate;
+      this.inverse = inverse;
+    }
+
+    @Override protected Map<K, V> delegate() {
+      return unmodifiableMap;
+    }
+
+    @Override
+    public V forcePut(K key, V value) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public BiMap<V, K> inverse() {
+      BiMap<V, K> result = inverse;
+      return (result == null)
+          ? inverse = new UnmodifiableBiMap<V, K>(delegate.inverse(), this)
+          : result;
+    }
+
+    @Override public Set<V> values() {
+      Set<V> result = values;
+      return (result == null)
+          ? values = Collections.unmodifiableSet(delegate.values())
+          : result;
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  /**
+   * Returns a view of a map where each value is transformed by a function. All
+   * other properties of the map, such as iteration order, are left intact. For
+   * example, the code: <pre>   {@code
+   *
+   *   Map<String, Integer> map = ImmutableMap.of("a", 4, "b", 9);
+   *   Function<Integer, Double> sqrt =
+   *       new Function<Integer, Double>() {
+   *         public Double apply(Integer in) {
+   *           return Math.sqrt((int) in);
+   *         }
+   *       };
+   *   Map<String, Double> transformed = Maps.transformValues(map, sqrt);
+   *   System.out.println(transformed);}</pre>
+   *
+   * ... prints {@code {a=2.0, b=3.0}}.
+   *
+   * <p>Changes in the underlying map are reflected in this view. Conversely,
+   * this view supports removal operations, and these are reflected in the
+   * underlying map.
+   *
+   * <p>It's acceptable for the underlying map to contain null keys, and even
+   * null values provided that the function is capable of accepting null input.
+   * The transformed map might contain null values, if the function sometimes
+   * gives a null result.
+   *
+   * <p>The returned map is not thread-safe or serializable, even if the
+   * underlying map is.
+   *
+   * <p>The function is applied lazily, invoked when needed. This is necessary
+   * for the returned map to be a view, but it means that the function will be
+   * applied many times for bulk operations like {@link Map#containsValue} and
+   * {@code Map.toString()}. For this to perform well, {@code function} should
+   * be fast. To avoid lazy evaluation when the returned map doesn't need to be
+   * a view, copy the returned map into a new map of your choosing.
+   */
+  public static <K, V1, V2> Map<K, V2> transformValues(
+      Map<K, V1> fromMap, final Function<? super V1, V2> function) {
+    checkNotNull(function);
+    EntryTransformer<K, V1, V2> transformer =
+        new EntryTransformer<K, V1, V2>() {
+          @Override
+          public V2 transformEntry(K key, V1 value) {
+            return function.apply(value);
+          }
+        };
+    return transformEntries(fromMap, transformer);
+  }
+
+  /**
+   * Returns a view of a sorted map where each value is transformed by a
+   * function. All other properties of the map, such as iteration order, are
+   * left intact. For example, the code: <pre>   {@code
+   *
+   *   SortedMap<String, Integer> map = ImmutableSortedMap.of("a", 4, "b", 9);
+   *   Function<Integer, Double> sqrt =
+   *       new Function<Integer, Double>() {
+   *         public Double apply(Integer in) {
+   *           return Math.sqrt((int) in);
+   *         }
+   *       };
+   *   SortedMap<String, Double> transformed =
+   *        Maps.transformSortedValues(map, sqrt);
+   *   System.out.println(transformed);}</pre>
+   *
+   * ... prints {@code {a=2.0, b=3.0}}.
+   *
+   * <p>Changes in the underlying map are reflected in this view. Conversely,
+   * this view supports removal operations, and these are reflected in the
+   * underlying map.
+   *
+   * <p>It's acceptable for the underlying map to contain null keys, and even
+   * null values provided that the function is capable of accepting null input.
+   * The transformed map might contain null values, if the function sometimes
+   * gives a null result.
+   *
+   * <p>The returned map is not thread-safe or serializable, even if the
+   * underlying map is.
+   *
+   * <p>The function is applied lazily, invoked when needed. This is necessary
+   * for the returned map to be a view, but it means that the function will be
+   * applied many times for bulk operations like {@link Map#containsValue} and
+   * {@code Map.toString()}. For this to perform well, {@code function} should
+   * be fast. To avoid lazy evaluation when the returned map doesn't need to be
+   * a view, copy the returned map into a new map of your choosing.
+   *
+   * @since 11.0
+   */
+  @Beta
+  public static <K, V1, V2> SortedMap<K, V2> transformValues(
+      SortedMap<K, V1> fromMap, final Function<? super V1, V2> function) {
+    checkNotNull(function);
+    EntryTransformer<K, V1, V2> transformer =
+        new EntryTransformer<K, V1, V2>() {
+          @Override
+          public V2 transformEntry(K key, V1 value) {
+            return function.apply(value);
+          }
+        };
+    return transformEntries(fromMap, transformer);
+  }
+
+  /**
+   * Returns a view of a map whose values are derived from the original map's
+   * entries. In contrast to {@link #transformValues}, this method's
+   * entry-transformation logic may depend on the key as well as the value.
+   *
+   * <p>All other properties of the transformed map, such as iteration order,
+   * are left intact. For example, the code: <pre>   {@code
+   *
+   *   Map<String, Boolean> options =
+   *       ImmutableMap.of("verbose", true, "sort", false);
+   *   EntryTransformer<String, Boolean, String> flagPrefixer =
+   *       new EntryTransformer<String, Boolean, String>() {
+   *         public String transformEntry(String key, Boolean value) {
+   *           return value ? key : "no" + key;
+   *         }
+   *       };
+   *   Map<String, String> transformed =
+   *       Maps.transformEntries(options, flagPrefixer);
+   *   System.out.println(transformed);}</pre>
+   *
+   * ... prints {@code {verbose=verbose, sort=nosort}}.
+   *
+   * <p>Changes in the underlying map are reflected in this view. Conversely,
+   * this view supports removal operations, and these are reflected in the
+   * underlying map.
+   *
+   * <p>It's acceptable for the underlying map to contain null keys and null
+   * values provided that the transformer is capable of accepting null inputs.
+   * The transformed map might contain null values if the transformer sometimes
+   * gives a null result.
+   *
+   * <p>The returned map is not thread-safe or serializable, even if the
+   * underlying map is.
+   *
+   * <p>The transformer is applied lazily, invoked when needed. This is
+   * necessary for the returned map to be a view, but it means that the
+   * transformer will be applied many times for bulk operations like {@link
+   * Map#containsValue} and {@link Object#toString}. For this to perform well,
+   * {@code transformer} should be fast. To avoid lazy evaluation when the
+   * returned map doesn't need to be a view, copy the returned map into a new
+   * map of your choosing.
+   *
+   * <p><b>Warning:</b> This method assumes that for any instance {@code k} of
+   * {@code EntryTransformer} key type {@code K}, {@code k.equals(k2)} implies
+   * that {@code k2} is also of type {@code K}. Using an {@code
+   * EntryTransformer} key type for which this may not hold, such as {@code
+   * ArrayList}, may risk a {@code ClassCastException} when calling methods on
+   * the transformed map.
+   *
+   * @since 7.0
+   */
+  public static <K, V1, V2> Map<K, V2> transformEntries(
+      Map<K, V1> fromMap,
+      EntryTransformer<? super K, ? super V1, V2> transformer) {
+    if (fromMap instanceof SortedMap) {
+      return transformEntries((SortedMap<K, V1>) fromMap, transformer);
+    }
+    return new TransformedEntriesMap<K, V1, V2>(fromMap, transformer);
+  }
+
+  /**
+   * Returns a view of a sorted map whose values are derived from the original
+   * sorted map's entries. In contrast to {@link #transformValues}, this
+   * method's entry-transformation logic may depend on the key as well as the
+   * value.
+   *
+   * <p>All other properties of the transformed map, such as iteration order,
+   * are left intact. For example, the code: <pre>   {@code
+   *
+   *   Map<String, Boolean> options =
+   *       ImmutableSortedMap.of("verbose", true, "sort", false);
+   *   EntryTransformer<String, Boolean, String> flagPrefixer =
+   *       new EntryTransformer<String, Boolean, String>() {
+   *         public String transformEntry(String key, Boolean value) {
+   *           return value ? key : "yes" + key;
+   *         }
+   *       };
+   *   SortedMap<String, String> transformed =
+   *       LabsMaps.transformSortedEntries(options, flagPrefixer);
+   *   System.out.println(transformed);}</pre>
+   *
+   * ... prints {@code {sort=yessort, verbose=verbose}}.
+   *
+   * <p>Changes in the underlying map are reflected in this view. Conversely,
+   * this view supports removal operations, and these are reflected in the
+   * underlying map.
+   *
+   * <p>It's acceptable for the underlying map to contain null keys and null
+   * values provided that the transformer is capable of accepting null inputs.
+   * The transformed map might contain null values if the transformer sometimes
+   * gives a null result.
+   *
+   * <p>The returned map is not thread-safe or serializable, even if the
+   * underlying map is.
+   *
+   * <p>The transformer is applied lazily, invoked when needed. This is
+   * necessary for the returned map to be a view, but it means that the
+   * transformer will be applied many times for bulk operations like {@link
+   * Map#containsValue} and {@link Object#toString}. For this to perform well,
+   * {@code transformer} should be fast. To avoid lazy evaluation when the
+   * returned map doesn't need to be a view, copy the returned map into a new
+   * map of your choosing.
+   *
+   * <p><b>Warning:</b> This method assumes that for any instance {@code k} of
+   * {@code EntryTransformer} key type {@code K}, {@code k.equals(k2)} implies
+   * that {@code k2} is also of type {@code K}. Using an {@code
+   * EntryTransformer} key type for which this may not hold, such as {@code
+   * ArrayList}, may risk a {@code ClassCastException} when calling methods on
+   * the transformed map.
+   *
+   * @since 11.0
+   */
+  @Beta
+  public static <K, V1, V2> SortedMap<K, V2> transformEntries(
+      final SortedMap<K, V1> fromMap,
+      EntryTransformer<? super K, ? super V1, V2> transformer) {
+    return new TransformedEntriesSortedMap<K, V1, V2>(fromMap, transformer);
+  }
+
+  /**
+   * A transformation of the value of a key-value pair, using both key and value
+   * as inputs. To apply the transformation to a map, use
+   * {@link Maps#transformEntries(Map, EntryTransformer)}.
+   *
+   * @param <K> the key type of the input and output entries
+   * @param <V1> the value type of the input entry
+   * @param <V2> the value type of the output entry
+   * @since 7.0
+   */
+  public interface EntryTransformer<K, V1, V2> {
+    /**
+     * Determines an output value based on a key-value pair. This method is
+     * <i>generally expected</i>, but not absolutely required, to have the
+     * following properties:
+     *
+     * <ul>
+     * <li>Its execution does not cause any observable side effects.
+     * <li>The computation is <i>consistent with equals</i>; that is,
+     *     {@link Objects#equal Objects.equal}{@code (k1, k2) &&}
+     *     {@link Objects#equal}{@code (v1, v2)} implies that {@code
+     *     Objects.equal(transformer.transform(k1, v1),
+     *     transformer.transform(k2, v2))}.
+     * </ul>
+     *
+     * @throws NullPointerException if the key or value is null and this
+     *     transformer does not accept null arguments
+     */
+    V2 transformEntry(@Nullable K key, @Nullable V1 value);
+  }
+
+  static class TransformedEntriesMap<K, V1, V2>
+      extends AbstractMap<K, V2> {
+    final Map<K, V1> fromMap;
+    final EntryTransformer<? super K, ? super V1, V2> transformer;
+
+    TransformedEntriesMap(
+        Map<K, V1> fromMap,
+        EntryTransformer<? super K, ? super V1, V2> transformer) {
+      this.fromMap = checkNotNull(fromMap);
+      this.transformer = checkNotNull(transformer);
+    }
+
+    @Override public int size() {
+      return fromMap.size();
+    }
+
+    @Override public boolean containsKey(Object key) {
+      return fromMap.containsKey(key);
+    }
+
+    // safe as long as the user followed the <b>Warning</b> in the javadoc
+    @SuppressWarnings("unchecked")
+    @Override public V2 get(Object key) {
+      V1 value = fromMap.get(key);
+      return (value != null || fromMap.containsKey(key))
+          ? transformer.transformEntry((K) key, value)
+          : null;
+    }
+
+    // safe as long as the user followed the <b>Warning</b> in the javadoc
+    @SuppressWarnings("unchecked")
+    @Override public V2 remove(Object key) {
+      return fromMap.containsKey(key)
+          ? transformer.transformEntry((K) key, fromMap.remove(key))
+          : null;
+    }
+
+    @Override public void clear() {
+      fromMap.clear();
+    }
+
+    @Override public Set<K> keySet() {
+      return fromMap.keySet();
+    }
+
+    Set<Entry<K, V2>> entrySet;
+
+    @Override public Set<Entry<K, V2>> entrySet() {
+      Set<Entry<K, V2>> result = entrySet;
+      if (result == null) {
+        entrySet = result = new EntrySet<K, V2>() {
+          @Override Map<K, V2> map() {
+            return TransformedEntriesMap.this;
+          }
+
+          @Override public Iterator<Entry<K, V2>> iterator() {
+            final Iterator<Entry<K, V1>> backingIterator =
+                fromMap.entrySet().iterator();
+            return Iterators.transform(backingIterator,
+                new Function<Entry<K, V1>, Entry<K, V2>>() {
+                  @Override public Entry<K, V2> apply(Entry<K, V1> entry) {
+                    return immutableEntry(
+                        entry.getKey(),
+                        transformer.transformEntry(entry.getKey(),
+                            entry.getValue()));
+                  }
+                });
+          }
+        };
+      }
+      return result;
+    }
+
+    Collection<V2> values;
+
+    @Override public Collection<V2> values() {
+      Collection<V2> result = values;
+      if (result == null) {
+        return values = new Values<K, V2>() {
+          @Override Map<K, V2> map() {
+            return TransformedEntriesMap.this;
+          }
+        };
+      }
+      return result;
+    }
+  }
+
+  static class TransformedEntriesSortedMap<K, V1, V2>
+      extends TransformedEntriesMap<K, V1, V2> implements SortedMap<K, V2> {
+
+    protected SortedMap<K, V1> fromMap() {
+      return (SortedMap<K, V1>) fromMap;
+    }
+
+    TransformedEntriesSortedMap(SortedMap<K, V1> fromMap,
+        EntryTransformer<? super K, ? super V1, V2> transformer) {
+      super(fromMap, transformer);
+    }
+
+    @Override public Comparator<? super K> comparator() {
+      return fromMap().comparator();
+    }
+
+    @Override public K firstKey() {
+      return fromMap().firstKey();
+    }
+
+    @Override public SortedMap<K, V2> headMap(K toKey) {
+      return transformEntries(fromMap().headMap(toKey), transformer);
+    }
+
+    @Override public K lastKey() {
+      return fromMap().lastKey();
+    }
+
+    @Override public SortedMap<K, V2> subMap(K fromKey, K toKey) {
+      return transformEntries(
+          fromMap().subMap(fromKey, toKey), transformer);
+    }
+
+    @Override public SortedMap<K, V2> tailMap(K fromKey) {
+      return transformEntries(fromMap().tailMap(fromKey), transformer);
+    }
+
+  }
+
+  /**
+   * Returns a map containing the mappings in {@code unfiltered} whose keys
+   * satisfy a predicate. The returned map is a live view of {@code unfiltered};
+   * changes to one affect the other.
+   *
+   * <p>The resulting map's {@code keySet()}, {@code entrySet()}, and {@code
+   * values()} views have iterators that don't support {@code remove()}, but all
+   * other methods are supported by the map and its views. When given a key that
+   * doesn't satisfy the predicate, the map's {@code put()} and {@code putAll()}
+   * methods throw an {@link IllegalArgumentException}.
+   *
+   * <p>When methods such as {@code removeAll()} and {@code clear()} are called
+   * on the filtered map or its views, only mappings whose keys satisfy the
+   * filter will be removed from the underlying map.
+   *
+   * <p>The returned map isn't threadsafe or serializable, even if {@code
+   * unfiltered} is.
+   *
+   * <p>Many of the filtered map's methods, such as {@code size()},
+   * iterate across every key/value mapping in the underlying map and determine
+   * which satisfy the filter. When a live view is <i>not</i> needed, it may be
+   * faster to copy the filtered map and use the copy.
+   *
+   * <p><b>Warning:</b> {@code keyPredicate} must be <i>consistent with
+   * equals</i>, as documented at {@link Predicate#apply}. Do not provide a
+   * predicate such as {@code Predicates.instanceOf(ArrayList.class)}, which is
+   * inconsistent with equals.
+   */
+  public static <K, V> Map<K, V> filterKeys(
+      Map<K, V> unfiltered, final Predicate<? super K> keyPredicate) {
+    if (unfiltered instanceof SortedMap) {
+      return filterKeys((SortedMap<K, V>) unfiltered, keyPredicate);
+    }
+    checkNotNull(keyPredicate);
+    Predicate<Entry<K, V>> entryPredicate =
+        new Predicate<Entry<K, V>>() {
+          @Override
+          public boolean apply(Entry<K, V> input) {
+            return keyPredicate.apply(input.getKey());
+          }
+        };
+    return (unfiltered instanceof AbstractFilteredMap)
+        ? filterFiltered((AbstractFilteredMap<K, V>) unfiltered, entryPredicate)
+        : new FilteredKeyMap<K, V>(
+            checkNotNull(unfiltered), keyPredicate, entryPredicate);
+  }
+
+  /**
+   * Returns a sorted map containing the mappings in {@code unfiltered} whose
+   * keys satisfy a predicate. The returned map is a live view of {@code
+   * unfiltered}; changes to one affect the other.
+   *
+   * <p>The resulting map's {@code keySet()}, {@code entrySet()}, and {@code
+   * values()} views have iterators that don't support {@code remove()}, but all
+   * other methods are supported by the map and its views. When given a key that
+   * doesn't satisfy the predicate, the map's {@code put()} and {@code putAll()}
+   * methods throw an {@link IllegalArgumentException}.
+   *
+   * <p>When methods such as {@code removeAll()} and {@code clear()} are called
+   * on the filtered map or its views, only mappings whose keys satisfy the
+   * filter will be removed from the underlying map.
+   *
+   * <p>The returned map isn't threadsafe or serializable, even if {@code
+   * unfiltered} is.
+   *
+   * <p>Many of the filtered map's methods, such as {@code size()},
+   * iterate across every key/value mapping in the underlying map and determine
+   * which satisfy the filter. When a live view is <i>not</i> needed, it may be
+   * faster to copy the filtered map and use the copy.
+   *
+   * <p><b>Warning:</b> {@code keyPredicate} must be <i>consistent with
+   * equals</i>, as documented at {@link Predicate#apply}. Do not provide a
+   * predicate such as {@code Predicates.instanceOf(ArrayList.class)}, which is
+   * inconsistent with equals.
+   *
+   * @since 11.0
+   */
+  @Beta
+  public static <K, V> SortedMap<K, V> filterKeys(
+      SortedMap<K, V> unfiltered, final Predicate<? super K> keyPredicate) {
+    // TODO: Return a subclass of Maps.FilteredKeyMap for slightly better
+    // performance.
+    checkNotNull(keyPredicate);
+    Predicate<Entry<K, V>> entryPredicate = new Predicate<Entry<K, V>>() {
+      @Override
+      public boolean apply(Entry<K, V> input) {
+        return keyPredicate.apply(input.getKey());
+      }
+    };
+    return filterEntries(unfiltered, entryPredicate);
+  }
+
+  /**
+   * Returns a map containing the mappings in {@code unfiltered} whose values
+   * satisfy a predicate. The returned map is a live view of {@code unfiltered};
+   * changes to one affect the other.
+   *
+   * <p>The resulting map's {@code keySet()}, {@code entrySet()}, and {@code
+   * values()} views have iterators that don't support {@code remove()}, but all
+   * other methods are supported by the map and its views. When given a value
+   * that doesn't satisfy the predicate, the map's {@code put()}, {@code
+   * putAll()}, and {@link Entry#setValue} methods throw an {@link
+   * IllegalArgumentException}.
+   *
+   * <p>When methods such as {@code removeAll()} and {@code clear()} are called
+   * on the filtered map or its views, only mappings whose values satisfy the
+   * filter will be removed from the underlying map.
+   *
+   * <p>The returned map isn't threadsafe or serializable, even if {@code
+   * unfiltered} is.
+   *
+   * <p>Many of the filtered map's methods, such as {@code size()},
+   * iterate across every key/value mapping in the underlying map and determine
+   * which satisfy the filter. When a live view is <i>not</i> needed, it may be
+   * faster to copy the filtered map and use the copy.
+   *
+   * <p><b>Warning:</b> {@code valuePredicate} must be <i>consistent with
+   * equals</i>, as documented at {@link Predicate#apply}. Do not provide a
+   * predicate such as {@code Predicates.instanceOf(ArrayList.class)}, which is
+   * inconsistent with equals.
+   */
+  public static <K, V> Map<K, V> filterValues(
+      Map<K, V> unfiltered, final Predicate<? super V> valuePredicate) {
+    if (unfiltered instanceof SortedMap) {
+      return filterValues((SortedMap<K, V>) unfiltered, valuePredicate);
+    }
+    checkNotNull(valuePredicate);
+    Predicate<Entry<K, V>> entryPredicate =
+        new Predicate<Entry<K, V>>() {
+          @Override
+          public boolean apply(Entry<K, V> input) {
+            return valuePredicate.apply(input.getValue());
+          }
+        };
+    return filterEntries(unfiltered, entryPredicate);
+  }
+
+  /**
+   * Returns a sorted map containing the mappings in {@code unfiltered} whose
+   * values satisfy a predicate. The returned map is a live view of {@code
+   * unfiltered}; changes to one affect the other.
+   *
+   * <p>The resulting map's {@code keySet()}, {@code entrySet()}, and {@code
+   * values()} views have iterators that don't support {@code remove()}, but all
+   * other methods are supported by the map and its views. When given a value
+   * that doesn't satisfy the predicate, the map's {@code put()}, {@code
+   * putAll()}, and {@link Entry#setValue} methods throw an {@link
+   * IllegalArgumentException}.
+   *
+   * <p>When methods such as {@code removeAll()} and {@code clear()} are called
+   * on the filtered map or its views, only mappings whose values satisfy the
+   * filter will be removed from the underlying map.
+   *
+   * <p>The returned map isn't threadsafe or serializable, even if {@code
+   * unfiltered} is.
+   *
+   * <p>Many of the filtered map's methods, such as {@code size()},
+   * iterate across every key/value mapping in the underlying map and determine
+   * which satisfy the filter. When a live view is <i>not</i> needed, it may be
+   * faster to copy the filtered map and use the copy.
+   *
+   * <p><b>Warning:</b> {@code valuePredicate} must be <i>consistent with
+   * equals</i>, as documented at {@link Predicate#apply}. Do not provide a
+   * predicate such as {@code Predicates.instanceOf(ArrayList.class)}, which is
+   * inconsistent with equals.
+   *
+   * @since 11.0
+   */
+  @Beta
+  public static <K, V> SortedMap<K, V> filterValues(
+      SortedMap<K, V> unfiltered, final Predicate<? super V> valuePredicate) {
+    checkNotNull(valuePredicate);
+    Predicate<Entry<K, V>> entryPredicate =
+        new Predicate<Entry<K, V>>() {
+          @Override
+          public boolean apply(Entry<K, V> input) {
+            return valuePredicate.apply(input.getValue());
+          }
+        };
+    return filterEntries(unfiltered, entryPredicate);
+  }
+
+  /**
+   * Returns a map containing the mappings in {@code unfiltered} that satisfy a
+   * predicate. The returned map is a live view of {@code unfiltered}; changes
+   * to one affect the other.
+   *
+   * <p>The resulting map's {@code keySet()}, {@code entrySet()}, and {@code
+   * values()} views have iterators that don't support {@code remove()}, but all
+   * other methods are supported by the map and its views. When given a
+   * key/value pair that doesn't satisfy the predicate, the map's {@code put()}
+   * and {@code putAll()} methods throw an {@link IllegalArgumentException}.
+   * Similarly, the map's entries have a {@link Entry#setValue} method that
+   * throws an {@link IllegalArgumentException} when the existing key and the
+   * provided value don't satisfy the predicate.
+   *
+   * <p>When methods such as {@code removeAll()} and {@code clear()} are called
+   * on the filtered map or its views, only mappings that satisfy the filter
+   * will be removed from the underlying map.
+   *
+   * <p>The returned map isn't threadsafe or serializable, even if {@code
+   * unfiltered} is.
+   *
+   * <p>Many of the filtered map's methods, such as {@code size()},
+   * iterate across every key/value mapping in the underlying map and determine
+   * which satisfy the filter. When a live view is <i>not</i> needed, it may be
+   * faster to copy the filtered map and use the copy.
+   *
+   * <p><b>Warning:</b> {@code entryPredicate} must be <i>consistent with
+   * equals</i>, as documented at {@link Predicate#apply}.
+   */
+  public static <K, V> Map<K, V> filterEntries(
+      Map<K, V> unfiltered, Predicate<? super Entry<K, V>> entryPredicate) {
+    if (unfiltered instanceof SortedMap) {
+      return filterEntries((SortedMap<K, V>) unfiltered, entryPredicate);
+    }
+    checkNotNull(entryPredicate);
+    return (unfiltered instanceof AbstractFilteredMap)
+        ? filterFiltered((AbstractFilteredMap<K, V>) unfiltered, entryPredicate)
+        : new FilteredEntryMap<K, V>(checkNotNull(unfiltered), entryPredicate);
+  }
+
+  /**
+   * Returns a sorted map containing the mappings in {@code unfiltered} that
+   * satisfy a predicate. The returned map is a live view of {@code unfiltered};
+   * changes to one affect the other.
+   *
+   * <p>The resulting map's {@code keySet()}, {@code entrySet()}, and {@code
+   * values()} views have iterators that don't support {@code remove()}, but all
+   * other methods are supported by the map and its views. When given a
+   * key/value pair that doesn't satisfy the predicate, the map's {@code put()}
+   * and {@code putAll()} methods throw an {@link IllegalArgumentException}.
+   * Similarly, the map's entries have a {@link Entry#setValue} method that
+   * throws an {@link IllegalArgumentException} when the existing key and the
+   * provided value don't satisfy the predicate.
+   *
+   * <p>When methods such as {@code removeAll()} and {@code clear()} are called
+   * on the filtered map or its views, only mappings that satisfy the filter
+   * will be removed from the underlying map.
+   *
+   * <p>The returned map isn't threadsafe or serializable, even if {@code
+   * unfiltered} is.
+   *
+   * <p>Many of the filtered map's methods, such as {@code size()},
+   * iterate across every key/value mapping in the underlying map and determine
+   * which satisfy the filter. When a live view is <i>not</i> needed, it may be
+   * faster to copy the filtered map and use the copy.
+   *
+   * <p><b>Warning:</b> {@code entryPredicate} must be <i>consistent with
+   * equals</i>, as documented at {@link Predicate#apply}.
+   *
+   * @since 11.0
+   */
+  @Beta
+  public static <K, V> SortedMap<K, V> filterEntries(
+      SortedMap<K, V> unfiltered,
+      Predicate<? super Entry<K, V>> entryPredicate) {
+    checkNotNull(entryPredicate);
+    return (unfiltered instanceof FilteredEntrySortedMap)
+        ? filterFiltered((FilteredEntrySortedMap<K, V>) unfiltered, entryPredicate)
+        : new FilteredEntrySortedMap<K, V>(checkNotNull(unfiltered), entryPredicate);
+  }
+
+  /**
+   * Support {@code clear()}, {@code removeAll()}, and {@code retainAll()} when
+   * filtering a filtered map.
+   */
+  private static <K, V> Map<K, V> filterFiltered(AbstractFilteredMap<K, V> map,
+      Predicate<? super Entry<K, V>> entryPredicate) {
+    Predicate<Entry<K, V>> predicate =
+        Predicates.and(map.predicate, entryPredicate);
+    return new FilteredEntryMap<K, V>(map.unfiltered, predicate);
+  }
+
+  private abstract static class AbstractFilteredMap<K, V>
+      extends AbstractMap<K, V> {
+    final Map<K, V> unfiltered;
+    final Predicate<? super Entry<K, V>> predicate;
+
+    AbstractFilteredMap(
+        Map<K, V> unfiltered, Predicate<? super Entry<K, V>> predicate) {
+      this.unfiltered = unfiltered;
+      this.predicate = predicate;
+    }
+
+    boolean apply(Object key, V value) {
+      // This method is called only when the key is in the map, implying that
+      // key is a K.
+      @SuppressWarnings("unchecked")
+      K k = (K) key;
+      return predicate.apply(Maps.immutableEntry(k, value));
+    }
+
+    @Override public V put(K key, V value) {
+      checkArgument(apply(key, value));
+      return unfiltered.put(key, value);
+    }
+
+    @Override public void putAll(Map<? extends K, ? extends V> map) {
+      for (Entry<? extends K, ? extends V> entry : map.entrySet()) {
+        checkArgument(apply(entry.getKey(), entry.getValue()));
+      }
+      unfiltered.putAll(map);
+    }
+
+    @Override public boolean containsKey(Object key) {
+      return unfiltered.containsKey(key) && apply(key, unfiltered.get(key));
+    }
+
+    @Override public V get(Object key) {
+      V value = unfiltered.get(key);
+      return ((value != null) && apply(key, value)) ? value : null;
+    }
+
+    @Override public boolean isEmpty() {
+      return entrySet().isEmpty();
+    }
+
+    @Override public V remove(Object key) {
+      return containsKey(key) ? unfiltered.remove(key) : null;
+    }
+
+    Collection<V> values;
+
+    @Override public Collection<V> values() {
+      Collection<V> result = values;
+      return (result == null) ? values = new Values() : result;
+    }
+
+    class Values extends AbstractCollection<V> {
+      @Override public Iterator<V> iterator() {
+        final Iterator<Entry<K, V>> entryIterator = entrySet().iterator();
+        return new UnmodifiableIterator<V>() {
+          @Override
+          public boolean hasNext() {
+            return entryIterator.hasNext();
+          }
+
+          @Override
+          public V next() {
+            return entryIterator.next().getValue();
+          }
+        };
+      }
+
+      @Override public int size() {
+        return entrySet().size();
+      }
+
+      @Override public void clear() {
+        entrySet().clear();
+      }
+
+      @Override public boolean isEmpty() {
+        return entrySet().isEmpty();
+      }
+
+      @Override public boolean remove(Object o) {
+        Iterator<Entry<K, V>> iterator = unfiltered.entrySet().iterator();
+        while (iterator.hasNext()) {
+          Entry<K, V> entry = iterator.next();
+          if (Objects.equal(o, entry.getValue()) && predicate.apply(entry)) {
+            iterator.remove();
+            return true;
+          }
+        }
+        return false;
+      }
+
+      @Override public boolean removeAll(Collection<?> collection) {
+        checkNotNull(collection);
+        boolean changed = false;
+        Iterator<Entry<K, V>> iterator = unfiltered.entrySet().iterator();
+        while (iterator.hasNext()) {
+          Entry<K, V> entry = iterator.next();
+          if (collection.contains(entry.getValue()) && predicate.apply(entry)) {
+            iterator.remove();
+            changed = true;
+          }
+        }
+        return changed;
+      }
+
+      @Override public boolean retainAll(Collection<?> collection) {
+        checkNotNull(collection);
+        boolean changed = false;
+        Iterator<Entry<K, V>> iterator = unfiltered.entrySet().iterator();
+        while (iterator.hasNext()) {
+          Entry<K, V> entry = iterator.next();
+          if (!collection.contains(entry.getValue())
+              && predicate.apply(entry)) {
+            iterator.remove();
+            changed = true;
+          }
+        }
+        return changed;
+      }
+
+      @Override public Object[] toArray() {
+        // creating an ArrayList so filtering happens once
+        return Lists.newArrayList(iterator()).toArray();
+      }
+
+      @Override public <T> T[] toArray(T[] array) {
+        return Lists.newArrayList(iterator()).toArray(array);
+      }
+    }
+  }
+  /**
+   * Support {@code clear()}, {@code removeAll()}, and {@code retainAll()} when
+   * filtering a filtered sorted map.
+   */
+  private static <K, V> SortedMap<K, V> filterFiltered(
+      FilteredEntrySortedMap<K, V> map,
+      Predicate<? super Entry<K, V>> entryPredicate) {
+    Predicate<Entry<K, V>> predicate
+        = Predicates.and(map.predicate, entryPredicate);
+    return new FilteredEntrySortedMap<K, V>(map.sortedMap(), predicate);
+  }
+
+  private static class FilteredEntrySortedMap<K, V>
+      extends FilteredEntryMap<K, V> implements SortedMap<K, V> {
+
+    FilteredEntrySortedMap(SortedMap<K, V> unfiltered,
+        Predicate<? super Entry<K, V>> entryPredicate) {
+      super(unfiltered, entryPredicate);
+    }
+
+    SortedMap<K, V> sortedMap() {
+      return (SortedMap<K, V>) unfiltered;
+    }
+
+    @Override public Comparator<? super K> comparator() {
+      return sortedMap().comparator();
+    }
+
+    @Override public K firstKey() {
+      // correctly throws NoSuchElementException when filtered map is empty.
+      return keySet().iterator().next();
+    }
+
+    @Override public K lastKey() {
+      SortedMap<K, V> headMap = sortedMap();
+      while (true) {
+        // correctly throws NoSuchElementException when filtered map is empty.
+        K key = headMap.lastKey();
+        if (apply(key, unfiltered.get(key))) {
+          return key;
+        }
+        headMap = sortedMap().headMap(key);
+      }
+    }
+
+    @Override public SortedMap<K, V> headMap(K toKey) {
+      return new FilteredEntrySortedMap<K, V>(sortedMap().headMap(toKey), predicate);
+    }
+
+    @Override public SortedMap<K, V> subMap(K fromKey, K toKey) {
+      return new FilteredEntrySortedMap<K, V>(
+          sortedMap().subMap(fromKey, toKey), predicate);
+    }
+
+    @Override public SortedMap<K, V> tailMap(K fromKey) {
+      return new FilteredEntrySortedMap<K, V>(
+          sortedMap().tailMap(fromKey), predicate);
+    }
+  }
+
+  private static class FilteredKeyMap<K, V> extends AbstractFilteredMap<K, V> {
+    Predicate<? super K> keyPredicate;
+
+    FilteredKeyMap(Map<K, V> unfiltered, Predicate<? super K> keyPredicate,
+        Predicate<Entry<K, V>> entryPredicate) {
+      super(unfiltered, entryPredicate);
+      this.keyPredicate = keyPredicate;
+    }
+
+    Set<Entry<K, V>> entrySet;
+
+    @Override public Set<Entry<K, V>> entrySet() {
+      Set<Entry<K, V>> result = entrySet;
+      return (result == null)
+          ? entrySet = Sets.filter(unfiltered.entrySet(), predicate)
+          : result;
+    }
+
+    Set<K> keySet;
+
+    @Override public Set<K> keySet() {
+      Set<K> result = keySet;
+      return (result == null)
+          ? keySet = Sets.filter(unfiltered.keySet(), keyPredicate)
+          : result;
+    }
+
+    // The cast is called only when the key is in the unfiltered map, implying
+    // that key is a K.
+    @Override
+    @SuppressWarnings("unchecked")
+    public boolean containsKey(Object key) {
+      return unfiltered.containsKey(key) && keyPredicate.apply((K) key);
+    }
+  }
+
+  static class FilteredEntryMap<K, V> extends AbstractFilteredMap<K, V> {
+    /**
+     * Entries in this set satisfy the predicate, but they don't validate the
+     * input to {@code Entry.setValue()}.
+     */
+    final Set<Entry<K, V>> filteredEntrySet;
+
+    FilteredEntryMap(
+        Map<K, V> unfiltered, Predicate<? super Entry<K, V>> entryPredicate) {
+      super(unfiltered, entryPredicate);
+      filteredEntrySet = Sets.filter(unfiltered.entrySet(), predicate);
+    }
+
+    Set<Entry<K, V>> entrySet;
+
+    @Override public Set<Entry<K, V>> entrySet() {
+      Set<Entry<K, V>> result = entrySet;
+      return (result == null) ? entrySet = new EntrySet() : result;
+    }
+
+    private class EntrySet extends ForwardingSet<Entry<K, V>> {
+      @Override protected Set<Entry<K, V>> delegate() {
+        return filteredEntrySet;
+      }
+
+      @Override public Iterator<Entry<K, V>> iterator() {
+        final Iterator<Entry<K, V>> iterator = filteredEntrySet.iterator();
+        return new UnmodifiableIterator<Entry<K, V>>() {
+          @Override
+          public boolean hasNext() {
+            return iterator.hasNext();
+          }
+
+          @Override
+          public Entry<K, V> next() {
+            final Entry<K, V> entry = iterator.next();
+            return new ForwardingMapEntry<K, V>() {
+              @Override protected Entry<K, V> delegate() {
+                return entry;
+              }
+
+              @Override public V setValue(V value) {
+                checkArgument(apply(entry.getKey(), value));
+                return super.setValue(value);
+              }
+            };
+          }
+        };
+      }
+    }
+
+    Set<K> keySet;
+
+    @Override public Set<K> keySet() {
+      Set<K> result = keySet;
+      return (result == null) ? keySet = new KeySet() : result;
+    }
+
+    private class KeySet extends AbstractSet<K> {
+      @Override public Iterator<K> iterator() {
+        final Iterator<Entry<K, V>> iterator = filteredEntrySet.iterator();
+        return new UnmodifiableIterator<K>() {
+          @Override
+          public boolean hasNext() {
+            return iterator.hasNext();
+          }
+
+          @Override
+          public K next() {
+            return iterator.next().getKey();
+          }
+        };
+      }
+
+      @Override public int size() {
+        return filteredEntrySet.size();
+      }
+
+      @Override public void clear() {
+        filteredEntrySet.clear();
+      }
+
+      @Override public boolean contains(Object o) {
+        return containsKey(o);
+      }
+
+      @Override public boolean remove(Object o) {
+        if (containsKey(o)) {
+          unfiltered.remove(o);
+          return true;
+        }
+        return false;
+      }
+
+      @Override public boolean removeAll(Collection<?> collection) {
+        checkNotNull(collection); // for GWT
+        boolean changed = false;
+        for (Object obj : collection) {
+          changed |= remove(obj);
+        }
+        return changed;
+      }
+
+      @Override public boolean retainAll(Collection<?> collection) {
+        checkNotNull(collection); // for GWT
+        boolean changed = false;
+        Iterator<Entry<K, V>> iterator = unfiltered.entrySet().iterator();
+        while (iterator.hasNext()) {
+          Entry<K, V> entry = iterator.next();
+          if (!collection.contains(entry.getKey()) && predicate.apply(entry)) {
+            iterator.remove();
+            changed = true;
+          }
+        }
+        return changed;
+      }
+
+      @Override public Object[] toArray() {
+        // creating an ArrayList so filtering happens once
+        return Lists.newArrayList(iterator()).toArray();
+      }
+
+      @Override public <T> T[] toArray(T[] array) {
+        return Lists.newArrayList(iterator()).toArray(array);
+      }
+    }
+  }
+
+  /**
+   * {@code AbstractMap} extension that implements {@link #isEmpty()} as {@code
+   * entrySet().isEmpty()} instead of {@code size() == 0} to speed up
+   * implementations where {@code size()} is O(n), and it delegates the {@code
+   * isEmpty()} methods of its key set and value collection to this
+   * implementation.
+   */
+  @GwtCompatible
+  static abstract class ImprovedAbstractMap<K, V> extends AbstractMap<K, V> {
+    /**
+     * Creates the entry set to be returned by {@link #entrySet()}. This method
+     * is invoked at most once on a given map, at the time when {@code entrySet}
+     * is first called.
+     */
+    protected abstract Set<Entry<K, V>> createEntrySet();
+
+    private Set<Entry<K, V>> entrySet;
+
+    @Override public Set<Entry<K, V>> entrySet() {
+      Set<Entry<K, V>> result = entrySet;
+      if (result == null) {
+        entrySet = result = createEntrySet();
+      }
+      return result;
+    }
+
+    private Set<K> keySet;
+
+    @Override public Set<K> keySet() {
+      Set<K> result = keySet;
+      if (result == null) {
+        return keySet = new KeySet<K, V>() {
+          @Override Map<K, V> map() {
+            return ImprovedAbstractMap.this;
+          }
+        };
+      }
+      return result;
+    }
+
+    private Collection<V> values;
+
+    @Override public Collection<V> values() {
+      Collection<V> result = values;
+      if (result == null) {
+        return values = new Values<K, V>(){
+          @Override Map<K, V> map() {
+            return ImprovedAbstractMap.this;
+          }
+        };
+      }
+      return result;
+    }
+
+    /**
+     * Returns {@code true} if this map contains no key-value mappings.
+     *
+     * <p>The implementation returns {@code entrySet().isEmpty()}.
+     *
+     * @return {@code true} if this map contains no key-value mappings
+     */
+    @Override public boolean isEmpty() {
+      return entrySet().isEmpty();
+    }
+  }
+
+  static final MapJoiner STANDARD_JOINER =
+      Collections2.STANDARD_JOINER.withKeyValueSeparator("=");
+
+  /**
+   * Delegates to {@link Map#get}. Returns {@code null} on {@code
+   * ClassCastException}.
+   */
+  static <V> V safeGet(Map<?, V> map, Object key) {
+    try {
+      return map.get(key);
+    } catch (ClassCastException e) {
+      return null;
+    }
+  }
+
+  /**
+   * Delegates to {@link Map#containsKey}. Returns {@code false} on {@code
+   * ClassCastException}
+   */
+  static boolean safeContainsKey(Map<?, ?> map, Object key) {
+    try {
+      return map.containsKey(key);
+    } catch (ClassCastException e) {
+      return false;
+    }
+  }
+
+  /**
+   * Implements {@code Collection.contains} safely for forwarding collections of
+   * map entries. If {@code o} is an instance of {@code Map.Entry}, it is
+   * wrapped using {@link #unmodifiableEntry} to protect against a possible
+   * nefarious equals method.
+   *
+   * <p>Note that {@code c} is the backing (delegate) collection, rather than
+   * the forwarding collection.
+   *
+   * @param c the delegate (unwrapped) collection of map entries
+   * @param o the object that might be contained in {@code c}
+   * @return {@code true} if {@code c} contains {@code o}
+   */
+  static <K, V> boolean containsEntryImpl(Collection<Entry<K, V>> c, Object o) {
+    if (!(o instanceof Entry)) {
+      return false;
+    }
+    return c.contains(unmodifiableEntry((Entry<?, ?>) o));
+  }
+
+  /**
+   * Implements {@code Collection.remove} safely for forwarding collections of
+   * map entries. If {@code o} is an instance of {@code Map.Entry}, it is
+   * wrapped using {@link #unmodifiableEntry} to protect against a possible
+   * nefarious equals method.
+   *
+   * <p>Note that {@code c} is backing (delegate) collection, rather than the
+   * forwarding collection.
+   *
+   * @param c the delegate (unwrapped) collection of map entries
+   * @param o the object to remove from {@code c}
+   * @return {@code true} if {@code c} was changed
+   */
+  static <K, V> boolean removeEntryImpl(Collection<Entry<K, V>> c, Object o) {
+    if (!(o instanceof Entry)) {
+      return false;
+    }
+    return c.remove(unmodifiableEntry((Entry<?, ?>) o));
+  }
+
+  /**
+   * An implementation of {@link Map#equals}.
+   */
+  static boolean equalsImpl(Map<?, ?> map, Object object) {
+    if (map == object) {
+      return true;
+    }
+    if (object instanceof Map) {
+      Map<?, ?> o = (Map<?, ?>) object;
+      return map.entrySet().equals(o.entrySet());
+    }
+    return false;
+  }
+
+  /**
+   * An implementation of {@link Map#hashCode}.
+   */
+  static int hashCodeImpl(Map<?, ?> map) {
+    return Sets.hashCodeImpl(map.entrySet());
+  }
+
+  /**
+   * An implementation of {@link Map#toString}.
+   */
+  static String toStringImpl(Map<?, ?> map) {
+    StringBuilder sb
+        = Collections2.newStringBuilderForCollection(map.size()).append('{');
+    STANDARD_JOINER.appendTo(sb, map);
+    return sb.append('}').toString();
+  }
+
+  /**
+   * An implementation of {@link Map#putAll}.
+   */
+  static <K, V> void putAllImpl(
+      Map<K, V> self, Map<? extends K, ? extends V> map) {
+    for (Map.Entry<? extends K, ? extends V> entry : map.entrySet()) {
+      self.put(entry.getKey(), entry.getValue());
+    }
+  }
+
+  /**
+   * An admittedly inefficient implementation of {@link Map#containsKey}.
+   */
+  static boolean containsKeyImpl(Map<?, ?> map, @Nullable Object key) {
+    for (Entry<?, ?> entry : map.entrySet()) {
+      if (Objects.equal(entry.getKey(), key)) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  /**
+   * An implementation of {@link Map#containsValue}.
+   */
+  static boolean containsValueImpl(Map<?, ?> map, @Nullable Object value) {
+    for (Entry<?, ?> entry : map.entrySet()) {
+      if (Objects.equal(entry.getValue(), value)) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  abstract static class KeySet<K, V> extends AbstractSet<K> {
+    abstract Map<K, V> map();
+
+    @Override public Iterator<K> iterator() {
+      return Iterators.transform(map().entrySet().iterator(),
+          new Function<Map.Entry<K, V>, K>() {
+            @Override public K apply(Entry<K, V> entry) {
+              return entry.getKey();
+            }
+          });
+    }
+
+    @Override public int size() {
+      return map().size();
+    }
+
+    @Override public boolean isEmpty() {
+      return map().isEmpty();
+    }
+
+    @Override public boolean contains(Object o) {
+      return map().containsKey(o);
+    }
+
+    @Override public boolean remove(Object o) {
+      if (contains(o)) {
+        map().remove(o);
+        return true;
+      }
+      return false;
+    }
+
+    @Override
+    public boolean removeAll(Collection<?> c) {
+      // TODO(user): find out why this is necessary to make GWT tests pass.
+      return super.removeAll(checkNotNull(c));
+    }
+
+    @Override public void clear() {
+      map().clear();
+    }
+  }
+
+  abstract static class Values<K, V> extends AbstractCollection<V> {
+    abstract Map<K, V> map();
+
+    @Override public Iterator<V> iterator() {
+      return Iterators.transform(map().entrySet().iterator(),
+          new Function<Entry<K, V>, V>() {
+            @Override public V apply(Entry<K, V> entry) {
+              return entry.getValue();
+            }
+          });
+    }
+
+    @Override public boolean remove(Object o) {
+      try {
+        return super.remove(o);
+      } catch (UnsupportedOperationException e) {
+        for (Entry<K, V> entry : map().entrySet()) {
+          if (Objects.equal(o, entry.getValue())) {
+            map().remove(entry.getKey());
+            return true;
+          }
+        }
+        return false;
+      }
+    }
+
+    @Override public boolean removeAll(Collection<?> c) {
+      try {
+        return super.removeAll(checkNotNull(c));
+      } catch (UnsupportedOperationException e) {
+        Set<K> toRemove = Sets.newHashSet();
+        for (Entry<K, V> entry : map().entrySet()) {
+          if (c.contains(entry.getValue())) {
+            toRemove.add(entry.getKey());
+          }
+        }
+        return map().keySet().removeAll(toRemove);
+      }
+    }
+
+    @Override public boolean retainAll(Collection<?> c) {
+      try {
+        return super.retainAll(checkNotNull(c));
+      } catch (UnsupportedOperationException e) {
+        Set<K> toRetain = Sets.newHashSet();
+        for (Entry<K, V> entry : map().entrySet()) {
+          if (c.contains(entry.getValue())) {
+            toRetain.add(entry.getKey());
+          }
+        }
+        return map().keySet().retainAll(toRetain);
+      }
+    }
+
+    @Override public int size() {
+      return map().size();
+    }
+
+    @Override public boolean isEmpty() {
+      return map().isEmpty();
+    }
+
+    @Override public boolean contains(@Nullable Object o) {
+      return map().containsValue(o);
+    }
+
+    @Override public void clear() {
+      map().clear();
+    }
+  }
+
+  abstract static class EntrySet<K, V> extends AbstractSet<Entry<K, V>> {
+    abstract Map<K, V> map();
+
+    @Override public int size() {
+      return map().size();
+    }
+
+    @Override public void clear() {
+      map().clear();
+    }
+
+    @Override public boolean contains(Object o) {
+      if (o instanceof Entry) {
+        Entry<?, ?> entry = (Entry<?, ?>) o;
+        Object key = entry.getKey();
+        V value = map().get(key);
+        return Objects.equal(value, entry.getValue())
+            && (value != null || map().containsKey(key));
+      }
+      return false;
+    }
+
+    @Override public boolean isEmpty() {
+      return map().isEmpty();
+    }
+
+    @Override public boolean remove(Object o) {
+      if (contains(o)) {
+        Entry<?, ?> entry = (Entry<?, ?>) o;
+        return map().keySet().remove(entry.getKey());
+      }
+      return false;
+    }
+
+    @Override public boolean removeAll(Collection<?> c) {
+      try {
+        return super.removeAll(checkNotNull(c));
+      } catch (UnsupportedOperationException e) {
+        // if the iterators don't support remove
+        boolean changed = true;
+        for (Object o : c) {
+          changed |= remove(o);
+        }
+        return changed;
+      }
+    }
+
+    @Override public boolean retainAll(Collection<?> c) {
+      try {
+        return super.retainAll(checkNotNull(c));
+      } catch (UnsupportedOperationException e) {
+        // if the iterators don't support remove
+        Set<Object> keys = Sets.newHashSetWithExpectedSize(c.size());
+        for (Object o : c) {
+          if (contains(o)) {
+            Entry<?, ?> entry = (Entry<?, ?>) o;
+            keys.add(entry.getKey());
+          }
+        }
+        return map().keySet().retainAll(keys);
+      }
+    }
+  }
+}
diff --git a/guava/src/com/google/common/collect/MinMaxPriorityQueue.java b/guava/src/com/google/common/collect/MinMaxPriorityQueue.java
new file mode 100644
index 0000000..4429c34
--- /dev/null
+++ b/guava/src/com/google/common/collect/MinMaxPriorityQueue.java
@@ -0,0 +1,940 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkPositionIndex;
+import static com.google.common.base.Preconditions.checkState;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.math.IntMath;
+
+import java.util.AbstractQueue;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.ConcurrentModificationException;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.NoSuchElementException;
+import java.util.PriorityQueue;
+import java.util.Queue;
+
+/**
+ * A double-ended priority queue, which provides constant-time access to both
+ * its least element and its greatest element, as determined by the queue's
+ * specified comparator. If no comparator is given at construction time, the
+ * natural order of elements is used.
+ *
+ * <p>As a {@link Queue} it functions exactly as a {@link PriorityQueue}: its
+ * head element -- the implicit target of the methods {@link #peek()}, {@link
+ * #poll()} and {@link #remove()} -- is defined as the <i>least</i> element in
+ * the queue according to the queue's comparator. But unlike a regular priority
+ * queue, the methods {@link #peekLast}, {@link #pollLast} and
+ * {@link #removeLast} are also provided, to act on the <i>greatest</i> element
+ * in the queue instead.
+ *
+ * <p>A min-max priority queue can be configured with a maximum size. If so,
+ * each time the size of the queue exceeds that value, the queue automatically
+ * removes its greatest element according to its comparator (which might be the
+ * element that was just added). This is different from conventional bounded
+ * queues, which either block or reject new elements when full.
+ *
+ * <p>This implementation is based on the
+ * <a href="http://portal.acm.org/citation.cfm?id=6621">min-max heap</a>
+ * developed by Atkinson, et al. Unlike many other double-ended priority queues,
+ * it stores elements in a single array, as compact as the traditional heap data
+ * structure used in {@link PriorityQueue}.
+ *
+ * <p>This class is not thread-safe, and does not accept null elements.
+ *
+ * <p><i>Performance notes:</i>
+ *
+ * <ul>
+ * <li>The retrieval operations {@link #peek}, {@link #peekFirst}, {@link
+ *     #peekLast}, {@link #element}, and {@link #size} are constant-time
+ * <li>The enqueing and dequeing operations ({@link #offer}, {@link #add}, and
+ *     all the forms of {@link #poll} and {@link #remove()}) run in {@code
+ *     O(log n) time}
+ * <li>The {@link #remove(Object)} and {@link #contains} operations require
+ *     linear ({@code O(n)}) time
+ * <li>If you only access one end of the queue, and don't use a maximum size,
+ *     this class is functionally equivalent to {@link PriorityQueue}, but
+ *     significantly slower.
+ * </ul>
+ *
+ * @author Sverre Sundsdal
+ * @author Torbjorn Gannholm
+ * @since 8.0
+ */
+// TODO(kevinb): @GwtCompatible
+@Beta
+public final class MinMaxPriorityQueue<E> extends AbstractQueue<E> {
+
+  /**
+   * Creates a new min-max priority queue with default settings: natural order,
+   * no maximum size, no initial contents, and an initial expected size of 11.
+   */
+  public static <E extends Comparable<E>> MinMaxPriorityQueue<E> create() {
+    return new Builder<Comparable>(Ordering.natural()).create();
+  }
+
+  /**
+   * Creates a new min-max priority queue using natural order, no maximum size,
+   * and initially containing the given elements.
+   */
+  public static <E extends Comparable<E>> MinMaxPriorityQueue<E> create(
+      Iterable<? extends E> initialContents) {
+    return new Builder<E>(Ordering.<E>natural()).create(initialContents);
+  }
+
+  /**
+   * Creates and returns a new builder, configured to build {@code
+   * MinMaxPriorityQueue} instances that use {@code comparator} to determine the
+   * least and greatest elements.
+   */
+  public static <B> Builder<B> orderedBy(Comparator<B> comparator) {
+    return new Builder<B>(comparator);
+  }
+
+  /**
+   * Creates and returns a new builder, configured to build {@code
+   * MinMaxPriorityQueue} instances sized appropriately to hold {@code
+   * expectedSize} elements.
+   */
+  public static Builder<Comparable> expectedSize(int expectedSize) {
+    return new Builder<Comparable>(Ordering.natural())
+        .expectedSize(expectedSize);
+  }
+
+  /**
+   * Creates and returns a new builder, configured to build {@code
+   * MinMaxPriorityQueue} instances that are limited to {@code maximumSize}
+   * elements. Each time a queue grows beyond this bound, it immediately
+   * removes its greatest element (according to its comparator), which might be
+   * the element that was just added.
+   */
+  public static Builder<Comparable> maximumSize(int maximumSize) {
+    return new Builder<Comparable>(Ordering.natural())
+        .maximumSize(maximumSize);
+  }
+
+  /**
+   * The builder class used in creation of min-max priority queues. Instead of
+   * constructing one directly, use {@link
+   * MinMaxPriorityQueue#orderedBy(Comparator)}, {@link
+   * MinMaxPriorityQueue#expectedSize(int)} or {@link
+   * MinMaxPriorityQueue#maximumSize(int)}.
+   *
+   * @param <B> the upper bound on the eventual type that can be produced by
+   *     this builder (for example, a {@code Builder<Number>} can produce a
+   *     {@code Queue<Number>} or {@code Queue<Integer>} but not a {@code
+   *     Queue<Object>}).
+   * @since 8.0
+   */
+  @Beta
+  public static final class Builder<B> {
+    /*
+     * TODO(kevinb): when the dust settles, see if we still need this or can
+     * just default to DEFAULT_CAPACITY.
+     */
+    private static final int UNSET_EXPECTED_SIZE = -1;
+
+    private final Comparator<B> comparator;
+    private int expectedSize = UNSET_EXPECTED_SIZE;
+    private int maximumSize = Integer.MAX_VALUE;
+
+    private Builder(Comparator<B> comparator) {
+      this.comparator = checkNotNull(comparator);
+    }
+
+    /**
+     * Configures this builder to build min-max priority queues with an initial
+     * expected size of {@code expectedSize}.
+     */
+    public Builder<B> expectedSize(int expectedSize) {
+      checkArgument(expectedSize >= 0);
+      this.expectedSize = expectedSize;
+      return this;
+    }
+
+    /**
+     * Configures this builder to build {@code MinMaxPriorityQueue} instances
+     * that are limited to {@code maximumSize} elements. Each time a queue grows
+     * beyond this bound, it immediately removes its greatest element (according
+     * to its comparator), which might be the element that was just added.
+     */
+    public Builder<B> maximumSize(int maximumSize) {
+      checkArgument(maximumSize > 0);
+      this.maximumSize = maximumSize;
+      return this;
+    }
+
+    /**
+     * Builds a new min-max priority queue using the previously specified
+     * options, and having no initial contents.
+     */
+    public <T extends B> MinMaxPriorityQueue<T> create() {
+      return create(Collections.<T>emptySet());
+    }
+
+    /**
+     * Builds a new min-max priority queue using the previously specified
+     * options, and having the given initial elements.
+     */
+    public <T extends B> MinMaxPriorityQueue<T> create(
+        Iterable<? extends T> initialContents) {
+      MinMaxPriorityQueue<T> queue = new MinMaxPriorityQueue<T>(
+          this, initialQueueSize(expectedSize, maximumSize, initialContents));
+      for (T element : initialContents) {
+        queue.offer(element);
+      }
+      return queue;
+    }
+
+    @SuppressWarnings("unchecked") // safe "contravariant cast"
+    private <T extends B> Ordering<T> ordering() {
+      return Ordering.from((Comparator<T>) comparator);
+    }
+  }
+
+  private final Heap minHeap;
+  private final Heap maxHeap;
+  @VisibleForTesting final int maximumSize;
+  private Object[] queue;
+  private int size;
+  private int modCount;
+
+  private MinMaxPriorityQueue(Builder<? super E> builder, int queueSize) {
+    Ordering<E> ordering = builder.ordering();
+    this.minHeap = new Heap(ordering);
+    this.maxHeap = new Heap(ordering.reverse());
+    minHeap.otherHeap = maxHeap;
+    maxHeap.otherHeap = minHeap;
+
+    this.maximumSize = builder.maximumSize;
+    // TODO(kevinb): pad?
+    this.queue = new Object[queueSize];
+  }
+
+  @Override public int size() {
+    return size;
+  }
+
+  /**
+   * Adds the given element to this queue. If this queue has a maximum size,
+   * after adding {@code element} the queue will automatically evict its
+   * greatest element (according to its comparator), which may be {@code
+   * element} itself.
+   *
+   * @return {@code true} always
+   */
+  @Override public boolean add(E element) {
+    offer(element);
+    return true;
+  }
+
+  @Override public boolean addAll(Collection<? extends E> newElements) {
+    boolean modified = false;
+    for (E element : newElements) {
+      offer(element);
+      modified = true;
+    }
+    return modified;
+  }
+
+  /**
+   * Adds the given element to this queue. If this queue has a maximum size,
+   * after adding {@code element} the queue will automatically evict its
+   * greatest element (according to its comparator), which may be {@code
+   * element} itself.
+   */
+  @Override public boolean offer(E element) {
+    checkNotNull(element);
+    modCount++;
+    int insertIndex = size++;
+
+    growIfNeeded();
+
+    // Adds the element to the end of the heap and bubbles it up to the correct
+    // position.
+    heapForIndex(insertIndex).bubbleUp(insertIndex, element);
+    return size <= maximumSize || pollLast() != element;
+  }
+
+  @Override public E poll() {
+    return isEmpty() ? null : removeAndGet(0);
+  }
+
+  @SuppressWarnings("unchecked") // we must carefully only allow Es to get in
+  E elementData(int index) {
+    return (E) queue[index];
+  }
+
+  @Override public E peek() {
+    return isEmpty() ? null : elementData(0);
+  }
+
+  /**
+   * Returns the index of the max element.
+   */
+  private int getMaxElementIndex() {
+    switch (size) {
+      case 1:
+        return 0; // The lone element in the queue is the maximum.
+      case 2:
+        return 1; // The lone element in the maxHeap is the maximum.
+      default:
+        // The max element must sit on the first level of the maxHeap. It is
+        // actually the *lesser* of the two from the maxHeap's perspective.
+        return (maxHeap.compareElements(1, 2) <= 0) ? 1 : 2;
+    }
+  }
+
+  /**
+   * Removes and returns the least element of this queue, or returns {@code
+   * null} if the queue is empty.
+   */
+  public E pollFirst() {
+    return poll();
+  }
+
+  /**
+   * Removes and returns the least element of this queue.
+   *
+   * @throws NoSuchElementException if the queue is empty
+   */
+  public E removeFirst() {
+    return remove();
+  }
+
+  /**
+   * Retrieves, but does not remove, the least element of this queue, or returns
+   * {@code null} if the queue is empty.
+   */
+  public E peekFirst() {
+    return peek();
+  }
+
+  /**
+   * Removes and returns the greatest element of this queue, or returns {@code
+   * null} if the queue is empty.
+   */
+  public E pollLast() {
+    return isEmpty() ? null : removeAndGet(getMaxElementIndex());
+  }
+
+  /**
+   * Removes and returns the greatest element of this queue.
+   *
+   * @throws NoSuchElementException if the queue is empty
+   */
+  public E removeLast() {
+    if (isEmpty()) {
+      throw new NoSuchElementException();
+    }
+    return removeAndGet(getMaxElementIndex());
+  }
+
+  /**
+   * Retrieves, but does not remove, the greatest element of this queue, or
+   * returns {@code null} if the queue is empty.
+   */
+  public E peekLast() {
+    return isEmpty() ? null : elementData(getMaxElementIndex());
+  }
+
+  /**
+   * Removes the element at position {@code index}.
+   *
+   * <p>Normally this method leaves the elements at up to {@code index - 1},
+   * inclusive, untouched.  Under these circumstances, it returns {@code null}.
+   *
+   * <p>Occasionally, in order to maintain the heap invariant, it must swap a
+   * later element of the list with one before {@code index}. Under these
+   * circumstances it returns a pair of elements as a {@link MoveDesc}. The
+   * first one is the element that was previously at the end of the heap and is
+   * now at some position before {@code index}. The second element is the one
+   * that was swapped down to replace the element at {@code index}. This fact is
+   * used by iterator.remove so as to visit elements during a traversal once and
+   * only once.
+   */
+  @VisibleForTesting MoveDesc<E> removeAt(int index) {
+    checkPositionIndex(index, size);
+    modCount++;
+    size--;
+    if (size == index) {
+      queue[size] = null;
+      return null;
+    }
+    E actualLastElement = elementData(size);
+    int lastElementAt = heapForIndex(size)
+        .getCorrectLastElement(actualLastElement);
+    E toTrickle = elementData(size);
+    queue[size] = null;
+    MoveDesc<E> changes = fillHole(index, toTrickle);
+    if (lastElementAt < index) {
+      // Last element is moved to before index, swapped with trickled element.
+      if (changes == null) {
+        // The trickled element is still after index.
+        return new MoveDesc<E>(actualLastElement, toTrickle);
+      } else {
+        // The trickled element is back before index, but the replaced element
+        // has now been moved after index.
+        return new MoveDesc<E>(actualLastElement, changes.replaced);
+      }
+    }
+    // Trickled element was after index to begin with, no adjustment needed.
+    return changes;
+  }
+
+  private MoveDesc<E> fillHole(int index, E toTrickle) {
+    Heap heap = heapForIndex(index);
+    // We consider elementData(index) a "hole", and we want to fill it
+    // with the last element of the heap, toTrickle.
+    // Since the last element of the heap is from the bottom level, we
+    // optimistically fill index position with elements from lower levels,
+    // moving the hole down. In most cases this reduces the number of
+    // comparisons with toTrickle, but in some cases we will need to bubble it
+    // all the way up again.
+    int vacated = heap.fillHoleAt(index);
+    // Try to see if toTrickle can be bubbled up min levels.
+    int bubbledTo = heap.bubbleUpAlternatingLevels(vacated, toTrickle);
+    if (bubbledTo == vacated) {
+      // Could not bubble toTrickle up min levels, try moving
+      // it from min level to max level (or max to min level) and bubble up
+      // there.
+      return heap.tryCrossOverAndBubbleUp(index, vacated, toTrickle);
+    } else {
+      return (bubbledTo < index)
+          ? new MoveDesc<E>(toTrickle, elementData(index))
+          : null;
+    }
+  }
+
+  // Returned from removeAt() to iterator.remove()
+  static class MoveDesc<E> {
+    final E toTrickle;
+    final E replaced;
+
+    MoveDesc(E toTrickle, E replaced) {
+      this.toTrickle = toTrickle;
+      this.replaced = replaced;
+    }
+  }
+
+  /**
+   * Removes and returns the value at {@code index}.
+   */
+  private E removeAndGet(int index) {
+    E value = elementData(index);
+    removeAt(index);
+    return value;
+  }
+
+  private Heap heapForIndex(int i) {
+    return isEvenLevel(i) ? minHeap : maxHeap;
+  }
+
+  private static final int EVEN_POWERS_OF_TWO = 0x55555555;
+  private static final int ODD_POWERS_OF_TWO = 0xaaaaaaaa;
+
+  @VisibleForTesting static boolean isEvenLevel(int index) {
+    int oneBased = index + 1;
+    checkState(oneBased > 0, "negative index");
+    return (oneBased & EVEN_POWERS_OF_TWO) > (oneBased & ODD_POWERS_OF_TWO);
+  }
+
+  /**
+   * Returns {@code true} if the MinMax heap structure holds. This is only used
+   * in testing.
+   *
+   * TODO(kevinb): move to the test class?
+   */
+  @VisibleForTesting boolean isIntact() {
+    for (int i = 1; i < size; i++) {
+      if (!heapForIndex(i).verifyIndex(i)) {
+        return false;
+      }
+    }
+    return true;
+  }
+
+  /**
+   * Each instance of MinMaxPriortyQueue encapsulates two instances of Heap:
+   * a min-heap and a max-heap. Conceptually, these might each have their own
+   * array for storage, but for efficiency's sake they are stored interleaved on
+   * alternate heap levels in the same array (MMPQ.queue).
+   */
+  private class Heap {
+    final Ordering<E> ordering;
+    Heap otherHeap;
+
+    Heap(Ordering<E> ordering) {
+      this.ordering = ordering;
+    }
+
+    int compareElements(int a, int b) {
+      return ordering.compare(elementData(a), elementData(b));
+    }
+
+    /**
+     * Tries to move {@code toTrickle} from a min to a max level and
+     * bubble up there. If it moved before {@code removeIndex} this method
+     * returns a pair as described in {@link #removeAt}.
+     */
+    MoveDesc<E> tryCrossOverAndBubbleUp(
+        int removeIndex, int vacated, E toTrickle) {
+      int crossOver = crossOver(vacated, toTrickle);
+      if (crossOver == vacated) {
+        return null;
+      }
+      // Successfully crossed over from min to max.
+      // Bubble up max levels.
+      E parent;
+      // If toTrickle is moved up to a parent of removeIndex, the parent is
+      // placed in removeIndex position. We must return that to the iterator so
+      // that it knows to skip it.
+      if (crossOver < removeIndex) {
+        // We crossed over to the parent level in crossOver, so the parent
+        // has already been moved.
+        parent = elementData(removeIndex);
+      } else {
+        parent = elementData(getParentIndex(removeIndex));
+      }
+      // bubble it up the opposite heap
+      if (otherHeap.bubbleUpAlternatingLevels(crossOver, toTrickle)
+          < removeIndex) {
+        return new MoveDesc<E>(toTrickle, parent);
+      } else {
+        return null;
+      }
+    }
+
+    /**
+     * Bubbles a value from {@code index} up the appropriate heap if required.
+     */
+    void bubbleUp(int index, E x) {
+      int crossOver = crossOverUp(index, x);
+
+      Heap heap;
+      if (crossOver == index) {
+        heap = this;
+      } else {
+        index = crossOver;
+        heap = otherHeap;
+      }
+      heap.bubbleUpAlternatingLevels(index, x);
+    }
+
+    /**
+     * Bubbles a value from {@code index} up the levels of this heap, and
+     * returns the index the element ended up at.
+     */
+    int bubbleUpAlternatingLevels(int index, E x) {
+      while (index > 2) {
+        int grandParentIndex = getGrandparentIndex(index);
+        E e = elementData(grandParentIndex);
+        if (ordering.compare(e, x) <= 0) {
+          break;
+        }
+        queue[index] = e;
+        index = grandParentIndex;
+      }
+      queue[index] = x;
+      return index;
+    }
+
+    /**
+     * Returns the index of minimum value between {@code index} and
+     * {@code index + len}, or {@code -1} if {@code index} is greater than
+     * {@code size}.
+     */
+    int findMin(int index, int len) {
+      if (index >= size) {
+        return -1;
+      }
+      checkState(index > 0);
+      int limit = Math.min(index, size - len) + len;
+      int minIndex = index;
+      for (int i = index + 1; i < limit; i++) {
+        if (compareElements(i, minIndex) < 0) {
+          minIndex = i;
+        }
+      }
+      return minIndex;
+    }
+
+    /**
+     * Returns the minimum child or {@code -1} if no child exists.
+     */
+    int findMinChild(int index) {
+      return findMin(getLeftChildIndex(index), 2);
+    }
+
+    /**
+     * Returns the minimum grand child or -1 if no grand child exists.
+     */
+    int findMinGrandChild(int index) {
+      int leftChildIndex = getLeftChildIndex(index);
+      if (leftChildIndex < 0) {
+        return -1;
+      }
+      return findMin(getLeftChildIndex(leftChildIndex), 4);
+    }
+
+    /**
+     * Moves an element one level up from a min level to a max level
+     * (or vice versa).
+     * Returns the new position of the element.
+     */
+    int crossOverUp(int index, E x) {
+      if (index == 0) {
+        queue[0] = x;
+        return 0;
+      }
+      int parentIndex = getParentIndex(index);
+      E parentElement = elementData(parentIndex);
+      if (parentIndex != 0) {
+        // This is a guard for the case of the childless uncle.
+        // Since the end of the array is actually the middle of the heap,
+        // a smaller childless uncle can become a child of x when we
+        // bubble up alternate levels, violating the invariant.
+        int grandparentIndex = getParentIndex(parentIndex);
+        int uncleIndex = getRightChildIndex(grandparentIndex);
+        if (uncleIndex != parentIndex
+            && getLeftChildIndex(uncleIndex) >= size) {
+          E uncleElement = elementData(uncleIndex);
+          if (ordering.compare(uncleElement, parentElement) < 0) {
+            parentIndex = uncleIndex;
+            parentElement = uncleElement;
+          }
+        }
+      }
+      if (ordering.compare(parentElement, x) < 0) {
+        queue[index] = parentElement;
+        queue[parentIndex] = x;
+        return parentIndex;
+      }
+      queue[index] = x;
+      return index;
+    }
+
+    /**
+     * Returns the conceptually correct last element of the heap.
+     *
+     * <p>Since the last element of the array is actually in the
+     * middle of the sorted structure, a childless uncle node could be
+     * smaller, which would corrupt the invariant if this element
+     * becomes the new parent of the uncle. In that case, we first
+     * switch the last element with its uncle, before returning.
+     */
+    int getCorrectLastElement(E actualLastElement) {
+      int parentIndex = getParentIndex(size);
+      if (parentIndex != 0) {
+        int grandparentIndex = getParentIndex(parentIndex);
+        int uncleIndex = getRightChildIndex(grandparentIndex);
+        if (uncleIndex != parentIndex
+            && getLeftChildIndex(uncleIndex) >= size) {
+          E uncleElement = elementData(uncleIndex);
+          if (ordering.compare(uncleElement, actualLastElement) < 0) {
+            queue[uncleIndex] = actualLastElement;
+            queue[size] = uncleElement;
+            return uncleIndex;
+          }
+        }
+      }
+      return size;
+    }
+
+    /**
+     * Crosses an element over to the opposite heap by moving it one level down
+     * (or up if there are no elements below it).
+     *
+     * Returns the new position of the element.
+     */
+    int crossOver(int index, E x) {
+      int minChildIndex = findMinChild(index);
+      // TODO(kevinb): split the && into two if's and move crossOverUp so it's
+      // only called when there's no child.
+      if ((minChildIndex > 0)
+          && (ordering.compare(elementData(minChildIndex), x) < 0)) {
+        queue[index] = elementData(minChildIndex);
+        queue[minChildIndex] = x;
+        return minChildIndex;
+      }
+      return crossOverUp(index, x);
+    }
+
+    /**
+     * Fills the hole at {@code index} by moving in the least of its
+     * grandchildren to this position, then recursively filling the new hole
+     * created.
+     *
+     * @return the position of the new hole (where the lowest grandchild moved
+     *     from, that had no grandchild to replace it)
+     */
+    int fillHoleAt(int index) {
+      int minGrandchildIndex;
+      while ((minGrandchildIndex = findMinGrandChild(index)) > 0) {
+        queue[index] = elementData(minGrandchildIndex);
+        index = minGrandchildIndex;
+      }
+      return index;
+    }
+
+    private boolean verifyIndex(int i) {
+      if ((getLeftChildIndex(i) < size)
+          && (compareElements(i, getLeftChildIndex(i)) > 0)) {
+        return false;
+      }
+      if ((getRightChildIndex(i) < size)
+          && (compareElements(i, getRightChildIndex(i)) > 0)) {
+        return false;
+      }
+      if ((i > 0) && (compareElements(i, getParentIndex(i)) > 0)) {
+        return false;
+      }
+      if ((i > 2) && (compareElements(getGrandparentIndex(i), i) > 0)) {
+        return false;
+      }
+      return true;
+    }
+
+    // These would be static if inner classes could have static members.
+
+    private int getLeftChildIndex(int i) {
+      return i * 2 + 1;
+    }
+
+    private int getRightChildIndex(int i) {
+      return i * 2 + 2;
+    }
+
+    private int getParentIndex(int i) {
+      return (i - 1) / 2;
+    }
+
+    private int getGrandparentIndex(int i) {
+      return getParentIndex(getParentIndex(i)); // (i - 3) / 4
+    }
+  }
+
+  /**
+   * Iterates the elements of the queue in no particular order.
+   *
+   * If the underlying queue is modified during iteration an exception will be
+   * thrown.
+   */
+  private class QueueIterator implements Iterator<E> {
+    private int cursor = -1;
+    private int expectedModCount = modCount;
+    // TODO(user): Switch to ArrayDeque once Guava supports it.
+    private Queue<E> forgetMeNot;
+    private List<E> skipMe;
+    private E lastFromForgetMeNot;
+    private boolean canRemove;
+
+    @Override public boolean hasNext() {
+      checkModCount();
+      return (nextNotInSkipMe(cursor + 1) < size())
+          || ((forgetMeNot != null) && !forgetMeNot.isEmpty());
+    }
+
+    @Override public E next() {
+      checkModCount();
+      int tempCursor = nextNotInSkipMe(cursor + 1);
+      if (tempCursor < size()) {
+        cursor = tempCursor;
+        canRemove = true;
+        return elementData(cursor);
+      } else if (forgetMeNot != null) {
+        cursor = size();
+        lastFromForgetMeNot = forgetMeNot.poll();
+        if (lastFromForgetMeNot != null) {
+          canRemove = true;
+          return lastFromForgetMeNot;
+        }
+      }
+      throw new NoSuchElementException(
+          "iterator moved past last element in queue.");
+    }
+
+    @Override public void remove() {
+      checkState(canRemove,
+          "no calls to remove() since the last call to next()");
+      checkModCount();
+      canRemove = false;
+      expectedModCount++;
+      if (cursor < size()) {
+        MoveDesc<E> moved = removeAt(cursor);
+        if (moved != null) {
+          if (forgetMeNot == null) {
+            forgetMeNot = new LinkedList<E>();
+            skipMe = new ArrayList<E>(3);
+          }
+          forgetMeNot.add(moved.toTrickle);
+          skipMe.add(moved.replaced);
+        }
+        cursor--;
+      } else { // we must have set lastFromForgetMeNot in next()
+        checkState(removeExact(lastFromForgetMeNot));
+        lastFromForgetMeNot = null;
+      }
+    }
+
+    // Finds only this exact instance, not others that are equals()
+    private boolean containsExact(Iterable<E> elements, E target) {
+      for (E element : elements) {
+        if (element == target) {
+          return true;
+        }
+      }
+      return false;
+    }
+
+    // Removes only this exact instance, not others that are equals()
+    boolean removeExact(Object target) {
+      for (int i = 0; i < size; i++) {
+        if (queue[i] == target) {
+          removeAt(i);
+          return true;
+        }
+      }
+      return false;
+    }
+
+    void checkModCount() {
+      if (modCount != expectedModCount) {
+        throw new ConcurrentModificationException();
+      }
+    }
+
+    /**
+     * Returns the index of the first element after {@code c} that is not in
+     * {@code skipMe} and returns {@code size()} if there is no such element.
+     */
+    private int nextNotInSkipMe(int c) {
+      if (skipMe != null) {
+        while (c < size() && containsExact(skipMe, elementData(c))) {
+          c++;
+        }
+      }
+      return c;
+    }
+  }
+
+  /**
+   * Returns an iterator over the elements contained in this collection,
+   * <i>in no particular order</i>.
+   *
+   * <p>The iterator is <i>fail-fast</i>: If the MinMaxPriorityQueue is modified
+   * at any time after the iterator is created, in any way except through the
+   * iterator's own remove method, the iterator will generally throw a
+   * {@link ConcurrentModificationException}. Thus, in the face of concurrent
+   * modification, the iterator fails quickly and cleanly, rather than risking
+   * arbitrary, non-deterministic behavior at an undetermined time in the
+   * future.
+   *
+   * <p>Note that the fail-fast behavior of an iterator cannot be guaranteed
+   * as it is, generally speaking, impossible to make any hard guarantees in the
+   * presence of unsynchronized concurrent modification.  Fail-fast iterators
+   * throw {@code ConcurrentModificationException} on a best-effort basis.
+   * Therefore, it would be wrong to write a program that depended on this
+   * exception for its correctness: <i>the fail-fast behavior of iterators
+   * should be used only to detect bugs.</i>
+   *
+   * @return an iterator over the elements contained in this collection
+   */
+  @Override public Iterator<E> iterator() {
+    return new QueueIterator();
+  }
+
+  @Override public void clear() {
+    for (int i = 0; i < size; i++) {
+      queue[i] = null;
+    }
+    size = 0;
+  }
+
+  @Override public Object[] toArray() {
+    Object[] copyTo = new Object[size];
+    System.arraycopy(queue, 0, copyTo, 0, size);
+    return copyTo;
+  }
+
+  /**
+   * Returns the comparator used to order the elements in this queue. Obeys the
+   * general contract of {@link PriorityQueue#comparator}, but returns {@link
+   * Ordering#natural} instead of {@code null} to indicate natural ordering.
+   */
+  public Comparator<? super E> comparator() {
+    return minHeap.ordering;
+  }
+
+  @VisibleForTesting int capacity() {
+    return queue.length;
+  }
+
+  // Size/capacity-related methods
+
+  private static final int DEFAULT_CAPACITY = 11;
+
+  @VisibleForTesting static int initialQueueSize(int configuredExpectedSize,
+      int maximumSize, Iterable<?> initialContents) {
+    // Start with what they said, if they said it, otherwise DEFAULT_CAPACITY
+    int result = (configuredExpectedSize == Builder.UNSET_EXPECTED_SIZE)
+        ? DEFAULT_CAPACITY
+        : configuredExpectedSize;
+
+    // Enlarge to contain initial contents
+    if (initialContents instanceof Collection) {
+      int initialSize = ((Collection<?>) initialContents).size();
+      result = Math.max(result, initialSize);
+    }
+
+    // Now cap it at maxSize + 1
+    return capAtMaximumSize(result, maximumSize);
+  }
+
+  private void growIfNeeded() {
+    if (size > queue.length) {
+      int newCapacity = calculateNewCapacity();
+      Object[] newQueue = new Object[newCapacity];
+      System.arraycopy(queue, 0, newQueue, 0, queue.length);
+      queue = newQueue;
+    }
+  }
+
+  /** Returns ~2x the old capacity if small; ~1.5x otherwise. */
+  private int calculateNewCapacity() {
+    int oldCapacity = queue.length;
+    int newCapacity = (oldCapacity < 64)
+        ? (oldCapacity + 1) * 2
+        : IntMath.checkedMultiply(oldCapacity / 2, 3);
+    return capAtMaximumSize(newCapacity, maximumSize);
+  }
+
+  /** There's no reason for the queueSize to ever be more than maxSize + 1 */
+  private static int capAtMaximumSize(int queueSize, int maximumSize) {
+    return Math.min(queueSize - 1, maximumSize) + 1; // don't overflow
+  }
+}
diff --git a/guava/src/com/google/common/collect/Multimap.java b/guava/src/com/google/common/collect/Multimap.java
new file mode 100644
index 0000000..900f820
--- /dev/null
+++ b/guava/src/com/google/common/collect/Multimap.java
@@ -0,0 +1,267 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Collection;
+import java.util.Map;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * A collection similar to a {@code Map}, but which may associate multiple
+ * values with a single key. If you call {@link #put} twice, with the same key
+ * but different values, the multimap contains mappings from the key to both
+ * values.
+ *
+ * <p>The methods {@link #get}, {@link #keySet}, {@link #keys}, {@link #values},
+ * {@link #entries}, and {@link #asMap} return collections that are views of the
+ * multimap. If the multimap is modifiable, updating it can change the contents
+ * of those collections, and updating the collections will change the multimap.
+ * In contrast, {@link #replaceValues} and {@link #removeAll} return collections
+ * that are independent of subsequent multimap changes.
+ *
+ * <p>Depending on the implementation, a multimap may or may not allow duplicate
+ * key-value pairs. In other words, the multimap contents after adding the same
+ * key and value twice varies between implementations. In multimaps allowing
+ * duplicates, the multimap will contain two mappings, and {@code get} will
+ * return a collection that includes the value twice. In multimaps not
+ * supporting duplicates, the multimap will contain a single mapping from the
+ * key to the value, and {@code get} will return a collection that includes the
+ * value once.
+ *
+ * <p>All methods that alter the multimap are optional, and the views returned
+ * by the multimap may or may not be modifiable. When modification isn't
+ * supported, those methods will throw an {@link UnsupportedOperationException}.
+ *
+ * @author Jared Levy
+ * @param <K> the type of keys maintained by this multimap
+ * @param <V> the type of mapped values
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible
+public interface Multimap<K, V> {
+  // Query Operations
+
+  /** Returns the number of key-value pairs in the multimap. */
+  int size();
+
+  /** Returns {@code true} if the multimap contains no key-value pairs. */
+  boolean isEmpty();
+
+  /**
+   * Returns {@code true} if the multimap contains any values for the specified
+   * key.
+   *
+   * @param key key to search for in multimap
+   */
+  boolean containsKey(@Nullable Object key);
+
+  /**
+   * Returns {@code true} if the multimap contains the specified value for any
+   * key.
+   *
+   * @param value value to search for in multimap
+   */
+  boolean containsValue(@Nullable Object value);
+
+  /**
+   * Returns {@code true} if the multimap contains the specified key-value pair.
+   *
+   * @param key key to search for in multimap
+   * @param value value to search for in multimap
+   */
+  boolean containsEntry(@Nullable Object key, @Nullable Object value);
+
+  // Modification Operations
+
+  /**
+   * Stores a key-value pair in the multimap.
+   *
+   * <p>Some multimap implementations allow duplicate key-value pairs, in which
+   * case {@code put} always adds a new key-value pair and increases the
+   * multimap size by 1. Other implementations prohibit duplicates, and storing
+   * a key-value pair that's already in the multimap has no effect.
+   *
+   * @param key key to store in the multimap
+   * @param value value to store in the multimap
+   * @return {@code true} if the method increased the size of the multimap, or
+   *     {@code false} if the multimap already contained the key-value pair and
+   *     doesn't allow duplicates
+   */
+  boolean put(@Nullable K key, @Nullable V value);
+
+  /**
+   * Removes a key-value pair from the multimap.
+   *
+   * @param key key of entry to remove from the multimap
+   * @param value value of entry to remove the multimap
+   * @return {@code true} if the multimap changed
+   */
+  boolean remove(@Nullable Object key, @Nullable Object value);
+
+  // Bulk Operations
+
+  /**
+   * Stores a collection of values with the same key.
+   *
+   * @param key key to store in the multimap
+   * @param values values to store in the multimap
+   * @return {@code true} if the multimap changed
+   */
+  boolean putAll(@Nullable K key, Iterable<? extends V> values);
+
+  /**
+   * Copies all of another multimap's key-value pairs into this multimap. The
+   * order in which the mappings are added is determined by
+   * {@code multimap.entries()}.
+   *
+   * @param multimap mappings to store in this multimap
+   * @return {@code true} if the multimap changed
+   */
+  boolean putAll(Multimap<? extends K, ? extends V> multimap);
+
+  /**
+   * Stores a collection of values with the same key, replacing any existing
+   * values for that key.
+   *
+   * @param key key to store in the multimap
+   * @param values values to store in the multimap
+   * @return the collection of replaced values, or an empty collection if no
+   *     values were previously associated with the key. The collection
+   *     <i>may</i> be modifiable, but updating it will have no effect on the
+   *     multimap.
+   */
+  Collection<V> replaceValues(@Nullable K key, Iterable<? extends V> values);
+
+  /**
+   * Removes all values associated with a given key.
+   *
+   * @param key key of entries to remove from the multimap
+   * @return the collection of removed values, or an empty collection if no
+   *     values were associated with the provided key. The collection
+   *     <i>may</i> be modifiable, but updating it will have no effect on the
+   *     multimap.
+   */
+  Collection<V> removeAll(@Nullable Object key);
+
+  /**
+   * Removes all key-value pairs from the multimap.
+   */
+  void clear();
+
+  // Views
+
+  /**
+   * Returns a collection view of all values associated with a key. If no
+   * mappings in the multimap have the provided key, an empty collection is
+   * returned.
+   *
+   * <p>Changes to the returned collection will update the underlying multimap,
+   * and vice versa.
+   *
+   * @param key key to search for in multimap
+   * @return the collection of values that the key maps to
+   */
+  Collection<V> get(@Nullable K key);
+
+  /**
+   * Returns the set of all keys, each appearing once in the returned set.
+   * Changes to the returned set will update the underlying multimap, and vice
+   * versa.
+   *
+   * @return the collection of distinct keys
+   */
+  Set<K> keySet();
+
+  /**
+   * Returns a collection, which may contain duplicates, of all keys. The number
+   * of times of key appears in the returned multiset equals the number of
+   * mappings the key has in the multimap. Changes to the returned multiset will
+   * update the underlying multimap, and vice versa.
+   *
+   * @return a multiset with keys corresponding to the distinct keys of the
+   *     multimap and frequencies corresponding to the number of values that
+   *     each key maps to
+   */
+  Multiset<K> keys();
+
+  /**
+   * Returns a collection of all values in the multimap. Changes to the returned
+   * collection will update the underlying multimap, and vice versa.
+   *
+   * @return collection of values, which may include the same value multiple
+   *     times if it occurs in multiple mappings
+   */
+  Collection<V> values();
+
+  /**
+   * Returns a collection of all key-value pairs. Changes to the returned
+   * collection will update the underlying multimap, and vice versa. The entries
+   * collection does not support the {@code add} or {@code addAll} operations.
+   *
+   * @return collection of map entries consisting of key-value pairs
+   */
+  Collection<Map.Entry<K, V>> entries();
+
+  /**
+   * Returns a map view that associates each key with the corresponding values
+   * in the multimap. Changes to the returned map, such as element removal, will
+   * update the underlying multimap. The map does not support {@code setValue()}
+   * on its entries, {@code put}, or {@code putAll}.
+   *
+   * <p>When passed a key that is present in the map, {@code
+   * asMap().get(Object)} has the same behavior as {@link #get}, returning a
+   * live collection. When passed a key that is not present, however, {@code
+   * asMap().get(Object)} returns {@code null} instead of an empty collection.
+   *
+   * @return a map view from a key to its collection of values
+   */
+  Map<K, Collection<V>> asMap();
+
+  // Comparison and hashing
+
+  /**
+   * Compares the specified object with this multimap for equality. Two
+   * multimaps are equal when their map views, as returned by {@link #asMap},
+   * are also equal.
+   *
+   * <p>In general, two multimaps with identical key-value mappings may or may
+   * not be equal, depending on the implementation. For example, two
+   * {@link SetMultimap} instances with the same key-value mappings are equal,
+   * but equality of two {@link ListMultimap} instances depends on the ordering
+   * of the values for each key.
+   *
+   * <p>A non-empty {@link SetMultimap} cannot be equal to a non-empty
+   * {@link ListMultimap}, since their {@link #asMap} views contain unequal
+   * collections as values. However, any two empty multimaps are equal, because
+   * they both have empty {@link #asMap} views.
+   */
+  @Override
+  boolean equals(@Nullable Object obj);
+
+  /**
+   * Returns the hash code for this multimap.
+   *
+   * <p>The hash code of a multimap is defined as the hash code of the map view,
+   * as returned by {@link Multimap#asMap}.
+   */
+  @Override
+  int hashCode();
+}
diff --git a/guava/src/com/google/common/collect/Multimaps.java b/guava/src/com/google/common/collect/Multimaps.java
new file mode 100644
index 0000000..e2f593e
--- /dev/null
+++ b/guava/src/com/google/common/collect/Multimaps.java
@@ -0,0 +1,2755 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkState;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.base.Function;
+import com.google.common.base.Joiner;
+import com.google.common.base.Joiner.MapJoiner;
+import com.google.common.base.Objects;
+import com.google.common.base.Predicate;
+import com.google.common.base.Predicates;
+import com.google.common.base.Supplier;
+import com.google.common.collect.Collections2.TransformedCollection;
+import com.google.common.collect.Maps.EntryTransformer;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+import java.util.AbstractCollection;
+import java.util.AbstractSet;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.NoSuchElementException;
+import java.util.Set;
+import java.util.SortedSet;
+
+import javax.annotation.Nullable;
+
+/**
+ * Provides static methods acting on or generating a {@code Multimap}.
+ *
+ * @author Jared Levy
+ * @author Robert Konigsberg
+ * @author Mike Bostock
+ * @author Louis Wasserman
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible(emulated = true)
+public final class Multimaps {
+  private Multimaps() {}
+
+  /**
+   * Creates a new {@code Multimap} that uses the provided map and factory. It
+   * can generate a multimap based on arbitrary {@link Map} and
+   * {@link Collection} classes.
+   *
+   * <p>The {@code factory}-generated and {@code map} classes determine the
+   * multimap iteration order. They also specify the behavior of the
+   * {@code equals}, {@code hashCode}, and {@code toString} methods for the
+   * multimap and its returned views. However, the multimap's {@code get}
+   * method returns instances of a different class than {@code factory.get()}
+   * does.
+   *
+   * <p>The multimap is serializable if {@code map}, {@code factory}, the
+   * collections generated by {@code factory}, and the multimap contents are all
+   * serializable.
+   *
+   * <p>The multimap is not threadsafe when any concurrent operations update the
+   * multimap, even if {@code map} and the instances generated by
+   * {@code factory} are. Concurrent read operations will work correctly. To
+   * allow concurrent update operations, wrap the multimap with a call to
+   * {@link #synchronizedMultimap}.
+   *
+   * <p>Call this method only when the simpler methods
+   * {@link ArrayListMultimap#create()}, {@link HashMultimap#create()},
+   * {@link LinkedHashMultimap#create()}, {@link LinkedListMultimap#create()},
+   * {@link TreeMultimap#create()}, and
+   * {@link TreeMultimap#create(Comparator, Comparator)} won't suffice.
+   *
+   * <p>Note: the multimap assumes complete ownership over of {@code map} and
+   * the collections returned by {@code factory}. Those objects should not be
+   * manually updated and they should not use soft, weak, or phantom references.
+   *
+   * @param map place to store the mapping from each key to its corresponding
+   *     values
+   * @param factory supplier of new, empty collections that will each hold all
+   *     values for a given key
+   * @throws IllegalArgumentException if {@code map} is not empty
+   */
+  public static <K, V> Multimap<K, V> newMultimap(Map<K, Collection<V>> map,
+      final Supplier<? extends Collection<V>> factory) {
+    return new CustomMultimap<K, V>(map, factory);
+  }
+
+  private static class CustomMultimap<K, V> extends AbstractMultimap<K, V> {
+    transient Supplier<? extends Collection<V>> factory;
+
+    CustomMultimap(Map<K, Collection<V>> map,
+        Supplier<? extends Collection<V>> factory) {
+      super(map);
+      this.factory = checkNotNull(factory);
+    }
+
+    @Override protected Collection<V> createCollection() {
+      return factory.get();
+    }
+
+    // can't use Serialization writeMultimap and populateMultimap methods since
+    // there's no way to generate the empty backing map.
+
+    /** @serialData the factory and the backing map */
+    @GwtIncompatible("java.io.ObjectOutputStream")
+    private void writeObject(ObjectOutputStream stream) throws IOException {
+      stream.defaultWriteObject();
+      stream.writeObject(factory);
+      stream.writeObject(backingMap());
+    }
+
+    @GwtIncompatible("java.io.ObjectInputStream")
+    @SuppressWarnings("unchecked") // reading data stored by writeObject
+    private void readObject(ObjectInputStream stream)
+        throws IOException, ClassNotFoundException {
+      stream.defaultReadObject();
+      factory = (Supplier<? extends Collection<V>>) stream.readObject();
+      Map<K, Collection<V>> map = (Map<K, Collection<V>>) stream.readObject();
+      setMap(map);
+    }
+
+    @GwtIncompatible("java serialization not supported")
+    private static final long serialVersionUID = 0;
+  }
+
+  /**
+   * Creates a new {@code ListMultimap} that uses the provided map and factory.
+   * It can generate a multimap based on arbitrary {@link Map} and {@link List}
+   * classes.
+   *
+   * <p>The {@code factory}-generated and {@code map} classes determine the
+   * multimap iteration order. They also specify the behavior of the
+   * {@code equals}, {@code hashCode}, and {@code toString} methods for the
+   * multimap and its returned views. The multimap's {@code get}, {@code
+   * removeAll}, and {@code replaceValues} methods return {@code RandomAccess}
+   * lists if the factory does. However, the multimap's {@code get} method
+   * returns instances of a different class than does {@code factory.get()}.
+   *
+   * <p>The multimap is serializable if {@code map}, {@code factory}, the
+   * lists generated by {@code factory}, and the multimap contents are all
+   * serializable.
+   *
+   * <p>The multimap is not threadsafe when any concurrent operations update the
+   * multimap, even if {@code map} and the instances generated by
+   * {@code factory} are. Concurrent read operations will work correctly. To
+   * allow concurrent update operations, wrap the multimap with a call to
+   * {@link #synchronizedListMultimap}.
+   *
+   * <p>Call this method only when the simpler methods
+   * {@link ArrayListMultimap#create()} and {@link LinkedListMultimap#create()}
+   * won't suffice.
+   *
+   * <p>Note: the multimap assumes complete ownership over of {@code map} and
+   * the lists returned by {@code factory}. Those objects should not be manually
+   * updated, they should be empty when provided, and they should not use soft,
+   * weak, or phantom references.
+   *
+   * @param map place to store the mapping from each key to its corresponding
+   *     values
+   * @param factory supplier of new, empty lists that will each hold all values
+   *     for a given key
+   * @throws IllegalArgumentException if {@code map} is not empty
+   */
+  public static <K, V> ListMultimap<K, V> newListMultimap(
+      Map<K, Collection<V>> map, final Supplier<? extends List<V>> factory) {
+    return new CustomListMultimap<K, V>(map, factory);
+  }
+
+  private static class CustomListMultimap<K, V>
+      extends AbstractListMultimap<K, V> {
+    transient Supplier<? extends List<V>> factory;
+
+    CustomListMultimap(Map<K, Collection<V>> map,
+        Supplier<? extends List<V>> factory) {
+      super(map);
+      this.factory = checkNotNull(factory);
+    }
+
+    @Override protected List<V> createCollection() {
+      return factory.get();
+    }
+
+    /** @serialData the factory and the backing map */
+    @GwtIncompatible("java.io.ObjectOutputStream")
+    private void writeObject(ObjectOutputStream stream) throws IOException {
+      stream.defaultWriteObject();
+      stream.writeObject(factory);
+      stream.writeObject(backingMap());
+    }
+
+    @GwtIncompatible("java.io.ObjectInputStream")
+    @SuppressWarnings("unchecked") // reading data stored by writeObject
+    private void readObject(ObjectInputStream stream)
+        throws IOException, ClassNotFoundException {
+      stream.defaultReadObject();
+      factory = (Supplier<? extends List<V>>) stream.readObject();
+      Map<K, Collection<V>> map = (Map<K, Collection<V>>) stream.readObject();
+      setMap(map);
+    }
+
+    @GwtIncompatible("java serialization not supported")
+    private static final long serialVersionUID = 0;
+  }
+
+  /**
+   * Creates a new {@code SetMultimap} that uses the provided map and factory.
+   * It can generate a multimap based on arbitrary {@link Map} and {@link Set}
+   * classes.
+   *
+   * <p>The {@code factory}-generated and {@code map} classes determine the
+   * multimap iteration order. They also specify the behavior of the
+   * {@code equals}, {@code hashCode}, and {@code toString} methods for the
+   * multimap and its returned views. However, the multimap's {@code get}
+   * method returns instances of a different class than {@code factory.get()}
+   * does.
+   *
+   * <p>The multimap is serializable if {@code map}, {@code factory}, the
+   * sets generated by {@code factory}, and the multimap contents are all
+   * serializable.
+   *
+   * <p>The multimap is not threadsafe when any concurrent operations update the
+   * multimap, even if {@code map} and the instances generated by
+   * {@code factory} are. Concurrent read operations will work correctly. To
+   * allow concurrent update operations, wrap the multimap with a call to
+   * {@link #synchronizedSetMultimap}.
+   *
+   * <p>Call this method only when the simpler methods
+   * {@link HashMultimap#create()}, {@link LinkedHashMultimap#create()},
+   * {@link TreeMultimap#create()}, and
+   * {@link TreeMultimap#create(Comparator, Comparator)} won't suffice.
+   *
+   * <p>Note: the multimap assumes complete ownership over of {@code map} and
+   * the sets returned by {@code factory}. Those objects should not be manually
+   * updated and they should not use soft, weak, or phantom references.
+   *
+   * @param map place to store the mapping from each key to its corresponding
+   *     values
+   * @param factory supplier of new, empty sets that will each hold all values
+   *     for a given key
+   * @throws IllegalArgumentException if {@code map} is not empty
+   */
+  public static <K, V> SetMultimap<K, V> newSetMultimap(
+      Map<K, Collection<V>> map, final Supplier<? extends Set<V>> factory) {
+    return new CustomSetMultimap<K, V>(map, factory);
+  }
+
+  private static class CustomSetMultimap<K, V>
+      extends AbstractSetMultimap<K, V> {
+    transient Supplier<? extends Set<V>> factory;
+
+    CustomSetMultimap(Map<K, Collection<V>> map,
+        Supplier<? extends Set<V>> factory) {
+      super(map);
+      this.factory = checkNotNull(factory);
+    }
+
+    @Override protected Set<V> createCollection() {
+      return factory.get();
+    }
+
+    /** @serialData the factory and the backing map */
+    @GwtIncompatible("java.io.ObjectOutputStream")
+    private void writeObject(ObjectOutputStream stream) throws IOException {
+      stream.defaultWriteObject();
+      stream.writeObject(factory);
+      stream.writeObject(backingMap());
+    }
+
+    @GwtIncompatible("java.io.ObjectInputStream")
+    @SuppressWarnings("unchecked") // reading data stored by writeObject
+    private void readObject(ObjectInputStream stream)
+        throws IOException, ClassNotFoundException {
+      stream.defaultReadObject();
+      factory = (Supplier<? extends Set<V>>) stream.readObject();
+      Map<K, Collection<V>> map = (Map<K, Collection<V>>) stream.readObject();
+      setMap(map);
+    }
+
+    @GwtIncompatible("not needed in emulated source")
+    private static final long serialVersionUID = 0;
+  }
+
+  /**
+   * Creates a new {@code SortedSetMultimap} that uses the provided map and
+   * factory. It can generate a multimap based on arbitrary {@link Map} and
+   * {@link SortedSet} classes.
+   *
+   * <p>The {@code factory}-generated and {@code map} classes determine the
+   * multimap iteration order. They also specify the behavior of the
+   * {@code equals}, {@code hashCode}, and {@code toString} methods for the
+   * multimap and its returned views. However, the multimap's {@code get}
+   * method returns instances of a different class than {@code factory.get()}
+   * does.
+   *
+   * <p>The multimap is serializable if {@code map}, {@code factory}, the
+   * sets generated by {@code factory}, and the multimap contents are all
+   * serializable.
+   *
+   * <p>The multimap is not threadsafe when any concurrent operations update the
+   * multimap, even if {@code map} and the instances generated by
+   * {@code factory} are. Concurrent read operations will work correctly. To
+   * allow concurrent update operations, wrap the multimap with a call to
+   * {@link #synchronizedSortedSetMultimap}.
+   *
+   * <p>Call this method only when the simpler methods
+   * {@link TreeMultimap#create()} and
+   * {@link TreeMultimap#create(Comparator, Comparator)} won't suffice.
+   *
+   * <p>Note: the multimap assumes complete ownership over of {@code map} and
+   * the sets returned by {@code factory}. Those objects should not be manually
+   * updated and they should not use soft, weak, or phantom references.
+   *
+   * @param map place to store the mapping from each key to its corresponding
+   *     values
+   * @param factory supplier of new, empty sorted sets that will each hold
+   *     all values for a given key
+   * @throws IllegalArgumentException if {@code map} is not empty
+   */
+  public static <K, V> SortedSetMultimap<K, V> newSortedSetMultimap(
+      Map<K, Collection<V>> map,
+      final Supplier<? extends SortedSet<V>> factory) {
+    return new CustomSortedSetMultimap<K, V>(map, factory);
+  }
+
+  private static class CustomSortedSetMultimap<K, V>
+      extends AbstractSortedSetMultimap<K, V> {
+    transient Supplier<? extends SortedSet<V>> factory;
+    transient Comparator<? super V> valueComparator;
+
+    CustomSortedSetMultimap(Map<K, Collection<V>> map,
+        Supplier<? extends SortedSet<V>> factory) {
+      super(map);
+      this.factory = checkNotNull(factory);
+      valueComparator = factory.get().comparator();
+    }
+
+    @Override protected SortedSet<V> createCollection() {
+      return factory.get();
+    }
+
+    @Override public Comparator<? super V> valueComparator() {
+      return valueComparator;
+    }
+
+    /** @serialData the factory and the backing map */
+    @GwtIncompatible("java.io.ObjectOutputStream")
+    private void writeObject(ObjectOutputStream stream) throws IOException {
+      stream.defaultWriteObject();
+      stream.writeObject(factory);
+      stream.writeObject(backingMap());
+    }
+
+    @GwtIncompatible("java.io.ObjectInputStream")
+    @SuppressWarnings("unchecked") // reading data stored by writeObject
+    private void readObject(ObjectInputStream stream)
+        throws IOException, ClassNotFoundException {
+      stream.defaultReadObject();
+      factory = (Supplier<? extends SortedSet<V>>) stream.readObject();
+      valueComparator = factory.get().comparator();
+      Map<K, Collection<V>> map = (Map<K, Collection<V>>) stream.readObject();
+      setMap(map);
+    }
+
+    @GwtIncompatible("not needed in emulated source")
+    private static final long serialVersionUID = 0;
+  }
+
+  /**
+   * Copies each key-value mapping in {@code source} into {@code dest}, with
+   * its key and value reversed.
+   *
+   * <p>If {@code source} is an {@link ImmutableMultimap}, consider using
+   * {@link ImmutableMultimap#inverse} instead.
+   *
+   * @param source any multimap
+   * @param dest the multimap to copy into; usually empty
+   * @return {@code dest}
+   */
+  public static <K, V, M extends Multimap<K, V>> M invertFrom(
+      Multimap<? extends V, ? extends K> source, M dest) {
+    checkNotNull(dest);
+    for (Map.Entry<? extends V, ? extends K> entry : source.entries()) {
+      dest.put(entry.getValue(), entry.getKey());
+    }
+    return dest;
+  }
+
+  /**
+   * Returns a synchronized (thread-safe) multimap backed by the specified
+   * multimap. In order to guarantee serial access, it is critical that
+   * <b>all</b> access to the backing multimap is accomplished through the
+   * returned multimap.
+   *
+   * <p>It is imperative that the user manually synchronize on the returned
+   * multimap when accessing any of its collection views: <pre>   {@code
+   *
+   *   Multimap<K, V> m = Multimaps.synchronizedMultimap(
+   *       HashMultimap.<K, V>create());
+   *   ...
+   *   Set<K> s = m.keySet();  // Needn't be in synchronized block
+   *   ...
+   *   synchronized (m) {  // Synchronizing on m, not s!
+   *     Iterator<K> i = s.iterator(); // Must be in synchronized block
+   *     while (i.hasNext()) {
+   *       foo(i.next());
+   *     }
+   *   }}</pre>
+   *
+   * Failure to follow this advice may result in non-deterministic behavior.
+   *
+   * <p>Note that the generated multimap's {@link Multimap#removeAll} and
+   * {@link Multimap#replaceValues} methods return collections that aren't
+   * synchronized.
+   *
+   * <p>The returned multimap will be serializable if the specified multimap is
+   * serializable.
+   *
+   * @param multimap the multimap to be wrapped in a synchronized view
+   * @return a synchronized view of the specified multimap
+   */
+  public static <K, V> Multimap<K, V> synchronizedMultimap(
+      Multimap<K, V> multimap) {
+    return Synchronized.multimap(multimap, null);
+  }
+
+  /**
+   * Returns an unmodifiable view of the specified multimap. Query operations on
+   * the returned multimap "read through" to the specified multimap, and
+   * attempts to modify the returned multimap, either directly or through the
+   * multimap's views, result in an {@code UnsupportedOperationException}.
+   *
+   * <p>Note that the generated multimap's {@link Multimap#removeAll} and
+   * {@link Multimap#replaceValues} methods return collections that are
+   * modifiable.
+   *
+   * <p>The returned multimap will be serializable if the specified multimap is
+   * serializable.
+   *
+   * @param delegate the multimap for which an unmodifiable view is to be
+   *     returned
+   * @return an unmodifiable view of the specified multimap
+   */
+  public static <K, V> Multimap<K, V> unmodifiableMultimap(
+      Multimap<K, V> delegate) {
+    if (delegate instanceof UnmodifiableMultimap ||
+        delegate instanceof ImmutableMultimap) {
+      return delegate;
+    }
+    return new UnmodifiableMultimap<K, V>(delegate);
+  }
+
+  /**
+   * Simply returns its argument.
+   *
+   * @deprecated no need to use this
+   * @since 10.0
+   */
+  @Deprecated public static <K, V> Multimap<K, V> unmodifiableMultimap(
+      ImmutableMultimap<K, V> delegate) {
+    return checkNotNull(delegate);
+  }
+
+  private static class UnmodifiableMultimap<K, V>
+      extends ForwardingMultimap<K, V> implements Serializable {
+    final Multimap<K, V> delegate;
+    transient Collection<Entry<K, V>> entries;
+    transient Multiset<K> keys;
+    transient Set<K> keySet;
+    transient Collection<V> values;
+    transient Map<K, Collection<V>> map;
+
+    UnmodifiableMultimap(final Multimap<K, V> delegate) {
+      this.delegate = checkNotNull(delegate);
+    }
+
+    @Override protected Multimap<K, V> delegate() {
+      return delegate;
+    }
+
+    @Override public void clear() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override public Map<K, Collection<V>> asMap() {
+      Map<K, Collection<V>> result = map;
+      if (result == null) {
+        final Map<K, Collection<V>> unmodifiableMap
+            = Collections.unmodifiableMap(delegate.asMap());
+        map = result = new ForwardingMap<K, Collection<V>>() {
+          @Override protected Map<K, Collection<V>> delegate() {
+            return unmodifiableMap;
+          }
+
+          Set<Entry<K, Collection<V>>> entrySet;
+
+          @Override public Set<Map.Entry<K, Collection<V>>> entrySet() {
+            Set<Entry<K, Collection<V>>> result = entrySet;
+            return (result == null)
+                ? entrySet
+                    = unmodifiableAsMapEntries(unmodifiableMap.entrySet())
+                : result;
+          }
+
+          @Override public Collection<V> get(Object key) {
+            Collection<V> collection = unmodifiableMap.get(key);
+            return (collection == null)
+                ? null : unmodifiableValueCollection(collection);
+          }
+
+          Collection<Collection<V>> asMapValues;
+
+          @Override public Collection<Collection<V>> values() {
+            Collection<Collection<V>> result = asMapValues;
+            return (result == null)
+                ? asMapValues
+                    = new UnmodifiableAsMapValues<V>(unmodifiableMap.values())
+                : result;
+          }
+
+          @Override public boolean containsValue(Object o) {
+            return values().contains(o);
+          }
+        };
+      }
+      return result;
+    }
+
+    @Override public Collection<Entry<K, V>> entries() {
+      Collection<Entry<K, V>> result = entries;
+      if (result == null) {
+        entries = result = unmodifiableEntries(delegate.entries());
+      }
+      return result;
+    }
+
+    @Override public Collection<V> get(K key) {
+      return unmodifiableValueCollection(delegate.get(key));
+    }
+
+    @Override public Multiset<K> keys() {
+      Multiset<K> result = keys;
+      if (result == null) {
+        keys = result = Multisets.unmodifiableMultiset(delegate.keys());
+      }
+      return result;
+    }
+
+    @Override public Set<K> keySet() {
+      Set<K> result = keySet;
+      if (result == null) {
+        keySet = result = Collections.unmodifiableSet(delegate.keySet());
+      }
+      return result;
+    }
+
+    @Override public boolean put(K key, V value) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override public boolean putAll(K key, Iterable<? extends V> values) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public boolean putAll(Multimap<? extends K, ? extends V> multimap) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override public boolean remove(Object key, Object value) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override public Collection<V> removeAll(Object key) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override public Collection<V> replaceValues(
+        K key, Iterable<? extends V> values) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override public Collection<V> values() {
+      Collection<V> result = values;
+      if (result == null) {
+        values = result = Collections.unmodifiableCollection(delegate.values());
+      }
+      return result;
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  private static class UnmodifiableAsMapValues<V>
+      extends ForwardingCollection<Collection<V>> {
+    final Collection<Collection<V>> delegate;
+    UnmodifiableAsMapValues(Collection<Collection<V>> delegate) {
+      this.delegate = Collections.unmodifiableCollection(delegate);
+    }
+    @Override protected Collection<Collection<V>> delegate() {
+      return delegate;
+    }
+    @Override public Iterator<Collection<V>> iterator() {
+      final Iterator<Collection<V>> iterator = delegate.iterator();
+      return new Iterator<Collection<V>>() {
+        @Override
+        public boolean hasNext() {
+          return iterator.hasNext();
+        }
+        @Override
+        public Collection<V> next() {
+          return unmodifiableValueCollection(iterator.next());
+        }
+        @Override
+        public void remove() {
+          throw new UnsupportedOperationException();
+        }
+      };
+    }
+    @Override public Object[] toArray() {
+      return standardToArray();
+    }
+    @Override public <T> T[] toArray(T[] array) {
+      return standardToArray(array);
+    }
+    @Override public boolean contains(Object o) {
+      return standardContains(o);
+    }
+    @Override public boolean containsAll(Collection<?> c) {
+      return standardContainsAll(c);
+    }
+  }
+
+  private static class UnmodifiableListMultimap<K, V>
+      extends UnmodifiableMultimap<K, V> implements ListMultimap<K, V> {
+    UnmodifiableListMultimap(ListMultimap<K, V> delegate) {
+      super(delegate);
+    }
+    @Override public ListMultimap<K, V> delegate() {
+      return (ListMultimap<K, V>) super.delegate();
+    }
+    @Override public List<V> get(K key) {
+      return Collections.unmodifiableList(delegate().get(key));
+    }
+    @Override public List<V> removeAll(Object key) {
+      throw new UnsupportedOperationException();
+    }
+    @Override public List<V> replaceValues(
+        K key, Iterable<? extends V> values) {
+      throw new UnsupportedOperationException();
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  private static class UnmodifiableSetMultimap<K, V>
+      extends UnmodifiableMultimap<K, V> implements SetMultimap<K, V> {
+    UnmodifiableSetMultimap(SetMultimap<K, V> delegate) {
+      super(delegate);
+    }
+    @Override public SetMultimap<K, V> delegate() {
+      return (SetMultimap<K, V>) super.delegate();
+    }
+    @Override public Set<V> get(K key) {
+      /*
+       * Note that this doesn't return a SortedSet when delegate is a
+       * SortedSetMultiset, unlike (SortedSet<V>) super.get().
+       */
+      return Collections.unmodifiableSet(delegate().get(key));
+    }
+    @Override public Set<Map.Entry<K, V>> entries() {
+      return Maps.unmodifiableEntrySet(delegate().entries());
+    }
+    @Override public Set<V> removeAll(Object key) {
+      throw new UnsupportedOperationException();
+    }
+    @Override public Set<V> replaceValues(
+        K key, Iterable<? extends V> values) {
+      throw new UnsupportedOperationException();
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  private static class UnmodifiableSortedSetMultimap<K, V>
+      extends UnmodifiableSetMultimap<K, V> implements SortedSetMultimap<K, V> {
+    UnmodifiableSortedSetMultimap(SortedSetMultimap<K, V> delegate) {
+      super(delegate);
+    }
+    @Override public SortedSetMultimap<K, V> delegate() {
+      return (SortedSetMultimap<K, V>) super.delegate();
+    }
+    @Override public SortedSet<V> get(K key) {
+      return Collections.unmodifiableSortedSet(delegate().get(key));
+    }
+    @Override public SortedSet<V> removeAll(Object key) {
+      throw new UnsupportedOperationException();
+    }
+    @Override public SortedSet<V> replaceValues(
+        K key, Iterable<? extends V> values) {
+      throw new UnsupportedOperationException();
+    }
+    @Override
+    public Comparator<? super V> valueComparator() {
+      return delegate().valueComparator();
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  /**
+   * Returns a synchronized (thread-safe) {@code SetMultimap} backed by the
+   * specified multimap.
+   *
+   * <p>You must follow the warnings described in {@link #synchronizedMultimap}.
+   *
+   * <p>The returned multimap will be serializable if the specified multimap is
+   * serializable.
+   *
+   * @param multimap the multimap to be wrapped
+   * @return a synchronized view of the specified multimap
+   */
+  public static <K, V> SetMultimap<K, V> synchronizedSetMultimap(
+      SetMultimap<K, V> multimap) {
+    return Synchronized.setMultimap(multimap, null);
+  }
+
+  /**
+   * Returns an unmodifiable view of the specified {@code SetMultimap}. Query
+   * operations on the returned multimap "read through" to the specified
+   * multimap, and attempts to modify the returned multimap, either directly or
+   * through the multimap's views, result in an
+   * {@code UnsupportedOperationException}.
+   *
+   * <p>Note that the generated multimap's {@link Multimap#removeAll} and
+   * {@link Multimap#replaceValues} methods return collections that are
+   * modifiable.
+   *
+   * <p>The returned multimap will be serializable if the specified multimap is
+   * serializable.
+   *
+   * @param delegate the multimap for which an unmodifiable view is to be
+   *     returned
+   * @return an unmodifiable view of the specified multimap
+   */
+  public static <K, V> SetMultimap<K, V> unmodifiableSetMultimap(
+      SetMultimap<K, V> delegate) {
+    if (delegate instanceof UnmodifiableSetMultimap ||
+        delegate instanceof ImmutableSetMultimap) {
+      return delegate;
+    }
+    return new UnmodifiableSetMultimap<K, V>(delegate);
+  }
+
+  /**
+   * Simply returns its argument.
+   *
+   * @deprecated no need to use this
+   * @since 10.0
+   */
+  @Deprecated public static <K, V> SetMultimap<K, V> unmodifiableSetMultimap(
+      ImmutableSetMultimap<K, V> delegate) {
+    return checkNotNull(delegate);
+  }
+
+  /**
+   * Returns a synchronized (thread-safe) {@code SortedSetMultimap} backed by
+   * the specified multimap.
+   *
+   * <p>You must follow the warnings described in {@link #synchronizedMultimap}.
+   *
+   * <p>The returned multimap will be serializable if the specified multimap is
+   * serializable.
+   *
+   * @param multimap the multimap to be wrapped
+   * @return a synchronized view of the specified multimap
+   */
+  public static <K, V> SortedSetMultimap<K, V>
+      synchronizedSortedSetMultimap(SortedSetMultimap<K, V> multimap) {
+    return Synchronized.sortedSetMultimap(multimap, null);
+  }
+
+  /**
+   * Returns an unmodifiable view of the specified {@code SortedSetMultimap}.
+   * Query operations on the returned multimap "read through" to the specified
+   * multimap, and attempts to modify the returned multimap, either directly or
+   * through the multimap's views, result in an
+   * {@code UnsupportedOperationException}.
+   *
+   * <p>Note that the generated multimap's {@link Multimap#removeAll} and
+   * {@link Multimap#replaceValues} methods return collections that are
+   * modifiable.
+   *
+   * <p>The returned multimap will be serializable if the specified multimap is
+   * serializable.
+   *
+   * @param delegate the multimap for which an unmodifiable view is to be
+   *     returned
+   * @return an unmodifiable view of the specified multimap
+   */
+  public static <K, V> SortedSetMultimap<K, V> unmodifiableSortedSetMultimap(
+      SortedSetMultimap<K, V> delegate) {
+    if (delegate instanceof UnmodifiableSortedSetMultimap) {
+      return delegate;
+    }
+    return new UnmodifiableSortedSetMultimap<K, V>(delegate);
+  }
+
+  /**
+   * Returns a synchronized (thread-safe) {@code ListMultimap} backed by the
+   * specified multimap.
+   *
+   * <p>You must follow the warnings described in {@link #synchronizedMultimap}.
+   *
+   * @param multimap the multimap to be wrapped
+   * @return a synchronized view of the specified multimap
+   */
+  public static <K, V> ListMultimap<K, V> synchronizedListMultimap(
+      ListMultimap<K, V> multimap) {
+    return Synchronized.listMultimap(multimap, null);
+  }
+
+  /**
+   * Returns an unmodifiable view of the specified {@code ListMultimap}. Query
+   * operations on the returned multimap "read through" to the specified
+   * multimap, and attempts to modify the returned multimap, either directly or
+   * through the multimap's views, result in an
+   * {@code UnsupportedOperationException}.
+   *
+   * <p>Note that the generated multimap's {@link Multimap#removeAll} and
+   * {@link Multimap#replaceValues} methods return collections that are
+   * modifiable.
+   *
+   * <p>The returned multimap will be serializable if the specified multimap is
+   * serializable.
+   *
+   * @param delegate the multimap for which an unmodifiable view is to be
+   *     returned
+   * @return an unmodifiable view of the specified multimap
+   */
+  public static <K, V> ListMultimap<K, V> unmodifiableListMultimap(
+      ListMultimap<K, V> delegate) {
+    if (delegate instanceof UnmodifiableListMultimap ||
+        delegate instanceof ImmutableListMultimap) {
+      return delegate;
+    }
+    return new UnmodifiableListMultimap<K, V>(delegate);
+  }
+
+  /**
+   * Simply returns its argument.
+   *
+   * @deprecated no need to use this
+   * @since 10.0
+   */
+  @Deprecated public static <K, V> ListMultimap<K, V> unmodifiableListMultimap(
+      ImmutableListMultimap<K, V> delegate) {
+    return checkNotNull(delegate);
+  }
+
+  /**
+   * Returns an unmodifiable view of the specified collection, preserving the
+   * interface for instances of {@code SortedSet}, {@code Set}, {@code List} and
+   * {@code Collection}, in that order of preference.
+   *
+   * @param collection the collection for which to return an unmodifiable view
+   * @return an unmodifiable view of the collection
+   */
+  private static <V> Collection<V> unmodifiableValueCollection(
+      Collection<V> collection) {
+    if (collection instanceof SortedSet) {
+      return Collections.unmodifiableSortedSet((SortedSet<V>) collection);
+    } else if (collection instanceof Set) {
+      return Collections.unmodifiableSet((Set<V>) collection);
+    } else if (collection instanceof List) {
+      return Collections.unmodifiableList((List<V>) collection);
+    }
+    return Collections.unmodifiableCollection(collection);
+  }
+
+  /**
+   * Returns an unmodifiable view of the specified multimap {@code asMap} entry.
+   * The {@link Entry#setValue} operation throws an {@link
+   * UnsupportedOperationException}, and the collection returned by {@code
+   * getValue} is also an unmodifiable (type-preserving) view. This also has the
+   * side-effect of redefining equals to comply with the Map.Entry contract, and
+   * to avoid a possible nefarious implementation of equals.
+   *
+   * @param entry the entry for which to return an unmodifiable view
+   * @return an unmodifiable view of the entry
+   */
+  private static <K, V> Map.Entry<K, Collection<V>> unmodifiableAsMapEntry(
+      final Map.Entry<K, Collection<V>> entry) {
+    checkNotNull(entry);
+    return new AbstractMapEntry<K, Collection<V>>() {
+      @Override public K getKey() {
+        return entry.getKey();
+      }
+
+      @Override public Collection<V> getValue() {
+        return unmodifiableValueCollection(entry.getValue());
+      }
+    };
+  }
+
+  /**
+   * Returns an unmodifiable view of the specified collection of entries. The
+   * {@link Entry#setValue} operation throws an {@link
+   * UnsupportedOperationException}. If the specified collection is a {@code
+   * Set}, the returned collection is also a {@code Set}.
+   *
+   * @param entries the entries for which to return an unmodifiable view
+   * @return an unmodifiable view of the entries
+   */
+  private static <K, V> Collection<Entry<K, V>> unmodifiableEntries(
+      Collection<Entry<K, V>> entries) {
+    if (entries instanceof Set) {
+      return Maps.unmodifiableEntrySet((Set<Entry<K, V>>) entries);
+    }
+    return new Maps.UnmodifiableEntries<K, V>(
+        Collections.unmodifiableCollection(entries));
+  }
+
+  /**
+   * Returns an unmodifiable view of the specified set of {@code asMap} entries.
+   * The {@link Entry#setValue} operation throws an {@link
+   * UnsupportedOperationException}, as do any operations that attempt to modify
+   * the returned collection.
+   *
+   * @param asMapEntries the {@code asMap} entries for which to return an
+   *     unmodifiable view
+   * @return an unmodifiable view of the collection entries
+   */
+  private static <K, V> Set<Entry<K, Collection<V>>> unmodifiableAsMapEntries(
+      Set<Entry<K, Collection<V>>> asMapEntries) {
+    return new UnmodifiableAsMapEntries<K, V>(
+        Collections.unmodifiableSet(asMapEntries));
+  }
+
+  /** @see Multimaps#unmodifiableAsMapEntries */
+  static class UnmodifiableAsMapEntries<K, V>
+      extends ForwardingSet<Entry<K, Collection<V>>> {
+    private final Set<Entry<K, Collection<V>>> delegate;
+    UnmodifiableAsMapEntries(Set<Entry<K, Collection<V>>> delegate) {
+      this.delegate = delegate;
+    }
+
+    @Override protected Set<Entry<K, Collection<V>>> delegate() {
+      return delegate;
+    }
+
+    @Override public Iterator<Entry<K, Collection<V>>> iterator() {
+      final Iterator<Entry<K, Collection<V>>> iterator = delegate.iterator();
+      return new ForwardingIterator<Entry<K, Collection<V>>>() {
+        @Override protected Iterator<Entry<K, Collection<V>>> delegate() {
+          return iterator;
+        }
+        @Override public Entry<K, Collection<V>> next() {
+          return unmodifiableAsMapEntry(iterator.next());
+        }
+      };
+    }
+
+    @Override public Object[] toArray() {
+      return standardToArray();
+    }
+
+    @Override public <T> T[] toArray(T[] array) {
+      return standardToArray(array);
+    }
+
+    @Override public boolean contains(Object o) {
+      return Maps.containsEntryImpl(delegate(), o);
+    }
+
+    @Override public boolean containsAll(Collection<?> c) {
+      return standardContainsAll(c);
+    }
+
+    @Override public boolean equals(@Nullable Object object) {
+      return standardEquals(object);
+    }
+  }
+
+  /**
+   * Returns a multimap view of the specified map. The multimap is backed by the
+   * map, so changes to the map are reflected in the multimap, and vice versa.
+   * If the map is modified while an iteration over one of the multimap's
+   * collection views is in progress (except through the iterator's own {@code
+   * remove} operation, or through the {@code setValue} operation on a map entry
+   * returned by the iterator), the results of the iteration are undefined.
+   *
+   * <p>The multimap supports mapping removal, which removes the corresponding
+   * mapping from the map. It does not support any operations which might add
+   * mappings, such as {@code put}, {@code putAll} or {@code replaceValues}.
+   *
+   * <p>The returned multimap will be serializable if the specified map is
+   * serializable.
+   *
+   * @param map the backing map for the returned multimap view
+   */
+  public static <K, V> SetMultimap<K, V> forMap(Map<K, V> map) {
+    return new MapMultimap<K, V>(map);
+  }
+
+  /** @see Multimaps#forMap */
+  private static class MapMultimap<K, V>
+      implements SetMultimap<K, V>, Serializable {
+    final Map<K, V> map;
+    transient Map<K, Collection<V>> asMap;
+
+    MapMultimap(Map<K, V> map) {
+      this.map = checkNotNull(map);
+    }
+
+    @Override
+    public int size() {
+      return map.size();
+    }
+
+    @Override
+    public boolean isEmpty() {
+      return map.isEmpty();
+    }
+
+    @Override
+    public boolean containsKey(Object key) {
+      return map.containsKey(key);
+    }
+
+    @Override
+    public boolean containsValue(Object value) {
+      return map.containsValue(value);
+    }
+
+    @Override
+    public boolean containsEntry(Object key, Object value) {
+      return map.entrySet().contains(Maps.immutableEntry(key, value));
+    }
+
+    @Override
+    public Set<V> get(final K key) {
+      return new AbstractSet<V>() {
+        @Override public Iterator<V> iterator() {
+          return new Iterator<V>() {
+            int i;
+
+            @Override
+            public boolean hasNext() {
+              return (i == 0) && map.containsKey(key);
+            }
+
+            @Override
+            public V next() {
+              if (!hasNext()) {
+                throw new NoSuchElementException();
+              }
+              i++;
+              return map.get(key);
+            }
+
+            @Override
+            public void remove() {
+              checkState(i == 1);
+              i = -1;
+              map.remove(key);
+            }
+          };
+        }
+
+        @Override public int size() {
+          return map.containsKey(key) ? 1 : 0;
+        }
+      };
+    }
+
+    @Override
+    public boolean put(K key, V value) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public boolean putAll(K key, Iterable<? extends V> values) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public boolean putAll(Multimap<? extends K, ? extends V> multimap) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public Set<V> replaceValues(K key, Iterable<? extends V> values) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public boolean remove(Object key, Object value) {
+      return map.entrySet().remove(Maps.immutableEntry(key, value));
+    }
+
+    @Override
+    public Set<V> removeAll(Object key) {
+      Set<V> values = new HashSet<V>(2);
+      if (!map.containsKey(key)) {
+        return values;
+      }
+      values.add(map.remove(key));
+      return values;
+    }
+
+    @Override
+    public void clear() {
+      map.clear();
+    }
+
+    @Override
+    public Set<K> keySet() {
+      return map.keySet();
+    }
+
+    @Override
+    public Multiset<K> keys() {
+      return Multisets.forSet(map.keySet());
+    }
+
+    @Override
+    public Collection<V> values() {
+      return map.values();
+    }
+
+    @Override
+    public Set<Entry<K, V>> entries() {
+      return map.entrySet();
+    }
+
+    @Override
+    public Map<K, Collection<V>> asMap() {
+      Map<K, Collection<V>> result = asMap;
+      if (result == null) {
+        asMap = result = new AsMap();
+      }
+      return result;
+    }
+
+    @Override public boolean equals(@Nullable Object object) {
+      if (object == this) {
+        return true;
+      }
+      if (object instanceof Multimap) {
+        Multimap<?, ?> that = (Multimap<?, ?>) object;
+        return this.size() == that.size() && asMap().equals(that.asMap());
+      }
+      return false;
+    }
+
+    @Override public int hashCode() {
+      return map.hashCode();
+    }
+
+    private static final MapJoiner JOINER
+        = Joiner.on("], ").withKeyValueSeparator("=[").useForNull("null");
+
+    @Override public String toString() {
+      if (map.isEmpty()) {
+        return "{}";
+      }
+      StringBuilder builder
+          = Collections2.newStringBuilderForCollection(map.size()).append('{');
+      JOINER.appendTo(builder, map);
+      return builder.append("]}").toString();
+    }
+
+    /** @see MapMultimap#asMap */
+    class AsMapEntries extends AbstractSet<Entry<K, Collection<V>>> {
+      @Override public int size() {
+        return map.size();
+      }
+
+      @Override public Iterator<Entry<K, Collection<V>>> iterator() {
+        return new Iterator<Entry<K, Collection<V>>>() {
+          final Iterator<K> keys = map.keySet().iterator();
+
+          @Override
+          public boolean hasNext() {
+            return keys.hasNext();
+          }
+          @Override
+          public Entry<K, Collection<V>> next() {
+            final K key = keys.next();
+            return new AbstractMapEntry<K, Collection<V>>() {
+              @Override public K getKey() {
+                return key;
+              }
+              @Override public Collection<V> getValue() {
+                return get(key);
+              }
+            };
+          }
+          @Override
+          public void remove() {
+            keys.remove();
+          }
+        };
+      }
+
+      @Override public boolean contains(Object o) {
+        if (!(o instanceof Entry)) {
+          return false;
+        }
+        Entry<?, ?> entry = (Entry<?, ?>) o;
+        if (!(entry.getValue() instanceof Set)) {
+          return false;
+        }
+        Set<?> set = (Set<?>) entry.getValue();
+        return (set.size() == 1)
+            && containsEntry(entry.getKey(), set.iterator().next());
+      }
+
+      @Override public boolean remove(Object o) {
+        if (!(o instanceof Entry)) {
+          return false;
+        }
+        Entry<?, ?> entry = (Entry<?, ?>) o;
+        if (!(entry.getValue() instanceof Set)) {
+          return false;
+        }
+        Set<?> set = (Set<?>) entry.getValue();
+        return (set.size() == 1)
+            && map.entrySet().remove(
+                Maps.immutableEntry(entry.getKey(), set.iterator().next()));
+      }
+    }
+
+    /** @see MapMultimap#asMap */
+    class AsMap extends Maps.ImprovedAbstractMap<K, Collection<V>> {
+      @Override protected Set<Entry<K, Collection<V>>> createEntrySet() {
+        return new AsMapEntries();
+      }
+
+      // The following methods are included for performance.
+
+      @Override public boolean containsKey(Object key) {
+        return map.containsKey(key);
+      }
+
+      @SuppressWarnings("unchecked")
+      @Override public Collection<V> get(Object key) {
+        Collection<V> collection = MapMultimap.this.get((K) key);
+        return collection.isEmpty() ? null : collection;
+      }
+
+      @Override public Collection<V> remove(Object key) {
+        Collection<V> collection = removeAll(key);
+        return collection.isEmpty() ? null : collection;
+      }
+    }
+    private static final long serialVersionUID = 7845222491160860175L;
+  }
+
+  /**
+   * Returns a view of a multimap where each value is transformed by a function.
+   * All other properties of the multimap, such as iteration order, are left
+   * intact. For example, the code: <pre>   {@code
+   *
+   * Multimap<String, Integer> multimap =
+   *     ImmutableSetMultimap.of("a", 2, "b", -3, "b", -3, "a", 4, "c", 6);
+   * Function<Integer, String> square = new Function<Integer, String>() {
+   *     public String apply(Integer in) {
+   *       return Integer.toString(in * in);
+   *     }
+   * };
+   * Multimap<String, String> transformed =
+   *     Multimaps.transformValues(multimap, square);
+   *   System.out.println(transformed);}</pre>
+   *
+   * ... prints {@code {a=[4, 16], b=[9, 9], c=[6]}}.
+   *
+   * <p>Changes in the underlying multimap are reflected in this view.
+   * Conversely, this view supports removal operations, and these are reflected
+   * in the underlying multimap.
+   *
+   * <p>It's acceptable for the underlying multimap to contain null keys, and
+   * even null values provided that the function is capable of accepting null
+   * input.  The transformed multimap might contain null values, if the function
+   * sometimes gives a null result.
+   *
+   * <p>The returned multimap is not thread-safe or serializable, even if the
+   * underlying multimap is.  The {@code equals} and {@code hashCode} methods
+   * of the returned multimap are meaningless, since there is not a definition
+   * of {@code equals} or {@code hashCode} for general collections, and
+   * {@code get()} will return a general {@code Collection} as opposed to a
+   * {@code List} or a {@code Set}.
+   *
+   * <p>The function is applied lazily, invoked when needed. This is necessary
+   * for the returned multimap to be a view, but it means that the function will
+   * be applied many times for bulk operations like
+   * {@link Multimap#containsValue} and {@code Multimap.toString()}. For this to
+   * perform well, {@code function} should be fast. To avoid lazy evaluation
+   * when the returned multimap doesn't need to be a view, copy the returned
+   * multimap into a new multimap of your choosing.
+   *
+   * @since 7.0
+   */
+  @Beta
+  public static <K, V1, V2> Multimap<K, V2> transformValues(
+      Multimap<K, V1> fromMultimap, final Function<? super V1, V2> function) {
+    checkNotNull(function);
+    EntryTransformer<K, V1, V2> transformer =
+        new EntryTransformer<K, V1, V2>() {
+          @Override
+          public V2 transformEntry(K key, V1 value) {
+            return function.apply(value);
+          }
+        };
+    return transformEntries(fromMultimap, transformer);
+  }
+
+  /**
+   * Returns a view of a multimap whose values are derived from the original
+   * multimap's entries. In contrast to {@link #transformValues}, this method's
+   * entry-transformation logic may depend on the key as well as the value.
+   *
+   * <p>All other properties of the transformed multimap, such as iteration
+   * order, are left intact. For example, the code: <pre>   {@code
+   *
+   *   SetMultimap<String, Integer> multimap =
+   *       ImmutableSetMultimap.of("a", 1, "a", 4, "b", -6);
+   *   EntryTransformer<String, Integer, String> transformer =
+   *       new EntryTransformer<String, Integer, String>() {
+   *         public String transformEntry(String key, Integer value) {
+   *            return (value >= 0) ? key : "no" + key;
+   *         }
+   *       };
+   *   Multimap<String, String> transformed =
+   *       Multimaps.transformEntries(multimap, transformer);
+   *   System.out.println(transformed);}</pre>
+   *
+   * ... prints {@code {a=[a, a], b=[nob]}}.
+   *
+   * <p>Changes in the underlying multimap are reflected in this view.
+   * Conversely, this view supports removal operations, and these are reflected
+   * in the underlying multimap.
+   *
+   * <p>It's acceptable for the underlying multimap to contain null keys and
+   * null values provided that the transformer is capable of accepting null
+   * inputs. The transformed multimap might contain null values if the
+   * transformer sometimes gives a null result.
+   *
+   * <p>The returned multimap is not thread-safe or serializable, even if the
+   * underlying multimap is.  The {@code equals} and {@code hashCode} methods
+   * of the returned multimap are meaningless, since there is not a definition
+   * of {@code equals} or {@code hashCode} for general collections, and
+   * {@code get()} will return a general {@code Collection} as opposed to a
+   * {@code List} or a {@code Set}.
+   *
+   * <p>The transformer is applied lazily, invoked when needed. This is
+   * necessary for the returned multimap to be a view, but it means that the
+   * transformer will be applied many times for bulk operations like {@link
+   * Multimap#containsValue} and {@link Object#toString}. For this to perform
+   * well, {@code transformer} should be fast. To avoid lazy evaluation when the
+   * returned multimap doesn't need to be a view, copy the returned multimap
+   * into a new multimap of your choosing.
+   *
+   * <p><b>Warning:</b> This method assumes that for any instance {@code k} of
+   * {@code EntryTransformer} key type {@code K}, {@code k.equals(k2)} implies
+   * that {@code k2} is also of type {@code K}. Using an {@code
+   * EntryTransformer} key type for which this may not hold, such as {@code
+   * ArrayList}, may risk a {@code ClassCastException} when calling methods on
+   * the transformed multimap.
+   *
+   * @since 7.0
+   */
+  @Beta
+  public static <K, V1, V2> Multimap<K, V2> transformEntries(
+      Multimap<K, V1> fromMap,
+      EntryTransformer<? super K, ? super V1, V2> transformer) {
+    return new TransformedEntriesMultimap<K, V1, V2>(fromMap, transformer);
+  }
+
+  private static class TransformedEntriesMultimap<K, V1, V2>
+      implements Multimap<K, V2> {
+    final Multimap<K, V1> fromMultimap;
+    final EntryTransformer<? super K, ? super V1, V2> transformer;
+
+    TransformedEntriesMultimap(Multimap<K, V1> fromMultimap,
+        final EntryTransformer<? super K, ? super V1, V2> transformer) {
+      this.fromMultimap = checkNotNull(fromMultimap);
+      this.transformer = checkNotNull(transformer);
+    }
+
+    Collection<V2> transform(final K key, Collection<V1> values) {
+      return Collections2.transform(values, new Function<V1, V2>() {
+        @Override public V2 apply(V1 value) {
+          return transformer.transformEntry(key, value);
+        }
+      });
+    }
+
+    private transient Map<K, Collection<V2>> asMap;
+
+    @Override public Map<K, Collection<V2>> asMap() {
+      if (asMap == null) {
+        Map<K, Collection<V2>> aM = Maps.transformEntries(fromMultimap.asMap(),
+            new EntryTransformer<K, Collection<V1>, Collection<V2>>() {
+
+              @Override public Collection<V2> transformEntry(
+                  K key, Collection<V1> value) {
+                return transform(key, value);
+              }
+            });
+        asMap = aM;
+        return aM;
+      }
+      return asMap;
+    }
+
+    @Override public void clear() {
+      fromMultimap.clear();
+    }
+
+    @SuppressWarnings("unchecked")
+    @Override public boolean containsEntry(Object key, Object value) {
+      Collection<V2> values = get((K) key);
+      return values.contains(value);
+    }
+
+    @Override public boolean containsKey(Object key) {
+      return fromMultimap.containsKey(key);
+    }
+
+    @Override public boolean containsValue(Object value) {
+      return values().contains(value);
+    }
+
+    private transient Collection<Entry<K, V2>> entries;
+
+    @Override public Collection<Entry<K, V2>> entries() {
+      if (entries == null) {
+        Collection<Entry<K, V2>> es = new TransformedEntries(transformer);
+        entries = es;
+        return es;
+      }
+      return entries;
+    }
+
+    private class TransformedEntries
+        extends TransformedCollection<Entry<K, V1>, Entry<K, V2>> {
+
+      TransformedEntries(
+          final EntryTransformer<? super K, ? super V1, V2> transformer) {
+        super(fromMultimap.entries(),
+            new Function<Entry<K, V1>, Entry<K, V2>>() {
+              @Override public Entry<K, V2> apply(final Entry<K, V1> entry) {
+                return new AbstractMapEntry<K, V2>() {
+
+                  @Override public K getKey() {
+                    return entry.getKey();
+                  }
+
+                  @Override public V2 getValue() {
+                    return transformer.transformEntry(
+                        entry.getKey(), entry.getValue());
+                  }
+                };
+              }
+            });
+      }
+
+      @Override public boolean contains(Object o) {
+        if (o instanceof Entry) {
+          Entry<?, ?> entry = (Entry<?, ?>) o;
+          return containsEntry(entry.getKey(), entry.getValue());
+        }
+        return false;
+      }
+
+      @SuppressWarnings("unchecked")
+      @Override public boolean remove(Object o) {
+        if (o instanceof Entry) {
+          Entry<?, ?> entry = (Entry<?, ?>) o;
+          Collection<V2> values = get((K) entry.getKey());
+          return values.remove(entry.getValue());
+        }
+        return false;
+      }
+
+    }
+
+    @Override public Collection<V2> get(final K key) {
+      return transform(key, fromMultimap.get(key));
+    }
+
+    @Override public boolean isEmpty() {
+      return fromMultimap.isEmpty();
+    }
+
+    @Override public Set<K> keySet() {
+      return fromMultimap.keySet();
+    }
+
+    @Override public Multiset<K> keys() {
+      return fromMultimap.keys();
+    }
+
+    @Override public boolean put(K key, V2 value) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override public boolean putAll(K key, Iterable<? extends V2> values) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override public boolean putAll(
+        Multimap<? extends K, ? extends V2> multimap) {
+      throw new UnsupportedOperationException();
+    }
+
+    @SuppressWarnings("unchecked")
+    @Override public boolean remove(Object key, Object value) {
+      return get((K) key).remove(value);
+    }
+
+    @SuppressWarnings("unchecked")
+    @Override public Collection<V2> removeAll(Object key) {
+      return transform((K) key, fromMultimap.removeAll(key));
+    }
+
+    @Override public Collection<V2> replaceValues(
+        K key, Iterable<? extends V2> values) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override public int size() {
+      return fromMultimap.size();
+    }
+
+    private transient Collection<V2> values;
+
+    @Override public Collection<V2> values() {
+      if (values == null) {
+        Collection<V2> vs = Collections2.transform(
+            fromMultimap.entries(), new Function<Entry<K, V1>, V2>() {
+
+              @Override public V2 apply(Entry<K, V1> entry) {
+                return transformer.transformEntry(
+                    entry.getKey(), entry.getValue());
+              }
+            });
+        values = vs;
+        return vs;
+      }
+      return values;
+    }
+
+    @Override public boolean equals(Object obj) {
+      if (obj instanceof Multimap) {
+        Multimap<?, ?> other = (Multimap<?, ?>) obj;
+        return asMap().equals(other.asMap());
+      }
+      return false;
+    }
+
+    @Override public int hashCode() {
+      return asMap().hashCode();
+    }
+
+    @Override public String toString() {
+      return asMap().toString();
+    }
+  }
+
+  /**
+   * Returns a view of a {@code ListMultimap} where each value is transformed by
+   * a function. All other properties of the multimap, such as iteration order,
+   * are left intact. For example, the code: <pre>   {@code
+   *
+   *   ListMultimap<String, Integer> multimap
+   *        = ImmutableListMultimap.of("a", 4, "a", 16, "b", 9);
+   *   Function<Integer, Double> sqrt =
+   *       new Function<Integer, Double>() {
+   *         public Double apply(Integer in) {
+   *           return Math.sqrt((int) in);
+   *         }
+   *       };
+   *   ListMultimap<String, Double> transformed = Multimaps.transformValues(map,
+   *       sqrt);
+   *   System.out.println(transformed);}</pre>
+   *
+   * ... prints {@code {a=[2.0, 4.0], b=[3.0]}}.
+   *
+   * <p>Changes in the underlying multimap are reflected in this view.
+   * Conversely, this view supports removal operations, and these are reflected
+   * in the underlying multimap.
+   *
+   * <p>It's acceptable for the underlying multimap to contain null keys, and
+   * even null values provided that the function is capable of accepting null
+   * input.  The transformed multimap might contain null values, if the function
+   * sometimes gives a null result.
+   *
+   * <p>The returned multimap is not thread-safe or serializable, even if the
+   * underlying multimap is.
+   *
+   * <p>The function is applied lazily, invoked when needed. This is necessary
+   * for the returned multimap to be a view, but it means that the function will
+   * be applied many times for bulk operations like
+   * {@link Multimap#containsValue} and {@code Multimap.toString()}. For this to
+   * perform well, {@code function} should be fast. To avoid lazy evaluation
+   * when the returned multimap doesn't need to be a view, copy the returned
+   * multimap into a new multimap of your choosing.
+   *
+   * @since 7.0
+   */
+  @Beta
+  public static <K, V1, V2> ListMultimap<K, V2> transformValues(
+      ListMultimap<K, V1> fromMultimap,
+      final Function<? super V1, V2> function) {
+    checkNotNull(function);
+    EntryTransformer<K, V1, V2> transformer =
+        new EntryTransformer<K, V1, V2>() {
+          @Override
+          public V2 transformEntry(K key, V1 value) {
+            return function.apply(value);
+          }
+        };
+    return transformEntries(fromMultimap, transformer);
+  }
+
+  /**
+   * Returns a view of a {@code ListMultimap} whose values are derived from the
+   * original multimap's entries. In contrast to
+   * {@link #transformValues(ListMultimap, Function)}, this method's
+   * entry-transformation logic may depend on the key as well as the value.
+   *
+   * <p>All other properties of the transformed multimap, such as iteration
+   * order, are left intact. For example, the code: <pre>   {@code
+   *
+   *   Multimap<String, Integer> multimap =
+   *       ImmutableMultimap.of("a", 1, "a", 4, "b", 6);
+   *   EntryTransformer<String, Integer, String> transformer =
+   *       new EntryTransformer<String, Integer, String>() {
+   *         public String transformEntry(String key, Integer value) {
+   *           return key + value;
+   *         }
+   *       };
+   *   Multimap<String, String> transformed =
+   *       Multimaps.transformEntries(multimap, transformer);
+   *   System.out.println(transformed);}</pre>
+   *
+   * ... prints {@code {"a"=["a1", "a4"], "b"=["b6"]}}.
+   *
+   * <p>Changes in the underlying multimap are reflected in this view.
+   * Conversely, this view supports removal operations, and these are reflected
+   * in the underlying multimap.
+   *
+   * <p>It's acceptable for the underlying multimap to contain null keys and
+   * null values provided that the transformer is capable of accepting null
+   * inputs. The transformed multimap might contain null values if the
+   * transformer sometimes gives a null result.
+   *
+   * <p>The returned multimap is not thread-safe or serializable, even if the
+   * underlying multimap is.
+   *
+   * <p>The transformer is applied lazily, invoked when needed. This is
+   * necessary for the returned multimap to be a view, but it means that the
+   * transformer will be applied many times for bulk operations like {@link
+   * Multimap#containsValue} and {@link Object#toString}. For this to perform
+   * well, {@code transformer} should be fast. To avoid lazy evaluation when the
+   * returned multimap doesn't need to be a view, copy the returned multimap
+   * into a new multimap of your choosing.
+   *
+   * <p><b>Warning:</b> This method assumes that for any instance {@code k} of
+   * {@code EntryTransformer} key type {@code K}, {@code k.equals(k2)} implies
+   * that {@code k2} is also of type {@code K}. Using an {@code
+   * EntryTransformer} key type for which this may not hold, such as {@code
+   * ArrayList}, may risk a {@code ClassCastException} when calling methods on
+   * the transformed multimap.
+   *
+   * @since 7.0
+   */
+  @Beta
+  public static <K, V1, V2> ListMultimap<K, V2> transformEntries(
+      ListMultimap<K, V1> fromMap,
+      EntryTransformer<? super K, ? super V1, V2> transformer) {
+    return new TransformedEntriesListMultimap<K, V1, V2>(fromMap, transformer);
+  }
+
+  private static final class TransformedEntriesListMultimap<K, V1, V2>
+      extends TransformedEntriesMultimap<K, V1, V2>
+      implements ListMultimap<K, V2> {
+
+    TransformedEntriesListMultimap(ListMultimap<K, V1> fromMultimap,
+        EntryTransformer<? super K, ? super V1, V2> transformer) {
+      super(fromMultimap, transformer);
+    }
+
+    @Override List<V2> transform(final K key, Collection<V1> values) {
+      return Lists.transform((List<V1>) values, new Function<V1, V2>() {
+        @Override public V2 apply(V1 value) {
+          return transformer.transformEntry(key, value);
+        }
+      });
+    }
+
+    @Override public List<V2> get(K key) {
+      return transform(key, fromMultimap.get(key));
+    }
+
+    @SuppressWarnings("unchecked")
+    @Override public List<V2> removeAll(Object key) {
+      return transform((K) key, fromMultimap.removeAll(key));
+    }
+
+    @Override public List<V2> replaceValues(
+        K key, Iterable<? extends V2> values) {
+      throw new UnsupportedOperationException();
+    }
+  }
+
+  /**
+   * Creates an index {@code ImmutableListMultimap} that contains the results of
+   * applying a specified function to each item in an {@code Iterable} of
+   * values. Each value will be stored as a value in the resulting multimap,
+   * yielding a multimap with the same size as the input iterable. The key used
+   * to store that value in the multimap will be the result of calling the
+   * function on that value. The resulting multimap is created as an immutable
+   * snapshot. In the returned multimap, keys appear in the order they are first
+   * encountered, and the values corresponding to each key appear in the same
+   * order as they are encountered.
+   *
+   * <p>For example, <pre>   {@code
+   *
+   *   List<String> badGuys =
+   *       Arrays.asList("Inky", "Blinky", "Pinky", "Pinky", "Clyde");
+   *   Function<String, Integer> stringLengthFunction = ...;
+   *   Multimap<Integer, String> index =
+   *       Multimaps.index(badGuys, stringLengthFunction);
+   *   System.out.println(index);}</pre>
+   *
+   * prints <pre>   {@code
+   *
+   *   {4=[Inky], 6=[Blinky], 5=[Pinky, Pinky, Clyde]}}</pre>
+   *
+   * The returned multimap is serializable if its keys and values are all
+   * serializable.
+   *
+   * @param values the values to use when constructing the {@code
+   *     ImmutableListMultimap}
+   * @param keyFunction the function used to produce the key for each value
+   * @return {@code ImmutableListMultimap} mapping the result of evaluating the
+   *     function {@code keyFunction} on each value in the input collection to
+   *     that value
+   * @throws NullPointerException if any of the following cases is true:
+   *     <ul>
+   *     <li>{@code values} is null
+   *     <li>{@code keyFunction} is null
+   *     <li>An element in {@code values} is null
+   *     <li>{@code keyFunction} returns {@code null} for any element of {@code
+   *         values}
+   *     </ul>
+   */
+  public static <K, V> ImmutableListMultimap<K, V> index(
+      Iterable<V> values, Function<? super V, K> keyFunction) {
+    return index(values.iterator(), keyFunction);
+  }
+
+  /**
+   * <b>Deprecated.</b>
+   *
+   * @since 10.0
+   * @deprecated use {@link #index(Iterator, Function)} by casting {@code
+   *     values} to {@code Iterator<V>}, or better yet, by implementing only
+   *     {@code Iterator} and not {@code Iterable}. <b>This method is scheduled
+   *     for deletion in March 2012.</b>
+   */
+  @Beta
+  @Deprecated
+  public static <K, V, I extends Object & Iterable<V> & Iterator<V>>
+      ImmutableListMultimap<K, V> index(
+          I values, Function<? super V, K> keyFunction) {
+    Iterable<V> valuesIterable = checkNotNull(values);
+    return index(valuesIterable, keyFunction);
+  }
+
+  /**
+   * Creates an index {@code ImmutableListMultimap} that contains the results of
+   * applying a specified function to each item in an {@code Iterator} of
+   * values. Each value will be stored as a value in the resulting multimap,
+   * yielding a multimap with the same size as the input iterator. The key used
+   * to store that value in the multimap will be the result of calling the
+   * function on that value. The resulting multimap is created as an immutable
+   * snapshot. In the returned multimap, keys appear in the order they are first
+   * encountered, and the values corresponding to each key appear in the same
+   * order as they are encountered.
+   *
+   * <p>For example, <pre>   {@code
+   *
+   *   List<String> badGuys =
+   *       Arrays.asList("Inky", "Blinky", "Pinky", "Pinky", "Clyde");
+   *   Function<String, Integer> stringLengthFunction = ...;
+   *   Multimap<Integer, String> index =
+   *       Multimaps.index(badGuys.iterator(), stringLengthFunction);
+   *   System.out.println(index);}</pre>
+   *
+   * prints <pre>   {@code
+   *
+   *   {4=[Inky], 6=[Blinky], 5=[Pinky, Pinky, Clyde]}}</pre>
+   *
+   * The returned multimap is serializable if its keys and values are all
+   * serializable.
+   *
+   * @param values the values to use when constructing the {@code
+   *     ImmutableListMultimap}
+   * @param keyFunction the function used to produce the key for each value
+   * @return {@code ImmutableListMultimap} mapping the result of evaluating the
+   *     function {@code keyFunction} on each value in the input collection to
+   *     that value
+   * @throws NullPointerException if any of the following cases is true:
+   *     <ul>
+   *     <li>{@code values} is null
+   *     <li>{@code keyFunction} is null
+   *     <li>An element in {@code values} is null
+   *     <li>{@code keyFunction} returns {@code null} for any element of {@code
+   *         values}
+   *     </ul>
+   * @since 10.0
+   */
+  public static <K, V> ImmutableListMultimap<K, V> index(
+      Iterator<V> values, Function<? super V, K> keyFunction) {
+    checkNotNull(keyFunction);
+    ImmutableListMultimap.Builder<K, V> builder
+        = ImmutableListMultimap.builder();
+    while (values.hasNext()) {
+      V value = values.next();
+      checkNotNull(value, values);
+      builder.put(keyFunction.apply(value), value);
+    }
+    return builder.build();
+  }
+
+  static abstract class Keys<K, V> extends AbstractMultiset<K> {
+    abstract Multimap<K, V> multimap();
+
+    @Override Iterator<Multiset.Entry<K>> entryIterator() {
+      final Iterator<Map.Entry<K, Collection<V>>> backingIterator =
+          multimap().asMap().entrySet().iterator();
+      return new Iterator<Multiset.Entry<K>>() {
+        @Override public boolean hasNext() {
+          return backingIterator.hasNext();
+        }
+
+        @Override public Multiset.Entry<K> next() {
+          final Map.Entry<K, Collection<V>> backingEntry =
+              backingIterator.next();
+          return new Multisets.AbstractEntry<K>() {
+            @Override public K getElement() {
+              return backingEntry.getKey();
+            }
+
+            @Override public int getCount() {
+              return backingEntry.getValue().size();
+            }
+          };
+        }
+
+        @Override public void remove() {
+          backingIterator.remove();
+        }
+      };
+    }
+
+    @Override int distinctElements() {
+      return multimap().asMap().size();
+    }
+
+    @Override Set<Multiset.Entry<K>> createEntrySet() {
+      return new KeysEntrySet();
+    }
+
+    class KeysEntrySet extends Multisets.EntrySet<K> {
+      @Override Multiset<K> multiset() {
+        return Keys.this;
+      }
+
+      @Override public Iterator<Multiset.Entry<K>> iterator() {
+        return entryIterator();
+      }
+
+      @Override public int size() {
+        return distinctElements();
+      }
+
+      @Override public boolean isEmpty() {
+        return multimap().isEmpty();
+      }
+
+      @Override public boolean contains(@Nullable Object o) {
+        if (o instanceof Multiset.Entry<?>) {
+          Multiset.Entry<?> entry = (Multiset.Entry<?>) o;
+          Collection<V> collection = multimap().asMap().get(entry.getElement());
+          return collection != null && collection.size() == entry.getCount();
+        }
+        return false;
+      }
+
+      @Override public boolean remove(@Nullable Object o) {
+        if (o instanceof Multiset.Entry<?>) {
+          Multiset.Entry<?> entry = (Multiset.Entry<?>) o;
+          Collection<V> collection = multimap().asMap().get(entry.getElement());
+          if (collection != null && collection.size() == entry.getCount()) {
+            collection.clear();
+            return true;
+          }
+        }
+        return false;
+      }
+    }
+
+    @Override public boolean contains(@Nullable Object element) {
+      return multimap().containsKey(element);
+    }
+
+    @Override public Iterator<K> iterator() {
+      return Iterators.transform(multimap().entries().iterator(),
+          new Function<Map.Entry<K, V>, K>() {
+            @Override public K apply(Map.Entry<K, V> entry) {
+              return entry.getKey();
+            }
+          });
+    }
+
+    @Override public int count(@Nullable Object element) {
+      try {
+        if (multimap().containsKey(element)) {
+          Collection<V> values = multimap().asMap().get(element);
+          return (values == null) ? 0 : values.size();
+        }
+        return 0;
+      } catch (ClassCastException e) {
+        return 0;
+      } catch (NullPointerException e) {
+        return 0;
+      }
+    }
+
+    @Override public int remove(@Nullable Object element, int occurrences) {
+      checkArgument(occurrences >= 0);
+      if (occurrences == 0) {
+        return count(element);
+      }
+
+      Collection<V> values;
+      try {
+        values = multimap().asMap().get(element);
+      } catch (ClassCastException e) {
+        return 0;
+      } catch (NullPointerException e) {
+        return 0;
+      }
+
+      if (values == null) {
+        return 0;
+      }
+
+      int oldCount = values.size();
+      if (occurrences >= oldCount) {
+        values.clear();
+      } else {
+        Iterator<V> iterator = values.iterator();
+        for (int i = 0; i < occurrences; i++) {
+          iterator.next();
+          iterator.remove();
+        }
+      }
+      return oldCount;
+    }
+
+    @Override public void clear() {
+      multimap().clear();
+    }
+
+    @Override public Set<K> elementSet() {
+      return multimap().keySet();
+    }
+  }
+
+  static abstract class Values<K, V> extends AbstractCollection<V> {
+    abstract Multimap<K, V> multimap();
+
+    @Override public Iterator<V> iterator() {
+      final Iterator<Map.Entry<K, V>> backingIterator =
+          multimap().entries().iterator();
+      return new Iterator<V>() {
+        @Override public boolean hasNext() {
+          return backingIterator.hasNext();
+        }
+
+        @Override public V next() {
+          return backingIterator.next().getValue();
+        }
+
+        @Override public void remove() {
+          backingIterator.remove();
+        }
+      };
+    }
+
+    @Override public int size() {
+      return multimap().size();
+    }
+
+    @Override public boolean contains(@Nullable Object o) {
+      return multimap().containsValue(o);
+    }
+
+    @Override public void clear() {
+      multimap().clear();
+    }
+  }
+
+  /**
+   * A skeleton implementation of {@link Multimap#entries()}.
+   */
+  static abstract class Entries<K, V> extends
+      AbstractCollection<Map.Entry<K, V>> {
+    abstract Multimap<K, V> multimap();
+
+    @Override public int size() {
+      return multimap().size();
+    }
+
+    @Override public boolean contains(@Nullable Object o) {
+      if (o instanceof Map.Entry<?, ?>) {
+        Map.Entry<?, ?> entry = (Map.Entry<?, ?>) o;
+        return multimap().containsEntry(entry.getKey(), entry.getValue());
+      }
+      return false;
+    }
+
+    @Override public boolean remove(@Nullable Object o) {
+      if (o instanceof Map.Entry<?, ?>) {
+        Map.Entry<?, ?> entry = (Map.Entry<?, ?>) o;
+        return multimap().remove(entry.getKey(), entry.getValue());
+      }
+      return false;
+    }
+
+    @Override public void clear() {
+      multimap().clear();
+    }
+  }
+
+  /**
+   * A skeleton implementation of {@link SetMultimap#entries()}.
+   */
+  static abstract class EntrySet<K, V> extends Entries<K, V> implements
+      Set<Map.Entry<K, V>> {
+    @Override public int hashCode() {
+      return Sets.hashCodeImpl(this);
+    }
+
+    @Override public boolean equals(@Nullable Object obj) {
+      return Sets.equalsImpl(this, obj);
+    }
+  }
+
+  /**
+   * A skeleton implementation of {@link Multimap#asMap()}.
+   */
+  static abstract class AsMap<K, V> extends
+      Maps.ImprovedAbstractMap<K, Collection<V>> {
+    abstract Multimap<K, V> multimap();
+
+    @Override public abstract int size();
+
+    abstract Iterator<Entry<K, Collection<V>>> entryIterator();
+
+    @Override protected Set<Entry<K, Collection<V>>> createEntrySet() {
+      return new EntrySet();
+    }
+
+    void removeValuesForKey(Object key){
+      multimap().removeAll(key);
+    }
+
+    class EntrySet extends Maps.EntrySet<K, Collection<V>> {
+      @Override Map<K, Collection<V>> map() {
+        return AsMap.this;
+      }
+
+      @Override public Iterator<Entry<K, Collection<V>>> iterator() {
+        return entryIterator();
+      }
+
+      @Override public boolean remove(Object o) {
+        if (!contains(o)) {
+          return false;
+        }
+        Map.Entry<?, ?> entry = (Map.Entry<?, ?>) o;
+        removeValuesForKey(entry.getKey());
+        return true;
+      }
+    }
+
+    @SuppressWarnings("unchecked")
+    @Override public Collection<V> get(Object key) {
+      return containsKey(key) ? multimap().get((K) key) : null;
+    }
+
+    @Override public Collection<V> remove(Object key) {
+      return containsKey(key) ? multimap().removeAll(key) : null;
+    }
+
+    @Override public Set<K> keySet() {
+      return multimap().keySet();
+    }
+
+    @Override public boolean isEmpty() {
+      return multimap().isEmpty();
+    }
+
+    @Override public boolean containsKey(Object key) {
+      return multimap().containsKey(key);
+    }
+
+    @Override public void clear() {
+      multimap().clear();
+    }
+  }
+
+  /**
+   * Returns a multimap containing the mappings in {@code unfiltered} whose keys
+   * satisfy a predicate. The returned multimap is a live view of
+   * {@code unfiltered}; changes to one affect the other.
+   *
+   * <p>The resulting multimap's views have iterators that don't support
+   * {@code remove()}, but all other methods are supported by the multimap and
+   * its views. When adding a key that doesn't satisfy the predicate, the
+   * multimap's {@code put()}, {@code putAll()}, and {@replaceValues()} methods
+   * throw an {@link IllegalArgumentException}.
+   *
+   * <p>When methods such as {@code removeAll()} and {@code clear()} are called on
+   * the filtered multimap or its views, only mappings whose keys satisfy the
+   * filter will be removed from the underlying multimap.
+   *
+   * <p>The returned multimap isn't threadsafe or serializable, even if
+   * {@code unfiltered} is.
+   *
+   * <p>Many of the filtered multimap's methods, such as {@code size()}, iterate
+   * across every key/value mapping in the underlying multimap and determine
+   * which satisfy the filter. When a live view is <i>not</i> needed, it may be
+   * faster to copy the filtered multimap and use the copy.
+   *
+   * <p><b>Warning:</b> {@code keyPredicate} must be <i>consistent with equals</i>,
+   * as documented at {@link Predicate#apply}. Do not provide a predicate such
+   * as {@code Predicates.instanceOf(ArrayList.class)}, which is inconsistent
+   * with equals.
+   *
+   * @since 11.0
+   */
+  @Beta
+  @GwtIncompatible(value = "untested")
+  public static <K, V> Multimap<K, V> filterKeys(
+    Multimap<K, V> unfiltered, final Predicate<? super K> keyPredicate) {
+    checkNotNull(keyPredicate);
+    Predicate<Entry<K, V>> entryPredicate =
+        new Predicate<Entry<K, V>>() {
+          @Override
+          public boolean apply(Entry<K, V> input) {
+            return keyPredicate.apply(input.getKey());
+          }
+        };
+    return filterEntries(unfiltered, entryPredicate);
+  }
+
+  /**
+   * Returns a multimap containing the mappings in {@code unfiltered} whose values
+   * satisfy a predicate. The returned multimap is a live view of
+   * {@code unfiltered}; changes to one affect the other.
+   *
+   * <p>The resulting multimap's views have iterators that don't support
+   * {@code remove()}, but all other methods are supported by the multimap and
+   * its views. When adding a value that doesn't satisfy the predicate, the
+   * multimap's {@code put()}, {@code putAll()}, and {@replaceValues()} methods
+   * throw an {@link IllegalArgumentException}.
+   *
+   * <p>When methods such as {@code removeAll()} and {@code clear()} are called on
+   * the filtered multimap or its views, only mappings whose value satisfy the
+   * filter will be removed from the underlying multimap.
+   *
+   * <p>The returned multimap isn't threadsafe or serializable, even if
+   * {@code unfiltered} is.
+   *
+   * <p>Many of the filtered multimap's methods, such as {@code size()}, iterate
+   * across every key/value mapping in the underlying multimap and determine
+   * which satisfy the filter. When a live view is <i>not</i> needed, it may be
+   * faster to copy the filtered multimap and use the copy.
+   *
+   * <p><b>Warning:</b> {@code valuePredicate} must be <i>consistent with
+   * equals</i>, as documented at {@link Predicate#apply}. Do not provide a
+   * predicate such as {@code Predicates.instanceOf(ArrayList.class)}, which is
+   * inconsistent with equals.
+   *
+   * @since 11.0
+   */
+  @Beta
+  @GwtIncompatible(value = "untested")
+  public static <K, V> Multimap<K, V> filterValues(
+    Multimap<K, V> unfiltered, final Predicate<? super V> valuePredicate) {
+    checkNotNull(valuePredicate);
+    Predicate<Entry<K, V>> entryPredicate =
+        new Predicate<Entry<K, V>>() {
+          @Override
+          public boolean apply(Entry<K, V> input) {
+            return valuePredicate.apply(input.getValue());
+          }
+        };
+    return filterEntries(unfiltered, entryPredicate);
+  }
+
+  /**
+   * Returns a multimap containing the mappings in {@code unfiltered} that
+   * satisfy a predicate. The returned multimap is a live view of
+   * {@code unfiltered}; changes to one affect the other.
+   *
+   * <p>The resulting multimap's views have iterators that don't support
+   * {@code remove()}, but all other methods are supported by the multimap and
+   * its views. When adding a key/value pair that doesn't satisfy the predicate,
+   * multimap's {@code put()}, {@code putAll()}, and {@replaceValues()} methods
+   * throw an {@link IllegalArgumentException}.
+   *
+   * <p>When methods such as {@code removeAll()} and {@code clear()} are called on
+   * the filtered multimap or its views, only mappings whose keys satisfy the
+   * filter will be removed from the underlying multimap.
+   *
+   * <p>The returned multimap isn't threadsafe or serializable, even if
+   * {@code unfiltered} is.
+   *
+   * <p>Many of the filtered multimap's methods, such as {@code size()}, iterate
+   * across every key/value mapping in the underlying multimap and determine
+   * which satisfy the filter. When a live view is <i>not</i> needed, it may be
+   * faster to copy the filtered multimap and use the copy.
+   *
+   * <p><b>Warning:</b> {@code entryPredicate} must be <i>consistent with
+   * equals</i>, as documented at {@link Predicate#apply}.
+   *
+   * @since 11.0
+   */
+  @Beta
+  @GwtIncompatible(value = "untested")
+  public static <K, V> Multimap<K, V> filterEntries(
+    Multimap<K, V> unfiltered, Predicate<? super Entry<K, V>> entryPredicate) {
+    checkNotNull(entryPredicate);
+    return (unfiltered instanceof FilteredMultimap)
+        ? filterFiltered((FilteredMultimap<K, V>) unfiltered, entryPredicate)
+        : new FilteredMultimap<K, V>(checkNotNull(unfiltered), entryPredicate);
+  }
+
+  /**
+   * Support removal operations when filtering a filtered multimap. Since a
+   * filtered multimap has iterators that don't support remove, passing one to
+   * the FilteredMultimap constructor would lead to a multimap whose removal
+   * operations would fail. This method combines the predicates to avoid that
+   * problem.
+   */
+  private static <K, V> Multimap<K, V> filterFiltered(FilteredMultimap<K, V> map,
+      Predicate<? super Entry<K, V>> entryPredicate) {
+    Predicate<Entry<K, V>> predicate
+        = Predicates.and(map.predicate, entryPredicate);
+    return new FilteredMultimap<K, V>(map.unfiltered, predicate);
+  }
+
+  private static class FilteredMultimap<K, V> implements Multimap<K, V> {
+    final Multimap<K, V> unfiltered;
+    final Predicate<? super Entry<K, V>> predicate;
+
+    FilteredMultimap(Multimap<K, V> unfiltered, Predicate<? super Entry<K, V>> predicate) {
+      this.unfiltered = unfiltered;
+      this.predicate = predicate;
+    }
+
+    @Override public int size() {
+      return entries().size();
+    }
+
+    @Override public boolean isEmpty() {
+      return entries().isEmpty();
+    }
+
+    @Override public boolean containsKey(Object key) {
+      return asMap().containsKey(key);
+    }
+
+    @Override public boolean containsValue(Object value) {
+      return values().contains(value);
+    }
+
+    // This method should be called only when key is a K and value is a V.
+    @SuppressWarnings("unchecked")
+    boolean satisfiesPredicate(Object key, Object value) {
+      return predicate.apply(Maps.immutableEntry((K) key, (V) value));
+    }
+
+    @Override public boolean containsEntry(Object key, Object value) {
+      return unfiltered.containsEntry(key, value) && satisfiesPredicate(key, value);
+    }
+
+    @Override public boolean put(K key, V value) {
+      checkArgument(satisfiesPredicate(key, value));
+      return unfiltered.put(key, value);
+    }
+
+    @Override public boolean remove(Object key, Object value) {
+      return containsEntry(key, value) ? unfiltered.remove(key, value) : false;
+    }
+
+    @Override public boolean putAll(K key, Iterable<? extends V> values) {
+      for (V value : values) {
+        checkArgument(satisfiesPredicate(key, value));
+      }
+      return unfiltered.putAll(key, values);
+    }
+
+    @Override public boolean putAll(Multimap<? extends K, ? extends V> multimap) {
+      for (Entry<? extends K, ? extends V> entry : multimap.entries()) {
+        checkArgument(satisfiesPredicate(entry.getKey(), entry.getValue()));
+      }
+      return unfiltered.putAll(multimap);
+    }
+
+    @Override public Collection<V> replaceValues(K key, Iterable<? extends V> values) {
+      for (V value : values) {
+        checkArgument(satisfiesPredicate(key, value));
+      }
+      // Not calling unfiltered.replaceValues() since values that don't satisify
+      // the filter should remain in the multimap.
+      Collection<V> oldValues = removeAll(key);
+      unfiltered.putAll(key, values);
+      return oldValues;
+    }
+
+    @Override public Collection<V> removeAll(Object key) {
+      List<V> removed = Lists.newArrayList();
+      Collection<V> values = unfiltered.asMap().get(key);
+      if (values != null) {
+        Iterator<V> iterator = values.iterator();
+        while (iterator.hasNext()) {
+          V value = iterator.next();
+          if (satisfiesPredicate(key, value)) {
+            removed.add(value);
+            iterator.remove();
+          }
+        }
+      }
+      if (unfiltered instanceof SetMultimap) {
+        return Collections.unmodifiableSet(Sets.newLinkedHashSet(removed));
+      } else {
+        return Collections.unmodifiableList(removed);
+      }
+    }
+
+    @Override public void clear() {
+      entries().clear();
+    }
+
+    @Override public boolean equals(@Nullable Object object) {
+      if (object == this) {
+        return true;
+      }
+      if (object instanceof Multimap) {
+        Multimap<?, ?> that = (Multimap<?, ?>) object;
+        return asMap().equals(that.asMap());
+      }
+      return false;
+    }
+
+    @Override public int hashCode() {
+      return asMap().hashCode();
+    }
+
+    @Override public String toString() {
+      return asMap().toString();
+    }
+
+    class ValuePredicate implements Predicate<V> {
+      final K key;
+      ValuePredicate(K key) {
+        this.key = key;
+      }
+      @Override public boolean apply(V value) {
+        return satisfiesPredicate(key, value);
+      }
+    }
+
+    Collection<V> filterCollection(Collection<V> collection, Predicate<V> predicate) {
+      if (collection instanceof Set) {
+        return Sets.filter((Set<V>) collection, predicate);
+      } else {
+        return Collections2.filter(collection, predicate);
+      }
+    }
+
+    @Override public Collection<V> get(K key) {
+      return filterCollection(unfiltered.get(key), new ValuePredicate(key));
+    }
+
+    @Override public Set<K> keySet() {
+      return asMap().keySet();
+    }
+
+    Collection<V> values;
+
+    @Override public Collection<V> values() {
+      return (values == null) ? values = new Values() : values;
+    }
+
+    class Values extends Multimaps.Values<K, V> {
+      @Override Multimap<K, V> multimap() {
+        return FilteredMultimap.this;
+      }
+
+      @Override public boolean contains(@Nullable Object o) {
+        return Iterators.contains(iterator(), o);
+      }
+
+      // Override remove methods since iterator doesn't support remove.
+
+      @Override public boolean remove(Object o) {
+        Iterator<Entry<K, V>> iterator = unfiltered.entries().iterator();
+        while (iterator.hasNext()) {
+          Entry<K, V> entry = iterator.next();
+          if (Objects.equal(o, entry.getValue()) && predicate.apply(entry)) {
+            iterator.remove();
+            return true;
+          }
+        }
+        return false;
+      }
+
+      @Override public boolean removeAll(Collection<?> c) {
+        boolean changed = false;
+        Iterator<Entry<K, V>> iterator = unfiltered.entries().iterator();
+        while (iterator.hasNext()) {
+          Entry<K, V> entry = iterator.next();
+          if (c.contains(entry.getValue()) && predicate.apply(entry)) {
+            iterator.remove();
+            changed = true;
+          }
+        }
+        return changed;
+      }
+
+      @Override public boolean retainAll(Collection<?> c) {
+        boolean changed = false;
+        Iterator<Entry<K, V>> iterator = unfiltered.entries().iterator();
+        while (iterator.hasNext()) {
+          Entry<K, V> entry = iterator.next();
+          if (!c.contains(entry.getValue()) && predicate.apply(entry)) {
+            iterator.remove();
+            changed = true;
+          }
+        }
+        return changed;
+      }
+    }
+
+    Collection<Entry<K, V>> entries;
+
+    @Override public Collection<Entry<K, V>> entries() {
+      return (entries == null)
+          ? entries = Collections2.filter(unfiltered.entries(), predicate)
+          : entries;
+    }
+
+    /**
+     * Remove all filtered asMap() entries that satisfy the predicate.
+     */
+    boolean removeEntriesIf(Predicate<Map.Entry<K, Collection<V>>> removalPredicate) {
+      Iterator<Map.Entry<K, Collection<V>>> iterator = unfiltered.asMap().entrySet().iterator();
+      boolean changed = false;
+      while (iterator.hasNext()) {
+        // Determine whether to remove the filtered values with this key.
+        Map.Entry<K, Collection<V>> entry = iterator.next();
+        K key = entry.getKey();
+        Collection<V> collection = entry.getValue();
+        Predicate<V> valuePredicate = new ValuePredicate(key);
+        Collection<V> filteredCollection = filterCollection(collection, valuePredicate);
+        Map.Entry<K, Collection<V>> filteredEntry = Maps.immutableEntry(key, filteredCollection);
+        if (removalPredicate.apply(filteredEntry) && !filteredCollection.isEmpty()) {
+          changed = true;
+          if (Iterables.all(collection, valuePredicate)) {
+            iterator.remove();  // Remove all values for the key.
+          } else {
+            filteredCollection.clear();  // Remove the filtered values only.
+          }
+        }
+      }
+      return changed;
+    }
+
+    Map<K, Collection<V>> asMap;
+
+    @Override public Map<K, Collection<V>> asMap() {
+      return (asMap == null) ? asMap = createAsMap() : asMap;
+    }
+
+    static final Predicate<Collection<?>> NOT_EMPTY = new Predicate<Collection<?>>() {
+      @Override public boolean apply(Collection<?> input) {
+        return !input.isEmpty();
+      }
+    };
+
+    Map<K, Collection<V>> createAsMap() {
+      // Select the values that satisify the predicate.
+      EntryTransformer<K, Collection<V>, Collection<V>> transformer
+          = new EntryTransformer<K, Collection<V>, Collection<V>>() {
+            @Override public Collection<V> transformEntry(K key, Collection<V> collection) {
+              return filterCollection(collection, new ValuePredicate(key));
+            }
+      };
+      Map<K, Collection<V>> transformed
+          = Maps.transformEntries(unfiltered.asMap(), transformer);
+
+      // Select the keys that have at least one value remaining.
+      Map<K, Collection<V>> filtered = Maps.filterValues(transformed, NOT_EMPTY);
+
+      // Override the removal methods, since removing a map entry should not
+      // affect values that don't satisfy the filter.
+      return new AsMap(filtered);
+    }
+
+    class AsMap extends ForwardingMap<K, Collection<V>> {
+     final Map<K, Collection<V>> delegate;
+
+      AsMap(Map<K, Collection<V>> delegate) {
+        this.delegate = delegate;
+      }
+
+      @Override protected Map<K, Collection<V>> delegate() {
+        return delegate;
+      }
+
+      @Override public Collection<V> remove(Object o) {
+        Collection<V> output = FilteredMultimap.this.removeAll(o);
+        return output.isEmpty() ? null : output;
+      }
+
+      @Override public void clear() {
+        FilteredMultimap.this.clear();
+      }
+
+      Set<K> keySet;
+
+      @Override public Set<K> keySet() {
+        return (keySet == null) ? keySet = new KeySet() : keySet;
+      }
+
+      class KeySet extends Maps.KeySet<K, Collection<V>> {
+        @Override Map<K, Collection<V>> map() {
+          return AsMap.this;
+        }
+
+        @Override public boolean remove(Object o) {
+           Collection<V> collection = delegate.get(o);
+           if (collection == null) {
+             return false;
+           }
+           collection.clear();
+           return true;
+        }
+
+        @Override public boolean removeAll(Collection<?> c) {
+          return Sets.removeAllImpl(this, c);
+        }
+
+        @Override public boolean retainAll(final Collection<?> c) {
+          Predicate<Map.Entry<K, Collection<V>>> removalPredicate
+              = new Predicate<Map.Entry<K, Collection<V>>>() {
+                @Override public boolean apply(Map.Entry<K, Collection<V>> entry) {
+                  return !c.contains(entry.getKey());
+                }
+              };
+          return removeEntriesIf(removalPredicate);
+        }
+      }
+
+      Values asMapValues;
+
+      @Override public Collection<Collection<V>> values() {
+        return (asMapValues == null) ? asMapValues = new Values() : asMapValues;
+      }
+
+      class Values extends Maps.Values<K, Collection<V>> {
+        @Override Map<K, Collection<V>> map() {
+          return AsMap.this;
+        }
+
+        @Override public boolean remove(Object o) {
+          for (Collection<V> collection : this) {
+            if (collection.equals(o)) {
+              collection.clear();
+              return true;
+            }
+          }
+          return false;
+        }
+
+        @Override public boolean removeAll(final Collection<?> c) {
+          Predicate<Map.Entry<K, Collection<V>>> removalPredicate
+              = new Predicate<Map.Entry<K, Collection<V>>>() {
+                @Override public boolean apply(Map.Entry<K, Collection<V>> entry) {
+                  return c.contains(entry.getValue());
+                }
+              };
+          return removeEntriesIf(removalPredicate);
+        }
+
+        @Override public boolean retainAll(final Collection<?> c) {
+          Predicate<Map.Entry<K, Collection<V>>> removalPredicate
+              = new Predicate<Map.Entry<K, Collection<V>>>() {
+                @Override public boolean apply(Map.Entry<K, Collection<V>> entry) {
+                  return !c.contains(entry.getValue());
+                }
+              };
+          return removeEntriesIf(removalPredicate);
+        }
+      }
+
+      EntrySet entrySet;
+
+      @Override public Set<Map.Entry<K, Collection<V>>> entrySet() {
+        return (entrySet == null) ? entrySet = new EntrySet(super.entrySet()) : entrySet;
+      }
+
+      class EntrySet extends Maps.EntrySet<K, Collection<V>> {
+        Set<Map.Entry<K, Collection<V>>> delegateEntries;
+
+        public EntrySet(Set<Map.Entry<K, Collection<V>>> delegateEntries) {
+          this.delegateEntries = delegateEntries;
+        }
+
+        @Override Map<K, Collection<V>> map() {
+          return AsMap.this;
+        }
+
+        @Override public Iterator<Map.Entry<K, Collection<V>>> iterator() {
+          return delegateEntries.iterator();
+        }
+
+        @Override public boolean remove(Object o) {
+          if (o instanceof Entry<?, ?>) {
+            Entry<?, ?> entry = (Entry<?, ?>) o;
+            Collection<V> collection = delegate.get(entry.getKey());
+            if (collection != null && collection.equals(entry.getValue())) {
+              collection.clear();
+              return true;
+            }
+          }
+          return false;
+        }
+
+        @Override public boolean removeAll(Collection<?> c) {
+          return Sets.removeAllImpl(this, c);
+        }
+
+        @Override public boolean retainAll(final Collection<?> c) {
+          Predicate<Map.Entry<K, Collection<V>>> removalPredicate
+              = new Predicate<Map.Entry<K, Collection<V>>>() {
+                @Override public boolean apply(Map.Entry<K, Collection<V>> entry) {
+                  return !c.contains(entry);
+                }
+              };
+          return removeEntriesIf(removalPredicate);
+        }
+      }
+    }
+
+    AbstractMultiset<K> keys;
+
+    @Override public Multiset<K> keys() {
+      return (keys == null) ? keys = new Keys() : keys;
+    }
+
+    class Keys extends Multimaps.Keys<K, V> {
+      @Override Multimap<K, V> multimap() {
+        return FilteredMultimap.this;
+      }
+
+      @Override public int remove(Object o, int occurrences) {
+        checkArgument(occurrences >= 0);
+        Collection<V> values = unfiltered.asMap().get(o);
+        if (values == null) {
+          return 0;
+        }
+        int priorCount = 0;
+        int removed = 0;
+        Iterator<V> iterator = values.iterator();
+        while (iterator.hasNext()) {
+          if (satisfiesPredicate(o, iterator.next())) {
+            priorCount++;
+            if (removed < occurrences) {
+              iterator.remove();
+              removed++;
+            }
+          }
+        }
+        return priorCount;
+      }
+
+      @Override Set<Multiset.Entry<K>> createEntrySet() {
+        return new EntrySet();
+      }
+
+      class EntrySet extends Multimaps.Keys<K, V>.KeysEntrySet {
+        @Override public boolean removeAll(Collection<?> c) {
+          return Sets.removeAllImpl(this, c);
+        }
+
+        @Override public boolean retainAll(final Collection<?> c) {
+          Predicate<Map.Entry<K, Collection<V>>> removalPredicate
+              = new Predicate<Map.Entry<K, Collection<V>>>() {
+                @Override public boolean apply(Map.Entry<K, Collection<V>> entry) {
+                  Multiset.Entry<K> multisetEntry
+                      = Multisets.immutableEntry(entry.getKey(), entry.getValue().size());
+                  return !c.contains(multisetEntry);
+                }
+              };
+          return removeEntriesIf(removalPredicate);
+        }
+      }
+    }
+  }
+
+  // TODO(jlevy): Create methods that filter a SetMultimap or SortedSetMultimap.
+}
diff --git a/guava/src/com/google/common/collect/Multiset.java b/guava/src/com/google/common/collect/Multiset.java
new file mode 100644
index 0000000..823750e
--- /dev/null
+++ b/guava/src/com/google/common/collect/Multiset.java
@@ -0,0 +1,436 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * A collection that supports order-independent equality, like {@link Set}, but
+ * may have duplicate elements. A multiset is also sometimes called a
+ * <i>bag</i>.
+ *
+ * <p>Elements of a multiset that are equal to one another (see "Note on
+ * element equivalence", below) are referred to as <i>occurrences</i> of the
+ * same single element. The total number of occurrences of an element in a
+ * multiset is called the <i>count</i> of that element (the terms "frequency"
+ * and "multiplicity" are equivalent, but not used in this API). Since the count
+ * of an element is represented as an {@code int}, a multiset may never contain
+ * more than {@link Integer#MAX_VALUE} occurrences of any one element.
+ *
+ * <p>{@code Multiset} refines the specifications of several methods from
+ * {@code Collection}. It also defines an additional query operation, {@link
+ * #count}, which returns the count of an element. There are five new
+ * bulk-modification operations, for example {@link #add(Object, int)}, to add
+ * or remove multiple occurrences of an element at once, or to set the count of
+ * an element to a specific value. These modification operations are optional,
+ * but implementations which support the standard collection operations {@link
+ * #add(Object)} or {@link #remove(Object)} are encouraged to implement the
+ * related methods as well. Finally, two collection views are provided: {@link
+ * #elementSet} contains the distinct elements of the multiset "with duplicates
+ * collapsed", and {@link #entrySet} is similar but contains {@link Entry
+ * Multiset.Entry} instances, each providing both a distinct element and the
+ * count of that element.
+ *
+ * <p>In addition to these required methods, implementations of {@code
+ * Multiset} are expected to provide two {@code static} creation methods:
+ * {@code create()}, returning an empty multiset, and {@code
+ * create(Iterable<? extends E>)}, returning a multiset containing the
+ * given initial elements. This is simply a refinement of {@code Collection}'s
+ * constructor recommendations, reflecting the new developments of Java 5.
+ *
+ * <p>As with other collection types, the modification operations are optional,
+ * and should throw {@link UnsupportedOperationException} when they are not
+ * implemented. Most implementations should support either all add operations
+ * or none of them, all removal operations or none of them, and if and only if
+ * all of these are supported, the {@code setCount} methods as well.
+ *
+ * <p>A multiset uses {@link Object#equals} to determine whether two instances
+ * should be considered "the same," <i>unless specified otherwise</i> by the
+ * implementation.
+ *
+ * <p>Common implementations include {@link ImmutableMultiset}, {@link
+ * HashMultiset}, and {@link ConcurrentHashMultiset}.
+ *
+ * <p>If your values may be zero, negative, or outside the range of an int, you
+ * may wish to use {@link com.google.common.util.concurrent.AtomicLongMap}
+ * instead. Note, however, that unlike {@code Multiset}, {@code AtomicLongMap}
+ * does not automatically remove zeros.
+ *
+ * @author Kevin Bourrillion
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible
+public interface Multiset<E> extends Collection<E> {
+  // Query Operations
+
+  /**
+   * Returns the number of occurrences of an element in this multiset (the
+   * <i>count</i> of the element). Note that for an {@link Object#equals}-based
+   * multiset, this gives the same result as {@link Collections#frequency}
+   * (which would presumably perform more poorly).
+   *
+   * <p><b>Note:</b> the utility method {@link Iterables#frequency} generalizes
+   * this operation; it correctly delegates to this method when dealing with a
+   * multiset, but it can also accept any other iterable type.
+   *
+   * @param element the element to count occurrences of
+   * @return the number of occurrences of the element in this multiset; possibly
+   *     zero but never negative
+   */
+  int count(@Nullable Object element);
+
+  // Bulk Operations
+
+  /**
+   * Adds a number of occurrences of an element to this multiset. Note that if
+   * {@code occurrences == 1}, this method has the identical effect to {@link
+   * #add(Object)}. This method is functionally equivalent (except in the case
+   * of overflow) to the call {@code addAll(Collections.nCopies(element,
+   * occurrences))}, which would presumably perform much more poorly.
+   *
+   * @param element the element to add occurrences of; may be null only if
+   *     explicitly allowed by the implementation
+   * @param occurrences the number of occurrences of the element to add. May be
+   *     zero, in which case no change will be made.
+   * @return the count of the element before the operation; possibly zero
+   * @throws IllegalArgumentException if {@code occurrences} is negative, or if
+   *     this operation would result in more than {@link Integer#MAX_VALUE}
+   *     occurrences of the element
+   * @throws NullPointerException if {@code element} is null and this
+   *     implementation does not permit null elements. Note that if {@code
+   *     occurrences} is zero, the implementation may opt to return normally.
+   */
+  int add(@Nullable E element, int occurrences);
+
+  /**
+   * Removes a number of occurrences of the specified element from this
+   * multiset. If the multiset contains fewer than this number of occurrences to
+   * begin with, all occurrences will be removed.  Note that if
+   * {@code occurrences == 1}, this is functionally equivalent to the call
+   * {@code remove(element)}.
+   *
+   * @param element the element to conditionally remove occurrences of
+   * @param occurrences the number of occurrences of the element to remove. May
+   *     be zero, in which case no change will be made.
+   * @return the count of the element before the operation; possibly zero
+   * @throws IllegalArgumentException if {@code occurrences} is negative
+   */
+  int remove(@Nullable Object element, int occurrences);
+
+  /**
+   * Adds or removes the necessary occurrences of an element such that the
+   * element attains the desired count.
+   *
+   * @param element the element to add or remove occurrences of; may be null
+   *     only if explicitly allowed by the implementation
+   * @param count the desired count of the element in this multiset
+   * @return the count of the element before the operation; possibly zero
+   * @throws IllegalArgumentException if {@code count} is negative
+   * @throws NullPointerException if {@code element} is null and this
+   *     implementation does not permit null elements. Note that if {@code
+   *     count} is zero, the implementor may optionally return zero instead.
+   */
+  int setCount(E element, int count);
+
+  /**
+   * Conditionally sets the count of an element to a new value, as described in
+   * {@link #setCount(Object, int)}, provided that the element has the expected
+   * current count. If the current count is not {@code oldCount}, no change is
+   * made.
+   *
+   * @param element the element to conditionally set the count of; may be null
+   *     only if explicitly allowed by the implementation
+   * @param oldCount the expected present count of the element in this multiset
+   * @param newCount the desired count of the element in this multiset
+   * @return {@code true} if the condition for modification was met. This
+   *     implies that the multiset was indeed modified, unless
+   *     {@code oldCount == newCount}.
+   * @throws IllegalArgumentException if {@code oldCount} or {@code newCount} is
+   *     negative
+   * @throws NullPointerException if {@code element} is null and the
+   *     implementation does not permit null elements. Note that if {@code
+   *     oldCount} and {@code newCount} are both zero, the implementor may
+   *     optionally return {@code true} instead.
+   */
+  boolean setCount(E element, int oldCount, int newCount);
+
+  // Views
+
+  /**
+   * Returns the set of distinct elements contained in this multiset. The
+   * element set is backed by the same data as the multiset, so any change to
+   * either is immediately reflected in the other. The order of the elements in
+   * the element set is unspecified.
+   *
+   * <p>If the element set supports any removal operations, these necessarily
+   * cause <b>all</b> occurrences of the removed element(s) to be removed from
+   * the multiset. Implementations are not expected to support the add
+   * operations, although this is possible.
+   *
+   * <p>A common use for the element set is to find the number of distinct
+   * elements in the multiset: {@code elementSet().size()}.
+   *
+   * @return a view of the set of distinct elements in this multiset
+   */
+  Set<E> elementSet();
+
+  /**
+   * Returns a view of the contents of this multiset, grouped into {@code
+   * Multiset.Entry} instances, each providing an element of the multiset and
+   * the count of that element. This set contains exactly one entry for each
+   * distinct element in the multiset (thus it always has the same size as the
+   * {@link #elementSet}). The order of the elements in the element set is
+   * unspecified.
+   *
+   * <p>The entry set is backed by the same data as the multiset, so any change
+   * to either is immediately reflected in the other. However, multiset changes
+   * may or may not be reflected in any {@code Entry} instances already
+   * retrieved from the entry set (this is implementation-dependent).
+   * Furthermore, implementations are not required to support modifications to
+   * the entry set at all, and the {@code Entry} instances themselves don't
+   * even have methods for modification. See the specific implementation class
+   * for more details on how its entry set handles modifications.
+   *
+   * @return a set of entries representing the data of this multiset
+   */
+  Set<Entry<E>> entrySet();
+
+  /**
+   * An unmodifiable element-count pair for a multiset. The {@link
+   * Multiset#entrySet} method returns a view of the multiset whose elements
+   * are of this class. A multiset implementation may return Entry instances
+   * that are either live "read-through" views to the Multiset, or immutable
+   * snapshots. Note that this type is unrelated to the similarly-named type
+   * {@code Map.Entry}.
+   *
+   * @since 2.0 (imported from Google Collections Library)
+   */
+  interface Entry<E> {
+
+    /**
+     * Returns the multiset element corresponding to this entry. Multiple calls
+     * to this method always return the same instance.
+     *
+     * @return the element corresponding to this entry
+     */
+    E getElement();
+
+    /**
+     * Returns the count of the associated element in the underlying multiset.
+     * This count may either be an unchanging snapshot of the count at the time
+     * the entry was retrieved, or a live view of the current count of the
+     * element in the multiset, depending on the implementation. Note that in
+     * the former case, this method can never return zero, while in the latter,
+     * it will return zero if all occurrences of the element were since removed
+     * from the multiset.
+     *
+     * @return the count of the element; never negative
+     */
+    int getCount();
+
+    /**
+     * {@inheritDoc}
+     *
+     * <p>Returns {@code true} if the given object is also a multiset entry and
+     * the two entries represent the same element and count. That is, two
+     * entries {@code a} and {@code b} are equal if: <pre>   {@code
+     *
+     *   Objects.equal(a.getElement(), b.getElement())
+     *       && a.getCount() == b.getCount()}</pre>
+     */
+    @Override
+    // TODO(kevinb): check this wrt TreeMultiset?
+    boolean equals(Object o);
+
+    /**
+     * {@inheritDoc}
+     *
+     * <p>The hash code of a multiset entry for element {@code element} and
+     * count {@code count} is defined as: <pre>   {@code
+     *
+     *   ((element == null) ? 0 : element.hashCode()) ^ count}</pre>
+     */
+    @Override
+    int hashCode();
+
+    /**
+     * Returns the canonical string representation of this entry, defined as
+     * follows. If the count for this entry is one, this is simply the string
+     * representation of the corresponding element. Otherwise, it is the string
+     * representation of the element, followed by the three characters {@code
+     * " x "} (space, letter x, space), followed by the count.
+     */
+    @Override
+    String toString();
+  }
+
+  // Comparison and hashing
+
+  /**
+   * Compares the specified object with this multiset for equality. Returns
+   * {@code true} if the given object is also a multiset and contains equal
+   * elements with equal counts, regardless of order.
+   */
+  @Override
+  // TODO(kevinb): caveats about equivalence-relation?
+  boolean equals(@Nullable Object object);
+
+  /**
+   * Returns the hash code for this multiset. This is defined as the sum of
+   * <pre>   {@code
+   *
+   *   ((element == null) ? 0 : element.hashCode()) ^ count(element)}</pre>
+   *
+   * over all distinct elements in the multiset. It follows that a multiset and
+   * its entry set always have the same hash code.
+   */
+  @Override
+  int hashCode();
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>It is recommended, though not mandatory, that this method return the
+   * result of invoking {@link #toString} on the {@link #entrySet}, yielding a
+   * result such as {@code [a x 3, c, d x 2, e]}.
+   */
+  @Override
+  String toString();
+
+  // Refined Collection Methods
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>Elements that occur multiple times in the multiset will appear
+   * multiple times in this iterator, though not necessarily sequentially.
+   */
+  @Override
+  Iterator<E> iterator();
+
+  /**
+   * Determines whether this multiset contains the specified element.
+   *
+   * <p>This method refines {@link Collection#contains} to further specify that
+   * it <b>may not</b> throw an exception in response to {@code element} being
+   * null or of the wrong type.
+   *
+   * @param element the element to check for
+   * @return {@code true} if this multiset contains at least one occurrence of
+   *     the element
+   */
+  @Override
+  boolean contains(@Nullable Object element);
+
+  /**
+   * Returns {@code true} if this multiset contains at least one occurrence of
+   * each element in the specified collection.
+   *
+   * <p>This method refines {@link Collection#containsAll} to further specify
+   * that it <b>may not</b> throw an exception in response to any of {@code
+   * elements} being null or of the wrong type.
+   *
+   * <p><b>Note:</b> this method does not take into account the occurrence
+   * count of an element in the two collections; it may still return {@code
+   * true} even if {@code elements} contains several occurrences of an element
+   * and this multiset contains only one. This is no different than any other
+   * collection type like {@link List}, but it may be unexpected to the user of
+   * a multiset.
+   *
+   * @param elements the collection of elements to be checked for containment in
+   *     this multiset
+   * @return {@code true} if this multiset contains at least one occurrence of
+   *     each element contained in {@code elements}
+   * @throws NullPointerException if {@code elements} is null
+   */
+  @Override
+  boolean containsAll(Collection<?> elements);
+
+  /**
+   * Adds a single occurrence of the specified element to this multiset.
+   *
+   * <p>This method refines {@link Collection#add}, which only <i>ensures</i>
+   * the presence of the element, to further specify that a successful call must
+   * always increment the count of the element, and the overall size of the
+   * collection, by one.
+   *
+   * @param element the element to add one occurrence of; may be null only if
+   *     explicitly allowed by the implementation
+   * @return {@code true} always, since this call is required to modify the
+   *     multiset, unlike other {@link Collection} types
+   * @throws NullPointerException if {@code element} is null and this
+   *     implementation does not permit null elements
+   * @throws IllegalArgumentException if {@link Integer#MAX_VALUE} occurrences
+   *     of {@code element} are already contained in this multiset
+   */
+  @Override
+  boolean add(E element);
+
+  /**
+   * Removes a <i>single</i> occurrence of the specified element from this
+   * multiset, if present.
+   *
+   * <p>This method refines {@link Collection#remove} to further specify that it
+   * <b>may not</b> throw an exception in response to {@code element} being null
+   * or of the wrong type.
+   *
+   * @param element the element to remove one occurrence of
+   * @return {@code true} if an occurrence was found and removed
+   */
+  @Override
+  boolean remove(@Nullable Object element);
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p><b>Note:</b> This method ignores how often any element might appear in
+   * {@code c}, and only cares whether or not an element appears at all.
+   * If you wish to remove one occurrence in this multiset for every occurrence
+   * in {@code c}, see {@link Multisets#removeOccurrences(Multiset, Multiset)}.
+   * 
+   * <p>This method refines {@link Collection#removeAll} to further specify that
+   * it <b>may not</b> throw an exception in response to any of {@code elements}
+   * being null or of the wrong type. 
+   */
+  @Override
+  boolean removeAll(Collection<?> c);
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p><b>Note:</b> This method ignores how often any element might appear in
+   * {@code c}, and only cares whether or not an element appears at all.
+   * If you wish to remove one occurrence in this multiset for every occurrence
+   * in {@code c}, see {@link Multisets#retainOccurrences(Multiset, Multiset)}.
+   * 
+   * <p>This method refines {@link Collection#retainAll} to further specify that
+   * it <b>may not</b> throw an exception in response to any of {@code elements}
+   * being null or of the wrong type.
+   * 
+   * @see Multisets#retainOccurrences(Multiset, Multiset)
+   */
+  @Override
+  boolean retainAll(Collection<?> c);
+}
diff --git a/guava/src/com/google/common/collect/Multisets.java b/guava/src/com/google/common/collect/Multisets.java
new file mode 100644
index 0000000..dbd54c3
--- /dev/null
+++ b/guava/src/com/google/common/collect/Multisets.java
@@ -0,0 +1,972 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkState;
+
+import java.io.Serializable;
+import java.util.AbstractSet;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+import java.util.NoSuchElementException;
+import java.util.Set;
+import java.util.SortedSet;
+
+import javax.annotation.Nullable;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Function;
+import com.google.common.base.Objects;
+import com.google.common.collect.Multiset.Entry;
+import com.google.common.primitives.Ints;
+
+/**
+ * Provides static utility methods for creating and working with {@link
+ * Multiset} instances.
+ *
+ * @author Kevin Bourrillion
+ * @author Mike Bostock
+ * @author Louis Wasserman
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible
+public final class Multisets {
+  private Multisets() {}
+
+  /**
+   * Returns an unmodifiable view of the specified multiset. Query operations on
+   * the returned multiset "read through" to the specified multiset, and
+   * attempts to modify the returned multiset result in an
+   * {@link UnsupportedOperationException}.
+   *
+   * <p>The returned multiset will be serializable if the specified multiset is
+   * serializable.
+   *
+   * @param multiset the multiset for which an unmodifiable view is to be
+   *     generated
+   * @return an unmodifiable view of the multiset
+   */
+  public static <E> Multiset<E> unmodifiableMultiset(
+      Multiset<? extends E> multiset) {
+    if (multiset instanceof UnmodifiableMultiset ||
+        multiset instanceof ImmutableMultiset) {
+      // Since it's unmodifiable, the covariant cast is safe
+      @SuppressWarnings("unchecked")
+      Multiset<E> result = (Multiset<E>) multiset;
+      return result;
+    }
+    return new UnmodifiableMultiset<E>(checkNotNull(multiset));
+  }
+
+  /**
+   * Simply returns its argument.
+   *
+   * @deprecated no need to use this
+   * @since 10.0
+   */
+  @Deprecated public static <E> Multiset<E> unmodifiableMultiset(
+      ImmutableMultiset<E> multiset) {
+    return checkNotNull(multiset);
+  }
+
+  static class UnmodifiableMultiset<E>
+      extends ForwardingMultiset<E> implements Serializable {
+    final Multiset<? extends E> delegate;
+
+    UnmodifiableMultiset(Multiset<? extends E> delegate) {
+      this.delegate = delegate;
+    }
+
+    @SuppressWarnings("unchecked")
+    @Override protected Multiset<E> delegate() {
+      // This is safe because all non-covariant methods are overriden
+      return (Multiset<E>) delegate;
+    }
+
+    transient Set<E> elementSet;
+
+    Set<E> createElementSet() {
+      return Collections.<E>unmodifiableSet(delegate.elementSet());
+    }
+
+    @Override
+    public Set<E> elementSet() {
+      Set<E> es = elementSet;
+      return (es == null) ? elementSet = createElementSet() : es;
+    }
+
+    transient Set<Multiset.Entry<E>> entrySet;
+
+    @SuppressWarnings("unchecked")
+    @Override public Set<Multiset.Entry<E>> entrySet() {
+      Set<Multiset.Entry<E>> es = entrySet;
+      return (es == null)
+          // Safe because the returned set is made unmodifiable and Entry
+          // itself is readonly
+          ? entrySet = (Set) Collections.unmodifiableSet(delegate.entrySet())
+          : es;
+    }
+
+    @SuppressWarnings("unchecked")
+    @Override public Iterator<E> iterator() {
+      // Safe because the returned Iterator is made unmodifiable
+      return (Iterator<E>) Iterators.unmodifiableIterator(delegate.iterator());
+    }
+
+    @Override public boolean add(E element) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override public int add(E element, int occurences) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override public boolean addAll(Collection<? extends E> elementsToAdd) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override public boolean remove(Object element) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override public int remove(Object element, int occurrences) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override public boolean removeAll(Collection<?> elementsToRemove) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override public boolean retainAll(Collection<?> elementsToRetain) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override public void clear() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override public int setCount(E element, int count) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override public boolean setCount(E element, int oldCount, int newCount) {
+      throw new UnsupportedOperationException();
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  /**
+   * Returns an unmodifiable view of the specified sorted multiset. Query
+   * operations on the returned multiset "read through" to the specified
+   * multiset, and attempts to modify the returned multiset result in an {@link
+   * UnsupportedOperationException}.
+   *
+   * <p>The returned multiset will be serializable if the specified multiset is
+   * serializable.
+   *
+   * @param sortedMultiset the sorted multiset for which an unmodifiable view is
+   *     to be generated
+   * @return an unmodifiable view of the multiset
+   * @since 11.0
+   */
+  @Beta
+  public static <E> SortedMultiset<E> unmodifiableSortedMultiset(
+      SortedMultiset<E> sortedMultiset) {
+    return new UnmodifiableSortedMultiset<E>(checkNotNull(sortedMultiset));
+  }
+
+  private static final class UnmodifiableSortedMultiset<E>
+      extends UnmodifiableMultiset<E> implements SortedMultiset<E> {
+    private UnmodifiableSortedMultiset(SortedMultiset<E> delegate) {
+      super(delegate);
+    }
+
+    @Override
+    protected SortedMultiset<E> delegate() {
+      return (SortedMultiset<E>) super.delegate();
+    }
+
+    @Override
+    public Comparator<? super E> comparator() {
+      return delegate().comparator();
+    }
+
+    @Override
+    SortedSet<E> createElementSet() {
+      return Collections.unmodifiableSortedSet(delegate().elementSet());
+    }
+
+    @Override
+    public SortedSet<E> elementSet() {
+      return (SortedSet<E>) super.elementSet();
+    }
+
+    private transient UnmodifiableSortedMultiset<E> descendingMultiset;
+
+    @Override
+    public SortedMultiset<E> descendingMultiset() {
+      UnmodifiableSortedMultiset<E> result = descendingMultiset;
+      if (result == null) {
+        result = new UnmodifiableSortedMultiset<E>(
+            delegate().descendingMultiset());
+        result.descendingMultiset = this;
+        return descendingMultiset = result;
+      }
+      return result;
+    }
+
+    @Override
+    public Entry<E> firstEntry() {
+      return delegate().firstEntry();
+    }
+
+    @Override
+    public Entry<E> lastEntry() {
+      return delegate().lastEntry();
+    }
+
+    @Override
+    public Entry<E> pollFirstEntry() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public Entry<E> pollLastEntry() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public SortedMultiset<E> headMultiset(E upperBound, BoundType boundType) {
+      return unmodifiableSortedMultiset(
+          delegate().headMultiset(upperBound, boundType));
+    }
+
+    @Override
+    public SortedMultiset<E> subMultiset(
+        E lowerBound, BoundType lowerBoundType,
+        E upperBound, BoundType upperBoundType) {
+      return unmodifiableSortedMultiset(delegate().subMultiset(
+          lowerBound, lowerBoundType, upperBound, upperBoundType));
+    }
+
+    @Override
+    public SortedMultiset<E> tailMultiset(E lowerBound, BoundType boundType) {
+      return unmodifiableSortedMultiset(
+          delegate().tailMultiset(lowerBound, boundType));
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  /**
+   * Returns an immutable multiset entry with the specified element and count.
+   * The entry will be serializable if {@code e} is.
+   *
+   * @param e the element to be associated with the returned entry
+   * @param n the count to be associated with the returned entry
+   * @throws IllegalArgumentException if {@code n} is negative
+   */
+  public static <E> Multiset.Entry<E> immutableEntry(@Nullable E e, int n) {
+    return new ImmutableEntry<E>(e, n);
+  }
+
+  static final class ImmutableEntry<E> extends AbstractEntry<E> implements
+      Serializable {
+    @Nullable final E element;
+    final int count;
+
+    ImmutableEntry(@Nullable E element, int count) {
+      this.element = element;
+      this.count = count;
+      checkArgument(count >= 0);
+    }
+
+    @Override
+    @Nullable public E getElement() {
+      return element;
+    }
+
+    @Override
+    public int getCount() {
+      return count;
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  /**
+   * Returns a multiset view of the specified set. The multiset is backed by the
+   * set, so changes to the set are reflected in the multiset, and vice versa.
+   * If the set is modified while an iteration over the multiset is in progress
+   * (except through the iterator's own {@code remove} operation) the results of
+   * the iteration are undefined.
+   *
+   * <p>The multiset supports element removal, which removes the corresponding
+   * element from the set. It does not support the {@code add} or {@code addAll}
+   * operations, nor does it support the use of {@code setCount} to add
+   * elements.
+   *
+   * <p>The returned multiset will be serializable if the specified set is
+   * serializable. The multiset is threadsafe if the set is threadsafe.
+   *
+   * @param set the backing set for the returned multiset view
+   */
+  static <E> Multiset<E> forSet(Set<E> set) {
+    return new SetMultiset<E>(set);
+  }
+
+  /** @see Multisets#forSet */
+  private static class SetMultiset<E> extends ForwardingCollection<E>
+      implements Multiset<E>, Serializable {
+    final Set<E> delegate;
+
+    SetMultiset(Set<E> set) {
+      delegate = checkNotNull(set);
+    }
+
+    @Override protected Set<E> delegate() {
+      return delegate;
+    }
+
+    @Override
+    public int count(Object element) {
+      return delegate.contains(element) ? 1 : 0;
+    }
+
+    @Override
+    public int add(E element, int occurrences) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public int remove(Object element, int occurrences) {
+      if (occurrences == 0) {
+        return count(element);
+      }
+      checkArgument(occurrences > 0);
+      return delegate.remove(element) ? 1 : 0;
+    }
+
+    transient Set<E> elementSet;
+
+    @Override
+    public Set<E> elementSet() {
+      Set<E> es = elementSet;
+      return (es == null) ? elementSet = new ElementSet() : es;
+    }
+
+    transient Set<Entry<E>> entrySet;
+
+    @Override public Set<Entry<E>> entrySet() {
+      Set<Entry<E>> es = entrySet;
+      if (es == null) {
+        es = entrySet = new EntrySet<E>() {
+          @Override Multiset<E> multiset() {
+            return SetMultiset.this;
+          }
+
+          @Override public Iterator<Entry<E>> iterator() {
+            return Iterators.transform(delegate.iterator(),
+                new Function<E, Entry<E>>() {
+                  @Override public Entry<E> apply(E elem) {
+                    return immutableEntry(elem, 1);
+                  }
+                });
+          }
+
+          @Override public int size() {
+            return delegate.size();
+          }
+        };
+      }
+      return es;
+    }
+
+    @Override public boolean add(E o) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override public boolean addAll(Collection<? extends E> c) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public int setCount(E element, int count) {
+      checkNonnegative(count, "count");
+
+      if (count == count(element)) {
+        return count;
+      } else if (count == 0) {
+        remove(element);
+        return 1;
+      } else {
+        throw new UnsupportedOperationException();
+      }
+    }
+
+    @Override
+    public boolean setCount(E element, int oldCount, int newCount) {
+      return setCountImpl(this, element, oldCount, newCount);
+    }
+
+    @Override public boolean equals(@Nullable Object object) {
+      if (object instanceof Multiset) {
+        Multiset<?> that = (Multiset<?>) object;
+        return this.size() == that.size() && delegate.equals(that.elementSet());
+      }
+      return false;
+    }
+
+    @Override public int hashCode() {
+      int sum = 0;
+      for (E e : this) {
+        sum += ((e == null) ? 0 : e.hashCode()) ^ 1;
+      }
+      return sum;
+    }
+
+    /** @see SetMultiset#elementSet */
+    class ElementSet extends ForwardingSet<E> {
+      @Override protected Set<E> delegate() {
+        return delegate;
+      }
+
+      @Override public boolean add(E o) {
+        throw new UnsupportedOperationException();
+      }
+
+      @Override public boolean addAll(Collection<? extends E> c) {
+        throw new UnsupportedOperationException();
+      }
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  /**
+   * Returns the expected number of distinct elements given the specified
+   * elements. The number of distinct elements is only computed if {@code
+   * elements} is an instance of {@code Multiset}; otherwise the default value
+   * of 11 is returned.
+   */
+  static int inferDistinctElements(Iterable<?> elements) {
+    if (elements instanceof Multiset) {
+      return ((Multiset<?>) elements).elementSet().size();
+    }
+    return 11; // initial capacity will be rounded up to 16
+  }
+
+  /**
+   * Returns an unmodifiable <b>view</b> of the intersection of two multisets.
+   * An element's count in the multiset is the smaller of its counts in the two
+   * backing multisets. The iteration order of the returned multiset matches the
+   * element set of {@code multiset1}, with repeated occurrences of the same
+   * element appearing consecutively.
+   *
+   * <p>Results are undefined if {@code multiset1} and {@code multiset2} are
+   * based on different equivalence relations (as {@code HashMultiset} and
+   * {@code TreeMultiset} are).
+   *
+   * @since 2.0
+   */
+  public static <E> Multiset<E> intersection(
+      final Multiset<E> multiset1, final Multiset<?> multiset2) {
+    checkNotNull(multiset1);
+    checkNotNull(multiset2);
+
+    return new AbstractMultiset<E>() {
+      @Override
+      public int count(Object element) {
+        int count1 = multiset1.count(element);
+        return (count1 == 0) ? 0 : Math.min(count1, multiset2.count(element));
+      }
+
+      @Override
+      Set<E> createElementSet() {
+        return Sets.intersection(
+            multiset1.elementSet(), multiset2.elementSet());
+      }
+
+      @Override
+      Iterator<Entry<E>> entryIterator() {
+        final Iterator<Entry<E>> iterator1 = multiset1.entrySet().iterator();
+        return new AbstractIterator<Entry<E>>() {
+          @Override
+          protected Entry<E> computeNext() {
+            while (iterator1.hasNext()) {
+              Entry<E> entry1 = iterator1.next();
+              E element = entry1.getElement();
+              int count = Math.min(entry1.getCount(), multiset2.count(element));
+              if (count > 0) {
+                return Multisets.immutableEntry(element, count);
+              }
+            }
+            return endOfData();
+          }
+        };
+      }
+
+      @Override
+      int distinctElements() {
+        return elementSet().size();
+      }
+    };
+  }
+
+  /**
+   * Returns {@code true} if {@code subMultiset.count(o) <=
+   * superMultiset.count(o)} for all {@code o}.
+   *
+   * @since 10.0
+   */
+  @Beta
+  public static boolean containsOccurrences(
+      Multiset<?> superMultiset, Multiset<?> subMultiset) {
+    checkNotNull(superMultiset);
+    checkNotNull(subMultiset);
+    for (Entry<?> entry : subMultiset.entrySet()) {
+      int superCount = superMultiset.count(entry.getElement());
+      if (superCount < entry.getCount()) {
+        return false;
+      }
+    }
+    return true;
+  }
+
+  /**
+   * Modifies {@code multisetToModify} so that its count for an element
+   * {@code e} is at most {@code multisetToRetain.count(e)}.
+   *
+   * <p>To be precise, {@code multisetToModify.count(e)} is set to
+   * {@code Math.min(multisetToModify.count(e),
+   * multisetToRetain.count(e))}. This is similar to
+   * {@link #intersection(Multiset, Multiset) intersection}
+   * {@code (multisetToModify, multisetToRetain)}, but mutates
+   * {@code multisetToModify} instead of returning a view.
+   *
+   * <p>In contrast, {@code multisetToModify.retainAll(multisetToRetain)} keeps
+   * all occurrences of elements that appear at all in {@code
+   * multisetToRetain}, and deletes all occurrences of all other elements.
+   *
+   * @return {@code true} if {@code multisetToModify} was changed as a result
+   *         of this operation
+   * @since 10.0
+   */
+  @Beta public static boolean retainOccurrences(Multiset<?> multisetToModify,
+      Multiset<?> multisetToRetain) {
+    return retainOccurrencesImpl(multisetToModify, multisetToRetain);
+  }
+
+  /**
+   * Delegate implementation which cares about the element type.
+   */
+  private static <E> boolean retainOccurrencesImpl(
+      Multiset<E> multisetToModify, Multiset<?> occurrencesToRetain) {
+    checkNotNull(multisetToModify);
+    checkNotNull(occurrencesToRetain);
+    // Avoiding ConcurrentModificationExceptions is tricky.
+    Iterator<Entry<E>> entryIterator = multisetToModify.entrySet().iterator();
+    boolean changed = false;
+    while (entryIterator.hasNext()) {
+      Entry<E> entry = entryIterator.next();
+      int retainCount = occurrencesToRetain.count(entry.getElement());
+      if (retainCount == 0) {
+        entryIterator.remove();
+        changed = true;
+      } else if (retainCount < entry.getCount()) {
+        multisetToModify.setCount(entry.getElement(), retainCount);
+        changed = true;
+      }
+    }
+    return changed;
+  }
+
+  /**
+   * For each occurrence of an element {@code e} in {@code occurrencesToRemove},
+   * removes one occurrence of {@code e} in {@code multisetToModify}.
+   *
+   * <p>Equivalently, this method modifies {@code multisetToModify} so that
+   * {@code multisetToModify.count(e)} is set to
+   * {@code Math.max(0, multisetToModify.count(e) -
+   * occurrencesToRemove.count(e))}.
+   *
+   * <p>This is <i>not</i> the same as {@code multisetToModify.}
+   * {@link Multiset#removeAll removeAll}{@code (occurrencesToRemove)}, which
+   * removes all occurrences of elements that appear in
+   * {@code occurrencesToRemove}. However, this operation <i>is</i> equivalent
+   * to, albeit more efficient than, the following: <pre>   {@code
+   *
+   *   for (E e : occurrencesToRemove) {
+   *     multisetToModify.remove(e);
+   *   }}</pre>
+   *
+   * @return {@code true} if {@code multisetToModify} was changed as a result of
+   *         this operation
+   * @since 10.0
+   */
+  @Beta public static boolean removeOccurrences(
+      Multiset<?> multisetToModify, Multiset<?> occurrencesToRemove) {
+    return removeOccurrencesImpl(multisetToModify, occurrencesToRemove);
+  }
+
+  /**
+   * Delegate that cares about the element types in occurrencesToRemove.
+   */
+  private static <E> boolean removeOccurrencesImpl(
+      Multiset<E> multisetToModify, Multiset<?> occurrencesToRemove) {
+    // TODO(user): generalize to removing an Iterable, perhaps
+    checkNotNull(multisetToModify);
+    checkNotNull(occurrencesToRemove);
+
+    boolean changed = false;
+    Iterator<Entry<E>> entryIterator = multisetToModify.entrySet().iterator();
+    while (entryIterator.hasNext()) {
+      Entry<E> entry = entryIterator.next();
+      int removeCount = occurrencesToRemove.count(entry.getElement());
+      if (removeCount >= entry.getCount()) {
+        entryIterator.remove();
+        changed = true;
+      } else if (removeCount > 0) {
+        multisetToModify.remove(entry.getElement(), removeCount);
+        changed = true;
+      }
+    }
+    return changed;
+  }
+
+  /**
+   * Implementation of the {@code equals}, {@code hashCode}, and
+   * {@code toString} methods of {@link Multiset.Entry}.
+   */
+  abstract static class AbstractEntry<E> implements Multiset.Entry<E> {
+    /**
+     * Indicates whether an object equals this entry, following the behavior
+     * specified in {@link Multiset.Entry#equals}.
+     */
+    @Override public boolean equals(@Nullable Object object) {
+      if (object instanceof Multiset.Entry) {
+        Multiset.Entry<?> that = (Multiset.Entry<?>) object;
+        return this.getCount() == that.getCount()
+            && Objects.equal(this.getElement(), that.getElement());
+      }
+      return false;
+    }
+
+    /**
+     * Return this entry's hash code, following the behavior specified in
+     * {@link Multiset.Entry#hashCode}.
+     */
+    @Override public int hashCode() {
+      E e = getElement();
+      return ((e == null) ? 0 : e.hashCode()) ^ getCount();
+    }
+
+    /**
+     * Returns a string representation of this multiset entry. The string
+     * representation consists of the associated element if the associated count
+     * is one, and otherwise the associated element followed by the characters
+     * " x " (space, x and space) followed by the count. Elements and counts are
+     * converted to strings as by {@code String.valueOf}.
+     */
+    @Override public String toString() {
+      String text = String.valueOf(getElement());
+      int n = getCount();
+      return (n == 1) ? text : (text + " x " + n);
+    }
+  }
+
+  /**
+   * An implementation of {@link Multiset#equals}.
+   */
+  static boolean equalsImpl(Multiset<?> multiset, @Nullable Object object) {
+    if (object == multiset) {
+      return true;
+    }
+    if (object instanceof Multiset) {
+      Multiset<?> that = (Multiset<?>) object;
+      /*
+       * We can't simply check whether the entry sets are equal, since that
+       * approach fails when a TreeMultiset has a comparator that returns 0
+       * when passed unequal elements.
+       */
+
+      if (multiset.size() != that.size()
+          || multiset.entrySet().size() != that.entrySet().size()) {
+        return false;
+      }
+      for (Entry<?> entry : that.entrySet()) {
+        if (multiset.count(entry.getElement()) != entry.getCount()) {
+          return false;
+        }
+      }
+      return true;
+    }
+    return false;
+  }
+
+  /**
+   * An implementation of {@link Multiset#addAll}.
+   */
+  static <E> boolean addAllImpl(
+      Multiset<E> self, Collection<? extends E> elements) {
+    if (elements.isEmpty()) {
+      return false;
+    }
+    if (elements instanceof Multiset) {
+      Multiset<? extends E> that = cast(elements);
+      for (Entry<? extends E> entry : that.entrySet()) {
+        self.add(entry.getElement(), entry.getCount());
+      }
+    } else {
+      Iterators.addAll(self, elements.iterator());
+    }
+    return true;
+  }
+
+  /**
+   * An implementation of {@link Multiset#removeAll}.
+   */
+  static boolean removeAllImpl(
+      Multiset<?> self, Collection<?> elementsToRemove) {
+    Collection<?> collection = (elementsToRemove instanceof Multiset)
+        ? ((Multiset<?>) elementsToRemove).elementSet() : elementsToRemove;
+
+    return self.elementSet().removeAll(collection);
+  }
+
+  /**
+   * An implementation of {@link Multiset#retainAll}.
+   */
+  static boolean retainAllImpl(
+      Multiset<?> self, Collection<?> elementsToRetain) {
+    Collection<?> collection = (elementsToRetain instanceof Multiset)
+        ? ((Multiset<?>) elementsToRetain).elementSet() : elementsToRetain;
+
+    return self.elementSet().retainAll(collection);
+  }
+
+  /**
+   * An implementation of {@link Multiset#setCount(Object, int)}.
+   */
+  static <E> int setCountImpl(Multiset<E> self, E element, int count) {
+    checkNonnegative(count, "count");
+
+    int oldCount = self.count(element);
+
+    int delta = count - oldCount;
+    if (delta > 0) {
+      self.add(element, delta);
+    } else if (delta < 0) {
+      self.remove(element, -delta);
+    }
+
+    return oldCount;
+  }
+
+  /**
+   * An implementation of {@link Multiset#setCount(Object, int, int)}.
+   */
+  static <E> boolean setCountImpl(
+      Multiset<E> self, E element, int oldCount, int newCount) {
+    checkNonnegative(oldCount, "oldCount");
+    checkNonnegative(newCount, "newCount");
+
+    if (self.count(element) == oldCount) {
+      self.setCount(element, newCount);
+      return true;
+    } else {
+      return false;
+    }
+  }
+
+  static abstract class ElementSet<E> extends AbstractSet<E> {
+    abstract Multiset<E> multiset();
+
+    @Override public void clear() {
+      multiset().clear();
+    }
+
+    @Override public boolean contains(Object o) {
+      return multiset().contains(o);
+    }
+
+    @Override public boolean containsAll(Collection<?> c) {
+      return multiset().containsAll(c);
+    }
+
+    @Override public boolean isEmpty() {
+      return multiset().isEmpty();
+    }
+
+    @Override public Iterator<E> iterator() {
+      return Iterators.transform(multiset().entrySet().iterator(),
+          new Function<Entry<E>, E>() {
+            @Override public E apply(Entry<E> entry) {
+              return entry.getElement();
+            }
+          });
+    }
+
+    @Override
+    public boolean remove(Object o) {
+      int count = multiset().count(o);
+      if (count > 0) {
+        multiset().remove(o, count);
+        return true;
+      }
+      return false;
+    }
+
+    @Override public int size() {
+      return multiset().entrySet().size();
+    }
+  }
+
+  static abstract class EntrySet<E> extends AbstractSet<Entry<E>>{
+    abstract Multiset<E> multiset();
+
+    @Override public boolean contains(@Nullable Object o) {
+      if (o instanceof Entry) {
+        @SuppressWarnings("cast")
+        Entry<?> entry = (Entry<?>) o;
+        if (entry.getCount() <= 0) {
+          return false;
+        }
+        int count = multiset().count(entry.getElement());
+        return count == entry.getCount();
+
+      }
+      return false;
+    }
+
+    @SuppressWarnings("cast")
+    @Override public boolean remove(Object o) {
+      return contains(o)
+          && multiset().elementSet().remove(((Entry<?>) o).getElement());
+    }
+
+    @Override public void clear() {
+      multiset().clear();
+    }
+  }
+
+  /**
+   * An implementation of {@link Multiset#iterator}.
+   */
+  static <E> Iterator<E> iteratorImpl(Multiset<E> multiset) {
+    return new MultisetIteratorImpl<E>(
+        multiset, multiset.entrySet().iterator());
+  }
+
+  static final class MultisetIteratorImpl<E> implements Iterator<E> {
+    private final Multiset<E> multiset;
+    private final Iterator<Entry<E>> entryIterator;
+    private Entry<E> currentEntry;
+    /** Count of subsequent elements equal to current element */
+    private int laterCount;
+    /** Count of all elements equal to current element */
+    private int totalCount;
+    private boolean canRemove;
+
+    MultisetIteratorImpl(
+        Multiset<E> multiset, Iterator<Entry<E>> entryIterator) {
+      this.multiset = multiset;
+      this.entryIterator = entryIterator;
+    }
+
+    @Override
+    public boolean hasNext() {
+      return laterCount > 0 || entryIterator.hasNext();
+    }
+
+    @Override
+    public E next() {
+      if (!hasNext()) {
+        throw new NoSuchElementException();
+      }
+      if (laterCount == 0) {
+        currentEntry = entryIterator.next();
+        totalCount = laterCount = currentEntry.getCount();
+      }
+      laterCount--;
+      canRemove = true;
+      return currentEntry.getElement();
+    }
+
+    @Override
+    public void remove() {
+      checkState(
+          canRemove, "no calls to next() since the last call to remove()");
+      if (totalCount == 1) {
+        entryIterator.remove();
+      } else {
+        multiset.remove(currentEntry.getElement());
+      }
+      totalCount--;
+      canRemove = false;
+    }
+  }
+
+  /**
+   * An implementation of {@link Multiset#size}.
+   */
+  static int sizeImpl(Multiset<?> multiset) {
+    long size = 0;
+    for (Entry<?> entry : multiset.entrySet()) {
+      size += entry.getCount();
+    }
+    return Ints.saturatedCast(size);
+  }
+
+  static void checkNonnegative(int count, String name) {
+    checkArgument(count >= 0, "%s cannot be negative: %s", name, count);
+  }
+
+  /**
+   * Used to avoid http://bugs.sun.com/view_bug.do?bug_id=6558557
+   */
+  static <T> Multiset<T> cast(Iterable<T> iterable) {
+    return (Multiset<T>) iterable;
+  }
+
+  private static final Ordering<Entry<?>> DECREASING_COUNT_ORDERING = new Ordering<Entry<?>>() {
+    @Override
+    public int compare(Entry<?> entry1, Entry<?> entry2) {
+      return Ints.compare(entry2.getCount(), entry1.getCount());
+    }
+  };
+
+  /**
+   * Returns a copy of {@code multiset} as an {@link ImmutableMultiset} whose iteration order is
+   * highest count first, with ties broken by the iteration order of the original multiset.
+   *
+   * @since 11.0
+   */
+  @Beta
+  public static <E> ImmutableMultiset<E> copyHighestCountFirst(Multiset<E> multiset) {
+    List<Entry<E>> sortedEntries =
+        Multisets.DECREASING_COUNT_ORDERING.sortedCopy(multiset.entrySet());
+    return ImmutableMultiset.copyFromEntries(sortedEntries);
+  }
+}
diff --git a/guava/src/com/google/common/collect/MutableClassToInstanceMap.java b/guava/src/com/google/common/collect/MutableClassToInstanceMap.java
new file mode 100644
index 0000000..b40e801
--- /dev/null
+++ b/guava/src/com/google/common/collect/MutableClassToInstanceMap.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.collect.MapConstraints.ConstrainedMap;
+import com.google.common.primitives.Primitives;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * A mutable class-to-instance map backed by an arbitrary user-provided map.
+ * See also {@link ImmutableClassToInstanceMap}.
+ *
+ * @author Kevin Bourrillion
+ * @since 2.0 (imported from Google Collections Library)
+ */
+public final class MutableClassToInstanceMap<B>
+    extends ConstrainedMap<Class<? extends B>, B>
+    implements ClassToInstanceMap<B> {
+
+  /**
+   * Returns a new {@code MutableClassToInstanceMap} instance backed by a {@link
+   * HashMap} using the default initial capacity and load factor.
+   */
+  public static <B> MutableClassToInstanceMap<B> create() {
+    return new MutableClassToInstanceMap<B>(
+        new HashMap<Class<? extends B>, B>());
+  }
+
+  /**
+   * Returns a new {@code MutableClassToInstanceMap} instance backed by a given
+   * empty {@code backingMap}. The caller surrenders control of the backing map,
+   * and thus should not allow any direct references to it to remain accessible.
+   */
+  public static <B> MutableClassToInstanceMap<B> create(
+      Map<Class<? extends B>, B> backingMap) {
+    return new MutableClassToInstanceMap<B>(backingMap);
+  }
+
+  private MutableClassToInstanceMap(Map<Class<? extends B>, B> delegate) {
+    super(delegate, VALUE_CAN_BE_CAST_TO_KEY);
+  }
+
+  private static final MapConstraint<Class<?>, Object> VALUE_CAN_BE_CAST_TO_KEY
+      = new MapConstraint<Class<?>, Object>() {
+    @Override
+    public void checkKeyValue(Class<?> key, Object value) {
+      cast(key, value);
+    }
+  };
+
+  @Override
+  public <T extends B> T putInstance(Class<T> type, T value) {
+    return cast(type, put(type, value));
+  }
+
+  @Override
+  public <T extends B> T getInstance(Class<T> type) {
+    return cast(type, get(type));
+  }
+
+  private static <B, T extends B> T cast(Class<T> type, B value) {
+    return Primitives.wrap(type).cast(value);
+  }
+
+  private static final long serialVersionUID = 0;
+}
diff --git a/guava/src/com/google/common/collect/NaturalOrdering.java b/guava/src/com/google/common/collect/NaturalOrdering.java
new file mode 100644
index 0000000..8fbe0d0
--- /dev/null
+++ b/guava/src/com/google/common/collect/NaturalOrdering.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.io.Serializable;
+import java.util.Collections;
+import java.util.List;
+
+/** An ordering that uses the natural order of the values. */
+@GwtCompatible(serializable = true)
+@SuppressWarnings("unchecked") // TODO(kevinb): the right way to explain this??
+final class NaturalOrdering
+    extends Ordering<Comparable> implements Serializable {
+  static final NaturalOrdering INSTANCE = new NaturalOrdering();
+
+  @Override public int compare(Comparable left, Comparable right) {
+    checkNotNull(left); // for GWT
+    checkNotNull(right);
+    if (left == right) {
+      return 0;
+    }
+
+    return left.compareTo(right);
+  }
+
+  @Override public <S extends Comparable> Ordering<S> reverse() {
+    return (Ordering<S>) ReverseNaturalOrdering.INSTANCE;
+  }
+
+  // Override to remove a level of indirection from inner loop
+  @Override public int binarySearch(
+      List<? extends Comparable> sortedList, Comparable key) {
+    return Collections.binarySearch((List) sortedList, key);
+  }
+
+  // Override to remove a level of indirection from inner loop
+  @Override public <E extends Comparable> List<E> sortedCopy(
+      Iterable<E> iterable) {
+    List<E> list = Lists.newArrayList(iterable);
+    Collections.sort(list);
+    return list;
+  }
+
+  // preserving singleton-ness gives equals()/hashCode() for free
+  private Object readResolve() {
+    return INSTANCE;
+  }
+
+  @Override public String toString() {
+    return "Ordering.natural()";
+  }
+
+  private NaturalOrdering() {}
+
+  private static final long serialVersionUID = 0;
+}
diff --git a/guava/src/com/google/common/collect/NullsFirstOrdering.java b/guava/src/com/google/common/collect/NullsFirstOrdering.java
new file mode 100644
index 0000000..2e8a3ac
--- /dev/null
+++ b/guava/src/com/google/common/collect/NullsFirstOrdering.java
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.io.Serializable;
+
+import javax.annotation.Nullable;
+
+/** An ordering that treats {@code null} as less than all other values. */
+@GwtCompatible(serializable = true)
+final class NullsFirstOrdering<T> extends Ordering<T> implements Serializable {
+  final Ordering<? super T> ordering;
+
+  NullsFirstOrdering(Ordering<? super T> ordering) {
+    this.ordering = ordering;
+  }
+
+  @Override public int compare(@Nullable T left, @Nullable T right) {
+    if (left == right) {
+      return 0;
+    }
+    if (left == null) {
+      return RIGHT_IS_GREATER;
+    }
+    if (right == null) {
+      return LEFT_IS_GREATER;
+    }
+    return ordering.compare(left, right);
+  }
+
+  @Override public <S extends T> Ordering<S> reverse() {
+    // ordering.reverse() might be optimized, so let it do its thing
+    return ordering.reverse().nullsLast();
+  }
+
+  @SuppressWarnings("unchecked") // still need the right way to explain this
+  @Override public <S extends T> Ordering<S> nullsFirst() {
+    return (Ordering<S>) this;
+  }
+
+  @Override public <S extends T> Ordering<S> nullsLast() {
+    return ordering.nullsLast();
+  }
+
+  @Override public boolean equals(@Nullable Object object) {
+    if (object == this) {
+      return true;
+    }
+    if (object instanceof NullsFirstOrdering) {
+      NullsFirstOrdering<?> that = (NullsFirstOrdering<?>) object;
+      return this.ordering.equals(that.ordering);
+    }
+    return false;
+  }
+
+  @Override public int hashCode() {
+    return ordering.hashCode() ^ 957692532; // meaningless
+  }
+
+  @Override public String toString() {
+    return ordering + ".nullsFirst()";
+  }
+
+  private static final long serialVersionUID = 0;
+}
diff --git a/guava/src/com/google/common/collect/NullsLastOrdering.java b/guava/src/com/google/common/collect/NullsLastOrdering.java
new file mode 100644
index 0000000..9de17bd
--- /dev/null
+++ b/guava/src/com/google/common/collect/NullsLastOrdering.java
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.io.Serializable;
+
+import javax.annotation.Nullable;
+
+/** An ordering that treats {@code null} as greater than all other values. */
+@GwtCompatible(serializable = true)
+final class NullsLastOrdering<T> extends Ordering<T> implements Serializable {
+  final Ordering<? super T> ordering;
+
+  NullsLastOrdering(Ordering<? super T> ordering) {
+    this.ordering = ordering;
+  }
+
+  @Override public int compare(@Nullable T left, @Nullable T right) {
+    if (left == right) {
+      return 0;
+    }
+    if (left == null) {
+      return LEFT_IS_GREATER;
+    }
+    if (right == null) {
+      return RIGHT_IS_GREATER;
+    }
+    return ordering.compare(left, right);
+  }
+
+  @Override public <S extends T> Ordering<S> reverse() {
+    // ordering.reverse() might be optimized, so let it do its thing
+    return ordering.reverse().nullsFirst();
+  }
+
+  @Override public <S extends T> Ordering<S> nullsFirst() {
+    return ordering.nullsFirst();
+  }
+
+  @SuppressWarnings("unchecked") // still need the right way to explain this
+  @Override public <S extends T> Ordering<S> nullsLast() {
+    return (Ordering<S>) this;
+  }
+
+  @Override public boolean equals(@Nullable Object object) {
+    if (object == this) {
+      return true;
+    }
+    if (object instanceof NullsLastOrdering) {
+      NullsLastOrdering<?> that = (NullsLastOrdering<?>) object;
+      return this.ordering.equals(that.ordering);
+    }
+    return false;
+  }
+
+  @Override public int hashCode() {
+    return ordering.hashCode() ^ -921210296; // meaningless
+  }
+
+  @Override public String toString() {
+    return ordering + ".nullsLast()";
+  }
+
+  private static final long serialVersionUID = 0;
+}
diff --git a/guava/src/com/google/common/collect/ObjectArrays.java b/guava/src/com/google/common/collect/ObjectArrays.java
new file mode 100644
index 0000000..954a30e
--- /dev/null
+++ b/guava/src/com/google/common/collect/ObjectArrays.java
@@ -0,0 +1,182 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+
+import java.util.Collection;
+
+import javax.annotation.Nullable;
+
+/**
+ * Static utility methods pertaining to object arrays.
+ *
+ * @author Kevin Bourrillion
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible(emulated = true)
+public final class ObjectArrays {
+  private ObjectArrays() {}
+
+  /**
+   * Returns a new array of the given length with the specified component type.
+   *
+   * @param type the component type
+   * @param length the length of the new array
+   */
+  @GwtIncompatible("Array.newInstance(Class, int)")
+  public static <T> T[] newArray(Class<T> type, int length) {
+    return Platform.newArray(type, length);
+  }
+
+  /**
+   * Returns a new array of the given length with the same type as a reference
+   * array.
+   *
+   * @param reference any array of the desired type
+   * @param length the length of the new array
+   */
+  public static <T> T[] newArray(T[] reference, int length) {
+    return Platform.newArray(reference, length);
+  }
+
+  /**
+   * Returns a new array that contains the concatenated contents of two arrays.
+   *
+   * @param first the first array of elements to concatenate
+   * @param second the second array of elements to concatenate
+   * @param type the component type of the returned array
+   */
+  @GwtIncompatible("Array.newInstance(Class, int)")
+  public static <T> T[] concat(T[] first, T[] second, Class<T> type) {
+    T[] result = newArray(type, first.length + second.length);
+    Platform.unsafeArrayCopy(first, 0, result, 0, first.length);
+    Platform.unsafeArrayCopy(second, 0, result, first.length, second.length);
+    return result;
+  }
+
+  /**
+   * Returns a new array that prepends {@code element} to {@code array}.
+   *
+   * @param element the element to prepend to the front of {@code array}
+   * @param array the array of elements to append
+   * @return an array whose size is one larger than {@code array}, with
+   *     {@code element} occupying the first position, and the
+   *     elements of {@code array} occupying the remaining elements.
+   */
+  public static <T> T[] concat(@Nullable T element, T[] array) {
+    T[] result = newArray(array, array.length + 1);
+    result[0] = element;
+    Platform.unsafeArrayCopy(array, 0, result, 1, array.length);
+    return result;
+  }
+
+  /**
+   * Returns a new array that appends {@code element} to {@code array}.
+   *
+   * @param array the array of elements to prepend
+   * @param element the element to append to the end
+   * @return an array whose size is one larger than {@code array}, with
+   *     the same contents as {@code array}, plus {@code element} occupying the
+   *     last position.
+   */
+  public static <T> T[] concat(T[] array, @Nullable T element) {
+    T[] result = arraysCopyOf(array, array.length + 1);
+    result[array.length] = element;
+    return result;
+  }
+
+  /** GWT safe version of Arrays.copyOf. */
+  static <T> T[] arraysCopyOf(T[] original, int newLength) {
+    T[] copy = newArray(original, newLength);
+    Platform.unsafeArrayCopy(
+        original, 0, copy, 0, Math.min(original.length, newLength));
+    return copy;
+  }
+
+  /**
+   * Returns an array containing all of the elements in the specified
+   * collection; the runtime type of the returned array is that of the specified
+   * array. If the collection fits in the specified array, it is returned
+   * therein. Otherwise, a new array is allocated with the runtime type of the
+   * specified array and the size of the specified collection.
+   *
+   * <p>If the collection fits in the specified array with room to spare (i.e.,
+   * the array has more elements than the collection), the element in the array
+   * immediately following the end of the collection is set to {@code null}.
+   * This is useful in determining the length of the collection <i>only</i> if
+   * the caller knows that the collection does not contain any null elements.
+   *
+   * <p>This method returns the elements in the order they are returned by the
+   * collection's iterator.
+   *
+   * <p>TODO(kevinb): support concurrently modified collections?
+   *
+   * @param c the collection for which to return an array of elements
+   * @param array the array in which to place the collection elements
+   * @throws ArrayStoreException if the runtime type of the specified array is
+   *     not a supertype of the runtime type of every element in the specified
+   *     collection
+   */
+  static <T> T[] toArrayImpl(Collection<?> c, T[] array) {
+    int size = c.size();
+    if (array.length < size) {
+      array = newArray(array, size);
+    }
+    fillArray(c, array);
+    if (array.length > size) {
+      array[size] = null;
+    }
+    return array;
+  }
+
+  /**
+   * Returns an array containing all of the elements in the specified
+   * collection. This method returns the elements in the order they are returned
+   * by the collection's iterator. The returned array is "safe" in that no
+   * references to it are maintained by the collection. The caller is thus free
+   * to modify the returned array.
+   *
+   * <p>This method assumes that the collection size doesn't change while the
+   * method is running.
+   *
+   * <p>TODO(kevinb): support concurrently modified collections?
+   *
+   * @param c the collection for which to return an array of elements
+   */
+  static Object[] toArrayImpl(Collection<?> c) {
+    return fillArray(c, new Object[c.size()]);
+  }
+
+  private static Object[] fillArray(Iterable<?> elements, Object[] array) {
+    int i = 0;
+    for (Object element : elements) {
+      array[i++] = element;
+    }
+    return array;
+  }
+
+  /**
+   * Swaps {@code array[i]} with {@code array[j]}.
+   */
+  static void swap(Object[] array, int i, int j) {
+    Object temp = array[i];
+    array[i] = array[j];
+    array[j] = temp;
+  }
+}
diff --git a/guava/src/com/google/common/collect/Ordering.java b/guava/src/com/google/common/collect/Ordering.java
new file mode 100644
index 0000000..1f0c6e3
--- /dev/null
+++ b/guava/src/com/google/common/collect/Ordering.java
@@ -0,0 +1,736 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Function;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.NoSuchElementException;
+import java.util.SortedMap;
+import java.util.SortedSet;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import javax.annotation.Nullable;
+
+/**
+ * A comparator with added methods to support common functions. For example:
+ * <pre>   {@code
+ *
+ *   if (Ordering.from(comparator).reverse().isOrdered(list)) { ... }}</pre>
+ *
+ * The {@link #from(Comparator)} method returns the equivalent {@code Ordering}
+ * instance for a pre-existing comparator. You can also skip the comparator step
+ * and extend {@code Ordering} directly: <pre>   {@code
+ *
+ *   Ordering<String> byLengthOrdering = new Ordering<String>() {
+ *     public int compare(String left, String right) {
+ *       return Ints.compare(left.length(), right.length());
+ *     }
+ *   };}</pre>
+ *
+ * Except as noted, the orderings returned by the factory methods of this
+ * class are serializable if and only if the provided instances that back them
+ * are. For example, if {@code ordering} and {@code function} can themselves be
+ * serialized, then {@code ordering.onResultOf(function)} can as well.
+ *
+ * @author Jesse Wilson
+ * @author Kevin Bourrillion
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible
+public abstract class Ordering<T> implements Comparator<T> {
+  // Static factories
+
+  /**
+   * Returns a serializable ordering that uses the natural order of the values.
+   * The ordering throws a {@link NullPointerException} when passed a null
+   * parameter.
+   *
+   * <p>The type specification is {@code <C extends Comparable>}, instead of
+   * the technically correct {@code <C extends Comparable<? super C>>}, to
+   * support legacy types from before Java 5.
+   */
+  @GwtCompatible(serializable = true)
+  @SuppressWarnings("unchecked") // TODO(kevinb): right way to explain this??
+  public static <C extends Comparable> Ordering<C> natural() {
+    return (Ordering<C>) NaturalOrdering.INSTANCE;
+  }
+
+  /**
+   * Returns an ordering for a pre-existing {@code comparator}. Note
+   * that if the comparator is not pre-existing, and you don't require
+   * serialization, you can subclass {@code Ordering} and implement its
+   * {@link #compare(Object, Object) compare} method instead.
+   *
+   * @param comparator the comparator that defines the order
+   */
+  @GwtCompatible(serializable = true)
+  public static <T> Ordering<T> from(Comparator<T> comparator) {
+    return (comparator instanceof Ordering)
+        ? (Ordering<T>) comparator
+        : new ComparatorOrdering<T>(comparator);
+  }
+
+  /**
+   * Simply returns its argument.
+   *
+   * @deprecated no need to use this
+   */
+  @GwtCompatible(serializable = true)
+  @Deprecated public static <T> Ordering<T> from(Ordering<T> ordering) {
+    return checkNotNull(ordering);
+  }
+
+  /**
+   * Returns an ordering that compares objects according to the order in
+   * which they appear in the given list. Only objects present in the list
+   * (according to {@link Object#equals}) may be compared. This comparator
+   * imposes a "partial ordering" over the type {@code T}. Subsequent changes
+   * to the {@code valuesInOrder} list will have no effect on the returned
+   * comparator. Null values in the list are not supported.
+   *
+   * <p>The returned comparator throws an {@link ClassCastException} when it
+   * receives an input parameter that isn't among the provided values.
+   *
+   * <p>The generated comparator is serializable if all the provided values are
+   * serializable.
+   *
+   * @param valuesInOrder the values that the returned comparator will be able
+   *     to compare, in the order the comparator should induce
+   * @return the comparator described above
+   * @throws NullPointerException if any of the provided values is null
+   * @throws IllegalArgumentException if {@code valuesInOrder} contains any
+   *     duplicate values (according to {@link Object#equals})
+   */
+  @GwtCompatible(serializable = true)
+  public static <T> Ordering<T> explicit(List<T> valuesInOrder) {
+    return new ExplicitOrdering<T>(valuesInOrder);
+  }
+
+  /**
+   * Returns an ordering that compares objects according to the order in
+   * which they are given to this method. Only objects present in the argument
+   * list (according to {@link Object#equals}) may be compared. This comparator
+   * imposes a "partial ordering" over the type {@code T}. Null values in the
+   * argument list are not supported.
+   *
+   * <p>The returned comparator throws a {@link ClassCastException} when it
+   * receives an input parameter that isn't among the provided values.
+   *
+   * <p>The generated comparator is serializable if all the provided values are
+   * serializable.
+   *
+   * @param leastValue the value which the returned comparator should consider
+   *     the "least" of all values
+   * @param remainingValuesInOrder the rest of the values that the returned
+   *     comparator will be able to compare, in the order the comparator should
+   *     follow
+   * @return the comparator described above
+   * @throws NullPointerException if any of the provided values is null
+   * @throws IllegalArgumentException if any duplicate values (according to
+   *     {@link Object#equals(Object)}) are present among the method arguments
+   */
+  @GwtCompatible(serializable = true)
+  public static <T> Ordering<T> explicit(
+      T leastValue, T... remainingValuesInOrder) {
+    return explicit(Lists.asList(leastValue, remainingValuesInOrder));
+  }
+
+  /**
+   * Exception thrown by a {@link Ordering#explicit(List)} or {@link
+   * Ordering#explicit(Object, Object[])} comparator when comparing a value
+   * outside the set of values it can compare. Extending {@link
+   * ClassCastException} may seem odd, but it is required.
+   */
+  // TODO(kevinb): make this public, document it right
+  @VisibleForTesting
+  static class IncomparableValueException extends ClassCastException {
+    final Object value;
+
+    IncomparableValueException(Object value) {
+      super("Cannot compare value: " + value);
+      this.value = value;
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  /**
+   * Returns an arbitrary ordering over all objects, for which {@code compare(a,
+   * b) == 0} implies {@code a == b} (identity equality). There is no meaning
+   * whatsoever to the order imposed, but it is constant for the life of the VM.
+   *
+   * <p>Because the ordering is identity-based, it is not "consistent with
+   * {@link Object#equals(Object)}" as defined by {@link Comparator}. Use
+   * caution when building a {@link SortedSet} or {@link SortedMap} from it, as
+   * the resulting collection will not behave exactly according to spec.
+   *
+   * <p>This ordering is not serializable, as its implementation relies on
+   * {@link System#identityHashCode(Object)}, so its behavior cannot be
+   * preserved across serialization.
+   *
+   * @since 2.0
+   */
+  public static Ordering<Object> arbitrary() {
+    return ArbitraryOrderingHolder.ARBITRARY_ORDERING;
+  }
+
+  private static class ArbitraryOrderingHolder {
+    static final Ordering<Object> ARBITRARY_ORDERING = new ArbitraryOrdering();
+  }
+
+  @VisibleForTesting static class ArbitraryOrdering extends Ordering<Object> {
+    @SuppressWarnings("deprecation") // TODO(kevinb): ?
+    private Map<Object, Integer> uids =
+        Platform.tryWeakKeys(new MapMaker()).makeComputingMap(
+            new Function<Object, Integer>() {
+              final AtomicInteger counter = new AtomicInteger(0);
+              @Override
+              public Integer apply(Object from) {
+                return counter.getAndIncrement();
+              }
+            });
+
+    @Override public int compare(Object left, Object right) {
+      if (left == right) {
+        return 0;
+      }
+      int leftCode = identityHashCode(left);
+      int rightCode = identityHashCode(right);
+      if (leftCode != rightCode) {
+        return leftCode < rightCode ? -1 : 1;
+      }
+
+      // identityHashCode collision (rare, but not as rare as you'd think)
+      int result = uids.get(left).compareTo(uids.get(right));
+      if (result == 0) {
+        throw new AssertionError(); // extremely, extremely unlikely.
+      }
+      return result;
+    }
+
+    @Override public String toString() {
+      return "Ordering.arbitrary()";
+    }
+
+    /*
+     * We need to be able to mock identityHashCode() calls for tests, because it
+     * can take 1-10 seconds to find colliding objects. Mocking frameworks that
+     * can do magic to mock static method calls still can't do so for a system
+     * class, so we need the indirection. In production, Hotspot should still
+     * recognize that the call is 1-morphic and should still be willing to
+     * inline it if necessary.
+     */
+    int identityHashCode(Object object) {
+      return System.identityHashCode(object);
+    }
+  }
+
+  /**
+   * Returns an ordering that compares objects by the natural ordering of their
+   * string representations as returned by {@code toString()}. It does not
+   * support null values.
+   *
+   * <p>The comparator is serializable.
+   */
+  @GwtCompatible(serializable = true)
+  public static Ordering<Object> usingToString() {
+    return UsingToStringOrdering.INSTANCE;
+  }
+
+  /**
+   * Returns an ordering which tries each given comparator in order until a
+   * non-zero result is found, returning that result, and returning zero only if
+   * all comparators return zero. The returned ordering is based on the state of
+   * the {@code comparators} iterable at the time it was provided to this
+   * method.
+   *
+   * <p>The returned ordering is equivalent to that produced using {@code
+   * Ordering.from(comp1).compound(comp2).compound(comp3) . . .}.
+   *
+   * <p><b>Warning:</b> Supplying an argument with undefined iteration order,
+   * such as a {@link HashSet}, will produce non-deterministic results.
+   *
+   * @param comparators the comparators to try in order
+   */
+  @GwtCompatible(serializable = true)
+  public static <T> Ordering<T> compound(
+      Iterable<? extends Comparator<? super T>> comparators) {
+    return new CompoundOrdering<T>(comparators);
+  }
+
+  /**
+   * Constructs a new instance of this class (only invokable by the subclass
+   * constructor, typically implicit).
+   */
+  protected Ordering() {}
+
+  // Non-static factories
+
+  /**
+   * Returns an ordering which first uses the ordering {@code this}, but which
+   * in the event of a "tie", then delegates to {@code secondaryComparator}.
+   * For example, to sort a bug list first by status and second by priority, you
+   * might use {@code byStatus.compound(byPriority)}. For a compound ordering
+   * with three or more components, simply chain multiple calls to this method.
+   *
+   * <p>An ordering produced by this method, or a chain of calls to this method,
+   * is equivalent to one created using {@link Ordering#compound(Iterable)} on
+   * the same component comparators.
+   */
+  @GwtCompatible(serializable = true)
+  public <U extends T> Ordering<U> compound(
+      Comparator<? super U> secondaryComparator) {
+    return new CompoundOrdering<U>(this, checkNotNull(secondaryComparator));
+  }
+
+  /**
+   * Returns the reverse of this ordering; the {@code Ordering} equivalent to
+   * {@link Collections#reverseOrder(Comparator)}.
+   */
+  // type parameter <S> lets us avoid the extra <String> in statements like:
+  // Ordering<String> o = Ordering.<String>natural().reverse();
+  @GwtCompatible(serializable = true)
+  public <S extends T> Ordering<S> reverse() {
+    return new ReverseOrdering<S>(this);
+  }
+
+  /**
+   * Returns a new ordering on {@code F} which orders elements by first applying
+   * a function to them, then comparing those results using {@code this}. For
+   * example, to compare objects by their string forms, in a case-insensitive
+   * manner, use: <pre>   {@code
+   *
+   *   Ordering.from(String.CASE_INSENSITIVE_ORDER)
+   *       .onResultOf(Functions.toStringFunction())}</pre>
+   */
+  @GwtCompatible(serializable = true)
+  public <F> Ordering<F> onResultOf(Function<F, ? extends T> function) {
+    return new ByFunctionOrdering<F, T>(function, this);
+  }
+
+  /**
+   * Returns a new ordering which sorts iterables by comparing corresponding
+   * elements pairwise until a nonzero result is found; imposes "dictionary
+   * order". If the end of one iterable is reached, but not the other, the
+   * shorter iterable is considered to be less than the longer one. For example,
+   * a lexicographical natural ordering over integers considers {@code
+   * [] < [1] < [1, 1] < [1, 2] < [2]}.
+   *
+   * <p>Note that {@code ordering.lexicographical().reverse()} is not
+   * equivalent to {@code ordering.reverse().lexicographical()} (consider how
+   * each would order {@code [1]} and {@code [1, 1]}).
+   *
+   * @since 2.0
+   */
+  @GwtCompatible(serializable = true)
+  // type parameter <S> lets us avoid the extra <String> in statements like:
+  // Ordering<Iterable<String>> o =
+  //     Ordering.<String>natural().lexicographical();
+  public <S extends T> Ordering<Iterable<S>> lexicographical() {
+    /*
+     * Note that technically the returned ordering should be capable of
+     * handling not just {@code Iterable<S>} instances, but also any {@code
+     * Iterable<? extends S>}. However, the need for this comes up so rarely
+     * that it doesn't justify making everyone else deal with the very ugly
+     * wildcard.
+     */
+    return new LexicographicalOrdering<S>(this);
+  }
+
+  /**
+   * Returns an ordering that treats {@code null} as less than all other values
+   * and uses {@code this} to compare non-null values.
+   */
+  // type parameter <S> lets us avoid the extra <String> in statements like:
+  // Ordering<String> o = Ordering.<String>natural().nullsFirst();
+  @GwtCompatible(serializable = true)
+  public <S extends T> Ordering<S> nullsFirst() {
+    return new NullsFirstOrdering<S>(this);
+  }
+
+  /**
+   * Returns an ordering that treats {@code null} as greater than all other
+   * values and uses this ordering to compare non-null values.
+   */
+  // type parameter <S> lets us avoid the extra <String> in statements like:
+  // Ordering<String> o = Ordering.<String>natural().nullsLast();
+  @GwtCompatible(serializable = true)
+  public <S extends T> Ordering<S> nullsLast() {
+    return new NullsLastOrdering<S>(this);
+  }
+
+  // Regular instance methods
+
+  // Override to add @Nullable
+  @Override public abstract int compare(@Nullable T left, @Nullable T right);
+
+  /**
+   * Returns the {@code k} least elements of the given iterable according to
+   * this ordering, in order from least to greatest.  If there are fewer than
+   * {@code k} elements present, all will be included.
+   *
+   * <p>The implementation does not necessarily use a <i>stable</i> sorting
+   * algorithm; when multiple elements are equivalent, it is undefined which
+   * will come first.
+   *
+   * @return an immutable {@code RandomAccess} list of the {@code k} least
+   *     elements in ascending order
+   * @throws IllegalArgumentException if {@code k} is negative
+   * @since 8.0
+   */
+  @Beta
+  public <E extends T> List<E> leastOf(Iterable<E> iterable, int k) {
+    checkArgument(k >= 0, "%d is negative", k);
+
+    // values is not an E[], but we use it as such for readability. Hack.
+    @SuppressWarnings("unchecked")
+    E[] values = (E[]) Iterables.toArray(iterable);
+
+    // TODO(nshupe): also sort whole list if k is *near* values.length?
+    // TODO(kevinb): benchmark this impl against hand-coded heap
+    E[] resultArray;
+    if (values.length <= k) {
+      Arrays.sort(values, this);
+      resultArray = values;
+    } else {
+      quicksortLeastK(values, 0, values.length - 1, k);
+
+      // this is not an E[], but we use it as such for readability. Hack.
+      @SuppressWarnings("unchecked")
+      E[] tmp = (E[]) new Object[k];
+      resultArray = tmp;
+      System.arraycopy(values, 0, resultArray, 0, k);
+    }
+
+    return Collections.unmodifiableList(Arrays.asList(resultArray));
+  }
+
+  /**
+   * Returns the {@code k} greatest elements of the given iterable according to
+   * this ordering, in order from greatest to least. If there are fewer than
+   * {@code k} elements present, all will be included.
+   *
+   * <p>The implementation does not necessarily use a <i>stable</i> sorting
+   * algorithm; when multiple elements are equivalent, it is undefined which
+   * will come first.
+   *
+   * @return an immutable {@code RandomAccess} list of the {@code k} greatest
+   *     elements in <i>descending order</i>
+   * @throws IllegalArgumentException if {@code k} is negative
+   * @since 8.0
+   */
+  @Beta
+  public <E extends T> List<E> greatestOf(Iterable<E> iterable, int k) {
+    // TODO(kevinb): see if delegation is hurting performance noticeably
+    // TODO(kevinb): if we change this implementation, add full unit tests.
+    return reverse().leastOf(iterable, k);
+  }
+
+  private <E extends T> void quicksortLeastK(
+      E[] values, int left, int right, int k) {
+    if (right > left) {
+      int pivotIndex = (left + right) >>> 1; // left + ((right - left) / 2)
+      int pivotNewIndex = partition(values, left, right, pivotIndex);
+      quicksortLeastK(values, left, pivotNewIndex - 1, k);
+      if (pivotNewIndex < k) {
+        quicksortLeastK(values, pivotNewIndex + 1, right, k);
+      }
+    }
+  }
+
+  private <E extends T> int partition(
+      E[] values, int left, int right, int pivotIndex) {
+    E pivotValue = values[pivotIndex];
+
+    values[pivotIndex] = values[right];
+    values[right] = pivotValue;
+
+    int storeIndex = left;
+    for (int i = left; i < right; i++) {
+      if (compare(values[i], pivotValue) < 0) {
+        ObjectArrays.swap(values, storeIndex, i);
+        storeIndex++;
+      }
+    }
+    ObjectArrays.swap(values, right, storeIndex);
+    return storeIndex;
+  }
+
+  /**
+   * {@link Collections#binarySearch(List, Object, Comparator) Searches}
+   * {@code sortedList} for {@code key} using the binary search algorithm. The
+   * list must be sorted using this ordering.
+   *
+   * @param sortedList the list to be searched
+   * @param key the key to be searched for
+   */
+  public int binarySearch(List<? extends T> sortedList, @Nullable T key) {
+    return Collections.binarySearch(sortedList, key, this);
+  }
+
+  /**
+   * Returns a copy of the given iterable sorted by this ordering. The input is
+   * not modified. The returned list is modifiable, serializable, and has random
+   * access.
+   *
+   * <p>Unlike {@link Sets#newTreeSet(Iterable)}, this method does not discard
+   * elements that are duplicates according to the comparator. The sort
+   * performed is <i>stable</i>, meaning that such elements will appear in the
+   * resulting list in the same order they appeared in the input.
+   *
+   * @param iterable the elements to be copied and sorted
+   * @return a new list containing the given elements in sorted order
+   */
+  public <E extends T> List<E> sortedCopy(Iterable<E> iterable) {
+    List<E> list = Lists.newArrayList(iterable);
+    Collections.sort(list, this);
+    return list;
+  }
+
+  /**
+   * Returns an <i>immutable</i> copy of the given iterable sorted by this
+   * ordering. The input is not modified.
+   *
+   * <p>Unlike {@link Sets#newTreeSet(Iterable)}, this method does not discard
+   * elements that are duplicates according to the comparator. The sort
+   * performed is <i>stable</i>, meaning that such elements will appear in the
+   * resulting list in the same order they appeared in the input.
+   *
+   * @param iterable the elements to be copied and sorted
+   * @return a new immutable list containing the given elements in sorted order
+   * @throws NullPointerException if {@code iterable} or any of its elements is
+   *     null
+   * @since 3.0
+   */
+  public <E extends T> ImmutableList<E> immutableSortedCopy(
+      Iterable<E> iterable) {
+    return ImmutableList.copyOf(sortedCopy(iterable));
+  }
+
+  /**
+   * Returns {@code true} if each element in {@code iterable} after the first is
+   * greater than or equal to the element that preceded it, according to this
+   * ordering. Note that this is always true when the iterable has fewer than
+   * two elements.
+   */
+  public boolean isOrdered(Iterable<? extends T> iterable) {
+    Iterator<? extends T> it = iterable.iterator();
+    if (it.hasNext()) {
+      T prev = it.next();
+      while (it.hasNext()) {
+        T next = it.next();
+        if (compare(prev, next) > 0) {
+          return false;
+        }
+        prev = next;
+      }
+    }
+    return true;
+  }
+
+  /**
+   * Returns {@code true} if each element in {@code iterable} after the first is
+   * <i>strictly</i> greater than the element that preceded it, according to
+   * this ordering. Note that this is always true when the iterable has fewer
+   * than two elements.
+   */
+  public boolean isStrictlyOrdered(Iterable<? extends T> iterable) {
+    Iterator<? extends T> it = iterable.iterator();
+    if (it.hasNext()) {
+      T prev = it.next();
+      while (it.hasNext()) {
+        T next = it.next();
+        if (compare(prev, next) >= 0) {
+          return false;
+        }
+        prev = next;
+      }
+    }
+    return true;
+  }
+
+  /**
+   * Returns the greatest of the specified values according to this ordering. If
+   * there are multiple greatest values, the first of those is returned. The
+   * iterator will be left exhausted: its {@code hasNext()} method will return
+   * {@code false}.
+   *
+   * @param iterator the iterator whose maximum element is to be determined
+   * @throws NoSuchElementException if {@code iterator} is empty
+   * @throws ClassCastException if the parameters are not <i>mutually
+   *     comparable</i> under this ordering.
+   *
+   * @since 11.0
+   */
+  @Beta
+  public <E extends T> E max(Iterator<E> iterator) {
+    // let this throw NoSuchElementException as necessary
+    E maxSoFar = iterator.next();
+
+    while (iterator.hasNext()) {
+      maxSoFar = max(maxSoFar, iterator.next());
+    }
+
+    return maxSoFar;
+  }
+
+  /**
+   * Returns the greatest of the specified values according to this ordering. If
+   * there are multiple greatest values, the first of those is returned.
+   *
+   * @param iterable the iterable whose maximum element is to be determined
+   * @throws NoSuchElementException if {@code iterable} is empty
+   * @throws ClassCastException if the parameters are not <i>mutually
+   *     comparable</i> under this ordering.
+   */
+  public <E extends T> E max(Iterable<E> iterable) {
+    return max(iterable.iterator());
+  }
+
+  /**
+   * Returns the greatest of the specified values according to this ordering. If
+   * there are multiple greatest values, the first of those is returned.
+   *
+   * @param a value to compare, returned if greater than or equal to the rest.
+   * @param b value to compare
+   * @param c value to compare
+   * @param rest values to compare
+   * @throws ClassCastException if the parameters are not <i>mutually
+   *     comparable</i> under this ordering.
+   */
+  public <E extends T> E max(
+      @Nullable E a, @Nullable E b, @Nullable E c, E... rest) {
+    E maxSoFar = max(max(a, b), c);
+
+    for (E r : rest) {
+      maxSoFar = max(maxSoFar, r);
+    }
+
+    return maxSoFar;
+  }
+
+  /**
+   * Returns the greater of the two values according to this ordering. If the
+   * values compare as 0, the first is returned.
+   *
+   * <p><b>Implementation note:</b> this method is invoked by the default
+   * implementations of the other {@code max} overloads, so overriding it will
+   * affect their behavior.
+   *
+   * @param a value to compare, returned if greater than or equal to b.
+   * @param b value to compare.
+   * @throws ClassCastException if the parameters are not <i>mutually
+   *     comparable</i> under this ordering.
+   */
+  public <E extends T> E max(@Nullable E a, @Nullable E b) {
+    return compare(a, b) >= 0 ? a : b;
+  }
+
+  /**
+   * Returns the least of the specified values according to this ordering. If
+   * there are multiple least values, the first of those is returned. The
+   * iterator will be left exhausted: its {@code hasNext()} method will return
+   * {@code false}.
+   *
+   * @param iterator the iterator whose minimum element is to be determined
+   * @throws NoSuchElementException if {@code iterator} is empty
+   * @throws ClassCastException if the parameters are not <i>mutually
+   *     comparable</i> under this ordering.
+   *
+   * @since 11.0
+   */
+  @Beta
+  public <E extends T> E min(Iterator<E> iterator) {
+    // let this throw NoSuchElementException as necessary
+    E minSoFar = iterator.next();
+
+    while (iterator.hasNext()) {
+      minSoFar = min(minSoFar, iterator.next());
+    }
+
+    return minSoFar;
+  }
+
+  /**
+   * Returns the least of the specified values according to this ordering. If
+   * there are multiple least values, the first of those is returned.
+   *
+   * @param iterable the iterable whose minimum element is to be determined
+   * @throws NoSuchElementException if {@code iterable} is empty
+   * @throws ClassCastException if the parameters are not <i>mutually
+   *     comparable</i> under this ordering.
+   */
+  public <E extends T> E min(Iterable<E> iterable) {
+    return min(iterable.iterator());
+  }
+
+  /**
+   * Returns the least of the specified values according to this ordering. If
+   * there are multiple least values, the first of those is returned.
+   *
+   * @param a value to compare, returned if less than or equal to the rest.
+   * @param b value to compare
+   * @param c value to compare
+   * @param rest values to compare
+   * @throws ClassCastException if the parameters are not <i>mutually
+   *     comparable</i> under this ordering.
+   */
+  public <E extends T> E min(
+      @Nullable E a, @Nullable E b, @Nullable E c, E... rest) {
+    E minSoFar = min(min(a, b), c);
+
+    for (E r : rest) {
+      minSoFar = min(minSoFar, r);
+    }
+
+    return minSoFar;
+  }
+
+  /**
+   * Returns the lesser of the two values according to this ordering. If the
+   * values compare as 0, the first is returned.
+   *
+   * <p><b>Implementation note:</b> this method is invoked by the default
+   * implementations of the other {@code min} overloads, so overriding it will
+   * affect their behavior.
+   *
+   * @param a value to compare, returned if less than or equal to b.
+   * @param b value to compare.
+   * @throws ClassCastException if the parameters are not <i>mutually
+   *     comparable</i> under this ordering.
+   */
+  public <E extends T> E min(@Nullable E a, @Nullable E b) {
+    return compare(a, b) <= 0 ? a : b;
+  }
+
+  // Never make these public
+  static final int LEFT_IS_GREATER = 1;
+  static final int RIGHT_IS_GREATER = -1;
+}
diff --git a/guava/src/com/google/common/collect/PeekingIterator.java b/guava/src/com/google/common/collect/PeekingIterator.java
new file mode 100644
index 0000000..be8989d
--- /dev/null
+++ b/guava/src/com/google/common/collect/PeekingIterator.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+
+/**
+ * An iterator that supports a one-element lookahead while iterating.
+ *
+ * @author Mick Killianey
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible
+public interface PeekingIterator<E> extends Iterator<E> {
+  /**
+   * Returns the next element in the iteration, without advancing the iteration.
+   *
+   * <p>Calls to {@code peek()} should not change the state of the iteration,
+   * except that it <i>may</i> prevent removal of the most recent element via
+   * {@link #remove()}.
+   *
+   * @throws NoSuchElementException if the iteration has no more elements
+   *     according to {@link #hasNext()}
+   */
+  E peek();
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>The objects returned by consecutive calls to {@link #peek()} then {@link
+   * #next()} are guaranteed to be equal to each other.
+   */
+  @Override
+  E next();
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>Implementations may or may not support removal when a call to {@link
+   * #peek()} has occurred since the most recent call to {@link #next()}.
+   *
+   * @throws IllegalStateException if there has been a call to {@link #peek()}
+   *     since the most recent call to {@link #next()} and this implementation
+   *     does not support this sequence of calls (optional)
+   */
+  @Override
+  void remove();
+}
diff --git a/guava/src/com/google/common/collect/Platform.java b/guava/src/com/google/common/collect/Platform.java
new file mode 100644
index 0000000..408563b
--- /dev/null
+++ b/guava/src/com/google/common/collect/Platform.java
@@ -0,0 +1,96 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+
+import java.lang.reflect.Array;
+
+/**
+ * Methods factored out so that they can be emulated differently in GWT.
+ *
+ * @author Hayward Chan
+ */
+@GwtCompatible(emulated = true)
+class Platform {
+  /**
+   * Clone the given array using {@link Object#clone()}.  It is factored out so
+   * that it can be emulated in GWT.
+   */
+  static <T> T[] clone(T[] array) {
+    return array.clone();
+  }
+
+  /**
+   * Wrapper around {@link System#arraycopy} so that it can be emulated
+   * correctly in GWT.
+   *
+   * <p>It is only intended for the case {@code src} and {@code dest} are
+   * different.  It also doesn't validate the types and indices.
+   *
+   * <p>As of GWT 2.0, The built-in {@link System#arraycopy} doesn't work
+   * in general case.  See
+   * http://code.google.com/p/google-web-toolkit/issues/detail?id=3621
+   * for more details.
+   */
+  static void unsafeArrayCopy(
+      Object[] src, int srcPos, Object[] dest, int destPos, int length) {
+    System.arraycopy(src, srcPos, dest, destPos, length);
+  }
+
+  /**
+   * Returns a new array of the given length with the specified component type.
+   *
+   * @param type the component type
+   * @param length the length of the new array
+   */
+  @GwtIncompatible("Array.newInstance(Class, int)")
+  @SuppressWarnings("unchecked")
+  static <T> T[] newArray(Class<T> type, int length) {
+    return (T[]) Array.newInstance(type, length);
+  }
+
+  /**
+   * Returns a new array of the given length with the same type as a reference
+   * array.
+   *
+   * @param reference any array of the desired type
+   * @param length the length of the new array
+   */
+  static <T> T[] newArray(T[] reference, int length) {
+    Class<?> type = reference.getClass().getComponentType();
+
+    // the cast is safe because
+    // result.getClass() == reference.getClass().getComponentType()
+    @SuppressWarnings("unchecked")
+    T[] result = (T[]) Array.newInstance(type, length);
+    return result;
+  }
+
+  /**
+   * Configures the given map maker to use weak keys, if possible; does nothing
+   * otherwise (i.e., in GWT). This is sometimes acceptable, when only
+   * server-side code could generate enough volume that reclamation becomes
+   * important.
+   */
+  static MapMaker tryWeakKeys(MapMaker mapMaker) {
+    return mapMaker.weakKeys();
+  }
+
+  private Platform() {}
+}
diff --git a/guava/src/com/google/common/collect/Queues.java b/guava/src/com/google/common/collect/Queues.java
new file mode 100644
index 0000000..d68146a
--- /dev/null
+++ b/guava/src/com/google/common/collect/Queues.java
@@ -0,0 +1,277 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.Beta;
+import com.google.common.base.Preconditions;
+
+import java.util.ArrayDeque;
+import java.util.Collection;
+import java.util.PriorityQueue;
+import java.util.Queue;
+import java.util.concurrent.ArrayBlockingQueue;
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.ConcurrentLinkedQueue;
+import java.util.concurrent.LinkedBlockingDeque;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.PriorityBlockingQueue;
+import java.util.concurrent.SynchronousQueue;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Static utility methods pertaining to {@link Queue}
+ * instances. Also see this class's counterparts
+ * {@link Lists}, {@link Sets}, and {@link Maps}.
+ *
+ * @author Kurt Alfred Kluever
+ * @since 11.0
+ */
+@Beta
+public final class Queues {
+  private Queues() {}
+
+  // ArrayBlockingQueue
+
+  /**
+   * Creates an empty {@code ArrayBlockingQueue} instance.
+   *
+   * @return a new, empty {@code ArrayBlockingQueue}
+   */
+  public static <E> ArrayBlockingQueue<E> newArrayBlockingQueue(int capacity) {
+    return new ArrayBlockingQueue<E>(capacity);
+  }
+
+  // ArrayDeque
+
+  // ConcurrentLinkedQueue
+
+  /**
+   * Creates an empty {@code ConcurrentLinkedQueue} instance.
+   *
+   * @return a new, empty {@code ConcurrentLinkedQueue}
+   */
+  public static <E> ConcurrentLinkedQueue<E> newConcurrentLinkedQueue() {
+    return new ConcurrentLinkedQueue<E>();
+  }
+
+  /**
+   * Creates an {@code ConcurrentLinkedQueue} instance containing the given elements.
+   *
+   * @param elements the elements that the queue should contain, in order
+   * @return a new {@code ConcurrentLinkedQueue} containing those elements
+   */
+  public static <E> ConcurrentLinkedQueue<E> newConcurrentLinkedQueue(
+      Iterable<? extends E> elements) {
+    if (elements instanceof Collection) {
+      return new ConcurrentLinkedQueue<E>(Collections2.cast(elements));
+    }
+    ConcurrentLinkedQueue<E> queue = new ConcurrentLinkedQueue<E>();
+    Iterables.addAll(queue, elements);
+    return queue;
+  }
+
+  // LinkedBlockingDeque
+
+  // LinkedBlockingQueue
+
+  /**
+   * Creates an empty {@code LinkedBlockingQueue} instance.
+   *
+   * @return a new, empty {@code LinkedBlockingQueue}
+   */
+  public static <E> LinkedBlockingQueue<E> newLinkedBlockingQueue() {
+    return new LinkedBlockingQueue<E>();
+  }
+
+  /**
+   * Creates a {@code LinkedBlockingQueue} with the given (fixed) capacity.
+   *
+   * @param capacity the capacity of this queue
+   * @return a new, empty {@code LinkedBlockingQueue}
+   * @throws IllegalArgumentException if {@code capacity} is less than 1
+   */
+  public static <E> LinkedBlockingQueue<E> newLinkedBlockingQueue(int capacity) {
+    return new LinkedBlockingQueue<E>(capacity);
+  }
+
+  /**
+   * Creates an {@code LinkedBlockingQueue} instance containing the given elements.
+   *
+   * @param elements the elements that the queue should contain, in order
+   * @return a new {@code LinkedBlockingQueue} containing those elements
+   */
+  public static <E> LinkedBlockingQueue<E> newLinkedBlockingQueue(Iterable<? extends E> elements) {
+    if (elements instanceof Collection) {
+      return new LinkedBlockingQueue<E>(Collections2.cast(elements));
+    }
+    LinkedBlockingQueue<E> queue = new LinkedBlockingQueue<E>();
+    Iterables.addAll(queue, elements);
+    return queue;
+  }
+
+  // LinkedList: see {@link com.google.common.collect.Lists}
+
+  // PriorityBlockingQueue
+
+  /**
+   * Creates an empty {@code PriorityBlockingQueue} instance.
+   *
+   * @return a new, empty {@code PriorityBlockingQueue}
+   */
+  public static <E> PriorityBlockingQueue<E> newPriorityBlockingQueue() {
+    return new PriorityBlockingQueue<E>();
+  }
+
+  /**
+   * Creates an {@code PriorityBlockingQueue} instance containing the given elements.
+   *
+   * @param elements the elements that the queue should contain, in order
+   * @return a new {@code PriorityBlockingQueue} containing those elements
+   */
+  public static <E> PriorityBlockingQueue<E> newPriorityBlockingQueue(
+      Iterable<? extends E> elements) {
+    if (elements instanceof Collection) {
+      return new PriorityBlockingQueue<E>(Collections2.cast(elements));
+    }
+    PriorityBlockingQueue<E> queue = new PriorityBlockingQueue<E>();
+    Iterables.addAll(queue, elements);
+    return queue;
+  }
+
+  // PriorityQueue
+
+  /**
+   * Creates an empty {@code PriorityQueue} instance.
+   *
+   * @return a new, empty {@code PriorityQueue}
+   */
+  public static <E> PriorityQueue<E> newPriorityQueue() {
+    return new PriorityQueue<E>();
+  }
+
+  /**
+   * Creates an {@code PriorityQueue} instance containing the given elements.
+   *
+   * @param elements the elements that the queue should contain, in order
+   * @return a new {@code PriorityQueue} containing those elements
+   */
+  public static <E> PriorityQueue<E> newPriorityQueue(Iterable<? extends E> elements) {
+    if (elements instanceof Collection) {
+      return new PriorityQueue<E>(Collections2.cast(elements));
+    }
+    PriorityQueue<E> queue = new PriorityQueue<E>();
+    Iterables.addAll(queue, elements);
+    return queue;
+  }
+
+  // SynchronousQueue
+
+  /**
+   * Creates an empty {@code SynchronousQueue} instance.
+   *
+   * @return a new, empty {@code SynchronousQueue}
+   */
+  public static <E> SynchronousQueue<E> newSynchronousQueue() {
+    return new SynchronousQueue<E>();
+  }
+
+  /**
+   * Drains the queue as {@link BlockingQueue#drainTo(Collection, int)}, but if the requested
+   * {@code numElements} elements are not available, it will wait for them up to the specified
+   * timeout.
+   *
+   * @param q the blocking queue to be drained
+   * @param buffer where to add the transferred elements
+   * @param numElements the number of elements to be waited for
+   * @param timeout how long to wait before giving up, in units of {@code unit}
+   * @param unit a {@code TimeUnit} determining how to interpret the timeout parameter
+   * @return the number of elements transferred
+   * @throws InterruptedException if interrupted while waiting
+   */
+  public static <E> int drain(BlockingQueue<E> q, Collection<? super E> buffer, int numElements,
+      long timeout, TimeUnit unit) throws InterruptedException {
+    Preconditions.checkNotNull(buffer);
+    /*
+     * This code performs one System.nanoTime() more than necessary, and in return, the time to
+     * execute Queue#drainTo is not added *on top* of waiting for the timeout (which could make
+     * the timeout arbitrarily inaccurate, given a queue that is slow to drain).
+     */
+    long deadline = System.nanoTime() + unit.toNanos(timeout);
+    int added = 0;
+    while (added < numElements) {
+      // we could rely solely on #poll, but #drainTo might be more efficient when there are multiple
+      // elements already available (e.g. LinkedBlockingQueue#drainTo locks only once)
+      added += q.drainTo(buffer, numElements - added);
+      if (added < numElements) { // not enough elements immediately available; will have to poll
+        E e = q.poll(deadline - System.nanoTime(), TimeUnit.NANOSECONDS);
+        if (e == null) {
+          break; // we already waited enough, and there are no more elements in sight
+        }
+        buffer.add(e);
+        added++;
+      }
+    }
+    return added;
+  }
+
+  /**
+   * Drains the queue as {@linkplain #drain(BlockingQueue, Collection, int, long, TimeUnit)},
+   * but with a different behavior in case it is interrupted while waiting. In that case, the
+   * operation will continue as usual, and in the end the thread's interruption status will be set
+   * (no {@code InterruptedException} is thrown).
+   *
+   * @param q the blocking queue to be drained
+   * @param buffer where to add the transferred elements
+   * @param numElements the number of elements to be waited for
+   * @param timeout how long to wait before giving up, in units of {@code unit}
+   * @param unit a {@code TimeUnit} determining how to interpret the timeout parameter
+   * @return the number of elements transferred
+   */
+  public static <E> int drainUninterruptibly(BlockingQueue<E> q, Collection<? super E> buffer,
+      int numElements, long timeout, TimeUnit unit) {
+    Preconditions.checkNotNull(buffer);
+    long deadline = System.nanoTime() + unit.toNanos(timeout);
+    int added = 0;
+    boolean interrupted = false;
+    try {
+      while (added < numElements) {
+        // we could rely solely on #poll, but #drainTo might be more efficient when there are
+        // multiple elements already available (e.g. LinkedBlockingQueue#drainTo locks only once)
+        added += q.drainTo(buffer, numElements - added);
+        if (added < numElements) { // not enough elements immediately available; will have to poll
+          E e; // written exactly once, by a successful (uninterrupted) invocation of #poll
+          while (true) {
+            try {
+              e = q.poll(deadline - System.nanoTime(), TimeUnit.NANOSECONDS);
+              break;
+            } catch (InterruptedException ex) {
+              interrupted = true; // note interruption and retry
+            }
+          }
+          if (e == null) {
+            break; // we already waited enough, and there are no more elements in sight
+          }
+          buffer.add(e);
+          added++;
+        }
+      }
+    } finally {
+      if (interrupted) {
+        Thread.currentThread().interrupt();
+      }
+    }
+    return added;
+  }
+}
diff --git a/guava/src/com/google/common/collect/Range.java b/guava/src/com/google/common/collect/Range.java
new file mode 100644
index 0000000..c6a9189
--- /dev/null
+++ b/guava/src/com/google/common/collect/Range.java
@@ -0,0 +1,509 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.collect.Ranges.create;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Predicate;
+
+import java.io.Serializable;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.NoSuchElementException;
+import java.util.Set;
+import java.util.SortedSet;
+
+import javax.annotation.Nullable;
+
+/**
+ * A range, sometimes known as an <i>interval</i>, is a <i>convex</i>
+ * (informally, "contiguous" or "unbroken") portion of a particular domain.
+ * Formally, convexity means that for any {@code a <= b <= c},
+ * {@code range.contains(a) && range.contains(c)} implies that {@code
+ * range.contains(b)}.
+ *
+ * <p>A range is characterized by its lower and upper <i>bounds</i> (extremes),
+ * each of which can <i>open</i> (exclusive of its endpoint), <i>closed</i>
+ * (inclusive of its endpoint), or <i>unbounded</i>. This yields nine basic
+ * types of ranges:
+ *
+ * <ul>
+ * <li>{@code (a..b) = {x | a < x < b}}
+ * <li>{@code [a..b] = {x | a <= x <= b}}
+ * <li>{@code [a..b) = {x | a <= x < b}}
+ * <li>{@code (a..b] = {x | a < x <= b}}
+ * <li>{@code (a..+∞) = {x | x > a}}
+ * <li>{@code [a..+∞) = {x | x >= a}}
+ * <li>{@code (-∞..b) = {x | x < b}}
+ * <li>{@code (-∞..b] = {x | x <= b}}
+ * <li>{@code (-∞..+∞) = all values}
+ * </ul>
+ *
+ * (The notation {@code {x | statement}} is read "the set of all <i>x</i> such
+ * that <i>statement</i>.")
+ *
+ * <p>Notice that we use a square bracket ({@code [ ]}) to denote that an range
+ * is closed on that end, and a parenthesis ({@code ( )}) when it is open or
+ * unbounded.
+ *
+ * <p>The values {@code a} and {@code b} used above are called <i>endpoints</i>.
+ * The upper endpoint may not be less than the lower endpoint. The endpoints may
+ * be equal only if at least one of the bounds is closed:
+ *
+ * <ul>
+ * <li>{@code [a..a]} : singleton range
+ * <li>{@code [a..a); (a..a]} : {@linkplain #isEmpty empty}, but valid
+ * <li>{@code (a..a)} : <b>invalid</b>
+ * </ul>
+ *
+ * <p>Instances of this type can be obtained using the static factory methods in
+ * the {@link Ranges} class.
+ *
+ * <p>Instances of {@code Range} are immutable. It is strongly encouraged to
+ * use this class only with immutable data types. When creating a range over a
+ * mutable type, take great care not to allow the value objects to mutate after
+ * the range is created.
+ *
+ * <p>In this and other range-related specifications, concepts like "equal",
+ * "same", "unique" and so on are based on {@link Comparable#compareTo}
+ * returning zero, not on {@link Object#equals} returning {@code true}. Of
+ * course, when these methods are kept <i>consistent</i> (as defined in {@link
+ * Comparable}), this is not an issue.
+ *
+ * <p>A range {@code a} is said to be the <i>maximal</i> range having property
+ * <i>P</i> if, for all ranges {@code b} also having property <i>P</i>, {@code
+ * a.encloses(b)}. Likewise, {@code a} is <i>minimal</i> when {@code
+ * b.encloses(a)} for all {@code b} having property <i>P</i>. See, for example,
+ * the definition of {@link #intersection}.
+ *
+ * <p>This class can be used with any type which implements {@code Comparable};
+ * it does not require {@code Comparable<? super C>} because this would be
+ * incompatible with pre-Java 5 types. If this class is used with a perverse
+ * {@code Comparable} type ({@code Foo implements Comparable<Bar>} where {@code
+ * Bar} is not a supertype of {@code Foo}), any of its methods may throw {@link
+ * ClassCastException}. (There is no good reason for such a type to exist.)
+ *
+ * <p>When evaluated as a {@link Predicate}, a range yields the same result as
+ * invoking {@link #contains}.
+ *
+ * @author Kevin Bourrillion
+ * @author Gregory Kick
+ * @since 10.0
+ */
+@GwtCompatible
+@Beta
+public final class Range<C extends Comparable>
+    implements Predicate<C>, Serializable {
+  final Cut<C> lowerBound;
+  final Cut<C> upperBound;
+
+  Range(Cut<C> lowerBound, Cut<C> upperBound) {
+    if (lowerBound.compareTo(upperBound) > 0) {
+      throw new IllegalArgumentException(
+          "Invalid range: " + toString(lowerBound, upperBound));
+    }
+    this.lowerBound = lowerBound;
+    this.upperBound = upperBound;
+  }
+
+  /**
+   * Returns {@code true} if this range has a lower endpoint.
+   */
+  public boolean hasLowerBound() {
+    return lowerBound != Cut.belowAll();
+  }
+
+  /**
+   * Returns the lower endpoint of this range.
+   *
+   * @throws IllegalStateException if this range is unbounded below (that is,
+   *     {@link #hasLowerBound()} returns {@code false})
+   */
+  public C lowerEndpoint() {
+    return lowerBound.endpoint();
+  }
+
+  /**
+   * Returns the type of this range's lower bound: {@link BoundType#CLOSED} if
+   * the range includes its lower endpoint, {@link BoundType#OPEN} if it does
+   * not.
+   *
+   * @throws IllegalStateException if this range is unbounded below (that is,
+   *     {@link #hasLowerBound()} returns {@code false})
+   */
+  public BoundType lowerBoundType() {
+    return lowerBound.typeAsLowerBound();
+  }
+
+  /**
+   * Returns {@code true} if this range has an upper endpoint.
+   */
+  public boolean hasUpperBound() {
+    return upperBound != Cut.aboveAll();
+  }
+
+  /**
+   * Returns the upper endpoint of this range.
+   *
+   * @throws IllegalStateException if this range is unbounded above (that is,
+   *     {@link #hasUpperBound()} returns {@code false})
+   */
+  public C upperEndpoint() {
+    return upperBound.endpoint();
+  }
+
+  /**
+   * Returns the type of this range's upper bound: {@link BoundType#CLOSED} if
+   * the range includes its upper endpoint, {@link BoundType#OPEN} if it does
+   * not.
+   *
+   * @throws IllegalStateException if this range is unbounded above (that is,
+   *     {@link #hasUpperBound()} returns {@code false})
+   */
+  public BoundType upperBoundType() {
+    return upperBound.typeAsUpperBound();
+  }
+
+  /**
+   * Returns {@code true} if this range is of the form {@code [v..v)} or {@code
+   * (v..v]}. (This does not encompass ranges of the form {@code (v..v)},
+   * because such ranges are <i>invalid</i> and can't be constructed at all.)
+   *
+   * <p>Note that certain discrete ranges such as the integer range {@code
+   * (3..4)} are <b>not</b> considered empty, even though they contain no actual
+   * values.
+   */
+  public boolean isEmpty() {
+    return lowerBound.equals(upperBound);
+  }
+
+  /**
+   * Returns {@code true} if {@code value} is within the bounds of this
+   * range. For example, on the range {@code [0..2)}, {@code contains(1)}
+   * returns {@code true}, while {@code contains(2)} returns {@code false}.
+   */
+  public boolean contains(C value) {
+    checkNotNull(value);
+    // let this throw CCE if there is some trickery going on
+    return lowerBound.isLessThan(value) && !upperBound.isLessThan(value);
+  }
+
+  /**
+   * Equivalent to {@link #contains}; provided only to satisfy the {@link
+   * Predicate} interface. When using a reference of type {@code Range}, always
+   * invoke {@link #contains} directly instead.
+   */
+  @Override public boolean apply(C input) {
+    return contains(input);
+  }
+
+  /**
+   * Returns {@code true} if every element in {@code values} is {@linkplain
+   * #contains contained} in this range.
+   */
+  public boolean containsAll(Iterable<? extends C> values) {
+    if (Iterables.isEmpty(values)) {
+      return true;
+    }
+
+    // this optimizes testing equality of two range-backed sets
+    if (values instanceof SortedSet) {
+      SortedSet<? extends C> set = cast(values);
+      Comparator<?> comparator = set.comparator();
+      if (Ordering.natural().equals(comparator) || comparator == null) {
+        return contains(set.first()) && contains(set.last());
+      }
+    }
+
+    for (C value : values) {
+      if (!contains(value)) {
+        return false;
+      }
+    }
+    return true;
+  }
+
+  /**
+   * Returns {@code true} if the bounds of {@code other} do not extend outside
+   * the bounds of this range. Examples:
+   *
+   * <ul>
+   * <li>{@code [3..6]} encloses {@code [4..5]}
+   * <li>{@code (3..6)} encloses {@code (3..6)}
+   * <li>{@code [3..6]} encloses {@code [4..4)} (even though the latter is
+   *     empty)
+   * <li>{@code (3..6]} does not enclose {@code [3..6]}
+   * <li>{@code [4..5]} does not enclose {@code (3..6)} (even though it contains
+   *     every value contained by the latter range)
+   * <li>{@code [3..6]} does not enclose {@code (1..1]} (even though it contains
+   *     every value contained by the latter range)
+   * </ul>
+   *
+   * Note that if {@code a.encloses(b)}, then {@code b.contains(v)} implies
+   * {@code a.contains(v)}, but as the last two examples illustrate, the
+   * converse is not always true.
+   *
+   * <p>The encloses relation has the following properties:
+   *
+   * <ul>
+   * <li>reflexive: {@code a.encloses(a)} is always true
+   * <li>antisymmetric: {@code a.encloses(b) && b.encloses(a)} implies {@code
+   *     a.equals(b)}
+   * <li>transitive: {@code a.encloses(b) && b.encloses(c)} implies {@code
+   *     a.encloses(c)}
+   * <li>not a total ordering: {@code !a.encloses(b)} does not imply {@code
+   *     b.encloses(a)}
+   * <li>there exists a {@linkplain Ranges#all maximal} range, for which
+   *     {@code encloses} is always true
+   * <li>there also exist {@linkplain #isEmpty minimal} ranges, for
+   *     which {@code encloses(b)} is always false when {@code !equals(b)}
+   * <li>if {@code a.encloses(b)}, then {@link #isConnected a.isConnected(b)}
+   *     is {@code true}. 
+   * </ul>
+   */
+  public boolean encloses(Range<C> other) {
+    return lowerBound.compareTo(other.lowerBound) <= 0
+        && upperBound.compareTo(other.upperBound) >= 0;
+  }
+
+  /**
+   * Returns the maximal range {@linkplain #encloses enclosed} by both this
+   * range and {@code other}, if such a range exists.
+   * 
+   * <p>For example, the intersection of {@code [1..5]} and {@code (3..7)} is
+   * {@code (3..5]}. The resulting range may be empty; for example, 
+   * {@code [1..5)} intersected with {@code [5..7)} yields the empty range
+   * {@code [5..5)}.
+   * 
+   * <p>Generally, the intersection exists if and only if this range and 
+   * {@code other} are {@linkplain #isConnected connected}.
+   *
+   * <p>The intersection operation has the following properties:
+   *
+   * <ul>
+   * <li>commutative: {@code a.intersection(b)} produces the same result as
+   *     {@code b.intersection(a)}
+   * <li>associative: {@code a.intersection(b).intersection(c)} produces the
+   *     same result as {@code a.intersection(b.intersection(c))}
+   * <li>idempotent: {@code a.intersection(a)} equals {@code a}
+   * <li>identity ({@link Ranges#all}): {@code a.intersection(Ranges.all())}
+   *     equals {@code a}
+   * </ul>
+   *
+   * @throws IllegalArgumentException if no range exists that is enclosed by
+   *     both these ranges
+   */
+  public Range<C> intersection(Range<C> other) {
+    Cut<C> newLower = Ordering.natural().max(lowerBound, other.lowerBound);
+    Cut<C> newUpper = Ordering.natural().min(upperBound, other.upperBound);
+    return create(newLower, newUpper);
+  }
+
+  /**
+   * Returns {@code true} if there exists a (possibly empty) range which is
+   * {@linkplain #encloses enclosed} by both this range and {@code other}.
+   * 
+   * <p>For example,
+   * <ul>
+   * <li>{@code [2, 4)} and {@code [5, 7)} are not connected
+   * <li>{@code [2, 4)} and {@code [3, 5)} are connected, because both enclose
+   *     {@code [3, 4)}
+   * <li>{@code [2, 4)} and {@code [4, 6)} are connected, because both enclose
+   *     the empty range {@code [4, 4)}
+   * </ul>
+   * 
+   * <p>Note that this range and {@code other} have a well-defined {@linkplain
+   * #span union} and {@linkplain #intersection intersection} (as a single,
+   * possibly-empty range) if and only if this method returns {@code true}.
+   * 
+   * <p>The connectedness relation has the following properties:
+   *
+   * <ul>
+   * <li>symmetric: {@code a.isConnected(b)} produces the same result as
+   *     {@code b.isConnected(a)}
+   * <li>reflexive: {@code a.isConnected(a)} returns {@code true}
+   * </ul>
+   */
+  public boolean isConnected(Range<C> other) {
+    return lowerBound.compareTo(other.upperBound) <= 0
+        && other.lowerBound.compareTo(upperBound) <= 0;
+  }
+
+  /**
+   * Returns the minimal range that {@linkplain #encloses encloses} both this
+   * range and {@code other}. For example, the span of {@code [1..3]} and
+   * {@code (5..7)} is {@code [1..7)}. Note that the span may contain values
+   * that are not contained by either original range.
+   *
+   * <p>The span operation has the following properties:
+   *
+   * <ul>
+   * <li>closed: the range {@code a.span(b)} exists for all ranges {@code a} and
+   *     {@code b}
+   * <li>commutative: {@code a.span(b)} equals {@code b.span(a)}
+   * <li>associative: {@code a.span(b).span(c)} equals {@code a.span(b.span(c))}
+   * <li>idempotent: {@code a.span(a)} equals {@code a}
+   * </ul>
+   * 
+   * <p>Note that the returned range is also called the <i>union</i> of this
+   * range and {@code other} if and only if the ranges are 
+   * {@linkplain #isConnected connected}.
+   */
+  public Range<C> span(Range<C> other) {
+    Cut<C> newLower = Ordering.natural().min(lowerBound, other.lowerBound);
+    Cut<C> newUpper = Ordering.natural().max(upperBound, other.upperBound);
+    return create(newLower, newUpper);
+  }
+
+  /**
+   * Returns an {@link ImmutableSortedSet} containing the same values in the
+   * given domain {@linkplain Range#contains contained} by this range.
+   *
+   * <p><b>Note:</b> {@code a.asSet().equals(b.asSet())} does not imply {@code
+   * a.equals(b)}! For example, {@code a} and {@code b} could be {@code [2..4]}
+   * and {@code (1..5)}, or the empty ranges {@code [3..3)} and {@code [4..4)}.
+   *
+   * <p><b>Warning:</b> Be extremely careful what you do with the {@code asSet}
+   * view of a large range (such as {@code Ranges.greaterThan(0)}). Certain
+   * operations on such a set can be performed efficiently, but others (such as
+   * {@link Set#hashCode} or {@link Collections#frequency}) can cause major
+   * performance problems.
+   *
+   * <p>The returned set's {@link Object#toString} method returns a short-hand
+   * form of set's contents such as {@code "[1..100]}"}.
+   *
+   * @throws IllegalArgumentException if neither this range nor the domain has a
+   *     lower bound, or if neither has an upper bound
+   */
+  // TODO(kevinb): commit in spec to which methods are efficient?
+  @GwtCompatible(serializable = false)
+  public ContiguousSet<C> asSet(DiscreteDomain<C> domain) {
+    checkNotNull(domain);
+    Range<C> effectiveRange = this;
+    try {
+      if (!hasLowerBound()) {
+        effectiveRange = effectiveRange.intersection(
+            Ranges.atLeast(domain.minValue()));
+      }
+      if (!hasUpperBound()) {
+        effectiveRange = effectiveRange.intersection(
+            Ranges.atMost(domain.maxValue()));
+      }
+    } catch (NoSuchElementException e) {
+      throw new IllegalArgumentException(e);
+    }
+
+    // Per class spec, we are allowed to throw CCE if necessary
+    boolean empty = effectiveRange.isEmpty()
+        || compareOrThrow(
+            lowerBound.leastValueAbove(domain),
+            upperBound.greatestValueBelow(domain)) > 0;
+
+    return empty
+        ? new EmptyContiguousSet<C>(domain)
+        : new RegularContiguousSet<C>(effectiveRange, domain);
+  }
+
+  /**
+   * Returns the canonical form of this range in the given domain. The canonical
+   * form has the following properties:
+   *
+   * <ul>
+   * <li>equivalence: {@code a.canonical().contains(v) == a.contains(v)} for
+   *     all {@code v} (in other words, {@code
+   *     a.canonical(domain).asSet(domain).equals(a.asSet(domain))}
+   * <li>uniqueness: unless {@code a.isEmpty()},
+   *     {@code a.asSet(domain).equals(b.asSet(domain))} implies
+   *     {@code a.canonical(domain).equals(b.canonical(domain))}
+   * <li>idempotence: {@code
+   *     a.canonical(domain).canonical(domain).equals(a.canonical(domain))}
+   * </ul>
+   *
+   * Furthermore, this method guarantees that the range returned will be one
+   * of the following canonical forms:
+   *
+   * <ul>
+   * <li>[start..end)
+   * <li>[start..+∞)
+   * <li>(-∞..end) (only if type {@code C} is unbounded below)
+   * <li>(-∞..+∞) (only if type {@code C} is unbounded below)
+   * </ul>
+   */
+  public Range<C> canonical(DiscreteDomain<C> domain) {
+    checkNotNull(domain);
+    Cut<C> lower = lowerBound.canonical(domain);
+    Cut<C> upper = upperBound.canonical(domain);
+    return (lower == lowerBound && upper == upperBound)
+        ? this : create(lower, upper);
+  }
+
+  /**
+   * Returns {@code true} if {@code object} is a range having the same
+   * endpoints and bound types as this range. Note that discrete ranges
+   * such as {@code (1..4)} and {@code [2..3]} are <b>not</b> equal to one
+   * another, despite the fact that they each contain precisely the same set of
+   * values. Similarly, empty ranges are not equal unless they have exactly
+   * the same representation, so {@code [3..3)}, {@code (3..3]}, {@code (4..4]}
+   * are all unequal.
+   */
+  @Override public boolean equals(@Nullable Object object) {
+    if (object instanceof Range) {
+      Range<?> other = (Range<?>) object;
+      return lowerBound.equals(other.lowerBound)
+          && upperBound.equals(other.upperBound);
+    }
+    return false;
+  }
+
+  /** Returns a hash code for this range. */
+  @Override public int hashCode() {
+    return lowerBound.hashCode() * 31 + upperBound.hashCode();
+  }
+
+  /**
+   * Returns a string representation of this range, such as {@code "[3..5)"}
+   * (other examples are listed in the class documentation).
+   */
+  @Override public String toString() {
+    return toString(lowerBound, upperBound);
+  }
+
+  private static String toString(Cut<?> lowerBound, Cut<?> upperBound) {
+    StringBuilder sb = new StringBuilder(16);
+    lowerBound.describeAsLowerBound(sb);
+    sb.append('\u2025');
+    upperBound.describeAsUpperBound(sb);
+    return sb.toString();
+  }
+
+  /**
+   * Used to avoid http://bugs.sun.com/view_bug.do?bug_id=6558557
+   */
+  private static <T> SortedSet<T> cast(Iterable<T> iterable) {
+    return (SortedSet<T>) iterable;
+  }
+
+  @SuppressWarnings("unchecked") // this method may throw CCE
+  static int compareOrThrow(Comparable left, Comparable right) {
+    return left.compareTo(right);
+  }
+
+  private static final long serialVersionUID = 0;
+}
diff --git a/guava/src/com/google/common/collect/Ranges.java b/guava/src/com/google/common/collect/Ranges.java
new file mode 100644
index 0000000..131bf3b
--- /dev/null
+++ b/guava/src/com/google/common/collect/Ranges.java
@@ -0,0 +1,251 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+
+/**
+ * Static methods pertaining to {@link Range} instances.  Each of the
+ * {@link Range nine types of ranges} can be constructed with a corresponding
+ * factory method:
+ *
+ * <dl>
+ * <dt>{@code (a..b)}
+ * <dd>{@link #open}
+ * <dt>{@code [a..b]}
+ * <dd>{@link #closed}
+ * <dt>{@code [a..b)}
+ * <dd>{@link #closedOpen}
+ * <dt>{@code (a..b]}
+ * <dd>{@link #openClosed}
+ * <dt>{@code (a..+∞)}
+ * <dd>{@link #greaterThan}
+ * <dt>{@code [a..+∞)}
+ * <dd>{@link #atLeast}
+ * <dt>{@code (-∞..b)}
+ * <dd>{@link #lessThan}
+ * <dt>{@code (-∞..b]}
+ * <dd>{@link #atMost}
+ * <dt>{@code (-∞..+∞)}
+ * <dd>{@link #all}
+ * </dl>
+ *
+ * <p>Additionally, {@link Range} instances can be constructed by passing the
+ * {@link BoundType bound types} explicitly.
+ *
+ * <dl>
+ * <dt>Bounded on both ends
+ * <dd>{@link #range}
+ * <dt>Unbounded on top ({@code (a..+∞)} or {@code (a..+∞)})
+ * <dd>{@link #downTo}
+ * <dt>Unbounded on bottom ({@code (-∞..b)} or {@code (-∞..b]})
+ * <dd>{@link #upTo}
+ * </dl>
+ *
+ * @author Kevin Bourrillion
+ * @author Gregory Kick
+ * @since 10.0
+ */
+@GwtCompatible
+@Beta
+public final class Ranges {
+  private Ranges() {}
+
+  static <C extends Comparable<?>> Range<C> create(
+      Cut<C> lowerBound, Cut<C> upperBound) {
+    return new Range<C>(lowerBound, upperBound);
+  }
+
+  /**
+   * Returns a range that contains all values strictly greater than {@code
+   * lower} and strictly less than {@code upper}.
+   *
+   * @throws IllegalArgumentException if {@code lower} is greater than <i>or
+   *     equal to</i> {@code upper}
+   */
+  public static <C extends Comparable<?>> Range<C> open(C lower, C upper) {
+    return create(Cut.aboveValue(lower), Cut.belowValue(upper));
+  }
+
+  /**
+   * Returns a range that contains all values greater than or equal to
+   * {@code lower} and less than or equal to {@code upper}.
+   *
+   * @throws IllegalArgumentException if {@code lower} is greater than {@code
+   *     upper}
+   */
+  public static <C extends Comparable<?>> Range<C> closed(C lower, C upper) {
+    return create(Cut.belowValue(lower), Cut.aboveValue(upper));
+  }
+
+  /**
+   * Returns a range that contains all values greater than or equal to
+   * {@code lower} and strictly less than {@code upper}.
+   *
+   * @throws IllegalArgumentException if {@code lower} is greater than {@code
+   *     upper}
+   */
+  public static <C extends Comparable<?>> Range<C> closedOpen(
+      C lower, C upper) {
+    return create(Cut.belowValue(lower), Cut.belowValue(upper));
+  }
+
+  /**
+   * Returns a range that contains all values strictly greater than {@code
+   * lower} and less than or equal to {@code upper}.
+   *
+   * @throws IllegalArgumentException if {@code lower} is greater than {@code
+   *     upper}
+   */
+  public static <C extends Comparable<?>> Range<C> openClosed(
+      C lower, C upper) {
+    return create(Cut.aboveValue(lower), Cut.aboveValue(upper));
+  }
+
+  /**
+   * Returns a range that contains any value from {@code lower} to {@code
+   * upper}, where each endpoint may be either inclusive (closed) or exclusive
+   * (open).
+   *
+   * @throws IllegalArgumentException if {@code lower} is greater than {@code
+   *     upper}
+   */
+  public static <C extends Comparable<?>> Range<C> range(
+      C lower, BoundType lowerType, C upper, BoundType upperType) {
+    checkNotNull(lowerType);
+    checkNotNull(upperType);
+
+    Cut<C> lowerBound = (lowerType == BoundType.OPEN)
+        ? Cut.aboveValue(lower)
+        : Cut.belowValue(lower);
+    Cut<C> upperBound = (upperType == BoundType.OPEN)
+        ? Cut.belowValue(upper)
+        : Cut.aboveValue(upper);
+    return create(lowerBound, upperBound);
+  }
+
+  /**
+   * Returns a range that contains all values strictly less than {@code
+   * endpoint}.
+   */
+  public static <C extends Comparable<?>> Range<C> lessThan(C endpoint) {
+    return create(Cut.<C>belowAll(), Cut.belowValue(endpoint));
+  }
+
+  /**
+   * Returns a range that contains all values less than or equal to
+   * {@code endpoint}.
+   */
+  public static <C extends Comparable<?>> Range<C> atMost(C endpoint) {
+    return create(Cut.<C>belowAll(), Cut.aboveValue(endpoint));
+  }
+
+  /**
+   * Returns a range with no lower bound up to the given endpoint, which may be
+   * either inclusive (closed) or exclusive (open).
+   */
+  public static <C extends Comparable<?>> Range<C> upTo(
+      C endpoint, BoundType boundType) {
+    switch (boundType) {
+      case OPEN:
+        return lessThan(endpoint);
+      case CLOSED:
+        return atMost(endpoint);
+      default:
+        throw new AssertionError();
+    }
+  }
+
+  /**
+   * Returns a range that contains all values strictly greater than {@code
+   * endpoint}.
+   */
+  public static <C extends Comparable<?>> Range<C> greaterThan(C endpoint) {
+    return create(Cut.aboveValue(endpoint), Cut.<C>aboveAll());
+  }
+
+  /**
+   * Returns a range that contains all values greater than or equal to
+   * {@code endpoint}.
+   */
+  public static <C extends Comparable<?>> Range<C> atLeast(C endpoint) {
+    return create(Cut.belowValue(endpoint), Cut.<C>aboveAll());
+  }
+
+  /**
+   * Returns a range from the given endpoint, which may be either inclusive
+   * (closed) or exclusive (open), with no upper bound.
+   */
+  public static <C extends Comparable<?>> Range<C> downTo(
+      C endpoint, BoundType boundType) {
+    switch (boundType) {
+      case OPEN:
+        return greaterThan(endpoint);
+      case CLOSED:
+        return atLeast(endpoint);
+      default:
+        throw new AssertionError();
+    }
+  }
+
+  /** Returns a range that contains every value of type {@code C}. */
+  public static <C extends Comparable<?>> Range<C> all() {
+    return create(Cut.<C>belowAll(), Cut.<C>aboveAll());
+  }
+
+  /**
+   * Returns a range that {@linkplain Range#contains(Comparable) contains} only
+   * the given value. The returned range is {@linkplain BoundType#CLOSED closed}
+   * on both ends.
+   */
+  public static <C extends Comparable<?>> Range<C> singleton(C value) {
+    return closed(value, value);
+  }
+
+  /**
+   * Returns the minimal range that
+   * {@linkplain Range#contains(Comparable) contains} all of the given values.
+   * The returned range is {@linkplain BoundType#CLOSED closed} on both ends.
+   *
+   * @throws ClassCastException if the parameters are not <i>mutually
+   *     comparable</i>
+   * @throws NoSuchElementException if {@code values} is empty
+   * @throws NullPointerException if any of {@code values} is null
+   */
+  public static <C extends Comparable<?>> Range<C> encloseAll(
+      Iterable<C> values) {
+    checkNotNull(values);
+    if (values instanceof ContiguousSet) {
+      return ((ContiguousSet<C>) values).range();
+    }
+    Iterator<C> valueIterator = values.iterator();
+    C min = checkNotNull(valueIterator.next());
+    C max = min;
+    while (valueIterator.hasNext()) {
+      C value = checkNotNull(valueIterator.next());
+      min = Ordering.natural().min(min, value);
+      max = Ordering.natural().max(max, value);
+    }
+    return closed(min, max);
+  }
+}
diff --git a/guava/src/com/google/common/collect/RegularContiguousSet.java b/guava/src/com/google/common/collect/RegularContiguousSet.java
new file mode 100644
index 0000000..10b26f9
--- /dev/null
+++ b/guava/src/com/google/common/collect/RegularContiguousSet.java
@@ -0,0 +1,192 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.collect.BoundType.CLOSED;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+
+import java.io.Serializable;
+import java.util.Collection;
+
+import javax.annotation.Nullable;
+
+/**
+ * An implementation of {@link ContiguousSet} that contains one or more elements.
+ *
+ * @author Gregory Kick
+ */
+@GwtCompatible(emulated = true)
+@SuppressWarnings("unchecked") // allow ungenerified Comparable types
+final class RegularContiguousSet<C extends Comparable> extends ContiguousSet<C> {
+  private final Range<C> range;
+
+  RegularContiguousSet(Range<C> range, DiscreteDomain<C> domain) {
+    super(domain);
+    this.range = range;
+  }
+
+  // Abstract method doesn't exist in GWT emulation
+  /* @Override */ ContiguousSet<C> headSetImpl(C toElement, boolean inclusive) {
+    return range.intersection(Ranges.upTo(toElement, BoundType.forBoolean(inclusive)))
+        .asSet(domain);
+  }
+
+  // Abstract method doesn't exist in GWT emulation
+  /* @Override */ int indexOf(Object target) {
+    return contains(target) ? (int) domain.distance(first(), (C) target) : -1;
+  }
+
+  // Abstract method doesn't exist in GWT emulation
+  /* @Override */ ContiguousSet<C> subSetImpl(C fromElement, boolean fromInclusive, C toElement,
+      boolean toInclusive) {
+    return range.intersection(Ranges.range(fromElement, BoundType.forBoolean(fromInclusive),
+        toElement, BoundType.forBoolean(toInclusive))).asSet(domain);
+  }
+
+  // Abstract method doesn't exist in GWT emulation
+  /* @Override */ ContiguousSet<C> tailSetImpl(C fromElement, boolean inclusive) {
+    return range.intersection(Ranges.downTo(fromElement, BoundType.forBoolean(inclusive)))
+        .asSet(domain);
+  }
+
+  @Override public UnmodifiableIterator<C> iterator() {
+    return new AbstractLinkedIterator<C>(first()) {
+      final C last = last();
+
+      @Override
+      protected C computeNext(C previous) {
+        return equalsOrThrow(previous, last) ? null : domain.next(previous);
+      }
+    };
+  }
+
+  private static boolean equalsOrThrow(Comparable<?> left, @Nullable Comparable<?> right) {
+    return right != null && Range.compareOrThrow(left, right) == 0;
+  }
+
+  @Override boolean isPartialView() {
+    return false;
+  }
+
+  @Override public C first() {
+    return range.lowerBound.leastValueAbove(domain);
+  }
+
+  @Override public C last() {
+    return range.upperBound.greatestValueBelow(domain);
+  }
+
+  @Override public int size() {
+    long distance = domain.distance(first(), last());
+    return (distance >= Integer.MAX_VALUE) ? Integer.MAX_VALUE : (int) distance + 1;
+  }
+
+  @Override public boolean contains(Object object) {
+    try {
+      return range.contains((C) object);
+    } catch (ClassCastException e) {
+      return false;
+    }
+  }
+
+  @Override public boolean containsAll(Collection<?> targets) {
+    try {
+      return range.containsAll((Iterable<? extends C>) targets);
+    } catch (ClassCastException e) {
+      return false;
+    }
+  }
+
+  @Override public boolean isEmpty() {
+    return false;
+  }
+
+  // copied to make sure not to use the GWT-emulated version
+  @Override public Object[] toArray() {
+    return ObjectArrays.toArrayImpl(this);
+  }
+
+  // copied to make sure not to use the GWT-emulated version
+  @Override public <T> T[] toArray(T[] other) {
+    return ObjectArrays.toArrayImpl(this, other);
+  }
+
+  @Override public ContiguousSet<C> intersection(ContiguousSet<C> other) {
+    checkNotNull(other);
+    checkArgument(this.domain.equals(other.domain));
+    if (other.isEmpty()) {
+      return other;
+    } else {
+      C lowerEndpoint = Ordering.natural().max(this.first(), other.first());
+      C upperEndpoint = Ordering.natural().min(this.last(), other.last());
+      return (lowerEndpoint.compareTo(upperEndpoint) < 0)
+          ? Ranges.closed(lowerEndpoint, upperEndpoint).asSet(domain)
+          : new EmptyContiguousSet<C>(domain);
+    }
+  }
+
+  @Override public Range<C> range() {
+    return range(CLOSED, CLOSED);
+  }
+
+  @Override public Range<C> range(BoundType lowerBoundType, BoundType upperBoundType) {
+    return Ranges.create(range.lowerBound.withLowerBoundType(lowerBoundType, domain),
+        range.upperBound.withUpperBoundType(upperBoundType, domain));
+  }
+
+  @Override public boolean equals(Object object) {
+    if (object == this) {
+      return true;
+    } else if (object instanceof RegularContiguousSet<?>) {
+      RegularContiguousSet<?> that = (RegularContiguousSet<?>) object;
+      if (this.domain.equals(that.domain)) {
+        return this.first().equals(that.first())
+            && this.last().equals(that.last());
+      }
+    }
+    return super.equals(object);
+  }
+
+  // copied to make sure not to use the GWT-emulated version
+  @Override public int hashCode() {
+    return Sets.hashCodeImpl(this);
+  }
+
+  @GwtIncompatible("serialization")
+  private static final class SerializedForm<C extends Comparable> implements Serializable {
+    final Range<C> range;
+    final DiscreteDomain<C> domain;
+
+    private SerializedForm(Range<C> range, DiscreteDomain<C> domain) {
+      this.range = range;
+      this.domain = domain;
+    }
+
+    private Object readResolve() {
+      return new RegularContiguousSet<C>(range, domain);
+    }
+  }
+
+  @GwtIncompatible("serialization")
+  @Override Object writeReplace() {
+    return new SerializedForm<C>(range, domain);
+  }
+
+  private static final long serialVersionUID = 0;
+}
diff --git a/guava/src/com/google/common/collect/RegularImmutableBiMap.java b/guava/src/com/google/common/collect/RegularImmutableBiMap.java
new file mode 100644
index 0000000..dca1f05
--- /dev/null
+++ b/guava/src/com/google/common/collect/RegularImmutableBiMap.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+/**
+ * Bimap with one or more mappings.
+ * 
+ * @author Jared Levy
+ */
+@GwtCompatible(serializable = true, emulated = true)
+@SuppressWarnings("serial") // uses writeReplace(), not default serialization
+class RegularImmutableBiMap<K, V> extends ImmutableBiMap<K, V> {
+  final transient ImmutableMap<K, V> delegate;
+  final transient ImmutableBiMap<V, K> inverse;
+
+  RegularImmutableBiMap(ImmutableMap<K, V> delegate) {
+    this.delegate = delegate;
+
+    ImmutableMap.Builder<V, K> builder = ImmutableMap.builder();
+    for (Entry<K, V> entry : delegate.entrySet()) {
+      builder.put(entry.getValue(), entry.getKey());
+    }
+    ImmutableMap<V, K> backwardMap = builder.build();
+    this.inverse = new RegularImmutableBiMap<V, K>(backwardMap, this);
+  }
+
+  RegularImmutableBiMap(ImmutableMap<K, V> delegate,
+      ImmutableBiMap<V, K> inverse) {
+    this.delegate = delegate;
+    this.inverse = inverse;
+  }
+
+  @Override ImmutableMap<K, V> delegate() {
+    return delegate;
+  }
+
+  @Override public ImmutableBiMap<V, K> inverse() {
+    return inverse;
+  }
+
+  @Override boolean isPartialView() {
+    return delegate.isPartialView() || inverse.delegate().isPartialView();
+  }
+}
diff --git a/guava/src/com/google/common/collect/RegularImmutableList.java b/guava/src/com/google/common/collect/RegularImmutableList.java
new file mode 100644
index 0000000..27f47f5
--- /dev/null
+++ b/guava/src/com/google/common/collect/RegularImmutableList.java
@@ -0,0 +1,185 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Preconditions;
+
+import java.util.List;
+
+import javax.annotation.Nullable;
+
+/**
+ * Implementation of {@link ImmutableList} with one or more elements.
+ *
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible(serializable = true, emulated = true)
+@SuppressWarnings("serial") // uses writeReplace(), not default serialization
+class RegularImmutableList<E> extends ImmutableList<E> {
+  private final transient int offset;
+  private final transient int size;
+  private final transient Object[] array;
+
+  RegularImmutableList(Object[] array, int offset, int size) {
+    this.offset = offset;
+    this.size = size;
+    this.array = array;
+  }
+
+  RegularImmutableList(Object[] array) {
+    this(array, 0, array.length);
+  }
+
+  @Override
+  public int size() {
+    return size;
+  }
+
+  @Override public boolean isEmpty() {
+    return false;
+  }
+
+  @Override boolean isPartialView() {
+    return offset != 0 || size != array.length;
+  }
+
+  @Override public boolean contains(@Nullable Object target) {
+    return indexOf(target) != -1;
+  }
+
+  // The fake cast to E is safe because the creation methods only allow E's
+  @SuppressWarnings("unchecked")
+  @Override public UnmodifiableIterator<E> iterator() {
+    return (UnmodifiableIterator<E>) Iterators.forArray(array, offset, size);
+  }
+
+  @Override public Object[] toArray() {
+    Object[] newArray = new Object[size()];
+    System.arraycopy(array, offset, newArray, 0, size);
+    return newArray;
+  }
+
+  @Override public <T> T[] toArray(T[] other) {
+    if (other.length < size) {
+      other = ObjectArrays.newArray(other, size);
+    } else if (other.length > size) {
+      other[size] = null;
+    }
+    System.arraycopy(array, offset, other, 0, size);
+    return other;
+  }
+
+  // The fake cast to E is safe because the creation methods only allow E's
+  @Override
+  @SuppressWarnings("unchecked")
+  public E get(int index) {
+    Preconditions.checkElementIndex(index, size);
+    return (E) array[index + offset];
+  }
+
+  @Override public int indexOf(@Nullable Object target) {
+    if (target != null) {
+      for (int i = offset; i < offset + size; i++) {
+        if (array[i].equals(target)) {
+          return i - offset;
+        }
+      }
+    }
+    return -1;
+  }
+
+  @Override public int lastIndexOf(@Nullable Object target) {
+    if (target != null) {
+      for (int i = offset + size - 1; i >= offset; i--) {
+        if (array[i].equals(target)) {
+          return i - offset;
+        }
+      }
+    }
+    return -1;
+  }
+
+  @Override public ImmutableList<E> subList(int fromIndex, int toIndex) {
+    Preconditions.checkPositionIndexes(fromIndex, toIndex, size);
+    return (fromIndex == toIndex)
+        ? ImmutableList.<E>of()
+        : new RegularImmutableList<E>(
+            array, offset + fromIndex, toIndex - fromIndex);
+  }
+
+  @Override public UnmodifiableListIterator<E> listIterator(final int start) {
+    return new AbstractIndexedListIterator<E>(size, start) {
+      // The fake cast to E is safe because the creation methods only allow E's
+      @SuppressWarnings("unchecked")
+      @Override protected E get(int index) {
+        return (E) array[index + offset];
+      }
+
+    };
+  }
+
+  @Override public boolean equals(@Nullable Object object) {
+    if (object == this) {
+      return true;
+    }
+    if (!(object instanceof List)) {
+      return false;
+    }
+
+    List<?> that = (List<?>) object;
+    if (this.size() != that.size()) {
+      return false;
+    }
+
+    int index = offset;
+    if (object instanceof RegularImmutableList) {
+      RegularImmutableList<?> other = (RegularImmutableList<?>) object;
+      for (int i = other.offset; i < other.offset + other.size; i++) {
+        if (!array[index++].equals(other.array[i])) {
+          return false;
+        }
+      }
+    } else {
+      for (Object element : that) {
+        if (!array[index++].equals(element)) {
+          return false;
+        }
+      }
+    }
+    return true;
+  }
+
+  @Override public int hashCode() {
+    // not caching hash code since it could change if the elements are mutable
+    // in a way that modifies their hash codes
+    int hashCode = 1;
+    for (int i = offset; i < offset + size; i++) {
+      hashCode = 31 * hashCode + array[i].hashCode();
+    }
+    return hashCode;
+  }
+
+  @Override public String toString() {
+    StringBuilder sb = Collections2.newStringBuilderForCollection(size())
+        .append('[').append(array[offset]);
+    for (int i = offset + 1; i < offset + size; i++) {
+      sb.append(", ").append(array[i]);
+    }
+    return sb.append(']').toString();
+  }
+}
diff --git a/guava/src/com/google/common/collect/RegularImmutableMap.java b/guava/src/com/google/common/collect/RegularImmutableMap.java
new file mode 100644
index 0000000..e2b7150
--- /dev/null
+++ b/guava/src/com/google/common/collect/RegularImmutableMap.java
@@ -0,0 +1,293 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkArgument;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.collect.ImmutableSet.ArrayImmutableSet;
+import com.google.common.collect.ImmutableSet.TransformedImmutableSet;
+
+import javax.annotation.Nullable;
+import javax.annotation.concurrent.Immutable;
+
+/**
+ * Implementation of {@link ImmutableMap} with two or more entries.
+ *
+ * @author Jesse Wilson
+ * @author Kevin Bourrillion
+ * @author Gregory Kick
+ */
+@GwtCompatible(serializable = true, emulated = true)
+final class RegularImmutableMap<K, V> extends ImmutableMap<K, V> {
+
+  // entries in insertion order
+  private final transient LinkedEntry<K, V>[] entries;
+  // array of linked lists of entries
+  private final transient LinkedEntry<K, V>[] table;
+  // 'and' with an int to get a table index
+  private final transient int mask;
+  private final transient int keySetHashCode;
+
+  // TODO(gak): investigate avoiding the creation of ImmutableEntries since we
+  // re-copy them anyway.
+  RegularImmutableMap(Entry<?, ?>... immutableEntries) {
+    int size = immutableEntries.length;
+    entries = createEntryArray(size);
+
+    int tableSize = chooseTableSize(size);
+    table = createEntryArray(tableSize);
+    mask = tableSize - 1;
+
+    int keySetHashCodeMutable = 0;
+    for (int entryIndex = 0; entryIndex < size; entryIndex++) {
+      // each of our 6 callers carefully put only Entry<K, V>s into the array!
+      @SuppressWarnings("unchecked")
+      Entry<K, V> entry = (Entry<K, V>) immutableEntries[entryIndex];
+      K key = entry.getKey();
+      int keyHashCode = key.hashCode();
+      keySetHashCodeMutable += keyHashCode;
+      int tableIndex = Hashing.smear(keyHashCode) & mask;
+      @Nullable LinkedEntry<K, V> existing = table[tableIndex];
+      // prepend, not append, so the entries can be immutable
+      LinkedEntry<K, V> linkedEntry =
+          newLinkedEntry(key, entry.getValue(), existing);
+      table[tableIndex] = linkedEntry;
+      entries[entryIndex] = linkedEntry;
+      while (existing != null) {
+        checkArgument(!key.equals(existing.getKey()), "duplicate key: %s", key);
+        existing = existing.next();
+      }
+    }
+    keySetHashCode = keySetHashCodeMutable;
+  }
+
+  private static int chooseTableSize(int size) {
+    // least power of 2 greater than size
+    int tableSize = Integer.highestOneBit(size) << 1;
+    checkArgument(tableSize > 0, "table too large: %s", size);
+    return tableSize;
+  }
+
+  /**
+   * Creates a {@link LinkedEntry} array to hold parameterized entries. The
+   * result must never be upcast back to LinkedEntry[] (or Object[], etc.), or
+   * allowed to escape the class.
+   */
+  @SuppressWarnings("unchecked") // Safe as long as the javadocs are followed
+  private LinkedEntry<K, V>[] createEntryArray(int size) {
+    return new LinkedEntry[size];
+  }
+
+  private static <K, V> LinkedEntry<K, V> newLinkedEntry(K key, V value,
+      @Nullable LinkedEntry<K, V> next) {
+    return (next == null)
+        ? new TerminalEntry<K, V>(key, value)
+        : new NonTerminalEntry<K, V>(key, value, next);
+  }
+
+  private interface LinkedEntry<K, V> extends Entry<K, V> {
+    /** Returns the next entry in the list or {@code null} if none exists. */
+    @Nullable LinkedEntry<K, V> next();
+  }
+
+  /** {@code LinkedEntry} implementation that has a next value. */
+  @Immutable
+  @SuppressWarnings("serial") // this class is never serialized
+  private static final class NonTerminalEntry<K, V>
+      extends ImmutableEntry<K, V> implements LinkedEntry<K, V> {
+    final LinkedEntry<K, V> next;
+
+    NonTerminalEntry(K key, V value, LinkedEntry<K, V> next) {
+      super(key, value);
+      this.next = next;
+    }
+
+    @Override public LinkedEntry<K, V> next() {
+      return next;
+    }
+  }
+
+  /**
+   * {@code LinkedEntry} implementation that serves as the last entry in the
+   * list.  I.e. no next entry
+   */
+  @Immutable
+  @SuppressWarnings("serial") // this class is never serialized
+  private static final class TerminalEntry<K, V> extends ImmutableEntry<K, V>
+      implements LinkedEntry<K, V> {
+    TerminalEntry(K key, V value) {
+      super(key, value);
+    }
+
+    @Nullable @Override public LinkedEntry<K, V> next() {
+      return null;
+    }
+  }
+
+  @Override public V get(@Nullable Object key) {
+    if (key == null) {
+      return null;
+    }
+    int index = Hashing.smear(key.hashCode()) & mask;
+    for (LinkedEntry<K, V> entry = table[index];
+        entry != null;
+        entry = entry.next()) {
+      K candidateKey = entry.getKey();
+
+      /*
+       * Assume that equals uses the == optimization when appropriate, and that
+       * it would check hash codes as an optimization when appropriate. If we
+       * did these things, it would just make things worse for the most
+       * performance-conscious users.
+       */
+      if (key.equals(candidateKey)) {
+        return entry.getValue();
+      }
+    }
+    return null;
+  }
+
+  @Override
+  public int size() {
+    return entries.length;
+  }
+
+  @Override public boolean isEmpty() {
+    return false;
+  }
+
+  @Override public boolean containsValue(@Nullable Object value) {
+    if (value == null) {
+      return false;
+    }
+    for (Entry<K, V> entry : entries) {
+      if (entry.getValue().equals(value)) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  @Override boolean isPartialView() {
+    return false;
+  }
+
+  private transient ImmutableSet<Entry<K, V>> entrySet;
+
+  @Override public ImmutableSet<Entry<K, V>> entrySet() {
+    ImmutableSet<Entry<K, V>> es = entrySet;
+    return (es == null) ? (entrySet = new EntrySet<K, V>(this)) : es;
+  }
+
+  @SuppressWarnings("serial") // uses writeReplace(), not default serialization
+  private static class EntrySet<K, V> extends ArrayImmutableSet<Entry<K, V>> {
+    final transient RegularImmutableMap<K, V> map;
+
+    EntrySet(RegularImmutableMap<K, V> map) {
+      super(map.entries);
+      this.map = map;
+    }
+
+    @Override public boolean contains(Object target) {
+      if (target instanceof Entry) {
+        Entry<?, ?> entry = (Entry<?, ?>) target;
+        V mappedValue = map.get(entry.getKey());
+        return mappedValue != null && mappedValue.equals(entry.getValue());
+      }
+      return false;
+    }
+  }
+
+  private transient ImmutableSet<K> keySet;
+
+  @Override public ImmutableSet<K> keySet() {
+    ImmutableSet<K> ks = keySet;
+    return (ks == null) ? (keySet = new KeySet<K, V>(this)) : ks;
+  }
+
+  @SuppressWarnings("serial") // uses writeReplace(), not default serialization
+  private static class KeySet<K, V>
+      extends TransformedImmutableSet<Entry<K, V>, K> {
+    final RegularImmutableMap<K, V> map;
+
+    KeySet(RegularImmutableMap<K, V> map) {
+      super(map.entries, map.keySetHashCode);
+      this.map = map;
+    }
+
+    @Override K transform(Entry<K, V> element) {
+      return element.getKey();
+    }
+
+    @Override public boolean contains(Object target) {
+      return map.containsKey(target);
+    }
+
+    @Override boolean isPartialView() {
+      return true;
+    }
+  }
+
+  private transient ImmutableCollection<V> values;
+
+  @Override public ImmutableCollection<V> values() {
+    ImmutableCollection<V> v = values;
+    return (v == null) ? (values = new Values<V>(this)) : v;
+  }
+
+  @SuppressWarnings("serial") // uses writeReplace(), not default serialization
+  private static class Values<V> extends ImmutableCollection<V> {
+    final RegularImmutableMap<?, V> map;
+
+    Values(RegularImmutableMap<?, V> map) {
+      this.map = map;
+    }
+
+    @Override
+    public int size() {
+      return map.entries.length;
+    }
+
+    @Override public UnmodifiableIterator<V> iterator() {
+      return new AbstractIndexedListIterator<V>(map.entries.length) {
+        @Override protected V get(int index) {
+          return map.entries[index].getValue();
+        }
+      };
+    }
+
+    @Override public boolean contains(Object target) {
+      return map.containsValue(target);
+    }
+
+    @Override boolean isPartialView() {
+      return true;
+    }
+  }
+
+  @Override public String toString() {
+    StringBuilder result
+        = Collections2.newStringBuilderForCollection(size()).append('{');
+    Collections2.STANDARD_JOINER.appendTo(result, entries);
+    return result.append('}').toString();
+  }
+
+  // This class is never actually serialized directly, but we have to make the
+  // warning go away (and suppressing would suppress for all nested classes too)
+  private static final long serialVersionUID = 0;
+}
diff --git a/guava/src/com/google/common/collect/RegularImmutableMultiset.java b/guava/src/com/google/common/collect/RegularImmutableMultiset.java
new file mode 100644
index 0000000..090c091
--- /dev/null
+++ b/guava/src/com/google/common/collect/RegularImmutableMultiset.java
@@ -0,0 +1,97 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Iterator;
+import java.util.Map;
+
+import javax.annotation.Nullable;
+
+/**
+ * Implementation of {@link ImmutableMultiset} with one or more elements.
+ * 
+ * @author Jared Levy
+ * @author Louis Wasserman
+ */
+@GwtCompatible(serializable = true)
+@SuppressWarnings("serial")
+// uses writeReplace(), not default serialization
+class RegularImmutableMultiset<E> extends ImmutableMultiset<E> {
+  private final transient ImmutableMap<E, Integer> map;
+  private final transient int size;
+
+  RegularImmutableMultiset(ImmutableMap<E, Integer> map, int size) {
+    this.map = map;
+    this.size = size;
+  }
+
+  @Override
+  boolean isPartialView() {
+    return map.isPartialView();
+  }
+
+  @Override
+  public int count(@Nullable Object element) {
+    Integer value = map.get(element);
+    return (value == null) ? 0 : value;
+  }
+
+  @Override
+  public int size() {
+    return size;
+  }
+
+  @Override
+  public boolean contains(@Nullable Object element) {
+    return map.containsKey(element);
+  }
+
+  @Override
+  public ImmutableSet<E> elementSet() {
+    return map.keySet();
+  }
+
+  @Override
+  UnmodifiableIterator<Entry<E>> entryIterator() {
+    final Iterator<Map.Entry<E, Integer>> mapIterator =
+        map.entrySet().iterator();
+    return new UnmodifiableIterator<Entry<E>>() {
+      @Override
+      public boolean hasNext() {
+        return mapIterator.hasNext();
+      }
+
+      @Override
+      public Entry<E> next() {
+        Map.Entry<E, Integer> mapEntry = mapIterator.next();
+        return Multisets.immutableEntry(mapEntry.getKey(), mapEntry.getValue());
+      }
+    };
+  }
+
+  @Override
+  public int hashCode() {
+    return map.hashCode();
+  }
+
+  @Override
+  int distinctElements() {
+    return map.size();
+  }
+}
diff --git a/guava/src/com/google/common/collect/RegularImmutableSet.java b/guava/src/com/google/common/collect/RegularImmutableSet.java
new file mode 100644
index 0000000..75a49c1
--- /dev/null
+++ b/guava/src/com/google/common/collect/RegularImmutableSet.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.collect.ImmutableSet.ArrayImmutableSet;
+
+/**
+ * Implementation of {@link ImmutableSet} with two or more elements.
+ *
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible(serializable = true, emulated = true)
+@SuppressWarnings("serial") // uses writeReplace(), not default serialization
+final class RegularImmutableSet<E> extends ArrayImmutableSet<E> {
+  // the same elements in hashed positions (plus nulls)
+  @VisibleForTesting final transient Object[] table;
+  // 'and' with an int to get a valid table index.
+  private final transient int mask;
+  private final transient int hashCode;
+
+  RegularImmutableSet(
+      Object[] elements, int hashCode, Object[] table, int mask) {
+    super(elements);
+    this.table = table;
+    this.mask = mask;
+    this.hashCode = hashCode;
+  }
+
+  @Override public boolean contains(Object target) {
+    if (target == null) {
+      return false;
+    }
+    for (int i = Hashing.smear(target.hashCode()); true; i++) {
+      Object candidate = table[i & mask];
+      if (candidate == null) {
+        return false;
+      }
+      if (candidate.equals(target)) {
+        return true;
+      }
+    }
+  }
+
+  @Override public int hashCode() {
+    return hashCode;
+  }
+
+  @Override boolean isHashCodeFast() {
+    return true;
+  }
+}
diff --git a/guava/src/com/google/common/collect/RegularImmutableSortedMultiset.java b/guava/src/com/google/common/collect/RegularImmutableSortedMultiset.java
new file mode 100644
index 0000000..7318d9b
--- /dev/null
+++ b/guava/src/com/google/common/collect/RegularImmutableSortedMultiset.java
@@ -0,0 +1,198 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.collect.SortedLists.KeyAbsentBehavior.INVERTED_INSERTION_INDEX;
+import static com.google.common.collect.SortedLists.KeyAbsentBehavior.NEXT_HIGHER;
+import static com.google.common.collect.SortedLists.KeyAbsentBehavior.NEXT_LOWER;
+import static com.google.common.collect.SortedLists.KeyPresentBehavior.ANY_PRESENT;
+
+import com.google.common.primitives.Ints;
+
+import java.util.Comparator;
+import java.util.List;
+
+import javax.annotation.Nullable;
+
+/**
+ * An immutable sorted multiset with one or more distinct elements.
+ *
+ * @author Louis Wasserman
+ */
+final class RegularImmutableSortedMultiset<E> extends ImmutableSortedMultiset<E> {
+  private static final class CumulativeCountEntry<E> extends Multisets.AbstractEntry<E> {
+    final E element;
+    final int count;
+    final long cumulativeCount;
+
+    CumulativeCountEntry(E element, int count, @Nullable CumulativeCountEntry<E> previous) {
+      this.element = element;
+      this.count = count;
+      this.cumulativeCount = count + ((previous == null) ? 0 : previous.cumulativeCount);
+    }
+
+    @Override
+    public E getElement() {
+      return element;
+    }
+
+    @Override
+    public int getCount() {
+      return count;
+    }
+  }
+
+  static <E> RegularImmutableSortedMultiset<E> createFromSorted(Comparator<? super E> comparator,
+      List<? extends Multiset.Entry<E>> entries) {
+    List<CumulativeCountEntry<E>> newEntries = Lists.newArrayListWithCapacity(entries.size());
+    CumulativeCountEntry<E> previous = null;
+    for (Multiset.Entry<E> entry : entries) {
+      newEntries.add(
+          previous = new CumulativeCountEntry<E>(entry.getElement(), entry.getCount(), previous));
+    }
+    return new RegularImmutableSortedMultiset<E>(comparator, ImmutableList.copyOf(newEntries));
+  }
+
+  final transient ImmutableList<CumulativeCountEntry<E>> entries;
+
+  RegularImmutableSortedMultiset(
+      Comparator<? super E> comparator, ImmutableList<CumulativeCountEntry<E>> entries) {
+    super(comparator);
+    this.entries = entries;
+    assert !entries.isEmpty();
+  }
+
+  ImmutableList<E> elementList() {
+    return new TransformedImmutableList<CumulativeCountEntry<E>, E>(entries) {
+      @Override
+      E transform(CumulativeCountEntry<E> entry) {
+        return entry.getElement();
+      }
+    };
+  }
+
+  @Override
+  ImmutableSortedSet<E> createElementSet() {
+    return new RegularImmutableSortedSet<E>(elementList(), comparator());
+  }
+
+  @Override
+  ImmutableSortedSet<E> createDescendingElementSet() {
+    return new RegularImmutableSortedSet<E>(elementList().reverse(), reverseComparator());
+  }
+
+  @SuppressWarnings("unchecked")
+  @Override
+  UnmodifiableIterator<Multiset.Entry<E>> entryIterator() {
+    return (UnmodifiableIterator) entries.iterator();
+  }
+
+  @SuppressWarnings("unchecked")
+  @Override
+  UnmodifiableIterator<Multiset.Entry<E>> descendingEntryIterator() {
+    return (UnmodifiableIterator) entries.reverse().iterator();
+  }
+
+  @Override
+  public CumulativeCountEntry<E> firstEntry() {
+    return entries.get(0);
+  }
+
+  @Override
+  public CumulativeCountEntry<E> lastEntry() {
+    return entries.get(entries.size() - 1);
+  }
+
+  @Override
+  public int size() {
+    CumulativeCountEntry<E> firstEntry = firstEntry();
+    CumulativeCountEntry<E> lastEntry = lastEntry();
+    return Ints.saturatedCast(
+        lastEntry.cumulativeCount - firstEntry.cumulativeCount + firstEntry.count);
+  }
+
+  @Override
+  int distinctElements() {
+    return entries.size();
+  }
+
+  @Override
+  boolean isPartialView() {
+    return entries.isPartialView();
+  }
+
+  @SuppressWarnings("unchecked")
+  @Override
+  public int count(@Nullable Object element) {
+    if (element == null) {
+      return 0;
+    }
+    try {
+      int index = SortedLists.binarySearch(
+          elementList(), (E) element, comparator(), ANY_PRESENT, INVERTED_INSERTION_INDEX);
+      return (index >= 0) ? entries.get(index).getCount() : 0;
+    } catch (ClassCastException e) {
+      return 0;
+    }
+  }
+
+  @Override
+  public ImmutableSortedMultiset<E> headMultiset(E upperBound, BoundType boundType) {
+    int index;
+    switch (boundType) {
+      case OPEN:
+        index = SortedLists.binarySearch(
+            elementList(), checkNotNull(upperBound), comparator(), ANY_PRESENT, NEXT_HIGHER);
+        break;
+      case CLOSED:
+        index = SortedLists.binarySearch(
+            elementList(), checkNotNull(upperBound), comparator(), ANY_PRESENT, NEXT_LOWER) + 1;
+        break;
+      default:
+        throw new AssertionError();
+    }
+    return createSubMultiset(0, index);
+  }
+
+  @Override
+  public ImmutableSortedMultiset<E> tailMultiset(E lowerBound, BoundType boundType) {
+    int index;
+    switch (boundType) {
+      case OPEN:
+        index = SortedLists.binarySearch(
+            elementList(), checkNotNull(lowerBound), comparator(), ANY_PRESENT, NEXT_LOWER) + 1;
+        break;
+      case CLOSED:
+        index = SortedLists.binarySearch(
+            elementList(), checkNotNull(lowerBound), comparator(), ANY_PRESENT, NEXT_HIGHER);
+        break;
+      default:
+        throw new AssertionError();
+    }
+    return createSubMultiset(index, distinctElements());
+  }
+
+  private ImmutableSortedMultiset<E> createSubMultiset(int newFromIndex, int newToIndex) {
+    if (newFromIndex == 0 && newToIndex == entries.size()) {
+      return this;
+    } else if (newFromIndex >= newToIndex) {
+      return emptyMultiset(comparator());
+    } else {
+      return new RegularImmutableSortedMultiset<E>(
+          comparator(), entries.subList(newFromIndex, newToIndex));
+    }
+  }
+}
diff --git a/guava/src/com/google/common/collect/RegularImmutableSortedSet.java b/guava/src/com/google/common/collect/RegularImmutableSortedSet.java
new file mode 100644
index 0000000..3d2b7e0
--- /dev/null
+++ b/guava/src/com/google/common/collect/RegularImmutableSortedSet.java
@@ -0,0 +1,275 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.collect.SortedLists.KeyAbsentBehavior.INVERTED_INSERTION_INDEX;
+import static com.google.common.collect.SortedLists.KeyAbsentBehavior.NEXT_HIGHER;
+import static com.google.common.collect.SortedLists.KeyPresentBehavior.ANY_PRESENT;
+import static com.google.common.collect.SortedLists.KeyPresentBehavior.FIRST_AFTER;
+import static com.google.common.collect.SortedLists.KeyPresentBehavior.FIRST_PRESENT;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * An immutable sorted set with one or more elements. TODO(jlevy): Consider
+ * separate class for a single-element sorted set.
+ *
+ * @author Jared Levy
+ * @author Louis Wasserman
+ */
+@GwtCompatible(serializable = true, emulated = true)
+@SuppressWarnings("serial")
+final class RegularImmutableSortedSet<E> extends ImmutableSortedSet<E> {
+
+  private transient final ImmutableList<E> elements;
+
+  RegularImmutableSortedSet(
+      ImmutableList<E> elements, Comparator<? super E> comparator) {
+    super(comparator);
+    this.elements = elements;
+    checkArgument(!elements.isEmpty());
+  }
+
+  @Override public UnmodifiableIterator<E> iterator() {
+    return elements.iterator();
+  }
+
+  @Override public boolean isEmpty() {
+    return false;
+  }
+
+  @Override
+  public int size() {
+    return elements.size();
+  }
+
+  @Override public boolean contains(Object o) {
+    if (o == null) {
+      return false;
+    }
+    try {
+      return binarySearch(o) >= 0;
+    } catch (ClassCastException e) {
+      return false;
+    }
+  }
+
+  @Override public boolean containsAll(Collection<?> targets) {
+    // TODO(jlevy): For optimal performance, use a binary search when
+    // targets.size() < size() / log(size())
+    // TODO(kevinb): see if we can share code with OrderedIterator after it
+    // graduates from labs.
+    if (!SortedIterables.hasSameComparator(comparator(), targets) 
+        || (targets.size() <= 1)) {
+      return super.containsAll(targets);
+    }
+
+    /*
+     * If targets is a sorted set with the same comparator, containsAll can run
+     * in O(n) time stepping through the two collections.
+     */
+    Iterator<E> thisIterator = iterator();
+    Iterator<?> thatIterator = targets.iterator();
+    Object target = thatIterator.next();
+
+    try {
+
+      while (thisIterator.hasNext()) {
+
+        int cmp = unsafeCompare(thisIterator.next(), target);
+
+        if (cmp == 0) {
+
+          if (!thatIterator.hasNext()) {
+
+            return true;
+          }
+
+          target = thatIterator.next();
+
+        } else if (cmp > 0) {
+          return false;
+        }
+      }
+    } catch (NullPointerException e) {
+      return false;
+    } catch (ClassCastException e) {
+      return false;
+    }
+
+    return false;
+  }
+
+  private int binarySearch(Object key) {
+    // TODO(kevinb): split this into binarySearch(E) and 
+    // unsafeBinarySearch(Object), use each appropriately. name all methods that
+    // might throw CCE "unsafe*".
+    
+    // Pretend the comparator can compare anything. If it turns out it can't
+    // compare a and b, we should get a CCE on the subsequent line. Only methods
+    // that are spec'd to throw CCE should call this.
+    @SuppressWarnings("unchecked")
+    Comparator<Object> unsafeComparator = (Comparator<Object>) comparator;
+
+    return Collections.binarySearch(elements, key, unsafeComparator);
+  }
+
+  @Override boolean isPartialView() {
+    return elements.isPartialView();
+  }
+
+  @Override public Object[] toArray() {
+    return elements.toArray();
+  }
+
+  @Override public <T> T[] toArray(T[] array) {
+    return elements.toArray(array);
+  }
+
+  @Override public boolean equals(@Nullable Object object) {
+    if (object == this) {
+      return true;
+    }
+    if (!(object instanceof Set)) {
+      return false;
+    }
+
+    Set<?> that = (Set<?>) object;
+    if (size() != that.size()) {
+      return false;
+    }
+
+    if (SortedIterables.hasSameComparator(comparator, that)) {
+      Iterator<?> otherIterator = that.iterator();
+      try {
+        Iterator<E> iterator = iterator();
+        while (iterator.hasNext()) {
+          Object element = iterator.next();
+          Object otherElement = otherIterator.next();
+          if (otherElement == null
+              || unsafeCompare(element, otherElement) != 0) {
+            return false;
+          }
+        }
+        return true;
+      } catch (ClassCastException e) {
+        return false;
+      } catch (NoSuchElementException e) {
+        return false; // concurrent change to other set
+      }
+    }
+    return this.containsAll(that);
+  }
+
+  @Override
+  public E first() {
+    return elements.get(0);
+  }
+
+  @Override
+  public E last() {
+    return elements.get(size() - 1);
+  }
+
+  @Override
+  ImmutableSortedSet<E> headSetImpl(E toElement, boolean inclusive) {
+    int index;
+    if (inclusive) {
+      index = SortedLists.binarySearch(
+          elements, checkNotNull(toElement), comparator(), FIRST_AFTER, NEXT_HIGHER);
+    } else {
+      index = SortedLists.binarySearch(
+          elements, checkNotNull(toElement), comparator(), FIRST_PRESENT, NEXT_HIGHER);
+    }
+    return createSubset(0, index);
+  }
+
+  @Override
+  ImmutableSortedSet<E> subSetImpl(
+      E fromElement, boolean fromInclusive, E toElement, boolean toInclusive) {
+    return tailSetImpl(fromElement, fromInclusive)
+        .headSetImpl(toElement, toInclusive);
+  }
+
+  @Override
+  ImmutableSortedSet<E> tailSetImpl(E fromElement, boolean inclusive) {
+    int index;
+    if (inclusive) {
+      index = SortedLists.binarySearch(
+          elements, checkNotNull(fromElement), comparator(), FIRST_PRESENT, NEXT_HIGHER);
+    } else {
+      index = SortedLists.binarySearch(
+          elements, checkNotNull(fromElement), comparator(), FIRST_AFTER, NEXT_HIGHER);
+    }
+    return createSubset(index, size());
+  }
+
+  // Pretend the comparator can compare anything. If it turns out it can't
+  // compare two elements, it'll throw a CCE. Only methods that are specified to
+  // throw CCE should call this.
+  @SuppressWarnings("unchecked")
+  Comparator<Object> unsafeComparator() {
+    return (Comparator<Object>) comparator;
+  }
+
+  private ImmutableSortedSet<E> createSubset(int newFromIndex, int newToIndex) {
+    if (newFromIndex == 0 && newToIndex == size()) {
+      return this;
+    } else if (newFromIndex < newToIndex) {
+      return new RegularImmutableSortedSet<E>(
+          elements.subList(newFromIndex, newToIndex), comparator);
+    } else {
+      return emptySet(comparator);
+    }
+  }
+
+  @SuppressWarnings("unchecked")
+  @Override int indexOf(@Nullable Object target) {
+    if (target == null) {
+      return -1;
+    }
+    int position;
+    try {
+      position = SortedLists.binarySearch(elements, (E) target, comparator(), 
+          ANY_PRESENT, INVERTED_INSERTION_INDEX);
+    } catch (ClassCastException e) {
+      return -1;
+    }
+    // TODO(kevinb): reconsider if it's really worth making feeble attempts at 
+    // sanity for inconsistent comparators.
+    
+    // The equals() check is needed when the comparator isn't compatible with
+    // equals().
+    return (position >= 0 && elements.get(position).equals(target))
+        ? position : -1;
+  }
+
+  @Override ImmutableList<E> createAsList() {
+    return new ImmutableSortedAsList<E>(this, elements);
+  }
+}
diff --git a/guava/src/com/google/common/collect/RegularImmutableTable.java b/guava/src/com/google/common/collect/RegularImmutableTable.java
new file mode 100644
index 0000000..c6ae3eb
--- /dev/null
+++ b/guava/src/com/google/common/collect/RegularImmutableTable.java
@@ -0,0 +1,433 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Function;
+import com.google.common.base.Objects;
+
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Map;
+
+import javax.annotation.Nullable;
+import javax.annotation.concurrent.Immutable;
+
+/**
+ * An implementation of {@link ImmutableTable} holding an arbitrary number of
+ * cells.
+ *
+ * @author gak@google.com (Gregory Kick)
+ */
+@GwtCompatible
+abstract class RegularImmutableTable<R, C, V> extends ImmutableTable<R, C, V> {
+  private final ImmutableSet<Cell<R, C, V>> cellSet;
+
+  private RegularImmutableTable(ImmutableSet<Cell<R, C, V>> cellSet) {
+    this.cellSet = cellSet;
+  }
+
+  private static final Function<Cell<Object, Object, Object>, Object>
+      GET_VALUE_FUNCTION =
+          new Function<Cell<Object, Object, Object>, Object>() {
+            @Override public Object apply(Cell<Object, Object, Object> from) {
+              return from.getValue();
+            }
+          };
+
+  @SuppressWarnings("unchecked")
+  private Function<Cell<R, C, V>, V> getValueFunction() {
+    return (Function) GET_VALUE_FUNCTION;
+  }
+
+  @Nullable private transient volatile ImmutableList<V> valueList;
+
+  @Override public final ImmutableCollection<V> values() {
+    ImmutableList<V> result = valueList;
+    if (result == null) {
+      valueList = result = ImmutableList.copyOf(
+          Iterables.transform(cellSet(), getValueFunction()));
+    }
+    return result;
+  }
+
+  @Override public final int size() {
+    return cellSet().size();
+  }
+
+  @Override public final boolean containsValue(@Nullable Object value) {
+    return values().contains(value);
+  }
+
+  @Override public final boolean isEmpty() {
+    return false;
+  }
+
+  @Override public final ImmutableSet<Cell<R, C, V>> cellSet() {
+    return cellSet;
+  }
+
+  static final <R, C, V> RegularImmutableTable<R, C, V> forCells(
+      List<Cell<R, C, V>> cells,
+      @Nullable final Comparator<? super R> rowComparator,
+      @Nullable final Comparator<? super C> columnComparator) {
+    checkNotNull(cells);
+    if (rowComparator != null || columnComparator != null) {
+      /*
+       * This sorting logic leads to a cellSet() ordering that may not be
+       * expected and that isn't documented in the Javadoc. If a row Comparator
+       * is provided, cellSet() iterates across the columns in the first row,
+       * the columns in the second row, etc. If a column Comparator is provided
+       * but a row Comparator isn't, cellSet() iterates across the rows in the
+       * first column, the rows in the second column, etc.
+       */
+      Comparator<Cell<R, C, V>> comparator = new Comparator<Cell<R, C, V>>() {
+        @Override public int compare(Cell<R, C, V> cell1, Cell<R, C, V> cell2) {
+          int rowCompare = (rowComparator == null) ? 0
+            : rowComparator.compare(cell1.getRowKey(), cell2.getRowKey());
+          if (rowCompare != 0) {
+            return rowCompare;
+          }
+          return (columnComparator == null) ? 0
+              : columnComparator.compare(
+                  cell1.getColumnKey(), cell2.getColumnKey());
+        }
+      };
+      Collections.sort(cells, comparator);
+    }
+    return forCellsInternal(cells, rowComparator, columnComparator);
+  }
+
+  static final <R, C, V> RegularImmutableTable<R, C, V> forCells(
+      Iterable<Cell<R, C, V>> cells) {
+    return forCellsInternal(cells, null, null);
+  }
+
+  /**
+   * A factory that chooses the most space-efficient representation of the
+   * table.
+   */
+  private static final <R, C, V> RegularImmutableTable<R, C, V>
+      forCellsInternal(Iterable<Cell<R, C, V>> cells,
+          @Nullable Comparator<? super R> rowComparator,
+          @Nullable Comparator<? super C> columnComparator) {
+    ImmutableSet.Builder<Cell<R, C, V>> cellSetBuilder = ImmutableSet.builder();
+    ImmutableSet.Builder<R> rowSpaceBuilder = ImmutableSet.builder();
+    ImmutableSet.Builder<C> columnSpaceBuilder = ImmutableSet.builder();
+    for (Cell<R, C, V> cell : cells) {
+      cellSetBuilder.add(cell);
+      rowSpaceBuilder.add(cell.getRowKey());
+      columnSpaceBuilder.add(cell.getColumnKey());
+    }
+    ImmutableSet<Cell<R, C, V>> cellSet = cellSetBuilder.build();
+
+    ImmutableSet<R> rowSpace = rowSpaceBuilder.build();
+    if (rowComparator != null) {
+      List<R> rowList = Lists.newArrayList(rowSpace);
+      Collections.sort(rowList, rowComparator);
+      rowSpace = ImmutableSet.copyOf(rowList);
+    }
+    ImmutableSet<C> columnSpace = columnSpaceBuilder.build();
+    if (columnComparator != null) {
+      List<C> columnList = Lists.newArrayList(columnSpace);
+      Collections.sort(columnList, columnComparator);
+      columnSpace = ImmutableSet.copyOf(columnList);
+    }
+
+    // use a dense table if more than half of the cells have values
+    // TODO(gak): tune this condition based on empirical evidence
+    return (cellSet.size() > ((rowSpace.size() * columnSpace.size()) / 2 )) ?
+        new DenseImmutableTable<R, C, V>(cellSet, rowSpace, columnSpace) :
+        new SparseImmutableTable<R, C, V>(cellSet, rowSpace, columnSpace);
+  }
+
+  /**
+   * A {@code RegularImmutableTable} optimized for sparse data.
+   */
+  @Immutable
+  @VisibleForTesting
+  static final class SparseImmutableTable<R, C, V>
+      extends RegularImmutableTable<R, C, V> {
+
+    private final ImmutableMap<R, Map<C, V>> rowMap;
+    private final ImmutableMap<C, Map<R, V>> columnMap;
+
+    /**
+     * Creates a {@link Map} over the key space with
+     * {@link ImmutableMap.Builder}s ready for values.
+     */
+    private static final <A, B, V> Map<A, ImmutableMap.Builder<B, V>>
+        makeIndexBuilder(ImmutableSet<A> keySpace) {
+      Map<A, ImmutableMap.Builder<B, V>> indexBuilder = Maps.newLinkedHashMap();
+      for (A key : keySpace) {
+        indexBuilder.put(key, ImmutableMap.<B, V>builder());
+      }
+      return indexBuilder;
+    }
+
+    /**
+     * Builds the value maps of the index and creates an immutable copy of the
+     * map.
+     */
+    private static final <A, B, V> ImmutableMap<A, Map<B, V>> buildIndex(
+        Map<A, ImmutableMap.Builder<B, V>> indexBuilder) {
+      return ImmutableMap.copyOf(Maps.transformValues(indexBuilder,
+          new Function<ImmutableMap.Builder<B, V>, Map<B, V>>() {
+            @Override public Map<B, V> apply(ImmutableMap.Builder<B, V> from) {
+              return from.build();
+            }
+          }));
+    }
+
+    SparseImmutableTable(ImmutableSet<Cell<R, C, V>> cellSet,
+        ImmutableSet<R> rowSpace, ImmutableSet<C> columnSpace) {
+      super(cellSet);
+      Map<R, ImmutableMap.Builder<C, V>> rowIndexBuilder
+          = makeIndexBuilder(rowSpace);
+      Map<C, ImmutableMap.Builder<R, V>> columnIndexBuilder
+          = makeIndexBuilder(columnSpace);
+      for (Cell<R, C, V> cell : cellSet) {
+        R rowKey = cell.getRowKey();
+        C columnKey = cell.getColumnKey();
+        V value = cell.getValue();
+        rowIndexBuilder.get(rowKey).put(columnKey, value);
+        columnIndexBuilder.get(columnKey).put(rowKey, value);
+      }
+      this.rowMap = buildIndex(rowIndexBuilder);
+      this.columnMap = buildIndex(columnIndexBuilder);
+    }
+
+    @Override public ImmutableMap<R, V> column(C columnKey) {
+      checkNotNull(columnKey);
+      // value maps are guaranteed to be immutable maps
+      return Objects.firstNonNull((ImmutableMap<R, V>) columnMap.get(columnKey),
+          ImmutableMap.<R, V>of());
+    }
+
+    @Override public ImmutableSet<C> columnKeySet() {
+      return columnMap.keySet();
+    }
+
+    @Override public ImmutableMap<C, Map<R, V>> columnMap() {
+      return columnMap;
+    }
+
+    @Override public ImmutableMap<C, V> row(R rowKey) {
+      checkNotNull(rowKey);
+      // value maps are guaranteed to be immutable maps
+      return Objects.firstNonNull((ImmutableMap<C, V>) rowMap.get(rowKey),
+          ImmutableMap.<C, V>of());
+    }
+
+    @Override public ImmutableSet<R> rowKeySet() {
+      return rowMap.keySet();
+    }
+
+    @Override public ImmutableMap<R, Map<C, V>> rowMap() {
+      return rowMap;
+    }
+
+    @Override public boolean contains(@Nullable Object rowKey,
+        @Nullable Object columnKey) {
+      Map<C, V> row = rowMap.get(rowKey);
+      return (row != null) && row.containsKey(columnKey);
+    }
+
+    @Override public boolean containsColumn(@Nullable Object columnKey) {
+      return columnMap.containsKey(columnKey);
+    }
+
+    @Override public boolean containsRow(@Nullable Object rowKey) {
+      return rowMap.containsKey(rowKey);
+    }
+
+    @Override public V get(@Nullable Object rowKey,
+        @Nullable Object columnKey) {
+      Map<C, V> row = rowMap.get(rowKey);
+      return (row == null) ? null : row.get(columnKey);
+    }
+  }
+
+  /**
+   * A {@code RegularImmutableTable} optimized for dense data.
+   */
+  @Immutable @VisibleForTesting
+  static final class DenseImmutableTable<R, C, V>
+      extends RegularImmutableTable<R, C, V> {
+
+    private final ImmutableBiMap<R, Integer> rowKeyToIndex;
+    private final ImmutableBiMap<C, Integer> columnKeyToIndex;
+    private final V[][] values;
+
+    private static <E> ImmutableBiMap<E, Integer> makeIndex(
+        ImmutableSet<E> set) {
+      ImmutableBiMap.Builder<E, Integer> indexBuilder =
+          ImmutableBiMap.builder();
+      int i = 0;
+      for (E key : set) {
+        indexBuilder.put(key, i);
+        i++;
+      }
+      return indexBuilder.build();
+    }
+
+    DenseImmutableTable(ImmutableSet<Cell<R, C, V>> cellSet,
+        ImmutableSet<R> rowSpace, ImmutableSet<C> columnSpace) {
+      super(cellSet);
+      @SuppressWarnings("unchecked")
+      V[][] array = (V[][]) new Object[rowSpace.size()][columnSpace.size()];
+      this.values = array;
+      this.rowKeyToIndex = makeIndex(rowSpace);
+      this.columnKeyToIndex = makeIndex(columnSpace);
+      for (Cell<R, C, V> cell : cellSet) {
+        R rowKey = cell.getRowKey();
+        C columnKey = cell.getColumnKey();
+        int rowIndex = rowKeyToIndex.get(rowKey);
+        int columnIndex = columnKeyToIndex.get(columnKey);
+        V existingValue = values[rowIndex][columnIndex];
+        checkArgument(existingValue == null, "duplicate key: (%s, %s)", rowKey,
+            columnKey);
+        values[rowIndex][columnIndex] = cell.getValue();
+      }
+    }
+
+    @Override public ImmutableMap<R, V> column(C columnKey) {
+      checkNotNull(columnKey);
+      Integer columnIndexInteger = columnKeyToIndex.get(columnKey);
+      if (columnIndexInteger == null) {
+        return ImmutableMap.of();
+      } else {
+        // unbox only once
+        int columnIndex = columnIndexInteger;
+        ImmutableMap.Builder<R, V> columnBuilder = ImmutableMap.builder();
+        for (int i = 0; i < values.length; i++) {
+          V value = values[i][columnIndex];
+          if (value != null) {
+            columnBuilder.put(rowKeyToIndex.inverse().get(i), value);
+          }
+        }
+        return columnBuilder.build();
+      }
+    }
+
+    @Override public ImmutableSet<C> columnKeySet() {
+      return columnKeyToIndex.keySet();
+    }
+
+    private transient volatile ImmutableMap<C, Map<R, V>> columnMap;
+
+    private ImmutableMap<C, Map<R, V>> makeColumnMap() {
+      ImmutableMap.Builder<C, Map<R, V>> columnMapBuilder =
+          ImmutableMap.builder();
+      for (int c = 0; c < columnKeyToIndex.size(); c++) {
+        ImmutableMap.Builder<R, V> rowMapBuilder = ImmutableMap.builder();
+        for (int r = 0; r < rowKeyToIndex.size(); r++) {
+          V value = values[r][c];
+          if (value != null) {
+            rowMapBuilder.put(rowKeyToIndex.inverse().get(r), value);
+          }
+        }
+        columnMapBuilder.put(columnKeyToIndex.inverse().get(c),
+            rowMapBuilder.build());
+      }
+      return columnMapBuilder.build();
+    }
+
+    @Override public ImmutableMap<C, Map<R, V>> columnMap() {
+      ImmutableMap<C, Map<R, V>> result = columnMap;
+      if (result == null) {
+        columnMap = result = makeColumnMap();
+      }
+      return result;
+    }
+
+    @Override public boolean contains(@Nullable Object rowKey,
+        @Nullable Object columnKey) {
+      return (get(rowKey, columnKey) != null);
+    }
+
+    @Override public boolean containsColumn(@Nullable Object columnKey) {
+      return columnKeyToIndex.containsKey(columnKey);
+    }
+
+    @Override public boolean containsRow(@Nullable Object rowKey) {
+      return rowKeyToIndex.containsKey(rowKey);
+    }
+
+    @Override public V get(@Nullable Object rowKey,
+        @Nullable Object columnKey) {
+      Integer rowIndex = rowKeyToIndex.get(rowKey);
+      Integer columnIndex = columnKeyToIndex.get(columnKey);
+      return ((rowIndex == null) || (columnIndex == null)) ? null
+          : values[rowIndex][columnIndex];
+    }
+
+    @Override public ImmutableMap<C, V> row(R rowKey) {
+      checkNotNull(rowKey);
+      Integer rowIndex = rowKeyToIndex.get(rowKey);
+      if (rowIndex == null) {
+        return ImmutableMap.of();
+      } else {
+        ImmutableMap.Builder<C, V> rowBuilder = ImmutableMap.builder();
+        V[] row = values[rowIndex];
+        for (int r = 0; r < row.length; r++) {
+          V value = row[r];
+          if (value != null) {
+            rowBuilder.put(columnKeyToIndex.inverse().get(r), value);
+          }
+        }
+        return rowBuilder.build();
+      }
+    }
+
+    @Override public ImmutableSet<R> rowKeySet() {
+      return rowKeyToIndex.keySet();
+    }
+
+    private transient volatile ImmutableMap<R, Map<C, V>> rowMap;
+
+    private ImmutableMap<R, Map<C, V>> makeRowMap() {
+      ImmutableMap.Builder<R, Map<C, V>> rowMapBuilder = ImmutableMap.builder();
+      for (int r = 0; r < values.length; r++) {
+        V[] row = values[r];
+        ImmutableMap.Builder<C, V> columnMapBuilder = ImmutableMap.builder();
+        for (int c = 0; c < row.length; c++) {
+          V value = row[c];
+          if (value != null) {
+            columnMapBuilder.put(columnKeyToIndex.inverse().get(c), value);
+          }
+        }
+        rowMapBuilder.put(rowKeyToIndex.inverse().get(r),
+            columnMapBuilder.build());
+      }
+      return rowMapBuilder.build();
+    }
+
+    @Override public ImmutableMap<R, Map<C, V>> rowMap() {
+      ImmutableMap<R, Map<C, V>> result = rowMap;
+      if (result == null) {
+        rowMap = result = makeRowMap();
+      }
+      return result;
+    }
+  }
+}
diff --git a/guava/src/com/google/common/collect/ReverseNaturalOrdering.java b/guava/src/com/google/common/collect/ReverseNaturalOrdering.java
new file mode 100644
index 0000000..9a73613
--- /dev/null
+++ b/guava/src/com/google/common/collect/ReverseNaturalOrdering.java
@@ -0,0 +1,92 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.io.Serializable;
+import java.util.Iterator;
+
+/** An ordering that uses the reverse of the natural order of the values. */
+@GwtCompatible(serializable = true)
+@SuppressWarnings("unchecked") // TODO(kevinb): the right way to explain this??
+final class ReverseNaturalOrdering
+    extends Ordering<Comparable> implements Serializable {
+  static final ReverseNaturalOrdering INSTANCE = new ReverseNaturalOrdering();
+
+  @Override public int compare(Comparable left, Comparable right) {
+    checkNotNull(left); // right null is caught later
+    if (left == right) {
+      return 0;
+    }
+
+    return right.compareTo(left);
+  }
+
+  @Override public <S extends Comparable> Ordering<S> reverse() {
+    return Ordering.natural();
+  }
+
+  // Override the min/max methods to "hoist" delegation outside loops
+
+  @Override public <E extends Comparable> E min(E a, E b) {
+    return NaturalOrdering.INSTANCE.max(a, b);
+  }
+
+  @Override public <E extends Comparable> E min(E a, E b, E c, E... rest) {
+    return NaturalOrdering.INSTANCE.max(a, b, c, rest);
+  }
+
+  @Override public <E extends Comparable> E min(Iterator<E> iterator) {
+    return NaturalOrdering.INSTANCE.max(iterator);
+  }
+
+  @Override public <E extends Comparable> E min(Iterable<E> iterable) {
+    return NaturalOrdering.INSTANCE.max(iterable);
+  }
+
+  @Override public <E extends Comparable> E max(E a, E b) {
+    return NaturalOrdering.INSTANCE.min(a, b);
+  }
+
+  @Override public <E extends Comparable> E max(E a, E b, E c, E... rest) {
+    return NaturalOrdering.INSTANCE.min(a, b, c, rest);
+  }
+
+  @Override public <E extends Comparable> E max(Iterator<E> iterator) {
+    return NaturalOrdering.INSTANCE.min(iterator);
+  }
+
+  @Override public <E extends Comparable> E max(Iterable<E> iterable) {
+    return NaturalOrdering.INSTANCE.min(iterable);
+  }
+
+  // preserving singleton-ness gives equals()/hashCode() for free
+  private Object readResolve() {
+    return INSTANCE;
+  }
+
+  @Override public String toString() {
+    return "Ordering.natural().reverse()";
+  }
+
+  private ReverseNaturalOrdering() {}
+
+  private static final long serialVersionUID = 0;
+}
diff --git a/guava/src/com/google/common/collect/ReverseOrdering.java b/guava/src/com/google/common/collect/ReverseOrdering.java
new file mode 100644
index 0000000..36ae02c
--- /dev/null
+++ b/guava/src/com/google/common/collect/ReverseOrdering.java
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.io.Serializable;
+import java.util.Iterator;
+
+import javax.annotation.Nullable;
+
+/** An ordering that uses the reverse of a given order. */
+@GwtCompatible(serializable = true)
+final class ReverseOrdering<T> extends Ordering<T> implements Serializable {
+  final Ordering<? super T> forwardOrder;
+
+  ReverseOrdering(Ordering<? super T> forwardOrder) {
+    this.forwardOrder = checkNotNull(forwardOrder);
+  }
+
+  @Override public int compare(T a, T b) {
+    return forwardOrder.compare(b, a);
+  }
+
+  @SuppressWarnings("unchecked") // how to explain?
+  @Override public <S extends T> Ordering<S> reverse() {
+    return (Ordering<S>) forwardOrder;
+  }
+
+  // Override the min/max methods to "hoist" delegation outside loops
+
+  @Override public <E extends T> E min(E a, E b) {
+    return forwardOrder.max(a, b);
+  }
+
+  @Override public <E extends T> E min(E a, E b, E c, E... rest) {
+    return forwardOrder.max(a, b, c, rest);
+  }
+
+  @Override public <E extends T> E min(Iterator<E> iterator) {
+    return forwardOrder.max(iterator);
+  }
+
+  @Override public <E extends T> E min(Iterable<E> iterable) {
+    return forwardOrder.max(iterable);
+  }
+
+  @Override public <E extends T> E max(E a, E b) {
+    return forwardOrder.min(a, b);
+  }
+
+  @Override public <E extends T> E max(E a, E b, E c, E... rest) {
+    return forwardOrder.min(a, b, c, rest);
+  }
+
+  @Override public <E extends T> E max(Iterator<E> iterator) {
+    return forwardOrder.min(iterator);
+  }
+
+  @Override public <E extends T> E max(Iterable<E> iterable) {
+    return forwardOrder.min(iterable);
+  }
+
+  @Override public int hashCode() {
+    return -forwardOrder.hashCode();
+  }
+
+  @Override public boolean equals(@Nullable Object object) {
+    if (object == this) {
+      return true;
+    }
+    if (object instanceof ReverseOrdering) {
+      ReverseOrdering<?> that = (ReverseOrdering<?>) object;
+      return this.forwardOrder.equals(that.forwardOrder);
+    }
+    return false;
+  }
+
+  @Override public String toString() {
+    return forwardOrder + ".reverse()";
+  }
+
+  private static final long serialVersionUID = 0;
+}
diff --git a/guava/src/com/google/common/collect/RowSortedTable.java b/guava/src/com/google/common/collect/RowSortedTable.java
new file mode 100644
index 0000000..4b597b7
--- /dev/null
+++ b/guava/src/com/google/common/collect/RowSortedTable.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Map;
+import java.util.Set;
+import java.util.SortedMap;
+import java.util.SortedSet;
+
+/**
+ * Interface that extends {@code Table} and whose rows are sorted.
+ *
+ * <p>The {@link #rowKeySet} method returns a {@link SortedSet} and the {@link
+ * #rowMap} method returns a {@link SortedMap}, instead of the {@link Set} and
+ * {@link Map} specified by the {@link Table} interface.
+ *
+ * @author Warren Dukes
+ * @since 8.0
+ */
+@GwtCompatible
+@Beta
+public interface RowSortedTable<R, C, V> extends Table<R, C, V> {
+  /**
+   * {@inheritDoc}
+   *
+   * <p>This method returns a {@link SortedSet}, instead of the {@code Set}
+   * specified in the {@link Table} interface.
+   */
+  @Override SortedSet<R> rowKeySet();
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>This method returns a {@link SortedMap}, instead of the {@code Map}
+   * specified in the {@link Table} interface.
+   */
+  @Override SortedMap<R, Map<C, V>> rowMap();
+}
diff --git a/guava/src/com/google/common/collect/Serialization.java b/guava/src/com/google/common/collect/Serialization.java
new file mode 100644
index 0000000..2541548
--- /dev/null
+++ b/guava/src/com/google/common/collect/Serialization.java
@@ -0,0 +1,231 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.lang.reflect.Field;
+import java.util.Collection;
+import java.util.Map;
+
+/**
+ * Provides static methods for serializing collection classes.
+ *
+ * <p>This class assists the implementation of collection classes. Do not use
+ * this class to serialize collections that are defined elsewhere.
+ *
+ * @author Jared Levy
+ */
+final class Serialization {
+  private Serialization() {}
+
+  /**
+   * Reads a count corresponding to a serialized map, multiset, or multimap. It
+   * returns the size of a map serialized by {@link
+   * #writeMap(Map, ObjectOutputStream)}, the number of distinct elements in a
+   * multiset serialized by {@link
+   * #writeMultiset(Multiset, ObjectOutputStream)}, or the number of distinct
+   * keys in a multimap serialized by {@link
+   * #writeMultimap(Multimap, ObjectOutputStream)}.
+   *
+   * <p>The returned count may be used to construct an empty collection of the
+   * appropriate capacity before calling any of the {@code populate} methods.
+   */
+  static int readCount(ObjectInputStream stream) throws IOException {
+    return stream.readInt();
+  }
+
+  /**
+   * Stores the contents of a map in an output stream, as part of serialization.
+   * It does not support concurrent maps whose content may change while the
+   * method is running.
+   *
+   * <p>The serialized output consists of the number of entries, first key,
+   * first value, second key, second value, and so on.
+   */
+  static <K, V> void writeMap(Map<K, V> map, ObjectOutputStream stream)
+      throws IOException {
+    stream.writeInt(map.size());
+    for (Map.Entry<K, V> entry : map.entrySet()) {
+      stream.writeObject(entry.getKey());
+      stream.writeObject(entry.getValue());
+    }
+  }
+
+  /**
+   * Populates a map by reading an input stream, as part of deserialization.
+   * See {@link #writeMap} for the data format.
+   */
+  static <K, V> void populateMap(Map<K, V> map, ObjectInputStream stream)
+      throws IOException, ClassNotFoundException {
+    int size = stream.readInt();
+    populateMap(map, stream, size);
+  }
+
+  /**
+   * Populates a map by reading an input stream, as part of deserialization.
+   * See {@link #writeMap} for the data format. The size is determined by a
+   * prior call to {@link #readCount}.
+   */
+  static <K, V> void populateMap(Map<K, V> map, ObjectInputStream stream,
+      int size) throws IOException, ClassNotFoundException {
+    for (int i = 0; i < size; i++) {
+      @SuppressWarnings("unchecked") // reading data stored by writeMap
+      K key = (K) stream.readObject();
+      @SuppressWarnings("unchecked") // reading data stored by writeMap
+      V value = (V) stream.readObject();
+      map.put(key, value);
+    }
+  }
+
+  /**
+   * Stores the contents of a multiset in an output stream, as part of
+   * serialization. It does not support concurrent multisets whose content may
+   * change while the method is running.
+   *
+   * <p>The serialized output consists of the number of distinct elements, the
+   * first element, its count, the second element, its count, and so on.
+   */
+  static <E> void writeMultiset(
+      Multiset<E> multiset, ObjectOutputStream stream) throws IOException {
+    int entryCount = multiset.entrySet().size();
+    stream.writeInt(entryCount);
+    for (Multiset.Entry<E> entry : multiset.entrySet()) {
+      stream.writeObject(entry.getElement());
+      stream.writeInt(entry.getCount());
+    }
+  }
+
+  /**
+   * Populates a multiset by reading an input stream, as part of
+   * deserialization. See {@link #writeMultiset} for the data format.
+   */
+  static <E> void populateMultiset(
+      Multiset<E> multiset, ObjectInputStream stream)
+      throws IOException, ClassNotFoundException {
+    int distinctElements = stream.readInt();
+    populateMultiset(multiset, stream, distinctElements);
+  }
+
+  /**
+   * Populates a multiset by reading an input stream, as part of
+   * deserialization. See {@link #writeMultiset} for the data format. The number
+   * of distinct elements is determined by a prior call to {@link #readCount}.
+   */
+  static <E> void populateMultiset(
+      Multiset<E> multiset, ObjectInputStream stream, int distinctElements)
+      throws IOException, ClassNotFoundException {
+    for (int i = 0; i < distinctElements; i++) {
+      @SuppressWarnings("unchecked") // reading data stored by writeMultiset
+      E element = (E) stream.readObject();
+      int count = stream.readInt();
+      multiset.add(element, count);
+    }
+  }
+
+  /**
+   * Stores the contents of a multimap in an output stream, as part of
+   * serialization. It does not support concurrent multimaps whose content may
+   * change while the method is running. The {@link Multimap#asMap} view
+   * determines the ordering in which data is written to the stream.
+   *
+   * <p>The serialized output consists of the number of distinct keys, and then
+   * for each distinct key: the key, the number of values for that key, and the
+   * key's values.
+   */
+  static <K, V> void writeMultimap(
+      Multimap<K, V> multimap, ObjectOutputStream stream) throws IOException {
+    stream.writeInt(multimap.asMap().size());
+    for (Map.Entry<K, Collection<V>> entry : multimap.asMap().entrySet()) {
+      stream.writeObject(entry.getKey());
+      stream.writeInt(entry.getValue().size());
+      for (V value : entry.getValue()) {
+        stream.writeObject(value);
+      }
+    }
+  }
+
+  /**
+   * Populates a multimap by reading an input stream, as part of
+   * deserialization. See {@link #writeMultimap} for the data format.
+   */
+  static <K, V> void populateMultimap(
+      Multimap<K, V> multimap, ObjectInputStream stream)
+      throws IOException, ClassNotFoundException {
+    int distinctKeys = stream.readInt();
+    populateMultimap(multimap, stream, distinctKeys);
+  }
+
+  /**
+   * Populates a multimap by reading an input stream, as part of
+   * deserialization. See {@link #writeMultimap} for the data format. The number
+   * of distinct keys is determined by a prior call to {@link #readCount}.
+   */
+  static <K, V> void populateMultimap(
+      Multimap<K, V> multimap, ObjectInputStream stream, int distinctKeys)
+      throws IOException, ClassNotFoundException {
+    for (int i = 0; i < distinctKeys; i++) {
+      @SuppressWarnings("unchecked") // reading data stored by writeMultimap
+      K key = (K) stream.readObject();
+      Collection<V> values = multimap.get(key);
+      int valueCount = stream.readInt();
+      for (int j = 0; j < valueCount; j++) {
+        @SuppressWarnings("unchecked") // reading data stored by writeMultimap
+        V value = (V) stream.readObject();
+        values.add(value);
+      }
+    }
+  }
+
+  // Secret sauce for setting final fields; don't make it public.
+  static <T> FieldSetter<T> getFieldSetter(
+      final Class<T> clazz, String fieldName) {
+    try {
+      Field field = clazz.getDeclaredField(fieldName);
+      return new FieldSetter<T>(field);
+    } catch (NoSuchFieldException e) {
+      throw new AssertionError(e); // programmer error
+    }
+  }
+
+  // Secret sauce for setting final fields; don't make it public.
+  static final class FieldSetter<T> {
+    private final Field field;
+
+    private FieldSetter(Field field) {
+      this.field = field;
+      field.setAccessible(true);
+    }
+
+    void set(T instance, Object value) {
+      try {
+        field.set(instance, value);
+      } catch (IllegalAccessException impossible) {
+        throw new AssertionError(impossible);
+      }
+    }
+
+    void set(T instance, int value) {
+      try {
+        field.set(instance, value);
+      } catch (IllegalAccessException impossible) {
+        throw new AssertionError(impossible);
+      }
+    }
+  }
+}
diff --git a/guava/src/com/google/common/collect/SetMultimap.java b/guava/src/com/google/common/collect/SetMultimap.java
new file mode 100644
index 0000000..1409d8d
--- /dev/null
+++ b/guava/src/com/google/common/collect/SetMultimap.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Collection;
+import java.util.Map;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * A {@code Multimap} that cannot hold duplicate key-value pairs. Adding a
+ * key-value pair that's already in the multimap has no effect.
+ *
+ * <p>The {@link #get}, {@link #removeAll}, and {@link #replaceValues} methods
+ * each return a {@link Set} of values, while {@link #entries} returns a {@code
+ * Set} of map entries. Though the method signature doesn't say so explicitly,
+ * the map returned by {@link #asMap} has {@code Set} values.
+ *
+ * @author Jared Levy
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible
+public interface SetMultimap<K, V> extends Multimap<K, V> {
+  /**
+   * {@inheritDoc}
+   *
+   * <p>Because a {@code SetMultimap} has unique values for a given key, this
+   * method returns a {@link Set}, instead of the {@link java.util.Collection}
+   * specified in the {@link Multimap} interface.
+   */
+  @Override
+  Set<V> get(@Nullable K key);
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>Because a {@code SetMultimap} has unique values for a given key, this
+   * method returns a {@link Set}, instead of the {@link java.util.Collection}
+   * specified in the {@link Multimap} interface.
+   */
+  @Override
+  Set<V> removeAll(@Nullable Object key);
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>Because a {@code SetMultimap} has unique values for a given key, this
+   * method returns a {@link Set}, instead of the {@link java.util.Collection}
+   * specified in the {@link Multimap} interface.
+   *
+   * <p>Any duplicates in {@code values} will be stored in the multimap once.
+   */
+  @Override
+  Set<V> replaceValues(K key, Iterable<? extends V> values);
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>Because a {@code SetMultimap} has unique values for a given key, this
+   * method returns a {@link Set}, instead of the {@link java.util.Collection}
+   * specified in the {@link Multimap} interface.
+   */
+  @Override
+  Set<Map.Entry<K, V>> entries();
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>Though the method signature doesn't say so explicitly, the returned map
+   * has {@link Set} values.
+   */
+  @Override
+  Map<K, Collection<V>> asMap();
+
+  /**
+   * Compares the specified object to this multimap for equality.
+   *
+   * <p>Two {@code SetMultimap} instances are equal if, for each key, they
+   * contain the same values. Equality does not depend on the ordering of keys
+   * or values.
+   *
+   * <p>An empty {@code SetMultimap} is equal to any other empty {@code
+   * Multimap}, including an empty {@code ListMultimap}.
+   */
+  @Override
+  boolean equals(@Nullable Object obj);
+}
diff --git a/guava/src/com/google/common/collect/Sets.java b/guava/src/com/google/common/collect/Sets.java
new file mode 100644
index 0000000..14ad867
--- /dev/null
+++ b/guava/src/com/google/common/collect/Sets.java
@@ -0,0 +1,1394 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.base.Function;
+import com.google.common.base.Objects;
+import com.google.common.base.Preconditions;
+import com.google.common.base.Predicate;
+import com.google.common.base.Predicates;
+import com.google.common.collect.Collections2.FilteredCollection;
+import com.google.common.math.IntMath;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.Serializable;
+import java.util.AbstractSet;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.EnumSet;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.NoSuchElementException;
+import java.util.Set;
+import java.util.SortedSet;
+import java.util.TreeSet;
+
+import javax.annotation.Nullable;
+
+/**
+ * Static utility methods pertaining to {@link Set} instances. Also see this
+ * class's counterparts {@link Lists} and {@link Maps}.
+ *
+ * @author Kevin Bourrillion
+ * @author Jared Levy
+ * @author Chris Povirk
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible(emulated = true)
+public final class Sets {
+  private Sets() {}
+
+  /**
+   * Returns an immutable set instance containing the given enum elements.
+   * Internally, the returned set will be backed by an {@link EnumSet}.
+   *
+   * <p>The iteration order of the returned set follows the enum's iteration
+   * order, not the order in which the elements are provided to the method.
+   *
+   * @param anElement one of the elements the set should contain
+   * @param otherElements the rest of the elements the set should contain
+   * @return an immutable set containing those elements, minus duplicates
+   */
+  // http://code.google.com/p/google-web-toolkit/issues/detail?id=3028
+  @GwtCompatible(serializable = true)
+  public static <E extends Enum<E>> ImmutableSet<E> immutableEnumSet(
+      E anElement, E... otherElements) {
+    return new ImmutableEnumSet<E>(EnumSet.of(anElement, otherElements));
+  }
+
+  /**
+   * Returns an immutable set instance containing the given enum elements.
+   * Internally, the returned set will be backed by an {@link EnumSet}.
+   *
+   * <p>The iteration order of the returned set follows the enum's iteration
+   * order, not the order in which the elements appear in the given collection.
+   *
+   * @param elements the elements, all of the same {@code enum} type, that the
+   *     set should contain
+   * @return an immutable set containing those elements, minus duplicates
+   */
+  // http://code.google.com/p/google-web-toolkit/issues/detail?id=3028
+  @GwtCompatible(serializable = true)
+  public static <E extends Enum<E>> ImmutableSet<E> immutableEnumSet(
+      Iterable<E> elements) {
+    Iterator<E> iterator = elements.iterator();
+    if (!iterator.hasNext()) {
+      return ImmutableSet.of();
+    }
+    if (elements instanceof EnumSet) {
+      EnumSet<E> enumSetClone = EnumSet.copyOf((EnumSet<E>) elements);
+      return new ImmutableEnumSet<E>(enumSetClone);
+    }
+    E first = iterator.next();
+    EnumSet<E> set = EnumSet.of(first);
+    while (iterator.hasNext()) {
+      set.add(iterator.next());
+    }
+    return new ImmutableEnumSet<E>(set);
+  }
+
+  /**
+   * Returns a new {@code EnumSet} instance containing the given elements.
+   * Unlike {@link EnumSet#copyOf(Collection)}, this method does not produce an
+   * exception on an empty collection, and it may be called on any iterable, not
+   * just a {@code Collection}.
+   */
+  public static <E extends Enum<E>> EnumSet<E> newEnumSet(Iterable<E> iterable,
+      Class<E> elementType) {
+    /*
+     * TODO(cpovirk): noneOf() and addAll() will both throw
+     * NullPointerExceptions when appropriate. However, NullPointerTester will
+     * fail on this method because it passes in Class.class instead of an enum
+     * type. This means that, when iterable is null but elementType is not,
+     * noneOf() will throw a ClassCastException before addAll() has a chance to
+     * throw a NullPointerException. NullPointerTester considers this a failure.
+     * Ideally the test would be fixed, but it would require a special case for
+     * Class<E> where E extends Enum. Until that happens (if ever), leave
+     * checkNotNull() here. For now, contemplate the irony that checking
+     * elementType, the problem argument, is harmful, while checking iterable,
+     * the innocent bystander, is effective.
+     */
+    checkNotNull(iterable);
+    EnumSet<E> set = EnumSet.noneOf(elementType);
+    Iterables.addAll(set, iterable);
+    return set;
+  }
+
+  // HashSet
+
+  /**
+   * Creates a <i>mutable</i>, empty {@code HashSet} instance.
+   *
+   * <p><b>Note:</b> if mutability is not required, use {@link
+   * ImmutableSet#of()} instead.
+   *
+   * <p><b>Note:</b> if {@code E} is an {@link Enum} type, use {@link
+   * EnumSet#noneOf} instead.
+   *
+   * @return a new, empty {@code HashSet}
+   */
+  public static <E> HashSet<E> newHashSet() {
+    return new HashSet<E>();
+  }
+
+  /**
+   * Creates a <i>mutable</i> {@code HashSet} instance containing the given
+   * elements in unspecified order.
+   *
+   * <p><b>Note:</b> if mutability is not required and the elements are
+   * non-null, use an overload of {@link ImmutableSet#of()} (for varargs) or
+   * {@link ImmutableSet#copyOf(Object[])} (for an array) instead.
+   *
+   * <p><b>Note:</b> if {@code E} is an {@link Enum} type, use {@link
+   * EnumSet#of(Enum, Enum[])} instead.
+   *
+   * @param elements the elements that the set should contain
+   * @return a new {@code HashSet} containing those elements (minus duplicates)
+   */
+  public static <E> HashSet<E> newHashSet(E... elements) {
+    HashSet<E> set = newHashSetWithExpectedSize(elements.length);
+    Collections.addAll(set, elements);
+    return set;
+  }
+
+  /**
+   * Creates a {@code HashSet} instance, with a high enough "initial capacity"
+   * that it <i>should</i> hold {@code expectedSize} elements without growth.
+   * This behavior cannot be broadly guaranteed, but it is observed to be true
+   * for OpenJDK 1.6. It also can't be guaranteed that the method isn't
+   * inadvertently <i>oversizing</i> the returned set.
+   *
+   * @param expectedSize the number of elements you expect to add to the
+   *        returned set
+   * @return a new, empty {@code HashSet} with enough capacity to hold {@code
+   *         expectedSize} elements without resizing
+   * @throws IllegalArgumentException if {@code expectedSize} is negative
+   */
+  public static <E> HashSet<E> newHashSetWithExpectedSize(int expectedSize) {
+    return new HashSet<E>(Maps.capacity(expectedSize));
+  }
+
+  /**
+   * Creates a <i>mutable</i> {@code HashSet} instance containing the given
+   * elements in unspecified order.
+   *
+   * <p><b>Note:</b> if mutability is not required and the elements are
+   * non-null, use {@link ImmutableSet#copyOf(Iterable)} instead.
+   *
+   * <p><b>Note:</b> if {@code E} is an {@link Enum} type, use
+   * {@link #newEnumSet(Iterable, Class)} instead.
+   *
+   * @param elements the elements that the set should contain
+   * @return a new {@code HashSet} containing those elements (minus duplicates)
+   */
+  public static <E> HashSet<E> newHashSet(Iterable<? extends E> elements) {
+    return (elements instanceof Collection)
+        ? new HashSet<E>(Collections2.cast(elements))
+        : newHashSet(elements.iterator());
+  }
+
+  /**
+   * Creates a <i>mutable</i> {@code HashSet} instance containing the given
+   * elements in unspecified order.
+   *
+   * <p><b>Note:</b> if mutability is not required and the elements are
+   * non-null, use {@link ImmutableSet#copyOf(Iterable)} instead.
+   *
+   * <p><b>Note:</b> if {@code E} is an {@link Enum} type, you should create an
+   * {@link EnumSet} instead.
+   *
+   * @param elements the elements that the set should contain
+   * @return a new {@code HashSet} containing those elements (minus duplicates)
+   */
+  public static <E> HashSet<E> newHashSet(Iterator<? extends E> elements) {
+    HashSet<E> set = newHashSet();
+    while (elements.hasNext()) {
+      set.add(elements.next());
+    }
+    return set;
+  }
+
+  // LinkedHashSet
+
+  /**
+   * Creates a <i>mutable</i>, empty {@code LinkedHashSet} instance.
+   *
+   * <p><b>Note:</b> if mutability is not required, use {@link
+   * ImmutableSet#of()} instead.
+   *
+   * @return a new, empty {@code LinkedHashSet}
+   */
+  public static <E> LinkedHashSet<E> newLinkedHashSet() {
+    return new LinkedHashSet<E>();
+  }
+
+  /**
+   * Creates a {@code LinkedHashSet} instance, with a high enough "initial
+   * capacity" that it <i>should</i> hold {@code expectedSize} elements without
+   * growth. This behavior cannot be broadly guaranteed, but it is observed to
+   * be true for OpenJDK 1.6. It also can't be guaranteed that the method isn't
+   * inadvertently <i>oversizing</i> the returned set.
+   *
+   * @param expectedSize the number of elements you expect to add to the
+   *        returned set
+   * @return a new, empty {@code LinkedHashSet} with enough capacity to hold
+   *         {@code expectedSize} elements without resizing
+   * @throws IllegalArgumentException if {@code expectedSize} is negative
+   * @since 11.0
+   */
+  public static <E> LinkedHashSet<E> newLinkedHashSetWithExpectedSize(
+      int expectedSize) {
+    return new LinkedHashSet<E>(Maps.capacity(expectedSize));
+  }
+
+  /**
+   * Creates a <i>mutable</i> {@code LinkedHashSet} instance containing the
+   * given elements in order.
+   *
+   * <p><b>Note:</b> if mutability is not required and the elements are
+   * non-null, use {@link ImmutableSet#copyOf(Iterable)} instead.
+   *
+   * @param elements the elements that the set should contain, in order
+   * @return a new {@code LinkedHashSet} containing those elements (minus
+   *     duplicates)
+   */
+  public static <E> LinkedHashSet<E> newLinkedHashSet(
+      Iterable<? extends E> elements) {
+    if (elements instanceof Collection) {
+      return new LinkedHashSet<E>(Collections2.cast(elements));
+    }
+    LinkedHashSet<E> set = newLinkedHashSet();
+    for (E element : elements) {
+      set.add(element);
+    }
+    return set;
+  }
+
+  // TreeSet
+
+  /**
+   * Creates a <i>mutable</i>, empty {@code TreeSet} instance sorted by the
+   * natural sort ordering of its elements.
+   *
+   * <p><b>Note:</b> if mutability is not required, use {@link
+   * ImmutableSortedSet#of()} instead.
+   *
+   * @return a new, empty {@code TreeSet}
+   */
+  public static <E extends Comparable> TreeSet<E> newTreeSet() {
+    return new TreeSet<E>();
+  }
+
+  /**
+   * Creates a <i>mutable</i> {@code TreeSet} instance containing the given
+   * elements sorted by their natural ordering.
+   *
+   * <p><b>Note:</b> if mutability is not required, use {@link
+   * ImmutableSortedSet#copyOf(Iterable)} instead.
+   *
+   * <p><b>Note:</b> If {@code elements} is a {@code SortedSet} with an explicit
+   * comparator, this method has different behavior than
+   * {@link TreeSet#TreeSet(SortedSet)}, which returns a {@code TreeSet} with
+   * that comparator.
+   *
+   * @param elements the elements that the set should contain
+   * @return a new {@code TreeSet} containing those elements (minus duplicates)
+   */
+  public static <E extends Comparable> TreeSet<E> newTreeSet(
+      Iterable<? extends E> elements) {
+    TreeSet<E> set = newTreeSet();
+    for (E element : elements) {
+      set.add(element);
+    }
+    return set;
+  }
+
+  /**
+   * Creates a <i>mutable</i>, empty {@code TreeSet} instance with the given
+   * comparator.
+   *
+   * <p><b>Note:</b> if mutability is not required, use {@code
+   * ImmutableSortedSet.orderedBy(comparator).build()} instead.
+   *
+   * @param comparator the comparator to use to sort the set
+   * @return a new, empty {@code TreeSet}
+   * @throws NullPointerException if {@code comparator} is null
+   */
+  public static <E> TreeSet<E> newTreeSet(Comparator<? super E> comparator) {
+    return new TreeSet<E>(checkNotNull(comparator));
+  }
+
+  /**
+   * Creates an empty {@code Set} that uses identity to determine equality. It
+   * compares object references, instead of calling {@code equals}, to
+   * determine whether a provided object matches an element in the set. For
+   * example, {@code contains} returns {@code false} when passed an object that
+   * equals a set member, but isn't the same instance. This behavior is similar
+   * to the way {@code IdentityHashMap} handles key lookups.
+   *
+   * @since 8.0
+   */
+  public static <E> Set<E> newIdentityHashSet() {
+    return Sets.newSetFromMap(Maps.<E, Boolean>newIdentityHashMap());
+  }
+
+  /**
+   * Creates an {@code EnumSet} consisting of all enum values that are not in
+   * the specified collection. If the collection is an {@link EnumSet}, this
+   * method has the same behavior as {@link EnumSet#complementOf}. Otherwise,
+   * the specified collection must contain at least one element, in order to
+   * determine the element type. If the collection could be empty, use
+   * {@link #complementOf(Collection, Class)} instead of this method.
+   *
+   * @param collection the collection whose complement should be stored in the
+   *     enum set
+   * @return a new, modifiable {@code EnumSet} containing all values of the enum
+   *     that aren't present in the given collection
+   * @throws IllegalArgumentException if {@code collection} is not an
+   *     {@code EnumSet} instance and contains no elements
+   */
+  public static <E extends Enum<E>> EnumSet<E> complementOf(
+      Collection<E> collection) {
+    if (collection instanceof EnumSet) {
+      return EnumSet.complementOf((EnumSet<E>) collection);
+    }
+    checkArgument(!collection.isEmpty(),
+        "collection is empty; use the other version of this method");
+    Class<E> type = collection.iterator().next().getDeclaringClass();
+    return makeComplementByHand(collection, type);
+  }
+
+  /**
+   * Creates an {@code EnumSet} consisting of all enum values that are not in
+   * the specified collection. This is equivalent to
+   * {@link EnumSet#complementOf}, but can act on any input collection, as long
+   * as the elements are of enum type.
+   *
+   * @param collection the collection whose complement should be stored in the
+   *     {@code EnumSet}
+   * @param type the type of the elements in the set
+   * @return a new, modifiable {@code EnumSet} initially containing all the
+   *     values of the enum not present in the given collection
+   */
+  public static <E extends Enum<E>> EnumSet<E> complementOf(
+      Collection<E> collection, Class<E> type) {
+    checkNotNull(collection);
+    return (collection instanceof EnumSet)
+        ? EnumSet.complementOf((EnumSet<E>) collection)
+        : makeComplementByHand(collection, type);
+  }
+
+  private static <E extends Enum<E>> EnumSet<E> makeComplementByHand(
+      Collection<E> collection, Class<E> type) {
+    EnumSet<E> result = EnumSet.allOf(type);
+    result.removeAll(collection);
+    return result;
+  }
+
+  /*
+   * Regarding newSetForMap() and SetFromMap:
+   *
+   * Written by Doug Lea with assistance from members of JCP JSR-166
+   * Expert Group and released to the public domain, as explained at
+   * http://creativecommons.org/licenses/publicdomain
+   */
+
+  /**
+   * Returns a set backed by the specified map. The resulting set displays
+   * the same ordering, concurrency, and performance characteristics as the
+   * backing map. In essence, this factory method provides a {@link Set}
+   * implementation corresponding to any {@link Map} implementation. There is no
+   * need to use this method on a {@link Map} implementation that already has a
+   * corresponding {@link Set} implementation (such as {@link java.util.HashMap}
+   * or {@link java.util.TreeMap}).
+   *
+   * <p>Each method invocation on the set returned by this method results in
+   * exactly one method invocation on the backing map or its {@code keySet}
+   * view, with one exception. The {@code addAll} method is implemented as a
+   * sequence of {@code put} invocations on the backing map.
+   *
+   * <p>The specified map must be empty at the time this method is invoked,
+   * and should not be accessed directly after this method returns. These
+   * conditions are ensured if the map is created empty, passed directly
+   * to this method, and no reference to the map is retained, as illustrated
+   * in the following code fragment: <pre>  {@code
+   *
+   *   Set<Object> identityHashSet = Sets.newSetFromMap(
+   *       new IdentityHashMap<Object, Boolean>());}</pre>
+   *
+   * This method has the same behavior as the JDK 6 method
+   * {@code Collections.newSetFromMap()}. The returned set is serializable if
+   * the backing map is.
+   *
+   * @param map the backing map
+   * @return the set backed by the map
+   * @throws IllegalArgumentException if {@code map} is not empty
+   */
+  public static <E> Set<E> newSetFromMap(Map<E, Boolean> map) {
+    return new SetFromMap<E>(map);
+  }
+
+  private static class SetFromMap<E> extends AbstractSet<E>
+      implements Set<E>, Serializable {
+    private final Map<E, Boolean> m; // The backing map
+    private transient Set<E> s; // Its keySet
+
+    SetFromMap(Map<E, Boolean> map) {
+      checkArgument(map.isEmpty(), "Map is non-empty");
+      m = map;
+      s = map.keySet();
+    }
+
+    @Override public void clear() {
+      m.clear();
+    }
+    @Override public int size() {
+      return m.size();
+    }
+    @Override public boolean isEmpty() {
+      return m.isEmpty();
+    }
+    @Override public boolean contains(Object o) {
+      return m.containsKey(o);
+    }
+    @Override public boolean remove(Object o) {
+      return m.remove(o) != null;
+    }
+    @Override public boolean add(E e) {
+      return m.put(e, Boolean.TRUE) == null;
+    }
+    @Override public Iterator<E> iterator() {
+      return s.iterator();
+    }
+    @Override public Object[] toArray() {
+      return s.toArray();
+    }
+    @Override public <T> T[] toArray(T[] a) {
+      return s.toArray(a);
+    }
+    @Override public String toString() {
+      return s.toString();
+    }
+    @Override public int hashCode() {
+      return s.hashCode();
+    }
+    @Override public boolean equals(@Nullable Object object) {
+      return this == object || this.s.equals(object);
+    }
+    @Override public boolean containsAll(Collection<?> c) {
+      return s.containsAll(c);
+    }
+    @Override public boolean removeAll(Collection<?> c) {
+      return s.removeAll(c);
+    }
+    @Override public boolean retainAll(Collection<?> c) {
+      return s.retainAll(c);
+    }
+
+    // addAll is the only inherited implementation
+    @GwtIncompatible("not needed in emulated source")
+    private static final long serialVersionUID = 0;
+
+    @GwtIncompatible("java.io.ObjectInputStream")
+    private void readObject(ObjectInputStream stream)
+        throws IOException, ClassNotFoundException {
+      stream.defaultReadObject();
+      s = m.keySet();
+    }
+  }
+
+  /**
+   * An unmodifiable view of a set which may be backed by other sets; this view
+   * will change as the backing sets do. Contains methods to copy the data into
+   * a new set which will then remain stable. There is usually no reason to
+   * retain a reference of type {@code SetView}; typically, you either use it
+   * as a plain {@link Set}, or immediately invoke {@link #immutableCopy} or
+   * {@link #copyInto} and forget the {@code SetView} itself.
+   *
+   * @since 2.0 (imported from Google Collections Library)
+   */
+  public abstract static class SetView<E> extends AbstractSet<E> {
+    private SetView() {} // no subclasses but our own
+
+    /**
+     * Returns an immutable copy of the current contents of this set view.
+     * Does not support null elements.
+     *
+     * <p><b>Warning:</b> this may have unexpected results if a backing set of
+     * this view uses a nonstandard notion of equivalence, for example if it is
+     * a {@link TreeSet} using a comparator that is inconsistent with {@link
+     * Object#equals(Object)}.
+     */
+    public ImmutableSet<E> immutableCopy() {
+      return ImmutableSet.copyOf(this);
+    }
+
+    /**
+     * Copies the current contents of this set view into an existing set. This
+     * method has equivalent behavior to {@code set.addAll(this)}, assuming that
+     * all the sets involved are based on the same notion of equivalence.
+     *
+     * @return a reference to {@code set}, for convenience
+     */
+    // Note: S should logically extend Set<? super E> but can't due to either
+    // some javac bug or some weirdness in the spec, not sure which.
+    public <S extends Set<E>> S copyInto(S set) {
+      set.addAll(this);
+      return set;
+    }
+  }
+
+  /**
+   * Returns an unmodifiable <b>view</b> of the union of two sets. The returned
+   * set contains all elements that are contained in either backing set.
+   * Iterating over the returned set iterates first over all the elements of
+   * {@code set1}, then over each element of {@code set2}, in order, that is not
+   * contained in {@code set1}.
+   *
+   * <p>Results are undefined if {@code set1} and {@code set2} are sets based on
+   * different equivalence relations (as {@link HashSet}, {@link TreeSet}, and
+   * the {@link Map#keySet} of an {@code IdentityHashMap} all are).
+   *
+   * <p><b>Note:</b> The returned view performs better when {@code set1} is the
+   * smaller of the two sets. If you have reason to believe one of your sets
+   * will generally be smaller than the other, pass it first.
+   */
+  public static <E> SetView<E> union(
+      final Set<? extends E> set1, final Set<? extends E> set2) {
+    checkNotNull(set1, "set1");
+    checkNotNull(set2, "set2");
+
+    final Set<? extends E> set2minus1 = difference(set2, set1);
+
+    return new SetView<E>() {
+      @Override public int size() {
+        return set1.size() + set2minus1.size();
+      }
+      @Override public boolean isEmpty() {
+        return set1.isEmpty() && set2.isEmpty();
+      }
+      @Override public Iterator<E> iterator() {
+        return Iterators.unmodifiableIterator(
+            Iterators.concat(set1.iterator(), set2minus1.iterator()));
+      }
+      @Override public boolean contains(Object object) {
+        return set1.contains(object) || set2.contains(object);
+      }
+      @Override public <S extends Set<E>> S copyInto(S set) {
+        set.addAll(set1);
+        set.addAll(set2);
+        return set;
+      }
+      @Override public ImmutableSet<E> immutableCopy() {
+        return new ImmutableSet.Builder<E>()
+            .addAll(set1).addAll(set2).build();
+      }
+    };
+  }
+
+  /**
+   * Returns an unmodifiable <b>view</b> of the intersection of two sets. The
+   * returned set contains all elements that are contained by both backing sets.
+   * The iteration order of the returned set matches that of {@code set1}.
+   *
+   * <p>Results are undefined if {@code set1} and {@code set2} are sets based
+   * on different equivalence relations (as {@code HashSet}, {@code TreeSet},
+   * and the keySet of an {@code IdentityHashMap} all are).
+   *
+   * <p><b>Note:</b> The returned view performs slightly better when {@code
+   * set1} is the smaller of the two sets. If you have reason to believe one of
+   * your sets will generally be smaller than the other, pass it first.
+   * Unfortunately, since this method sets the generic type of the returned set
+   * based on the type of the first set passed, this could in rare cases force
+   * you to make a cast, for example: <pre>   {@code
+   *
+   *   Set<Object> aFewBadObjects = ...
+   *   Set<String> manyBadStrings = ...
+   *
+   *   // impossible for a non-String to be in the intersection
+   *   SuppressWarnings("unchecked")
+   *   Set<String> badStrings = (Set) Sets.intersection(
+   *       aFewBadObjects, manyBadStrings);}</pre>
+   *
+   * This is unfortunate, but should come up only very rarely.
+   */
+  public static <E> SetView<E> intersection(
+      final Set<E> set1, final Set<?> set2) {
+    checkNotNull(set1, "set1");
+    checkNotNull(set2, "set2");
+
+    final Predicate<Object> inSet2 = Predicates.in(set2);
+    return new SetView<E>() {
+      @Override public Iterator<E> iterator() {
+        return Iterators.filter(set1.iterator(), inSet2);
+      }
+      @Override public int size() {
+        return Iterators.size(iterator());
+      }
+      @Override public boolean isEmpty() {
+        return !iterator().hasNext();
+      }
+      @Override public boolean contains(Object object) {
+        return set1.contains(object) && set2.contains(object);
+      }
+      @Override public boolean containsAll(Collection<?> collection) {
+        return set1.containsAll(collection)
+            && set2.containsAll(collection);
+      }
+    };
+  }
+
+  /**
+   * Returns an unmodifiable <b>view</b> of the difference of two sets. The
+   * returned set contains all elements that are contained by {@code set1} and
+   * not contained by {@code set2}. {@code set2} may also contain elements not
+   * present in {@code set1}; these are simply ignored. The iteration order of
+   * the returned set matches that of {@code set1}.
+   *
+   * <p>Results are undefined if {@code set1} and {@code set2} are sets based
+   * on different equivalence relations (as {@code HashSet}, {@code TreeSet},
+   * and the keySet of an {@code IdentityHashMap} all are).
+   */
+  public static <E> SetView<E> difference(
+      final Set<E> set1, final Set<?> set2) {
+    checkNotNull(set1, "set1");
+    checkNotNull(set2, "set2");
+
+    final Predicate<Object> notInSet2 = Predicates.not(Predicates.in(set2));
+    return new SetView<E>() {
+      @Override public Iterator<E> iterator() {
+        return Iterators.filter(set1.iterator(), notInSet2);
+      }
+      @Override public int size() {
+        return Iterators.size(iterator());
+      }
+      @Override public boolean isEmpty() {
+        return set2.containsAll(set1);
+      }
+      @Override public boolean contains(Object element) {
+        return set1.contains(element) && !set2.contains(element);
+      }
+    };
+  }
+
+  /**
+   * Returns an unmodifiable <b>view</b> of the symmetric difference of two
+   * sets. The returned set contains all elements that are contained in either
+   * {@code set1} or {@code set2} but not in both. The iteration order of the
+   * returned set is undefined.
+   *
+   * <p>Results are undefined if {@code set1} and {@code set2} are sets based
+   * on different equivalence relations (as {@code HashSet}, {@code TreeSet},
+   * and the keySet of an {@code IdentityHashMap} all are).
+   *
+   * @since 3.0
+   */
+  public static <E> SetView<E> symmetricDifference(
+      Set<? extends E> set1, Set<? extends E> set2) {
+    checkNotNull(set1, "set1");
+    checkNotNull(set2, "set2");
+
+    // TODO(kevinb): Replace this with a more efficient implementation
+    return difference(union(set1, set2), intersection(set1, set2));
+  }
+
+  /**
+   * Returns the elements of {@code unfiltered} that satisfy a predicate. The
+   * returned set is a live view of {@code unfiltered}; changes to one affect
+   * the other.
+   *
+   * <p>The resulting set's iterator does not support {@code remove()}, but all
+   * other set methods are supported. When given an element that doesn't satisfy
+   * the predicate, the set's {@code add()} and {@code addAll()} methods throw
+   * an {@link IllegalArgumentException}. When methods such as {@code
+   * removeAll()} and {@code clear()} are called on the filtered set, only
+   * elements that satisfy the filter will be removed from the underlying set.
+   *
+   * <p>The returned set isn't threadsafe or serializable, even if
+   * {@code unfiltered} is.
+   *
+   * <p>Many of the filtered set's methods, such as {@code size()}, iterate
+   * across every element in the underlying set and determine which elements
+   * satisfy the filter. When a live view is <i>not</i> needed, it may be faster
+   * to copy {@code Iterables.filter(unfiltered, predicate)} and use the copy.
+   *
+   * <p><b>Warning:</b> {@code predicate} must be <i>consistent with equals</i>,
+   * as documented at {@link Predicate#apply}. Do not provide a predicate such
+   * as {@code Predicates.instanceOf(ArrayList.class)}, which is inconsistent
+   * with equals. (See {@link Iterables#filter(Iterable, Class)} for related
+   * functionality.)
+   */
+  // TODO(kevinb): how to omit that last sentence when building GWT javadoc?
+  public static <E> Set<E> filter(
+      Set<E> unfiltered, Predicate<? super E> predicate) {
+    if (unfiltered instanceof SortedSet) {
+      return filter((SortedSet<E>) unfiltered, predicate);
+    }
+    if (unfiltered instanceof FilteredSet) {
+      // Support clear(), removeAll(), and retainAll() when filtering a filtered
+      // collection.
+      FilteredSet<E> filtered = (FilteredSet<E>) unfiltered;
+      Predicate<E> combinedPredicate
+          = Predicates.<E>and(filtered.predicate, predicate);
+      return new FilteredSet<E>(
+          (Set<E>) filtered.unfiltered, combinedPredicate);
+    }
+
+    return new FilteredSet<E>(
+        checkNotNull(unfiltered), checkNotNull(predicate));
+  }
+
+  private static class FilteredSet<E> extends FilteredCollection<E>
+      implements Set<E> {
+    FilteredSet(Set<E> unfiltered, Predicate<? super E> predicate) {
+      super(unfiltered, predicate);
+    }
+
+    @Override public boolean equals(@Nullable Object object) {
+      return equalsImpl(this, object);
+    }
+
+    @Override public int hashCode() {
+      return hashCodeImpl(this);
+    }
+  }
+
+  /**
+   * Returns the elements of a {@code SortedSet}, {@code unfiltered}, that
+   * satisfy a predicate. The returned set is a live view of {@code unfiltered};
+   * changes to one affect the other.
+   *
+   * <p>The resulting set's iterator does not support {@code remove()}, but all
+   * other set methods are supported. When given an element that doesn't satisfy
+   * the predicate, the set's {@code add()} and {@code addAll()} methods throw
+   * an {@link IllegalArgumentException}. When methods such as
+   * {@code removeAll()} and {@code clear()} are called on the filtered set,
+   * only elements that satisfy the filter will be removed from the underlying
+   * set.
+   *
+   * <p>The returned set isn't threadsafe or serializable, even if
+   * {@code unfiltered} is.
+   *
+   * <p>Many of the filtered set's methods, such as {@code size()}, iterate across
+   * every element in the underlying set and determine which elements satisfy
+   * the filter. When a live view is <i>not</i> needed, it may be faster to copy
+   * {@code Iterables.filter(unfiltered, predicate)} and use the copy.
+   *
+   * <p><b>Warning:</b> {@code predicate} must be <i>consistent with equals</i>,
+   * as documented at {@link Predicate#apply}. Do not provide a predicate such as
+   * {@code Predicates.instanceOf(ArrayList.class)}, which is inconsistent with
+   * equals. (See {@link Iterables#filter(Iterable, Class)} for related
+   * functionality.)
+   *
+   * @since 11.0
+   */
+  @Beta
+  @SuppressWarnings("unchecked")
+  public static <E> SortedSet<E> filter(
+      SortedSet<E> unfiltered, Predicate<? super E> predicate) {
+    if (unfiltered instanceof FilteredSet) {
+      // Support clear(), removeAll(), and retainAll() when filtering a filtered
+      // collection.
+      FilteredSet<E> filtered = (FilteredSet<E>) unfiltered;
+      Predicate<E> combinedPredicate
+          = Predicates.<E>and(filtered.predicate, predicate);
+      return new FilteredSortedSet<E>(
+          (SortedSet<E>) filtered.unfiltered, combinedPredicate);
+    }
+
+    return new FilteredSortedSet<E>(
+        checkNotNull(unfiltered), checkNotNull(predicate));
+  }
+
+  private static class FilteredSortedSet<E> extends FilteredCollection<E>
+      implements SortedSet<E> {
+
+    FilteredSortedSet(SortedSet<E> unfiltered, Predicate<? super E> predicate) {
+      super(unfiltered, predicate);
+    }
+
+    @Override public boolean equals(@Nullable Object object) {
+      return equalsImpl(this, object);
+    }
+
+    @Override public int hashCode() {
+      return hashCodeImpl(this);
+    }
+
+    @Override
+    public Comparator<? super E> comparator() {
+      return ((SortedSet<E>) unfiltered).comparator();
+    }
+
+    @Override
+    public SortedSet<E> subSet(E fromElement, E toElement) {
+      return new FilteredSortedSet<E>(((SortedSet<E>) unfiltered).subSet(fromElement, toElement),
+          predicate);
+    }
+
+    @Override
+    public SortedSet<E> headSet(E toElement) {
+      return new FilteredSortedSet<E>(((SortedSet<E>) unfiltered).headSet(toElement), predicate);
+    }
+
+    @Override
+    public SortedSet<E> tailSet(E fromElement) {
+      return new FilteredSortedSet<E>(((SortedSet<E>) unfiltered).tailSet(fromElement), predicate);
+    }
+
+    @Override
+    public E first() {
+      return iterator().next();
+    }
+
+    @Override
+    public E last() {
+      SortedSet<E> sortedUnfiltered = (SortedSet<E>) unfiltered;
+      while (true) {
+        E element = sortedUnfiltered.last();
+        if (predicate.apply(element)) {
+          return element;
+        }
+        sortedUnfiltered = sortedUnfiltered.headSet(element);
+      }
+    }
+  }
+
+  /**
+   * Returns every possible list that can be formed by choosing one element
+   * from each of the given sets in order; the "n-ary
+   * <a href="http://en.wikipedia.org/wiki/Cartesian_product">Cartesian
+   * product</a>" of the sets. For example: <pre>   {@code
+   *
+   *   Sets.cartesianProduct(ImmutableList.of(
+   *       ImmutableSet.of(1, 2),
+   *       ImmutableSet.of("A", "B", "C")))}</pre>
+   *
+   * returns a set containing six lists:
+   *
+   * <ul>
+   * <li>{@code ImmutableList.of(1, "A")}
+   * <li>{@code ImmutableList.of(1, "B")}
+   * <li>{@code ImmutableList.of(1, "C")}
+   * <li>{@code ImmutableList.of(2, "A")}
+   * <li>{@code ImmutableList.of(2, "B")}
+   * <li>{@code ImmutableList.of(2, "C")}
+   * </ul>
+   *
+   * The order in which these lists are returned is not guaranteed, however the
+   * position of an element inside a tuple always corresponds to the position of
+   * the set from which it came in the input list. Note that if any input set is
+   * empty, the Cartesian product will also be empty. If no sets at all are
+   * provided (an empty list), the resulting Cartesian product has one element,
+   * an empty list (counter-intuitive, but mathematically consistent).
+   *
+   * <p><i>Performance notes:</i> while the cartesian product of sets of size
+   * {@code m, n, p} is a set of size {@code m x n x p}, its actual memory
+   * consumption is much smaller. When the cartesian set is constructed, the
+   * input sets are merely copied. Only as the resulting set is iterated are the
+   * individual lists created, and these are not retained after iteration.
+   *
+   * @param sets the sets to choose elements from, in the order that
+   *     the elements chosen from those sets should appear in the resulting
+   *     lists
+   * @param <B> any common base class shared by all axes (often just {@link
+   *     Object})
+   * @return the Cartesian product, as an immutable set containing immutable
+   *     lists
+   * @throws NullPointerException if {@code sets}, any one of the {@code sets},
+   *     or any element of a provided set is null
+   * @since 2.0
+   */
+  public static <B> Set<List<B>> cartesianProduct(
+      List<? extends Set<? extends B>> sets) {
+    for (Set<? extends B> set : sets) {
+      if (set.isEmpty()) {
+        return ImmutableSet.of();
+      }
+    }
+    CartesianSet<B> cartesianSet = new CartesianSet<B>(sets);
+    return cartesianSet;
+  }
+
+  /**
+   * Returns every possible list that can be formed by choosing one element
+   * from each of the given sets in order; the "n-ary
+   * <a href="http://en.wikipedia.org/wiki/Cartesian_product">Cartesian
+   * product</a>" of the sets. For example: <pre>   {@code
+   *
+   *   Sets.cartesianProduct(
+   *       ImmutableSet.of(1, 2),
+   *       ImmutableSet.of("A", "B", "C"))}</pre>
+   *
+   * returns a set containing six lists:
+   *
+   * <ul>
+   * <li>{@code ImmutableList.of(1, "A")}
+   * <li>{@code ImmutableList.of(1, "B")}
+   * <li>{@code ImmutableList.of(1, "C")}
+   * <li>{@code ImmutableList.of(2, "A")}
+   * <li>{@code ImmutableList.of(2, "B")}
+   * <li>{@code ImmutableList.of(2, "C")}
+   * </ul>
+   *
+   * The order in which these lists are returned is not guaranteed, however the
+   * position of an element inside a tuple always corresponds to the position of
+   * the set from which it came in the input list. Note that if any input set is
+   * empty, the Cartesian product will also be empty. If no sets at all are
+   * provided, the resulting Cartesian product has one element, an empty list
+   * (counter-intuitive, but mathematically consistent).
+   *
+   * <p><i>Performance notes:</i> while the cartesian product of sets of size
+   * {@code m, n, p} is a set of size {@code m x n x p}, its actual memory
+   * consumption is much smaller. When the cartesian set is constructed, the
+   * input sets are merely copied. Only as the resulting set is iterated are the
+   * individual lists created, and these are not retained after iteration.
+   *
+   * @param sets the sets to choose elements from, in the order that
+   *     the elements chosen from those sets should appear in the resulting
+   *     lists
+   * @param <B> any common base class shared by all axes (often just {@link
+   *     Object})
+   * @return the Cartesian product, as an immutable set containing immutable
+   *     lists
+   * @throws NullPointerException if {@code sets}, any one of the {@code sets},
+   *     or any element of a provided set is null
+   * @since 2.0
+   */
+  public static <B> Set<List<B>> cartesianProduct(
+      Set<? extends B>... sets) {
+    return cartesianProduct(Arrays.asList(sets));
+  }
+
+  private static class CartesianSet<B> extends AbstractSet<List<B>> {
+    final ImmutableList<Axis> axes;
+    final int size;
+
+    CartesianSet(List<? extends Set<? extends B>> sets) {
+      int dividend = 1;
+      ImmutableList.Builder<Axis> builder = ImmutableList.builder();
+      try {
+        for (Set<? extends B> set : sets) {
+          Axis axis = new Axis(set, dividend);
+          builder.add(axis);
+          dividend = IntMath.checkedMultiply(dividend, axis.size());
+        }
+      } catch (ArithmeticException overflow) {
+        throw new IllegalArgumentException("cartesian product too big");
+      }
+      this.axes = builder.build();
+      size = dividend;
+    }
+
+    @Override public int size() {
+      return size;
+    }
+
+    @Override public UnmodifiableIterator<List<B>> iterator() {
+      return new UnmodifiableIterator<List<B>>() {
+        int index;
+
+        @Override
+        public boolean hasNext() {
+          return index < size;
+        }
+
+        @Override
+        public List<B> next() {
+          if (!hasNext()) {
+            throw new NoSuchElementException();
+          }
+
+          Object[] tuple = new Object[axes.size()];
+          for (int i = 0 ; i < tuple.length; i++) {
+            tuple[i] = axes.get(i).getForIndex(index);
+          }
+          index++;
+
+          @SuppressWarnings("unchecked") // only B's are put in here
+          List<B> result = (ImmutableList<B>) ImmutableList.copyOf(tuple);
+          return result;
+        }
+      };
+    }
+
+    @Override public boolean contains(Object element) {
+      if (!(element instanceof List<?>)) {
+        return false;
+      }
+      List<?> tuple = (List<?>) element;
+      int dimensions = axes.size();
+      if (tuple.size() != dimensions) {
+        return false;
+      }
+      for (int i = 0; i < dimensions; i++) {
+        if (!axes.get(i).contains(tuple.get(i))) {
+          return false;
+        }
+      }
+      return true;
+    }
+
+    @Override public boolean equals(@Nullable Object object) {
+      // Warning: this is broken if size() == 0, so it is critical that we
+      // substitute an empty ImmutableSet to the user in place of this
+      if (object instanceof CartesianSet) {
+        CartesianSet<?> that = (CartesianSet<?>) object;
+        return this.axes.equals(that.axes);
+      }
+      return super.equals(object);
+    }
+
+    @Override public int hashCode() {
+      // Warning: this is broken if size() == 0, so it is critical that we
+      // substitute an empty ImmutableSet to the user in place of this
+
+      // It's a weird formula, but tests prove it works.
+      int adjust = size - 1;
+      for (int i = 0; i < axes.size(); i++) {
+        adjust *= 31;
+      }
+      return axes.hashCode() + adjust;
+    }
+
+    private class Axis {
+      final ImmutableSet<? extends B> choices;
+      final ImmutableList<? extends B> choicesList;
+      final int dividend;
+
+      Axis(Set<? extends B> set, int dividend) {
+        choices = ImmutableSet.copyOf(set);
+        choicesList = choices.asList();
+        this.dividend = dividend;
+      }
+
+      int size() {
+        return choices.size();
+      }
+
+      B getForIndex(int index) {
+        return choicesList.get(index / dividend % size());
+      }
+
+      boolean contains(Object target) {
+        return choices.contains(target);
+      }
+
+      @Override public boolean equals(Object obj) {
+        if (obj instanceof CartesianSet.Axis) {
+          CartesianSet.Axis that = (CartesianSet.Axis) obj;
+          return this.choices.equals(that.choices);
+          // dividends must be equal or we wouldn't have gotten this far
+        }
+        return false;
+      }
+
+      @Override public int hashCode() {
+        // Because Axis instances are not exposed, we can
+        // opportunistically choose whatever bizarre formula happens
+        // to make CartesianSet.hashCode() as simple as possible.
+        return size / choices.size() * choices.hashCode();
+      }
+    }
+  }
+
+  /**
+   * Returns the set of all possible subsets of {@code set}. For example,
+   * {@code powerSet(ImmutableSet.of(1, 2))} returns the set {@code {{},
+   * {1}, {2}, {1, 2}}}.
+   *
+   * <p>Elements appear in these subsets in the same iteration order as they
+   * appeared in the input set. The order in which these subsets appear in the
+   * outer set is undefined. Note that the power set of the empty set is not the
+   * empty set, but a one-element set containing the empty set.
+   *
+   * <p>The returned set and its constituent sets use {@code equals} to decide
+   * whether two elements are identical, even if the input set uses a different
+   * concept of equivalence.
+   *
+   * <p><i>Performance notes:</i> while the power set of a set with size {@code
+   * n} is of size {@code 2^n}, its memory usage is only {@code O(n)}. When the
+   * power set is constructed, the input set is merely copied. Only as the
+   * power set is iterated are the individual subsets created, and these subsets
+   * themselves occupy only a few bytes of memory regardless of their size.
+   *
+   * @param set the set of elements to construct a power set from
+   * @return the power set, as an immutable set of immutable sets
+   * @throws IllegalArgumentException if {@code set} has more than 30 unique
+   *     elements (causing the power set size to exceed the {@code int} range)
+   * @throws NullPointerException if {@code set} is or contains {@code null}
+   * @see <a href="http://en.wikipedia.org/wiki/Power_set">Power set article at
+   *      Wikipedia</a>
+   * @since 4.0
+   */
+  @GwtCompatible(serializable = false)
+  public static <E> Set<Set<E>> powerSet(Set<E> set) {
+    ImmutableSet<E> input = ImmutableSet.copyOf(set);
+    checkArgument(input.size() <= 30,
+        "Too many elements to create power set: %s > 30", input.size());
+    return new PowerSet<E>(input);
+  }
+
+  private static final class PowerSet<E> extends AbstractSet<Set<E>> {
+    final ImmutableSet<E> inputSet;
+    final ImmutableList<E> inputList;
+    final int powerSetSize;
+
+    PowerSet(ImmutableSet<E> input) {
+      this.inputSet = input;
+      this.inputList = input.asList();
+      this.powerSetSize = 1 << input.size();
+    }
+
+    @Override public int size() {
+      return powerSetSize;
+    }
+
+    @Override public boolean isEmpty() {
+      return false;
+    }
+
+    @Override public Iterator<Set<E>> iterator() {
+      return new AbstractIndexedListIterator<Set<E>>(powerSetSize) {
+        @Override protected Set<E> get(final int setBits) {
+          return new AbstractSet<E>() {
+            @Override public int size() {
+              return Integer.bitCount(setBits);
+            }
+            @Override public Iterator<E> iterator() {
+              return new BitFilteredSetIterator<E>(inputList, setBits);
+            }
+          };
+        }
+      };
+    }
+
+    private static final class BitFilteredSetIterator<E>
+        extends UnmodifiableIterator<E> {
+      final ImmutableList<E> input;
+      int remainingSetBits;
+
+      BitFilteredSetIterator(ImmutableList<E> input, int allSetBits) {
+        this.input = input;
+        this.remainingSetBits = allSetBits;
+      }
+
+      @Override public boolean hasNext() {
+        return remainingSetBits != 0;
+      }
+
+      @Override public E next() {
+        int index = Integer.numberOfTrailingZeros(remainingSetBits);
+        if (index == 32) {
+          throw new NoSuchElementException();
+        }
+
+        int currentElementMask = 1 << index;
+        remainingSetBits &= ~currentElementMask;
+        return input.get(index);
+      }
+    }
+
+    @Override public boolean contains(@Nullable Object obj) {
+      if (obj instanceof Set) {
+        Set<?> set = (Set<?>) obj;
+        return inputSet.containsAll(set);
+      }
+      return false;
+    }
+
+    @Override public boolean equals(@Nullable Object obj) {
+      if (obj instanceof PowerSet) {
+        PowerSet<?> that = (PowerSet<?>) obj;
+        return inputSet.equals(that.inputSet);
+      }
+      return super.equals(obj);
+    }
+
+    @Override public int hashCode() {
+      /*
+       * The sum of the sums of the hash codes in each subset is just the sum of
+       * each input element's hash code times the number of sets that element
+       * appears in. Each element appears in exactly half of the 2^n sets, so:
+       */
+      return inputSet.hashCode() << (inputSet.size() - 1);
+    }
+
+    @Override public String toString() {
+      return "powerSet(" + inputSet + ")";
+    }
+  }
+
+  /**
+   * An implementation for {@link Set#hashCode()}.
+   */
+  static int hashCodeImpl(Set<?> s) {
+    int hashCode = 0;
+    for (Object o : s) {
+      hashCode += o != null ? o.hashCode() : 0;
+    }
+    return hashCode;
+  }
+
+  /**
+   * An implementation for {@link Set#equals(Object)}.
+   */
+  static boolean equalsImpl(Set<?> s, @Nullable Object object){
+    if (s == object) {
+      return true;
+    }
+    if (object instanceof Set) {
+      Set<?> o = (Set<?>) object;
+
+      try {
+        return s.size() == o.size() && s.containsAll(o);
+      } catch (NullPointerException ignored) {
+        return false;
+      } catch (ClassCastException ignored) {
+        return false;
+      }
+    }
+    return false;
+  }
+
+  /**
+   * Creates a view of Set<B> for a Set<A>, given a bijection between A and B.
+   * (Modelled for now as InvertibleFunction<A, B>, can't be Converter<A, B>
+   * because that's not in Guava, though both designs are less than optimal).
+   * Note that the bijection is treated as undefined for values not in the
+   * given Set<A> - it doesn't have to define a true bijection for those.
+   *
+   * <p>Note that the returned Set's contains method is unsafe -
+   * you *must* pass an instance of B to it, since the bijection
+   * can only invert B's (not any Object) back to A, so we can
+   * then delegate the call to the original Set<A>.
+   */
+  static <A, B> Set<B> transform(
+      Set<A> set, InvertibleFunction<A, B> bijection) {
+    return new TransformedSet<A, B>(
+        Preconditions.checkNotNull(set, "set"),
+        Preconditions.checkNotNull(bijection, "bijection")
+    );
+  }
+
+  /**
+   * Stop-gap measure since there is no bijection related type in Guava.
+   */
+  abstract static class InvertibleFunction<A, B> implements Function<A, B> {
+    abstract A invert(B b);
+
+    public InvertibleFunction<B, A> inverse() {
+      return new InvertibleFunction<B, A>() {
+        @Override public A apply(B b) {
+          return InvertibleFunction.this.invert(b);
+        }
+
+        @Override B invert(A a) {
+          return InvertibleFunction.this.apply(a);
+        }
+
+        // Not required per se, but just for good karma.
+        @Override public InvertibleFunction<A, B> inverse() {
+          return InvertibleFunction.this;
+        }
+      };
+    }
+  }
+
+  private static class TransformedSet<A, B> extends AbstractSet<B> {
+    final Set<A> delegate;
+    final InvertibleFunction<A, B> bijection;
+
+    TransformedSet(Set<A> delegate, InvertibleFunction<A, B> bijection) {
+      this.delegate = delegate;
+      this.bijection = bijection;
+    }
+
+    @Override public Iterator<B> iterator() {
+      return Iterators.transform(delegate.iterator(), bijection);
+    }
+
+    @Override public int size() {
+      return delegate.size();
+    }
+
+    @SuppressWarnings("unchecked") // unsafe, passed object *must* be B
+    @Override public boolean contains(Object o) {
+      B b = (B) o;
+      A a = bijection.invert(b);
+      /*
+       * Mathematically, Converter<A, B> defines a bijection between ALL A's
+       * on ALL B's. Here we concern ourselves with a subset
+       * of this relation: we only want the part that is defined by a *subset*
+       * of all A's (defined by that Set<A> delegate), and the image
+       * of *that* on B (which is this set). We don't care whether
+       * the converter is *not* a bijection for A's that are not in Set<A>
+       * or B's not in this Set<B>.
+       *
+       * We only want to return true if and only f the user passes a B instance
+       * that is contained in precisely in the image of Set<A>.
+       *
+       * The first test is whether the inverse image of this B is indeed
+       * in Set<A>. But we don't know whether that B belongs in this Set<B>
+       * or not; if not, the converter is free to return
+       * anything it wants, even an element of Set<A> (and this relationship
+       * is not part of the Set<A> <--> Set<B> bijection), and we must not
+       * be confused by that. So we have to do a final check to see if the
+       * image of that A is really equivalent to the passed B, which proves
+       * that the given B belongs indeed in the image of Set<A>.
+       */
+      return delegate.contains(a) && Objects.equal(bijection.apply(a), o);
+    }
+
+    @Override public boolean add(B b) {
+      return delegate.add(bijection.invert(b));
+    }
+
+    @SuppressWarnings("unchecked") // unsafe, passed object *must* be B
+    @Override public boolean remove(Object o) {
+      return contains(o) && delegate.remove(bijection.invert((B) o));
+    }
+
+    @Override public void clear() {
+      delegate.clear();
+    }
+  }
+
+  /**
+   * Remove each element in an iterable from a set.
+   */
+  static boolean removeAllImpl(Set<?> set, Iterable<?> iterable) {
+    // TODO(jlevy): Have ForwardingSet.standardRemoveAll() call this method.
+    boolean changed = false;
+    for (Object o : iterable) {
+      changed |= set.remove(o);
+    }
+    return changed;
+  }
+}
diff --git a/guava/src/com/google/common/collect/SingletonImmutableList.java b/guava/src/com/google/common/collect/SingletonImmutableList.java
new file mode 100644
index 0000000..e546d2b
--- /dev/null
+++ b/guava/src/com/google/common/collect/SingletonImmutableList.java
@@ -0,0 +1,169 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Preconditions;
+
+import java.util.List;
+import java.util.NoSuchElementException;
+
+import javax.annotation.Nullable;
+
+/**
+ * Implementation of {@link ImmutableList} with exactly one element.
+ *
+ * @author Hayward Chan
+ */
+@GwtCompatible(serializable = true, emulated = true)
+@SuppressWarnings("serial") // uses writeReplace(), not default serialization
+final class SingletonImmutableList<E> extends ImmutableList<E> {
+
+  final transient E element;
+
+  SingletonImmutableList(E element) {
+    this.element = checkNotNull(element);
+  }
+
+  @Override
+  public E get(int index) {
+    Preconditions.checkElementIndex(index, 1);
+    return element;
+  }
+
+  @Override public int indexOf(@Nullable Object object) {
+    return element.equals(object) ? 0 : -1;
+  }
+
+  @Override public UnmodifiableIterator<E> iterator() {
+    return Iterators.singletonIterator(element);
+  }
+
+  @Override public int lastIndexOf(@Nullable Object object) {
+    return element.equals(object) ? 0 : -1;
+  }
+
+  @Override public UnmodifiableListIterator<E> listIterator(final int start) {
+    Preconditions.checkPositionIndex(start, 1);
+    return new UnmodifiableListIterator<E>() {
+
+      boolean hasNext = start == 0;
+
+      @Override public boolean hasNext() {
+        return hasNext;
+      }
+
+      @Override public boolean hasPrevious() {
+        return !hasNext;
+      }
+
+      @Override public E next() {
+        if (!hasNext) {
+          throw new NoSuchElementException();
+        }
+        hasNext = false;
+        return element;
+      }
+
+      @Override public int nextIndex() {
+        return hasNext ? 0 : 1;
+      }
+
+      @Override public E previous() {
+        if (hasNext) {
+          throw new NoSuchElementException();
+        }
+        hasNext = true;
+        return element;
+      }
+
+      @Override public int previousIndex() {
+        return hasNext ? -1 : 0;
+      }
+    };
+  }
+
+  @Override
+  public int size() {
+    return 1;
+  }
+
+  @Override public ImmutableList<E> subList(int fromIndex, int toIndex) {
+    Preconditions.checkPositionIndexes(fromIndex, toIndex, 1);
+    return (fromIndex == toIndex) ? ImmutableList.<E>of() : this;
+  }
+
+  @Override public ImmutableList<E> reverse() {
+    return this;
+  }
+
+  @Override public boolean contains(@Nullable Object object) {
+    return element.equals(object);
+  }
+
+  @Override public boolean equals(Object object) {
+    if (object == this) {
+      return true;
+    }
+    if (object instanceof List) {
+      List<?> that = (List<?>) object;
+      return that.size() == 1 && element.equals(that.get(0));
+    }
+    return false;
+  }
+
+  @Override public int hashCode() {
+    // not caching hash code since it could change if the element is mutable
+    // in a way that modifies its hash code.
+    return 31 + element.hashCode();
+  }
+
+  @Override public String toString() {
+    String elementToString = element.toString();
+    return new StringBuilder(elementToString.length() + 2)
+        .append('[')
+        .append(elementToString)
+        .append(']')
+        .toString();
+  }
+
+  @Override public boolean isEmpty() {
+    return false;
+  }
+
+  @Override boolean isPartialView() {
+    return false;
+  }
+
+  @Override public Object[] toArray() {
+    return new Object[] { element };
+  }
+
+  @Override public <T> T[] toArray(T[] array) {
+    if (array.length == 0) {
+      array = ObjectArrays.newArray(array, 1);
+    } else if (array.length > 1) {
+      array[1] = null;
+    }
+    // Writes will produce ArrayStoreException when the toArray() doc requires.
+    Object[] objectArray = array;
+    objectArray[0] = element;
+    return array;
+  }
+}
diff --git a/guava/src/com/google/common/collect/SingletonImmutableMap.java b/guava/src/com/google/common/collect/SingletonImmutableMap.java
new file mode 100644
index 0000000..9dd6e60
--- /dev/null
+++ b/guava/src/com/google/common/collect/SingletonImmutableMap.java
@@ -0,0 +1,162 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Map;
+
+import javax.annotation.Nullable;
+
+/**
+ * Implementation of {@link ImmutableMap} with exactly one entry.
+ *
+ * @author Jesse Wilson
+ * @author Kevin Bourrillion
+ */
+@GwtCompatible(serializable = true, emulated = true)
+@SuppressWarnings("serial") // uses writeReplace(), not default serialization
+final class SingletonImmutableMap<K, V> extends ImmutableMap<K, V> {
+
+  final transient K singleKey;
+  final transient V singleValue;
+
+  private transient Entry<K, V> entry;
+
+  SingletonImmutableMap(K singleKey, V singleValue) {
+    this.singleKey = singleKey;
+    this.singleValue = singleValue;
+  }
+
+  SingletonImmutableMap(Entry<K, V> entry) {
+    this.entry = entry;
+    this.singleKey = entry.getKey();
+    this.singleValue = entry.getValue();
+  }
+
+  private Entry<K, V> entry() {
+    Entry<K, V> e = entry;
+    return (e == null)
+        ? (entry = Maps.immutableEntry(singleKey, singleValue)) : e;
+  }
+
+  @Override public V get(@Nullable Object key) {
+    return singleKey.equals(key) ? singleValue : null;
+  }
+
+  @Override
+  public int size() {
+    return 1;
+  }
+
+  @Override public boolean isEmpty() {
+    return false;
+  }
+
+  @Override public boolean containsKey(@Nullable Object key) {
+    return singleKey.equals(key);
+  }
+
+  @Override public boolean containsValue(@Nullable Object value) {
+    return singleValue.equals(value);
+  }
+
+  @Override boolean isPartialView() {
+    return false;
+  }
+
+  private transient ImmutableSet<Entry<K, V>> entrySet;
+
+  @Override public ImmutableSet<Entry<K, V>> entrySet() {
+    ImmutableSet<Entry<K, V>> es = entrySet;
+    return (es == null) ? (entrySet = ImmutableSet.of(entry())) : es;
+  }
+
+  private transient ImmutableSet<K> keySet;
+
+  @Override public ImmutableSet<K> keySet() {
+    ImmutableSet<K> ks = keySet;
+    return (ks == null) ? (keySet = ImmutableSet.of(singleKey)) : ks;
+  }
+
+  private transient ImmutableCollection<V> values;
+
+  @Override public ImmutableCollection<V> values() {
+    ImmutableCollection<V> v = values;
+    return (v == null) ? (values = new Values<V>(singleValue)) : v;
+  }
+
+  @SuppressWarnings("serial") // uses writeReplace(), not default serialization
+  private static class Values<V> extends ImmutableCollection<V> {
+    final V singleValue;
+
+    Values(V singleValue) {
+      this.singleValue = singleValue;
+    }
+
+    @Override public boolean contains(Object object) {
+      return singleValue.equals(object);
+    }
+
+    @Override public boolean isEmpty() {
+      return false;
+    }
+
+    @Override
+    public int size() {
+      return 1;
+    }
+
+    @Override public UnmodifiableIterator<V> iterator() {
+      return Iterators.singletonIterator(singleValue);
+    }
+
+    @Override boolean isPartialView() {
+      return true;
+    }
+  }
+
+  @Override public boolean equals(@Nullable Object object) {
+    if (object == this) {
+      return true;
+    }
+    if (object instanceof Map) {
+      Map<?, ?> that = (Map<?, ?>) object;
+      if (that.size() != 1) {
+        return false;
+      }
+      Entry<?, ?> entry = that.entrySet().iterator().next();
+      return singleKey.equals(entry.getKey())
+          && singleValue.equals(entry.getValue());
+    }
+    return false;
+  }
+
+  @Override public int hashCode() {
+    return singleKey.hashCode() ^ singleValue.hashCode();
+  }
+
+  @Override public String toString() {
+    return new StringBuilder()
+        .append('{')
+        .append(singleKey.toString())
+        .append('=')
+        .append(singleValue.toString())
+        .append('}')
+        .toString();
+  }
+}
diff --git a/guava/src/com/google/common/collect/SingletonImmutableSet.java b/guava/src/com/google/common/collect/SingletonImmutableSet.java
new file mode 100644
index 0000000..f64aac1
--- /dev/null
+++ b/guava/src/com/google/common/collect/SingletonImmutableSet.java
@@ -0,0 +1,125 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Preconditions;
+
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * Implementation of {@link ImmutableSet} with exactly one element.
+ *
+ * @author Kevin Bourrillion
+ * @author Nick Kralevich
+ */
+@GwtCompatible(serializable = true, emulated = true)
+@SuppressWarnings("serial") // uses writeReplace(), not default serialization
+final class SingletonImmutableSet<E> extends ImmutableSet<E> {
+
+  final transient E element;
+  // This is transient because it will be recalculated on the first
+  // call to hashCode().
+  //
+  // A race condition is avoided since threads will either see that the value
+  // is zero and recalculate it themselves, or two threads will see it at
+  // the same time, and both recalculate it.  If the cachedHashCode is 0,
+  // it will always be recalculated, unfortunately.
+  private transient int cachedHashCode;
+
+  SingletonImmutableSet(E element) {
+    this.element = Preconditions.checkNotNull(element);
+  }
+
+  SingletonImmutableSet(E element, int hashCode) {
+    // Guaranteed to be non-null by the presence of the pre-computed hash code.
+    this.element = element;
+    cachedHashCode = hashCode;
+  }
+
+  @Override
+  public int size() {
+    return 1;
+  }
+
+  @Override public boolean isEmpty() {
+    return false;
+  }
+
+  @Override public boolean contains(Object target) {
+    return element.equals(target);
+  }
+
+  @Override public UnmodifiableIterator<E> iterator() {
+    return Iterators.singletonIterator(element);
+  }
+
+  @Override boolean isPartialView() {
+    return false;
+  }
+
+  @Override public Object[] toArray() {
+    return new Object[] { element };
+  }
+
+  @Override public <T> T[] toArray(T[] array) {
+    if (array.length == 0) {
+      array = ObjectArrays.newArray(array, 1);
+    } else if (array.length > 1) {
+      array[1] = null;
+    }
+    // Writes will produce ArrayStoreException when the toArray() doc requires.
+    Object[] objectArray = array;
+    objectArray[0] = element;
+    return array;
+  }
+
+  @Override public boolean equals(@Nullable Object object) {
+    if (object == this) {
+      return true;
+    }
+    if (object instanceof Set) {
+      Set<?> that = (Set<?>) object;
+      return that.size() == 1 && element.equals(that.iterator().next());
+    }
+    return false;
+  }
+
+  @Override public final int hashCode() {
+    // Racy single-check.
+    int code = cachedHashCode;
+    if (code == 0) {
+      cachedHashCode = code = element.hashCode();
+    }
+    return code;
+  }
+
+  @Override boolean isHashCodeFast() {
+    return cachedHashCode != 0;
+  }
+
+  @Override public String toString() {
+    String elementToString = element.toString();
+    return new StringBuilder(elementToString.length() + 2)
+        .append('[')
+        .append(elementToString)
+        .append(']')
+        .toString();
+  }
+}
diff --git a/guava/src/com/google/common/collect/SingletonImmutableTable.java b/guava/src/com/google/common/collect/SingletonImmutableTable.java
new file mode 100644
index 0000000..4e33aea
--- /dev/null
+++ b/guava/src/com/google/common/collect/SingletonImmutableTable.java
@@ -0,0 +1,149 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Objects;
+
+import java.util.Map;
+
+import javax.annotation.Nullable;
+
+/**
+ * An implementation of {@link ImmutableTable} that holds a single cell.
+ *
+ * @author gak@google.com (Gregory Kick)
+ */
+@GwtCompatible
+final class SingletonImmutableTable<R, C, V> extends ImmutableTable<R, C, V> {
+  private final R singleRowKey;
+  private final C singleColumnKey;
+  private final V singleValue;
+
+  SingletonImmutableTable(R rowKey, C columnKey, V value) {
+    this.singleRowKey = checkNotNull(rowKey);
+    this.singleColumnKey = checkNotNull(columnKey);
+    this.singleValue = checkNotNull(value);
+  }
+
+  SingletonImmutableTable(Cell<R, C, V> cell) {
+    this(cell.getRowKey(), cell.getColumnKey(), cell.getValue());
+  }
+
+  @Override public ImmutableSet<Cell<R, C, V>> cellSet() {
+    return ImmutableSet.of(
+        Tables.immutableCell(singleRowKey, singleColumnKey, singleValue));
+  }
+
+  @Override public ImmutableMap<R, V> column(C columnKey) {
+    checkNotNull(columnKey);
+    return containsColumn(columnKey)
+        ? ImmutableMap.of(singleRowKey, singleValue)
+        : ImmutableMap.<R, V>of();
+  }
+
+  @Override public ImmutableSet<C> columnKeySet() {
+    return ImmutableSet.of(singleColumnKey);
+  }
+
+  @Override public ImmutableMap<C, Map<R, V>> columnMap() {
+    return ImmutableMap.of(singleColumnKey,
+        (Map<R, V>) ImmutableMap.of(singleRowKey, singleValue));
+  }
+
+  @Override public boolean contains(@Nullable Object rowKey,
+      @Nullable Object columnKey) {
+    return containsRow(rowKey) && containsColumn(columnKey);
+  }
+
+  @Override public boolean containsColumn(@Nullable Object columnKey) {
+    return Objects.equal(this.singleColumnKey, columnKey);
+  }
+
+  @Override public boolean containsRow(@Nullable Object rowKey) {
+    return Objects.equal(this.singleRowKey, rowKey);
+  }
+
+  @Override public boolean containsValue(@Nullable Object value) {
+    return Objects.equal(this.singleValue, value);
+  }
+
+  @Override public V get(@Nullable Object rowKey, @Nullable Object columnKey) {
+    return contains(rowKey, columnKey) ? singleValue : null;
+  }
+
+  @Override public boolean isEmpty() {
+    return false;
+  }
+
+  @Override public ImmutableMap<C, V> row(R rowKey) {
+    checkNotNull(rowKey);
+    return containsRow(rowKey)
+        ? ImmutableMap.of(singleColumnKey, singleValue)
+        : ImmutableMap.<C, V>of();
+  }
+
+  @Override public ImmutableSet<R> rowKeySet() {
+    return ImmutableSet.of(singleRowKey);
+  }
+
+  @Override public ImmutableMap<R, Map<C, V>> rowMap() {
+    return ImmutableMap.of(singleRowKey,
+        (Map<C, V>) ImmutableMap.of(singleColumnKey, singleValue));
+  }
+
+  @Override public int size() {
+    return 1;
+  }
+
+  @Override public ImmutableCollection<V> values() {
+    return ImmutableSet.of(singleValue);
+  }
+
+  @Override public boolean equals(@Nullable Object obj) {
+    if (obj == this) {
+      return true;
+    } else if (obj instanceof Table<?, ?, ?>) {
+      Table<?, ?, ?> that = (Table<?, ?, ?>) obj;
+      if (that.size() == 1) {
+        Cell<?, ?, ?> thatCell = that.cellSet().iterator().next();
+        return Objects.equal(this.singleRowKey, thatCell.getRowKey()) &&
+            Objects.equal(this.singleColumnKey, thatCell.getColumnKey()) &&
+            Objects.equal(this.singleValue, thatCell.getValue());
+      }
+    }
+    return false;
+  }
+
+  @Override public int hashCode() {
+    return Objects.hashCode(singleRowKey, singleColumnKey, singleValue);
+  }
+
+  @Override public String toString() {
+    return new StringBuilder()
+        .append('{')
+        .append(singleRowKey)
+        .append("={")
+        .append(singleColumnKey)
+        .append('=')
+        .append(singleValue)
+        .append("}}")
+        .toString();
+  }
+}
diff --git a/guava/src/com/google/common/collect/SortedIterable.java b/guava/src/com/google/common/collect/SortedIterable.java
new file mode 100644
index 0000000..e859114
--- /dev/null
+++ b/guava/src/com/google/common/collect/SortedIterable.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Comparator;
+import java.util.Iterator;
+
+/**
+ * An {@code Iterable} whose elements are sorted relative to a {@code Comparator}, typically
+ * provided at creation time.
+ *
+ * @author Louis Wasserman
+ */
+@GwtCompatible
+interface SortedIterable<T> extends Iterable<T> {
+  /**
+   * Returns the {@code Comparator} by which the elements of this iterable are ordered, or {@code
+   * Ordering.natural()} if the elements are ordered by their natural ordering.
+   */
+  Comparator<? super T> comparator();
+
+  /**
+   * Returns an iterator over elements of type {@code T}. The elements are returned in
+   * nondecreasing order according to the associated {@link #comparator}.
+   */
+  @Override
+  Iterator<T> iterator();
+}
diff --git a/guava/src/com/google/common/collect/SortedIterables.java b/guava/src/com/google/common/collect/SortedIterables.java
new file mode 100644
index 0000000..8089b10
--- /dev/null
+++ b/guava/src/com/google/common/collect/SortedIterables.java
@@ -0,0 +1,195 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Function;
+import com.google.common.collect.Multiset.Entry;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+import java.util.SortedSet;
+
+/**
+ * Utilities for dealing with sorted collections of all types.
+ *
+ * @author Louis Wasserman
+ */
+@GwtCompatible
+final class SortedIterables {
+  private SortedIterables() {}
+
+  /**
+   * Returns {@code true} if {@code elements} is a sorted collection using an ordering equivalent
+   * to {@code comparator}.
+   */
+  public static boolean hasSameComparator(Comparator<?> comparator, Iterable<?> elements) {
+    checkNotNull(comparator);
+    checkNotNull(elements);
+    Comparator<?> comparator2;
+    if (elements instanceof SortedSet) {
+      SortedSet<?> sortedSet = (SortedSet<?>) elements;
+      comparator2 = sortedSet.comparator();
+      if (comparator2 == null) {
+        comparator2 = (Comparator) Ordering.natural();
+      }
+    } else if (elements instanceof SortedIterable) {
+      comparator2 = ((SortedIterable<?>) elements).comparator();
+    } else {
+      comparator2 = null;
+    }
+    return comparator.equals(comparator2);
+  }
+
+  /**
+   * Returns a sorted collection of the unique elements according to the specified comparator.  Does
+   * not check for null.
+   */
+  @SuppressWarnings("unchecked")
+  public static <E> Collection<E> sortedUnique(
+      Comparator<? super E> comparator, Iterator<E> elements) {
+    SortedSet<E> sortedSet = Sets.newTreeSet(comparator);
+    Iterators.addAll(sortedSet, elements);
+    return sortedSet;
+  }
+
+  /**
+   * Returns a sorted collection of the unique elements according to the specified comparator. Does
+   * not check for null.
+   */
+  @SuppressWarnings("unchecked")
+  public static <E> Collection<E> sortedUnique(
+      Comparator<? super E> comparator, Iterable<E> elements) {
+    if (elements instanceof Multiset) {
+      elements = ((Multiset<E>) elements).elementSet();
+    }
+    if (elements instanceof Set) {
+      if (hasSameComparator(comparator, elements)) {
+        return (Set<E>) elements;
+      }
+      List<E> list = Lists.newArrayList(elements);
+      Collections.sort(list, comparator);
+      return list;
+    }
+    E[] array = (E[]) Iterables.toArray(elements);
+    if (!hasSameComparator(comparator, elements)) {
+      Arrays.sort(array, comparator);
+    }
+    return uniquifySortedArray(comparator, array);
+  }
+
+  private static <E> Collection<E> uniquifySortedArray(
+      Comparator<? super E> comparator, E[] array) {
+    if (array.length == 0) {
+      return Collections.emptySet();
+    }
+    int length = 1;
+    for (int i = 1; i < array.length; i++) {
+      int cmp = comparator.compare(array[i], array[length - 1]);
+      if (cmp != 0) {
+        array[length++] = array[i];
+      }
+    }
+    if (length < array.length) {
+      array = ObjectArrays.arraysCopyOf(array, length);
+    }
+    return Arrays.asList(array);
+  }
+
+  /**
+   * Returns a collection of multiset entries representing the counts of the distinct elements, in
+   * sorted order. Does not check for null.
+   */
+  public static <E> Collection<Multiset.Entry<E>> sortedCounts(
+      Comparator<? super E> comparator, Iterator<E> elements) {
+    TreeMultiset<E> multiset = TreeMultiset.create(comparator);
+    Iterators.addAll(multiset, elements);
+    return multiset.entrySet();
+  }
+  
+  /**
+   * Returns a collection of multiset entries representing the counts of the distinct elements, in
+   * sorted order. Does not check for null.
+   */
+  public static <E> Collection<Multiset.Entry<E>> sortedCounts(
+      Comparator<? super E> comparator, Iterable<E> elements) {
+    if (elements instanceof Multiset) {
+      Multiset<E> multiset = (Multiset<E>) elements;
+      if (hasSameComparator(comparator, elements)) {
+        return multiset.entrySet();
+      }
+      List<Multiset.Entry<E>> entries = Lists.newArrayList(multiset.entrySet());
+      Collections.sort(
+          entries, Ordering.from(comparator).onResultOf(new Function<Multiset.Entry<E>, E>() {
+            @Override
+            public E apply(Entry<E> entry) {
+              return entry.getElement();
+            }
+          }));
+      return entries;
+    } else if (elements instanceof Set) { // known distinct
+      Collection<E> sortedElements;
+      if (hasSameComparator(comparator, elements)) {
+        sortedElements = (Collection<E>) elements;
+      } else {
+        List<E> list = Lists.newArrayList(elements);
+        Collections.sort(list, comparator);
+        sortedElements = list;
+      }
+      return singletonEntries(sortedElements);
+    } else if (hasSameComparator(comparator, elements)) {
+      E current = null;
+      int currentCount = 0;
+      List<Multiset.Entry<E>> sortedEntries = Lists.newArrayList();
+      for (E e : elements) {
+        if (currentCount > 0) {
+          if (comparator.compare(current, e) == 0) {
+            currentCount++;
+          } else {
+            sortedEntries.add(Multisets.immutableEntry(current, currentCount));
+            current = e;
+            currentCount = 1;
+          }
+        } else {
+          current = e;
+          currentCount = 1;
+        }
+      }
+      if (currentCount > 0) {
+        sortedEntries.add(Multisets.immutableEntry(current, currentCount));
+      }
+      return sortedEntries;
+    }
+    TreeMultiset<E> multiset = TreeMultiset.create(comparator);
+    Iterables.addAll(multiset, elements);
+    return multiset.entrySet();
+  }
+
+  static <E> Collection<Multiset.Entry<E>> singletonEntries(Collection<E> set) {
+    return Collections2.transform(set, new Function<E, Multiset.Entry<E>>() {
+      @Override
+      public Entry<E> apply(E elem) {
+        return Multisets.immutableEntry(elem, 1);
+      }
+    });
+  }
+}
diff --git a/guava/src/com/google/common/collect/SortedLists.java b/guava/src/com/google/common/collect/SortedLists.java
new file mode 100644
index 0000000..afcec59
--- /dev/null
+++ b/guava/src/com/google/common/collect/SortedLists.java
@@ -0,0 +1,284 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Function;
+
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.RandomAccess;
+
+import javax.annotation.Nullable;
+
+/**
+ * Static methods pertaining to sorted {@link List} instances.
+ *
+ * In this documentation, the terms <i>greatest</i>, <i>greater</i>, <i>least</i>, and
+ * <i>lesser</i> are considered to refer to the comparator on the elements, and the terms
+ * <i>first</i> and <i>last</i> are considered to refer to the elements' ordering in a
+ * list.
+ *
+ * @author Louis Wasserman
+ */
+@GwtCompatible
+@Beta final class SortedLists {
+  private SortedLists() {}
+
+  /**
+   * A specification for which index to return if the list contains at least one element that
+   * compares as equal to the key.
+   */
+  public enum KeyPresentBehavior {
+    /**
+     * Return the index of any list element that compares as equal to the key. No guarantees are
+     * made as to which index is returned, if more than one element compares as equal to the key.
+     */
+    ANY_PRESENT {
+      @Override
+      <E> int resultIndex(
+          Comparator<? super E> comparator, E key, List<? extends E> list, int foundIndex) {
+        return foundIndex;
+      }
+    },
+    /**
+     * Return the index of the last list element that compares as equal to the key.
+     */
+    LAST_PRESENT {
+      @Override
+      <E> int resultIndex(
+          Comparator<? super E> comparator, E key, List<? extends E> list, int foundIndex) {
+        // Of course, we have to use binary search to find the precise
+        // breakpoint...
+        int lower = foundIndex;
+        int upper = list.size() - 1;
+        // Everything between lower and upper inclusive compares at >= 0.
+        while (lower < upper) {
+          int middle = (lower + upper + 1) >>> 1;
+          int c = comparator.compare(list.get(middle), key);
+          if (c > 0) {
+            upper = middle - 1;
+          } else { // c == 0
+            lower = middle;
+          }
+        }
+        return lower;
+      }
+    },
+    /**
+     * Return the index of the first list element that compares as equal to the key.
+     */
+    FIRST_PRESENT {
+      @Override
+      <E> int resultIndex(
+          Comparator<? super E> comparator, E key, List<? extends E> list, int foundIndex) {
+        // Of course, we have to use binary search to find the precise
+        // breakpoint...
+        int lower = 0;
+        int upper = foundIndex;
+        // Of course, we have to use binary search to find the precise breakpoint...
+        // Everything between lower and upper inclusive compares at <= 0.
+        while (lower < upper) {
+          int middle = (lower + upper) >>> 1;
+          int c = comparator.compare(list.get(middle), key);
+          if (c < 0) {
+            lower = middle + 1;
+          } else { // c == 0
+            upper = middle;
+          }
+        }
+        return lower;
+      }
+    },
+    /**
+     * Return the index of the first list element that compares as greater than the key, or {@code
+     * list.size()} if there is no such element.
+     */
+    FIRST_AFTER {
+      @Override
+      public <E> int resultIndex(
+          Comparator<? super E> comparator, E key, List<? extends E> list, int foundIndex) {
+        return LAST_PRESENT.resultIndex(comparator, key, list, foundIndex) + 1;
+      }
+    },
+    /**
+     * Return the index of the last list element that compares as less than the key, or {@code -1}
+     * if there is no such element.
+     */
+    LAST_BEFORE {
+      @Override
+      public <E> int resultIndex(
+          Comparator<? super E> comparator, E key, List<? extends E> list, int foundIndex) {
+        return FIRST_PRESENT.resultIndex(comparator, key, list, foundIndex) - 1;
+      }
+    };
+    abstract <E> int resultIndex(
+        Comparator<? super E> comparator, E key, List<? extends E> list, int foundIndex);
+  }
+
+  /**
+   * A specification for which index to return if the list contains no elements that compare as
+   * equal to the key.
+   */
+  public enum KeyAbsentBehavior {
+    /**
+     * Return the index of the next lower element in the list, or {@code -1} if there is no such
+     * element.
+     */
+    NEXT_LOWER {
+      @Override
+      <E> int resultIndex(int higherIndex) {
+        return higherIndex - 1;
+      }
+    },
+    /**
+     * Return the index of the next higher element in the list, or {@code list.size()} if there is
+     * no such element.
+     */
+    NEXT_HIGHER {
+      @Override
+      public <E> int resultIndex(int higherIndex) {
+        return higherIndex;
+      }
+    },
+    /**
+     * Return {@code ~insertionIndex}, where {@code insertionIndex} is defined as the point at
+     * which the key would be inserted into the list: the index of the next higher element in the
+     * list, or {@code list.size()} if there is no such element.
+     *
+     * <p>Note that the return value will be {@code >= 0} if and only if there is an element of the
+     * list that compares as equal to the key.
+     *
+     * <p>This is equivalent to the behavior of
+     * {@link java.util.Collections#binarySearch(List, Object)} when the key isn't present, since
+     * {@code ~insertionIndex} is equal to {@code -1 - insertionIndex}.
+     */
+    INVERTED_INSERTION_INDEX {
+      @Override
+      public <E> int resultIndex(int higherIndex) {
+        return ~higherIndex;
+      }
+    };
+
+    abstract <E> int resultIndex(int higherIndex);
+  }
+
+  /**
+   * Searches the specified naturally ordered list for the specified object using the binary search
+   * algorithm.
+   *
+   * <p>Equivalent to {@link #binarySearch(List, Function, Object, Comparator, KeyPresentBehavior,
+   * KeyAbsentBehavior)} using {@link Ordering#natural}.
+   */
+  public static <E extends Comparable> int binarySearch(List<? extends E> list, E e,
+      KeyPresentBehavior presentBehavior, KeyAbsentBehavior absentBehavior) {
+    checkNotNull(e);
+    return binarySearch(
+        list, checkNotNull(e), Ordering.natural(), presentBehavior, absentBehavior);
+  }
+
+  /**
+   * Binary searches the list for the specified key, using the specified key function.
+   *
+   * <p>Equivalent to {@link #binarySearch(List, Function, Object, Comparator, KeyPresentBehavior,
+   * KeyAbsentBehavior)} using {@link Ordering#natural}.
+   */
+  public static <E, K extends Comparable> int binarySearch(List<E> list,
+      Function<? super E, K> keyFunction, K key, KeyPresentBehavior presentBehavior,
+      KeyAbsentBehavior absentBehavior) {
+    return binarySearch(
+        list,
+        keyFunction,
+        key,
+        Ordering.natural(),
+        presentBehavior,
+        absentBehavior);
+  }
+
+  /**
+   * Binary searches the list for the specified key, using the specified key function.
+   *
+   * <p>Equivalent to
+   * {@link #binarySearch(List, Object, Comparator, KeyPresentBehavior, KeyAbsentBehavior)} using
+   * {@link Lists#transform(List, Function) Lists.transform(list, keyFunction)}.
+   */
+  public static <E, K> int binarySearch(
+      List<E> list,
+      Function<? super E, K> keyFunction,
+      K key,
+      Comparator<? super K> keyComparator,
+      KeyPresentBehavior presentBehavior,
+      KeyAbsentBehavior absentBehavior) {
+    return binarySearch(
+        Lists.transform(list, keyFunction), key, keyComparator, presentBehavior, absentBehavior);
+  }
+
+  /**
+   * Searches the specified list for the specified object using the binary search algorithm. The
+   * list must be sorted into ascending order according to the specified comparator (as by the
+   * {@link Collections#sort(List, Comparator) Collections.sort(List, Comparator)} method), prior
+   * to making this call. If it is not sorted, the results are undefined.
+   *
+   * <p>If there are elements in the list which compare as equal to the key, the choice of
+   * {@link KeyPresentBehavior} decides which index is returned. If no elements compare as equal to
+   * the key, the choice of {@link KeyAbsentBehavior} decides which index is returned.
+   *
+   * <p>This method runs in log(n) time on random-access lists, which offer near-constant-time
+   * access to each list element.
+   *
+   * @param list the list to be searched.
+   * @param key the value to be searched for.
+   * @param comparator the comparator by which the list is ordered.
+   * @param presentBehavior the specification for what to do if at least one element of the list
+   *        compares as equal to the key.
+   * @param absentBehavior the specification for what to do if no elements of the list compare as
+   *        equal to the key.
+   * @return the index determined by the {@code KeyPresentBehavior}, if the key is in the list;
+   *         otherwise the index determined by the {@code KeyAbsentBehavior}.
+   */
+  public static <E> int binarySearch(List<? extends E> list, @Nullable E key,
+      Comparator<? super E> comparator, KeyPresentBehavior presentBehavior,
+      KeyAbsentBehavior absentBehavior) {
+    checkNotNull(comparator);
+    checkNotNull(list);
+    checkNotNull(presentBehavior);
+    checkNotNull(absentBehavior);
+    if (!(list instanceof RandomAccess)) {
+      list = Lists.newArrayList(list);
+    }
+    // TODO(user): benchmark when it's best to do a linear search
+
+    int lower = 0;
+    int upper = list.size() - 1;
+
+    while (lower <= upper) {
+      int middle = (lower + upper) >>> 1;
+      int c = comparator.compare(key, list.get(middle));
+      if (c < 0) {
+        upper = middle - 1;
+      } else if (c > 0) {
+        lower = middle + 1;
+      } else {
+        return lower + presentBehavior.resultIndex(
+            comparator, key, list.subList(lower, upper + 1), middle - lower);
+      }
+    }
+    return absentBehavior.resultIndex(lower);
+  }
+}
diff --git a/guava/src/com/google/common/collect/SortedMapDifference.java b/guava/src/com/google/common/collect/SortedMapDifference.java
new file mode 100644
index 0000000..f44aa1a
--- /dev/null
+++ b/guava/src/com/google/common/collect/SortedMapDifference.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.SortedMap;
+
+/**
+ * An object representing the differences between two sorted maps.
+ *
+ * @author Louis Wasserman
+ * @since 8.0
+ */
+@Beta
+@GwtCompatible
+public interface SortedMapDifference<K, V> extends MapDifference<K, V> {
+
+  @Override
+  SortedMap<K, V> entriesOnlyOnLeft();
+
+  @Override
+  SortedMap<K, V> entriesOnlyOnRight();
+
+  @Override
+  SortedMap<K, V> entriesInCommon();
+
+  @Override
+  SortedMap<K, ValueDifference<V>> entriesDiffering();
+}
diff --git a/guava/src/com/google/common/collect/SortedMaps.java b/guava/src/com/google/common/collect/SortedMaps.java
new file mode 100644
index 0000000..0055cbd
--- /dev/null
+++ b/guava/src/com/google/common/collect/SortedMaps.java
@@ -0,0 +1,374 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.util.Comparator;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.SortedMap;
+
+import javax.annotation.Nullable;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.base.Function;
+import com.google.common.base.Predicate;
+import com.google.common.base.Predicates;
+import com.google.common.collect.Maps.EntryTransformer;
+
+/**
+ * Static utility methods pertaining to {@link SortedMap} instances.
+ *
+ * @author Louis Wasserman
+ * @since 8.0
+ * @deprecated Use the identical methods in {@link Maps}. This class is
+ *             scheduled for deletion from Guava in Guava release 12.0.
+ */
+@Beta
+@Deprecated
+@GwtCompatible
+public final class SortedMaps {
+  private SortedMaps() {}
+
+  /**
+   * Returns a view of a sorted map where each value is transformed by a
+   * function. All other properties of the map, such as iteration order, are
+   * left intact. For example, the code: <pre>   {@code
+   *
+   *   SortedMap<String, Integer> map = ImmutableSortedMap.of("a", 4, "b", 9);
+   *   Function<Integer, Double> sqrt =
+   *       new Function<Integer, Double>() {
+   *         public Double apply(Integer in) {
+   *           return Math.sqrt((int) in);
+   *         }
+   *       };
+   *   SortedMap<String, Double> transformed =
+   *        Maps.transformSortedValues(map, sqrt);
+   *   System.out.println(transformed);}</pre>
+   *
+   * ... prints {@code {a=2.0, b=3.0}}.
+   *
+   * <p>Changes in the underlying map are reflected in this view. Conversely,
+   * this view supports removal operations, and these are reflected in the
+   * underlying map.
+   *
+   * <p>It's acceptable for the underlying map to contain null keys, and even
+   * null values provided that the function is capable of accepting null input.
+   * The transformed map might contain null values, if the function sometimes
+   * gives a null result.
+   *
+   * <p>The returned map is not thread-safe or serializable, even if the
+   * underlying map is.
+   *
+   * <p>The function is applied lazily, invoked when needed. This is necessary
+   * for the returned map to be a view, but it means that the function will be
+   * applied many times for bulk operations like {@link Map#containsValue} and
+   * {@code Map.toString()}. For this to perform well, {@code function} should
+   * be fast. To avoid lazy evaluation when the returned map doesn't need to be
+   * a view, copy the returned map into a new map of your choosing.
+   *
+   * @deprecated Use {@link Maps#transformValues(SortedMap, Function)}
+   */
+  @Deprecated public static <K, V1, V2> SortedMap<K, V2> transformValues(
+      SortedMap<K, V1> fromMap, final Function<? super V1, V2> function) {
+    return Maps.transformValues(fromMap, function);
+  }
+
+  /**
+   * Returns a view of a sorted map whose values are derived from the original
+   * sorted map's entries. In contrast to {@link #transformValues}, this
+   * method's entry-transformation logic may depend on the key as well as the
+   * value.
+   *
+   * <p>All other properties of the transformed map, such as iteration order,
+   * are left intact. For example, the code: <pre>   {@code
+   *
+   *   Map<String, Boolean> options =
+   *       ImmutableSortedMap.of("verbose", true, "sort", false);
+   *   EntryTransformer<String, Boolean, String> flagPrefixer =
+   *       new EntryTransformer<String, Boolean, String>() {
+   *         public String transformEntry(String key, Boolean value) {
+   *           return value ? key : "yes" + key;
+   *         }
+   *       };
+   *   SortedMap<String, String> transformed =
+   *       LabsMaps.transformSortedEntries(options, flagPrefixer);
+   *   System.out.println(transformed);}</pre>
+   *
+   * ... prints {@code {sort=yessort, verbose=verbose}}.
+   *
+   * <p>Changes in the underlying map are reflected in this view. Conversely,
+   * this view supports removal operations, and these are reflected in the
+   * underlying map.
+   *
+   * <p>It's acceptable for the underlying map to contain null keys and null
+   * values provided that the transformer is capable of accepting null inputs.
+   * The transformed map might contain null values if the transformer sometimes
+   * gives a null result.
+   *
+   * <p>The returned map is not thread-safe or serializable, even if the
+   * underlying map is.
+   *
+   * <p>The transformer is applied lazily, invoked when needed. This is
+   * necessary for the returned map to be a view, but it means that the
+   * transformer will be applied many times for bulk operations like {@link
+   * Map#containsValue} and {@link Object#toString}. For this to perform well,
+   * {@code transformer} should be fast. To avoid lazy evaluation when the
+   * returned map doesn't need to be a view, copy the returned map into a new
+   * map of your choosing.
+   *
+   * <p><b>Warning:</b> This method assumes that for any instance {@code k} of
+   * {@code EntryTransformer} key type {@code K}, {@code k.equals(k2)} implies
+   * that {@code k2} is also of type {@code K}. Using an {@code
+   * EntryTransformer} key type for which this may not hold, such as {@code
+   * ArrayList}, may risk a {@code ClassCastException} when calling methods on
+   * the transformed map.
+   *
+   * @deprecated Use {@link Maps#transformEntries(SortedMap, EntryTransformer)}
+   */
+  @Deprecated public static <K, V1, V2> SortedMap<K, V2> transformEntries(
+      final SortedMap<K, V1> fromMap,
+      EntryTransformer<? super K, ? super V1, V2> transformer) {
+    return Maps.transformEntries(fromMap, transformer);
+  }
+
+  /**
+   * Computes the difference between two sorted maps, using the comparator of
+   * the left map, or {@code Ordering.natural()} if the left map uses the
+   * natural ordering of its elements. This difference is an immutable snapshot
+   * of the state of the maps at the time this method is called. It will never
+   * change, even if the maps change at a later time.
+   *
+   * <p>Since this method uses {@code TreeMap} instances internally, the keys of
+   * the right map must all compare as distinct according to the comparator
+   * of the left map.
+   *
+   * <p><b>Note:</b>If you only need to know whether two sorted maps have the
+   * same mappings, call {@code left.equals(right)} instead of this method.
+   *
+   * @param left the map to treat as the "left" map for purposes of comparison
+   * @param right the map to treat as the "right" map for purposes of comparison
+   * @return the difference between the two maps
+   * @deprecated Use {@link Maps#difference(SortedMap, Map)}
+   */
+  @Deprecated public static <K, V> SortedMapDifference<K, V> difference(
+      SortedMap<K, ? extends V> left, Map<? extends K, ? extends V> right) {
+    return Maps.difference(left, right);
+  }
+
+  /**
+   * Returns the specified comparator if not null; otherwise returns {@code
+   * Ordering.natural()}. This method is an abomination of generics; the only
+   * purpose of this method is to contain the ugly type-casting in one place.
+   */
+  @SuppressWarnings("unchecked")
+  static <E> Comparator<? super E> orNaturalOrder(
+      @Nullable Comparator<? super E> comparator) {
+    if (comparator != null) { // can't use ? : because of javac bug 5080917
+      return comparator;
+    }
+    return (Comparator<E>) Ordering.natural();
+  }
+
+  /**
+   * Returns a sorted map containing the mappings in {@code unfiltered} whose
+   * keys satisfy a predicate. The returned map is a live view of {@code
+   * unfiltered}; changes to one affect the other.
+   *
+   * <p>The resulting map's {@code keySet()}, {@code entrySet()}, and {@code
+   * values()} views have iterators that don't support {@code remove()}, but all
+   * other methods are supported by the map and its views. When given a key that
+   * doesn't satisfy the predicate, the map's {@code put()} and {@code putAll()}
+   * methods throw an {@link IllegalArgumentException}.
+   *
+   * <p>When methods such as {@code removeAll()} and {@code clear()} are called
+   * on the filtered map or its views, only mappings whose keys satisfy the
+   * filter will be removed from the underlying map.
+   *
+   * <p>The returned map isn't threadsafe or serializable, even if {@code
+   * unfiltered} is.
+   *
+   * <p>Many of the filtered map's methods, such as {@code size()},
+   * iterate across every key/value mapping in the underlying map and determine
+   * which satisfy the filter. When a live view is <i>not</i> needed, it may be
+   * faster to copy the filtered map and use the copy.
+   *
+   * <p><b>Warning:</b> {@code keyPredicate} must be <i>consistent with
+   * equals</i>, as documented at {@link Predicate#apply}. Do not provide a
+   * predicate such as {@code Predicates.instanceOf(ArrayList.class)}, which is
+   * inconsistent with equals.
+   */
+  @GwtIncompatible("untested")
+  public static <K, V> SortedMap<K, V> filterKeys(
+      SortedMap<K, V> unfiltered, final Predicate<? super K> keyPredicate) {
+    // TODO: Return a subclass of Maps.FilteredKeyMap for slightly better
+    // performance.
+    checkNotNull(keyPredicate);
+    Predicate<Entry<K, V>> entryPredicate = new Predicate<Entry<K, V>>() {
+      @Override
+      public boolean apply(Entry<K, V> input) {
+        return keyPredicate.apply(input.getKey());
+      }
+    };
+    return filterEntries(unfiltered, entryPredicate);
+  }
+
+  /**
+   * Returns a sorted map containing the mappings in {@code unfiltered} whose
+   * values satisfy a predicate. The returned map is a live view of {@code
+   * unfiltered}; changes to one affect the other.
+   *
+   * <p>The resulting map's {@code keySet()}, {@code entrySet()}, and {@code
+   * values()} views have iterators that don't support {@code remove()}, but all
+   * other methods are supported by the map and its views. When given a value
+   * that doesn't satisfy the predicate, the map's {@code put()}, {@code
+   * putAll()}, and {@link Entry#setValue} methods throw an {@link
+   * IllegalArgumentException}.
+   *
+   * <p>When methods such as {@code removeAll()} and {@code clear()} are called
+   * on the filtered map or its views, only mappings whose values satisfy the
+   * filter will be removed from the underlying map.
+   *
+   * <p>The returned map isn't threadsafe or serializable, even if {@code
+   * unfiltered} is.
+   *
+   * <p>Many of the filtered map's methods, such as {@code size()},
+   * iterate across every key/value mapping in the underlying map and determine
+   * which satisfy the filter. When a live view is <i>not</i> needed, it may be
+   * faster to copy the filtered map and use the copy.
+   *
+   * <p><b>Warning:</b> {@code valuePredicate} must be <i>consistent with
+   * equals</i>, as documented at {@link Predicate#apply}. Do not provide a
+   * predicate such as {@code Predicates.instanceOf(ArrayList.class)}, which is
+   * inconsistent with equals.
+   */
+  @GwtIncompatible("untested")
+  public static <K, V> SortedMap<K, V> filterValues(
+      SortedMap<K, V> unfiltered, final Predicate<? super V> valuePredicate) {
+    checkNotNull(valuePredicate);
+    Predicate<Entry<K, V>> entryPredicate =
+        new Predicate<Entry<K, V>>() {
+          @Override
+          public boolean apply(Entry<K, V> input) {
+            return valuePredicate.apply(input.getValue());
+          }
+        };
+    return filterEntries(unfiltered, entryPredicate);
+  }
+
+  /**
+   * Returns a sorted map containing the mappings in {@code unfiltered} that
+   * satisfy a predicate. The returned map is a live view of {@code unfiltered};
+   * changes to one affect the other.
+   *
+   * <p>The resulting map's {@code keySet()}, {@code entrySet()}, and {@code
+   * values()} views have iterators that don't support {@code remove()}, but all
+   * other methods are supported by the map and its views. When given a
+   * key/value pair that doesn't satisfy the predicate, the map's {@code put()}
+   * and {@code putAll()} methods throw an {@link IllegalArgumentException}.
+   * Similarly, the map's entries have a {@link Entry#setValue} method that
+   * throws an {@link IllegalArgumentException} when the existing key and the
+   * provided value don't satisfy the predicate.
+   *
+   * <p>When methods such as {@code removeAll()} and {@code clear()} are called
+   * on the filtered map or its views, only mappings that satisfy the filter
+   * will be removed from the underlying map.
+   *
+   * <p>The returned map isn't threadsafe or serializable, even if {@code
+   * unfiltered} is.
+   *
+   * <p>Many of the filtered map's methods, such as {@code size()},
+   * iterate across every key/value mapping in the underlying map and determine
+   * which satisfy the filter. When a live view is <i>not</i> needed, it may be
+   * faster to copy the filtered map and use the copy.
+   *
+   * <p><b>Warning:</b> {@code entryPredicate} must be <i>consistent with
+   * equals</i>, as documented at {@link Predicate#apply}.
+   */
+  @GwtIncompatible("untested")
+  public static <K, V> SortedMap<K, V> filterEntries(
+      SortedMap<K, V> unfiltered,
+      Predicate<? super Entry<K, V>> entryPredicate) {
+    checkNotNull(entryPredicate);
+    return (unfiltered instanceof FilteredSortedMap)
+        ? filterFiltered((FilteredSortedMap<K, V>) unfiltered, entryPredicate)
+        : new FilteredSortedMap<K, V>(checkNotNull(unfiltered), entryPredicate);
+  }
+
+  /**
+   * Support {@code clear()}, {@code removeAll()}, and {@code retainAll()} when
+   * filtering a filtered sorted map.
+   */
+  private static <K, V> SortedMap<K, V> filterFiltered(
+      FilteredSortedMap<K, V> map,
+      Predicate<? super Entry<K, V>> entryPredicate) {
+    Predicate<Entry<K, V>> predicate
+        = Predicates.and(map.predicate, entryPredicate);
+    return new FilteredSortedMap<K, V>(map.sortedMap(), predicate);
+  }
+
+  private static class FilteredSortedMap<K, V>
+      extends Maps.FilteredEntryMap<K, V> implements SortedMap<K, V> {
+
+    FilteredSortedMap(SortedMap<K, V> unfiltered,
+        Predicate<? super Entry<K, V>> entryPredicate) {
+      super(unfiltered, entryPredicate);
+    }
+
+    SortedMap<K, V> sortedMap() {
+      return (SortedMap<K, V>) unfiltered;
+    }
+
+    @Override public Comparator<? super K> comparator() {
+      return sortedMap().comparator();
+    }
+
+    @Override public K firstKey() {
+      // correctly throws NoSuchElementException when filtered map is empty.
+      return keySet().iterator().next();
+    }
+
+    @Override public K lastKey() {
+      SortedMap<K, V> headMap = sortedMap();
+      while (true) {
+        // correctly throws NoSuchElementException when filtered map is empty.
+        K key = headMap.lastKey();
+        if (apply(key, unfiltered.get(key))) {
+          return key;
+        }
+        headMap = sortedMap().headMap(key);
+      }
+    }
+
+    @Override public SortedMap<K, V> headMap(K toKey) {
+      return new FilteredSortedMap<K, V>(sortedMap().headMap(toKey), predicate);
+    }
+
+    @Override public SortedMap<K, V> subMap(K fromKey, K toKey) {
+      return new FilteredSortedMap<K, V>(
+          sortedMap().subMap(fromKey, toKey), predicate);
+    }
+
+    @Override public SortedMap<K, V> tailMap(K fromKey) {
+      return new FilteredSortedMap<K, V>(
+          sortedMap().tailMap(fromKey), predicate);
+    }
+  }
+}
diff --git a/guava/src/com/google/common/collect/SortedMultiset.java b/guava/src/com/google/common/collect/SortedMultiset.java
new file mode 100644
index 0000000..0713151
--- /dev/null
+++ b/guava/src/com/google/common/collect/SortedMultiset.java
@@ -0,0 +1,133 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ * 
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.SortedSet;
+
+/**
+ * A {@link Multiset} which maintains the ordering of its elements, according to
+ * either their natural order or an explicit {@link Comparator}. In all cases,
+ * this implementation uses {@link Comparable#compareTo} or
+ * {@link Comparator#compare} instead of {@link Object#equals} to determine
+ * equivalence of instances.
+ * 
+ * <p><b>Warning:</b> The comparison must be <i>consistent with equals</i> as
+ * explained by the {@link Comparable} class specification. Otherwise, the
+ * resulting multiset will violate the {@link Collection} contract, which it is
+ * specified in terms of {@link Object#equals}.
+ * 
+ * @author Louis Wasserman
+ * @since 11.0
+ */
+@Beta
+@GwtCompatible
+public interface SortedMultiset<E> extends Multiset<E>, SortedIterable<E> {
+  /**
+   * Returns the comparator that orders this multiset, or
+   * {@link Ordering#natural()} if the natural ordering of the elements is used.
+   */
+  Comparator<? super E> comparator();
+
+  /**
+   * Returns the entry of the first element in this multiset, or {@code null} if
+   * this multiset is empty.
+   */
+  Entry<E> firstEntry();
+
+  /**
+   * Returns the entry of the last element in this multiset, or {@code null} if
+   * this multiset is empty.
+   */
+  Entry<E> lastEntry();
+
+  /**
+   * Returns and removes the entry associated with the lowest element in this
+   * multiset, or returns {@code null} if this multiset is empty.
+   */
+  Entry<E> pollFirstEntry();
+
+  /**
+   * Returns and removes the entry associated with the greatest element in this
+   * multiset, or returns {@code null} if this multiset is empty.
+   */
+  Entry<E> pollLastEntry();
+
+  /**
+   * Returns a {@link SortedSet} view of the distinct elements in this multiset.
+   */
+  @Override SortedSet<E> elementSet();
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>The iterator returns the elements in ascending order according to this
+   * multiset's comparator.
+   */
+  @Override Iterator<E> iterator();
+
+  /**
+   * Returns a descending view of this multiset. Modifications made to either
+   * map will be reflected in the other.
+   */
+  SortedMultiset<E> descendingMultiset();
+
+  /**
+   * Returns a view of this multiset restricted to the elements less than
+   * {@code upperBound}, optionally including {@code upperBound} itself. The
+   * returned multiset is a view of this multiset, so changes to one will be
+   * reflected in the other. The returned multiset supports all operations that
+   * this multiset supports.
+   * 
+   * <p>The returned multiset will throw an {@link IllegalArgumentException} on
+   * attempts to add elements outside its range.
+   */
+  SortedMultiset<E> headMultiset(E upperBound, BoundType boundType);
+
+  /**
+   * Returns a view of this multiset restricted to the range between
+   * {@code lowerBound} and {@code upperBound}. The returned multiset is a view
+   * of this multiset, so changes to one will be reflected in the other. The
+   * returned multiset supports all operations that this multiset supports.
+   * 
+   * <p>The returned multiset will throw an {@link IllegalArgumentException} on
+   * attempts to add elements outside its range.
+   * 
+   * <p>This method is equivalent to
+   * {@code tailMultiset(lowerBound, lowerBoundType).headMultiset(upperBound,
+   * upperBoundType)}.
+   */
+  SortedMultiset<E> subMultiset(E lowerBound, BoundType lowerBoundType,
+      E upperBound, BoundType upperBoundType);
+
+  /**
+   * Returns a view of this multiset restricted to the elements greater than
+   * {@code lowerBound}, optionally including {@code lowerBound} itself. The
+   * returned multiset is a view of this multiset, so changes to one will be
+   * reflected in the other. The returned multiset supports all operations that
+   * this multiset supports.
+   * 
+   * <p>The returned multiset will throw an {@link IllegalArgumentException} on
+   * attempts to add elements outside its range.
+   */
+  SortedMultiset<E> tailMultiset(E lowerBound, BoundType boundType);
+}
diff --git a/guava/src/com/google/common/collect/SortedMultisets.java b/guava/src/com/google/common/collect/SortedMultisets.java
new file mode 100644
index 0000000..ff18b74
--- /dev/null
+++ b/guava/src/com/google/common/collect/SortedMultisets.java
@@ -0,0 +1,196 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ * 
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.collect.Multiset.Entry;
+
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+import java.util.Set;
+import java.util.SortedSet;
+
+/**
+ * Provides static utility methods for creating and working with
+ * {@link SortedMultiset} instances.
+ * 
+ * @author Louis Wasserman
+ */
+@GwtCompatible
+final class SortedMultisets {
+  private SortedMultisets() {
+  }
+
+  /**
+   * A skeleton implementation for {@link SortedMultiset#elementSet}.
+   */
+  static abstract class ElementSet<E> extends Multisets.ElementSet<E> implements
+      SortedSet<E> {
+    @Override abstract SortedMultiset<E> multiset();
+
+    @Override public Comparator<? super E> comparator() {
+      return multiset().comparator();
+    }
+
+    @Override public SortedSet<E> subSet(E fromElement, E toElement) {
+      return multiset().subMultiset(fromElement, BoundType.CLOSED, toElement,
+          BoundType.OPEN).elementSet();
+    }
+
+    @Override public SortedSet<E> headSet(E toElement) {
+      return multiset().headMultiset(toElement, BoundType.OPEN).elementSet();
+    }
+
+    @Override public SortedSet<E> tailSet(E fromElement) {
+      return multiset().tailMultiset(fromElement, BoundType.CLOSED)
+          .elementSet();
+    }
+
+    @Override public E first() {
+      return getElementOrThrow(multiset().firstEntry());
+    }
+
+    @Override public E last() {
+      return getElementOrThrow(multiset().lastEntry());
+    }
+  }
+
+  private static <E> E getElementOrThrow(Entry<E> entry) {
+    if (entry == null) {
+      throw new NoSuchElementException();
+    }
+    return entry.getElement();
+  }
+  
+  /**
+   * A skeleton implementation of a descending multiset.  Only needs
+   * {@code forwardMultiset()} and {@code entryIterator()}.
+   */
+  static abstract class DescendingMultiset<E> extends ForwardingMultiset<E>
+      implements SortedMultiset<E> {
+    abstract SortedMultiset<E> forwardMultiset();
+
+    private transient Comparator<? super E> comparator;
+
+    @Override public Comparator<? super E> comparator() {
+      Comparator<? super E> result = comparator;
+      if (result == null) {
+        return comparator =
+            Ordering.from(forwardMultiset().comparator()).<E>reverse();
+      }
+      return result;
+    }
+
+    private transient SortedSet<E> elementSet;
+
+    @Override public SortedSet<E> elementSet() {
+      SortedSet<E> result = elementSet;
+      if (result == null) {
+        return elementSet = new SortedMultisets.ElementSet<E>() {
+          @Override SortedMultiset<E> multiset() {
+            return DescendingMultiset.this;
+          }
+        };
+      }
+      return result;
+    }
+
+    @Override public Entry<E> pollFirstEntry() {
+      return forwardMultiset().pollLastEntry();
+    }
+
+    @Override public Entry<E> pollLastEntry() {
+      return forwardMultiset().pollFirstEntry();
+    }
+
+    @Override public SortedMultiset<E> headMultiset(E toElement,
+        BoundType boundType) {
+      return forwardMultiset().tailMultiset(toElement, boundType)
+          .descendingMultiset();
+    }
+
+    @Override public SortedMultiset<E> subMultiset(E fromElement,
+        BoundType fromBoundType, E toElement, BoundType toBoundType) {
+      return forwardMultiset().subMultiset(toElement, toBoundType, fromElement,
+          fromBoundType).descendingMultiset();
+    }
+
+    @Override public SortedMultiset<E> tailMultiset(E fromElement,
+        BoundType boundType) {
+      return forwardMultiset().headMultiset(fromElement, boundType)
+          .descendingMultiset();
+    }
+
+    @Override protected Multiset<E> delegate() {
+      return forwardMultiset();
+    }
+
+    @Override public SortedMultiset<E> descendingMultiset() {
+      return forwardMultiset();
+    }
+
+    @Override public Entry<E> firstEntry() {
+      return forwardMultiset().lastEntry();
+    }
+
+    @Override public Entry<E> lastEntry() {
+      return forwardMultiset().firstEntry();
+    }
+
+    abstract Iterator<Entry<E>> entryIterator();
+
+    private transient Set<Entry<E>> entrySet;
+
+    @Override public Set<Entry<E>> entrySet() {
+      Set<Entry<E>> result = entrySet;
+      return (result == null) ? entrySet = createEntrySet() : result;
+    }
+
+    Set<Entry<E>> createEntrySet() {
+      return new Multisets.EntrySet<E>() {
+        @Override Multiset<E> multiset() {
+          return DescendingMultiset.this;
+        }
+
+        @Override public Iterator<Entry<E>> iterator() {
+          return entryIterator();
+        }
+
+        @Override public int size() {
+          return forwardMultiset().entrySet().size();
+        }
+      };
+    }
+
+    @Override public Iterator<E> iterator() {
+      return Multisets.iteratorImpl(this);
+    }
+
+    @Override public Object[] toArray() {
+      return standardToArray();
+    }
+
+    @Override public <T> T[] toArray(T[] array) {
+      return standardToArray(array);
+    }
+
+    @Override public String toString() {
+      return entrySet().toString();
+    }
+  }
+}
diff --git a/guava/src/com/google/common/collect/SortedSetMultimap.java b/guava/src/com/google/common/collect/SortedSetMultimap.java
new file mode 100644
index 0000000..4785de3
--- /dev/null
+++ b/guava/src/com/google/common/collect/SortedSetMultimap.java
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.Map;
+import java.util.Set;
+import java.util.SortedSet;
+
+import javax.annotation.Nullable;
+
+/**
+ * A {@code SetMultimap} whose set of values for a given key are kept sorted;
+ * that is, they comprise a {@link SortedSet}. It cannot hold duplicate
+ * key-value pairs; adding a key-value pair that's already in the multimap has
+ * no effect. This interface does not specify the ordering of the multimap's
+ * keys.
+ *
+ * <p>The {@link #get}, {@link #removeAll}, and {@link #replaceValues} methods
+ * each return a {@link SortedSet} of values, while {@link Multimap#entries()}
+ * returns a {@link Set} of map entries. Though the method signature doesn't say
+ * so explicitly, the map returned by {@link #asMap} has {@code SortedSet}
+ * values.
+ *
+ * @author Jared Levy
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible
+public interface SortedSetMultimap<K, V> extends SetMultimap<K, V> {
+  // Following Javadoc copied from Multimap.
+
+  /**
+   * Returns a collection view of all values associated with a key. If no
+   * mappings in the multimap have the provided key, an empty collection is
+   * returned.
+   *
+   * <p>Changes to the returned collection will update the underlying multimap,
+   * and vice versa.
+   *
+   * <p>Because a {@code SortedSetMultimap} has unique sorted values for a given
+   * key, this method returns a {@link SortedSet}, instead of the
+   * {@link java.util.Collection} specified in the {@link Multimap} interface.
+   */
+  @Override
+  SortedSet<V> get(@Nullable K key);
+
+  /**
+   * Removes all values associated with a given key.
+   *
+   * <p>Because a {@code SortedSetMultimap} has unique sorted values for a given
+   * key, this method returns a {@link SortedSet}, instead of the
+   * {@link java.util.Collection} specified in the {@link Multimap} interface.
+   */
+  @Override
+  SortedSet<V> removeAll(@Nullable Object key);
+
+  /**
+   * Stores a collection of values with the same key, replacing any existing
+   * values for that key.
+   *
+   * <p>Because a {@code SortedSetMultimap} has unique sorted values for a given
+   * key, this method returns a {@link SortedSet}, instead of the
+   * {@link java.util.Collection} specified in the {@link Multimap} interface.
+   *
+   * <p>Any duplicates in {@code values} will be stored in the multimap once.
+   */
+  @Override
+  SortedSet<V> replaceValues(K key, Iterable<? extends V> values);
+
+  /**
+   * Returns a map view that associates each key with the corresponding values
+   * in the multimap. Changes to the returned map, such as element removal, will
+   * update the underlying multimap. The map does not support {@code setValue()}
+   * on its entries, {@code put}, or {@code putAll}.
+   *
+   * <p>When passed a key that is present in the map, {@code
+   * asMap().get(Object)} has the same behavior as {@link #get}, returning a
+   * live collection. When passed a key that is not present, however, {@code
+   * asMap().get(Object)} returns {@code null} instead of an empty collection.
+   *
+   * <p>Though the method signature doesn't say so explicitly, the returned map
+   * has {@link SortedSet} values.
+   */
+  @Override
+  Map<K, Collection<V>> asMap();
+
+  /**
+   * Returns the comparator that orders the multimap values, with {@code null}
+   * indicating that natural ordering is used.
+   */
+  Comparator<? super V> valueComparator();
+}
diff --git a/guava/src/com/google/common/collect/StandardRowSortedTable.java b/guava/src/com/google/common/collect/StandardRowSortedTable.java
new file mode 100644
index 0000000..fbc7518
--- /dev/null
+++ b/guava/src/com/google/common/collect/StandardRowSortedTable.java
@@ -0,0 +1,172 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Supplier;
+
+import java.util.Comparator;
+import java.util.Map;
+import java.util.Set;
+import java.util.SortedMap;
+import java.util.SortedSet;
+
+/**
+ * Implementation of {@code Table} whose iteration ordering across row keys is
+ * sorted by their natural ordering or by a supplied comparator. Note that
+ * iterations across the columns keys for a single row key may or may not be
+ * ordered, depending on the implementation. When rows and columns are both
+ * sorted, it's easier to use the {@link TreeBasedTable} subclass.
+ *
+ * <p>The {@link #rowKeySet} method returns a {@link SortedSet} and the {@link
+ * #rowMap} method returns a {@link SortedMap}, instead of the {@link Set} and
+ * {@link Map} specified by the {@link Table} interface.
+ *
+ * <p>Null keys and values are not supported.
+ *
+ * <p>See the {@link StandardTable} superclass for more information about the
+ * behavior of this class.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible
+class StandardRowSortedTable<R, C, V> extends StandardTable<R, C, V>
+    implements RowSortedTable<R, C, V> {
+  /*
+   * TODO(jlevy): Consider adding headTable, tailTable, and subTable methods,
+   * which return a Table view with rows keys in a given range. Create a
+   * RowSortedTable subinterface with the revised methods?
+   */
+
+  StandardRowSortedTable(SortedMap<R, Map<C, V>> backingMap,
+      Supplier<? extends Map<C, V>> factory) {
+    super(backingMap, factory);
+  }
+
+  private SortedMap<R, Map<C, V>> sortedBackingMap() {
+    return (SortedMap<R, Map<C, V>>) backingMap;
+  }
+
+  private transient SortedSet<R> rowKeySet;
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>This method returns a {@link SortedSet}, instead of the {@code Set}
+   * specified in the {@link Table} interface.
+   */
+  @Override public SortedSet<R> rowKeySet() {
+    SortedSet<R> result = rowKeySet;
+    return (result == null) ? rowKeySet = new RowKeySortedSet() : result;
+  }
+
+  private class RowKeySortedSet extends RowKeySet implements SortedSet<R> {
+    @Override
+    public Comparator<? super R> comparator() {
+      return sortedBackingMap().comparator();
+    }
+
+    @Override
+    public R first() {
+      return sortedBackingMap().firstKey();
+    }
+
+    @Override
+    public R last() {
+      return sortedBackingMap().lastKey();
+    }
+
+    @Override
+    public SortedSet<R> headSet(R toElement) {
+      checkNotNull(toElement);
+      return new StandardRowSortedTable<R, C, V>(
+          sortedBackingMap().headMap(toElement), factory).rowKeySet();
+    }
+
+    @Override
+    public SortedSet<R> subSet(R fromElement, R toElement) {
+      checkNotNull(fromElement);
+      checkNotNull(toElement);
+      return new StandardRowSortedTable<R, C, V>(
+          sortedBackingMap().subMap(fromElement, toElement), factory)
+          .rowKeySet();
+    }
+
+    @Override
+    public SortedSet<R> tailSet(R fromElement) {
+      checkNotNull(fromElement);
+      return new StandardRowSortedTable<R, C, V>(
+          sortedBackingMap().tailMap(fromElement), factory).rowKeySet();
+    }
+  }
+
+  private transient RowSortedMap rowMap;
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>This method returns a {@link SortedMap}, instead of the {@code Map}
+   * specified in the {@link Table} interface.
+   */
+  @Override public SortedMap<R, Map<C, V>> rowMap() {
+    RowSortedMap result = rowMap;
+    return (result == null) ? rowMap = new RowSortedMap() : result;
+  }
+
+  private class RowSortedMap extends RowMap implements SortedMap<R, Map<C, V>> {
+    @Override
+    public Comparator<? super R> comparator() {
+      return sortedBackingMap().comparator();
+    }
+
+    @Override
+    public R firstKey() {
+      return sortedBackingMap().firstKey();
+    }
+
+    @Override
+    public R lastKey() {
+      return sortedBackingMap().lastKey();
+    }
+
+    @Override
+    public SortedMap<R, Map<C, V>> headMap(R toKey) {
+      checkNotNull(toKey);
+      return new StandardRowSortedTable<R, C, V>(
+          sortedBackingMap().headMap(toKey), factory).rowMap();
+    }
+
+    @Override
+    public SortedMap<R, Map<C, V>> subMap(R fromKey, R toKey) {
+      checkNotNull(fromKey);
+      checkNotNull(toKey);
+      return new StandardRowSortedTable<R, C, V>(
+          sortedBackingMap().subMap(fromKey, toKey), factory).rowMap();
+    }
+
+    @Override
+    public SortedMap<R, Map<C, V>> tailMap(R fromKey) {
+      checkNotNull(fromKey);
+      return new StandardRowSortedTable<R, C, V>(
+          sortedBackingMap().tailMap(fromKey), factory).rowMap();
+    }
+  }
+
+  private static final long serialVersionUID = 0;
+}
diff --git a/guava/src/com/google/common/collect/StandardTable.java b/guava/src/com/google/common/collect/StandardTable.java
new file mode 100644
index 0000000..5edee5b
--- /dev/null
+++ b/guava/src/com/google/common/collect/StandardTable.java
@@ -0,0 +1,1198 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.collect.Maps.safeContainsKey;
+import static com.google.common.collect.Maps.safeGet;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Predicate;
+import com.google.common.base.Predicates;
+import com.google.common.base.Supplier;
+
+import java.io.Serializable;
+import java.util.AbstractCollection;
+import java.util.AbstractMap;
+import java.util.AbstractSet;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * {@link Table} implementation backed by a map that associates row keys with
+ * column key / value secondary maps. This class provides rapid access to
+ * records by the row key alone or by both keys, but not by just the column key.
+ *
+ * <p>The views returned by {@link #column}, {@link #columnKeySet()}, and {@link
+ * #columnMap()} have iterators that don't support {@code remove()}. Otherwise,
+ * all optional operations are supported. Null row keys, columns keys, and
+ * values are not supported.
+ *
+ * <p>Lookups by row key are often faster than lookups by column key, because
+ * the data is stored in a {@code Map<R, Map<C, V>>}. A method call like {@code
+ * column(columnKey).get(rowKey)} still runs quickly, since the row key is
+ * provided. However, {@code column(columnKey).size()} takes longer, since an
+ * iteration across all row keys occurs.
+ *
+ * <p>Note that this implementation is not synchronized. If multiple threads
+ * access this table concurrently and one of the threads modifies the table, it
+ * must be synchronized externally.
+ *
+ * @author Jared Levy
+ */
+@GwtCompatible
+class StandardTable<R, C, V> implements Table<R, C, V>, Serializable {
+  @GwtTransient final Map<R, Map<C, V>> backingMap;
+  @GwtTransient final Supplier<? extends Map<C, V>> factory;
+
+  StandardTable(Map<R, Map<C, V>> backingMap,
+      Supplier<? extends Map<C, V>> factory) {
+    this.backingMap = backingMap;
+    this.factory = factory;
+  }
+
+  // Accessors
+
+  @Override public boolean contains(
+      @Nullable Object rowKey, @Nullable Object columnKey) {
+    if ((rowKey == null) || (columnKey == null)) {
+      return false;
+    }
+    Map<C, V> map = safeGet(backingMap, rowKey);
+    return map != null && safeContainsKey(map, columnKey);
+  }
+
+  @Override public boolean containsColumn(@Nullable Object columnKey) {
+    if (columnKey == null) {
+      return false;
+    }
+    for (Map<C, V> map : backingMap.values()) {
+      if (safeContainsKey(map, columnKey)) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  @Override public boolean containsRow(@Nullable Object rowKey) {
+    return rowKey != null && safeContainsKey(backingMap, rowKey);
+  }
+
+  @Override public boolean containsValue(@Nullable Object value) {
+    if (value == null) {
+      return false;
+    }
+    for (Map<C, V> map : backingMap.values()) {
+      if (map.containsValue(value)) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  @Override public V get(@Nullable Object rowKey, @Nullable Object columnKey) {
+    if ((rowKey == null) || (columnKey == null)) {
+      return null;
+    }
+    Map<C, V> map = safeGet(backingMap, rowKey);
+    return map == null ? null : safeGet(map, columnKey);
+  }
+
+  @Override public boolean isEmpty() {
+    return backingMap.isEmpty();
+  }
+
+  @Override public int size() {
+    int size = 0;
+    for (Map<C, V> map : backingMap.values()) {
+      size += map.size();
+    }
+    return size;
+  }
+
+  @Override public boolean equals(@Nullable Object obj) {
+    if (obj == this) {
+      return true;
+    }
+    if (obj instanceof Table) {
+      Table<?, ?, ?> other = (Table<?, ?, ?>) obj;
+      return cellSet().equals(other.cellSet());
+    }
+    return false;
+  }
+
+  @Override public int hashCode() {
+    return cellSet().hashCode();
+  }
+
+  /**
+   * Returns the string representation {@code rowMap().toString()}.
+   */
+  @Override public String toString() {
+    return rowMap().toString();
+  }
+
+  // Mutators
+
+  @Override public void clear() {
+    backingMap.clear();
+  }
+
+  private Map<C, V> getOrCreate(R rowKey) {
+    Map<C, V> map = backingMap.get(rowKey);
+    if (map == null) {
+      map = factory.get();
+      backingMap.put(rowKey, map);
+    }
+    return map;
+  }
+
+  @Override public V put(R rowKey, C columnKey, V value) {
+    checkNotNull(rowKey);
+    checkNotNull(columnKey);
+    checkNotNull(value);
+    return getOrCreate(rowKey).put(columnKey, value);
+  }
+
+  @Override public void putAll(
+      Table<? extends R, ? extends C, ? extends V> table) {
+    for (Cell<? extends R, ? extends C, ? extends V> cell : table.cellSet()) {
+      put(cell.getRowKey(), cell.getColumnKey(), cell.getValue());
+    }
+  }
+
+  @Override public V remove(
+      @Nullable Object rowKey, @Nullable Object columnKey) {
+    if ((rowKey == null) || (columnKey == null)) {
+      return null;
+    }
+    Map<C, V> map = safeGet(backingMap, rowKey);
+    if (map == null) {
+      return null;
+    }
+    V value = map.remove(columnKey);
+    if (map.isEmpty()) {
+      backingMap.remove(rowKey);
+    }
+    return value;
+  }
+
+  private Map<R, V> removeColumn(Object column) {
+    Map<R, V> output = new LinkedHashMap<R, V>();
+    Iterator<Entry<R, Map<C, V>>> iterator
+        = backingMap.entrySet().iterator();
+    while (iterator.hasNext()) {
+      Entry<R, Map<C, V>> entry = iterator.next();
+      V value = entry.getValue().remove(column);
+      if (value != null) {
+        output.put(entry.getKey(), value);
+        if (entry.getValue().isEmpty()) {
+          iterator.remove();
+        }
+      }
+    }
+    return output;
+  }
+
+  private boolean containsMapping(
+      Object rowKey, Object columnKey, Object value) {
+    return value != null && value.equals(get(rowKey, columnKey));
+  }
+
+  /** Remove a row key / column key / value mapping, if present. */
+  private boolean removeMapping(Object rowKey, Object columnKey, Object value) {
+    if (containsMapping(rowKey, columnKey, value)) {
+      remove(rowKey, columnKey);
+      return true;
+    }
+    return false;
+  }
+
+  // Views
+
+  /**
+   * Abstract collection whose {@code isEmpty()} returns whether the table is
+   * empty and whose {@code clear()} clears all table mappings.
+   */
+  private abstract class TableCollection<T> extends AbstractCollection<T> {
+    @Override public boolean isEmpty() {
+      return backingMap.isEmpty();
+    }
+
+    @Override public void clear() {
+      backingMap.clear();
+    }
+  }
+
+  /**
+   * Abstract set whose {@code isEmpty()} returns whether the table is empty and
+   * whose {@code clear()} clears all table mappings.
+   */
+  private abstract class TableSet<T> extends AbstractSet<T> {
+    @Override public boolean isEmpty() {
+      return backingMap.isEmpty();
+    }
+
+    @Override public void clear() {
+      backingMap.clear();
+    }
+  }
+
+  private transient CellSet cellSet;
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>The set's iterator traverses the mappings for the first row, the
+   * mappings for the second row, and so on.
+   *
+   * <p>Each cell is an immutable snapshot of a row key / column key / value
+   * mapping, taken at the time the cell is returned by a method call to the
+   * set or its iterator.
+   */
+  @Override public Set<Cell<R, C, V>> cellSet() {
+    CellSet result = cellSet;
+    return (result == null) ? cellSet = new CellSet() : result;
+  }
+
+  private class CellSet extends TableSet<Cell<R, C, V>> {
+    @Override public Iterator<Cell<R, C, V>> iterator() {
+      return new CellIterator();
+    }
+
+    @Override public int size() {
+      return StandardTable.this.size();
+    }
+
+    @Override public boolean contains(Object obj) {
+      if (obj instanceof Cell) {
+        Cell<?, ?, ?> cell = (Cell<?, ?, ?>) obj;
+        return containsMapping(
+            cell.getRowKey(), cell.getColumnKey(), cell.getValue());
+      }
+      return false;
+    }
+
+    @Override public boolean remove(Object obj) {
+      if (obj instanceof Cell) {
+        Cell<?, ?, ?> cell = (Cell<?, ?, ?>) obj;
+        return removeMapping(
+            cell.getRowKey(), cell.getColumnKey(), cell.getValue());
+      }
+      return false;
+    }
+  }
+
+  private class CellIterator implements Iterator<Cell<R, C, V>> {
+    final Iterator<Entry<R, Map<C, V>>> rowIterator
+        = backingMap.entrySet().iterator();
+    Entry<R, Map<C, V>> rowEntry;
+    Iterator<Entry<C, V>> columnIterator
+        = Iterators.emptyModifiableIterator();
+
+    @Override public boolean hasNext() {
+      return rowIterator.hasNext() || columnIterator.hasNext();
+    }
+
+    @Override public Cell<R, C, V> next() {
+      if (!columnIterator.hasNext()) {
+        rowEntry = rowIterator.next();
+        columnIterator = rowEntry.getValue().entrySet().iterator();
+      }
+      Entry<C, V> columnEntry = columnIterator.next();
+      return Tables.immutableCell(
+          rowEntry.getKey(), columnEntry.getKey(), columnEntry.getValue());
+    }
+
+    @Override public void remove() {
+      columnIterator.remove();
+      if (rowEntry.getValue().isEmpty()) {
+        rowIterator.remove();
+      }
+    }
+  }
+
+  @Override public Map<C, V> row(R rowKey) {
+    return new Row(rowKey);
+  }
+
+  class Row extends AbstractMap<C, V> {
+    final R rowKey;
+
+    Row(R rowKey) {
+      this.rowKey = checkNotNull(rowKey);
+    }
+
+    Map<C, V> backingRowMap;
+
+    Map<C, V> backingRowMap() {
+      return (backingRowMap == null
+              || (backingRowMap.isEmpty() && backingMap.containsKey(rowKey)))
+          ? backingRowMap = computeBackingRowMap()
+          : backingRowMap;
+    }
+
+    Map<C, V> computeBackingRowMap() {
+      return backingMap.get(rowKey);
+    }
+
+    // Call this every time we perform a removal.
+    void maintainEmptyInvariant() {
+      if (backingRowMap() != null && backingRowMap.isEmpty()) {
+        backingMap.remove(rowKey);
+        backingRowMap = null;
+      }
+    }
+
+    @Override
+    public boolean containsKey(Object key) {
+      Map<C, V> backingRowMap = backingRowMap();
+      return (key != null && backingRowMap != null)
+          && Maps.safeContainsKey(backingRowMap, key);
+    }
+
+    @Override
+    public V get(Object key) {
+      Map<C, V> backingRowMap = backingRowMap();
+      return (key != null && backingRowMap != null)
+          ? Maps.safeGet(backingRowMap, key)
+          : null;
+    }
+
+    @Override
+    public V put(C key, V value) {
+      checkNotNull(key);
+      checkNotNull(value);
+      if (backingRowMap != null && !backingRowMap.isEmpty()) {
+        return backingRowMap.put(key, value);
+      }
+      return StandardTable.this.put(rowKey, key, value);
+    }
+
+    @Override
+    public V remove(Object key) {
+      try {
+        Map<C, V> backingRowMap = backingRowMap();
+        if (backingRowMap == null) {
+          return null;
+        }
+        V result = backingRowMap.remove(key);
+        maintainEmptyInvariant();
+        return result;
+      } catch (ClassCastException e) {
+        return null;
+      }
+    }
+
+    @Override
+    public void clear() {
+      Map<C, V> backingRowMap = backingRowMap();
+      if (backingRowMap != null) {
+        backingRowMap.clear();
+      }
+      maintainEmptyInvariant();
+    }
+
+    Set<C> keySet;
+
+    @Override
+    public Set<C> keySet() {
+      Set<C> result = keySet;
+      if (result == null) {
+        return keySet = new Maps.KeySet<C, V>() {
+          @Override
+          Map<C, V> map() {
+            return Row.this;
+          }
+        };
+      }
+      return result;
+    }
+
+    Set<Entry<C, V>> entrySet;
+
+    @Override
+    public Set<Entry<C, V>> entrySet() {
+      Set<Entry<C, V>> result = entrySet;
+      if (result == null) {
+        return entrySet = new RowEntrySet();
+      }
+      return result;
+    }
+
+    private class RowEntrySet extends Maps.EntrySet<C, V> {
+      @Override
+      Map<C, V> map() {
+        return Row.this;
+      }
+
+      @Override
+      public int size() {
+        Map<C, V> map = backingRowMap();
+        return (map == null) ? 0 : map.size();
+      }
+
+      @Override
+      public Iterator<Entry<C, V>> iterator() {
+        final Map<C, V> map = backingRowMap();
+        if (map == null) {
+          return Iterators.emptyModifiableIterator();
+        }
+        final Iterator<Entry<C, V>> iterator = map.entrySet().iterator();
+        return new Iterator<Entry<C, V>>() {
+          @Override public boolean hasNext() {
+            return iterator.hasNext();
+          }
+          @Override public Entry<C, V> next() {
+            final Entry<C, V> entry = iterator.next();
+            return new ForwardingMapEntry<C, V>() {
+              @Override protected Entry<C, V> delegate() {
+                return entry;
+              }
+              @Override public V setValue(V value) {
+                return super.setValue(checkNotNull(value));
+              }
+              @Override
+              public boolean equals(Object object) {
+                // TODO(user): identify why this affects GWT tests
+                return standardEquals(object);
+              }
+            };
+          }
+
+          @Override
+          public void remove() {
+            iterator.remove();
+            maintainEmptyInvariant();
+          }
+        };
+      }
+    }
+  }
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>The returned map's views have iterators that don't support
+   * {@code remove()}.
+   */
+  @Override public Map<R, V> column(C columnKey) {
+    return new Column(columnKey);
+  }
+
+  private class Column extends Maps.ImprovedAbstractMap<R, V> {
+    final C columnKey;
+
+    Column(C columnKey) {
+      this.columnKey = checkNotNull(columnKey);
+    }
+
+    @Override public V put(R key, V value) {
+      return StandardTable.this.put(key, columnKey, value);
+    }
+
+    @Override public V get(Object key) {
+      return StandardTable.this.get(key, columnKey);
+    }
+
+    @Override public boolean containsKey(Object key) {
+      return StandardTable.this.contains(key, columnKey);
+    }
+
+    @Override public V remove(Object key) {
+      return StandardTable.this.remove(key, columnKey);
+    }
+
+    @Override public Set<Entry<R, V>> createEntrySet() {
+      return new EntrySet();
+    }
+
+    Values columnValues;
+
+    @Override public Collection<V> values() {
+      Values result = columnValues;
+      return (result == null) ? columnValues = new Values() : result;
+    }
+
+    /**
+     * Removes all {@code Column} mappings whose row key and value satisfy the
+     * given predicate.
+     */
+    boolean removePredicate(Predicate<? super Entry<R, V>> predicate) {
+      boolean changed = false;
+      Iterator<Entry<R, Map<C, V>>> iterator
+          = backingMap.entrySet().iterator();
+      while (iterator.hasNext()) {
+        Entry<R, Map<C, V>> entry = iterator.next();
+        Map<C, V> map = entry.getValue();
+        V value = map.get(columnKey);
+        if (value != null
+            && predicate.apply(
+                new ImmutableEntry<R, V>(entry.getKey(), value))) {
+          map.remove(columnKey);
+          changed = true;
+          if (map.isEmpty()) {
+            iterator.remove();
+          }
+        }
+      }
+      return changed;
+    }
+
+    class EntrySet extends AbstractSet<Entry<R, V>> {
+      @Override public Iterator<Entry<R, V>> iterator() {
+        return new EntrySetIterator();
+      }
+
+      @Override public int size() {
+        int size = 0;
+        for (Map<C, V> map : backingMap.values()) {
+          if (map.containsKey(columnKey)) {
+            size++;
+          }
+        }
+        return size;
+      }
+
+      @Override public boolean isEmpty() {
+        return !containsColumn(columnKey);
+      }
+
+      @Override public void clear() {
+        Predicate<Entry<R, V>> predicate = Predicates.alwaysTrue();
+        removePredicate(predicate);
+      }
+
+      @Override public boolean contains(Object o) {
+        if (o instanceof Entry) {
+          Entry<?, ?> entry = (Entry<?, ?>) o;
+          return containsMapping(entry.getKey(), columnKey, entry.getValue());
+        }
+        return false;
+      }
+
+      @Override public boolean remove(Object obj) {
+        if (obj instanceof Entry) {
+          Entry<?, ?> entry = (Entry<?, ?>) obj;
+          return removeMapping(entry.getKey(), columnKey, entry.getValue());
+        }
+        return false;
+      }
+
+      @Override public boolean removeAll(Collection<?> c) {
+        boolean changed = false;
+        for (Object obj : c) {
+          changed |= remove(obj);
+        }
+        return changed;
+      }
+
+      @Override public boolean retainAll(Collection<?> c) {
+        return removePredicate(Predicates.not(Predicates.in(c)));
+      }
+    }
+
+    class EntrySetIterator extends AbstractIterator<Entry<R, V>> {
+      final Iterator<Entry<R, Map<C, V>>> iterator
+          = backingMap.entrySet().iterator();
+      @Override protected Entry<R, V> computeNext() {
+        while (iterator.hasNext()) {
+          final Entry<R, Map<C, V>> entry = iterator.next();
+          if (entry.getValue().containsKey(columnKey)) {
+            return new AbstractMapEntry<R, V>() {
+              @Override public R getKey() {
+                return entry.getKey();
+              }
+              @Override public V getValue() {
+                return entry.getValue().get(columnKey);
+              }
+              @Override public V setValue(V value) {
+                return entry.getValue().put(columnKey, checkNotNull(value));
+              }
+            };
+          }
+        }
+        return endOfData();
+      }
+    }
+
+    KeySet keySet;
+
+    @Override public Set<R> keySet() {
+      KeySet result = keySet;
+      return result == null ? keySet = new KeySet() : result;
+    }
+
+    class KeySet extends AbstractSet<R> {
+      @Override public Iterator<R> iterator() {
+        return keyIteratorImpl(Column.this);
+      }
+
+      @Override public int size() {
+        return entrySet().size();
+      }
+
+      @Override public boolean isEmpty() {
+        return !containsColumn(columnKey);
+      }
+
+      @Override public boolean contains(Object obj) {
+        return StandardTable.this.contains(obj, columnKey);
+      }
+
+      @Override public boolean remove(Object obj) {
+        return StandardTable.this.remove(obj, columnKey) != null;
+      }
+
+      @Override public void clear() {
+        entrySet().clear();
+      }
+
+      @Override public boolean removeAll(final Collection<?> c) {
+        boolean changed = false;
+        for (Object obj : c) {
+          changed |= remove(obj);
+        }
+        return changed;
+      }
+
+      @Override public boolean retainAll(final Collection<?> c) {
+        checkNotNull(c);
+        Predicate<Entry<R, V>> predicate = new Predicate<Entry<R, V>>() {
+          @Override
+          public boolean apply(Entry<R, V> entry) {
+            return !c.contains(entry.getKey());
+          }
+        };
+        return removePredicate(predicate);
+      }
+    }
+
+    class Values extends AbstractCollection<V> {
+      @Override public Iterator<V> iterator() {
+        return valueIteratorImpl(Column.this);
+      }
+
+      @Override public int size() {
+        return entrySet().size();
+      }
+
+      @Override public boolean isEmpty() {
+        return !containsColumn(columnKey);
+      }
+
+      @Override public void clear() {
+        entrySet().clear();
+      }
+
+      @Override public boolean remove(Object obj) {
+        if (obj == null) {
+          return false;
+        }
+        Iterator<Map<C, V>> iterator = backingMap.values().iterator();
+        while (iterator.hasNext()) {
+          Map<C, V> map = iterator.next();
+          if (map.entrySet().remove(
+              new ImmutableEntry<C, Object>(columnKey, obj))) {
+            if (map.isEmpty()) {
+              iterator.remove();
+            }
+            return true;
+          }
+        }
+        return false;
+      }
+
+      @Override public boolean removeAll(final Collection<?> c) {
+        checkNotNull(c);
+        Predicate<Entry<R, V>> predicate = new Predicate<Entry<R, V>>() {
+          @Override
+          public boolean apply(Entry<R, V> entry) {
+            return c.contains(entry.getValue());
+          }
+        };
+        return removePredicate(predicate);
+      }
+
+      @Override public boolean retainAll(final Collection<?> c) {
+        checkNotNull(c);
+        Predicate<Entry<R, V>> predicate = new Predicate<Entry<R, V>>() {
+          @Override
+          public boolean apply(Entry<R, V> entry) {
+            return !c.contains(entry.getValue());
+          }
+        };
+        return removePredicate(predicate);
+      }
+    }
+  }
+
+  private transient RowKeySet rowKeySet;
+
+  @Override public Set<R> rowKeySet() {
+    Set<R> result = rowKeySet;
+    return (result == null) ? rowKeySet = new RowKeySet() : result;
+  }
+
+  class RowKeySet extends TableSet<R> {
+    @Override public Iterator<R> iterator() {
+      return keyIteratorImpl(rowMap());
+    }
+
+    @Override public int size() {
+      return backingMap.size();
+    }
+
+    @Override public boolean contains(Object obj) {
+      return containsRow(obj);
+    }
+
+    @Override public boolean remove(Object obj) {
+      return (obj != null) && backingMap.remove(obj) != null;
+    }
+  }
+
+  private transient Set<C> columnKeySet;
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>The returned set has an iterator that does not support {@code remove()}.
+   *
+   * <p>The set's iterator traverses the columns of the first row, the
+   * columns of the second row, etc., skipping any columns that have
+   * appeared previously.
+   */
+  @Override
+  public Set<C> columnKeySet() {
+    Set<C> result = columnKeySet;
+    return (result == null) ? columnKeySet = new ColumnKeySet() : result;
+  }
+
+  private class ColumnKeySet extends TableSet<C> {
+    @Override public Iterator<C> iterator() {
+      return createColumnKeyIterator();
+    }
+
+    @Override public int size() {
+      return Iterators.size(iterator());
+    }
+
+    @Override public boolean remove(Object obj) {
+      if (obj == null) {
+        return false;
+      }
+      boolean changed = false;
+      Iterator<Map<C, V>> iterator = backingMap.values().iterator();
+      while (iterator.hasNext()) {
+        Map<C, V> map = iterator.next();
+        if (map.keySet().remove(obj)) {
+          changed = true;
+          if (map.isEmpty()) {
+            iterator.remove();
+          }
+        }
+      }
+      return changed;
+    }
+
+    @Override public boolean removeAll(Collection<?> c) {
+      checkNotNull(c);
+      boolean changed = false;
+      Iterator<Map<C, V>> iterator = backingMap.values().iterator();
+      while (iterator.hasNext()) {
+        Map<C, V> map = iterator.next();
+        // map.keySet().removeAll(c) can throw a NPE when map is a TreeMap with
+        // natural ordering and c contains a null.
+        if (Iterators.removeAll(map.keySet().iterator(), c)) {
+          changed = true;
+          if (map.isEmpty()) {
+            iterator.remove();
+          }
+        }
+      }
+      return changed;
+    }
+
+    @Override public boolean retainAll(Collection<?> c) {
+      checkNotNull(c);
+      boolean changed = false;
+      Iterator<Map<C, V>> iterator = backingMap.values().iterator();
+      while (iterator.hasNext()) {
+        Map<C, V> map = iterator.next();
+        if (map.keySet().retainAll(c)) {
+          changed = true;
+          if (map.isEmpty()) {
+            iterator.remove();
+          }
+        }
+      }
+      return changed;
+    }
+
+    @Override public boolean contains(Object obj) {
+      if (obj == null) {
+        return false;
+      }
+      for (Map<C, V> map : backingMap.values()) {
+        if (map.containsKey(obj)) {
+          return true;
+        }
+      }
+      return false;
+    }
+  }
+
+  /**
+   * Creates an iterator that returns each column value with duplicates
+   * omitted.
+   */
+  Iterator<C> createColumnKeyIterator() {
+    return new ColumnKeyIterator();
+  }
+
+  private class ColumnKeyIterator extends AbstractIterator<C> {
+    // Use the same map type to support TreeMaps with comparators that aren't
+    // consistent with equals().
+    final Map<C, V> seen = factory.get();
+    final Iterator<Map<C, V>> mapIterator = backingMap.values().iterator();
+    Iterator<Entry<C, V>> entryIterator = Iterators.emptyIterator();
+
+    @Override protected C computeNext() {
+      while (true) {
+        if (entryIterator.hasNext()) {
+          Entry<C, V> entry = entryIterator.next();
+          if (!seen.containsKey(entry.getKey())) {
+            seen.put(entry.getKey(), entry.getValue());
+            return entry.getKey();
+          }
+        } else if (mapIterator.hasNext()) {
+          entryIterator = mapIterator.next().entrySet().iterator();
+        } else {
+          return endOfData();
+        }
+      }
+    }
+  }
+
+  private transient Values values;
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>The collection's iterator traverses the values for the first row,
+   * the values for the second row, and so on.
+   */
+  @Override public Collection<V> values() {
+    Values result = values;
+    return (result == null) ? values = new Values() : result;
+  }
+
+  private class Values extends TableCollection<V> {
+    @Override public Iterator<V> iterator() {
+      final Iterator<Cell<R, C, V>> cellIterator = cellSet().iterator();
+      return new Iterator<V>() {
+        @Override public boolean hasNext() {
+          return cellIterator.hasNext();
+        }
+        @Override public V next() {
+          return cellIterator.next().getValue();
+        }
+        @Override public void remove() {
+          cellIterator.remove();
+        }
+      };
+    }
+
+    @Override public int size() {
+      return StandardTable.this.size();
+    }
+  }
+
+  private transient RowMap rowMap;
+
+  @Override public Map<R, Map<C, V>> rowMap() {
+    RowMap result = rowMap;
+    return (result == null) ? rowMap = new RowMap() : result;
+  }
+
+  class RowMap extends Maps.ImprovedAbstractMap<R, Map<C, V>> {
+    @Override public boolean containsKey(Object key) {
+      return containsRow(key);
+    }
+
+    // performing cast only when key is in backing map and has the correct type
+    @SuppressWarnings("unchecked")
+    @Override public Map<C, V> get(Object key) {
+      return containsRow(key) ? row((R) key) : null;
+    }
+
+    @Override public Set<R> keySet() {
+      return rowKeySet();
+    }
+
+    @Override public Map<C, V> remove(Object key) {
+      return (key == null) ? null : backingMap.remove(key);
+    }
+
+    @Override protected Set<Entry<R, Map<C, V>>> createEntrySet() {
+      return new EntrySet();
+    }
+
+    class EntrySet extends TableSet<Entry<R, Map<C, V>>> {
+      @Override public Iterator<Entry<R, Map<C, V>>> iterator() {
+        return new EntryIterator();
+      }
+
+      @Override public int size() {
+        return backingMap.size();
+      }
+
+      @Override public boolean contains(Object obj) {
+        if (obj instanceof Entry) {
+          Entry<?, ?> entry = (Entry<?, ?>) obj;
+          return entry.getKey() != null
+              && entry.getValue() instanceof Map
+              && Collections2.safeContains(backingMap.entrySet(), entry);
+        }
+        return false;
+      }
+
+      @Override public boolean remove(Object obj) {
+        if (obj instanceof Entry) {
+          Entry<?, ?> entry = (Entry<?, ?>) obj;
+          return entry.getKey() != null
+              && entry.getValue() instanceof Map
+              && backingMap.entrySet().remove(entry);
+        }
+        return false;
+      }
+    }
+
+    class EntryIterator implements Iterator<Entry<R, Map<C, V>>> {
+      final Iterator<R> delegate = backingMap.keySet().iterator();
+
+      @Override public boolean hasNext() {
+        return delegate.hasNext();
+      }
+
+      @Override public Entry<R, Map<C, V>> next() {
+        R rowKey = delegate.next();
+        return new ImmutableEntry<R, Map<C, V>>(rowKey, row(rowKey));
+      }
+
+      @Override public void remove() {
+        delegate.remove();
+      }
+    }
+  }
+
+  private transient ColumnMap columnMap;
+
+  @Override public Map<C, Map<R, V>> columnMap() {
+    ColumnMap result = columnMap;
+    return (result == null) ? columnMap = new ColumnMap() : result;
+  }
+
+  private class ColumnMap extends Maps.ImprovedAbstractMap<C, Map<R, V>> {
+    // The cast to C occurs only when the key is in the map, implying that it
+    // has the correct type.
+    @SuppressWarnings("unchecked")
+    @Override public Map<R, V> get(Object key) {
+      return containsColumn(key) ? column((C) key) : null;
+    }
+
+    @Override public boolean containsKey(Object key) {
+      return containsColumn(key);
+    }
+
+    @Override public Map<R, V> remove(Object key) {
+      return containsColumn(key) ? removeColumn(key) : null;
+    }
+
+    @Override public Set<Entry<C, Map<R, V>>> createEntrySet() {
+      return new ColumnMapEntrySet();
+    }
+
+    @Override public Set<C> keySet() {
+      return columnKeySet();
+    }
+
+    ColumnMapValues columnMapValues;
+
+    @Override public Collection<Map<R, V>> values() {
+      ColumnMapValues result = columnMapValues;
+      return
+          (result == null) ? columnMapValues = new ColumnMapValues() : result;
+    }
+
+    class ColumnMapEntrySet extends TableSet<Entry<C, Map<R, V>>> {
+      @Override public Iterator<Entry<C, Map<R, V>>> iterator() {
+        final Iterator<C> columnIterator = columnKeySet().iterator();
+        return new UnmodifiableIterator<Entry<C, Map<R, V>>>() {
+          @Override public boolean hasNext() {
+            return columnIterator.hasNext();
+          }
+          @Override public Entry<C, Map<R, V>> next() {
+            C columnKey = columnIterator.next();
+            return new ImmutableEntry<C, Map<R, V>>(
+                columnKey, column(columnKey));
+          }
+        };
+      }
+
+      @Override public int size() {
+        return columnKeySet().size();
+      }
+
+      @Override public boolean contains(Object obj) {
+        if (obj instanceof Entry) {
+          Entry<?, ?> entry = (Entry<?, ?>) obj;
+          if (containsColumn(entry.getKey())) {
+            // The cast to C occurs only when the key is in the map, implying
+            // that it has the correct type.
+            @SuppressWarnings("unchecked")
+            C columnKey = (C) entry.getKey();
+            return get(columnKey).equals(entry.getValue());
+          }
+        }
+        return false;
+      }
+
+      @Override public boolean remove(Object obj) {
+        if (contains(obj)) {
+          Entry<?, ?> entry = (Entry<?, ?>) obj;
+          removeColumn(entry.getKey());
+          return true;
+        }
+        return false;
+      }
+
+      @Override public boolean removeAll(Collection<?> c) {
+        boolean changed = false;
+        for (Object obj : c) {
+          changed |= remove(obj);
+        }
+        return changed;
+      }
+
+      @Override public boolean retainAll(Collection<?> c) {
+        boolean changed = false;
+        for (C columnKey : Lists.newArrayList(columnKeySet().iterator())) {
+          if (!c.contains(new ImmutableEntry<C, Map<R, V>>(
+              columnKey, column(columnKey)))) {
+            removeColumn(columnKey);
+            changed = true;
+          }
+        }
+        return changed;
+      }
+    }
+
+    private class ColumnMapValues extends TableCollection<Map<R, V>> {
+      @Override public Iterator<Map<R, V>> iterator() {
+        return valueIteratorImpl(ColumnMap.this);
+      }
+
+      @Override public boolean remove(Object obj) {
+        for (Entry<C, Map<R, V>> entry : ColumnMap.this.entrySet()) {
+          if (entry.getValue().equals(obj)) {
+            removeColumn(entry.getKey());
+            return true;
+          }
+        }
+        return false;
+      }
+
+      @Override public boolean removeAll(Collection<?> c) {
+        checkNotNull(c);
+        boolean changed = false;
+        for (C columnKey : Lists.newArrayList(columnKeySet().iterator())) {
+          if (c.contains(column(columnKey))) {
+            removeColumn(columnKey);
+            changed = true;
+          }
+        }
+        return changed;
+      }
+
+      @Override public boolean retainAll(Collection<?> c) {
+        checkNotNull(c);
+        boolean changed = false;
+        for (C columnKey : Lists.newArrayList(columnKeySet().iterator())) {
+          if (!c.contains(column(columnKey))) {
+            removeColumn(columnKey);
+            changed = true;
+          }
+        }
+        return changed;
+      }
+
+      @Override public int size() {
+        return columnKeySet().size();
+      }
+    }
+  }
+
+  private static final long serialVersionUID = 0;
+
+  // TODO(kevinb): Move keyIteratorImpl and valueIteratorImpl to Maps, reuse
+
+  /**
+   * Generates the iterator of a map's key set from the map's entry set
+   * iterator.
+   */
+  static <K, V> Iterator<K> keyIteratorImpl(Map<K, V> map) {
+    final Iterator<Entry<K, V>> entryIterator = map.entrySet().iterator();
+    return new Iterator<K>() {
+      @Override public boolean hasNext() {
+        return entryIterator.hasNext();
+      }
+      @Override public K next() {
+        return entryIterator.next().getKey();
+      }
+      @Override public void remove() {
+        entryIterator.remove();
+      }
+    };
+  }
+
+  /**
+   * Generates the iterator of a map's value collection from the map's entry set
+   * iterator.
+   */
+  static <K, V> Iterator<V> valueIteratorImpl(Map<K, V> map) {
+    final Iterator<Entry<K, V>> entryIterator = map.entrySet().iterator();
+    return new Iterator<V>() {
+      @Override public boolean hasNext() {
+        return entryIterator.hasNext();
+      }
+      @Override public V next() {
+        return entryIterator.next().getValue();
+      }
+      @Override public void remove() {
+        entryIterator.remove();
+      }
+    };
+  }
+}
diff --git a/guava/src/com/google/common/collect/Synchronized.java b/guava/src/com/google/common/collect/Synchronized.java
new file mode 100644
index 0000000..c021c55
--- /dev/null
+++ b/guava/src/com/google/common/collect/Synchronized.java
@@ -0,0 +1,1218 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.annotations.VisibleForTesting;
+
+import java.io.IOException;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Map;
+import java.util.RandomAccess;
+import java.util.Set;
+import java.util.SortedMap;
+import java.util.SortedSet;
+
+import javax.annotation.Nullable;
+
+/**
+ * Synchronized collection views. The returned synchronized collection views are
+ * serializable if the backing collection and the mutex are serializable.
+ *
+ * <p>If {@code null} is passed as the {@code mutex} parameter to any of this
+ * class's top-level methods or inner class constructors, the created object
+ * uses itself as the synchronization mutex.
+ *
+ * <p>This class should be used by other collection classes only.
+ *
+ * @author Mike Bostock
+ * @author Jared Levy
+ */
+@GwtCompatible(emulated = true)
+final class Synchronized {
+  private Synchronized() {}
+
+  static class SynchronizedObject implements Serializable {
+    final Object delegate;
+    final Object mutex;
+
+    SynchronizedObject(Object delegate, @Nullable Object mutex) {
+      this.delegate = checkNotNull(delegate);
+      this.mutex = (mutex == null) ? this : mutex;
+    }
+
+    Object delegate() {
+      return delegate;
+    }
+
+    // No equals and hashCode; see ForwardingObject for details.
+
+    @Override public String toString() {
+      synchronized (mutex) {
+        return delegate.toString();
+      }
+    }
+
+    // Serialization invokes writeObject only when it's private.
+    // The SynchronizedObject subclasses don't need a writeObject method since
+    // they don't contain any non-transient member variables, while the
+    // following writeObject() handles the SynchronizedObject members.
+
+    @GwtIncompatible("java.io.ObjectOutputStream")
+    private void writeObject(ObjectOutputStream stream) throws IOException {
+      synchronized (mutex) {
+        stream.defaultWriteObject();
+      }
+    }
+
+    @GwtIncompatible("not needed in emulated source")
+    private static final long serialVersionUID = 0;
+  }
+
+  private static <E> Collection<E> collection(
+      Collection<E> collection, @Nullable Object mutex) {
+    return new SynchronizedCollection<E>(collection, mutex);
+  }
+
+  @VisibleForTesting static class SynchronizedCollection<E>
+      extends SynchronizedObject implements Collection<E> {
+    private SynchronizedCollection(
+        Collection<E> delegate, @Nullable Object mutex) {
+      super(delegate, mutex);
+    }
+
+    @SuppressWarnings("unchecked")
+    @Override Collection<E> delegate() {
+      return (Collection<E>) super.delegate();
+    }
+
+    @Override
+    public boolean add(E e) {
+      synchronized (mutex) {
+        return delegate().add(e);
+      }
+    }
+
+    @Override
+    public boolean addAll(Collection<? extends E> c) {
+      synchronized (mutex) {
+        return delegate().addAll(c);
+      }
+    }
+
+    @Override
+    public void clear() {
+      synchronized (mutex) {
+        delegate().clear();
+      }
+    }
+
+    @Override
+    public boolean contains(Object o) {
+      synchronized (mutex) {
+        return delegate().contains(o);
+      }
+    }
+
+    @Override
+    public boolean containsAll(Collection<?> c) {
+      synchronized (mutex) {
+        return delegate().containsAll(c);
+      }
+    }
+
+    @Override
+    public boolean isEmpty() {
+      synchronized (mutex) {
+        return delegate().isEmpty();
+      }
+    }
+
+    @Override
+    public Iterator<E> iterator() {
+      return delegate().iterator(); // manually synchronized
+    }
+
+    @Override
+    public boolean remove(Object o) {
+      synchronized (mutex) {
+        return delegate().remove(o);
+      }
+    }
+
+    @Override
+    public boolean removeAll(Collection<?> c) {
+      synchronized (mutex) {
+        return delegate().removeAll(c);
+      }
+    }
+
+    @Override
+    public boolean retainAll(Collection<?> c) {
+      synchronized (mutex) {
+        return delegate().retainAll(c);
+      }
+    }
+
+    @Override
+    public int size() {
+      synchronized (mutex) {
+        return delegate().size();
+      }
+    }
+
+    @Override
+    public Object[] toArray() {
+      synchronized (mutex) {
+        return delegate().toArray();
+      }
+    }
+
+    @Override
+    public <T> T[] toArray(T[] a) {
+      synchronized (mutex) {
+        return delegate().toArray(a);
+      }
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  @VisibleForTesting static <E> Set<E> set(Set<E> set, @Nullable Object mutex) {
+    return new SynchronizedSet<E>(set, mutex);
+  }
+
+  static class SynchronizedSet<E>
+      extends SynchronizedCollection<E> implements Set<E> {
+    
+    SynchronizedSet(Set<E> delegate, @Nullable Object mutex) {
+      super(delegate, mutex);
+    }
+
+    @Override Set<E> delegate() {
+      return (Set<E>) super.delegate();
+    }
+
+    @Override public boolean equals(Object o) {
+      if (o == this) {
+        return true;
+      }
+      synchronized (mutex) {
+        return delegate().equals(o);
+      }
+    }
+
+    @Override public int hashCode() {
+      synchronized (mutex) {
+        return delegate().hashCode();
+      }
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  private static <E> SortedSet<E> sortedSet(
+      SortedSet<E> set, @Nullable Object mutex) {
+    return new SynchronizedSortedSet<E>(set, mutex);
+  }
+
+  static class SynchronizedSortedSet<E> extends SynchronizedSet<E>
+      implements SortedSet<E> {
+    SynchronizedSortedSet(SortedSet<E> delegate, @Nullable Object mutex) {
+      super(delegate, mutex);
+    }
+
+    @Override SortedSet<E> delegate() {
+      return (SortedSet<E>) super.delegate();
+    }
+
+    @Override
+    public Comparator<? super E> comparator() {
+      synchronized (mutex) {
+        return delegate().comparator();
+      }
+    }
+
+    @Override
+    public SortedSet<E> subSet(E fromElement, E toElement) {
+      synchronized (mutex) {
+        return sortedSet(delegate().subSet(fromElement, toElement), mutex);
+      }
+    }
+
+    @Override
+    public SortedSet<E> headSet(E toElement) {
+      synchronized (mutex) {
+        return sortedSet(delegate().headSet(toElement), mutex);
+      }
+    }
+
+    @Override
+    public SortedSet<E> tailSet(E fromElement) {
+      synchronized (mutex) {
+        return sortedSet(delegate().tailSet(fromElement), mutex);
+      }
+    }
+
+    @Override
+    public E first() {
+      synchronized (mutex) {
+        return delegate().first();
+      }
+    }
+
+    @Override
+    public E last() {
+      synchronized (mutex) {
+        return delegate().last();
+      }
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  private static <E> List<E> list(List<E> list, @Nullable Object mutex) {
+    return (list instanceof RandomAccess)
+        ? new SynchronizedRandomAccessList<E>(list, mutex)
+        : new SynchronizedList<E>(list, mutex);
+  }
+
+  private static class SynchronizedList<E> extends SynchronizedCollection<E>
+      implements List<E> {
+    SynchronizedList(List<E> delegate, @Nullable Object mutex) {
+      super(delegate, mutex);
+    }
+
+    @Override List<E> delegate() {
+      return (List<E>) super.delegate();
+    }
+
+    @Override
+    public void add(int index, E element) {
+      synchronized (mutex) {
+        delegate().add(index, element);
+      }
+    }
+
+    @Override
+    public boolean addAll(int index, Collection<? extends E> c) {
+      synchronized (mutex) {
+        return delegate().addAll(index, c);
+      }
+    }
+
+    @Override
+    public E get(int index) {
+      synchronized (mutex) {
+        return delegate().get(index);
+      }
+    }
+
+    @Override
+    public int indexOf(Object o) {
+      synchronized (mutex) {
+        return delegate().indexOf(o);
+      }
+    }
+
+    @Override
+    public int lastIndexOf(Object o) {
+      synchronized (mutex) {
+        return delegate().lastIndexOf(o);
+      }
+    }
+
+    @Override
+    public ListIterator<E> listIterator() {
+      return delegate().listIterator(); // manually synchronized
+    }
+
+    @Override
+    public ListIterator<E> listIterator(int index) {
+      return delegate().listIterator(index); // manually synchronized
+    }
+
+    @Override
+    public E remove(int index) {
+      synchronized (mutex) {
+        return delegate().remove(index);
+      }
+    }
+
+    @Override
+    public E set(int index, E element) {
+      synchronized (mutex) {
+        return delegate().set(index, element);
+      }
+    }
+
+    @Override
+    public List<E> subList(int fromIndex, int toIndex) {
+      synchronized (mutex) {
+        return list(delegate().subList(fromIndex, toIndex), mutex);
+      }
+    }
+
+    @Override public boolean equals(Object o) {
+      if (o == this) {
+        return true;
+      }
+      synchronized (mutex) {
+        return delegate().equals(o);
+      }
+    }
+
+    @Override public int hashCode() {
+      synchronized (mutex) {
+        return delegate().hashCode();
+      }
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  private static class SynchronizedRandomAccessList<E>
+      extends SynchronizedList<E> implements RandomAccess {
+    SynchronizedRandomAccessList(List<E> list, @Nullable Object mutex) {
+      super(list, mutex);
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  static <E> Multiset<E> multiset(
+      Multiset<E> multiset, @Nullable Object mutex) {
+    if (multiset instanceof SynchronizedMultiset ||
+        multiset instanceof ImmutableMultiset) {
+      return multiset;
+    }
+    return new SynchronizedMultiset<E>(multiset, mutex);
+  }
+
+  private static class SynchronizedMultiset<E> extends SynchronizedCollection<E>
+      implements Multiset<E> {
+    transient Set<E> elementSet;
+    transient Set<Entry<E>> entrySet;
+
+    SynchronizedMultiset(Multiset<E> delegate, @Nullable Object mutex) {
+      super(delegate, mutex);
+    }
+
+    @Override Multiset<E> delegate() {
+      return (Multiset<E>) super.delegate();
+    }
+
+    @Override
+    public int count(Object o) {
+      synchronized (mutex) {
+        return delegate().count(o);
+      }
+    }
+
+    @Override
+    public int add(E e, int n) {
+      synchronized (mutex) {
+        return delegate().add(e, n);
+      }
+    }
+
+    @Override
+    public int remove(Object o, int n) {
+      synchronized (mutex) {
+        return delegate().remove(o, n);
+      }
+    }
+
+    @Override
+    public int setCount(E element, int count) {
+      synchronized (mutex) {
+        return delegate().setCount(element, count);
+      }
+    }
+
+    @Override
+    public boolean setCount(E element, int oldCount, int newCount) {
+      synchronized (mutex) {
+        return delegate().setCount(element, oldCount, newCount);
+      }
+    }
+
+    @Override
+    public Set<E> elementSet() {
+      synchronized (mutex) {
+        if (elementSet == null) {
+          elementSet = typePreservingSet(delegate().elementSet(), mutex);
+        }
+        return elementSet;
+      }
+    }
+
+    @Override
+    public Set<Entry<E>> entrySet() {
+      synchronized (mutex) {
+        if (entrySet == null) {
+          entrySet = typePreservingSet(delegate().entrySet(), mutex);
+        }
+        return entrySet;
+      }
+    }
+
+    @Override public boolean equals(Object o) {
+      if (o == this) {
+        return true;
+      }
+      synchronized (mutex) {
+        return delegate().equals(o);
+      }
+    }
+
+    @Override public int hashCode() {
+      synchronized (mutex) {
+        return delegate().hashCode();
+      }
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  static <K, V> Multimap<K, V> multimap(
+      Multimap<K, V> multimap, @Nullable Object mutex) {
+    if (multimap instanceof SynchronizedMultimap ||
+        multimap instanceof ImmutableMultimap) {
+      return multimap;
+    }
+    return new SynchronizedMultimap<K, V>(multimap, mutex);
+  }
+
+  private static class SynchronizedMultimap<K, V> extends SynchronizedObject
+      implements Multimap<K, V> {
+    transient Set<K> keySet;
+    transient Collection<V> valuesCollection;
+    transient Collection<Map.Entry<K, V>> entries;
+    transient Map<K, Collection<V>> asMap;
+    transient Multiset<K> keys;
+
+    @SuppressWarnings("unchecked")
+    @Override Multimap<K, V> delegate() {
+      return (Multimap<K, V>) super.delegate();
+    }
+
+    SynchronizedMultimap(Multimap<K, V> delegate, @Nullable Object mutex) {
+      super(delegate, mutex);
+    }
+
+    @Override
+    public int size() {
+      synchronized (mutex) {
+        return delegate().size();
+      }
+    }
+
+    @Override
+    public boolean isEmpty() {
+      synchronized (mutex) {
+        return delegate().isEmpty();
+      }
+    }
+
+    @Override
+    public boolean containsKey(Object key) {
+      synchronized (mutex) {
+        return delegate().containsKey(key);
+      }
+    }
+
+    @Override
+    public boolean containsValue(Object value) {
+      synchronized (mutex) {
+        return delegate().containsValue(value);
+      }
+    }
+
+    @Override
+    public boolean containsEntry(Object key, Object value) {
+      synchronized (mutex) {
+        return delegate().containsEntry(key, value);
+      }
+    }
+
+    @Override
+    public Collection<V> get(K key) {
+      synchronized (mutex) {
+        return typePreservingCollection(delegate().get(key), mutex);
+      }
+    }
+
+    @Override
+    public boolean put(K key, V value) {
+      synchronized (mutex) {
+        return delegate().put(key, value);
+      }
+    }
+
+    @Override
+    public boolean putAll(K key, Iterable<? extends V> values) {
+      synchronized (mutex) {
+        return delegate().putAll(key, values);
+      }
+    }
+
+    @Override
+    public boolean putAll(Multimap<? extends K, ? extends V> multimap) {
+      synchronized (mutex) {
+        return delegate().putAll(multimap);
+      }
+    }
+
+    @Override
+    public Collection<V> replaceValues(K key, Iterable<? extends V> values) {
+      synchronized (mutex) {
+        return delegate().replaceValues(key, values); // copy not synchronized
+      }
+    }
+
+    @Override
+    public boolean remove(Object key, Object value) {
+      synchronized (mutex) {
+        return delegate().remove(key, value);
+      }
+    }
+
+    @Override
+    public Collection<V> removeAll(Object key) {
+      synchronized (mutex) {
+        return delegate().removeAll(key); // copy not synchronized
+      }
+    }
+
+    @Override
+    public void clear() {
+      synchronized (mutex) {
+        delegate().clear();
+      }
+    }
+
+    @Override
+    public Set<K> keySet() {
+      synchronized (mutex) {
+        if (keySet == null) {
+          keySet = typePreservingSet(delegate().keySet(), mutex);
+        }
+        return keySet;
+      }
+    }
+
+    @Override
+    public Collection<V> values() {
+      synchronized (mutex) {
+        if (valuesCollection == null) {
+          valuesCollection = collection(delegate().values(), mutex);
+        }
+        return valuesCollection;
+      }
+    }
+
+    @Override
+    public Collection<Map.Entry<K, V>> entries() {
+      synchronized (mutex) {
+        if (entries == null) {
+          entries = typePreservingCollection(delegate().entries(), mutex);
+        }
+        return entries;
+      }
+    }
+
+    @Override
+    public Map<K, Collection<V>> asMap() {
+      synchronized (mutex) {
+        if (asMap == null) {
+          asMap = new SynchronizedAsMap<K, V>(delegate().asMap(), mutex);
+        }
+        return asMap;
+      }
+    }
+
+    @Override
+    public Multiset<K> keys() {
+      synchronized (mutex) {
+        if (keys == null) {
+          keys = multiset(delegate().keys(), mutex);
+        }
+        return keys;
+      }
+    }
+
+    @Override public boolean equals(Object o) {
+      if (o == this) {
+        return true;
+      }
+      synchronized (mutex) {
+        return delegate().equals(o);
+      }
+    }
+
+    @Override public int hashCode() {
+      synchronized (mutex) {
+        return delegate().hashCode();
+      }
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  static <K, V> ListMultimap<K, V> listMultimap(
+      ListMultimap<K, V> multimap, @Nullable Object mutex) {
+    if (multimap instanceof SynchronizedListMultimap ||
+        multimap instanceof ImmutableListMultimap) {
+      return multimap;
+    }
+    return new SynchronizedListMultimap<K, V>(multimap, mutex);
+  }
+
+  private static class SynchronizedListMultimap<K, V>
+      extends SynchronizedMultimap<K, V> implements ListMultimap<K, V> {
+    SynchronizedListMultimap(
+        ListMultimap<K, V> delegate, @Nullable Object mutex) {
+      super(delegate, mutex);
+    }
+    @Override ListMultimap<K, V> delegate() {
+      return (ListMultimap<K, V>) super.delegate();
+    }
+    @Override public List<V> get(K key) {
+      synchronized (mutex) {
+        return list(delegate().get(key), mutex);
+      }
+    }
+    @Override public List<V> removeAll(Object key) {
+      synchronized (mutex) {
+        return delegate().removeAll(key); // copy not synchronized
+      }
+    }
+    @Override public List<V> replaceValues(
+        K key, Iterable<? extends V> values) {
+      synchronized (mutex) {
+        return delegate().replaceValues(key, values); // copy not synchronized
+      }
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  static <K, V> SetMultimap<K, V> setMultimap(
+      SetMultimap<K, V> multimap, @Nullable Object mutex) {
+    if (multimap instanceof SynchronizedSetMultimap ||
+        multimap instanceof ImmutableSetMultimap) {
+      return multimap;
+    }
+    return new SynchronizedSetMultimap<K, V>(multimap, mutex);
+  }
+
+  private static class SynchronizedSetMultimap<K, V>
+      extends SynchronizedMultimap<K, V> implements SetMultimap<K, V> {
+    transient Set<Map.Entry<K, V>> entrySet;
+
+    SynchronizedSetMultimap(
+        SetMultimap<K, V> delegate, @Nullable Object mutex) {
+      super(delegate, mutex);
+    }
+    @Override SetMultimap<K, V> delegate() {
+      return (SetMultimap<K, V>) super.delegate();
+    }
+    @Override public Set<V> get(K key) {
+      synchronized (mutex) {
+        return set(delegate().get(key), mutex);
+      }
+    }
+    @Override public Set<V> removeAll(Object key) {
+      synchronized (mutex) {
+        return delegate().removeAll(key); // copy not synchronized
+      }
+    }
+    @Override public Set<V> replaceValues(
+        K key, Iterable<? extends V> values) {
+      synchronized (mutex) {
+        return delegate().replaceValues(key, values); // copy not synchronized
+      }
+    }
+    @Override public Set<Map.Entry<K, V>> entries() {
+      synchronized (mutex) {
+        if (entrySet == null) {
+          entrySet = set(delegate().entries(), mutex);
+        }
+        return entrySet;
+      }
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  static <K, V> SortedSetMultimap<K, V> sortedSetMultimap(
+      SortedSetMultimap<K, V> multimap, @Nullable Object mutex) {
+    if (multimap instanceof SynchronizedSortedSetMultimap) {
+      return multimap;
+    }
+    return new SynchronizedSortedSetMultimap<K, V>(multimap, mutex);
+  }
+
+  private static class SynchronizedSortedSetMultimap<K, V>
+      extends SynchronizedSetMultimap<K, V> implements SortedSetMultimap<K, V> {
+    SynchronizedSortedSetMultimap(
+        SortedSetMultimap<K, V> delegate, @Nullable Object mutex) {
+      super(delegate, mutex);
+    }
+    @Override SortedSetMultimap<K, V> delegate() {
+      return (SortedSetMultimap<K, V>) super.delegate();
+    }
+    @Override public SortedSet<V> get(K key) {
+      synchronized (mutex) {
+        return sortedSet(delegate().get(key), mutex);
+      }
+    }
+    @Override public SortedSet<V> removeAll(Object key) {
+      synchronized (mutex) {
+        return delegate().removeAll(key); // copy not synchronized
+      }
+    }
+    @Override public SortedSet<V> replaceValues(
+        K key, Iterable<? extends V> values) {
+      synchronized (mutex) {
+        return delegate().replaceValues(key, values); // copy not synchronized
+      }
+    }
+    @Override
+    public Comparator<? super V> valueComparator() {
+      synchronized (mutex) {
+        return delegate().valueComparator();
+      }
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  private static <E> Collection<E> typePreservingCollection(
+      Collection<E> collection, @Nullable Object mutex) {
+    if (collection instanceof SortedSet) {
+      return sortedSet((SortedSet<E>) collection, mutex);
+    }
+    if (collection instanceof Set) {
+      return set((Set<E>) collection, mutex);
+    }
+    if (collection instanceof List) {
+      return list((List<E>) collection, mutex);
+    }
+    return collection(collection, mutex);
+  }
+
+  private static <E> Set<E> typePreservingSet(
+      Set<E> set, @Nullable Object mutex) {
+    if (set instanceof SortedSet) {
+      return sortedSet((SortedSet<E>) set, mutex);
+    } else {
+      return set(set, mutex);
+    }
+  }
+
+  private static class SynchronizedAsMapEntries<K, V>
+      extends SynchronizedSet<Map.Entry<K, Collection<V>>> {
+    SynchronizedAsMapEntries(
+        Set<Map.Entry<K, Collection<V>>> delegate, @Nullable Object mutex) {
+      super(delegate, mutex);
+    }
+
+    @Override public Iterator<Map.Entry<K, Collection<V>>> iterator() {
+      // Must be manually synchronized.
+      final Iterator<Map.Entry<K, Collection<V>>> iterator = super.iterator();
+      return new ForwardingIterator<Map.Entry<K, Collection<V>>>() {
+        @Override protected Iterator<Map.Entry<K, Collection<V>>> delegate() {
+          return iterator;
+        }
+
+        @Override public Map.Entry<K, Collection<V>> next() {
+          final Map.Entry<K, Collection<V>> entry = iterator.next();
+          return new ForwardingMapEntry<K, Collection<V>>() {
+            @Override protected Map.Entry<K, Collection<V>> delegate() {
+              return entry;
+            }
+            @Override public Collection<V> getValue() {
+              return typePreservingCollection(entry.getValue(), mutex);
+            }
+          };
+        }
+      };
+    }
+
+    // See Collections.CheckedMap.CheckedEntrySet for details on attacks.
+
+    @Override public Object[] toArray() {
+      synchronized (mutex) {
+        return ObjectArrays.toArrayImpl(delegate());
+      }
+    }
+    @Override public <T> T[] toArray(T[] array) {
+      synchronized (mutex) {
+        return ObjectArrays.toArrayImpl(delegate(), array);
+      }
+    }
+    @Override public boolean contains(Object o) {
+      synchronized (mutex) {
+        return Maps.containsEntryImpl(delegate(), o);
+      }
+    }
+    @Override public boolean containsAll(Collection<?> c) {
+      synchronized (mutex) {
+        return Collections2.containsAllImpl(delegate(), c);
+      }
+    }
+    @Override public boolean equals(Object o) {
+      if (o == this) {
+        return true;
+      }
+      synchronized (mutex) {
+        return Sets.equalsImpl(delegate(), o);
+      }
+    }
+    @Override public boolean remove(Object o) {
+      synchronized (mutex) {
+        return Maps.removeEntryImpl(delegate(), o);
+      }
+    }
+    @Override public boolean removeAll(Collection<?> c) {
+      synchronized (mutex) {
+        return Iterators.removeAll(delegate().iterator(), c);
+      }
+    }
+    @Override public boolean retainAll(Collection<?> c) {
+      synchronized (mutex) {
+        return Iterators.retainAll(delegate().iterator(), c);
+      }
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  @VisibleForTesting
+  static <K, V> Map<K, V> map(Map<K, V> map, @Nullable Object mutex) {
+    return new SynchronizedMap<K, V>(map, mutex);
+  }
+
+  private static class SynchronizedMap<K, V> extends SynchronizedObject
+      implements Map<K, V> {
+    transient Set<K> keySet;
+    transient Collection<V> values;
+    transient Set<Map.Entry<K, V>> entrySet;
+
+    SynchronizedMap(Map<K, V> delegate, @Nullable Object mutex) {
+      super(delegate, mutex);
+    }
+
+    @SuppressWarnings("unchecked")
+    @Override Map<K, V> delegate() {
+      return (Map<K, V>) super.delegate();
+    }
+
+    @Override
+    public void clear() {
+      synchronized (mutex) {
+        delegate().clear();
+      }
+    }
+
+    @Override
+    public boolean containsKey(Object key) {
+      synchronized (mutex) {
+        return delegate().containsKey(key);
+      }
+    }
+
+    @Override
+    public boolean containsValue(Object value) {
+      synchronized (mutex) {
+        return delegate().containsValue(value);
+      }
+    }
+
+    @Override
+    public Set<Map.Entry<K, V>> entrySet() {
+      synchronized (mutex) {
+        if (entrySet == null) {
+          entrySet = set(delegate().entrySet(), mutex);
+        }
+        return entrySet;
+      }
+    }
+
+    @Override
+    public V get(Object key) {
+      synchronized (mutex) {
+        return delegate().get(key);
+      }
+    }
+
+    @Override
+    public boolean isEmpty() {
+      synchronized (mutex) {
+        return delegate().isEmpty();
+      }
+    }
+
+    @Override
+    public Set<K> keySet() {
+      synchronized (mutex) {
+        if (keySet == null) {
+          keySet = set(delegate().keySet(), mutex);
+        }
+        return keySet;
+      }
+    }
+
+    @Override
+    public V put(K key, V value) {
+      synchronized (mutex) {
+        return delegate().put(key, value);
+      }
+    }
+
+    @Override
+    public void putAll(Map<? extends K, ? extends V> map) {
+      synchronized (mutex) {
+        delegate().putAll(map);
+      }
+    }
+
+    @Override
+    public V remove(Object key) {
+      synchronized (mutex) {
+        return delegate().remove(key);
+      }
+    }
+
+    @Override
+    public int size() {
+      synchronized (mutex) {
+        return delegate().size();
+      }
+    }
+
+    @Override
+    public Collection<V> values() {
+      synchronized (mutex) {
+        if (values == null) {
+          values = collection(delegate().values(), mutex);
+        }
+        return values;
+      }
+    }
+
+    @Override public boolean equals(Object o) {
+      if (o == this) {
+        return true;
+      }
+      synchronized (mutex) {
+        return delegate().equals(o);
+      }
+    }
+
+    @Override public int hashCode() {
+      synchronized (mutex) {
+        return delegate().hashCode();
+      }
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+  
+  static <K, V> SortedMap<K, V> sortedMap(
+      SortedMap<K, V> sortedMap, @Nullable Object mutex) {
+    return new SynchronizedSortedMap<K, V>(sortedMap, mutex);
+  }
+  
+  static class SynchronizedSortedMap<K, V> extends SynchronizedMap<K, V>
+      implements SortedMap<K, V> {
+
+    SynchronizedSortedMap(SortedMap<K, V> delegate, @Nullable Object mutex) {
+      super(delegate, mutex);
+    }
+
+    @Override SortedMap<K, V> delegate() {
+      return (SortedMap<K, V>) super.delegate();
+    }
+
+    @Override public Comparator<? super K> comparator() {
+      synchronized (mutex) {
+        return delegate().comparator();
+      }
+    }
+
+    @Override public K firstKey() {
+      synchronized (mutex) {
+        return delegate().firstKey();
+      }
+    }
+
+    @Override public SortedMap<K, V> headMap(K toKey) {
+      synchronized (mutex) {
+        return sortedMap(delegate().headMap(toKey), mutex);
+      }
+    }
+
+    @Override public K lastKey() {
+      synchronized (mutex) {
+        return delegate().lastKey();
+      }
+    }
+
+    @Override public SortedMap<K, V> subMap(K fromKey, K toKey) {
+      synchronized (mutex) {
+        return sortedMap(delegate().subMap(fromKey, toKey), mutex);
+      }
+    }
+
+    @Override public SortedMap<K, V> tailMap(K fromKey) {
+      synchronized (mutex) {
+        return sortedMap(delegate().tailMap(fromKey), mutex);
+      }
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  static <K, V> BiMap<K, V> biMap(BiMap<K, V> bimap, @Nullable Object mutex) {
+    if (bimap instanceof SynchronizedBiMap ||
+        bimap instanceof ImmutableBiMap) {
+      return bimap;
+    }
+    return new SynchronizedBiMap<K, V>(bimap, mutex, null);
+  }
+
+  @VisibleForTesting static class SynchronizedBiMap<K, V>
+      extends SynchronizedMap<K, V> implements BiMap<K, V>, Serializable {
+    private transient Set<V> valueSet;
+    private transient BiMap<V, K> inverse;
+
+    private SynchronizedBiMap(BiMap<K, V> delegate, @Nullable Object mutex,
+        @Nullable BiMap<V, K> inverse) {
+      super(delegate, mutex);
+      this.inverse = inverse;
+    }
+
+    @Override BiMap<K, V> delegate() {
+      return (BiMap<K, V>) super.delegate();
+    }
+
+    @Override public Set<V> values() {
+      synchronized (mutex) {
+        if (valueSet == null) {
+          valueSet = set(delegate().values(), mutex);
+        }
+        return valueSet;
+      }
+    }
+
+    @Override
+    public V forcePut(K key, V value) {
+      synchronized (mutex) {
+        return delegate().forcePut(key, value);
+      }
+    }
+
+    @Override
+    public BiMap<V, K> inverse() {
+      synchronized (mutex) {
+        if (inverse == null) {
+          inverse
+              = new SynchronizedBiMap<V, K>(delegate().inverse(), mutex, this);
+        }
+        return inverse;
+      }
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  private static class SynchronizedAsMap<K, V>
+      extends SynchronizedMap<K, Collection<V>> {
+    transient Set<Map.Entry<K, Collection<V>>> asMapEntrySet;
+    transient Collection<Collection<V>> asMapValues;
+
+    SynchronizedAsMap(Map<K, Collection<V>> delegate, @Nullable Object mutex) {
+      super(delegate, mutex);
+    }
+
+    @Override public Collection<V> get(Object key) {
+      synchronized (mutex) {
+        Collection<V> collection = super.get(key);
+        return (collection == null) ? null
+            : typePreservingCollection(collection, mutex);
+      }
+    }
+
+    @Override public Set<Map.Entry<K, Collection<V>>> entrySet() {
+      synchronized (mutex) {
+        if (asMapEntrySet == null) {
+          asMapEntrySet = new SynchronizedAsMapEntries<K, V>(
+              delegate().entrySet(), mutex);
+        }
+        return asMapEntrySet;
+      }
+    }
+
+    @Override public Collection<Collection<V>> values() {
+      synchronized (mutex) {
+        if (asMapValues == null) {
+          asMapValues
+              = new SynchronizedAsMapValues<V>(delegate().values(), mutex);
+        }
+        return asMapValues;
+      }
+    }
+
+    @Override public boolean containsValue(Object o) {
+      // values() and its contains() method are both synchronized.
+      return values().contains(o);
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  private static class SynchronizedAsMapValues<V>
+      extends SynchronizedCollection<Collection<V>> {
+    SynchronizedAsMapValues(
+        Collection<Collection<V>> delegate, @Nullable Object mutex) {
+      super(delegate, mutex);
+    }
+
+    @Override public Iterator<Collection<V>> iterator() {
+      // Must be manually synchronized.
+      final Iterator<Collection<V>> iterator = super.iterator();
+      return new ForwardingIterator<Collection<V>>() {
+        @Override protected Iterator<Collection<V>> delegate() {
+          return iterator;
+        }
+        @Override public Collection<V> next() {
+          return typePreservingCollection(iterator.next(), mutex);
+        }
+      };
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+}
diff --git a/guava/src/com/google/common/collect/Table.java b/guava/src/com/google/common/collect/Table.java
new file mode 100644
index 0000000..f2313be
--- /dev/null
+++ b/guava/src/com/google/common/collect/Table.java
@@ -0,0 +1,295 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Objects;
+
+import java.util.Collection;
+import java.util.Map;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+/**
+ * A collection that associates an ordered pair of keys, called a row key and a
+ * column key, with a single value. A table may be sparse, with only a small
+ * fraction of row key / column key pairs possessing a corresponding value.
+ *
+ * <p>The mappings corresponding to a given row key may be viewed as a {@link
+ * Map} whose keys are the columns. The reverse is also available, associating a
+ * column with a row key / value map. Note that, in some implementations, data
+ * access by column key may have fewer supported operations or worse performance
+ * than data access by row key.
+ *
+ * <p>The methods returning collections or maps always return views of the
+ * underlying table. Updating the table can change the contents of those
+ * collections, and updating the collections will change the table.
+ *
+ * <p>All methods that modify the table are optional, and the views returned by
+ * the table may or may not be modifiable. When modification isn't supported,
+ * those methods will throw an {@link UnsupportedOperationException}.
+ *
+ * @author Jared Levy
+ * @param <R> the type of the table row keys
+ * @param <C> the type of the table column keys
+ * @param <V> the type of the mapped values
+ * @since 7.0
+ */
+@GwtCompatible
+@Beta
+public interface Table<R, C, V> {
+  // TODO(jlevy): Consider adding methods similar to ConcurrentMap methods.
+
+  // Accessors
+
+  /**
+   * Returns {@code true} if the table contains a mapping with the specified
+   * row and column keys.
+   *
+   * @param rowKey key of row to search for
+   * @param columnKey key of column to search for
+   */
+  boolean contains(@Nullable Object rowKey, @Nullable Object columnKey);
+
+  /**
+   * Returns {@code true} if the table contains a mapping with the specified
+   * row key.
+   *
+   * @param rowKey key of row to search for
+   */
+  boolean containsRow(@Nullable Object rowKey);
+
+  /**
+   * Returns {@code true} if the table contains a mapping with the specified
+   * column.
+   *
+   * @param columnKey key of column to search for
+   */
+  boolean containsColumn(@Nullable Object columnKey);
+
+  /**
+   * Returns {@code true} if the table contains a mapping with the specified
+   * value.
+   *
+   * @param value value to search for
+   */
+  boolean containsValue(@Nullable Object value);
+
+  /**
+   * Returns the value corresponding to the given row and column keys, or
+   * {@code null} if no such mapping exists.
+   *
+   * @param rowKey key of row to search for
+   * @param columnKey key of column to search for
+   */
+  V get(@Nullable Object rowKey, @Nullable Object columnKey);
+
+  /** Returns {@code true} if the table contains no mappings. */
+  boolean isEmpty();
+
+  /**
+   * Returns the number of row key / column key / value mappings in the table.
+   */
+  int size();
+
+  /**
+   * Compares the specified object with this table for equality. Two tables are
+   * equal when their cell views, as returned by {@link #cellSet}, are equal.
+   */
+  @Override
+  boolean equals(@Nullable Object obj);
+
+  /**
+   * Returns the hash code for this table. The hash code of a table is defined
+   * as the hash code of its cell view, as returned by {@link #cellSet}.
+   */
+  @Override
+  int hashCode();
+
+  // Mutators
+
+  /** Removes all mappings from the table. */
+  void clear();
+
+  /**
+   * Associates the specified value with the specified keys. If the table
+   * already contained a mapping for those keys, the old value is replaced with
+   * the specified value.
+   *
+   * @param rowKey row key that the value should be associated with
+   * @param columnKey column key that the value should be associated with
+   * @param value value to be associated with the specified keys
+   * @return the value previously associated with the keys, or {@code null} if
+   *     no mapping existed for the keys
+   */
+  V put(R rowKey, C columnKey, V value);
+
+  /**
+   * Copies all mappings from the specified table to this table. The effect is
+   * equivalent to calling {@link #put} with each row key / column key / value
+   * mapping in {@code table}.
+   *
+   * @param table the table to add to this table
+   */
+  void putAll(Table<? extends R, ? extends C, ? extends V> table);
+
+  /**
+   * Removes the mapping, if any, associated with the given keys.
+   *
+   * @param rowKey row key of mapping to be removed
+   * @param columnKey column key of mapping to be removed
+   * @return the value previously associated with the keys, or {@code null} if
+   *     no such value existed
+   */
+  V remove(@Nullable Object rowKey, @Nullable Object columnKey);
+
+  // Views
+
+  /**
+   * Returns a view of all mappings that have the given row key. For each row
+   * key / column key / value mapping in the table with that row key, the
+   * returned map associates the column key with the value. If no mappings in
+   * the table have the provided row key, an empty map is returned.
+   *
+   * <p>Changes to the returned map will update the underlying table, and vice
+   * versa.
+   *
+   * @param rowKey key of row to search for in the table
+   * @return the corresponding map from column keys to values
+   */
+  Map<C, V> row(R rowKey);
+
+  /**
+   * Returns a view of all mappings that have the given column key. For each row
+   * key / column key / value mapping in the table with that column key, the
+   * returned map associates the row key with the value. If no mappings in the
+   * table have the provided column key, an empty map is returned.
+   *
+   * <p>Changes to the returned map will update the underlying table, and vice
+   * versa.
+   *
+   * @param columnKey key of column to search for in the table
+   * @return the corresponding map from row keys to values
+   */
+  Map<R, V> column(C columnKey);
+
+  /**
+   * Returns a set of all row key / column key / value triplets. Changes to the
+   * returned set will update the underlying table, and vice versa. The cell set
+   * does not support the {@code add} or {@code addAll} methods.
+   *
+   * @return set of table cells consisting of row key / column key / value
+   *     triplets
+   */
+  Set<Cell<R, C, V>> cellSet();
+
+  /**
+   * Returns a set of row keys that have one or more values in the table.
+   * Changes to the set will update the underlying table, and vice versa.
+   *
+   * @return set of row keys
+   */
+  Set<R> rowKeySet();
+
+  /**
+   * Returns a set of column keys that have one or more values in the table.
+   * Changes to the set will update the underlying table, and vice versa.
+   *
+   * @return set of column keys
+   */
+  Set<C> columnKeySet();
+
+  /**
+   * Returns a collection of all values, which may contain duplicates. Changes
+   * to the returned collection will update the underlying table, and vice
+   * versa.
+   *
+   * @return collection of values
+   */
+  Collection<V> values();
+
+  /**
+   * Returns a view that associates each row key with the corresponding map from
+   * column keys to values. Changes to the returned map will update this table.
+   * The returned map does not support {@code put()} or {@code putAll()}, or
+   * {@code setValue()} on its entries.
+   *
+   * <p>In contrast, the maps returned by {@code rowMap().get()} have the same
+   * behavior as those returned by {@link #row}. Those maps may support {@code
+   * setValue()}, {@code put()}, and {@code putAll()}.
+   *
+   * @return a map view from each row key to a secondary map from column keys to
+   *     values
+   */
+  Map<R, Map<C, V>> rowMap();
+
+  /**
+   * Returns a view that associates each column key with the corresponding map
+   * from row keys to values. Changes to the returned map will update this
+   * table. The returned map does not support {@code put()} or {@code putAll()},
+   * or {@code setValue()} on its entries.
+   *
+   * <p>In contrast, the maps returned by {@code columnMap().get()} have the
+   * same behavior as those returned by {@link #column}. Those maps may support
+   * {@code setValue()}, {@code put()}, and {@code putAll()}.
+   *
+   * @return a map view from each column key to a secondary map from row keys to
+   *     values
+   */
+  Map<C, Map<R, V>> columnMap();
+
+  /**
+   * Row key / column key / value triplet corresponding to a mapping in a table.
+   *
+   * @since 7.0
+   */
+  @Beta
+  interface Cell<R, C, V> {
+    /**
+     * Returns the row key of this cell.
+     */
+    R getRowKey();
+
+    /**
+     * Returns the column key of this cell.
+     */
+    C getColumnKey();
+
+    /**
+     * Returns the value of this cell.
+     */
+    V getValue();
+
+    /**
+     * Compares the specified object with this cell for equality. Two cells are
+     * equal when they have equal row keys, column keys, and values.
+     */
+    @Override
+    boolean equals(@Nullable Object obj);
+
+    /**
+     * Returns the hash code of this cell.
+     *
+     * <p>The hash code of a table cell is equal to {@link
+     * Objects#hashCode}{@code (e.getRowKey(), e.getColumnKey(), e.getValue())}.
+     */
+    @Override
+    int hashCode();
+  }
+}
diff --git a/guava/src/com/google/common/collect/Tables.java b/guava/src/com/google/common/collect/Tables.java
new file mode 100644
index 0000000..a9c69b9
--- /dev/null
+++ b/guava/src/com/google/common/collect/Tables.java
@@ -0,0 +1,747 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Function;
+import com.google.common.base.Objects;
+import com.google.common.base.Supplier;
+import com.google.common.collect.Collections2.TransformedCollection;
+import com.google.common.collect.Table.Cell;
+
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Set;
+import java.util.SortedMap;
+import java.util.SortedSet;
+
+import javax.annotation.Nullable;
+
+/**
+ * Provides static methods that involve a {@code Table}.
+ *
+ * @author Jared Levy
+ * @author Louis Wasserman
+ * @since 7.0
+ */
+@GwtCompatible
+@Beta
+public final class Tables {
+  private Tables() {}
+
+  /**
+   * Returns an immutable cell with the specified row key, column key, and
+   * value.
+   *
+   * <p>The returned cell is serializable.
+   *
+   * @param rowKey the row key to be associated with the returned cell
+   * @param columnKey the column key to be associated with the returned cell
+   * @param value the value to be associated with the returned cell
+   */
+  public static <R, C, V> Cell<R, C, V> immutableCell(
+      @Nullable R rowKey, @Nullable C columnKey, @Nullable V value) {
+    return new ImmutableCell<R, C, V>(rowKey, columnKey, value);
+  }
+
+  static final class ImmutableCell<R, C, V>
+      extends AbstractCell<R, C, V> implements Serializable {
+    private final R rowKey;
+    private final C columnKey;
+    private final V value;
+
+    ImmutableCell(
+        @Nullable R rowKey, @Nullable C columnKey, @Nullable V value) {
+      this.rowKey = rowKey;
+      this.columnKey = columnKey;
+      this.value = value;
+    }
+
+    @Override
+    public R getRowKey() {
+      return rowKey;
+    }
+    @Override
+    public C getColumnKey() {
+      return columnKey;
+    }
+    @Override
+    public V getValue() {
+      return value;
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  abstract static class AbstractCell<R, C, V> implements Cell<R, C, V> {
+    // needed for serialization
+    AbstractCell() {}
+
+    @Override public boolean equals(Object obj) {
+      if (obj == this) {
+        return true;
+      }
+      if (obj instanceof Cell) {
+        Cell<?, ?, ?> other = (Cell<?, ?, ?>) obj;
+        return Objects.equal(getRowKey(), other.getRowKey())
+            && Objects.equal(getColumnKey(), other.getColumnKey())
+            && Objects.equal(getValue(), other.getValue());
+      }
+      return false;
+    }
+
+    @Override public int hashCode() {
+      return Objects.hashCode(getRowKey(), getColumnKey(), getValue());
+    }
+
+    @Override public String toString() {
+      return "(" + getRowKey() + "," + getColumnKey() + ")=" + getValue();
+    }
+  }
+
+  /**
+   * Creates a transposed view of a given table that flips its row and column
+   * keys. In other words, calling {@code get(columnKey, rowKey)} on the
+   * generated table always returns the same value as calling {@code
+   * get(rowKey, columnKey)} on the original table. Updating the original table
+   * changes the contents of the transposed table and vice versa.
+   *
+   * <p>The returned table supports update operations as long as the input table
+   * supports the analogous operation with swapped rows and columns. For
+   * example, in a {@link HashBasedTable} instance, {@code
+   * rowKeySet().iterator()} supports {@code remove()} but {@code
+   * columnKeySet().iterator()} doesn't. With a transposed {@link
+   * HashBasedTable}, it's the other way around.
+   */
+  public static <R, C, V> Table<C, R, V> transpose(Table<R, C, V> table) {
+    return (table instanceof TransposeTable)
+        ? ((TransposeTable<R, C, V>) table).original
+        : new TransposeTable<C, R, V>(table);
+  }
+
+  private static class TransposeTable<C, R, V> implements Table<C, R, V> {
+    final Table<R, C, V> original;
+
+    TransposeTable(Table<R, C, V> original) {
+      this.original = checkNotNull(original);
+    }
+
+    @Override
+    public void clear() {
+      original.clear();
+    }
+
+    @Override
+    public Map<C, V> column(R columnKey) {
+      return original.row(columnKey);
+    }
+
+    @Override
+    public Set<R> columnKeySet() {
+      return original.rowKeySet();
+    }
+
+    @Override
+    public Map<R, Map<C, V>> columnMap() {
+      return original.rowMap();
+    }
+
+    @Override
+    public boolean contains(
+        @Nullable Object rowKey, @Nullable Object columnKey) {
+      return original.contains(columnKey, rowKey);
+    }
+
+    @Override
+    public boolean containsColumn(@Nullable Object columnKey) {
+      return original.containsRow(columnKey);
+    }
+
+    @Override
+    public boolean containsRow(@Nullable Object rowKey) {
+      return original.containsColumn(rowKey);
+    }
+
+    @Override
+    public boolean containsValue(@Nullable Object value) {
+      return original.containsValue(value);
+    }
+
+    @Override
+    public V get(@Nullable Object rowKey, @Nullable Object columnKey) {
+      return original.get(columnKey, rowKey);
+    }
+
+    @Override
+    public boolean isEmpty() {
+      return original.isEmpty();
+    }
+
+    @Override
+    public V put(C rowKey, R columnKey, V value) {
+      return original.put(columnKey, rowKey, value);
+    }
+
+    @Override
+    public void putAll(Table<? extends C, ? extends R, ? extends V> table) {
+      original.putAll(transpose(table));
+    }
+
+    @Override
+    public V remove(@Nullable Object rowKey, @Nullable Object columnKey) {
+      return original.remove(columnKey, rowKey);
+    }
+
+    @Override
+    public Map<R, V> row(C rowKey) {
+      return original.column(rowKey);
+    }
+
+    @Override
+    public Set<C> rowKeySet() {
+      return original.columnKeySet();
+    }
+
+    @Override
+    public Map<C, Map<R, V>> rowMap() {
+      return original.columnMap();
+    }
+
+    @Override
+    public int size() {
+      return original.size();
+    }
+
+    @Override
+    public Collection<V> values() {
+      return original.values();
+    }
+
+    @Override public boolean equals(@Nullable Object obj) {
+      if (obj == this) {
+        return true;
+      }
+      if (obj instanceof Table) {
+        Table<?, ?, ?> other = (Table<?, ?, ?>) obj;
+        return cellSet().equals(other.cellSet());
+      }
+      return false;
+    }
+
+    @Override public int hashCode() {
+      return cellSet().hashCode();
+    }
+
+    @Override public String toString() {
+      return rowMap().toString();
+    }
+
+    // Will cast TRANSPOSE_CELL to a type that always succeeds
+    private static final Function<Cell<?, ?, ?>, Cell<?, ?, ?>> TRANSPOSE_CELL =
+        new Function<Cell<?, ?, ?>, Cell<?, ?, ?>>() {
+          @Override
+          public Cell<?, ?, ?> apply(Cell<?, ?, ?> cell) {
+            return immutableCell(
+                cell.getColumnKey(), cell.getRowKey(), cell.getValue());
+          }
+        };
+
+    CellSet cellSet;
+
+    @Override
+    public Set<Cell<C, R, V>> cellSet() {
+      CellSet result = cellSet;
+      return (result == null) ? cellSet = new CellSet() : result;
+    }
+
+    class CellSet extends TransformedCollection<Cell<R, C, V>, Cell<C, R, V>>
+        implements Set<Cell<C, R, V>> {
+      // Casting TRANSPOSE_CELL to a type that always succeeds
+      @SuppressWarnings("unchecked")
+      CellSet() {
+        super(original.cellSet(), (Function) TRANSPOSE_CELL);
+      }
+
+      @Override public boolean equals(Object obj) {
+        if (obj == this) {
+          return true;
+        }
+        if (!(obj instanceof Set)) {
+          return false;
+        }
+        Set<?> os = (Set<?>) obj;
+        if (os.size() != size()) {
+          return false;
+        }
+        return containsAll(os);
+      }
+
+      @Override public int hashCode() {
+        return Sets.hashCodeImpl(this);
+      }
+
+      @Override public boolean contains(Object obj) {
+        if (obj instanceof Cell) {
+          Cell<?, ?, ?> cell = (Cell<?, ?, ?>) obj;
+          return original.cellSet().contains(immutableCell(
+              cell.getColumnKey(), cell.getRowKey(), cell.getValue()));
+        }
+        return false;
+      }
+
+      @Override public boolean remove(Object obj) {
+        if (obj instanceof Cell) {
+          Cell<?, ?, ?> cell = (Cell<?, ?, ?>) obj;
+          return original.cellSet().remove(immutableCell(
+              cell.getColumnKey(), cell.getRowKey(), cell.getValue()));
+        }
+        return false;
+      }
+    }
+  }
+
+  /**
+   * Creates a table that uses the specified backing map and factory. It can
+   * generate a table based on arbitrary {@link Map} classes.
+   *
+   * <p>The {@code factory}-generated and {@code backingMap} classes determine
+   * the table iteration order. However, the table's {@code row()} method
+   * returns instances of a different class than {@code factory.get()} does.
+   *
+   * <p>Call this method only when the simpler factory methods in classes like
+   * {@link HashBasedTable} and {@link TreeBasedTable} won't suffice.
+   *
+   * <p>The views returned by the {@code Table} methods {@link Table#column},
+   * {@link Table#columnKeySet}, and {@link Table#columnMap} have iterators that
+   * don't support {@code remove()}. Otherwise, all optional operations are
+   * supported. Null row keys, columns keys, and values are not supported.
+   *
+   * <p>Lookups by row key are often faster than lookups by column key, because
+   * the data is stored in a {@code Map<R, Map<C, V>>}. A method call like
+   * {@code column(columnKey).get(rowKey)} still runs quickly, since the row key
+   * is provided. However, {@code column(columnKey).size()} takes longer, since
+   * an iteration across all row keys occurs.
+   *
+   * <p>Note that this implementation is not synchronized. If multiple threads
+   * access this table concurrently and one of the threads modifies the table,
+   * it must be synchronized externally.
+   *
+   * <p>The table is serializable if {@code backingMap}, {@code factory}, the
+   * maps generated by {@code factory}, and the table contents are all
+   * serializable.
+   *
+   * <p>Note: the table assumes complete ownership over of {@code backingMap}
+   * and the maps returned by {@code factory}. Those objects should not be
+   * manually updated and they should not use soft, weak, or phantom references.
+   *
+   * @param backingMap place to store the mapping from each row key to its
+   *     corresponding column key / value map
+   * @param factory supplier of new, empty maps that will each hold all column
+   *     key / value mappings for a given row key
+   * @throws IllegalArgumentException if {@code backingMap} is not empty
+   * @since 10.0
+   */
+  public static <R, C, V> Table<R, C, V> newCustomTable(
+      Map<R, Map<C, V>> backingMap, Supplier<? extends Map<C, V>> factory) {
+    checkArgument(backingMap.isEmpty());
+    checkNotNull(factory);
+    // TODO(jlevy): Wrap factory to validate that the supplied maps are empty?
+    return new StandardTable<R, C, V>(backingMap, factory);
+  }
+
+  /**
+   * Returns a view of a table where each value is transformed by a function.
+   * All other properties of the table, such as iteration order, are left
+   * intact.
+   *
+   * <p>Changes in the underlying table are reflected in this view. Conversely,
+   * this view supports removal operations, and these are reflected in the
+   * underlying table.
+   *
+   * <p>It's acceptable for the underlying table to contain null keys, and even
+   * null values provided that the function is capable of accepting null input.
+   * The transformed table might contain null values, if the function sometimes
+   * gives a null result.
+   *
+   * <p>The returned table is not thread-safe or serializable, even if the
+   * underlying table is.
+   *
+   * <p>The function is applied lazily, invoked when needed. This is necessary
+   * for the returned table to be a view, but it means that the function will be
+   * applied many times for bulk operations like {@link Table#containsValue} and
+   * {@code Table.toString()}. For this to perform well, {@code function} should
+   * be fast. To avoid lazy evaluation when the returned table doesn't need to
+   * be a view, copy the returned table into a new table of your choosing.
+   *
+   * @since 10.0
+   */
+  public static <R, C, V1, V2> Table<R, C, V2> transformValues(
+      Table<R, C, V1> fromTable, Function<? super V1, V2> function) {
+    return new TransformedTable<R, C, V1, V2>(fromTable, function);
+  }
+
+  private static class TransformedTable<R, C, V1, V2>
+      implements Table<R, C, V2> {
+    final Table<R, C, V1> fromTable;
+    final Function<? super V1, V2> function;
+
+    TransformedTable(
+        Table<R, C, V1> fromTable, Function<? super V1, V2> function) {
+      this.fromTable = checkNotNull(fromTable);
+      this.function = checkNotNull(function);
+    }
+
+    @Override public boolean contains(Object rowKey, Object columnKey) {
+      return fromTable.contains(rowKey, columnKey);
+    }
+
+    @Override public boolean containsRow(Object rowKey) {
+      return fromTable.containsRow(rowKey);
+    }
+
+    @Override public boolean containsColumn(Object columnKey) {
+      return fromTable.containsColumn(columnKey);
+    }
+
+    @Override public boolean containsValue(Object value) {
+      return values().contains(value);
+    }
+
+    @Override public V2 get(Object rowKey, Object columnKey) {
+      // The function is passed a null input only when the table contains a null
+      // value.
+      return contains(rowKey, columnKey)
+          ? function.apply(fromTable.get(rowKey, columnKey)) : null;
+    }
+
+    @Override public boolean isEmpty() {
+      return fromTable.isEmpty();
+    }
+
+    @Override public int size() {
+      return fromTable.size();
+    }
+
+    @Override public void clear() {
+      fromTable.clear();
+    }
+
+    @Override public V2 put(R rowKey, C columnKey, V2 value) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override public void putAll(
+        Table<? extends R, ? extends C, ? extends V2> table) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override public V2 remove(Object rowKey, Object columnKey) {
+      return contains(rowKey, columnKey)
+          ? function.apply(fromTable.remove(rowKey, columnKey)) : null;
+    }
+
+    @Override public Map<C, V2> row(R rowKey) {
+      return Maps.transformValues(fromTable.row(rowKey), function);
+    }
+
+    @Override public Map<R, V2> column(C columnKey) {
+      return Maps.transformValues(fromTable.column(columnKey), function);
+    }
+
+    Function<Cell<R, C, V1>, Cell<R, C, V2>> cellFunction() {
+      return new Function<Cell<R, C, V1>, Cell<R, C, V2>>() {
+        @Override public Cell<R, C, V2> apply(Cell<R, C, V1> cell) {
+          return immutableCell(
+              cell.getRowKey(), cell.getColumnKey(),
+              function.apply(cell.getValue()));
+        }
+      };
+    }
+
+    class CellSet extends TransformedCollection<Cell<R, C, V1>, Cell<R, C, V2>>
+        implements Set<Cell<R, C, V2>> {
+      CellSet() {
+        super(fromTable.cellSet(), cellFunction());
+      }
+      @Override public boolean equals(Object obj) {
+        return Sets.equalsImpl(this, obj);
+      }
+      @Override public int hashCode() {
+        return Sets.hashCodeImpl(this);
+      }
+      @Override public boolean contains(Object obj) {
+        if (obj instanceof Cell) {
+          Cell<?, ?, ?> cell = (Cell<?, ?, ?>) obj;
+          if (!Objects.equal(
+              cell.getValue(), get(cell.getRowKey(), cell.getColumnKey()))) {
+            return false;
+          }
+          return cell.getValue() != null
+              || fromTable.contains(cell.getRowKey(), cell.getColumnKey());
+        }
+        return false;
+      }
+      @Override public boolean remove(Object obj) {
+        if (contains(obj)) {
+          Cell<?, ?, ?> cell = (Cell<?, ?, ?>) obj;
+          fromTable.remove(cell.getRowKey(), cell.getColumnKey());
+          return true;
+        }
+        return false;
+      }
+    }
+
+    CellSet cellSet;
+
+    @Override public Set<Cell<R, C, V2>> cellSet() {
+      return (cellSet == null) ? cellSet = new CellSet() : cellSet;
+    }
+
+    @Override public Set<R> rowKeySet() {
+      return fromTable.rowKeySet();
+    }
+
+    @Override public Set<C> columnKeySet() {
+      return fromTable.columnKeySet();
+    }
+
+    Collection<V2> values;
+
+    @Override public Collection<V2> values() {
+      return (values == null)
+          ? values = Collections2.transform(fromTable.values(), function)
+          : values;
+    }
+
+    Map<R, Map<C, V2>> createRowMap() {
+      Function<Map<C, V1>, Map<C, V2>> rowFunction =
+          new Function<Map<C, V1>, Map<C, V2>>() {
+            @Override public Map<C, V2> apply(Map<C, V1> row) {
+              return Maps.transformValues(row, function);
+            }
+          };
+      return Maps.transformValues(fromTable.rowMap(), rowFunction);
+    }
+
+    Map<R, Map<C, V2>> rowMap;
+
+    @Override public Map<R, Map<C, V2>> rowMap() {
+      return (rowMap == null) ? rowMap = createRowMap() : rowMap;
+    }
+
+    Map<C, Map<R, V2>> createColumnMap() {
+      Function<Map<R, V1>, Map<R, V2>> columnFunction =
+          new Function<Map<R, V1>, Map<R, V2>>() {
+            @Override public Map<R, V2> apply(Map<R, V1> column) {
+              return Maps.transformValues(column, function);
+            }
+          };
+      return Maps.transformValues(fromTable.columnMap(), columnFunction);
+    }
+
+    Map<C, Map<R, V2>> columnMap;
+
+    @Override public Map<C, Map<R, V2>> columnMap() {
+      return (columnMap == null) ? columnMap = createColumnMap() : columnMap;
+    }
+
+    @Override public boolean equals(@Nullable Object obj) {
+      if (obj == this) {
+        return true;
+      }
+      if (obj instanceof Table) {
+        Table<?, ?, ?> other = (Table<?, ?, ?>) obj;
+        return cellSet().equals(other.cellSet());
+      }
+      return false;
+    }
+
+    @Override public int hashCode() {
+      return cellSet().hashCode();
+    }
+
+    @Override public String toString() {
+      return rowMap().toString();
+    }
+  }
+  
+  /**
+   * Returns an unmodifiable view of the specified table. This method allows modules to provide
+   * users with "read-only" access to internal tables. Query operations on the returned table
+   * "read through" to the specified table, and attempts to modify the returned table, whether
+   * direct or via its collection views, result in an {@code UnsupportedOperationException}.
+   * 
+   * <p>The returned table will be serializable if the specified table is serializable.
+   *
+   * <p>Consider using an {@link ImmutableTable}, which is guaranteed never to change.
+   * 
+   * @param table
+   *          the table for which an unmodifiable view is to be returned
+   * @return an unmodifiable view of the specified table
+   * @since 11.0
+   */
+  public static <R, C, V> Table<R, C, V> unmodifiableTable(
+      Table<? extends R, ? extends C, ? extends V> table) {
+    return new UnmodifiableTable<R, C, V>(table);
+  }
+  
+  private static class UnmodifiableTable<R, C, V>
+      extends ForwardingTable<R, C, V> implements Serializable {
+    final Table<? extends R, ? extends C, ? extends V> delegate;
+
+    UnmodifiableTable(Table<? extends R, ? extends C, ? extends V> delegate) {
+      this.delegate = checkNotNull(delegate);
+    }
+
+    @SuppressWarnings("unchecked") // safe, covariant cast
+    @Override
+    protected Table<R, C, V> delegate() {
+      return (Table<R, C, V>) delegate;
+    }
+
+    @Override
+    public Set<Cell<R, C, V>> cellSet() {
+      return Collections.unmodifiableSet(super.cellSet());
+    }
+
+    @Override
+    public void clear() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public Map<R, V> column(@Nullable C columnKey) {
+      return Collections.unmodifiableMap(super.column(columnKey));
+    }
+
+    @Override
+    public Set<C> columnKeySet() {
+      return Collections.unmodifiableSet(super.columnKeySet());
+    }
+
+    @Override
+    public Map<C, Map<R, V>> columnMap() {
+      Function<Map<R, V>, Map<R, V>> wrapper = unmodifiableWrapper();
+      return Collections.unmodifiableMap(Maps.transformValues(super.columnMap(), wrapper));
+    }
+
+    @Override
+    public V put(@Nullable R rowKey, @Nullable C columnKey, @Nullable V value) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void putAll(Table<? extends R, ? extends C, ? extends V> table) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public V remove(@Nullable Object rowKey, @Nullable Object columnKey) {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public Map<C, V> row(@Nullable R rowKey) {
+      return Collections.unmodifiableMap(super.row(rowKey));
+    }
+
+    @Override
+    public Set<R> rowKeySet() {
+      return Collections.unmodifiableSet(super.rowKeySet());
+    }
+
+    @Override
+    public Map<R, Map<C, V>> rowMap() {
+      Function<Map<C, V>, Map<C, V>> wrapper = unmodifiableWrapper();
+      return Collections.unmodifiableMap(Maps.transformValues(super.rowMap(), wrapper));
+    }
+
+    @Override
+    public Collection<V> values() {
+      return Collections.unmodifiableCollection(super.values());
+    }
+    
+    private static final long serialVersionUID = 0;
+  }
+
+  /**
+   * Returns an unmodifiable view of the specified row-sorted table. This method allows modules to
+   * provide users with "read-only" access to internal tables. Query operations on the returned
+   * table "read through" to the specified table, and attemps to modify the returned table, whether
+   * direct or via its collection views, result in an {@code UnsupportedOperationException}.
+   * 
+   * <p>The returned table will be serializable if the specified table is serializable.
+   * 
+   * @param table the row-sorted table for which an unmodifiable view is to be returned
+   * @return an unmodifiable view of the specified table
+   * @since 11.0
+   */
+  public static <R, C, V> RowSortedTable<R, C, V> unmodifiableRowSortedTable(
+      RowSortedTable<R, ? extends C, ? extends V> table) {
+    /*
+     * It's not ? extends R, because it's technically not covariant in R. Specifically,
+     * table.rowMap().comparator() could return a comparator that only works for the ? extends R.
+     * Collections.unmodifiableSortedMap makes the same distinction.
+     */
+    return new UnmodifiableRowSortedMap<R, C, V>(table);
+  }
+  
+  static final class UnmodifiableRowSortedMap<R, C, V> extends UnmodifiableTable<R, C, V>
+      implements RowSortedTable<R, C, V> {
+
+    public UnmodifiableRowSortedMap(RowSortedTable<R, ? extends C, ? extends V> delegate) {
+      super(delegate);
+    }
+
+    @Override
+    protected RowSortedTable<R, C, V> delegate() {
+      return (RowSortedTable<R, C, V>) super.delegate();
+    }
+
+    @Override
+    public SortedMap<R, Map<C, V>> rowMap() {
+      Function<Map<C, V>, Map<C, V>> wrapper = unmodifiableWrapper();
+      return Collections.unmodifiableSortedMap(Maps.transformValues(delegate().rowMap(), wrapper));
+    }
+
+    @Override
+    public SortedSet<R> rowKeySet() {
+      return Collections.unmodifiableSortedSet(delegate().rowKeySet());
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  @SuppressWarnings("unchecked")
+  private static <K, V> Function<Map<K, V>, Map<K, V>> unmodifiableWrapper() {
+    return (Function) UNMODIFIABLE_WRAPPER;
+  }
+
+  private static final Function<? extends Map<?, ?>, ? extends Map<?, ?>> UNMODIFIABLE_WRAPPER =
+      new Function<Map<Object, Object>, Map<Object, Object>>() {
+        @Override
+        public Map<Object, Object> apply(Map<Object, Object> input) {
+          return Collections.unmodifiableMap(input);
+        }
+      };
+}
diff --git a/guava/src/com/google/common/collect/TransformedImmutableList.java b/guava/src/com/google/common/collect/TransformedImmutableList.java
new file mode 100644
index 0000000..d9e8588
--- /dev/null
+++ b/guava/src/com/google/common/collect/TransformedImmutableList.java
@@ -0,0 +1,128 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.List;
+
+import javax.annotation.Nullable;
+
+/**
+ * A transforming wrapper around an ImmutableList. For internal use only. {@link
+ * #transform(Object)} must be functional.
+ *
+ * @author Louis Wasserman
+ */
+@GwtCompatible
+@SuppressWarnings("serial") // uses writeReplace(), not default serialization
+abstract class TransformedImmutableList<D, E> extends ImmutableList<E> {
+  private class TransformedView extends TransformedImmutableList<D, E> {
+    TransformedView(ImmutableList<D> backingList) {
+      super(backingList);
+    }
+
+    @Override E transform(D d) {
+      return TransformedImmutableList.this.transform(d);
+    }
+  }
+
+  private transient final ImmutableList<D> backingList;
+
+  TransformedImmutableList(ImmutableList<D> backingList) {
+    this.backingList = checkNotNull(backingList);
+  }
+
+  abstract E transform(D d);
+
+  @Override public int indexOf(@Nullable Object object) {
+    if (object == null) {
+      return -1;
+    }
+    for (int i = 0; i < size(); i++) {
+      if (get(i).equals(object)) {
+        return i;
+      }
+    }
+    return -1;
+  }
+
+  @Override public int lastIndexOf(@Nullable Object object) {
+    if (object == null) {
+      return -1;
+    }
+    for (int i = size() - 1; i >= 0; i--) {
+      if (get(i).equals(object)) {
+        return i;
+      }
+    }
+    return -1;
+  }
+
+  @Override public E get(int index) {
+    return transform(backingList.get(index));
+  }
+
+  @Override public UnmodifiableListIterator<E> listIterator(int index) {
+    return new AbstractIndexedListIterator<E>(size(), index) {
+      @Override protected E get(int index) {
+        return TransformedImmutableList.this.get(index);
+      }
+    };
+  }
+
+  @Override public int size() {
+    return backingList.size();
+  }
+
+  @Override public ImmutableList<E> subList(int fromIndex, int toIndex) {
+    return new TransformedView(backingList.subList(fromIndex, toIndex));
+  }
+
+  @Override public boolean equals(@Nullable Object obj) {
+    if (obj == this) {
+      return true;
+    }
+    if (obj instanceof List) {
+      List<?> list = (List<?>) obj;
+      return size() == list.size()
+          && Iterators.elementsEqual(iterator(), list.iterator());
+    }
+    return false;
+  }
+
+  @Override public int hashCode() {
+    int hashCode = 1;
+    for (E e : this) {
+      hashCode = 31 * hashCode + (e == null ? 0 : e.hashCode());
+    }
+    return hashCode;
+  }
+
+  @Override public Object[] toArray() {
+    return ObjectArrays.toArrayImpl(this);
+  }
+
+  @Override public <T> T[] toArray(T[] array) {
+    return ObjectArrays.toArrayImpl(this, array);
+  }
+
+  @Override boolean isPartialView() {
+    return true;
+  }
+}
diff --git a/guava/src/com/google/common/collect/TreeBasedTable.java b/guava/src/com/google/common/collect/TreeBasedTable.java
new file mode 100644
index 0000000..d996c27
--- /dev/null
+++ b/guava/src/com/google/common/collect/TreeBasedTable.java
@@ -0,0 +1,376 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Function;
+import com.google.common.base.Supplier;
+
+import java.io.Serializable;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.NoSuchElementException;
+import java.util.Set;
+import java.util.SortedMap;
+import java.util.SortedSet;
+import java.util.TreeMap;
+
+import javax.annotation.Nullable;
+
+/**
+ * Implementation of {@code Table} whose row keys and column keys are ordered
+ * by their natural ordering or by supplied comparators. When constructing a
+ * {@code TreeBasedTable}, you may provide comparators for the row keys and
+ * the column keys, or you may use natural ordering for both.
+ *
+ * <p>The {@link #rowKeySet} method returns a {@link SortedSet} and the {@link
+ * #rowMap} method returns a {@link SortedMap}, instead of the {@link Set} and
+ * {@link Map} specified by the {@link Table} interface.
+ *
+ * <p>The views returned by {@link #column}, {@link #columnKeySet()}, and {@link
+ * #columnMap()} have iterators that don't support {@code remove()}. Otherwise,
+ * all optional operations are supported. Null row keys, columns keys, and
+ * values are not supported.
+ *
+ * <p>Lookups by row key are often faster than lookups by column key, because
+ * the data is stored in a {@code Map<R, Map<C, V>>}. A method call like {@code
+ * column(columnKey).get(rowKey)} still runs quickly, since the row key is
+ * provided. However, {@code column(columnKey).size()} takes longer, since an
+ * iteration across all row keys occurs.
+ *
+ * <p>Because a {@code TreeBasedTable} has unique sorted values for a given
+ * row, both {@code row(rowKey)} and {@code rowMap().get(rowKey)} are {@link
+ * SortedMap} instances, instead of the {@link Map} specified in the {@link
+ * Table} interface.
+ *
+ * <p>Note that this implementation is not synchronized. If multiple threads
+ * access this table concurrently and one of the threads modifies the table, it
+ * must be synchronized externally.
+ *
+ * @author Jared Levy
+ * @author Louis Wasserman
+ * @since 7.0
+ */
+@GwtCompatible(serializable = true)
+@Beta
+public class TreeBasedTable<R, C, V> extends StandardRowSortedTable<R, C, V> {
+  private final Comparator<? super C> columnComparator;
+
+  private static class Factory<C, V>
+      implements Supplier<TreeMap<C, V>>, Serializable {
+    final Comparator<? super C> comparator;
+    Factory(Comparator<? super C> comparator) {
+      this.comparator = comparator;
+    }
+    @Override
+    public TreeMap<C, V> get() {
+      return new TreeMap<C, V>(comparator);
+    }
+    private static final long serialVersionUID = 0;
+  }
+
+  /**
+   * Creates an empty {@code TreeBasedTable} that uses the natural orderings
+   * of both row and column keys.
+   *
+   * <p>The method signature specifies {@code R extends Comparable} with a raw
+   * {@link Comparable}, instead of {@code R extends Comparable<? super R>},
+   * and the same for {@code C}. That's necessary to support classes defined
+   * without generics.
+   */
+  public static <R extends Comparable, C extends Comparable, V>
+      TreeBasedTable<R, C, V> create() {
+    return new TreeBasedTable<R, C, V>(Ordering.natural(),
+        Ordering.natural());
+  }
+
+  /**
+   * Creates an empty {@code TreeBasedTable} that is ordered by the specified
+   * comparators.
+   *
+   * @param rowComparator the comparator that orders the row keys
+   * @param columnComparator the comparator that orders the column keys
+   */
+  public static <R, C, V> TreeBasedTable<R, C, V> create(
+      Comparator<? super R> rowComparator,
+      Comparator<? super C> columnComparator) {
+    checkNotNull(rowComparator);
+    checkNotNull(columnComparator);
+    return new TreeBasedTable<R, C, V>(rowComparator, columnComparator);
+  }
+
+  /**
+   * Creates a {@code TreeBasedTable} with the same mappings and sort order
+   * as the specified {@code TreeBasedTable}.
+   */
+  public static <R, C, V> TreeBasedTable<R, C, V> create(
+      TreeBasedTable<R, C, ? extends V> table) {
+    TreeBasedTable<R, C, V> result
+        = new TreeBasedTable<R, C, V>(
+            table.rowComparator(), table.columnComparator());
+    result.putAll(table);
+    return result;
+  }
+
+  TreeBasedTable(Comparator<? super R> rowComparator,
+      Comparator<? super C> columnComparator) {
+    super(new TreeMap<R, Map<C, V>>(rowComparator),
+        new Factory<C, V>(columnComparator));
+    this.columnComparator = columnComparator;
+  }
+
+  // TODO(jlevy): Move to StandardRowSortedTable?
+
+  /**
+   * Returns the comparator that orders the rows. With natural ordering,
+   * {@link Ordering#natural()} is returned.
+   */
+  public Comparator<? super R> rowComparator() {
+    return rowKeySet().comparator();
+  }
+
+  /**
+   * Returns the comparator that orders the columns. With natural ordering,
+   * {@link Ordering#natural()} is returned.
+   */
+  public Comparator<? super C> columnComparator() {
+    return columnComparator;
+  }
+
+  // TODO(user): make column return a SortedMap
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>Because a {@code TreeBasedTable} has unique sorted values for a given
+   * row, this method returns a {@link SortedMap}, instead of the {@link Map}
+   * specified in the {@link Table} interface.
+   * @since 10.0
+   *     (<a href="http://code.google.com/p/guava-libraries/wiki/Compatibility"
+   *     >mostly source-compatible</a> since 7.0)
+   */
+  @Override
+  public SortedMap<C, V> row(R rowKey) {
+    return new TreeRow(rowKey);
+  }
+
+  private class TreeRow extends Row implements SortedMap<C, V> {
+    @Nullable final C lowerBound;
+    @Nullable final C upperBound;
+
+    TreeRow(R rowKey) {
+      this(rowKey, null, null);
+    }
+
+    TreeRow(R rowKey, @Nullable C lowerBound, @Nullable C upperBound) {
+      super(rowKey);
+      this.lowerBound = lowerBound;
+      this.upperBound = upperBound;
+      checkArgument(lowerBound == null || upperBound == null
+          || compare(lowerBound, upperBound) <= 0);
+    }
+
+    @Override public Comparator<? super C> comparator() {
+      return columnComparator();
+    }
+
+    int compare(Object a, Object b) {
+      // pretend we can compare anything
+      @SuppressWarnings({"rawtypes", "unchecked"})
+      Comparator<Object> cmp = (Comparator) comparator();
+      return cmp.compare(a, b);
+    }
+
+    boolean rangeContains(@Nullable Object o) {
+      return o != null && (lowerBound == null || compare(lowerBound, o) <= 0)
+          && (upperBound == null || compare(upperBound, o) > 0);
+    }
+
+    @Override public SortedMap<C, V> subMap(C fromKey, C toKey) {
+      checkArgument(rangeContains(checkNotNull(fromKey))
+          && rangeContains(checkNotNull(toKey)));
+      return new TreeRow(rowKey, fromKey, toKey);
+    }
+
+    @Override public SortedMap<C, V> headMap(C toKey) {
+      checkArgument(rangeContains(checkNotNull(toKey)));
+      return new TreeRow(rowKey, lowerBound, toKey);
+    }
+
+    @Override public SortedMap<C, V> tailMap(C fromKey) {
+      checkArgument(rangeContains(checkNotNull(fromKey)));
+      return new TreeRow(rowKey, fromKey, upperBound);
+    }
+
+    @Override public C firstKey() {
+      SortedMap<C, V> backing = backingRowMap();
+      if (backing == null) {
+        throw new NoSuchElementException();
+      }
+      return backingRowMap().firstKey();
+    }
+
+    @Override public C lastKey() {
+      SortedMap<C, V> backing = backingRowMap();
+      if (backing == null) {
+        throw new NoSuchElementException();
+      }
+      return backingRowMap().lastKey();
+    }
+
+    transient SortedMap<C, V> wholeRow;
+
+    /*
+     * If the row was previously empty, we check if there's a new row here every
+     * time we're queried.
+     */
+    SortedMap<C, V> wholeRow() {
+      if (wholeRow == null
+          || (wholeRow.isEmpty() && backingMap.containsKey(rowKey))) {
+        wholeRow = (SortedMap<C, V>) backingMap.get(rowKey);
+      }
+      return wholeRow;
+    }
+
+    @Override
+    SortedMap<C, V> backingRowMap() {
+      return (SortedMap<C, V>) super.backingRowMap();
+    }
+
+    @Override
+    SortedMap<C, V> computeBackingRowMap() {
+      SortedMap<C, V> map = wholeRow();
+      if (map != null) {
+        if (lowerBound != null) {
+          map = map.tailMap(lowerBound);
+        }
+        if (upperBound != null) {
+          map = map.headMap(upperBound);
+        }
+        return map;
+      }
+      return null;
+    }
+
+    @Override
+    void maintainEmptyInvariant() {
+      if (wholeRow() != null && wholeRow.isEmpty()) {
+        backingMap.remove(rowKey);
+        wholeRow = null;
+        backingRowMap = null;
+      }
+    }
+
+    @Override public boolean containsKey(Object key) {
+      return rangeContains(key) && super.containsKey(key);
+    }
+
+    @Override public V put(C key, V value) {
+      checkArgument(rangeContains(checkNotNull(key)));
+      return super.put(key, value);
+    }
+  }
+
+  // rowKeySet() and rowMap() are defined here so they appear in the Javadoc.
+
+  @Override public SortedSet<R> rowKeySet() {
+    return super.rowKeySet();
+  }
+
+  @Override public SortedMap<R, Map<C, V>> rowMap() {
+    return super.rowMap();
+  }
+
+  // Overriding so NullPointerTester test passes.
+
+  @Override public boolean contains(
+      @Nullable Object rowKey, @Nullable Object columnKey) {
+    return super.contains(rowKey, columnKey);
+  }
+
+  @Override public boolean containsColumn(@Nullable Object columnKey) {
+    return super.containsColumn(columnKey);
+  }
+
+  @Override public boolean containsRow(@Nullable Object rowKey) {
+    return super.containsRow(rowKey);
+  }
+
+  @Override public boolean containsValue(@Nullable Object value) {
+    return super.containsValue(value);
+  }
+
+  @Override public V get(@Nullable Object rowKey, @Nullable Object columnKey) {
+    return super.get(rowKey, columnKey);
+  }
+
+  @Override public boolean equals(@Nullable Object obj) {
+    return super.equals(obj);
+  }
+
+  @Override public V remove(
+      @Nullable Object rowKey, @Nullable Object columnKey) {
+    return super.remove(rowKey, columnKey);
+  }
+
+  /**
+   * Overridden column iterator to return columns values in globally sorted
+   * order.
+   */
+  @Override
+  Iterator<C> createColumnKeyIterator() {
+    final Comparator<? super C> comparator = columnComparator();
+
+    final Iterator<C> merged =
+        Iterators.mergeSorted(Iterables.transform(backingMap.values(),
+            new Function<Map<C, V>, Iterator<C>>() {
+              @Override
+              public Iterator<C> apply(Map<C, V> input) {
+                return input.keySet().iterator();
+              }
+            }), comparator);
+
+    return new AbstractIterator<C>() {
+      C lastValue;
+
+      @Override
+      protected C computeNext() {
+        while (merged.hasNext()) {
+          C next = merged.next();
+          boolean duplicate =
+              lastValue != null && comparator.compare(next, lastValue) == 0;
+
+          // Keep looping till we find a non-duplicate value.
+          if (!duplicate) {
+            lastValue = next;
+            return lastValue;
+          }
+        }
+
+        lastValue = null; // clear reference to unused data
+        return endOfData();
+      }
+    };
+  }
+
+  private static final long serialVersionUID = 0;
+}
diff --git a/guava/src/com/google/common/collect/TreeMultimap.java b/guava/src/com/google/common/collect/TreeMultimap.java
new file mode 100644
index 0000000..efd11be
--- /dev/null
+++ b/guava/src/com/google/common/collect/TreeMultimap.java
@@ -0,0 +1,197 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.SortedMap;
+import java.util.SortedSet;
+import java.util.TreeMap;
+import java.util.TreeSet;
+
+/**
+ * Implementation of {@code Multimap} whose keys and values are ordered by
+ * their natural ordering or by supplied comparators. In all cases, this
+ * implementation uses {@link Comparable#compareTo} or {@link
+ * Comparator#compare} instead of {@link Object#equals} to determine
+ * equivalence of instances.
+ *
+ * <p><b>Warning:</b> The comparators or comparables used must be <i>consistent
+ * with equals</i> as explained by the {@link Comparable} class specification.
+ * Otherwise, the resulting multiset will violate the general contract of {@link
+ * SetMultimap}, which it is specified in terms of {@link Object#equals}.
+ *
+ * <p>The collections returned by {@code keySet} and {@code asMap} iterate
+ * through the keys according to the key comparator ordering or the natural
+ * ordering of the keys. Similarly, {@code get}, {@code removeAll}, and {@code
+ * replaceValues} return collections that iterate through the values according
+ * to the value comparator ordering or the natural ordering of the values. The
+ * collections generated by {@code entries}, {@code keys}, and {@code values}
+ * iterate across the keys according to the above key ordering, and for each
+ * key they iterate across the values according to the value ordering.
+ *
+ * <p>The multimap does not store duplicate key-value pairs. Adding a new
+ * key-value pair equal to an existing key-value pair has no effect.
+ *
+ * <p>Null keys and values are permitted (provided, of course, that the
+ * respective comparators support them). All optional multimap methods are
+ * supported, and all returned views are modifiable.
+ *
+ * <p>This class is not threadsafe when any concurrent operations update the
+ * multimap. Concurrent read operations will work correctly. To allow concurrent
+ * update operations, wrap your multimap with a call to {@link
+ * Multimaps#synchronizedSortedSetMultimap}.
+ *
+ * @author Jared Levy
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible(serializable = true, emulated = true)
+public class TreeMultimap<K, V> extends AbstractSortedSetMultimap<K, V> {
+  private transient Comparator<? super K> keyComparator;
+  private transient Comparator<? super V> valueComparator;
+
+  /**
+   * Creates an empty {@code TreeMultimap} ordered by the natural ordering of
+   * its keys and values.
+   */
+  public static <K extends Comparable, V extends Comparable>
+      TreeMultimap<K, V> create() {
+    return new TreeMultimap<K, V>(Ordering.natural(), Ordering.natural());
+  }
+
+  /**
+   * Creates an empty {@code TreeMultimap} instance using explicit comparators.
+   * Neither comparator may be null; use {@link Ordering#natural()} to specify
+   * natural order.
+   *
+   * @param keyComparator the comparator that determines the key ordering
+   * @param valueComparator the comparator that determines the value ordering
+   */
+  public static <K, V> TreeMultimap<K, V> create(
+      Comparator<? super K> keyComparator,
+      Comparator<? super V> valueComparator) {
+    return new TreeMultimap<K, V>(checkNotNull(keyComparator),
+        checkNotNull(valueComparator));
+  }
+
+  /**
+   * Constructs a {@code TreeMultimap}, ordered by the natural ordering of its
+   * keys and values, with the same mappings as the specified multimap.
+   *
+   * @param multimap the multimap whose contents are copied to this multimap
+   */
+  public static <K extends Comparable, V extends Comparable>
+      TreeMultimap<K, V> create(Multimap<? extends K, ? extends V> multimap) {
+    return new TreeMultimap<K, V>(Ordering.natural(), Ordering.natural(),
+        multimap);
+  }
+
+  TreeMultimap(Comparator<? super K> keyComparator,
+      Comparator<? super V> valueComparator) {
+    super(new TreeMap<K, Collection<V>>(keyComparator));
+    this.keyComparator = keyComparator;
+    this.valueComparator = valueComparator;
+  }
+
+  private TreeMultimap(Comparator<? super K> keyComparator,
+      Comparator<? super V> valueComparator,
+      Multimap<? extends K, ? extends V> multimap) {
+    this(keyComparator, valueComparator);
+    putAll(multimap);
+  }
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>Creates an empty {@code TreeSet} for a collection of values for one key.
+   *
+   * @return a new {@code TreeSet} containing a collection of values for one
+   *     key
+   */
+  @Override SortedSet<V> createCollection() {
+    return new TreeSet<V>(valueComparator);
+  }
+
+  /**
+   * Returns the comparator that orders the multimap keys.
+   */
+  public Comparator<? super K> keyComparator() {
+    return keyComparator;
+  }
+
+  @Override
+  public Comparator<? super V> valueComparator() {
+    return valueComparator;
+  }
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>Because a {@code TreeMultimap} has unique sorted keys, this method
+   * returns a {@link SortedSet}, instead of the {@link java.util.Set} specified
+   * in the {@link Multimap} interface.
+   */
+  @Override public SortedSet<K> keySet() {
+    return (SortedSet<K>) super.keySet();
+  }
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>Because a {@code TreeMultimap} has unique sorted keys, this method
+   * returns a {@link SortedMap}, instead of the {@link java.util.Map} specified
+   * in the {@link Multimap} interface.
+   */
+  @Override public SortedMap<K, Collection<V>> asMap() {
+    return (SortedMap<K, Collection<V>>) super.asMap();
+  }
+
+  /**
+   * @serialData key comparator, value comparator, number of distinct keys, and
+   *     then for each distinct key: the key, number of values for that key, and
+   *     key values
+   */
+  @GwtIncompatible("java.io.ObjectOutputStream")
+  private void writeObject(ObjectOutputStream stream) throws IOException {
+    stream.defaultWriteObject();
+    stream.writeObject(keyComparator());
+    stream.writeObject(valueComparator());
+    Serialization.writeMultimap(this, stream);
+  }
+
+  @GwtIncompatible("java.io.ObjectInputStream")
+  @SuppressWarnings("unchecked") // reading data stored by writeObject
+  private void readObject(ObjectInputStream stream)
+      throws IOException, ClassNotFoundException {
+    stream.defaultReadObject();
+    keyComparator = checkNotNull((Comparator<? super K>) stream.readObject());
+    valueComparator = checkNotNull((Comparator<? super V>) stream.readObject());
+    setMap(new TreeMap<K, Collection<V>>(keyComparator));
+    Serialization.populateMultimap(this, stream);
+  }
+
+  @GwtIncompatible("not needed in emulated source")
+  private static final long serialVersionUID = 0;
+}
diff --git a/guava/src/com/google/common/collect/TreeMultiset.java b/guava/src/com/google/common/collect/TreeMultiset.java
new file mode 100644
index 0000000..d44a4bb
--- /dev/null
+++ b/guava/src/com/google/common/collect/TreeMultiset.java
@@ -0,0 +1,571 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkState;
+import static com.google.common.collect.BstSide.LEFT;
+import static com.google.common.collect.BstSide.RIGHT;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+import java.util.Comparator;
+import java.util.ConcurrentModificationException;
+import java.util.Iterator;
+
+import javax.annotation.Nullable;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.primitives.Ints;
+
+/**
+ * A multiset which maintains the ordering of its elements, according to either
+ * their natural order or an explicit {@link Comparator}. In all cases, this
+ * implementation uses {@link Comparable#compareTo} or {@link
+ * Comparator#compare} instead of {@link Object#equals} to determine
+ * equivalence of instances.
+ *
+ * <p><b>Warning:</b> The comparison must be <i>consistent with equals</i> as
+ * explained by the {@link Comparable} class specification. Otherwise, the
+ * resulting multiset will violate the {@link java.util.Collection} contract,
+ * which is specified in terms of {@link Object#equals}.
+ *
+ * @author Louis Wasserman
+ * @author Jared Levy
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible(emulated = true)
+public final class TreeMultiset<E> extends AbstractSortedMultiset<E>
+    implements Serializable {
+
+  /**
+   * Creates a new, empty multiset, sorted according to the elements' natural
+   * order. All elements inserted into the multiset must implement the
+   * {@code Comparable} interface. Furthermore, all such elements must be
+   * <i>mutually comparable</i>: {@code e1.compareTo(e2)} must not throw a
+   * {@code ClassCastException} for any elements {@code e1} and {@code e2} in
+   * the multiset. If the user attempts to add an element to the multiset that
+   * violates this constraint (for example, the user attempts to add a string
+   * element to a set whose elements are integers), the {@code add(Object)}
+   * call will throw a {@code ClassCastException}.
+   *
+   * <p>The type specification is {@code <E extends Comparable>}, instead of the
+   * more specific {@code <E extends Comparable<? super E>>}, to support
+   * classes defined without generics.
+   */
+  public static <E extends Comparable> TreeMultiset<E> create() {
+    return new TreeMultiset<E>(Ordering.natural());
+  }
+
+  /**
+   * Creates a new, empty multiset, sorted according to the specified
+   * comparator. All elements inserted into the multiset must be <i>mutually
+   * comparable</i> by the specified comparator: {@code comparator.compare(e1,
+   * e2)} must not throw a {@code ClassCastException} for any elements {@code
+   * e1} and {@code e2} in the multiset. If the user attempts to add an element
+   * to the multiset that violates this constraint, the {@code add(Object)} call
+   * will throw a {@code ClassCastException}.
+   *
+   * @param comparator the comparator that will be used to sort this multiset. A
+   *     null value indicates that the elements' <i>natural ordering</i> should
+   *     be used.
+   */
+  @SuppressWarnings("unchecked")
+  public static <E> TreeMultiset<E> create(
+      @Nullable Comparator<? super E> comparator) {
+    return (comparator == null)
+           ? new TreeMultiset<E>((Comparator) Ordering.natural())
+           : new TreeMultiset<E>(comparator);
+  }
+
+  /**
+   * Creates an empty multiset containing the given initial elements, sorted
+   * according to the elements' natural order.
+   *
+   * <p>This implementation is highly efficient when {@code elements} is itself
+   * a {@link Multiset}.
+   *
+   * <p>The type specification is {@code <E extends Comparable>}, instead of the
+   * more specific {@code <E extends Comparable<? super E>>}, to support
+   * classes defined without generics.
+   */
+  public static <E extends Comparable> TreeMultiset<E> create(
+      Iterable<? extends E> elements) {
+    TreeMultiset<E> multiset = create();
+    Iterables.addAll(multiset, elements);
+    return multiset;
+  }
+
+  /**
+   * Returns an iterator over the elements contained in this collection.
+   */
+  @Override
+  public Iterator<E> iterator() {
+    // Needed to avoid Javadoc bug.
+    return super.iterator();
+  }
+
+  private TreeMultiset(Comparator<? super E> comparator) {
+    super(comparator);
+    this.range = GeneralRange.all(comparator);
+    this.rootReference = new Reference<Node<E>>();
+  }
+
+  private TreeMultiset(GeneralRange<E> range, Reference<Node<E>> root) {
+    super(range.comparator());
+    this.range = range;
+    this.rootReference = root;
+  }
+
+  @SuppressWarnings("unchecked")
+  E checkElement(Object o) {
+    return (E) o;
+  }
+
+  private transient final GeneralRange<E> range;
+
+  private transient final Reference<Node<E>> rootReference;
+
+  static final class Reference<T> {
+    T value;
+
+    public Reference() {}
+
+    public T get() {
+      return value;
+    }
+
+    public boolean compareAndSet(T expected, T newValue) {
+      if (value == expected) {
+        value = newValue;
+        return true;
+      }
+      return false;
+    }
+  }
+
+  @Override
+  int distinctElements() {
+    Node<E> root = rootReference.get();
+    return Ints.checkedCast(BstRangeOps.totalInRange(distinctAggregate(), range, root));
+  }
+
+  @Override
+  public int size() {
+    Node<E> root = rootReference.get();
+    return Ints.saturatedCast(BstRangeOps.totalInRange(sizeAggregate(), range, root));
+  }
+
+  @Override
+  public int count(@Nullable Object element) {
+    try {
+      E e = checkElement(element);
+      if (range.contains(e)) {
+        Node<E> node = BstOperations.seek(comparator(), rootReference.get(), e);
+        return countOrZero(node);
+      }
+      return 0;
+    } catch (ClassCastException e) {
+      return 0;
+    } catch (NullPointerException e) {
+      return 0;
+    }
+  }
+
+  private int mutate(@Nullable E e, MultisetModifier modifier) {
+    BstMutationRule<E, Node<E>> mutationRule = BstMutationRule.createRule(
+        modifier,
+        BstCountBasedBalancePolicies.
+          <E, Node<E>>singleRebalancePolicy(distinctAggregate()),
+        nodeFactory());
+    BstMutationResult<E, Node<E>> mutationResult =
+        BstOperations.mutate(comparator(), mutationRule, rootReference.get(), e);
+    if (!rootReference.compareAndSet(
+        mutationResult.getOriginalRoot(), mutationResult.getChangedRoot())) {
+      throw new ConcurrentModificationException();
+    }
+    Node<E> original = mutationResult.getOriginalTarget();
+    return countOrZero(original);
+  }
+
+  @Override
+  public int add(E element, int occurrences) {
+    checkElement(element);
+    if (occurrences == 0) {
+      return count(element);
+    }
+    checkArgument(range.contains(element));
+    return mutate(element, new AddModifier(occurrences));
+  }
+
+  @Override
+  public int remove(@Nullable Object element, int occurrences) {
+    if (element == null) {
+      return 0;
+    } else if (occurrences == 0) {
+      return count(element);
+    }
+    try {
+      E e = checkElement(element);
+      return range.contains(e) ? mutate(e, new RemoveModifier(occurrences)) : 0;
+    } catch (ClassCastException e) {
+      return 0;
+    }
+  }
+
+  @Override
+  public boolean setCount(E element, int oldCount, int newCount) {
+    checkElement(element);
+    checkArgument(range.contains(element));
+    return mutate(element, new ConditionalSetCountModifier(oldCount, newCount))
+        == oldCount;
+  }
+
+  @Override
+  public int setCount(E element, int count) {
+    checkElement(element);
+    checkArgument(range.contains(element));
+    return mutate(element, new SetCountModifier(count));
+  }
+
+  private BstPathFactory<Node<E>, BstInOrderPath<Node<E>>> pathFactory() {
+    return BstInOrderPath.inOrderFactory();
+  }
+
+  @Override
+  Iterator<Entry<E>> entryIterator() {
+    Node<E> root = rootReference.get();
+    final BstInOrderPath<Node<E>> startingPath =
+        BstRangeOps.furthestPath(range, LEFT, pathFactory(), root);
+    return iteratorInDirection(startingPath, RIGHT);
+  }
+
+  @Override
+  Iterator<Entry<E>> descendingEntryIterator() {
+    Node<E> root = rootReference.get();
+    final BstInOrderPath<Node<E>> startingPath =
+        BstRangeOps.furthestPath(range, RIGHT, pathFactory(), root);
+    return iteratorInDirection(startingPath, LEFT);
+  }
+
+  private Iterator<Entry<E>> iteratorInDirection(
+      @Nullable BstInOrderPath<Node<E>> start, final BstSide direction) {
+    final Iterator<BstInOrderPath<Node<E>>> pathIterator =
+        new AbstractLinkedIterator<BstInOrderPath<Node<E>>>(start) {
+          @Override
+          protected BstInOrderPath<Node<E>> computeNext(BstInOrderPath<Node<E>> previous) {
+            if (!previous.hasNext(direction)) {
+              return null;
+            }
+            BstInOrderPath<Node<E>> next = previous.next(direction);
+            // TODO(user): only check against one side
+            return range.contains(next.getTip().getKey()) ? next : null;
+          }
+        };
+    return new Iterator<Entry<E>>() {
+      E toRemove = null;
+
+      @Override
+      public boolean hasNext() {
+        return pathIterator.hasNext();
+      }
+
+      @Override
+      public Entry<E> next() {
+        BstInOrderPath<Node<E>> path = pathIterator.next();
+        return new LiveEntry(
+            toRemove = path.getTip().getKey(), path.getTip().elemCount());
+      }
+
+      @Override
+      public void remove() {
+        checkState(toRemove != null);
+        setCount(toRemove, 0);
+        toRemove = null;
+      }
+    };
+  }
+
+  class LiveEntry extends Multisets.AbstractEntry<E> {
+    private Node<E> expectedRoot;
+    private final E element;
+    private int count;
+
+    private LiveEntry(E element, int count) {
+      this.expectedRoot = rootReference.get();
+      this.element = element;
+      this.count = count;
+    }
+
+    @Override
+    public E getElement() {
+      return element;
+    }
+
+    @Override
+    public int getCount() {
+      if (rootReference.get() == expectedRoot) {
+        return count;
+      } else {
+        // check for updates
+        expectedRoot = rootReference.get();
+        return count = TreeMultiset.this.count(element);
+      }
+    }
+  }
+
+  @Override
+  public void clear() {
+    Node<E> root = rootReference.get();
+    Node<E> cleared = BstRangeOps.minusRange(range,
+        BstCountBasedBalancePolicies.<E, Node<E>>fullRebalancePolicy(distinctAggregate()),
+        nodeFactory(), root);
+    if (!rootReference.compareAndSet(root, cleared)) {
+      throw new ConcurrentModificationException();
+    }
+  }
+
+  @Override
+  public SortedMultiset<E> headMultiset(E upperBound, BoundType boundType) {
+    checkNotNull(upperBound);
+    return new TreeMultiset<E>(
+        range.intersect(GeneralRange.upTo(comparator, upperBound, boundType)), rootReference);
+  }
+
+  @Override
+  public SortedMultiset<E> tailMultiset(E lowerBound, BoundType boundType) {
+    checkNotNull(lowerBound);
+    return new TreeMultiset<E>(
+        range.intersect(GeneralRange.downTo(comparator, lowerBound, boundType)), rootReference);
+  }
+
+  /**
+   * {@inheritDoc}
+   *
+   * @since 11.0
+   */
+  @Override
+  public Comparator<? super E> comparator() {
+    return super.comparator();
+  }
+
+  private static final class Node<E> extends BstNode<E, Node<E>> implements Serializable {
+    private final long size;
+    private final int distinct;
+
+    private Node(E key, int elemCount, @Nullable Node<E> left,
+        @Nullable Node<E> right) {
+      super(key, left, right);
+      checkArgument(elemCount > 0);
+      this.size = (long) elemCount + sizeOrZero(left) + sizeOrZero(right);
+      this.distinct = 1 + distinctOrZero(left) + distinctOrZero(right);
+    }
+
+    int elemCount() {
+      long result = size - sizeOrZero(childOrNull(LEFT))
+          - sizeOrZero(childOrNull(RIGHT));
+      return Ints.checkedCast(result);
+    }
+
+    private Node(E key, int elemCount) {
+      this(key, elemCount, null, null);
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  private static long sizeOrZero(@Nullable Node<?> node) {
+    return (node == null) ? 0 : node.size;
+  }
+
+  private static int distinctOrZero(@Nullable Node<?> node) {
+    return (node == null) ? 0 : node.distinct;
+  }
+
+  private static int countOrZero(@Nullable Node<?> entry) {
+    return (entry == null) ? 0 : entry.elemCount();
+  }
+
+  @SuppressWarnings("unchecked")
+  private BstAggregate<Node<E>> distinctAggregate() {
+    return (BstAggregate) DISTINCT_AGGREGATE;
+  }
+
+  private static final BstAggregate<Node<Object>> DISTINCT_AGGREGATE =
+      new BstAggregate<Node<Object>>() {
+    @Override
+    public int entryValue(Node<Object> entry) {
+      return 1;
+    }
+
+    @Override
+    public long treeValue(@Nullable Node<Object> tree) {
+      return distinctOrZero(tree);
+    }
+  };
+
+  @SuppressWarnings("unchecked")
+  private BstAggregate<Node<E>> sizeAggregate() {
+    return (BstAggregate) SIZE_AGGREGATE;
+  }
+
+  private static final BstAggregate<Node<Object>> SIZE_AGGREGATE =
+      new BstAggregate<Node<Object>>() {
+        @Override
+        public int entryValue(Node<Object> entry) {
+          return entry.elemCount();
+        }
+
+        @Override
+        public long treeValue(@Nullable Node<Object> tree) {
+          return sizeOrZero(tree);
+        }
+      };
+
+  @SuppressWarnings("unchecked")
+  private BstNodeFactory<Node<E>> nodeFactory() {
+    return (BstNodeFactory) NODE_FACTORY;
+  }
+
+  private static final BstNodeFactory<Node<Object>> NODE_FACTORY =
+      new BstNodeFactory<Node<Object>>() {
+        @Override
+        public Node<Object> createNode(Node<Object> source, @Nullable Node<Object> left,
+            @Nullable Node<Object> right) {
+          return new Node<Object>(source.getKey(), source.elemCount(), left, right);
+        }
+      };
+
+  private abstract class MultisetModifier implements BstModifier<E, Node<E>> {
+    abstract int newCount(int oldCount);
+
+    @Nullable
+    @Override
+    public BstModificationResult<Node<E>> modify(E key, @Nullable Node<E> originalEntry) {
+      int oldCount = countOrZero(originalEntry);
+      int newCount = newCount(oldCount);
+      if (oldCount == newCount) {
+        return BstModificationResult.identity(originalEntry);
+      } else if (newCount == 0) {
+        return BstModificationResult.rebalancingChange(originalEntry, null);
+      } else if (oldCount == 0) {
+        return BstModificationResult.rebalancingChange(null, new Node<E>(key, newCount));
+      } else {
+        return BstModificationResult.rebuildingChange(originalEntry,
+            new Node<E>(originalEntry.getKey(), newCount));
+      }
+    }
+  }
+
+  private final class AddModifier extends MultisetModifier {
+    private final int countToAdd;
+
+    private AddModifier(int countToAdd) {
+      checkArgument(countToAdd > 0);
+      this.countToAdd = countToAdd;
+    }
+
+    @Override
+    int newCount(int oldCount) {
+      checkArgument(countToAdd <= Integer.MAX_VALUE - oldCount, "Cannot add this many elements");
+      return oldCount + countToAdd;
+    }
+  }
+
+  private final class RemoveModifier extends MultisetModifier {
+    private final int countToRemove;
+
+    private RemoveModifier(int countToRemove) {
+      checkArgument(countToRemove > 0);
+      this.countToRemove = countToRemove;
+    }
+
+    @Override
+    int newCount(int oldCount) {
+      return Math.max(0, oldCount - countToRemove);
+    }
+  }
+
+  private final class SetCountModifier extends MultisetModifier {
+    private final int countToSet;
+
+    private SetCountModifier(int countToSet) {
+      checkArgument(countToSet >= 0);
+      this.countToSet = countToSet;
+    }
+
+    @Override
+    int newCount(int oldCount) {
+      return countToSet;
+    }
+  }
+
+  private final class ConditionalSetCountModifier extends MultisetModifier {
+    private final int expectedCount;
+    private final int setCount;
+
+    private ConditionalSetCountModifier(int expectedCount, int setCount) {
+      checkArgument(setCount >= 0 & expectedCount >= 0);
+      this.expectedCount = expectedCount;
+      this.setCount = setCount;
+    }
+
+    @Override
+    int newCount(int oldCount) {
+      return (oldCount == expectedCount) ? setCount : oldCount;
+    }
+  }
+
+  /*
+   * TODO(jlevy): Decide whether entrySet() should return entries with an
+   * equals() method that calls the comparator to compare the two keys. If that
+   * change is made, AbstractMultiset.equals() can simply check whether two
+   * multisets have equal entry sets.
+   */
+
+  /**
+   * @serialData the comparator, the number of distinct elements, the first
+   *     element, its count, the second element, its count, and so on
+   */
+  @GwtIncompatible("java.io.ObjectOutputStream")
+  private void writeObject(ObjectOutputStream stream) throws IOException {
+    stream.defaultWriteObject();
+    stream.writeObject(elementSet().comparator());
+    Serialization.writeMultiset(this, stream);
+  }
+
+  @GwtIncompatible("java.io.ObjectInputStream")
+  private void readObject(ObjectInputStream stream)
+      throws IOException, ClassNotFoundException {
+    stream.defaultReadObject();
+    @SuppressWarnings("unchecked") // reading data stored by writeObject
+    Comparator<? super E> comparator = (Comparator<? super E>) stream.readObject();
+    Serialization.getFieldSetter(AbstractSortedMultiset.class, "comparator").set(this, comparator);
+    Serialization.getFieldSetter(TreeMultiset.class, "range").set(this,
+        GeneralRange.all(comparator));
+    Serialization.getFieldSetter(TreeMultiset.class, "rootReference").set(this,
+        new Reference<Node<E>>());
+    Serialization.populateMultiset(this, stream);
+  }
+
+  @GwtIncompatible("not needed in emulated source")
+  private static final long serialVersionUID = 1;
+}
diff --git a/guava/src/com/google/common/collect/UnmodifiableIterator.java b/guava/src/com/google/common/collect/UnmodifiableIterator.java
new file mode 100644
index 0000000..5cff61b
--- /dev/null
+++ b/guava/src/com/google/common/collect/UnmodifiableIterator.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Iterator;
+
+/**
+ * An iterator that does not support {@link #remove}.
+ *
+ * @author Jared Levy
+ * @since 2.0 (imported from Google Collections Library)
+ */
+@GwtCompatible
+public abstract class UnmodifiableIterator<E> implements Iterator<E> {
+  /** Constructor for use by subclasses. */
+  protected UnmodifiableIterator() {}
+  
+  /**
+   * Guaranteed to throw an exception and leave the underlying data unmodified.
+   *
+   * @throws UnsupportedOperationException always
+   */
+  @Override
+  public final void remove() {
+    throw new UnsupportedOperationException();
+  }
+}
diff --git a/guava/src/com/google/common/collect/UnmodifiableListIterator.java b/guava/src/com/google/common/collect/UnmodifiableListIterator.java
new file mode 100644
index 0000000..fa71bdc
--- /dev/null
+++ b/guava/src/com/google/common/collect/UnmodifiableListIterator.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.ListIterator;
+
+/**
+ * A list iterator that does not support {@link #remove}, {@link #add}, or
+ * {@link #set}.
+ *
+ * @since 7.0
+ * @author Louis Wasserman
+ */
+@GwtCompatible
+public abstract class UnmodifiableListIterator<E>
+    extends UnmodifiableIterator<E> implements ListIterator<E> {
+  /** Constructor for use by subclasses. */
+  protected UnmodifiableListIterator() {}
+
+  /**
+   * Guaranteed to throw an exception and leave the underlying data unmodified.
+   *
+   * @throws UnsupportedOperationException always
+   */
+  @Override public final void add(E e) {
+    throw new UnsupportedOperationException();
+  }
+
+  /**
+   * Guaranteed to throw an exception and leave the underlying data unmodified.
+   *
+   * @throws UnsupportedOperationException always
+   */
+  @Override public final void set(E e) {
+    throw new UnsupportedOperationException();
+  }
+}
diff --git a/guava/src/com/google/common/collect/UsingToStringOrdering.java b/guava/src/com/google/common/collect/UsingToStringOrdering.java
new file mode 100644
index 0000000..d1c9feb
--- /dev/null
+++ b/guava/src/com/google/common/collect/UsingToStringOrdering.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.io.Serializable;
+
+/** An ordering that uses the reverse of the natural order of the values. */
+@GwtCompatible(serializable = true)
+final class UsingToStringOrdering
+    extends Ordering<Object> implements Serializable {
+  static final UsingToStringOrdering INSTANCE = new UsingToStringOrdering();
+
+  @Override public int compare(Object left, Object right) {
+    return left.toString().compareTo(right.toString());
+  }
+
+  // preserve singleton-ness, so equals() and hashCode() work correctly
+  private Object readResolve() {
+    return INSTANCE;
+  }
+
+  @Override public String toString() {
+    return "Ordering.usingToString()";
+  }
+
+  private UsingToStringOrdering() {}
+
+  private static final long serialVersionUID = 0;
+}
diff --git a/guava/src/com/google/common/collect/WellBehavedMap.java b/guava/src/com/google/common/collect/WellBehavedMap.java
new file mode 100644
index 0000000..e8aa1f6
--- /dev/null
+++ b/guava/src/com/google/common/collect/WellBehavedMap.java
@@ -0,0 +1,91 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.collect;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Workaround for 
+ * <a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6312706">
+ * EnumMap bug</a>. If you want to pass an {@code EnumMap}, with the
+ * intention of using its {@code entrySet()} method, you should
+ * wrap the {@code EnumMap} in this class instead. 
+ * 
+ * @author Dimitris Andreou
+ */
+@GwtCompatible
+final class WellBehavedMap<K, V> extends ForwardingMap<K, V> {
+  private final Map<K, V> delegate;
+  private Set<Entry<K, V>> entrySet;
+  
+  private WellBehavedMap(Map<K, V> delegate) {
+    this.delegate = delegate;
+  }
+  
+  /**
+   * Wraps the given map into a {@code WellBehavedEntriesMap}, which
+   * intercepts its {@code entrySet()} method by taking the 
+   * {@code Set<K> keySet()} and transforming it to
+   * {@code Set<Entry<K, V>>}. All other invocations are delegated as-is.  
+   */
+  static <K, V> WellBehavedMap<K, V> wrap(Map<K, V> delegate) {
+    return new WellBehavedMap<K, V>(delegate);
+  }
+
+  @Override protected Map<K, V> delegate() {
+    return delegate;
+  }
+
+  @Override public Set<Entry<K, V>> entrySet() {
+    Set<Entry<K, V>> es = entrySet;
+    if (es != null) {
+      return es;
+    }
+    return entrySet = Sets.transform(
+        delegate.keySet(), new KeyToEntryConverter<K, V>(this));
+  }
+  
+  private static class KeyToEntryConverter<K, V> 
+      extends Sets.InvertibleFunction<K, Map.Entry<K, V>> {
+    final Map<K, V> map;
+    
+    KeyToEntryConverter(Map<K, V> map) {
+      this.map = map;
+    }
+
+    @Override public Map.Entry<K, V> apply(final K key) {
+      return new AbstractMapEntry<K, V>() {
+        @Override public K getKey() {
+          return key;
+        }
+        @Override public V getValue() {
+          return map.get(key);
+        }
+        @Override public V setValue(V value) {
+          return map.put(key, value);
+        }
+      };
+    }
+
+    @Override public K invert(Map.Entry<K, V> entry) {
+      return entry.getKey();
+    }
+  }
+}
diff --git a/guava/src/com/google/common/collect/package-info.java b/guava/src/com/google/common/collect/package-info.java
new file mode 100644
index 0000000..f5c833c
--- /dev/null
+++ b/guava/src/com/google/common/collect/package-info.java
@@ -0,0 +1,225 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+/**
+ * This package contains generic collection interfaces and implementations, and
+ * other utilities for working with collections. It is a part of the open-source
+ * <a href="http://guava-libraries.googlecode.com">Guava libraries</a>.
+ *
+ * <h2>Collection Types</h2>
+ *
+ * <dl>
+ * <dt>{@link com.google.common.collect.BiMap}
+ * <dd>An extension of {@link java.util.Map} that guarantees the uniqueness of
+ *     its values as well as that of its keys. This is sometimes called an
+ *     "invertible map," since the restriction on values enables it to support
+ *     an {@linkplain com.google.common.collect.BiMap#inverse inverse view} --
+ *     which is another instance of {@code BiMap}.
+ *
+ * <dt>{@link com.google.common.collect.Multiset}
+ * <dd>An extension of {@link java.util.Collection} that may contain duplicate
+ *     values like a {@link java.util.List}, yet has order-independent equality
+ *     like a {@link java.util.Set}.  One typical use for a multiset is to
+ *     represent a histogram.
+ *
+ * <dt>{@link com.google.common.collect.Multimap}
+ * <dd>A new type, which is similar to {@link java.util.Map}, but may contain
+ *     multiple entries with the same key. Some behaviors of
+ *     {@link com.google.common.collect.Multimap} are left unspecified and are
+ *     provided only by the subtypes mentioned below.
+ *
+ * <dt>{@link com.google.common.collect.ListMultimap}
+ * <dd>An extension of {@link com.google.common.collect.Multimap} which permits
+ *     duplicate entries, supports random access of values for a particular key,
+ *     and has <i>partially order-dependent equality</i> as defined by
+ *     {@link com.google.common.collect.ListMultimap#equals(Object)}. {@code
+ *     ListMultimap} takes its name from the fact that the {@linkplain
+ *     com.google.common.collect.ListMultimap#get collection of values}
+ *     associated with a given key fulfills the {@link java.util.List} contract.
+ *
+ * <dt>{@link com.google.common.collect.SetMultimap}
+ * <dd>An extension of {@link com.google.common.collect.Multimap} which has
+ *     order-independent equality and does not allow duplicate entries; that is,
+ *     while a key may appear twice in a {@code SetMultimap}, each must map to a
+ *     different value.  {@code SetMultimap} takes its name from the fact that
+ *     the {@linkplain com.google.common.collect.SetMultimap#get collection of
+ *     values} associated with a given key fulfills the {@link java.util.Set}
+ *     contract.
+ *
+ * <dt>{@link com.google.common.collect.SortedSetMultimap}
+ * <dd>An extension of {@link com.google.common.collect.SetMultimap} for which
+ *     the {@linkplain com.google.common.collect.SortedSetMultimap#get
+ *     collection values} associated with a given key is a
+ *     {@link java.util.SortedSet}.
+ *
+ * <dt>{@link com.google.common.collect.Table}
+ * <dd>A new type, which is similar to {@link java.util.Map}, but which indexes
+ *     its values by an ordered pair of keys, a row key and column key.
+ *
+ * <dt>{@link com.google.common.collect.ClassToInstanceMap}
+ * <dd>An extension of {@link java.util.Map} that associates a raw type with an
+ *     instance of that type.
+ * </dl>
+ *
+ * <h2>Collection Implementations</h2>
+ *
+ * <h3>of {@link java.util.List}</h3>
+ * <ul>
+ * <li>{@link com.google.common.collect.ImmutableList}
+ * </ul>
+ *
+ * <h3>of {@link java.util.Set}</h3>
+ * <ul>
+ * <li>{@link com.google.common.collect.ImmutableSet}
+ * <li>{@link com.google.common.collect.ImmutableSortedSet}
+ * <li>{@link com.google.common.collect.ContiguousSet} (see {@code Ranges})
+ * </ul>
+ *
+ * <h3>of {@link java.util.Map}</h3>
+ * <ul>
+ * <li>{@link com.google.common.collect.ImmutableMap}
+ * <li>{@link com.google.common.collect.ImmutableSortedMap}
+ * <li>{@link com.google.common.collect.MapMaker}
+ * </ul>
+ *
+ * <h3>of {@link com.google.common.collect.BiMap}</h3>
+ * <ul>
+ * <li>{@link com.google.common.collect.ImmutableBiMap}
+ * <li>{@link com.google.common.collect.HashBiMap}
+ * <li>{@link com.google.common.collect.EnumBiMap}
+ * <li>{@link com.google.common.collect.EnumHashBiMap}
+ * </ul>
+ *
+ * <h3>of {@link com.google.common.collect.Multiset}</h3>
+ * <ul>
+ * <li>{@link com.google.common.collect.ImmutableMultiset}
+ * <li>{@link com.google.common.collect.HashMultiset}
+ * <li>{@link com.google.common.collect.LinkedHashMultiset}
+ * <li>{@link com.google.common.collect.TreeMultiset}
+ * <li>{@link com.google.common.collect.EnumMultiset}
+ * <li>{@link com.google.common.collect.ConcurrentHashMultiset}
+ * </ul>
+ *
+ * <h3>of {@link com.google.common.collect.Multimap}</h3>
+ * <ul>
+ * <li>{@link com.google.common.collect.ImmutableMultimap}
+ * <li>{@link com.google.common.collect.ImmutableListMultimap}
+ * <li>{@link com.google.common.collect.ImmutableSetMultimap}
+ * <li>{@link com.google.common.collect.ArrayListMultimap}
+ * <li>{@link com.google.common.collect.HashMultimap}
+ * <li>{@link com.google.common.collect.TreeMultimap}
+ * <li>{@link com.google.common.collect.LinkedHashMultimap}
+ * <li>{@link com.google.common.collect.LinkedListMultimap}
+ * </ul>
+ *
+ * <h3>of {@link com.google.common.collect.Table}</h3>
+ * <ul>
+ * <li>{@link com.google.common.collect.ImmutableTable}
+ * <li>{@link com.google.common.collect.ArrayTable}
+ * <li>{@link com.google.common.collect.HashBasedTable}
+ * <li>{@link com.google.common.collect.TreeBasedTable}
+ * </ul>
+ *
+ * <h3>of {@link com.google.common.collect.ClassToInstanceMap}</h3>
+ * <ul>
+ * <li>{@link com.google.common.collect.ImmutableClassToInstanceMap}
+ * <li>{@link com.google.common.collect.MutableClassToInstanceMap}
+ * </ul>
+ *
+ * <h2>Classes of static utility methods</h2>
+ *
+ * <ul>
+ * <li>{@link com.google.common.collect.Collections2}
+ * <li>{@link com.google.common.collect.Iterators}
+ * <li>{@link com.google.common.collect.Iterables}
+ * <li>{@link com.google.common.collect.Lists}
+ * <li>{@link com.google.common.collect.Maps}
+ * <li>{@link com.google.common.collect.Sets}
+ * <li>{@link com.google.common.collect.Multisets}
+ * <li>{@link com.google.common.collect.Multimaps}
+ * <li>{@link com.google.common.collect.SortedMaps}
+ * <li>{@link com.google.common.collect.Tables}
+ * <li>{@link com.google.common.collect.ObjectArrays}
+ * </ul>
+ *
+ * <h2>Comparison</h2>
+ *
+ * <ul>
+ * <li>{@link com.google.common.collect.Ordering}
+ * <li>{@link com.google.common.collect.ComparisonChain}
+ * </ul>
+ *
+ * <h2>Abstract implementations</h2>
+ *
+ * <ul>
+ * <li>{@link com.google.common.collect.AbstractIterator}
+ * <li>{@link com.google.common.collect.AbstractLinkedIterator}
+ * <li>{@link com.google.common.collect.ImmutableCollection}
+ * <li>{@link com.google.common.collect.UnmodifiableIterator}
+ * <li>{@link com.google.common.collect.UnmodifiableListIterator}
+ * </ul>
+ *
+ * <h2>Ranges</h2>
+ *
+ * <ul>
+ * <li>{@link com.google.common.collect.Range}
+ * <li>{@link com.google.common.collect.Ranges}
+ * <li>{@link com.google.common.collect.DiscreteDomain}
+ * <li>{@link com.google.common.collect.DiscreteDomains}
+ * <li>{@link com.google.common.collect.ContiguousSet}
+ * </ul>
+ *
+ * <h2>Other</h2>
+ *
+ * <ul>
+ * <li>{@link com.google.common.collect.Interner},
+ *     {@link com.google.common.collect.Interners}
+ * <li>{@link com.google.common.collect.Constraint},
+ *     {@link com.google.common.collect.Constraints}
+ * <li>{@link com.google.common.collect.MapConstraint},
+ *     {@link com.google.common.collect.MapConstraints}
+ * <li>{@link com.google.common.collect.MapDifference},
+ *     {@link com.google.common.collect.SortedMapDifference}
+ * <li>{@link com.google.common.collect.MinMaxPriorityQueue}
+ * <li>{@link com.google.common.collect.PeekingIterator}
+ * </ul>
+ *
+ * <h2>Forwarding collections</h2>
+ *
+ * <ul>
+ * <li>{@link com.google.common.collect.ForwardingCollection}
+ * <li>{@link com.google.common.collect.ForwardingConcurrentMap}
+ * <li>{@link com.google.common.collect.ForwardingIterator}
+ * <li>{@link com.google.common.collect.ForwardingList}
+ * <li>{@link com.google.common.collect.ForwardingListIterator}
+ * <li>{@link com.google.common.collect.ForwardingListMultimap}
+ * <li>{@link com.google.common.collect.ForwardingMap}
+ * <li>{@link com.google.common.collect.ForwardingMapEntry}
+ * <li>{@link com.google.common.collect.ForwardingMultimap}
+ * <li>{@link com.google.common.collect.ForwardingMultiset}
+ * <li>{@link com.google.common.collect.ForwardingObject}
+ * <li>{@link com.google.common.collect.ForwardingQueue}
+ * <li>{@link com.google.common.collect.ForwardingSet}
+ * <li>{@link com.google.common.collect.ForwardingSetMultimap}
+ * <li>{@link com.google.common.collect.ForwardingSortedMap}
+ * <li>{@link com.google.common.collect.ForwardingSortedMultiset}
+ * <li>{@link com.google.common.collect.ForwardingSortedSet}
+ * <li>{@link com.google.common.collect.ForwardingSortedSetMultimap}
+ * <li>{@link com.google.common.collect.ForwardingTable}
+ * </ul>
+ */
+@javax.annotation.ParametersAreNonnullByDefault
+package com.google.common.collect;
diff --git a/guava/src/com/google/common/eventbus/AllowConcurrentEvents.java b/guava/src/com/google/common/eventbus/AllowConcurrentEvents.java
new file mode 100644
index 0000000..5699d73
--- /dev/null
+++ b/guava/src/com/google/common/eventbus/AllowConcurrentEvents.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.eventbus;
+
+import com.google.common.annotations.Beta;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Marks an event handling method as being thread-safe.  This annotation
+ * indicates that EventBus may invoke the event handler simultaneously from
+ * multiple threads.
+ *
+ * <p>This does not mark the method as an event handler, and so should be used
+ * in combination with {@link Subscribe}.
+ *
+ * @author Cliff Biffle
+ * @since 10.0
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.METHOD)
+@Beta
+public @interface AllowConcurrentEvents {
+}
diff --git a/guava/src/com/google/common/eventbus/AnnotatedHandlerFinder.java b/guava/src/com/google/common/eventbus/AnnotatedHandlerFinder.java
new file mode 100644
index 0000000..7153c66
--- /dev/null
+++ b/guava/src/com/google/common/eventbus/AnnotatedHandlerFinder.java
@@ -0,0 +1,97 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.eventbus;
+
+import com.google.common.collect.HashMultimap;
+import com.google.common.collect.Multimap;
+import java.lang.reflect.Method;
+
+/**
+ * A {@link HandlerFindingStrategy} for collecting all event handler methods
+ * that are marked with the {@link Subscribe} annotation.
+ *
+ * @author Cliff Biffle
+ */
+class AnnotatedHandlerFinder implements HandlerFindingStrategy {
+
+  /**
+   * {@inheritDoc}
+   *
+   * This implementation finds all methods marked with a {@link Subscribe}
+   * annotation.
+   */
+  @Override
+  public Multimap<Class<?>, EventHandler> findAllHandlers(Object listener) {
+    Multimap<Class<?>, EventHandler> methodsInListener =
+        HashMultimap.create();
+    Class clazz = listener.getClass();
+    while (clazz != null) {
+      for (Method method : clazz.getMethods()) {
+        Subscribe annotation = method.getAnnotation(Subscribe.class);
+
+        if (annotation != null) {
+          Class<?>[] parameterTypes = method.getParameterTypes();
+          if (parameterTypes.length != 1) {
+            throw new IllegalArgumentException(
+                "Method " + method + " has @Subscribe annotation, but requires " +
+                parameterTypes.length + " arguments.  Event handler methods " +
+                "must require a single argument.");
+          }
+          Class<?> eventType = parameterTypes[0];
+          EventHandler handler = makeHandler(listener, method);
+
+          methodsInListener.put(eventType, handler);
+        }
+      }
+      clazz = clazz.getSuperclass();
+    }
+    return methodsInListener;
+  }
+
+  /**
+   * Creates an {@code EventHandler} for subsequently calling {@code method} on
+   * {@code listener}.
+   * Selects an EventHandler implementation based on the annotations on
+   * {@code method}.
+   *
+   * @param listener  object bearing the event handler method.
+   * @param method  the event handler method to wrap in an EventHandler.
+   * @return an EventHandler that will call {@code method} on {@code listener}
+   *         when invoked.
+   */
+  private static EventHandler makeHandler(Object listener, Method method) {
+    EventHandler wrapper;
+    if (methodIsDeclaredThreadSafe(method)) {
+      wrapper = new EventHandler(listener, method);
+    } else {
+      wrapper = new SynchronizedEventHandler(listener, method);
+    }
+    return wrapper;
+  }
+
+  /**
+   * Checks whether {@code method} is thread-safe, as indicated by the
+   * {@link AllowConcurrentEvents} annotation.
+   *
+   * @param method  handler method to check.
+   * @return {@code true} if {@code handler} is marked as thread-safe,
+   *         {@code false} otherwise.
+   */
+  private static boolean methodIsDeclaredThreadSafe(Method method) {
+    return method.getAnnotation(AllowConcurrentEvents.class) != null;
+  }
+}
diff --git a/guava/src/com/google/common/eventbus/AsyncEventBus.java b/guava/src/com/google/common/eventbus/AsyncEventBus.java
new file mode 100644
index 0000000..8018cee
--- /dev/null
+++ b/guava/src/com/google/common/eventbus/AsyncEventBus.java
@@ -0,0 +1,99 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.eventbus;
+
+import com.google.common.annotations.Beta;
+import java.util.concurrent.ConcurrentLinkedQueue;
+import java.util.concurrent.Executor;
+
+/**
+ * An {@link EventBus} that takes the Executor of your choice and uses it to
+ * dispatch events, allowing dispatch to occur asynchronously.
+ *
+ * @author Cliff Biffle
+ * @since 10.0
+ */
+@Beta
+public class AsyncEventBus extends EventBus {
+  private final Executor executor;
+
+  /** the queue of events is shared across all threads */
+  private final ConcurrentLinkedQueue<EventWithHandler> eventsToDispatch =
+      new ConcurrentLinkedQueue<EventWithHandler>();
+
+  /**
+   * Creates a new AsyncEventBus that will use {@code executor} to dispatch
+   * events.  Assigns {@code identifier} as the bus's name for logging purposes.
+   *
+   * @param identifier short name for the bus, for logging purposes.
+   * @param executor   Executor to use to dispatch events. It is the caller's
+   *        responsibility to shut down the executor after the last event has
+   *        been posted to this event bus.
+   */
+  public AsyncEventBus(String identifier, Executor executor) {
+    super(identifier);
+    this.executor = executor;
+  }
+
+  /**
+   * Creates a new AsyncEventBus that will use {@code executor} to dispatch
+   * events.
+   *
+   * @param executor Executor to use to dispatch events. It is the caller's
+   *        responsibility to shut down the executor after the last event has
+   *        been posted to this event bus.
+   */
+  public AsyncEventBus(Executor executor) {
+    this.executor = executor;
+  }
+
+  @Override
+  protected void enqueueEvent(Object event, EventHandler handler) {
+    eventsToDispatch.offer(new EventWithHandler(event, handler));
+  }
+
+  /**
+   * Dispatch {@code events} in the order they were posted, regardless of
+   * the posting thread.
+   */
+  @Override
+  protected void dispatchQueuedEvents() {
+    while (true) {
+      EventWithHandler eventWithHandler = eventsToDispatch.poll();
+      if (eventWithHandler == null) {
+        break;
+      }
+
+      dispatch(eventWithHandler.event, eventWithHandler.handler);
+    }
+  }
+
+  /**
+   * Calls the {@link #executor} to dispatch {@code event} to {@code handler}.
+   */
+  @Override
+  protected void dispatch(final Object event, final EventHandler handler) {
+    executor.execute(new Runnable() {
+          @Override
+          @SuppressWarnings("synthetic-access")
+          public void run() {
+            AsyncEventBus.super.dispatch(event, handler);
+          }
+        });
+  }
+
+}
diff --git a/guava/src/com/google/common/eventbus/DeadEvent.java b/guava/src/com/google/common/eventbus/DeadEvent.java
new file mode 100644
index 0000000..8265d5a
--- /dev/null
+++ b/guava/src/com/google/common/eventbus/DeadEvent.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.eventbus;
+
+import com.google.common.annotations.Beta;
+
+/**
+ * Wraps an event that was posted, but which had no subscribers and thus could
+ * not be delivered.
+ *
+ * <p>Subscribing a DeadEvent handler is useful for debugging or logging, as it
+ * can detect misconfigurations in a system's event distribution.
+ *
+ * @author Cliff Biffle
+ * @since 10.0
+ */
+@Beta
+public class DeadEvent {
+
+  private final Object source;
+  private final Object event;
+
+  /**
+   * Creates a new DeadEvent.
+   *
+   * @param source  object broadcasting the DeadEvent (generally the
+   *                {@link EventBus}).
+   * @param event   the event that could not be delivered.
+   */
+  public DeadEvent(Object source, Object event) {
+    this.source = source;
+    this.event = event;
+  }
+
+  /**
+   * Returns the object that originated this event (<em>not</em> the object that
+   * originated the wrapped event).  This is generally an {@link EventBus}.
+   *
+   * @return the source of this event.
+   */
+  public Object getSource() {
+    return source;
+  }
+
+  /**
+   * Returns the wrapped, 'dead' event, which the system was unable to deliver
+   * to any registered handler.
+   *
+   * @return the 'dead' event that could not be delivered.
+   */
+  public Object getEvent() {
+    return event;
+  }
+
+}
diff --git a/guava/src/com/google/common/eventbus/EventBus.java b/guava/src/com/google/common/eventbus/EventBus.java
new file mode 100644
index 0000000..a962fa8
--- /dev/null
+++ b/guava/src/com/google/common/eventbus/EventBus.java
@@ -0,0 +1,369 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.eventbus;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Supplier;
+import com.google.common.base.Throwables;
+import com.google.common.cache.CacheBuilder;
+import com.google.common.cache.CacheLoader;
+import com.google.common.cache.LoadingCache;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Multimap;
+import com.google.common.collect.Multimaps;
+import com.google.common.collect.SetMultimap;
+import com.google.common.collect.Sets;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentLinkedQueue;
+import java.util.concurrent.CopyOnWriteArraySet;
+import java.util.concurrent.ExecutionException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * Dispatches events to listeners, and provides ways for listeners to register
+ * themselves.
+ *
+ * <p>The EventBus allows publish-subscribe-style communication between
+ * components without requiring the components to explicitly register with one
+ * another (and thus be aware of each other).  It is designed exclusively to
+ * replace traditional Java in-process event distribution using explicit
+ * registration. It is <em>not</em> a general-purpose publish-subscribe system,
+ * nor is it intended for interprocess communication.
+ *
+ * <h2>Receiving Events</h2>
+ * To receive events, an object should:<ol>
+ * <li>Expose a public method, known as the <i>event handler</i>, which accepts
+ *     a single argument of the type of event desired;</li>
+ * <li>Mark it with a {@link Subscribe} annotation;</li>
+ * <li>Pass itself to an EventBus instance's {@link #register(Object)} method.
+ *     </li>
+ * </ol>
+ *
+ * <h2>Posting Events</h2>
+ * To post an event, simply provide the event object to the
+ * {@link #post(Object)} method.  The EventBus instance will determine the type
+ * of event and route it to all registered listeners.
+ *
+ * <p>Events are routed based on their type &mdash; an event will be delivered
+ * to any handler for any type to which the event is <em>assignable.</em>  This
+ * includes implemented interfaces, all superclasses, and all interfaces
+ * implemented by superclasses.
+ *
+ * <p>When {@code post} is called, all registered handlers for an event are run
+ * in sequence, so handlers should be reasonably quick.  If an event may trigger
+ * an extended process (such as a database load), spawn a thread or queue it for
+ * later.  (For a convenient way to do this, use an {@link AsyncEventBus}.)
+ *
+ * <h2>Handler Methods</h2>
+ * Event handler methods must accept only one argument: the event.
+ *
+ * <p>Handlers should not, in general, throw.  If they do, the EventBus will
+ * catch and log the exception.  This is rarely the right solution for error
+ * handling and should not be relied upon; it is intended solely to help find
+ * problems during development.
+ *
+ * <p>The EventBus guarantees that it will not call a handler method from
+ * multiple threads simultaneously, unless the method explicitly allows it by
+ * bearing the {@link AllowConcurrentEvents} annotation.  If this annotation is
+ * not present, handler methods need not worry about being reentrant, unless
+ * also called from outside the EventBus.
+ *
+ * <h2>Dead Events</h2>
+ * If an event is posted, but no registered handlers can accept it, it is
+ * considered "dead."  To give the system a second chance to handle dead events,
+ * they are wrapped in an instance of {@link DeadEvent} and reposted.
+ *
+ * <p>If a handler for a supertype of all events (such as Object) is registered,
+ * no event will ever be considered dead, and no DeadEvents will be generated.
+ * Accordingly, while DeadEvent extends {@link Object}, a handler registered to
+ * receive any Object will never receive a DeadEvent.
+ *
+ * <p>This class is safe for concurrent use.
+ *
+ * @author Cliff Biffle
+ * @since 10.0
+ */
+@Beta
+public class EventBus {
+
+  /**
+   * All registered event handlers, indexed by event type.
+   */
+  private final SetMultimap<Class<?>, EventHandler> handlersByType =
+      Multimaps.newSetMultimap(new ConcurrentHashMap<Class<?>, Collection<EventHandler>>(),
+          new Supplier<Set<EventHandler>>() {
+            @Override
+            public Set<EventHandler> get() {
+              return new CopyOnWriteArraySet<EventHandler>();
+            }
+          });
+
+  /**
+   * Logger for event dispatch failures.  Named by the fully-qualified name of
+   * this class, followed by the identifier provided at construction.
+   */
+  private final Logger logger;
+
+  /**
+   * Strategy for finding handler methods in registered objects.  Currently,
+   * only the {@link AnnotatedHandlerFinder} is supported, but this is
+   * encapsulated for future expansion.
+   */
+  private final HandlerFindingStrategy finder = new AnnotatedHandlerFinder();
+
+  /** queues of events for the current thread to dispatch */
+  private final ThreadLocal<ConcurrentLinkedQueue<EventWithHandler>>
+      eventsToDispatch =
+      new ThreadLocal<ConcurrentLinkedQueue<EventWithHandler>>() {
+    @Override protected ConcurrentLinkedQueue<EventWithHandler> initialValue() {
+      return new ConcurrentLinkedQueue<EventWithHandler>();
+    }
+  };
+
+  /** true if the current thread is currently dispatching an event */
+  private final ThreadLocal<Boolean> isDispatching =
+      new ThreadLocal<Boolean>() {
+    @Override protected Boolean initialValue() {
+      return false;
+    }
+  };
+
+  /**
+   * A thread-safe cache for flattenHierarch(). The Class class is immutable.
+   */
+  private LoadingCache<Class<?>, Set<Class<?>>> flattenHierarchyCache =
+      CacheBuilder.newBuilder()
+          .weakKeys()
+          .build(new CacheLoader<Class<?>, Set<Class<?>>>() {
+            @Override
+            public Set<Class<?>> load(Class<?> concreteClass) throws Exception {
+              List<Class<?>> parents = Lists.newLinkedList();
+              Set<Class<?>> classes = Sets.newHashSet();
+
+              parents.add(concreteClass);
+
+              while (!parents.isEmpty()) {
+                Class<?> clazz = parents.remove(0);
+                classes.add(clazz);
+
+                Class<?> parent = clazz.getSuperclass();
+                if (parent != null) {
+                  parents.add(parent);
+                }
+
+                for (Class<?> iface : clazz.getInterfaces()) {
+                  parents.add(iface);
+                }
+              }
+
+              return classes;
+            }
+          });
+
+  /**
+   * Creates a new EventBus named "default".
+   */
+  public EventBus() {
+    this("default");
+  }
+
+  /**
+   * Creates a new EventBus with the given {@code identifier}.
+   *
+   * @param identifier  a brief name for this bus, for logging purposes.  Should
+   *                    be a valid Java identifier.
+   */
+  public EventBus(String identifier) {
+    logger = Logger.getLogger(EventBus.class.getName() + "." + identifier);
+  }
+
+  /**
+   * Registers all handler methods on {@code object} to receive events.
+   * Handler methods are selected and classified using this EventBus's
+   * {@link HandlerFindingStrategy}; the default strategy is the
+   * {@link AnnotatedHandlerFinder}.
+   *
+   * @param object  object whose handler methods should be registered.
+   */
+  public void register(Object object) {
+    handlersByType.putAll(finder.findAllHandlers(object));
+  }
+
+  /**
+   * Unregisters all handler methods on a registered {@code object}.
+   *
+   * @param object  object whose handler methods should be unregistered.
+   * @throws IllegalArgumentException if the object was not previously registered.
+   */
+  public void unregister(Object object) {
+    Multimap<Class<?>, EventHandler> methodsInListener = finder.findAllHandlers(object);
+    for (Entry<Class<?>, Collection<EventHandler>> entry : methodsInListener.asMap().entrySet()) {
+      Set<EventHandler> currentHandlers = getHandlersForEventType(entry.getKey());
+      Collection<EventHandler> eventMethodsInListener = entry.getValue();
+      
+      if (currentHandlers == null || !currentHandlers.containsAll(entry.getValue())) {
+        throw new IllegalArgumentException(
+            "missing event handler for an annotated method. Is " + object + " registered?");
+      }
+      currentHandlers.removeAll(eventMethodsInListener);
+    }
+  }
+
+  /**
+   * Posts an event to all registered handlers.  This method will return
+   * successfully after the event has been posted to all handlers, and
+   * regardless of any exceptions thrown by handlers.
+   *
+   * <p>If no handlers have been subscribed for {@code event}'s class, and
+   * {@code event} is not already a {@link DeadEvent}, it will be wrapped in a
+   * DeadEvent and reposted.
+   *
+   * @param event  event to post.
+   */
+  public void post(Object event) {
+    Set<Class<?>> dispatchTypes = flattenHierarchy(event.getClass());
+
+    boolean dispatched = false;
+    for (Class<?> eventType : dispatchTypes) {
+      Set<EventHandler> wrappers = getHandlersForEventType(eventType);
+
+      if (wrappers != null && !wrappers.isEmpty()) {
+        dispatched = true;
+        for (EventHandler wrapper : wrappers) {
+          enqueueEvent(event, wrapper);
+        }
+      }
+    }
+
+    if (!dispatched && !(event instanceof DeadEvent)) {
+      post(new DeadEvent(this, event));
+    }
+
+    dispatchQueuedEvents();
+  }
+
+  /**
+   * Queue the {@code event} for dispatch during
+   * {@link #dispatchQueuedEvents()}. Events are queued in-order of occurrence
+   * so they can be dispatched in the same order.
+   */
+  protected void enqueueEvent(Object event, EventHandler handler) {
+    eventsToDispatch.get().offer(new EventWithHandler(event, handler));
+  }
+
+  /**
+   * Drain the queue of events to be dispatched. As the queue is being drained,
+   * new events may be posted to the end of the queue.
+   */
+  protected void dispatchQueuedEvents() {
+    // don't dispatch if we're already dispatching, that would allow reentrancy
+    // and out-of-order events. Instead, leave the events to be dispatched
+    // after the in-progress dispatch is complete.
+    if (isDispatching.get()) {
+      return;
+    }
+
+    isDispatching.set(true);
+    try {
+      while (true) {
+        EventWithHandler eventWithHandler = eventsToDispatch.get().poll();
+        if (eventWithHandler == null) {
+          break;
+        }
+
+        dispatch(eventWithHandler.event, eventWithHandler.handler);
+      }
+    } finally {
+      isDispatching.set(false);
+    }
+  }
+
+  /**
+   * Dispatches {@code event} to the handler in {@code wrapper}.  This method
+   * is an appropriate override point for subclasses that wish to make
+   * event delivery asynchronous.
+   *
+   * @param event  event to dispatch.
+   * @param wrapper  wrapper that will call the handler.
+   */
+  protected void dispatch(Object event, EventHandler wrapper) {
+    try {
+      wrapper.handleEvent(event);
+    } catch (InvocationTargetException e) {
+      logger.log(Level.SEVERE,
+          "Could not dispatch event: " + event + " to handler " + wrapper, e);
+    }
+  }
+
+  /**
+   * Retrieves a mutable set of the currently registered handlers for
+   * {@code type}.  If no handlers are currently registered for {@code type},
+   * this method may either return {@code null} or an empty set.
+   *
+   * @param type  type of handlers to retrieve.
+   * @return currently registered handlers, or {@code null}.
+   */
+  Set<EventHandler> getHandlersForEventType(Class<?> type) {
+    return handlersByType.get(type);
+  }
+
+  /**
+   * Creates a new Set for insertion into the handler map.  This is provided
+   * as an override point for subclasses. The returned set should support
+   * concurrent access.
+   *
+   * @return a new, mutable set for handlers.
+   */
+  protected Set<EventHandler> newHandlerSet() {
+    return new CopyOnWriteArraySet<EventHandler>();
+  }
+
+  /**
+   * Flattens a class's type hierarchy into a set of Class objects.  The set
+   * will include all superclasses (transitively), and all interfaces
+   * implemented by these superclasses.
+   *
+   * @param concreteClass  class whose type hierarchy will be retrieved.
+   * @return {@code clazz}'s complete type hierarchy, flattened and uniqued.
+   */
+  @VisibleForTesting
+  Set<Class<?>> flattenHierarchy(Class<?> concreteClass) {
+    try {
+      return flattenHierarchyCache.get(concreteClass);
+    } catch (ExecutionException e) {
+      throw Throwables.propagate(e.getCause());
+    }
+  }
+
+  /** simple struct representing an event and it's handler */
+  static class EventWithHandler {
+    final Object event;
+    final EventHandler handler;
+    public EventWithHandler(Object event, EventHandler handler) {
+      this.event = event;
+      this.handler = handler;
+    }
+  }
+}
diff --git a/guava/src/com/google/common/eventbus/EventHandler.java b/guava/src/com/google/common/eventbus/EventHandler.java
new file mode 100644
index 0000000..be89973
--- /dev/null
+++ b/guava/src/com/google/common/eventbus/EventHandler.java
@@ -0,0 +1,108 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.eventbus;
+
+import com.google.common.base.Preconditions;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+/**
+ * Wraps a single-argument 'handler' method on a specific object.
+ *
+ * <p>This class only verifies the suitability of the method and event type if
+ * something fails.  Callers are expected to verify their uses of this class.
+ *
+ * <p>Two EventHandlers are equivalent when they refer to the same method on the
+ * same object (not class).   This property is used to ensure that no handler
+ * method is registered more than once.
+ *
+ * @author Cliff Biffle
+ */
+class EventHandler {
+
+  /** Object sporting the handler method. */
+  private final Object target;
+  /** Handler method. */
+  private final Method method;
+
+  /**
+   * Creates a new EventHandler to wrap {@code method} on @{code target}.
+   *
+   * @param target  object to which the method applies.
+   * @param method  handler method.
+   */
+  EventHandler(Object target, Method method) {
+    Preconditions.checkNotNull(target,
+        "EventHandler target cannot be null.");
+    Preconditions.checkNotNull(method, "EventHandler method cannot be null.");
+
+    this.target = target;
+    this.method = method;
+    method.setAccessible(true);
+  }
+
+  /**
+   * Invokes the wrapped handler method to handle {@code event}.
+   *
+   * @param event  event to handle
+   * @throws InvocationTargetException  if the wrapped method throws any
+   *     {@link Throwable} that is not an {@link Error} ({@code Error}s are
+   *     propagated as-is).
+   */
+  public void handleEvent(Object event) throws InvocationTargetException {
+    try {
+      method.invoke(target, new Object[] { event });
+    } catch (IllegalArgumentException e) {
+      throw new Error("Method rejected target/argument: " + event, e);
+    } catch (IllegalAccessException e) {
+      throw new Error("Method became inaccessible: " + event, e);
+    } catch (InvocationTargetException e) {
+      if (e.getCause() instanceof Error) {
+        throw (Error) e.getCause();
+      }
+      throw e;
+    }
+  }
+
+  @Override public String toString() {
+    return "[wrapper " + method + "]";
+  }
+
+  @Override public int hashCode() {
+    final int PRIME = 31;
+    return (PRIME + method.hashCode()) * PRIME + target.hashCode();
+  }
+
+  @Override public boolean equals(Object obj) {
+    if(this == obj) {
+      return true;
+    }
+
+    if(obj == null) {
+      return false;
+    }
+
+    if(getClass() != obj.getClass()) {
+      return false;
+    }
+
+    final EventHandler other = (EventHandler) obj;
+
+    return method.equals(other.method) && target == other.target;
+  }
+
+}
diff --git a/guava/src/com/google/common/eventbus/HandlerFindingStrategy.java b/guava/src/com/google/common/eventbus/HandlerFindingStrategy.java
new file mode 100644
index 0000000..7144203
--- /dev/null
+++ b/guava/src/com/google/common/eventbus/HandlerFindingStrategy.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.eventbus;
+
+import com.google.common.collect.Multimap;
+
+/**
+ * A method for finding event handler methods in objects, for use by
+ * {@link EventBus}.
+ *
+ * @author Cliff Biffle
+ */
+interface HandlerFindingStrategy {
+
+  /**
+   * Finds all suitable event handler methods in {@code source}, organizes them
+   * by the type of event they handle, and wraps them in {@link EventHandler}s.
+   *
+   * @param source  object whose handlers are desired.
+   * @return EventHandler objects for each handler method, organized by event
+   *         type.
+   *
+   * @throws IllegalArgumentException if {@code source} is not appropriate for
+   *         this strategy (in ways that this interface does not define).
+   */
+  Multimap<Class<?>, EventHandler> findAllHandlers(Object source);
+
+}
diff --git a/guava/src/com/google/common/eventbus/Subscribe.java b/guava/src/com/google/common/eventbus/Subscribe.java
new file mode 100644
index 0000000..568c1c0
--- /dev/null
+++ b/guava/src/com/google/common/eventbus/Subscribe.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.eventbus;
+
+import com.google.common.annotations.Beta;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Marks a method as an event handler, as used by
+ * {@link AnnotatedHandlerFinder} and {@link EventBus}.
+ *
+ * <p>The type of event will be indicated by the method's first (and only)
+ * parameter.  If this annotation is applied to methods with zero parameters,
+ * or more than one parameter, the object containing the method will not be able
+ * to register for event delivery from the {@link EventBus}.
+ *
+ * <p>Unless also annotated with @{@link AllowConcurrentEvents}, event handler
+ * methods will be invoked serially by each event bus that they are registered
+ * with.
+ *
+ * @author Cliff Biffle
+ * @since 10.0
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.METHOD)
+@Beta
+public @interface Subscribe {
+}
diff --git a/guava/src/com/google/common/eventbus/SynchronizedEventHandler.java b/guava/src/com/google/common/eventbus/SynchronizedEventHandler.java
new file mode 100644
index 0000000..2792704
--- /dev/null
+++ b/guava/src/com/google/common/eventbus/SynchronizedEventHandler.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.eventbus;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+/**
+ * Wraps a single-argument 'handler' method on a specific object, and ensures
+ * that only one thread may enter the method at a time.
+ *
+ * <p>Beyond synchronization, this class behaves identically to
+ * {@link EventHandler}.
+ *
+ * @author Cliff Biffle
+ */
+class SynchronizedEventHandler extends EventHandler {
+  /**
+   * Creates a new SynchronizedEventHandler to wrap {@code method} on
+   * {@code target}.
+   *
+   * @param target  object to which the method applies.
+   * @param method  handler method.
+   */
+  public SynchronizedEventHandler(Object target, Method method) {
+    super(target, method);
+  }
+
+  @Override public synchronized void handleEvent(Object event)
+      throws InvocationTargetException {
+    super.handleEvent(event);
+  }
+
+}
diff --git a/guava/src/com/google/common/eventbus/package-info.java b/guava/src/com/google/common/eventbus/package-info.java
new file mode 100644
index 0000000..0c83104
--- /dev/null
+++ b/guava/src/com/google/common/eventbus/package-info.java
@@ -0,0 +1,264 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+/**
+ * The EventBus allows publish-subscribe-style communication between components
+ * without requiring the components to explicitly register with one another
+ * (and thus be aware of each other).  It is designed exclusively to replace
+ * traditional Java in-process event distribution using explicit registration.
+ * It is <em>not</em> a general-purpose publish-subscribe system, nor is it
+ * intended for interprocess communication.
+ *
+ * <h2>One-Minute Guide</h2>
+ *
+ * Converting an existing EventListener-based system to use the EventBus is
+ * easy.
+ *
+ * <h3>For Listeners</h3>
+ * To listen for a specific flavor of event (say, a CustomerChangeEvent)...
+ * <ul>
+ * <li><strong>...in traditional Java events:</strong> implement an interface
+ *     defined with the event &mdash; such as CustomerChangeEventListener.</li>
+ * <li><strong>...with EventBus:</strong> create a method that accepts
+ *     CustomerChangeEvent as its sole argument, and mark it with the
+ *     {@link com.google.common.eventbus.Subscribe} annotation.</li>
+ * </ul>
+ *
+ * <p>To register your listener methods with the event producers...
+ * <ul>
+ * <li><strong>...in traditional Java events:</strong> pass your object to each
+ *     producer's {@code registerCustomerChangeEventListener} method.  These
+ *     methods are rarely defined in common interfaces, so in addition to
+ *     knowing every possible producer, you must also know its type.</li>
+ * <li><strong>...with EventBus:</strong> pass your object to the
+ *     {@link com.google.common.eventbus.EventBus#register(Object)} method on an
+ *     EventBus.  You'll need to
+ *     make sure that your object shares an EventBus instance with the event
+ *     producers.</li>
+ * </ul>
+ *
+ * <p>To listen for a common event supertype (such as EventObject or Object)...
+ * <ul>
+ * <li><strong>...in traditional Java events:</strong> not easy.</li>
+ * <li><strong>...with EventBus:</strong> events are automatically dispatched to
+ *     listeners of any supertype, allowing listeners for interface types
+ *     or "wildcard listeners" for Object.</li>
+ * </ul>
+ *
+ * <p>To listen for and detect events that were dispatched without listeners...
+ * <ul>
+ * <li><strong>...in traditional Java events:</strong> add code to each
+ *     event-dispatching method (perhaps using AOP).</li>
+ * <li><strong>...with EventBus:</strong> subscribe to {@link
+ *     com.google.common.eventbus.DeadEvent}.  The
+ *     EventBus will notify you of any events that were posted but not
+ *     delivered.  (Handy for debugging.)</li>
+ * </ul>
+ *
+ * <h3>For Producers</h3>
+ * To keep track of listeners to your events...
+ * <ul>
+ * <li><strong>...in traditional Java events:</strong> write code to manage
+ *     a list of listeners to your object, including synchronization, or use a
+ *     utility class like EventListenerList.</li>
+ * <li><strong>...with EventBus:</strong> EventBus does this for you.</li>
+ * </ul>
+ *
+ * <p>To dispatch an event to listeners...
+ * <ul>
+ * <li><strong>...in traditional Java events:</strong> write a method to
+ *     dispatch events to each event listener, including error isolation and
+ *     (if desired) asynchronicity.</li>
+ * <li><strong>...with EventBus:</strong> pass the event object to an EventBus's
+ *     {@link com.google.common.eventbus.EventBus#post(Object)} method.</li>
+ * </ul>
+ *
+ * <h2>Glossary</h2>
+ *
+ * The EventBus system and code use the following terms to discuss event
+ * distribution:
+ * <dl>
+ * <dt>Event</dt><dd>Any object that may be <em>posted</em> to a bus.</dd>
+ * <dt>Subscribing</dt><dd>The act of registering a <em>listener</em> with an
+ *     EventBus, so that its <em>handler methods</em> will receive events.</dd>
+ * <dt>Listener</dt><dd>An object that wishes to receive events, by exposing
+ *     <em>handler methods</em>.</dt>
+ * <dt>Handler method</dt><dd>A public method that the EventBus should use to
+ *     deliver <em>posted</em> events.  Handler methods are marked by the
+ *     {@link com.google.common.eventbus.Subscribe} annotation.</dd>
+ * <dt>Posting an event</dt><dd>Making the event available to any
+ *     <em>listeners</em> through the EventBus.</dt>
+ * </dl>
+ *
+ * <h2>FAQ</h2>
+ * <h3>Why must I create my own Event Bus, rather than using a singleton?</h3>
+ *
+ * The Event Bus doesn't specify how you use it; there's nothing stopping your
+ * application from having separate EventBus instances for each component, or
+ * using separate instances to separate events by context or topic.  This also
+ * makes it trivial to set up and tear down EventBus objects in your tests.
+ *
+ * <p>Of course, if you'd like to have a process-wide EventBus singleton,
+ * there's nothing stopping you from doing it that way.  Simply have your
+ * container (such as Guice) create the EventBus as a singleton at global scope
+ * (or stash it in a static field, if you're into that sort of thing).
+ *
+ * <p>In short, the EventBus is not a singleton because we'd rather not make
+ * that decision for you.  Use it how you like.
+ *
+ * <h3>Can I unregister a listener from the Event Bus?</h3>
+ * Currently, no -- a listener registered with an EventBus instance will
+ * continue to receive events until the EventBus itself is disposed.
+ *
+ * <p>In the apps using EventBus so far, this has not been a problem:
+ * <ul>
+ *   <li>Most listeners are registered on startup or lazy initialization, and
+ *       persist for the life of the application.
+ *   <li>Scope-specific EventBus instances can handle temporary event
+ *       distribution (e.g. distributing events among request-scoped objects)
+ *   <li>For testing, EventBus instances can be easily created and thrown away,
+ *       removing the need for explicit unregistration.
+ * </ul>
+ *
+ * <h3>Why use an annotation to mark handler methods, rather than requiring the
+ * listener to implement an interface?</h3>
+ * We feel that the Event Bus's {@code @Subscribe} annotation conveys your
+ * intentions just as explicitly as implementing an interface (or perhaps more
+ * so), while leaving you free to place event handler methods wherever you wish
+ * and give them intention-revealing names.
+ *
+ * <p>Traditional Java Events use a listener interface which typically sports
+ * only a handful of methods -- typically one.  This has a number of
+ * disadvantages:
+ * <ul>
+ *   <li>Any one class can only implement a single response to a given event.
+ *   <li>Listener interface methods may conflict.
+ *   <li>The method must be named after the event (e.g. {@code
+ *       handleChangeEvent}), rather than its purpose (e.g. {@code
+ *       recordChangeInJournal}).
+ *   <li>Each event usually has its own interface, without a common parent
+ *       interface for a family of events (e.g. all UI events).
+ * </ul>
+ *
+ * <p>The difficulties in implementing this cleanly has given rise to a pattern,
+ * particularly common in Swing apps, of using tiny anonymous classes to
+ * implement event listener interfaces.
+ *
+ * <p>Compare these two cases: <pre>
+ *   class ChangeRecorder {
+ *     void setCustomer(Customer cust) {
+ *       cust.addChangeListener(new ChangeListener() {
+ *         void customerChanged(ChangeEvent e) {
+ *           recordChange(e.getChange());
+ *         }
+ *       };
+ *     }
+ *   }
+ *
+ *   // Class is typically registered by the container.
+ *   class EventBusChangeRecorder {
+ *     &#064;Subscribe void recordCustomerChange(ChangeEvent e) {
+ *       recordChange(e.getChange());
+ *     }
+ *   }</pre>
+ *
+ * The intent is actually clearer in the second case: there's less noise code,
+ * and the event handler has a clear and meaningful name.
+ *
+ * <h3>What about a generic {@code Handler<T>} interface?</h3>
+ * Some have proposed a generic {@code Handler<T>} interface for EventBus
+ * listeners.  This runs into issues with Java's use of type erasure, not to
+ * mention problems in usability.
+ *
+ * <p>Let's say the interface looked something like the following: <pre>   {@code
+ *   interface Handler<T> {
+ *     void handleEvent(T event);
+ *   }}</pre>
+ *
+ * Due to erasure, no single class can implement a generic interface more than
+ * once with different type parameters.  This is a giant step backwards from
+ * traditional Java Events, where even if {@code actionPerformed} and {@code
+ * keyPressed} aren't very meaningful names, at least you can implement both
+ * methods!
+ *
+ * <h3>Doesn't EventBus destroy static typing and eliminate automated
+ * refactoring support?</h3>
+ * Some have freaked out about EventBus's {@code register(Object)} and {@code
+ * post(Object)} methods' use of the {@code Object} type.
+ *
+ * <p>{@code Object} is used here for a good reason: the Event Bus library
+ * places no restrictions on the types of either your event listeners (as in
+ * {@code register(Object)}) or the events themselves (in {@code post(Object)}).
+ *
+ * <p>Event handler methods, on the other hand, must explicitly declare their
+ * argument type -- the type of event desired (or one of its supertypes).  Thus,
+ * searching for references to an event class will instantly find all handler
+ * methods for that event, and renaming the type will affect all handler methods
+ * within view of your IDE (and any code that creates the event).
+ *
+ * <p>It's true that you can rename your {@code @Subscribed} event handler
+ * methods at will; Event Bus will not stop this or do anything to propagate the
+ * rename because, to Event Bus, the names of your handler methods are
+ * irrelevant.  Test code that calls the methods directly, of course, will be
+ * affected by your renaming -- but that's what your refactoring tools are for.
+ *
+ * <h3>What happens if I {@code register} a listener without any handler
+ * methods?</h3>
+ * Nothing at all.
+ *
+ * <p>The Event Bus was designed to integrate with containers and module
+ * systems, with Guice as the prototypical example.  In these cases, it's
+ * convenient to have the container/factory/environment pass <i>every</i>
+ * created object to an EventBus's {@code register(Object)} method.
+ *
+ * <p>This way, any object created by the container/factory/environment can
+ * hook into the system's event model simply by exposing handler methods.
+ *
+ * <h3>What Event Bus problems can be detected at compile time?</h3>
+ * Any problem that can be unambiguously detected by Java's type system.  For
+ * example, defining a handler method for a nonexistent event type.
+ *
+ * <h3>What Event Bus problems can be detected immediately at registration?</h3>
+ * Immediately upon invoking {@code register(Object)} , the listener being
+ * registered is checked for the <i>well-formedness</i> of its handler methods.
+ * Specifically, any methods marked with {@code @Subscribe} must take only a
+ * single argument.
+ *
+ * <p>Any violations of this rule will cause an {@code IllegalArgumentException}
+ * to be thrown.
+ *
+ * <p>(This check could be moved to compile-time using APT, a solution we're
+ * researching.)
+ *
+ * <h3>What Event Bus problems may only be detected later, at runtime?</h3>
+ * If a component posts events with no registered listeners, it <i>may</i>
+ * indicate an error (typically an indication that you missed a
+ * {@code @Subscribe} annotation, or that the listening component is not loaded).
+ *
+ * <p>(Note that this is <i>not necessarily</i> indicative of a problem.  There
+ * are many cases where an application will deliberately ignore a posted event,
+ * particularly if the event is coming from code you don't control.)
+ *
+ * <p>To handle such events, register a handler method for the {@code DeadEvent}
+ * class.  Whenever EventBus receives an event with no registered handlers, it
+ * will turn it into a {@code DeadEvent} and pass it your way -- allowing you to
+ * log it or otherwise recover.
+ *
+ * <h3>How do I test event listeners and their handler methods?</h3>
+ * Because handler methods on your listener classes are normal methods, you can
+ * simply call them from your test code to simulate the EventBus.
+ */
+package com.google.common.eventbus;
diff --git a/guava/src/com/google/common/hash/AbstractCompositeHashFunction.java b/guava/src/com/google/common/hash/AbstractCompositeHashFunction.java
new file mode 100644
index 0000000..41c4836
--- /dev/null
+++ b/guava/src/com/google/common/hash/AbstractCompositeHashFunction.java
@@ -0,0 +1,134 @@
+// Copyright 2011 Google Inc. All Rights Reserved.
+
+package com.google.common.hash;
+
+import java.nio.charset.Charset;
+
+/**
+ * An abstract composition of multiple hash functions. {@linkplain #newHasher()} delegates to the
+ * {@code Hasher} objects of the delegate hash functions, and in the end, they are used by
+ * {@linkplain #makeHash(Hasher[])} that constructs the final {@code HashCode}.
+ * 
+ * @author andreou@google.com (Dimitris Andreou)
+ */
+abstract class AbstractCompositeHashFunction extends AbstractStreamingHashFunction {
+  final HashFunction[] functions;
+  
+  AbstractCompositeHashFunction(HashFunction... functions) {
+    this.functions = functions;
+  }
+  
+  /**
+   * Constructs a {@code HashCode} from the {@code Hasher} objects of the functions. Each of them
+   * has consumed the entire input and they are ready to output a {@code HashCode}. The order of
+   * the hashers are the same order as the functions given to the constructor.
+   */
+  // this could be cleaner if it passed HashCode[], but that would create yet another array...
+  /* protected */ abstract HashCode makeHash(Hasher[] hashers);
+  
+  @Override
+  public Hasher newHasher() {
+    final Hasher[] hashers = new Hasher[functions.length];
+    for (int i = 0; i < hashers.length; i++) {
+      hashers[i] = functions[i].newHasher();
+    }
+    return new Hasher() {
+      @Override public Hasher putByte(byte b) {
+        for (Hasher hasher : hashers) {
+          hasher.putByte(b);
+        }
+        return this;
+      }
+
+      @Override public Hasher putBytes(byte[] bytes) {
+        for (Hasher hasher : hashers) {
+          hasher.putBytes(bytes);
+        }
+        return this;
+      }
+
+      @Override public Hasher putBytes(byte[] bytes, int off, int len) {
+        for (Hasher hasher : hashers) {
+          hasher.putBytes(bytes, off, len);
+        }
+        return this;
+      }
+
+      @Override public Hasher putShort(short s) {
+        for (Hasher hasher : hashers) {
+          hasher.putShort(s);
+        }
+        return this;
+      }
+
+      @Override public Hasher putInt(int i) {
+        for (Hasher hasher : hashers) {
+          hasher.putInt(i);
+        }
+        return this;
+      }
+
+      @Override public Hasher putLong(long l) {
+        for (Hasher hasher : hashers) {
+          hasher.putLong(l);
+        }
+        return this;
+      }
+
+      @Override public Hasher putFloat(float f) {
+        for (Hasher hasher : hashers) {
+          hasher.putFloat(f);
+        }
+        return this;
+      }
+
+      @Override public Hasher putDouble(double d) {
+        for (Hasher hasher : hashers) {
+          hasher.putDouble(d);
+        }
+        return this;
+      }
+
+      @Override public Hasher putBoolean(boolean b) {
+        for (Hasher hasher : hashers) {
+          hasher.putBoolean(b);
+        }
+        return this;
+      }
+
+      @Override public Hasher putChar(char c) {
+        for (Hasher hasher : hashers) {
+          hasher.putChar(c);
+        }
+        return this;
+      }
+
+      @Override public Hasher putString(CharSequence chars) {
+        for (Hasher hasher : hashers) {
+          hasher.putString(chars);
+        }
+        return this;
+      }
+
+      @Override public Hasher putString(CharSequence chars, Charset charset) {
+        for (Hasher hasher : hashers) {
+          hasher.putString(chars, charset);
+        }
+        return this;
+      }
+
+      @Override public <T> Hasher putObject(T instance, Funnel<? super T> funnel) {
+        for (Hasher hasher : hashers) {
+          hasher.putObject(instance, funnel);
+        }
+        return this;
+      }
+
+      @Override public HashCode hash() {
+        return makeHash(hashers);
+      }
+    };
+  }
+  
+  private static final long serialVersionUID = 0L;
+}
diff --git a/guava/src/com/google/common/hash/AbstractHasher.java b/guava/src/com/google/common/hash/AbstractHasher.java
new file mode 100644
index 0000000..4abc6a3
--- /dev/null
+++ b/guava/src/com/google/common/hash/AbstractHasher.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.hash;
+
+import com.google.common.base.Charsets;
+
+import java.nio.charset.Charset;
+
+/**
+ * An abstract hasher, implementing {@link #putBoolean(boolean)}, {@link #putDouble(double)},
+ * {@link #putFloat(float)}, {@link #putString(CharSequence)}, and
+ * {@link #putString(CharSequence, Charset)} as prescribed by {@link Hasher}.
+ *
+ * @author andreou@google.com (Dimitris Andreou)
+ */
+abstract class AbstractHasher implements Hasher {
+  @Override public final Hasher putBoolean(boolean b) {
+    return putByte(b ? (byte) 1 : (byte) 0);
+  }
+
+  @Override public final Hasher putDouble(double d) {
+    return putLong(Double.doubleToRawLongBits(d));
+  }
+
+  @Override public final Hasher putFloat(float f) {
+    return putInt(Float.floatToRawIntBits(f));
+  }
+
+  @Override public Hasher putString(CharSequence charSequence) {
+    // TODO(user): Should we instead loop over the CharSequence and call #putChar?
+    return putString(charSequence, Charsets.UTF_16LE);
+  }
+
+  @Override public Hasher putString(CharSequence charSequence, Charset charset) {
+    try {
+      return putBytes(charSequence.toString().getBytes(charset.name()));
+    } catch (java.io.UnsupportedEncodingException impossible) {
+      throw new AssertionError(impossible);
+    }
+  }
+}
diff --git a/guava/src/com/google/common/hash/AbstractNonStreamingHashFunction.java b/guava/src/com/google/common/hash/AbstractNonStreamingHashFunction.java
new file mode 100644
index 0000000..68e9ace
--- /dev/null
+++ b/guava/src/com/google/common/hash/AbstractNonStreamingHashFunction.java
@@ -0,0 +1,118 @@
+// Copyright 2011 Google Inc. All Rights Reserved.
+
+package com.google.common.hash;
+
+import com.google.common.base.Preconditions;
+import com.google.common.base.Throwables;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+
+/**
+ * Skeleton implementation of {@link HashFunction}, appropriate for non-streaming algorithms.
+ * All the hash computation done using {@linkplain #newHasher()} are delegated to the {@linkplain 
+ * #hashBytes(byte[], int, int)} method. 
+ * 
+ * @author andreou@google.com (Dimitris Andreou)
+ */
+abstract class AbstractNonStreamingHashFunction implements HashFunction {
+  @Override
+  public Hasher newHasher() {
+    return new BufferingHasher(32);
+  }
+
+  @Override
+  public Hasher newHasher(int expectedInputSize) {
+    Preconditions.checkArgument(expectedInputSize >= 0);
+    return new BufferingHasher(expectedInputSize);
+  }
+  
+  /**
+   * In-memory stream-based implementation of Hasher.  
+   */
+  private final class BufferingHasher extends AbstractHasher {
+    final ExposedByteArrayOutputStream stream;
+    static final int BOTTOM_BYTE = 0xFF;
+    
+    BufferingHasher(int expectedInputSize) {
+      this.stream = new ExposedByteArrayOutputStream(expectedInputSize);
+    }
+
+    @Override
+    public Hasher putByte(byte b) {
+      stream.write(b);
+      return this;
+    }
+
+    @Override
+    public Hasher putBytes(byte[] bytes) {
+      try {
+        stream.write(bytes);
+      } catch (IOException e) {
+        throw Throwables.propagate(e);
+      }
+      return this;
+    }
+    
+    @Override
+    public Hasher putBytes(byte[] bytes, int off, int len) {
+      stream.write(bytes, off, len);
+      return this;
+    }
+
+    @Override
+    public Hasher putShort(short s) {
+      stream.write(s & BOTTOM_BYTE);
+      stream.write((s >>> 8)  & BOTTOM_BYTE);
+      return this;
+    }
+
+    @Override
+    public Hasher putInt(int i) {
+      stream.write(i & BOTTOM_BYTE);
+      stream.write((i >>> 8) & BOTTOM_BYTE);
+      stream.write((i >>> 16) & BOTTOM_BYTE);
+      stream.write((i >>> 24) & BOTTOM_BYTE);
+      return this;
+    }
+
+    @Override
+    public Hasher putLong(long l) {
+      for (int i = 0; i < 64; i += 8) {
+        stream.write((byte) ((l >>> i) & BOTTOM_BYTE));
+      }
+      return this;
+    }
+
+    @Override
+    public Hasher putChar(char c) {
+      stream.write(c & BOTTOM_BYTE);
+      stream.write((c >>> 8) & BOTTOM_BYTE);
+      return this;
+    }
+
+    @Override
+    public <T> Hasher putObject(T instance, Funnel<? super T> funnel) {
+      funnel.funnel(instance, this);
+      return this;
+    }
+
+    @Override
+    public HashCode hash() {
+      return hashBytes(stream.byteArray(), 0, stream.length());
+    }
+  }
+  
+  // Just to access the byte[] without introducing an unnecessary copy
+  private static final class ExposedByteArrayOutputStream extends ByteArrayOutputStream {
+    ExposedByteArrayOutputStream(int expectedInputSize) {
+      super(expectedInputSize);
+    }
+    byte[] byteArray() {
+      return buf;
+    }
+    int length() {
+      return count;
+    }
+  }
+}
diff --git a/guava/src/com/google/common/hash/AbstractStreamingHashFunction.java b/guava/src/com/google/common/hash/AbstractStreamingHashFunction.java
new file mode 100644
index 0000000..de7748f
--- /dev/null
+++ b/guava/src/com/google/common/hash/AbstractStreamingHashFunction.java
@@ -0,0 +1,249 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.hash;
+
+import static com.google.common.base.Preconditions.checkArgument;
+
+import com.google.common.base.Preconditions;
+
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.nio.charset.Charset;
+
+/**
+ * Skeleton implementation of {@link HashFunction}. Provides default implementations which
+ * invokes the appropriate method on {@link #newHasher()}, then return the result of
+ * {@link Hasher#hash}.
+ *
+ * <p>Invocations of {@link #newHasher(int)} also delegate to {@linkplain #newHasher()}, ignoring
+ * the expected input size parameter.
+ *
+ * @author Kevin Bourrillion
+ */
+abstract class AbstractStreamingHashFunction implements HashFunction {
+  @Override public HashCode hashString(CharSequence input) {
+    return newHasher().putString(input).hash();
+  }
+
+  @Override public HashCode hashString(CharSequence input, Charset charset) {
+    return newHasher().putString(input, charset).hash();
+  }
+
+  @Override public HashCode hashLong(long input) {
+    return newHasher().putLong(input).hash();
+  }
+
+  @Override public HashCode hashBytes(byte[] input) {
+    return newHasher().putBytes(input).hash();
+  }
+
+  @Override public HashCode hashBytes(byte[] input, int off, int len) {
+    return newHasher().putBytes(input, off, len).hash();
+  }
+
+  @Override public Hasher newHasher(int expectedInputSize) {
+    Preconditions.checkArgument(expectedInputSize >= 0);
+    return newHasher();
+  }
+
+  /**
+   * A convenience base class for implementors of {@code Hasher}; handles accumulating data
+   * until an entire "chunk" (of implementation-dependent length) is ready to be hashed.
+   *
+   * @author kevinb@google.com (Kevin Bourrillion)
+   * @author andreou@google.com (Dimitris Andreou)
+   */
+  // TODO(kevinb): this class still needs some design-and-document-for-inheritance love
+  protected static abstract class AbstractStreamingHasher extends AbstractHasher {
+    /** Buffer via which we pass data to the hash algorithm (the implementor) */
+    private final ByteBuffer buffer;
+
+    /** Number of bytes to be filled before process() invocation(s). */
+    private final int bufferSize;
+
+    /** Number of bytes processed per process() invocation. */
+    private final int chunkSize;
+
+    /**
+     * Constructor for use by subclasses. This hasher instance will process chunks of the specified
+     * size.
+     *
+     * @param chunkSize the number of bytes available per {@link #process(ByteBuffer)} invocation;
+     *        must be at least 4
+     */
+    protected AbstractStreamingHasher(int chunkSize) {
+      this(chunkSize, chunkSize);
+    }
+
+    /**
+     * Constructor for use by subclasses. This hasher instance will process chunks of the specified
+     * size, using an internal buffer of {@code bufferSize} size, which must be a multiple of
+     * {@code chunkSize}.
+     *
+     * @param chunkSize the number of bytes available per {@link #process(ByteBuffer)} invocation;
+     *        must be at least 4
+     * @param bufferSize the size of the internal buffer. Must be a multiple of chunkSize
+     */
+    protected AbstractStreamingHasher(int chunkSize, int bufferSize) {
+      // TODO(kevinb): check more preconditions (as bufferSize >= chunkSize) if this is ever public
+      checkArgument(bufferSize % chunkSize == 0);
+
+      // TODO(user): benchmark performance difference with longer buffer
+      this.buffer = ByteBuffer
+          .allocate(bufferSize + 7) // always space for a single primitive
+          .order(ByteOrder.LITTLE_ENDIAN);
+      this.bufferSize = bufferSize;
+      this.chunkSize = chunkSize;
+    }
+
+    /**
+     * Processes the available bytes of the buffer (at most {@code chunk} bytes).
+     */
+    protected abstract void process(ByteBuffer bb);
+
+    /**
+     * This is invoked for the last bytes of the input, which are not enough to
+     * fill a whole chunk. The passed {@code ByteBuffer} is guaranteed to be
+     * non-empty.
+     *
+     * <p>This implementation simply pads with zeros and delegates to
+     * {@link #process(ByteBuffer)}.
+     */
+    protected void processRemaining(ByteBuffer bb) {
+      bb.position(bb.limit()); // move at the end
+      bb.limit(chunkSize + 7); // get ready to pad with longs
+      while (bb.position() < chunkSize) {
+        bb.putLong(0);
+      }
+      bb.limit(chunkSize);
+      bb.flip();
+      process(bb);
+    }
+
+    @Override
+    public final Hasher putBytes(byte[] bytes) {
+      return putBytes(bytes, 0, bytes.length);
+    }
+
+    @Override
+    public final Hasher putBytes(byte[] bytes, int off, int len) {
+      return putBytes(ByteBuffer.wrap(bytes, off, len).order(ByteOrder.LITTLE_ENDIAN));
+    }
+
+    private final Hasher putBytes(ByteBuffer readBuffer) {
+      // If we have room for all of it, this is easy
+      if (readBuffer.remaining() <= buffer.remaining()) {
+        buffer.put(readBuffer);
+        munchIfFull();
+        return this;
+      }
+
+      // First add just enough to fill buffer size, and munch that
+      int bytesToCopy = bufferSize - buffer.position();
+      for (int i = 0; i < bytesToCopy; i++) {
+        buffer.put(readBuffer.get());
+      }
+      munch(); // buffer becomes empty here, since chunkSize divides bufferSize
+
+      // Now process directly from the rest of the input buffer
+      while (readBuffer.remaining() >= chunkSize) {
+        process(readBuffer);
+      }
+
+      // Finally stick the remainder back in our usual buffer
+      buffer.put(readBuffer);
+      return this;
+    }
+
+    @Override
+    public final Hasher putString(CharSequence charSequence) {
+      for (int i = 0; i < charSequence.length(); i++) {
+        putChar(charSequence.charAt(i));
+      }
+      return this;
+    }
+
+    @Override
+    public final Hasher putByte(byte b) {
+      buffer.put(b);
+      munchIfFull();
+      return this;
+    }
+
+    @Override
+    public final Hasher putShort(short s) {
+      buffer.putShort(s);
+      munchIfFull();
+      return this;
+    }
+
+    @Override
+    public final Hasher putChar(char c) {
+      buffer.putChar(c);
+      munchIfFull();
+      return this;
+    }
+
+    @Override
+    public final Hasher putInt(int i) {
+      buffer.putInt(i);
+      munchIfFull();
+      return this;
+    }
+
+    @Override
+    public final Hasher putLong(long l) {
+      buffer.putLong(l);
+      munchIfFull();
+      return this;
+    }
+
+    @Override
+    public final <T> Hasher putObject(T instance, Funnel<? super T> funnel) {
+      funnel.funnel(instance, this);
+      return this;
+    }
+
+    @Override
+    public final HashCode hash() {
+      munch();
+      buffer.flip();
+      if (buffer.remaining() > 0) {
+        processRemaining(buffer);
+      }
+      return makeHash();
+    }
+
+    abstract HashCode makeHash();
+
+    // Process pent-up data in chunks
+    private void munchIfFull() {
+      if (buffer.remaining() < 8) {
+        // buffer is full; not enough room for a primitive. We have at least one full chunk.
+        munch();
+      }
+    }
+
+    private void munch() {
+      buffer.flip();
+      while (buffer.remaining() >= chunkSize) {
+        // we could limit the buffer to ensure process() does not read more than
+        // chunkSize number of bytes, but we trust the implementations
+        process(buffer);
+      }
+      buffer.compact(); // preserve any remaining data that do not make a full chunk
+    }
+  }
+}
diff --git a/guava/src/com/google/common/hash/BloomFilter.java b/guava/src/com/google/common/hash/BloomFilter.java
new file mode 100644
index 0000000..04bba08
--- /dev/null
+++ b/guava/src/com/google/common/hash/BloomFilter.java
@@ -0,0 +1,233 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.hash;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Preconditions;
+import com.google.common.hash.BloomFilterStrategies.BitArray;
+
+import java.io.Serializable;
+
+/**
+ * A Bloom filter for instances of {@code T}. A Bloom filter offers an approximate containment test
+ * with one-sided error: if it claims that an element is contained in it, this might be in error, 
+ * but if it claims that an element is <i>not</i> contained in it, then this is definitely true.
+ * 
+ * <p>If you are unfamiliar with Bloom filters, this nice 
+ * <a href="http://llimllib.github.com/bloomfilter-tutorial/">tutorial</a> may help you understand 
+ * how they work.
+ * 
+ * @param <T> the type of instances that the {@code BloomFilter} accepts
+ * @author Kevin Bourrillion
+ * @author Dimitris Andreou
+ * @since 11.0
+ */
+@Beta
+public final class BloomFilter<T> implements Serializable {
+  /**
+   * A strategy to translate T instances, to {@code numHashFunctions} bit indexes.
+   */
+  interface Strategy extends java.io.Serializable {
+    /**
+     * Sets {@code numHashFunctions} bits of the given bit array, by hashing a user element. 
+     */
+    <T> void put(T object, Funnel<? super T> funnel, int numHashFunctions, BitArray bits);
+    
+    /**
+     * Queries {@code numHashFunctions} bits of the given bit array, by hashing a user element;
+     * returns {@code true} if and only if all selected bits are set. 
+     */
+    <T> boolean mightContain(
+        T object, Funnel<? super T> funnel, int numHashFunctions, BitArray bits);
+  }
+  
+  /** The bit set of the BloomFilter (not necessarily power of 2!)*/
+  private final BitArray bits;
+  
+  /** Number of hashes per element */ 
+  private final int numHashFunctions;
+  
+  /** The funnel to translate Ts to bytes */
+  private final Funnel<T> funnel;
+  
+  /**
+   * The strategy we employ to map an element T to {@code numHashFunctions} bit indexes.
+   */
+  private final Strategy strategy;
+  
+  /**
+   * Creates a BloomFilter. 
+   */
+  private BloomFilter(BitArray bits, int numHashFunctions, Funnel<T> funnel,
+      Strategy strategy) {
+    Preconditions.checkArgument(numHashFunctions > 0, "numHashFunctions zero or negative");
+    this.bits = checkNotNull(bits);
+    this.numHashFunctions = numHashFunctions;
+    this.funnel = checkNotNull(funnel);
+    this.strategy = strategy;
+  }
+  
+  /**
+   * Returns {@code true} if the element <i>might</i> have been put in this Bloom filter, 
+   * {@code false} if this is <i>definitely</i> not the case. 
+   */
+  public boolean mightContain(T object) {
+    return strategy.mightContain(object, funnel, numHashFunctions, bits);
+  }
+
+  /**
+   * Puts an element into this {@code BloomFilter}. Ensures that subsequent invocations of 
+   * {@link #mightContain(Object)} with the same element will always return {@code true}.
+   */
+  public void put(T object) {
+    strategy.put(object, funnel, numHashFunctions, bits);
+  }
+  
+  @VisibleForTesting int getHashCount() {
+    return numHashFunctions;
+  }
+  
+  @VisibleForTesting double computeExpectedFalsePositiveRate(int insertions) {
+    return Math.pow(
+        1 - Math.exp(-numHashFunctions * ((double) insertions / (bits.size()))),
+        numHashFunctions);
+  }
+  
+  /**
+   * Creates a {@code Builder} of a {@link BloomFilter BloomFilter<T>}, with the expected number 
+   * of insertions and expected false positive probability.
+   * 
+   * <p>Note that overflowing a {@code BloomFilter} with significantly more elements 
+   * than specified, will result in its saturation, and a sharp deterioration of its
+   * false positive probability.
+   * 
+   * <p>The constructed {@code BloomFilter<T>} will be serializable if the provided 
+   * {@code Funnel<T>} is.
+   * 
+   * @param funnel the funnel of T's that the constructed {@code BloomFilter<T>} will use
+   * @param expectedInsertions the number of expected insertions to the constructed 
+   *        {@code BloomFilter<T>}; must be positive
+   * @param falsePositiveProbability the desired false positive probability (must be positive and 
+   *        less than 1.0)
+   * @return a {@code Builder}
+   */
+  public static <T> BloomFilter<T> create(Funnel<T> funnel, int expectedInsertions /* n */,
+      double falsePositiveProbability) {
+    checkNotNull(funnel);
+    checkArgument(expectedInsertions > 0, "Expected insertions must be positive");
+    checkArgument(falsePositiveProbability > 0.0 & falsePositiveProbability < 1.0,
+        "False positive probability in (0.0, 1.0)");
+    /* 
+     * andreou: I wanted to put a warning in the javadoc about tiny fpp values,
+     * since the resulting size is proportional to -log(p), but there is not
+     * much of a point after all, e.g. optimalM(1000, 0.0000000000000001) = 76680
+     * which is less that 10kb. Who cares!
+     */
+    int numBits = optimalNumOfBits(expectedInsertions, falsePositiveProbability);
+    int numHashFunctions = optimalNumOfHashFunctions(expectedInsertions, numBits);
+    return new BloomFilter<T>(new BitArray(numBits), numHashFunctions, funnel,
+        BloomFilterStrategies.MURMUR128_MITZ_32);
+  }
+  
+  /**
+   * Creates a {@code Builder} of a {@link BloomFilter BloomFilter<T>}, with the expected number 
+   * of insertions, and a default expected false positive probability of 3%.
+   * 
+   * <p>Note that overflowing a {@code BloomFilter} with significantly more elements 
+   * than specified, will result in its saturation, and a sharp deterioration of its
+   * false positive probability.
+   * 
+   * <p>The constructed {@code BloomFilter<T>} will be serializable if the provided 
+   * {@code Funnel<T>} is.
+   * 
+   * @param funnel the funnel of T's that the constructed {@code BloomFilter<T>} will use
+   * @param expectedInsertions the number of expected insertions to the constructed 
+   *        {@code BloomFilter<T>}; must be positive
+   * @return a {@code Builder}
+   */
+  public static <T> BloomFilter<T> create(Funnel<T> funnel, int expectedInsertions /* n */) {
+    return create(funnel, expectedInsertions, 0.03); // FYI, for 3%, we always get 5 hash functions 
+  }
+  
+  /*
+   * Cheat sheet:
+   * 
+   * m: total bits
+   * n: expected insertions
+   * b: m/n, bits per insertion
+
+   * p: expected false positive probability
+   * 
+   * 1) Optimal k = b * ln2
+   * 2) p = (1 - e ^ (-kn/m))^k
+   * 3) For optimal k: p = 2 ^ (-k) ~= 0.6185^b
+   * 4) For optimal k: m = -nlnp / ((ln2) ^ 2)
+   */
+  
+  private static final double LN2 = Math.log(2);
+  private static final double LN2_SQUARED = LN2 * LN2;
+  
+  /**
+   * Computes the optimal k (number of hashes per element inserted in Bloom filter), given the 
+   * expected insertions and total number of bits in the Bloom filter.
+   * 
+   * See http://en.wikipedia.org/wiki/File:Bloom_filter_fp_probability.svg for the formula.
+   * 
+   * @param n expected insertions (must be positive)
+   * @param m total number of bits in Bloom filter (must be positive)
+   */
+  @VisibleForTesting static int optimalNumOfHashFunctions(int n, int m) {
+    return Math.max(1, (int) Math.round(m / n * LN2));
+  }
+  
+  /**
+   * Computes m (total bits of Bloom filter) which is expected to achieve, for the specified 
+   * expected insertions, the required false positive probability.
+   * 
+   * See http://en.wikipedia.org/wiki/Bloom_filter#Probability_of_false_positives for the formula.
+   * 
+   * @param n expected insertions (must be positive)
+   * @param p false positive rate (must be 0 < p < 1)
+   */
+  @VisibleForTesting static int optimalNumOfBits(int n, double p) {
+    return (int) (-n * Math.log(p) / LN2_SQUARED);
+  }
+  
+  private Object writeReplace() {
+    return new SerialForm<T>(this);
+  }
+  
+  private static class SerialForm<T> implements Serializable {
+    final long[] data;
+    final int numHashFunctions;
+    final Funnel<T> funnel;
+    final Strategy strategy;
+    
+    SerialForm(BloomFilter<T> bf) {
+      this.data = bf.bits.data;
+      this.numHashFunctions = bf.numHashFunctions;
+      this.funnel = bf.funnel;
+      this.strategy = bf.strategy;
+    }
+    Object readResolve() {
+      return new BloomFilter<T>(new BitArray(data), numHashFunctions, funnel, strategy);
+    }
+    private static final long serialVersionUID = 1;
+  }
+}
diff --git a/guava/src/com/google/common/hash/BloomFilterStrategies.java b/guava/src/com/google/common/hash/BloomFilterStrategies.java
new file mode 100644
index 0000000..8c215e5
--- /dev/null
+++ b/guava/src/com/google/common/hash/BloomFilterStrategies.java
@@ -0,0 +1,87 @@
+// Copyright 2011 Google Inc. All Rights Reserved.
+
+package com.google.common.hash;
+
+import static com.google.common.base.Preconditions.checkArgument;
+
+import com.google.common.math.IntMath;
+
+import java.math.RoundingMode;
+
+/**
+ * Collections of strategies of generating the {@code k * log(M)} bits required for an element to
+ * be mapped to a {@link BloomFilter} of {@code M} bits and {@code k} hash functions. These
+ * strategies are part of the serialized form of the Bloom filters that use them, thus they must be
+ * preserved as is (no updates allowed, only introduction of new versions).
+ *
+ * @author andreou@google.com (Dimitris Andreou)
+ */
+enum BloomFilterStrategies implements BloomFilter.Strategy {
+  /**
+   * See "Less Hashing, Same Performance: Building a Better Bloom Filter" by Adam Kirsch and
+   * Michael Mitzenmacher. The paper argues that this trick doesn't significantly deteriorate the
+   * performance of a Bloom filter (yet only needs two 32bit hash functions).
+   */
+  MURMUR128_MITZ_32() {
+    @Override public <T> void put(T object, Funnel<? super T> funnel,
+        int numHashFunctions, BitArray bits) {
+      // TODO(user): when the murmur's shortcuts are implemented, update this code
+      long hash64 = Hashing.murmur3_128().newHasher().putObject(object, funnel).hash().asLong();
+      int hash1 = (int) hash64;
+      int hash2 = (int) (hash64 >>> 32);
+      for (int i = 1; i <= numHashFunctions; i++) {
+        int nextHash = hash1 + i * hash2;
+        if (nextHash < 0) {
+          nextHash = ~nextHash;
+        }
+        // up to here, the code is identical with the next method
+        bits.set(nextHash % bits.size());
+      }
+    }
+
+    @Override public <T> boolean mightContain(T object, Funnel<? super T> funnel,
+        int numHashFunctions, BitArray bits) {
+      long hash64 = Hashing.murmur3_128().newHasher().putObject(object, funnel).hash().asLong();
+      int hash1 = (int) hash64;
+      int hash2 = (int) (hash64 >>> 32);
+      for (int i = 1; i <= numHashFunctions; i++) {
+        int nextHash = hash1 + i * hash2;
+        if (nextHash < 0) {
+          nextHash = ~nextHash;
+        }
+        // up to here, the code is identical with the previous method
+        if (!bits.get(nextHash % bits.size())) {
+          return false;
+        }
+      }
+      return true;
+    }
+  };
+
+  static class BitArray {
+    final long[] data;
+
+    BitArray(int bits) {
+      this(new long[IntMath.divide(bits, 64, RoundingMode.CEILING)]);
+    }
+
+    // Used by serialization
+    BitArray(long[] data) {
+      checkArgument(data.length > 0, "data length is zero!");
+      this.data = data;
+    }
+
+    void set(int index) {
+      data[index >> 6] |= (1L << index);
+    }
+
+    boolean get(int index) {
+      return (data[index >> 6] & (1L << index)) != 0;
+    }
+
+    /** Number of bits */
+    int size() {
+      return data.length * Long.SIZE;
+    }
+  }
+}
diff --git a/guava/src/com/google/common/hash/Funnel.java b/guava/src/com/google/common/hash/Funnel.java
new file mode 100644
index 0000000..61cff7b
--- /dev/null
+++ b/guava/src/com/google/common/hash/Funnel.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.hash;
+
+import com.google.common.annotations.Beta;
+
+/**
+ * An object which can send data from an object of type {@code T} into a {@code Sink}.
+ * 
+ * @author Dimitris Andreou
+ * @since 11.0
+ */
+@Beta
+public interface Funnel<T> {
+  /**
+   * Sends a stream of data from the {@code from} object into the sink {@code into}. There
+   * is no requirement that this data be complete enough to fully reconstitute the object
+   * later.
+   */
+  void funnel(T from, Sink into);
+}
diff --git a/guava/src/com/google/common/hash/Funnels.java b/guava/src/com/google/common/hash/Funnels.java
new file mode 100644
index 0000000..2cb04f4
--- /dev/null
+++ b/guava/src/com/google/common/hash/Funnels.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.hash;
+
+import com.google.common.annotations.Beta;
+
+/**
+ * Funnels for common types. All implementations are serializable.
+ * 
+ * @author Dimitris Andreou
+ * @since 11.0
+ */
+@Beta
+public final class Funnels {
+  private Funnels() {}
+
+  /**
+   * Returns a funnel that extracts the bytes from a {@code byte} array.
+   */
+  public static Funnel<byte[]> byteArrayFunnel() {
+    return ByteArrayFunnel.INSTANCE;
+  }
+
+  private enum ByteArrayFunnel implements Funnel<byte[]> {
+    INSTANCE;
+
+    public void funnel(byte[] from, Sink into) {
+      into.putBytes(from);
+    }
+
+    @Override public String toString() {
+      return "Funnels.byteArrayFunnel()";
+    }
+  }
+
+  /**
+   * Returns a funnel that extracts the characters from a {@code CharSequence}.
+   */
+  public static Funnel<CharSequence> stringFunnel() {
+    return StringFunnel.INSTANCE;
+  }
+
+  private enum StringFunnel implements Funnel<CharSequence> {
+    INSTANCE;
+
+    public void funnel(CharSequence from, Sink into) {
+      into.putString(from);
+    }
+
+    @Override public String toString() {
+      return "Funnels.stringFunnel()";
+    }
+  }
+}
diff --git a/guava/src/com/google/common/hash/HashCode.java b/guava/src/com/google/common/hash/HashCode.java
new file mode 100644
index 0000000..ecd8706
--- /dev/null
+++ b/guava/src/com/google/common/hash/HashCode.java
@@ -0,0 +1,120 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.hash;
+
+import com.google.common.annotations.Beta;
+import com.google.common.base.Preconditions;
+import com.google.common.primitives.Ints;
+
+import java.security.MessageDigest;
+
+/**
+ * An immutable hash code of arbitrary bit length.
+ *
+ * @author Dimitris Andreou
+ * @since 11.0
+ */
+@Beta
+public abstract class HashCode {
+  HashCode() {}
+
+  /**
+   * Returns the first four bytes of {@linkplain #asBytes() this hashcode's bytes}, converted to
+   * an {@code int} value in little-endian order.
+   */
+  public abstract int asInt();
+
+  /**
+   * Returns the first eight bytes of {@linkplain #asBytes() this hashcode's bytes}, converted to
+   * a {@code long} value in little-endian order.
+   *
+   * @throws IllegalStateException if {@code bits() < 64}
+   */
+  public abstract long asLong();
+
+  /**
+   * Returns the value of this hash code as a byte array. The caller may modify the byte array;
+   * changes to it will <i>not</i> be reflected in this {@code HashCode} object or any other arrays
+   * returned by this method.
+   */
+  // TODO(user): consider ByteString here, when that is available
+  public abstract byte[] asBytes();
+
+  /**
+   * Copies bytes from this hash code into {@code dest}.
+   *
+   * @param dest the byte array into which the hash code will be written
+   * @param offset the start offset in the data
+   * @param maxLength the maximum number of bytes to write
+   * @return the number of bytes written to {@code dest}
+   * @throws IndexOutOfBoundsException if there is not enough room in {@code dest}
+   */
+  public int writeBytesTo(byte[] dest, int offset, int maxLength) {
+    byte[] hash = asBytes();
+    maxLength = Ints.min(maxLength, hash.length);
+    Preconditions.checkPositionIndexes(offset, offset + maxLength, dest.length);
+    System.arraycopy(hash, 0, dest, offset, maxLength);
+    return maxLength;
+  }
+
+  /**
+   * Returns the number of bits in this hash code; a positive multiple of 32.
+   */
+  public abstract int bits();
+
+  @Override public boolean equals(Object object) {
+    if (object instanceof HashCode) {
+      HashCode that = (HashCode) object;
+      // Undocumented: this is a non-short-circuiting equals(), in case this is a cryptographic
+      // hash code, in which case we don't want to leak timing information
+      return MessageDigest.isEqual(this.asBytes(), that.asBytes());
+    }
+    return false;
+  }
+
+  /**
+   * Returns a "Java hash code" for this {@code HashCode} instance; this is well-defined
+   * (so, for example, you can safely put {@code HashCode} instances into a {@code
+   * HashSet}) but is otherwise probably not what you want to use.
+   */
+  @Override public int hashCode() {
+    /*
+     * As long as the hash function that produced this isn't of horrible quality, this
+     * won't be of horrible quality either.
+     */
+    return asInt();
+  }
+
+  /**
+   * Returns a string containing each byte of {@link #asBytes}, in order, as a two-digit unsigned
+   * hexadecimal number in lower case.
+   *
+   * <p>Note that if the output is considered to be a single hexadecimal number, this hash code's
+   * bytes are the <i>big-endian</i> representation of that number. This may be surprising since
+   * everything else in the hashing API uniformly treats multibyte values as little-endian. But
+   * this format conveniently matches that of utilities such as the UNIX {@code md5sum} command.
+   */
+  @Override public String toString() {
+    byte[] bytes = asBytes();
+    // TODO(user): Use c.g.common.base.ByteArrays once it is open sourced.
+    StringBuilder sb = new StringBuilder(2 * bytes.length);
+    for (byte b : bytes) {
+      sb.append(hexDigits[(b >> 4) & 0xf]).append(hexDigits[b & 0xf]);
+    }
+    return sb.toString();
+  }
+
+  private static final char[] hexDigits = "0123456789abcdef".toCharArray();
+}
diff --git a/guava/src/com/google/common/hash/HashCodes.java b/guava/src/com/google/common/hash/HashCodes.java
new file mode 100644
index 0000000..b6101a5
--- /dev/null
+++ b/guava/src/com/google/common/hash/HashCodes.java
@@ -0,0 +1,147 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.hash;
+
+/**
+ * Static factories for {@link HashCode} instances.
+ * 
+ * @author andreou@google.com (Dimitris Andreou)
+ */
+final class HashCodes {
+  private HashCodes() { }
+  
+  /**
+   * Creates a 32-bit {@code HashCode}, of which the bytes will form the passed int, interpreted 
+   * in little endian order.
+   */
+  static HashCode fromInt(int hash) {
+    return new IntHashCode(hash);
+  }
+  
+  private static class IntHashCode extends HashCode {
+    final int hash;
+    
+    IntHashCode(int hash) {
+      this.hash = hash;
+    }
+
+    @Override public int bits() {
+      return 32;
+    }
+
+    @Override public byte[] asBytes() {
+      return new byte[] {
+          (byte) hash,
+          (byte) (hash >> 8),
+          (byte) (hash >> 16),
+          (byte) (hash >> 24)};
+    }
+    
+    @Override public int asInt() {
+      return hash;
+    }
+
+    @Override public long asLong() {
+      throw new IllegalStateException("this HashCode only has 32 bits; cannot create a long");
+    }
+  }
+  
+  /**
+   * Creates a 64-bit {@code HashCode}, of which the bytes will form the passed long, interpreted 
+   * in little endian order.
+   */
+  static HashCode fromLong(long hash) {
+    return new LongHashCode(hash);
+  }
+  
+  private static class LongHashCode extends HashCode {
+    final long hash;
+    
+    LongHashCode(long hash) {
+      this.hash = hash;
+    }
+
+    @Override public int bits() {
+      return 64;
+    }
+
+    @Override public byte[] asBytes() {
+      return new byte[] {
+          (byte) hash,
+          (byte) (hash >> 8),
+          (byte) (hash >> 16),
+          (byte) (hash >> 24),
+          (byte) (hash >> 32),
+          (byte) (hash >> 40),
+          (byte) (hash >> 48),
+          (byte) (hash >> 56)};
+    }
+
+    @Override public int asInt() {
+      return (int) hash;
+    }
+
+    @Override public long asLong() {
+      return hash;
+    }
+  }
+  
+  /**
+   * Creates a {@code HashCode} from a byte array. The array is <i>not</i> copied defensively, 
+   * so it must be handed-off so as to preserve the immutability contract of {@code HashCode}.
+   * The array must be at least of length 4 (not checked). 
+   */
+  static HashCode fromBytes(byte[] bytes) {
+    return new BytesHashCode(bytes);
+  }
+  
+  private static class BytesHashCode extends HashCode {
+    final byte[] bytes;
+    
+    BytesHashCode(byte[] bytes) {
+      this.bytes = bytes;
+    }
+
+    @Override public int bits() {
+      return bytes.length * 8;
+    }
+
+    @Override public byte[] asBytes() {
+      return bytes.clone();
+    }
+
+    @Override public int asInt() {
+      return (bytes[0] & 0xFF)
+          | ((bytes[1] & 0xFF) << 8)
+          | ((bytes[2] & 0xFF) << 16)
+          | ((bytes[3] & 0xFF) << 24);
+    }
+
+    @Override public long asLong() {
+      if (bytes.length < 8) {
+        // Checking this to throw the correct type of exception
+        throw new IllegalStateException("Not enough bytes");
+      }
+      return (bytes[0] & 0xFFL)
+          | ((bytes[1] & 0xFFL) << 8)
+          | ((bytes[2] & 0xFFL) << 16)
+          | ((bytes[3] & 0xFFL) << 24)
+          | ((bytes[4] & 0xFFL) << 32)
+          | ((bytes[5] & 0xFFL) << 40)
+          | ((bytes[6] & 0xFFL) << 48)
+          | ((bytes[7] & 0xFFL) << 56);
+    }
+  }
+}
diff --git a/guava/src/com/google/common/hash/HashFunction.java b/guava/src/com/google/common/hash/HashFunction.java
new file mode 100644
index 0000000..ba3c992
--- /dev/null
+++ b/guava/src/com/google/common/hash/HashFunction.java
@@ -0,0 +1,197 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.hash;
+
+import com.google.common.annotations.Beta;
+import com.google.common.primitives.Ints;
+
+import java.nio.charset.Charset;
+
+/**
+ * A hash function is a collision-averse pure function that maps an arbitrary block of
+ * data to a number called a <i>hash code</i>.
+ *
+ * <h3>Definition</h3>
+ *
+ * <p>Unpacking this definition:
+ *
+ * <ul>
+ * <li><b>block of data:</b> the input for a hash function is always, in concept, an
+ *     ordered byte array. This hashing API accepts an arbitrary sequence of byte and
+ *     multibyte values (via {@link Hasher}), but this is merely a convenience; these are
+ *     always translated into raw byte sequences under the covers.
+ *
+ * <li><b>hash code:</b> each hash function always yields hash codes of the same fixed bit
+ *     length (given by {@link #bits}). For example, {@link Hashing#sha1} produces a
+ *     160-bit number, while {@link Hashing#murmur3_32()} yields only 32 bits. Because a
+ *     {@code long} value is clearly insufficient to hold all hash code values, this API
+ *     represents a hash code as an instance of {@link HashCode}.
+ *
+ * <li><b>pure function:</b> the value produced must depend only on the input bytes, in
+ *     the order they appear. Input data is never modified.
+ *
+ * <li><b>collision-averse:</b> while it can't be helped that a hash function will
+ *     sometimes produce the same hash code for distinct inputs (a "collision"), every
+ *     hash function strives to <i>some</i> degree to make this unlikely. (Without this
+ *     condition, a function that always returns zero could be called a hash function. It
+ *     is not.)
+ * </ul>
+ *
+ * <p>Summarizing the last two points: "equal yield equal <i>always</i>; unequal yield
+ * unequal <i>often</i>." This is the most important characteristic of all hash functions.
+ *
+ * <h3>Desirable properties</h3>
+ *
+ * <p>A high-quality hash function strives for some subset of the following virtues:
+ *
+ * <ul>
+ * <li><b>collision-resistant:</b> while the definition above requires making at least
+ *     <i>some</i> token attempt, one measure of the quality of a hash function is <i>how
+ *     well</i> it succeeds at this goal. Important note: it may be easy to achieve the
+ *     theoretical minimum collision rate when using completely <i>random</i> sample
+ *     input. The true test of a hash function is how it performs on representative
+ *     real-world data, which tends to contain many hidden patterns and clumps. The goal
+ *     of a good hash function is to stamp these patterns out as thoroughly as possible.
+ *
+ * <li><b>bit-dispersing:</b> masking out any <i>single bit</i> from a hash code should
+ *     yield only the expected <i>twofold</i> increase to all collision rates. Informally,
+ *     the "information" in the hash code should be as evenly "spread out" through the
+ *     hash code's bits as possible. The result is that, for example, when choosing a
+ *     bucket in a hash table of size 2^8, <i>any</i> eight bits could be consistently
+ *     used.
+ *
+ * <li><b>cryptographic:</b> certain hash functions such as {@link Hashing#sha512} are
+ *     designed to make it as infeasible as possible to reverse-engineer the input that
+ *     produced a given hash code, or even to discover <i>any</i> two distinct inputs that
+ *     yield the same result. These are called <i>cryptographic hash functions</i>. But,
+ *     whenever it is learned that either of these feats has become computationally
+ *     feasible, the function is deemed "broken" and should no longer be used for secure
+ *     purposes. (This is the likely eventual fate of <i>all</i> cryptographic hashes.)
+ *
+ * <li><b>fast:</b> perhaps self-explanatory, but often the most important consideration.
+ *     We have published <a href="#noWeHaventYet">microbenchmark results</a> for many
+ *     common hash functions.
+ * </ul>
+ *
+ * <h3>Providing input to a hash function</h3>
+ *
+ * <p>The primary way to provide the data that your hash function should act on is via a
+ * {@link Hasher}. Obtain a new hasher from the hash function using {@link #newHasher},
+ * "push" the relevant data into it using methods like {@link Hasher#putBytes(byte[])},
+ * and finally ask for the {@code HashCode} when finished using {@link Hasher#hash}. (See
+ * an {@linkplain #newHasher example} of this.)
+ *
+ * <p>If all you want to hash is a single byte array, string or {@code long} value, there
+ * are convenient shortcut methods defined directly on {@link HashFunction} to make this
+ * easier.
+ *
+ * <p>Hasher accepts primitive data types, but can also accept any Object of type {@code
+ * T} provided that you implement a {@link Funnel Funnel<T>} to specify how to "feed" data
+ * from that object into the function. (See {@linkplain Hasher#putObject an example} of
+ * this.)
+ *
+ * <p><b>Compatibility note:</b> Throughout this API, multibyte values are always
+ * interpreted in <i>little-endian</i> order. That is, hashing the byte array {@code
+ * {0x01, 0x02, 0x03, 0x04}} is equivalent to hashing the {@code int} value {@code
+ * 0x04030201}. If this isn't what you need, methods such as {@link Integer#reverseBytes}
+ * and {@link Ints#toByteArray} will help.
+ *
+ * <h3>Relationship to {@link Object#hashCode}</h3>
+ *
+ * <p>Java's baked-in concept of hash codes is constrained to 32 bits, and provides no
+ * separation between hash algorithms and the data they act on, so alternate hash
+ * algorithms can't be easily substituted. Also, implementations of {@code hashCode} tend
+ * to be poor-quality, in part because they end up depending on <i>other</i> existing
+ * poor-quality {@code hashCode} implementations, including those in many JDK classes.
+ *
+ * <p>{@code Object.hashCode} implementations tend to be very fast, but have weak
+ * collision prevention and <i>no</i> expectation of bit dispersion. This leaves them
+ * perfectly suitable for use in hash tables, because extra collisions cause only a slight
+ * performance hit, while poor bit dispersion is easily corrected using a secondary hash
+ * function (which all reasonable hash table implementations in Java use). For the many
+ * uses of hash functions beyond data structures, however, {@code Object.hashCode} almost
+ * always falls short -- hence this library.
+ *
+ * @author Kevin Bourrillion
+ * @since 11.0
+ */
+@Beta
+public interface HashFunction {
+  /**
+   * Begins a new hash code computation by returning an initialized, stateful {@code
+   * Hasher} instance that is ready to receive data. Example: <pre>   {@code
+   *
+   *   HashFunction hf = Hashing.md5();
+   *   HashCode hc = hf.newHasher()
+   *       .putLong(id)
+   *       .putString(name)
+   *       .hash();}</pre>
+   */
+  Hasher newHasher();
+
+  /**
+   * Begins a new hash code computation as {@link #newHasher()}, but provides a hint of the 
+   * expected size of the input (in bytes). This is only important for non-streaming hash
+   * functions (hash functions that need to buffer their whole input before processing any 
+   * of it).  
+   */
+  Hasher newHasher(int expectedInputSize); 
+
+  /**
+   * Shortcut for {@code newHasher().putLong(input).hash()}; returns the hash code for the
+   * given {@code long} value, interpreted in little-endian byte order. The implementation
+   * <i>might</i> perform better than its longhand equivalent, but should not perform worse.
+   */
+  HashCode hashLong(long input);
+
+  /**
+   * Shortcut for {@code newHasher().putBytes(input).hash()}. The implementation
+   * <i>might</i> perform better than its longhand equivalent, but should not perform
+   * worse.
+   */
+  HashCode hashBytes(byte[] input);
+
+  /**
+   * Shortcut for {@code newHasher().putBytes(input, off, len).hash()}. The implementation
+   * <i>might</i> perform better than its longhand equivalent, but should not perform 
+   * worse. 
+   * 
+   * @throws IndexOutOfBoundsException if {@code off < 0} or {@code off + len > bytes.length}
+   *   or {@code len < 0}
+   */
+  HashCode hashBytes(byte[] input, int off, int len);
+
+  /**
+   * Shortcut for {@code newHasher().putString(input).hash()}. The implementation <i>might</i>
+   * perform better than its longhand equivalent, but should not perform worse. Note that no
+   * character encoding is performed; the low byte and high byte of each character are hashed
+   * directly (in that order). This is equivalent to using
+   * {@code hashString(input, Charsets.UTF_16LE)}.
+   */
+  HashCode hashString(CharSequence input);
+
+  /**
+   * Shortcut for {@code newHasher().putString(input, charset).hash()}. Characters are encoded
+   * using the given {@link Charset}. The implementation <i>might</i> perform better than its
+   * longhand equivalent, but should not perform worse.
+   */
+  HashCode hashString(CharSequence input, Charset charset);
+
+  /**
+   * Returns the number of bits (a multiple of 32) that each hash code produced by this
+   * hash function has.
+   */
+  int bits();
+}
diff --git a/guava/src/com/google/common/hash/Hasher.java b/guava/src/com/google/common/hash/Hasher.java
new file mode 100644
index 0000000..b10d536
--- /dev/null
+++ b/guava/src/com/google/common/hash/Hasher.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.hash;
+
+import com.google.common.annotations.Beta;
+
+import java.nio.charset.Charset;
+
+/**
+ * A {@link Sink} that can compute a hash code after reading the input. Each hasher should
+ * translate all multibyte values ({@link #putInt(int)}, {@link #putLong(long)}, etc) to bytes 
+ * in little-endian order.
+ *
+ * @author Kevin Bourrillion
+ * @since 11.0
+ */
+@Beta
+public interface Hasher extends Sink {
+  @Override Hasher putByte(byte b);
+  @Override Hasher putBytes(byte[] bytes);
+  @Override Hasher putBytes(byte[] bytes, int off, int len);
+  @Override Hasher putShort(short s);
+  @Override Hasher putInt(int i);
+  @Override Hasher putLong(long l);
+  /**
+   * Equivalent to {@code putInt(Float.floatToRawIntBits(f))}.
+   */
+  @Override Hasher putFloat(float f);
+  /**
+   * Equivalent to {@code putLong(Double.doubleToRawLongBits(d))}.
+   */
+  @Override Hasher putDouble(double d);
+  /**
+   * Equivalent to {@code putByte(b ? (byte) 1 : (byte) 0)}.
+   */
+  @Override Hasher putBoolean(boolean b);
+  @Override Hasher putChar(char c);
+  /**
+   * Equivalent to {@code putBytes(charSequence.toString().getBytes(Charsets.UTF_16LE)}.
+   */
+  @Override Hasher putString(CharSequence charSequence);
+  /**
+   * Equivalent to {@code putBytes(charSequence.toString().getBytes(charset)}.
+   */
+  @Override Hasher putString(CharSequence charSequence, Charset charset);
+
+  /**
+   * A simple convenience for {@code funnel.funnel(object, this)}.
+   */
+  <T> Hasher putObject(T instance, Funnel<? super T> funnel);
+
+  /**
+   * Computes a hash code based on the data that have been provided to this hasher. The result is
+   * unspecified if this method is called more than once on the same instance. 
+   */
+  HashCode hash();
+}
diff --git a/guava/src/com/google/common/hash/Hashing.java b/guava/src/com/google/common/hash/Hashing.java
new file mode 100644
index 0000000..f2582c7
--- /dev/null
+++ b/guava/src/com/google/common/hash/Hashing.java
@@ -0,0 +1,297 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.hash;
+
+import static com.google.common.base.Preconditions.checkArgument;
+
+import com.google.common.annotations.Beta;
+import com.google.common.primitives.UnsignedInts;
+
+import java.nio.ByteBuffer;
+import java.security.MessageDigest;
+import java.util.Iterator;
+
+/**
+ * Static methods to obtain {@link HashFunction} instances, and other static
+ * hashing-related utilities.
+ *
+ * @author Kevin Bourrillion
+ * @author Dimitris Andreou
+ * @author Kurt Alfred Kluever
+ * @since 11.0
+ */
+@Beta
+public final class Hashing {
+  private Hashing() {}
+
+  /**
+   * Returns a general-purpose, <b>non-cryptographic-strength</b>, streaming hash function that
+   * produces hash codes of length at least {@code minimumBits}. Users without specific
+   * compatibility requirements and who do not persist the hash codes are encouraged to
+   * choose this hash function.
+   *
+   * <p><b>Warning: the implementation is unspecified and is subject to change.</b>
+   *
+   * @throws IllegalArgumentException if {@code minimumBits} is not positive
+   */
+  public static HashFunction goodFastHash(int minimumBits) {
+    int bits = checkPositiveAndMakeMultipleOf32(minimumBits);
+
+    if (bits == 32) {
+      return murmur3_32();
+    } else if (bits <= 128) {
+      return murmur3_128();
+    } else {
+      // Join some 128-bit murmur3s
+      int hashFunctionsNeeded = (bits + 127) / 128;
+      HashFunction[] hashFunctions = new HashFunction[hashFunctionsNeeded];
+      for (int i = 0; i < hashFunctionsNeeded; i++) {
+        hashFunctions[i] = murmur3_128(i * 1500450271 /* a prime; shouldn't matter */);
+      }
+      return new ConcatenatedHashFunction(hashFunctions);
+    }
+  }
+
+  /**
+   * Returns a hash function implementing the
+   * <a href="http://smhasher.googlecode.com/svn/trunk/MurmurHash3.cpp">32-bit murmur3
+   * algorithm</a> (little-endian variant), using the given seed value.
+   */
+  public static HashFunction murmur3_32(int seed) {
+    return new Murmur3_32HashFunction(seed);
+  }
+
+  /**
+   * Returns a hash function implementing the
+   * <a href="http://smhasher.googlecode.com/svn/trunk/MurmurHash3.cpp">32-bit murmur3
+   * algorithm</a> (little-endian variant), using a seed value of zero.
+   */
+  public static HashFunction murmur3_32() {
+    return MURMUR3_32;
+  }
+
+  private static final Murmur3_32HashFunction MURMUR3_32 = new Murmur3_32HashFunction(0);
+
+  /**
+   * Returns a hash function implementing the
+   * <a href="http://smhasher.googlecode.com/svn/trunk/MurmurHash3.cpp">
+   * 128-bit murmur3 algorithm, x64 variant</a> (little-endian variant), using the given seed
+   * value.
+   */
+  public static HashFunction murmur3_128(int seed) {
+    return new Murmur3_128HashFunction(seed);
+  }
+
+  /**
+   * Returns a hash function implementing the
+   * <a href="http://smhasher.googlecode.com/svn/trunk/MurmurHash3.cpp">
+   * 128-bit murmur3 algorithm, x64 variant</a>  (little-endian variant), using a seed value
+   * of zero.
+   */
+  public static HashFunction murmur3_128() {
+    return MURMUR3_128;
+  }
+
+  private static final Murmur3_128HashFunction MURMUR3_128 = new Murmur3_128HashFunction(0);
+
+  /**
+   * Returns a hash function implementing the MD5 hash algorithm by delegating to the MD5
+   * {@link MessageDigest}.
+   */
+  public static HashFunction md5() {
+    return MD5;
+  }
+
+  private static final HashFunction MD5 = new MessageDigestHashFunction("MD5");
+
+  /**
+   * Returns a hash function implementing the SHA-1 algorithm by delegating to the SHA-1
+   * {@link MessageDigest}.
+   */
+  public static HashFunction sha1() {
+    return SHA_1;
+  }
+
+  private static final HashFunction SHA_1 = new MessageDigestHashFunction("SHA-1");
+
+  /**
+   * Returns a hash function implementing the SHA-256 algorithm by delegating to the SHA-256
+   * {@link MessageDigest}.
+   */
+  public static HashFunction sha256() {
+    return SHA_256;
+  }
+
+  private static final HashFunction SHA_256 = new MessageDigestHashFunction("SHA-256");
+
+  /**
+   * Returns a hash function implementing the SHA-512 algorithm by delegating to the SHA-512
+   * {@link MessageDigest}.
+   */
+  public static HashFunction sha512() {
+    return SHA_512;
+  }
+
+  private static final HashFunction SHA_512 = new MessageDigestHashFunction("SHA-512");
+
+  /**
+   * If {@code hashCode} has enough bits, returns {@code hashCode.asLong()}, otherwise
+   * returns a {@code long} value with {@code hashCode.asInt()} as the least-significant
+   * four bytes and {@code 0x00} as each of the most-significant four bytes.
+   */
+  public static long padToLong(HashCode hashCode) {
+    return (hashCode.bits() < 64) ? UnsignedInts.toLong(hashCode.asInt()) : hashCode.asLong();
+  }
+
+  /**
+   * Assigns to {@code hashCode} a "bucket" in the range {@code [0, buckets)}, in a uniform
+   * manner that minimizes the need for remapping as {@code buckets} grows. That is,
+   * {@code consistentHash(h, n)} equals:
+   *
+   * <ul>
+   * <li>{@code n - 1}, with approximate probability {@code 1/n}
+   * <li>{@code consistentHash(h, n - 1)}, otherwise (probability {@code 1 - 1/n})
+   * </ul>
+   *
+   * <p>See the <a href="http://en.wikipedia.org/wiki/Consistent_hashing">wikipedia
+   * article on consistent hashing</a> for more information.
+   */
+  public static int consistentHash(HashCode hashCode, int buckets) {
+    return consistentHash(padToLong(hashCode), buckets);
+  }
+
+  /**
+   * Assigns to {@code input} a "bucket" in the range {@code [0, buckets)}, in a uniform
+   * manner that minimizes the need for remapping as {@code buckets} grows. That is,
+   * {@code consistentHash(h, n)} equals:
+   *
+   * <ul>
+   * <li>{@code n - 1}, with approximate probability {@code 1/n}
+   * <li>{@code consistentHash(h, n - 1)}, otherwise (probability {@code 1 - 1/n})
+   * </ul>
+   *
+   * <p>See the <a href="http://en.wikipedia.org/wiki/Consistent_hashing">wikipedia
+   * article on consistent hashing</a> for more information.
+   */
+  public static int consistentHash(long input, int buckets) {
+    checkArgument(buckets > 0, "buckets must be positive: %s", buckets);
+    long h = input;
+    int candidate = 0;
+    int next;
+
+    // Jump from bucket to bucket until we go out of range
+    while (true) {
+      // See http://en.wikipedia.org/wiki/Linear_congruential_generator
+      // These values for a and m come from the C++ version of this function.
+      h = 2862933555777941757L * h + 1;
+      double inv = 0x1.0p31 / ((int) (h >>> 33) + 1);
+      next = (int) ((candidate + 1) * inv);
+
+      if (next >= 0 && next < buckets) {
+        candidate = next;
+      } else {
+        return candidate;
+      }
+    }
+  }
+
+  /**
+   * Returns a hash code, having the same bit length as each of the input hash codes,
+   * that combines the information of these hash codes in an ordered fashion. That
+   * is, whenever two equal hash codes are produced by two calls to this method, it
+   * is <i>as likely as possible</i> that each was computed from the <i>same</i>
+   * input hash codes in the <i>same</i> order.
+   *
+   * @throws IllegalArgumentException if {@code hashCodes} is empty, or the hash codes
+   *     do not all have the same bit length
+   */
+  public static HashCode combineOrdered(Iterable<HashCode> hashCodes) {
+    Iterator<HashCode> iterator = hashCodes.iterator();
+    checkArgument(iterator.hasNext(), "Must be at least 1 hash code to combine.");
+    int bits = iterator.next().bits();
+    byte[] resultBytes = new byte[bits / 8];
+    for (HashCode hashCode : hashCodes) {
+      byte[] nextBytes = hashCode.asBytes();
+      checkArgument(nextBytes.length == resultBytes.length,
+          "All hashcodes must have the same bit length.");
+      for (int i = 0; i < nextBytes.length; i++) {
+        resultBytes[i] = (byte) (resultBytes[i] * 37 ^ nextBytes[i]);
+      }
+    }
+    return HashCodes.fromBytes(resultBytes);
+  }
+
+  /**
+   * Returns a hash code, having the same bit length as each of the input hash codes,
+   * that combines the information of these hash codes in an unordered fashion. That
+   * is, whenever two equal hash codes are produced by two calls to this method, it
+   * is <i>as likely as possible</i> that each was computed from the <i>same</i>
+   * input hash codes in <i>some</i> order.
+   *
+   * @throws IllegalArgumentException if {@code hashCodes} is empty, or the hash codes
+   *     do not all have the same bit length
+   */
+  public static HashCode combineUnordered(Iterable<HashCode> hashCodes) {
+    Iterator<HashCode> iterator = hashCodes.iterator();
+    checkArgument(iterator.hasNext(), "Must be at least 1 hash code to combine.");
+    byte[] resultBytes = new byte[iterator.next().bits() / 8];
+    for (HashCode hashCode : hashCodes) {
+      byte[] nextBytes = hashCode.asBytes();
+      checkArgument(nextBytes.length == resultBytes.length,
+          "All hashcodes must have the same bit length.");
+      for (int i = 0; i < nextBytes.length; i++) {
+        resultBytes[i] += nextBytes[i];
+      }
+    }
+    return HashCodes.fromBytes(resultBytes);
+  }
+
+  /**
+   * Checks that the passed argument is positive, and ceils it to a multiple of 32.
+   */
+  static int checkPositiveAndMakeMultipleOf32(int bits) {
+    checkArgument(bits > 0, "Number of bits must be positive");
+    return (bits + 31) & ~31;
+  }
+
+  // TODO(kevinb): probably expose this via a Hashing method at some point?
+  private static class ConcatenatedHashFunction extends AbstractCompositeHashFunction {
+    final int bits;
+
+    ConcatenatedHashFunction(HashFunction[] functions) {
+      super(functions);
+      int bitSum = 0;
+      for (HashFunction f : this.functions) {
+        bitSum += f.bits();
+      }
+      this.bits = bitSum;
+    }
+
+    @Override
+    HashCode makeHash(Hasher[] hashers) {
+      byte[] bytes = new byte[bits / 8];
+      ByteBuffer buffer = ByteBuffer.wrap(bytes);
+      for (Hasher hasher : hashers) {
+        buffer.put(hasher.hash().asBytes());
+      }
+      return HashCodes.fromBytes(bytes);
+    }
+
+    @Override
+    public int bits() {
+      return bits;
+    }
+  }
+}
diff --git a/guava/src/com/google/common/hash/MessageDigestHashFunction.java b/guava/src/com/google/common/hash/MessageDigestHashFunction.java
new file mode 100644
index 0000000..03c6471
--- /dev/null
+++ b/guava/src/com/google/common/hash/MessageDigestHashFunction.java
@@ -0,0 +1,173 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.hash;
+
+import static com.google.common.base.Preconditions.checkState;
+import static com.google.common.base.Preconditions.checkPositionIndexes;
+
+import com.google.common.primitives.Chars;
+import com.google.common.primitives.Ints;
+import com.google.common.primitives.Longs;
+import com.google.common.primitives.Shorts;
+
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.nio.charset.Charset;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+/**
+ * {@link HashFunction} adapter for {@link MessageDigest}s.
+ *
+ * @author kevinb@google.com (Kevin Bourrillion)
+ * @author andreou@google.com (Dimitris Andreou)
+ */
+final class MessageDigestHashFunction extends AbstractStreamingHashFunction {
+  private final String algorithmName;
+  private final int bits;
+
+  MessageDigestHashFunction(String algorithmName) {
+    this.algorithmName = algorithmName;
+    this.bits = getMessageDigest(algorithmName).getDigestLength() * 8;
+  }
+
+  public int bits() {
+    return bits;
+  }
+
+  private static MessageDigest getMessageDigest(String algorithmName) {
+    try {
+      return MessageDigest.getInstance(algorithmName);
+    } catch (NoSuchAlgorithmException e) {
+      throw new AssertionError(e);
+    }
+  }
+
+  @Override public Hasher newHasher() {
+    return new MessageDigestHasher(getMessageDigest(algorithmName));
+  }
+
+  private static class MessageDigestHasher implements Hasher {
+    private final MessageDigest digest;
+    private final ByteBuffer scratch; // lazy convenience
+    private boolean done;
+
+    private MessageDigestHasher(MessageDigest digest) {
+      this.digest = digest;
+      this.scratch = ByteBuffer.allocate(8).order(ByteOrder.LITTLE_ENDIAN);
+    }
+
+    @Override public Hasher putByte(byte b) {
+      checkNotDone();
+      digest.update(b);
+      return this;
+    }
+
+    @Override public Hasher putBytes(byte[] bytes) {
+      checkNotDone();
+      digest.update(bytes);
+      return this;
+    }
+
+    @Override public Hasher putBytes(byte[] bytes, int off, int len) {
+      checkNotDone();
+      checkPositionIndexes(off, off + len, bytes.length);
+      digest.update(bytes, off, len);
+      return this;
+    }
+
+    @Override public Hasher putShort(short s) {
+      checkNotDone();
+      scratch.putShort(s);
+      digest.update(scratch.array(), 0, Shorts.BYTES);
+      scratch.clear();
+      return this;
+    }
+
+    @Override public Hasher putInt(int i) {
+      checkNotDone();
+      scratch.putInt(i);
+      digest.update(scratch.array(), 0, Ints.BYTES);
+      scratch.clear();
+      return this;
+    }
+
+    @Override public Hasher putLong(long l) {
+      checkNotDone();
+      scratch.putLong(l);
+      digest.update(scratch.array(), 0, Longs.BYTES);
+      scratch.clear();
+      return this;
+    }
+
+    @Override public Hasher putFloat(float f) {
+      checkNotDone();
+      scratch.putFloat(f);
+      digest.update(scratch.array(), 0, 4);
+      scratch.clear();
+      return this;
+    }
+
+    @Override public Hasher putDouble(double d) {
+      checkNotDone();
+      scratch.putDouble(d);
+      digest.update(scratch.array(), 0, 8);
+      scratch.clear();
+      return this;
+    }
+
+    @Override public Hasher putBoolean(boolean b) {
+      return putByte(b ? (byte) 1 : (byte) 0);
+    }
+
+    @Override public Hasher putChar(char c) {
+      checkNotDone();
+      scratch.putChar(c);
+      digest.update(scratch.array(), 0, Chars.BYTES);
+      scratch.clear();
+      return this;
+    }
+
+    @Override public Hasher putString(CharSequence charSequence) {
+      for (int i = 0; i < charSequence.length(); i++) {
+        putChar(charSequence.charAt(i));
+      }
+      return this;
+    }
+
+    @Override public Hasher putString(CharSequence charSequence, Charset charset) {
+      try {
+        return putBytes(charSequence.toString().getBytes(charset.name()));
+      } catch (java.io.UnsupportedEncodingException impossible) {
+        throw new AssertionError(impossible);
+      }
+    }
+
+    @Override public <T> Hasher putObject(T instance, Funnel<? super T> funnel) {
+      checkNotDone();
+      funnel.funnel(instance, this);
+      return this;
+    }
+
+    private void checkNotDone() {
+      checkState(!done, "Cannot use Hasher after calling #hash() on it");
+    }
+
+    public HashCode hash() {
+      done = true;
+      return HashCodes.fromBytes(digest.digest());
+    }
+  }
+}
diff --git a/guava/src/com/google/common/hash/Murmur3_128HashFunction.java b/guava/src/com/google/common/hash/Murmur3_128HashFunction.java
new file mode 100644
index 0000000..cd49f87
--- /dev/null
+++ b/guava/src/com/google/common/hash/Murmur3_128HashFunction.java
@@ -0,0 +1,165 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.hash;
+
+import static com.google.common.primitives.UnsignedBytes.toInt;
+
+import java.io.Serializable;
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+
+/**
+ * See http://smhasher.googlecode.com/svn/trunk/MurmurHash3.cpp
+ * MurmurHash3_x64_128
+ *
+ * @author aappleby@google.com (Austin Appleby)
+ * @author andreou@google.com (Dimitris Andreou)
+ */
+final class Murmur3_128HashFunction extends AbstractStreamingHashFunction implements Serializable {
+  // TODO(user): when the shortcuts are implemented, update BloomFilterStrategies
+  private final int seed;
+
+  Murmur3_128HashFunction(int seed) {
+    this.seed = seed;
+  }
+
+  @Override public int bits() {
+    return 128;
+  }
+
+  @Override public Hasher newHasher() {
+    return new Murmur3_128Hasher(seed);
+  }
+
+  private static final class Murmur3_128Hasher extends AbstractStreamingHasher {
+    long h1;
+    long h2;
+    long c1 = 0x87c37b91114253d5L;
+    long c2 = 0x4cf5ad432745937fL;
+    int len;
+
+    Murmur3_128Hasher(int seed) {
+      super(16);
+      h1 = seed;
+      h2 = seed;
+    }
+
+    @Override protected void process(ByteBuffer bb) {
+      long k1 = bb.getLong();
+      long k2 = bb.getLong();
+      len += 16;
+      bmix64(k1, k2);
+    }
+
+    private void bmix64(long k1, long k2) {
+      k1 *= c1;
+      k1 = Long.rotateLeft(k1, 31);
+      k1 *= c2;
+      h1 ^= k1;
+
+      h1 = Long.rotateLeft(h1, 27);
+      h1 += h2;
+      h1 = h1 * 5 + 0x52dce729;
+
+      k2 *= c2;
+      k2 = Long.rotateLeft(k2, 33);
+      k2 *= c1;
+      h2 ^= k2;
+
+      h2 = Long.rotateLeft(h2, 31);
+      h2 += h1;
+      h2 = h2 * 5 + 0x38495ab5;
+    }
+
+    @Override protected void processRemaining(ByteBuffer bb) {
+      long k1 = 0;
+      long k2 = 0;
+      len += bb.remaining();
+      switch (bb.remaining()) {
+        case 15:
+          k2 ^= (long) toInt(bb.get(14)) << 48; // fall through
+        case 14:
+          k2 ^= (long) toInt(bb.get(13)) << 40; // fall through
+        case 13:
+          k2 ^= (long) toInt(bb.get(12)) << 32; // fall through
+        case 12:
+          k2 ^= (long) toInt(bb.get(11)) << 24; // fall through
+        case 11:
+          k2 ^= (long) toInt(bb.get(10)) << 16; // fall through
+        case 10:
+          k2 ^= (long) toInt(bb.get(9)) << 8; // fall through
+        case 9:
+          k2 ^= (long) toInt(bb.get(8)) << 0;
+          k2 *= c2;
+          k2 = Long.rotateLeft(k2, 33);
+          k2 *= c1;
+          h2 ^= k2;
+          // fall through
+        case 8:
+          k1 ^= (long) toInt(bb.get(7)) << 56; // fall through
+        case 7:
+          k1 ^= (long) toInt(bb.get(6)) << 48; // fall through
+        case 6:
+          k1 ^= (long) toInt(bb.get(5)) << 40; // fall through
+        case 5:
+          k1 ^= (long) toInt(bb.get(4)) << 32; // fall through
+        case 4:
+          k1 ^= (long) toInt(bb.get(3)) << 24; // fall through
+        case 3:
+          k1 ^= (long) toInt(bb.get(2)) << 16; // fall through
+        case 2:
+          k1 ^= (long) toInt(bb.get(1)) << 8; // fall through
+        case 1:
+          k1 ^= (long) toInt(bb.get(0)) << 0;
+          k1 *= c1;
+          k1 = Long.rotateLeft(k1, 31);
+          k1 *= c2;
+          h1 ^= k1;
+          // fall through
+        default:
+      }
+    }
+
+    @Override public HashCode makeHash() {
+      h1 ^= len;
+      h2 ^= len;
+
+      h1 += h2;
+      h2 += h1;
+
+      h1 = fmix64(h1);
+      h2 = fmix64(h2);
+
+      h1 += h2;
+      h2 += h1;
+
+      ByteBuffer bb = ByteBuffer.wrap(new byte[16]).order(ByteOrder.LITTLE_ENDIAN);
+      bb.putLong(h1);
+      bb.putLong(h2);
+      return HashCodes.fromBytes(bb.array());
+    }
+
+    private long fmix64(long k) {
+      k ^= k >>> 33;
+      k *= 0xff51afd7ed558ccdL;
+      k ^= k >>> 33;
+      k *= 0xc4ceb9fe1a85ec53L;
+      k ^= k >>> 33;
+      return k;
+    }
+  }
+
+  private static final long serialVersionUID = 0L;
+}
diff --git a/guava/src/com/google/common/hash/Murmur3_32HashFunction.java b/guava/src/com/google/common/hash/Murmur3_32HashFunction.java
new file mode 100644
index 0000000..5c03b92
--- /dev/null
+++ b/guava/src/com/google/common/hash/Murmur3_32HashFunction.java
@@ -0,0 +1,103 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.hash;
+
+import static com.google.common.primitives.UnsignedBytes.toInt;
+
+import java.io.Serializable;
+import java.nio.ByteBuffer;
+
+/**
+ * See http://smhasher.googlecode.com/svn/trunk/MurmurHash3.cpp
+ * MurmurHash3_x86_32
+ * 
+ * @author aappleby@google.com (Austin Appleby)
+ * @author andreou@google.com (Dimitris Andreou)
+ */
+final class Murmur3_32HashFunction extends AbstractStreamingHashFunction implements Serializable {
+  private final int seed;
+  
+  Murmur3_32HashFunction(int seed) {
+    this.seed = seed;
+  }
+
+  @Override public int bits() {
+    return 32;
+  }
+
+  @Override public Hasher newHasher() {
+    return new Murmur3_32Hasher(seed);
+  }
+
+  private static final class Murmur3_32Hasher extends AbstractStreamingHasher {
+    int h1;
+    int c1 = 0xcc9e2d51;
+    int c2 = 0x1b873593;
+    int len;
+
+    Murmur3_32Hasher(int seed) {
+      super(4);
+      h1 = seed;
+    }
+
+    @Override protected void process(ByteBuffer bb) {
+      int k1 = bb.getInt();
+      len += 4;
+      
+      k1 *= c1; 
+      k1 = Integer.rotateLeft(k1, 15); 
+      k1 *= c2;
+      
+      h1 ^= k1;
+      h1 = Integer.rotateLeft(h1, 13);
+      h1 = h1 * 5 + 0xe6546b64;
+    }
+    
+    @Override protected void processRemaining(ByteBuffer bb) {
+      len += bb.remaining();
+      int k1 = 0;
+      switch (bb.remaining()) {
+        case 3:
+          k1 ^= toInt(bb.get(2)) << 16;
+          // fall through
+        case 2:
+          k1 ^= toInt(bb.get(1)) << 8;
+          // fall through
+        case 1:
+          k1 ^= toInt(bb.get(0));
+          // fall through
+        default:
+          k1 *= c1;
+          k1 = Integer.rotateLeft(k1, 15);
+          k1 *= c2;
+          h1 ^= k1;
+      }
+    }
+    
+    @Override public HashCode makeHash() {
+      h1 ^= len;
+
+      h1 ^= h1 >>> 16;
+      h1 *= 0x85ebca6b;
+      h1 ^= h1 >>> 13;
+      h1 *= 0xc2b2ae35;
+      h1 ^= h1 >>> 16;
+          
+      return HashCodes.fromInt(h1);
+    }
+  }
+  
+  private static final long serialVersionUID = 0L;
+}
diff --git a/guava/src/com/google/common/hash/Sink.java b/guava/src/com/google/common/hash/Sink.java
new file mode 100644
index 0000000..37167fc
--- /dev/null
+++ b/guava/src/com/google/common/hash/Sink.java
@@ -0,0 +1,102 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.hash;
+
+import com.google.common.annotations.Beta;
+
+import java.nio.charset.Charset;
+
+/**
+ * An object which can receive a stream of primitive values.
+ * 
+ * @author Kevin Bourrillion
+ * @since 11.0
+ */
+@Beta
+public interface Sink {
+  /**
+   * Puts a byte into this sink.
+   *
+   * @param b a byte
+   * @return this instance
+   */
+  Sink putByte(byte b);
+
+  /**
+   * Puts an array of bytes into this sink.
+   *
+   * @param bytes a byte array
+   * @return this instance
+   */
+  Sink putBytes(byte[] bytes);
+  
+  /**
+   * Puts a chunk of an array of bytes into this sink. {@code bytes[off]} is the first byte written,
+   * {@code bytes[off + len - 1]} is the last. 
+   * 
+   * @param bytes a byte array
+   * @param off the start offset in the array
+   * @param len the number of bytes to write
+   * @return this instance 
+   * @throws IndexOutOfBoundsException if {@code off < 0} or {@code off + len > bytes.length} or
+   *   {@code len < 0}
+   */
+  Sink putBytes(byte[] bytes, int off, int len);
+
+  /**
+   * Puts a short into this sink.
+   */
+  Sink putShort(short s);
+
+  /**
+   * Puts an int into this sink.
+   */
+  Sink putInt(int i);
+
+  /**
+   * Puts a long into this sink.
+   */
+  Sink putLong(long l);
+
+  /**
+   * Puts a float into this sink.
+   */
+  Sink putFloat(float f);
+
+  /**
+   * Puts a double into this sink.
+   */
+  Sink putDouble(double d);
+
+  /**
+   * Puts a boolean into this sink.
+   */
+  Sink putBoolean(boolean b);
+
+  /**
+   * Puts a character into this sink.
+   */
+  Sink putChar(char c);
+
+  /**
+   * Puts a string into this sink.
+   */
+  Sink putString(CharSequence charSequence);
+
+  /**
+   * Puts a string into this sink using the given charset.
+   */
+  Sink putString(CharSequence charSequence, Charset charset);
+}
diff --git a/guava/src/com/google/common/hash/package-info.java b/guava/src/com/google/common/hash/package-info.java
new file mode 100644
index 0000000..4acc096
--- /dev/null
+++ b/guava/src/com/google/common/hash/package-info.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright (C) 2011 The Guava Authors.
+ *
+ * Licensed 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.
+ */
+
+// TODO(user): when things stabilize, flesh this out
+/**
+ * Hash functions and related structures.
+ */
+@ParametersAreNonnullByDefault
+package com.google.common.hash;
+
+import javax.annotation.ParametersAreNonnullByDefault;
diff --git a/guava/src/com/google/common/io/AppendableWriter.java b/guava/src/com/google/common/io/AppendableWriter.java
new file mode 100644
index 0000000..8033e46
--- /dev/null
+++ b/guava/src/com/google/common/io/AppendableWriter.java
@@ -0,0 +1,117 @@
+/*
+ * Copyright (C) 2006 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.io;
+
+import java.io.Closeable;
+import java.io.Flushable;
+import java.io.IOException;
+import java.io.Writer;
+
+/**
+ * Writer that places all output on an {@link Appendable} target. If the target
+ * is {@link Flushable} or {@link Closeable}, flush()es and close()s will also
+ * be delegated to the target.
+ *
+ * @author Alan Green
+ * @author Sebastian Kanthak
+ * @since 1.0
+ */
+class AppendableWriter extends Writer {
+  private final Appendable target;
+  private boolean closed;
+
+  /**
+   * Creates a new writer that appends everything it writes to {@code target}.
+   *
+   * @param target target to which to append output
+   */
+  AppendableWriter(Appendable target) {
+    this.target = target;
+  }
+
+  /*
+   * Abstract methods from Writer
+   */
+
+  @Override public void write(char cbuf[], int off, int len)
+      throws IOException {
+    checkNotClosed();
+    // It turns out that creating a new String is usually as fast, or faster
+    // than wrapping cbuf in a light-weight CharSequence.
+    target.append(new String(cbuf, off, len));
+  }
+
+  @Override public void flush() throws IOException {
+    checkNotClosed();
+    if (target instanceof Flushable) {
+      ((Flushable) target).flush();
+    }
+  }
+
+  @Override public void close() throws IOException {
+    this.closed = true;
+    if (target instanceof Closeable) {
+      ((Closeable) target).close();
+    }
+  }
+
+  /*
+   * Override a few functions for performance reasons to avoid creating
+   * unnecessary strings.
+   */
+
+  @Override public void write(int c) throws IOException {
+    checkNotClosed();
+    target.append((char) c);
+  }
+
+  @Override public void write(String str) throws IOException {
+    checkNotClosed();
+    target.append(str);
+  }
+
+  @Override public void write(String str, int off, int len) throws IOException {
+    checkNotClosed();
+    // tricky: append takes start, end pair...
+    target.append(str, off, off + len);
+  }
+
+  @Override public Writer append(char c) throws IOException {
+    checkNotClosed();
+    target.append(c);
+    return this;
+  }
+
+  @Override public Writer append(CharSequence charSeq) throws IOException {
+    checkNotClosed();
+    target.append(charSeq);
+    return this;
+  }
+
+  @Override public Writer append(CharSequence charSeq, int start, int end)
+      throws IOException {
+    checkNotClosed();
+    target.append(charSeq, start, end);
+    return this;
+  }
+
+  private void checkNotClosed() throws IOException {
+    if (closed) {
+      throw new IOException("Cannot write to a closed writer.");
+    }
+  }
+}
diff --git a/guava/src/com/google/common/io/ByteArrayDataInput.java b/guava/src/com/google/common/io/ByteArrayDataInput.java
new file mode 100644
index 0000000..f374b4e
--- /dev/null
+++ b/guava/src/com/google/common/io/ByteArrayDataInput.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.io;
+
+import java.io.DataInput;
+import java.io.IOException;
+
+/**
+ * An extension of {@code DataInput} for reading from in-memory byte arrays; its
+ * methods offer identical functionality but do not throw {@link IOException}.
+ * If any method encounters the end of the array prematurely, it throws {@link
+ * IllegalStateException}.
+ *
+ * @author Kevin Bourrillion
+ * @since 1.0
+ */
+public interface ByteArrayDataInput extends DataInput {
+  @Override void readFully(byte b[]);
+  @Override void readFully(byte b[], int off, int len);
+  @Override int skipBytes(int n);
+  @Override boolean readBoolean();
+  @Override byte readByte();
+  @Override int readUnsignedByte();
+  @Override short readShort();
+  @Override int readUnsignedShort();
+  @Override char readChar();
+  @Override int readInt();
+  @Override long readLong();
+  @Override float readFloat();
+  @Override double readDouble();
+  @Override String readLine();
+  @Override String readUTF();
+}
diff --git a/guava/src/com/google/common/io/ByteArrayDataOutput.java b/guava/src/com/google/common/io/ByteArrayDataOutput.java
new file mode 100644
index 0000000..4d3dd97
--- /dev/null
+++ b/guava/src/com/google/common/io/ByteArrayDataOutput.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.io;
+
+import java.io.DataOutput;
+import java.io.IOException;
+
+/**
+ * An extension of {@code DataOutput} for writing to in-memory byte arrays; its
+ * methods offer identical functionality but do not throw {@link IOException}.
+ *
+ * @author Jayaprabhakar Kadarkarai
+ * @since 1.0
+ */
+public interface ByteArrayDataOutput extends DataOutput {
+  @Override void write(int b);
+  @Override void write(byte b[]);
+  @Override void write(byte b[], int off, int len);
+  @Override void writeBoolean(boolean v);
+  @Override void writeByte(int v);
+  @Override void writeShort(int v);
+  @Override void writeChar(int v);
+  @Override void writeInt(int v);
+  @Override void writeLong(long v);
+  @Override void writeFloat(float v);
+  @Override void writeDouble(double v);
+  @Override void writeChars(String s);
+  @Override void writeUTF(String s);
+
+  /**
+   * @deprecated This method is dangerous as it discards the high byte of
+   * every character. For UTF-8, use {@code write(s.getBytes(Charsets.UTF_8))}.
+   */
+  @Deprecated @Override void writeBytes(String s);
+
+  /**
+   * Returns the contents that have been written to this instance,
+   * as a byte array.
+   */
+  byte[] toByteArray();
+}
diff --git a/guava/src/com/google/common/io/ByteProcessor.java b/guava/src/com/google/common/io/ByteProcessor.java
new file mode 100644
index 0000000..71953be
--- /dev/null
+++ b/guava/src/com/google/common/io/ByteProcessor.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.io;
+
+import com.google.common.annotations.Beta;
+
+import java.io.IOException;
+
+/**
+ * A callback interface to process bytes from a stream.
+ *
+ * <p>{@link #processBytes} will be called for each line that is read, and
+ * should return {@code false} when you want to stop processing.
+ *
+ * @author Chris Nokleberg
+ * @since 1.0
+ */
+@Beta
+public interface ByteProcessor<T> {
+  /**
+   * This method will be called for each chunk of bytes in an
+   * input stream. The implementation should process the bytes
+   * from {@code buf[off]} through {@code buf[off + len - 1]}
+   * (inclusive).
+   *
+   * @param buf the byte array containing the data to process
+   * @param off the initial offset into the array
+   * @param len the length of data to be processed
+   * @return true to continue processing, false to stop
+   */
+  boolean processBytes(byte[] buf, int off, int len) throws IOException;
+
+  /** Return the result of processing all the bytes. */
+  T getResult();
+}
diff --git a/guava/src/com/google/common/io/ByteStreams.java b/guava/src/com/google/common/io/ByteStreams.java
new file mode 100644
index 0000000..78e63c5
--- /dev/null
+++ b/guava/src/com/google/common/io/ByteStreams.java
@@ -0,0 +1,878 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.io;
+
+import com.google.common.annotations.Beta;
+import com.google.common.base.Preconditions;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.DataInput;
+import java.io.DataInputStream;
+import java.io.DataOutput;
+import java.io.DataOutputStream;
+import java.io.EOFException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.nio.ByteBuffer;
+import java.nio.channels.ReadableByteChannel;
+import java.nio.channels.WritableByteChannel;
+import java.security.MessageDigest;
+import java.util.Arrays;
+import java.util.zip.Checksum;
+
+/**
+ * Provides utility methods for working with byte arrays and I/O streams.
+ *
+ * <p>All method parameters must be non-null unless documented otherwise.
+ *
+ * @author Chris Nokleberg
+ * @since 1.0
+ */
+@Beta
+public final class ByteStreams {
+  private static final int BUF_SIZE = 0x1000; // 4K
+
+  private ByteStreams() {}
+
+  /**
+   * Returns a factory that will supply instances of
+   * {@link ByteArrayInputStream} that read from the given byte array.
+   *
+   * @param b the input buffer
+   * @return the factory
+   */
+  public static InputSupplier<ByteArrayInputStream> newInputStreamSupplier(
+      byte[] b) {
+    return newInputStreamSupplier(b, 0, b.length);
+  }
+
+  /**
+   * Returns a factory that will supply instances of
+   * {@link ByteArrayInputStream} that read from the given byte array.
+   *
+   * @param b the input buffer
+   * @param off the offset in the buffer of the first byte to read
+   * @param len the maximum number of bytes to read from the buffer
+   * @return the factory
+   */
+  public static InputSupplier<ByteArrayInputStream> newInputStreamSupplier(
+      final byte[] b, final int off, final int len) {
+    return new InputSupplier<ByteArrayInputStream>() {
+      @Override
+      public ByteArrayInputStream getInput() {
+        return new ByteArrayInputStream(b, off, len);
+      }
+    };
+  }
+
+  /**
+   * Writes a byte array to an output stream from the given supplier.
+   *
+   * @param from the bytes to write
+   * @param to the output supplier
+   * @throws IOException if an I/O error occurs
+   */
+  public static void write(byte[] from,
+      OutputSupplier<? extends OutputStream> to) throws IOException {
+    Preconditions.checkNotNull(from);
+    boolean threw = true;
+    OutputStream out = to.getOutput();
+    try {
+      out.write(from);
+      threw = false;
+    } finally {
+      Closeables.close(out, threw);
+    }
+  }
+
+  /**
+   * Opens input and output streams from the given suppliers, copies all
+   * bytes from the input to the output, and closes the streams.
+   *
+   * @param from the input factory
+   * @param to the output factory
+   * @return the number of bytes copied
+   * @throws IOException if an I/O error occurs
+   */
+  public static long copy(InputSupplier<? extends InputStream> from,
+      OutputSupplier<? extends OutputStream> to) throws IOException {
+    int successfulOps = 0;
+    InputStream in = from.getInput();
+    try {
+      OutputStream out = to.getOutput();
+      try {
+        long count = copy(in, out);
+        successfulOps++;
+        return count;
+      } finally {
+        Closeables.close(out, successfulOps < 1);
+        successfulOps++;
+      }
+    } finally {
+      Closeables.close(in, successfulOps < 2);
+    }
+  }
+
+  /**
+   * Opens an input stream from the supplier, copies all bytes from the
+   * input to the output, and closes the input stream. Does not close
+   * or flush the output stream.
+   *
+   * @param from the input factory
+   * @param to the output stream to write to
+   * @return the number of bytes copied
+   * @throws IOException if an I/O error occurs
+   */
+  public static long copy(InputSupplier<? extends InputStream> from,
+      OutputStream to) throws IOException {
+    boolean threw = true;
+    InputStream in = from.getInput();
+    try {
+      long count = copy(in, to);
+      threw = false;
+      return count;
+    } finally {
+      Closeables.close(in, threw);
+    }
+  }
+
+  /**
+   * Opens an output stream from the supplier, copies all bytes from the input
+   * to the output, and closes the output stream. Does not close or flush the
+   * output stream.
+   *
+   * @param from the input stream to read from
+   * @param to the output factory
+   * @return the number of bytes copied
+   * @throws IOException if an I/O error occurs
+   * @since 10.0
+   */
+  public static long copy(InputStream from,
+      OutputSupplier<? extends OutputStream> to) throws IOException {
+    boolean threw = true;
+    OutputStream out = to.getOutput();
+    try {
+      long count = copy(from, out);
+      threw = false;
+      return count;
+    } finally {
+      Closeables.close(out, threw);
+    }
+  }
+
+  /**
+   * Copies all bytes from the input stream to the output stream.
+   * Does not close or flush either stream.
+   *
+   * @param from the input stream to read from
+   * @param to the output stream to write to
+   * @return the number of bytes copied
+   * @throws IOException if an I/O error occurs
+   */
+  public static long copy(InputStream from, OutputStream to)
+      throws IOException {
+    byte[] buf = new byte[BUF_SIZE];
+    long total = 0;
+    while (true) {
+      int r = from.read(buf);
+      if (r == -1) {
+        break;
+      }
+      to.write(buf, 0, r);
+      total += r;
+    }
+    return total;
+  }
+
+  /**
+   * Copies all bytes from the readable channel to the writable channel.
+   * Does not close or flush either channel.
+   *
+   * @param from the readable channel to read from
+   * @param to the writable channel to write to
+   * @return the number of bytes copied
+   * @throws IOException if an I/O error occurs
+   */
+  public static long copy(ReadableByteChannel from,
+      WritableByteChannel to) throws IOException {
+    ByteBuffer buf = ByteBuffer.allocate(BUF_SIZE);
+    long total = 0;
+    while (from.read(buf) != -1) {
+      buf.flip();
+      while (buf.hasRemaining()) {
+        total += to.write(buf);
+      }
+      buf.clear();
+    }
+    return total;
+  }
+
+  /**
+   * Reads all bytes from an input stream into a byte array.
+   * Does not close the stream.
+   *
+   * @param in the input stream to read from
+   * @return a byte array containing all the bytes from the stream
+   * @throws IOException if an I/O error occurs
+   */
+  public static byte[] toByteArray(InputStream in) throws IOException {
+    ByteArrayOutputStream out = new ByteArrayOutputStream();
+    copy(in, out);
+    return out.toByteArray();
+  }
+
+  /**
+   * Returns the data from a {@link InputStream} factory as a byte array.
+   *
+   * @param supplier the factory
+   * @throws IOException if an I/O error occurs
+   */
+  public static byte[] toByteArray(
+      InputSupplier<? extends InputStream> supplier) throws IOException {
+    boolean threw = true;
+    InputStream in = supplier.getInput();
+    try {
+      byte[] result = toByteArray(in);
+      threw = false;
+      return result;
+    } finally {
+      Closeables.close(in, threw);
+    }
+  }
+
+  /**
+   * Returns a new {@link ByteArrayDataInput} instance to read from the {@code
+   * bytes} array from the beginning.
+   */
+  public static ByteArrayDataInput newDataInput(byte[] bytes) {
+    return new ByteArrayDataInputStream(bytes);
+  }
+
+  /**
+   * Returns a new {@link ByteArrayDataInput} instance to read from the {@code
+   * bytes} array, starting at the given position.
+   *
+   * @throws IndexOutOfBoundsException if {@code start} is negative or greater
+   *     than the length of the array
+   */
+  public static ByteArrayDataInput newDataInput(byte[] bytes, int start) {
+    Preconditions.checkPositionIndex(start, bytes.length);
+    return new ByteArrayDataInputStream(bytes, start);
+  }
+
+  private static class ByteArrayDataInputStream implements ByteArrayDataInput {
+    final DataInput input;
+
+    ByteArrayDataInputStream(byte[] bytes) {
+      this.input = new DataInputStream(new ByteArrayInputStream(bytes));
+    }
+
+    ByteArrayDataInputStream(byte[] bytes, int start) {
+      this.input = new DataInputStream(
+          new ByteArrayInputStream(bytes, start, bytes.length - start));
+    }
+
+    @Override public void readFully(byte b[]) {
+      try {
+        input.readFully(b);
+      } catch (IOException e) {
+        throw new IllegalStateException(e);
+      }
+    }
+
+    @Override public void readFully(byte b[], int off, int len) {
+      try {
+        input.readFully(b, off, len);
+      } catch (IOException e) {
+        throw new IllegalStateException(e);
+      }
+    }
+
+    @Override public int skipBytes(int n) {
+      try {
+        return input.skipBytes(n);
+      } catch (IOException e) {
+        throw new IllegalStateException(e);
+      }
+    }
+
+    @Override public boolean readBoolean() {
+      try {
+        return input.readBoolean();
+      } catch (IOException e) {
+        throw new IllegalStateException(e);
+      }
+    }
+
+    @Override public byte readByte() {
+      try {
+        return input.readByte();
+      } catch (EOFException e) {
+        throw new IllegalStateException(e);
+      } catch (IOException impossible) {
+        throw new AssertionError(impossible);
+      }
+    }
+
+    @Override public int readUnsignedByte() {
+      try {
+        return input.readUnsignedByte();
+      } catch (IOException e) {
+        throw new IllegalStateException(e);
+      }
+    }
+
+    @Override public short readShort() {
+      try {
+        return input.readShort();
+      } catch (IOException e) {
+        throw new IllegalStateException(e);
+      }
+    }
+
+    @Override public int readUnsignedShort() {
+      try {
+        return input.readUnsignedShort();
+      } catch (IOException e) {
+        throw new IllegalStateException(e);
+      }
+    }
+
+    @Override public char readChar() {
+      try {
+        return input.readChar();
+      } catch (IOException e) {
+        throw new IllegalStateException(e);
+      }
+    }
+
+    @Override public int readInt() {
+      try {
+        return input.readInt();
+      } catch (IOException e) {
+        throw new IllegalStateException(e);
+      }
+    }
+
+    @Override public long readLong() {
+      try {
+        return input.readLong();
+      } catch (IOException e) {
+        throw new IllegalStateException(e);
+      }
+    }
+
+    @Override public float readFloat() {
+      try {
+        return input.readFloat();
+      } catch (IOException e) {
+        throw new IllegalStateException(e);
+      }
+    }
+
+    @Override public double readDouble() {
+      try {
+        return input.readDouble();
+      } catch (IOException e) {
+        throw new IllegalStateException(e);
+      }
+    }
+
+    @Override public String readLine() {
+      try {
+        return input.readLine();
+      } catch (IOException e) {
+        throw new IllegalStateException(e);
+      }
+    }
+
+    @Override public String readUTF() {
+      try {
+        return input.readUTF();
+      } catch (IOException e) {
+        throw new IllegalStateException(e);
+      }
+    }
+  }
+
+  /**
+   * Returns a new {@link ByteArrayDataOutput} instance with a default size.
+   */
+  public static ByteArrayDataOutput newDataOutput() {
+    return new ByteArrayDataOutputStream();
+  }
+
+  /**
+   * Returns a new {@link ByteArrayDataOutput} instance sized to hold
+   * {@code size} bytes before resizing.
+   *
+   * @throws IllegalArgumentException if {@code size} is negative
+   */
+  public static ByteArrayDataOutput newDataOutput(int size) {
+    Preconditions.checkArgument(size >= 0, "Invalid size: %s", size);
+    return new ByteArrayDataOutputStream(size);
+  }
+
+  @SuppressWarnings("deprecation") // for writeBytes
+  private static class ByteArrayDataOutputStream
+      implements ByteArrayDataOutput {
+
+    final DataOutput output;
+    final ByteArrayOutputStream byteArrayOutputSteam;
+
+    ByteArrayDataOutputStream() {
+      this(new ByteArrayOutputStream());
+    }
+
+    ByteArrayDataOutputStream(int size) {
+      this(new ByteArrayOutputStream(size));
+    }
+
+    ByteArrayDataOutputStream(ByteArrayOutputStream byteArrayOutputSteam) {
+      this.byteArrayOutputSteam = byteArrayOutputSteam;
+      output = new DataOutputStream(byteArrayOutputSteam);
+    }
+
+    @Override public void write(int b) {
+      try {
+        output.write(b);
+      } catch (IOException impossible) {
+        throw new AssertionError(impossible);
+      }
+    }
+
+    @Override public void write(byte[] b) {
+      try {
+        output.write(b);
+      } catch (IOException impossible) {
+        throw new AssertionError(impossible);
+      }
+    }
+
+    @Override public void write(byte[] b, int off, int len) {
+      try {
+        output.write(b, off, len);
+      } catch (IOException impossible) {
+        throw new AssertionError(impossible);
+      }
+    }
+
+    @Override public void writeBoolean(boolean v) {
+      try {
+        output.writeBoolean(v);
+      } catch (IOException impossible) {
+        throw new AssertionError(impossible);
+      }
+    }
+
+    @Override public void writeByte(int v) {
+      try {
+        output.writeByte(v);
+      } catch (IOException impossible) {
+        throw new AssertionError(impossible);
+      }
+    }
+
+    @Override public void writeBytes(String s) {
+      try {
+        output.writeBytes(s);
+      } catch (IOException impossible) {
+        throw new AssertionError(impossible);
+      }
+    }
+
+    @Override public void writeChar(int v) {
+      try {
+        output.writeChar(v);
+      } catch (IOException impossible) {
+        throw new AssertionError(impossible);
+      }
+    }
+
+    @Override public void writeChars(String s) {
+      try {
+        output.writeChars(s);
+      } catch (IOException impossible) {
+        throw new AssertionError(impossible);
+      }
+    }
+
+    @Override public void writeDouble(double v) {
+      try {
+        output.writeDouble(v);
+      } catch (IOException impossible) {
+        throw new AssertionError(impossible);
+      }
+    }
+
+    @Override public void writeFloat(float v) {
+      try {
+        output.writeFloat(v);
+      } catch (IOException impossible) {
+        throw new AssertionError(impossible);
+      }
+    }
+
+    @Override public void writeInt(int v) {
+      try {
+        output.writeInt(v);
+      } catch (IOException impossible) {
+        throw new AssertionError(impossible);
+      }
+    }
+
+    @Override public void writeLong(long v) {
+      try {
+        output.writeLong(v);
+      } catch (IOException impossible) {
+        throw new AssertionError(impossible);
+      }
+    }
+
+    @Override public void writeShort(int v) {
+      try {
+        output.writeShort(v);
+      } catch (IOException impossible) {
+        throw new AssertionError(impossible);
+      }
+    }
+
+    @Override public void writeUTF(String s) {
+      try {
+        output.writeUTF(s);
+      } catch (IOException impossible) {
+        throw new AssertionError(impossible);
+      }
+    }
+
+    @Override public byte[] toByteArray() {
+      return byteArrayOutputSteam.toByteArray();
+    }
+
+  }
+
+  // TODO(chrisn): Not all streams support skipping.
+  /** Returns the length of a supplied input stream, in bytes. */
+  public static long length(InputSupplier<? extends InputStream> supplier)
+      throws IOException {
+    long count = 0;
+    boolean threw = true;
+    InputStream in = supplier.getInput();
+    try {
+      while (true) {
+        // We skip only Integer.MAX_VALUE due to JDK overflow bugs.
+        long amt = in.skip(Integer.MAX_VALUE);
+        if (amt == 0) {
+          if (in.read() == -1) {
+            threw = false;
+            return count;
+          }
+          count++;
+        } else {
+          count += amt;
+        }
+      }
+    } finally {
+      Closeables.close(in, threw);
+    }
+  }
+
+  /**
+   * Returns true if the supplied input streams contain the same bytes.
+   *
+   * @throws IOException if an I/O error occurs
+   */
+  public static boolean equal(InputSupplier<? extends InputStream> supplier1,
+      InputSupplier<? extends InputStream> supplier2) throws IOException {
+    byte[] buf1 = new byte[BUF_SIZE];
+    byte[] buf2 = new byte[BUF_SIZE];
+
+    boolean threw = true;
+    InputStream in1 = supplier1.getInput();
+    try {
+      InputStream in2 = supplier2.getInput();
+      try {
+        while (true) {
+          int read1 = read(in1, buf1, 0, BUF_SIZE);
+          int read2 = read(in2, buf2, 0, BUF_SIZE);
+          if (read1 != read2 || !Arrays.equals(buf1, buf2)) {
+            threw = false;
+            return false;
+          } else if (read1 != BUF_SIZE) {
+            threw = false;
+            return true;
+          }
+        }
+      } finally {
+        Closeables.close(in2, threw);
+      }
+    } finally {
+      Closeables.close(in1, threw);
+    }
+  }
+
+  /**
+   * Attempts to read enough bytes from the stream to fill the given byte array,
+   * with the same behavior as {@link DataInput#readFully(byte[])}.
+   * Does not close the stream.
+   *
+   * @param in the input stream to read from.
+   * @param b the buffer into which the data is read.
+   * @throws EOFException if this stream reaches the end before reading all
+   *     the bytes.
+   * @throws IOException if an I/O error occurs.
+   */
+  public static void readFully(InputStream in, byte[] b) throws IOException {
+    readFully(in, b, 0, b.length);
+  }
+
+  /**
+   * Attempts to read {@code len} bytes from the stream into the given array
+   * starting at {@code off}, with the same behavior as
+   * {@link DataInput#readFully(byte[], int, int)}. Does not close the
+   * stream.
+   *
+   * @param in the input stream to read from.
+   * @param b the buffer into which the data is read.
+   * @param off an int specifying the offset into the data.
+   * @param len an int specifying the number of bytes to read.
+   * @throws EOFException if this stream reaches the end before reading all
+   *     the bytes.
+   * @throws IOException if an I/O error occurs.
+   */
+  public static void readFully(InputStream in, byte[] b, int off, int len)
+      throws IOException {
+    if (read(in, b, off, len) != len) {
+      throw new EOFException();
+    }
+  }
+
+  /**
+   * Discards {@code n} bytes of data from the input stream. This method
+   * will block until the full amount has been skipped. Does not close the
+   * stream.
+   *
+   * @param in the input stream to read from
+   * @param n the number of bytes to skip
+   * @throws EOFException if this stream reaches the end before skipping all
+   *     the bytes
+   * @throws IOException if an I/O error occurs, or the stream does not
+   *     support skipping
+   */
+  public static void skipFully(InputStream in, long n) throws IOException {
+    while (n > 0) {
+      long amt = in.skip(n);
+      if (amt == 0) {
+        // Force a blocking read to avoid infinite loop
+        if (in.read() == -1) {
+          throw new EOFException();
+        }
+        n--;
+      } else {
+        n -= amt;
+      }
+    }
+  }
+
+  /**
+   * Process the bytes of a supplied stream
+   *
+   * @param supplier the input stream factory
+   * @param processor the object to which to pass the bytes of the stream
+   * @return the result of the byte processor
+   * @throws IOException if an I/O error occurs
+   */
+  public static <T> T readBytes(InputSupplier<? extends InputStream> supplier,
+      ByteProcessor<T> processor) throws IOException {
+    byte[] buf = new byte[BUF_SIZE];
+    boolean threw = true;
+    InputStream in = supplier.getInput();
+    try {
+      int amt;
+      do {
+        amt = in.read(buf);
+        if (amt == -1) {
+          threw = false;
+          break;
+        }
+      } while (processor.processBytes(buf, 0, amt));
+      return processor.getResult();
+    } finally {
+      Closeables.close(in, threw);
+    }
+  }
+
+  /**
+   * Computes and returns the checksum value for a supplied input stream.
+   * The checksum object is reset when this method returns successfully.
+   *
+   * @param supplier the input stream factory
+   * @param checksum the checksum object
+   * @return the result of {@link Checksum#getValue} after updating the
+   *     checksum object with all of the bytes in the stream
+   * @throws IOException if an I/O error occurs
+   */
+  public static long getChecksum(InputSupplier<? extends InputStream> supplier,
+      final Checksum checksum) throws IOException {
+    return readBytes(supplier, new ByteProcessor<Long>() {
+      @Override
+      public boolean processBytes(byte[] buf, int off, int len) {
+        checksum.update(buf, off, len);
+        return true;
+      }
+
+      @Override
+      public Long getResult() {
+        long result = checksum.getValue();
+        checksum.reset();
+        return result;
+      }
+    });
+  }
+
+  /**
+   * Computes and returns the digest value for a supplied input stream.
+   * The digest object is reset when this method returns successfully.
+   *
+   * @param supplier the input stream factory
+   * @param md the digest object
+   * @return the result of {@link MessageDigest#digest()} after updating the
+   *     digest object with all of the bytes in the stream
+   * @throws IOException if an I/O error occurs
+   */
+  public static byte[] getDigest(InputSupplier<? extends InputStream> supplier,
+      final MessageDigest md) throws IOException {
+    return readBytes(supplier, new ByteProcessor<byte[]>() {
+      @Override
+      public boolean processBytes(byte[] buf, int off, int len) {
+        md.update(buf, off, len);
+        return true;
+      }
+
+      @Override
+      public byte[] getResult() {
+        return md.digest();
+      }
+    });
+  }
+
+  /**
+   * Reads some bytes from an input stream and stores them into the buffer array
+   * {@code b}. This method blocks until {@code len} bytes of input data have
+   * been read into the array, or end of file is detected. The number of bytes
+   * read is returned, possibly zero. Does not close the stream.
+   *
+   * <p>A caller can detect EOF if the number of bytes read is less than
+   * {@code len}. All subsequent calls on the same stream will return zero.
+   *
+   * <p>If {@code b} is null, a {@code NullPointerException} is thrown. If
+   * {@code off} is negative, or {@code len} is negative, or {@code off+len} is
+   * greater than the length of the array {@code b}, then an
+   * {@code IndexOutOfBoundsException} is thrown. If {@code len} is zero, then
+   * no bytes are read. Otherwise, the first byte read is stored into element
+   * {@code b[off]}, the next one into {@code b[off+1]}, and so on. The number
+   * of bytes read is, at most, equal to {@code len}.
+   *
+   * @param in the input stream to read from
+   * @param b the buffer into which the data is read
+   * @param off an int specifying the offset into the data
+   * @param len an int specifying the number of bytes to read
+   * @return the number of bytes read
+   * @throws IOException if an I/O error occurs
+   */
+  public static int read(InputStream in, byte[] b, int off, int len)
+      throws IOException {
+    if (len < 0) {
+      throw new IndexOutOfBoundsException("len is negative");
+    }
+    int total = 0;
+    while (total < len) {
+      int result = in.read(b, off + total, len - total);
+      if (result == -1) {
+        break;
+      }
+      total += result;
+    }
+    return total;
+  }
+
+  /**
+   * Returns an {@link InputSupplier} that returns input streams from the
+   * an underlying supplier, where each stream starts at the given
+   * offset and is limited to the specified number of bytes.
+   *
+   * @param supplier the supplier from which to get the raw streams
+   * @param offset the offset in bytes into the underlying stream where
+   *     the returned streams will start
+   * @param length the maximum length of the returned streams
+   * @throws IllegalArgumentException if offset or length are negative
+   */
+  public static InputSupplier<InputStream> slice(
+      final InputSupplier<? extends InputStream> supplier,
+      final long offset,
+      final long length) {
+    Preconditions.checkNotNull(supplier);
+    Preconditions.checkArgument(offset >= 0, "offset is negative");
+    Preconditions.checkArgument(length >= 0, "length is negative");
+    return new InputSupplier<InputStream>() {
+      @Override public InputStream getInput() throws IOException {
+        InputStream in = supplier.getInput();
+        if (offset > 0) {
+          try {
+            skipFully(in, offset);
+          } catch (IOException e) {
+            Closeables.closeQuietly(in);
+            throw e;
+          }
+        }
+        return new LimitInputStream(in, length);
+      }
+    };
+  }
+
+  /**
+   * Joins multiple {@link InputStream} suppliers into a single supplier.
+   * Streams returned from the supplier will contain the concatenated data from
+   * the streams of the underlying suppliers.
+   *
+   * <p>Only one underlying input stream will be open at a time. Closing the
+   * joined stream will close the open underlying stream.
+   *
+   * <p>Reading from the joined stream will throw a {@link NullPointerException}
+   * if any of the suppliers are null or return null.
+   *
+   * @param suppliers the suppliers to concatenate
+   * @return a supplier that will return a stream containing the concatenated
+   *     stream data
+   */
+  public static InputSupplier<InputStream> join(
+      final Iterable<? extends InputSupplier<? extends InputStream>> suppliers) {
+    return new InputSupplier<InputStream>() {
+      @Override public InputStream getInput() throws IOException {
+        return new MultiInputStream(suppliers.iterator());
+      }
+    };
+  }
+
+  /** Varargs form of {@link #join(Iterable)}. */
+  public static InputSupplier<InputStream> join(
+      InputSupplier<? extends InputStream>... suppliers) {
+    return join(Arrays.asList(suppliers));
+  }
+}
diff --git a/guava/src/com/google/common/io/CharStreams.java b/guava/src/com/google/common/io/CharStreams.java
new file mode 100644
index 0000000..0d53d90
--- /dev/null
+++ b/guava/src/com/google/common/io/CharStreams.java
@@ -0,0 +1,441 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.io;
+
+import com.google.common.annotations.Beta;
+import com.google.common.base.Preconditions;
+
+import java.io.Closeable;
+import java.io.EOFException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.Reader;
+import java.io.StringReader;
+import java.io.Writer;
+import java.nio.CharBuffer;
+import java.nio.charset.Charset;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Provides utility methods for working with character streams.
+ *
+ * <p>All method parameters must be non-null unless documented otherwise.
+ *
+ * <p>Some of the methods in this class take arguments with a generic type of
+ * {@code Readable & Closeable}. A {@link java.io.Reader} implements both of
+ * those interfaces. Similarly for {@code Appendable & Closeable} and
+ * {@link java.io.Writer}.
+ *
+ * @author Chris Nokleberg
+ * @author Bin Zhu
+ * @since 1.0
+ */
+@Beta
+public final class CharStreams {
+  private static final int BUF_SIZE = 0x800; // 2K chars (4K bytes)
+
+  private CharStreams() {}
+
+  /**
+   * Returns a factory that will supply instances of {@link StringReader} that
+   * read a string value.
+   *
+   * @param value the string to read
+   * @return the factory
+   */
+  public static InputSupplier<StringReader> newReaderSupplier(
+      final String value) {
+    Preconditions.checkNotNull(value);
+    return new InputSupplier<StringReader>() {
+      @Override
+      public StringReader getInput() {
+        return new StringReader(value);
+      }
+    };
+  }
+
+  /**
+   * Returns a factory that will supply instances of {@link InputStreamReader},
+   * using the given {@link InputStream} factory and character set.
+   *
+   * @param in the factory that will be used to open input streams
+   * @param charset the character set used to decode the input stream
+   * @return the factory
+   */
+  public static InputSupplier<InputStreamReader> newReaderSupplier(
+      final InputSupplier<? extends InputStream> in, final Charset charset) {
+    Preconditions.checkNotNull(in);
+    Preconditions.checkNotNull(charset);
+    return new InputSupplier<InputStreamReader>() {
+      @Override
+      public InputStreamReader getInput() throws IOException {
+        return new InputStreamReader(in.getInput(), charset);
+      }
+    };
+  }
+
+  /**
+   * Returns a factory that will supply instances of {@link OutputStreamWriter},
+   * using the given {@link OutputStream} factory and character set.
+   *
+   * @param out the factory that will be used to open output streams
+   * @param charset the character set used to encode the output stream
+   * @return the factory
+   */
+  public static OutputSupplier<OutputStreamWriter> newWriterSupplier(
+      final OutputSupplier<? extends OutputStream> out, final Charset charset) {
+    Preconditions.checkNotNull(out);
+    Preconditions.checkNotNull(charset);
+    return new OutputSupplier<OutputStreamWriter>() {
+      @Override
+      public OutputStreamWriter getOutput() throws IOException {
+        return new OutputStreamWriter(out.getOutput(), charset);
+      }
+    };
+  }
+
+  /**
+   * Writes a character sequence (such as a string) to an appendable
+   * object from the given supplier.
+   *
+   * @param from the character sequence to write
+   * @param to the output supplier
+   * @throws IOException if an I/O error occurs
+   */
+  public static <W extends Appendable & Closeable> void write(CharSequence from,
+      OutputSupplier<W> to) throws IOException {
+    Preconditions.checkNotNull(from);
+    boolean threw = true;
+    W out = to.getOutput();
+    try {
+      out.append(from);
+      threw = false;
+    } finally {
+      Closeables.close(out, threw);
+    }
+  }
+
+  /**
+   * Opens {@link Readable} and {@link Appendable} objects from the
+   * given factories, copies all characters between the two, and closes
+   * them.
+   *
+   * @param from the input factory
+   * @param to the output factory
+   * @return the number of characters copied
+   * @throws IOException if an I/O error occurs
+   */
+  public static <R extends Readable & Closeable,
+      W extends Appendable & Closeable> long copy(InputSupplier<R> from,
+      OutputSupplier<W> to) throws IOException {
+    int successfulOps = 0;
+    R in = from.getInput();
+    try {
+      W out = to.getOutput();
+      try {
+        long count = copy(in, out);
+        successfulOps++;
+        return count;
+      } finally {
+        Closeables.close(out, successfulOps < 1);
+        successfulOps++;
+      }
+    } finally {
+      Closeables.close(in, successfulOps < 2);
+    }
+  }
+
+  /**
+   * Opens a {@link Readable} object from the supplier, copies all characters
+   * to the {@link Appendable} object, and closes the input. Does not close
+   * or flush the output.
+   *
+   * @param from the input factory
+   * @param to the object to write to
+   * @return the number of characters copied
+   * @throws IOException if an I/O error occurs
+   */
+  public static <R extends Readable & Closeable> long copy(
+      InputSupplier<R> from, Appendable to) throws IOException {
+    boolean threw = true;
+    R in = from.getInput();
+    try {
+      long count = copy(in, to);
+      threw = false;
+      return count;
+    } finally {
+      Closeables.close(in, threw);
+    }
+  }
+
+  /**
+   * Copies all characters between the {@link Readable} and {@link Appendable}
+   * objects. Does not close or flush either object.
+   *
+   * @param from the object to read from
+   * @param to the object to write to
+   * @return the number of characters copied
+   * @throws IOException if an I/O error occurs
+   */
+  public static long copy(Readable from, Appendable to) throws IOException {
+    CharBuffer buf = CharBuffer.allocate(BUF_SIZE);
+    long total = 0;
+    while (true) {
+      int r = from.read(buf);
+      if (r == -1) {
+        break;
+      }
+      buf.flip();
+      to.append(buf, 0, r);
+      total += r;
+    }
+    return total;
+  }
+
+  /**
+   * Reads all characters from a {@link Readable} object into a {@link String}.
+   * Does not close the {@code Readable}.
+   *
+   * @param r the object to read from
+   * @return a string containing all the characters
+   * @throws IOException if an I/O error occurs
+   */
+  public static String toString(Readable r) throws IOException {
+    return toStringBuilder(r).toString();
+  }
+
+  /**
+   * Returns the characters from a {@link Readable} & {@link Closeable} object
+   * supplied by a factory as a {@link String}.
+   *
+   * @param supplier the factory to read from
+   * @return a string containing all the characters
+   * @throws IOException if an I/O error occurs
+   */
+  public static <R extends Readable & Closeable> String toString(
+      InputSupplier<R> supplier) throws IOException {
+    return toStringBuilder(supplier).toString();
+  }
+
+  /**
+   * Reads all characters from a {@link Readable} object into a new
+   * {@link StringBuilder} instance. Does not close the {@code Readable}.
+   *
+   * @param r the object to read from
+   * @return a {@link StringBuilder} containing all the characters
+   * @throws IOException if an I/O error occurs
+   */
+  private static StringBuilder toStringBuilder(Readable r) throws IOException {
+    StringBuilder sb = new StringBuilder();
+    copy(r, sb);
+    return sb;
+  }
+
+  /**
+   * Returns the characters from a {@link Readable} & {@link Closeable} object
+   * supplied by a factory as a new {@link StringBuilder} instance.
+   *
+   * @param supplier the factory to read from
+   * @throws IOException if an I/O error occurs
+   */
+  private static <R extends Readable & Closeable> StringBuilder toStringBuilder(
+      InputSupplier<R> supplier) throws IOException {
+    boolean threw = true;
+    R r = supplier.getInput();
+    try {
+      StringBuilder result = toStringBuilder(r);
+      threw = false;
+      return result;
+    } finally {
+      Closeables.close(r, threw);
+    }
+  }
+
+  /**
+   * Reads the first line from a {@link Readable} & {@link Closeable} object
+   * supplied by a factory. The line does not include line-termination
+   * characters, but does include other leading and trailing whitespace.
+   *
+   * @param supplier the factory to read from
+   * @return the first line, or null if the reader is empty
+   * @throws IOException if an I/O error occurs
+   */
+  public static <R extends Readable & Closeable> String readFirstLine(
+      InputSupplier<R> supplier) throws IOException {
+    boolean threw = true;
+    R r = supplier.getInput();
+    try {
+      String line = new LineReader(r).readLine();
+      threw = false;
+      return line;
+    } finally {
+      Closeables.close(r, threw);
+    }
+  }
+
+  /**
+   * Reads all of the lines from a {@link Readable} & {@link Closeable} object
+   * supplied by a factory. The lines do not include line-termination
+   * characters, but do include other leading and trailing whitespace.
+   *
+   * @param supplier the factory to read from
+   * @return a mutable {@link List} containing all the lines
+   * @throws IOException if an I/O error occurs
+   */
+  public static <R extends Readable & Closeable> List<String> readLines(
+      InputSupplier<R> supplier) throws IOException {
+    boolean threw = true;
+    R r = supplier.getInput();
+    try {
+      List<String> result = readLines(r);
+      threw = false;
+      return result;
+    } finally {
+      Closeables.close(r, threw);
+    }
+  }
+
+  /**
+   * Reads all of the lines from a {@link Readable} object. The lines do
+   * not include line-termination characters, but do include other
+   * leading and trailing whitespace.
+   *
+   * <p>Does not close the {@code Readable}. If reading files or resources you
+   * should use the {@link Files#readLines} and {@link Resources#readLines}
+   * methods.
+   *
+   * @param r the object to read from
+   * @return a mutable {@link List} containing all the lines
+   * @throws IOException if an I/O error occurs
+   */
+  public static List<String> readLines(Readable r) throws IOException {
+    List<String> result = new ArrayList<String>();
+    LineReader lineReader = new LineReader(r);
+    String line;
+    while ((line = lineReader.readLine()) != null) {
+      result.add(line);
+    }
+    return result;
+  }
+
+  /**
+   * Streams lines from a {@link Readable} and {@link Closeable} object
+   * supplied by a factory, stopping when our callback returns false, or we
+   * have read all of the lines.
+   *
+   * @param supplier the factory to read from
+   * @param callback the LineProcessor to use to handle the lines
+   * @return the output of processing the lines
+   * @throws IOException if an I/O error occurs
+   */
+  public static <R extends Readable & Closeable, T> T readLines(
+      InputSupplier<R> supplier, LineProcessor<T> callback) throws IOException {
+    boolean threw = true;
+    R r = supplier.getInput();
+    try {
+      LineReader lineReader = new LineReader(r);
+      String line;
+      while ((line = lineReader.readLine()) != null) {
+        if (!callback.processLine(line)) {
+          break;
+        }
+      }
+      threw = false;
+    } finally {
+      Closeables.close(r, threw);
+    }
+    return callback.getResult();
+  }
+
+  /**
+   * Joins multiple {@link Reader} suppliers into a single supplier.
+   * Reader returned from the supplier will contain the concatenated data
+   * from the readers of the underlying suppliers.
+   *
+   * <p>Reading from the joined reader will throw a {@link NullPointerException}
+   * if any of the suppliers are null or return null.
+   *
+   * <p>Only one underlying reader will be open at a time. Closing the
+   * joined reader will close the open underlying reader.
+   *
+   * @param suppliers the suppliers to concatenate
+   * @return a supplier that will return a reader containing the concatenated
+   *     data
+   */
+  public static InputSupplier<Reader> join(
+      final Iterable<? extends InputSupplier<? extends Reader>> suppliers) {
+    return new InputSupplier<Reader>() {
+      @Override public Reader getInput() throws IOException {
+        return new MultiReader(suppliers.iterator());
+      }
+    };
+  }
+
+  /** Varargs form of {@link #join(Iterable)}. */
+  public static InputSupplier<Reader> join(
+      InputSupplier<? extends Reader>... suppliers) {
+    return join(Arrays.asList(suppliers));
+  }
+
+  /**
+   * Discards {@code n} characters of data from the reader. This method
+   * will block until the full amount has been skipped. Does not close the
+   * reader.
+   *
+   * @param reader the reader to read from
+   * @param n the number of characters to skip
+   * @throws EOFException if this stream reaches the end before skipping all
+   *     the bytes
+   * @throws IOException if an I/O error occurs
+   */
+  public static void skipFully(Reader reader, long n) throws IOException {
+    while (n > 0) {
+      long amt = reader.skip(n);
+      if (amt == 0) {
+        // force a blocking read
+        if (reader.read() == -1) {
+          throw new EOFException();
+        }
+        n--;
+      } else {
+        n -= amt;
+      }
+    }
+  }
+
+  /**
+   * Returns a Writer that sends all output to the given {@link Appendable}
+   * target. Closing the writer will close the target if it is {@link
+   * Closeable}, and flushing the writer will flush the target if it is {@link
+   * java.io.Flushable}.
+   *
+   * @param target the object to which output will be sent
+   * @return a new Writer object, unless target is a Writer, in which case the
+   *     target is returned
+   */
+  public static Writer asWriter(Appendable target) {
+    if (target instanceof Writer) {
+      return (Writer) target;
+    }
+    return new AppendableWriter(target);
+  }
+}
diff --git a/guava/src/com/google/common/io/Closeables.java b/guava/src/com/google/common/io/Closeables.java
new file mode 100644
index 0000000..e619887
--- /dev/null
+++ b/guava/src/com/google/common/io/Closeables.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.io;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.VisibleForTesting;
+
+import java.io.Closeable;
+import java.io.IOException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.annotation.Nullable;
+
+/**
+ * Utility methods for working with {@link Closeable} objects.
+ *
+ * @author Michael Lancaster
+ * @since 1.0
+ */
+@Beta
+public final class Closeables {
+  @VisibleForTesting static final Logger logger
+      = Logger.getLogger(Closeables.class.getName());
+
+  private Closeables() {}
+
+  /**
+   * Closes a {@link Closeable}, with control over whether an
+   * {@code IOException} may be thrown. This is primarily useful in a
+   * finally block, where a thrown exception needs to be logged but not
+   * propagated (otherwise the original exception will be lost).
+   *
+   * <p>If {@code swallowIOException} is true then we never throw
+   * {@code IOException} but merely log it.
+   *
+   * <p>Example:
+   *
+   * <p><pre>public void useStreamNicely() throws IOException {
+   * SomeStream stream = new SomeStream("foo");
+   * boolean threw = true;
+   * try {
+   *   // Some code which does something with the Stream. May throw a
+   *   // Throwable.
+   *   threw = false; // No throwable thrown.
+   * } finally {
+   *   // Close the stream.
+   *   // If an exception occurs, only rethrow it if (threw==false).
+   *   Closeables.close(stream, threw);
+   * }
+   * </pre>
+   *
+   * @param closeable the {@code Closeable} object to be closed, or null,
+   *     in which case this method does nothing
+   * @param swallowIOException if true, don't propagate IO exceptions
+   *     thrown by the {@code close} methods
+   * @throws IOException if {@code swallowIOException} is false and
+   *     {@code close} throws an {@code IOException}.
+   */
+  public static void close(@Nullable Closeable closeable,
+      boolean swallowIOException) throws IOException {
+    if (closeable == null) {
+      return;
+    }
+    try {
+      closeable.close();
+    } catch (IOException e) {
+      if (swallowIOException) {
+        logger.log(Level.WARNING,
+            "IOException thrown while closing Closeable.", e);
+      } else {
+        throw e;
+      }
+    }
+  }
+
+  /**
+   * Equivalent to calling {@code close(closeable, true)}, but with no
+   * IOException in the signature.
+   * @param closeable the {@code Closeable} object to be closed, or null, in
+   *      which case this method does nothing
+   */
+  public static void closeQuietly(@Nullable Closeable closeable) {
+    try {
+      close(closeable, true);
+    } catch (IOException e) {
+      logger.log(Level.SEVERE, "IOException should not have been thrown.", e);
+    }
+  }
+}
diff --git a/guava/src/com/google/common/io/CountingInputStream.java b/guava/src/com/google/common/io/CountingInputStream.java
new file mode 100644
index 0000000..d11c8ec
--- /dev/null
+++ b/guava/src/com/google/common/io/CountingInputStream.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.io;
+
+import com.google.common.annotations.Beta;
+
+import java.io.FilterInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+/**
+ * An {@link InputStream} that counts the number of bytes read.
+ *
+ * @author Chris Nokleberg
+ * @since 1.0
+ */
+@Beta
+public final class CountingInputStream extends FilterInputStream {
+
+  private long count;
+  private long mark = -1;
+
+  /**
+   * Wraps another input stream, counting the number of bytes read.
+   *
+   * @param in the input stream to be wrapped
+   */
+  public CountingInputStream(InputStream in) {
+    super(in);
+  }
+
+  /** Returns the number of bytes read. */
+  public long getCount() {
+    return count;
+  }
+
+  @Override public int read() throws IOException {
+    int result = in.read();
+    if (result != -1) {
+      count++;
+    }
+    return result;
+  }
+
+  @Override public int read(byte[] b, int off, int len) throws IOException {
+    int result = in.read(b, off, len);
+    if (result != -1) {
+      count += result;
+    }
+    return result;
+  }
+
+  @Override public long skip(long n) throws IOException {
+    long result = in.skip(n);
+    count += result;
+    return result;
+  }
+
+  @Override public synchronized void mark(int readlimit) {
+    in.mark(readlimit);
+    mark = count;
+    // it's okay to mark even if mark isn't supported, as reset won't work
+  }
+
+  @Override public synchronized void reset() throws IOException {
+    if (!in.markSupported()) {
+      throw new IOException("Mark not supported");
+    }
+    if (mark == -1) {
+      throw new IOException("Mark not set");
+    }
+
+    in.reset();
+    count = mark;
+  }
+}
diff --git a/guava/src/com/google/common/io/CountingOutputStream.java b/guava/src/com/google/common/io/CountingOutputStream.java
new file mode 100644
index 0000000..5f57714
--- /dev/null
+++ b/guava/src/com/google/common/io/CountingOutputStream.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.io;
+
+import com.google.common.annotations.Beta;
+
+import java.io.FilterOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+
+/**
+ * An OutputStream that counts the number of bytes written.
+ *
+ * @author Chris Nokleberg
+ * @since 1.0
+ */
+@Beta
+public final class CountingOutputStream extends FilterOutputStream {
+
+  private long count;
+
+  /**
+   * Wraps another output stream, counting the number of bytes written.
+   *
+   * @param out the output stream to be wrapped
+   */
+  public CountingOutputStream(OutputStream out) {
+    super(out);
+  }
+
+  /** Returns the number of bytes written. */
+  public long getCount() {
+    return count;
+  }
+
+  @Override public void write(byte[] b, int off, int len) throws IOException {
+    out.write(b, off, len);
+    count += len;
+  }
+
+  @Override public void write(int b) throws IOException {
+    out.write(b);
+    count++;
+  }
+}
diff --git a/guava/src/com/google/common/io/FileBackedOutputStream.java b/guava/src/com/google/common/io/FileBackedOutputStream.java
new file mode 100644
index 0000000..ce593b2
--- /dev/null
+++ b/guava/src/com/google/common/io/FileBackedOutputStream.java
@@ -0,0 +1,210 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.io;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.VisibleForTesting;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+/**
+ * An {@link OutputStream} that starts buffering to a byte array, but
+ * switches to file buffering once the data reaches a configurable size.
+ *
+ * <p>This class is thread-safe.
+ *
+ * @author Chris Nokleberg
+ * @since 1.0
+ */
+@Beta
+public final class FileBackedOutputStream extends OutputStream {
+
+  private final int fileThreshold;
+  private final boolean resetOnFinalize;
+  private final InputSupplier<InputStream> supplier;
+
+  private OutputStream out;
+  private MemoryOutput memory;
+  private File file;
+
+  /** ByteArrayOutputStream that exposes its internals. */
+  private static class MemoryOutput extends ByteArrayOutputStream {
+    byte[] getBuffer() {
+      return buf;
+    }
+
+    int getCount() {
+      return count;
+    }
+  }
+
+  /** Returns the file holding the data (possibly null). */
+  @VisibleForTesting synchronized File getFile() {
+    return file;
+  }
+
+  /**
+   * Creates a new instance that uses the given file threshold, and does
+   * not reset the data when the {@link InputSupplier} returned by
+   * {@link #getSupplier} is finalized.
+   *
+   * @param fileThreshold the number of bytes before the stream should
+   *     switch to buffering to a file
+   */
+  public FileBackedOutputStream(int fileThreshold) {
+    this(fileThreshold, false);
+  }
+
+  /**
+   * Creates a new instance that uses the given file threshold, and
+   * optionally resets the data when the {@link InputSupplier} returned
+   * by {@link #getSupplier} is finalized.
+   *
+   * @param fileThreshold the number of bytes before the stream should
+   *     switch to buffering to a file
+   * @param resetOnFinalize if true, the {@link #reset} method will
+   *     be called when the {@link InputSupplier} returned by {@link
+   *     #getSupplier} is finalized
+   */
+  public FileBackedOutputStream(int fileThreshold, boolean resetOnFinalize) {
+    this.fileThreshold = fileThreshold;
+    this.resetOnFinalize = resetOnFinalize;
+    memory = new MemoryOutput();
+    out = memory;
+
+    if (resetOnFinalize) {
+      supplier = new InputSupplier<InputStream>() {
+        @Override
+        public InputStream getInput() throws IOException {
+          return openStream();
+        }
+
+        @Override protected void finalize() {
+          try {
+            reset();
+          } catch (Throwable t) {
+            t.printStackTrace(System.err);
+          }
+        }
+      };
+    } else {
+      supplier = new InputSupplier<InputStream>() {
+        @Override
+        public InputStream getInput() throws IOException {
+          return openStream();
+        }
+      };
+    }
+  }
+
+  /**
+   * Returns a supplier that may be used to retrieve the data buffered
+   * by this stream.
+   */
+  public InputSupplier<InputStream> getSupplier() {
+    return supplier;
+  }
+
+  private synchronized InputStream openStream() throws IOException {
+    if (file != null) {
+      return new FileInputStream(file);
+    } else {
+      return new ByteArrayInputStream(
+          memory.getBuffer(), 0, memory.getCount());
+    }
+  }
+
+  /**
+   * Calls {@link #close} if not already closed, and then resets this
+   * object back to its initial state, for reuse. If data was buffered
+   * to a file, it will be deleted.
+   *
+   * @throws IOException if an I/O error occurred while deleting the file buffer
+   */
+  public synchronized void reset() throws IOException {
+    try {
+      close();
+    } finally {
+      if (memory == null) {
+        memory = new MemoryOutput();
+      } else {
+        memory.reset();
+      }
+      out = memory;
+      if (file != null) {
+        File deleteMe = file;
+        file = null;
+        if (!deleteMe.delete()) {
+          throw new IOException("Could not delete: " + deleteMe);
+        }
+      }
+    }
+  }
+
+  @Override public synchronized void write(int b) throws IOException {
+    update(1);
+    out.write(b);
+  }
+
+  @Override public synchronized void write(byte[] b) throws IOException {
+    write(b, 0, b.length);
+  }
+
+  @Override public synchronized void write(byte[] b, int off, int len)
+      throws IOException {
+    update(len);
+    out.write(b, off, len);
+  }
+
+  @Override public synchronized void close() throws IOException {
+    out.close();
+  }
+
+  @Override public synchronized void flush() throws IOException {
+    out.flush();
+  }
+
+  /**
+   * Checks if writing {@code len} bytes would go over threshold, and
+   * switches to file buffering if so.
+   */
+  private void update(int len) throws IOException {
+    if (file == null && (memory.getCount() + len > fileThreshold)) {
+      File temp = File.createTempFile("FileBackedOutputStream", null);
+      if (resetOnFinalize) {
+        // Finalizers are not guaranteed to be called on system shutdown;
+        // this is insurance.
+        temp.deleteOnExit();
+      }
+      FileOutputStream transfer = new FileOutputStream(temp);
+      transfer.write(memory.getBuffer(), 0, memory.getCount());
+      transfer.flush();
+
+      // We've successfully transferred the data; switch to writing to file
+      out = transfer;
+      file = temp;
+      memory = null;
+    }
+  }
+}
diff --git a/guava/src/com/google/common/io/Files.java b/guava/src/com/google/common/io/Files.java
new file mode 100644
index 0000000..1d3ce1a
--- /dev/null
+++ b/guava/src/com/google/common/io/Files.java
@@ -0,0 +1,764 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.io;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.Beta;
+import com.google.common.base.Joiner;
+import com.google.common.base.Preconditions;
+import com.google.common.base.Splitter;
+
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.Closeable;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.RandomAccessFile;
+import java.nio.MappedByteBuffer;
+import java.nio.channels.FileChannel;
+import java.nio.channels.FileChannel.MapMode;
+import java.nio.charset.Charset;
+import java.security.MessageDigest;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.zip.Checksum;
+
+/**
+ * Provides utility methods for working with files.
+ *
+ * <p>All method parameters must be non-null unless documented otherwise.
+ *
+ * @author Chris Nokleberg
+ * @since 1.0
+ */
+@Beta
+public final class Files {
+
+  /** Maximum loop count when creating temp directories. */
+  private static final int TEMP_DIR_ATTEMPTS = 10000;
+
+  private Files() {}
+
+  /**
+   * Returns a buffered reader that reads from a file using the given
+   * character set.
+   *
+   * @param file the file to read from
+   * @param charset the character set used when writing the file
+   * @return the buffered reader
+   */
+  public static BufferedReader newReader(File file, Charset charset)
+      throws FileNotFoundException {
+    return new BufferedReader(
+        new InputStreamReader(new FileInputStream(file), charset));
+  }
+
+  /**
+   * Returns a buffered writer that writes to a file using the given
+   * character set.
+   *
+   * @param file the file to write to
+   * @param charset the character set used when writing the file
+   * @return the buffered writer
+   */
+  public static BufferedWriter newWriter(File file, Charset charset)
+      throws FileNotFoundException {
+    return new BufferedWriter(
+        new OutputStreamWriter(new FileOutputStream(file), charset));
+  }
+
+  /**
+   * Returns a factory that will supply instances of {@link FileInputStream}
+   * that read from a file.
+   *
+   * @param file the file to read from
+   * @return the factory
+   */
+  public static InputSupplier<FileInputStream> newInputStreamSupplier(
+      final File file) {
+    Preconditions.checkNotNull(file);
+    return new InputSupplier<FileInputStream>() {
+      @Override
+      public FileInputStream getInput() throws IOException {
+        return new FileInputStream(file);
+      }
+    };
+  }
+
+  /**
+   * Returns a factory that will supply instances of {@link FileOutputStream}
+   * that write to a file.
+   *
+   * @param file the file to write to
+   * @return the factory
+   */
+  public static OutputSupplier<FileOutputStream> newOutputStreamSupplier(
+      File file) {
+    return newOutputStreamSupplier(file, false);
+  }
+
+  /**
+   * Returns a factory that will supply instances of {@link FileOutputStream}
+   * that write to or append to a file.
+   *
+   * @param file the file to write to
+   * @param append if true, the encoded characters will be appended to the file;
+   *     otherwise the file is overwritten
+   * @return the factory
+   */
+  public static OutputSupplier<FileOutputStream> newOutputStreamSupplier(
+      final File file, final boolean append) {
+    Preconditions.checkNotNull(file);
+    return new OutputSupplier<FileOutputStream>() {
+      @Override
+      public FileOutputStream getOutput() throws IOException {
+        return new FileOutputStream(file, append);
+      }
+    };
+  }
+
+  /**
+   * Returns a factory that will supply instances of
+   * {@link InputStreamReader} that read a file using the given character set.
+   *
+   * @param file the file to read from
+   * @param charset the character set used when reading the file
+   * @return the factory
+   */
+  public static InputSupplier<InputStreamReader> newReaderSupplier(File file,
+      Charset charset) {
+    return CharStreams.newReaderSupplier(newInputStreamSupplier(file), charset);
+  }
+
+  /**
+   * Returns a factory that will supply instances of {@link OutputStreamWriter}
+   * that write to a file using the given character set.
+   *
+   * @param file the file to write to
+   * @param charset the character set used when writing the file
+   * @return the factory
+   */
+  public static OutputSupplier<OutputStreamWriter> newWriterSupplier(File file,
+      Charset charset) {
+    return newWriterSupplier(file, charset, false);
+  }
+
+  /**
+   * Returns a factory that will supply instances of {@link OutputStreamWriter}
+   * that write to or append to a file using the given character set.
+   *
+   * @param file the file to write to
+   * @param charset the character set used when writing the file
+   * @param append if true, the encoded characters will be appended to the file;
+   *     otherwise the file is overwritten
+   * @return the factory
+   */
+  public static OutputSupplier<OutputStreamWriter> newWriterSupplier(File file,
+      Charset charset, boolean append) {
+    return CharStreams.newWriterSupplier(newOutputStreamSupplier(file, append),
+        charset);
+  }
+
+  /**
+   * Reads all bytes from a file into a byte array.
+   *
+   * @param file the file to read from
+   * @return a byte array containing all the bytes from file
+   * @throws IllegalArgumentException if the file is bigger than the largest
+   *     possible byte array (2^31 - 1)
+   * @throws IOException if an I/O error occurs
+   */
+  public static byte[] toByteArray(File file) throws IOException {
+    Preconditions.checkArgument(file.length() <= Integer.MAX_VALUE);
+    if (file.length() == 0) {
+      // Some special files are length 0 but have content nonetheless.
+      return ByteStreams.toByteArray(newInputStreamSupplier(file));
+    } else {
+      // Avoid an extra allocation and copy.
+      byte[] b = new byte[(int) file.length()];
+      boolean threw = true;
+      InputStream in = new FileInputStream(file);
+      try {
+        ByteStreams.readFully(in, b);
+        threw = false;
+      } finally {
+        Closeables.close(in, threw);
+      }
+      return b;
+    }
+  }
+
+  /**
+   * Reads all characters from a file into a {@link String}, using the given
+   * character set.
+   *
+   * @param file the file to read from
+   * @param charset the character set used when reading the file
+   * @return a string containing all the characters from the file
+   * @throws IOException if an I/O error occurs
+   */
+  public static String toString(File file, Charset charset) throws IOException {
+    return new String(toByteArray(file), charset.name());
+  }
+
+  /**
+   * Copies to a file all bytes from an {@link InputStream} supplied by a
+   * factory.
+   *
+   * @param from the input factory
+   * @param to the destination file
+   * @throws IOException if an I/O error occurs
+   */
+  public static void copy(InputSupplier<? extends InputStream> from, File to)
+      throws IOException {
+    ByteStreams.copy(from, newOutputStreamSupplier(to));
+  }
+
+  /**
+   * Overwrites a file with the contents of a byte array.
+   *
+   * @param from the bytes to write
+   * @param to the destination file
+   * @throws IOException if an I/O error occurs
+   */
+  public static void write(byte[] from, File to) throws IOException {
+    ByteStreams.write(from, newOutputStreamSupplier(to));
+  }
+
+  /**
+   * Copies all bytes from a file to an {@link OutputStream} supplied by
+   * a factory.
+   *
+   * @param from the source file
+   * @param to the output factory
+   * @throws IOException if an I/O error occurs
+   */
+  public static void copy(File from, OutputSupplier<? extends OutputStream> to)
+      throws IOException {
+    ByteStreams.copy(newInputStreamSupplier(from), to);
+  }
+
+  /**
+   * Copies all bytes from a file to an output stream.
+   *
+   * @param from the source file
+   * @param to the output stream
+   * @throws IOException if an I/O error occurs
+   */
+  public static void copy(File from, OutputStream to) throws IOException {
+    ByteStreams.copy(newInputStreamSupplier(from), to);
+  }
+
+  /**
+   * Copies all the bytes from one file to another.
+   *.
+   * @param from the source file
+   * @param to the destination file
+   * @throws IOException if an I/O error occurs
+   * @throws IllegalArgumentException if {@code from.equals(to)}
+   */
+  public static void copy(File from, File to) throws IOException {
+    Preconditions.checkArgument(!from.equals(to),
+        "Source %s and destination %s must be different", from, to);
+    copy(newInputStreamSupplier(from), to);
+  }
+
+  /**
+   * Copies to a file all characters from a {@link Readable} and
+   * {@link Closeable} object supplied by a factory, using the given
+   * character set.
+   *
+   * @param from the readable supplier
+   * @param to the destination file
+   * @param charset the character set used when writing the file
+   * @throws IOException if an I/O error occurs
+   */
+  public static <R extends Readable & Closeable> void copy(
+      InputSupplier<R> from, File to, Charset charset) throws IOException {
+    CharStreams.copy(from, newWriterSupplier(to, charset));
+  }
+
+  /**
+   * Writes a character sequence (such as a string) to a file using the given
+   * character set.
+   *
+   * @param from the character sequence to write
+   * @param to the destination file
+   * @param charset the character set used when writing the file
+   * @throws IOException if an I/O error occurs
+   */
+  public static void write(CharSequence from, File to, Charset charset)
+      throws IOException {
+    write(from, to, charset, false);
+  }
+
+  /**
+   * Appends a character sequence (such as a string) to a file using the given
+   * character set.
+   *
+   * @param from the character sequence to append
+   * @param to the destination file
+   * @param charset the character set used when writing the file
+   * @throws IOException if an I/O error occurs
+   */
+  public static void append(CharSequence from, File to, Charset charset)
+      throws IOException {
+    write(from, to, charset, true);
+  }
+
+  /**
+   * Private helper method. Writes a character sequence to a file,
+   * optionally appending.
+   *
+   * @param from the character sequence to append
+   * @param to the destination file
+   * @param charset the character set used when writing the file
+   * @param append true to append, false to overwrite
+   * @throws IOException if an I/O error occurs
+   */
+  private static void write(CharSequence from, File to, Charset charset,
+      boolean append) throws IOException {
+    CharStreams.write(from, newWriterSupplier(to, charset, append));
+  }
+
+  /**
+   * Copies all characters from a file to a {@link Appendable} &
+   * {@link Closeable} object supplied by a factory, using the given
+   * character set.
+   *
+   * @param from the source file
+   * @param charset the character set used when reading the file
+   * @param to the appendable supplier
+   * @throws IOException if an I/O error occurs
+   */
+  public static <W extends Appendable & Closeable> void copy(File from,
+      Charset charset, OutputSupplier<W> to) throws IOException {
+    CharStreams.copy(newReaderSupplier(from, charset), to);
+  }
+
+  /**
+   * Copies all characters from a file to an appendable object,
+   * using the given character set.
+   *
+   * @param from the source file
+   * @param charset the character set used when reading the file
+   * @param to the appendable object
+   * @throws IOException if an I/O error occurs
+   */
+  public static void copy(File from, Charset charset, Appendable to)
+      throws IOException {
+    CharStreams.copy(newReaderSupplier(from, charset), to);
+  }
+
+  /**
+   * Returns true if the files contains the same bytes.
+   *
+   * @throws IOException if an I/O error occurs
+   */
+  public static boolean equal(File file1, File file2) throws IOException {
+    if (file1 == file2 || file1.equals(file2)) {
+      return true;
+    }
+
+    /*
+     * Some operating systems may return zero as the length for files
+     * denoting system-dependent entities such as devices or pipes, in
+     * which case we must fall back on comparing the bytes directly.
+     */
+    long len1 = file1.length();
+    long len2 = file2.length();
+    if (len1 != 0 && len2 != 0 && len1 != len2) {
+      return false;
+    }
+    return ByteStreams.equal(newInputStreamSupplier(file1),
+        newInputStreamSupplier(file2));
+  }
+
+  /**
+   * Atomically creates a new directory somewhere beneath the system's
+   * temporary directory (as defined by the {@code java.io.tmpdir} system
+   * property), and returns its name.
+   *
+   * <p>Use this method instead of {@link File#createTempFile(String, String)}
+   * when you wish to create a directory, not a regular file.  A common pitfall
+   * is to call {@code createTempFile}, delete the file and create a
+   * directory in its place, but this leads a race condition which can be
+   * exploited to create security vulnerabilities, especially when executable
+   * files are to be written into the directory.
+   *
+   * <p>This method assumes that the temporary volume is writable, has free
+   * inodes and free blocks, and that it will not be called thousands of times
+   * per second.
+   *
+   * @return the newly-created directory
+   * @throws IllegalStateException if the directory could not be created
+   */
+  public static File createTempDir() {
+    File baseDir = new File(System.getProperty("java.io.tmpdir"));
+    String baseName = System.currentTimeMillis() + "-";
+
+    for (int counter = 0; counter < TEMP_DIR_ATTEMPTS; counter++) {
+      File tempDir = new File(baseDir, baseName + counter);
+      if (tempDir.mkdir()) {
+        return tempDir;
+      }
+    }
+    throw new IllegalStateException("Failed to create directory within "
+        + TEMP_DIR_ATTEMPTS + " attempts (tried "
+        + baseName + "0 to " + baseName + (TEMP_DIR_ATTEMPTS - 1) + ')');
+  }
+
+  /**
+   * Creates an empty file or updates the last updated timestamp on the
+   * same as the unix command of the same name.
+   *
+   * @param file the file to create or update
+   * @throws IOException if an I/O error occurs
+   */
+  public static void touch(File file) throws IOException {
+    if (!file.createNewFile()
+        && !file.setLastModified(System.currentTimeMillis())) {
+      throw new IOException("Unable to update modification time of " + file);
+    }
+  }
+
+  /**
+   * Creates any necessary but nonexistent parent directories of the specified
+   * file. Note that if this operation fails it may have succeeded in creating
+   * some (but not all) of the necessary parent directories.
+   *
+   * @throws IOException if an I/O error occurs, or if any necessary but
+   *     nonexistent parent directories of the specified file could not be
+   *     created.
+   * @since 4.0
+   */
+  public static void createParentDirs(File file) throws IOException {
+    File parent = file.getCanonicalFile().getParentFile();
+    if (parent == null) {
+      /*
+       * The given directory is a filesystem root. All zero of its ancestors
+       * exist. This doesn't mean that the root itself exists -- consider x:\ on
+       * a Windows machine without such a drive -- or even that the caller can
+       * create it, but this method makes no such guarantees even for non-root
+       * files.
+       */
+      return;
+    }
+    parent.mkdirs();
+    if (!parent.isDirectory()) {
+      throw new IOException("Unable to create parent directories of " + file);
+    }
+  }
+
+  /**
+   * Moves the file from one path to another. This method can rename a file or
+   * move it to a different directory, like the Unix {@code mv} command.
+   *
+   * @param from the source file
+   * @param to the destination file
+   * @throws IOException if an I/O error occurs
+   * @throws IllegalArgumentException if {@code from.equals(to)}
+   */
+  public static void move(File from, File to) throws IOException {
+    Preconditions.checkNotNull(to);
+    Preconditions.checkArgument(!from.equals(to),
+        "Source %s and destination %s must be different", from, to);
+
+    if (!from.renameTo(to)) {
+      copy(from, to);
+      if (!from.delete()) {
+        if (!to.delete()) {
+          throw new IOException("Unable to delete " + to);
+        }
+        throw new IOException("Unable to delete " + from);
+      }
+    }
+  }
+
+  /**
+   * Reads the first line from a file. The line does not include
+   * line-termination characters, but does include other leading and
+   * trailing whitespace.
+   *
+   * @param file the file to read from
+   * @param charset the character set used when writing the file
+   * @return the first line, or null if the file is empty
+   * @throws IOException if an I/O error occurs
+   */
+  public static String readFirstLine(File file, Charset charset)
+      throws IOException {
+    return CharStreams.readFirstLine(Files.newReaderSupplier(file, charset));
+  }
+
+  /**
+   * Reads all of the lines from a file. The lines do not include
+   * line-termination characters, but do include other leading and
+   * trailing whitespace.
+   *
+   * @param file the file to read from
+   * @param charset the character set used when writing the file
+   * @return a mutable {@link List} containing all the lines
+   * @throws IOException if an I/O error occurs
+   */
+  public static List<String> readLines(File file, Charset charset)
+      throws IOException {
+    return CharStreams.readLines(Files.newReaderSupplier(file, charset));
+  }
+
+  /**
+   * Streams lines from a {@link File}, stopping when our callback returns
+   * false, or we have read all of the lines.
+   *
+   * @param file the file to read from
+   * @param charset the character set used when writing the file
+   * @param callback the {@link LineProcessor} to use to handle the lines
+   * @return the output of processing the lines
+   * @throws IOException if an I/O error occurs
+   */
+  public static <T> T readLines(File file, Charset charset,
+      LineProcessor<T> callback) throws IOException {
+    return CharStreams.readLines(Files.newReaderSupplier(file, charset),
+        callback);
+  }
+
+  /**
+   * Process the bytes of a file.
+   *
+   * <p>(If this seems too complicated, maybe you're looking for
+   * {@link #toByteArray}.)
+   *
+   * @param file the file to read
+   * @param processor the object to which the bytes of the file are passed.
+   * @return the result of the byte processor
+   * @throws IOException if an I/O error occurs
+   */
+  public static <T> T readBytes(File file, ByteProcessor<T> processor)
+      throws IOException {
+    return ByteStreams.readBytes(newInputStreamSupplier(file), processor);
+  }
+
+  /**
+   * Computes and returns the checksum value for a file.
+   * The checksum object is reset when this method returns successfully.
+   *
+   * @param file the file to read
+   * @param checksum the checksum object
+   * @return the result of {@link Checksum#getValue} after updating the
+   *     checksum object with all of the bytes in the file
+   * @throws IOException if an I/O error occurs
+   */
+  public static long getChecksum(File file, Checksum checksum)
+      throws IOException {
+    return ByteStreams.getChecksum(newInputStreamSupplier(file), checksum);
+  }
+
+  /**
+   * Computes and returns the digest value for a file.
+   * The digest object is reset when this method returns successfully.
+   *
+   * @param file the file to read
+   * @param md the digest object
+   * @return the result of {@link MessageDigest#digest()} after updating the
+   *     digest object with all of the bytes in this file
+   * @throws IOException if an I/O error occurs
+   */
+  public static byte[] getDigest(File file, MessageDigest md)
+      throws IOException {
+    return ByteStreams.getDigest(newInputStreamSupplier(file), md);
+  }
+
+  /**
+   * Fully maps a file read-only in to memory as per
+   * {@link FileChannel#map(java.nio.channels.FileChannel.MapMode, long, long)}.
+   *
+   * <p>Files are mapped from offset 0 to its length.
+   *
+   * <p>This only works for files <= {@link Integer#MAX_VALUE} bytes.
+   *
+   * @param file the file to map
+   * @return a read-only buffer reflecting {@code file}
+   * @throws FileNotFoundException if the {@code file} does not exist
+   * @throws IOException if an I/O error occurs
+   *
+   * @see FileChannel#map(MapMode, long, long)
+   * @since 2.0
+   */
+  public static MappedByteBuffer map(File file) throws IOException {
+    return map(file, MapMode.READ_ONLY);
+  }
+
+  /**
+   * Fully maps a file in to memory as per
+   * {@link FileChannel#map(java.nio.channels.FileChannel.MapMode, long, long)}
+   * using the requested {@link MapMode}.
+   *
+   * <p>Files are mapped from offset 0 to its length.
+   *
+   * <p>This only works for files <= {@link Integer#MAX_VALUE} bytes.
+   *
+   * @param file the file to map
+   * @param mode the mode to use when mapping {@code file}
+   * @return a buffer reflecting {@code file}
+   * @throws FileNotFoundException if the {@code file} does not exist
+   * @throws IOException if an I/O error occurs
+   *
+   * @see FileChannel#map(MapMode, long, long)
+   * @since 2.0
+   */
+  public static MappedByteBuffer map(File file, MapMode mode)
+      throws IOException {
+    if (!file.exists()) {
+      throw new FileNotFoundException(file.toString());
+    }
+    return map(file, mode, file.length());
+  }
+
+  /**
+   * Maps a file in to memory as per
+   * {@link FileChannel#map(java.nio.channels.FileChannel.MapMode, long, long)}
+   * using the requested {@link MapMode}.
+   *
+   * <p>Files are mapped from offset 0 to {@code size}.
+   *
+   * <p>If the mode is {@link MapMode#READ_WRITE} and the file does not exist,
+   * it will be created with the requested {@code size}. Thus this method is
+   * useful for creating memory mapped files which do not yet exist.
+   *
+   * <p>This only works for files <= {@link Integer#MAX_VALUE} bytes.
+   *
+   * @param file the file to map
+   * @param mode the mode to use when mapping {@code file}
+   * @return a buffer reflecting {@code file}
+   * @throws IOException if an I/O error occurs
+   *
+   * @see FileChannel#map(MapMode, long, long)
+   * @since 2.0
+   */
+  public static MappedByteBuffer map(File file, MapMode mode, long size)
+      throws FileNotFoundException, IOException {
+    RandomAccessFile raf =
+        new RandomAccessFile(file, mode == MapMode.READ_ONLY ? "r" : "rw");
+
+    boolean threw = true;
+    try {
+      MappedByteBuffer mbb = map(raf, mode, size);
+      threw = false;
+      return mbb;
+    } finally {
+      Closeables.close(raf, threw);
+    }
+  }
+
+  private static MappedByteBuffer map(RandomAccessFile raf, MapMode mode,
+      long size) throws IOException {
+    FileChannel channel = raf.getChannel();
+
+    boolean threw = true;
+    try {
+      MappedByteBuffer mbb = channel.map(mode, 0, size);
+      threw = false;
+      return mbb;
+    } finally {
+      Closeables.close(channel, threw);
+    }
+  }
+
+  /**
+   * Returns the lexically cleaned form of the path name, <i>usually</i> (but
+   * not always) equivalent to the original. The following heuristics are used:
+   *
+   * <ul>
+   * <li>empty string becomes .
+   * <li>. stays as .
+   * <li>fold out ./
+   * <li>fold out ../ when possible
+   * <li>collapse multiple slashes
+   * <li>delete trailing slashes (unless the path is just "/")
+   * </ul>
+   *
+   * These heuristics do not always match the behavior of the filesystem. In
+   * particular, consider the path {@code a/../b}, which {@code simplifyPath}
+   * will change to {@code b}. If {@code a} is a symlink to {@code x}, {@code
+   * a/../b} may refer to a sibling of {@code x}, rather than the sibling of
+   * {@code a} referred to by {@code b}.
+   *
+   * @since 11.0
+   */
+  public static String simplifyPath(String pathname) {
+    if (pathname.length() == 0) {
+      return ".";
+    }
+
+    // split the path apart
+    Iterable<String> components =
+        Splitter.on('/').omitEmptyStrings().split(pathname);
+    List<String> path = new ArrayList<String>();
+
+    // resolve ., .., and //
+    for (String component : components) {
+      if (component.equals(".")) {
+        continue;
+      } else if (component.equals("..")) {
+        if (path.size() > 0 && !path.get(path.size() - 1).equals("..")) {
+          path.remove(path.size() - 1);
+        } else {
+          path.add("..");
+        }
+      } else {
+        path.add(component);
+      }
+    }
+
+    // put it back together
+    String result = Joiner.on('/').join(path);
+    if (pathname.charAt(0) == '/') {
+      result = "/" + result;
+    }
+
+    while (result.startsWith("/../")) {
+      result = result.substring(3);
+    }
+    if (result.equals("/..")) {
+      result = "/";
+    } else if ("".equals(result)) {
+      result = ".";
+    }
+
+    return result;
+  }
+
+  /**
+   * Returns the <a href="http://en.wikipedia.org/wiki/Filename_extension">file
+   * extension</a> for the given file name, or the empty string if the file has
+   * no extension.  The result does not include the '{@code .}'.
+   *
+   * @since 11.0
+   */
+  public static String getFileExtension(String fileName) {
+    checkNotNull(fileName);
+    int dotIndex = fileName.lastIndexOf('.');
+    return (dotIndex == -1) ? "" : fileName.substring(dotIndex + 1);
+  }
+}
diff --git a/guava/src/com/google/common/io/Flushables.java b/guava/src/com/google/common/io/Flushables.java
new file mode 100644
index 0000000..68ff860
--- /dev/null
+++ b/guava/src/com/google/common/io/Flushables.java
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.io;
+
+import com.google.common.annotations.Beta;
+
+import java.io.Flushable;
+import java.io.IOException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * Utility methods for working with {@link Flushable} objects.
+ *
+ * @author Michael Lancaster
+ * @since 1.0
+ */
+@Beta
+public final class Flushables {
+  private static final Logger logger
+      = Logger.getLogger(Flushables.class.getName());
+
+  private Flushables() {}
+
+  /**
+   * Flush a {@link Flushable}, with control over whether an
+   * {@code IOException} may be thrown.
+   *
+   * <p>If {@code swallowIOException} is true, then we don't rethrow
+   * {@code IOException}, but merely log it.
+   *
+   * @param flushable the {@code Flushable} object to be flushed.
+   * @param swallowIOException if true, don't propagate IO exceptions
+   *     thrown by the {@code flush} method
+   * @throws IOException if {@code swallowIOException} is false and
+   *     {@link Flushable#flush} throws an {@code IOException}.
+   * @see Closeables#close
+   */
+  public static void flush(Flushable flushable, boolean swallowIOException)
+      throws IOException {
+    try {
+      flushable.flush();
+    } catch (IOException e) {
+      if (swallowIOException) {
+        logger.log(Level.WARNING,
+            "IOException thrown while flushing Flushable.", e);
+      } else {
+        throw e;
+      }
+    }
+  }
+
+  /**
+   * Equivalent to calling {@code flush(flushable, true)}, but with no
+   * {@code IOException} in the signature.
+   *
+   * @param flushable the {@code Flushable} object to be flushed.
+   */
+  public static void flushQuietly(Flushable flushable) {
+    try {
+      flush(flushable, true);
+    } catch (IOException e) {
+      logger.log(Level.SEVERE, "IOException should not have been thrown.", e);
+    }
+  }
+}
diff --git a/guava/src/com/google/common/io/InputSupplier.java b/guava/src/com/google/common/io/InputSupplier.java
new file mode 100644
index 0000000..2b6a4ad
--- /dev/null
+++ b/guava/src/com/google/common/io/InputSupplier.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.io;
+
+import java.io.IOException;
+
+/**
+ * A factory for readable streams of bytes or characters.
+ *
+ * @author Chris Nokleberg
+ * @since 1.0
+ */
+public interface InputSupplier<T> {
+
+  /**
+   * Returns an object that encapsulates a readable resource.
+   * <p>
+   * Like {@link Iterable#iterator}, this method may be called repeatedly to
+   * get independent channels to the same underlying resource.
+   * <p>
+   * Where the channel maintains a position within the resource, moving that
+   * cursor within one channel should not affect the starting position of
+   * channels returned by other calls.
+   */
+  T getInput() throws IOException;
+}
diff --git a/guava/src/com/google/common/io/LimitInputStream.java b/guava/src/com/google/common/io/LimitInputStream.java
new file mode 100644
index 0000000..e9d963d
--- /dev/null
+++ b/guava/src/com/google/common/io/LimitInputStream.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.io;
+
+import com.google.common.annotations.Beta;
+import com.google.common.base.Preconditions;
+
+import java.io.FilterInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+/**
+ * An InputStream that limits the number of bytes which can be read.
+ *
+ * @author Charles Fry
+ * @since 1.0
+ */
+@Beta
+public final class LimitInputStream extends FilterInputStream {
+
+  private long left;
+  private long mark = -1;
+
+  /**
+   * Wraps another input stream, limiting the number of bytes which can be read.
+   *
+   * @param in the input stream to be wrapped
+   * @param limit the maximum number of bytes to be read
+   */
+  public LimitInputStream(InputStream in, long limit) {
+    super(in);
+    Preconditions.checkNotNull(in);
+    Preconditions.checkArgument(limit >= 0, "limit must be non-negative");
+    left = limit;
+  }
+
+  @Override public int available() throws IOException {
+    return (int) Math.min(in.available(), left);
+  }
+
+  @Override public synchronized void mark(int readlimit) {
+    in.mark(readlimit);
+    mark = left;
+    // it's okay to mark even if mark isn't supported, as reset won't work
+  }
+
+  @Override public int read() throws IOException {
+    if (left == 0) {
+      return -1;
+    }
+
+    int result = in.read();
+    if (result != -1) {
+      --left;
+    }
+    return result;
+  }
+
+  @Override public int read(byte[] b, int off, int len) throws IOException {
+    if (left == 0) {
+      return -1;
+    }
+
+    len = (int) Math.min(len, left);
+    int result = in.read(b, off, len);
+    if (result != -1) {
+      left -= result;
+    }
+    return result;
+  }
+
+  @Override public synchronized void reset() throws IOException {
+    if (!in.markSupported()) {
+      throw new IOException("Mark not supported");
+    }
+    if (mark == -1) {
+      throw new IOException("Mark not set");
+    }
+
+    in.reset();
+    left = mark;
+  }
+
+  @Override public long skip(long n) throws IOException {
+    n = Math.min(n, left);
+    long skipped = in.skip(n);
+    left -= skipped;
+    return skipped;
+  }
+}
diff --git a/guava/src/com/google/common/io/LineBuffer.java b/guava/src/com/google/common/io/LineBuffer.java
new file mode 100644
index 0000000..1f1c8dc
--- /dev/null
+++ b/guava/src/com/google/common/io/LineBuffer.java
@@ -0,0 +1,117 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.io;
+
+import java.io.IOException;
+
+/**
+ * Package-protected abstract class that implements the line reading
+ * algorithm used by {@link LineReader}. Line separators are per {@link
+ * java.io.BufferedReader}: line feed, carriage return, or carriage
+ * return followed immediately by a linefeed.
+ *
+ * <p>Subclasses must implement {@link #handleLine}, call {@link #add}
+ * to pass character data, and call {@link #finish} at the end of stream.
+ *
+ * @author Chris Nokleberg
+ * @since 1.0
+ */
+abstract class LineBuffer {
+  /** Holds partial line contents. */
+  private StringBuilder line = new StringBuilder();
+  /** Whether a line ending with a CR is pending processing. */
+  private boolean sawReturn;
+
+  /**
+   * Process additional characters from the stream. When a line separator
+   * is found the contents of the line and the line separator itself
+   * are passed to the abstract {@link #handleLine} method.
+   *
+   * @param cbuf the character buffer to process
+   * @param off the offset into the buffer
+   * @param len the number of characters to process
+   * @throws IOException if an I/O error occurs
+   * @see #finish
+   */
+  protected void add(char[] cbuf, int off, int len) throws IOException {
+    int pos = off;
+    if (sawReturn && len > 0) {
+      // Last call to add ended with a CR; we can handle the line now.
+      if (finishLine(cbuf[pos] == '\n')) {
+        pos++;
+      }
+    }
+
+    int start = pos;
+    for (int end = off + len; pos < end; pos++) {
+      switch (cbuf[pos]) {
+        case '\r':
+          line.append(cbuf, start, pos - start);
+          sawReturn = true;
+          if (pos + 1 < end) {
+            if (finishLine(cbuf[pos + 1] == '\n')) {
+              pos++;
+            }
+          }
+          start = pos + 1;
+          break;
+
+        case '\n':
+          line.append(cbuf, start, pos - start);
+          finishLine(true);
+          start = pos + 1;
+          break;
+      }
+    }
+    line.append(cbuf, start, off + len - start);
+  }
+
+  /** Called when a line is complete. */
+  private boolean finishLine(boolean sawNewline) throws IOException {
+    handleLine(line.toString(), sawReturn
+        ? (sawNewline ? "\r\n" : "\r")
+        : (sawNewline ? "\n" : ""));
+    line = new StringBuilder();
+    sawReturn = false;
+    return sawNewline;
+  }
+
+  /**
+   * Subclasses must call this method after finishing character processing,
+   * in order to ensure that any unterminated line in the buffer is
+   * passed to {@link #handleLine}.
+   *
+   * @throws IOException if an I/O error occurs
+   */
+  protected void finish() throws IOException {
+    if (sawReturn || line.length() > 0) {
+      finishLine(false);
+    }
+  }
+
+  /**
+   * Called for each line found in the character data passed to
+   * {@link #add}.
+   *
+   * @param line a line of text (possibly empty), without any line separators
+   * @param end the line separator; one of {@code "\r"}, {@code "\n"},
+   *     {@code "\r\n"}, or {@code ""}
+   * @throws IOException if an I/O error occurs
+   */
+  protected abstract void handleLine(String line, String end)
+      throws IOException;
+}
diff --git a/guava/src/com/google/common/io/LineProcessor.java b/guava/src/com/google/common/io/LineProcessor.java
new file mode 100644
index 0000000..9ee6a0f
--- /dev/null
+++ b/guava/src/com/google/common/io/LineProcessor.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.io;
+
+import com.google.common.annotations.Beta;
+
+import java.io.IOException;
+
+/**
+ * A callback to be used with the streaming {@code readLines} methods.
+ *
+ * <p>{@link #processLine} will be called for each line that is read, and
+ * should return {@code false} when you want to stop processing.
+ *
+ * @author Miles Barr
+ * @since 1.0
+ */
+@Beta
+public interface LineProcessor<T> {
+
+  /**
+   * This method will be called once for each line.
+   *
+   * @param line the line read from the input, without delimiter
+   * @return true to continue processing, false to stop
+   */
+  boolean processLine(String line) throws IOException;
+
+  /** Return the result of processing all the lines. */
+  T getResult();
+}
diff --git a/guava/src/com/google/common/io/LineReader.java b/guava/src/com/google/common/io/LineReader.java
new file mode 100644
index 0000000..69ae0cf
--- /dev/null
+++ b/guava/src/com/google/common/io/LineReader.java
@@ -0,0 +1,87 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.io;
+
+import com.google.common.annotations.Beta;
+import com.google.common.base.Preconditions;
+
+import java.io.IOException;
+import java.io.Reader;
+import java.nio.CharBuffer;
+import java.util.LinkedList;
+import java.util.Queue;
+
+/**
+ * A class for reading lines of text. Provides the same functionality
+ * as {@link java.io.BufferedReader#readLine()} but for all {@link Readable}
+ * objects, not just instances of {@link Reader}.
+ *
+ * @author Chris Nokleberg
+ * @since 1.0
+ */
+@Beta
+public final class LineReader {
+  private final Readable readable;
+  private final Reader reader;
+  private final char[] buf = new char[0x1000]; // 4K
+  private final CharBuffer cbuf = CharBuffer.wrap(buf);
+
+  private final Queue<String> lines = new LinkedList<String>();
+  private final LineBuffer lineBuf = new LineBuffer() {
+    @Override protected void handleLine(String line, String end) {
+      lines.add(line);
+    }
+  };
+
+  /**
+   * Creates a new instance that will read lines from the given
+   * {@code Readable} object.
+   */
+  public LineReader(Readable readable) {
+    Preconditions.checkNotNull(readable);
+    this.readable = readable;
+    this.reader = (readable instanceof Reader) ? (Reader) readable : null;
+  }
+
+  /**
+   * Reads a line of text. A line is considered to be terminated by any
+   * one of a line feed ({@code '\n'}), a carriage return
+   * ({@code '\r'}), or a carriage return followed immediately by a linefeed
+   * ({@code "\r\n"}).
+   *
+   * @return a {@code String} containing the contents of the line, not
+   *     including any line-termination characters, or {@code null} if the
+   *     end of the stream has been reached.
+   * @throws IOException if an I/O error occurs
+   */
+  public String readLine() throws IOException {
+    while (lines.peek() == null) {
+      cbuf.clear();
+      // The default implementation of Reader#read(CharBuffer) allocates a
+      // temporary char[], so we call Reader#read(char[], int, int) instead.
+      int read = (reader != null)
+          ? reader.read(buf, 0, buf.length)
+          : readable.read(cbuf);
+      if (read == -1) {
+        lineBuf.finish();
+        break;
+      }
+      lineBuf.add(buf, 0, read);
+    }
+    return lines.poll();
+  }
+}
diff --git a/guava/src/com/google/common/io/LittleEndianDataInputStream.java b/guava/src/com/google/common/io/LittleEndianDataInputStream.java
new file mode 100644
index 0000000..e60d22f
--- /dev/null
+++ b/guava/src/com/google/common/io/LittleEndianDataInputStream.java
@@ -0,0 +1,232 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.io;
+
+import com.google.common.annotations.Beta;
+import com.google.common.base.Preconditions;
+import com.google.common.primitives.Ints;
+import com.google.common.primitives.Longs;
+
+import java.io.DataInput;
+import java.io.DataInputStream;
+import java.io.EOFException;
+import java.io.FilterInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+/**
+ * An implementation of {@link DataInput} that uses little-endian byte ordering
+ * for reading {@code short}, {@code int}, {@code float}, {@code double}, and
+ * {@code long} values.
+ * <p>
+ * <b>Note:</b> This class intentionally violates the specification of its
+ * supertype {@code DataInput}, which explicitly requires big-endian byte order.
+ *
+ * @author Chris Nokleberg
+ * @author Keith Bottner
+ * @since 8.0
+ */
+@Beta
+public final class LittleEndianDataInputStream extends FilterInputStream
+    implements DataInput {
+
+  /**
+   * Creates a {@code LittleEndianDataInputStream} that wraps the given stream.
+   *
+   * @param in the stream to delegate to
+   */
+  public LittleEndianDataInputStream(InputStream in) {
+    super(Preconditions.checkNotNull(in));
+  }
+
+  /**
+   * This method will throw an {@link UnsupportedOperationException}.
+   */
+  @Override
+  public String readLine() {
+    throw new UnsupportedOperationException("readLine is not supported");
+  }
+
+  @Override
+  public void readFully(byte[] b) throws IOException {
+    ByteStreams.readFully(this, b);
+  }
+
+  @Override
+  public void readFully(byte[] b, int off, int len) throws IOException {
+    ByteStreams.readFully(this, b, off, len);
+  }
+
+  @Override
+  public int skipBytes(int n) throws IOException {
+    return (int) in.skip(n);
+  }
+
+  @Override
+  public int readUnsignedByte() throws IOException {
+    int b1 = in.read();
+    if (0 > b1) {
+      throw new EOFException();
+    }
+    
+    return b1;
+  }
+
+  /**
+   * Reads an unsigned {@code short} as specified by
+   * {@link DataInputStream#readUnsignedShort()}, except using little-endian
+   * byte order.
+   *
+   * @return the next two bytes of the input stream, interpreted as an 
+   *         unsigned 16-bit integer in little-endian byte order
+   * @throws IOException if an I/O error occurs
+   */
+  @Override
+  public int readUnsignedShort() throws IOException {
+    byte b1 = readAndCheckByte();
+    byte b2 = readAndCheckByte();
+
+    return Ints.fromBytes((byte) 0, (byte) 0, b2, b1);
+  }
+
+  /**
+   * Reads an integer as specified by {@link DataInputStream#readInt()}, except
+   * using little-endian byte order.
+   *
+   * @return the next four bytes of the input stream, interpreted as an 
+   *         {@code int} in little-endian byte order
+   * @throws IOException if an I/O error occurs
+   */
+  @Override
+  public int readInt() throws IOException {
+    byte b1 = readAndCheckByte();
+    byte b2 = readAndCheckByte();
+    byte b3 = readAndCheckByte();
+    byte b4 = readAndCheckByte();
+
+    return Ints.fromBytes( b4, b3, b2, b1);
+  }
+
+  /**
+   * Reads a {@code long} as specified by {@link DataInputStream#readLong()},
+   * except using little-endian byte order.
+   *
+   * @return the next eight bytes of the input stream, interpreted as a 
+   *         {@code long} in little-endian byte order
+   * @throws IOException if an I/O error occurs
+   */
+  @Override
+  public long readLong() throws IOException {
+    byte b1 = readAndCheckByte();
+    byte b2 = readAndCheckByte();
+    byte b3 = readAndCheckByte();
+    byte b4 = readAndCheckByte();
+    byte b5 = readAndCheckByte();
+    byte b6 = readAndCheckByte();
+    byte b7 = readAndCheckByte();
+    byte b8 = readAndCheckByte();
+
+    return Longs.fromBytes(b8, b7, b6, b5, b4, b3, b2, b1);
+  }
+
+  /**
+   * Reads a {@code float} as specified by {@link DataInputStream#readFloat()},
+   * except using little-endian byte order.
+   *
+   * @return the next four bytes of the input stream, interpreted as a
+   *         {@code float} in little-endian byte order
+   * @throws IOException if an I/O error occurs
+   */
+  @Override
+  public float readFloat() throws IOException {
+    return Float.intBitsToFloat(readInt());
+  }
+
+  /**
+   * Reads a {@code double} as specified by
+   * {@link DataInputStream#readDouble()}, except using little-endian byte
+   * order.
+   *
+   * @return the next eight bytes of the input stream, interpreted as a
+   *         {@code double} in little-endian byte order
+   * @throws IOException if an I/O error occurs
+   */
+  @Override
+  public double readDouble() throws IOException {
+    return Double.longBitsToDouble(readLong());
+  }
+
+  @Override
+  public String readUTF() throws IOException {
+    return new DataInputStream(in).readUTF();
+  }
+
+  /**
+   * Reads a {@code short} as specified by {@link DataInputStream#readShort()},
+   * except using little-endian byte order.
+   *
+   * @return the next two bytes of the input stream, interpreted as a
+   *         {@code short} in little-endian byte order.
+   * @throws IOException if an I/O error occurs.
+   */
+  @Override
+  public short readShort() throws IOException {
+    return (short) readUnsignedShort();
+  }
+
+  /**
+   * Reads a char as specified by {@link DataInputStream#readChar()}, except
+   * using little-endian byte order.
+   *
+   * @return the next two bytes of the input stream, interpreted as a 
+   *         {@code char} in little-endian byte order
+   * @throws IOException if an I/O error occurs
+   */
+  @Override
+  public char readChar() throws IOException {
+    return (char) readUnsignedShort();
+  }
+
+  @Override
+  public byte readByte() throws IOException {
+    return (byte) readUnsignedByte();
+  }
+
+  @Override
+  public boolean readBoolean() throws IOException {
+    return readUnsignedByte() != 0;
+  }
+
+  /**
+   * Reads a byte from the input stream checking that the end of file (EOF)
+   * has not been encountered.
+   *  
+   * @return byte read from input
+   * @throws IOException if an error is encountered while reading
+   * @throws EOFException if the end of file (EOF) is encountered.
+   */
+  private byte readAndCheckByte() throws IOException, EOFException {
+    int b1 = in.read();
+
+    if (-1 == b1) {
+      throw new EOFException();
+    }
+
+    return (byte) b1;
+  }
+
+}
diff --git a/guava/src/com/google/common/io/LittleEndianDataOutputStream.java b/guava/src/com/google/common/io/LittleEndianDataOutputStream.java
new file mode 100644
index 0000000..1725ae0
--- /dev/null
+++ b/guava/src/com/google/common/io/LittleEndianDataOutputStream.java
@@ -0,0 +1,164 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.io;
+
+import com.google.common.annotations.Beta;
+import com.google.common.base.Preconditions;
+import com.google.common.primitives.Longs;
+
+import java.io.DataOutput;
+import java.io.DataOutputStream;
+import java.io.FilterOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+
+/**
+ * An implementation of {@link DataOutput} that uses little-endian byte ordering
+ * for writing {@code char}, {@code short}, {@code int}, {@code float}, {@code
+ * double}, and {@code long} values.
+ * <p>
+ * <b>Note:</b> This class intentionally violates the specification of its
+ * supertype {@code DataOutput}, which explicitly requires big-endian byte
+ * order.
+ *
+ * @author Chris Nokleberg
+ * @author Keith Bottner
+ * @since 8.0
+ */
+@Beta
+public class LittleEndianDataOutputStream extends FilterOutputStream
+    implements DataOutput {
+
+  /**
+   * Creates a {@code LittleEndianDataOutputStream} that wraps the given stream.
+   *
+   * @param out the stream to delegate to
+   */
+  public LittleEndianDataOutputStream(OutputStream out) {
+    super(new DataOutputStream(Preconditions.checkNotNull(out)));
+  }
+
+  @Override public void write(byte[] b, int off, int len) throws IOException {
+    // Override slow FilterOutputStream impl
+    out.write(b, off, len);
+  }
+
+  @Override public void writeBoolean(boolean v) throws IOException {
+    ((DataOutputStream) out).writeBoolean(v);
+  }
+
+  @Override public void writeByte(int v) throws IOException {
+    ((DataOutputStream) out).writeByte(v);
+  }
+
+  /**
+   * @deprecated The semantics of {@code writeBytes(String s)} are considered
+   *             dangerous. Please use {@link #writeUTF(String s)},
+   *             {@link #writeChars(String s)} or another write method instead.
+   */
+  @Deprecated
+  @Override public void writeBytes(String s) throws IOException {
+    ((DataOutputStream) out).writeBytes(s);
+  }
+
+  /**
+   * Writes a char as specified by {@link DataOutputStream#writeChar(int)},
+   * except using little-endian byte order.
+   *
+   * @throws IOException if an I/O error occurs
+   */
+  @Override public void writeChar(int v) throws IOException {
+    writeShort(v);
+  }
+
+  /**
+   * Writes a {@code String} as specified by
+   * {@link DataOutputStream#writeChars(String)}, except each character is
+   * written using little-endian byte order.
+   *
+   * @throws IOException if an I/O error occurs
+   */
+  @Override public void writeChars(String s) throws IOException {
+    for (int i = 0; i < s.length(); i++) {
+      writeChar(s.charAt(i));
+    }
+  }
+
+  /**
+   * Writes a {@code double} as specified by
+   * {@link DataOutputStream#writeDouble(double)}, except using little-endian
+   * byte order.
+   *
+   * @throws IOException if an I/O error occurs
+   */
+  @Override public void writeDouble(double v) throws IOException {
+    writeLong(Double.doubleToLongBits(v));
+  }
+
+  /**
+   * Writes a {@code float} as specified by
+   * {@link DataOutputStream#writeFloat(float)}, except using little-endian byte
+   * order.
+   *
+   * @throws IOException if an I/O error occurs
+   */
+  @Override public void writeFloat(float v) throws IOException {
+    writeInt(Float.floatToIntBits(v));
+  }
+
+  /**
+   * Writes an {@code int} as specified by
+   * {@link DataOutputStream#writeInt(int)}, except using little-endian byte
+   * order.
+   *
+   * @throws IOException if an I/O error occurs
+   */
+  @Override public void writeInt(int v) throws IOException {
+    out.write(0xFF & v);
+    out.write(0xFF & (v >> 8));
+    out.write(0xFF & (v >> 16));
+    out.write(0xFF & (v >> 24));
+  }
+
+  /**
+   * Writes a {@code long} as specified by
+   * {@link DataOutputStream#writeLong(long)}, except using little-endian byte
+   * order.
+   *
+   * @throws IOException if an I/O error occurs
+   */
+  @Override public void writeLong(long v) throws IOException {
+    byte[] bytes = Longs.toByteArray(Long.reverseBytes(v));
+    write(bytes, 0, bytes.length);
+  }
+
+  /**
+   * Writes a {@code short} as specified by
+   * {@link DataOutputStream#writeShort(int)}, except using little-endian byte
+   * order.
+   *
+   * @throws IOException if an I/O error occurs
+   */
+  @Override public void writeShort(int v) throws IOException {
+    out.write(0xFF & v);
+    out.write(0xFF & (v >> 8));
+  }
+
+  @Override public void writeUTF(String str) throws IOException {
+    ((DataOutputStream) out).writeUTF(str);
+  }
+}
diff --git a/guava/src/com/google/common/io/MultiInputStream.java b/guava/src/com/google/common/io/MultiInputStream.java
new file mode 100644
index 0000000..f8f1a0b
--- /dev/null
+++ b/guava/src/com/google/common/io/MultiInputStream.java
@@ -0,0 +1,115 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.io;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Iterator;
+
+/**
+ * An {@link InputStream} that concatenates multiple substreams. At most
+ * one stream will be open at a time.
+ *
+ * @author Chris Nokleberg
+ * @since 1.0
+ */
+final class MultiInputStream extends InputStream {
+
+  private Iterator<? extends InputSupplier<? extends InputStream>> it;
+  private InputStream in;
+
+  /**
+   * Creates a new instance.
+   *
+   * @param it an iterator of I/O suppliers that will provide each substream
+   */
+  public MultiInputStream(
+      Iterator<? extends InputSupplier<? extends InputStream>> it)
+      throws IOException {
+    this.it = it;
+    advance();
+  }
+
+  @Override public void close() throws IOException {
+    if (in != null) {
+      try {
+        in.close();
+      } finally {
+        in = null;
+      }
+    }
+  }
+
+  /**
+   * Closes the current input stream and opens the next one, if any.
+   */
+  private void advance() throws IOException {
+    close();
+    if (it.hasNext()) {
+      in = it.next().getInput();
+    }
+  }
+
+  @Override public int available() throws IOException {
+    if (in == null) {
+      return 0;
+    }
+    return in.available();
+  }
+
+  @Override public boolean markSupported() {
+    return false;
+  }
+
+  @Override public int read() throws IOException {
+    if (in == null) {
+      return -1;
+    }
+    int result = in.read();
+    if (result == -1) {
+      advance();
+      return read();
+    }
+    return result;
+  }
+
+  @Override public int read(byte[] b, int off, int len) throws IOException {
+    if (in == null) {
+      return -1;
+    }
+    int result = in.read(b, off, len);
+    if (result == -1) {
+      advance();
+      return read(b, off, len);
+    }
+    return result;
+  }
+
+  @Override public long skip(long n) throws IOException {
+    if (in == null || n <= 0) {
+      return 0;
+    }
+    long result = in.skip(n);
+    if (result != 0) {
+      return result;
+    }
+    if (read() == -1) {
+      return 0;
+    }
+    return 1 + in.skip(n - 1);
+  }
+}
diff --git a/guava/src/com/google/common/io/MultiReader.java b/guava/src/com/google/common/io/MultiReader.java
new file mode 100644
index 0000000..6757a26
--- /dev/null
+++ b/guava/src/com/google/common/io/MultiReader.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.io;
+
+import com.google.common.base.Preconditions;
+
+import java.io.IOException;
+import java.io.Reader;
+import java.util.Iterator;
+
+/**
+ * A {@link Reader} that concatenates multiple readers.
+ *
+ * @author Bin Zhu
+ * @since 1.0
+ */
+class MultiReader extends Reader {
+  private final Iterator<? extends InputSupplier<? extends Reader>> it;
+  private Reader current;
+
+  MultiReader(Iterator<? extends InputSupplier<? extends Reader>> readers)
+      throws IOException {
+    this.it = readers;
+    advance();
+  }
+
+  /**
+   * Closes the current reader and opens the next one, if any.
+   */
+  private void advance() throws IOException {
+    close();
+    if (it.hasNext()) {
+      current = it.next().getInput();
+    }
+  }
+
+  @Override public int read(char cbuf[], int off, int len) throws IOException {
+    if (current == null) {
+      return -1;
+    }
+    int result = current.read(cbuf, off, len);
+    if (result == -1) {
+      advance();
+      return read(cbuf, off, len);
+    }
+    return result;
+  }
+
+  @Override public long skip(long n) throws IOException {
+    Preconditions.checkArgument(n >= 0, "n is negative");
+    if (n > 0) {
+      while (current != null) {
+        long result = current.skip(n);
+        if (result > 0) {
+          return result;
+        }
+        advance();
+      }
+    }
+    return 0;
+  }
+
+  @Override public boolean ready() throws IOException {
+    return (current != null) && current.ready();
+  }
+
+  @Override public void close() throws IOException {
+    if (current != null) {
+      try {
+        current.close();
+      } finally {
+        current = null;
+      }
+    }
+  }
+}
diff --git a/guava/src/com/google/common/io/NullOutputStream.java b/guava/src/com/google/common/io/NullOutputStream.java
new file mode 100644
index 0000000..1c1e98e
--- /dev/null
+++ b/guava/src/com/google/common/io/NullOutputStream.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2004 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.io;
+
+import com.google.common.annotations.Beta;
+
+import java.io.OutputStream;
+
+/**
+ * Implementation of {@link OutputStream} that simply discards written bytes.
+ *
+ * @author Spencer Kimball
+ * @since 1.0
+ */
+@Beta
+public final class NullOutputStream extends OutputStream {
+  /** Discards the specified byte. */
+  @Override public void write(int b) {
+  }
+
+  /** Discards the specified byte array. */
+  @Override public void write(byte[] b, int off, int len) {
+  }
+}
diff --git a/guava/src/com/google/common/io/OutputSupplier.java b/guava/src/com/google/common/io/OutputSupplier.java
new file mode 100644
index 0000000..185082c
--- /dev/null
+++ b/guava/src/com/google/common/io/OutputSupplier.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.io;
+
+import java.io.IOException;
+
+/**
+ * A factory for writable streams of bytes or characters.
+ *
+ * @author Chris Nokleberg
+ * @since 1.0
+ */
+public interface OutputSupplier<T> {
+
+  /**
+   * Returns an object that encapsulates a writable resource.
+   * <p>
+   * Like {@link Iterable#iterator}, this method may be called repeatedly to
+   * get independent channels to the same underlying resource.
+   * <p>
+   * Where the channel maintains a position within the resource, moving that
+   * cursor within one channel should not affect the starting position of
+   * channels returned by other calls.
+   */
+  T getOutput() throws IOException;
+}
diff --git a/guava/src/com/google/common/io/PatternFilenameFilter.java b/guava/src/com/google/common/io/PatternFilenameFilter.java
new file mode 100644
index 0000000..065566f
--- /dev/null
+++ b/guava/src/com/google/common/io/PatternFilenameFilter.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2006 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.io;
+
+import com.google.common.annotations.Beta;
+import com.google.common.base.Preconditions;
+
+import java.io.File;
+import java.io.FilenameFilter;
+import java.util.regex.Pattern;
+import java.util.regex.PatternSyntaxException;
+
+import javax.annotation.Nullable;
+
+/**
+ * File name filter that only accepts files matching a regular expression. This class is thread-safe
+ * and immutable.
+ *
+ * @author Apple Chow
+ * @since 1.0
+ */
+@Beta
+public final class PatternFilenameFilter implements FilenameFilter {
+
+  private final Pattern pattern;
+
+  /**
+   * Constructs a pattern file name filter object.
+   * @param patternStr the pattern string on which to filter file names
+   *
+   * @throws PatternSyntaxException if pattern compilation fails (runtime)
+   */
+  public PatternFilenameFilter(String patternStr) {
+    this(Pattern.compile(patternStr));
+  }
+
+  /**
+   * Constructs a pattern file name filter object.
+   * @param pattern the pattern on which to filter file names
+   */
+  public PatternFilenameFilter(Pattern pattern) {
+    this.pattern = Preconditions.checkNotNull(pattern);
+  }
+
+  @Override public boolean accept(@Nullable File dir, String fileName) {
+    return pattern.matcher(fileName).matches();
+  }
+}
diff --git a/guava/src/com/google/common/io/Resources.java b/guava/src/com/google/common/io/Resources.java
new file mode 100644
index 0000000..c57a95f
--- /dev/null
+++ b/guava/src/com/google/common/io/Resources.java
@@ -0,0 +1,168 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.io;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.Beta;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.net.URL;
+import java.nio.charset.Charset;
+import java.util.List;
+
+/**
+ * Provides utility methods for working with resources in the classpath.
+ * Note that even though these methods use {@link URL} parameters, they
+ * are usually not appropriate for HTTP or other non-classpath resources.
+ *
+ * <p>All method parameters must be non-null unless documented otherwise.
+ *
+ * @author Chris Nokleberg
+ * @author Ben Yu
+ * @since 1.0
+ */
+@Beta
+public final class Resources {
+  private Resources() {}
+
+  /**
+   * Returns a factory that will supply instances of {@link InputStream} that
+   * read from the given URL.
+   *
+   * @param url the URL to read from
+   * @return the factory
+   */
+  public static InputSupplier<InputStream> newInputStreamSupplier(
+      final URL url) {
+    checkNotNull(url);
+    return new InputSupplier<InputStream>() {
+      @Override
+      public InputStream getInput() throws IOException {
+        return url.openStream();
+      }
+    };
+  }
+
+  /**
+   * Returns a factory that will supply instances of
+   * {@link InputStreamReader} that read a URL using the given character set.
+   *
+   * @param url the URL to read from
+   * @param charset the character set used when reading the URL contents
+   * @return the factory
+   */
+  public static InputSupplier<InputStreamReader> newReaderSupplier(
+      URL url, Charset charset) {
+    return CharStreams.newReaderSupplier(newInputStreamSupplier(url), charset);
+  }
+
+  /**
+   * Reads all bytes from a URL into a byte array.
+   *
+   * @param url the URL to read from
+   * @return a byte array containing all the bytes from the URL
+   * @throws IOException if an I/O error occurs
+   */
+  public static byte[] toByteArray(URL url) throws IOException {
+    return ByteStreams.toByteArray(newInputStreamSupplier(url));
+  }
+
+  /**
+   * Reads all characters from a URL into a {@link String}, using the given
+   * character set.
+   *
+   * @param url the URL to read from
+   * @param charset the character set used when reading the URL
+   * @return a string containing all the characters from the URL
+   * @throws IOException if an I/O error occurs.
+   */
+  public static String toString(URL url, Charset charset) throws IOException {
+    return CharStreams.toString(newReaderSupplier(url, charset));
+  }
+
+  /**
+   * Streams lines from a URL, stopping when our callback returns false, or we
+   * have read all of the lines.
+   *
+   * @param url the URL to read from
+   * @param charset the character set used when reading the URL
+   * @param callback the LineProcessor to use to handle the lines
+   * @return the output of processing the lines
+   * @throws IOException if an I/O error occurs
+   */
+  public static <T> T readLines(URL url, Charset charset,
+      LineProcessor<T> callback) throws IOException {
+    return CharStreams.readLines(newReaderSupplier(url, charset), callback);
+  }
+
+  /**
+   * Reads all of the lines from a URL. The lines do not include
+   * line-termination characters, but do include other leading and trailing
+   * whitespace.
+   *
+   * @param url the URL to read from
+   * @param charset the character set used when writing the file
+   * @return a mutable {@link List} containing all the lines
+   * @throws IOException if an I/O error occurs
+   */
+  public static List<String> readLines(URL url, Charset charset)
+      throws IOException {
+    return CharStreams.readLines(newReaderSupplier(url, charset));
+  }
+
+  /**
+   * Copies all bytes from a URL to an output stream.
+   *
+   * @param from the URL to read from
+   * @param to the output stream
+   * @throws IOException if an I/O error occurs
+   */
+  public static void copy(URL from, OutputStream to) throws IOException {
+    ByteStreams.copy(newInputStreamSupplier(from), to);
+  }
+  
+  /**
+   * Returns a {@code URL} pointing to {@code resourceName} if the resource is
+   * found in the class path. {@code Resources.class.getClassLoader()} is used
+   * to locate the resource.
+   * 
+   * @throws IllegalArgumentException if resource is not found
+   */
+  public static URL getResource(String resourceName) {
+    URL url = Resources.class.getClassLoader().getResource(resourceName);
+    checkArgument(url != null, "resource %s not found.", resourceName);
+    return url;
+  }
+
+  /**
+   * Returns a {@code URL} pointing to {@code resourceName} that is relative to
+   * {@code contextClass}, if the resource is found in the class path. 
+   * 
+   * @throws IllegalArgumentException if resource is not found
+   */
+  public static URL getResource(Class<?> contextClass, String resourceName) {
+    URL url = contextClass.getResource(resourceName);
+    checkArgument(url != null, "resource %s relative to %s not found.",
+        resourceName, contextClass.getName());
+    return url;
+  }
+}
diff --git a/guava/src/com/google/common/io/package-info.java b/guava/src/com/google/common/io/package-info.java
new file mode 100644
index 0000000..9f08e64
--- /dev/null
+++ b/guava/src/com/google/common/io/package-info.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+/**
+ * This package contains utility methods and classes for working with Java I/O,
+ * for example input streams, output streams, readers, writers, and files.
+ *
+ * <p>Many of the methods are based on the
+ * {@link com.google.common.io.InputSupplier} and
+ * {@link com.google.common.io.OutputSupplier} interfaces. They are used as
+ * factories for I/O objects that might throw {@link java.io.IOException} when
+ * being created. The advantage of using a factory is that the helper methods in
+ * this package can take care of closing the resource properly, even if an
+ * exception is thrown. The {@link com.google.common.io.ByteStreams},
+ * {@link com.google.common.io.CharStreams}, and
+ * {@link com.google.common.io.Files} classes all have static helper methods to
+ * create new factories and to work with them.
+ *
+ * <p>This package is a part of the open-source
+ * <a href="http://guava-libraries.googlecode.com">Guava libraries</a>.
+ *
+ * @author Chris Nokleberg
+ */
+@ParametersAreNonnullByDefault
+package com.google.common.io;
+
+import javax.annotation.ParametersAreNonnullByDefault;
diff --git a/guava/src/com/google/common/math/BigIntegerMath.java b/guava/src/com/google/common/math/BigIntegerMath.java
new file mode 100644
index 0000000..99e69fe
--- /dev/null
+++ b/guava/src/com/google/common/math/BigIntegerMath.java
@@ -0,0 +1,392 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.math;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.math.MathPreconditions.checkNonNegative;
+import static com.google.common.math.MathPreconditions.checkPositive;
+import static com.google.common.math.MathPreconditions.checkRoundingUnnecessary;
+import static java.math.RoundingMode.CEILING;
+import static java.math.RoundingMode.FLOOR;
+import static java.math.RoundingMode.HALF_EVEN;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.VisibleForTesting;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.math.RoundingMode;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * A class for arithmetic on values of type {@code BigInteger}.
+ *
+ * <p>The implementations of many methods in this class are based on material from Henry S. Warren,
+ * Jr.'s <i>Hacker's Delight</i>, (Addison Wesley, 2002).
+ *
+ * <p>Similar functionality for {@code int} and for {@code long} can be found in
+ * {@link IntMath} and {@link LongMath} respectively.
+ *
+ * @author Louis Wasserman
+ * @since 11.0
+ */
+@Beta
+public final class BigIntegerMath {
+  /**
+   * Returns {@code true} if {@code x} represents a power of two.
+   */
+  public static boolean isPowerOfTwo(BigInteger x) {
+    checkNotNull(x);
+    return x.signum() > 0 && x.getLowestSetBit() == x.bitLength() - 1;
+  }
+
+  /**
+   * Returns the base-2 logarithm of {@code x}, rounded according to the specified rounding mode.
+   *
+   * @throws IllegalArgumentException if {@code x <= 0}
+   * @throws ArithmeticException if {@code mode} is {@link RoundingMode#UNNECESSARY} and {@code x}
+   *         is not a power of two
+   */
+  @SuppressWarnings("fallthrough")
+  public static int log2(BigInteger x, RoundingMode mode) {
+    checkPositive("x", checkNotNull(x));
+    int logFloor = x.bitLength() - 1;
+    switch (mode) {
+      case UNNECESSARY:
+        checkRoundingUnnecessary(isPowerOfTwo(x)); // fall through
+      case DOWN:
+      case FLOOR:
+        return logFloor;
+
+      case UP:
+      case CEILING:
+        return isPowerOfTwo(x) ? logFloor : logFloor + 1;
+
+      case HALF_DOWN:
+      case HALF_UP:
+      case HALF_EVEN:
+        if (logFloor < SQRT2_PRECOMPUTE_THRESHOLD) {
+          BigInteger halfPower = SQRT2_PRECOMPUTED_BITS.shiftRight(
+              SQRT2_PRECOMPUTE_THRESHOLD - logFloor);
+          if (x.compareTo(halfPower) <= 0) {
+            return logFloor;
+          } else {
+            return logFloor + 1;
+          }
+        }
+        /*
+         * Since sqrt(2) is irrational, log2(x) - logFloor cannot be exactly 0.5
+         *
+         * To determine which side of logFloor.5 the logarithm is, we compare x^2 to 2^(2 *
+         * logFloor + 1).
+         */
+        BigInteger x2 = x.pow(2);
+        int logX2Floor = x2.bitLength() - 1;
+        return (logX2Floor < 2 * logFloor + 1) ? logFloor : logFloor + 1;
+
+      default:
+        throw new AssertionError();
+    }
+  }
+
+  /*
+   * The maximum number of bits in a square root for which we'll precompute an explicit half power
+   * of two. This can be any value, but higher values incur more class load time and linearly
+   * increasing memory consumption.
+   */
+  @VisibleForTesting static final int SQRT2_PRECOMPUTE_THRESHOLD = 256;
+
+  @VisibleForTesting static final BigInteger SQRT2_PRECOMPUTED_BITS =
+      new BigInteger("16a09e667f3bcc908b2fb1366ea957d3e3adec17512775099da2f590b0667322a", 16);
+
+  /**
+   * Returns the base-10 logarithm of {@code x}, rounded according to the specified rounding mode.
+   *
+   * @throws IllegalArgumentException if {@code x <= 0}
+   * @throws ArithmeticException if {@code mode} is {@link RoundingMode#UNNECESSARY} and {@code x}
+   *         is not a power of ten
+   */
+  @SuppressWarnings("fallthrough")
+  public static int log10(BigInteger x, RoundingMode mode) {
+    checkPositive("x", x);
+    if (fitsInLong(x)) {
+      return LongMath.log10(x.longValue(), mode);
+    }
+
+    // capacity of 10 suffices for all x <= 10^(2^10).
+    List<BigInteger> powersOf10 = new ArrayList<BigInteger>(10);
+    BigInteger powerOf10 = BigInteger.TEN;
+    while (x.compareTo(powerOf10) >= 0) {
+      powersOf10.add(powerOf10);
+      powerOf10 = powerOf10.pow(2);
+    }
+    BigInteger floorPow = BigInteger.ONE;
+    int floorLog = 0;
+    for (int i = powersOf10.size() - 1; i >= 0; i--) {
+      BigInteger powOf10 = powersOf10.get(i);
+      floorLog *= 2;
+      BigInteger tenPow = powOf10.multiply(floorPow);
+      if (x.compareTo(tenPow) >= 0) {
+        floorPow = tenPow;
+        floorLog++;
+      }
+    }
+    switch (mode) {
+      case UNNECESSARY:
+        checkRoundingUnnecessary(floorPow.equals(x));
+        // fall through
+      case FLOOR:
+      case DOWN:
+        return floorLog;
+
+      case CEILING:
+      case UP:
+        return floorPow.equals(x) ? floorLog : floorLog + 1;
+
+      case HALF_DOWN:
+      case HALF_UP:
+      case HALF_EVEN:
+        // Since sqrt(10) is irrational, log10(x) - floorLog can never be exactly 0.5
+        BigInteger x2 = x.pow(2);
+        BigInteger halfPowerSquared = floorPow.pow(2).multiply(BigInteger.TEN);
+        return (x2.compareTo(halfPowerSquared) <= 0) ? floorLog : floorLog + 1;
+      default:
+        throw new AssertionError();
+    }
+  }
+
+  /**
+   * Returns the square root of {@code x}, rounded with the specified rounding mode.
+   *
+   * @throws IllegalArgumentException if {@code x < 0}
+   * @throws ArithmeticException if {@code mode} is {@link RoundingMode#UNNECESSARY} and
+   *         {@code sqrt(x)} is not an integer
+   */
+  @SuppressWarnings("fallthrough")
+  public static BigInteger sqrt(BigInteger x, RoundingMode mode) {
+    checkNonNegative("x", x);
+    if (fitsInLong(x)) {
+      return BigInteger.valueOf(LongMath.sqrt(x.longValue(), mode));
+    }
+    BigInteger sqrtFloor = sqrtFloor(x);
+    switch (mode) {
+      case UNNECESSARY:
+        checkRoundingUnnecessary(sqrtFloor.pow(2).equals(x)); // fall through
+      case FLOOR:
+      case DOWN:
+        return sqrtFloor;
+      case CEILING:
+      case UP:
+        return sqrtFloor.pow(2).equals(x) ? sqrtFloor : sqrtFloor.add(BigInteger.ONE);
+      case HALF_DOWN:
+      case HALF_UP:
+      case HALF_EVEN:
+        BigInteger halfSquare = sqrtFloor.pow(2).add(sqrtFloor);
+        /*
+         * We wish to test whether or not x <= (sqrtFloor + 0.5)^2 = halfSquare + 0.25. Since both
+         * x and halfSquare are integers, this is equivalent to testing whether or not x <=
+         * halfSquare.
+         */
+        return (halfSquare.compareTo(x) >= 0) ? sqrtFloor : sqrtFloor.add(BigInteger.ONE);
+      default:
+        throw new AssertionError();
+    }
+  }
+
+  private static BigInteger sqrtFloor(BigInteger x) {
+    /*
+     * Adapted from Hacker's Delight, Figure 11-1.
+     *
+     * Using DoubleUtils.bigToDouble, getting a double approximation of x is extremely fast, and
+     * then we can get a double approximation of the square root. Then, we iteratively improve this
+     * guess with an application of Newton's method, which sets guess := (guess + (x / guess)) / 2.
+     * This iteration has the following two properties:
+     *
+     * a) every iteration (except potentially the first) has guess >= floor(sqrt(x)). This is
+     * because guess' is the arithmetic mean of guess and x / guess, sqrt(x) is the geometric mean,
+     * and the arithmetic mean is always higher than the geometric mean.
+     *
+     * b) this iteration converges to floor(sqrt(x)). In fact, the number of correct digits doubles
+     * with each iteration, so this algorithm takes O(log(digits)) iterations.
+     *
+     * We start out with a double-precision approximation, which may be higher or lower than the
+     * true value. Therefore, we perform at least one Newton iteration to get a guess that's
+     * definitely >= floor(sqrt(x)), and then continue the iteration until we reach a fixed point.
+     */
+    BigInteger sqrt0;
+    int log2 = log2(x, FLOOR);
+    if(log2 < DoubleUtils.MAX_DOUBLE_EXPONENT) {
+      sqrt0 = sqrtApproxWithDoubles(x);
+    } else {
+      int shift = (log2 - DoubleUtils.SIGNIFICAND_BITS) & ~1; // even!
+      /*
+       * We have that x / 2^shift < 2^54. Our initial approximation to sqrtFloor(x) will be
+       * 2^(shift/2) * sqrtApproxWithDoubles(x / 2^shift).
+       */
+      sqrt0 = sqrtApproxWithDoubles(x.shiftRight(shift)).shiftLeft(shift >> 1);
+    }
+    BigInteger sqrt1 = sqrt0.add(x.divide(sqrt0)).shiftRight(1);
+    if (sqrt0.equals(sqrt1)) {
+      return sqrt0;
+    }
+    do {
+      sqrt0 = sqrt1;
+      sqrt1 = sqrt0.add(x.divide(sqrt0)).shiftRight(1);
+    } while (sqrt1.compareTo(sqrt0) < 0);
+    return sqrt0;
+  }
+
+  private static BigInteger sqrtApproxWithDoubles(BigInteger x) {
+    return DoubleMath.roundToBigInteger(Math.sqrt(DoubleUtils.bigToDouble(x)), HALF_EVEN);
+  }
+
+  /**
+   * Returns the result of dividing {@code p} by {@code q}, rounding using the specified
+   * {@code RoundingMode}.
+   *
+   * @throws ArithmeticException if {@code q == 0}, or if {@code mode == UNNECESSARY} and {@code a}
+   *         is not an integer multiple of {@code b}
+   */
+  public static BigInteger divide(BigInteger p, BigInteger q, RoundingMode mode){
+    BigDecimal pDec = new BigDecimal(p);
+    BigDecimal qDec = new BigDecimal(q);
+    return pDec.divide(qDec, 0, mode).toBigIntegerExact();
+  }
+
+  /**
+   * Returns {@code n!}, that is, the product of the first {@code n} positive
+   * integers, or {@code 1} if {@code n == 0}.
+   *
+   * <p><b>Warning</b>: the result takes <i>O(n log n)</i> space, so use cautiously.
+   *
+   * <p>This uses an efficient binary recursive algorithm to compute the factorial
+   * with balanced multiplies.  It also removes all the 2s from the intermediate
+   * products (shifting them back in at the end).
+   *
+   * @throws IllegalArgumentException if {@code n < 0}
+   */
+  public static BigInteger factorial(int n) {
+    checkNonNegative("n", n);
+
+    // If the factorial is small enough, just use LongMath to do it.
+    if (n < LongMath.FACTORIALS.length) {
+      return BigInteger.valueOf(LongMath.FACTORIALS[n]);
+    }
+
+    // Pre-allocate space for our list of intermediate BigIntegers.
+    int approxSize = IntMath.divide(n * IntMath.log2(n, CEILING), Long.SIZE, CEILING);
+    ArrayList<BigInteger> bignums = new ArrayList<BigInteger>(approxSize);
+
+    // Start from the pre-computed maximum long factorial.
+    int startingNumber = LongMath.FACTORIALS.length;
+    long product = LongMath.FACTORIALS[startingNumber - 1];
+    // Strip off 2s from this value.
+    int shift = Long.numberOfTrailingZeros(product);
+    product >>= shift;
+
+    // Use floor(log2(num)) + 1 to prevent overflow of multiplication.
+    int productBits = LongMath.log2(product, FLOOR) + 1;
+    int bits = LongMath.log2(startingNumber, FLOOR) + 1;
+    // Check for the next power of two boundary, to save us a CLZ operation.
+    int nextPowerOfTwo = 1 << (bits - 1);
+
+    // Iteratively multiply the longs as big as they can go.
+    for (long num = startingNumber; num <= n; num++) {
+      // Check to see if the floor(log2(num)) + 1 has changed.
+      if ((num & nextPowerOfTwo) != 0) {
+        nextPowerOfTwo <<= 1;
+        bits++;
+      }
+      // Get rid of the 2s in num.
+      int tz = Long.numberOfTrailingZeros(num);
+      long normalizedNum = num >> tz;
+      shift += tz;
+      // Adjust floor(log2(num)) + 1.
+      int normalizedBits = bits - tz;
+      // If it won't fit in a long, then we store off the intermediate product.
+      if (normalizedBits + productBits >= Long.SIZE) {
+        bignums.add(BigInteger.valueOf(product));
+        product = 1;
+        productBits = 0;
+      }
+      product *= normalizedNum;
+      productBits = LongMath.log2(product, FLOOR) + 1;
+    }
+    // Check for leftovers.
+    if (product > 1) {
+      bignums.add(BigInteger.valueOf(product));
+    }
+    // Efficiently multiply all the intermediate products together.
+    return listProduct(bignums).shiftLeft(shift);
+  }
+
+  static BigInteger listProduct(List<BigInteger> nums) {
+    return listProduct(nums, 0, nums.size());
+  }
+
+  static BigInteger listProduct(List<BigInteger> nums, int start, int end) {
+    switch (end - start) {
+      case 0:
+        return BigInteger.ONE;
+      case 1:
+        return nums.get(start);
+      case 2:
+        return nums.get(start).multiply(nums.get(start + 1));
+      case 3:
+        return nums.get(start).multiply(nums.get(start + 1)).multiply(nums.get(start + 2));
+      default:
+        // Otherwise, split the list in half and recursively do this.
+        int m = (end + start) >>> 1;
+        return listProduct(nums, start, m).multiply(listProduct(nums, m, end));
+    }
+  }
+
+ /**
+   * Returns {@code n} choose {@code k}, also known as the binomial coefficient of {@code n} and
+   * {@code k}, that is, {@code n! / (k! (n - k)!)}.
+   *
+   * <p><b>Warning</b>: the result can take as much as <i>O(k log n)</i> space.
+   *
+   * @throws IllegalArgumentException if {@code n < 0}, {@code k < 0}, or {@code k > n}
+   */
+  public static BigInteger binomial(int n, int k) {
+    checkNonNegative("n", n);
+    checkNonNegative("k", k);
+    checkArgument(k <= n, "k (%s) > n (%s)", k, n);
+    if (k > (n >> 1)) {
+      k = n - k;
+    }
+    if (k < LongMath.BIGGEST_BINOMIALS.length && n <= LongMath.BIGGEST_BINOMIALS[k]) {
+      return BigInteger.valueOf(LongMath.binomial(n, k));
+    }
+    BigInteger result = BigInteger.ONE;
+    for (int i = 0; i < k; i++) {
+      result = result.multiply(BigInteger.valueOf(n - i));
+      result = result.divide(BigInteger.valueOf(i + 1));
+    }
+    return result;
+  }
+
+  // Returns true if BigInteger.valueOf(x.longValue()).equals(x).
+  static boolean fitsInLong(BigInteger x) {
+    return x.bitLength() <= Long.SIZE - 1;
+  }
+
+  private BigIntegerMath() {}
+}
diff --git a/guava/src/com/google/common/math/DoubleMath.java b/guava/src/com/google/common/math/DoubleMath.java
new file mode 100644
index 0000000..35365a7
--- /dev/null
+++ b/guava/src/com/google/common/math/DoubleMath.java
@@ -0,0 +1,302 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.math;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.math.DoubleUtils.IMPLICIT_BIT;
+import static com.google.common.math.DoubleUtils.SIGNIFICAND_BITS;
+import static com.google.common.math.DoubleUtils.getExponent;
+import static com.google.common.math.DoubleUtils.getSignificand;
+import static com.google.common.math.DoubleUtils.isFinite;
+import static com.google.common.math.DoubleUtils.isNormal;
+import static com.google.common.math.DoubleUtils.next;
+import static com.google.common.math.DoubleUtils.scaleNormalize;
+import static com.google.common.math.MathPreconditions.checkInRange;
+import static com.google.common.math.MathPreconditions.checkNonNegative;
+import static com.google.common.math.MathPreconditions.checkRoundingUnnecessary;
+
+import java.math.BigInteger;
+import java.math.RoundingMode;
+
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.annotations.Beta;
+
+/**
+ * A class for arithmetic on doubles that is not covered by {@link java.lang.Math}.
+ *
+ * @author Louis Wasserman
+ * @since 11.0
+ */
+@Beta
+public final class DoubleMath {
+  /*
+   * This method returns a value y such that rounding y DOWN (towards zero) gives the same result
+   * as rounding x according to the specified mode.
+   */
+  static double roundIntermediate(double x, RoundingMode mode) {
+    if (!isFinite(x)) {
+      throw new ArithmeticException("input is infinite or NaN");
+    }
+    switch (mode) {
+      case UNNECESSARY:
+        checkRoundingUnnecessary(isMathematicalInteger(x));
+        return x;
+
+      case FLOOR:
+        return (x >= 0.0) ? x : Math.floor(x);
+
+      case CEILING:
+        return (x >= 0.0) ? Math.ceil(x) : x;
+
+      case DOWN:
+        return x;
+
+      case UP:
+        return (x >= 0.0) ? Math.ceil(x) : Math.floor(x);
+
+      case HALF_EVEN:
+        return Math.rint(x);
+
+      case HALF_UP:
+        if (isMathematicalInteger(x)) {
+          return x;
+        } else {
+          return (x >= 0.0) ? x + 0.5 : x - 0.5;
+        }
+
+      case HALF_DOWN:
+        if (isMathematicalInteger(x)) {
+          return x;
+        } else if (x >= 0.0) {
+          double z = x + 0.5;
+          return (z == x) ? x : next(z, false); // x + 0.5 - epsilon
+        } else {
+          double z = x - 0.5;
+          return (z == x) ? x : next(z, true); // x - 0.5 + epsilon
+        }
+
+      default:
+        throw new AssertionError();
+    }
+  }
+  
+  /**
+   * Returns the {@code int} value that is equal to {@code x} rounded with the specified rounding
+   * mode, if possible.
+   *
+   * @throws ArithmeticException if
+   *         <ul>
+   *         <li>{@code x} is infinite or NaN
+   *         <li>{@code x}, after being rounded to a mathematical integer using the specified
+   *         rounding mode, is either less than {@code Integer.MIN_VALUE} or greater than {@code
+   *         Integer.MAX_VALUE}
+   *         <li>{@code x} is not a mathematical integer and {@code mode} is
+   *         {@link RoundingMode#UNNECESSARY}
+   *         </ul>
+   */
+  public static int roundToInt(double x, RoundingMode mode) {
+    double z = roundIntermediate(x, mode);
+    checkInRange(z > MIN_INT_AS_DOUBLE - 1.0 & z < MAX_INT_AS_DOUBLE + 1.0);
+    return (int) z;
+  }
+
+  private static final double MIN_INT_AS_DOUBLE = -0x1p31;
+  private static final double MAX_INT_AS_DOUBLE = 0x1p31 - 1.0;
+
+  /**
+   * Returns the {@code long} value that is equal to {@code x} rounded with the specified rounding
+   * mode, if possible.
+   *
+   * @throws ArithmeticException if
+   *         <ul>
+   *         <li>{@code x} is infinite or NaN
+   *         <li>{@code x}, after being rounded to a mathematical integer using the specified
+   *         rounding mode, is either less than {@code Long.MIN_VALUE} or greater than {@code
+   *         Long.MAX_VALUE}
+   *         <li>{@code x} is not a mathematical integer and {@code mode} is
+   *         {@link RoundingMode#UNNECESSARY}
+   *         </ul>
+   */
+  public static long roundToLong(double x, RoundingMode mode) {
+    double z = roundIntermediate(x, mode);
+    checkInRange(MIN_LONG_AS_DOUBLE - z < 1.0 & z < MAX_LONG_AS_DOUBLE_PLUS_ONE);
+    return (long) z;
+  }
+
+  private static final double MIN_LONG_AS_DOUBLE = -0x1p63;
+  /*
+   * We cannot store Long.MAX_VALUE as a double without losing precision.  Instead, we store
+   * Long.MAX_VALUE + 1 == -Long.MIN_VALUE, and then offset all comparisons by 1.
+   */
+  private static final double MAX_LONG_AS_DOUBLE_PLUS_ONE = 0x1p63;
+
+  /**
+   * Returns the {@code BigInteger} value that is equal to {@code x} rounded with the specified
+   * rounding mode, if possible.
+   *
+   * @throws ArithmeticException if
+   *         <ul>
+   *         <li>{@code x} is infinite or NaN
+   *         <li>{@code x} is not a mathematical integer and {@code mode} is
+   *         {@link RoundingMode#UNNECESSARY}
+   *         </ul>
+   */
+  public static BigInteger roundToBigInteger(double x, RoundingMode mode) {
+    x = roundIntermediate(x, mode);
+    if (MIN_LONG_AS_DOUBLE - x < 1.0 & x < MAX_LONG_AS_DOUBLE_PLUS_ONE) {
+      return BigInteger.valueOf((long) x);
+    }
+    int exponent = getExponent(x);
+    if (exponent < 0) {
+      return BigInteger.ZERO;
+    }
+    long significand = getSignificand(x);
+    BigInteger result = BigInteger.valueOf(significand).shiftLeft(exponent - SIGNIFICAND_BITS);
+    return (x < 0) ? result.negate() : result;
+  }
+
+  /**
+   * Returns {@code true} if {@code x} is exactly equal to {@code 2^k} for some finite integer
+   * {@code k}.
+   */
+  public static boolean isPowerOfTwo(double x) {
+    return x > 0.0 && isFinite(x) && LongMath.isPowerOfTwo(getSignificand(x));
+  }
+
+  /**
+   * Returns the base 2 logarithm of a double value.
+   *
+   * <p>Special cases:
+   * <ul>
+   * <li>If {@code x} is NaN or less than zero, the result is NaN.
+   * <li>If {@code x} is positive infinity, the result is positive infinity.
+   * <li>If {@code x} is positive or negative zero, the result is negative infinity.
+   * </ul>
+   *
+   * <p>The computed result must be within 1 ulp of the exact result.
+   *
+   * <p>If the result of this method will be immediately rounded to an {@code int},
+   * {@link #log2(double, RoundingMode)} is faster.
+   */
+  public static double log2(double x) {
+    return Math.log(x) / LN_2; // surprisingly within 1 ulp according to tests
+  }
+
+  private static final double LN_2 = Math.log(2);
+
+  /**
+   * Returns the base 2 logarithm of a double value, rounded with the specified rounding mode to an
+   * {@code int}.
+   *
+   * <p>Regardless of the rounding mode, this is faster than {@code (int) log2(x)}.
+   *
+   * @throws IllegalArgumentException if {@code x <= 0.0}, {@code x} is NaN, or {@code x} is
+   *         infinite
+   */
+  @SuppressWarnings("fallthrough")
+  public static int log2(double x, RoundingMode mode) {
+    checkArgument(x > 0.0 && isFinite(x), "x must be positive and finite");
+    int exponent = getExponent(x);
+    if (!isNormal(x)) {
+      return log2(x * IMPLICIT_BIT, mode) - SIGNIFICAND_BITS;
+      // Do the calculation on a normal value.
+    }
+    // x is positive, finite, and normal
+    boolean increment;
+    switch (mode) {
+      case UNNECESSARY:
+        checkRoundingUnnecessary(isPowerOfTwo(x));
+        // fall through
+      case FLOOR:
+        increment = false;
+        break;
+      case CEILING:
+        increment = !isPowerOfTwo(x);
+        break;
+      case DOWN:
+        increment = exponent < 0 & !isPowerOfTwo(x);
+        break;
+      case UP:
+        increment = exponent >= 0 & !isPowerOfTwo(x);
+        break;
+      case HALF_DOWN:
+      case HALF_EVEN:
+      case HALF_UP:
+        double xScaled = scaleNormalize(x);
+        // sqrt(2) is irrational, and the spec is relative to the "exact numerical result,"
+        // so log2(x) is never exactly exponent + 0.5.
+        increment = (xScaled * xScaled) > 2.0;
+        break;
+      default:
+        throw new AssertionError();
+    }
+    return increment ? exponent + 1 : exponent;
+  }
+
+  /**
+   * Returns {@code true} if {@code x} represents a mathematical integer.
+   * 
+   * <p>This is equivalent to, but not necessarily implemented as, the expression {@code
+   * !Double.isNaN(x) && !Double.isInfinite(x) && x == Math.rint(x)}.
+   */
+  public static boolean isMathematicalInteger(double x) {
+    return isFinite(x)
+        && (x == 0.0 || SIGNIFICAND_BITS
+            - Long.numberOfTrailingZeros(getSignificand(x)) <= getExponent(x));
+  }
+
+  /**
+   * Returns {@code n!}, that is, the product of the first {@code n} positive
+   * integers, {@code 1} if {@code n == 0}, or e n!}, or
+   * {@link Double#POSITIVE_INFINITY} if {@code n! > Double.MAX_VALUE}.
+   *
+   * <p>The result is within 1 ulp of the true value.
+   *
+   * @throws IllegalArgumentException if {@code n < 0}
+   */
+  public static double factorial(int n) {
+    checkNonNegative("n", n);
+    if (n > MAX_FACTORIAL) {
+      return Double.POSITIVE_INFINITY;
+    } else {
+      // Multiplying the last (n & 0xf) values into their own accumulator gives a more accurate
+      // result than multiplying by EVERY_SIXTEENTH_FACTORIAL[n >> 4] directly.
+      double accum = 1.0;
+      for (int i = 1 + (n & ~0xf); i <= n; i++) {
+        accum *= i;
+      }
+      return accum * EVERY_SIXTEENTH_FACTORIAL[n >> 4];
+    }
+  }
+
+  @VisibleForTesting
+  static final int MAX_FACTORIAL = 170;
+
+  @VisibleForTesting
+  static final double[] EVERY_SIXTEENTH_FACTORIAL = {
+      0x1.0p0,
+      0x1.30777758p44,
+      0x1.956ad0aae33a4p117,
+      0x1.ee69a78d72cb6p202,
+      0x1.fe478ee34844ap295,
+      0x1.c619094edabffp394,
+      0x1.3638dd7bd6347p498,
+      0x1.7cac197cfe503p605,
+      0x1.1e5dfc140e1e5p716,
+      0x1.8ce85fadb707ep829,
+      0x1.95d5f3d928edep945};
+}
diff --git a/guava/src/com/google/common/math/DoubleUtils.java b/guava/src/com/google/common/math/DoubleUtils.java
new file mode 100644
index 0000000..5a6fb3e
--- /dev/null
+++ b/guava/src/com/google/common/math/DoubleUtils.java
@@ -0,0 +1,181 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.math;
+
+import static com.google.common.base.Preconditions.checkArgument;
+
+import java.math.BigInteger;
+
+import com.google.common.annotations.VisibleForTesting;
+
+/**
+ * Utilities for {@code double} primitives. Some of these are exposed in JDK 6,
+ * but we can't depend on them there.
+ *
+ * @author Louis Wasserman
+ */
+final class DoubleUtils {
+  // TODO(user): replace with appropriate calls when we move to JDK 6
+
+  private DoubleUtils() {
+  }
+
+  static double next(double x, boolean up) {
+    // Math.nextAfter is JDK 6.
+    if (x == 0.0) {
+      return up ? Double.MIN_VALUE : -Double.MIN_VALUE;
+    }
+    long bits = Double.doubleToRawLongBits(x);
+    if ((x < 0.0) == up) {
+      bits--;
+    } else {
+      bits++;
+    }
+    return Double.longBitsToDouble(bits);
+  }
+
+  // The mask for the significand, according to the {@link
+  // Double#doubleToRawLongBits(double)} spec.
+  static final long SIGNIFICAND_MASK = 0x000fffffffffffffL;
+
+  // The mask for the exponent, according to the {@link
+  // Double#doubleToRawLongBits(double)} spec.
+  static final long EXPONENT_MASK = 0x7ff0000000000000L;
+
+  // The mask for the sign, according to the {@link
+  // Double#doubleToRawLongBits(double)} spec.
+  static final long SIGN_MASK = 0x8000000000000000L;
+
+  static final int SIGNIFICAND_BITS = 52;
+
+  static final int EXPONENT_BIAS = 1023;
+
+  static final int MIN_DOUBLE_EXPONENT = -1022;
+
+  static final int MAX_DOUBLE_EXPONENT = 1023;
+
+  /**
+   * The implicit 1 bit that is omitted in significands of normal doubles.
+   */
+  static final long IMPLICIT_BIT = SIGNIFICAND_MASK + 1;
+
+  @VisibleForTesting
+  static int getExponent(double d) {
+    // TODO: replace with Math.getExponent in JDK 6
+    long bits = Double.doubleToRawLongBits(d);
+    int exponent = (int) ((bits & EXPONENT_MASK) >> SIGNIFICAND_BITS);
+    exponent -= EXPONENT_BIAS;
+    return exponent;
+  }
+
+  /**
+   * Returns {@code d * 2^scale}.
+   */
+  static strictfp double scalb(double d, int scale) {
+    // TODO: replace with Math.scalb in JDK 6
+    int exponent = getExponent(d);
+    switch (exponent) {
+      case MAX_DOUBLE_EXPONENT + 1: // NaN, infinity
+        return d;
+      case MIN_DOUBLE_EXPONENT - 1:
+        return d * StrictMath.pow(2.0, scale);
+      default:
+        int newExponent = exponent + scale;
+        if (MIN_DOUBLE_EXPONENT <= newExponent
+            & newExponent <= MAX_DOUBLE_EXPONENT) {
+          long bits = Double.doubleToRawLongBits(d);
+          bits &= ~EXPONENT_MASK;
+          bits |= ((long) (newExponent + EXPONENT_BIAS)) << SIGNIFICAND_BITS;
+          return Double.longBitsToDouble(bits);
+        }
+        return d * StrictMath.pow(2.0, scale);
+    }
+  }
+
+  static long getSignificand(double d) {
+    checkArgument(isFinite(d), "not a normal value");
+    int exponent = getExponent(d);
+    long bits = Double.doubleToRawLongBits(d);
+    bits &= SIGNIFICAND_MASK;
+    return (exponent == MIN_DOUBLE_EXPONENT - 1)
+        ? bits << 1
+        : bits | IMPLICIT_BIT;
+  }
+
+  static boolean isFinite(double d) {
+    return getExponent(d) <= MAX_DOUBLE_EXPONENT;
+  }
+
+  static boolean isNormal(double d) {
+    return getExponent(d) >= MIN_DOUBLE_EXPONENT;
+  }
+
+  /*
+   * Returns x scaled by a power of 2 such that it is in the range [1, 2). Assumes x is positive,
+   * normal, and finite.
+   */
+  static double scaleNormalize(double x) {
+    long significand = Double.doubleToRawLongBits(x) & SIGNIFICAND_MASK;
+    return Double.longBitsToDouble(significand | ONE_BITS);
+  }
+
+  static double bigToDouble(BigInteger x) {
+    // This is an extremely fast implementation of BigInteger.doubleValue().  JDK patch pending.
+    BigInteger absX = x.abs();
+    int exponent = absX.bitLength() - 1;
+    // exponent == floor(log2(abs(x)))
+    if (exponent < Long.SIZE - 1) {
+      return x.longValue();
+    } else if (exponent > MAX_DOUBLE_EXPONENT) {
+      return x.signum() * Double.POSITIVE_INFINITY;
+    }
+
+    /*
+     * We need the top SIGNIFICAND_BITS + 1 bits, including the "implicit" one bit. To make
+     * rounding easier, we pick out the top SIGNIFICAND_BITS + 2 bits, so we have one to help us
+     * round up or down. twiceSignifFloor will contain the top SIGNIFICAND_BITS + 2 bits, and
+     * signifFloor the top SIGNIFICAND_BITS + 1.
+     *
+     * It helps to consider the real number signif = absX * 2^(SIGNIFICAND_BITS - exponent).
+     */
+    int shift = exponent - SIGNIFICAND_BITS - 1;
+    long twiceSignifFloor = absX.shiftRight(shift).longValue();
+    long signifFloor = twiceSignifFloor >> 1;
+    signifFloor &= SIGNIFICAND_MASK; // remove the implied bit
+
+    /*
+     * We round up if either the fractional part of signif is strictly greater than 0.5 (which is
+     * true if the 0.5 bit is set and any lower bit is set), or if the fractional part of signif is
+     * >= 0.5 and signifFloor is odd (which is true if both the 0.5 bit and the 1 bit are set).
+     */
+    boolean increment = (twiceSignifFloor & 1) != 0
+        && ((signifFloor & 1) != 0 || absX.getLowestSetBit() < shift);
+    long signifRounded = increment ? signifFloor + 1 : signifFloor;
+    long bits = (long) ((exponent + EXPONENT_BIAS)) << SIGNIFICAND_BITS;
+    bits += signifRounded;
+    /*
+     * If signifRounded == 2^53, we'd need to set all of the significand bits to zero and add 1 to
+     * the exponent. This is exactly the behavior we get from just adding signifRounded to bits
+     * directly.  If the exponent is MAX_DOUBLE_EXPONENT, we round up (correctly) to
+     * Double.POSITIVE_INFINITY.
+     */
+    bits |= x.signum() & SIGN_MASK;
+    return Double.longBitsToDouble(bits);
+  }
+
+  private static final long ONE_BITS = Double.doubleToRawLongBits(1.0);
+}
diff --git a/guava/src/com/google/common/math/IntMath.java b/guava/src/com/google/common/math/IntMath.java
new file mode 100644
index 0000000..8fc7cd8
--- /dev/null
+++ b/guava/src/com/google/common/math/IntMath.java
@@ -0,0 +1,512 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.math;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.math.MathPreconditions.checkNoOverflow;
+import static com.google.common.math.MathPreconditions.checkNonNegative;
+import static com.google.common.math.MathPreconditions.checkPositive;
+import static com.google.common.math.MathPreconditions.checkRoundingUnnecessary;
+import static java.lang.Math.abs;
+import static java.math.RoundingMode.HALF_EVEN;
+import static java.math.RoundingMode.HALF_UP;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+import com.google.common.annotations.VisibleForTesting;
+
+import java.math.BigInteger;
+import java.math.RoundingMode;
+
+/**
+ * A class for arithmetic on values of type {@code int}. Where possible, methods are defined and
+ * named analogously to their {@code BigInteger} counterparts.
+ *
+ * <p>The implementations of many methods in this class are based on material from Henry S. Warren,
+ * Jr.'s <i>Hacker's Delight</i>, (Addison Wesley, 2002).
+ *
+ * <p>Similar functionality for {@code long} and for {@link BigInteger} can be found in
+ * {@link LongMath} and {@link BigIntegerMath} respectively.  For other common operations on
+ * {@code int} values, see {@link com.google.common.primitives.Ints}.
+ *
+ * @author Louis Wasserman
+ * @since 11.0
+ */
+@Beta
+@GwtCompatible(emulated = true)
+public final class IntMath {
+  // NOTE: Whenever both tests are cheap and functional, it's faster to use &, | instead of &&, ||
+
+  /**
+   * Returns {@code true} if {@code x} represents a power of two.
+   *
+   * <p>This differs from {@code Integer.bitCount(x) == 1}, because
+   * {@code Integer.bitCount(Integer.MIN_VALUE) == 1}, but {@link Integer#MIN_VALUE} is not a power
+   * of two.
+   */
+  public static boolean isPowerOfTwo(int x) {
+    return x > 0 & (x & (x - 1)) == 0;
+  }
+
+  /**
+   * Returns the base-2 logarithm of {@code x}, rounded according to the specified rounding mode.
+   *
+   * @throws IllegalArgumentException if {@code x <= 0}
+   * @throws ArithmeticException if {@code mode} is {@link RoundingMode#UNNECESSARY} and {@code x}
+   *         is not a power of two
+   */
+  @GwtIncompatible("need BigIntegerMath to adequately test")
+  @SuppressWarnings("fallthrough")
+  public static int log2(int x, RoundingMode mode) {
+    checkPositive("x", x);
+    switch (mode) {
+      case UNNECESSARY:
+        checkRoundingUnnecessary(isPowerOfTwo(x));
+        // fall through
+      case DOWN:
+      case FLOOR:
+        return (Integer.SIZE - 1) - Integer.numberOfLeadingZeros(x);
+
+      case UP:
+      case CEILING:
+        return Integer.SIZE - Integer.numberOfLeadingZeros(x - 1);
+
+      case HALF_DOWN:
+      case HALF_UP:
+      case HALF_EVEN:
+        // Since sqrt(2) is irrational, log2(x) - logFloor cannot be exactly 0.5
+        int leadingZeros = Integer.numberOfLeadingZeros(x);
+        int cmp = MAX_POWER_OF_SQRT2_UNSIGNED >>> leadingZeros;
+          // floor(2^(logFloor + 0.5))
+        int logFloor = (Integer.SIZE - 1) - leadingZeros;
+        return (x <= cmp) ? logFloor : logFloor + 1;
+
+      default:
+        throw new AssertionError();
+    }
+  }
+
+  /** The biggest half power of two that can fit in an unsigned int. */
+  @VisibleForTesting static final int MAX_POWER_OF_SQRT2_UNSIGNED = 0xB504F333;
+
+  /**
+   * Returns the base-10 logarithm of {@code x}, rounded according to the specified rounding mode.
+   *
+   * @throws IllegalArgumentException if {@code x <= 0}
+   * @throws ArithmeticException if {@code mode} is {@link RoundingMode#UNNECESSARY} and {@code x}
+   *         is not a power of ten
+   */
+  @GwtIncompatible("need BigIntegerMath to adequately test")
+  @SuppressWarnings("fallthrough")
+  public static int log10(int x, RoundingMode mode) {
+    checkPositive("x", x);
+    int logFloor = log10Floor(x);
+    int floorPow = POWERS_OF_10[logFloor];
+    switch (mode) {
+      case UNNECESSARY:
+        checkRoundingUnnecessary(x == floorPow);
+        // fall through
+      case FLOOR:
+      case DOWN:
+        return logFloor;
+      case CEILING:
+      case UP:
+        return (x == floorPow) ? logFloor : logFloor + 1;
+      case HALF_DOWN:
+      case HALF_UP:
+      case HALF_EVEN:
+        // sqrt(10) is irrational, so log10(x) - logFloor is never exactly 0.5
+        return (x <= HALF_POWERS_OF_10[logFloor]) ? logFloor : logFloor + 1;
+      default:
+        throw new AssertionError();
+    }
+  }
+
+  private static int log10Floor(int x) {
+    for (int i = 1; i < POWERS_OF_10.length; i++) {
+      if (x < POWERS_OF_10[i]) {
+        return i - 1;
+      }
+    }
+    return POWERS_OF_10.length - 1;
+  }
+
+  @VisibleForTesting static final int[] POWERS_OF_10 =
+      {1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000};
+
+  // HALF_POWERS_OF_10[i] = largest int less than 10^(i + 0.5)
+  @VisibleForTesting static final int[] HALF_POWERS_OF_10 =
+      {3, 31, 316, 3162, 31622, 316227, 3162277, 31622776, 316227766, Integer.MAX_VALUE};
+
+  /**
+   * Returns {@code b} to the {@code k}th power. Even if the result overflows, it will be equal to
+   * {@code BigInteger.valueOf(b).pow(k).intValue()}. This implementation runs in {@code O(log k)}
+   * time.
+   *
+   * <p>Compare {@link #checkedPow}, which throws an {@link ArithmeticException} upon overflow.
+   *
+   * @throws IllegalArgumentException if {@code k < 0}
+   */
+  @GwtIncompatible("failing tests")
+  public static int pow(int b, int k) {
+    checkNonNegative("exponent", k);
+    switch (b) {
+      case 0:
+        return (k == 0) ? 1 : 0;
+      case 1:
+        return 1;
+      case (-1):
+        return ((k & 1) == 0) ? 1 : -1;
+      case 2:
+        return (k < Integer.SIZE) ? (1 << k) : 0;
+      case (-2):
+        if (k < Integer.SIZE) {
+          return ((k & 1) == 0) ? (1 << k) : -(1 << k);
+        } else {
+          return 0;
+        }
+    }
+    for (int accum = 1;; k >>= 1) {
+      switch (k) {
+        case 0:
+          return accum;
+        case 1:
+          return b * accum;
+        default:
+          accum *= ((k & 1) == 0) ? 1 : b;
+          b *= b;
+      }
+    }
+  }
+
+  /**
+   * Returns the square root of {@code x}, rounded with the specified rounding mode.
+   *
+   * @throws IllegalArgumentException if {@code x < 0}
+   * @throws ArithmeticException if {@code mode} is {@link RoundingMode#UNNECESSARY} and
+   *         {@code sqrt(x)} is not an integer
+   */
+  @GwtIncompatible("need BigIntegerMath to adequately test")
+  @SuppressWarnings("fallthrough")
+  public static int sqrt(int x, RoundingMode mode) {
+    checkNonNegative("x", x);
+    int sqrtFloor = sqrtFloor(x);
+    switch (mode) {
+      case UNNECESSARY:
+        checkRoundingUnnecessary(sqrtFloor * sqrtFloor == x); // fall through
+      case FLOOR:
+      case DOWN:
+        return sqrtFloor;
+      case CEILING:
+      case UP:
+        return (sqrtFloor * sqrtFloor == x) ? sqrtFloor : sqrtFloor + 1;
+      case HALF_DOWN:
+      case HALF_UP:
+      case HALF_EVEN:
+        int halfSquare = sqrtFloor * sqrtFloor + sqrtFloor;
+        /*
+         * We wish to test whether or not x <= (sqrtFloor + 0.5)^2 = halfSquare + 0.25.
+         * Since both x and halfSquare are integers, this is equivalent to testing whether or not
+         * x <= halfSquare.  (We have to deal with overflow, though.)
+         */
+        return (x <= halfSquare | halfSquare < 0) ? sqrtFloor : sqrtFloor + 1;
+      default:
+        throw new AssertionError();
+    }
+  }
+
+  private static int sqrtFloor(int x) {
+    // There is no loss of precision in converting an int to a double, according to
+    // http://java.sun.com/docs/books/jls/third_edition/html/conversions.html#5.1.2
+    return (int) Math.sqrt(x);
+  }
+
+  /**
+   * Returns the result of dividing {@code p} by {@code q}, rounding using the specified
+   * {@code RoundingMode}.
+   *
+   * @throws ArithmeticException if {@code q == 0}, or if {@code mode == UNNECESSARY} and {@code a}
+   *         is not an integer multiple of {@code b}
+   */
+  @GwtIncompatible("failing tests")
+  @SuppressWarnings("fallthrough")
+  public static int divide(int p, int q, RoundingMode mode) {
+    checkNotNull(mode);
+    if (q == 0) {
+      throw new ArithmeticException("/ by zero"); // for GWT
+    }
+    int div = p / q;
+    int rem = p - q * div; // equal to p % q
+
+    if (rem == 0) {
+      return div;
+    }
+
+    /*
+     * Normal Java division rounds towards 0, consistently with RoundingMode.DOWN. We just have to
+     * deal with the cases where rounding towards 0 is wrong, which typically depends on the sign of
+     * p / q.
+     *
+     * signum is 1 if p and q are both nonnegative or both negative, and -1 otherwise.
+     */
+    int signum = 1 | ((p ^ q) >> (Integer.SIZE - 1));
+    boolean increment;
+    switch (mode) {
+      case UNNECESSARY:
+        checkRoundingUnnecessary(rem == 0);
+        // fall through
+      case DOWN:
+        increment = false;
+        break;
+      case UP:
+        increment = true;
+        break;
+      case CEILING:
+        increment = signum > 0;
+        break;
+      case FLOOR:
+        increment = signum < 0;
+        break;
+      case HALF_EVEN:
+      case HALF_DOWN:
+      case HALF_UP:
+        int absRem = abs(rem);
+        int cmpRemToHalfDivisor = absRem - (abs(q) - absRem);
+        // subtracting two nonnegative ints can't overflow
+        // cmpRemToHalfDivisor has the same sign as compare(abs(rem), abs(q) / 2).
+        if (cmpRemToHalfDivisor == 0) { // exactly on the half mark
+          increment = (mode == HALF_UP || (mode == HALF_EVEN & (div & 1) != 0));
+        } else {
+          increment = cmpRemToHalfDivisor > 0; // closer to the UP value
+        }
+        break;
+      default:
+        throw new AssertionError();
+    }
+    return increment ? div + signum : div;
+  }
+
+  /**
+   * Returns {@code x mod m}. This differs from {@code x % m} in that it always returns a
+   * non-negative result.
+   *
+   * <p>For example:<pre> {@code
+   *
+   * mod(7, 4) == 3
+   * mod(-7, 4) == 1
+   * mod(-1, 4) == 3
+   * mod(-8, 4) == 0
+   * mod(8, 4) == 0}</pre>
+   *
+   * @throws ArithmeticException if {@code m <= 0}
+   */
+  public static int mod(int x, int m) {
+    if (m <= 0) {
+      throw new ArithmeticException("Modulus " + m + " must be > 0");
+    }
+    int result = x % m;
+    return (result >= 0) ? result : result + m;
+  }
+
+  /**
+   * Returns the greatest common divisor of {@code a, b}. Returns {@code 0} if
+   * {@code a == 0 && b == 0}.
+   *
+   * @throws IllegalArgumentException if {@code a < 0} or {@code b < 0}
+   */
+  public static int gcd(int a, int b) {
+    /*
+     * The reason we require both arguments to be >= 0 is because otherwise, what do you return on
+     * gcd(0, Integer.MIN_VALUE)? BigInteger.gcd would return positive 2^31, but positive 2^31
+     * isn't an int.
+     */
+    checkNonNegative("a", a);
+    checkNonNegative("b", b);
+    // The simple Euclidean algorithm is the fastest for ints, and is easily the most readable.
+    while (b != 0) {
+      int t = b;
+      b = a % b;
+      a = t;
+    }
+    return a;
+  }
+
+  /**
+   * Returns the sum of {@code a} and {@code b}, provided it does not overflow.
+   *
+   * @throws ArithmeticException if {@code a + b} overflows in signed {@code int} arithmetic
+   */
+  public static int checkedAdd(int a, int b) {
+    long result = (long) a + b;
+    checkNoOverflow(result == (int) result);
+    return (int) result;
+  }
+
+  /**
+   * Returns the difference of {@code a} and {@code b}, provided it does not overflow.
+   *
+   * @throws ArithmeticException if {@code a - b} overflows in signed {@code int} arithmetic
+   */
+  public static int checkedSubtract(int a, int b) {
+    long result = (long) a - b;
+    checkNoOverflow(result == (int) result);
+    return (int) result;
+  }
+
+  /**
+   * Returns the product of {@code a} and {@code b}, provided it does not overflow.
+   *
+   * @throws ArithmeticException if {@code a * b} overflows in signed {@code int} arithmetic
+   */
+  public static int checkedMultiply(int a, int b) {
+    long result = (long) a * b;
+    checkNoOverflow(result == (int) result);
+    return (int) result;
+  }
+
+  /**
+   * Returns the {@code b} to the {@code k}th power, provided it does not overflow.
+   *
+   * <p>{@link #pow} may be faster, but does not check for overflow.
+   *
+   * @throws ArithmeticException if {@code b} to the {@code k}th power overflows in signed
+   *         {@code int} arithmetic
+   */
+  @GwtIncompatible("failing tests")
+  public static int checkedPow(int b, int k) {
+    checkNonNegative("exponent", k);
+    switch (b) {
+      case 0:
+        return (k == 0) ? 1 : 0;
+      case 1:
+        return 1;
+      case (-1):
+        return ((k & 1) == 0) ? 1 : -1;
+      case 2:
+        checkNoOverflow(k < Integer.SIZE - 1);
+        return 1 << k;
+      case (-2):
+        checkNoOverflow(k < Integer.SIZE);
+        return ((k & 1) == 0) ? 1 << k : -1 << k;
+    }
+    int accum = 1;
+    while (true) {
+      switch (k) {
+        case 0:
+          return accum;
+        case 1:
+          return checkedMultiply(accum, b);
+        default:
+          if ((k & 1) != 0) {
+            accum = checkedMultiply(accum, b);
+          }
+          k >>= 1;
+          if (k > 0) {
+            checkNoOverflow(-FLOOR_SQRT_MAX_INT <= b & b <= FLOOR_SQRT_MAX_INT);
+            b *= b;
+          }
+      }
+    }
+  }
+
+  @VisibleForTesting static final int FLOOR_SQRT_MAX_INT = 46340;
+
+  /**
+   * Returns {@code n!}, that is, the product of the first {@code n} positive
+   * integers, {@code 1} if {@code n == 0}, or {@link Integer#MAX_VALUE} if the
+   * result does not fit in a {@code int}.
+   *
+   * @throws IllegalArgumentException if {@code n < 0}
+   */
+  @GwtIncompatible("need BigIntegerMath to adequately test")
+  public static int factorial(int n) {
+    checkNonNegative("n", n);
+    return (n < FACTORIALS.length) ? FACTORIALS[n] : Integer.MAX_VALUE;
+  }
+
+  static final int[] FACTORIALS = {
+      1,
+      1,
+      1 * 2,
+      1 * 2 * 3,
+      1 * 2 * 3 * 4,
+      1 * 2 * 3 * 4 * 5,
+      1 * 2 * 3 * 4 * 5 * 6,
+      1 * 2 * 3 * 4 * 5 * 6 * 7,
+      1 * 2 * 3 * 4 * 5 * 6 * 7 * 8,
+      1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9,
+      1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10,
+      1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10 * 11,
+      1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10 * 11 * 12};
+
+  /**
+   * Returns {@code n} choose {@code k}, also known as the binomial coefficient of {@code n} and
+   * {@code k}, or {@link Integer#MAX_VALUE} if the result does not fit in an {@code int}.
+   *
+   * @throws IllegalArgumentException if {@code n < 0}, {@code k < 0} or {@code k > n}
+   */
+  @GwtIncompatible("need BigIntegerMath to adequately test")
+  public static int binomial(int n, int k) {
+    checkNonNegative("n", n);
+    checkNonNegative("k", k);
+    checkArgument(k <= n, "k (%s) > n (%s)", k, n);
+    if (k > (n >> 1)) {
+      k = n - k;
+    }
+    if (k >= BIGGEST_BINOMIALS.length || n > BIGGEST_BINOMIALS[k]) {
+      return Integer.MAX_VALUE;
+    }
+    switch (k) {
+      case 0:
+        return 1;
+      case 1:
+        return n;
+      default:
+        long result = 1;
+        for (int i = 0; i < k; i++) {
+          result *= n - i;
+          result /= i + 1;
+        }
+        return (int) result;
+    }
+  }
+
+  // binomial(BIGGEST_BINOMIALS[k], k) fits in an int, but not binomial(BIGGEST_BINOMIALS[k]+1,k).
+  @VisibleForTesting static int[] BIGGEST_BINOMIALS = {
+    Integer.MAX_VALUE,
+    Integer.MAX_VALUE,
+    65536,
+    2345,
+    477,
+    193,
+    110,
+    75,
+    58,
+    49,
+    43,
+    39,
+    37,
+    35,
+    34,
+    34,
+    33
+  };
+
+  private IntMath() {}
+}
diff --git a/guava/src/com/google/common/math/LongMath.java b/guava/src/com/google/common/math/LongMath.java
new file mode 100644
index 0000000..07bd534
--- /dev/null
+++ b/guava/src/com/google/common/math/LongMath.java
@@ -0,0 +1,624 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.math;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.math.MathPreconditions.checkNoOverflow;
+import static com.google.common.math.MathPreconditions.checkNonNegative;
+import static com.google.common.math.MathPreconditions.checkPositive;
+import static com.google.common.math.MathPreconditions.checkRoundingUnnecessary;
+import static java.lang.Math.abs;
+import static java.lang.Math.min;
+import static java.math.RoundingMode.HALF_EVEN;
+import static java.math.RoundingMode.HALF_UP;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.VisibleForTesting;
+
+import java.math.BigInteger;
+import java.math.RoundingMode;
+
+/**
+ * A class for arithmetic on values of type {@code long}. Where possible, methods are defined and
+ * named analogously to their {@code BigInteger} counterparts.
+ *
+ * <p>The implementations of many methods in this class are based on material from Henry S. Warren,
+ * Jr.'s <i>Hacker's Delight</i>, (Addison Wesley, 2002).
+ *
+ * <p>Similar functionality for {@code int} and for {@link BigInteger} can be found in
+ * {@link IntMath} and {@link BigIntegerMath} respectively.  For other common operations on
+ * {@code long} values, see {@link com.google.common.primitives.Longs}.
+ *
+ * @author Louis Wasserman
+ * @since 11.0
+ */
+@Beta
+public final class LongMath {
+  // NOTE: Whenever both tests are cheap and functional, it's faster to use &, | instead of &&, ||
+
+  /**
+   * Returns {@code true} if {@code x} represents a power of two.
+   *
+   * <p>This differs from {@code Long.bitCount(x) == 1}, because
+   * {@code Long.bitCount(Long.MIN_VALUE) == 1}, but {@link Long#MIN_VALUE} is not a power of two.
+   */
+  public static boolean isPowerOfTwo(long x) {
+    return x > 0 & (x & (x - 1)) == 0;
+  }
+
+  /**
+   * Returns the base-2 logarithm of {@code x}, rounded according to the specified rounding mode.
+   *
+   * @throws IllegalArgumentException if {@code x <= 0}
+   * @throws ArithmeticException if {@code mode} is {@link RoundingMode#UNNECESSARY} and {@code x}
+   *         is not a power of two
+   */
+  @SuppressWarnings("fallthrough")
+  public static int log2(long x, RoundingMode mode) {
+    checkPositive("x", x);
+    switch (mode) {
+      case UNNECESSARY:
+        checkRoundingUnnecessary(isPowerOfTwo(x));
+        // fall through
+      case DOWN:
+      case FLOOR:
+        return (Long.SIZE - 1) - Long.numberOfLeadingZeros(x);
+
+      case UP:
+      case CEILING:
+        return Long.SIZE - Long.numberOfLeadingZeros(x - 1);
+
+      case HALF_DOWN:
+      case HALF_UP:
+      case HALF_EVEN:
+        // Since sqrt(2) is irrational, log2(x) - logFloor cannot be exactly 0.5
+        int leadingZeros = Long.numberOfLeadingZeros(x);
+        long cmp = MAX_POWER_OF_SQRT2_UNSIGNED >>> leadingZeros;
+        // floor(2^(logFloor + 0.5))
+        int logFloor = (Long.SIZE - 1) - leadingZeros;
+        return (x <= cmp) ? logFloor : logFloor + 1;
+
+      default:
+        throw new AssertionError("impossible");
+    }
+  }
+
+  /** The biggest half power of two that fits into an unsigned long */
+  @VisibleForTesting static final long MAX_POWER_OF_SQRT2_UNSIGNED = 0xB504F333F9DE6484L;
+
+  /**
+   * Returns the base-10 logarithm of {@code x}, rounded according to the specified rounding mode.
+   *
+   * @throws IllegalArgumentException if {@code x <= 0}
+   * @throws ArithmeticException if {@code mode} is {@link RoundingMode#UNNECESSARY} and {@code x}
+   *         is not a power of ten
+   */
+  @SuppressWarnings("fallthrough")
+  public static int log10(long x, RoundingMode mode) {
+    checkPositive("x", x);
+    if (fitsInInt(x)) {
+      return IntMath.log10((int) x, mode);
+    }
+    int logFloor = log10Floor(x);
+    long floorPow = POWERS_OF_10[logFloor];
+    switch (mode) {
+      case UNNECESSARY:
+        checkRoundingUnnecessary(x == floorPow);
+        // fall through
+      case FLOOR:
+      case DOWN:
+        return logFloor;
+      case CEILING:
+      case UP:
+        return (x == floorPow) ? logFloor : logFloor + 1;
+      case HALF_DOWN:
+      case HALF_UP:
+      case HALF_EVEN:
+        // sqrt(10) is irrational, so log10(x)-logFloor is never exactly 0.5
+        return (x <= HALF_POWERS_OF_10[logFloor]) ? logFloor : logFloor + 1;
+      default:
+        throw new AssertionError();
+    }
+  }
+
+  static int log10Floor(long x) {
+    for (int i = 1; i < POWERS_OF_10.length; i++) {
+      if (x < POWERS_OF_10[i]) {
+        return i - 1;
+      }
+    }
+    return POWERS_OF_10.length - 1;
+  }
+
+  @VisibleForTesting
+  static final long[] POWERS_OF_10 = {
+    1L,
+    10L,
+    100L,
+    1000L,
+    10000L,
+    100000L,
+    1000000L,
+    10000000L,
+    100000000L,
+    1000000000L,
+    10000000000L,
+    100000000000L,
+    1000000000000L,
+    10000000000000L,
+    100000000000000L,
+    1000000000000000L,
+    10000000000000000L,
+    100000000000000000L,
+    1000000000000000000L
+  };
+
+  // HALF_POWERS_OF_10[i] = largest long less than 10^(i + 0.5)
+  @VisibleForTesting
+  static final long[] HALF_POWERS_OF_10 = {
+    3L,
+    31L,
+    316L,
+    3162L,
+    31622L,
+    316227L,
+    3162277L,
+    31622776L,
+    316227766L,
+    3162277660L,
+    31622776601L,
+    316227766016L,
+    3162277660168L,
+    31622776601683L,
+    316227766016837L,
+    3162277660168379L,
+    31622776601683793L,
+    316227766016837933L,
+    3162277660168379331L
+  };
+
+  /**
+   * Returns {@code b} to the {@code k}th power. Even if the result overflows, it will be equal to
+   * {@code BigInteger.valueOf(b).pow(k).longValue()}. This implementation runs in {@code O(log k)}
+   * time.
+   *
+   * @throws IllegalArgumentException if {@code k < 0}
+   */
+  public static long pow(long b, int k) {
+    checkNonNegative("exponent", k);
+    if (-2 <= b && b <= 2) {
+      switch ((int) b) {
+        case 0:
+          return (k == 0) ? 1 : 0;
+        case 1:
+          return 1;
+        case (-1):
+          return ((k & 1) == 0) ? 1 : -1;
+        case 2:
+          return (k < Long.SIZE) ? 1L << k : 0;
+        case (-2):
+          if (k < Long.SIZE) {
+            return ((k & 1) == 0) ? 1L << k : -(1L << k);
+          } else {
+            return 0;
+          }
+      }
+    }
+    for (long accum = 1;; k >>= 1) {
+      switch (k) {
+        case 0:
+          return accum;
+        case 1:
+          return accum * b;
+        default:
+          accum *= ((k & 1) == 0) ? 1 : b;
+          b *= b;
+      }
+    }
+  }
+
+  /**
+   * Returns the square root of {@code x}, rounded with the specified rounding mode.
+   *
+   * @throws IllegalArgumentException if {@code x < 0}
+   * @throws ArithmeticException if {@code mode} is {@link RoundingMode#UNNECESSARY} and
+   *         {@code sqrt(x)} is not an integer
+   */
+  @SuppressWarnings("fallthrough")
+  public static long sqrt(long x, RoundingMode mode) {
+    checkNonNegative("x", x);
+    if (fitsInInt(x)) {
+      return IntMath.sqrt((int) x, mode);
+    }
+    long sqrtFloor = sqrtFloor(x);
+    switch (mode) {
+      case UNNECESSARY:
+        checkRoundingUnnecessary(sqrtFloor * sqrtFloor == x); // fall through
+      case FLOOR:
+      case DOWN:
+        return sqrtFloor;
+      case CEILING:
+      case UP:
+        return (sqrtFloor * sqrtFloor == x) ? sqrtFloor : sqrtFloor + 1;
+      case HALF_DOWN:
+      case HALF_UP:
+      case HALF_EVEN:
+        long halfSquare = sqrtFloor * sqrtFloor + sqrtFloor;
+        /*
+         * We wish to test whether or not x <= (sqrtFloor + 0.5)^2 = halfSquare + 0.25. Since both
+         * x and halfSquare are integers, this is equivalent to testing whether or not x <=
+         * halfSquare. (We have to deal with overflow, though.)
+         */
+        return (halfSquare >= x | halfSquare < 0) ? sqrtFloor : sqrtFloor + 1;
+      default:
+        throw new AssertionError();
+    }
+  }
+
+  private static long sqrtFloor(long x) {
+    // Hackers's Delight, Figure 11-1
+    long sqrt0 = (long) Math.sqrt(x);
+    // Precision can be lost in the cast to double, so we use this as a starting estimate.
+    long sqrt1 = (sqrt0 + (x / sqrt0)) >> 1;
+    if (sqrt1 == sqrt0) {
+      return sqrt0;
+    }
+    do {
+      sqrt0 = sqrt1;
+      sqrt1 = (sqrt0 + (x / sqrt0)) >> 1;
+    } while (sqrt1 < sqrt0);
+    return sqrt0;
+  }
+
+  /**
+   * Returns the result of dividing {@code p} by {@code q}, rounding using the specified
+   * {@code RoundingMode}.
+   *
+   * @throws ArithmeticException if {@code q == 0}, or if {@code mode == UNNECESSARY} and {@code a}
+   *         is not an integer multiple of {@code b}
+   */
+  @SuppressWarnings("fallthrough")
+  public static long divide(long p, long q, RoundingMode mode) {
+    checkNotNull(mode);
+    long div = p / q; // throws if q == 0
+    long rem = p - q * div; // equals p % q
+
+    if (rem == 0) {
+      return div;
+    }
+
+    /*
+     * Normal Java division rounds towards 0, consistently with RoundingMode.DOWN. We just have to
+     * deal with the cases where rounding towards 0 is wrong, which typically depends on the sign of
+     * p / q.
+     *
+     * signum is 1 if p and q are both nonnegative or both negative, and -1 otherwise.
+     */
+    int signum = 1 | (int) ((p ^ q) >> (Long.SIZE - 1));
+    boolean increment;
+    switch (mode) {
+      case UNNECESSARY:
+        checkRoundingUnnecessary(rem == 0);
+        // fall through
+      case DOWN:
+        increment = false;
+        break;
+      case UP:
+        increment = true;
+        break;
+      case CEILING:
+        increment = signum > 0;
+        break;
+      case FLOOR:
+        increment = signum < 0;
+        break;
+      case HALF_EVEN:
+      case HALF_DOWN:
+      case HALF_UP:
+        long absRem = abs(rem);
+        long cmpRemToHalfDivisor = absRem - (abs(q) - absRem);
+        // subtracting two nonnegative longs can't overflow
+        // cmpRemToHalfDivisor has the same sign as compare(abs(rem), abs(q) / 2).
+        if (cmpRemToHalfDivisor == 0) { // exactly on the half mark
+          increment = (mode == HALF_UP | (mode == HALF_EVEN & (div & 1) != 0));
+        } else {
+          increment = cmpRemToHalfDivisor > 0; // closer to the UP value
+        }
+        break;
+      default:
+        throw new AssertionError();
+    }
+    return increment ? div + signum : div;
+  }
+
+  /**
+   * Returns {@code x mod m}. This differs from {@code x % m} in that it always returns a
+   * non-negative result.
+   *
+   * <p>For example:
+   *
+   * <pre> {@code
+   *
+   * mod(7, 4) == 3
+   * mod(-7, 4) == 1
+   * mod(-1, 4) == 3
+   * mod(-8, 4) == 0
+   * mod(8, 4) == 0}</pre>
+   *
+   * @throws ArithmeticException if {@code m <= 0}
+   */
+  public static int mod(long x, int m) {
+    // Cast is safe because the result is guaranteed in the range [0, m)
+    return (int) mod(x, (long) m);
+  }
+
+  /**
+   * Returns {@code x mod m}. This differs from {@code x % m} in that it always returns a
+   * non-negative result.
+   *
+   * <p>For example:
+   *
+   * <pre> {@code
+   *
+   * mod(7, 4) == 3
+   * mod(-7, 4) == 1
+   * mod(-1, 4) == 3
+   * mod(-8, 4) == 0
+   * mod(8, 4) == 0}</pre>
+   *
+   * @throws ArithmeticException if {@code m <= 0}
+   */
+  public static long mod(long x, long m) {
+    if (m <= 0) {
+      throw new ArithmeticException("Modulus " + m + " must be > 0");
+    }
+    long result = x % m;
+    return (result >= 0) ? result : result + m;
+  }
+
+  /**
+   * Returns the greatest common divisor of {@code a, b}. Returns {@code 0} if
+   * {@code a == 0 && b == 0}.
+   *
+   * @throws IllegalArgumentException if {@code a < 0} or {@code b < 0}
+   */
+  public static long gcd(long a, long b) {
+    /*
+     * The reason we require both arguments to be >= 0 is because otherwise, what do you return on
+     * gcd(0, Long.MIN_VALUE)? BigInteger.gcd would return positive 2^63, but positive 2^63 isn't
+     * an int.
+     */
+    checkNonNegative("a", a);
+    checkNonNegative("b", b);
+    if (a == 0 | b == 0) {
+      return a | b;
+    }
+    /*
+     * Uses the binary GCD algorithm; see http://en.wikipedia.org/wiki/Binary_GCD_algorithm.
+     * This is over 40% faster than the Euclidean algorithm in benchmarks.
+     */
+    int aTwos = Long.numberOfTrailingZeros(a);
+    a >>= aTwos; // divide out all 2s
+    int bTwos = Long.numberOfTrailingZeros(b);
+    b >>= bTwos; // divide out all 2s
+    while (a != b) { // both a, b are odd
+      if (a < b) { // swap a, b
+        long t = b;
+        b = a;
+        a = t;
+      }
+      a -= b; // a is now positive and even
+      a >>= Long.numberOfTrailingZeros(a); // divide out all 2s, since 2 doesn't divide b
+    }
+    return a << min(aTwos, bTwos);
+  }
+
+  /**
+   * Returns the sum of {@code a} and {@code b}, provided it does not overflow.
+   *
+   * @throws ArithmeticException if {@code a + b} overflows in signed {@code long} arithmetic
+   */
+  public static long checkedAdd(long a, long b) {
+    long result = a + b;
+    checkNoOverflow((a ^ b) < 0 | (a ^ result) >= 0);
+    return result;
+  }
+
+  /**
+   * Returns the difference of {@code a} and {@code b}, provided it does not overflow.
+   *
+   * @throws ArithmeticException if {@code a - b} overflows in signed {@code long} arithmetic
+   */
+  public static long checkedSubtract(long a, long b) {
+    long result = a - b;
+    checkNoOverflow((a ^ b) >= 0 | (a ^ result) >= 0);
+    return result;
+  }
+
+  /**
+   * Returns the product of {@code a} and {@code b}, provided it does not overflow.
+   *
+   * @throws ArithmeticException if {@code a * b} overflows in signed {@code long} arithmetic
+   */
+  public static long checkedMultiply(long a, long b) {
+    // Hacker's Delight, Section 2-12
+    int leadingZeros = Long.numberOfLeadingZeros(a) + Long.numberOfLeadingZeros(~a)
+        + Long.numberOfLeadingZeros(b) + Long.numberOfLeadingZeros(~b);
+    /*
+     * If leadingZeros > Long.SIZE + 1 it's definitely fine, if it's < Long.SIZE it's definitely
+     * bad. We do the leadingZeros check to avoid the division below if at all possible.
+     *
+     * Otherwise, if b == Long.MIN_VALUE, then the only allowed values of a are 0 and 1. We take
+     * care of all a < 0 with their own check, because in particular, the case a == -1 will
+     * incorrectly pass the division check below.
+     *
+     * In all other cases, we check that either a is 0 or the result is consistent with division.
+     */
+    if (leadingZeros > Long.SIZE + 1) {
+      return a * b;
+    }
+    checkNoOverflow(leadingZeros >= Long.SIZE);
+    checkNoOverflow(a >= 0 | b != Long.MIN_VALUE);
+    long result = a * b;
+    checkNoOverflow(a == 0 || result / a == b);
+    return result;
+  }
+
+  /**
+   * Returns the {@code b} to the {@code k}th power, provided it does not overflow.
+   *
+   * @throws ArithmeticException if {@code b} to the {@code k}th power overflows in signed
+   *         {@code long} arithmetic
+   */
+  public static long checkedPow(long b, int k) {
+    checkNonNegative("exponent", k);
+    if (b >= -2 & b <= 2) {
+      switch ((int) b) {
+        case 0:
+          return (k == 0) ? 1 : 0;
+        case 1:
+          return 1;
+        case (-1):
+          return ((k & 1) == 0) ? 1 : -1;
+        case 2:
+          checkNoOverflow(k < Long.SIZE - 1);
+          return 1L << k;
+        case (-2):
+          checkNoOverflow(k < Long.SIZE);
+          return ((k & 1) == 0) ? (1L << k) : (-1L << k);
+      }
+    }
+    long accum = 1;
+    while (true) {
+      switch (k) {
+        case 0:
+          return accum;
+        case 1:
+          return checkedMultiply(accum, b);
+        default:
+          if ((k & 1) != 0) {
+            accum = checkedMultiply(accum, b);
+          }
+          k >>= 1;
+          if (k > 0) {
+            checkNoOverflow(b <= FLOOR_SQRT_MAX_LONG);
+            b *= b;
+          }
+      }
+    }
+  }
+
+  @VisibleForTesting static final long FLOOR_SQRT_MAX_LONG = 3037000499L;
+
+  /**
+   * Returns {@code n!}, that is, the product of the first {@code n} positive
+   * integers, {@code 1} if {@code n == 0}, or {@link Long#MAX_VALUE} if the
+   * result does not fit in a {@code long}.
+   *
+   * @throws IllegalArgumentException if {@code n < 0}
+   */
+  public static long factorial(int n) {
+    checkNonNegative("n", n);
+    return (n < FACTORIALS.length) ? FACTORIALS[n] : Long.MAX_VALUE;
+  }
+
+  static final long[] FACTORIALS = {
+      1L,
+      1L,
+      1L * 2,
+      1L * 2 * 3,
+      1L * 2 * 3 * 4,
+      1L * 2 * 3 * 4 * 5,
+      1L * 2 * 3 * 4 * 5 * 6,
+      1L * 2 * 3 * 4 * 5 * 6 * 7,
+      1L * 2 * 3 * 4 * 5 * 6 * 7 * 8,
+      1L * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9,
+      1L * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10,
+      1L * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10 * 11,
+      1L * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10 * 11 * 12,
+      1L * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10 * 11 * 12 * 13,
+      1L * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10 * 11 * 12 * 13 * 14,
+      1L * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10 * 11 * 12 * 13 * 14 * 15,
+      1L * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10 * 11 * 12 * 13 * 14 * 15 * 16,
+      1L * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10 * 11 * 12 * 13 * 14 * 15 * 16 * 17,
+      1L * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10 * 11 * 12 * 13 * 14 * 15 * 16 * 17 * 18,
+      1L * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10 * 11 * 12 * 13 * 14 * 15 * 16 * 17 * 18 * 19,
+      1L * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10 * 11 * 12 * 13 * 14 * 15 * 16 * 17 * 18 * 19 * 20
+  };
+
+  /**
+   * Returns {@code n} choose {@code k}, also known as the binomial coefficient of {@code n} and
+   * {@code k}, or {@link Long#MAX_VALUE} if the result does not fit in a {@code long}.
+   *
+   * @throws IllegalArgumentException if {@code n < 0}, {@code k < 0}, or {@code k > n}
+   */
+  public static long binomial(int n, int k) {
+    checkNonNegative("n", n);
+    checkNonNegative("k", k);
+    checkArgument(k <= n, "k (%s) > n (%s)", k, n);
+    if (k > (n >> 1)) {
+      k = n - k;
+    }
+    if (k >= BIGGEST_BINOMIALS.length || n > BIGGEST_BINOMIALS[k]) {
+      return Long.MAX_VALUE;
+    }
+    long result = 1;
+    if (k < BIGGEST_SIMPLE_BINOMIALS.length && n <= BIGGEST_SIMPLE_BINOMIALS[k]) {
+      // guaranteed not to overflow
+      for (int i = 0; i < k; i++) {
+        result *= n - i;
+        result /= i + 1;
+      }
+    } else {
+      // We want to do this in long math for speed, but want to avoid overflow.
+      // Dividing by the GCD suffices to avoid overflow in all the remaining cases.
+      for (int i = 1; i <= k; i++, n--) {
+        int d = IntMath.gcd(n, i);
+        result /= i / d; // (i/d) is guaranteed to divide result
+        result *= n / d;
+      }
+    }
+    return result;
+  }
+
+  /*
+   * binomial(BIGGEST_BINOMIALS[k], k) fits in a long, but not
+   * binomial(BIGGEST_BINOMIALS[k] + 1, k).
+   */
+  static final int[] BIGGEST_BINOMIALS =
+      {Integer.MAX_VALUE, Integer.MAX_VALUE, Integer.MAX_VALUE, 3810779, 121977, 16175, 4337, 1733,
+          887, 534, 361, 265, 206, 169, 143, 125, 111, 101, 94, 88, 83, 79, 76, 74, 72, 70, 69, 68,
+          67, 67, 66, 66, 66, 66};
+
+  /*
+   * binomial(BIGGEST_SIMPLE_BINOMIALS[k], k) doesn't need to use the slower GCD-based impl,
+   * but binomial(BIGGEST_SIMPLE_BINOMIALS[k] + 1, k) does.
+   */
+  @VisibleForTesting static final int[] BIGGEST_SIMPLE_BINOMIALS =
+      {Integer.MAX_VALUE, Integer.MAX_VALUE, Integer.MAX_VALUE, 2642246, 86251, 11724, 3218, 1313,
+          684, 419, 287, 214, 169, 139, 119, 105, 95, 87, 81, 76, 73, 70, 68, 66, 64, 63, 62, 62,
+          61, 61, 61};
+  // These values were generated by using checkedMultiply to see when the simple multiply/divide
+  // algorithm would lead to an overflow.
+
+  static boolean fitsInInt(long x) {
+    return (int) x == x;
+  }
+
+  private LongMath() {}
+}
diff --git a/guava/src/com/google/common/math/MathPreconditions.java b/guava/src/com/google/common/math/MathPreconditions.java
new file mode 100644
index 0000000..98a6d38
--- /dev/null
+++ b/guava/src/com/google/common/math/MathPreconditions.java
@@ -0,0 +1,93 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.math;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.math.BigInteger;
+
+/**
+ * A collection of preconditions for math functions.
+ * 
+ * @author Louis Wasserman
+ */
+@GwtCompatible
+final class MathPreconditions {
+  static int checkPositive(String role, int x) {
+    if (x <= 0) {
+      throw new IllegalArgumentException(role + " (" + x + ") must be > 0");
+    }
+    return x;
+  }
+
+  static long checkPositive(String role, long x) {
+    if (x <= 0) {
+      throw new IllegalArgumentException(role + " (" + x + ") must be > 0");
+    }
+    return x;
+  }
+
+  static BigInteger checkPositive(String role, BigInteger x) {
+    if (x.signum() <= 0) {
+      throw new IllegalArgumentException(role + " (" + x + ") must be > 0");
+    }
+    return x;
+  }
+
+  static int checkNonNegative(String role, int x) {
+    if (x < 0) {
+      throw new IllegalArgumentException(role + " (" + x + ") must be >= 0");
+    }
+    return x;
+  }
+
+  static long checkNonNegative(String role, long x) {
+    if (x < 0) {
+      throw new IllegalArgumentException(role + " (" + x + ") must be >= 0");
+    }
+    return x;
+  }
+
+  static BigInteger checkNonNegative(String role, BigInteger x) {
+    if (checkNotNull(x).signum() < 0) {
+      throw new IllegalArgumentException(role + " (" + x + ") must be >= 0");
+    }
+    return x;
+  }
+
+  static void checkRoundingUnnecessary(boolean condition) {
+    if (!condition) {
+      throw new ArithmeticException("mode was UNNECESSARY, but rounding was necessary");
+    }
+  }
+
+  static void checkInRange(boolean condition) {
+    if (!condition) {
+      throw new ArithmeticException("not in range");
+    }
+  }
+
+  static void checkNoOverflow(boolean condition) {
+    if (!condition) {
+      throw new ArithmeticException("overflow");
+    }
+  }
+
+  private MathPreconditions() {}
+}
diff --git a/guava/src/com/google/common/math/package-info.java b/guava/src/com/google/common/math/package-info.java
new file mode 100644
index 0000000..6bbd4f2
--- /dev/null
+++ b/guava/src/com/google/common/math/package-info.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+/**
+ * Arithmetic functions operating on primitive values and {@link java.math.BigInteger} instances.
+ *
+ * <p>This package is a part of the open-source
+ * <a href="http://guava-libraries.googlecode.com">Guava libraries</a>.
+ */
+@ParametersAreNonnullByDefault
+package com.google.common.math;
+
+import javax.annotation.ParametersAreNonnullByDefault;
diff --git a/guava/src/com/google/common/net/HostAndPort.java b/guava/src/com/google/common/net/HostAndPort.java
new file mode 100644
index 0000000..eacc858
--- /dev/null
+++ b/guava/src/com/google/common/net/HostAndPort.java
@@ -0,0 +1,265 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.net;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkState;
+
+import com.google.common.annotations.Beta;
+import com.google.common.base.Objects;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.annotation.concurrent.Immutable;
+
+/**
+ * An immutable representation of a host and port.
+ *
+ * <p>Example usage:
+ * <pre>
+ * HostAndPort hp = HostAndPort.fromString("[2001:db8::1]")
+ *     .withDefaultPort(80)
+ *     .requireBracketsForIPv6();
+ * hp.getHostText();  // returns "2001:db8::1"
+ * hp.getPort();      // returns 80
+ * hp.toString();     // returns "[2001:db8::1]:80"
+ * </pre>
+ *
+ * <p>Here are some examples of recognized formats:
+ * <ul>
+ *   <li>example.com
+ *   <li>example.com:80
+ *   <li>192.0.2.1
+ *   <li>192.0.2.1:80
+ *   <li>[2001:db8::1]     - {@link #getHostText()} omits brackets
+ *   <li>[2001:db8::1]:80  - {@link #getHostText()} omits brackets
+ *   <li>2001:db8::1       - Use {@link #requireBracketsForIPv6()} to prohibit this
+ * </ul>
+ *
+ * <p>Note that this is not an exhaustive list, because these methods are only
+ * concerned with brackets, colons, and port numbers.  Full validation of the
+ * host field (if desired) is the caller's responsibility.
+ *
+ * @author Paul Marks
+ * @since 10.0
+ */
+@Beta @Immutable
+public final class HostAndPort {
+  /** Magic value indicating the absence of a port number. */
+  private static final int NO_PORT = -1;
+
+  /** Hostname, IPv4/IPv6 literal, or unvalidated nonsense. */
+  private final String host;
+
+  /** Validated port number in the range [0..65535], or NO_PORT */
+  private final int port;
+
+  /** True if the parsed host has colons, but no surrounding brackets. */
+  private final boolean hasBracketlessColons;
+
+  private HostAndPort(String host, int port, boolean hasBracketlessColons) {
+    this.host = host;
+    this.port = port;
+    this.hasBracketlessColons = hasBracketlessColons;
+  }
+
+  /**
+   * Returns the portion of this {@code HostAndPort} instance that should
+   * represent the hostname or IPv4/IPv6 literal.
+   *
+   * A successful parse does not imply any degree of sanity in this field.
+   * For additional validation, see the {@link HostSpecifier} class.
+   */
+  public String getHostText() {
+    return host;
+  }
+
+  /** Return true if this instance has a defined port. */
+  public boolean hasPort() {
+    return port >= 0;
+  }
+
+  /**
+   * Get the current port number, failing if no port is defined.
+   *
+   * @return a validated port number, in the range [0..65535]
+   * @throws IllegalStateException if no port is defined.  You can use
+   *         {@link #withDefaultPort(int)} to prevent this from occurring.
+   */
+  public int getPort() {
+    checkState(hasPort());
+    return port;
+  }
+
+  /**
+   * Returns the current port number, with a default if no port is defined.
+   */
+  public int getPortOrDefault(int defaultPort) {
+    return hasPort() ? port : defaultPort;
+  }
+
+  /**
+   * Build a HostAndPort instance from separate host and port values.
+   *
+   * <p>Note: Non-bracketed IPv6 literals are allowed.
+   * Use {@link #requireBracketsForIPv6()} to prohibit these.
+   *
+   * @param host the host string to parse.  Must not contain a port number.
+   * @param port a port number from [0..65535]
+   * @return if parsing was successful, a populated HostAndPort object.
+   * @throws IllegalArgumentException if {@code host} contains a port number,
+   *     or {@code port} is out of range.
+   */
+  public static HostAndPort fromParts(String host, int port) {
+    checkArgument(isValidPort(port));
+    HostAndPort parsedHost = fromString(host);
+    checkArgument(!parsedHost.hasPort());
+    return new HostAndPort(parsedHost.host, port, parsedHost.hasBracketlessColons);
+  }
+
+  private static final Pattern BRACKET_PATTERN = Pattern.compile("^\\[(.*:.*)\\](?::(\\d*))?$");
+
+  /**
+   * Split a freeform string into a host and port, without strict validation.
+   *
+   * Note that the host-only formats will leave the port field undefined.  You
+   * can use {@link #withDefaultPort(int)} to patch in a default value.
+   *
+   * @param hostPortString the input string to parse.
+   * @return if parsing was successful, a populated HostAndPort object.
+   * @throws IllegalArgumentException if nothing meaningful could be parsed.
+   */
+  public static HostAndPort fromString(String hostPortString) {
+    checkNotNull(hostPortString);
+    String host;
+    String portString = null;
+    boolean hasBracketlessColons = false;
+
+    if (hostPortString.startsWith("[")) {
+      // Parse a bracketed host, typically an IPv6 literal.
+      Matcher matcher = BRACKET_PATTERN.matcher(hostPortString);
+      checkArgument(matcher.matches(), "Invalid bracketed host/port: %s", hostPortString);
+      host = matcher.group(1);
+      portString = matcher.group(2);  // could be null
+    } else {
+      int colonPos = hostPortString.indexOf(':');
+      if (colonPos >= 0 && hostPortString.indexOf(':', colonPos + 1) == -1) {
+        // Exactly 1 colon.  Split into host:port.
+        host = hostPortString.substring(0, colonPos);
+        portString = hostPortString.substring(colonPos + 1);
+      } else {
+        // 0 or 2+ colons.  Bare hostname or IPv6 literal.
+        host = hostPortString;
+        hasBracketlessColons = (colonPos >= 0);
+      }
+    }
+
+    int port = NO_PORT;
+    if (portString != null) {
+      // Try to parse the whole port string as a number.
+      // JDK7 accepts leading plus signs. We don't want to.
+      checkArgument(!portString.startsWith("+"), "Unparseable port number: %s", hostPortString);
+      try {
+        port = Integer.parseInt(portString);
+      } catch (NumberFormatException e) {
+        throw new IllegalArgumentException("Unparseable port number: " + hostPortString);
+      }
+      checkArgument(isValidPort(port), "Port number out of range: %s", hostPortString);
+    }
+
+    return new HostAndPort(host, port, hasBracketlessColons);
+  }
+
+  /**
+   * Provide a default port if the parsed string contained only a host.
+   *
+   * You can chain this after {@link #fromString(String)} to include a port in
+   * case the port was omitted from the input string.  If a port was already
+   * provided, then this method is a no-op.
+   *
+   * @param defaultPort a port number, from [0..65535]
+   * @return a HostAndPort instance, guaranteed to have a defined port.
+   */
+  public HostAndPort withDefaultPort(int defaultPort) {
+    checkArgument(isValidPort(defaultPort));
+    if (hasPort() || port == defaultPort) {
+      return this;
+    }
+    return new HostAndPort(host, defaultPort, hasBracketlessColons);
+  }
+
+  /**
+   * Generate an error if the host might be a non-bracketed IPv6 literal.
+   *
+   * <p>URI formatting requires that IPv6 literals be surrounded by brackets,
+   * like "[2001:db8::1]".  Chain this call after {@link #fromString(String)}
+   * to increase the strictness of the parser, and disallow IPv6 literals
+   * that don't contain these brackets.
+   *
+   * <p>Note that this parser identifies IPv6 literals solely based on the
+   * presence of a colon.  To perform actual validation of IP addresses, see
+   * the {@link InetAddresses#forString(String)} method.
+   *
+   * @return {@code this}, to enable chaining of calls.
+   * @throws IllegalArgumentException if bracketless IPv6 is detected.
+   */
+  public HostAndPort requireBracketsForIPv6() {
+    checkArgument(!hasBracketlessColons, "Possible bracketless IPv6 literal: %s", host);
+    return this;
+  }
+
+  @Override
+  public boolean equals(Object other) {
+    if (this == other) {
+      return true;
+    }
+    if (other instanceof HostAndPort) {
+      HostAndPort that = (HostAndPort) other;
+      return Objects.equal(this.host, that.host)
+          && this.port == that.port
+          && this.hasBracketlessColons == that.hasBracketlessColons;
+    }
+    return false;
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hashCode(host, port, hasBracketlessColons);
+  }
+
+  /** Rebuild the host:port string, including brackets if necessary. */
+  @Override
+  public String toString() {
+    StringBuilder builder = new StringBuilder(host.length() + 7);
+    if (host.indexOf(':') >= 0) {
+      builder.append('[').append(host).append(']');
+    } else {
+      builder.append(host);
+    }
+    if (hasPort()) {
+      builder.append(':').append(port);
+    }
+    return builder.toString();
+  }
+
+  /** Return true for valid port numbers. */
+  private static boolean isValidPort(int port) {
+    return port >= 0 && port <= 65535;
+  }
+}
diff --git a/guava/src/com/google/common/net/HostSpecifier.java b/guava/src/com/google/common/net/HostSpecifier.java
new file mode 100644
index 0000000..3c90985
--- /dev/null
+++ b/guava/src/com/google/common/net/HostSpecifier.java
@@ -0,0 +1,178 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.net;
+
+import com.google.common.annotations.Beta;
+import com.google.common.base.Preconditions;
+
+import java.net.InetAddress;
+import java.text.ParseException;
+
+import javax.annotation.Nullable;
+
+/**
+ * A syntactically valid host specifier, suitable for use in a URI.
+ * This may be either a numeric IP address in IPv4 or IPv6 notation, or a
+ * domain name.
+ *
+ * <p>Because this class is intended to represent host specifiers which can
+ * reasonably be used in a URI, the domain name case is further restricted to
+ * include only those domain names which end in a recognized public suffix; see
+ * {@link InternetDomainName#isPublicSuffix()} for details.
+ *
+ * <p>Note that no network lookups are performed by any {@code HostSpecifier}
+ * methods.  No attempt is made to verify that a provided specifier corresponds
+ * to a real or accessible host.  Only syntactic and pattern-based checks are
+ * performed.
+ *
+ * <p>If you know that a given string represents a numeric IP address, use
+ * {@link InetAddresses} to obtain and manipulate a
+ * {@link java.net.InetAddress} instance from it rather than using this class.
+ * Similarly, if you know that a given string represents a domain name, use
+ * {@link InternetDomainName} rather than this class.
+ *
+ * @author Craig Berry
+ * @since 5.0
+ */
+@Beta
+public final class HostSpecifier {
+
+  private final String canonicalForm;
+
+  private HostSpecifier(String canonicalForm) {
+    this.canonicalForm = canonicalForm;
+  }
+
+  /**
+   * Returns a {@code HostSpecifier} built from the provided {@code specifier},
+   * which is already known to be valid.  If the {@code specifier} might be
+   * invalid, use {@link #from(String)} instead.
+   *
+   * <p>The specifier must be in one of these formats:
+   * <ul>
+   * <li>A domain name, like {@code google.com}
+   * <li>A IPv4 address string, like {@code 127.0.0.1}
+   * <li>An IPv6 address string with or without brackets, like
+   *     {@code [2001:db8::1]} or {@code 2001:db8::1}
+   * </ul>
+   *
+   * @throws IllegalArgumentException if the specifier is not valid.
+   */
+  public static HostSpecifier fromValid(String specifier) {
+    // Verify that no port was specified, and strip optional brackets from
+    // IPv6 literals.
+    final HostAndPort parsedHost = HostAndPort.fromString(specifier);
+    Preconditions.checkArgument(!parsedHost.hasPort());
+    final String host = parsedHost.getHostText();
+
+    // Try to interpret the specifier as an IP address.  Note we build
+    // the address rather than using the .is* methods because we want to
+    // use InetAddresses.toUriString to convert the result to a string in
+    // canonical form.
+    InetAddress addr = null;
+    try {
+      addr = InetAddresses.forString(host);
+    } catch (IllegalArgumentException e) {
+      // It is not an IPv4 or IPv6 literal
+    }
+
+    if (addr != null) {
+      return new HostSpecifier(InetAddresses.toUriString(addr));
+    }
+
+    // It is not any kind of IP address; must be a domain name or invalid.
+
+    // TODO(user): different versions of this for different factories?
+    final InternetDomainName domain = InternetDomainName.from(host);
+
+    if (domain.hasPublicSuffix()) {
+      return new HostSpecifier(domain.name());
+    }
+
+    throw new IllegalArgumentException(
+        "Domain name does not have a recognized public suffix: " + host);
+  }
+
+  /**
+   * Attempts to return a {@code HostSpecifier} for the given string, throwing
+   * an exception if parsing fails. Always use this method in preference to
+   * {@link #fromValid(String)} for a specifier that is not already known to be
+   * valid.
+   *
+   * @throws ParseException if the specifier is not valid.
+   */
+  public static HostSpecifier from(String specifier)
+      throws ParseException {
+    try {
+      return fromValid(specifier);
+    } catch (IllegalArgumentException e) {
+      // Since the IAE can originate at several different points inside
+      // fromValid(), we implement this method in terms of that one rather
+      // than the reverse.
+
+      ParseException parseException =
+          new ParseException("Invalid host specifier: " + specifier, 0);
+      parseException.initCause(e);
+      throw parseException;
+    }
+  }
+
+  /**
+   * Determines whether {@code specifier} represents a valid
+   * {@link HostSpecifier} as described in the documentation for
+   * {@link #fromValid(String)}.
+   */
+  public static boolean isValid(String specifier) {
+    try {
+      fromValid(specifier);
+      return true;
+    } catch (IllegalArgumentException e) {
+      return false;
+    }
+  }
+
+  @Override
+  public boolean equals(@Nullable Object other) {
+    if (this == other) {
+      return true;
+    }
+
+    if (other instanceof HostSpecifier) {
+      final HostSpecifier that = (HostSpecifier) other;
+      return this.canonicalForm.equals(that.canonicalForm);
+    }
+
+    return false;
+  }
+
+  @Override
+  public int hashCode() {
+    return canonicalForm.hashCode();
+  }
+
+  /**
+   * Returns a string representation of the host specifier suitable for
+   * inclusion in a URI.  If the host specifier is a domain name, the
+   * string will be normalized to all lower case.  If the specifier was
+   * an IPv6 address without brackets, brackets are added so that the
+   * result will be usable in the host part of a URI.
+   */
+  @Override
+  public String toString() {
+    return canonicalForm;
+  }
+}
diff --git a/guava/src/com/google/common/net/HttpHeaders.java b/guava/src/com/google/common/net/HttpHeaders.java
new file mode 100644
index 0000000..4bb6f9f
--- /dev/null
+++ b/guava/src/com/google/common/net/HttpHeaders.java
@@ -0,0 +1,200 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.net;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+
+/**
+ * Contains constant definitions for the HTTP header field names. See:
+ * <ul>
+ * <li><a href="http://www.ietf.org/rfc/rfc2109.txt">RFC 2109</a>
+ * <li><a href="http://www.ietf.org/rfc/rfc2183.txt">RFC 2183</a>
+ * <li><a href="http://www.ietf.org/rfc/rfc2616.txt">RFC 2616</a>
+ * <li><a href="http://www.ietf.org/rfc/rfc2965.txt">RFC 2965</a>
+ * <li><a href="http://www.ietf.org/rfc/rfc5988.txt">RFC 5988</a>
+ * </ul>
+ *
+ * @author Kurt Alfred Kluever
+ * @since 11.0
+ */
+@Beta
+@GwtCompatible
+public final class HttpHeaders {
+  private HttpHeaders() {}
+
+  // HTTP Request and Response header fields
+
+  /** The HTTP Cache-Control header field name. */
+  public static final String CACHE_CONTROL = "Cache-Control";
+  /** The HTTP Content-Length header field name. */
+  public static final String CONTENT_LENGTH = "Content-Length";
+  /** The HTTP Content-Type header field name. */
+  public static final String CONTENT_TYPE = "Content-Type";
+  /** The HTTP Date header field name. */
+  public static final String DATE = "Date";
+  /** The HTTP Pragma header field name. */
+  public static final String PRAGMA = "Pragma";
+  /** The HTTP Via header field name. */
+  public static final String VIA = "Via";
+  /** The HTTP Warning header field name. */
+  public static final String WARNING = "Warning";
+
+  // HTTP Request header fields
+
+  /** The HTTP Accept header field name. */
+  public static final String ACCEPT = "Accept";
+  /** The HTTP Accept-Charset header field name. */
+  public static final String ACCEPT_CHARSET = "Accept-Charset";
+  /** The HTTP Accept-Encoding header field name. */
+  public static final String ACCEPT_ENCODING = "Accept-Encoding";
+  /** The HTTP Accept-Language header field name. */
+  public static final String ACCEPT_LANGUAGE = "Accept-Language";
+  /** The HTTP Access-Control-Request-Headers header field name. */
+  public static final String ACCESS_CONTROL_REQUEST_HEADERS = "Access-Control-Request-Headers";
+  /** The HTTP Access-Control-Request-Method header field name. */
+  public static final String ACCESS_CONTROL_REQUEST_METHOD = "Access-Control-Request-Method";
+  /** The HTTP Authorization header field name. */
+  public static final String AUTHORIZATION = "Authorization";
+  /** The HTTP Connection header field name. */
+  public static final String CONNECTION = "Connection";
+  /** The HTTP Cookie header field name. */
+  public static final String COOKIE = "Cookie";
+  /** The HTTP Expect header field name. */
+  public static final String EXPECT = "Expect";
+  /** The HTTP From header field name. */
+  public static final String FROM = "From";
+  /** The HTTP Host header field name. */
+  public static final String HOST = "Host";
+  /** The HTTP If-Match header field name. */
+  public static final String IF_MATCH = "If-Match";
+  /** The HTTP If-Modified-Since header field name. */
+  public static final String IF_MODIFIED_SINCE = "If-Modified-Since";
+  /** The HTTP If-None-Match header field name. */
+  public static final String IF_NONE_MATCH = "If-None-Match";
+  /** The HTTP If-Range header field name. */
+  public static final String IF_RANGE = "If-Range";
+  /** The HTTP If-Unmodified-Since header field name. */
+  public static final String IF_UNMODIFIED_SINCE = "If-Unmodified-Since";
+  /** The HTTP Last-Event-ID header field name. */
+  public static final String LAST_EVENT_ID = "Last-Event-ID";
+  /** The HTTP Max-Forwards header field name. */
+  public static final String MAX_FORWARDS = "Max-Forwards";
+  /** The HTTP Origin header field name. */
+  public static final String ORIGIN = "Origin";
+  /** The HTTP Proxy-Authorization header field name. */
+  public static final String PROXY_AUTHORIZATION = "Proxy-Authorization";
+  /** The HTTP Range header field name. */
+  public static final String RANGE = "Range";
+  /** The HTTP Referer header field name. */
+  public static final String REFERER = "Referer";
+  /** The HTTP TE header field name. */
+  public static final String TE = "TE";
+  /** The HTTP Upgrade header field name. */
+  public static final String UPGRADE = "Upgrade";
+  /** The HTTP User-Agent header field name. */
+  public static final String USER_AGENT = "User-Agent";
+
+  // HTTP Response header fields
+
+  /** The HTTP Accept-Ranges header field name. */
+  public static final String ACCEPT_RANGES = "Accept-Ranges";
+  /** The HTTP Access-Control-Allow-Headers header field name. */
+  public static final String ACCESS_CONTROL_ALLOW_HEADERS = "Access-Control-Allow-Headers";
+  /** The HTTP Access-Control-Allow-Methods header field name. */
+  public static final String ACCESS_CONTROL_ALLOW_METHODS = "Access-Control-Allow-Methods";
+  /** The HTTP Access-Control-Allow-Origin header field name. */
+  public static final String ACCESS_CONTROL_ALLOW_ORIGIN = "Access-Control-Allow-Origin";
+  /** The HTTP Access-Control-Allow-Credentials header field name. */
+  public static final String ACCESS_CONTROL_ALLOW_CREDENTIALS = "Access-Control-Allow-Credentials";
+  /** The HTTP Access-Control-Expose-Headers header field name. */
+  public static final String ACCESS_CONTROL_EXPOSE_HEADERS = "Access-Control-Expose-Headers";
+  /** The HTTP Access-Control-Max-Age header field name. */
+  public static final String ACCESS_CONTROL_MAX_AGE = "Access-Control-Max-Age";
+  /** The HTTP Age header field name. */
+  public static final String AGE = "Age";
+  /** The HTTP Allow header field name. */
+  public static final String ALLOW = "Allow";
+  /** The HTTP Content-Disposition header field name. */
+  public static final String CONTENT_DISPOSITION = "Content-Disposition";
+  /** The HTTP Content-Encoding header field name. */
+  public static final String CONTENT_ENCODING = "Content-Encoding";
+  /** The HTTP Content-Language header field name. */
+  public static final String CONTENT_LANGUAGE = "Content-Language";
+  /** The HTTP Content-Location header field name. */
+  public static final String CONTENT_LOCATION = "Content-Location";
+  /** The HTTP Content-MD5 header field name. */
+  public static final String CONTENT_MD5 = "Content-MD5";
+  /** The HTTP Content-Range header field name. */
+  public static final String CONTENT_RANGE = "Content-Range";
+  /** The HTTP ETag header field name. */
+  public static final String ETAG = "ETag";
+  /** The HTTP Expires header field name. */
+  public static final String EXPIRES = "Expires";
+  /** The HTTP Last-Modified header field name. */
+  public static final String LAST_MODIFIED = "Last-Modified";
+  /** The HTTP Link header field name. */
+  public static final String LINK = "Link";
+  /** The HTTP Location header field name. */
+  public static final String LOCATION = "Location";
+  /** The HTTP P3P header field name. Limited browser support. */
+  public static final String P3P = "P3P";
+  /** The HTTP Proxy-Authenticate header field name. */
+  public static final String PROXY_AUTHENTICATE = "Proxy-Authenticate";
+  /** The HTTP Refresh header field name. Non-standard header supported by most browsers. */
+  public static final String REFRESH = "Refresh";
+  /** The HTTP Retry-After header field name. */
+  public static final String RETRY_AFTER = "Retry-After";
+  /** The HTTP Server header field name. */
+  public static final String SERVER = "Server";
+  /** The HTTP Set-Cookie header field name. */
+  public static final String SET_COOKIE = "Set-Cookie";
+  /** The HTTP Set-Cookie2 header field name. */
+  public static final String SET_COOKIE2 = "Set-Cookie2";
+  /** The HTTP Trailer header field name. */
+  public static final String TRAILER = "Trailer";
+  /** The HTTP Transfer-Encoding header field name. */
+  public static final String TRANSFER_ENCODING = "Transfer-Encoding";
+  /** The HTTP Vary header field name. */
+  public static final String VARY = "Vary";
+  /** The HTTP WWW-Authenticate header field name. */
+  public static final String WWW_AUTHENTICATE = "WWW-Authenticate";
+
+  // Common, non-standard HTTP header fields
+
+  /** The HTTP DNT header field name. */
+  public static final String DNT = "DNT";
+  /** The HTTP X-Content-Type-Options header field name. */
+  public static final String X_CONTENT_TYPE_OPTIONS = "X-Content-Type-Options";
+  /** The HTTP X-Do-Not-Track header field name. */
+  public static final String X_DO_NOT_TRACK = "X-Do-Not-Track";
+  /** The HTTP X-Forwarded-For header field name. */
+  public static final String X_FORWARDED_FOR = "X-Forwarded-For";
+  /** The HTTP X-Forwarded-Proto header field name. */
+  public static final String X_FORWARDED_PROTO = "X-Forwarded-Proto";
+  /** The HTTP X-Frame-Options header field name. */
+  public static final String X_FRAME_OPTIONS = "X-Frame-Options";
+  /** The HTTP X-Powered-By header field name. */
+  public static final String X_POWERED_BY = "X-Powered-By";
+  /** The HTTP X-Requested-With header field name. */
+  public static final String X_REQUESTED_WITH = "X-Requested-With";
+  /** The HTTP X-User-IP header field name. */
+  public static final String X_USER_IP = "X-User-IP";
+  /** The HTTP X-XSS-Protection header field name. */
+  public static final String X_XSS_PROTECTION = "X-XSS-Protection";
+
+}
diff --git a/guava/src/com/google/common/net/InetAddresses.java b/guava/src/com/google/common/net/InetAddresses.java
new file mode 100644
index 0000000..2cd9472
--- /dev/null
+++ b/guava/src/com/google/common/net/InetAddresses.java
@@ -0,0 +1,1123 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.net;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Preconditions;
+import com.google.common.io.ByteStreams;
+import com.google.common.primitives.Ints;
+
+import java.net.Inet4Address;
+import java.net.Inet6Address;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.nio.ByteBuffer;
+import java.util.Arrays;
+
+import javax.annotation.Nullable;
+
+/**
+ * Static utility methods pertaining to {@link InetAddress} instances.
+ *
+ * <p><b>Important note:</b> Unlike {@code InetAddress.getByName()}, the
+ * methods of this class never cause DNS services to be accessed. For
+ * this reason, you should prefer these methods as much as possible over
+ * their JDK equivalents whenever you are expecting to handle only
+ * IP address string literals -- there is no blocking DNS penalty for a
+ * malformed string.
+ *
+ * <p>This class hooks into the {@code sun.net.util.IPAddressUtil} class
+ * to make use of the {@code textToNumericFormatV4} and
+ * {@code textToNumericFormatV6} methods directly as a means to avoid
+ * accidentally traversing all nameservices (it can be vitally important
+ * to avoid, say, blocking on DNS at times).
+ *
+ * <p>When dealing with {@link Inet4Address} and {@link Inet6Address}
+ * objects as byte arrays (vis. {@code InetAddress.getAddress()}) they
+ * are 4 and 16 bytes in length, respectively, and represent the address
+ * in network byte order.
+ *
+ * <p>Examples of IP addresses and their byte representations:
+ * <ul>
+ * <li>The IPv4 loopback address, {@code "127.0.0.1"}.<br/>
+ *     {@code 7f 00 00 01}
+ *
+ * <li>The IPv6 loopback address, {@code "::1"}.<br/>
+ *     {@code 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01}
+ *
+ * <li>From the IPv6 reserved documentation prefix ({@code 2001:db8::/32}),
+ *     {@code "2001:db8::1"}.<br/>
+ *     {@code 20 01 0d b8 00 00 00 00 00 00 00 00 00 00 00 01}
+ *
+ * <li>An IPv6 "IPv4 compatible" (or "compat") address,
+ *     {@code "::192.168.0.1"}.<br/>
+ *     {@code 00 00 00 00 00 00 00 00 00 00 00 00 c0 a8 00 01}
+ *
+ * <li>An IPv6 "IPv4 mapped" address, {@code "::ffff:192.168.0.1"}.<br/>
+ *     {@code 00 00 00 00 00 00 00 00 00 00 ff ff c0 a8 00 01}
+ * </ul>
+ *
+ * <p>A few notes about IPv6 "IPv4 mapped" addresses and their observed
+ * use in Java.
+ * <br><br>
+ * "IPv4 mapped" addresses were originally a representation of IPv4
+ * addresses for use on an IPv6 socket that could receive both IPv4
+ * and IPv6 connections (by disabling the {@code IPV6_V6ONLY} socket
+ * option on an IPv6 socket).  Yes, it's confusing.  Nevertheless,
+ * these "mapped" addresses were never supposed to be seen on the
+ * wire.  That assumption was dropped, some say mistakenly, in later
+ * RFCs with the apparent aim of making IPv4-to-IPv6 transition simpler.
+ *
+ * <p>Technically one <i>can</i> create a 128bit IPv6 address with the wire
+ * format of a "mapped" address, as shown above, and transmit it in an
+ * IPv6 packet header.  However, Java's InetAddress creation methods
+ * appear to adhere doggedly to the original intent of the "mapped"
+ * address: all "mapped" addresses return {@link Inet4Address} objects.
+ *
+ * <p>For added safety, it is common for IPv6 network operators to filter
+ * all packets where either the source or destination address appears to
+ * be a "compat" or "mapped" address.  Filtering suggestions usually
+ * recommend discarding any packets with source or destination addresses
+ * in the invalid range {@code ::/3}, which includes both of these bizarre
+ * address formats.  For more information on "bogons", including lists
+ * of IPv6 bogon space, see:
+ *
+ * <ul>
+ * <li><a target="_parent"
+ *        href="http://en.wikipedia.org/wiki/Bogon_filtering"
+ *       >http://en.wikipedia.org/wiki/Bogon_filtering</a>
+ * <li><a target="_parent"
+ *        href="http://www.cymru.com/Bogons/ipv6.txt"
+ *       >http://www.cymru.com/Bogons/ipv6.txt</a>
+ * <li><a target="_parent"
+ *        href="http://www.cymru.com/Bogons/v6bogon.html"
+ *       >http://www.cymru.com/Bogons/v6bogon.html</a>
+ * <li><a target="_parent"
+ *        href="http://www.space.net/~gert/RIPE/ipv6-filters.html"
+ *       >http://www.space.net/~gert/RIPE/ipv6-filters.html</a>
+ * </ul>
+ *
+ * @author Erik Kline
+ * @since 5.0
+ */
+@Beta
+public final class InetAddresses {
+  private static final int IPV4_PART_COUNT = 4;
+  private static final int IPV6_PART_COUNT = 8;
+  private static final Inet4Address LOOPBACK4 =
+      (Inet4Address) forString("127.0.0.1");
+  private static final Inet4Address ANY4 =
+      (Inet4Address) forString("0.0.0.0");
+
+  private InetAddresses() {}
+
+  /**
+   * Returns an {@link Inet4Address}, given a byte array representation
+   * of the IPv4 address.
+   *
+   * @param bytes byte array representing an IPv4 address (should be
+   *              of length 4).
+   * @return {@link Inet4Address} corresponding to the supplied byte
+   *         array.
+   * @throws IllegalArgumentException if a valid {@link Inet4Address}
+   *         can not be created.
+   */
+  private static Inet4Address getInet4Address(byte[] bytes) {
+    Preconditions.checkArgument(bytes.length == 4,
+        "Byte array has invalid length for an IPv4 address: %s != 4.",
+        bytes.length);
+
+    try {
+      InetAddress ipv4 = InetAddress.getByAddress(bytes);
+      if (!(ipv4 instanceof Inet4Address)) {
+        throw new UnknownHostException(
+            String.format("'%s' is not an IPv4 address.",
+                          ipv4.getHostAddress()));
+      }
+
+      return (Inet4Address) ipv4;
+    } catch (UnknownHostException e) {
+
+      /*
+       * This really shouldn't happen in practice since all our byte
+       * sequences should be valid IP addresses.
+       *
+       * However {@link InetAddress#getByAddress} is documented as
+       * potentially throwing this "if IP address is of illegal length".
+       *
+       * This is mapped to IllegalArgumentException since, presumably,
+       * the argument triggered some bizarre processing bug.
+       */
+      throw new IllegalArgumentException(
+          String.format("Host address '%s' is not a valid IPv4 address.",
+                        Arrays.toString(bytes)),
+          e);
+    }
+  }
+
+  /**
+   * Returns the {@link InetAddress} having the given string
+   * representation.
+   *
+   * <p>This deliberately avoids all nameservice lookups (e.g. no DNS).
+   *
+   * @param ipString {@code String} containing an IPv4 or IPv6 string literal,
+   *                 e.g. {@code "192.168.0.1"} or {@code "2001:db8::1"}
+   * @return {@link InetAddress} representing the argument
+   * @throws IllegalArgumentException if the argument is not a valid
+   *         IP string literal
+   */
+  public static InetAddress forString(String ipString) {
+    byte[] addr = ipStringToBytes(ipString);
+
+    // The argument was malformed, i.e. not an IP string literal.
+    if (addr == null) {
+      throw new IllegalArgumentException(
+          String.format("'%s' is not an IP string literal.", ipString));
+    }
+
+    try {
+      return InetAddress.getByAddress(addr);
+    } catch (UnknownHostException e) {
+
+      /*
+       * This really shouldn't happen in practice since all our byte
+       * sequences should be valid IP addresses.
+       *
+       * However {@link InetAddress#getByAddress} is documented as
+       * potentially throwing this "if IP address is of illegal length".
+       *
+       * This is mapped to IllegalArgumentException since, presumably,
+       * the argument triggered some processing bug in either
+       * {@link IPAddressUtil#textToNumericFormatV4} or
+       * {@link IPAddressUtil#textToNumericFormatV6}.
+       */
+      throw new IllegalArgumentException(
+          String.format("'%s' is extremely broken.", ipString), e);
+    }
+  }
+
+  /**
+   * Returns {@code true} if the supplied string is a valid IP string
+   * literal, {@code false} otherwise.
+   *
+   * @param ipString {@code String} to evaluated as an IP string literal
+   * @return {@code true} if the argument is a valid IP string literal
+   */
+  public static boolean isInetAddress(String ipString) {
+    return ipStringToBytes(ipString) != null;
+  }
+
+  private static byte[] ipStringToBytes(String ipString) {
+    // Make a first pass to categorize the characters in this string.
+    boolean hasColon = false;
+    boolean hasDot = false;
+    for (int i = 0; i < ipString.length(); i++) {
+      char c = ipString.charAt(i);
+      if (c == '.') {
+        hasDot = true;
+      } else if (c == ':') {
+        if (hasDot) {
+          return null;  // Colons must not appear after dots.
+        }
+        hasColon = true;
+      } else if (Character.digit(c, 16) == -1) {
+        return null;  // Everything else must be a decimal or hex digit.
+      }
+    }
+
+    // Now decide which address family to parse.
+    if (hasColon) {
+      if (hasDot) {
+        ipString = convertDottedQuadToHex(ipString);
+        if (ipString == null) {
+          return null;
+        }
+      }
+      return textToNumericFormatV6(ipString);
+    } else if (hasDot) {
+      return textToNumericFormatV4(ipString);
+    }
+    return null;
+  }
+
+  private static byte[] textToNumericFormatV4(String ipString) {
+    String[] address = ipString.split("\\.", IPV4_PART_COUNT + 1);
+    if (address.length != IPV4_PART_COUNT) {
+      return null;
+    }
+
+    byte[] bytes = new byte[IPV4_PART_COUNT];
+    try {
+      for (int i = 0; i < bytes.length; i++) {
+        bytes[i] = parseOctet(address[i]);
+      }
+    } catch (NumberFormatException ex) {
+      return null;
+    }
+
+    return bytes;
+  }
+
+  private static byte[] textToNumericFormatV6(String ipString) {
+    // An address can have [2..8] colons, and N colons make N+1 parts.
+    String[] parts = ipString.split(":", IPV6_PART_COUNT + 2);
+    if (parts.length < 3 || parts.length > IPV6_PART_COUNT + 1) {
+      return null;
+    }
+
+    // Disregarding the endpoints, find "::" with nothing in between.
+    // This indicates that a run of zeroes has been skipped.
+    int skipIndex = -1;
+    for (int i = 1; i < parts.length - 1; i++) {
+      if (parts[i].length() == 0) {
+        if (skipIndex >= 0) {
+          return null;  // Can't have more than one ::
+        }
+        skipIndex = i;
+      }
+    }
+
+    int partsHi;  // Number of parts to copy from above/before the "::"
+    int partsLo;  // Number of parts to copy from below/after the "::"
+    if (skipIndex >= 0) {
+      // If we found a "::", then check if it also covers the endpoints.
+      partsHi = skipIndex;
+      partsLo = parts.length - skipIndex - 1;
+      if (parts[0].length() == 0 && --partsHi != 0) {
+        return null;  // ^: requires ^::
+      }
+      if (parts[parts.length - 1].length() == 0 && --partsLo != 0) {
+        return null;  // :$ requires ::$
+      }
+    } else {
+      // Otherwise, allocate the entire address to partsHi.  The endpoints
+      // could still be empty, but parseHextet() will check for that.
+      partsHi = parts.length;
+      partsLo = 0;
+    }
+
+    // If we found a ::, then we must have skipped at least one part.
+    // Otherwise, we must have exactly the right number of parts.
+    int partsSkipped = IPV6_PART_COUNT - (partsHi + partsLo);
+    if (!(skipIndex >= 0 ? partsSkipped >= 1 : partsSkipped == 0)) {
+      return null;
+    }
+
+    // Now parse the hextets into a byte array.
+    ByteBuffer rawBytes = ByteBuffer.allocate(2 * IPV6_PART_COUNT);
+    try {
+      for (int i = 0; i < partsHi; i++) {
+        rawBytes.putShort(parseHextet(parts[i]));
+      }
+      for (int i = 0; i < partsSkipped; i++) {
+        rawBytes.putShort((short) 0);
+      }
+      for (int i = partsLo; i > 0; i--) {
+        rawBytes.putShort(parseHextet(parts[parts.length - i]));
+      }
+    } catch (NumberFormatException ex) {
+      return null;
+    }
+    return rawBytes.array();
+  }
+
+  private static String convertDottedQuadToHex(String ipString) {
+    int lastColon = ipString.lastIndexOf(':');
+    String initialPart = ipString.substring(0, lastColon + 1);
+    String dottedQuad = ipString.substring(lastColon + 1);
+    byte[] quad = textToNumericFormatV4(dottedQuad);
+    if (quad == null) {
+      return null;
+    }
+    String penultimate = Integer.toHexString(((quad[0] & 0xff) << 8) | (quad[1] & 0xff));
+    String ultimate = Integer.toHexString(((quad[2] & 0xff) << 8) | (quad[3] & 0xff));
+    return initialPart + penultimate + ":" + ultimate;
+  }
+
+  private static byte parseOctet(String ipPart) {
+    // Note: we already verified that this string contains only hex digits.
+    int octet = Integer.parseInt(ipPart);
+    // Disallow leading zeroes, because no clear standard exists on
+    // whether these should be interpreted as decimal or octal.
+    if (octet > 255 || (ipPart.startsWith("0") && ipPart.length() > 1)) {
+      throw new NumberFormatException();
+    }
+    return (byte) octet;
+  }
+
+  private static short parseHextet(String ipPart) {
+    // Note: we already verified that this string contains only hex digits.
+    int hextet = Integer.parseInt(ipPart, 16);
+    if (hextet > 0xffff) {
+      throw new NumberFormatException();
+    }
+    return (short) hextet;
+  }
+
+  /**
+   * Returns the string representation of an {@link InetAddress}.
+   *
+   * <p>For IPv4 addresses, this is identical to
+   * {@link InetAddress#getHostAddress()}, but for IPv6 addresses, the output
+   * follows <a href="http://tools.ietf.org/html/rfc5952">RFC 5952</a>
+   * section 4.  The main difference is that this method uses "::" for zero
+   * compression, while Java's version uses the uncompressed form.
+   *
+   * <p>This method uses hexadecimal for all IPv6 addresses, including
+   * IPv4-mapped IPv6 addresses such as "::c000:201".  The output does not
+   * include a Scope ID.
+   *
+   * @param ip {@link InetAddress} to be converted to an address string
+   * @return {@code String} containing the text-formatted IP address
+   * @since 10.0
+   */
+  public static String toAddrString(InetAddress ip) {
+    Preconditions.checkNotNull(ip);
+    if (ip instanceof Inet4Address) {
+      // For IPv4, Java's formatting is good enough.
+      return ip.getHostAddress();
+    }
+    Preconditions.checkArgument(ip instanceof Inet6Address);
+    byte[] bytes = ip.getAddress();
+    int[] hextets = new int[IPV6_PART_COUNT];
+    for (int i = 0; i < hextets.length; i++) {
+      hextets[i] = Ints.fromBytes(
+          (byte) 0, (byte) 0, bytes[2 * i], bytes[2 * i + 1]);
+    }
+    compressLongestRunOfZeroes(hextets);
+    return hextetsToIPv6String(hextets);
+  }
+
+  /**
+   * Identify and mark the longest run of zeroes in an IPv6 address.
+   *
+   * <p>Only runs of two or more hextets are considered.  In case of a tie, the
+   * leftmost run wins.  If a qualifying run is found, its hextets are replaced
+   * by the sentinel value -1.
+   *
+   * @param hextets {@code int[]} mutable array of eight 16-bit hextets.
+   */
+  private static void compressLongestRunOfZeroes(int[] hextets) {
+    int bestRunStart = -1;
+    int bestRunLength = -1;
+    int runStart = -1;
+    for (int i = 0; i < hextets.length + 1; i++) {
+      if (i < hextets.length && hextets[i] == 0) {
+        if (runStart < 0) {
+          runStart = i;
+        }
+      } else if (runStart >= 0) {
+        int runLength = i - runStart;
+        if (runLength > bestRunLength) {
+          bestRunStart = runStart;
+          bestRunLength = runLength;
+        }
+        runStart = -1;
+      }
+    }
+    if (bestRunLength >= 2) {
+      Arrays.fill(hextets, bestRunStart, bestRunStart + bestRunLength, -1);
+    }
+  }
+
+  /** 
+   * Convert a list of hextets into a human-readable IPv6 address.
+   *
+   * <p>In order for "::" compression to work, the input should contain negative
+   * sentinel values in place of the elided zeroes.
+   *
+   * @param hextets {@code int[]} array of eight 16-bit hextets, or -1s.
+   */
+  private static String hextetsToIPv6String(int[] hextets) {
+    /*
+     * While scanning the array, handle these state transitions:
+     *   start->num => "num"     start->gap => "::"
+     *   num->num   => ":num"    num->gap   => "::"
+     *   gap->num   => "num"     gap->gap   => ""
+     */
+    StringBuilder buf = new StringBuilder(39);
+    boolean lastWasNumber = false;
+    for (int i = 0; i < hextets.length; i++) {
+      boolean thisIsNumber = hextets[i] >= 0;
+      if (thisIsNumber) {
+        if (lastWasNumber) {
+          buf.append(':');
+        }
+        buf.append(Integer.toHexString(hextets[i]));
+      } else {
+        if (i == 0 || lastWasNumber) {
+          buf.append("::");
+        }
+      }
+      lastWasNumber = thisIsNumber;
+    }
+    return buf.toString();
+  }
+
+  /**
+   * Returns the string representation of an {@link InetAddress} suitable
+   * for inclusion in a URI.
+   *
+   * <p>For IPv4 addresses, this is identical to
+   * {@link InetAddress#getHostAddress()}, but for IPv6 addresses it
+   * compresses zeroes and surrounds the text with square brackets; for example
+   * {@code "[2001:db8::1]"}.
+   *
+   * <p>Per section 3.2.2 of
+   * <a target="_parent"
+   *    href="http://tools.ietf.org/html/rfc3986#section-3.2.2"
+   *  >http://tools.ietf.org/html/rfc3986</a>,
+   * a URI containing an IPv6 string literal is of the form
+   * {@code "http://[2001:db8::1]:8888/index.html"}.
+   *
+   * <p>Use of either {@link InetAddresses#toAddrString},
+   * {@link InetAddress#getHostAddress()}, or this method is recommended over
+   * {@link InetAddress#toString()} when an IP address string literal is
+   * desired.  This is because {@link InetAddress#toString()} prints the
+   * hostname and the IP address string joined by a "/".
+   *
+   * @param ip {@link InetAddress} to be converted to URI string literal
+   * @return {@code String} containing URI-safe string literal
+   */
+  public static String toUriString(InetAddress ip) {
+    if (ip instanceof Inet6Address) {
+      return "[" + toAddrString(ip) + "]";
+    }
+    return toAddrString(ip);
+  }
+
+  /**
+   * Returns an InetAddress representing the literal IPv4 or IPv6 host
+   * portion of a URL, encoded in the format specified by RFC 3986 section 3.2.2.
+   *
+   * <p>This function is similar to {@link InetAddresses#forString(String)},
+   * however, it requires that IPv6 addresses are surrounded by square brackets.
+   *
+   * <p>This function is the inverse of
+   * {@link InetAddresses#toUriString(java.net.InetAddress)}.
+   *
+   * @param hostAddr A RFC 3986 section 3.2.2 encoded IPv4 or IPv6 address
+   * @return an InetAddress representing the address in {@code hostAddr}
+   * @throws IllegalArgumentException if {@code hostAddr} is not a valid
+   *     IPv4 address, or IPv6 address surrounded by square brackets
+   */
+  public static InetAddress forUriString(String hostAddr) {
+    Preconditions.checkNotNull(hostAddr);
+    Preconditions.checkArgument(hostAddr.length() > 0, "host string is empty");
+    InetAddress retval = null;
+
+    // IPv4 address?
+    try {
+      retval = forString(hostAddr);
+      if (retval instanceof Inet4Address) {
+        return retval;
+      }
+    } catch (IllegalArgumentException e) {
+      // Not a valid IP address, fall through.
+    }
+
+    // IPv6 address
+    if (!(hostAddr.startsWith("[") && hostAddr.endsWith("]"))) {
+      throw new IllegalArgumentException("Not a valid address: \"" + hostAddr + '"');
+    }
+
+    retval = forString(hostAddr.substring(1, hostAddr.length() - 1));
+    if (retval instanceof Inet6Address) {
+      return retval;
+    }
+
+    throw new IllegalArgumentException("Not a valid address: \"" + hostAddr + '"');
+  }
+
+  /**
+   * Returns {@code true} if the supplied string is a valid URI IP string
+   * literal, {@code false} otherwise.
+   *
+   * @param ipString {@code String} to evaluated as an IP URI host string literal
+   * @return {@code true} if the argument is a valid IP URI host
+   */
+  public static boolean isUriInetAddress(String ipString) {
+    try {
+      forUriString(ipString);
+      return true;
+    } catch (IllegalArgumentException e) {
+      return false;
+    }
+  }
+
+  /**
+   * Evaluates whether the argument is an IPv6 "compat" address.
+   *
+   * <p>An "IPv4 compatible", or "compat", address is one with 96 leading
+   * bits of zero, with the remaining 32 bits interpreted as an
+   * IPv4 address.  These are conventionally represented in string
+   * literals as {@code "::192.168.0.1"}, though {@code "::c0a8:1"} is
+   * also considered an IPv4 compatible address (and equivalent to
+   * {@code "::192.168.0.1"}).
+   *
+   * <p>For more on IPv4 compatible addresses see section 2.5.5.1 of
+   * <a target="_parent"
+   *    href="http://tools.ietf.org/html/rfc4291#section-2.5.5.1"
+   *    >http://tools.ietf.org/html/rfc4291</a>
+   *
+   * <p>NOTE: This method is different from
+   * {@link Inet6Address#isIPv4CompatibleAddress} in that it more
+   * correctly classifies {@code "::"} and {@code "::1"} as
+   * proper IPv6 addresses (which they are), NOT IPv4 compatible
+   * addresses (which they are generally NOT considered to be).
+   *
+   * @param ip {@link Inet6Address} to be examined for embedded IPv4
+   *           compatible address format
+   * @return {@code true} if the argument is a valid "compat" address
+   */
+  public static boolean isCompatIPv4Address(Inet6Address ip) {
+    if (!ip.isIPv4CompatibleAddress()) {
+      return false;
+    }
+
+    byte[] bytes = ip.getAddress();
+    if ((bytes[12] == 0) && (bytes[13] == 0) && (bytes[14] == 0)
+            && ((bytes[15] == 0) || (bytes[15] == 1))) {
+      return false;
+    }
+
+    return true;
+  }
+
+  /**
+   * Returns the IPv4 address embedded in an IPv4 compatible address.
+   *
+   * @param ip {@link Inet6Address} to be examined for an embedded
+   *           IPv4 address
+   * @return {@link Inet4Address} of the embedded IPv4 address
+   * @throws IllegalArgumentException if the argument is not a valid
+   *         IPv4 compatible address
+   */
+  public static Inet4Address getCompatIPv4Address(Inet6Address ip) {
+    Preconditions.checkArgument(isCompatIPv4Address(ip),
+        "Address '%s' is not IPv4-compatible.", toAddrString(ip));
+
+    return getInet4Address(copyOfRange(ip.getAddress(), 12, 16));
+  }
+
+  /**
+   * Evaluates whether the argument is a 6to4 address.
+   *
+   * <p>6to4 addresses begin with the {@code "2002::/16"} prefix.
+   * The next 32 bits are the IPv4 address of the host to which
+   * IPv6-in-IPv4 tunneled packets should be routed.
+   *
+   * <p>For more on 6to4 addresses see section 2 of
+   * <a target="_parent" href="http://tools.ietf.org/html/rfc3056#section-2"
+   *    >http://tools.ietf.org/html/rfc3056</a>
+   *
+   * @param ip {@link Inet6Address} to be examined for 6to4 address
+   *        format
+   * @return {@code true} if the argument is a 6to4 address
+   */
+  public static boolean is6to4Address(Inet6Address ip) {
+    byte[] bytes = ip.getAddress();
+    return (bytes[0] == (byte) 0x20) && (bytes[1] == (byte) 0x02);
+  }
+
+  /**
+   * Returns the IPv4 address embedded in a 6to4 address.
+   *
+   * @param ip {@link Inet6Address} to be examined for embedded IPv4
+   *           in 6to4 address.
+   * @return {@link Inet4Address} of embedded IPv4 in 6to4 address.
+   * @throws IllegalArgumentException if the argument is not a valid
+   *         IPv6 6to4 address.
+   */
+  public static Inet4Address get6to4IPv4Address(Inet6Address ip) {
+    Preconditions.checkArgument(is6to4Address(ip),
+        "Address '%s' is not a 6to4 address.", toAddrString(ip));
+
+    return getInet4Address(copyOfRange(ip.getAddress(), 2, 6));
+  }
+
+  /**
+   * A simple data class to encapsulate the information to be found in a
+   * Teredo address.
+   *
+   * <p>All of the fields in this class are encoded in various portions
+   * of the IPv6 address as part of the protocol.  More protocols details
+   * can be found at:
+   * <a target="_parent" href="http://en.wikipedia.org/wiki/Teredo_tunneling"
+   *    >http://en.wikipedia.org/wiki/Teredo_tunneling</a>.
+   *
+   * <p>The RFC can be found here:
+   * <a target="_parent" href="http://tools.ietf.org/html/rfc4380"
+   *    >http://tools.ietf.org/html/rfc4380</a>.
+   *
+   * @since 5.0
+   */
+  @Beta
+  public static final class TeredoInfo {
+    private final Inet4Address server;
+    private final Inet4Address client;
+    private final int port;
+    private final int flags;
+
+    /**
+     * Constructs a TeredoInfo instance.
+     *
+     * <p>Both server and client can be {@code null}, in which case the
+     * value {@code "0.0.0.0"} will be assumed.
+     *
+     * @throws IllegalArgumentException if either of the {@code port}
+     *         or the {@code flags} arguments are out of range of an
+     *         unsigned short
+     */
+    // TODO: why is this public?
+    public TeredoInfo(@Nullable Inet4Address server,
+                      @Nullable Inet4Address client,
+                      int port, int flags) {
+      Preconditions.checkArgument((port >= 0) && (port <= 0xffff),
+          "port '%s' is out of range (0 <= port <= 0xffff)", port);
+      Preconditions.checkArgument((flags >= 0) && (flags <= 0xffff),
+          "flags '%s' is out of range (0 <= flags <= 0xffff)", flags);
+
+      if (server != null) {
+        this.server = server;
+      } else {
+        this.server = ANY4;
+      }
+
+      if (client != null) {
+        this.client = client;
+      } else {
+        this.client = ANY4;
+      }
+
+      this.port = port;
+      this.flags = flags;
+    }
+
+    public Inet4Address getServer() {
+      return server;
+    }
+
+    public Inet4Address getClient() {
+      return client;
+    }
+
+    public int getPort() {
+      return port;
+    }
+
+    public int getFlags() {
+      return flags;
+    }
+  }
+
+  /**
+   * Evaluates whether the argument is a Teredo address.
+   *
+   * <p>Teredo addresses begin with the {@code "2001::/32"} prefix.
+   *
+   * @param ip {@link Inet6Address} to be examined for Teredo address
+   *        format.
+   * @return {@code true} if the argument is a Teredo address
+   */
+  public static boolean isTeredoAddress(Inet6Address ip) {
+    byte[] bytes = ip.getAddress();
+    return (bytes[0] == (byte) 0x20) && (bytes[1] == (byte) 0x01)
+           && (bytes[2] == 0) && (bytes[3] == 0);
+  }
+
+  /**
+   * Returns the Teredo information embedded in a Teredo address.
+   *
+   * @param ip {@link Inet6Address} to be examined for embedded Teredo
+   *           information
+   * @return extracted {@code TeredoInfo}
+   * @throws IllegalArgumentException if the argument is not a valid
+   *         IPv6 Teredo address
+   */
+  public static TeredoInfo getTeredoInfo(Inet6Address ip) {
+    Preconditions.checkArgument(isTeredoAddress(ip),
+        "Address '%s' is not a Teredo address.", toAddrString(ip));
+
+    byte[] bytes = ip.getAddress();
+    Inet4Address server = getInet4Address(copyOfRange(bytes, 4, 8));
+
+    int flags = ByteStreams.newDataInput(bytes, 8).readShort() & 0xffff;
+
+    // Teredo obfuscates the mapped client port, per section 4 of the RFC.
+    int port = ~ByteStreams.newDataInput(bytes, 10).readShort() & 0xffff;
+
+    byte[] clientBytes = copyOfRange(bytes, 12, 16);
+    for (int i = 0; i < clientBytes.length; i++) {
+      // Teredo obfuscates the mapped client IP, per section 4 of the RFC.
+      clientBytes[i] = (byte) ~clientBytes[i];
+    }
+    Inet4Address client = getInet4Address(clientBytes);
+
+    return new TeredoInfo(server, client, port, flags);
+  }
+
+  /**
+   * Evaluates whether the argument is an ISATAP address.
+   *
+   * <p>From RFC 5214: "ISATAP interface identifiers are constructed in
+   * Modified EUI-64 format [...] by concatenating the 24-bit IANA OUI
+   * (00-00-5E), the 8-bit hexadecimal value 0xFE, and a 32-bit IPv4
+   * address in network byte order [...]"
+   *
+   * <p>For more on ISATAP addresses see section 6.1 of
+   * <a target="_parent" href="http://tools.ietf.org/html/rfc5214#section-6.1"
+   *    >http://tools.ietf.org/html/rfc5214</a>
+   *
+   * @param ip {@link Inet6Address} to be examined for ISATAP address
+   *        format.
+   * @return {@code true} if the argument is an ISATAP address
+   */
+  public static boolean isIsatapAddress(Inet6Address ip) {
+
+    // If it's a Teredo address with the right port (41217, or 0xa101)
+    // which would be encoded as 0x5efe then it can't be an ISATAP address.
+    if (isTeredoAddress(ip)) {
+      return false;
+    }
+
+    byte[] bytes = ip.getAddress();
+
+    if ((bytes[8] | (byte) 0x03) != (byte) 0x03) {
+
+      // Verify that high byte of the 64 bit identifier is zero, modulo
+      // the U/L and G bits, with which we are not concerned.
+      return false;
+    }
+
+    return (bytes[9] == (byte) 0x00) && (bytes[10] == (byte) 0x5e)
+           && (bytes[11] == (byte) 0xfe);
+  }
+
+  /**
+   * Returns the IPv4 address embedded in an ISATAP address.
+   *
+   * @param ip {@link Inet6Address} to be examined for embedded IPv4
+   *           in ISATAP address
+   * @return {@link Inet4Address} of embedded IPv4 in an ISATAP address
+   * @throws IllegalArgumentException if the argument is not a valid
+   *         IPv6 ISATAP address
+   */
+  public static Inet4Address getIsatapIPv4Address(Inet6Address ip) {
+    Preconditions.checkArgument(isIsatapAddress(ip),
+        "Address '%s' is not an ISATAP address.", toAddrString(ip));
+
+    return getInet4Address(copyOfRange(ip.getAddress(), 12, 16));
+  }
+
+  /**
+   * Examines the Inet6Address to determine if it is an IPv6 address of one
+   * of the specified address types that contain an embedded IPv4 address.
+   *
+   * <p>NOTE: ISATAP addresses are explicitly excluded from this method
+   * due to their trivial spoofability.  With other transition addresses
+   * spoofing involves (at least) infection of one's BGP routing table.
+   *
+   * @param ip {@link Inet6Address} to be examined for embedded IPv4
+   *           client address.
+   * @return {@code true} if there is an embedded IPv4 client address.
+   * @since 7.0
+   */
+  public static boolean hasEmbeddedIPv4ClientAddress(Inet6Address ip) {
+    return isCompatIPv4Address(ip) || is6to4Address(ip) ||
+           isTeredoAddress(ip);
+  }
+
+  /**
+   * Examines the Inet6Address to extract the embedded IPv4 client address
+   * if the InetAddress is an IPv6 address of one of the specified address
+   * types that contain an embedded IPv4 address.
+   *
+   * <p>NOTE: ISATAP addresses are explicitly excluded from this method
+   * due to their trivial spoofability.  With other transition addresses
+   * spoofing involves (at least) infection of one's BGP routing table.
+   *
+   * @param ip {@link Inet6Address} to be examined for embedded IPv4
+   *           client address.
+   * @return {@link Inet4Address} of embedded IPv4 client address.
+   * @throws IllegalArgumentException if the argument does not have a valid
+   *         embedded IPv4 address.
+   */
+  public static Inet4Address getEmbeddedIPv4ClientAddress(Inet6Address ip) {
+    if (isCompatIPv4Address(ip)) {
+      return getCompatIPv4Address(ip);
+    }
+
+    if (is6to4Address(ip)) {
+      return get6to4IPv4Address(ip);
+    }
+
+    if (isTeredoAddress(ip)) {
+      return getTeredoInfo(ip).getClient();
+    }
+
+    throw new IllegalArgumentException(
+        String.format("'%s' has no embedded IPv4 address.",
+                      toAddrString(ip)));
+  }
+
+  /**
+   * Evaluates whether the argument is an "IPv4 mapped" IPv6 address.
+   *
+   * <p>An "IPv4 mapped" address is anything in the range ::ffff:0:0/96
+   * (sometimes written as ::ffff:0.0.0.0/96), with the last 32 bits
+   * interpreted as an IPv4 address.
+   *
+   * <p>For more on IPv4 mapped addresses see section 2.5.5.2 of
+   * <a target="_parent"
+   *    href="http://tools.ietf.org/html/rfc4291#section-2.5.5.2"
+   *    >http://tools.ietf.org/html/rfc4291</a>
+   *
+   * <p>Note: This method takes a {@code String} argument because
+   * {@link InetAddress} automatically collapses mapped addresses to IPv4.
+   * (It is actually possible to avoid this using one of the obscure
+   * {@link Inet6Address} methods, but it would be unwise to depend on such
+   * a poorly-documented feature.)
+   *
+   * @param ipString {@code String} to be examined for embedded IPv4-mapped
+   *     IPv6 address format
+   * @return {@code true} if the argument is a valid "mapped" address
+   * @since 10.0
+   */
+  public static boolean isMappedIPv4Address(String ipString) {
+    byte[] bytes = ipStringToBytes(ipString);
+    if (bytes != null && bytes.length == 16) {
+      for (int i = 0; i < 10; i++) {
+        if (bytes[i] != 0) {
+          return false;
+        }
+      }
+      for (int i = 10; i < 12; i++) {
+        if (bytes[i] != (byte) 0xff) {
+          return false;
+        }
+      }
+      return true;
+    }
+    return false;
+  }
+
+  /**
+   * Coerces an IPv6 address into an IPv4 address.
+   *
+   * <p>HACK: As long as applications continue to use IPv4 addresses for
+   * indexing into tables, accounting, et cetera, it may be necessary to
+   * <b>coerce</b> IPv6 addresses into IPv4 addresses. This function does
+   * so by hashing the upper 64 bits into {@code 224.0.0.0/3}
+   * (64 bits into 29 bits).
+   *
+   * <p>A "coerced" IPv4 address is equivalent to itself.
+   *
+   * <p>NOTE: This function is failsafe for security purposes: ALL IPv6
+   * addresses (except localhost (::1)) are hashed to avoid the security
+   * risk associated with extracting an embedded IPv4 address that might
+   * permit elevated privileges.
+   *
+   * @param ip {@link InetAddress} to "coerce"
+   * @return {@link Inet4Address} represented "coerced" address
+   * @since 7.0
+   */
+  public static Inet4Address getCoercedIPv4Address(InetAddress ip) {
+    if (ip instanceof Inet4Address) {
+      return (Inet4Address) ip;
+    }
+
+    // Special cases:
+    byte[] bytes = ip.getAddress();
+    boolean leadingBytesOfZero = true;
+    for (int i = 0; i < 15; ++i) {
+      if (bytes[i] != 0) {
+        leadingBytesOfZero = false;
+        break;
+      }
+    }
+    if (leadingBytesOfZero && (bytes[15] == 1)) {
+      return LOOPBACK4;  // ::1
+    } else if (leadingBytesOfZero && (bytes[15] == 0)) {
+      return ANY4;  // ::0
+    }
+
+    Inet6Address ip6 = (Inet6Address) ip;
+    long addressAsLong = 0;
+    if (hasEmbeddedIPv4ClientAddress(ip6)) {
+      addressAsLong = getEmbeddedIPv4ClientAddress(ip6).hashCode();
+    } else {
+
+      // Just extract the high 64 bits (assuming the rest is user-modifiable).
+      addressAsLong = ByteBuffer.wrap(ip6.getAddress(), 0, 8).getLong();
+    }
+
+    // Many strategies for hashing are possible.  This might suffice for now.
+    int coercedHash = hash64To32(addressAsLong);
+
+    // Squash into 224/4 Multicast and 240/4 Reserved space (i.e. 224/3).
+    coercedHash |= 0xe0000000;
+
+    // Fixup to avoid some "illegal" values.  Currently the only potential
+    // illegal value is 255.255.255.255.
+    if (coercedHash == 0xffffffff) {
+      coercedHash = 0xfffffffe;
+    }
+
+    return getInet4Address(Ints.toByteArray(coercedHash));
+  }
+
+  /**
+   * Returns an {@code int} hash of a 64-bit long.
+   *
+   * This comes from http://www.concentric.net/~ttwang/tech/inthash.htm
+   *
+   * This hash gives no guarantees on the cryptographic suitability nor the
+   * quality of randomness produced, and the mapping may change in the future.
+   *
+   * @param key A 64-bit number to hash
+   * @return {@code int} the input hashed into 32 bits
+   */
+  @VisibleForTesting static int hash64To32(long key) {
+    key = (~key) + (key << 18);
+    key = key ^ (key >>> 31);
+    key = key * 21;
+    key = key ^ (key >>> 11);
+    key = key + (key << 6);
+    key = key ^ (key >>> 22);
+    return (int) key;
+  }
+
+  /**
+   * Returns an integer representing an IPv4 address regardless of
+   * whether the supplied argument is an IPv4 address or not.
+   *
+   * <p>IPv6 addresses are <b>coerced</b> to IPv4 addresses before being
+   * converted to integers.
+   *
+   * <p>As long as there are applications that assume that all IP addresses
+   * are IPv4 addresses and can therefore be converted safely to integers
+   * (for whatever purpose) this function can be used to handle IPv6
+   * addresses as well until the application is suitably fixed.
+   *
+   * <p>NOTE: an IPv6 address coerced to an IPv4 address can only be used
+   * for such purposes as rudimentary identification or indexing into a
+   * collection of real {@link InetAddress}es.  They cannot be used as
+   * real addresses for the purposes of network communication.
+   *
+   * @param ip {@link InetAddress} to convert
+   * @return {@code int}, "coerced" if ip is not an IPv4 address
+   * @since 7.0
+   */
+  public static int coerceToInteger(InetAddress ip) {
+    return ByteStreams.newDataInput(getCoercedIPv4Address(ip).getAddress()).readInt();
+  }
+
+  /**
+   * Returns an Inet4Address having the integer value specified by
+   * the argument.
+   *
+   * @param address {@code int}, the 32bit integer address to be converted
+   * @return {@link Inet4Address} equivalent of the argument
+   */
+  public static Inet4Address fromInteger(int address) {
+    return getInet4Address(Ints.toByteArray(address));
+  }
+
+  /**
+   * Returns an address from a <b>little-endian ordered</b> byte array
+   * (the opposite of what {@link InetAddress#getByAddress} expects).
+   *
+   * <p>IPv4 address byte array must be 4 bytes long and IPv6 byte array
+   * must be 16 bytes long.
+   *
+   * @param addr the raw IP address in little-endian byte order
+   * @return an InetAddress object created from the raw IP address
+   * @throws UnknownHostException if IP address is of illegal length
+   */
+  public static InetAddress fromLittleEndianByteArray(byte[] addr)
+      throws UnknownHostException {
+    byte[] reversed = new byte[addr.length];
+    for (int i = 0; i < addr.length; i++) {
+      reversed[i] = addr[addr.length - i - 1];
+    }
+    return InetAddress.getByAddress(reversed);
+  }
+
+  /**
+   * Returns a new InetAddress that is one more than the passed in address.
+   * This method works for both IPv4 and IPv6 addresses.
+   *
+   * @param address the InetAddress to increment
+   * @return a new InetAddress that is one more than the passed in address.
+   * @throws IllegalArgumentException if InetAddress is at the end of its
+   *         range.
+   * @since 10.0
+   */
+  public static InetAddress increment(InetAddress address) {
+    byte[] addr = address.getAddress();
+    int i = addr.length - 1;
+    while (i >= 0 && addr[i] == (byte) 0xff) {
+      addr[i] = 0;
+      i--;
+    }
+
+    Preconditions.checkArgument(i >= 0, "Incrementing %s would wrap.", address);
+
+    addr[i]++;
+    try {
+      return InetAddress.getByAddress(addr);
+    } catch (UnknownHostException e) {
+      throw new AssertionError(e);
+    }
+  }
+
+  /**
+   * Returns true if the InetAddress is either 255.255.255.255 for IPv4 or
+   * ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff for IPv6.
+   *
+   * @return true if the InetAddress is either 255.255.255.255 for IPv4 or
+   *          ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff for IPv6.
+   * @since 10.0
+   */
+  public static boolean isMaximum(InetAddress address) {
+    byte[] addr = address.getAddress();
+    for (int i = 0; i < addr.length; i++) {
+      if (addr[i] != (byte) 0xff) {
+        return false;
+      }
+    }
+    return true;
+  }
+
+  /**
+   * This method emulates the Java 6 method
+   * {@code Arrays.copyOfRange(byte, int, int)}, which is not available in
+   * Java 5, and thus cannot be used in Guava code.
+   */
+  private static byte[] copyOfRange(byte[] original, int from, int to) {
+    Preconditions.checkNotNull(original);
+
+    int end = Math.min(to, original.length);
+    byte[] result = new byte[to - from];
+
+    System.arraycopy(original, from, result, 0, end - from);
+    return result;
+  }
+}
diff --git a/guava/src/com/google/common/net/InternetDomainName.java b/guava/src/com/google/common/net/InternetDomainName.java
new file mode 100644
index 0000000..7537271
--- /dev/null
+++ b/guava/src/com/google/common/net/InternetDomainName.java
@@ -0,0 +1,578 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.net;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkState;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.base.Ascii;
+import com.google.common.base.CharMatcher;
+import com.google.common.base.Joiner;
+import com.google.common.base.Objects;
+import com.google.common.base.Splitter;
+import com.google.common.collect.ImmutableList;
+
+import java.util.List;
+
+import javax.annotation.Nullable;
+
+/**
+ * An immutable well-formed internet domain name, such as {@code com} or {@code
+ * foo.co.uk}. Only syntactic analysis is performed; no DNS lookups or other
+ * network interactions take place. Thus there is no guarantee that the domain
+ * actually exists on the internet.
+ *
+ * <p>One common use of this class is to determine whether a given string is
+ * likely to represent an addressable domain on the web -- that is, for a
+ * candidate string {@code "xxx"}, might browsing to {@code "http://xxx/"}
+ * result in a webpage being displayed? In the past, this test was frequently
+ * done by determining whether the domain ended with a {@linkplain
+ * #isPublicSuffix() public suffix} but was not itself a public suffix. However,
+ * this test is no longer accurate. There are many domains which are both public
+ * suffixes and addressable as hosts; {@code "uk.com"} is one example. As a
+ * result, the only useful test to determine if a domain is a plausible web host
+ * is {@link #hasPublicSuffix()}. This will return {@code true} for many domains
+ * which (currently) are not hosts, such as {@code "com"}), but given that any
+ * public suffix may become a host without warning, it is better to err on the
+ * side of permissiveness and thus avoid spurious rejection of valid sites.
+ *
+ * <p>During construction, names are normalized in two ways:
+ * <ol>
+ * <li>ASCII uppercase characters are converted to lowercase.
+ * <li>Unicode dot separators other than the ASCII period ({@code '.'}) are
+ * converted to the ASCII period.
+ * </ol>
+ * The normalized values will be returned from {@link #name()} and
+ * {@link #parts()}, and will be reflected in the result of
+ * {@link #equals(Object)}.
+ *
+ * <p><a href="http://en.wikipedia.org/wiki/Internationalized_domain_name">
+ * internationalized domain names</a> such as {@code 网络.cn} are supported, as
+ * are the equivalent <a
+ * href="http://en.wikipedia.org/wiki/Internationalized_domain_name">IDNA
+ * Punycode-encoded</a> versions.
+ *
+ * @author Craig Berry
+ * @since 5.0
+ */
+@Beta
+@GwtCompatible(emulated = true)
+public final class InternetDomainName {
+
+  private static final CharMatcher DOTS_MATCHER =
+      CharMatcher.anyOf(".\u3002\uFF0E\uFF61");
+  private static final Splitter DOT_SPLITTER = Splitter.on('.');
+  private static final Joiner DOT_JOINER = Joiner.on('.');
+
+  /**
+   * Value of {@link #publicSuffixIndex} which indicates that no public suffix
+   * was found.
+   */
+  private static final int NO_PUBLIC_SUFFIX_FOUND = -1;
+
+  private static final String DOT_REGEX = "\\.";
+
+  /**
+   * Maximum parts (labels) in a domain name. This value arises from
+   * the 255-octet limit described in
+   * <a href="http://www.ietf.org/rfc/rfc2181.txt">RFC 2181</a> part 11 with
+   * the fact that the encoding of each part occupies at least two bytes
+   * (dot plus label externally, length byte plus label internally). Thus, if
+   * all labels have the minimum size of one byte, 127 of them will fit.
+   */
+  private static final int MAX_PARTS = 127;
+
+  /**
+   * Maximum length of a full domain name, including separators, and
+   * leaving room for the root label. See
+   * <a href="http://www.ietf.org/rfc/rfc2181.txt">RFC 2181</a> part 11.
+   */
+  private static final int MAX_LENGTH = 253;
+
+  /**
+   * Maximum size of a single part of a domain name. See
+   * <a href="http://www.ietf.org/rfc/rfc2181.txt">RFC 2181</a> part 11.
+   */
+  private static final int MAX_DOMAIN_PART_LENGTH = 63;
+
+  /**
+   * The full domain name, converted to lower case.
+   */
+  private final String name;
+
+  /**
+   * The parts of the domain name, converted to lower case.
+   */
+  private final ImmutableList<String> parts;
+
+  /**
+   * The index in the {@link #parts()} list at which the public suffix begins.
+   * For example, for the domain name {@code www.google.co.uk}, the value would
+   * be 2 (the index of the {@code co} part). The value is negative
+   * (specifically, {@link #NO_PUBLIC_SUFFIX_FOUND}) if no public suffix was
+   * found.
+   */
+  private final int publicSuffixIndex;
+
+  /**
+   * Constructor used to implement {@link #from(String)}, and from subclasses.
+   */
+  InternetDomainName(String name) {
+    // Normalize:
+    // * ASCII characters to lowercase
+    // * All dot-like characters to '.'
+    // * Strip trailing '.'
+
+    name = Ascii.toLowerCase(DOTS_MATCHER.replaceFrom(name, '.'));
+
+    if (name.endsWith(".")) {
+      name = name.substring(0, name.length() - 1);
+    }
+
+    checkArgument(name.length() <= MAX_LENGTH, "Domain name too long: '%s':", name);
+    this.name = name;
+
+    this.parts = ImmutableList.copyOf(DOT_SPLITTER.split(name));
+    checkArgument(parts.size() <= MAX_PARTS, "Domain has too many parts: '%s'", name);
+    checkArgument(validateSyntax(parts), "Not a valid domain name: '%s'", name);
+
+    this.publicSuffixIndex = findPublicSuffix();
+  }
+
+  /**
+   * Returns the index of the leftmost part of the public suffix, or -1 if not
+   * found. Note that the value defined as the "public suffix" may not be a
+   * public suffix according to {@link #isPublicSuffix()} if the domain ends
+   * with an excluded domain pattern such as {@code "nhs.uk"}.
+   */
+  private int findPublicSuffix() {
+    final int partsSize = parts.size();
+
+    for (int i = 0; i < partsSize; i++) {
+      String ancestorName = DOT_JOINER.join(parts.subList(i, partsSize));
+
+      if (TldPatterns.EXACT.contains(ancestorName)) {
+        return i;
+      }
+
+      // Excluded domains (e.g. !nhs.uk) use the next highest
+      // domain as the effective public suffix (e.g. uk).
+
+      if (TldPatterns.EXCLUDED.contains(ancestorName)) {
+        return i + 1;
+      }
+
+      if (matchesWildcardPublicSuffix(ancestorName)) {
+        return i;
+      }
+    }
+
+    return NO_PUBLIC_SUFFIX_FOUND;
+  }
+
+  /**
+   * A deprecated synonym for {@link #from(String)}.
+   *
+   * @param domain A domain name (not IP address)
+   * @throws IllegalArgumentException if {@code name} is not syntactically valid
+   *     according to {@link #isValidLenient}
+   * @since 8.0 (previously named {@code from})
+   * @deprecated Use {@link #from(String)}
+   */
+  @Deprecated
+  public static InternetDomainName fromLenient(String domain) {
+    return from(domain);
+  }
+
+  /**
+   * Returns an instance of {@link InternetDomainName} after lenient
+   * validation.  Specifically, validation against <a
+   * href="http://www.ietf.org/rfc/rfc3490.txt">RFC 3490</a>
+   * ("Internationalizing Domain Names in Applications") is skipped, while
+   * validation against <a
+   * href="http://www.ietf.org/rfc/rfc1035.txt">RFC 1035</a> is relaxed in
+   * the following ways:
+   * <ul>
+   * <li>Any part containing non-ASCII characters is considered valid.
+   * <li>Underscores ('_') are permitted wherever dashes ('-') are permitted.
+   * <li>Parts other than the final part may start with a digit.
+   * </ul>
+   *
+   *
+   * @param domain A domain name (not IP address)
+   * @throws IllegalArgumentException if {@code name} is not syntactically valid
+   *     according to {@link #isValid}
+   * @since 10.0 (previously named {@code fromLenient})
+   */
+  public static InternetDomainName from(String domain) {
+    return new InternetDomainName(checkNotNull(domain));
+  }
+
+  /**
+   * Validation method used by {@from} to ensure that the domain name is
+   * syntactically valid according to RFC 1035.
+   *
+   * @return Is the domain name syntactically valid?
+   */
+  private static boolean validateSyntax(List<String> parts) {
+    final int lastIndex = parts.size() - 1;
+
+    // Validate the last part specially, as it has different syntax rules.
+
+    if (!validatePart(parts.get(lastIndex), true)) {
+      return false;
+    }
+
+    for (int i = 0; i < lastIndex; i++) {
+      String part = parts.get(i);
+      if (!validatePart(part, false)) {
+        return false;
+      }
+    }
+
+    return true;
+  }
+
+  private static final CharMatcher DASH_MATCHER = CharMatcher.anyOf("-_");
+
+  private static final CharMatcher PART_CHAR_MATCHER =
+      CharMatcher.JAVA_LETTER_OR_DIGIT.or(DASH_MATCHER);
+
+  /**
+   * Helper method for {@link #validateSyntax(List)}. Validates that one part of
+   * a domain name is valid.
+   *
+   * @param part The domain name part to be validated
+   * @param isFinalPart Is this the final (rightmost) domain part?
+   * @return Whether the part is valid
+   */
+  private static boolean validatePart(String part, boolean isFinalPart) {
+
+    // These tests could be collapsed into one big boolean expression, but
+    // they have been left as independent tests for clarity.
+
+    if (part.length() < 1 || part.length() > MAX_DOMAIN_PART_LENGTH) {
+      return false;
+    }
+
+    /*
+     * GWT claims to support java.lang.Character's char-classification methods,
+     * but it actually only works for ASCII. So for now, assume any non-ASCII
+     * characters are valid. The only place this seems to be documented is here:
+     * http://osdir.com/ml/GoogleWebToolkitContributors/2010-03/msg00178.html
+     *
+     * <p>ASCII characters in the part are expected to be valid per RFC 1035,
+     * with underscore also being allowed due to widespread practice.
+     */
+
+    String asciiChars = CharMatcher.ASCII.retainFrom(part);
+
+    if (!PART_CHAR_MATCHER.matchesAllOf(asciiChars)) {
+      return false;
+    }
+
+    // No initial or final dashes or underscores.
+
+    if (DASH_MATCHER.matches(part.charAt(0))
+        || DASH_MATCHER.matches(part.charAt(part.length() - 1))) {
+      return false;
+    }
+
+    /*
+     * Note that we allow (in contravention of a strict interpretation of the
+     * relevant RFCs) domain parts other than the last may begin with a digit
+     * (for example, "3com.com"). It's important to disallow an initial digit in
+     * the last part; it's the only thing that stops an IPv4 numeric address
+     * like 127.0.0.1 from looking like a valid domain name.
+     */
+
+    if (isFinalPart && CharMatcher.DIGIT.matches(part.charAt(0))) {
+      return false;
+    }
+
+    return true;
+  }
+
+  /**
+   * Returns the domain name, normalized to all lower case.
+   */
+  public String name() {
+    return name;
+  }
+
+  /**
+   * Returns the individual components of this domain name, normalized to all
+   * lower case. For example, for the domain name {@code mail.google.com}, this
+   * method returns the list {@code ["mail", "google", "com"]}.
+   */
+  public ImmutableList<String> parts() {
+    return parts;
+  }
+
+  /**
+   * Indicates whether this domain name represents a <i>public suffix</i>, as
+   * defined by the Mozilla Foundation's
+   * <a href="http://publicsuffix.org/">Public Suffix List</a> (PSL). A public
+   * suffix is one under which Internet users can directly register names, such
+   * as {@code com}, {@code co.uk} or {@code pvt.k12.wy.us}. Examples of domain
+   * names that are <i>not</i> public suffixes include {@code google}, {@code
+   * google.com} and {@code foo.co.uk}.
+   *
+   * @return {@code true} if this domain name appears exactly on the public
+   *     suffix list
+   * @since 6.0
+   */
+  public boolean isPublicSuffix() {
+    return publicSuffixIndex == 0;
+  }
+
+  /**
+   * Indicates whether this domain name ends in a {@linkplain #isPublicSuffix()
+   * public suffix}, including if it is a public suffix itself. For example,
+   * returns {@code true} for {@code www.google.com}, {@code foo.co.uk} and
+   * {@code com}, but not for {@code google} or {@code google.foo}. This is
+   * the recommended method for determining whether a domain is potentially an
+   * addressable host.
+   *
+   * @since 6.0
+   */
+  public boolean hasPublicSuffix() {
+    return publicSuffixIndex != NO_PUBLIC_SUFFIX_FOUND;
+  }
+
+  /**
+   * Returns the {@linkplain #isPublicSuffix() public suffix} portion of the
+   * domain name, or {@code null} if no public suffix is present.
+   *
+   * @since 6.0
+   */
+  public InternetDomainName publicSuffix() {
+    return hasPublicSuffix() ? ancestor(publicSuffixIndex) : null;
+  }
+
+  /**
+   * Indicates whether this domain name ends in a {@linkplain #isPublicSuffix()
+   * public suffix}, while not being a public suffix itself. For example,
+   * returns {@code true} for {@code www.google.com}, {@code foo.co.uk} and
+   * {@code bar.ca.us}, but not for {@code google}, {@code com}, or {@code
+   * google.foo}.
+   *
+   * <p><b>Warning:</b> a {@code false} result from this method does not imply
+   * that the domain does not represent an addressable host, as many public
+   * suffixes are also addressable hosts. Use {@link #hasPublicSuffix()} for
+   * that test.
+   *
+   * <p>This method can be used to determine whether it will probably be
+   * possible to set cookies on the domain, though even that depends on
+   * individual browsers' implementations of cookie controls. See
+   * <a href="http://www.ietf.org/rfc/rfc2109.txt">RFC 2109</a> for details.
+   *
+   * @since 6.0
+   */
+  public boolean isUnderPublicSuffix() {
+    return publicSuffixIndex > 0;
+  }
+
+  /**
+   * Indicates whether this domain name is composed of exactly one subdomain
+   * component followed by a {@linkplain #isPublicSuffix() public suffix}. For
+   * example, returns {@code true} for {@code google.com} and {@code foo.co.uk},
+   * but not for {@code www.google.com} or {@code co.uk}.
+   *
+   * <p><b>Warning:</b> A {@code true} result from this method does not imply
+   * that the domain is at the highest level which is addressable as a host, as
+   * many public suffixes are also addressable hosts. For example, the domain
+   * {@code bar.uk.com} has a public suffix of {@code uk.com}, so it would
+   * return {@code true} from this method. But {@code uk.com} is itself an
+   * addressable host.
+   *
+   * <p>This method can be used to determine whether a domain is probably the
+   * highest level for which cookies may be set, though even that depends on
+   * individual browsers' implementations of cookie controls. See
+   * <a href="http://www.ietf.org/rfc/rfc2109.txt">RFC 2109</a> for details.
+   *
+   * @since 6.0
+   */
+  public boolean isTopPrivateDomain() {
+    return publicSuffixIndex == 1;
+  }
+
+  /**
+   * Returns the portion of this domain name that is one level beneath the
+   * public suffix. For example, for {@code x.adwords.google.co.uk} it returns
+   * {@code google.co.uk}, since {@code co.uk} is a public suffix.
+   *
+   * <p>If {@link #isTopPrivateDomain()} is true, the current domain name
+   * instance is returned.
+   *
+   * <p>This method should not be used to determine the topmost parent domain
+   * which is addressable as a host, as many public suffixes are also
+   * addressable hosts. For example, the domain {@code foo.bar.uk.com} has
+   * a public suffix of {@code uk.com}, so it would return {@code bar.uk.com}
+   * from this method. But {@code uk.com} is itself an addressable host.
+   *
+   * <p>This method can be used to determine the probable highest level parent
+   * domain for which cookies may be set, though even that depends on individual
+   * browsers' implementations of cookie controls.
+   *
+   * @throws IllegalStateException if this domain does not end with a
+   *     public suffix
+   * @since 6.0
+   */
+  public InternetDomainName topPrivateDomain() {
+    if (isTopPrivateDomain()) {
+      return this;
+    }
+    checkState(isUnderPublicSuffix(), "Not under a public suffix: %s", name);
+    return ancestor(publicSuffixIndex - 1);
+  }
+
+  /**
+   * Indicates whether this domain is composed of two or more parts.
+   */
+  public boolean hasParent() {
+    return parts.size() > 1;
+  }
+
+  /**
+   * Returns an {@code InternetDomainName} that is the immediate ancestor of
+   * this one; that is, the current domain with the leftmost part removed. For
+   * example, the parent of {@code www.google.com} is {@code google.com}.
+   *
+   * @throws IllegalStateException if the domain has no parent, as determined
+   *     by {@link #hasParent}
+   */
+  public InternetDomainName parent() {
+    checkState(hasParent(), "Domain '%s' has no parent", name);
+    return ancestor(1);
+  }
+
+  /**
+   * Returns the ancestor of the current domain at the given number of levels
+   * "higher" (rightward) in the subdomain list. The number of levels must be
+   * non-negative, and less than {@code N-1}, where {@code N} is the number of
+   * parts in the domain.
+   *
+   * <p>TODO: Reasonable candidate for addition to public API.
+   */
+  private InternetDomainName ancestor(int levels) {
+    return from(DOT_JOINER.join(parts.subList(levels, parts.size())));
+  }
+
+  /**
+   * Creates and returns a new {@code InternetDomainName} by prepending the
+   * argument and a dot to the current name. For example, {@code
+   * InternetDomainName.from("foo.com").child("www.bar")} returns a new
+   * {@code InternetDomainName} with the value {@code www.bar.foo.com}. Only
+   * lenient validation is performed, as described {@link #from(String) here}.
+   *
+   * @throws NullPointerException if leftParts is null
+   * @throws IllegalArgumentException if the resulting name is not valid
+   */
+  public InternetDomainName child(String leftParts) {
+    return from(checkNotNull(leftParts) + "." + name);
+  }
+
+  /**
+   * A deprecated synonym for {@link #isValid(String)}.
+   *
+   * @since 8.0 (previously named {@code isValid})
+   * @deprecated Use {@link #isValid(String)} instead
+   */
+  @Deprecated
+  public static boolean isValidLenient(String name) {
+    return isValid(name);
+  }
+
+  /**
+   * Indicates whether the argument is a syntactically valid domain name using
+   * lenient validation. Specifically, validation against <a
+   * href="http://www.ietf.org/rfc/rfc3490.txt">RFC 3490</a>
+   * ("Internationalizing Domain Names in Applications") is skipped.
+   *
+   * <p>The following two code snippets are equivalent:
+   *
+   * <pre>   {@code
+   *
+   *   domainName = InternetDomainName.isValid(name)
+   *       ? InternetDomainName.from(name)
+   *       : DEFAULT_DOMAIN;
+   *   }</pre>
+   *
+   * <pre>   {@code
+   *
+   *   try {
+   *     domainName = InternetDomainName.from(name);
+   *   } catch (IllegalArgumentException e) {
+   *     domainName = DEFAULT_DOMAIN;
+   *   }}</pre>
+   *
+   * @since 8.0 (previously named {@code isValidLenient})
+   */
+  public static boolean isValid(String name) {
+    try {
+      from(name);
+      return true;
+    } catch (IllegalArgumentException e) {
+      return false;
+    }
+  }
+
+  /**
+   * Does the domain name match one of the "wildcard" patterns (e.g.
+   * {@code "*.ar"})?
+   */
+  private static boolean matchesWildcardPublicSuffix(String domain) {
+    final String[] pieces = domain.split(DOT_REGEX, 2);
+    return pieces.length == 2 && TldPatterns.UNDER.contains(pieces[1]);
+  }
+
+  // TODO: specify this to return the same as name(); remove name()
+  @Override
+  public String toString() {
+    return Objects.toStringHelper(this).add("name", name).toString();
+  }
+
+  /**
+   * Equality testing is based on the text supplied by the caller,
+   * after normalization as described in the class documentation. For
+   * example, a non-ASCII Unicode domain name and the Punycode version
+   * of the same domain name would not be considered equal.
+   *
+   */
+  @Override
+  public boolean equals(@Nullable Object object) {
+    if (object == this) {
+      return true;
+    }
+
+    if (object instanceof InternetDomainName) {
+      InternetDomainName that = (InternetDomainName) object;
+      return this.name.equals(that.name);
+    }
+
+    return false;
+  }
+
+  @Override
+  public int hashCode() {
+    return name.hashCode();
+  }
+}
diff --git a/guava/src/com/google/common/net/TldPatterns.java b/guava/src/com/google/common/net/TldPatterns.java
new file mode 100644
index 0000000..879b34d
--- /dev/null
+++ b/guava/src/com/google/common/net/TldPatterns.java
@@ -0,0 +1,4294 @@
+
+// GENERATED FILE - DO NOT EDIT
+
+package com.google.common.net;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.collect.ImmutableSet;
+import java.util.Set;
+
+/**
+ * A generated static class containing public members which provide domain
+ * name patterns used in determining whether a given domain name is an
+ * effective top-level domain (TLD).
+ */
+@GwtCompatible
+class TldPatterns {
+  private TldPatterns() {
+    // Prevent instantiation.
+  }
+
+  /**
+   * If a hostname is contained in this set, it is a TLD.
+   */
+  static final Set<String> EXACT = ImmutableSet.of(
+      "ac",
+      "com.ac",
+      "edu.ac",
+      "gov.ac",
+      "net.ac",
+      "mil.ac",
+      "org.ac",
+      "ad",
+      "nom.ad",
+      "ae",
+      "co.ae",
+      "net.ae",
+      "org.ae",
+      "sch.ae",
+      "ac.ae",
+      "gov.ae",
+      "mil.ae",
+      "aero",
+      "accident-investigation.aero",
+      "accident-prevention.aero",
+      "aerobatic.aero",
+      "aeroclub.aero",
+      "aerodrome.aero",
+      "agents.aero",
+      "aircraft.aero",
+      "airline.aero",
+      "airport.aero",
+      "air-surveillance.aero",
+      "airtraffic.aero",
+      "air-traffic-control.aero",
+      "ambulance.aero",
+      "amusement.aero",
+      "association.aero",
+      "author.aero",
+      "ballooning.aero",
+      "broker.aero",
+      "caa.aero",
+      "cargo.aero",
+      "catering.aero",
+      "certification.aero",
+      "championship.aero",
+      "charter.aero",
+      "civilaviation.aero",
+      "club.aero",
+      "conference.aero",
+      "consultant.aero",
+      "consulting.aero",
+      "control.aero",
+      "council.aero",
+      "crew.aero",
+      "design.aero",
+      "dgca.aero",
+      "educator.aero",
+      "emergency.aero",
+      "engine.aero",
+      "engineer.aero",
+      "entertainment.aero",
+      "equipment.aero",
+      "exchange.aero",
+      "express.aero",
+      "federation.aero",
+      "flight.aero",
+      "freight.aero",
+      "fuel.aero",
+      "gliding.aero",
+      "government.aero",
+      "groundhandling.aero",
+      "group.aero",
+      "hanggliding.aero",
+      "homebuilt.aero",
+      "insurance.aero",
+      "journal.aero",
+      "journalist.aero",
+      "leasing.aero",
+      "logistics.aero",
+      "magazine.aero",
+      "maintenance.aero",
+      "marketplace.aero",
+      "media.aero",
+      "microlight.aero",
+      "modelling.aero",
+      "navigation.aero",
+      "parachuting.aero",
+      "paragliding.aero",
+      "passenger-association.aero",
+      "pilot.aero",
+      "press.aero",
+      "production.aero",
+      "recreation.aero",
+      "repbody.aero",
+      "res.aero",
+      "research.aero",
+      "rotorcraft.aero",
+      "safety.aero",
+      "scientist.aero",
+      "services.aero",
+      "show.aero",
+      "skydiving.aero",
+      "software.aero",
+      "student.aero",
+      "taxi.aero",
+      "trader.aero",
+      "trading.aero",
+      "trainer.aero",
+      "union.aero",
+      "workinggroup.aero",
+      "works.aero",
+      "af",
+      "gov.af",
+      "com.af",
+      "org.af",
+      "net.af",
+      "edu.af",
+      "ag",
+      "com.ag",
+      "org.ag",
+      "net.ag",
+      "co.ag",
+      "nom.ag",
+      "ai",
+      "off.ai",
+      "com.ai",
+      "net.ai",
+      "org.ai",
+      "al",
+      "com.al",
+      "edu.al",
+      "gov.al",
+      "mil.al",
+      "net.al",
+      "org.al",
+      "am",
+      "an",
+      "com.an",
+      "net.an",
+      "org.an",
+      "edu.an",
+      "ao",
+      "ed.ao",
+      "gv.ao",
+      "og.ao",
+      "co.ao",
+      "pb.ao",
+      "it.ao",
+      "aq",
+      "e164.arpa",
+      "in-addr.arpa",
+      "ip6.arpa",
+      "iris.arpa",
+      "uri.arpa",
+      "urn.arpa",
+      "as",
+      "gov.as",
+      "asia",
+      "at",
+      "ac.at",
+      "co.at",
+      "gv.at",
+      "or.at",
+      "biz.at",
+      "info.at",
+      "priv.at",
+      "act.edu.au",
+      "nsw.edu.au",
+      "nt.edu.au",
+      "qld.edu.au",
+      "sa.edu.au",
+      "tas.edu.au",
+      "vic.edu.au",
+      "wa.edu.au",
+      "act.gov.au",
+      "nt.gov.au",
+      "qld.gov.au",
+      "sa.gov.au",
+      "tas.gov.au",
+      "vic.gov.au",
+      "wa.gov.au",
+      "act.au",
+      "nsw.au",
+      "nt.au",
+      "qld.au",
+      "sa.au",
+      "tas.au",
+      "vic.au",
+      "wa.au",
+      "aw",
+      "com.aw",
+      "ax",
+      "az",
+      "com.az",
+      "net.az",
+      "int.az",
+      "gov.az",
+      "org.az",
+      "edu.az",
+      "info.az",
+      "pp.az",
+      "mil.az",
+      "name.az",
+      "pro.az",
+      "biz.az",
+      "ba",
+      "org.ba",
+      "net.ba",
+      "edu.ba",
+      "gov.ba",
+      "mil.ba",
+      "unsa.ba",
+      "unbi.ba",
+      "co.ba",
+      "com.ba",
+      "rs.ba",
+      "bb",
+      "biz.bb",
+      "com.bb",
+      "edu.bb",
+      "gov.bb",
+      "info.bb",
+      "net.bb",
+      "org.bb",
+      "store.bb",
+      "be",
+      "ac.be",
+      "bf",
+      "gov.bf",
+      "bg",
+      "a.bg",
+      "b.bg",
+      "c.bg",
+      "d.bg",
+      "e.bg",
+      "f.bg",
+      "g.bg",
+      "h.bg",
+      "i.bg",
+      "j.bg",
+      "k.bg",
+      "l.bg",
+      "m.bg",
+      "n.bg",
+      "o.bg",
+      "p.bg",
+      "q.bg",
+      "r.bg",
+      "s.bg",
+      "t.bg",
+      "u.bg",
+      "v.bg",
+      "w.bg",
+      "x.bg",
+      "y.bg",
+      "z.bg",
+      "0.bg",
+      "1.bg",
+      "2.bg",
+      "3.bg",
+      "4.bg",
+      "5.bg",
+      "6.bg",
+      "7.bg",
+      "8.bg",
+      "9.bg",
+      "bh",
+      "com.bh",
+      "edu.bh",
+      "net.bh",
+      "org.bh",
+      "gov.bh",
+      "bi",
+      "co.bi",
+      "com.bi",
+      "edu.bi",
+      "or.bi",
+      "org.bi",
+      "biz",
+      "bj",
+      "asso.bj",
+      "barreau.bj",
+      "gouv.bj",
+      "bm",
+      "com.bm",
+      "edu.bm",
+      "gov.bm",
+      "net.bm",
+      "org.bm",
+      "bo",
+      "com.bo",
+      "edu.bo",
+      "gov.bo",
+      "gob.bo",
+      "int.bo",
+      "org.bo",
+      "net.bo",
+      "mil.bo",
+      "tv.bo",
+      "br",
+      "adm.br",
+      "adv.br",
+      "agr.br",
+      "am.br",
+      "arq.br",
+      "art.br",
+      "ato.br",
+      "b.br",
+      "bio.br",
+      "blog.br",
+      "bmd.br",
+      "can.br",
+      "cim.br",
+      "cng.br",
+      "cnt.br",
+      "com.br",
+      "coop.br",
+      "ecn.br",
+      "edu.br",
+      "emp.br",
+      "eng.br",
+      "esp.br",
+      "etc.br",
+      "eti.br",
+      "far.br",
+      "flog.br",
+      "fm.br",
+      "fnd.br",
+      "fot.br",
+      "fst.br",
+      "g12.br",
+      "ggf.br",
+      "gov.br",
+      "imb.br",
+      "ind.br",
+      "inf.br",
+      "jor.br",
+      "jus.br",
+      "lel.br",
+      "mat.br",
+      "med.br",
+      "mil.br",
+      "mus.br",
+      "net.br",
+      "nom.br",
+      "not.br",
+      "ntr.br",
+      "odo.br",
+      "org.br",
+      "ppg.br",
+      "pro.br",
+      "psc.br",
+      "psi.br",
+      "qsl.br",
+      "radio.br",
+      "rec.br",
+      "slg.br",
+      "srv.br",
+      "taxi.br",
+      "teo.br",
+      "tmp.br",
+      "trd.br",
+      "tur.br",
+      "tv.br",
+      "vet.br",
+      "vlog.br",
+      "wiki.br",
+      "zlg.br",
+      "bs",
+      "com.bs",
+      "net.bs",
+      "org.bs",
+      "edu.bs",
+      "gov.bs",
+      "bt",
+      "com.bt",
+      "edu.bt",
+      "gov.bt",
+      "net.bt",
+      "org.bt",
+      "bw",
+      "co.bw",
+      "org.bw",
+      "by",
+      "gov.by",
+      "mil.by",
+      "com.by",
+      "of.by",
+      "bz",
+      "com.bz",
+      "net.bz",
+      "org.bz",
+      "edu.bz",
+      "gov.bz",
+      "ca",
+      "ab.ca",
+      "bc.ca",
+      "mb.ca",
+      "nb.ca",
+      "nf.ca",
+      "nl.ca",
+      "ns.ca",
+      "nt.ca",
+      "nu.ca",
+      "on.ca",
+      "pe.ca",
+      "qc.ca",
+      "sk.ca",
+      "yk.ca",
+      "gc.ca",
+      "cat",
+      "cc",
+      "cd",
+      "gov.cd",
+      "cf",
+      "cg",
+      "ch",
+      "ci",
+      "org.ci",
+      "or.ci",
+      "com.ci",
+      "co.ci",
+      "edu.ci",
+      "ed.ci",
+      "ac.ci",
+      "net.ci",
+      "go.ci",
+      "asso.ci",
+      "a\u00e9roport.ci",
+      "xn--aroport-bya.ci",
+      "int.ci",
+      "presse.ci",
+      "md.ci",
+      "gouv.ci",
+      "cl",
+      "gov.cl",
+      "gob.cl",
+      "cm",
+      "gov.cm",
+      "cn",
+      "ac.cn",
+      "com.cn",
+      "edu.cn",
+      "gov.cn",
+      "net.cn",
+      "org.cn",
+      "mil.cn",
+      "\u516c\u53f8.cn",
+      "xn--55qx5d.cn",
+      "\u7f51\u7edc.cn",
+      "xn--io0a7i.cn",
+      "\u7db2\u7d61.cn",
+      "xn--od0alg.cn",
+      "ah.cn",
+      "bj.cn",
+      "cq.cn",
+      "fj.cn",
+      "gd.cn",
+      "gs.cn",
+      "gz.cn",
+      "gx.cn",
+      "ha.cn",
+      "hb.cn",
+      "he.cn",
+      "hi.cn",
+      "hl.cn",
+      "hn.cn",
+      "jl.cn",
+      "js.cn",
+      "jx.cn",
+      "ln.cn",
+      "nm.cn",
+      "nx.cn",
+      "qh.cn",
+      "sc.cn",
+      "sd.cn",
+      "sh.cn",
+      "sn.cn",
+      "sx.cn",
+      "tj.cn",
+      "xj.cn",
+      "xz.cn",
+      "yn.cn",
+      "zj.cn",
+      "hk.cn",
+      "mo.cn",
+      "tw.cn",
+      "co",
+      "arts.co",
+      "com.co",
+      "edu.co",
+      "firm.co",
+      "gov.co",
+      "info.co",
+      "int.co",
+      "mil.co",
+      "net.co",
+      "nom.co",
+      "org.co",
+      "rec.co",
+      "web.co",
+      "com",
+      "ar.com",
+      "br.com",
+      "cn.com",
+      "de.com",
+      "eu.com",
+      "gb.com",
+      "hu.com",
+      "jpn.com",
+      "kr.com",
+      "no.com",
+      "qc.com",
+      "ru.com",
+      "sa.com",
+      "se.com",
+      "uk.com",
+      "us.com",
+      "uy.com",
+      "za.com",
+      "operaunite.com",
+      "appspot.com",
+      "coop",
+      "cr",
+      "ac.cr",
+      "co.cr",
+      "ed.cr",
+      "fi.cr",
+      "go.cr",
+      "or.cr",
+      "sa.cr",
+      "cu",
+      "com.cu",
+      "edu.cu",
+      "org.cu",
+      "net.cu",
+      "gov.cu",
+      "inf.cu",
+      "cv",
+      "cx",
+      "gov.cx",
+      "cz",
+      "de",
+      "dj",
+      "dk",
+      "dm",
+      "com.dm",
+      "net.dm",
+      "org.dm",
+      "edu.dm",
+      "gov.dm",
+      "do",
+      "art.do",
+      "com.do",
+      "edu.do",
+      "gob.do",
+      "gov.do",
+      "mil.do",
+      "net.do",
+      "org.do",
+      "sld.do",
+      "web.do",
+      "dz",
+      "com.dz",
+      "org.dz",
+      "net.dz",
+      "gov.dz",
+      "edu.dz",
+      "asso.dz",
+      "pol.dz",
+      "art.dz",
+      "ec",
+      "com.ec",
+      "info.ec",
+      "net.ec",
+      "fin.ec",
+      "k12.ec",
+      "med.ec",
+      "pro.ec",
+      "org.ec",
+      "edu.ec",
+      "gov.ec",
+      "gob.ec",
+      "mil.ec",
+      "edu",
+      "ee",
+      "edu.ee",
+      "gov.ee",
+      "riik.ee",
+      "lib.ee",
+      "med.ee",
+      "com.ee",
+      "pri.ee",
+      "aip.ee",
+      "org.ee",
+      "fie.ee",
+      "eg",
+      "com.eg",
+      "edu.eg",
+      "eun.eg",
+      "gov.eg",
+      "mil.eg",
+      "name.eg",
+      "net.eg",
+      "org.eg",
+      "sci.eg",
+      "es",
+      "com.es",
+      "nom.es",
+      "org.es",
+      "gob.es",
+      "edu.es",
+      "eu",
+      "fi",
+      "aland.fi",
+      "iki.fi",
+      "fm",
+      "fo",
+      "fr",
+      "com.fr",
+      "asso.fr",
+      "nom.fr",
+      "prd.fr",
+      "presse.fr",
+      "tm.fr",
+      "aeroport.fr",
+      "assedic.fr",
+      "avocat.fr",
+      "avoues.fr",
+      "cci.fr",
+      "chambagri.fr",
+      "chirurgiens-dentistes.fr",
+      "experts-comptables.fr",
+      "geometre-expert.fr",
+      "gouv.fr",
+      "greta.fr",
+      "huissier-justice.fr",
+      "medecin.fr",
+      "notaires.fr",
+      "pharmacien.fr",
+      "port.fr",
+      "veterinaire.fr",
+      "ga",
+      "gd",
+      "ge",
+      "com.ge",
+      "edu.ge",
+      "gov.ge",
+      "org.ge",
+      "mil.ge",
+      "net.ge",
+      "pvt.ge",
+      "gf",
+      "gg",
+      "co.gg",
+      "org.gg",
+      "net.gg",
+      "sch.gg",
+      "gov.gg",
+      "gh",
+      "com.gh",
+      "edu.gh",
+      "gov.gh",
+      "org.gh",
+      "mil.gh",
+      "gi",
+      "com.gi",
+      "ltd.gi",
+      "gov.gi",
+      "mod.gi",
+      "edu.gi",
+      "org.gi",
+      "gl",
+      "gm",
+      "ac.gn",
+      "com.gn",
+      "edu.gn",
+      "gov.gn",
+      "org.gn",
+      "net.gn",
+      "gov",
+      "gp",
+      "com.gp",
+      "net.gp",
+      "mobi.gp",
+      "edu.gp",
+      "org.gp",
+      "asso.gp",
+      "gq",
+      "gr",
+      "com.gr",
+      "edu.gr",
+      "net.gr",
+      "org.gr",
+      "gov.gr",
+      "gs",
+      "gw",
+      "gy",
+      "co.gy",
+      "com.gy",
+      "net.gy",
+      "hk",
+      "com.hk",
+      "edu.hk",
+      "gov.hk",
+      "idv.hk",
+      "net.hk",
+      "org.hk",
+      "\u516c\u53f8.hk",
+      "xn--55qx5d.hk",
+      "\u6559\u80b2.hk",
+      "xn--wcvs22d.hk",
+      "\u654e\u80b2.hk",
+      "xn--lcvr32d.hk",
+      "\u653f\u5e9c.hk",
+      "xn--mxtq1m.hk",
+      "\u500b\u4eba.hk",
+      "xn--gmqw5a.hk",
+      "\u4e2a\u4eba.hk",
+      "xn--ciqpn.hk",
+      "\u7b87\u4eba.hk",
+      "xn--gmq050i.hk",
+      "\u7db2\u7edc.hk",
+      "xn--zf0avx.hk",
+      "\u7f51\u7edc.hk",
+      "xn--io0a7i.hk",
+      "\u7ec4\u7e54.hk",
+      "xn--mk0axi.hk",
+      "\u7db2\u7d61.hk",
+      "xn--od0alg.hk",
+      "\u7f51\u7d61.hk",
+      "xn--od0aq3b.hk",
+      "\u7ec4\u7ec7.hk",
+      "xn--tn0ag.hk",
+      "\u7d44\u7e54.hk",
+      "xn--uc0atv.hk",
+      "\u7d44\u7ec7.hk",
+      "xn--uc0ay4a.hk",
+      "hm",
+      "hn",
+      "com.hn",
+      "edu.hn",
+      "org.hn",
+      "net.hn",
+      "mil.hn",
+      "gob.hn",
+      "hr",
+      "iz.hr",
+      "from.hr",
+      "name.hr",
+      "com.hr",
+      "ht",
+      "com.ht",
+      "shop.ht",
+      "firm.ht",
+      "info.ht",
+      "adult.ht",
+      "net.ht",
+      "pro.ht",
+      "org.ht",
+      "med.ht",
+      "art.ht",
+      "coop.ht",
+      "pol.ht",
+      "asso.ht",
+      "edu.ht",
+      "rel.ht",
+      "gouv.ht",
+      "perso.ht",
+      "hu",
+      "co.hu",
+      "info.hu",
+      "org.hu",
+      "priv.hu",
+      "sport.hu",
+      "tm.hu",
+      "2000.hu",
+      "agrar.hu",
+      "bolt.hu",
+      "casino.hu",
+      "city.hu",
+      "erotica.hu",
+      "erotika.hu",
+      "film.hu",
+      "forum.hu",
+      "games.hu",
+      "hotel.hu",
+      "ingatlan.hu",
+      "jogasz.hu",
+      "konyvelo.hu",
+      "lakas.hu",
+      "media.hu",
+      "news.hu",
+      "reklam.hu",
+      "sex.hu",
+      "shop.hu",
+      "suli.hu",
+      "szex.hu",
+      "tozsde.hu",
+      "utazas.hu",
+      "video.hu",
+      "id",
+      "ac.id",
+      "co.id",
+      "go.id",
+      "mil.id",
+      "net.id",
+      "or.id",
+      "sch.id",
+      "web.id",
+      "ie",
+      "gov.ie",
+      "im",
+      "co.im",
+      "ltd.co.im",
+      "plc.co.im",
+      "net.im",
+      "gov.im",
+      "org.im",
+      "nic.im",
+      "ac.im",
+      "in",
+      "co.in",
+      "firm.in",
+      "net.in",
+      "org.in",
+      "gen.in",
+      "ind.in",
+      "nic.in",
+      "ac.in",
+      "edu.in",
+      "res.in",
+      "gov.in",
+      "mil.in",
+      "info",
+      "int",
+      "eu.int",
+      "io",
+      "com.io",
+      "iq",
+      "gov.iq",
+      "edu.iq",
+      "mil.iq",
+      "com.iq",
+      "org.iq",
+      "net.iq",
+      "ir",
+      "ac.ir",
+      "co.ir",
+      "gov.ir",
+      "id.ir",
+      "net.ir",
+      "org.ir",
+      "sch.ir",
+      "\u0627\u06cc\u0631\u0627\u0646.ir",
+      "xn--mgba3a4f16a.ir",
+      "\u0627\u064a\u0631\u0627\u0646.ir",
+      "xn--mgba3a4fra.ir",
+      "is",
+      "net.is",
+      "com.is",
+      "edu.is",
+      "gov.is",
+      "org.is",
+      "int.is",
+      "it",
+      "gov.it",
+      "edu.it",
+      "agrigento.it",
+      "ag.it",
+      "alessandria.it",
+      "al.it",
+      "ancona.it",
+      "an.it",
+      "aosta.it",
+      "aoste.it",
+      "ao.it",
+      "arezzo.it",
+      "ar.it",
+      "ascoli-piceno.it",
+      "ascolipiceno.it",
+      "ap.it",
+      "asti.it",
+      "at.it",
+      "avellino.it",
+      "av.it",
+      "bari.it",
+      "ba.it",
+      "andria-barletta-trani.it",
+      "andriabarlettatrani.it",
+      "trani-barletta-andria.it",
+      "tranibarlettaandria.it",
+      "barletta-trani-andria.it",
+      "barlettatraniandria.it",
+      "andria-trani-barletta.it",
+      "andriatranibarletta.it",
+      "trani-andria-barletta.it",
+      "traniandriabarletta.it",
+      "bt.it",
+      "belluno.it",
+      "bl.it",
+      "benevento.it",
+      "bn.it",
+      "bergamo.it",
+      "bg.it",
+      "biella.it",
+      "bi.it",
+      "bologna.it",
+      "bo.it",
+      "bolzano.it",
+      "bozen.it",
+      "balsan.it",
+      "alto-adige.it",
+      "altoadige.it",
+      "suedtirol.it",
+      "bz.it",
+      "brescia.it",
+      "bs.it",
+      "brindisi.it",
+      "br.it",
+      "cagliari.it",
+      "ca.it",
+      "caltanissetta.it",
+      "cl.it",
+      "campobasso.it",
+      "cb.it",
+      "carboniaiglesias.it",
+      "carbonia-iglesias.it",
+      "iglesias-carbonia.it",
+      "iglesiascarbonia.it",
+      "ci.it",
+      "caserta.it",
+      "ce.it",
+      "catania.it",
+      "ct.it",
+      "catanzaro.it",
+      "cz.it",
+      "chieti.it",
+      "ch.it",
+      "como.it",
+      "co.it",
+      "cosenza.it",
+      "cs.it",
+      "cremona.it",
+      "cr.it",
+      "crotone.it",
+      "kr.it",
+      "cuneo.it",
+      "cn.it",
+      "dell-ogliastra.it",
+      "dellogliastra.it",
+      "ogliastra.it",
+      "og.it",
+      "enna.it",
+      "en.it",
+      "ferrara.it",
+      "fe.it",
+      "fermo.it",
+      "fm.it",
+      "firenze.it",
+      "florence.it",
+      "fi.it",
+      "foggia.it",
+      "fg.it",
+      "forli-cesena.it",
+      "forlicesena.it",
+      "cesena-forli.it",
+      "cesenaforli.it",
+      "fc.it",
+      "frosinone.it",
+      "fr.it",
+      "genova.it",
+      "genoa.it",
+      "ge.it",
+      "gorizia.it",
+      "go.it",
+      "grosseto.it",
+      "gr.it",
+      "imperia.it",
+      "im.it",
+      "isernia.it",
+      "is.it",
+      "laquila.it",
+      "aquila.it",
+      "aq.it",
+      "la-spezia.it",
+      "laspezia.it",
+      "sp.it",
+      "latina.it",
+      "lt.it",
+      "lecce.it",
+      "le.it",
+      "lecco.it",
+      "lc.it",
+      "livorno.it",
+      "li.it",
+      "lodi.it",
+      "lo.it",
+      "lucca.it",
+      "lu.it",
+      "macerata.it",
+      "mc.it",
+      "mantova.it",
+      "mn.it",
+      "massa-carrara.it",
+      "massacarrara.it",
+      "carrara-massa.it",
+      "carraramassa.it",
+      "ms.it",
+      "matera.it",
+      "mt.it",
+      "medio-campidano.it",
+      "mediocampidano.it",
+      "campidano-medio.it",
+      "campidanomedio.it",
+      "vs.it",
+      "messina.it",
+      "me.it",
+      "milano.it",
+      "milan.it",
+      "mi.it",
+      "modena.it",
+      "mo.it",
+      "monza.it",
+      "monza-brianza.it",
+      "monzabrianza.it",
+      "monzaebrianza.it",
+      "monzaedellabrianza.it",
+      "monza-e-della-brianza.it",
+      "mb.it",
+      "napoli.it",
+      "naples.it",
+      "na.it",
+      "novara.it",
+      "no.it",
+      "nuoro.it",
+      "nu.it",
+      "oristano.it",
+      "or.it",
+      "padova.it",
+      "padua.it",
+      "pd.it",
+      "palermo.it",
+      "pa.it",
+      "parma.it",
+      "pr.it",
+      "pavia.it",
+      "pv.it",
+      "perugia.it",
+      "pg.it",
+      "pescara.it",
+      "pe.it",
+      "pesaro-urbino.it",
+      "pesarourbino.it",
+      "urbino-pesaro.it",
+      "urbinopesaro.it",
+      "pu.it",
+      "piacenza.it",
+      "pc.it",
+      "pisa.it",
+      "pi.it",
+      "pistoia.it",
+      "pt.it",
+      "pordenone.it",
+      "pn.it",
+      "potenza.it",
+      "pz.it",
+      "prato.it",
+      "po.it",
+      "ragusa.it",
+      "rg.it",
+      "ravenna.it",
+      "ra.it",
+      "reggio-calabria.it",
+      "reggiocalabria.it",
+      "rc.it",
+      "reggio-emilia.it",
+      "reggioemilia.it",
+      "re.it",
+      "rieti.it",
+      "ri.it",
+      "rimini.it",
+      "rn.it",
+      "roma.it",
+      "rome.it",
+      "rm.it",
+      "rovigo.it",
+      "ro.it",
+      "salerno.it",
+      "sa.it",
+      "sassari.it",
+      "ss.it",
+      "savona.it",
+      "sv.it",
+      "siena.it",
+      "si.it",
+      "siracusa.it",
+      "sr.it",
+      "sondrio.it",
+      "so.it",
+      "taranto.it",
+      "ta.it",
+      "tempio-olbia.it",
+      "tempioolbia.it",
+      "olbia-tempio.it",
+      "olbiatempio.it",
+      "ot.it",
+      "teramo.it",
+      "te.it",
+      "terni.it",
+      "tr.it",
+      "torino.it",
+      "turin.it",
+      "to.it",
+      "trapani.it",
+      "tp.it",
+      "trento.it",
+      "trentino.it",
+      "tn.it",
+      "treviso.it",
+      "tv.it",
+      "trieste.it",
+      "ts.it",
+      "udine.it",
+      "ud.it",
+      "varese.it",
+      "va.it",
+      "venezia.it",
+      "venice.it",
+      "ve.it",
+      "verbania.it",
+      "vb.it",
+      "vercelli.it",
+      "vc.it",
+      "verona.it",
+      "vr.it",
+      "vibo-valentia.it",
+      "vibovalentia.it",
+      "vv.it",
+      "vicenza.it",
+      "vi.it",
+      "viterbo.it",
+      "vt.it",
+      "je",
+      "co.je",
+      "org.je",
+      "net.je",
+      "sch.je",
+      "gov.je",
+      "jo",
+      "com.jo",
+      "org.jo",
+      "net.jo",
+      "edu.jo",
+      "sch.jo",
+      "gov.jo",
+      "mil.jo",
+      "name.jo",
+      "jobs",
+      "jp",
+      "ac.jp",
+      "ad.jp",
+      "co.jp",
+      "ed.jp",
+      "go.jp",
+      "gr.jp",
+      "lg.jp",
+      "ne.jp",
+      "or.jp",
+      "kg",
+      "org.kg",
+      "net.kg",
+      "com.kg",
+      "edu.kg",
+      "gov.kg",
+      "mil.kg",
+      "ki",
+      "edu.ki",
+      "biz.ki",
+      "net.ki",
+      "org.ki",
+      "gov.ki",
+      "info.ki",
+      "com.ki",
+      "km",
+      "org.km",
+      "nom.km",
+      "gov.km",
+      "prd.km",
+      "tm.km",
+      "edu.km",
+      "mil.km",
+      "ass.km",
+      "com.km",
+      "coop.km",
+      "asso.km",
+      "presse.km",
+      "medecin.km",
+      "notaires.km",
+      "pharmaciens.km",
+      "veterinaire.km",
+      "gouv.km",
+      "kn",
+      "net.kn",
+      "org.kn",
+      "edu.kn",
+      "gov.kn",
+      "com.kp",
+      "edu.kp",
+      "gov.kp",
+      "org.kp",
+      "rep.kp",
+      "tra.kp",
+      "kr",
+      "ac.kr",
+      "co.kr",
+      "es.kr",
+      "go.kr",
+      "hs.kr",
+      "kg.kr",
+      "mil.kr",
+      "ms.kr",
+      "ne.kr",
+      "or.kr",
+      "pe.kr",
+      "re.kr",
+      "sc.kr",
+      "busan.kr",
+      "chungbuk.kr",
+      "chungnam.kr",
+      "daegu.kr",
+      "daejeon.kr",
+      "gangwon.kr",
+      "gwangju.kr",
+      "gyeongbuk.kr",
+      "gyeonggi.kr",
+      "gyeongnam.kr",
+      "incheon.kr",
+      "jeju.kr",
+      "jeonbuk.kr",
+      "jeonnam.kr",
+      "seoul.kr",
+      "ulsan.kr",
+      "ky",
+      "edu.ky",
+      "gov.ky",
+      "com.ky",
+      "org.ky",
+      "net.ky",
+      "kz",
+      "org.kz",
+      "edu.kz",
+      "net.kz",
+      "gov.kz",
+      "mil.kz",
+      "com.kz",
+      "la",
+      "int.la",
+      "net.la",
+      "info.la",
+      "edu.la",
+      "gov.la",
+      "per.la",
+      "com.la",
+      "org.la",
+      "c.la",
+      "com.lb",
+      "edu.lb",
+      "gov.lb",
+      "net.lb",
+      "org.lb",
+      "lc",
+      "com.lc",
+      "net.lc",
+      "co.lc",
+      "org.lc",
+      "edu.lc",
+      "gov.lc",
+      "li",
+      "lk",
+      "gov.lk",
+      "sch.lk",
+      "net.lk",
+      "int.lk",
+      "com.lk",
+      "org.lk",
+      "edu.lk",
+      "ngo.lk",
+      "soc.lk",
+      "web.lk",
+      "ltd.lk",
+      "assn.lk",
+      "grp.lk",
+      "hotel.lk",
+      "local",
+      "com.lr",
+      "edu.lr",
+      "gov.lr",
+      "org.lr",
+      "net.lr",
+      "ls",
+      "co.ls",
+      "org.ls",
+      "lt",
+      "gov.lt",
+      "lu",
+      "lv",
+      "com.lv",
+      "edu.lv",
+      "gov.lv",
+      "org.lv",
+      "mil.lv",
+      "id.lv",
+      "net.lv",
+      "asn.lv",
+      "conf.lv",
+      "ly",
+      "com.ly",
+      "net.ly",
+      "gov.ly",
+      "plc.ly",
+      "edu.ly",
+      "sch.ly",
+      "med.ly",
+      "org.ly",
+      "id.ly",
+      "ma",
+      "co.ma",
+      "net.ma",
+      "gov.ma",
+      "org.ma",
+      "ac.ma",
+      "press.ma",
+      "mc",
+      "tm.mc",
+      "asso.mc",
+      "md",
+      "me",
+      "co.me",
+      "net.me",
+      "org.me",
+      "edu.me",
+      "ac.me",
+      "gov.me",
+      "its.me",
+      "priv.me",
+      "mg",
+      "org.mg",
+      "nom.mg",
+      "gov.mg",
+      "prd.mg",
+      "tm.mg",
+      "edu.mg",
+      "mil.mg",
+      "com.mg",
+      "mh",
+      "mil",
+      "mk",
+      "com.mk",
+      "org.mk",
+      "net.mk",
+      "edu.mk",
+      "gov.mk",
+      "inf.mk",
+      "name.mk",
+      "ml",
+      "com.ml",
+      "edu.ml",
+      "gouv.ml",
+      "gov.ml",
+      "net.ml",
+      "org.ml",
+      "presse.ml",
+      "mn",
+      "gov.mn",
+      "edu.mn",
+      "org.mn",
+      "mo",
+      "com.mo",
+      "net.mo",
+      "org.mo",
+      "edu.mo",
+      "gov.mo",
+      "mobi",
+      "mp",
+      "mq",
+      "mr",
+      "gov.mr",
+      "ms",
+      "mu",
+      "com.mu",
+      "net.mu",
+      "org.mu",
+      "gov.mu",
+      "ac.mu",
+      "co.mu",
+      "or.mu",
+      "museum",
+      "academy.museum",
+      "agriculture.museum",
+      "air.museum",
+      "airguard.museum",
+      "alabama.museum",
+      "alaska.museum",
+      "amber.museum",
+      "ambulance.museum",
+      "american.museum",
+      "americana.museum",
+      "americanantiques.museum",
+      "americanart.museum",
+      "amsterdam.museum",
+      "and.museum",
+      "annefrank.museum",
+      "anthro.museum",
+      "anthropology.museum",
+      "antiques.museum",
+      "aquarium.museum",
+      "arboretum.museum",
+      "archaeological.museum",
+      "archaeology.museum",
+      "architecture.museum",
+      "art.museum",
+      "artanddesign.museum",
+      "artcenter.museum",
+      "artdeco.museum",
+      "arteducation.museum",
+      "artgallery.museum",
+      "arts.museum",
+      "artsandcrafts.museum",
+      "asmatart.museum",
+      "assassination.museum",
+      "assisi.museum",
+      "association.museum",
+      "astronomy.museum",
+      "atlanta.museum",
+      "austin.museum",
+      "australia.museum",
+      "automotive.museum",
+      "aviation.museum",
+      "axis.museum",
+      "badajoz.museum",
+      "baghdad.museum",
+      "bahn.museum",
+      "bale.museum",
+      "baltimore.museum",
+      "barcelona.museum",
+      "baseball.museum",
+      "basel.museum",
+      "baths.museum",
+      "bauern.museum",
+      "beauxarts.museum",
+      "beeldengeluid.museum",
+      "bellevue.museum",
+      "bergbau.museum",
+      "berkeley.museum",
+      "berlin.museum",
+      "bern.museum",
+      "bible.museum",
+      "bilbao.museum",
+      "bill.museum",
+      "birdart.museum",
+      "birthplace.museum",
+      "bonn.museum",
+      "boston.museum",
+      "botanical.museum",
+      "botanicalgarden.museum",
+      "botanicgarden.museum",
+      "botany.museum",
+      "brandywinevalley.museum",
+      "brasil.museum",
+      "bristol.museum",
+      "british.museum",
+      "britishcolumbia.museum",
+      "broadcast.museum",
+      "brunel.museum",
+      "brussel.museum",
+      "brussels.museum",
+      "bruxelles.museum",
+      "building.museum",
+      "burghof.museum",
+      "bus.museum",
+      "bushey.museum",
+      "cadaques.museum",
+      "california.museum",
+      "cambridge.museum",
+      "can.museum",
+      "canada.museum",
+      "capebreton.museum",
+      "carrier.museum",
+      "cartoonart.museum",
+      "casadelamoneda.museum",
+      "castle.museum",
+      "castres.museum",
+      "celtic.museum",
+      "center.museum",
+      "chattanooga.museum",
+      "cheltenham.museum",
+      "chesapeakebay.museum",
+      "chicago.museum",
+      "children.museum",
+      "childrens.museum",
+      "childrensgarden.museum",
+      "chiropractic.museum",
+      "chocolate.museum",
+      "christiansburg.museum",
+      "cincinnati.museum",
+      "cinema.museum",
+      "circus.museum",
+      "civilisation.museum",
+      "civilization.museum",
+      "civilwar.museum",
+      "clinton.museum",
+      "clock.museum",
+      "coal.museum",
+      "coastaldefence.museum",
+      "cody.museum",
+      "coldwar.museum",
+      "collection.museum",
+      "colonialwilliamsburg.museum",
+      "coloradoplateau.museum",
+      "columbia.museum",
+      "columbus.museum",
+      "communication.museum",
+      "communications.museum",
+      "community.museum",
+      "computer.museum",
+      "computerhistory.museum",
+      "comunica\u00e7\u00f5es.museum",
+      "xn--comunicaes-v6a2o.museum",
+      "contemporary.museum",
+      "contemporaryart.museum",
+      "convent.museum",
+      "copenhagen.museum",
+      "corporation.museum",
+      "correios-e-telecomunica\u00e7\u00f5es.museum",
+      "xn--correios-e-telecomunicaes-ghc29a.museum",
+      "corvette.museum",
+      "costume.museum",
+      "countryestate.museum",
+      "county.museum",
+      "crafts.museum",
+      "cranbrook.museum",
+      "creation.museum",
+      "cultural.museum",
+      "culturalcenter.museum",
+      "culture.museum",
+      "cyber.museum",
+      "cymru.museum",
+      "dali.museum",
+      "dallas.museum",
+      "database.museum",
+      "ddr.museum",
+      "decorativearts.museum",
+      "delaware.museum",
+      "delmenhorst.museum",
+      "denmark.museum",
+      "depot.museum",
+      "design.museum",
+      "detroit.museum",
+      "dinosaur.museum",
+      "discovery.museum",
+      "dolls.museum",
+      "donostia.museum",
+      "durham.museum",
+      "eastafrica.museum",
+      "eastcoast.museum",
+      "education.museum",
+      "educational.museum",
+      "egyptian.museum",
+      "eisenbahn.museum",
+      "elburg.museum",
+      "elvendrell.museum",
+      "embroidery.museum",
+      "encyclopedic.museum",
+      "england.museum",
+      "entomology.museum",
+      "environment.museum",
+      "environmentalconservation.museum",
+      "epilepsy.museum",
+      "essex.museum",
+      "estate.museum",
+      "ethnology.museum",
+      "exeter.museum",
+      "exhibition.museum",
+      "family.museum",
+      "farm.museum",
+      "farmequipment.museum",
+      "farmers.museum",
+      "farmstead.museum",
+      "field.museum",
+      "figueres.museum",
+      "filatelia.museum",
+      "film.museum",
+      "fineart.museum",
+      "finearts.museum",
+      "finland.museum",
+      "flanders.museum",
+      "florida.museum",
+      "force.museum",
+      "fortmissoula.museum",
+      "fortworth.museum",
+      "foundation.museum",
+      "francaise.museum",
+      "frankfurt.museum",
+      "franziskaner.museum",
+      "freemasonry.museum",
+      "freiburg.museum",
+      "fribourg.museum",
+      "frog.museum",
+      "fundacio.museum",
+      "furniture.museum",
+      "gallery.museum",
+      "garden.museum",
+      "gateway.museum",
+      "geelvinck.museum",
+      "gemological.museum",
+      "geology.museum",
+      "georgia.museum",
+      "giessen.museum",
+      "glas.museum",
+      "glass.museum",
+      "gorge.museum",
+      "grandrapids.museum",
+      "graz.museum",
+      "guernsey.museum",
+      "halloffame.museum",
+      "hamburg.museum",
+      "handson.museum",
+      "harvestcelebration.museum",
+      "hawaii.museum",
+      "health.museum",
+      "heimatunduhren.museum",
+      "hellas.museum",
+      "helsinki.museum",
+      "hembygdsforbund.museum",
+      "heritage.museum",
+      "histoire.museum",
+      "historical.museum",
+      "historicalsociety.museum",
+      "historichouses.museum",
+      "historisch.museum",
+      "historisches.museum",
+      "history.museum",
+      "historyofscience.museum",
+      "horology.museum",
+      "house.museum",
+      "humanities.museum",
+      "illustration.museum",
+      "imageandsound.museum",
+      "indian.museum",
+      "indiana.museum",
+      "indianapolis.museum",
+      "indianmarket.museum",
+      "intelligence.museum",
+      "interactive.museum",
+      "iraq.museum",
+      "iron.museum",
+      "isleofman.museum",
+      "jamison.museum",
+      "jefferson.museum",
+      "jerusalem.museum",
+      "jewelry.museum",
+      "jewish.museum",
+      "jewishart.museum",
+      "jfk.museum",
+      "journalism.museum",
+      "judaica.museum",
+      "judygarland.museum",
+      "juedisches.museum",
+      "juif.museum",
+      "karate.museum",
+      "karikatur.museum",
+      "kids.museum",
+      "koebenhavn.museum",
+      "koeln.museum",
+      "kunst.museum",
+      "kunstsammlung.museum",
+      "kunstunddesign.museum",
+      "labor.museum",
+      "labour.museum",
+      "lajolla.museum",
+      "lancashire.museum",
+      "landes.museum",
+      "lans.museum",
+      "l\u00e4ns.museum",
+      "xn--lns-qla.museum",
+      "larsson.museum",
+      "lewismiller.museum",
+      "lincoln.museum",
+      "linz.museum",
+      "living.museum",
+      "livinghistory.museum",
+      "localhistory.museum",
+      "london.museum",
+      "losangeles.museum",
+      "louvre.museum",
+      "loyalist.museum",
+      "lucerne.museum",
+      "luxembourg.museum",
+      "luzern.museum",
+      "mad.museum",
+      "madrid.museum",
+      "mallorca.museum",
+      "manchester.museum",
+      "mansion.museum",
+      "mansions.museum",
+      "manx.museum",
+      "marburg.museum",
+      "maritime.museum",
+      "maritimo.museum",
+      "maryland.museum",
+      "marylhurst.museum",
+      "media.museum",
+      "medical.museum",
+      "medizinhistorisches.museum",
+      "meeres.museum",
+      "memorial.museum",
+      "mesaverde.museum",
+      "michigan.museum",
+      "midatlantic.museum",
+      "military.museum",
+      "mill.museum",
+      "miners.museum",
+      "mining.museum",
+      "minnesota.museum",
+      "missile.museum",
+      "missoula.museum",
+      "modern.museum",
+      "moma.museum",
+      "money.museum",
+      "monmouth.museum",
+      "monticello.museum",
+      "montreal.museum",
+      "moscow.museum",
+      "motorcycle.museum",
+      "muenchen.museum",
+      "muenster.museum",
+      "mulhouse.museum",
+      "muncie.museum",
+      "museet.museum",
+      "museumcenter.museum",
+      "museumvereniging.museum",
+      "music.museum",
+      "national.museum",
+      "nationalfirearms.museum",
+      "nationalheritage.museum",
+      "nativeamerican.museum",
+      "naturalhistory.museum",
+      "naturalhistorymuseum.museum",
+      "naturalsciences.museum",
+      "nature.museum",
+      "naturhistorisches.museum",
+      "natuurwetenschappen.museum",
+      "naumburg.museum",
+      "naval.museum",
+      "nebraska.museum",
+      "neues.museum",
+      "newhampshire.museum",
+      "newjersey.museum",
+      "newmexico.museum",
+      "newport.museum",
+      "newspaper.museum",
+      "newyork.museum",
+      "niepce.museum",
+      "norfolk.museum",
+      "north.museum",
+      "nrw.museum",
+      "nuernberg.museum",
+      "nuremberg.museum",
+      "nyc.museum",
+      "nyny.museum",
+      "oceanographic.museum",
+      "oceanographique.museum",
+      "omaha.museum",
+      "online.museum",
+      "ontario.museum",
+      "openair.museum",
+      "oregon.museum",
+      "oregontrail.museum",
+      "otago.museum",
+      "oxford.museum",
+      "pacific.museum",
+      "paderborn.museum",
+      "palace.museum",
+      "paleo.museum",
+      "palmsprings.museum",
+      "panama.museum",
+      "paris.museum",
+      "pasadena.museum",
+      "pharmacy.museum",
+      "philadelphia.museum",
+      "philadelphiaarea.museum",
+      "philately.museum",
+      "phoenix.museum",
+      "photography.museum",
+      "pilots.museum",
+      "pittsburgh.museum",
+      "planetarium.museum",
+      "plantation.museum",
+      "plants.museum",
+      "plaza.museum",
+      "portal.museum",
+      "portland.museum",
+      "portlligat.museum",
+      "posts-and-telecommunications.museum",
+      "preservation.museum",
+      "presidio.museum",
+      "press.museum",
+      "project.museum",
+      "public.museum",
+      "pubol.museum",
+      "quebec.museum",
+      "railroad.museum",
+      "railway.museum",
+      "research.museum",
+      "resistance.museum",
+      "riodejaneiro.museum",
+      "rochester.museum",
+      "rockart.museum",
+      "roma.museum",
+      "russia.museum",
+      "saintlouis.museum",
+      "salem.museum",
+      "salvadordali.museum",
+      "salzburg.museum",
+      "sandiego.museum",
+      "sanfrancisco.museum",
+      "santabarbara.museum",
+      "santacruz.museum",
+      "santafe.museum",
+      "saskatchewan.museum",
+      "satx.museum",
+      "savannahga.museum",
+      "schlesisches.museum",
+      "schoenbrunn.museum",
+      "schokoladen.museum",
+      "school.museum",
+      "schweiz.museum",
+      "science.museum",
+      "scienceandhistory.museum",
+      "scienceandindustry.museum",
+      "sciencecenter.museum",
+      "sciencecenters.museum",
+      "science-fiction.museum",
+      "sciencehistory.museum",
+      "sciences.museum",
+      "sciencesnaturelles.museum",
+      "scotland.museum",
+      "seaport.museum",
+      "settlement.museum",
+      "settlers.museum",
+      "shell.museum",
+      "sherbrooke.museum",
+      "sibenik.museum",
+      "silk.museum",
+      "ski.museum",
+      "skole.museum",
+      "society.museum",
+      "sologne.museum",
+      "soundandvision.museum",
+      "southcarolina.museum",
+      "southwest.museum",
+      "space.museum",
+      "spy.museum",
+      "square.museum",
+      "stadt.museum",
+      "stalbans.museum",
+      "starnberg.museum",
+      "state.museum",
+      "stateofdelaware.museum",
+      "station.museum",
+      "steam.museum",
+      "steiermark.museum",
+      "stjohn.museum",
+      "stockholm.museum",
+      "stpetersburg.museum",
+      "stuttgart.museum",
+      "suisse.museum",
+      "surgeonshall.museum",
+      "surrey.museum",
+      "svizzera.museum",
+      "sweden.museum",
+      "sydney.museum",
+      "tank.museum",
+      "tcm.museum",
+      "technology.museum",
+      "telekommunikation.museum",
+      "television.museum",
+      "texas.museum",
+      "textile.museum",
+      "theater.museum",
+      "time.museum",
+      "timekeeping.museum",
+      "topology.museum",
+      "torino.museum",
+      "touch.museum",
+      "town.museum",
+      "transport.museum",
+      "tree.museum",
+      "trolley.museum",
+      "trust.museum",
+      "trustee.museum",
+      "uhren.museum",
+      "ulm.museum",
+      "undersea.museum",
+      "university.museum",
+      "usa.museum",
+      "usantiques.museum",
+      "usarts.museum",
+      "uscountryestate.museum",
+      "usculture.museum",
+      "usdecorativearts.museum",
+      "usgarden.museum",
+      "ushistory.museum",
+      "ushuaia.museum",
+      "uslivinghistory.museum",
+      "utah.museum",
+      "uvic.museum",
+      "valley.museum",
+      "vantaa.museum",
+      "versailles.museum",
+      "viking.museum",
+      "village.museum",
+      "virginia.museum",
+      "virtual.museum",
+      "virtuel.museum",
+      "vlaanderen.museum",
+      "volkenkunde.museum",
+      "wales.museum",
+      "wallonie.museum",
+      "war.museum",
+      "washingtondc.museum",
+      "watchandclock.museum",
+      "watch-and-clock.museum",
+      "western.museum",
+      "westfalen.museum",
+      "whaling.museum",
+      "wildlife.museum",
+      "williamsburg.museum",
+      "windmill.museum",
+      "workshop.museum",
+      "york.museum",
+      "yorkshire.museum",
+      "yosemite.museum",
+      "youth.museum",
+      "zoological.museum",
+      "zoology.museum",
+      "\u05d9\u05e8\u05d5\u05e9\u05dc\u05d9\u05dd.museum",
+      "xn--9dbhblg6di.museum",
+      "\u0438\u043a\u043e\u043c.museum",
+      "xn--h1aegh.museum",
+      "mv",
+      "aero.mv",
+      "biz.mv",
+      "com.mv",
+      "coop.mv",
+      "edu.mv",
+      "gov.mv",
+      "info.mv",
+      "int.mv",
+      "mil.mv",
+      "museum.mv",
+      "name.mv",
+      "net.mv",
+      "org.mv",
+      "pro.mv",
+      "mw",
+      "ac.mw",
+      "biz.mw",
+      "co.mw",
+      "com.mw",
+      "coop.mw",
+      "edu.mw",
+      "gov.mw",
+      "int.mw",
+      "museum.mw",
+      "net.mw",
+      "org.mw",
+      "mx",
+      "com.mx",
+      "org.mx",
+      "gob.mx",
+      "edu.mx",
+      "net.mx",
+      "my",
+      "com.my",
+      "net.my",
+      "org.my",
+      "gov.my",
+      "edu.my",
+      "mil.my",
+      "name.my",
+      "na",
+      "info.na",
+      "pro.na",
+      "name.na",
+      "school.na",
+      "or.na",
+      "dr.na",
+      "us.na",
+      "mx.na",
+      "ca.na",
+      "in.na",
+      "cc.na",
+      "tv.na",
+      "ws.na",
+      "mobi.na",
+      "co.na",
+      "com.na",
+      "org.na",
+      "name",
+      "nc",
+      "asso.nc",
+      "ne",
+      "net",
+      "gb.net",
+      "se.net",
+      "uk.net",
+      "za.net",
+      "nf",
+      "com.nf",
+      "net.nf",
+      "per.nf",
+      "rec.nf",
+      "web.nf",
+      "arts.nf",
+      "firm.nf",
+      "info.nf",
+      "other.nf",
+      "store.nf",
+      "ac.ng",
+      "com.ng",
+      "edu.ng",
+      "gov.ng",
+      "net.ng",
+      "org.ng",
+      "nl",
+      "bv.nl",
+      "no",
+      "fhs.no",
+      "vgs.no",
+      "fylkesbibl.no",
+      "folkebibl.no",
+      "museum.no",
+      "idrett.no",
+      "priv.no",
+      "mil.no",
+      "stat.no",
+      "dep.no",
+      "kommune.no",
+      "herad.no",
+      "aa.no",
+      "ah.no",
+      "bu.no",
+      "fm.no",
+      "hl.no",
+      "hm.no",
+      "jan-mayen.no",
+      "mr.no",
+      "nl.no",
+      "nt.no",
+      "of.no",
+      "ol.no",
+      "oslo.no",
+      "rl.no",
+      "sf.no",
+      "st.no",
+      "svalbard.no",
+      "tm.no",
+      "tr.no",
+      "va.no",
+      "vf.no",
+      "gs.aa.no",
+      "gs.ah.no",
+      "gs.bu.no",
+      "gs.fm.no",
+      "gs.hl.no",
+      "gs.hm.no",
+      "gs.jan-mayen.no",
+      "gs.mr.no",
+      "gs.nl.no",
+      "gs.nt.no",
+      "gs.of.no",
+      "gs.ol.no",
+      "gs.oslo.no",
+      "gs.rl.no",
+      "gs.sf.no",
+      "gs.st.no",
+      "gs.svalbard.no",
+      "gs.tm.no",
+      "gs.tr.no",
+      "gs.va.no",
+      "gs.vf.no",
+      "akrehamn.no",
+      "\u00e5krehamn.no",
+      "xn--krehamn-dxa.no",
+      "algard.no",
+      "\u00e5lg\u00e5rd.no",
+      "xn--lgrd-poac.no",
+      "arna.no",
+      "brumunddal.no",
+      "bryne.no",
+      "bronnoysund.no",
+      "br\u00f8nn\u00f8ysund.no",
+      "xn--brnnysund-m8ac.no",
+      "drobak.no",
+      "dr\u00f8bak.no",
+      "xn--drbak-wua.no",
+      "egersund.no",
+      "fetsund.no",
+      "floro.no",
+      "flor\u00f8.no",
+      "xn--flor-jra.no",
+      "fredrikstad.no",
+      "hokksund.no",
+      "honefoss.no",
+      "h\u00f8nefoss.no",
+      "xn--hnefoss-q1a.no",
+      "jessheim.no",
+      "jorpeland.no",
+      "j\u00f8rpeland.no",
+      "xn--jrpeland-54a.no",
+      "kirkenes.no",
+      "kopervik.no",
+      "krokstadelva.no",
+      "langevag.no",
+      "langev\u00e5g.no",
+      "xn--langevg-jxa.no",
+      "leirvik.no",
+      "mjondalen.no",
+      "mj\u00f8ndalen.no",
+      "xn--mjndalen-64a.no",
+      "mo-i-rana.no",
+      "mosjoen.no",
+      "mosj\u00f8en.no",
+      "xn--mosjen-eya.no",
+      "nesoddtangen.no",
+      "orkanger.no",
+      "osoyro.no",
+      "os\u00f8yro.no",
+      "xn--osyro-wua.no",
+      "raholt.no",
+      "r\u00e5holt.no",
+      "xn--rholt-mra.no",
+      "sandnessjoen.no",
+      "sandnessj\u00f8en.no",
+      "xn--sandnessjen-ogb.no",
+      "skedsmokorset.no",
+      "slattum.no",
+      "spjelkavik.no",
+      "stathelle.no",
+      "stavern.no",
+      "stjordalshalsen.no",
+      "stj\u00f8rdalshalsen.no",
+      "xn--stjrdalshalsen-sqb.no",
+      "tananger.no",
+      "tranby.no",
+      "vossevangen.no",
+      "afjord.no",
+      "\u00e5fjord.no",
+      "xn--fjord-lra.no",
+      "agdenes.no",
+      "al.no",
+      "\u00e5l.no",
+      "xn--l-1fa.no",
+      "alesund.no",
+      "\u00e5lesund.no",
+      "xn--lesund-hua.no",
+      "alstahaug.no",
+      "alta.no",
+      "\u00e1lt\u00e1.no",
+      "xn--lt-liac.no",
+      "alaheadju.no",
+      "\u00e1laheadju.no",
+      "xn--laheadju-7ya.no",
+      "alvdal.no",
+      "amli.no",
+      "\u00e5mli.no",
+      "xn--mli-tla.no",
+      "amot.no",
+      "\u00e5mot.no",
+      "xn--mot-tla.no",
+      "andebu.no",
+      "andoy.no",
+      "and\u00f8y.no",
+      "xn--andy-ira.no",
+      "andasuolo.no",
+      "ardal.no",
+      "\u00e5rdal.no",
+      "xn--rdal-poa.no",
+      "aremark.no",
+      "arendal.no",
+      "\u00e5s.no",
+      "xn--s-1fa.no",
+      "aseral.no",
+      "\u00e5seral.no",
+      "xn--seral-lra.no",
+      "asker.no",
+      "askim.no",
+      "askvoll.no",
+      "askoy.no",
+      "ask\u00f8y.no",
+      "xn--asky-ira.no",
+      "asnes.no",
+      "\u00e5snes.no",
+      "xn--snes-poa.no",
+      "audnedaln.no",
+      "aukra.no",
+      "aure.no",
+      "aurland.no",
+      "aurskog-holand.no",
+      "aurskog-h\u00f8land.no",
+      "xn--aurskog-hland-jnb.no",
+      "austevoll.no",
+      "austrheim.no",
+      "averoy.no",
+      "aver\u00f8y.no",
+      "xn--avery-yua.no",
+      "balestrand.no",
+      "ballangen.no",
+      "balat.no",
+      "b\u00e1l\u00e1t.no",
+      "xn--blt-elab.no",
+      "balsfjord.no",
+      "bahccavuotna.no",
+      "b\u00e1hccavuotna.no",
+      "xn--bhccavuotna-k7a.no",
+      "bamble.no",
+      "bardu.no",
+      "beardu.no",
+      "beiarn.no",
+      "bajddar.no",
+      "b\u00e1jddar.no",
+      "xn--bjddar-pta.no",
+      "baidar.no",
+      "b\u00e1id\u00e1r.no",
+      "xn--bidr-5nac.no",
+      "berg.no",
+      "bergen.no",
+      "berlevag.no",
+      "berlev\u00e5g.no",
+      "xn--berlevg-jxa.no",
+      "bearalvahki.no",
+      "bearalv\u00e1hki.no",
+      "xn--bearalvhki-y4a.no",
+      "bindal.no",
+      "birkenes.no",
+      "bjarkoy.no",
+      "bjark\u00f8y.no",
+      "xn--bjarky-fya.no",
+      "bjerkreim.no",
+      "bjugn.no",
+      "bodo.no",
+      "bod\u00f8.no",
+      "xn--bod-2na.no",
+      "badaddja.no",
+      "b\u00e5d\u00e5ddj\u00e5.no",
+      "xn--bdddj-mrabd.no",
+      "budejju.no",
+      "bokn.no",
+      "bremanger.no",
+      "bronnoy.no",
+      "br\u00f8nn\u00f8y.no",
+      "xn--brnny-wuac.no",
+      "bygland.no",
+      "bykle.no",
+      "barum.no",
+      "b\u00e6rum.no",
+      "xn--brum-voa.no",
+      "bo.telemark.no",
+      "b\u00f8.telemark.no",
+      "xn--b-5ga.telemark.no",
+      "bo.nordland.no",
+      "b\u00f8.nordland.no",
+      "xn--b-5ga.nordland.no",
+      "bievat.no",
+      "biev\u00e1t.no",
+      "xn--bievt-0qa.no",
+      "bomlo.no",
+      "b\u00f8mlo.no",
+      "xn--bmlo-gra.no",
+      "batsfjord.no",
+      "b\u00e5tsfjord.no",
+      "xn--btsfjord-9za.no",
+      "bahcavuotna.no",
+      "b\u00e1hcavuotna.no",
+      "xn--bhcavuotna-s4a.no",
+      "dovre.no",
+      "drammen.no",
+      "drangedal.no",
+      "dyroy.no",
+      "dyr\u00f8y.no",
+      "xn--dyry-ira.no",
+      "donna.no",
+      "d\u00f8nna.no",
+      "xn--dnna-gra.no",
+      "eid.no",
+      "eidfjord.no",
+      "eidsberg.no",
+      "eidskog.no",
+      "eidsvoll.no",
+      "eigersund.no",
+      "elverum.no",
+      "enebakk.no",
+      "engerdal.no",
+      "etne.no",
+      "etnedal.no",
+      "evenes.no",
+      "evenassi.no",
+      "even\u00e1\u0161\u0161i.no",
+      "xn--eveni-0qa01ga.no",
+      "evje-og-hornnes.no",
+      "farsund.no",
+      "fauske.no",
+      "fuossko.no",
+      "fuoisku.no",
+      "fedje.no",
+      "fet.no",
+      "finnoy.no",
+      "finn\u00f8y.no",
+      "xn--finny-yua.no",
+      "fitjar.no",
+      "fjaler.no",
+      "fjell.no",
+      "flakstad.no",
+      "flatanger.no",
+      "flekkefjord.no",
+      "flesberg.no",
+      "flora.no",
+      "fla.no",
+      "fl\u00e5.no",
+      "xn--fl-zia.no",
+      "folldal.no",
+      "forsand.no",
+      "fosnes.no",
+      "frei.no",
+      "frogn.no",
+      "froland.no",
+      "frosta.no",
+      "frana.no",
+      "fr\u00e6na.no",
+      "xn--frna-woa.no",
+      "froya.no",
+      "fr\u00f8ya.no",
+      "xn--frya-hra.no",
+      "fusa.no",
+      "fyresdal.no",
+      "forde.no",
+      "f\u00f8rde.no",
+      "xn--frde-gra.no",
+      "gamvik.no",
+      "gangaviika.no",
+      "g\u00e1\u014bgaviika.no",
+      "xn--ggaviika-8ya47h.no",
+      "gaular.no",
+      "gausdal.no",
+      "gildeskal.no",
+      "gildesk\u00e5l.no",
+      "xn--gildeskl-g0a.no",
+      "giske.no",
+      "gjemnes.no",
+      "gjerdrum.no",
+      "gjerstad.no",
+      "gjesdal.no",
+      "gjovik.no",
+      "gj\u00f8vik.no",
+      "xn--gjvik-wua.no",
+      "gloppen.no",
+      "gol.no",
+      "gran.no",
+      "grane.no",
+      "granvin.no",
+      "gratangen.no",
+      "grimstad.no",
+      "grong.no",
+      "kraanghke.no",
+      "kr\u00e5anghke.no",
+      "xn--kranghke-b0a.no",
+      "grue.no",
+      "gulen.no",
+      "hadsel.no",
+      "halden.no",
+      "halsa.no",
+      "hamar.no",
+      "hamaroy.no",
+      "habmer.no",
+      "h\u00e1bmer.no",
+      "xn--hbmer-xqa.no",
+      "hapmir.no",
+      "h\u00e1pmir.no",
+      "xn--hpmir-xqa.no",
+      "hammerfest.no",
+      "hammarfeasta.no",
+      "h\u00e1mm\u00e1rfeasta.no",
+      "xn--hmmrfeasta-s4ac.no",
+      "haram.no",
+      "hareid.no",
+      "harstad.no",
+      "hasvik.no",
+      "aknoluokta.no",
+      "\u00e1k\u014boluokta.no",
+      "xn--koluokta-7ya57h.no",
+      "hattfjelldal.no",
+      "aarborte.no",
+      "haugesund.no",
+      "hemne.no",
+      "hemnes.no",
+      "hemsedal.no",
+      "heroy.more-og-romsdal.no",
+      "her\u00f8y.m\u00f8re-og-romsdal.no",
+      "xn--hery-ira.xn--mre-og-romsdal-qqb.no",
+      "heroy.nordland.no",
+      "her\u00f8y.nordland.no",
+      "xn--hery-ira.nordland.no",
+      "hitra.no",
+      "hjartdal.no",
+      "hjelmeland.no",
+      "hobol.no",
+      "hob\u00f8l.no",
+      "xn--hobl-ira.no",
+      "hof.no",
+      "hol.no",
+      "hole.no",
+      "holmestrand.no",
+      "holtalen.no",
+      "holt\u00e5len.no",
+      "xn--holtlen-hxa.no",
+      "hornindal.no",
+      "horten.no",
+      "hurdal.no",
+      "hurum.no",
+      "hvaler.no",
+      "hyllestad.no",
+      "hagebostad.no",
+      "h\u00e6gebostad.no",
+      "xn--hgebostad-g3a.no",
+      "hoyanger.no",
+      "h\u00f8yanger.no",
+      "xn--hyanger-q1a.no",
+      "hoylandet.no",
+      "h\u00f8ylandet.no",
+      "xn--hylandet-54a.no",
+      "ha.no",
+      "h\u00e5.no",
+      "xn--h-2fa.no",
+      "ibestad.no",
+      "inderoy.no",
+      "inder\u00f8y.no",
+      "xn--indery-fya.no",
+      "iveland.no",
+      "jevnaker.no",
+      "jondal.no",
+      "jolster.no",
+      "j\u00f8lster.no",
+      "xn--jlster-bya.no",
+      "karasjok.no",
+      "karasjohka.no",
+      "k\u00e1r\u00e1\u0161johka.no",
+      "xn--krjohka-hwab49j.no",
+      "karlsoy.no",
+      "galsa.no",
+      "g\u00e1ls\u00e1.no",
+      "xn--gls-elac.no",
+      "karmoy.no",
+      "karm\u00f8y.no",
+      "xn--karmy-yua.no",
+      "kautokeino.no",
+      "guovdageaidnu.no",
+      "klepp.no",
+      "klabu.no",
+      "kl\u00e6bu.no",
+      "xn--klbu-woa.no",
+      "kongsberg.no",
+      "kongsvinger.no",
+      "kragero.no",
+      "krager\u00f8.no",
+      "xn--krager-gya.no",
+      "kristiansand.no",
+      "kristiansund.no",
+      "krodsherad.no",
+      "kr\u00f8dsherad.no",
+      "xn--krdsherad-m8a.no",
+      "kvalsund.no",
+      "rahkkeravju.no",
+      "r\u00e1hkker\u00e1vju.no",
+      "xn--rhkkervju-01af.no",
+      "kvam.no",
+      "kvinesdal.no",
+      "kvinnherad.no",
+      "kviteseid.no",
+      "kvitsoy.no",
+      "kvits\u00f8y.no",
+      "xn--kvitsy-fya.no",
+      "kvafjord.no",
+      "kv\u00e6fjord.no",
+      "xn--kvfjord-nxa.no",
+      "giehtavuoatna.no",
+      "kvanangen.no",
+      "kv\u00e6nangen.no",
+      "xn--kvnangen-k0a.no",
+      "navuotna.no",
+      "n\u00e1vuotna.no",
+      "xn--nvuotna-hwa.no",
+      "kafjord.no",
+      "k\u00e5fjord.no",
+      "xn--kfjord-iua.no",
+      "gaivuotna.no",
+      "g\u00e1ivuotna.no",
+      "xn--givuotna-8ya.no",
+      "larvik.no",
+      "lavangen.no",
+      "lavagis.no",
+      "loabat.no",
+      "loab\u00e1t.no",
+      "xn--loabt-0qa.no",
+      "lebesby.no",
+      "davvesiida.no",
+      "leikanger.no",
+      "leirfjord.no",
+      "leka.no",
+      "leksvik.no",
+      "lenvik.no",
+      "leangaviika.no",
+      "lea\u014bgaviika.no",
+      "xn--leagaviika-52b.no",
+      "lesja.no",
+      "levanger.no",
+      "lier.no",
+      "lierne.no",
+      "lillehammer.no",
+      "lillesand.no",
+      "lindesnes.no",
+      "lindas.no",
+      "lind\u00e5s.no",
+      "xn--linds-pra.no",
+      "lom.no",
+      "loppa.no",
+      "lahppi.no",
+      "l\u00e1hppi.no",
+      "xn--lhppi-xqa.no",
+      "lund.no",
+      "lunner.no",
+      "luroy.no",
+      "lur\u00f8y.no",
+      "xn--lury-ira.no",
+      "luster.no",
+      "lyngdal.no",
+      "lyngen.no",
+      "ivgu.no",
+      "lardal.no",
+      "lerdal.no",
+      "l\u00e6rdal.no",
+      "xn--lrdal-sra.no",
+      "lodingen.no",
+      "l\u00f8dingen.no",
+      "xn--ldingen-q1a.no",
+      "lorenskog.no",
+      "l\u00f8renskog.no",
+      "xn--lrenskog-54a.no",
+      "loten.no",
+      "l\u00f8ten.no",
+      "xn--lten-gra.no",
+      "malvik.no",
+      "masoy.no",
+      "m\u00e5s\u00f8y.no",
+      "xn--msy-ula0h.no",
+      "muosat.no",
+      "muos\u00e1t.no",
+      "xn--muost-0qa.no",
+      "mandal.no",
+      "marker.no",
+      "marnardal.no",
+      "masfjorden.no",
+      "meland.no",
+      "meldal.no",
+      "melhus.no",
+      "meloy.no",
+      "mel\u00f8y.no",
+      "xn--mely-ira.no",
+      "meraker.no",
+      "mer\u00e5ker.no",
+      "xn--merker-kua.no",
+      "moareke.no",
+      "mo\u00e5reke.no",
+      "xn--moreke-jua.no",
+      "midsund.no",
+      "midtre-gauldal.no",
+      "modalen.no",
+      "modum.no",
+      "molde.no",
+      "moskenes.no",
+      "moss.no",
+      "mosvik.no",
+      "malselv.no",
+      "m\u00e5lselv.no",
+      "xn--mlselv-iua.no",
+      "malatvuopmi.no",
+      "m\u00e1latvuopmi.no",
+      "xn--mlatvuopmi-s4a.no",
+      "namdalseid.no",
+      "aejrie.no",
+      "namsos.no",
+      "namsskogan.no",
+      "naamesjevuemie.no",
+      "n\u00e5\u00e5mesjevuemie.no",
+      "xn--nmesjevuemie-tcba.no",
+      "laakesvuemie.no",
+      "nannestad.no",
+      "narvik.no",
+      "narviika.no",
+      "naustdal.no",
+      "nedre-eiker.no",
+      "nes.akershus.no",
+      "nes.buskerud.no",
+      "nesna.no",
+      "nesodden.no",
+      "nesseby.no",
+      "unjarga.no",
+      "unj\u00e1rga.no",
+      "xn--unjrga-rta.no",
+      "nesset.no",
+      "nissedal.no",
+      "nittedal.no",
+      "nord-aurdal.no",
+      "nord-fron.no",
+      "nord-odal.no",
+      "norddal.no",
+      "nordkapp.no",
+      "davvenjarga.no",
+      "davvenj\u00e1rga.no",
+      "xn--davvenjrga-y4a.no",
+      "nordre-land.no",
+      "nordreisa.no",
+      "raisa.no",
+      "r\u00e1isa.no",
+      "xn--risa-5na.no",
+      "nore-og-uvdal.no",
+      "notodden.no",
+      "naroy.no",
+      "n\u00e6r\u00f8y.no",
+      "xn--nry-yla5g.no",
+      "notteroy.no",
+      "n\u00f8tter\u00f8y.no",
+      "xn--nttery-byae.no",
+      "odda.no",
+      "oksnes.no",
+      "\u00f8ksnes.no",
+      "xn--ksnes-uua.no",
+      "oppdal.no",
+      "oppegard.no",
+      "oppeg\u00e5rd.no",
+      "xn--oppegrd-ixa.no",
+      "orkdal.no",
+      "orland.no",
+      "\u00f8rland.no",
+      "xn--rland-uua.no",
+      "orskog.no",
+      "\u00f8rskog.no",
+      "xn--rskog-uua.no",
+      "orsta.no",
+      "\u00f8rsta.no",
+      "xn--rsta-fra.no",
+      "os.hedmark.no",
+      "os.hordaland.no",
+      "osen.no",
+      "osteroy.no",
+      "oster\u00f8y.no",
+      "xn--ostery-fya.no",
+      "ostre-toten.no",
+      "\u00f8stre-toten.no",
+      "xn--stre-toten-zcb.no",
+      "overhalla.no",
+      "ovre-eiker.no",
+      "\u00f8vre-eiker.no",
+      "xn--vre-eiker-k8a.no",
+      "oyer.no",
+      "\u00f8yer.no",
+      "xn--yer-zna.no",
+      "oygarden.no",
+      "\u00f8ygarden.no",
+      "xn--ygarden-p1a.no",
+      "oystre-slidre.no",
+      "\u00f8ystre-slidre.no",
+      "xn--ystre-slidre-ujb.no",
+      "porsanger.no",
+      "porsangu.no",
+      "pors\u00e1\u014bgu.no",
+      "xn--porsgu-sta26f.no",
+      "porsgrunn.no",
+      "radoy.no",
+      "rad\u00f8y.no",
+      "xn--rady-ira.no",
+      "rakkestad.no",
+      "rana.no",
+      "ruovat.no",
+      "randaberg.no",
+      "rauma.no",
+      "rendalen.no",
+      "rennebu.no",
+      "rennesoy.no",
+      "rennes\u00f8y.no",
+      "xn--rennesy-v1a.no",
+      "rindal.no",
+      "ringebu.no",
+      "ringerike.no",
+      "ringsaker.no",
+      "rissa.no",
+      "risor.no",
+      "ris\u00f8r.no",
+      "xn--risr-ira.no",
+      "roan.no",
+      "rollag.no",
+      "rygge.no",
+      "ralingen.no",
+      "r\u00e6lingen.no",
+      "xn--rlingen-mxa.no",
+      "rodoy.no",
+      "r\u00f8d\u00f8y.no",
+      "xn--rdy-0nab.no",
+      "romskog.no",
+      "r\u00f8mskog.no",
+      "xn--rmskog-bya.no",
+      "roros.no",
+      "r\u00f8ros.no",
+      "xn--rros-gra.no",
+      "rost.no",
+      "r\u00f8st.no",
+      "xn--rst-0na.no",
+      "royken.no",
+      "r\u00f8yken.no",
+      "xn--ryken-vua.no",
+      "royrvik.no",
+      "r\u00f8yrvik.no",
+      "xn--ryrvik-bya.no",
+      "rade.no",
+      "r\u00e5de.no",
+      "xn--rde-ula.no",
+      "salangen.no",
+      "siellak.no",
+      "saltdal.no",
+      "salat.no",
+      "s\u00e1l\u00e1t.no",
+      "xn--slt-elab.no",
+      "s\u00e1lat.no",
+      "xn--slat-5na.no",
+      "samnanger.no",
+      "sande.more-og-romsdal.no",
+      "sande.m\u00f8re-og-romsdal.no",
+      "sande.xn--mre-og-romsdal-qqb.no",
+      "sande.vestfold.no",
+      "sandefjord.no",
+      "sandnes.no",
+      "sandoy.no",
+      "sand\u00f8y.no",
+      "xn--sandy-yua.no",
+      "sarpsborg.no",
+      "sauda.no",
+      "sauherad.no",
+      "sel.no",
+      "selbu.no",
+      "selje.no",
+      "seljord.no",
+      "sigdal.no",
+      "siljan.no",
+      "sirdal.no",
+      "skaun.no",
+      "skedsmo.no",
+      "ski.no",
+      "skien.no",
+      "skiptvet.no",
+      "skjervoy.no",
+      "skjerv\u00f8y.no",
+      "xn--skjervy-v1a.no",
+      "skierva.no",
+      "skierv\u00e1.no",
+      "xn--skierv-uta.no",
+      "skjak.no",
+      "skj\u00e5k.no",
+      "xn--skjk-soa.no",
+      "skodje.no",
+      "skanland.no",
+      "sk\u00e5nland.no",
+      "xn--sknland-fxa.no",
+      "skanit.no",
+      "sk\u00e1nit.no",
+      "xn--sknit-yqa.no",
+      "smola.no",
+      "sm\u00f8la.no",
+      "xn--smla-hra.no",
+      "snillfjord.no",
+      "snasa.no",
+      "sn\u00e5sa.no",
+      "xn--snsa-roa.no",
+      "snoasa.no",
+      "snaase.no",
+      "sn\u00e5ase.no",
+      "xn--snase-nra.no",
+      "sogndal.no",
+      "sokndal.no",
+      "sola.no",
+      "solund.no",
+      "songdalen.no",
+      "sortland.no",
+      "spydeberg.no",
+      "stange.no",
+      "stavanger.no",
+      "steigen.no",
+      "steinkjer.no",
+      "stjordal.no",
+      "stj\u00f8rdal.no",
+      "xn--stjrdal-s1a.no",
+      "stokke.no",
+      "stor-elvdal.no",
+      "stord.no",
+      "stordal.no",
+      "storfjord.no",
+      "omasvuotna.no",
+      "strand.no",
+      "stranda.no",
+      "stryn.no",
+      "sula.no",
+      "suldal.no",
+      "sund.no",
+      "sunndal.no",
+      "surnadal.no",
+      "sveio.no",
+      "svelvik.no",
+      "sykkylven.no",
+      "sogne.no",
+      "s\u00f8gne.no",
+      "xn--sgne-gra.no",
+      "somna.no",
+      "s\u00f8mna.no",
+      "xn--smna-gra.no",
+      "sondre-land.no",
+      "s\u00f8ndre-land.no",
+      "xn--sndre-land-0cb.no",
+      "sor-aurdal.no",
+      "s\u00f8r-aurdal.no",
+      "xn--sr-aurdal-l8a.no",
+      "sor-fron.no",
+      "s\u00f8r-fron.no",
+      "xn--sr-fron-q1a.no",
+      "sor-odal.no",
+      "s\u00f8r-odal.no",
+      "xn--sr-odal-q1a.no",
+      "sor-varanger.no",
+      "s\u00f8r-varanger.no",
+      "xn--sr-varanger-ggb.no",
+      "matta-varjjat.no",
+      "m\u00e1tta-v\u00e1rjjat.no",
+      "xn--mtta-vrjjat-k7af.no",
+      "sorfold.no",
+      "s\u00f8rfold.no",
+      "xn--srfold-bya.no",
+      "sorreisa.no",
+      "s\u00f8rreisa.no",
+      "xn--srreisa-q1a.no",
+      "sorum.no",
+      "s\u00f8rum.no",
+      "xn--srum-gra.no",
+      "tana.no",
+      "deatnu.no",
+      "time.no",
+      "tingvoll.no",
+      "tinn.no",
+      "tjeldsund.no",
+      "dielddanuorri.no",
+      "tjome.no",
+      "tj\u00f8me.no",
+      "xn--tjme-hra.no",
+      "tokke.no",
+      "tolga.no",
+      "torsken.no",
+      "tranoy.no",
+      "tran\u00f8y.no",
+      "xn--trany-yua.no",
+      "tromso.no",
+      "troms\u00f8.no",
+      "xn--troms-zua.no",
+      "tromsa.no",
+      "romsa.no",
+      "trondheim.no",
+      "troandin.no",
+      "trysil.no",
+      "trana.no",
+      "tr\u00e6na.no",
+      "xn--trna-woa.no",
+      "trogstad.no",
+      "tr\u00f8gstad.no",
+      "xn--trgstad-r1a.no",
+      "tvedestrand.no",
+      "tydal.no",
+      "tynset.no",
+      "tysfjord.no",
+      "divtasvuodna.no",
+      "divttasvuotna.no",
+      "tysnes.no",
+      "tysvar.no",
+      "tysv\u00e6r.no",
+      "xn--tysvr-vra.no",
+      "tonsberg.no",
+      "t\u00f8nsberg.no",
+      "xn--tnsberg-q1a.no",
+      "ullensaker.no",
+      "ullensvang.no",
+      "ulvik.no",
+      "utsira.no",
+      "vadso.no",
+      "vads\u00f8.no",
+      "xn--vads-jra.no",
+      "cahcesuolo.no",
+      "\u010d\u00e1hcesuolo.no",
+      "xn--hcesuolo-7ya35b.no",
+      "vaksdal.no",
+      "valle.no",
+      "vang.no",
+      "vanylven.no",
+      "vardo.no",
+      "vard\u00f8.no",
+      "xn--vard-jra.no",
+      "varggat.no",
+      "v\u00e1rgg\u00e1t.no",
+      "xn--vrggt-xqad.no",
+      "vefsn.no",
+      "vaapste.no",
+      "vega.no",
+      "vegarshei.no",
+      "veg\u00e5rshei.no",
+      "xn--vegrshei-c0a.no",
+      "vennesla.no",
+      "verdal.no",
+      "verran.no",
+      "vestby.no",
+      "vestnes.no",
+      "vestre-slidre.no",
+      "vestre-toten.no",
+      "vestvagoy.no",
+      "vestv\u00e5g\u00f8y.no",
+      "xn--vestvgy-ixa6o.no",
+      "vevelstad.no",
+      "vik.no",
+      "vikna.no",
+      "vindafjord.no",
+      "volda.no",
+      "voss.no",
+      "varoy.no",
+      "v\u00e6r\u00f8y.no",
+      "xn--vry-yla5g.no",
+      "vagan.no",
+      "v\u00e5gan.no",
+      "xn--vgan-qoa.no",
+      "voagat.no",
+      "vagsoy.no",
+      "v\u00e5gs\u00f8y.no",
+      "xn--vgsy-qoa0j.no",
+      "vaga.no",
+      "v\u00e5g\u00e5.no",
+      "xn--vg-yiab.no",
+      "valer.ostfold.no",
+      "v\u00e5ler.\u00f8stfold.no",
+      "xn--vler-qoa.xn--stfold-9xa.no",
+      "valer.hedmark.no",
+      "v\u00e5ler.hedmark.no",
+      "xn--vler-qoa.hedmark.no",
+      "nr",
+      "biz.nr",
+      "info.nr",
+      "gov.nr",
+      "edu.nr",
+      "org.nr",
+      "net.nr",
+      "com.nr",
+      "nu",
+      "org",
+      "ae.org",
+      "za.org",
+      "pa",
+      "ac.pa",
+      "gob.pa",
+      "com.pa",
+      "org.pa",
+      "sld.pa",
+      "edu.pa",
+      "net.pa",
+      "ing.pa",
+      "abo.pa",
+      "med.pa",
+      "nom.pa",
+      "pe",
+      "edu.pe",
+      "gob.pe",
+      "nom.pe",
+      "mil.pe",
+      "org.pe",
+      "com.pe",
+      "net.pe",
+      "pf",
+      "com.pf",
+      "org.pf",
+      "edu.pf",
+      "ph",
+      "com.ph",
+      "net.ph",
+      "org.ph",
+      "gov.ph",
+      "edu.ph",
+      "ngo.ph",
+      "mil.ph",
+      "i.ph",
+      "pk",
+      "com.pk",
+      "net.pk",
+      "edu.pk",
+      "org.pk",
+      "fam.pk",
+      "biz.pk",
+      "web.pk",
+      "gov.pk",
+      "gob.pk",
+      "gok.pk",
+      "gon.pk",
+      "gop.pk",
+      "gos.pk",
+      "info.pk",
+      "pl",
+      "aid.pl",
+      "agro.pl",
+      "atm.pl",
+      "auto.pl",
+      "biz.pl",
+      "com.pl",
+      "edu.pl",
+      "gmina.pl",
+      "gsm.pl",
+      "info.pl",
+      "mail.pl",
+      "miasta.pl",
+      "media.pl",
+      "mil.pl",
+      "net.pl",
+      "nieruchomosci.pl",
+      "nom.pl",
+      "org.pl",
+      "pc.pl",
+      "powiat.pl",
+      "priv.pl",
+      "realestate.pl",
+      "rel.pl",
+      "sex.pl",
+      "shop.pl",
+      "sklep.pl",
+      "sos.pl",
+      "szkola.pl",
+      "targi.pl",
+      "tm.pl",
+      "tourism.pl",
+      "travel.pl",
+      "turystyka.pl",
+      "6bone.pl",
+      "art.pl",
+      "mbone.pl",
+      "gov.pl",
+      "uw.gov.pl",
+      "um.gov.pl",
+      "ug.gov.pl",
+      "upow.gov.pl",
+      "starostwo.gov.pl",
+      "so.gov.pl",
+      "sr.gov.pl",
+      "po.gov.pl",
+      "pa.gov.pl",
+      "ngo.pl",
+      "irc.pl",
+      "usenet.pl",
+      "augustow.pl",
+      "babia-gora.pl",
+      "bedzin.pl",
+      "beskidy.pl",
+      "bialowieza.pl",
+      "bialystok.pl",
+      "bielawa.pl",
+      "bieszczady.pl",
+      "boleslawiec.pl",
+      "bydgoszcz.pl",
+      "bytom.pl",
+      "cieszyn.pl",
+      "czeladz.pl",
+      "czest.pl",
+      "dlugoleka.pl",
+      "elblag.pl",
+      "elk.pl",
+      "glogow.pl",
+      "gniezno.pl",
+      "gorlice.pl",
+      "grajewo.pl",
+      "ilawa.pl",
+      "jaworzno.pl",
+      "jelenia-gora.pl",
+      "jgora.pl",
+      "kalisz.pl",
+      "kazimierz-dolny.pl",
+      "karpacz.pl",
+      "kartuzy.pl",
+      "kaszuby.pl",
+      "katowice.pl",
+      "kepno.pl",
+      "ketrzyn.pl",
+      "klodzko.pl",
+      "kobierzyce.pl",
+      "kolobrzeg.pl",
+      "konin.pl",
+      "konskowola.pl",
+      "kutno.pl",
+      "lapy.pl",
+      "lebork.pl",
+      "legnica.pl",
+      "lezajsk.pl",
+      "limanowa.pl",
+      "lomza.pl",
+      "lowicz.pl",
+      "lubin.pl",
+      "lukow.pl",
+      "malbork.pl",
+      "malopolska.pl",
+      "mazowsze.pl",
+      "mazury.pl",
+      "mielec.pl",
+      "mielno.pl",
+      "mragowo.pl",
+      "naklo.pl",
+      "nowaruda.pl",
+      "nysa.pl",
+      "olawa.pl",
+      "olecko.pl",
+      "olkusz.pl",
+      "olsztyn.pl",
+      "opoczno.pl",
+      "opole.pl",
+      "ostroda.pl",
+      "ostroleka.pl",
+      "ostrowiec.pl",
+      "ostrowwlkp.pl",
+      "pila.pl",
+      "pisz.pl",
+      "podhale.pl",
+      "podlasie.pl",
+      "polkowice.pl",
+      "pomorze.pl",
+      "pomorskie.pl",
+      "prochowice.pl",
+      "pruszkow.pl",
+      "przeworsk.pl",
+      "pulawy.pl",
+      "radom.pl",
+      "rawa-maz.pl",
+      "rybnik.pl",
+      "rzeszow.pl",
+      "sanok.pl",
+      "sejny.pl",
+      "siedlce.pl",
+      "slask.pl",
+      "slupsk.pl",
+      "sosnowiec.pl",
+      "stalowa-wola.pl",
+      "skoczow.pl",
+      "starachowice.pl",
+      "stargard.pl",
+      "suwalki.pl",
+      "swidnica.pl",
+      "swiebodzin.pl",
+      "swinoujscie.pl",
+      "szczecin.pl",
+      "szczytno.pl",
+      "tarnobrzeg.pl",
+      "tgory.pl",
+      "turek.pl",
+      "tychy.pl",
+      "ustka.pl",
+      "walbrzych.pl",
+      "warmia.pl",
+      "warszawa.pl",
+      "waw.pl",
+      "wegrow.pl",
+      "wielun.pl",
+      "wlocl.pl",
+      "wloclawek.pl",
+      "wodzislaw.pl",
+      "wolomin.pl",
+      "wroclaw.pl",
+      "zachpomor.pl",
+      "zagan.pl",
+      "zarow.pl",
+      "zgora.pl",
+      "zgorzelec.pl",
+      "gda.pl",
+      "gdansk.pl",
+      "gdynia.pl",
+      "med.pl",
+      "sopot.pl",
+      "gliwice.pl",
+      "krakow.pl",
+      "poznan.pl",
+      "wroc.pl",
+      "zakopane.pl",
+      "co.pl",
+      "pn",
+      "gov.pn",
+      "co.pn",
+      "org.pn",
+      "edu.pn",
+      "net.pn",
+      "pr",
+      "com.pr",
+      "net.pr",
+      "org.pr",
+      "gov.pr",
+      "edu.pr",
+      "isla.pr",
+      "pro.pr",
+      "biz.pr",
+      "info.pr",
+      "name.pr",
+      "est.pr",
+      "prof.pr",
+      "ac.pr",
+      "pro",
+      "aca.pro",
+      "bar.pro",
+      "cpa.pro",
+      "jur.pro",
+      "law.pro",
+      "med.pro",
+      "eng.pro",
+      "ps",
+      "edu.ps",
+      "gov.ps",
+      "sec.ps",
+      "plo.ps",
+      "com.ps",
+      "org.ps",
+      "net.ps",
+      "pt",
+      "net.pt",
+      "gov.pt",
+      "org.pt",
+      "edu.pt",
+      "int.pt",
+      "publ.pt",
+      "com.pt",
+      "nome.pt",
+      "pw",
+      "co.pw",
+      "ne.pw",
+      "or.pw",
+      "ed.pw",
+      "go.pw",
+      "belau.pw",
+      "re",
+      "com.re",
+      "asso.re",
+      "nom.re",
+      "ro",
+      "com.ro",
+      "org.ro",
+      "tm.ro",
+      "nt.ro",
+      "nom.ro",
+      "info.ro",
+      "rec.ro",
+      "arts.ro",
+      "firm.ro",
+      "store.ro",
+      "www.ro",
+      "rs",
+      "co.rs",
+      "org.rs",
+      "edu.rs",
+      "ac.rs",
+      "gov.rs",
+      "in.rs",
+      "ru",
+      "ac.ru",
+      "com.ru",
+      "edu.ru",
+      "int.ru",
+      "net.ru",
+      "org.ru",
+      "pp.ru",
+      "adygeya.ru",
+      "altai.ru",
+      "amur.ru",
+      "arkhangelsk.ru",
+      "astrakhan.ru",
+      "bashkiria.ru",
+      "belgorod.ru",
+      "bir.ru",
+      "bryansk.ru",
+      "buryatia.ru",
+      "cbg.ru",
+      "chel.ru",
+      "chelyabinsk.ru",
+      "chita.ru",
+      "chukotka.ru",
+      "chuvashia.ru",
+      "dagestan.ru",
+      "dudinka.ru",
+      "e-burg.ru",
+      "grozny.ru",
+      "irkutsk.ru",
+      "ivanovo.ru",
+      "izhevsk.ru",
+      "jar.ru",
+      "joshkar-ola.ru",
+      "kalmykia.ru",
+      "kaluga.ru",
+      "kamchatka.ru",
+      "karelia.ru",
+      "kazan.ru",
+      "kchr.ru",
+      "kemerovo.ru",
+      "khabarovsk.ru",
+      "khakassia.ru",
+      "khv.ru",
+      "kirov.ru",
+      "koenig.ru",
+      "komi.ru",
+      "kostroma.ru",
+      "krasnoyarsk.ru",
+      "kuban.ru",
+      "kurgan.ru",
+      "kursk.ru",
+      "lipetsk.ru",
+      "magadan.ru",
+      "mari.ru",
+      "mari-el.ru",
+      "marine.ru",
+      "mordovia.ru",
+      "mosreg.ru",
+      "msk.ru",
+      "murmansk.ru",
+      "nalchik.ru",
+      "nnov.ru",
+      "nov.ru",
+      "novosibirsk.ru",
+      "nsk.ru",
+      "omsk.ru",
+      "orenburg.ru",
+      "oryol.ru",
+      "palana.ru",
+      "penza.ru",
+      "perm.ru",
+      "pskov.ru",
+      "ptz.ru",
+      "rnd.ru",
+      "ryazan.ru",
+      "sakhalin.ru",
+      "samara.ru",
+      "saratov.ru",
+      "simbirsk.ru",
+      "smolensk.ru",
+      "spb.ru",
+      "stavropol.ru",
+      "stv.ru",
+      "surgut.ru",
+      "tambov.ru",
+      "tatarstan.ru",
+      "tom.ru",
+      "tomsk.ru",
+      "tsaritsyn.ru",
+      "tsk.ru",
+      "tula.ru",
+      "tuva.ru",
+      "tver.ru",
+      "tyumen.ru",
+      "udm.ru",
+      "udmurtia.ru",
+      "ulan-ude.ru",
+      "vladikavkaz.ru",
+      "vladimir.ru",
+      "vladivostok.ru",
+      "volgograd.ru",
+      "vologda.ru",
+      "voronezh.ru",
+      "vrn.ru",
+      "vyatka.ru",
+      "yakutia.ru",
+      "yamal.ru",
+      "yaroslavl.ru",
+      "yekaterinburg.ru",
+      "yuzhno-sakhalinsk.ru",
+      "amursk.ru",
+      "baikal.ru",
+      "cmw.ru",
+      "fareast.ru",
+      "jamal.ru",
+      "kms.ru",
+      "k-uralsk.ru",
+      "kustanai.ru",
+      "kuzbass.ru",
+      "magnitka.ru",
+      "mytis.ru",
+      "nakhodka.ru",
+      "nkz.ru",
+      "norilsk.ru",
+      "oskol.ru",
+      "pyatigorsk.ru",
+      "rubtsovsk.ru",
+      "snz.ru",
+      "syzran.ru",
+      "vdonsk.ru",
+      "zgrad.ru",
+      "gov.ru",
+      "mil.ru",
+      "test.ru",
+      "rw",
+      "gov.rw",
+      "net.rw",
+      "edu.rw",
+      "ac.rw",
+      "com.rw",
+      "co.rw",
+      "int.rw",
+      "mil.rw",
+      "gouv.rw",
+      "sa",
+      "com.sa",
+      "net.sa",
+      "org.sa",
+      "gov.sa",
+      "med.sa",
+      "pub.sa",
+      "edu.sa",
+      "sch.sa",
+      "sb",
+      "com.sb",
+      "edu.sb",
+      "gov.sb",
+      "net.sb",
+      "org.sb",
+      "sc",
+      "com.sc",
+      "gov.sc",
+      "net.sc",
+      "org.sc",
+      "edu.sc",
+      "sd",
+      "com.sd",
+      "net.sd",
+      "org.sd",
+      "edu.sd",
+      "med.sd",
+      "gov.sd",
+      "info.sd",
+      "se",
+      "a.se",
+      "ac.se",
+      "b.se",
+      "bd.se",
+      "brand.se",
+      "c.se",
+      "d.se",
+      "e.se",
+      "f.se",
+      "fh.se",
+      "fhsk.se",
+      "fhv.se",
+      "g.se",
+      "h.se",
+      "i.se",
+      "k.se",
+      "komforb.se",
+      "kommunalforbund.se",
+      "komvux.se",
+      "l.se",
+      "lanbib.se",
+      "m.se",
+      "n.se",
+      "naturbruksgymn.se",
+      "o.se",
+      "org.se",
+      "p.se",
+      "parti.se",
+      "pp.se",
+      "press.se",
+      "r.se",
+      "s.se",
+      "sshn.se",
+      "t.se",
+      "tm.se",
+      "u.se",
+      "w.se",
+      "x.se",
+      "y.se",
+      "z.se",
+      "sg",
+      "com.sg",
+      "net.sg",
+      "org.sg",
+      "gov.sg",
+      "edu.sg",
+      "per.sg",
+      "sh",
+      "si",
+      "sk",
+      "sl",
+      "com.sl",
+      "net.sl",
+      "edu.sl",
+      "gov.sl",
+      "org.sl",
+      "sm",
+      "sn",
+      "art.sn",
+      "com.sn",
+      "edu.sn",
+      "gouv.sn",
+      "org.sn",
+      "perso.sn",
+      "univ.sn",
+      "so",
+      "com.so",
+      "net.so",
+      "org.so",
+      "sr",
+      "st",
+      "co.st",
+      "com.st",
+      "consulado.st",
+      "edu.st",
+      "embaixada.st",
+      "gov.st",
+      "mil.st",
+      "net.st",
+      "org.st",
+      "principe.st",
+      "saotome.st",
+      "store.st",
+      "su",
+      "sy",
+      "edu.sy",
+      "gov.sy",
+      "net.sy",
+      "mil.sy",
+      "com.sy",
+      "org.sy",
+      "sz",
+      "co.sz",
+      "ac.sz",
+      "org.sz",
+      "tc",
+      "td",
+      "tel",
+      "tf",
+      "tg",
+      "th",
+      "ac.th",
+      "co.th",
+      "go.th",
+      "in.th",
+      "mi.th",
+      "net.th",
+      "or.th",
+      "tj",
+      "ac.tj",
+      "biz.tj",
+      "co.tj",
+      "com.tj",
+      "edu.tj",
+      "go.tj",
+      "gov.tj",
+      "int.tj",
+      "mil.tj",
+      "name.tj",
+      "net.tj",
+      "nic.tj",
+      "org.tj",
+      "test.tj",
+      "web.tj",
+      "tk",
+      "tl",
+      "gov.tl",
+      "tm",
+      "tn",
+      "com.tn",
+      "ens.tn",
+      "fin.tn",
+      "gov.tn",
+      "ind.tn",
+      "intl.tn",
+      "nat.tn",
+      "net.tn",
+      "org.tn",
+      "info.tn",
+      "perso.tn",
+      "tourism.tn",
+      "edunet.tn",
+      "rnrt.tn",
+      "rns.tn",
+      "rnu.tn",
+      "mincom.tn",
+      "agrinet.tn",
+      "defense.tn",
+      "turen.tn",
+      "to",
+      "com.to",
+      "gov.to",
+      "net.to",
+      "org.to",
+      "edu.to",
+      "mil.to",
+      "gov.nc.tr",
+      "travel",
+      "tt",
+      "co.tt",
+      "com.tt",
+      "org.tt",
+      "net.tt",
+      "biz.tt",
+      "info.tt",
+      "pro.tt",
+      "int.tt",
+      "coop.tt",
+      "jobs.tt",
+      "mobi.tt",
+      "travel.tt",
+      "museum.tt",
+      "aero.tt",
+      "name.tt",
+      "gov.tt",
+      "edu.tt",
+      "tv",
+      "tw",
+      "edu.tw",
+      "gov.tw",
+      "mil.tw",
+      "com.tw",
+      "net.tw",
+      "org.tw",
+      "idv.tw",
+      "game.tw",
+      "ebiz.tw",
+      "club.tw",
+      "\u7db2\u8def.tw",
+      "xn--zf0ao64a.tw",
+      "\u7d44\u7e54.tw",
+      "xn--uc0atv.tw",
+      "\u5546\u696d.tw",
+      "xn--czrw28b.tw",
+      "ac.tz",
+      "co.tz",
+      "go.tz",
+      "mil.tz",
+      "ne.tz",
+      "or.tz",
+      "sc.tz",
+      "ua",
+      "com.ua",
+      "edu.ua",
+      "gov.ua",
+      "in.ua",
+      "net.ua",
+      "org.ua",
+      "cherkassy.ua",
+      "chernigov.ua",
+      "chernovtsy.ua",
+      "ck.ua",
+      "cn.ua",
+      "crimea.ua",
+      "cv.ua",
+      "dn.ua",
+      "dnepropetrovsk.ua",
+      "donetsk.ua",
+      "dp.ua",
+      "if.ua",
+      "ivano-frankivsk.ua",
+      "kh.ua",
+      "kharkov.ua",
+      "kherson.ua",
+      "khmelnitskiy.ua",
+      "kiev.ua",
+      "kirovograd.ua",
+      "km.ua",
+      "kr.ua",
+      "ks.ua",
+      "kv.ua",
+      "lg.ua",
+      "lugansk.ua",
+      "lutsk.ua",
+      "lviv.ua",
+      "mk.ua",
+      "nikolaev.ua",
+      "od.ua",
+      "odessa.ua",
+      "pl.ua",
+      "poltava.ua",
+      "rovno.ua",
+      "rv.ua",
+      "sebastopol.ua",
+      "sumy.ua",
+      "te.ua",
+      "ternopil.ua",
+      "uzhgorod.ua",
+      "vinnica.ua",
+      "vn.ua",
+      "zaporizhzhe.ua",
+      "zp.ua",
+      "zhitomir.ua",
+      "zt.ua",
+      "ug",
+      "co.ug",
+      "ac.ug",
+      "sc.ug",
+      "go.ug",
+      "ne.ug",
+      "or.ug",
+      "us",
+      "dni.us",
+      "fed.us",
+      "isa.us",
+      "kids.us",
+      "nsn.us",
+      "ak.us",
+      "al.us",
+      "ar.us",
+      "as.us",
+      "az.us",
+      "ca.us",
+      "co.us",
+      "ct.us",
+      "dc.us",
+      "de.us",
+      "fl.us",
+      "ga.us",
+      "gu.us",
+      "hi.us",
+      "ia.us",
+      "id.us",
+      "il.us",
+      "in.us",
+      "ks.us",
+      "ky.us",
+      "la.us",
+      "ma.us",
+      "md.us",
+      "me.us",
+      "mi.us",
+      "mn.us",
+      "mo.us",
+      "ms.us",
+      "mt.us",
+      "nc.us",
+      "nd.us",
+      "ne.us",
+      "nh.us",
+      "nj.us",
+      "nm.us",
+      "nv.us",
+      "ny.us",
+      "oh.us",
+      "ok.us",
+      "or.us",
+      "pa.us",
+      "pr.us",
+      "ri.us",
+      "sc.us",
+      "sd.us",
+      "tn.us",
+      "tx.us",
+      "ut.us",
+      "vi.us",
+      "vt.us",
+      "va.us",
+      "wa.us",
+      "wi.us",
+      "wv.us",
+      "wy.us",
+      "k12.ak.us",
+      "k12.al.us",
+      "k12.ar.us",
+      "k12.as.us",
+      "k12.az.us",
+      "k12.ca.us",
+      "k12.co.us",
+      "k12.ct.us",
+      "k12.dc.us",
+      "k12.de.us",
+      "k12.fl.us",
+      "k12.ga.us",
+      "k12.gu.us",
+      "k12.ia.us",
+      "k12.id.us",
+      "k12.il.us",
+      "k12.in.us",
+      "k12.ks.us",
+      "k12.ky.us",
+      "k12.la.us",
+      "k12.ma.us",
+      "k12.md.us",
+      "k12.me.us",
+      "k12.mi.us",
+      "k12.mn.us",
+      "k12.mo.us",
+      "k12.ms.us",
+      "k12.mt.us",
+      "k12.nc.us",
+      "k12.nd.us",
+      "k12.ne.us",
+      "k12.nh.us",
+      "k12.nj.us",
+      "k12.nm.us",
+      "k12.nv.us",
+      "k12.ny.us",
+      "k12.oh.us",
+      "k12.ok.us",
+      "k12.or.us",
+      "k12.pa.us",
+      "k12.pr.us",
+      "k12.ri.us",
+      "k12.sc.us",
+      "k12.sd.us",
+      "k12.tn.us",
+      "k12.tx.us",
+      "k12.ut.us",
+      "k12.vi.us",
+      "k12.vt.us",
+      "k12.va.us",
+      "k12.wa.us",
+      "k12.wi.us",
+      "k12.wv.us",
+      "k12.wy.us",
+      "cc.ak.us",
+      "cc.al.us",
+      "cc.ar.us",
+      "cc.as.us",
+      "cc.az.us",
+      "cc.ca.us",
+      "cc.co.us",
+      "cc.ct.us",
+      "cc.dc.us",
+      "cc.de.us",
+      "cc.fl.us",
+      "cc.ga.us",
+      "cc.gu.us",
+      "cc.hi.us",
+      "cc.ia.us",
+      "cc.id.us",
+      "cc.il.us",
+      "cc.in.us",
+      "cc.ks.us",
+      "cc.ky.us",
+      "cc.la.us",
+      "cc.ma.us",
+      "cc.md.us",
+      "cc.me.us",
+      "cc.mi.us",
+      "cc.mn.us",
+      "cc.mo.us",
+      "cc.ms.us",
+      "cc.mt.us",
+      "cc.nc.us",
+      "cc.nd.us",
+      "cc.ne.us",
+      "cc.nh.us",
+      "cc.nj.us",
+      "cc.nm.us",
+      "cc.nv.us",
+      "cc.ny.us",
+      "cc.oh.us",
+      "cc.ok.us",
+      "cc.or.us",
+      "cc.pa.us",
+      "cc.pr.us",
+      "cc.ri.us",
+      "cc.sc.us",
+      "cc.sd.us",
+      "cc.tn.us",
+      "cc.tx.us",
+      "cc.ut.us",
+      "cc.vi.us",
+      "cc.vt.us",
+      "cc.va.us",
+      "cc.wa.us",
+      "cc.wi.us",
+      "cc.wv.us",
+      "cc.wy.us",
+      "lib.ak.us",
+      "lib.al.us",
+      "lib.ar.us",
+      "lib.as.us",
+      "lib.az.us",
+      "lib.ca.us",
+      "lib.co.us",
+      "lib.ct.us",
+      "lib.dc.us",
+      "lib.de.us",
+      "lib.fl.us",
+      "lib.ga.us",
+      "lib.gu.us",
+      "lib.hi.us",
+      "lib.ia.us",
+      "lib.id.us",
+      "lib.il.us",
+      "lib.in.us",
+      "lib.ks.us",
+      "lib.ky.us",
+      "lib.la.us",
+      "lib.ma.us",
+      "lib.md.us",
+      "lib.me.us",
+      "lib.mi.us",
+      "lib.mn.us",
+      "lib.mo.us",
+      "lib.ms.us",
+      "lib.mt.us",
+      "lib.nc.us",
+      "lib.nd.us",
+      "lib.ne.us",
+      "lib.nh.us",
+      "lib.nj.us",
+      "lib.nm.us",
+      "lib.nv.us",
+      "lib.ny.us",
+      "lib.oh.us",
+      "lib.ok.us",
+      "lib.or.us",
+      "lib.pa.us",
+      "lib.pr.us",
+      "lib.ri.us",
+      "lib.sc.us",
+      "lib.sd.us",
+      "lib.tn.us",
+      "lib.tx.us",
+      "lib.ut.us",
+      "lib.vi.us",
+      "lib.vt.us",
+      "lib.va.us",
+      "lib.wa.us",
+      "lib.wi.us",
+      "lib.wv.us",
+      "lib.wy.us",
+      "pvt.k12.ma.us",
+      "chtr.k12.ma.us",
+      "paroch.k12.ma.us",
+      "uz",
+      "com.uz",
+      "co.uz",
+      "va",
+      "vc",
+      "com.vc",
+      "net.vc",
+      "org.vc",
+      "gov.vc",
+      "mil.vc",
+      "edu.vc",
+      "vg",
+      "vi",
+      "co.vi",
+      "com.vi",
+      "k12.vi",
+      "net.vi",
+      "org.vi",
+      "vn",
+      "com.vn",
+      "net.vn",
+      "org.vn",
+      "edu.vn",
+      "gov.vn",
+      "int.vn",
+      "ac.vn",
+      "biz.vn",
+      "info.vn",
+      "name.vn",
+      "pro.vn",
+      "health.vn",
+      "vu",
+      "ws",
+      "com.ws",
+      "net.ws",
+      "org.ws",
+      "gov.ws",
+      "edu.ws",
+      "\u0627\u0645\u0627\u0631\u0627\u062a",
+      "xn--mgbaam7a8h",
+      "\u09ac\u09be\u0982\u09b2\u09be",
+      "xn--54b7fta0cc",
+      "\u4e2d\u56fd",
+      "xn--fiqs8s",
+      "\u4e2d\u570b",
+      "xn--fiqz9s",
+      "\u0627\u0644\u062c\u0632\u0627\u0626\u0631",
+      "xn--lgbbat1ad8j",
+      "\u0645\u0635\u0631",
+      "xn--wgbh1c",
+      "\u10d2\u10d4",
+      "xn--node",
+      "\u9999\u6e2f",
+      "xn--j6w193g",
+      "\u092d\u093e\u0930\u0924",
+      "xn--h2brj9c",
+      "\u0628\u06be\u0627\u0631\u062a",
+      "xn--mgbbh1a71e",
+      "\u0c2d\u0c3e\u0c30\u0c24\u0c4d",
+      "xn--fpcrj9c3d",
+      "\u0aad\u0abe\u0ab0\u0aa4",
+      "xn--gecrj9c",
+      "\u0a2d\u0a3e\u0a30\u0a24",
+      "xn--s9brj9c",
+      "\u09ad\u09be\u09b0\u09a4",
+      "xn--45brj9c",
+      "\u0b87\u0ba8\u0bcd\u0ba4\u0bbf\u0baf\u0bbe",
+      "xn--xkc2dl3a5ee0h",
+      "\u0627\u06cc\u0631\u0627\u0646",
+      "xn--mgba3a4f16a",
+      "\u0627\u064a\u0631\u0627\u0646",
+      "xn--mgba3a4fra",
+      "\u0627\u0644\u0627\u0631\u062f\u0646",
+      "xn--mgbayh7gpa",
+      "\ud55c\uad6d",
+      "xn--3e0b707e",
+      "\u0dbd\u0d82\u0d9a\u0dcf",
+      "xn--fzc2c9e2c",
+      "\u0b87\u0bb2\u0b99\u0bcd\u0b95\u0bc8",
+      "xn--xkc2al3hye2a",
+      "\u0627\u0644\u0645\u063a\u0631\u0628",
+      "xn--mgbc0a9azcg",
+      "\u0639\u0645\u0627\u0646",
+      "xn--mgb9awbf",
+      "\u0641\u0644\u0633\u0637\u064a\u0646",
+      "xn--ygbi2ammx",
+      "\u0441\u0440\u0431",
+      "xn--90a3ac",
+      "\u0440\u0444",
+      "xn--p1ai",
+      "\u0642\u0637\u0631",
+      "xn--wgbl6a",
+      "\u0627\u0644\u0633\u0639\u0648\u062f\u064a\u0629",
+      "xn--mgberp4a5d4ar",
+      "\u0627\u0644\u0633\u0639\u0648\u062f\u06cc\u0629",
+      "xn--mgberp4a5d4a87g",
+      "\u0627\u0644\u0633\u0639\u0648\u062f\u06cc\u06c3",
+      "xn--mgbqly7c0a67fbc",
+      "\u0627\u0644\u0633\u0639\u0648\u062f\u064a\u0647",
+      "xn--mgbqly7cvafr",
+      "\u0633\u0648\u0631\u064a\u0629",
+      "xn--ogbpf8fl",
+      "\u0633\u0648\u0631\u064a\u0627",
+      "xn--mgbtf8fl",
+      "\u65b0\u52a0\u5761",
+      "xn--yfro4i67o",
+      "\u0b9a\u0bbf\u0b99\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0bc2\u0bb0\u0bcd",
+      "xn--clchc0ea0b2g2a9gcd",
+      "\u0e44\u0e17\u0e22",
+      "xn--o3cw4h",
+      "\u062a\u0648\u0646\u0633",
+      "xn--pgbs0dh",
+      "\u53f0\u7063",
+      "xn--kpry57d",
+      "\u53f0\u6e7e",
+      "xn--kprw13d",
+      "\u81fa\u7063",
+      "xn--nnx388a",
+      "\u0443\u043a\u0440",
+      "xn--j1amh",
+      "\u0627\u0644\u064a\u0645\u0646",
+      "xn--mgb2ddes",
+      "xxx",
+      "tp",
+      "yt",
+      "ng"
+  );
+
+  /**
+   * If a hostname is not in the EXCLUDE set, and if removing its
+   * leftmost component results in a name which is contained in this
+   * set, it is a TLD.
+   */
+  static final Set<String> UNDER = ImmutableSet.of(
+      "ar",
+      "au",
+      "bd",
+      "bn",
+      "ck",
+      "cy",
+      "er",
+      "et",
+      "fj",
+      "fk",
+      "gt",
+      "gu",
+      "il",
+      "jm",
+      "aichi.jp",
+      "akita.jp",
+      "aomori.jp",
+      "chiba.jp",
+      "ehime.jp",
+      "fukui.jp",
+      "fukuoka.jp",
+      "fukushima.jp",
+      "gifu.jp",
+      "gunma.jp",
+      "hiroshima.jp",
+      "hokkaido.jp",
+      "hyogo.jp",
+      "ibaraki.jp",
+      "ishikawa.jp",
+      "iwate.jp",
+      "kagawa.jp",
+      "kagoshima.jp",
+      "kanagawa.jp",
+      "kawasaki.jp",
+      "kitakyushu.jp",
+      "kobe.jp",
+      "kochi.jp",
+      "kumamoto.jp",
+      "kyoto.jp",
+      "mie.jp",
+      "miyagi.jp",
+      "miyazaki.jp",
+      "nagano.jp",
+      "nagasaki.jp",
+      "nagoya.jp",
+      "nara.jp",
+      "niigata.jp",
+      "oita.jp",
+      "okayama.jp",
+      "okinawa.jp",
+      "osaka.jp",
+      "saga.jp",
+      "saitama.jp",
+      "sapporo.jp",
+      "sendai.jp",
+      "shiga.jp",
+      "shimane.jp",
+      "shizuoka.jp",
+      "tochigi.jp",
+      "tokushima.jp",
+      "tokyo.jp",
+      "tottori.jp",
+      "toyama.jp",
+      "wakayama.jp",
+      "yamagata.jp",
+      "yamaguchi.jp",
+      "yamanashi.jp",
+      "yokohama.jp",
+      "ke",
+      "kh",
+      "kw",
+      "mm",
+      "mt",
+      "mz",
+      "ni",
+      "np",
+      "nz",
+      "om",
+      "pg",
+      "py",
+      "qa",
+      "sv",
+      "tr",
+      "uk",
+      "sch.uk",
+      "uy",
+      "ve",
+      "ye",
+      "yu",
+      "za",
+      "zm",
+      "zw"
+  );
+
+  /**
+   * The elements in this set would pass the UNDER test, but are
+   * known not to be TLDs and are thus excluded from consideration.
+   */
+  static final Set<String> EXCLUDED = ImmutableSet.of(
+      "congresodelalengua3.ar",
+      "educ.ar",
+      "gobiernoelectronico.ar",
+      "mecon.ar",
+      "nacion.ar",
+      "nic.ar",
+      "promocion.ar",
+      "retina.ar",
+      "uba.ar",
+      "metro.tokyo.jp",
+      "pref.aichi.jp",
+      "pref.akita.jp",
+      "pref.aomori.jp",
+      "pref.chiba.jp",
+      "pref.ehime.jp",
+      "pref.fukui.jp",
+      "pref.fukuoka.jp",
+      "pref.fukushima.jp",
+      "pref.gifu.jp",
+      "pref.gunma.jp",
+      "pref.hiroshima.jp",
+      "pref.hokkaido.jp",
+      "pref.hyogo.jp",
+      "pref.ibaraki.jp",
+      "pref.ishikawa.jp",
+      "pref.iwate.jp",
+      "pref.kagawa.jp",
+      "pref.kagoshima.jp",
+      "pref.kanagawa.jp",
+      "pref.kochi.jp",
+      "pref.kumamoto.jp",
+      "pref.kyoto.jp",
+      "pref.mie.jp",
+      "pref.miyagi.jp",
+      "pref.miyazaki.jp",
+      "pref.nagano.jp",
+      "pref.nagasaki.jp",
+      "pref.nara.jp",
+      "pref.niigata.jp",
+      "pref.oita.jp",
+      "pref.okayama.jp",
+      "pref.okinawa.jp",
+      "pref.osaka.jp",
+      "pref.saga.jp",
+      "pref.saitama.jp",
+      "pref.shiga.jp",
+      "pref.shimane.jp",
+      "pref.shizuoka.jp",
+      "pref.tochigi.jp",
+      "pref.tokushima.jp",
+      "pref.tottori.jp",
+      "pref.toyama.jp",
+      "pref.wakayama.jp",
+      "pref.yamagata.jp",
+      "pref.yamaguchi.jp",
+      "pref.yamanashi.jp",
+      "city.chiba.jp",
+      "city.fukuoka.jp",
+      "city.hiroshima.jp",
+      "city.kawasaki.jp",
+      "city.kitakyushu.jp",
+      "city.kobe.jp",
+      "city.kyoto.jp",
+      "city.nagoya.jp",
+      "city.niigata.jp",
+      "city.okayama.jp",
+      "city.osaka.jp",
+      "city.saitama.jp",
+      "city.sapporo.jp",
+      "city.sendai.jp",
+      "city.shizuoka.jp",
+      "city.yokohama.jp",
+      "mediaphone.om",
+      "nawrastelecom.om",
+      "nawras.om",
+      "omanmobile.om",
+      "omanpost.om",
+      "omantel.om",
+      "rakpetroleum.om",
+      "siemens.om",
+      "songfest.om",
+      "statecouncil.om",
+      "nic.tr",
+      "tsk.tr",
+      "bl.uk",
+      "british-library.uk",
+      "icnet.uk",
+      "jet.uk",
+      "nel.uk",
+      "nhs.uk",
+      "nls.uk",
+      "national-library-scotland.uk",
+      "parliament.uk",
+      "police.uk"
+  );
+}
+
diff --git a/guava/src/com/google/common/net/package-info.java b/guava/src/com/google/common/net/package-info.java
new file mode 100644
index 0000000..1cb9958
--- /dev/null
+++ b/guava/src/com/google/common/net/package-info.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+/**
+ * This package contains utility methods and classes for working with net
+ * addresses (numeric IP and domain names).
+ *
+ * <p>This package is a part of the open-source
+ * <a href="http://guava-libraries.googlecode.com">Guava libraries</a>.
+ *
+ * @author Craig Berry
+ */
+@ParametersAreNonnullByDefault
+package com.google.common.net;
+
+import javax.annotation.ParametersAreNonnullByDefault;
diff --git a/guava/src/com/google/common/primitives/AndroidInteger.java b/guava/src/com/google/common/primitives/AndroidInteger.java
new file mode 100644
index 0000000..7fa8abd
--- /dev/null
+++ b/guava/src/com/google/common/primitives/AndroidInteger.java
@@ -0,0 +1,91 @@
+/*
+ *  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.
+ */
+
+package com.google.common.primitives;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import javax.annotation.CheckForNull;
+
+/**
+ * Static utility methods derived from Android's {@code Integer.java}.
+ */
+final class AndroidInteger {
+  /**
+   * See {@link Ints#tryParse(String)} for the public interface.
+   */
+  @CheckForNull
+  static Integer tryParse(String string) {
+    return tryParse(string, 10);
+  }
+
+  /**
+   * See {@link Ints#tryParse(String, int)} for the public interface.
+   */
+  @CheckForNull
+  static Integer tryParse(String string, int radix) {
+    checkNotNull(string);
+    checkArgument(radix >= Character.MIN_RADIX,
+        "Invalid radix %s, min radix is %s", radix, Character.MIN_RADIX);
+    checkArgument(radix <= Character.MAX_RADIX,
+        "Invalid radix %s, max radix is %s", radix, Character.MAX_RADIX);
+    int length = string.length(), i = 0;
+    if (length == 0) {
+      return null;
+    }
+    boolean negative = string.charAt(i) == '-';
+    if (negative && ++i == length) {
+      return null;
+    }
+    return tryParse(string, i, radix, negative);
+  }
+
+  @CheckForNull
+  private static Integer tryParse(String string, int offset, int radix,
+      boolean negative) {
+    int max = Integer.MIN_VALUE / radix;
+    int result = 0, length = string.length();
+    while (offset < length) {
+      int digit = Character.digit(string.charAt(offset++), radix);
+      if (digit == -1) {
+        return null;
+      }
+      if (max > result) {
+        return null;
+      }
+      int next = result * radix - digit;
+      if (next > result) {
+        return null;
+      }
+      result = next;
+    }
+    if (!negative) {
+      result = -result;
+      if (result < 0) {
+        return null;
+      }
+    }
+    // For GWT where ints do not overflow
+    if (result > Integer.MAX_VALUE || result < Integer.MIN_VALUE) {
+      return null;
+    }
+    return result;
+  }
+
+  private AndroidInteger() {}
+}
diff --git a/guava/src/com/google/common/primitives/Booleans.java b/guava/src/com/google/common/primitives/Booleans.java
new file mode 100644
index 0000000..ab333f1
--- /dev/null
+++ b/guava/src/com/google/common/primitives/Booleans.java
@@ -0,0 +1,466 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.primitives;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkElementIndex;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkPositionIndexes;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.io.Serializable;
+import java.util.AbstractList;
+import java.util.Arrays;
+import java.util.BitSet;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.RandomAccess;
+
+/**
+ * Static utility methods pertaining to {@code boolean} primitives, that are not
+ * already found in either {@link Boolean} or {@link Arrays}.
+ *
+ * @author Kevin Bourrillion
+ * @since 1.0
+ */
+@GwtCompatible
+public final class Booleans {
+  private Booleans() {}
+
+  /**
+   * Returns a hash code for {@code value}; equal to the result of invoking
+   * {@code ((Boolean) value).hashCode()}.
+   *
+   * @param value a primitive {@code boolean} value
+   * @return a hash code for the value
+   */
+  public static int hashCode(boolean value) {
+    return value ? 1231 : 1237;
+  }
+
+  /**
+   * Compares the two specified {@code boolean} values in the standard way
+   * ({@code false} is considered less than {@code true}). The sign of the
+   * value returned is the same as that of {@code ((Boolean) a).compareTo(b)}.
+   *
+   * @param a the first {@code boolean} to compare
+   * @param b the second {@code boolean} to compare
+   * @return a positive number if only {@code a} is {@code true}, a negative
+   *     number if only {@code b} is true, or zero if {@code a == b}
+   */
+  public static int compare(boolean a, boolean b) {
+    return (a == b) ? 0 : (a ? 1 : -1);
+  }
+
+  /**
+   * Returns {@code true} if {@code target} is present as an element anywhere in
+   * {@code array}.
+   *
+   * <p><b>Note:</b> consider representing the array as a {@link
+   * BitSet} instead, replacing {@code Booleans.contains(array, true)}
+   * with {@code !bitSet.isEmpty()} and {@code Booleans.contains(array, false)}
+   * with {@code bitSet.nextClearBit(0) == sizeOfBitSet}.
+   *
+   * @param array an array of {@code boolean} values, possibly empty
+   * @param target a primitive {@code boolean} value
+   * @return {@code true} if {@code array[i] == target} for some value of {@code
+   *     i}
+   */
+  public static boolean contains(boolean[] array, boolean target) {
+    for (boolean value : array) {
+      if (value == target) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  /**
+   * Returns the index of the first appearance of the value {@code target} in
+   * {@code array}.
+   *
+   * <p><b>Note:</b> consider representing the array as a {@link BitSet}
+   * instead, and using {@link BitSet#nextSetBit(int)} or {@link
+   * BitSet#nextClearBit(int)}.
+   *
+   * @param array an array of {@code boolean} values, possibly empty
+   * @param target a primitive {@code boolean} value
+   * @return the least index {@code i} for which {@code array[i] == target}, or
+   *     {@code -1} if no such index exists.
+   */
+  public static int indexOf(boolean[] array, boolean target) {
+    return indexOf(array, target, 0, array.length);
+  }
+
+  // TODO(kevinb): consider making this public
+  private static int indexOf(
+      boolean[] array, boolean target, int start, int end) {
+    for (int i = start; i < end; i++) {
+      if (array[i] == target) {
+        return i;
+      }
+    }
+    return -1;
+  }
+
+  /**
+   * Returns the start position of the first occurrence of the specified {@code
+   * target} within {@code array}, or {@code -1} if there is no such occurrence.
+   *
+   * <p>More formally, returns the lowest index {@code i} such that {@code
+   * java.util.Arrays.copyOfRange(array, i, i + target.length)} contains exactly
+   * the same elements as {@code target}.
+   *
+   * @param array the array to search for the sequence {@code target}
+   * @param target the array to search for as a sub-sequence of {@code array}
+   */
+  public static int indexOf(boolean[] array, boolean[] target) {
+    checkNotNull(array, "array");
+    checkNotNull(target, "target");
+    if (target.length == 0) {
+      return 0;
+    }
+
+    outer:
+    for (int i = 0; i < array.length - target.length + 1; i++) {
+      for (int j = 0; j < target.length; j++) {
+        if (array[i + j] != target[j]) {
+          continue outer;
+        }
+      }
+      return i;
+    }
+    return -1;
+  }
+
+  /**
+   * Returns the index of the last appearance of the value {@code target} in
+   * {@code array}.
+   *
+   * @param array an array of {@code boolean} values, possibly empty
+   * @param target a primitive {@code boolean} value
+   * @return the greatest index {@code i} for which {@code array[i] == target},
+   *     or {@code -1} if no such index exists.
+   */
+  public static int lastIndexOf(boolean[] array, boolean target) {
+    return lastIndexOf(array, target, 0, array.length);
+  }
+
+  // TODO(kevinb): consider making this public
+  private static int lastIndexOf(
+      boolean[] array, boolean target, int start, int end) {
+    for (int i = end - 1; i >= start; i--) {
+      if (array[i] == target) {
+        return i;
+      }
+    }
+    return -1;
+  }
+
+  /**
+   * Returns the values from each provided array combined into a single array.
+   * For example, {@code concat(new boolean[] {a, b}, new boolean[] {}, new
+   * boolean[] {c}} returns the array {@code {a, b, c}}.
+   *
+   * @param arrays zero or more {@code boolean} arrays
+   * @return a single array containing all the values from the source arrays, in
+   *     order
+   */
+  public static boolean[] concat(boolean[]... arrays) {
+    int length = 0;
+    for (boolean[] array : arrays) {
+      length += array.length;
+    }
+    boolean[] result = new boolean[length];
+    int pos = 0;
+    for (boolean[] array : arrays) {
+      System.arraycopy(array, 0, result, pos, array.length);
+      pos += array.length;
+    }
+    return result;
+  }
+
+  /**
+   * Returns an array containing the same values as {@code array}, but
+   * guaranteed to be of a specified minimum length. If {@code array} already
+   * has a length of at least {@code minLength}, it is returned directly.
+   * Otherwise, a new array of size {@code minLength + padding} is returned,
+   * containing the values of {@code array}, and zeroes in the remaining places.
+   *
+   * @param array the source array
+   * @param minLength the minimum length the returned array must guarantee
+   * @param padding an extra amount to "grow" the array by if growth is
+   *     necessary
+   * @throws IllegalArgumentException if {@code minLength} or {@code padding} is
+   *     negative
+   * @return an array containing the values of {@code array}, with guaranteed
+   *     minimum length {@code minLength}
+   */
+  public static boolean[] ensureCapacity(
+      boolean[] array, int minLength, int padding) {
+    checkArgument(minLength >= 0, "Invalid minLength: %s", minLength);
+    checkArgument(padding >= 0, "Invalid padding: %s", padding);
+    return (array.length < minLength)
+        ? copyOf(array, minLength + padding)
+        : array;
+  }
+
+  // Arrays.copyOf() requires Java 6
+  private static boolean[] copyOf(boolean[] original, int length) {
+    boolean[] copy = new boolean[length];
+    System.arraycopy(original, 0, copy, 0, Math.min(original.length, length));
+    return copy;
+  }
+
+  /**
+   * Returns a string containing the supplied {@code boolean} values separated
+   * by {@code separator}. For example, {@code join("-", false, true, false)}
+   * returns the string {@code "false-true-false"}.
+   *
+   * @param separator the text that should appear between consecutive values in
+   *     the resulting string (but not at the start or end)
+   * @param array an array of {@code boolean} values, possibly empty
+   */
+  public static String join(String separator, boolean... array) {
+    checkNotNull(separator);
+    if (array.length == 0) {
+      return "";
+    }
+
+    // For pre-sizing a builder, just get the right order of magnitude
+    StringBuilder builder = new StringBuilder(array.length * 7);
+    builder.append(array[0]);
+    for (int i = 1; i < array.length; i++) {
+      builder.append(separator).append(array[i]);
+    }
+    return builder.toString();
+  }
+
+  /**
+   * Returns a comparator that compares two {@code boolean} arrays
+   * lexicographically. That is, it compares, using {@link
+   * #compare(boolean, boolean)}), the first pair of values that follow any
+   * common prefix, or when one array is a prefix of the other, treats the
+   * shorter array as the lesser. For example,
+   * {@code [] < [false] < [false, true] < [true]}.
+   *
+   * <p>The returned comparator is inconsistent with {@link
+   * Object#equals(Object)} (since arrays support only identity equality), but
+   * it is consistent with {@link Arrays#equals(boolean[], boolean[])}.
+   *
+   * @see <a href="http://en.wikipedia.org/wiki/Lexicographical_order">
+   *     Lexicographical order article at Wikipedia</a>
+   * @since 2.0
+   */
+  public static Comparator<boolean[]> lexicographicalComparator() {
+    return LexicographicalComparator.INSTANCE;
+  }
+
+  private enum LexicographicalComparator implements Comparator<boolean[]> {
+    INSTANCE;
+
+    @Override
+    public int compare(boolean[] left, boolean[] right) {
+      int minLength = Math.min(left.length, right.length);
+      for (int i = 0; i < minLength; i++) {
+        int result = Booleans.compare(left[i], right[i]);
+        if (result != 0) {
+          return result;
+        }
+      }
+      return left.length - right.length;
+    }
+  }
+
+  /**
+   * Copies a collection of {@code Boolean} instances into a new array of
+   * primitive {@code boolean} values.
+   *
+   * <p>Elements are copied from the argument collection as if by {@code
+   * collection.toArray()}.  Calling this method is as thread-safe as calling
+   * that method.
+   *
+   * <p><b>Note:</b> consider representing the collection as a {@link
+   * BitSet} instead.
+   *
+   * @param collection a collection of {@code Boolean} objects
+   * @return an array containing the same values as {@code collection}, in the
+   *     same order, converted to primitives
+   * @throws NullPointerException if {@code collection} or any of its elements
+   *     is null
+   */
+  public static boolean[] toArray(Collection<Boolean> collection) {
+    if (collection instanceof BooleanArrayAsList) {
+      return ((BooleanArrayAsList) collection).toBooleanArray();
+    }
+
+    Object[] boxedArray = collection.toArray();
+    int len = boxedArray.length;
+    boolean[] array = new boolean[len];
+    for (int i = 0; i < len; i++) {
+      // checkNotNull for GWT (do not optimize)
+      array[i] = (Boolean) checkNotNull(boxedArray[i]);
+    }
+    return array;
+  }
+
+  /**
+   * Returns a fixed-size list backed by the specified array, similar to {@link
+   * Arrays#asList(Object[])}. The list supports {@link List#set(int, Object)},
+   * but any attempt to set a value to {@code null} will result in a {@link
+   * NullPointerException}.
+   *
+   * <p>The returned list maintains the values, but not the identities, of
+   * {@code Boolean} objects written to or read from it.  For example, whether
+   * {@code list.get(0) == list.get(0)} is true for the returned list is
+   * unspecified.
+   *
+   * @param backingArray the array to back the list
+   * @return a list view of the array
+   */
+  public static List<Boolean> asList(boolean... backingArray) {
+    if (backingArray.length == 0) {
+      return Collections.emptyList();
+    }
+    return new BooleanArrayAsList(backingArray);
+  }
+
+  @GwtCompatible
+  private static class BooleanArrayAsList extends AbstractList<Boolean>
+      implements RandomAccess, Serializable {
+    final boolean[] array;
+    final int start;
+    final int end;
+
+    BooleanArrayAsList(boolean[] array) {
+      this(array, 0, array.length);
+    }
+
+    BooleanArrayAsList(boolean[] array, int start, int end) {
+      this.array = array;
+      this.start = start;
+      this.end = end;
+    }
+
+    @Override public int size() {
+      return end - start;
+    }
+
+    @Override public boolean isEmpty() {
+      return false;
+    }
+
+    @Override public Boolean get(int index) {
+      checkElementIndex(index, size());
+      return array[start + index];
+    }
+
+    @Override public boolean contains(Object target) {
+      // Overridden to prevent a ton of boxing
+      return (target instanceof Boolean)
+          && Booleans.indexOf(array, (Boolean) target, start, end) != -1;
+    }
+
+    @Override public int indexOf(Object target) {
+      // Overridden to prevent a ton of boxing
+      if (target instanceof Boolean) {
+        int i = Booleans.indexOf(array, (Boolean) target, start, end);
+        if (i >= 0) {
+          return i - start;
+        }
+      }
+      return -1;
+    }
+
+    @Override public int lastIndexOf(Object target) {
+      // Overridden to prevent a ton of boxing
+      if (target instanceof Boolean) {
+        int i = Booleans.lastIndexOf(array, (Boolean) target, start, end);
+        if (i >= 0) {
+          return i - start;
+        }
+      }
+      return -1;
+    }
+
+    @Override public Boolean set(int index, Boolean element) {
+      checkElementIndex(index, size());
+      boolean oldValue = array[start + index];
+      array[start + index] = checkNotNull(element);  // checkNotNull for GWT (do not optimize)
+      return oldValue;
+    }
+
+    @Override public List<Boolean> subList(int fromIndex, int toIndex) {
+      int size = size();
+      checkPositionIndexes(fromIndex, toIndex, size);
+      if (fromIndex == toIndex) {
+        return Collections.emptyList();
+      }
+      return new BooleanArrayAsList(array, start + fromIndex, start + toIndex);
+    }
+
+    @Override public boolean equals(Object object) {
+      if (object == this) {
+        return true;
+      }
+      if (object instanceof BooleanArrayAsList) {
+        BooleanArrayAsList that = (BooleanArrayAsList) object;
+        int size = size();
+        if (that.size() != size) {
+          return false;
+        }
+        for (int i = 0; i < size; i++) {
+          if (array[start + i] != that.array[that.start + i]) {
+            return false;
+          }
+        }
+        return true;
+      }
+      return super.equals(object);
+    }
+
+    @Override public int hashCode() {
+      int result = 1;
+      for (int i = start; i < end; i++) {
+        result = 31 * result + Booleans.hashCode(array[i]);
+      }
+      return result;
+    }
+
+    @Override public String toString() {
+      StringBuilder builder = new StringBuilder(size() * 7);
+      builder.append(array[start] ? "[true" : "[false");
+      for (int i = start + 1; i < end; i++) {
+        builder.append(array[i] ? ", true" : ", false");
+      }
+      return builder.append(']').toString();
+    }
+
+    boolean[] toBooleanArray() {
+      // Arrays.copyOfRange() requires Java 6
+      int size = size();
+      boolean[] result = new boolean[size];
+      System.arraycopy(array, start, result, 0, size);
+      return result;
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+}
diff --git a/guava/src/com/google/common/primitives/Bytes.java b/guava/src/com/google/common/primitives/Bytes.java
new file mode 100644
index 0000000..92f7805
--- /dev/null
+++ b/guava/src/com/google/common/primitives/Bytes.java
@@ -0,0 +1,383 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.primitives;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkElementIndex;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkPositionIndexes;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.io.Serializable;
+import java.util.AbstractList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.RandomAccess;
+
+/**
+ * Static utility methods pertaining to {@code byte} primitives, that are not
+ * already found in either {@link Byte} or {@link Arrays}, <i>and interpret
+ * bytes as neither signed nor unsigned</i>. The methods which specifically
+ * treat bytes as signed or unsigned are found in {@link SignedBytes} and {@link
+ * UnsignedBytes}.
+ *
+ * @author Kevin Bourrillion
+ * @since 1.0
+ */
+// TODO(kevinb): how to prevent warning on UnsignedBytes when building GWT
+// javadoc?
+@GwtCompatible
+public final class Bytes {
+  private Bytes() {}
+
+  /**
+   * Returns a hash code for {@code value}; equal to the result of invoking
+   * {@code ((Byte) value).hashCode()}.
+   *
+   * @param value a primitive {@code byte} value
+   * @return a hash code for the value
+   */
+  public static int hashCode(byte value) {
+    return value;
+  }
+
+  /**
+   * Returns {@code true} if {@code target} is present as an element anywhere in
+   * {@code array}.
+   *
+   * @param array an array of {@code byte} values, possibly empty
+   * @param target a primitive {@code byte} value
+   * @return {@code true} if {@code array[i] == target} for some value of {@code
+   *     i}
+   */
+  public static boolean contains(byte[] array, byte target) {
+    for (byte value : array) {
+      if (value == target) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  /**
+   * Returns the index of the first appearance of the value {@code target} in
+   * {@code array}.
+   *
+   * @param array an array of {@code byte} values, possibly empty
+   * @param target a primitive {@code byte} value
+   * @return the least index {@code i} for which {@code array[i] == target}, or
+   *     {@code -1} if no such index exists.
+   */
+  public static int indexOf(byte[] array, byte target) {
+    return indexOf(array, target, 0, array.length);
+  }
+
+  // TODO(kevinb): consider making this public
+  private static int indexOf(
+      byte[] array, byte target, int start, int end) {
+    for (int i = start; i < end; i++) {
+      if (array[i] == target) {
+        return i;
+      }
+    }
+    return -1;
+  }
+
+  /**
+   * Returns the start position of the first occurrence of the specified {@code
+   * target} within {@code array}, or {@code -1} if there is no such occurrence.
+   *
+   * <p>More formally, returns the lowest index {@code i} such that {@code
+   * java.util.Arrays.copyOfRange(array, i, i + target.length)} contains exactly
+   * the same elements as {@code target}.
+   *
+   * @param array the array to search for the sequence {@code target}
+   * @param target the array to search for as a sub-sequence of {@code array}
+   */
+  public static int indexOf(byte[] array, byte[] target) {
+    checkNotNull(array, "array");
+    checkNotNull(target, "target");
+    if (target.length == 0) {
+      return 0;
+    }
+
+    outer:
+    for (int i = 0; i < array.length - target.length + 1; i++) {
+      for (int j = 0; j < target.length; j++) {
+        if (array[i + j] != target[j]) {
+          continue outer;
+        }
+      }
+      return i;
+    }
+    return -1;
+  }
+
+  /**
+   * Returns the index of the last appearance of the value {@code target} in
+   * {@code array}.
+   *
+   * @param array an array of {@code byte} values, possibly empty
+   * @param target a primitive {@code byte} value
+   * @return the greatest index {@code i} for which {@code array[i] == target},
+   *     or {@code -1} if no such index exists.
+   */
+  public static int lastIndexOf(byte[] array, byte target) {
+    return lastIndexOf(array, target, 0, array.length);
+  }
+
+  // TODO(kevinb): consider making this public
+  private static int lastIndexOf(
+      byte[] array, byte target, int start, int end) {
+    for (int i = end - 1; i >= start; i--) {
+      if (array[i] == target) {
+        return i;
+      }
+    }
+    return -1;
+  }
+
+  /**
+   * Returns the values from each provided array combined into a single array.
+   * For example, {@code concat(new byte[] {a, b}, new byte[] {}, new
+   * byte[] {c}} returns the array {@code {a, b, c}}.
+   *
+   * @param arrays zero or more {@code byte} arrays
+   * @return a single array containing all the values from the source arrays, in
+   *     order
+   */
+  public static byte[] concat(byte[]... arrays) {
+    int length = 0;
+    for (byte[] array : arrays) {
+      length += array.length;
+    }
+    byte[] result = new byte[length];
+    int pos = 0;
+    for (byte[] array : arrays) {
+      System.arraycopy(array, 0, result, pos, array.length);
+      pos += array.length;
+    }
+    return result;
+  }
+
+  /**
+   * Returns an array containing the same values as {@code array}, but
+   * guaranteed to be of a specified minimum length. If {@code array} already
+   * has a length of at least {@code minLength}, it is returned directly.
+   * Otherwise, a new array of size {@code minLength + padding} is returned,
+   * containing the values of {@code array}, and zeroes in the remaining places.
+   *
+   * @param array the source array
+   * @param minLength the minimum length the returned array must guarantee
+   * @param padding an extra amount to "grow" the array by if growth is
+   *     necessary
+   * @throws IllegalArgumentException if {@code minLength} or {@code padding} is
+   *     negative
+   * @return an array containing the values of {@code array}, with guaranteed
+   *     minimum length {@code minLength}
+   */
+  public static byte[] ensureCapacity(
+      byte[] array, int minLength, int padding) {
+    checkArgument(minLength >= 0, "Invalid minLength: %s", minLength);
+    checkArgument(padding >= 0, "Invalid padding: %s", padding);
+    return (array.length < minLength)
+        ? copyOf(array, minLength + padding)
+        : array;
+  }
+
+  // Arrays.copyOf() requires Java 6
+  private static byte[] copyOf(byte[] original, int length) {
+    byte[] copy = new byte[length];
+    System.arraycopy(original, 0, copy, 0, Math.min(original.length, length));
+    return copy;
+  }
+
+  /**
+   * Copies a collection of {@code Byte} instances into a new array of
+   * primitive {@code byte} values.
+   *
+   * <p>Elements are copied from the argument collection as if by {@code
+   * collection.toArray()}.  Calling this method is as thread-safe as calling
+   * that method.
+   *
+   * @param collection a collection of {@code Byte} objects
+   * @return an array containing the same values as {@code collection}, in the
+   *     same order, converted to primitives
+   * @throws NullPointerException if {@code collection} or any of its elements
+   *     is null
+   */
+  public static byte[] toArray(Collection<Byte> collection) {
+    if (collection instanceof ByteArrayAsList) {
+      return ((ByteArrayAsList) collection).toByteArray();
+    }
+
+    Object[] boxedArray = collection.toArray();
+    int len = boxedArray.length;
+    byte[] array = new byte[len];
+    for (int i = 0; i < len; i++) {
+      // checkNotNull for GWT (do not optimize)
+      array[i] = (Byte) checkNotNull(boxedArray[i]);
+    }
+    return array;
+  }
+
+  /**
+   * Returns a fixed-size list backed by the specified array, similar to {@link
+   * Arrays#asList(Object[])}. The list supports {@link List#set(int, Object)},
+   * but any attempt to set a value to {@code null} will result in a {@link
+   * NullPointerException}.
+   *
+   * <p>The returned list maintains the values, but not the identities, of
+   * {@code Byte} objects written to or read from it.  For example, whether
+   * {@code list.get(0) == list.get(0)} is true for the returned list is
+   * unspecified.
+   *
+   * @param backingArray the array to back the list
+   * @return a list view of the array
+   */
+  public static List<Byte> asList(byte... backingArray) {
+    if (backingArray.length == 0) {
+      return Collections.emptyList();
+    }
+    return new ByteArrayAsList(backingArray);
+  }
+
+  @GwtCompatible
+  private static class ByteArrayAsList extends AbstractList<Byte>
+      implements RandomAccess, Serializable {
+    final byte[] array;
+    final int start;
+    final int end;
+
+    ByteArrayAsList(byte[] array) {
+      this(array, 0, array.length);
+    }
+
+    ByteArrayAsList(byte[] array, int start, int end) {
+      this.array = array;
+      this.start = start;
+      this.end = end;
+    }
+
+    @Override public int size() {
+      return end - start;
+    }
+
+    @Override public boolean isEmpty() {
+      return false;
+    }
+
+    @Override public Byte get(int index) {
+      checkElementIndex(index, size());
+      return array[start + index];
+    }
+
+    @Override public boolean contains(Object target) {
+      // Overridden to prevent a ton of boxing
+      return (target instanceof Byte)
+          && Bytes.indexOf(array, (Byte) target, start, end) != -1;
+    }
+
+    @Override public int indexOf(Object target) {
+      // Overridden to prevent a ton of boxing
+      if (target instanceof Byte) {
+        int i = Bytes.indexOf(array, (Byte) target, start, end);
+        if (i >= 0) {
+          return i - start;
+        }
+      }
+      return -1;
+    }
+
+    @Override public int lastIndexOf(Object target) {
+      // Overridden to prevent a ton of boxing
+      if (target instanceof Byte) {
+        int i = Bytes.lastIndexOf(array, (Byte) target, start, end);
+        if (i >= 0) {
+          return i - start;
+        }
+      }
+      return -1;
+    }
+
+    @Override public Byte set(int index, Byte element) {
+      checkElementIndex(index, size());
+      byte oldValue = array[start + index];
+      array[start + index] = checkNotNull(element);  // checkNotNull for GWT (do not optimize)
+      return oldValue;
+    }
+
+    @Override public List<Byte> subList(int fromIndex, int toIndex) {
+      int size = size();
+      checkPositionIndexes(fromIndex, toIndex, size);
+      if (fromIndex == toIndex) {
+        return Collections.emptyList();
+      }
+      return new ByteArrayAsList(array, start + fromIndex, start + toIndex);
+    }
+
+    @Override public boolean equals(Object object) {
+      if (object == this) {
+        return true;
+      }
+      if (object instanceof ByteArrayAsList) {
+        ByteArrayAsList that = (ByteArrayAsList) object;
+        int size = size();
+        if (that.size() != size) {
+          return false;
+        }
+        for (int i = 0; i < size; i++) {
+          if (array[start + i] != that.array[that.start + i]) {
+            return false;
+          }
+        }
+        return true;
+      }
+      return super.equals(object);
+    }
+
+    @Override public int hashCode() {
+      int result = 1;
+      for (int i = start; i < end; i++) {
+        result = 31 * result + Bytes.hashCode(array[i]);
+      }
+      return result;
+    }
+
+    @Override public String toString() {
+      StringBuilder builder = new StringBuilder(size() * 5);
+      builder.append('[').append(array[start]);
+      for (int i = start + 1; i < end; i++) {
+        builder.append(", ").append(array[i]);
+      }
+      return builder.append(']').toString();
+    }
+
+    byte[] toByteArray() {
+      // Arrays.copyOfRange() requires Java 6
+      int size = size();
+      byte[] result = new byte[size];
+      System.arraycopy(array, start, result, 0, size);
+      return result;
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+}
diff --git a/guava/src/com/google/common/primitives/Chars.java b/guava/src/com/google/common/primitives/Chars.java
new file mode 100644
index 0000000..5ac57d1
--- /dev/null
+++ b/guava/src/com/google/common/primitives/Chars.java
@@ -0,0 +1,582 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.primitives;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkElementIndex;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkPositionIndexes;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+
+import java.io.Serializable;
+import java.util.AbstractList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.RandomAccess;
+
+/**
+ * Static utility methods pertaining to {@code char} primitives, that are not
+ * already found in either {@link Character} or {@link Arrays}.
+ *
+ * <p>All the operations in this class treat {@code char} values strictly
+ * numerically; they are neither Unicode-aware nor locale-dependent.
+ *
+ * @author Kevin Bourrillion
+ * @since 1.0
+ */
+@GwtCompatible(emulated = true)
+public final class Chars {
+  private Chars() {}
+
+  /**
+   * The number of bytes required to represent a primitive {@code char}
+   * value.
+   */
+  public static final int BYTES = Character.SIZE / Byte.SIZE;
+
+  /**
+   * Returns a hash code for {@code value}; equal to the result of invoking
+   * {@code ((Character) value).hashCode()}.
+   *
+   * @param value a primitive {@code char} value
+   * @return a hash code for the value
+   */
+  public static int hashCode(char value) {
+    return value;
+  }
+
+  /**
+   * Returns the {@code char} value that is equal to {@code value}, if possible.
+   *
+   * @param value any value in the range of the {@code char} type
+   * @return the {@code char} value that equals {@code value}
+   * @throws IllegalArgumentException if {@code value} is greater than {@link
+   *     Character#MAX_VALUE} or less than {@link Character#MIN_VALUE}
+   */
+  public static char checkedCast(long value) {
+    char result = (char) value;
+    checkArgument(result == value, "Out of range: %s", value);
+    return result;
+  }
+
+  /**
+   * Returns the {@code char} nearest in value to {@code value}.
+   *
+   * @param value any {@code long} value
+   * @return the same value cast to {@code char} if it is in the range of the
+   *     {@code char} type, {@link Character#MAX_VALUE} if it is too large,
+   *     or {@link Character#MIN_VALUE} if it is too small
+   */
+  public static char saturatedCast(long value) {
+    if (value > Character.MAX_VALUE) {
+      return Character.MAX_VALUE;
+    }
+    if (value < Character.MIN_VALUE) {
+      return Character.MIN_VALUE;
+    }
+    return (char) value;
+  }
+
+  /**
+   * Compares the two specified {@code char} values. The sign of the value
+   * returned is the same as that of {@code ((Character) a).compareTo(b)}.
+   *
+   * @param a the first {@code char} to compare
+   * @param b the second {@code char} to compare
+   * @return a negative value if {@code a} is less than {@code b}; a positive
+   *     value if {@code a} is greater than {@code b}; or zero if they are equal
+   */
+  public static int compare(char a, char b) {
+    return a - b; // safe due to restricted range
+  }
+
+  /**
+   * Returns {@code true} if {@code target} is present as an element anywhere in
+   * {@code array}.
+   *
+   * @param array an array of {@code char} values, possibly empty
+   * @param target a primitive {@code char} value
+   * @return {@code true} if {@code array[i] == target} for some value of {@code
+   *     i}
+   */
+  public static boolean contains(char[] array, char target) {
+    for (char value : array) {
+      if (value == target) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  /**
+   * Returns the index of the first appearance of the value {@code target} in
+   * {@code array}.
+   *
+   * @param array an array of {@code char} values, possibly empty
+   * @param target a primitive {@code char} value
+   * @return the least index {@code i} for which {@code array[i] == target}, or
+   *     {@code -1} if no such index exists.
+   */
+  public static int indexOf(char[] array, char target) {
+    return indexOf(array, target, 0, array.length);
+  }
+
+  // TODO(kevinb): consider making this public
+  private static int indexOf(
+      char[] array, char target, int start, int end) {
+    for (int i = start; i < end; i++) {
+      if (array[i] == target) {
+        return i;
+      }
+    }
+    return -1;
+  }
+
+  /**
+   * Returns the start position of the first occurrence of the specified {@code
+   * target} within {@code array}, or {@code -1} if there is no such occurrence.
+   *
+   * <p>More formally, returns the lowest index {@code i} such that {@code
+   * java.util.Arrays.copyOfRange(array, i, i + target.length)} contains exactly
+   * the same elements as {@code target}.
+   *
+   * @param array the array to search for the sequence {@code target}
+   * @param target the array to search for as a sub-sequence of {@code array}
+   */
+  public static int indexOf(char[] array, char[] target) {
+    checkNotNull(array, "array");
+    checkNotNull(target, "target");
+    if (target.length == 0) {
+      return 0;
+    }
+
+    outer:
+    for (int i = 0; i < array.length - target.length + 1; i++) {
+      for (int j = 0; j < target.length; j++) {
+        if (array[i + j] != target[j]) {
+          continue outer;
+        }
+      }
+      return i;
+    }
+    return -1;
+  }
+
+  /**
+   * Returns the index of the last appearance of the value {@code target} in
+   * {@code array}.
+   *
+   * @param array an array of {@code char} values, possibly empty
+   * @param target a primitive {@code char} value
+   * @return the greatest index {@code i} for which {@code array[i] == target},
+   *     or {@code -1} if no such index exists.
+   */
+  public static int lastIndexOf(char[] array, char target) {
+    return lastIndexOf(array, target, 0, array.length);
+  }
+
+  // TODO(kevinb): consider making this public
+  private static int lastIndexOf(
+      char[] array, char target, int start, int end) {
+    for (int i = end - 1; i >= start; i--) {
+      if (array[i] == target) {
+        return i;
+      }
+    }
+    return -1;
+  }
+
+  /**
+   * Returns the least value present in {@code array}.
+   *
+   * @param array a <i>nonempty</i> array of {@code char} values
+   * @return the value present in {@code array} that is less than or equal to
+   *     every other value in the array
+   * @throws IllegalArgumentException if {@code array} is empty
+   */
+  public static char min(char... array) {
+    checkArgument(array.length > 0);
+    char min = array[0];
+    for (int i = 1; i < array.length; i++) {
+      if (array[i] < min) {
+        min = array[i];
+      }
+    }
+    return min;
+  }
+
+  /**
+   * Returns the greatest value present in {@code array}.
+   *
+   * @param array a <i>nonempty</i> array of {@code char} values
+   * @return the value present in {@code array} that is greater than or equal to
+   *     every other value in the array
+   * @throws IllegalArgumentException if {@code array} is empty
+   */
+  public static char max(char... array) {
+    checkArgument(array.length > 0);
+    char max = array[0];
+    for (int i = 1; i < array.length; i++) {
+      if (array[i] > max) {
+        max = array[i];
+      }
+    }
+    return max;
+  }
+
+  /**
+   * Returns the values from each provided array combined into a single array.
+   * For example, {@code concat(new char[] {a, b}, new char[] {}, new
+   * char[] {c}} returns the array {@code {a, b, c}}.
+   *
+   * @param arrays zero or more {@code char} arrays
+   * @return a single array containing all the values from the source arrays, in
+   *     order
+   */
+  public static char[] concat(char[]... arrays) {
+    int length = 0;
+    for (char[] array : arrays) {
+      length += array.length;
+    }
+    char[] result = new char[length];
+    int pos = 0;
+    for (char[] array : arrays) {
+      System.arraycopy(array, 0, result, pos, array.length);
+      pos += array.length;
+    }
+    return result;
+  }
+
+  /**
+   * Returns a big-endian representation of {@code value} in a 2-element byte
+   * array; equivalent to {@code
+   * ByteBuffer.allocate(2).putChar(value).array()}.  For example, the input
+   * value {@code '\\u5432'} would yield the byte array {@code {0x54, 0x32}}.
+   *
+   * <p>If you need to convert and concatenate several values (possibly even of
+   * different types), use a shared {@link java.nio.ByteBuffer} instance, or use
+   * {@link com.google.common.io.ByteStreams#newDataOutput()} to get a growable
+   * buffer.
+   */
+  @GwtIncompatible("doesn't work")
+  public static byte[] toByteArray(char value) {
+    return new byte[] {
+        (byte) (value >> 8),
+        (byte) value};
+  }
+
+  /**
+   * Returns the {@code char} value whose big-endian representation is
+   * stored in the first 2 bytes of {@code bytes}; equivalent to {@code
+   * ByteBuffer.wrap(bytes).getChar()}. For example, the input byte array
+   * {@code {0x54, 0x32}} would yield the {@code char} value {@code '\\u5432'}.
+   *
+   * <p>Arguably, it's preferable to use {@link java.nio.ByteBuffer}; that
+   * library exposes much more flexibility at little cost in readability.
+   *
+   * @throws IllegalArgumentException if {@code bytes} has fewer than 2
+   *     elements
+   */
+  @GwtIncompatible("doesn't work")
+  public static char fromByteArray(byte[] bytes) {
+    checkArgument(bytes.length >= BYTES,
+        "array too small: %s < %s", bytes.length, BYTES);
+    return fromBytes(bytes[0], bytes[1]);
+  }
+
+  /**
+   * Returns the {@code char} value whose byte representation is the given 2
+   * bytes, in big-endian order; equivalent to {@code Chars.fromByteArray(new
+   * byte[] {b1, b2})}.
+   *
+   * @since 7.0
+   */
+  @GwtIncompatible("doesn't work")
+  public static char fromBytes(byte b1, byte b2) {
+    return (char) ((b1 << 8) | (b2 & 0xFF));
+  }
+
+  /**
+   * Returns an array containing the same values as {@code array}, but
+   * guaranteed to be of a specified minimum length. If {@code array} already
+   * has a length of at least {@code minLength}, it is returned directly.
+   * Otherwise, a new array of size {@code minLength + padding} is returned,
+   * containing the values of {@code array}, and zeroes in the remaining places.
+   *
+   * @param array the source array
+   * @param minLength the minimum length the returned array must guarantee
+   * @param padding an extra amount to "grow" the array by if growth is
+   *     necessary
+   * @throws IllegalArgumentException if {@code minLength} or {@code padding} is
+   *     negative
+   * @return an array containing the values of {@code array}, with guaranteed
+   *     minimum length {@code minLength}
+   */
+  public static char[] ensureCapacity(
+      char[] array, int minLength, int padding) {
+    checkArgument(minLength >= 0, "Invalid minLength: %s", minLength);
+    checkArgument(padding >= 0, "Invalid padding: %s", padding);
+    return (array.length < minLength)
+        ? copyOf(array, minLength + padding)
+        : array;
+  }
+
+  // Arrays.copyOf() requires Java 6
+  private static char[] copyOf(char[] original, int length) {
+    char[] copy = new char[length];
+    System.arraycopy(original, 0, copy, 0, Math.min(original.length, length));
+    return copy;
+  }
+
+  /**
+   * Returns a string containing the supplied {@code char} values separated
+   * by {@code separator}. For example, {@code join("-", '1', '2', '3')} returns
+   * the string {@code "1-2-3"}.
+   *
+   * @param separator the text that should appear between consecutive values in
+   *     the resulting string (but not at the start or end)
+   * @param array an array of {@code char} values, possibly empty
+   */
+  public static String join(String separator, char... array) {
+    checkNotNull(separator);
+    int len = array.length;
+    if (len == 0) {
+      return "";
+    }
+
+    StringBuilder builder
+        = new StringBuilder(len + separator.length() * (len - 1));
+    builder.append(array[0]);
+    for (int i = 1; i < len; i++) {
+      builder.append(separator).append(array[i]);
+    }
+    return builder.toString();
+  }
+
+  /**
+   * Returns a comparator that compares two {@code char} arrays
+   * lexicographically. That is, it compares, using {@link
+   * #compare(char, char)}), the first pair of values that follow any
+   * common prefix, or when one array is a prefix of the other, treats the
+   * shorter array as the lesser. For example,
+   * {@code [] < ['a'] < ['a', 'b'] < ['b']}.
+   *
+   * <p>The returned comparator is inconsistent with {@link
+   * Object#equals(Object)} (since arrays support only identity equality), but
+   * it is consistent with {@link Arrays#equals(char[], char[])}.
+   *
+   * @see <a href="http://en.wikipedia.org/wiki/Lexicographical_order">
+   *     Lexicographical order article at Wikipedia</a>
+   * @since 2.0
+   */
+  public static Comparator<char[]> lexicographicalComparator() {
+    return LexicographicalComparator.INSTANCE;
+  }
+
+  private enum LexicographicalComparator implements Comparator<char[]> {
+    INSTANCE;
+
+    @Override
+    public int compare(char[] left, char[] right) {
+      int minLength = Math.min(left.length, right.length);
+      for (int i = 0; i < minLength; i++) {
+        int result = Chars.compare(left[i], right[i]);
+        if (result != 0) {
+          return result;
+        }
+      }
+      return left.length - right.length;
+    }
+  }
+
+  /**
+   * Copies a collection of {@code Character} instances into a new array of
+   * primitive {@code char} values.
+   *
+   * <p>Elements are copied from the argument collection as if by {@code
+   * collection.toArray()}.  Calling this method is as thread-safe as calling
+   * that method.
+   *
+   * @param collection a collection of {@code Character} objects
+   * @return an array containing the same values as {@code collection}, in the
+   *     same order, converted to primitives
+   * @throws NullPointerException if {@code collection} or any of its elements
+   *     is null
+   */
+  public static char[] toArray(Collection<Character> collection) {
+    if (collection instanceof CharArrayAsList) {
+      return ((CharArrayAsList) collection).toCharArray();
+    }
+
+    Object[] boxedArray = collection.toArray();
+    int len = boxedArray.length;
+    char[] array = new char[len];
+    for (int i = 0; i < len; i++) {
+      // checkNotNull for GWT (do not optimize)
+      array[i] = (Character) checkNotNull(boxedArray[i]);
+    }
+    return array;
+  }
+
+  /**
+   * Returns a fixed-size list backed by the specified array, similar to {@link
+   * Arrays#asList(Object[])}. The list supports {@link List#set(int, Object)},
+   * but any attempt to set a value to {@code null} will result in a {@link
+   * NullPointerException}.
+   *
+   * <p>The returned list maintains the values, but not the identities, of
+   * {@code Character} objects written to or read from it.  For example, whether
+   * {@code list.get(0) == list.get(0)} is true for the returned list is
+   * unspecified.
+   *
+   * @param backingArray the array to back the list
+   * @return a list view of the array
+   */
+  public static List<Character> asList(char... backingArray) {
+    if (backingArray.length == 0) {
+      return Collections.emptyList();
+    }
+    return new CharArrayAsList(backingArray);
+  }
+
+  @GwtCompatible
+  private static class CharArrayAsList extends AbstractList<Character>
+      implements RandomAccess, Serializable {
+    final char[] array;
+    final int start;
+    final int end;
+
+    CharArrayAsList(char[] array) {
+      this(array, 0, array.length);
+    }
+
+    CharArrayAsList(char[] array, int start, int end) {
+      this.array = array;
+      this.start = start;
+      this.end = end;
+    }
+
+    @Override public int size() {
+      return end - start;
+    }
+
+    @Override public boolean isEmpty() {
+      return false;
+    }
+
+    @Override public Character get(int index) {
+      checkElementIndex(index, size());
+      return array[start + index];
+    }
+
+    @Override public boolean contains(Object target) {
+      // Overridden to prevent a ton of boxing
+      return (target instanceof Character)
+          && Chars.indexOf(array, (Character) target, start, end) != -1;
+    }
+
+    @Override public int indexOf(Object target) {
+      // Overridden to prevent a ton of boxing
+      if (target instanceof Character) {
+        int i = Chars.indexOf(array, (Character) target, start, end);
+        if (i >= 0) {
+          return i - start;
+        }
+      }
+      return -1;
+    }
+
+    @Override public int lastIndexOf(Object target) {
+      // Overridden to prevent a ton of boxing
+      if (target instanceof Character) {
+        int i = Chars.lastIndexOf(array, (Character) target, start, end);
+        if (i >= 0) {
+          return i - start;
+        }
+      }
+      return -1;
+    }
+
+    @Override public Character set(int index, Character element) {
+      checkElementIndex(index, size());
+      char oldValue = array[start + index];
+      array[start + index] = checkNotNull(element);  // checkNotNull for GWT (do not optimize)
+      return oldValue;
+    }
+
+    @Override public List<Character> subList(int fromIndex, int toIndex) {
+      int size = size();
+      checkPositionIndexes(fromIndex, toIndex, size);
+      if (fromIndex == toIndex) {
+        return Collections.emptyList();
+      }
+      return new CharArrayAsList(array, start + fromIndex, start + toIndex);
+    }
+
+    @Override public boolean equals(Object object) {
+      if (object == this) {
+        return true;
+      }
+      if (object instanceof CharArrayAsList) {
+        CharArrayAsList that = (CharArrayAsList) object;
+        int size = size();
+        if (that.size() != size) {
+          return false;
+        }
+        for (int i = 0; i < size; i++) {
+          if (array[start + i] != that.array[that.start + i]) {
+            return false;
+          }
+        }
+        return true;
+      }
+      return super.equals(object);
+    }
+
+    @Override public int hashCode() {
+      int result = 1;
+      for (int i = start; i < end; i++) {
+        result = 31 * result + Chars.hashCode(array[i]);
+      }
+      return result;
+    }
+
+    @Override public String toString() {
+      StringBuilder builder = new StringBuilder(size() * 3);
+      builder.append('[').append(array[start]);
+      for (int i = start + 1; i < end; i++) {
+        builder.append(", ").append(array[i]);
+      }
+      return builder.append(']').toString();
+    }
+
+    char[] toCharArray() {
+      // Arrays.copyOfRange() requires Java 6
+      int size = size();
+      char[] result = new char[size];
+      System.arraycopy(array, start, result, 0, size);
+      return result;
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+}
diff --git a/guava/src/com/google/common/primitives/Doubles.java b/guava/src/com/google/common/primitives/Doubles.java
new file mode 100644
index 0000000..dc3ea64
--- /dev/null
+++ b/guava/src/com/google/common/primitives/Doubles.java
@@ -0,0 +1,528 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.primitives;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkElementIndex;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkPositionIndexes;
+import static java.lang.Double.NEGATIVE_INFINITY;
+import static java.lang.Double.POSITIVE_INFINITY;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.io.Serializable;
+import java.util.AbstractList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.RandomAccess;
+
+/**
+ * Static utility methods pertaining to {@code double} primitives, that are not
+ * already found in either {@link Double} or {@link Arrays}.
+ *
+ * @author Kevin Bourrillion
+ * @since 1.0
+ */
+@GwtCompatible
+public final class Doubles {
+  private Doubles() {}
+
+  /**
+   * The number of bytes required to represent a primitive {@code double}
+   * value.
+   *
+   * @since 10.0
+   */
+  public static final int BYTES = Double.SIZE / Byte.SIZE;
+
+  /**
+   * Returns a hash code for {@code value}; equal to the result of invoking
+   * {@code ((Double) value).hashCode()}.
+   *
+   * @param value a primitive {@code double} value
+   * @return a hash code for the value
+   */
+  public static int hashCode(double value) {
+    return ((Double) value).hashCode();
+    // TODO(kevinb): do it this way when we can (GWT problem):
+    // long bits = Double.doubleToLongBits(value);
+    // return (int)(bits ^ (bits >>> 32));
+  }
+
+  /**
+   * Compares the two specified {@code double} values. The sign of the value
+   * returned is the same as that of <code>((Double) a).{@linkplain
+   * Double#compareTo compareTo}(b)</code>. As with that method, {@code NaN} is
+   * treated as greater than all other values, and {@code 0.0 > -0.0}.
+   *
+   * @param a the first {@code double} to compare
+   * @param b the second {@code double} to compare
+   * @return a negative value if {@code a} is less than {@code b}; a positive
+   *     value if {@code a} is greater than {@code b}; or zero if they are equal
+   */
+  public static int compare(double a, double b) {
+    return Double.compare(a, b);
+  }
+
+  /**
+   * Returns {@code true} if {@code value} represents a real number. This is
+   * equivalent to, but not necessarily implemented as,
+   * {@code !(Double.isInfinite(value) || Double.isNaN(value))}.
+   *
+   * @since 10.0
+   */
+  public static boolean isFinite(double value) {
+    return NEGATIVE_INFINITY < value & value < POSITIVE_INFINITY;
+  }
+
+  /**
+   * Returns {@code true} if {@code target} is present as an element anywhere in
+   * {@code array}. Note that this always returns {@code false} when {@code
+   * target} is {@code NaN}.
+   *
+   * @param array an array of {@code double} values, possibly empty
+   * @param target a primitive {@code double} value
+   * @return {@code true} if {@code array[i] == target} for some value of {@code
+   *     i}
+   */
+  public static boolean contains(double[] array, double target) {
+    for (double value : array) {
+      if (value == target) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  /**
+   * Returns the index of the first appearance of the value {@code target} in
+   * {@code array}. Note that this always returns {@code -1} when {@code target}
+   * is {@code NaN}.
+   *
+   * @param array an array of {@code double} values, possibly empty
+   * @param target a primitive {@code double} value
+   * @return the least index {@code i} for which {@code array[i] == target}, or
+   *     {@code -1} if no such index exists.
+   */
+  public static int indexOf(double[] array, double target) {
+    return indexOf(array, target, 0, array.length);
+  }
+
+  // TODO(kevinb): consider making this public
+  private static int indexOf(
+      double[] array, double target, int start, int end) {
+    for (int i = start; i < end; i++) {
+      if (array[i] == target) {
+        return i;
+      }
+    }
+    return -1;
+  }
+
+  /**
+   * Returns the start position of the first occurrence of the specified {@code
+   * target} within {@code array}, or {@code -1} if there is no such occurrence.
+   *
+   * <p>More formally, returns the lowest index {@code i} such that {@code
+   * java.util.Arrays.copyOfRange(array, i, i + target.length)} contains exactly
+   * the same elements as {@code target}.
+   *
+   * <p>Note that this always returns {@code -1} when {@code target} contains
+   * {@code NaN}.
+   *
+   * @param array the array to search for the sequence {@code target}
+   * @param target the array to search for as a sub-sequence of {@code array}
+   */
+  public static int indexOf(double[] array, double[] target) {
+    checkNotNull(array, "array");
+    checkNotNull(target, "target");
+    if (target.length == 0) {
+      return 0;
+    }
+
+    outer:
+    for (int i = 0; i < array.length - target.length + 1; i++) {
+      for (int j = 0; j < target.length; j++) {
+        if (array[i + j] != target[j]) {
+          continue outer;
+        }
+      }
+      return i;
+    }
+    return -1;
+  }
+
+  /**
+   * Returns the index of the last appearance of the value {@code target} in
+   * {@code array}. Note that this always returns {@code -1} when {@code target}
+   * is {@code NaN}.
+   *
+   * @param array an array of {@code double} values, possibly empty
+   * @param target a primitive {@code double} value
+   * @return the greatest index {@code i} for which {@code array[i] == target},
+   *     or {@code -1} if no such index exists.
+   */
+  public static int lastIndexOf(double[] array, double target) {
+    return lastIndexOf(array, target, 0, array.length);
+  }
+
+  // TODO(kevinb): consider making this public
+  private static int lastIndexOf(
+      double[] array, double target, int start, int end) {
+    for (int i = end - 1; i >= start; i--) {
+      if (array[i] == target) {
+        return i;
+      }
+    }
+    return -1;
+  }
+
+  /**
+   * Returns the least value present in {@code array}, using the same rules of
+   * comparison as {@link Math#min(double, double)}.
+   *
+   * @param array a <i>nonempty</i> array of {@code double} values
+   * @return the value present in {@code array} that is less than or equal to
+   *     every other value in the array
+   * @throws IllegalArgumentException if {@code array} is empty
+   */
+  public static double min(double... array) {
+    checkArgument(array.length > 0);
+    double min = array[0];
+    for (int i = 1; i < array.length; i++) {
+      min = Math.min(min, array[i]);
+    }
+    return min;
+  }
+
+  /**
+   * Returns the greatest value present in {@code array}, using the same rules
+   * of comparison as {@link Math#max(double, double)}.
+   *
+   * @param array a <i>nonempty</i> array of {@code double} values
+   * @return the value present in {@code array} that is greater than or equal to
+   *     every other value in the array
+   * @throws IllegalArgumentException if {@code array} is empty
+   */
+  public static double max(double... array) {
+    checkArgument(array.length > 0);
+    double max = array[0];
+    for (int i = 1; i < array.length; i++) {
+      max = Math.max(max, array[i]);
+    }
+    return max;
+  }
+
+  /**
+   * Returns the values from each provided array combined into a single array.
+   * For example, {@code concat(new double[] {a, b}, new double[] {}, new
+   * double[] {c}} returns the array {@code {a, b, c}}.
+   *
+   * @param arrays zero or more {@code double} arrays
+   * @return a single array containing all the values from the source arrays, in
+   *     order
+   */
+  public static double[] concat(double[]... arrays) {
+    int length = 0;
+    for (double[] array : arrays) {
+      length += array.length;
+    }
+    double[] result = new double[length];
+    int pos = 0;
+    for (double[] array : arrays) {
+      System.arraycopy(array, 0, result, pos, array.length);
+      pos += array.length;
+    }
+    return result;
+  }
+
+  /**
+   * Returns an array containing the same values as {@code array}, but
+   * guaranteed to be of a specified minimum length. If {@code array} already
+   * has a length of at least {@code minLength}, it is returned directly.
+   * Otherwise, a new array of size {@code minLength + padding} is returned,
+   * containing the values of {@code array}, and zeroes in the remaining places.
+   *
+   * @param array the source array
+   * @param minLength the minimum length the returned array must guarantee
+   * @param padding an extra amount to "grow" the array by if growth is
+   *     necessary
+   * @throws IllegalArgumentException if {@code minLength} or {@code padding} is
+   *     negative
+   * @return an array containing the values of {@code array}, with guaranteed
+   *     minimum length {@code minLength}
+   */
+  public static double[] ensureCapacity(
+      double[] array, int minLength, int padding) {
+    checkArgument(minLength >= 0, "Invalid minLength: %s", minLength);
+    checkArgument(padding >= 0, "Invalid padding: %s", padding);
+    return (array.length < minLength)
+        ? copyOf(array, minLength + padding)
+        : array;
+  }
+
+  // Arrays.copyOf() requires Java 6
+  private static double[] copyOf(double[] original, int length) {
+    double[] copy = new double[length];
+    System.arraycopy(original, 0, copy, 0, Math.min(original.length, length));
+    return copy;
+  }
+
+  /**
+   * Returns a string containing the supplied {@code double} values, converted
+   * to strings as specified by {@link Double#toString(double)}, and separated
+   * by {@code separator}. For example, {@code join("-", 1.0, 2.0, 3.0)} returns
+   * the string {@code "1.0-2.0-3.0"}.
+   *
+   * <p>Note that {@link Double#toString(double)} formats {@code double}
+   * differently in GWT sometimes.  In the previous example, it returns the string
+   * {@code "1-2-3"}.
+   *
+   * @param separator the text that should appear between consecutive values in
+   *     the resulting string (but not at the start or end)
+   * @param array an array of {@code double} values, possibly empty
+   */
+  public static String join(String separator, double... array) {
+    checkNotNull(separator);
+    if (array.length == 0) {
+      return "";
+    }
+
+    // For pre-sizing a builder, just get the right order of magnitude
+    StringBuilder builder = new StringBuilder(array.length * 12);
+    builder.append(array[0]);
+    for (int i = 1; i < array.length; i++) {
+      builder.append(separator).append(array[i]);
+    }
+    return builder.toString();
+  }
+
+  /**
+   * Returns a comparator that compares two {@code double} arrays
+   * lexicographically. That is, it compares, using {@link
+   * #compare(double, double)}), the first pair of values that follow any
+   * common prefix, or when one array is a prefix of the other, treats the
+   * shorter array as the lesser. For example,
+   * {@code [] < [1.0] < [1.0, 2.0] < [2.0]}.
+   *
+   * <p>The returned comparator is inconsistent with {@link
+   * Object#equals(Object)} (since arrays support only identity equality), but
+   * it is consistent with {@link Arrays#equals(double[], double[])}.
+   *
+   * @see <a href="http://en.wikipedia.org/wiki/Lexicographical_order">
+   *     Lexicographical order article at Wikipedia</a>
+   * @since 2.0
+   */
+  public static Comparator<double[]> lexicographicalComparator() {
+    return LexicographicalComparator.INSTANCE;
+  }
+
+  private enum LexicographicalComparator implements Comparator<double[]> {
+    INSTANCE;
+
+    @Override
+    public int compare(double[] left, double[] right) {
+      int minLength = Math.min(left.length, right.length);
+      for (int i = 0; i < minLength; i++) {
+        int result = Doubles.compare(left[i], right[i]);
+        if (result != 0) {
+          return result;
+        }
+      }
+      return left.length - right.length;
+    }
+  }
+
+  /**
+   * Copies a collection of {@code Double} instances into a new array of
+   * primitive {@code double} values.
+   *
+   * <p>Elements are copied from the argument collection as if by {@code
+   * collection.toArray()}.  Calling this method is as thread-safe as calling
+   * that method.
+   *
+   * @param collection a collection of {@code Double} objects
+   * @return an array containing the same values as {@code collection}, in the
+   *     same order, converted to primitives
+   * @throws NullPointerException if {@code collection} or any of its elements
+   *     is null
+   */
+  public static double[] toArray(Collection<Double> collection) {
+    if (collection instanceof DoubleArrayAsList) {
+      return ((DoubleArrayAsList) collection).toDoubleArray();
+    }
+
+    Object[] boxedArray = collection.toArray();
+    int len = boxedArray.length;
+    double[] array = new double[len];
+    for (int i = 0; i < len; i++) {
+      // checkNotNull for GWT (do not optimize)
+      array[i] = (Double) checkNotNull(boxedArray[i]);
+    }
+    return array;
+  }
+
+  /**
+   * Returns a fixed-size list backed by the specified array, similar to {@link
+   * Arrays#asList(Object[])}. The list supports {@link List#set(int, Object)},
+   * but any attempt to set a value to {@code null} will result in a {@link
+   * NullPointerException}.
+   *
+   * <p>The returned list maintains the values, but not the identities, of
+   * {@code Double} objects written to or read from it.  For example, whether
+   * {@code list.get(0) == list.get(0)} is true for the returned list is
+   * unspecified.
+   *
+   * <p>The returned list may have unexpected behavior if it contains {@code
+   * NaN}, or if {@code NaN} is used as a parameter to any of its methods.
+   *
+   * @param backingArray the array to back the list
+   * @return a list view of the array
+   */
+  public static List<Double> asList(double... backingArray) {
+    if (backingArray.length == 0) {
+      return Collections.emptyList();
+    }
+    return new DoubleArrayAsList(backingArray);
+  }
+
+  @GwtCompatible
+  private static class DoubleArrayAsList extends AbstractList<Double>
+      implements RandomAccess, Serializable {
+    final double[] array;
+    final int start;
+    final int end;
+
+    DoubleArrayAsList(double[] array) {
+      this(array, 0, array.length);
+    }
+
+    DoubleArrayAsList(double[] array, int start, int end) {
+      this.array = array;
+      this.start = start;
+      this.end = end;
+    }
+
+    @Override public int size() {
+      return end - start;
+    }
+
+    @Override public boolean isEmpty() {
+      return false;
+    }
+
+    @Override public Double get(int index) {
+      checkElementIndex(index, size());
+      return array[start + index];
+    }
+
+    @Override public boolean contains(Object target) {
+      // Overridden to prevent a ton of boxing
+      return (target instanceof Double)
+          && Doubles.indexOf(array, (Double) target, start, end) != -1;
+    }
+
+    @Override public int indexOf(Object target) {
+      // Overridden to prevent a ton of boxing
+      if (target instanceof Double) {
+        int i = Doubles.indexOf(array, (Double) target, start, end);
+        if (i >= 0) {
+          return i - start;
+        }
+      }
+      return -1;
+    }
+
+    @Override public int lastIndexOf(Object target) {
+      // Overridden to prevent a ton of boxing
+      if (target instanceof Double) {
+        int i = Doubles.lastIndexOf(array, (Double) target, start, end);
+        if (i >= 0) {
+          return i - start;
+        }
+      }
+      return -1;
+    }
+
+    @Override public Double set(int index, Double element) {
+      checkElementIndex(index, size());
+      double oldValue = array[start + index];
+      array[start + index] = checkNotNull(element);  // checkNotNull for GWT (do not optimize)
+      return oldValue;
+    }
+
+    @Override public List<Double> subList(int fromIndex, int toIndex) {
+      int size = size();
+      checkPositionIndexes(fromIndex, toIndex, size);
+      if (fromIndex == toIndex) {
+        return Collections.emptyList();
+      }
+      return new DoubleArrayAsList(array, start + fromIndex, start + toIndex);
+    }
+
+    @Override public boolean equals(Object object) {
+      if (object == this) {
+        return true;
+      }
+      if (object instanceof DoubleArrayAsList) {
+        DoubleArrayAsList that = (DoubleArrayAsList) object;
+        int size = size();
+        if (that.size() != size) {
+          return false;
+        }
+        for (int i = 0; i < size; i++) {
+          if (array[start + i] != that.array[that.start + i]) {
+            return false;
+          }
+        }
+        return true;
+      }
+      return super.equals(object);
+    }
+
+    @Override public int hashCode() {
+      int result = 1;
+      for (int i = start; i < end; i++) {
+        result = 31 * result + Doubles.hashCode(array[i]);
+      }
+      return result;
+    }
+
+    @Override public String toString() {
+      StringBuilder builder = new StringBuilder(size() * 12);
+      builder.append('[').append(array[start]);
+      for (int i = start + 1; i < end; i++) {
+        builder.append(", ").append(array[i]);
+      }
+      return builder.append(']').toString();
+    }
+
+    double[] toDoubleArray() {
+      // Arrays.copyOfRange() requires Java 6
+      int size = size();
+      double[] result = new double[size];
+      System.arraycopy(array, start, result, 0, size);
+      return result;
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+}
diff --git a/guava/src/com/google/common/primitives/Floats.java b/guava/src/com/google/common/primitives/Floats.java
new file mode 100644
index 0000000..ffc932f
--- /dev/null
+++ b/guava/src/com/google/common/primitives/Floats.java
@@ -0,0 +1,525 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.primitives;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkElementIndex;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkPositionIndexes;
+import static java.lang.Float.NEGATIVE_INFINITY;
+import static java.lang.Float.POSITIVE_INFINITY;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.io.Serializable;
+import java.util.AbstractList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.RandomAccess;
+
+/**
+ * Static utility methods pertaining to {@code float} primitives, that are not
+ * already found in either {@link Float} or {@link Arrays}.
+ *
+ * @author Kevin Bourrillion
+ * @since 1.0
+ */
+@GwtCompatible
+public final class Floats {
+  private Floats() {}
+
+  /**
+   * The number of bytes required to represent a primitive {@code float}
+   * value.
+   *
+   * @since 10.0
+   */
+  public static final int BYTES = Float.SIZE / Byte.SIZE;
+
+  /**
+   * Returns a hash code for {@code value}; equal to the result of invoking
+   * {@code ((Float) value).hashCode()}.
+   *
+   * @param value a primitive {@code float} value
+   * @return a hash code for the value
+   */
+  public static int hashCode(float value) {
+    // TODO(kevinb): is there a better way, that's still gwt-safe?
+    return ((Float) value).hashCode();
+  }
+
+  /**
+   * Compares the two specified {@code float} values using {@link
+   * Float#compare(float, float)}. You may prefer to invoke that method
+   * directly; this method exists only for consistency with the other utilities
+   * in this package.
+   *
+   * @param a the first {@code float} to compare
+   * @param b the second {@code float} to compare
+   * @return the result of invoking {@link Float#compare(float, float)}
+   */
+  public static int compare(float a, float b) {
+    return Float.compare(a, b);
+  }
+
+  /**
+   * Returns {@code true} if {@code value} represents a real number. This is
+   * equivalent to, but not necessarily implemented as,
+   * {@code !(Float.isInfinite(value) || Float.isNaN(value))}.
+   *
+   * @since 10.0
+   */
+  public static boolean isFinite(float value) {
+    return NEGATIVE_INFINITY < value & value < POSITIVE_INFINITY;
+  }
+
+  /**
+   * Returns {@code true} if {@code target} is present as an element anywhere in
+   * {@code array}. Note that this always returns {@code false} when {@code
+   * target} is {@code NaN}.
+   *
+   * @param array an array of {@code float} values, possibly empty
+   * @param target a primitive {@code float} value
+   * @return {@code true} if {@code array[i] == target} for some value of {@code
+   *     i}
+   */
+  public static boolean contains(float[] array, float target) {
+    for (float value : array) {
+      if (value == target) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  /**
+   * Returns the index of the first appearance of the value {@code target} in
+   * {@code array}. Note that this always returns {@code -1} when {@code target}
+   * is {@code NaN}.
+   *
+   * @param array an array of {@code float} values, possibly empty
+   * @param target a primitive {@code float} value
+   * @return the least index {@code i} for which {@code array[i] == target}, or
+   *     {@code -1} if no such index exists.
+   */
+  public static int indexOf(float[] array, float target) {
+    return indexOf(array, target, 0, array.length);
+  }
+
+  // TODO(kevinb): consider making this public
+  private static int indexOf(
+      float[] array, float target, int start, int end) {
+    for (int i = start; i < end; i++) {
+      if (array[i] == target) {
+        return i;
+      }
+    }
+    return -1;
+  }
+
+  /**
+   * Returns the start position of the first occurrence of the specified {@code
+   * target} within {@code array}, or {@code -1} if there is no such occurrence.
+   *
+   * <p>More formally, returns the lowest index {@code i} such that {@code
+   * java.util.Arrays.copyOfRange(array, i, i + target.length)} contains exactly
+   * the same elements as {@code target}.
+   *
+   * <p>Note that this always returns {@code -1} when {@code target} contains
+   * {@code NaN}.
+   *
+   * @param array the array to search for the sequence {@code target}
+   * @param target the array to search for as a sub-sequence of {@code array}
+   */
+  public static int indexOf(float[] array, float[] target) {
+    checkNotNull(array, "array");
+    checkNotNull(target, "target");
+    if (target.length == 0) {
+      return 0;
+    }
+
+    outer:
+    for (int i = 0; i < array.length - target.length + 1; i++) {
+      for (int j = 0; j < target.length; j++) {
+        if (array[i + j] != target[j]) {
+          continue outer;
+        }
+      }
+      return i;
+    }
+    return -1;
+  }
+
+  /**
+   * Returns the index of the last appearance of the value {@code target} in
+   * {@code array}. Note that this always returns {@code -1} when {@code target}
+   * is {@code NaN}.
+   *
+   * @param array an array of {@code float} values, possibly empty
+   * @param target a primitive {@code float} value
+   * @return the greatest index {@code i} for which {@code array[i] == target},
+   *     or {@code -1} if no such index exists.
+   */
+  public static int lastIndexOf(float[] array, float target) {
+    return lastIndexOf(array, target, 0, array.length);
+  }
+
+  // TODO(kevinb): consider making this public
+  private static int lastIndexOf(
+      float[] array, float target, int start, int end) {
+    for (int i = end - 1; i >= start; i--) {
+      if (array[i] == target) {
+        return i;
+      }
+    }
+    return -1;
+  }
+
+  /**
+   * Returns the least value present in {@code array}, using the same rules of
+   * comparison as {@link Math#min(float, float)}.
+   *
+   * @param array a <i>nonempty</i> array of {@code float} values
+   * @return the value present in {@code array} that is less than or equal to
+   *     every other value in the array
+   * @throws IllegalArgumentException if {@code array} is empty
+   */
+  public static float min(float... array) {
+    checkArgument(array.length > 0);
+    float min = array[0];
+    for (int i = 1; i < array.length; i++) {
+      min = Math.min(min, array[i]);
+    }
+    return min;
+  }
+
+  /**
+   * Returns the greatest value present in {@code array}, using the same rules
+   * of comparison as {@link Math#min(float, float)}.
+   *
+   * @param array a <i>nonempty</i> array of {@code float} values
+   * @return the value present in {@code array} that is greater than or equal to
+   *     every other value in the array
+   * @throws IllegalArgumentException if {@code array} is empty
+   */
+  public static float max(float... array) {
+    checkArgument(array.length > 0);
+    float max = array[0];
+    for (int i = 1; i < array.length; i++) {
+      max = Math.max(max, array[i]);
+    }
+    return max;
+  }
+
+  /**
+   * Returns the values from each provided array combined into a single array.
+   * For example, {@code concat(new float[] {a, b}, new float[] {}, new
+   * float[] {c}} returns the array {@code {a, b, c}}.
+   *
+   * @param arrays zero or more {@code float} arrays
+   * @return a single array containing all the values from the source arrays, in
+   *     order
+   */
+  public static float[] concat(float[]... arrays) {
+    int length = 0;
+    for (float[] array : arrays) {
+      length += array.length;
+    }
+    float[] result = new float[length];
+    int pos = 0;
+    for (float[] array : arrays) {
+      System.arraycopy(array, 0, result, pos, array.length);
+      pos += array.length;
+    }
+    return result;
+  }
+
+  /**
+   * Returns an array containing the same values as {@code array}, but
+   * guaranteed to be of a specified minimum length. If {@code array} already
+   * has a length of at least {@code minLength}, it is returned directly.
+   * Otherwise, a new array of size {@code minLength + padding} is returned,
+   * containing the values of {@code array}, and zeroes in the remaining places.
+   *
+   * @param array the source array
+   * @param minLength the minimum length the returned array must guarantee
+   * @param padding an extra amount to "grow" the array by if growth is
+   *     necessary
+   * @throws IllegalArgumentException if {@code minLength} or {@code padding} is
+   *     negative
+   * @return an array containing the values of {@code array}, with guaranteed
+   *     minimum length {@code minLength}
+   */
+  public static float[] ensureCapacity(
+      float[] array, int minLength, int padding) {
+    checkArgument(minLength >= 0, "Invalid minLength: %s", minLength);
+    checkArgument(padding >= 0, "Invalid padding: %s", padding);
+    return (array.length < minLength)
+        ? copyOf(array, minLength + padding)
+        : array;
+  }
+
+  // Arrays.copyOf() requires Java 6
+  private static float[] copyOf(float[] original, int length) {
+    float[] copy = new float[length];
+    System.arraycopy(original, 0, copy, 0, Math.min(original.length, length));
+    return copy;
+  }
+
+  /**
+   * Returns a string containing the supplied {@code float} values, converted
+   * to strings as specified by {@link Float#toString(float)}, and separated by
+   * {@code separator}. For example, {@code join("-", 1.0f, 2.0f, 3.0f)}
+   * returns the string {@code "1.0-2.0-3.0"}.
+   *
+   * <p>Note that {@link Float#toString(float)} formats {@code float}
+   * differently in GWT.  In the previous example, it returns the string {@code
+   * "1-2-3"}.
+   *
+   * @param separator the text that should appear between consecutive values in
+   *     the resulting string (but not at the start or end)
+   * @param array an array of {@code float} values, possibly empty
+   */
+  public static String join(String separator, float... array) {
+    checkNotNull(separator);
+    if (array.length == 0) {
+      return "";
+    }
+
+    // For pre-sizing a builder, just get the right order of magnitude
+    StringBuilder builder = new StringBuilder(array.length * 12);
+    builder.append(array[0]);
+    for (int i = 1; i < array.length; i++) {
+      builder.append(separator).append(array[i]);
+    }
+    return builder.toString();
+  }
+
+  /**
+   * Returns a comparator that compares two {@code float} arrays
+   * lexicographically. That is, it compares, using {@link
+   * #compare(float, float)}), the first pair of values that follow any
+   * common prefix, or when one array is a prefix of the other, treats the
+   * shorter array as the lesser. For example, {@code [] < [1.0f] < [1.0f, 2.0f]
+   * < [2.0f]}.
+   *
+   * <p>The returned comparator is inconsistent with {@link
+   * Object#equals(Object)} (since arrays support only identity equality), but
+   * it is consistent with {@link Arrays#equals(float[], float[])}.
+   *
+   * @see <a href="http://en.wikipedia.org/wiki/Lexicographical_order">
+   *     Lexicographical order article at Wikipedia</a>
+   * @since 2.0
+   */
+  public static Comparator<float[]> lexicographicalComparator() {
+    return LexicographicalComparator.INSTANCE;
+  }
+
+  private enum LexicographicalComparator implements Comparator<float[]> {
+    INSTANCE;
+
+    @Override
+    public int compare(float[] left, float[] right) {
+      int minLength = Math.min(left.length, right.length);
+      for (int i = 0; i < minLength; i++) {
+        int result = Floats.compare(left[i], right[i]);
+        if (result != 0) {
+          return result;
+        }
+      }
+      return left.length - right.length;
+    }
+  }
+
+  /**
+   * Copies a collection of {@code Float} instances into a new array of
+   * primitive {@code float} values.
+   *
+   * <p>Elements are copied from the argument collection as if by {@code
+   * collection.toArray()}.  Calling this method is as thread-safe as calling
+   * that method.
+   *
+   * @param collection a collection of {@code Float} objects
+   * @return an array containing the same values as {@code collection}, in the
+   *     same order, converted to primitives
+   * @throws NullPointerException if {@code collection} or any of its elements
+   *     is null
+   */
+  public static float[] toArray(Collection<Float> collection) {
+    if (collection instanceof FloatArrayAsList) {
+      return ((FloatArrayAsList) collection).toFloatArray();
+    }
+
+    Object[] boxedArray = collection.toArray();
+    int len = boxedArray.length;
+    float[] array = new float[len];
+    for (int i = 0; i < len; i++) {
+      // checkNotNull for GWT (do not optimize)
+      array[i] = (Float) checkNotNull(boxedArray[i]);
+    }
+    return array;
+  }
+
+  /**
+   * Returns a fixed-size list backed by the specified array, similar to {@link
+   * Arrays#asList(Object[])}. The list supports {@link List#set(int, Object)},
+   * but any attempt to set a value to {@code null} will result in a {@link
+   * NullPointerException}.
+   *
+   * <p>The returned list maintains the values, but not the identities, of
+   * {@code Float} objects written to or read from it.  For example, whether
+   * {@code list.get(0) == list.get(0)} is true for the returned list is
+   * unspecified.
+   *
+   * <p>The returned list may have unexpected behavior if it contains {@code
+   * NaN}, or if {@code NaN} is used as a parameter to any of its methods.
+   *
+   * @param backingArray the array to back the list
+   * @return a list view of the array
+   */
+  public static List<Float> asList(float... backingArray) {
+    if (backingArray.length == 0) {
+      return Collections.emptyList();
+    }
+    return new FloatArrayAsList(backingArray);
+  }
+
+  @GwtCompatible
+  private static class FloatArrayAsList extends AbstractList<Float>
+      implements RandomAccess, Serializable {
+    final float[] array;
+    final int start;
+    final int end;
+
+    FloatArrayAsList(float[] array) {
+      this(array, 0, array.length);
+    }
+
+    FloatArrayAsList(float[] array, int start, int end) {
+      this.array = array;
+      this.start = start;
+      this.end = end;
+    }
+
+    @Override public int size() {
+      return end - start;
+    }
+
+    @Override public boolean isEmpty() {
+      return false;
+    }
+
+    @Override public Float get(int index) {
+      checkElementIndex(index, size());
+      return array[start + index];
+    }
+
+    @Override public boolean contains(Object target) {
+      // Overridden to prevent a ton of boxing
+      return (target instanceof Float)
+          && Floats.indexOf(array, (Float) target, start, end) != -1;
+    }
+
+    @Override public int indexOf(Object target) {
+      // Overridden to prevent a ton of boxing
+      if (target instanceof Float) {
+        int i = Floats.indexOf(array, (Float) target, start, end);
+        if (i >= 0) {
+          return i - start;
+        }
+      }
+      return -1;
+    }
+
+    @Override public int lastIndexOf(Object target) {
+      // Overridden to prevent a ton of boxing
+      if (target instanceof Float) {
+        int i = Floats.lastIndexOf(array, (Float) target, start, end);
+        if (i >= 0) {
+          return i - start;
+        }
+      }
+      return -1;
+    }
+
+    @Override public Float set(int index, Float element) {
+      checkElementIndex(index, size());
+      float oldValue = array[start + index];
+      array[start + index] = checkNotNull(element);  // checkNotNull for GWT (do not optimize)
+      return oldValue;
+    }
+
+    @Override public List<Float> subList(int fromIndex, int toIndex) {
+      int size = size();
+      checkPositionIndexes(fromIndex, toIndex, size);
+      if (fromIndex == toIndex) {
+        return Collections.emptyList();
+      }
+      return new FloatArrayAsList(array, start + fromIndex, start + toIndex);
+    }
+
+    @Override public boolean equals(Object object) {
+      if (object == this) {
+        return true;
+      }
+      if (object instanceof FloatArrayAsList) {
+        FloatArrayAsList that = (FloatArrayAsList) object;
+        int size = size();
+        if (that.size() != size) {
+          return false;
+        }
+        for (int i = 0; i < size; i++) {
+          if (array[start + i] != that.array[that.start + i]) {
+            return false;
+          }
+        }
+        return true;
+      }
+      return super.equals(object);
+    }
+
+    @Override public int hashCode() {
+      int result = 1;
+      for (int i = start; i < end; i++) {
+        result = 31 * result + Floats.hashCode(array[i]);
+      }
+      return result;
+    }
+
+    @Override public String toString() {
+      StringBuilder builder = new StringBuilder(size() * 12);
+      builder.append('[').append(array[start]);
+      for (int i = start + 1; i < end; i++) {
+        builder.append(", ").append(array[i]);
+      }
+      return builder.append(']').toString();
+    }
+
+    float[] toFloatArray() {
+      // Arrays.copyOfRange() requires Java 6
+      int size = size();
+      float[] result = new float[size];
+      System.arraycopy(array, start, result, 0, size);
+      return result;
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+}
diff --git a/guava/src/com/google/common/primitives/Ints.java b/guava/src/com/google/common/primitives/Ints.java
new file mode 100644
index 0000000..bc7acb8
--- /dev/null
+++ b/guava/src/com/google/common/primitives/Ints.java
@@ -0,0 +1,614 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.primitives;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkElementIndex;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkPositionIndexes;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+
+import java.io.Serializable;
+import java.util.AbstractList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.RandomAccess;
+
+import javax.annotation.CheckForNull;
+
+/**
+ * Static utility methods pertaining to {@code int} primitives, that are not
+ * already found in either {@link Integer} or {@link Arrays}.
+ *
+ * @author Kevin Bourrillion
+ * @since 1.0
+ */
+@GwtCompatible(emulated = true)
+public final class Ints {
+  private Ints() {}
+
+  /**
+   * The number of bytes required to represent a primitive {@code int}
+   * value.
+   */
+  public static final int BYTES = Integer.SIZE / Byte.SIZE;
+
+  /**
+   * The largest power of two that can be represented as an {@code int}.
+   *
+   * @since 10.0
+   */
+  public static final int MAX_POWER_OF_TWO = 1 << (Integer.SIZE - 2);
+
+  /**
+   * Returns a hash code for {@code value}; equal to the result of invoking
+   * {@code ((Integer) value).hashCode()}.
+   *
+   * @param value a primitive {@code int} value
+   * @return a hash code for the value
+   */
+  public static int hashCode(int value) {
+    return value;
+  }
+
+  /**
+   * Returns the {@code int} value that is equal to {@code value}, if possible.
+   *
+   * @param value any value in the range of the {@code int} type
+   * @return the {@code int} value that equals {@code value}
+   * @throws IllegalArgumentException if {@code value} is greater than {@link
+   *     Integer#MAX_VALUE} or less than {@link Integer#MIN_VALUE}
+   */
+  public static int checkedCast(long value) {
+    int result = (int) value;
+    checkArgument(result == value, "Out of range: %s", value);
+    return result;
+  }
+
+  /**
+   * Returns the {@code int} nearest in value to {@code value}.
+   *
+   * @param value any {@code long} value
+   * @return the same value cast to {@code int} if it is in the range of the
+   *     {@code int} type, {@link Integer#MAX_VALUE} if it is too large,
+   *     or {@link Integer#MIN_VALUE} if it is too small
+   */
+  public static int saturatedCast(long value) {
+    if (value > Integer.MAX_VALUE) {
+      return Integer.MAX_VALUE;
+    }
+    if (value < Integer.MIN_VALUE) {
+      return Integer.MIN_VALUE;
+    }
+    return (int) value;
+  }
+
+  /**
+   * Compares the two specified {@code int} values. The sign of the value
+   * returned is the same as that of {@code ((Integer) a).compareTo(b)}.
+   *
+   * @param a the first {@code int} to compare
+   * @param b the second {@code int} to compare
+   * @return a negative value if {@code a} is less than {@code b}; a positive
+   *     value if {@code a} is greater than {@code b}; or zero if they are equal
+   */
+  public static int compare(int a, int b) {
+    return (a < b) ? -1 : ((a > b) ? 1 : 0);
+  }
+
+  /**
+   * Returns {@code true} if {@code target} is present as an element anywhere in
+   * {@code array}.
+   *
+   * @param array an array of {@code int} values, possibly empty
+   * @param target a primitive {@code int} value
+   * @return {@code true} if {@code array[i] == target} for some value of {@code
+   *     i}
+   */
+  public static boolean contains(int[] array, int target) {
+    for (int value : array) {
+      if (value == target) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  /**
+   * Returns the index of the first appearance of the value {@code target} in
+   * {@code array}.
+   *
+   * @param array an array of {@code int} values, possibly empty
+   * @param target a primitive {@code int} value
+   * @return the least index {@code i} for which {@code array[i] == target}, or
+   *     {@code -1} if no such index exists.
+   */
+  public static int indexOf(int[] array, int target) {
+    return indexOf(array, target, 0, array.length);
+  }
+
+  // TODO(kevinb): consider making this public
+  private static int indexOf(
+      int[] array, int target, int start, int end) {
+    for (int i = start; i < end; i++) {
+      if (array[i] == target) {
+        return i;
+      }
+    }
+    return -1;
+  }
+
+  /**
+   * Returns the start position of the first occurrence of the specified {@code
+   * target} within {@code array}, or {@code -1} if there is no such occurrence.
+   *
+   * <p>More formally, returns the lowest index {@code i} such that {@code
+   * java.util.Arrays.copyOfRange(array, i, i + target.length)} contains exactly
+   * the same elements as {@code target}.
+   *
+   * @param array the array to search for the sequence {@code target}
+   * @param target the array to search for as a sub-sequence of {@code array}
+   */
+  public static int indexOf(int[] array, int[] target) {
+    checkNotNull(array, "array");
+    checkNotNull(target, "target");
+    if (target.length == 0) {
+      return 0;
+    }
+
+    outer:
+    for (int i = 0; i < array.length - target.length + 1; i++) {
+      for (int j = 0; j < target.length; j++) {
+        if (array[i + j] != target[j]) {
+          continue outer;
+        }
+      }
+      return i;
+    }
+    return -1;
+  }
+
+  /**
+   * Returns the index of the last appearance of the value {@code target} in
+   * {@code array}.
+   *
+   * @param array an array of {@code int} values, possibly empty
+   * @param target a primitive {@code int} value
+   * @return the greatest index {@code i} for which {@code array[i] == target},
+   *     or {@code -1} if no such index exists.
+   */
+  public static int lastIndexOf(int[] array, int target) {
+    return lastIndexOf(array, target, 0, array.length);
+  }
+
+  // TODO(kevinb): consider making this public
+  private static int lastIndexOf(
+      int[] array, int target, int start, int end) {
+    for (int i = end - 1; i >= start; i--) {
+      if (array[i] == target) {
+        return i;
+      }
+    }
+    return -1;
+  }
+
+  /**
+   * Returns the least value present in {@code array}.
+   *
+   * @param array a <i>nonempty</i> array of {@code int} values
+   * @return the value present in {@code array} that is less than or equal to
+   *     every other value in the array
+   * @throws IllegalArgumentException if {@code array} is empty
+   */
+  public static int min(int... array) {
+    checkArgument(array.length > 0);
+    int min = array[0];
+    for (int i = 1; i < array.length; i++) {
+      if (array[i] < min) {
+        min = array[i];
+      }
+    }
+    return min;
+  }
+
+  /**
+   * Returns the greatest value present in {@code array}.
+   *
+   * @param array a <i>nonempty</i> array of {@code int} values
+   * @return the value present in {@code array} that is greater than or equal to
+   *     every other value in the array
+   * @throws IllegalArgumentException if {@code array} is empty
+   */
+  public static int max(int... array) {
+    checkArgument(array.length > 0);
+    int max = array[0];
+    for (int i = 1; i < array.length; i++) {
+      if (array[i] > max) {
+        max = array[i];
+      }
+    }
+    return max;
+  }
+
+  /**
+   * Returns the values from each provided array combined into a single array.
+   * For example, {@code concat(new int[] {a, b}, new int[] {}, new
+   * int[] {c}} returns the array {@code {a, b, c}}.
+   *
+   * @param arrays zero or more {@code int} arrays
+   * @return a single array containing all the values from the source arrays, in
+   *     order
+   */
+  public static int[] concat(int[]... arrays) {
+    int length = 0;
+    for (int[] array : arrays) {
+      length += array.length;
+    }
+    int[] result = new int[length];
+    int pos = 0;
+    for (int[] array : arrays) {
+      System.arraycopy(array, 0, result, pos, array.length);
+      pos += array.length;
+    }
+    return result;
+  }
+
+  /**
+   * Returns a big-endian representation of {@code value} in a 4-element byte
+   * array; equivalent to {@code ByteBuffer.allocate(4).putInt(value).array()}.
+   * For example, the input value {@code 0x12131415} would yield the byte array
+   * {@code {0x12, 0x13, 0x14, 0x15}}.
+   *
+   * <p>If you need to convert and concatenate several values (possibly even of
+   * different types), use a shared {@link java.nio.ByteBuffer} instance, or use
+   * {@link com.google.common.io.ByteStreams#newDataOutput()} to get a growable
+   * buffer.
+   */
+  @GwtIncompatible("doesn't work")
+  public static byte[] toByteArray(int value) {
+    return new byte[] {
+        (byte) (value >> 24),
+        (byte) (value >> 16),
+        (byte) (value >> 8),
+        (byte) value};
+  }
+
+  /**
+   * Returns the {@code int} value whose big-endian representation is stored in
+   * the first 4 bytes of {@code bytes}; equivalent to {@code
+   * ByteBuffer.wrap(bytes).getInt()}. For example, the input byte array {@code
+   * {0x12, 0x13, 0x14, 0x15, 0x33}} would yield the {@code int} value {@code
+   * 0x12131415}.
+   *
+   * <p>Arguably, it's preferable to use {@link java.nio.ByteBuffer}; that
+   * library exposes much more flexibility at little cost in readability.
+   *
+   * @throws IllegalArgumentException if {@code bytes} has fewer than 4 elements
+   */
+  @GwtIncompatible("doesn't work")
+  public static int fromByteArray(byte[] bytes) {
+    checkArgument(bytes.length >= BYTES,
+        "array too small: %s < %s", bytes.length, BYTES);
+    return fromBytes(bytes[0], bytes[1], bytes[2], bytes[3]);
+  }
+
+  /**
+   * Returns the {@code int} value whose byte representation is the given 4
+   * bytes, in big-endian order; equivalent to {@code Ints.fromByteArray(new
+   * byte[] {b1, b2, b3, b4})}.
+   *
+   * @since 7.0
+   */
+  @GwtIncompatible("doesn't work")
+  public static int fromBytes(byte b1, byte b2, byte b3, byte b4) {
+    return b1 << 24 | (b2 & 0xFF) << 16 | (b3 & 0xFF) << 8 | (b4 & 0xFF);
+  }
+
+  /**
+   * Returns an array containing the same values as {@code array}, but
+   * guaranteed to be of a specified minimum length. If {@code array} already
+   * has a length of at least {@code minLength}, it is returned directly.
+   * Otherwise, a new array of size {@code minLength + padding} is returned,
+   * containing the values of {@code array}, and zeroes in the remaining places.
+   *
+   * @param array the source array
+   * @param minLength the minimum length the returned array must guarantee
+   * @param padding an extra amount to "grow" the array by if growth is
+   *     necessary
+   * @throws IllegalArgumentException if {@code minLength} or {@code padding} is
+   *     negative
+   * @return an array containing the values of {@code array}, with guaranteed
+   *     minimum length {@code minLength}
+   */
+  public static int[] ensureCapacity(
+      int[] array, int minLength, int padding) {
+    checkArgument(minLength >= 0, "Invalid minLength: %s", minLength);
+    checkArgument(padding >= 0, "Invalid padding: %s", padding);
+    return (array.length < minLength)
+        ? copyOf(array, minLength + padding)
+        : array;
+  }
+
+  // Arrays.copyOf() requires Java 6
+  private static int[] copyOf(int[] original, int length) {
+    int[] copy = new int[length];
+    System.arraycopy(original, 0, copy, 0, Math.min(original.length, length));
+    return copy;
+  }
+
+  /**
+   * Returns a string containing the supplied {@code int} values separated
+   * by {@code separator}. For example, {@code join("-", 1, 2, 3)} returns
+   * the string {@code "1-2-3"}.
+   *
+   * @param separator the text that should appear between consecutive values in
+   *     the resulting string (but not at the start or end)
+   * @param array an array of {@code int} values, possibly empty
+   */
+  public static String join(String separator, int... array) {
+    checkNotNull(separator);
+    if (array.length == 0) {
+      return "";
+    }
+
+    // For pre-sizing a builder, just get the right order of magnitude
+    StringBuilder builder = new StringBuilder(array.length * 5);
+    builder.append(array[0]);
+    for (int i = 1; i < array.length; i++) {
+      builder.append(separator).append(array[i]);
+    }
+    return builder.toString();
+  }
+
+  /**
+   * Returns a comparator that compares two {@code int} arrays
+   * lexicographically. That is, it compares, using {@link
+   * #compare(int, int)}), the first pair of values that follow any
+   * common prefix, or when one array is a prefix of the other, treats the
+   * shorter array as the lesser. For example, {@code [] < [1] < [1, 2] < [2]}.
+   *
+   * <p>The returned comparator is inconsistent with {@link
+   * Object#equals(Object)} (since arrays support only identity equality), but
+   * it is consistent with {@link Arrays#equals(int[], int[])}.
+   *
+   * @see <a href="http://en.wikipedia.org/wiki/Lexicographical_order">
+   *     Lexicographical order article at Wikipedia</a>
+   * @since 2.0
+   */
+  public static Comparator<int[]> lexicographicalComparator() {
+    return LexicographicalComparator.INSTANCE;
+  }
+
+  private enum LexicographicalComparator implements Comparator<int[]> {
+    INSTANCE;
+
+    @Override
+    public int compare(int[] left, int[] right) {
+      int minLength = Math.min(left.length, right.length);
+      for (int i = 0; i < minLength; i++) {
+        int result = Ints.compare(left[i], right[i]);
+        if (result != 0) {
+          return result;
+        }
+      }
+      return left.length - right.length;
+    }
+  }
+
+  /**
+   * Copies a collection of {@code Integer} instances into a new array of
+   * primitive {@code int} values.
+   *
+   * <p>Elements are copied from the argument collection as if by {@code
+   * collection.toArray()}.  Calling this method is as thread-safe as calling
+   * that method.
+   *
+   * @param collection a collection of {@code Integer} objects
+   * @return an array containing the same values as {@code collection}, in the
+   *     same order, converted to primitives
+   * @throws NullPointerException if {@code collection} or any of its elements
+   *     is null
+   */
+  public static int[] toArray(Collection<Integer> collection) {
+    if (collection instanceof IntArrayAsList) {
+      return ((IntArrayAsList) collection).toIntArray();
+    }
+
+    Object[] boxedArray = collection.toArray();
+    int len = boxedArray.length;
+    int[] array = new int[len];
+    for (int i = 0; i < len; i++) {
+      // checkNotNull for GWT (do not optimize)
+      array[i] = (Integer) checkNotNull(boxedArray[i]);
+    }
+    return array;
+  }
+
+  /**
+   * Returns a fixed-size list backed by the specified array, similar to {@link
+   * Arrays#asList(Object[])}. The list supports {@link List#set(int, Object)},
+   * but any attempt to set a value to {@code null} will result in a {@link
+   * NullPointerException}.
+   *
+   * <p>The returned list maintains the values, but not the identities, of
+   * {@code Integer} objects written to or read from it.  For example, whether
+   * {@code list.get(0) == list.get(0)} is true for the returned list is
+   * unspecified.
+   *
+   * @param backingArray the array to back the list
+   * @return a list view of the array
+   */
+  public static List<Integer> asList(int... backingArray) {
+    if (backingArray.length == 0) {
+      return Collections.emptyList();
+    }
+    return new IntArrayAsList(backingArray);
+  }
+
+  @GwtCompatible
+  private static class IntArrayAsList extends AbstractList<Integer>
+      implements RandomAccess, Serializable {
+    final int[] array;
+    final int start;
+    final int end;
+
+    IntArrayAsList(int[] array) {
+      this(array, 0, array.length);
+    }
+
+    IntArrayAsList(int[] array, int start, int end) {
+      this.array = array;
+      this.start = start;
+      this.end = end;
+    }
+
+    @Override public int size() {
+      return end - start;
+    }
+
+    @Override public boolean isEmpty() {
+      return false;
+    }
+
+    @Override public Integer get(int index) {
+      checkElementIndex(index, size());
+      return array[start + index];
+    }
+
+    @Override public boolean contains(Object target) {
+      // Overridden to prevent a ton of boxing
+      return (target instanceof Integer)
+          && Ints.indexOf(array, (Integer) target, start, end) != -1;
+    }
+
+    @Override public int indexOf(Object target) {
+      // Overridden to prevent a ton of boxing
+      if (target instanceof Integer) {
+        int i = Ints.indexOf(array, (Integer) target, start, end);
+        if (i >= 0) {
+          return i - start;
+        }
+      }
+      return -1;
+    }
+
+    @Override public int lastIndexOf(Object target) {
+      // Overridden to prevent a ton of boxing
+      if (target instanceof Integer) {
+        int i = Ints.lastIndexOf(array, (Integer) target, start, end);
+        if (i >= 0) {
+          return i - start;
+        }
+      }
+      return -1;
+    }
+
+    @Override public Integer set(int index, Integer element) {
+      checkElementIndex(index, size());
+      int oldValue = array[start + index];
+      array[start + index] = checkNotNull(element);  // checkNotNull for GWT (do not optimize)
+      return oldValue;
+    }
+
+    @Override public List<Integer> subList(int fromIndex, int toIndex) {
+      int size = size();
+      checkPositionIndexes(fromIndex, toIndex, size);
+      if (fromIndex == toIndex) {
+        return Collections.emptyList();
+      }
+      return new IntArrayAsList(array, start + fromIndex, start + toIndex);
+    }
+
+    @Override public boolean equals(Object object) {
+      if (object == this) {
+        return true;
+      }
+      if (object instanceof IntArrayAsList) {
+        IntArrayAsList that = (IntArrayAsList) object;
+        int size = size();
+        if (that.size() != size) {
+          return false;
+        }
+        for (int i = 0; i < size; i++) {
+          if (array[start + i] != that.array[that.start + i]) {
+            return false;
+          }
+        }
+        return true;
+      }
+      return super.equals(object);
+    }
+
+    @Override public int hashCode() {
+      int result = 1;
+      for (int i = start; i < end; i++) {
+        result = 31 * result + Ints.hashCode(array[i]);
+      }
+      return result;
+    }
+
+    @Override public String toString() {
+      StringBuilder builder = new StringBuilder(size() * 5);
+      builder.append('[').append(array[start]);
+      for (int i = start + 1; i < end; i++) {
+        builder.append(", ").append(array[i]);
+      }
+      return builder.append(']').toString();
+    }
+
+    int[] toIntArray() {
+      // Arrays.copyOfRange() requires Java 6
+      int size = size();
+      int[] result = new int[size];
+      System.arraycopy(array, start, result, 0, size);
+      return result;
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+
+  /**
+   * Parses the specified string as a signed decimal integer value. The ASCII
+   * character {@code '-'} (<code>'&#92;u002D'</code>) is recognized as the
+   * minus sign.
+   *
+   * <p>Unlike {@link Integer#parseInt(String)}, this method returns
+   * {@code null} instead of throwing an exception if parsing fails.
+   *
+   * <p>Note that strings prefixed with ASCII {@code '+'} are rejected, even
+   * under JDK 7, despite the change to {@link Integer#parseInt(String)} for
+   * that version.
+   *
+   * @param string the string representation of an integer value
+   * @return the integer value represented by {@code string}, or {@code null} if
+   *     {@code string} has a length of zero or cannot be parsed as an integer
+   *     value
+   * @since 11.0
+   */
+  @Beta
+  @CheckForNull
+  @GwtIncompatible("TODO")
+  public static Integer tryParse(String string) {
+    return AndroidInteger.tryParse(string, 10);
+  }
+}
diff --git a/guava/src/com/google/common/primitives/Longs.java b/guava/src/com/google/common/primitives/Longs.java
new file mode 100644
index 0000000..99c7033
--- /dev/null
+++ b/guava/src/com/google/common/primitives/Longs.java
@@ -0,0 +1,574 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.primitives;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkElementIndex;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkPositionIndexes;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+
+import java.io.Serializable;
+import java.util.AbstractList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.RandomAccess;
+
+/**
+ * Static utility methods pertaining to {@code long} primitives, that are not
+ * already found in either {@link Long} or {@link Arrays}.
+ *
+ * @author Kevin Bourrillion
+ * @since 1.0
+ */
+@GwtCompatible(emulated = true)
+public final class Longs {
+  private Longs() {}
+
+  /**
+   * The number of bytes required to represent a primitive {@code long}
+   * value.
+   */
+  public static final int BYTES = Long.SIZE / Byte.SIZE;
+
+  /**
+   * The largest power of two that can be represented as a {@code long}.
+   *
+   * @since 10.0
+   */
+  public static final long MAX_POWER_OF_TWO = 1L << (Long.SIZE - 2);
+
+  /**
+   * Returns a hash code for {@code value}; equal to the result of invoking
+   * {@code ((Long) value).hashCode()}.
+   *
+   * <p>This method always return the value specified by {@link
+   * Long#hashCode()} in java, which might be different from
+   * {@code ((Long) value).hashCode()} in GWT because {@link Long#hashCode()}
+   * in GWT does not obey the JRE contract.
+   *
+   * @param value a primitive {@code long} value
+   * @return a hash code for the value
+   */
+  public static int hashCode(long value) {
+    return (int) (value ^ (value >>> 32));
+  }
+
+  /**
+   * Compares the two specified {@code long} values. The sign of the value
+   * returned is the same as that of {@code ((Long) a).compareTo(b)}.
+   *
+   * @param a the first {@code long} to compare
+   * @param b the second {@code long} to compare
+   * @return a negative value if {@code a} is less than {@code b}; a positive
+   *     value if {@code a} is greater than {@code b}; or zero if they are equal
+   */
+  public static int compare(long a, long b) {
+    return (a < b) ? -1 : ((a > b) ? 1 : 0);
+  }
+
+  /**
+   * Returns {@code true} if {@code target} is present as an element anywhere in
+   * {@code array}.
+   *
+   * @param array an array of {@code long} values, possibly empty
+   * @param target a primitive {@code long} value
+   * @return {@code true} if {@code array[i] == target} for some value of {@code
+   *     i}
+   */
+  public static boolean contains(long[] array, long target) {
+    for (long value : array) {
+      if (value == target) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  /**
+   * Returns the index of the first appearance of the value {@code target} in
+   * {@code array}.
+   *
+   * @param array an array of {@code long} values, possibly empty
+   * @param target a primitive {@code long} value
+   * @return the least index {@code i} for which {@code array[i] == target}, or
+   *     {@code -1} if no such index exists.
+   */
+  public static int indexOf(long[] array, long target) {
+    return indexOf(array, target, 0, array.length);
+  }
+
+  // TODO(kevinb): consider making this public
+  private static int indexOf(
+      long[] array, long target, int start, int end) {
+    for (int i = start; i < end; i++) {
+      if (array[i] == target) {
+        return i;
+      }
+    }
+    return -1;
+  }
+
+  /**
+   * Returns the start position of the first occurrence of the specified {@code
+   * target} within {@code array}, or {@code -1} if there is no such occurrence.
+   *
+   * <p>More formally, returns the lowest index {@code i} such that {@code
+   * java.util.Arrays.copyOfRange(array, i, i + target.length)} contains exactly
+   * the same elements as {@code target}.
+   *
+   * @param array the array to search for the sequence {@code target}
+   * @param target the array to search for as a sub-sequence of {@code array}
+   */
+  public static int indexOf(long[] array, long[] target) {
+    checkNotNull(array, "array");
+    checkNotNull(target, "target");
+    if (target.length == 0) {
+      return 0;
+    }
+
+    outer:
+    for (int i = 0; i < array.length - target.length + 1; i++) {
+      for (int j = 0; j < target.length; j++) {
+        if (array[i + j] != target[j]) {
+          continue outer;
+        }
+      }
+      return i;
+    }
+    return -1;
+  }
+
+  /**
+   * Returns the index of the last appearance of the value {@code target} in
+   * {@code array}.
+   *
+   * @param array an array of {@code long} values, possibly empty
+   * @param target a primitive {@code long} value
+   * @return the greatest index {@code i} for which {@code array[i] == target},
+   *     or {@code -1} if no such index exists.
+   */
+  public static int lastIndexOf(long[] array, long target) {
+    return lastIndexOf(array, target, 0, array.length);
+  }
+
+  // TODO(kevinb): consider making this public
+  private static int lastIndexOf(
+      long[] array, long target, int start, int end) {
+    for (int i = end - 1; i >= start; i--) {
+      if (array[i] == target) {
+        return i;
+      }
+    }
+    return -1;
+  }
+
+  /**
+   * Returns the least value present in {@code array}.
+   *
+   * @param array a <i>nonempty</i> array of {@code long} values
+   * @return the value present in {@code array} that is less than or equal to
+   *     every other value in the array
+   * @throws IllegalArgumentException if {@code array} is empty
+   */
+  public static long min(long... array) {
+    checkArgument(array.length > 0);
+    long min = array[0];
+    for (int i = 1; i < array.length; i++) {
+      if (array[i] < min) {
+        min = array[i];
+      }
+    }
+    return min;
+  }
+
+  /**
+   * Returns the greatest value present in {@code array}.
+   *
+   * @param array a <i>nonempty</i> array of {@code long} values
+   * @return the value present in {@code array} that is greater than or equal to
+   *     every other value in the array
+   * @throws IllegalArgumentException if {@code array} is empty
+   */
+  public static long max(long... array) {
+    checkArgument(array.length > 0);
+    long max = array[0];
+    for (int i = 1; i < array.length; i++) {
+      if (array[i] > max) {
+        max = array[i];
+      }
+    }
+    return max;
+  }
+
+  /**
+   * Returns the values from each provided array combined into a single array.
+   * For example, {@code concat(new long[] {a, b}, new long[] {}, new
+   * long[] {c}} returns the array {@code {a, b, c}}.
+   *
+   * @param arrays zero or more {@code long} arrays
+   * @return a single array containing all the values from the source arrays, in
+   *     order
+   */
+  public static long[] concat(long[]... arrays) {
+    int length = 0;
+    for (long[] array : arrays) {
+      length += array.length;
+    }
+    long[] result = new long[length];
+    int pos = 0;
+    for (long[] array : arrays) {
+      System.arraycopy(array, 0, result, pos, array.length);
+      pos += array.length;
+    }
+    return result;
+  }
+
+  /**
+   * Returns a big-endian representation of {@code value} in an 8-element byte
+   * array; equivalent to {@code ByteBuffer.allocate(8).putLong(value).array()}.
+   * For example, the input value {@code 0x1213141516171819L} would yield the
+   * byte array {@code {0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19}}.
+   *
+   * <p>If you need to convert and concatenate several values (possibly even of
+   * different types), use a shared {@link java.nio.ByteBuffer} instance, or use
+   * {@link com.google.common.io.ByteStreams#newDataOutput()} to get a growable
+   * buffer.
+   */
+  @GwtIncompatible("doesn't work")
+  public static byte[] toByteArray(long value) {
+    return new byte[] {
+        (byte) (value >> 56),
+        (byte) (value >> 48),
+        (byte) (value >> 40),
+        (byte) (value >> 32),
+        (byte) (value >> 24),
+        (byte) (value >> 16),
+        (byte) (value >> 8),
+        (byte) value};
+  }
+
+  /**
+   * Returns the {@code long} value whose big-endian representation is
+   * stored in the first 8 bytes of {@code bytes}; equivalent to {@code
+   * ByteBuffer.wrap(bytes).getLong()}. For example, the input byte array
+   * {@code {0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19}} would yield the
+   * {@code long} value {@code 0x1213141516171819L}.
+   *
+   * <p>Arguably, it's preferable to use {@link java.nio.ByteBuffer}; that
+   * library exposes much more flexibility at little cost in readability.
+   *
+   * @throws IllegalArgumentException if {@code bytes} has fewer than 8
+   *     elements
+   */
+  @GwtIncompatible("doesn't work")
+  public static long fromByteArray(byte[] bytes) {
+    checkArgument(bytes.length >= BYTES,
+        "array too small: %s < %s", bytes.length, BYTES);
+    return fromBytes(bytes[0], bytes[1], bytes[2], bytes[3],
+        bytes[4], bytes[5], bytes[6], bytes[7]) ;
+  }
+
+  /**
+   * Returns the {@code long} value whose byte representation is the given 8
+   * bytes, in big-endian order; equivalent to {@code Longs.fromByteArray(new
+   * byte[] {b1, b2, b3, b4, b5, b6, b7, b8})}.
+   *
+   * @since 7.0
+   */
+  @GwtIncompatible("doesn't work")
+  public static long fromBytes(byte b1, byte b2, byte b3, byte b4,
+      byte b5, byte b6, byte b7, byte b8) {
+    return (b1 & 0xFFL) << 56
+        | (b2 & 0xFFL) << 48
+        | (b3 & 0xFFL) << 40
+        | (b4 & 0xFFL) << 32
+        | (b5 & 0xFFL) << 24
+        | (b6 & 0xFFL) << 16
+        | (b7 & 0xFFL) << 8
+        | (b8 & 0xFFL);
+  }
+
+  /**
+   * Returns an array containing the same values as {@code array}, but
+   * guaranteed to be of a specified minimum length. If {@code array} already
+   * has a length of at least {@code minLength}, it is returned directly.
+   * Otherwise, a new array of size {@code minLength + padding} is returned,
+   * containing the values of {@code array}, and zeroes in the remaining places.
+   *
+   * @param array the source array
+   * @param minLength the minimum length the returned array must guarantee
+   * @param padding an extra amount to "grow" the array by if growth is
+   *     necessary
+   * @throws IllegalArgumentException if {@code minLength} or {@code padding} is
+   *     negative
+   * @return an array containing the values of {@code array}, with guaranteed
+   *     minimum length {@code minLength}
+   */
+  public static long[] ensureCapacity(
+      long[] array, int minLength, int padding) {
+    checkArgument(minLength >= 0, "Invalid minLength: %s", minLength);
+    checkArgument(padding >= 0, "Invalid padding: %s", padding);
+    return (array.length < minLength)
+        ? copyOf(array, minLength + padding)
+        : array;
+  }
+
+  // Arrays.copyOf() requires Java 6
+  private static long[] copyOf(long[] original, int length) {
+    long[] copy = new long[length];
+    System.arraycopy(original, 0, copy, 0, Math.min(original.length, length));
+    return copy;
+  }
+
+  /**
+   * Returns a string containing the supplied {@code long} values separated
+   * by {@code separator}. For example, {@code join("-", 1L, 2L, 3L)} returns
+   * the string {@code "1-2-3"}.
+   *
+   * @param separator the text that should appear between consecutive values in
+   *     the resulting string (but not at the start or end)
+   * @param array an array of {@code long} values, possibly empty
+   */
+  public static String join(String separator, long... array) {
+    checkNotNull(separator);
+    if (array.length == 0) {
+      return "";
+    }
+
+    // For pre-sizing a builder, just get the right order of magnitude
+    StringBuilder builder = new StringBuilder(array.length * 10);
+    builder.append(array[0]);
+    for (int i = 1; i < array.length; i++) {
+      builder.append(separator).append(array[i]);
+    }
+    return builder.toString();
+  }
+
+  /**
+   * Returns a comparator that compares two {@code long} arrays
+   * lexicographically. That is, it compares, using {@link
+   * #compare(long, long)}), the first pair of values that follow any
+   * common prefix, or when one array is a prefix of the other, treats the
+   * shorter array as the lesser. For example,
+   * {@code [] < [1L] < [1L, 2L] < [2L]}.
+   *
+   * <p>The returned comparator is inconsistent with {@link
+   * Object#equals(Object)} (since arrays support only identity equality), but
+   * it is consistent with {@link Arrays#equals(long[], long[])}.
+   *
+   * @see <a href="http://en.wikipedia.org/wiki/Lexicographical_order">
+   *     Lexicographical order article at Wikipedia</a>
+   * @since 2.0
+   */
+  public static Comparator<long[]> lexicographicalComparator() {
+    return LexicographicalComparator.INSTANCE;
+  }
+
+  private enum LexicographicalComparator implements Comparator<long[]> {
+    INSTANCE;
+
+    @Override
+    public int compare(long[] left, long[] right) {
+      int minLength = Math.min(left.length, right.length);
+      for (int i = 0; i < minLength; i++) {
+        int result = Longs.compare(left[i], right[i]);
+        if (result != 0) {
+          return result;
+        }
+      }
+      return left.length - right.length;
+    }
+  }
+
+  /**
+   * Copies a collection of {@code Long} instances into a new array of
+   * primitive {@code long} values.
+   *
+   * <p>Elements are copied from the argument collection as if by {@code
+   * collection.toArray()}.  Calling this method is as thread-safe as calling
+   * that method.
+   *
+   * @param collection a collection of {@code Long} objects
+   * @return an array containing the same values as {@code collection}, in the
+   *     same order, converted to primitives
+   * @throws NullPointerException if {@code collection} or any of its elements
+   *     is null
+   */
+  public static long[] toArray(Collection<Long> collection) {
+    if (collection instanceof LongArrayAsList) {
+      return ((LongArrayAsList) collection).toLongArray();
+    }
+
+    Object[] boxedArray = collection.toArray();
+    int len = boxedArray.length;
+    long[] array = new long[len];
+    for (int i = 0; i < len; i++) {
+      // checkNotNull for GWT (do not optimize)
+      array[i] = (Long) checkNotNull(boxedArray[i]);
+    }
+    return array;
+  }
+
+  /**
+   * Returns a fixed-size list backed by the specified array, similar to {@link
+   * Arrays#asList(Object[])}. The list supports {@link List#set(int, Object)},
+   * but any attempt to set a value to {@code null} will result in a {@link
+   * NullPointerException}.
+   *
+   * <p>The returned list maintains the values, but not the identities, of
+   * {@code Long} objects written to or read from it.  For example, whether
+   * {@code list.get(0) == list.get(0)} is true for the returned list is
+   * unspecified.
+   *
+   * @param backingArray the array to back the list
+   * @return a list view of the array
+   */
+  public static List<Long> asList(long... backingArray) {
+    if (backingArray.length == 0) {
+      return Collections.emptyList();
+    }
+    return new LongArrayAsList(backingArray);
+  }
+
+  @GwtCompatible
+  private static class LongArrayAsList extends AbstractList<Long>
+      implements RandomAccess, Serializable {
+    final long[] array;
+    final int start;
+    final int end;
+
+    LongArrayAsList(long[] array) {
+      this(array, 0, array.length);
+    }
+
+    LongArrayAsList(long[] array, int start, int end) {
+      this.array = array;
+      this.start = start;
+      this.end = end;
+    }
+
+    @Override public int size() {
+      return end - start;
+    }
+
+    @Override public boolean isEmpty() {
+      return false;
+    }
+
+    @Override public Long get(int index) {
+      checkElementIndex(index, size());
+      return array[start + index];
+    }
+
+    @Override public boolean contains(Object target) {
+      // Overridden to prevent a ton of boxing
+      return (target instanceof Long)
+          && Longs.indexOf(array, (Long) target, start, end) != -1;
+    }
+
+    @Override public int indexOf(Object target) {
+      // Overridden to prevent a ton of boxing
+      if (target instanceof Long) {
+        int i = Longs.indexOf(array, (Long) target, start, end);
+        if (i >= 0) {
+          return i - start;
+        }
+      }
+      return -1;
+    }
+
+    @Override public int lastIndexOf(Object target) {
+      // Overridden to prevent a ton of boxing
+      if (target instanceof Long) {
+        int i = Longs.lastIndexOf(array, (Long) target, start, end);
+        if (i >= 0) {
+          return i - start;
+        }
+      }
+      return -1;
+    }
+
+    @Override public Long set(int index, Long element) {
+      checkElementIndex(index, size());
+      long oldValue = array[start + index];
+      array[start + index] = checkNotNull(element);  // checkNotNull for GWT (do not optimize)
+      return oldValue;
+    }
+
+    @Override public List<Long> subList(int fromIndex, int toIndex) {
+      int size = size();
+      checkPositionIndexes(fromIndex, toIndex, size);
+      if (fromIndex == toIndex) {
+        return Collections.emptyList();
+      }
+      return new LongArrayAsList(array, start + fromIndex, start + toIndex);
+    }
+
+    @Override public boolean equals(Object object) {
+      if (object == this) {
+        return true;
+      }
+      if (object instanceof LongArrayAsList) {
+        LongArrayAsList that = (LongArrayAsList) object;
+        int size = size();
+        if (that.size() != size) {
+          return false;
+        }
+        for (int i = 0; i < size; i++) {
+          if (array[start + i] != that.array[that.start + i]) {
+            return false;
+          }
+        }
+        return true;
+      }
+      return super.equals(object);
+    }
+
+    @Override public int hashCode() {
+      int result = 1;
+      for (int i = start; i < end; i++) {
+        result = 31 * result + Longs.hashCode(array[i]);
+      }
+      return result;
+    }
+
+    @Override public String toString() {
+      StringBuilder builder = new StringBuilder(size() * 10);
+      builder.append('[').append(array[start]);
+      for (int i = start + 1; i < end; i++) {
+        builder.append(", ").append(array[i]);
+      }
+      return builder.append(']').toString();
+    }
+
+    long[] toLongArray() {
+      // Arrays.copyOfRange() requires Java 6
+      int size = size();
+      long[] result = new long[size];
+      System.arraycopy(array, start, result, 0, size);
+      return result;
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+}
diff --git a/guava/src/com/google/common/primitives/Primitives.java b/guava/src/com/google/common/primitives/Primitives.java
new file mode 100644
index 0000000..08c6f31
--- /dev/null
+++ b/guava/src/com/google/common/primitives/Primitives.java
@@ -0,0 +1,134 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.primitives;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Contains static utility methods pertaining to primitive types and their
+ * corresponding wrapper types.
+ *
+ * @author Kevin Bourrillion
+ * @since 1.0
+ */
+public final class Primitives {
+  private Primitives() {}
+
+  /** A map from primitive types to their corresponding wrapper types. */
+  private static final Map<Class<?>, Class<?>> PRIMITIVE_TO_WRAPPER_TYPE;
+
+  /** A map from wrapper types to their corresponding primitive types. */
+  private static final Map<Class<?>, Class<?>> WRAPPER_TO_PRIMITIVE_TYPE;
+
+  // Sad that we can't use a BiMap. :(
+  
+  static {
+    Map<Class<?>, Class<?>> primToWrap = new HashMap<Class<?>, Class<?>>(16);
+    Map<Class<?>, Class<?>> wrapToPrim = new HashMap<Class<?>, Class<?>>(16);
+
+    add(primToWrap, wrapToPrim, boolean.class, Boolean.class);
+    add(primToWrap, wrapToPrim, byte.class, Byte.class);
+    add(primToWrap, wrapToPrim, char.class, Character.class);
+    add(primToWrap, wrapToPrim, double.class, Double.class);
+    add(primToWrap, wrapToPrim, float.class, Float.class);
+    add(primToWrap, wrapToPrim, int.class, Integer.class);
+    add(primToWrap, wrapToPrim, long.class, Long.class);
+    add(primToWrap, wrapToPrim, short.class, Short.class);
+    add(primToWrap, wrapToPrim, void.class, Void.class);
+
+    PRIMITIVE_TO_WRAPPER_TYPE = Collections.unmodifiableMap(primToWrap);
+    WRAPPER_TO_PRIMITIVE_TYPE = Collections.unmodifiableMap(wrapToPrim);
+  }
+
+  private static void add(Map<Class<?>, Class<?>> forward,
+      Map<Class<?>, Class<?>> backward, Class<?> key, Class<?> value) {
+    forward.put(key, value);
+    backward.put(value, key);
+  }
+
+  /**
+   * Returns an immutable set of all nine primitive types (including {@code
+   * void}). Note that a simpler way to test whether a {@code Class} instance
+   * is a member of this set is to call {@link Class#isPrimitive}.
+   *
+   * @since 3.0
+   */
+  public static Set<Class<?>> allPrimitiveTypes() {
+    return PRIMITIVE_TO_WRAPPER_TYPE.keySet();
+  }
+
+  /**
+   * Returns an immutable set of all nine primitive-wrapper types (including
+   * {@link Void}).
+   *
+   * @since 3.0
+   */
+  public static Set<Class<?>> allWrapperTypes() {
+    return WRAPPER_TO_PRIMITIVE_TYPE.keySet();
+  }
+
+  /**
+   * Returns {@code true} if {@code type} is one of the nine
+   * primitive-wrapper types, such as {@link Integer}.
+   *
+   * @see Class#isPrimitive
+   */
+  public static boolean isWrapperType(Class<?> type) {
+    return WRAPPER_TO_PRIMITIVE_TYPE.containsKey(checkNotNull(type));
+  }
+
+  /**
+   * Returns the corresponding wrapper type of {@code type} if it is a primitive
+   * type; otherwise returns {@code type} itself. Idempotent.
+   * <pre>
+   *     wrap(int.class) == Integer.class
+   *     wrap(Integer.class) == Integer.class
+   *     wrap(String.class) == String.class
+   * </pre>
+   */
+  public static <T> Class<T> wrap(Class<T> type) {
+    checkNotNull(type);
+
+    // cast is safe: long.class and Long.class are both of type Class<Long>
+    @SuppressWarnings("unchecked")
+    Class<T> wrapped = (Class<T>) PRIMITIVE_TO_WRAPPER_TYPE.get(type);
+    return (wrapped == null) ? type : wrapped;
+  }
+
+  /**
+   * Returns the corresponding primitive type of {@code type} if it is a
+   * wrapper type; otherwise returns {@code type} itself. Idempotent.
+   * <pre>
+   *     unwrap(Integer.class) == int.class
+   *     unwrap(int.class) == int.class
+   *     unwrap(String.class) == String.class
+   * </pre>
+   */
+  public static <T> Class<T> unwrap(Class<T> type) {
+    checkNotNull(type);
+
+    // cast is safe: long.class and Long.class are both of type Class<Long>
+    @SuppressWarnings("unchecked")
+    Class<T> unwrapped = (Class<T>) WRAPPER_TO_PRIMITIVE_TYPE.get(type);
+    return (unwrapped == null) ? type : unwrapped;
+  }
+}
diff --git a/guava/src/com/google/common/primitives/Shorts.java b/guava/src/com/google/common/primitives/Shorts.java
new file mode 100644
index 0000000..d5859b3
--- /dev/null
+++ b/guava/src/com/google/common/primitives/Shorts.java
@@ -0,0 +1,587 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.primitives;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkElementIndex;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkPositionIndexes;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+
+import java.io.Serializable;
+import java.util.AbstractList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.RandomAccess;
+
+/**
+ * Static utility methods pertaining to {@code short} primitives, that are not
+ * already found in either {@link Short} or {@link Arrays}.
+ *
+ * @author Kevin Bourrillion
+ * @since 1.0
+ */
+@GwtCompatible(emulated = true)
+public final class Shorts {
+  private Shorts() {}
+
+  /**
+   * The number of bytes required to represent a primitive {@code short}
+   * value.
+   */
+  public static final int BYTES = Short.SIZE / Byte.SIZE;
+
+  /**
+   * The largest power of two that can be represented as a {@code short}.
+   *
+   * @since 10.0
+   */
+  public static final short MAX_POWER_OF_TWO = 1 << (Short.SIZE - 2);
+
+  /**
+   * Returns a hash code for {@code value}; equal to the result of invoking
+   * {@code ((Short) value).hashCode()}.
+   *
+   * @param value a primitive {@code short} value
+   * @return a hash code for the value
+   */
+  public static int hashCode(short value) {
+    return value;
+  }
+
+  /**
+   * Returns the {@code short} value that is equal to {@code value}, if
+   * possible.
+   *
+   * @param value any value in the range of the {@code short} type
+   * @return the {@code short} value that equals {@code value}
+   * @throws IllegalArgumentException if {@code value} is greater than {@link
+   *     Short#MAX_VALUE} or less than {@link Short#MIN_VALUE}
+   */
+  public static short checkedCast(long value) {
+    short result = (short) value;
+    checkArgument(result == value, "Out of range: %s", value);
+    return result;
+  }
+
+  /**
+   * Returns the {@code short} nearest in value to {@code value}.
+   *
+   * @param value any {@code long} value
+   * @return the same value cast to {@code short} if it is in the range of the
+   *     {@code short} type, {@link Short#MAX_VALUE} if it is too large,
+   *     or {@link Short#MIN_VALUE} if it is too small
+   */
+  public static short saturatedCast(long value) {
+    if (value > Short.MAX_VALUE) {
+      return Short.MAX_VALUE;
+    }
+    if (value < Short.MIN_VALUE) {
+      return Short.MIN_VALUE;
+    }
+    return (short) value;
+  }
+
+  /**
+   * Compares the two specified {@code short} values. The sign of the value
+   * returned is the same as that of {@code ((Short) a).compareTo(b)}.
+   *
+   * @param a the first {@code short} to compare
+   * @param b the second {@code short} to compare
+   * @return a negative value if {@code a} is less than {@code b}; a positive
+   *     value if {@code a} is greater than {@code b}; or zero if they are equal
+   */
+  public static int compare(short a, short b) {
+    return a - b; // safe due to restricted range
+  }
+
+  /**
+   * Returns {@code true} if {@code target} is present as an element anywhere in
+   * {@code array}.
+   *
+   * @param array an array of {@code short} values, possibly empty
+   * @param target a primitive {@code short} value
+   * @return {@code true} if {@code array[i] == target} for some value of {@code
+   *     i}
+   */
+  public static boolean contains(short[] array, short target) {
+    for (short value : array) {
+      if (value == target) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  /**
+   * Returns the index of the first appearance of the value {@code target} in
+   * {@code array}.
+   *
+   * @param array an array of {@code short} values, possibly empty
+   * @param target a primitive {@code short} value
+   * @return the least index {@code i} for which {@code array[i] == target}, or
+   *     {@code -1} if no such index exists.
+   */
+  public static int indexOf(short[] array, short target) {
+    return indexOf(array, target, 0, array.length);
+  }
+
+  // TODO(kevinb): consider making this public
+  private static int indexOf(
+      short[] array, short target, int start, int end) {
+    for (int i = start; i < end; i++) {
+      if (array[i] == target) {
+        return i;
+      }
+    }
+    return -1;
+  }
+
+  /**
+   * Returns the start position of the first occurrence of the specified {@code
+   * target} within {@code array}, or {@code -1} if there is no such occurrence.
+   *
+   * <p>More formally, returns the lowest index {@code i} such that {@code
+   * java.util.Arrays.copyOfRange(array, i, i + target.length)} contains exactly
+   * the same elements as {@code target}.
+   *
+   * @param array the array to search for the sequence {@code target}
+   * @param target the array to search for as a sub-sequence of {@code array}
+   */
+  public static int indexOf(short[] array, short[] target) {
+    checkNotNull(array, "array");
+    checkNotNull(target, "target");
+    if (target.length == 0) {
+      return 0;
+    }
+
+    outer:
+    for (int i = 0; i < array.length - target.length + 1; i++) {
+      for (int j = 0; j < target.length; j++) {
+        if (array[i + j] != target[j]) {
+          continue outer;
+        }
+      }
+      return i;
+    }
+    return -1;
+  }
+
+  /**
+   * Returns the index of the last appearance of the value {@code target} in
+   * {@code array}.
+   *
+   * @param array an array of {@code short} values, possibly empty
+   * @param target a primitive {@code short} value
+   * @return the greatest index {@code i} for which {@code array[i] == target},
+   *     or {@code -1} if no such index exists.
+   */
+  public static int lastIndexOf(short[] array, short target) {
+    return lastIndexOf(array, target, 0, array.length);
+  }
+
+  // TODO(kevinb): consider making this public
+  private static int lastIndexOf(
+      short[] array, short target, int start, int end) {
+    for (int i = end - 1; i >= start; i--) {
+      if (array[i] == target) {
+        return i;
+      }
+    }
+    return -1;
+  }
+
+  /**
+   * Returns the least value present in {@code array}.
+   *
+   * @param array a <i>nonempty</i> array of {@code short} values
+   * @return the value present in {@code array} that is less than or equal to
+   *     every other value in the array
+   * @throws IllegalArgumentException if {@code array} is empty
+   */
+  public static short min(short... array) {
+    checkArgument(array.length > 0);
+    short min = array[0];
+    for (int i = 1; i < array.length; i++) {
+      if (array[i] < min) {
+        min = array[i];
+      }
+    }
+    return min;
+  }
+
+  /**
+   * Returns the greatest value present in {@code array}.
+   *
+   * @param array a <i>nonempty</i> array of {@code short} values
+   * @return the value present in {@code array} that is greater than or equal to
+   *     every other value in the array
+   * @throws IllegalArgumentException if {@code array} is empty
+   */
+  public static short max(short... array) {
+    checkArgument(array.length > 0);
+    short max = array[0];
+    for (int i = 1; i < array.length; i++) {
+      if (array[i] > max) {
+        max = array[i];
+      }
+    }
+    return max;
+  }
+
+  /**
+   * Returns the values from each provided array combined into a single array.
+   * For example, {@code concat(new short[] {a, b}, new short[] {}, new
+   * short[] {c}} returns the array {@code {a, b, c}}.
+   *
+   * @param arrays zero or more {@code short} arrays
+   * @return a single array containing all the values from the source arrays, in
+   *     order
+   */
+  public static short[] concat(short[]... arrays) {
+    int length = 0;
+    for (short[] array : arrays) {
+      length += array.length;
+    }
+    short[] result = new short[length];
+    int pos = 0;
+    for (short[] array : arrays) {
+      System.arraycopy(array, 0, result, pos, array.length);
+      pos += array.length;
+    }
+    return result;
+  }
+
+  /**
+   * Returns a big-endian representation of {@code value} in a 2-element byte
+   * array; equivalent to {@code
+   * ByteBuffer.allocate(2).putShort(value).array()}.  For example, the input
+   * value {@code (short) 0x1234} would yield the byte array {@code {0x12,
+   * 0x34}}.
+   *
+   * <p>If you need to convert and concatenate several values (possibly even of
+   * different types), use a shared {@link java.nio.ByteBuffer} instance, or use
+   * {@link com.google.common.io.ByteStreams#newDataOutput()} to get a growable
+   * buffer.
+   */
+  @GwtIncompatible("doesn't work")
+  public static byte[] toByteArray(short value) {
+    return new byte[] {
+        (byte) (value >> 8),
+        (byte) value};
+  }
+
+  /**
+   * Returns the {@code short} value whose big-endian representation is
+   * stored in the first 2 bytes of {@code bytes}; equivalent to {@code
+   * ByteBuffer.wrap(bytes).getShort()}. For example, the input byte array
+   * {@code {0x54, 0x32}} would yield the {@code short} value {@code 0x5432}.
+   *
+   * <p>Arguably, it's preferable to use {@link java.nio.ByteBuffer}; that
+   * library exposes much more flexibility at little cost in readability.
+   *
+   * @throws IllegalArgumentException if {@code bytes} has fewer than 2
+   *     elements
+   */
+  @GwtIncompatible("doesn't work")
+  public static short fromByteArray(byte[] bytes) {
+    checkArgument(bytes.length >= BYTES,
+        "array too small: %s < %s", bytes.length, BYTES);
+    return fromBytes(bytes[0], bytes[1]);
+  }
+
+  /**
+   * Returns the {@code short} value whose byte representation is the given 2
+   * bytes, in big-endian order; equivalent to {@code Shorts.fromByteArray(new
+   * byte[] {b1, b2})}.
+   *
+   * @since 7.0
+   */
+  @GwtIncompatible("doesn't work")
+  public static short fromBytes(byte b1, byte b2) {
+    return (short) ((b1 << 8) | (b2 & 0xFF));
+  }
+
+  /**
+   * Returns an array containing the same values as {@code array}, but
+   * guaranteed to be of a specified minimum length. If {@code array} already
+   * has a length of at least {@code minLength}, it is returned directly.
+   * Otherwise, a new array of size {@code minLength + padding} is returned,
+   * containing the values of {@code array}, and zeroes in the remaining places.
+   *
+   * @param array the source array
+   * @param minLength the minimum length the returned array must guarantee
+   * @param padding an extra amount to "grow" the array by if growth is
+   *     necessary
+   * @throws IllegalArgumentException if {@code minLength} or {@code padding} is
+   *     negative
+   * @return an array containing the values of {@code array}, with guaranteed
+   *     minimum length {@code minLength}
+   */
+  public static short[] ensureCapacity(
+      short[] array, int minLength, int padding) {
+    checkArgument(minLength >= 0, "Invalid minLength: %s", minLength);
+    checkArgument(padding >= 0, "Invalid padding: %s", padding);
+    return (array.length < minLength)
+        ? copyOf(array, minLength + padding)
+        : array;
+  }
+
+  // Arrays.copyOf() requires Java 6
+  private static short[] copyOf(short[] original, int length) {
+    short[] copy = new short[length];
+    System.arraycopy(original, 0, copy, 0, Math.min(original.length, length));
+    return copy;
+  }
+
+  /**
+   * Returns a string containing the supplied {@code short} values separated
+   * by {@code separator}. For example, {@code join("-", (short) 1, (short) 2,
+   * (short) 3)} returns the string {@code "1-2-3"}.
+   *
+   * @param separator the text that should appear between consecutive values in
+   *     the resulting string (but not at the start or end)
+   * @param array an array of {@code short} values, possibly empty
+   */
+  public static String join(String separator, short... array) {
+    checkNotNull(separator);
+    if (array.length == 0) {
+      return "";
+    }
+
+    // For pre-sizing a builder, just get the right order of magnitude
+    StringBuilder builder = new StringBuilder(array.length * 6);
+    builder.append(array[0]);
+    for (int i = 1; i < array.length; i++) {
+      builder.append(separator).append(array[i]);
+    }
+    return builder.toString();
+  }
+
+  /**
+   * Returns a comparator that compares two {@code short} arrays
+   * lexicographically. That is, it compares, using {@link
+   * #compare(short, short)}), the first pair of values that follow any
+   * common prefix, or when one array is a prefix of the other, treats the
+   * shorter array as the lesser. For example, {@code [] < [(short) 1] <
+   * [(short) 1, (short) 2] < [(short) 2]}.
+   *
+   * <p>The returned comparator is inconsistent with {@link
+   * Object#equals(Object)} (since arrays support only identity equality), but
+   * it is consistent with {@link Arrays#equals(short[], short[])}.
+   *
+   * @see <a href="http://en.wikipedia.org/wiki/Lexicographical_order">
+   *     Lexicographical order article at Wikipedia</a>
+   * @since 2.0
+   */
+  public static Comparator<short[]> lexicographicalComparator() {
+    return LexicographicalComparator.INSTANCE;
+  }
+
+  private enum LexicographicalComparator implements Comparator<short[]> {
+    INSTANCE;
+
+    @Override
+    public int compare(short[] left, short[] right) {
+      int minLength = Math.min(left.length, right.length);
+      for (int i = 0; i < minLength; i++) {
+        int result = Shorts.compare(left[i], right[i]);
+        if (result != 0) {
+          return result;
+        }
+      }
+      return left.length - right.length;
+    }
+  }
+
+  /**
+   * Copies a collection of {@code Short} instances into a new array of
+   * primitive {@code short} values.
+   *
+   * <p>Elements are copied from the argument collection as if by {@code
+   * collection.toArray()}.  Calling this method is as thread-safe as calling
+   * that method.
+   *
+   * @param collection a collection of {@code Short} objects
+   * @return an array containing the same values as {@code collection}, in the
+   *     same order, converted to primitives
+   * @throws NullPointerException if {@code collection} or any of its elements
+   *     is null
+   */
+  public static short[] toArray(Collection<Short> collection) {
+    if (collection instanceof ShortArrayAsList) {
+      return ((ShortArrayAsList) collection).toShortArray();
+    }
+
+    Object[] boxedArray = collection.toArray();
+    int len = boxedArray.length;
+    short[] array = new short[len];
+    for (int i = 0; i < len; i++) {
+      // checkNotNull for GWT (do not optimize)
+      array[i] = (Short) checkNotNull(boxedArray[i]);
+    }
+    return array;
+  }
+
+  /**
+   * Returns a fixed-size list backed by the specified array, similar to {@link
+   * Arrays#asList(Object[])}. The list supports {@link List#set(int, Object)},
+   * but any attempt to set a value to {@code null} will result in a {@link
+   * NullPointerException}.
+   *
+   * <p>The returned list maintains the values, but not the identities, of
+   * {@code Short} objects written to or read from it.  For example, whether
+   * {@code list.get(0) == list.get(0)} is true for the returned list is
+   * unspecified.
+   *
+   * @param backingArray the array to back the list
+   * @return a list view of the array
+   */
+  public static List<Short> asList(short... backingArray) {
+    if (backingArray.length == 0) {
+      return Collections.emptyList();
+    }
+    return new ShortArrayAsList(backingArray);
+  }
+
+  @GwtCompatible
+  private static class ShortArrayAsList extends AbstractList<Short>
+      implements RandomAccess, Serializable {
+    final short[] array;
+    final int start;
+    final int end;
+
+    ShortArrayAsList(short[] array) {
+      this(array, 0, array.length);
+    }
+
+    ShortArrayAsList(short[] array, int start, int end) {
+      this.array = array;
+      this.start = start;
+      this.end = end;
+    }
+
+    @Override public int size() {
+      return end - start;
+    }
+
+    @Override public boolean isEmpty() {
+      return false;
+    }
+
+    @Override public Short get(int index) {
+      checkElementIndex(index, size());
+      return array[start + index];
+    }
+
+    @Override public boolean contains(Object target) {
+      // Overridden to prevent a ton of boxing
+      return (target instanceof Short)
+          && Shorts.indexOf(array, (Short) target, start, end) != -1;
+    }
+
+    @Override public int indexOf(Object target) {
+      // Overridden to prevent a ton of boxing
+      if (target instanceof Short) {
+        int i = Shorts.indexOf(array, (Short) target, start, end);
+        if (i >= 0) {
+          return i - start;
+        }
+      }
+      return -1;
+    }
+
+    @Override public int lastIndexOf(Object target) {
+      // Overridden to prevent a ton of boxing
+      if (target instanceof Short) {
+        int i = Shorts.lastIndexOf(array, (Short) target, start, end);
+        if (i >= 0) {
+          return i - start;
+        }
+      }
+      return -1;
+    }
+
+    @Override public Short set(int index, Short element) {
+      checkElementIndex(index, size());
+      short oldValue = array[start + index];
+      array[start + index] = checkNotNull(element);  // checkNotNull for GWT (do not optimize)
+      return oldValue;
+    }
+
+    @Override public List<Short> subList(int fromIndex, int toIndex) {
+      int size = size();
+      checkPositionIndexes(fromIndex, toIndex, size);
+      if (fromIndex == toIndex) {
+        return Collections.emptyList();
+      }
+      return new ShortArrayAsList(array, start + fromIndex, start + toIndex);
+    }
+
+    @Override public boolean equals(Object object) {
+      if (object == this) {
+        return true;
+      }
+      if (object instanceof ShortArrayAsList) {
+        ShortArrayAsList that = (ShortArrayAsList) object;
+        int size = size();
+        if (that.size() != size) {
+          return false;
+        }
+        for (int i = 0; i < size; i++) {
+          if (array[start + i] != that.array[that.start + i]) {
+            return false;
+          }
+        }
+        return true;
+      }
+      return super.equals(object);
+    }
+
+    @Override public int hashCode() {
+      int result = 1;
+      for (int i = start; i < end; i++) {
+        result = 31 * result + Shorts.hashCode(array[i]);
+      }
+      return result;
+    }
+
+    @Override public String toString() {
+      StringBuilder builder = new StringBuilder(size() * 6);
+      builder.append('[').append(array[start]);
+      for (int i = start + 1; i < end; i++) {
+        builder.append(", ").append(array[i]);
+      }
+      return builder.append(']').toString();
+    }
+
+    short[] toShortArray() {
+      // Arrays.copyOfRange() requires Java 6
+      int size = size();
+      short[] result = new short[size];
+      System.arraycopy(array, start, result, 0, size);
+      return result;
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+}
diff --git a/guava/src/com/google/common/primitives/SignedBytes.java b/guava/src/com/google/common/primitives/SignedBytes.java
new file mode 100644
index 0000000..00a36d8
--- /dev/null
+++ b/guava/src/com/google/common/primitives/SignedBytes.java
@@ -0,0 +1,190 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.primitives;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.GwtCompatible;
+
+import java.util.Comparator;
+
+/**
+ * Static utility methods pertaining to {@code byte} primitives that
+ * interpret values as signed. The corresponding methods that treat the values
+ * as unsigned are found in {@link UnsignedBytes}, and the methods for which
+ * signedness is not an issue are in {@link Bytes}.
+ *
+ * @author Kevin Bourrillion
+ * @since 1.0
+ */
+// TODO(kevinb): how to prevent warning on UnsignedBytes when building GWT
+// javadoc?
+@GwtCompatible
+public final class SignedBytes {
+  private SignedBytes() {}
+
+  /**
+   * The largest power of two that can be represented as a signed {@code byte}. 
+   *
+   * @since 10.0
+   */
+  public static final byte MAX_POWER_OF_TWO = 1 << 6;
+  
+  /**
+   * Returns the {@code byte} value that is equal to {@code value}, if possible.
+   *
+   * @param value any value in the range of the {@code byte} type
+   * @return the {@code byte} value that equals {@code value}
+   * @throws IllegalArgumentException if {@code value} is greater than {@link
+   *     Byte#MAX_VALUE} or less than {@link Byte#MIN_VALUE}
+   */
+  public static byte checkedCast(long value) {
+    byte result = (byte) value;
+    checkArgument(result == value, "Out of range: %s", value);
+    return result;
+  }
+
+  /**
+   * Returns the {@code byte} nearest in value to {@code value}.
+   *
+   * @param value any {@code long} value
+   * @return the same value cast to {@code byte} if it is in the range of the
+   *     {@code byte} type, {@link Byte#MAX_VALUE} if it is too large,
+   *     or {@link Byte#MIN_VALUE} if it is too small
+   */
+  public static byte saturatedCast(long value) {
+    if (value > Byte.MAX_VALUE) {
+      return Byte.MAX_VALUE;
+    }
+    if (value < Byte.MIN_VALUE) {
+      return Byte.MIN_VALUE;
+    }
+    return (byte) value;
+  }
+
+  /**
+   * Compares the two specified {@code byte} values. The sign of the value
+   * returned is the same as that of {@code ((Byte) a).compareTo(b)}.
+   *
+   * @param a the first {@code byte} to compare
+   * @param b the second {@code byte} to compare
+   * @return a negative value if {@code a} is less than {@code b}; a positive
+   *     value if {@code a} is greater than {@code b}; or zero if they are equal
+   */
+  public static int compare(byte a, byte b) {
+    return a - b; // safe due to restricted range
+  }
+
+  /**
+   * Returns the least value present in {@code array}.
+   *
+   * @param array a <i>nonempty</i> array of {@code byte} values
+   * @return the value present in {@code array} that is less than or equal to
+   *     every other value in the array
+   * @throws IllegalArgumentException if {@code array} is empty
+   */
+  public static byte min(byte... array) {
+    checkArgument(array.length > 0);
+    byte min = array[0];
+    for (int i = 1; i < array.length; i++) {
+      if (array[i] < min) {
+        min = array[i];
+      }
+    }
+    return min;
+  }
+
+  /**
+   * Returns the greatest value present in {@code array}.
+   *
+   * @param array a <i>nonempty</i> array of {@code byte} values
+   * @return the value present in {@code array} that is greater than or equal to
+   *     every other value in the array
+   * @throws IllegalArgumentException if {@code array} is empty
+   */
+  public static byte max(byte... array) {
+    checkArgument(array.length > 0);
+    byte max = array[0];
+    for (int i = 1; i < array.length; i++) {
+      if (array[i] > max) {
+        max = array[i];
+      }
+    }
+    return max;
+  }
+
+  /**
+   * Returns a string containing the supplied {@code byte} values separated
+   * by {@code separator}. For example, {@code join(":", 0x01, 0x02, -0x01)}
+   * returns the string {@code "1:2:-1"}.
+   *
+   * @param separator the text that should appear between consecutive values in
+   *     the resulting string (but not at the start or end)
+   * @param array an array of {@code byte} values, possibly empty
+   */
+  public static String join(String separator, byte... array) {
+    checkNotNull(separator);
+    if (array.length == 0) {
+      return "";
+    }
+
+    // For pre-sizing a builder, just get the right order of magnitude
+    StringBuilder builder = new StringBuilder(array.length * 5);
+    builder.append(array[0]);
+    for (int i = 1; i < array.length; i++) {
+      builder.append(separator).append(array[i]);
+    }
+    return builder.toString();
+  }
+
+  /**
+   * Returns a comparator that compares two {@code byte} arrays
+   * lexicographically. That is, it compares, using {@link
+   * #compare(byte, byte)}), the first pair of values that follow any common
+   * prefix, or when one array is a prefix of the other, treats the shorter
+   * array as the lesser. For example, {@code [] < [0x01] < [0x01, 0x80] <
+   * [0x01, 0x7F] < [0x02]}. Values are treated as signed.
+   *
+   * <p>The returned comparator is inconsistent with {@link
+   * Object#equals(Object)} (since arrays support only identity equality), but
+   * it is consistent with {@link java.util.Arrays#equals(byte[], byte[])}.
+   *
+   * @see <a href="http://en.wikipedia.org/wiki/Lexicographical_order">
+   *     Lexicographical order article at Wikipedia</a>
+   * @since 2.0
+   */
+  public static Comparator<byte[]> lexicographicalComparator() {
+    return LexicographicalComparator.INSTANCE;
+  }
+
+  private enum LexicographicalComparator implements Comparator<byte[]> {
+    INSTANCE;
+
+    @Override
+    public int compare(byte[] left, byte[] right) {
+      int minLength = Math.min(left.length, right.length);
+      for (int i = 0; i < minLength; i++) {
+        int result = SignedBytes.compare(left[i], right[i]);
+        if (result != 0) {
+          return result;
+        }
+      }
+      return left.length - right.length;
+    }
+  }
+}
diff --git a/guava/src/com/google/common/primitives/UnsignedBytes.java b/guava/src/com/google/common/primitives/UnsignedBytes.java
new file mode 100644
index 0000000..1651295
--- /dev/null
+++ b/guava/src/com/google/common/primitives/UnsignedBytes.java
@@ -0,0 +1,373 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.primitives;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.VisibleForTesting;
+
+// BEGIN android-changed
+//import sun.misc.Unsafe;
+// END android-changed
+
+import java.lang.reflect.Field;
+import java.nio.ByteOrder;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+import java.util.Comparator;
+
+/**
+ * Static utility methods pertaining to {@code byte} primitives that interpret
+ * values as <i>unsigned</i> (that is, any negative value {@code b} is treated
+ * as the positive value {@code 256 + b}). The corresponding methods that treat
+ * the values as signed are found in {@link SignedBytes}, and the methods for
+ * which signedness is not an issue are in {@link Bytes}.
+ *
+ * @author Kevin Bourrillion
+ * @author Martin Buchholz
+ * @author Hiroshi Yamauchi
+ * @since 1.0
+ */
+public final class UnsignedBytes {
+  private UnsignedBytes() {}
+
+  /**
+   * The largest power of two that can be represented as an unsigned {@code byte}.
+   *
+   * @since 10.0
+   */
+  public static final byte MAX_POWER_OF_TWO = (byte) (1 << 7);
+
+  /**
+   * Returns the value of the given byte as an integer, when treated as
+   * unsigned. That is, returns {@code value + 256} if {@code value} is
+   * negative; {@code value} itself otherwise.
+   *
+   * @since 6.0
+   */
+  public static int toInt(byte value) {
+    return value & 0xFF;
+  }
+
+  /**
+   * Returns the {@code byte} value that, when treated as unsigned, is equal to
+   * {@code value}, if possible.
+   *
+   * @param value a value between 0 and 255 inclusive
+   * @return the {@code byte} value that, when treated as unsigned, equals
+   *     {@code value}
+   * @throws IllegalArgumentException if {@code value} is negative or greater
+   *     than 255
+   */
+  public static byte checkedCast(long value) {
+    checkArgument(value >> 8 == 0, "out of range: %s", value);
+    return (byte) value;
+  }
+
+  /**
+   * Returns the {@code byte} value that, when treated as unsigned, is nearest
+   * in value to {@code value}.
+   *
+   * @param value any {@code long} value
+   * @return {@code (byte) 255} if {@code value >= 255}, {@code (byte) 0} if
+   *     {@code value <= 0}, and {@code value} cast to {@code byte} otherwise
+   */
+  public static byte saturatedCast(long value) {
+    if (value > 255) {
+      return (byte) 255; // -1
+    }
+    if (value < 0) {
+      return (byte) 0;
+    }
+    return (byte) value;
+  }
+
+  /**
+   * Compares the two specified {@code byte} values, treating them as unsigned
+   * values between 0 and 255 inclusive. For example, {@code (byte) -127} is
+   * considered greater than {@code (byte) 127} because it is seen as having
+   * the value of positive {@code 129}.
+   *
+   * @param a the first {@code byte} to compare
+   * @param b the second {@code byte} to compare
+   * @return a negative value if {@code a} is less than {@code b}; a positive
+   *     value if {@code a} is greater than {@code b}; or zero if they are equal
+   */
+  public static int compare(byte a, byte b) {
+    return toInt(a) - toInt(b);
+  }
+
+  /**
+   * Returns the least value present in {@code array}.
+   *
+   * @param array a <i>nonempty</i> array of {@code byte} values
+   * @return the value present in {@code array} that is less than or equal to
+   *     every other value in the array
+   * @throws IllegalArgumentException if {@code array} is empty
+   */
+  public static byte min(byte... array) {
+    checkArgument(array.length > 0);
+    int min = toInt(array[0]);
+    for (int i = 1; i < array.length; i++) {
+      int next = toInt(array[i]);
+      if (next < min) {
+        min = next;
+      }
+    }
+    return (byte) min;
+  }
+
+  /**
+   * Returns the greatest value present in {@code array}.
+   *
+   * @param array a <i>nonempty</i> array of {@code byte} values
+   * @return the value present in {@code array} that is greater than or equal
+   *     to every other value in the array
+   * @throws IllegalArgumentException if {@code array} is empty
+   */
+  public static byte max(byte... array) {
+    checkArgument(array.length > 0);
+    int max = toInt(array[0]);
+    for (int i = 1; i < array.length; i++) {
+      int next = toInt(array[i]);
+      if (next > max) {
+        max = next;
+      }
+    }
+    return (byte) max;
+  }
+
+  /**
+   * Returns a string containing the supplied {@code byte} values separated by
+   * {@code separator}. For example, {@code join(":", (byte) 1, (byte) 2,
+   * (byte) 255)} returns the string {@code "1:2:255"}.
+   *
+   * @param separator the text that should appear between consecutive values in
+   *     the resulting string (but not at the start or end)
+   * @param array an array of {@code byte} values, possibly empty
+   */
+  public static String join(String separator, byte... array) {
+    checkNotNull(separator);
+    if (array.length == 0) {
+      return "";
+    }
+
+    // For pre-sizing a builder, just get the right order of magnitude
+    StringBuilder builder = new StringBuilder(array.length * 5);
+    builder.append(toInt(array[0]));
+    for (int i = 1; i < array.length; i++) {
+      builder.append(separator).append(toInt(array[i]));
+    }
+    return builder.toString();
+  }
+
+  /**
+   * Returns a comparator that compares two {@code byte} arrays
+   * lexicographically. That is, it compares, using {@link
+   * #compare(byte, byte)}), the first pair of values that follow any common
+   * prefix, or when one array is a prefix of the other, treats the shorter
+   * array as the lesser. For example, {@code [] < [0x01] < [0x01, 0x7F] <
+   * [0x01, 0x80] < [0x02]}. Values are treated as unsigned.
+   *
+   * <p>The returned comparator is inconsistent with {@link
+   * Object#equals(Object)} (since arrays support only identity equality), but
+   * it is consistent with {@link java.util.Arrays#equals(byte[], byte[])}.
+   *
+   * @see <a href="http://en.wikipedia.org/wiki/Lexicographical_order">
+   *     Lexicographical order article at Wikipedia</a>
+   * @since 2.0
+   */
+  public static Comparator<byte[]> lexicographicalComparator() {
+    return LexicographicalComparatorHolder.BEST_COMPARATOR;
+  }
+
+  @VisibleForTesting
+  static Comparator<byte[]> lexicographicalComparatorJavaImpl() {
+    return LexicographicalComparatorHolder.PureJavaComparator.INSTANCE;
+  }
+
+  /**
+   * Provides a lexicographical comparator implementation; either a Java
+   * implementation or a faster implementation based on {@link Unsafe}.
+   *
+   * <p>Uses reflection to gracefully fall back to the Java implementation if
+   * {@code Unsafe} isn't available.
+   */
+  @VisibleForTesting
+  static class LexicographicalComparatorHolder {
+    static final String UNSAFE_COMPARATOR_NAME =
+        LexicographicalComparatorHolder.class.getName() + "$UnsafeComparator";
+
+    // BEGIN android-changed
+
+    static final Comparator<byte[]> BEST_COMPARATOR = lexicographicalComparatorJavaImpl();
+
+    // @VisibleForTesting
+    // enum UnsafeComparator implements Comparator<byte[]> {
+    //   INSTANCE;
+
+    //   static final boolean littleEndian =
+    //       ByteOrder.nativeOrder().equals(ByteOrder.LITTLE_ENDIAN);
+
+    //   /*
+    //    * The following static final fields exist for performance reasons.
+    //    *
+    //    * In UnsignedBytesBenchmark, accessing the following objects via static
+    //    * final fields is the fastest (more than twice as fast as the Java
+    //    * implementation, vs ~1.5x with non-final static fields, on x86_32)
+    //    * under the Hotspot server compiler. The reason is obviously that the
+    //    * non-final fields need to be reloaded inside the loop.
+    //    *
+    //    * And, no, defining (final or not) local variables out of the loop still
+    //    * isn't as good because the null check on the theUnsafe object remains
+    //    * inside the loop and BYTE_ARRAY_BASE_OFFSET doesn't get
+    //    * constant-folded.
+    //    *
+    //    * The compiler can treat static final fields as compile-time constants
+    //    * and can constant-fold them while (final or not) local variables are
+    //    * run time values.
+    //    */
+
+    //   static final Unsafe theUnsafe;
+
+    //   /** The offset to the first element in a byte array. */
+    //   static final int BYTE_ARRAY_BASE_OFFSET;
+
+    //   static {
+    //     theUnsafe = (Unsafe) AccessController.doPrivileged(
+    //         new PrivilegedAction<Object>() {
+    //           @Override
+    //           public Object run() {
+    //             try {
+    //               Field f = Unsafe.class.getDeclaredField("theUnsafe");
+    //               f.setAccessible(true);
+    //               return f.get(null);
+    //             } catch (NoSuchFieldException e) {
+    //               // It doesn't matter what we throw;
+    //               // it's swallowed in getBestComparator().
+    //               throw new Error();
+    //             } catch (IllegalAccessException e) {
+    //               throw new Error();
+    //             }
+    //           }
+    //         });
+
+    //     BYTE_ARRAY_BASE_OFFSET = theUnsafe.arrayBaseOffset(byte[].class);
+
+    //     // sanity check - this should never fail
+    //     if (theUnsafe.arrayIndexScale(byte[].class) != 1) {
+    //       throw new AssertionError();
+    //     }
+    //   }
+
+    //   @Override public int compare(byte[] left, byte[] right) {
+    //     int minLength = Math.min(left.length, right.length);
+    //     int minWords = minLength / Longs.BYTES;
+
+    //     /*
+    //      * Compare 8 bytes at a time. Benchmarking shows comparing 8 bytes at a
+    //      * time is no slower than comparing 4 bytes at a time even on 32-bit.
+    //      * On the other hand, it is substantially faster on 64-bit.
+    //      */
+    //     for (int i = 0; i < minWords * Longs.BYTES; i += Longs.BYTES) {
+    //       long lw = theUnsafe.getLong(left, BYTE_ARRAY_BASE_OFFSET + (long) i);
+    //       long rw = theUnsafe.getLong(right, BYTE_ARRAY_BASE_OFFSET + (long) i);
+    //       long diff = lw ^ rw;
+
+    //       if (diff != 0) {
+    //         if (!littleEndian) {
+    //           return UnsignedLongs.compare(lw, rw);
+    //         }
+
+    //         // Use binary search
+    //         int n = 0;
+    //         int y;
+    //         int x = (int) diff;
+    //         if (x == 0) {
+    //           x = (int) (diff >>> 32);
+    //           n = 32;
+    //         }
+
+    //         y = x << 16;
+    //         if (y == 0) {
+    //           n += 16;
+    //         } else {
+    //           x = y;
+    //         }
+
+    //         y = x << 8;
+    //         if (y == 0) {
+    //           n += 8;
+    //         }
+    //         return (int) (((lw >>> n) & 0xFFL) - ((rw >>> n) & 0xFFL));
+    //       }
+    //     }
+
+    //     // The epilogue to cover the last (minLength % 8) elements.
+    //     for (int i = minWords * Longs.BYTES; i < minLength; i++) {
+    //       int result = UnsignedBytes.compare(left[i], right[i]);
+    //       if (result != 0) {
+    //         return result;
+    //       }
+    //     }
+    //     return left.length - right.length;
+    //   }
+    // }
+
+    // END android-changed
+
+    enum PureJavaComparator implements Comparator<byte[]> {
+      INSTANCE;
+
+      @Override public int compare(byte[] left, byte[] right) {
+        int minLength = Math.min(left.length, right.length);
+        for (int i = 0; i < minLength; i++) {
+          int result = UnsignedBytes.compare(left[i], right[i]);
+          if (result != 0) {
+            return result;
+          }
+        }
+        return left.length - right.length;
+      }
+    }
+
+    // BEGIN android-changed
+
+    // /**
+    //  * Returns the Unsafe-using Comparator, or falls back to the pure-Java
+    //  * implementation if unable to do so.
+    //  */
+    // static Comparator<byte[]> getBestComparator() {
+    //   try {
+    //     Class<?> theClass = Class.forName(UNSAFE_COMPARATOR_NAME);
+
+    //     // yes, UnsafeComparator does implement Comparator<byte[]>
+    //     @SuppressWarnings("unchecked")
+    //     Comparator<byte[]> comparator =
+    //         (Comparator<byte[]>) theClass.getEnumConstants()[0];
+    //     return comparator;
+    //   } catch (Throwable t) { // ensure we really catch *everything*
+    //     return lexicographicalComparatorJavaImpl();
+    //   }
+    // }
+
+    // END android-changed
+
+  }
+}
+
diff --git a/guava/src/com/google/common/primitives/UnsignedInteger.java b/guava/src/com/google/common/primitives/UnsignedInteger.java
new file mode 100644
index 0000000..d64ff88
--- /dev/null
+++ b/guava/src/com/google/common/primitives/UnsignedInteger.java
@@ -0,0 +1,236 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ * 
+ * Licensed 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.
+ */
+
+package com.google.common.primitives;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.primitives.UnsignedInts.INT_MASK;
+import static com.google.common.primitives.UnsignedInts.compare;
+import static com.google.common.primitives.UnsignedInts.toLong;
+
+import java.math.BigInteger;
+
+import javax.annotation.Nullable;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+
+/**
+ * A wrapper class for unsigned {@code int} values, supporting arithmetic operations.
+ * 
+ * <p>In some cases, when speed is more important than code readability, it may be faster simply to
+ * treat primitive {@code int} values as unsigned, using the methods from {@link UnsignedInts}.
+ * 
+ * @author Louis Wasserman
+ * @since 11.0
+ */
+@Beta
+@GwtCompatible(emulated = true)
+public final class UnsignedInteger extends Number implements Comparable<UnsignedInteger> {
+  public static final UnsignedInteger ZERO = asUnsigned(0);
+  public static final UnsignedInteger ONE = asUnsigned(1);
+  public static final UnsignedInteger MAX_VALUE = asUnsigned(-1);
+
+  private final int value;
+
+  private UnsignedInteger(int value) {
+    this.value = value & 0xffffffff;
+  }
+
+  /**
+   * Returns an {@code UnsignedInteger} that, when treated as signed, is
+   * equal to {@code value}.
+   */
+  public static UnsignedInteger asUnsigned(int value) {
+    return new UnsignedInteger(value);
+  }
+
+  /**
+   * Returns an {@code UnsignedInteger} that is equal to {@code value},
+   * if possible.  The inverse operation of {@link #longValue()}.
+   */
+  public static UnsignedInteger valueOf(long value) {
+    checkArgument((value & INT_MASK) == value,
+        "value (%s) is outside the range for an unsigned integer value", value);
+    return asUnsigned((int) value);
+  }
+
+  /**
+   * Returns a {@code UnsignedInteger} representing the same value as the specified
+   * {@link BigInteger}. This is the inverse operation of {@link #bigIntegerValue()}.
+   * 
+   * @throws IllegalArgumentException if {@code value} is negative or {@code value >= 2^32}
+   */
+  public static UnsignedInteger valueOf(BigInteger value) {
+    checkNotNull(value);
+    checkArgument(value.signum() >= 0 && value.bitLength() <= Integer.SIZE,
+        "value (%s) is outside the range for an unsigned integer value", value);
+    return asUnsigned(value.intValue());
+  }
+
+  /**
+   * Returns an {@code UnsignedInteger} holding the value of the specified {@code String}, parsed
+   * as an unsigned {@code int} value.
+   * 
+   * @throws NumberFormatException if the string does not contain a parsable unsigned {@code int}
+   *         value
+   */
+  public static UnsignedInteger valueOf(String string) {
+    return valueOf(string, 10);
+  }
+
+  /**
+   * Returns an {@code UnsignedInteger} holding the value of the specified {@code String}, parsed
+   * as an unsigned {@code int} value in the specified radix.
+   * 
+   * @throws NumberFormatException if the string does not contain a parsable unsigned {@code int}
+   *         value
+   */
+  public static UnsignedInteger valueOf(String string, int radix) {
+    return asUnsigned(UnsignedInts.parseUnsignedInt(string, radix));
+  }
+
+  /**
+   * Returns the result of adding this and {@code val}. If the result would have more than 32 bits,
+   * returns the low 32 bits of the result.
+   */
+  public UnsignedInteger add(UnsignedInteger val) {
+    checkNotNull(val);
+    return asUnsigned(this.value + val.value);
+  }
+
+  /**
+   * Returns the result of subtracting this and {@code val}. If the result would be negative,
+   * returns the low 32 bits of the result.
+   */
+  public UnsignedInteger subtract(UnsignedInteger val) {
+    checkNotNull(val);
+    return asUnsigned(this.value - val.value);
+  }
+
+  /**
+   * Returns the result of multiplying this and {@code val}. If the result would have more than 32
+   * bits, returns the low 32 bits of the result.
+   */
+  @GwtIncompatible("Does not truncate correctly")
+  public UnsignedInteger multiply(UnsignedInteger val) {
+    checkNotNull(val);
+    return asUnsigned(value * val.value);
+  }
+
+  /**
+   * Returns the result of dividing this by {@code val}.
+   */
+  public UnsignedInteger divide(UnsignedInteger val) {
+    checkNotNull(val);
+    return asUnsigned(UnsignedInts.divide(value, val.value));
+  }
+
+  /**
+   * Returns the remainder of dividing this by {@code val}.
+   */
+  public UnsignedInteger remainder(UnsignedInteger val) {
+    checkNotNull(val);
+    return asUnsigned(UnsignedInts.remainder(value, val.value));
+  }
+
+  /**
+   * Returns the value of this {@code UnsignedInteger} as an {@code int}. This is an inverse
+   * operation to {@link #asUnsigned}.
+   * 
+   * <p>Note that if this {@code UnsignedInteger} holds a value {@code >= 2^31}, the returned value
+   * will be equal to {@code this - 2^32}.
+   */
+  @Override
+  public int intValue() {
+    return value;
+  }
+
+  /**
+   * Returns the value of this {@code UnsignedInteger} as a {@code long}.
+   */
+  @Override
+  public long longValue() {
+    return toLong(value);
+  }
+
+  /**
+   * Returns the value of this {@code UnsignedInteger} as a {@code float}, analogous to a widening
+   * primitive conversion from {@code int} to {@code float}, and correctly rounded.
+   */
+  @Override
+  public float floatValue() {
+    return longValue();
+  }
+
+  /**
+   * Returns the value of this {@code UnsignedInteger} as a {@code float}, analogous to a widening
+   * primitive conversion from {@code int} to {@code double}, and correctly rounded.
+   */
+  @Override
+  public double doubleValue() {
+    return longValue();
+  }
+
+  /**
+   * Returns the value of this {@code UnsignedInteger} as a {@link BigInteger}.
+   */
+  public BigInteger bigIntegerValue() {
+    return BigInteger.valueOf(longValue());
+  }
+
+  /**
+   * Compares this unsigned integer to another unsigned integer.
+   * Returns {@code 0} if they are equal, a negative number if {@code this < other},
+   * and a positive number if {@code this > other}.
+   */
+  @Override
+  public int compareTo(UnsignedInteger other) {
+    checkNotNull(other);
+    return compare(value, other.value);
+  }
+
+  @Override
+  public int hashCode() {
+    return value;
+  }
+
+  @Override
+  public boolean equals(@Nullable Object obj) {
+    if (obj instanceof UnsignedInteger) {
+      UnsignedInteger other = (UnsignedInteger) obj;
+      return value == other.value;
+    }
+    return false;
+  }
+
+  /**
+   * Returns a string representation of the {@code UnsignedInteger} value, in base 10.
+   */
+  @Override
+  public String toString() {
+    return toString(10);
+  }
+
+  /**
+   * Returns a string representation of the {@code UnsignedInteger} value, in base {@code radix}.
+   * If {@code radix < Character.MIN_RADIX} or {@code radix > Character.MAX_RADIX}, the radix
+   * {@code 10} is used.
+   */
+  public String toString(int radix) {
+    return UnsignedInts.toString(value, radix);
+  }
+}
diff --git a/guava/src/com/google/common/primitives/UnsignedInts.java b/guava/src/com/google/common/primitives/UnsignedInts.java
new file mode 100644
index 0000000..222d9f3
--- /dev/null
+++ b/guava/src/com/google/common/primitives/UnsignedInts.java
@@ -0,0 +1,242 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ * 
+ * Licensed 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.
+ */
+
+package com.google.common.primitives;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.util.Arrays;
+import java.util.Comparator;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+
+/**
+ * Static utility methods pertaining to {@code int} primitives that interpret values as
+ * <i>unsigned</i> (that is, any negative value {@code x} is treated as the positive value
+ * {@code 2^32 + x}). The methods for which signedness is not an issue are in {@link Ints}, as well
+ * as signed versions of methods for which signedness is an issue.
+ * 
+ * <p>In addition, this class provides several static methods for converting an {@code int} to a
+ * {@code String} and a {@code String} to an {@code int} that treat the {@code int} as an unsigned
+ * number.
+ * 
+ * <p>Users of these utilities must be <i>extremely careful</i> not to mix up signed and unsigned
+ * {@code int} values. When possible, it is recommended that the {@link UnsignedInteger} wrapper
+ * class be used, at a small efficiency penalty, to enforce the distinction in the type system.
+ * 
+ * @author Louis Wasserman
+ * @since 11.0
+ */
+@Beta
+@GwtCompatible
+public final class UnsignedInts {
+  static final long INT_MASK = 0xffffffffL;
+
+  private UnsignedInts() {}
+
+  static int flip(int value) {
+    return value ^ Integer.MIN_VALUE;
+  }
+
+  /**
+   * Compares the two specified {@code int} values, treating them as unsigned values between
+   * {@code 0} and {@code 2^32 - 1} inclusive.
+   * 
+   * @param a the first unsigned {@code int} to compare
+   * @param b the second unsigned {@code int} to compare
+   * @return a negative value if {@code a} is less than {@code b}; a positive value if {@code a} is
+   *         greater than {@code b}; or zero if they are equal
+   */
+  public static int compare(int a, int b) {
+    return Ints.compare(flip(a), flip(b));
+  }
+
+  /**
+   * Returns the value of the given {@code int} as a {@code long}, when treated as unsigned.
+   */
+  public static long toLong(int value) {
+    return value & INT_MASK;
+  }
+
+  /**
+   * Returns the least value present in {@code array}, treating values as unsigned.
+   * 
+   * @param array a <i>nonempty</i> array of unsigned {@code int} values
+   * @return the value present in {@code array} that is less than or equal to every other value in
+   *         the array according to {@link #compare}
+   * @throws IllegalArgumentException if {@code array} is empty
+   */
+  public static int min(int... array) {
+    checkArgument(array.length > 0);
+    int min = flip(array[0]);
+    for (int i = 1; i < array.length; i++) {
+      int next = flip(array[i]);
+      if (next < min) {
+        min = next;
+      }
+    }
+    return flip(min);
+  }
+
+  /**
+   * Returns the greatest value present in {@code array}, treating values as unsigned.
+   * 
+   * @param array a <i>nonempty</i> array of unsigned {@code int} values
+   * @return the value present in {@code array} that is greater than or equal to every other value
+   *         in the array according to {@link #compare}
+   * @throws IllegalArgumentException if {@code array} is empty
+   */
+  public static int max(int... array) {
+    checkArgument(array.length > 0);
+    int max = flip(array[0]);
+    for (int i = 1; i < array.length; i++) {
+      int next = flip(array[i]);
+      if (next > max) {
+        max = next;
+      }
+    }
+    return flip(max);
+  }
+
+  /**
+   * Returns a string containing the supplied unsigned {@code int} values separated by
+   * {@code separator}. For example, {@code join("-", 1, 2, 3)} returns the string {@code "1-2-3"}.
+   * 
+   * @param separator the text that should appear between consecutive values in the resulting
+   *        string (but not at the start or end)
+   * @param array an array of unsigned {@code int} values, possibly empty
+   */
+  public static String join(String separator, int... array) {
+    checkNotNull(separator);
+    if (array.length == 0) {
+      return "";
+    }
+
+    // For pre-sizing a builder, just get the right order of magnitude
+    StringBuilder builder = new StringBuilder(array.length * 5);
+    builder.append(array[0]);
+    for (int i = 1; i < array.length; i++) {
+      builder.append(separator).append(toString(array[i]));
+    }
+    return builder.toString();
+  }
+
+  /**
+   * Returns a comparator that compares two arrays of unsigned {@code int} values lexicographically.
+   * That is, it compares, using {@link #compare(int, int)}), the first pair of values that follow
+   * any common prefix, or when one array is a prefix of the other, treats the shorter array as the
+   * lesser. For example, {@code [] < [1] < [1, 2] < [2] < [1 << 31]}.
+   * 
+   * <p>The returned comparator is inconsistent with {@link Object#equals(Object)} (since arrays
+   * support only identity equality), but it is consistent with {@link Arrays#equals(int[], int[])}.
+   * 
+   * @see <a href="http://en.wikipedia.org/wiki/Lexicographical_order"> Lexicographical order
+   *      article at Wikipedia</a>
+   */
+  public static Comparator<int[]> lexicographicalComparator() {
+    return LexicographicalComparator.INSTANCE;
+  }
+
+  enum LexicographicalComparator implements Comparator<int[]> {
+    INSTANCE;
+
+    @Override
+    public int compare(int[] left, int[] right) {
+      int minLength = Math.min(left.length, right.length);
+      for (int i = 0; i < minLength; i++) {
+        if (left[i] != right[i]) {
+          return UnsignedInts.compare(left[i], right[i]);
+        }
+      }
+      return left.length - right.length;
+    }
+  }
+
+  /**
+   * Returns dividend / divisor, where the dividend and divisor are treated as unsigned 32-bit
+   * quantities.
+   * 
+   * @param dividend the dividend (numerator)
+   * @param divisor the divisor (denominator)
+   * @throws ArithmeticException if divisor is 0
+   */
+  public static int divide(int dividend, int divisor) {
+    return (int) (toLong(dividend) / toLong(divisor));
+  }
+
+  /**
+   * Returns dividend % divisor, where the dividend and divisor are treated as unsigned 32-bit
+   * quantities.
+   * 
+   * @param dividend the dividend (numerator)
+   * @param divisor the divisor (denominator)
+   * @throws ArithmeticException if divisor is 0
+   */
+  public static int remainder(int dividend, int divisor) {
+    return (int) (toLong(dividend) % toLong(divisor));
+  }
+
+  /**
+   * Returns the unsigned {@code int} value represented by the given decimal string.
+   * 
+   * @throws NumberFormatException if the string does not contain a valid unsigned integer, or if
+   *         the value represented is too large to fit in an unsigned {@code int}.
+   * @throws NullPointerException if {@code s} is null
+   */
+  public static int parseUnsignedInt(String s) {
+    return parseUnsignedInt(s, 10);
+  }
+
+  /**
+   * Returns the unsigned {@code int} value represented by a string with the given radix.
+   * 
+   * @param string the string containing the unsigned integer representation to be parsed.
+   * @param radix the radix to use while parsing {@code s}; must be between
+   *        {@link Character#MIN_RADIX} and {@link Character#MAX_RADIX}.
+   * @throws NumberFormatException if the string does not contain a valid unsigned {@code int}, or
+   *         if supplied radix is invalid.
+   */
+  public static int parseUnsignedInt(String string, int radix) {
+    checkNotNull(string);
+    long result = Long.parseLong(string, radix);
+    if ((result & INT_MASK) != result) {
+      throw new NumberFormatException("Input " + string + " in base " + radix
+          + " is not in the range of an unsigned integer");
+    }
+    return (int) result;
+  }
+
+  /**
+   * Returns a string representation of x, where x is treated as unsigned.
+   */
+  public static String toString(int x) {
+    return toString(x, 10);
+  }
+
+  /**
+   * Returns a string representation of {@code x} for the given radix, where {@code x} is treated
+   * as unsigned.
+   * 
+   * @param x the value to convert to a string.
+   * @param radix the radix to use while working with {@code x}
+   * @throws IllegalArgumentException if {@code radix} is not between {@link Character#MIN_RADIX}
+   *         and {@link Character#MAX_RADIX}.
+   */
+  public static String toString(int x, int radix) {
+    long asLong = x & INT_MASK;
+    return Long.toString(asLong, radix);
+  }
+}
diff --git a/guava/src/com/google/common/primitives/UnsignedLong.java b/guava/src/com/google/common/primitives/UnsignedLong.java
new file mode 100644
index 0000000..62f7f81
--- /dev/null
+++ b/guava/src/com/google/common/primitives/UnsignedLong.java
@@ -0,0 +1,242 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.primitives;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.io.Serializable;
+import java.math.BigInteger;
+
+import javax.annotation.Nullable;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+
+/**
+ * A wrapper class for unsigned {@code long} values, supporting arithmetic operations.
+ *
+ * <p>In some cases, when speed is more important than code readability, it may be faster simply to
+ * treat primitive {@code long} values as unsigned, using the methods from {@link UnsignedLongs}.
+ *
+ * <p><b>Please do not extend this class; it will be made final in the near future.</b>
+ *
+ * @author Louis Wasserman
+ * @author Colin Evans
+ * @since 11.0
+ */
+@Beta
+@GwtCompatible(serializable = true)
+public class UnsignedLong extends Number implements Comparable<UnsignedLong>, Serializable {
+  // TODO(user): make final as soon as util.UnsignedLong is migrated over
+
+  private static final long UNSIGNED_MASK = 0x7fffffffffffffffL;
+
+  public static final UnsignedLong ZERO = new UnsignedLong(0);
+  public static final UnsignedLong ONE = new UnsignedLong(1);
+  public static final UnsignedLong MAX_VALUE = new UnsignedLong(-1L);
+
+  private final long value;
+
+  protected UnsignedLong(long value) {
+    this.value = value;
+  }
+
+  /**
+   * Returns an {@code UnsignedLong} that, when treated as signed, is equal to {@code value}. The
+   * inverse operation is {@link #longValue()}.
+   *
+   * <p>Put another way, if {@code value} is negative, the returned result will be equal to
+   * {@code 2^64 + value}; otherwise, the returned result will be equal to {@code value}.
+   */
+  public static UnsignedLong asUnsigned(long value) {
+    return new UnsignedLong(value);
+  }
+
+  /**
+   * Returns a {@code UnsignedLong} representing the same value as the specified {@code BigInteger}
+   * . This is the inverse operation of {@link #bigIntegerValue()}.
+   *
+   * @throws IllegalArgumentException if {@code value} is negative or {@code value >= 2^64}
+   */
+  public static UnsignedLong valueOf(BigInteger value) {
+    checkNotNull(value);
+    checkArgument(value.signum() >= 0 && value.bitLength() <= Long.SIZE,
+        "value (%s) is outside the range for an unsigned long value", value);
+    return asUnsigned(value.longValue());
+  }
+
+  /**
+   * Returns an {@code UnsignedLong} holding the value of the specified {@code String}, parsed as
+   * an unsigned {@code long} value.
+   *
+   * @throws NumberFormatException if the string does not contain a parsable unsigned {@code long}
+   *         value
+   */
+  public static UnsignedLong valueOf(String string) {
+    return valueOf(string, 10);
+  }
+
+  /**
+   * Returns an {@code UnsignedLong} holding the value of the specified {@code String}, parsed as
+   * an unsigned {@code long} value in the specified radix.
+   *
+   * @throws NumberFormatException if the string does not contain a parsable unsigned {@code long}
+   *         value, or {@code radix} is not between {@link Character#MIN_RADIX} and
+   *         {@link Character#MAX_RADIX}
+   */
+  public static UnsignedLong valueOf(String string, int radix) {
+    return asUnsigned(UnsignedLongs.parseUnsignedLong(string, radix));
+  }
+
+  /**
+   * Returns the result of adding this and {@code val}. If the result would have more than 64 bits,
+   * returns the low 64 bits of the result.
+   */
+  public UnsignedLong add(UnsignedLong val) {
+    checkNotNull(val);
+    return asUnsigned(this.value + val.value);
+  }
+
+  /**
+   * Returns the result of subtracting this and {@code val}. If the result would be negative,
+   * returns the low 64 bits of the result.
+   */
+  public UnsignedLong subtract(UnsignedLong val) {
+    checkNotNull(val);
+    return asUnsigned(this.value - val.value);
+  }
+
+  /**
+   * Returns the result of multiplying this and {@code val}. If the result would have more than 64
+   * bits, returns the low 64 bits of the result.
+   */
+  public UnsignedLong multiply(UnsignedLong val) {
+    checkNotNull(val);
+    return asUnsigned(value * val.value);
+  }
+
+  /**
+   * Returns the result of dividing this by {@code val}.
+   */
+  public UnsignedLong divide(UnsignedLong val) {
+    checkNotNull(val);
+    return asUnsigned(UnsignedLongs.divide(value, val.value));
+  }
+
+  /**
+   * Returns the remainder of dividing this by {@code val}.
+   */
+  public UnsignedLong remainder(UnsignedLong val) {
+    checkNotNull(val);
+    return asUnsigned(UnsignedLongs.remainder(value, val.value));
+  }
+
+  /**
+   * Returns the value of this {@code UnsignedLong} as an {@code int}.
+   */
+  @Override
+  public int intValue() {
+    return (int) value;
+  }
+
+  /**
+   * Returns the value of this {@code UnsignedLong} as a {@code long}. This is an inverse operation
+   * to {@link #asUnsigned}.
+   *
+   * <p>Note that if this {@code UnsignedLong} holds a value {@code >= 2^63}, the returned value
+   * will be equal to {@code this - 2^64}.
+   */
+  @Override
+  public long longValue() {
+    return value;
+  }
+
+  /**
+   * Returns the value of this {@code UnsignedLong} as a {@code float}, analogous to a widening
+   * primitive conversion from {@code long} to {@code float}, and correctly rounded.
+   */
+  @Override
+  public float floatValue() {
+    @SuppressWarnings("cast")
+    float fValue = (float) (value & UNSIGNED_MASK);
+    if (value < 0) {
+      fValue += 0x1.0p63f;
+    }
+    return fValue;
+  }
+
+  /**
+   * Returns the value of this {@code UnsignedLong} as a {@code double}, analogous to a widening
+   * primitive conversion from {@code long} to {@code double}, and correctly rounded.
+   */
+  @Override
+  public double doubleValue() {
+    @SuppressWarnings("cast")
+    double dValue = (double) (value & UNSIGNED_MASK);
+    if (value < 0) {
+      dValue += 0x1.0p63;
+    }
+    return dValue;
+  }
+
+  /**
+   * Returns the value of this {@code UnsignedLong} as a {@link BigInteger}.
+   */
+  public BigInteger bigIntegerValue() {
+    BigInteger bigInt = BigInteger.valueOf(value & UNSIGNED_MASK);
+    if (value < 0) {
+      bigInt = bigInt.setBit(Long.SIZE - 1);
+    }
+    return bigInt;
+  }
+
+  @Override
+  public int compareTo(UnsignedLong o) {
+    checkNotNull(o);
+    return UnsignedLongs.compare(value, o.value);
+  }
+
+  @Override
+  public int hashCode() {
+    return Longs.hashCode(value);
+  }
+
+  @Override
+  public boolean equals(@Nullable Object obj) {
+    if (obj instanceof UnsignedLong) {
+      UnsignedLong other = (UnsignedLong) obj;
+      return value == other.value;
+    }
+    return false;
+  }
+
+  /**
+   * Returns a string representation of the {@code UnsignedLong} value, in base 10.
+   */
+  @Override
+  public String toString() {
+    return UnsignedLongs.toString(value);
+  }
+
+  /**
+   * Returns a string representation of the {@code UnsignedLong} value, in base {@code radix}. If
+   * {@code radix < Character.MIN_RADIX} or {@code radix > Character.MAX_RADIX}, the radix
+   * {@code 10} is used.
+   */
+  public String toString(int radix) {
+    return UnsignedLongs.toString(value, radix);
+  }
+}
diff --git a/guava/src/com/google/common/primitives/UnsignedLongs.java b/guava/src/com/google/common/primitives/UnsignedLongs.java
new file mode 100644
index 0000000..b723a1b
--- /dev/null
+++ b/guava/src/com/google/common/primitives/UnsignedLongs.java
@@ -0,0 +1,364 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ * 
+ * Licensed 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.
+ */
+
+package com.google.common.primitives;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.math.BigInteger;
+import java.util.Arrays;
+import java.util.Comparator;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+
+/**
+ * Static utility methods pertaining to {@code long} primitives that interpret values as
+ * <i>unsigned</i> (that is, any negative value {@code x} is treated as the positive value
+ * {@code 2^64 + x}). The methods for which signedness is not an issue are in {@link Longs}, as
+ * well as signed versions of methods for which signedness is an issue.
+ * 
+ * <p>In addition, this class provides several static methods for converting a {@code long} to a
+ * {@code String} and a {@code String} to a {@code long} that treat the {@code long} as an unsigned
+ * number.
+ * 
+ * <p>Users of these utilities must be <i>extremely careful</i> not to mix up signed and unsigned
+ * {@code long} values. When possible, it is recommended that the {@link UnsignedLong} wrapper 
+ * class be used, at a small efficiency penalty, to enforce the distinction in the type system.
+ * 
+ * @author Louis Wasserman
+ * @author Brian Milch
+ * @author Colin Evans
+ * @since 10.0
+ */
+@Beta
+@GwtCompatible
+public final class UnsignedLongs {
+  private UnsignedLongs() {}
+
+  public static final long MAX_VALUE = -1L; // Equivalent to 2^64 - 1
+
+  /**
+   * A (self-inverse) bijection which converts the ordering on unsigned longs to the ordering on
+   * longs, that is, {@code a <= b} as unsigned longs if and only if {@code rotate(a) <= rotate(b)}
+   * as signed longs.
+   */
+  private static long flip(long a) {
+    return a ^ Long.MIN_VALUE;
+  }
+
+  /**
+   * Compares the two specified {@code long} values, treating them as unsigned values between
+   * {@code 0} and {@code 2^64 - 1} inclusive.
+   * 
+   * @param a the first unsigned {@code long} to compare
+   * @param b the second unsigned {@code long} to compare
+   * @return a negative value if {@code a} is less than {@code b}; a positive value if {@code a} is
+   *         greater than {@code b}; or zero if they are equal
+   */
+  public static int compare(long a, long b) {
+    return Longs.compare(flip(a), flip(b));
+  }
+
+  /**
+   * Returns the least value present in {@code array}, treating values as unsigned.
+   * 
+   * @param array a <i>nonempty</i> array of unsigned {@code long} values
+   * @return the value present in {@code array} that is less than or equal to every other value in
+   *         the array according to {@link #compare}
+   * @throws IllegalArgumentException if {@code array} is empty
+   */
+  public static long min(long... array) {
+    checkArgument(array.length > 0);
+    long min = flip(array[0]);
+    for (int i = 1; i < array.length; i++) {
+      long next = flip(array[i]);
+      if (next < min) {
+        min = next;
+      }
+    }
+    return flip(min);
+  }
+
+  /**
+   * Returns the greatest value present in {@code array}, treating values as unsigned.
+   * 
+   * @param array a <i>nonempty</i> array of unsigned {@code long} values
+   * @return the value present in {@code array} that is greater than or equal to every other value
+   *         in the array according to {@link #compare}
+   * @throws IllegalArgumentException if {@code array} is empty
+   */
+  public static long max(long... array) {
+    checkArgument(array.length > 0);
+    long max = flip(array[0]);
+    for (int i = 1; i < array.length; i++) {
+      long next = flip(array[i]);
+      if (next > max) {
+        max = next;
+      }
+    }
+    return flip(max);
+  }
+
+  /**
+   * Returns a string containing the supplied unsigned {@code long} values separated by
+   * {@code separator}. For example, {@code join("-", 1, 2, 3)} returns the string {@code "1-2-3"}.
+   * 
+   * @param separator the text that should appear between consecutive values in the resulting
+   *        string (but not at the start or end)
+   * @param array an array of unsigned {@code long} values, possibly empty
+   */
+  public static String join(String separator, long... array) {
+    checkNotNull(separator);
+    if (array.length == 0) {
+      return "";
+    }
+
+    // For pre-sizing a builder, just get the right order of magnitude
+    StringBuilder builder = new StringBuilder(array.length * 5);
+    builder.append(array[0]);
+    for (int i = 1; i < array.length; i++) {
+      builder.append(separator).append(toString(array[i]));
+    }
+    return builder.toString();
+  }
+
+  /**
+   * Returns a comparator that compares two arrays of unsigned {@code long} values
+   * lexicographically. That is, it compares, using {@link #compare(long, long)}), the first pair of
+   * values that follow any common prefix, or when one array is a prefix of the other, treats the
+   * shorter array as the lesser. For example, {@code [] < [1L] < [1L, 2L] < [2L] < [1L << 63]}.
+   * 
+   * <p>The returned comparator is inconsistent with {@link Object#equals(Object)} (since arrays
+   * support only identity equality), but it is consistent with
+   * {@link Arrays#equals(long[], long[])}.
+   * 
+   * @see <a href="http://en.wikipedia.org/wiki/Lexicographical_order">Lexicographical order
+   *      article at Wikipedia</a>
+   */
+  public static Comparator<long[]> lexicographicalComparator() {
+    return LexicographicalComparator.INSTANCE;
+  }
+
+  enum LexicographicalComparator implements Comparator<long[]> {
+    INSTANCE;
+
+    @Override
+    public int compare(long[] left, long[] right) {
+      int minLength = Math.min(left.length, right.length);
+      for (int i = 0; i < minLength; i++) {
+        if (left[i] != right[i]) {
+          return UnsignedLongs.compare(left[i], right[i]);
+        }
+      }
+      return left.length - right.length;
+    }
+  }
+
+  /**
+   * Returns dividend / divisor, where the dividend and divisor are treated as unsigned 64-bit
+   * quantities.
+   * 
+   * @param dividend the dividend (numerator)
+   * @param divisor the divisor (denominator)
+   * @throws ArithmeticException if divisor is 0
+   */
+  public static long divide(long dividend, long divisor) {
+    if (divisor < 0) { // i.e., divisor >= 2^63:
+      if (compare(dividend, divisor) < 0) {
+        return 0; // dividend < divisor
+      } else {
+        return 1; // dividend >= divisor
+      }
+    }
+
+    // Optimization - use signed division if dividend < 2^63
+    if (dividend >= 0) {
+      return dividend / divisor;
+    }
+
+    /*
+     * Otherwise, approximate the quotient, check, and correct if necessary. Our approximation is
+     * guaranteed to be either exact or one less than the correct value. This follows from fact
+     * that floor(floor(x)/i) == floor(x/i) for any real x and integer i != 0. The proof is not
+     * quite trivial.
+     */
+    long quotient = ((dividend >>> 1) / divisor) << 1;
+    long rem = dividend - quotient * divisor;
+    return quotient + (compare(rem, divisor) >= 0 ? 1 : 0);
+  }
+
+  /**
+   * Returns dividend % divisor, where the dividend and divisor are treated as unsigned 64-bit
+   * quantities.
+   * 
+   * @param dividend the dividend (numerator)
+   * @param divisor the divisor (denominator)
+   * @throws ArithmeticException if divisor is 0
+   * @since 11.0
+   */
+  public static long remainder(long dividend, long divisor) {
+    if (divisor < 0) { // i.e., divisor >= 2^63:
+      if (compare(dividend, divisor) < 0) {
+        return dividend; // dividend < divisor
+      } else {
+        return dividend - divisor; // dividend >= divisor
+      }
+    }
+
+    // Optimization - use signed modulus if dividend < 2^63
+    if (dividend >= 0) {
+      return dividend % divisor;
+    }
+
+    /*
+     * Otherwise, approximate the quotient, check, and correct if necessary. Our approximation is
+     * guaranteed to be either exact or one less than the correct value. This follows from fact
+     * that floor(floor(x)/i) == floor(x/i) for any real x and integer i != 0. The proof is not
+     * quite trivial.
+     */
+    long quotient = ((dividend >>> 1) / divisor) << 1;
+    long rem = dividend - quotient * divisor;
+    return rem - (compare(rem, divisor) >= 0 ? divisor : 0);
+  }
+
+  /**
+   * Returns the unsigned {@code long} value represented by the given decimal string.
+   * 
+   * @throws NumberFormatException if the string does not contain a valid unsigned {@code long}
+   *         value
+   */
+  public static long parseUnsignedLong(String s) {
+    return parseUnsignedLong(s, 10);
+  }
+
+  /**
+   * Returns the unsigned {@code long} value represented by a string with the given radix.
+   * 
+   * @param s the string containing the unsigned {@code long} representation to be parsed.
+   * @param radix the radix to use while parsing {@code s}
+   * @throws NumberFormatException if the string does not contain a valid unsigned {@code long}
+   *         with the given radix, or if {@code radix} is not between {@link Character#MIN_RADIX}
+   *         and {@link Character#MAX_RADIX}.
+   */
+  public static long parseUnsignedLong(String s, int radix) {
+    checkNotNull(s);
+    if (s.length() == 0) {
+      throw new NumberFormatException("empty string");
+    }
+    if (radix < Character.MIN_RADIX || radix > Character.MAX_RADIX) {
+      throw new NumberFormatException("illegal radix:" + radix);
+    }
+
+    int max_safe_pos = maxSafeDigits[radix] - 1;
+    long value = 0;
+    for (int pos = 0; pos < s.length(); pos++) {
+      int digit = Character.digit(s.charAt(pos), radix);
+      if (digit == -1) {
+        throw new NumberFormatException(s);
+      }
+      if (pos > max_safe_pos && overflowInParse(value, digit, radix)) {
+        throw new NumberFormatException("Too large for unsigned long: " + s);
+      }
+      value = (value * radix) + digit;
+    }
+
+    return value;
+  }
+
+  /**
+   * Returns true if (current * radix) + digit is a number too large to be represented by an
+   * unsigned long. This is useful for detecting overflow while parsing a string representation of
+   * a number. Does not verify whether supplied radix is valid, passing an invalid radix will give
+   * undefined results or an ArrayIndexOutOfBoundsException.
+   */
+  private static boolean overflowInParse(long current, int digit, int radix) {
+    if (current >= 0) {
+      if (current < maxValueDivs[radix]) {
+        return false;
+      }
+      if (current > maxValueDivs[radix]) {
+        return true;
+      }
+      // current == maxValueDivs[radix]
+      return (digit > maxValueMods[radix]);
+    }
+
+    // current < 0: high bit is set
+    return true;
+  }
+
+  /**
+   * Returns a string representation of x, where x is treated as unsigned.
+   */
+  public static String toString(long x) {
+    return toString(x, 10);
+  }
+
+  /**
+   * Returns a string representation of {@code x} for the given radix, where {@code x} is treated
+   * as unsigned.
+   * 
+   * @param x the value to convert to a string.
+   * @param radix the radix to use while working with {@code x}
+   * @throws IllegalArgumentException if {@code radix} is not between {@link Character#MIN_RADIX}
+   *         and {@link Character#MAX_RADIX}.
+   */
+  public static String toString(long x, int radix) {
+    checkArgument(radix >= Character.MIN_RADIX && radix <= Character.MAX_RADIX,
+        "radix (%s) must be between Character.MIN_RADIX and Character.MAX_RADIX", radix);
+    if (x == 0) {
+      // Simply return "0"
+      return "0";
+    } else {
+      char[] buf = new char[64];
+      int i = buf.length;
+      if (x < 0) {
+        // Split x into high-order and low-order halves.
+        // Individual digits are generated from the bottom half into which
+        // bits are moved continously from the top half.
+        long top = x >>> 32;
+        long bot = (x & 0xffffffffl) + ((top % radix) << 32);
+        top /= radix;
+        while ((bot > 0) || (top > 0)) {
+          buf[--i] = Character.forDigit((int) (bot % radix), radix);
+          bot = (bot / radix) + ((top % radix) << 32);
+          top /= radix;
+        }
+      } else {
+        // Simple modulo/division approach
+        while (x > 0) {
+          buf[--i] = Character.forDigit((int) (x % radix), radix);
+          x /= radix;
+        }
+      }
+      // Generate string
+      return new String(buf, i, buf.length - i);
+    }
+  }
+
+  // calculated as 0xffffffffffffffff / radix
+  private static final long[] maxValueDivs = new long[Character.MAX_RADIX + 1];
+  private static final int[] maxValueMods = new int[Character.MAX_RADIX + 1];
+  private static final int[] maxSafeDigits = new int[Character.MAX_RADIX + 1];
+  static {
+    BigInteger overflow = new BigInteger("10000000000000000", 16);
+    for (int i = Character.MIN_RADIX; i <= Character.MAX_RADIX; i++) {
+      maxValueDivs[i] = divide(MAX_VALUE, i);
+      maxValueMods[i] = (int) remainder(MAX_VALUE, i);
+      maxSafeDigits[i] = overflow.toString(i).length() - 1;
+    }
+  }
+}
diff --git a/guava/src/com/google/common/primitives/generate.sh b/guava/src/com/google/common/primitives/generate.sh
new file mode 100644
index 0000000..5d594a2
--- /dev/null
+++ b/guava/src/com/google/common/primitives/generate.sh
@@ -0,0 +1,604 @@
+#!/bin/sh
+#
+# Usage example: ./generate.sh int Int Integer"
+# Args are: primitive type, capitalized primitive type, wrapper type
+#
+# To make changes to the .java files in this package,
+# 1. run this script to generate the templates, move the .gen files
+#    somewhere else
+# 2. modify the template with your intended changes, then rerun the
+#    script
+# 3. use any three-way merge tool to edit the checked-in source files,
+#    using the before-and-after generated files as the bases.
+#
+
+if [ "$#" -ne "3" ]
+then
+  echo "Usage example: ./generate.sh int Int Integer"
+  exit 1
+fi
+
+# Note: using the strange strings 'primtyp' and 'WrapperCl' so that they match
+# the maximum length of the real strings ('boolean' and 'Character').
+
+perl -pe "s/primtyp/$1/g; s/PrimTyp/$2/g; s/WrapperCl/$3/g" << "--EOF--" > $2s.java.gen
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.primitives;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkElementIndex;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkPositionIndexes;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.GwtIncompatible;
+
+import java.io.Serializable;
+import java.util.AbstractList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.RandomAccess;
+
+/**
+ * Static utility methods pertaining to {@code primtyp} primitives, that are not
+ * already found in either {@link WrapperCl} or {@link Arrays}.
+ *
+ * @author Kevin Bourrillion
+ * @since 1.0
+ */
+@GwtCompatible
+public final class PrimTyps {
+  private PrimTyps() {}
+
+  /**
+   * The number of bytes required to represent a primitive {@code primtyp}
+   * value.
+   */
+  public static final int BYTES = WrapperCl.SIZE / Byte.SIZE;
+
+  /**
+   * Returns a hash code for {@code value}; equal to the result of invoking
+   * {@code ((WrapperCl) value).hashCode()}.
+   *
+   * @param value a primitive {@code primtyp} value
+   * @return a hash code for the value
+   */
+  public static int hashCode(primtyp value) {
+    return ??
+  }
+
+  /**
+   * Returns the {@code primtyp} value that is equal to {@code value}, if
+   * possible.
+   *
+   * @param value any value in the range of the {@code primtyp} type
+   * @return the {@code primtyp} value that equals {@code value}
+   * @throws IllegalArgumentException if {@code value} is greater than {@link
+   *     WrapperCl#MAX_VALUE} or less than {@link WrapperCl#MIN_VALUE}
+   */
+  public static primtyp checkedCast(long value) {
+    primtyp result = (primtyp) value;
+    checkArgument(result == value, "Out of range: %s", value);
+    return result;
+  }
+
+  /**
+   * Returns the {@code primtyp} nearest in value to {@code value}.
+   *
+   * @param value any {@code long} value
+   * @return the same value cast to {@code primtyp} if it is in the range of the
+   *     {@code primtyp} type, {@link WrapperCl#MAX_VALUE} if it is too large,
+   *     or {@link WrapperCl#MIN_VALUE} if it is too small
+   */
+  public static primtyp saturatedCast(long value) {
+    if (value > WrapperCl.MAX_VALUE) {
+      return WrapperCl.MAX_VALUE;
+    }
+    if (value < WrapperCl.MIN_VALUE) {
+      return WrapperCl.MIN_VALUE;
+    }
+    return (primtyp) value;
+  }
+
+  /**
+   * Compares the two specified {@code primtyp} values. The sign of the value
+   * returned is the same as that of {@code ((WrapperCl) a).compareTo(b)}.
+   *
+   * @param a the first {@code primtyp} to compare
+   * @param b the second {@code primtyp} to compare
+   * @return a negative value if {@code a} is less than {@code b}; a positive
+   *     value if {@code a} is greater than {@code b}; or zero if they are equal
+   */
+  public static int compare(primtyp a, primtyp b) {
+    return (a < b) ? -1 : ((a > b) ? 1 : 0);
+  }
+
+  /**
+   * Returns {@code true} if {@code target} is present as an element anywhere in
+   * {@code array}.
+   *
+   * @param array an array of {@code primtyp} values, possibly empty
+   * @param target a primitive {@code primtyp} value
+   * @return {@code true} if {@code array[i] == target} for some value of {@code
+   *     i}
+   */
+  public static boolean contains(primtyp[] array, primtyp target) {
+    for (primtyp value : array) {
+      if (value == target) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  /**
+   * Returns the index of the first appearance of the value {@code target} in
+   * {@code array}.
+   *
+   * @param array an array of {@code primtyp} values, possibly empty
+   * @param target a primitive {@code primtyp} value
+   * @return the least index {@code i} for which {@code array[i] == target}, or
+   *     {@code -1} if no such index exists.
+   */
+  public static int indexOf(primtyp[] array, primtyp target) {
+    return indexOf(array, target, 0, array.length);
+  }
+
+  // TODO(kevinb): consider making this public
+  private static int indexOf(
+      primtyp[] array, primtyp target, int start, int end) {
+    for (int i = start; i < end; i++) {
+      if (array[i] == target) {
+        return i;
+      }
+    }
+    return -1;
+  }
+
+  /**
+   * Returns the start position of the first occurrence of the specified {@code
+   * target} within {@code array}, or {@code -1} if there is no such occurrence.
+   *
+   * <p>More formally, returns the lowest index {@code i} such that {@code
+   * java.util.Arrays.copyOfRange(array, i, i + target.length)} contains exactly
+   * the same elements as {@code target}.
+   *
+   * @param array the array to search for the sequence {@code target}
+   * @param target the array to search for as a sub-sequence of {@code array}
+   */
+  public static int indexOf(primtyp[] array, primtyp[] target) {
+    checkNotNull(array, "array");
+    checkNotNull(target, "target");
+    if (target.length == 0) {
+      return 0;
+    }
+
+    outer:
+    for (int i = 0; i < array.length - target.length + 1; i++) {
+      for (int j = 0; j < target.length; j++) {
+        if (array[i + j] != target[j]) {
+          continue outer;
+        }
+      }
+      return i;
+    }
+    return -1;
+  }
+
+  /**
+   * Returns the index of the last appearance of the value {@code target} in
+   * {@code array}.
+   *
+   * @param array an array of {@code primtyp} values, possibly empty
+   * @param target a primitive {@code primtyp} value
+   * @return the greatest index {@code i} for which {@code array[i] == target},
+   *     or {@code -1} if no such index exists.
+   */
+  public static int lastIndexOf(primtyp[] array, primtyp target) {
+    return lastIndexOf(array, target, 0, array.length);
+  }
+
+  // TODO(kevinb): consider making this public
+  private static int lastIndexOf(
+      primtyp[] array, primtyp target, int start, int end) {
+    for (int i = end - 1; i >= start; i--) {
+      if (array[i] == target) {
+        return i;
+      }
+    }
+    return -1;
+  }
+
+  /**
+   * Returns the least value present in {@code array}.
+   *
+   * @param array a <i>nonempty</i> array of {@code primtyp} values
+   * @return the value present in {@code array} that is less than or equal to
+   *     every other value in the array
+   * @throws IllegalArgumentException if {@code array} is empty
+   */
+  public static primtyp min(primtyp... array) {
+    checkArgument(array.length > 0);
+    primtyp min = array[0];
+    for (int i = 1; i < array.length; i++) {
+      if (array[i] < min) {
+        min = array[i];
+      }
+    }
+    return min;
+  }
+
+  /**
+   * Returns the greatest value present in {@code array}.
+   *
+   * @param array a <i>nonempty</i> array of {@code primtyp} values
+   * @return the value present in {@code array} that is greater than or equal to
+   *     every other value in the array
+   * @throws IllegalArgumentException if {@code array} is empty
+   */
+  public static primtyp max(primtyp... array) {
+    checkArgument(array.length > 0);
+    primtyp max = array[0];
+    for (int i = 1; i < array.length; i++) {
+      if (array[i] > max) {
+        max = array[i];
+      }
+    }
+    return max;
+  }
+
+  /**
+   * Returns the values from each provided array combined into a single array.
+   * For example, {@code concat(new primtyp[] {a, b}, new primtyp[] {}, new
+   * primtyp[] {c}} returns the array {@code {a, b, c}}.
+   *
+   * @param arrays zero or more {@code primtyp} arrays
+   * @return a single array containing all the values from the source arrays, in
+   *     order
+   */
+  public static primtyp[] concat(primtyp[]... arrays) {
+    int length = 0;
+    for (primtyp[] array : arrays) {
+      length += array.length;
+    }
+    primtyp[] result = new primtyp[length];
+    int pos = 0;
+    for (primtyp[] array : arrays) {
+      System.arraycopy(array, 0, result, pos, array.length);
+      pos += array.length;
+    }
+    return result;
+  }
+
+  /**
+   * Returns a big-endian representation of {@code value} in a ?-element byte
+   * array; equivalent to {@code
+   * ByteBuffer.allocate(?).putPrimTyp(value).array()}.  For example, the input
+   * value {@code ?} would yield the byte array {@code {?}}.
+   *
+   * <p>If you need to convert and concatenate several values (possibly even of
+   * different types), use a shared {@link java.nio.ByteBuffer} instance, or use
+   * {@link com.google.common.io.ByteStreams#newDataOutput()} to get a growable
+   * buffer.
+   */
+  @GwtIncompatible("doesn't work")
+  public static byte[] toByteArray(primtyp value) {
+    return new byte[] {
+      ?
+    };
+  }
+
+  /**
+   * Returns the {@code primtyp} value whose big-endian representation is
+   * stored in the first ? bytes of {@code bytes}; equivalent to {@code
+   * ByteBuffer.wrap(bytes).getPrimTyp()}. For example, the input byte array
+   * {@code {?}} would yield the {@code primtyp} value {@code ?}.
+   *
+   * <p>Arguably, it's preferable to use {@link java.nio.ByteBuffer}; that
+   * library exposes much more flexibility at little cost in readability.
+   *
+   * @throws IllegalArgumentException if {@code bytes} has fewer than ?
+   *     elements
+   */
+  @GwtIncompatible("doesn't work")
+  public static primtyp fromByteArray(byte[] bytes) {
+    checkArgument(bytes.length >= BYTES,
+        "array too small: %s < %s", bytes.length, BYTES);
+    return fromBytes(bytes[0], bytes[1], bytes[2], bytes[3]);
+  }
+
+  /**
+   * Returns the {@code primtyp} value whose byte representation is the given ?
+   * bytes, in big-endian order; equivalent to {@code
+   * PrimTyps.fromByteArray(new byte[] { ? })}.
+   *
+   * @since 7.0
+   */
+  @GwtIncompatible("doesn't work")
+  public static primtyp fromBytes(byte b1, byte b2, byte b3, byte b4) {
+    return ?
+  }
+
+  /**
+   * Returns an array containing the same values as {@code array}, but
+   * guaranteed to be of a specified minimum length. If {@code array} already
+   * has a length of at least {@code minLength}, it is returned directly.
+   * Otherwise, a new array of size {@code minLength + padding} is returned,
+   * containing the values of {@code array}, and zeroes in the remaining places.
+   *
+   * @param array the source array
+   * @param minLength the minimum length the returned array must guarantee
+   * @param padding an extra amount to "grow" the array by if growth is
+   *     necessary
+   * @throws IllegalArgumentException if {@code minLength} or {@code padding} is
+   *     negative
+   * @return an array containing the values of {@code array}, with guaranteed
+   *     minimum length {@code minLength}
+   */
+  public static primtyp[] ensureCapacity(
+      primtyp[] array, int minLength, int padding) {
+    checkArgument(minLength >= 0, "Invalid minLength: %s", minLength);
+    checkArgument(padding >= 0, "Invalid padding: %s", padding);
+    return (array.length < minLength)
+        ? copyOf(array, minLength + padding)
+        : array;
+  }
+
+  // Arrays.copyOf() requires Java 6
+  private static primtyp[] copyOf(primtyp[] original, int length) {
+    primtyp[] copy = new primtyp[length];
+    System.arraycopy(original, 0, copy, 0, Math.min(original.length, length));
+    return copy;
+  }
+
+  /**
+   * Returns a string containing the supplied {@code primtyp} values separated
+   * by {@code separator}. For example, {@code join("-", 1?, 2?, 3?)} returns
+   * the string {@code "1-2-3"}.
+   *
+   * @param separator the text that should appear between consecutive values in
+   *     the resulting string (but not at the start or end)
+   * @param array an array of {@code primtyp} values, possibly empty
+   */
+  public static String join(String separator, primtyp... array) {
+    checkNotNull(separator);
+    if (array.length == 0) {
+      return "";
+    }
+
+    // For pre-sizing a builder, just get the right order of magnitude
+    StringBuilder builder = new StringBuilder(array.length * ??);
+    builder.append(array[0]);
+    for (int i = 1; i < array.length; i++) {
+      builder.append(separator).append(array[i]);
+    }
+    return builder.toString();
+  }
+
+  /**
+   * Returns a comparator that compares two {@code primtyp} arrays
+   * lexicographically. That is, it compares, using {@link
+   * #compare(primtyp, primtyp)}), the first pair of values that follow any
+   * common prefix, or when one array is a prefix of the other, treats the
+   * shorter array as the lesser. For example, {@code [] < [1] < [1, 2] < [2]}.
+   *
+   * <p>The returned comparator is inconsistent with {@link
+   * Object#equals(Object)} (since arrays support only identity equality), but
+   * it is consistent with {@link Arrays#equals(primtyp[], primtyp[])}.
+   *
+   * @see <a href="http://en.wikipedia.org/wiki/Lexicographical_order">
+   *     Lexicographical order article at Wikipedia</a>
+   * @since 2.0
+   */
+  public static Comparator<primtyp[]> lexicographicalComparator() {
+    return LexicographicalComparator.INSTANCE;
+  }
+
+  private enum LexicographicalComparator implements Comparator<primtyp[]> {
+    INSTANCE;
+
+    @Override
+    public int compare(primtyp[] left, primtyp[] right) {
+      int minLength = Math.min(left.length, right.length);
+      for (int i = 0; i < minLength; i++) {
+        int result = PrimTyps.compare(left[i], right[i]);
+        if (result != 0) {
+          return result;
+        }
+      }
+      return left.length - right.length;
+    }
+  }
+
+  /**
+   * Copies a collection of {@code WrapperCl} instances into a new array of
+   * primitive {@code primtyp} values.
+   *
+   * <p>Elements are copied from the argument collection as if by {@code
+   * collection.toArray()}.  Calling this method is as thread-safe as calling
+   * that method.
+   *
+   * @param collection a collection of {@code WrapperCl} objects
+   * @return an array containing the same values as {@code collection}, in the
+   *     same order, converted to primitives
+   * @throws NullPointerException if {@code collection} or any of its elements
+   *     is null
+   */
+  public static primtyp[] toArray(Collection<WrapperCl> collection) {
+    if (collection instanceof PrimTypArrayAsList) {
+      return ((PrimTypArrayAsList) collection).toPrimTypArray();
+    }
+
+    Object[] boxedArray = collection.toArray();
+    int len = boxedArray.length;
+    primtyp[] array = new primtyp[len];
+    for (int i = 0; i < len; i++) {
+      // checkNotNull for GWT (do not optimize)
+      array[i] = (WrapperCl) checkNotNull(boxedArray[i]);
+    }
+    return array;
+  }
+
+  /**
+   * Returns a fixed-size list backed by the specified array, similar to {@link
+   * Arrays#asList(Object[])}. The list supports {@link List#set(int, Object)},
+   * but any attempt to set a value to {@code null} will result in a {@link
+   * NullPointerException}.
+   *
+   * <p>The returned list maintains the values, but not the identities, of
+   * {@code WrapperCl} objects written to or read from it.  For example, whether
+   * {@code list.get(0) == list.get(0)} is true for the returned list is
+   * unspecified.
+   *
+   * @param backingArray the array to back the list
+   * @return a list view of the array
+   */
+  public static List<WrapperCl> asList(primtyp... backingArray) {
+    if (backingArray.length == 0) {
+      return Collections.emptyList();
+    }
+    return new PrimTypArrayAsList(backingArray);
+  }
+
+  @GwtCompatible
+  private static class PrimTypArrayAsList extends AbstractList<WrapperCl>
+      implements RandomAccess, Serializable {
+    final primtyp[] array;
+    final int start;
+    final int end;
+
+    PrimTypArrayAsList(primtyp[] array) {
+      this(array, 0, array.length);
+    }
+
+    PrimTypArrayAsList(primtyp[] array, int start, int end) {
+      this.array = array;
+      this.start = start;
+      this.end = end;
+    }
+
+    @Override public int size() {
+      return end - start;
+    }
+
+    @Override public boolean isEmpty() {
+      return false;
+    }
+
+    @Override public WrapperCl get(int index) {
+      checkElementIndex(index, size());
+      return array[start + index];
+    }
+
+    @Override public boolean contains(Object target) {
+      // Overridden to prevent a ton of boxing
+      return (target instanceof WrapperCl)
+          && PrimTyps.indexOf(array, (WrapperCl) target, start, end) != -1;
+    }
+
+    @Override public int indexOf(Object target) {
+      // Overridden to prevent a ton of boxing
+      if (target instanceof WrapperCl) {
+        int i = PrimTyps.indexOf(array, (WrapperCl) target, start, end);
+        if (i >= 0) {
+          return i - start;
+        }
+      }
+      return -1;
+    }
+
+    @Override public int lastIndexOf(Object target) {
+      // Overridden to prevent a ton of boxing
+      if (target instanceof WrapperCl) {
+        int i = PrimTyps.lastIndexOf(array, (WrapperCl) target, start, end);
+        if (i >= 0) {
+          return i - start;
+        }
+      }
+      return -1;
+    }
+
+    @Override public WrapperCl set(int index, WrapperCl element) {
+      checkElementIndex(index, size());
+      primtyp oldValue = array[start + index];
+      array[start + index] = checkNotNull(element);  // checkNotNull for GWT (do not optimize)
+      return oldValue;
+    }
+
+    @Override public List<WrapperCl> subList(int fromIndex, int toIndex) {
+      int size = size();
+      checkPositionIndexes(fromIndex, toIndex, size);
+      if (fromIndex == toIndex) {
+        return Collections.emptyList();
+      }
+      return new PrimTypArrayAsList(array, start + fromIndex, start + toIndex);
+    }
+
+    @Override public boolean equals(Object object) {
+      if (object == this) {
+        return true;
+      }
+      if (object instanceof PrimTypArrayAsList) {
+        PrimTypArrayAsList that = (PrimTypArrayAsList) object;
+        int size = size();
+        if (that.size() != size) {
+          return false;
+        }
+        for (int i = 0; i < size; i++) {
+          if (array[start + i] != that.array[that.start + i]) {
+            return false;
+          }
+        }
+        return true;
+      }
+      return super.equals(object);
+    }
+
+    @Override public int hashCode() {
+      int result = 1;
+      for (int i = start; i < end; i++) {
+        result = 31 * result + PrimTyps.hashCode(array[i]);
+      }
+      return result;
+    }
+
+    @Override public String toString() {
+      StringBuilder builder = new StringBuilder(size() * ??);
+      builder.append('[').append(array[start]);
+      for (int i = start + 1; i < end; i++) {
+        builder.append(", ").append(array[i]);
+      }
+      return builder.append(']').toString();
+    }
+
+    primtyp[] toPrimTypArray() {
+      // Arrays.copyOfRange() requires Java 6
+      int size = size();
+      primtyp[] result = new primtyp[size];
+      System.arraycopy(array, start, result, 0, size);
+      return result;
+    }
+
+    private static final long serialVersionUID = 0;
+  }
+}
+--EOF--
+
diff --git a/guava/src/com/google/common/primitives/package-info.java b/guava/src/com/google/common/primitives/package-info.java
new file mode 100644
index 0000000..a3b3a01
--- /dev/null
+++ b/guava/src/com/google/common/primitives/package-info.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+/**
+ * Static utilities for working with the eight primitive types and {@code void}.
+ *
+ * <p>This package is a part of the open-source
+ * <a href="http://guava-libraries.googlecode.com">Guava libraries</a>.
+ *
+ * <h2>Contents</h2>
+ *
+ * <h3>General static utilities</h3>
+ *
+ * <ul>
+ * <li>{@link com.google.common.primitives.Primitives}
+ * </ul>
+ *
+ * <h3>Per-type static utilities</h3>
+ *
+ * <ul>
+ * <li>{@link com.google.common.primitives.Booleans}
+ * <li>{@link com.google.common.primitives.Bytes}
+ *   <ul>
+ *     <li>{@link com.google.common.primitives.SignedBytes}
+ *     <li>{@link com.google.common.primitives.UnsignedBytes}
+ *   </ul>
+ * <li>{@link com.google.common.primitives.Chars}
+ * <li>{@link com.google.common.primitives.Doubles}
+ * <li>{@link com.google.common.primitives.Floats}
+ * <li>{@link com.google.common.primitives.Ints}
+ *   <ul>
+ *     <li>{@link com.google.common.primitives.UnsignedInts}
+ *   </ul>
+ * <li>{@link com.google.common.primitives.Longs}
+ *   <ul>
+ *     <li>{@link com.google.common.primitives.UnsignedLongs}
+ *   </ul>
+ * <li>{@link com.google.common.primitives.Shorts}
+ * </ul>
+ *
+ * <h3>Value types</h3>
+ * <ul>
+ *   <li>{@link com.google.common.primitives.UnsignedInteger}
+ *   <li>{@link com.google.common.primitives.UnsignedLong}
+ * </ul>
+ */
+@ParametersAreNonnullByDefault
+package com.google.common.primitives;
+
+import javax.annotation.ParametersAreNonnullByDefault;
diff --git a/guava/src/com/google/common/util/concurrent/AbstractCheckedFuture.java b/guava/src/com/google/common/util/concurrent/AbstractCheckedFuture.java
new file mode 100644
index 0000000..dfaf343
--- /dev/null
+++ b/guava/src/com/google/common/util/concurrent/AbstractCheckedFuture.java
@@ -0,0 +1,117 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import com.google.common.annotations.Beta;
+
+import java.util.concurrent.CancellationException;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+
+/**
+ * A delegating wrapper around a {@link ListenableFuture} that adds support for
+ * the {@link #checkedGet()} and {@link #checkedGet(long, TimeUnit)} methods.
+ *
+ * @author Sven Mawson
+ * @since 1.0
+ */
+@Beta
+public abstract class AbstractCheckedFuture<V, X extends Exception>
+    extends ForwardingListenableFuture.SimpleForwardingListenableFuture<V>
+    implements CheckedFuture<V, X> {
+  /**
+   * Constructs an {@code AbstractCheckedFuture} that wraps a delegate.
+   */
+  protected AbstractCheckedFuture(ListenableFuture<V> delegate) {
+    super(delegate);
+  }
+
+  /**
+   * Translates from an {@link InterruptedException},
+   * {@link CancellationException} or {@link ExecutionException} thrown by
+   * {@code get} to an exception of type {@code X} to be thrown by
+   * {@code checkedGet}. Subclasses must implement this method.
+   *
+   * <p>If {@code e} is an {@code InterruptedException}, the calling
+   * {@code checkedGet} method has already restored the interrupt after catching
+   * the exception. If an implementation of {@link #mapException(Exception)}
+   * wishes to swallow the interrupt, it can do so by calling
+   * {@link Thread#interrupted()}.
+   *
+   * <p>Subclasses may choose to throw, rather than return, a subclass of
+   * {@code RuntimeException} to allow creating a CheckedFuture that throws
+   * both checked and unchecked exceptions.
+   */
+  protected abstract X mapException(Exception e);
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>This implementation calls {@link #get()} and maps that method's standard
+   * exceptions to instances of type {@code X} using {@link #mapException}.
+   *
+   * <p>In addition, if {@code get} throws an {@link InterruptedException}, this
+   * implementation will set the current thread's interrupt status before
+   * calling {@code mapException}.
+   *
+   * @throws X if {@link #get()} throws an {@link InterruptedException},
+   *         {@link CancellationException}, or {@link ExecutionException}
+   */
+  @Override
+  public V checkedGet() throws X {
+    try {
+      return get();
+    } catch (InterruptedException e) {
+      Thread.currentThread().interrupt();
+      throw mapException(e);
+    } catch (CancellationException e) {
+      throw mapException(e);
+    } catch (ExecutionException e) {
+      throw mapException(e);
+    }
+  }
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>This implementation calls {@link #get(long, TimeUnit)} and maps that
+   * method's standard exceptions (excluding {@link TimeoutException}, which is
+   * propagated) to instances of type {@code X} using {@link #mapException}.
+   *
+   * <p>In addition, if {@code get} throws an {@link InterruptedException}, this
+   * implementation will set the current thread's interrupt status before
+   * calling {@code mapException}.
+   *
+   * @throws X if {@link #get()} throws an {@link InterruptedException},
+   *         {@link CancellationException}, or {@link ExecutionException}
+   * @throws TimeoutException {@inheritDoc}
+   */
+  @Override
+  public V checkedGet(long timeout, TimeUnit unit) throws TimeoutException, X {
+    try {
+      return get(timeout, unit);
+    } catch (InterruptedException e) {
+      Thread.currentThread().interrupt();
+      throw mapException(e);
+    } catch (CancellationException e) {
+      throw mapException(e);
+    } catch (ExecutionException e) {
+      throw mapException(e);
+    }
+  }
+}
diff --git a/guava/src/com/google/common/util/concurrent/AbstractExecutionThreadService.java b/guava/src/com/google/common/util/concurrent/AbstractExecutionThreadService.java
new file mode 100644
index 0000000..8136d23
--- /dev/null
+++ b/guava/src/com/google/common/util/concurrent/AbstractExecutionThreadService.java
@@ -0,0 +1,172 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import com.google.common.annotations.Beta;
+import com.google.common.base.Throwables;
+
+import java.util.concurrent.Executor;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * Base class for services that can implement {@link #startUp}, {@link #run} and
+ * {@link #shutDown} methods. This class uses a single thread to execute the
+ * service; consider {@link AbstractService} if you would like to manage any
+ * threading manually.
+ *
+ * @author Jesse Wilson
+ * @since 1.0
+ */
+@Beta
+public abstract class AbstractExecutionThreadService implements Service {
+  private static final Logger logger = Logger.getLogger(
+      AbstractExecutionThreadService.class.getName());
+  
+  /* use AbstractService for state management */
+  private final Service delegate = new AbstractService() {
+    @Override protected final void doStart() {
+      executor().execute(new Runnable() {
+        @Override
+        public void run() {
+          try {
+            startUp();
+            notifyStarted();
+
+            if (isRunning()) {
+              try {
+                AbstractExecutionThreadService.this.run();
+              } catch (Throwable t) {
+                try {
+                  shutDown();
+                } catch (Exception ignored) {
+                  logger.log(Level.WARNING, 
+                      "Error while attempting to shut down the service after failure.", ignored);
+                }
+                throw t;
+              }
+            }
+
+            shutDown();
+            notifyStopped();
+          } catch (Throwable t) {
+            notifyFailed(t);
+            throw Throwables.propagate(t);
+          }
+        }
+      });
+    }
+
+    @Override protected void doStop() {
+      triggerShutdown();
+    }
+  };
+
+  /**
+   * Start the service. This method is invoked on the execution thread.
+   */
+  protected void startUp() throws Exception {}
+
+  /**
+   * Run the service. This method is invoked on the execution thread.
+   * Implementations must respond to stop requests. You could poll for lifecycle
+   * changes in a work loop:
+   * <pre>
+   *   public void run() {
+   *     while ({@link #isRunning()}) {
+   *       // perform a unit of work
+   *     }
+   *   }
+   * </pre>
+   * ...or you could respond to stop requests by implementing {@link
+   * #triggerShutdown()}, which should cause {@link #run()} to return.
+   */
+  protected abstract void run() throws Exception;
+
+  /**
+   * Stop the service. This method is invoked on the execution thread.
+   */
+  // TODO: consider supporting a TearDownTestCase-like API
+  protected void shutDown() throws Exception {}
+
+  /**
+   * Invoked to request the service to stop.
+   */
+  protected void triggerShutdown() {}
+
+  /**
+   * Returns the {@link Executor} that will be used to run this service.
+   * Subclasses may override this method to use a custom {@link Executor}, which
+   * may configure its worker thread with a specific name, thread group or
+   * priority. The returned executor's {@link Executor#execute(Runnable)
+   * execute()} method is called when this service is started, and should return
+   * promptly.
+   * 
+   * <p>The default implementation returns a new {@link Executor} that sets the 
+   * name of its threads to the string returned by {@link #getServiceName}
+   */
+  protected Executor executor() {
+    return new Executor() {
+      @Override
+      public void execute(Runnable command) {
+        new Thread(command, getServiceName()).start();
+      }
+    };
+  }
+
+  @Override public String toString() {
+    return getServiceName() + " [" + state() + "]";
+  }
+
+  // We override instead of using ForwardingService so that these can be final.
+
+  @Override public final ListenableFuture<State> start() {
+    return delegate.start();
+  }
+
+  @Override public final State startAndWait() {
+    return delegate.startAndWait();
+  }
+
+  @Override public final boolean isRunning() {
+    return delegate.isRunning();
+  }
+
+  @Override public final State state() {
+    return delegate.state();
+  }
+
+  @Override public final ListenableFuture<State> stop() {
+    return delegate.stop();
+  }
+
+  @Override public final State stopAndWait() {
+    return delegate.stopAndWait();
+  }
+
+  /**
+   * Returns the name of this service. {@link AbstractExecutionThreadService} may include the name
+   * in debugging output.
+   *
+   * <p>Subclasses may override this method.
+   *
+   * @since 10.0
+   */
+  protected String getServiceName() {
+    return getClass().getSimpleName();
+  }
+}
diff --git a/guava/src/com/google/common/util/concurrent/AbstractFuture.java b/guava/src/com/google/common/util/concurrent/AbstractFuture.java
new file mode 100644
index 0000000..bef3d3d
--- /dev/null
+++ b/guava/src/com/google/common/util/concurrent/AbstractFuture.java
@@ -0,0 +1,366 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.util.concurrent.CancellationException;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Executor;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+import java.util.concurrent.locks.AbstractQueuedSynchronizer;
+
+import javax.annotation.Nullable;
+
+/**
+ * An abstract implementation of the {@link ListenableFuture} interface. This
+ * class is preferable to {@link java.util.concurrent.FutureTask} for two
+ * reasons: It implements {@code ListenableFuture}, and it does not implement
+ * {@code Runnable}. (If you want a {@code Runnable} implementation of {@code
+ * ListenableFuture}, create a {@link ListenableFutureTask}, or submit your
+ * tasks to a {@link ListeningExecutorService}.)
+ *
+ * <p>This class implements all methods in {@code ListenableFuture}.
+ * Subclasses should provide a way to set the result of the computation through
+ * the protected methods {@link #set(Object)} and
+ * {@link #setException(Throwable)}. Subclasses may also override {@link
+ * #interruptTask()}, which will be invoked automatically if a call to {@link
+ * #cancel(boolean) cancel(true)} succeeds in canceling the future.
+ *
+ * <p>{@code AbstractFuture} uses an {@link AbstractQueuedSynchronizer} to deal
+ * with concurrency issues and guarantee thread safety.
+ *
+ * <p>The state changing methods all return a boolean indicating success or
+ * failure in changing the future's state.  Valid states are running,
+ * completed, failed, or cancelled.
+ *
+ * <p>This class uses an {@link ExecutionList} to guarantee that all registered
+ * listeners will be executed, either when the future finishes or, for listeners
+ * that are added after the future completes, immediately.
+ * {@code Runnable}-{@code Executor} pairs are stored in the execution list but
+ * are not necessarily executed in the order in which they were added.  (If a
+ * listener is added after the Future is complete, it will be executed
+ * immediately, even if earlier listeners have not been executed. Additionally,
+ * executors need not guarantee FIFO execution, or different listeners may run
+ * in different executors.)
+ *
+ * @author Sven Mawson
+ * @since 1.0
+ */
+public abstract class AbstractFuture<V> implements ListenableFuture<V> {
+
+  /** Synchronization control for AbstractFutures. */
+  private final Sync<V> sync = new Sync<V>();
+
+  // The execution list to hold our executors.
+  private final ExecutionList executionList = new ExecutionList();
+
+  /*
+   * Improve the documentation of when InterruptedException is thrown. Our
+   * behavior matches the JDK's, but the JDK's documentation is misleading.
+   */
+  /**
+   * {@inheritDoc}
+   *
+   * <p>The default {@link AbstractFuture} implementation throws {@code
+   * InterruptedException} if the current thread is interrupted before or during
+   * the call, even if the value is already available.
+   *
+   * @throws InterruptedException if the current thread was interrupted before
+   *     or during the call (optional but recommended).
+   * @throws CancellationException {@inheritDoc}
+   */
+  @Override
+  public V get(long timeout, TimeUnit unit) throws InterruptedException,
+      TimeoutException, ExecutionException {
+    return sync.get(unit.toNanos(timeout));
+  }
+
+  /*
+   * Improve the documentation of when InterruptedException is thrown. Our
+   * behavior matches the JDK's, but the JDK's documentation is misleading.
+   */
+  /**
+   * {@inheritDoc}
+   *
+   * <p>The default {@link AbstractFuture} implementation throws {@code
+   * InterruptedException} if the current thread is interrupted before or during
+   * the call, even if the value is already available.
+   *
+   * @throws InterruptedException if the current thread was interrupted before
+   *     or during the call (optional but recommended).
+   * @throws CancellationException {@inheritDoc}
+   */
+  @Override
+  public V get() throws InterruptedException, ExecutionException {
+    return sync.get();
+  }
+
+  @Override
+  public boolean isDone() {
+    return sync.isDone();
+  }
+
+  @Override
+  public boolean isCancelled() {
+    return sync.isCancelled();
+  }
+
+  @Override
+  public boolean cancel(boolean mayInterruptIfRunning) {
+    if (!sync.cancel()) {
+      return false;
+    }
+    executionList.execute();
+    if (mayInterruptIfRunning) {
+      interruptTask();
+    }
+    return true;
+  }
+
+  /**
+   * Subclasses can override this method to implement interruption of the
+   * future's computation. The method is invoked automatically by a successful
+   * call to {@link #cancel(boolean) cancel(true)}.
+   *
+   * <p>The default implementation does nothing.
+   *
+   * @since 10.0
+   */
+  protected void interruptTask() {
+  }
+
+  /**
+   * {@inheritDoc}
+   *
+   * @since 10.0
+   */
+  @Override
+  public void addListener(Runnable listener, Executor exec) {
+    executionList.add(listener, exec);
+  }
+
+  /**
+   * Subclasses should invoke this method to set the result of the computation
+   * to {@code value}.  This will set the state of the future to
+   * {@link AbstractFuture.Sync#COMPLETED} and invoke the listeners if the
+   * state was successfully changed.
+   *
+   * @param value the value that was the result of the task.
+   * @return true if the state was successfully changed.
+   */
+  protected boolean set(@Nullable V value) {
+    boolean result = sync.set(value);
+    if (result) {
+      executionList.execute();
+    }
+    return result;
+  }
+
+  /**
+   * Subclasses should invoke this method to set the result of the computation
+   * to an error, {@code throwable}.  This will set the state of the future to
+   * {@link AbstractFuture.Sync#COMPLETED} and invoke the listeners if the
+   * state was successfully changed.
+   *
+   * @param throwable the exception that the task failed with.
+   * @return true if the state was successfully changed.
+   * @throws Error if the throwable was an {@link Error}.
+   */
+  protected boolean setException(Throwable throwable) {
+    boolean result = sync.setException(checkNotNull(throwable));
+    if (result) {
+      executionList.execute();
+    }
+
+    // If it's an Error, we want to make sure it reaches the top of the
+    // call stack, so we rethrow it.
+    if (throwable instanceof Error) {
+      throw (Error) throwable;
+    }
+    return result;
+  }
+
+  /**
+   * <p>Following the contract of {@link AbstractQueuedSynchronizer} we create a
+   * private subclass to hold the synchronizer.  This synchronizer is used to
+   * implement the blocking and waiting calls as well as to handle state changes
+   * in a thread-safe manner.  The current state of the future is held in the
+   * Sync state, and the lock is released whenever the state changes to either
+   * {@link #COMPLETED} or {@link #CANCELLED}.
+   *
+   * <p>To avoid races between threads doing release and acquire, we transition
+   * to the final state in two steps.  One thread will successfully CAS from
+   * RUNNING to COMPLETING, that thread will then set the result of the
+   * computation, and only then transition to COMPLETED or CANCELLED.
+   *
+   * <p>We don't use the integer argument passed between acquire methods so we
+   * pass around a -1 everywhere.
+   */
+  static final class Sync<V> extends AbstractQueuedSynchronizer {
+
+    private static final long serialVersionUID = 0L;
+
+    /* Valid states. */
+    static final int RUNNING = 0;
+    static final int COMPLETING = 1;
+    static final int COMPLETED = 2;
+    static final int CANCELLED = 4;
+
+    private V value;
+    private Throwable exception;
+
+    /*
+     * Acquisition succeeds if the future is done, otherwise it fails.
+     */
+    @Override
+    protected int tryAcquireShared(int ignored) {
+      if (isDone()) {
+        return 1;
+      }
+      return -1;
+    }
+
+    /*
+     * We always allow a release to go through, this means the state has been
+     * successfully changed and the result is available.
+     */
+    @Override
+    protected boolean tryReleaseShared(int finalState) {
+      setState(finalState);
+      return true;
+    }
+
+    /**
+     * Blocks until the task is complete or the timeout expires.  Throws a
+     * {@link TimeoutException} if the timer expires, otherwise behaves like
+     * {@link #get()}.
+     */
+    V get(long nanos) throws TimeoutException, CancellationException,
+        ExecutionException, InterruptedException {
+
+      // Attempt to acquire the shared lock with a timeout.
+      if (!tryAcquireSharedNanos(-1, nanos)) {
+        throw new TimeoutException("Timeout waiting for task.");
+      }
+
+      return getValue();
+    }
+
+    /**
+     * Blocks until {@link #complete(Object, Throwable, int)} has been
+     * successfully called.  Throws a {@link CancellationException} if the task
+     * was cancelled, or a {@link ExecutionException} if the task completed with
+     * an error.
+     */
+    V get() throws CancellationException, ExecutionException,
+        InterruptedException {
+
+      // Acquire the shared lock allowing interruption.
+      acquireSharedInterruptibly(-1);
+      return getValue();
+    }
+
+    /**
+     * Implementation of the actual value retrieval.  Will return the value
+     * on success, an exception on failure, a cancellation on cancellation, or
+     * an illegal state if the synchronizer is in an invalid state.
+     */
+    private V getValue() throws CancellationException, ExecutionException {
+      int state = getState();
+      switch (state) {
+        case COMPLETED:
+          if (exception != null) {
+            throw new ExecutionException(exception);
+          } else {
+            return value;
+          }
+
+        case CANCELLED:
+          throw new CancellationException("Task was cancelled.");
+
+        default:
+          throw new IllegalStateException(
+              "Error, synchronizer in invalid state: " + state);
+      }
+    }
+
+    /**
+     * Checks if the state is {@link #COMPLETED} or {@link #CANCELLED}.
+     */
+    boolean isDone() {
+      return (getState() & (COMPLETED | CANCELLED)) != 0;
+    }
+
+    /**
+     * Checks if the state is {@link #CANCELLED}.
+     */
+    boolean isCancelled() {
+      return getState() == CANCELLED;
+    }
+
+    /**
+     * Transition to the COMPLETED state and set the value.
+     */
+    boolean set(@Nullable V v) {
+      return complete(v, null, COMPLETED);
+    }
+
+    /**
+     * Transition to the COMPLETED state and set the exception.
+     */
+    boolean setException(Throwable t) {
+      return complete(null, t, COMPLETED);
+    }
+
+    /**
+     * Transition to the CANCELLED state.
+     */
+    boolean cancel() {
+      return complete(null, null, CANCELLED);
+    }
+
+    /**
+     * Implementation of completing a task.  Either {@code v} or {@code t} will
+     * be set but not both.  The {@code finalState} is the state to change to
+     * from {@link #RUNNING}.  If the state is not in the RUNNING state we
+     * return {@code false} after waiting for the state to be set to a valid
+     * final state ({@link #COMPLETED} or {@link #CANCELLED}).
+     *
+     * @param v the value to set as the result of the computation.
+     * @param t the exception to set as the result of the computation.
+     * @param finalState the state to transition to.
+     */
+    private boolean complete(@Nullable V v, @Nullable Throwable t,
+        int finalState) {
+      boolean doCompletion = compareAndSetState(RUNNING, COMPLETING);
+      if (doCompletion) {
+        // If this thread successfully transitioned to COMPLETING, set the value
+        // and exception and then release to the final state.
+        this.value = v;
+        this.exception = t;
+        releaseShared(finalState);
+      } else if (getState() == COMPLETING) {
+        // If some other thread is currently completing the future, block until
+        // they are done so we can guarantee completion.
+        acquireShared(-1);
+      }
+      return doCompletion;
+    }
+  }
+}
diff --git a/guava/src/com/google/common/util/concurrent/AbstractIdleService.java b/guava/src/com/google/common/util/concurrent/AbstractIdleService.java
new file mode 100644
index 0000000..504a6bc
--- /dev/null
+++ b/guava/src/com/google/common/util/concurrent/AbstractIdleService.java
@@ -0,0 +1,128 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import com.google.common.annotations.Beta;
+import com.google.common.base.Throwables;
+
+import java.util.concurrent.Executor;
+
+/**
+ * Base class for services that do not need a thread while "running"
+ * but may need one during startup and shutdown. Subclasses can
+ * implement {@link #startUp} and {@link #shutDown} methods, each
+ * which run in a executor which by default uses a separate thread
+ * for each method.
+ *
+ * @author Chris Nokleberg
+ * @since 1.0
+ */
+@Beta
+public abstract class AbstractIdleService implements Service {
+
+  /* use AbstractService for state management */
+  private final Service delegate = new AbstractService() {
+    @Override protected final void doStart() {
+      executor(State.STARTING).execute(new Runnable() {
+        @Override public void run() {
+          try {
+            startUp();
+            notifyStarted();
+          } catch (Throwable t) {
+            notifyFailed(t);
+            throw Throwables.propagate(t);
+          }
+        }
+      });
+    }
+
+    @Override protected final void doStop() {
+      executor(State.STOPPING).execute(new Runnable() {
+        @Override public void run() {
+          try {
+            shutDown();
+            notifyStopped();
+          } catch (Throwable t) {
+            notifyFailed(t);
+            throw Throwables.propagate(t);
+          }
+        }
+      });
+    }
+  };
+
+  /** Start the service. */
+  protected abstract void startUp() throws Exception;
+
+  /** Stop the service. */
+  protected abstract void shutDown() throws Exception;
+
+  /**
+   * Returns the {@link Executor} that will be used to run this service.
+   * Subclasses may override this method to use a custom {@link Executor}, which
+   * may configure its worker thread with a specific name, thread group or
+   * priority. The returned executor's {@link Executor#execute(Runnable)
+   * execute()} method is called when this service is started and stopped,
+   * and should return promptly.
+   *
+   * @param state {@link Service.State#STARTING} or
+   *     {@link Service.State#STOPPING}, used by the default implementation for
+   *     naming the thread
+   */
+  protected Executor executor(final State state) {
+    return new Executor() {
+      @Override
+      public void execute(Runnable command) {
+        new Thread(command, getServiceName() + " " + state).start();
+      }
+    };
+  }
+
+  @Override public String toString() {
+    return getServiceName() + " [" + state() + "]";
+  }
+
+  // We override instead of using ForwardingService so that these can be final.
+
+  @Override public final ListenableFuture<State> start() {
+    return delegate.start();
+  }
+
+  @Override public final State startAndWait() {
+    return delegate.startAndWait();
+  }
+
+  @Override public final boolean isRunning() {
+    return delegate.isRunning();
+  }
+
+  @Override public final State state() {
+    return delegate.state();
+  }
+
+  @Override public final ListenableFuture<State> stop() {
+    return delegate.stop();
+  }
+
+  @Override public final State stopAndWait() {
+    return delegate.stopAndWait();
+  }
+  
+  private String getServiceName() {
+    return getClass().getSimpleName();
+  }
+}
diff --git a/guava/src/com/google/common/util/concurrent/AbstractListeningExecutorService.java b/guava/src/com/google/common/util/concurrent/AbstractListeningExecutorService.java
new file mode 100644
index 0000000..24f596f
--- /dev/null
+++ b/guava/src/com/google/common/util/concurrent/AbstractListeningExecutorService.java
@@ -0,0 +1,236 @@
+/*
+ * This file is a modified version of
+ * http://gee.cs.oswego.edu/cgi-bin/viewcvs.cgi/jsr166/src/main/java/util/concurrent/AbstractExecutorService.java?revision=1.35
+ * which contained the following notice:
+ *
+ * Written by Doug Lea with assistance from members of JCP JSR-166 Expert Group and released to the
+ * public domain, as explained at http://creativecommons.org/publicdomain/zero/1.0/
+ *
+ * Rationale for copying:
+ * Guava targets JDK5, whose AbstractExecutorService class lacks the newTaskFor protected
+ * customization methods needed by MoreExecutors.listeningDecorator. This class is a copy of
+ * AbstractExecutorService from the JSR166 CVS repository. It contains the desired methods.
+ */
+
+package com.google.common.util.concurrent;
+
+import static com.google.common.base.Preconditions.checkArgument;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.concurrent.Callable;
+import java.util.concurrent.CancellationException;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ExecutorCompletionService;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+
+/**
+ * Implements {@link ListeningExecutorService} execution methods atop the abstract {@link #execute}
+ * method. More concretely, the {@code submit}, {@code invokeAny} and {@code invokeAll} methods
+ * create {@link ListenableFutureTask} instances and pass them to {@link #execute}.
+ *
+ * <p>In addition to {@link #execute}, subclasses must implement all methods related to shutdown and
+ * termination.
+ *
+ * @author Doug Lea
+ */
+abstract class AbstractListeningExecutorService implements ListeningExecutorService {
+  @Override public ListenableFuture<?> submit(Runnable task) {
+    ListenableFutureTask<Void> ftask = ListenableFutureTask.create(task, null);
+    execute(ftask);
+    return ftask;
+  }
+
+  @Override public <T> ListenableFuture<T> submit(Runnable task, T result) {
+    ListenableFutureTask<T> ftask = ListenableFutureTask.create(task, result);
+    execute(ftask);
+    return ftask;
+  }
+
+  @Override public <T> ListenableFuture<T> submit(Callable<T> task) {
+    ListenableFutureTask<T> ftask = ListenableFutureTask.create(task);
+    execute(ftask);
+    return ftask;
+  }
+
+  /**
+   * the main mechanics of invokeAny.
+   */
+  private <T> T doInvokeAny(Collection<? extends Callable<T>> tasks, boolean timed, long nanos)
+      throws InterruptedException, ExecutionException, TimeoutException {
+    int ntasks = tasks.size();
+    checkArgument(ntasks > 0);
+    List<Future<T>> futures = new ArrayList<Future<T>>(ntasks);
+    ExecutorCompletionService<T> ecs = new ExecutorCompletionService<T>(this);
+
+    // For efficiency, especially in executors with limited
+    // parallelism, check to see if previously submitted tasks are
+    // done before submitting more of them. This interleaving
+    // plus the exception mechanics account for messiness of main
+    // loop.
+
+    try {
+      // Record exceptions so that if we fail to obtain any
+      // result, we can throw the last exception we got.
+      ExecutionException ee = null;
+      long lastTime = timed ? System.nanoTime() : 0;
+      Iterator<? extends Callable<T>> it = tasks.iterator();
+
+      // Start one task for sure; the rest incrementally
+      futures.add(ecs.submit(it.next()));
+      --ntasks;
+      int active = 1;
+
+      for (;;) {
+        Future<T> f = ecs.poll();
+        if (f == null) {
+          if (ntasks > 0) {
+            --ntasks;
+            futures.add(ecs.submit(it.next()));
+            ++active;
+          } else if (active == 0) {
+            break;
+          } else if (timed) {
+            f = ecs.poll(nanos, TimeUnit.NANOSECONDS);
+            if (f == null) {
+              throw new TimeoutException();
+            }
+            long now = System.nanoTime();
+            nanos -= now - lastTime;
+            lastTime = now;
+          } else {
+            f = ecs.take();
+          }
+        }
+        if (f != null) {
+          --active;
+          try {
+            return f.get();
+          } catch (ExecutionException eex) {
+            ee = eex;
+          } catch (RuntimeException rex) {
+            ee = new ExecutionException(rex);
+          }
+        }
+      }
+
+      if (ee == null) {
+        ee = new ExecutionException(null);
+      }
+      throw ee;
+    } finally {
+      for (Future<T> f : futures) {
+        f.cancel(true);
+      }
+    }
+  }
+
+  @Override public <T> T invokeAny(Collection<? extends Callable<T>> tasks)
+      throws InterruptedException, ExecutionException {
+    try {
+      return doInvokeAny(tasks, false, 0);
+    } catch (TimeoutException cannotHappen) {
+      throw new AssertionError();
+    }
+  }
+
+  @Override public <T> T invokeAny(
+      Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit)
+      throws InterruptedException, ExecutionException, TimeoutException {
+    return doInvokeAny(tasks, true, unit.toNanos(timeout));
+  }
+
+  @Override public <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks)
+      throws InterruptedException {
+    if (tasks == null) {
+      throw new NullPointerException();
+    }
+    List<Future<T>> futures = new ArrayList<Future<T>>(tasks.size());
+    boolean done = false;
+    try {
+      for (Callable<T> t : tasks) {
+        ListenableFutureTask<T> f = ListenableFutureTask.create(t);
+        futures.add(f);
+        execute(f);
+      }
+      for (Future<T> f : futures) {
+        if (!f.isDone()) {
+          try {
+            f.get();
+          } catch (CancellationException ignore) {
+          } catch (ExecutionException ignore) {
+          }
+        }
+      }
+      done = true;
+      return futures;
+    } finally {
+      if (!done) {
+        for (Future<T> f : futures) {
+          f.cancel(true);
+        }
+      }
+    }
+  }
+
+  @Override public <T> List<Future<T>> invokeAll(
+      Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit)
+      throws InterruptedException {
+    if (tasks == null || unit == null) {
+      throw new NullPointerException();
+    }
+    long nanos = unit.toNanos(timeout);
+    List<Future<T>> futures = new ArrayList<Future<T>>(tasks.size());
+    boolean done = false;
+    try {
+      for (Callable<T> t : tasks) {
+        futures.add(ListenableFutureTask.create(t));
+      }
+
+      long lastTime = System.nanoTime();
+
+      // Interleave time checks and calls to execute in case
+      // executor doesn't have any/much parallelism.
+      Iterator<Future<T>> it = futures.iterator();
+      while (it.hasNext()) {
+        execute((Runnable) (it.next()));
+        long now = System.nanoTime();
+        nanos -= now - lastTime;
+        lastTime = now;
+        if (nanos <= 0) {
+          return futures;
+        }
+      }
+
+      for (Future<T> f : futures) {
+        if (!f.isDone()) {
+          if (nanos <= 0) {
+            return futures;
+          }
+          try {
+            f.get(nanos, TimeUnit.NANOSECONDS);
+          } catch (CancellationException ignore) {
+          } catch (ExecutionException ignore) {
+          } catch (TimeoutException toe) {
+            return futures;
+          }
+          long now = System.nanoTime();
+          nanos -= now - lastTime;
+          lastTime = now;
+        }
+      }
+      done = true;
+      return futures;
+    } finally {
+      if (!done) {
+        for (Future<T> f : futures) {
+          f.cancel(true);
+        }
+      }
+    }
+  }
+}
diff --git a/guava/src/com/google/common/util/concurrent/AbstractScheduledService.java b/guava/src/com/google/common/util/concurrent/AbstractScheduledService.java
new file mode 100644
index 0000000..f847205
--- /dev/null
+++ b/guava/src/com/google/common/util/concurrent/AbstractScheduledService.java
@@ -0,0 +1,433 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import com.google.common.annotations.Beta;
+import com.google.common.base.Preconditions;
+import com.google.common.base.Throwables;
+
+import java.util.concurrent.Callable;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.locks.ReentrantLock;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.annotation.concurrent.GuardedBy;
+
+/**
+ * Base class for services that can implement {@link #startUp} and {@link #shutDown} but while in 
+ * the "running" state need to perform a periodic task.  Subclasses can implement {@link #startUp},
+ * {@link #shutDown} and also a {@link #runOneIteration} method that will be executed periodically.
+ * 
+ * <p>This class uses the {@link ScheduledExecutorService} returned from {@link #executor} to run
+ * the {@link #startUp} and {@link #shutDown} methods and also uses that service to schedule the 
+ * {@link #runOneIteration} that will be executed periodically as specified by its 
+ * {@link Scheduler}. When this service is asked to stop via {@link #stop} or {@link #stopAndWait}, 
+ * it will cancel the periodic task (but not interrupt it) and wait for it to stop before running 
+ * the {@link #shutDown} method.  
+ * 
+ * <p>Subclasses are guaranteed that the life cycle methods ({@link #runOneIteration}, {@link 
+ * #startUp} and {@link #shutDown}) will never run concurrently. Notably, if any execution of {@link
+ * #runOneIteration} takes longer than its schedule defines, then subsequent executions may start 
+ * late.  Also, all life cycle methods are executed with a lock held, so subclasses can safely 
+ * modify shared state without additional synchronization necessary for visibility to later 
+ * executions of the life cycle methods.
+ * 
+ * <h3>Usage Example</h3>
+ * 
+ * Here is a sketch of a service which crawls a website and uses the scheduling capabilities to 
+ * rate limit itself. <pre> {@code
+ * class CrawlingService extends AbstractScheduledService {
+ *   private Set<Uri> visited;
+ *   private Queue<Uri> toCrawl; 
+ *   protected void startUp() throws Exception {
+ *     toCrawl = readStartingUris();
+ *   }
+ * 
+ *   protected void runOneIteration() throws Exception {
+ *     Uri uri = toCrawl.remove();
+ *     Collection<Uri> newUris = crawl(uri);
+ *     visited.add(uri);
+ *     for (Uri newUri : newUris) {
+ *       if (!visited.contains(newUri)) { toCrawl.add(newUri); }
+ *     }
+ *   }
+ *   
+ *   protected void shutDown() throws Exception {
+ *     saveUris(toCrawl);
+ *   }
+ * 
+ *   protected Scheduler scheduler() {
+ *     return Scheduler.newFixedRateSchedule(0, 1, TimeUnit.SECONDS);
+ *   }
+ * }}</pre>
+ * 
+ * This class uses the life cycle methods to read in a list of starting URIs and save the set of 
+ * outstanding URIs when shutting down.  Also, it takes advantage of the scheduling functionality to
+ * rate limit the number of queries we perform.
+ * 
+ * @author Luke Sandberg
+ * @since 11.0
+ */
+@Beta
+public abstract class AbstractScheduledService implements Service {
+  private static final Logger logger = Logger.getLogger(AbstractScheduledService.class.getName());
+  
+  /**
+   * A scheduler defines the policy for how the {@link AbstractScheduledService} should run its 
+   * task.
+   * 
+   * <p>Consider using the {@link #newFixedDelaySchedule} and {@link #newFixedRateSchedule} factory 
+   * methods, these provide {@link Scheduler} instances for the common use case of running the 
+   * service with a fixed schedule.  If more flexibility is needed then consider subclassing the 
+   * {@link CustomScheduler} abstract class in preference to creating your own {@link Scheduler} 
+   * implementation. 
+   * 
+   * @author Luke Sandberg
+   * @since 11.0
+   */
+  public abstract static class Scheduler {
+    /**
+     * Returns a {@link Scheduler} that schedules the task using the 
+     * {@link ScheduledExecutorService#scheduleWithFixedDelay} method.
+     * 
+     * @param initialDelay the time to delay first execution
+     * @param delay the delay between the termination of one execution and the commencement of the 
+     *        next
+     * @param unit the time unit of the initialDelay and delay parameters
+     */
+    public static Scheduler newFixedDelaySchedule(final long initialDelay, final long delay, 
+        final TimeUnit unit) {
+      return new Scheduler() {
+        @Override
+        public Future<?> schedule(AbstractService service, ScheduledExecutorService executor,
+            Runnable task) {
+          return executor.scheduleWithFixedDelay(task, initialDelay, delay, unit);
+        } 
+      };
+    }
+
+    /**
+     * Returns a {@link Scheduler} that schedules the task using the 
+     * {@link ScheduledExecutorService#scheduleAtFixedRate} method.
+     * 
+     * @param initialDelay the time to delay first execution
+     * @param period the period between successive executions of the task
+     * @param unit the time unit of the initialDelay and period parameters
+     */
+    public static Scheduler newFixedRateSchedule(final long initialDelay, final long period, 
+        final TimeUnit unit) {
+      return new Scheduler() {
+        @Override
+        public Future<?> schedule(AbstractService service, ScheduledExecutorService executor,
+            Runnable task) {
+          return executor.scheduleAtFixedRate(task, initialDelay, period, unit);
+        }
+      };
+    }
+    
+    /** Schedules the task to run on the provided executor on behalf of the service.  */
+    abstract Future<?> schedule(AbstractService service, ScheduledExecutorService executor, 
+        Runnable runnable);
+    
+    private Scheduler() {}
+  }
+  
+  /* use AbstractService for state management */
+  private final AbstractService delegate = new AbstractService() {
+    
+    // A handle to the running task so that we can stop it when a shutdown has been requested.
+    // These two fields are volatile because their values will be accessed from multiple threads.
+    private volatile Future<?> runningTask;
+    private volatile ScheduledExecutorService executorService;
+    
+    // This lock protects the task so we can ensure that none of the template methods (startUp, 
+    // shutDown or runOneIteration) run concurrently with one another.
+    private final ReentrantLock lock = new ReentrantLock();
+    
+    private final Runnable task = new Runnable() {
+      @Override public void run() {
+        lock.lock();
+        try {
+          AbstractScheduledService.this.runOneIteration();
+        } catch (Throwable t) {
+          try {
+            shutDown();
+          } catch (Exception ignored) {
+            logger.log(Level.WARNING, 
+                "Error while attempting to shut down the service after failure.", ignored);
+          }
+          notifyFailed(t);
+          throw Throwables.propagate(t);
+        } finally {
+          lock.unlock();
+        }
+      }
+    };
+    
+    @Override protected final void doStart() {
+      executorService = executor();
+      executorService.execute(new Runnable() {
+        @Override public void run() {
+          lock.lock();
+          try {
+            startUp();
+            runningTask = scheduler().schedule(delegate, executorService, task);
+            notifyStarted();
+          } catch (Throwable t) {
+            notifyFailed(t);
+            throw Throwables.propagate(t);
+          } finally {
+            lock.unlock();
+          }
+        }
+      });
+    }
+
+    @Override protected final void doStop() {
+      runningTask.cancel(false); 
+      executorService.execute(new Runnable() {
+        @Override public void run() {
+          try {
+            lock.lock();
+            try {
+              if (state() != State.STOPPING) {
+                // This means that the state has changed since we were scheduled.  This implies that
+                // an execution of runOneIteration has thrown an exception and we have transitioned
+                // to a failed state, also this means that shutDown has already been called, so we
+                // do not want to call it again.
+                return;
+              }
+              shutDown();
+            } finally {
+              lock.unlock();
+            }
+            notifyStopped();
+          } catch (Throwable t) {
+            notifyFailed(t);
+            throw Throwables.propagate(t);
+          }
+        }
+      });
+    }
+  };
+  
+  /** 
+   * Run one iteration of the scheduled task. If any invocation of this method throws an exception, 
+   * the service will transition to the {@link Service.State#FAILED} state and this method will no 
+   * longer be called.
+   */
+  protected abstract void runOneIteration() throws Exception;
+
+  /** Start the service. */
+  protected abstract void startUp() throws Exception;
+
+  /** Stop the service. This is guaranteed not to run concurrently with {@link #runOneIteration}. */
+  protected abstract void shutDown() throws Exception;
+
+  /**
+   * Returns the {@link Scheduler} object used to configure this service.  This method will only be
+   * called once. 
+   */
+  protected abstract Scheduler scheduler();
+  
+  /**
+   * Returns the {@link ScheduledExecutorService} that will be used to execute the {@link #startUp},
+   * {@link #runOneIteration} and {@link #shutDown} methods.  The executor will not be 
+   * {@link ScheduledExecutorService#shutdown} when this service stops. Subclasses may override this
+   * method to use a custom {@link ScheduledExecutorService} instance.
+   * 
+   * <p>By default this returns a new {@link ScheduledExecutorService} with a single thread thread
+   * pool.  This method will only be called once.
+   */
+  protected ScheduledExecutorService executor() {
+    return Executors.newSingleThreadScheduledExecutor();
+  }
+
+  @Override public String toString() {
+    return getClass().getSimpleName() + " [" + state() + "]";
+  }
+
+  // We override instead of using ForwardingService so that these can be final.
+
+  @Override public final ListenableFuture<State> start() {
+    return delegate.start();
+  }
+
+  @Override public final State startAndWait() {
+    return delegate.startAndWait();
+  }
+
+  @Override public final boolean isRunning() {
+    return delegate.isRunning();
+  }
+
+  @Override public final State state() {
+    return delegate.state();
+  }
+
+  @Override public final ListenableFuture<State> stop() {
+    return delegate.stop();
+  }
+
+  @Override public final State stopAndWait() {
+    return delegate.stopAndWait();
+  }
+  
+  /**
+   * A {@link Scheduler} that provides a convenient way for the {@link AbstractScheduledService} to 
+   * use a dynamically changing schedule.  After every execution of the task, assuming it hasn't 
+   * been cancelled, the {@link #getNextSchedule} method will be called.
+   * 
+   * @author Luke Sandberg
+   * @since 11.0
+   */ 
+  @Beta
+  public abstract static class CustomScheduler extends Scheduler {
+
+    /**
+     * A callable class that can reschedule itself using a {@link CustomScheduler}.
+     */
+    private class ReschedulableCallable extends ForwardingFuture<Void> implements Callable<Void> {
+      
+      /** The underlying task. */
+      private final Runnable wrappedRunnable;
+      
+      /** The executor on which this Callable will be scheduled. */
+      private final ScheduledExecutorService executor;
+      
+      /** 
+       * The service that is managing this callable.  This is used so that failure can be 
+       * reported properly.
+       */
+      private final AbstractService service;
+      
+      /**
+       * This lock is used to ensure safe and correct cancellation, it ensures that a new task is 
+       * not scheduled while a cancel is ongoing.  Also it protects the currentFuture variable to 
+       * ensure that it is assigned atomically with being scheduled.
+       */ 
+      private final ReentrantLock lock = new ReentrantLock();
+      
+      /** The future that represents the next execution of this task.*/
+      @GuardedBy("lock")
+      private Future<Void> currentFuture;
+      
+      ReschedulableCallable(AbstractService service, ScheduledExecutorService executor, 
+          Runnable runnable) {
+        this.wrappedRunnable = runnable;
+        this.executor = executor;
+        this.service = service;
+      }
+      
+      @Override
+      public Void call() throws Exception {
+        wrappedRunnable.run();
+        reschedule();
+        return null;
+      }
+
+      /**
+       * Atomically reschedules this task and assigns the new future to {@link #currentFuture}.
+       */
+      public void reschedule() {
+        // We reschedule ourselves with a lock held for two reasons. 1. we want to make sure that
+        // cancel calls cancel on the correct future. 2. we want to make sure that the assignment
+        // to currentFuture doesn't race with itself so that currentFuture is assigned in the 
+        // correct order.
+        lock.lock();
+        try {
+          if (currentFuture == null || !currentFuture.isCancelled()) {
+            final Schedule schedule = CustomScheduler.this.getNextSchedule();
+            currentFuture = executor.schedule(this, schedule.delay, schedule.unit);
+          }
+        } catch (Throwable e) {
+          // If an exception is thrown by the subclass then we need to make sure that the service
+          // notices and transitions to the FAILED state.  We do it by calling notifyFailed directly
+          // because the service does not monitor the state of the future so if the exception is not
+          // caught and forwarded to the service the task would stop executing but the service would
+          // have no idea.
+          service.notifyFailed(e);
+        } finally {
+          lock.unlock();
+        }
+      }
+      
+      // N.B. Only protect cancel and isCancelled because those are the only methods that are 
+      // invoked by the AbstractScheduledService.
+      @Override
+      public boolean cancel(boolean mayInterruptIfRunning) {
+        // Ensure that a task cannot be rescheduled while a cancel is ongoing.
+        lock.lock();
+        try {
+          return currentFuture.cancel(mayInterruptIfRunning);
+        } finally {
+          lock.unlock();
+        }
+      }
+
+      @Override
+      protected Future<Void> delegate() {
+        throw new UnsupportedOperationException("Only cancel is supported by this future");
+      }
+    }
+    
+    @Override
+    final Future<?> schedule(AbstractService service, ScheduledExecutorService executor, 
+        Runnable runnable) {
+      ReschedulableCallable task = new ReschedulableCallable(service, executor, runnable);
+      task.reschedule();
+      return task;
+    }
+    
+    /**
+     * A value object that represents an absolute delay until a task should be invoked.
+     * 
+     * @author Luke Sandberg
+     * @since 11.0
+     */
+    @Beta
+    protected static final class Schedule {
+      
+      private final long delay;
+      private final TimeUnit unit;
+      
+      /**
+       * @param delay the time from now to delay execution
+       * @param unit the time unit of the delay parameter
+       */
+      public Schedule(long delay, TimeUnit unit) {
+        this.delay = delay;
+        this.unit = Preconditions.checkNotNull(unit);
+      }
+    }
+    
+    /**
+     * Calculates the time at which to next invoke the task.
+     * 
+     * <p>This is guaranteed to be called immediately after the task has completed an iteration and
+     * on the same thread as the previous execution of {@link 
+     * AbstractScheduledService#runOneIteration}.
+     * 
+     * @return a schedule that defines the delay before the next execution.
+     */
+    protected abstract Schedule getNextSchedule() throws Exception;
+  }
+}
diff --git a/guava/src/com/google/common/util/concurrent/AbstractService.java b/guava/src/com/google/common/util/concurrent/AbstractService.java
new file mode 100644
index 0000000..f84b374
--- /dev/null
+++ b/guava/src/com/google/common/util/concurrent/AbstractService.java
@@ -0,0 +1,256 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.Beta;
+import com.google.common.util.concurrent.Service.State; // javadoc needs this
+
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+import java.util.concurrent.locks.ReentrantLock;
+
+/**
+ * Base class for implementing services that can handle {@link #doStart} and
+ * {@link #doStop} requests, responding to them with {@link #notifyStarted()}
+ * and {@link #notifyStopped()} callbacks. Its subclasses must manage threads
+ * manually; consider {@link AbstractExecutionThreadService} if you need only a
+ * single execution thread.
+ *
+ * @author Jesse Wilson
+ * @since 1.0
+ */
+@Beta
+public abstract class AbstractService implements Service {
+
+  private final ReentrantLock lock = new ReentrantLock();
+
+  private final Transition startup = new Transition();
+  private final Transition shutdown = new Transition();
+
+  /**
+   * The internal state, which equals external state unless
+   * shutdownWhenStartupFinishes is true. Guarded by {@code lock}.
+   */
+  private State state = State.NEW;
+
+  /**
+   * If true, the user requested a shutdown while the service was still starting
+   * up. Guarded by {@code lock}.
+   */
+  private boolean shutdownWhenStartupFinishes = false;
+
+  /**
+   * This method is called by {@link #start} to initiate service startup. The
+   * invocation of this method should cause a call to {@link #notifyStarted()},
+   * either during this method's run, or after it has returned. If startup
+   * fails, the invocation should cause a call to {@link
+   * #notifyFailed(Throwable)} instead.
+   *
+   * <p>This method should return promptly; prefer to do work on a different
+   * thread where it is convenient. It is invoked exactly once on service
+   * startup, even when {@link #start} is called multiple times.
+   */
+  protected abstract void doStart();
+
+  /**
+   * This method should be used to initiate service shutdown. The invocation
+   * of this method should cause a call to {@link #notifyStopped()}, either
+   * during this method's run, or after it has returned. If shutdown fails, the
+   * invocation should cause a call to {@link #notifyFailed(Throwable)} instead.
+   *
+   * <p>This method should return promptly; prefer to do work on a different
+   * thread where it is convenient. It is invoked exactly once on service
+   * shutdown, even when {@link #stop} is called multiple times.
+   */
+  protected abstract void doStop();
+
+  @Override
+  public final ListenableFuture<State> start() {
+    lock.lock();
+    try {
+      if (state == State.NEW) {
+        state = State.STARTING;
+        doStart();
+      }
+    } catch (Throwable startupFailure) {
+      // put the exception in the future, the user can get it via Future.get()
+      notifyFailed(startupFailure);
+    } finally {
+      lock.unlock();
+    }
+
+    return startup;
+  }
+
+  @Override
+  public final ListenableFuture<State> stop() {
+    lock.lock();
+    try {
+      if (state == State.NEW) {
+        state = State.TERMINATED;
+        startup.set(State.TERMINATED);
+        shutdown.set(State.TERMINATED);
+      } else if (state == State.STARTING) {
+        shutdownWhenStartupFinishes = true;
+        startup.set(State.STOPPING);
+      } else if (state == State.RUNNING) {
+        state = State.STOPPING;
+        doStop();
+      }
+    } catch (Throwable shutdownFailure) {
+      // put the exception in the future, the user can get it via Future.get()
+      notifyFailed(shutdownFailure);
+    } finally {
+      lock.unlock();
+    }
+
+    return shutdown;
+  }
+
+  @Override
+  public State startAndWait() {
+    return Futures.getUnchecked(start());
+  }
+
+  @Override
+  public State stopAndWait() {
+    return Futures.getUnchecked(stop());
+  }
+
+  /**
+   * Implementing classes should invoke this method once their service has
+   * started. It will cause the service to transition from {@link
+   * State#STARTING} to {@link State#RUNNING}.
+   *
+   * @throws IllegalStateException if the service is not
+   *     {@link State#STARTING}.
+   */
+  protected final void notifyStarted() {
+    lock.lock();
+    try {
+      if (state != State.STARTING) {
+        IllegalStateException failure = new IllegalStateException(
+            "Cannot notifyStarted() when the service is " + state);
+        notifyFailed(failure);
+        throw failure;
+      }
+
+      state = State.RUNNING;
+      if (shutdownWhenStartupFinishes) {
+        stop();
+      } else {
+        startup.set(State.RUNNING);
+      }
+    } finally {
+      lock.unlock();
+    }
+  }
+
+  /**
+   * Implementing classes should invoke this method once their service has
+   * stopped. It will cause the service to transition from {@link
+   * State#STOPPING} to {@link State#TERMINATED}.
+   *
+   * @throws IllegalStateException if the service is neither {@link
+   *     State#STOPPING} nor {@link State#RUNNING}.
+   */
+  protected final void notifyStopped() {
+    lock.lock();
+    try {
+      if (state != State.STOPPING && state != State.RUNNING) {
+        IllegalStateException failure = new IllegalStateException(
+            "Cannot notifyStopped() when the service is " + state);
+        notifyFailed(failure);
+        throw failure;
+      }
+
+      state = State.TERMINATED;
+      shutdown.set(State.TERMINATED);
+    } finally {
+      lock.unlock();
+    }
+  }
+
+  /**
+   * Invoke this method to transition the service to the
+   * {@link State#FAILED}. The service will <b>not be stopped</b> if it
+   * is running. Invoke this method when a service has failed critically or
+   * otherwise cannot be started nor stopped.
+   */
+  protected final void notifyFailed(Throwable cause) {
+    checkNotNull(cause);
+
+    lock.lock();
+    try {
+      if (state == State.STARTING) {
+        startup.setException(cause);
+        shutdown.setException(new Exception(
+            "Service failed to start.", cause));
+      } else if (state == State.STOPPING) {
+        shutdown.setException(cause);
+      } else if (state == State.RUNNING) {
+        shutdown.setException(new Exception("Service failed while running", cause));
+      } else if (state == State.NEW || state == State.TERMINATED) {
+        throw new IllegalStateException("Failed while in state:" + state, cause);
+      }
+      state = State.FAILED;
+    } finally {
+      lock.unlock();
+    }
+  }
+
+  @Override
+  public final boolean isRunning() {
+    return state() == State.RUNNING;
+  }
+
+  @Override
+  public final State state() {
+    lock.lock();
+    try {
+      if (shutdownWhenStartupFinishes && state == State.STARTING) {
+        return State.STOPPING;
+      } else {
+        return state;
+      }
+    } finally {
+      lock.unlock();
+    }
+  }
+
+  @Override public String toString() {
+    return getClass().getSimpleName() + " [" + state() + "]";
+  }
+
+  /**
+   * A change from one service state to another, plus the result of the change.
+   */
+  private class Transition extends AbstractFuture<State> {
+    @Override
+    public State get(long timeout, TimeUnit unit)
+        throws InterruptedException, TimeoutException, ExecutionException {
+      try {
+        return super.get(timeout, unit);
+      } catch (TimeoutException e) {
+        throw new TimeoutException(AbstractService.this.toString());
+      }
+    }
+  }
+}
diff --git a/guava/src/com/google/common/util/concurrent/AsyncFunction.java b/guava/src/com/google/common/util/concurrent/AsyncFunction.java
new file mode 100644
index 0000000..441c029
--- /dev/null
+++ b/guava/src/com/google/common/util/concurrent/AsyncFunction.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import com.google.common.annotations.Beta;
+
+import java.util.concurrent.Future;
+
+/**
+ * Transforms a value, possibly asynchronously. For an example usage and more
+ * information, see {@link Futures#transform(ListenableFuture, AsyncFunction)}.
+ *
+ * @author Chris Povirk
+ * @since 11.0
+ */
+@Beta
+public interface AsyncFunction<I, O> {
+  /**
+   * Returns an output {@code Future} to use in place of the given {@code
+   * input}. The output {@code Future} need not be {@linkplain Future#isDone
+   * done}, making {@code AsyncFunction} suitable for asynchronous derivations.
+   *
+   * <p>Throwing an exception from this method is equivalent to returning a
+   * failing {@code Future}.
+   */
+  ListenableFuture<O> apply(I input) throws Exception;
+}
diff --git a/guava/src/com/google/common/util/concurrent/AtomicDouble.java b/guava/src/com/google/common/util/concurrent/AtomicDouble.java
new file mode 100644
index 0000000..0f38fb9
--- /dev/null
+++ b/guava/src/com/google/common/util/concurrent/AtomicDouble.java
@@ -0,0 +1,256 @@
+/*
+ * Written by Doug Lea and Martin Buchholz with assistance from
+ * members of JCP JSR-166 Expert Group and released to the public
+ * domain, as explained at
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+/*
+ * Source:
+ * http://gee.cs.oswego.edu/cgi-bin/viewcvs.cgi/jsr166/src/jsr166e/extra/AtomicDouble.java?revision=1.13
+ * (Modified to adapt to guava coding conventions and
+ * to use AtomicLongFieldUpdater instead of sun.misc.Unsafe)
+ */
+
+package com.google.common.util.concurrent;
+
+import com.google.common.annotations.Beta;
+
+import static java.lang.Double.doubleToRawLongBits;
+import static java.lang.Double.longBitsToDouble;
+import java.util.concurrent.atomic.AtomicLongFieldUpdater;
+
+/**
+ * A {@code double} value that may be updated atomically.  See the
+ * {@link java.util.concurrent.atomic} package specification for
+ * description of the properties of atomic variables.  An {@code
+ * AtomicDouble} is used in applications such as atomic accumulation,
+ * and cannot be used as a replacement for a {@link Double}.  However,
+ * this class does extend {@code Number} to allow uniform access by
+ * tools and utilities that deal with numerically-based classes.
+ *
+ * <p><a name="bitEquals">This class compares primitive {@code double}
+ * values in methods such as {@link #compareAndSet} by comparing their
+ * bitwise representation using {@link Double#doubleToRawLongBits},
+ * which differs from both the primitive double {@code ==} operator
+ * and from {@link Double#equals}, as if implemented by:
+ *  <pre> {@code
+ * static boolean bitEquals(double x, double y) {
+ *   long xBits = Double.doubleToRawLongBits(x);
+ *   long yBits = Double.doubleToRawLongBits(y);
+ *   return xBits == yBits;
+ * }}</pre>
+ *
+ * <p>It is possible to write a more scalable updater, at the cost of
+ * giving up strict atomicity.  See for example
+ * <a href="http://gee.cs.oswego.edu/dl/jsr166/dist/jsr166edocs/jsr166e/DoubleAdder.html"
+ * DoubleAdder>
+ * and
+ * <a href="http://gee.cs.oswego.edu/dl/jsr166/dist/jsr166edocs/jsr166e/DoubleMaxUpdater.html"
+ * DoubleMaxUpdater>.
+ *
+ * @author Doug Lea
+ * @author Martin Buchholz
+ * @since 11.0
+ */
+@Beta
+public class AtomicDouble extends Number implements java.io.Serializable {
+  private static final long serialVersionUID = 0L;
+
+  private transient volatile long value;
+
+  private static final AtomicLongFieldUpdater<AtomicDouble> updater =
+      AtomicLongFieldUpdater.newUpdater(AtomicDouble.class, "value");
+
+  /**
+   * Creates a new {@code AtomicDouble} with the given initial value.
+   *
+   * @param initialValue the initial value
+   */
+  public AtomicDouble(double initialValue) {
+    value = doubleToRawLongBits(initialValue);
+  }
+
+  /**
+   * Creates a new {@code AtomicDouble} with initial value {@code 0.0}.
+   */
+  public AtomicDouble() {
+    // assert doubleToRawLongBits(0.0) == 0L;
+  }
+
+  /**
+   * Gets the current value.
+   *
+   * @return the current value
+   */
+  public final double get() {
+    return longBitsToDouble(value);
+  }
+
+  /**
+   * Sets to the given value.
+   *
+   * @param newValue the new value
+   */
+  public final void set(double newValue) {
+    long next = doubleToRawLongBits(newValue);
+    value = next;
+  }
+
+  /**
+   * Eventually sets to the given value.
+   *
+   * @param newValue the new value
+   */
+  public final void lazySet(double newValue) {
+    set(newValue);
+    // TODO(user): replace with code below when jdk5 support is dropped.
+    // long next = doubleToRawLongBits(newValue);
+    // updater.lazySet(this, next);
+  }
+
+  /**
+   * Atomically sets to the given value and returns the old value.
+   *
+   * @param newValue the new value
+   * @return the previous value
+   */
+  public final double getAndSet(double newValue) {
+    long next = doubleToRawLongBits(newValue);
+    return longBitsToDouble(updater.getAndSet(this, next));
+  }
+
+  /**
+   * Atomically sets the value to the given updated value
+   * if the current value is <a href="#bitEquals">bitwise equal</a>
+   * to the expected value.
+   *
+   * @param expect the expected value
+   * @param update the new value
+   * @return {@code true} if successful. False return indicates that
+   * the actual value was not bitwise equal to the expected value.
+   */
+  public final boolean compareAndSet(double expect, double update) {
+    return updater.compareAndSet(this,
+                                 doubleToRawLongBits(expect),
+                                 doubleToRawLongBits(update));
+  }
+
+  /**
+   * Atomically sets the value to the given updated value
+   * if the current value is <a href="#bitEquals">bitwise equal</a>
+   * to the expected value.
+   *
+   * <p>May <a
+   * href="http://download.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/package-summary.html#Spurious">
+   * fail spuriously</a>
+   * and does not provide ordering guarantees, so is only rarely an
+   * appropriate alternative to {@code compareAndSet}.
+   *
+   * @param expect the expected value
+   * @param update the new value
+   * @return {@code true} if successful
+   */
+  public final boolean weakCompareAndSet(double expect, double update) {
+    return updater.weakCompareAndSet(this,
+                                     doubleToRawLongBits(expect),
+                                     doubleToRawLongBits(update));
+  }
+
+  /**
+   * Atomically adds the given value to the current value.
+   *
+   * @param delta the value to add
+   * @return the previous value
+   */
+  public final double getAndAdd(double delta) {
+    while (true) {
+      long current = value;
+      double currentVal = longBitsToDouble(current);
+      double nextVal = currentVal + delta;
+      long next = doubleToRawLongBits(nextVal);
+      if (updater.compareAndSet(this, current, next)) {
+        return currentVal;
+      }
+    }
+  }
+
+  /**
+   * Atomically adds the given value to the current value.
+   *
+   * @param delta the value to add
+   * @return the updated value
+   */
+  public final double addAndGet(double delta) {
+    while (true) {
+      long current = value;
+      double currentVal = longBitsToDouble(current);
+      double nextVal = currentVal + delta;
+      long next = doubleToRawLongBits(nextVal);
+      if (updater.compareAndSet(this, current, next)) {
+        return nextVal;
+      }
+    }
+  }
+
+  /**
+   * Returns the String representation of the current value.
+   * @return the String representation of the current value
+   */
+  public String toString() {
+    return Double.toString(get());
+  }
+
+  /**
+   * Returns the value of this {@code AtomicDouble} as an {@code int}
+   * after a narrowing primitive conversion.
+   */
+  public int intValue() {
+    return (int) get();
+  }
+
+  /**
+   * Returns the value of this {@code AtomicDouble} as a {@code long}
+   * after a narrowing primitive conversion.
+   */
+  public long longValue() {
+    return (long) get();
+  }
+
+  /**
+   * Returns the value of this {@code AtomicDouble} as a {@code float}
+   * after a narrowing primitive conversion.
+   */
+  public float floatValue() {
+    return (float) get();
+  }
+
+  /**
+   * Returns the value of this {@code AtomicDouble} as a {@code double}.
+   */
+  public double doubleValue() {
+    return get();
+  }
+
+  /**
+   * Saves the state to a stream (that is, serializes it).
+   *
+   * @serialData The current value is emitted (a {@code double}).
+   */
+  private void writeObject(java.io.ObjectOutputStream s)
+      throws java.io.IOException {
+    s.defaultWriteObject();
+
+    s.writeDouble(get());
+  }
+
+  /**
+   * Reconstitutes the instance from a stream (that is, deserializes it).
+   */
+  private void readObject(java.io.ObjectInputStream s)
+      throws java.io.IOException, ClassNotFoundException {
+    s.defaultReadObject();
+
+    set(s.readDouble());
+  }
+}
diff --git a/guava/src/com/google/common/util/concurrent/AtomicDoubleArray.java b/guava/src/com/google/common/util/concurrent/AtomicDoubleArray.java
new file mode 100644
index 0000000..37f4c5c
--- /dev/null
+++ b/guava/src/com/google/common/util/concurrent/AtomicDoubleArray.java
@@ -0,0 +1,270 @@
+/*
+ * Written by Doug Lea with assistance from members of JCP JSR-166
+ * Expert Group and released to the public domain, as explained at
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+/*
+ * Source:
+ * http://gee.cs.oswego.edu/cgi-bin/viewcvs.cgi/jsr166/src/jsr166e/extra/AtomicDoubleArray.java?revision=1.5
+ * (Modified to adapt to guava coding conventions and
+ * to use AtomicLongArray instead of sun.misc.Unsafe)
+ */
+
+package com.google.common.util.concurrent;
+
+import com.google.common.annotations.Beta;
+
+import static java.lang.Double.doubleToRawLongBits;
+import static java.lang.Double.longBitsToDouble;
+import java.util.concurrent.atomic.AtomicLongArray;
+
+/**
+ * A {@code double} array in which elements may be updated atomically.
+ * See the {@link java.util.concurrent.atomic} package specification
+ * for description of the properties of atomic variables.
+ *
+ * <p><a name="bitEquals">This class compares primitive {@code double}
+ * values in methods such as {@link #compareAndSet} by comparing their
+ * bitwise representation using {@link Double#doubleToRawLongBits},
+ * which differs from both the primitive double {@code ==} operator
+ * and from {@link Double#equals}, as if implemented by:
+ *  <pre> {@code
+ * static boolean bitEquals(double x, double y) {
+ *   long xBits = Double.doubleToRawLongBits(x);
+ *   long yBits = Double.doubleToRawLongBits(y);
+ *   return xBits == yBits;
+ * }}</pre>
+ *
+ * @author Doug Lea
+ * @author Martin Buchholz
+ * @since 11.0
+ */
+@Beta
+public class AtomicDoubleArray implements java.io.Serializable {
+  private static final long serialVersionUID = 0L;
+
+  // Making this non-final is the lesser evil according to Effective
+  // Java 2nd Edition Item 76: Write readObject methods defensively.
+  private transient AtomicLongArray longs;
+
+  /**
+   * Creates a new {@code AtomicDoubleArray} of the given length,
+   * with all elements initially zero.
+   *
+   * @param length the length of the array
+   */
+  public AtomicDoubleArray(int length) {
+    this.longs = new AtomicLongArray(length);
+  }
+
+  /**
+   * Creates a new {@code AtomicDoubleArray} with the same length
+   * as, and all elements copied from, the given array.
+   *
+   * @param array the array to copy elements from
+   * @throws NullPointerException if array is null
+   */
+  public AtomicDoubleArray(double[] array) {
+    final int len = array.length;
+    long[] longArray = new long[len];
+    for (int i = 0; i < len; i++) {
+      longArray[i] = doubleToRawLongBits(array[i]);
+    }
+    this.longs = new AtomicLongArray(longArray);
+  }
+
+  /**
+   * Returns the length of the array.
+   *
+   * @return the length of the array
+   */
+  public final int length() {
+    return longs.length();
+  }
+
+  /**
+   * Gets the current value at position {@code i}.
+   *
+   * @param i the index
+   * @return the current value
+   */
+  public final double get(int i) {
+    return longBitsToDouble(longs.get(i));
+  }
+
+  /**
+   * Sets the element at position {@code i} to the given value.
+   *
+   * @param i the index
+   * @param newValue the new value
+   */
+  public final void set(int i, double newValue) {
+    long next = doubleToRawLongBits(newValue);
+    longs.set(i, next);
+  }
+
+  /**
+   * Eventually sets the element at position {@code i} to the given value.
+   *
+   * @param i the index
+   * @param newValue the new value
+   */
+  public final void lazySet(int i, double newValue) {
+    set(i, newValue);
+    // TODO(user): replace with code below when jdk5 support is dropped.
+    // long next = doubleToRawLongBits(newValue);
+    // longs.lazySet(i, next);
+  }
+
+  /**
+   * Atomically sets the element at position {@code i} to the given value
+   * and returns the old value.
+   *
+   * @param i the index
+   * @param newValue the new value
+   * @return the previous value
+   */
+  public final double getAndSet(int i, double newValue) {
+    long next = doubleToRawLongBits(newValue);
+    return longBitsToDouble(longs.getAndSet(i, next));
+  }
+
+  /**
+   * Atomically sets the element at position {@code i} to the given
+   * updated value
+   * if the current value is <a href="#bitEquals">bitwise equal</a>
+   * to the expected value.
+   *
+   * @param i the index
+   * @param expect the expected value
+   * @param update the new value
+   * @return true if successful. False return indicates that
+   * the actual value was not equal to the expected value.
+   */
+  public final boolean compareAndSet(int i, double expect, double update) {
+    return longs.compareAndSet(i,
+                               doubleToRawLongBits(expect),
+                               doubleToRawLongBits(update));
+  }
+
+  /**
+   * Atomically sets the element at position {@code i} to the given
+   * updated value
+   * if the current value is <a href="#bitEquals">bitwise equal</a>
+   * to the expected value.
+   *
+   * <p>May <a
+   * href="http://download.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/package-summary.html#Spurious">
+   * fail spuriously</a>
+   * and does not provide ordering guarantees, so is only rarely an
+   * appropriate alternative to {@code compareAndSet}.
+   *
+   * @param i the index
+   * @param expect the expected value
+   * @param update the new value
+   * @return true if successful
+   */
+  public final boolean weakCompareAndSet(int i, double expect, double update) {
+    return longs.weakCompareAndSet(i,
+                                   doubleToRawLongBits(expect),
+                                   doubleToRawLongBits(update));
+  }
+
+  /**
+   * Atomically adds the given value to the element at index {@code i}.
+   *
+   * @param i the index
+   * @param delta the value to add
+   * @return the previous value
+   */
+  public final double getAndAdd(int i, double delta) {
+    while (true) {
+      long current = longs.get(i);
+      double currentVal = longBitsToDouble(current);
+      double nextVal = currentVal + delta;
+      long next = doubleToRawLongBits(nextVal);
+      if (longs.compareAndSet(i, current, next)) {
+        return currentVal;
+      }
+    }
+  }
+
+  /**
+   * Atomically adds the given value to the element at index {@code i}.
+   *
+   * @param i the index
+   * @param delta the value to add
+   * @return the updated value
+   */
+  public double addAndGet(int i, double delta) {
+    while (true) {
+      long current = longs.get(i);
+      double currentVal = longBitsToDouble(current);
+      double nextVal = currentVal + delta;
+      long next = doubleToRawLongBits(nextVal);
+      if (longs.compareAndSet(i, current, next)) {
+        return nextVal;
+      }
+    }
+  }
+
+  /**
+   * Returns the String representation of the current values of array.
+   * @return the String representation of the current values of array
+   */
+  public String toString() {
+    int iMax = length() - 1;
+    if (iMax == -1) {
+      return "[]";
+    }
+
+    // Double.toString(Math.PI).length() == 17
+    StringBuilder b = new StringBuilder((17 + 2) * (iMax + 1));
+    b.append('[');
+    for (int i = 0;; i++) {
+      b.append(longBitsToDouble(longs.get(i)));
+      if (i == iMax) {
+        return b.append(']').toString();
+      }
+      b.append(',').append(' ');
+    }
+  }
+
+  /**
+   * Saves the state to a stream (that is, serializes it).
+   *
+   * @serialData The length of the array is emitted (int), followed by all
+   *             of its elements (each a {@code double}) in the proper order.
+   */
+  private void writeObject(java.io.ObjectOutputStream s)
+      throws java.io.IOException {
+    s.defaultWriteObject();
+
+    // Write out array length
+    int length = length();
+    s.writeInt(length);
+
+    // Write out all elements in the proper order.
+    for (int i = 0; i < length; i++) {
+      s.writeDouble(get(i));
+    }
+  }
+
+  /**
+   * Reconstitutes the instance from a stream (that is, deserializes it).
+   */
+  private void readObject(java.io.ObjectInputStream s)
+      throws java.io.IOException, ClassNotFoundException {
+    s.defaultReadObject();
+
+    // Read in array length and allocate array
+    int length = s.readInt();
+    this.longs = new AtomicLongArray(length);
+
+    // Read in all elements in the proper order.
+    for (int i = 0; i < length; i++) {
+      set(i, s.readDouble());
+    }
+  }
+}
diff --git a/guava/src/com/google/common/util/concurrent/AtomicLongMap.java b/guava/src/com/google/common/util/concurrent/AtomicLongMap.java
new file mode 100644
index 0000000..c49f84c
--- /dev/null
+++ b/guava/src/com/google/common/util/concurrent/AtomicLongMap.java
@@ -0,0 +1,418 @@
+// Copyright 2011 Google Inc. All Rights Reserved.
+
+package com.google.common.util.concurrent;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.Beta;
+import com.google.common.base.Function;
+import com.google.common.collect.Maps;
+
+import java.util.Collections;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.atomic.AtomicLong;
+
+/**
+ * A map containing {@code long} values that can be atomically updated. While writes to a
+ * traditional {@code Map} rely on {@code put(K, V)}, the typical mechanism for writing to this map
+ * is {@code addAndGet(K, long)}, which adds a {@code long} to the value currently associated with
+ * {@code K}. If a key has not yet been associated with a value, its implicit value is zero.
+ *
+ * <p>Most methods in this class treat absent values and zero values identically, as individually
+ * documented. Exceptions to this are {@link #containsKey}, {@link #size}, {@link #isEmpty},
+ * {@link #asMap}, and {@link #toString}.
+ *
+ * <p>Instances of this class may be used by multiple threads concurrently. All operations are
+ * atomic unless otherwise noted.
+ *
+ * <p><b>Note:</b> If your values are always positive and less than 2^31, you may wish to use a
+ * {@link com.google.common.collect.Multiset} such as
+ * {@link com.google.common.collect.ConcurrentHashMultiset} instead.
+ *
+ * <b>Warning:</b> Unlike {@code Multiset}, entries whose values are zero are not automatically
+ * removed from the map. Instead they must be removed manually with {@link #removeAllZeros}.
+ *
+ * @author Charles Fry
+ * @since 11.0
+ */
+@Beta
+public final class AtomicLongMap<K> {
+  private final ConcurrentHashMap<K, AtomicLong> map;
+
+  private AtomicLongMap(ConcurrentHashMap<K, AtomicLong> map) {
+    this.map = checkNotNull(map);
+  }
+
+  /**
+   * Creates an {@code AtomicLongMap}.
+   */
+  public static <K> AtomicLongMap<K> create() {
+    return new AtomicLongMap<K>(new ConcurrentHashMap<K, AtomicLong>());
+  }
+
+  /**
+   * Creates an {@code AtomicLongMap} with the same mappings as the specified {@code Map}.
+   */
+  public static <K> AtomicLongMap<K> create(Map<? extends K, ? extends Long> m) {
+    AtomicLongMap<K> result = create();
+    result.putAll(m);
+    return result;
+  }
+
+  /**
+   * Returns the value associated with {@code key}, or zero if there is no value associated with
+   * {@code key}.
+   */
+  public long get(K key) {
+    AtomicLong atomic = map.get(key);
+    return atomic == null ? 0L : atomic.get();
+  }
+
+  /**
+   * Increments by one the value currently associated with {@code key}, and returns the new value.
+   */
+  public long incrementAndGet(K key) {
+    return addAndGet(key, 1);
+  }
+
+  /**
+   * Decrements by one the value currently associated with {@code key}, and returns the new value.
+   */
+  public long decrementAndGet(K key) {
+    return addAndGet(key, -1);
+  }
+
+  /**
+   * Adds {@code delta} to the value currently associated with {@code key}, and returns the new
+   * value.
+   */
+  public long addAndGet(K key, long delta) {
+    outer: for (;;) {
+      AtomicLong atomic = map.get(key);
+      if (atomic == null) {
+        atomic = map.putIfAbsent(key, new AtomicLong(delta));
+        if (atomic == null) {
+          return delta;
+        }
+        // atomic is now non-null; fall through
+      }
+
+      for (;;) {
+        long oldValue = atomic.get();
+        if (oldValue == 0L) {
+          // don't compareAndSet a zero
+          if (map.replace(key, atomic, new AtomicLong(delta))) {
+            return delta;
+          }
+          // atomic replaced
+          continue outer;
+        }
+
+        long newValue = oldValue + delta;
+        if (atomic.compareAndSet(oldValue, newValue)) {
+          return newValue;
+        }
+        // value changed
+      }
+    }
+  }
+
+  /**
+   * Increments by one the value currently associated with {@code key}, and returns the old value.
+   */
+  public long getAndIncrement(K key) {
+    return getAndAdd(key, 1);
+  }
+
+  /**
+   * Decrements by one the value currently associated with {@code key}, and returns the old value.
+   */
+  public long getAndDecrement(K key) {
+    return getAndAdd(key, -1);
+  }
+
+  /**
+   * Adds {@code delta} to the value currently associated with {@code key}, and returns the old
+   * value.
+   */
+  public long getAndAdd(K key, long delta) {
+    outer: for (;;) {
+      AtomicLong atomic = map.get(key);
+      if (atomic == null) {
+        atomic = map.putIfAbsent(key, new AtomicLong(delta));
+        if (atomic == null) {
+          return 0L;
+        }
+        // atomic is now non-null; fall through
+      }
+
+      for (;;) {
+        long oldValue = atomic.get();
+        if (oldValue == 0L) {
+          // don't compareAndSet a zero
+          if (map.replace(key, atomic, new AtomicLong(delta))) {
+            return 0L;
+          }
+          // atomic replaced
+          continue outer;
+        }
+
+        long newValue = oldValue + delta;
+        if (atomic.compareAndSet(oldValue, newValue)) {
+          return oldValue;
+        }
+        // value changed
+      }
+    }
+  }
+
+  /**
+   * Associates {@code newValue} with {@code key} in this map, and returns the value previously
+   * associated with {@code key}, or zero if there was no such value.
+   */
+  public long put(K key, long newValue) {
+    outer: for (;;) {
+      AtomicLong atomic = map.get(key);
+      if (atomic == null) {
+        atomic = map.putIfAbsent(key, new AtomicLong(newValue));
+        if (atomic == null) {
+          return 0L;
+        }
+        // atomic is now non-null; fall through
+      }
+
+      for (;;) {
+        long oldValue = atomic.get();
+        if (oldValue == 0L) {
+          // don't compareAndSet a zero
+          if (map.replace(key, atomic, new AtomicLong(newValue))) {
+            return 0L;
+          }
+          // atomic replaced
+          continue outer;
+        }
+
+        if (atomic.compareAndSet(oldValue, newValue)) {
+          return oldValue;
+        }
+        // value changed
+      }
+    }
+  }
+
+  /**
+   * Copies all of the mappings from the specified map to this map. The effect of this call is
+   * equivalent to that of calling {@code put(k, v)} on this map once for each mapping from key
+   * {@code k} to value {@code v} in the specified map. The behavior of this operation is undefined
+   * if the specified map is modified while the operation is in progress.
+   */
+  public void putAll(Map<? extends K, ? extends Long> m) {
+    for (Map.Entry<? extends K, ? extends Long> entry : m.entrySet()) {
+      put(entry.getKey(), entry.getValue());
+    }
+  }
+
+  /**
+   * Removes and returns the value associated with {@code key}. If {@code key} is not
+   * in the map, this method has no effect and returns zero.
+   */
+  public long remove(K key) {
+    AtomicLong atomic = map.get(key);
+    if (atomic == null) {
+      return 0L;
+    }
+
+    for (;;) {
+      long oldValue = atomic.get();
+      if (oldValue == 0L || atomic.compareAndSet(oldValue, 0L)) {
+        // only remove after setting to zero, to avoid concurrent updates
+        map.remove(key, atomic);
+        // succeed even if the remove fails, since the value was already adjusted
+        return oldValue;
+      }
+    }
+  }
+
+  /**
+   * Removes all mappings from this map whose values are zero.
+   *
+   * <p>This method is not atomic: the map may be visible in intermediate states, where some
+   * of the zero values have been removed and others have not.
+   */
+  public void removeAllZeros() {
+    for (K key : map.keySet()) {
+      AtomicLong atomic = map.get(key);
+      if (atomic != null && atomic.get() == 0L) {
+        map.remove(key, atomic);
+      }
+    }
+  }
+
+  /**
+   * Returns the sum of all values in this map.
+   *
+   * <p>This method is not atomic: the sum may or may not include other concurrent operations.
+   */
+  public long sum() {
+    long sum = 0L;
+    for (AtomicLong value : map.values()) {
+      sum = sum + value.get();
+    }
+    return sum;
+  }
+
+  private transient Map<K, Long> asMap;
+
+  /**
+   * Returns a live, read-only view of the map backing this {@code AtomicLongMap}.
+   */
+  public Map<K, Long> asMap() {
+    Map<K, Long> result = asMap;
+    return (result == null) ? asMap = createAsMap() : result;
+  }
+
+  private Map<K, Long> createAsMap() {
+    return Collections.unmodifiableMap(
+        Maps.transformValues(map, new Function<AtomicLong, Long>() {
+          @Override
+          public Long apply(AtomicLong atomic) {
+            return atomic.get();
+          }
+        }));
+  }
+
+  /**
+   * Returns true if this map contains a mapping for the specified key.
+   */
+  public boolean containsKey(Object key) {
+    return map.containsKey(key);
+  }
+
+  /**
+   * Returns the number of key-value mappings in this map. If the map contains more than
+   * {@code Integer.MAX_VALUE} elements, returns {@code Integer.MAX_VALUE}.
+   */
+  public int size() {
+    return map.size();
+  }
+
+  /**
+   * Returns {@code true} if this map contains no key-value mappings.
+   */
+  public boolean isEmpty() {
+    return map.isEmpty();
+  }
+
+  /**
+   * Removes all of the mappings from this map. The map will be empty after this call returns.
+   *
+   * <p>This method is not atomic: the map may not be empty after returning if there were concurrent
+   * writes.
+   */
+  public void clear() {
+    map.clear();
+  }
+
+  @Override
+  public String toString() {
+    return map.toString();
+  }
+
+  /*
+   * ConcurrentMap operations which we may eventually add.
+   *
+   * The problem with these is that remove(K, long) has to be done in two phases by definition ---
+   * first decrementing to zero, and then removing. putIfAbsent or replace could observe the
+   * intermediate zero-state. Ways we could deal with this are:
+   *
+   * - Don't define any of the ConcurrentMap operations. This is the current state of affairs.
+   *
+   * - Define putIfAbsent and replace as treating zero and absent identically (as currently
+   *   implemented below). This is a bit surprising with putIfAbsent, which really becomes
+   *   putIfZero.
+   *
+   * - Allow putIfAbsent and replace to distinguish between zero and absent, but don't implement
+   *   remove(K, long). Without any two-phase operations it becomes feasible for all remaining
+   *   operations to distinguish between zero and absent. If we do this, then perhaps we should add
+   *   replace(key, long).
+   *
+   * - Introduce a special-value private static final AtomicLong that would have the meaning of
+   *   removal-in-progress, and rework all operations to properly distinguish between zero and
+   *   absent.
+   */
+
+  /**
+   * If {@code key} is not already associated with a value or if {@code key} is associated with
+   * zero, associate it with {@code newValue}. Returns the previous value associated with
+   * {@code key}, or zero if there was no mapping for {@code key}.
+   */
+  long putIfAbsent(K key, long newValue) {
+    for (;;) {
+      AtomicLong atomic = map.get(key);
+      if (atomic == null) {
+        atomic = map.putIfAbsent(key, new AtomicLong(newValue));
+        if (atomic == null) {
+          return 0L;
+        }
+        // atomic is now non-null; fall through
+      }
+
+      long oldValue = atomic.get();
+      if (oldValue == 0L) {
+        // don't compareAndSet a zero
+        if (map.replace(key, atomic, new AtomicLong(newValue))) {
+          return 0L;
+        }
+        // atomic replaced
+        continue;
+      }
+
+      return oldValue;
+    }
+  }
+
+  /**
+   * If {@code (key, expectedOldValue)} is currently in the map, this method replaces
+   * {@code expectedOldValue} with {@code newValue} and returns true; otherwise, this method
+   * returns false.
+   *
+   * <p>If {@code expectedOldValue} is zero, this method will succeed if {@code (key, zero)}
+   * is currently in the map, or if {@code key} is not in the map at all.
+   */
+  boolean replace(K key, long expectedOldValue, long newValue) {
+    if (expectedOldValue == 0L) {
+      return putIfAbsent(key, newValue) == 0L;
+    } else {
+      AtomicLong atomic = map.get(key);
+      return (atomic == null) ? false : atomic.compareAndSet(expectedOldValue, newValue);
+    }
+  }
+
+  /**
+   * If {@code (key, value)} is currently in the map, this method removes it and returns
+   * true; otherwise, this method returns false.
+   */
+  boolean remove(K key, long value) {
+    AtomicLong atomic = map.get(key);
+    if (atomic == null) {
+      return false;
+    }
+
+    long oldValue = atomic.get();
+    if (oldValue != value) {
+      return false;
+    }
+
+    if (oldValue == 0L || atomic.compareAndSet(oldValue, 0L)) {
+      // only remove after setting to zero, to avoid concurrent updates
+      map.remove(key, atomic);
+      // succeed even if the remove fails, since the value was already adjusted
+      return true;
+    }
+
+    // value changed
+    return false;
+  }
+
+}
diff --git a/guava/src/com/google/common/util/concurrent/Atomics.java b/guava/src/com/google/common/util/concurrent/Atomics.java
new file mode 100644
index 0000000..fece83d
--- /dev/null
+++ b/guava/src/com/google/common/util/concurrent/Atomics.java
@@ -0,0 +1,76 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import com.google.common.annotations.Beta;
+
+import java.util.concurrent.atomic.AtomicReference;
+import java.util.concurrent.atomic.AtomicReferenceArray;
+
+import javax.annotation.Nullable;
+
+/**
+ * Static utility methods pertaining to classes in the
+ * {@code java.util.concurrent.atomic} package.
+ *
+ * @author Kurt Alfred Kluever
+ * @since 10.0
+ */
+@Beta
+public final class Atomics {
+  private Atomics() {}
+
+  /**
+   * Creates an {@code AtomicReference} instance with no initial value.
+   *
+   * @return a new {@code AtomicReference} with no initial value
+   */
+  public static <V> AtomicReference<V> newReference() {
+    return new AtomicReference<V>();
+  }
+
+  /**
+   * Creates an {@code AtomicReference} instance with the given initial value.
+   *
+   * @param initialValue the initial value
+   * @return a new {@code AtomicReference} with the given initial value
+   */
+  public static <V> AtomicReference<V> newReference(@Nullable V initialValue) {
+    return new AtomicReference<V>(initialValue);
+  }
+
+  /**
+   * Creates an {@code AtomicReferenceArray} instance of given length.
+   *
+   * @param length the length of the array
+   * @return a new {@code AtomicReferenceArray} with the given length
+   */
+  public static <E> AtomicReferenceArray<E> newReferenceArray(int length) {
+    return new AtomicReferenceArray<E>(length);
+  }
+
+  /**
+   * Creates an {@code AtomicReferenceArray} instance with the same length as,
+   * and all elements copied from, the given array.
+   *
+   * @param array the array to copy elements from
+   * @return a new {@code AtomicReferenceArray} copied from the given array
+   */
+  public static <E> AtomicReferenceArray<E> newReferenceArray(E[] array) {
+    return new AtomicReferenceArray<E>(array);
+  }
+}
diff --git a/guava/src/com/google/common/util/concurrent/Callables.java b/guava/src/com/google/common/util/concurrent/Callables.java
new file mode 100644
index 0000000..f970f42
--- /dev/null
+++ b/guava/src/com/google/common/util/concurrent/Callables.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import java.util.concurrent.Callable;
+
+import javax.annotation.Nullable;
+
+/**
+ * Static utility methods pertaining to the {@link Callable} interface.
+ *
+ * @author Isaac Shum
+ * @since 1.0
+ */
+public final class Callables {
+  private Callables() {}
+
+  /**
+   * Creates a {@code Callable} which immediately returns a preset value each
+   * time it is called.
+   */
+  public static <T> Callable<T> returning(final @Nullable T value) {
+    return new Callable<T>() {
+      @Override public T call() {
+        return value;
+      }
+    };
+  }
+}
diff --git a/guava/src/com/google/common/util/concurrent/CheckedFuture.java b/guava/src/com/google/common/util/concurrent/CheckedFuture.java
new file mode 100644
index 0000000..31504e2
--- /dev/null
+++ b/guava/src/com/google/common/util/concurrent/CheckedFuture.java
@@ -0,0 +1,76 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import com.google.common.annotations.Beta;
+
+import java.util.concurrent.CancellationException;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+
+/**
+ * A {@code CheckedFuture} is a {@link ListenableFuture} that includes versions
+ * of the {@code get} methods that can throw a checked exception.  This makes it
+ * easier to create a future that executes logic which can throw an exception.
+ *
+ * <p>A common implementation is {@link Futures#immediateCheckedFuture}.
+ *
+ * <p>Implementations of this interface must adapt the exceptions thrown by
+ * {@code Future#get()}: {@link CancellationException},
+ * {@link ExecutionException} and {@link InterruptedException} into the type
+ * specified by the {@code E} type parameter.
+ *
+ * <p>This interface also extends the ListenableFuture interface to allow
+ * listeners to be added. This allows the future to be used as a normal
+ * {@link Future} or as an asynchronous callback mechanism as needed. This
+ * allows multiple callbacks to be registered for a particular task, and the
+ * future will guarantee execution of all listeners when the task completes.
+ * 
+ * <p>For a simpler alternative to CheckedFuture, consider accessing Future 
+ * values with {@link Futures#get(Future, Class) Futures.get()}.
+ *
+ * @author Sven Mawson
+ * @since 1.0
+ */
+@Beta
+public interface CheckedFuture<V, X extends Exception>
+    extends ListenableFuture<V> {
+
+  /**
+   * Exception checking version of {@link Future#get()} that will translate
+   * {@link InterruptedException}, {@link CancellationException} and
+   * {@link ExecutionException} into application-specific exceptions.
+   *
+   * @return the result of executing the future.
+   * @throws X on interruption, cancellation or execution exceptions.
+   */
+  V checkedGet() throws X;
+
+  /**
+   * Exception checking version of {@link Future#get(long, TimeUnit)} that will
+   * translate {@link InterruptedException}, {@link CancellationException} and
+   * {@link ExecutionException} into application-specific exceptions.  On
+   * timeout this method throws a normal {@link TimeoutException}.
+   *
+   * @return the result of executing the future.
+   * @throws TimeoutException if retrieving the result timed out.
+   * @throws X on interruption, cancellation or execution exceptions.
+   */
+  V checkedGet(long timeout, TimeUnit unit) throws TimeoutException, X;
+}
diff --git a/guava/src/com/google/common/util/concurrent/ExecutionError.java b/guava/src/com/google/common/util/concurrent/ExecutionError.java
new file mode 100644
index 0000000..ce588eb
--- /dev/null
+++ b/guava/src/com/google/common/util/concurrent/ExecutionError.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import com.google.common.annotations.GwtCompatible;
+import com.google.common.annotations.Beta;
+
+/**
+ * {@link Error} variant of {@link java.util.concurrent.ExecutionException}. As
+ * with {@code ExecutionException}, the error's {@linkplain #getCause() cause}
+ * comes from a failed task, possibly run in another thread. That cause should
+ * itself be an {@code Error}; if not, use {@code ExecutionException} or {@link
+ * UncheckedExecutionException}. This allows the client code to continue to
+ * distinguish between exceptions and errors, even when they come from other
+ * threads.
+ *
+ * @author Chris Povirk
+ * @since 10.0
+ */
+@Beta
+@GwtCompatible
+public class ExecutionError extends Error {
+  /**
+   * Creates a new instance with {@code null} as its detail message.
+   */
+  protected ExecutionError() {}
+
+  /**
+   * Creates a new instance with the given detail message.
+   */
+  protected ExecutionError(String message) {
+    super(message);
+  }
+
+  /**
+   * Creates a new instance with the given detail message and cause.
+   */
+  public ExecutionError(String message, Error cause) {
+    super(message, cause);
+  }
+
+  /**
+   * Creates a new instance with the given cause.
+   */
+  public ExecutionError(Error cause) {
+    super(cause);
+  }
+
+  private static final long serialVersionUID = 0;
+}
diff --git a/guava/src/com/google/common/util/concurrent/ExecutionList.java b/guava/src/com/google/common/util/concurrent/ExecutionList.java
new file mode 100644
index 0000000..d1b78f5
--- /dev/null
+++ b/guava/src/com/google/common/util/concurrent/ExecutionList.java
@@ -0,0 +1,159 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import com.google.common.base.Preconditions;
+import com.google.common.collect.Lists;
+
+import java.util.Queue;
+import java.util.concurrent.Executor;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * <p>A list of listeners, each with an associated {@code Executor}, that
+ * guarantees that every {@code Runnable} that is {@linkplain #add added} will
+ * be executed after {@link #execute()} is called. Any {@code Runnable} added
+ * after the call to {@code execute} is still guaranteed to execute. There is no
+ * guarantee, however, that listeners will be executed in the order that they
+ * are added.
+ *
+ * <p>Exceptions thrown by a listener will be propagated up to the executor.
+ * Any exception thrown during {@code Executor.execute} (e.g., a {@code
+ * RejectedExecutionException} or an exception thrown by {@linkplain
+ * MoreExecutors#sameThreadExecutor inline execution}) will be caught and
+ * logged.
+ *
+ * @author Nishant Thakkar
+ * @author Sven Mawson
+ * @since 1.0
+ */
+public final class ExecutionList {
+
+  // Logger to log exceptions caught when running runnables.
+  private static final Logger log =
+      Logger.getLogger(ExecutionList.class.getName());
+
+  // The runnable,executor pairs to execute.
+  private final Queue<RunnableExecutorPair> runnables = Lists.newLinkedList();
+
+  // Boolean we use mark when execution has started.  Only accessed from within
+  // synchronized blocks.
+  private boolean executed = false;
+
+  /** Creates a new, empty {@link ExecutionList}. */
+  public ExecutionList() {
+  }
+
+  /**
+   * Adds the {@code Runnable} and accompanying {@code Executor} to the list of
+   * listeners to execute. If execution has already begun, the listener is
+   * executed immediately.
+   *
+   * <p>Note: For fast, lightweight listeners that would be safe to execute in
+   * any thread, consider {@link MoreExecutors#sameThreadExecutor}. For heavier
+   * listeners, {@code sameThreadExecutor()} carries some caveats: First, the
+   * thread that the listener runs in depends on whether the {@code
+   * ExecutionList} has been executed at the time it is added. In particular,
+   * listeners may run in the thread that calls {@code add}. Second, the thread
+   * that calls {@link #execute} may be an internal implementation thread, such
+   * as an RPC network thread, and {@code sameThreadExecutor()} listeners may
+   * run in this thread. Finally, during the execution of a {@code
+   * sameThreadExecutor} listener, all other registered but unexecuted
+   * listeners are prevented from running, even if those listeners are to run
+   * in other executors.
+   */
+  public void add(Runnable runnable, Executor executor) {
+    // Fail fast on a null.  We throw NPE here because the contract of
+    // Executor states that it throws NPE on null listener, so we propagate
+    // that contract up into the add method as well.
+    Preconditions.checkNotNull(runnable, "Runnable was null.");
+    Preconditions.checkNotNull(executor, "Executor was null.");
+
+    boolean executeImmediate = false;
+
+    // Lock while we check state.  We must maintain the lock while adding the
+    // new pair so that another thread can't run the list out from under us.
+    // We only add to the list if we have not yet started execution.
+    synchronized (runnables) {
+      if (!executed) {
+        runnables.add(new RunnableExecutorPair(runnable, executor));
+      } else {
+        executeImmediate = true;
+      }
+    }
+
+    // Execute the runnable immediately. Because of scheduling this may end up
+    // getting called before some of the previously added runnables, but we're
+    // OK with that.  If we want to change the contract to guarantee ordering
+    // among runnables we'd have to modify the logic here to allow it.
+    if (executeImmediate) {
+      new RunnableExecutorPair(runnable, executor).execute();
+    }
+  }
+
+  /**
+   * Runs this execution list, executing all existing pairs in the order they
+   * were added. However, note that listeners added after this point may be
+   * executed before those previously added, and note that the execution order
+   * of all listeners is ultimately chosen by the implementations of the
+   * supplied executors.
+   *
+   * <p>This method is idempotent. Calling it several times in parallel is
+   * semantically equivalent to calling it exactly once.
+   *
+   * @since 10.0 (present in 1.0 as {@code run})
+   */
+  public void execute() {
+    // Lock while we update our state so the add method above will finish adding
+    // any listeners before we start to run them.
+    synchronized (runnables) {
+      if (executed) {
+        return;
+      }
+      executed = true;
+    }
+
+    // At this point the runnables will never be modified by another
+    // thread, so we are safe using it outside of the synchronized block.
+    while (!runnables.isEmpty()) {
+      runnables.poll().execute();
+    }
+  }
+
+  private static class RunnableExecutorPair {
+    final Runnable runnable;
+    final Executor executor;
+
+    RunnableExecutorPair(Runnable runnable, Executor executor) {
+      this.runnable = runnable;
+      this.executor = executor;
+    }
+
+    void execute() {
+      try {
+        executor.execute(runnable);
+      } catch (RuntimeException e) {
+        // Log it and keep going, bad runnable and/or executor.  Don't
+        // punish the other runnables if we're given a bad one.  We only
+        // catch RuntimeException because we want Errors to propagate up.
+        log.log(Level.SEVERE, "RuntimeException while executing runnable "
+            + runnable + " with executor " + executor, e);
+      }
+    }
+  }
+}
diff --git a/guava/src/com/google/common/util/concurrent/FakeTimeLimiter.java b/guava/src/com/google/common/util/concurrent/FakeTimeLimiter.java
new file mode 100644
index 0000000..890479d
--- /dev/null
+++ b/guava/src/com/google/common/util/concurrent/FakeTimeLimiter.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2006 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import com.google.common.annotations.Beta;
+
+import java.util.concurrent.Callable;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * A TimeLimiter implementation which actually does not attempt to limit time
+ * at all.  This may be desirable to use in some unit tests.  More importantly,
+ * attempting to debug a call which is time-limited would be extremely annoying,
+ * so this gives you a time-limiter you can easily swap in for your real
+ * time-limiter while you're debugging.
+ *
+ * @author Kevin Bourrillion
+ * @since 1.0
+ */
+@Beta
+public final class FakeTimeLimiter implements TimeLimiter {
+  @Override
+  public <T> T newProxy(T target, Class<T> interfaceType, long timeoutDuration,
+      TimeUnit timeoutUnit) {
+    return target; // ha ha
+  }
+
+  @Override
+  public <T> T callWithTimeout(Callable<T> callable, long timeoutDuration,
+      TimeUnit timeoutUnit, boolean amInterruptible) throws Exception {
+    return callable.call(); // fooled you
+  }
+}
diff --git a/guava/src/com/google/common/util/concurrent/ForwardingBlockingQueue.java b/guava/src/com/google/common/util/concurrent/ForwardingBlockingQueue.java
new file mode 100644
index 0000000..f7257a2
--- /dev/null
+++ b/guava/src/com/google/common/util/concurrent/ForwardingBlockingQueue.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import com.google.common.collect.ForwardingQueue;
+
+import java.util.Collection;
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * A {@link BlockingQueue} which forwards all its method calls to another
+ * {@link BlockingQueue}. Subclasses should override one or more methods to
+ * modify the behavior of the backing collection as desired per the <a
+ * href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
+ *
+ * @author Raimundo Mirisola
+ *
+ * @param <E> the type of elements held in this collection
+ * @since 4.0
+ */
+public abstract class ForwardingBlockingQueue<E> extends ForwardingQueue<E>
+    implements BlockingQueue<E> {
+
+  /** Constructor for use by subclasses. */
+  protected ForwardingBlockingQueue() {}
+
+  @Override protected abstract BlockingQueue<E> delegate();
+
+  @Override public int drainTo(
+      Collection<? super E> c, int maxElements) {
+    return delegate().drainTo(c, maxElements);
+  }
+
+  @Override public int drainTo(Collection<? super E> c) {
+    return delegate().drainTo(c);
+  }
+
+  @Override public boolean offer(E e, long timeout, TimeUnit unit)
+      throws InterruptedException {
+    return delegate().offer(e, timeout, unit);
+  }
+
+  @Override public E poll(long timeout, TimeUnit unit)
+      throws InterruptedException {
+    return delegate().poll(timeout, unit);
+  }
+
+  @Override public void put(E e) throws InterruptedException {
+    delegate().put(e);
+  }
+
+  @Override public int remainingCapacity() {
+    return delegate().remainingCapacity();
+  }
+
+  @Override public E take() throws InterruptedException {
+    return delegate().take();
+  }
+}
diff --git a/guava/src/com/google/common/util/concurrent/ForwardingCheckedFuture.java b/guava/src/com/google/common/util/concurrent/ForwardingCheckedFuture.java
new file mode 100644
index 0000000..1dee47a
--- /dev/null
+++ b/guava/src/com/google/common/util/concurrent/ForwardingCheckedFuture.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import com.google.common.annotations.Beta;
+import com.google.common.base.Preconditions;
+
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+
+/**
+ * A future which forwards all its method calls to another future. Subclasses
+ * should override one or more methods to modify the behavior of the backing 
+ * future as desired per the <a href=
+ * "http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
+ *
+ * <p>Most subclasses can simply extend {@link SimpleForwardingCheckedFuture}.
+ * 
+ * @param <V> The result type returned by this Future's {@code get} method
+ * @param <X> The type of the Exception thrown by the Future's 
+ *            {@code checkedGet} method
+ *
+ * @author Anthony Zana
+ * @since 9.0
+ */
+@Beta
+public abstract class ForwardingCheckedFuture<V, X extends Exception> 
+    extends ForwardingListenableFuture<V> implements CheckedFuture<V, X> {
+
+  @Override
+  public V checkedGet() throws X {
+    return delegate().checkedGet();
+  }
+
+  @Override
+  public V checkedGet(long timeout, TimeUnit unit) throws TimeoutException, X {
+    return delegate().checkedGet(timeout, unit);
+  }
+
+  @Override
+  protected abstract CheckedFuture<V, X> delegate();
+
+  // TODO(cpovirk): Use Standard Javadoc form for SimpleForwarding*
+  /**
+   * A simplified version of {@link ForwardingCheckedFuture} where subclasses
+   * can pass in an already constructed {@link CheckedFuture} as the delegate.
+   * 
+   * @since 9.0
+   */
+  @Beta
+  public abstract static class SimpleForwardingCheckedFuture<
+      V, X extends Exception> extends ForwardingCheckedFuture<V, X> {
+    private final CheckedFuture<V, X> delegate;
+
+    protected SimpleForwardingCheckedFuture(CheckedFuture<V, X> delegate) {
+      this.delegate = Preconditions.checkNotNull(delegate);
+    }
+
+    @Override
+    protected final CheckedFuture<V, X> delegate() {
+      return delegate;
+    }
+  }
+}
diff --git a/guava/src/com/google/common/util/concurrent/ForwardingExecutorService.java b/guava/src/com/google/common/util/concurrent/ForwardingExecutorService.java
new file mode 100644
index 0000000..9c09af0
--- /dev/null
+++ b/guava/src/com/google/common/util/concurrent/ForwardingExecutorService.java
@@ -0,0 +1,117 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import com.google.common.collect.ForwardingObject;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+
+/**
+ * An executor service which forwards all its method calls to another executor
+ * service. Subclasses should override one or more methods to modify the
+ * behavior of the backing executor service as desired per the <a
+ * href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
+ *
+ * @author Kurt Alfred Kluever
+ * @since 10.0
+ */
+public abstract class ForwardingExecutorService extends ForwardingObject
+    implements ExecutorService {
+  /** Constructor for use by subclasses. */
+  protected ForwardingExecutorService() {}
+  
+  @Override
+  protected abstract ExecutorService delegate();
+
+  @Override
+  public boolean awaitTermination(long timeout, TimeUnit unit)
+      throws InterruptedException {
+    return delegate().awaitTermination(timeout, unit);
+  }
+
+  @Override
+  public <T> List<Future<T>> invokeAll(
+      Collection<? extends Callable<T>> tasks) throws InterruptedException {
+    return delegate().invokeAll(tasks);
+  }
+
+  @Override
+  public <T> List<Future<T>> invokeAll(
+      Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit)
+      throws InterruptedException {
+    return delegate().invokeAll(tasks, timeout, unit);
+  }
+
+  @Override
+  public <T> T invokeAny(Collection<? extends Callable<T>> tasks)
+      throws InterruptedException, ExecutionException {
+    return delegate().invokeAny(tasks);
+  }
+
+  @Override
+  public <T> T invokeAny(
+      Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit)
+      throws InterruptedException, ExecutionException, TimeoutException {
+    return delegate().invokeAny(tasks, timeout, unit);
+  }
+
+  @Override
+  public boolean isShutdown() {
+    return delegate().isShutdown();
+  }
+
+  @Override
+  public boolean isTerminated() {
+    return delegate().isTerminated();
+  }
+
+  @Override
+  public void shutdown() {
+    delegate().shutdown();
+  }
+
+  @Override
+  public List<Runnable> shutdownNow() {
+    return delegate().shutdownNow();
+  }
+
+  @Override
+  public void execute(Runnable command) {
+    delegate().execute(command);
+  }
+
+  public <T> Future<T> submit(Callable<T> task) {
+    return delegate().submit(task);
+  }
+
+  @Override
+  public Future<?> submit(Runnable task) {
+    return delegate().submit(task);
+  }
+
+  @Override
+  public <T> Future<T> submit(Runnable task, T result) {
+    return delegate().submit(task, result);
+  }
+}
diff --git a/guava/src/com/google/common/util/concurrent/ForwardingFuture.java b/guava/src/com/google/common/util/concurrent/ForwardingFuture.java
new file mode 100644
index 0000000..9fcd119
--- /dev/null
+++ b/guava/src/com/google/common/util/concurrent/ForwardingFuture.java
@@ -0,0 +1,96 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import com.google.common.base.Preconditions;
+import com.google.common.collect.ForwardingObject;
+
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+
+/**
+ * A {@link Future} which forwards all its method calls to another future.
+ * Subclasses should override one or more methods to modify the behavior of
+ * the backing future as desired per the <a
+ * href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
+ *
+ * <p>Most subclasses can just use {@link SimpleForwardingFuture}.
+ * 
+ * @author Sven Mawson
+ * @since 1.0
+ */
+public abstract class ForwardingFuture<V> extends ForwardingObject
+    implements Future<V> {
+
+  /** Constructor for use by subclasses. */
+  protected ForwardingFuture() {}
+
+  @Override protected abstract Future<V> delegate();
+
+  @Override
+  public boolean cancel(boolean mayInterruptIfRunning) {
+    return delegate().cancel(mayInterruptIfRunning);
+  }
+
+  @Override
+  public boolean isCancelled() {
+    return delegate().isCancelled();
+  }
+
+  @Override
+  public boolean isDone() {
+    return delegate().isDone();
+  }
+
+  @Override
+  public V get() throws InterruptedException, ExecutionException {
+    return delegate().get();
+  }
+
+  @Override
+  public V get(long timeout, TimeUnit unit)
+      throws InterruptedException, ExecutionException, TimeoutException {
+    return delegate().get(timeout, unit);
+  }
+
+  /*
+   * TODO(cpovirk): Use standard Javadoc form for SimpleForwarding* class and
+   * constructor
+   */
+  /**
+   * A simplified version of {@link ForwardingFuture} where subclasses
+   * can pass in an already constructed {@link Future} as the delegate.
+   * 
+   * @since 9.0
+   */
+  public abstract static class SimpleForwardingFuture<V> 
+      extends ForwardingFuture<V> {
+    private final Future<V> delegate;
+
+    protected SimpleForwardingFuture(Future<V> delegate) {
+      this.delegate = Preconditions.checkNotNull(delegate);
+    }
+
+    @Override
+    protected final Future<V> delegate() {
+      return delegate;
+    }
+    
+  }
+}
diff --git a/guava/src/com/google/common/util/concurrent/ForwardingListenableFuture.java b/guava/src/com/google/common/util/concurrent/ForwardingListenableFuture.java
new file mode 100644
index 0000000..79f6d53
--- /dev/null
+++ b/guava/src/com/google/common/util/concurrent/ForwardingListenableFuture.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import com.google.common.base.Preconditions;
+
+import java.util.concurrent.Executor;
+
+/**
+ * A {@link ListenableFuture} which forwards all its method calls to another
+ * future. Subclasses should override one or more methods to modify the behavior
+ * of the backing future as desired per the <a
+ * href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
+ *
+ * <p>Most subclasses can just use {@link SimpleForwardingListenableFuture}.
+ *
+ * @param <V> The result type returned by this Future's {@code get} method
+ * 
+ * @author Shardul Deo
+ * @since 4.0
+ */
+public abstract class ForwardingListenableFuture<V> extends ForwardingFuture<V>
+    implements ListenableFuture<V> {
+
+  /** Constructor for use by subclasses. */
+  protected ForwardingListenableFuture() {}
+
+  @Override
+  protected abstract ListenableFuture<V> delegate();
+
+  @Override
+  public void addListener(Runnable listener, Executor exec) {
+    delegate().addListener(listener, exec);
+  }
+
+  /*
+   * TODO(cpovirk): Use standard Javadoc form for SimpleForwarding* class and
+   * constructor
+   */
+  /**
+   * A simplified version of {@link ForwardingListenableFuture} where subclasses
+   * can pass in an already constructed {@link ListenableFuture} 
+   * as the delegate.
+   * 
+   * @since 9.0
+   */
+  public abstract static class SimpleForwardingListenableFuture<V>
+      extends ForwardingListenableFuture<V> {
+    private final ListenableFuture<V> delegate;
+
+    protected SimpleForwardingListenableFuture(ListenableFuture<V> delegate) {
+      this.delegate = Preconditions.checkNotNull(delegate);
+    }
+
+    @Override
+    protected final ListenableFuture<V> delegate() {
+      return delegate;
+    }
+  }
+}
diff --git a/guava/src/com/google/common/util/concurrent/ForwardingListeningExecutorService.java b/guava/src/com/google/common/util/concurrent/ForwardingListeningExecutorService.java
new file mode 100644
index 0000000..27e44de
--- /dev/null
+++ b/guava/src/com/google/common/util/concurrent/ForwardingListeningExecutorService.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import java.util.concurrent.Callable;
+
+/**
+ * A listening executor service which forwards all its method calls to another
+ * listening executor service. Subclasses should override one or more methods to
+ * modify the behavior of the backing executor service as desired per the <a
+ * href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
+ *
+ * @author Isaac Shum
+ * @since 10.0
+ */
+public abstract class ForwardingListeningExecutorService
+    extends ForwardingExecutorService implements ListeningExecutorService {
+  /** Constructor for use by subclasses. */
+  protected ForwardingListeningExecutorService() {}
+
+  @Override
+  protected abstract ListeningExecutorService delegate();
+
+  @Override
+  public <T> ListenableFuture<T> submit(Callable<T> task) {
+    return delegate().submit(task);
+  }
+
+  @Override
+  public ListenableFuture<?> submit(Runnable task) {
+    return delegate().submit(task);
+  }
+
+  @Override
+  public <T> ListenableFuture<T> submit(Runnable task, T result) {
+    return delegate().submit(task, result);
+  }
+}
diff --git a/guava/src/com/google/common/util/concurrent/ForwardingService.java b/guava/src/com/google/common/util/concurrent/ForwardingService.java
new file mode 100644
index 0000000..e39e4db
--- /dev/null
+++ b/guava/src/com/google/common/util/concurrent/ForwardingService.java
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import com.google.common.annotations.Beta;
+import com.google.common.collect.ForwardingObject;
+
+/**
+ * A {@link Service} that forwards all method calls to another service.
+ *
+ * @author Chris Nokleberg
+ * @since 1.0
+ */
+@Beta
+public abstract class ForwardingService extends ForwardingObject
+    implements Service {
+
+  /** Constructor for use by subclasses. */
+  protected ForwardingService() {}
+
+  @Override protected abstract Service delegate();
+
+  @Override public ListenableFuture<State> start() {
+    return delegate().start();
+  }
+
+  @Override public State state() {
+    return delegate().state();
+  }
+
+  @Override public ListenableFuture<State> stop() {
+    return delegate().stop();
+  }
+
+  @Override public State startAndWait() {
+    return delegate().startAndWait();
+  }
+
+  @Override public State stopAndWait() {
+    return delegate().stopAndWait();
+  }
+
+  @Override public boolean isRunning() {
+    return delegate().isRunning();
+  }
+
+  /**
+   * A sensible default implementation of {@link #startAndWait()}, in terms of
+   * {@link #start}. If you override {@link #start}, you may wish to override
+   * {@link #startAndWait()} to forward to this implementation.
+   * @since 9.0
+   */
+  protected State standardStartAndWait() {
+    return Futures.getUnchecked(start());
+  }
+
+  /**
+   * A sensible default implementation of {@link #stopAndWait()}, in terms of
+   * {@link #stop}. If you override {@link #stop}, you may wish to override
+   * {@link #stopAndWait()} to forward to this implementation.
+   * @since 9.0
+   */
+  protected State standardStopAndWait() {
+    return Futures.getUnchecked(stop());
+  }
+}
diff --git a/guava/src/com/google/common/util/concurrent/FutureCallback.java b/guava/src/com/google/common/util/concurrent/FutureCallback.java
new file mode 100644
index 0000000..7b39d4a
--- /dev/null
+++ b/guava/src/com/google/common/util/concurrent/FutureCallback.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import com.google.common.annotations.Beta;
+
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
+
+/**
+ * A callback for accepting the results of a {@link java.util.concurrent.Future}
+ * computation asynchronously.
+ *
+ * <p>To attach to a {@link ListenableFuture} use {@link Futures#addCallback}.
+ *
+ * @author Anthony Zana
+ * @since 10.0
+ */
+@Beta
+public interface FutureCallback<V> {
+  /**
+   * Invoked with the result of the {@code Future} computation when it is
+   * successful.
+   */
+  void onSuccess(V result);
+
+  /**
+   * Invoked when a {@code Future} computation fails or is canceled.
+   *
+   * <p>If the future's {@link Future#get() get} method throws an {@link
+   * ExecutionException}, then the cause is passed to this method. Any other
+   * thrown object is passed unaltered.
+   */
+  void onFailure(Throwable t);
+}
diff --git a/guava/src/com/google/common/util/concurrent/Futures.java b/guava/src/com/google/common/util/concurrent/Futures.java
new file mode 100644
index 0000000..dc703c5
--- /dev/null
+++ b/guava/src/com/google/common/util/concurrent/Futures.java
@@ -0,0 +1,1465 @@
+/*
+ * Copyright (C) 2006 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkState;
+import static com.google.common.util.concurrent.MoreExecutors.sameThreadExecutor;
+import static com.google.common.util.concurrent.Uninterruptibles.getUninterruptibly;
+import static com.google.common.util.concurrent.Uninterruptibles.putUninterruptibly;
+import static com.google.common.util.concurrent.Uninterruptibles.takeUninterruptibly;
+import static java.lang.Thread.currentThread;
+import static java.util.Arrays.asList;
+import static java.util.concurrent.TimeUnit.NANOSECONDS;
+
+import com.google.common.annotations.Beta;
+import com.google.common.base.Function;
+import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Ordering;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.UndeclaredThrowableException;
+import java.util.Arrays;
+import java.util.List;
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.CancellationException;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Executor;
+import java.util.concurrent.Future;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import javax.annotation.Nullable;
+
+/**
+ * Static utility methods pertaining to the {@link Future} interface.
+ *
+ * @author Kevin Bourrillion
+ * @author Nishant Thakkar
+ * @author Sven Mawson
+ * @since 1.0
+ */
+@Beta
+public final class Futures {
+  private Futures() {}
+
+  /**
+   * Creates a {@link CheckedFuture} out of a normal {@link ListenableFuture}
+   * and a {@link Function} that maps from {@link Exception} instances into the
+   * appropriate checked type.
+   *
+   * <p>The given mapping function will be applied to an
+   * {@link InterruptedException}, a {@link CancellationException}, or an
+   * {@link ExecutionException} with the actual cause of the exception.
+   * See {@link Future#get()} for details on the exceptions thrown.
+   *
+   * @since 9.0 (source-compatible since 1.0)
+   */
+  public static <V, X extends Exception> CheckedFuture<V, X> makeChecked(
+      ListenableFuture<V> future, Function<Exception, X> mapper) {
+    return new MappingCheckedFuture<V, X>(checkNotNull(future), mapper);
+  }
+
+  /**
+   * Creates a {@code ListenableFuture} which has its value set immediately upon
+   * construction. The getters just return the value. This {@code Future} can't
+   * be canceled or timed out and its {@code isDone()} method always returns
+   * {@code true}.
+   */
+  public static <V> ListenableFuture<V> immediateFuture(@Nullable V value) {
+    SettableFuture<V> future = SettableFuture.create();
+    future.set(value);
+    return future;
+  }
+
+  /**
+   * Returns a {@code CheckedFuture} which has its value set immediately upon
+   * construction.
+   *
+   * <p>The returned {@code Future} can't be cancelled, and its {@code isDone()}
+   * method always returns {@code true}. Calling {@code get()} or {@code
+   * checkedGet()} will immediately return the provided value.
+   */
+  public static <V, X extends Exception> CheckedFuture<V, X>
+      immediateCheckedFuture(@Nullable V value) {
+    SettableFuture<V> future = SettableFuture.create();
+    future.set(value);
+    return Futures.makeChecked(future, new Function<Exception, X>() {
+      @Override
+      public X apply(Exception e) {
+        throw new AssertionError("impossible");
+      }
+    });
+  }
+
+  /**
+   * Returns a {@code ListenableFuture} which has an exception set immediately
+   * upon construction.
+   *
+   * <p>The returned {@code Future} can't be cancelled, and its {@code isDone()}
+   * method always returns {@code true}. Calling {@code get()} will immediately
+   * throw the provided {@code Throwable} wrapped in an {@code
+   * ExecutionException}.
+   *
+   * @throws Error if the throwable is an {@link Error}.
+   */
+  public static <V> ListenableFuture<V> immediateFailedFuture(
+      Throwable throwable) {
+    checkNotNull(throwable);
+    SettableFuture<V> future = SettableFuture.create();
+    future.setException(throwable);
+    return future;
+  }
+
+  /**
+   * Returns a {@code CheckedFuture} which has an exception set immediately upon
+   * construction.
+   *
+   * <p>The returned {@code Future} can't be cancelled, and its {@code isDone()}
+   * method always returns {@code true}. Calling {@code get()} will immediately
+   * throw the provided {@code Throwable} wrapped in an {@code
+   * ExecutionException}, and calling {@code checkedGet()} will throw the
+   * provided exception itself.
+   *
+   * @throws Error if the throwable is an {@link Error}.
+   */
+  public static <V, X extends Exception> CheckedFuture<V, X>
+      immediateFailedCheckedFuture(final X exception) {
+    checkNotNull(exception);
+    return makeChecked(Futures.<V>immediateFailedFuture(exception),
+        new Function<Exception, X>() {
+          @Override
+          public X apply(Exception e) {
+            return exception;
+          }
+        });
+  }
+
+  /**
+   * <p>Returns a new {@code ListenableFuture} whose result is asynchronously
+   * derived from the result of the given {@code Future}. More precisely, the
+   * returned {@code Future} takes its result from a {@code Future} produced by
+   * applying the given {@code Function} to the result of the original {@code
+   * Future}. Example:
+   *
+   * <pre>   {@code
+   *   ListenableFuture<RowKey> rowKeyFuture = indexService.lookUp(query);
+   *   Function<RowKey, ListenableFuture<QueryResult>> queryFunction =
+   *       new Function<RowKey, ListenableFuture<QueryResult>>() {
+   *         public ListenableFuture<QueryResult> apply(RowKey rowKey) {
+   *           return dataService.read(rowKey);
+   *         }
+   *       };
+   *   ListenableFuture<QueryResult> queryFuture =
+   *       chain(rowKeyFuture, queryFunction);
+   * }</pre>
+   *
+   * <p>Note: This overload of {@code chain} is designed for cases in which the
+   * work of creating the derived future is fast and lightweight, as the method
+   * does not accept an {@code Executor} in which to perform the the work. For
+   * heavier derivations, this overload carries some caveats: First, the thread
+   * that the derivation runs in depends on whether the input {@code Future} is
+   * done at the time {@code chain} is called. In particular, if called late,
+   * {@code chain} will run the derivation in the thread that called {@code
+   * chain}.  Second, derivations may run in an internal thread of the system
+   * responsible for the input {@code Future}, such as an RPC network thread.
+   * Finally, during the execution of a {@code sameThreadExecutor} {@code
+   * chain} function, all other registered but unexecuted listeners are
+   * prevented from running, even if those listeners are to run in other
+   * executors.
+   *
+   * <p>The returned {@code Future} attempts to keep its cancellation state in
+   * sync with that of the input future and that of the future returned by the
+   * chain function. That is, if the returned {@code Future} is cancelled, it
+   * will attempt to cancel the other two, and if either of the other two is
+   * cancelled, the returned {@code Future} will receive a callback in which it
+   * will attempt to cancel itself.
+   *
+   * @param input The future to chain
+   * @param function A function to chain the results of the provided future
+   *     to the results of the returned future.  This will be run in the thread
+   *     that notifies input it is complete.
+   * @return A future that holds result of the chain.
+   * @deprecated Convert your {@code Function} to a {@code AsyncFunction}, and
+   *     use {@link #transform(ListenableFuture, AsyncFunction)}. This method is
+   *     scheduled to be removed from Guava in Guava release 12.0.
+   */
+  @Deprecated
+  public static <I, O> ListenableFuture<O> chain(
+      ListenableFuture<I> input,
+      Function<? super I, ? extends ListenableFuture<? extends O>> function) {
+    return chain(input, function, MoreExecutors.sameThreadExecutor());
+  }
+
+  /**
+   * <p>Returns a new {@code ListenableFuture} whose result is asynchronously
+   * derived from the result of the given {@code Future}. More precisely, the
+   * returned {@code Future} takes its result from a {@code Future} produced by
+   * applying the given {@code Function} to the result of the original {@code
+   * Future}. Example:
+   *
+   * <pre>   {@code
+   *   ListenableFuture<RowKey> rowKeyFuture = indexService.lookUp(query);
+   *   Function<RowKey, ListenableFuture<QueryResult>> queryFunction =
+   *       new Function<RowKey, ListenableFuture<QueryResult>>() {
+   *         public ListenableFuture<QueryResult> apply(RowKey rowKey) {
+   *           return dataService.read(rowKey);
+   *         }
+   *       };
+   *   ListenableFuture<QueryResult> queryFuture =
+   *       chain(rowKeyFuture, queryFunction, executor);
+   * }</pre>
+   *
+   * <p>The returned {@code Future} attempts to keep its cancellation state in
+   * sync with that of the input future and that of the future returned by the
+   * chain function. That is, if the returned {@code Future} is cancelled, it
+   * will attempt to cancel the other two, and if either of the other two is
+   * cancelled, the returned {@code Future} will receive a callback in which it
+   * will attempt to cancel itself.
+   *
+   * <p>Note: For cases in which the work of creating the derived future is
+   * fast and lightweight, consider {@linkplain Futures#chain(ListenableFuture,
+   * Function) the other overload} or explicit use of {@code
+   * sameThreadExecutor}. For heavier derivations, this choice carries some
+   * caveats: First, the thread that the derivation runs in depends on whether
+   * the input {@code Future} is done at the time {@code chain} is called. In
+   * particular, if called late, {@code chain} will run the derivation in the
+   * thread that called {@code chain}. Second, derivations may run in an
+   * internal thread of the system responsible for the input {@code Future},
+   * such as an RPC network thread. Finally, during the execution of a {@code
+   * sameThreadExecutor} {@code chain} function, all other registered but
+   * unexecuted listeners are prevented from running, even if those listeners
+   * are to run in other executors.
+   *
+   * @param input The future to chain
+   * @param function A function to chain the results of the provided future
+   *     to the results of the returned future.
+   * @param executor Executor to run the function in.
+   * @return A future that holds result of the chain.
+   * @deprecated Convert your {@code Function} to a {@code AsyncFunction}, and
+   *     use {@link #transform(ListenableFuture, AsyncFunction, Executor)}. This
+   *     method is scheduled to be removed from Guava in Guava release 12.0.
+   */
+  @Deprecated
+  public static <I, O> ListenableFuture<O> chain(ListenableFuture<I> input,
+      final Function<? super I, ? extends ListenableFuture<? extends O>>
+          function,
+      Executor executor) {
+    checkNotNull(function);
+    ChainingListenableFuture<I, O> chain =
+        new ChainingListenableFuture<I, O>(new AsyncFunction<I, O>() {
+          @Override
+          /*
+           * All methods of ListenableFuture are covariant, and we don't expose
+           * the object anywhere that would allow it to be downcast.
+           */
+          @SuppressWarnings("unchecked")
+          public ListenableFuture<O> apply(I input) {
+            return (ListenableFuture) function.apply(input);
+          }
+        }, input);
+    input.addListener(chain, executor);
+    return chain;
+  }
+
+  /**
+   * Returns a new {@code ListenableFuture} whose result is asynchronously
+   * derived from the result of the given {@code Future}. More precisely, the
+   * returned {@code Future} takes its result from a {@code Future} produced by
+   * applying the given {@code AsyncFunction} to the result of the original
+   * {@code Future}. Example:
+   *
+   * <pre>   {@code
+   *   ListenableFuture<RowKey> rowKeyFuture = indexService.lookUp(query);
+   *   AsyncFunction<RowKey, QueryResult> queryFunction =
+   *       new AsyncFunction<RowKey, QueryResult>() {
+   *         public ListenableFuture<QueryResult> apply(RowKey rowKey) {
+   *           return dataService.read(rowKey);
+   *         }
+   *       };
+   *   ListenableFuture<QueryResult> queryFuture =
+   *       transform(rowKeyFuture, queryFunction);
+   * }</pre>
+   *
+   * <p>Note: This overload of {@code transform} is designed for cases in which
+   * the work of creating the derived {@code Future} is fast and lightweight,
+   * as the method does not accept an {@code Executor} in which to perform the
+   * the work. (The created {@code Future} itself need not complete quickly.)
+   * For heavier operations, this overload carries some caveats: First, the
+   * thread that {@code function.apply} runs in depends on whether the input
+   * {@code Future} is done at the time {@code transform} is called. In
+   * particular, if called late, {@code transform} will run the operation in
+   * the thread that called {@code transform}.  Second, {@code function.apply}
+   * may run in an internal thread of the system responsible for the input
+   * {@code Future}, such as an RPC network thread.  Finally, during the
+   * execution of a {@code sameThreadExecutor} {@code function.apply}, all
+   * other registered but unexecuted listeners are prevented from running, even
+   * if those listeners are to run in other executors.
+   *
+   * <p>The returned {@code Future} attempts to keep its cancellation state in
+   * sync with that of the input future and that of the future returned by the
+   * function. That is, if the returned {@code Future} is cancelled, it will
+   * attempt to cancel the other two, and if either of the other two is
+   * cancelled, the returned {@code Future} will receive a callback in which it
+   * will attempt to cancel itself.
+   *
+   * @param input The future to transform
+   * @param function A function to transform the result of the input future
+   *     to the result of the output future
+   * @return A future that holds result of the function (if the input succeeded)
+   *     or the original input's failure (if not)
+   * @since 11.0
+   */
+  public static <I, O> ListenableFuture<O> transform(ListenableFuture<I> input,
+      AsyncFunction<? super I, ? extends O> function) {
+    return transform(input, function, MoreExecutors.sameThreadExecutor());
+  }
+
+  /**
+   * Returns a new {@code ListenableFuture} whose result is asynchronously
+   * derived from the result of the given {@code Future}. More precisely, the
+   * returned {@code Future} takes its result from a {@code Future} produced by
+   * applying the given {@code AsyncFunction} to the result of the original
+   * {@code Future}. Example:
+   *
+   * <pre>   {@code
+   *   ListenableFuture<RowKey> rowKeyFuture = indexService.lookUp(query);
+   *   AsyncFunction<RowKey, QueryResult> queryFunction =
+   *       new AsyncFunction<RowKey, QueryResult>() {
+   *         public ListenableFuture<QueryResult> apply(RowKey rowKey) {
+   *           return dataService.read(rowKey);
+   *         }
+   *       };
+   *   ListenableFuture<QueryResult> queryFuture =
+   *       transform(rowKeyFuture, queryFunction, executor);
+   * }</pre>
+   *
+   * <p>The returned {@code Future} attempts to keep its cancellation state in
+   * sync with that of the input future and that of the future returned by the
+   * chain function. That is, if the returned {@code Future} is cancelled, it
+   * will attempt to cancel the other two, and if either of the other two is
+   * cancelled, the returned {@code Future} will receive a callback in which it
+   * will attempt to cancel itself.
+   *
+   * <p>Note: For cases in which the work of creating the derived future is
+   * fast and lightweight, consider {@linkplain
+   * Futures#transform(ListenableFuture, Function) the other overload} or
+   * explicit use of {@code sameThreadExecutor}. For heavier derivations, this
+   * choice carries some caveats: First, the thread that {@code function.apply}
+   * runs in depends on whether the input {@code Future} is done at the time
+   * {@code transform} is called. In particular, if called late, {@code
+   * transform} will run the operation in the thread that called {@code
+   * transform}.  Second, {@code function.apply} may run in an internal thread
+   * of the system responsible for the input {@code Future}, such as an RPC
+   * network thread.  Finally, during the execution of a {@code
+   * sameThreadExecutor} {@code function.apply}, all other registered but
+   * unexecuted listeners are prevented from running, even if those listeners
+   * are to run in other executors.
+   *
+   * @param input The future to transform
+   * @param function A function to transform the result of the input future
+   *     to the result of the output future
+   * @param executor Executor to run the function in.
+   * @return A future that holds result of the function (if the input succeeded)
+   *     or the original input's failure (if not)
+   * @since 11.0
+   */
+  public static <I, O> ListenableFuture<O> transform(ListenableFuture<I> input,
+      AsyncFunction<? super I, ? extends O> function,
+      Executor executor) {
+    ChainingListenableFuture<I, O> output =
+        new ChainingListenableFuture<I, O>(function, input);
+    input.addListener(output, executor);
+    return output;
+  }
+
+  /**
+   * Returns a new {@code ListenableFuture} whose result is the product of
+   * applying the given {@code Function} to the result of the given {@code
+   * Future}. Example:
+   *
+   * <pre>   {@code
+   *   ListenableFuture<QueryResult> queryFuture = ...;
+   *   Function<QueryResult, List<Row>> rowsFunction =
+   *       new Function<QueryResult, List<Row>>() {
+   *         public List<Row> apply(QueryResult queryResult) {
+   *           return queryResult.getRows();
+   *         }
+   *       };
+   *   ListenableFuture<List<Row>> rowsFuture =
+   *       transform(queryFuture, rowsFunction);
+   * }</pre>
+   *
+   * <p>Note: This overload of {@code transform} is designed for cases in which
+   * the transformation is fast and lightweight, as the method does not accept
+   * an {@code Executor} in which to perform the the work. For heavier
+   * transformations, this overload carries some caveats: First, the thread
+   * that the transformation runs in depends on whether the input {@code
+   * Future} is done at the time {@code transform} is called. In particular, if
+   * called late, {@code transform} will perform the transformation in the
+   * thread that called {@code transform}. Second, transformations may run in
+   * an internal thread of the system responsible for the input {@code Future},
+   * such as an RPC network thread. Finally, during the execution of a {@code
+   * sameThreadExecutor} transformation, all other registered but unexecuted
+   * listeners are prevented from running, even if those listeners are to run
+   * in other executors.
+   *
+   * <p>The returned {@code Future} attempts to keep its cancellation state in
+   * sync with that of the input future. That is, if the returned {@code Future}
+   * is cancelled, it will attempt to cancel the input, and if the input is
+   * cancelled, the returned {@code Future} will receive a callback in which it
+   * will attempt to cancel itself.
+   *
+   * <p>An example use of this method is to convert a serializable object
+   * returned from an RPC into a POJO.
+   *
+   * @param future The future to transform
+   * @param function A Function to transform the results of the provided future
+   *     to the results of the returned future.  This will be run in the thread
+   *     that notifies input it is complete.
+   * @return A future that holds result of the transformation.
+   * @since 9.0 (in 1.0 as {@code compose})
+   */
+  public static <I, O> ListenableFuture<O> transform(ListenableFuture<I> future,
+      final Function<? super I, ? extends O> function) {
+    return transform(future, function, MoreExecutors.sameThreadExecutor());
+  }
+
+  /**
+   * Returns a new {@code ListenableFuture} whose result is the product of
+   * applying the given {@code Function} to the result of the given {@code
+   * Future}. Example:
+   *
+   * <pre>   {@code
+   *   ListenableFuture<QueryResult> queryFuture = ...;
+   *   Function<QueryResult, List<Row>> rowsFunction =
+   *       new Function<QueryResult, List<Row>>() {
+   *         public List<Row> apply(QueryResult queryResult) {
+   *           return queryResult.getRows();
+   *         }
+   *       };
+   *   ListenableFuture<List<Row>> rowsFuture =
+   *       transform(queryFuture, rowsFunction, executor);
+   * }</pre>
+   *
+   * <p>The returned {@code Future} attempts to keep its cancellation state in
+   * sync with that of the input future. That is, if the returned {@code Future}
+   * is cancelled, it will attempt to cancel the input, and if the input is
+   * cancelled, the returned {@code Future} will receive a callback in which it
+   * will attempt to cancel itself.
+   *
+   * <p>An example use of this method is to convert a serializable object
+   * returned from an RPC into a POJO.
+   *
+   * <p>Note: For cases in which the transformation is fast and lightweight,
+   * consider {@linkplain Futures#transform(ListenableFuture, Function) the
+   * other overload} or explicit use of {@link
+   * MoreExecutors#sameThreadExecutor}. For heavier transformations, this
+   * choice carries some caveats: First, the thread that the transformation
+   * runs in depends on whether the input {@code Future} is done at the time
+   * {@code transform} is called. In particular, if called late, {@code
+   * transform} will perform the transformation in the thread that called
+   * {@code transform}.  Second, transformations may run in an internal thread
+   * of the system responsible for the input {@code Future}, such as an RPC
+   * network thread.  Finally, during the execution of a {@code
+   * sameThreadExecutor} transformation, all other registered but unexecuted
+   * listeners are prevented from running, even if those listeners are to run
+   * in other executors.
+   *
+   * @param future The future to transform
+   * @param function A Function to transform the results of the provided future
+   *     to the results of the returned future.
+   * @param executor Executor to run the function in.
+   * @return A future that holds result of the transformation.
+   * @since 9.0 (in 2.0 as {@code compose})
+   */
+  public static <I, O> ListenableFuture<O> transform(ListenableFuture<I> future,
+      final Function<? super I, ? extends O> function, Executor executor) {
+    checkNotNull(function);
+    Function<I, ListenableFuture<O>> wrapperFunction
+        = new Function<I, ListenableFuture<O>>() {
+            @Override public ListenableFuture<O> apply(I input) {
+              O output = function.apply(input);
+              return immediateFuture(output);
+            }
+        };
+    return chain(future, wrapperFunction, executor);
+  }
+
+  /**
+   * Like {@link #transform(ListenableFuture, Function)} except that the
+   * transformation {@code function} is invoked on each call to
+   * {@link Future#get() get()} on the returned future.
+   *
+   * <p>The returned {@code Future} reflects the input's cancellation
+   * state directly, and any attempt to cancel the returned Future is likewise
+   * passed through to the input Future.
+   *
+   * <p>Note that calls to {@linkplain Future#get(long, TimeUnit) timed get}
+   * only apply the timeout to the execution of the underlying {@code Future},
+   * <em>not</em> to the execution of the transformation function.
+   *
+   * <p>The primary audience of this method is callers of {@code transform}
+   * who don't have a {@code ListenableFuture} available and
+   * do not mind repeated, lazy function evaluation.
+   *
+   * @param future The future to transform
+   * @param function A Function to transform the results of the provided future
+   *     to the results of the returned future.
+   * @return A future that returns the result of the transformation.
+   * @since 10.0
+   */
+  @Beta
+  public static <I, O> Future<O> lazyTransform(final Future<I> future,
+      final Function<? super I, ? extends O> function) {
+    checkNotNull(future);
+    checkNotNull(function);
+    return new Future<O>() {
+
+      @Override
+      public boolean cancel(boolean mayInterruptIfRunning) {
+        return future.cancel(mayInterruptIfRunning);
+      }
+
+      @Override
+      public boolean isCancelled() {
+        return future.isCancelled();
+      }
+
+      @Override
+      public boolean isDone() {
+        return future.isDone();
+      }
+
+      @Override
+      public O get() throws InterruptedException, ExecutionException {
+        return applyTransformation(future.get());
+      }
+
+      @Override
+      public O get(long timeout, TimeUnit unit)
+          throws InterruptedException, ExecutionException, TimeoutException {
+        return applyTransformation(future.get(timeout, unit));
+      }
+
+      private O applyTransformation(I input) throws ExecutionException {
+        try {
+          return function.apply(input);
+        } catch (Throwable t) {
+          throw new ExecutionException(t);
+        }
+      }
+    };
+  }
+
+  /**
+   * An implementation of {@code ListenableFuture} that also implements
+   * {@code Runnable} so that it can be used to nest ListenableFutures.
+   * Once the passed-in {@code ListenableFuture} is complete, it calls the
+   * passed-in {@code Function} to generate the result.
+   *
+   * <p>If the function throws any checked exceptions, they should be wrapped
+   * in a {@code UndeclaredThrowableException} so that this class can get
+   * access to the cause.
+   */
+  private static class ChainingListenableFuture<I, O>
+      extends AbstractFuture<O> implements Runnable {
+
+    private AsyncFunction<? super I, ? extends O> function;
+    private ListenableFuture<? extends I> inputFuture;
+    private volatile ListenableFuture<? extends O> outputFuture;
+    private final BlockingQueue<Boolean> mayInterruptIfRunningChannel =
+        new LinkedBlockingQueue<Boolean>(1);
+    private final CountDownLatch outputCreated = new CountDownLatch(1);
+
+    private ChainingListenableFuture(
+        AsyncFunction<? super I, ? extends O> function,
+        ListenableFuture<? extends I> inputFuture) {
+      this.function = checkNotNull(function);
+      this.inputFuture = checkNotNull(inputFuture);
+    }
+
+    /**
+     * Delegate the get() to the input and output futures, in case
+     * their implementations defer starting computation until their
+     * own get() is invoked.
+     */
+    @Override
+    public O get() throws InterruptedException, ExecutionException {
+      if (!isDone()) {
+        // Invoking get on the inputFuture will ensure our own run()
+        // method below is invoked as a listener when inputFuture sets
+        // its value.  Therefore when get() returns we should then see
+        // the outputFuture be created.
+        ListenableFuture<? extends I> inputFuture = this.inputFuture;
+        if (inputFuture != null) {
+          inputFuture.get();
+        }
+
+        // If our listener was scheduled to run on an executor we may
+        // need to wait for our listener to finish running before the
+        // outputFuture has been constructed by the function.
+        outputCreated.await();
+
+        // Like above with the inputFuture, we have a listener on
+        // the outputFuture that will set our own value when its
+        // value is set.  Invoking get will ensure the output can
+        // complete and invoke our listener, so that we can later
+        // get the result.
+        ListenableFuture<? extends O> outputFuture = this.outputFuture;
+        if (outputFuture != null) {
+          outputFuture.get();
+        }
+      }
+      return super.get();
+    }
+
+    /**
+     * Delegate the get() to the input and output futures, in case
+     * their implementations defer starting computation until their
+     * own get() is invoked.
+     */
+    @Override
+    public O get(long timeout, TimeUnit unit) throws TimeoutException,
+        ExecutionException, InterruptedException {
+      if (!isDone()) {
+        // Use a single time unit so we can decrease remaining timeout
+        // as we wait for various phases to complete.
+        if (unit != NANOSECONDS) {
+          timeout = NANOSECONDS.convert(timeout, unit);
+          unit = NANOSECONDS;
+        }
+
+        // Invoking get on the inputFuture will ensure our own run()
+        // method below is invoked as a listener when inputFuture sets
+        // its value.  Therefore when get() returns we should then see
+        // the outputFuture be created.
+        ListenableFuture<? extends I> inputFuture = this.inputFuture;
+        if (inputFuture != null) {
+          long start = System.nanoTime();
+          inputFuture.get(timeout, unit);
+          timeout -= Math.max(0, System.nanoTime() - start);
+        }
+
+        // If our listener was scheduled to run on an executor we may
+        // need to wait for our listener to finish running before the
+        // outputFuture has been constructed by the function.
+        long start = System.nanoTime();
+        if (!outputCreated.await(timeout, unit)) {
+          throw new TimeoutException();
+        }
+        timeout -= Math.max(0, System.nanoTime() - start);
+
+        // Like above with the inputFuture, we have a listener on
+        // the outputFuture that will set our own value when its
+        // value is set.  Invoking get will ensure the output can
+        // complete and invoke our listener, so that we can later
+        // get the result.
+        ListenableFuture<? extends O> outputFuture = this.outputFuture;
+        if (outputFuture != null) {
+          outputFuture.get(timeout, unit);
+        }
+      }
+      return super.get(timeout, unit);
+    }
+
+    @Override
+    public boolean cancel(boolean mayInterruptIfRunning) {
+      /*
+       * Our additional cancellation work needs to occur even if
+       * !mayInterruptIfRunning, so we can't move it into interruptTask().
+       */
+      if (super.cancel(mayInterruptIfRunning)) {
+        // This should never block since only one thread is allowed to cancel
+        // this Future.
+        putUninterruptibly(mayInterruptIfRunningChannel, mayInterruptIfRunning);
+        cancel(inputFuture, mayInterruptIfRunning);
+        cancel(outputFuture, mayInterruptIfRunning);
+        return true;
+      }
+      return false;
+    }
+
+    private void cancel(@Nullable Future<?> future,
+        boolean mayInterruptIfRunning) {
+      if (future != null) {
+        future.cancel(mayInterruptIfRunning);
+      }
+    }
+
+    @Override
+    public void run() {
+      try {
+        I sourceResult;
+        try {
+          sourceResult = getUninterruptibly(inputFuture);
+        } catch (CancellationException e) {
+          // Cancel this future and return.
+          // At this point, inputFuture is cancelled and outputFuture doesn't
+          // exist, so the value of mayInterruptIfRunning is irrelevant.
+          cancel(false);
+          return;
+        } catch (ExecutionException e) {
+          // Set the cause of the exception as this future's exception
+          setException(e.getCause());
+          return;
+        }
+
+        final ListenableFuture<? extends O> outputFuture = this.outputFuture =
+            function.apply(sourceResult);
+        if (isCancelled()) {
+          // Handles the case where cancel was called while the function was
+          // being applied.
+          // There is a gap in cancel(boolean) between calling sync.cancel()
+          // and storing the value of mayInterruptIfRunning, so this thread
+          // needs to block, waiting for that value.
+          outputFuture.cancel(
+              takeUninterruptibly(mayInterruptIfRunningChannel));
+          this.outputFuture = null;
+          return;
+        }
+        outputFuture.addListener(new Runnable() {
+            @Override
+            public void run() {
+              try {
+                // Here it would have been nice to have had an
+                // UninterruptibleListenableFuture, but we don't want to start a
+                // combinatorial explosion of interfaces, so we have to make do.
+                set(getUninterruptibly(outputFuture));
+              } catch (CancellationException e) {
+                // Cancel this future and return.
+                // At this point, inputFuture and outputFuture are done, so the
+                // value of mayInterruptIfRunning is irrelevant.
+                cancel(false);
+                return;
+              } catch (ExecutionException e) {
+                // Set the cause of the exception as this future's exception
+                setException(e.getCause());
+              } finally {
+                // Don't pin inputs beyond completion
+                ChainingListenableFuture.this.outputFuture = null;
+              }
+            }
+          }, MoreExecutors.sameThreadExecutor());
+      } catch (UndeclaredThrowableException e) {
+        // Set the cause of the exception as this future's exception
+        setException(e.getCause());
+      } catch (Exception e) {
+        // This exception is irrelevant in this thread, but useful for the
+        // client
+        setException(e);
+      } catch (Error e) {
+        // Propagate errors up ASAP - our superclass will rethrow the error
+        setException(e);
+      } finally {
+        // Don't pin inputs beyond completion
+        function = null;
+        inputFuture = null;
+        // Allow our get routines to examine outputFuture now.
+        outputCreated.countDown();
+      }
+    }
+  }
+
+  /**
+   * Creates a new {@code ListenableFuture} whose value is a list containing the
+   * values of all its input futures, if all succeed. If any input fails, the
+   * returned future fails.
+   *
+   * <p>The list of results is in the same order as the input list.
+   *
+   * <p>Canceling this future does not cancel any of the component futures;
+   * however, if any of the provided futures fails or is canceled, this one is,
+   * too.
+   *
+   * @param futures futures to combine
+   * @return a future that provides a list of the results of the component
+   *         futures
+   * @since 10.0
+   */
+  @Beta
+  public static <V> ListenableFuture<List<V>> allAsList(
+      ListenableFuture<? extends V>... futures) {
+    return new ListFuture<V>(ImmutableList.copyOf(futures), true,
+        MoreExecutors.sameThreadExecutor());
+  }
+
+  /**
+   * Creates a new {@code ListenableFuture} whose value is a list containing the
+   * values of all its input futures, if all succeed. If any input fails, the
+   * returned future fails.
+   *
+   * <p>The list of results is in the same order as the input list.
+   *
+   * <p>Canceling this future does not cancel any of the component futures;
+   * however, if any of the provided futures fails or is canceled, this one is,
+   * too.
+   *
+   * @param futures futures to combine
+   * @return a future that provides a list of the results of the component
+   *         futures
+   * @since 10.0
+   */
+  @Beta
+  public static <V> ListenableFuture<List<V>> allAsList(
+      Iterable<? extends ListenableFuture<? extends V>> futures) {
+    return new ListFuture<V>(ImmutableList.copyOf(futures), true,
+        MoreExecutors.sameThreadExecutor());
+  }
+
+  /**
+   * Creates a new {@code ListenableFuture} whose value is a list containing the
+   * values of all its successful input futures. The list of results is in the
+   * same order as the input list, and if any of the provided futures fails or
+   * is canceled, its corresponding position will contain {@code null} (which is
+   * indistinguishable from the future having a successful value of
+   * {@code null}).
+   *
+   * @param futures futures to combine
+   * @return a future that provides a list of the results of the component
+   *         futures
+   * @since 10.0
+   */
+  @Beta
+  public static <V> ListenableFuture<List<V>> successfulAsList(
+      ListenableFuture<? extends V>... futures) {
+    return new ListFuture<V>(ImmutableList.copyOf(futures), false,
+        MoreExecutors.sameThreadExecutor());
+  }
+
+  /**
+   * Creates a new {@code ListenableFuture} whose value is a list containing the
+   * values of all its successful input futures. The list of results is in the
+   * same order as the input list, and if any of the provided futures fails or
+   * is canceled, its corresponding position will contain {@code null} (which is
+   * indistinguishable from the future having a successful value of
+   * {@code null}).
+   *
+   * @param futures futures to combine
+   * @return a future that provides a list of the results of the component
+   *         futures
+   * @since 10.0
+   */
+  @Beta
+  public static <V> ListenableFuture<List<V>> successfulAsList(
+      Iterable<? extends ListenableFuture<? extends V>> futures) {
+    return new ListFuture<V>(ImmutableList.copyOf(futures), false,
+        MoreExecutors.sameThreadExecutor());
+  }
+
+  /**
+   * Registers separate success and failure callbacks to be run when the {@code
+   * Future}'s computation is {@linkplain java.util.concurrent.Future#isDone()
+   * complete} or, if the computation is already complete, immediately.
+   *
+   * <p>There is no guaranteed ordering of execution of callbacks, but any
+   * callback added through this method is guaranteed to be called once the
+   * computation is complete.
+   *
+   * Example: <pre> {@code
+   * ListenableFuture<QueryResult> future = ...;
+   * addCallback(future,
+   *     new FutureCallback<QueryResult> {
+   *       public void onSuccess(QueryResult result) {
+   *         storeInCache(result);
+   *       }
+   *       public void onFailure(Throwable t) {
+   *         reportError(t);
+   *       }
+   *     });}</pre>
+   *
+   * <p>Note: This overload of {@code addCallback} is designed for cases in
+   * which the callack is fast and lightweight, as the method does not accept
+   * an {@code Executor} in which to perform the the work. For heavier
+   * callbacks, this overload carries some caveats: First, the thread that the
+   * callback runs in depends on whether the input {@code Future} is done at the
+   * time {@code addCallback} is called and on whether the input {@code Future}
+   * is ever cancelled. In particular, {@code addCallback} may execute the
+   * callback in the thread that calls {@code addCallback} or {@code
+   * Future.cancel}. Second, callbacks may run in an internal thread of the
+   * system responsible for the input {@code Future}, such as an RPC network
+   * thread. Finally, during the execution of a {@code sameThreadExecutor}
+   * callback, all other registered but unexecuted listeners are prevented from
+   * running, even if those listeners are to run in other executors.
+   *
+   * <p>For a more general interface to attach a completion listener to a
+   * {@code Future}, see {@link ListenableFuture#addListener addListener}.
+   *
+   * @param future The future attach the callback to.
+   * @param callback The callback to invoke when {@code future} is completed.
+   * @since 10.0
+   */
+  public static <V> void addCallback(ListenableFuture<V> future,
+      FutureCallback<? super V> callback) {
+    addCallback(future, callback, MoreExecutors.sameThreadExecutor());
+  }
+
+  /**
+   * Registers separate success and failure callbacks to be run when the {@code
+   * Future}'s computation is {@linkplain java.util.concurrent.Future#isDone()
+   * complete} or, if the computation is already complete, immediately.
+   *
+   * <p>The callback is run in {@code executor}.
+   * There is no guaranteed ordering of execution of callbacks, but any
+   * callback added through this method is guaranteed to be called once the
+   * computation is complete.
+   *
+   * Example: <pre> {@code
+   * ListenableFuture<QueryResult> future = ...;
+   * Executor e = ...
+   * addCallback(future, e,
+   *     new FutureCallback<QueryResult> {
+   *       public void onSuccess(QueryResult result) {
+   *         storeInCache(result);
+   *       }
+   *       public void onFailure(Throwable t) {
+   *         reportError(t);
+   *       }
+   *     });}</pre>
+   *
+   * When the callback is fast and lightweight consider {@linkplain
+   * Futures#addCallback(ListenableFuture, FutureCallback) the other overload}
+   * or explicit use of {@link MoreExecutors#sameThreadExecutor
+   * sameThreadExecutor}. For heavier callbacks, this choice carries some
+   * caveats: First, the thread that the callback runs in depends on whether
+   * the input {@code Future} is done at the time {@code addCallback} is called
+   * and on whether the input {@code Future} is ever cancelled. In particular,
+   * {@code addCallback} may execute the callback in the thread that calls
+   * {@code addCallback} or {@code Future.cancel}. Second, callbacks may run in
+   * an internal thread of the system responsible for the input {@code Future},
+   * such as an RPC network thread. Finally, during the execution of a {@code
+   * sameThreadExecutor} callback, all other registered but unexecuted
+   * listeners are prevented from running, even if those listeners are to run
+   * in other executors.
+   *
+   * <p>For a more general interface to attach a completion listener to a
+   * {@code Future}, see {@link ListenableFuture#addListener addListener}.
+   *
+   * @param future The future attach the callback to.
+   * @param callback The callback to invoke when {@code future} is completed.
+   * @param executor The executor to run {@code callback} when the future
+   *    completes.
+   * @since 10.0
+   */
+  public static <V> void addCallback(final ListenableFuture<V> future,
+      final FutureCallback<? super V> callback, Executor executor) {
+    Preconditions.checkNotNull(callback);
+    Runnable callbackListener = new Runnable() {
+      @Override
+      public void run() {
+        try {
+          // TODO(user): (Before Guava release), validate that this
+          // is the thing for IE.
+          V value = getUninterruptibly(future);
+          callback.onSuccess(value);
+        } catch (ExecutionException e) {
+          callback.onFailure(e.getCause());
+        } catch (RuntimeException e) {
+          callback.onFailure(e);
+        } catch (Error e) {
+          callback.onFailure(e);
+        }
+      }
+    };
+    future.addListener(callbackListener, executor);
+  }
+
+  /**
+   * Returns the result of {@link Future#get()}, converting most exceptions to a
+   * new instance of the given checked exception type. This reduces boilerplate
+   * for a common use of {@code Future} in which it is unnecessary to
+   * programmatically distinguish between exception types or to extract other
+   * information from the exception instance.
+   *
+   * <p>Exceptions from {@code Future.get} are treated as follows:
+   * <ul>
+   * <li>Any {@link ExecutionException} has its <i>cause</i> wrapped in an
+   *     {@code X} if the cause is a checked exception, an {@link
+   *     UncheckedExecutionException} if the cause is a {@code
+   *     RuntimeException}, or an {@link ExecutionError} if the cause is an
+   *     {@code Error}.
+   * <li>Any {@link InterruptedException} is wrapped in an {@code X} (after
+   *     restoring the interrupt).
+   * <li>Any {@link CancellationException} is propagated untouched, as is any
+   *     other {@link RuntimeException} (though {@code get} implementations are
+   *     discouraged from throwing such exceptions).
+   * </ul>
+   *
+   * The overall principle is to continue to treat every checked exception as a
+   * checked exception, every unchecked exception as an unchecked exception, and
+   * every error as an error. In addition, the cause of any {@code
+   * ExecutionException} is wrapped in order to ensure that the new stack trace
+   * matches that of the current thread.
+   *
+   * <p>Instances of {@code exceptionClass} are created by choosing an arbitrary
+   * public constructor that accepts zero or more arguments, all of type {@code
+   * String} or {@code Throwable} (preferring constructors with at least one
+   * {@code String}) and calling the constructor via reflection. If the
+   * exception did not already have a cause, one is set by calling {@link
+   * Throwable#initCause(Throwable)} on it. If no such constructor exists, an
+   * {@code IllegalArgumentException} is thrown.
+   *
+   * @throws X if {@code get} throws any checked exception except for an {@code
+   *         ExecutionException} whose cause is not itself a checked exception
+   * @throws UncheckedExecutionException if {@code get} throws an {@code
+   *         ExecutionException} with a {@code RuntimeException} as its cause
+   * @throws ExecutionError if {@code get} throws an {@code ExecutionException}
+   *         with an {@code Error} as its cause
+   * @throws CancellationException if {@code get} throws a {@code
+   *         CancellationException}
+   * @throws IllegalArgumentException if {@code exceptionClass} extends {@code
+   *         RuntimeException} or does not have a suitable constructor
+   * @since 10.0
+   */
+  @Beta
+  public static <V, X extends Exception> V get(
+      Future<V> future, Class<X> exceptionClass) throws X {
+    checkNotNull(future);
+    checkArgument(!RuntimeException.class.isAssignableFrom(exceptionClass),
+        "Futures.get exception type (%s) must not be a RuntimeException",
+        exceptionClass);
+    try {
+      return future.get();
+    } catch (InterruptedException e) {
+      currentThread().interrupt();
+      throw newWithCause(exceptionClass, e);
+    } catch (ExecutionException e) {
+      wrapAndThrowExceptionOrError(e.getCause(), exceptionClass);
+      throw new AssertionError();
+    }
+  }
+
+  /**
+   * Returns the result of {@link Future#get(long, TimeUnit)}, converting most
+   * exceptions to a new instance of the given checked exception type. This
+   * reduces boilerplate for a common use of {@code Future} in which it is
+   * unnecessary to programmatically distinguish between exception types or to
+   * extract other information from the exception instance.
+   *
+   * <p>Exceptions from {@code Future.get} are treated as follows:
+   * <ul>
+   * <li>Any {@link ExecutionException} has its <i>cause</i> wrapped in an
+   *     {@code X} if the cause is a checked exception, an {@link
+   *     UncheckedExecutionException} if the cause is a {@code
+   *     RuntimeException}, or an {@link ExecutionError} if the cause is an
+   *     {@code Error}.
+   * <li>Any {@link InterruptedException} is wrapped in an {@code X} (after
+   *     restoring the interrupt).
+   * <li>Any {@link TimeoutException} is wrapped in an {@code X}.
+   * <li>Any {@link CancellationException} is propagated untouched, as is any
+   *     other {@link RuntimeException} (though {@code get} implementations are
+   *     discouraged from throwing such exceptions).
+   * </ul>
+   *
+   * The overall principle is to continue to treat every checked exception as a
+   * checked exception, every unchecked exception as an unchecked exception, and
+   * every error as an error. In addition, the cause of any {@code
+   * ExecutionException} is wrapped in order to ensure that the new stack trace
+   * matches that of the current thread.
+   *
+   * <p>Instances of {@code exceptionClass} are created by choosing an arbitrary
+   * public constructor that accepts zero or more arguments, all of type {@code
+   * String} or {@code Throwable} (preferring constructors with at least one
+   * {@code String}) and calling the constructor via reflection. If the
+   * exception did not already have a cause, one is set by calling {@link
+   * Throwable#initCause(Throwable)} on it. If no such constructor exists, an
+   * {@code IllegalArgumentException} is thrown.
+   *
+   * @throws X if {@code get} throws any checked exception except for an {@code
+   *         ExecutionException} whose cause is not itself a checked exception
+   * @throws UncheckedExecutionException if {@code get} throws an {@code
+   *         ExecutionException} with a {@code RuntimeException} as its cause
+   * @throws ExecutionError if {@code get} throws an {@code ExecutionException}
+   *         with an {@code Error} as its cause
+   * @throws CancellationException if {@code get} throws a {@code
+   *         CancellationException}
+   * @throws IllegalArgumentException if {@code exceptionClass} extends {@code
+   *         RuntimeException} or does not have a suitable constructor
+   * @since 10.0
+   */
+  @Beta
+  public static <V, X extends Exception> V get(
+      Future<V> future, long timeout, TimeUnit unit, Class<X> exceptionClass)
+      throws X {
+    checkNotNull(future);
+    checkNotNull(unit);
+    checkArgument(!RuntimeException.class.isAssignableFrom(exceptionClass),
+        "Futures.get exception type (%s) must not be a RuntimeException",
+        exceptionClass);
+    try {
+      return future.get(timeout, unit);
+    } catch (InterruptedException e) {
+      currentThread().interrupt();
+      throw newWithCause(exceptionClass, e);
+    } catch (TimeoutException e) {
+      throw newWithCause(exceptionClass, e);
+    } catch (ExecutionException e) {
+      wrapAndThrowExceptionOrError(e.getCause(), exceptionClass);
+      throw new AssertionError();
+    }
+  }
+
+  private static <X extends Exception> void wrapAndThrowExceptionOrError(
+      Throwable cause, Class<X> exceptionClass) throws X {
+    if (cause instanceof Error) {
+      throw new ExecutionError((Error) cause);
+    }
+    if (cause instanceof RuntimeException) {
+      throw new UncheckedExecutionException(cause);
+    }
+    throw newWithCause(exceptionClass, cause);
+  }
+
+  /**
+   * Returns the result of calling {@link Future#get()} uninterruptibly on a
+   * task known not to throw a checked exception. This makes {@code Future} more
+   * suitable for lightweight, fast-running tasks that, barring bugs in the
+   * code, will not fail. This gives it exception-handling behavior similar to
+   * that of {@code ForkJoinTask.join}.
+   *
+   * <p>Exceptions from {@code Future.get} are treated as follows:
+   * <ul>
+   * <li>Any {@link ExecutionException} has its <i>cause</i> wrapped in an
+   *     {@link UncheckedExecutionException} (if the cause is an {@code
+   *     Exception}) or {@link ExecutionError} (if the cause is an {@code
+   *     Error}).
+   * <li>Any {@link InterruptedException} causes a retry of the {@code get}
+   *     call. The interrupt is restored before {@code getUnchecked} returns.
+   * <li>Any {@link CancellationException} is propagated untouched. So is any
+   *     other {@link RuntimeException} ({@code get} implementations are
+   *     discouraged from throwing such exceptions).
+   * </ul>
+   *
+   * The overall principle is to eliminate all checked exceptions: to loop to
+   * avoid {@code InterruptedException}, to pass through {@code
+   * CancellationException}, and to wrap any exception from the underlying
+   * computation in an {@code UncheckedExecutionException} or {@code
+   * ExecutionError}.
+   *
+   * <p>For an uninterruptible {@code get} that preserves other exceptions, see
+   * {@link Uninterruptibles#getUninterruptibly(Future)}.
+   *
+   * @throws UncheckedExecutionException if {@code get} throws an {@code
+   *         ExecutionException} with an {@code Exception} as its cause
+   * @throws ExecutionError if {@code get} throws an {@code ExecutionException}
+   *         with an {@code Error} as its cause
+   * @throws CancellationException if {@code get} throws a {@code
+   *         CancellationException}
+   * @since 10.0
+   */
+  @Beta
+  public static <V> V getUnchecked(Future<V> future) {
+    checkNotNull(future);
+    try {
+      return getUninterruptibly(future);
+    } catch (ExecutionException e) {
+      wrapAndThrowUnchecked(e.getCause());
+      throw new AssertionError();
+    }
+  }
+
+  private static void wrapAndThrowUnchecked(Throwable cause) {
+    if (cause instanceof Error) {
+      throw new ExecutionError((Error) cause);
+    }
+    /*
+     * It's a non-Error, non-Exception Throwable. From my survey of such
+     * classes, I believe that most users intended to extend Exception, so we'll
+     * treat it like an Exception.
+     */
+    throw new UncheckedExecutionException(cause);
+  }
+
+  /*
+   * TODO(user): FutureChecker interface for these to be static methods on? If
+   * so, refer to it in the (static-method) Futures.get documentation
+   */
+
+  /*
+   * Arguably we don't need a timed getUnchecked because any operation slow
+   * enough to require a timeout is heavyweight enough to throw a checked
+   * exception and therefore be inappropriate to use with getUnchecked. Further,
+   * it's not clear that converting the checked TimeoutException to a
+   * RuntimeException -- especially to an UncheckedExecutionException, since it
+   * wasn't thrown by the computation -- makes sense, and if we don't convert
+   * it, the user still has to write a try-catch block.
+   *
+   * If you think you would use this method, let us know.
+   */
+
+  private static <X extends Exception> X newWithCause(
+      Class<X> exceptionClass, Throwable cause) {
+    // getConstructors() guarantees this as long as we don't modify the array.
+    @SuppressWarnings("unchecked")
+    List<Constructor<X>> constructors =
+        (List) Arrays.asList(exceptionClass.getConstructors());
+    for (Constructor<X> constructor : preferringStrings(constructors)) {
+      @Nullable X instance = newFromConstructor(constructor, cause);
+      if (instance != null) {
+        if (instance.getCause() == null) {
+          instance.initCause(cause);
+        }
+        return instance;
+      }
+    }
+    throw new IllegalArgumentException(
+        "No appropriate constructor for exception of type " + exceptionClass
+            + " in response to chained exception", cause);
+  }
+
+  private static <X extends Exception> List<Constructor<X>>
+      preferringStrings(List<Constructor<X>> constructors) {
+    return WITH_STRING_PARAM_FIRST.sortedCopy(constructors);
+  }
+
+  private static final Ordering<Constructor<?>> WITH_STRING_PARAM_FIRST =
+      Ordering.natural().onResultOf(new Function<Constructor<?>, Boolean>() {
+        @Override public Boolean apply(Constructor<?> input) {
+          return asList(input.getParameterTypes()).contains(String.class);
+        }
+      }).reverse();
+
+  @Nullable private static <X> X newFromConstructor(
+      Constructor<X> constructor, Throwable cause) {
+    Class<?>[] paramTypes = constructor.getParameterTypes();
+    Object[] params = new Object[paramTypes.length];
+    for (int i = 0; i < paramTypes.length; i++) {
+      Class<?> paramType = paramTypes[i];
+      if (paramType.equals(String.class)) {
+        params[i] = cause.toString();
+      } else if (paramType.equals(Throwable.class)) {
+        params[i] = cause;
+      } else {
+        return null;
+      }
+    }
+    try {
+      return constructor.newInstance(params);
+    } catch (IllegalArgumentException e) {
+      return null;
+    } catch (InstantiationException e) {
+      return null;
+    } catch (IllegalAccessException e) {
+      return null;
+    } catch (InvocationTargetException e) {
+      return null;
+    }
+  }
+
+  /**
+   * Class that implements {@link #allAsList} and {@link #successfulAsList}.
+   * The idea is to create a (null-filled) List and register a listener with
+   * each component future to fill out the value in the List when that future
+   * completes.
+   */
+  private static class ListFuture<V> extends AbstractFuture<List<V>> {
+    ImmutableList<? extends ListenableFuture<? extends V>> futures;
+    final boolean allMustSucceed;
+    final AtomicInteger remaining;
+    List<V> values;
+
+    /**
+     * Constructor.
+     *
+     * @param futures all the futures to build the list from
+     * @param allMustSucceed whether a single failure or cancellation should
+     *        propagate to this future
+     * @param listenerExecutor used to run listeners on all the passed in
+     *        futures.
+     */
+    ListFuture(
+        final ImmutableList<? extends ListenableFuture<? extends V>> futures,
+        final boolean allMustSucceed, final Executor listenerExecutor) {
+      this.futures = futures;
+      this.values = Lists.newArrayListWithCapacity(futures.size());
+      this.allMustSucceed = allMustSucceed;
+      this.remaining = new AtomicInteger(futures.size());
+
+      init(listenerExecutor);
+    }
+
+    private void init(final Executor listenerExecutor) {
+      // First, schedule cleanup to execute when the Future is done.
+      addListener(new Runnable() {
+        @Override
+        public void run() {
+          // By now the values array has either been set as the Future's value,
+          // or (in case of failure) is no longer useful.
+          ListFuture.this.values = null;
+
+          // Let go of the memory held by other futures
+          ListFuture.this.futures = null;
+        }
+      }, MoreExecutors.sameThreadExecutor());
+
+      // Now begin the "real" initialization.
+
+      // Corner case: List is empty.
+      if (futures.isEmpty()) {
+        set(Lists.newArrayList(values));
+        return;
+      }
+
+      // Populate the results list with null initially.
+      for (int i = 0; i < futures.size(); ++i) {
+        values.add(null);
+      }
+
+      // Register a listener on each Future in the list to update
+      // the state of this future.
+      // Note that if all the futures on the list are done prior to completing
+      // this loop, the last call to addListener() will callback to
+      // setOneValue(), transitively call our cleanup listener, and set
+      // this.futures to null.
+      // We store a reference to futures to avoid the NPE.
+      ImmutableList<? extends ListenableFuture<? extends V>> localFutures = futures;
+      for (int i = 0; i < localFutures.size(); i++) {
+        final ListenableFuture<? extends V> listenable = localFutures.get(i);
+        final int index = i;
+        listenable.addListener(new Runnable() {
+          @Override
+          public void run() {
+            setOneValue(index, listenable);
+          }
+        }, listenerExecutor);
+      }
+    }
+
+    /**
+     * Sets the value at the given index to that of the given future.
+     */
+    private void setOneValue(int index, Future<? extends V> future) {
+      List<V> localValues = values;
+      if (isDone() || localValues == null) {
+        // Some other future failed or has been cancelled, causing this one to
+        // also be cancelled or have an exception set. This should only happen
+        // if allMustSucceed is true.
+        checkState(allMustSucceed,
+            "Future was done before all dependencies completed");
+        return;
+      }
+
+      try {
+        checkState(future.isDone(),
+            "Tried to set value from future which is not done");
+        localValues.set(index, getUninterruptibly(future));
+      } catch (CancellationException e) {
+        if (allMustSucceed) {
+          // Set ourselves as cancelled. Let the input futures keep running
+          // as some of them may be used elsewhere.
+          // (Currently we don't override interruptTask, so
+          // mayInterruptIfRunning==false isn't technically necessary.)
+          cancel(false);
+        }
+      } catch (ExecutionException e) {
+        if (allMustSucceed) {
+          // As soon as the first one fails, throw the exception up.
+          // The result of all other inputs is then ignored.
+          setException(e.getCause());
+        }
+      } catch (RuntimeException e) {
+        if (allMustSucceed) {
+          setException(e);
+        }
+      } catch (Error e) {
+        // Propagate errors up ASAP - our superclass will rethrow the error
+        setException(e);
+      } finally {
+        int newRemaining = remaining.decrementAndGet();
+        checkState(newRemaining >= 0, "Less than 0 remaining futures");
+        if (newRemaining == 0) {
+          localValues = values;
+          if (localValues != null) {
+            set(Lists.newArrayList(localValues));
+          } else {
+            checkState(isDone());
+          }
+        }
+      }
+    }
+
+    @Override
+    public List<V> get() throws InterruptedException, ExecutionException {
+      callAllGets();
+
+      // This may still block in spite of the calls above, as the listeners may
+      // be scheduled for execution in other threads.
+      return super.get();
+    }
+
+    /**
+     * Calls the get method of all dependency futures to work around a bug in
+     * some ListenableFutures where the listeners aren't called until get() is
+     * called.
+     */
+    private void callAllGets() throws InterruptedException {
+      List<? extends ListenableFuture<? extends V>> oldFutures = futures;
+      if (oldFutures != null && !isDone()) {
+        for (ListenableFuture<? extends V> future : oldFutures) {
+          // We wait for a little while for the future, but if it's not done,
+          // we check that no other futures caused a cancellation or failure.
+          // This can introduce a delay of up to 10ms in reporting an exception.
+          while (!future.isDone()) {
+            try {
+              future.get();
+            } catch (Error e) {
+              throw e;
+            } catch (InterruptedException e) {
+              throw e;
+            } catch (Throwable e) {
+              // ExecutionException / CancellationException / RuntimeException
+              if (allMustSucceed) {
+                return;
+              } else {
+                continue;
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+
+  /**
+   * A checked future that uses a function to map from exceptions to the
+   * appropriate checked type.
+   */
+  private static class MappingCheckedFuture<V, X extends Exception> extends
+      AbstractCheckedFuture<V, X> {
+
+    final Function<Exception, X> mapper;
+
+    MappingCheckedFuture(ListenableFuture<V> delegate,
+        Function<Exception, X> mapper) {
+      super(delegate);
+
+      this.mapper = checkNotNull(mapper);
+    }
+
+    @Override
+    protected X mapException(Exception e) {
+      return mapper.apply(e);
+    }
+  }
+}
diff --git a/guava/src/com/google/common/util/concurrent/JdkFutureAdapters.java b/guava/src/com/google/common/util/concurrent/JdkFutureAdapters.java
new file mode 100644
index 0000000..6d74bda
--- /dev/null
+++ b/guava/src/com/google/common/util/concurrent/JdkFutureAdapters.java
@@ -0,0 +1,160 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.VisibleForTesting;
+
+import java.util.concurrent.Executor;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.ThreadFactory;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+/**
+ * Utilities necessary for working with libraries that supply plain {@link
+ * Future} instances. Note that, whenver possible, it is strongly preferred to
+ * modify those libraries to return {@code ListenableFuture} directly.
+ *
+ * @author Sven Mawson
+ * @since 10.0 (replacing {@code Futures.makeListenable}, which
+ *     existed in 1.0)
+ */
+@Beta
+public final class JdkFutureAdapters {
+  /**
+   * Assigns a thread to the given {@link Future} to provide {@link
+   * ListenableFuture} functionality.
+   *
+   * <p><b>Warning:</b> If the input future does not already implement {@link
+   * ListenableFuture}, the returned future will emulate {@link
+   * ListenableFuture#addListener} by taking a thread from an internal,
+   * unbounded pool at the first call to {@code addListener} and holding it
+   * until the future is {@linkplain Future#isDone() done}.
+   *
+   * <p>Prefer to create {@code ListenableFuture} instances with {@link
+   * SettableFuture}, {@link MoreExecutors#listeningDecorator(
+   * java.util.concurrent.ExecutorService)}, {@link ListenableFutureTask},
+   * {@link AbstractFuture}, and other utilities over creating plain {@code
+   * Future} instances to be upgraded to {@code ListenableFuture} after the
+   * fact.
+   */
+  public static <V> ListenableFuture<V> listenInPoolThread(
+      Future<V> future) {
+    if (future instanceof ListenableFuture<?>) {
+      return (ListenableFuture<V>) future;
+    }
+    return new ListenableFutureAdapter<V>(future);
+  }
+
+  @VisibleForTesting
+  static <V> ListenableFuture<V> listenInPoolThread(
+      Future<V> future, Executor executor) {
+    checkNotNull(executor);
+    if (future instanceof ListenableFuture<?>) {
+      return (ListenableFuture<V>) future;
+    }
+    return new ListenableFutureAdapter<V>(future, executor);
+  }
+
+  /**
+   * An adapter to turn a {@link Future} into a {@link ListenableFuture}.  This
+   * will wait on the future to finish, and when it completes, run the
+   * listeners.  This implementation will wait on the source future
+   * indefinitely, so if the source future never completes, the adapter will
+   * never complete either.
+   *
+   * <p>If the delegate future is interrupted or throws an unexpected unchecked
+   * exception, the listeners will not be invoked.
+   */
+  private static class ListenableFutureAdapter<V> extends ForwardingFuture<V>
+      implements ListenableFuture<V> {
+
+    private static final ThreadFactory threadFactory =
+        new ThreadFactoryBuilder()
+            .setDaemon(true)
+            .setNameFormat("ListenableFutureAdapter-thread-%d")
+            .build();
+    private static final Executor defaultAdapterExecutor =
+        Executors.newCachedThreadPool(threadFactory);
+
+    private final Executor adapterExecutor;
+
+    // The execution list to hold our listeners.
+    private final ExecutionList executionList = new ExecutionList();
+
+    // This allows us to only start up a thread waiting on the delegate future
+    // when the first listener is added.
+    private final AtomicBoolean hasListeners = new AtomicBoolean(false);
+
+    // The delegate future.
+    private final Future<V> delegate;
+
+    ListenableFutureAdapter(Future<V> delegate) {
+      this(delegate, defaultAdapterExecutor);
+    }
+
+    ListenableFutureAdapter(Future<V> delegate, Executor adapterExecutor) {
+      this.delegate = checkNotNull(delegate);
+      this.adapterExecutor = checkNotNull(adapterExecutor);
+    }
+
+    @Override
+    protected Future<V> delegate() {
+      return delegate;
+    }
+
+    @Override
+    public void addListener(Runnable listener, Executor exec) {
+      executionList.add(listener, exec);
+
+      // When a listener is first added, we run a task that will wait for
+      // the delegate to finish, and when it is done will run the listeners.
+      if (hasListeners.compareAndSet(false, true)) {
+        if (delegate.isDone()) {
+          // If the delegate is already done, run the execution list
+          // immediately on the current thread.
+          executionList.execute();
+          return;
+        }
+
+        adapterExecutor.execute(new Runnable() {
+          @Override
+          public void run() {
+            try {
+              delegate.get();
+            } catch (Error e) {
+              throw e;
+            } catch (InterruptedException e) {
+              Thread.currentThread().interrupt();
+              // Threads from our private pool are never interrupted.
+              throw new AssertionError(e);
+            } catch (Throwable e) {
+              // ExecutionException / CancellationException / RuntimeException
+              // The task is done, run the listeners.
+            }
+            executionList.execute();
+          }
+        });
+      }
+    }
+  }
+
+  private JdkFutureAdapters() {}
+}
diff --git a/guava/src/com/google/common/util/concurrent/ListenableFuture.java b/guava/src/com/google/common/util/concurrent/ListenableFuture.java
new file mode 100644
index 0000000..a0ab2db
--- /dev/null
+++ b/guava/src/com/google/common/util/concurrent/ListenableFuture.java
@@ -0,0 +1,123 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import java.util.concurrent.Executor;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Future;
+import java.util.concurrent.FutureTask;
+import java.util.concurrent.RejectedExecutionException;
+
+/**
+ * A {@link Future} that accepts completion listeners.  Each listener has an
+ * associated executor, and it is invoked using this executor once the future's
+ * computation is {@linkplain Future#isDone() complete}.  If the computation has
+ * already completed when the listener is added, the listener will execute
+ * immediately.
+ *
+ * <h3>Purpose</h3>
+ *
+ * Most commonly, {@code ListenableFuture} is used as an input to another
+ * derived {@code Future}, as in {@link Futures#allAsList(Iterable)
+ * Futures.allAsList}. Many such methods are impossible to implement efficiently
+ * without listener support.
+ *
+ * <p>It is possible to call {@link #addListener addListener} directly, but this
+ * is uncommon because the {@code Runnable} interface does not provide direct
+ * access to the {@code Future} result. (Users who want such access may prefer
+ * {@link Futures#addCallback Futures.addCallback}.) Still, direct {@code
+ * addListener} calls are occasionally useful:<pre>   {@code
+ *   final String name = ...;
+ *   inFlight.add(name);
+ *   ListenableFuture<Result> future = service.query(name);
+ *   future.addListener(new Runnable() {
+ *     public void run() {
+ *       processedCount.incrementAndGet();
+ *       inFlight.remove(name);
+ *       lastProcessed.set(name);
+ *       logger.info("Done with {0}", name);
+ *     }
+ *   }, executor);}</pre>
+ *
+ * <h3>How to get an instance</h3>
+ *
+ * Developers are encouraged to return {@code ListenableFuture} from their
+ * methods so that users can take advantages of the utilities built atop the
+ * class. The way that they will create {@code ListenableFuture} instances
+ * depends on how they currently create {@code Future} instances:
+ * <ul>
+ * <li>If they are returned from an {@code ExecutorService}, convert that
+ * service to a {@link ListeningExecutorService}, usually by calling {@link
+ * MoreExecutors#listeningDecorator(ExecutorService)
+ * MoreExecutors.listeningDecorator}. (Custom executors may find it more
+ * convenient to use {@link ListenableFutureTask} directly.)
+ * <li>If they are manually filled in by a call to {@link FutureTask#set} or a
+ * similar method, create a {@link SettableFuture} instead. (Users with more
+ * complex needs may prefer {@link AbstractFuture}.)
+ * </ul>
+ *
+ * Occasionally, an API will return a plain {@code Future} and it will be
+ * impossible to change the return type. For this case, we provide a more
+ * expensive workaround in {@code JdkFutureAdapters}. However, when possible, it
+ * is more efficient and reliable to create a {@code ListenableFuture} directly.
+ *
+ * @author Sven Mawson
+ * @author Nishant Thakkar
+ * @since 1.0
+ */
+public interface ListenableFuture<V> extends Future<V> {
+  /**
+   * Registers a listener to be {@linkplain Executor#execute(Runnable) run} on
+   * the given executor.  The listener will run when the {@code Future}'s
+   * computation is {@linkplain Future#isDone() complete} or, if the computation
+   * is already complete, immediately.
+   *
+   * <p>There is no guaranteed ordering of execution of listeners, but any
+   * listener added through this method is guaranteed to be called once the
+   * computation is complete.
+   *
+   * <p>Exceptions thrown by a listener will be propagated up to the executor.
+   * Any exception thrown during {@code Executor.execute} (e.g., a {@code
+   * RejectedExecutionException} or an exception thrown by {@linkplain
+   * MoreExecutors#sameThreadExecutor inline execution}) will be caught and
+   * logged.
+   *
+   * <p>Note: For fast, lightweight listeners that would be safe to execute in
+   * any thread, consider {@link MoreExecutors#sameThreadExecutor}. For heavier
+   * listeners, {@code sameThreadExecutor()} carries some caveats: First, the
+   * thread that the listener runs in depends on whether the {@code Future} is
+   * done at the time it is added and on whether it is ever canclled. In
+   * particular, listeners may run in the thread that calls {@code addListener}
+   * or the thread that calls {@code cancel}. Second, listeners may run in an
+   * internal thread of the system responsible for the input {@code Future},
+   * such as an RPC network thread. Finally, during the execution of a {@code
+   * sameThreadExecutor()} listener, all other registered but unexecuted
+   * listeners are prevented from running, even if those listeners are to run
+   * in other executors.
+   *
+   * <p>This is the most general listener interface.
+   * For common operations performed using listeners,
+   * see {@link com.google.common.util.concurrent.Futures}
+   *
+   * @param listener the listener to run when the computation is complete
+   * @param executor the executor to run the listener in
+   * @throws NullPointerException if the executor or listener was null
+   * @throws RejectedExecutionException if we tried to execute the listener
+   *         immediately but the executor rejected it.
+   */
+  void addListener(Runnable listener, Executor executor);
+}
diff --git a/guava/src/com/google/common/util/concurrent/ListenableFutureTask.java b/guava/src/com/google/common/util/concurrent/ListenableFutureTask.java
new file mode 100644
index 0000000..474635c
--- /dev/null
+++ b/guava/src/com/google/common/util/concurrent/ListenableFutureTask.java
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2008 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import java.util.concurrent.Callable;
+import java.util.concurrent.Executor;
+import java.util.concurrent.FutureTask;
+
+import javax.annotation.Nullable;
+
+/**
+ * A {@link FutureTask} that also implements the {@link ListenableFuture}
+ * interface.  Unlike {@code FutureTask}, {@code ListenableFutureTask} does not
+ * provide an overrideable {@link FutureTask#done() done()} method.  For similar
+ * functionality, call {@link #addListener}.
+ *
+ * @author Sven Mawson
+ * @since 1.0
+ */
+public final class ListenableFutureTask<V> extends FutureTask<V>
+    implements ListenableFuture<V> {
+
+  // The execution list to hold our listeners.
+  private final ExecutionList executionList = new ExecutionList();
+
+  /**
+   * Creates a {@code ListenableFutureTask} that will upon running, execute the
+   * given {@code Callable}.
+   *
+   * @param callable the callable task
+   * @since 10.0
+   */
+  public static <V> ListenableFutureTask<V> create(Callable<V> callable) {
+    return new ListenableFutureTask<V>(callable);
+  }
+
+  /**
+   * Creates a {@code ListenableFutureTask} that will upon running, execute the
+   * given {@code Runnable}, and arrange that {@code get} will return the
+   * given result on successful completion.
+   *
+   * @param runnable the runnable task
+   * @param result the result to return on successful completion. If you don't
+   *     need a particular result, consider using constructions of the form:
+   *     {@code ListenableFuture<?> f = ListenableFutureTask.create(runnable,
+   *     null)}
+   * @since 10.0
+   */
+  public static <V> ListenableFutureTask<V> create(
+      Runnable runnable, @Nullable V result) {
+    return new ListenableFutureTask<V>(runnable, result);
+  }
+
+  private ListenableFutureTask(Callable<V> callable) {
+    super(callable);
+  }
+
+  private ListenableFutureTask(Runnable runnable, @Nullable V result) {
+    super(runnable, result);
+  }
+
+  @Override
+  public void addListener(Runnable listener, Executor exec) {
+    executionList.add(listener, exec);
+  }
+
+  /**
+   * Internal implementation detail used to invoke the listeners.
+   */
+  @Override
+  protected void done() {
+    executionList.execute();
+  }
+}
diff --git a/guava/src/com/google/common/util/concurrent/ListeningExecutorService.java b/guava/src/com/google/common/util/concurrent/ListeningExecutorService.java
new file mode 100644
index 0000000..9ea8e48
--- /dev/null
+++ b/guava/src/com/google/common/util/concurrent/ListeningExecutorService.java
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Future;
+import java.util.concurrent.RejectedExecutionException;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * An {@link ExecutorService} that returns {@link ListenableFuture} instances. To create an instance
+ * from an existing {@link ExecutorService}, call
+ * {@link MoreExecutors#listeningDecorator(ExecutorService)}.
+ *
+ * @author Chris Povirk
+ * @since 10.0
+ */
+public interface ListeningExecutorService extends ExecutorService {
+  /**
+   * @return a {@code ListenableFuture} representing pending completion of the task
+   * @throws RejectedExecutionException {@inheritDoc}
+   */
+  @Override
+  <T> ListenableFuture<T> submit(Callable<T> task);
+
+  /**
+   * @return a {@code ListenableFuture} representing pending completion of the task
+   * @throws RejectedExecutionException {@inheritDoc}
+   */
+  @Override
+  ListenableFuture<?> submit(Runnable task);
+
+  /**
+   * @return a {@code ListenableFuture} representing pending completion of the task
+   * @throws RejectedExecutionException {@inheritDoc}
+   */
+  @Override
+  <T> ListenableFuture<T> submit(Runnable task, T result);
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>All elements in the returned list must be {@link ListenableFuture} instances.
+   *
+   * @return A list of {@code ListenableFuture} instances representing the tasks, in the same
+   *         sequential order as produced by the iterator for the given task list, each of which has
+   *         completed.
+   * @throws RejectedExecutionException {@inheritDoc}
+   * @throws NullPointerException if any task is null
+   */
+  @Override
+  <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks)
+      throws InterruptedException;
+
+  /**
+   * {@inheritDoc}
+   *
+   * <p>All elements in the returned list must be {@link ListenableFuture} instances.
+   *
+   * @return a list of {@code ListenableFuture} instances representing the tasks, in the same
+   *         sequential order as produced by the iterator for the given task list. If the operation
+   *         did not time out, each task will have completed. If it did time out, some of these
+   *         tasks will not have completed.
+   * @throws RejectedExecutionException {@inheritDoc}
+   * @throws NullPointerException if any task is null
+   */
+  @Override
+  <T> List<Future<T>> invokeAll(
+      Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit)
+      throws InterruptedException;
+}
diff --git a/guava/src/com/google/common/util/concurrent/ListeningScheduledExecutorService.java b/guava/src/com/google/common/util/concurrent/ListeningScheduledExecutorService.java
new file mode 100644
index 0000000..42dcdd2
--- /dev/null
+++ b/guava/src/com/google/common/util/concurrent/ListeningScheduledExecutorService.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import com.google.common.annotations.Beta;
+
+import java.util.concurrent.ScheduledExecutorService;
+
+/**
+ * A {@link ScheduledExecutorService} that returns {@link ListenableFuture}
+ * instances from its {@code ExecutorService} methods.  Futures returned by the
+ * {@code schedule*} methods, by contrast, need not implement {@code
+ * ListenableFuture}.  (To create an instance from an existing {@link
+ * ScheduledExecutorService}, call {@link
+ * MoreExecutors#listeningDecorator(ScheduledExecutorService)}.
+ *
+ * <p>TODO(cpovirk): make at least the one-time schedule() methods return a
+ * ListenableFuture, too? But then we'll need ListenableScheduledFuture...
+ *
+ * @author Chris Povirk
+ * @since 10.0
+ */
+@Beta
+public interface ListeningScheduledExecutorService
+    extends ScheduledExecutorService, ListeningExecutorService {
+}
diff --git a/guava/src/com/google/common/util/concurrent/Monitor.java b/guava/src/com/google/common/util/concurrent/Monitor.java
new file mode 100644
index 0000000..d8c8693
--- /dev/null
+++ b/guava/src/com/google/common/util/concurrent/Monitor.java
@@ -0,0 +1,942 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.Beta;
+import com.google.common.base.Throwables;
+import com.google.common.collect.Lists;
+
+import java.util.ArrayList;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.locks.Condition;
+import java.util.concurrent.locks.ReentrantLock;
+
+import javax.annotation.Nullable;
+import javax.annotation.concurrent.GuardedBy;
+
+/**
+ * A synchronization abstraction supporting waiting on arbitrary boolean conditions.
+ *
+ * <p>This class is intended as a replacement for {@link ReentrantLock}. Code using {@code Monitor}
+ * is less error-prone and more readable than code using {@code ReentrantLock}, without significant
+ * performance loss. {@code Monitor} even has the potential for performance gain by optimizing the
+ * evaluation and signaling of conditions.  Signaling is entirely
+ * <a href="http://en.wikipedia.org/wiki/Monitor_(synchronization)#Implicit_signaling">
+ * implicit</a>.
+ * By eliminating explicit signaling, this class can guarantee that only one thread is awakened
+ * when a condition becomes true (no "signaling storms" due to use of {@link
+ * java.util.concurrent.locks.Condition#signalAll Condition.signalAll}) and that no signals are lost
+ * (no "hangs" due to incorrect use of {@link java.util.concurrent.locks.Condition#signal
+ * Condition.signal}).
+ *
+ * <p>A thread is said to <i>occupy</i> a monitor if it has <i>entered</i> the monitor but not yet
+ * <i>left</i>. Only one thread may occupy a given monitor at any moment. A monitor is also
+ * reentrant, so a thread may enter a monitor any number of times, and then must leave the same
+ * number of times. The <i>enter</i> and <i>leave</i> operations have the same synchronization
+ * semantics as the built-in Java language synchronization primitives.
+ *
+ * <p>A call to any of the <i>enter</i> methods with <b>void</b> return type should always be
+ * followed immediately by a <i>try/finally</i> block to ensure that the current thread leaves the
+ * monitor cleanly: <pre>   {@code
+ *
+ *   monitor.enter();
+ *   try {
+ *     // do things while occupying the monitor
+ *   } finally {
+ *     monitor.leave();
+ *   }}</pre>
+ *
+ * A call to any of the <i>enter</i> methods with <b>boolean</b> return type should always appear as
+ * the condition of an <i>if</i> statement containing a <i>try/finally</i> block to ensure that the
+ * current thread leaves the monitor cleanly: <pre>   {@code
+ *
+ *   if (monitor.tryEnter()) {
+ *     try {
+ *       // do things while occupying the monitor
+ *     } finally {
+ *       monitor.leave();
+ *     }
+ *   } else {
+ *     // do other things since the monitor was not available
+ *   }}</pre>
+ *
+ * <h2>Comparison with {@code synchronized} and {@code ReentrantLock}</h2>
+ * 
+ * <p>The following examples show a simple threadsafe holder expressed using {@code synchronized},
+ * {@link ReentrantLock}, and {@code Monitor}.
+ * 
+ * <h3>{@code synchronized}</h3>
+ * 
+ * <p>This version is the fewest lines of code, largely because the synchronization mechanism used
+ * is built into the language and runtime. But the programmer has to remember to avoid a couple of
+ * common bugs: The {@code wait()} must be inside a {@code while} instead of an {@code if}, and
+ * {@code notifyAll()} must be used instead of {@code notify()} because there are two different
+ * logical conditions being awaited. <pre>   {@code
+ *
+ *   public class SafeBox<V> {
+ *     private V value;
+ *
+ *     public synchronized V get() throws InterruptedException {
+ *       while (value == null) {
+ *         wait();
+ *       }
+ *       V result = value;
+ *       value = null;
+ *       notifyAll();
+ *       return result;
+ *     }
+ *
+ *     public synchronized void set(V newValue) throws InterruptedException {
+ *       while (value != null) {
+ *         wait();
+ *       }
+ *       value = newValue;
+ *       notifyAll();
+ *     }
+ *   }}</pre>
+ * 
+ * <h3>{@code ReentrantLock}</h3>
+ * 
+ * <p>This version is much more verbose than the {@code synchronized} version, and still suffers
+ * from the need for the programmer to remember to use {@code while} instead of {@code if}.
+ * However, one advantage is that we can introduce two separate {@code Condition} objects, which
+ * allows us to use {@code signal()} instead of {@code signalAll()}, which may be a performance
+ * benefit. <pre>   {@code
+ *
+ *   public class SafeBox<V> {
+ *     private final ReentrantLock lock = new ReentrantLock();
+ *     private final Condition valuePresent = lock.newCondition();
+ *     private final Condition valueAbsent = lock.newCondition();
+ *     private V value;
+ *
+ *     public V get() throws InterruptedException {
+ *       lock.lock();
+ *       try {
+ *         while (value == null) {
+ *           valuePresent.await();
+ *         }
+ *         V result = value;
+ *         value = null;
+ *         valueAbsent.signal();
+ *         return result;
+ *       } finally {
+ *         lock.unlock();
+ *       }
+ *     }
+ *
+ *     public void set(V newValue) throws InterruptedException {
+ *       lock.lock();
+ *       try {
+ *         while (value != null) {
+ *           valueAbsent.await();
+ *         }
+ *         value = newValue;
+ *         valuePresent.signal();
+ *       } finally {
+ *         lock.unlock();
+ *       }
+ *     }
+ *   }}</pre>
+ * 
+ * <h3>{@code Monitor}</h3>
+ * 
+ * <p>This version adds some verbosity around the {@code Guard} objects, but removes that same
+ * verbosity, and more, from the {@code get} and {@code set} methods. {@code Monitor} implements the
+ * same efficient signaling as we had to hand-code in the {@code ReentrantLock} version above.
+ * Finally, the programmer no longer has to hand-code the wait loop, and therefore doesn't have to
+ * remember to use {@code while} instead of {@code if}. <pre>   {@code
+ *
+ *   public class SafeBox<V> {
+ *     private final Monitor monitor = new Monitor();
+ *     private final Monitor.Guard valuePresent = new Monitor.Guard(monitor) {
+ *       public boolean isSatisfied() {
+ *         return value != null;
+ *       }
+ *     };
+ *     private final Monitor.Guard valueAbsent = new Monitor.Guard(monitor) {
+ *       public boolean isSatisfied() {
+ *         return value == null;
+ *       }
+ *     };
+ *     private V value;
+ *
+ *     public V get() throws InterruptedException {
+ *       monitor.enterWhen(valuePresent);
+ *       try {
+ *         V result = value;
+ *         value = null;
+ *         return result;
+ *       } finally {
+ *         monitor.leave();
+ *       }
+ *     }
+ *
+ *     public void set(V newValue) throws InterruptedException {
+ *       monitor.enterWhen(valueAbsent);
+ *       try {
+ *         value = newValue;
+ *       } finally {
+ *         monitor.leave();
+ *       }
+ *     }
+ *   }}</pre>
+ * 
+ * @author Justin T. Sampson
+ * @since 10.0
+ */
+@Beta
+public final class Monitor {
+  // TODO: Use raw LockSupport or AbstractQueuedSynchronizer instead of ReentrantLock.
+
+  /**
+   * A boolean condition for which a thread may wait. A {@code Guard} is associated with a single
+   * {@code Monitor}. The monitor may check the guard at arbitrary times from any thread occupying
+   * the monitor, so code should not be written to rely on how often a guard might or might not be
+   * checked.
+   * 
+   * <p>If a {@code Guard} is passed into any method of a {@code Monitor} other than the one it is
+   * associated with, an {@link IllegalMonitorStateException} is thrown.
+   *
+   * @since 10.0
+   */
+  @Beta
+  public abstract static class Guard {
+    
+    final Monitor monitor;
+    final Condition condition;
+
+    @GuardedBy("monitor.lock")
+    int waiterCount = 0;
+
+    protected Guard(Monitor monitor) {
+      this.monitor = checkNotNull(monitor, "monitor");
+      this.condition = monitor.lock.newCondition();
+    }
+
+    /**
+     * Evaluates this guard's boolean condition. This method is always called with the associated
+     * monitor already occupied. Implementations of this method must depend only on state protected
+     * by the associated monitor, and must not modify that state.
+     */
+    public abstract boolean isSatisfied();
+
+    @Override
+    public final boolean equals(Object other) {
+      // Overridden as final to ensure identity semantics in Monitor.activeGuards.
+      return this == other;
+    }
+    
+    @Override
+    public final int hashCode() {
+      // Overridden as final to ensure identity semantics in Monitor.activeGuards.
+      return super.hashCode();
+    }
+
+  }
+
+  /**
+   * Whether this monitor is fair.
+   */
+  private final boolean fair;
+  
+  /**
+   * The lock underlying this monitor.
+   */
+  private final ReentrantLock lock;
+
+  /**
+   * The guards associated with this monitor that currently have waiters ({@code waiterCount > 0}).
+   * This is an ArrayList rather than, say, a HashSet so that iteration and almost all adds don't
+   * incur any object allocation overhead.
+   */
+  @GuardedBy("lock")
+  private final ArrayList<Guard> activeGuards = Lists.newArrayListWithCapacity(1);
+
+  /**
+   * Creates a monitor with a non-fair (but fast) ordering policy. Equivalent to {@code
+   * Monitor(false)}.
+   */
+  public Monitor() {
+    this(false);
+  }
+
+  /**
+   * Creates a monitor with the given ordering policy.
+   *
+   * @param fair whether this monitor should use a fair ordering policy rather than a non-fair (but
+   *        fast) one
+   */
+  public Monitor(boolean fair) {
+    this.fair = fair;
+    this.lock = new ReentrantLock(fair);
+  }
+
+  /**
+   * Enters this monitor. Blocks indefinitely.
+   */
+  public void enter() {
+    lock.lock();
+  }
+
+  /**
+   * Enters this monitor. Blocks indefinitely, but may be interrupted.
+   */
+  public void enterInterruptibly() throws InterruptedException {
+    lock.lockInterruptibly();
+  }
+
+  /**
+   * Enters this monitor. Blocks at most the given time.
+   *
+   * @return whether the monitor was entered
+   */
+  public boolean enter(long time, TimeUnit unit) {
+    final ReentrantLock lock = this.lock;
+    if (!fair && lock.tryLock()) {
+      return true;
+    }
+    long startNanos = System.nanoTime();
+    long timeoutNanos = unit.toNanos(time);
+    long remainingNanos = timeoutNanos;
+    boolean interruptIgnored = false;
+    try {
+      while (true) {
+        try {
+          return lock.tryLock(remainingNanos, TimeUnit.NANOSECONDS);
+        } catch (InterruptedException ignored) {
+          interruptIgnored = true;
+          remainingNanos = (timeoutNanos - (System.nanoTime() - startNanos));
+        }
+      }
+    } finally {
+      if (interruptIgnored) {
+        Thread.currentThread().interrupt();
+      }
+    }
+  }
+
+  /**
+   * Enters this monitor. Blocks at most the given time, and may be interrupted.
+   *
+   * @return whether the monitor was entered
+   */
+  public boolean enterInterruptibly(long time, TimeUnit unit) throws InterruptedException {
+    return lock.tryLock(time, unit);
+  }
+
+  /**
+   * Enters this monitor if it is possible to do so immediately. Does not block.
+   *
+   * <p><b>Note:</b> This method disregards the fairness setting of this monitor.
+   *
+   * @return whether the monitor was entered
+   */
+  public boolean tryEnter() {
+    return lock.tryLock();
+  }
+
+  /**
+   * Enters this monitor when the guard is satisfied. Blocks indefinitely, but may be interrupted.
+   */
+  public void enterWhen(Guard guard) throws InterruptedException {
+    if (guard.monitor != this) {
+      throw new IllegalMonitorStateException();
+    }
+    final ReentrantLock lock = this.lock;
+    boolean reentrant = lock.isHeldByCurrentThread();
+    boolean success = false;
+    lock.lockInterruptibly();
+    try {
+      waitInterruptibly(guard, reentrant);
+      success = true;
+    } finally {
+      if (!success) {
+        lock.unlock();
+      }
+    }
+  }
+
+  /**
+   * Enters this monitor when the guard is satisfied. Blocks indefinitely.
+   */
+  public void enterWhenUninterruptibly(Guard guard) {
+    if (guard.monitor != this) {
+      throw new IllegalMonitorStateException();
+    }
+    final ReentrantLock lock = this.lock;
+    boolean reentrant = lock.isHeldByCurrentThread();
+    boolean success = false;
+    lock.lock();
+    try {
+      waitUninterruptibly(guard, reentrant);
+      success = true;
+    } finally {
+      if (!success) {
+        lock.unlock();
+      }
+    }
+  }
+
+  /**
+   * Enters this monitor when the guard is satisfied. Blocks at most the given time, including both
+   * the time to acquire the lock and the time to wait for the guard to be satisfied, and may be
+   * interrupted.
+   *
+   * @return whether the monitor was entered
+   */
+  public boolean enterWhen(Guard guard, long time, TimeUnit unit) throws InterruptedException {
+    if (guard.monitor != this) {
+      throw new IllegalMonitorStateException();
+    }
+    final ReentrantLock lock = this.lock;
+    boolean reentrant = lock.isHeldByCurrentThread();
+    long remainingNanos;
+    if (!fair && lock.tryLock()) {
+      remainingNanos = unit.toNanos(time);
+    } else {
+      long startNanos = System.nanoTime();
+      if (!lock.tryLock(time, unit)) {
+        return false;
+      }
+      remainingNanos = unit.toNanos(time) - (System.nanoTime() - startNanos);
+    }
+    boolean satisfied = false;
+    try {
+      satisfied = waitInterruptibly(guard, remainingNanos, reentrant);
+    } finally {
+      if (!satisfied) {
+        lock.unlock();
+      }
+    }
+    return satisfied;
+  }
+
+  /**
+   * Enters this monitor when the guard is satisfied. Blocks at most the given time, including
+   * both the time to acquire the lock and the time to wait for the guard to be satisfied.
+   *
+   * @return whether the monitor was entered
+   */
+  public boolean enterWhenUninterruptibly(Guard guard, long time, TimeUnit unit) {
+    if (guard.monitor != this) {
+      throw new IllegalMonitorStateException();
+    }
+    final ReentrantLock lock = this.lock;
+    boolean reentrant = lock.isHeldByCurrentThread();
+    boolean interruptIgnored = false;
+    try {
+      long remainingNanos;
+      if (!fair && lock.tryLock()) {
+        remainingNanos = unit.toNanos(time);
+      } else {
+        long startNanos = System.nanoTime();
+        long timeoutNanos = unit.toNanos(time);
+        remainingNanos = timeoutNanos;
+        while (true) {
+          try {
+            if (lock.tryLock(remainingNanos, TimeUnit.NANOSECONDS)) {
+              break;
+            } else {
+              return false;
+            }
+          } catch (InterruptedException ignored) {
+            interruptIgnored = true;
+          } finally {
+            remainingNanos = (timeoutNanos - (System.nanoTime() - startNanos));
+          }
+        }
+      }
+      boolean satisfied = false;
+      try {
+        satisfied = waitUninterruptibly(guard, remainingNanos, reentrant);
+      } finally {
+        if (!satisfied) {
+          lock.unlock();
+        }
+      }
+      return satisfied;
+    } finally {
+      if (interruptIgnored) {
+        Thread.currentThread().interrupt();
+      }
+    }
+  }
+
+  /**
+   * Enters this monitor if the guard is satisfied. Blocks indefinitely acquiring the lock, but
+   * does not wait for the guard to be satisfied.
+   *
+   * @return whether the monitor was entered
+   */
+  public boolean enterIf(Guard guard) {
+    if (guard.monitor != this) {
+      throw new IllegalMonitorStateException();
+    }
+    final ReentrantLock lock = this.lock;
+    lock.lock();
+    boolean satisfied = false;
+    try {
+      satisfied = guard.isSatisfied();
+    } finally {
+      if (!satisfied) {
+        lock.unlock();
+      }
+    }
+    return satisfied;
+  }
+
+  /**
+   * Enters this monitor if the guard is satisfied. Blocks indefinitely acquiring the lock, but does
+   * not wait for the guard to be satisfied, and may be interrupted.
+   *
+   * @return whether the monitor was entered
+   */
+  public boolean enterIfInterruptibly(Guard guard) throws InterruptedException {
+    if (guard.monitor != this) {
+      throw new IllegalMonitorStateException();
+    }
+    final ReentrantLock lock = this.lock;
+    lock.lockInterruptibly();
+    boolean satisfied = false;
+    try {
+      satisfied = guard.isSatisfied();
+    } finally {
+      if (!satisfied) {
+        lock.unlock();
+      }
+    }
+    return satisfied;
+  }
+
+  /**
+   * Enters this monitor if the guard is satisfied. Blocks at most the given time acquiring the
+   * lock, but does not wait for the guard to be satisfied.
+   *
+   * @return whether the monitor was entered
+   */
+  public boolean enterIf(Guard guard, long time, TimeUnit unit) {
+    if (guard.monitor != this) {
+      throw new IllegalMonitorStateException();
+    }
+    final ReentrantLock lock = this.lock;
+    if (!enter(time, unit)) {
+      return false;
+    }
+    boolean satisfied = false;
+    try {
+      satisfied = guard.isSatisfied();
+    } finally {
+      if (!satisfied) {
+        lock.unlock();
+      }
+    }
+    return satisfied;
+  }
+
+  /**
+   * Enters this monitor if the guard is satisfied. Blocks at most the given time acquiring the
+   * lock, but does not wait for the guard to be satisfied, and may be interrupted.
+   *
+   * @return whether the monitor was entered
+   */
+  public boolean enterIfInterruptibly(Guard guard, long time, TimeUnit unit)
+      throws InterruptedException {
+    if (guard.monitor != this) {
+      throw new IllegalMonitorStateException();
+    }
+    final ReentrantLock lock = this.lock;
+    if (!lock.tryLock(time, unit)) {
+      return false;
+    }
+    boolean satisfied = false;
+    try {
+      satisfied = guard.isSatisfied();
+    } finally {
+      if (!satisfied) {
+        lock.unlock();
+      }
+    }
+    return satisfied;
+  }
+
+  /**
+   * Enters this monitor if it is possible to do so immediately and the guard is satisfied. Does not
+   * block acquiring the lock and does not wait for the guard to be satisfied.
+   *
+   * <p><b>Note:</b> This method disregards the fairness setting of this monitor.
+   *
+   * @return whether the monitor was entered
+   */
+  public boolean tryEnterIf(Guard guard) {
+    if (guard.monitor != this) {
+      throw new IllegalMonitorStateException();
+    }
+    final ReentrantLock lock = this.lock;
+    if (!lock.tryLock()) {
+      return false;
+    }
+    boolean satisfied = false;
+    try {
+      satisfied = guard.isSatisfied();
+    } finally {
+      if (!satisfied) {
+        lock.unlock();
+      }
+    }
+    return satisfied;
+  }
+
+  /**
+   * Waits for the guard to be satisfied. Waits indefinitely, but may be interrupted. May be
+   * called only by a thread currently occupying this monitor.
+   */
+  public void waitFor(Guard guard) throws InterruptedException {
+    if (guard.monitor != this) {
+      throw new IllegalMonitorStateException();
+    }
+    if (!lock.isHeldByCurrentThread()) {
+      throw new IllegalMonitorStateException();
+    }
+    waitInterruptibly(guard, true);
+  }
+
+  /**
+   * Waits for the guard to be satisfied. Waits indefinitely. May be called only by a thread
+   * currently occupying this monitor.
+   */
+  public void waitForUninterruptibly(Guard guard) {
+    if (guard.monitor != this) {
+      throw new IllegalMonitorStateException();
+    }
+    if (!lock.isHeldByCurrentThread()) {
+      throw new IllegalMonitorStateException();
+    }
+    waitUninterruptibly(guard, true);
+  }
+
+  /**
+   * Waits for the guard to be satisfied. Waits at most the given time, and may be interrupted.
+   * May be called only by a thread currently occupying this monitor.
+   *
+   * @return whether the guard is now satisfied
+   */
+  public boolean waitFor(Guard guard, long time, TimeUnit unit) throws InterruptedException {
+    if (guard.monitor != this) {
+      throw new IllegalMonitorStateException();
+    }
+    if (!lock.isHeldByCurrentThread()) {
+      throw new IllegalMonitorStateException();
+    }
+    return waitInterruptibly(guard, unit.toNanos(time), true);
+  }
+
+  /**
+   * Waits for the guard to be satisfied. Waits at most the given time. May be called only by a
+   * thread currently occupying this monitor.
+   *
+   * @return whether the guard is now satisfied
+   */
+  public boolean waitForUninterruptibly(Guard guard, long time, TimeUnit unit) {
+    if (guard.monitor != this) {
+      throw new IllegalMonitorStateException();
+    }
+    if (!lock.isHeldByCurrentThread()) {
+      throw new IllegalMonitorStateException();
+    }
+    return waitUninterruptibly(guard, unit.toNanos(time), true);
+  }
+
+  /**
+   * Leaves this monitor. May be called only by a thread currently occupying this monitor.
+   */
+  public void leave() {
+    final ReentrantLock lock = this.lock;
+    if (!lock.isHeldByCurrentThread()) {
+      throw new IllegalMonitorStateException();
+    }
+    try {
+      signalConditionsOfSatisfiedGuards(null);
+    } finally {
+      lock.unlock();
+    }
+  }
+
+  /**
+   * Returns whether this monitor is using a fair ordering policy.
+   */
+  public boolean isFair() {
+    return lock.isFair();
+  }
+
+  /**
+   * Returns whether this monitor is occupied by any thread. This method is designed for use in
+   * monitoring of the system state, not for synchronization control.
+   */
+  public boolean isOccupied() {
+    return lock.isLocked();
+  }
+
+  /**
+   * Returns whether the current thread is occupying this monitor (has entered more times than it
+   * has left).
+   */
+  public boolean isOccupiedByCurrentThread() {
+    return lock.isHeldByCurrentThread();
+  }
+
+  /**
+   * Returns the number of times the current thread has entered this monitor in excess of the number
+   * of times it has left. Returns 0 if the current thread is not occupying this monitor.
+   */
+  public int getOccupiedDepth() {
+    return lock.getHoldCount();
+  }
+
+  /**
+   * Returns an estimate of the number of threads waiting to enter this monitor. The value is only
+   * an estimate because the number of threads may change dynamically while this method traverses
+   * internal data structures. This method is designed for use in monitoring of the system state,
+   * not for synchronization control.
+   */
+  public int getQueueLength() {
+    return lock.getQueueLength();
+  }
+
+  /**
+   * Returns whether any threads are waiting to enter this monitor. Note that because cancellations
+   * may occur at any time, a {@code true} return does not guarantee that any other thread will ever
+   * enter this monitor. This method is designed primarily for use in monitoring of the system
+   * state.
+   */
+  public boolean hasQueuedThreads() {
+    return lock.hasQueuedThreads();
+  }
+
+  /**
+   * Queries whether the given thread is waiting to enter this monitor. Note that because
+   * cancellations may occur at any time, a {@code true} return does not guarantee that this thread
+   * will ever enter this monitor. This method is designed primarily for use in monitoring of the
+   * system state.
+   */
+  public boolean hasQueuedThread(Thread thread) {
+    return lock.hasQueuedThread(thread);
+  }
+
+  /**
+   * Queries whether any threads are waiting for the given guard to become satisfied. Note that
+   * because timeouts and interrupts may occur at any time, a {@code true} return does not guarantee
+   * that the guard becoming satisfied in the future will awaken any threads. This method is
+   * designed primarily for use in monitoring of the system state.
+   */
+  public boolean hasWaiters(Guard guard) {
+    if (guard.monitor != this) {
+      throw new IllegalMonitorStateException();
+    }
+    lock.lock();
+    try {
+      return guard.waiterCount > 0;
+    } finally {
+      lock.unlock();
+    }
+  }
+
+  /**
+   * Returns an estimate of the number of threads waiting for the given guard to become satisfied.
+   * Note that because timeouts and interrupts may occur at any time, the estimate serves only as an
+   * upper bound on the actual number of waiters. This method is designed for use in monitoring of
+   * the system state, not for synchronization control.
+   */
+  public int getWaitQueueLength(Guard guard) {
+    if (guard.monitor != this) {
+      throw new IllegalMonitorStateException();
+    }
+    lock.lock();
+    try {
+      return guard.waiterCount;
+    } finally {
+      lock.unlock();
+    }
+  }
+
+  @GuardedBy("lock")
+  private void signalConditionsOfSatisfiedGuards(@Nullable Guard interruptedGuard) {
+    final ArrayList<Guard> guards = this.activeGuards;
+    final int guardCount = guards.size();
+    try {
+      for (int i = 0; i < guardCount; i++) {
+        Guard guard = guards.get(i);
+        if ((guard == interruptedGuard) && (guard.waiterCount == 1)) {
+          // That one waiter was just interrupted and is throwing InterruptedException rather than
+          // paying attention to the guard being satisfied, so find another waiter on another guard.
+          continue;
+        }
+        if (guard.isSatisfied()) {
+          guard.condition.signal();
+          return;
+        }
+      }
+    } catch (Throwable throwable) {
+      for (int i = 0; i < guardCount; i++) {
+        Guard guard = guards.get(i);
+        guard.condition.signalAll();
+      }
+      throw Throwables.propagate(throwable);
+    }
+  }
+  
+  @GuardedBy("lock")
+  private void incrementWaiters(Guard guard) {
+    int waiters = guard.waiterCount++;
+    if (waiters == 0) {
+      activeGuards.add(guard);
+    }
+  }
+
+  @GuardedBy("lock")
+  private void decrementWaiters(Guard guard) {
+    int waiters = --guard.waiterCount;
+    if (waiters == 0) {
+      activeGuards.remove(guard);
+    }
+  }
+
+  @GuardedBy("lock")
+  private void waitInterruptibly(Guard guard, boolean signalBeforeWaiting)
+      throws InterruptedException {
+    if (!guard.isSatisfied()) {
+      if (signalBeforeWaiting) {
+        signalConditionsOfSatisfiedGuards(null);
+      }
+      incrementWaiters(guard);
+      try {
+        final Condition condition = guard.condition;
+        do {
+          try {
+            condition.await();
+          } catch (InterruptedException interrupt) {
+            try {
+              signalConditionsOfSatisfiedGuards(guard);
+            } catch (Throwable throwable) {
+              Thread.currentThread().interrupt();
+              throw Throwables.propagate(throwable);
+            }
+            throw interrupt;
+          }
+        } while (!guard.isSatisfied());
+      } finally {
+        decrementWaiters(guard);
+      }
+    }
+  }
+
+  @GuardedBy("lock")
+  private void waitUninterruptibly(Guard guard, boolean signalBeforeWaiting) {
+    if (!guard.isSatisfied()) {
+      if (signalBeforeWaiting) {
+        signalConditionsOfSatisfiedGuards(null);
+      }
+      incrementWaiters(guard);
+      try {
+        final Condition condition = guard.condition;
+        do {
+          condition.awaitUninterruptibly();
+        } while (!guard.isSatisfied());
+      } finally {
+        decrementWaiters(guard);
+      }
+    }
+  }
+
+  @GuardedBy("lock")
+  private boolean waitInterruptibly(Guard guard, long remainingNanos, boolean signalBeforeWaiting)
+      throws InterruptedException {
+    if (!guard.isSatisfied()) {
+      if (signalBeforeWaiting) {
+        signalConditionsOfSatisfiedGuards(null);
+      }
+      incrementWaiters(guard);
+      try {
+        final Condition condition = guard.condition;
+        do {
+          if (remainingNanos <= 0) {
+            return false;
+          }
+          try {
+            remainingNanos = condition.awaitNanos(remainingNanos);
+          } catch (InterruptedException interrupt) {
+            try {
+              signalConditionsOfSatisfiedGuards(guard);
+            } catch (Throwable throwable) {
+              Thread.currentThread().interrupt();
+              throw Throwables.propagate(throwable);
+            }
+            throw interrupt;
+          }
+        } while (!guard.isSatisfied());
+      } finally {
+        decrementWaiters(guard);
+      }
+    }
+    return true;
+  }
+
+  @GuardedBy("lock")
+  private boolean waitUninterruptibly(Guard guard, long timeoutNanos,
+      boolean signalBeforeWaiting) {
+    if (!guard.isSatisfied()) {
+      long startNanos = System.nanoTime();
+      if (signalBeforeWaiting) {
+        signalConditionsOfSatisfiedGuards(null);
+      }
+      boolean interruptIgnored = false;
+      try {
+        incrementWaiters(guard);
+        try {
+          final Condition condition = guard.condition;
+          long remainingNanos = timeoutNanos;
+          do {
+            if (remainingNanos <= 0) {
+              return false;
+            }
+            try {
+              remainingNanos = condition.awaitNanos(remainingNanos);
+            } catch (InterruptedException ignored) {
+              try {
+                signalConditionsOfSatisfiedGuards(guard);
+              } catch (Throwable throwable) {
+                Thread.currentThread().interrupt();
+                throw Throwables.propagate(throwable);
+              }
+              interruptIgnored = true;
+              remainingNanos = (timeoutNanos - (System.nanoTime() - startNanos));
+            }
+          } while (!guard.isSatisfied());
+        } finally {
+          decrementWaiters(guard);
+        }
+      } finally {
+        if (interruptIgnored) {
+          Thread.currentThread().interrupt();
+        }
+      }
+    }
+    return true;
+  }
+
+}
diff --git a/guava/src/com/google/common/util/concurrent/MoreExecutors.java b/guava/src/com/google/common/util/concurrent/MoreExecutors.java
new file mode 100644
index 0000000..915b96d
--- /dev/null
+++ b/guava/src/com/google/common/util/concurrent/MoreExecutors.java
@@ -0,0 +1,478 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.Beta;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.RejectedExecutionException;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledFuture;
+import java.util.concurrent.ScheduledThreadPoolExecutor;
+import java.util.concurrent.ThreadFactory;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.ThreadPoolExecutor.CallerRunsPolicy;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.locks.Condition;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
+
+/**
+ * Factory and utility methods for {@link java.util.concurrent.Executor}, {@link
+ * ExecutorService}, and {@link ThreadFactory}.
+ *
+ * @author Eric Fellheimer
+ * @author Kyle Littlefield
+ * @author Justin Mahoney
+ * @since 3.0
+ */
+public final class MoreExecutors {
+  private MoreExecutors() {}
+
+  /**
+   * Converts the given ThreadPoolExecutor into an ExecutorService that exits
+   * when the application is complete.  It does so by using daemon threads and
+   * adding a shutdown hook to wait for their completion.
+   *
+   * <p>This is mainly for fixed thread pools.
+   * See {@link Executors#newFixedThreadPool(int)}.
+   *
+   * @param executor the executor to modify to make sure it exits when the
+   *        application is finished
+   * @param terminationTimeout how long to wait for the executor to
+   *        finish before terminating the JVM
+   * @param timeUnit unit of time for the time parameter
+   * @return an unmodifiable version of the input which will not hang the JVM
+   */
+  @Beta
+  public static ExecutorService getExitingExecutorService(
+      ThreadPoolExecutor executor, long terminationTimeout, TimeUnit timeUnit) {
+    executor.setThreadFactory(new ThreadFactoryBuilder()
+        .setDaemon(true)
+        .setThreadFactory(executor.getThreadFactory())
+        .build());
+
+    ExecutorService service = Executors.unconfigurableExecutorService(executor);
+
+    addDelayedShutdownHook(service, terminationTimeout, timeUnit);
+
+    return service;
+  }
+
+  /**
+   * Converts the given ScheduledThreadPoolExecutor into a
+   * ScheduledExecutorService that exits when the application is complete.  It
+   * does so by using daemon threads and adding a shutdown hook to wait for
+   * their completion.
+   *
+   * <p>This is mainly for fixed thread pools.
+   * See {@link Executors#newScheduledThreadPool(int)}.
+   *
+   * @param executor the executor to modify to make sure it exits when the
+   *        application is finished
+   * @param terminationTimeout how long to wait for the executor to
+   *        finish before terminating the JVM
+   * @param timeUnit unit of time for the time parameter
+   * @return an unmodifiable version of the input which will not hang the JVM
+   */
+  @Beta
+  public static ScheduledExecutorService getExitingScheduledExecutorService(
+      ScheduledThreadPoolExecutor executor, long terminationTimeout,
+      TimeUnit timeUnit) {
+    executor.setThreadFactory(new ThreadFactoryBuilder()
+        .setDaemon(true)
+        .setThreadFactory(executor.getThreadFactory())
+        .build());
+
+    ScheduledExecutorService service =
+        Executors.unconfigurableScheduledExecutorService(executor);
+
+    addDelayedShutdownHook(service, terminationTimeout, timeUnit);
+
+    return service;
+  }
+
+  /**
+   * Add a shutdown hook to wait for thread completion in the given
+   * {@link ExecutorService service}.  This is useful if the given service uses
+   * daemon threads, and we want to keep the JVM from exiting immediately on
+   * shutdown, instead giving these daemon threads a chance to terminate
+   * normally.
+   * @param service ExecutorService which uses daemon threads
+   * @param terminationTimeout how long to wait for the executor to finish
+   *        before terminating the JVM
+   * @param timeUnit unit of time for the time parameter
+   */
+  @Beta
+  public static void addDelayedShutdownHook(
+      final ExecutorService service, final long terminationTimeout,
+      final TimeUnit timeUnit) {
+    Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
+      @Override
+      public void run() {
+        try {
+          // We'd like to log progress and failures that may arise in the
+          // following code, but unfortunately the behavior of logging
+          // is undefined in shutdown hooks.
+          // This is because the logging code installs a shutdown hook of its
+          // own. See Cleaner class inside {@link LogManager}.
+          service.shutdown();
+          service.awaitTermination(terminationTimeout, timeUnit);
+        } catch (InterruptedException ignored) {
+          // We're shutting down anyway, so just ignore.
+        }
+      }
+    }));
+  }
+
+  /**
+   * Converts the given ThreadPoolExecutor into an ExecutorService that exits
+   * when the application is complete.  It does so by using daemon threads and
+   * adding a shutdown hook to wait for their completion.
+   *
+   * <p>This method waits 120 seconds before continuing with JVM termination,
+   * even if the executor has not finished its work.
+   *
+   * <p>This is mainly for fixed thread pools.
+   * See {@link Executors#newFixedThreadPool(int)}.
+   *
+   * @param executor the executor to modify to make sure it exits when the
+   *        application is finished
+   * @return an unmodifiable version of the input which will not hang the JVM
+   */
+  @Beta
+  public static ExecutorService getExitingExecutorService(
+      ThreadPoolExecutor executor) {
+    return getExitingExecutorService(executor, 120, TimeUnit.SECONDS);
+  }
+
+  /**
+   * Converts the given ThreadPoolExecutor into a ScheduledExecutorService that
+   * exits when the application is complete.  It does so by using daemon threads
+   * and adding a shutdown hook to wait for their completion.
+   *
+   * <p>This method waits 120 seconds before continuing with JVM termination,
+   * even if the executor has not finished its work.
+   *
+   * <p>This is mainly for fixed thread pools.
+   * See {@link Executors#newScheduledThreadPool(int)}.
+   *
+   * @param executor the executor to modify to make sure it exits when the
+   *        application is finished
+   * @return an unmodifiable version of the input which will not hang the JVM
+   */
+  @Beta
+  public static ScheduledExecutorService getExitingScheduledExecutorService(
+      ScheduledThreadPoolExecutor executor) {
+    return getExitingScheduledExecutorService(executor, 120, TimeUnit.SECONDS);
+  }
+
+  /**
+   * Creates an executor service that runs each task in the thread
+   * that invokes {@code execute/submit}, as in {@link CallerRunsPolicy}  This
+   * applies both to individually submitted tasks and to collections of tasks
+   * submitted via {@code invokeAll} or {@code invokeAny}.  In the latter case,
+   * tasks will run serially on the calling thread.  Tasks are run to
+   * completion before a {@code Future} is returned to the caller (unless the
+   * executor has been shutdown).
+   *
+   * <p>Although all tasks are immediately executed in the thread that
+   * submitted the task, this {@code ExecutorService} imposes a small
+   * locking overhead on each task submission in order to implement shutdown
+   * and termination behavior.
+   *
+   * <p>The implementation deviates from the {@code ExecutorService}
+   * specification with regards to the {@code shutdownNow} method.  First,
+   * "best-effort" with regards to canceling running tasks is implemented
+   * as "no-effort".  No interrupts or other attempts are made to stop
+   * threads executing tasks.  Second, the returned list will always be empty,
+   * as any submitted task is considered to have started execution.
+   * This applies also to tasks given to {@code invokeAll} or {@code invokeAny}
+   * which are pending serial execution, even the subset of the tasks that
+   * have not yet started execution.  It is unclear from the
+   * {@code ExecutorService} specification if these should be included, and
+   * it's much easier to implement the interpretation that they not be.
+   * Finally, a call to {@code shutdown} or {@code shutdownNow} may result
+   * in concurrent calls to {@code invokeAll/invokeAny} throwing
+   * RejectedExecutionException, although a subset of the tasks may already
+   * have been executed.
+   *
+   * @since 10.0 (<a href="http://code.google.com/p/guava-libraries/wiki/Compatibility"
+   *        >mostly source-compatible</a> since 3.0)
+   */
+  public static ListeningExecutorService sameThreadExecutor() {
+    return new SameThreadExecutorService();
+  }
+
+  // See sameThreadExecutor javadoc for behavioral notes.
+  private static class SameThreadExecutorService
+      extends AbstractListeningExecutorService {
+    /**
+     * Lock used whenever accessing the state variables
+     * (runningTasks, shutdown, terminationCondition) of the executor
+     */
+    private final Lock lock = new ReentrantLock();
+
+    /** Signaled after the executor is shutdown and running tasks are done */
+    private final Condition termination = lock.newCondition();
+
+    /*
+     * Conceptually, these two variables describe the executor being in
+     * one of three states:
+     *   - Active: shutdown == false
+     *   - Shutdown: runningTasks > 0 and shutdown == true
+     *   - Terminated: runningTasks == 0 and shutdown == true
+     */
+    private int runningTasks = 0;
+    private boolean shutdown = false;
+
+    @Override
+    public void execute(Runnable command) {
+      startTask();
+      try {
+        command.run();
+      } finally {
+        endTask();
+      }
+    }
+
+    @Override
+    public boolean isShutdown() {
+      lock.lock();
+      try {
+        return shutdown;
+      } finally {
+        lock.unlock();
+      }
+    }
+
+    @Override
+    public void shutdown() {
+      lock.lock();
+      try {
+        shutdown = true;
+      } finally {
+        lock.unlock();
+      }
+    }
+
+    // See sameThreadExecutor javadoc for unusual behavior of this method.
+    @Override
+    public List<Runnable> shutdownNow() {
+      shutdown();
+      return Collections.emptyList();
+    }
+
+    @Override
+    public boolean isTerminated() {
+      lock.lock();
+      try {
+        return shutdown && runningTasks == 0;
+      } finally {
+        lock.unlock();
+      }
+    }
+
+    @Override
+    public boolean awaitTermination(long timeout, TimeUnit unit)
+        throws InterruptedException {
+      long nanos = unit.toNanos(timeout);
+      lock.lock();
+      try {
+        for (;;) {
+          if (isTerminated()) {
+            return true;
+          } else if (nanos <= 0) {
+            return false;
+          } else {
+            nanos = termination.awaitNanos(nanos);
+          }
+        }
+      } finally {
+        lock.unlock();
+      }
+    }
+
+    /**
+     * Checks if the executor has been shut down and increments the running
+     * task count.
+     *
+     * @throws RejectedExecutionException if the executor has been previously
+     *         shutdown
+     */
+    private void startTask() {
+      lock.lock();
+      try {
+        if (isShutdown()) {
+          throw new RejectedExecutionException("Executor already shutdown");
+        }
+        runningTasks++;
+      } finally {
+        lock.unlock();
+      }
+    }
+
+    /**
+     * Decrements the running task count.
+     */
+    private void endTask() {
+      lock.lock();
+      try {
+        runningTasks--;
+        if (isTerminated()) {
+          termination.signalAll();
+        }
+      } finally {
+        lock.unlock();
+      }
+    }
+  }
+
+  /**
+   * Creates an {@link ExecutorService} whose {@code submit} and {@code
+   * invokeAll} methods submit {@link ListenableFutureTask} instances to the
+   * given delegate executor. Those methods, as well as {@code execute} and
+   * {@code invokeAny}, are implemented in terms of calls to {@code
+   * delegate.execute}. All other methods are forwarded unchanged to the
+   * delegate. This implies that the returned {@code ListeningExecutorService}
+   * never calls the delegate's {@code submit}, {@code invokeAll}, and {@code
+   * invokeAny} methods, so any special handling of tasks must be implemented in
+   * the delegate's {@code execute} method or by wrapping the returned {@code
+   * ListeningExecutorService}.
+   *
+   * <p>If the delegate executor was already an instance of {@code
+   * ListeningExecutorService}, it is returned untouched, and the rest of this
+   * documentation does not apply.
+   *
+   * @since 10.0
+   */
+  public static ListeningExecutorService listeningDecorator(
+      ExecutorService delegate) {
+    return (delegate instanceof ListeningExecutorService)
+        ? (ListeningExecutorService) delegate
+        : (delegate instanceof ScheduledExecutorService)
+        ? new ScheduledListeningDecorator((ScheduledExecutorService) delegate)
+        : new ListeningDecorator(delegate);
+  }
+
+  /**
+   * Creates a {@link ScheduledExecutorService} whose {@code submit} and {@code
+   * invokeAll} methods submit {@link ListenableFutureTask} instances to the
+   * given delegate executor. Those methods, as well as {@code execute} and
+   * {@code invokeAny}, are implemented in terms of calls to {@code
+   * delegate.execute}. All other methods are forwarded unchanged to the
+   * delegate. This implies that the returned {@code
+   * SchedulingListeningExecutorService} never calls the delegate's {@code
+   * submit}, {@code invokeAll}, and {@code invokeAny} methods, so any special
+   * handling of tasks must be implemented in the delegate's {@code execute}
+   * method or by wrapping the returned {@code
+   * SchedulingListeningExecutorService}.
+   *
+   * <p>If the delegate executor was already an instance of {@code
+   * ListeningScheduledExecutorService}, it is returned untouched, and the rest
+   * of this documentation does not apply.
+   *
+   * @since 10.0
+   */
+  public static ListeningScheduledExecutorService listeningDecorator(
+      ScheduledExecutorService delegate) {
+    return (delegate instanceof ListeningScheduledExecutorService)
+        ? (ListeningScheduledExecutorService) delegate
+        : new ScheduledListeningDecorator(delegate);
+  }
+
+  private static class ListeningDecorator
+      extends AbstractListeningExecutorService {
+    final ExecutorService delegate;
+
+    ListeningDecorator(ExecutorService delegate) {
+      this.delegate = checkNotNull(delegate);
+    }
+
+    @Override
+    public boolean awaitTermination(long timeout, TimeUnit unit)
+        throws InterruptedException {
+      return delegate.awaitTermination(timeout, unit);
+    }
+
+    @Override
+    public boolean isShutdown() {
+      return delegate.isShutdown();
+    }
+
+    @Override
+    public boolean isTerminated() {
+      return delegate.isTerminated();
+    }
+
+    @Override
+    public void shutdown() {
+      delegate.shutdown();
+    }
+
+    @Override
+    public List<Runnable> shutdownNow() {
+      return delegate.shutdownNow();
+    }
+
+    @Override
+    public void execute(Runnable command) {
+      delegate.execute(command);
+    }
+  }
+
+  private static class ScheduledListeningDecorator
+      extends ListeningDecorator implements ListeningScheduledExecutorService {
+    final ScheduledExecutorService delegate;
+
+    ScheduledListeningDecorator(ScheduledExecutorService delegate) {
+      super(delegate);
+      this.delegate = checkNotNull(delegate);
+    }
+
+    @Override
+    public ScheduledFuture<?> schedule(
+        Runnable command, long delay, TimeUnit unit) {
+      return delegate.schedule(command, delay, unit);
+    }
+
+    @Override
+    public <V> ScheduledFuture<V> schedule(
+        Callable<V> callable, long delay, TimeUnit unit) {
+      return delegate.schedule(callable, delay, unit);
+    }
+
+    @Override
+    public ScheduledFuture<?> scheduleAtFixedRate(
+        Runnable command, long initialDelay, long period, TimeUnit unit) {
+      return delegate.scheduleAtFixedRate(command, initialDelay, period, unit);
+    }
+
+    @Override
+    public ScheduledFuture<?> scheduleWithFixedDelay(
+        Runnable command, long initialDelay, long delay, TimeUnit unit) {
+      return delegate.scheduleWithFixedDelay(
+          command, initialDelay, delay, unit);
+    }
+  }
+}
diff --git a/guava/src/com/google/common/util/concurrent/Service.java b/guava/src/com/google/common/util/concurrent/Service.java
new file mode 100644
index 0000000..9ad1f3d
--- /dev/null
+++ b/guava/src/com/google/common/util/concurrent/Service.java
@@ -0,0 +1,159 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import com.google.common.annotations.Beta;
+
+import java.util.concurrent.ExecutionException;
+
+/**
+ * An object with an operational state, plus asynchronous {@link #start()} and
+ * {@link #stop()} lifecycle methods to transfer into and out of this state.
+ * Example services include webservers, RPC servers and timers. The normal
+ * lifecycle of a service is:
+ * <ul>
+ *   <li>{@link State#NEW} -&gt;</li>
+ *   <li>{@link State#STARTING} -&gt;</li>
+ *   <li>{@link State#RUNNING} -&gt;</li>
+ *   <li>{@link State#STOPPING} -&gt;</li>
+ *   <li>{@link State#TERMINATED}</li>
+ * </ul>
+ *
+ * If the service fails while starting, running or stopping, its state will be
+ * {@link State#FAILED}, and its behavior is undefined. Such a service cannot be
+ * started nor stopped.
+ *
+ * <p>Implementors of this interface are strongly encouraged to extend one of 
+ * the abstract classes in this package which implement this interface and 
+ * make the threading and state management easier.
+ *
+ * @author Jesse Wilson
+ * @since 9.0 (in 1.0 as
+ *     {@code com.google.common.base.Service})
+ */
+@Beta // TODO(kevinb): make abstract class?
+public interface Service {
+  /**
+   * If the service state is {@link State#NEW}, this initiates service startup
+   * and returns immediately. If the service has already been started, this
+   * method returns immediately without taking action. A stopped service may not
+   * be restarted.
+   *
+   * @return a future for the startup result, regardless of whether this call
+   *     initiated startup. Calling {@link ListenableFuture#get} will block
+   *     until the service has finished starting, and returns one of {@link
+   *     State#RUNNING}, {@link State#STOPPING} or {@link State#TERMINATED}. If
+   *     the service fails to start, {@link ListenableFuture#get} will throw an
+   *     {@link ExecutionException}, and the service's state will be {@link
+   *     State#FAILED}. If it has already finished starting, {@link
+   *     ListenableFuture#get} returns immediately. Cancelling this future has
+   *     no effect on the service.
+   */
+  ListenableFuture<State> start();
+
+  /**
+   * Initiates service startup (if necessary), returning once the service has
+   * finished starting. Unlike calling {@code start().get()}, this method throws
+   * no checked exceptions, and it cannot be {@linkplain Thread#interrupt
+   * interrupted}.
+   *
+   * @throws UncheckedExecutionException if startup failed
+   * @return the state of the service when startup finished.
+   */
+  State startAndWait();
+
+  /**
+   * Returns {@code true} if this service is {@linkplain State#RUNNING running}.
+   */
+  boolean isRunning();
+
+  /**
+   * Returns the lifecycle state of the service.
+   */
+  State state();
+
+  /**
+   * If the service is {@linkplain State#STARTING starting} or {@linkplain
+   * State#RUNNING running}, this initiates service shutdown and returns
+   * immediately. If the service is {@linkplain State#NEW new}, it is
+   * {@linkplain State#TERMINATED terminated} without having been started nor
+   * stopped.  If the service has already been stopped, this method returns
+   * immediately without taking action.
+   *
+   * @return a future for the shutdown result, regardless of whether this call
+   *     initiated shutdown. Calling {@link ListenableFuture#get} will block
+   *     until the service has finished shutting down, and either returns
+   *     {@link State#TERMINATED} or throws an {@link ExecutionException}. If
+   *     it has already finished stopping, {@link ListenableFuture#get} returns
+   *     immediately.  Cancelling this future has no effect on the service.
+   */
+  ListenableFuture<State> stop();
+
+  /**
+   * Initiates service shutdown (if necessary), returning once the service has
+   * finished stopping. If this is {@link State#STARTING}, startup will be
+   * cancelled. If this is {@link State#NEW}, it is {@link State#TERMINATED
+   * terminated} without having been started nor stopped. Unlike calling {@code
+   * stop().get()}, this method throws no checked exceptions.
+   *
+   * @throws UncheckedExecutionException if shutdown failed
+   * @return the state of the service when shutdown finished.
+   */
+  State stopAndWait();
+
+  /**
+   * The lifecycle states of a service.
+   *
+   * @since 9.0 (in 1.0 as
+   *     {@code com.google.common.base.Service.State})
+   */
+  @Beta // should come out of Beta when Service does
+  enum State {
+    /**
+     * A service in this state is inactive. It does minimal work and consumes
+     * minimal resources.
+     */
+    NEW,
+
+    /**
+     * A service in this state is transitioning to {@link #RUNNING}.
+     */
+    STARTING,
+
+    /**
+     * A service in this state is operational.
+     */
+    RUNNING,
+
+    /**
+     * A service in this state is transitioning to {@link #TERMINATED}.
+     */
+    STOPPING,
+
+    /**
+     * A service in this state has completed execution normally. It does minimal
+     * work and consumes minimal resources.
+     */
+    TERMINATED,
+
+    /**
+     * A service in this state has encountered a problem and may not be
+     * operational. It cannot be started nor stopped.
+     */
+    FAILED
+  }
+}
diff --git a/guava/src/com/google/common/util/concurrent/SettableFuture.java b/guava/src/com/google/common/util/concurrent/SettableFuture.java
new file mode 100644
index 0000000..23e14f9
--- /dev/null
+++ b/guava/src/com/google/common/util/concurrent/SettableFuture.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2009 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import javax.annotation.Nullable;
+
+/**
+ * A {@link ListenableFuture} whose result may be set by a {@link #set(Object)}
+ * or {@link #setException(Throwable)} call. It may also be cancelled.
+ *
+ * @author Sven Mawson
+ * @since 9.0 (in 1.0 as {@code ValueFuture})
+ */
+public final class SettableFuture<V> extends AbstractFuture<V> {
+
+  /**
+   * Creates a new {@code SettableFuture} in the default state.
+   */
+  public static <V> SettableFuture<V> create() {
+    return new SettableFuture<V>();
+  }
+
+  /**
+   * Explicit private constructor, use the {@link #create} factory method to
+   * create instances of {@code SettableFuture}.
+   */
+  private SettableFuture() {}
+
+  /**
+   * Sets the value of this future.  This method will return {@code true} if
+   * the value was successfully set, or {@code false} if the future has already
+   * been set or cancelled.
+   *
+   * @param value the value the future should hold.
+   * @return true if the value was successfully set.
+   */
+  @Override
+  public boolean set(@Nullable V value) {
+    return super.set(value);
+  }
+
+  /**
+   * Sets the future to having failed with the given exception. This exception
+   * will be wrapped in an {@code ExecutionException} and thrown from the {@code
+   * get} methods. This method will return {@code true} if the exception was
+   * successfully set, or {@code false} if the future has already been set or
+   * cancelled.
+   *
+   * @param throwable the exception the future should hold.
+   * @return true if the exception was successfully set.
+   */
+  @Override
+  public boolean setException(Throwable throwable) {
+    return super.setException(throwable);
+  }
+}
diff --git a/guava/src/com/google/common/util/concurrent/SimpleTimeLimiter.java b/guava/src/com/google/common/util/concurrent/SimpleTimeLimiter.java
new file mode 100644
index 0000000..0f7c3e4
--- /dev/null
+++ b/guava/src/com/google/common/util/concurrent/SimpleTimeLimiter.java
@@ -0,0 +1,195 @@
+/*
+ * Copyright (C) 2006 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.annotations.Beta;
+import com.google.common.collect.ObjectArrays;
+import com.google.common.collect.Sets;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
+import java.util.Set;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+
+/**
+ * A TimeLimiter that runs method calls in the background using an
+ * {@link ExecutorService}.  If the time limit expires for a given method call,
+ * the thread running the call will be interrupted.
+ *
+ * @author Kevin Bourrillion
+ * @since 1.0
+ */
+@Beta
+public final class SimpleTimeLimiter implements TimeLimiter {
+
+  private final ExecutorService executor;
+
+  /**
+   * Constructs a TimeLimiter instance using the given executor service to
+   * execute proxied method calls.
+   * <p>
+   * <b>Warning:</b> using a bounded executor
+   * may be counterproductive!  If the thread pool fills up, any time callers
+   * spend waiting for a thread may count toward their time limit, and in
+   * this case the call may even time out before the target method is ever
+   * invoked.
+   *
+   * @param executor the ExecutorService that will execute the method calls on
+   *     the target objects; for example, a {@link
+   *     Executors#newCachedThreadPool()}.
+   */
+  public SimpleTimeLimiter(ExecutorService executor) {
+    this.executor = checkNotNull(executor);
+  }
+
+  /**
+   * Constructs a TimeLimiter instance using a {@link
+   * Executors#newCachedThreadPool()} to execute proxied method calls.
+   *
+   * <p><b>Warning:</b> using a bounded executor may be counterproductive! If
+   * the thread pool fills up, any time callers spend waiting for a thread may
+   * count toward their time limit, and in this case the call may even time out
+   * before the target method is ever invoked.
+   */
+  public SimpleTimeLimiter() {
+    this(Executors.newCachedThreadPool());
+  }
+
+  @Override
+  public <T> T newProxy(final T target, Class<T> interfaceType,
+      final long timeoutDuration, final TimeUnit timeoutUnit) {
+    checkNotNull(target);
+    checkNotNull(interfaceType);
+    checkNotNull(timeoutUnit);
+    checkArgument(timeoutDuration > 0, "bad timeout: " + timeoutDuration);
+    checkArgument(interfaceType.isInterface(),
+        "interfaceType must be an interface type");
+
+    final Set<Method> interruptibleMethods
+        = findInterruptibleMethods(interfaceType);
+
+    InvocationHandler handler = new InvocationHandler() {
+      @Override
+      public Object invoke(Object obj, final Method method, final Object[] args)
+          throws Throwable {
+        Callable<Object> callable = new Callable<Object>() {
+          @Override
+          public Object call() throws Exception {
+            try {
+              return method.invoke(target, args);
+            } catch (InvocationTargetException e) {
+              throwCause(e, false);
+              throw new AssertionError("can't get here");
+            }
+          }
+        };
+        return callWithTimeout(callable, timeoutDuration, timeoutUnit,
+            interruptibleMethods.contains(method));
+      }
+    };
+    return newProxy(interfaceType, handler);
+  }
+
+  // TODO: should this actually throw only ExecutionException?
+  @Override
+  public <T> T callWithTimeout(Callable<T> callable, long timeoutDuration,
+      TimeUnit timeoutUnit, boolean amInterruptible) throws Exception {
+    checkNotNull(callable);
+    checkNotNull(timeoutUnit);
+    checkArgument(timeoutDuration > 0, "timeout must be positive: %s",
+        timeoutDuration);
+    Future<T> future = executor.submit(callable);
+    try {
+      if (amInterruptible) {
+        try {
+          return future.get(timeoutDuration, timeoutUnit);
+        } catch (InterruptedException e) {
+          future.cancel(true);
+          throw e;
+        }
+      } else {
+        return Uninterruptibles.getUninterruptibly(future, 
+            timeoutDuration, timeoutUnit);
+      }
+    } catch (ExecutionException e) {
+      throw throwCause(e, true);
+    } catch (TimeoutException e) {
+      future.cancel(true);
+      throw new UncheckedTimeoutException(e);
+    }
+  }
+
+  private static Exception throwCause(Exception e, boolean combineStackTraces)
+      throws Exception {
+    Throwable cause = e.getCause();
+    if (cause == null) {
+      throw e;
+    }
+    if (combineStackTraces) {
+      StackTraceElement[] combined = ObjectArrays.concat(cause.getStackTrace(),
+          e.getStackTrace(), StackTraceElement.class);
+      cause.setStackTrace(combined);
+    }
+    if (cause instanceof Exception) {
+      throw (Exception) cause;
+    }
+    if (cause instanceof Error) {
+      throw (Error) cause;
+    }
+    // The cause is a weird kind of Throwable, so throw the outer exception.
+    throw e;
+  }
+
+  private static Set<Method> findInterruptibleMethods(Class<?> interfaceType) {
+    Set<Method> set = Sets.newHashSet();
+    for (Method m : interfaceType.getMethods()) {
+      if (declaresInterruptedEx(m)) {
+        set.add(m);
+      }
+    }
+    return set;
+  }
+
+  private static boolean declaresInterruptedEx(Method method) {
+    for (Class<?> exType : method.getExceptionTypes()) {
+      // debate: == or isAssignableFrom?
+      if (exType == InterruptedException.class) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  // TODO: replace with version in common.reflect if and when it's open-sourced
+  private static <T> T newProxy(
+      Class<T> interfaceType, InvocationHandler handler) {
+    Object object = Proxy.newProxyInstance(interfaceType.getClassLoader(),
+        new Class<?>[] { interfaceType }, handler);
+    return interfaceType.cast(object);
+  }
+}
diff --git a/guava/src/com/google/common/util/concurrent/ThreadFactoryBuilder.java b/guava/src/com/google/common/util/concurrent/ThreadFactoryBuilder.java
new file mode 100644
index 0000000..167ad11
--- /dev/null
+++ b/guava/src/com/google/common/util/concurrent/ThreadFactoryBuilder.java
@@ -0,0 +1,176 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.lang.Thread.UncaughtExceptionHandler;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ThreadFactory;
+import java.util.concurrent.atomic.AtomicLong;
+
+/**
+ * A ThreadFactory builder, providing any combination of these features:
+ * <ul>
+ * <li> whether threads should be marked as {@linkplain Thread#setDaemon daemon}
+ * threads
+ * <li> a {@linkplain ThreadFactoryBuilder#setNameFormat naming format}
+ * <li> a {@linkplain Thread#setPriority thread priority}
+ * <li> an {@linkplain Thread#setUncaughtExceptionHandler uncaught exception
+ * handler}
+ * <li> a {@linkplain ThreadFactory#newThread backing thread factory}
+ * </ul>
+ * If no backing thread factory is provided, a default backing thread factory is
+ * used as if by calling {@code setThreadFactory(}{@link
+ * Executors#defaultThreadFactory()}{@code )}.
+ *
+ * @author Kurt Alfred Kluever
+ * @since 4.0
+ */
+public final class ThreadFactoryBuilder {
+  private String nameFormat = null;
+  private Boolean daemon = null;
+  private Integer priority = null;
+  private UncaughtExceptionHandler uncaughtExceptionHandler = null;
+  private ThreadFactory backingThreadFactory = null;
+
+  /**
+   * Creates a new {@link ThreadFactory} builder.
+   */
+  public ThreadFactoryBuilder() {}
+
+  /**
+   * Sets the naming format to use when naming threads ({@link Thread#setName})
+   * which are created with this ThreadFactory.
+   *
+   * @param nameFormat a {@link String#format(String, Object...)}-compatible
+   *     format String, to which a unique integer (0, 1, etc.) will be supplied
+   *     as the single parameter. This integer will be unique to the built
+   *     instance of the ThreadFactory and will be assigned sequentially.
+   * @return this for the builder pattern
+   */
+  public ThreadFactoryBuilder setNameFormat(String nameFormat) {
+    String.format(nameFormat, 0); // fail fast if the format is bad or null
+    this.nameFormat = nameFormat;
+    return this;
+  }
+
+  /**
+   * Sets daemon or not for new threads created with this ThreadFactory.
+   *
+   * @param daemon whether or not new Threads created with this ThreadFactory
+   *     will be daemon threads
+   * @return this for the builder pattern
+   */
+  public ThreadFactoryBuilder setDaemon(boolean daemon) {
+    this.daemon = daemon;
+    return this;
+  }
+
+  /**
+   * Sets the priority for new threads created with this ThreadFactory.
+   *
+   * @param priority the priority for new Threads created with this
+   *     ThreadFactory
+   * @return this for the builder pattern
+   */
+  public ThreadFactoryBuilder setPriority(int priority) {
+    // Thread#setPriority() already checks for validity. These error messages
+    // are nicer though and will fail-fast.
+    checkArgument(priority >= Thread.MIN_PRIORITY,
+        "Thread priority (%s) must be >= %s", priority, Thread.MIN_PRIORITY);
+    checkArgument(priority <= Thread.MAX_PRIORITY,
+        "Thread priority (%s) must be <= %s", priority, Thread.MAX_PRIORITY);
+    this.priority = priority;
+    return this;
+  }
+
+  /**
+   * Sets the {@link UncaughtExceptionHandler} for new threads created with this
+   * ThreadFactory.
+   *
+   * @param uncaughtExceptionHandler the uncaught exception handler for new
+   *     Threads created with this ThreadFactory
+   * @return this for the builder pattern
+   */
+  public ThreadFactoryBuilder setUncaughtExceptionHandler(
+      UncaughtExceptionHandler uncaughtExceptionHandler) {
+    this.uncaughtExceptionHandler = checkNotNull(uncaughtExceptionHandler);
+    return this;
+  }
+
+  /**
+   * Sets the backing {@link ThreadFactory} for new threads created with this
+   * ThreadFactory. Threads will be created by invoking #newThread(Runnable) on
+   * this backing {@link ThreadFactory}.
+   *
+   * @param backingThreadFactory the backing {@link ThreadFactory} which will
+   *     be delegated to during thread creation.
+   * @return this for the builder pattern
+   *
+   * @see MoreExecutors
+   */
+  public ThreadFactoryBuilder setThreadFactory(
+      ThreadFactory backingThreadFactory) {
+    this.backingThreadFactory = checkNotNull(backingThreadFactory);
+    return this;
+  }
+
+  /**
+   * Returns a new thread factory using the options supplied during the building
+   * process. After building, it is still possible to change the options used to
+   * build the ThreadFactory and/or build again. State is not shared amongst
+   * built instances.
+   *
+   * @return the fully constructed {@link ThreadFactory}
+   */
+  public ThreadFactory build() {
+    return build(this);
+  }
+
+  private static ThreadFactory build(ThreadFactoryBuilder builder) {
+    final String nameFormat = builder.nameFormat;
+    final Boolean daemon = builder.daemon;
+    final Integer priority = builder.priority;
+    final UncaughtExceptionHandler uncaughtExceptionHandler =
+        builder.uncaughtExceptionHandler;
+    final ThreadFactory backingThreadFactory =
+        (builder.backingThreadFactory != null)
+        ? builder.backingThreadFactory
+        : Executors.defaultThreadFactory();
+    final AtomicLong count = (nameFormat != null) ? new AtomicLong(0) : null;
+    return new ThreadFactory() {
+      @Override public Thread newThread(Runnable runnable) {
+        Thread thread = backingThreadFactory.newThread(runnable);
+        if (nameFormat != null) {
+          thread.setName(String.format(nameFormat, count.getAndIncrement()));
+        }
+        if (daemon != null) {
+          thread.setDaemon(daemon);
+        }
+        if (priority != null) {
+          thread.setPriority(priority);
+        }
+        if (uncaughtExceptionHandler != null) {
+          thread.setUncaughtExceptionHandler(uncaughtExceptionHandler);
+        }
+        return thread;
+      }
+    };
+  }
+}
diff --git a/guava/src/com/google/common/util/concurrent/TimeLimiter.java b/guava/src/com/google/common/util/concurrent/TimeLimiter.java
new file mode 100644
index 0000000..a9938de
--- /dev/null
+++ b/guava/src/com/google/common/util/concurrent/TimeLimiter.java
@@ -0,0 +1,106 @@
+/*
+ * Copyright (C) 2006 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import com.google.common.annotations.Beta;
+
+import java.util.concurrent.Callable;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Produces proxies that impose a time limit on method
+ * calls to the proxied object.  For example, to return the value of
+ * {@code target.someMethod()}, but substitute {@code DEFAULT_VALUE} if this
+ * method call takes over 50 ms, you can use this code:
+ * <pre>
+ *   TimeLimiter limiter = . . .;
+ *   TargetType proxy = limiter.newProxy(
+ *       target, TargetType.class, 50, TimeUnit.MILLISECONDS);
+ *   try {
+ *     return proxy.someMethod();
+ *   } catch (UncheckedTimeoutException e) {
+ *     return DEFAULT_VALUE;
+ *   }
+ * </pre>
+ * Please see {@code SimpleTimeLimiterTest} for more usage examples.
+ *
+ * @author Kevin Bourrillion
+ * @since 1.0
+ */
+@Beta
+public interface TimeLimiter {
+
+  /**
+   * Returns an instance of {@code interfaceType} that delegates all method
+   * calls to the {@code target} object, enforcing the specified time limit on
+   * each call.  This time-limited delegation is also performed for calls to
+   * {@link Object#equals}, {@link Object#hashCode}, and
+   * {@link Object#toString}.
+   * <p>
+   * If the target method call finishes before the limit is reached, the return
+   * value or exception is propagated to the caller exactly as-is. If, on the
+   * other hand, the time limit is reached, the proxy will attempt to abort the
+   * call to the target, and will throw an {@link UncheckedTimeoutException} to
+   * the caller.
+   * <p>
+   * It is important to note that the primary purpose of the proxy object is to
+   * return control to the caller when the timeout elapses; aborting the target
+   * method call is of secondary concern.  The particular nature and strength
+   * of the guarantees made by the proxy is implementation-dependent.  However,
+   * it is important that each of the methods on the target object behaves
+   * appropriately when its thread is interrupted.
+   *
+   * @param target the object to proxy
+   * @param interfaceType the interface you wish the returned proxy to
+   *     implement
+   * @param timeoutDuration with timeoutUnit, the maximum length of time that
+   *     callers are willing to wait on each method call to the proxy
+   * @param timeoutUnit with timeoutDuration, the maximum length of time that
+   *     callers are willing to wait on each method call to the proxy
+   * @return a time-limiting proxy
+   * @throws IllegalArgumentException if {@code interfaceType} is a regular
+   *     class, enum, or annotation type, rather than an interface
+   */
+  <T> T newProxy(T target, Class<T> interfaceType,
+      long timeoutDuration, TimeUnit timeoutUnit);
+
+  /**
+   * Invokes a specified Callable, timing out after the specified time limit.
+   * If the target method call finished before the limit is reached, the return
+   * value or exception is propagated to the caller exactly as-is.  If, on the
+   * other hand, the time limit is reached, we attempt to abort the call to the
+   * target, and throw an {@link UncheckedTimeoutException} to the caller.
+   * <p>
+   * <b>Warning:</b> The future of this method is in doubt.  It may be nuked, or
+   * changed significantly.
+   *
+   * @param callable the Callable to execute
+   * @param timeoutDuration with timeoutUnit, the maximum length of time to wait
+   * @param timeoutUnit with timeoutDuration, the maximum length of time to wait
+   * @param interruptible whether to respond to thread interruption by aborting
+   *     the operation and throwing InterruptedException; if false, the
+   *     operation is allowed to complete or time out, and the current thread's
+   *     interrupt status is re-asserted.
+   * @return the result returned by the Callable
+   * @throws InterruptedException if {@code interruptible} is true and our
+   *     thread is interrupted during execution
+   * @throws UncheckedTimeoutException if the time limit is reached
+   * @throws Exception
+   */
+  <T> T callWithTimeout(Callable<T> callable, long timeoutDuration,
+      TimeUnit timeoutUnit, boolean interruptible) throws Exception;
+}
diff --git a/guava/src/com/google/common/util/concurrent/UncaughtExceptionHandlers.java b/guava/src/com/google/common/util/concurrent/UncaughtExceptionHandlers.java
new file mode 100644
index 0000000..bdff7db
--- /dev/null
+++ b/guava/src/com/google/common/util/concurrent/UncaughtExceptionHandlers.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2010 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import static java.util.logging.Level.SEVERE;
+
+import com.google.common.annotations.VisibleForTesting;
+
+import java.lang.Thread.UncaughtExceptionHandler;
+import java.util.logging.Logger;
+
+/**
+ * Factories for {@link UncaughtExceptionHandler} instances.
+ *
+ * @author Gregory Kick
+ * @since 8.0
+ */
+public final class UncaughtExceptionHandlers {
+  private UncaughtExceptionHandlers() {}
+
+  /**
+   * Returns an exception handler that exits the system. This is particularly useful for the main
+   * thread, which may start up other, non-daemon threads, but fail to fully initialize the
+   * application successfully.
+   *
+   * <p>Example usage:
+   * <pre>public static void main(String[] args) {
+   *   Thread.currentThread().setUncaughtExceptionHandler(UncaughtExceptionHandlers.systemExit());
+   *   ...
+   * </pre>
+   */
+  public static UncaughtExceptionHandler systemExit() {
+    return new Exiter(Runtime.getRuntime());
+  }
+
+  @VisibleForTesting static final class Exiter implements UncaughtExceptionHandler {
+    private static final Logger logger = Logger.getLogger(Exiter.class.getName());
+
+    private final Runtime runtime;
+
+    Exiter(Runtime runtime) {
+      this.runtime = runtime;
+    }
+
+    @Override public void uncaughtException(Thread t, Throwable e) {
+      // cannot use FormattingLogger due to a dependency loop
+      logger.log(SEVERE, String.format("Caught an exception in %s.  Shutting down.", t), e);
+      runtime.exit(1);
+    }
+  }
+}
diff --git a/guava/src/com/google/common/util/concurrent/UncheckedExecutionException.java b/guava/src/com/google/common/util/concurrent/UncheckedExecutionException.java
new file mode 100644
index 0000000..c0c99e1
--- /dev/null
+++ b/guava/src/com/google/common/util/concurrent/UncheckedExecutionException.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import com.google.common.annotations.Beta;
+import com.google.common.annotations.GwtCompatible;
+
+/**
+ * Unchecked variant of {@link java.util.concurrent.ExecutionException}. As with
+ * {@code ExecutionException}, the exception's {@linkplain #getCause() cause}
+ * comes from a failed task, possibly run in another thread.
+ *
+ * <p>{@code UncheckedExecutionException} is intended as an alternative to
+ * {@code ExecutionException} when the exception thrown by a task is an
+ * unchecked exception. This allows the client code to continue to distinguish
+ * between checked and unchecked exceptions, even when they come from other
+ * threads.
+ *
+ * <p>When wrapping an {@code Error} from another thread, prefer {@link
+ * ExecutionError}.
+ *
+ * @author Charles Fry
+ * @since 10.0
+ */
+@Beta
+@GwtCompatible
+public class UncheckedExecutionException extends RuntimeException {
+  /**
+   * Creates a new instance with {@code null} as its detail message.
+   */
+  protected UncheckedExecutionException() {}
+
+  /**
+   * Creates a new instance with the given detail message.
+   */
+  protected UncheckedExecutionException(String message) {
+    super(message);
+  }
+
+  /**
+   * Creates a new instance with the given detail message and cause.
+   */
+  public UncheckedExecutionException(String message, Throwable cause) {
+    super(message, cause);
+  }
+
+  /**
+   * Creates a new instance with the given cause.
+   */
+  public UncheckedExecutionException(Throwable cause) {
+    super(cause);
+  }
+
+  private static final long serialVersionUID = 0;
+}
diff --git a/guava/src/com/google/common/util/concurrent/UncheckedTimeoutException.java b/guava/src/com/google/common/util/concurrent/UncheckedTimeoutException.java
new file mode 100644
index 0000000..d821c84
--- /dev/null
+++ b/guava/src/com/google/common/util/concurrent/UncheckedTimeoutException.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2006 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+/**
+ * Unchecked version of {@link java.util.concurrent.TimeoutException}.
+ *
+ * @author Kevin Bourrillion
+ * @since 1.0
+ */
+public class UncheckedTimeoutException extends RuntimeException {
+  public UncheckedTimeoutException() {}
+
+  public UncheckedTimeoutException(String message) {
+    super(message);
+  }
+
+  public UncheckedTimeoutException(Throwable cause) {
+    super(cause);
+  }
+
+  public UncheckedTimeoutException(String message, Throwable cause) {
+    super(message, cause);
+  }
+
+  private static final long serialVersionUID = 0;
+}
diff --git a/guava/src/com/google/common/util/concurrent/Uninterruptibles.java b/guava/src/com/google/common/util/concurrent/Uninterruptibles.java
new file mode 100644
index 0000000..89f30b8
--- /dev/null
+++ b/guava/src/com/google/common/util/concurrent/Uninterruptibles.java
@@ -0,0 +1,278 @@
+/*
+ * Copyright (C) 2011 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+package com.google.common.util.concurrent;
+
+import static java.util.concurrent.TimeUnit.NANOSECONDS;
+
+import com.google.common.annotations.Beta;
+import com.google.common.base.Preconditions;
+
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+
+/**
+ * Utilities for treating interruptible operations as uninterruptible.
+ * In all cases, if a thread is interrupted during such a call, the call
+ * continues to block until the result is available or the timeout elapses,
+ * and only then re-interrupts the thread.
+ *
+ * @author Anthony Zana
+ * @since 10.0
+ */
+@Beta
+public final class Uninterruptibles {
+
+  // Implementation Note: As of 3-7-11, the logic for each blocking/timeout
+  // methods is identical, save for method being invoked.
+
+  /**
+   * Invokes {@code latch.}{@link CountDownLatch#await() await()}
+   * uninterruptibly.
+   */
+  public static void awaitUninterruptibly(CountDownLatch latch) {
+    boolean interrupted = false;
+    try {
+      while (true) {
+        try {
+          latch.await();
+          return;
+        } catch (InterruptedException e) {
+          interrupted = true;
+        }
+      }
+    } finally {
+      if (interrupted) {
+        Thread.currentThread().interrupt();
+      }
+    }
+  }
+
+  /**
+   * Invokes
+   * {@code latch.}{@link CountDownLatch#await(long, TimeUnit)
+   * await(timeout, unit)} uninterruptibly.
+   */
+  public static boolean awaitUninterruptibly(CountDownLatch latch,
+      long timeout, TimeUnit unit) {
+    boolean interrupted = false;
+    try {
+      long remainingNanos = unit.toNanos(timeout);
+      long end = System.nanoTime() + remainingNanos;
+
+      while (true) {
+        try {
+          // CountDownLatch treats negative timeouts just like zero.
+          return latch.await(remainingNanos, NANOSECONDS);
+        } catch (InterruptedException e) {
+          interrupted = true;
+          remainingNanos = end - System.nanoTime();
+        }
+      }
+    } finally {
+      if (interrupted) {
+        Thread.currentThread().interrupt();
+      }
+    }
+  }
+
+  /**
+   * Invokes {@code toJoin.}{@link Thread#join() join()} uninterruptibly.
+   */
+  public static void joinUninterruptibly(Thread toJoin) {
+    boolean interrupted = false;
+    try {
+      while (true) {
+        try {
+          toJoin.join();
+          return;
+        } catch (InterruptedException e) {
+          interrupted = true;
+        }
+      }
+    } finally {
+      if (interrupted) {
+        Thread.currentThread().interrupt();
+      }
+    }
+  }
+
+  /**
+   * Invokes {@code future.}{@link Future#get() get()} uninterruptibly.
+   * To get uninterruptibility and remove checked exceptions, see
+   * {@link Futures#getUnchecked}.
+   *
+   * <p>If instead, you wish to treat {@link InterruptedException} uniformly
+   * with other exceptions, see {@link Futures#get(Future, Class) Futures.get}
+   * or {@link Futures#makeChecked}.
+   */
+  public static <V> V getUninterruptibly(Future<V> future)
+      throws ExecutionException {
+    boolean interrupted = false;
+    try {
+      while (true) {
+        try {
+          return future.get();
+        } catch (InterruptedException e) {
+          interrupted = true;
+        }
+      }
+    } finally {
+      if (interrupted) {
+        Thread.currentThread().interrupt();
+      }
+    }
+  }
+
+  /**
+   * Invokes
+   * {@code future.}{@link Future#get(long, TimeUnit) get(timeout, unit)}
+   * uninterruptibly.
+   *
+   * <p>If instead, you wish to treat {@link InterruptedException} uniformly
+   * with other exceptions, see {@link Futures#get(Future, Class) Futures.get}
+   * or {@link Futures#makeChecked}.
+   */
+  public static <V> V getUninterruptibly(
+      Future<V> future, long timeout,  TimeUnit unit)
+          throws ExecutionException, TimeoutException {
+    boolean interrupted = false;
+    try {
+      long remainingNanos = unit.toNanos(timeout);
+      long end = System.nanoTime() + remainingNanos;
+
+      while (true) {
+        try {
+          // Future treats negative timeouts just like zero.
+          return future.get(remainingNanos, NANOSECONDS);
+        } catch (InterruptedException e) {
+          interrupted = true;
+          remainingNanos = end - System.nanoTime();
+        }
+      }
+    } finally {
+      if (interrupted) {
+        Thread.currentThread().interrupt();
+      }
+    }
+  }
+
+  /**
+   * Invokes
+   * {@code unit.}{@link TimeUnit#timedJoin(Thread, long)
+   * timedJoin(toJoin, timeout)} uninterruptibly.
+   */
+  public static void joinUninterruptibly(Thread toJoin,
+      long timeout, TimeUnit unit) {
+    Preconditions.checkNotNull(toJoin);
+    boolean interrupted = false;
+    try {
+      long remainingNanos = unit.toNanos(timeout);
+      long end = System.nanoTime() + remainingNanos;
+      while (true) {
+        try {
+          // TimeUnit.timedJoin() treats negative timeouts just like zero.
+          NANOSECONDS.timedJoin(toJoin, remainingNanos);
+          return;
+        } catch (InterruptedException e) {
+          interrupted = true;
+          remainingNanos = end - System.nanoTime();
+        }
+      }
+    } finally {
+      if (interrupted) {
+        Thread.currentThread().interrupt();
+      }
+    }
+  }
+
+  /**
+   * Invokes {@code queue.}{@link BlockingQueue#take() take()} uninterruptibly.
+   */
+  public static <E> E takeUninterruptibly(BlockingQueue<E> queue) {
+    boolean interrupted = false;
+    try {
+      while (true) {
+        try {
+          return queue.take();
+        } catch (InterruptedException e) {
+          interrupted = true;
+        }
+      }
+    } finally {
+      if (interrupted) {
+        Thread.currentThread().interrupt();
+      }
+    }
+  }
+
+  /**
+   * Invokes {@code queue.}{@link BlockingQueue#put(Object) put(element)}
+   * uninterruptibly.
+   */
+  public static <E> void putUninterruptibly(BlockingQueue<E> queue, E element) {
+    boolean interrupted = false;
+    try {
+      while (true) {
+        try {
+          queue.put(element);
+          return;
+        } catch (InterruptedException e) {
+          interrupted = true;
+        }
+      }
+    } finally {
+      if (interrupted) {
+        Thread.currentThread().interrupt();
+      }
+    }
+  }
+
+  // TODO(user): Support Sleeper somehow (wrapper or interface method)?
+  /**
+   * Invokes {@code unit.}{@link TimeUnit#sleep(long) sleep(sleepFor)}
+   * uninterruptibly.
+   */
+  public static void sleepUninterruptibly(long sleepFor, TimeUnit unit) {
+    boolean interrupted = false;
+    try {
+      long remainingNanos = unit.toNanos(sleepFor);
+      long end = System.nanoTime() + remainingNanos;
+      while (true) {
+        try {
+          // TimeUnit.sleep() treats negative timeouts just like zero.
+          NANOSECONDS.sleep(remainingNanos);
+          return;
+        } catch (InterruptedException e) {
+          interrupted = true;
+          remainingNanos = end - System.nanoTime();
+        }
+      }
+    } finally {
+      if (interrupted) {
+        Thread.currentThread().interrupt();
+      }
+    }
+  }
+
+  // TODO(user): Add support for waitUninterruptibly.
+
+  private Uninterruptibles() {}
+}
diff --git a/guava/src/com/google/common/util/concurrent/package-info.java b/guava/src/com/google/common/util/concurrent/package-info.java
new file mode 100644
index 0000000..6281552
--- /dev/null
+++ b/guava/src/com/google/common/util/concurrent/package-info.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2007 The Guava Authors
+ *
+ * Licensed 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.
+ */
+
+/**
+ * Concurrency utilities.
+ *
+ * <p>Commonly used types include {@link
+ * com.google.common.util.concurrent.ListenableFuture} and {@link
+ * com.google.common.util.concurrent.Service}.
+ *
+ * <p>Commonly used utilities include {@link
+ * com.google.common.util.concurrent.Futures}, {@link
+ * com.google.common.util.concurrent.MoreExecutors}, and {@link
+ * com.google.common.util.concurrent.ThreadFactoryBuilder}.
+ *
+ * <p>This package is a part of the open-source
+ * <a href="http://guava-libraries.googlecode.com">Guava libraries</a>.
+ */
+@ParametersAreNonnullByDefault
+package com.google.common.util.concurrent;
+
+import javax.annotation.ParametersAreNonnullByDefault;
diff --git a/javadoc/allclasses-frame.html b/javadoc/allclasses-frame.html
deleted file mode 100644
index e2f0382..0000000
--- a/javadoc/allclasses-frame.html
+++ /dev/null
@@ -1,349 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-All Classes (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
-
-
-</HEAD>
-
-<BODY BGCOLOR="white">
-<FONT size="+1" CLASS="FrameHeadingFont">
-<B>All Classes</B></FONT>
-<BR>
-
-<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
-<TR>
-<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="com/google/common/util/concurrent/AbstractCheckedFuture.html" title="class in com.google.common.util.concurrent" target="classFrame">AbstractCheckedFuture</A>
-<BR>
-<A HREF="com/google/common/util/concurrent/AbstractExecutionThreadService.html" title="class in com.google.common.util.concurrent" target="classFrame">AbstractExecutionThreadService</A>
-<BR>
-<A HREF="com/google/common/util/concurrent/AbstractFuture.html" title="class in com.google.common.util.concurrent" target="classFrame">AbstractFuture</A>
-<BR>
-<A HREF="com/google/common/util/concurrent/AbstractIdleService.html" title="class in com.google.common.util.concurrent" target="classFrame">AbstractIdleService</A>
-<BR>
-<A HREF="com/google/common/collect/AbstractIterator.html" title="class in com.google.common.collect" target="classFrame">AbstractIterator</A>
-<BR>
-<A HREF="com/google/common/util/concurrent/AbstractListenableFuture.html" title="class in com.google.common.util.concurrent" target="classFrame">AbstractListenableFuture</A>
-<BR>
-<A HREF="com/google/common/util/concurrent/AbstractService.html" title="class in com.google.common.util.concurrent" target="classFrame">AbstractService</A>
-<BR>
-<A HREF="com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect" target="classFrame">ArrayListMultimap</A>
-<BR>
-<A HREF="com/google/common/collect/AsynchronousComputationException.html" title="class in com.google.common.collect" target="classFrame">AsynchronousComputationException</A>
-<BR>
-<A HREF="com/google/common/collect/BiMap.html" title="interface in com.google.common.collect" target="classFrame"><I>BiMap</I></A>
-<BR>
-<A HREF="com/google/common/primitives/Booleans.html" title="class in com.google.common.primitives" target="classFrame">Booleans</A>
-<BR>
-<A HREF="com/google/common/io/ByteArrayDataInput.html" title="interface in com.google.common.io" target="classFrame"><I>ByteArrayDataInput</I></A>
-<BR>
-<A HREF="com/google/common/io/ByteArrayDataOutput.html" title="interface in com.google.common.io" target="classFrame"><I>ByteArrayDataOutput</I></A>
-<BR>
-<A HREF="com/google/common/io/ByteProcessor.html" title="interface in com.google.common.io" target="classFrame"><I>ByteProcessor</I></A>
-<BR>
-<A HREF="com/google/common/primitives/Bytes.html" title="class in com.google.common.primitives" target="classFrame">Bytes</A>
-<BR>
-<A HREF="com/google/common/io/ByteStreams.html" title="class in com.google.common.io" target="classFrame">ByteStreams</A>
-<BR>
-<A HREF="com/google/common/util/concurrent/Callables.html" title="class in com.google.common.util.concurrent" target="classFrame">Callables</A>
-<BR>
-<A HREF="com/google/common/base/CaseFormat.html" title="enum in com.google.common.base" target="classFrame">CaseFormat</A>
-<BR>
-<A HREF="com/google/common/base/CharMatcher.html" title="class in com.google.common.base" target="classFrame">CharMatcher</A>
-<BR>
-<A HREF="com/google/common/base/CharMatcher.LookupTable.html" title="class in com.google.common.base" target="classFrame">CharMatcher.LookupTable</A>
-<BR>
-<A HREF="com/google/common/primitives/Chars.html" title="class in com.google.common.primitives" target="classFrame">Chars</A>
-<BR>
-<A HREF="com/google/common/base/Charsets.html" title="class in com.google.common.base" target="classFrame">Charsets</A>
-<BR>
-<A HREF="com/google/common/io/CharStreams.html" title="class in com.google.common.io" target="classFrame">CharStreams</A>
-<BR>
-<A HREF="com/google/common/util/concurrent/CheckedFuture.html" title="interface in com.google.common.util.concurrent" target="classFrame"><I>CheckedFuture</I></A>
-<BR>
-<A HREF="com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect" target="classFrame"><I>ClassToInstanceMap</I></A>
-<BR>
-<A HREF="com/google/common/io/Closeables.html" title="class in com.google.common.io" target="classFrame">Closeables</A>
-<BR>
-<A HREF="com/google/common/collect/Collections2.html" title="class in com.google.common.collect" target="classFrame">Collections2</A>
-<BR>
-<A HREF="com/google/common/collect/ComparisonChain.html" title="class in com.google.common.collect" target="classFrame">ComparisonChain</A>
-<BR>
-<A HREF="com/google/common/collect/ComputationException.html" title="class in com.google.common.collect" target="classFrame">ComputationException</A>
-<BR>
-<A HREF="com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect" target="classFrame">ConcurrentHashMultiset</A>
-<BR>
-<A HREF="com/google/common/io/CountingInputStream.html" title="class in com.google.common.io" target="classFrame">CountingInputStream</A>
-<BR>
-<A HREF="com/google/common/io/CountingOutputStream.html" title="class in com.google.common.io" target="classFrame">CountingOutputStream</A>
-<BR>
-<A HREF="com/google/common/util/concurrent/DaemonThreadFactory.html" title="class in com.google.common.util.concurrent" target="classFrame">DaemonThreadFactory</A>
-<BR>
-<A HREF="com/google/common/base/Defaults.html" title="class in com.google.common.base" target="classFrame">Defaults</A>
-<BR>
-<A HREF="com/google/common/primitives/Doubles.html" title="class in com.google.common.primitives" target="classFrame">Doubles</A>
-<BR>
-<A HREF="com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect" target="classFrame">EnumBiMap</A>
-<BR>
-<A HREF="com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect" target="classFrame">EnumHashBiMap</A>
-<BR>
-<A HREF="com/google/common/collect/EnumMultiset.html" title="class in com.google.common.collect" target="classFrame">EnumMultiset</A>
-<BR>
-<A HREF="com/google/common/util/concurrent/ExecutionList.html" title="class in com.google.common.util.concurrent" target="classFrame">ExecutionList</A>
-<BR>
-<A HREF="com/google/common/util/concurrent/Executors.html" title="class in com.google.common.util.concurrent" target="classFrame">Executors</A>
-<BR>
-<A HREF="com/google/common/util/concurrent/FakeTimeLimiter.html" title="class in com.google.common.util.concurrent" target="classFrame">FakeTimeLimiter</A>
-<BR>
-<A HREF="com/google/common/io/FileBackedOutputStream.html" title="class in com.google.common.io" target="classFrame">FileBackedOutputStream</A>
-<BR>
-<A HREF="com/google/common/io/Files.html" title="class in com.google.common.io" target="classFrame">Files</A>
-<BR>
-<A HREF="com/google/common/base/FinalizablePhantomReference.html" title="class in com.google.common.base" target="classFrame">FinalizablePhantomReference</A>
-<BR>
-<A HREF="com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base" target="classFrame"><I>FinalizableReference</I></A>
-<BR>
-<A HREF="com/google/common/base/FinalizableReferenceQueue.html" title="class in com.google.common.base" target="classFrame">FinalizableReferenceQueue</A>
-<BR>
-<A HREF="com/google/common/base/FinalizableSoftReference.html" title="class in com.google.common.base" target="classFrame">FinalizableSoftReference</A>
-<BR>
-<A HREF="com/google/common/base/FinalizableWeakReference.html" title="class in com.google.common.base" target="classFrame">FinalizableWeakReference</A>
-<BR>
-<A HREF="com/google/common/primitives/Floats.html" title="class in com.google.common.primitives" target="classFrame">Floats</A>
-<BR>
-<A HREF="com/google/common/io/Flushables.html" title="class in com.google.common.io" target="classFrame">Flushables</A>
-<BR>
-<A HREF="com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect" target="classFrame">ForwardingCollection</A>
-<BR>
-<A HREF="com/google/common/collect/ForwardingConcurrentMap.html" title="class in com.google.common.collect" target="classFrame">ForwardingConcurrentMap</A>
-<BR>
-<A HREF="com/google/common/util/concurrent/ForwardingFuture.html" title="class in com.google.common.util.concurrent" target="classFrame">ForwardingFuture</A>
-<BR>
-<A HREF="com/google/common/collect/ForwardingIterator.html" title="class in com.google.common.collect" target="classFrame">ForwardingIterator</A>
-<BR>
-<A HREF="com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect" target="classFrame">ForwardingList</A>
-<BR>
-<A HREF="com/google/common/collect/ForwardingListIterator.html" title="class in com.google.common.collect" target="classFrame">ForwardingListIterator</A>
-<BR>
-<A HREF="com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect" target="classFrame">ForwardingMap</A>
-<BR>
-<A HREF="com/google/common/collect/ForwardingMapEntry.html" title="class in com.google.common.collect" target="classFrame">ForwardingMapEntry</A>
-<BR>
-<A HREF="com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect" target="classFrame">ForwardingMultimap</A>
-<BR>
-<A HREF="com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect" target="classFrame">ForwardingMultiset</A>
-<BR>
-<A HREF="com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect" target="classFrame">ForwardingObject</A>
-<BR>
-<A HREF="com/google/common/collect/ForwardingQueue.html" title="class in com.google.common.collect" target="classFrame">ForwardingQueue</A>
-<BR>
-<A HREF="com/google/common/util/concurrent/ForwardingService.html" title="class in com.google.common.util.concurrent" target="classFrame">ForwardingService</A>
-<BR>
-<A HREF="com/google/common/collect/ForwardingSet.html" title="class in com.google.common.collect" target="classFrame">ForwardingSet</A>
-<BR>
-<A HREF="com/google/common/collect/ForwardingSortedMap.html" title="class in com.google.common.collect" target="classFrame">ForwardingSortedMap</A>
-<BR>
-<A HREF="com/google/common/collect/ForwardingSortedSet.html" title="class in com.google.common.collect" target="classFrame">ForwardingSortedSet</A>
-<BR>
-<A HREF="com/google/common/base/Function.html" title="interface in com.google.common.base" target="classFrame"><I>Function</I></A>
-<BR>
-<A HREF="com/google/common/base/Functions.html" title="class in com.google.common.base" target="classFrame">Functions</A>
-<BR>
-<A HREF="com/google/common/util/concurrent/Futures.html" title="class in com.google.common.util.concurrent" target="classFrame">Futures</A>
-<BR>
-<A HREF="com/google/common/annotations/GwtCompatible.html" title="annotation in com.google.common.annotations" target="classFrame">GwtCompatible</A>
-<BR>
-<A HREF="com/google/common/annotations/GwtIncompatible.html" title="annotation in com.google.common.annotations" target="classFrame">GwtIncompatible</A>
-<BR>
-<A HREF="com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect" target="classFrame">HashBiMap</A>
-<BR>
-<A HREF="com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect" target="classFrame">HashMultimap</A>
-<BR>
-<A HREF="com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect" target="classFrame">HashMultiset</A>
-<BR>
-<A HREF="com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect" target="classFrame">ImmutableBiMap</A>
-<BR>
-<A HREF="com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect" target="classFrame">ImmutableBiMap.Builder</A>
-<BR>
-<A HREF="com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect" target="classFrame">ImmutableClassToInstanceMap</A>
-<BR>
-<A HREF="com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect" target="classFrame">ImmutableClassToInstanceMap.Builder</A>
-<BR>
-<A HREF="com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect" target="classFrame">ImmutableCollection</A>
-<BR>
-<A HREF="com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect" target="classFrame">ImmutableList</A>
-<BR>
-<A HREF="com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect" target="classFrame">ImmutableList.Builder</A>
-<BR>
-<A HREF="com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect" target="classFrame">ImmutableListMultimap</A>
-<BR>
-<A HREF="com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect" target="classFrame">ImmutableListMultimap.Builder</A>
-<BR>
-<A HREF="com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect" target="classFrame">ImmutableMap</A>
-<BR>
-<A HREF="com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect" target="classFrame">ImmutableMap.Builder</A>
-<BR>
-<A HREF="com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect" target="classFrame">ImmutableMultimap</A>
-<BR>
-<A HREF="com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect" target="classFrame">ImmutableMultimap.Builder</A>
-<BR>
-<A HREF="com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect" target="classFrame">ImmutableMultiset</A>
-<BR>
-<A HREF="com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect" target="classFrame">ImmutableMultiset.Builder</A>
-<BR>
-<A HREF="com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect" target="classFrame">ImmutableSet</A>
-<BR>
-<A HREF="com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect" target="classFrame">ImmutableSet.Builder</A>
-<BR>
-<A HREF="com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect" target="classFrame">ImmutableSetMultimap</A>
-<BR>
-<A HREF="com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect" target="classFrame">ImmutableSetMultimap.Builder</A>
-<BR>
-<A HREF="com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect" target="classFrame">ImmutableSortedMap</A>
-<BR>
-<A HREF="com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect" target="classFrame">ImmutableSortedMap.Builder</A>
-<BR>
-<A HREF="com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect" target="classFrame">ImmutableSortedSet</A>
-<BR>
-<A HREF="com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect" target="classFrame">ImmutableSortedSet.Builder</A>
-<BR>
-<A HREF="com/google/common/io/InputSupplier.html" title="interface in com.google.common.io" target="classFrame"><I>InputSupplier</I></A>
-<BR>
-<A HREF="com/google/common/primitives/Ints.html" title="class in com.google.common.primitives" target="classFrame">Ints</A>
-<BR>
-<A HREF="com/google/common/collect/Iterables.html" title="class in com.google.common.collect" target="classFrame">Iterables</A>
-<BR>
-<A HREF="com/google/common/collect/Iterators.html" title="class in com.google.common.collect" target="classFrame">Iterators</A>
-<BR>
-<A HREF="com/google/common/base/Joiner.html" title="class in com.google.common.base" target="classFrame">Joiner</A>
-<BR>
-<A HREF="com/google/common/base/Joiner.MapJoiner.html" title="class in com.google.common.base" target="classFrame">Joiner.MapJoiner</A>
-<BR>
-<A HREF="com/google/common/io/LimitInputStream.html" title="class in com.google.common.io" target="classFrame">LimitInputStream</A>
-<BR>
-<A HREF="com/google/common/io/LineProcessor.html" title="interface in com.google.common.io" target="classFrame"><I>LineProcessor</I></A>
-<BR>
-<A HREF="com/google/common/io/LineReader.html" title="class in com.google.common.io" target="classFrame">LineReader</A>
-<BR>
-<A HREF="com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect" target="classFrame">LinkedHashMultimap</A>
-<BR>
-<A HREF="com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect" target="classFrame">LinkedHashMultiset</A>
-<BR>
-<A HREF="com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect" target="classFrame">LinkedListMultimap</A>
-<BR>
-<A HREF="com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent" target="classFrame"><I>ListenableFuture</I></A>
-<BR>
-<A HREF="com/google/common/util/concurrent/ListenableFutureTask.html" title="class in com.google.common.util.concurrent" target="classFrame">ListenableFutureTask</A>
-<BR>
-<A HREF="com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect" target="classFrame"><I>ListMultimap</I></A>
-<BR>
-<A HREF="com/google/common/collect/Lists.html" title="class in com.google.common.collect" target="classFrame">Lists</A>
-<BR>
-<A HREF="com/google/common/primitives/Longs.html" title="class in com.google.common.primitives" target="classFrame">Longs</A>
-<BR>
-<A HREF="com/google/common/collect/MapDifference.html" title="interface in com.google.common.collect" target="classFrame"><I>MapDifference</I></A>
-<BR>
-<A HREF="com/google/common/collect/MapDifference.ValueDifference.html" title="interface in com.google.common.collect" target="classFrame"><I>MapDifference.ValueDifference</I></A>
-<BR>
-<A HREF="com/google/common/collect/MapMaker.html" title="class in com.google.common.collect" target="classFrame">MapMaker</A>
-<BR>
-<A HREF="com/google/common/collect/Maps.html" title="class in com.google.common.collect" target="classFrame">Maps</A>
-<BR>
-<A HREF="com/google/common/collect/Multimap.html" title="interface in com.google.common.collect" target="classFrame"><I>Multimap</I></A>
-<BR>
-<A HREF="com/google/common/collect/Multimaps.html" title="class in com.google.common.collect" target="classFrame">Multimaps</A>
-<BR>
-<A HREF="com/google/common/collect/Multiset.html" title="interface in com.google.common.collect" target="classFrame"><I>Multiset</I></A>
-<BR>
-<A HREF="com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect" target="classFrame"><I>Multiset.Entry</I></A>
-<BR>
-<A HREF="com/google/common/collect/Multisets.html" title="class in com.google.common.collect" target="classFrame">Multisets</A>
-<BR>
-<A HREF="com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect" target="classFrame">MutableClassToInstanceMap</A>
-<BR>
-<A HREF="com/google/common/util/concurrent/NamingThreadFactory.html" title="class in com.google.common.util.concurrent" target="classFrame">NamingThreadFactory</A>
-<BR>
-<A HREF="com/google/common/io/NullOutputStream.html" title="class in com.google.common.io" target="classFrame">NullOutputStream</A>
-<BR>
-<A HREF="com/google/common/collect/ObjectArrays.html" title="class in com.google.common.collect" target="classFrame">ObjectArrays</A>
-<BR>
-<A HREF="com/google/common/base/Objects.html" title="class in com.google.common.base" target="classFrame">Objects</A>
-<BR>
-<A HREF="com/google/common/base/Objects.ToStringHelper.html" title="class in com.google.common.base" target="classFrame">Objects.ToStringHelper</A>
-<BR>
-<A HREF="com/google/common/collect/Ordering.html" title="class in com.google.common.collect" target="classFrame">Ordering</A>
-<BR>
-<A HREF="com/google/common/io/OutputSupplier.html" title="interface in com.google.common.io" target="classFrame"><I>OutputSupplier</I></A>
-<BR>
-<A HREF="com/google/common/io/PatternFilenameFilter.html" title="class in com.google.common.io" target="classFrame">PatternFilenameFilter</A>
-<BR>
-<A HREF="com/google/common/collect/PeekingIterator.html" title="interface in com.google.common.collect" target="classFrame"><I>PeekingIterator</I></A>
-<BR>
-<A HREF="com/google/common/base/Preconditions.html" title="class in com.google.common.base" target="classFrame">Preconditions</A>
-<BR>
-<A HREF="com/google/common/base/Predicate.html" title="interface in com.google.common.base" target="classFrame"><I>Predicate</I></A>
-<BR>
-<A HREF="com/google/common/base/Predicates.html" title="class in com.google.common.base" target="classFrame">Predicates</A>
-<BR>
-<A HREF="com/google/common/primitives/Primitives.html" title="class in com.google.common.primitives" target="classFrame">Primitives</A>
-<BR>
-<A HREF="com/google/common/io/Resources.html" title="class in com.google.common.io" target="classFrame">Resources</A>
-<BR>
-<A HREF="com/google/common/base/Service.html" title="interface in com.google.common.base" target="classFrame"><I>Service</I></A>
-<BR>
-<A HREF="com/google/common/base/Service.State.html" title="enum in com.google.common.base" target="classFrame">Service.State</A>
-<BR>
-<A HREF="com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect" target="classFrame"><I>SetMultimap</I></A>
-<BR>
-<A HREF="com/google/common/collect/Sets.html" title="class in com.google.common.collect" target="classFrame">Sets</A>
-<BR>
-<A HREF="com/google/common/collect/Sets.SetView.html" title="class in com.google.common.collect" target="classFrame">Sets.SetView</A>
-<BR>
-<A HREF="com/google/common/primitives/Shorts.html" title="class in com.google.common.primitives" target="classFrame">Shorts</A>
-<BR>
-<A HREF="com/google/common/primitives/SignedBytes.html" title="class in com.google.common.primitives" target="classFrame">SignedBytes</A>
-<BR>
-<A HREF="com/google/common/util/concurrent/SimpleTimeLimiter.html" title="class in com.google.common.util.concurrent" target="classFrame">SimpleTimeLimiter</A>
-<BR>
-<A HREF="com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect" target="classFrame"><I>SortedSetMultimap</I></A>
-<BR>
-<A HREF="com/google/common/base/Splitter.html" title="class in com.google.common.base" target="classFrame">Splitter</A>
-<BR>
-<A HREF="com/google/common/base/Supplier.html" title="interface in com.google.common.base" target="classFrame"><I>Supplier</I></A>
-<BR>
-<A HREF="com/google/common/base/Suppliers.html" title="class in com.google.common.base" target="classFrame">Suppliers</A>
-<BR>
-<A HREF="com/google/common/base/Throwables.html" title="class in com.google.common.base" target="classFrame">Throwables</A>
-<BR>
-<A HREF="com/google/common/util/concurrent/TimeLimiter.html" title="interface in com.google.common.util.concurrent" target="classFrame"><I>TimeLimiter</I></A>
-<BR>
-<A HREF="com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect" target="classFrame">TreeMultimap</A>
-<BR>
-<A HREF="com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect" target="classFrame">TreeMultiset</A>
-<BR>
-<A HREF="com/google/common/util/concurrent/UncheckedTimeoutException.html" title="class in com.google.common.util.concurrent" target="classFrame">UncheckedTimeoutException</A>
-<BR>
-<A HREF="com/google/common/util/concurrent/UninterruptibleFuture.html" title="interface in com.google.common.util.concurrent" target="classFrame"><I>UninterruptibleFuture</I></A>
-<BR>
-<A HREF="com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect" target="classFrame">UnmodifiableIterator</A>
-<BR>
-<A HREF="com/google/common/primitives/UnsignedBytes.html" title="class in com.google.common.primitives" target="classFrame">UnsignedBytes</A>
-<BR>
-<A HREF="com/google/common/util/concurrent/ValueFuture.html" title="class in com.google.common.util.concurrent" target="classFrame">ValueFuture</A>
-<BR>
-<A HREF="com/google/common/annotations/VisibleForTesting.html" title="annotation in com.google.common.annotations" target="classFrame">VisibleForTesting</A>
-<BR>
-</FONT></TD>
-</TR>
-</TABLE>
-
-</BODY>
-</HTML>
diff --git a/javadoc/allclasses-noframe.html b/javadoc/allclasses-noframe.html
deleted file mode 100644
index b66bac2..0000000
--- a/javadoc/allclasses-noframe.html
+++ /dev/null
@@ -1,349 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-All Classes (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
-
-
-</HEAD>
-
-<BODY BGCOLOR="white">
-<FONT size="+1" CLASS="FrameHeadingFont">
-<B>All Classes</B></FONT>
-<BR>
-
-<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
-<TR>
-<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="com/google/common/util/concurrent/AbstractCheckedFuture.html" title="class in com.google.common.util.concurrent">AbstractCheckedFuture</A>
-<BR>
-<A HREF="com/google/common/util/concurrent/AbstractExecutionThreadService.html" title="class in com.google.common.util.concurrent">AbstractExecutionThreadService</A>
-<BR>
-<A HREF="com/google/common/util/concurrent/AbstractFuture.html" title="class in com.google.common.util.concurrent">AbstractFuture</A>
-<BR>
-<A HREF="com/google/common/util/concurrent/AbstractIdleService.html" title="class in com.google.common.util.concurrent">AbstractIdleService</A>
-<BR>
-<A HREF="com/google/common/collect/AbstractIterator.html" title="class in com.google.common.collect">AbstractIterator</A>
-<BR>
-<A HREF="com/google/common/util/concurrent/AbstractListenableFuture.html" title="class in com.google.common.util.concurrent">AbstractListenableFuture</A>
-<BR>
-<A HREF="com/google/common/util/concurrent/AbstractService.html" title="class in com.google.common.util.concurrent">AbstractService</A>
-<BR>
-<A HREF="com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect">ArrayListMultimap</A>
-<BR>
-<A HREF="com/google/common/collect/AsynchronousComputationException.html" title="class in com.google.common.collect">AsynchronousComputationException</A>
-<BR>
-<A HREF="com/google/common/collect/BiMap.html" title="interface in com.google.common.collect"><I>BiMap</I></A>
-<BR>
-<A HREF="com/google/common/primitives/Booleans.html" title="class in com.google.common.primitives">Booleans</A>
-<BR>
-<A HREF="com/google/common/io/ByteArrayDataInput.html" title="interface in com.google.common.io"><I>ByteArrayDataInput</I></A>
-<BR>
-<A HREF="com/google/common/io/ByteArrayDataOutput.html" title="interface in com.google.common.io"><I>ByteArrayDataOutput</I></A>
-<BR>
-<A HREF="com/google/common/io/ByteProcessor.html" title="interface in com.google.common.io"><I>ByteProcessor</I></A>
-<BR>
-<A HREF="com/google/common/primitives/Bytes.html" title="class in com.google.common.primitives">Bytes</A>
-<BR>
-<A HREF="com/google/common/io/ByteStreams.html" title="class in com.google.common.io">ByteStreams</A>
-<BR>
-<A HREF="com/google/common/util/concurrent/Callables.html" title="class in com.google.common.util.concurrent">Callables</A>
-<BR>
-<A HREF="com/google/common/base/CaseFormat.html" title="enum in com.google.common.base">CaseFormat</A>
-<BR>
-<A HREF="com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>
-<BR>
-<A HREF="com/google/common/base/CharMatcher.LookupTable.html" title="class in com.google.common.base">CharMatcher.LookupTable</A>
-<BR>
-<A HREF="com/google/common/primitives/Chars.html" title="class in com.google.common.primitives">Chars</A>
-<BR>
-<A HREF="com/google/common/base/Charsets.html" title="class in com.google.common.base">Charsets</A>
-<BR>
-<A HREF="com/google/common/io/CharStreams.html" title="class in com.google.common.io">CharStreams</A>
-<BR>
-<A HREF="com/google/common/util/concurrent/CheckedFuture.html" title="interface in com.google.common.util.concurrent"><I>CheckedFuture</I></A>
-<BR>
-<A HREF="com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect"><I>ClassToInstanceMap</I></A>
-<BR>
-<A HREF="com/google/common/io/Closeables.html" title="class in com.google.common.io">Closeables</A>
-<BR>
-<A HREF="com/google/common/collect/Collections2.html" title="class in com.google.common.collect">Collections2</A>
-<BR>
-<A HREF="com/google/common/collect/ComparisonChain.html" title="class in com.google.common.collect">ComparisonChain</A>
-<BR>
-<A HREF="com/google/common/collect/ComputationException.html" title="class in com.google.common.collect">ComputationException</A>
-<BR>
-<A HREF="com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect">ConcurrentHashMultiset</A>
-<BR>
-<A HREF="com/google/common/io/CountingInputStream.html" title="class in com.google.common.io">CountingInputStream</A>
-<BR>
-<A HREF="com/google/common/io/CountingOutputStream.html" title="class in com.google.common.io">CountingOutputStream</A>
-<BR>
-<A HREF="com/google/common/util/concurrent/DaemonThreadFactory.html" title="class in com.google.common.util.concurrent">DaemonThreadFactory</A>
-<BR>
-<A HREF="com/google/common/base/Defaults.html" title="class in com.google.common.base">Defaults</A>
-<BR>
-<A HREF="com/google/common/primitives/Doubles.html" title="class in com.google.common.primitives">Doubles</A>
-<BR>
-<A HREF="com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect">EnumBiMap</A>
-<BR>
-<A HREF="com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect">EnumHashBiMap</A>
-<BR>
-<A HREF="com/google/common/collect/EnumMultiset.html" title="class in com.google.common.collect">EnumMultiset</A>
-<BR>
-<A HREF="com/google/common/util/concurrent/ExecutionList.html" title="class in com.google.common.util.concurrent">ExecutionList</A>
-<BR>
-<A HREF="com/google/common/util/concurrent/Executors.html" title="class in com.google.common.util.concurrent">Executors</A>
-<BR>
-<A HREF="com/google/common/util/concurrent/FakeTimeLimiter.html" title="class in com.google.common.util.concurrent">FakeTimeLimiter</A>
-<BR>
-<A HREF="com/google/common/io/FileBackedOutputStream.html" title="class in com.google.common.io">FileBackedOutputStream</A>
-<BR>
-<A HREF="com/google/common/io/Files.html" title="class in com.google.common.io">Files</A>
-<BR>
-<A HREF="com/google/common/base/FinalizablePhantomReference.html" title="class in com.google.common.base">FinalizablePhantomReference</A>
-<BR>
-<A HREF="com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base"><I>FinalizableReference</I></A>
-<BR>
-<A HREF="com/google/common/base/FinalizableReferenceQueue.html" title="class in com.google.common.base">FinalizableReferenceQueue</A>
-<BR>
-<A HREF="com/google/common/base/FinalizableSoftReference.html" title="class in com.google.common.base">FinalizableSoftReference</A>
-<BR>
-<A HREF="com/google/common/base/FinalizableWeakReference.html" title="class in com.google.common.base">FinalizableWeakReference</A>
-<BR>
-<A HREF="com/google/common/primitives/Floats.html" title="class in com.google.common.primitives">Floats</A>
-<BR>
-<A HREF="com/google/common/io/Flushables.html" title="class in com.google.common.io">Flushables</A>
-<BR>
-<A HREF="com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A>
-<BR>
-<A HREF="com/google/common/collect/ForwardingConcurrentMap.html" title="class in com.google.common.collect">ForwardingConcurrentMap</A>
-<BR>
-<A HREF="com/google/common/util/concurrent/ForwardingFuture.html" title="class in com.google.common.util.concurrent">ForwardingFuture</A>
-<BR>
-<A HREF="com/google/common/collect/ForwardingIterator.html" title="class in com.google.common.collect">ForwardingIterator</A>
-<BR>
-<A HREF="com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect">ForwardingList</A>
-<BR>
-<A HREF="com/google/common/collect/ForwardingListIterator.html" title="class in com.google.common.collect">ForwardingListIterator</A>
-<BR>
-<A HREF="com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>
-<BR>
-<A HREF="com/google/common/collect/ForwardingMapEntry.html" title="class in com.google.common.collect">ForwardingMapEntry</A>
-<BR>
-<A HREF="com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect">ForwardingMultimap</A>
-<BR>
-<A HREF="com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect">ForwardingMultiset</A>
-<BR>
-<A HREF="com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A>
-<BR>
-<A HREF="com/google/common/collect/ForwardingQueue.html" title="class in com.google.common.collect">ForwardingQueue</A>
-<BR>
-<A HREF="com/google/common/util/concurrent/ForwardingService.html" title="class in com.google.common.util.concurrent">ForwardingService</A>
-<BR>
-<A HREF="com/google/common/collect/ForwardingSet.html" title="class in com.google.common.collect">ForwardingSet</A>
-<BR>
-<A HREF="com/google/common/collect/ForwardingSortedMap.html" title="class in com.google.common.collect">ForwardingSortedMap</A>
-<BR>
-<A HREF="com/google/common/collect/ForwardingSortedSet.html" title="class in com.google.common.collect">ForwardingSortedSet</A>
-<BR>
-<A HREF="com/google/common/base/Function.html" title="interface in com.google.common.base"><I>Function</I></A>
-<BR>
-<A HREF="com/google/common/base/Functions.html" title="class in com.google.common.base">Functions</A>
-<BR>
-<A HREF="com/google/common/util/concurrent/Futures.html" title="class in com.google.common.util.concurrent">Futures</A>
-<BR>
-<A HREF="com/google/common/annotations/GwtCompatible.html" title="annotation in com.google.common.annotations">GwtCompatible</A>
-<BR>
-<A HREF="com/google/common/annotations/GwtIncompatible.html" title="annotation in com.google.common.annotations">GwtIncompatible</A>
-<BR>
-<A HREF="com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect">HashBiMap</A>
-<BR>
-<A HREF="com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect">HashMultimap</A>
-<BR>
-<A HREF="com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect">HashMultiset</A>
-<BR>
-<A HREF="com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>
-<BR>
-<A HREF="com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect">ImmutableBiMap.Builder</A>
-<BR>
-<A HREF="com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap</A>
-<BR>
-<A HREF="com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap.Builder</A>
-<BR>
-<A HREF="com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>
-<BR>
-<A HREF="com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>
-<BR>
-<A HREF="com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect">ImmutableList.Builder</A>
-<BR>
-<A HREF="com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>
-<BR>
-<A HREF="com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder</A>
-<BR>
-<A HREF="com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>
-<BR>
-<A HREF="com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">ImmutableMap.Builder</A>
-<BR>
-<A HREF="com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
-<BR>
-<A HREF="com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>
-<BR>
-<A HREF="com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>
-<BR>
-<A HREF="com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>
-<BR>
-<A HREF="com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>
-<BR>
-<A HREF="com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A>
-<BR>
-<A HREF="com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>
-<BR>
-<A HREF="com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder</A>
-<BR>
-<A HREF="com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>
-<BR>
-<A HREF="com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect">ImmutableSortedMap.Builder</A>
-<BR>
-<A HREF="com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>
-<BR>
-<A HREF="com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>
-<BR>
-<A HREF="com/google/common/io/InputSupplier.html" title="interface in com.google.common.io"><I>InputSupplier</I></A>
-<BR>
-<A HREF="com/google/common/primitives/Ints.html" title="class in com.google.common.primitives">Ints</A>
-<BR>
-<A HREF="com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
-<BR>
-<A HREF="com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
-<BR>
-<A HREF="com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A>
-<BR>
-<A HREF="com/google/common/base/Joiner.MapJoiner.html" title="class in com.google.common.base">Joiner.MapJoiner</A>
-<BR>
-<A HREF="com/google/common/io/LimitInputStream.html" title="class in com.google.common.io">LimitInputStream</A>
-<BR>
-<A HREF="com/google/common/io/LineProcessor.html" title="interface in com.google.common.io"><I>LineProcessor</I></A>
-<BR>
-<A HREF="com/google/common/io/LineReader.html" title="class in com.google.common.io">LineReader</A>
-<BR>
-<A HREF="com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect">LinkedHashMultimap</A>
-<BR>
-<A HREF="com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect">LinkedHashMultiset</A>
-<BR>
-<A HREF="com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>
-<BR>
-<A HREF="com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent"><I>ListenableFuture</I></A>
-<BR>
-<A HREF="com/google/common/util/concurrent/ListenableFutureTask.html" title="class in com.google.common.util.concurrent">ListenableFutureTask</A>
-<BR>
-<A HREF="com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect"><I>ListMultimap</I></A>
-<BR>
-<A HREF="com/google/common/collect/Lists.html" title="class in com.google.common.collect">Lists</A>
-<BR>
-<A HREF="com/google/common/primitives/Longs.html" title="class in com.google.common.primitives">Longs</A>
-<BR>
-<A HREF="com/google/common/collect/MapDifference.html" title="interface in com.google.common.collect"><I>MapDifference</I></A>
-<BR>
-<A HREF="com/google/common/collect/MapDifference.ValueDifference.html" title="interface in com.google.common.collect"><I>MapDifference.ValueDifference</I></A>
-<BR>
-<A HREF="com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A>
-<BR>
-<A HREF="com/google/common/collect/Maps.html" title="class in com.google.common.collect">Maps</A>
-<BR>
-<A HREF="com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><I>Multimap</I></A>
-<BR>
-<A HREF="com/google/common/collect/Multimaps.html" title="class in com.google.common.collect">Multimaps</A>
-<BR>
-<A HREF="com/google/common/collect/Multiset.html" title="interface in com.google.common.collect"><I>Multiset</I></A>
-<BR>
-<A HREF="com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect"><I>Multiset.Entry</I></A>
-<BR>
-<A HREF="com/google/common/collect/Multisets.html" title="class in com.google.common.collect">Multisets</A>
-<BR>
-<A HREF="com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect">MutableClassToInstanceMap</A>
-<BR>
-<A HREF="com/google/common/util/concurrent/NamingThreadFactory.html" title="class in com.google.common.util.concurrent">NamingThreadFactory</A>
-<BR>
-<A HREF="com/google/common/io/NullOutputStream.html" title="class in com.google.common.io">NullOutputStream</A>
-<BR>
-<A HREF="com/google/common/collect/ObjectArrays.html" title="class in com.google.common.collect">ObjectArrays</A>
-<BR>
-<A HREF="com/google/common/base/Objects.html" title="class in com.google.common.base">Objects</A>
-<BR>
-<A HREF="com/google/common/base/Objects.ToStringHelper.html" title="class in com.google.common.base">Objects.ToStringHelper</A>
-<BR>
-<A HREF="com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>
-<BR>
-<A HREF="com/google/common/io/OutputSupplier.html" title="interface in com.google.common.io"><I>OutputSupplier</I></A>
-<BR>
-<A HREF="com/google/common/io/PatternFilenameFilter.html" title="class in com.google.common.io">PatternFilenameFilter</A>
-<BR>
-<A HREF="com/google/common/collect/PeekingIterator.html" title="interface in com.google.common.collect"><I>PeekingIterator</I></A>
-<BR>
-<A HREF="com/google/common/base/Preconditions.html" title="class in com.google.common.base">Preconditions</A>
-<BR>
-<A HREF="com/google/common/base/Predicate.html" title="interface in com.google.common.base"><I>Predicate</I></A>
-<BR>
-<A HREF="com/google/common/base/Predicates.html" title="class in com.google.common.base">Predicates</A>
-<BR>
-<A HREF="com/google/common/primitives/Primitives.html" title="class in com.google.common.primitives">Primitives</A>
-<BR>
-<A HREF="com/google/common/io/Resources.html" title="class in com.google.common.io">Resources</A>
-<BR>
-<A HREF="com/google/common/base/Service.html" title="interface in com.google.common.base"><I>Service</I></A>
-<BR>
-<A HREF="com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A>
-<BR>
-<A HREF="com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect"><I>SetMultimap</I></A>
-<BR>
-<A HREF="com/google/common/collect/Sets.html" title="class in com.google.common.collect">Sets</A>
-<BR>
-<A HREF="com/google/common/collect/Sets.SetView.html" title="class in com.google.common.collect">Sets.SetView</A>
-<BR>
-<A HREF="com/google/common/primitives/Shorts.html" title="class in com.google.common.primitives">Shorts</A>
-<BR>
-<A HREF="com/google/common/primitives/SignedBytes.html" title="class in com.google.common.primitives">SignedBytes</A>
-<BR>
-<A HREF="com/google/common/util/concurrent/SimpleTimeLimiter.html" title="class in com.google.common.util.concurrent">SimpleTimeLimiter</A>
-<BR>
-<A HREF="com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect"><I>SortedSetMultimap</I></A>
-<BR>
-<A HREF="com/google/common/base/Splitter.html" title="class in com.google.common.base">Splitter</A>
-<BR>
-<A HREF="com/google/common/base/Supplier.html" title="interface in com.google.common.base"><I>Supplier</I></A>
-<BR>
-<A HREF="com/google/common/base/Suppliers.html" title="class in com.google.common.base">Suppliers</A>
-<BR>
-<A HREF="com/google/common/base/Throwables.html" title="class in com.google.common.base">Throwables</A>
-<BR>
-<A HREF="com/google/common/util/concurrent/TimeLimiter.html" title="interface in com.google.common.util.concurrent"><I>TimeLimiter</I></A>
-<BR>
-<A HREF="com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">TreeMultimap</A>
-<BR>
-<A HREF="com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect">TreeMultiset</A>
-<BR>
-<A HREF="com/google/common/util/concurrent/UncheckedTimeoutException.html" title="class in com.google.common.util.concurrent">UncheckedTimeoutException</A>
-<BR>
-<A HREF="com/google/common/util/concurrent/UninterruptibleFuture.html" title="interface in com.google.common.util.concurrent"><I>UninterruptibleFuture</I></A>
-<BR>
-<A HREF="com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>
-<BR>
-<A HREF="com/google/common/primitives/UnsignedBytes.html" title="class in com.google.common.primitives">UnsignedBytes</A>
-<BR>
-<A HREF="com/google/common/util/concurrent/ValueFuture.html" title="class in com.google.common.util.concurrent">ValueFuture</A>
-<BR>
-<A HREF="com/google/common/annotations/VisibleForTesting.html" title="annotation in com.google.common.annotations">VisibleForTesting</A>
-<BR>
-</FONT></TD>
-</TR>
-</TABLE>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/annotations/GwtCompatible.html b/javadoc/com/google/common/annotations/GwtCompatible.html
deleted file mode 100644
index ed0f980..0000000
--- a/javadoc/com/google/common/annotations/GwtCompatible.html
+++ /dev/null
@@ -1,274 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:56 PST 2010 -->
-<TITLE>
-GwtCompatible (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="GwtCompatible (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/GwtCompatible.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV CLASS&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/annotations/GwtIncompatible.html" title="annotation in com.google.common.annotations"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/annotations/GwtCompatible.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="GwtCompatible.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;REQUIRED&nbsp;|&nbsp;<A HREF="#annotation_type_optional_element_summary">OPTIONAL</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;<A HREF="#annotation_type_element_detail">ELEMENT</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.annotations</FONT>
-<BR>
-Annotation Type GwtCompatible</H2>
-<HR>
-<DL>
-<DT><PRE><FONT SIZE="-1"><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/annotation/Retention.html?is-external=true" title="class or interface in java.lang.annotation">@Retention</A>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/annotation/Retention.html?is-external=true#value()" title="class or interface in java.lang.annotation">value</A>=<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/annotation/RetentionPolicy.html?is-external=true#CLASS" title="class or interface in java.lang.annotation">CLASS</A>)
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/annotation/Target.html?is-external=true" title="class or interface in java.lang.annotation">@Target</A>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/annotation/Target.html?is-external=true#value()" title="class or interface in java.lang.annotation">value</A>={<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/annotation/ElementType.html?is-external=true#TYPE" title="class or interface in java.lang.annotation">TYPE</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/annotation/ElementType.html?is-external=true#METHOD" title="class or interface in java.lang.annotation">METHOD</A>})
-</FONT>public @interface <B>GwtCompatible</B></DL>
-</PRE>
-
-<P>
-The presence of this annotation on a type indicates that the type may be
- used with the
- <a href="http://code.google.com/webtoolkit/">Google Web Toolkit</a> (GWT).
- When applied to a method, the return type of the method is GWT compatible.
- It's useful to indicate that an instance created by factory methods has a GWT
- serializable type.  In the following example,
-
- <pre style="code">
- @GwtCompatible
- class Lists {
-   ...
-   @GwtCompatible(serializable = true)
-   static &lt;E> List&lt;E> newArrayList(E... elements) {
-     ...
-   }
- }
- </pre>
- The return value of <code>Lists.newArrayList(E[])</code> has GWT
- serializable type.  It is also useful in specifying contracts of interface
- methods.  In the following example,
-
- <pre style="code">
- @GwtCompatible
- interface ListFactory {
-   ...
-   @GwtCompatible(serializable = true)
-   &lt;E> List&lt;E> newArrayList(E... elements);
- }
- </pre>
- The <code>newArrayList(E[])</code> method of all implementations of <code>ListFactory</code> is expected to return a value with a GWT serializable type.
-
- <p>Note that a <code>GwtCompatible</code> type may have some <A HREF="../../../../com/google/common/annotations/GwtIncompatible.html" title="annotation in com.google.common.annotations"><CODE>GwtIncompatible</CODE></A> methods.
-<P>
-
-<P>
-<DL>
-<DT><B>Author:</B></DT>
-  <DD>Charles Fry, Hayward Chan</DD>
-</DL>
-<HR>
-
-<P>
-<!-- =========== ANNOTATION TYPE OPTIONAL MEMBER SUMMARY =========== -->
-
-<A NAME="annotation_type_optional_element_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Optional Element Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/annotations/GwtCompatible.html#emulated()">emulated</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;When <code>true</code>, the annotated type is emulated in GWT.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/annotations/GwtCompatible.html#serializable()">serializable</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;When <code>true</code>, the annotated type or the type of the method return
- value is GWT serializable.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="serializable()"><!-- --></A><H3>
-serializable</H3>
-<PRE>
-public abstract boolean <B>serializable</B></PRE>
-<DL>
-<DD>When <code>true</code>, the annotated type or the type of the method return
- value is GWT serializable.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>See Also:</B><DD><a href="http://code.google.com/docreader/#p=google-web-toolkit-doc-1-5&t=DevGuideSerializableTypes">
-     Documentation about GWT serialization</a></DL>
-<DL>
-<DT><B>Default:</B><DD>false</DD>
-</DL>
-</DL>
-<HR>
-
-<A NAME="emulated()"><!-- --></A><H3>
-emulated</H3>
-<PRE>
-public abstract boolean <B>emulated</B></PRE>
-<DL>
-<DD>When <code>true</code>, the annotated type is emulated in GWT. The emulated
- source (also known as super-source) is different from the implementation
- used by the JVM.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>See Also:</B><DD><a href="http://code.google.com/docreader/#p=google-web-toolkit-doc-1-5&t=DevGuideModuleXml">
-     Documentation about GWT emulated source</a></DL>
-<DL>
-<DT><B>Default:</B><DD>false</DD>
-</DL>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/GwtCompatible.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV CLASS&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/annotations/GwtIncompatible.html" title="annotation in com.google.common.annotations"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/annotations/GwtCompatible.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="GwtCompatible.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;REQUIRED&nbsp;|&nbsp;<A HREF="#annotation_type_optional_element_summary">OPTIONAL</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;<A HREF="#annotation_type_element_detail">ELEMENT</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/annotations/GwtIncompatible.html b/javadoc/com/google/common/annotations/GwtIncompatible.html
deleted file mode 100644
index 1215703..0000000
--- a/javadoc/com/google/common/annotations/GwtIncompatible.html
+++ /dev/null
@@ -1,230 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:56 PST 2010 -->
-<TITLE>
-GwtIncompatible (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="GwtIncompatible (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/GwtIncompatible.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/annotations/GwtCompatible.html" title="annotation in com.google.common.annotations"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/annotations/VisibleForTesting.html" title="annotation in com.google.common.annotations"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/annotations/GwtIncompatible.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="GwtIncompatible.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;<A HREF="#annotation_type_required_element_summary">REQUIRED</A>&nbsp;|&nbsp;OPTIONAL</FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;<A HREF="#annotation_type_element_detail">ELEMENT</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.annotations</FONT>
-<BR>
-Annotation Type GwtIncompatible</H2>
-<HR>
-<DL>
-<DT><PRE><FONT SIZE="-1"><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/annotation/Retention.html?is-external=true" title="class or interface in java.lang.annotation">@Retention</A>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/annotation/Retention.html?is-external=true#value()" title="class or interface in java.lang.annotation">value</A>=<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/annotation/RetentionPolicy.html?is-external=true#CLASS" title="class or interface in java.lang.annotation">CLASS</A>)
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/annotation/Target.html?is-external=true" title="class or interface in java.lang.annotation">@Target</A>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/annotation/Target.html?is-external=true#value()" title="class or interface in java.lang.annotation">value</A>=<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/annotation/ElementType.html?is-external=true#METHOD" title="class or interface in java.lang.annotation">METHOD</A>)
-</FONT>public @interface <B>GwtIncompatible</B></DL>
-</PRE>
-
-<P>
-The presence of this annotation on a method indicates that the method may
- <em>not</em> be used with the
- <a href="http://code.google.com/webtoolkit/">Google Web Toolkit</a> (GWT),
- even though its type is annotated as <A HREF="../../../../com/google/common/annotations/GwtCompatible.html" title="annotation in com.google.common.annotations"><CODE>GwtCompatible</CODE></A> and accessible in
- GWT.  They can cause GWT compilation errors or simply unexpected exceptions
- when used in GWT.
-
- <p>Note that this annotation should only be applied to methods of types which
- are annotated as <A HREF="../../../../com/google/common/annotations/GwtCompatible.html" title="annotation in com.google.common.annotations"><CODE>GwtCompatible</CODE></A>.
-<P>
-
-<P>
-<DL>
-<DT><B>Author:</B></DT>
-  <DD>Charles Fry</DD>
-</DL>
-<HR>
-
-<P>
-<!-- =========== ANNOTATION TYPE REQUIRED MEMBER SUMMARY =========== -->
-
-<A NAME="annotation_type_required_element_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Required Element Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/annotations/GwtIncompatible.html#value()">value</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Describes why the annotated element is incompatible with GWT.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ ANNOTATION TYPE MEMBER DETAIL =========== -->
-
-<A NAME="annotation_type_element_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Element Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="value()"><!-- --></A><H3>
-value</H3>
-<PRE>
-public abstract <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>value</B></PRE>
-<DL>
-<DD>Describes why the annotated element is incompatible with GWT. Since this is
- generally due to a dependence on a type/method which GWT doesn't support,
- it is sufficient to simply reference the unsupported type/method. E.g.
- "Class.isInstance".
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/GwtIncompatible.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/annotations/GwtCompatible.html" title="annotation in com.google.common.annotations"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/annotations/VisibleForTesting.html" title="annotation in com.google.common.annotations"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/annotations/GwtIncompatible.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="GwtIncompatible.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;<A HREF="#annotation_type_required_element_summary">REQUIRED</A>&nbsp;|&nbsp;OPTIONAL</FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;<A HREF="#annotation_type_element_detail">ELEMENT</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/annotations/VisibleForTesting.html b/javadoc/com/google/common/annotations/VisibleForTesting.html
deleted file mode 100644
index c108c21..0000000
--- a/javadoc/com/google/common/annotations/VisibleForTesting.html
+++ /dev/null
@@ -1,176 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:56 PST 2010 -->
-<TITLE>
-VisibleForTesting (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="VisibleForTesting (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/VisibleForTesting.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/annotations/GwtIncompatible.html" title="annotation in com.google.common.annotations"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;NEXT CLASS</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/annotations/VisibleForTesting.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="VisibleForTesting.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;REQUIRED&nbsp;|&nbsp;OPTIONAL</FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;ELEMENT</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.annotations</FONT>
-<BR>
-Annotation Type VisibleForTesting</H2>
-<HR>
-<DL>
-<DT><PRE>public @interface <B>VisibleForTesting</B></DL>
-</PRE>
-
-<P>
-An annotation that indicates that the visibility of a type or member has
- been relaxed to make the code testable.
-<P>
-
-<P>
-<DL>
-<DT><B>Author:</B></DT>
-  <DD>Johannes Henkel</DD>
-</DL>
-
-<P>
-
-<P>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/VisibleForTesting.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/annotations/GwtIncompatible.html" title="annotation in com.google.common.annotations"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;NEXT CLASS</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/annotations/VisibleForTesting.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="VisibleForTesting.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;REQUIRED&nbsp;|&nbsp;OPTIONAL</FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;ELEMENT</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/annotations/class-use/GwtCompatible.html b/javadoc/com/google/common/annotations/class-use/GwtCompatible.html
deleted file mode 100644
index 6a0284e..0000000
--- a/javadoc/com/google/common/annotations/class-use/GwtCompatible.html
+++ /dev/null
@@ -1,1332 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.annotations.GwtCompatible (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.annotations.GwtCompatible (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/annotations/GwtCompatible.html" title="annotation in com.google.common.annotations"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/annotations//class-useGwtCompatible.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="GwtCompatible.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.annotations.GwtCompatible</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/annotations/GwtCompatible.html" title="annotation in com.google.common.annotations">GwtCompatible</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.annotations"><B>com.google.common.annotations</B></A></TD>
-<TD>&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.base"><B>com.google.common.base</B></A></TD>
-<TD>Miscellaneous common util classes and annotations.&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.primitives"><B>com.google.common.primitives</B></A></TD>
-<TD>&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.annotations"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/annotations/GwtCompatible.html" title="annotation in com.google.common.annotations">GwtCompatible</A> in <A HREF="../../../../../com/google/common/annotations/package-summary.html">com.google.common.annotations</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Classes in <A HREF="../../../../../com/google/common/annotations/package-summary.html">com.google.common.annotations</A> with annotations of type <A HREF="../../../../../com/google/common/annotations/GwtCompatible.html" title="annotation in com.google.common.annotations">GwtCompatible</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;interface</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/annotations/GwtCompatible.html" title="annotation in com.google.common.annotations">GwtCompatible</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The presence of this annotation on a type indicates that the type may be
- used with the
- <a href="http://code.google.com/webtoolkit/">Google Web Toolkit</a> (GWT).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;interface</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/annotations/GwtIncompatible.html" title="annotation in com.google.common.annotations">GwtIncompatible</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The presence of this annotation on a method indicates that the method may
- <em>not</em> be used with the
- <a href="http://code.google.com/webtoolkit/">Google Web Toolkit</a> (GWT),
- even though its type is annotated as <A HREF="../../../../../com/google/common/annotations/GwtCompatible.html" title="annotation in com.google.common.annotations"><CODE>GwtCompatible</CODE></A> and accessible in
- GWT.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;interface</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/annotations/VisibleForTesting.html" title="annotation in com.google.common.annotations">VisibleForTesting</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An annotation that indicates that the visibility of a type or member has
- been relaxed to make the code testable.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.base"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/annotations/GwtCompatible.html" title="annotation in com.google.common.annotations">GwtCompatible</A> in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Classes in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A> with annotations of type <A HREF="../../../../../com/google/common/annotations/GwtCompatible.html" title="annotation in com.google.common.annotations">GwtCompatible</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Determines a true or false value for any Java <code>char</code> value, just as
- <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base"><CODE>Predicate</CODE></A> does for any <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang"><CODE>Object</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;interface</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function&lt;F,T&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A transformation from one object to another.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/base/Functions.html" title="class in com.google.common.base">Functions</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Useful functions.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An object which joins pieces of text (specified as an array, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang"><CODE>Iterable</CODE></A>, varargs or even a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A>) with a separator.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/base/Objects.html" title="class in com.google.common.base">Objects</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Helper functions that can operate on any <code>Object</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/base/Preconditions.html" title="class in com.google.common.base">Preconditions</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Simple static methods to be called at the start of your own methods to verify
- correct arguments and state.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;interface</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate&lt;T&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Determines a true or false value for a given input.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/base/Predicates.html" title="class in com.google.common.base">Predicates</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Contains static factory methods for creating <code>Predicate</code> instances.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;interface</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier&lt;T&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A class that can supply objects of a single type.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A> with annotations of type <A HREF="../../../../../com/google/common/annotations/GwtCompatible.html" title="annotation in com.google.common.annotations">GwtCompatible</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Predicates.</B><B><A HREF="../../../../../com/google/common/base/Predicates.html#alwaysFalse()">alwaysFalse</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that always evaluates to <code>false</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Predicates.</B><B><A HREF="../../../../../com/google/common/base/Predicates.html#alwaysTrue()">alwaysTrue</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that always evaluates to <code>true</code>.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/annotations/GwtCompatible.html" title="annotation in com.google.common.annotations">GwtCompatible</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Classes in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> with annotations of type <A HREF="../../../../../com/google/common/annotations/GwtCompatible.html" title="annotation in com.google.common.annotations">GwtCompatible</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/AbstractIterator.html" title="class in com.google.common.collect">AbstractIterator&lt;T&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This class provides a skeletal implementation of the <code>Iterator</code>
- interface, to make this interface easier to implement for certain types of
- data sources.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect">ArrayListMultimap&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Implementation of <code>Multimap</code> that uses an <code>ArrayList</code> to store
- the values for a given key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;interface</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A bimap (or "bidirectional map") is a map that preserves the uniqueness of
- its values as well as that of its keys.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;interface</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect">ClassToInstanceMap&lt;B&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A map, each entry of which maps a Java
- <a href="http://tinyurl.com/2cmwkz">raw type</a> to an instance of that type.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/Collections2.html" title="class in com.google.common.collect">Collections2</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Provides static methods for working with <code>Collection</code> instances.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ComputationException.html" title="class in com.google.common.collect">ComputationException</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Wraps an exception that occured during a computation.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/EnumMultiset.html" title="class in com.google.common.collect">EnumMultiset&lt;E extends Enum&lt;E&gt;&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Multiset implementation backed by an <A HREF="http://java.sun.com/javase/6/docs/api/java/util/EnumMap.html?is-external=true" title="class or interface in java.util"><CODE>EnumMap</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection&lt;E&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A collection which forwards all its method calls to another collection.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="class in com.google.common.collect">ForwardingConcurrentMap&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A concurrent map which forwards all its method calls to another concurrent
- map.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingIterator.html" title="class in com.google.common.collect">ForwardingIterator&lt;T&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An iterator which forwards all its method calls to another iterator.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect">ForwardingList&lt;E&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A list which forwards all its method calls to another list.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingListIterator.html" title="class in com.google.common.collect">ForwardingListIterator&lt;E&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A list iterator which forwards all its method calls to another list
- iterator.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A map which forwards all its method calls to another map.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingMapEntry.html" title="class in com.google.common.collect">ForwardingMapEntry&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A map entry which forwards all its method calls to another map entry.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect">ForwardingMultimap&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A multimap which forwards all its method calls to another multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect">ForwardingMultiset&lt;E&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A multiset which forwards all its method calls to another multiset.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An abstract base class for implementing the <a
- href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingQueue.html" title="class in com.google.common.collect">ForwardingQueue&lt;E&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A queue which forwards all its method calls to another queue.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingSet.html" title="class in com.google.common.collect">ForwardingSet&lt;E&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A set which forwards all its method calls to another set.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingSortedMap.html" title="class in com.google.common.collect">ForwardingSortedMap&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A sorted map which forwards all its method calls to another sorted map.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingSortedSet.html" title="class in com.google.common.collect">ForwardingSortedSet&lt;E&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A sorted set which forwards all its method calls to another sorted set.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect">HashBiMap&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <A HREF="../../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect"><CODE>BiMap</CODE></A> backed by two <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util"><CODE>HashMap</CODE></A> instances.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect">HashMultimap&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Implementation of <A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A> using hash tables.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect">HashMultiset&lt;E&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Multiset implementation backed by a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util"><CODE>HashMap</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable <A HREF="../../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect"><CODE>BiMap</CODE></A> with reliable user-specified iteration order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection&lt;E&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable collection.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList&lt;E&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A high-performance, immutable, random-access <code>List</code> implementation.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable <A HREF="../../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect"><CODE>ListMultimap</CODE></A> with reliable user-specified key and value
- iteration order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable, hash-based <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A> with reliable user-specified iteration
- order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable <A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset&lt;E&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable hash-based multiset.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet&lt;E&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A high-performance, immutable <code>Set</code> with reliable, user-specified
- iteration order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable <A HREF="../../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect"><CODE>SetMultimap</CODE></A> with reliable user-specified key and value
- iteration order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util"><CODE>SortedMap</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet&lt;E&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable <code>SortedSet</code> that stores its elements in a sorted array.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This class contains static utility methods that operate on or return objects
- of type <code>Iterable</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This class contains static utility methods that operate on or return objects
- of type <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util"><CODE>Iterator</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect">LinkedHashMultimap&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Implementation of <code>Multimap</code> that does not allow duplicate key-value
- entries and that returns collections whose iterators follow the ordering in
- which the data was added to the multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect">LinkedHashMultiset&lt;E&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <code>Multiset</code> implementation with predictable iteration order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An implementation of <code>ListMultimap</code> that supports deterministic
- iteration order for both keys and values.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;interface</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <code>Multimap</code> that can hold duplicate key-value pairs and that maintains
- the insertion ordering of values for a given key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/Lists.html" title="class in com.google.common.collect">Lists</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Static utility methods pertaining to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util"><CODE>List</CODE></A> instances.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;interface</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/MapDifference.html" title="interface in com.google.common.collect">MapDifference&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An object representing the differences between two maps.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ConcurrentMap</CODE></A> builder, providing any combination of these
- features: <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/SoftReference.html?is-external=true" title="class or interface in java.lang.ref">soft</A> or <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/WeakReference.html?is-external=true" title="class or interface in java.lang.ref">weak</A> keys, soft or weak values, timed expiration, and on-demand
- computation of values.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/Maps.html" title="class in com.google.common.collect">Maps</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Static utility methods pertaining to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A> instances.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;interface</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A collection similar to a <code>Map</code>, but which may associate multiple
- values with a single key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/Multimaps.html" title="class in com.google.common.collect">Multimaps</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Provides static methods acting on or generating a <code>Multimap</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;interface</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset&lt;E&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A collection that supports order-independent equality, like <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A>, but
- may have duplicate elements.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/Multisets.html" title="class in com.google.common.collect">Multisets</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Provides static utility methods for creating and working with <A HREF="../../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect"><CODE>Multiset</CODE></A> instances.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ObjectArrays.html" title="class in com.google.common.collect">ObjectArrays</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Static utility methods pertaining to object arrays.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering&lt;T&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A comparator with added methods to support common functions.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;interface</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/PeekingIterator.html" title="interface in com.google.common.collect">PeekingIterator&lt;E&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An iterator that supports a one-element lookahead while iterating.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;interface</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <code>Multimap</code> that cannot hold duplicate key-value pairs.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/Sets.html" title="class in com.google.common.collect">Sets</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Static utility methods pertaining to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A> instances.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;interface</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <code>SetMultimap</code> whose set of values for a given key are kept sorted;
- that is, they comprise a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util"><CODE>SortedSet</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">TreeMultimap&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Implementation of <code>Multimap</code> whose keys and values are ordered by
- their natural ordering or by supplied comparators.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect">TreeMultiset&lt;E&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A multiset which maintains the ordering of its elements, according to either
- their natural order or an explicit <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util"><CODE>Comparator</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator&lt;E&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An iterator that does not support <A HREF="../../../../../com/google/common/collect/UnmodifiableIterator.html#remove()"><CODE>UnmodifiableIterator.remove()</CODE></A>.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> with annotations of type <A HREF="../../../../../com/google/common/annotations/GwtCompatible.html" title="annotation in com.google.common.annotations">GwtCompatible</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;U extends <A HREF="../../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt; 
-<BR>
-<A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;U&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Ordering.</B><B><A HREF="../../../../../com/google/common/collect/Ordering.html#compound(java.util.Comparator)">compound</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super U&gt;&nbsp;secondaryComparator)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an ordering which first uses the ordering <code>this</code>, but which
- in the event of a "tie", then delegates to <code>secondaryComparator</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Ordering.</B><B><A HREF="../../../../../com/google/common/collect/Ordering.html#compound(java.lang.Iterable)">compound</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super T&gt;&gt;&nbsp;comparators)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an ordering which tries each given comparator in order until a
- non-zero result is found, returning that result, and returning zero only if
- all comparators return zero.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Ordering.</B><B><A HREF="../../../../../com/google/common/collect/Ordering.html#explicit(java.util.List)">explicit</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;T&gt;&nbsp;valuesInOrder)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an ordering that compares objects according to the order in
- which they appear in the given list.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Ordering.</B><B><A HREF="../../../../../com/google/common/collect/Ordering.html#explicit(T, T...)">explicit</A></B>(T&nbsp;leastValue,
-         T...&nbsp;remainingValuesInOrder)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an ordering that compares objects according to the order in
- which they are given to this method.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Ordering.</B><B><A HREF="../../../../../com/google/common/collect/Ordering.html#from(java.util.Comparator)">from</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;T&gt;&nbsp;comparator)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an ordering for a pre-existing <code>comparator</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Ordering.</B><B><A HREF="../../../../../com/google/common/collect/Ordering.html#from(com.google.common.collect.Ordering)">from</A></B>(<A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;T&gt;&nbsp;ordering)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>no need to use this</I></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;E&gt;&gt; 
-<BR>
-<A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Sets.</B><B><A HREF="../../../../../com/google/common/collect/Sets.html#immutableEnumSet(E, E...)">immutableEnumSet</A></B>(E&nbsp;anElement,
-                 E...&nbsp;otherElements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set instance containing the given enum elements.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;E&gt;&gt; 
-<BR>
-<A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Sets.</B><B><A HREF="../../../../../com/google/common/collect/Sets.html#immutableEnumSet(java.lang.Iterable)">immutableEnumSet</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set instance containing the given enum elements.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;S extends <A HREF="../../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt; 
-<BR>
-<A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;S&gt;&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Ordering.</B><B><A HREF="../../../../../com/google/common/collect/Ordering.html#lexicographical()">lexicographical</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new ordering which sorts iterables by comparing corresponding
- elements pairwise until a nonzero result is found; imposes "dictionary
- order".</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;C extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&gt; 
-<BR>
-<A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;C&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Ordering.</B><B><A HREF="../../../../../com/google/common/collect/Ordering.html#natural()">natural</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a serializable ordering that uses the natural order of the values.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Lists.</B><B><A HREF="../../../../../com/google/common/collect/Lists.html#newArrayList()">newArrayList</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <i>mutable</i>, empty <code>ArrayList</code> instance.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Lists.</B><B><A HREF="../../../../../com/google/common/collect/Lists.html#newArrayList(E...)">newArrayList</A></B>(E...&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <i>mutable</i> <code>ArrayList</code> instance containing the given
- elements.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Lists.</B><B><A HREF="../../../../../com/google/common/collect/Lists.html#newArrayList(java.lang.Iterable)">newArrayList</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <i>mutable</i> <code>ArrayList</code> instance containing the given
- elements.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Lists.</B><B><A HREF="../../../../../com/google/common/collect/Lists.html#newArrayList(java.util.Iterator)">newArrayList</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <i>mutable</i> <code>ArrayList</code> instance containing the given
- elements.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Lists.</B><B><A HREF="../../../../../com/google/common/collect/Lists.html#newArrayListWithCapacity(int)">newArrayListWithCapacity</A></B>(int&nbsp;initialArraySize)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an <code>ArrayList</code> instance backed by an array of the
- <i>exact</i> size specified; equivalent to
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html?is-external=true#ArrayList(int)" title="class or interface in java.util"><CODE>ArrayList.ArrayList(int)</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Lists.</B><B><A HREF="../../../../../com/google/common/collect/Lists.html#newArrayListWithExpectedSize(int)">newArrayListWithExpectedSize</A></B>(int&nbsp;estimatedSize)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an <code>ArrayList</code> instance sized appropriately to hold an
- <i>estimated</i> number of elements without resizing.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/LinkedList.html?is-external=true" title="class or interface in java.util">LinkedList</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Lists.</B><B><A HREF="../../../../../com/google/common/collect/Lists.html#newLinkedList()">newLinkedList</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an empty <code>LinkedList</code> instance.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/LinkedList.html?is-external=true" title="class or interface in java.util">LinkedList</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Lists.</B><B><A HREF="../../../../../com/google/common/collect/Lists.html#newLinkedList(java.lang.Iterable)">newLinkedList</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <code>LinkedList</code> instance containing the given elements.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;S extends <A HREF="../../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt; 
-<BR>
-<A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;S&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Ordering.</B><B><A HREF="../../../../../com/google/common/collect/Ordering.html#nullsFirst()">nullsFirst</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an ordering that treats <code>null</code> as less than all other values
- and uses <code>this</code> to compare non-null values.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;S extends <A HREF="../../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt; 
-<BR>
-<A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;S&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Ordering.</B><B><A HREF="../../../../../com/google/common/collect/Ordering.html#nullsLast()">nullsLast</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an ordering that treats <code>null</code> as greater than all other
- values and uses this ordering to compare non-null values.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;F&gt; <A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;F&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Ordering.</B><B><A HREF="../../../../../com/google/common/collect/Ordering.html#onResultOf(com.google.common.base.Function)">onResultOf</A></B>(<A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;F,? extends <A HREF="../../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt;&nbsp;function)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new ordering on <code>F</code> which orders elements by first applying
- a function to them, then comparing those results using <code>this</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;S extends <A HREF="../../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt; 
-<BR>
-<A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;S&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Ordering.</B><B><A HREF="../../../../../com/google/common/collect/Ordering.html#reverse()">reverse</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the reverse of this ordering; the <code>Ordering</code> equivalent to
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#reverseOrder(java.util.Comparator)" title="class or interface in java.util"><CODE>Collections.reverseOrder(Comparator)</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>Ordering.</B><B><A HREF="../../../../../com/google/common/collect/Ordering.html#usingToString()">usingToString</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an ordering that compares objects by the natural ordering of their
- string representations as returned by <code>toString()</code>.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.primitives"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/annotations/GwtCompatible.html" title="annotation in com.google.common.annotations">GwtCompatible</A> in <A HREF="../../../../../com/google/common/primitives/package-summary.html">com.google.common.primitives</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Classes in <A HREF="../../../../../com/google/common/primitives/package-summary.html">com.google.common.primitives</A> with annotations of type <A HREF="../../../../../com/google/common/annotations/GwtCompatible.html" title="annotation in com.google.common.annotations">GwtCompatible</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/primitives/Booleans.html" title="class in com.google.common.primitives">Booleans</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Static utility methods pertaining to <code>boolean</code> primitives, that are not
- already found in either <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang"><CODE>Boolean</CODE></A> or <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true" title="class or interface in java.util"><CODE>Arrays</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/primitives/Bytes.html" title="class in com.google.common.primitives">Bytes</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Static utility methods pertaining to <code>byte</code> primitives, that are not
- already found in either <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Byte.html?is-external=true" title="class or interface in java.lang"><CODE>Byte</CODE></A> or <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true" title="class or interface in java.util"><CODE>Arrays</CODE></A>, <i>and interpret
- bytes as neither signed nor unsigned</i>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/primitives/Chars.html" title="class in com.google.common.primitives">Chars</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Static utility methods pertaining to <code>char</code> primitives, that are not
- already found in either <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Character.html?is-external=true" title="class or interface in java.lang"><CODE>Character</CODE></A> or <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true" title="class or interface in java.util"><CODE>Arrays</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/primitives/Doubles.html" title="class in com.google.common.primitives">Doubles</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Static utility methods pertaining to <code>double</code> primitives, that are not
- already found in either <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Double.html?is-external=true" title="class or interface in java.lang"><CODE>Double</CODE></A> or <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true" title="class or interface in java.util"><CODE>Arrays</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/primitives/Floats.html" title="class in com.google.common.primitives">Floats</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Static utility methods pertaining to <code>float</code> primitives, that are not
- already found in either <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true" title="class or interface in java.lang"><CODE>Float</CODE></A> or <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true" title="class or interface in java.util"><CODE>Arrays</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/primitives/Ints.html" title="class in com.google.common.primitives">Ints</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Static utility methods pertaining to <code>int</code> primitives, that are not
- already found in either <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang"><CODE>Integer</CODE></A> or <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true" title="class or interface in java.util"><CODE>Arrays</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/primitives/Longs.html" title="class in com.google.common.primitives">Longs</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Static utility methods pertaining to <code>long</code> primitives, that are not
- already found in either <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang"><CODE>Long</CODE></A> or <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true" title="class or interface in java.util"><CODE>Arrays</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/primitives/Shorts.html" title="class in com.google.common.primitives">Shorts</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Static utility methods pertaining to <code>short</code> primitives, that are not
- already found in either <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Short.html?is-external=true" title="class or interface in java.lang"><CODE>Short</CODE></A> or <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true" title="class or interface in java.util"><CODE>Arrays</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/primitives/SignedBytes.html" title="class in com.google.common.primitives">SignedBytes</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Static utility methods pertaining to <code>byte</code> primitives that
- interpret values as signed.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/annotations/GwtCompatible.html" title="annotation in com.google.common.annotations"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/annotations//class-useGwtCompatible.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="GwtCompatible.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/annotations/class-use/GwtIncompatible.html b/javadoc/com/google/common/annotations/class-use/GwtIncompatible.html
deleted file mode 100644
index d029125..0000000
--- a/javadoc/com/google/common/annotations/class-use/GwtIncompatible.html
+++ /dev/null
@@ -1,450 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.annotations.GwtIncompatible (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.annotations.GwtIncompatible (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/annotations/GwtIncompatible.html" title="annotation in com.google.common.annotations"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/annotations//class-useGwtIncompatible.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="GwtIncompatible.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.annotations.GwtIncompatible</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/annotations/GwtIncompatible.html" title="annotation in com.google.common.annotations">GwtIncompatible</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.base"><B>com.google.common.base</B></A></TD>
-<TD>Miscellaneous common util classes and annotations.&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.primitives"><B>com.google.common.primitives</B></A></TD>
-<TD>&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.base"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/annotations/GwtIncompatible.html" title="annotation in com.google.common.annotations">GwtIncompatible</A> in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A> with annotations of type <A HREF="../../../../../com/google/common/annotations/GwtIncompatible.html" title="annotation in com.google.common.annotations">GwtIncompatible</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>Predicates.</B><B><A HREF="../../../../../com/google/common/base/Predicates.html#instanceOf(java.lang.Class)">instanceOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;?&gt;&nbsp;clazz)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if the object being
- tested is an instance of the given class.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/annotations/GwtIncompatible.html" title="annotation in com.google.common.annotations">GwtIncompatible</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> with annotations of type <A HREF="../../../../../com/google/common/annotations/GwtIncompatible.html" title="annotation in com.google.common.annotations">GwtIncompatible</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; T[]</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ObjectArrays.</B><B><A HREF="../../../../../com/google/common/collect/ObjectArrays.html#concat(T[], T[], java.lang.Class)">concat</A></B>(T[]&nbsp;first,
-       T[]&nbsp;second,
-       <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new array that contains the concatenated contents of two arrays.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A></CODE></FONT></TD>
-<TD><CODE><B>MapMaker.</B><B><A HREF="../../../../../com/google/common/collect/MapMaker.html#concurrencyLevel(int)">concurrencyLevel</A></B>(int&nbsp;concurrencyLevel)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guides the allowed concurrency among update operations.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Iterables.</B><B><A HREF="../../../../../com/google/common/collect/Iterables.html#filter(java.lang.Iterable, java.lang.Class)">filter</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;?&gt;&nbsp;unfiltered,
-       <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns all instances of class <code>type</code> in <code>unfiltered</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Iterators.</B><B><A HREF="../../../../../com/google/common/collect/Iterators.html#filter(java.util.Iterator, java.lang.Class)">filter</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;?&gt;&nbsp;unfiltered,
-       <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns all instances of class <code>type</code> in <code>unfiltered</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; T[]</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ObjectArrays.</B><B><A HREF="../../../../../com/google/common/collect/ObjectArrays.html#newArray(java.lang.Class, int)">newArray</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type,
-         int&nbsp;length)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new array of the given length with the specified component type.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A></CODE></FONT></TD>
-<TD><CODE><B>MapMaker.</B><B><A HREF="../../../../../com/google/common/collect/MapMaker.html#softKeys()">softKeys</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Specifies that each key (not value) stored in the map should be
- wrapped in a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/SoftReference.html?is-external=true" title="class or interface in java.lang.ref"><CODE>SoftReference</CODE></A> (by default, strong references
- are used).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A></CODE></FONT></TD>
-<TD><CODE><B>MapMaker.</B><B><A HREF="../../../../../com/google/common/collect/MapMaker.html#softValues()">softValues</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Specifies that each value (not key) stored in the map should be
- wrapped in a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/SoftReference.html?is-external=true" title="class or interface in java.lang.ref"><CODE>SoftReference</CODE></A> (by default, strong references
- are used).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ForwardingList.</B><B><A HREF="../../../../../com/google/common/collect/ForwardingList.html#subList(int, int)">subList</A></B>(int&nbsp;fromIndex,
-        int&nbsp;toIndex)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; T[]</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Iterables.</B><B><A HREF="../../../../../com/google/common/collect/Iterables.html#toArray(java.lang.Iterable, java.lang.Class)">toArray</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends T&gt;&nbsp;iterable,
-        <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies an iterable's elements into an array.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; T[]</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Iterators.</B><B><A HREF="../../../../../com/google/common/collect/Iterators.html#toArray(java.util.Iterator, java.lang.Class)">toArray</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;&nbsp;iterator,
-        <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies an iterator's elements into an array.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A></CODE></FONT></TD>
-<TD><CODE><B>MapMaker.</B><B><A HREF="../../../../../com/google/common/collect/MapMaker.html#weakKeys()">weakKeys</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Specifies that each key (not value) stored in the map should be
- wrapped in a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/WeakReference.html?is-external=true" title="class or interface in java.lang.ref"><CODE>WeakReference</CODE></A> (by default, strong references
- are used).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A></CODE></FONT></TD>
-<TD><CODE><B>MapMaker.</B><B><A HREF="../../../../../com/google/common/collect/MapMaker.html#weakValues()">weakValues</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Specifies that each value (not key) stored in the map should be
- wrapped in a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/WeakReference.html?is-external=true" title="class or interface in java.lang.ref"><CODE>WeakReference</CODE></A> (by default, strong references
- are used).</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.primitives"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/annotations/GwtIncompatible.html" title="annotation in com.google.common.annotations">GwtIncompatible</A> in <A HREF="../../../../../com/google/common/primitives/package-summary.html">com.google.common.primitives</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/primitives/package-summary.html">com.google.common.primitives</A> with annotations of type <A HREF="../../../../../com/google/common/annotations/GwtIncompatible.html" title="annotation in com.google.common.annotations">GwtIncompatible</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B>Ints.</B><B><A HREF="../../../../../com/google/common/primitives/Ints.html#fromByteArray(byte[])">fromByteArray</A></B>(byte[]&nbsp;bytes)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the <code>int</code> value whose big-endian representation is stored in
- the first 4 bytes of <code>bytes</code>; equivalent to <code>ByteBuffer.wrap(bytes).getInt()</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;long</CODE></FONT></TD>
-<TD><CODE><B>Longs.</B><B><A HREF="../../../../../com/google/common/primitives/Longs.html#fromByteArray(byte[])">fromByteArray</A></B>(byte[]&nbsp;bytes)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the <code>long</code> value whose big-endian representation is
- stored in the first 8 bytes of <code>bytes</code>; equivalent to <code>ByteBuffer.wrap(bytes).getLong()</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;short</CODE></FONT></TD>
-<TD><CODE><B>Shorts.</B><B><A HREF="../../../../../com/google/common/primitives/Shorts.html#fromByteArray(byte[])">fromByteArray</A></B>(byte[]&nbsp;bytes)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the <code>short</code> value whose big-endian representation is
- stored in the first ? bytes of <code>bytes</code>; equivalent to <code>ByteBuffer.wrap(bytes).getShort()</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;char</CODE></FONT></TD>
-<TD><CODE><B>Chars.</B><B><A HREF="../../../../../com/google/common/primitives/Chars.html#fromByteArray(byte[])">fromByteArray</A></B>(byte[]&nbsp;bytes)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the <code>char</code> value whose big-endian representation is
- stored in the first 2 bytes of <code>bytes</code>; equivalent to <code>ByteBuffer.wrap(bytes).getChar()</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;byte[]</CODE></FONT></TD>
-<TD><CODE><B>Chars.</B><B><A HREF="../../../../../com/google/common/primitives/Chars.html#toByteArray(char)">toByteArray</A></B>(char&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a big-endian representation of <code>value</code> in a 2-element byte
- array; equivalent to <code>ByteBuffer.allocate(2).putChar(value).array()</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;byte[]</CODE></FONT></TD>
-<TD><CODE><B>Ints.</B><B><A HREF="../../../../../com/google/common/primitives/Ints.html#toByteArray(int)">toByteArray</A></B>(int&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a big-endian representation of <code>value</code> in a 4-element byte
- array; equivalent to <code>ByteBuffer.allocate(4).putInt(value).array()</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;byte[]</CODE></FONT></TD>
-<TD><CODE><B>Longs.</B><B><A HREF="../../../../../com/google/common/primitives/Longs.html#toByteArray(long)">toByteArray</A></B>(long&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a big-endian representation of <code>value</code> in an 8-element byte
- array; equivalent to <code>ByteBuffer.allocate(8).putLong(value).array()</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;byte[]</CODE></FONT></TD>
-<TD><CODE><B>Shorts.</B><B><A HREF="../../../../../com/google/common/primitives/Shorts.html#toByteArray(short)">toByteArray</A></B>(short&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a big-endian representation of <code>value</code> in a ?-element byte
- array; equivalent to <code>ByteBuffer.allocate(?).putShort(value).array()</code>.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/annotations/GwtIncompatible.html" title="annotation in com.google.common.annotations"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/annotations//class-useGwtIncompatible.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="GwtIncompatible.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/annotations/class-use/VisibleForTesting.html b/javadoc/com/google/common/annotations/class-use/VisibleForTesting.html
deleted file mode 100644
index b174846..0000000
--- a/javadoc/com/google/common/annotations/class-use/VisibleForTesting.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.annotations.VisibleForTesting (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.annotations.VisibleForTesting (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/annotations/VisibleForTesting.html" title="annotation in com.google.common.annotations"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/annotations//class-useVisibleForTesting.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="VisibleForTesting.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.annotations.VisibleForTesting</B></H2>
-</CENTER>
-No usage of com.google.common.annotations.VisibleForTesting
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/annotations/VisibleForTesting.html" title="annotation in com.google.common.annotations"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/annotations//class-useVisibleForTesting.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="VisibleForTesting.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/annotations/package-frame.html b/javadoc/com/google/common/annotations/package-frame.html
deleted file mode 100644
index 17752dd..0000000
--- a/javadoc/com/google/common/annotations/package-frame.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-com.google.common.annotations (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-
-</HEAD>
-
-<BODY BGCOLOR="white">
-<FONT size="+1" CLASS="FrameTitleFont">
-<A HREF="../../../../com/google/common/annotations/package-summary.html" target="classFrame">com.google.common.annotations</A></FONT>
-<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
-<TR>
-<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">
-Annotation Types</FONT>&nbsp;
-<FONT CLASS="FrameItemFont">
-<BR>
-<A HREF="GwtCompatible.html" title="annotation in com.google.common.annotations" target="classFrame">GwtCompatible</A>
-<BR>
-<A HREF="GwtIncompatible.html" title="annotation in com.google.common.annotations" target="classFrame">GwtIncompatible</A>
-<BR>
-<A HREF="VisibleForTesting.html" title="annotation in com.google.common.annotations" target="classFrame">VisibleForTesting</A></FONT></TD>
-</TR>
-</TABLE>
-
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/annotations/package-summary.html b/javadoc/com/google/common/annotations/package-summary.html
deleted file mode 100644
index 7b59ce1..0000000
--- a/javadoc/com/google/common/annotations/package-summary.html
+++ /dev/null
@@ -1,172 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-com.google.common.annotations (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="com.google.common.annotations (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-use.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV PACKAGE&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/base/package-summary.html"><B>NEXT PACKAGE</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/annotations/package-summary.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<H2>
-Package com.google.common.annotations
-</H2>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Annotation Types Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/annotations/GwtCompatible.html" title="annotation in com.google.common.annotations">GwtCompatible</A></B></TD>
-<TD>The presence of this annotation on a type indicates that the type may be
- used with the
- <a href="http://code.google.com/webtoolkit/">Google Web Toolkit</a> (GWT).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/annotations/GwtIncompatible.html" title="annotation in com.google.common.annotations">GwtIncompatible</A></B></TD>
-<TD>The presence of this annotation on a method indicates that the method may
- <em>not</em> be used with the
- <a href="http://code.google.com/webtoolkit/">Google Web Toolkit</a> (GWT),
- even though its type is annotated as <A HREF="../../../../com/google/common/annotations/GwtCompatible.html" title="annotation in com.google.common.annotations"><CODE>GwtCompatible</CODE></A> and accessible in
- GWT.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/annotations/VisibleForTesting.html" title="annotation in com.google.common.annotations">VisibleForTesting</A></B></TD>
-<TD>An annotation that indicates that the visibility of a type or member has
- been relaxed to make the code testable.</TD>
-</TR>
-</TABLE>
-&nbsp;
-
-<P>
-<DL>
-</DL>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-use.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV PACKAGE&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/base/package-summary.html"><B>NEXT PACKAGE</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/annotations/package-summary.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/annotations/package-tree.html b/javadoc/com/google/common/annotations/package-tree.html
deleted file mode 100644
index c311a40..0000000
--- a/javadoc/com/google/common/annotations/package-tree.html
+++ /dev/null
@@ -1,154 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-com.google.common.annotations Class Hierarchy (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="com.google.common.annotations Class Hierarchy (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/base/package-tree.html"><B>NEXT</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/annotations/package-tree.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-Hierarchy For Package com.google.common.annotations
-</H2>
-</CENTER>
-<DL>
-<DT><B>Package Hierarchies:</B><DD><A HREF="../../../../overview-tree.html">All Packages</A></DL>
-<HR>
-<H2>
-Annotation Type Hierarchy
-</H2>
-<UL>
-<LI TYPE="circle">com.google.common.annotations.<A HREF="../../../../com/google/common/annotations/GwtIncompatible.html" title="annotation in com.google.common.annotations"><B>GwtIncompatible</B></A> (implements java.lang.annotation.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</A>)
-<LI TYPE="circle">com.google.common.annotations.<A HREF="../../../../com/google/common/annotations/GwtCompatible.html" title="annotation in com.google.common.annotations"><B>GwtCompatible</B></A> (implements java.lang.annotation.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</A>)
-<LI TYPE="circle">com.google.common.annotations.<A HREF="../../../../com/google/common/annotations/VisibleForTesting.html" title="annotation in com.google.common.annotations"><B>VisibleForTesting</B></A> (implements java.lang.annotation.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</A>)
-</UL>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/base/package-tree.html"><B>NEXT</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/annotations/package-tree.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/annotations/package-use.html b/javadoc/com/google/common/annotations/package-use.html
deleted file mode 100644
index 44438da..0000000
--- a/javadoc/com/google/common/annotations/package-use.html
+++ /dev/null
@@ -1,266 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Package com.google.common.annotations (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Package com.google.common.annotations (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/annotations/package-use.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="package-use.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Package<br>com.google.common.annotations</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/google/common/annotations/package-summary.html">com.google.common.annotations</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.annotations"><B>com.google.common.annotations</B></A></TD>
-<TD>&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.base"><B>com.google.common.base</B></A></TD>
-<TD>Miscellaneous common util classes and annotations.&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.primitives"><B>com.google.common.primitives</B></A></TD>
-<TD>&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.annotations"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Classes in <A HREF="../../../../com/google/common/annotations/package-summary.html">com.google.common.annotations</A> used by <A HREF="../../../../com/google/common/annotations/package-summary.html">com.google.common.annotations</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/annotations/class-use/GwtCompatible.html#com.google.common.annotations"><B>GwtCompatible</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The presence of this annotation on a type indicates that the type may be
- used with the
- <a href="http://code.google.com/webtoolkit/">Google Web Toolkit</a> (GWT).</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.base"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Classes in <A HREF="../../../../com/google/common/annotations/package-summary.html">com.google.common.annotations</A> used by <A HREF="../../../../com/google/common/base/package-summary.html">com.google.common.base</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/annotations/class-use/GwtCompatible.html#com.google.common.base"><B>GwtCompatible</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The presence of this annotation on a type indicates that the type may be
- used with the
- <a href="http://code.google.com/webtoolkit/">Google Web Toolkit</a> (GWT).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/annotations/class-use/GwtIncompatible.html#com.google.common.base"><B>GwtIncompatible</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The presence of this annotation on a method indicates that the method may
- <em>not</em> be used with the
- <a href="http://code.google.com/webtoolkit/">Google Web Toolkit</a> (GWT),
- even though its type is annotated as <A HREF="../../../../com/google/common/annotations/GwtCompatible.html" title="annotation in com.google.common.annotations"><CODE>GwtCompatible</CODE></A> and accessible in
- GWT.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Classes in <A HREF="../../../../com/google/common/annotations/package-summary.html">com.google.common.annotations</A> used by <A HREF="../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/annotations/class-use/GwtCompatible.html#com.google.common.collect"><B>GwtCompatible</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The presence of this annotation on a type indicates that the type may be
- used with the
- <a href="http://code.google.com/webtoolkit/">Google Web Toolkit</a> (GWT).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/annotations/class-use/GwtIncompatible.html#com.google.common.collect"><B>GwtIncompatible</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The presence of this annotation on a method indicates that the method may
- <em>not</em> be used with the
- <a href="http://code.google.com/webtoolkit/">Google Web Toolkit</a> (GWT),
- even though its type is annotated as <A HREF="../../../../com/google/common/annotations/GwtCompatible.html" title="annotation in com.google.common.annotations"><CODE>GwtCompatible</CODE></A> and accessible in
- GWT.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.primitives"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Classes in <A HREF="../../../../com/google/common/annotations/package-summary.html">com.google.common.annotations</A> used by <A HREF="../../../../com/google/common/primitives/package-summary.html">com.google.common.primitives</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/annotations/class-use/GwtCompatible.html#com.google.common.primitives"><B>GwtCompatible</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The presence of this annotation on a type indicates that the type may be
- used with the
- <a href="http://code.google.com/webtoolkit/">Google Web Toolkit</a> (GWT).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/annotations/class-use/GwtIncompatible.html#com.google.common.primitives"><B>GwtIncompatible</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The presence of this annotation on a method indicates that the method may
- <em>not</em> be used with the
- <a href="http://code.google.com/webtoolkit/">Google Web Toolkit</a> (GWT),
- even though its type is annotated as <A HREF="../../../../com/google/common/annotations/GwtCompatible.html" title="annotation in com.google.common.annotations"><CODE>GwtCompatible</CODE></A> and accessible in
- GWT.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/annotations/package-use.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="package-use.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/base/CaseFormat.html b/javadoc/com/google/common/base/CaseFormat.html
deleted file mode 100644
index 540b5e6..0000000
--- a/javadoc/com/google/common/base/CaseFormat.html
+++ /dev/null
@@ -1,417 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:56 PST 2010 -->
-<TITLE>
-CaseFormat (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="CaseFormat (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/CaseFormat.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV CLASS&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/base/CaseFormat.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="CaseFormat.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#enum_constant_summary">ENUM CONSTANTS</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;<A HREF="#enum_constant_detail">ENUM CONSTANTS</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.base</FONT>
-<BR>
-Enum CaseFormat</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">java.lang.Enum</A>&lt;<A HREF="../../../../com/google/common/base/CaseFormat.html" title="enum in com.google.common.base">CaseFormat</A>&gt;
-      <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.base.CaseFormat</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;<A HREF="../../../../com/google/common/base/CaseFormat.html" title="enum in com.google.common.base">CaseFormat</A>&gt;</DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public enum <B>CaseFormat</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;<A HREF="../../../../com/google/common/base/CaseFormat.html" title="enum in com.google.common.base">CaseFormat</A>&gt;</DL>
-</PRE>
-
-<P>
-Utility class for converting between various case formats.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2009.09.15 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Mike Bostock</DD>
-</DL>
-<HR>
-
-<P>
-<!-- =========== ENUM CONSTANT SUMMARY =========== -->
-
-<A NAME="enum_constant_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Enum Constant Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/google/common/base/CaseFormat.html#LOWER_CAMEL">LOWER_CAMEL</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Java variable naming convention, e.g., "lowerCamel".</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/google/common/base/CaseFormat.html#LOWER_HYPHEN">LOWER_HYPHEN</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Hyphenated variable naming convention, e.g., "lower-hyphen".</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/google/common/base/CaseFormat.html#LOWER_UNDERSCORE">LOWER_UNDERSCORE</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;C++ variable naming convention, e.g., "lower_underscore".</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/google/common/base/CaseFormat.html#UPPER_CAMEL">UPPER_CAMEL</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Java and C++ class naming convention, e.g., "UpperCamel".</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/google/common/base/CaseFormat.html#UPPER_UNDERSCORE">UPPER_UNDERSCORE</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Java and C++ constant naming convention, e.g., "UPPER_UNDERSCORE".</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/CaseFormat.html#to(com.google.common.base.CaseFormat, java.lang.String)">to</A></B>(<A HREF="../../../../com/google/common/base/CaseFormat.html" title="enum in com.google.common.base">CaseFormat</A>&nbsp;format,
-   <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;s)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts the specified <code>String s</code> from this format to the specified
- <code>format</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/base/CaseFormat.html" title="enum in com.google.common.base">CaseFormat</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/CaseFormat.html#valueOf(java.lang.String)">valueOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;name)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the enum constant of this type with the specified name.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/base/CaseFormat.html" title="enum in com.google.common.base">CaseFormat</A>[]</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/CaseFormat.html#values()">values</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an array containing the constants of this enum type, in
-the order they are declared.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Enum"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#compareTo(E)" title="class or interface in java.lang">compareTo</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#getDeclaringClass()" title="class or interface in java.lang">getDeclaringClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#name()" title="class or interface in java.lang">name</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#ordinal()" title="class or interface in java.lang">ordinal</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#valueOf(java.lang.Class, java.lang.String)" title="class or interface in java.lang">valueOf</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ ENUM CONSTANT DETAIL =========== -->
-
-<A NAME="enum_constant_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Enum Constant Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="LOWER_HYPHEN"><!-- --></A><H3>
-LOWER_HYPHEN</H3>
-<PRE>
-public static final <A HREF="../../../../com/google/common/base/CaseFormat.html" title="enum in com.google.common.base">CaseFormat</A> <B>LOWER_HYPHEN</B></PRE>
-<DL>
-<DD>Hyphenated variable naming convention, e.g., "lower-hyphen".
-<P>
-<DL>
-</DL>
-</DL>
-<HR>
-
-<A NAME="LOWER_UNDERSCORE"><!-- --></A><H3>
-LOWER_UNDERSCORE</H3>
-<PRE>
-public static final <A HREF="../../../../com/google/common/base/CaseFormat.html" title="enum in com.google.common.base">CaseFormat</A> <B>LOWER_UNDERSCORE</B></PRE>
-<DL>
-<DD>C++ variable naming convention, e.g., "lower_underscore".
-<P>
-<DL>
-</DL>
-</DL>
-<HR>
-
-<A NAME="LOWER_CAMEL"><!-- --></A><H3>
-LOWER_CAMEL</H3>
-<PRE>
-public static final <A HREF="../../../../com/google/common/base/CaseFormat.html" title="enum in com.google.common.base">CaseFormat</A> <B>LOWER_CAMEL</B></PRE>
-<DL>
-<DD>Java variable naming convention, e.g., "lowerCamel".
-<P>
-<DL>
-</DL>
-</DL>
-<HR>
-
-<A NAME="UPPER_CAMEL"><!-- --></A><H3>
-UPPER_CAMEL</H3>
-<PRE>
-public static final <A HREF="../../../../com/google/common/base/CaseFormat.html" title="enum in com.google.common.base">CaseFormat</A> <B>UPPER_CAMEL</B></PRE>
-<DL>
-<DD>Java and C++ class naming convention, e.g., "UpperCamel".
-<P>
-<DL>
-</DL>
-</DL>
-<HR>
-
-<A NAME="UPPER_UNDERSCORE"><!-- --></A><H3>
-UPPER_UNDERSCORE</H3>
-<PRE>
-public static final <A HREF="../../../../com/google/common/base/CaseFormat.html" title="enum in com.google.common.base">CaseFormat</A> <B>UPPER_UNDERSCORE</B></PRE>
-<DL>
-<DD>Java and C++ constant naming convention, e.g., "UPPER_UNDERSCORE".
-<P>
-<DL>
-</DL>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="values()"><!-- --></A><H3>
-values</H3>
-<PRE>
-public static <A HREF="../../../../com/google/common/base/CaseFormat.html" title="enum in com.google.common.base">CaseFormat</A>[] <B>values</B>()</PRE>
-<DL>
-<DD>Returns an array containing the constants of this enum type, in
-the order they are declared.  This method may be used to iterate
-over the constants as follows:
-<pre>
-for (CaseFormat c : CaseFormat.values())
-&nbsp;   System.out.println(c);
-</pre>
-<P>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>an array containing the constants of this enum type, in
-the order they are declared</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="valueOf(java.lang.String)"><!-- --></A><H3>
-valueOf</H3>
-<PRE>
-public static <A HREF="../../../../com/google/common/base/CaseFormat.html" title="enum in com.google.common.base">CaseFormat</A> <B>valueOf</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;name)</PRE>
-<DL>
-<DD>Returns the enum constant of this type with the specified name.
-The string must match <I>exactly</I> an identifier used to declare an
-enum constant in this type.  (Extraneous whitespace characters are 
-not permitted.)
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>name</CODE> - the name of the enum constant to be returned.
-<DT><B>Returns:</B><DD>the enum constant with the specified name
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if this enum type has no constant
-with the specified name
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if the argument is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="to(com.google.common.base.CaseFormat, java.lang.String)"><!-- --></A><H3>
-to</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>to</B>(<A HREF="../../../../com/google/common/base/CaseFormat.html" title="enum in com.google.common.base">CaseFormat</A>&nbsp;format,
-                 <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;s)</PRE>
-<DL>
-<DD>Converts the specified <code>String s</code> from this format to the specified
- <code>format</code>. A "best effort" approach is taken; if <code>s</code> does not
- conform to the assumed format, then the behavior of this method is
- undefined but we make a reasonable effort at converting anyway.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/CaseFormat.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV CLASS&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/base/CaseFormat.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="CaseFormat.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#enum_constant_summary">ENUM CONSTANTS</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;<A HREF="#enum_constant_detail">ENUM CONSTANTS</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/base/CharMatcher.LookupTable.html b/javadoc/com/google/common/base/CharMatcher.LookupTable.html
deleted file mode 100644
index c793c0b..0000000
--- a/javadoc/com/google/common/base/CharMatcher.LookupTable.html
+++ /dev/null
@@ -1,236 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:56 PST 2010 -->
-<TITLE>
-CharMatcher.LookupTable (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="CharMatcher.LookupTable (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/CharMatcher.LookupTable.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/base/Charsets.html" title="class in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/base/CharMatcher.LookupTable.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="CharMatcher.LookupTable.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_java.lang.Object">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;METHOD</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.base</FONT>
-<BR>
-Class CharMatcher.LookupTable</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.base.CharMatcher.LookupTable</B>
-</PRE>
-<DL>
-<DT><B>Enclosing class:</B><DD><A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>protected static class <B>CharMatcher.LookupTable</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
-</PRE>
-
-<P>
-A bit array with one bit per <code>char</code> value, used by <A HREF="../../../../com/google/common/base/CharMatcher.html#precomputed()"><CODE>CharMatcher.precomputed()</CODE></A>.
-
- <p>TODO: possibly share a common BitArray class with BloomFilter
- and others... a simpler java.util.BitSet.
-<P>
-
-<P>
-<HR>
-
-<P>
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected </CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/CharMatcher.LookupTable.html#CharMatcher.LookupTable()">CharMatcher.LookupTable</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="CharMatcher.LookupTable()"><!-- --></A><H3>
-CharMatcher.LookupTable</H3>
-<PRE>
-protected <B>CharMatcher.LookupTable</B>()</PRE>
-<DL>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/CharMatcher.LookupTable.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/base/Charsets.html" title="class in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/base/CharMatcher.LookupTable.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="CharMatcher.LookupTable.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_java.lang.Object">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;METHOD</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/base/CharMatcher.html b/javadoc/com/google/common/base/CharMatcher.html
deleted file mode 100644
index ace7bf6..0000000
--- a/javadoc/com/google/common/base/CharMatcher.html
+++ /dev/null
@@ -1,1470 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:56 PST 2010 -->
-<TITLE>
-CharMatcher (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="CharMatcher (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/CharMatcher.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/base/CaseFormat.html" title="enum in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/base/CharMatcher.LookupTable.html" title="class in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/base/CharMatcher.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="CharMatcher.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.base</FONT>
-<BR>
-Class CharMatcher</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.base.CharMatcher</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Character.html?is-external=true" title="class or interface in java.lang">Character</A>&gt;</DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public abstract class <B>CharMatcher</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A><DT>implements <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Character.html?is-external=true" title="class or interface in java.lang">Character</A>&gt;</DL>
-</PRE>
-
-<P>
-Determines a true or false value for any Java <code>char</code> value, just as
- <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base"><CODE>Predicate</CODE></A> does for any <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang"><CODE>Object</CODE></A>. Also offers basic text
- processing methods based on this function. Implementations are strongly
- encouraged to be side-effect-free and immutable.
-
- <p>Throughout the documentation of this class, the phrase "matching
- character" is used to mean "any character <code>c</code> for which <code>this.matches(c)</code> returns <code>true</code>".
-
- <p><b>Note:</b> This class deals only with <code>char</code> values; it does not
- understand supplementary Unicode code points in the range <code>0x10000</code> to
- <code>0x10FFFF</code>. Such logical characters are encoded into a <code>String</code>
- using surrogate pairs, and a <code>CharMatcher</code> treats these just as two
- separate characters.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2009.09.15 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Kevin Bourrillion</DD>
-</DL>
-<HR>
-
-<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-<A NAME="nested_class_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Nested Class Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected static&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/CharMatcher.LookupTable.html" title="class in com.google.common.base">CharMatcher.LookupTable</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A bit array with one bit per <code>char</code> value, used by <A HREF="../../../../com/google/common/base/CharMatcher.html#precomputed()"><CODE>precomputed()</CODE></A>.</TD>
-</TR>
-</TABLE>
-&nbsp;<!-- =========== FIELD SUMMARY =========== -->
-
-<A NAME="field_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Field Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/CharMatcher.html#ANY">ANY</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Matches any character.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/CharMatcher.html#ASCII">ASCII</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Determines whether a character is ASCII, meaning that its code point is
- less than 128.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/CharMatcher.html#BREAKING_WHITESPACE">BREAKING_WHITESPACE</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Determines whether a character is a breaking whitespace (that is,
- a whitespace which can be interpreted as a break between words
- for formatting purposes).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/CharMatcher.html#DIGIT">DIGIT</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Determines whether a character is a digit according to
- <a href="http://unicode.org/cldr/utility/list-unicodeset.jsp?a=%5Cp%7Bdigit%7D">Unicode</a>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/CharMatcher.html#INVISIBLE">INVISIBLE</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Determines whether a character is invisible; that is, if its Unicode
- category is any of SPACE_SEPARATOR, LINE_SEPARATOR,
- PARAGRAPH_SEPARATOR, CONTROL, FORMAT, SURROGATE, and PRIVATE_USE according
- to ICU4J.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/CharMatcher.html#JAVA_DIGIT">JAVA_DIGIT</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Determines whether a character is a digit according to <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Character.html?is-external=true#isDigit(char)" title="class or interface in java.lang"><CODE>Java's definition</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/CharMatcher.html#JAVA_ISO_CONTROL">JAVA_ISO_CONTROL</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Determines whether a character is an ISO control character according to
- <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Character.html?is-external=true#isISOControl(char)" title="class or interface in java.lang"><CODE>Character.isISOControl(char)</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/CharMatcher.html#JAVA_LETTER">JAVA_LETTER</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Determines whether a character is a letter according to <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Character.html?is-external=true#isLetter(char)" title="class or interface in java.lang"><CODE>Java's definition</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/CharMatcher.html#JAVA_LETTER_OR_DIGIT">JAVA_LETTER_OR_DIGIT</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Determines whether a character is a letter or digit according to <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Character.html?is-external=true#isLetterOrDigit(char)" title="class or interface in java.lang"><CODE>Java's definition</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/CharMatcher.html#JAVA_LOWER_CASE">JAVA_LOWER_CASE</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Determines whether a character is lower case according to <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Character.html?is-external=true#isLowerCase(char)" title="class or interface in java.lang"><CODE>Java's definition</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/CharMatcher.html#JAVA_UPPER_CASE">JAVA_UPPER_CASE</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Determines whether a character is upper case according to <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Character.html?is-external=true#isUpperCase(char)" title="class or interface in java.lang"><CODE>Java's definition</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/CharMatcher.html#JAVA_WHITESPACE">JAVA_WHITESPACE</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Determines whether a character is whitespace according to <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Character.html?is-external=true#isWhitespace(char)" title="class or interface in java.lang"><CODE>Java's definition</CODE></A>; it is usually preferable
- to use <A HREF="../../../../com/google/common/base/CharMatcher.html#WHITESPACE"><CODE>WHITESPACE</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/CharMatcher.html#NONE">NONE</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Matches no characters.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/CharMatcher.html#SINGLE_WIDTH">SINGLE_WIDTH</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Determines whether a character is single-width (not double-width).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/CharMatcher.html#WHITESPACE">WHITESPACE</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Determines whether a character is whitespace according to the latest
- Unicode standard, as illustrated
- <a href="http://unicode.org/cldr/utility/list-unicodeset.jsp?a=%5Cp%7Bwhitespace%7D">here</a>.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/google/common/base/CharMatcher.html#CharMatcher()">CharMatcher</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/CharMatcher.html#and(com.google.common.base.CharMatcher)">and</A></B>(<A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>&nbsp;other)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a matcher that matches any character matched by both this matcher
- and <code>other</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/CharMatcher.html#anyOf(java.lang.CharSequence)">anyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang">CharSequence</A>&nbsp;sequence)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a <code>char</code> matcher that matches any character present in the
- given character sequence.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/CharMatcher.html#apply(java.lang.Character)">apply</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Character.html?is-external=true" title="class or interface in java.lang">Character</A>&nbsp;character)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if this matcher matches the given character.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/CharMatcher.html#collapseFrom(java.lang.CharSequence, char)">collapseFrom</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang">CharSequence</A>&nbsp;sequence,
-             char&nbsp;replacement)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a string copy of the input character sequence, with each group of
- consecutive characters that match this matcher replaced by a single
- replacement character.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/CharMatcher.html#countIn(java.lang.CharSequence)">countIn</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang">CharSequence</A>&nbsp;sequence)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of matching characters found in a character sequence.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/CharMatcher.html#forPredicate(com.google.common.base.Predicate)">forPredicate</A></B>(<A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Character.html?is-external=true" title="class or interface in java.lang">Character</A>&gt;&nbsp;predicate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a matcher with identical behavior to the given <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Character.html?is-external=true" title="class or interface in java.lang"><CODE>Character</CODE></A>-based predicate, but which operates on primitive <code>char</code>
- instances instead.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/CharMatcher.html#indexIn(java.lang.CharSequence)">indexIn</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang">CharSequence</A>&nbsp;sequence)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the index of the first matching character in a character sequence,
- or <code>-1</code> if no matching character is present.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/CharMatcher.html#indexIn(java.lang.CharSequence, int)">indexIn</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang">CharSequence</A>&nbsp;sequence,
-        int&nbsp;start)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the index of the first matching character in a character sequence,
- starting from a given position, or <code>-1</code> if no character matches after
- that position.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/CharMatcher.html#inRange(char, char)">inRange</A></B>(char&nbsp;startInclusive,
-        char&nbsp;endInclusive)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a <code>char</code> matcher that matches any character in a given range
- (both endpoints are inclusive).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/CharMatcher.html#is(char)">is</A></B>(char&nbsp;match)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a <code>char</code> matcher that matches only one specified character.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/CharMatcher.html#isNot(char)">isNot</A></B>(char&nbsp;match)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a <code>char</code> matcher that matches any character except the one
- specified.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/CharMatcher.html#lastIndexIn(java.lang.CharSequence)">lastIndexIn</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang">CharSequence</A>&nbsp;sequence)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the index of the last matching character in a character sequence,
- or <code>-1</code> if no matching character is present.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>abstract &nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/CharMatcher.html#matches(char)">matches</A></B>(char&nbsp;c)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Determines a true or false value for the given character.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/CharMatcher.html#matchesAllOf(java.lang.CharSequence)">matchesAllOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang">CharSequence</A>&nbsp;sequence)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if a character sequence contains only matching
- characters.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/CharMatcher.html#matchesNoneOf(java.lang.CharSequence)">matchesNoneOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang">CharSequence</A>&nbsp;sequence)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if a character sequence contains no matching
- characters.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/CharMatcher.html#negate()">negate</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a matcher that matches any character not matched by this matcher.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/CharMatcher.html#noneOf(java.lang.CharSequence)">noneOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang">CharSequence</A>&nbsp;sequence)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a <code>char</code> matcher that matches any character not present in
- the given character sequence.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/CharMatcher.html#or(com.google.common.base.CharMatcher)">or</A></B>(<A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>&nbsp;other)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a matcher that matches any character matched by either this matcher
- or <code>other</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/CharMatcher.html#precomputed()">precomputed</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a <code>char</code> matcher functionally equivalent to this one, but
- which may be faster to query than the original; your mileage may vary.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/CharMatcher.html#removeFrom(java.lang.CharSequence)">removeFrom</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang">CharSequence</A>&nbsp;sequence)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a string containing all non-matching characters of a character
- sequence, in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/CharMatcher.html#replaceFrom(java.lang.CharSequence, char)">replaceFrom</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang">CharSequence</A>&nbsp;sequence,
-            char&nbsp;replacement)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a string copy of the input character sequence, with each character
- that matches this matcher replaced by a given replacement character.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/CharMatcher.html#replaceFrom(java.lang.CharSequence, java.lang.CharSequence)">replaceFrom</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang">CharSequence</A>&nbsp;sequence,
-            <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang">CharSequence</A>&nbsp;replacement)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a string copy of the input character sequence, with each character
- that matches this matcher replaced by a given replacement sequence.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/CharMatcher.html#retainFrom(java.lang.CharSequence)">retainFrom</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang">CharSequence</A>&nbsp;sequence)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a string containing all matching characters of a character
- sequence, in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected &nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/CharMatcher.html#setBits(com.google.common.base.CharMatcher.LookupTable)">setBits</A></B>(<A HREF="../../../../com/google/common/base/CharMatcher.LookupTable.html" title="class in com.google.common.base">CharMatcher.LookupTable</A>&nbsp;table)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;For use by implementors; sets the bit corresponding to each character ('\0'
- to '\uFFFF') that matches this matcher in the given bit array,
- leaving all other bits untouched.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/CharMatcher.html#trimAndCollapseFrom(java.lang.CharSequence, char)">trimAndCollapseFrom</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang">CharSequence</A>&nbsp;sequence,
-                    char&nbsp;replacement)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Collapses groups of matching characters exactly as <A HREF="../../../../com/google/common/base/CharMatcher.html#collapseFrom(java.lang.CharSequence, char)"><CODE>collapseFrom(java.lang.CharSequence, char)</CODE></A>
- does, except that groups of matching characters at the start or end of the
- sequence are removed without replacement.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/CharMatcher.html#trimFrom(java.lang.CharSequence)">trimFrom</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang">CharSequence</A>&nbsp;sequence)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a substring of the input character sequence that omits all
- characters this matcher matches from the beginning and from the end of the
- string.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/CharMatcher.html#trimLeadingFrom(java.lang.CharSequence)">trimLeadingFrom</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang">CharSequence</A>&nbsp;sequence)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a substring of the input character sequence that omits all
- characters this matcher matches from the beginning of the
- string.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/CharMatcher.html#trimTrailingFrom(java.lang.CharSequence)">trimTrailingFrom</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang">CharSequence</A>&nbsp;sequence)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a substring of the input character sequence that omits all
- characters this matcher matches from the end of the
- string.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.base.Predicate"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface com.google.common.base.<A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/base/Predicate.html#equals(java.lang.Object)">equals</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ FIELD DETAIL =========== -->
-
-<A NAME="field_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Field Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="WHITESPACE"><!-- --></A><H3>
-WHITESPACE</H3>
-<PRE>
-public static final <A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A> <B>WHITESPACE</B></PRE>
-<DL>
-<DD>Determines whether a character is whitespace according to the latest
- Unicode standard, as illustrated
- <a href="http://unicode.org/cldr/utility/list-unicodeset.jsp?a=%5Cp%7Bwhitespace%7D">here</a>.
- This is not the same definition used by other Java APIs. See a comparison
- of several definitions of "whitespace" at
- <a href="TODO">(TODO)</a>.
-
- <p><b>Note:</b> as the Unicode definition evolves, we will modify this
- constant to keep it up to date.
-<P>
-<DL>
-</DL>
-</DL>
-<HR>
-
-<A NAME="BREAKING_WHITESPACE"><!-- --></A><H3>
-BREAKING_WHITESPACE</H3>
-<PRE>
-public static final <A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A> <B>BREAKING_WHITESPACE</B></PRE>
-<DL>
-<DD>Determines whether a character is a breaking whitespace (that is,
- a whitespace which can be interpreted as a break between words
- for formatting purposes).  See <A HREF="../../../../com/google/common/base/CharMatcher.html#WHITESPACE"><CODE>WHITESPACE</CODE></A> for a discussion
- of that term.
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>tentative</b></DD>
-</DL>
-</DL>
-<HR>
-
-<A NAME="ASCII"><!-- --></A><H3>
-ASCII</H3>
-<PRE>
-public static final <A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A> <B>ASCII</B></PRE>
-<DL>
-<DD>Determines whether a character is ASCII, meaning that its code point is
- less than 128.
-<P>
-<DL>
-</DL>
-</DL>
-<HR>
-
-<A NAME="DIGIT"><!-- --></A><H3>
-DIGIT</H3>
-<PRE>
-public static final <A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A> <B>DIGIT</B></PRE>
-<DL>
-<DD>Determines whether a character is a digit according to
- <a href="http://unicode.org/cldr/utility/list-unicodeset.jsp?a=%5Cp%7Bdigit%7D">Unicode</a>.
-<P>
-<DL>
-</DL>
-</DL>
-<HR>
-
-<A NAME="JAVA_WHITESPACE"><!-- --></A><H3>
-JAVA_WHITESPACE</H3>
-<PRE>
-public static final <A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A> <B>JAVA_WHITESPACE</B></PRE>
-<DL>
-<DD>Determines whether a character is whitespace according to <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Character.html?is-external=true#isWhitespace(char)" title="class or interface in java.lang"><CODE>Java's definition</CODE></A>; it is usually preferable
- to use <A HREF="../../../../com/google/common/base/CharMatcher.html#WHITESPACE"><CODE>WHITESPACE</CODE></A>. See a comparison of several definitions of
- "whitespace" at <a href="http://go/white+space">go/white+space</a>.
-<P>
-<DL>
-</DL>
-</DL>
-<HR>
-
-<A NAME="JAVA_DIGIT"><!-- --></A><H3>
-JAVA_DIGIT</H3>
-<PRE>
-public static final <A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A> <B>JAVA_DIGIT</B></PRE>
-<DL>
-<DD>Determines whether a character is a digit according to <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Character.html?is-external=true#isDigit(char)" title="class or interface in java.lang"><CODE>Java's definition</CODE></A>. If you only care to match
- ASCII digits, you can use <code>inRange('0', '9')</code>.
-<P>
-<DL>
-</DL>
-</DL>
-<HR>
-
-<A NAME="JAVA_LETTER"><!-- --></A><H3>
-JAVA_LETTER</H3>
-<PRE>
-public static final <A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A> <B>JAVA_LETTER</B></PRE>
-<DL>
-<DD>Determines whether a character is a letter according to <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Character.html?is-external=true#isLetter(char)" title="class or interface in java.lang"><CODE>Java's definition</CODE></A>. If you only care to match
- letters of the Latin alphabet, you can use <code>inRange('a', 'z').or(inRange('A', 'Z'))</code>.
-<P>
-<DL>
-</DL>
-</DL>
-<HR>
-
-<A NAME="JAVA_LETTER_OR_DIGIT"><!-- --></A><H3>
-JAVA_LETTER_OR_DIGIT</H3>
-<PRE>
-public static final <A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A> <B>JAVA_LETTER_OR_DIGIT</B></PRE>
-<DL>
-<DD>Determines whether a character is a letter or digit according to <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Character.html?is-external=true#isLetterOrDigit(char)" title="class or interface in java.lang"><CODE>Java's definition</CODE></A>.
-<P>
-<DL>
-</DL>
-</DL>
-<HR>
-
-<A NAME="JAVA_UPPER_CASE"><!-- --></A><H3>
-JAVA_UPPER_CASE</H3>
-<PRE>
-public static final <A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A> <B>JAVA_UPPER_CASE</B></PRE>
-<DL>
-<DD>Determines whether a character is upper case according to <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Character.html?is-external=true#isUpperCase(char)" title="class or interface in java.lang"><CODE>Java's definition</CODE></A>.
-<P>
-<DL>
-</DL>
-</DL>
-<HR>
-
-<A NAME="JAVA_LOWER_CASE"><!-- --></A><H3>
-JAVA_LOWER_CASE</H3>
-<PRE>
-public static final <A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A> <B>JAVA_LOWER_CASE</B></PRE>
-<DL>
-<DD>Determines whether a character is lower case according to <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Character.html?is-external=true#isLowerCase(char)" title="class or interface in java.lang"><CODE>Java's definition</CODE></A>.
-<P>
-<DL>
-</DL>
-</DL>
-<HR>
-
-<A NAME="JAVA_ISO_CONTROL"><!-- --></A><H3>
-JAVA_ISO_CONTROL</H3>
-<PRE>
-public static final <A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A> <B>JAVA_ISO_CONTROL</B></PRE>
-<DL>
-<DD>Determines whether a character is an ISO control character according to
- <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Character.html?is-external=true#isISOControl(char)" title="class or interface in java.lang"><CODE>Character.isISOControl(char)</CODE></A>.
-<P>
-<DL>
-</DL>
-</DL>
-<HR>
-
-<A NAME="INVISIBLE"><!-- --></A><H3>
-INVISIBLE</H3>
-<PRE>
-public static final <A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A> <B>INVISIBLE</B></PRE>
-<DL>
-<DD>Determines whether a character is invisible; that is, if its Unicode
- category is any of SPACE_SEPARATOR, LINE_SEPARATOR,
- PARAGRAPH_SEPARATOR, CONTROL, FORMAT, SURROGATE, and PRIVATE_USE according
- to ICU4J.
-<P>
-<DL>
-</DL>
-</DL>
-<HR>
-
-<A NAME="SINGLE_WIDTH"><!-- --></A><H3>
-SINGLE_WIDTH</H3>
-<PRE>
-public static final <A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A> <B>SINGLE_WIDTH</B></PRE>
-<DL>
-<DD>Determines whether a character is single-width (not double-width).  When
- in doubt, this matcher errs on the side of returning <code>false</code> (that
- is, it tends to assume a character is double-width).
-
- <b>Note:</b> as the reference file evolves, we will modify this constant
- to keep it up to date.
-<P>
-<DL>
-</DL>
-</DL>
-<HR>
-
-<A NAME="ANY"><!-- --></A><H3>
-ANY</H3>
-<PRE>
-public static final <A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A> <B>ANY</B></PRE>
-<DL>
-<DD>Matches any character.
-<P>
-<DL>
-</DL>
-</DL>
-<HR>
-
-<A NAME="NONE"><!-- --></A><H3>
-NONE</H3>
-<PRE>
-public static final <A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A> <B>NONE</B></PRE>
-<DL>
-<DD>Matches no characters.
-<P>
-<DL>
-</DL>
-</DL>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="CharMatcher()"><!-- --></A><H3>
-CharMatcher</H3>
-<PRE>
-public <B>CharMatcher</B>()</PRE>
-<DL>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="is(char)"><!-- --></A><H3>
-is</H3>
-<PRE>
-public static <A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A> <B>is</B>(char&nbsp;match)</PRE>
-<DL>
-<DD>Returns a <code>char</code> matcher that matches only one specified character.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="isNot(char)"><!-- --></A><H3>
-isNot</H3>
-<PRE>
-public static <A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A> <B>isNot</B>(char&nbsp;match)</PRE>
-<DL>
-<DD>Returns a <code>char</code> matcher that matches any character except the one
- specified.
-
- <p>To negate another <code>CharMatcher</code>, use <A HREF="../../../../com/google/common/base/CharMatcher.html#negate()"><CODE>negate()</CODE></A>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="anyOf(java.lang.CharSequence)"><!-- --></A><H3>
-anyOf</H3>
-<PRE>
-public static <A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A> <B>anyOf</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang">CharSequence</A>&nbsp;sequence)</PRE>
-<DL>
-<DD>Returns a <code>char</code> matcher that matches any character present in the
- given character sequence.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="noneOf(java.lang.CharSequence)"><!-- --></A><H3>
-noneOf</H3>
-<PRE>
-public static <A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A> <B>noneOf</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang">CharSequence</A>&nbsp;sequence)</PRE>
-<DL>
-<DD>Returns a <code>char</code> matcher that matches any character not present in
- the given character sequence.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="inRange(char, char)"><!-- --></A><H3>
-inRange</H3>
-<PRE>
-public static <A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A> <B>inRange</B>(char&nbsp;startInclusive,
-                                  char&nbsp;endInclusive)</PRE>
-<DL>
-<DD>Returns a <code>char</code> matcher that matches any character in a given range
- (both endpoints are inclusive). For example, to match any lowercase letter
- of the English alphabet, use <code>CharMatcher.inRange('a', 'z')</code>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>endInclusive &lt; startInclusive</code></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="forPredicate(com.google.common.base.Predicate)"><!-- --></A><H3>
-forPredicate</H3>
-<PRE>
-public static <A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A> <B>forPredicate</B>(<A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Character.html?is-external=true" title="class or interface in java.lang">Character</A>&gt;&nbsp;predicate)</PRE>
-<DL>
-<DD>Returns a matcher with identical behavior to the given <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Character.html?is-external=true" title="class or interface in java.lang"><CODE>Character</CODE></A>-based predicate, but which operates on primitive <code>char</code>
- instances instead.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="matches(char)"><!-- --></A><H3>
-matches</H3>
-<PRE>
-public abstract boolean <B>matches</B>(char&nbsp;c)</PRE>
-<DL>
-<DD>Determines a true or false value for the given character.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="negate()"><!-- --></A><H3>
-negate</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A> <B>negate</B>()</PRE>
-<DL>
-<DD>Returns a matcher that matches any character not matched by this matcher.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="and(com.google.common.base.CharMatcher)"><!-- --></A><H3>
-and</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A> <B>and</B>(<A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>&nbsp;other)</PRE>
-<DL>
-<DD>Returns a matcher that matches any character matched by both this matcher
- and <code>other</code>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="or(com.google.common.base.CharMatcher)"><!-- --></A><H3>
-or</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A> <B>or</B>(<A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>&nbsp;other)</PRE>
-<DL>
-<DD>Returns a matcher that matches any character matched by either this matcher
- or <code>other</code>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="precomputed()"><!-- --></A><H3>
-precomputed</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A> <B>precomputed</B>()</PRE>
-<DL>
-<DD>Returns a <code>char</code> matcher functionally equivalent to this one, but
- which may be faster to query than the original; your mileage may vary.
- Precomputation takes time and is likely to be worthwhile only if the
- precomputed matcher is queried many thousands of times.
-
- <p>This method has no effect (returns <code>this</code>) when called in GWT:
- it's unclear whether a precomputed matcher is faster, but it certainly
- consumes more memory, which doesn't seem like a worthwhile tradeoff in a
- browser.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="setBits(com.google.common.base.CharMatcher.LookupTable)"><!-- --></A><H3>
-setBits</H3>
-<PRE>
-protected void <B>setBits</B>(<A HREF="../../../../com/google/common/base/CharMatcher.LookupTable.html" title="class in com.google.common.base">CharMatcher.LookupTable</A>&nbsp;table)</PRE>
-<DL>
-<DD>For use by implementors; sets the bit corresponding to each character ('\0'
- to '\uFFFF') that matches this matcher in the given bit array,
- leaving all other bits untouched.
-
- <p>The default implementation loops over every possible character value,
- invoking <A HREF="../../../../com/google/common/base/CharMatcher.html#matches(char)"><CODE>matches(char)</CODE></A> for each one.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="matchesAllOf(java.lang.CharSequence)"><!-- --></A><H3>
-matchesAllOf</H3>
-<PRE>
-public boolean <B>matchesAllOf</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang">CharSequence</A>&nbsp;sequence)</PRE>
-<DL>
-<DD>Returns <code>true</code> if a character sequence contains only matching
- characters.
-
- <p>The default implementation iterates over the sequence, invoking <A HREF="../../../../com/google/common/base/CharMatcher.html#matches(char)"><CODE>matches(char)</CODE></A> for each character, until this returns <code>false</code> or the end
- is reached.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>sequence</CODE> - the character sequence to examine, possibly empty
-<DT><B>Returns:</B><DD><code>true</code> if this matcher matches every character in the
-     sequence, including when the sequence is empty</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="matchesNoneOf(java.lang.CharSequence)"><!-- --></A><H3>
-matchesNoneOf</H3>
-<PRE>
-public boolean <B>matchesNoneOf</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang">CharSequence</A>&nbsp;sequence)</PRE>
-<DL>
-<DD>Returns <code>true</code> if a character sequence contains no matching
- characters.
-
- <p>The default implementation iterates over the sequence, invoking <A HREF="../../../../com/google/common/base/CharMatcher.html#matches(char)"><CODE>matches(char)</CODE></A> for each character, until this returns <code>false</code> or the end is
- reached.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>sequence</CODE> - the character sequence to examine, possibly empty
-<DT><B>Returns:</B><DD><code>true</code> if this matcher matches every character in the
-     sequence, including when the sequence is empty</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="indexIn(java.lang.CharSequence)"><!-- --></A><H3>
-indexIn</H3>
-<PRE>
-public int <B>indexIn</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang">CharSequence</A>&nbsp;sequence)</PRE>
-<DL>
-<DD>Returns the index of the first matching character in a character sequence,
- or <code>-1</code> if no matching character is present.
-
- <p>The default implementation iterates over the sequence in forward order
- calling <A HREF="../../../../com/google/common/base/CharMatcher.html#matches(char)"><CODE>matches(char)</CODE></A> for each character.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>sequence</CODE> - the character sequence to examine from the beginning
-<DT><B>Returns:</B><DD>an index, or <code>-1</code> if no character matches</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="indexIn(java.lang.CharSequence, int)"><!-- --></A><H3>
-indexIn</H3>
-<PRE>
-public int <B>indexIn</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang">CharSequence</A>&nbsp;sequence,
-                   int&nbsp;start)</PRE>
-<DL>
-<DD>Returns the index of the first matching character in a character sequence,
- starting from a given position, or <code>-1</code> if no character matches after
- that position.
-
- <p>The default implementation iterates over the sequence in forward order,
- beginning at <code>start</code>, calling <A HREF="../../../../com/google/common/base/CharMatcher.html#matches(char)"><CODE>matches(char)</CODE></A> for each character.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>sequence</CODE> - the character sequence to examine<DD><CODE>start</CODE> - the first index to examine; must be nonnegative and no
-     greater than <code>sequence.length()</code>
-<DT><B>Returns:</B><DD>the index of the first matching character, guaranteed to be no less
-     than <code>start</code>, or <code>-1</code> if no character matches
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IndexOutOfBoundsException.html?is-external=true" title="class or interface in java.lang">IndexOutOfBoundsException</A></CODE> - if start is negative or greater than
-     <code>sequence.length()</code></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="lastIndexIn(java.lang.CharSequence)"><!-- --></A><H3>
-lastIndexIn</H3>
-<PRE>
-public int <B>lastIndexIn</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang">CharSequence</A>&nbsp;sequence)</PRE>
-<DL>
-<DD>Returns the index of the last matching character in a character sequence,
- or <code>-1</code> if no matching character is present.
-
- <p>The default implementation iterates over the sequence in reverse order
- calling <A HREF="../../../../com/google/common/base/CharMatcher.html#matches(char)"><CODE>matches(char)</CODE></A> for each character.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>sequence</CODE> - the character sequence to examine from the end
-<DT><B>Returns:</B><DD>an index, or <code>-1</code> if no character matches</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="countIn(java.lang.CharSequence)"><!-- --></A><H3>
-countIn</H3>
-<PRE>
-public int <B>countIn</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang">CharSequence</A>&nbsp;sequence)</PRE>
-<DL>
-<DD>Returns the number of matching characters found in a character sequence.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="removeFrom(java.lang.CharSequence)"><!-- --></A><H3>
-removeFrom</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>removeFrom</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang">CharSequence</A>&nbsp;sequence)</PRE>
-<DL>
-<DD>Returns a string containing all non-matching characters of a character
- sequence, in order. For example: <pre>   <code>CharMatcher.is('a').removeFrom("bazaar")</code></pre>
-
- ... returns <code>"bzr"</code>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="retainFrom(java.lang.CharSequence)"><!-- --></A><H3>
-retainFrom</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>retainFrom</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang">CharSequence</A>&nbsp;sequence)</PRE>
-<DL>
-<DD>Returns a string containing all matching characters of a character
- sequence, in order. For example: <pre>   <code>CharMatcher.is('a').retainFrom("bazaar")</code></pre>
-
- ... returns <code>"aaa"</code>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="replaceFrom(java.lang.CharSequence, char)"><!-- --></A><H3>
-replaceFrom</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>replaceFrom</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang">CharSequence</A>&nbsp;sequence,
-                          char&nbsp;replacement)</PRE>
-<DL>
-<DD>Returns a string copy of the input character sequence, with each character
- that matches this matcher replaced by a given replacement character. For
- example: <pre>   <code>CharMatcher.is('a').replaceFrom("radar", 'o')</code></pre>
-
- ... returns <code>"rodor"</code>.
-
- <p>The default implementation uses <A HREF="../../../../com/google/common/base/CharMatcher.html#indexIn(java.lang.CharSequence)"><CODE>indexIn(CharSequence)</CODE></A> to find
- the first matching character, then iterates the remainder of the sequence
- calling <A HREF="../../../../com/google/common/base/CharMatcher.html#matches(char)"><CODE>matches(char)</CODE></A> for each character.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>sequence</CODE> - the character sequence to replace matching characters in<DD><CODE>replacement</CODE> - the character to append to the result string in place of
-     each matching character in <code>sequence</code>
-<DT><B>Returns:</B><DD>the new string</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="replaceFrom(java.lang.CharSequence, java.lang.CharSequence)"><!-- --></A><H3>
-replaceFrom</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>replaceFrom</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang">CharSequence</A>&nbsp;sequence,
-                          <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang">CharSequence</A>&nbsp;replacement)</PRE>
-<DL>
-<DD>Returns a string copy of the input character sequence, with each character
- that matches this matcher replaced by a given replacement sequence. For
- example: <pre>   <code>CharMatcher.is('a').replaceFrom("yaha", "oo")</code></pre>
-
- ... returns <code>"yoohoo"</code>.
-
- <p><b>Note:</b> If the replacement is a fixed string with only one character,
- you are better off calling <A HREF="../../../../com/google/common/base/CharMatcher.html#replaceFrom(java.lang.CharSequence, char)"><CODE>replaceFrom(CharSequence, char)</CODE></A> directly.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>sequence</CODE> - the character sequence to replace matching characters in<DD><CODE>replacement</CODE> - the characters to append to the result string in place
-     of each matching character in <code>sequence</code>
-<DT><B>Returns:</B><DD>the new string</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="trimFrom(java.lang.CharSequence)"><!-- --></A><H3>
-trimFrom</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>trimFrom</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang">CharSequence</A>&nbsp;sequence)</PRE>
-<DL>
-<DD>Returns a substring of the input character sequence that omits all
- characters this matcher matches from the beginning and from the end of the
- string. For example: <pre> <code>CharMatcher.anyOf("ab").trimFrom("abacatbab")</code></pre>
-
- ... returns <code>"cat"</code>.
-
- <p>Note that<pre>   <code>CharMatcher.inRange('\0', ' ').trimFrom(str)</code></pre>
-
- ... is equivalent to <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true#trim()" title="class or interface in java.lang"><CODE>String.trim()</CODE></A>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="trimLeadingFrom(java.lang.CharSequence)"><!-- --></A><H3>
-trimLeadingFrom</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>trimLeadingFrom</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang">CharSequence</A>&nbsp;sequence)</PRE>
-<DL>
-<DD>Returns a substring of the input character sequence that omits all
- characters this matcher matches from the beginning of the
- string. For example: <pre> <code>CharMatcher.anyOf("ab").trimLeadingFrom("abacatbab")</code></pre>
-
- ... returns <code>"catbab"</code>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="trimTrailingFrom(java.lang.CharSequence)"><!-- --></A><H3>
-trimTrailingFrom</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>trimTrailingFrom</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang">CharSequence</A>&nbsp;sequence)</PRE>
-<DL>
-<DD>Returns a substring of the input character sequence that omits all
- characters this matcher matches from the end of the
- string. For example: <pre> <code>CharMatcher.anyOf("ab").trimTrailingFrom("abacatbab")</code></pre>
-
- ... returns <code>"abacat"</code>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="collapseFrom(java.lang.CharSequence, char)"><!-- --></A><H3>
-collapseFrom</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>collapseFrom</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang">CharSequence</A>&nbsp;sequence,
-                           char&nbsp;replacement)</PRE>
-<DL>
-<DD>Returns a string copy of the input character sequence, with each group of
- consecutive characters that match this matcher replaced by a single
- replacement character. For example: <pre>   <code>CharMatcher.anyOf("eko").collapseFrom("bookkeeper", '-')</code></pre>
-
- ... returns <code>"b-p-r"</code>.
-
- <p>The default implementation uses <A HREF="../../../../com/google/common/base/CharMatcher.html#indexIn(java.lang.CharSequence)"><CODE>indexIn(CharSequence)</CODE></A> to find
- the first matching character, then iterates the remainder of the sequence
- calling <A HREF="../../../../com/google/common/base/CharMatcher.html#matches(char)"><CODE>matches(char)</CODE></A> for each character.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>sequence</CODE> - the character sequence to replace matching groups of
-     characters in<DD><CODE>replacement</CODE> - the character to append to the result string in place of
-     each group of matching characters in <code>sequence</code>
-<DT><B>Returns:</B><DD>the new string</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="trimAndCollapseFrom(java.lang.CharSequence, char)"><!-- --></A><H3>
-trimAndCollapseFrom</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>trimAndCollapseFrom</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang">CharSequence</A>&nbsp;sequence,
-                                  char&nbsp;replacement)</PRE>
-<DL>
-<DD>Collapses groups of matching characters exactly as <A HREF="../../../../com/google/common/base/CharMatcher.html#collapseFrom(java.lang.CharSequence, char)"><CODE>collapseFrom(java.lang.CharSequence, char)</CODE></A>
- does, except that groups of matching characters at the start or end of the
- sequence are removed without replacement.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="apply(java.lang.Character)"><!-- --></A><H3>
-apply</H3>
-<PRE>
-public boolean <B>apply</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Character.html?is-external=true" title="class or interface in java.lang">Character</A>&nbsp;character)</PRE>
-<DL>
-<DD>Returns <code>true</code> if this matcher matches the given character.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/base/Predicate.html#apply(T)">apply</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Character.html?is-external=true" title="class or interface in java.lang">Character</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>character</CODE> - the input that the predicate should act on
-<DT><B>Returns:</B><DD>the value of this predicate when applied to the input <code>t</code>
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>character</code> is null</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/CharMatcher.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/base/CaseFormat.html" title="enum in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/base/CharMatcher.LookupTable.html" title="class in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/base/CharMatcher.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="CharMatcher.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/base/Charsets.html b/javadoc/com/google/common/base/Charsets.html
deleted file mode 100644
index 71344e0..0000000
--- a/javadoc/com/google/common/base/Charsets.html
+++ /dev/null
@@ -1,344 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:56 PST 2010 -->
-<TITLE>
-Charsets (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Charsets (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Charsets.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/base/CharMatcher.LookupTable.html" title="class in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/base/Defaults.html" title="class in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/base/Charsets.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Charsets.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_java.lang.Object">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;METHOD</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.base</FONT>
-<BR>
-Class Charsets</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.base.Charsets</B>
-</PRE>
-<HR>
-<DL>
-<DT><PRE>public final class <B>Charsets</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
-</PRE>
-
-<P>
-Contains constant definitions for the six standard <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset"><CODE>Charset</CODE></A>
- instances, which are guaranteed to be supported by all Java platform
- implementations.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2009.09.15 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Mike Bostock</DD>
-</DL>
-<HR>
-
-<P>
-<!-- =========== FIELD SUMMARY =========== -->
-
-<A NAME="field_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Field Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Charsets.html#ISO_8859_1">ISO_8859_1</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ISO-8859-1.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Charsets.html#US_ASCII">US_ASCII</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;US-ASCII: seven-bit ASCII, a.k.a.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Charsets.html#UTF_16">UTF_16</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UTF-16: sixteen-bit UCS Transformation Format, byte order identified by an
- optional byte-order mark.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Charsets.html#UTF_16BE">UTF_16BE</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UTF-16BE: sixteen-bit UCS Transformation Format, big-endian byte order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Charsets.html#UTF_16LE">UTF_16LE</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UTF-16LE: sixteen-bit UCS Transformation Format, little-endian byte order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Charsets.html#UTF_8">UTF_8</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UTF-8: eight-bit UCS Transformation Format.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ FIELD DETAIL =========== -->
-
-<A NAME="field_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Field Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="US_ASCII"><!-- --></A><H3>
-US_ASCII</H3>
-<PRE>
-public static final <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A> <B>US_ASCII</B></PRE>
-<DL>
-<DD>US-ASCII: seven-bit ASCII, a.k.a. ISO646-US, a.k.a the Basic Latin block of
- the Unicode character set.
-<P>
-<DL>
-</DL>
-</DL>
-<HR>
-
-<A NAME="ISO_8859_1"><!-- --></A><H3>
-ISO_8859_1</H3>
-<PRE>
-public static final <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A> <B>ISO_8859_1</B></PRE>
-<DL>
-<DD>ISO-8859-1. ISO Latin Alphabet No. 1, a.k.a. ISO-LATIN-1.
-<P>
-<DL>
-</DL>
-</DL>
-<HR>
-
-<A NAME="UTF_8"><!-- --></A><H3>
-UTF_8</H3>
-<PRE>
-public static final <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A> <B>UTF_8</B></PRE>
-<DL>
-<DD>UTF-8: eight-bit UCS Transformation Format.
-<P>
-<DL>
-</DL>
-</DL>
-<HR>
-
-<A NAME="UTF_16BE"><!-- --></A><H3>
-UTF_16BE</H3>
-<PRE>
-public static final <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A> <B>UTF_16BE</B></PRE>
-<DL>
-<DD>UTF-16BE: sixteen-bit UCS Transformation Format, big-endian byte order.
-<P>
-<DL>
-</DL>
-</DL>
-<HR>
-
-<A NAME="UTF_16LE"><!-- --></A><H3>
-UTF_16LE</H3>
-<PRE>
-public static final <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A> <B>UTF_16LE</B></PRE>
-<DL>
-<DD>UTF-16LE: sixteen-bit UCS Transformation Format, little-endian byte order.
-<P>
-<DL>
-</DL>
-</DL>
-<HR>
-
-<A NAME="UTF_16"><!-- --></A><H3>
-UTF_16</H3>
-<PRE>
-public static final <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A> <B>UTF_16</B></PRE>
-<DL>
-<DD>UTF-16: sixteen-bit UCS Transformation Format, byte order identified by an
- optional byte-order mark.
-<P>
-<DL>
-</DL>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Charsets.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/base/CharMatcher.LookupTable.html" title="class in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/base/Defaults.html" title="class in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/base/Charsets.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Charsets.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_java.lang.Object">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;METHOD</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/base/Defaults.html b/javadoc/com/google/common/base/Defaults.html
deleted file mode 100644
index 81cfe4d..0000000
--- a/javadoc/com/google/common/base/Defaults.html
+++ /dev/null
@@ -1,238 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:56 PST 2010 -->
-<TITLE>
-Defaults (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Defaults (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Defaults.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/base/Charsets.html" title="class in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/base/FinalizablePhantomReference.html" title="class in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/base/Defaults.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Defaults.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.base</FONT>
-<BR>
-Class Defaults</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.base.Defaults</B>
-</PRE>
-<HR>
-<DL>
-<DT><PRE>public final class <B>Defaults</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
-</PRE>
-
-<P>
-This class provides default values for all Java types, as defined by the JLS.
-<P>
-
-<P>
-<DL>
-<DT><B>Author:</B></DT>
-  <DD>Ben Yu</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; T</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Defaults.html#defaultValue(java.lang.Class)">defaultValue</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the default value of <code>type</code> as defined by JLS --- <code>0</code>
- for numbers, <code>false</code> for <code>boolean</code> and <code>'\0'</code> for <code>char</code>.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="defaultValue(java.lang.Class)"><!-- --></A><H3>
-defaultValue</H3>
-<PRE>
-public static &lt;T&gt; T <B>defaultValue</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type)</PRE>
-<DL>
-<DD>Returns the default value of <code>type</code> as defined by JLS --- <code>0</code>
- for numbers, <code>false</code> for <code>boolean</code> and <code>'\0'</code> for <code>char</code>. For non-primitive types and <code>void</code>, null is returned.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Defaults.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/base/Charsets.html" title="class in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/base/FinalizablePhantomReference.html" title="class in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/base/Defaults.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Defaults.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/base/FinalizablePhantomReference.html b/javadoc/com/google/common/base/FinalizablePhantomReference.html
deleted file mode 100644
index abb4890..0000000
--- a/javadoc/com/google/common/base/FinalizablePhantomReference.html
+++ /dev/null
@@ -1,279 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:56 PST 2010 -->
-<TITLE>
-FinalizablePhantomReference (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="FinalizablePhantomReference (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/FinalizablePhantomReference.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/base/Defaults.html" title="class in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/base/FinalizablePhantomReference.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="FinalizablePhantomReference.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_java.lang.ref.PhantomReference">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;METHOD</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.base</FONT>
-<BR>
-Class FinalizablePhantomReference&lt;T&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/Reference.html?is-external=true" title="class or interface in java.lang.ref">java.lang.ref.Reference</A>&lt;T&gt;
-      <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/PhantomReference.html?is-external=true" title="class or interface in java.lang.ref">java.lang.ref.PhantomReference</A>&lt;T&gt;
-          <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.base.FinalizablePhantomReference&lt;T&gt;</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base">FinalizableReference</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public abstract class <B>FinalizablePhantomReference&lt;T&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/PhantomReference.html?is-external=true" title="class or interface in java.lang.ref">PhantomReference</A>&lt;T&gt;<DT>implements <A HREF="../../../../com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base">FinalizableReference</A></DL>
-</PRE>
-
-<P>
-Phantom reference with a <code>finalizeReferent()</code> method which a
- background thread invokes after the garbage collector reclaims the
- referent. This is a simpler alternative to using a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/ReferenceQueue.html?is-external=true" title="class or interface in java.lang.ref"><CODE>ReferenceQueue</CODE></A>.
-
- <p>Unlike a normal phantom reference, this reference will be cleared
- automatically.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Bob Lee</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected </CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/FinalizablePhantomReference.html#FinalizablePhantomReference(T, com.google.common.base.FinalizableReferenceQueue)">FinalizablePhantomReference</A></B>(<A HREF="../../../../com/google/common/base/FinalizablePhantomReference.html" title="type parameter in FinalizablePhantomReference">T</A>&nbsp;referent,
-                            <A HREF="../../../../com/google/common/base/FinalizableReferenceQueue.html" title="class in com.google.common.base">FinalizableReferenceQueue</A>&nbsp;queue)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a new finalizable phantom reference.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.ref.PhantomReference"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.ref.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/PhantomReference.html?is-external=true" title="class or interface in java.lang.ref">PhantomReference</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/PhantomReference.html?is-external=true#get()" title="class or interface in java.lang.ref">get</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.ref.Reference"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.ref.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/Reference.html?is-external=true" title="class or interface in java.lang.ref">Reference</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/Reference.html?is-external=true#clear()" title="class or interface in java.lang.ref">clear</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/Reference.html?is-external=true#enqueue()" title="class or interface in java.lang.ref">enqueue</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/Reference.html?is-external=true#isEnqueued()" title="class or interface in java.lang.ref">isEnqueued</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.base.FinalizableReference"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface com.google.common.base.<A HREF="../../../../com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base">FinalizableReference</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/base/FinalizableReference.html#finalizeReferent()">finalizeReferent</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="FinalizablePhantomReference(java.lang.Object,com.google.common.base.FinalizableReferenceQueue)"><!-- --></A><A NAME="FinalizablePhantomReference(T, com.google.common.base.FinalizableReferenceQueue)"><!-- --></A><H3>
-FinalizablePhantomReference</H3>
-<PRE>
-protected <B>FinalizablePhantomReference</B>(<A HREF="../../../../com/google/common/base/FinalizablePhantomReference.html" title="type parameter in FinalizablePhantomReference">T</A>&nbsp;referent,
-                                      <A HREF="../../../../com/google/common/base/FinalizableReferenceQueue.html" title="class in com.google.common.base">FinalizableReferenceQueue</A>&nbsp;queue)</PRE>
-<DL>
-<DD>Constructs a new finalizable phantom reference.
-<P>
-<DL>
-<DT><B>Parameters:</B><DD><CODE>referent</CODE> - to phantom reference<DD><CODE>queue</CODE> - that should finalize the referent</DL>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/FinalizablePhantomReference.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/base/Defaults.html" title="class in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/base/FinalizablePhantomReference.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="FinalizablePhantomReference.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_java.lang.ref.PhantomReference">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;METHOD</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/base/FinalizableReference.html b/javadoc/com/google/common/base/FinalizableReference.html
deleted file mode 100644
index 96da8d9..0000000
--- a/javadoc/com/google/common/base/FinalizableReference.html
+++ /dev/null
@@ -1,228 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:56 PST 2010 -->
-<TITLE>
-FinalizableReference (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="FinalizableReference (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/FinalizableReference.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/base/FinalizablePhantomReference.html" title="class in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/base/FinalizableReferenceQueue.html" title="class in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/base/FinalizableReference.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="FinalizableReference.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.base</FONT>
-<BR>
-Interface FinalizableReference</H2>
-<DL>
-<DT><B>All Known Implementing Classes:</B> <DD><A HREF="../../../../com/google/common/base/FinalizablePhantomReference.html" title="class in com.google.common.base">FinalizablePhantomReference</A>, <A HREF="../../../../com/google/common/base/FinalizableSoftReference.html" title="class in com.google.common.base">FinalizableSoftReference</A>, <A HREF="../../../../com/google/common/base/FinalizableWeakReference.html" title="class in com.google.common.base">FinalizableWeakReference</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public interface <B>FinalizableReference</B></DL>
-</PRE>
-
-<P>
-Implemented by references that have code to run after garbage collection of
- their referents.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Bob Lee</DD>
-<DT><B>See Also:</B><DD><A HREF="../../../../com/google/common/base/FinalizableReferenceQueue.html" title="class in com.google.common.base"><CODE>FinalizableReferenceQueue</CODE></A></DL>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/FinalizableReference.html#finalizeReferent()">finalizeReferent</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Invoked on a background thread after the referent has been garbage
- collected unless security restrictions prevented starting a background
- thread, in which case this method is invoked when new references
- are created.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="finalizeReferent()"><!-- --></A><H3>
-finalizeReferent</H3>
-<PRE>
-void <B>finalizeReferent</B>()</PRE>
-<DL>
-<DD>Invoked on a background thread after the referent has been garbage
- collected unless security restrictions prevented starting a background
- thread, in which case this method is invoked when new references
- are created.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/FinalizableReference.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/base/FinalizablePhantomReference.html" title="class in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/base/FinalizableReferenceQueue.html" title="class in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/base/FinalizableReference.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="FinalizableReference.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/base/FinalizableReferenceQueue.html b/javadoc/com/google/common/base/FinalizableReferenceQueue.html
deleted file mode 100644
index 94b2170..0000000
--- a/javadoc/com/google/common/base/FinalizableReferenceQueue.html
+++ /dev/null
@@ -1,243 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:56 PST 2010 -->
-<TITLE>
-FinalizableReferenceQueue (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="FinalizableReferenceQueue (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/FinalizableReferenceQueue.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/base/FinalizableSoftReference.html" title="class in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/base/FinalizableReferenceQueue.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="FinalizableReferenceQueue.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_java.lang.Object">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;METHOD</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.base</FONT>
-<BR>
-Class FinalizableReferenceQueue</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.base.FinalizableReferenceQueue</B>
-</PRE>
-<HR>
-<DL>
-<DT><PRE>public class <B>FinalizableReferenceQueue</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
-</PRE>
-
-<P>
-A reference queue with an associated background thread that dequeues
- references and invokes <A HREF="../../../../com/google/common/base/FinalizableReference.html#finalizeReferent()"><CODE>FinalizableReference.finalizeReferent()</CODE></A> on
- them.
-
- <p>Keep a strong reference to this object until all of the associated
- referents have been finalized. If this object is garbage collected earlier,
- the backing thread will not invoke <code>finalizeReferent()</code> on the
- remaining references.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Bob Lee</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/google/common/base/FinalizableReferenceQueue.html#FinalizableReferenceQueue()">FinalizableReferenceQueue</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a new queue.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="FinalizableReferenceQueue()"><!-- --></A><H3>
-FinalizableReferenceQueue</H3>
-<PRE>
-public <B>FinalizableReferenceQueue</B>()</PRE>
-<DL>
-<DD>Constructs a new queue.
-<P>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/FinalizableReferenceQueue.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/base/FinalizableSoftReference.html" title="class in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/base/FinalizableReferenceQueue.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="FinalizableReferenceQueue.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_java.lang.Object">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;METHOD</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/base/FinalizableSoftReference.html b/javadoc/com/google/common/base/FinalizableSoftReference.html
deleted file mode 100644
index e7ac499..0000000
--- a/javadoc/com/google/common/base/FinalizableSoftReference.html
+++ /dev/null
@@ -1,276 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:56 PST 2010 -->
-<TITLE>
-FinalizableSoftReference (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="FinalizableSoftReference (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/FinalizableSoftReference.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/base/FinalizableReferenceQueue.html" title="class in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/base/FinalizableWeakReference.html" title="class in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/base/FinalizableSoftReference.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="FinalizableSoftReference.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_java.lang.ref.SoftReference">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;METHOD</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.base</FONT>
-<BR>
-Class FinalizableSoftReference&lt;T&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/Reference.html?is-external=true" title="class or interface in java.lang.ref">java.lang.ref.Reference</A>&lt;T&gt;
-      <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/SoftReference.html?is-external=true" title="class or interface in java.lang.ref">java.lang.ref.SoftReference</A>&lt;T&gt;
-          <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.base.FinalizableSoftReference&lt;T&gt;</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base">FinalizableReference</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public abstract class <B>FinalizableSoftReference&lt;T&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/SoftReference.html?is-external=true" title="class or interface in java.lang.ref">SoftReference</A>&lt;T&gt;<DT>implements <A HREF="../../../../com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base">FinalizableReference</A></DL>
-</PRE>
-
-<P>
-Soft reference with a <code>finalizeReferent()</code> method which a background
- thread invokes after the garbage collector reclaims the referent. This is a
- simpler alternative to using a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/ReferenceQueue.html?is-external=true" title="class or interface in java.lang.ref"><CODE>ReferenceQueue</CODE></A>.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Bob Lee</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected </CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/FinalizableSoftReference.html#FinalizableSoftReference(T, com.google.common.base.FinalizableReferenceQueue)">FinalizableSoftReference</A></B>(<A HREF="../../../../com/google/common/base/FinalizableSoftReference.html" title="type parameter in FinalizableSoftReference">T</A>&nbsp;referent,
-                         <A HREF="../../../../com/google/common/base/FinalizableReferenceQueue.html" title="class in com.google.common.base">FinalizableReferenceQueue</A>&nbsp;queue)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a new finalizable soft reference.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.ref.SoftReference"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.ref.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/SoftReference.html?is-external=true" title="class or interface in java.lang.ref">SoftReference</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/SoftReference.html?is-external=true#get()" title="class or interface in java.lang.ref">get</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.ref.Reference"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.ref.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/Reference.html?is-external=true" title="class or interface in java.lang.ref">Reference</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/Reference.html?is-external=true#clear()" title="class or interface in java.lang.ref">clear</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/Reference.html?is-external=true#enqueue()" title="class or interface in java.lang.ref">enqueue</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/Reference.html?is-external=true#isEnqueued()" title="class or interface in java.lang.ref">isEnqueued</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.base.FinalizableReference"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface com.google.common.base.<A HREF="../../../../com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base">FinalizableReference</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/base/FinalizableReference.html#finalizeReferent()">finalizeReferent</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="FinalizableSoftReference(java.lang.Object,com.google.common.base.FinalizableReferenceQueue)"><!-- --></A><A NAME="FinalizableSoftReference(T, com.google.common.base.FinalizableReferenceQueue)"><!-- --></A><H3>
-FinalizableSoftReference</H3>
-<PRE>
-protected <B>FinalizableSoftReference</B>(<A HREF="../../../../com/google/common/base/FinalizableSoftReference.html" title="type parameter in FinalizableSoftReference">T</A>&nbsp;referent,
-                                   <A HREF="../../../../com/google/common/base/FinalizableReferenceQueue.html" title="class in com.google.common.base">FinalizableReferenceQueue</A>&nbsp;queue)</PRE>
-<DL>
-<DD>Constructs a new finalizable soft reference.
-<P>
-<DL>
-<DT><B>Parameters:</B><DD><CODE>referent</CODE> - to softly reference<DD><CODE>queue</CODE> - that should finalize the referent</DL>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/FinalizableSoftReference.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/base/FinalizableReferenceQueue.html" title="class in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/base/FinalizableWeakReference.html" title="class in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/base/FinalizableSoftReference.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="FinalizableSoftReference.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_java.lang.ref.SoftReference">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;METHOD</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/base/FinalizableWeakReference.html b/javadoc/com/google/common/base/FinalizableWeakReference.html
deleted file mode 100644
index d783461..0000000
--- a/javadoc/com/google/common/base/FinalizableWeakReference.html
+++ /dev/null
@@ -1,267 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:56 PST 2010 -->
-<TITLE>
-FinalizableWeakReference (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="FinalizableWeakReference (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/FinalizableWeakReference.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/base/FinalizableSoftReference.html" title="class in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/base/FinalizableWeakReference.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="FinalizableWeakReference.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_java.lang.ref.Reference">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;METHOD</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.base</FONT>
-<BR>
-Class FinalizableWeakReference&lt;T&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/Reference.html?is-external=true" title="class or interface in java.lang.ref">java.lang.ref.Reference</A>&lt;T&gt;
-      <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/WeakReference.html?is-external=true" title="class or interface in java.lang.ref">java.lang.ref.WeakReference</A>&lt;T&gt;
-          <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.base.FinalizableWeakReference&lt;T&gt;</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base">FinalizableReference</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public abstract class <B>FinalizableWeakReference&lt;T&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/WeakReference.html?is-external=true" title="class or interface in java.lang.ref">WeakReference</A>&lt;T&gt;<DT>implements <A HREF="../../../../com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base">FinalizableReference</A></DL>
-</PRE>
-
-<P>
-Weak reference with a <code>finalizeReferent()</code> method which a background
- thread invokes after the garbage collector reclaims the referent. This is a
- simpler alternative to using a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/ReferenceQueue.html?is-external=true" title="class or interface in java.lang.ref"><CODE>ReferenceQueue</CODE></A>.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Bob Lee</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected </CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/FinalizableWeakReference.html#FinalizableWeakReference(T, com.google.common.base.FinalizableReferenceQueue)">FinalizableWeakReference</A></B>(<A HREF="../../../../com/google/common/base/FinalizableWeakReference.html" title="type parameter in FinalizableWeakReference">T</A>&nbsp;referent,
-                         <A HREF="../../../../com/google/common/base/FinalizableReferenceQueue.html" title="class in com.google.common.base">FinalizableReferenceQueue</A>&nbsp;queue)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a new finalizable weak reference.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.ref.Reference"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.ref.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/Reference.html?is-external=true" title="class or interface in java.lang.ref">Reference</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/Reference.html?is-external=true#clear()" title="class or interface in java.lang.ref">clear</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/Reference.html?is-external=true#enqueue()" title="class or interface in java.lang.ref">enqueue</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/Reference.html?is-external=true#get()" title="class or interface in java.lang.ref">get</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/Reference.html?is-external=true#isEnqueued()" title="class or interface in java.lang.ref">isEnqueued</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.base.FinalizableReference"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface com.google.common.base.<A HREF="../../../../com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base">FinalizableReference</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/base/FinalizableReference.html#finalizeReferent()">finalizeReferent</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="FinalizableWeakReference(java.lang.Object,com.google.common.base.FinalizableReferenceQueue)"><!-- --></A><A NAME="FinalizableWeakReference(T, com.google.common.base.FinalizableReferenceQueue)"><!-- --></A><H3>
-FinalizableWeakReference</H3>
-<PRE>
-protected <B>FinalizableWeakReference</B>(<A HREF="../../../../com/google/common/base/FinalizableWeakReference.html" title="type parameter in FinalizableWeakReference">T</A>&nbsp;referent,
-                                   <A HREF="../../../../com/google/common/base/FinalizableReferenceQueue.html" title="class in com.google.common.base">FinalizableReferenceQueue</A>&nbsp;queue)</PRE>
-<DL>
-<DD>Constructs a new finalizable weak reference.
-<P>
-<DL>
-<DT><B>Parameters:</B><DD><CODE>referent</CODE> - to weakly reference<DD><CODE>queue</CODE> - that should finalize the referent</DL>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/FinalizableWeakReference.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/base/FinalizableSoftReference.html" title="class in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/base/FinalizableWeakReference.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="FinalizableWeakReference.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_java.lang.ref.Reference">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;METHOD</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/base/Function.html b/javadoc/com/google/common/base/Function.html
deleted file mode 100644
index a9614a0..0000000
--- a/javadoc/com/google/common/base/Function.html
+++ /dev/null
@@ -1,269 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:56 PST 2010 -->
-<TITLE>
-Function (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Function (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Function.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/base/FinalizableWeakReference.html" title="class in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/base/Functions.html" title="class in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/base/Function.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Function.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.base</FONT>
-<BR>
-Interface Function&lt;F,T&gt;</H2>
-<DL>
-<DT><DT><B>Type Parameters:</B><DD><CODE>F</CODE> - the type of the function input<DD><CODE>T</CODE> - the type of the function output</DL>
-<HR>
-<DL>
-<DT><PRE>public interface <B>Function&lt;F,T&gt;</B></DL>
-</PRE>
-
-<P>
-A transformation from one object to another. For example, a
- <code>StringToIntegerFunction</code> may implement
- <code>Function&lt;String,Integer&gt;</code> and transform integers in
- <code>String</code> format to <code>Integer</code> format.
-
- <p>The transformation on the source object does not necessarily result in
- an object of a different type.  For example, a
- <code>FarenheitToCelsiusFunction</code> may implement
- <code>Function&lt;Float,Float&gt;</code>.
-
- <p>Implementations which may cause side effects upon evaluation are strongly
- encouraged to state this fact clearly in their API documentation.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Kevin Bourrillion, Scott Bonneau</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/base/Function.html" title="type parameter in Function">T</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Function.html#apply(F)">apply</A></B>(<A HREF="../../../../com/google/common/base/Function.html" title="type parameter in Function">F</A>&nbsp;from)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Applies the function to an object of type <code>F</code>, resulting in an object
- of type <code>T</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Function.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;obj)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Indicates whether some other object is equal to this <code>Function</code>.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="apply(java.lang.Object)"><!-- --></A><A NAME="apply(F)"><!-- --></A><H3>
-apply</H3>
-<PRE>
-<A HREF="../../../../com/google/common/base/Function.html" title="type parameter in Function">T</A> <B>apply</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-        <A HREF="../../../../com/google/common/base/Function.html" title="type parameter in Function">F</A>&nbsp;from)</PRE>
-<DL>
-<DD>Applies the function to an object of type <code>F</code>, resulting in an object
- of type <code>T</code>.  Note that types <code>F</code> and <code>T</code> may or may not
- be the same.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>from</CODE> - the source object
-<DT><B>Returns:</B><DD>the resulting object</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
-equals</H3>
-<PRE>
-boolean <B>equals</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-               <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;obj)</PRE>
-<DL>
-<DD>Indicates whether some other object is equal to this <code>Function</code>.
- This method can return <code>true</code> <i>only</i> if the specified object is
- also a <code>Function</code> and, for every input object <code>o</code>, it returns
- exactly the same value.  Thus, <code>function1.equals(function2)</code> implies
- that either <code>function1.apply(o)</code> and <code>function2.apply(o)</code> are
- both null, or <code>function1.apply(o).equals(function2.apply(o))</code>.
-
- <p>Note that it is always safe <em>not</em> to override
- <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Function.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/base/FinalizableWeakReference.html" title="class in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/base/Functions.html" title="class in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/base/Function.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Function.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/base/Functions.html b/javadoc/com/google/common/base/Functions.html
deleted file mode 100644
index 861dc8c..0000000
--- a/javadoc/com/google/common/base/Functions.html
+++ /dev/null
@@ -1,423 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:56 PST 2010 -->
-<TITLE>
-Functions (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Functions (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Functions.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/base/Joiner.html" title="class in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/base/Functions.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Functions.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.base</FONT>
-<BR>
-Class Functions</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.base.Functions</B>
-</PRE>
-<HR>
-<DL>
-<DT><PRE>public final class <B>Functions</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
-</PRE>
-
-<P>
-Useful functions.
-
- <p>All methods returns serializable functions as long as they're given
- serializable parameters.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Mike Bostock, Vlad Patryshev, Jared Levy</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;A,B,C&gt; <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;A,C&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Functions.html#compose(com.google.common.base.Function, com.google.common.base.Function)">compose</A></B>(<A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;B,C&gt;&nbsp;g,
-        <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;A,? extends B&gt;&nbsp;f)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the composition of two functions.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>,E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Functions.html#constant(E)">constant</A></B>(E&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a function that returns <code>value</code> for any input.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Functions.html#forMap(java.util.Map, V)">forMap</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,? extends V&gt;&nbsp;map,
-       V&nbsp;defaultValue)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a function which performs a map lookup with a default value.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Functions.html#forMap(java.util.Map)">forMap</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;&nbsp;map)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a function which performs a map lookup.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;T,<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</A>&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Functions.html#forPredicate(com.google.common.base.Predicate)">forPredicate</A></B>(<A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;&nbsp;predicate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a function that returns the same boolean output as the given
- predicate for all inputs.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;E,E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Functions.html#identity()">identity</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the identity function.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Functions.html#toStringFunction()">toStringFunction</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a function that calls <code>toString()</code> on its argument.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="toStringFunction()"><!-- --></A><H3>
-toStringFunction</H3>
-<PRE>
-public static <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&gt; <B>toStringFunction</B>()</PRE>
-<DL>
-<DD>Returns a function that calls <code>toString()</code> on its argument. The
- function does not accept nulls; it will throw a
- <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang"><CODE>NullPointerException</CODE></A> when applied to <code>null</code>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="identity()"><!-- --></A><H3>
-identity</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;E,E&gt; <B>identity</B>()</PRE>
-<DL>
-<DD>Returns the identity function.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="forMap(java.util.Map)"><!-- --></A><H3>
-forMap</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;K,V&gt; <B>forMap</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;&nbsp;map)</PRE>
-<DL>
-<DD>Returns a function which performs a map lookup. The returned function
- throws an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang"><CODE>IllegalArgumentException</CODE></A> if given a key that does not
- exist in the map.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="forMap(java.util.Map,java.lang.Object)"><!-- --></A><A NAME="forMap(java.util.Map, V)"><!-- --></A><H3>
-forMap</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;K,V&gt; <B>forMap</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,? extends V&gt;&nbsp;map,
-                                         <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                                         V&nbsp;defaultValue)</PRE>
-<DL>
-<DD>Returns a function which performs a map lookup with a default value. The
- function created by this method returns <code>defaultValue</code> for all
- inputs that do not belong to the map's key set.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>map</CODE> - source map that determines the function behavior<DD><CODE>defaultValue</CODE> - the value to return for inputs that aren't map keys
-<DT><B>Returns:</B><DD>function that returns <code>map.get(a)</code> when <code>a</code> is a key,
-     or <code>defaultValue</code> otherwise</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="compose(com.google.common.base.Function, com.google.common.base.Function)"><!-- --></A><H3>
-compose</H3>
-<PRE>
-public static &lt;A,B,C&gt; <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;A,C&gt; <B>compose</B>(<A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;B,C&gt;&nbsp;g,
-                                            <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;A,? extends B&gt;&nbsp;f)</PRE>
-<DL>
-<DD>Returns the composition of two functions. For <code>f: A-&gt;B</code> and
- <code>g: B-&gt;C</code>, composition is defined as the function h such that
- <code>h(a) == g(f(a))</code> for each <code>a</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>g</CODE> - the second function to apply<DD><CODE>f</CODE> - the first function to apply
-<DT><B>Returns:</B><DD>the composition of <code>f</code> and <code>g</code><DT><B>See Also:</B><DD><a href="//en.wikipedia.org/wiki/Function_composition">
- function composition</a></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="forPredicate(com.google.common.base.Predicate)"><!-- --></A><H3>
-forPredicate</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;T,<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</A>&gt; <B>forPredicate</B>(<A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;&nbsp;predicate)</PRE>
-<DL>
-<DD>Creates a function that returns the same boolean output as the given
- predicate for all inputs.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="constant(java.lang.Object)"><!-- --></A><A NAME="constant(E)"><!-- --></A><H3>
-constant</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>,E&gt; <B>constant</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                                              E&nbsp;value)</PRE>
-<DL>
-<DD>Creates a function that returns <code>value</code> for any input.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>value</CODE> - the constant value for the function to return
-<DT><B>Returns:</B><DD>a function that always returns <code>value</code></DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Functions.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/base/Joiner.html" title="class in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/base/Functions.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Functions.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/base/Joiner.MapJoiner.html b/javadoc/com/google/common/base/Joiner.MapJoiner.html
deleted file mode 100644
index a3af1b2..0000000
--- a/javadoc/com/google/common/base/Joiner.MapJoiner.html
+++ /dev/null
@@ -1,321 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:56 PST 2010 -->
-<TITLE>
-Joiner.MapJoiner (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Joiner.MapJoiner (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Joiner.MapJoiner.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/base/Joiner.html" title="class in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/base/Objects.html" title="class in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/base/Joiner.MapJoiner.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Joiner.MapJoiner.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.base</FONT>
-<BR>
-Class Joiner.MapJoiner</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.base.Joiner.MapJoiner</B>
-</PRE>
-<DL>
-<DT><B>Enclosing class:</B><DD><A HREF="../../../../com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public static class <B>Joiner.MapJoiner</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
-</PRE>
-
-<P>
-An object that joins map entries in the same manner as <code>Joiner</code> joins
- iterables and arrays.
-<P>
-
-<P>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;A extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang">Appendable</A>&gt; 
-<BR>
-A</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Joiner.MapJoiner.html#appendTo(A, java.util.Map)">appendTo</A></B>(A&nbsp;appendable,
-         <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;?,?&gt;&nbsp;map)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Appends the string representation of each entry of <code>map</code>, using the
- previously configured separator and key-value separator, to <code>appendable</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Joiner.MapJoiner.html#appendTo(java.lang.StringBuilder, java.util.Map)">appendTo</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</A>&nbsp;builder,
-         <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;?,?&gt;&nbsp;map)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Appends the string representation of each entry of <code>map</code>, using the
- previously configured separator and key-value separator, to <code>builder</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Joiner.MapJoiner.html#join(java.util.Map)">join</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;?,?&gt;&nbsp;map)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a string containing the string representation of each entry of
- <code>map</code>, using the previously configured separator and key-value
- separator.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/base/Joiner.MapJoiner.html" title="class in com.google.common.base">Joiner.MapJoiner</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Joiner.MapJoiner.html#useForNull(java.lang.String)">useForNull</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;nullText)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a map joiner with the same behavior as this one, except
- automatically substituting <code>nullText</code> for any provided null keys or
- values.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="appendTo(java.lang.Appendable,java.util.Map)"><!-- --></A><A NAME="appendTo(A, java.util.Map)"><!-- --></A><H3>
-appendTo</H3>
-<PRE>
-public &lt;A extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang">Appendable</A>&gt; A <B>appendTo</B>(A&nbsp;appendable,
-                                         <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;?,?&gt;&nbsp;map)
-                              throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Appends the string representation of each entry of <code>map</code>, using the
- previously configured separator and key-value separator, to <code>appendable</code>.
-<P>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="appendTo(java.lang.StringBuilder, java.util.Map)"><!-- --></A><H3>
-appendTo</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</A> <B>appendTo</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</A>&nbsp;builder,
-                              <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;?,?&gt;&nbsp;map)</PRE>
-<DL>
-<DD>Appends the string representation of each entry of <code>map</code>, using the
- previously configured separator and key-value separator, to <code>builder</code>. Identical to <A HREF="../../../../com/google/common/base/Joiner.MapJoiner.html#appendTo(A, java.util.Map)"><CODE>appendTo(Appendable, Map)</CODE></A>, except that it
- does not throw <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io"><CODE>IOException</CODE></A>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="join(java.util.Map)"><!-- --></A><H3>
-join</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>join</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;?,?&gt;&nbsp;map)</PRE>
-<DL>
-<DD>Returns a string containing the string representation of each entry of
- <code>map</code>, using the previously configured separator and key-value
- separator.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="useForNull(java.lang.String)"><!-- --></A><H3>
-useForNull</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/base/Joiner.MapJoiner.html" title="class in com.google.common.base">Joiner.MapJoiner</A> <B>useForNull</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;nullText)</PRE>
-<DL>
-<DD>Returns a map joiner with the same behavior as this one, except
- automatically substituting <code>nullText</code> for any provided null keys or
- values.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Joiner.MapJoiner.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/base/Joiner.html" title="class in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/base/Objects.html" title="class in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/base/Joiner.MapJoiner.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Joiner.MapJoiner.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/base/Joiner.html b/javadoc/com/google/common/base/Joiner.html
deleted file mode 100644
index 41ccb35..0000000
--- a/javadoc/com/google/common/base/Joiner.html
+++ /dev/null
@@ -1,628 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:56 PST 2010 -->
-<TITLE>
-Joiner (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Joiner (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Joiner.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/base/Functions.html" title="class in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/base/Joiner.MapJoiner.html" title="class in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/base/Joiner.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Joiner.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.base</FONT>
-<BR>
-Class Joiner</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.base.Joiner</B>
-</PRE>
-<HR>
-<DL>
-<DT><PRE>public class <B>Joiner</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
-</PRE>
-
-<P>
-An object which joins pieces of text (specified as an array, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang"><CODE>Iterable</CODE></A>, varargs or even a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A>) with a separator. It either
- appends the results to an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang"><CODE>Appendable</CODE></A> or returns them as a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang"><CODE>String</CODE></A>. Example: <pre>   <code>Joiner joiner = Joiner.on("; ").skipNulls();
-    . . .
-   return joiner.join("Harry", null, "Ron", "Hermione");</code></pre>
-
- This returns the string <code>"Harry; Ron; Hermione"</code>. Note that all input
- elements are converted to strings using <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang"><CODE>Object.toString()</CODE></A> before
- being appended.
-
- <p>If neither <A HREF="../../../../com/google/common/base/Joiner.html#skipNulls()"><CODE>skipNulls()</CODE></A> nor <A HREF="../../../../com/google/common/base/Joiner.html#useForNull(java.lang.String)"><CODE>useForNull(String)</CODE></A> is
- specified, the joining methods will throw <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang"><CODE>NullPointerException</CODE></A> if any
- given element is null.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Kevin Bourrillion</DD>
-</DL>
-<HR>
-
-<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-<A NAME="nested_class_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Nested Class Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Joiner.MapJoiner.html" title="class in com.google.common.base">Joiner.MapJoiner</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An object that joins map entries in the same manner as <code>Joiner</code> joins
- iterables and arrays.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;A extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang">Appendable</A>&gt; 
-<BR>
-A</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Joiner.html#appendTo(A, java.lang.Iterable)">appendTo</A></B>(A&nbsp;appendable,
-         <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;?&gt;&nbsp;parts)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Appends the string representation of each of <code>parts</code>, using the
- previously configured separator between each, to <code>appendable</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;A extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang">Appendable</A>&gt; 
-<BR>
-A</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Joiner.html#appendTo(A, java.lang.Object[])">appendTo</A></B>(A&nbsp;appendable,
-         <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>[]&nbsp;parts)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Appends the string representation of each of <code>parts</code>, using the
- previously configured separator between each, to <code>appendable</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;A extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang">Appendable</A>&gt; 
-<BR>
-A</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Joiner.html#appendTo(A, java.lang.Object, java.lang.Object, java.lang.Object...)">appendTo</A></B>(A&nbsp;appendable,
-         <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;first,
-         <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;second,
-         <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>...&nbsp;rest)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Appends to <code>appendable</code> the string representation of each of the
- remaining arguments.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Joiner.html#appendTo(java.lang.StringBuilder, java.lang.Iterable)">appendTo</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</A>&nbsp;builder,
-         <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;?&gt;&nbsp;parts)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Appends the string representation of each of <code>parts</code>, using the
- previously configured separator between each, to <code>builder</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Joiner.html#appendTo(java.lang.StringBuilder, java.lang.Object[])">appendTo</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</A>&nbsp;builder,
-         <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>[]&nbsp;parts)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Appends the string representation of each of <code>parts</code>, using the
- previously configured separator between each, to <code>builder</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Joiner.html#appendTo(java.lang.StringBuilder, java.lang.Object, java.lang.Object, java.lang.Object...)">appendTo</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</A>&nbsp;builder,
-         <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;first,
-         <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;second,
-         <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>...&nbsp;rest)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Appends to <code>builder</code> the string representation of each of the
- remaining arguments.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Joiner.html#join(java.lang.Iterable)">join</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;?&gt;&nbsp;parts)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a string containing the string representation of each of <code>parts</code>, using the previously configured separator between each.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Joiner.html#join(java.lang.Object[])">join</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>[]&nbsp;parts)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a string containing the string representation of each of <code>parts</code>, using the previously configured separator between each.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Joiner.html#join(java.lang.Object, java.lang.Object, java.lang.Object...)">join</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;first,
-     <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;second,
-     <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>...&nbsp;rest)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a string containing the string representation of each argument,
- using the previously configured separator between each.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Joiner.html#on(char)">on</A></B>(char&nbsp;separator)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a joiner which automatically places <code>separator</code> between
- consecutive elements.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Joiner.html#on(java.lang.String)">on</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;separator)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a joiner which automatically places <code>separator</code> between
- consecutive elements.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Joiner.html#skipNulls()">skipNulls</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a joiner with the same behavior as this joiner, except
- automatically skipping over any provided null elements.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Joiner.html#useForNull(java.lang.String)">useForNull</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;nullText)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a joiner with the same behavior as this one, except automatically
- substituting <code>nullText</code> for any provided null elements.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/base/Joiner.MapJoiner.html" title="class in com.google.common.base">Joiner.MapJoiner</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Joiner.html#withKeyValueSeparator(java.lang.String)">withKeyValueSeparator</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;keyValueSeparator)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a <code>MapJoiner</code> using the given key-value separator, and the
- same configuration as this <code>Joiner</code> otherwise.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="on(java.lang.String)"><!-- --></A><H3>
-on</H3>
-<PRE>
-public static <A HREF="../../../../com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A> <B>on</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;separator)</PRE>
-<DL>
-<DD>Returns a joiner which automatically places <code>separator</code> between
- consecutive elements.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="on(char)"><!-- --></A><H3>
-on</H3>
-<PRE>
-public static <A HREF="../../../../com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A> <B>on</B>(char&nbsp;separator)</PRE>
-<DL>
-<DD>Returns a joiner which automatically places <code>separator</code> between
- consecutive elements.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="appendTo(java.lang.Appendable,java.lang.Iterable)"><!-- --></A><A NAME="appendTo(A, java.lang.Iterable)"><!-- --></A><H3>
-appendTo</H3>
-<PRE>
-public &lt;A extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang">Appendable</A>&gt; A <B>appendTo</B>(A&nbsp;appendable,
-                                         <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;?&gt;&nbsp;parts)
-                              throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Appends the string representation of each of <code>parts</code>, using the
- previously configured separator between each, to <code>appendable</code>.
-<P>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="appendTo(java.lang.Appendable,java.lang.Object[])"><!-- --></A><A NAME="appendTo(A, java.lang.Object[])"><!-- --></A><H3>
-appendTo</H3>
-<PRE>
-public final &lt;A extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang">Appendable</A>&gt; A <B>appendTo</B>(A&nbsp;appendable,
-                                               <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>[]&nbsp;parts)
-                                    throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Appends the string representation of each of <code>parts</code>, using the
- previously configured separator between each, to <code>appendable</code>.
-<P>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="appendTo(java.lang.Appendable,java.lang.Object,java.lang.Object,java.lang.Object[])"><!-- --></A><A NAME="appendTo(A, java.lang.Object, java.lang.Object, java.lang.Object...)"><!-- --></A><H3>
-appendTo</H3>
-<PRE>
-public final &lt;A extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang">Appendable</A>&gt; A <B>appendTo</B>(A&nbsp;appendable,
-                                               <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                                               <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;first,
-                                               <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                                               <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;second,
-                                               <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>...&nbsp;rest)
-                                    throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Appends to <code>appendable</code> the string representation of each of the
- remaining arguments.
-<P>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="appendTo(java.lang.StringBuilder, java.lang.Iterable)"><!-- --></A><H3>
-appendTo</H3>
-<PRE>
-public final <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</A> <B>appendTo</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</A>&nbsp;builder,
-                                    <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;?&gt;&nbsp;parts)</PRE>
-<DL>
-<DD>Appends the string representation of each of <code>parts</code>, using the
- previously configured separator between each, to <code>builder</code>. Identical
- to <A HREF="../../../../com/google/common/base/Joiner.html#appendTo(A, java.lang.Iterable)"><CODE>appendTo(Appendable, Iterable)</CODE></A>, except that it does not throw
- <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io"><CODE>IOException</CODE></A>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="appendTo(java.lang.StringBuilder, java.lang.Object[])"><!-- --></A><H3>
-appendTo</H3>
-<PRE>
-public final <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</A> <B>appendTo</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</A>&nbsp;builder,
-                                    <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>[]&nbsp;parts)</PRE>
-<DL>
-<DD>Appends the string representation of each of <code>parts</code>, using the
- previously configured separator between each, to <code>builder</code>. Identical
- to <A HREF="../../../../com/google/common/base/Joiner.html#appendTo(A, java.lang.Iterable)"><CODE>appendTo(Appendable, Iterable)</CODE></A>, except that it does not throw
- <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io"><CODE>IOException</CODE></A>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="appendTo(java.lang.StringBuilder, java.lang.Object, java.lang.Object, java.lang.Object...)"><!-- --></A><H3>
-appendTo</H3>
-<PRE>
-public final <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</A> <B>appendTo</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</A>&nbsp;builder,
-                                    <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                                    <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;first,
-                                    <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                                    <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;second,
-                                    <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>...&nbsp;rest)</PRE>
-<DL>
-<DD>Appends to <code>builder</code> the string representation of each of the
- remaining arguments. Identical to <A HREF="../../../../com/google/common/base/Joiner.html#appendTo(A, java.lang.Object, java.lang.Object, java.lang.Object...)"><CODE>appendTo(Appendable, Object,
- Object, Object[])</CODE></A>, except that it does not throw <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io"><CODE>IOException</CODE></A>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="join(java.lang.Iterable)"><!-- --></A><H3>
-join</H3>
-<PRE>
-public final <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>join</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;?&gt;&nbsp;parts)</PRE>
-<DL>
-<DD>Returns a string containing the string representation of each of <code>parts</code>, using the previously configured separator between each.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="join(java.lang.Object[])"><!-- --></A><H3>
-join</H3>
-<PRE>
-public final <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>join</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>[]&nbsp;parts)</PRE>
-<DL>
-<DD>Returns a string containing the string representation of each of <code>parts</code>, using the previously configured separator between each.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="join(java.lang.Object, java.lang.Object, java.lang.Object...)"><!-- --></A><H3>
-join</H3>
-<PRE>
-public final <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>join</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                         <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;first,
-                         <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                         <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;second,
-                         <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>...&nbsp;rest)</PRE>
-<DL>
-<DD>Returns a string containing the string representation of each argument,
- using the previously configured separator between each.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="useForNull(java.lang.String)"><!-- --></A><H3>
-useForNull</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A> <B>useForNull</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;nullText)</PRE>
-<DL>
-<DD>Returns a joiner with the same behavior as this one, except automatically
- substituting <code>nullText</code> for any provided null elements.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="skipNulls()"><!-- --></A><H3>
-skipNulls</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A> <B>skipNulls</B>()</PRE>
-<DL>
-<DD>Returns a joiner with the same behavior as this joiner, except
- automatically skipping over any provided null elements.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="withKeyValueSeparator(java.lang.String)"><!-- --></A><H3>
-withKeyValueSeparator</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/base/Joiner.MapJoiner.html" title="class in com.google.common.base">Joiner.MapJoiner</A> <B>withKeyValueSeparator</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;keyValueSeparator)</PRE>
-<DL>
-<DD>Returns a <code>MapJoiner</code> using the given key-value separator, and the
- same configuration as this <code>Joiner</code> otherwise.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Joiner.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/base/Functions.html" title="class in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/base/Joiner.MapJoiner.html" title="class in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/base/Joiner.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Joiner.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/base/Objects.ToStringHelper.html b/javadoc/com/google/common/base/Objects.ToStringHelper.html
deleted file mode 100644
index a6e3a3f..0000000
--- a/javadoc/com/google/common/base/Objects.ToStringHelper.html
+++ /dev/null
@@ -1,292 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:56 PST 2010 -->
-<TITLE>
-Objects.ToStringHelper (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Objects.ToStringHelper (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Objects.ToStringHelper.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/base/Objects.html" title="class in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/base/Preconditions.html" title="class in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/base/Objects.ToStringHelper.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Objects.ToStringHelper.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.base</FONT>
-<BR>
-Class Objects.ToStringHelper</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.base.Objects.ToStringHelper</B>
-</PRE>
-<DL>
-<DT><B>Enclosing class:</B><DD><A HREF="../../../../com/google/common/base/Objects.html" title="class in com.google.common.base">Objects</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public static class <B>Objects.ToStringHelper</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
-</PRE>
-
-<P>
-Support class for <A HREF="../../../../com/google/common/base/Objects.html#toStringHelper(java.lang.Object)"><CODE>Objects.toStringHelper(java.lang.Object)</CODE></A>.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Jason Lee</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/base/Objects.ToStringHelper.html" title="class in com.google.common.base">Objects.ToStringHelper</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Objects.ToStringHelper.html#add(java.lang.String, java.lang.Object)">add</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;name,
-    <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds a name/value pair to the formatted output in <code>name=value</code>
- format.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/base/Objects.ToStringHelper.html" title="class in com.google.common.base">Objects.ToStringHelper</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Objects.ToStringHelper.html#addValue(java.lang.Object)">addValue</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds a value to the formatted output in <code>value</code> format.<p/>
-
- It is strongly encouraged to use <A HREF="../../../../com/google/common/base/Objects.ToStringHelper.html#add(java.lang.String, java.lang.Object)"><CODE>add(String, Object)</CODE></A> instead and
- give value a readable name.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Objects.ToStringHelper.html#toString()">toString</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the formatted string.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="add(java.lang.String, java.lang.Object)"><!-- --></A><H3>
-add</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/base/Objects.ToStringHelper.html" title="class in com.google.common.base">Objects.ToStringHelper</A> <B>add</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;name,
-                                  <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                                  <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
-<DL>
-<DD>Adds a name/value pair to the formatted output in <code>name=value</code>
- format. If <code>value</code> is <code>null</code>, the string <code>"null"</code>
- is used.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="addValue(java.lang.Object)"><!-- --></A><H3>
-addValue</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/base/Objects.ToStringHelper.html" title="class in com.google.common.base">Objects.ToStringHelper</A> <B>addValue</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                                       <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
-<DL>
-<DD>Adds a value to the formatted output in <code>value</code> format.<p/>
-
- It is strongly encouraged to use <A HREF="../../../../com/google/common/base/Objects.ToStringHelper.html#add(java.lang.String, java.lang.Object)"><CODE>add(String, Object)</CODE></A> instead and
- give value a readable name.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toString()"><!-- --></A><H3>
-toString</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
-<DL>
-<DD>Returns the formatted string.
-<P>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Objects.ToStringHelper.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/base/Objects.html" title="class in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/base/Preconditions.html" title="class in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/base/Objects.ToStringHelper.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Objects.ToStringHelper.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/base/Objects.html b/javadoc/com/google/common/base/Objects.html
deleted file mode 100644
index 5711ede..0000000
--- a/javadoc/com/google/common/base/Objects.html
+++ /dev/null
@@ -1,334 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:56 PST 2010 -->
-<TITLE>
-Objects (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Objects (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Objects.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/base/Joiner.MapJoiner.html" title="class in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/base/Objects.ToStringHelper.html" title="class in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/base/Objects.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Objects.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.base</FONT>
-<BR>
-Class Objects</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.base.Objects</B>
-</PRE>
-<HR>
-<DL>
-<DT><PRE>public final class <B>Objects</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
-</PRE>
-
-<P>
-Helper functions that can operate on any <code>Object</code>.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Laurence Gonsalves</DD>
-</DL>
-<HR>
-
-<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-<A NAME="nested_class_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Nested Class Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Objects.ToStringHelper.html" title="class in com.google.common.base">Objects.ToStringHelper</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Support class for <A HREF="../../../../com/google/common/base/Objects.html#toStringHelper(java.lang.Object)"><CODE>toStringHelper(java.lang.Object)</CODE></A>.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Objects.html#equal(java.lang.Object, java.lang.Object)">equal</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;a,
-      <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;b)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Determines whether two possibly-null objects are equal.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Objects.html#hashCode(java.lang.Object...)">hashCode</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>...&nbsp;objects)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Generates a hash code for multiple values.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/base/Objects.ToStringHelper.html" title="class in com.google.common.base">Objects.ToStringHelper</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Objects.html#toStringHelper(java.lang.Object)">toStringHelper</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an instance of <A HREF="../../../../com/google/common/base/Objects.ToStringHelper.html" title="class in com.google.common.base"><CODE>Objects.ToStringHelper</CODE></A>.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="equal(java.lang.Object, java.lang.Object)"><!-- --></A><H3>
-equal</H3>
-<PRE>
-public static boolean <B>equal</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                            <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;a,
-                            <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                            <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;b)</PRE>
-<DL>
-<DD>Determines whether two possibly-null objects are equal. Returns:
-
- <ul>
- <li><code>true</code> if <code>a</code> and <code>b</code> are both null.
- <li><code>true</code> if <code>a</code> and <code>b</code> are both non-null and they are
-     equal according to <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(Object)</CODE></A>.
- <li><code>false</code> in all other situations.
- </ul>
-
- <p>This assumes that any non-null objects passed to this function conform
- to the <code>equals()</code> contract.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="hashCode(java.lang.Object...)"><!-- --></A><H3>
-hashCode</H3>
-<PRE>
-public static int <B>hashCode</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>...&nbsp;objects)</PRE>
-<DL>
-<DD>Generates a hash code for multiple values. The hash code is generated by
- calling <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true#hashCode(java.lang.Object[])" title="class or interface in java.util"><CODE>Arrays.hashCode(Object[])</CODE></A>.
-
- <p>This is useful for implementing <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang"><CODE>Object.hashCode()</CODE></A>. For example,
- in an object that has three properties, <code>x</code>, <code>y</code>, and
- <code>z</code>, one could write:
- <pre>
- public int hashCode() {
-   return Objects.hashCode(getX(), getY(), getZ());
- }</pre>
-
- <b>Warning</b>: When a single object is supplied, the returned hash code
- does not equal the hash code of that object.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toStringHelper(java.lang.Object)"><!-- --></A><H3>
-toStringHelper</H3>
-<PRE>
-public static <A HREF="../../../../com/google/common/base/Objects.ToStringHelper.html" title="class in com.google.common.base">Objects.ToStringHelper</A> <B>toStringHelper</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
-<DL>
-<DD>Creates an instance of <A HREF="../../../../com/google/common/base/Objects.ToStringHelper.html" title="class in com.google.common.base"><CODE>Objects.ToStringHelper</CODE></A>.
-
- <p>This is helpful for implementing <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang"><CODE>Object.toString()</CODE></A>. For
- example, in an object that contains two member variables, <code>x</code>,
- and <code>y</code>, one could write:<pre>   <tt>
-   public class ClassName {
-     public String toString() {
-       return Objects.toStringHelper(this)
-           .add("x", x)
-           .add("y", y)
-           .toString();
-     }
-   }</tt>
- </pre>
-
- Assuming the values of <code>x</code> and <code>y</code> are 1 and 2,
- this code snippet returns the string <tt>"ClassName{x=1, y=2}"</tt>.
-<P>
-<DD><DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>tentative</b></DD>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Objects.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/base/Joiner.MapJoiner.html" title="class in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/base/Objects.ToStringHelper.html" title="class in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/base/Objects.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Objects.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/base/Preconditions.html b/javadoc/com/google/common/base/Preconditions.html
deleted file mode 100644
index 9344077..0000000
--- a/javadoc/com/google/common/base/Preconditions.html
+++ /dev/null
@@ -1,696 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:56 PST 2010 -->
-<TITLE>
-Preconditions (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Preconditions (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Preconditions.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/base/Objects.ToStringHelper.html" title="class in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/base/Preconditions.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Preconditions.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.base</FONT>
-<BR>
-Class Preconditions</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.base.Preconditions</B>
-</PRE>
-<HR>
-<DL>
-<DT><PRE>public final class <B>Preconditions</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
-</PRE>
-
-<P>
-Simple static methods to be called at the start of your own methods to verify
- correct arguments and state. This allows constructs such as
- <pre>
-     if (count <= 0) {
-       throw new IllegalArgumentException("must be positive: " + count);
-     }</pre>
-
- to be replaced with the more compact
- <pre>
-     checkArgument(count > 0, "must be positive: %s", count);</pre>
-
- Note that the sense of the expression is inverted; with <code>Preconditions</code>
- you declare what you expect to be <i>true</i>, just as you do with an
- <a href="http://java.sun.com/j2se/1.5.0/docs/guide/language/assert.html">
- <code>assert</code></a> or a JUnit <code>assertTrue</code> call.
-
- <p><b>Warning:</b> only the <code>"%s"</code> specifier is recognized as a
- placeholder in these messages, not the full range of <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true#format(java.lang.String, java.lang.Object...)" title="class or interface in java.lang"><CODE>String.format(String, Object[])</CODE></A> specifiers.
-
- <p>Take care not to confuse precondition checking with other similar types
- of checks! Precondition exceptions -- including those provided here, but also
- <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IndexOutOfBoundsException.html?is-external=true" title="class or interface in java.lang"><CODE>IndexOutOfBoundsException</CODE></A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/NoSuchElementException.html?is-external=true" title="class or interface in java.util"><CODE>NoSuchElementException</CODE></A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang"><CODE>UnsupportedOperationException</CODE></A> and others -- are used to signal that the
- <i>calling method</i> has made an error. This tells the caller that it should
- not have invoked the method when it did, with the arguments it did, or
- perhaps ever. Postcondition or other invariant failures should not throw
- these types of exceptions.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Kevin Bourrillion</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Preconditions.html#checkArgument(boolean)">checkArgument</A></B>(boolean&nbsp;expression)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ensures the truth of an expression involving one or more parameters to the
- calling method.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Preconditions.html#checkArgument(boolean, java.lang.Object)">checkArgument</A></B>(boolean&nbsp;expression,
-              <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;errorMessage)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ensures the truth of an expression involving one or more parameters to the
- calling method.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Preconditions.html#checkArgument(boolean, java.lang.String, java.lang.Object...)">checkArgument</A></B>(boolean&nbsp;expression,
-              <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;errorMessageTemplate,
-              <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>...&nbsp;errorMessageArgs)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ensures the truth of an expression involving one or more parameters to the
- calling method.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Preconditions.html#checkElementIndex(int, int)">checkElementIndex</A></B>(int&nbsp;index,
-                  int&nbsp;size)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ensures that <code>index</code> specifies a valid <i>element</i> in an array,
- list or string of size <code>size</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Preconditions.html#checkElementIndex(int, int, java.lang.String)">checkElementIndex</A></B>(int&nbsp;index,
-                  int&nbsp;size,
-                  <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;desc)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ensures that <code>index</code> specifies a valid <i>element</i> in an array,
- list or string of size <code>size</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; T</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Preconditions.html#checkNotNull(T)">checkNotNull</A></B>(T&nbsp;reference)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ensures that an object reference passed as a parameter to the calling
- method is not null.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; T</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Preconditions.html#checkNotNull(T, java.lang.Object)">checkNotNull</A></B>(T&nbsp;reference,
-             <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;errorMessage)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ensures that an object reference passed as a parameter to the calling
- method is not null.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; T</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Preconditions.html#checkNotNull(T, java.lang.String, java.lang.Object...)">checkNotNull</A></B>(T&nbsp;reference,
-             <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;errorMessageTemplate,
-             <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>...&nbsp;errorMessageArgs)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ensures that an object reference passed as a parameter to the calling
- method is not null.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Preconditions.html#checkPositionIndex(int, int)">checkPositionIndex</A></B>(int&nbsp;index,
-                   int&nbsp;size)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ensures that <code>index</code> specifies a valid <i>position</i> in an array,
- list or string of size <code>size</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Preconditions.html#checkPositionIndex(int, int, java.lang.String)">checkPositionIndex</A></B>(int&nbsp;index,
-                   int&nbsp;size,
-                   <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;desc)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ensures that <code>index</code> specifies a valid <i>position</i> in an array,
- list or string of size <code>size</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Preconditions.html#checkPositionIndexes(int, int, int)">checkPositionIndexes</A></B>(int&nbsp;start,
-                     int&nbsp;end,
-                     int&nbsp;size)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ensures that <code>start</code> and <code>end</code> specify a valid <i>positions</i>
- in an array, list or string of size <code>size</code>, and are in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Preconditions.html#checkState(boolean)">checkState</A></B>(boolean&nbsp;expression)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ensures the truth of an expression involving the state of the calling
- instance, but not involving any parameters to the calling method.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Preconditions.html#checkState(boolean, java.lang.Object)">checkState</A></B>(boolean&nbsp;expression,
-           <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;errorMessage)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ensures the truth of an expression involving the state of the calling
- instance, but not involving any parameters to the calling method.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Preconditions.html#checkState(boolean, java.lang.String, java.lang.Object...)">checkState</A></B>(boolean&nbsp;expression,
-           <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;errorMessageTemplate,
-           <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>...&nbsp;errorMessageArgs)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ensures the truth of an expression involving the state of the calling
- instance, but not involving any parameters to the calling method.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="checkArgument(boolean)"><!-- --></A><H3>
-checkArgument</H3>
-<PRE>
-public static void <B>checkArgument</B>(boolean&nbsp;expression)</PRE>
-<DL>
-<DD>Ensures the truth of an expression involving one or more parameters to the
- calling method.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>expression</CODE> - a boolean expression
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>expression</code> is false</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="checkArgument(boolean, java.lang.Object)"><!-- --></A><H3>
-checkArgument</H3>
-<PRE>
-public static void <B>checkArgument</B>(boolean&nbsp;expression,
-                                 <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;errorMessage)</PRE>
-<DL>
-<DD>Ensures the truth of an expression involving one or more parameters to the
- calling method.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>expression</CODE> - a boolean expression<DD><CODE>errorMessage</CODE> - the exception message to use if the check fails; will
-     be converted to a string using <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true#valueOf(java.lang.Object)" title="class or interface in java.lang"><CODE>String.valueOf(Object)</CODE></A>
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>expression</code> is false</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="checkArgument(boolean, java.lang.String, java.lang.Object...)"><!-- --></A><H3>
-checkArgument</H3>
-<PRE>
-public static void <B>checkArgument</B>(boolean&nbsp;expression,
-                                 <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;errorMessageTemplate,
-                                 <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>...&nbsp;errorMessageArgs)</PRE>
-<DL>
-<DD>Ensures the truth of an expression involving one or more parameters to the
- calling method.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>expression</CODE> - a boolean expression<DD><CODE>errorMessageTemplate</CODE> - a template for the exception message should the
-     check fail. The message is formed by replacing each <code>%s</code>
-     placeholder in the template with an argument. These are matched by
-     position - the first <code>%s</code> gets <code>errorMessageArgs[0]</code>, etc.
-     Unmatched arguments will be appended to the formatted message in square
-     braces. Unmatched placeholders will be left as-is.<DD><CODE>errorMessageArgs</CODE> - the arguments to be substituted into the message
-     template. Arguments are converted to strings using
-     <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true#valueOf(java.lang.Object)" title="class or interface in java.lang"><CODE>String.valueOf(Object)</CODE></A>.
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>expression</code> is false
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if the check fails and either <code>errorMessageTemplate</code> or <code>errorMessageArgs</code> is null (don't let
-     this happen)</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="checkState(boolean)"><!-- --></A><H3>
-checkState</H3>
-<PRE>
-public static void <B>checkState</B>(boolean&nbsp;expression)</PRE>
-<DL>
-<DD>Ensures the truth of an expression involving the state of the calling
- instance, but not involving any parameters to the calling method.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>expression</CODE> - a boolean expression
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalStateException.html?is-external=true" title="class or interface in java.lang">IllegalStateException</A></CODE> - if <code>expression</code> is false</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="checkState(boolean, java.lang.Object)"><!-- --></A><H3>
-checkState</H3>
-<PRE>
-public static void <B>checkState</B>(boolean&nbsp;expression,
-                              <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;errorMessage)</PRE>
-<DL>
-<DD>Ensures the truth of an expression involving the state of the calling
- instance, but not involving any parameters to the calling method.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>expression</CODE> - a boolean expression<DD><CODE>errorMessage</CODE> - the exception message to use if the check fails; will
-     be converted to a string using <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true#valueOf(java.lang.Object)" title="class or interface in java.lang"><CODE>String.valueOf(Object)</CODE></A>
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalStateException.html?is-external=true" title="class or interface in java.lang">IllegalStateException</A></CODE> - if <code>expression</code> is false</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="checkState(boolean, java.lang.String, java.lang.Object...)"><!-- --></A><H3>
-checkState</H3>
-<PRE>
-public static void <B>checkState</B>(boolean&nbsp;expression,
-                              <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;errorMessageTemplate,
-                              <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>...&nbsp;errorMessageArgs)</PRE>
-<DL>
-<DD>Ensures the truth of an expression involving the state of the calling
- instance, but not involving any parameters to the calling method.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>expression</CODE> - a boolean expression<DD><CODE>errorMessageTemplate</CODE> - a template for the exception message should the
-     check fail. The message is formed by replacing each <code>%s</code>
-     placeholder in the template with an argument. These are matched by
-     position - the first <code>%s</code> gets <code>errorMessageArgs[0]</code>, etc.
-     Unmatched arguments will be appended to the formatted message in square
-     braces. Unmatched placeholders will be left as-is.<DD><CODE>errorMessageArgs</CODE> - the arguments to be substituted into the message
-     template. Arguments are converted to strings using
-     <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true#valueOf(java.lang.Object)" title="class or interface in java.lang"><CODE>String.valueOf(Object)</CODE></A>.
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalStateException.html?is-external=true" title="class or interface in java.lang">IllegalStateException</A></CODE> - if <code>expression</code> is false
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if the check fails and either <code>errorMessageTemplate</code> or <code>errorMessageArgs</code> is null (don't let
-     this happen)</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="checkNotNull(java.lang.Object)"><!-- --></A><A NAME="checkNotNull(T)"><!-- --></A><H3>
-checkNotNull</H3>
-<PRE>
-public static &lt;T&gt; T <B>checkNotNull</B>(T&nbsp;reference)</PRE>
-<DL>
-<DD>Ensures that an object reference passed as a parameter to the calling
- method is not null.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>reference</CODE> - an object reference
-<DT><B>Returns:</B><DD>the non-null reference that was validated
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>reference</code> is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="checkNotNull(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="checkNotNull(T, java.lang.Object)"><!-- --></A><H3>
-checkNotNull</H3>
-<PRE>
-public static &lt;T&gt; T <B>checkNotNull</B>(T&nbsp;reference,
-                                 <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;errorMessage)</PRE>
-<DL>
-<DD>Ensures that an object reference passed as a parameter to the calling
- method is not null.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>reference</CODE> - an object reference<DD><CODE>errorMessage</CODE> - the exception message to use if the check fails; will
-     be converted to a string using <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true#valueOf(java.lang.Object)" title="class or interface in java.lang"><CODE>String.valueOf(Object)</CODE></A>
-<DT><B>Returns:</B><DD>the non-null reference that was validated
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>reference</code> is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="checkNotNull(java.lang.Object,java.lang.String,java.lang.Object[])"><!-- --></A><A NAME="checkNotNull(T, java.lang.String, java.lang.Object...)"><!-- --></A><H3>
-checkNotNull</H3>
-<PRE>
-public static &lt;T&gt; T <B>checkNotNull</B>(T&nbsp;reference,
-                                 <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;errorMessageTemplate,
-                                 <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>...&nbsp;errorMessageArgs)</PRE>
-<DL>
-<DD>Ensures that an object reference passed as a parameter to the calling
- method is not null.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>reference</CODE> - an object reference<DD><CODE>errorMessageTemplate</CODE> - a template for the exception message should the
-     check fail. The message is formed by replacing each <code>%s</code>
-     placeholder in the template with an argument. These are matched by
-     position - the first <code>%s</code> gets <code>errorMessageArgs[0]</code>, etc.
-     Unmatched arguments will be appended to the formatted message in square
-     braces. Unmatched placeholders will be left as-is.<DD><CODE>errorMessageArgs</CODE> - the arguments to be substituted into the message
-     template. Arguments are converted to strings using
-     <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true#valueOf(java.lang.Object)" title="class or interface in java.lang"><CODE>String.valueOf(Object)</CODE></A>.
-<DT><B>Returns:</B><DD>the non-null reference that was validated
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>reference</code> is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="checkElementIndex(int, int)"><!-- --></A><H3>
-checkElementIndex</H3>
-<PRE>
-public static int <B>checkElementIndex</B>(int&nbsp;index,
-                                    int&nbsp;size)</PRE>
-<DL>
-<DD>Ensures that <code>index</code> specifies a valid <i>element</i> in an array,
- list or string of size <code>size</code>. An element index may range from zero,
- inclusive, to <code>size</code>, exclusive.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>index</CODE> - a user-supplied index identifying an element of an array, list
-     or string<DD><CODE>size</CODE> - the size of that array, list or string
-<DT><B>Returns:</B><DD>the value of <code>index</code>
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IndexOutOfBoundsException.html?is-external=true" title="class or interface in java.lang">IndexOutOfBoundsException</A></CODE> - if <code>index</code> is negative or is not
-     less than <code>size</code>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>size</code> is negative</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="checkElementIndex(int, int, java.lang.String)"><!-- --></A><H3>
-checkElementIndex</H3>
-<PRE>
-public static int <B>checkElementIndex</B>(int&nbsp;index,
-                                    int&nbsp;size,
-                                    <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;desc)</PRE>
-<DL>
-<DD>Ensures that <code>index</code> specifies a valid <i>element</i> in an array,
- list or string of size <code>size</code>. An element index may range from zero,
- inclusive, to <code>size</code>, exclusive.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>index</CODE> - a user-supplied index identifying an element of an array, list
-     or string<DD><CODE>size</CODE> - the size of that array, list or string<DD><CODE>desc</CODE> - the text to use to describe this index in an error message
-<DT><B>Returns:</B><DD>the value of <code>index</code>
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IndexOutOfBoundsException.html?is-external=true" title="class or interface in java.lang">IndexOutOfBoundsException</A></CODE> - if <code>index</code> is negative or is not
-     less than <code>size</code>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>size</code> is negative</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="checkPositionIndex(int, int)"><!-- --></A><H3>
-checkPositionIndex</H3>
-<PRE>
-public static int <B>checkPositionIndex</B>(int&nbsp;index,
-                                     int&nbsp;size)</PRE>
-<DL>
-<DD>Ensures that <code>index</code> specifies a valid <i>position</i> in an array,
- list or string of size <code>size</code>. A position index may range from zero
- to <code>size</code>, inclusive.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>index</CODE> - a user-supplied index identifying a position in an array, list
-     or string<DD><CODE>size</CODE> - the size of that array, list or string
-<DT><B>Returns:</B><DD>the value of <code>index</code>
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IndexOutOfBoundsException.html?is-external=true" title="class or interface in java.lang">IndexOutOfBoundsException</A></CODE> - if <code>index</code> is negative or is
-     greater than <code>size</code>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>size</code> is negative</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="checkPositionIndex(int, int, java.lang.String)"><!-- --></A><H3>
-checkPositionIndex</H3>
-<PRE>
-public static int <B>checkPositionIndex</B>(int&nbsp;index,
-                                     int&nbsp;size,
-                                     <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;desc)</PRE>
-<DL>
-<DD>Ensures that <code>index</code> specifies a valid <i>position</i> in an array,
- list or string of size <code>size</code>. A position index may range from zero
- to <code>size</code>, inclusive.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>index</CODE> - a user-supplied index identifying a position in an array, list
-     or string<DD><CODE>size</CODE> - the size of that array, list or string<DD><CODE>desc</CODE> - the text to use to describe this index in an error message
-<DT><B>Returns:</B><DD>the value of <code>index</code>
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IndexOutOfBoundsException.html?is-external=true" title="class or interface in java.lang">IndexOutOfBoundsException</A></CODE> - if <code>index</code> is negative or is
-     greater than <code>size</code>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>size</code> is negative</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="checkPositionIndexes(int, int, int)"><!-- --></A><H3>
-checkPositionIndexes</H3>
-<PRE>
-public static void <B>checkPositionIndexes</B>(int&nbsp;start,
-                                        int&nbsp;end,
-                                        int&nbsp;size)</PRE>
-<DL>
-<DD>Ensures that <code>start</code> and <code>end</code> specify a valid <i>positions</i>
- in an array, list or string of size <code>size</code>, and are in order. A
- position index may range from zero to <code>size</code>, inclusive.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>start</CODE> - a user-supplied index identifying a starting position in an
-     array, list or string<DD><CODE>end</CODE> - a user-supplied index identifying a ending position in an array,
-     list or string<DD><CODE>size</CODE> - the size of that array, list or string
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IndexOutOfBoundsException.html?is-external=true" title="class or interface in java.lang">IndexOutOfBoundsException</A></CODE> - if either index is negative or is
-     greater than <code>size</code>, or if <code>end</code> is less than <code>start</code>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>size</code> is negative</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Preconditions.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/base/Objects.ToStringHelper.html" title="class in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/base/Preconditions.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Preconditions.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/base/Predicate.html b/javadoc/com/google/common/base/Predicate.html
deleted file mode 100644
index af04b68..0000000
--- a/javadoc/com/google/common/base/Predicate.html
+++ /dev/null
@@ -1,262 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:56 PST 2010 -->
-<TITLE>
-Predicate (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Predicate (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Predicate.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/base/Preconditions.html" title="class in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/base/Predicates.html" title="class in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/base/Predicate.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Predicate.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.base</FONT>
-<BR>
-Interface Predicate&lt;T&gt;</H2>
-<DL>
-<DT><B>All Known Implementing Classes:</B> <DD><A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public interface <B>Predicate&lt;T&gt;</B></DL>
-</PRE>
-
-<P>
-Determines a true or false value for a given input. For example, a
- <code>RegexPredicate</code> might implement <code>Predicate&lt;String&gt;</code>, and return
- <code>true</code> for any string that matches its given regular expression.
-
- <p>Implementations which may cause side effects upon evaluation are strongly
- encouraged to state this fact clearly in their API documentation.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Kevin Bourrillion</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Predicate.html#apply(T)">apply</A></B>(<A HREF="../../../../com/google/common/base/Predicate.html" title="type parameter in Predicate">T</A>&nbsp;input)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Applies this predicate to the given object.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Predicate.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;obj)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Indicates whether some other object is equal to this <code>Predicate</code>.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="apply(java.lang.Object)"><!-- --></A><A NAME="apply(T)"><!-- --></A><H3>
-apply</H3>
-<PRE>
-boolean <B>apply</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-              <A HREF="../../../../com/google/common/base/Predicate.html" title="type parameter in Predicate">T</A>&nbsp;input)</PRE>
-<DL>
-<DD>Applies this predicate to the given object.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>input</CODE> - the input that the predicate should act on
-<DT><B>Returns:</B><DD>the value of this predicate when applied to the input <code>t</code></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
-equals</H3>
-<PRE>
-boolean <B>equals</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-               <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;obj)</PRE>
-<DL>
-<DD>Indicates whether some other object is equal to this <code>Predicate</code>.
- This method can return <code>true</code> <i>only</i> if the specified object is
- also a <code>Predicate</code> and, for every input object <code>input</code>, it
- returns exactly the same value. Thus, <code>predicate1.equals(predicate2)</code>
- implies that either <code>predicate1.apply(input)</code> and
- <code>predicate2.apply(input)</code> are both <code>true</code> or both
- <code>false</code>.
-
- <p>Note that it is always safe <i>not</i> to override
- <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Predicate.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/base/Preconditions.html" title="class in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/base/Predicates.html" title="class in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/base/Predicate.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Predicate.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/base/Predicates.html b/javadoc/com/google/common/base/Predicates.html
deleted file mode 100644
index 772984f..0000000
--- a/javadoc/com/google/common/base/Predicates.html
+++ /dev/null
@@ -1,686 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:57 PST 2010 -->
-<TITLE>
-Predicates (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Predicates (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Predicates.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/base/Service.html" title="interface in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/base/Predicates.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Predicates.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.base</FONT>
-<BR>
-Class Predicates</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.base.Predicates</B>
-</PRE>
-<HR>
-<DL>
-<DT><PRE>public final class <B>Predicates</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
-</PRE>
-
-<P>
-Contains static factory methods for creating <code>Predicate</code> instances.
-
- <p>All methods returns serializable predicates as long as they're given
- serializable parameters.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Kevin Bourrillion</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Predicates.html#alwaysFalse()">alwaysFalse</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that always evaluates to <code>false</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Predicates.html#alwaysTrue()">alwaysTrue</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that always evaluates to <code>true</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Predicates.html#and(java.lang.Iterable)">and</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&gt;&nbsp;components)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if each of its
- components evaluates to <code>true</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Predicates.html#and(com.google.common.base.Predicate...)">and</A></B>(<A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;...&nbsp;components)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if each of its
- components evaluates to <code>true</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Predicates.html#and(com.google.common.base.Predicate, com.google.common.base.Predicate)">and</A></B>(<A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;first,
-    <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;second)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if both of its
- components evaluate to <code>true</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;A,B&gt; <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;A&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Predicates.html#compose(com.google.common.base.Predicate, com.google.common.base.Function)">compose</A></B>(<A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;B&gt;&nbsp;predicate,
-        <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;A,? extends B&gt;&nbsp;function)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the composition of a function and a predicate.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Predicates.html#equalTo(T)">equalTo</A></B>(T&nbsp;target)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if the object being
- tested <code>equals()</code> the given target or both are null.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Predicates.html#in(java.util.Collection)">in</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;? extends T&gt;&nbsp;target)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if the object reference
- being tested is a member of the given collection.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Predicates.html#instanceOf(java.lang.Class)">instanceOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;?&gt;&nbsp;clazz)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if the object being
- tested is an instance of the given class.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Predicates.html#isNull()">isNull</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if the object reference
- being tested is null.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Predicates.html#not(com.google.common.base.Predicate)">not</A></B>(<A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;&nbsp;predicate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if the given predicate
- evaluates to <code>false</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Predicates.html#notNull()">notNull</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if the object reference
- being tested is not null.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Predicates.html#or(java.lang.Iterable)">or</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&gt;&nbsp;components)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if any one of its
- components evaluates to <code>true</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Predicates.html#or(com.google.common.base.Predicate...)">or</A></B>(<A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;...&nbsp;components)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if any one of its
- components evaluates to <code>true</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Predicates.html#or(com.google.common.base.Predicate, com.google.common.base.Predicate)">or</A></B>(<A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;first,
-   <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;second)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if either of its
- components evaluates to <code>true</code>.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="alwaysTrue()"><!-- --></A><H3>
-alwaysTrue</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt; <B>alwaysTrue</B>()</PRE>
-<DL>
-<DD>Returns a predicate that always evaluates to <code>true</code>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="alwaysFalse()"><!-- --></A><H3>
-alwaysFalse</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt; <B>alwaysFalse</B>()</PRE>
-<DL>
-<DD>Returns a predicate that always evaluates to <code>false</code>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="isNull()"><!-- --></A><H3>
-isNull</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt; <B>isNull</B>()</PRE>
-<DL>
-<DD>Returns a predicate that evaluates to <code>true</code> if the object reference
- being tested is null.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="notNull()"><!-- --></A><H3>
-notNull</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt; <B>notNull</B>()</PRE>
-<DL>
-<DD>Returns a predicate that evaluates to <code>true</code> if the object reference
- being tested is not null.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="not(com.google.common.base.Predicate)"><!-- --></A><H3>
-not</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt; <B>not</B>(<A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;&nbsp;predicate)</PRE>
-<DL>
-<DD>Returns a predicate that evaluates to <code>true</code> if the given predicate
- evaluates to <code>false</code>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="and(java.lang.Iterable)"><!-- --></A><H3>
-and</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt; <B>and</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&gt;&nbsp;components)</PRE>
-<DL>
-<DD>Returns a predicate that evaluates to <code>true</code> if each of its
- components evaluates to <code>true</code>. The components are evaluated in
- order, and evaluation will be "short-circuited" as soon as a false
- predicate is found. It defensively copies the iterable passed in, so future
- changes to it won't alter the behavior of this predicate. If <code>components</code> is empty, the returned predicate will always evaluate to <code>true</code>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="and(com.google.common.base.Predicate...)"><!-- --></A><H3>
-and</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt; <B>and</B>(<A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;...&nbsp;components)</PRE>
-<DL>
-<DD>Returns a predicate that evaluates to <code>true</code> if each of its
- components evaluates to <code>true</code>. The components are evaluated in
- order, and evaluation will be "short-circuited" as soon as a false
- predicate is found. It defensively copies the array passed in, so future
- changes to it won't alter the behavior of this predicate. If <code>components</code> is empty, the returned predicate will always evaluate to <code>true</code>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="and(com.google.common.base.Predicate, com.google.common.base.Predicate)"><!-- --></A><H3>
-and</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt; <B>and</B>(<A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;first,
-                                   <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;second)</PRE>
-<DL>
-<DD>Returns a predicate that evaluates to <code>true</code> if both of its
- components evaluate to <code>true</code>. The components are evaluated in
- order, and evaluation will be "short-circuited" as soon as a false
- predicate is found.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="or(java.lang.Iterable)"><!-- --></A><H3>
-or</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt; <B>or</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&gt;&nbsp;components)</PRE>
-<DL>
-<DD>Returns a predicate that evaluates to <code>true</code> if any one of its
- components evaluates to <code>true</code>. The components are evaluated in
- order, and evaluation will be "short-circuited" as soon as as soon as a
- true predicate is found. It defensively copies the iterable passed in, so
- future changes to it won't alter the behavior of this predicate. If <code>components</code> is empty, the returned predicate will always evaluate to <code>false</code>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="or(com.google.common.base.Predicate...)"><!-- --></A><H3>
-or</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt; <B>or</B>(<A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;...&nbsp;components)</PRE>
-<DL>
-<DD>Returns a predicate that evaluates to <code>true</code> if any one of its
- components evaluates to <code>true</code>. The components are evaluated in
- order, and evaluation will be "short-circuited" as soon as as soon as a
- true predicate is found. It defensively copies the array passed in, so
- future changes to it won't alter the behavior of this predicate. If <code>components</code> is empty, the returned predicate will always evaluate to <code>false</code>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="or(com.google.common.base.Predicate, com.google.common.base.Predicate)"><!-- --></A><H3>
-or</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt; <B>or</B>(<A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;first,
-                                  <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;second)</PRE>
-<DL>
-<DD>Returns a predicate that evaluates to <code>true</code> if either of its
- components evaluates to <code>true</code>. The components are evaluated in
- order, and evaluation will be "short-circuited" as soon as as soon as a
- true predicate is found.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="equalTo(java.lang.Object)"><!-- --></A><A NAME="equalTo(T)"><!-- --></A><H3>
-equalTo</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt; <B>equalTo</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                                       T&nbsp;target)</PRE>
-<DL>
-<DD>Returns a predicate that evaluates to <code>true</code> if the object being
- tested <code>equals()</code> the given target or both are null.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="instanceOf(java.lang.Class)"><!-- --></A><H3>
-instanceOf</H3>
-<PRE>
-public static <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&gt; <B>instanceOf</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;?&gt;&nbsp;clazz)</PRE>
-<DL>
-<DD>Returns a predicate that evaluates to <code>true</code> if the object being
- tested is an instance of the given class. If the object being tested
- is <code>null</code> this predicate evaluates to <code>false</code>.
-
- <p>If you want to filter an <code>Iterable</code> to narrow its type, consider
- using <A HREF="../../../../com/google/common/collect/Iterables.html#filter(java.lang.Iterable, java.lang.Class)"><CODE>Iterables.filter(Iterable, Class)</CODE></A>
- in preference.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="in(java.util.Collection)"><!-- --></A><H3>
-in</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt; <B>in</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;? extends T&gt;&nbsp;target)</PRE>
-<DL>
-<DD>Returns a predicate that evaluates to <code>true</code> if the object reference
- being tested is a member of the given collection. It does not defensively
- copy the collection passed in, so future changes to it will alter the
- behavior of the predicate.
-
- This method can technically accept any Collection<?>, but using a typed
- collection helps prevent bugs. This approach doesn't block any potential
- users since it is always possible to use <code>Predicates.&lt;Object&gt;in()</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>target</CODE> - the collection that may contain the function input</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="compose(com.google.common.base.Predicate, com.google.common.base.Function)"><!-- --></A><H3>
-compose</H3>
-<PRE>
-public static &lt;A,B&gt; <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;A&gt; <B>compose</B>(<A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;B&gt;&nbsp;predicate,
-                                         <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;A,? extends B&gt;&nbsp;function)</PRE>
-<DL>
-<DD>Returns the composition of a function and a predicate. For every <code>x</code>,
- the generated predicate returns <code>predicate(function(x))</code>.
-<P>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>the composition of the provided function and predicate</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Predicates.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/base/Service.html" title="interface in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/base/Predicates.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Predicates.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/base/Service.State.html b/javadoc/com/google/common/base/Service.State.html
deleted file mode 100644
index 766fdde..0000000
--- a/javadoc/com/google/common/base/Service.State.html
+++ /dev/null
@@ -1,409 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:57 PST 2010 -->
-<TITLE>
-Service.State (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Service.State (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Service.State.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/base/Service.html" title="interface in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/base/Splitter.html" title="class in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/base/Service.State.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Service.State.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#enum_constant_summary">ENUM CONSTANTS</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;<A HREF="#enum_constant_detail">ENUM CONSTANTS</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.base</FONT>
-<BR>
-Enum Service.State</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">java.lang.Enum</A>&lt;<A HREF="../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A>&gt;
-      <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.base.Service.State</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;<A HREF="../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A>&gt;</DD>
-</DL>
-<DL>
-<DT><B>Enclosing interface:</B><DD><A HREF="../../../../com/google/common/base/Service.html" title="interface in com.google.common.base">Service</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public static enum <B>Service.State</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;<A HREF="../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A>&gt;</DL>
-</PRE>
-
-<P>
-The lifecycle states of a service.
-<P>
-
-<P>
-<HR>
-
-<P>
-<!-- =========== ENUM CONSTANT SUMMARY =========== -->
-
-<A NAME="enum_constant_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Enum Constant Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Service.State.html#FAILED">FAILED</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A service in this state has encountered a problem and may not be
- operational.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Service.State.html#NEW">NEW</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A service in this state is inactive.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Service.State.html#RUNNING">RUNNING</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A service in this state is operational.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Service.State.html#STARTING">STARTING</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A service in this state is transitioning to <A HREF="../../../../com/google/common/base/Service.State.html#RUNNING"><CODE>RUNNING</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Service.State.html#STOPPING">STOPPING</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A service in this state is transitioning to <A HREF="../../../../com/google/common/base/Service.State.html#TERMINATED"><CODE>TERMINATED</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Service.State.html#TERMINATED">TERMINATED</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A service in this state has completed execution normally.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Service.State.html#valueOf(java.lang.String)">valueOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;name)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the enum constant of this type with the specified name.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A>[]</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Service.State.html#values()">values</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an array containing the constants of this enum type, in
-the order they are declared.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Enum"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#compareTo(E)" title="class or interface in java.lang">compareTo</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#getDeclaringClass()" title="class or interface in java.lang">getDeclaringClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#name()" title="class or interface in java.lang">name</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#ordinal()" title="class or interface in java.lang">ordinal</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true#valueOf(java.lang.Class, java.lang.String)" title="class or interface in java.lang">valueOf</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ ENUM CONSTANT DETAIL =========== -->
-
-<A NAME="enum_constant_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Enum Constant Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="NEW"><!-- --></A><H3>
-NEW</H3>
-<PRE>
-public static final <A HREF="../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A> <B>NEW</B></PRE>
-<DL>
-<DD>A service in this state is inactive. It does minimal work and consumes
- minimal resources.
-<P>
-<DL>
-</DL>
-</DL>
-<HR>
-
-<A NAME="STARTING"><!-- --></A><H3>
-STARTING</H3>
-<PRE>
-public static final <A HREF="../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A> <B>STARTING</B></PRE>
-<DL>
-<DD>A service in this state is transitioning to <A HREF="../../../../com/google/common/base/Service.State.html#RUNNING"><CODE>RUNNING</CODE></A>.
-<P>
-<DL>
-</DL>
-</DL>
-<HR>
-
-<A NAME="RUNNING"><!-- --></A><H3>
-RUNNING</H3>
-<PRE>
-public static final <A HREF="../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A> <B>RUNNING</B></PRE>
-<DL>
-<DD>A service in this state is operational.
-<P>
-<DL>
-</DL>
-</DL>
-<HR>
-
-<A NAME="STOPPING"><!-- --></A><H3>
-STOPPING</H3>
-<PRE>
-public static final <A HREF="../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A> <B>STOPPING</B></PRE>
-<DL>
-<DD>A service in this state is transitioning to <A HREF="../../../../com/google/common/base/Service.State.html#TERMINATED"><CODE>TERMINATED</CODE></A>.
-<P>
-<DL>
-</DL>
-</DL>
-<HR>
-
-<A NAME="TERMINATED"><!-- --></A><H3>
-TERMINATED</H3>
-<PRE>
-public static final <A HREF="../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A> <B>TERMINATED</B></PRE>
-<DL>
-<DD>A service in this state has completed execution normally. It does minimal
- work and consumes minimal resources.
-<P>
-<DL>
-</DL>
-</DL>
-<HR>
-
-<A NAME="FAILED"><!-- --></A><H3>
-FAILED</H3>
-<PRE>
-public static final <A HREF="../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A> <B>FAILED</B></PRE>
-<DL>
-<DD>A service in this state has encountered a problem and may not be
- operational. It cannot be started nor stopped.
-<P>
-<DL>
-</DL>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="values()"><!-- --></A><H3>
-values</H3>
-<PRE>
-public static <A HREF="../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A>[] <B>values</B>()</PRE>
-<DL>
-<DD>Returns an array containing the constants of this enum type, in
-the order they are declared.  This method may be used to iterate
-over the constants as follows:
-<pre>
-for (Service.State c : Service.State.values())
-&nbsp;   System.out.println(c);
-</pre>
-<P>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>an array containing the constants of this enum type, in
-the order they are declared</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="valueOf(java.lang.String)"><!-- --></A><H3>
-valueOf</H3>
-<PRE>
-public static <A HREF="../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A> <B>valueOf</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;name)</PRE>
-<DL>
-<DD>Returns the enum constant of this type with the specified name.
-The string must match <I>exactly</I> an identifier used to declare an
-enum constant in this type.  (Extraneous whitespace characters are 
-not permitted.)
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>name</CODE> - the name of the enum constant to be returned.
-<DT><B>Returns:</B><DD>the enum constant with the specified name
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if this enum type has no constant
-with the specified name
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if the argument is null</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Service.State.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/base/Service.html" title="interface in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/base/Splitter.html" title="class in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/base/Service.State.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Service.State.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#enum_constant_summary">ENUM CONSTANTS</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;<A HREF="#enum_constant_detail">ENUM CONSTANTS</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/base/Service.html b/javadoc/com/google/common/base/Service.html
deleted file mode 100644
index 5785dd4..0000000
--- a/javadoc/com/google/common/base/Service.html
+++ /dev/null
@@ -1,395 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:57 PST 2010 -->
-<TITLE>
-Service (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Service (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Service.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/base/Predicates.html" title="class in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/base/Service.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Service.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.base</FONT>
-<BR>
-Interface Service</H2>
-<DL>
-<DT><B>All Known Implementing Classes:</B> <DD><A HREF="../../../../com/google/common/util/concurrent/AbstractExecutionThreadService.html" title="class in com.google.common.util.concurrent">AbstractExecutionThreadService</A>, <A HREF="../../../../com/google/common/util/concurrent/AbstractIdleService.html" title="class in com.google.common.util.concurrent">AbstractIdleService</A>, <A HREF="../../../../com/google/common/util/concurrent/AbstractService.html" title="class in com.google.common.util.concurrent">AbstractService</A>, <A HREF="../../../../com/google/common/util/concurrent/ForwardingService.html" title="class in com.google.common.util.concurrent">ForwardingService</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public interface <B>Service</B></DL>
-</PRE>
-
-<P>
-An object with an operational state, plus asynchronous <A HREF="../../../../com/google/common/base/Service.html#start()"><CODE>start()</CODE></A> and
- <A HREF="../../../../com/google/common/base/Service.html#stop()"><CODE>stop()</CODE></A> lifecycle methods to transfer into and out of this state.
- Example services include webservers, RPC servers and timers. The normal
- lifecycle of a service is:
- <ul>
-   <li><A HREF="../../../../com/google/common/base/Service.State.html#NEW"><CODE>Service.State.NEW</CODE></A> -&gt;</li>
-   <li><A HREF="../../../../com/google/common/base/Service.State.html#STARTING"><CODE>Service.State.STARTING</CODE></A> -&gt;</li>
-   <li><A HREF="../../../../com/google/common/base/Service.State.html#RUNNING"><CODE>Service.State.RUNNING</CODE></A> -&gt;</li>
-   <li><A HREF="../../../../com/google/common/base/Service.State.html#STOPPING"><CODE>Service.State.STOPPING</CODE></A> -&gt;</li>
-   <li><A HREF="../../../../com/google/common/base/Service.State.html#TERMINATED"><CODE>Service.State.TERMINATED</CODE></A></li>
- </ul>
-
- If the service fails while starting, running or stopping, its state will be
- <A HREF="../../../../com/google/common/base/Service.State.html#FAILED"><CODE>Service.State.FAILED</CODE></A>, and its behavior is undefined. Such a service cannot be
- started nor stopped.
-
- <p>Implementors of this interface are strongly encouraged to extend <A HREF="../../../../com/google/common/util/concurrent/AbstractService.html" title="class in com.google.common.util.concurrent"><CODE>AbstractService</CODE></A> or <A HREF="../../../../com/google/common/util/concurrent/AbstractExecutionThreadService.html" title="class in com.google.common.util.concurrent"><CODE>AbstractExecutionThreadService</CODE></A>, which make
- the threading and state management easier.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2009.09.15 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Jesse Wilson</DD>
-</DL>
-<HR>
-
-<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-<A NAME="nested_class_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Nested Class Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The lifecycle states of a service.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Service.html#isRunning()">isRunning</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if this service is <A HREF="../../../../com/google/common/base/Service.State.html#RUNNING"><CODE>running</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;<A HREF="../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Service.html#start()">start</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If the service state is <A HREF="../../../../com/google/common/base/Service.State.html#NEW"><CODE>Service.State.NEW</CODE></A>, this initiates service startup
- and returns immediately.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Service.html#startAndWait()">startAndWait</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Initiates service startup (if necessary), returning once the service has
- finished starting.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Service.html#state()">state</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the lifecycle state of the service.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;<A HREF="../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Service.html#stop()">stop</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If the service is <A HREF="../../../../com/google/common/base/Service.State.html#STARTING"><CODE>Service.State.STARTING</CODE></A> or <A HREF="../../../../com/google/common/base/Service.State.html#RUNNING"><CODE>Service.State.RUNNING</CODE></A>, this
- initiates service shutdown and returns immediately.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Service.html#stopAndWait()">stopAndWait</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Initiates service shutdown (if necessary), returning once the service has
- finished stopping.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="start()"><!-- --></A><H3>
-start</H3>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;<A HREF="../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A>&gt; <B>start</B>()</PRE>
-<DL>
-<DD>If the service state is <A HREF="../../../../com/google/common/base/Service.State.html#NEW"><CODE>Service.State.NEW</CODE></A>, this initiates service startup
- and returns immediately. If the service has already been started, this
- method returns immediately without taking action. A stopped service may not
- be restarted.
-<P>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a future for the startup result, regardless of whether this call
-     initiated startup. Calling <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#get()" title="class or interface in java.util.concurrent"><CODE>Future.get()</CODE></A> will block until the
-     service has finished starting, and returns one of <A HREF="../../../../com/google/common/base/Service.State.html#RUNNING"><CODE>Service.State.RUNNING</CODE></A>, <A HREF="../../../../com/google/common/base/Service.State.html#STOPPING"><CODE>Service.State.STOPPING</CODE></A> or <A HREF="../../../../com/google/common/base/Service.State.html#TERMINATED"><CODE>Service.State.TERMINATED</CODE></A>. If
-     the service fails to start, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#get()" title="class or interface in java.util.concurrent"><CODE>Future.get()</CODE></A> will throw an <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutionException.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ExecutionException</CODE></A>, and the service's state will be <A HREF="../../../../com/google/common/base/Service.State.html#FAILED"><CODE>Service.State.FAILED</CODE></A>. If it has already finished starting, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#get()" title="class or interface in java.util.concurrent"><CODE>Future.get()</CODE></A>
-     returns immediately. Cancelling the returned future is unsupported and
-     always returns <code>false</code>.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="startAndWait()"><!-- --></A><H3>
-startAndWait</H3>
-<PRE>
-<A HREF="../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A> <B>startAndWait</B>()</PRE>
-<DL>
-<DD>Initiates service startup (if necessary), returning once the service has
- finished starting. Unlike calling <code>start().get()</code>, this method throws
- no checked exceptions.
-<P>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>the state of the service when startup finished.
-<DT><B>Throws:</B>
-<DD><CODE>InterruptedRuntimeException</CODE> - if the thread was interrupted while
-      waiting for the service to finish starting up.
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/RuntimeException.html?is-external=true" title="class or interface in java.lang">RuntimeException</A></CODE> - if startup failed</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="isRunning()"><!-- --></A><H3>
-isRunning</H3>
-<PRE>
-boolean <B>isRunning</B>()</PRE>
-<DL>
-<DD>Returns <code>true</code> if this service is <A HREF="../../../../com/google/common/base/Service.State.html#RUNNING"><CODE>running</CODE></A>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="state()"><!-- --></A><H3>
-state</H3>
-<PRE>
-<A HREF="../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A> <B>state</B>()</PRE>
-<DL>
-<DD>Returns the lifecycle state of the service.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="stop()"><!-- --></A><H3>
-stop</H3>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;<A HREF="../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A>&gt; <B>stop</B>()</PRE>
-<DL>
-<DD>If the service is <A HREF="../../../../com/google/common/base/Service.State.html#STARTING"><CODE>Service.State.STARTING</CODE></A> or <A HREF="../../../../com/google/common/base/Service.State.html#RUNNING"><CODE>Service.State.RUNNING</CODE></A>, this
- initiates service shutdown and returns immediately. If this is <A HREF="../../../../com/google/common/base/Service.State.html#NEW"><CODE>Service.State.NEW</CODE></A>, it is <A HREF="../../../../com/google/common/base/Service.State.html#TERMINATED"><CODE>terminated</CODE></A> without having been
- started nor stopped.  If the service has already been stopped, this
- method returns immediately without taking action.
-<P>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a future for the shutdown result, regardless of whether this call
-     initiated shutdown. Calling <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#get()" title="class or interface in java.util.concurrent"><CODE>Future.get()</CODE></A> will block until the
-     service has finished shutting down, and either returns <A HREF="../../../../com/google/common/base/Service.State.html#TERMINATED"><CODE>Service.State.TERMINATED</CODE></A> or throws an <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutionException.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ExecutionException</CODE></A>. If it has
-     already finished stopping, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#get()" title="class or interface in java.util.concurrent"><CODE>Future.get()</CODE></A> returns immediately.
-     Cancelling this future is unsupported and always returns <code>false</code>.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="stopAndWait()"><!-- --></A><H3>
-stopAndWait</H3>
-<PRE>
-<A HREF="../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A> <B>stopAndWait</B>()</PRE>
-<DL>
-<DD>Initiates service shutdown (if necessary), returning once the service has
- finished stopping. If this is <A HREF="../../../../com/google/common/base/Service.State.html#STARTING"><CODE>Service.State.STARTING</CODE></A>, startup will be
- cancelled. If this is <A HREF="../../../../com/google/common/base/Service.State.html#NEW"><CODE>Service.State.NEW</CODE></A>, it is <A HREF="../../../../com/google/common/base/Service.State.html#TERMINATED"><CODE>terminated</CODE></A> without having been started nor stopped. Unlike calling <code>stop().get()</code>, this method throws no checked exceptions.
-<P>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>the state of the service when shutdown finished.
-<DT><B>Throws:</B>
-<DD><CODE>InterruptedRuntimeException</CODE> - if the thread was interrupted while
-      waiting for the service to finish shutting down.
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/RuntimeException.html?is-external=true" title="class or interface in java.lang">RuntimeException</A></CODE> - if shutdown failed</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Service.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/base/Predicates.html" title="class in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/base/Service.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Service.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/base/Splitter.html b/javadoc/com/google/common/base/Splitter.html
deleted file mode 100644
index 91b00d3..0000000
--- a/javadoc/com/google/common/base/Splitter.html
+++ /dev/null
@@ -1,521 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:57 PST 2010 -->
-<TITLE>
-Splitter (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Splitter (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Splitter.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/base/Splitter.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Splitter.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.base</FONT>
-<BR>
-Class Splitter</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.base.Splitter</B>
-</PRE>
-<HR>
-<DL>
-<DT><PRE>public final class <B>Splitter</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
-</PRE>
-
-<P>
-An object that divides strings (or other instances of <code>CharSequence</code>)
- into substrings, by recognizing a <i>separator</i> (a.k.a. "delimiter")
- which can be expressed as a single character, literal string, regular
- expression, <code>CharMatcher</code>, or by using a fixed substring length. This
- class provides the complementary functionality to <A HREF="../../../../com/google/common/base/Joiner.html" title="class in com.google.common.base"><CODE>Joiner</CODE></A>.
-
- <p>Here is the most basic example of <code>Splitter</code> usage: <pre>   <code>Splitter.on(',').split("foo,bar")</code></pre>
-
- This invocation returns an <code>Iterable&lt;String&gt;</code> containing <code>"foo"</code>
- and <code>"bar"</code>, in that order.
-
- <p>By default <code>Splitter</code>'s behavior is very simplistic: <pre>   <code>Splitter.on(',').split("foo,,bar,  quux")</code></pre>
-
- This returns an iterable containing <code>["foo", "", "bar", "  quux"]</code>.
- Notice that the splitter does not assume that you want empty strings removed,
- or that you wish to trim whitespace. If you want features like these, simply
- ask for them: <pre> <code>private static final Splitter MY_SPLITTER = Splitter.on(',')
-       .trimResults()
-       .omitEmptyStrings();</code></pre>
-
- Now <code>MY_SPLITTER.split("foo, ,bar,  quux,")</code> returns an iterable
- containing just <code>["foo", "bar", "quux"]</code>. Note that the order in which
- the configuration methods are called is never significant; for instance,
- trimming is always applied first before checking for an empty result,
- regardless of the order in which the <A HREF="../../../../com/google/common/base/Splitter.html#trimResults()"><CODE>trimResults()</CODE></A> and
- <A HREF="../../../../com/google/common/base/Splitter.html#omitEmptyStrings()"><CODE>omitEmptyStrings()</CODE></A> methods were invoked.
-
- <p><b>Warning: splitter instances are always immutable</b>; a configuration
- method such as <code>omitEmptyStrings</code> has no effect on the instance it
- is invoked on! You must store and use the new splitter instance returned by
- the method. This makes splitters thread-safe, and safe to store as <code>static final</code> constants (as illustrated above). <pre>   <code>// Bad! Do not do this!
-   Splitter splitter = Splitter.on('/');
-   splitter.trimResults(); // does nothing!
-   return splitter.split("wrong / wrong / wrong");</code></pre>
-
- The separator recognized by the splitter does not have to be a single
- literal character as in the examples above. See the methods <A HREF="../../../../com/google/common/base/Splitter.html#on(java.lang.String)"><CODE>on(String)</CODE></A>, <A HREF="../../../../com/google/common/base/Splitter.html#on(java.util.regex.Pattern)"><CODE>on(Pattern)</CODE></A> and <A HREF="../../../../com/google/common/base/Splitter.html#on(com.google.common.base.CharMatcher)"><CODE>on(CharMatcher)</CODE></A> for examples
- of other ways to specify separators.
-
- <p><b>Note:</b> this class does not mimic any of the quirky behaviors of
- similar JDK methods; for instance, it does not silently discard trailing
- separators, as does <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true#split(java.lang.String)" title="class or interface in java.lang"><CODE>String.split(String)</CODE></A>, nor does it have a default
- behavior of using five particular whitespace characters as separators, like
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/StringTokenizer.html?is-external=true" title="class or interface in java.util"><CODE>StringTokenizer</CODE></A>.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2009.09.15 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Julien Silland, Jesse Wilson, Kevin Bourrillion</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/base/Splitter.html" title="class in com.google.common.base">Splitter</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Splitter.html#fixedLength(int)">fixedLength</A></B>(int&nbsp;length)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a splitter that divides strings into pieces of the given length.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/base/Splitter.html" title="class in com.google.common.base">Splitter</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Splitter.html#omitEmptyStrings()">omitEmptyStrings</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a splitter that behaves equivalently to <code>this</code> splitter, but
- automatically omits empty strings from the results.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/base/Splitter.html" title="class in com.google.common.base">Splitter</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Splitter.html#on(char)">on</A></B>(char&nbsp;separator)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a splitter that uses the given single-character separator.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/base/Splitter.html" title="class in com.google.common.base">Splitter</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Splitter.html#on(com.google.common.base.CharMatcher)">on</A></B>(<A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>&nbsp;separatorMatcher)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a splitter that considers any single character matched by the
- given <code>CharMatcher</code> to be a separator.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/base/Splitter.html" title="class in com.google.common.base">Splitter</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Splitter.html#on(java.util.regex.Pattern)">on</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</A>&nbsp;separatorPattern)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a splitter that considers any subsequence matching <code>pattern</code> to be a separator.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/base/Splitter.html" title="class in com.google.common.base">Splitter</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Splitter.html#on(java.lang.String)">on</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;separator)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a splitter that uses the given fixed string as a separator.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/base/Splitter.html" title="class in com.google.common.base">Splitter</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Splitter.html#onPattern(java.lang.String)">onPattern</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;separatorPattern)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a splitter that considers any subsequence matching a given
- pattern (regular expression) to be a separator.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Splitter.html#split(java.lang.CharSequence)">split</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang">CharSequence</A>&nbsp;sequence)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Splits the <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang"><CODE>CharSequence</CODE></A> passed in parameter.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/base/Splitter.html" title="class in com.google.common.base">Splitter</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Splitter.html#trimResults()">trimResults</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a splitter that behaves equivalently to <code>this</code> splitter, but
- automatically removes leading and trailing <A HREF="../../../../com/google/common/base/CharMatcher.html#WHITESPACE">whitespace</A> from each returned substring; equivalent
- to <code>trimResults(CharMatcher.WHITESPACE)</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/base/Splitter.html" title="class in com.google.common.base">Splitter</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Splitter.html#trimResults(com.google.common.base.CharMatcher)">trimResults</A></B>(<A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>&nbsp;trimmer)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a splitter that behaves equivalently to <code>this</code> splitter, but
- removes all leading or trailing characters matching the given <code>CharMatcher</code> from each returned substring.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="on(char)"><!-- --></A><H3>
-on</H3>
-<PRE>
-public static <A HREF="../../../../com/google/common/base/Splitter.html" title="class in com.google.common.base">Splitter</A> <B>on</B>(char&nbsp;separator)</PRE>
-<DL>
-<DD>Returns a splitter that uses the given single-character separator. For
- example, <code>Splitter.on(',').split("foo,,bar")</code> returns an iterable
- containing <code>["foo", "", "bar"]</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>separator</CODE> - the character to recognize as a separator
-<DT><B>Returns:</B><DD>a splitter, with default settings, that recognizes that separator</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="on(com.google.common.base.CharMatcher)"><!-- --></A><H3>
-on</H3>
-<PRE>
-public static <A HREF="../../../../com/google/common/base/Splitter.html" title="class in com.google.common.base">Splitter</A> <B>on</B>(<A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>&nbsp;separatorMatcher)</PRE>
-<DL>
-<DD>Returns a splitter that considers any single character matched by the
- given <code>CharMatcher</code> to be a separator. For example, <code>Splitter.on(CharMatcher.anyOf(";,")).split("foo,;bar,quux")</code> returns an
- iterable containing <code>["foo", "", "bar", "quux"]</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>separatorMatcher</CODE> - a <A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base"><CODE>CharMatcher</CODE></A> that determines whether a
-     character is a separator
-<DT><B>Returns:</B><DD>a splitter, with default settings, that uses this matcher</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="on(java.lang.String)"><!-- --></A><H3>
-on</H3>
-<PRE>
-public static <A HREF="../../../../com/google/common/base/Splitter.html" title="class in com.google.common.base">Splitter</A> <B>on</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;separator)</PRE>
-<DL>
-<DD>Returns a splitter that uses the given fixed string as a separator. For
- example, <code>Splitter.on(", ").split("foo, bar, baz,qux")</code> returns an
- iterable containing <code>["foo", "bar", "baz,qux"]</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>separator</CODE> - the literal, nonempty string to recognize as a separator
-<DT><B>Returns:</B><DD>a splitter, with default settings, that recognizes that separator</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="on(java.util.regex.Pattern)"><!-- --></A><H3>
-on</H3>
-<PRE>
-public static <A HREF="../../../../com/google/common/base/Splitter.html" title="class in com.google.common.base">Splitter</A> <B>on</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</A>&nbsp;separatorPattern)</PRE>
-<DL>
-<DD>Returns a splitter that considers any subsequence matching <code>pattern</code> to be a separator. For example, <code>Splitter.on(Pattern.compile("\r?\n")).split(entireFile)</code> splits a string
- into lines whether it uses DOS-style or UNIX-style line terminators.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>separatorPattern</CODE> - the pattern that determines whether a subsequence
-     is a separator. This pattern may not match the empty string.
-<DT><B>Returns:</B><DD>a splitter, with default settings, that uses this pattern
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>separatorPattern</code> matches the
-     empty string</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="onPattern(java.lang.String)"><!-- --></A><H3>
-onPattern</H3>
-<PRE>
-public static <A HREF="../../../../com/google/common/base/Splitter.html" title="class in com.google.common.base">Splitter</A> <B>onPattern</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;separatorPattern)</PRE>
-<DL>
-<DD>Returns a splitter that considers any subsequence matching a given
- pattern (regular expression) to be a separator. For example, <code>Splitter.onPattern("\r?\n").split(entireFile)</code> splits a string into lines
- whether it uses DOS-style or UNIX-style line terminators. This is
- equivalent to <code>Splitter.on(Pattern.compile(pattern))</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>separatorPattern</CODE> - the pattern that determines whether a subsequence
-     is a separator. This pattern may not match the empty string.
-<DT><B>Returns:</B><DD>a splitter, with default settings, that uses this pattern
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/regex/PatternSyntaxException.html?is-external=true" title="class or interface in java.util.regex">PatternSyntaxException</A></CODE> - if <code>separatorPattern</code> is a malformed
-     expression
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>separatorPattern</code> matches the
-     empty string</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="fixedLength(int)"><!-- --></A><H3>
-fixedLength</H3>
-<PRE>
-public static <A HREF="../../../../com/google/common/base/Splitter.html" title="class in com.google.common.base">Splitter</A> <B>fixedLength</B>(int&nbsp;length)</PRE>
-<DL>
-<DD>Returns a splitter that divides strings into pieces of the given length.
- For example, <code>Splitter.atEach(2).split("abcde")</code> returns an
- iterable containing <code>["ab", "cd", "e"]</code>. The last piece can be
- smaller than <code>length</code> but will never be empty.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>length</CODE> - the desired length of pieces after splitting
-<DT><B>Returns:</B><DD>a splitter, with default settings, that can split into fixed sized
-     pieces</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="omitEmptyStrings()"><!-- --></A><H3>
-omitEmptyStrings</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/base/Splitter.html" title="class in com.google.common.base">Splitter</A> <B>omitEmptyStrings</B>()</PRE>
-<DL>
-<DD>Returns a splitter that behaves equivalently to <code>this</code> splitter, but
- automatically omits empty strings from the results. For example, <code>Splitter.on(',').omitEmptyStrings().split(",a,,,b,c,,")</code> returns an
- iterable containing only <code>["a", "b", "c"]</code>.
-
- <p>If either <code>trimResults</code> option is also specified when creating a
- splitter, that splitter always trims results first before checking for
- emptiness. So, for example, <code>Splitter.on(':').omitEmptyStrings().trimResults().split(": : : ")</code> returns
- an empty iterable.
-
- <p>Note that it is ordinarily not possible for <A HREF="../../../../com/google/common/base/Splitter.html#split(java.lang.CharSequence)"><CODE>split(CharSequence)</CODE></A>
- to return an empty iterable, but when using this option, it can (if the
- input sequence consists of nothing but separators).
-<P>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a splitter with the desired configuration</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="trimResults()"><!-- --></A><H3>
-trimResults</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/base/Splitter.html" title="class in com.google.common.base">Splitter</A> <B>trimResults</B>()</PRE>
-<DL>
-<DD>Returns a splitter that behaves equivalently to <code>this</code> splitter, but
- automatically removes leading and trailing <A HREF="../../../../com/google/common/base/CharMatcher.html#WHITESPACE">whitespace</A> from each returned substring; equivalent
- to <code>trimResults(CharMatcher.WHITESPACE)</code>. For example, <code>Splitter.on(',').trimResults().split(" a, b  ,c  ")</code> returns an iterable
- containing <code>["a", "b", "c"]</code>.
-<P>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a splitter with the desired configuration</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="trimResults(com.google.common.base.CharMatcher)"><!-- --></A><H3>
-trimResults</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/base/Splitter.html" title="class in com.google.common.base">Splitter</A> <B>trimResults</B>(<A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>&nbsp;trimmer)</PRE>
-<DL>
-<DD>Returns a splitter that behaves equivalently to <code>this</code> splitter, but
- removes all leading or trailing characters matching the given <code>CharMatcher</code> from each returned substring. For example, <code>Splitter.on(',').trimResults(CharMatcher.is('_')).split("_a ,_b_ ,c__")</code>
- returns an iterable containing <code>["a ", "b_ ", "c"]</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>trimmer</CODE> - a <A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base"><CODE>CharMatcher</CODE></A> that determines whether a character
-     should be removed from the beginning/end of a subsequence
-<DT><B>Returns:</B><DD>a splitter with the desired configuration</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="split(java.lang.CharSequence)"><!-- --></A><H3>
-split</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&gt; <B>split</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang">CharSequence</A>&nbsp;sequence)</PRE>
-<DL>
-<DD>Splits the <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang"><CODE>CharSequence</CODE></A> passed in parameter.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>sequence</CODE> - the sequence of characters to split
-<DT><B>Returns:</B><DD>an iteration over the segments split from the parameter.</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Splitter.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/base/Splitter.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Splitter.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/base/Supplier.html b/javadoc/com/google/common/base/Supplier.html
deleted file mode 100644
index 5ab0853..0000000
--- a/javadoc/com/google/common/base/Supplier.html
+++ /dev/null
@@ -1,222 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:57 PST 2010 -->
-<TITLE>
-Supplier (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Supplier (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Supplier.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/base/Splitter.html" title="class in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/base/Suppliers.html" title="class in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/base/Supplier.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Supplier.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.base</FONT>
-<BR>
-Interface Supplier&lt;T&gt;</H2>
-<HR>
-<DL>
-<DT><PRE>public interface <B>Supplier&lt;T&gt;</B></DL>
-</PRE>
-
-<P>
-A class that can supply objects of a single type.  Semantically, this could
- be a factory, generator, builder, closure, or something else entirely. No
- guarantees are implied by this interface.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Harry Heymann</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/base/Supplier.html" title="type parameter in Supplier">T</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Supplier.html#get()">get</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retrieves an instance of the appropriate type.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="get()"><!-- --></A><H3>
-get</H3>
-<PRE>
-<A HREF="../../../../com/google/common/base/Supplier.html" title="type parameter in Supplier">T</A> <B>get</B>()</PRE>
-<DL>
-<DD>Retrieves an instance of the appropriate type. The returned object may or
- may not be a new instance, depending on the implementation.
-<P>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>an instance of the appropriate type</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Supplier.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/base/Splitter.html" title="class in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/base/Suppliers.html" title="class in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/base/Supplier.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Supplier.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/base/Suppliers.html b/javadoc/com/google/common/base/Suppliers.html
deleted file mode 100644
index 45810bb..0000000
--- a/javadoc/com/google/common/base/Suppliers.html
+++ /dev/null
@@ -1,389 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:57 PST 2010 -->
-<TITLE>
-Suppliers (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Suppliers (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Suppliers.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/base/Throwables.html" title="class in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/base/Suppliers.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Suppliers.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.base</FONT>
-<BR>
-Class Suppliers</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.base.Suppliers</B>
-</PRE>
-<HR>
-<DL>
-<DT><PRE>public final class <B>Suppliers</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
-</PRE>
-
-<P>
-Useful suppliers.
-
- <p>All methods return serializable suppliers as long as they're given
- serializable parameters.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Laurence Gonsalves, Harry Heymann</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;F,T&gt; <A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Suppliers.html#compose(com.google.common.base.Function, com.google.common.base.Supplier)">compose</A></B>(<A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super F,T&gt;&nbsp;function,
-        <A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;F&gt;&nbsp;first)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new supplier which is the composition of the provided function
- and supplier.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Suppliers.html#memoize(com.google.common.base.Supplier)">memoize</A></B>(<A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;T&gt;&nbsp;delegate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a supplier which caches the instance retrieved during the first
- call to <code>get()</code> and returns that value on subsequent calls to
- <code>get()</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Suppliers.html#memoizeWithExpiration(com.google.common.base.Supplier, long, java.util.concurrent.TimeUnit)">memoizeWithExpiration</A></B>(<A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;T&gt;&nbsp;delegate,
-                      long&nbsp;duration,
-                      <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</A>&nbsp;unit)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a supplier that caches the instance supplied by the delegate and
- removes the cached value after the specified time has passed.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Suppliers.html#ofInstance(T)">ofInstance</A></B>(T&nbsp;instance)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a supplier that always supplies <code>instance</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Suppliers.html#synchronizedSupplier(com.google.common.base.Supplier)">synchronizedSupplier</A></B>(<A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;T&gt;&nbsp;delegate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a supplier whose <code>get()</code> method synchronizes on
- <code>delegate</code> before calling it, making it thread-safe.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="compose(com.google.common.base.Function, com.google.common.base.Supplier)"><!-- --></A><H3>
-compose</H3>
-<PRE>
-public static &lt;F,T&gt; <A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;T&gt; <B>compose</B>(<A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super F,T&gt;&nbsp;function,
-                                        <A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;F&gt;&nbsp;first)</PRE>
-<DL>
-<DD>Returns a new supplier which is the composition of the provided function
- and supplier. In other words, the new supplier's value will be computed by
- retrieving the value from <code>first</code>, and then applying
- <code>function</code> to that value. Note that the resulting supplier will not
- call <code>first</code> or invoke <code>function</code> until it is called.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="memoize(com.google.common.base.Supplier)"><!-- --></A><H3>
-memoize</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;T&gt; <B>memoize</B>(<A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;T&gt;&nbsp;delegate)</PRE>
-<DL>
-<DD>Returns a supplier which caches the instance retrieved during the first
- call to <code>get()</code> and returns that value on subsequent calls to
- <code>get()</code>. See:
- <a href="http://en.wikipedia.org/wiki/Memoization">memoization</a>
-
- <p>The returned supplier is thread-safe. The supplier's serialized form
- does not contain the cached value, which will be recalculated when <code>get()</code> is called on the reserialized instance.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="memoizeWithExpiration(com.google.common.base.Supplier, long, java.util.concurrent.TimeUnit)"><!-- --></A><H3>
-memoizeWithExpiration</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;T&gt; <B>memoizeWithExpiration</B>(<A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;T&gt;&nbsp;delegate,
-                                                    long&nbsp;duration,
-                                                    <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</A>&nbsp;unit)</PRE>
-<DL>
-<DD>Returns a supplier that caches the instance supplied by the delegate and
- removes the cached value after the specified time has passed. Subsequent
- calls to <code>get()</code> return the cached value if the expiration time has
- not passed. After the expiration time, a new value is retrieved, cached,
- and returned. See:
- <a href="http://en.wikipedia.org/wiki/Memoization">memoization</a>
-
- <p>The returned supplier is thread-safe. The supplier's serialized form
- does not contain the cached value, which will be recalculated when <code>get()</code> is called on the reserialized instance.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>duration</CODE> - the length of time after a value is created that it
-     should stop being returned by subsequent <code>get()</code> calls<DD><CODE>unit</CODE> - the unit that <code>duration</code> is expressed in
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>duration</code> is not positive<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>tentative</b></DD>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="ofInstance(java.lang.Object)"><!-- --></A><A NAME="ofInstance(T)"><!-- --></A><H3>
-ofInstance</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;T&gt; <B>ofInstance</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                                         T&nbsp;instance)</PRE>
-<DL>
-<DD>Returns a supplier that always supplies <code>instance</code>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="synchronizedSupplier(com.google.common.base.Supplier)"><!-- --></A><H3>
-synchronizedSupplier</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;T&gt; <B>synchronizedSupplier</B>(<A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;T&gt;&nbsp;delegate)</PRE>
-<DL>
-<DD>Returns a supplier whose <code>get()</code> method synchronizes on
- <code>delegate</code> before calling it, making it thread-safe.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Suppliers.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/base/Throwables.html" title="class in com.google.common.base"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/base/Suppliers.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Suppliers.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/base/Throwables.html b/javadoc/com/google/common/base/Throwables.html
deleted file mode 100644
index 7ad2b6b..0000000
--- a/javadoc/com/google/common/base/Throwables.html
+++ /dev/null
@@ -1,549 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:57 PST 2010 -->
-<TITLE>
-Throwables (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Throwables (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Throwables.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/base/Suppliers.html" title="class in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;NEXT CLASS</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/base/Throwables.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Throwables.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.base</FONT>
-<BR>
-Class Throwables</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.base.Throwables</B>
-</PRE>
-<HR>
-<DL>
-<DT><PRE>public final class <B>Throwables</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
-</PRE>
-
-<P>
-Static utility methods pertaining to instances of <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang"><CODE>Throwable</CODE></A>.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2009.09.15 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Kevin Bourrillion, Ben Yu</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Throwables.html#getCausalChain(java.lang.Throwable)">getCausalChain</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A>&nbsp;throwable)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gets a <code>Throwable</code> cause chain as a list.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Throwables.html#getRootCause(java.lang.Throwable)">getRootCause</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A>&nbsp;throwable)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the innermost cause of <code>throwable</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Throwables.html#getStackTraceAsString(java.lang.Throwable)">getStackTraceAsString</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A>&nbsp;throwable)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a string containing the result of
- <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true#toString()" title="class or interface in java.lang"><CODE>toString()</CODE></A>, followed by the full, recursive
- stack trace of <code>throwable</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/RuntimeException.html?is-external=true" title="class or interface in java.lang">RuntimeException</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Throwables.html#propagate(java.lang.Throwable)">propagate</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A>&nbsp;throwable)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Propagates <code>throwable</code> as-is if it is an instance of
- <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/RuntimeException.html?is-external=true" title="class or interface in java.lang"><CODE>RuntimeException</CODE></A> or <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Error.html?is-external=true" title="class or interface in java.lang"><CODE>Error</CODE></A>, or else as a last resort, wraps
- it in a <code>RuntimeException</code> then propagates.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;X extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A>&gt; 
-<BR>
-void</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Throwables.html#propagateIfInstanceOf(java.lang.Throwable, java.lang.Class)">propagateIfInstanceOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A>&nbsp;throwable,
-                      <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;X&gt;&nbsp;declaredType)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Propagates <code>throwable</code> exactly as-is, if and only if it is an
- instance of <code>declaredType</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Throwables.html#propagateIfPossible(java.lang.Throwable)">propagateIfPossible</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A>&nbsp;throwable)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Propagates <code>throwable</code> exactly as-is, if and only if it is an
- instance of <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/RuntimeException.html?is-external=true" title="class or interface in java.lang"><CODE>RuntimeException</CODE></A> or <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Error.html?is-external=true" title="class or interface in java.lang"><CODE>Error</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;X extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A>&gt; 
-<BR>
-void</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Throwables.html#propagateIfPossible(java.lang.Throwable, java.lang.Class)">propagateIfPossible</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A>&nbsp;throwable,
-                    <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;X&gt;&nbsp;declaredType)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Propagates <code>throwable</code> exactly as-is, if and only if it is an
- instance of <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/RuntimeException.html?is-external=true" title="class or interface in java.lang"><CODE>RuntimeException</CODE></A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Error.html?is-external=true" title="class or interface in java.lang"><CODE>Error</CODE></A>, or
- <code>declaredType</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;X1 extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A>,X2 extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A>&gt; 
-<BR>
-void</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Throwables.html#propagateIfPossible(java.lang.Throwable, java.lang.Class, java.lang.Class)">propagateIfPossible</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A>&nbsp;throwable,
-                    <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;X1&gt;&nbsp;aDeclaredType,
-                    <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;X2&gt;&nbsp;anotherDeclaredType)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Propagates <code>throwable</code> exactly as-is, if and only if it is an
- instance of <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/RuntimeException.html?is-external=true" title="class or interface in java.lang"><CODE>RuntimeException</CODE></A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Error.html?is-external=true" title="class or interface in java.lang"><CODE>Error</CODE></A>, <code>aDeclaredType</code>,
- or <code>anotherDeclaredType</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/base/Throwables.html#throwCause(java.lang.Exception, boolean)">throwCause</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</A>&nbsp;exception,
-           boolean&nbsp;combineStackTraces)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Rethrows the cause exception of a given throwable, discarding the original
- throwable.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="propagateIfInstanceOf(java.lang.Throwable, java.lang.Class)"><!-- --></A><H3>
-propagateIfInstanceOf</H3>
-<PRE>
-public static &lt;X extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A>&gt; void <B>propagateIfInstanceOf</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A>&nbsp;throwable,
-                                                               <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;X&gt;&nbsp;declaredType)
-                                  throws X extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A></PRE>
-<DL>
-<DD>Propagates <code>throwable</code> exactly as-is, if and only if it is an
- instance of <code>declaredType</code>.  Example usage:
- <pre>
-   try {
-     someMethodThatCouldThrowAnything();
-   } catch (IKnowWhatToDoWithThisException e) {
-     handle(e);
-   } catch (Throwable t) {
-     Throwables.propagateIfInstanceOf(t, IOException.class);
-     Throwables.propagateIfInstanceOf(t, SQLException.class);
-     throw Throwables.propagate(t);
-   }
- </pre>
-<P>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE>X extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A></CODE></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="propagateIfPossible(java.lang.Throwable)"><!-- --></A><H3>
-propagateIfPossible</H3>
-<PRE>
-public static void <B>propagateIfPossible</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A>&nbsp;throwable)</PRE>
-<DL>
-<DD>Propagates <code>throwable</code> exactly as-is, if and only if it is an
- instance of <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/RuntimeException.html?is-external=true" title="class or interface in java.lang"><CODE>RuntimeException</CODE></A> or <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Error.html?is-external=true" title="class or interface in java.lang"><CODE>Error</CODE></A>.  Example usage:
- <pre>
-   try {
-     someMethodThatCouldThrowAnything();
-   } catch (IKnowWhatToDoWithThisException e) {
-     handle(e);
-   } catch (Throwable t) {
-     Throwables.propagateIfPossible(t);
-     throw new RuntimeException("unexpected", t);
-   }
- </pre>
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="propagateIfPossible(java.lang.Throwable, java.lang.Class)"><!-- --></A><H3>
-propagateIfPossible</H3>
-<PRE>
-public static &lt;X extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A>&gt; void <B>propagateIfPossible</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A>&nbsp;throwable,
-                                                             <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;X&gt;&nbsp;declaredType)
-                                throws X extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A></PRE>
-<DL>
-<DD>Propagates <code>throwable</code> exactly as-is, if and only if it is an
- instance of <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/RuntimeException.html?is-external=true" title="class or interface in java.lang"><CODE>RuntimeException</CODE></A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Error.html?is-external=true" title="class or interface in java.lang"><CODE>Error</CODE></A>, or
- <code>declaredType</code>. Example usage:
- <pre>
-   try {
-     someMethodThatCouldThrowAnything();
-   } catch (IKnowWhatToDoWithThisException e) {
-     handle(e);
-   } catch (Throwable t) {
-     Throwables.propagateIfPossible(t, OtherException.class);
-     throw new RuntimeException("unexpected", t);
-   }
- </pre>
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>throwable</CODE> - the Throwable to possibly propagate<DD><CODE>declaredType</CODE> - the single checked exception type declared by the
-     calling method
-<DT><B>Throws:</B>
-<DD><CODE>X extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A></CODE></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="propagateIfPossible(java.lang.Throwable, java.lang.Class, java.lang.Class)"><!-- --></A><H3>
-propagateIfPossible</H3>
-<PRE>
-public static &lt;X1 extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A>,X2 extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A>&gt; void <B>propagateIfPossible</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A>&nbsp;throwable,
-                                                                                   <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;X1&gt;&nbsp;aDeclaredType,
-                                                                                   <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;X2&gt;&nbsp;anotherDeclaredType)
-                                throws X1 extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A>,
-                                       X2 extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A></PRE>
-<DL>
-<DD>Propagates <code>throwable</code> exactly as-is, if and only if it is an
- instance of <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/RuntimeException.html?is-external=true" title="class or interface in java.lang"><CODE>RuntimeException</CODE></A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Error.html?is-external=true" title="class or interface in java.lang"><CODE>Error</CODE></A>, <code>aDeclaredType</code>,
- or <code>anotherDeclaredType</code>.  In the unlikely case that you have three
- or more declared checked exception types, you can handle them all by
- invoking these methods repeatedly. See usage example in
- <A HREF="../../../../com/google/common/base/Throwables.html#propagateIfPossible(java.lang.Throwable, java.lang.Class)"><CODE>propagateIfPossible(Throwable, Class)</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>throwable</CODE> - the Throwable to possibly propagate<DD><CODE>aDeclaredType</CODE> - any checked exception type declared by the calling
-     method<DD><CODE>anotherDeclaredType</CODE> - any other checked exception type declared by the
-     calling method
-<DT><B>Throws:</B>
-<DD><CODE>X1 extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A></CODE></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="propagate(java.lang.Throwable)"><!-- --></A><H3>
-propagate</H3>
-<PRE>
-public static <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/RuntimeException.html?is-external=true" title="class or interface in java.lang">RuntimeException</A> <B>propagate</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A>&nbsp;throwable)</PRE>
-<DL>
-<DD>Propagates <code>throwable</code> as-is if it is an instance of
- <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/RuntimeException.html?is-external=true" title="class or interface in java.lang"><CODE>RuntimeException</CODE></A> or <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Error.html?is-external=true" title="class or interface in java.lang"><CODE>Error</CODE></A>, or else as a last resort, wraps
- it in a <code>RuntimeException</code> then propagates.
- <p>
- This method always throws an exception. The <code>RuntimeException</code> return
- type is only for client code to make Java type system happy in case a
- return value is required by the enclosing method. Example usage:
- <pre>
-   T doSomething() {
-     try {
-       return someMethodThatCouldThrowAnything();
-     } catch (IKnowWhatToDoWithThisException e) {
-       return handle(e);
-     } catch (Throwable t) {
-       throw Throwables.propagate(t);
-     }
-   }
- </pre>
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>throwable</CODE> - the Throwable to propagate
-<DT><B>Returns:</B><DD>nothing will ever be returned</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getRootCause(java.lang.Throwable)"><!-- --></A><H3>
-getRootCause</H3>
-<PRE>
-public static <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A> <B>getRootCause</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A>&nbsp;throwable)</PRE>
-<DL>
-<DD>Returns the innermost cause of <code>throwable</code>. The first throwable in a
- chain provides context from when the error or exception was initially
- detected. Example usage:
- <pre>
-   assertEquals("Unable to assign a customer id",
-       Throwables.getRootCause(e).getMessage());
- </pre>
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getCausalChain(java.lang.Throwable)"><!-- --></A><H3>
-getCausalChain</H3>
-<PRE>
-public static <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A>&gt; <B>getCausalChain</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A>&nbsp;throwable)</PRE>
-<DL>
-<DD>Gets a <code>Throwable</code> cause chain as a list.  The first entry in the
- list will be <code>throwable</code> followed by its cause hierarchy.  Note
- that this is a snapshot of the cause chain and will not reflect
- any subsequent changes to the cause chain.
-
- <p>Here's an example of how it can be used to find specific types
- of exceptions in the cause chain:
-
- <pre>
- Iterables.filter(Throwables.getCausalChain(e), IOException.class));
- </pre>
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>throwable</CODE> - the non-null <code>Throwable</code> to extract causes from
-<DT><B>Returns:</B><DD>an unmodifiable list containing the cause chain starting with
-     <code>throwable</code></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getStackTraceAsString(java.lang.Throwable)"><!-- --></A><H3>
-getStackTraceAsString</H3>
-<PRE>
-public static <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>getStackTraceAsString</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A>&nbsp;throwable)</PRE>
-<DL>
-<DD>Returns a string containing the result of
- <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true#toString()" title="class or interface in java.lang"><CODE>toString()</CODE></A>, followed by the full, recursive
- stack trace of <code>throwable</code>. Note that you probably should not be
- parsing the resulting string; if you need programmatic access to the stack
- frames, you can call <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true#getStackTrace()" title="class or interface in java.lang"><CODE>Throwable.getStackTrace()</CODE></A>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="throwCause(java.lang.Exception, boolean)"><!-- --></A><H3>
-throwCause</H3>
-<PRE>
-public static <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</A> <B>throwCause</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</A>&nbsp;exception,
-                                   boolean&nbsp;combineStackTraces)
-                            throws <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</A></PRE>
-<DL>
-<DD>Rethrows the cause exception of a given throwable, discarding the original
- throwable. Optionally, the stack frames of the cause and the outer
- exception are combined and the stack trace of the cause is set to this
- combined trace. If there is no cause the original exception is rethrown
- unchanged in all cases.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>exception</CODE> - the exception from which to extract the cause<DD><CODE>combineStackTraces</CODE> - if true the stack trace of the cause will be
-     replaced by the concatenation of the trace from the exception and the
-     trace from the cause.
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</A></CODE></DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Throwables.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/base/Suppliers.html" title="class in com.google.common.base"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;NEXT CLASS</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/base/Throwables.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Throwables.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/base/class-use/CaseFormat.html b/javadoc/com/google/common/base/class-use/CaseFormat.html
deleted file mode 100644
index c24a05b..0000000
--- a/javadoc/com/google/common/base/class-use/CaseFormat.html
+++ /dev/null
@@ -1,207 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.base.CaseFormat (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.base.CaseFormat (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/base/CaseFormat.html" title="enum in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/base//class-useCaseFormat.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="CaseFormat.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.base.CaseFormat</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/base/CaseFormat.html" title="enum in com.google.common.base">CaseFormat</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.base"><B>com.google.common.base</B></A></TD>
-<TD>Miscellaneous common util classes and annotations.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.base"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/base/CaseFormat.html" title="enum in com.google.common.base">CaseFormat</A> in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A> that return <A HREF="../../../../../com/google/common/base/CaseFormat.html" title="enum in com.google.common.base">CaseFormat</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/base/CaseFormat.html" title="enum in com.google.common.base">CaseFormat</A></CODE></FONT></TD>
-<TD><CODE><B>CaseFormat.</B><B><A HREF="../../../../../com/google/common/base/CaseFormat.html#valueOf(java.lang.String)">valueOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;name)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the enum constant of this type with the specified name.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/base/CaseFormat.html" title="enum in com.google.common.base">CaseFormat</A>[]</CODE></FONT></TD>
-<TD><CODE><B>CaseFormat.</B><B><A HREF="../../../../../com/google/common/base/CaseFormat.html#values()">values</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an array containing the constants of this enum type, in
-the order they are declared.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A> with parameters of type <A HREF="../../../../../com/google/common/base/CaseFormat.html" title="enum in com.google.common.base">CaseFormat</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B>CaseFormat.</B><B><A HREF="../../../../../com/google/common/base/CaseFormat.html#to(com.google.common.base.CaseFormat, java.lang.String)">to</A></B>(<A HREF="../../../../../com/google/common/base/CaseFormat.html" title="enum in com.google.common.base">CaseFormat</A>&nbsp;format,
-   <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;s)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts the specified <code>String s</code> from this format to the specified
- <code>format</code>.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/base/CaseFormat.html" title="enum in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/base//class-useCaseFormat.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="CaseFormat.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/base/class-use/CharMatcher.LookupTable.html b/javadoc/com/google/common/base/class-use/CharMatcher.LookupTable.html
deleted file mode 100644
index 5b22d05..0000000
--- a/javadoc/com/google/common/base/class-use/CharMatcher.LookupTable.html
+++ /dev/null
@@ -1,182 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.base.CharMatcher.LookupTable (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.base.CharMatcher.LookupTable (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/base/CharMatcher.LookupTable.html" title="class in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/base//class-useCharMatcher.LookupTable.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="CharMatcher.LookupTable.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.base.CharMatcher.LookupTable</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/base/CharMatcher.LookupTable.html" title="class in com.google.common.base">CharMatcher.LookupTable</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.base"><B>com.google.common.base</B></A></TD>
-<TD>Miscellaneous common util classes and annotations.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.base"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/base/CharMatcher.LookupTable.html" title="class in com.google.common.base">CharMatcher.LookupTable</A> in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A> with parameters of type <A HREF="../../../../../com/google/common/base/CharMatcher.LookupTable.html" title="class in com.google.common.base">CharMatcher.LookupTable</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected &nbsp;void</CODE></FONT></TD>
-<TD><CODE><B>CharMatcher.</B><B><A HREF="../../../../../com/google/common/base/CharMatcher.html#setBits(com.google.common.base.CharMatcher.LookupTable)">setBits</A></B>(<A HREF="../../../../../com/google/common/base/CharMatcher.LookupTable.html" title="class in com.google.common.base">CharMatcher.LookupTable</A>&nbsp;table)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;For use by implementors; sets the bit corresponding to each character ('\0'
- to '\uFFFF') that matches this matcher in the given bit array,
- leaving all other bits untouched.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/base/CharMatcher.LookupTable.html" title="class in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/base//class-useCharMatcher.LookupTable.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="CharMatcher.LookupTable.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/base/class-use/CharMatcher.html b/javadoc/com/google/common/base/class-use/CharMatcher.html
deleted file mode 100644
index 71abc26..0000000
--- a/javadoc/com/google/common/base/class-use/CharMatcher.html
+++ /dev/null
@@ -1,444 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.base.CharMatcher (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.base.CharMatcher (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/base//class-useCharMatcher.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="CharMatcher.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.base.CharMatcher</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.base"><B>com.google.common.base</B></A></TD>
-<TD>Miscellaneous common util classes and annotations.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.base"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A> in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Fields in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A> declared as <A HREF="../../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></CODE></FONT></TD>
-<TD><CODE><B>CharMatcher.</B><B><A HREF="../../../../../com/google/common/base/CharMatcher.html#ANY">ANY</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Matches any character.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></CODE></FONT></TD>
-<TD><CODE><B>CharMatcher.</B><B><A HREF="../../../../../com/google/common/base/CharMatcher.html#ASCII">ASCII</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Determines whether a character is ASCII, meaning that its code point is
- less than 128.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></CODE></FONT></TD>
-<TD><CODE><B>CharMatcher.</B><B><A HREF="../../../../../com/google/common/base/CharMatcher.html#BREAKING_WHITESPACE">BREAKING_WHITESPACE</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Determines whether a character is a breaking whitespace (that is,
- a whitespace which can be interpreted as a break between words
- for formatting purposes).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></CODE></FONT></TD>
-<TD><CODE><B>CharMatcher.</B><B><A HREF="../../../../../com/google/common/base/CharMatcher.html#DIGIT">DIGIT</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Determines whether a character is a digit according to
- <a href="http://unicode.org/cldr/utility/list-unicodeset.jsp?a=%5Cp%7Bdigit%7D">Unicode</a>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></CODE></FONT></TD>
-<TD><CODE><B>CharMatcher.</B><B><A HREF="../../../../../com/google/common/base/CharMatcher.html#INVISIBLE">INVISIBLE</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Determines whether a character is invisible; that is, if its Unicode
- category is any of SPACE_SEPARATOR, LINE_SEPARATOR,
- PARAGRAPH_SEPARATOR, CONTROL, FORMAT, SURROGATE, and PRIVATE_USE according
- to ICU4J.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></CODE></FONT></TD>
-<TD><CODE><B>CharMatcher.</B><B><A HREF="../../../../../com/google/common/base/CharMatcher.html#JAVA_DIGIT">JAVA_DIGIT</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Determines whether a character is a digit according to <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Character.html?is-external=true#isDigit(char)" title="class or interface in java.lang"><CODE>Java's definition</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></CODE></FONT></TD>
-<TD><CODE><B>CharMatcher.</B><B><A HREF="../../../../../com/google/common/base/CharMatcher.html#JAVA_ISO_CONTROL">JAVA_ISO_CONTROL</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Determines whether a character is an ISO control character according to
- <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Character.html?is-external=true#isISOControl(char)" title="class or interface in java.lang"><CODE>Character.isISOControl(char)</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></CODE></FONT></TD>
-<TD><CODE><B>CharMatcher.</B><B><A HREF="../../../../../com/google/common/base/CharMatcher.html#JAVA_LETTER">JAVA_LETTER</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Determines whether a character is a letter according to <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Character.html?is-external=true#isLetter(char)" title="class or interface in java.lang"><CODE>Java's definition</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></CODE></FONT></TD>
-<TD><CODE><B>CharMatcher.</B><B><A HREF="../../../../../com/google/common/base/CharMatcher.html#JAVA_LETTER_OR_DIGIT">JAVA_LETTER_OR_DIGIT</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Determines whether a character is a letter or digit according to <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Character.html?is-external=true#isLetterOrDigit(char)" title="class or interface in java.lang"><CODE>Java's definition</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></CODE></FONT></TD>
-<TD><CODE><B>CharMatcher.</B><B><A HREF="../../../../../com/google/common/base/CharMatcher.html#JAVA_LOWER_CASE">JAVA_LOWER_CASE</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Determines whether a character is lower case according to <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Character.html?is-external=true#isLowerCase(char)" title="class or interface in java.lang"><CODE>Java's definition</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></CODE></FONT></TD>
-<TD><CODE><B>CharMatcher.</B><B><A HREF="../../../../../com/google/common/base/CharMatcher.html#JAVA_UPPER_CASE">JAVA_UPPER_CASE</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Determines whether a character is upper case according to <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Character.html?is-external=true#isUpperCase(char)" title="class or interface in java.lang"><CODE>Java's definition</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></CODE></FONT></TD>
-<TD><CODE><B>CharMatcher.</B><B><A HREF="../../../../../com/google/common/base/CharMatcher.html#JAVA_WHITESPACE">JAVA_WHITESPACE</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Determines whether a character is whitespace according to <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Character.html?is-external=true#isWhitespace(char)" title="class or interface in java.lang"><CODE>Java's definition</CODE></A>; it is usually preferable
- to use <A HREF="../../../../../com/google/common/base/CharMatcher.html#WHITESPACE"><CODE>WHITESPACE</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></CODE></FONT></TD>
-<TD><CODE><B>CharMatcher.</B><B><A HREF="../../../../../com/google/common/base/CharMatcher.html#NONE">NONE</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Matches no characters.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></CODE></FONT></TD>
-<TD><CODE><B>CharMatcher.</B><B><A HREF="../../../../../com/google/common/base/CharMatcher.html#SINGLE_WIDTH">SINGLE_WIDTH</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Determines whether a character is single-width (not double-width).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></CODE></FONT></TD>
-<TD><CODE><B>CharMatcher.</B><B><A HREF="../../../../../com/google/common/base/CharMatcher.html#WHITESPACE">WHITESPACE</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Determines whether a character is whitespace according to the latest
- Unicode standard, as illustrated
- <a href="http://unicode.org/cldr/utility/list-unicodeset.jsp?a=%5Cp%7Bwhitespace%7D">here</a>.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A> that return <A HREF="../../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></CODE></FONT></TD>
-<TD><CODE><B>CharMatcher.</B><B><A HREF="../../../../../com/google/common/base/CharMatcher.html#and(com.google.common.base.CharMatcher)">and</A></B>(<A HREF="../../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>&nbsp;other)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a matcher that matches any character matched by both this matcher
- and <code>other</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></CODE></FONT></TD>
-<TD><CODE><B>CharMatcher.</B><B><A HREF="../../../../../com/google/common/base/CharMatcher.html#anyOf(java.lang.CharSequence)">anyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang">CharSequence</A>&nbsp;sequence)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a <code>char</code> matcher that matches any character present in the
- given character sequence.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></CODE></FONT></TD>
-<TD><CODE><B>CharMatcher.</B><B><A HREF="../../../../../com/google/common/base/CharMatcher.html#forPredicate(com.google.common.base.Predicate)">forPredicate</A></B>(<A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Character.html?is-external=true" title="class or interface in java.lang">Character</A>&gt;&nbsp;predicate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a matcher with identical behavior to the given <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Character.html?is-external=true" title="class or interface in java.lang"><CODE>Character</CODE></A>-based predicate, but which operates on primitive <code>char</code>
- instances instead.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></CODE></FONT></TD>
-<TD><CODE><B>CharMatcher.</B><B><A HREF="../../../../../com/google/common/base/CharMatcher.html#inRange(char, char)">inRange</A></B>(char&nbsp;startInclusive,
-        char&nbsp;endInclusive)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a <code>char</code> matcher that matches any character in a given range
- (both endpoints are inclusive).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></CODE></FONT></TD>
-<TD><CODE><B>CharMatcher.</B><B><A HREF="../../../../../com/google/common/base/CharMatcher.html#is(char)">is</A></B>(char&nbsp;match)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a <code>char</code> matcher that matches only one specified character.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></CODE></FONT></TD>
-<TD><CODE><B>CharMatcher.</B><B><A HREF="../../../../../com/google/common/base/CharMatcher.html#isNot(char)">isNot</A></B>(char&nbsp;match)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a <code>char</code> matcher that matches any character except the one
- specified.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></CODE></FONT></TD>
-<TD><CODE><B>CharMatcher.</B><B><A HREF="../../../../../com/google/common/base/CharMatcher.html#negate()">negate</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a matcher that matches any character not matched by this matcher.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></CODE></FONT></TD>
-<TD><CODE><B>CharMatcher.</B><B><A HREF="../../../../../com/google/common/base/CharMatcher.html#noneOf(java.lang.CharSequence)">noneOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang">CharSequence</A>&nbsp;sequence)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a <code>char</code> matcher that matches any character not present in
- the given character sequence.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></CODE></FONT></TD>
-<TD><CODE><B>CharMatcher.</B><B><A HREF="../../../../../com/google/common/base/CharMatcher.html#or(com.google.common.base.CharMatcher)">or</A></B>(<A HREF="../../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>&nbsp;other)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a matcher that matches any character matched by either this matcher
- or <code>other</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></CODE></FONT></TD>
-<TD><CODE><B>CharMatcher.</B><B><A HREF="../../../../../com/google/common/base/CharMatcher.html#precomputed()">precomputed</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a <code>char</code> matcher functionally equivalent to this one, but
- which may be faster to query than the original; your mileage may vary.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A> with parameters of type <A HREF="../../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></CODE></FONT></TD>
-<TD><CODE><B>CharMatcher.</B><B><A HREF="../../../../../com/google/common/base/CharMatcher.html#and(com.google.common.base.CharMatcher)">and</A></B>(<A HREF="../../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>&nbsp;other)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a matcher that matches any character matched by both this matcher
- and <code>other</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/base/Splitter.html" title="class in com.google.common.base">Splitter</A></CODE></FONT></TD>
-<TD><CODE><B>Splitter.</B><B><A HREF="../../../../../com/google/common/base/Splitter.html#on(com.google.common.base.CharMatcher)">on</A></B>(<A HREF="../../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>&nbsp;separatorMatcher)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a splitter that considers any single character matched by the
- given <code>CharMatcher</code> to be a separator.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></CODE></FONT></TD>
-<TD><CODE><B>CharMatcher.</B><B><A HREF="../../../../../com/google/common/base/CharMatcher.html#or(com.google.common.base.CharMatcher)">or</A></B>(<A HREF="../../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>&nbsp;other)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a matcher that matches any character matched by either this matcher
- or <code>other</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/base/Splitter.html" title="class in com.google.common.base">Splitter</A></CODE></FONT></TD>
-<TD><CODE><B>Splitter.</B><B><A HREF="../../../../../com/google/common/base/Splitter.html#trimResults(com.google.common.base.CharMatcher)">trimResults</A></B>(<A HREF="../../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>&nbsp;trimmer)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a splitter that behaves equivalently to <code>this</code> splitter, but
- removes all leading or trailing characters matching the given <code>CharMatcher</code> from each returned substring.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/base//class-useCharMatcher.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="CharMatcher.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/base/class-use/Charsets.html b/javadoc/com/google/common/base/class-use/Charsets.html
deleted file mode 100644
index b378ca3..0000000
--- a/javadoc/com/google/common/base/class-use/Charsets.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.base.Charsets (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.base.Charsets (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/base/Charsets.html" title="class in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/base//class-useCharsets.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Charsets.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.base.Charsets</B></H2>
-</CENTER>
-No usage of com.google.common.base.Charsets
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/base/Charsets.html" title="class in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/base//class-useCharsets.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Charsets.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/base/class-use/Defaults.html b/javadoc/com/google/common/base/class-use/Defaults.html
deleted file mode 100644
index a0098d8..0000000
--- a/javadoc/com/google/common/base/class-use/Defaults.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.base.Defaults (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.base.Defaults (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/base/Defaults.html" title="class in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/base//class-useDefaults.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Defaults.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.base.Defaults</B></H2>
-</CENTER>
-No usage of com.google.common.base.Defaults
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/base/Defaults.html" title="class in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/base//class-useDefaults.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Defaults.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/base/class-use/FinalizablePhantomReference.html b/javadoc/com/google/common/base/class-use/FinalizablePhantomReference.html
deleted file mode 100644
index 44c6a5a..0000000
--- a/javadoc/com/google/common/base/class-use/FinalizablePhantomReference.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.base.FinalizablePhantomReference (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.base.FinalizablePhantomReference (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/base/FinalizablePhantomReference.html" title="class in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/base//class-useFinalizablePhantomReference.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="FinalizablePhantomReference.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.base.FinalizablePhantomReference</B></H2>
-</CENTER>
-No usage of com.google.common.base.FinalizablePhantomReference
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/base/FinalizablePhantomReference.html" title="class in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/base//class-useFinalizablePhantomReference.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="FinalizablePhantomReference.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/base/class-use/FinalizableReference.html b/javadoc/com/google/common/base/class-use/FinalizableReference.html
deleted file mode 100644
index 46d9da7..0000000
--- a/javadoc/com/google/common/base/class-use/FinalizableReference.html
+++ /dev/null
@@ -1,200 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Uses of Interface com.google.common.base.FinalizableReference (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Interface com.google.common.base.FinalizableReference (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/base//class-useFinalizableReference.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="FinalizableReference.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Interface<br>com.google.common.base.FinalizableReference</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base">FinalizableReference</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.base"><B>com.google.common.base</B></A></TD>
-<TD>Miscellaneous common util classes and annotations.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.base"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base">FinalizableReference</A> in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Classes in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A> that implement <A HREF="../../../../../com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base">FinalizableReference</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/base/FinalizablePhantomReference.html" title="class in com.google.common.base">FinalizablePhantomReference&lt;T&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Phantom reference with a <code>finalizeReferent()</code> method which a
- background thread invokes after the garbage collector reclaims the
- referent.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/base/FinalizableSoftReference.html" title="class in com.google.common.base">FinalizableSoftReference&lt;T&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Soft reference with a <code>finalizeReferent()</code> method which a background
- thread invokes after the garbage collector reclaims the referent.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/base/FinalizableWeakReference.html" title="class in com.google.common.base">FinalizableWeakReference&lt;T&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Weak reference with a <code>finalizeReferent()</code> method which a background
- thread invokes after the garbage collector reclaims the referent.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/base//class-useFinalizableReference.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="FinalizableReference.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/base/class-use/FinalizableReferenceQueue.html b/javadoc/com/google/common/base/class-use/FinalizableReferenceQueue.html
deleted file mode 100644
index 7e2b7fc..0000000
--- a/javadoc/com/google/common/base/class-use/FinalizableReferenceQueue.html
+++ /dev/null
@@ -1,193 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.base.FinalizableReferenceQueue (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.base.FinalizableReferenceQueue (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/base/FinalizableReferenceQueue.html" title="class in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/base//class-useFinalizableReferenceQueue.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="FinalizableReferenceQueue.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.base.FinalizableReferenceQueue</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/base/FinalizableReferenceQueue.html" title="class in com.google.common.base">FinalizableReferenceQueue</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.base"><B>com.google.common.base</B></A></TD>
-<TD>Miscellaneous common util classes and annotations.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.base"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/base/FinalizableReferenceQueue.html" title="class in com.google.common.base">FinalizableReferenceQueue</A> in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Constructors in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A> with parameters of type <A HREF="../../../../../com/google/common/base/FinalizableReferenceQueue.html" title="class in com.google.common.base">FinalizableReferenceQueue</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../../com/google/common/base/FinalizablePhantomReference.html#FinalizablePhantomReference(T, com.google.common.base.FinalizableReferenceQueue)">FinalizablePhantomReference</A></B>(<A HREF="../../../../../com/google/common/base/FinalizablePhantomReference.html" title="type parameter in FinalizablePhantomReference">T</A>&nbsp;referent,
-                            <A HREF="../../../../../com/google/common/base/FinalizableReferenceQueue.html" title="class in com.google.common.base">FinalizableReferenceQueue</A>&nbsp;queue)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a new finalizable phantom reference.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../../com/google/common/base/FinalizableSoftReference.html#FinalizableSoftReference(T, com.google.common.base.FinalizableReferenceQueue)">FinalizableSoftReference</A></B>(<A HREF="../../../../../com/google/common/base/FinalizableSoftReference.html" title="type parameter in FinalizableSoftReference">T</A>&nbsp;referent,
-                         <A HREF="../../../../../com/google/common/base/FinalizableReferenceQueue.html" title="class in com.google.common.base">FinalizableReferenceQueue</A>&nbsp;queue)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a new finalizable soft reference.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../../com/google/common/base/FinalizableWeakReference.html#FinalizableWeakReference(T, com.google.common.base.FinalizableReferenceQueue)">FinalizableWeakReference</A></B>(<A HREF="../../../../../com/google/common/base/FinalizableWeakReference.html" title="type parameter in FinalizableWeakReference">T</A>&nbsp;referent,
-                         <A HREF="../../../../../com/google/common/base/FinalizableReferenceQueue.html" title="class in com.google.common.base">FinalizableReferenceQueue</A>&nbsp;queue)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a new finalizable weak reference.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/base/FinalizableReferenceQueue.html" title="class in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/base//class-useFinalizableReferenceQueue.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="FinalizableReferenceQueue.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/base/class-use/FinalizableSoftReference.html b/javadoc/com/google/common/base/class-use/FinalizableSoftReference.html
deleted file mode 100644
index 9e6d978..0000000
--- a/javadoc/com/google/common/base/class-use/FinalizableSoftReference.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.base.FinalizableSoftReference (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.base.FinalizableSoftReference (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/base/FinalizableSoftReference.html" title="class in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/base//class-useFinalizableSoftReference.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="FinalizableSoftReference.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.base.FinalizableSoftReference</B></H2>
-</CENTER>
-No usage of com.google.common.base.FinalizableSoftReference
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/base/FinalizableSoftReference.html" title="class in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/base//class-useFinalizableSoftReference.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="FinalizableSoftReference.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/base/class-use/FinalizableWeakReference.html b/javadoc/com/google/common/base/class-use/FinalizableWeakReference.html
deleted file mode 100644
index 4f553c7..0000000
--- a/javadoc/com/google/common/base/class-use/FinalizableWeakReference.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.base.FinalizableWeakReference (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.base.FinalizableWeakReference (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/base/FinalizableWeakReference.html" title="class in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/base//class-useFinalizableWeakReference.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="FinalizableWeakReference.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.base.FinalizableWeakReference</B></H2>
-</CENTER>
-No usage of com.google.common.base.FinalizableWeakReference
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/base/FinalizableWeakReference.html" title="class in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/base//class-useFinalizableWeakReference.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="FinalizableWeakReference.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/base/class-use/Function.html b/javadoc/com/google/common/base/class-use/Function.html
deleted file mode 100644
index a084378..0000000
--- a/javadoc/com/google/common/base/class-use/Function.html
+++ /dev/null
@@ -1,643 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Uses of Interface com.google.common.base.Function (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Interface com.google.common.base.Function (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/base//class-useFunction.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Function.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Interface<br>com.google.common.base.Function</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.base"><B>com.google.common.base</B></A></TD>
-<TD>Miscellaneous common util classes and annotations.&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.util.concurrent"><B>com.google.common.util.concurrent</B></A></TD>
-<TD>&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.base"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A> in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A> that return <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;A,B,C&gt; <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;A,C&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Functions.</B><B><A HREF="../../../../../com/google/common/base/Functions.html#compose(com.google.common.base.Function, com.google.common.base.Function)">compose</A></B>(<A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;B,C&gt;&nbsp;g,
-        <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;A,? extends B&gt;&nbsp;f)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the composition of two functions.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>,E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Functions.</B><B><A HREF="../../../../../com/google/common/base/Functions.html#constant(E)">constant</A></B>(E&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a function that returns <code>value</code> for any input.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Functions.</B><B><A HREF="../../../../../com/google/common/base/Functions.html#forMap(java.util.Map, V)">forMap</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,? extends V&gt;&nbsp;map,
-       V&nbsp;defaultValue)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a function which performs a map lookup with a default value.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Functions.</B><B><A HREF="../../../../../com/google/common/base/Functions.html#forMap(java.util.Map)">forMap</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;&nbsp;map)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a function which performs a map lookup.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;T,<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</A>&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Functions.</B><B><A HREF="../../../../../com/google/common/base/Functions.html#forPredicate(com.google.common.base.Predicate)">forPredicate</A></B>(<A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;&nbsp;predicate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a function that returns the same boolean output as the given
- predicate for all inputs.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;E,E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Functions.</B><B><A HREF="../../../../../com/google/common/base/Functions.html#identity()">identity</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the identity function.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>Functions.</B><B><A HREF="../../../../../com/google/common/base/Functions.html#toStringFunction()">toStringFunction</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a function that calls <code>toString()</code> on its argument.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A> with parameters of type <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;F,T&gt; <A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Suppliers.</B><B><A HREF="../../../../../com/google/common/base/Suppliers.html#compose(com.google.common.base.Function, com.google.common.base.Supplier)">compose</A></B>(<A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super F,T&gt;&nbsp;function,
-        <A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;F&gt;&nbsp;first)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new supplier which is the composition of the provided function
- and supplier.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;A,B,C&gt; <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;A,C&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Functions.</B><B><A HREF="../../../../../com/google/common/base/Functions.html#compose(com.google.common.base.Function, com.google.common.base.Function)">compose</A></B>(<A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;B,C&gt;&nbsp;g,
-        <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;A,? extends B&gt;&nbsp;f)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the composition of two functions.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;A,B,C&gt; <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;A,C&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Functions.</B><B><A HREF="../../../../../com/google/common/base/Functions.html#compose(com.google.common.base.Function, com.google.common.base.Function)">compose</A></B>(<A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;B,C&gt;&nbsp;g,
-        <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;A,? extends B&gt;&nbsp;f)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the composition of two functions.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;A,B&gt; <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;A&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Predicates.</B><B><A HREF="../../../../../com/google/common/base/Predicates.html#compose(com.google.common.base.Predicate, com.google.common.base.Function)">compose</A></B>(<A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;B&gt;&nbsp;predicate,
-        <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;A,? extends B&gt;&nbsp;function)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the composition of a function and a predicate.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> with parameters of type <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Multimaps.</B><B><A HREF="../../../../../com/google/common/collect/Multimaps.html#index(java.lang.Iterable, com.google.common.base.Function)">index</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;V&gt;&nbsp;values,
-      <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super V,K&gt;&nbsp;keyFunction)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an index <code>ImmutableMultimap</code> that contains the results of
- applying a specified function to each item in an <code>Iterable</code> of
- values.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>MapMaker.</B><B><A HREF="../../../../../com/google/common/collect/MapMaker.html#makeComputingMap(com.google.common.base.Function)">makeComputingMap</A></B>(<A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super K,? extends V&gt;&nbsp;computingFunction)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Builds a map that supports atomic, on-demand computation of values.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;F&gt; <A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;F&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Ordering.</B><B><A HREF="../../../../../com/google/common/collect/Ordering.html#onResultOf(com.google.common.base.Function)">onResultOf</A></B>(<A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;F,? extends <A HREF="../../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt;&nbsp;function)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new ordering on <code>F</code> which orders elements by first applying
- a function to them, then comparing those results using <code>this</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;F,T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Collections2.</B><B><A HREF="../../../../../com/google/common/collect/Collections2.html#transform(java.util.Collection, com.google.common.base.Function)">transform</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;F&gt;&nbsp;fromCollection,
-          <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super F,T&gt;&nbsp;function)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection that applies <code>function</code> to each element of
- <code>fromCollection</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;F,T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Iterables.</B><B><A HREF="../../../../../com/google/common/collect/Iterables.html#transform(java.lang.Iterable, com.google.common.base.Function)">transform</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;F&gt;&nbsp;fromIterable,
-          <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super F,? extends T&gt;&nbsp;function)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an iterable that applies <code>function</code> to each element of <code>fromIterable</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;F,T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Iterators.</B><B><A HREF="../../../../../com/google/common/collect/Iterators.html#transform(java.util.Iterator, com.google.common.base.Function)">transform</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;F&gt;&nbsp;fromIterator,
-          <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super F,? extends T&gt;&nbsp;function)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an iterator that applies <code>function</code> to each element of <code>fromIterator</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;F,T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Lists.</B><B><A HREF="../../../../../com/google/common/collect/Lists.html#transform(java.util.List, com.google.common.base.Function)">transform</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;F&gt;&nbsp;fromList,
-          <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super F,? extends T&gt;&nbsp;function)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a list that applies <code>function</code> to each element of <code>fromList</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V1,V2&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V2&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Maps.</B><B><A HREF="../../../../../com/google/common/collect/Maps.html#transformValues(java.util.Map, com.google.common.base.Function)">transformValues</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V1&gt;&nbsp;fromMap,
-                <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super V1,V2&gt;&nbsp;function)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of a map where each value is transformed by a function.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Maps.</B><B><A HREF="../../../../../com/google/common/collect/Maps.html#uniqueIndex(java.lang.Iterable, com.google.common.base.Function)">uniqueIndex</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;V&gt;&nbsp;values,
-            <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super V,K&gt;&nbsp;keyFunction)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map for which the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#values()" title="class or interface in java.util"><CODE>Map.values()</CODE></A> are the given
- elements in the given order, and each key is the product of invoking a
- supplied function on its corresponding value.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.util.concurrent"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A> in <A HREF="../../../../../com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A> with parameters of type <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;I,O&gt; <A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;O&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Futures.</B><B><A HREF="../../../../../com/google/common/util/concurrent/Futures.html#chain(com.google.common.util.concurrent.ListenableFuture, com.google.common.base.Function)">chain</A></B>(<A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;I&gt;&nbsp;input,
-      <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super I,? extends <A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;? extends O&gt;&gt;&nbsp;function)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>ListenableFuture</code> that wraps another
- <code>ListenableFuture</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;I,O&gt; <A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;O&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Futures.</B><B><A HREF="../../../../../com/google/common/util/concurrent/Futures.html#chain(com.google.common.util.concurrent.ListenableFuture, com.google.common.base.Function, java.util.concurrent.Executor)">chain</A></B>(<A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;I&gt;&nbsp;input,
-      <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super I,? extends <A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;? extends O&gt;&gt;&nbsp;function,
-      <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executor.html?is-external=true" title="class or interface in java.util.concurrent">Executor</A>&nbsp;exec)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>ListenableFuture</code> that wraps another
- <code>ListenableFuture</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;I,O&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;O&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Futures.</B><B><A HREF="../../../../../com/google/common/util/concurrent/Futures.html#compose(java.util.concurrent.Future, com.google.common.base.Function)">compose</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;I&gt;&nbsp;future,
-        <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super I,? extends O&gt;&nbsp;function)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>Future</code> that wraps another <code>Future</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;I,O&gt; <A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;O&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Futures.</B><B><A HREF="../../../../../com/google/common/util/concurrent/Futures.html#compose(com.google.common.util.concurrent.ListenableFuture, com.google.common.base.Function)">compose</A></B>(<A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;I&gt;&nbsp;future,
-        <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super I,? extends O&gt;&nbsp;function)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>ListenableFuture</code> that wraps another
- <code>ListenableFuture</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;I,O&gt; <A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;O&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Futures.</B><B><A HREF="../../../../../com/google/common/util/concurrent/Futures.html#compose(com.google.common.util.concurrent.ListenableFuture, com.google.common.base.Function, java.util.concurrent.Executor)">compose</A></B>(<A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;I&gt;&nbsp;future,
-        <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super I,? extends O&gt;&nbsp;function,
-        <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executor.html?is-external=true" title="class or interface in java.util.concurrent">Executor</A>&nbsp;exec)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>ListenableFuture</code> that wraps another
- <code>ListenableFuture</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T,E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</A>&gt; 
-<BR>
-<A HREF="../../../../../com/google/common/util/concurrent/CheckedFuture.html" title="interface in com.google.common.util.concurrent">CheckedFuture</A>&lt;T,E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Futures.</B><B><A HREF="../../../../../com/google/common/util/concurrent/Futures.html#makeChecked(java.util.concurrent.Future, com.google.common.base.Function)">makeChecked</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;T&gt;&nbsp;future,
-            <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</A>,E&gt;&nbsp;mapper)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <A HREF="../../../../../com/google/common/util/concurrent/CheckedFuture.html" title="interface in com.google.common.util.concurrent"><CODE>CheckedFuture</CODE></A> out of a normal <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>Future</CODE></A> and a
- <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base"><CODE>Function</CODE></A> that maps from <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang"><CODE>Exception</CODE></A> instances into the
- appropriate checked type.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/base//class-useFunction.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Function.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/base/class-use/Functions.html b/javadoc/com/google/common/base/class-use/Functions.html
deleted file mode 100644
index 31408c9..0000000
--- a/javadoc/com/google/common/base/class-use/Functions.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.base.Functions (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.base.Functions (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/base/Functions.html" title="class in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/base//class-useFunctions.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Functions.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.base.Functions</B></H2>
-</CENTER>
-No usage of com.google.common.base.Functions
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/base/Functions.html" title="class in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/base//class-useFunctions.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Functions.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/base/class-use/Joiner.MapJoiner.html b/javadoc/com/google/common/base/class-use/Joiner.MapJoiner.html
deleted file mode 100644
index 3c6639f..0000000
--- a/javadoc/com/google/common/base/class-use/Joiner.MapJoiner.html
+++ /dev/null
@@ -1,191 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.base.Joiner.MapJoiner (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.base.Joiner.MapJoiner (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/base/Joiner.MapJoiner.html" title="class in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/base//class-useJoiner.MapJoiner.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Joiner.MapJoiner.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.base.Joiner.MapJoiner</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/base/Joiner.MapJoiner.html" title="class in com.google.common.base">Joiner.MapJoiner</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.base"><B>com.google.common.base</B></A></TD>
-<TD>Miscellaneous common util classes and annotations.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.base"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/base/Joiner.MapJoiner.html" title="class in com.google.common.base">Joiner.MapJoiner</A> in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A> that return <A HREF="../../../../../com/google/common/base/Joiner.MapJoiner.html" title="class in com.google.common.base">Joiner.MapJoiner</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/base/Joiner.MapJoiner.html" title="class in com.google.common.base">Joiner.MapJoiner</A></CODE></FONT></TD>
-<TD><CODE><B>Joiner.MapJoiner.</B><B><A HREF="../../../../../com/google/common/base/Joiner.MapJoiner.html#useForNull(java.lang.String)">useForNull</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;nullText)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a map joiner with the same behavior as this one, except
- automatically substituting <code>nullText</code> for any provided null keys or
- values.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/base/Joiner.MapJoiner.html" title="class in com.google.common.base">Joiner.MapJoiner</A></CODE></FONT></TD>
-<TD><CODE><B>Joiner.</B><B><A HREF="../../../../../com/google/common/base/Joiner.html#withKeyValueSeparator(java.lang.String)">withKeyValueSeparator</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;keyValueSeparator)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a <code>MapJoiner</code> using the given key-value separator, and the
- same configuration as this <code>Joiner</code> otherwise.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/base/Joiner.MapJoiner.html" title="class in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/base//class-useJoiner.MapJoiner.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Joiner.MapJoiner.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/base/class-use/Joiner.html b/javadoc/com/google/common/base/class-use/Joiner.html
deleted file mode 100644
index f631847..0000000
--- a/javadoc/com/google/common/base/class-use/Joiner.html
+++ /dev/null
@@ -1,208 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.base.Joiner (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.base.Joiner (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/base/Joiner.html" title="class in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/base//class-useJoiner.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Joiner.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.base.Joiner</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.base"><B>com.google.common.base</B></A></TD>
-<TD>Miscellaneous common util classes and annotations.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.base"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A> in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A> that return <A HREF="../../../../../com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A></CODE></FONT></TD>
-<TD><CODE><B>Joiner.</B><B><A HREF="../../../../../com/google/common/base/Joiner.html#on(char)">on</A></B>(char&nbsp;separator)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a joiner which automatically places <code>separator</code> between
- consecutive elements.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A></CODE></FONT></TD>
-<TD><CODE><B>Joiner.</B><B><A HREF="../../../../../com/google/common/base/Joiner.html#on(java.lang.String)">on</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;separator)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a joiner which automatically places <code>separator</code> between
- consecutive elements.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A></CODE></FONT></TD>
-<TD><CODE><B>Joiner.</B><B><A HREF="../../../../../com/google/common/base/Joiner.html#skipNulls()">skipNulls</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a joiner with the same behavior as this joiner, except
- automatically skipping over any provided null elements.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A></CODE></FONT></TD>
-<TD><CODE><B>Joiner.</B><B><A HREF="../../../../../com/google/common/base/Joiner.html#useForNull(java.lang.String)">useForNull</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;nullText)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a joiner with the same behavior as this one, except automatically
- substituting <code>nullText</code> for any provided null elements.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/base/Joiner.html" title="class in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/base//class-useJoiner.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Joiner.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/base/class-use/Objects.ToStringHelper.html b/javadoc/com/google/common/base/class-use/Objects.ToStringHelper.html
deleted file mode 100644
index 189063a..0000000
--- a/javadoc/com/google/common/base/class-use/Objects.ToStringHelper.html
+++ /dev/null
@@ -1,201 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.base.Objects.ToStringHelper (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.base.Objects.ToStringHelper (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/base/Objects.ToStringHelper.html" title="class in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/base//class-useObjects.ToStringHelper.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Objects.ToStringHelper.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.base.Objects.ToStringHelper</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/base/Objects.ToStringHelper.html" title="class in com.google.common.base">Objects.ToStringHelper</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.base"><B>com.google.common.base</B></A></TD>
-<TD>Miscellaneous common util classes and annotations.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.base"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/base/Objects.ToStringHelper.html" title="class in com.google.common.base">Objects.ToStringHelper</A> in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A> that return <A HREF="../../../../../com/google/common/base/Objects.ToStringHelper.html" title="class in com.google.common.base">Objects.ToStringHelper</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/base/Objects.ToStringHelper.html" title="class in com.google.common.base">Objects.ToStringHelper</A></CODE></FONT></TD>
-<TD><CODE><B>Objects.ToStringHelper.</B><B><A HREF="../../../../../com/google/common/base/Objects.ToStringHelper.html#add(java.lang.String, java.lang.Object)">add</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;name,
-    <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds a name/value pair to the formatted output in <code>name=value</code>
- format.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/base/Objects.ToStringHelper.html" title="class in com.google.common.base">Objects.ToStringHelper</A></CODE></FONT></TD>
-<TD><CODE><B>Objects.ToStringHelper.</B><B><A HREF="../../../../../com/google/common/base/Objects.ToStringHelper.html#addValue(java.lang.Object)">addValue</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds a value to the formatted output in <code>value</code> format.<p/>
-
- It is strongly encouraged to use <A HREF="../../../../../com/google/common/base/Objects.ToStringHelper.html#add(java.lang.String, java.lang.Object)"><CODE>add(String, Object)</CODE></A> instead and
- give value a readable name.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/base/Objects.ToStringHelper.html" title="class in com.google.common.base">Objects.ToStringHelper</A></CODE></FONT></TD>
-<TD><CODE><B>Objects.</B><B><A HREF="../../../../../com/google/common/base/Objects.html#toStringHelper(java.lang.Object)">toStringHelper</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an instance of <A HREF="../../../../../com/google/common/base/Objects.ToStringHelper.html" title="class in com.google.common.base"><CODE>Objects.ToStringHelper</CODE></A>.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/base/Objects.ToStringHelper.html" title="class in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/base//class-useObjects.ToStringHelper.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Objects.ToStringHelper.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/base/class-use/Objects.html b/javadoc/com/google/common/base/class-use/Objects.html
deleted file mode 100644
index 9907b78..0000000
--- a/javadoc/com/google/common/base/class-use/Objects.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.base.Objects (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.base.Objects (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/base/Objects.html" title="class in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/base//class-useObjects.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Objects.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.base.Objects</B></H2>
-</CENTER>
-No usage of com.google.common.base.Objects
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/base/Objects.html" title="class in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/base//class-useObjects.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Objects.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/base/class-use/Preconditions.html b/javadoc/com/google/common/base/class-use/Preconditions.html
deleted file mode 100644
index c984847..0000000
--- a/javadoc/com/google/common/base/class-use/Preconditions.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.base.Preconditions (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.base.Preconditions (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/base/Preconditions.html" title="class in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/base//class-usePreconditions.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Preconditions.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.base.Preconditions</B></H2>
-</CENTER>
-No usage of com.google.common.base.Preconditions
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/base/Preconditions.html" title="class in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/base//class-usePreconditions.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Preconditions.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/base/class-use/Predicate.html b/javadoc/com/google/common/base/class-use/Predicate.html
deleted file mode 100644
index d708058..0000000
--- a/javadoc/com/google/common/base/class-use/Predicate.html
+++ /dev/null
@@ -1,936 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Uses of Interface com.google.common.base.Predicate (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Interface com.google.common.base.Predicate (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/base//class-usePredicate.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Predicate.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Interface<br>com.google.common.base.Predicate</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.base"><B>com.google.common.base</B></A></TD>
-<TD>Miscellaneous common util classes and annotations.&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.base"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A> in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Classes in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A> that implement <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Determines a true or false value for any Java <code>char</code> value, just as
- <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base"><CODE>Predicate</CODE></A> does for any <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang"><CODE>Object</CODE></A>.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A> that return <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Predicates.</B><B><A HREF="../../../../../com/google/common/base/Predicates.html#alwaysFalse()">alwaysFalse</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that always evaluates to <code>false</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Predicates.</B><B><A HREF="../../../../../com/google/common/base/Predicates.html#alwaysTrue()">alwaysTrue</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that always evaluates to <code>true</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Predicates.</B><B><A HREF="../../../../../com/google/common/base/Predicates.html#and(java.lang.Iterable)">and</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&gt;&nbsp;components)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if each of its
- components evaluates to <code>true</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Predicates.</B><B><A HREF="../../../../../com/google/common/base/Predicates.html#and(com.google.common.base.Predicate...)">and</A></B>(<A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;...&nbsp;components)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if each of its
- components evaluates to <code>true</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Predicates.</B><B><A HREF="../../../../../com/google/common/base/Predicates.html#and(com.google.common.base.Predicate, com.google.common.base.Predicate)">and</A></B>(<A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;first,
-    <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;second)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if both of its
- components evaluate to <code>true</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;A,B&gt; <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;A&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Predicates.</B><B><A HREF="../../../../../com/google/common/base/Predicates.html#compose(com.google.common.base.Predicate, com.google.common.base.Function)">compose</A></B>(<A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;B&gt;&nbsp;predicate,
-        <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;A,? extends B&gt;&nbsp;function)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the composition of a function and a predicate.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Predicates.</B><B><A HREF="../../../../../com/google/common/base/Predicates.html#equalTo(T)">equalTo</A></B>(T&nbsp;target)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if the object being
- tested <code>equals()</code> the given target or both are null.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Predicates.</B><B><A HREF="../../../../../com/google/common/base/Predicates.html#in(java.util.Collection)">in</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;? extends T&gt;&nbsp;target)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if the object reference
- being tested is a member of the given collection.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>Predicates.</B><B><A HREF="../../../../../com/google/common/base/Predicates.html#instanceOf(java.lang.Class)">instanceOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;?&gt;&nbsp;clazz)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if the object being
- tested is an instance of the given class.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Predicates.</B><B><A HREF="../../../../../com/google/common/base/Predicates.html#isNull()">isNull</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if the object reference
- being tested is null.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Predicates.</B><B><A HREF="../../../../../com/google/common/base/Predicates.html#not(com.google.common.base.Predicate)">not</A></B>(<A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;&nbsp;predicate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if the given predicate
- evaluates to <code>false</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Predicates.</B><B><A HREF="../../../../../com/google/common/base/Predicates.html#notNull()">notNull</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if the object reference
- being tested is not null.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Predicates.</B><B><A HREF="../../../../../com/google/common/base/Predicates.html#or(java.lang.Iterable)">or</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&gt;&nbsp;components)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if any one of its
- components evaluates to <code>true</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Predicates.</B><B><A HREF="../../../../../com/google/common/base/Predicates.html#or(com.google.common.base.Predicate...)">or</A></B>(<A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;...&nbsp;components)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if any one of its
- components evaluates to <code>true</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Predicates.</B><B><A HREF="../../../../../com/google/common/base/Predicates.html#or(com.google.common.base.Predicate, com.google.common.base.Predicate)">or</A></B>(<A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;first,
-   <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;second)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if either of its
- components evaluates to <code>true</code>.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A> with parameters of type <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Predicates.</B><B><A HREF="../../../../../com/google/common/base/Predicates.html#and(com.google.common.base.Predicate...)">and</A></B>(<A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;...&nbsp;components)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if each of its
- components evaluates to <code>true</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Predicates.</B><B><A HREF="../../../../../com/google/common/base/Predicates.html#and(com.google.common.base.Predicate, com.google.common.base.Predicate)">and</A></B>(<A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;first,
-    <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;second)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if both of its
- components evaluate to <code>true</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Predicates.</B><B><A HREF="../../../../../com/google/common/base/Predicates.html#and(com.google.common.base.Predicate, com.google.common.base.Predicate)">and</A></B>(<A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;first,
-    <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;second)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if both of its
- components evaluate to <code>true</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;A,B&gt; <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;A&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Predicates.</B><B><A HREF="../../../../../com/google/common/base/Predicates.html#compose(com.google.common.base.Predicate, com.google.common.base.Function)">compose</A></B>(<A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;B&gt;&nbsp;predicate,
-        <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;A,? extends B&gt;&nbsp;function)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the composition of a function and a predicate.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></CODE></FONT></TD>
-<TD><CODE><B>CharMatcher.</B><B><A HREF="../../../../../com/google/common/base/CharMatcher.html#forPredicate(com.google.common.base.Predicate)">forPredicate</A></B>(<A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Character.html?is-external=true" title="class or interface in java.lang">Character</A>&gt;&nbsp;predicate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a matcher with identical behavior to the given <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Character.html?is-external=true" title="class or interface in java.lang"><CODE>Character</CODE></A>-based predicate, but which operates on primitive <code>char</code>
- instances instead.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;T,<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</A>&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Functions.</B><B><A HREF="../../../../../com/google/common/base/Functions.html#forPredicate(com.google.common.base.Predicate)">forPredicate</A></B>(<A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;&nbsp;predicate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a function that returns the same boolean output as the given
- predicate for all inputs.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Predicates.</B><B><A HREF="../../../../../com/google/common/base/Predicates.html#not(com.google.common.base.Predicate)">not</A></B>(<A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;&nbsp;predicate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if the given predicate
- evaluates to <code>false</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Predicates.</B><B><A HREF="../../../../../com/google/common/base/Predicates.html#or(com.google.common.base.Predicate...)">or</A></B>(<A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;...&nbsp;components)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if any one of its
- components evaluates to <code>true</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Predicates.</B><B><A HREF="../../../../../com/google/common/base/Predicates.html#or(com.google.common.base.Predicate, com.google.common.base.Predicate)">or</A></B>(<A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;first,
-   <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;second)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if either of its
- components evaluates to <code>true</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Predicates.</B><B><A HREF="../../../../../com/google/common/base/Predicates.html#or(com.google.common.base.Predicate, com.google.common.base.Predicate)">or</A></B>(<A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;first,
-   <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;second)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if either of its
- components evaluates to <code>true</code>.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Method parameters in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A> with type arguments of type <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Predicates.</B><B><A HREF="../../../../../com/google/common/base/Predicates.html#and(java.lang.Iterable)">and</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&gt;&nbsp;components)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if each of its
- components evaluates to <code>true</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Predicates.</B><B><A HREF="../../../../../com/google/common/base/Predicates.html#or(java.lang.Iterable)">or</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&gt;&nbsp;components)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a predicate that evaluates to <code>true</code> if any one of its
- components evaluates to <code>true</code>.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> with parameters of type <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; boolean</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Iterables.</B><B><A HREF="../../../../../com/google/common/collect/Iterables.html#all(java.lang.Iterable, com.google.common.base.Predicate)">all</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable,
-    <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if every element in <code>iterable</code> satisfies the
- predicate.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; boolean</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Iterators.</B><B><A HREF="../../../../../com/google/common/collect/Iterators.html#all(java.util.Iterator, com.google.common.base.Predicate)">all</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator,
-    <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if every element returned by <code>iterator</code>
- satisfies the given predicate.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; boolean</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Iterables.</B><B><A HREF="../../../../../com/google/common/collect/Iterables.html#any(java.lang.Iterable, com.google.common.base.Predicate)">any</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable,
-    <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if one or more elements in <code>iterable</code> satisfy
- the predicate.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; boolean</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Iterators.</B><B><A HREF="../../../../../com/google/common/collect/Iterators.html#any(java.util.Iterator, com.google.common.base.Predicate)">any</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator,
-    <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if one or more elements returned by <code>iterator</code>
- satisfy the given predicate.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Collections2.</B><B><A HREF="../../../../../com/google/common/collect/Collections2.html#filter(java.util.Collection, com.google.common.base.Predicate)">filter</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;&nbsp;unfiltered,
-       <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super E&gt;&nbsp;predicate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the elements of <code>unfiltered</code> that satisfy a predicate.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Iterables.</B><B><A HREF="../../../../../com/google/common/collect/Iterables.html#filter(java.lang.Iterable, com.google.common.base.Predicate)">filter</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;unfiltered,
-       <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the elements of <code>unfiltered</code> that satisfy a predicate.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Iterators.</B><B><A HREF="../../../../../com/google/common/collect/Iterators.html#filter(java.util.Iterator, com.google.common.base.Predicate)">filter</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;unfiltered,
-       <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the elements of <code>unfiltered</code> that satisfy a predicate.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Sets.</B><B><A HREF="../../../../../com/google/common/collect/Sets.html#filter(java.util.Set, com.google.common.base.Predicate)">filter</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt;&nbsp;unfiltered,
-       <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super E&gt;&nbsp;predicate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the elements of <code>unfiltered</code> that satisfy a predicate.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Maps.</B><B><A HREF="../../../../../com/google/common/collect/Maps.html#filterEntries(java.util.Map, com.google.common.base.Predicate)">filterEntries</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;&nbsp;unfiltered,
-              <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;K,V&gt;&gt;&nbsp;entryPredicate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a map containing the mappings in <code>unfiltered</code> that satisfy a
- predicate.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Maps.</B><B><A HREF="../../../../../com/google/common/collect/Maps.html#filterKeys(java.util.Map, com.google.common.base.Predicate)">filterKeys</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;&nbsp;unfiltered,
-           <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super K&gt;&nbsp;keyPredicate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a map containing the mappings in <code>unfiltered</code> whose keys
- satisfy a predicate.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Maps.</B><B><A HREF="../../../../../com/google/common/collect/Maps.html#filterValues(java.util.Map, com.google.common.base.Predicate)">filterValues</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;&nbsp;unfiltered,
-             <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super V&gt;&nbsp;valuePredicate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a map containing the mappings in <code>unfiltered</code> whose values
- satisfy a predicate.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; T</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Iterables.</B><B><A HREF="../../../../../com/google/common/collect/Iterables.html#find(java.lang.Iterable, com.google.common.base.Predicate)">find</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable,
-     <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the first element in <code>iterable</code> that satisfies the given
- predicate.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; T</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Iterators.</B><B><A HREF="../../../../../com/google/common/collect/Iterators.html#find(java.util.Iterator, com.google.common.base.Predicate)">find</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator,
-     <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the first element in <code>iterator</code> that satisfies the given
- predicate.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; int</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Iterables.</B><B><A HREF="../../../../../com/google/common/collect/Iterables.html#indexOf(java.lang.Iterable, com.google.common.base.Predicate)">indexOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable,
-        <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the index in <code>iterable</code> of the first element that satisfies
- the provided <code>predicate</code>, or <code>-1</code> if the Iterable has no such
- elements.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; int</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Iterators.</B><B><A HREF="../../../../../com/google/common/collect/Iterators.html#indexOf(java.util.Iterator, com.google.common.base.Predicate)">indexOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator,
-        <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the index in <code>iterator</code> of the first element that satisfies
- the provided <code>predicate</code>, or <code>-1</code> if the Iterator has no such
- elements.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; boolean</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Iterables.</B><B><A HREF="../../../../../com/google/common/collect/Iterables.html#removeIf(java.lang.Iterable, com.google.common.base.Predicate)">removeIf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;removeFrom,
-         <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes, from an iterable, every element that satisfies the provided
- predicate.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; boolean</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Iterators.</B><B><A HREF="../../../../../com/google/common/collect/Iterators.html#removeIf(java.util.Iterator, com.google.common.base.Predicate)">removeIf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;removeFrom,
-         <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes every element that satisfies the provided predicate from the
- iterator.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/base//class-usePredicate.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Predicate.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/base/class-use/Predicates.html b/javadoc/com/google/common/base/class-use/Predicates.html
deleted file mode 100644
index 72a0aef..0000000
--- a/javadoc/com/google/common/base/class-use/Predicates.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.base.Predicates (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.base.Predicates (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/base/Predicates.html" title="class in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/base//class-usePredicates.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Predicates.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.base.Predicates</B></H2>
-</CENTER>
-No usage of com.google.common.base.Predicates
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/base/Predicates.html" title="class in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/base//class-usePredicates.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Predicates.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/base/class-use/Service.State.html b/javadoc/com/google/common/base/class-use/Service.State.html
deleted file mode 100644
index c64df5b..0000000
--- a/javadoc/com/google/common/base/class-use/Service.State.html
+++ /dev/null
@@ -1,446 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.base.Service.State (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.base.Service.State (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/base//class-useService.State.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Service.State.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.base.Service.State</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.base"><B>com.google.common.base</B></A></TD>
-<TD>Miscellaneous common util classes and annotations.&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.util.concurrent"><B>com.google.common.util.concurrent</B></A></TD>
-<TD>&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.base"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A> in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A> that return <A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A></CODE></FONT></TD>
-<TD><CODE><B>Service.</B><B><A HREF="../../../../../com/google/common/base/Service.html#startAndWait()">startAndWait</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Initiates service startup (if necessary), returning once the service has
- finished starting.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A></CODE></FONT></TD>
-<TD><CODE><B>Service.</B><B><A HREF="../../../../../com/google/common/base/Service.html#state()">state</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the lifecycle state of the service.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A></CODE></FONT></TD>
-<TD><CODE><B>Service.</B><B><A HREF="../../../../../com/google/common/base/Service.html#stopAndWait()">stopAndWait</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Initiates service shutdown (if necessary), returning once the service has
- finished stopping.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A></CODE></FONT></TD>
-<TD><CODE><B>Service.State.</B><B><A HREF="../../../../../com/google/common/base/Service.State.html#valueOf(java.lang.String)">valueOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;name)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the enum constant of this type with the specified name.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A>[]</CODE></FONT></TD>
-<TD><CODE><B>Service.State.</B><B><A HREF="../../../../../com/google/common/base/Service.State.html#values()">values</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an array containing the constants of this enum type, in
-the order they are declared.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A> that return types with arguments of type <A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;<A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>Service.</B><B><A HREF="../../../../../com/google/common/base/Service.html#start()">start</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If the service state is <A HREF="../../../../../com/google/common/base/Service.State.html#NEW"><CODE>NEW</CODE></A>, this initiates service startup
- and returns immediately.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;<A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>Service.</B><B><A HREF="../../../../../com/google/common/base/Service.html#stop()">stop</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If the service is <A HREF="../../../../../com/google/common/base/Service.State.html#STARTING"><CODE>STARTING</CODE></A> or <A HREF="../../../../../com/google/common/base/Service.State.html#RUNNING"><CODE>RUNNING</CODE></A>, this
- initiates service shutdown and returns immediately.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.util.concurrent"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A> in <A HREF="../../../../../com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A> that return <A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A></CODE></FONT></TD>
-<TD><CODE><B>ForwardingService.</B><B><A HREF="../../../../../com/google/common/util/concurrent/ForwardingService.html#startAndWait()">startAndWait</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A></CODE></FONT></TD>
-<TD><CODE><B>AbstractIdleService.</B><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractIdleService.html#startAndWait()">startAndWait</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A></CODE></FONT></TD>
-<TD><CODE><B>AbstractExecutionThreadService.</B><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractExecutionThreadService.html#startAndWait()">startAndWait</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A></CODE></FONT></TD>
-<TD><CODE><B>AbstractService.</B><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractService.html#startAndWait()">startAndWait</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A></CODE></FONT></TD>
-<TD><CODE><B>ForwardingService.</B><B><A HREF="../../../../../com/google/common/util/concurrent/ForwardingService.html#state()">state</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A></CODE></FONT></TD>
-<TD><CODE><B>AbstractIdleService.</B><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractIdleService.html#state()">state</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A></CODE></FONT></TD>
-<TD><CODE><B>AbstractExecutionThreadService.</B><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractExecutionThreadService.html#state()">state</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A></CODE></FONT></TD>
-<TD><CODE><B>AbstractService.</B><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractService.html#state()">state</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A></CODE></FONT></TD>
-<TD><CODE><B>ForwardingService.</B><B><A HREF="../../../../../com/google/common/util/concurrent/ForwardingService.html#stopAndWait()">stopAndWait</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A></CODE></FONT></TD>
-<TD><CODE><B>AbstractIdleService.</B><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractIdleService.html#stopAndWait()">stopAndWait</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A></CODE></FONT></TD>
-<TD><CODE><B>AbstractExecutionThreadService.</B><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractExecutionThreadService.html#stopAndWait()">stopAndWait</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A></CODE></FONT></TD>
-<TD><CODE><B>AbstractService.</B><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractService.html#stopAndWait()">stopAndWait</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A> that return types with arguments of type <A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;<A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ForwardingService.</B><B><A HREF="../../../../../com/google/common/util/concurrent/ForwardingService.html#start()">start</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;<A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>AbstractIdleService.</B><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractIdleService.html#start()">start</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;<A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>AbstractExecutionThreadService.</B><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractExecutionThreadService.html#start()">start</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;<A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>AbstractService.</B><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractService.html#start()">start</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;<A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ForwardingService.</B><B><A HREF="../../../../../com/google/common/util/concurrent/ForwardingService.html#stop()">stop</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;<A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>AbstractIdleService.</B><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractIdleService.html#stop()">stop</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;<A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>AbstractExecutionThreadService.</B><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractExecutionThreadService.html#stop()">stop</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;<A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>AbstractService.</B><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractService.html#stop()">stop</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A> with parameters of type <A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected &nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executor.html?is-external=true" title="class or interface in java.util.concurrent">Executor</A></CODE></FONT></TD>
-<TD><CODE><B>AbstractIdleService.</B><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractIdleService.html#executor(com.google.common.base.Service.State)">executor</A></B>(<A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A>&nbsp;state)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executor.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>Executor</CODE></A> that will be used to run this service.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/base//class-useService.State.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Service.State.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/base/class-use/Service.html b/javadoc/com/google/common/base/class-use/Service.html
deleted file mode 100644
index e3c4559..0000000
--- a/javadoc/com/google/common/base/class-use/Service.html
+++ /dev/null
@@ -1,224 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Uses of Interface com.google.common.base.Service (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Interface com.google.common.base.Service (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/base/Service.html" title="interface in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/base//class-useService.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Service.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Interface<br>com.google.common.base.Service</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/base/Service.html" title="interface in com.google.common.base">Service</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.util.concurrent"><B>com.google.common.util.concurrent</B></A></TD>
-<TD>&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.util.concurrent"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/base/Service.html" title="interface in com.google.common.base">Service</A> in <A HREF="../../../../../com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Classes in <A HREF="../../../../../com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A> that implement <A HREF="../../../../../com/google/common/base/Service.html" title="interface in com.google.common.base">Service</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractExecutionThreadService.html" title="class in com.google.common.util.concurrent">AbstractExecutionThreadService</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Base class for services that can implement <A HREF="../../../../../com/google/common/util/concurrent/AbstractExecutionThreadService.html#startUp()"><CODE>AbstractExecutionThreadService.startUp()</CODE></A>, <A HREF="../../../../../com/google/common/util/concurrent/AbstractExecutionThreadService.html#run()"><CODE>AbstractExecutionThreadService.run()</CODE></A> and
- <A HREF="../../../../../com/google/common/util/concurrent/AbstractExecutionThreadService.html#shutDown()"><CODE>AbstractExecutionThreadService.shutDown()</CODE></A> methods.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractIdleService.html" title="class in com.google.common.util.concurrent">AbstractIdleService</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Base class for services that do not need a thread while "running"
- but may need one during startup and shutdown.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractService.html" title="class in com.google.common.util.concurrent">AbstractService</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Base class for implementing services that can handle <A HREF="../../../../../com/google/common/util/concurrent/AbstractService.html#doStart()"><CODE>AbstractService.doStart()</CODE></A> and
- <A HREF="../../../../../com/google/common/util/concurrent/AbstractService.html#doStop()"><CODE>AbstractService.doStop()</CODE></A> requests, responding to them with <A HREF="../../../../../com/google/common/util/concurrent/AbstractService.html#notifyStarted()"><CODE>AbstractService.notifyStarted()</CODE></A>
- and <A HREF="../../../../../com/google/common/util/concurrent/AbstractService.html#notifyStopped()"><CODE>AbstractService.notifyStopped()</CODE></A> callbacks.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/ForwardingService.html" title="class in com.google.common.util.concurrent">ForwardingService</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <A HREF="../../../../../com/google/common/base/Service.html" title="interface in com.google.common.base"><CODE>Service</CODE></A> that forwards all method calls to another service.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A> that return <A HREF="../../../../../com/google/common/base/Service.html" title="interface in com.google.common.base">Service</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected abstract &nbsp;<A HREF="../../../../../com/google/common/base/Service.html" title="interface in com.google.common.base">Service</A></CODE></FONT></TD>
-<TD><CODE><B>ForwardingService.</B><B><A HREF="../../../../../com/google/common/util/concurrent/ForwardingService.html#delegate()">delegate</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/base/Service.html" title="interface in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/base//class-useService.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Service.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/base/class-use/Splitter.html b/javadoc/com/google/common/base/class-use/Splitter.html
deleted file mode 100644
index 7e07c17..0000000
--- a/javadoc/com/google/common/base/class-use/Splitter.html
+++ /dev/null
@@ -1,250 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.base.Splitter (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.base.Splitter (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/base/Splitter.html" title="class in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/base//class-useSplitter.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Splitter.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.base.Splitter</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/base/Splitter.html" title="class in com.google.common.base">Splitter</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.base"><B>com.google.common.base</B></A></TD>
-<TD>Miscellaneous common util classes and annotations.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.base"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/base/Splitter.html" title="class in com.google.common.base">Splitter</A> in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A> that return <A HREF="../../../../../com/google/common/base/Splitter.html" title="class in com.google.common.base">Splitter</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/base/Splitter.html" title="class in com.google.common.base">Splitter</A></CODE></FONT></TD>
-<TD><CODE><B>Splitter.</B><B><A HREF="../../../../../com/google/common/base/Splitter.html#fixedLength(int)">fixedLength</A></B>(int&nbsp;length)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a splitter that divides strings into pieces of the given length.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/base/Splitter.html" title="class in com.google.common.base">Splitter</A></CODE></FONT></TD>
-<TD><CODE><B>Splitter.</B><B><A HREF="../../../../../com/google/common/base/Splitter.html#omitEmptyStrings()">omitEmptyStrings</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a splitter that behaves equivalently to <code>this</code> splitter, but
- automatically omits empty strings from the results.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/base/Splitter.html" title="class in com.google.common.base">Splitter</A></CODE></FONT></TD>
-<TD><CODE><B>Splitter.</B><B><A HREF="../../../../../com/google/common/base/Splitter.html#on(char)">on</A></B>(char&nbsp;separator)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a splitter that uses the given single-character separator.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/base/Splitter.html" title="class in com.google.common.base">Splitter</A></CODE></FONT></TD>
-<TD><CODE><B>Splitter.</B><B><A HREF="../../../../../com/google/common/base/Splitter.html#on(com.google.common.base.CharMatcher)">on</A></B>(<A HREF="../../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>&nbsp;separatorMatcher)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a splitter that considers any single character matched by the
- given <code>CharMatcher</code> to be a separator.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/base/Splitter.html" title="class in com.google.common.base">Splitter</A></CODE></FONT></TD>
-<TD><CODE><B>Splitter.</B><B><A HREF="../../../../../com/google/common/base/Splitter.html#on(java.util.regex.Pattern)">on</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</A>&nbsp;separatorPattern)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a splitter that considers any subsequence matching <code>pattern</code> to be a separator.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/base/Splitter.html" title="class in com.google.common.base">Splitter</A></CODE></FONT></TD>
-<TD><CODE><B>Splitter.</B><B><A HREF="../../../../../com/google/common/base/Splitter.html#on(java.lang.String)">on</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;separator)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a splitter that uses the given fixed string as a separator.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/base/Splitter.html" title="class in com.google.common.base">Splitter</A></CODE></FONT></TD>
-<TD><CODE><B>Splitter.</B><B><A HREF="../../../../../com/google/common/base/Splitter.html#onPattern(java.lang.String)">onPattern</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;separatorPattern)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a splitter that considers any subsequence matching a given
- pattern (regular expression) to be a separator.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/base/Splitter.html" title="class in com.google.common.base">Splitter</A></CODE></FONT></TD>
-<TD><CODE><B>Splitter.</B><B><A HREF="../../../../../com/google/common/base/Splitter.html#trimResults()">trimResults</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a splitter that behaves equivalently to <code>this</code> splitter, but
- automatically removes leading and trailing <A HREF="../../../../../com/google/common/base/CharMatcher.html#WHITESPACE">whitespace</A> from each returned substring; equivalent
- to <code>trimResults(CharMatcher.WHITESPACE)</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/base/Splitter.html" title="class in com.google.common.base">Splitter</A></CODE></FONT></TD>
-<TD><CODE><B>Splitter.</B><B><A HREF="../../../../../com/google/common/base/Splitter.html#trimResults(com.google.common.base.CharMatcher)">trimResults</A></B>(<A HREF="../../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>&nbsp;trimmer)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a splitter that behaves equivalently to <code>this</code> splitter, but
- removes all leading or trailing characters matching the given <code>CharMatcher</code> from each returned substring.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/base/Splitter.html" title="class in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/base//class-useSplitter.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Splitter.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/base/class-use/Supplier.html b/javadoc/com/google/common/base/class-use/Supplier.html
deleted file mode 100644
index dadaacc..0000000
--- a/javadoc/com/google/common/base/class-use/Supplier.html
+++ /dev/null
@@ -1,418 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Uses of Interface com.google.common.base.Supplier (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Interface com.google.common.base.Supplier (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/base//class-useSupplier.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Supplier.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Interface<br>com.google.common.base.Supplier</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.base"><B>com.google.common.base</B></A></TD>
-<TD>Miscellaneous common util classes and annotations.&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.base"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A> in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A> that return <A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;F,T&gt; <A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Suppliers.</B><B><A HREF="../../../../../com/google/common/base/Suppliers.html#compose(com.google.common.base.Function, com.google.common.base.Supplier)">compose</A></B>(<A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super F,T&gt;&nbsp;function,
-        <A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;F&gt;&nbsp;first)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new supplier which is the composition of the provided function
- and supplier.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Suppliers.</B><B><A HREF="../../../../../com/google/common/base/Suppliers.html#memoize(com.google.common.base.Supplier)">memoize</A></B>(<A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;T&gt;&nbsp;delegate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a supplier which caches the instance retrieved during the first
- call to <code>get()</code> and returns that value on subsequent calls to
- <code>get()</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Suppliers.</B><B><A HREF="../../../../../com/google/common/base/Suppliers.html#memoizeWithExpiration(com.google.common.base.Supplier, long, java.util.concurrent.TimeUnit)">memoizeWithExpiration</A></B>(<A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;T&gt;&nbsp;delegate,
-                      long&nbsp;duration,
-                      <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</A>&nbsp;unit)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a supplier that caches the instance supplied by the delegate and
- removes the cached value after the specified time has passed.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Suppliers.</B><B><A HREF="../../../../../com/google/common/base/Suppliers.html#ofInstance(T)">ofInstance</A></B>(T&nbsp;instance)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a supplier that always supplies <code>instance</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Suppliers.</B><B><A HREF="../../../../../com/google/common/base/Suppliers.html#synchronizedSupplier(com.google.common.base.Supplier)">synchronizedSupplier</A></B>(<A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;T&gt;&nbsp;delegate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a supplier whose <code>get()</code> method synchronizes on
- <code>delegate</code> before calling it, making it thread-safe.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/base/package-summary.html">com.google.common.base</A> with parameters of type <A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;F,T&gt; <A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Suppliers.</B><B><A HREF="../../../../../com/google/common/base/Suppliers.html#compose(com.google.common.base.Function, com.google.common.base.Supplier)">compose</A></B>(<A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super F,T&gt;&nbsp;function,
-        <A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;F&gt;&nbsp;first)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new supplier which is the composition of the provided function
- and supplier.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Suppliers.</B><B><A HREF="../../../../../com/google/common/base/Suppliers.html#memoize(com.google.common.base.Supplier)">memoize</A></B>(<A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;T&gt;&nbsp;delegate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a supplier which caches the instance retrieved during the first
- call to <code>get()</code> and returns that value on subsequent calls to
- <code>get()</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Suppliers.</B><B><A HREF="../../../../../com/google/common/base/Suppliers.html#memoizeWithExpiration(com.google.common.base.Supplier, long, java.util.concurrent.TimeUnit)">memoizeWithExpiration</A></B>(<A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;T&gt;&nbsp;delegate,
-                      long&nbsp;duration,
-                      <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</A>&nbsp;unit)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a supplier that caches the instance supplied by the delegate and
- removes the cached value after the specified time has passed.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Suppliers.</B><B><A HREF="../../../../../com/google/common/base/Suppliers.html#synchronizedSupplier(com.google.common.base.Supplier)">synchronizedSupplier</A></B>(<A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;T&gt;&nbsp;delegate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a supplier whose <code>get()</code> method synchronizes on
- <code>delegate</code> before calling it, making it thread-safe.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> with parameters of type <A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Multimaps.</B><B><A HREF="../../../../../com/google/common/collect/Multimaps.html#newListMultimap(java.util.Map, com.google.common.base.Supplier)">newListMultimap</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt;&nbsp;map,
-                <A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;V&gt;&gt;&nbsp;factory)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>ListMultimap</code> that uses the provided map and factory.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Multimaps.</B><B><A HREF="../../../../../com/google/common/collect/Multimaps.html#newMultimap(java.util.Map, com.google.common.base.Supplier)">newMultimap</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt;&nbsp;map,
-            <A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt;&nbsp;factory)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>Multimap</code> that uses the provided map and factory.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Multimaps.</B><B><A HREF="../../../../../com/google/common/collect/Multimaps.html#newSetMultimap(java.util.Map, com.google.common.base.Supplier)">newSetMultimap</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt;&nbsp;map,
-               <A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;V&gt;&gt;&nbsp;factory)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>SetMultimap</code> that uses the provided map and factory.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Multimaps.</B><B><A HREF="../../../../../com/google/common/collect/Multimaps.html#newSortedSetMultimap(java.util.Map, com.google.common.base.Supplier)">newSortedSetMultimap</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt;&nbsp;map,
-                     <A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;V&gt;&gt;&nbsp;factory)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>SortedSetMultimap</code> that uses the provided map and
- factory.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/base//class-useSupplier.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Supplier.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/base/class-use/Suppliers.html b/javadoc/com/google/common/base/class-use/Suppliers.html
deleted file mode 100644
index a0a8a56..0000000
--- a/javadoc/com/google/common/base/class-use/Suppliers.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.base.Suppliers (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.base.Suppliers (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/base/Suppliers.html" title="class in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/base//class-useSuppliers.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Suppliers.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.base.Suppliers</B></H2>
-</CENTER>
-No usage of com.google.common.base.Suppliers
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/base/Suppliers.html" title="class in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/base//class-useSuppliers.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Suppliers.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/base/class-use/Throwables.html b/javadoc/com/google/common/base/class-use/Throwables.html
deleted file mode 100644
index 901dc97..0000000
--- a/javadoc/com/google/common/base/class-use/Throwables.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.base.Throwables (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.base.Throwables (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/base/Throwables.html" title="class in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/base//class-useThrowables.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Throwables.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.base.Throwables</B></H2>
-</CENTER>
-No usage of com.google.common.base.Throwables
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/base/Throwables.html" title="class in com.google.common.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/base//class-useThrowables.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Throwables.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/base/package-frame.html b/javadoc/com/google/common/base/package-frame.html
deleted file mode 100644
index 7419561..0000000
--- a/javadoc/com/google/common/base/package-frame.html
+++ /dev/null
@@ -1,98 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-com.google.common.base (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-
-</HEAD>
-
-<BODY BGCOLOR="white">
-<FONT size="+1" CLASS="FrameTitleFont">
-<A HREF="../../../../com/google/common/base/package-summary.html" target="classFrame">com.google.common.base</A></FONT>
-<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
-<TR>
-<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">
-Interfaces</FONT>&nbsp;
-<FONT CLASS="FrameItemFont">
-<BR>
-<A HREF="FinalizableReference.html" title="interface in com.google.common.base" target="classFrame"><I>FinalizableReference</I></A>
-<BR>
-<A HREF="Function.html" title="interface in com.google.common.base" target="classFrame"><I>Function</I></A>
-<BR>
-<A HREF="Predicate.html" title="interface in com.google.common.base" target="classFrame"><I>Predicate</I></A>
-<BR>
-<A HREF="Service.html" title="interface in com.google.common.base" target="classFrame"><I>Service</I></A>
-<BR>
-<A HREF="Supplier.html" title="interface in com.google.common.base" target="classFrame"><I>Supplier</I></A></FONT></TD>
-</TR>
-</TABLE>
-
-
-<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
-<TR>
-<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">
-Classes</FONT>&nbsp;
-<FONT CLASS="FrameItemFont">
-<BR>
-<A HREF="CharMatcher.html" title="class in com.google.common.base" target="classFrame">CharMatcher</A>
-<BR>
-<A HREF="CharMatcher.LookupTable.html" title="class in com.google.common.base" target="classFrame">CharMatcher.LookupTable</A>
-<BR>
-<A HREF="Charsets.html" title="class in com.google.common.base" target="classFrame">Charsets</A>
-<BR>
-<A HREF="Defaults.html" title="class in com.google.common.base" target="classFrame">Defaults</A>
-<BR>
-<A HREF="FinalizablePhantomReference.html" title="class in com.google.common.base" target="classFrame">FinalizablePhantomReference</A>
-<BR>
-<A HREF="FinalizableReferenceQueue.html" title="class in com.google.common.base" target="classFrame">FinalizableReferenceQueue</A>
-<BR>
-<A HREF="FinalizableSoftReference.html" title="class in com.google.common.base" target="classFrame">FinalizableSoftReference</A>
-<BR>
-<A HREF="FinalizableWeakReference.html" title="class in com.google.common.base" target="classFrame">FinalizableWeakReference</A>
-<BR>
-<A HREF="Functions.html" title="class in com.google.common.base" target="classFrame">Functions</A>
-<BR>
-<A HREF="Joiner.html" title="class in com.google.common.base" target="classFrame">Joiner</A>
-<BR>
-<A HREF="Joiner.MapJoiner.html" title="class in com.google.common.base" target="classFrame">Joiner.MapJoiner</A>
-<BR>
-<A HREF="Objects.html" title="class in com.google.common.base" target="classFrame">Objects</A>
-<BR>
-<A HREF="Objects.ToStringHelper.html" title="class in com.google.common.base" target="classFrame">Objects.ToStringHelper</A>
-<BR>
-<A HREF="Preconditions.html" title="class in com.google.common.base" target="classFrame">Preconditions</A>
-<BR>
-<A HREF="Predicates.html" title="class in com.google.common.base" target="classFrame">Predicates</A>
-<BR>
-<A HREF="Splitter.html" title="class in com.google.common.base" target="classFrame">Splitter</A>
-<BR>
-<A HREF="Suppliers.html" title="class in com.google.common.base" target="classFrame">Suppliers</A>
-<BR>
-<A HREF="Throwables.html" title="class in com.google.common.base" target="classFrame">Throwables</A></FONT></TD>
-</TR>
-</TABLE>
-
-
-<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
-<TR>
-<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">
-Enums</FONT>&nbsp;
-<FONT CLASS="FrameItemFont">
-<BR>
-<A HREF="CaseFormat.html" title="enum in com.google.common.base" target="classFrame">CaseFormat</A>
-<BR>
-<A HREF="Service.State.html" title="enum in com.google.common.base" target="classFrame">Service.State</A></FONT></TD>
-</TR>
-</TABLE>
-
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/base/package-summary.html b/javadoc/com/google/common/base/package-summary.html
deleted file mode 100644
index 8735a6e..0000000
--- a/javadoc/com/google/common/base/package-summary.html
+++ /dev/null
@@ -1,302 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-com.google.common.base (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="com.google.common.base (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-use.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/annotations/package-summary.html"><B>PREV PACKAGE</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/package-summary.html"><B>NEXT PACKAGE</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/base/package-summary.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<H2>
-Package com.google.common.base
-</H2>
-Miscellaneous common util classes and annotations.
-<P>
-<B>See:</B>
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<A HREF="#package_description"><B>Description</B></A>
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Interface Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base">FinalizableReference</A></B></TD>
-<TD>Implemented by references that have code to run after garbage collection of
- their referents.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function&lt;F,T&gt;</A></B></TD>
-<TD>A transformation from one object to another.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate&lt;T&gt;</A></B></TD>
-<TD>Determines a true or false value for a given input.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/base/Service.html" title="interface in com.google.common.base">Service</A></B></TD>
-<TD>An object with an operational state, plus asynchronous <A HREF="../../../../com/google/common/base/Service.html#start()"><CODE>Service.start()</CODE></A> and
- <A HREF="../../../../com/google/common/base/Service.html#stop()"><CODE>Service.stop()</CODE></A> lifecycle methods to transfer into and out of this state.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier&lt;T&gt;</A></B></TD>
-<TD>A class that can supply objects of a single type.</TD>
-</TR>
-</TABLE>
-&nbsp;
-
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Class Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A></B></TD>
-<TD>Determines a true or false value for any Java <code>char</code> value, just as
- <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base"><CODE>Predicate</CODE></A> does for any <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang"><CODE>Object</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/base/CharMatcher.LookupTable.html" title="class in com.google.common.base">CharMatcher.LookupTable</A></B></TD>
-<TD>A bit array with one bit per <code>char</code> value, used by <A HREF="../../../../com/google/common/base/CharMatcher.html#precomputed()"><CODE>CharMatcher.precomputed()</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/base/Charsets.html" title="class in com.google.common.base">Charsets</A></B></TD>
-<TD>Contains constant definitions for the six standard <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset"><CODE>Charset</CODE></A>
- instances, which are guaranteed to be supported by all Java platform
- implementations.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/base/Defaults.html" title="class in com.google.common.base">Defaults</A></B></TD>
-<TD>This class provides default values for all Java types, as defined by the JLS.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/base/FinalizablePhantomReference.html" title="class in com.google.common.base">FinalizablePhantomReference&lt;T&gt;</A></B></TD>
-<TD>Phantom reference with a <code>finalizeReferent()</code> method which a
- background thread invokes after the garbage collector reclaims the
- referent.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/base/FinalizableReferenceQueue.html" title="class in com.google.common.base">FinalizableReferenceQueue</A></B></TD>
-<TD>A reference queue with an associated background thread that dequeues
- references and invokes <A HREF="../../../../com/google/common/base/FinalizableReference.html#finalizeReferent()"><CODE>FinalizableReference.finalizeReferent()</CODE></A> on
- them.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/base/FinalizableSoftReference.html" title="class in com.google.common.base">FinalizableSoftReference&lt;T&gt;</A></B></TD>
-<TD>Soft reference with a <code>finalizeReferent()</code> method which a background
- thread invokes after the garbage collector reclaims the referent.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/base/FinalizableWeakReference.html" title="class in com.google.common.base">FinalizableWeakReference&lt;T&gt;</A></B></TD>
-<TD>Weak reference with a <code>finalizeReferent()</code> method which a background
- thread invokes after the garbage collector reclaims the referent.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/base/Functions.html" title="class in com.google.common.base">Functions</A></B></TD>
-<TD>Useful functions.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A></B></TD>
-<TD>An object which joins pieces of text (specified as an array, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang"><CODE>Iterable</CODE></A>, varargs or even a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A>) with a separator.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/base/Joiner.MapJoiner.html" title="class in com.google.common.base">Joiner.MapJoiner</A></B></TD>
-<TD>An object that joins map entries in the same manner as <code>Joiner</code> joins
- iterables and arrays.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/base/Objects.html" title="class in com.google.common.base">Objects</A></B></TD>
-<TD>Helper functions that can operate on any <code>Object</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/base/Objects.ToStringHelper.html" title="class in com.google.common.base">Objects.ToStringHelper</A></B></TD>
-<TD>Support class for <A HREF="../../../../com/google/common/base/Objects.html#toStringHelper(java.lang.Object)"><CODE>Objects.toStringHelper(java.lang.Object)</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/base/Preconditions.html" title="class in com.google.common.base">Preconditions</A></B></TD>
-<TD>Simple static methods to be called at the start of your own methods to verify
- correct arguments and state.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/base/Predicates.html" title="class in com.google.common.base">Predicates</A></B></TD>
-<TD>Contains static factory methods for creating <code>Predicate</code> instances.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/base/Splitter.html" title="class in com.google.common.base">Splitter</A></B></TD>
-<TD>An object that divides strings (or other instances of <code>CharSequence</code>)
- into substrings, by recognizing a <i>separator</i> (a.k.a.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/base/Suppliers.html" title="class in com.google.common.base">Suppliers</A></B></TD>
-<TD>Useful suppliers.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/base/Throwables.html" title="class in com.google.common.base">Throwables</A></B></TD>
-<TD>Static utility methods pertaining to instances of <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang"><CODE>Throwable</CODE></A>.</TD>
-</TR>
-</TABLE>
-&nbsp;
-
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Enum Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/base/CaseFormat.html" title="enum in com.google.common.base">CaseFormat</A></B></TD>
-<TD>Utility class for converting between various case formats.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A></B></TD>
-<TD>The lifecycle states of a service.</TD>
-</TR>
-</TABLE>
-&nbsp;
-
-<P>
-<A NAME="package_description"><!-- --></A><H2>
-Package com.google.common.base Description
-</H2>
-
-<P>
-Miscellaneous common util classes and annotations.
-<P>
-
-<P>
-<DL>
-</DL>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-use.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/annotations/package-summary.html"><B>PREV PACKAGE</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/package-summary.html"><B>NEXT PACKAGE</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/base/package-summary.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/base/package-tree.html b/javadoc/com/google/common/base/package-tree.html
deleted file mode 100644
index 6860bdf..0000000
--- a/javadoc/com/google/common/base/package-tree.html
+++ /dev/null
@@ -1,180 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-com.google.common.base Class Hierarchy (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="com.google.common.base Class Hierarchy (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/annotations/package-tree.html"><B>PREV</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/package-tree.html"><B>NEXT</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/base/package-tree.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-Hierarchy For Package com.google.common.base
-</H2>
-</CENTER>
-<DL>
-<DT><B>Package Hierarchies:</B><DD><A HREF="../../../../overview-tree.html">All Packages</A></DL>
-<HR>
-<H2>
-Class Hierarchy
-</H2>
-<UL>
-<LI TYPE="circle">java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang"><B>Object</B></A><UL>
-<LI TYPE="circle">com.google.common.base.<A HREF="../../../../com/google/common/base/CharMatcher.html" title="class in com.google.common.base"><B>CharMatcher</B></A> (implements com.google.common.base.<A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;)
-<LI TYPE="circle">com.google.common.base.<A HREF="../../../../com/google/common/base/CharMatcher.LookupTable.html" title="class in com.google.common.base"><B>CharMatcher.LookupTable</B></A><LI TYPE="circle">com.google.common.base.<A HREF="../../../../com/google/common/base/Charsets.html" title="class in com.google.common.base"><B>Charsets</B></A><LI TYPE="circle">com.google.common.base.<A HREF="../../../../com/google/common/base/Defaults.html" title="class in com.google.common.base"><B>Defaults</B></A><LI TYPE="circle">com.google.common.base.<A HREF="../../../../com/google/common/base/FinalizableReferenceQueue.html" title="class in com.google.common.base"><B>FinalizableReferenceQueue</B></A><LI TYPE="circle">com.google.common.base.<A HREF="../../../../com/google/common/base/Functions.html" title="class in com.google.common.base"><B>Functions</B></A><LI TYPE="circle">com.google.common.base.<A HREF="../../../../com/google/common/base/Joiner.html" title="class in com.google.common.base"><B>Joiner</B></A><LI TYPE="circle">com.google.common.base.<A HREF="../../../../com/google/common/base/Joiner.MapJoiner.html" title="class in com.google.common.base"><B>Joiner.MapJoiner</B></A><LI TYPE="circle">com.google.common.base.<A HREF="../../../../com/google/common/base/Objects.html" title="class in com.google.common.base"><B>Objects</B></A><LI TYPE="circle">com.google.common.base.<A HREF="../../../../com/google/common/base/Objects.ToStringHelper.html" title="class in com.google.common.base"><B>Objects.ToStringHelper</B></A><LI TYPE="circle">com.google.common.base.<A HREF="../../../../com/google/common/base/Preconditions.html" title="class in com.google.common.base"><B>Preconditions</B></A><LI TYPE="circle">com.google.common.base.<A HREF="../../../../com/google/common/base/Predicates.html" title="class in com.google.common.base"><B>Predicates</B></A><LI TYPE="circle">java.lang.ref.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/Reference.html?is-external=true" title="class or interface in java.lang.ref"><B>Reference</B></A>&lt;T&gt;<UL>
-<LI TYPE="circle">java.lang.ref.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/PhantomReference.html?is-external=true" title="class or interface in java.lang.ref"><B>PhantomReference</B></A>&lt;T&gt;<UL>
-<LI TYPE="circle">com.google.common.base.<A HREF="../../../../com/google/common/base/FinalizablePhantomReference.html" title="class in com.google.common.base"><B>FinalizablePhantomReference</B></A>&lt;T&gt; (implements com.google.common.base.<A HREF="../../../../com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base">FinalizableReference</A>)
-</UL>
-<LI TYPE="circle">java.lang.ref.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/SoftReference.html?is-external=true" title="class or interface in java.lang.ref"><B>SoftReference</B></A>&lt;T&gt;<UL>
-<LI TYPE="circle">com.google.common.base.<A HREF="../../../../com/google/common/base/FinalizableSoftReference.html" title="class in com.google.common.base"><B>FinalizableSoftReference</B></A>&lt;T&gt; (implements com.google.common.base.<A HREF="../../../../com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base">FinalizableReference</A>)
-</UL>
-<LI TYPE="circle">java.lang.ref.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/WeakReference.html?is-external=true" title="class or interface in java.lang.ref"><B>WeakReference</B></A>&lt;T&gt;<UL>
-<LI TYPE="circle">com.google.common.base.<A HREF="../../../../com/google/common/base/FinalizableWeakReference.html" title="class in com.google.common.base"><B>FinalizableWeakReference</B></A>&lt;T&gt; (implements com.google.common.base.<A HREF="../../../../com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base">FinalizableReference</A>)
-</UL>
-</UL>
-<LI TYPE="circle">com.google.common.base.<A HREF="../../../../com/google/common/base/Splitter.html" title="class in com.google.common.base"><B>Splitter</B></A><LI TYPE="circle">com.google.common.base.<A HREF="../../../../com/google/common/base/Suppliers.html" title="class in com.google.common.base"><B>Suppliers</B></A><LI TYPE="circle">com.google.common.base.<A HREF="../../../../com/google/common/base/Throwables.html" title="class in com.google.common.base"><B>Throwables</B></A></UL>
-</UL>
-<H2>
-Interface Hierarchy
-</H2>
-<UL>
-<LI TYPE="circle">com.google.common.base.<A HREF="../../../../com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base"><B>FinalizableReference</B></A><LI TYPE="circle">com.google.common.base.<A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base"><B>Function</B></A>&lt;F,T&gt;<LI TYPE="circle">com.google.common.base.<A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base"><B>Predicate</B></A>&lt;T&gt;<LI TYPE="circle">com.google.common.base.<A HREF="../../../../com/google/common/base/Service.html" title="interface in com.google.common.base"><B>Service</B></A><LI TYPE="circle">com.google.common.base.<A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base"><B>Supplier</B></A>&lt;T&gt;</UL>
-<H2>
-Enum Hierarchy
-</H2>
-<UL>
-<LI TYPE="circle">java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang"><B>Object</B></A><UL>
-<LI TYPE="circle">java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><B>Enum</B></A>&lt;E&gt; (implements java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;T&gt;, java.io.<A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>)
-<UL>
-<LI TYPE="circle">com.google.common.base.<A HREF="../../../../com/google/common/base/CaseFormat.html" title="enum in com.google.common.base"><B>CaseFormat</B></A><LI TYPE="circle">com.google.common.base.<A HREF="../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base"><B>Service.State</B></A></UL>
-</UL>
-</UL>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/annotations/package-tree.html"><B>PREV</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/package-tree.html"><B>NEXT</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/base/package-tree.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/base/package-use.html b/javadoc/com/google/common/base/package-use.html
deleted file mode 100644
index d499e9b..0000000
--- a/javadoc/com/google/common/base/package-use.html
+++ /dev/null
@@ -1,312 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Package com.google.common.base (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Package com.google.common.base (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/base/package-use.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="package-use.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Package<br>com.google.common.base</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/google/common/base/package-summary.html">com.google.common.base</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.base"><B>com.google.common.base</B></A></TD>
-<TD>Miscellaneous common util classes and annotations.&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.util.concurrent"><B>com.google.common.util.concurrent</B></A></TD>
-<TD>&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.base"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Classes in <A HREF="../../../../com/google/common/base/package-summary.html">com.google.common.base</A> used by <A HREF="../../../../com/google/common/base/package-summary.html">com.google.common.base</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/base/class-use/CaseFormat.html#com.google.common.base"><B>CaseFormat</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Utility class for converting between various case formats.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/base/class-use/CharMatcher.html#com.google.common.base"><B>CharMatcher</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Determines a true or false value for any Java <code>char</code> value, just as
- <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base"><CODE>Predicate</CODE></A> does for any <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang"><CODE>Object</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/base/class-use/CharMatcher.LookupTable.html#com.google.common.base"><B>CharMatcher.LookupTable</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A bit array with one bit per <code>char</code> value, used by <A HREF="../../../../com/google/common/base/CharMatcher.html#precomputed()"><CODE>CharMatcher.precomputed()</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/base/class-use/FinalizableReference.html#com.google.common.base"><B>FinalizableReference</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Implemented by references that have code to run after garbage collection of
- their referents.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/base/class-use/FinalizableReferenceQueue.html#com.google.common.base"><B>FinalizableReferenceQueue</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A reference queue with an associated background thread that dequeues
- references and invokes <A HREF="../../../../com/google/common/base/FinalizableReference.html#finalizeReferent()"><CODE>FinalizableReference.finalizeReferent()</CODE></A> on
- them.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/base/class-use/Function.html#com.google.common.base"><B>Function</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A transformation from one object to another.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/base/class-use/Joiner.html#com.google.common.base"><B>Joiner</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An object which joins pieces of text (specified as an array, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang"><CODE>Iterable</CODE></A>, varargs or even a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A>) with a separator.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/base/class-use/Joiner.MapJoiner.html#com.google.common.base"><B>Joiner.MapJoiner</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An object that joins map entries in the same manner as <code>Joiner</code> joins
- iterables and arrays.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/base/class-use/Objects.ToStringHelper.html#com.google.common.base"><B>Objects.ToStringHelper</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Support class for <A HREF="../../../../com/google/common/base/Objects.html#toStringHelper(java.lang.Object)"><CODE>Objects.toStringHelper(java.lang.Object)</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/base/class-use/Predicate.html#com.google.common.base"><B>Predicate</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Determines a true or false value for a given input.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/base/class-use/Service.State.html#com.google.common.base"><B>Service.State</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The lifecycle states of a service.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/base/class-use/Splitter.html#com.google.common.base"><B>Splitter</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An object that divides strings (or other instances of <code>CharSequence</code>)
- into substrings, by recognizing a <i>separator</i> (a.k.a.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/base/class-use/Supplier.html#com.google.common.base"><B>Supplier</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A class that can supply objects of a single type.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Classes in <A HREF="../../../../com/google/common/base/package-summary.html">com.google.common.base</A> used by <A HREF="../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/base/class-use/Function.html#com.google.common.collect"><B>Function</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A transformation from one object to another.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/base/class-use/Predicate.html#com.google.common.collect"><B>Predicate</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Determines a true or false value for a given input.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/base/class-use/Supplier.html#com.google.common.collect"><B>Supplier</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A class that can supply objects of a single type.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.util.concurrent"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Classes in <A HREF="../../../../com/google/common/base/package-summary.html">com.google.common.base</A> used by <A HREF="../../../../com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/base/class-use/Function.html#com.google.common.util.concurrent"><B>Function</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A transformation from one object to another.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/base/class-use/Service.html#com.google.common.util.concurrent"><B>Service</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An object with an operational state, plus asynchronous <A HREF="../../../../com/google/common/base/Service.html#start()"><CODE>Service.start()</CODE></A> and
- <A HREF="../../../../com/google/common/base/Service.html#stop()"><CODE>Service.stop()</CODE></A> lifecycle methods to transfer into and out of this state.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/base/class-use/Service.State.html#com.google.common.util.concurrent"><B>Service.State</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The lifecycle states of a service.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/base/package-use.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="package-use.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/AbstractIterator.html b/javadoc/com/google/common/collect/AbstractIterator.html
deleted file mode 100644
index 9574d8c..0000000
--- a/javadoc/com/google/common/collect/AbstractIterator.html
+++ /dev/null
@@ -1,414 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:57 PST 2010 -->
-<TITLE>
-AbstractIterator (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="AbstractIterator (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/AbstractIterator.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV CLASS&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/AbstractIterator.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="AbstractIterator.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class AbstractIterator&lt;T&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">com.google.common.collect.UnmodifiableIterator</A>&lt;T&gt;
-      <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.AbstractIterator&lt;T&gt;</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;</DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public abstract class <B>AbstractIterator&lt;T&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;T&gt;</DL>
-</PRE>
-
-<P>
-This class provides a skeletal implementation of the <code>Iterator</code>
- interface, to make this interface easier to implement for certain types of
- data sources.
-
- <p><code>Iterator</code> requires its implementations to support querying the
- end-of-data status without changing the iterator's state, using the <A HREF="../../../../com/google/common/collect/AbstractIterator.html#hasNext()"><CODE>hasNext()</CODE></A> method. But many data sources, such as <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Reader.html?is-external=true#read()" title="class or interface in java.io"><CODE>Reader.read()</CODE></A>), do not expose this information; the only way to
- discover whether there is any data left is by trying to retrieve it. These
- types of data sources are ordinarily difficult to write iterators for. But
- using this class, one must implement only the <A HREF="../../../../com/google/common/collect/AbstractIterator.html#computeNext()"><CODE>computeNext()</CODE></A> method,
- and invoke the <A HREF="../../../../com/google/common/collect/AbstractIterator.html#endOfData()"><CODE>endOfData()</CODE></A> method when appropriate.
-
- <p>Another example is an iterator that skips over null elements in a backing
- iterator. This could be implemented as: <pre>   <code>public static Iterator&lt;String&gt; skipNulls(final Iterator&lt;String&gt; in) {
-     return new AbstractIterator&lt;String&gt;() {
-       protected String computeNext() {
-         while (in.hasNext()) {
-           String s = in.next();
-           if (s != null) {
-             return s;
-           }
-         }
-         return endOfData();
-       }
-     };
-   }</code></pre>
-
- This class supports iterators that include null elements.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Kevin Bourrillion</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/AbstractIterator.html#AbstractIterator()">AbstractIterator</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected abstract &nbsp;<A HREF="../../../../com/google/common/collect/AbstractIterator.html" title="type parameter in AbstractIterator">T</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/AbstractIterator.html#computeNext()">computeNext</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the next element.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected &nbsp;<A HREF="../../../../com/google/common/collect/AbstractIterator.html" title="type parameter in AbstractIterator">T</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/AbstractIterator.html#endOfData()">endOfData</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Implementations of <code>computeNext</code> <b>must</b> invoke this method when
- there are no elements left in the iteration.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/AbstractIterator.html#hasNext()">hasNext</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/AbstractIterator.html" title="type parameter in AbstractIterator">T</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/AbstractIterator.html#next()">next</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/AbstractIterator.html" title="type parameter in AbstractIterator">T</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/AbstractIterator.html#peek()">peek</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the next element in the iteration without advancing the iteration,
- according to the contract of <A HREF="../../../../com/google/common/collect/PeekingIterator.html#peek()"><CODE>PeekingIterator.peek()</CODE></A>.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.UnmodifiableIterator"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html#remove()">remove</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="AbstractIterator()"><!-- --></A><H3>
-AbstractIterator</H3>
-<PRE>
-public <B>AbstractIterator</B>()</PRE>
-<DL>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="computeNext()"><!-- --></A><H3>
-computeNext</H3>
-<PRE>
-protected abstract <A HREF="../../../../com/google/common/collect/AbstractIterator.html" title="type parameter in AbstractIterator">T</A> <B>computeNext</B>()</PRE>
-<DL>
-<DD>Returns the next element. <b>Note:</b> the implementation must call <A HREF="../../../../com/google/common/collect/AbstractIterator.html#endOfData()"><CODE>endOfData()</CODE></A> when there are no elements left in the iteration. Failure to
- do so could result in an infinite loop.
-
- <p>The initial invocation of <A HREF="../../../../com/google/common/collect/AbstractIterator.html#hasNext()"><CODE>hasNext()</CODE></A> or <A HREF="../../../../com/google/common/collect/AbstractIterator.html#next()"><CODE>next()</CODE></A> calls
- this method, as does the first invocation of <code>hasNext</code> or <code>next</code> following each successful call to <code>next</code>. Once the
- implementation either invokes <code>endOfData</code> or throws an exception,
- <code>computeNext</code> is guaranteed to never be called again.
-
- <p>If this method throws an exception, it will propagate outward to the
- <code>hasNext</code> or <code>next</code> invocation that invoked this method. Any
- further attempts to use the iterator will result in an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalStateException.html?is-external=true" title="class or interface in java.lang"><CODE>IllegalStateException</CODE></A>.
-
- <p>The implementation of this method may not invoke the <code>hasNext</code>,
- <code>next</code>, or <A HREF="../../../../com/google/common/collect/AbstractIterator.html#peek()"><CODE>peek()</CODE></A> methods on this instance; if it does, an
- <code>IllegalStateException</code> will result.
-<P>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>the next element if there was one. If <code>endOfData</code> was called
-     during execution, the return value will be ignored.
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/RuntimeException.html?is-external=true" title="class or interface in java.lang">RuntimeException</A></CODE> - if any unrecoverable error happens. This exception
-     will propagate outward to the <code>hasNext()</code>, <code>next()</code>, or
-     <code>peek()</code> invocation that invoked this method. Any further
-     attempts to use the iterator will result in an
-     <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalStateException.html?is-external=true" title="class or interface in java.lang"><CODE>IllegalStateException</CODE></A>.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="endOfData()"><!-- --></A><H3>
-endOfData</H3>
-<PRE>
-protected final <A HREF="../../../../com/google/common/collect/AbstractIterator.html" title="type parameter in AbstractIterator">T</A> <B>endOfData</B>()</PRE>
-<DL>
-<DD>Implementations of <code>computeNext</code> <b>must</b> invoke this method when
- there are no elements left in the iteration.
-<P>
-<DD><DL>
-
-<DT><B>Returns:</B><DD><code>null</code>; a convenience so your <A HREF="../../../../com/google/common/collect/AbstractIterator.html#computeNext()"><CODE>computeNext()</CODE></A>
-     implementation can use the simple statement <code>return endOfData();</code></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="hasNext()"><!-- --></A><H3>
-hasNext</H3>
-<PRE>
-public final boolean <B>hasNext</B>()</PRE>
-<DL>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="next()"><!-- --></A><H3>
-next</H3>
-<PRE>
-public final <A HREF="../../../../com/google/common/collect/AbstractIterator.html" title="type parameter in AbstractIterator">T</A> <B>next</B>()</PRE>
-<DL>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="peek()"><!-- --></A><H3>
-peek</H3>
-<PRE>
-public final <A HREF="../../../../com/google/common/collect/AbstractIterator.html" title="type parameter in AbstractIterator">T</A> <B>peek</B>()</PRE>
-<DL>
-<DD>Returns the next element in the iteration without advancing the iteration,
- according to the contract of <A HREF="../../../../com/google/common/collect/PeekingIterator.html#peek()"><CODE>PeekingIterator.peek()</CODE></A>.
-
- <p>Implementations of <code>AbstractIterator</code> that wish to expose this
- functionality should implement <code>PeekingIterator</code>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/AbstractIterator.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV CLASS&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/AbstractIterator.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="AbstractIterator.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/ArrayListMultimap.html b/javadoc/com/google/common/collect/ArrayListMultimap.html
deleted file mode 100644
index bf06fda..0000000
--- a/javadoc/com/google/common/collect/ArrayListMultimap.html
+++ /dev/null
@@ -1,979 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:57 PST 2010 -->
-<TITLE>
-ArrayListMultimap (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="ArrayListMultimap (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ArrayListMultimap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/AbstractIterator.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/AsynchronousComputationException.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ArrayListMultimap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ArrayListMultimap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class ArrayListMultimap&lt;K,V&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ArrayListMultimap&lt;K,V&gt;</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;, <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public final class <B>ArrayListMultimap&lt;K,V&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
-</PRE>
-
-<P>
-Implementation of <code>Multimap</code> that uses an <code>ArrayList</code> to store
- the values for a given key. A <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util"><CODE>HashMap</CODE></A> associates each key with an
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util"><CODE>ArrayList</CODE></A> of values.
-
- <p>When iterating through the collections supplied by this class, the
- ordering of values for a given key agrees with the order in which the values
- were added.
-
- <p>This multimap allows duplicate key-value pairs. After adding a new
- key-value pair equal to an existing key-value pair, the <code>ArrayListMultimap</code> will contain entries for both the new value and the old
- value.
-
- <p>Keys and values may be null. All optional multimap methods are supported,
- and all returned views are modifiable.
-
- <p>The lists returned by <A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#get(K)"><CODE>get(K)</CODE></A>, <A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#removeAll(java.lang.Object)"><CODE>removeAll(java.lang.Object)</CODE></A>, and <A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#replaceValues(K, java.lang.Iterable)"><CODE>replaceValues(K, java.lang.Iterable<? extends V>)</CODE></A> all implement <A HREF="http://java.sun.com/javase/6/docs/api/java/util/RandomAccess.html?is-external=true" title="class or interface in java.util"><CODE>RandomAccess</CODE></A>.
-
- <p>This class is not threadsafe when any concurrent operations update the
- multimap. Concurrent read operations will work correctly. To allow concurrent
- update operations, wrap your multimap with a call to <A HREF="../../../../com/google/common/collect/Multimaps.html#synchronizedListMultimap(com.google.common.collect.ListMultimap)"><CODE>Multimaps.synchronizedListMultimap(com.google.common.collect.ListMultimap<K, V>)</CODE></A>.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Jared Levy</DD>
-<DT><B>See Also:</B><DD><A HREF="../../../../serialized-form.html#com.google.common.collect.ArrayListMultimap">Serialized Form</A></DL>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#asMap()">asMap</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a map view that associates each key with the corresponding values
- in the multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#clear()">clear</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes all key-value pairs from the multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#containsEntry(java.lang.Object, java.lang.Object)">containsEntry</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
-              <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains the specified key-value pair.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#containsKey(java.lang.Object)">containsKey</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains any values for the specified
- key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#containsValue(java.lang.Object)">containsValue</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains the specified value for any
- key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect">ArrayListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#create()">create</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new, empty <code>ArrayListMultimap</code> with the default initial
- capacities.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect">ArrayListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#create(int, int)">create</A></B>(int&nbsp;expectedKeys,
-       int&nbsp;expectedValuesPerKey)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs an empty <code>ArrayListMultimap</code> with enough capacity to hold
- the specified numbers of keys and values without resizing.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect">ArrayListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#create(com.google.common.collect.Multimap)">create</A></B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs an <code>ArrayListMultimap</code> with the same mappings as the
- specified multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;K,V&gt;&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#entries()">entries</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection of all key-value pairs.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares the specified object to this multimap for equality.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;V&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#get(K)">get</A></B>(K&nbsp;key)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection view of all values associated with a key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#hashCode()">hashCode</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the hash code for this multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#isEmpty()">isEmpty</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains no key-value pairs.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;K&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#keys()">keys</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection, which may contain duplicates, of all keys.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;K&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#keySet()">keySet</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the set of all keys, each appearing once in the returned set.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#put(K, V)">put</A></B>(K&nbsp;key,
-    V&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a key-value pair in the multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#putAll(K, java.lang.Iterable)">putAll</A></B>(K&nbsp;key,
-       <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends V&gt;&nbsp;values)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a collection of values with the same key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#putAll(com.google.common.collect.Multimap)">putAll</A></B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies all of another multimap's key-value pairs into this multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#remove(java.lang.Object, java.lang.Object)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
-       <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes a key-value pair from the multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;V&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#removeAll(java.lang.Object)">removeAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes all values associated with a given key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;V&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></B>(K&nbsp;key,
-              <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends V&gt;&nbsp;values)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a collection of values with the same key, replacing any existing
- values for that key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#size()">size</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of key-value pairs in the multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#toString()">toString</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a string representation of the multimap, generated by calling
- <code>toString</code> on the map returned by <A HREF="../../../../com/google/common/collect/Multimap.html#asMap()"><CODE>Multimap.asMap()</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#trimToSize()">trimToSize</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reduces the memory used by this <code>ArrayListMultimap</code>, if feasible.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#values()">values</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection of all values in the multimap.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ListMultimap"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface com.google.common.collect.<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/ListMultimap.html#asMap()">asMap</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.Multimap"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface com.google.common.collect.<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#clear()">clear</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#containsEntry(java.lang.Object, java.lang.Object)">containsEntry</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#containsKey(java.lang.Object)">containsKey</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#containsValue(java.lang.Object)">containsValue</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#entries()">entries</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#hashCode()">hashCode</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#keys()">keys</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#keySet()">keySet</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#putAll(K, java.lang.Iterable)">putAll</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#putAll(com.google.common.collect.Multimap)">putAll</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#remove(java.lang.Object, java.lang.Object)">remove</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#size()">size</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#values()">values</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="create()"><!-- --></A><H3>
-create</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect">ArrayListMultimap</A>&lt;K,V&gt; <B>create</B>()</PRE>
-<DL>
-<DD>Creates a new, empty <code>ArrayListMultimap</code> with the default initial
- capacities.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="create(int, int)"><!-- --></A><H3>
-create</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect">ArrayListMultimap</A>&lt;K,V&gt; <B>create</B>(int&nbsp;expectedKeys,
-                                                  int&nbsp;expectedValuesPerKey)</PRE>
-<DL>
-<DD>Constructs an empty <code>ArrayListMultimap</code> with enough capacity to hold
- the specified numbers of keys and values without resizing.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>expectedKeys</CODE> - the expected number of distinct keys<DD><CODE>expectedValuesPerKey</CODE> - the expected average number of values per key
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>expectedKeys</code> or <code>expectedValuesPerKey</code> is negative</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="create(com.google.common.collect.Multimap)"><!-- --></A><H3>
-create</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect">ArrayListMultimap</A>&lt;K,V&gt; <B>create</B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</PRE>
-<DL>
-<DD>Constructs an <code>ArrayListMultimap</code> with the same mappings as the
- specified multimap.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>multimap</CODE> - the multimap whose contents are copied to this multimap</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="trimToSize()"><!-- --></A><H3>
-trimToSize</H3>
-<PRE>
-public void <B>trimToSize</B>()</PRE>
-<DL>
-<DD>Reduces the memory used by this <code>ArrayListMultimap</code>, if feasible.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="get(java.lang.Object)"><!-- --></A><A NAME="get(K)"><!-- --></A><H3>
-get</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;V&gt; <B>get</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                   K&nbsp;key)</PRE>
-<DL>
-<DD>Returns a collection view of all values associated with a key. If no
- mappings in the multimap have the provided key, an empty collection is
- returned.
-
- <p>Changes to the returned collection will update the underlying multimap,
- and vice versa.
-
- <p>The returned collection is not serializable.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ListMultimap.html#get(K)">get</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#get(K)">get</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to search for in multimap
-<DT><B>Returns:</B><DD>the collection of values that the key maps to</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="removeAll(java.lang.Object)"><!-- --></A><H3>
-removeAll</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;V&gt; <B>removeAll</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                         <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
-<DL>
-<DD>Removes all values associated with a given key.
-
- <p>The returned collection is immutable.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ListMultimap.html#removeAll(java.lang.Object)">removeAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#removeAll(java.lang.Object)">removeAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key of entries to remove from the multimap
-<DT><B>Returns:</B><DD>the collection of removed values, or an empty collection if no
-     values were associated with the provided key. The collection
-     <i>may</i> be modifiable, but updating it will have no effect on the
-     multimap.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="replaceValues(java.lang.Object,java.lang.Iterable)"><!-- --></A><A NAME="replaceValues(K, java.lang.Iterable)"><!-- --></A><H3>
-replaceValues</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;V&gt; <B>replaceValues</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                             K&nbsp;key,
-                             <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends V&gt;&nbsp;values)</PRE>
-<DL>
-<DD>Stores a collection of values with the same key, replacing any existing
- values for that key.
-
- <p>The returned collection is immutable.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ListMultimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to store in the multimap<DD><CODE>values</CODE> - values to store in the multimap
-<DT><B>Returns:</B><DD>the collection of replaced values, or an empty collection if no
-     values were previously associated with the key. The collection
-     <i>may</i> be modifiable, but updating it will have no effect on the
-     multimap.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="put(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="put(K, V)"><!-- --></A><H3>
-put</H3>
-<PRE>
-public boolean <B>put</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                   K&nbsp;key,
-                   <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                   V&nbsp;value)</PRE>
-<DL>
-<DD>Stores a key-value pair in the multimap.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#put(K, V)">put</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to store in the multimap<DD><CODE>value</CODE> - value to store in the multimap
-<DT><B>Returns:</B><DD><code>true</code> always</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
-equals</H3>
-<PRE>
-public boolean <B>equals</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                      <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
-<DL>
-<DD>Compares the specified object to this multimap for equality.
-
- <p>Two <code>ListMultimap</code> instances are equal if, for each key, they
- contain the same values in the same order. If the value orderings disagree,
- the multimaps will not be considered equal.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ListMultimap.html#equals(java.lang.Object)">equals</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#equals(java.lang.Object)">equals</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="size()"><!-- --></A><H3>
-size</H3>
-<PRE>
-public int <B>size</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#size()">Multimap</A></CODE></B></DD>
-<DD>Returns the number of key-value pairs in the multimap.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#size()">size</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="isEmpty()"><!-- --></A><H3>
-isEmpty</H3>
-<PRE>
-public boolean <B>isEmpty</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#isEmpty()">Multimap</A></CODE></B></DD>
-<DD>Returns <code>true</code> if the multimap contains no key-value pairs.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#isEmpty()">isEmpty</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="containsKey(java.lang.Object)"><!-- --></A><H3>
-containsKey</H3>
-<PRE>
-public boolean <B>containsKey</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                           <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsKey(java.lang.Object)">Multimap</A></CODE></B></DD>
-<DD>Returns <code>true</code> if the multimap contains any values for the specified
- key.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsKey(java.lang.Object)">containsKey</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to search for in multimap</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="containsValue(java.lang.Object)"><!-- --></A><H3>
-containsValue</H3>
-<PRE>
-public boolean <B>containsValue</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                             <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsValue(java.lang.Object)">Multimap</A></CODE></B></DD>
-<DD>Returns <code>true</code> if the multimap contains the specified value for any
- key.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsValue(java.lang.Object)">containsValue</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>value</CODE> - value to search for in multimap</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="containsEntry(java.lang.Object, java.lang.Object)"><!-- --></A><H3>
-containsEntry</H3>
-<PRE>
-public boolean <B>containsEntry</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                             <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
-                             <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                             <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsEntry(java.lang.Object, java.lang.Object)">Multimap</A></CODE></B></DD>
-<DD>Returns <code>true</code> if the multimap contains the specified key-value pair.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsEntry(java.lang.Object, java.lang.Object)">containsEntry</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to search for in multimap<DD><CODE>value</CODE> - value to search for in multimap</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="remove(java.lang.Object, java.lang.Object)"><!-- --></A><H3>
-remove</H3>
-<PRE>
-public boolean <B>remove</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                      <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
-                      <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                      <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#remove(java.lang.Object, java.lang.Object)">Multimap</A></CODE></B></DD>
-<DD>Removes a key-value pair from the multimap.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#remove(java.lang.Object, java.lang.Object)">remove</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key of entry to remove from the multimap<DD><CODE>value</CODE> - value of entry to remove the multimap
-<DT><B>Returns:</B><DD><code>true</code> if the multimap changed</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="putAll(java.lang.Object,java.lang.Iterable)"><!-- --></A><A NAME="putAll(K, java.lang.Iterable)"><!-- --></A><H3>
-putAll</H3>
-<PRE>
-public boolean <B>putAll</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                      K&nbsp;key,
-                      <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends V&gt;&nbsp;values)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#putAll(K, java.lang.Iterable)">Multimap</A></CODE></B></DD>
-<DD>Stores a collection of values with the same key.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#putAll(K, java.lang.Iterable)">putAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to store in the multimap<DD><CODE>values</CODE> - values to store in the multimap
-<DT><B>Returns:</B><DD><code>true</code> if the multimap changed</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="putAll(com.google.common.collect.Multimap)"><!-- --></A><H3>
-putAll</H3>
-<PRE>
-public boolean <B>putAll</B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#putAll(com.google.common.collect.Multimap)">Multimap</A></CODE></B></DD>
-<DD>Copies all of another multimap's key-value pairs into this multimap. The
- order in which the mappings are added is determined by
- <code>multimap.entries()</code>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#putAll(com.google.common.collect.Multimap)">putAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>multimap</CODE> - mappings to store in this multimap
-<DT><B>Returns:</B><DD><code>true</code> if the multimap changed</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="clear()"><!-- --></A><H3>
-clear</H3>
-<PRE>
-public void <B>clear</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#clear()">Multimap</A></CODE></B></DD>
-<DD>Removes all key-value pairs from the multimap.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#clear()">clear</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="keySet()"><!-- --></A><H3>
-keySet</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;K&gt; <B>keySet</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#keySet()">Multimap</A></CODE></B></DD>
-<DD>Returns the set of all keys, each appearing once in the returned set.
- Changes to the returned set will update the underlying multimap, and vice
- versa.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#keySet()">keySet</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>the collection of distinct keys</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="keys()"><!-- --></A><H3>
-keys</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;K&gt; <B>keys</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#keys()">Multimap</A></CODE></B></DD>
-<DD>Returns a collection, which may contain duplicates, of all keys. The number
- of times of key appears in the returned multiset equals the number of
- mappings the key has in the multimap. Changes to the returned multiset will
- update the underlying multimap, and vice versa.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#keys()">keys</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a multiset with keys corresponding to the distinct keys of the
-     multimap and frequencies corresponding to the number of values that
-     each key maps to</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="values()"><!-- --></A><H3>
-values</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt; <B>values</B>()</PRE>
-<DL>
-<DD>Returns a collection of all values in the multimap. Changes to the returned
- collection will update the underlying multimap, and vice versa.
-
- <p>The iterator generated by the returned collection traverses the values
- for one key, followed by the values of a second key, and so on.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#values()">values</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>collection of values, which may include the same value multiple
-     times if it occurs in multiple mappings</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="entries()"><!-- --></A><H3>
-entries</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;K,V&gt;&gt; <B>entries</B>()</PRE>
-<DL>
-<DD>Returns a collection of all key-value pairs. Changes to the returned
- collection will update the underlying multimap, and vice versa. The entries
- collection does not support the <code>add</code> or <code>addAll</code> operations.
-
- <p>The iterator generated by the returned collection traverses the values
- for one key, followed by the values of a second key, and so on.
-
- <p>Each entry is an immutable snapshot of a key-value mapping in the
- multimap, taken at the time the entry is returned by a method call to the
- collection or its iterator.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#entries()">entries</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>collection of map entries consisting of key-value pairs</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="asMap()"><!-- --></A><H3>
-asMap</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt; <B>asMap</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#asMap()">Multimap</A></CODE></B></DD>
-<DD>Returns a map view that associates each key with the corresponding values
- in the multimap. Changes to the returned map, such as element removal,
- will update the underlying multimap. The map does not support
- <code>setValue()</code> on its entries, <code>put</code>, or <code>putAll</code>.
-
- <p>The collections returned by <code>asMap().get(Object)</code> have the same
- behavior as those returned by <A HREF="../../../../com/google/common/collect/Multimap.html#get(K)"><CODE>Multimap.get(K)</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#asMap()">asMap</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a map view from a key to its collection of values</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="hashCode()"><!-- --></A><H3>
-hashCode</H3>
-<PRE>
-public int <B>hashCode</B>()</PRE>
-<DL>
-<DD>Returns the hash code for this multimap.
-
- <p>The hash code of a multimap is defined as the hash code of the map view,
- as returned by <A HREF="../../../../com/google/common/collect/Multimap.html#asMap()"><CODE>Multimap.asMap()</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#hashCode()">hashCode</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#hashCode()" title="class or interface in java.util"><CODE>Map.hashCode()</CODE></A></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toString()"><!-- --></A><H3>
-toString</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
-<DL>
-<DD>Returns a string representation of the multimap, generated by calling
- <code>toString</code> on the map returned by <A HREF="../../../../com/google/common/collect/Multimap.html#asMap()"><CODE>Multimap.asMap()</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a string representation of the multimap</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ArrayListMultimap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/AbstractIterator.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/AsynchronousComputationException.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ArrayListMultimap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ArrayListMultimap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/AsynchronousComputationException.html b/javadoc/com/google/common/collect/AsynchronousComputationException.html
deleted file mode 100644
index d940e0e..0000000
--- a/javadoc/com/google/common/collect/AsynchronousComputationException.html
+++ /dev/null
@@ -1,250 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:57 PST 2010 -->
-<TITLE>
-AsynchronousComputationException (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="AsynchronousComputationException (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/AsynchronousComputationException.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/AsynchronousComputationException.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="AsynchronousComputationException.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_java.lang.Throwable">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;METHOD</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class AsynchronousComputationException</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">java.lang.Throwable</A>
-      <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">java.lang.Exception</A>
-          <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/RuntimeException.html?is-external=true" title="class or interface in java.lang">java.lang.RuntimeException</A>
-              <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ComputationException.html" title="class in com.google.common.collect">com.google.common.collect.ComputationException</A>
-                  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.AsynchronousComputationException</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public class <B>AsynchronousComputationException</B><DT>extends <A HREF="../../../../com/google/common/collect/ComputationException.html" title="class in com.google.common.collect">ComputationException</A></DL>
-</PRE>
-
-<P>
-Wraps an exception that occured during a computation in a different thread.
-<P>
-
-<P>
-<DL>
-<DT><B>Author:</B></DT>
-  <DD>Bob Lee</DD>
-<DT><B>See Also:</B><DD><A HREF="../../../../serialized-form.html#com.google.common.collect.AsynchronousComputationException">Serialized Form</A></DL>
-<HR>
-
-<P>
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/AsynchronousComputationException.html#AsynchronousComputationException(java.lang.Throwable)">AsynchronousComputationException</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A>&nbsp;cause)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new instance with the given cause.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Throwable"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true#fillInStackTrace()" title="class or interface in java.lang">fillInStackTrace</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true#getCause()" title="class or interface in java.lang">getCause</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true#getLocalizedMessage()" title="class or interface in java.lang">getLocalizedMessage</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true#getMessage()" title="class or interface in java.lang">getMessage</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true#getStackTrace()" title="class or interface in java.lang">getStackTrace</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true#initCause(java.lang.Throwable)" title="class or interface in java.lang">initCause</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true#printStackTrace()" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true#printStackTrace(java.io.PrintStream)" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true#printStackTrace(java.io.PrintWriter)" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true#setStackTrace(java.lang.StackTraceElement[])" title="class or interface in java.lang">setStackTrace</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true#toString()" title="class or interface in java.lang">toString</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="AsynchronousComputationException(java.lang.Throwable)"><!-- --></A><H3>
-AsynchronousComputationException</H3>
-<PRE>
-public <B>AsynchronousComputationException</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A>&nbsp;cause)</PRE>
-<DL>
-<DD>Creates a new instance with the given cause.
-<P>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/AsynchronousComputationException.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/AsynchronousComputationException.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="AsynchronousComputationException.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_java.lang.Throwable">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;METHOD</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/BiMap.html b/javadoc/com/google/common/collect/BiMap.html
deleted file mode 100644
index d1a4aac..0000000
--- a/javadoc/com/google/common/collect/BiMap.html
+++ /dev/null
@@ -1,397 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:57 PST 2010 -->
-<TITLE>
-BiMap (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="BiMap (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/BiMap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/AsynchronousComputationException.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/BiMap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="BiMap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Interface BiMap&lt;K,V&gt;</H2>
-<DL>
-<DT><B>All Superinterfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</DD>
-</DL>
-<DL>
-<DT><B>All Known Implementing Classes:</B> <DD><A HREF="../../../../com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect">EnumBiMap</A>, <A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect">EnumHashBiMap</A>, <A HREF="../../../../com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect">HashBiMap</A>, <A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public interface <B>BiMap&lt;K,V&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</DL>
-</PRE>
-
-<P>
-A bimap (or "bidirectional map") is a map that preserves the uniqueness of
- its values as well as that of its keys. This constraint enables bimaps to
- support an "inverse view", which is another bimap containing the same entries
- as this bimap but with reversed keys and values.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Kevin Bourrillion</DD>
-</DL>
-<HR>
-
-<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-<A NAME="nested_class_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Nested Class Summary</B></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;<A NAME="nested_classes_inherited_from_class_java.util.Map"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Nested classes/interfaces inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">V</A>&gt;</CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">V</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/BiMap.html#forcePut(K, V)">forcePut</A></B>(<A HREF="../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">K</A>&nbsp;key,
-         <A HREF="../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">V</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An alternate form of <code>put</code> that silently removes any existing entry
- with the value <code>value</code> before proceeding with the <A HREF="../../../../com/google/common/collect/BiMap.html#put(K, V)"><CODE>put(K, V)</CODE></A>
- operation.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;<A HREF="../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">V</A>,<A HREF="../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">K</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/BiMap.html#inverse()">inverse</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the inverse view of this bimap, which maps each of this bimap's
- values to its associated key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">V</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/BiMap.html#put(K, V)">put</A></B>(<A HREF="../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">K</A>&nbsp;key,
-    <A HREF="../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">V</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/BiMap.html#putAll(java.util.Map)">putAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends <A HREF="../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">K</A>,? extends <A HREF="../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">V</A>&gt;&nbsp;map)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/BiMap.html#values()">values</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.util.Map"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#clear()" title="class or interface in java.util">clear</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsKey(java.lang.Object)" title="class or interface in java.util">containsKey</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsValue(java.lang.Object)" title="class or interface in java.util">containsValue</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#entrySet()" title="class or interface in java.util">entrySet</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#get(java.lang.Object)" title="class or interface in java.util">get</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#keySet()" title="class or interface in java.util">keySet</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#size()" title="class or interface in java.util">size</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="put(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="put(K, V)"><!-- --></A><H3>
-put</H3>
-<PRE>
-<A HREF="../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">V</A> <B>put</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-      <A HREF="../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">K</A>&nbsp;key,
-      <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-      <A HREF="../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">V</A>&nbsp;value)</PRE>
-<DL>
-<DD>
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#put(K, V)" title="class or interface in java.util">put</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">K</A>,<A HREF="../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if the given value is already bound to a
-     different key in this bimap. The bimap will remain unmodified in this
-     event. To avoid this exception, call <A HREF="../../../../com/google/common/collect/BiMap.html#forcePut(K, V)"><CODE>forcePut(K, V)</CODE></A> instead.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="forcePut(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="forcePut(K, V)"><!-- --></A><H3>
-forcePut</H3>
-<PRE>
-<A HREF="../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">V</A> <B>forcePut</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-           <A HREF="../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">K</A>&nbsp;key,
-           <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-           <A HREF="../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">V</A>&nbsp;value)</PRE>
-<DL>
-<DD>An alternate form of <code>put</code> that silently removes any existing entry
- with the value <code>value</code> before proceeding with the <A HREF="../../../../com/google/common/collect/BiMap.html#put(K, V)"><CODE>put(K, V)</CODE></A>
- operation. If the bimap previously contained the provided key-value
- mapping, this method has no effect.
-
- <p>Note that a successful call to this method could cause the size of the
- bimap to increase by one, stay the same, or even decrease by one.
-
- <p><b>Warning</b>: If an existing entry with this value is removed, the key
- for that entry is discarded and not returned.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - the key with which the specified value is to be associated<DD><CODE>value</CODE> - the value to be associated with the specified key
-<DT><B>Returns:</B><DD>the value which was previously associated with the key, which may
-     be <code>null</code>, or <code>null</code> if there was no previous entry</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="putAll(java.util.Map)"><!-- --></A><H3>
-putAll</H3>
-<PRE>
-void <B>putAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends <A HREF="../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">K</A>,? extends <A HREF="../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">V</A>&gt;&nbsp;map)</PRE>
-<DL>
-<DD>
-
- <p><b>Warning:</b> the results of calling this method may vary depending on
- the iteration order of <code>map</code>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#putAll(java.util.Map)" title="class or interface in java.util">putAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">K</A>,<A HREF="../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if an attempt to <code>put</code> any
-     entry fails. Note that some map entries may have been added to the
-     bimap before the exception was thrown.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="values()"><!-- --></A><H3>
-values</H3>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">V</A>&gt; <B>values</B>()</PRE>
-<DL>
-<DD>
-
- <p>Because a bimap has unique values, this method returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A>,
- instead of the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A> specified in the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A>
- interface.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#values()" title="class or interface in java.util">values</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">K</A>,<A HREF="../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="inverse()"><!-- --></A><H3>
-inverse</H3>
-<PRE>
-<A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;<A HREF="../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">V</A>,<A HREF="../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">K</A>&gt; <B>inverse</B>()</PRE>
-<DL>
-<DD>Returns the inverse view of this bimap, which maps each of this bimap's
- values to its associated key. The two bimaps are backed by the same data;
- any changes to one will appear in the other.
-
- <p><b>Note:</b>There is no guaranteed correspondence between the iteration
- order of a bimap and that of its inverse.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>the inverse view of this bimap</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/BiMap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/AsynchronousComputationException.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/BiMap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="BiMap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/ClassToInstanceMap.html b/javadoc/com/google/common/collect/ClassToInstanceMap.html
deleted file mode 100644
index 9ae3367..0000000
--- a/javadoc/com/google/common/collect/ClassToInstanceMap.html
+++ /dev/null
@@ -1,316 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:57 PST 2010 -->
-<TITLE>
-ClassToInstanceMap (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="ClassToInstanceMap (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ClassToInstanceMap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/Collections2.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ClassToInstanceMap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ClassToInstanceMap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Interface ClassToInstanceMap&lt;B&gt;</H2>
-<DL>
-<DT><DT><B>Type Parameters:</B><DD><CODE>B</CODE> - the common supertype that all entries must share; often this is
-     simply <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang"><CODE>Object</CODE></A></DL>
-<DL>
-<DT><B>All Superinterfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;? extends B&gt;,B&gt;</DD>
-</DL>
-<DL>
-<DT><B>All Known Implementing Classes:</B> <DD><A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap</A>, <A HREF="../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect">MutableClassToInstanceMap</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public interface <B>ClassToInstanceMap&lt;B&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;? extends B&gt;,B&gt;</DL>
-</PRE>
-
-<P>
-A map, each entry of which maps a Java
- <a href="http://tinyurl.com/2cmwkz">raw type</a> to an instance of that type.
- In addition to implementing <code>Map</code>, the additional type-safe operations
- <A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html#putInstance(java.lang.Class, T)"><CODE>putInstance(java.lang.Class<T>, T)</CODE></A> and <A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html#getInstance(java.lang.Class)"><CODE>getInstance(java.lang.Class<T>)</CODE></A> are available.
-
- <p>Like any other <code>Map&lt;Class, Object&gt;</code>, this map may contain entries
- for primitive types, and a primitive type and its corresponding wrapper type
- may map to different values.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Kevin Bourrillion</DD>
-</DL>
-<HR>
-
-<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-<A NAME="nested_class_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Nested Class Summary</B></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;<A NAME="nested_classes_inherited_from_class_java.util.Map"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Nested classes/interfaces inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">V</A>&gt;</CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T extends <A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html" title="type parameter in ClassToInstanceMap">B</A>&gt; 
-<BR>
-T</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html#getInstance(java.lang.Class)">getInstance</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the value the specified class is mapped to, or <code>null</code> if no
- entry for this class is present.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T extends <A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html" title="type parameter in ClassToInstanceMap">B</A>&gt; 
-<BR>
-T</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html#putInstance(java.lang.Class, T)">putInstance</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type,
-            T&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Maps the specified class to the specified value.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.util.Map"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#clear()" title="class or interface in java.util">clear</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsKey(java.lang.Object)" title="class or interface in java.util">containsKey</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsValue(java.lang.Object)" title="class or interface in java.util">containsValue</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#entrySet()" title="class or interface in java.util">entrySet</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#get(java.lang.Object)" title="class or interface in java.util">get</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#keySet()" title="class or interface in java.util">keySet</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#put(K, V)" title="class or interface in java.util">put</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#putAll(java.util.Map)" title="class or interface in java.util">putAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#size()" title="class or interface in java.util">size</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#values()" title="class or interface in java.util">values</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="getInstance(java.lang.Class)"><!-- --></A><H3>
-getInstance</H3>
-<PRE>
-&lt;T extends <A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html" title="type parameter in ClassToInstanceMap">B</A>&gt; T <B>getInstance</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type)</PRE>
-<DL>
-<DD>Returns the value the specified class is mapped to, or <code>null</code> if no
- entry for this class is present. This will only return a value that was
- bound to this specific class, not a value that may have been bound to a
- subtype.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="putInstance(java.lang.Class,java.lang.Object)"><!-- --></A><A NAME="putInstance(java.lang.Class, T)"><!-- --></A><H3>
-putInstance</H3>
-<PRE>
-&lt;T extends <A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html" title="type parameter in ClassToInstanceMap">B</A>&gt; T <B>putInstance</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type,
-                            <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                            T&nbsp;value)</PRE>
-<DL>
-<DD>Maps the specified class to the specified value. Does <i>not</i> associate
- this value with any of the class's supertypes.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>the value previously associated with this class (possibly <code>null</code>), or <code>null</code> if there was no previous entry.</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ClassToInstanceMap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/Collections2.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ClassToInstanceMap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ClassToInstanceMap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/Collections2.html b/javadoc/com/google/common/collect/Collections2.html
deleted file mode 100644
index 106470e..0000000
--- a/javadoc/com/google/common/collect/Collections2.html
+++ /dev/null
@@ -1,301 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:57 PST 2010 -->
-<TITLE>
-Collections2 (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Collections2 (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Collections2.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ComparisonChain.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/Collections2.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Collections2.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class Collections2</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.Collections2</B>
-</PRE>
-<HR>
-<DL>
-<DT><PRE>public final class <B>Collections2</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
-</PRE>
-
-<P>
-Provides static methods for working with <code>Collection</code> instances.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Chris Povirk, Mike Bostock, Jared Levy</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Collections2.html#filter(java.util.Collection, com.google.common.base.Predicate)">filter</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;&nbsp;unfiltered,
-       <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super E&gt;&nbsp;predicate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the elements of <code>unfiltered</code> that satisfy a predicate.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;F,T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Collections2.html#transform(java.util.Collection, com.google.common.base.Function)">transform</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;F&gt;&nbsp;fromCollection,
-          <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super F,T&gt;&nbsp;function)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection that applies <code>function</code> to each element of
- <code>fromCollection</code>.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="filter(java.util.Collection, com.google.common.base.Predicate)"><!-- --></A><H3>
-filter</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt; <B>filter</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;&nbsp;unfiltered,
-                                       <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super E&gt;&nbsp;predicate)</PRE>
-<DL>
-<DD>Returns the elements of <code>unfiltered</code> that satisfy a predicate. The
- returned collection is a live view of <code>unfiltered</code>; changes to one
- affect the other.
-
- <p>The resulting collection's iterator does not support <code>remove()</code>,
- but all other collection methods are supported. The collection's
- <code>add()</code> and <code>addAll()</code> methods throw an
- <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang"><CODE>IllegalArgumentException</CODE></A> if an element that doesn't satisfy the
- predicate is provided. When methods such as <code>removeAll()</code> and
- <code>clear()</code> are called on the filtered collection, only elements that
- satisfy the filter will be removed from the underlying collection.
-
- <p>The returned collection isn't threadsafe or serializable, even if
- <code>unfiltered</code> is.
-
- <p>Many of the filtered collection's methods, such as <code>size()</code>,
- iterate across every element in the underlying collection and determine
- which elements satisfy the filter. When a live view is <i>not</i> needed,
- it may be faster to copy <code>Iterables.filter(unfiltered, predicate)</code>
- and use the copy.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="transform(java.util.Collection, com.google.common.base.Function)"><!-- --></A><H3>
-transform</H3>
-<PRE>
-public static &lt;F,T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;T&gt; <B>transform</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;F&gt;&nbsp;fromCollection,
-                                            <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super F,T&gt;&nbsp;function)</PRE>
-<DL>
-<DD>Returns a collection that applies <code>function</code> to each element of
- <code>fromCollection</code>. The returned collection is a live view of <code>fromCollection</code>; changes to one affect the other.
-
- <p>The returned collection's <code>add()</code> and <code>addAll()</code> methods
- throw an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang"><CODE>UnsupportedOperationException</CODE></A>. All other collection
- methods are supported, as long as <code>fromCollection</code> supports them.
-
- <p>The returned collection isn't threadsafe or serializable, even if
- <code>fromCollection</code> is.
-
- <p>When a live view is <i>not</i> needed, it may be faster to copy the
- transformed collection and use the copy.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Collections2.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ComparisonChain.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/Collections2.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Collections2.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/ComparisonChain.html b/javadoc/com/google/common/collect/ComparisonChain.html
deleted file mode 100644
index 4b9b741..0000000
--- a/javadoc/com/google/common/collect/ComparisonChain.html
+++ /dev/null
@@ -1,463 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:57 PST 2010 -->
-<TITLE>
-ComparisonChain (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="ComparisonChain (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ComparisonChain.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/Collections2.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ComputationException.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ComparisonChain.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ComparisonChain.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class ComparisonChain</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ComparisonChain</B>
-</PRE>
-<HR>
-<DL>
-<DT><PRE>public abstract class <B>ComparisonChain</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
-</PRE>
-
-<P>
-A utility for performing a "lazy" chained comparison statement, which 
- performs comparisons only until it finds a nonzero result. For example:
-
- <pre class="code">   <code>public int compareTo(Foo that) {
-     return ComparisonChain.start()
-         .compare(this.aString, that.aString)
-         .compare(this.anInt, that.anInt)
-         .compare(this.anEnum, that.anEnum, Ordering.nullsLast())
-         .result();
-   }</code></pre>
-
- The value of this expression will have the same sign as the <i>first
- nonzero</i> comparison result in the chain, or will be zero if every
- comparison result was zero.
-
- <p>Once any comparison returns a nonzero value, remaining comparisons are
- "short-circuited".
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Mark Davis, Kevin Bourrillion</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>abstract &nbsp;<A HREF="../../../../com/google/common/collect/ComparisonChain.html" title="class in com.google.common.collect">ComparisonChain</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ComparisonChain.html#compare(boolean, boolean)">compare</A></B>(boolean&nbsp;left,
-        boolean&nbsp;right)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares two <code>boolean</code> values as specified by <A HREF="../../../../com/google/common/primitives/Booleans.html#compare(boolean, boolean)"><CODE>Booleans.compare(boolean, boolean)</CODE></A>, <i>if</i> the result of this comparison chain has not
- already been determined.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>abstract &nbsp;<A HREF="../../../../com/google/common/collect/ComparisonChain.html" title="class in com.google.common.collect">ComparisonChain</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ComparisonChain.html#compare(java.lang.Comparable, java.lang.Comparable)">compare</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;?&gt;&nbsp;left,
-        <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;?&gt;&nbsp;right)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares two comparable objects as specified by <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true#compareTo(T)" title="class or interface in java.lang"><CODE>Comparable.compareTo(T)</CODE></A>, <i>if</i> the result of this comparison chain
- has not already been determined.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>abstract &nbsp;<A HREF="../../../../com/google/common/collect/ComparisonChain.html" title="class in com.google.common.collect">ComparisonChain</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ComparisonChain.html#compare(double, double)">compare</A></B>(double&nbsp;left,
-        double&nbsp;right)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares two <code>double</code> values as specified by <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Double.html?is-external=true#compare(double, double)" title="class or interface in java.lang"><CODE>Double.compare(double, double)</CODE></A>, <i>if</i> the result of this comparison chain has not
- already been determined.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>abstract &nbsp;<A HREF="../../../../com/google/common/collect/ComparisonChain.html" title="class in com.google.common.collect">ComparisonChain</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ComparisonChain.html#compare(float, float)">compare</A></B>(float&nbsp;left,
-        float&nbsp;right)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares two <code>float</code> values as specified by <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true#compare(float, float)" title="class or interface in java.lang"><CODE>Float.compare(float, float)</CODE></A>, <i>if</i> the result of this comparison chain has not
- already been determined.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>abstract &nbsp;<A HREF="../../../../com/google/common/collect/ComparisonChain.html" title="class in com.google.common.collect">ComparisonChain</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ComparisonChain.html#compare(int, int)">compare</A></B>(int&nbsp;left,
-        int&nbsp;right)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares two <code>int</code> values as specified by <A HREF="../../../../com/google/common/primitives/Ints.html#compare(int, int)"><CODE>Ints.compare(int, int)</CODE></A>,
- <i>if</i> the result of this comparison chain has not already been
- determined.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>abstract &nbsp;<A HREF="../../../../com/google/common/collect/ComparisonChain.html" title="class in com.google.common.collect">ComparisonChain</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ComparisonChain.html#compare(long, long)">compare</A></B>(long&nbsp;left,
-        long&nbsp;right)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares two <code>long</code> values as specified by <A HREF="../../../../com/google/common/primitives/Longs.html#compare(long, long)"><CODE>Longs.compare(long, long)</CODE></A>,
- <i>if</i> the result of this comparison chain has not already been
- determined.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>abstract 
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/collect/ComparisonChain.html" title="class in com.google.common.collect">ComparisonChain</A></CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ComparisonChain.html#compare(T, T, java.util.Comparator)">compare</A></B>(T&nbsp;left,
-        T&nbsp;right,
-        <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;T&gt;&nbsp;comparator)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares two objects using a comparator, <i>if</i> the result of this
- comparison chain has not already been determined.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>abstract &nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ComparisonChain.html#result()">result</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ends this comparison chain and returns its result: a value having the
- same sign as the first nonzero comparison result in the chain, or zero if
- every result was zero.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/collect/ComparisonChain.html" title="class in com.google.common.collect">ComparisonChain</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ComparisonChain.html#start()">start</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Begins a new chained comparison statement.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="start()"><!-- --></A><H3>
-start</H3>
-<PRE>
-public static <A HREF="../../../../com/google/common/collect/ComparisonChain.html" title="class in com.google.common.collect">ComparisonChain</A> <B>start</B>()</PRE>
-<DL>
-<DD>Begins a new chained comparison statement. See example in the class
- documentation.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="compare(java.lang.Comparable, java.lang.Comparable)"><!-- --></A><H3>
-compare</H3>
-<PRE>
-public abstract <A HREF="../../../../com/google/common/collect/ComparisonChain.html" title="class in com.google.common.collect">ComparisonChain</A> <B>compare</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;?&gt;&nbsp;left,
-                                        <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;?&gt;&nbsp;right)</PRE>
-<DL>
-<DD>Compares two comparable objects as specified by <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true#compareTo(T)" title="class or interface in java.lang"><CODE>Comparable.compareTo(T)</CODE></A>, <i>if</i> the result of this comparison chain
- has not already been determined.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="compare(java.lang.Object,java.lang.Object,java.util.Comparator)"><!-- --></A><A NAME="compare(T, T, java.util.Comparator)"><!-- --></A><H3>
-compare</H3>
-<PRE>
-public abstract &lt;T&gt; <A HREF="../../../../com/google/common/collect/ComparisonChain.html" title="class in com.google.common.collect">ComparisonChain</A> <B>compare</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                                            T&nbsp;left,
-                                            <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                                            T&nbsp;right,
-                                            <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;T&gt;&nbsp;comparator)</PRE>
-<DL>
-<DD>Compares two objects using a comparator, <i>if</i> the result of this
- comparison chain has not already been determined.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="compare(int, int)"><!-- --></A><H3>
-compare</H3>
-<PRE>
-public abstract <A HREF="../../../../com/google/common/collect/ComparisonChain.html" title="class in com.google.common.collect">ComparisonChain</A> <B>compare</B>(int&nbsp;left,
-                                        int&nbsp;right)</PRE>
-<DL>
-<DD>Compares two <code>int</code> values as specified by <A HREF="../../../../com/google/common/primitives/Ints.html#compare(int, int)"><CODE>Ints.compare(int, int)</CODE></A>,
- <i>if</i> the result of this comparison chain has not already been
- determined.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="compare(long, long)"><!-- --></A><H3>
-compare</H3>
-<PRE>
-public abstract <A HREF="../../../../com/google/common/collect/ComparisonChain.html" title="class in com.google.common.collect">ComparisonChain</A> <B>compare</B>(long&nbsp;left,
-                                        long&nbsp;right)</PRE>
-<DL>
-<DD>Compares two <code>long</code> values as specified by <A HREF="../../../../com/google/common/primitives/Longs.html#compare(long, long)"><CODE>Longs.compare(long, long)</CODE></A>,
- <i>if</i> the result of this comparison chain has not already been
- determined.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="compare(float, float)"><!-- --></A><H3>
-compare</H3>
-<PRE>
-public abstract <A HREF="../../../../com/google/common/collect/ComparisonChain.html" title="class in com.google.common.collect">ComparisonChain</A> <B>compare</B>(float&nbsp;left,
-                                        float&nbsp;right)</PRE>
-<DL>
-<DD>Compares two <code>float</code> values as specified by <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true#compare(float, float)" title="class or interface in java.lang"><CODE>Float.compare(float, float)</CODE></A>, <i>if</i> the result of this comparison chain has not
- already been determined.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="compare(double, double)"><!-- --></A><H3>
-compare</H3>
-<PRE>
-public abstract <A HREF="../../../../com/google/common/collect/ComparisonChain.html" title="class in com.google.common.collect">ComparisonChain</A> <B>compare</B>(double&nbsp;left,
-                                        double&nbsp;right)</PRE>
-<DL>
-<DD>Compares two <code>double</code> values as specified by <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Double.html?is-external=true#compare(double, double)" title="class or interface in java.lang"><CODE>Double.compare(double, double)</CODE></A>, <i>if</i> the result of this comparison chain has not
- already been determined.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="compare(boolean, boolean)"><!-- --></A><H3>
-compare</H3>
-<PRE>
-public abstract <A HREF="../../../../com/google/common/collect/ComparisonChain.html" title="class in com.google.common.collect">ComparisonChain</A> <B>compare</B>(boolean&nbsp;left,
-                                        boolean&nbsp;right)</PRE>
-<DL>
-<DD>Compares two <code>boolean</code> values as specified by <A HREF="../../../../com/google/common/primitives/Booleans.html#compare(boolean, boolean)"><CODE>Booleans.compare(boolean, boolean)</CODE></A>, <i>if</i> the result of this comparison chain has not
- already been determined.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="result()"><!-- --></A><H3>
-result</H3>
-<PRE>
-public abstract int <B>result</B>()</PRE>
-<DL>
-<DD>Ends this comparison chain and returns its result: a value having the
- same sign as the first nonzero comparison result in the chain, or zero if
- every result was zero.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ComparisonChain.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/Collections2.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ComputationException.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ComparisonChain.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ComparisonChain.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/ComputationException.html b/javadoc/com/google/common/collect/ComputationException.html
deleted file mode 100644
index 87d0b58..0000000
--- a/javadoc/com/google/common/collect/ComputationException.html
+++ /dev/null
@@ -1,250 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:57 PST 2010 -->
-<TITLE>
-ComputationException (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="ComputationException (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ComputationException.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ComparisonChain.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ComputationException.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ComputationException.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_java.lang.Throwable">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;METHOD</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class ComputationException</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">java.lang.Throwable</A>
-      <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">java.lang.Exception</A>
-          <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/RuntimeException.html?is-external=true" title="class or interface in java.lang">java.lang.RuntimeException</A>
-              <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ComputationException</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A></DD>
-</DL>
-<DL>
-<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../../com/google/common/collect/AsynchronousComputationException.html" title="class in com.google.common.collect">AsynchronousComputationException</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public class <B>ComputationException</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/RuntimeException.html?is-external=true" title="class or interface in java.lang">RuntimeException</A></DL>
-</PRE>
-
-<P>
-Wraps an exception that occured during a computation.
-<P>
-
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../serialized-form.html#com.google.common.collect.ComputationException">Serialized Form</A></DL>
-<HR>
-
-<P>
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ComputationException.html#ComputationException(java.lang.Throwable)">ComputationException</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A>&nbsp;cause)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new instance with the given cause.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Throwable"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true#fillInStackTrace()" title="class or interface in java.lang">fillInStackTrace</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true#getCause()" title="class or interface in java.lang">getCause</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true#getLocalizedMessage()" title="class or interface in java.lang">getLocalizedMessage</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true#getMessage()" title="class or interface in java.lang">getMessage</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true#getStackTrace()" title="class or interface in java.lang">getStackTrace</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true#initCause(java.lang.Throwable)" title="class or interface in java.lang">initCause</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true#printStackTrace()" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true#printStackTrace(java.io.PrintStream)" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true#printStackTrace(java.io.PrintWriter)" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true#setStackTrace(java.lang.StackTraceElement[])" title="class or interface in java.lang">setStackTrace</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true#toString()" title="class or interface in java.lang">toString</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="ComputationException(java.lang.Throwable)"><!-- --></A><H3>
-ComputationException</H3>
-<PRE>
-public <B>ComputationException</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A>&nbsp;cause)</PRE>
-<DL>
-<DD>Creates a new instance with the given cause.
-<P>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ComputationException.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ComparisonChain.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ComputationException.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ComputationException.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_java.lang.Throwable">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;METHOD</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/ConcurrentHashMultiset.html b/javadoc/com/google/common/collect/ConcurrentHashMultiset.html
deleted file mode 100644
index 492400e..0000000
--- a/javadoc/com/google/common/collect/ConcurrentHashMultiset.html
+++ /dev/null
@@ -1,1039 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:57 PST 2010 -->
-<TITLE>
-ConcurrentHashMultiset (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="ConcurrentHashMultiset (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ConcurrentHashMultiset.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ComputationException.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ConcurrentHashMultiset.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ConcurrentHashMultiset.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class ConcurrentHashMultiset&lt;E&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">java.util.AbstractCollection</A>&lt;E&gt;
-      <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ConcurrentHashMultiset&lt;E&gt;</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public final class <B>ConcurrentHashMultiset&lt;E&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;<DT>implements <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A></DL>
-</PRE>
-
-<P>
-A multiset that supports concurrent modifications and that provides atomic
- versions of most <code>Multiset</code> operations (exceptions where noted). Null
- elements are not supported.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Cliff L. Biffle</DD>
-<DT><B>See Also:</B><DD><A HREF="../../../../serialized-form.html#com.google.common.collect.ConcurrentHashMultiset">Serialized Form</A></DL>
-<HR>
-
-<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-<A NAME="nested_class_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Nested Class Summary</B></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;<A NAME="nested_classes_inherited_from_class_com.google.common.collect.Multiset"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Nested classes/interfaces inherited from interface com.google.common.collect.<A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="type parameter in Multiset.Entry">E</A>&gt;</CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html#add(E)">add</A></B>(E&nbsp;element)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds a single occurrence of the specified element to this multiset.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html#add(E, int)">add</A></B>(<A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="type parameter in ConcurrentHashMultiset">E</A>&nbsp;element,
-    int&nbsp;occurrences)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds a number of occurrences of the specified element to this multiset.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html#addAll(java.util.Collection)">addAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;? extends E&gt;&nbsp;elementsToAdd)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html#clear()">clear</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html#contains(java.lang.Object)">contains</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Determines whether this multiset contains the specified element.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html#containsAll(java.util.Collection)">containsAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if this multiset contains at least one occurrence of
- each element in the specified collection.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html#count(java.lang.Object)">count</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of occurrences of <code>element</code> in this multiset.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect">ConcurrentHashMultiset</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html#create()">create</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new, empty <code>ConcurrentHashMultiset</code> using the default
- initial capacity, load factor, and concurrency settings.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect">ConcurrentHashMultiset</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html#create(java.lang.Iterable)">create</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>ConcurrentHashMultiset</code> containing the specified
- elements, using the default initial capacity, load factor, and concurrency
- settings.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html#elementSet()">elementSet</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the set of distinct elements contained in this multiset.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="type parameter in ConcurrentHashMultiset">E</A>&gt;&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html#entrySet()">entrySet</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of the contents of this multiset, grouped into <code>Multiset.Entry</code> instances, each providing an element of the multiset and
- the count of that element.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares the specified object with this multiset for equality.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html#hashCode()">hashCode</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the hash code for this multiset.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html#isEmpty()">isEmpty</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;E&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html#iterator()">iterator</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html#remove(java.lang.Object)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes a <i>single</i> occurrence of the specified element from this
- multiset, if present.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html#remove(java.lang.Object, int)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element,
-       int&nbsp;occurrences)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes a number of occurrences of the specified element from this
- multiset.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html#removeAll(java.util.Collection)">removeAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToRemove)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html#removeExactly(java.lang.Object, int)">removeExactly</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element,
-              int&nbsp;occurrences)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes exactly the specified number of occurrences of <code>element</code>, or
- makes no change if this is not possible.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html#retainAll(java.util.Collection)">retainAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToRetain)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html#setCount(E, int)">setCount</A></B>(<A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="type parameter in ConcurrentHashMultiset">E</A>&nbsp;element,
-         int&nbsp;count)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds or removes occurrences of <code>element</code> such that the <A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html#count(java.lang.Object)"><CODE>count(java.lang.Object)</CODE></A>
- of the element becomes <code>count</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html#setCount(E, int, int)">setCount</A></B>(<A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="type parameter in ConcurrentHashMultiset">E</A>&nbsp;element,
-         int&nbsp;oldCount,
-         int&nbsp;newCount)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sets the number of occurrences of <code>element</code> to <code>newCount</code>, but
- only if the count is currently <code>oldCount</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html#size()">size</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>[]</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html#toArray()">toArray</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; T[]</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html#toArray(T[])">toArray</A></B>(T[]&nbsp;array)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html#toString()">toString</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="create()"><!-- --></A><H3>
-create</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect">ConcurrentHashMultiset</A>&lt;E&gt; <B>create</B>()</PRE>
-<DL>
-<DD>Creates a new, empty <code>ConcurrentHashMultiset</code> using the default
- initial capacity, load factor, and concurrency settings.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="create(java.lang.Iterable)"><!-- --></A><H3>
-create</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect">ConcurrentHashMultiset</A>&lt;E&gt; <B>create</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</PRE>
-<DL>
-<DD>Creates a new <code>ConcurrentHashMultiset</code> containing the specified
- elements, using the default initial capacity, load factor, and concurrency
- settings.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>elements</CODE> - the elements that the multiset should contain</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="count(java.lang.Object)"><!-- --></A><H3>
-count</H3>
-<PRE>
-public int <B>count</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                 <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</PRE>
-<DL>
-<DD>Returns the number of occurrences of <code>element</code> in this multiset.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#count(java.lang.Object)">count</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="type parameter in ConcurrentHashMultiset">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to look for
-<DT><B>Returns:</B><DD>the nonnegative number of occurrences of the element</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="size()"><!-- --></A><H3>
-size</H3>
-<PRE>
-public int <B>size</B>()</PRE>
-<DL>
-<DD>
-
- <p>If the data in the multiset is modified by any other threads during this
- method, it is undefined which (if any) of these modifications will be
- reflected in the result.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#size()" title="class or interface in java.util">size</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="type parameter in ConcurrentHashMultiset">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toArray()"><!-- --></A><H3>
-toArray</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>[] <B>toArray</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#toArray()" title="class or interface in java.util">toArray</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="type parameter in ConcurrentHashMultiset">E</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#toArray()" title="class or interface in java.util">toArray</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;<A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="type parameter in ConcurrentHashMultiset">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toArray(java.lang.Object[])"><!-- --></A><A NAME="toArray(T[])"><!-- --></A><H3>
-toArray</H3>
-<PRE>
-public &lt;T&gt; T[] <B>toArray</B>(T[]&nbsp;array)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#toArray(T[])" title="class or interface in java.util">toArray</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="type parameter in ConcurrentHashMultiset">E</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#toArray(T[])" title="class or interface in java.util">toArray</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;<A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="type parameter in ConcurrentHashMultiset">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="add(java.lang.Object,int)"><!-- --></A><A NAME="add(E, int)"><!-- --></A><H3>
-add</H3>
-<PRE>
-public int <B>add</B>(<A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="type parameter in ConcurrentHashMultiset">E</A>&nbsp;element,
-               int&nbsp;occurrences)</PRE>
-<DL>
-<DD>Adds a number of occurrences of the specified element to this multiset.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#add(E, int)">add</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="type parameter in ConcurrentHashMultiset">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to add<DD><CODE>occurrences</CODE> - the number of occurrences to add
-<DT><B>Returns:</B><DD>the previous count of the element before the operation; possibly
-     zero
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>occurrences</code> is negative, or if
-     the resulting amount would exceed <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true#MAX_VALUE" title="class or interface in java.lang"><CODE>Integer.MAX_VALUE</CODE></A></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="remove(java.lang.Object, int)"><!-- --></A><H3>
-remove</H3>
-<PRE>
-public int <B>remove</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                  <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element,
-                  int&nbsp;occurrences)</PRE>
-<DL>
-<DD>Removes a number of occurrences of the specified element from this
- multiset. If the multiset contains fewer than this number of occurrences to
- begin with, all occurrences will be removed.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#remove(java.lang.Object, int)">remove</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="type parameter in ConcurrentHashMultiset">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element whose occurrences should be removed<DD><CODE>occurrences</CODE> - the number of occurrences of the element to remove
-<DT><B>Returns:</B><DD>the count of the element before the operation; possibly zero
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>occurrences</code> is negative</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="removeExactly(java.lang.Object, int)"><!-- --></A><H3>
-removeExactly</H3>
-<PRE>
-public boolean <B>removeExactly</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                             <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element,
-                             int&nbsp;occurrences)</PRE>
-<DL>
-<DD>Removes exactly the specified number of occurrences of <code>element</code>, or
- makes no change if this is not possible.
-
- <p>This method, in contrast to <A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html#remove(java.lang.Object, int)"><CODE>remove(Object, int)</CODE></A>, has no effect
- when the element count is smaller than <code>occurrences</code>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to remove<DD><CODE>occurrences</CODE> - the number of occurrences of <code>element</code> to remove
-<DT><B>Returns:</B><DD><code>true</code> if the removal was possible (including if <code>occurrences</code> is zero)</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="setCount(java.lang.Object,int)"><!-- --></A><A NAME="setCount(E, int)"><!-- --></A><H3>
-setCount</H3>
-<PRE>
-public int <B>setCount</B>(<A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="type parameter in ConcurrentHashMultiset">E</A>&nbsp;element,
-                    int&nbsp;count)</PRE>
-<DL>
-<DD>Adds or removes occurrences of <code>element</code> such that the <A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html#count(java.lang.Object)"><CODE>count(java.lang.Object)</CODE></A>
- of the element becomes <code>count</code>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int)">setCount</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="type parameter in ConcurrentHashMultiset">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to add or remove occurrences of; may be null
-     only if explicitly allowed by the implementation<DD><CODE>count</CODE> - the desired count of the element in this multiset
-<DT><B>Returns:</B><DD>the count of <code>element</code> in the multiset before this call
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>count</code> is negative</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="setCount(java.lang.Object,int,int)"><!-- --></A><A NAME="setCount(E, int, int)"><!-- --></A><H3>
-setCount</H3>
-<PRE>
-public boolean <B>setCount</B>(<A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="type parameter in ConcurrentHashMultiset">E</A>&nbsp;element,
-                        int&nbsp;oldCount,
-                        int&nbsp;newCount)</PRE>
-<DL>
-<DD>Sets the number of occurrences of <code>element</code> to <code>newCount</code>, but
- only if the count is currently <code>oldCount</code>. If <code>element</code> does
- not appear in the multiset exactly <code>oldCount</code> times, no changes will
- be made.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int, int)">setCount</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="type parameter in ConcurrentHashMultiset">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to conditionally set the count of; may be null
-     only if explicitly allowed by the implementation<DD><CODE>oldCount</CODE> - the expected present count of the element in this multiset<DD><CODE>newCount</CODE> - the desired count of the element in this multiset
-<DT><B>Returns:</B><DD><code>true</code> if the change was successful. This usually indicates
-     that the multiset has been modified, but not always: in the case that
-     <code>oldCount == newCount</code>, the method will return <code>true</code> if
-     the condition was met.
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>oldCount</code> or <code>newCount</code> is
-     negative</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="entrySet()"><!-- --></A><H3>
-entrySet</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="type parameter in ConcurrentHashMultiset">E</A>&gt;&gt; <B>entrySet</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#entrySet()">Multiset</A></CODE></B></DD>
-<DD>Returns a view of the contents of this multiset, grouped into <code>Multiset.Entry</code> instances, each providing an element of the multiset and
- the count of that element. This set contains exactly one entry for each
- distinct element in the multiset (thus it always has the same size as the
- <A HREF="../../../../com/google/common/collect/Multiset.html#elementSet()"><CODE>Multiset.elementSet()</CODE></A>). The order of the elements in the element set is
- unspecified.
-
- <p>The entry set is backed by the same data as the multiset, so any change
- to either is immediately reflected in the other. However, multiset changes
- may or may not be reflected in any <code>Entry</code> instances already
- retrieved from the entry set (this is implementation-dependent).
- Furthermore, implementations are not required to support modifications to
- the entry set at all, and the <code>Entry</code> instances themselves don't
- even have methods for modification. See the specific implementation class
- for more details on how its entry set handles modifications.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#entrySet()">entrySet</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="type parameter in ConcurrentHashMultiset">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a set of entries representing the data of this multiset</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="isEmpty()"><!-- --></A><H3>
-isEmpty</H3>
-<PRE>
-public boolean <B>isEmpty</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="contains(java.lang.Object)"><!-- --></A><H3>
-contains</H3>
-<PRE>
-public boolean <B>contains</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                        <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#contains(java.lang.Object)">Multiset</A></CODE></B></DD>
-<DD>Determines whether this multiset contains the specified element.
-
- <p>This method refines <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util"><CODE>Collection.contains(java.lang.Object)</CODE></A> to further specify that
- it <b>may not</b> throw an exception in response to <code>element</code> being
- null or of the wrong type.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#contains(java.lang.Object)">contains</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util">contains</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util">contains</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to check for
-<DT><B>Returns:</B><DD><code>true</code> if this multiset contains at least one occurrence of
-     the element</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="iterator()"><!-- --></A><H3>
-iterator</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;E&gt; <B>iterator</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#iterator()">Multiset</A></CODE></B></DD>
-<DD>
-
- <p>Elements that occur multiple times in the multiset will appear
- multiple times in this iterator, though not necessarily sequentially.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#iterator()">iterator</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true#iterator()" title="class or interface in java.lang">iterator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#iterator()" title="class or interface in java.util">iterator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#iterator()" title="class or interface in java.util">iterator</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="add(java.lang.Object)"><!-- --></A><A NAME="add(E)"><!-- --></A><H3>
-add</H3>
-<PRE>
-public boolean <B>add</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                   E&nbsp;element)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#add(E)">Multiset</A></CODE></B></DD>
-<DD>Adds a single occurrence of the specified element to this multiset.
-
- <p>This method refines <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#add(E)" title="class or interface in java.util"><CODE>Collection.add(E)</CODE></A>, which only <i>ensures</i>
- the presence of the element, to further specify that a successful call must
- always increment the count of the element, and the overall size of the
- collection, by one.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#add(E)">add</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#add(E)" title="class or interface in java.util">add</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#add(E)" title="class or interface in java.util">add</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to add one occurrence of; may be null only if
-     explicitly allowed by the implementation
-<DT><B>Returns:</B><DD><code>true</code> always, since this call is required to modify the
-     multiset, unlike other <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A> types</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="remove(java.lang.Object)"><!-- --></A><H3>
-remove</H3>
-<PRE>
-public boolean <B>remove</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#remove(java.lang.Object)">Multiset</A></CODE></B></DD>
-<DD>Removes a <i>single</i> occurrence of the specified element from this
- multiset, if present.
-
- <p>This method refines <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util"><CODE>Collection.remove(java.lang.Object)</CODE></A> to further specify that it
- <b>may not</b> throw an exception in response to <code>element</code> being null
- or of the wrong type.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#remove(java.lang.Object)">remove</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to remove one occurrence of
-<DT><B>Returns:</B><DD><code>true</code> if an occurrence was found and removed</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="containsAll(java.util.Collection)"><!-- --></A><H3>
-containsAll</H3>
-<PRE>
-public boolean <B>containsAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elements)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#containsAll(java.util.Collection)">Multiset</A></CODE></B></DD>
-<DD>Returns <code>true</code> if this multiset contains at least one occurrence of
- each element in the specified collection.
-
- <p>This method refines <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util"><CODE>Collection.containsAll(java.util.Collection<?>)</CODE></A> to further specify
- that it <b>may not</b> throw an exception in response to any of <code>elements</code> being null or of the wrong type.
-
- <p><b>Note:</b> this method does not take into account the occurrence
- count of an element in the two collections; it may still return <code>true</code> even if <code>elements</code> contains several occurrences of an element
- and this multiset contains only one. This is no different than any other
- collection type like <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util"><CODE>List</CODE></A>, but it may be unexpected to the user of
- a multiset.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#containsAll(java.util.Collection)">containsAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util">containsAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util">containsAll</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>elements</CODE> - the collection of elements to be checked for containment in
-     this multiset
-<DT><B>Returns:</B><DD><code>true</code> if this multiset contains at least one occurrence of
-     each element contained in <code>elements</code></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="addAll(java.util.Collection)"><!-- --></A><H3>
-addAll</H3>
-<PRE>
-public boolean <B>addAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;? extends E&gt;&nbsp;elementsToAdd)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#addAll(java.util.Collection)" title="class or interface in java.util">addAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#addAll(java.util.Collection)" title="class or interface in java.util">addAll</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="removeAll(java.util.Collection)"><!-- --></A><H3>
-removeAll</H3>
-<PRE>
-public boolean <B>removeAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToRemove)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#removeAll(java.util.Collection)">Multiset</A></CODE></B></DD>
-<DD>
-
- <p>This method refines <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#removeAll(java.util.Collection)" title="class or interface in java.util"><CODE>Collection.removeAll(java.util.Collection<?>)</CODE></A> to further specify that
- it <b>may not</b> throw an exception in response to any of <code>elements</code>
- being null or of the wrong type.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#removeAll(java.util.Collection)">removeAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#removeAll(java.util.Collection)" title="class or interface in java.util">removeAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#removeAll(java.util.Collection)" title="class or interface in java.util">removeAll</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="retainAll(java.util.Collection)"><!-- --></A><H3>
-retainAll</H3>
-<PRE>
-public boolean <B>retainAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToRetain)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#retainAll(java.util.Collection)">Multiset</A></CODE></B></DD>
-<DD>
-
- <p>This method refines <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util"><CODE>Collection.retainAll(java.util.Collection<?>)</CODE></A> to further specify that
- it <b>may not</b> throw an exception in response to any of <code>elements</code>
- being null or of the wrong type.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#retainAll(java.util.Collection)">retainAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util">retainAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util">retainAll</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="clear()"><!-- --></A><H3>
-clear</H3>
-<PRE>
-public void <B>clear</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#clear()" title="class or interface in java.util">clear</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#clear()" title="class or interface in java.util">clear</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="elementSet()"><!-- --></A><H3>
-elementSet</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt; <B>elementSet</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#elementSet()">Multiset</A></CODE></B></DD>
-<DD>Returns the set of distinct elements contained in this multiset. The
- element set is backed by the same data as the multiset, so any change to
- either is immediately reflected in the other. The order of the elements in
- the element set is unspecified.
-
- <p>If the element set supports any removal operations, these necessarily
- cause <b>all</b> occurrences of the removed element(s) to be removed from
- the multiset. Implementations are not expected to support the add
- operations, although this is possible.
-
- <p>A common use for the element set is to find the number of distinct
- elements in the multiset: <code>elementSet().size()</code>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#elementSet()">elementSet</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a view of the set of distinct elements in this multiset</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
-equals</H3>
-<PRE>
-public boolean <B>equals</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                      <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
-<DL>
-<DD>Compares the specified object with this multiset for equality. Returns
- <code>true</code> if the given object is also a multiset and contains equal
- elements with equal counts, regardless of order.
-
- <p>This implementation returns <code>true</code> if <code>other</code> is a multiset
- of the same size and if, for each element, the two multisets have the same
- count.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#equals(java.lang.Object)">equals</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="hashCode()"><!-- --></A><H3>
-hashCode</H3>
-<PRE>
-public int <B>hashCode</B>()</PRE>
-<DL>
-<DD>Returns the hash code for this multiset. This is defined as the sum of
-
- <pre>  (element == null ? 0 : element.hashCode()) ^ count(element)</pre>
-
- over all distinct elements in the multiset. It follows that a multiset and
- its entry set always have the same hash code.
-
- <p>This implementation returns the hash code of <A HREF="../../../../com/google/common/collect/Multiset.html#entrySet()"><CODE>Multiset.entrySet()</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#hashCode()">hashCode</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toString()"><!-- --></A><H3>
-toString</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
-<DL>
-<DD>
-
- <p>It is recommended, though not mandatory, that this method return the
- result of invoking <A HREF="../../../../com/google/common/collect/Multiset.html#toString()"><CODE>Multiset.toString()</CODE></A> on the <A HREF="../../../../com/google/common/collect/Multiset.html#entrySet()"><CODE>Multiset.entrySet()</CODE></A>, yielding a
- result such as
- <pre>
-     [a x 3, c, d x 2, e]
- </pre>
-
- <p>This implementation returns the result of invoking <code>toString</code> on
- <A HREF="../../../../com/google/common/collect/Multiset.html#entrySet()"><CODE>Multiset.entrySet()</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#toString()">toString</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#toString()" title="class or interface in java.util">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ConcurrentHashMultiset.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ComputationException.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ConcurrentHashMultiset.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ConcurrentHashMultiset.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/EnumBiMap.html b/javadoc/com/google/common/collect/EnumBiMap.html
deleted file mode 100644
index 81a93f0..0000000
--- a/javadoc/com/google/common/collect/EnumBiMap.html
+++ /dev/null
@@ -1,669 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:57 PST 2010 -->
-<TITLE>
-EnumBiMap (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="EnumBiMap (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/EnumBiMap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/EnumBiMap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="EnumBiMap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class EnumBiMap&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;K&gt;,V extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;V&gt;&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingObject</A>
-      <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingMap</A>&lt;K,V&gt;
-          <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.EnumBiMap&lt;K,V&gt;</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public final class <B>EnumBiMap&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;K&gt;,V extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;V&gt;&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</DL>
-</PRE>
-
-<P>
-A <code>BiMap</code> backed by two <code>EnumMap</code> instances. Null keys and values
- are not permitted. An <code>EnumBiMap</code> and its inverse are both
- serializable.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Mike Bostock</DD>
-<DT><B>See Also:</B><DD><A HREF="../../../../serialized-form.html#com.google.common.collect.EnumBiMap">Serialized Form</A></DL>
-<HR>
-
-<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-<A NAME="nested_class_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Nested Class Summary</B></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;<A NAME="nested_classes_inherited_from_class_java.util.Map"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Nested classes/interfaces inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">V</A>&gt;</CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumBiMap.html#clear()">clear</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumBiMap.html#containsValue(java.lang.Object)">containsValue</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;K&gt;,V extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;V&gt;&gt; 
-<BR>
-<A HREF="../../../../com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect">EnumBiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumBiMap.html#create(java.lang.Class, java.lang.Class)">create</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;K&gt;&nbsp;keyType,
-       <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;V&gt;&nbsp;valueType)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new, empty <code>EnumBiMap</code> using the specified key and value
- types.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;K&gt;,V extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;V&gt;&gt; 
-<BR>
-<A HREF="../../../../com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect">EnumBiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumBiMap.html#create(java.util.Map)">create</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;&nbsp;map)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new bimap with the same mappings as the specified map.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected &nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumBiMap.html#delegate()">delegate</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the backing delegate instance that methods are forwarded to.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;K,V&gt;&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumBiMap.html#entrySet()">entrySet</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;V</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumBiMap.html#forcePut(K, V)">forcePut</A></B>(K&nbsp;key,
-         V&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An alternate form of <code>put</code> that silently removes any existing entry
- with the value <code>value</code> before proceeding with the <A HREF="../../../../com/google/common/collect/BiMap.html#put(K, V)"><CODE>BiMap.put(K, V)</CODE></A>
- operation.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;V,K&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumBiMap.html#inverse()">inverse</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the inverse view of this bimap, which maps each of this bimap's
- values to its associated key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;K&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumBiMap.html#keySet()">keySet</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;<A HREF="../../../../com/google/common/collect/EnumBiMap.html" title="type parameter in EnumBiMap">K</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumBiMap.html#keyType()">keyType</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the associated key type.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;V</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumBiMap.html#put(K, V)">put</A></B>(K&nbsp;key,
-    V&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumBiMap.html#putAll(java.util.Map)">putAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;map)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;V</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumBiMap.html#remove(java.lang.Object)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;V&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumBiMap.html#values()">values</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;<A HREF="../../../../com/google/common/collect/EnumBiMap.html" title="type parameter in EnumBiMap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumBiMap.html#valueType()">valueType</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the associated value type.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingMap"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#containsKey(java.lang.Object)">containsKey</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#equals(java.lang.Object)">equals</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#get(java.lang.Object)">get</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#hashCode()">hashCode</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#size()">size</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingObject"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#toString()">toString</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.util.Map"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsKey(java.lang.Object)" title="class or interface in java.util">containsKey</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#get(java.lang.Object)" title="class or interface in java.util">get</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#size()" title="class or interface in java.util">size</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="create(java.lang.Class, java.lang.Class)"><!-- --></A><H3>
-create</H3>
-<PRE>
-public static &lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;K&gt;,V extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;V&gt;&gt; <A HREF="../../../../com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect">EnumBiMap</A>&lt;K,V&gt; <B>create</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;K&gt;&nbsp;keyType,
-                                                                          <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;V&gt;&nbsp;valueType)</PRE>
-<DL>
-<DD>Returns a new, empty <code>EnumBiMap</code> using the specified key and value
- types.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>keyType</CODE> - the key type<DD><CODE>valueType</CODE> - the value type</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="create(java.util.Map)"><!-- --></A><H3>
-create</H3>
-<PRE>
-public static &lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;K&gt;,V extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;V&gt;&gt; <A HREF="../../../../com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect">EnumBiMap</A>&lt;K,V&gt; <B>create</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;&nbsp;map)</PRE>
-<DL>
-<DD>Returns a new bimap with the same mappings as the specified map. If the
- specified map is an <code>EnumBiMap</code>, the new bimap has the same types as
- the provided map. Otherwise, the specified map must contain at least one
- mapping, in order to determine the key and value types.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>map</CODE> - the map whose mappings are to be placed in this map
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if map is not an <code>EnumBiMap</code>
-     instance and contains no mappings</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="keyType()"><!-- --></A><H3>
-keyType</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;<A HREF="../../../../com/google/common/collect/EnumBiMap.html" title="type parameter in EnumBiMap">K</A>&gt; <B>keyType</B>()</PRE>
-<DL>
-<DD>Returns the associated key type.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="valueType()"><!-- --></A><H3>
-valueType</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;<A HREF="../../../../com/google/common/collect/EnumBiMap.html" title="type parameter in EnumBiMap">V</A>&gt; <B>valueType</B>()</PRE>
-<DL>
-<DD>Returns the associated value type.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="delegate()"><!-- --></A><H3>
-delegate</H3>
-<PRE>
-protected <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt; <B>delegate</B>()</PRE>
-<DL>
-<DD><B>Description copied from class: <CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#delegate()">ForwardingObject</A></CODE></B></DD>
-<DD>Returns the backing delegate instance that methods are forwarded to.
- Abstract subclasses generally override this method with an abstract method
- that has a more specific return type, such as <A HREF="../../../../com/google/common/collect/ForwardingSet.html#delegate()"><CODE>ForwardingSet.delegate()</CODE></A>. Concrete subclasses override this method to supply
- the instance being decorated.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#delegate()">delegate</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="containsValue(java.lang.Object)"><!-- --></A><H3>
-containsValue</H3>
-<PRE>
-public boolean <B>containsValue</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsValue(java.lang.Object)" title="class or interface in java.util">containsValue</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#containsValue(java.lang.Object)">containsValue</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="put(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="put(K, V)"><!-- --></A><H3>
-put</H3>
-<PRE>
-public V <B>put</B>(K&nbsp;key,
-             V&nbsp;value)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/BiMap.html#put(K, V)">BiMap</A></CODE></B></DD>
-<DD>
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/BiMap.html#put(K, V)">put</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#put(K, V)" title="class or interface in java.util">put</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#put(K, V)">put</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="forcePut(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="forcePut(K, V)"><!-- --></A><H3>
-forcePut</H3>
-<PRE>
-public V <B>forcePut</B>(K&nbsp;key,
-                  V&nbsp;value)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/BiMap.html#forcePut(K, V)">BiMap</A></CODE></B></DD>
-<DD>An alternate form of <code>put</code> that silently removes any existing entry
- with the value <code>value</code> before proceeding with the <A HREF="../../../../com/google/common/collect/BiMap.html#put(K, V)"><CODE>BiMap.put(K, V)</CODE></A>
- operation. If the bimap previously contained the provided key-value
- mapping, this method has no effect.
-
- <p>Note that a successful call to this method could cause the size of the
- bimap to increase by one, stay the same, or even decrease by one.
-
- <p><b>Warning</b>: If an existing entry with this value is removed, the key
- for that entry is discarded and not returned.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/BiMap.html#forcePut(K, V)">forcePut</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - the key with which the specified value is to be associated<DD><CODE>value</CODE> - the value to be associated with the specified key
-<DT><B>Returns:</B><DD>the value which was previously associated with the key, which may
-     be <code>null</code>, or <code>null</code> if there was no previous entry</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="remove(java.lang.Object)"><!-- --></A><H3>
-remove</H3>
-<PRE>
-public V <B>remove</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#remove(java.lang.Object)">remove</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="putAll(java.util.Map)"><!-- --></A><H3>
-putAll</H3>
-<PRE>
-public void <B>putAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;map)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/BiMap.html#putAll(java.util.Map)">BiMap</A></CODE></B></DD>
-<DD>
-
- <p><b>Warning:</b> the results of calling this method may vary depending on
- the iteration order of <code>map</code>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/BiMap.html#putAll(java.util.Map)">putAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#putAll(java.util.Map)" title="class or interface in java.util">putAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#putAll(java.util.Map)">putAll</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="clear()"><!-- --></A><H3>
-clear</H3>
-<PRE>
-public void <B>clear</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#clear()" title="class or interface in java.util">clear</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#clear()">clear</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="inverse()"><!-- --></A><H3>
-inverse</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;V,K&gt; <B>inverse</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/BiMap.html#inverse()">BiMap</A></CODE></B></DD>
-<DD>Returns the inverse view of this bimap, which maps each of this bimap's
- values to its associated key. The two bimaps are backed by the same data;
- any changes to one will appear in the other.
-
- <p><b>Note:</b>There is no guaranteed correspondence between the iteration
- order of a bimap and that of its inverse.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/BiMap.html#inverse()">inverse</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>the inverse view of this bimap</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="keySet()"><!-- --></A><H3>
-keySet</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;K&gt; <B>keySet</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#keySet()" title="class or interface in java.util">keySet</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#keySet()">keySet</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="values()"><!-- --></A><H3>
-values</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;V&gt; <B>values</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/BiMap.html#values()">BiMap</A></CODE></B></DD>
-<DD>
-
- <p>Because a bimap has unique values, this method returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A>,
- instead of the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A> specified in the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A>
- interface.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/BiMap.html#values()">values</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#values()" title="class or interface in java.util">values</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#values()">values</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="entrySet()"><!-- --></A><H3>
-entrySet</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;K,V&gt;&gt; <B>entrySet</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#entrySet()" title="class or interface in java.util">entrySet</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#entrySet()">entrySet</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/EnumBiMap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/EnumBiMap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="EnumBiMap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/EnumHashBiMap.html b/javadoc/com/google/common/collect/EnumHashBiMap.html
deleted file mode 100644
index 96fd2f5..0000000
--- a/javadoc/com/google/common/collect/EnumHashBiMap.html
+++ /dev/null
@@ -1,647 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:57 PST 2010 -->
-<TITLE>
-EnumHashBiMap (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="EnumHashBiMap (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/EnumHashBiMap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/EnumMultiset.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/EnumHashBiMap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="EnumHashBiMap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class EnumHashBiMap&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;K&gt;,V&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingObject</A>
-      <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingMap</A>&lt;K,V&gt;
-          <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.EnumHashBiMap&lt;K,V&gt;</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public final class <B>EnumHashBiMap&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;K&gt;,V&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</DL>
-</PRE>
-
-<P>
-A <code>BiMap</code> backed by an <code>EnumMap</code> instance for keys-to-values, and
- a <code>HashMap</code> instance for values-to-keys. Null keys are not permitted,
- but null values are. An <code>EnumHashBiMap</code> and its inverse are both
- serializable.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Mike Bostock</DD>
-<DT><B>See Also:</B><DD><A HREF="../../../../serialized-form.html#com.google.common.collect.EnumHashBiMap">Serialized Form</A></DL>
-<HR>
-
-<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-<A NAME="nested_class_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Nested Class Summary</B></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;<A NAME="nested_classes_inherited_from_class_java.util.Map"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Nested classes/interfaces inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">V</A>&gt;</CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumHashBiMap.html#clear()">clear</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumHashBiMap.html#containsValue(java.lang.Object)">containsValue</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;K&gt;,V&gt; 
-<BR>
-<A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect">EnumHashBiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumHashBiMap.html#create(java.lang.Class)">create</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;K&gt;&nbsp;keyType)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new, empty <code>EnumHashBiMap</code> using the specified key type.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;K&gt;,V&gt; 
-<BR>
-<A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect">EnumHashBiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumHashBiMap.html#create(java.util.Map)">create</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,? extends V&gt;&nbsp;map)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a new bimap with the same mappings as the specified map.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected &nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumHashBiMap.html#delegate()">delegate</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the backing delegate instance that methods are forwarded to.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;K,V&gt;&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumHashBiMap.html#entrySet()">entrySet</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="type parameter in EnumHashBiMap">V</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumHashBiMap.html#forcePut(K, V)">forcePut</A></B>(<A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="type parameter in EnumHashBiMap">K</A>&nbsp;key,
-         <A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="type parameter in EnumHashBiMap">V</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An alternate form of <code>put</code> that silently removes any existing entry
- with the value <code>value</code> before proceeding with the <A HREF="../../../../com/google/common/collect/BiMap.html#put(K, V)"><CODE>BiMap.put(K, V)</CODE></A>
- operation.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;V,K&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumHashBiMap.html#inverse()">inverse</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the inverse view of this bimap, which maps each of this bimap's
- values to its associated key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;K&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumHashBiMap.html#keySet()">keySet</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;<A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="type parameter in EnumHashBiMap">K</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumHashBiMap.html#keyType()">keyType</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the associated key type.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="type parameter in EnumHashBiMap">V</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumHashBiMap.html#put(K, V)">put</A></B>(<A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="type parameter in EnumHashBiMap">K</A>&nbsp;key,
-    <A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="type parameter in EnumHashBiMap">V</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumHashBiMap.html#putAll(java.util.Map)">putAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;map)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;V</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumHashBiMap.html#remove(java.lang.Object)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;V&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumHashBiMap.html#values()">values</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingMap"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#containsKey(java.lang.Object)">containsKey</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#equals(java.lang.Object)">equals</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#get(java.lang.Object)">get</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#hashCode()">hashCode</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#size()">size</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingObject"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#toString()">toString</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.util.Map"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsKey(java.lang.Object)" title="class or interface in java.util">containsKey</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#get(java.lang.Object)" title="class or interface in java.util">get</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#size()" title="class or interface in java.util">size</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="create(java.lang.Class)"><!-- --></A><H3>
-create</H3>
-<PRE>
-public static &lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;K&gt;,V&gt; <A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect">EnumHashBiMap</A>&lt;K,V&gt; <B>create</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;K&gt;&nbsp;keyType)</PRE>
-<DL>
-<DD>Returns a new, empty <code>EnumHashBiMap</code> using the specified key type.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>keyType</CODE> - the key type</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="create(java.util.Map)"><!-- --></A><H3>
-create</H3>
-<PRE>
-public static &lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;K&gt;,V&gt; <A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect">EnumHashBiMap</A>&lt;K,V&gt; <B>create</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,? extends V&gt;&nbsp;map)</PRE>
-<DL>
-<DD>Constructs a new bimap with the same mappings as the specified map. If the
- specified map is an <code>EnumHashBiMap</code> or an <A HREF="../../../../com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect"><CODE>EnumBiMap</CODE></A>, the new
- bimap has the same key type as the input bimap. Otherwise, the specified
- map must contain at least one mapping, in order to determine the key type.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>map</CODE> - the map whose mappings are to be placed in this map
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if map is not an <code>EnumBiMap</code> or an
-     <code>EnumHashBiMap</code> instance and contains no mappings</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="put(java.lang.Enum,java.lang.Object)"><!-- --></A><A NAME="put(K, V)"><!-- --></A><H3>
-put</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="type parameter in EnumHashBiMap">V</A> <B>put</B>(<A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="type parameter in EnumHashBiMap">K</A>&nbsp;key,
-             <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-             <A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="type parameter in EnumHashBiMap">V</A>&nbsp;value)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/BiMap.html#put(K, V)">BiMap</A></CODE></B></DD>
-<DD>
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/BiMap.html#put(K, V)">put</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;<A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="type parameter in EnumHashBiMap">K</A> extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;<A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="type parameter in EnumHashBiMap">K</A>&gt;,<A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="type parameter in EnumHashBiMap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#put(K, V)" title="class or interface in java.util">put</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="type parameter in EnumHashBiMap">K</A> extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;<A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="type parameter in EnumHashBiMap">K</A>&gt;,<A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="type parameter in EnumHashBiMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="forcePut(java.lang.Enum,java.lang.Object)"><!-- --></A><A NAME="forcePut(K, V)"><!-- --></A><H3>
-forcePut</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="type parameter in EnumHashBiMap">V</A> <B>forcePut</B>(<A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="type parameter in EnumHashBiMap">K</A>&nbsp;key,
-                  <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                  <A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="type parameter in EnumHashBiMap">V</A>&nbsp;value)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/BiMap.html#forcePut(K, V)">BiMap</A></CODE></B></DD>
-<DD>An alternate form of <code>put</code> that silently removes any existing entry
- with the value <code>value</code> before proceeding with the <A HREF="../../../../com/google/common/collect/BiMap.html#put(K, V)"><CODE>BiMap.put(K, V)</CODE></A>
- operation. If the bimap previously contained the provided key-value
- mapping, this method has no effect.
-
- <p>Note that a successful call to this method could cause the size of the
- bimap to increase by one, stay the same, or even decrease by one.
-
- <p><b>Warning</b>: If an existing entry with this value is removed, the key
- for that entry is discarded and not returned.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/BiMap.html#forcePut(K, V)">forcePut</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;<A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="type parameter in EnumHashBiMap">K</A> extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;<A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="type parameter in EnumHashBiMap">K</A>&gt;,<A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="type parameter in EnumHashBiMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - the key with which the specified value is to be associated<DD><CODE>value</CODE> - the value to be associated with the specified key
-<DT><B>Returns:</B><DD>the value which was previously associated with the key, which may
-     be <code>null</code>, or <code>null</code> if there was no previous entry</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="keyType()"><!-- --></A><H3>
-keyType</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;<A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="type parameter in EnumHashBiMap">K</A>&gt; <B>keyType</B>()</PRE>
-<DL>
-<DD>Returns the associated key type.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="delegate()"><!-- --></A><H3>
-delegate</H3>
-<PRE>
-protected <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt; <B>delegate</B>()</PRE>
-<DL>
-<DD><B>Description copied from class: <CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#delegate()">ForwardingObject</A></CODE></B></DD>
-<DD>Returns the backing delegate instance that methods are forwarded to.
- Abstract subclasses generally override this method with an abstract method
- that has a more specific return type, such as <A HREF="../../../../com/google/common/collect/ForwardingSet.html#delegate()"><CODE>ForwardingSet.delegate()</CODE></A>. Concrete subclasses override this method to supply
- the instance being decorated.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#delegate()">delegate</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="containsValue(java.lang.Object)"><!-- --></A><H3>
-containsValue</H3>
-<PRE>
-public boolean <B>containsValue</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsValue(java.lang.Object)" title="class or interface in java.util">containsValue</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#containsValue(java.lang.Object)">containsValue</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="remove(java.lang.Object)"><!-- --></A><H3>
-remove</H3>
-<PRE>
-public V <B>remove</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#remove(java.lang.Object)">remove</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="putAll(java.util.Map)"><!-- --></A><H3>
-putAll</H3>
-<PRE>
-public void <B>putAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;map)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/BiMap.html#putAll(java.util.Map)">BiMap</A></CODE></B></DD>
-<DD>
-
- <p><b>Warning:</b> the results of calling this method may vary depending on
- the iteration order of <code>map</code>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/BiMap.html#putAll(java.util.Map)">putAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#putAll(java.util.Map)" title="class or interface in java.util">putAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#putAll(java.util.Map)">putAll</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="clear()"><!-- --></A><H3>
-clear</H3>
-<PRE>
-public void <B>clear</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#clear()" title="class or interface in java.util">clear</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#clear()">clear</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="inverse()"><!-- --></A><H3>
-inverse</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;V,K&gt; <B>inverse</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/BiMap.html#inverse()">BiMap</A></CODE></B></DD>
-<DD>Returns the inverse view of this bimap, which maps each of this bimap's
- values to its associated key. The two bimaps are backed by the same data;
- any changes to one will appear in the other.
-
- <p><b>Note:</b>There is no guaranteed correspondence between the iteration
- order of a bimap and that of its inverse.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/BiMap.html#inverse()">inverse</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>the inverse view of this bimap</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="keySet()"><!-- --></A><H3>
-keySet</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;K&gt; <B>keySet</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#keySet()" title="class or interface in java.util">keySet</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#keySet()">keySet</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="values()"><!-- --></A><H3>
-values</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;V&gt; <B>values</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/BiMap.html#values()">BiMap</A></CODE></B></DD>
-<DD>
-
- <p>Because a bimap has unique values, this method returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A>,
- instead of the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A> specified in the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A>
- interface.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/BiMap.html#values()">values</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#values()" title="class or interface in java.util">values</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#values()">values</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="entrySet()"><!-- --></A><H3>
-entrySet</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;K,V&gt;&gt; <B>entrySet</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#entrySet()" title="class or interface in java.util">entrySet</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#entrySet()">entrySet</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/EnumHashBiMap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/EnumMultiset.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/EnumHashBiMap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="EnumHashBiMap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/EnumMultiset.html b/javadoc/com/google/common/collect/EnumMultiset.html
deleted file mode 100644
index a187bbc..0000000
--- a/javadoc/com/google/common/collect/EnumMultiset.html
+++ /dev/null
@@ -1,977 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:57 PST 2010 -->
-<TITLE>
-EnumMultiset (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="EnumMultiset (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/EnumMultiset.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/EnumMultiset.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="EnumMultiset.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class EnumMultiset&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;E&gt;&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">java.util.AbstractCollection</A>&lt;E&gt;
-      <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.EnumMultiset&lt;E&gt;</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public final class <B>EnumMultiset&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;E&gt;&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</DL>
-</PRE>
-
-<P>
-Multiset implementation backed by an <A HREF="http://java.sun.com/javase/6/docs/api/java/util/EnumMap.html?is-external=true" title="class or interface in java.util"><CODE>EnumMap</CODE></A>.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Jared Levy</DD>
-<DT><B>See Also:</B><DD><A HREF="../../../../serialized-form.html#com.google.common.collect.EnumMultiset">Serialized Form</A></DL>
-<HR>
-
-<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-<A NAME="nested_class_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Nested Class Summary</B></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;<A NAME="nested_classes_inherited_from_class_com.google.common.collect.Multiset"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Nested classes/interfaces inherited from interface com.google.common.collect.<A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="type parameter in Multiset.Entry">E</A>&gt;</CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumMultiset.html#add(E)">add</A></B>(E&nbsp;element)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds a single occurrence of the specified element to this multiset.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumMultiset.html#add(E, int)">add</A></B>(E&nbsp;element,
-    int&nbsp;occurrences)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds a number of occurrences of an element to this multiset.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumMultiset.html#addAll(java.util.Collection)">addAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;? extends E&gt;&nbsp;elementsToAdd)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumMultiset.html#clear()">clear</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumMultiset.html#contains(java.lang.Object)">contains</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Determines whether this multiset contains the specified element.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumMultiset.html#containsAll(java.util.Collection)">containsAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if this multiset contains at least one occurrence of
- each element in the specified collection.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumMultiset.html#count(java.lang.Object)">count</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of occurrences of an element in this multiset (the
- <i>count</i> of the element).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;E&gt;&gt; 
-<BR>
-<A HREF="../../../../com/google/common/collect/EnumMultiset.html" title="class in com.google.common.collect">EnumMultiset</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumMultiset.html#create(java.lang.Class)">create</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;E&gt;&nbsp;type)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an empty <code>EnumMultiset</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;E&gt;&gt; 
-<BR>
-<A HREF="../../../../com/google/common/collect/EnumMultiset.html" title="class in com.google.common.collect">EnumMultiset</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumMultiset.html#create(java.lang.Iterable)">create</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>EnumMultiset</code> containing the specified elements.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumMultiset.html#elementSet()">elementSet</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the set of distinct elements contained in this multiset.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;E&gt;&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumMultiset.html#entrySet()">entrySet</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of the contents of this multiset, grouped into <code>Multiset.Entry</code> instances, each providing an element of the multiset and
- the count of that element.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumMultiset.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares the specified object with this multiset for equality.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumMultiset.html#hashCode()">hashCode</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the hash code for this multiset.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumMultiset.html#isEmpty()">isEmpty</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;E&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumMultiset.html#iterator()">iterator</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumMultiset.html#remove(java.lang.Object)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes a <i>single</i> occurrence of the specified element from this
- multiset, if present.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumMultiset.html#remove(java.lang.Object, int)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element,
-       int&nbsp;occurrences)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes a number of occurrences of the specified element from this
- multiset.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumMultiset.html#removeAll(java.util.Collection)">removeAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToRemove)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumMultiset.html#retainAll(java.util.Collection)">retainAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToRetain)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumMultiset.html#setCount(E, int)">setCount</A></B>(E&nbsp;element,
-         int&nbsp;count)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds or removes the necessary occurrences of an element such that the
- element attains the desired count.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumMultiset.html#setCount(E, int, int)">setCount</A></B>(E&nbsp;element,
-         int&nbsp;oldCount,
-         int&nbsp;newCount)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Conditionally sets the count of an element to a new value, as described in
- <A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int)"><CODE>Multiset.setCount(Object, int)</CODE></A>, provided that the element has the expected
- current count.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumMultiset.html#size()">size</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/EnumMultiset.html#toString()">toString</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.util.AbstractCollection"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#toArray()" title="class or interface in java.util">toArray</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#toArray(T[])" title="class or interface in java.util">toArray</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.util.Collection"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#toArray()" title="class or interface in java.util">toArray</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#toArray(T[])" title="class or interface in java.util">toArray</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="create(java.lang.Class)"><!-- --></A><H3>
-create</H3>
-<PRE>
-public static &lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;E&gt;&gt; <A HREF="../../../../com/google/common/collect/EnumMultiset.html" title="class in com.google.common.collect">EnumMultiset</A>&lt;E&gt; <B>create</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;E&gt;&nbsp;type)</PRE>
-<DL>
-<DD>Creates an empty <code>EnumMultiset</code>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="create(java.lang.Iterable)"><!-- --></A><H3>
-create</H3>
-<PRE>
-public static &lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;E&gt;&gt; <A HREF="../../../../com/google/common/collect/EnumMultiset.html" title="class in com.google.common.collect">EnumMultiset</A>&lt;E&gt; <B>create</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;&nbsp;elements)</PRE>
-<DL>
-<DD>Creates a new <code>EnumMultiset</code> containing the specified elements.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>elements</CODE> - the elements that the multiset should contain
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>elements</code> is empty</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="entrySet()"><!-- --></A><H3>
-entrySet</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;E&gt;&gt; <B>entrySet</B>()</PRE>
-<DL>
-<DD>Returns a view of the contents of this multiset, grouped into <code>Multiset.Entry</code> instances, each providing an element of the multiset and
- the count of that element. This set contains exactly one entry for each
- distinct element in the multiset (thus it always has the same size as the
- <A HREF="../../../../com/google/common/collect/Multiset.html#elementSet()"><CODE>Multiset.elementSet()</CODE></A>). The order of the elements in the element set is
- unspecified.
-
- <p>The entry set is backed by the same data as the multiset, so any change
- to either is immediately reflected in the other. However, multiset changes
- may or may not be reflected in any <code>Entry</code> instances already
- retrieved from the entry set (this is implementation-dependent).
- Furthermore, implementations are not required to support modifications to
- the entry set at all, and the <code>Entry</code> instances themselves don't
- even have methods for modification. See the specific implementation class
- for more details on how its entry set handles modifications.
-
- <p>Invoking <A HREF="../../../../com/google/common/collect/Multiset.Entry.html#getCount()"><CODE>Multiset.Entry.getCount()</CODE></A> on an entry in the returned
- set always returns the current count of that element in the multiset, as
- opposed to the count at the time the entry was retrieved.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#entrySet()">entrySet</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a set of entries representing the data of this multiset</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="size()"><!-- --></A><H3>
-size</H3>
-<PRE>
-public int <B>size</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#size()" title="class or interface in java.util">size</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="iterator()"><!-- --></A><H3>
-iterator</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;E&gt; <B>iterator</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#iterator()">Multiset</A></CODE></B></DD>
-<DD>
-
- <p>Elements that occur multiple times in the multiset will appear
- multiple times in this iterator, though not necessarily sequentially.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#iterator()">iterator</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true#iterator()" title="class or interface in java.lang">iterator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#iterator()" title="class or interface in java.util">iterator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="count(java.lang.Object)"><!-- --></A><H3>
-count</H3>
-<PRE>
-public int <B>count</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                 <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#count(java.lang.Object)">Multiset</A></CODE></B></DD>
-<DD>Returns the number of occurrences of an element in this multiset (the
- <i>count</i> of the element). Note that for an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>-based
- multiset, this gives the same result as <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#frequency(java.util.Collection, java.lang.Object)" title="class or interface in java.util"><CODE>Collections.frequency(java.util.Collection<?>, java.lang.Object)</CODE></A>
- (which would presumably perform more poorly).
-
- <p><b>Note:</b> the utility method <A HREF="../../../../com/google/common/collect/Iterables.html#frequency(java.lang.Iterable, java.lang.Object)"><CODE>Iterables.frequency(java.lang.Iterable<?>, java.lang.Object)</CODE></A> generalizes
- this operation; it correctly delegates to this method when dealing with a
- multiset, but it can also accept any other iterable type.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#count(java.lang.Object)">count</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to count occurrences of
-<DT><B>Returns:</B><DD>the number of occurrences of the element in this multiset; possibly
-     zero but never negative</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="add(java.lang.Object,int)"><!-- --></A><A NAME="add(E, int)"><!-- --></A><H3>
-add</H3>
-<PRE>
-public int <B>add</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-               E&nbsp;element,
-               int&nbsp;occurrences)</PRE>
-<DL>
-<DD>Adds a number of occurrences of an element to this multiset. Note that if
- <code>occurrences == 1</code>, this method has the identical effect to <A HREF="../../../../com/google/common/collect/Multiset.html#add(E)"><CODE>Multiset.add(Object)</CODE></A>. This method is functionally equivalent (except in the case
- of overflow) to the call <code>addAll(Collections.nCopies(element,
- occurrences))</code>, which would presumably perform much more poorly.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#add(E, int)">add</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to add occurrences of; may be <code>null</code> only
-     if explicitly allowed by the implementation<DD><CODE>occurrences</CODE> - the number of occurrences of the element to add. May be
-     zero, in which case no change will be made.
-<DT><B>Returns:</B><DD>the count of the element before the operation; possibly zero
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if the call would result in more than
-     <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true#MAX_VALUE" title="class or interface in java.lang"><CODE>Integer.MAX_VALUE</CODE></A> occurrences of <code>element</code> in this
-     multiset.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="remove(java.lang.Object, int)"><!-- --></A><H3>
-remove</H3>
-<PRE>
-public int <B>remove</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                  <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element,
-                  int&nbsp;occurrences)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#remove(java.lang.Object, int)">Multiset</A></CODE></B></DD>
-<DD>Removes a number of occurrences of the specified element from this
- multiset. If the multiset contains fewer than this number of occurrences to
- begin with, all occurrences will be removed.  Note that if
- <code>occurrences == 1</code>, this is functionally equivalent to the call
- <code>remove(element)</code>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#remove(java.lang.Object, int)">remove</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to conditionally remove occurrences of<DD><CODE>occurrences</CODE> - the number of occurrences of the element to remove. May
-     be zero, in which case no change will be made.
-<DT><B>Returns:</B><DD>the count of the element before the operation; possibly zero</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="setCount(java.lang.Object,int)"><!-- --></A><A NAME="setCount(E, int)"><!-- --></A><H3>
-setCount</H3>
-<PRE>
-public int <B>setCount</B>(E&nbsp;element,
-                    int&nbsp;count)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int)">Multiset</A></CODE></B></DD>
-<DD>Adds or removes the necessary occurrences of an element such that the
- element attains the desired count.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int)">setCount</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to add or remove occurrences of; may be null
-     only if explicitly allowed by the implementation<DD><CODE>count</CODE> - the desired count of the element in this multiset
-<DT><B>Returns:</B><DD>the count of the element before the operation; possibly zero</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="isEmpty()"><!-- --></A><H3>
-isEmpty</H3>
-<PRE>
-public boolean <B>isEmpty</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="contains(java.lang.Object)"><!-- --></A><H3>
-contains</H3>
-<PRE>
-public boolean <B>contains</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                        <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#contains(java.lang.Object)">Multiset</A></CODE></B></DD>
-<DD>Determines whether this multiset contains the specified element.
-
- <p>This method refines <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util"><CODE>Collection.contains(java.lang.Object)</CODE></A> to further specify that
- it <b>may not</b> throw an exception in response to <code>element</code> being
- null or of the wrong type.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#contains(java.lang.Object)">contains</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util">contains</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util">contains</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to check for
-<DT><B>Returns:</B><DD><code>true</code> if this multiset contains at least one occurrence of
-     the element</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="add(java.lang.Object)"><!-- --></A><A NAME="add(E)"><!-- --></A><H3>
-add</H3>
-<PRE>
-public boolean <B>add</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                   E&nbsp;element)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#add(E)">Multiset</A></CODE></B></DD>
-<DD>Adds a single occurrence of the specified element to this multiset.
-
- <p>This method refines <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#add(E)" title="class or interface in java.util"><CODE>Collection.add(E)</CODE></A>, which only <i>ensures</i>
- the presence of the element, to further specify that a successful call must
- always increment the count of the element, and the overall size of the
- collection, by one.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#add(E)">add</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#add(E)" title="class or interface in java.util">add</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#add(E)" title="class or interface in java.util">add</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to add one occurrence of; may be null only if
-     explicitly allowed by the implementation
-<DT><B>Returns:</B><DD><code>true</code> always, since this call is required to modify the
-     multiset, unlike other <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A> types</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="remove(java.lang.Object)"><!-- --></A><H3>
-remove</H3>
-<PRE>
-public boolean <B>remove</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#remove(java.lang.Object)">Multiset</A></CODE></B></DD>
-<DD>Removes a <i>single</i> occurrence of the specified element from this
- multiset, if present.
-
- <p>This method refines <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util"><CODE>Collection.remove(java.lang.Object)</CODE></A> to further specify that it
- <b>may not</b> throw an exception in response to <code>element</code> being null
- or of the wrong type.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#remove(java.lang.Object)">remove</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to remove one occurrence of
-<DT><B>Returns:</B><DD><code>true</code> if an occurrence was found and removed</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="setCount(java.lang.Object,int,int)"><!-- --></A><A NAME="setCount(E, int, int)"><!-- --></A><H3>
-setCount</H3>
-<PRE>
-public boolean <B>setCount</B>(E&nbsp;element,
-                        int&nbsp;oldCount,
-                        int&nbsp;newCount)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int, int)">Multiset</A></CODE></B></DD>
-<DD>Conditionally sets the count of an element to a new value, as described in
- <A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int)"><CODE>Multiset.setCount(Object, int)</CODE></A>, provided that the element has the expected
- current count. If the current count is not <code>oldCount</code>, no change is
- made.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int, int)">setCount</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to conditionally set the count of; may be null
-     only if explicitly allowed by the implementation<DD><CODE>oldCount</CODE> - the expected present count of the element in this multiset<DD><CODE>newCount</CODE> - the desired count of the element in this multiset
-<DT><B>Returns:</B><DD><code>true</code> if the condition for modification was met. This
-     implies that the multiset was indeed modified, unless
-     <code>oldCount == newCount</code>.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="containsAll(java.util.Collection)"><!-- --></A><H3>
-containsAll</H3>
-<PRE>
-public boolean <B>containsAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elements)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#containsAll(java.util.Collection)">Multiset</A></CODE></B></DD>
-<DD>Returns <code>true</code> if this multiset contains at least one occurrence of
- each element in the specified collection.
-
- <p>This method refines <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util"><CODE>Collection.containsAll(java.util.Collection<?>)</CODE></A> to further specify
- that it <b>may not</b> throw an exception in response to any of <code>elements</code> being null or of the wrong type.
-
- <p><b>Note:</b> this method does not take into account the occurrence
- count of an element in the two collections; it may still return <code>true</code> even if <code>elements</code> contains several occurrences of an element
- and this multiset contains only one. This is no different than any other
- collection type like <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util"><CODE>List</CODE></A>, but it may be unexpected to the user of
- a multiset.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#containsAll(java.util.Collection)">containsAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util">containsAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util">containsAll</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>elements</CODE> - the collection of elements to be checked for containment in
-     this multiset
-<DT><B>Returns:</B><DD><code>true</code> if this multiset contains at least one occurrence of
-     each element contained in <code>elements</code></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="addAll(java.util.Collection)"><!-- --></A><H3>
-addAll</H3>
-<PRE>
-public boolean <B>addAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;? extends E&gt;&nbsp;elementsToAdd)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#addAll(java.util.Collection)" title="class or interface in java.util">addAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#addAll(java.util.Collection)" title="class or interface in java.util">addAll</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="removeAll(java.util.Collection)"><!-- --></A><H3>
-removeAll</H3>
-<PRE>
-public boolean <B>removeAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToRemove)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#removeAll(java.util.Collection)">Multiset</A></CODE></B></DD>
-<DD>
-
- <p>This method refines <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#removeAll(java.util.Collection)" title="class or interface in java.util"><CODE>Collection.removeAll(java.util.Collection<?>)</CODE></A> to further specify that
- it <b>may not</b> throw an exception in response to any of <code>elements</code>
- being null or of the wrong type.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#removeAll(java.util.Collection)">removeAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#removeAll(java.util.Collection)" title="class or interface in java.util">removeAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#removeAll(java.util.Collection)" title="class or interface in java.util">removeAll</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="retainAll(java.util.Collection)"><!-- --></A><H3>
-retainAll</H3>
-<PRE>
-public boolean <B>retainAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToRetain)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#retainAll(java.util.Collection)">Multiset</A></CODE></B></DD>
-<DD>
-
- <p>This method refines <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util"><CODE>Collection.retainAll(java.util.Collection<?>)</CODE></A> to further specify that
- it <b>may not</b> throw an exception in response to any of <code>elements</code>
- being null or of the wrong type.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#retainAll(java.util.Collection)">retainAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util">retainAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util">retainAll</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="clear()"><!-- --></A><H3>
-clear</H3>
-<PRE>
-public void <B>clear</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#clear()" title="class or interface in java.util">clear</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#clear()" title="class or interface in java.util">clear</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="elementSet()"><!-- --></A><H3>
-elementSet</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt; <B>elementSet</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#elementSet()">Multiset</A></CODE></B></DD>
-<DD>Returns the set of distinct elements contained in this multiset. The
- element set is backed by the same data as the multiset, so any change to
- either is immediately reflected in the other. The order of the elements in
- the element set is unspecified.
-
- <p>If the element set supports any removal operations, these necessarily
- cause <b>all</b> occurrences of the removed element(s) to be removed from
- the multiset. Implementations are not expected to support the add
- operations, although this is possible.
-
- <p>A common use for the element set is to find the number of distinct
- elements in the multiset: <code>elementSet().size()</code>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#elementSet()">elementSet</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a view of the set of distinct elements in this multiset</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
-equals</H3>
-<PRE>
-public boolean <B>equals</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                      <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
-<DL>
-<DD>Compares the specified object with this multiset for equality. Returns
- <code>true</code> if the given object is also a multiset and contains equal
- elements with equal counts, regardless of order.
-
- <p>This implementation returns <code>true</code> if <code>other</code> is a multiset
- of the same size and if, for each element, the two multisets have the same
- count.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#equals(java.lang.Object)">equals</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="hashCode()"><!-- --></A><H3>
-hashCode</H3>
-<PRE>
-public int <B>hashCode</B>()</PRE>
-<DL>
-<DD>Returns the hash code for this multiset. This is defined as the sum of
-
- <pre>  (element == null ? 0 : element.hashCode()) ^ count(element)</pre>
-
- over all distinct elements in the multiset. It follows that a multiset and
- its entry set always have the same hash code.
-
- <p>This implementation returns the hash code of <A HREF="../../../../com/google/common/collect/Multiset.html#entrySet()"><CODE>Multiset.entrySet()</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#hashCode()">hashCode</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toString()"><!-- --></A><H3>
-toString</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
-<DL>
-<DD>
-
- <p>It is recommended, though not mandatory, that this method return the
- result of invoking <A HREF="../../../../com/google/common/collect/Multiset.html#toString()"><CODE>Multiset.toString()</CODE></A> on the <A HREF="../../../../com/google/common/collect/Multiset.html#entrySet()"><CODE>Multiset.entrySet()</CODE></A>, yielding a
- result such as
- <pre>
-     [a x 3, c, d x 2, e]
- </pre>
-
- <p>This implementation returns the result of invoking <code>toString</code> on
- <A HREF="../../../../com/google/common/collect/Multiset.html#entrySet()"><CODE>Multiset.entrySet()</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#toString()">toString</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#toString()" title="class or interface in java.util">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/EnumMultiset.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/EnumMultiset.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="EnumMultiset.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/ForwardingCollection.html b/javadoc/com/google/common/collect/ForwardingCollection.html
deleted file mode 100644
index b2ee4a6..0000000
--- a/javadoc/com/google/common/collect/ForwardingCollection.html
+++ /dev/null
@@ -1,592 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:57 PST 2010 -->
-<TITLE>
-ForwardingCollection (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="ForwardingCollection (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ForwardingCollection.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/EnumMultiset.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ForwardingCollection.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingCollection.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class ForwardingCollection&lt;E&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingObject</A>
-      <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ForwardingCollection&lt;E&gt;</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</DD>
-</DL>
-<DL>
-<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../../com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect">ForwardingList</A>, <A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect">ForwardingMultiset</A>, <A HREF="../../../../com/google/common/collect/ForwardingQueue.html" title="class in com.google.common.collect">ForwardingQueue</A>, <A HREF="../../../../com/google/common/collect/ForwardingSet.html" title="class in com.google.common.collect">ForwardingSet</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public abstract class <B>ForwardingCollection&lt;E&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A><DT>implements <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</DL>
-</PRE>
-
-<P>
-A collection which forwards all its method calls to another collection.
- Subclasses should override one or more methods to modify the behavior of
- the backing collection as desired per the <a
- href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Kevin Bourrillion</DD>
-<DT><B>See Also:</B><DD><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect"><CODE>ForwardingObject</CODE></A></DL>
-<HR>
-
-<P>
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingCollection.html#ForwardingCollection()">ForwardingCollection</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingCollection.html#add(E)">add</A></B>(<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="type parameter in ForwardingCollection">E</A>&nbsp;element)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingCollection.html#addAll(java.util.Collection)">addAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="type parameter in ForwardingCollection">E</A>&gt;&nbsp;collection)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingCollection.html#clear()">clear</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingCollection.html#contains(java.lang.Object)">contains</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingCollection.html#containsAll(java.util.Collection)">containsAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;collection)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected abstract &nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="type parameter in ForwardingCollection">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingCollection.html#delegate()">delegate</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the backing delegate instance that methods are forwarded to.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingCollection.html#isEmpty()">isEmpty</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="type parameter in ForwardingCollection">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingCollection.html#iterator()">iterator</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingCollection.html#remove(java.lang.Object)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingCollection.html#removeAll(java.util.Collection)">removeAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;collection)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingCollection.html#retainAll(java.util.Collection)">retainAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;collection)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingCollection.html#size()">size</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>[]</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingCollection.html#toArray()">toArray</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; T[]</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingCollection.html#toArray(T[])">toArray</A></B>(T[]&nbsp;array)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingObject"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#toString()">toString</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.util.Collection"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="ForwardingCollection()"><!-- --></A><H3>
-ForwardingCollection</H3>
-<PRE>
-public <B>ForwardingCollection</B>()</PRE>
-<DL>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="delegate()"><!-- --></A><H3>
-delegate</H3>
-<PRE>
-protected abstract <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="type parameter in ForwardingCollection">E</A>&gt; <B>delegate</B>()</PRE>
-<DL>
-<DD><B>Description copied from class: <CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#delegate()">ForwardingObject</A></CODE></B></DD>
-<DD>Returns the backing delegate instance that methods are forwarded to.
- Abstract subclasses generally override this method with an abstract method
- that has a more specific return type, such as <A HREF="../../../../com/google/common/collect/ForwardingSet.html#delegate()"><CODE>ForwardingSet.delegate()</CODE></A>. Concrete subclasses override this method to supply
- the instance being decorated.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#delegate()">delegate</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="iterator()"><!-- --></A><H3>
-iterator</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="type parameter in ForwardingCollection">E</A>&gt; <B>iterator</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true#iterator()" title="class or interface in java.lang">iterator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="type parameter in ForwardingCollection">E</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#iterator()" title="class or interface in java.util">iterator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="type parameter in ForwardingCollection">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="size()"><!-- --></A><H3>
-size</H3>
-<PRE>
-public int <B>size</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#size()" title="class or interface in java.util">size</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="type parameter in ForwardingCollection">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="removeAll(java.util.Collection)"><!-- --></A><H3>
-removeAll</H3>
-<PRE>
-public boolean <B>removeAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;collection)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#removeAll(java.util.Collection)" title="class or interface in java.util">removeAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="type parameter in ForwardingCollection">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="isEmpty()"><!-- --></A><H3>
-isEmpty</H3>
-<PRE>
-public boolean <B>isEmpty</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="type parameter in ForwardingCollection">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="contains(java.lang.Object)"><!-- --></A><H3>
-contains</H3>
-<PRE>
-public boolean <B>contains</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util">contains</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="type parameter in ForwardingCollection">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toArray()"><!-- --></A><H3>
-toArray</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>[] <B>toArray</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#toArray()" title="class or interface in java.util">toArray</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="type parameter in ForwardingCollection">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toArray(java.lang.Object[])"><!-- --></A><A NAME="toArray(T[])"><!-- --></A><H3>
-toArray</H3>
-<PRE>
-public &lt;T&gt; T[] <B>toArray</B>(T[]&nbsp;array)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#toArray(T[])" title="class or interface in java.util">toArray</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="type parameter in ForwardingCollection">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="add(java.lang.Object)"><!-- --></A><A NAME="add(E)"><!-- --></A><H3>
-add</H3>
-<PRE>
-public boolean <B>add</B>(<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="type parameter in ForwardingCollection">E</A>&nbsp;element)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#add(E)" title="class or interface in java.util">add</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="type parameter in ForwardingCollection">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="remove(java.lang.Object)"><!-- --></A><H3>
-remove</H3>
-<PRE>
-public boolean <B>remove</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="type parameter in ForwardingCollection">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="containsAll(java.util.Collection)"><!-- --></A><H3>
-containsAll</H3>
-<PRE>
-public boolean <B>containsAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;collection)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util">containsAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="type parameter in ForwardingCollection">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="addAll(java.util.Collection)"><!-- --></A><H3>
-addAll</H3>
-<PRE>
-public boolean <B>addAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="type parameter in ForwardingCollection">E</A>&gt;&nbsp;collection)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#addAll(java.util.Collection)" title="class or interface in java.util">addAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="type parameter in ForwardingCollection">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="retainAll(java.util.Collection)"><!-- --></A><H3>
-retainAll</H3>
-<PRE>
-public boolean <B>retainAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;collection)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util">retainAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="type parameter in ForwardingCollection">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="clear()"><!-- --></A><H3>
-clear</H3>
-<PRE>
-public void <B>clear</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#clear()" title="class or interface in java.util">clear</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="type parameter in ForwardingCollection">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ForwardingCollection.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/EnumMultiset.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ForwardingCollection.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingCollection.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/ForwardingConcurrentMap.html b/javadoc/com/google/common/collect/ForwardingConcurrentMap.html
deleted file mode 100644
index 270a211..0000000
--- a/javadoc/com/google/common/collect/ForwardingConcurrentMap.html
+++ /dev/null
@@ -1,423 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:57 PST 2010 -->
-<TITLE>
-ForwardingConcurrentMap (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="ForwardingConcurrentMap (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ForwardingConcurrentMap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingIterator.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ForwardingConcurrentMap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingConcurrentMap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class ForwardingConcurrentMap&lt;K,V&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingObject</A>
-      <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingMap</A>&lt;K,V&gt;
-          <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ForwardingConcurrentMap&lt;K,V&gt;</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</A>&lt;K,V&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public abstract class <B>ForwardingConcurrentMap&lt;K,V&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;<DT>implements <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</A>&lt;K,V&gt;</DL>
-</PRE>
-
-<P>
-A concurrent map which forwards all its method calls to another concurrent
- map. Subclasses should override one or more methods to modify the behavior of
- the backing map as desired per the <a
- href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Charles Fry</DD>
-<DT><B>See Also:</B><DD><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect"><CODE>ForwardingObject</CODE></A></DL>
-<HR>
-
-<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-<A NAME="nested_class_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Nested Class Summary</B></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;<A NAME="nested_classes_inherited_from_class_java.util.Map"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Nested classes/interfaces inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">V</A>&gt;</CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html#ForwardingConcurrentMap()">ForwardingConcurrentMap</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected abstract &nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html#delegate()">delegate</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the backing delegate instance that methods are forwarded to.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">V</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html#putIfAbsent(K, V)">putIfAbsent</A></B>(<A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">K</A>&nbsp;key,
-            <A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">V</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html#remove(java.lang.Object, java.lang.Object)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
-       <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">V</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html#replace(K, V)">replace</A></B>(<A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">K</A>&nbsp;key,
-        <A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">V</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html#replace(K, V, V)">replace</A></B>(<A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">K</A>&nbsp;key,
-        <A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">V</A>&nbsp;oldValue,
-        <A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">V</A>&nbsp;newValue)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingMap"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#clear()">clear</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#containsKey(java.lang.Object)">containsKey</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#containsValue(java.lang.Object)">containsValue</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#entrySet()">entrySet</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#equals(java.lang.Object)">equals</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#get(java.lang.Object)">get</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#hashCode()">hashCode</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#keySet()">keySet</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#put(K, V)">put</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#putAll(java.util.Map)">putAll</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#remove(java.lang.Object)">remove</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#size()">size</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#values()">values</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingObject"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#toString()">toString</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.util.Map"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#clear()" title="class or interface in java.util">clear</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsKey(java.lang.Object)" title="class or interface in java.util">containsKey</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsValue(java.lang.Object)" title="class or interface in java.util">containsValue</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#entrySet()" title="class or interface in java.util">entrySet</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#get(java.lang.Object)" title="class or interface in java.util">get</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#keySet()" title="class or interface in java.util">keySet</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#put(K, V)" title="class or interface in java.util">put</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#putAll(java.util.Map)" title="class or interface in java.util">putAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#size()" title="class or interface in java.util">size</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#values()" title="class or interface in java.util">values</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="ForwardingConcurrentMap()"><!-- --></A><H3>
-ForwardingConcurrentMap</H3>
-<PRE>
-public <B>ForwardingConcurrentMap</B>()</PRE>
-<DL>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="delegate()"><!-- --></A><H3>
-delegate</H3>
-<PRE>
-protected abstract <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">V</A>&gt; <B>delegate</B>()</PRE>
-<DL>
-<DD><B>Description copied from class: <CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#delegate()">ForwardingObject</A></CODE></B></DD>
-<DD>Returns the backing delegate instance that methods are forwarded to.
- Abstract subclasses generally override this method with an abstract method
- that has a more specific return type, such as <A HREF="../../../../com/google/common/collect/ForwardingSet.html#delegate()"><CODE>ForwardingSet.delegate()</CODE></A>. Concrete subclasses override this method to supply
- the instance being decorated.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#delegate()">delegate</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="putIfAbsent(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="putIfAbsent(K, V)"><!-- --></A><H3>
-putIfAbsent</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">V</A> <B>putIfAbsent</B>(<A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">K</A>&nbsp;key,
-                     <A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">V</A>&nbsp;value)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true#putIfAbsent(K, V)" title="class or interface in java.util.concurrent">putIfAbsent</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="remove(java.lang.Object, java.lang.Object)"><!-- --></A><H3>
-remove</H3>
-<PRE>
-public boolean <B>remove</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
-                      <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true#remove(java.lang.Object, java.lang.Object)" title="class or interface in java.util.concurrent">remove</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="replace(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="replace(K, V)"><!-- --></A><H3>
-replace</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">V</A> <B>replace</B>(<A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">K</A>&nbsp;key,
-                 <A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">V</A>&nbsp;value)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true#replace(K, V)" title="class or interface in java.util.concurrent">replace</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="replace(java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="replace(K, V, V)"><!-- --></A><H3>
-replace</H3>
-<PRE>
-public boolean <B>replace</B>(<A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">K</A>&nbsp;key,
-                       <A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">V</A>&nbsp;oldValue,
-                       <A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">V</A>&nbsp;newValue)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true#replace(K, V, V)" title="class or interface in java.util.concurrent">replace</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ForwardingConcurrentMap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingIterator.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ForwardingConcurrentMap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingConcurrentMap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/ForwardingIterator.html b/javadoc/com/google/common/collect/ForwardingIterator.html
deleted file mode 100644
index ec3b6de..0000000
--- a/javadoc/com/google/common/collect/ForwardingIterator.html
+++ /dev/null
@@ -1,356 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:57 PST 2010 -->
-<TITLE>
-ForwardingIterator (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="ForwardingIterator (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ForwardingIterator.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ForwardingIterator.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingIterator.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class ForwardingIterator&lt;T&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingObject</A>
-      <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ForwardingIterator&lt;T&gt;</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;</DD>
-</DL>
-<DL>
-<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../../com/google/common/collect/ForwardingListIterator.html" title="class in com.google.common.collect">ForwardingListIterator</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public abstract class <B>ForwardingIterator&lt;T&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A><DT>implements <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;</DL>
-</PRE>
-
-<P>
-An iterator which forwards all its method calls to another iterator.
- Subclasses should override one or more methods to modify the behavior of the
- backing iterator as desired per the <a
- href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Kevin Bourrillion</DD>
-<DT><B>See Also:</B><DD><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect"><CODE>ForwardingObject</CODE></A></DL>
-<HR>
-
-<P>
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingIterator.html#ForwardingIterator()">ForwardingIterator</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected abstract &nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingIterator.html" title="type parameter in ForwardingIterator">T</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingIterator.html#delegate()">delegate</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the backing delegate instance that methods are forwarded to.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingIterator.html#hasNext()">hasNext</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingIterator.html" title="type parameter in ForwardingIterator">T</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingIterator.html#next()">next</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingIterator.html#remove()">remove</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingObject"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#toString()">toString</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="ForwardingIterator()"><!-- --></A><H3>
-ForwardingIterator</H3>
-<PRE>
-public <B>ForwardingIterator</B>()</PRE>
-<DL>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="delegate()"><!-- --></A><H3>
-delegate</H3>
-<PRE>
-protected abstract <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingIterator.html" title="type parameter in ForwardingIterator">T</A>&gt; <B>delegate</B>()</PRE>
-<DL>
-<DD><B>Description copied from class: <CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#delegate()">ForwardingObject</A></CODE></B></DD>
-<DD>Returns the backing delegate instance that methods are forwarded to.
- Abstract subclasses generally override this method with an abstract method
- that has a more specific return type, such as <A HREF="../../../../com/google/common/collect/ForwardingSet.html#delegate()"><CODE>ForwardingSet.delegate()</CODE></A>. Concrete subclasses override this method to supply
- the instance being decorated.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#delegate()">delegate</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="hasNext()"><!-- --></A><H3>
-hasNext</H3>
-<PRE>
-public boolean <B>hasNext</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true#hasNext()" title="class or interface in java.util">hasNext</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingIterator.html" title="type parameter in ForwardingIterator">T</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="next()"><!-- --></A><H3>
-next</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ForwardingIterator.html" title="type parameter in ForwardingIterator">T</A> <B>next</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true#next()" title="class or interface in java.util">next</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingIterator.html" title="type parameter in ForwardingIterator">T</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="remove()"><!-- --></A><H3>
-remove</H3>
-<PRE>
-public void <B>remove</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true#remove()" title="class or interface in java.util">remove</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingIterator.html" title="type parameter in ForwardingIterator">T</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ForwardingIterator.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ForwardingIterator.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingIterator.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/ForwardingList.html b/javadoc/com/google/common/collect/ForwardingList.html
deleted file mode 100644
index f21432e..0000000
--- a/javadoc/com/google/common/collect/ForwardingList.html
+++ /dev/null
@@ -1,583 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:57 PST 2010 -->
-<TITLE>
-ForwardingList (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="ForwardingList (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ForwardingList.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingIterator.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingListIterator.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ForwardingList.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingList.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class ForwardingList&lt;E&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingObject</A>
-      <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingCollection</A>&lt;E&gt;
-          <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ForwardingList&lt;E&gt;</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;E&gt;</DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public abstract class <B>ForwardingList&lt;E&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A>&lt;E&gt;<DT>implements <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;E&gt;</DL>
-</PRE>
-
-<P>
-A list which forwards all its method calls to another list. Subclasses should
- override one or more methods to modify the behavior of the backing list as
- desired per the <a
- href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
-
- <p>This class does not implement <A HREF="http://java.sun.com/javase/6/docs/api/java/util/RandomAccess.html?is-external=true" title="class or interface in java.util"><CODE>RandomAccess</CODE></A>. If the
- delegate supports random access, the <code>ForwadingList</code> subclass should
- implement the <code>RandomAccess</code> interface.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Mike Bostock</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingList.html#ForwardingList()">ForwardingList</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingList.html#add(int, E)">add</A></B>(int&nbsp;index,
-    <A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&nbsp;element)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingList.html#addAll(int, java.util.Collection)">addAll</A></B>(int&nbsp;index,
-       <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected abstract &nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingList.html#delegate()">delegate</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the backing delegate instance that methods are forwarded to.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingList.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingList.html#get(int)">get</A></B>(int&nbsp;index)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingList.html#hashCode()">hashCode</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingList.html#indexOf(java.lang.Object)">indexOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingList.html#lastIndexOf(java.lang.Object)">lastIndexOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true" title="class or interface in java.util">ListIterator</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingList.html#listIterator()">listIterator</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true" title="class or interface in java.util">ListIterator</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingList.html#listIterator(int)">listIterator</A></B>(int&nbsp;index)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingList.html#remove(int)">remove</A></B>(int&nbsp;index)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingList.html#set(int, E)">set</A></B>(int&nbsp;index,
-    <A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&nbsp;element)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingList.html#subList(int, int)">subList</A></B>(int&nbsp;fromIndex,
-        int&nbsp;toIndex)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingCollection"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingCollection.html#add(E)">add</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#addAll(java.util.Collection)">addAll</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#clear()">clear</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#contains(java.lang.Object)">contains</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#containsAll(java.util.Collection)">containsAll</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#iterator()">iterator</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#remove(java.lang.Object)">remove</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#removeAll(java.util.Collection)">removeAll</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#retainAll(java.util.Collection)">retainAll</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#size()">size</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#toArray()">toArray</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#toArray(T[])">toArray</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingObject"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#toString()">toString</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.util.List"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#add(E)" title="class or interface in java.util">add</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#addAll(java.util.Collection)" title="class or interface in java.util">addAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#clear()" title="class or interface in java.util">clear</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util">contains</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util">containsAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#iterator()" title="class or interface in java.util">iterator</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#removeAll(java.util.Collection)" title="class or interface in java.util">removeAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util">retainAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#size()" title="class or interface in java.util">size</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#toArray()" title="class or interface in java.util">toArray</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#toArray(T[])" title="class or interface in java.util">toArray</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="ForwardingList()"><!-- --></A><H3>
-ForwardingList</H3>
-<PRE>
-public <B>ForwardingList</B>()</PRE>
-<DL>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="delegate()"><!-- --></A><H3>
-delegate</H3>
-<PRE>
-protected abstract <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&gt; <B>delegate</B>()</PRE>
-<DL>
-<DD><B>Description copied from class: <CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#delegate()">ForwardingObject</A></CODE></B></DD>
-<DD>Returns the backing delegate instance that methods are forwarded to.
- Abstract subclasses generally override this method with an abstract method
- that has a more specific return type, such as <A HREF="../../../../com/google/common/collect/ForwardingSet.html#delegate()"><CODE>ForwardingSet.delegate()</CODE></A>. Concrete subclasses override this method to supply
- the instance being decorated.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingCollection.html#delegate()">delegate</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="add(int,java.lang.Object)"><!-- --></A><A NAME="add(int, E)"><!-- --></A><H3>
-add</H3>
-<PRE>
-public void <B>add</B>(int&nbsp;index,
-                <A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&nbsp;element)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#add(int, E)" title="class or interface in java.util">add</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="addAll(int, java.util.Collection)"><!-- --></A><H3>
-addAll</H3>
-<PRE>
-public boolean <B>addAll</B>(int&nbsp;index,
-                      <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&gt;&nbsp;elements)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#addAll(int, java.util.Collection)" title="class or interface in java.util">addAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="get(int)"><!-- --></A><H3>
-get</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A> <B>get</B>(int&nbsp;index)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#get(int)" title="class or interface in java.util">get</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="indexOf(java.lang.Object)"><!-- --></A><H3>
-indexOf</H3>
-<PRE>
-public int <B>indexOf</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#indexOf(java.lang.Object)" title="class or interface in java.util">indexOf</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="lastIndexOf(java.lang.Object)"><!-- --></A><H3>
-lastIndexOf</H3>
-<PRE>
-public int <B>lastIndexOf</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#lastIndexOf(java.lang.Object)" title="class or interface in java.util">lastIndexOf</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="listIterator()"><!-- --></A><H3>
-listIterator</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true" title="class or interface in java.util">ListIterator</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&gt; <B>listIterator</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#listIterator()" title="class or interface in java.util">listIterator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="listIterator(int)"><!-- --></A><H3>
-listIterator</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true" title="class or interface in java.util">ListIterator</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&gt; <B>listIterator</B>(int&nbsp;index)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#listIterator(int)" title="class or interface in java.util">listIterator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="remove(int)"><!-- --></A><H3>
-remove</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A> <B>remove</B>(int&nbsp;index)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#remove(int)" title="class or interface in java.util">remove</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="set(int,java.lang.Object)"><!-- --></A><A NAME="set(int, E)"><!-- --></A><H3>
-set</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A> <B>set</B>(int&nbsp;index,
-             <A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&nbsp;element)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#set(int, E)" title="class or interface in java.util">set</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="subList(int, int)"><!-- --></A><H3>
-subList</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&gt; <B>subList</B>(int&nbsp;fromIndex,
-                       int&nbsp;toIndex)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#subList(int, int)" title="class or interface in java.util">subList</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
-equals</H3>
-<PRE>
-public boolean <B>equals</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                      <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="hashCode()"><!-- --></A><H3>
-hashCode</H3>
-<PRE>
-public int <B>hashCode</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ForwardingList.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingIterator.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingListIterator.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ForwardingList.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingList.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/ForwardingListIterator.html b/javadoc/com/google/common/collect/ForwardingListIterator.html
deleted file mode 100644
index 8bc7a71..0000000
--- a/javadoc/com/google/common/collect/ForwardingListIterator.html
+++ /dev/null
@@ -1,438 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:57 PST 2010 -->
-<TITLE>
-ForwardingListIterator (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="ForwardingListIterator (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ForwardingListIterator.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ForwardingListIterator.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingListIterator.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class ForwardingListIterator&lt;E&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingObject</A>
-      <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingIterator.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingIterator</A>&lt;E&gt;
-          <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ForwardingListIterator&lt;E&gt;</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true" title="class or interface in java.util">ListIterator</A>&lt;E&gt;</DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public abstract class <B>ForwardingListIterator&lt;E&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ForwardingIterator.html" title="class in com.google.common.collect">ForwardingIterator</A>&lt;E&gt;<DT>implements <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true" title="class or interface in java.util">ListIterator</A>&lt;E&gt;</DL>
-</PRE>
-
-<P>
-A list iterator which forwards all its method calls to another list
- iterator. Subclasses should override one or more methods to modify the
- behavior of the backing iterator as desired per the <a
- href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Mike Bostock</DD>
-<DT><B>See Also:</B><DD><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect"><CODE>ForwardingObject</CODE></A></DL>
-<HR>
-
-<P>
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingListIterator.html#ForwardingListIterator()">ForwardingListIterator</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingListIterator.html#add(E)">add</A></B>(<A HREF="../../../../com/google/common/collect/ForwardingListIterator.html" title="type parameter in ForwardingListIterator">E</A>&nbsp;element)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected abstract &nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true" title="class or interface in java.util">ListIterator</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingListIterator.html" title="type parameter in ForwardingListIterator">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingListIterator.html#delegate()">delegate</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the backing delegate instance that methods are forwarded to.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingListIterator.html#hasPrevious()">hasPrevious</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingListIterator.html#nextIndex()">nextIndex</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingListIterator.html" title="type parameter in ForwardingListIterator">E</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingListIterator.html#previous()">previous</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingListIterator.html#previousIndex()">previousIndex</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingListIterator.html#set(E)">set</A></B>(<A HREF="../../../../com/google/common/collect/ForwardingListIterator.html" title="type parameter in ForwardingListIterator">E</A>&nbsp;element)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingIterator"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingIterator.html" title="class in com.google.common.collect">ForwardingIterator</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingIterator.html#hasNext()">hasNext</A>, <A HREF="../../../../com/google/common/collect/ForwardingIterator.html#next()">next</A>, <A HREF="../../../../com/google/common/collect/ForwardingIterator.html#remove()">remove</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingObject"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#toString()">toString</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.util.ListIterator"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true" title="class or interface in java.util">ListIterator</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true#hasNext()" title="class or interface in java.util">hasNext</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true#next()" title="class or interface in java.util">next</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true#remove()" title="class or interface in java.util">remove</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="ForwardingListIterator()"><!-- --></A><H3>
-ForwardingListIterator</H3>
-<PRE>
-public <B>ForwardingListIterator</B>()</PRE>
-<DL>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="delegate()"><!-- --></A><H3>
-delegate</H3>
-<PRE>
-protected abstract <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true" title="class or interface in java.util">ListIterator</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingListIterator.html" title="type parameter in ForwardingListIterator">E</A>&gt; <B>delegate</B>()</PRE>
-<DL>
-<DD><B>Description copied from class: <CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#delegate()">ForwardingObject</A></CODE></B></DD>
-<DD>Returns the backing delegate instance that methods are forwarded to.
- Abstract subclasses generally override this method with an abstract method
- that has a more specific return type, such as <A HREF="../../../../com/google/common/collect/ForwardingSet.html#delegate()"><CODE>ForwardingSet.delegate()</CODE></A>. Concrete subclasses override this method to supply
- the instance being decorated.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingIterator.html#delegate()">delegate</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingIterator.html" title="class in com.google.common.collect">ForwardingIterator</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingListIterator.html" title="type parameter in ForwardingListIterator">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="add(java.lang.Object)"><!-- --></A><A NAME="add(E)"><!-- --></A><H3>
-add</H3>
-<PRE>
-public void <B>add</B>(<A HREF="../../../../com/google/common/collect/ForwardingListIterator.html" title="type parameter in ForwardingListIterator">E</A>&nbsp;element)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true#add(E)" title="class or interface in java.util">add</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true" title="class or interface in java.util">ListIterator</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingListIterator.html" title="type parameter in ForwardingListIterator">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="hasPrevious()"><!-- --></A><H3>
-hasPrevious</H3>
-<PRE>
-public boolean <B>hasPrevious</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true#hasPrevious()" title="class or interface in java.util">hasPrevious</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true" title="class or interface in java.util">ListIterator</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingListIterator.html" title="type parameter in ForwardingListIterator">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="nextIndex()"><!-- --></A><H3>
-nextIndex</H3>
-<PRE>
-public int <B>nextIndex</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true#nextIndex()" title="class or interface in java.util">nextIndex</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true" title="class or interface in java.util">ListIterator</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingListIterator.html" title="type parameter in ForwardingListIterator">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="previous()"><!-- --></A><H3>
-previous</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ForwardingListIterator.html" title="type parameter in ForwardingListIterator">E</A> <B>previous</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true#previous()" title="class or interface in java.util">previous</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true" title="class or interface in java.util">ListIterator</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingListIterator.html" title="type parameter in ForwardingListIterator">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="previousIndex()"><!-- --></A><H3>
-previousIndex</H3>
-<PRE>
-public int <B>previousIndex</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true#previousIndex()" title="class or interface in java.util">previousIndex</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true" title="class or interface in java.util">ListIterator</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingListIterator.html" title="type parameter in ForwardingListIterator">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="set(java.lang.Object)"><!-- --></A><A NAME="set(E)"><!-- --></A><H3>
-set</H3>
-<PRE>
-public void <B>set</B>(<A HREF="../../../../com/google/common/collect/ForwardingListIterator.html" title="type parameter in ForwardingListIterator">E</A>&nbsp;element)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true#set(E)" title="class or interface in java.util">set</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true" title="class or interface in java.util">ListIterator</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingListIterator.html" title="type parameter in ForwardingListIterator">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ForwardingListIterator.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ForwardingListIterator.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingListIterator.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/ForwardingMap.html b/javadoc/com/google/common/collect/ForwardingMap.html
deleted file mode 100644
index 46004e0..0000000
--- a/javadoc/com/google/common/collect/ForwardingMap.html
+++ /dev/null
@@ -1,620 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:57 PST 2010 -->
-<TITLE>
-ForwardingMap (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="ForwardingMap (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ForwardingMap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingListIterator.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ForwardingMap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingMap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class ForwardingMap&lt;K,V&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingObject</A>
-      <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ForwardingMap&lt;K,V&gt;</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</DD>
-</DL>
-<DL>
-<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../../com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect">EnumBiMap</A>, <A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect">EnumHashBiMap</A>, <A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="class in com.google.common.collect">ForwardingConcurrentMap</A>, <A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="class in com.google.common.collect">ForwardingSortedMap</A>, <A HREF="../../../../com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect">HashBiMap</A>, <A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap</A>, <A HREF="../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect">MutableClassToInstanceMap</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public abstract class <B>ForwardingMap&lt;K,V&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A><DT>implements <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</DL>
-</PRE>
-
-<P>
-A map which forwards all its method calls to another map. Subclasses should
- override one or more methods to modify the behavior of the backing map as
- desired per the <a
- href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Kevin Bourrillion, Jared Levy</DD>
-<DT><B>See Also:</B><DD><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect"><CODE>ForwardingObject</CODE></A></DL>
-<HR>
-
-<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-<A NAME="nested_class_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Nested Class Summary</B></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;<A NAME="nested_classes_inherited_from_class_java.util.Map"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Nested classes/interfaces inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">V</A>&gt;</CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMap.html#ForwardingMap()">ForwardingMap</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMap.html#clear()">clear</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMap.html#containsKey(java.lang.Object)">containsKey</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMap.html#containsValue(java.lang.Object)">containsValue</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected abstract &nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMap.html#delegate()">delegate</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the backing delegate instance that methods are forwarded to.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A>&gt;&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMap.html#entrySet()">entrySet</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMap.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMap.html#get(java.lang.Object)">get</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMap.html#hashCode()">hashCode</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMap.html#isEmpty()">isEmpty</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">K</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMap.html#keySet()">keySet</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMap.html#put(K, V)">put</A></B>(<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">K</A>&nbsp;key,
-    <A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMap.html#putAll(java.util.Map)">putAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">K</A>,? extends <A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A>&gt;&nbsp;map)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMap.html#remove(java.lang.Object)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMap.html#size()">size</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMap.html#values()">values</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingObject"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#toString()">toString</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="ForwardingMap()"><!-- --></A><H3>
-ForwardingMap</H3>
-<PRE>
-public <B>ForwardingMap</B>()</PRE>
-<DL>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="delegate()"><!-- --></A><H3>
-delegate</H3>
-<PRE>
-protected abstract <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A>&gt; <B>delegate</B>()</PRE>
-<DL>
-<DD><B>Description copied from class: <CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#delegate()">ForwardingObject</A></CODE></B></DD>
-<DD>Returns the backing delegate instance that methods are forwarded to.
- Abstract subclasses generally override this method with an abstract method
- that has a more specific return type, such as <A HREF="../../../../com/google/common/collect/ForwardingSet.html#delegate()"><CODE>ForwardingSet.delegate()</CODE></A>. Concrete subclasses override this method to supply
- the instance being decorated.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#delegate()">delegate</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="size()"><!-- --></A><H3>
-size</H3>
-<PRE>
-public int <B>size</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#size()" title="class or interface in java.util">size</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="isEmpty()"><!-- --></A><H3>
-isEmpty</H3>
-<PRE>
-public boolean <B>isEmpty</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="remove(java.lang.Object)"><!-- --></A><H3>
-remove</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A> <B>remove</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="clear()"><!-- --></A><H3>
-clear</H3>
-<PRE>
-public void <B>clear</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#clear()" title="class or interface in java.util">clear</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="containsKey(java.lang.Object)"><!-- --></A><H3>
-containsKey</H3>
-<PRE>
-public boolean <B>containsKey</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsKey(java.lang.Object)" title="class or interface in java.util">containsKey</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="containsValue(java.lang.Object)"><!-- --></A><H3>
-containsValue</H3>
-<PRE>
-public boolean <B>containsValue</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsValue(java.lang.Object)" title="class or interface in java.util">containsValue</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="get(java.lang.Object)"><!-- --></A><H3>
-get</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A> <B>get</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#get(java.lang.Object)" title="class or interface in java.util">get</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="put(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="put(K, V)"><!-- --></A><H3>
-put</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A> <B>put</B>(<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">K</A>&nbsp;key,
-             <A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A>&nbsp;value)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#put(K, V)" title="class or interface in java.util">put</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="putAll(java.util.Map)"><!-- --></A><H3>
-putAll</H3>
-<PRE>
-public void <B>putAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">K</A>,? extends <A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A>&gt;&nbsp;map)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#putAll(java.util.Map)" title="class or interface in java.util">putAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="keySet()"><!-- --></A><H3>
-keySet</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">K</A>&gt; <B>keySet</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#keySet()" title="class or interface in java.util">keySet</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="values()"><!-- --></A><H3>
-values</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A>&gt; <B>values</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#values()" title="class or interface in java.util">values</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="entrySet()"><!-- --></A><H3>
-entrySet</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A>&gt;&gt; <B>entrySet</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#entrySet()" title="class or interface in java.util">entrySet</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
-equals</H3>
-<PRE>
-public boolean <B>equals</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                      <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="hashCode()"><!-- --></A><H3>
-hashCode</H3>
-<PRE>
-public int <B>hashCode</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ForwardingMap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingListIterator.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ForwardingMap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingMap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/ForwardingMapEntry.html b/javadoc/com/google/common/collect/ForwardingMapEntry.html
deleted file mode 100644
index ef546c8..0000000
--- a/javadoc/com/google/common/collect/ForwardingMapEntry.html
+++ /dev/null
@@ -1,398 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:57 PST 2010 -->
-<TITLE>
-ForwardingMapEntry (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="ForwardingMapEntry (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ForwardingMapEntry.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ForwardingMapEntry.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingMapEntry.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class ForwardingMapEntry&lt;K,V&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingObject</A>
-      <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ForwardingMapEntry&lt;K,V&gt;</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;K,V&gt;</DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public abstract class <B>ForwardingMapEntry&lt;K,V&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A><DT>implements <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;K,V&gt;</DL>
-</PRE>
-
-<P>
-A map entry which forwards all its method calls to another map entry.
- Subclasses should override one or more methods to modify the behavior of the
- backing map entry as desired per the <a
- href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Mike Bostock</DD>
-<DT><B>See Also:</B><DD><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect"><CODE>ForwardingObject</CODE></A></DL>
-<HR>
-
-<P>
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html#ForwardingMapEntry()">ForwardingMapEntry</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected abstract &nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="type parameter in ForwardingMapEntry">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="type parameter in ForwardingMapEntry">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html#delegate()">delegate</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the backing delegate instance that methods are forwarded to.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="type parameter in ForwardingMapEntry">K</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html#getKey()">getKey</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="type parameter in ForwardingMapEntry">V</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html#getValue()">getValue</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html#hashCode()">hashCode</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="type parameter in ForwardingMapEntry">V</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html#setValue(V)">setValue</A></B>(<A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="type parameter in ForwardingMapEntry">V</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingObject"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#toString()">toString</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="ForwardingMapEntry()"><!-- --></A><H3>
-ForwardingMapEntry</H3>
-<PRE>
-public <B>ForwardingMapEntry</B>()</PRE>
-<DL>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="delegate()"><!-- --></A><H3>
-delegate</H3>
-<PRE>
-protected abstract <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="type parameter in ForwardingMapEntry">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="type parameter in ForwardingMapEntry">V</A>&gt; <B>delegate</B>()</PRE>
-<DL>
-<DD><B>Description copied from class: <CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#delegate()">ForwardingObject</A></CODE></B></DD>
-<DD>Returns the backing delegate instance that methods are forwarded to.
- Abstract subclasses generally override this method with an abstract method
- that has a more specific return type, such as <A HREF="../../../../com/google/common/collect/ForwardingSet.html#delegate()"><CODE>ForwardingSet.delegate()</CODE></A>. Concrete subclasses override this method to supply
- the instance being decorated.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#delegate()">delegate</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getKey()"><!-- --></A><H3>
-getKey</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="type parameter in ForwardingMapEntry">K</A> <B>getKey</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true#getKey()" title="class or interface in java.util">getKey</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="type parameter in ForwardingMapEntry">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="type parameter in ForwardingMapEntry">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getValue()"><!-- --></A><H3>
-getValue</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="type parameter in ForwardingMapEntry">V</A> <B>getValue</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true#getValue()" title="class or interface in java.util">getValue</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="type parameter in ForwardingMapEntry">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="type parameter in ForwardingMapEntry">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="setValue(java.lang.Object)"><!-- --></A><A NAME="setValue(V)"><!-- --></A><H3>
-setValue</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="type parameter in ForwardingMapEntry">V</A> <B>setValue</B>(<A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="type parameter in ForwardingMapEntry">V</A>&nbsp;value)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true#setValue(V)" title="class or interface in java.util">setValue</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="type parameter in ForwardingMapEntry">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="type parameter in ForwardingMapEntry">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
-equals</H3>
-<PRE>
-public boolean <B>equals</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                      <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="type parameter in ForwardingMapEntry">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="type parameter in ForwardingMapEntry">V</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="hashCode()"><!-- --></A><H3>
-hashCode</H3>
-<PRE>
-public int <B>hashCode</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="type parameter in ForwardingMapEntry">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="type parameter in ForwardingMapEntry">V</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ForwardingMapEntry.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ForwardingMapEntry.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingMapEntry.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/ForwardingMultimap.html b/javadoc/com/google/common/collect/ForwardingMultimap.html
deleted file mode 100644
index c167108..0000000
--- a/javadoc/com/google/common/collect/ForwardingMultimap.html
+++ /dev/null
@@ -1,878 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:57 PST 2010 -->
-<TITLE>
-ForwardingMultimap (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="ForwardingMultimap (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ForwardingMultimap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ForwardingMultimap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingMultimap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class ForwardingMultimap&lt;K,V&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingObject</A>
-      <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ForwardingMultimap&lt;K,V&gt;</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public abstract class <B>ForwardingMultimap&lt;K,V&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A><DT>implements <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</DL>
-</PRE>
-
-<P>
-A multimap which forwards all its method calls to another multimap.
- Subclasses should override one or more methods to modify the behavior of
- the backing multimap as desired per the <a
- href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Robert Konigsberg</DD>
-<DT><B>See Also:</B><DD><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect"><CODE>ForwardingObject</CODE></A></DL>
-<HR>
-
-<P>
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultimap.html#ForwardingMultimap()">ForwardingMultimap</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultimap.html#asMap()">asMap</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a map view that associates each key with the corresponding values
- in the multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultimap.html#clear()">clear</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes all key-value pairs from the multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultimap.html#containsEntry(java.lang.Object, java.lang.Object)">containsEntry</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
-              <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains the specified key-value pair.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultimap.html#containsKey(java.lang.Object)">containsKey</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains any values for the specified
- key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultimap.html#containsValue(java.lang.Object)">containsValue</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains the specified value for any
- key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected abstract &nbsp;<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultimap.html#delegate()">delegate</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the backing delegate instance that methods are forwarded to.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultimap.html#entries()">entries</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection of all key-value pairs.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultimap.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares the specified object with this multimap for equality.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultimap.html#get(K)">get</A></B>(<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>&nbsp;key)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection view of all values associated with a key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultimap.html#hashCode()">hashCode</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the hash code for this multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultimap.html#isEmpty()">isEmpty</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains no key-value pairs.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultimap.html#keys()">keys</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection, which may contain duplicates, of all keys.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultimap.html#keySet()">keySet</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the set of all keys, each appearing once in the returned set.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultimap.html#put(K, V)">put</A></B>(<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>&nbsp;key,
-    <A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a key-value pair in the multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultimap.html#putAll(K, java.lang.Iterable)">putAll</A></B>(<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>&nbsp;key,
-       <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;&nbsp;values)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a collection of values with the same key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultimap.html#putAll(com.google.common.collect.Multimap)">putAll</A></B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,? extends <A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;&nbsp;multimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies all of another multimap's key-value pairs into this multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultimap.html#remove(java.lang.Object, java.lang.Object)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
-       <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes a key-value pair from the multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultimap.html#removeAll(java.lang.Object)">removeAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes all values associated with a given key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></B>(<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>&nbsp;key,
-              <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;&nbsp;values)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a collection of values with the same key, replacing any existing
- values for that key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultimap.html#size()">size</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of key-value pairs in the multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultimap.html#values()">values</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection of all values in the multimap.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingObject"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#toString()">toString</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="ForwardingMultimap()"><!-- --></A><H3>
-ForwardingMultimap</H3>
-<PRE>
-public <B>ForwardingMultimap</B>()</PRE>
-<DL>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="delegate()"><!-- --></A><H3>
-delegate</H3>
-<PRE>
-protected abstract <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt; <B>delegate</B>()</PRE>
-<DL>
-<DD><B>Description copied from class: <CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#delegate()">ForwardingObject</A></CODE></B></DD>
-<DD>Returns the backing delegate instance that methods are forwarded to.
- Abstract subclasses generally override this method with an abstract method
- that has a more specific return type, such as <A HREF="../../../../com/google/common/collect/ForwardingSet.html#delegate()"><CODE>ForwardingSet.delegate()</CODE></A>. Concrete subclasses override this method to supply
- the instance being decorated.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#delegate()">delegate</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="asMap()"><!-- --></A><H3>
-asMap</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;&gt; <B>asMap</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#asMap()">Multimap</A></CODE></B></DD>
-<DD>Returns a map view that associates each key with the corresponding values
- in the multimap. Changes to the returned map, such as element removal,
- will update the underlying multimap. The map does not support
- <code>setValue()</code> on its entries, <code>put</code>, or <code>putAll</code>.
-
- <p>The collections returned by <code>asMap().get(Object)</code> have the same
- behavior as those returned by <A HREF="../../../../com/google/common/collect/Multimap.html#get(K)"><CODE>Multimap.get(K)</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#asMap()">asMap</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a map view from a key to its collection of values</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="clear()"><!-- --></A><H3>
-clear</H3>
-<PRE>
-public void <B>clear</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#clear()">Multimap</A></CODE></B></DD>
-<DD>Removes all key-value pairs from the multimap.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#clear()">clear</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="containsEntry(java.lang.Object, java.lang.Object)"><!-- --></A><H3>
-containsEntry</H3>
-<PRE>
-public boolean <B>containsEntry</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                             <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
-                             <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                             <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsEntry(java.lang.Object, java.lang.Object)">Multimap</A></CODE></B></DD>
-<DD>Returns <code>true</code> if the multimap contains the specified key-value pair.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsEntry(java.lang.Object, java.lang.Object)">containsEntry</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to search for in multimap<DD><CODE>value</CODE> - value to search for in multimap</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="containsKey(java.lang.Object)"><!-- --></A><H3>
-containsKey</H3>
-<PRE>
-public boolean <B>containsKey</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                           <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsKey(java.lang.Object)">Multimap</A></CODE></B></DD>
-<DD>Returns <code>true</code> if the multimap contains any values for the specified
- key.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsKey(java.lang.Object)">containsKey</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to search for in multimap</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="containsValue(java.lang.Object)"><!-- --></A><H3>
-containsValue</H3>
-<PRE>
-public boolean <B>containsValue</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                             <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsValue(java.lang.Object)">Multimap</A></CODE></B></DD>
-<DD>Returns <code>true</code> if the multimap contains the specified value for any
- key.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsValue(java.lang.Object)">containsValue</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>value</CODE> - value to search for in multimap</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="entries()"><!-- --></A><H3>
-entries</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;&gt; <B>entries</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#entries()">Multimap</A></CODE></B></DD>
-<DD>Returns a collection of all key-value pairs. Changes to the returned
- collection will update the underlying multimap, and vice versa. The entries
- collection does not support the <code>add</code> or <code>addAll</code> operations.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#entries()">entries</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>collection of map entries consisting of key-value pairs</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="get(java.lang.Object)"><!-- --></A><A NAME="get(K)"><!-- --></A><H3>
-get</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt; <B>get</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                         <A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>&nbsp;key)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#get(K)">Multimap</A></CODE></B></DD>
-<DD>Returns a collection view of all values associated with a key. If no
- mappings in the multimap have the provided key, an empty collection is
- returned.
-
- <p>Changes to the returned collection will update the underlying multimap,
- and vice versa.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#get(K)">get</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to search for in multimap
-<DT><B>Returns:</B><DD>the collection of values that the key maps to</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="isEmpty()"><!-- --></A><H3>
-isEmpty</H3>
-<PRE>
-public boolean <B>isEmpty</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#isEmpty()">Multimap</A></CODE></B></DD>
-<DD>Returns <code>true</code> if the multimap contains no key-value pairs.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#isEmpty()">isEmpty</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="keys()"><!-- --></A><H3>
-keys</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>&gt; <B>keys</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#keys()">Multimap</A></CODE></B></DD>
-<DD>Returns a collection, which may contain duplicates, of all keys. The number
- of times of key appears in the returned multiset equals the number of
- mappings the key has in the multimap. Changes to the returned multiset will
- update the underlying multimap, and vice versa.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#keys()">keys</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a multiset with keys corresponding to the distinct keys of the
-     multimap and frequencies corresponding to the number of values that
-     each key maps to</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="keySet()"><!-- --></A><H3>
-keySet</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>&gt; <B>keySet</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#keySet()">Multimap</A></CODE></B></DD>
-<DD>Returns the set of all keys, each appearing once in the returned set.
- Changes to the returned set will update the underlying multimap, and vice
- versa.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#keySet()">keySet</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>the collection of distinct keys</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="put(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="put(K, V)"><!-- --></A><H3>
-put</H3>
-<PRE>
-public boolean <B>put</B>(<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>&nbsp;key,
-                   <A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&nbsp;value)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#put(K, V)">Multimap</A></CODE></B></DD>
-<DD>Stores a key-value pair in the multimap.
-
- <p>Some multimap implementations allow duplicate key-value pairs, in which
- case <code>put</code> always adds a new key-value pair and increases the
- multimap size by 1. Other implementations prohibit duplicates, and storing
- a key-value pair that's already in the multimap has no effect.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#put(K, V)">put</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to store in the multimap<DD><CODE>value</CODE> - value to store in the multimap
-<DT><B>Returns:</B><DD><code>true</code> if the method increased the size of the multimap, or
-     <code>false</code> if the multimap already contained the key-value pair and
-     doesn't allow duplicates</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="putAll(java.lang.Object,java.lang.Iterable)"><!-- --></A><A NAME="putAll(K, java.lang.Iterable)"><!-- --></A><H3>
-putAll</H3>
-<PRE>
-public boolean <B>putAll</B>(<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>&nbsp;key,
-                      <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;&nbsp;values)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#putAll(K, java.lang.Iterable)">Multimap</A></CODE></B></DD>
-<DD>Stores a collection of values with the same key.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#putAll(K, java.lang.Iterable)">putAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to store in the multimap<DD><CODE>values</CODE> - values to store in the multimap
-<DT><B>Returns:</B><DD><code>true</code> if the multimap changed</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="putAll(com.google.common.collect.Multimap)"><!-- --></A><H3>
-putAll</H3>
-<PRE>
-public boolean <B>putAll</B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,? extends <A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;&nbsp;multimap)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#putAll(com.google.common.collect.Multimap)">Multimap</A></CODE></B></DD>
-<DD>Copies all of another multimap's key-value pairs into this multimap. The
- order in which the mappings are added is determined by
- <code>multimap.entries()</code>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#putAll(com.google.common.collect.Multimap)">putAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>multimap</CODE> - mappings to store in this multimap
-<DT><B>Returns:</B><DD><code>true</code> if the multimap changed</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="remove(java.lang.Object, java.lang.Object)"><!-- --></A><H3>
-remove</H3>
-<PRE>
-public boolean <B>remove</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                      <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
-                      <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                      <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#remove(java.lang.Object, java.lang.Object)">Multimap</A></CODE></B></DD>
-<DD>Removes a key-value pair from the multimap.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#remove(java.lang.Object, java.lang.Object)">remove</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key of entry to remove from the multimap<DD><CODE>value</CODE> - value of entry to remove the multimap
-<DT><B>Returns:</B><DD><code>true</code> if the multimap changed</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="removeAll(java.lang.Object)"><!-- --></A><H3>
-removeAll</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt; <B>removeAll</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                               <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#removeAll(java.lang.Object)">Multimap</A></CODE></B></DD>
-<DD>Removes all values associated with a given key.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#removeAll(java.lang.Object)">removeAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key of entries to remove from the multimap
-<DT><B>Returns:</B><DD>the collection of removed values, or an empty collection if no
-     values were associated with the provided key. The collection
-     <i>may</i> be modifiable, but updating it will have no effect on the
-     multimap.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="replaceValues(java.lang.Object,java.lang.Iterable)"><!-- --></A><A NAME="replaceValues(K, java.lang.Iterable)"><!-- --></A><H3>
-replaceValues</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt; <B>replaceValues</B>(<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>&nbsp;key,
-                                   <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;&nbsp;values)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#replaceValues(K, java.lang.Iterable)">Multimap</A></CODE></B></DD>
-<DD>Stores a collection of values with the same key, replacing any existing
- values for that key.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to store in the multimap<DD><CODE>values</CODE> - values to store in the multimap
-<DT><B>Returns:</B><DD>the collection of replaced values, or an empty collection if no
-     values were previously associated with the key. The collection
-     <i>may</i> be modifiable, but updating it will have no effect on the
-     multimap.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="size()"><!-- --></A><H3>
-size</H3>
-<PRE>
-public int <B>size</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#size()">Multimap</A></CODE></B></DD>
-<DD>Returns the number of key-value pairs in the multimap.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#size()">size</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="values()"><!-- --></A><H3>
-values</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt; <B>values</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#values()">Multimap</A></CODE></B></DD>
-<DD>Returns a collection of all values in the multimap. Changes to the returned
- collection will update the underlying multimap, and vice versa.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#values()">values</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>collection of values, which may include the same value multiple
-     times if it occurs in multiple mappings</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
-equals</H3>
-<PRE>
-public boolean <B>equals</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                      <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#equals(java.lang.Object)">Multimap</A></CODE></B></DD>
-<DD>Compares the specified object with this multimap for equality. Two
- multimaps are equal when their map views, as returned by <A HREF="../../../../com/google/common/collect/Multimap.html#asMap()"><CODE>Multimap.asMap()</CODE></A>,
- are also equal.
-
- <p>In general, two multimaps with identical key-value mappings may or may
- not be equal, depending on the implementation. For example, two
- <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect"><CODE>SetMultimap</CODE></A> instances with the same key-value mappings are equal,
- but equality of two <A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect"><CODE>ListMultimap</CODE></A> instances depends on the ordering
- of the values for each key.
-
- <p>A non-empty <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect"><CODE>SetMultimap</CODE></A> cannot be equal to a non-empty
- <A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect"><CODE>ListMultimap</CODE></A>, since their <A HREF="../../../../com/google/common/collect/Multimap.html#asMap()"><CODE>Multimap.asMap()</CODE></A> views contain unequal
- collections as values. However, any two empty multimaps are equal, because
- they both have empty <A HREF="../../../../com/google/common/collect/Multimap.html#asMap()"><CODE>Multimap.asMap()</CODE></A> views.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#equals(java.lang.Object)">equals</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="hashCode()"><!-- --></A><H3>
-hashCode</H3>
-<PRE>
-public int <B>hashCode</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#hashCode()">Multimap</A></CODE></B></DD>
-<DD>Returns the hash code for this multimap.
-
- <p>The hash code of a multimap is defined as the hash code of the map view,
- as returned by <A HREF="../../../../com/google/common/collect/Multimap.html#asMap()"><CODE>Multimap.asMap()</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#hashCode()">hashCode</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ForwardingMultimap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ForwardingMultimap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingMultimap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/ForwardingMultiset.html b/javadoc/com/google/common/collect/ForwardingMultiset.html
deleted file mode 100644
index 1708106..0000000
--- a/javadoc/com/google/common/collect/ForwardingMultiset.html
+++ /dev/null
@@ -1,640 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:58 PST 2010 -->
-<TITLE>
-ForwardingMultiset (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="ForwardingMultiset (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ForwardingMultiset.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ForwardingMultiset.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingMultiset.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class ForwardingMultiset&lt;E&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingObject</A>
-      <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingCollection</A>&lt;E&gt;
-          <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ForwardingMultiset&lt;E&gt;</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public abstract class <B>ForwardingMultiset&lt;E&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A>&lt;E&gt;<DT>implements <A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</DL>
-</PRE>
-
-<P>
-A multiset which forwards all its method calls to another multiset.
- Subclasses should override one or more methods to modify the behavior of the
- backing multiset as desired per the <a
- href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Kevin Bourrillion</DD>
-<DT><B>See Also:</B><DD><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect"><CODE>ForwardingObject</CODE></A></DL>
-<HR>
-
-<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-<A NAME="nested_class_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Nested Class Summary</B></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;<A NAME="nested_classes_inherited_from_class_com.google.common.collect.Multiset"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Nested classes/interfaces inherited from interface com.google.common.collect.<A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="type parameter in Multiset.Entry">E</A>&gt;</CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultiset.html#ForwardingMultiset()">ForwardingMultiset</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultiset.html#add(E, int)">add</A></B>(<A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="type parameter in ForwardingMultiset">E</A>&nbsp;element,
-    int&nbsp;occurrences)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds a number of occurrences of an element to this multiset.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultiset.html#count(java.lang.Object)">count</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of occurrences of an element in this multiset (the
- <i>count</i> of the element).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected abstract &nbsp;<A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="type parameter in ForwardingMultiset">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultiset.html#delegate()">delegate</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the backing delegate instance that methods are forwarded to.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="type parameter in ForwardingMultiset">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultiset.html#elementSet()">elementSet</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the set of distinct elements contained in this multiset.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="type parameter in ForwardingMultiset">E</A>&gt;&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultiset.html#entrySet()">entrySet</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of the contents of this multiset, grouped into <code>Multiset.Entry</code> instances, each providing an element of the multiset and
- the count of that element.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultiset.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares the specified object with this multiset for equality.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultiset.html#hashCode()">hashCode</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the hash code for this multiset.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultiset.html#remove(java.lang.Object, int)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element,
-       int&nbsp;occurrences)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes a number of occurrences of the specified element from this
- multiset.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultiset.html#setCount(E, int)">setCount</A></B>(<A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="type parameter in ForwardingMultiset">E</A>&nbsp;element,
-         int&nbsp;count)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds or removes the necessary occurrences of an element such that the
- element attains the desired count.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingMultiset.html#setCount(E, int, int)">setCount</A></B>(<A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="type parameter in ForwardingMultiset">E</A>&nbsp;element,
-         int&nbsp;oldCount,
-         int&nbsp;newCount)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Conditionally sets the count of an element to a new value, as described in
- <A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int)"><CODE>Multiset.setCount(Object, int)</CODE></A>, provided that the element has the expected
- current count.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingCollection"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingCollection.html#add(E)">add</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#addAll(java.util.Collection)">addAll</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#clear()">clear</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#contains(java.lang.Object)">contains</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#containsAll(java.util.Collection)">containsAll</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#iterator()">iterator</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#remove(java.lang.Object)">remove</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#removeAll(java.util.Collection)">removeAll</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#retainAll(java.util.Collection)">retainAll</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#size()">size</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#toArray()">toArray</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#toArray(T[])">toArray</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingObject"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#toString()">toString</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.Multiset"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface com.google.common.collect.<A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#add(E)">add</A>, <A HREF="../../../../com/google/common/collect/Multiset.html#contains(java.lang.Object)">contains</A>, <A HREF="../../../../com/google/common/collect/Multiset.html#containsAll(java.util.Collection)">containsAll</A>, <A HREF="../../../../com/google/common/collect/Multiset.html#iterator()">iterator</A>, <A HREF="../../../../com/google/common/collect/Multiset.html#remove(java.lang.Object)">remove</A>, <A HREF="../../../../com/google/common/collect/Multiset.html#removeAll(java.util.Collection)">removeAll</A>, <A HREF="../../../../com/google/common/collect/Multiset.html#retainAll(java.util.Collection)">retainAll</A>, <A HREF="../../../../com/google/common/collect/Multiset.html#toString()">toString</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.util.Collection"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#addAll(java.util.Collection)" title="class or interface in java.util">addAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#clear()" title="class or interface in java.util">clear</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#size()" title="class or interface in java.util">size</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#toArray()" title="class or interface in java.util">toArray</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#toArray(T[])" title="class or interface in java.util">toArray</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="ForwardingMultiset()"><!-- --></A><H3>
-ForwardingMultiset</H3>
-<PRE>
-public <B>ForwardingMultiset</B>()</PRE>
-<DL>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="delegate()"><!-- --></A><H3>
-delegate</H3>
-<PRE>
-protected abstract <A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="type parameter in ForwardingMultiset">E</A>&gt; <B>delegate</B>()</PRE>
-<DL>
-<DD><B>Description copied from class: <CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#delegate()">ForwardingObject</A></CODE></B></DD>
-<DD>Returns the backing delegate instance that methods are forwarded to.
- Abstract subclasses generally override this method with an abstract method
- that has a more specific return type, such as <A HREF="../../../../com/google/common/collect/ForwardingSet.html#delegate()"><CODE>ForwardingSet.delegate()</CODE></A>. Concrete subclasses override this method to supply
- the instance being decorated.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingCollection.html#delegate()">delegate</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="type parameter in ForwardingMultiset">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="count(java.lang.Object)"><!-- --></A><H3>
-count</H3>
-<PRE>
-public int <B>count</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#count(java.lang.Object)">Multiset</A></CODE></B></DD>
-<DD>Returns the number of occurrences of an element in this multiset (the
- <i>count</i> of the element). Note that for an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>-based
- multiset, this gives the same result as <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#frequency(java.util.Collection, java.lang.Object)" title="class or interface in java.util"><CODE>Collections.frequency(java.util.Collection<?>, java.lang.Object)</CODE></A>
- (which would presumably perform more poorly).
-
- <p><b>Note:</b> the utility method <A HREF="../../../../com/google/common/collect/Iterables.html#frequency(java.lang.Iterable, java.lang.Object)"><CODE>Iterables.frequency(java.lang.Iterable<?>, java.lang.Object)</CODE></A> generalizes
- this operation; it correctly delegates to this method when dealing with a
- multiset, but it can also accept any other iterable type.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#count(java.lang.Object)">count</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="type parameter in ForwardingMultiset">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to count occurrences of
-<DT><B>Returns:</B><DD>the number of occurrences of the element in this multiset; possibly
-     zero but never negative</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="add(java.lang.Object,int)"><!-- --></A><A NAME="add(E, int)"><!-- --></A><H3>
-add</H3>
-<PRE>
-public int <B>add</B>(<A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="type parameter in ForwardingMultiset">E</A>&nbsp;element,
-               int&nbsp;occurrences)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#add(E, int)">Multiset</A></CODE></B></DD>
-<DD>Adds a number of occurrences of an element to this multiset. Note that if
- <code>occurrences == 1</code>, this method has the identical effect to <A HREF="../../../../com/google/common/collect/Multiset.html#add(E)"><CODE>Multiset.add(Object)</CODE></A>. This method is functionally equivalent (except in the case
- of overflow) to the call <code>addAll(Collections.nCopies(element,
- occurrences))</code>, which would presumably perform much more poorly.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#add(E, int)">add</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="type parameter in ForwardingMultiset">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to add occurrences of; may be <code>null</code> only
-     if explicitly allowed by the implementation<DD><CODE>occurrences</CODE> - the number of occurrences of the element to add. May be
-     zero, in which case no change will be made.
-<DT><B>Returns:</B><DD>the count of the element before the operation; possibly zero</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="remove(java.lang.Object, int)"><!-- --></A><H3>
-remove</H3>
-<PRE>
-public int <B>remove</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element,
-                  int&nbsp;occurrences)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#remove(java.lang.Object, int)">Multiset</A></CODE></B></DD>
-<DD>Removes a number of occurrences of the specified element from this
- multiset. If the multiset contains fewer than this number of occurrences to
- begin with, all occurrences will be removed.  Note that if
- <code>occurrences == 1</code>, this is functionally equivalent to the call
- <code>remove(element)</code>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#remove(java.lang.Object, int)">remove</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="type parameter in ForwardingMultiset">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to conditionally remove occurrences of<DD><CODE>occurrences</CODE> - the number of occurrences of the element to remove. May
-     be zero, in which case no change will be made.
-<DT><B>Returns:</B><DD>the count of the element before the operation; possibly zero</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="elementSet()"><!-- --></A><H3>
-elementSet</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="type parameter in ForwardingMultiset">E</A>&gt; <B>elementSet</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#elementSet()">Multiset</A></CODE></B></DD>
-<DD>Returns the set of distinct elements contained in this multiset. The
- element set is backed by the same data as the multiset, so any change to
- either is immediately reflected in the other. The order of the elements in
- the element set is unspecified.
-
- <p>If the element set supports any removal operations, these necessarily
- cause <b>all</b> occurrences of the removed element(s) to be removed from
- the multiset. Implementations are not expected to support the add
- operations, although this is possible.
-
- <p>A common use for the element set is to find the number of distinct
- elements in the multiset: <code>elementSet().size()</code>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#elementSet()">elementSet</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="type parameter in ForwardingMultiset">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a view of the set of distinct elements in this multiset</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="entrySet()"><!-- --></A><H3>
-entrySet</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="type parameter in ForwardingMultiset">E</A>&gt;&gt; <B>entrySet</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#entrySet()">Multiset</A></CODE></B></DD>
-<DD>Returns a view of the contents of this multiset, grouped into <code>Multiset.Entry</code> instances, each providing an element of the multiset and
- the count of that element. This set contains exactly one entry for each
- distinct element in the multiset (thus it always has the same size as the
- <A HREF="../../../../com/google/common/collect/Multiset.html#elementSet()"><CODE>Multiset.elementSet()</CODE></A>). The order of the elements in the element set is
- unspecified.
-
- <p>The entry set is backed by the same data as the multiset, so any change
- to either is immediately reflected in the other. However, multiset changes
- may or may not be reflected in any <code>Entry</code> instances already
- retrieved from the entry set (this is implementation-dependent).
- Furthermore, implementations are not required to support modifications to
- the entry set at all, and the <code>Entry</code> instances themselves don't
- even have methods for modification. See the specific implementation class
- for more details on how its entry set handles modifications.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#entrySet()">entrySet</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="type parameter in ForwardingMultiset">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a set of entries representing the data of this multiset</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
-equals</H3>
-<PRE>
-public boolean <B>equals</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                      <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#equals(java.lang.Object)">Multiset</A></CODE></B></DD>
-<DD>Compares the specified object with this multiset for equality. Returns
- <code>true</code> if the given object is also a multiset and contains equal
- elements with equal counts, regardless of order.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#equals(java.lang.Object)">equals</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="type parameter in ForwardingMultiset">E</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="type parameter in ForwardingMultiset">E</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="hashCode()"><!-- --></A><H3>
-hashCode</H3>
-<PRE>
-public int <B>hashCode</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#hashCode()">Multiset</A></CODE></B></DD>
-<DD>Returns the hash code for this multiset. This is defined as the sum of
-
- <pre>  (element == null ? 0 : element.hashCode()) ^ count(element)</pre>
-
- over all distinct elements in the multiset. It follows that a multiset and
- its entry set always have the same hash code.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#hashCode()">hashCode</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="type parameter in ForwardingMultiset">E</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="type parameter in ForwardingMultiset">E</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="setCount(java.lang.Object,int)"><!-- --></A><A NAME="setCount(E, int)"><!-- --></A><H3>
-setCount</H3>
-<PRE>
-public int <B>setCount</B>(<A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="type parameter in ForwardingMultiset">E</A>&nbsp;element,
-                    int&nbsp;count)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int)">Multiset</A></CODE></B></DD>
-<DD>Adds or removes the necessary occurrences of an element such that the
- element attains the desired count.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int)">setCount</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="type parameter in ForwardingMultiset">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to add or remove occurrences of; may be null
-     only if explicitly allowed by the implementation<DD><CODE>count</CODE> - the desired count of the element in this multiset
-<DT><B>Returns:</B><DD>the count of the element before the operation; possibly zero</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="setCount(java.lang.Object,int,int)"><!-- --></A><A NAME="setCount(E, int, int)"><!-- --></A><H3>
-setCount</H3>
-<PRE>
-public boolean <B>setCount</B>(<A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="type parameter in ForwardingMultiset">E</A>&nbsp;element,
-                        int&nbsp;oldCount,
-                        int&nbsp;newCount)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int, int)">Multiset</A></CODE></B></DD>
-<DD>Conditionally sets the count of an element to a new value, as described in
- <A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int)"><CODE>Multiset.setCount(Object, int)</CODE></A>, provided that the element has the expected
- current count. If the current count is not <code>oldCount</code>, no change is
- made.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int, int)">setCount</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="type parameter in ForwardingMultiset">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to conditionally set the count of; may be null
-     only if explicitly allowed by the implementation<DD><CODE>oldCount</CODE> - the expected present count of the element in this multiset<DD><CODE>newCount</CODE> - the desired count of the element in this multiset
-<DT><B>Returns:</B><DD><code>true</code> if the condition for modification was met. This
-     implies that the multiset was indeed modified, unless
-     <code>oldCount == newCount</code>.</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ForwardingMultiset.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ForwardingMultiset.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingMultiset.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/ForwardingObject.html b/javadoc/com/google/common/collect/ForwardingObject.html
deleted file mode 100644
index 559747c..0000000
--- a/javadoc/com/google/common/collect/ForwardingObject.html
+++ /dev/null
@@ -1,321 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:58 PST 2010 -->
-<TITLE>
-ForwardingObject (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="ForwardingObject (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ForwardingObject.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingQueue.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ForwardingObject.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingObject.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class ForwardingObject</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ForwardingObject</B>
-</PRE>
-<DL>
-<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A>, <A HREF="../../../../com/google/common/util/concurrent/ForwardingFuture.html" title="class in com.google.common.util.concurrent">ForwardingFuture</A>, <A HREF="../../../../com/google/common/collect/ForwardingIterator.html" title="class in com.google.common.collect">ForwardingIterator</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>, <A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="class in com.google.common.collect">ForwardingMapEntry</A>, <A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect">ForwardingMultimap</A>, <A HREF="../../../../com/google/common/util/concurrent/ForwardingService.html" title="class in com.google.common.util.concurrent">ForwardingService</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public abstract class <B>ForwardingObject</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
-</PRE>
-
-<P>
-An abstract base class for implementing the <a
- href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
- The <A HREF="../../../../com/google/common/collect/ForwardingObject.html#delegate()"><CODE>delegate()</CODE></A> method must be overridden to return the instance
- being decorated.
-
- This class does <i>not</i> forward the <code>hashCode</code> and <code>equals</code>
- methods through to the backing object, but relies on <code>Object</code>'s
- implementation. This is necessary to preserve the symmetry of <code>equals</code>.
- Custom definitions of equality are usually based on an interface, such as
- <code>Set</code> or <code>List</code>, so that the implementation of <code>equals</code> can
- cast the object being tested for equality to the custom interface. <code>ForwardingObject</code> implements no such custom interfaces directly; they
- are implemented only in subclasses. Therefore, forwarding <code>equals</code>
- would break symmetry, as the forwarding object might consider itself equal to
- the object being tested, but the reverse could not be true. This behavior is
- consistent with the JDK's collection wrappers, such as
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#unmodifiableCollection(java.util.Collection)" title="class or interface in java.util"><CODE>Collections.unmodifiableCollection(java.util.Collection<? extends T>)</CODE></A>. Use an
- interface-specific subclass of <code>ForwardingObject</code>, such as <A HREF="../../../../com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect"><CODE>ForwardingList</CODE></A>, to preserve equality behavior, or override <code>equals</code>
- directly.
-
- <p>The <code>toString</code> method is forwarded to the delegate. Although this
- class does not implement <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io"><CODE>Serializable</CODE></A>, a serializable subclass may be
- created since this class has a parameter-less constructor.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Mike Bostock</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected </CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingObject.html#ForwardingObject()">ForwardingObject</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sole constructor.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected abstract &nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingObject.html#delegate()">delegate</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the backing delegate instance that methods are forwarded to.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingObject.html#toString()">toString</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the string representation generated by the delegate's
- <code>toString</code> method.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="ForwardingObject()"><!-- --></A><H3>
-ForwardingObject</H3>
-<PRE>
-protected <B>ForwardingObject</B>()</PRE>
-<DL>
-<DD>Sole constructor.
-<P>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="delegate()"><!-- --></A><H3>
-delegate</H3>
-<PRE>
-protected abstract <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A> <B>delegate</B>()</PRE>
-<DL>
-<DD>Returns the backing delegate instance that methods are forwarded to.
- Abstract subclasses generally override this method with an abstract method
- that has a more specific return type, such as <A HREF="../../../../com/google/common/collect/ForwardingSet.html#delegate()"><CODE>ForwardingSet.delegate()</CODE></A>. Concrete subclasses override this method to supply
- the instance being decorated.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toString()"><!-- --></A><H3>
-toString</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
-<DL>
-<DD>Returns the string representation generated by the delegate's
- <code>toString</code> method.
-<P>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ForwardingObject.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingQueue.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ForwardingObject.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingObject.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/ForwardingQueue.html b/javadoc/com/google/common/collect/ForwardingQueue.html
deleted file mode 100644
index 5bb0505..0000000
--- a/javadoc/com/google/common/collect/ForwardingQueue.html
+++ /dev/null
@@ -1,425 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:58 PST 2010 -->
-<TITLE>
-ForwardingQueue (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="ForwardingQueue (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ForwardingQueue.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingSet.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ForwardingQueue.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingQueue.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class ForwardingQueue&lt;E&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingObject</A>
-      <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingCollection</A>&lt;E&gt;
-          <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ForwardingQueue&lt;E&gt;</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Queue.html?is-external=true" title="class or interface in java.util">Queue</A>&lt;E&gt;</DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public abstract class <B>ForwardingQueue&lt;E&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A>&lt;E&gt;<DT>implements <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Queue.html?is-external=true" title="class or interface in java.util">Queue</A>&lt;E&gt;</DL>
-</PRE>
-
-<P>
-A queue which forwards all its method calls to another queue. Subclasses
- should override one or more methods to modify the behavior of the backing
- queue as desired per the <a
- href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Mike Bostock</DD>
-<DT><B>See Also:</B><DD><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect"><CODE>ForwardingObject</CODE></A></DL>
-<HR>
-
-<P>
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingQueue.html#ForwardingQueue()">ForwardingQueue</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected abstract &nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Queue.html?is-external=true" title="class or interface in java.util">Queue</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingQueue.html" title="type parameter in ForwardingQueue">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingQueue.html#delegate()">delegate</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the backing delegate instance that methods are forwarded to.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingQueue.html" title="type parameter in ForwardingQueue">E</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingQueue.html#element()">element</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingQueue.html#offer(E)">offer</A></B>(<A HREF="../../../../com/google/common/collect/ForwardingQueue.html" title="type parameter in ForwardingQueue">E</A>&nbsp;o)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingQueue.html" title="type parameter in ForwardingQueue">E</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingQueue.html#peek()">peek</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingQueue.html" title="type parameter in ForwardingQueue">E</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingQueue.html#poll()">poll</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingQueue.html" title="type parameter in ForwardingQueue">E</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingQueue.html#remove()">remove</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingCollection"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingCollection.html#add(E)">add</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#addAll(java.util.Collection)">addAll</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#clear()">clear</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#contains(java.lang.Object)">contains</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#containsAll(java.util.Collection)">containsAll</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#iterator()">iterator</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#remove(java.lang.Object)">remove</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#removeAll(java.util.Collection)">removeAll</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#retainAll(java.util.Collection)">retainAll</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#size()">size</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#toArray()">toArray</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#toArray(T[])">toArray</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingObject"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#toString()">toString</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.util.Queue"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Queue.html?is-external=true" title="class or interface in java.util">Queue</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Queue.html?is-external=true#add(E)" title="class or interface in java.util">add</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.util.Collection"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#addAll(java.util.Collection)" title="class or interface in java.util">addAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#clear()" title="class or interface in java.util">clear</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util">contains</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util">containsAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#iterator()" title="class or interface in java.util">iterator</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#removeAll(java.util.Collection)" title="class or interface in java.util">removeAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util">retainAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#size()" title="class or interface in java.util">size</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#toArray()" title="class or interface in java.util">toArray</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#toArray(T[])" title="class or interface in java.util">toArray</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="ForwardingQueue()"><!-- --></A><H3>
-ForwardingQueue</H3>
-<PRE>
-public <B>ForwardingQueue</B>()</PRE>
-<DL>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="delegate()"><!-- --></A><H3>
-delegate</H3>
-<PRE>
-protected abstract <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Queue.html?is-external=true" title="class or interface in java.util">Queue</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingQueue.html" title="type parameter in ForwardingQueue">E</A>&gt; <B>delegate</B>()</PRE>
-<DL>
-<DD><B>Description copied from class: <CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#delegate()">ForwardingObject</A></CODE></B></DD>
-<DD>Returns the backing delegate instance that methods are forwarded to.
- Abstract subclasses generally override this method with an abstract method
- that has a more specific return type, such as <A HREF="../../../../com/google/common/collect/ForwardingSet.html#delegate()"><CODE>ForwardingSet.delegate()</CODE></A>. Concrete subclasses override this method to supply
- the instance being decorated.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingCollection.html#delegate()">delegate</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingQueue.html" title="type parameter in ForwardingQueue">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="offer(java.lang.Object)"><!-- --></A><A NAME="offer(E)"><!-- --></A><H3>
-offer</H3>
-<PRE>
-public boolean <B>offer</B>(<A HREF="../../../../com/google/common/collect/ForwardingQueue.html" title="type parameter in ForwardingQueue">E</A>&nbsp;o)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Queue.html?is-external=true#offer(E)" title="class or interface in java.util">offer</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Queue.html?is-external=true" title="class or interface in java.util">Queue</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingQueue.html" title="type parameter in ForwardingQueue">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="poll()"><!-- --></A><H3>
-poll</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ForwardingQueue.html" title="type parameter in ForwardingQueue">E</A> <B>poll</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Queue.html?is-external=true#poll()" title="class or interface in java.util">poll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Queue.html?is-external=true" title="class or interface in java.util">Queue</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingQueue.html" title="type parameter in ForwardingQueue">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="remove()"><!-- --></A><H3>
-remove</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ForwardingQueue.html" title="type parameter in ForwardingQueue">E</A> <B>remove</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Queue.html?is-external=true#remove()" title="class or interface in java.util">remove</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Queue.html?is-external=true" title="class or interface in java.util">Queue</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingQueue.html" title="type parameter in ForwardingQueue">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="peek()"><!-- --></A><H3>
-peek</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ForwardingQueue.html" title="type parameter in ForwardingQueue">E</A> <B>peek</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Queue.html?is-external=true#peek()" title="class or interface in java.util">peek</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Queue.html?is-external=true" title="class or interface in java.util">Queue</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingQueue.html" title="type parameter in ForwardingQueue">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="element()"><!-- --></A><H3>
-element</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ForwardingQueue.html" title="type parameter in ForwardingQueue">E</A> <B>element</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Queue.html?is-external=true#element()" title="class or interface in java.util">element</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Queue.html?is-external=true" title="class or interface in java.util">Queue</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingQueue.html" title="type parameter in ForwardingQueue">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ForwardingQueue.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingSet.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ForwardingQueue.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingQueue.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/ForwardingSet.html b/javadoc/com/google/common/collect/ForwardingSet.html
deleted file mode 100644
index bb3708e..0000000
--- a/javadoc/com/google/common/collect/ForwardingSet.html
+++ /dev/null
@@ -1,354 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:58 PST 2010 -->
-<TITLE>
-ForwardingSet (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="ForwardingSet (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ForwardingSet.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingQueue.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ForwardingSet.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingSet.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class ForwardingSet&lt;E&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingObject</A>
-      <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingCollection</A>&lt;E&gt;
-          <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ForwardingSet&lt;E&gt;</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt;</DD>
-</DL>
-<DL>
-<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="class in com.google.common.collect">ForwardingSortedSet</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public abstract class <B>ForwardingSet&lt;E&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A>&lt;E&gt;<DT>implements <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt;</DL>
-</PRE>
-
-<P>
-A set which forwards all its method calls to another set. Subclasses should
- override one or more methods to modify the behavior of the backing set as
- desired per the <a
- href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Kevin Bourrillion</DD>
-<DT><B>See Also:</B><DD><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect"><CODE>ForwardingObject</CODE></A></DL>
-<HR>
-
-<P>
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingSet.html#ForwardingSet()">ForwardingSet</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected abstract &nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSet.html" title="type parameter in ForwardingSet">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingSet.html#delegate()">delegate</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the backing delegate instance that methods are forwarded to.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingSet.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingSet.html#hashCode()">hashCode</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingCollection"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingCollection.html#add(E)">add</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#addAll(java.util.Collection)">addAll</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#clear()">clear</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#contains(java.lang.Object)">contains</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#containsAll(java.util.Collection)">containsAll</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#iterator()">iterator</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#remove(java.lang.Object)">remove</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#removeAll(java.util.Collection)">removeAll</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#retainAll(java.util.Collection)">retainAll</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#size()">size</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#toArray()">toArray</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#toArray(T[])">toArray</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingObject"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#toString()">toString</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.util.Set"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#add(E)" title="class or interface in java.util">add</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#addAll(java.util.Collection)" title="class or interface in java.util">addAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#clear()" title="class or interface in java.util">clear</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util">contains</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util">containsAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#iterator()" title="class or interface in java.util">iterator</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#removeAll(java.util.Collection)" title="class or interface in java.util">removeAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util">retainAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#size()" title="class or interface in java.util">size</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#toArray()" title="class or interface in java.util">toArray</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#toArray(T[])" title="class or interface in java.util">toArray</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="ForwardingSet()"><!-- --></A><H3>
-ForwardingSet</H3>
-<PRE>
-public <B>ForwardingSet</B>()</PRE>
-<DL>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="delegate()"><!-- --></A><H3>
-delegate</H3>
-<PRE>
-protected abstract <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSet.html" title="type parameter in ForwardingSet">E</A>&gt; <B>delegate</B>()</PRE>
-<DL>
-<DD><B>Description copied from class: <CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#delegate()">ForwardingObject</A></CODE></B></DD>
-<DD>Returns the backing delegate instance that methods are forwarded to.
- Abstract subclasses generally override this method with an abstract method
- that has a more specific return type, such as <A HREF="../../../../com/google/common/collect/ForwardingSet.html#delegate()"><CODE>delegate()</CODE></A>. Concrete subclasses override this method to supply
- the instance being decorated.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingCollection.html#delegate()">delegate</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSet.html" title="type parameter in ForwardingSet">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
-equals</H3>
-<PRE>
-public boolean <B>equals</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                      <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSet.html" title="type parameter in ForwardingSet">E</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSet.html" title="type parameter in ForwardingSet">E</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="hashCode()"><!-- --></A><H3>
-hashCode</H3>
-<PRE>
-public int <B>hashCode</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSet.html" title="type parameter in ForwardingSet">E</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSet.html" title="type parameter in ForwardingSet">E</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ForwardingSet.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingQueue.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ForwardingSet.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingSet.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/ForwardingSortedMap.html b/javadoc/com/google/common/collect/ForwardingSortedMap.html
deleted file mode 100644
index f229991..0000000
--- a/javadoc/com/google/common/collect/ForwardingSortedMap.html
+++ /dev/null
@@ -1,468 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:58 PST 2010 -->
-<TITLE>
-ForwardingSortedMap (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="ForwardingSortedMap (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ForwardingSortedMap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingSet.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ForwardingSortedMap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingSortedMap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class ForwardingSortedMap&lt;K,V&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingObject</A>
-      <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingMap</A>&lt;K,V&gt;
-          <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ForwardingSortedMap&lt;K,V&gt;</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;K,V&gt;</DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public abstract class <B>ForwardingSortedMap&lt;K,V&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;<DT>implements <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;K,V&gt;</DL>
-</PRE>
-
-<P>
-A sorted map which forwards all its method calls to another sorted map.
- Subclasses should override one or more methods to modify the behavior of
- the backing sorted map as desired per the <a
- href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Mike Bostock</DD>
-<DT><B>See Also:</B><DD><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect"><CODE>ForwardingObject</CODE></A></DL>
-<HR>
-
-<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-<A NAME="nested_class_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Nested Class Summary</B></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;<A NAME="nested_classes_inherited_from_class_java.util.Map"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Nested classes/interfaces inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">V</A>&gt;</CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html#ForwardingSortedMap()">ForwardingSortedMap</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super <A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html#comparator()">comparator</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected abstract &nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html#delegate()">delegate</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the backing delegate instance that methods are forwarded to.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html#firstKey()">firstKey</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html#headMap(K)">headMap</A></B>(<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A>&nbsp;toKey)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html#lastKey()">lastKey</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html#subMap(K, K)">subMap</A></B>(<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A>&nbsp;fromKey,
-       <A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A>&nbsp;toKey)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html#tailMap(K)">tailMap</A></B>(<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A>&nbsp;fromKey)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingMap"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#clear()">clear</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#containsKey(java.lang.Object)">containsKey</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#containsValue(java.lang.Object)">containsValue</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#entrySet()">entrySet</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#equals(java.lang.Object)">equals</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#get(java.lang.Object)">get</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#hashCode()">hashCode</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#keySet()">keySet</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#put(K, V)">put</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#putAll(java.util.Map)">putAll</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#remove(java.lang.Object)">remove</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#size()">size</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#values()">values</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingObject"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#toString()">toString</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.util.SortedMap"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true#entrySet()" title="class or interface in java.util">entrySet</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true#keySet()" title="class or interface in java.util">keySet</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true#values()" title="class or interface in java.util">values</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.util.Map"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#clear()" title="class or interface in java.util">clear</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsKey(java.lang.Object)" title="class or interface in java.util">containsKey</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsValue(java.lang.Object)" title="class or interface in java.util">containsValue</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#get(java.lang.Object)" title="class or interface in java.util">get</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#put(K, V)" title="class or interface in java.util">put</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#putAll(java.util.Map)" title="class or interface in java.util">putAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#size()" title="class or interface in java.util">size</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="ForwardingSortedMap()"><!-- --></A><H3>
-ForwardingSortedMap</H3>
-<PRE>
-public <B>ForwardingSortedMap</B>()</PRE>
-<DL>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="delegate()"><!-- --></A><H3>
-delegate</H3>
-<PRE>
-protected abstract <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">V</A>&gt; <B>delegate</B>()</PRE>
-<DL>
-<DD><B>Description copied from class: <CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#delegate()">ForwardingObject</A></CODE></B></DD>
-<DD>Returns the backing delegate instance that methods are forwarded to.
- Abstract subclasses generally override this method with an abstract method
- that has a more specific return type, such as <A HREF="../../../../com/google/common/collect/ForwardingSet.html#delegate()"><CODE>ForwardingSet.delegate()</CODE></A>. Concrete subclasses override this method to supply
- the instance being decorated.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#delegate()">delegate</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="comparator()"><!-- --></A><H3>
-comparator</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super <A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A>&gt; <B>comparator</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true#comparator()" title="class or interface in java.util">comparator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="firstKey()"><!-- --></A><H3>
-firstKey</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A> <B>firstKey</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true#firstKey()" title="class or interface in java.util">firstKey</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="headMap(java.lang.Object)"><!-- --></A><A NAME="headMap(K)"><!-- --></A><H3>
-headMap</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">V</A>&gt; <B>headMap</B>(<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A>&nbsp;toKey)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true#headMap(K)" title="class or interface in java.util">headMap</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="lastKey()"><!-- --></A><H3>
-lastKey</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A> <B>lastKey</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true#lastKey()" title="class or interface in java.util">lastKey</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="subMap(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="subMap(K, K)"><!-- --></A><H3>
-subMap</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">V</A>&gt; <B>subMap</B>(<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A>&nbsp;fromKey,
-                             <A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A>&nbsp;toKey)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true#subMap(K, K)" title="class or interface in java.util">subMap</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="tailMap(java.lang.Object)"><!-- --></A><A NAME="tailMap(K)"><!-- --></A><H3>
-tailMap</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">V</A>&gt; <B>tailMap</B>(<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A>&nbsp;fromKey)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true#tailMap(K)" title="class or interface in java.util">tailMap</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ForwardingSortedMap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingSet.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ForwardingSortedMap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingSortedMap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/ForwardingSortedSet.html b/javadoc/com/google/common/collect/ForwardingSortedSet.html
deleted file mode 100644
index 5c4f4a7..0000000
--- a/javadoc/com/google/common/collect/ForwardingSortedSet.html
+++ /dev/null
@@ -1,450 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:58 PST 2010 -->
-<TITLE>
-ForwardingSortedSet (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="ForwardingSortedSet (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ForwardingSortedSet.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ForwardingSortedSet.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingSortedSet.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class ForwardingSortedSet&lt;E&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingObject</A>
-      <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingCollection</A>&lt;E&gt;
-          <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingSet.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingSet</A>&lt;E&gt;
-              <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ForwardingSortedSet&lt;E&gt;</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;E&gt;</DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public abstract class <B>ForwardingSortedSet&lt;E&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ForwardingSet.html" title="class in com.google.common.collect">ForwardingSet</A>&lt;E&gt;<DT>implements <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;E&gt;</DL>
-</PRE>
-
-<P>
-A sorted set which forwards all its method calls to another sorted set.
- Subclasses should override one or more methods to modify the behavior of the
- backing sorted set as desired per the <a
- href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Mike Bostock</DD>
-<DT><B>See Also:</B><DD><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect"><CODE>ForwardingObject</CODE></A></DL>
-<HR>
-
-<P>
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html#ForwardingSortedSet()">ForwardingSortedSet</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super <A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html#comparator()">comparator</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected abstract &nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html#delegate()">delegate</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the backing delegate instance that methods are forwarded to.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html#first()">first</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html#headSet(E)">headSet</A></B>(<A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A>&nbsp;toElement)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html#last()">last</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html#subSet(E, E)">subSet</A></B>(<A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A>&nbsp;fromElement,
-       <A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A>&nbsp;toElement)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html#tailSet(E)">tailSet</A></B>(<A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A>&nbsp;fromElement)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingSet"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingSet.html" title="class in com.google.common.collect">ForwardingSet</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingSet.html#equals(java.lang.Object)">equals</A>, <A HREF="../../../../com/google/common/collect/ForwardingSet.html#hashCode()">hashCode</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingCollection"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingCollection.html#add(E)">add</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#addAll(java.util.Collection)">addAll</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#clear()">clear</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#contains(java.lang.Object)">contains</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#containsAll(java.util.Collection)">containsAll</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#iterator()">iterator</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#remove(java.lang.Object)">remove</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#removeAll(java.util.Collection)">removeAll</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#retainAll(java.util.Collection)">retainAll</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#size()">size</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#toArray()">toArray</A>, <A HREF="../../../../com/google/common/collect/ForwardingCollection.html#toArray(T[])">toArray</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingObject"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#toString()">toString</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.util.Set"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#add(E)" title="class or interface in java.util">add</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#addAll(java.util.Collection)" title="class or interface in java.util">addAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#clear()" title="class or interface in java.util">clear</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util">contains</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util">containsAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#iterator()" title="class or interface in java.util">iterator</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#removeAll(java.util.Collection)" title="class or interface in java.util">removeAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util">retainAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#size()" title="class or interface in java.util">size</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#toArray()" title="class or interface in java.util">toArray</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#toArray(T[])" title="class or interface in java.util">toArray</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="ForwardingSortedSet()"><!-- --></A><H3>
-ForwardingSortedSet</H3>
-<PRE>
-public <B>ForwardingSortedSet</B>()</PRE>
-<DL>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="delegate()"><!-- --></A><H3>
-delegate</H3>
-<PRE>
-protected abstract <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A>&gt; <B>delegate</B>()</PRE>
-<DL>
-<DD><B>Description copied from class: <CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#delegate()">ForwardingObject</A></CODE></B></DD>
-<DD>Returns the backing delegate instance that methods are forwarded to.
- Abstract subclasses generally override this method with an abstract method
- that has a more specific return type, such as <A HREF="../../../../com/google/common/collect/ForwardingSet.html#delegate()"><CODE>ForwardingSet.delegate()</CODE></A>. Concrete subclasses override this method to supply
- the instance being decorated.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingSet.html#delegate()">delegate</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingSet.html" title="class in com.google.common.collect">ForwardingSet</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="comparator()"><!-- --></A><H3>
-comparator</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super <A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A>&gt; <B>comparator</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true#comparator()" title="class or interface in java.util">comparator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="first()"><!-- --></A><H3>
-first</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A> <B>first</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true#first()" title="class or interface in java.util">first</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="headSet(java.lang.Object)"><!-- --></A><A NAME="headSet(E)"><!-- --></A><H3>
-headSet</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A>&gt; <B>headSet</B>(<A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A>&nbsp;toElement)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true#headSet(E)" title="class or interface in java.util">headSet</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="last()"><!-- --></A><H3>
-last</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A> <B>last</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true#last()" title="class or interface in java.util">last</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="subSet(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="subSet(E, E)"><!-- --></A><H3>
-subSet</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A>&gt; <B>subSet</B>(<A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A>&nbsp;fromElement,
-                           <A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A>&nbsp;toElement)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true#subSet(E, E)" title="class or interface in java.util">subSet</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="tailSet(java.lang.Object)"><!-- --></A><A NAME="tailSet(E)"><!-- --></A><H3>
-tailSet</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A>&gt; <B>tailSet</B>(<A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A>&nbsp;fromElement)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true#tailSet(E)" title="class or interface in java.util">tailSet</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ForwardingSortedSet.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ForwardingSortedSet.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingSortedSet.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/HashBiMap.html b/javadoc/com/google/common/collect/HashBiMap.html
deleted file mode 100644
index c3d4549..0000000
--- a/javadoc/com/google/common/collect/HashBiMap.html
+++ /dev/null
@@ -1,652 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:58 PST 2010 -->
-<TITLE>
-HashBiMap (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="HashBiMap (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/HashBiMap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/HashBiMap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="HashBiMap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class HashBiMap&lt;K,V&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingObject</A>
-      <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingMap</A>&lt;K,V&gt;
-          <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.HashBiMap&lt;K,V&gt;</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public final class <B>HashBiMap&lt;K,V&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</DL>
-</PRE>
-
-<P>
-A <A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect"><CODE>BiMap</CODE></A> backed by two <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util"><CODE>HashMap</CODE></A> instances. This implementation
- allows null keys and values. A <code>HashBiMap</code> and its inverse are both
- serializable.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Mike Bostock</DD>
-<DT><B>See Also:</B><DD><A HREF="../../../../serialized-form.html#com.google.common.collect.HashBiMap">Serialized Form</A></DL>
-<HR>
-
-<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-<A NAME="nested_class_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Nested Class Summary</B></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;<A NAME="nested_classes_inherited_from_class_java.util.Map"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Nested classes/interfaces inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">V</A>&gt;</CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashBiMap.html#clear()">clear</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashBiMap.html#containsValue(java.lang.Object)">containsValue</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect">HashBiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashBiMap.html#create()">create</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new, empty <code>HashBiMap</code> with the default initial capacity
- (16).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect">HashBiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashBiMap.html#create(int)">create</A></B>(int&nbsp;expectedSize)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a new, empty bimap with the specified expected size.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect">HashBiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashBiMap.html#create(java.util.Map)">create</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;map)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a new bimap containing initial values from <code>map</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected &nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashBiMap.html#delegate()">delegate</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the backing delegate instance that methods are forwarded to.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;K,V&gt;&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashBiMap.html#entrySet()">entrySet</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/HashBiMap.html" title="type parameter in HashBiMap">V</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashBiMap.html#forcePut(K, V)">forcePut</A></B>(<A HREF="../../../../com/google/common/collect/HashBiMap.html" title="type parameter in HashBiMap">K</A>&nbsp;key,
-         <A HREF="../../../../com/google/common/collect/HashBiMap.html" title="type parameter in HashBiMap">V</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An alternate form of <code>put</code> that silently removes any existing entry
- with the value <code>value</code> before proceeding with the <A HREF="../../../../com/google/common/collect/BiMap.html#put(K, V)"><CODE>BiMap.put(K, V)</CODE></A>
- operation.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;V,K&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashBiMap.html#inverse()">inverse</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the inverse view of this bimap, which maps each of this bimap's
- values to its associated key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;K&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashBiMap.html#keySet()">keySet</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/HashBiMap.html" title="type parameter in HashBiMap">V</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashBiMap.html#put(K, V)">put</A></B>(<A HREF="../../../../com/google/common/collect/HashBiMap.html" title="type parameter in HashBiMap">K</A>&nbsp;key,
-    <A HREF="../../../../com/google/common/collect/HashBiMap.html" title="type parameter in HashBiMap">V</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashBiMap.html#putAll(java.util.Map)">putAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;map)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;V</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashBiMap.html#remove(java.lang.Object)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;V&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashBiMap.html#values()">values</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingMap"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#containsKey(java.lang.Object)">containsKey</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#equals(java.lang.Object)">equals</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#get(java.lang.Object)">get</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#hashCode()">hashCode</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#size()">size</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingObject"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#toString()">toString</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.util.Map"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsKey(java.lang.Object)" title="class or interface in java.util">containsKey</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#get(java.lang.Object)" title="class or interface in java.util">get</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#size()" title="class or interface in java.util">size</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="create()"><!-- --></A><H3>
-create</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect">HashBiMap</A>&lt;K,V&gt; <B>create</B>()</PRE>
-<DL>
-<DD>Returns a new, empty <code>HashBiMap</code> with the default initial capacity
- (16).
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="create(int)"><!-- --></A><H3>
-create</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect">HashBiMap</A>&lt;K,V&gt; <B>create</B>(int&nbsp;expectedSize)</PRE>
-<DL>
-<DD>Constructs a new, empty bimap with the specified expected size.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>expectedSize</CODE> - the expected number of entries
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if the specified expected size is
-     negative</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="create(java.util.Map)"><!-- --></A><H3>
-create</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect">HashBiMap</A>&lt;K,V&gt; <B>create</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;map)</PRE>
-<DL>
-<DD>Constructs a new bimap containing initial values from <code>map</code>. The
- bimap is created with an initial capacity sufficient to hold the mappings
- in the specified map.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="put(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="put(K, V)"><!-- --></A><H3>
-put</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/HashBiMap.html" title="type parameter in HashBiMap">V</A> <B>put</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-             <A HREF="../../../../com/google/common/collect/HashBiMap.html" title="type parameter in HashBiMap">K</A>&nbsp;key,
-             <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-             <A HREF="../../../../com/google/common/collect/HashBiMap.html" title="type parameter in HashBiMap">V</A>&nbsp;value)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/BiMap.html#put(K, V)">BiMap</A></CODE></B></DD>
-<DD>
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/BiMap.html#put(K, V)">put</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;<A HREF="../../../../com/google/common/collect/HashBiMap.html" title="type parameter in HashBiMap">K</A>,<A HREF="../../../../com/google/common/collect/HashBiMap.html" title="type parameter in HashBiMap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#put(K, V)" title="class or interface in java.util">put</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/HashBiMap.html" title="type parameter in HashBiMap">K</A>,<A HREF="../../../../com/google/common/collect/HashBiMap.html" title="type parameter in HashBiMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="forcePut(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="forcePut(K, V)"><!-- --></A><H3>
-forcePut</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/HashBiMap.html" title="type parameter in HashBiMap">V</A> <B>forcePut</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                  <A HREF="../../../../com/google/common/collect/HashBiMap.html" title="type parameter in HashBiMap">K</A>&nbsp;key,
-                  <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                  <A HREF="../../../../com/google/common/collect/HashBiMap.html" title="type parameter in HashBiMap">V</A>&nbsp;value)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/BiMap.html#forcePut(K, V)">BiMap</A></CODE></B></DD>
-<DD>An alternate form of <code>put</code> that silently removes any existing entry
- with the value <code>value</code> before proceeding with the <A HREF="../../../../com/google/common/collect/BiMap.html#put(K, V)"><CODE>BiMap.put(K, V)</CODE></A>
- operation. If the bimap previously contained the provided key-value
- mapping, this method has no effect.
-
- <p>Note that a successful call to this method could cause the size of the
- bimap to increase by one, stay the same, or even decrease by one.
-
- <p><b>Warning</b>: If an existing entry with this value is removed, the key
- for that entry is discarded and not returned.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/BiMap.html#forcePut(K, V)">forcePut</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;<A HREF="../../../../com/google/common/collect/HashBiMap.html" title="type parameter in HashBiMap">K</A>,<A HREF="../../../../com/google/common/collect/HashBiMap.html" title="type parameter in HashBiMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - the key with which the specified value is to be associated<DD><CODE>value</CODE> - the value to be associated with the specified key
-<DT><B>Returns:</B><DD>the value which was previously associated with the key, which may
-     be <code>null</code>, or <code>null</code> if there was no previous entry</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="delegate()"><!-- --></A><H3>
-delegate</H3>
-<PRE>
-protected <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt; <B>delegate</B>()</PRE>
-<DL>
-<DD><B>Description copied from class: <CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#delegate()">ForwardingObject</A></CODE></B></DD>
-<DD>Returns the backing delegate instance that methods are forwarded to.
- Abstract subclasses generally override this method with an abstract method
- that has a more specific return type, such as <A HREF="../../../../com/google/common/collect/ForwardingSet.html#delegate()"><CODE>ForwardingSet.delegate()</CODE></A>. Concrete subclasses override this method to supply
- the instance being decorated.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#delegate()">delegate</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="containsValue(java.lang.Object)"><!-- --></A><H3>
-containsValue</H3>
-<PRE>
-public boolean <B>containsValue</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsValue(java.lang.Object)" title="class or interface in java.util">containsValue</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#containsValue(java.lang.Object)">containsValue</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="remove(java.lang.Object)"><!-- --></A><H3>
-remove</H3>
-<PRE>
-public V <B>remove</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#remove(java.lang.Object)">remove</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="putAll(java.util.Map)"><!-- --></A><H3>
-putAll</H3>
-<PRE>
-public void <B>putAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;map)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/BiMap.html#putAll(java.util.Map)">BiMap</A></CODE></B></DD>
-<DD>
-
- <p><b>Warning:</b> the results of calling this method may vary depending on
- the iteration order of <code>map</code>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/BiMap.html#putAll(java.util.Map)">putAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#putAll(java.util.Map)" title="class or interface in java.util">putAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#putAll(java.util.Map)">putAll</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="clear()"><!-- --></A><H3>
-clear</H3>
-<PRE>
-public void <B>clear</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#clear()" title="class or interface in java.util">clear</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#clear()">clear</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="inverse()"><!-- --></A><H3>
-inverse</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;V,K&gt; <B>inverse</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/BiMap.html#inverse()">BiMap</A></CODE></B></DD>
-<DD>Returns the inverse view of this bimap, which maps each of this bimap's
- values to its associated key. The two bimaps are backed by the same data;
- any changes to one will appear in the other.
-
- <p><b>Note:</b>There is no guaranteed correspondence between the iteration
- order of a bimap and that of its inverse.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/BiMap.html#inverse()">inverse</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>the inverse view of this bimap</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="keySet()"><!-- --></A><H3>
-keySet</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;K&gt; <B>keySet</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#keySet()" title="class or interface in java.util">keySet</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#keySet()">keySet</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="values()"><!-- --></A><H3>
-values</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;V&gt; <B>values</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/BiMap.html#values()">BiMap</A></CODE></B></DD>
-<DD>
-
- <p>Because a bimap has unique values, this method returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A>,
- instead of the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A> specified in the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A>
- interface.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/BiMap.html#values()">values</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#values()" title="class or interface in java.util">values</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#values()">values</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="entrySet()"><!-- --></A><H3>
-entrySet</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;K,V&gt;&gt; <B>entrySet</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#entrySet()" title="class or interface in java.util">entrySet</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#entrySet()">entrySet</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/HashBiMap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/HashBiMap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="HashBiMap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/HashMultimap.html b/javadoc/com/google/common/collect/HashMultimap.html
deleted file mode 100644
index 4db423d..0000000
--- a/javadoc/com/google/common/collect/HashMultimap.html
+++ /dev/null
@@ -1,951 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:58 PST 2010 -->
-<TITLE>
-HashMultimap (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="HashMultimap (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/HashMultimap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/HashMultimap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="HashMultimap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class HashMultimap&lt;K,V&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.HashMultimap&lt;K,V&gt;</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;, <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public final class <B>HashMultimap&lt;K,V&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
-</PRE>
-
-<P>
-Implementation of <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A> using hash tables.
-
- <p>The multimap does not store duplicate key-value pairs. Adding a new
- key-value pair equal to an existing key-value pair has no effect.
-
- <p>Keys and values may be null. All optional multimap methods are supported,
- and all returned views are modifiable.
-
- <p>This class is not threadsafe when any concurrent operations update the
- multimap. Concurrent read operations will work correctly. To allow concurrent
- update operations, wrap your multimap with a call to <A HREF="../../../../com/google/common/collect/Multimaps.html#synchronizedSetMultimap(com.google.common.collect.SetMultimap)"><CODE>Multimaps.synchronizedSetMultimap(com.google.common.collect.SetMultimap<K, V>)</CODE></A>.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Jared Levy</DD>
-<DT><B>See Also:</B><DD><A HREF="../../../../serialized-form.html#com.google.common.collect.HashMultimap">Serialized Form</A></DL>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultimap.html#asMap()">asMap</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a map view that associates each key with the corresponding values
- in the multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultimap.html#clear()">clear</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes all key-value pairs from the multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultimap.html#containsEntry(java.lang.Object, java.lang.Object)">containsEntry</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
-              <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains the specified key-value pair.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultimap.html#containsKey(java.lang.Object)">containsKey</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains any values for the specified
- key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultimap.html#containsValue(java.lang.Object)">containsValue</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains the specified value for any
- key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect">HashMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultimap.html#create()">create</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new, empty <code>HashMultimap</code> with the default initial
- capacities.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect">HashMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultimap.html#create(int, int)">create</A></B>(int&nbsp;expectedKeys,
-       int&nbsp;expectedValuesPerKey)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs an empty <code>HashMultimap</code> with enough capacity to hold the
- specified numbers of keys and values without rehashing.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect">HashMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultimap.html#create(com.google.common.collect.Multimap)">create</A></B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a <code>HashMultimap</code> with the same mappings as the specified
- multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;K,V&gt;&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultimap.html#entries()">entries</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection of all key-value pairs.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultimap.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares the specified object to this multimap for equality.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;V&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultimap.html#get(K)">get</A></B>(K&nbsp;key)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection view of all values associated with a key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultimap.html#hashCode()">hashCode</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the hash code for this multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultimap.html#isEmpty()">isEmpty</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains no key-value pairs.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;K&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultimap.html#keys()">keys</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection, which may contain duplicates, of all keys.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;K&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultimap.html#keySet()">keySet</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the set of all keys, each appearing once in the returned set.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultimap.html#put(K, V)">put</A></B>(K&nbsp;key,
-    V&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a key-value pair in the multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultimap.html#putAll(K, java.lang.Iterable)">putAll</A></B>(K&nbsp;key,
-       <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends V&gt;&nbsp;values)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a collection of values with the same key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultimap.html#putAll(com.google.common.collect.Multimap)">putAll</A></B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies all of another multimap's key-value pairs into this multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultimap.html#remove(java.lang.Object, java.lang.Object)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
-       <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes a key-value pair from the multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;V&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultimap.html#removeAll(java.lang.Object)">removeAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes all values associated with a given key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;V&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></B>(K&nbsp;key,
-              <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends V&gt;&nbsp;values)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a collection of values with the same key, replacing any existing
- values for that key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultimap.html#size()">size</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of key-value pairs in the multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultimap.html#toString()">toString</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a string representation of the multimap, generated by calling
- <code>toString</code> on the map returned by <A HREF="../../../../com/google/common/collect/Multimap.html#asMap()"><CODE>Multimap.asMap()</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultimap.html#values()">values</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection of all values in the multimap.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.SetMultimap"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface com.google.common.collect.<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html#asMap()">asMap</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.Multimap"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface com.google.common.collect.<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#clear()">clear</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#containsEntry(java.lang.Object, java.lang.Object)">containsEntry</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#containsKey(java.lang.Object)">containsKey</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#containsValue(java.lang.Object)">containsValue</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#hashCode()">hashCode</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#keys()">keys</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#keySet()">keySet</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#putAll(K, java.lang.Iterable)">putAll</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#putAll(com.google.common.collect.Multimap)">putAll</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#remove(java.lang.Object, java.lang.Object)">remove</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#size()">size</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#values()">values</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="create()"><!-- --></A><H3>
-create</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect">HashMultimap</A>&lt;K,V&gt; <B>create</B>()</PRE>
-<DL>
-<DD>Creates a new, empty <code>HashMultimap</code> with the default initial
- capacities.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="create(int, int)"><!-- --></A><H3>
-create</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect">HashMultimap</A>&lt;K,V&gt; <B>create</B>(int&nbsp;expectedKeys,
-                                             int&nbsp;expectedValuesPerKey)</PRE>
-<DL>
-<DD>Constructs an empty <code>HashMultimap</code> with enough capacity to hold the
- specified numbers of keys and values without rehashing.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>expectedKeys</CODE> - the expected number of distinct keys<DD><CODE>expectedValuesPerKey</CODE> - the expected average number of values per key
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>expectedKeys</code> or <code>expectedValuesPerKey</code> is negative</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="create(com.google.common.collect.Multimap)"><!-- --></A><H3>
-create</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect">HashMultimap</A>&lt;K,V&gt; <B>create</B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</PRE>
-<DL>
-<DD>Constructs a <code>HashMultimap</code> with the same mappings as the specified
- multimap. If a key-value mapping appears multiple times in the input
- multimap, it only appears once in the constructed multimap.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>multimap</CODE> - the multimap whose contents are copied to this multimap</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="get(java.lang.Object)"><!-- --></A><A NAME="get(K)"><!-- --></A><H3>
-get</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;V&gt; <B>get</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                  K&nbsp;key)</PRE>
-<DL>
-<DD>Returns a collection view of all values associated with a key. If no
- mappings in the multimap have the provided key, an empty collection is
- returned.
-
- <p>Changes to the returned collection will update the underlying multimap,
- and vice versa.
-
- <p>The returned collection is not serializable.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#get(K)">get</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html#get(K)">get</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to search for in multimap
-<DT><B>Returns:</B><DD>the collection of values that the key maps to</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="entries()"><!-- --></A><H3>
-entries</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;K,V&gt;&gt; <B>entries</B>()</PRE>
-<DL>
-<DD>Returns a collection of all key-value pairs. Changes to the returned
- collection will update the underlying multimap, and vice versa. The entries
- collection does not support the <code>add</code> or <code>addAll</code> operations.
-
- <p>The iterator generated by the returned collection traverses the values
- for one key, followed by the values of a second key, and so on.
-
- <p>Each entry is an immutable snapshot of a key-value mapping in the
- multimap, taken at the time the entry is returned by a method call to the
- collection or its iterator.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#entries()">entries</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html#entries()">entries</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>collection of map entries consisting of key-value pairs</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="removeAll(java.lang.Object)"><!-- --></A><H3>
-removeAll</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;V&gt; <B>removeAll</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                        <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
-<DL>
-<DD>Removes all values associated with a given key.
-
- <p>The returned collection is immutable.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#removeAll(java.lang.Object)">removeAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html#removeAll(java.lang.Object)">removeAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key of entries to remove from the multimap
-<DT><B>Returns:</B><DD>the collection of removed values, or an empty collection if no
-     values were associated with the provided key. The collection
-     <i>may</i> be modifiable, but updating it will have no effect on the
-     multimap.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="replaceValues(java.lang.Object,java.lang.Iterable)"><!-- --></A><A NAME="replaceValues(K, java.lang.Iterable)"><!-- --></A><H3>
-replaceValues</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;V&gt; <B>replaceValues</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                            K&nbsp;key,
-                            <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends V&gt;&nbsp;values)</PRE>
-<DL>
-<DD>Stores a collection of values with the same key, replacing any existing
- values for that key.
-
- <p>The returned collection is immutable.
-
- <p>Any duplicates in <code>values</code> will be stored in the multimap once.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to store in the multimap<DD><CODE>values</CODE> - values to store in the multimap
-<DT><B>Returns:</B><DD>the collection of replaced values, or an empty collection if no
-     values were previously associated with the key. The collection
-     <i>may</i> be modifiable, but updating it will have no effect on the
-     multimap.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="put(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="put(K, V)"><!-- --></A><H3>
-put</H3>
-<PRE>
-public boolean <B>put</B>(K&nbsp;key,
-                   V&nbsp;value)</PRE>
-<DL>
-<DD>Stores a key-value pair in the multimap.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#put(K, V)">put</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to store in the multimap<DD><CODE>value</CODE> - value to store in the multimap
-<DT><B>Returns:</B><DD><code>true</code> if the method increased the size of the multimap, or
-     <code>false</code> if the multimap already contained the key-value pair</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
-equals</H3>
-<PRE>
-public boolean <B>equals</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                      <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
-<DL>
-<DD>Compares the specified object to this multimap for equality.
-
- <p>Two <code>SetMultimap</code> instances are equal if, for each key, they
- contain the same values. Equality does not depend on the ordering of keys
- or values.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#equals(java.lang.Object)">equals</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html#equals(java.lang.Object)">equals</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="size()"><!-- --></A><H3>
-size</H3>
-<PRE>
-public int <B>size</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#size()">Multimap</A></CODE></B></DD>
-<DD>Returns the number of key-value pairs in the multimap.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#size()">size</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="isEmpty()"><!-- --></A><H3>
-isEmpty</H3>
-<PRE>
-public boolean <B>isEmpty</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#isEmpty()">Multimap</A></CODE></B></DD>
-<DD>Returns <code>true</code> if the multimap contains no key-value pairs.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#isEmpty()">isEmpty</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="containsKey(java.lang.Object)"><!-- --></A><H3>
-containsKey</H3>
-<PRE>
-public boolean <B>containsKey</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                           <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsKey(java.lang.Object)">Multimap</A></CODE></B></DD>
-<DD>Returns <code>true</code> if the multimap contains any values for the specified
- key.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsKey(java.lang.Object)">containsKey</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to search for in multimap</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="containsValue(java.lang.Object)"><!-- --></A><H3>
-containsValue</H3>
-<PRE>
-public boolean <B>containsValue</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                             <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsValue(java.lang.Object)">Multimap</A></CODE></B></DD>
-<DD>Returns <code>true</code> if the multimap contains the specified value for any
- key.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsValue(java.lang.Object)">containsValue</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>value</CODE> - value to search for in multimap</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="containsEntry(java.lang.Object, java.lang.Object)"><!-- --></A><H3>
-containsEntry</H3>
-<PRE>
-public boolean <B>containsEntry</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                             <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
-                             <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                             <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsEntry(java.lang.Object, java.lang.Object)">Multimap</A></CODE></B></DD>
-<DD>Returns <code>true</code> if the multimap contains the specified key-value pair.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsEntry(java.lang.Object, java.lang.Object)">containsEntry</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to search for in multimap<DD><CODE>value</CODE> - value to search for in multimap</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="remove(java.lang.Object, java.lang.Object)"><!-- --></A><H3>
-remove</H3>
-<PRE>
-public boolean <B>remove</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                      <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
-                      <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                      <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#remove(java.lang.Object, java.lang.Object)">Multimap</A></CODE></B></DD>
-<DD>Removes a key-value pair from the multimap.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#remove(java.lang.Object, java.lang.Object)">remove</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key of entry to remove from the multimap<DD><CODE>value</CODE> - value of entry to remove the multimap
-<DT><B>Returns:</B><DD><code>true</code> if the multimap changed</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="putAll(java.lang.Object,java.lang.Iterable)"><!-- --></A><A NAME="putAll(K, java.lang.Iterable)"><!-- --></A><H3>
-putAll</H3>
-<PRE>
-public boolean <B>putAll</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                      K&nbsp;key,
-                      <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends V&gt;&nbsp;values)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#putAll(K, java.lang.Iterable)">Multimap</A></CODE></B></DD>
-<DD>Stores a collection of values with the same key.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#putAll(K, java.lang.Iterable)">putAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to store in the multimap<DD><CODE>values</CODE> - values to store in the multimap
-<DT><B>Returns:</B><DD><code>true</code> if the multimap changed</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="putAll(com.google.common.collect.Multimap)"><!-- --></A><H3>
-putAll</H3>
-<PRE>
-public boolean <B>putAll</B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#putAll(com.google.common.collect.Multimap)">Multimap</A></CODE></B></DD>
-<DD>Copies all of another multimap's key-value pairs into this multimap. The
- order in which the mappings are added is determined by
- <code>multimap.entries()</code>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#putAll(com.google.common.collect.Multimap)">putAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>multimap</CODE> - mappings to store in this multimap
-<DT><B>Returns:</B><DD><code>true</code> if the multimap changed</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="clear()"><!-- --></A><H3>
-clear</H3>
-<PRE>
-public void <B>clear</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#clear()">Multimap</A></CODE></B></DD>
-<DD>Removes all key-value pairs from the multimap.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#clear()">clear</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="keySet()"><!-- --></A><H3>
-keySet</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;K&gt; <B>keySet</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#keySet()">Multimap</A></CODE></B></DD>
-<DD>Returns the set of all keys, each appearing once in the returned set.
- Changes to the returned set will update the underlying multimap, and vice
- versa.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#keySet()">keySet</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>the collection of distinct keys</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="keys()"><!-- --></A><H3>
-keys</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;K&gt; <B>keys</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#keys()">Multimap</A></CODE></B></DD>
-<DD>Returns a collection, which may contain duplicates, of all keys. The number
- of times of key appears in the returned multiset equals the number of
- mappings the key has in the multimap. Changes to the returned multiset will
- update the underlying multimap, and vice versa.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#keys()">keys</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a multiset with keys corresponding to the distinct keys of the
-     multimap and frequencies corresponding to the number of values that
-     each key maps to</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="values()"><!-- --></A><H3>
-values</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt; <B>values</B>()</PRE>
-<DL>
-<DD>Returns a collection of all values in the multimap. Changes to the returned
- collection will update the underlying multimap, and vice versa.
-
- <p>The iterator generated by the returned collection traverses the values
- for one key, followed by the values of a second key, and so on.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#values()">values</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>collection of values, which may include the same value multiple
-     times if it occurs in multiple mappings</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="asMap()"><!-- --></A><H3>
-asMap</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt; <B>asMap</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#asMap()">Multimap</A></CODE></B></DD>
-<DD>Returns a map view that associates each key with the corresponding values
- in the multimap. Changes to the returned map, such as element removal,
- will update the underlying multimap. The map does not support
- <code>setValue()</code> on its entries, <code>put</code>, or <code>putAll</code>.
-
- <p>The collections returned by <code>asMap().get(Object)</code> have the same
- behavior as those returned by <A HREF="../../../../com/google/common/collect/Multimap.html#get(K)"><CODE>Multimap.get(K)</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#asMap()">asMap</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a map view from a key to its collection of values</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="hashCode()"><!-- --></A><H3>
-hashCode</H3>
-<PRE>
-public int <B>hashCode</B>()</PRE>
-<DL>
-<DD>Returns the hash code for this multimap.
-
- <p>The hash code of a multimap is defined as the hash code of the map view,
- as returned by <A HREF="../../../../com/google/common/collect/Multimap.html#asMap()"><CODE>Multimap.asMap()</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#hashCode()">hashCode</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#hashCode()" title="class or interface in java.util"><CODE>Map.hashCode()</CODE></A></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toString()"><!-- --></A><H3>
-toString</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
-<DL>
-<DD>Returns a string representation of the multimap, generated by calling
- <code>toString</code> on the map returned by <A HREF="../../../../com/google/common/collect/Multimap.html#asMap()"><CODE>Multimap.asMap()</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a string representation of the multimap</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/HashMultimap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/HashMultimap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="HashMultimap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/HashMultiset.html b/javadoc/com/google/common/collect/HashMultiset.html
deleted file mode 100644
index c874c9c..0000000
--- a/javadoc/com/google/common/collect/HashMultiset.html
+++ /dev/null
@@ -1,1005 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:58 PST 2010 -->
-<TITLE>
-HashMultiset (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="HashMultiset (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/HashMultiset.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/HashMultiset.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="HashMultiset.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class HashMultiset&lt;E&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">java.util.AbstractCollection</A>&lt;E&gt;
-      <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.HashMultiset&lt;E&gt;</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public final class <B>HashMultiset&lt;E&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</DL>
-</PRE>
-
-<P>
-Multiset implementation backed by a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util"><CODE>HashMap</CODE></A>.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Kevin Bourrillion, Jared Levy</DD>
-<DT><B>See Also:</B><DD><A HREF="../../../../serialized-form.html#com.google.common.collect.HashMultiset">Serialized Form</A></DL>
-<HR>
-
-<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-<A NAME="nested_class_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Nested Class Summary</B></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;<A NAME="nested_classes_inherited_from_class_com.google.common.collect.Multiset"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Nested classes/interfaces inherited from interface com.google.common.collect.<A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="type parameter in Multiset.Entry">E</A>&gt;</CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultiset.html#add(E)">add</A></B>(E&nbsp;element)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds a single occurrence of the specified element to this multiset.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultiset.html#add(E, int)">add</A></B>(E&nbsp;element,
-    int&nbsp;occurrences)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds a number of occurrences of an element to this multiset.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultiset.html#addAll(java.util.Collection)">addAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;? extends E&gt;&nbsp;elementsToAdd)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultiset.html#clear()">clear</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultiset.html#contains(java.lang.Object)">contains</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Determines whether this multiset contains the specified element.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultiset.html#containsAll(java.util.Collection)">containsAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if this multiset contains at least one occurrence of
- each element in the specified collection.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultiset.html#count(java.lang.Object)">count</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of occurrences of an element in this multiset (the
- <i>count</i> of the element).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect">HashMultiset</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultiset.html#create()">create</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new, empty <code>HashMultiset</code> using the default initial
- capacity.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect">HashMultiset</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultiset.html#create(int)">create</A></B>(int&nbsp;distinctElements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new, empty <code>HashMultiset</code> with the specified expected
- number of distinct elements.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect">HashMultiset</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultiset.html#create(java.lang.Iterable)">create</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>HashMultiset</code> containing the specified elements.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultiset.html#elementSet()">elementSet</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the set of distinct elements contained in this multiset.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;E&gt;&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultiset.html#entrySet()">entrySet</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of the contents of this multiset, grouped into <code>Multiset.Entry</code> instances, each providing an element of the multiset and
- the count of that element.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultiset.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares the specified object with this multiset for equality.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultiset.html#hashCode()">hashCode</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the hash code for this multiset.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultiset.html#isEmpty()">isEmpty</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;E&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultiset.html#iterator()">iterator</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultiset.html#remove(java.lang.Object)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes a <i>single</i> occurrence of the specified element from this
- multiset, if present.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultiset.html#remove(java.lang.Object, int)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element,
-       int&nbsp;occurrences)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes a number of occurrences of the specified element from this
- multiset.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultiset.html#removeAll(java.util.Collection)">removeAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToRemove)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultiset.html#retainAll(java.util.Collection)">retainAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToRetain)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultiset.html#setCount(E, int)">setCount</A></B>(E&nbsp;element,
-         int&nbsp;count)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds or removes the necessary occurrences of an element such that the
- element attains the desired count.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultiset.html#setCount(E, int, int)">setCount</A></B>(E&nbsp;element,
-         int&nbsp;oldCount,
-         int&nbsp;newCount)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Conditionally sets the count of an element to a new value, as described in
- <A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int)"><CODE>Multiset.setCount(Object, int)</CODE></A>, provided that the element has the expected
- current count.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultiset.html#size()">size</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/HashMultiset.html#toString()">toString</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.util.AbstractCollection"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#toArray()" title="class or interface in java.util">toArray</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#toArray(T[])" title="class or interface in java.util">toArray</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.util.Collection"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#toArray()" title="class or interface in java.util">toArray</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#toArray(T[])" title="class or interface in java.util">toArray</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="create()"><!-- --></A><H3>
-create</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect">HashMultiset</A>&lt;E&gt; <B>create</B>()</PRE>
-<DL>
-<DD>Creates a new, empty <code>HashMultiset</code> using the default initial
- capacity.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="create(int)"><!-- --></A><H3>
-create</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect">HashMultiset</A>&lt;E&gt; <B>create</B>(int&nbsp;distinctElements)</PRE>
-<DL>
-<DD>Creates a new, empty <code>HashMultiset</code> with the specified expected
- number of distinct elements.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>distinctElements</CODE> - the expected number of distinct elements
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>distinctElements</code> is negative</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="create(java.lang.Iterable)"><!-- --></A><H3>
-create</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect">HashMultiset</A>&lt;E&gt; <B>create</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</PRE>
-<DL>
-<DD>Creates a new <code>HashMultiset</code> containing the specified elements.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>elements</CODE> - the elements that the multiset should contain</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="entrySet()"><!-- --></A><H3>
-entrySet</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;E&gt;&gt; <B>entrySet</B>()</PRE>
-<DL>
-<DD>Returns a view of the contents of this multiset, grouped into <code>Multiset.Entry</code> instances, each providing an element of the multiset and
- the count of that element. This set contains exactly one entry for each
- distinct element in the multiset (thus it always has the same size as the
- <A HREF="../../../../com/google/common/collect/Multiset.html#elementSet()"><CODE>Multiset.elementSet()</CODE></A>). The order of the elements in the element set is
- unspecified.
-
- <p>The entry set is backed by the same data as the multiset, so any change
- to either is immediately reflected in the other. However, multiset changes
- may or may not be reflected in any <code>Entry</code> instances already
- retrieved from the entry set (this is implementation-dependent).
- Furthermore, implementations are not required to support modifications to
- the entry set at all, and the <code>Entry</code> instances themselves don't
- even have methods for modification. See the specific implementation class
- for more details on how its entry set handles modifications.
-
- <p>Invoking <A HREF="../../../../com/google/common/collect/Multiset.Entry.html#getCount()"><CODE>Multiset.Entry.getCount()</CODE></A> on an entry in the returned
- set always returns the current count of that element in the multiset, as
- opposed to the count at the time the entry was retrieved.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#entrySet()">entrySet</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a set of entries representing the data of this multiset</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="size()"><!-- --></A><H3>
-size</H3>
-<PRE>
-public int <B>size</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#size()" title="class or interface in java.util">size</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="iterator()"><!-- --></A><H3>
-iterator</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;E&gt; <B>iterator</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#iterator()">Multiset</A></CODE></B></DD>
-<DD>
-
- <p>Elements that occur multiple times in the multiset will appear
- multiple times in this iterator, though not necessarily sequentially.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#iterator()">iterator</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true#iterator()" title="class or interface in java.lang">iterator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#iterator()" title="class or interface in java.util">iterator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="count(java.lang.Object)"><!-- --></A><H3>
-count</H3>
-<PRE>
-public int <B>count</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                 <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#count(java.lang.Object)">Multiset</A></CODE></B></DD>
-<DD>Returns the number of occurrences of an element in this multiset (the
- <i>count</i> of the element). Note that for an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>-based
- multiset, this gives the same result as <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#frequency(java.util.Collection, java.lang.Object)" title="class or interface in java.util"><CODE>Collections.frequency(java.util.Collection<?>, java.lang.Object)</CODE></A>
- (which would presumably perform more poorly).
-
- <p><b>Note:</b> the utility method <A HREF="../../../../com/google/common/collect/Iterables.html#frequency(java.lang.Iterable, java.lang.Object)"><CODE>Iterables.frequency(java.lang.Iterable<?>, java.lang.Object)</CODE></A> generalizes
- this operation; it correctly delegates to this method when dealing with a
- multiset, but it can also accept any other iterable type.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#count(java.lang.Object)">count</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to count occurrences of
-<DT><B>Returns:</B><DD>the number of occurrences of the element in this multiset; possibly
-     zero but never negative</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="add(java.lang.Object,int)"><!-- --></A><A NAME="add(E, int)"><!-- --></A><H3>
-add</H3>
-<PRE>
-public int <B>add</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-               E&nbsp;element,
-               int&nbsp;occurrences)</PRE>
-<DL>
-<DD>Adds a number of occurrences of an element to this multiset. Note that if
- <code>occurrences == 1</code>, this method has the identical effect to <A HREF="../../../../com/google/common/collect/Multiset.html#add(E)"><CODE>Multiset.add(Object)</CODE></A>. This method is functionally equivalent (except in the case
- of overflow) to the call <code>addAll(Collections.nCopies(element,
- occurrences))</code>, which would presumably perform much more poorly.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#add(E, int)">add</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to add occurrences of; may be <code>null</code> only
-     if explicitly allowed by the implementation<DD><CODE>occurrences</CODE> - the number of occurrences of the element to add. May be
-     zero, in which case no change will be made.
-<DT><B>Returns:</B><DD>the count of the element before the operation; possibly zero
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if the call would result in more than
-     <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true#MAX_VALUE" title="class or interface in java.lang"><CODE>Integer.MAX_VALUE</CODE></A> occurrences of <code>element</code> in this
-     multiset.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="remove(java.lang.Object, int)"><!-- --></A><H3>
-remove</H3>
-<PRE>
-public int <B>remove</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                  <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element,
-                  int&nbsp;occurrences)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#remove(java.lang.Object, int)">Multiset</A></CODE></B></DD>
-<DD>Removes a number of occurrences of the specified element from this
- multiset. If the multiset contains fewer than this number of occurrences to
- begin with, all occurrences will be removed.  Note that if
- <code>occurrences == 1</code>, this is functionally equivalent to the call
- <code>remove(element)</code>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#remove(java.lang.Object, int)">remove</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to conditionally remove occurrences of<DD><CODE>occurrences</CODE> - the number of occurrences of the element to remove. May
-     be zero, in which case no change will be made.
-<DT><B>Returns:</B><DD>the count of the element before the operation; possibly zero</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="setCount(java.lang.Object,int)"><!-- --></A><A NAME="setCount(E, int)"><!-- --></A><H3>
-setCount</H3>
-<PRE>
-public int <B>setCount</B>(E&nbsp;element,
-                    int&nbsp;count)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int)">Multiset</A></CODE></B></DD>
-<DD>Adds or removes the necessary occurrences of an element such that the
- element attains the desired count.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int)">setCount</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to add or remove occurrences of; may be null
-     only if explicitly allowed by the implementation<DD><CODE>count</CODE> - the desired count of the element in this multiset
-<DT><B>Returns:</B><DD>the count of the element before the operation; possibly zero</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="isEmpty()"><!-- --></A><H3>
-isEmpty</H3>
-<PRE>
-public boolean <B>isEmpty</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="contains(java.lang.Object)"><!-- --></A><H3>
-contains</H3>
-<PRE>
-public boolean <B>contains</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                        <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#contains(java.lang.Object)">Multiset</A></CODE></B></DD>
-<DD>Determines whether this multiset contains the specified element.
-
- <p>This method refines <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util"><CODE>Collection.contains(java.lang.Object)</CODE></A> to further specify that
- it <b>may not</b> throw an exception in response to <code>element</code> being
- null or of the wrong type.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#contains(java.lang.Object)">contains</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util">contains</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util">contains</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to check for
-<DT><B>Returns:</B><DD><code>true</code> if this multiset contains at least one occurrence of
-     the element</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="add(java.lang.Object)"><!-- --></A><A NAME="add(E)"><!-- --></A><H3>
-add</H3>
-<PRE>
-public boolean <B>add</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                   E&nbsp;element)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#add(E)">Multiset</A></CODE></B></DD>
-<DD>Adds a single occurrence of the specified element to this multiset.
-
- <p>This method refines <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#add(E)" title="class or interface in java.util"><CODE>Collection.add(E)</CODE></A>, which only <i>ensures</i>
- the presence of the element, to further specify that a successful call must
- always increment the count of the element, and the overall size of the
- collection, by one.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#add(E)">add</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#add(E)" title="class or interface in java.util">add</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#add(E)" title="class or interface in java.util">add</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to add one occurrence of; may be null only if
-     explicitly allowed by the implementation
-<DT><B>Returns:</B><DD><code>true</code> always, since this call is required to modify the
-     multiset, unlike other <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A> types</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="remove(java.lang.Object)"><!-- --></A><H3>
-remove</H3>
-<PRE>
-public boolean <B>remove</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#remove(java.lang.Object)">Multiset</A></CODE></B></DD>
-<DD>Removes a <i>single</i> occurrence of the specified element from this
- multiset, if present.
-
- <p>This method refines <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util"><CODE>Collection.remove(java.lang.Object)</CODE></A> to further specify that it
- <b>may not</b> throw an exception in response to <code>element</code> being null
- or of the wrong type.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#remove(java.lang.Object)">remove</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to remove one occurrence of
-<DT><B>Returns:</B><DD><code>true</code> if an occurrence was found and removed</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="setCount(java.lang.Object,int,int)"><!-- --></A><A NAME="setCount(E, int, int)"><!-- --></A><H3>
-setCount</H3>
-<PRE>
-public boolean <B>setCount</B>(E&nbsp;element,
-                        int&nbsp;oldCount,
-                        int&nbsp;newCount)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int, int)">Multiset</A></CODE></B></DD>
-<DD>Conditionally sets the count of an element to a new value, as described in
- <A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int)"><CODE>Multiset.setCount(Object, int)</CODE></A>, provided that the element has the expected
- current count. If the current count is not <code>oldCount</code>, no change is
- made.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int, int)">setCount</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to conditionally set the count of; may be null
-     only if explicitly allowed by the implementation<DD><CODE>oldCount</CODE> - the expected present count of the element in this multiset<DD><CODE>newCount</CODE> - the desired count of the element in this multiset
-<DT><B>Returns:</B><DD><code>true</code> if the condition for modification was met. This
-     implies that the multiset was indeed modified, unless
-     <code>oldCount == newCount</code>.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="containsAll(java.util.Collection)"><!-- --></A><H3>
-containsAll</H3>
-<PRE>
-public boolean <B>containsAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elements)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#containsAll(java.util.Collection)">Multiset</A></CODE></B></DD>
-<DD>Returns <code>true</code> if this multiset contains at least one occurrence of
- each element in the specified collection.
-
- <p>This method refines <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util"><CODE>Collection.containsAll(java.util.Collection<?>)</CODE></A> to further specify
- that it <b>may not</b> throw an exception in response to any of <code>elements</code> being null or of the wrong type.
-
- <p><b>Note:</b> this method does not take into account the occurrence
- count of an element in the two collections; it may still return <code>true</code> even if <code>elements</code> contains several occurrences of an element
- and this multiset contains only one. This is no different than any other
- collection type like <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util"><CODE>List</CODE></A>, but it may be unexpected to the user of
- a multiset.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#containsAll(java.util.Collection)">containsAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util">containsAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util">containsAll</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>elements</CODE> - the collection of elements to be checked for containment in
-     this multiset
-<DT><B>Returns:</B><DD><code>true</code> if this multiset contains at least one occurrence of
-     each element contained in <code>elements</code></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="addAll(java.util.Collection)"><!-- --></A><H3>
-addAll</H3>
-<PRE>
-public boolean <B>addAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;? extends E&gt;&nbsp;elementsToAdd)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#addAll(java.util.Collection)" title="class or interface in java.util">addAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#addAll(java.util.Collection)" title="class or interface in java.util">addAll</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="removeAll(java.util.Collection)"><!-- --></A><H3>
-removeAll</H3>
-<PRE>
-public boolean <B>removeAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToRemove)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#removeAll(java.util.Collection)">Multiset</A></CODE></B></DD>
-<DD>
-
- <p>This method refines <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#removeAll(java.util.Collection)" title="class or interface in java.util"><CODE>Collection.removeAll(java.util.Collection<?>)</CODE></A> to further specify that
- it <b>may not</b> throw an exception in response to any of <code>elements</code>
- being null or of the wrong type.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#removeAll(java.util.Collection)">removeAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#removeAll(java.util.Collection)" title="class or interface in java.util">removeAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#removeAll(java.util.Collection)" title="class or interface in java.util">removeAll</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="retainAll(java.util.Collection)"><!-- --></A><H3>
-retainAll</H3>
-<PRE>
-public boolean <B>retainAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToRetain)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#retainAll(java.util.Collection)">Multiset</A></CODE></B></DD>
-<DD>
-
- <p>This method refines <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util"><CODE>Collection.retainAll(java.util.Collection<?>)</CODE></A> to further specify that
- it <b>may not</b> throw an exception in response to any of <code>elements</code>
- being null or of the wrong type.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#retainAll(java.util.Collection)">retainAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util">retainAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util">retainAll</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="clear()"><!-- --></A><H3>
-clear</H3>
-<PRE>
-public void <B>clear</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#clear()" title="class or interface in java.util">clear</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#clear()" title="class or interface in java.util">clear</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="elementSet()"><!-- --></A><H3>
-elementSet</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt; <B>elementSet</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#elementSet()">Multiset</A></CODE></B></DD>
-<DD>Returns the set of distinct elements contained in this multiset. The
- element set is backed by the same data as the multiset, so any change to
- either is immediately reflected in the other. The order of the elements in
- the element set is unspecified.
-
- <p>If the element set supports any removal operations, these necessarily
- cause <b>all</b> occurrences of the removed element(s) to be removed from
- the multiset. Implementations are not expected to support the add
- operations, although this is possible.
-
- <p>A common use for the element set is to find the number of distinct
- elements in the multiset: <code>elementSet().size()</code>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#elementSet()">elementSet</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a view of the set of distinct elements in this multiset</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
-equals</H3>
-<PRE>
-public boolean <B>equals</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                      <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
-<DL>
-<DD>Compares the specified object with this multiset for equality. Returns
- <code>true</code> if the given object is also a multiset and contains equal
- elements with equal counts, regardless of order.
-
- <p>This implementation returns <code>true</code> if <code>other</code> is a multiset
- of the same size and if, for each element, the two multisets have the same
- count.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#equals(java.lang.Object)">equals</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="hashCode()"><!-- --></A><H3>
-hashCode</H3>
-<PRE>
-public int <B>hashCode</B>()</PRE>
-<DL>
-<DD>Returns the hash code for this multiset. This is defined as the sum of
-
- <pre>  (element == null ? 0 : element.hashCode()) ^ count(element)</pre>
-
- over all distinct elements in the multiset. It follows that a multiset and
- its entry set always have the same hash code.
-
- <p>This implementation returns the hash code of <A HREF="../../../../com/google/common/collect/Multiset.html#entrySet()"><CODE>Multiset.entrySet()</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#hashCode()">hashCode</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toString()"><!-- --></A><H3>
-toString</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
-<DL>
-<DD>
-
- <p>It is recommended, though not mandatory, that this method return the
- result of invoking <A HREF="../../../../com/google/common/collect/Multiset.html#toString()"><CODE>Multiset.toString()</CODE></A> on the <A HREF="../../../../com/google/common/collect/Multiset.html#entrySet()"><CODE>Multiset.entrySet()</CODE></A>, yielding a
- result such as
- <pre>
-     [a x 3, c, d x 2, e]
- </pre>
-
- <p>This implementation returns the result of invoking <code>toString</code> on
- <A HREF="../../../../com/google/common/collect/Multiset.html#entrySet()"><CODE>Multiset.entrySet()</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#toString()">toString</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#toString()" title="class or interface in java.util">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/HashMultiset.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/HashMultiset.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="HashMultiset.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/ImmutableBiMap.Builder.html b/javadoc/com/google/common/collect/ImmutableBiMap.Builder.html
deleted file mode 100644
index 96e8003..0000000
--- a/javadoc/com/google/common/collect/ImmutableBiMap.Builder.html
+++ /dev/null
@@ -1,338 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:58 PST 2010 -->
-<TITLE>
-ImmutableBiMap.Builder (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="ImmutableBiMap.Builder (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ImmutableBiMap.Builder.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ImmutableBiMap.Builder.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableBiMap.Builder.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class ImmutableBiMap.Builder&lt;K,V&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">com.google.common.collect.ImmutableMap.Builder</A>&lt;K,V&gt;
-      <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ImmutableBiMap.Builder&lt;K,V&gt;</B>
-</PRE>
-<DL>
-<DT><B>Enclosing class:</B><DD><A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt;</DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public static final class <B>ImmutableBiMap.Builder&lt;K,V&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">ImmutableMap.Builder</A>&lt;K,V&gt;</DL>
-</PRE>
-
-<P>
-A builder for creating immutable bimap instances, especially <code>public
- static final</code> bimaps ("constant bimaps"). Example: <pre>   <code>static final ImmutableBiMap&lt;String, Integer&gt; WORD_TO_INT =
-       new ImmutableBiMap.Builder&lt;String, Integer&gt;()
-           .put("one", 1)
-           .put("two", 2)
-           .put("three", 3)
-           .build();</code></pre>
-
- For <i>small</i> immutable bimaps, the <code>ImmutableBiMap.of()</code> methods
- are even more convenient.
-
- <p>Builder instances can be reused - it is safe to call <A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html#build()"><CODE>build()</CODE></A>
- multiple times to build multiple bimaps in series. Each bimap is a superset
- of the bimaps created before it.
-<P>
-
-<P>
-<HR>
-
-<P>
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html#ImmutableBiMap.Builder()">ImmutableBiMap.Builder</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new builder.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html#build()">build</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a newly-created immutable bimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect">ImmutableBiMap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html#put(K, V)">put</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">K</A>&nbsp;key,
-    <A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">V</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Associates <code>key</code> with <code>value</code> in the built bimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect">ImmutableBiMap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html#putAll(java.util.Map)">putAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">K</A>,? extends <A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">V</A>&gt;&nbsp;map)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Associates all of the given map's keys and values in the built bimap.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="ImmutableBiMap.Builder()"><!-- --></A><H3>
-ImmutableBiMap.Builder</H3>
-<PRE>
-public <B>ImmutableBiMap.Builder</B>()</PRE>
-<DL>
-<DD>Creates a new builder. The returned builder is equivalent to the builder
- generated by <A HREF="../../../../com/google/common/collect/ImmutableBiMap.html#builder()"><CODE>ImmutableBiMap.builder()</CODE></A>.
-<P>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="put(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="put(K, V)"><!-- --></A><H3>
-put</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect">ImmutableBiMap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">V</A>&gt; <B>put</B>(<A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">K</A>&nbsp;key,
-                                       <A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">V</A>&nbsp;value)</PRE>
-<DL>
-<DD>Associates <code>key</code> with <code>value</code> in the built bimap. Duplicate
- keys or values are not allowed, and will cause <A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html#build()"><CODE>build()</CODE></A> to fail.
-<P>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html#put(K, V)">put</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">ImmutableMap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="putAll(java.util.Map)"><!-- --></A><H3>
-putAll</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect">ImmutableBiMap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">V</A>&gt; <B>putAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">K</A>,? extends <A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">V</A>&gt;&nbsp;map)</PRE>
-<DL>
-<DD>Associates all of the given map's keys and values in the built bimap.
- Duplicate keys or values are not allowed, and will cause <A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html#build()"><CODE>build()</CODE></A>
- to fail.
-<P>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html#putAll(java.util.Map)">putAll</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">ImmutableMap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any key or value in <code>map</code> is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="build()"><!-- --></A><H3>
-build</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">V</A>&gt; <B>build</B>()</PRE>
-<DL>
-<DD>Returns a newly-created immutable bimap.
-<P>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html#build()">build</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">ImmutableMap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if duplicate keys or values were added</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ImmutableBiMap.Builder.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ImmutableBiMap.Builder.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableBiMap.Builder.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/ImmutableBiMap.html b/javadoc/com/google/common/collect/ImmutableBiMap.html
deleted file mode 100644
index 2888f90..0000000
--- a/javadoc/com/google/common/collect/ImmutableBiMap.html
+++ /dev/null
@@ -1,917 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:58 PST 2010 -->
-<TITLE>
-ImmutableBiMap (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="ImmutableBiMap (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ImmutableBiMap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ImmutableBiMap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableBiMap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class ImmutableBiMap&lt;K,V&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">com.google.common.collect.ImmutableMap</A>&lt;K,V&gt;
-      <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ImmutableBiMap&lt;K,V&gt;</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public abstract class <B>ImmutableBiMap&lt;K,V&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;K,V&gt;<DT>implements <A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt;</DL>
-</PRE>
-
-<P>
-An immutable <A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect"><CODE>BiMap</CODE></A> with reliable user-specified iteration order. Does
- not permit null keys or values. An <code>ImmutableBiMap</code> and its inverse
- have the same iteration ordering.
-
- <p>An instance of <code>ImmutableBiMap</code> contains its own data and will
- <i>never</i> change. <code>ImmutableBiMap</code> is convenient for
- <code>public static final</code> maps ("constant maps") and also lets you easily
- make a "defensive copy" of a bimap provided to your class by a caller.
-
- <p><b>Note</b>: Although this class is not final, it cannot be subclassed as
- it has no public or protected constructors. Thus, instances of this class are
- guaranteed to be immutable.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Jared Levy</DD>
-<DT><B>See Also:</B><DD><A HREF="../../../../serialized-form.html#com.google.common.collect.ImmutableBiMap">Serialized Form</A></DL>
-<HR>
-
-<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-<A NAME="nested_class_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Nested Class Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect">ImmutableBiMap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">V</A>&gt;</B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A builder for creating immutable bimap instances, especially <code>public
- static final</code> bimaps ("constant bimaps").</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="nested_classes_inherited_from_class_java.util.Map"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Nested classes/interfaces inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">V</A>&gt;</CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect">ImmutableBiMap.Builder</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableBiMap.html#builder()">builder</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new builder.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableBiMap.html#containsKey(java.lang.Object)">containsKey</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableBiMap.html#containsValue(java.lang.Object)">containsValue</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableBiMap.html#copyOf(java.util.Map)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;map)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable bimap containing the same entries as <code>map</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt;&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableBiMap.html#entrySet()">entrySet</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set of the mappings in this map.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableBiMap.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableBiMap.html#forcePut(K, V)">forcePut</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>&nbsp;key,
-         <A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the bimap unmodified.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableBiMap.html#get(java.lang.Object)">get</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableBiMap.html#hashCode()">hashCode</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>abstract &nbsp;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableBiMap.html#inverse()">inverse</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the inverse view of this bimap, which maps each of this bimap's
- values to its associated key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableBiMap.html#isEmpty()">isEmpty</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableBiMap.html#keySet()">keySet</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set of the keys in this map.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableBiMap.html#of()">of</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the empty bimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableBiMap.html#of(K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable bimap containing a single entry.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableBiMap.html#of(K, V, K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1,
-   K&nbsp;k2,
-   V&nbsp;v2)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing the given entries, in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableBiMap.html#of(K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1,
-   K&nbsp;k2,
-   V&nbsp;v2,
-   K&nbsp;k3,
-   V&nbsp;v3)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing the given entries, in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableBiMap.html#of(K, V, K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1,
-   K&nbsp;k2,
-   V&nbsp;v2,
-   K&nbsp;k3,
-   V&nbsp;v3,
-   K&nbsp;k4,
-   V&nbsp;v4)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing the given entries, in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableBiMap.html#of(K, V, K, V, K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1,
-   K&nbsp;k2,
-   V&nbsp;v2,
-   K&nbsp;k3,
-   V&nbsp;v3,
-   K&nbsp;k4,
-   V&nbsp;v4,
-   K&nbsp;k5,
-   V&nbsp;v5)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing the given entries, in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableBiMap.html#size()">size</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableBiMap.html#toString()">toString</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableBiMap.html#values()">values</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set of the values in this map.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ImmutableMap"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html#clear()">clear</A>, <A HREF="../../../../com/google/common/collect/ImmutableMap.html#put(K, V)">put</A>, <A HREF="../../../../com/google/common/collect/ImmutableMap.html#putAll(java.util.Map)">putAll</A>, <A HREF="../../../../com/google/common/collect/ImmutableMap.html#remove(java.lang.Object)">remove</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.BiMap"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface com.google.common.collect.<A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/BiMap.html#put(K, V)">put</A>, <A HREF="../../../../com/google/common/collect/BiMap.html#putAll(java.util.Map)">putAll</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.util.Map"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#clear()" title="class or interface in java.util">clear</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="of()"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>&lt;K,V&gt; <B>of</B>()</PRE>
-<DL>
-<DD>Returns the empty bimap.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="of(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(K, V)"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
-                                           V&nbsp;v1)</PRE>
-<DL>
-<DD>Returns an immutable bimap containing a single entry.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(K, V, K, V)"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
-                                           V&nbsp;v1,
-                                           K&nbsp;k2,
-                                           V&nbsp;v2)</PRE>
-<DL>
-<DD>Returns an immutable map containing the given entries, in order.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if duplicate keys or values are added</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(K, V, K, V, K, V)"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
-                                           V&nbsp;v1,
-                                           K&nbsp;k2,
-                                           V&nbsp;v2,
-                                           K&nbsp;k3,
-                                           V&nbsp;v3)</PRE>
-<DL>
-<DD>Returns an immutable map containing the given entries, in order.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if duplicate keys or values are added</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(K, V, K, V, K, V, K, V)"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
-                                           V&nbsp;v1,
-                                           K&nbsp;k2,
-                                           V&nbsp;v2,
-                                           K&nbsp;k3,
-                                           V&nbsp;v3,
-                                           K&nbsp;k4,
-                                           V&nbsp;v4)</PRE>
-<DL>
-<DD>Returns an immutable map containing the given entries, in order.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if duplicate keys or values are added</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(K, V, K, V, K, V, K, V, K, V)"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
-                                           V&nbsp;v1,
-                                           K&nbsp;k2,
-                                           V&nbsp;v2,
-                                           K&nbsp;k3,
-                                           V&nbsp;v3,
-                                           K&nbsp;k4,
-                                           V&nbsp;v4,
-                                           K&nbsp;k5,
-                                           V&nbsp;v5)</PRE>
-<DL>
-<DD>Returns an immutable map containing the given entries, in order.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if duplicate keys or values are added</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="builder()"><!-- --></A><H3>
-builder</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect">ImmutableBiMap.Builder</A>&lt;K,V&gt; <B>builder</B>()</PRE>
-<DL>
-<DD>Returns a new builder. The generated builder is equivalent to the builder
- created by the <A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect"><CODE>ImmutableBiMap.Builder</CODE></A> constructor.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="copyOf(java.util.Map)"><!-- --></A><H3>
-copyOf</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>&lt;K,V&gt; <B>copyOf</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;map)</PRE>
-<DL>
-<DD>Returns an immutable bimap containing the same entries as <code>map</code>. If
- <code>map</code> somehow contains entries with duplicate keys (for example, if
- it is a <code>SortedMap</code> whose comparator is not <i>consistent with
- equals</i>), the results of this method are undefined.
-
- <p><b>Note:</b> If <code>map</code> is an <code>ImmutableBiMap</code>, the given map
- itself will be returned.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if two keys have the same value
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any key or value in <code>map</code> is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="inverse()"><!-- --></A><H3>
-inverse</H3>
-<PRE>
-public abstract <A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>&gt; <B>inverse</B>()</PRE>
-<DL>
-<DD>Returns the inverse view of this bimap, which maps each of this bimap's
- values to its associated key. The two bimaps are backed by the same data;
- any changes to one will appear in the other.
-
- <p><b>Note:</b>There is no guaranteed correspondence between the iteration
- order of a bimap and that of its inverse.
-
- <p>The inverse of an <code>ImmutableBiMap</code> is another
- <code>ImmutableBiMap</code>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/BiMap.html#inverse()">inverse</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>the inverse view of this bimap</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="containsKey(java.lang.Object)"><!-- --></A><H3>
-containsKey</H3>
-<PRE>
-public boolean <B>containsKey</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                           <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsKey(java.lang.Object)" title="class or interface in java.util">containsKey</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html#containsKey(java.lang.Object)">containsKey</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="containsValue(java.lang.Object)"><!-- --></A><H3>
-containsValue</H3>
-<PRE>
-public boolean <B>containsValue</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                             <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsValue(java.lang.Object)" title="class or interface in java.util">containsValue</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html#containsValue(java.lang.Object)">containsValue</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="entrySet()"><!-- --></A><H3>
-entrySet</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt;&gt; <B>entrySet</B>()</PRE>
-<DL>
-<DD><B>Description copied from class: <CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html#entrySet()">ImmutableMap</A></CODE></B></DD>
-<DD>Returns an immutable set of the mappings in this map. The entries are in
- the same order as the parameters used to build this map.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#entrySet()" title="class or interface in java.util">entrySet</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html#entrySet()">entrySet</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="get(java.lang.Object)"><!-- --></A><H3>
-get</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A> <B>get</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-             <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#get(java.lang.Object)" title="class or interface in java.util">get</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html#get(java.lang.Object)">get</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="keySet()"><!-- --></A><H3>
-keySet</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>&gt; <B>keySet</B>()</PRE>
-<DL>
-<DD><B>Description copied from class: <CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html#keySet()">ImmutableMap</A></CODE></B></DD>
-<DD>Returns an immutable set of the keys in this map. These keys are in
- the same order as the parameters used to build this map.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#keySet()" title="class or interface in java.util">keySet</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html#keySet()">keySet</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="values()"><!-- --></A><H3>
-values</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt; <B>values</B>()</PRE>
-<DL>
-<DD>Returns an immutable set of the values in this map. The values are in the
- same order as the parameters used to build this map.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/BiMap.html#values()">values</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#values()" title="class or interface in java.util">values</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html#values()">values</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="forcePut(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="forcePut(K, V)"><!-- --></A><H3>
-forcePut</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A> <B>forcePut</B>(<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>&nbsp;key,
-                  <A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&nbsp;value)</PRE>
-<DL>
-<DD>Guaranteed to throw an exception and leave the bimap unmodified.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/BiMap.html#forcePut(K, V)">forcePut</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - the key with which the specified value is to be associated<DD><CODE>value</CODE> - the value to be associated with the specified key
-<DT><B>Returns:</B><DD>the value which was previously associated with the key, which may
-     be <code>null</code>, or <code>null</code> if there was no previous entry
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="isEmpty()"><!-- --></A><H3>
-isEmpty</H3>
-<PRE>
-public boolean <B>isEmpty</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html#isEmpty()">isEmpty</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="size()"><!-- --></A><H3>
-size</H3>
-<PRE>
-public int <B>size</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#size()" title="class or interface in java.util">size</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
-equals</H3>
-<PRE>
-public boolean <B>equals</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                      <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html#equals(java.lang.Object)">equals</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="hashCode()"><!-- --></A><H3>
-hashCode</H3>
-<PRE>
-public int <B>hashCode</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html#hashCode()">hashCode</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toString()"><!-- --></A><H3>
-toString</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html#toString()">toString</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ImmutableBiMap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ImmutableBiMap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableBiMap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/ImmutableClassToInstanceMap.Builder.html b/javadoc/com/google/common/collect/ImmutableClassToInstanceMap.Builder.html
deleted file mode 100644
index fcb009e..0000000
--- a/javadoc/com/google/common/collect/ImmutableClassToInstanceMap.Builder.html
+++ /dev/null
@@ -1,343 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:58 PST 2010 -->
-<TITLE>
-ImmutableClassToInstanceMap.Builder (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="ImmutableClassToInstanceMap.Builder (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ImmutableClassToInstanceMap.Builder.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableClassToInstanceMap.Builder.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class ImmutableClassToInstanceMap.Builder&lt;B&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ImmutableClassToInstanceMap.Builder&lt;B&gt;</B>
-</PRE>
-<DL>
-<DT><B>Enclosing class:</B><DD><A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="type parameter in ImmutableClassToInstanceMap">B</A>&gt;</DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public static final class <B>ImmutableClassToInstanceMap.Builder&lt;B&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
-</PRE>
-
-<P>
-A builder for creating immutable class-to-instance maps. Example:
- <pre>   <code>static final ImmutableClassToInstanceMap&lt;Handler&gt; HANDLERS =
-       new ImmutableClassToInstanceMap.Builder&lt;Handler&gt;()
-           .put(FooHandler.class, new FooHandler())
-           .put(BarHandler.class, new SubBarHandler())
-           .put(Handler.class, new QuuxHandler())
-           .build();</code></pre>
-
- <p>After invoking <A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html#build()"><CODE>build()</CODE></A> it is still possible to add more
- entries and build again. Thus each map generated by this builder will be
- a superset of any map generated before it.
-<P>
-
-<P>
-<HR>
-
-<P>
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html#ImmutableClassToInstanceMap.Builder()">ImmutableClassToInstanceMap.Builder</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="type parameter in ImmutableClassToInstanceMap.Builder">B</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html#build()">build</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new immutable class-to-instance map containing the entries
- provided to this builder.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T extends <A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="type parameter in ImmutableClassToInstanceMap.Builder">B</A>&gt; 
-<BR>
-<A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="type parameter in ImmutableClassToInstanceMap.Builder">B</A>&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html#put(java.lang.Class, T)">put</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type,
-    T&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Associates <code>key</code> with <code>value</code> in the built map.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T extends <A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="type parameter in ImmutableClassToInstanceMap.Builder">B</A>&gt; 
-<BR>
-<A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="type parameter in ImmutableClassToInstanceMap.Builder">B</A>&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html#putAll(java.util.Map)">putAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;? extends T&gt;,? extends T&gt;&nbsp;map)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Associates all of <code>map's</code> keys and values in the built map.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="ImmutableClassToInstanceMap.Builder()"><!-- --></A><H3>
-ImmutableClassToInstanceMap.Builder</H3>
-<PRE>
-public <B>ImmutableClassToInstanceMap.Builder</B>()</PRE>
-<DL>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="put(java.lang.Class,java.lang.Object)"><!-- --></A><A NAME="put(java.lang.Class, T)"><!-- --></A><H3>
-put</H3>
-<PRE>
-public &lt;T extends <A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="type parameter in ImmutableClassToInstanceMap.Builder">B</A>&gt; <A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="type parameter in ImmutableClassToInstanceMap.Builder">B</A>&gt; <B>put</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type,
-                                                                T&nbsp;value)</PRE>
-<DL>
-<DD>Associates <code>key</code> with <code>value</code> in the built map. Duplicate
- keys are not allowed, and will cause <A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html#build()"><CODE>build()</CODE></A> to fail.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="putAll(java.util.Map)"><!-- --></A><H3>
-putAll</H3>
-<PRE>
-public &lt;T extends <A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="type parameter in ImmutableClassToInstanceMap.Builder">B</A>&gt; <A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="type parameter in ImmutableClassToInstanceMap.Builder">B</A>&gt; <B>putAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;? extends T&gt;,? extends T&gt;&nbsp;map)</PRE>
-<DL>
-<DD>Associates all of <code>map's</code> keys and values in the built map.
- Duplicate keys are not allowed, and will cause <A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html#build()"><CODE>build()</CODE></A> to fail.
-<P>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any key or value in <code>map</code> is null
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassCastException.html?is-external=true" title="class or interface in java.lang">ClassCastException</A></CODE> - if any value is not an instance of the type
-     specified by its key</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="build()"><!-- --></A><H3>
-build</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="type parameter in ImmutableClassToInstanceMap.Builder">B</A>&gt; <B>build</B>()</PRE>
-<DL>
-<DD>Returns a new immutable class-to-instance map containing the entries
- provided to this builder.
-<P>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if duplicate keys were added</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ImmutableClassToInstanceMap.Builder.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableClassToInstanceMap.Builder.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/ImmutableClassToInstanceMap.html b/javadoc/com/google/common/collect/ImmutableClassToInstanceMap.html
deleted file mode 100644
index c5e366b..0000000
--- a/javadoc/com/google/common/collect/ImmutableClassToInstanceMap.html
+++ /dev/null
@@ -1,448 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:58 PST 2010 -->
-<TITLE>
-ImmutableClassToInstanceMap (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="ImmutableClassToInstanceMap (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ImmutableClassToInstanceMap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ImmutableClassToInstanceMap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableClassToInstanceMap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class ImmutableClassToInstanceMap&lt;B&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingObject</A>
-      <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingMap</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;? extends B&gt;,B&gt;
-          <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ImmutableClassToInstanceMap&lt;B&gt;</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect">ClassToInstanceMap</A>&lt;B&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;? extends B&gt;,B&gt;</DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public final class <B>ImmutableClassToInstanceMap&lt;B&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;? extends B&gt;,B&gt;<DT>implements <A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect">ClassToInstanceMap</A>&lt;B&gt;</DL>
-</PRE>
-
-<P>
-A class-to-instance map backed by an <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect"><CODE>ImmutableMap</CODE></A>. See also <A HREF="../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect"><CODE>MutableClassToInstanceMap</CODE></A>.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Kevin Bourrillion</DD>
-</DL>
-<HR>
-
-<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-<A NAME="nested_class_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Nested Class Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="type parameter in ImmutableClassToInstanceMap.Builder">B</A>&gt;</B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A builder for creating immutable class-to-instance maps.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="nested_classes_inherited_from_class_java.util.Map"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Nested classes/interfaces inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">V</A>&gt;</CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;B&gt; <A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap.Builder</A>&lt;B&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html#builder()">builder</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new builder.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;B,S extends B&gt; 
-<BR>
-<A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap</A>&lt;B&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html#copyOf(java.util.Map)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;? extends S&gt;,? extends S&gt;&nbsp;map)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing the same entries as <code>map</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected &nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="type parameter in ImmutableClassToInstanceMap">B</A>&gt;,<A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="type parameter in ImmutableClassToInstanceMap">B</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html#delegate()">delegate</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the backing delegate instance that methods are forwarded to.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T extends <A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="type parameter in ImmutableClassToInstanceMap">B</A>&gt; 
-<BR>
-T</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html#getInstance(java.lang.Class)">getInstance</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the value the specified class is mapped to, or <code>null</code> if no
- entry for this class is present.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T extends <A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="type parameter in ImmutableClassToInstanceMap">B</A>&gt; 
-<BR>
-T</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html#putInstance(java.lang.Class, T)">putInstance</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type,
-            T&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the map unmodified.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingMap"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#clear()">clear</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#containsKey(java.lang.Object)">containsKey</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#containsValue(java.lang.Object)">containsValue</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#entrySet()">entrySet</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#equals(java.lang.Object)">equals</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#get(java.lang.Object)">get</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#hashCode()">hashCode</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#keySet()">keySet</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#put(K, V)">put</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#putAll(java.util.Map)">putAll</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#remove(java.lang.Object)">remove</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#size()">size</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#values()">values</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingObject"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#toString()">toString</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.util.Map"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#clear()" title="class or interface in java.util">clear</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsKey(java.lang.Object)" title="class or interface in java.util">containsKey</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsValue(java.lang.Object)" title="class or interface in java.util">containsValue</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#entrySet()" title="class or interface in java.util">entrySet</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#get(java.lang.Object)" title="class or interface in java.util">get</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#keySet()" title="class or interface in java.util">keySet</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#put(K, V)" title="class or interface in java.util">put</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#putAll(java.util.Map)" title="class or interface in java.util">putAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#size()" title="class or interface in java.util">size</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#values()" title="class or interface in java.util">values</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="builder()"><!-- --></A><H3>
-builder</H3>
-<PRE>
-public static &lt;B&gt; <A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap.Builder</A>&lt;B&gt; <B>builder</B>()</PRE>
-<DL>
-<DD>Returns a new builder. The generated builder is equivalent to the builder
- created by the <A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect"><CODE>ImmutableClassToInstanceMap.Builder</CODE></A> constructor.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="copyOf(java.util.Map)"><!-- --></A><H3>
-copyOf</H3>
-<PRE>
-public static &lt;B,S extends B&gt; <A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap</A>&lt;B&gt; <B>copyOf</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;? extends S&gt;,? extends S&gt;&nbsp;map)</PRE>
-<DL>
-<DD>Returns an immutable map containing the same entries as <code>map</code>. If
- <code>map</code> somehow contains entries with duplicate keys (for example, if
- it is a <code>SortedMap</code> whose comparator is not <i>consistent with
- equals</i>), the results of this method are undefined.
-
- <p><b>Note:</b> Despite what the method name suggests, if <code>map</code> is
- an <code>ImmutableClassToInstanceMap</code>, no copy will actually be performed.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any key or value in <code>map</code> is null
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassCastException.html?is-external=true" title="class or interface in java.lang">ClassCastException</A></CODE> - if any value is not an instance of the type
-     specified by its key</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="delegate()"><!-- --></A><H3>
-delegate</H3>
-<PRE>
-protected <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="type parameter in ImmutableClassToInstanceMap">B</A>&gt;,<A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="type parameter in ImmutableClassToInstanceMap">B</A>&gt; <B>delegate</B>()</PRE>
-<DL>
-<DD><B>Description copied from class: <CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#delegate()">ForwardingObject</A></CODE></B></DD>
-<DD>Returns the backing delegate instance that methods are forwarded to.
- Abstract subclasses generally override this method with an abstract method
- that has a more specific return type, such as <A HREF="../../../../com/google/common/collect/ForwardingSet.html#delegate()"><CODE>ForwardingSet.delegate()</CODE></A>. Concrete subclasses override this method to supply
- the instance being decorated.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#delegate()">delegate</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="type parameter in ImmutableClassToInstanceMap">B</A>&gt;,<A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="type parameter in ImmutableClassToInstanceMap">B</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getInstance(java.lang.Class)"><!-- --></A><H3>
-getInstance</H3>
-<PRE>
-public &lt;T extends <A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="type parameter in ImmutableClassToInstanceMap">B</A>&gt; T <B>getInstance</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html#getInstance(java.lang.Class)">ClassToInstanceMap</A></CODE></B></DD>
-<DD>Returns the value the specified class is mapped to, or <code>null</code> if no
- entry for this class is present. This will only return a value that was
- bound to this specific class, not a value that may have been bound to a
- subtype.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html#getInstance(java.lang.Class)">getInstance</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect">ClassToInstanceMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="type parameter in ImmutableClassToInstanceMap">B</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="putInstance(java.lang.Class,java.lang.Object)"><!-- --></A><A NAME="putInstance(java.lang.Class, T)"><!-- --></A><H3>
-putInstance</H3>
-<PRE>
-public &lt;T extends <A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="type parameter in ImmutableClassToInstanceMap">B</A>&gt; T <B>putInstance</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type,
-                                   T&nbsp;value)</PRE>
-<DL>
-<DD>Guaranteed to throw an exception and leave the map unmodified.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html#putInstance(java.lang.Class, T)">putInstance</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect">ClassToInstanceMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="type parameter in ImmutableClassToInstanceMap">B</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>the value previously associated with this class (possibly <code>null</code>), or <code>null</code> if there was no previous entry.
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ImmutableClassToInstanceMap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ImmutableClassToInstanceMap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableClassToInstanceMap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/ImmutableCollection.html b/javadoc/com/google/common/collect/ImmutableCollection.html
deleted file mode 100644
index 44caeee..0000000
--- a/javadoc/com/google/common/collect/ImmutableCollection.html
+++ /dev/null
@@ -1,577 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:58 PST 2010 -->
-<TITLE>
-ImmutableCollection (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="ImmutableCollection (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ImmutableCollection.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ImmutableCollection.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableCollection.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class ImmutableCollection&lt;E&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ImmutableCollection&lt;E&gt;</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</DD>
-</DL>
-<DL>
-<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>, <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public abstract class <B>ImmutableCollection&lt;E&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A><DT>implements <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A></DL>
-</PRE>
-
-<P>
-An immutable collection. Does not permit null elements.
-
- <p>In addition to the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A> methods, this class has an <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#asList()"><CODE>asList()</CODE></A> method, which returns a list view of the collection's elements.
-
- <p><b>Note</b>: Although this class is not final, it cannot be subclassed
- outside of this package as it has no public or protected constructors. Thus,
- instances of this type are guaranteed to be immutable.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Jesse Wilson</DD>
-<DT><B>See Also:</B><DD><A HREF="../../../../serialized-form.html#com.google.common.collect.ImmutableCollection">Serialized Form</A></DL>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableCollection.html#add(E)">add</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="type parameter in ImmutableCollection">E</A>&nbsp;e)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the collection unmodified.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableCollection.html#addAll(java.util.Collection)">addAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="type parameter in ImmutableCollection">E</A>&gt;&nbsp;newElements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the collection unmodified.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="type parameter in ImmutableCollection">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableCollection.html#asList()">asList</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a list view of the collection.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableCollection.html#clear()">clear</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the collection unmodified.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableCollection.html#contains(java.lang.Object)">contains</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableCollection.html#containsAll(java.util.Collection)">containsAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;targets)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableCollection.html#isEmpty()">isEmpty</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>abstract &nbsp;<A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="type parameter in ImmutableCollection">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableCollection.html#iterator()">iterator</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable iterator across the elements in this collection.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableCollection.html#remove(java.lang.Object)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the collection unmodified.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableCollection.html#removeAll(java.util.Collection)">removeAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;oldElements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the collection unmodified.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableCollection.html#retainAll(java.util.Collection)">retainAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToKeep)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the collection unmodified.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>[]</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableCollection.html#toArray()">toArray</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; T[]</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableCollection.html#toArray(T[])">toArray</A></B>(T[]&nbsp;other)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableCollection.html#toString()">toString</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.util.Collection"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#size()" title="class or interface in java.util">size</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="iterator()"><!-- --></A><H3>
-iterator</H3>
-<PRE>
-public abstract <A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="type parameter in ImmutableCollection">E</A>&gt; <B>iterator</B>()</PRE>
-<DL>
-<DD>Returns an unmodifiable iterator across the elements in this collection.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true#iterator()" title="class or interface in java.lang">iterator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="type parameter in ImmutableCollection">E</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#iterator()" title="class or interface in java.util">iterator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="type parameter in ImmutableCollection">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toArray()"><!-- --></A><H3>
-toArray</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>[] <B>toArray</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#toArray()" title="class or interface in java.util">toArray</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="type parameter in ImmutableCollection">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toArray(java.lang.Object[])"><!-- --></A><A NAME="toArray(T[])"><!-- --></A><H3>
-toArray</H3>
-<PRE>
-public &lt;T&gt; T[] <B>toArray</B>(T[]&nbsp;other)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#toArray(T[])" title="class or interface in java.util">toArray</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="type parameter in ImmutableCollection">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="contains(java.lang.Object)"><!-- --></A><H3>
-contains</H3>
-<PRE>
-public boolean <B>contains</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                        <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util">contains</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="type parameter in ImmutableCollection">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="containsAll(java.util.Collection)"><!-- --></A><H3>
-containsAll</H3>
-<PRE>
-public boolean <B>containsAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;targets)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util">containsAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="type parameter in ImmutableCollection">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="isEmpty()"><!-- --></A><H3>
-isEmpty</H3>
-<PRE>
-public boolean <B>isEmpty</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="type parameter in ImmutableCollection">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toString()"><!-- --></A><H3>
-toString</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="add(java.lang.Object)"><!-- --></A><A NAME="add(E)"><!-- --></A><H3>
-add</H3>
-<PRE>
-public final boolean <B>add</B>(<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="type parameter in ImmutableCollection">E</A>&nbsp;e)</PRE>
-<DL>
-<DD>Guaranteed to throw an exception and leave the collection unmodified.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#add(E)" title="class or interface in java.util">add</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="type parameter in ImmutableCollection">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="remove(java.lang.Object)"><!-- --></A><H3>
-remove</H3>
-<PRE>
-public final boolean <B>remove</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
-<DL>
-<DD>Guaranteed to throw an exception and leave the collection unmodified.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="type parameter in ImmutableCollection">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="addAll(java.util.Collection)"><!-- --></A><H3>
-addAll</H3>
-<PRE>
-public final boolean <B>addAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="type parameter in ImmutableCollection">E</A>&gt;&nbsp;newElements)</PRE>
-<DL>
-<DD>Guaranteed to throw an exception and leave the collection unmodified.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#addAll(java.util.Collection)" title="class or interface in java.util">addAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="type parameter in ImmutableCollection">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="removeAll(java.util.Collection)"><!-- --></A><H3>
-removeAll</H3>
-<PRE>
-public final boolean <B>removeAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;oldElements)</PRE>
-<DL>
-<DD>Guaranteed to throw an exception and leave the collection unmodified.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#removeAll(java.util.Collection)" title="class or interface in java.util">removeAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="type parameter in ImmutableCollection">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="retainAll(java.util.Collection)"><!-- --></A><H3>
-retainAll</H3>
-<PRE>
-public final boolean <B>retainAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToKeep)</PRE>
-<DL>
-<DD>Guaranteed to throw an exception and leave the collection unmodified.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util">retainAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="type parameter in ImmutableCollection">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="clear()"><!-- --></A><H3>
-clear</H3>
-<PRE>
-public final void <B>clear</B>()</PRE>
-<DL>
-<DD>Guaranteed to throw an exception and leave the collection unmodified.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#clear()" title="class or interface in java.util">clear</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="type parameter in ImmutableCollection">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="asList()"><!-- --></A><H3>
-asList</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="type parameter in ImmutableCollection">E</A>&gt; <B>asList</B>()</PRE>
-<DL>
-<DD>Returns a list view of the collection.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>tentative</b></DD>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ImmutableCollection.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ImmutableCollection.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableCollection.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/ImmutableList.Builder.html b/javadoc/com/google/common/collect/ImmutableList.Builder.html
deleted file mode 100644
index 382330a..0000000
--- a/javadoc/com/google/common/collect/ImmutableList.Builder.html
+++ /dev/null
@@ -1,392 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:58 PST 2010 -->
-<TITLE>
-ImmutableList.Builder (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="ImmutableList.Builder (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ImmutableList.Builder.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ImmutableList.Builder.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableList.Builder.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class ImmutableList.Builder&lt;E&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ImmutableList.Builder&lt;E&gt;</B>
-</PRE>
-<DL>
-<DT><B>Enclosing class:</B><DD><A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A>&gt;</DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public static final class <B>ImmutableList.Builder&lt;E&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
-</PRE>
-
-<P>
-A builder for creating immutable list instances, especially
- <code>public static final</code> lists ("constant lists").
-
- <p>Example:
- <pre>   <code>public static final ImmutableList&lt;Color&gt; GOOGLE_COLORS
-       = new ImmutableList.Builder&lt;Color&gt;()
-           .addAll(WEBSAFE_COLORS)
-           .add(new Color(0, 191, 255))
-           .build();</code></pre>
-
- <p>Builder instances can be reused - it is safe to call <A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html#build()"><CODE>build()</CODE></A>
- multiple times to build multiple lists in series. Each new list
- contains the one created before it.
-<P>
-
-<P>
-<HR>
-
-<P>
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html#ImmutableList.Builder()">ImmutableList.Builder</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new builder.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect">ImmutableList.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="type parameter in ImmutableList.Builder">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html#add(E...)">add</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="type parameter in ImmutableList.Builder">E</A>...&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds each element of <code>elements</code> to the <code>ImmutableList</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect">ImmutableList.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="type parameter in ImmutableList.Builder">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html#add(E)">add</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="type parameter in ImmutableList.Builder">E</A>&nbsp;element)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds <code>element</code> to the <code>ImmutableList</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect">ImmutableList.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="type parameter in ImmutableList.Builder">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html#addAll(java.lang.Iterable)">addAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="type parameter in ImmutableList.Builder">E</A>&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds each element of <code>elements</code> to the <code>ImmutableList</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect">ImmutableList.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="type parameter in ImmutableList.Builder">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html#addAll(java.util.Iterator)">addAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="type parameter in ImmutableList.Builder">E</A>&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds each element of <code>elements</code> to the <code>ImmutableList</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="type parameter in ImmutableList.Builder">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html#build()">build</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a newly-created <code>ImmutableList</code> based on the contents of
- the <code>Builder</code>.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="ImmutableList.Builder()"><!-- --></A><H3>
-ImmutableList.Builder</H3>
-<PRE>
-public <B>ImmutableList.Builder</B>()</PRE>
-<DL>
-<DD>Creates a new builder. The returned builder is equivalent to the builder
- generated by <A HREF="../../../../com/google/common/collect/ImmutableList.html#builder()"><CODE>ImmutableList.builder()</CODE></A>.
-<P>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="add(java.lang.Object)"><!-- --></A><A NAME="add(E)"><!-- --></A><H3>
-add</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect">ImmutableList.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="type parameter in ImmutableList.Builder">E</A>&gt; <B>add</B>(<A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="type parameter in ImmutableList.Builder">E</A>&nbsp;element)</PRE>
-<DL>
-<DD>Adds <code>element</code> to the <code>ImmutableList</code>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to add
-<DT><B>Returns:</B><DD>this <code>Builder</code> object
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>element</code> is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="addAll(java.lang.Iterable)"><!-- --></A><H3>
-addAll</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect">ImmutableList.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="type parameter in ImmutableList.Builder">E</A>&gt; <B>addAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="type parameter in ImmutableList.Builder">E</A>&gt;&nbsp;elements)</PRE>
-<DL>
-<DD>Adds each element of <code>elements</code> to the <code>ImmutableList</code>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>elements</CODE> - the <code>Iterable</code> to add to the <code>ImmutableList</code>
-<DT><B>Returns:</B><DD>this <code>Builder</code> object
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>elements</code> is null or contains a
-     null element</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="add(java.lang.Object[])"><!-- --></A><A NAME="add(E...)"><!-- --></A><H3>
-add</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect">ImmutableList.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="type parameter in ImmutableList.Builder">E</A>&gt; <B>add</B>(<A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="type parameter in ImmutableList.Builder">E</A>...&nbsp;elements)</PRE>
-<DL>
-<DD>Adds each element of <code>elements</code> to the <code>ImmutableList</code>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>elements</CODE> - the <code>Iterable</code> to add to the <code>ImmutableList</code>
-<DT><B>Returns:</B><DD>this <code>Builder</code> object
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>elements</code> is null or contains a
-     null element</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="addAll(java.util.Iterator)"><!-- --></A><H3>
-addAll</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect">ImmutableList.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="type parameter in ImmutableList.Builder">E</A>&gt; <B>addAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="type parameter in ImmutableList.Builder">E</A>&gt;&nbsp;elements)</PRE>
-<DL>
-<DD>Adds each element of <code>elements</code> to the <code>ImmutableList</code>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>elements</CODE> - the <code>Iterable</code> to add to the <code>ImmutableList</code>
-<DT><B>Returns:</B><DD>this <code>Builder</code> object
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>elements</code> is null or contains a
-     null element</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="build()"><!-- --></A><H3>
-build</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="type parameter in ImmutableList.Builder">E</A>&gt; <B>build</B>()</PRE>
-<DL>
-<DD>Returns a newly-created <code>ImmutableList</code> based on the contents of
- the <code>Builder</code>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ImmutableList.Builder.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ImmutableList.Builder.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableList.Builder.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/ImmutableList.html b/javadoc/com/google/common/collect/ImmutableList.html
deleted file mode 100644
index 836ed0d..0000000
--- a/javadoc/com/google/common/collect/ImmutableList.html
+++ /dev/null
@@ -1,1187 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:58 PST 2010 -->
-<TITLE>
-ImmutableList (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="ImmutableList (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ImmutableList.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ImmutableList.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableList.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class ImmutableList&lt;E&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">com.google.common.collect.ImmutableCollection</A>&lt;E&gt;
-      <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ImmutableList&lt;E&gt;</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/RandomAccess.html?is-external=true" title="class or interface in java.util">RandomAccess</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public abstract class <B>ImmutableList&lt;E&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;E&gt;<DT>implements <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/RandomAccess.html?is-external=true" title="class or interface in java.util">RandomAccess</A></DL>
-</PRE>
-
-<P>
-A high-performance, immutable, random-access <code>List</code> implementation.
- Does not permit null elements.
-
- <p>Unlike <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#unmodifiableList(java.util.List)" title="class or interface in java.util"><CODE>Collections.unmodifiableList(java.util.List<? extends T>)</CODE></A>, which is a <i>view</i> of a
- separate collection that can still change, an instance of <code>ImmutableList</code> contains its own private data and will <i>never</i> change.
- <code>ImmutableList</code> is convenient for <code>public static final</code> lists
- ("constant lists") and also lets you easily make a "defensive copy" of a list
- provided to your class by a caller.
-
- <p><b>Note</b>: Although this class is not final, it cannot be subclassed as
- it has no public or protected constructors. Thus, instances of this type are
- guaranteed to be immutable.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Kevin Bourrillion</DD>
-<DT><B>See Also:</B><DD><A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect"><CODE>ImmutableMap</CODE></A>, 
-<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect"><CODE>ImmutableSet</CODE></A>, 
-<A HREF="../../../../serialized-form.html#com.google.common.collect.ImmutableList">Serialized Form</A></DL>
-<HR>
-
-<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-<A NAME="nested_class_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Nested Class Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect">ImmutableList.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="type parameter in ImmutableList.Builder">E</A>&gt;</B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A builder for creating immutable list instances, especially
- <code>public static final</code> lists ("constant lists").</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.html#add(int, E)">add</A></B>(int&nbsp;index,
-    <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A>&nbsp;element)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the list unmodified.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.html#addAll(int, java.util.Collection)">addAll</A></B>(int&nbsp;index,
-       <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A>&gt;&nbsp;newElements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the list unmodified.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.html#asList()">asList</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns this list instance.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect">ImmutableList.Builder</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.html#builder()">builder</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new builder.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.html#copyOf(java.util.Collection)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable list containing the given elements, in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.html#copyOf(java.lang.Iterable)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable list containing the given elements, in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.html#copyOf(java.util.Iterator)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable list containing the given elements, in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>abstract &nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.html#indexOf(java.lang.Object)">indexOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>abstract &nbsp;<A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.html#iterator()">iterator</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable iterator across the elements in this collection.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>abstract &nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.html#lastIndexOf(java.lang.Object)">lastIndexOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.html#of()">of</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the empty immutable list.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E...)">of</A></B>(E...&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable list containing the given elements, in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E)">of</A></B>(E&nbsp;element)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable list containing a single element.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E, E)">of</A></B>(E&nbsp;e1,
-   E&nbsp;e2)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Identical to <A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E, E, E)">of</A></B>(E&nbsp;e1,
-   E&nbsp;e2,
-   E&nbsp;e3)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Identical to <A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E, E, E, E)">of</A></B>(E&nbsp;e1,
-   E&nbsp;e2,
-   E&nbsp;e3,
-   E&nbsp;e4)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Identical to <A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E, E, E, E, E)">of</A></B>(E&nbsp;e1,
-   E&nbsp;e2,
-   E&nbsp;e3,
-   E&nbsp;e4,
-   E&nbsp;e5)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Identical to <A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E, E, E, E, E, E)">of</A></B>(E&nbsp;e1,
-   E&nbsp;e2,
-   E&nbsp;e3,
-   E&nbsp;e4,
-   E&nbsp;e5,
-   E&nbsp;e6)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Identical to <A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E, E, E, E, E, E, E)">of</A></B>(E&nbsp;e1,
-   E&nbsp;e2,
-   E&nbsp;e3,
-   E&nbsp;e4,
-   E&nbsp;e5,
-   E&nbsp;e6,
-   E&nbsp;e7)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Identical to <A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E, E, E, E, E, E, E, E)">of</A></B>(E&nbsp;e1,
-   E&nbsp;e2,
-   E&nbsp;e3,
-   E&nbsp;e4,
-   E&nbsp;e5,
-   E&nbsp;e6,
-   E&nbsp;e7,
-   E&nbsp;e8)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Identical to <A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E, E, E, E, E, E, E, E, E)">of</A></B>(E&nbsp;e1,
-   E&nbsp;e2,
-   E&nbsp;e3,
-   E&nbsp;e4,
-   E&nbsp;e5,
-   E&nbsp;e6,
-   E&nbsp;e7,
-   E&nbsp;e8,
-   E&nbsp;e9)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Identical to <A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E, E, E, E, E, E, E, E, E, E)">of</A></B>(E&nbsp;e1,
-   E&nbsp;e2,
-   E&nbsp;e3,
-   E&nbsp;e4,
-   E&nbsp;e5,
-   E&nbsp;e6,
-   E&nbsp;e7,
-   E&nbsp;e8,
-   E&nbsp;e9,
-   E&nbsp;e10)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Identical to <A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E, E, E, E, E, E, E, E, E, E, E)">of</A></B>(E&nbsp;e1,
-   E&nbsp;e2,
-   E&nbsp;e3,
-   E&nbsp;e4,
-   E&nbsp;e5,
-   E&nbsp;e6,
-   E&nbsp;e7,
-   E&nbsp;e8,
-   E&nbsp;e9,
-   E&nbsp;e10,
-   E&nbsp;e11)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Identical to <A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.html#remove(int)">remove</A></B>(int&nbsp;index)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the list unmodified.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.html#set(int, E)">set</A></B>(int&nbsp;index,
-    <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A>&nbsp;element)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the list unmodified.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>abstract &nbsp;<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableList.html#subList(int, int)">subList</A></B>(int&nbsp;fromIndex,
-        int&nbsp;toIndex)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable list of the elements between the specified <code>fromIndex</code>, inclusive, and <code>toIndex</code>, exclusive.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ImmutableCollection"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/ImmutableCollection.html#add(E)">add</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#addAll(java.util.Collection)">addAll</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#clear()">clear</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#contains(java.lang.Object)">contains</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#containsAll(java.util.Collection)">containsAll</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#remove(java.lang.Object)">remove</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#removeAll(java.util.Collection)">removeAll</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#retainAll(java.util.Collection)">retainAll</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#toArray()">toArray</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#toArray(T[])">toArray</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#toString()">toString</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.util.List"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#add(E)" title="class or interface in java.util">add</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#addAll(java.util.Collection)" title="class or interface in java.util">addAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#clear()" title="class or interface in java.util">clear</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util">contains</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util">containsAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#get(int)" title="class or interface in java.util">get</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#listIterator()" title="class or interface in java.util">listIterator</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#listIterator(int)" title="class or interface in java.util">listIterator</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#removeAll(java.util.Collection)" title="class or interface in java.util">removeAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util">retainAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#size()" title="class or interface in java.util">size</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#toArray()" title="class or interface in java.util">toArray</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#toArray(T[])" title="class or interface in java.util">toArray</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="of()"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt; <B>of</B>()</PRE>
-<DL>
-<DD>Returns the empty immutable list. This set behaves and performs comparably
- to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#emptyList()" title="class or interface in java.util"><CODE>Collections.emptyList()</CODE></A>, and is preferable mainly for consistency
- and maintainability of your code.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="of(java.lang.Object)"><!-- --></A><A NAME="of(E)"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt; <B>of</B>(E&nbsp;element)</PRE>
-<DL>
-<DD>Returns an immutable list containing a single element. This list behaves
- and performs comparably to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#singleton(T)" title="class or interface in java.util"><CODE>Collections.singleton(T)</CODE></A>, but will not
- accept a null element. It is preferable mainly for consistency and
- maintainability of your code.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>element</code> is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="of(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(E, E)"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt; <B>of</B>(E&nbsp;e1,
-                                      E&nbsp;e2)</PRE>
-<DL>
-<DD>Identical to <A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any element is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(E, E, E)"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt; <B>of</B>(E&nbsp;e1,
-                                      E&nbsp;e2,
-                                      E&nbsp;e3)</PRE>
-<DL>
-<DD>Identical to <A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any element is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(E, E, E, E)"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt; <B>of</B>(E&nbsp;e1,
-                                      E&nbsp;e2,
-                                      E&nbsp;e3,
-                                      E&nbsp;e4)</PRE>
-<DL>
-<DD>Identical to <A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any element is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(E, E, E, E, E)"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt; <B>of</B>(E&nbsp;e1,
-                                      E&nbsp;e2,
-                                      E&nbsp;e3,
-                                      E&nbsp;e4,
-                                      E&nbsp;e5)</PRE>
-<DL>
-<DD>Identical to <A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any element is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(E, E, E, E, E, E)"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt; <B>of</B>(E&nbsp;e1,
-                                      E&nbsp;e2,
-                                      E&nbsp;e3,
-                                      E&nbsp;e4,
-                                      E&nbsp;e5,
-                                      E&nbsp;e6)</PRE>
-<DL>
-<DD>Identical to <A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any element is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(E, E, E, E, E, E, E)"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt; <B>of</B>(E&nbsp;e1,
-                                      E&nbsp;e2,
-                                      E&nbsp;e3,
-                                      E&nbsp;e4,
-                                      E&nbsp;e5,
-                                      E&nbsp;e6,
-                                      E&nbsp;e7)</PRE>
-<DL>
-<DD>Identical to <A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any element is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(E, E, E, E, E, E, E, E)"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt; <B>of</B>(E&nbsp;e1,
-                                      E&nbsp;e2,
-                                      E&nbsp;e3,
-                                      E&nbsp;e4,
-                                      E&nbsp;e5,
-                                      E&nbsp;e6,
-                                      E&nbsp;e7,
-                                      E&nbsp;e8)</PRE>
-<DL>
-<DD>Identical to <A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any element is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(E, E, E, E, E, E, E, E, E)"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt; <B>of</B>(E&nbsp;e1,
-                                      E&nbsp;e2,
-                                      E&nbsp;e3,
-                                      E&nbsp;e4,
-                                      E&nbsp;e5,
-                                      E&nbsp;e6,
-                                      E&nbsp;e7,
-                                      E&nbsp;e8,
-                                      E&nbsp;e9)</PRE>
-<DL>
-<DD>Identical to <A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any element is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(E, E, E, E, E, E, E, E, E, E)"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt; <B>of</B>(E&nbsp;e1,
-                                      E&nbsp;e2,
-                                      E&nbsp;e3,
-                                      E&nbsp;e4,
-                                      E&nbsp;e5,
-                                      E&nbsp;e6,
-                                      E&nbsp;e7,
-                                      E&nbsp;e8,
-                                      E&nbsp;e9,
-                                      E&nbsp;e10)</PRE>
-<DL>
-<DD>Identical to <A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any element is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(E, E, E, E, E, E, E, E, E, E, E)"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt; <B>of</B>(E&nbsp;e1,
-                                      E&nbsp;e2,
-                                      E&nbsp;e3,
-                                      E&nbsp;e4,
-                                      E&nbsp;e5,
-                                      E&nbsp;e6,
-                                      E&nbsp;e7,
-                                      E&nbsp;e8,
-                                      E&nbsp;e9,
-                                      E&nbsp;e10,
-                                      E&nbsp;e11)</PRE>
-<DL>
-<DD>Identical to <A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any element is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="of(java.lang.Object[])"><!-- --></A><A NAME="of(E...)"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt; <B>of</B>(E...&nbsp;elements)</PRE>
-<DL>
-<DD>Returns an immutable list containing the given elements, in order.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any of <code>elements</code> is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="copyOf(java.lang.Iterable)"><!-- --></A><H3>
-copyOf</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt; <B>copyOf</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</PRE>
-<DL>
-<DD>Returns an immutable list containing the given elements, in order. If
- <code>elements</code> is a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A>, this method behaves exactly as
- <A HREF="../../../../com/google/common/collect/ImmutableList.html#copyOf(java.util.Collection)"><CODE>copyOf(Collection)</CODE></A>; otherwise, it behaves exactly as <code>copyOf(elements.iterator()</code>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any of <code>elements</code> is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="copyOf(java.util.Collection)"><!-- --></A><H3>
-copyOf</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt; <B>copyOf</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;? extends E&gt;&nbsp;elements)</PRE>
-<DL>
-<DD>Returns an immutable list containing the given elements, in order.
-
- <p><b>Note:</b> Despite what the method name suggests, if <code>elements</code>
- is an <code>ImmutableList</code>, no copy will actually be performed, and the
- given list itself will be returned.
-
- <p>Note that if <code>list</code> is a <code>List&lt;String&gt;</code>, then <code>ImmutableList.copyOf(list)</code> returns an <code>ImmutableList&lt;String&gt;</code>
- containing each of the strings in <code>list</code>, while
- ImmutableList.of(list)} returns an <code>ImmutableList&lt;List&lt;String&gt;&gt;</code>
- containing one element (the given list itself).
-
- <p>This method is safe to use even when <code>elements</code> is a synchronized
- or concurrent collection that is currently being modified by another
- thread.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any of <code>elements</code> is null<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (Iterable overload existed previously)</DD>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="copyOf(java.util.Iterator)"><!-- --></A><H3>
-copyOf</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt; <B>copyOf</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends E&gt;&nbsp;elements)</PRE>
-<DL>
-<DD>Returns an immutable list containing the given elements, in order.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any of <code>elements</code> is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="iterator()"><!-- --></A><H3>
-iterator</H3>
-<PRE>
-public abstract <A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A>&gt; <B>iterator</B>()</PRE>
-<DL>
-<DD><B>Description copied from class: <CODE><A HREF="../../../../com/google/common/collect/ImmutableCollection.html#iterator()">ImmutableCollection</A></CODE></B></DD>
-<DD>Returns an unmodifiable iterator across the elements in this collection.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true#iterator()" title="class or interface in java.lang">iterator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#iterator()" title="class or interface in java.util">iterator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#iterator()" title="class or interface in java.util">iterator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableCollection.html#iterator()">iterator</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="indexOf(java.lang.Object)"><!-- --></A><H3>
-indexOf</H3>
-<PRE>
-public abstract int <B>indexOf</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                            <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#indexOf(java.lang.Object)" title="class or interface in java.util">indexOf</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="lastIndexOf(java.lang.Object)"><!-- --></A><H3>
-lastIndexOf</H3>
-<PRE>
-public abstract int <B>lastIndexOf</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                                <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#lastIndexOf(java.lang.Object)" title="class or interface in java.util">lastIndexOf</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="subList(int, int)"><!-- --></A><H3>
-subList</H3>
-<PRE>
-public abstract <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A>&gt; <B>subList</B>(int&nbsp;fromIndex,
-                                         int&nbsp;toIndex)</PRE>
-<DL>
-<DD>Returns an immutable list of the elements between the specified <code>fromIndex</code>, inclusive, and <code>toIndex</code>, exclusive. (If <code>fromIndex</code> and <code>toIndex</code> are equal, the empty immutable list is
- returned.)
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#subList(int, int)" title="class or interface in java.util">subList</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="addAll(int, java.util.Collection)"><!-- --></A><H3>
-addAll</H3>
-<PRE>
-public final boolean <B>addAll</B>(int&nbsp;index,
-                            <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A>&gt;&nbsp;newElements)</PRE>
-<DL>
-<DD>Guaranteed to throw an exception and leave the list unmodified.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#addAll(int, java.util.Collection)" title="class or interface in java.util">addAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="set(int,java.lang.Object)"><!-- --></A><A NAME="set(int, E)"><!-- --></A><H3>
-set</H3>
-<PRE>
-public final <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A> <B>set</B>(int&nbsp;index,
-                   <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A>&nbsp;element)</PRE>
-<DL>
-<DD>Guaranteed to throw an exception and leave the list unmodified.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#set(int, E)" title="class or interface in java.util">set</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="add(int,java.lang.Object)"><!-- --></A><A NAME="add(int, E)"><!-- --></A><H3>
-add</H3>
-<PRE>
-public final void <B>add</B>(int&nbsp;index,
-                      <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A>&nbsp;element)</PRE>
-<DL>
-<DD>Guaranteed to throw an exception and leave the list unmodified.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#add(int, E)" title="class or interface in java.util">add</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="remove(int)"><!-- --></A><H3>
-remove</H3>
-<PRE>
-public final <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A> <B>remove</B>(int&nbsp;index)</PRE>
-<DL>
-<DD>Guaranteed to throw an exception and leave the list unmodified.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#remove(int)" title="class or interface in java.util">remove</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="asList()"><!-- --></A><H3>
-asList</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A>&gt; <B>asList</B>()</PRE>
-<DL>
-<DD>Returns this list instance.
-<P>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableCollection.html#asList()">asList</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>tentative</b></DD>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="builder()"><!-- --></A><H3>
-builder</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect">ImmutableList.Builder</A>&lt;E&gt; <B>builder</B>()</PRE>
-<DL>
-<DD>Returns a new builder. The generated builder is equivalent to the builder
- created by the <A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect"><CODE>ImmutableList.Builder</CODE></A> constructor.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ImmutableList.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ImmutableList.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableList.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/ImmutableListMultimap.Builder.html b/javadoc/com/google/common/collect/ImmutableListMultimap.Builder.html
deleted file mode 100644
index 66851e8..0000000
--- a/javadoc/com/google/common/collect/ImmutableListMultimap.Builder.html
+++ /dev/null
@@ -1,394 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:58 PST 2010 -->
-<TITLE>
-ImmutableListMultimap.Builder (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="ImmutableListMultimap.Builder (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ImmutableListMultimap.Builder.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ImmutableListMultimap.Builder.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableListMultimap.Builder.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class ImmutableListMultimap.Builder&lt;K,V&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">com.google.common.collect.ImmutableMultimap.Builder</A>&lt;K,V&gt;
-      <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ImmutableListMultimap.Builder&lt;K,V&gt;</B>
-</PRE>
-<DL>
-<DT><B>Enclosing class:</B><DD><A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">V</A>&gt;</DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public static final class <B>ImmutableListMultimap.Builder&lt;K,V&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>&lt;K,V&gt;</DL>
-</PRE>
-
-<P>
-A builder for creating immutable <code>ListMultimap</code> instances, especially
- <code>public static final</code> multimaps ("constant multimaps"). Example:
- <pre>   <code>static final Multimap&lt;String, Integer&gt; STRING_TO_INTEGER_MULTIMAP =
-       new ImmutableListMultimap.Builder&lt;String, Integer&gt;()
-           .put("one", 1)
-           .putAll("several", 1, 2, 3)
-           .putAll("many", 1, 2, 3, 4, 5)
-           .build();</code></pre>
-
- <p>Builder instances can be reused - it is safe to call <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html#build()"><CODE>build()</CODE></A>
- multiple times to build multiple multimaps in series. Each multimap
- contains the key-value mappings in the previously created multimaps.
-<P>
-
-<P>
-<HR>
-
-<P>
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html#ImmutableListMultimap.Builder()">ImmutableListMultimap.Builder</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new builder.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html#build()">build</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a newly-created immutable multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html#put(K, V)">put</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>&nbsp;key,
-    <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds a key-value mapping to the built multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html#putAll(K, java.lang.Iterable)">putAll</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>&nbsp;key,
-       <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt;&nbsp;values)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a collection of values with the same key in the built multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html#putAll(K, V...)">putAll</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>&nbsp;key,
-       <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>...&nbsp;values)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores an array of values with the same key in the built multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html#putAll(com.google.common.collect.Multimap)">putAll</A></B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>,? extends <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt;&nbsp;multimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores another multimap's entries in the built multimap.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="ImmutableListMultimap.Builder()"><!-- --></A><H3>
-ImmutableListMultimap.Builder</H3>
-<PRE>
-public <B>ImmutableListMultimap.Builder</B>()</PRE>
-<DL>
-<DD>Creates a new builder. The returned builder is equivalent to the builder
- generated by <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html#builder()"><CODE>ImmutableListMultimap.builder()</CODE></A>.
-<P>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="put(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="put(K, V)"><!-- --></A><H3>
-put</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt; <B>put</B>(<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>&nbsp;key,
-                                              <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&nbsp;value)</PRE>
-<DL>
-<DD>Adds a key-value mapping to the built multimap.
-<P>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html#put(K, V)">put</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="putAll(java.lang.Object,java.lang.Iterable)"><!-- --></A><A NAME="putAll(K, java.lang.Iterable)"><!-- --></A><H3>
-putAll</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt; <B>putAll</B>(<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>&nbsp;key,
-                                                 <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt;&nbsp;values)</PRE>
-<DL>
-<DD>Stores a collection of values with the same key in the built multimap.
-<P>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html#putAll(K, java.lang.Iterable)">putAll</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>key</code>, <code>values</code>, or any
-     element in <code>values</code> is null. The builder is left in an invalid
-     state.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="putAll(java.lang.Object,java.lang.Object[])"><!-- --></A><A NAME="putAll(K, V...)"><!-- --></A><H3>
-putAll</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt; <B>putAll</B>(<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>&nbsp;key,
-                                                 <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>...&nbsp;values)</PRE>
-<DL>
-<DD>Stores an array of values with the same key in the built multimap.
-<P>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html#putAll(K, V...)">putAll</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if the key or any value is null. The builder
-     is left in an invalid state.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="putAll(com.google.common.collect.Multimap)"><!-- --></A><H3>
-putAll</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt; <B>putAll</B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>,? extends <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt;&nbsp;multimap)</PRE>
-<DL>
-<DD>Stores another multimap's entries in the built multimap. The generated
- multimap's key and value orderings correspond to the iteration ordering
- of the <code>multimap.asMap()</code> view, with new keys and values following
- any existing keys and values.
-<P>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html#putAll(com.google.common.collect.Multimap)">putAll</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any key or value in <code>multimap</code> is
-     null. The builder is left in an invalid state.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="build()"><!-- --></A><H3>
-build</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt; <B>build</B>()</PRE>
-<DL>
-<DD>Returns a newly-created immutable multimap.
-<P>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html#build()">build</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ImmutableListMultimap.Builder.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ImmutableListMultimap.Builder.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableListMultimap.Builder.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/ImmutableListMultimap.html b/javadoc/com/google/common/collect/ImmutableListMultimap.html
deleted file mode 100644
index d9d0af9..0000000
--- a/javadoc/com/google/common/collect/ImmutableListMultimap.html
+++ /dev/null
@@ -1,672 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:58 PST 2010 -->
-<TITLE>
-ImmutableListMultimap (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="ImmutableListMultimap (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ImmutableListMultimap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ImmutableListMultimap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableListMultimap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class ImmutableListMultimap&lt;K,V&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">com.google.common.collect.ImmutableMultimap</A>&lt;K,V&gt;
-      <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ImmutableListMultimap&lt;K,V&gt;</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;, <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public class <B>ImmutableListMultimap&lt;K,V&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;K,V&gt;<DT>implements <A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;</DL>
-</PRE>
-
-<P>
-An immutable <A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect"><CODE>ListMultimap</CODE></A> with reliable user-specified key and value
- iteration order. Does not permit null keys or values.
-
- <p>Unlike <A HREF="../../../../com/google/common/collect/Multimaps.html#unmodifiableListMultimap(com.google.common.collect.ListMultimap)"><CODE>Multimaps.unmodifiableListMultimap(ListMultimap)</CODE></A>, which is
- a <i>view</i> of a separate multimap which can still change, an instance of
- <code>ImmutableListMultimap</code> contains its own data and will <i>never</i>
- change. <code>ImmutableListMultimap</code> is convenient for
- <code>public static final</code> multimaps ("constant multimaps") and also lets
- you easily make a "defensive copy" of a multimap provided to your class by
- a caller.
-
- <p><b>Note</b>: Although this class is not final, it cannot be subclassed as
- it has no public or protected constructors. Thus, instances of this class
- are guaranteed to be immutable.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Jared Levy</DD>
-<DT><B>See Also:</B><DD><A HREF="../../../../serialized-form.html#com.google.common.collect.ImmutableListMultimap">Serialized Form</A></DL>
-<HR>
-
-<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-<A NAME="nested_class_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Nested Class Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt;</B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A builder for creating immutable <code>ListMultimap</code> instances, especially
- <code>public static final</code> multimaps ("constant multimaps").</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html#builder()">builder</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new builder.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html#copyOf(com.google.common.collect.Multimap)">copyOf</A></B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the same mappings as
- <code>multimap</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html#get(K)">get</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">K</A>&nbsp;key)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable list of the values for the given key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html#of()">of</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the empty multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html#of(K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing a single entry.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html#of(K, V, K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1,
-   K&nbsp;k2,
-   V&nbsp;v2)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the given entries, in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html#of(K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1,
-   K&nbsp;k2,
-   V&nbsp;v2,
-   K&nbsp;k3,
-   V&nbsp;v3)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the given entries, in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html#of(K, V, K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1,
-   K&nbsp;k2,
-   V&nbsp;v2,
-   K&nbsp;k3,
-   V&nbsp;v3,
-   K&nbsp;k4,
-   V&nbsp;v4)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the given entries, in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html#of(K, V, K, V, K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1,
-   K&nbsp;k2,
-   V&nbsp;v2,
-   K&nbsp;k3,
-   V&nbsp;v3,
-   K&nbsp;k4,
-   V&nbsp;v4,
-   K&nbsp;k5,
-   V&nbsp;v5)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the given entries, in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html#removeAll(java.lang.Object)">removeAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the multimap unmodified.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">K</A>&nbsp;key,
-              <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">V</A>&gt;&nbsp;values)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the multimap unmodified.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ImmutableMultimap"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#asMap()">asMap</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#clear()">clear</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#containsEntry(java.lang.Object, java.lang.Object)">containsEntry</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#containsKey(java.lang.Object)">containsKey</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#containsValue(java.lang.Object)">containsValue</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#entries()">entries</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#equals(java.lang.Object)">equals</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#hashCode()">hashCode</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#keys()">keys</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#keySet()">keySet</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#put(K, V)">put</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#putAll(K, java.lang.Iterable)">putAll</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#putAll(com.google.common.collect.Multimap)">putAll</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#remove(java.lang.Object, java.lang.Object)">remove</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#size()">size</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#toString()">toString</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#values()">values</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ListMultimap"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface com.google.common.collect.<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/ListMultimap.html#asMap()">asMap</A>, <A HREF="../../../../com/google/common/collect/ListMultimap.html#equals(java.lang.Object)">equals</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.Multimap"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface com.google.common.collect.<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#clear()">clear</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#containsEntry(java.lang.Object, java.lang.Object)">containsEntry</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#containsKey(java.lang.Object)">containsKey</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#containsValue(java.lang.Object)">containsValue</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#entries()">entries</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#hashCode()">hashCode</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#keys()">keys</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#keySet()">keySet</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#put(K, V)">put</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#putAll(K, java.lang.Iterable)">putAll</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#putAll(com.google.common.collect.Multimap)">putAll</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#remove(java.lang.Object, java.lang.Object)">remove</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#size()">size</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#values()">values</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="of()"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;K,V&gt; <B>of</B>()</PRE>
-<DL>
-<DD>Returns the empty multimap.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="of(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(K, V)"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
-                                                  V&nbsp;v1)</PRE>
-<DL>
-<DD>Returns an immutable multimap containing a single entry.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(K, V, K, V)"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
-                                                  V&nbsp;v1,
-                                                  K&nbsp;k2,
-                                                  V&nbsp;v2)</PRE>
-<DL>
-<DD>Returns an immutable multimap containing the given entries, in order.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(K, V, K, V, K, V)"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
-                                                  V&nbsp;v1,
-                                                  K&nbsp;k2,
-                                                  V&nbsp;v2,
-                                                  K&nbsp;k3,
-                                                  V&nbsp;v3)</PRE>
-<DL>
-<DD>Returns an immutable multimap containing the given entries, in order.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(K, V, K, V, K, V, K, V)"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
-                                                  V&nbsp;v1,
-                                                  K&nbsp;k2,
-                                                  V&nbsp;v2,
-                                                  K&nbsp;k3,
-                                                  V&nbsp;v3,
-                                                  K&nbsp;k4,
-                                                  V&nbsp;v4)</PRE>
-<DL>
-<DD>Returns an immutable multimap containing the given entries, in order.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(K, V, K, V, K, V, K, V, K, V)"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
-                                                  V&nbsp;v1,
-                                                  K&nbsp;k2,
-                                                  V&nbsp;v2,
-                                                  K&nbsp;k3,
-                                                  V&nbsp;v3,
-                                                  K&nbsp;k4,
-                                                  V&nbsp;v4,
-                                                  K&nbsp;k5,
-                                                  V&nbsp;v5)</PRE>
-<DL>
-<DD>Returns an immutable multimap containing the given entries, in order.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="builder()"><!-- --></A><H3>
-builder</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder</A>&lt;K,V&gt; <B>builder</B>()</PRE>
-<DL>
-<DD>Returns a new builder. The generated builder is equivalent to the builder
- created by the <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect"><CODE>ImmutableListMultimap.Builder</CODE></A> constructor.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="copyOf(com.google.common.collect.Multimap)"><!-- --></A><H3>
-copyOf</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;K,V&gt; <B>copyOf</B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</PRE>
-<DL>
-<DD>Returns an immutable multimap containing the same mappings as
- <code>multimap</code>. The generated multimap's key and value orderings
- correspond to the iteration ordering of the <code>multimap.asMap()</code> view.
-
- <p><b>Note:</b> Despite what the method name suggests, if
- <code>multimap</code> is an <code>ImmutableListMultimap</code>, no copy will actually
- be performed, and the given multimap itself will be returned.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any key or value in <code>multimap</code> is
-     null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="get(java.lang.Object)"><!-- --></A><A NAME="get(K)"><!-- --></A><H3>
-get</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">V</A>&gt; <B>get</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                            <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">K</A>&nbsp;key)</PRE>
-<DL>
-<DD>Returns an immutable list of the values for the given key.  If no mappings
- in the multimap have the provided key, an empty immutable list is
- returned. The values are in the same order as the parameters used to build
- this multimap.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ListMultimap.html#get(K)">get</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#get(K)">get</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#get(K)">get</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to search for in multimap
-<DT><B>Returns:</B><DD>the collection of values that the key maps to</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="removeAll(java.lang.Object)"><!-- --></A><H3>
-removeAll</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">V</A>&gt; <B>removeAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
-<DL>
-<DD>Guaranteed to throw an exception and leave the multimap unmodified.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ListMultimap.html#removeAll(java.lang.Object)">removeAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#removeAll(java.lang.Object)">removeAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">V</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#removeAll(java.lang.Object)">removeAll</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key of entries to remove from the multimap
-<DT><B>Returns:</B><DD>the collection of removed values, or an empty collection if no
-     values were associated with the provided key. The collection
-     <i>may</i> be modifiable, but updating it will have no effect on the
-     multimap.
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="replaceValues(java.lang.Object,java.lang.Iterable)"><!-- --></A><A NAME="replaceValues(K, java.lang.Iterable)"><!-- --></A><H3>
-replaceValues</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">V</A>&gt; <B>replaceValues</B>(<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">K</A>&nbsp;key,
-                                      <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">V</A>&gt;&nbsp;values)</PRE>
-<DL>
-<DD>Guaranteed to throw an exception and leave the multimap unmodified.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ListMultimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">V</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to store in the multimap<DD><CODE>values</CODE> - values to store in the multimap
-<DT><B>Returns:</B><DD>the collection of replaced values, or an empty collection if no
-     values were previously associated with the key. The collection
-     <i>may</i> be modifiable, but updating it will have no effect on the
-     multimap.
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ImmutableListMultimap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ImmutableListMultimap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableListMultimap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/ImmutableMap.Builder.html b/javadoc/com/google/common/collect/ImmutableMap.Builder.html
deleted file mode 100644
index 0982202..0000000
--- a/javadoc/com/google/common/collect/ImmutableMap.Builder.html
+++ /dev/null
@@ -1,330 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:58 PST 2010 -->
-<TITLE>
-ImmutableMap.Builder (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="ImmutableMap.Builder (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ImmutableMap.Builder.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ImmutableMap.Builder.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableMap.Builder.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class ImmutableMap.Builder&lt;K,V&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ImmutableMap.Builder&lt;K,V&gt;</B>
-</PRE>
-<DL>
-<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect">ImmutableBiMap.Builder</A>, <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect">ImmutableSortedMap.Builder</A></DD>
-</DL>
-<DL>
-<DT><B>Enclosing class:</B><DD><A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A>&gt;</DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public static class <B>ImmutableMap.Builder&lt;K,V&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
-</PRE>
-
-<P>
-A builder for creating immutable map instances, especially <code>public
- static final</code> maps ("constant maps"). Example: <pre>   <code>static final ImmutableMap&lt;String, Integer&gt; WORD_TO_INT =
-       new ImmutableMap.Builder&lt;String, Integer&gt;()
-           .put("one", 1)
-           .put("two", 2)
-           .put("three", 3)
-           .build();</code></pre>
-
- For <i>small</i> immutable maps, the <code>ImmutableMap.of()</code> methods are
- even more convenient.
-
- <p>Builder instances can be reused - it is safe to call <A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html#build()"><CODE>build()</CODE></A>
- multiple times to build multiple maps in series. Each map is a superset of
- the maps created before it.
-<P>
-
-<P>
-<HR>
-
-<P>
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html#ImmutableMap.Builder()">ImmutableMap.Builder</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new builder.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html#build()">build</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a newly-created immutable map.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">ImmutableMap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html#put(K, V)">put</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">K</A>&nbsp;key,
-    <A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">V</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Associates <code>key</code> with <code>value</code> in the built map.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">ImmutableMap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html#putAll(java.util.Map)">putAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">K</A>,? extends <A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">V</A>&gt;&nbsp;map)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Associates all of the given map's keys and values in the built map.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="ImmutableMap.Builder()"><!-- --></A><H3>
-ImmutableMap.Builder</H3>
-<PRE>
-public <B>ImmutableMap.Builder</B>()</PRE>
-<DL>
-<DD>Creates a new builder. The returned builder is equivalent to the builder
- generated by <A HREF="../../../../com/google/common/collect/ImmutableMap.html#builder()"><CODE>ImmutableMap.builder()</CODE></A>.
-<P>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="put(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="put(K, V)"><!-- --></A><H3>
-put</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">ImmutableMap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">V</A>&gt; <B>put</B>(<A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">K</A>&nbsp;key,
-                                     <A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">V</A>&nbsp;value)</PRE>
-<DL>
-<DD>Associates <code>key</code> with <code>value</code> in the built map. Duplicate
- keys are not allowed, and will cause <A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html#build()"><CODE>build()</CODE></A> to fail.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="putAll(java.util.Map)"><!-- --></A><H3>
-putAll</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">ImmutableMap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">V</A>&gt; <B>putAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">K</A>,? extends <A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">V</A>&gt;&nbsp;map)</PRE>
-<DL>
-<DD>Associates all of the given map's keys and values in the built map.
- Duplicate keys are not allowed, and will cause <A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html#build()"><CODE>build()</CODE></A> to fail.
-<P>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any key or value in <code>map</code> is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="build()"><!-- --></A><H3>
-build</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">V</A>&gt; <B>build</B>()</PRE>
-<DL>
-<DD>Returns a newly-created immutable map.
-<P>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if duplicate keys were added</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ImmutableMap.Builder.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ImmutableMap.Builder.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableMap.Builder.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/ImmutableMap.html b/javadoc/com/google/common/collect/ImmutableMap.html
deleted file mode 100644
index 32444bc..0000000
--- a/javadoc/com/google/common/collect/ImmutableMap.html
+++ /dev/null
@@ -1,927 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:58 PST 2010 -->
-<TITLE>
-ImmutableMap (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="ImmutableMap (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ImmutableMap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ImmutableMap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableMap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class ImmutableMap&lt;K,V&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ImmutableMap&lt;K,V&gt;</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</DD>
-</DL>
-<DL>
-<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>, <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public abstract class <B>ImmutableMap&lt;K,V&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A><DT>implements <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A></DL>
-</PRE>
-
-<P>
-An immutable, hash-based <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A> with reliable user-specified iteration
- order. Does not permit null keys or values.
-
- <p>Unlike <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#unmodifiableMap(java.util.Map)" title="class or interface in java.util"><CODE>Collections.unmodifiableMap(java.util.Map<? extends K, ? extends V>)</CODE></A>, which is a <i>view</i> of a
- separate map which can still change, an instance of <code>ImmutableMap</code>
- contains its own data and will <i>never</i> change. <code>ImmutableMap</code> is
- convenient for <code>public static final</code> maps ("constant maps") and also
- lets you easily make a "defensive copy" of a map provided to your class by a
- caller.
-
- <p><b>Note</b>: Although this class is not final, it cannot be subclassed as
- it has no public or protected constructors. Thus, instances of this class are
- guaranteed to be immutable.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Jesse Wilson, Kevin Bourrillion</DD>
-<DT><B>See Also:</B><DD><A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect"><CODE>ImmutableList</CODE></A>, 
-<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect"><CODE>ImmutableSet</CODE></A>, 
-<A HREF="../../../../serialized-form.html#com.google.common.collect.ImmutableMap">Serialized Form</A></DL>
-<HR>
-
-<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-<A NAME="nested_class_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Nested Class Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">ImmutableMap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">V</A>&gt;</B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A builder for creating immutable map instances, especially <code>public
- static final</code> maps ("constant maps").</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="nested_classes_inherited_from_class_java.util.Map"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Nested classes/interfaces inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">V</A>&gt;</CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">ImmutableMap.Builder</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMap.html#builder()">builder</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new builder.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMap.html#clear()">clear</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the map unmodified.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMap.html#containsKey(java.lang.Object)">containsKey</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>abstract &nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMap.html#containsValue(java.lang.Object)">containsValue</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMap.html#copyOf(java.util.Map)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;map)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing the same entries as <code>map</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>abstract &nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A>&gt;&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMap.html#entrySet()">entrySet</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set of the mappings in this map.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMap.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>abstract &nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMap.html#get(java.lang.Object)">get</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMap.html#hashCode()">hashCode</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMap.html#isEmpty()">isEmpty</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>abstract &nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">K</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMap.html#keySet()">keySet</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set of the keys in this map.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMap.html#of()">of</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the empty map.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMap.html#of(K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing a single entry.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMap.html#of(K, V, K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1,
-   K&nbsp;k2,
-   V&nbsp;v2)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing the given entries, in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMap.html#of(K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1,
-   K&nbsp;k2,
-   V&nbsp;v2,
-   K&nbsp;k3,
-   V&nbsp;v3)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing the given entries, in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMap.html#of(K, V, K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1,
-   K&nbsp;k2,
-   V&nbsp;v2,
-   K&nbsp;k3,
-   V&nbsp;v3,
-   K&nbsp;k4,
-   V&nbsp;v4)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing the given entries, in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMap.html#of(K, V, K, V, K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1,
-   K&nbsp;k2,
-   V&nbsp;v2,
-   K&nbsp;k3,
-   V&nbsp;v3,
-   K&nbsp;k4,
-   V&nbsp;v4,
-   K&nbsp;k5,
-   V&nbsp;v5)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing the given entries, in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMap.html#put(K, V)">put</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">K</A>&nbsp;k,
-    <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A>&nbsp;v)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the map unmodified.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMap.html#putAll(java.util.Map)">putAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">K</A>,? extends <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A>&gt;&nbsp;map)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the map unmodified.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMap.html#remove(java.lang.Object)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;o)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the map unmodified.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMap.html#toString()">toString</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>abstract &nbsp;<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMap.html#values()">values</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable collection of the values in this map.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.util.Map"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#size()" title="class or interface in java.util">size</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="of()"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;K,V&gt; <B>of</B>()</PRE>
-<DL>
-<DD>Returns the empty map. This map behaves and performs comparably to
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#emptyMap()" title="class or interface in java.util"><CODE>Collections.emptyMap()</CODE></A>, and is preferable mainly for consistency
- and maintainability of your code.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="of(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(K, V)"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
-                                         V&nbsp;v1)</PRE>
-<DL>
-<DD>Returns an immutable map containing a single entry. This map behaves and
- performs comparably to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#singletonMap(K, V)" title="class or interface in java.util"><CODE>Collections.singletonMap(K, V)</CODE></A> but will not accept
- a null key or value. It is preferable mainly for consistency and
- maintainability of your code.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(K, V, K, V)"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
-                                         V&nbsp;v1,
-                                         K&nbsp;k2,
-                                         V&nbsp;v2)</PRE>
-<DL>
-<DD>Returns an immutable map containing the given entries, in order.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if duplicate keys are provided</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(K, V, K, V, K, V)"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
-                                         V&nbsp;v1,
-                                         K&nbsp;k2,
-                                         V&nbsp;v2,
-                                         K&nbsp;k3,
-                                         V&nbsp;v3)</PRE>
-<DL>
-<DD>Returns an immutable map containing the given entries, in order.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if duplicate keys are provided</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(K, V, K, V, K, V, K, V)"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
-                                         V&nbsp;v1,
-                                         K&nbsp;k2,
-                                         V&nbsp;v2,
-                                         K&nbsp;k3,
-                                         V&nbsp;v3,
-                                         K&nbsp;k4,
-                                         V&nbsp;v4)</PRE>
-<DL>
-<DD>Returns an immutable map containing the given entries, in order.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if duplicate keys are provided</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(K, V, K, V, K, V, K, V, K, V)"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
-                                         V&nbsp;v1,
-                                         K&nbsp;k2,
-                                         V&nbsp;v2,
-                                         K&nbsp;k3,
-                                         V&nbsp;v3,
-                                         K&nbsp;k4,
-                                         V&nbsp;v4,
-                                         K&nbsp;k5,
-                                         V&nbsp;v5)</PRE>
-<DL>
-<DD>Returns an immutable map containing the given entries, in order.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if duplicate keys are provided</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="builder()"><!-- --></A><H3>
-builder</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">ImmutableMap.Builder</A>&lt;K,V&gt; <B>builder</B>()</PRE>
-<DL>
-<DD>Returns a new builder. The generated builder is equivalent to the builder
- created by the <A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect"><CODE>ImmutableMap.Builder</CODE></A> constructor.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="copyOf(java.util.Map)"><!-- --></A><H3>
-copyOf</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;K,V&gt; <B>copyOf</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;map)</PRE>
-<DL>
-<DD>Returns an immutable map containing the same entries as <code>map</code>. If
- <code>map</code> somehow contains entries with duplicate keys (for example, if
- it is a <code>SortedMap</code> whose comparator is not <i>consistent with
- equals</i>), the results of this method are undefined.
-
- <p><b>Note:</b> Despite what the method name suggests, if <code>map</code> is an
- <code>ImmutableMap</code>, no copy will actually be performed, and the given map
- itself will be returned.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any key or value in <code>map</code> is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="put(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="put(K, V)"><!-- --></A><H3>
-put</H3>
-<PRE>
-public final <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A> <B>put</B>(<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">K</A>&nbsp;k,
-                   <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A>&nbsp;v)</PRE>
-<DL>
-<DD>Guaranteed to throw an exception and leave the map unmodified.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#put(K, V)" title="class or interface in java.util">put</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="remove(java.lang.Object)"><!-- --></A><H3>
-remove</H3>
-<PRE>
-public final <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A> <B>remove</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;o)</PRE>
-<DL>
-<DD>Guaranteed to throw an exception and leave the map unmodified.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="putAll(java.util.Map)"><!-- --></A><H3>
-putAll</H3>
-<PRE>
-public final void <B>putAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">K</A>,? extends <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A>&gt;&nbsp;map)</PRE>
-<DL>
-<DD>Guaranteed to throw an exception and leave the map unmodified.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#putAll(java.util.Map)" title="class or interface in java.util">putAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="clear()"><!-- --></A><H3>
-clear</H3>
-<PRE>
-public final void <B>clear</B>()</PRE>
-<DL>
-<DD>Guaranteed to throw an exception and leave the map unmodified.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#clear()" title="class or interface in java.util">clear</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="isEmpty()"><!-- --></A><H3>
-isEmpty</H3>
-<PRE>
-public boolean <B>isEmpty</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="containsKey(java.lang.Object)"><!-- --></A><H3>
-containsKey</H3>
-<PRE>
-public boolean <B>containsKey</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                           <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsKey(java.lang.Object)" title="class or interface in java.util">containsKey</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="containsValue(java.lang.Object)"><!-- --></A><H3>
-containsValue</H3>
-<PRE>
-public abstract boolean <B>containsValue</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                                      <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsValue(java.lang.Object)" title="class or interface in java.util">containsValue</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="get(java.lang.Object)"><!-- --></A><H3>
-get</H3>
-<PRE>
-public abstract <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A> <B>get</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                      <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#get(java.lang.Object)" title="class or interface in java.util">get</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="entrySet()"><!-- --></A><H3>
-entrySet</H3>
-<PRE>
-public abstract <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A>&gt;&gt; <B>entrySet</B>()</PRE>
-<DL>
-<DD>Returns an immutable set of the mappings in this map. The entries are in
- the same order as the parameters used to build this map.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#entrySet()" title="class or interface in java.util">entrySet</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="keySet()"><!-- --></A><H3>
-keySet</H3>
-<PRE>
-public abstract <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">K</A>&gt; <B>keySet</B>()</PRE>
-<DL>
-<DD>Returns an immutable set of the keys in this map. These keys are in
- the same order as the parameters used to build this map.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#keySet()" title="class or interface in java.util">keySet</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="values()"><!-- --></A><H3>
-values</H3>
-<PRE>
-public abstract <A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A>&gt; <B>values</B>()</PRE>
-<DL>
-<DD>Returns an immutable collection of the values in this map. The values are
- in the same order as the parameters used to build this map.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#values()" title="class or interface in java.util">values</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
-equals</H3>
-<PRE>
-public boolean <B>equals</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                      <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="hashCode()"><!-- --></A><H3>
-hashCode</H3>
-<PRE>
-public int <B>hashCode</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toString()"><!-- --></A><H3>
-toString</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ImmutableMap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ImmutableMap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableMap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/ImmutableMultimap.Builder.html b/javadoc/com/google/common/collect/ImmutableMultimap.Builder.html
deleted file mode 100644
index b92c43d..0000000
--- a/javadoc/com/google/common/collect/ImmutableMultimap.Builder.html
+++ /dev/null
@@ -1,381 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:58 PST 2010 -->
-<TITLE>
-ImmutableMultimap.Builder (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="ImmutableMultimap.Builder (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ImmutableMultimap.Builder.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ImmutableMultimap.Builder.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableMultimap.Builder.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class ImmutableMultimap.Builder&lt;K,V&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ImmutableMultimap.Builder&lt;K,V&gt;</B>
-</PRE>
-<DL>
-<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder</A>, <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder</A></DD>
-</DL>
-<DL>
-<DT><B>Enclosing class:</B><DD><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;</DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public static class <B>ImmutableMultimap.Builder&lt;K,V&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
-</PRE>
-
-<P>
-A builder for creating immutable multimap instances, especially
- <code>public static final</code> multimaps ("constant multimaps"). Example:
- <pre>   <code>static final Multimap&lt;String, Integer&gt; STRING_TO_INTEGER_MULTIMAP =
-       new ImmutableMultimap.Builder&lt;String, Integer&gt;()
-           .put("one", 1)
-           .putAll("several", 1, 2, 3)
-           .putAll("many", 1, 2, 3, 4, 5)
-           .build();</code></pre>
-
- <p>Builder instances can be reused - it is safe to call <A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html#build()"><CODE>build()</CODE></A>
- multiple times to build multiple multimaps in series. Each multimap
- contains the key-value mappings in the previously created multimaps.
-<P>
-
-<P>
-<HR>
-
-<P>
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html#ImmutableMultimap.Builder()">ImmutableMultimap.Builder</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new builder.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html#build()">build</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a newly-created immutable multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html#put(K, V)">put</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>&nbsp;key,
-    <A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds a key-value mapping to the built multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html#putAll(K, java.lang.Iterable)">putAll</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>&nbsp;key,
-       <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>&gt;&nbsp;values)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a collection of values with the same key in the built multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html#putAll(K, V...)">putAll</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>&nbsp;key,
-       <A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>...&nbsp;values)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores an array of values with the same key in the built multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html#putAll(com.google.common.collect.Multimap)">putAll</A></B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>,? extends <A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>&gt;&nbsp;multimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores another multimap's entries in the built multimap.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="ImmutableMultimap.Builder()"><!-- --></A><H3>
-ImmutableMultimap.Builder</H3>
-<PRE>
-public <B>ImmutableMultimap.Builder</B>()</PRE>
-<DL>
-<DD>Creates a new builder. The returned builder is equivalent to the builder
- generated by <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#builder()"><CODE>ImmutableMultimap.builder()</CODE></A>.
-<P>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="put(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="put(K, V)"><!-- --></A><H3>
-put</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>&gt; <B>put</B>(<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>&nbsp;key,
-                                          <A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>&nbsp;value)</PRE>
-<DL>
-<DD>Adds a key-value mapping to the built multimap.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="putAll(java.lang.Object,java.lang.Iterable)"><!-- --></A><A NAME="putAll(K, java.lang.Iterable)"><!-- --></A><H3>
-putAll</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>&gt; <B>putAll</B>(<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>&nbsp;key,
-                                             <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>&gt;&nbsp;values)</PRE>
-<DL>
-<DD>Stores a collection of values with the same key in the built multimap.
-<P>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>key</code>, <code>values</code>, or any
-     element in <code>values</code> is null. The builder is left in an invalid
-     state.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="putAll(java.lang.Object,java.lang.Object[])"><!-- --></A><A NAME="putAll(K, V...)"><!-- --></A><H3>
-putAll</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>&gt; <B>putAll</B>(<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>&nbsp;key,
-                                             <A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>...&nbsp;values)</PRE>
-<DL>
-<DD>Stores an array of values with the same key in the built multimap.
-<P>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if the key or any value is null. The builder
-     is left in an invalid state.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="putAll(com.google.common.collect.Multimap)"><!-- --></A><H3>
-putAll</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>&gt; <B>putAll</B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>,? extends <A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>&gt;&nbsp;multimap)</PRE>
-<DL>
-<DD>Stores another multimap's entries in the built multimap. The generated
- multimap's key and value orderings correspond to the iteration ordering
- of the <code>multimap.asMap()</code> view, with new keys and values following
- any existing keys and values.
-<P>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any key or value in <code>multimap</code> is
-     null. The builder is left in an invalid state.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="build()"><!-- --></A><H3>
-build</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>&gt; <B>build</B>()</PRE>
-<DL>
-<DD>Returns a newly-created immutable multimap.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ImmutableMultimap.Builder.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ImmutableMultimap.Builder.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableMultimap.Builder.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/ImmutableMultimap.html b/javadoc/com/google/common/collect/ImmutableMultimap.html
deleted file mode 100644
index df57267..0000000
--- a/javadoc/com/google/common/collect/ImmutableMultimap.html
+++ /dev/null
@@ -1,1150 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:58 PST 2010 -->
-<TITLE>
-ImmutableMultimap (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="ImmutableMultimap (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ImmutableMultimap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ImmutableMultimap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableMultimap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class ImmutableMultimap&lt;K,V&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ImmutableMultimap&lt;K,V&gt;</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A></DD>
-</DL>
-<DL>
-<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>, <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public abstract class <B>ImmutableMultimap&lt;K,V&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A><DT>implements <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A></DL>
-</PRE>
-
-<P>
-An immutable <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A>. Does not permit null keys or values.
-
- <p>Unlike <A HREF="../../../../com/google/common/collect/Multimaps.html#unmodifiableMultimap(com.google.common.collect.Multimap)"><CODE>Multimaps.unmodifiableMultimap(Multimap)</CODE></A>, which is
- a <i>view</i> of a separate multimap which can still change, an instance of
- <code>ImmutableMultimap</code> contains its own data and will <i>never</i>
- change. <code>ImmutableMultimap</code> is convenient for
- <code>public static final</code> multimaps ("constant multimaps") and also lets
- you easily make a "defensive copy" of a multimap provided to your class by
- a caller.
-
- <p><b>Note</b>: Although this class is not final, it cannot be subclassed as
- it has no public or protected constructors. Thus, instances of this class
- are guaranteed to be immutable.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Jared Levy</DD>
-<DT><B>See Also:</B><DD><A HREF="../../../../serialized-form.html#com.google.common.collect.ImmutableMultimap">Serialized Form</A></DL>
-<HR>
-
-<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-<A NAME="nested_class_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Nested Class Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>&gt;</B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A builder for creating immutable multimap instances, especially
- <code>public static final</code> multimaps ("constant multimaps").</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#asMap()">asMap</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map that associates each key with its corresponding
- values in the multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#builder()">builder</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new builder.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#clear()">clear</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the multimap unmodified.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#containsEntry(java.lang.Object, java.lang.Object)">containsEntry</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
-              <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains the specified key-value pair.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#containsKey(java.lang.Object)">containsKey</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains any values for the specified
- key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#containsValue(java.lang.Object)">containsValue</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains the specified value for any
- key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#copyOf(com.google.common.collect.Multimap)">copyOf</A></B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the same mappings as
- <code>multimap</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#entries()">entries</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable collection of all key-value pairs in the multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares the specified object with this multimap for equality.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>abstract &nbsp;<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#get(K)">get</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>&nbsp;key)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable collection of the values for the given key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#hashCode()">hashCode</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the hash code for this multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#isEmpty()">isEmpty</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains no key-value pairs.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#keys()">keys</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection, which may contain duplicates, of all keys.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#keySet()">keySet</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set of the distinct keys in this multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#of()">of</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an empty multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#of(K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing a single entry.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#of(K, V, K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1,
-   K&nbsp;k2,
-   V&nbsp;v2)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the given entries, in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#of(K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1,
-   K&nbsp;k2,
-   V&nbsp;v2,
-   K&nbsp;k3,
-   V&nbsp;v3)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the given entries, in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#of(K, V, K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1,
-   K&nbsp;k2,
-   V&nbsp;v2,
-   K&nbsp;k3,
-   V&nbsp;v3,
-   K&nbsp;k4,
-   V&nbsp;v4)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the given entries, in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#of(K, V, K, V, K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1,
-   K&nbsp;k2,
-   V&nbsp;v2,
-   K&nbsp;k3,
-   V&nbsp;v3,
-   K&nbsp;k4,
-   V&nbsp;v4,
-   K&nbsp;k5,
-   V&nbsp;v5)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the given entries, in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#put(K, V)">put</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>&nbsp;key,
-    <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the multimap unmodified.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#putAll(K, java.lang.Iterable)">putAll</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>&nbsp;key,
-       <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;&nbsp;values)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the multimap unmodified.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#putAll(com.google.common.collect.Multimap)">putAll</A></B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,? extends <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;&nbsp;multimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the multimap unmodified.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#remove(java.lang.Object, java.lang.Object)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
-       <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the multimap unmodified.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#removeAll(java.lang.Object)">removeAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the multimap unmodified.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>&nbsp;key,
-              <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;&nbsp;values)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the multimap unmodified.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#size()">size</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of key-value pairs in the multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#toString()">toString</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#values()">values</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable collection of the values in this multimap.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="of()"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;K,V&gt; <B>of</B>()</PRE>
-<DL>
-<DD>Returns an empty multimap.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="of(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(K, V)"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
-                                              V&nbsp;v1)</PRE>
-<DL>
-<DD>Returns an immutable multimap containing a single entry.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(K, V, K, V)"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
-                                              V&nbsp;v1,
-                                              K&nbsp;k2,
-                                              V&nbsp;v2)</PRE>
-<DL>
-<DD>Returns an immutable multimap containing the given entries, in order.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(K, V, K, V, K, V)"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
-                                              V&nbsp;v1,
-                                              K&nbsp;k2,
-                                              V&nbsp;v2,
-                                              K&nbsp;k3,
-                                              V&nbsp;v3)</PRE>
-<DL>
-<DD>Returns an immutable multimap containing the given entries, in order.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(K, V, K, V, K, V, K, V)"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
-                                              V&nbsp;v1,
-                                              K&nbsp;k2,
-                                              V&nbsp;v2,
-                                              K&nbsp;k3,
-                                              V&nbsp;v3,
-                                              K&nbsp;k4,
-                                              V&nbsp;v4)</PRE>
-<DL>
-<DD>Returns an immutable multimap containing the given entries, in order.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(K, V, K, V, K, V, K, V, K, V)"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
-                                              V&nbsp;v1,
-                                              K&nbsp;k2,
-                                              V&nbsp;v2,
-                                              K&nbsp;k3,
-                                              V&nbsp;v3,
-                                              K&nbsp;k4,
-                                              V&nbsp;v4,
-                                              K&nbsp;k5,
-                                              V&nbsp;v5)</PRE>
-<DL>
-<DD>Returns an immutable multimap containing the given entries, in order.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="builder()"><!-- --></A><H3>
-builder</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>&lt;K,V&gt; <B>builder</B>()</PRE>
-<DL>
-<DD>Returns a new builder. The generated builder is equivalent to the builder
- created by the <A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect"><CODE>ImmutableMultimap.Builder</CODE></A> constructor.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="copyOf(com.google.common.collect.Multimap)"><!-- --></A><H3>
-copyOf</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;K,V&gt; <B>copyOf</B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</PRE>
-<DL>
-<DD>Returns an immutable multimap containing the same mappings as
- <code>multimap</code>. The generated multimap's key and value orderings
- correspond to the iteration ordering of the <code>multimap.asMap()</code> view.
-
- <p><b>Note:</b> Despite what the method name suggests, if
- <code>multimap</code> is an <code>ImmutableMultimap</code>, no copy will actually be
- performed, and the given multimap itself will be returned.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any key or value in <code>multimap</code> is
-     null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="removeAll(java.lang.Object)"><!-- --></A><H3>
-removeAll</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt; <B>removeAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
-<DL>
-<DD>Guaranteed to throw an exception and leave the multimap unmodified.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#removeAll(java.lang.Object)">removeAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key of entries to remove from the multimap
-<DT><B>Returns:</B><DD>the collection of removed values, or an empty collection if no
-     values were associated with the provided key. The collection
-     <i>may</i> be modifiable, but updating it will have no effect on the
-     multimap.
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="replaceValues(java.lang.Object,java.lang.Iterable)"><!-- --></A><A NAME="replaceValues(K, java.lang.Iterable)"><!-- --></A><H3>
-replaceValues</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt; <B>replaceValues</B>(<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>&nbsp;key,
-                                            <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;&nbsp;values)</PRE>
-<DL>
-<DD>Guaranteed to throw an exception and leave the multimap unmodified.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to store in the multimap<DD><CODE>values</CODE> - values to store in the multimap
-<DT><B>Returns:</B><DD>the collection of replaced values, or an empty collection if no
-     values were previously associated with the key. The collection
-     <i>may</i> be modifiable, but updating it will have no effect on the
-     multimap.
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="clear()"><!-- --></A><H3>
-clear</H3>
-<PRE>
-public void <B>clear</B>()</PRE>
-<DL>
-<DD>Guaranteed to throw an exception and leave the multimap unmodified.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#clear()">clear</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="get(java.lang.Object)"><!-- --></A><A NAME="get(K)"><!-- --></A><H3>
-get</H3>
-<PRE>
-public abstract <A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt; <B>get</B>(<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>&nbsp;key)</PRE>
-<DL>
-<DD>Returns an immutable collection of the values for the given key.  If no
- mappings in the multimap have the provided key, an empty immutable
- collection is returned. The values are in the same order as the parameters
- used to build this multimap.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#get(K)">get</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to search for in multimap
-<DT><B>Returns:</B><DD>the collection of values that the key maps to</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="put(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="put(K, V)"><!-- --></A><H3>
-put</H3>
-<PRE>
-public boolean <B>put</B>(<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>&nbsp;key,
-                   <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&nbsp;value)</PRE>
-<DL>
-<DD>Guaranteed to throw an exception and leave the multimap unmodified.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#put(K, V)">put</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to store in the multimap<DD><CODE>value</CODE> - value to store in the multimap
-<DT><B>Returns:</B><DD><code>true</code> if the method increased the size of the multimap, or
-     <code>false</code> if the multimap already contained the key-value pair and
-     doesn't allow duplicates
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="putAll(java.lang.Object,java.lang.Iterable)"><!-- --></A><A NAME="putAll(K, java.lang.Iterable)"><!-- --></A><H3>
-putAll</H3>
-<PRE>
-public boolean <B>putAll</B>(<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>&nbsp;key,
-                      <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;&nbsp;values)</PRE>
-<DL>
-<DD>Guaranteed to throw an exception and leave the multimap unmodified.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#putAll(K, java.lang.Iterable)">putAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to store in the multimap<DD><CODE>values</CODE> - values to store in the multimap
-<DT><B>Returns:</B><DD><code>true</code> if the multimap changed
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="putAll(com.google.common.collect.Multimap)"><!-- --></A><H3>
-putAll</H3>
-<PRE>
-public boolean <B>putAll</B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,? extends <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;&nbsp;multimap)</PRE>
-<DL>
-<DD>Guaranteed to throw an exception and leave the multimap unmodified.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#putAll(com.google.common.collect.Multimap)">putAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>multimap</CODE> - mappings to store in this multimap
-<DT><B>Returns:</B><DD><code>true</code> if the multimap changed
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="remove(java.lang.Object, java.lang.Object)"><!-- --></A><H3>
-remove</H3>
-<PRE>
-public boolean <B>remove</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
-                      <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
-<DL>
-<DD>Guaranteed to throw an exception and leave the multimap unmodified.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#remove(java.lang.Object, java.lang.Object)">remove</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key of entry to remove from the multimap<DD><CODE>value</CODE> - value of entry to remove the multimap
-<DT><B>Returns:</B><DD><code>true</code> if the multimap changed
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="containsEntry(java.lang.Object, java.lang.Object)"><!-- --></A><H3>
-containsEntry</H3>
-<PRE>
-public boolean <B>containsEntry</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                             <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
-                             <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                             <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsEntry(java.lang.Object, java.lang.Object)">Multimap</A></CODE></B></DD>
-<DD>Returns <code>true</code> if the multimap contains the specified key-value pair.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsEntry(java.lang.Object, java.lang.Object)">containsEntry</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to search for in multimap<DD><CODE>value</CODE> - value to search for in multimap</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="containsKey(java.lang.Object)"><!-- --></A><H3>
-containsKey</H3>
-<PRE>
-public boolean <B>containsKey</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                           <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsKey(java.lang.Object)">Multimap</A></CODE></B></DD>
-<DD>Returns <code>true</code> if the multimap contains any values for the specified
- key.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsKey(java.lang.Object)">containsKey</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to search for in multimap</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="containsValue(java.lang.Object)"><!-- --></A><H3>
-containsValue</H3>
-<PRE>
-public boolean <B>containsValue</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                             <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsValue(java.lang.Object)">Multimap</A></CODE></B></DD>
-<DD>Returns <code>true</code> if the multimap contains the specified value for any
- key.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsValue(java.lang.Object)">containsValue</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>value</CODE> - value to search for in multimap</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="isEmpty()"><!-- --></A><H3>
-isEmpty</H3>
-<PRE>
-public boolean <B>isEmpty</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#isEmpty()">Multimap</A></CODE></B></DD>
-<DD>Returns <code>true</code> if the multimap contains no key-value pairs.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#isEmpty()">isEmpty</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="size()"><!-- --></A><H3>
-size</H3>
-<PRE>
-public int <B>size</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#size()">Multimap</A></CODE></B></DD>
-<DD>Returns the number of key-value pairs in the multimap.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#size()">size</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
-equals</H3>
-<PRE>
-public boolean <B>equals</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                      <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#equals(java.lang.Object)">Multimap</A></CODE></B></DD>
-<DD>Compares the specified object with this multimap for equality. Two
- multimaps are equal when their map views, as returned by <A HREF="../../../../com/google/common/collect/Multimap.html#asMap()"><CODE>Multimap.asMap()</CODE></A>,
- are also equal.
-
- <p>In general, two multimaps with identical key-value mappings may or may
- not be equal, depending on the implementation. For example, two
- <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect"><CODE>SetMultimap</CODE></A> instances with the same key-value mappings are equal,
- but equality of two <A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect"><CODE>ListMultimap</CODE></A> instances depends on the ordering
- of the values for each key.
-
- <p>A non-empty <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect"><CODE>SetMultimap</CODE></A> cannot be equal to a non-empty
- <A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect"><CODE>ListMultimap</CODE></A>, since their <A HREF="../../../../com/google/common/collect/Multimap.html#asMap()"><CODE>Multimap.asMap()</CODE></A> views contain unequal
- collections as values. However, any two empty multimaps are equal, because
- they both have empty <A HREF="../../../../com/google/common/collect/Multimap.html#asMap()"><CODE>Multimap.asMap()</CODE></A> views.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#equals(java.lang.Object)">equals</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="hashCode()"><!-- --></A><H3>
-hashCode</H3>
-<PRE>
-public int <B>hashCode</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#hashCode()">Multimap</A></CODE></B></DD>
-<DD>Returns the hash code for this multimap.
-
- <p>The hash code of a multimap is defined as the hash code of the map view,
- as returned by <A HREF="../../../../com/google/common/collect/Multimap.html#asMap()"><CODE>Multimap.asMap()</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#hashCode()">hashCode</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toString()"><!-- --></A><H3>
-toString</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="keySet()"><!-- --></A><H3>
-keySet</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>&gt; <B>keySet</B>()</PRE>
-<DL>
-<DD>Returns an immutable set of the distinct keys in this multimap. These keys
- are ordered according to when they first appeared during the construction
- of this multimap.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#keySet()">keySet</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>the collection of distinct keys</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="asMap()"><!-- --></A><H3>
-asMap</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;&gt; <B>asMap</B>()</PRE>
-<DL>
-<DD>Returns an immutable map that associates each key with its corresponding
- values in the multimap.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#asMap()">asMap</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a map view from a key to its collection of values</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="entries()"><!-- --></A><H3>
-entries</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;&gt; <B>entries</B>()</PRE>
-<DL>
-<DD>Returns an immutable collection of all key-value pairs in the multimap. Its
- iterator traverses the values for the first key, the values for the second
- key, and so on.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#entries()">entries</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>collection of map entries consisting of key-value pairs</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="keys()"><!-- --></A><H3>
-keys</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>&gt; <B>keys</B>()</PRE>
-<DL>
-<DD>Returns a collection, which may contain duplicates, of all keys. The number
- of times a key appears in the returned multiset equals the number of
- mappings the key has in the multimap. Duplicate keys appear consecutively
- in the multiset's iteration order.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#keys()">keys</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a multiset with keys corresponding to the distinct keys of the
-     multimap and frequencies corresponding to the number of values that
-     each key maps to</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="values()"><!-- --></A><H3>
-values</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt; <B>values</B>()</PRE>
-<DL>
-<DD>Returns an immutable collection of the values in this multimap. Its
- iterator traverses the values for the first key, the values for the second
- key, and so on.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#values()">values</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>collection of values, which may include the same value multiple
-     times if it occurs in multiple mappings</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ImmutableMultimap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ImmutableMultimap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableMultimap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/ImmutableMultiset.Builder.html b/javadoc/com/google/common/collect/ImmutableMultiset.Builder.html
deleted file mode 100644
index 3ec0233..0000000
--- a/javadoc/com/google/common/collect/ImmutableMultiset.Builder.html
+++ /dev/null
@@ -1,453 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:58 PST 2010 -->
-<TITLE>
-ImmutableMultiset.Builder (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="ImmutableMultiset.Builder (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ImmutableMultiset.Builder.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ImmutableMultiset.Builder.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableMultiset.Builder.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class ImmutableMultiset.Builder&lt;E&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ImmutableMultiset.Builder&lt;E&gt;</B>
-</PRE>
-<DL>
-<DT><B>Enclosing class:</B><DD><A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt;</DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public static final class <B>ImmutableMultiset.Builder&lt;E&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
-</PRE>
-
-<P>
-A builder for creating immutable multiset instances, especially
- <code>public static final</code> multisets ("constant multisets").
-
- <p>Example:
- <pre>   <code>public static final ImmutableMultiset&lt;Bean&gt; BEANS
-       = new ImmutableMultiset.Builder&lt;Bean&gt;()
-           .addCopies(Bean.COCOA, 4)
-           .addCopies(Bean.GARDEN, 6)
-           .addCopies(Bean.RED, 8)
-           .addCopies(Bean.BLACK_EYED, 10)
-           .build();</code></pre>
-
- <p>Builder instances can be reused - it is safe to call <A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html#build()"><CODE>build()</CODE></A>
- multiple times to build multiple multisets in series. Each multiset
- is a superset of the multiset created before it.
-<P>
-
-<P>
-<HR>
-
-<P>
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html#ImmutableMultiset.Builder()">ImmutableMultiset.Builder</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new builder.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html#add(E...)">add</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>...&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds each element of <code>elements</code> to the <code>ImmutableMultiset</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html#add(E)">add</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&nbsp;element)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds <code>element</code> to the <code>ImmutableMultiset</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html#addAll(java.lang.Iterable)">addAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds each element of <code>elements</code> to the <code>ImmutableMultiset</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html#addAll(java.util.Iterator)">addAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds each element of <code>elements</code> to the <code>ImmutableMultiset</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html#addCopies(E, int)">addCopies</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&nbsp;element,
-          int&nbsp;occurrences)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds a number of occurrences of an element to this <code>ImmutableMultiset</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html#build()">build</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a newly-created <code>ImmutableMultiset</code> based on the contents
- of the <code>Builder</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html#setCount(E, int)">setCount</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&nbsp;element,
-         int&nbsp;count)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds or removes the necessary occurrences of an element such that the
- element attains the desired count.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="ImmutableMultiset.Builder()"><!-- --></A><H3>
-ImmutableMultiset.Builder</H3>
-<PRE>
-public <B>ImmutableMultiset.Builder</B>()</PRE>
-<DL>
-<DD>Creates a new builder. The returned builder is equivalent to the builder
- generated by <A HREF="../../../../com/google/common/collect/ImmutableMultiset.html#builder()"><CODE>ImmutableMultiset.builder()</CODE></A>.
-<P>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="add(java.lang.Object)"><!-- --></A><A NAME="add(E)"><!-- --></A><H3>
-add</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&gt; <B>add</B>(<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&nbsp;element)</PRE>
-<DL>
-<DD>Adds <code>element</code> to the <code>ImmutableMultiset</code>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to add
-<DT><B>Returns:</B><DD>this <code>Builder</code> object
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>element</code> is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="addCopies(java.lang.Object,int)"><!-- --></A><A NAME="addCopies(E, int)"><!-- --></A><H3>
-addCopies</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&gt; <B>addCopies</B>(<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&nbsp;element,
-                                              int&nbsp;occurrences)</PRE>
-<DL>
-<DD>Adds a number of occurrences of an element to this <code>ImmutableMultiset</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to add<DD><CODE>occurrences</CODE> - the number of occurrences of the element to add. May
-     be zero, in which case no change will be made.
-<DT><B>Returns:</B><DD>this <code>Builder</code> object
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>element</code> is null
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>occurrences</code> is negative, or
-     if this operation would result in more than <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true#MAX_VALUE" title="class or interface in java.lang"><CODE>Integer.MAX_VALUE</CODE></A>
-     occurrences of the element</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="setCount(java.lang.Object,int)"><!-- --></A><A NAME="setCount(E, int)"><!-- --></A><H3>
-setCount</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&gt; <B>setCount</B>(<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&nbsp;element,
-                                             int&nbsp;count)</PRE>
-<DL>
-<DD>Adds or removes the necessary occurrences of an element such that the
- element attains the desired count.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to add or remove occurrences of<DD><CODE>count</CODE> - the desired count of the element in this multiset
-<DT><B>Returns:</B><DD>this <code>Builder</code> object
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>element</code> is null
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>count</code> is negative</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="add(java.lang.Object[])"><!-- --></A><A NAME="add(E...)"><!-- --></A><H3>
-add</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&gt; <B>add</B>(<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>...&nbsp;elements)</PRE>
-<DL>
-<DD>Adds each element of <code>elements</code> to the <code>ImmutableMultiset</code>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>elements</CODE> - the elements to add
-<DT><B>Returns:</B><DD>this <code>Builder</code> object
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>elements</code> is null or contains a
-     null element</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="addAll(java.lang.Iterable)"><!-- --></A><H3>
-addAll</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&gt; <B>addAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&gt;&nbsp;elements)</PRE>
-<DL>
-<DD>Adds each element of <code>elements</code> to the <code>ImmutableMultiset</code>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>elements</CODE> - the <code>Iterable</code> to add to the <code>ImmutableMultiset</code>
-<DT><B>Returns:</B><DD>this <code>Builder</code> object
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>elements</code> is null or contains a
-     null element</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="addAll(java.util.Iterator)"><!-- --></A><H3>
-addAll</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&gt; <B>addAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&gt;&nbsp;elements)</PRE>
-<DL>
-<DD>Adds each element of <code>elements</code> to the <code>ImmutableMultiset</code>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>elements</CODE> - the elements to add to the <code>ImmutableMultiset</code>
-<DT><B>Returns:</B><DD>this <code>Builder</code> object
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>elements</code> is null or contains a
-     null element</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="build()"><!-- --></A><H3>
-build</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&gt; <B>build</B>()</PRE>
-<DL>
-<DD>Returns a newly-created <code>ImmutableMultiset</code> based on the contents
- of the <code>Builder</code>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ImmutableMultiset.Builder.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ImmutableMultiset.Builder.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableMultiset.Builder.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/ImmutableMultiset.html b/javadoc/com/google/common/collect/ImmutableMultiset.html
deleted file mode 100644
index 266e687..0000000
--- a/javadoc/com/google/common/collect/ImmutableMultiset.html
+++ /dev/null
@@ -1,866 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:58 PST 2010 -->
-<TITLE>
-ImmutableMultiset (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="ImmutableMultiset (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ImmutableMultiset.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ImmutableMultiset.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableMultiset.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class ImmutableMultiset&lt;E&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">com.google.common.collect.ImmutableCollection</A>&lt;E&gt;
-      <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ImmutableMultiset&lt;E&gt;</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public class <B>ImmutableMultiset&lt;E&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;E&gt;<DT>implements <A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</DL>
-</PRE>
-
-<P>
-An immutable hash-based multiset. Does not permit null elements.
-
- <p>Its iterator orders elements according to the first appearance of the
- element among the items passed to the factory method or builder. When the
- multiset contains multiple instances of an element, those instances are
- consecutive in the iteration order.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Jared Levy</DD>
-<DT><B>See Also:</B><DD><A HREF="../../../../serialized-form.html#com.google.common.collect.ImmutableMultiset">Serialized Form</A></DL>
-<HR>
-
-<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-<A NAME="nested_class_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Nested Class Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&gt;</B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A builder for creating immutable multiset instances, especially
- <code>public static final</code> multisets ("constant multisets").</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="nested_classes_inherited_from_class_com.google.common.collect.Multiset"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Nested classes/interfaces inherited from interface com.google.common.collect.<A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="type parameter in Multiset.Entry">E</A>&gt;</CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultiset.html#add(E, int)">add</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&nbsp;element,
-    int&nbsp;occurrences)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the collection unmodified.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultiset.html#builder()">builder</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new builder.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultiset.html#contains(java.lang.Object)">contains</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Determines whether this multiset contains the specified element.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultiset.html#copyOf(java.lang.Iterable)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multiset containing the given elements.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultiset.html#copyOf(java.util.Iterator)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multiset containing the given elements.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultiset.html#count(java.lang.Object)">count</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of occurrences of an element in this multiset (the
- <i>count</i> of the element).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultiset.html#elementSet()">elementSet</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the set of distinct elements contained in this multiset.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt;&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultiset.html#entrySet()">entrySet</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of the contents of this multiset, grouped into <code>Multiset.Entry</code> instances, each providing an element of the multiset and
- the count of that element.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultiset.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares the specified object with this multiset for equality.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultiset.html#hashCode()">hashCode</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the hash code for this multiset.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultiset.html#iterator()">iterator</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable iterator across the elements in this collection.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultiset.html#of()">of</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the empty immutable multiset.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultiset.html#of(E...)">of</A></B>(E...&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multiset containing the given elements.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultiset.html#remove(java.lang.Object, int)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element,
-       int&nbsp;occurrences)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the collection unmodified.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultiset.html#setCount(E, int)">setCount</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&nbsp;element,
-         int&nbsp;count)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the collection unmodified.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultiset.html#setCount(E, int, int)">setCount</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&nbsp;element,
-         int&nbsp;oldCount,
-         int&nbsp;newCount)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the collection unmodified.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultiset.html#size()">size</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableMultiset.html#toString()">toString</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ImmutableCollection"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/ImmutableCollection.html#add(E)">add</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#addAll(java.util.Collection)">addAll</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#asList()">asList</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#clear()">clear</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#containsAll(java.util.Collection)">containsAll</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#remove(java.lang.Object)">remove</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#removeAll(java.util.Collection)">removeAll</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#retainAll(java.util.Collection)">retainAll</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#toArray()">toArray</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#toArray(T[])">toArray</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.Multiset"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface com.google.common.collect.<A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#add(E)">add</A>, <A HREF="../../../../com/google/common/collect/Multiset.html#containsAll(java.util.Collection)">containsAll</A>, <A HREF="../../../../com/google/common/collect/Multiset.html#remove(java.lang.Object)">remove</A>, <A HREF="../../../../com/google/common/collect/Multiset.html#removeAll(java.util.Collection)">removeAll</A>, <A HREF="../../../../com/google/common/collect/Multiset.html#retainAll(java.util.Collection)">retainAll</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.util.Collection"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#addAll(java.util.Collection)" title="class or interface in java.util">addAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#clear()" title="class or interface in java.util">clear</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#toArray()" title="class or interface in java.util">toArray</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#toArray(T[])" title="class or interface in java.util">toArray</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="of()"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>&lt;E&gt; <B>of</B>()</PRE>
-<DL>
-<DD>Returns the empty immutable multiset.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="of(java.lang.Object[])"><!-- --></A><A NAME="of(E...)"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>&lt;E&gt; <B>of</B>(E...&nbsp;elements)</PRE>
-<DL>
-<DD>Returns an immutable multiset containing the given elements.
-
- <p>The multiset is ordered by the first occurrence of each element. For
- example, <code>ImmutableMultiset.of(2, 3, 1, 3)</code> yields a multiset with
- elements in the order <code>2, 3, 3, 1</code>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any of <code>elements</code> is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="copyOf(java.lang.Iterable)"><!-- --></A><H3>
-copyOf</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>&lt;E&gt; <B>copyOf</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</PRE>
-<DL>
-<DD>Returns an immutable multiset containing the given elements.
-
- <p>The multiset is ordered by the first occurrence of each element. For
- example, <code>ImmutableMultiset.copyOf(Arrays.asList(2, 3, 1, 3))</code> yields
- a multiset with elements in the order <code>2, 3, 3, 1</code>.
-
- <p>Note that if <code>c</code> is a <code>Collection&lt;String&gt;</code>, then <code>ImmutableMultiset.copyOf(c)</code> returns an <code>ImmutableMultiset&lt;String&gt;</code>
- containing each of the strings in <code>c</code>, while
- <code>ImmutableMultiset.of(c)</code> returns an
- <code>ImmutableMultiset&lt;Collection&lt;String&gt;&gt;</code> containing one element (the
- given collection itself).
-
- <p><b>Note:</b> Despite what the method name suggests, if <code>elements</code>
- is an <code>ImmutableMultiset</code>, no copy will actually be performed, and
- the given multiset itself will be returned.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any of <code>elements</code> is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="copyOf(java.util.Iterator)"><!-- --></A><H3>
-copyOf</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>&lt;E&gt; <B>copyOf</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends E&gt;&nbsp;elements)</PRE>
-<DL>
-<DD>Returns an immutable multiset containing the given elements.
-
- <p>The multiset is ordered by the first occurrence of each element. For
- example,
- <code>ImmutableMultiset.copyOf(Arrays.asList(2, 3, 1, 3).iterator())</code>
- yields a multiset with elements in the order <code>2, 3, 3, 1</code>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any of <code>elements</code> is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="count(java.lang.Object)"><!-- --></A><H3>
-count</H3>
-<PRE>
-public int <B>count</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                 <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#count(java.lang.Object)">Multiset</A></CODE></B></DD>
-<DD>Returns the number of occurrences of an element in this multiset (the
- <i>count</i> of the element). Note that for an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>-based
- multiset, this gives the same result as <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#frequency(java.util.Collection, java.lang.Object)" title="class or interface in java.util"><CODE>Collections.frequency(java.util.Collection<?>, java.lang.Object)</CODE></A>
- (which would presumably perform more poorly).
-
- <p><b>Note:</b> the utility method <A HREF="../../../../com/google/common/collect/Iterables.html#frequency(java.lang.Iterable, java.lang.Object)"><CODE>Iterables.frequency(java.lang.Iterable<?>, java.lang.Object)</CODE></A> generalizes
- this operation; it correctly delegates to this method when dealing with a
- multiset, but it can also accept any other iterable type.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#count(java.lang.Object)">count</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to count occurrences of
-<DT><B>Returns:</B><DD>the number of occurrences of the element in this multiset; possibly
-     zero but never negative</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="iterator()"><!-- --></A><H3>
-iterator</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt; <B>iterator</B>()</PRE>
-<DL>
-<DD><B>Description copied from class: <CODE><A HREF="../../../../com/google/common/collect/ImmutableCollection.html#iterator()">ImmutableCollection</A></CODE></B></DD>
-<DD>Returns an unmodifiable iterator across the elements in this collection.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#iterator()">iterator</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true#iterator()" title="class or interface in java.lang">iterator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#iterator()" title="class or interface in java.util">iterator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableCollection.html#iterator()">iterator</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="size()"><!-- --></A><H3>
-size</H3>
-<PRE>
-public int <B>size</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#size()" title="class or interface in java.util">size</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="contains(java.lang.Object)"><!-- --></A><H3>
-contains</H3>
-<PRE>
-public boolean <B>contains</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                        <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#contains(java.lang.Object)">Multiset</A></CODE></B></DD>
-<DD>Determines whether this multiset contains the specified element.
-
- <p>This method refines <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util"><CODE>Collection.contains(java.lang.Object)</CODE></A> to further specify that
- it <b>may not</b> throw an exception in response to <code>element</code> being
- null or of the wrong type.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#contains(java.lang.Object)">contains</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util">contains</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableCollection.html#contains(java.lang.Object)">contains</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to check for
-<DT><B>Returns:</B><DD><code>true</code> if this multiset contains at least one occurrence of
-     the element</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="add(java.lang.Object,int)"><!-- --></A><A NAME="add(E, int)"><!-- --></A><H3>
-add</H3>
-<PRE>
-public int <B>add</B>(<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&nbsp;element,
-               int&nbsp;occurrences)</PRE>
-<DL>
-<DD>Guaranteed to throw an exception and leave the collection unmodified.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#add(E, int)">add</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to add occurrences of; may be <code>null</code> only
-     if explicitly allowed by the implementation<DD><CODE>occurrences</CODE> - the number of occurrences of the element to add. May be
-     zero, in which case no change will be made.
-<DT><B>Returns:</B><DD>the count of the element before the operation; possibly zero
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="remove(java.lang.Object, int)"><!-- --></A><H3>
-remove</H3>
-<PRE>
-public int <B>remove</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element,
-                  int&nbsp;occurrences)</PRE>
-<DL>
-<DD>Guaranteed to throw an exception and leave the collection unmodified.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#remove(java.lang.Object, int)">remove</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to conditionally remove occurrences of<DD><CODE>occurrences</CODE> - the number of occurrences of the element to remove. May
-     be zero, in which case no change will be made.
-<DT><B>Returns:</B><DD>the count of the element before the operation; possibly zero
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="setCount(java.lang.Object,int)"><!-- --></A><A NAME="setCount(E, int)"><!-- --></A><H3>
-setCount</H3>
-<PRE>
-public int <B>setCount</B>(<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&nbsp;element,
-                    int&nbsp;count)</PRE>
-<DL>
-<DD>Guaranteed to throw an exception and leave the collection unmodified.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int)">setCount</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to add or remove occurrences of; may be null
-     only if explicitly allowed by the implementation<DD><CODE>count</CODE> - the desired count of the element in this multiset
-<DT><B>Returns:</B><DD>the count of the element before the operation; possibly zero
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="setCount(java.lang.Object,int,int)"><!-- --></A><A NAME="setCount(E, int, int)"><!-- --></A><H3>
-setCount</H3>
-<PRE>
-public boolean <B>setCount</B>(<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&nbsp;element,
-                        int&nbsp;oldCount,
-                        int&nbsp;newCount)</PRE>
-<DL>
-<DD>Guaranteed to throw an exception and leave the collection unmodified.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int, int)">setCount</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to conditionally set the count of; may be null
-     only if explicitly allowed by the implementation<DD><CODE>oldCount</CODE> - the expected present count of the element in this multiset<DD><CODE>newCount</CODE> - the desired count of the element in this multiset
-<DT><B>Returns:</B><DD><code>true</code> if the condition for modification was met. This
-     implies that the multiset was indeed modified, unless
-     <code>oldCount == newCount</code>.
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
-equals</H3>
-<PRE>
-public boolean <B>equals</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                      <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#equals(java.lang.Object)">Multiset</A></CODE></B></DD>
-<DD>Compares the specified object with this multiset for equality. Returns
- <code>true</code> if the given object is also a multiset and contains equal
- elements with equal counts, regardless of order.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#equals(java.lang.Object)">equals</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="hashCode()"><!-- --></A><H3>
-hashCode</H3>
-<PRE>
-public int <B>hashCode</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#hashCode()">Multiset</A></CODE></B></DD>
-<DD>Returns the hash code for this multiset. This is defined as the sum of
-
- <pre>  (element == null ? 0 : element.hashCode()) ^ count(element)</pre>
-
- over all distinct elements in the multiset. It follows that a multiset and
- its entry set always have the same hash code.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#hashCode()">hashCode</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toString()"><!-- --></A><H3>
-toString</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#toString()">Multiset</A></CODE></B></DD>
-<DD>
-
- <p>It is recommended, though not mandatory, that this method return the
- result of invoking <A HREF="../../../../com/google/common/collect/Multiset.html#toString()"><CODE>Multiset.toString()</CODE></A> on the <A HREF="../../../../com/google/common/collect/Multiset.html#entrySet()"><CODE>Multiset.entrySet()</CODE></A>, yielding a
- result such as
- <pre>
-     [a x 3, c, d x 2, e]
- </pre>
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#toString()">toString</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableCollection.html#toString()">toString</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="elementSet()"><!-- --></A><H3>
-elementSet</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt; <B>elementSet</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#elementSet()">Multiset</A></CODE></B></DD>
-<DD>Returns the set of distinct elements contained in this multiset. The
- element set is backed by the same data as the multiset, so any change to
- either is immediately reflected in the other. The order of the elements in
- the element set is unspecified.
-
- <p>If the element set supports any removal operations, these necessarily
- cause <b>all</b> occurrences of the removed element(s) to be removed from
- the multiset. Implementations are not expected to support the add
- operations, although this is possible.
-
- <p>A common use for the element set is to find the number of distinct
- elements in the multiset: <code>elementSet().size()</code>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#elementSet()">elementSet</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a view of the set of distinct elements in this multiset</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="entrySet()"><!-- --></A><H3>
-entrySet</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt;&gt; <B>entrySet</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#entrySet()">Multiset</A></CODE></B></DD>
-<DD>Returns a view of the contents of this multiset, grouped into <code>Multiset.Entry</code> instances, each providing an element of the multiset and
- the count of that element. This set contains exactly one entry for each
- distinct element in the multiset (thus it always has the same size as the
- <A HREF="../../../../com/google/common/collect/Multiset.html#elementSet()"><CODE>Multiset.elementSet()</CODE></A>). The order of the elements in the element set is
- unspecified.
-
- <p>The entry set is backed by the same data as the multiset, so any change
- to either is immediately reflected in the other. However, multiset changes
- may or may not be reflected in any <code>Entry</code> instances already
- retrieved from the entry set (this is implementation-dependent).
- Furthermore, implementations are not required to support modifications to
- the entry set at all, and the <code>Entry</code> instances themselves don't
- even have methods for modification. See the specific implementation class
- for more details on how its entry set handles modifications.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#entrySet()">entrySet</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a set of entries representing the data of this multiset</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="builder()"><!-- --></A><H3>
-builder</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>&lt;E&gt; <B>builder</B>()</PRE>
-<DL>
-<DD>Returns a new builder. The generated builder is equivalent to the builder
- created by the <A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect"><CODE>ImmutableMultiset.Builder</CODE></A> constructor.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ImmutableMultiset.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ImmutableMultiset.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableMultiset.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/ImmutableSet.Builder.html b/javadoc/com/google/common/collect/ImmutableSet.Builder.html
deleted file mode 100644
index e735c2e..0000000
--- a/javadoc/com/google/common/collect/ImmutableSet.Builder.html
+++ /dev/null
@@ -1,402 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:58 PST 2010 -->
-<TITLE>
-ImmutableSet.Builder (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="ImmutableSet.Builder (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ImmutableSet.Builder.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ImmutableSet.Builder.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableSet.Builder.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class ImmutableSet.Builder&lt;E&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ImmutableSet.Builder&lt;E&gt;</B>
-</PRE>
-<DL>
-<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A></DD>
-</DL>
-<DL>
-<DT><B>Enclosing class:</B><DD><A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="type parameter in ImmutableSet">E</A>&gt;</DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public static class <B>ImmutableSet.Builder&lt;E&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
-</PRE>
-
-<P>
-A builder for creating immutable set instances, especially
- <code>public static final</code> sets ("constant sets").
-
- <p>Example:
- <pre><code>public static final ImmutableSet&lt;Color&gt; GOOGLE_COLORS
-       = new ImmutableSet.Builder&lt;Color&gt;()
-           .addAll(WEBSAFE_COLORS)
-           .add(new Color(0, 191, 255))
-           .build();</code></pre>
-
- <p>Builder instances can be reused - it is safe to call <A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html#build()"><CODE>build()</CODE></A>
- multiple times to build multiple sets in series. Each set
- is a superset of the set created before it.
-<P>
-
-<P>
-<HR>
-
-<P>
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html#ImmutableSet.Builder()">ImmutableSet.Builder</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new builder.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="type parameter in ImmutableSet.Builder">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html#add(E...)">add</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="type parameter in ImmutableSet.Builder">E</A>...&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds each element of <code>elements</code> to the <code>ImmutableSet</code>,
- ignoring duplicate elements (only the first duplicate element is added).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="type parameter in ImmutableSet.Builder">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html#add(E)">add</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="type parameter in ImmutableSet.Builder">E</A>&nbsp;element)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds <code>element</code> to the <code>ImmutableSet</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="type parameter in ImmutableSet.Builder">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html#addAll(java.lang.Iterable)">addAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="type parameter in ImmutableSet.Builder">E</A>&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds each element of <code>elements</code> to the <code>ImmutableSet</code>,
- ignoring duplicate elements (only the first duplicate element is added).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="type parameter in ImmutableSet.Builder">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html#addAll(java.util.Iterator)">addAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="type parameter in ImmutableSet.Builder">E</A>&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds each element of <code>elements</code> to the <code>ImmutableSet</code>,
- ignoring duplicate elements (only the first duplicate element is added).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="type parameter in ImmutableSet.Builder">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html#build()">build</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a newly-created <code>ImmutableSet</code> based on the contents of
- the <code>Builder</code>.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="ImmutableSet.Builder()"><!-- --></A><H3>
-ImmutableSet.Builder</H3>
-<PRE>
-public <B>ImmutableSet.Builder</B>()</PRE>
-<DL>
-<DD>Creates a new builder. The returned builder is equivalent to the builder
- generated by <A HREF="../../../../com/google/common/collect/ImmutableSet.html#builder()"><CODE>ImmutableSet.builder()</CODE></A>.
-<P>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="add(java.lang.Object)"><!-- --></A><A NAME="add(E)"><!-- --></A><H3>
-add</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="type parameter in ImmutableSet.Builder">E</A>&gt; <B>add</B>(<A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="type parameter in ImmutableSet.Builder">E</A>&nbsp;element)</PRE>
-<DL>
-<DD>Adds <code>element</code> to the <code>ImmutableSet</code>.  If the <code>ImmutableSet</code> already contains <code>element</code>, then <code>add</code> has no
- effect (only the previously added element is retained).
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to add
-<DT><B>Returns:</B><DD>this <code>Builder</code> object
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>element</code> is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="add(java.lang.Object[])"><!-- --></A><A NAME="add(E...)"><!-- --></A><H3>
-add</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="type parameter in ImmutableSet.Builder">E</A>&gt; <B>add</B>(<A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="type parameter in ImmutableSet.Builder">E</A>...&nbsp;elements)</PRE>
-<DL>
-<DD>Adds each element of <code>elements</code> to the <code>ImmutableSet</code>,
- ignoring duplicate elements (only the first duplicate element is added).
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>elements</CODE> - the elements to add
-<DT><B>Returns:</B><DD>this <code>Builder</code> object
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>elements</code> is null or contains a
-     null element</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="addAll(java.lang.Iterable)"><!-- --></A><H3>
-addAll</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="type parameter in ImmutableSet.Builder">E</A>&gt; <B>addAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="type parameter in ImmutableSet.Builder">E</A>&gt;&nbsp;elements)</PRE>
-<DL>
-<DD>Adds each element of <code>elements</code> to the <code>ImmutableSet</code>,
- ignoring duplicate elements (only the first duplicate element is added).
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>elements</CODE> - the <code>Iterable</code> to add to the <code>ImmutableSet</code>
-<DT><B>Returns:</B><DD>this <code>Builder</code> object
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>elements</code> is null or contains a
-     null element</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="addAll(java.util.Iterator)"><!-- --></A><H3>
-addAll</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="type parameter in ImmutableSet.Builder">E</A>&gt; <B>addAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="type parameter in ImmutableSet.Builder">E</A>&gt;&nbsp;elements)</PRE>
-<DL>
-<DD>Adds each element of <code>elements</code> to the <code>ImmutableSet</code>,
- ignoring duplicate elements (only the first duplicate element is added).
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>elements</CODE> - the elements to add to the <code>ImmutableSet</code>
-<DT><B>Returns:</B><DD>this <code>Builder</code> object
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>elements</code> is null or contains a
-     null element</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="build()"><!-- --></A><H3>
-build</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="type parameter in ImmutableSet.Builder">E</A>&gt; <B>build</B>()</PRE>
-<DL>
-<DD>Returns a newly-created <code>ImmutableSet</code> based on the contents of
- the <code>Builder</code>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ImmutableSet.Builder.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ImmutableSet.Builder.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableSet.Builder.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/ImmutableSet.html b/javadoc/com/google/common/collect/ImmutableSet.html
deleted file mode 100644
index 5ed5180..0000000
--- a/javadoc/com/google/common/collect/ImmutableSet.html
+++ /dev/null
@@ -1,722 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:58 PST 2010 -->
-<TITLE>
-ImmutableSet (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="ImmutableSet (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ImmutableSet.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ImmutableSet.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableSet.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class ImmutableSet&lt;E&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">com.google.common.collect.ImmutableCollection</A>&lt;E&gt;
-      <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ImmutableSet&lt;E&gt;</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt;</DD>
-</DL>
-<DL>
-<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public abstract class <B>ImmutableSet&lt;E&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;E&gt;<DT>implements <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt;</DL>
-</PRE>
-
-<P>
-A high-performance, immutable <code>Set</code> with reliable, user-specified
- iteration order. Does not permit null elements.
-
- <p>Unlike <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#unmodifiableSet(java.util.Set)" title="class or interface in java.util"><CODE>Collections.unmodifiableSet(java.util.Set<? extends T>)</CODE></A>, which is a <i>view</i> of a
- separate collection that can still change, an instance of this class contains
- its own private data and will <i>never</i> change. This class is convenient
- for <code>public static final</code> sets ("constant sets") and also lets you
- easily make a "defensive copy" of a set provided to your class by a caller.
-
- <p><b>Warning:</b> Like most sets, an <code>ImmutableSet</code> will not function
- correctly if an element is modified after being placed in the set. For this
- reason, and to avoid general confusion, it is strongly recommended to place
- only immutable objects into this collection.
-
- <p>This class has been observed to perform significantly better than <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashSet.html?is-external=true" title="class or interface in java.util"><CODE>HashSet</CODE></A> for objects with very fast <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang"><CODE>Object.hashCode()</CODE></A> implementations
- (as a well-behaved immutable object should). While this class's factory
- methods create hash-based instances, the <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect"><CODE>ImmutableSortedSet</CODE></A> subclass
- performs binary searches instead.
-
- <p><b>Note</b>: Although this class is not final, it cannot be subclassed
- outside its package as it has no public or protected constructors. Thus,
- instances of this type are guaranteed to be immutable.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Kevin Bourrillion, Nick Kralevich</DD>
-<DT><B>See Also:</B><DD><A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect"><CODE>ImmutableList</CODE></A>, 
-<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect"><CODE>ImmutableMap</CODE></A>, 
-<A HREF="../../../../serialized-form.html#com.google.common.collect.ImmutableSet">Serialized Form</A></DL>
-<HR>
-
-<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-<A NAME="nested_class_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Nested Class Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="type parameter in ImmutableSet.Builder">E</A>&gt;</B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A builder for creating immutable set instances, especially
- <code>public static final</code> sets ("constant sets").</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSet.html#builder()">builder</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new builder.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSet.html#copyOf(java.lang.Iterable)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set containing the given elements, in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSet.html#copyOf(java.util.Iterator)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set containing the given elements, in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSet.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSet.html#hashCode()">hashCode</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>abstract &nbsp;<A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="type parameter in ImmutableSet">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSet.html#iterator()">iterator</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable iterator across the elements in this collection.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSet.html#of()">of</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the empty immutable set.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSet.html#of(E...)">of</A></B>(E...&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set containing the given elements, in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSet.html#of(E)">of</A></B>(E&nbsp;element)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set containing a single element.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSet.html#of(E, E)">of</A></B>(E&nbsp;e1,
-   E&nbsp;e2)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set containing the given elements, in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSet.html#of(E, E, E)">of</A></B>(E&nbsp;e1,
-   E&nbsp;e2,
-   E&nbsp;e3)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set containing the given elements, in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSet.html#of(E, E, E, E)">of</A></B>(E&nbsp;e1,
-   E&nbsp;e2,
-   E&nbsp;e3,
-   E&nbsp;e4)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set containing the given elements, in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSet.html#of(E, E, E, E, E)">of</A></B>(E&nbsp;e1,
-   E&nbsp;e2,
-   E&nbsp;e3,
-   E&nbsp;e4,
-   E&nbsp;e5)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set containing the given elements, in order.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ImmutableCollection"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/ImmutableCollection.html#add(E)">add</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#addAll(java.util.Collection)">addAll</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#asList()">asList</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#clear()">clear</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#contains(java.lang.Object)">contains</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#containsAll(java.util.Collection)">containsAll</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#remove(java.lang.Object)">remove</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#removeAll(java.util.Collection)">removeAll</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#retainAll(java.util.Collection)">retainAll</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#toArray()">toArray</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#toArray(T[])">toArray</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#toString()">toString</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.util.Set"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#add(E)" title="class or interface in java.util">add</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#addAll(java.util.Collection)" title="class or interface in java.util">addAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#clear()" title="class or interface in java.util">clear</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util">contains</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util">containsAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#removeAll(java.util.Collection)" title="class or interface in java.util">removeAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util">retainAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#size()" title="class or interface in java.util">size</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#toArray()" title="class or interface in java.util">toArray</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#toArray(T[])" title="class or interface in java.util">toArray</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="of()"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt; <B>of</B>()</PRE>
-<DL>
-<DD>Returns the empty immutable set. This set behaves and performs comparably
- to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#emptySet()" title="class or interface in java.util"><CODE>Collections.emptySet()</CODE></A>, and is preferable mainly for consistency
- and maintainability of your code.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="of(java.lang.Object)"><!-- --></A><A NAME="of(E)"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt; <B>of</B>(E&nbsp;element)</PRE>
-<DL>
-<DD>Returns an immutable set containing a single element. This set behaves and
- performs comparably to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#singleton(T)" title="class or interface in java.util"><CODE>Collections.singleton(T)</CODE></A>, but will not accept
- a null element. It is preferable mainly for consistency and
- maintainability of your code.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="of(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(E, E)"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt; <B>of</B>(E&nbsp;e1,
-                                     E&nbsp;e2)</PRE>
-<DL>
-<DD>Returns an immutable set containing the given elements, in order. Repeated
- occurrences of an element (according to <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>) after the
- first are ignored.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any element is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(E, E, E)"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt; <B>of</B>(E&nbsp;e1,
-                                     E&nbsp;e2,
-                                     E&nbsp;e3)</PRE>
-<DL>
-<DD>Returns an immutable set containing the given elements, in order. Repeated
- occurrences of an element (according to <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>) after the
- first are ignored.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any element is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(E, E, E, E)"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt; <B>of</B>(E&nbsp;e1,
-                                     E&nbsp;e2,
-                                     E&nbsp;e3,
-                                     E&nbsp;e4)</PRE>
-<DL>
-<DD>Returns an immutable set containing the given elements, in order. Repeated
- occurrences of an element (according to <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>) after the
- first are ignored.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any element is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(E, E, E, E, E)"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt; <B>of</B>(E&nbsp;e1,
-                                     E&nbsp;e2,
-                                     E&nbsp;e3,
-                                     E&nbsp;e4,
-                                     E&nbsp;e5)</PRE>
-<DL>
-<DD>Returns an immutable set containing the given elements, in order. Repeated
- occurrences of an element (according to <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>) after the
- first are ignored.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any element is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="of(java.lang.Object[])"><!-- --></A><A NAME="of(E...)"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt; <B>of</B>(E...&nbsp;elements)</PRE>
-<DL>
-<DD>Returns an immutable set containing the given elements, in order. Repeated
- occurrences of an element (according to <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>) after the
- first are ignored (but too many of these may result in the set being
- sized inappropriately).
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any of <code>elements</code> is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="copyOf(java.lang.Iterable)"><!-- --></A><H3>
-copyOf</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt; <B>copyOf</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</PRE>
-<DL>
-<DD>Returns an immutable set containing the given elements, in order. Repeated
- occurrences of an element (according to <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>) after the
- first are ignored (but too many of these may result in the set being
- sized inappropriately). This method iterates over <code>elements</code> at most
- once.
-
- <p>Note that if <code>s</code> is a <code>Set&lt;String&gt;</code>, then <code>ImmutableSet.copyOf(s)</code> returns an <code>ImmutableSet&lt;String&gt;</code> containing
- each of the strings in <code>s</code>, while <code>ImmutableSet.of(s)</code> returns
- a <code>ImmutableSet&lt;Set&lt;String&gt;&gt;</code> containing one element (the given set
- itself).
-
- <p><b>Note:</b> Despite what the method name suggests, if <code>elements</code>
- is an <code>ImmutableSet</code> (but not an <code>ImmutableSortedSet</code>), no copy
- will actually be performed, and the given set itself will be returned.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any of <code>elements</code> is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="copyOf(java.util.Iterator)"><!-- --></A><H3>
-copyOf</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt; <B>copyOf</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends E&gt;&nbsp;elements)</PRE>
-<DL>
-<DD>Returns an immutable set containing the given elements, in order. Repeated
- occurrences of an element (according to <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>) after the
- first are ignored.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any of <code>elements</code> is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
-equals</H3>
-<PRE>
-public boolean <B>equals</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                      <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="type parameter in ImmutableSet">E</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="type parameter in ImmutableSet">E</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="hashCode()"><!-- --></A><H3>
-hashCode</H3>
-<PRE>
-public int <B>hashCode</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="type parameter in ImmutableSet">E</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="type parameter in ImmutableSet">E</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="iterator()"><!-- --></A><H3>
-iterator</H3>
-<PRE>
-public abstract <A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="type parameter in ImmutableSet">E</A>&gt; <B>iterator</B>()</PRE>
-<DL>
-<DD><B>Description copied from class: <CODE><A HREF="../../../../com/google/common/collect/ImmutableCollection.html#iterator()">ImmutableCollection</A></CODE></B></DD>
-<DD>Returns an unmodifiable iterator across the elements in this collection.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true#iterator()" title="class or interface in java.lang">iterator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="type parameter in ImmutableSet">E</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#iterator()" title="class or interface in java.util">iterator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="type parameter in ImmutableSet">E</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#iterator()" title="class or interface in java.util">iterator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="type parameter in ImmutableSet">E</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableCollection.html#iterator()">iterator</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="type parameter in ImmutableSet">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="builder()"><!-- --></A><H3>
-builder</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A>&lt;E&gt; <B>builder</B>()</PRE>
-<DL>
-<DD>Returns a new builder. The generated builder is equivalent to the builder
- created by the <A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect"><CODE>ImmutableSet.Builder</CODE></A> constructor.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ImmutableSet.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ImmutableSet.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableSet.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/ImmutableSetMultimap.Builder.html b/javadoc/com/google/common/collect/ImmutableSetMultimap.Builder.html
deleted file mode 100644
index 3f32378..0000000
--- a/javadoc/com/google/common/collect/ImmutableSetMultimap.Builder.html
+++ /dev/null
@@ -1,396 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:58 PST 2010 -->
-<TITLE>
-ImmutableSetMultimap.Builder (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="ImmutableSetMultimap.Builder (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ImmutableSetMultimap.Builder.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ImmutableSetMultimap.Builder.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableSetMultimap.Builder.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class ImmutableSetMultimap.Builder&lt;K,V&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">com.google.common.collect.ImmutableMultimap.Builder</A>&lt;K,V&gt;
-      <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ImmutableSetMultimap.Builder&lt;K,V&gt;</B>
-</PRE>
-<DL>
-<DT><B>Enclosing class:</B><DD><A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt;</DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public static final class <B>ImmutableSetMultimap.Builder&lt;K,V&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>&lt;K,V&gt;</DL>
-</PRE>
-
-<P>
-A builder for creating immutable <code>SetMultimap</code> instances, especially
- <code>public static final</code> multimaps ("constant multimaps"). Example:
- <pre>   <code>static final Multimap&lt;String, Integer&gt; STRING_TO_INTEGER_MULTIMAP =
-       new ImmutableSetMultimap.Builder&lt;String, Integer&gt;()
-           .put("one", 1)
-           .putAll("several", 1, 2, 3)
-           .putAll("many", 1, 2, 3, 4, 5)
-           .build();</code></pre>
-
- <p>Builder instances can be reused - it is safe to call <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html#build()"><CODE>build()</CODE></A>
- multiple times to build multiple multimaps in series. Each multimap
- contains the key-value mappings in the previously created multimaps.
-<P>
-
-<P>
-<HR>
-
-<P>
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html#ImmutableSetMultimap.Builder()">ImmutableSetMultimap.Builder</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new builder.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html#build()">build</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a newly-created immutable set multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html#put(K, V)">put</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>&nbsp;key,
-    <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds a key-value mapping to the built multimap if it is not already
- present.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html#putAll(K, java.lang.Iterable)">putAll</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>&nbsp;key,
-       <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt;&nbsp;values)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a collection of values with the same key in the built multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html#putAll(K, V...)">putAll</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>&nbsp;key,
-       <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>...&nbsp;values)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores an array of values with the same key in the built multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html#putAll(com.google.common.collect.Multimap)">putAll</A></B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>,? extends <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt;&nbsp;multimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores another multimap's entries in the built multimap.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="ImmutableSetMultimap.Builder()"><!-- --></A><H3>
-ImmutableSetMultimap.Builder</H3>
-<PRE>
-public <B>ImmutableSetMultimap.Builder</B>()</PRE>
-<DL>
-<DD>Creates a new builder. The returned builder is equivalent to the builder
- generated by <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html#builder()"><CODE>ImmutableSetMultimap.builder()</CODE></A>.
-<P>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="put(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="put(K, V)"><!-- --></A><H3>
-put</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt; <B>put</B>(<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>&nbsp;key,
-                                             <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&nbsp;value)</PRE>
-<DL>
-<DD>Adds a key-value mapping to the built multimap if it is not already
- present.
-<P>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html#put(K, V)">put</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="putAll(java.lang.Object,java.lang.Iterable)"><!-- --></A><A NAME="putAll(K, java.lang.Iterable)"><!-- --></A><H3>
-putAll</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt; <B>putAll</B>(<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>&nbsp;key,
-                                                <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt;&nbsp;values)</PRE>
-<DL>
-<DD>Stores a collection of values with the same key in the built multimap.
-<P>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html#putAll(K, java.lang.Iterable)">putAll</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>key</code>, <code>values</code>, or any
-     element in <code>values</code> is null. The builder is left in an invalid
-     state.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="putAll(java.lang.Object,java.lang.Object[])"><!-- --></A><A NAME="putAll(K, V...)"><!-- --></A><H3>
-putAll</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt; <B>putAll</B>(<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>&nbsp;key,
-                                                <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>...&nbsp;values)</PRE>
-<DL>
-<DD>Stores an array of values with the same key in the built multimap.
-<P>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html#putAll(K, V...)">putAll</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if the key or any value is null. The
-     builder is left in an invalid state.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="putAll(com.google.common.collect.Multimap)"><!-- --></A><H3>
-putAll</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt; <B>putAll</B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>,? extends <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt;&nbsp;multimap)</PRE>
-<DL>
-<DD>Stores another multimap's entries in the built multimap. The generated
- multimap's key and value orderings correspond to the iteration ordering
- of the <code>multimap.asMap()</code> view, with new keys and values following
- any existing keys and values.
-<P>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html#putAll(com.google.common.collect.Multimap)">putAll</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any key or value in <code>multimap</code> is
-     null. The builder is left in an invalid state.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="build()"><!-- --></A><H3>
-build</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt; <B>build</B>()</PRE>
-<DL>
-<DD>Returns a newly-created immutable set multimap.
-<P>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html#build()">build</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ImmutableSetMultimap.Builder.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ImmutableSetMultimap.Builder.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableSetMultimap.Builder.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/ImmutableSetMultimap.html b/javadoc/com/google/common/collect/ImmutableSetMultimap.html
deleted file mode 100644
index bcfe064..0000000
--- a/javadoc/com/google/common/collect/ImmutableSetMultimap.html
+++ /dev/null
@@ -1,708 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:58 PST 2010 -->
-<TITLE>
-ImmutableSetMultimap (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="ImmutableSetMultimap (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ImmutableSetMultimap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ImmutableSetMultimap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableSetMultimap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class ImmutableSetMultimap&lt;K,V&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">com.google.common.collect.ImmutableMultimap</A>&lt;K,V&gt;
-      <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ImmutableSetMultimap&lt;K,V&gt;</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;, <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public class <B>ImmutableSetMultimap&lt;K,V&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;K,V&gt;<DT>implements <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;</DL>
-</PRE>
-
-<P>
-An immutable <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect"><CODE>SetMultimap</CODE></A> with reliable user-specified key and value
- iteration order. Does not permit null keys or values.
-
- <p>Unlike <A HREF="../../../../com/google/common/collect/Multimaps.html#unmodifiableSetMultimap(com.google.common.collect.SetMultimap)"><CODE>Multimaps.unmodifiableSetMultimap(SetMultimap)</CODE></A>, which is
- a <i>view</i> of a separate multimap which can still change, an instance of
- <code>ImmutableSetMultimap</code> contains its own data and will <i>never</i>
- change. <code>ImmutableSetMultimap</code> is convenient for
- <code>public static final</code> multimaps ("constant multimaps") and also lets
- you easily make a "defensive copy" of a multimap provided to your class by
- a caller.
-
- <p><b>Note</b>: Although this class is not final, it cannot be subclassed as
- it has no public or protected constructors. Thus, instances of this class
- are guaranteed to be immutable.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Mike Ward</DD>
-<DT><B>See Also:</B><DD><A HREF="../../../../serialized-form.html#com.google.common.collect.ImmutableSetMultimap">Serialized Form</A></DL>
-<HR>
-
-<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-<A NAME="nested_class_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Nested Class Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt;</B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A builder for creating immutable <code>SetMultimap</code> instances, especially
- <code>public static final</code> multimaps ("constant multimaps").</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html#builder()">builder</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect"><CODE>ImmutableSetMultimap.Builder</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html#copyOf(com.google.common.collect.Multimap)">copyOf</A></B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set multimap containing the same mappings as
- <code>multimap</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt;&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html#entries()">entries</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable collection of all key-value pairs in the multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html#get(K)">get</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">K</A>&nbsp;key)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set of the values for the given key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html#of()">of</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the empty multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html#of(K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing a single entry.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html#of(K, V, K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1,
-   K&nbsp;k2,
-   V&nbsp;v2)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the given entries, in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html#of(K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1,
-   K&nbsp;k2,
-   V&nbsp;v2,
-   K&nbsp;k3,
-   V&nbsp;v3)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the given entries, in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html#of(K, V, K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1,
-   K&nbsp;k2,
-   V&nbsp;v2,
-   K&nbsp;k3,
-   V&nbsp;v3,
-   K&nbsp;k4,
-   V&nbsp;v4)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the given entries, in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html#of(K, V, K, V, K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1,
-   K&nbsp;k2,
-   V&nbsp;v2,
-   K&nbsp;k3,
-   V&nbsp;v3,
-   K&nbsp;k4,
-   V&nbsp;v4,
-   K&nbsp;k5,
-   V&nbsp;v5)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the given entries, in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html#removeAll(java.lang.Object)">removeAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the multimap unmodified.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">K</A>&nbsp;key,
-              <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt;&nbsp;values)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the multimap unmodified.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ImmutableMultimap"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#asMap()">asMap</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#clear()">clear</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#containsEntry(java.lang.Object, java.lang.Object)">containsEntry</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#containsKey(java.lang.Object)">containsKey</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#containsValue(java.lang.Object)">containsValue</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#equals(java.lang.Object)">equals</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#hashCode()">hashCode</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#keys()">keys</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#keySet()">keySet</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#put(K, V)">put</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#putAll(K, java.lang.Iterable)">putAll</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#putAll(com.google.common.collect.Multimap)">putAll</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#remove(java.lang.Object, java.lang.Object)">remove</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#size()">size</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#toString()">toString</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#values()">values</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.SetMultimap"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface com.google.common.collect.<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html#asMap()">asMap</A>, <A HREF="../../../../com/google/common/collect/SetMultimap.html#equals(java.lang.Object)">equals</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.Multimap"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface com.google.common.collect.<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#clear()">clear</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#containsEntry(java.lang.Object, java.lang.Object)">containsEntry</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#containsKey(java.lang.Object)">containsKey</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#containsValue(java.lang.Object)">containsValue</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#hashCode()">hashCode</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#keys()">keys</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#keySet()">keySet</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#put(K, V)">put</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#putAll(K, java.lang.Iterable)">putAll</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#putAll(com.google.common.collect.Multimap)">putAll</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#remove(java.lang.Object, java.lang.Object)">remove</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#size()">size</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#values()">values</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="of()"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>&lt;K,V&gt; <B>of</B>()</PRE>
-<DL>
-<DD>Returns the empty multimap.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="of(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(K, V)"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
-                                                 V&nbsp;v1)</PRE>
-<DL>
-<DD>Returns an immutable multimap containing a single entry.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(K, V, K, V)"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
-                                                 V&nbsp;v1,
-                                                 K&nbsp;k2,
-                                                 V&nbsp;v2)</PRE>
-<DL>
-<DD>Returns an immutable multimap containing the given entries, in order.
- Repeated occurrences of an entry (according to <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>) after
- the first are ignored.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(K, V, K, V, K, V)"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
-                                                 V&nbsp;v1,
-                                                 K&nbsp;k2,
-                                                 V&nbsp;v2,
-                                                 K&nbsp;k3,
-                                                 V&nbsp;v3)</PRE>
-<DL>
-<DD>Returns an immutable multimap containing the given entries, in order.
- Repeated occurrences of an entry (according to <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>) after
- the first are ignored.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(K, V, K, V, K, V, K, V)"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
-                                                 V&nbsp;v1,
-                                                 K&nbsp;k2,
-                                                 V&nbsp;v2,
-                                                 K&nbsp;k3,
-                                                 V&nbsp;v3,
-                                                 K&nbsp;k4,
-                                                 V&nbsp;v4)</PRE>
-<DL>
-<DD>Returns an immutable multimap containing the given entries, in order.
- Repeated occurrences of an entry (according to <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>) after
- the first are ignored.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="of(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="of(K, V, K, V, K, V, K, V, K, V)"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
-                                                 V&nbsp;v1,
-                                                 K&nbsp;k2,
-                                                 V&nbsp;v2,
-                                                 K&nbsp;k3,
-                                                 V&nbsp;v3,
-                                                 K&nbsp;k4,
-                                                 V&nbsp;v4,
-                                                 K&nbsp;k5,
-                                                 V&nbsp;v5)</PRE>
-<DL>
-<DD>Returns an immutable multimap containing the given entries, in order.
- Repeated occurrences of an entry (according to <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>) after
- the first are ignored.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="builder()"><!-- --></A><H3>
-builder</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder</A>&lt;K,V&gt; <B>builder</B>()</PRE>
-<DL>
-<DD>Returns a new <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect"><CODE>ImmutableSetMultimap.Builder</CODE></A>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="copyOf(com.google.common.collect.Multimap)"><!-- --></A><H3>
-copyOf</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>&lt;K,V&gt; <B>copyOf</B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</PRE>
-<DL>
-<DD>Returns an immutable set multimap containing the same mappings as
- <code>multimap</code>. The generated multimap's key and value orderings
- correspond to the iteration ordering of the <code>multimap.asMap()</code> view.
- Repeated occurrences of an entry in the multimap after the first are
- ignored.
-
- <p><b>Note:</b> Despite what the method name suggests, if
- <code>multimap</code> is an <code>ImmutableSetMultimap</code>, no copy will actually
- be performed, and the given multimap itself will be returned.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any key or value in <code>multimap</code> is
-     null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="get(java.lang.Object)"><!-- --></A><A NAME="get(K)"><!-- --></A><H3>
-get</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt; <B>get</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                           <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">K</A>&nbsp;key)</PRE>
-<DL>
-<DD>Returns an immutable set of the values for the given key.  If no mappings
- in the multimap have the provided key, an empty immutable set is returned.
- The values are in the same order as the parameters used to build this
- multimap.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#get(K)">get</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html#get(K)">get</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#get(K)">get</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to search for in multimap
-<DT><B>Returns:</B><DD>the collection of values that the key maps to</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="removeAll(java.lang.Object)"><!-- --></A><H3>
-removeAll</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt; <B>removeAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
-<DL>
-<DD>Guaranteed to throw an exception and leave the multimap unmodified.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#removeAll(java.lang.Object)">removeAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html#removeAll(java.lang.Object)">removeAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#removeAll(java.lang.Object)">removeAll</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key of entries to remove from the multimap
-<DT><B>Returns:</B><DD>the collection of removed values, or an empty collection if no
-     values were associated with the provided key. The collection
-     <i>may</i> be modifiable, but updating it will have no effect on the
-     multimap.
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="replaceValues(java.lang.Object,java.lang.Iterable)"><!-- --></A><A NAME="replaceValues(K, java.lang.Iterable)"><!-- --></A><H3>
-replaceValues</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt; <B>replaceValues</B>(<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">K</A>&nbsp;key,
-                                     <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt;&nbsp;values)</PRE>
-<DL>
-<DD>Guaranteed to throw an exception and leave the multimap unmodified.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to store in the multimap<DD><CODE>values</CODE> - values to store in the multimap
-<DT><B>Returns:</B><DD>the collection of replaced values, or an empty collection if no
-     values were previously associated with the key. The collection
-     <i>may</i> be modifiable, but updating it will have no effect on the
-     multimap.
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="entries()"><!-- --></A><H3>
-entries</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt;&gt; <B>entries</B>()</PRE>
-<DL>
-<DD>Returns an immutable collection of all key-value pairs in the multimap.
- Its iterator traverses the values for the first key, the values for the
- second key, and so on.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#entries()">entries</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html#entries()">entries</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html#entries()">entries</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>collection of map entries consisting of key-value pairs</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ImmutableSetMultimap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ImmutableSetMultimap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableSetMultimap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/ImmutableSortedMap.Builder.html b/javadoc/com/google/common/collect/ImmutableSortedMap.Builder.html
deleted file mode 100644
index 0046484..0000000
--- a/javadoc/com/google/common/collect/ImmutableSortedMap.Builder.html
+++ /dev/null
@@ -1,339 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:59 PST 2010 -->
-<TITLE>
-ImmutableSortedMap.Builder (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="ImmutableSortedMap.Builder (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ImmutableSortedMap.Builder.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ImmutableSortedMap.Builder.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableSortedMap.Builder.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class ImmutableSortedMap.Builder&lt;K,V&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">com.google.common.collect.ImmutableMap.Builder</A>&lt;K,V&gt;
-      <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ImmutableSortedMap.Builder&lt;K,V&gt;</B>
-</PRE>
-<DL>
-<DT><B>Enclosing class:</B><DD><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;</DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public static final class <B>ImmutableSortedMap.Builder&lt;K,V&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">ImmutableMap.Builder</A>&lt;K,V&gt;</DL>
-</PRE>
-
-<P>
-A builder for creating immutable sorted map instances, especially <code>public static final</code> maps ("constant maps"). Example: <pre>   <code>static final ImmutableSortedMap&lt;Integer, String&gt; INT_TO_WORD =
-       new ImmutableSortedMap.Builder&lt;Integer, String&gt;(Ordering.natural())
-           .put(1, "one")
-           .put(2, "two")
-           .put(3, "three")
-           .build();</code></pre>
-
- For <i>small</i> immutable sorted maps, the <code>ImmutableSortedMap.of()</code>
- methods are even more convenient.
-
- <p>Builder instances can be reused - it is safe to call <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html#build()"><CODE>build()</CODE></A>
- multiple times to build multiple maps in series. Each map is a superset of
- the maps created before it.
-<P>
-
-<P>
-<HR>
-
-<P>
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html#ImmutableSortedMap.Builder(java.util.Comparator)">ImmutableSortedMap.Builder</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">K</A>&gt;&nbsp;comparator)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new builder.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html#build()">build</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a newly-created immutable sorted map.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect">ImmutableSortedMap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html#put(K, V)">put</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">K</A>&nbsp;key,
-    <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">V</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Associates <code>key</code> with <code>value</code> in the built map.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect">ImmutableSortedMap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html#putAll(java.util.Map)">putAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">K</A>,? extends <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">V</A>&gt;&nbsp;map)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Associates all of the given map's keys and values in the built map.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="ImmutableSortedMap.Builder(java.util.Comparator)"><!-- --></A><H3>
-ImmutableSortedMap.Builder</H3>
-<PRE>
-public <B>ImmutableSortedMap.Builder</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">K</A>&gt;&nbsp;comparator)</PRE>
-<DL>
-<DD>Creates a new builder. The returned builder is equivalent to the builder
- generated by <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#orderedBy(java.util.Comparator)"><CODE>ImmutableSortedMap.orderedBy(java.util.Comparator<K>)</CODE></A>.
-<P>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="put(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="put(K, V)"><!-- --></A><H3>
-put</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect">ImmutableSortedMap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">V</A>&gt; <B>put</B>(<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">K</A>&nbsp;key,
-                                           <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">V</A>&nbsp;value)</PRE>
-<DL>
-<DD>Associates <code>key</code> with <code>value</code> in the built map. Duplicate
- keys, according to the comparator (which might be the keys' natural
- order), are not allowed, and will cause <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html#build()"><CODE>build()</CODE></A> to fail.
-<P>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html#put(K, V)">put</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">ImmutableMap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="putAll(java.util.Map)"><!-- --></A><H3>
-putAll</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect">ImmutableSortedMap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">V</A>&gt; <B>putAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">K</A>,? extends <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">V</A>&gt;&nbsp;map)</PRE>
-<DL>
-<DD>Associates all of the given map's keys and values in the built map.
- Duplicate keys, according to the comparator (which might be the keys'
- natural order), are not allowed, and will cause <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html#build()"><CODE>build()</CODE></A> to fail.
-<P>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html#putAll(java.util.Map)">putAll</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">ImmutableMap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any key or value in <code>map</code> is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="build()"><!-- --></A><H3>
-build</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">V</A>&gt; <B>build</B>()</PRE>
-<DL>
-<DD>Returns a newly-created immutable sorted map.
-<P>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html#build()">build</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">ImmutableMap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if any two keys are equal according to
-     the comparator (which might be the keys' natural order)</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ImmutableSortedMap.Builder.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ImmutableSortedMap.Builder.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableSortedMap.Builder.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/ImmutableSortedMap.html b/javadoc/com/google/common/collect/ImmutableSortedMap.html
deleted file mode 100644
index 4e1ff23..0000000
--- a/javadoc/com/google/common/collect/ImmutableSortedMap.html
+++ /dev/null
@@ -1,1126 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:58 PST 2010 -->
-<TITLE>
-ImmutableSortedMap (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="ImmutableSortedMap (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ImmutableSortedMap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ImmutableSortedMap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableSortedMap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class ImmutableSortedMap&lt;K,V&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">com.google.common.collect.ImmutableMap</A>&lt;K,V&gt;
-      <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ImmutableSortedMap&lt;K,V&gt;</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;K,V&gt;</DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public class <B>ImmutableSortedMap&lt;K,V&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;K,V&gt;<DT>implements <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;K,V&gt;</DL>
-</PRE>
-
-<P>
-An immutable <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util"><CODE>SortedMap</CODE></A>. Does not permit null keys or values.
-
- <p>Unlike <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#unmodifiableSortedMap(java.util.SortedMap)" title="class or interface in java.util"><CODE>Collections.unmodifiableSortedMap(java.util.SortedMap<K, ? extends V>)</CODE></A>, which is a <i>view</i>
- of a separate map which can still change, an instance of <code>ImmutableSortedMap</code> contains its own data and will <i>never</i> change.
- <code>ImmutableSortedMap</code> is convenient for <code>public static final</code> maps
- ("constant maps") and also lets you easily make a "defensive copy" of a map
- provided to your class by a caller.
-
- <p><b>Note</b>: Although this class is not final, it cannot be subclassed as
- it has no public or protected constructors. Thus, instances of this class are
- guaranteed to be immutable.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Jared Levy</DD>
-<DT><B>See Also:</B><DD><A HREF="../../../../serialized-form.html#com.google.common.collect.ImmutableSortedMap">Serialized Form</A></DL>
-<HR>
-
-<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-<A NAME="nested_class_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Nested Class Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect">ImmutableSortedMap.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">V</A>&gt;</B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A builder for creating immutable sorted map instances, especially <code>public static final</code> maps ("constant maps").</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="nested_classes_inherited_from_class_java.util.Map"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Nested classes/interfaces inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">V</A>&gt;</CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect">ImmutableSortedMap.Builder</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#builder()">builder</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>Use <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#naturalOrder()"><CODE>naturalOrder()</CODE></A>, which offers
-     better type-safety.</I></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#comparator()">comparator</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the comparator that orders the keys, which is
- <A HREF="../../../../com/google/common/collect/Ordering.html#natural()"><CODE>Ordering.natural()</CODE></A> when the natural ordering of the keys is used.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#containsValue(java.lang.Object)">containsValue</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#copyOf(java.util.Map)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;map)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing the same entries as <code>map</code>, sorted
- by the natural ordering of the keys.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#copyOf(java.util.Map, java.util.Comparator)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;map,
-       <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super K&gt;&nbsp;comparator)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing the same entries as <code>map</code>, with
- keys sorted by the provided comparator.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#copyOfSorted(java.util.SortedMap)">copyOfSorted</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;K,? extends V&gt;&nbsp;map)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing the same entries as the provided sorted
- map, with the same ordering.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#entrySet()">entrySet</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set of the mappings in this map, sorted by the key
- ordering.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#firstKey()">firstKey</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#get(java.lang.Object)">get</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#headMap(K)">headMap</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>&nbsp;toKey)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This method returns a <code>ImmutableSortedMap</code>, consisting of the entries
- whose keys are less than <code>toKey</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#keySet()">keySet</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted set of the keys in this map.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#lastKey()">lastKey</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;K&gt;,V&gt; 
-<BR>
-<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect">ImmutableSortedMap.Builder</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#naturalOrder()">naturalOrder</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a builder that creates immutable sorted maps whose keys are
- ordered by their natural ordering.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#of()">of</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the empty sorted map.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super K&gt;,V&gt; 
-<BR>
-<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#of(K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing a single entry.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super K&gt;,V&gt; 
-<BR>
-<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#of(K, V, K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1,
-   K&nbsp;k2,
-   V&nbsp;v2)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted map containing the given entries, sorted by the
- natural ordering of their keys.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super K&gt;,V&gt; 
-<BR>
-<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#of(K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1,
-   K&nbsp;k2,
-   V&nbsp;v2,
-   K&nbsp;k3,
-   V&nbsp;v3)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted map containing the given entries, sorted by the
- natural ordering of their keys.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super K&gt;,V&gt; 
-<BR>
-<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#of(K, V, K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1,
-   K&nbsp;k2,
-   V&nbsp;v2,
-   K&nbsp;k3,
-   V&nbsp;v3,
-   K&nbsp;k4,
-   V&nbsp;v4)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted map containing the given entries, sorted by the
- natural ordering of their keys.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super K&gt;,V&gt; 
-<BR>
-<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#of(K, V, K, V, K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1,
-   K&nbsp;k2,
-   V&nbsp;v2,
-   K&nbsp;k3,
-   V&nbsp;v3,
-   K&nbsp;k4,
-   V&nbsp;v4,
-   K&nbsp;k5,
-   V&nbsp;v5)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted map containing the given entries, sorted by the
- natural ordering of their keys.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect">ImmutableSortedMap.Builder</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#orderedBy(java.util.Comparator)">orderedBy</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;K&gt;&nbsp;comparator)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a builder that creates immutable sorted maps with an explicit
- comparator.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;K&gt;,V&gt; 
-<BR>
-<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect">ImmutableSortedMap.Builder</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#reverseOrder()">reverseOrder</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a builder that creates immutable sorted maps whose keys are
- ordered by the reverse of their natural ordering.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#size()">size</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#subMap(K, K)">subMap</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>&nbsp;fromKey,
-       <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>&nbsp;toKey)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This method returns a <code>ImmutableSortedMap</code>, consisting of the entries
- whose keys ranges from <code>fromKey</code>, inclusive, to <code>toKey</code>,
- exclusive.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#tailMap(K)">tailMap</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>&nbsp;fromKey)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This method returns a <code>ImmutableSortedMap</code>, consisting of the entries
- whose keys are greater than or equals to <code>fromKey</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#values()">values</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable collection of the values in this map, sorted by the
- ordering of the corresponding keys.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ImmutableMap"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html#clear()">clear</A>, <A HREF="../../../../com/google/common/collect/ImmutableMap.html#containsKey(java.lang.Object)">containsKey</A>, <A HREF="../../../../com/google/common/collect/ImmutableMap.html#equals(java.lang.Object)">equals</A>, <A HREF="../../../../com/google/common/collect/ImmutableMap.html#hashCode()">hashCode</A>, <A HREF="../../../../com/google/common/collect/ImmutableMap.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/google/common/collect/ImmutableMap.html#put(K, V)">put</A>, <A HREF="../../../../com/google/common/collect/ImmutableMap.html#putAll(java.util.Map)">putAll</A>, <A HREF="../../../../com/google/common/collect/ImmutableMap.html#remove(java.lang.Object)">remove</A>, <A HREF="../../../../com/google/common/collect/ImmutableMap.html#toString()">toString</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.util.Map"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#clear()" title="class or interface in java.util">clear</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsKey(java.lang.Object)" title="class or interface in java.util">containsKey</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#put(K, V)" title="class or interface in java.util">put</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#putAll(java.util.Map)" title="class or interface in java.util">putAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="of()"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;K,V&gt; <B>of</B>()</PRE>
-<DL>
-<DD>Returns the empty sorted map.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="of(java.lang.Comparable,java.lang.Object)"><!-- --></A><A NAME="of(K, V)"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super K&gt;,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
-                                                                             V&nbsp;v1)</PRE>
-<DL>
-<DD>Returns an immutable map containing a single entry.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="of(java.lang.Comparable,java.lang.Object,java.lang.Comparable,java.lang.Object)"><!-- --></A><A NAME="of(K, V, K, V)"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super K&gt;,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
-                                                                             V&nbsp;v1,
-                                                                             K&nbsp;k2,
-                                                                             V&nbsp;v2)</PRE>
-<DL>
-<DD>Returns an immutable sorted map containing the given entries, sorted by the
- natural ordering of their keys.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if the two keys are equal according to
-     their natural ordering</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="of(java.lang.Comparable,java.lang.Object,java.lang.Comparable,java.lang.Object,java.lang.Comparable,java.lang.Object)"><!-- --></A><A NAME="of(K, V, K, V, K, V)"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super K&gt;,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
-                                                                             V&nbsp;v1,
-                                                                             K&nbsp;k2,
-                                                                             V&nbsp;v2,
-                                                                             K&nbsp;k3,
-                                                                             V&nbsp;v3)</PRE>
-<DL>
-<DD>Returns an immutable sorted map containing the given entries, sorted by the
- natural ordering of their keys.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if any two keys are equal according to
-     their natural ordering</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="of(java.lang.Comparable,java.lang.Object,java.lang.Comparable,java.lang.Object,java.lang.Comparable,java.lang.Object,java.lang.Comparable,java.lang.Object)"><!-- --></A><A NAME="of(K, V, K, V, K, V, K, V)"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super K&gt;,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
-                                                                             V&nbsp;v1,
-                                                                             K&nbsp;k2,
-                                                                             V&nbsp;v2,
-                                                                             K&nbsp;k3,
-                                                                             V&nbsp;v3,
-                                                                             K&nbsp;k4,
-                                                                             V&nbsp;v4)</PRE>
-<DL>
-<DD>Returns an immutable sorted map containing the given entries, sorted by the
- natural ordering of their keys.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if any two keys are equal according to
-     their natural ordering</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="of(java.lang.Comparable,java.lang.Object,java.lang.Comparable,java.lang.Object,java.lang.Comparable,java.lang.Object,java.lang.Comparable,java.lang.Object,java.lang.Comparable,java.lang.Object)"><!-- --></A><A NAME="of(K, V, K, V, K, V, K, V, K, V)"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super K&gt;,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;K,V&gt; <B>of</B>(K&nbsp;k1,
-                                                                             V&nbsp;v1,
-                                                                             K&nbsp;k2,
-                                                                             V&nbsp;v2,
-                                                                             K&nbsp;k3,
-                                                                             V&nbsp;v3,
-                                                                             K&nbsp;k4,
-                                                                             V&nbsp;v4,
-                                                                             K&nbsp;k5,
-                                                                             V&nbsp;v5)</PRE>
-<DL>
-<DD>Returns an immutable sorted map containing the given entries, sorted by the
- natural ordering of their keys.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if any two keys are equal according to
-     their natural ordering</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="copyOf(java.util.Map)"><!-- --></A><H3>
-copyOf</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;K,V&gt; <B>copyOf</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;map)</PRE>
-<DL>
-<DD>Returns an immutable map containing the same entries as <code>map</code>, sorted
- by the natural ordering of the keys.
-
- <p><b>Note:</b> Despite what the method name suggests, if <code>map</code> is an
- <code>ImmutableSortedMap</code>, it may be returned instead of a copy.
-
- <p>This method is not type-safe, as it may be called on a map with keys
- that are not mutually comparable.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassCastException.html?is-external=true" title="class or interface in java.lang">ClassCastException</A></CODE> - if the keys in <code>map</code> are not mutually
-     comparable
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any key or value in <code>map</code> is null
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if any two keys are equal according to
-     their natural ordering</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="copyOf(java.util.Map, java.util.Comparator)"><!-- --></A><H3>
-copyOf</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;K,V&gt; <B>copyOf</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;map,
-                                                   <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super K&gt;&nbsp;comparator)</PRE>
-<DL>
-<DD>Returns an immutable map containing the same entries as <code>map</code>, with
- keys sorted by the provided comparator.
-
- <p><b>Note:</b> Despite what the method name suggests, if <code>map</code> is an
- <code>ImmutableSortedMap</code>, it may be returned instead of a copy.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any key or value in <code>map</code> is null
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if any two keys are equal according to
-     the comparator</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="copyOfSorted(java.util.SortedMap)"><!-- --></A><H3>
-copyOfSorted</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;K,V&gt; <B>copyOfSorted</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;K,? extends V&gt;&nbsp;map)</PRE>
-<DL>
-<DD>Returns an immutable map containing the same entries as the provided sorted
- map, with the same ordering.
-
- <p><b>Note:</b> Despite what the method name suggests, if <code>map</code> is an
- <code>ImmutableSortedMap</code>, it may be returned instead of a copy.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any key or value in <code>map</code> is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="naturalOrder()"><!-- --></A><H3>
-naturalOrder</H3>
-<PRE>
-public static &lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;K&gt;,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect">ImmutableSortedMap.Builder</A>&lt;K,V&gt; <B>naturalOrder</B>()</PRE>
-<DL>
-<DD>Returns a builder that creates immutable sorted maps whose keys are
- ordered by their natural ordering. The sorted maps use <A HREF="../../../../com/google/common/collect/Ordering.html#natural()"><CODE>Ordering.natural()</CODE></A> as the comparator.
-
- <p>Note: the type parameter <code>K</code> extends <code>Comparable&lt;K&gt;</code> rather
- than <code>Comparable&lt;? super K&gt;</code> as a workaround for javac <a
- href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6468354">bug
- 6468354</a>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="orderedBy(java.util.Comparator)"><!-- --></A><H3>
-orderedBy</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect">ImmutableSortedMap.Builder</A>&lt;K,V&gt; <B>orderedBy</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;K&gt;&nbsp;comparator)</PRE>
-<DL>
-<DD>Returns a builder that creates immutable sorted maps with an explicit
- comparator. If the comparator has a more general type than the map's keys,
- such as creating a <code>SortedMap&lt;Integer, String&gt;</code> with a <code>Comparator&lt;Number&gt;</code>, use the <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect"><CODE>ImmutableSortedMap.Builder</CODE></A> constructor instead.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>comparator</code> is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="reverseOrder()"><!-- --></A><H3>
-reverseOrder</H3>
-<PRE>
-public static &lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;K&gt;,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect">ImmutableSortedMap.Builder</A>&lt;K,V&gt; <B>reverseOrder</B>()</PRE>
-<DL>
-<DD>Returns a builder that creates immutable sorted maps whose keys are
- ordered by the reverse of their natural ordering.
-
- <p>Note: the type parameter <code>K</code> extends <code>Comparable&lt;K&gt;</code> rather
- than <code>Comparable&lt;? super K&gt;</code> as a workaround for javac <a
- href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6468354">bug
- 6468354</a>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="size()"><!-- --></A><H3>
-size</H3>
-<PRE>
-public int <B>size</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#size()" title="class or interface in java.util">size</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="get(java.lang.Object)"><!-- --></A><H3>
-get</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A> <B>get</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-             <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#get(java.lang.Object)" title="class or interface in java.util">get</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html#get(java.lang.Object)">get</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="containsValue(java.lang.Object)"><!-- --></A><H3>
-containsValue</H3>
-<PRE>
-public boolean <B>containsValue</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                             <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsValue(java.lang.Object)" title="class or interface in java.util">containsValue</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html#containsValue(java.lang.Object)">containsValue</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="entrySet()"><!-- --></A><H3>
-entrySet</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;&gt; <B>entrySet</B>()</PRE>
-<DL>
-<DD>Returns an immutable set of the mappings in this map, sorted by the key
- ordering.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#entrySet()" title="class or interface in java.util">entrySet</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true#entrySet()" title="class or interface in java.util">entrySet</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html#entrySet()">entrySet</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="keySet()"><!-- --></A><H3>
-keySet</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>&gt; <B>keySet</B>()</PRE>
-<DL>
-<DD>Returns an immutable sorted set of the keys in this map.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#keySet()" title="class or interface in java.util">keySet</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true#keySet()" title="class or interface in java.util">keySet</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html#keySet()">keySet</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="values()"><!-- --></A><H3>
-values</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt; <B>values</B>()</PRE>
-<DL>
-<DD>Returns an immutable collection of the values in this map, sorted by the
- ordering of the corresponding keys.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#values()" title="class or interface in java.util">values</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true#values()" title="class or interface in java.util">values</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html#values()">values</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="comparator()"><!-- --></A><H3>
-comparator</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>&gt; <B>comparator</B>()</PRE>
-<DL>
-<DD>Returns the comparator that orders the keys, which is
- <A HREF="../../../../com/google/common/collect/Ordering.html#natural()"><CODE>Ordering.natural()</CODE></A> when the natural ordering of the keys is used.
- Note that its behavior is not consistent with <A HREF="http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html?is-external=true#comparator()" title="class or interface in java.util"><CODE>TreeMap.comparator()</CODE></A>,
- which returns <code>null</code> to indicate natural ordering.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true#comparator()" title="class or interface in java.util">comparator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="firstKey()"><!-- --></A><H3>
-firstKey</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A> <B>firstKey</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true#firstKey()" title="class or interface in java.util">firstKey</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="lastKey()"><!-- --></A><H3>
-lastKey</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A> <B>lastKey</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true#lastKey()" title="class or interface in java.util">lastKey</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="headMap(java.lang.Object)"><!-- --></A><A NAME="headMap(K)"><!-- --></A><H3>
-headMap</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt; <B>headMap</B>(<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>&nbsp;toKey)</PRE>
-<DL>
-<DD>This method returns a <code>ImmutableSortedMap</code>, consisting of the entries
- whose keys are less than <code>toKey</code>.
-
- <p>The <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true#headMap(K)" title="class or interface in java.util"><CODE>SortedMap.headMap(K)</CODE></A> documentation states that a submap of a
- submap throws an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang"><CODE>IllegalArgumentException</CODE></A> if passed a <code>toKey</code>
- greater than an earlier <code>toKey</code>. However, this method doesn't throw
- an exception in that situation, but instead keeps the original <code>toKey</code>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true#headMap(K)" title="class or interface in java.util">headMap</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="subMap(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="subMap(K, K)"><!-- --></A><H3>
-subMap</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt; <B>subMap</B>(<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>&nbsp;fromKey,
-                                      <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>&nbsp;toKey)</PRE>
-<DL>
-<DD>This method returns a <code>ImmutableSortedMap</code>, consisting of the entries
- whose keys ranges from <code>fromKey</code>, inclusive, to <code>toKey</code>,
- exclusive.
-
- <p>The <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true#subMap(K, K)" title="class or interface in java.util"><CODE>SortedMap.subMap(K, K)</CODE></A> documentation states that a submap of a
- submap throws an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang"><CODE>IllegalArgumentException</CODE></A> if passed a <code>fromKey</code> less than an earlier <code>fromKey</code>. However, this method doesn't
- throw an exception in that situation, but instead keeps the original <code>fromKey</code>. Similarly, this method keeps the original <code>toKey</code>, instead
- of throwing an exception, if passed a <code>toKey</code> greater than an earlier
- <code>toKey</code>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true#subMap(K, K)" title="class or interface in java.util">subMap</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="tailMap(java.lang.Object)"><!-- --></A><A NAME="tailMap(K)"><!-- --></A><H3>
-tailMap</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt; <B>tailMap</B>(<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>&nbsp;fromKey)</PRE>
-<DL>
-<DD>This method returns a <code>ImmutableSortedMap</code>, consisting of the entries
- whose keys are greater than or equals to <code>fromKey</code>.
-
- <p>The <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true#tailMap(K)" title="class or interface in java.util"><CODE>SortedMap.tailMap(K)</CODE></A> documentation states that a submap of a
- submap throws an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang"><CODE>IllegalArgumentException</CODE></A> if passed a <code>fromKey</code> less than an earlier <code>fromKey</code>. However, this method doesn't
- throw an exception in that situation, but instead keeps the original <code>fromKey</code>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true#tailMap(K)" title="class or interface in java.util">tailMap</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="builder()"><!-- --></A><H3>
-builder</H3>
-<PRE>
-<FONT SIZE="-1"><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</A>
-</FONT>public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect">ImmutableSortedMap.Builder</A>&lt;K,V&gt; <B>builder</B>()</PRE>
-<DL>
-<DD><B>Deprecated.</B>&nbsp;<I>Use <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#naturalOrder()"><CODE>naturalOrder()</CODE></A>, which offers
-     better type-safety.</I>
-<P>
-<DD>Not supported. Use <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#naturalOrder()"><CODE>naturalOrder()</CODE></A>, which offers
- better type-safety, instead. This method exists only to hide
- <A HREF="../../../../com/google/common/collect/ImmutableMap.html#builder()"><CODE>ImmutableMap.builder()</CODE></A> from consumers of <code>ImmutableSortedMap</code>.
-<P>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ImmutableSortedMap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ImmutableSortedMap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableSortedMap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/ImmutableSortedSet.Builder.html b/javadoc/com/google/common/collect/ImmutableSortedSet.Builder.html
deleted file mode 100644
index 830a737..0000000
--- a/javadoc/com/google/common/collect/ImmutableSortedSet.Builder.html
+++ /dev/null
@@ -1,400 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:59 PST 2010 -->
-<TITLE>
-ImmutableSortedSet.Builder (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="ImmutableSortedSet.Builder (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ImmutableSortedSet.Builder.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/Iterables.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ImmutableSortedSet.Builder.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableSortedSet.Builder.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class ImmutableSortedSet.Builder&lt;E&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">com.google.common.collect.ImmutableSet.Builder</A>&lt;E&gt;
-      <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ImmutableSortedSet.Builder&lt;E&gt;</B>
-</PRE>
-<DL>
-<DT><B>Enclosing class:</B><DD><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&gt;</DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public static final class <B>ImmutableSortedSet.Builder&lt;E&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A>&lt;E&gt;</DL>
-</PRE>
-
-<P>
-A builder for creating immutable sorted set instances, especially
- <code>public static final</code> sets ("constant sets"), with a given
- comparator.
-
- <p>Example:
- <pre><code>public static final ImmutableSortedSet&lt;Number&gt; LUCKY_NUMBERS
-       = new ImmutableSortedSet.Builder&lt;Number&gt;(ODDS_FIRST_COMPARATOR)
-           .addAll(SINGLE_DIGIT_PRIMES)
-           .add(42)
-           .build();</code></pre>
-
- <p>Builder instances can be reused - it is safe to call <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html#build()"><CODE>build()</CODE></A>
- multiple times to build multiple sets in series. Each set
- is a superset of the set created before it.
-<P>
-
-<P>
-<HR>
-
-<P>
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html#ImmutableSortedSet.Builder(java.util.Comparator)">ImmutableSortedSet.Builder</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt;&nbsp;comparator)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new builder.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html#add(E...)">add</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>...&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds each element of <code>elements</code> to the <code>ImmutableSortedSet</code>,
- ignoring duplicate elements (only the first duplicate element is added).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html#add(E)">add</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&nbsp;element)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds <code>element</code> to the <code>ImmutableSortedSet</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html#addAll(java.lang.Iterable)">addAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds each element of <code>elements</code> to the <code>ImmutableSortedSet</code>,
- ignoring duplicate elements (only the first duplicate element is added).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html#addAll(java.util.Iterator)">addAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds each element of <code>elements</code> to the <code>ImmutableSortedSet</code>,
- ignoring duplicate elements (only the first duplicate element is added).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html#build()">build</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a newly-created <code>ImmutableSortedSet</code> based on the contents
- of the <code>Builder</code> and its comparator.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="ImmutableSortedSet.Builder(java.util.Comparator)"><!-- --></A><H3>
-ImmutableSortedSet.Builder</H3>
-<PRE>
-public <B>ImmutableSortedSet.Builder</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt;&nbsp;comparator)</PRE>
-<DL>
-<DD>Creates a new builder. The returned builder is equivalent to the builder
- generated by <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#orderedBy(java.util.Comparator)"><CODE>ImmutableSortedSet.orderedBy(java.util.Comparator<E>)</CODE></A>.
-<P>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="add(java.lang.Object)"><!-- --></A><A NAME="add(E)"><!-- --></A><H3>
-add</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt; <B>add</B>(<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&nbsp;element)</PRE>
-<DL>
-<DD>Adds <code>element</code> to the <code>ImmutableSortedSet</code>.  If the
- <code>ImmutableSortedSet</code> already contains <code>element</code>, then
- <code>add</code> has no effect. (only the previously added element
- is retained).
-<P>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html#add(E)">add</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to add
-<DT><B>Returns:</B><DD>this <code>Builder</code> object
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>element</code> is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="add(java.lang.Object[])"><!-- --></A><A NAME="add(E...)"><!-- --></A><H3>
-add</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt; <B>add</B>(<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>...&nbsp;elements)</PRE>
-<DL>
-<DD>Adds each element of <code>elements</code> to the <code>ImmutableSortedSet</code>,
- ignoring duplicate elements (only the first duplicate element is added).
-<P>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html#add(E...)">add</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>elements</CODE> - the elements to add
-<DT><B>Returns:</B><DD>this <code>Builder</code> object
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>elements</code> contains a null element</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="addAll(java.lang.Iterable)"><!-- --></A><H3>
-addAll</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt; <B>addAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt;&nbsp;elements)</PRE>
-<DL>
-<DD>Adds each element of <code>elements</code> to the <code>ImmutableSortedSet</code>,
- ignoring duplicate elements (only the first duplicate element is added).
-<P>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html#addAll(java.lang.Iterable)">addAll</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>elements</CODE> - the elements to add to the <code>ImmutableSortedSet</code>
-<DT><B>Returns:</B><DD>this <code>Builder</code> object
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>elements</code> contains a null element</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="addAll(java.util.Iterator)"><!-- --></A><H3>
-addAll</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt; <B>addAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt;&nbsp;elements)</PRE>
-<DL>
-<DD>Adds each element of <code>elements</code> to the <code>ImmutableSortedSet</code>,
- ignoring duplicate elements (only the first duplicate element is added).
-<P>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html#addAll(java.util.Iterator)">addAll</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>elements</CODE> - the elements to add to the <code>ImmutableSortedSet</code>
-<DT><B>Returns:</B><DD>this <code>Builder</code> object
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>elements</code> contains a null element</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="build()"><!-- --></A><H3>
-build</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt; <B>build</B>()</PRE>
-<DL>
-<DD>Returns a newly-created <code>ImmutableSortedSet</code> based on the contents
- of the <code>Builder</code> and its comparator.
-<P>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html#build()">build</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ImmutableSortedSet.Builder.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/Iterables.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ImmutableSortedSet.Builder.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableSortedSet.Builder.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/ImmutableSortedSet.html b/javadoc/com/google/common/collect/ImmutableSortedSet.html
deleted file mode 100644
index 9543c60..0000000
--- a/javadoc/com/google/common/collect/ImmutableSortedSet.html
+++ /dev/null
@@ -1,1082 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:59 PST 2010 -->
-<TITLE>
-ImmutableSortedSet (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="ImmutableSortedSet (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ImmutableSortedSet.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ImmutableSortedSet.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableSortedSet.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class ImmutableSortedSet&lt;E&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">com.google.common.collect.ImmutableCollection</A>&lt;E&gt;
-      <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">com.google.common.collect.ImmutableSet</A>&lt;E&gt;
-          <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ImmutableSortedSet&lt;E&gt;</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;E&gt;</DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public abstract class <B>ImmutableSortedSet&lt;E&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt;<DT>implements <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;E&gt;</DL>
-</PRE>
-
-<P>
-An immutable <code>SortedSet</code> that stores its elements in a sorted array.
- Some instances are ordered by an explicit comparator, while others follow the
- natural sort ordering of their elements. Either way, null elements are not
- supported.
-
- <p>Unlike <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#unmodifiableSortedSet(java.util.SortedSet)" title="class or interface in java.util"><CODE>Collections.unmodifiableSortedSet(java.util.SortedSet<T>)</CODE></A>, which is a <i>view</i>
- of a separate collection that can still change, an instance of <code>ImmutableSortedSet</code> contains its own private data and will <i>never</i>
- change. This class is convenient for <code>public static final</code> sets
- ("constant sets") and also lets you easily make a "defensive copy" of a set
- provided to your class by a caller.
-
- <p>The sets returned by <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#headSet(E)"><CODE>headSet(E)</CODE></A>, <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#tailSet(E)"><CODE>tailSet(E)</CODE></A>, and
- <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#subSet(E, E)"><CODE>subSet(E, E)</CODE></A> methods share the same array as the original set, preventing
- that array from being garbage collected. If this is a concern, the data may
- be copied into a correctly-sized array by calling <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#copyOfSorted(java.util.SortedSet)"><CODE>copyOfSorted(java.util.SortedSet<E>)</CODE></A>.
-
- <p><b>Note on element equivalence:</b> The <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#contains(java.lang.Object)"><CODE>ImmutableCollection.contains(Object)</CODE></A>,
- <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#containsAll(java.util.Collection)"><CODE>ImmutableCollection.containsAll(Collection)</CODE></A>, and <A HREF="../../../../com/google/common/collect/ImmutableSet.html#equals(java.lang.Object)"><CODE>ImmutableSet.equals(Object)</CODE></A>
- implementations must check whether a provided object is equivalent to an
- element in the collection. Unlike most collections, an
- <code>ImmutableSortedSet</code> doesn't use <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A> to determine if
- two elements are equivalent. Instead, with an explicit comparator, the
- following relation determines whether elements <code>x</code> and <code>y</code> are
- equivalent: <pre>   <code>{(x, y) | comparator.compare(x, y) == 0}</code></pre>
-
- With natural ordering of elements, the following relation determines whether
- two elements are equivalent: <pre>   <code>{(x, y) | x.compareTo(y) == 0}</code></pre>
-
- <b>Warning:</b> Like most sets, an <code>ImmutableSortedSet</code> will not
- function correctly if an element is modified after being placed in the set.
- For this reason, and to avoid general confusion, it is strongly recommended
- to place only immutable objects into this collection.
-
- <p><b>Note</b>: Although this class is not final, it cannot be subclassed as
- it has no public or protected constructors. Thus, instances of this type are
- guaranteed to be immutable.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Jared Levy</DD>
-<DT><B>See Also:</B><DD><A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect"><CODE>ImmutableSet</CODE></A>, 
-<A HREF="../../../../serialized-form.html#com.google.common.collect.ImmutableSortedSet">Serialized Form</A></DL>
-<HR>
-
-<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-<A NAME="nested_class_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Nested Class Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt;</B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A builder for creating immutable sorted set instances, especially
- <code>public static final</code> sets ("constant sets"), with a given
- comparator.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#builder()">builder</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>Use <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#naturalOrder()"><CODE>naturalOrder()</CODE></A>, which offers
-     better type-safety.</I></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#comparator()">comparator</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the comparator that orders the elements, which is
- <A HREF="../../../../com/google/common/collect/Ordering.html#natural()"><CODE>Ordering.natural()</CODE></A> when the natural ordering of the
- elements is used.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#copyOf(java.util.Comparator, java.lang.Iterable)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super E&gt;&nbsp;comparator,
-       <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted set containing the given elements sorted by
- the given <code>Comparator</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#copyOf(java.util.Comparator, java.util.Iterator)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super E&gt;&nbsp;comparator,
-       <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted set containing the given elements sorted by
- the given <code>Comparator</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#copyOf(java.lang.Iterable)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted set containing the given elements sorted by
- their natural ordering.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#copyOf(java.util.Iterator)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted set containing the given elements sorted by
- their natural ordering.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#copyOfSorted(java.util.SortedSet)">copyOfSorted</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;E&gt;&nbsp;sortedSet)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted set containing the elements of a sorted set,
- sorted by the same <code>Comparator</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#headSet(E)">headSet</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&nbsp;toElement)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;E&gt;&gt; 
-<BR>
-<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#naturalOrder()">naturalOrder</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a builder that creates immutable sorted sets whose elements are
- ordered by their natural ordering.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#of()">of</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the empty immutable sorted set.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super E&gt;&gt; 
-<BR>
-<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#of(E...)">of</A></B>(E...&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted set containing the given elements sorted by
- their natural ordering.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super E&gt;&gt; 
-<BR>
-<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#of(E)">of</A></B>(E&nbsp;element)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted set containing a single element.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super E&gt;&gt; 
-<BR>
-<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#of(E, E)">of</A></B>(E&nbsp;e1,
-   E&nbsp;e2)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted set containing the given elements sorted by
- their natural ordering.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super E&gt;&gt; 
-<BR>
-<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#of(E, E, E)">of</A></B>(E&nbsp;e1,
-   E&nbsp;e2,
-   E&nbsp;e3)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted set containing the given elements sorted by
- their natural ordering.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super E&gt;&gt; 
-<BR>
-<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#of(E, E, E, E)">of</A></B>(E&nbsp;e1,
-   E&nbsp;e2,
-   E&nbsp;e3,
-   E&nbsp;e4)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted set containing the given elements sorted by
- their natural ordering.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super E&gt;&gt; 
-<BR>
-<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#of(E, E, E, E, E)">of</A></B>(E&nbsp;e1,
-   E&nbsp;e2,
-   E&nbsp;e3,
-   E&nbsp;e4,
-   E&nbsp;e5)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted set containing the given elements sorted by
- their natural ordering.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#orderedBy(java.util.Comparator)">orderedBy</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;E&gt;&nbsp;comparator)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a builder that creates immutable sorted sets with an explicit
- comparator.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;E&gt;&gt; 
-<BR>
-<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#reverseOrder()">reverseOrder</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a builder that creates immutable sorted sets whose elements are
- ordered by the reverse of their natural ordering.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#subSet(E, E)">subSet</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&nbsp;fromElement,
-       <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&nbsp;toElement)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#tailSet(E)">tailSet</A></B>(<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&nbsp;fromElement)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ImmutableSet"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/ImmutableSet.html#equals(java.lang.Object)">equals</A>, <A HREF="../../../../com/google/common/collect/ImmutableSet.html#hashCode()">hashCode</A>, <A HREF="../../../../com/google/common/collect/ImmutableSet.html#iterator()">iterator</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ImmutableCollection"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/ImmutableCollection.html#add(E)">add</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#addAll(java.util.Collection)">addAll</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#asList()">asList</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#clear()">clear</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#contains(java.lang.Object)">contains</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#containsAll(java.util.Collection)">containsAll</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#remove(java.lang.Object)">remove</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#removeAll(java.util.Collection)">removeAll</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#retainAll(java.util.Collection)">retainAll</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#toArray()">toArray</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#toArray(T[])">toArray</A>, <A HREF="../../../../com/google/common/collect/ImmutableCollection.html#toString()">toString</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.util.SortedSet"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true#first()" title="class or interface in java.util">first</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true#last()" title="class or interface in java.util">last</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.util.Set"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#add(E)" title="class or interface in java.util">add</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#addAll(java.util.Collection)" title="class or interface in java.util">addAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#clear()" title="class or interface in java.util">clear</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util">contains</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util">containsAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#iterator()" title="class or interface in java.util">iterator</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#removeAll(java.util.Collection)" title="class or interface in java.util">removeAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util">retainAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#size()" title="class or interface in java.util">size</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#toArray()" title="class or interface in java.util">toArray</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#toArray(T[])" title="class or interface in java.util">toArray</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="of()"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt; <B>of</B>()</PRE>
-<DL>
-<DD>Returns the empty immutable sorted set.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="of(java.lang.Comparable)"><!-- --></A><A NAME="of(E)"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super E&gt;&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt; <B>of</B>(E&nbsp;element)</PRE>
-<DL>
-<DD>Returns an immutable sorted set containing a single element.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="of(java.lang.Comparable,java.lang.Comparable)"><!-- --></A><A NAME="of(E, E)"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super E&gt;&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt; <B>of</B>(E&nbsp;e1,
-                                                                         E&nbsp;e2)</PRE>
-<DL>
-<DD>Returns an immutable sorted set containing the given elements sorted by
- their natural ordering. When multiple elements are equivalent according to
- <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true#compareTo(T)" title="class or interface in java.lang"><CODE>Comparable.compareTo(T)</CODE></A>, only the first one specified is included.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any element is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="of(java.lang.Comparable,java.lang.Comparable,java.lang.Comparable)"><!-- --></A><A NAME="of(E, E, E)"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super E&gt;&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt; <B>of</B>(E&nbsp;e1,
-                                                                         E&nbsp;e2,
-                                                                         E&nbsp;e3)</PRE>
-<DL>
-<DD>Returns an immutable sorted set containing the given elements sorted by
- their natural ordering. When multiple elements are equivalent according to
- <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true#compareTo(T)" title="class or interface in java.lang"><CODE>Comparable.compareTo(T)</CODE></A>, only the first one specified is included.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any element is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="of(java.lang.Comparable,java.lang.Comparable,java.lang.Comparable,java.lang.Comparable)"><!-- --></A><A NAME="of(E, E, E, E)"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super E&gt;&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt; <B>of</B>(E&nbsp;e1,
-                                                                         E&nbsp;e2,
-                                                                         E&nbsp;e3,
-                                                                         E&nbsp;e4)</PRE>
-<DL>
-<DD>Returns an immutable sorted set containing the given elements sorted by
- their natural ordering. When multiple elements are equivalent according to
- <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true#compareTo(T)" title="class or interface in java.lang"><CODE>Comparable.compareTo(T)</CODE></A>, only the first one specified is included.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any element is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="of(java.lang.Comparable,java.lang.Comparable,java.lang.Comparable,java.lang.Comparable,java.lang.Comparable)"><!-- --></A><A NAME="of(E, E, E, E, E)"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super E&gt;&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt; <B>of</B>(E&nbsp;e1,
-                                                                         E&nbsp;e2,
-                                                                         E&nbsp;e3,
-                                                                         E&nbsp;e4,
-                                                                         E&nbsp;e5)</PRE>
-<DL>
-<DD>Returns an immutable sorted set containing the given elements sorted by
- their natural ordering. When multiple elements are equivalent according to
- <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true#compareTo(T)" title="class or interface in java.lang"><CODE>Comparable.compareTo(T)</CODE></A>, only the first one specified is included.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any element is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="of(java.lang.Comparable[])"><!-- --></A><A NAME="of(E...)"><!-- --></A><H3>
-of</H3>
-<PRE>
-public static &lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super E&gt;&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt; <B>of</B>(E...&nbsp;elements)</PRE>
-<DL>
-<DD>Returns an immutable sorted set containing the given elements sorted by
- their natural ordering. When multiple elements are equivalent according to
- <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true#compareTo(T)" title="class or interface in java.lang"><CODE>Comparable.compareTo(T)</CODE></A>, only the first one specified is included.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any of <code>elements</code> is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="copyOf(java.lang.Iterable)"><!-- --></A><H3>
-copyOf</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt; <B>copyOf</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</PRE>
-<DL>
-<DD>Returns an immutable sorted set containing the given elements sorted by
- their natural ordering. When multiple elements are equivalent according to
- <code>compareTo()</code>, only the first one specified is included. To create a
- copy of a <code>SortedSet</code> that preserves the comparator, call
- <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#copyOfSorted(java.util.SortedSet)"><CODE>copyOfSorted(java.util.SortedSet<E>)</CODE></A> instead. This method iterates over <code>elements</code>
- at most once.
-
- <p>Note that if <code>s</code> is a <code>Set&lt;String&gt;</code>, then
- <code>ImmutableSortedSet.copyOf(s)</code> returns an
- <code>ImmutableSortedSet&lt;String&gt;</code> containing each of the strings in
- <code>s</code>, while <code>ImmutableSortedSet.of(s)</code> returns an
- <code>ImmutableSortedSet&lt;Set&lt;String&gt;&gt;</code> containing one element (the given
- set itself).
-
- <p><b>Note:</b> Despite what the method name suggests, if <code>elements</code>
- is an <code>ImmutableSortedSet</code>, it may be returned instead of a copy.
-
- <p>This method is not type-safe, as it may be called on elements that are
- not mutually comparable.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassCastException.html?is-external=true" title="class or interface in java.lang">ClassCastException</A></CODE> - if the elements are not mutually comparable
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any of <code>elements</code> is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="copyOf(java.util.Iterator)"><!-- --></A><H3>
-copyOf</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt; <B>copyOf</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends E&gt;&nbsp;elements)</PRE>
-<DL>
-<DD>Returns an immutable sorted set containing the given elements sorted by
- their natural ordering. When multiple elements are equivalent according to
- <code>compareTo()</code>, only the first one specified is included.
-
- <p>This method is not type-safe, as it may be called on elements that are
- not mutually comparable.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassCastException.html?is-external=true" title="class or interface in java.lang">ClassCastException</A></CODE> - if the elements are not mutually comparable
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any of <code>elements</code> is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="copyOf(java.util.Comparator, java.lang.Iterable)"><!-- --></A><H3>
-copyOf</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt; <B>copyOf</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super E&gt;&nbsp;comparator,
-                                               <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</PRE>
-<DL>
-<DD>Returns an immutable sorted set containing the given elements sorted by
- the given <code>Comparator</code>. When multiple elements are equivalent
- according to <code>compare()</code>, only the first one specified is
- included. This method iterates over <code>elements</code> at most once.
-
- <p><b>Note:</b> Despite what the method name suggests, if <code>elements</code>
- is an <code>ImmutableSortedSet</code>, it may be returned instead of a copy.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>comparator</code> or any of
-     <code>elements</code> is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="copyOf(java.util.Comparator, java.util.Iterator)"><!-- --></A><H3>
-copyOf</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt; <B>copyOf</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super E&gt;&nbsp;comparator,
-                                               <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends E&gt;&nbsp;elements)</PRE>
-<DL>
-<DD>Returns an immutable sorted set containing the given elements sorted by
- the given <code>Comparator</code>. When multiple elements are equivalent
- according to <code>compareTo()</code>, only the first one specified is
- included.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>comparator</code> or any of
-     <code>elements</code> is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="copyOfSorted(java.util.SortedSet)"><!-- --></A><H3>
-copyOfSorted</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt; <B>copyOfSorted</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;E&gt;&nbsp;sortedSet)</PRE>
-<DL>
-<DD>Returns an immutable sorted set containing the elements of a sorted set,
- sorted by the same <code>Comparator</code>. That behavior differs from
- <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#copyOf(java.lang.Iterable)"><CODE>copyOf(Iterable)</CODE></A>, which always uses the natural ordering of the
- elements.
-
- <p><b>Note:</b> Despite what the method name suggests, if <code>sortedSet</code>
- is an <code>ImmutableSortedSet</code>, it may be returned instead of a copy.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any of <code>elements</code> is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="orderedBy(java.util.Comparator)"><!-- --></A><H3>
-orderedBy</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>&lt;E&gt; <B>orderedBy</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;E&gt;&nbsp;comparator)</PRE>
-<DL>
-<DD>Returns a builder that creates immutable sorted sets with an explicit
- comparator. If the comparator has a more general type than the set being
- generated, such as creating a <code>SortedSet&lt;Integer&gt;</code> with a
- <code>Comparator&lt;Number&gt;</code>, use the <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect"><CODE>ImmutableSortedSet.Builder</CODE></A> constructor instead.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>comparator</code> is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="reverseOrder()"><!-- --></A><H3>
-reverseOrder</H3>
-<PRE>
-public static &lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;E&gt;&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>&lt;E&gt; <B>reverseOrder</B>()</PRE>
-<DL>
-<DD>Returns a builder that creates immutable sorted sets whose elements are
- ordered by the reverse of their natural ordering.
-
- <p>Note: the type parameter <code>E</code> extends <code>Comparable&lt;E&gt;</code> rather
- than <code>Comparable&lt;? super E&gt;</code> as a workaround for javac <a
- href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6468354">bug
- 6468354</a>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="naturalOrder()"><!-- --></A><H3>
-naturalOrder</H3>
-<PRE>
-public static &lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;E&gt;&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>&lt;E&gt; <B>naturalOrder</B>()</PRE>
-<DL>
-<DD>Returns a builder that creates immutable sorted sets whose elements are
- ordered by their natural ordering. The sorted sets use <A HREF="../../../../com/google/common/collect/Ordering.html#natural()"><CODE>Ordering.natural()</CODE></A> as the comparator. This method provides more
- type-safety than <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#builder()"><CODE>builder()</CODE></A>, as it can be called only for classes
- that implement <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang"><CODE>Comparable</CODE></A>.
-
- <p>Note: the type parameter <code>E</code> extends <code>Comparable&lt;E&gt;</code> rather
- than <code>Comparable&lt;? super E&gt;</code> as a workaround for javac <a
- href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6468354">bug
- 6468354</a>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="comparator()"><!-- --></A><H3>
-comparator</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&gt; <B>comparator</B>()</PRE>
-<DL>
-<DD>Returns the comparator that orders the elements, which is
- <A HREF="../../../../com/google/common/collect/Ordering.html#natural()"><CODE>Ordering.natural()</CODE></A> when the natural ordering of the
- elements is used. Note that its behavior is not consistent with
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true#comparator()" title="class or interface in java.util"><CODE>SortedSet.comparator()</CODE></A>, which returns <code>null</code> to indicate
- natural ordering.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true#comparator()" title="class or interface in java.util">comparator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="headSet(java.lang.Object)"><!-- --></A><A NAME="headSet(E)"><!-- --></A><H3>
-headSet</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&gt; <B>headSet</B>(<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&nbsp;toElement)</PRE>
-<DL>
-<DD>
-
- <p>This method returns a serializable <code>ImmutableSortedSet</code>.
-
- <p>The <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true#headSet(E)" title="class or interface in java.util"><CODE>SortedSet.headSet(E)</CODE></A> documentation states that a subset of a
- subset throws an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang"><CODE>IllegalArgumentException</CODE></A> if passed a
- <code>toElement</code> greater than an earlier <code>toElement</code>. However, this
- method doesn't throw an exception in that situation, but instead keeps the
- original <code>toElement</code>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true#headSet(E)" title="class or interface in java.util">headSet</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="subSet(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="subSet(E, E)"><!-- --></A><H3>
-subSet</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&gt; <B>subSet</B>(<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&nbsp;fromElement,
-                                    <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&nbsp;toElement)</PRE>
-<DL>
-<DD>
-
- <p>This method returns a serializable <code>ImmutableSortedSet</code>.
-
- <p>The <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true#subSet(E, E)" title="class or interface in java.util"><CODE>SortedSet.subSet(E, E)</CODE></A> documentation states that a subset of a
- subset throws an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang"><CODE>IllegalArgumentException</CODE></A> if passed a
- <code>fromElement</code> smaller than an earlier <code>fromElement</code>. However,
- this method doesn't throw an exception in that situation, but instead keeps
- the original <code>fromElement</code>. Similarly, this method keeps the
- original <code>toElement</code>, instead of throwing an exception, if passed a
- <code>toElement</code> greater than an earlier <code>toElement</code>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true#subSet(E, E)" title="class or interface in java.util">subSet</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="tailSet(java.lang.Object)"><!-- --></A><A NAME="tailSet(E)"><!-- --></A><H3>
-tailSet</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&gt; <B>tailSet</B>(<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&nbsp;fromElement)</PRE>
-<DL>
-<DD>
-
- <p>This method returns a serializable <code>ImmutableSortedSet</code>.
-
- <p>The <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true#tailSet(E)" title="class or interface in java.util"><CODE>SortedSet.tailSet(E)</CODE></A> documentation states that a subset of a
- subset throws an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang"><CODE>IllegalArgumentException</CODE></A> if passed a
- <code>fromElement</code> smaller than an earlier <code>fromElement</code>. However,
- this method doesn't throw an exception in that situation, but instead keeps
- the original <code>fromElement</code>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true#tailSet(E)" title="class or interface in java.util">tailSet</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="builder()"><!-- --></A><H3>
-builder</H3>
-<PRE>
-<FONT SIZE="-1"><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</A>
-</FONT>public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>&lt;E&gt; <B>builder</B>()</PRE>
-<DL>
-<DD><B>Deprecated.</B>&nbsp;<I>Use <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#naturalOrder()"><CODE>naturalOrder()</CODE></A>, which offers
-     better type-safety.</I>
-<P>
-<DD>Not supported. Use <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#naturalOrder()"><CODE>naturalOrder()</CODE></A>, which offers
- better type-safety, instead. This method exists only to hide
- <A HREF="../../../../com/google/common/collect/ImmutableSet.html#builder()"><CODE>ImmutableSet.builder()</CODE></A> from consumers of <code>ImmutableSortedSet</code>.
-<P>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ImmutableSortedSet.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ImmutableSortedSet.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableSortedSet.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/Iterables.html b/javadoc/com/google/common/collect/Iterables.html
deleted file mode 100644
index 1f0a09b..0000000
--- a/javadoc/com/google/common/collect/Iterables.html
+++ /dev/null
@@ -1,1350 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:59 PST 2010 -->
-<TITLE>
-Iterables (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Iterables (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Iterables.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/Iterators.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/Iterables.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Iterables.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class Iterables</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.Iterables</B>
-</PRE>
-<HR>
-<DL>
-<DT><PRE>public final class <B>Iterables</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
-</PRE>
-
-<P>
-This class contains static utility methods that operate on or return objects
- of type <code>Iterable</code>. Except as noted, each method has a corresponding
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util"><CODE>Iterator</CODE></A>-based method in the <A HREF="../../../../com/google/common/collect/Iterators.html" title="class in com.google.common.collect"><CODE>Iterators</CODE></A> class.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Kevin Bourrillion, Jared Levy</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; boolean</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#addAll(java.util.Collection, java.lang.Iterable)">addAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;T&gt;&nbsp;addTo,
-       <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends T&gt;&nbsp;elementsToAdd)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds all elements in <code>iterable</code> to <code>collection</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; boolean</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#all(java.lang.Iterable, com.google.common.base.Predicate)">all</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable,
-    <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if every element in <code>iterable</code> satisfies the
- predicate.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; boolean</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#any(java.lang.Iterable, com.google.common.base.Predicate)">any</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable,
-    <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if one or more elements in <code>iterable</code> satisfy
- the predicate.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#concat(java.lang.Iterable)">concat</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends T&gt;&gt;&nbsp;inputs)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Combines multiple iterables into a single iterable.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#concat(java.lang.Iterable...)">concat</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends T&gt;...&nbsp;inputs)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Combines multiple iterables into a single iterable.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#concat(java.lang.Iterable, java.lang.Iterable)">concat</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends T&gt;&nbsp;a,
-       <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends T&gt;&nbsp;b)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Combines two iterables into a single iterable.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#concat(java.lang.Iterable, java.lang.Iterable, java.lang.Iterable)">concat</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends T&gt;&nbsp;a,
-       <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends T&gt;&nbsp;b,
-       <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends T&gt;&nbsp;c)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Combines three iterables into a single iterable.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#concat(java.lang.Iterable, java.lang.Iterable, java.lang.Iterable, java.lang.Iterable)">concat</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends T&gt;&nbsp;a,
-       <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends T&gt;&nbsp;b,
-       <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends T&gt;&nbsp;c,
-       <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends T&gt;&nbsp;d)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Combines four iterables into a single iterable.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#consumingIterable(java.lang.Iterable)">consumingIterable</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of the supplied iterable that wraps each generated
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util"><CODE>Iterator</CODE></A> through <A HREF="../../../../com/google/common/collect/Iterators.html#consumingIterator(java.util.Iterator)"><CODE>Iterators.consumingIterator(Iterator)</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#contains(java.lang.Iterable, java.lang.Object)">contains</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;?&gt;&nbsp;iterable,
-         <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if <code>iterable</code> contains <code>element</code>; that is,
- any object for while <code>equals(element)</code> is true.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#cycle(java.lang.Iterable)">cycle</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an iterable whose iterators cycle indefinitely over the elements of
- <code>iterable</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#cycle(T...)">cycle</A></B>(T...&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an iterable whose iterators cycle indefinitely over the provided
- elements.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#elementsEqual(java.lang.Iterable, java.lang.Iterable)">elementsEqual</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;?&gt;&nbsp;iterable1,
-              <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;?&gt;&nbsp;iterable2)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Determines whether two iterables contain equal elements in the same order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#filter(java.lang.Iterable, java.lang.Class)">filter</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;?&gt;&nbsp;unfiltered,
-       <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns all instances of class <code>type</code> in <code>unfiltered</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#filter(java.lang.Iterable, com.google.common.base.Predicate)">filter</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;unfiltered,
-       <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the elements of <code>unfiltered</code> that satisfy a predicate.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; T</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#find(java.lang.Iterable, com.google.common.base.Predicate)">find</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable,
-     <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the first element in <code>iterable</code> that satisfies the given
- predicate.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#frequency(java.lang.Iterable, java.lang.Object)">frequency</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;?&gt;&nbsp;iterable,
-          <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of elements in the specified iterable that equal the
- specified object.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; T</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#get(java.lang.Iterable, int)">get</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable,
-    int&nbsp;position)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the element at the specified position in an iterable.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; T</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#getLast(java.lang.Iterable)">getLast</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the last element of <code>iterable</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; T</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#getOnlyElement(java.lang.Iterable)">getOnlyElement</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the single element contained in <code>iterable</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; T</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#getOnlyElement(java.lang.Iterable, T)">getOnlyElement</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable,
-               T&nbsp;defaultValue)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the single element contained in <code>iterable</code>, or <code>defaultValue</code> if the iterable is empty.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; int</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#indexOf(java.lang.Iterable, com.google.common.base.Predicate)">indexOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable,
-        <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the index in <code>iterable</code> of the first element that satisfies
- the provided <code>predicate</code>, or <code>-1</code> if the Iterable has no such
- elements.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; boolean</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#isEmpty(java.lang.Iterable)">isEmpty</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Determines if the given iterable contains no elements.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;T&gt;&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#paddedPartition(java.lang.Iterable, int)">paddedPartition</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable,
-                int&nbsp;size)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Divides an iterable into unmodifiable sublists of the given size, padding
- the final iterable with null values if necessary.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;T&gt;&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#partition(java.lang.Iterable, int)">partition</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable,
-          int&nbsp;size)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Divides an iterable into unmodifiable sublists of the given size (the final
- iterable may be smaller).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#removeAll(java.lang.Iterable, java.util.Collection)">removeAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;?&gt;&nbsp;removeFrom,
-          <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToRemove)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes, from an iterable, every element that belongs to the provided
- collection.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; boolean</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#removeIf(java.lang.Iterable, com.google.common.base.Predicate)">removeIf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;removeFrom,
-         <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes, from an iterable, every element that satisfies the provided
- predicate.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#retainAll(java.lang.Iterable, java.util.Collection)">retainAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;?&gt;&nbsp;removeFrom,
-          <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToRetain)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes, from an iterable, every element that does not belong to the
- provided collection.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#reverse(java.util.List)">reverse</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;T&gt;&nbsp;list)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adapts a list to an iterable with reversed iteration order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#size(java.lang.Iterable)">size</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;?&gt;&nbsp;iterable)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of elements in <code>iterable</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; T[]</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#toArray(java.lang.Iterable, java.lang.Class)">toArray</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends T&gt;&nbsp;iterable,
-        <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies an iterable's elements into an array.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#toString(java.lang.Iterable)">toString</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;?&gt;&nbsp;iterable)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a string representation of <code>iterable</code>, with the format
- <code>[e1, e2, ..., en]</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;F,T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#transform(java.lang.Iterable, com.google.common.base.Function)">transform</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;F&gt;&nbsp;fromIterable,
-          <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super F,? extends T&gt;&nbsp;function)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an iterable that applies <code>function</code> to each element of <code>fromIterable</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterables.html#unmodifiableIterable(java.lang.Iterable)">unmodifiableIterable</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable view of <code>iterable</code>.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="unmodifiableIterable(java.lang.Iterable)"><!-- --></A><H3>
-unmodifiableIterable</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt; <B>unmodifiableIterable</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable)</PRE>
-<DL>
-<DD>Returns an unmodifiable view of <code>iterable</code>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="size(java.lang.Iterable)"><!-- --></A><H3>
-size</H3>
-<PRE>
-public static int <B>size</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;?&gt;&nbsp;iterable)</PRE>
-<DL>
-<DD>Returns the number of elements in <code>iterable</code>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="contains(java.lang.Iterable, java.lang.Object)"><!-- --></A><H3>
-contains</H3>
-<PRE>
-public static boolean <B>contains</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;?&gt;&nbsp;iterable,
-                               <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                               <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</PRE>
-<DL>
-<DD>Returns <code>true</code> if <code>iterable</code> contains <code>element</code>; that is,
- any object for while <code>equals(element)</code> is true.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="removeAll(java.lang.Iterable, java.util.Collection)"><!-- --></A><H3>
-removeAll</H3>
-<PRE>
-public static boolean <B>removeAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;?&gt;&nbsp;removeFrom,
-                                <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToRemove)</PRE>
-<DL>
-<DD>Removes, from an iterable, every element that belongs to the provided
- collection.
-
- <p>This method calls <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#removeAll(java.util.Collection)" title="class or interface in java.util"><CODE>Collection.removeAll(java.util.Collection<?>)</CODE></A> if <code>iterable</code> is a
- collection, and <A HREF="../../../../com/google/common/collect/Iterators.html#removeAll(java.util.Iterator, java.util.Collection)"><CODE>Iterators.removeAll(java.util.Iterator<?>, java.util.Collection<?>)</CODE></A> otherwise.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>removeFrom</CODE> - the iterable to (potentially) remove elements from<DD><CODE>elementsToRemove</CODE> - the elements to remove
-<DT><B>Returns:</B><DD><code>true</code> if any elements are removed from <code>iterable</code></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="retainAll(java.lang.Iterable, java.util.Collection)"><!-- --></A><H3>
-retainAll</H3>
-<PRE>
-public static boolean <B>retainAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;?&gt;&nbsp;removeFrom,
-                                <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToRetain)</PRE>
-<DL>
-<DD>Removes, from an iterable, every element that does not belong to the
- provided collection.
-
- <p>This method calls <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util"><CODE>Collection.retainAll(java.util.Collection<?>)</CODE></A> if <code>iterable</code> is a
- collection, and <A HREF="../../../../com/google/common/collect/Iterators.html#retainAll(java.util.Iterator, java.util.Collection)"><CODE>Iterators.retainAll(java.util.Iterator<?>, java.util.Collection<?>)</CODE></A> otherwise.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>removeFrom</CODE> - the iterable to (potentially) remove elements from<DD><CODE>elementsToRetain</CODE> - the elements to retain
-<DT><B>Returns:</B><DD><code>true</code> if any elements are removed from <code>iterable</code></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="removeIf(java.lang.Iterable, com.google.common.base.Predicate)"><!-- --></A><H3>
-removeIf</H3>
-<PRE>
-public static &lt;T&gt; boolean <B>removeIf</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;removeFrom,
-                                   <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</PRE>
-<DL>
-<DD>Removes, from an iterable, every element that satisfies the provided
- predicate.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>removeFrom</CODE> - the iterable to (potentially) remove elements from<DD><CODE>predicate</CODE> - a predicate that determines whether an element should
-     be removed
-<DT><B>Returns:</B><DD><code>true</code> if any elements were removed from the iterable
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - if the iterable does not support
-     <code>remove()</code>.<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>tentative</b></DD>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="elementsEqual(java.lang.Iterable, java.lang.Iterable)"><!-- --></A><H3>
-elementsEqual</H3>
-<PRE>
-public static boolean <B>elementsEqual</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;?&gt;&nbsp;iterable1,
-                                    <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;?&gt;&nbsp;iterable2)</PRE>
-<DL>
-<DD>Determines whether two iterables contain equal elements in the same order.
- More specifically, this method returns <code>true</code> if <code>iterable1</code>
- and <code>iterable2</code> contain the same number of elements and every element
- of <code>iterable1</code> is equal to the corresponding element of
- <code>iterable2</code>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toString(java.lang.Iterable)"><!-- --></A><H3>
-toString</H3>
-<PRE>
-public static <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>toString</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;?&gt;&nbsp;iterable)</PRE>
-<DL>
-<DD>Returns a string representation of <code>iterable</code>, with the format
- <code>[e1, e2, ..., en]</code>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getOnlyElement(java.lang.Iterable)"><!-- --></A><H3>
-getOnlyElement</H3>
-<PRE>
-public static &lt;T&gt; T <B>getOnlyElement</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable)</PRE>
-<DL>
-<DD>Returns the single element contained in <code>iterable</code>.
-<P>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/NoSuchElementException.html?is-external=true" title="class or interface in java.util">NoSuchElementException</A></CODE> - if the iterable is empty
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if the iterable contains multiple
-     elements</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getOnlyElement(java.lang.Iterable,java.lang.Object)"><!-- --></A><A NAME="getOnlyElement(java.lang.Iterable, T)"><!-- --></A><H3>
-getOnlyElement</H3>
-<PRE>
-public static &lt;T&gt; T <B>getOnlyElement</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable,
-                                   <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                                   T&nbsp;defaultValue)</PRE>
-<DL>
-<DD>Returns the single element contained in <code>iterable</code>, or <code>defaultValue</code> if the iterable is empty.
-<P>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if the iterator contains multiple
-     elements</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toArray(java.lang.Iterable, java.lang.Class)"><!-- --></A><H3>
-toArray</H3>
-<PRE>
-public static &lt;T&gt; T[] <B>toArray</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends T&gt;&nbsp;iterable,
-                              <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type)</PRE>
-<DL>
-<DD>Copies an iterable's elements into an array.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>iterable</CODE> - the iterable to copy<DD><CODE>type</CODE> - the type of the elements
-<DT><B>Returns:</B><DD>a newly-allocated array into which all the elements of the iterable
-     have been copied</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="addAll(java.util.Collection, java.lang.Iterable)"><!-- --></A><H3>
-addAll</H3>
-<PRE>
-public static &lt;T&gt; boolean <B>addAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;T&gt;&nbsp;addTo,
-                                 <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends T&gt;&nbsp;elementsToAdd)</PRE>
-<DL>
-<DD>Adds all elements in <code>iterable</code> to <code>collection</code>.
-<P>
-<DD><DL>
-
-<DT><B>Returns:</B><DD><code>true</code> if <code>collection</code> was modified as a result of this
-     operation.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="frequency(java.lang.Iterable, java.lang.Object)"><!-- --></A><H3>
-frequency</H3>
-<PRE>
-public static int <B>frequency</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;?&gt;&nbsp;iterable,
-                            <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                            <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</PRE>
-<DL>
-<DD>Returns the number of elements in the specified iterable that equal the
- specified object.
-<P>
-<DD><DL>
-<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#frequency(java.util.Collection, java.lang.Object)" title="class or interface in java.util"><CODE>Collections.frequency(java.util.Collection<?>, java.lang.Object)</CODE></A></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="cycle(java.lang.Iterable)"><!-- --></A><H3>
-cycle</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt; <B>cycle</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable)</PRE>
-<DL>
-<DD>Returns an iterable whose iterators cycle indefinitely over the elements of
- <code>iterable</code>.
-
- <p>That iterator supports <code>remove()</code> if <code>iterable.iterator()</code>
- does. After <code>remove()</code> is called, subsequent cycles omit the removed
- element, which is no longer in <code>iterable</code>. The iterator's
- <code>hasNext()</code> method returns <code>true</code> until <code>iterable</code> is
- empty.
-
- <p><b>Warning:</b> Typical uses of the resulting iterator may produce an
- infinite loop. You should use an explicit <code>break</code> or be certain that
- you will eventually remove all the elements.
-
- <p>To cycle over the iterable <code>n</code> times, use the following:
- <code>Iterables.concat(Collections.nCopies(n, iterable))</code>
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="cycle(java.lang.Object[])"><!-- --></A><A NAME="cycle(T...)"><!-- --></A><H3>
-cycle</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt; <B>cycle</B>(T...&nbsp;elements)</PRE>
-<DL>
-<DD>Returns an iterable whose iterators cycle indefinitely over the provided
- elements.
-
- <p>After <code>remove</code> is invoked on a generated iterator, the removed
- element will no longer appear in either that iterator or any other iterator
- created from the same source iterable. That is, this method behaves exactly
- as <code>Iterables.cycle(Lists.newArrayList(elements))</code>. The iterator's
- <code>hasNext</code> method returns <code>true</code> until all of the original
- elements have been removed.
-
- <p><b>Warning:</b> Typical uses of the resulting iterator may produce an
- infinite loop. You should use an explicit <code>break</code> or be certain that
- you will eventually remove all the elements.
-
- <p>To cycle over the elements <code>n</code> times, use the following:
- <code>Iterables.concat(Collections.nCopies(n, Arrays.asList(elements)))</code>
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="concat(java.lang.Iterable, java.lang.Iterable)"><!-- --></A><H3>
-concat</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt; <B>concat</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends T&gt;&nbsp;a,
-                                     <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends T&gt;&nbsp;b)</PRE>
-<DL>
-<DD>Combines two iterables into a single iterable. The returned iterable has an
- iterator that traverses the elements in <code>a</code>, followed by the elements
- in <code>b</code>. The source iterators are not polled until necessary.
-
- <p>The returned iterable's iterator supports <code>remove()</code> when the
- corresponding input iterator supports it.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="concat(java.lang.Iterable, java.lang.Iterable, java.lang.Iterable)"><!-- --></A><H3>
-concat</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt; <B>concat</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends T&gt;&nbsp;a,
-                                     <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends T&gt;&nbsp;b,
-                                     <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends T&gt;&nbsp;c)</PRE>
-<DL>
-<DD>Combines three iterables into a single iterable. The returned iterable has
- an iterator that traverses the elements in <code>a</code>, followed by the
- elements in <code>b</code>, followed by the elements in <code>c</code>. The source
- iterators are not polled until necessary.
-
- <p>The returned iterable's iterator supports <code>remove()</code> when the
- corresponding input iterator supports it.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="concat(java.lang.Iterable, java.lang.Iterable, java.lang.Iterable, java.lang.Iterable)"><!-- --></A><H3>
-concat</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt; <B>concat</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends T&gt;&nbsp;a,
-                                     <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends T&gt;&nbsp;b,
-                                     <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends T&gt;&nbsp;c,
-                                     <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends T&gt;&nbsp;d)</PRE>
-<DL>
-<DD>Combines four iterables into a single iterable. The returned iterable has
- an iterator that traverses the elements in <code>a</code>, followed by the
- elements in <code>b</code>, followed by the elements in <code>c</code>, followed by
- the elements in <code>d</code>. The source iterators are not polled until
- necessary.
-
- <p>The returned iterable's iterator supports <code>remove()</code> when the
- corresponding input iterator supports it.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="concat(java.lang.Iterable...)"><!-- --></A><H3>
-concat</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt; <B>concat</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends T&gt;...&nbsp;inputs)</PRE>
-<DL>
-<DD>Combines multiple iterables into a single iterable. The returned iterable
- has an iterator that traverses the elements of each iterable in
- <code>inputs</code>. The input iterators are not polled until necessary.
-
- <p>The returned iterable's iterator supports <code>remove()</code> when the
- corresponding input iterator supports it.
-<P>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any of the provided iterables is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="concat(java.lang.Iterable)"><!-- --></A><H3>
-concat</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt; <B>concat</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends T&gt;&gt;&nbsp;inputs)</PRE>
-<DL>
-<DD>Combines multiple iterables into a single iterable. The returned iterable
- has an iterator that traverses the elements of each iterable in
- <code>inputs</code>. The input iterators are not polled until necessary.
-
- <p>The returned iterable's iterator supports <code>remove()</code> when the
- corresponding input iterator supports it. The methods of the returned
- iterable may throw <code>NullPointerException</code> if any of the input
- iterators are null.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="partition(java.lang.Iterable, int)"><!-- --></A><H3>
-partition</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;T&gt;&gt; <B>partition</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable,
-                                              int&nbsp;size)</PRE>
-<DL>
-<DD>Divides an iterable into unmodifiable sublists of the given size (the final
- iterable may be smaller). For example, partitioning an iterable containing
- <code>[a, b, c, d, e]</code> with a partition size of 3 yields <code>[[a, b, c], [d, e]]</code> -- an outer iterable containing two inner lists of
- three and two elements, all in the original order.
-
- <p>Iterators returned by the returned iterable do not support the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true#remove()" title="class or interface in java.util"><CODE>Iterator.remove()</CODE></A> method. The returned lists implement <A HREF="http://java.sun.com/javase/6/docs/api/java/util/RandomAccess.html?is-external=true" title="class or interface in java.util"><CODE>RandomAccess</CODE></A>, whether or not the input list does.
-
- <p><b>Note:</b> if <code>iterable</code> is a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util"><CODE>List</CODE></A>, use <A HREF="../../../../com/google/common/collect/Lists.html#partition(java.util.List, int)"><CODE>Lists.partition(List, int)</CODE></A> instead.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>iterable</CODE> - the iterable to return a partitioned view of<DD><CODE>size</CODE> - the desired size of each partition (the last may be smaller)
-<DT><B>Returns:</B><DD>an iterable of unmodifiable lists containing the elements of <code>iterable</code> divided into partitions
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>size</code> is nonpositive</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="paddedPartition(java.lang.Iterable, int)"><!-- --></A><H3>
-paddedPartition</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;T&gt;&gt; <B>paddedPartition</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable,
-                                                    int&nbsp;size)</PRE>
-<DL>
-<DD>Divides an iterable into unmodifiable sublists of the given size, padding
- the final iterable with null values if necessary. For example, partitioning
- an iterable containing <code>[a, b, c, d, e]</code> with a partition size of 3
- yields <code>[[a, b, c], [d, e, null]]</code> -- an outer iterable containing
- two inner lists of three elements each, all in the original order.
-
- <p>Iterators returned by the returned iterable do not support the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true#remove()" title="class or interface in java.util"><CODE>Iterator.remove()</CODE></A> method.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>iterable</CODE> - the iterable to return a partitioned view of<DD><CODE>size</CODE> - the desired size of each partition
-<DT><B>Returns:</B><DD>an iterable of unmodifiable lists containing the elements of <code>iterable</code> divided into partitions (the final iterable may have
-     trailing null elements)
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>size</code> is nonpositive</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="filter(java.lang.Iterable, com.google.common.base.Predicate)"><!-- --></A><H3>
-filter</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt; <B>filter</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;unfiltered,
-                                     <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</PRE>
-<DL>
-<DD>Returns the elements of <code>unfiltered</code> that satisfy a predicate. The
- resulting iterable's iterator does not support <code>remove()</code>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="filter(java.lang.Iterable, java.lang.Class)"><!-- --></A><H3>
-filter</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt; <B>filter</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;?&gt;&nbsp;unfiltered,
-                                     <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type)</PRE>
-<DL>
-<DD>Returns all instances of class <code>type</code> in <code>unfiltered</code>. The
- returned iterable has elements whose class is <code>type</code> or a subclass of
- <code>type</code>. The returned iterable's iterator does not support
- <code>remove()</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>unfiltered</CODE> - an iterable containing objects of any type<DD><CODE>type</CODE> - the type of elements desired
-<DT><B>Returns:</B><DD>an unmodifiable iterable containing all elements of the original
-     iterable that were of the requested type</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="any(java.lang.Iterable, com.google.common.base.Predicate)"><!-- --></A><H3>
-any</H3>
-<PRE>
-public static &lt;T&gt; boolean <B>any</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable,
-                              <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</PRE>
-<DL>
-<DD>Returns <code>true</code> if one or more elements in <code>iterable</code> satisfy
- the predicate.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="all(java.lang.Iterable, com.google.common.base.Predicate)"><!-- --></A><H3>
-all</H3>
-<PRE>
-public static &lt;T&gt; boolean <B>all</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable,
-                              <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</PRE>
-<DL>
-<DD>Returns <code>true</code> if every element in <code>iterable</code> satisfies the
- predicate. If <code>iterable</code> is empty, <code>true</code> is returned.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="find(java.lang.Iterable, com.google.common.base.Predicate)"><!-- --></A><H3>
-find</H3>
-<PRE>
-public static &lt;T&gt; T <B>find</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable,
-                         <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</PRE>
-<DL>
-<DD>Returns the first element in <code>iterable</code> that satisfies the given
- predicate.
-<P>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/NoSuchElementException.html?is-external=true" title="class or interface in java.util">NoSuchElementException</A></CODE> - if no element in <code>iterable</code> matches
-     the given predicate</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="indexOf(java.lang.Iterable, com.google.common.base.Predicate)"><!-- --></A><H3>
-indexOf</H3>
-<PRE>
-public static &lt;T&gt; int <B>indexOf</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable,
-                              <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</PRE>
-<DL>
-<DD>Returns the index in <code>iterable</code> of the first element that satisfies
- the provided <code>predicate</code>, or <code>-1</code> if the Iterable has no such
- elements.
-
- <p>More formally, returns the lowest index <code>i</code> such that
- <code>predicate.apply(Iterables.get(iterable, i))</code> is <code>true</code> or
- <code>-1</code> if there is no such index.
-<P>
-<DD><DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>tentative</b></DD>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="transform(java.lang.Iterable, com.google.common.base.Function)"><!-- --></A><H3>
-transform</H3>
-<PRE>
-public static &lt;F,T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt; <B>transform</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;F&gt;&nbsp;fromIterable,
-                                          <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super F,? extends T&gt;&nbsp;function)</PRE>
-<DL>
-<DD>Returns an iterable that applies <code>function</code> to each element of <code>fromIterable</code>.
-
- <p>The returned iterable's iterator supports <code>remove()</code> if the
- provided iterator does. After a successful <code>remove()</code> call,
- <code>fromIterable</code> no longer contains the corresponding element.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="get(java.lang.Iterable, int)"><!-- --></A><H3>
-get</H3>
-<PRE>
-public static &lt;T&gt; T <B>get</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable,
-                        int&nbsp;position)</PRE>
-<DL>
-<DD>Returns the element at the specified position in an iterable.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>position</CODE> - position of the element to return
-<DT><B>Returns:</B><DD>the element at the specified position in <code>iterable</code>
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IndexOutOfBoundsException.html?is-external=true" title="class or interface in java.lang">IndexOutOfBoundsException</A></CODE> - if <code>position</code> is negative or
-     greater than or equal to the size of <code>iterable</code></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getLast(java.lang.Iterable)"><!-- --></A><H3>
-getLast</H3>
-<PRE>
-public static &lt;T&gt; T <B>getLast</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable)</PRE>
-<DL>
-<DD>Returns the last element of <code>iterable</code>.
-<P>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>the last element of <code>iterable</code>
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/NoSuchElementException.html?is-external=true" title="class or interface in java.util">NoSuchElementException</A></CODE> - if the iterable has no elements</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="consumingIterable(java.lang.Iterable)"><!-- --></A><H3>
-consumingIterable</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt; <B>consumingIterable</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable)</PRE>
-<DL>
-<DD>Returns a view of the supplied iterable that wraps each generated
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util"><CODE>Iterator</CODE></A> through <A HREF="../../../../com/google/common/collect/Iterators.html#consumingIterator(java.util.Iterator)"><CODE>Iterators.consumingIterator(Iterator)</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>iterable</CODE> - the iterable to wrap
-<DT><B>Returns:</B><DD>a view of the supplied iterable that wraps each generated iterator
-     through <A HREF="../../../../com/google/common/collect/Iterators.html#consumingIterator(java.util.Iterator)"><CODE>Iterators.consumingIterator(Iterator)</CODE></A><DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>tentative</b></DD>
-<DT><B>See Also:</B><DD><A HREF="../../../../com/google/common/collect/Iterators.html#consumingIterator(java.util.Iterator)"><CODE>Iterators.consumingIterator(Iterator)</CODE></A></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="reverse(java.util.List)"><!-- --></A><H3>
-reverse</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt; <B>reverse</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;T&gt;&nbsp;list)</PRE>
-<DL>
-<DD>Adapts a list to an iterable with reversed iteration order. It is
- especially useful in foreach-style loops: <pre class="code">   <code>List&lt;String&gt; mylist = ...
-   for (String str : Iterables.reverse(mylist)) {
-     ...
-   }</code></pre>
-
- There is no corresponding method in <A HREF="../../../../com/google/common/collect/Iterators.html" title="class in com.google.common.collect"><CODE>Iterators</CODE></A>, since <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true#iterator()" title="class or interface in java.lang"><CODE>Iterable.iterator()</CODE></A> can simply be invoked on the result of calling this
- method.
-<P>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>an iterable with the same elements as the list, in reverse</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="isEmpty(java.lang.Iterable)"><!-- --></A><H3>
-isEmpty</H3>
-<PRE>
-public static &lt;T&gt; boolean <B>isEmpty</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable)</PRE>
-<DL>
-<DD>Determines if the given iterable contains no elements.
-
- <p>There is no precise <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util"><CODE>Iterator</CODE></A> equivalent to this method, since
- one can only ask an iterator whether it has any elements <i>remaining</i>
- (which one does using <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true#hasNext()" title="class or interface in java.util"><CODE>Iterator.hasNext()</CODE></A>).
-<P>
-<DD><DL>
-
-<DT><B>Returns:</B><DD><code>true</code> if the iterable contains no elements</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Iterables.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/Iterators.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/Iterables.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Iterables.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/Iterators.html b/javadoc/com/google/common/collect/Iterators.html
deleted file mode 100644
index 59b72d8..0000000
--- a/javadoc/com/google/common/collect/Iterators.html
+++ /dev/null
@@ -1,1500 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:59 PST 2010 -->
-<TITLE>
-Iterators (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Iterators (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Iterators.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/Iterables.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/Iterators.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Iterators.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class Iterators</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.Iterators</B>
-</PRE>
-<HR>
-<DL>
-<DT><PRE>public final class <B>Iterators</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
-</PRE>
-
-<P>
-This class contains static utility methods that operate on or return objects
- of type <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util"><CODE>Iterator</CODE></A>. Except as noted, each method has a corresponding
- <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang"><CODE>Iterable</CODE></A>-based method in the <A HREF="../../../../com/google/common/collect/Iterables.html" title="class in com.google.common.collect"><CODE>Iterables</CODE></A> class.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Kevin Bourrillion, Jared Levy</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; boolean</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#addAll(java.util.Collection, java.util.Iterator)">addAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;T&gt;&nbsp;addTo,
-       <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;&nbsp;iterator)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds all elements in <code>iterator</code> to <code>collection</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; boolean</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#all(java.util.Iterator, com.google.common.base.Predicate)">all</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator,
-    <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if every element returned by <code>iterator</code>
- satisfies the given predicate.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; boolean</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#any(java.util.Iterator, com.google.common.base.Predicate)">any</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator,
-    <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if one or more elements returned by <code>iterator</code>
- satisfy the given predicate.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Enumeration.html?is-external=true" title="class or interface in java.util">Enumeration</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#asEnumeration(java.util.Iterator)">asEnumeration</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adapts an <code>Iterator</code> to the <code>Enumeration</code> interface.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#concat(java.util.Iterator)">concat</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;&gt;&nbsp;inputs)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Combines multiple iterators into a single iterator.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#concat(java.util.Iterator...)">concat</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;...&nbsp;inputs)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Combines multiple iterators into a single iterator.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#concat(java.util.Iterator, java.util.Iterator)">concat</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;&nbsp;a,
-       <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;&nbsp;b)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Combines two iterators into a single iterator.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#concat(java.util.Iterator, java.util.Iterator, java.util.Iterator)">concat</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;&nbsp;a,
-       <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;&nbsp;b,
-       <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;&nbsp;c)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Combines three iterators into a single iterator.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#concat(java.util.Iterator, java.util.Iterator, java.util.Iterator, java.util.Iterator)">concat</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;&nbsp;a,
-       <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;&nbsp;b,
-       <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;&nbsp;c,
-       <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;&nbsp;d)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Combines four iterators into a single iterator.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#consumingIterator(java.util.Iterator)">consumingIterator</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of the supplied <code>iterator</code> that removes each element
- from the supplied <code>iterator</code> as it is returned.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#contains(java.util.Iterator, java.lang.Object)">contains</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;?&gt;&nbsp;iterator,
-         <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if <code>iterator</code> contains <code>element</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#cycle(java.lang.Iterable)">cycle</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an iterator that cycles indefinitely over the elements of <code>iterable</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#cycle(T...)">cycle</A></B>(T...&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an iterator that cycles indefinitely over the provided elements.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#elementsEqual(java.util.Iterator, java.util.Iterator)">elementsEqual</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;?&gt;&nbsp;iterator1,
-              <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;?&gt;&nbsp;iterator2)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Determines whether two iterators contain equal elements in the same order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#emptyIterator()">emptyIterator</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the empty iterator.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#filter(java.util.Iterator, java.lang.Class)">filter</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;?&gt;&nbsp;unfiltered,
-       <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns all instances of class <code>type</code> in <code>unfiltered</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#filter(java.util.Iterator, com.google.common.base.Predicate)">filter</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;unfiltered,
-       <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the elements of <code>unfiltered</code> that satisfy a predicate.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; T</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#find(java.util.Iterator, com.google.common.base.Predicate)">find</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator,
-     <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the first element in <code>iterator</code> that satisfies the given
- predicate.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#forArray(T...)">forArray</A></B>(T...&nbsp;array)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an iterator containing the elements of <code>array</code> in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#forEnumeration(java.util.Enumeration)">forEnumeration</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Enumeration.html?is-external=true" title="class or interface in java.util">Enumeration</A>&lt;T&gt;&nbsp;enumeration)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adapts an <code>Enumeration</code> to the <code>Iterator</code> interface.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#frequency(java.util.Iterator, java.lang.Object)">frequency</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;?&gt;&nbsp;iterator,
-          <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of elements in the specified iterator that equal the
- specified object.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; T</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#get(java.util.Iterator, int)">get</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator,
-    int&nbsp;position)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Advances <code>iterator</code> <code>position + 1</code> times, returning the element
- at the <code>position</code>th position.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; T</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#getLast(java.util.Iterator)">getLast</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Advances <code>iterator</code> to the end, returning the last element.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; T</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#getOnlyElement(java.util.Iterator)">getOnlyElement</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the single element contained in <code>iterator</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; T</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#getOnlyElement(java.util.Iterator, T)">getOnlyElement</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator,
-               T&nbsp;defaultValue)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the single element contained in <code>iterator</code>, or <code>defaultValue</code> if the iterator is empty.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; int</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#indexOf(java.util.Iterator, com.google.common.base.Predicate)">indexOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator,
-        <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the index in <code>iterator</code> of the first element that satisfies
- the provided <code>predicate</code>, or <code>-1</code> if the Iterator has no such
- elements.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;T&gt;&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#paddedPartition(java.util.Iterator, int)">paddedPartition</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator,
-                int&nbsp;size)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Divides an iterator into unmodifiable sublists of the given size, padding
- the final iterator with null values if necessary.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;T&gt;&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#partition(java.util.Iterator, int)">partition</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator,
-          int&nbsp;size)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Divides an iterator into unmodifiable sublists of the given size (the final
- list may be smaller).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/collect/PeekingIterator.html" title="interface in com.google.common.collect">PeekingIterator</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#peekingIterator(java.util.Iterator)">peekingIterator</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;&nbsp;iterator)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a <code>PeekingIterator</code> backed by the given iterator.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#removeAll(java.util.Iterator, java.util.Collection)">removeAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;?&gt;&nbsp;removeFrom,
-          <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToRemove)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Traverses an iterator and removes every element that belongs to the
- provided collection.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; boolean</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#removeIf(java.util.Iterator, com.google.common.base.Predicate)">removeIf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;removeFrom,
-         <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes every element that satisfies the provided predicate from the
- iterator.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#retainAll(java.util.Iterator, java.util.Collection)">retainAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;?&gt;&nbsp;removeFrom,
-          <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToRetain)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Traverses an iterator and removes every element that does not belong to the
- provided collection.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#singletonIterator(T)">singletonIterator</A></B>(T&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an iterator containing only <code>value</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#size(java.util.Iterator)">size</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;?&gt;&nbsp;iterator)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of elements remaining in <code>iterator</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; T[]</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#toArray(java.util.Iterator, java.lang.Class)">toArray</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;&nbsp;iterator,
-        <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies an iterator's elements into an array.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#toString(java.util.Iterator)">toString</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;?&gt;&nbsp;iterator)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a string representation of <code>iterator</code>, with the format
- <code>[e1, e2, ..., en]</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;F,T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#transform(java.util.Iterator, com.google.common.base.Function)">transform</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;F&gt;&nbsp;fromIterator,
-          <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super F,? extends T&gt;&nbsp;function)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an iterator that applies <code>function</code> to each element of <code>fromIterator</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Iterators.html#unmodifiableIterator(java.util.Iterator)">unmodifiableIterator</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable view of <code>iterator</code>.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="emptyIterator()"><!-- --></A><H3>
-emptyIterator</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;T&gt; <B>emptyIterator</B>()</PRE>
-<DL>
-<DD>Returns the empty iterator.
-
- <p>The <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang"><CODE>Iterable</CODE></A> equivalent of this method is <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#emptySet()" title="class or interface in java.util"><CODE>Collections.emptySet()</CODE></A>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="unmodifiableIterator(java.util.Iterator)"><!-- --></A><H3>
-unmodifiableIterator</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;T&gt; <B>unmodifiableIterator</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator)</PRE>
-<DL>
-<DD>Returns an unmodifiable view of <code>iterator</code>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="size(java.util.Iterator)"><!-- --></A><H3>
-size</H3>
-<PRE>
-public static int <B>size</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;?&gt;&nbsp;iterator)</PRE>
-<DL>
-<DD>Returns the number of elements remaining in <code>iterator</code>. The iterator
- will be left exhausted: its <code>hasNext()</code> method will return
- <code>false</code>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="contains(java.util.Iterator, java.lang.Object)"><!-- --></A><H3>
-contains</H3>
-<PRE>
-public static boolean <B>contains</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;?&gt;&nbsp;iterator,
-                               <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                               <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</PRE>
-<DL>
-<DD>Returns <code>true</code> if <code>iterator</code> contains <code>element</code>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="removeAll(java.util.Iterator, java.util.Collection)"><!-- --></A><H3>
-removeAll</H3>
-<PRE>
-public static boolean <B>removeAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;?&gt;&nbsp;removeFrom,
-                                <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToRemove)</PRE>
-<DL>
-<DD>Traverses an iterator and removes every element that belongs to the
- provided collection. The iterator will be left exhausted: its
- <code>hasNext()</code> method will return <code>false</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>removeFrom</CODE> - the iterator to (potentially) remove elements from<DD><CODE>elementsToRemove</CODE> - the elements to remove
-<DT><B>Returns:</B><DD><code>true</code> if any elements are removed from <code>iterator</code></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="removeIf(java.util.Iterator, com.google.common.base.Predicate)"><!-- --></A><H3>
-removeIf</H3>
-<PRE>
-public static &lt;T&gt; boolean <B>removeIf</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;removeFrom,
-                                   <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</PRE>
-<DL>
-<DD>Removes every element that satisfies the provided predicate from the
- iterator. The iterator will be left exhausted: its <code>hasNext()</code>
- method will return <code>false</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>removeFrom</CODE> - the iterator to (potentially) remove elements from<DD><CODE>predicate</CODE> - a predicate that determines whether an element should
-     be removed
-<DT><B>Returns:</B><DD><code>true</code> if any elements were removed from the iterator<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>tentative</b></DD>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="retainAll(java.util.Iterator, java.util.Collection)"><!-- --></A><H3>
-retainAll</H3>
-<PRE>
-public static boolean <B>retainAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;?&gt;&nbsp;removeFrom,
-                                <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToRetain)</PRE>
-<DL>
-<DD>Traverses an iterator and removes every element that does not belong to the
- provided collection. The iterator will be left exhausted: its
- <code>hasNext()</code> method will return <code>false</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>removeFrom</CODE> - the iterator to (potentially) remove elements from<DD><CODE>elementsToRetain</CODE> - the elements to retain
-<DT><B>Returns:</B><DD><code>true</code> if any elements are removed from <code>iterator</code></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="elementsEqual(java.util.Iterator, java.util.Iterator)"><!-- --></A><H3>
-elementsEqual</H3>
-<PRE>
-public static boolean <B>elementsEqual</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;?&gt;&nbsp;iterator1,
-                                    <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;?&gt;&nbsp;iterator2)</PRE>
-<DL>
-<DD>Determines whether two iterators contain equal elements in the same order.
- More specifically, this method returns <code>true</code> if <code>iterator1</code>
- and <code>iterator2</code> contain the same number of elements and every element
- of <code>iterator1</code> is equal to the corresponding element of
- <code>iterator2</code>.
-
- <p>Note that this will modify the supplied iterators, since they will have
- been advanced some number of elements forward.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toString(java.util.Iterator)"><!-- --></A><H3>
-toString</H3>
-<PRE>
-public static <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>toString</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;?&gt;&nbsp;iterator)</PRE>
-<DL>
-<DD>Returns a string representation of <code>iterator</code>, with the format
- <code>[e1, e2, ..., en]</code>. The iterator will be left exhausted: its
- <code>hasNext()</code> method will return <code>false</code>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getOnlyElement(java.util.Iterator)"><!-- --></A><H3>
-getOnlyElement</H3>
-<PRE>
-public static &lt;T&gt; T <B>getOnlyElement</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator)</PRE>
-<DL>
-<DD>Returns the single element contained in <code>iterator</code>.
-<P>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/NoSuchElementException.html?is-external=true" title="class or interface in java.util">NoSuchElementException</A></CODE> - if the iterator is empty
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if the iterator contains multiple
-     elements.  The state of the iterator is unspecified.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getOnlyElement(java.util.Iterator,java.lang.Object)"><!-- --></A><A NAME="getOnlyElement(java.util.Iterator, T)"><!-- --></A><H3>
-getOnlyElement</H3>
-<PRE>
-public static &lt;T&gt; T <B>getOnlyElement</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator,
-                                   <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                                   T&nbsp;defaultValue)</PRE>
-<DL>
-<DD>Returns the single element contained in <code>iterator</code>, or <code>defaultValue</code> if the iterator is empty.
-<P>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if the iterator contains multiple
-     elements.  The state of the iterator is unspecified.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toArray(java.util.Iterator, java.lang.Class)"><!-- --></A><H3>
-toArray</H3>
-<PRE>
-public static &lt;T&gt; T[] <B>toArray</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;&nbsp;iterator,
-                              <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type)</PRE>
-<DL>
-<DD>Copies an iterator's elements into an array. The iterator will be left
- exhausted: its <code>hasNext()</code> method will return <code>false</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>iterator</CODE> - the iterator to copy<DD><CODE>type</CODE> - the type of the elements
-<DT><B>Returns:</B><DD>a newly-allocated array into which all the elements of the iterator
-         have been copied</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="addAll(java.util.Collection, java.util.Iterator)"><!-- --></A><H3>
-addAll</H3>
-<PRE>
-public static &lt;T&gt; boolean <B>addAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;T&gt;&nbsp;addTo,
-                                 <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;&nbsp;iterator)</PRE>
-<DL>
-<DD>Adds all elements in <code>iterator</code> to <code>collection</code>. The iterator
- will be left exhausted: its <code>hasNext()</code> method will return
- <code>false</code>.
-<P>
-<DD><DL>
-
-<DT><B>Returns:</B><DD><code>true</code> if <code>collection</code> was modified as a result of this
-         operation</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="frequency(java.util.Iterator, java.lang.Object)"><!-- --></A><H3>
-frequency</H3>
-<PRE>
-public static int <B>frequency</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;?&gt;&nbsp;iterator,
-                            <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                            <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</PRE>
-<DL>
-<DD>Returns the number of elements in the specified iterator that equal the
- specified object. The iterator will be left exhausted: its
- <code>hasNext()</code> method will return <code>false</code>.
-<P>
-<DD><DL>
-<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#frequency(java.util.Collection, java.lang.Object)" title="class or interface in java.util"><CODE>Collections.frequency(java.util.Collection<?>, java.lang.Object)</CODE></A></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="cycle(java.lang.Iterable)"><!-- --></A><H3>
-cycle</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt; <B>cycle</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;T&gt;&nbsp;iterable)</PRE>
-<DL>
-<DD>Returns an iterator that cycles indefinitely over the elements of <code>iterable</code>.
-
- <p>The returned iterator supports <code>remove()</code> if the provided iterator
- does. After <code>remove()</code> is called, subsequent cycles omit the removed
- element, which is no longer in <code>iterable</code>. The iterator's
- <code>hasNext()</code> method returns <code>true</code> until <code>iterable</code> is
- empty.
-
- <p><b>Warning:</b> Typical uses of the resulting iterator may produce an
- infinite loop. You should use an explicit <code>break</code> or be certain that
- you will eventually remove all the elements.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="cycle(java.lang.Object[])"><!-- --></A><A NAME="cycle(T...)"><!-- --></A><H3>
-cycle</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt; <B>cycle</B>(T...&nbsp;elements)</PRE>
-<DL>
-<DD>Returns an iterator that cycles indefinitely over the provided elements.
-
- <p>The returned iterator supports <code>remove()</code> if the provided iterator
- does. After <code>remove()</code> is called, subsequent cycles omit the removed
- element, but <code>elements</code> does not change. The iterator's
- <code>hasNext()</code> method returns <code>true</code> until all of the original
- elements have been removed.
-
- <p><b>Warning:</b> Typical uses of the resulting iterator may produce an
- infinite loop. You should use an explicit <code>break</code> or be certain that
- you will eventually remove all the elements.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="concat(java.util.Iterator, java.util.Iterator)"><!-- --></A><H3>
-concat</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt; <B>concat</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;&nbsp;a,
-                                     <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;&nbsp;b)</PRE>
-<DL>
-<DD>Combines two iterators into a single iterator. The returned iterator
- iterates across the elements in <code>a</code>, followed by the elements in
- <code>b</code>. The source iterators are not polled until necessary.
-
- <p>The returned iterator supports <code>remove()</code> when the corresponding
- input iterator supports it.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="concat(java.util.Iterator, java.util.Iterator, java.util.Iterator)"><!-- --></A><H3>
-concat</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt; <B>concat</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;&nbsp;a,
-                                     <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;&nbsp;b,
-                                     <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;&nbsp;c)</PRE>
-<DL>
-<DD>Combines three iterators into a single iterator. The returned iterator
- iterates across the elements in <code>a</code>, followed by the elements in
- <code>b</code>, followed by the elements in <code>c</code>. The source iterators
- are not polled until necessary.
-
- <p>The returned iterator supports <code>remove()</code> when the corresponding
- input iterator supports it.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="concat(java.util.Iterator, java.util.Iterator, java.util.Iterator, java.util.Iterator)"><!-- --></A><H3>
-concat</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt; <B>concat</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;&nbsp;a,
-                                     <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;&nbsp;b,
-                                     <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;&nbsp;c,
-                                     <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;&nbsp;d)</PRE>
-<DL>
-<DD>Combines four iterators into a single iterator. The returned iterator
- iterates across the elements in <code>a</code>, followed by the elements in
- <code>b</code>, followed by the elements in <code>c</code>, followed by the elements
- in <code>d</code>. The source iterators are not polled until necessary.
-
- <p>The returned iterator supports <code>remove()</code> when the corresponding
- input iterator supports it.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="concat(java.util.Iterator...)"><!-- --></A><H3>
-concat</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt; <B>concat</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;...&nbsp;inputs)</PRE>
-<DL>
-<DD>Combines multiple iterators into a single iterator. The returned iterator
- iterates across the elements of each iterator in <code>inputs</code>. The input
- iterators are not polled until necessary.
-
- <p>The returned iterator supports <code>remove()</code> when the corresponding
- input iterator supports it.
-<P>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any of the provided iterators is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="concat(java.util.Iterator)"><!-- --></A><H3>
-concat</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt; <B>concat</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;&gt;&nbsp;inputs)</PRE>
-<DL>
-<DD>Combines multiple iterators into a single iterator. The returned iterator
- iterates across the elements of each iterator in <code>inputs</code>. The input
- iterators are not polled until necessary.
-
- <p>The returned iterator supports <code>remove()</code> when the corresponding
- input iterator supports it. The methods of the returned iterator may throw
- <code>NullPointerException</code> if any of the input iterators are null.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="partition(java.util.Iterator, int)"><!-- --></A><H3>
-partition</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;T&gt;&gt; <B>partition</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator,
-                                                          int&nbsp;size)</PRE>
-<DL>
-<DD>Divides an iterator into unmodifiable sublists of the given size (the final
- list may be smaller). For example, partitioning an iterator containing
- <code>[a, b, c, d, e]</code> with a partition size of 3 yields <code>[[a, b, c], [d, e]]</code> -- an outer iterator containing two inner lists of
- three and two elements, all in the original order.
-
- <p>The returned lists implement <A HREF="http://java.sun.com/javase/6/docs/api/java/util/RandomAccess.html?is-external=true" title="class or interface in java.util"><CODE>RandomAccess</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>iterator</CODE> - the iterator to return a partitioned view of<DD><CODE>size</CODE> - the desired size of each partition (the last may be smaller)
-<DT><B>Returns:</B><DD>an iterator of immutable lists containing the elements of <code>iterator</code> divided into partitions
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>size</code> is nonpositive</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="paddedPartition(java.util.Iterator, int)"><!-- --></A><H3>
-paddedPartition</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;T&gt;&gt; <B>paddedPartition</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator,
-                                                                int&nbsp;size)</PRE>
-<DL>
-<DD>Divides an iterator into unmodifiable sublists of the given size, padding
- the final iterator with null values if necessary. For example, partitioning
- an iterator containing <code>[a, b, c, d, e]</code> with a partition size of 3
- yields <code>[[a, b, c], [d, e, null]]</code> -- an outer iterator containing
- two inner lists of three elements each, all in the original order.
-
- <p>The returned lists implement <A HREF="http://java.sun.com/javase/6/docs/api/java/util/RandomAccess.html?is-external=true" title="class or interface in java.util"><CODE>RandomAccess</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>iterator</CODE> - the iterator to return a partitioned view of<DD><CODE>size</CODE> - the desired size of each partition
-<DT><B>Returns:</B><DD>an iterator of immutable lists containing the elements of <code>iterator</code> divided into partitions (the final iterable may have
-     trailing null elements)
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>size</code> is nonpositive</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="filter(java.util.Iterator, com.google.common.base.Predicate)"><!-- --></A><H3>
-filter</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;T&gt; <B>filter</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;unfiltered,
-                                                 <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</PRE>
-<DL>
-<DD>Returns the elements of <code>unfiltered</code> that satisfy a predicate.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="filter(java.util.Iterator, java.lang.Class)"><!-- --></A><H3>
-filter</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;T&gt; <B>filter</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;?&gt;&nbsp;unfiltered,
-                                                 <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type)</PRE>
-<DL>
-<DD>Returns all instances of class <code>type</code> in <code>unfiltered</code>. The
- returned iterator has elements whose class is <code>type</code> or a subclass of
- <code>type</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>unfiltered</CODE> - an iterator containing objects of any type<DD><CODE>type</CODE> - the type of elements desired
-<DT><B>Returns:</B><DD>an unmodifiable iterator containing all elements of the original
-     iterator that were of the requested type</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="any(java.util.Iterator, com.google.common.base.Predicate)"><!-- --></A><H3>
-any</H3>
-<PRE>
-public static &lt;T&gt; boolean <B>any</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator,
-                              <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</PRE>
-<DL>
-<DD>Returns <code>true</code> if one or more elements returned by <code>iterator</code>
- satisfy the given predicate.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="all(java.util.Iterator, com.google.common.base.Predicate)"><!-- --></A><H3>
-all</H3>
-<PRE>
-public static &lt;T&gt; boolean <B>all</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator,
-                              <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</PRE>
-<DL>
-<DD>Returns <code>true</code> if every element returned by <code>iterator</code>
- satisfies the given predicate. If <code>iterator</code> is empty, <code>true</code>
- is returned.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="find(java.util.Iterator, com.google.common.base.Predicate)"><!-- --></A><H3>
-find</H3>
-<PRE>
-public static &lt;T&gt; T <B>find</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator,
-                         <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</PRE>
-<DL>
-<DD>Returns the first element in <code>iterator</code> that satisfies the given
- predicate. If a matching element is found, the iterator will be left in a
- state such that calling <code>iterator.remove()</code> will remove the found
- item. If no such element is found, the iterator will be left exhausted: its
- <code>hasNext()</code> method will return <code>false</code>.
-<P>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>the first matching element in <code>iterator</code>
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/NoSuchElementException.html?is-external=true" title="class or interface in java.util">NoSuchElementException</A></CODE> - if no element in <code>iterator</code> matches
-     the given predicate</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="indexOf(java.util.Iterator, com.google.common.base.Predicate)"><!-- --></A><H3>
-indexOf</H3>
-<PRE>
-public static &lt;T&gt; int <B>indexOf</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator,
-                              <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</PRE>
-<DL>
-<DD>Returns the index in <code>iterator</code> of the first element that satisfies
- the provided <code>predicate</code>, or <code>-1</code> if the Iterator has no such
- elements.
-
- <p>More formally, returns the lowest index <code>i</code> such that
- <code>predicate.apply(Iterators.get(iterator, i))</code> is <code>true</code>, or
- <code>-1</code> if there is no such index.
-
- <p>If -1 is returned, the iterator will be left exhausted: its
- <code>hasNext()</code> method will return <code>false</code>.  Otherwise,
- the iterator will be set to the element which satisfies the
- <code>predicate</code>.
-<P>
-<DD><DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>tentative</b></DD>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="transform(java.util.Iterator, com.google.common.base.Function)"><!-- --></A><H3>
-transform</H3>
-<PRE>
-public static &lt;F,T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt; <B>transform</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;F&gt;&nbsp;fromIterator,
-                                          <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super F,? extends T&gt;&nbsp;function)</PRE>
-<DL>
-<DD>Returns an iterator that applies <code>function</code> to each element of <code>fromIterator</code>.
-
- <p>The returned iterator supports <code>remove()</code> if the provided iterator
- does. After a successful <code>remove()</code> call, <code>fromIterator</code> no
- longer contains the corresponding element.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="get(java.util.Iterator, int)"><!-- --></A><H3>
-get</H3>
-<PRE>
-public static &lt;T&gt; T <B>get</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator,
-                        int&nbsp;position)</PRE>
-<DL>
-<DD>Advances <code>iterator</code> <code>position + 1</code> times, returning the element
- at the <code>position</code>th position.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>position</CODE> - position of the element to return
-<DT><B>Returns:</B><DD>the element at the specified position in <code>iterator</code>
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IndexOutOfBoundsException.html?is-external=true" title="class or interface in java.lang">IndexOutOfBoundsException</A></CODE> - if <code>position</code> is negative or
-     greater than or equal to the number of elements remaining in
-     <code>iterator</code></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getLast(java.util.Iterator)"><!-- --></A><H3>
-getLast</H3>
-<PRE>
-public static &lt;T&gt; T <B>getLast</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator)</PRE>
-<DL>
-<DD>Advances <code>iterator</code> to the end, returning the last element.
-<P>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>the last element of <code>iterator</code>
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/NoSuchElementException.html?is-external=true" title="class or interface in java.util">NoSuchElementException</A></CODE> - if the iterator has no remaining elements</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="consumingIterator(java.util.Iterator)"><!-- --></A><H3>
-consumingIterator</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt; <B>consumingIterator</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator)</PRE>
-<DL>
-<DD>Returns a view of the supplied <code>iterator</code> that removes each element
- from the supplied <code>iterator</code> as it is returned.
-
- <p>The provided iterator must support <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true#remove()" title="class or interface in java.util"><CODE>Iterator.remove()</CODE></A> or
- else the returned iterator will fail on the first call to <code>next</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>iterator</CODE> - the iterator to remove and return elements from
-<DT><B>Returns:</B><DD>an iterator that removes and returns elements from the
-     supplied iterator<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>tentative</b></DD>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="forArray(java.lang.Object[])"><!-- --></A><A NAME="forArray(T...)"><!-- --></A><H3>
-forArray</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;T&gt; <B>forArray</B>(T...&nbsp;array)</PRE>
-<DL>
-<DD>Returns an iterator containing the elements of <code>array</code> in order. The
- returned iterator is a view of the array; subsequent changes to the array
- will be reflected in the iterator.
-
- <p><b>Note:</b> It is often preferable to represent your data using a
- collection type, for example using <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true#asList(T...)" title="class or interface in java.util"><CODE>Arrays.asList(Object[])</CODE></A>, making
- this method unnecessary.
-
- <p>The <code>Iterable</code> equivalent of this method is either <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true#asList(T...)" title="class or interface in java.util"><CODE>Arrays.asList(Object[])</CODE></A> or <A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>ImmutableList.of(Object[])</CODE></A>}.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="singletonIterator(java.lang.Object)"><!-- --></A><A NAME="singletonIterator(T)"><!-- --></A><H3>
-singletonIterator</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;T&gt; <B>singletonIterator</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                                                            T&nbsp;value)</PRE>
-<DL>
-<DD>Returns an iterator containing only <code>value</code>.
-
- <p>The <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang"><CODE>Iterable</CODE></A> equivalent of this method is <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#singleton(T)" title="class or interface in java.util"><CODE>Collections.singleton(T)</CODE></A>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="forEnumeration(java.util.Enumeration)"><!-- --></A><H3>
-forEnumeration</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;T&gt; <B>forEnumeration</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Enumeration.html?is-external=true" title="class or interface in java.util">Enumeration</A>&lt;T&gt;&nbsp;enumeration)</PRE>
-<DL>
-<DD>Adapts an <code>Enumeration</code> to the <code>Iterator</code> interface.
-
- <p>This method has no equivalent in <A HREF="../../../../com/google/common/collect/Iterables.html" title="class in com.google.common.collect"><CODE>Iterables</CODE></A> because viewing an
- <code>Enumeration</code> as an <code>Iterable</code> is impossible. However, the
- contents can be <i>copied</i> into a collection using <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#list(java.util.Enumeration)" title="class or interface in java.util"><CODE>Collections.list(java.util.Enumeration<T>)</CODE></A>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="asEnumeration(java.util.Iterator)"><!-- --></A><H3>
-asEnumeration</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Enumeration.html?is-external=true" title="class or interface in java.util">Enumeration</A>&lt;T&gt; <B>asEnumeration</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator)</PRE>
-<DL>
-<DD>Adapts an <code>Iterator</code> to the <code>Enumeration</code> interface.
-
- <p>The <code>Iterable</code> equivalent of this method is either <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#enumeration(java.util.Collection)" title="class or interface in java.util"><CODE>Collections.enumeration(java.util.Collection<T>)</CODE></A> (if you have a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A>), or
- <code>Iterators.asEnumeration(collection.iterator())</code>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="peekingIterator(java.util.Iterator)"><!-- --></A><H3>
-peekingIterator</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="../../../../com/google/common/collect/PeekingIterator.html" title="interface in com.google.common.collect">PeekingIterator</A>&lt;T&gt; <B>peekingIterator</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;&nbsp;iterator)</PRE>
-<DL>
-<DD>Returns a <code>PeekingIterator</code> backed by the given iterator.
-
- <p>Calls to the <code>peek</code> method with no intervening calls to <code>next</code> do not affect the iteration, and hence return the same object each
- time. A subsequent call to <code>next</code> is guaranteed to return the same
- object again. For example: <pre>   <code>PeekingIterator&lt;String&gt; peekingIterator =
-       Iterators.peekingIterator(Iterators.forArray("a", "b"));
-   String a1 = peekingIterator.peek(); // returns "a"
-   String a2 = peekingIterator.peek(); // also returns "a"
-   String a3 = peekingIterator.next(); // also returns "a"</code></pre>
-
- Any structural changes to the underlying iteration (aside from those
- performed by the iterator's own <A HREF="../../../../com/google/common/collect/PeekingIterator.html#remove()"><CODE>PeekingIterator.remove()</CODE></A> method)
- will leave the iterator in an undefined state.
-
- <p>The returned iterator does not support removal after peeking, as
- explained by <A HREF="../../../../com/google/common/collect/PeekingIterator.html#remove()"><CODE>PeekingIterator.remove()</CODE></A>.
-
- <p>Note: If the given iterator is already a <code>PeekingIterator</code>,
- it <i>might</i> be returned to the caller, although this is neither
- guaranteed to occur nor required to be consistent.  For example, this
- method <i>might</i> choose to pass through recognized implementations of
- <code>PeekingIterator</code> when the behavior of the implementation is
- known to meet the contract guaranteed by this method.
-
- <p>There is no <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang"><CODE>Iterable</CODE></A> equivalent to this method, so use this
- method to wrap each individual iterator as it is generated.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>iterator</CODE> - the backing iterator. The <A HREF="../../../../com/google/common/collect/PeekingIterator.html" title="interface in com.google.common.collect"><CODE>PeekingIterator</CODE></A> assumes
-     ownership of this iterator, so users should cease making direct calls
-     to it after calling this method.
-<DT><B>Returns:</B><DD>a peeking iterator backed by that iterator. Apart from the
-     additional <A HREF="../../../../com/google/common/collect/PeekingIterator.html#peek()"><CODE>PeekingIterator.peek()</CODE></A> method, this iterator behaves
-     exactly the same as <code>iterator</code>.</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Iterators.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/Iterables.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/Iterators.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Iterators.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/LinkedHashMultimap.html b/javadoc/com/google/common/collect/LinkedHashMultimap.html
deleted file mode 100644
index 9d7ac26..0000000
--- a/javadoc/com/google/common/collect/LinkedHashMultimap.html
+++ /dev/null
@@ -1,973 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:59 PST 2010 -->
-<TITLE>
-LinkedHashMultimap (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="LinkedHashMultimap (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/LinkedHashMultimap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/Iterators.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/LinkedHashMultimap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="LinkedHashMultimap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class LinkedHashMultimap&lt;K,V&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.LinkedHashMultimap&lt;K,V&gt;</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;, <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public final class <B>LinkedHashMultimap&lt;K,V&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
-</PRE>
-
-<P>
-Implementation of <code>Multimap</code> that does not allow duplicate key-value
- entries and that returns collections whose iterators follow the ordering in
- which the data was added to the multimap.
-
- <p>The collections returned by <code>keySet</code>, <code>keys</code>, and <code>asMap</code> iterate through the keys in the order they were first added to the
- multimap. Similarly, <code>get</code>, <code>removeAll</code>, and <code>replaceValues</code> return collections that iterate through the values in the
- order they were added. The collections generated by <code>entries</code> and
- <code>values</code> iterate across the key-value mappings in the order they were
- added to the multimap.
-
- <p>The iteration ordering of the collections generated by <code>keySet</code>,
- <code>keys</code>, and <code>asMap</code> has a few subtleties. As long as the set of
- keys remains unchanged, adding or removing mappings does not affect the key
- iteration order. However, if you remove all values associated with a key and
- then add the key back to the multimap, that key will come last in the key
- iteration order.
-
- <p>The multimap does not store duplicate key-value pairs. Adding a new
- key-value pair equal to an existing key-value pair has no effect.
-
- <p>Keys and values may be null. All optional multimap methods are supported,
- and all returned views are modifiable.
-
- <p>This class is not threadsafe when any concurrent operations update the
- multimap. Concurrent read operations will work correctly. To allow concurrent
- update operations, wrap your multimap with a call to <A HREF="../../../../com/google/common/collect/Multimaps.html#synchronizedSetMultimap(com.google.common.collect.SetMultimap)"><CODE>Multimaps.synchronizedSetMultimap(com.google.common.collect.SetMultimap<K, V>)</CODE></A>.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Jared Levy</DD>
-<DT><B>See Also:</B><DD><A HREF="../../../../serialized-form.html#com.google.common.collect.LinkedHashMultimap">Serialized Form</A></DL>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html#asMap()">asMap</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a map view that associates each key with the corresponding values
- in the multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html#clear()">clear</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes all key-value pairs from the multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html#containsEntry(java.lang.Object, java.lang.Object)">containsEntry</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
-              <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains the specified key-value pair.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html#containsKey(java.lang.Object)">containsKey</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains any values for the specified
- key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html#containsValue(java.lang.Object)">containsValue</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains the specified value for any
- key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect">LinkedHashMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html#create()">create</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new, empty <code>LinkedHashMultimap</code> with the default initial
- capacities.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect">LinkedHashMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html#create(int, int)">create</A></B>(int&nbsp;expectedKeys,
-       int&nbsp;expectedValuesPerKey)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs an empty <code>LinkedHashMultimap</code> with enough capacity to hold
- the specified numbers of keys and values without rehashing.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect">LinkedHashMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html#create(com.google.common.collect.Multimap)">create</A></B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a <code>LinkedHashMultimap</code> with the same mappings as the
- specified multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="type parameter in LinkedHashMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="type parameter in LinkedHashMultimap">V</A>&gt;&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html#entries()">entries</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a set of all key-value pairs.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares the specified object to this multimap for equality.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;V&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html#get(K)">get</A></B>(K&nbsp;key)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection view of all values associated with a key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html#hashCode()">hashCode</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the hash code for this multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html#isEmpty()">isEmpty</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains no key-value pairs.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;K&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html#keys()">keys</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection, which may contain duplicates, of all keys.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;K&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html#keySet()">keySet</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the set of all keys, each appearing once in the returned set.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html#put(K, V)">put</A></B>(K&nbsp;key,
-    V&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a key-value pair in the multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html#putAll(K, java.lang.Iterable)">putAll</A></B>(K&nbsp;key,
-       <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends V&gt;&nbsp;values)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a collection of values with the same key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html#putAll(com.google.common.collect.Multimap)">putAll</A></B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies all of another multimap's key-value pairs into this multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html#remove(java.lang.Object, java.lang.Object)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
-       <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes a key-value pair from the multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;V&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html#removeAll(java.lang.Object)">removeAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes all values associated with a given key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="type parameter in LinkedHashMultimap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></B>(<A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="type parameter in LinkedHashMultimap">K</A>&nbsp;key,
-              <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="type parameter in LinkedHashMultimap">V</A>&gt;&nbsp;values)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a collection of values with the same key, replacing any existing
- values for that key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html#size()">size</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of key-value pairs in the multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html#toString()">toString</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a string representation of the multimap, generated by calling
- <code>toString</code> on the map returned by <A HREF="../../../../com/google/common/collect/Multimap.html#asMap()"><CODE>Multimap.asMap()</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="type parameter in LinkedHashMultimap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html#values()">values</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection of all values in the multimap.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.SetMultimap"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface com.google.common.collect.<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html#asMap()">asMap</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.Multimap"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface com.google.common.collect.<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#clear()">clear</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#containsEntry(java.lang.Object, java.lang.Object)">containsEntry</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#containsKey(java.lang.Object)">containsKey</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#containsValue(java.lang.Object)">containsValue</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#hashCode()">hashCode</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#keys()">keys</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#keySet()">keySet</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#putAll(K, java.lang.Iterable)">putAll</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#putAll(com.google.common.collect.Multimap)">putAll</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#remove(java.lang.Object, java.lang.Object)">remove</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#size()">size</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="create()"><!-- --></A><H3>
-create</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect">LinkedHashMultimap</A>&lt;K,V&gt; <B>create</B>()</PRE>
-<DL>
-<DD>Creates a new, empty <code>LinkedHashMultimap</code> with the default initial
- capacities.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="create(int, int)"><!-- --></A><H3>
-create</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect">LinkedHashMultimap</A>&lt;K,V&gt; <B>create</B>(int&nbsp;expectedKeys,
-                                                   int&nbsp;expectedValuesPerKey)</PRE>
-<DL>
-<DD>Constructs an empty <code>LinkedHashMultimap</code> with enough capacity to hold
- the specified numbers of keys and values without rehashing.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>expectedKeys</CODE> - the expected number of distinct keys<DD><CODE>expectedValuesPerKey</CODE> - the expected average number of values per key
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>expectedKeys</code> or <code>expectedValuesPerKey</code> is negative</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="create(com.google.common.collect.Multimap)"><!-- --></A><H3>
-create</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect">LinkedHashMultimap</A>&lt;K,V&gt; <B>create</B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</PRE>
-<DL>
-<DD>Constructs a <code>LinkedHashMultimap</code> with the same mappings as the
- specified multimap. If a key-value mapping appears multiple times in the
- input multimap, it only appears once in the constructed multimap. The new
- multimap has the same <A HREF="../../../../com/google/common/collect/Multimap.html#entries()"><CODE>Multimap.entries()</CODE></A> iteration order as the
- input multimap, except for excluding duplicate mappings.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>multimap</CODE> - the multimap whose contents are copied to this multimap</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="replaceValues(java.lang.Object,java.lang.Iterable)"><!-- --></A><A NAME="replaceValues(K, java.lang.Iterable)"><!-- --></A><H3>
-replaceValues</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="type parameter in LinkedHashMultimap">V</A>&gt; <B>replaceValues</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                            <A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="type parameter in LinkedHashMultimap">K</A>&nbsp;key,
-                            <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="type parameter in LinkedHashMultimap">V</A>&gt;&nbsp;values)</PRE>
-<DL>
-<DD>Stores a collection of values with the same key, replacing any existing
- values for that key.
-
- <p>The returned collection is immutable.
-
- <p>Any duplicates in <code>values</code> will be stored in the multimap once.
-
- <p>If <code>values</code> is not empty and the multimap already contains a
- mapping for <code>key</code>, the <code>keySet()</code> ordering is unchanged.
- However, the provided values always come last in the <A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html#entries()"><CODE>entries()</CODE></A> and
- <A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html#values()"><CODE>values()</CODE></A> iteration orderings.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="type parameter in LinkedHashMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="type parameter in LinkedHashMultimap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="type parameter in LinkedHashMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="type parameter in LinkedHashMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to store in the multimap<DD><CODE>values</CODE> - values to store in the multimap
-<DT><B>Returns:</B><DD>the collection of replaced values, or an empty collection if no
-     values were previously associated with the key. The collection
-     <i>may</i> be modifiable, but updating it will have no effect on the
-     multimap.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="entries()"><!-- --></A><H3>
-entries</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="type parameter in LinkedHashMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="type parameter in LinkedHashMultimap">V</A>&gt;&gt; <B>entries</B>()</PRE>
-<DL>
-<DD>Returns a set of all key-value pairs. Changes to the returned set will
- update the underlying multimap, and vice versa. The entries set does not
- support the <code>add</code> or <code>addAll</code> operations.
-
- <p>The iterator generated by the returned set traverses the entries in the
- order they were added to the multimap.
-
- <p>Each entry is an immutable snapshot of a key-value mapping in the
- multimap, taken at the time the entry is returned by a method call to the
- collection or its iterator.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#entries()">entries</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="type parameter in LinkedHashMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="type parameter in LinkedHashMultimap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html#entries()">entries</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="type parameter in LinkedHashMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="type parameter in LinkedHashMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>collection of map entries consisting of key-value pairs</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="values()"><!-- --></A><H3>
-values</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="type parameter in LinkedHashMultimap">V</A>&gt; <B>values</B>()</PRE>
-<DL>
-<DD>Returns a collection of all values in the multimap. Changes to the returned
- collection will update the underlying multimap, and vice versa.
-
- <p>The iterator generated by the returned collection traverses the values
- in the order they were added to the multimap.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#values()">values</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="type parameter in LinkedHashMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="type parameter in LinkedHashMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>collection of values, which may include the same value multiple
-     times if it occurs in multiple mappings</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="get(java.lang.Object)"><!-- --></A><A NAME="get(K)"><!-- --></A><H3>
-get</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;V&gt; <B>get</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                  K&nbsp;key)</PRE>
-<DL>
-<DD>Returns a collection view of all values associated with a key. If no
- mappings in the multimap have the provided key, an empty collection is
- returned.
-
- <p>Changes to the returned collection will update the underlying multimap,
- and vice versa.
-
- <p>The returned collection is not serializable.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#get(K)">get</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html#get(K)">get</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to search for in multimap
-<DT><B>Returns:</B><DD>the collection of values that the key maps to</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="removeAll(java.lang.Object)"><!-- --></A><H3>
-removeAll</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;V&gt; <B>removeAll</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                        <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
-<DL>
-<DD>Removes all values associated with a given key.
-
- <p>The returned collection is immutable.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#removeAll(java.lang.Object)">removeAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html#removeAll(java.lang.Object)">removeAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key of entries to remove from the multimap
-<DT><B>Returns:</B><DD>the collection of removed values, or an empty collection if no
-     values were associated with the provided key. The collection
-     <i>may</i> be modifiable, but updating it will have no effect on the
-     multimap.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="put(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="put(K, V)"><!-- --></A><H3>
-put</H3>
-<PRE>
-public boolean <B>put</B>(K&nbsp;key,
-                   V&nbsp;value)</PRE>
-<DL>
-<DD>Stores a key-value pair in the multimap.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#put(K, V)">put</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to store in the multimap<DD><CODE>value</CODE> - value to store in the multimap
-<DT><B>Returns:</B><DD><code>true</code> if the method increased the size of the multimap, or
-     <code>false</code> if the multimap already contained the key-value pair</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
-equals</H3>
-<PRE>
-public boolean <B>equals</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                      <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
-<DL>
-<DD>Compares the specified object to this multimap for equality.
-
- <p>Two <code>SetMultimap</code> instances are equal if, for each key, they
- contain the same values. Equality does not depend on the ordering of keys
- or values.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#equals(java.lang.Object)">equals</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html#equals(java.lang.Object)">equals</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="size()"><!-- --></A><H3>
-size</H3>
-<PRE>
-public int <B>size</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#size()">Multimap</A></CODE></B></DD>
-<DD>Returns the number of key-value pairs in the multimap.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#size()">size</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="isEmpty()"><!-- --></A><H3>
-isEmpty</H3>
-<PRE>
-public boolean <B>isEmpty</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#isEmpty()">Multimap</A></CODE></B></DD>
-<DD>Returns <code>true</code> if the multimap contains no key-value pairs.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#isEmpty()">isEmpty</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="containsKey(java.lang.Object)"><!-- --></A><H3>
-containsKey</H3>
-<PRE>
-public boolean <B>containsKey</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                           <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsKey(java.lang.Object)">Multimap</A></CODE></B></DD>
-<DD>Returns <code>true</code> if the multimap contains any values for the specified
- key.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsKey(java.lang.Object)">containsKey</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to search for in multimap</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="containsValue(java.lang.Object)"><!-- --></A><H3>
-containsValue</H3>
-<PRE>
-public boolean <B>containsValue</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                             <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsValue(java.lang.Object)">Multimap</A></CODE></B></DD>
-<DD>Returns <code>true</code> if the multimap contains the specified value for any
- key.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsValue(java.lang.Object)">containsValue</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>value</CODE> - value to search for in multimap</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="containsEntry(java.lang.Object, java.lang.Object)"><!-- --></A><H3>
-containsEntry</H3>
-<PRE>
-public boolean <B>containsEntry</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                             <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
-                             <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                             <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsEntry(java.lang.Object, java.lang.Object)">Multimap</A></CODE></B></DD>
-<DD>Returns <code>true</code> if the multimap contains the specified key-value pair.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsEntry(java.lang.Object, java.lang.Object)">containsEntry</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to search for in multimap<DD><CODE>value</CODE> - value to search for in multimap</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="remove(java.lang.Object, java.lang.Object)"><!-- --></A><H3>
-remove</H3>
-<PRE>
-public boolean <B>remove</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                      <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
-                      <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                      <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#remove(java.lang.Object, java.lang.Object)">Multimap</A></CODE></B></DD>
-<DD>Removes a key-value pair from the multimap.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#remove(java.lang.Object, java.lang.Object)">remove</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key of entry to remove from the multimap<DD><CODE>value</CODE> - value of entry to remove the multimap
-<DT><B>Returns:</B><DD><code>true</code> if the multimap changed</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="putAll(java.lang.Object,java.lang.Iterable)"><!-- --></A><A NAME="putAll(K, java.lang.Iterable)"><!-- --></A><H3>
-putAll</H3>
-<PRE>
-public boolean <B>putAll</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                      K&nbsp;key,
-                      <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends V&gt;&nbsp;values)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#putAll(K, java.lang.Iterable)">Multimap</A></CODE></B></DD>
-<DD>Stores a collection of values with the same key.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#putAll(K, java.lang.Iterable)">putAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to store in the multimap<DD><CODE>values</CODE> - values to store in the multimap
-<DT><B>Returns:</B><DD><code>true</code> if the multimap changed</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="putAll(com.google.common.collect.Multimap)"><!-- --></A><H3>
-putAll</H3>
-<PRE>
-public boolean <B>putAll</B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#putAll(com.google.common.collect.Multimap)">Multimap</A></CODE></B></DD>
-<DD>Copies all of another multimap's key-value pairs into this multimap. The
- order in which the mappings are added is determined by
- <code>multimap.entries()</code>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#putAll(com.google.common.collect.Multimap)">putAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>multimap</CODE> - mappings to store in this multimap
-<DT><B>Returns:</B><DD><code>true</code> if the multimap changed</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="clear()"><!-- --></A><H3>
-clear</H3>
-<PRE>
-public void <B>clear</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#clear()">Multimap</A></CODE></B></DD>
-<DD>Removes all key-value pairs from the multimap.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#clear()">clear</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="keySet()"><!-- --></A><H3>
-keySet</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;K&gt; <B>keySet</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#keySet()">Multimap</A></CODE></B></DD>
-<DD>Returns the set of all keys, each appearing once in the returned set.
- Changes to the returned set will update the underlying multimap, and vice
- versa.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#keySet()">keySet</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>the collection of distinct keys</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="keys()"><!-- --></A><H3>
-keys</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;K&gt; <B>keys</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#keys()">Multimap</A></CODE></B></DD>
-<DD>Returns a collection, which may contain duplicates, of all keys. The number
- of times of key appears in the returned multiset equals the number of
- mappings the key has in the multimap. Changes to the returned multiset will
- update the underlying multimap, and vice versa.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#keys()">keys</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a multiset with keys corresponding to the distinct keys of the
-     multimap and frequencies corresponding to the number of values that
-     each key maps to</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="asMap()"><!-- --></A><H3>
-asMap</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt; <B>asMap</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#asMap()">Multimap</A></CODE></B></DD>
-<DD>Returns a map view that associates each key with the corresponding values
- in the multimap. Changes to the returned map, such as element removal,
- will update the underlying multimap. The map does not support
- <code>setValue()</code> on its entries, <code>put</code>, or <code>putAll</code>.
-
- <p>The collections returned by <code>asMap().get(Object)</code> have the same
- behavior as those returned by <A HREF="../../../../com/google/common/collect/Multimap.html#get(K)"><CODE>Multimap.get(K)</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#asMap()">asMap</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a map view from a key to its collection of values</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="hashCode()"><!-- --></A><H3>
-hashCode</H3>
-<PRE>
-public int <B>hashCode</B>()</PRE>
-<DL>
-<DD>Returns the hash code for this multimap.
-
- <p>The hash code of a multimap is defined as the hash code of the map view,
- as returned by <A HREF="../../../../com/google/common/collect/Multimap.html#asMap()"><CODE>Multimap.asMap()</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#hashCode()">hashCode</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#hashCode()" title="class or interface in java.util"><CODE>Map.hashCode()</CODE></A></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toString()"><!-- --></A><H3>
-toString</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
-<DL>
-<DD>Returns a string representation of the multimap, generated by calling
- <code>toString</code> on the map returned by <A HREF="../../../../com/google/common/collect/Multimap.html#asMap()"><CODE>Multimap.asMap()</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a string representation of the multimap</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/LinkedHashMultimap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/Iterators.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/LinkedHashMultimap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="LinkedHashMultimap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/LinkedHashMultiset.html b/javadoc/com/google/common/collect/LinkedHashMultiset.html
deleted file mode 100644
index 28875f0..0000000
--- a/javadoc/com/google/common/collect/LinkedHashMultiset.html
+++ /dev/null
@@ -1,1010 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:59 PST 2010 -->
-<TITLE>
-LinkedHashMultiset (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="LinkedHashMultiset (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/LinkedHashMultiset.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/LinkedHashMultiset.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="LinkedHashMultiset.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class LinkedHashMultiset&lt;E&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">java.util.AbstractCollection</A>&lt;E&gt;
-      <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.LinkedHashMultiset&lt;E&gt;</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public final class <B>LinkedHashMultiset&lt;E&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</DL>
-</PRE>
-
-<P>
-A <code>Multiset</code> implementation with predictable iteration order. Its
- iterator orders elements according to when the first occurrence of the
- element was added. When the multiset contains multiple instances of an
- element, those instances are consecutive in the iteration order. If all
- occurrences of an element are removed, after which that element is added to
- the multiset, the element will appear at the end of the iteration.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Kevin Bourrillion, Jared Levy</DD>
-<DT><B>See Also:</B><DD><A HREF="../../../../serialized-form.html#com.google.common.collect.LinkedHashMultiset">Serialized Form</A></DL>
-<HR>
-
-<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-<A NAME="nested_class_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Nested Class Summary</B></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;<A NAME="nested_classes_inherited_from_class_com.google.common.collect.Multiset"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Nested classes/interfaces inherited from interface com.google.common.collect.<A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="type parameter in Multiset.Entry">E</A>&gt;</CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html#add(E)">add</A></B>(E&nbsp;element)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds a single occurrence of the specified element to this multiset.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html#add(E, int)">add</A></B>(E&nbsp;element,
-    int&nbsp;occurrences)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds a number of occurrences of an element to this multiset.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html#addAll(java.util.Collection)">addAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;? extends E&gt;&nbsp;elementsToAdd)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html#clear()">clear</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html#contains(java.lang.Object)">contains</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Determines whether this multiset contains the specified element.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html#containsAll(java.util.Collection)">containsAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if this multiset contains at least one occurrence of
- each element in the specified collection.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html#count(java.lang.Object)">count</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of occurrences of an element in this multiset (the
- <i>count</i> of the element).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect">LinkedHashMultiset</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html#create()">create</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new, empty <code>LinkedHashMultiset</code> using the default initial
- capacity.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect">LinkedHashMultiset</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html#create(int)">create</A></B>(int&nbsp;distinctElements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new, empty <code>LinkedHashMultiset</code> with the specified expected
- number of distinct elements.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect">LinkedHashMultiset</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html#create(java.lang.Iterable)">create</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>LinkedHashMultiset</code> containing the specified elements.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html#elementSet()">elementSet</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the set of distinct elements contained in this multiset.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;E&gt;&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html#entrySet()">entrySet</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of the contents of this multiset, grouped into <code>Multiset.Entry</code> instances, each providing an element of the multiset and
- the count of that element.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares the specified object with this multiset for equality.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html#hashCode()">hashCode</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the hash code for this multiset.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html#isEmpty()">isEmpty</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;E&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html#iterator()">iterator</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html#remove(java.lang.Object)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes a <i>single</i> occurrence of the specified element from this
- multiset, if present.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html#remove(java.lang.Object, int)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element,
-       int&nbsp;occurrences)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes a number of occurrences of the specified element from this
- multiset.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html#removeAll(java.util.Collection)">removeAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToRemove)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html#retainAll(java.util.Collection)">retainAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToRetain)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html#setCount(E, int)">setCount</A></B>(E&nbsp;element,
-         int&nbsp;count)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds or removes the necessary occurrences of an element such that the
- element attains the desired count.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html#setCount(E, int, int)">setCount</A></B>(E&nbsp;element,
-         int&nbsp;oldCount,
-         int&nbsp;newCount)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Conditionally sets the count of an element to a new value, as described in
- <A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int)"><CODE>Multiset.setCount(Object, int)</CODE></A>, provided that the element has the expected
- current count.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html#size()">size</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html#toString()">toString</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.util.AbstractCollection"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#toArray()" title="class or interface in java.util">toArray</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#toArray(T[])" title="class or interface in java.util">toArray</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.util.Collection"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#toArray()" title="class or interface in java.util">toArray</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#toArray(T[])" title="class or interface in java.util">toArray</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="create()"><!-- --></A><H3>
-create</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect">LinkedHashMultiset</A>&lt;E&gt; <B>create</B>()</PRE>
-<DL>
-<DD>Creates a new, empty <code>LinkedHashMultiset</code> using the default initial
- capacity.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="create(int)"><!-- --></A><H3>
-create</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect">LinkedHashMultiset</A>&lt;E&gt; <B>create</B>(int&nbsp;distinctElements)</PRE>
-<DL>
-<DD>Creates a new, empty <code>LinkedHashMultiset</code> with the specified expected
- number of distinct elements.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>distinctElements</CODE> - the expected number of distinct elements
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>distinctElements</code> is negative</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="create(java.lang.Iterable)"><!-- --></A><H3>
-create</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect">LinkedHashMultiset</A>&lt;E&gt; <B>create</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</PRE>
-<DL>
-<DD>Creates a new <code>LinkedHashMultiset</code> containing the specified elements.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>elements</CODE> - the elements that the multiset should contain</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="entrySet()"><!-- --></A><H3>
-entrySet</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;E&gt;&gt; <B>entrySet</B>()</PRE>
-<DL>
-<DD>Returns a view of the contents of this multiset, grouped into <code>Multiset.Entry</code> instances, each providing an element of the multiset and
- the count of that element. This set contains exactly one entry for each
- distinct element in the multiset (thus it always has the same size as the
- <A HREF="../../../../com/google/common/collect/Multiset.html#elementSet()"><CODE>Multiset.elementSet()</CODE></A>). The order of the elements in the element set is
- unspecified.
-
- <p>The entry set is backed by the same data as the multiset, so any change
- to either is immediately reflected in the other. However, multiset changes
- may or may not be reflected in any <code>Entry</code> instances already
- retrieved from the entry set (this is implementation-dependent).
- Furthermore, implementations are not required to support modifications to
- the entry set at all, and the <code>Entry</code> instances themselves don't
- even have methods for modification. See the specific implementation class
- for more details on how its entry set handles modifications.
-
- <p>Invoking <A HREF="../../../../com/google/common/collect/Multiset.Entry.html#getCount()"><CODE>Multiset.Entry.getCount()</CODE></A> on an entry in the returned
- set always returns the current count of that element in the multiset, as
- opposed to the count at the time the entry was retrieved.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#entrySet()">entrySet</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a set of entries representing the data of this multiset</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="size()"><!-- --></A><H3>
-size</H3>
-<PRE>
-public int <B>size</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#size()" title="class or interface in java.util">size</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="iterator()"><!-- --></A><H3>
-iterator</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;E&gt; <B>iterator</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#iterator()">Multiset</A></CODE></B></DD>
-<DD>
-
- <p>Elements that occur multiple times in the multiset will appear
- multiple times in this iterator, though not necessarily sequentially.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#iterator()">iterator</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true#iterator()" title="class or interface in java.lang">iterator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#iterator()" title="class or interface in java.util">iterator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="count(java.lang.Object)"><!-- --></A><H3>
-count</H3>
-<PRE>
-public int <B>count</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                 <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#count(java.lang.Object)">Multiset</A></CODE></B></DD>
-<DD>Returns the number of occurrences of an element in this multiset (the
- <i>count</i> of the element). Note that for an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>-based
- multiset, this gives the same result as <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#frequency(java.util.Collection, java.lang.Object)" title="class or interface in java.util"><CODE>Collections.frequency(java.util.Collection<?>, java.lang.Object)</CODE></A>
- (which would presumably perform more poorly).
-
- <p><b>Note:</b> the utility method <A HREF="../../../../com/google/common/collect/Iterables.html#frequency(java.lang.Iterable, java.lang.Object)"><CODE>Iterables.frequency(java.lang.Iterable<?>, java.lang.Object)</CODE></A> generalizes
- this operation; it correctly delegates to this method when dealing with a
- multiset, but it can also accept any other iterable type.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#count(java.lang.Object)">count</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to count occurrences of
-<DT><B>Returns:</B><DD>the number of occurrences of the element in this multiset; possibly
-     zero but never negative</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="add(java.lang.Object,int)"><!-- --></A><A NAME="add(E, int)"><!-- --></A><H3>
-add</H3>
-<PRE>
-public int <B>add</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-               E&nbsp;element,
-               int&nbsp;occurrences)</PRE>
-<DL>
-<DD>Adds a number of occurrences of an element to this multiset. Note that if
- <code>occurrences == 1</code>, this method has the identical effect to <A HREF="../../../../com/google/common/collect/Multiset.html#add(E)"><CODE>Multiset.add(Object)</CODE></A>. This method is functionally equivalent (except in the case
- of overflow) to the call <code>addAll(Collections.nCopies(element,
- occurrences))</code>, which would presumably perform much more poorly.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#add(E, int)">add</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to add occurrences of; may be <code>null</code> only
-     if explicitly allowed by the implementation<DD><CODE>occurrences</CODE> - the number of occurrences of the element to add. May be
-     zero, in which case no change will be made.
-<DT><B>Returns:</B><DD>the count of the element before the operation; possibly zero
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if the call would result in more than
-     <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true#MAX_VALUE" title="class or interface in java.lang"><CODE>Integer.MAX_VALUE</CODE></A> occurrences of <code>element</code> in this
-     multiset.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="remove(java.lang.Object, int)"><!-- --></A><H3>
-remove</H3>
-<PRE>
-public int <B>remove</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                  <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element,
-                  int&nbsp;occurrences)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#remove(java.lang.Object, int)">Multiset</A></CODE></B></DD>
-<DD>Removes a number of occurrences of the specified element from this
- multiset. If the multiset contains fewer than this number of occurrences to
- begin with, all occurrences will be removed.  Note that if
- <code>occurrences == 1</code>, this is functionally equivalent to the call
- <code>remove(element)</code>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#remove(java.lang.Object, int)">remove</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to conditionally remove occurrences of<DD><CODE>occurrences</CODE> - the number of occurrences of the element to remove. May
-     be zero, in which case no change will be made.
-<DT><B>Returns:</B><DD>the count of the element before the operation; possibly zero</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="setCount(java.lang.Object,int)"><!-- --></A><A NAME="setCount(E, int)"><!-- --></A><H3>
-setCount</H3>
-<PRE>
-public int <B>setCount</B>(E&nbsp;element,
-                    int&nbsp;count)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int)">Multiset</A></CODE></B></DD>
-<DD>Adds or removes the necessary occurrences of an element such that the
- element attains the desired count.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int)">setCount</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to add or remove occurrences of; may be null
-     only if explicitly allowed by the implementation<DD><CODE>count</CODE> - the desired count of the element in this multiset
-<DT><B>Returns:</B><DD>the count of the element before the operation; possibly zero</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="isEmpty()"><!-- --></A><H3>
-isEmpty</H3>
-<PRE>
-public boolean <B>isEmpty</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="contains(java.lang.Object)"><!-- --></A><H3>
-contains</H3>
-<PRE>
-public boolean <B>contains</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                        <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#contains(java.lang.Object)">Multiset</A></CODE></B></DD>
-<DD>Determines whether this multiset contains the specified element.
-
- <p>This method refines <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util"><CODE>Collection.contains(java.lang.Object)</CODE></A> to further specify that
- it <b>may not</b> throw an exception in response to <code>element</code> being
- null or of the wrong type.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#contains(java.lang.Object)">contains</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util">contains</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util">contains</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to check for
-<DT><B>Returns:</B><DD><code>true</code> if this multiset contains at least one occurrence of
-     the element</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="add(java.lang.Object)"><!-- --></A><A NAME="add(E)"><!-- --></A><H3>
-add</H3>
-<PRE>
-public boolean <B>add</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                   E&nbsp;element)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#add(E)">Multiset</A></CODE></B></DD>
-<DD>Adds a single occurrence of the specified element to this multiset.
-
- <p>This method refines <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#add(E)" title="class or interface in java.util"><CODE>Collection.add(E)</CODE></A>, which only <i>ensures</i>
- the presence of the element, to further specify that a successful call must
- always increment the count of the element, and the overall size of the
- collection, by one.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#add(E)">add</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#add(E)" title="class or interface in java.util">add</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#add(E)" title="class or interface in java.util">add</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to add one occurrence of; may be null only if
-     explicitly allowed by the implementation
-<DT><B>Returns:</B><DD><code>true</code> always, since this call is required to modify the
-     multiset, unlike other <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A> types</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="remove(java.lang.Object)"><!-- --></A><H3>
-remove</H3>
-<PRE>
-public boolean <B>remove</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#remove(java.lang.Object)">Multiset</A></CODE></B></DD>
-<DD>Removes a <i>single</i> occurrence of the specified element from this
- multiset, if present.
-
- <p>This method refines <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util"><CODE>Collection.remove(java.lang.Object)</CODE></A> to further specify that it
- <b>may not</b> throw an exception in response to <code>element</code> being null
- or of the wrong type.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#remove(java.lang.Object)">remove</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to remove one occurrence of
-<DT><B>Returns:</B><DD><code>true</code> if an occurrence was found and removed</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="setCount(java.lang.Object,int,int)"><!-- --></A><A NAME="setCount(E, int, int)"><!-- --></A><H3>
-setCount</H3>
-<PRE>
-public boolean <B>setCount</B>(E&nbsp;element,
-                        int&nbsp;oldCount,
-                        int&nbsp;newCount)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int, int)">Multiset</A></CODE></B></DD>
-<DD>Conditionally sets the count of an element to a new value, as described in
- <A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int)"><CODE>Multiset.setCount(Object, int)</CODE></A>, provided that the element has the expected
- current count. If the current count is not <code>oldCount</code>, no change is
- made.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int, int)">setCount</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to conditionally set the count of; may be null
-     only if explicitly allowed by the implementation<DD><CODE>oldCount</CODE> - the expected present count of the element in this multiset<DD><CODE>newCount</CODE> - the desired count of the element in this multiset
-<DT><B>Returns:</B><DD><code>true</code> if the condition for modification was met. This
-     implies that the multiset was indeed modified, unless
-     <code>oldCount == newCount</code>.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="containsAll(java.util.Collection)"><!-- --></A><H3>
-containsAll</H3>
-<PRE>
-public boolean <B>containsAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elements)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#containsAll(java.util.Collection)">Multiset</A></CODE></B></DD>
-<DD>Returns <code>true</code> if this multiset contains at least one occurrence of
- each element in the specified collection.
-
- <p>This method refines <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util"><CODE>Collection.containsAll(java.util.Collection<?>)</CODE></A> to further specify
- that it <b>may not</b> throw an exception in response to any of <code>elements</code> being null or of the wrong type.
-
- <p><b>Note:</b> this method does not take into account the occurrence
- count of an element in the two collections; it may still return <code>true</code> even if <code>elements</code> contains several occurrences of an element
- and this multiset contains only one. This is no different than any other
- collection type like <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util"><CODE>List</CODE></A>, but it may be unexpected to the user of
- a multiset.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#containsAll(java.util.Collection)">containsAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util">containsAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util">containsAll</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>elements</CODE> - the collection of elements to be checked for containment in
-     this multiset
-<DT><B>Returns:</B><DD><code>true</code> if this multiset contains at least one occurrence of
-     each element contained in <code>elements</code></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="addAll(java.util.Collection)"><!-- --></A><H3>
-addAll</H3>
-<PRE>
-public boolean <B>addAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;? extends E&gt;&nbsp;elementsToAdd)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#addAll(java.util.Collection)" title="class or interface in java.util">addAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#addAll(java.util.Collection)" title="class or interface in java.util">addAll</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="removeAll(java.util.Collection)"><!-- --></A><H3>
-removeAll</H3>
-<PRE>
-public boolean <B>removeAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToRemove)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#removeAll(java.util.Collection)">Multiset</A></CODE></B></DD>
-<DD>
-
- <p>This method refines <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#removeAll(java.util.Collection)" title="class or interface in java.util"><CODE>Collection.removeAll(java.util.Collection<?>)</CODE></A> to further specify that
- it <b>may not</b> throw an exception in response to any of <code>elements</code>
- being null or of the wrong type.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#removeAll(java.util.Collection)">removeAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#removeAll(java.util.Collection)" title="class or interface in java.util">removeAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#removeAll(java.util.Collection)" title="class or interface in java.util">removeAll</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="retainAll(java.util.Collection)"><!-- --></A><H3>
-retainAll</H3>
-<PRE>
-public boolean <B>retainAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToRetain)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#retainAll(java.util.Collection)">Multiset</A></CODE></B></DD>
-<DD>
-
- <p>This method refines <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util"><CODE>Collection.retainAll(java.util.Collection<?>)</CODE></A> to further specify that
- it <b>may not</b> throw an exception in response to any of <code>elements</code>
- being null or of the wrong type.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#retainAll(java.util.Collection)">retainAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util">retainAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util">retainAll</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="clear()"><!-- --></A><H3>
-clear</H3>
-<PRE>
-public void <B>clear</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#clear()" title="class or interface in java.util">clear</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#clear()" title="class or interface in java.util">clear</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="elementSet()"><!-- --></A><H3>
-elementSet</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt; <B>elementSet</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#elementSet()">Multiset</A></CODE></B></DD>
-<DD>Returns the set of distinct elements contained in this multiset. The
- element set is backed by the same data as the multiset, so any change to
- either is immediately reflected in the other. The order of the elements in
- the element set is unspecified.
-
- <p>If the element set supports any removal operations, these necessarily
- cause <b>all</b> occurrences of the removed element(s) to be removed from
- the multiset. Implementations are not expected to support the add
- operations, although this is possible.
-
- <p>A common use for the element set is to find the number of distinct
- elements in the multiset: <code>elementSet().size()</code>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#elementSet()">elementSet</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a view of the set of distinct elements in this multiset</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
-equals</H3>
-<PRE>
-public boolean <B>equals</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                      <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
-<DL>
-<DD>Compares the specified object with this multiset for equality. Returns
- <code>true</code> if the given object is also a multiset and contains equal
- elements with equal counts, regardless of order.
-
- <p>This implementation returns <code>true</code> if <code>other</code> is a multiset
- of the same size and if, for each element, the two multisets have the same
- count.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#equals(java.lang.Object)">equals</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="hashCode()"><!-- --></A><H3>
-hashCode</H3>
-<PRE>
-public int <B>hashCode</B>()</PRE>
-<DL>
-<DD>Returns the hash code for this multiset. This is defined as the sum of
-
- <pre>  (element == null ? 0 : element.hashCode()) ^ count(element)</pre>
-
- over all distinct elements in the multiset. It follows that a multiset and
- its entry set always have the same hash code.
-
- <p>This implementation returns the hash code of <A HREF="../../../../com/google/common/collect/Multiset.html#entrySet()"><CODE>Multiset.entrySet()</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#hashCode()">hashCode</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toString()"><!-- --></A><H3>
-toString</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
-<DL>
-<DD>
-
- <p>It is recommended, though not mandatory, that this method return the
- result of invoking <A HREF="../../../../com/google/common/collect/Multiset.html#toString()"><CODE>Multiset.toString()</CODE></A> on the <A HREF="../../../../com/google/common/collect/Multiset.html#entrySet()"><CODE>Multiset.entrySet()</CODE></A>, yielding a
- result such as
- <pre>
-     [a x 3, c, d x 2, e]
- </pre>
-
- <p>This implementation returns the result of invoking <code>toString</code> on
- <A HREF="../../../../com/google/common/collect/Multiset.html#entrySet()"><CODE>Multiset.entrySet()</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#toString()">toString</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#toString()" title="class or interface in java.util">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/LinkedHashMultiset.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/LinkedHashMultiset.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="LinkedHashMultiset.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/LinkedListMultimap.html b/javadoc/com/google/common/collect/LinkedListMultimap.html
deleted file mode 100644
index dd468a6..0000000
--- a/javadoc/com/google/common/collect/LinkedListMultimap.html
+++ /dev/null
@@ -1,995 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:59 PST 2010 -->
-<TITLE>
-LinkedListMultimap (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="LinkedListMultimap (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/LinkedListMultimap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/LinkedListMultimap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="LinkedListMultimap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class LinkedListMultimap&lt;K,V&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.LinkedListMultimap&lt;K,V&gt;</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;, <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public final class <B>LinkedListMultimap&lt;K,V&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A><DT>implements <A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A></DL>
-</PRE>
-
-<P>
-An implementation of <code>ListMultimap</code> that supports deterministic
- iteration order for both keys and values. The iteration order is preserved
- across non-distinct key values. For example, for the following multimap
- definition: <pre>   <code>Multimap&lt;K, V&gt; multimap = LinkedListMultimap.create();
-   multimap.put(key1, foo);
-   multimap.put(key2, bar);
-   multimap.put(key1, baz);</code></pre>
-
- ... the iteration order for <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#keys()"><CODE>keys()</CODE></A> is <code>[key1, key2, key1]</code>,
- and similarly for <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#entries()"><CODE>entries()</CODE></A>. Unlike <A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect"><CODE>LinkedHashMultimap</CODE></A>, the
- iteration order is kept consistent between keys, entries and values. For
- example, calling: <pre>   <code>map.remove(key1, foo);</code></pre>
-
- changes the entries iteration order to <code>[key2=bar, key1=baz]</code> and the
- key iteration order to <code>[key2, key1]</code>. The <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#entries()"><CODE>entries()</CODE></A> iterator
- returns mutable map entries, and <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#replaceValues(K, java.lang.Iterable)"><CODE>replaceValues(K, java.lang.Iterable<? extends V>)</CODE></A> attempts to preserve
- iteration order as much as possible.
-
- <p>The collections returned by <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#keySet"><CODE>keySet</CODE></A> and <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#asMap()"><CODE>asMap()</CODE></A> iterate
- through the keys in the order they were first added to the multimap.
- Similarly, <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#get(K)"><CODE>get(K)</CODE></A>, <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#removeAll(java.lang.Object)"><CODE>removeAll(java.lang.Object)</CODE></A>, and <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#replaceValues(K, java.lang.Iterable)"><CODE>replaceValues(K, java.lang.Iterable<? extends V>)</CODE></A>
- return collections that iterate through the values in the order they were
- added. The collections generated by <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#entries"><CODE>entries</CODE></A>, <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#keys"><CODE>keys</CODE></A>, and
- <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#values()"><CODE>values()</CODE></A> iterate across the key-value mappings in the order they were
- added to the multimap.
-
- <p>Keys and values may be null. All optional multimap methods are supported,
- and all returned views are modifiable.
-
- <p>The methods <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#get(K)"><CODE>get(K)</CODE></A>, <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#keySet"><CODE>keySet</CODE></A>, <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#keys"><CODE>keys</CODE></A>, <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#values()"><CODE>values()</CODE></A>,
- <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#entries"><CODE>entries</CODE></A>, and <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#asMap()"><CODE>asMap()</CODE></A> return collections that are views of the
- multimap. If the multimap is modified while an iteration over any of those
- collections is in progress, except through the iterator's own <code>remove</code>
- operation, the results of the iteration are undefined.
-
- <p>This class is not threadsafe when any concurrent operations update the
- multimap. Concurrent read operations will work correctly. To allow concurrent
- update operations, wrap your multimap with a call to <A HREF="../../../../com/google/common/collect/Multimaps.html#synchronizedListMultimap(com.google.common.collect.ListMultimap)"><CODE>Multimaps.synchronizedListMultimap(com.google.common.collect.ListMultimap<K, V>)</CODE></A>.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Mike Bostock</DD>
-<DT><B>See Also:</B><DD><A HREF="../../../../serialized-form.html#com.google.common.collect.LinkedListMultimap">Serialized Form</A></DL>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#asMap()">asMap</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a map view that associates each key with the corresponding values
- in the multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#clear()">clear</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes all key-value pairs from the multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#containsEntry(java.lang.Object, java.lang.Object)">containsEntry</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
-              <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains the specified key-value pair.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#containsKey(java.lang.Object)">containsKey</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains any values for the specified
- key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#containsValue(java.lang.Object)">containsValue</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains the specified value for any
- key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#create()">create</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new, empty <code>LinkedListMultimap</code> with the default initial
- capacity.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#create(int)">create</A></B>(int&nbsp;expectedKeys)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs an empty <code>LinkedListMultimap</code> with enough capacity to hold
- the specified number of keys without rehashing.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#create(com.google.common.collect.Multimap)">create</A></B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a <code>LinkedListMultimap</code> with the same mappings as the
- specified <code>Multimap</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#entries()">entries</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection of all key-value pairs.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;other)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares the specified object to this multimap for equality.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#get(K)">get</A></B>(<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>&nbsp;key)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection view of all values associated with a key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#hashCode()">hashCode</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the hash code for this multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#isEmpty()">isEmpty</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains no key-value pairs.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#keys()">keys</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection, which may contain duplicates, of all keys.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#keySet()">keySet</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the set of all keys, each appearing once in the returned set.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#put(K, V)">put</A></B>(<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>&nbsp;key,
-    <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a key-value pair in the multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#putAll(K, java.lang.Iterable)">putAll</A></B>(<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>&nbsp;key,
-       <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;&nbsp;values)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a collection of values with the same key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#putAll(com.google.common.collect.Multimap)">putAll</A></B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,? extends <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;&nbsp;multimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies all of another multimap's key-value pairs into this multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#remove(java.lang.Object, java.lang.Object)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
-       <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes a key-value pair from the multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#removeAll(java.lang.Object)">removeAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes all values associated with a given key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></B>(<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>&nbsp;key,
-              <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;&nbsp;values)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a collection of values with the same key, replacing any existing
- values for that key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#size()">size</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of key-value pairs in the multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#toString()">toString</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a string representation of the multimap, generated by calling
- <code>toString</code> on the map returned by <A HREF="../../../../com/google/common/collect/Multimap.html#asMap()"><CODE>Multimap.asMap()</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#values()">values</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection of all values in the multimap.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="create()"><!-- --></A><H3>
-create</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>&lt;K,V&gt; <B>create</B>()</PRE>
-<DL>
-<DD>Creates a new, empty <code>LinkedListMultimap</code> with the default initial
- capacity.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="create(int)"><!-- --></A><H3>
-create</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>&lt;K,V&gt; <B>create</B>(int&nbsp;expectedKeys)</PRE>
-<DL>
-<DD>Constructs an empty <code>LinkedListMultimap</code> with enough capacity to hold
- the specified number of keys without rehashing.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>expectedKeys</CODE> - the expected number of distinct keys
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>expectedKeys</code> is negative</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="create(com.google.common.collect.Multimap)"><!-- --></A><H3>
-create</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>&lt;K,V&gt; <B>create</B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</PRE>
-<DL>
-<DD>Constructs a <code>LinkedListMultimap</code> with the same mappings as the
- specified <code>Multimap</code>. The new multimap has the same
- <A HREF="../../../../com/google/common/collect/Multimap.html#entries()"><CODE>Multimap.entries()</CODE></A> iteration order as the input multimap.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>multimap</CODE> - the multimap whose contents are copied to this multimap</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="size()"><!-- --></A><H3>
-size</H3>
-<PRE>
-public int <B>size</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#size()">Multimap</A></CODE></B></DD>
-<DD>Returns the number of key-value pairs in the multimap.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#size()">size</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="isEmpty()"><!-- --></A><H3>
-isEmpty</H3>
-<PRE>
-public boolean <B>isEmpty</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#isEmpty()">Multimap</A></CODE></B></DD>
-<DD>Returns <code>true</code> if the multimap contains no key-value pairs.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#isEmpty()">isEmpty</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="containsKey(java.lang.Object)"><!-- --></A><H3>
-containsKey</H3>
-<PRE>
-public boolean <B>containsKey</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                           <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsKey(java.lang.Object)">Multimap</A></CODE></B></DD>
-<DD>Returns <code>true</code> if the multimap contains any values for the specified
- key.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsKey(java.lang.Object)">containsKey</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to search for in multimap</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="containsValue(java.lang.Object)"><!-- --></A><H3>
-containsValue</H3>
-<PRE>
-public boolean <B>containsValue</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                             <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsValue(java.lang.Object)">Multimap</A></CODE></B></DD>
-<DD>Returns <code>true</code> if the multimap contains the specified value for any
- key.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsValue(java.lang.Object)">containsValue</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>value</CODE> - value to search for in multimap</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="containsEntry(java.lang.Object, java.lang.Object)"><!-- --></A><H3>
-containsEntry</H3>
-<PRE>
-public boolean <B>containsEntry</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                             <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
-                             <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                             <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsEntry(java.lang.Object, java.lang.Object)">Multimap</A></CODE></B></DD>
-<DD>Returns <code>true</code> if the multimap contains the specified key-value pair.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsEntry(java.lang.Object, java.lang.Object)">containsEntry</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to search for in multimap<DD><CODE>value</CODE> - value to search for in multimap</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="put(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="put(K, V)"><!-- --></A><H3>
-put</H3>
-<PRE>
-public boolean <B>put</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                   <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>&nbsp;key,
-                   <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                   <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&nbsp;value)</PRE>
-<DL>
-<DD>Stores a key-value pair in the multimap.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#put(K, V)">put</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to store in the multimap<DD><CODE>value</CODE> - value to store in the multimap
-<DT><B>Returns:</B><DD><code>true</code> always</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="remove(java.lang.Object, java.lang.Object)"><!-- --></A><H3>
-remove</H3>
-<PRE>
-public boolean <B>remove</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                      <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
-                      <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                      <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#remove(java.lang.Object, java.lang.Object)">Multimap</A></CODE></B></DD>
-<DD>Removes a key-value pair from the multimap.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#remove(java.lang.Object, java.lang.Object)">remove</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key of entry to remove from the multimap<DD><CODE>value</CODE> - value of entry to remove the multimap
-<DT><B>Returns:</B><DD><code>true</code> if the multimap changed</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="putAll(java.lang.Object,java.lang.Iterable)"><!-- --></A><A NAME="putAll(K, java.lang.Iterable)"><!-- --></A><H3>
-putAll</H3>
-<PRE>
-public boolean <B>putAll</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                      <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>&nbsp;key,
-                      <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;&nbsp;values)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#putAll(K, java.lang.Iterable)">Multimap</A></CODE></B></DD>
-<DD>Stores a collection of values with the same key.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#putAll(K, java.lang.Iterable)">putAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to store in the multimap<DD><CODE>values</CODE> - values to store in the multimap
-<DT><B>Returns:</B><DD><code>true</code> if the multimap changed</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="putAll(com.google.common.collect.Multimap)"><!-- --></A><H3>
-putAll</H3>
-<PRE>
-public boolean <B>putAll</B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,? extends <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;&nbsp;multimap)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#putAll(com.google.common.collect.Multimap)">Multimap</A></CODE></B></DD>
-<DD>Copies all of another multimap's key-value pairs into this multimap. The
- order in which the mappings are added is determined by
- <code>multimap.entries()</code>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#putAll(com.google.common.collect.Multimap)">putAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>multimap</CODE> - mappings to store in this multimap
-<DT><B>Returns:</B><DD><code>true</code> if the multimap changed</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="replaceValues(java.lang.Object,java.lang.Iterable)"><!-- --></A><A NAME="replaceValues(K, java.lang.Iterable)"><!-- --></A><H3>
-replaceValues</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt; <B>replaceValues</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                             <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>&nbsp;key,
-                             <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;&nbsp;values)</PRE>
-<DL>
-<DD>Stores a collection of values with the same key, replacing any existing
- values for that key.
-
- <p>Because the values for a given key may have duplicates and follow the
- insertion ordering, this method returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util"><CODE>List</CODE></A>, instead of the
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A> specified in the <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A> interface.
-
- <p>If any entries for the specified <code>key</code> already exist in the
- multimap, their values are changed in-place without affecting the iteration
- order.
-
- <p>The returned list is immutable and implements
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/RandomAccess.html?is-external=true" title="class or interface in java.util"><CODE>RandomAccess</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ListMultimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to store in the multimap<DD><CODE>values</CODE> - values to store in the multimap
-<DT><B>Returns:</B><DD>the collection of replaced values, or an empty collection if no
-     values were previously associated with the key. The collection
-     <i>may</i> be modifiable, but updating it will have no effect on the
-     multimap.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="removeAll(java.lang.Object)"><!-- --></A><H3>
-removeAll</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt; <B>removeAll</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                         <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
-<DL>
-<DD>Removes all values associated with a given key.
-
- <p>Because the values for a given key may have duplicates and follow the
- insertion ordering, this method returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util"><CODE>List</CODE></A>, instead of the
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A> specified in the <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A> interface.
-
- <p>The returned list is immutable and implements
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/RandomAccess.html?is-external=true" title="class or interface in java.util"><CODE>RandomAccess</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ListMultimap.html#removeAll(java.lang.Object)">removeAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#removeAll(java.lang.Object)">removeAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key of entries to remove from the multimap
-<DT><B>Returns:</B><DD>the collection of removed values, or an empty collection if no
-     values were associated with the provided key. The collection
-     <i>may</i> be modifiable, but updating it will have no effect on the
-     multimap.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="clear()"><!-- --></A><H3>
-clear</H3>
-<PRE>
-public void <B>clear</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#clear()">Multimap</A></CODE></B></DD>
-<DD>Removes all key-value pairs from the multimap.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#clear()">clear</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="get(java.lang.Object)"><!-- --></A><A NAME="get(K)"><!-- --></A><H3>
-get</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt; <B>get</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                   <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>&nbsp;key)</PRE>
-<DL>
-<DD>Returns a collection view of all values associated with a key. If no
- mappings in the multimap have the provided key, an empty collection is
- returned.
-
- <p>Changes to the returned collection will update the underlying multimap,
- and vice versa.
-
- <p>Because the values for a given key may have duplicates and follow the
- insertion ordering, this method returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util"><CODE>List</CODE></A>, instead of the
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A> specified in the <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A> interface.
-
- <p>If the multimap is modified while an iteration over the list is in
- progress (except through the iterator's own <code>add</code>, <code>set</code> or
- <code>remove</code> operations) the results of the iteration are undefined.
-
- <p>The returned list is not serializable and does not have random access.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ListMultimap.html#get(K)">get</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#get(K)">get</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to search for in multimap
-<DT><B>Returns:</B><DD>the collection of values that the key maps to</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="keySet()"><!-- --></A><H3>
-keySet</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>&gt; <B>keySet</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#keySet()">Multimap</A></CODE></B></DD>
-<DD>Returns the set of all keys, each appearing once in the returned set.
- Changes to the returned set will update the underlying multimap, and vice
- versa.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#keySet()">keySet</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>the collection of distinct keys</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="keys()"><!-- --></A><H3>
-keys</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>&gt; <B>keys</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#keys()">Multimap</A></CODE></B></DD>
-<DD>Returns a collection, which may contain duplicates, of all keys. The number
- of times of key appears in the returned multiset equals the number of
- mappings the key has in the multimap. Changes to the returned multiset will
- update the underlying multimap, and vice versa.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#keys()">keys</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a multiset with keys corresponding to the distinct keys of the
-     multimap and frequencies corresponding to the number of values that
-     each key maps to</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="values()"><!-- --></A><H3>
-values</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt; <B>values</B>()</PRE>
-<DL>
-<DD>Returns a collection of all values in the multimap. Changes to the returned
- collection will update the underlying multimap, and vice versa.
-
- <p>The iterator generated by the returned collection traverses the values
- in the order they were added to the multimap.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#values()">values</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>collection of values, which may include the same value multiple
-     times if it occurs in multiple mappings</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="entries()"><!-- --></A><H3>
-entries</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;&gt; <B>entries</B>()</PRE>
-<DL>
-<DD>Returns a collection of all key-value pairs. Changes to the returned
- collection will update the underlying multimap, and vice versa. The entries
- collection does not support the <code>add</code> or <code>addAll</code> operations.
-
- <p>The iterator generated by the returned collection traverses the entries
- in the order they were added to the multimap.
-
- <p>An entry's <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true#getKey()" title="class or interface in java.util"><CODE>Map.Entry.getKey()</CODE></A> method always returns the same key,
- regardless of what happens subsequently. As long as the corresponding
- key-value mapping is not removed from the multimap, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true#getValue()" title="class or interface in java.util"><CODE>Map.Entry.getValue()</CODE></A>
- returns the value from the multimap, which may change over time, and <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true#setValue(V)" title="class or interface in java.util"><CODE>Map.Entry.setValue(V)</CODE></A> modifies that value. Removing the mapping from the
- multimap does not alter the value returned by <code>getValue()</code>, though a
- subsequent <code>setValue()</code> call won't update the multimap but will lead
- to a revised value being returned by <code>getValue()</code>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#entries()">entries</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>collection of map entries consisting of key-value pairs</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="asMap()"><!-- --></A><H3>
-asMap</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;&gt; <B>asMap</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/ListMultimap.html#asMap()">ListMultimap</A></CODE></B></DD>
-<DD>Returns a map view that associates each key with the corresponding values
- in the multimap. Changes to the returned map, such as element removal,
- will update the underlying multimap. The map does not support
- <code>setValue()</code> on its entries, <code>put</code>, or <code>putAll</code>.
-
- <p>The collections returned by <code>asMap().get(Object)</code> have the same
- behavior as those returned by <A HREF="../../../../com/google/common/collect/Multimap.html#get(K)"><CODE>Multimap.get(K)</CODE></A>.
-
- <p>Though the method signature doesn't say so explicitly, the returned map
- has <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util"><CODE>List</CODE></A> values.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ListMultimap.html#asMap()">asMap</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#asMap()">asMap</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a map view from a key to its collection of values</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
-equals</H3>
-<PRE>
-public boolean <B>equals</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                      <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;other)</PRE>
-<DL>
-<DD>Compares the specified object to this multimap for equality.
-
- <p>Two <code>ListMultimap</code> instances are equal if, for each key, they
- contain the same values in the same order. If the value orderings disagree,
- the multimaps will not be considered equal.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ListMultimap.html#equals(java.lang.Object)">equals</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#equals(java.lang.Object)">equals</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="hashCode()"><!-- --></A><H3>
-hashCode</H3>
-<PRE>
-public int <B>hashCode</B>()</PRE>
-<DL>
-<DD>Returns the hash code for this multimap.
-
- <p>The hash code of a multimap is defined as the hash code of the map view,
- as returned by <A HREF="../../../../com/google/common/collect/Multimap.html#asMap()"><CODE>Multimap.asMap()</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#hashCode()">hashCode</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toString()"><!-- --></A><H3>
-toString</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
-<DL>
-<DD>Returns a string representation of the multimap, generated by calling
- <code>toString</code> on the map returned by <A HREF="../../../../com/google/common/collect/Multimap.html#asMap()"><CODE>Multimap.asMap()</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a string representation of the multimap</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/LinkedListMultimap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/LinkedListMultimap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="LinkedListMultimap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/ListMultimap.html b/javadoc/com/google/common/collect/ListMultimap.html
deleted file mode 100644
index fa474af..0000000
--- a/javadoc/com/google/common/collect/ListMultimap.html
+++ /dev/null
@@ -1,385 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:59 PST 2010 -->
-<TITLE>
-ListMultimap (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="ListMultimap (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ListMultimap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/Lists.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ListMultimap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ListMultimap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Interface ListMultimap&lt;K,V&gt;</H2>
-<DL>
-<DT><B>All Superinterfaces:</B> <DD><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</DD>
-</DL>
-<DL>
-<DT><B>All Known Implementing Classes:</B> <DD><A HREF="../../../../com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect">ArrayListMultimap</A>, <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>, <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public interface <B>ListMultimap&lt;K,V&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</DL>
-</PRE>
-
-<P>
-A <code>Multimap</code> that can hold duplicate key-value pairs and that maintains
- the insertion ordering of values for a given key.
-
- <p>The <A HREF="../../../../com/google/common/collect/ListMultimap.html#get(K)"><CODE>get(K)</CODE></A>, <A HREF="../../../../com/google/common/collect/ListMultimap.html#removeAll(java.lang.Object)"><CODE>removeAll(java.lang.Object)</CODE></A>, and <A HREF="../../../../com/google/common/collect/ListMultimap.html#replaceValues(K, java.lang.Iterable)"><CODE>replaceValues(K, java.lang.Iterable<? extends V>)</CODE></A> methods
- each return a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util"><CODE>List</CODE></A> of values. Though the method signature doesn't say
- so explicitly, the map returned by <A HREF="../../../../com/google/common/collect/ListMultimap.html#asMap()"><CODE>asMap()</CODE></A> has <code>List</code> values.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Jared Levy</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="type parameter in ListMultimap">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="type parameter in ListMultimap">V</A>&gt;&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ListMultimap.html#asMap()">asMap</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a map view that associates each key with the corresponding values
- in the multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ListMultimap.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;obj)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares the specified object to this multimap for equality.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="type parameter in ListMultimap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ListMultimap.html#get(K)">get</A></B>(<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="type parameter in ListMultimap">K</A>&nbsp;key)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection view of all values associated with a key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="type parameter in ListMultimap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ListMultimap.html#removeAll(java.lang.Object)">removeAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes all values associated with a given key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="type parameter in ListMultimap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ListMultimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></B>(<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="type parameter in ListMultimap">K</A>&nbsp;key,
-              <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ListMultimap.html" title="type parameter in ListMultimap">V</A>&gt;&nbsp;values)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a collection of values with the same key, replacing any existing
- values for that key.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.Multimap"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface com.google.common.collect.<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#clear()">clear</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#containsEntry(java.lang.Object, java.lang.Object)">containsEntry</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#containsKey(java.lang.Object)">containsKey</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#containsValue(java.lang.Object)">containsValue</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#entries()">entries</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#hashCode()">hashCode</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#keys()">keys</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#keySet()">keySet</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#put(K, V)">put</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#putAll(K, java.lang.Iterable)">putAll</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#putAll(com.google.common.collect.Multimap)">putAll</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#remove(java.lang.Object, java.lang.Object)">remove</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#size()">size</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#values()">values</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="get(java.lang.Object)"><!-- --></A><A NAME="get(K)"><!-- --></A><H3>
-get</H3>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="type parameter in ListMultimap">V</A>&gt; <B>get</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-            <A HREF="../../../../com/google/common/collect/ListMultimap.html" title="type parameter in ListMultimap">K</A>&nbsp;key)</PRE>
-<DL>
-<DD>Returns a collection view of all values associated with a key. If no
- mappings in the multimap have the provided key, an empty collection is
- returned.
-
- <p>Changes to the returned collection will update the underlying multimap,
- and vice versa.
-
- <p>Because the values for a given key may have duplicates and follow the
- insertion ordering, this method returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util"><CODE>List</CODE></A>, instead of the
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A> specified in the <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A> interface.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#get(K)">get</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="type parameter in ListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="type parameter in ListMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to search for in multimap
-<DT><B>Returns:</B><DD>the collection of values that the key maps to</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="removeAll(java.lang.Object)"><!-- --></A><H3>
-removeAll</H3>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="type parameter in ListMultimap">V</A>&gt; <B>removeAll</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                  <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
-<DL>
-<DD>Removes all values associated with a given key.
-
- <p>Because the values for a given key may have duplicates and follow the
- insertion ordering, this method returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util"><CODE>List</CODE></A>, instead of the
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A> specified in the <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A> interface.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#removeAll(java.lang.Object)">removeAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="type parameter in ListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="type parameter in ListMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key of entries to remove from the multimap
-<DT><B>Returns:</B><DD>the collection of removed values, or an empty collection if no
-     values were associated with the provided key. The collection
-     <i>may</i> be modifiable, but updating it will have no effect on the
-     multimap.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="replaceValues(java.lang.Object,java.lang.Iterable)"><!-- --></A><A NAME="replaceValues(K, java.lang.Iterable)"><!-- --></A><H3>
-replaceValues</H3>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="type parameter in ListMultimap">V</A>&gt; <B>replaceValues</B>(<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="type parameter in ListMultimap">K</A>&nbsp;key,
-                      <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/ListMultimap.html" title="type parameter in ListMultimap">V</A>&gt;&nbsp;values)</PRE>
-<DL>
-<DD>Stores a collection of values with the same key, replacing any existing
- values for that key.
-
- <p>Because the values for a given key may have duplicates and follow the
- insertion ordering, this method returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util"><CODE>List</CODE></A>, instead of the
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A> specified in the <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A> interface.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="type parameter in ListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="type parameter in ListMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to store in the multimap<DD><CODE>values</CODE> - values to store in the multimap
-<DT><B>Returns:</B><DD>the collection of replaced values, or an empty collection if no
-     values were previously associated with the key. The collection
-     <i>may</i> be modifiable, but updating it will have no effect on the
-     multimap.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="asMap()"><!-- --></A><H3>
-asMap</H3>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="type parameter in ListMultimap">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="type parameter in ListMultimap">V</A>&gt;&gt; <B>asMap</B>()</PRE>
-<DL>
-<DD>Returns a map view that associates each key with the corresponding values
- in the multimap. Changes to the returned map, such as element removal,
- will update the underlying multimap. The map does not support
- <code>setValue()</code> on its entries, <code>put</code>, or <code>putAll</code>.
-
- <p>The collections returned by <code>asMap().get(Object)</code> have the same
- behavior as those returned by <A HREF="../../../../com/google/common/collect/Multimap.html#get(K)"><CODE>Multimap.get(K)</CODE></A>.
-
- <p>Though the method signature doesn't say so explicitly, the returned map
- has <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util"><CODE>List</CODE></A> values.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#asMap()">asMap</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="type parameter in ListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="type parameter in ListMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a map view from a key to its collection of values</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
-equals</H3>
-<PRE>
-boolean <B>equals</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-               <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;obj)</PRE>
-<DL>
-<DD>Compares the specified object to this multimap for equality.
-
- <p>Two <code>ListMultimap</code> instances are equal if, for each key, they
- contain the same values in the same order. If the value orderings disagree,
- the multimaps will not be considered equal.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#equals(java.lang.Object)">equals</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="type parameter in ListMultimap">K</A>,<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="type parameter in ListMultimap">V</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ListMultimap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/Lists.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ListMultimap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ListMultimap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/Lists.html b/javadoc/com/google/common/collect/Lists.html
deleted file mode 100644
index 0e7b816..0000000
--- a/javadoc/com/google/common/collect/Lists.html
+++ /dev/null
@@ -1,669 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:59 PST 2010 -->
-<TITLE>
-Lists (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Lists (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Lists.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/MapDifference.html" title="interface in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/Lists.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Lists.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class Lists</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.Lists</B>
-</PRE>
-<HR>
-<DL>
-<DT><PRE>public final class <B>Lists</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
-</PRE>
-
-<P>
-Static utility methods pertaining to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util"><CODE>List</CODE></A> instances. Also see this
- class's counterparts <A HREF="../../../../com/google/common/collect/Sets.html" title="class in com.google.common.collect"><CODE>Sets</CODE></A> and <A HREF="../../../../com/google/common/collect/Maps.html" title="class in com.google.common.collect"><CODE>Maps</CODE></A>.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Kevin Bourrillion, Mike Bostock</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Lists.html#asList(E, E[])">asList</A></B>(E&nbsp;first,
-       E[]&nbsp;rest)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable list containing the specified first element and
- backed by the specified array of additional elements.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Lists.html#asList(E, E, E[])">asList</A></B>(E&nbsp;first,
-       E&nbsp;second,
-       E[]&nbsp;rest)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable list containing the specified first and second
- element, and backed by the specified array of additional elements.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Lists.html#newArrayList()">newArrayList</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <i>mutable</i>, empty <code>ArrayList</code> instance.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Lists.html#newArrayList(E...)">newArrayList</A></B>(E...&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <i>mutable</i> <code>ArrayList</code> instance containing the given
- elements.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Lists.html#newArrayList(java.lang.Iterable)">newArrayList</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <i>mutable</i> <code>ArrayList</code> instance containing the given
- elements.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Lists.html#newArrayList(java.util.Iterator)">newArrayList</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <i>mutable</i> <code>ArrayList</code> instance containing the given
- elements.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Lists.html#newArrayListWithCapacity(int)">newArrayListWithCapacity</A></B>(int&nbsp;initialArraySize)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an <code>ArrayList</code> instance backed by an array of the
- <i>exact</i> size specified; equivalent to
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html?is-external=true#ArrayList(int)" title="class or interface in java.util"><CODE>ArrayList.ArrayList(int)</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Lists.html#newArrayListWithExpectedSize(int)">newArrayListWithExpectedSize</A></B>(int&nbsp;estimatedSize)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an <code>ArrayList</code> instance sized appropriately to hold an
- <i>estimated</i> number of elements without resizing.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/LinkedList.html?is-external=true" title="class or interface in java.util">LinkedList</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Lists.html#newLinkedList()">newLinkedList</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an empty <code>LinkedList</code> instance.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/LinkedList.html?is-external=true" title="class or interface in java.util">LinkedList</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Lists.html#newLinkedList(java.lang.Iterable)">newLinkedList</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <code>LinkedList</code> instance containing the given elements.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;T&gt;&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Lists.html#partition(java.util.List, int)">partition</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;T&gt;&nbsp;list,
-          int&nbsp;size)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns consecutive <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#subList(int, int)" title="class or interface in java.util">sublists</A> of a list,
- each of the same size (the final list may be smaller).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;F,T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Lists.html#transform(java.util.List, com.google.common.base.Function)">transform</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;F&gt;&nbsp;fromList,
-          <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super F,? extends T&gt;&nbsp;function)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a list that applies <code>function</code> to each element of <code>fromList</code>.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="newArrayList()"><!-- --></A><H3>
-newArrayList</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</A>&lt;E&gt; <B>newArrayList</B>()</PRE>
-<DL>
-<DD>Creates a <i>mutable</i>, empty <code>ArrayList</code> instance.
-
- <p><b>Note:</b> if mutability is not required, use <A HREF="../../../../com/google/common/collect/ImmutableList.html#of()"><CODE>ImmutableList.of()</CODE></A> instead.
-<P>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a new, empty <code>ArrayList</code></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="newArrayList(java.lang.Object[])"><!-- --></A><A NAME="newArrayList(E...)"><!-- --></A><H3>
-newArrayList</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</A>&lt;E&gt; <B>newArrayList</B>(E...&nbsp;elements)</PRE>
-<DL>
-<DD>Creates a <i>mutable</i> <code>ArrayList</code> instance containing the given
- elements.
-
- <p><b>Note:</b> if mutability is not required and the elements are
- non-null, use <A HREF="../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>ImmutableList.of(Object[])</CODE></A> instead.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>elements</CODE> - the elements that the list should contain, in order
-<DT><B>Returns:</B><DD>a new <code>ArrayList</code> containing those elements</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="newArrayList(java.lang.Iterable)"><!-- --></A><H3>
-newArrayList</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</A>&lt;E&gt; <B>newArrayList</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</PRE>
-<DL>
-<DD>Creates a <i>mutable</i> <code>ArrayList</code> instance containing the given
- elements.
-
- <p><b>Note:</b> if mutability is not required and the elements are
- non-null, use <A HREF="../../../../com/google/common/collect/ImmutableList.html#copyOf(java.util.Iterator)"><CODE>ImmutableList.copyOf(Iterator)</CODE></A> instead.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>elements</CODE> - the elements that the list should contain, in order
-<DT><B>Returns:</B><DD>a new <code>ArrayList</code> containing those elements</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="newArrayList(java.util.Iterator)"><!-- --></A><H3>
-newArrayList</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</A>&lt;E&gt; <B>newArrayList</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends E&gt;&nbsp;elements)</PRE>
-<DL>
-<DD>Creates a <i>mutable</i> <code>ArrayList</code> instance containing the given
- elements.
-
- <p><b>Note:</b> if mutability is not required and the elements are
- non-null, use <A HREF="../../../../com/google/common/collect/ImmutableList.html#copyOf(java.util.Iterator)"><CODE>ImmutableList.copyOf(Iterator)</CODE></A> instead.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>elements</CODE> - the elements that the list should contain, in order
-<DT><B>Returns:</B><DD>a new <code>ArrayList</code> containing those elements</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="newArrayListWithCapacity(int)"><!-- --></A><H3>
-newArrayListWithCapacity</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</A>&lt;E&gt; <B>newArrayListWithCapacity</B>(int&nbsp;initialArraySize)</PRE>
-<DL>
-<DD>Creates an <code>ArrayList</code> instance backed by an array of the
- <i>exact</i> size specified; equivalent to
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html?is-external=true#ArrayList(int)" title="class or interface in java.util"><CODE>ArrayList.ArrayList(int)</CODE></A>.
-
- <p><b>Note:</b> if you know the exact size your list will be, consider
- using a fixed-size list (<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true#asList(T...)" title="class or interface in java.util"><CODE>Arrays.asList(Object[])</CODE></A>) or an <A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect"><CODE>ImmutableList</CODE></A> instead of a growable <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util"><CODE>ArrayList</CODE></A>.
-
- <p><b>Note:</b> If you have only an <i>estimate</i> of the eventual size of
- the list, consider padding this estimate by a suitable amount, or simply
- use <A HREF="../../../../com/google/common/collect/Lists.html#newArrayListWithExpectedSize(int)"><CODE>newArrayListWithExpectedSize(int)</CODE></A> instead.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>initialArraySize</CODE> - the exact size of the initial backing array for
-     the returned array list (<code>ArrayList</code> documentation calls this
-     value the "capacity")
-<DT><B>Returns:</B><DD>a new, empty <code>ArrayList</code> which is guaranteed not to resize
-     itself unless its size reaches <code>initialArraySize + 1</code>
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>initialArraySize</code> is negative</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="newArrayListWithExpectedSize(int)"><!-- --></A><H3>
-newArrayListWithExpectedSize</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</A>&lt;E&gt; <B>newArrayListWithExpectedSize</B>(int&nbsp;estimatedSize)</PRE>
-<DL>
-<DD>Creates an <code>ArrayList</code> instance sized appropriately to hold an
- <i>estimated</i> number of elements without resizing. A small amount of
- padding is added in case the estimate is low.
-
- <p><b>Note:</b> If you know the <i>exact</i> number of elements the list
- will hold, or prefer to calculate your own amount of padding, refer to
- <A HREF="../../../../com/google/common/collect/Lists.html#newArrayListWithCapacity(int)"><CODE>newArrayListWithCapacity(int)</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>estimatedSize</CODE> - an estimate of the eventual <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#size()" title="class or interface in java.util"><CODE>List.size()</CODE></A> of
-     the new list
-<DT><B>Returns:</B><DD>a new, empty <code>ArrayList</code>, sized appropriately to hold the
-     estimated number of elements
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>estimatedSize</code> is negative</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="newLinkedList()"><!-- --></A><H3>
-newLinkedList</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/LinkedList.html?is-external=true" title="class or interface in java.util">LinkedList</A>&lt;E&gt; <B>newLinkedList</B>()</PRE>
-<DL>
-<DD>Creates an empty <code>LinkedList</code> instance.
-
- <p><b>Note:</b> if you need an immutable empty <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util"><CODE>List</CODE></A>, use
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#emptyList()" title="class or interface in java.util"><CODE>Collections.emptyList()</CODE></A> instead.
-<P>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a new, empty <code>LinkedList</code></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="newLinkedList(java.lang.Iterable)"><!-- --></A><H3>
-newLinkedList</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/LinkedList.html?is-external=true" title="class or interface in java.util">LinkedList</A>&lt;E&gt; <B>newLinkedList</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</PRE>
-<DL>
-<DD>Creates a <code>LinkedList</code> instance containing the given elements.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>elements</CODE> - the elements that the list should contain, in order
-<DT><B>Returns:</B><DD>a new <code>LinkedList</code> containing those elements</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="asList(java.lang.Object,java.lang.Object[])"><!-- --></A><A NAME="asList(E, E[])"><!-- --></A><H3>
-asList</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;E&gt; <B>asList</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                                 E&nbsp;first,
-                                 E[]&nbsp;rest)</PRE>
-<DL>
-<DD>Returns an unmodifiable list containing the specified first element and
- backed by the specified array of additional elements. Changes to the <code>rest</code> array will be reflected in the returned list. Unlike <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true#asList(T...)" title="class or interface in java.util"><CODE>Arrays.asList(T...)</CODE></A>, the returned list is unmodifiable.
-
- <p>This is useful when a varargs method needs to use a signature such as
- <code>(Foo firstFoo, Foo... moreFoos)</code>, in order to avoid overload
- ambiguity or to enforce a minimum argument count.
-
- <p>The returned list is serializable and implements <A HREF="http://java.sun.com/javase/6/docs/api/java/util/RandomAccess.html?is-external=true" title="class or interface in java.util"><CODE>RandomAccess</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>first</CODE> - the first element<DD><CODE>rest</CODE> - an array of additional elements, possibly empty
-<DT><B>Returns:</B><DD>an unmodifiable list containing the specified elements</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="asList(java.lang.Object,java.lang.Object,java.lang.Object[])"><!-- --></A><A NAME="asList(E, E, E[])"><!-- --></A><H3>
-asList</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;E&gt; <B>asList</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                                 E&nbsp;first,
-                                 <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                                 E&nbsp;second,
-                                 E[]&nbsp;rest)</PRE>
-<DL>
-<DD>Returns an unmodifiable list containing the specified first and second
- element, and backed by the specified array of additional elements. Changes
- to the <code>rest</code> array will be reflected in the returned list. Unlike
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true#asList(T...)" title="class or interface in java.util"><CODE>Arrays.asList(T...)</CODE></A>, the returned list is unmodifiable.
-
- <p>This is useful when a varargs method needs to use a signature such as
- <code>(Foo firstFoo, Foo secondFoo, Foo... moreFoos)</code>, in order to avoid
- overload ambiguity or to enforce a minimum argument count.
-
- <p>The returned list is serializable and implements <A HREF="http://java.sun.com/javase/6/docs/api/java/util/RandomAccess.html?is-external=true" title="class or interface in java.util"><CODE>RandomAccess</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>first</CODE> - the first element<DD><CODE>second</CODE> - the second element<DD><CODE>rest</CODE> - an array of additional elements, possibly empty
-<DT><B>Returns:</B><DD>an unmodifiable list containing the specified elements</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="transform(java.util.List, com.google.common.base.Function)"><!-- --></A><H3>
-transform</H3>
-<PRE>
-public static &lt;F,T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;T&gt; <B>transform</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;F&gt;&nbsp;fromList,
-                                      <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super F,? extends T&gt;&nbsp;function)</PRE>
-<DL>
-<DD>Returns a list that applies <code>function</code> to each element of <code>fromList</code>. The returned list is a transformed view of <code>fromList</code>;
- changes to <code>fromList</code> will be reflected in the returned list and vice
- versa.
-
- <p>Since functions are not reversible, the transform is one-way and new
- items cannot be stored in the returned list. The <code>add</code>,
- <code>addAll</code> and <code>set</code> methods are unsupported in the returned
- list.
-
- <p>The function is applied lazily, invoked when needed. This is necessary
- for the returned list to be a view, but it means that the function will be
- applied many times for bulk operations like <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util"><CODE>List.contains(java.lang.Object)</CODE></A> and
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#hashCode()" title="class or interface in java.util"><CODE>List.hashCode()</CODE></A>. For this to perform well, <code>function</code> should be
- fast. To avoid lazy evaluation when the returned list doesn't need to be a
- view, copy the returned list into a new list of your choosing.
-
- <p>If <code>fromList</code> implements <A HREF="http://java.sun.com/javase/6/docs/api/java/util/RandomAccess.html?is-external=true" title="class or interface in java.util"><CODE>RandomAccess</CODE></A>, so will the
- returned list. The returned list always implements <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io"><CODE>Serializable</CODE></A>,
- but serialization will succeed only when <code>fromList</code> and
- <code>function</code> are serializable. The returned list is threadsafe if the
- supplied list and function are.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="partition(java.util.List, int)"><!-- --></A><H3>
-partition</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;T&gt;&gt; <B>partition</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;T&gt;&nbsp;list,
-                                          int&nbsp;size)</PRE>
-<DL>
-<DD>Returns consecutive <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#subList(int, int)" title="class or interface in java.util">sublists</A> of a list,
- each of the same size (the final list may be smaller). For example,
- partitioning a list containing <code>[a, b, c, d, e]</code> with a partition
- size of 3 yields <code>[[a, b, c], [d, e]]</code> -- an outer list containing
- two inner lists of three and two elements, all in the original order.
-
- <p>The outer list is unmodifiable, but reflects the latest state of the
- source list. The inner lists are sublist views of the original list,
- produced on demand using <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#subList(int, int)" title="class or interface in java.util"><CODE>List.subList(int, int)</CODE></A>, and are subject
- to all the usual caveats about modification as explained in that API.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>list</CODE> - the list to return consecutive sublists of<DD><CODE>size</CODE> - the desired size of each sublist (the last may be
-     smaller)
-<DT><B>Returns:</B><DD>a list of consecutive sublists
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>partitionSize</code> is nonpositive</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Lists.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/MapDifference.html" title="interface in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/Lists.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Lists.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/MapDifference.ValueDifference.html b/javadoc/com/google/common/collect/MapDifference.ValueDifference.html
deleted file mode 100644
index e76b9e4..0000000
--- a/javadoc/com/google/common/collect/MapDifference.ValueDifference.html
+++ /dev/null
@@ -1,291 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:59 PST 2010 -->
-<TITLE>
-MapDifference.ValueDifference (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="MapDifference.ValueDifference (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/MapDifference.ValueDifference.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/MapDifference.html" title="interface in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/MapDifference.ValueDifference.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="MapDifference.ValueDifference.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Interface MapDifference.ValueDifference&lt;V&gt;</H2>
-<DL>
-<DT><B>Enclosing interface:</B><DD><A HREF="../../../../com/google/common/collect/MapDifference.html" title="interface in com.google.common.collect">MapDifference</A>&lt;<A HREF="../../../../com/google/common/collect/MapDifference.html" title="type parameter in MapDifference">K</A>,<A HREF="../../../../com/google/common/collect/MapDifference.html" title="type parameter in MapDifference">V</A>&gt;</DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public static interface <B>MapDifference.ValueDifference&lt;V&gt;</B></DL>
-</PRE>
-
-<P>
-A difference between the mappings from two maps with the same key. The
- <code>leftValue()</code> and <code>rightValue</code> are not equal, and one but not
- both of them may be null.
-<P>
-
-<P>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/MapDifference.ValueDifference.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;other)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Two instances are considered equal if their <A HREF="../../../../com/google/common/collect/MapDifference.ValueDifference.html#leftValue()"><CODE>leftValue()</CODE></A>
- values are equal and their <A HREF="../../../../com/google/common/collect/MapDifference.ValueDifference.html#rightValue()"><CODE>rightValue()</CODE></A> values are also equal.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/MapDifference.ValueDifference.html#hashCode()">hashCode</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The hash code equals the value
- <code>Arrays.asList(leftValue(), rightValue()).hashCode()</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/MapDifference.ValueDifference.html" title="type parameter in MapDifference.ValueDifference">V</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/MapDifference.ValueDifference.html#leftValue()">leftValue</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the value from the left map (possibly null).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/MapDifference.ValueDifference.html" title="type parameter in MapDifference.ValueDifference">V</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/MapDifference.ValueDifference.html#rightValue()">rightValue</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the value from the right map (possibly null).</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="leftValue()"><!-- --></A><H3>
-leftValue</H3>
-<PRE>
-<A HREF="../../../../com/google/common/collect/MapDifference.ValueDifference.html" title="type parameter in MapDifference.ValueDifference">V</A> <B>leftValue</B>()</PRE>
-<DL>
-<DD>Returns the value from the left map (possibly null).
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="rightValue()"><!-- --></A><H3>
-rightValue</H3>
-<PRE>
-<A HREF="../../../../com/google/common/collect/MapDifference.ValueDifference.html" title="type parameter in MapDifference.ValueDifference">V</A> <B>rightValue</B>()</PRE>
-<DL>
-<DD>Returns the value from the right map (possibly null).
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
-equals</H3>
-<PRE>
-boolean <B>equals</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-               <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;other)</PRE>
-<DL>
-<DD>Two instances are considered equal if their <A HREF="../../../../com/google/common/collect/MapDifference.ValueDifference.html#leftValue()"><CODE>leftValue()</CODE></A>
- values are equal and their <A HREF="../../../../com/google/common/collect/MapDifference.ValueDifference.html#rightValue()"><CODE>rightValue()</CODE></A> values are also equal.
-<P>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="hashCode()"><!-- --></A><H3>
-hashCode</H3>
-<PRE>
-int <B>hashCode</B>()</PRE>
-<DL>
-<DD>The hash code equals the value
- <code>Arrays.asList(leftValue(), rightValue()).hashCode()</code>.
-<P>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/MapDifference.ValueDifference.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/MapDifference.html" title="interface in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/MapDifference.ValueDifference.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="MapDifference.ValueDifference.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/MapDifference.html b/javadoc/com/google/common/collect/MapDifference.html
deleted file mode 100644
index 0a9d394..0000000
--- a/javadoc/com/google/common/collect/MapDifference.html
+++ /dev/null
@@ -1,382 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:59 PST 2010 -->
-<TITLE>
-MapDifference (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="MapDifference (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/MapDifference.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/Lists.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/MapDifference.ValueDifference.html" title="interface in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/MapDifference.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="MapDifference.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Interface MapDifference&lt;K,V&gt;</H2>
-<HR>
-<DL>
-<DT><PRE>public interface <B>MapDifference&lt;K,V&gt;</B></DL>
-</PRE>
-
-<P>
-An object representing the differences between two maps.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Kevin Bourrillion</DD>
-</DL>
-<HR>
-
-<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-<A NAME="nested_class_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Nested Class Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;interface</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/MapDifference.ValueDifference.html" title="interface in com.google.common.collect">MapDifference.ValueDifference</A>&lt;<A HREF="../../../../com/google/common/collect/MapDifference.ValueDifference.html" title="type parameter in MapDifference.ValueDifference">V</A>&gt;</B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A difference between the mappings from two maps with the same key.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/MapDifference.html#areEqual()">areEqual</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if there are no differences between the two maps;
- that is, if the maps are equal.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/MapDifference.html" title="type parameter in MapDifference">K</A>,<A HREF="../../../../com/google/common/collect/MapDifference.ValueDifference.html" title="interface in com.google.common.collect">MapDifference.ValueDifference</A>&lt;<A HREF="../../../../com/google/common/collect/MapDifference.html" title="type parameter in MapDifference">V</A>&gt;&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/MapDifference.html#entriesDiffering()">entriesDiffering</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable map describing keys that appear in both maps, but
- with different values.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/MapDifference.html" title="type parameter in MapDifference">K</A>,<A HREF="../../../../com/google/common/collect/MapDifference.html" title="type parameter in MapDifference">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/MapDifference.html#entriesInCommon()">entriesInCommon</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable map containing the entries that appear in both
- maps; that is, the intersection of the two maps.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/MapDifference.html" title="type parameter in MapDifference">K</A>,<A HREF="../../../../com/google/common/collect/MapDifference.html" title="type parameter in MapDifference">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/MapDifference.html#entriesOnlyOnLeft()">entriesOnlyOnLeft</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable map containing the entries from the left map whose
- keys are not present in the right map.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/MapDifference.html" title="type parameter in MapDifference">K</A>,<A HREF="../../../../com/google/common/collect/MapDifference.html" title="type parameter in MapDifference">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/MapDifference.html#entriesOnlyOnRight()">entriesOnlyOnRight</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable map containing the entries from the right map whose
- keys are not present in the left map.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/MapDifference.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares the specified object with this instance for equality.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/MapDifference.html#hashCode()">hashCode</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the hash code for this instance.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="areEqual()"><!-- --></A><H3>
-areEqual</H3>
-<PRE>
-boolean <B>areEqual</B>()</PRE>
-<DL>
-<DD>Returns <code>true</code> if there are no differences between the two maps;
- that is, if the maps are equal.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="entriesOnlyOnLeft()"><!-- --></A><H3>
-entriesOnlyOnLeft</H3>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/MapDifference.html" title="type parameter in MapDifference">K</A>,<A HREF="../../../../com/google/common/collect/MapDifference.html" title="type parameter in MapDifference">V</A>&gt; <B>entriesOnlyOnLeft</B>()</PRE>
-<DL>
-<DD>Returns an unmodifiable map containing the entries from the left map whose
- keys are not present in the right map.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="entriesOnlyOnRight()"><!-- --></A><H3>
-entriesOnlyOnRight</H3>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/MapDifference.html" title="type parameter in MapDifference">K</A>,<A HREF="../../../../com/google/common/collect/MapDifference.html" title="type parameter in MapDifference">V</A>&gt; <B>entriesOnlyOnRight</B>()</PRE>
-<DL>
-<DD>Returns an unmodifiable map containing the entries from the right map whose
- keys are not present in the left map.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="entriesInCommon()"><!-- --></A><H3>
-entriesInCommon</H3>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/MapDifference.html" title="type parameter in MapDifference">K</A>,<A HREF="../../../../com/google/common/collect/MapDifference.html" title="type parameter in MapDifference">V</A>&gt; <B>entriesInCommon</B>()</PRE>
-<DL>
-<DD>Returns an unmodifiable map containing the entries that appear in both
- maps; that is, the intersection of the two maps.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="entriesDiffering()"><!-- --></A><H3>
-entriesDiffering</H3>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/MapDifference.html" title="type parameter in MapDifference">K</A>,<A HREF="../../../../com/google/common/collect/MapDifference.ValueDifference.html" title="interface in com.google.common.collect">MapDifference.ValueDifference</A>&lt;<A HREF="../../../../com/google/common/collect/MapDifference.html" title="type parameter in MapDifference">V</A>&gt;&gt; <B>entriesDiffering</B>()</PRE>
-<DL>
-<DD>Returns an unmodifiable map describing keys that appear in both maps, but
- with different values.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
-equals</H3>
-<PRE>
-boolean <B>equals</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-               <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
-<DL>
-<DD>Compares the specified object with this instance for equality. Returns
- <code>true</code> if the given object is also a <code>MapDifference</code> and the
- values returned by the <A HREF="../../../../com/google/common/collect/MapDifference.html#entriesOnlyOnLeft()"><CODE>entriesOnlyOnLeft()</CODE></A>, <A HREF="../../../../com/google/common/collect/MapDifference.html#entriesOnlyOnRight()"><CODE>entriesOnlyOnRight()</CODE></A>, <A HREF="../../../../com/google/common/collect/MapDifference.html#entriesInCommon()"><CODE>entriesInCommon()</CODE></A> and <A HREF="../../../../com/google/common/collect/MapDifference.html#entriesDiffering()"><CODE>entriesDiffering()</CODE></A> of the two instances are equal.
-<P>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="hashCode()"><!-- --></A><H3>
-hashCode</H3>
-<PRE>
-int <B>hashCode</B>()</PRE>
-<DL>
-<DD>Returns the hash code for this instance. This is defined as the hash code
- of <pre>   <code>Arrays.asList(entriesOnlyOnLeft(), entriesOnlyOnRight(),
-       entriesInCommon(), entriesDiffering())</code></pre>
-<P>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/MapDifference.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/Lists.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/MapDifference.ValueDifference.html" title="interface in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/MapDifference.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="MapDifference.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/MapMaker.html b/javadoc/com/google/common/collect/MapMaker.html
deleted file mode 100644
index 835f4d5..0000000
--- a/javadoc/com/google/common/collect/MapMaker.html
+++ /dev/null
@@ -1,618 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:59 PST 2010 -->
-<TITLE>
-MapMaker (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="MapMaker (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/MapMaker.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/MapDifference.ValueDifference.html" title="interface in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/Maps.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/MapMaker.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="MapMaker.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class MapMaker</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.MapMaker</B>
-</PRE>
-<HR>
-<DL>
-<DT><PRE>public final class <B>MapMaker</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
-</PRE>
-
-<P>
-A <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ConcurrentMap</CODE></A> builder, providing any combination of these
- features: <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/SoftReference.html?is-external=true" title="class or interface in java.lang.ref">soft</A> or <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/WeakReference.html?is-external=true" title="class or interface in java.lang.ref">weak</A> keys, soft or weak values, timed expiration, and on-demand
- computation of values. Usage example: <pre> <code>ConcurrentMap&lt;Key, Graph&gt; graphs = new MapMaker()
-       .concurrencyLevel(32)
-       .softKeys()
-       .weakValues()
-       .expiration(30, TimeUnit.MINUTES)
-       .makeComputingMap(
-           new Function&lt;Key, Graph&gt;() {
-             public Graph apply(Key key) {
-               return createExpensiveGraph(key);
-             }
-           });</code></pre>
-
- These features are all optional; <code>new MapMaker().makeMap()</code>
- returns a valid concurrent map that behaves exactly like a
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentHashMap.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ConcurrentHashMap</CODE></A>.
-
- The returned map is implemented as a hash table with similar performance
- characteristics to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentHashMap.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ConcurrentHashMap</CODE></A>. It supports all optional
- operations of the <code>ConcurrentMap</code> interface. It does not permit
- null keys or values. It is serializable; however, serializing a map that
- uses soft or weak references can give unpredictable results.
-
- <p><b>Note:</b> by default, the returned map uses equality comparisons
- (the <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>equals</CODE></A> method) to determine equality
- for keys or values. However, if <A HREF="../../../../com/google/common/collect/MapMaker.html#weakKeys()"><CODE>weakKeys()</CODE></A> or <A HREF="../../../../com/google/common/collect/MapMaker.html#softKeys()"><CODE>softKeys()</CODE></A> was specified, the map uses identity (<code>==</code>)
- comparisons instead for keys. Likewise, if <A HREF="../../../../com/google/common/collect/MapMaker.html#weakValues()"><CODE>weakValues()</CODE></A> or
- <A HREF="../../../../com/google/common/collect/MapMaker.html#softValues()"><CODE>softValues()</CODE></A> was specified, the map uses identity comparisons
- for values.
-
- <p>The returned map has <i>weakly consistent iteration</i>: an iterator
- over one of the map's view collections may reflect some, all or none of
- the changes made to the map after the iterator was created.
-
- <p>An entry whose key or value is reclaimed by the garbage collector
- immediately disappears from the map. (If the default settings of strong
- keys and strong values are used, this will never happen.) The client can
- never observe a partially-reclaimed entry. Any <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util"><CODE>Map.Entry</CODE></A>
- instance retrieved from the map's <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#entrySet()" title="class or interface in java.util">entry set</A>
- is snapshot of that entry's state at the time of retrieval.
-
- <p><code>new MapMaker().weakKeys().makeMap()</code> can almost always be
- used as a drop-in replacement for <A HREF="http://java.sun.com/javase/6/docs/api/java/util/WeakHashMap.html?is-external=true" title="class or interface in java.util"><CODE>WeakHashMap</CODE></A>, adding
- concurrency, asynchronous cleanup, identity-based equality for keys, and
- great flexibility.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Bob Lee, Kevin Bourrillion</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/MapMaker.html#MapMaker()">MapMaker</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a new <code>MapMaker</code> instance with default settings,
- including strong keys, strong values, and no automatic expiration.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/MapMaker.html#concurrencyLevel(int)">concurrencyLevel</A></B>(int&nbsp;concurrencyLevel)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guides the allowed concurrency among update operations.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/MapMaker.html#expiration(long, java.util.concurrent.TimeUnit)">expiration</A></B>(long&nbsp;duration,
-           <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</A>&nbsp;unit)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Specifies that each entry should be automatically removed from the
- map once a fixed duration has passed since the entry's creation.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/MapMaker.html#initialCapacity(int)">initialCapacity</A></B>(int&nbsp;initialCapacity)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sets a custom initial capacity (defaults to 16).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/MapMaker.html#makeComputingMap(com.google.common.base.Function)">makeComputingMap</A></B>(<A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super K,? extends V&gt;&nbsp;computingFunction)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Builds a map that supports atomic, on-demand computation of values.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/MapMaker.html#makeMap()">makeMap</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Builds the final map, without on-demand computation of values.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/MapMaker.html#softKeys()">softKeys</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Specifies that each key (not value) stored in the map should be
- wrapped in a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/SoftReference.html?is-external=true" title="class or interface in java.lang.ref"><CODE>SoftReference</CODE></A> (by default, strong references
- are used).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/MapMaker.html#softValues()">softValues</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Specifies that each value (not key) stored in the map should be
- wrapped in a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/SoftReference.html?is-external=true" title="class or interface in java.lang.ref"><CODE>SoftReference</CODE></A> (by default, strong references
- are used).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/MapMaker.html#weakKeys()">weakKeys</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Specifies that each key (not value) stored in the map should be
- wrapped in a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/WeakReference.html?is-external=true" title="class or interface in java.lang.ref"><CODE>WeakReference</CODE></A> (by default, strong references
- are used).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/MapMaker.html#weakValues()">weakValues</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Specifies that each value (not key) stored in the map should be
- wrapped in a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/WeakReference.html?is-external=true" title="class or interface in java.lang.ref"><CODE>WeakReference</CODE></A> (by default, strong references
- are used).</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="MapMaker()"><!-- --></A><H3>
-MapMaker</H3>
-<PRE>
-public <B>MapMaker</B>()</PRE>
-<DL>
-<DD>Constructs a new <code>MapMaker</code> instance with default settings,
- including strong keys, strong values, and no automatic expiration.
-<P>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="initialCapacity(int)"><!-- --></A><H3>
-initialCapacity</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A> <B>initialCapacity</B>(int&nbsp;initialCapacity)</PRE>
-<DL>
-<DD>Sets a custom initial capacity (defaults to 16). Resizing this or
- any other kind of hash table is a relatively slow operation, so,
- when possible, it is a good idea to provide estimates of expected
- table sizes.
-<P>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>initialCapacity</code> is
-   negative
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalStateException.html?is-external=true" title="class or interface in java.lang">IllegalStateException</A></CODE> - if an initial capacity was already set</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="concurrencyLevel(int)"><!-- --></A><H3>
-concurrencyLevel</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A> <B>concurrencyLevel</B>(int&nbsp;concurrencyLevel)</PRE>
-<DL>
-<DD>Guides the allowed concurrency among update operations. Used as a
- hint for internal sizing. The table is internally partitioned to try
- to permit the indicated number of concurrent updates without
- contention.  Because placement in hash tables is essentially random,
- the actual concurrency will vary. Ideally, you should choose a value
- to accommodate as many threads as will ever concurrently modify the
- table. Using a significantly higher value than you need can waste
- space and time, and a significantly lower value can lead to thread
- contention. But overestimates and underestimates within an order of
- magnitude do not usually have much noticeable impact. A value of one
- is appropriate when it is known that only one thread will modify and
- all others will only read. Defaults to 16.
-<P>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>concurrencyLevel</code> is
-     nonpositive
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalStateException.html?is-external=true" title="class or interface in java.lang">IllegalStateException</A></CODE> - if a concurrency level was already set</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="weakKeys()"><!-- --></A><H3>
-weakKeys</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A> <B>weakKeys</B>()</PRE>
-<DL>
-<DD>Specifies that each key (not value) stored in the map should be
- wrapped in a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/WeakReference.html?is-external=true" title="class or interface in java.lang.ref"><CODE>WeakReference</CODE></A> (by default, strong references
- are used).
-
- <p><b>Note:</b> the map will use identity (<code>==</code>) comparison
- to determine equality of weak keys, which may not behave as you expect.
- For example, storing a key in the map and then attempting a lookup
- using a different but <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>equals</CODE></A>-equivalent
- key will always fail.
-<P>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalStateException.html?is-external=true" title="class or interface in java.lang">IllegalStateException</A></CODE> - if the key strength was already set<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/WeakReference.html?is-external=true" title="class or interface in java.lang.ref"><CODE>WeakReference</CODE></A></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="softKeys()"><!-- --></A><H3>
-softKeys</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A> <B>softKeys</B>()</PRE>
-<DL>
-<DD>Specifies that each key (not value) stored in the map should be
- wrapped in a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/SoftReference.html?is-external=true" title="class or interface in java.lang.ref"><CODE>SoftReference</CODE></A> (by default, strong references
- are used).
-
- <p><b>Note:</b> the map will use identity (<code>==</code>) comparison
- to determine equality of soft keys, which may not behave as you expect.
- For example, storing a key in the map and then attempting a lookup
- using a different but <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>equals</CODE></A>-equivalent
- key will always fail.
-<P>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalStateException.html?is-external=true" title="class or interface in java.lang">IllegalStateException</A></CODE> - if the key strength was already set<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/SoftReference.html?is-external=true" title="class or interface in java.lang.ref"><CODE>SoftReference</CODE></A></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="weakValues()"><!-- --></A><H3>
-weakValues</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A> <B>weakValues</B>()</PRE>
-<DL>
-<DD>Specifies that each value (not key) stored in the map should be
- wrapped in a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/WeakReference.html?is-external=true" title="class or interface in java.lang.ref"><CODE>WeakReference</CODE></A> (by default, strong references
- are used).
-
- <p>Weak values will be garbage collected once they are weakly
- reachable. This makes them a poor candidate for caching; consider
- <A HREF="../../../../com/google/common/collect/MapMaker.html#softValues()"><CODE>softValues()</CODE></A> instead.
-
- <p><b>Note:</b> the map will use identity (<code>==</code>) comparison
- to determine equality of weak values. This will notably impact
- the behavior of <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsValue(java.lang.Object)" title="class or interface in java.util"><CODE>containsValue</CODE></A>,
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true#remove(java.lang.Object, java.lang.Object)" title="class or interface in java.util.concurrent"><CODE>remove(Object, Object)</CODE></A>,
- and <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true#replace(K, V, V)" title="class or interface in java.util.concurrent"><CODE>replace(K, V, V)</CODE></A>.
-<P>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalStateException.html?is-external=true" title="class or interface in java.lang">IllegalStateException</A></CODE> - if the key strength was already set<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/WeakReference.html?is-external=true" title="class or interface in java.lang.ref"><CODE>WeakReference</CODE></A></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="softValues()"><!-- --></A><H3>
-softValues</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A> <B>softValues</B>()</PRE>
-<DL>
-<DD>Specifies that each value (not key) stored in the map should be
- wrapped in a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/SoftReference.html?is-external=true" title="class or interface in java.lang.ref"><CODE>SoftReference</CODE></A> (by default, strong references
- are used).
-
- <p>Soft values will be garbage collected in response to memory
- demand, and in a least-recently-used manner. This makes them a
- good candidate for caching.
-
- <p><b>Note:</b> the map will use identity (<code>==</code>) comparison
- to determine equality of soft values. This will notably impact
- the behavior of <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsValue(java.lang.Object)" title="class or interface in java.util"><CODE>containsValue</CODE></A>,
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true#remove(java.lang.Object, java.lang.Object)" title="class or interface in java.util.concurrent"><CODE>remove(Object, Object)</CODE></A>,
- and <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true#replace(K, V, V)" title="class or interface in java.util.concurrent"><CODE>replace(K, V, V)</CODE></A>.
-<P>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalStateException.html?is-external=true" title="class or interface in java.lang">IllegalStateException</A></CODE> - if the value strength was already set<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/SoftReference.html?is-external=true" title="class or interface in java.lang.ref"><CODE>SoftReference</CODE></A></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="expiration(long, java.util.concurrent.TimeUnit)"><!-- --></A><H3>
-expiration</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A> <B>expiration</B>(long&nbsp;duration,
-                           <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</A>&nbsp;unit)</PRE>
-<DL>
-<DD>Specifies that each entry should be automatically removed from the
- map once a fixed duration has passed since the entry's creation.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>duration</CODE> - the length of time after an entry is created that it
-     should be automatically removed<DD><CODE>unit</CODE> - the unit that <code>duration</code> is expressed in
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>duration</code> is not positive
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalStateException.html?is-external=true" title="class or interface in java.lang">IllegalStateException</A></CODE> - if the expiration time was already set</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="makeMap()"><!-- --></A><H3>
-makeMap</H3>
-<PRE>
-public &lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</A>&lt;K,V&gt; <B>makeMap</B>()</PRE>
-<DL>
-<DD>Builds the final map, without on-demand computation of values. This method
- does not alter the state of this <code>MapMaker</code> instance, so it can be
- invoked again to create multiple independent maps.
-<P>
-<DD><DL>
-<DT><B>Type Parameters:</B><DD><CODE>K</CODE> - the type of keys to be stored in the returned map<DD><CODE>V</CODE> - the type of values to be stored in the returned map
-<DT><B>Returns:</B><DD>a concurrent map having the requested features</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="makeComputingMap(com.google.common.base.Function)"><!-- --></A><H3>
-makeComputingMap</H3>
-<PRE>
-public &lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</A>&lt;K,V&gt; <B>makeComputingMap</B>(<A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super K,? extends V&gt;&nbsp;computingFunction)</PRE>
-<DL>
-<DD>Builds a map that supports atomic, on-demand computation of values. <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#get(java.lang.Object)" title="class or interface in java.util"><CODE>Map.get(java.lang.Object)</CODE></A> either returns an already-computed value for the given key,
- atomically computes it using the supplied function, or, if another thread
- is currently computing the value for this key, simply waits for that thread
- to finish and returns its computed value. Note that the function may be
- executed concurrently by multiple threads, but only for distinct keys.
-
- <p>If an entry's value has not finished computing yet, query methods
- besides <code>get</code> return immediately as if an entry doesn't exist. In
- other words, an entry isn't externally visible until the value's
- computation completes.
-
- <p><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#get(java.lang.Object)" title="class or interface in java.util"><CODE>Map.get(java.lang.Object)</CODE></A> on the returned map will never return <code>null</code>. It
- may throw:
-
- <ul>
- <li><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang"><CODE>NullPointerException</CODE></A> if the key is null or the computing
-     function returns null
- <li><A HREF="../../../../com/google/common/collect/ComputationException.html" title="class in com.google.common.collect"><CODE>ComputationException</CODE></A> if an exception was thrown by the
-     computing function. If that exception is already of type <A HREF="../../../../com/google/common/collect/ComputationException.html" title="class in com.google.common.collect"><CODE>ComputationException</CODE></A>, it is propagated directly; otherwise it is
-     wrapped.
- </ul>
-
- <p><b>Note:</b> Callers of <code>get</code> <i>must</i> ensure that the key
- argument is of type <code>K</code>. The <code>get</code> method accepts <code>Object</code>, so the key type is not checked at compile time. Passing an object
- of a type other than <code>K</code> can result in that object being unsafely
- passed to the computing function as type <code>K</code>, and unsafely stored in
- the map.
-
- <p>If <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#put(K, V)" title="class or interface in java.util"><CODE>Map.put(K, V)</CODE></A> is called before a computation completes, other
- threads waiting on the computation will wake up and return the stored
- value. When the computation completes, its new result will overwrite the
- value that was put in the map manually.
-
- <p>This method does not alter the state of this <code>MapMaker</code> instance,
- so it can be invoked again to create multiple independent maps.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/MapMaker.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/MapDifference.ValueDifference.html" title="interface in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/Maps.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/MapMaker.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="MapMaker.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/Maps.html b/javadoc/com/google/common/collect/Maps.html
deleted file mode 100644
index bcb9e02..0000000
--- a/javadoc/com/google/common/collect/Maps.html
+++ /dev/null
@@ -1,1018 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:59 PST 2010 -->
-<TITLE>
-Maps (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Maps (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Maps.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/Maps.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Maps.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class Maps</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.Maps</B>
-</PRE>
-<HR>
-<DL>
-<DT><PRE>public final class <B>Maps</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
-</PRE>
-
-<P>
-Static utility methods pertaining to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A> instances. Also see this
- class's counterparts <A HREF="../../../../com/google/common/collect/Lists.html" title="class in com.google.common.collect"><CODE>Lists</CODE></A> and <A HREF="../../../../com/google/common/collect/Sets.html" title="class in com.google.common.collect"><CODE>Sets</CODE></A>.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Kevin Bourrillion, Mike Bostock, Isaac Shum</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/MapDifference.html" title="interface in com.google.common.collect">MapDifference</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Maps.html#difference(java.util.Map, java.util.Map)">difference</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;left,
-           <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;right)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Computes the difference between two maps.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Maps.html#filterEntries(java.util.Map, com.google.common.base.Predicate)">filterEntries</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;&nbsp;unfiltered,
-              <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;K,V&gt;&gt;&nbsp;entryPredicate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a map containing the mappings in <code>unfiltered</code> that satisfy a
- predicate.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Maps.html#filterKeys(java.util.Map, com.google.common.base.Predicate)">filterKeys</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;&nbsp;unfiltered,
-           <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super K&gt;&nbsp;keyPredicate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a map containing the mappings in <code>unfiltered</code> whose keys
- satisfy a predicate.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Maps.html#filterValues(java.util.Map, com.google.common.base.Predicate)">filterValues</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;&nbsp;unfiltered,
-             <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super V&gt;&nbsp;valuePredicate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a map containing the mappings in <code>unfiltered</code> whose values
- satisfy a predicate.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Maps.html#fromProperties(java.util.Properties)">fromProperties</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Properties.html?is-external=true" title="class or interface in java.util">Properties</A>&nbsp;properties)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an <code>ImmutableMap&lt;String, String&gt;</code> from a <code>Properties</code>
- instance.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Maps.html#immutableEntry(K, V)">immutableEntry</A></B>(K&nbsp;key,
-               V&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map entry with the specified key and value.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;K&gt;,V&gt; 
-<BR>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/util/EnumMap.html?is-external=true" title="class or interface in java.util">EnumMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Maps.html#newEnumMap(java.lang.Class)">newEnumMap</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;K&gt;&nbsp;type)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an <code>EnumMap</code> instance.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;K&gt;,V&gt; 
-<BR>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/util/EnumMap.html?is-external=true" title="class or interface in java.util">EnumMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Maps.html#newEnumMap(java.util.Map)">newEnumMap</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,? extends V&gt;&nbsp;map)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an <code>EnumMap</code> with the same mappings as the specified map.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util">HashMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Maps.html#newHashMap()">newHashMap</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <i>mutable</i>, empty <code>HashMap</code> instance.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util">HashMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Maps.html#newHashMap(java.util.Map)">newHashMap</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;map)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <i>mutable</i> <code>HashMap</code> instance with the same mappings as
- the specified map.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util">HashMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Maps.html#newHashMapWithExpectedSize(int)">newHashMapWithExpectedSize</A></B>(int&nbsp;expectedSize)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <code>HashMap</code> instance with enough capacity to hold the
- specified number of elements without rehashing.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/IdentityHashMap.html?is-external=true" title="class or interface in java.util">IdentityHashMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Maps.html#newIdentityHashMap()">newIdentityHashMap</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an <code>IdentityHashMap</code> instance.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/LinkedHashMap.html?is-external=true" title="class or interface in java.util">LinkedHashMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Maps.html#newLinkedHashMap()">newLinkedHashMap</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <i>mutable</i>, empty, insertion-ordered <code>LinkedHashMap</code>
- instance.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/LinkedHashMap.html?is-external=true" title="class or interface in java.util">LinkedHashMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Maps.html#newLinkedHashMap(java.util.Map)">newLinkedHashMap</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;map)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <i>mutable</i>, insertion-ordered <code>LinkedHashMap</code> instance
- with the same mappings as the specified map.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>,V&gt; 
-<BR>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html?is-external=true" title="class or interface in java.util">TreeMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Maps.html#newTreeMap()">newTreeMap</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <i>mutable</i>, empty <code>TreeMap</code> instance using the natural
- ordering of its elements.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;C,K extends C,V&gt; 
-<BR>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html?is-external=true" title="class or interface in java.util">TreeMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Maps.html#newTreeMap(java.util.Comparator)">newTreeMap</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;C&gt;&nbsp;comparator)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <i>mutable</i>, empty <code>TreeMap</code> instance using the given
- comparator.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html?is-external=true" title="class or interface in java.util">TreeMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Maps.html#newTreeMap(java.util.SortedMap)">newTreeMap</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;K,? extends V&gt;&nbsp;map)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <i>mutable</i> <code>TreeMap</code> instance with the same mappings as
- the specified map and using the same ordering as the specified map.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Maps.html#synchronizedBiMap(com.google.common.collect.BiMap)">synchronizedBiMap</A></B>(<A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt;&nbsp;bimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a synchronized (thread-safe) bimap backed by the specified bimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V1,V2&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V2&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Maps.html#transformValues(java.util.Map, com.google.common.base.Function)">transformValues</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V1&gt;&nbsp;fromMap,
-                <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super V1,V2&gt;&nbsp;function)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of a map where each value is transformed by a function.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Maps.html#uniqueIndex(java.lang.Iterable, com.google.common.base.Function)">uniqueIndex</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;V&gt;&nbsp;values,
-            <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super V,K&gt;&nbsp;keyFunction)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map for which the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#values()" title="class or interface in java.util"><CODE>Map.values()</CODE></A> are the given
- elements in the given order, and each key is the product of invoking a
- supplied function on its corresponding value.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Maps.html#unmodifiableBiMap(com.google.common.collect.BiMap)">unmodifiableBiMap</A></B>(<A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;? extends K,? extends V&gt;&nbsp;bimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable view of the specified bimap.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="newHashMap()"><!-- --></A><H3>
-newHashMap</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util">HashMap</A>&lt;K,V&gt; <B>newHashMap</B>()</PRE>
-<DL>
-<DD>Creates a <i>mutable</i>, empty <code>HashMap</code> instance.
-
- <p><b>Note:</b> if mutability is not required, use <A HREF="../../../../com/google/common/collect/ImmutableMap.html#of()"><CODE>ImmutableMap.of()</CODE></A> instead.
-
- <p><b>Note:</b> if <code>K</code> is an <code>enum</code> type, use <A HREF="../../../../com/google/common/collect/Maps.html#newEnumMap(java.lang.Class)"><CODE>newEnumMap(java.lang.Class<K>)</CODE></A> instead.
-<P>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a new, empty <code>HashMap</code></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="newHashMapWithExpectedSize(int)"><!-- --></A><H3>
-newHashMapWithExpectedSize</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util">HashMap</A>&lt;K,V&gt; <B>newHashMapWithExpectedSize</B>(int&nbsp;expectedSize)</PRE>
-<DL>
-<DD>Creates a <code>HashMap</code> instance with enough capacity to hold the
- specified number of elements without rehashing.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>expectedSize</CODE> - the expected size
-<DT><B>Returns:</B><DD>a new, empty <code>HashMap</code> with enough
-     capacity to hold <code>expectedSize</code> elements without rehashing
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>expectedSize</code> is negative</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="newHashMap(java.util.Map)"><!-- --></A><H3>
-newHashMap</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util">HashMap</A>&lt;K,V&gt; <B>newHashMap</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;map)</PRE>
-<DL>
-<DD>Creates a <i>mutable</i> <code>HashMap</code> instance with the same mappings as
- the specified map.
-
- <p><b>Note:</b> if mutability is not required, use <A HREF="../../../../com/google/common/collect/ImmutableMap.html#copyOf(java.util.Map)"><CODE>ImmutableMap.copyOf(Map)</CODE></A> instead.
-
- <p><b>Note:</b> if <code>K</code> is an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><CODE>Enum</CODE></A> type, use <A HREF="../../../../com/google/common/collect/Maps.html#newEnumMap(java.lang.Class)"><CODE>newEnumMap(java.lang.Class<K>)</CODE></A> instead.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>map</CODE> - the mappings to be placed in the new map
-<DT><B>Returns:</B><DD>a new <code>HashMap</code> initialized with the mappings from
-     <code>map</code></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="newLinkedHashMap()"><!-- --></A><H3>
-newLinkedHashMap</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/LinkedHashMap.html?is-external=true" title="class or interface in java.util">LinkedHashMap</A>&lt;K,V&gt; <B>newLinkedHashMap</B>()</PRE>
-<DL>
-<DD>Creates a <i>mutable</i>, empty, insertion-ordered <code>LinkedHashMap</code>
- instance.
-
- <p><b>Note:</b> if mutability is not required, use <A HREF="../../../../com/google/common/collect/ImmutableMap.html#of()"><CODE>ImmutableMap.of()</CODE></A> instead.
-<P>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a new, empty <code>LinkedHashMap</code></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="newLinkedHashMap(java.util.Map)"><!-- --></A><H3>
-newLinkedHashMap</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/LinkedHashMap.html?is-external=true" title="class or interface in java.util">LinkedHashMap</A>&lt;K,V&gt; <B>newLinkedHashMap</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;map)</PRE>
-<DL>
-<DD>Creates a <i>mutable</i>, insertion-ordered <code>LinkedHashMap</code> instance
- with the same mappings as the specified map.
-
- <p><b>Note:</b> if mutability is not required, use <A HREF="../../../../com/google/common/collect/ImmutableMap.html#copyOf(java.util.Map)"><CODE>ImmutableMap.copyOf(Map)</CODE></A> instead.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>map</CODE> - the mappings to be placed in the new map
-<DT><B>Returns:</B><DD>a new, <code>LinkedHashMap</code> initialized with the
-     mappings from <code>map</code></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="newTreeMap()"><!-- --></A><H3>
-newTreeMap</H3>
-<PRE>
-public static &lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html?is-external=true" title="class or interface in java.util">TreeMap</A>&lt;K,V&gt; <B>newTreeMap</B>()</PRE>
-<DL>
-<DD>Creates a <i>mutable</i>, empty <code>TreeMap</code> instance using the natural
- ordering of its elements.
-
- <p><b>Note:</b> if mutability is not required, use <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#of()"><CODE>ImmutableSortedMap.of()</CODE></A> instead.
-<P>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a new, empty <code>TreeMap</code></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="newTreeMap(java.util.SortedMap)"><!-- --></A><H3>
-newTreeMap</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html?is-external=true" title="class or interface in java.util">TreeMap</A>&lt;K,V&gt; <B>newTreeMap</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;K,? extends V&gt;&nbsp;map)</PRE>
-<DL>
-<DD>Creates a <i>mutable</i> <code>TreeMap</code> instance with the same mappings as
- the specified map and using the same ordering as the specified map.
-
- <p><b>Note:</b> if mutability is not required, use <A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html#copyOfSorted(java.util.SortedMap)"><CODE>ImmutableSortedMap.copyOfSorted(SortedMap)</CODE></A> instead.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>map</CODE> - the sorted map whose mappings are to be placed in the new map
-     and whose comparator is to be used to sort the new map
-<DT><B>Returns:</B><DD>a new <code>TreeMap</code> initialized with the mappings from <code>map</code> and using the comparator of <code>map</code></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="newTreeMap(java.util.Comparator)"><!-- --></A><H3>
-newTreeMap</H3>
-<PRE>
-public static &lt;C,K extends C,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html?is-external=true" title="class or interface in java.util">TreeMap</A>&lt;K,V&gt; <B>newTreeMap</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                                                        <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;C&gt;&nbsp;comparator)</PRE>
-<DL>
-<DD>Creates a <i>mutable</i>, empty <code>TreeMap</code> instance using the given
- comparator.
-
- <p><b>Note:</b> if mutability is not required, use <code>ImmutableSortedMap.orderedBy(comparator).build()</code> instead.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>comparator</CODE> - the comparator to sort the keys with
-<DT><B>Returns:</B><DD>a new, empty <code>TreeMap</code></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="newEnumMap(java.lang.Class)"><!-- --></A><H3>
-newEnumMap</H3>
-<PRE>
-public static &lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;K&gt;,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/EnumMap.html?is-external=true" title="class or interface in java.util">EnumMap</A>&lt;K,V&gt; <B>newEnumMap</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;K&gt;&nbsp;type)</PRE>
-<DL>
-<DD>Creates an <code>EnumMap</code> instance.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>type</CODE> - the key type for this map
-<DT><B>Returns:</B><DD>a new, empty <code>EnumMap</code></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="newEnumMap(java.util.Map)"><!-- --></A><H3>
-newEnumMap</H3>
-<PRE>
-public static &lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;K&gt;,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/EnumMap.html?is-external=true" title="class or interface in java.util">EnumMap</A>&lt;K,V&gt; <B>newEnumMap</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,? extends V&gt;&nbsp;map)</PRE>
-<DL>
-<DD>Creates an <code>EnumMap</code> with the same mappings as the specified map.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>map</CODE> - the map from which to initialize this <code>EnumMap</code>
-<DT><B>Returns:</B><DD>a new <code>EnumMap</code> initialized with the mappings from <code>map</code>
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>m</code> is not an <code>EnumMap</code>
-     instance and contains no mappings</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="newIdentityHashMap()"><!-- --></A><H3>
-newIdentityHashMap</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/IdentityHashMap.html?is-external=true" title="class or interface in java.util">IdentityHashMap</A>&lt;K,V&gt; <B>newIdentityHashMap</B>()</PRE>
-<DL>
-<DD>Creates an <code>IdentityHashMap</code> instance.
-<P>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a new, empty <code>IdentityHashMap</code></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="synchronizedBiMap(com.google.common.collect.BiMap)"><!-- --></A><H3>
-synchronizedBiMap</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt; <B>synchronizedBiMap</B>(<A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt;&nbsp;bimap)</PRE>
-<DL>
-<DD>Returns a synchronized (thread-safe) bimap backed by the specified bimap.
- In order to guarantee serial access, it is critical that <b>all</b> access
- to the backing bimap is accomplished through the returned bimap.
-
- <p>It is imperative that the user manually synchronize on the returned map
- when accessing any of its collection views: <pre>   <code>BiMap&lt;Long, String&gt; map = Maps.synchronizedBiMap(
-       HashBiMap.&lt;Long, String&gt;create());
-    ...
-   Set&lt;Long&gt; set = map.keySet();  // Needn't be in synchronized block
-    ...
-   synchronized (map) {  // Synchronizing on map, not set!
-     Iterator&lt;Long&gt; it = set.iterator(); // Must be in synchronized block
-     while (it.hasNext()) {
-       foo(it.next());
-     }
-   }</code></pre>
-
- Failure to follow this advice may result in non-deterministic behavior.
-
- <p>The returned bimap will be serializable if the specified bimap is
- serializable.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>bimap</CODE> - the bimap to be wrapped in a synchronized view
-<DT><B>Returns:</B><DD>a sychronized view of the specified bimap</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="difference(java.util.Map, java.util.Map)"><!-- --></A><H3>
-difference</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/MapDifference.html" title="interface in com.google.common.collect">MapDifference</A>&lt;K,V&gt; <B>difference</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;left,
-                                                  <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;right)</PRE>
-<DL>
-<DD>Computes the difference between two maps. This difference is an immutable
- snapshot of the state of the maps at the time this method is called. It
- will never change, even if the maps change at a later time.
-
- <p>Since this method uses <code>HashMap</code> instances internally, the keys of
- the supplied maps must be well-behaved with respect to
- <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A> and <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang"><CODE>Object.hashCode()</CODE></A>.
-
- <p><b>Note:</b>If you only need to know whether two maps have the same
- mappings, call <code>left.equals(right)</code> instead of this method.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>left</CODE> - the map to treat as the "left" map for purposes of comparison<DD><CODE>right</CODE> - the map to treat as the "right" map for purposes of comparison
-<DT><B>Returns:</B><DD>the difference between the two maps</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="uniqueIndex(java.lang.Iterable, com.google.common.base.Function)"><!-- --></A><H3>
-uniqueIndex</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;K,V&gt; <B>uniqueIndex</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;V&gt;&nbsp;values,
-                                                  <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super V,K&gt;&nbsp;keyFunction)</PRE>
-<DL>
-<DD>Returns an immutable map for which the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#values()" title="class or interface in java.util"><CODE>Map.values()</CODE></A> are the given
- elements in the given order, and each key is the product of invoking a
- supplied function on its corresponding value.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>values</CODE> - the values to use when constructing the <code>Map</code><DD><CODE>keyFunction</CODE> - the function used to produce the key for each value
-<DT><B>Returns:</B><DD>a map mapping the result of evaluating the function <code>keyFunction</code> on each value in the input collection to that value
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>keyFunction</code> produces the same
-     key for more than one value in the input collection
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any elements of <code>values</code> is null, or
-     if <code>keyFunction</code> produces <code>null</code> for any value</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="fromProperties(java.util.Properties)"><!-- --></A><H3>
-fromProperties</H3>
-<PRE>
-public static <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&gt; <B>fromProperties</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Properties.html?is-external=true" title="class or interface in java.util">Properties</A>&nbsp;properties)</PRE>
-<DL>
-<DD>Creates an <code>ImmutableMap&lt;String, String&gt;</code> from a <code>Properties</code>
- instance. Properties normally derive from <code>Map&lt;Object, Object&gt;</code>, but
- they typically contain strings, which is awkward. This method lets you get
- a plain-old-<code>Map</code> out of a <code>Properties</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>properties</CODE> - a <code>Properties</code> object to be converted
-<DT><B>Returns:</B><DD>an immutable map containing all the entries in
-     <code>properties</code>
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassCastException.html?is-external=true" title="class or interface in java.lang">ClassCastException</A></CODE> - if any key in <code>Properties</code> is not a
-     <code>String</code>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any key or value in <code>Properties</code> is
-     null.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="immutableEntry(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="immutableEntry(K, V)"><!-- --></A><H3>
-immutableEntry</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;K,V&gt; <B>immutableEntry</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                                                  K&nbsp;key,
-                                                  <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                                                  V&nbsp;value)</PRE>
-<DL>
-<DD>Returns an immutable map entry with the specified key and value. The <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true#setValue(V)" title="class or interface in java.util"><CODE>Map.Entry.setValue(V)</CODE></A> operation throws an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang"><CODE>UnsupportedOperationException</CODE></A>.
-
- <p>The returned entry is serializable.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - the key to be associated with the returned entry<DD><CODE>value</CODE> - the value to be associated with the returned entry</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="unmodifiableBiMap(com.google.common.collect.BiMap)"><!-- --></A><H3>
-unmodifiableBiMap</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt; <B>unmodifiableBiMap</B>(<A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;? extends K,? extends V&gt;&nbsp;bimap)</PRE>
-<DL>
-<DD>Returns an unmodifiable view of the specified bimap. This method allows
- modules to provide users with "read-only" access to internal bimaps. Query
- operations on the returned bimap "read through" to the specified bimap, and
- attemps to modify the returned map, whether direct or via its collection
- views, result in an <code>UnsupportedOperationException</code>.
-
- <p>The returned bimap will be serializable if the specified bimap is
- serializable.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>bimap</CODE> - the bimap for which an unmodifiable view is to be returned
-<DT><B>Returns:</B><DD>an unmodifiable view of the specified bimap</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="transformValues(java.util.Map, com.google.common.base.Function)"><!-- --></A><H3>
-transformValues</H3>
-<PRE>
-public static &lt;K,V1,V2&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V2&gt; <B>transformValues</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V1&gt;&nbsp;fromMap,
-                                                  <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super V1,V2&gt;&nbsp;function)</PRE>
-<DL>
-<DD>Returns a view of a map where each value is transformed by a function. All
- other properties of the map, such as iteration order, are left intact. For
- example, the code:
- <pre>   <code>Map&lt;String, Integer&gt; map = ImmutableMap.of("a", 4, "b", 9);
-   Function&lt;Integer, Double&gt; sqrt = new Function&lt;Integer, Double&gt;() {
-     public Double apply(Integer in) {
-       return Math.sqrt((int) in);
-     }
-   };
-   Map&lt;String, Double&gt; transformed = Maps.transformValues(sqrt, map);
-   System.out.println(transformed);</code></pre>
-
- ... prints <code>{a=2.0, b=3.0}</code>.
-
- <p>Changes in the underlying map are reflected in this view. Conversely,
- this view supports removal operations, and these are reflected in the
- underlying map.
-
- <p>It's acceptable for the underlying map to contain null keys, and even
- null values provided that the function is capable of accepting null input.
- The transformed map might contain null values, if the function sometimes
- gives a null result.
-
- <p>The returned map is not thread-safe or serializable, even if the
- underlying map is.
-
- <p>The function is applied lazily, invoked when needed. This is necessary
- for the returned map to be a view, but it means that the function will be
- applied many times for bulk operations like <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsValue(java.lang.Object)" title="class or interface in java.util"><CODE>Map.containsValue(java.lang.Object)</CODE></A> and
- <code>Map.toString()</code>. For this to perform well, <code>function</code> should
- be fast. To avoid lazy evaluation when the returned map doesn't need to be
- a view, copy the returned map into a new map of your choosing.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="filterKeys(java.util.Map, com.google.common.base.Predicate)"><!-- --></A><H3>
-filterKeys</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt; <B>filterKeys</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;&nbsp;unfiltered,
-                                        <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super K&gt;&nbsp;keyPredicate)</PRE>
-<DL>
-<DD>Returns a map containing the mappings in <code>unfiltered</code> whose keys
- satisfy a predicate. The returned map is a live view of <code>unfiltered</code>;
- changes to one affect the other.
-
- <p>The resulting map's <code>keySet()</code>, <code>entrySet()</code>, and <code>values()</code> views have iterators that don't support <code>remove()</code>, but all
- other methods are supported by the map and its views. The map's <code>put()</code> and <code>putAll()</code> methods throw an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang"><CODE>IllegalArgumentException</CODE></A> if a key that doesn't satisfy the predicate is
- provided.
-
- <p>When methods such as <code>removeAll()</code> and <code>clear()</code> are called
- on the filtered map or its views, only mappings whose keys satisfy the
- filter will be removed from the underlying map.
-
- <p>The returned map isn't threadsafe or serializable, even if <code>unfiltered</code> is.
-
- <p>Many of the filtered map's methods, such as <code>size()</code>,
- iterate across every key/value mapping in the underlying map and determine
- which satisfy the filter. When a live view is <i>not</i> needed, it may be
- faster to copy the filtered map and use the copy.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="filterValues(java.util.Map, com.google.common.base.Predicate)"><!-- --></A><H3>
-filterValues</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt; <B>filterValues</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;&nbsp;unfiltered,
-                                          <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super V&gt;&nbsp;valuePredicate)</PRE>
-<DL>
-<DD>Returns a map containing the mappings in <code>unfiltered</code> whose values
- satisfy a predicate. The returned map is a live view of <code>unfiltered</code>;
- changes to one affect the other.
-
- <p>The resulting map's <code>keySet()</code>, <code>entrySet()</code>, and <code>values()</code> views have iterators that don't support <code>remove()</code>, but all
- other methods are supported by the map and its views. The <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#put(K, V)" title="class or interface in java.util"><CODE>Map.put(K, V)</CODE></A>,
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#putAll(java.util.Map)" title="class or interface in java.util"><CODE>Map.putAll(java.util.Map<? extends K, ? extends V>)</CODE></A>, and <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true#setValue(V)" title="class or interface in java.util"><CODE>Map.Entry.setValue(V)</CODE></A> methods throw an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang"><CODE>IllegalArgumentException</CODE></A> if a value that doesn't satisfy the predicate is
- provided.
-
- <p>When methods such as <code>removeAll()</code> and <code>clear()</code> are called
- on the filtered map or its views, only mappings whose values satisfy the
- filter will be removed from the underlying map.
-
- <p>The returned map isn't threadsafe or serializable, even if <code>unfiltered</code> is.
-
- <p>Many of the filtered map's methods, such as <code>size()</code>,
- iterate across every key/value mapping in the underlying map and determine
- which satisfy the filter. When a live view is <i>not</i> needed, it may be
- faster to copy the filtered map and use the copy.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="filterEntries(java.util.Map, com.google.common.base.Predicate)"><!-- --></A><H3>
-filterEntries</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt; <B>filterEntries</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;&nbsp;unfiltered,
-                                           <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;K,V&gt;&gt;&nbsp;entryPredicate)</PRE>
-<DL>
-<DD>Returns a map containing the mappings in <code>unfiltered</code> that satisfy a
- predicate. The returned map is a live view of <code>unfiltered</code>; changes
- to one affect the other.
-
- <p>The resulting map's <code>keySet()</code>, <code>entrySet()</code>, and <code>values()</code> views have iterators that don't support <code>remove()</code>, but all
- other methods are supported by the map and its views. The map's <code>put()</code> and <code>putAll()</code> methods throw an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang"><CODE>IllegalArgumentException</CODE></A> if a key/value pair that doesn't satisfy the
- predicate is provided. Similarly, the map's entries have a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true#setValue(V)" title="class or interface in java.util"><CODE>Map.Entry.setValue(V)</CODE></A> method that throws an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang"><CODE>IllegalArgumentException</CODE></A> when
- the existing key and the provided value don't satisfy the predicate.
-
- <p>When methods such as <code>removeAll()</code> and <code>clear()</code> are called
- on the filtered map or its views, only mappings that satisfy the filter
- will be removed from the underlying map.
-
- <p>The returned map isn't threadsafe or serializable, even if <code>unfiltered</code> is.
-
- <p>Many of the filtered map's methods, such as <code>size()</code>,
- iterate across every key/value mapping in the underlying map and determine
- which satisfy the filter. When a live view is <i>not</i> needed, it may be
- faster to copy the filtered map and use the copy.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Maps.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/Maps.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Maps.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/Multimap.html b/javadoc/com/google/common/collect/Multimap.html
deleted file mode 100644
index c8f74e3..0000000
--- a/javadoc/com/google/common/collect/Multimap.html
+++ /dev/null
@@ -1,749 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:59 PST 2010 -->
-<TITLE>
-Multimap (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Multimap (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Multimap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/Maps.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/Multimaps.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/Multimap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Multimap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Interface Multimap&lt;K,V&gt;</H2>
-<DL>
-<DT><DT><B>Type Parameters:</B><DD><CODE>K</CODE> - the type of keys maintained by this multimap<DD><CODE>V</CODE> - the type of mapped values</DL>
-<DL>
-<DT><B>All Known Subinterfaces:</B> <DD><A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;, <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;, <A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt;</DD>
-</DL>
-<DL>
-<DT><B>All Known Implementing Classes:</B> <DD><A HREF="../../../../com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect">ArrayListMultimap</A>, <A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect">ForwardingMultimap</A>, <A HREF="../../../../com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect">HashMultimap</A>, <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>, <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>, <A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect">LinkedHashMultimap</A>, <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>, <A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">TreeMultimap</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public interface <B>Multimap&lt;K,V&gt;</B></DL>
-</PRE>
-
-<P>
-A collection similar to a <code>Map</code>, but which may associate multiple
- values with a single key. If you call <A HREF="../../../../com/google/common/collect/Multimap.html#put(K, V)"><CODE>put(K, V)</CODE></A> twice, with the same key
- but different values, the multimap contains mappings from the key to both
- values.
-
- <p>The methods <A HREF="../../../../com/google/common/collect/Multimap.html#get(K)"><CODE>get(K)</CODE></A>, <A HREF="../../../../com/google/common/collect/Multimap.html#keySet()"><CODE>keySet()</CODE></A>, <A HREF="../../../../com/google/common/collect/Multimap.html#keys()"><CODE>keys()</CODE></A>, <A HREF="../../../../com/google/common/collect/Multimap.html#values()"><CODE>values()</CODE></A>,
- <A HREF="../../../../com/google/common/collect/Multimap.html#entries()"><CODE>entries()</CODE></A>, and <A HREF="../../../../com/google/common/collect/Multimap.html#asMap()"><CODE>asMap()</CODE></A> return collections that are views of the
- multimap. If the multimap is modifiable, updating it can change the contents
- of those collections, and updating the collections will change the multimap.
- In contrast, <A HREF="../../../../com/google/common/collect/Multimap.html#replaceValues(K, java.lang.Iterable)"><CODE>replaceValues(K, java.lang.Iterable<? extends V>)</CODE></A> and <A HREF="../../../../com/google/common/collect/Multimap.html#removeAll(java.lang.Object)"><CODE>removeAll(java.lang.Object)</CODE></A> return collections
- that are independent of subsequent multimap changes.
-
- <p>Depending on the implementation, a multimap may or may not allow duplicate
- key-value pairs. In other words, the multimap contents after adding the same
- key and value twice varies between implementations. In multimaps allowing
- duplicates, the multimap will contain two mappings, and <code>get</code> will
- return a collection that includes the value twice. In multimaps not
- supporting duplicates, the multimap will contain a single mapping from the
- key to the value, and <code>get</code> will return a collection that includes the
- value once.
-
- <p>All methods that alter the multimap are optional, and the views returned
- by the multimap may or may not be modifiable. When modification isn't
- supported, those methods will throw an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang"><CODE>UnsupportedOperationException</CODE></A>.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Jared Levy</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">V</A>&gt;&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimap.html#asMap()">asMap</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a map view that associates each key with the corresponding values
- in the multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimap.html#clear()">clear</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes all key-value pairs from the multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimap.html#containsEntry(java.lang.Object, java.lang.Object)">containsEntry</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
-              <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains the specified key-value pair.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimap.html#containsKey(java.lang.Object)">containsKey</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains any values for the specified
- key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimap.html#containsValue(java.lang.Object)">containsValue</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains the specified value for any
- key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">K</A>,<A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">V</A>&gt;&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimap.html#entries()">entries</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection of all key-value pairs.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimap.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;obj)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares the specified object with this multimap for equality.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimap.html#get(K)">get</A></B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">K</A>&nbsp;key)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection view of all values associated with a key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimap.html#hashCode()">hashCode</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the hash code for this multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimap.html#isEmpty()">isEmpty</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains no key-value pairs.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">K</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimap.html#keys()">keys</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection, which may contain duplicates, of all keys.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">K</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimap.html#keySet()">keySet</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the set of all keys, each appearing once in the returned set.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimap.html#put(K, V)">put</A></B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">K</A>&nbsp;key,
-    <A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">V</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a key-value pair in the multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimap.html#putAll(K, java.lang.Iterable)">putAll</A></B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">K</A>&nbsp;key,
-       <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">V</A>&gt;&nbsp;values)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a collection of values with the same key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimap.html#putAll(com.google.common.collect.Multimap)">putAll</A></B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends <A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">K</A>,? extends <A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">V</A>&gt;&nbsp;multimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies all of another multimap's key-value pairs into this multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimap.html#remove(java.lang.Object, java.lang.Object)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
-       <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes a key-value pair from the multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimap.html#removeAll(java.lang.Object)">removeAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes all values associated with a given key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">K</A>&nbsp;key,
-              <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">V</A>&gt;&nbsp;values)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a collection of values with the same key, replacing any existing
- values for that key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimap.html#size()">size</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of key-value pairs in the multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimap.html#values()">values</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection of all values in the multimap.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="size()"><!-- --></A><H3>
-size</H3>
-<PRE>
-int <B>size</B>()</PRE>
-<DL>
-<DD>Returns the number of key-value pairs in the multimap.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="isEmpty()"><!-- --></A><H3>
-isEmpty</H3>
-<PRE>
-boolean <B>isEmpty</B>()</PRE>
-<DL>
-<DD>Returns <code>true</code> if the multimap contains no key-value pairs.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="containsKey(java.lang.Object)"><!-- --></A><H3>
-containsKey</H3>
-<PRE>
-boolean <B>containsKey</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                    <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
-<DL>
-<DD>Returns <code>true</code> if the multimap contains any values for the specified
- key.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to search for in multimap</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="containsValue(java.lang.Object)"><!-- --></A><H3>
-containsValue</H3>
-<PRE>
-boolean <B>containsValue</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                      <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
-<DL>
-<DD>Returns <code>true</code> if the multimap contains the specified value for any
- key.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>value</CODE> - value to search for in multimap</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="containsEntry(java.lang.Object, java.lang.Object)"><!-- --></A><H3>
-containsEntry</H3>
-<PRE>
-boolean <B>containsEntry</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                      <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
-                      <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                      <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
-<DL>
-<DD>Returns <code>true</code> if the multimap contains the specified key-value pair.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to search for in multimap<DD><CODE>value</CODE> - value to search for in multimap</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="put(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="put(K, V)"><!-- --></A><H3>
-put</H3>
-<PRE>
-boolean <B>put</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-            <A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">K</A>&nbsp;key,
-            <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-            <A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">V</A>&nbsp;value)</PRE>
-<DL>
-<DD>Stores a key-value pair in the multimap.
-
- <p>Some multimap implementations allow duplicate key-value pairs, in which
- case <code>put</code> always adds a new key-value pair and increases the
- multimap size by 1. Other implementations prohibit duplicates, and storing
- a key-value pair that's already in the multimap has no effect.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to store in the multimap<DD><CODE>value</CODE> - value to store in the multimap
-<DT><B>Returns:</B><DD><code>true</code> if the method increased the size of the multimap, or
-     <code>false</code> if the multimap already contained the key-value pair and
-     doesn't allow duplicates</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="remove(java.lang.Object, java.lang.Object)"><!-- --></A><H3>
-remove</H3>
-<PRE>
-boolean <B>remove</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-               <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
-               <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-               <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
-<DL>
-<DD>Removes a key-value pair from the multimap.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key of entry to remove from the multimap<DD><CODE>value</CODE> - value of entry to remove the multimap
-<DT><B>Returns:</B><DD><code>true</code> if the multimap changed</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="putAll(java.lang.Object,java.lang.Iterable)"><!-- --></A><A NAME="putAll(K, java.lang.Iterable)"><!-- --></A><H3>
-putAll</H3>
-<PRE>
-boolean <B>putAll</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-               <A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">K</A>&nbsp;key,
-               <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">V</A>&gt;&nbsp;values)</PRE>
-<DL>
-<DD>Stores a collection of values with the same key.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to store in the multimap<DD><CODE>values</CODE> - values to store in the multimap
-<DT><B>Returns:</B><DD><code>true</code> if the multimap changed</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="putAll(com.google.common.collect.Multimap)"><!-- --></A><H3>
-putAll</H3>
-<PRE>
-boolean <B>putAll</B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends <A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">K</A>,? extends <A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">V</A>&gt;&nbsp;multimap)</PRE>
-<DL>
-<DD>Copies all of another multimap's key-value pairs into this multimap. The
- order in which the mappings are added is determined by
- <code>multimap.entries()</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>multimap</CODE> - mappings to store in this multimap
-<DT><B>Returns:</B><DD><code>true</code> if the multimap changed</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="replaceValues(java.lang.Object,java.lang.Iterable)"><!-- --></A><A NAME="replaceValues(K, java.lang.Iterable)"><!-- --></A><H3>
-replaceValues</H3>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">V</A>&gt; <B>replaceValues</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                            <A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">K</A>&nbsp;key,
-                            <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">V</A>&gt;&nbsp;values)</PRE>
-<DL>
-<DD>Stores a collection of values with the same key, replacing any existing
- values for that key.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to store in the multimap<DD><CODE>values</CODE> - values to store in the multimap
-<DT><B>Returns:</B><DD>the collection of replaced values, or an empty collection if no
-     values were previously associated with the key. The collection
-     <i>may</i> be modifiable, but updating it will have no effect on the
-     multimap.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="removeAll(java.lang.Object)"><!-- --></A><H3>
-removeAll</H3>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">V</A>&gt; <B>removeAll</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                        <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
-<DL>
-<DD>Removes all values associated with a given key.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key of entries to remove from the multimap
-<DT><B>Returns:</B><DD>the collection of removed values, or an empty collection if no
-     values were associated with the provided key. The collection
-     <i>may</i> be modifiable, but updating it will have no effect on the
-     multimap.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="clear()"><!-- --></A><H3>
-clear</H3>
-<PRE>
-void <B>clear</B>()</PRE>
-<DL>
-<DD>Removes all key-value pairs from the multimap.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="get(java.lang.Object)"><!-- --></A><A NAME="get(K)"><!-- --></A><H3>
-get</H3>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">V</A>&gt; <B>get</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                  <A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">K</A>&nbsp;key)</PRE>
-<DL>
-<DD>Returns a collection view of all values associated with a key. If no
- mappings in the multimap have the provided key, an empty collection is
- returned.
-
- <p>Changes to the returned collection will update the underlying multimap,
- and vice versa.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to search for in multimap
-<DT><B>Returns:</B><DD>the collection of values that the key maps to</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="keySet()"><!-- --></A><H3>
-keySet</H3>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">K</A>&gt; <B>keySet</B>()</PRE>
-<DL>
-<DD>Returns the set of all keys, each appearing once in the returned set.
- Changes to the returned set will update the underlying multimap, and vice
- versa.
-<P>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>the collection of distinct keys</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="keys()"><!-- --></A><H3>
-keys</H3>
-<PRE>
-<A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">K</A>&gt; <B>keys</B>()</PRE>
-<DL>
-<DD>Returns a collection, which may contain duplicates, of all keys. The number
- of times of key appears in the returned multiset equals the number of
- mappings the key has in the multimap. Changes to the returned multiset will
- update the underlying multimap, and vice versa.
-<P>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a multiset with keys corresponding to the distinct keys of the
-     multimap and frequencies corresponding to the number of values that
-     each key maps to</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="values()"><!-- --></A><H3>
-values</H3>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">V</A>&gt; <B>values</B>()</PRE>
-<DL>
-<DD>Returns a collection of all values in the multimap. Changes to the returned
- collection will update the underlying multimap, and vice versa.
-<P>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>collection of values, which may include the same value multiple
-     times if it occurs in multiple mappings</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="entries()"><!-- --></A><H3>
-entries</H3>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">K</A>,<A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">V</A>&gt;&gt; <B>entries</B>()</PRE>
-<DL>
-<DD>Returns a collection of all key-value pairs. Changes to the returned
- collection will update the underlying multimap, and vice versa. The entries
- collection does not support the <code>add</code> or <code>addAll</code> operations.
-<P>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>collection of map entries consisting of key-value pairs</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="asMap()"><!-- --></A><H3>
-asMap</H3>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">V</A>&gt;&gt; <B>asMap</B>()</PRE>
-<DL>
-<DD>Returns a map view that associates each key with the corresponding values
- in the multimap. Changes to the returned map, such as element removal,
- will update the underlying multimap. The map does not support
- <code>setValue()</code> on its entries, <code>put</code>, or <code>putAll</code>.
-
- <p>The collections returned by <code>asMap().get(Object)</code> have the same
- behavior as those returned by <A HREF="../../../../com/google/common/collect/Multimap.html#get(K)"><CODE>get(K)</CODE></A>.
-<P>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a map view from a key to its collection of values</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
-equals</H3>
-<PRE>
-boolean <B>equals</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-               <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;obj)</PRE>
-<DL>
-<DD>Compares the specified object with this multimap for equality. Two
- multimaps are equal when their map views, as returned by <A HREF="../../../../com/google/common/collect/Multimap.html#asMap()"><CODE>asMap()</CODE></A>,
- are also equal.
-
- <p>In general, two multimaps with identical key-value mappings may or may
- not be equal, depending on the implementation. For example, two
- <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect"><CODE>SetMultimap</CODE></A> instances with the same key-value mappings are equal,
- but equality of two <A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect"><CODE>ListMultimap</CODE></A> instances depends on the ordering
- of the values for each key.
-
- <p>A non-empty <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect"><CODE>SetMultimap</CODE></A> cannot be equal to a non-empty
- <A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect"><CODE>ListMultimap</CODE></A>, since their <A HREF="../../../../com/google/common/collect/Multimap.html#asMap()"><CODE>asMap()</CODE></A> views contain unequal
- collections as values. However, any two empty multimaps are equal, because
- they both have empty <A HREF="../../../../com/google/common/collect/Multimap.html#asMap()"><CODE>asMap()</CODE></A> views.
-<P>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="hashCode()"><!-- --></A><H3>
-hashCode</H3>
-<PRE>
-int <B>hashCode</B>()</PRE>
-<DL>
-<DD>Returns the hash code for this multimap.
-
- <p>The hash code of a multimap is defined as the hash code of the map view,
- as returned by <A HREF="../../../../com/google/common/collect/Multimap.html#asMap()"><CODE>asMap()</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Multimap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/Maps.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/Multimaps.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/Multimap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Multimap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/Multimaps.html b/javadoc/com/google/common/collect/Multimaps.html
deleted file mode 100644
index 0b9bd84..0000000
--- a/javadoc/com/google/common/collect/Multimaps.html
+++ /dev/null
@@ -1,916 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:59 PST 2010 -->
-<TITLE>
-Multimaps (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Multimaps (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Multimaps.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/Multimaps.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Multimaps.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class Multimaps</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.Multimaps</B>
-</PRE>
-<HR>
-<DL>
-<DT><PRE>public final class <B>Multimaps</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
-</PRE>
-
-<P>
-Provides static methods acting on or generating a <code>Multimap</code>.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Jared Levy, Robert Konigsberg, Mike Bostock</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimaps.html#forMap(java.util.Map)">forMap</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;&nbsp;map)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a multimap view of the specified map.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimaps.html#index(java.lang.Iterable, com.google.common.base.Function)">index</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;V&gt;&nbsp;values,
-      <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super V,K&gt;&nbsp;keyFunction)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an index <code>ImmutableMultimap</code> that contains the results of
- applying a specified function to each item in an <code>Iterable</code> of
- values.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V,M extends <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;&gt; 
-<BR>
-M</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimaps.html#invertFrom(com.google.common.collect.Multimap, M)">invertFrom</A></B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends V,? extends K&gt;&nbsp;source,
-           M&nbsp;dest)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies each key-value mapping in <code>source</code> into <code>dest</code>, with
- its key and value reversed.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimaps.html#newListMultimap(java.util.Map, com.google.common.base.Supplier)">newListMultimap</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt;&nbsp;map,
-                <A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;V&gt;&gt;&nbsp;factory)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>ListMultimap</code> that uses the provided map and factory.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimaps.html#newMultimap(java.util.Map, com.google.common.base.Supplier)">newMultimap</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt;&nbsp;map,
-            <A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt;&nbsp;factory)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>Multimap</code> that uses the provided map and factory.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimaps.html#newSetMultimap(java.util.Map, com.google.common.base.Supplier)">newSetMultimap</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt;&nbsp;map,
-               <A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;V&gt;&gt;&nbsp;factory)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>SetMultimap</code> that uses the provided map and factory.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimaps.html#newSortedSetMultimap(java.util.Map, com.google.common.base.Supplier)">newSortedSetMultimap</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt;&nbsp;map,
-                     <A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;V&gt;&gt;&nbsp;factory)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>SortedSetMultimap</code> that uses the provided map and
- factory.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimaps.html#synchronizedListMultimap(com.google.common.collect.ListMultimap)">synchronizedListMultimap</A></B>(<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;&nbsp;multimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a synchronized (thread-safe) <code>ListMultimap</code> backed by the
- specified multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimaps.html#synchronizedMultimap(com.google.common.collect.Multimap)">synchronizedMultimap</A></B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;&nbsp;multimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a synchronized (thread-safe) multimap backed by the specified
- multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimaps.html#synchronizedSetMultimap(com.google.common.collect.SetMultimap)">synchronizedSetMultimap</A></B>(<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;&nbsp;multimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a synchronized (thread-safe) <code>SetMultimap</code> backed by the
- specified multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimaps.html#synchronizedSortedSetMultimap(com.google.common.collect.SortedSetMultimap)">synchronizedSortedSetMultimap</A></B>(<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt;&nbsp;multimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a synchronized (thread-safe) <code>SortedSetMultimap</code> backed by
- the specified multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimaps.html#unmodifiableListMultimap(com.google.common.collect.ListMultimap)">unmodifiableListMultimap</A></B>(<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;&nbsp;delegate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable view of the specified <code>ListMultimap</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimaps.html#unmodifiableMultimap(com.google.common.collect.Multimap)">unmodifiableMultimap</A></B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;&nbsp;delegate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable view of the specified multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimaps.html#unmodifiableSetMultimap(com.google.common.collect.SetMultimap)">unmodifiableSetMultimap</A></B>(<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;&nbsp;delegate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable view of the specified <code>SetMultimap</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multimaps.html#unmodifiableSortedSetMultimap(com.google.common.collect.SortedSetMultimap)">unmodifiableSortedSetMultimap</A></B>(<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt;&nbsp;delegate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable view of the specified <code>SortedSetMultimap</code>.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="newMultimap(java.util.Map, com.google.common.base.Supplier)"><!-- --></A><H3>
-newMultimap</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt; <B>newMultimap</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt;&nbsp;map,
-                                              <A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt;&nbsp;factory)</PRE>
-<DL>
-<DD>Creates a new <code>Multimap</code> that uses the provided map and factory. It
- can generate a multimap based on arbitrary <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A> and
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A> classes.
-
- <p>The <code>factory</code>-generated and <code>map</code> classes determine the
- multimap iteration order. They also specify the behavior of the
- <code>equals</code>, <code>hashCode</code>, and <code>toString</code> methods for the
- multimap and its returned views. However, the multimap's <code>get</code>
- method returns instances of a different class than <code>factory.get()</code>
- does.
-
- <p>The multimap is serializable if <code>map</code>, <code>factory</code>, the
- collections generated by <code>factory</code>, and the multimap contents are all
- serializable.
-
- <p>The multimap is not threadsafe when any concurrent operations update the
- multimap, even if <code>map</code> and the instances generated by
- <code>factory</code> are. Concurrent read operations will work correctly. To
- allow concurrent update operations, wrap the multimap with a call to
- <A HREF="../../../../com/google/common/collect/Multimaps.html#synchronizedMultimap(com.google.common.collect.Multimap)"><CODE>synchronizedMultimap(com.google.common.collect.Multimap<K, V>)</CODE></A>.
-
- <p>Call this method only when the simpler methods
- <A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#create()"><CODE>ArrayListMultimap.create()</CODE></A>, <A HREF="../../../../com/google/common/collect/HashMultimap.html#create()"><CODE>HashMultimap.create()</CODE></A>,
- <A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html#create()"><CODE>LinkedHashMultimap.create()</CODE></A>, <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#create()"><CODE>LinkedListMultimap.create()</CODE></A>,
- <A HREF="../../../../com/google/common/collect/TreeMultimap.html#create()"><CODE>TreeMultimap.create()</CODE></A>, and
- <A HREF="../../../../com/google/common/collect/TreeMultimap.html#create(java.util.Comparator, java.util.Comparator)"><CODE>TreeMultimap.create(Comparator, Comparator)</CODE></A> won't suffice.
-
- <p>Note: the multimap assumes complete ownership over of <code>map</code> and
- the collections returned by <code>factory</code>. Those objects should not be
- manually updated and they should not use soft, weak, or phantom references.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>map</CODE> - place to store the mapping from each key to its corresponding
-     values<DD><CODE>factory</CODE> - supplier of new, empty collections that will each hold all
-     values for a given key
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>map</code> is not empty</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="newListMultimap(java.util.Map, com.google.common.base.Supplier)"><!-- --></A><H3>
-newListMultimap</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt; <B>newListMultimap</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt;&nbsp;map,
-                                                      <A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;V&gt;&gt;&nbsp;factory)</PRE>
-<DL>
-<DD>Creates a new <code>ListMultimap</code> that uses the provided map and factory.
- It can generate a multimap based on arbitrary <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A> and <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util"><CODE>List</CODE></A>
- classes.
-
- <p>The <code>factory</code>-generated and <code>map</code> classes determine the
- multimap iteration order. They also specify the behavior of the
- <code>equals</code>, <code>hashCode</code>, and <code>toString</code> methods for the
- multimap and its returned views. The multimap's <code>get</code>, <code>removeAll</code>, and <code>replaceValues</code> methods return <code>RandomAccess</code>
- lists if the factory does. However, the multimap's <code>get</code> method
- returns instances of a different class than does <code>factory.get()</code>.
-
- <p>The multimap is serializable if <code>map</code>, <code>factory</code>, the
- lists generated by <code>factory</code>, and the multimap contents are all
- serializable.
-
- <p>The multimap is not threadsafe when any concurrent operations update the
- multimap, even if <code>map</code> and the instances generated by
- <code>factory</code> are. Concurrent read operations will work correctly. To
- allow concurrent update operations, wrap the multimap with a call to
- <A HREF="../../../../com/google/common/collect/Multimaps.html#synchronizedListMultimap(com.google.common.collect.ListMultimap)"><CODE>synchronizedListMultimap(com.google.common.collect.ListMultimap<K, V>)</CODE></A>.
-
- <p>Call this method only when the simpler methods
- <A HREF="../../../../com/google/common/collect/ArrayListMultimap.html#create()"><CODE>ArrayListMultimap.create()</CODE></A> and <A HREF="../../../../com/google/common/collect/LinkedListMultimap.html#create()"><CODE>LinkedListMultimap.create()</CODE></A>
- won't suffice.
-
- <p>Note: the multimap assumes complete ownership over of <code>map</code> and
- the lists returned by <code>factory</code>. Those objects should not be manually
- updated and they should not use soft, weak, or phantom references.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>map</CODE> - place to store the mapping from each key to its corresponding
-     values<DD><CODE>factory</CODE> - supplier of new, empty lists that will each hold all values
-     for a given key
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>map</code> is not empty</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="newSetMultimap(java.util.Map, com.google.common.base.Supplier)"><!-- --></A><H3>
-newSetMultimap</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt; <B>newSetMultimap</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt;&nbsp;map,
-                                                    <A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;V&gt;&gt;&nbsp;factory)</PRE>
-<DL>
-<DD>Creates a new <code>SetMultimap</code> that uses the provided map and factory.
- It can generate a multimap based on arbitrary <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A> and <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A>
- classes.
-
- <p>The <code>factory</code>-generated and <code>map</code> classes determine the
- multimap iteration order. They also specify the behavior of the
- <code>equals</code>, <code>hashCode</code>, and <code>toString</code> methods for the
- multimap and its returned views. However, the multimap's <code>get</code>
- method returns instances of a different class than <code>factory.get()</code>
- does.
-
- <p>The multimap is serializable if <code>map</code>, <code>factory</code>, the
- sets generated by <code>factory</code>, and the multimap contents are all
- serializable.
-
- <p>The multimap is not threadsafe when any concurrent operations update the
- multimap, even if <code>map</code> and the instances generated by
- <code>factory</code> are. Concurrent read operations will work correctly. To
- allow concurrent update operations, wrap the multimap with a call to
- <A HREF="../../../../com/google/common/collect/Multimaps.html#synchronizedSetMultimap(com.google.common.collect.SetMultimap)"><CODE>synchronizedSetMultimap(com.google.common.collect.SetMultimap<K, V>)</CODE></A>.
-
- <p>Call this method only when the simpler methods
- <A HREF="../../../../com/google/common/collect/HashMultimap.html#create()"><CODE>HashMultimap.create()</CODE></A>, <A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html#create()"><CODE>LinkedHashMultimap.create()</CODE></A>,
- <A HREF="../../../../com/google/common/collect/TreeMultimap.html#create()"><CODE>TreeMultimap.create()</CODE></A>, and
- <A HREF="../../../../com/google/common/collect/TreeMultimap.html#create(java.util.Comparator, java.util.Comparator)"><CODE>TreeMultimap.create(Comparator, Comparator)</CODE></A> won't suffice.
-
- <p>Note: the multimap assumes complete ownership over of <code>map</code> and
- the sets returned by <code>factory</code>. Those objects should not be manually
- updated and they should not use soft, weak, or phantom references.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>map</CODE> - place to store the mapping from each key to its corresponding
-     values<DD><CODE>factory</CODE> - supplier of new, empty sets that will each hold all values
-     for a given key
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>map</code> is not empty</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="newSortedSetMultimap(java.util.Map, com.google.common.base.Supplier)"><!-- --></A><H3>
-newSortedSetMultimap</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt; <B>newSortedSetMultimap</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt;&nbsp;map,
-                                                                <A HREF="../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;V&gt;&gt;&nbsp;factory)</PRE>
-<DL>
-<DD>Creates a new <code>SortedSetMultimap</code> that uses the provided map and
- factory. It can generate a multimap based on arbitrary <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A> and
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util"><CODE>SortedSet</CODE></A> classes.
-
- <p>The <code>factory</code>-generated and <code>map</code> classes determine the
- multimap iteration order. They also specify the behavior of the
- <code>equals</code>, <code>hashCode</code>, and <code>toString</code> methods for the
- multimap and its returned views. However, the multimap's <code>get</code>
- method returns instances of a different class than <code>factory.get()</code>
- does.
-
- <p>The multimap is serializable if <code>map</code>, <code>factory</code>, the
- sets generated by <code>factory</code>, and the multimap contents are all
- serializable.
-
- <p>The multimap is not threadsafe when any concurrent operations update the
- multimap, even if <code>map</code> and the instances generated by
- <code>factory</code> are. Concurrent read operations will work correctly. To
- allow concurrent update operations, wrap the multimap with a call to
- <A HREF="../../../../com/google/common/collect/Multimaps.html#synchronizedSortedSetMultimap(com.google.common.collect.SortedSetMultimap)"><CODE>synchronizedSortedSetMultimap(com.google.common.collect.SortedSetMultimap<K, V>)</CODE></A>.
-
- <p>Call this method only when the simpler methods
- <A HREF="../../../../com/google/common/collect/TreeMultimap.html#create()"><CODE>TreeMultimap.create()</CODE></A> and
- <A HREF="../../../../com/google/common/collect/TreeMultimap.html#create(java.util.Comparator, java.util.Comparator)"><CODE>TreeMultimap.create(Comparator, Comparator)</CODE></A> won't suffice.
-
- <p>Note: the multimap assumes complete ownership over of <code>map</code> and
- the sets returned by <code>factory</code>. Those objects should not be manually
- updated and they should not use soft, weak, or phantom references.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>map</CODE> - place to store the mapping from each key to its corresponding
-     values<DD><CODE>factory</CODE> - supplier of new, empty sorted sets that will each hold
-     all values for a given key
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>map</code> is not empty</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="invertFrom(com.google.common.collect.Multimap,com.google.common.collect.Multimap)"><!-- --></A><A NAME="invertFrom(com.google.common.collect.Multimap, M)"><!-- --></A><H3>
-invertFrom</H3>
-<PRE>
-public static &lt;K,V,M extends <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;&gt; M <B>invertFrom</B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends V,? extends K&gt;&nbsp;source,
-                                                         M&nbsp;dest)</PRE>
-<DL>
-<DD>Copies each key-value mapping in <code>source</code> into <code>dest</code>, with
- its key and value reversed.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>source</CODE> - any multimap<DD><CODE>dest</CODE> - the multimap to copy into; usually empty
-<DT><B>Returns:</B><DD><code>dest</code></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="synchronizedMultimap(com.google.common.collect.Multimap)"><!-- --></A><H3>
-synchronizedMultimap</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt; <B>synchronizedMultimap</B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;&nbsp;multimap)</PRE>
-<DL>
-<DD>Returns a synchronized (thread-safe) multimap backed by the specified
- multimap. In order to guarantee serial access, it is critical that
- <b>all</b> access to the backing multimap is accomplished through the
- returned multimap.
-
- <p>It is imperative that the user manually synchronize on the returned
- multimap when accessing any of its collection views: <pre>  <code>Multimap&lt;K, V&gt; m = Multimaps.synchronizedMultimap(
-      HashMultimap.&lt;K, V&gt;create());
-  ...
-  Set&lt;K&gt; s = m.keySet();  // Needn't be in synchronized block
-  ...
-  synchronized (m) {  // Synchronizing on m, not s!
-    Iterator&lt;K&gt; i = s.iterator(); // Must be in synchronized block
-    while (i.hasNext()) {
-      foo(i.next());
-    }
-  }</code></pre>
-
- Failure to follow this advice may result in non-deterministic behavior.
-
- <p>Note that the generated multimap's <A HREF="../../../../com/google/common/collect/Multimap.html#removeAll(java.lang.Object)"><CODE>Multimap.removeAll(java.lang.Object)</CODE></A> and
- <A HREF="../../../../com/google/common/collect/Multimap.html#replaceValues(K, java.lang.Iterable)"><CODE>Multimap.replaceValues(K, java.lang.Iterable<? extends V>)</CODE></A> methods return collections that aren't
- synchronized.
-
- <p>The returned multimap will be serializable if the specified multimap is
- serializable.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>multimap</CODE> - the multimap to be wrapped in a synchronized view
-<DT><B>Returns:</B><DD>a synchronized view of the specified multimap</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="unmodifiableMultimap(com.google.common.collect.Multimap)"><!-- --></A><H3>
-unmodifiableMultimap</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt; <B>unmodifiableMultimap</B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;&nbsp;delegate)</PRE>
-<DL>
-<DD>Returns an unmodifiable view of the specified multimap. Query operations on
- the returned multimap "read through" to the specified multimap, and
- attempts to modify the returned multimap, either directly or through the
- multimap's views, result in an <code>UnsupportedOperationException</code>.
-
- <p>Note that the generated multimap's <A HREF="../../../../com/google/common/collect/Multimap.html#removeAll(java.lang.Object)"><CODE>Multimap.removeAll(java.lang.Object)</CODE></A> and
- <A HREF="../../../../com/google/common/collect/Multimap.html#replaceValues(K, java.lang.Iterable)"><CODE>Multimap.replaceValues(K, java.lang.Iterable<? extends V>)</CODE></A> methods return collections that are
- modifiable.
-
- <p>The returned multimap will be serializable if the specified multimap is
- serializable.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>delegate</CODE> - the multimap for which an unmodifiable view is to be
-     returned
-<DT><B>Returns:</B><DD>an unmodifiable view of the specified multimap</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="synchronizedSetMultimap(com.google.common.collect.SetMultimap)"><!-- --></A><H3>
-synchronizedSetMultimap</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt; <B>synchronizedSetMultimap</B>(<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;&nbsp;multimap)</PRE>
-<DL>
-<DD>Returns a synchronized (thread-safe) <code>SetMultimap</code> backed by the
- specified multimap.
-
- <p>You must follow the warnings described in <A HREF="../../../../com/google/common/collect/Multimaps.html#synchronizedMultimap(com.google.common.collect.Multimap)"><CODE>synchronizedMultimap(com.google.common.collect.Multimap<K, V>)</CODE></A>.
-
- <p>The returned multimap will be serializable if the specified multimap is
- serializable.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>multimap</CODE> - the multimap to be wrapped
-<DT><B>Returns:</B><DD>a synchronized view of the specified multimap</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="unmodifiableSetMultimap(com.google.common.collect.SetMultimap)"><!-- --></A><H3>
-unmodifiableSetMultimap</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt; <B>unmodifiableSetMultimap</B>(<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;&nbsp;delegate)</PRE>
-<DL>
-<DD>Returns an unmodifiable view of the specified <code>SetMultimap</code>. Query
- operations on the returned multimap "read through" to the specified
- multimap, and attempts to modify the returned multimap, either directly or
- through the multimap's views, result in an
- <code>UnsupportedOperationException</code>.
-
- <p>Note that the generated multimap's <A HREF="../../../../com/google/common/collect/Multimap.html#removeAll(java.lang.Object)"><CODE>Multimap.removeAll(java.lang.Object)</CODE></A> and
- <A HREF="../../../../com/google/common/collect/Multimap.html#replaceValues(K, java.lang.Iterable)"><CODE>Multimap.replaceValues(K, java.lang.Iterable<? extends V>)</CODE></A> methods return collections that are
- modifiable.
-
- <p>The returned multimap will be serializable if the specified multimap is
- serializable.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>delegate</CODE> - the multimap for which an unmodifiable view is to be
-     returned
-<DT><B>Returns:</B><DD>an unmodifiable view of the specified multimap</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="synchronizedSortedSetMultimap(com.google.common.collect.SortedSetMultimap)"><!-- --></A><H3>
-synchronizedSortedSetMultimap</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt; <B>synchronizedSortedSetMultimap</B>(<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt;&nbsp;multimap)</PRE>
-<DL>
-<DD>Returns a synchronized (thread-safe) <code>SortedSetMultimap</code> backed by
- the specified multimap.
-
- <p>You must follow the warnings described in <A HREF="../../../../com/google/common/collect/Multimaps.html#synchronizedMultimap(com.google.common.collect.Multimap)"><CODE>synchronizedMultimap(com.google.common.collect.Multimap<K, V>)</CODE></A>.
-
- <p>The returned multimap will be serializable if the specified multimap is
- serializable.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>multimap</CODE> - the multimap to be wrapped
-<DT><B>Returns:</B><DD>a synchronized view of the specified multimap</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="unmodifiableSortedSetMultimap(com.google.common.collect.SortedSetMultimap)"><!-- --></A><H3>
-unmodifiableSortedSetMultimap</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt; <B>unmodifiableSortedSetMultimap</B>(<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt;&nbsp;delegate)</PRE>
-<DL>
-<DD>Returns an unmodifiable view of the specified <code>SortedSetMultimap</code>.
- Query operations on the returned multimap "read through" to the specified
- multimap, and attempts to modify the returned multimap, either directly or
- through the multimap's views, result in an
- <code>UnsupportedOperationException</code>.
-
- <p>Note that the generated multimap's <A HREF="../../../../com/google/common/collect/Multimap.html#removeAll(java.lang.Object)"><CODE>Multimap.removeAll(java.lang.Object)</CODE></A> and
- <A HREF="../../../../com/google/common/collect/Multimap.html#replaceValues(K, java.lang.Iterable)"><CODE>Multimap.replaceValues(K, java.lang.Iterable<? extends V>)</CODE></A> methods return collections that are
- modifiable.
-
- <p>The returned multimap will be serializable if the specified multimap is
- serializable.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>delegate</CODE> - the multimap for which an unmodifiable view is to be
-     returned
-<DT><B>Returns:</B><DD>an unmodifiable view of the specified multimap</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="synchronizedListMultimap(com.google.common.collect.ListMultimap)"><!-- --></A><H3>
-synchronizedListMultimap</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt; <B>synchronizedListMultimap</B>(<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;&nbsp;multimap)</PRE>
-<DL>
-<DD>Returns a synchronized (thread-safe) <code>ListMultimap</code> backed by the
- specified multimap.
-
- <p>You must follow the warnings described in <A HREF="../../../../com/google/common/collect/Multimaps.html#synchronizedMultimap(com.google.common.collect.Multimap)"><CODE>synchronizedMultimap(com.google.common.collect.Multimap<K, V>)</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>multimap</CODE> - the multimap to be wrapped
-<DT><B>Returns:</B><DD>a synchronized view of the specified multimap</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="unmodifiableListMultimap(com.google.common.collect.ListMultimap)"><!-- --></A><H3>
-unmodifiableListMultimap</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt; <B>unmodifiableListMultimap</B>(<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;&nbsp;delegate)</PRE>
-<DL>
-<DD>Returns an unmodifiable view of the specified <code>ListMultimap</code>. Query
- operations on the returned multimap "read through" to the specified
- multimap, and attempts to modify the returned multimap, either directly or
- through the multimap's views, result in an
- <code>UnsupportedOperationException</code>.
-
- <p>Note that the generated multimap's <A HREF="../../../../com/google/common/collect/Multimap.html#removeAll(java.lang.Object)"><CODE>Multimap.removeAll(java.lang.Object)</CODE></A> and
- <A HREF="../../../../com/google/common/collect/Multimap.html#replaceValues(K, java.lang.Iterable)"><CODE>Multimap.replaceValues(K, java.lang.Iterable<? extends V>)</CODE></A> methods return collections that are
- modifiable.
-
- <p>The returned multimap will be serializable if the specified multimap is
- serializable.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>delegate</CODE> - the multimap for which an unmodifiable view is to be
-     returned
-<DT><B>Returns:</B><DD>an unmodifiable view of the specified multimap</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="forMap(java.util.Map)"><!-- --></A><H3>
-forMap</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt; <B>forMap</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;&nbsp;map)</PRE>
-<DL>
-<DD>Returns a multimap view of the specified map. The multimap is backed by the
- map, so changes to the map are reflected in the multimap, and vice versa.
- If the map is modified while an iteration over one of the multimap's
- collection views is in progress (except through the iterator's own <code>remove</code> operation, or through the <code>setValue</code> operation on a map entry
- returned by the iterator), the results of the iteration are undefined.
-
- <p>The multimap supports mapping removal, which removes the corresponding
- mapping from the map. It does not support any operations which might add
- mappings, such as <code>put</code>, <code>putAll</code> or <code>replaceValues</code>.
-
- <p>The returned multimap will be serializable if the specified map is
- serializable.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>map</CODE> - the backing map for the returned multimap view</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="index(java.lang.Iterable, com.google.common.base.Function)"><!-- --></A><H3>
-index</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;K,V&gt; <B>index</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;V&gt;&nbsp;values,
-                                                     <A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super V,K&gt;&nbsp;keyFunction)</PRE>
-<DL>
-<DD>Creates an index <code>ImmutableMultimap</code> that contains the results of
- applying a specified function to each item in an <code>Iterable</code> of
- values. Each value will be stored as a value in the resulting multimap,
- yielding a multimap with the same size as the input iterable. The key used
- to store that value in the multimap will be the result of calling the
- function on that value. The resulting multimap is created as an immutable
- snapshot, it does <em>not</em> reflect subsequent changes on the input
- iterable.
-
- <p>For example, <pre class="code">  <code>List&lt;String&gt; badGuys
-      = Arrays.asList("Inky", "Blinky", "Pinky", "Pinky", "Clyde");
-  Function&lt;String, Integer&gt; stringLengthFunction = ...;
-  Multimap&lt;Integer, String&gt; index
-      = Multimaps.index(badGuys, stringLengthFunction);
-  System.out.println(index);</code></pre>
-
- prints <pre class="code">  <code>{4=[Inky], 5=[Pinky, Pinky, Clyde], 6=[Blinky]}</code></pre>
-
- <p>The returned multimap is serializable if its keys and values are all
- serializable.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>values</CODE> - the values to use when constructing the <code>ImmutableMultimap</code><DD><CODE>keyFunction</CODE> - the function used to produce the key for each value
-<DT><B>Returns:</B><DD><code>ImmutableMultimap</code> mapping the result of evaluating the
-     function <code>keyFunction</code> on each value in the input collection to
-     that value
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any of the following cases is true: <ul>
- <li> <code>values</code> is null
- <li> <code>keyFunction</code> is null
- <li> An element in <code>values</code> is null
- <li> <code>keyFunction</code> returns null for any element of <code>values</code>
- </ul></DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Multimaps.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/Multimaps.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Multimaps.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/Multiset.Entry.html b/javadoc/com/google/common/collect/Multiset.Entry.html
deleted file mode 100644
index afa0440..0000000
--- a/javadoc/com/google/common/collect/Multiset.Entry.html
+++ /dev/null
@@ -1,338 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:59 PST 2010 -->
-<TITLE>
-Multiset.Entry (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Multiset.Entry (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Multiset.Entry.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/Multisets.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/Multiset.Entry.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Multiset.Entry.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Interface Multiset.Entry&lt;E&gt;</H2>
-<DL>
-<DT><B>Enclosing interface:</B><DD><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.html" title="type parameter in Multiset">E</A>&gt;</DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public static interface <B>Multiset.Entry&lt;E&gt;</B></DL>
-</PRE>
-
-<P>
-An unmodifiable element-count pair for a multiset. The <A HREF="../../../../com/google/common/collect/Multiset.html#entrySet()"><CODE>Multiset.entrySet()</CODE></A> method returns a view of the multiset whose elements
- are of this class. A multiset implementation may return Entry instances
- that are either live "read-through" views to the Multiset, or immutable
- snapshots. Note that this type is unrelated to the similarly-named type
- <code>Map.Entry</code>.
-<P>
-
-<P>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multiset.Entry.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;o)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multiset.Entry.html#getCount()">getCount</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the count of the associated element in the underlying multiset.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="type parameter in Multiset.Entry">E</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multiset.Entry.html#getElement()">getElement</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the multiset element corresponding to this entry.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multiset.Entry.html#hashCode()">hashCode</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multiset.Entry.html#toString()">toString</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the canonical string representation of this entry, defined as
- follows.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="getElement()"><!-- --></A><H3>
-getElement</H3>
-<PRE>
-<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="type parameter in Multiset.Entry">E</A> <B>getElement</B>()</PRE>
-<DL>
-<DD>Returns the multiset element corresponding to this entry. Multiple calls
- to this method always return the same instance.
-<P>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>the element corresponding to this entry</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getCount()"><!-- --></A><H3>
-getCount</H3>
-<PRE>
-int <B>getCount</B>()</PRE>
-<DL>
-<DD>Returns the count of the associated element in the underlying multiset.
- This count may either be an unchanging snapshot of the count at the time
- the entry was retrieved, or a live view of the current count of the
- element in the multiset, depending on the implementation. Note that in
- the former case, this method can never return zero, while in the latter,
- it will return zero if all occurrences of the element were since removed
- from the multiset.
-<P>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>the count of the element; never negative</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
-equals</H3>
-<PRE>
-boolean <B>equals</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;o)</PRE>
-<DL>
-<DD>
-
- <p>Returns <code>true</code> if the given object is also a multiset entry and
- the two entries represent the same element and count. More formally, two
- entries <code>a</code> and <code>b</code> are equal if:
-
- <pre>  ((a.getElement() == null)
-      ? (b.getElement() == null) : a.getElement().equals(b.getElement()))
-    && (a.getCount() == b.getCount())</pre>
-<P>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="hashCode()"><!-- --></A><H3>
-hashCode</H3>
-<PRE>
-int <B>hashCode</B>()</PRE>
-<DL>
-<DD>
-
- <p>The hash code of a multiset entry for element <code>element</code> and
- count <code>count</code> is defined as:
-
- <pre>  (element == null ? 0 : element.hashCode()) ^ count</pre>
-<P>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toString()"><!-- --></A><H3>
-toString</H3>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
-<DL>
-<DD>Returns the canonical string representation of this entry, defined as
- follows. If the count for this entry is one, this is simply the string
- representation of the corresponding element. Otherwise, it is the string
- representation of the element, followed by the three characters <code>" x "</code> (space, letter x, space), followed by the count.
-<P>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Multiset.Entry.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/Multisets.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/Multiset.Entry.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Multiset.Entry.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/Multiset.html b/javadoc/com/google/common/collect/Multiset.html
deleted file mode 100644
index 7b42b62..0000000
--- a/javadoc/com/google/common/collect/Multiset.html
+++ /dev/null
@@ -1,836 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:59 PST 2010 -->
-<TITLE>
-Multiset (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Multiset (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Multiset.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/Multimaps.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/Multiset.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Multiset.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Interface Multiset&lt;E&gt;</H2>
-<DL>
-<DT><B>All Superinterfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;</DD>
-</DL>
-<DL>
-<DT><B>All Known Implementing Classes:</B> <DD><A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect">ConcurrentHashMultiset</A>, <A HREF="../../../../com/google/common/collect/EnumMultiset.html" title="class in com.google.common.collect">EnumMultiset</A>, <A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect">ForwardingMultiset</A>, <A HREF="../../../../com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect">HashMultiset</A>, <A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>, <A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect">LinkedHashMultiset</A>, <A HREF="../../../../com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect">TreeMultiset</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public interface <B>Multiset&lt;E&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</DL>
-</PRE>
-
-<P>
-A collection that supports order-independent equality, like <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A>, but
- may have duplicate elements. A multiset is also sometimes called a
- <i>bag</i>.
-
- <p>Elements of a multiset that are equal to one another (see "Note on
- element equivalence", below) are referred to as <i>occurrences</i> of the
- same single element. The total number of occurrences of an element in a
- multiset is called the <i>count</i> of that element (the terms "frequency"
- and "multiplicity" are equivalent, but not used in this API). Since the count
- of an element is represented as an <code>int</code>, a multiset may never contain
- more than <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true#MAX_VALUE" title="class or interface in java.lang"><CODE>Integer.MAX_VALUE</CODE></A> occurrences of any one element.
-
- <p><code>Multiset</code> refines the specifications of several methods from
- <code>Collection</code>. It also defines an additional query operation, <A HREF="../../../../com/google/common/collect/Multiset.html#count(java.lang.Object)"><CODE>count(java.lang.Object)</CODE></A>, which returns the count of an element. There are five new
- bulk-modification operations, for example <A HREF="../../../../com/google/common/collect/Multiset.html#add(E, int)"><CODE>add(Object, int)</CODE></A>, to add
- or remove multiple occurrences of an element at once, or to set the count of
- an element to a specific value. These modification operations are optional,
- but implementations which support the standard collection operations <A HREF="../../../../com/google/common/collect/Multiset.html#add(E)"><CODE>add(Object)</CODE></A> or <A HREF="../../../../com/google/common/collect/Multiset.html#remove(java.lang.Object)"><CODE>remove(Object)</CODE></A> are encouraged to implement the
- related methods as well. Finally, two collection views are provided: <A HREF="../../../../com/google/common/collect/Multiset.html#elementSet()"><CODE>elementSet()</CODE></A> contains the distinct elements of the multiset "with duplicates
- collapsed", and <A HREF="../../../../com/google/common/collect/Multiset.html#entrySet()"><CODE>entrySet()</CODE></A> is similar but contains <A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect"><CODE>Multiset.Entry</CODE></A> instances, each providing both a distinct element and the
- count of that element.
-
- <p>In addition to these required methods, implementations of <code>Multiset</code> are expected to provide two <code>static</code> creation methods:
- <code>create()</code>, returning an empty multiset, and <code>create(Iterable&lt;? extends E&gt;)</code>, returning a multiset containing the
- given initial elements. This is simply a refinement of <code>Collection</code>'s
- constructor recommendations, reflecting the new developments of Java 5.
-
- <p>As with other collection types, the modification operations are optional,
- and should throw <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang"><CODE>UnsupportedOperationException</CODE></A> when they are not
- implemented. Most implementations should support either all add operations
- or none of them, all removal operations or none of them, and if and only if
- all of these are supported, the <code>setCount</code> methods as well.
-
- <p>A multiset uses <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A> to determine whether two instances
- should be considered "the same," <i>unless specified otherwise</i> by the
- implementation.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Kevin Bourrillion</DD>
-</DL>
-<HR>
-
-<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-<A NAME="nested_class_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Nested Class Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;interface</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="type parameter in Multiset.Entry">E</A>&gt;</B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An unmodifiable element-count pair for a multiset.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multiset.html#add(E)">add</A></B>(<A HREF="../../../../com/google/common/collect/Multiset.html" title="type parameter in Multiset">E</A>&nbsp;element)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds a single occurrence of the specified element to this multiset.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multiset.html#add(E, int)">add</A></B>(<A HREF="../../../../com/google/common/collect/Multiset.html" title="type parameter in Multiset">E</A>&nbsp;element,
-    int&nbsp;occurrences)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds a number of occurrences of an element to this multiset.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multiset.html#contains(java.lang.Object)">contains</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Determines whether this multiset contains the specified element.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multiset.html#containsAll(java.util.Collection)">containsAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if this multiset contains at least one occurrence of
- each element in the specified collection.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multiset.html#count(java.lang.Object)">count</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of occurrences of an element in this multiset (the
- <i>count</i> of the element).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.html" title="type parameter in Multiset">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multiset.html#elementSet()">elementSet</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the set of distinct elements contained in this multiset.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.html" title="type parameter in Multiset">E</A>&gt;&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multiset.html#entrySet()">entrySet</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of the contents of this multiset, grouped into <code>Multiset.Entry</code> instances, each providing an element of the multiset and
- the count of that element.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multiset.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares the specified object with this multiset for equality.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multiset.html#hashCode()">hashCode</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the hash code for this multiset.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.html" title="type parameter in Multiset">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multiset.html#iterator()">iterator</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multiset.html#remove(java.lang.Object)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes a <i>single</i> occurrence of the specified element from this
- multiset, if present.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multiset.html#remove(java.lang.Object, int)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element,
-       int&nbsp;occurrences)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes a number of occurrences of the specified element from this
- multiset.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multiset.html#removeAll(java.util.Collection)">removeAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;c)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multiset.html#retainAll(java.util.Collection)">retainAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;c)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int)">setCount</A></B>(<A HREF="../../../../com/google/common/collect/Multiset.html" title="type parameter in Multiset">E</A>&nbsp;element,
-         int&nbsp;count)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds or removes the necessary occurrences of an element such that the
- element attains the desired count.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int, int)">setCount</A></B>(<A HREF="../../../../com/google/common/collect/Multiset.html" title="type parameter in Multiset">E</A>&nbsp;element,
-         int&nbsp;oldCount,
-         int&nbsp;newCount)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Conditionally sets the count of an element to a new value, as described in
- <A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int)"><CODE>setCount(Object, int)</CODE></A>, provided that the element has the expected
- current count.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multiset.html#toString()">toString</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.util.Collection"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#addAll(java.util.Collection)" title="class or interface in java.util">addAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#clear()" title="class or interface in java.util">clear</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#size()" title="class or interface in java.util">size</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#toArray()" title="class or interface in java.util">toArray</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#toArray(T[])" title="class or interface in java.util">toArray</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="count(java.lang.Object)"><!-- --></A><H3>
-count</H3>
-<PRE>
-int <B>count</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-          <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</PRE>
-<DL>
-<DD>Returns the number of occurrences of an element in this multiset (the
- <i>count</i> of the element). Note that for an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>-based
- multiset, this gives the same result as <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#frequency(java.util.Collection, java.lang.Object)" title="class or interface in java.util"><CODE>Collections.frequency(java.util.Collection<?>, java.lang.Object)</CODE></A>
- (which would presumably perform more poorly).
-
- <p><b>Note:</b> the utility method <A HREF="../../../../com/google/common/collect/Iterables.html#frequency(java.lang.Iterable, java.lang.Object)"><CODE>Iterables.frequency(java.lang.Iterable<?>, java.lang.Object)</CODE></A> generalizes
- this operation; it correctly delegates to this method when dealing with a
- multiset, but it can also accept any other iterable type.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to count occurrences of
-<DT><B>Returns:</B><DD>the number of occurrences of the element in this multiset; possibly
-     zero but never negative</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="add(java.lang.Object,int)"><!-- --></A><A NAME="add(E, int)"><!-- --></A><H3>
-add</H3>
-<PRE>
-int <B>add</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-        <A HREF="../../../../com/google/common/collect/Multiset.html" title="type parameter in Multiset">E</A>&nbsp;element,
-        int&nbsp;occurrences)</PRE>
-<DL>
-<DD>Adds a number of occurrences of an element to this multiset. Note that if
- <code>occurrences == 1</code>, this method has the identical effect to <A HREF="../../../../com/google/common/collect/Multiset.html#add(E)"><CODE>add(Object)</CODE></A>. This method is functionally equivalent (except in the case
- of overflow) to the call <code>addAll(Collections.nCopies(element,
- occurrences))</code>, which would presumably perform much more poorly.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to add occurrences of; may be <code>null</code> only
-     if explicitly allowed by the implementation<DD><CODE>occurrences</CODE> - the number of occurrences of the element to add. May be
-     zero, in which case no change will be made.
-<DT><B>Returns:</B><DD>the count of the element before the operation; possibly zero
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>occurrences</code> is negative, or if
-     this operation would result in more than <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true#MAX_VALUE" title="class or interface in java.lang"><CODE>Integer.MAX_VALUE</CODE></A>
-     occurrences of the element
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>element</code> is null and this
-     implementation does not permit null elements. Note that if <code>occurrences</code> is zero, the implementation may opt to return normally.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="remove(java.lang.Object, int)"><!-- --></A><H3>
-remove</H3>
-<PRE>
-int <B>remove</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-           <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element,
-           int&nbsp;occurrences)</PRE>
-<DL>
-<DD>Removes a number of occurrences of the specified element from this
- multiset. If the multiset contains fewer than this number of occurrences to
- begin with, all occurrences will be removed.  Note that if
- <code>occurrences == 1</code>, this is functionally equivalent to the call
- <code>remove(element)</code>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to conditionally remove occurrences of<DD><CODE>occurrences</CODE> - the number of occurrences of the element to remove. May
-     be zero, in which case no change will be made.
-<DT><B>Returns:</B><DD>the count of the element before the operation; possibly zero
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>occurrences</code> is negative</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="setCount(java.lang.Object,int)"><!-- --></A><A NAME="setCount(E, int)"><!-- --></A><H3>
-setCount</H3>
-<PRE>
-int <B>setCount</B>(<A HREF="../../../../com/google/common/collect/Multiset.html" title="type parameter in Multiset">E</A>&nbsp;element,
-             int&nbsp;count)</PRE>
-<DL>
-<DD>Adds or removes the necessary occurrences of an element such that the
- element attains the desired count.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to add or remove occurrences of; may be null
-     only if explicitly allowed by the implementation<DD><CODE>count</CODE> - the desired count of the element in this multiset
-<DT><B>Returns:</B><DD>the count of the element before the operation; possibly zero
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>count</code> is negative
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>element</code> is null and this
-     implementation does not permit null elements. Note that if <code>count</code> is zero, the implementor may optionally return zero instead.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="setCount(java.lang.Object,int,int)"><!-- --></A><A NAME="setCount(E, int, int)"><!-- --></A><H3>
-setCount</H3>
-<PRE>
-boolean <B>setCount</B>(<A HREF="../../../../com/google/common/collect/Multiset.html" title="type parameter in Multiset">E</A>&nbsp;element,
-                 int&nbsp;oldCount,
-                 int&nbsp;newCount)</PRE>
-<DL>
-<DD>Conditionally sets the count of an element to a new value, as described in
- <A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int)"><CODE>setCount(Object, int)</CODE></A>, provided that the element has the expected
- current count. If the current count is not <code>oldCount</code>, no change is
- made.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to conditionally set the count of; may be null
-     only if explicitly allowed by the implementation<DD><CODE>oldCount</CODE> - the expected present count of the element in this multiset<DD><CODE>newCount</CODE> - the desired count of the element in this multiset
-<DT><B>Returns:</B><DD><code>true</code> if the condition for modification was met. This
-     implies that the multiset was indeed modified, unless
-     <code>oldCount == newCount</code>.
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>oldCount</code> or <code>newCount</code> is
-     negative
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>element</code> is null and the
-     implementation does not permit null elements. Note that if <code>oldCount</code> and <code>newCount</code> are both zero, the implementor may
-     optionally return <code>true</code> instead.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="elementSet()"><!-- --></A><H3>
-elementSet</H3>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.html" title="type parameter in Multiset">E</A>&gt; <B>elementSet</B>()</PRE>
-<DL>
-<DD>Returns the set of distinct elements contained in this multiset. The
- element set is backed by the same data as the multiset, so any change to
- either is immediately reflected in the other. The order of the elements in
- the element set is unspecified.
-
- <p>If the element set supports any removal operations, these necessarily
- cause <b>all</b> occurrences of the removed element(s) to be removed from
- the multiset. Implementations are not expected to support the add
- operations, although this is possible.
-
- <p>A common use for the element set is to find the number of distinct
- elements in the multiset: <code>elementSet().size()</code>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a view of the set of distinct elements in this multiset</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="entrySet()"><!-- --></A><H3>
-entrySet</H3>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.html" title="type parameter in Multiset">E</A>&gt;&gt; <B>entrySet</B>()</PRE>
-<DL>
-<DD>Returns a view of the contents of this multiset, grouped into <code>Multiset.Entry</code> instances, each providing an element of the multiset and
- the count of that element. This set contains exactly one entry for each
- distinct element in the multiset (thus it always has the same size as the
- <A HREF="../../../../com/google/common/collect/Multiset.html#elementSet()"><CODE>elementSet()</CODE></A>). The order of the elements in the element set is
- unspecified.
-
- <p>The entry set is backed by the same data as the multiset, so any change
- to either is immediately reflected in the other. However, multiset changes
- may or may not be reflected in any <code>Entry</code> instances already
- retrieved from the entry set (this is implementation-dependent).
- Furthermore, implementations are not required to support modifications to
- the entry set at all, and the <code>Entry</code> instances themselves don't
- even have methods for modification. See the specific implementation class
- for more details on how its entry set handles modifications.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a set of entries representing the data of this multiset</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
-equals</H3>
-<PRE>
-boolean <B>equals</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-               <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
-<DL>
-<DD>Compares the specified object with this multiset for equality. Returns
- <code>true</code> if the given object is also a multiset and contains equal
- elements with equal counts, regardless of order.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.html" title="type parameter in Multiset">E</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="hashCode()"><!-- --></A><H3>
-hashCode</H3>
-<PRE>
-int <B>hashCode</B>()</PRE>
-<DL>
-<DD>Returns the hash code for this multiset. This is defined as the sum of
-
- <pre>  (element == null ? 0 : element.hashCode()) ^ count(element)</pre>
-
- over all distinct elements in the multiset. It follows that a multiset and
- its entry set always have the same hash code.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.html" title="type parameter in Multiset">E</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toString()"><!-- --></A><H3>
-toString</H3>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
-<DL>
-<DD>
-
- <p>It is recommended, though not mandatory, that this method return the
- result of invoking <A HREF="../../../../com/google/common/collect/Multiset.html#toString()"><CODE>toString()</CODE></A> on the <A HREF="../../../../com/google/common/collect/Multiset.html#entrySet()"><CODE>entrySet()</CODE></A>, yielding a
- result such as
- <pre>
-     [a x 3, c, d x 2, e]
- </pre>
-<P>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="iterator()"><!-- --></A><H3>
-iterator</H3>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.html" title="type parameter in Multiset">E</A>&gt; <B>iterator</B>()</PRE>
-<DL>
-<DD>
-
- <p>Elements that occur multiple times in the multiset will appear
- multiple times in this iterator, though not necessarily sequentially.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#iterator()" title="class or interface in java.util">iterator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.html" title="type parameter in Multiset">E</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true#iterator()" title="class or interface in java.lang">iterator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.html" title="type parameter in Multiset">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="contains(java.lang.Object)"><!-- --></A><H3>
-contains</H3>
-<PRE>
-boolean <B>contains</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                 <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</PRE>
-<DL>
-<DD>Determines whether this multiset contains the specified element.
-
- <p>This method refines <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util"><CODE>Collection.contains(java.lang.Object)</CODE></A> to further specify that
- it <b>may not</b> throw an exception in response to <code>element</code> being
- null or of the wrong type.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util">contains</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.html" title="type parameter in Multiset">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to check for
-<DT><B>Returns:</B><DD><code>true</code> if this multiset contains at least one occurrence of
-     the element</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="containsAll(java.util.Collection)"><!-- --></A><H3>
-containsAll</H3>
-<PRE>
-boolean <B>containsAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elements)</PRE>
-<DL>
-<DD>Returns <code>true</code> if this multiset contains at least one occurrence of
- each element in the specified collection.
-
- <p>This method refines <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util"><CODE>Collection.containsAll(java.util.Collection<?>)</CODE></A> to further specify
- that it <b>may not</b> throw an exception in response to any of <code>elements</code> being null or of the wrong type.
-
- <p><b>Note:</b> this method does not take into account the occurrence
- count of an element in the two collections; it may still return <code>true</code> even if <code>elements</code> contains several occurrences of an element
- and this multiset contains only one. This is no different than any other
- collection type like <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util"><CODE>List</CODE></A>, but it may be unexpected to the user of
- a multiset.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util">containsAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.html" title="type parameter in Multiset">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>elements</CODE> - the collection of elements to be checked for containment in
-     this multiset
-<DT><B>Returns:</B><DD><code>true</code> if this multiset contains at least one occurrence of
-     each element contained in <code>elements</code>
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>elements</code> is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="add(java.lang.Object)"><!-- --></A><A NAME="add(E)"><!-- --></A><H3>
-add</H3>
-<PRE>
-boolean <B>add</B>(<A HREF="../../../../com/google/common/collect/Multiset.html" title="type parameter in Multiset">E</A>&nbsp;element)</PRE>
-<DL>
-<DD>Adds a single occurrence of the specified element to this multiset.
-
- <p>This method refines <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#add(E)" title="class or interface in java.util"><CODE>Collection.add(E)</CODE></A>, which only <i>ensures</i>
- the presence of the element, to further specify that a successful call must
- always increment the count of the element, and the overall size of the
- collection, by one.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#add(E)" title="class or interface in java.util">add</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.html" title="type parameter in Multiset">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to add one occurrence of; may be null only if
-     explicitly allowed by the implementation
-<DT><B>Returns:</B><DD><code>true</code> always, since this call is required to modify the
-     multiset, unlike other <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A> types
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>element</code> is null and this
-     implementation does not permit null elements
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true#MAX_VALUE" title="class or interface in java.lang"><CODE>Integer.MAX_VALUE</CODE></A> occurrences
-     of <code>element</code> are already contained in this multiset</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="remove(java.lang.Object)"><!-- --></A><H3>
-remove</H3>
-<PRE>
-boolean <B>remove</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-               <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</PRE>
-<DL>
-<DD>Removes a <i>single</i> occurrence of the specified element from this
- multiset, if present.
-
- <p>This method refines <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util"><CODE>Collection.remove(java.lang.Object)</CODE></A> to further specify that it
- <b>may not</b> throw an exception in response to <code>element</code> being null
- or of the wrong type.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.html" title="type parameter in Multiset">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to remove one occurrence of
-<DT><B>Returns:</B><DD><code>true</code> if an occurrence was found and removed</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="removeAll(java.util.Collection)"><!-- --></A><H3>
-removeAll</H3>
-<PRE>
-boolean <B>removeAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;c)</PRE>
-<DL>
-<DD>
-
- <p>This method refines <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#removeAll(java.util.Collection)" title="class or interface in java.util"><CODE>Collection.removeAll(java.util.Collection<?>)</CODE></A> to further specify that
- it <b>may not</b> throw an exception in response to any of <code>elements</code>
- being null or of the wrong type.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#removeAll(java.util.Collection)" title="class or interface in java.util">removeAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.html" title="type parameter in Multiset">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="retainAll(java.util.Collection)"><!-- --></A><H3>
-retainAll</H3>
-<PRE>
-boolean <B>retainAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;c)</PRE>
-<DL>
-<DD>
-
- <p>This method refines <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util"><CODE>Collection.retainAll(java.util.Collection<?>)</CODE></A> to further specify that
- it <b>may not</b> throw an exception in response to any of <code>elements</code>
- being null or of the wrong type.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util">retainAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.html" title="type parameter in Multiset">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Multiset.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/Multimaps.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/Multiset.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Multiset.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/Multisets.html b/javadoc/com/google/common/collect/Multisets.html
deleted file mode 100644
index 7603f0b..0000000
--- a/javadoc/com/google/common/collect/Multisets.html
+++ /dev/null
@@ -1,319 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:59 PST 2010 -->
-<TITLE>
-Multisets (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Multisets (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Multisets.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/Multisets.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Multisets.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class Multisets</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.Multisets</B>
-</PRE>
-<HR>
-<DL>
-<DT><PRE>public final class <B>Multisets</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
-</PRE>
-
-<P>
-Provides static utility methods for creating and working with <A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect"><CODE>Multiset</CODE></A> instances.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Kevin Bourrillion, Mike Bostock</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multisets.html#immutableEntry(E, int)">immutableEntry</A></B>(E&nbsp;e,
-               int&nbsp;n)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multiset entry with the specified element and count.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multisets.html#intersection(com.google.common.collect.Multiset, com.google.common.collect.Multiset)">intersection</A></B>(<A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;&nbsp;multiset1,
-             <A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;?&gt;&nbsp;multiset2)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable <b>view</b> of the intersection of two multisets.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Multisets.html#unmodifiableMultiset(com.google.common.collect.Multiset)">unmodifiableMultiset</A></B>(<A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;? extends E&gt;&nbsp;multiset)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable view of the specified multiset.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="unmodifiableMultiset(com.google.common.collect.Multiset)"><!-- --></A><H3>
-unmodifiableMultiset</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt; <B>unmodifiableMultiset</B>(<A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;? extends E&gt;&nbsp;multiset)</PRE>
-<DL>
-<DD>Returns an unmodifiable view of the specified multiset. Query operations on
- the returned multiset "read through" to the specified multiset, and
- attempts to modify the returned multiset result in an
- <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang"><CODE>UnsupportedOperationException</CODE></A>.
-
- <p>The returned multiset will be serializable if the specified multiset is
- serializable.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>multiset</CODE> - the multiset for which an unmodifiable view is to be
-     generated
-<DT><B>Returns:</B><DD>an unmodifiable view of the multiset</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="immutableEntry(java.lang.Object,int)"><!-- --></A><A NAME="immutableEntry(E, int)"><!-- --></A><H3>
-immutableEntry</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;E&gt; <B>immutableEntry</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                                                   E&nbsp;e,
-                                                   int&nbsp;n)</PRE>
-<DL>
-<DD>Returns an immutable multiset entry with the specified element and count.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>e</CODE> - the element to be associated with the returned entry<DD><CODE>n</CODE> - the count to be associated with the returned entry
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>n</code> is negative</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="intersection(com.google.common.collect.Multiset, com.google.common.collect.Multiset)"><!-- --></A><H3>
-intersection</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt; <B>intersection</B>(<A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;&nbsp;multiset1,
-                                           <A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;?&gt;&nbsp;multiset2)</PRE>
-<DL>
-<DD>Returns an unmodifiable <b>view</b> of the intersection of two multisets.
- An element's count in the multiset is the smaller of its counts in the two
- backing multisets. The iteration order of the returned multiset matches the
- element set of <code>multiset1</code>, with repeated occurrences of the same
- element appearing consecutively.
-
- <p>Results are undefined if <code>multiset1</code> and <code>multiset2</code> are
- based on different equivalence relations (as <code>HashMultiset</code> and
- <code>TreeMultiset</code> are).
-<P>
-<DD><DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>tentative</b></DD>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Multisets.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/Multisets.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Multisets.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/MutableClassToInstanceMap.html b/javadoc/com/google/common/collect/MutableClassToInstanceMap.html
deleted file mode 100644
index 7d6a18c..0000000
--- a/javadoc/com/google/common/collect/MutableClassToInstanceMap.html
+++ /dev/null
@@ -1,499 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:59 PST 2010 -->
-<TITLE>
-MutableClassToInstanceMap (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="MutableClassToInstanceMap (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/MutableClassToInstanceMap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/Multisets.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ObjectArrays.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/MutableClassToInstanceMap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="MutableClassToInstanceMap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class MutableClassToInstanceMap&lt;B&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingObject</A>
-      <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingMap</A>&lt;K,V&gt;
-          <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.MutableClassToInstanceMap&lt;B&gt;</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect">ClassToInstanceMap</A>&lt;B&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;? extends B&gt;,B&gt;</DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public final class <B>MutableClassToInstanceMap&lt;B&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;<DT>implements <A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect">ClassToInstanceMap</A>&lt;B&gt;</DL>
-</PRE>
-
-<P>
-A mutable class-to-instance map backed by an arbitrary user-provided map.
- See also <A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect"><CODE>ImmutableClassToInstanceMap</CODE></A>.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Kevin Bourrillion</DD>
-</DL>
-<HR>
-
-<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-<A NAME="nested_class_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Nested Class Summary</B></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;<A NAME="nested_classes_inherited_from_class_java.util.Map"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Nested classes/interfaces inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">V</A>&gt;</CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;B&gt; <A HREF="../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect">MutableClassToInstanceMap</A>&lt;B&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/MutableClassToInstanceMap.html#create()">create</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new <code>MutableClassToInstanceMap</code> instance backed by a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util"><CODE>HashMap</CODE></A> using the default initial capacity and load factor.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;B&gt; <A HREF="../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect">MutableClassToInstanceMap</A>&lt;B&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/MutableClassToInstanceMap.html#create(java.util.Map)">create</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;? extends B&gt;,B&gt;&nbsp;backingMap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new <code>MutableClassToInstanceMap</code> instance backed by a given
- empty <code>backingMap</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected &nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/MutableClassToInstanceMap.html#delegate()">delegate</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the backing delegate instance that methods are forwarded to.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;K,V&gt;&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/MutableClassToInstanceMap.html#entrySet()">entrySet</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T extends <A HREF="../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="type parameter in MutableClassToInstanceMap">B</A>&gt; 
-<BR>
-T</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/MutableClassToInstanceMap.html#getInstance(java.lang.Class)">getInstance</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the value the specified class is mapped to, or <code>null</code> if no
- entry for this class is present.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;V</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/MutableClassToInstanceMap.html#put(K, V)">put</A></B>(K&nbsp;key,
-    V&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/MutableClassToInstanceMap.html#putAll(java.util.Map)">putAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;map)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T extends <A HREF="../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="type parameter in MutableClassToInstanceMap">B</A>&gt; 
-<BR>
-T</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/MutableClassToInstanceMap.html#putInstance(java.lang.Class, T)">putInstance</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type,
-            T&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Maps the specified class to the specified value.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingMap"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#clear()">clear</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#containsKey(java.lang.Object)">containsKey</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#containsValue(java.lang.Object)">containsValue</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#equals(java.lang.Object)">equals</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#get(java.lang.Object)">get</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#hashCode()">hashCode</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#keySet()">keySet</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#remove(java.lang.Object)">remove</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#size()">size</A>, <A HREF="../../../../com/google/common/collect/ForwardingMap.html#values()">values</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingObject"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#toString()">toString</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.util.Map"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#clear()" title="class or interface in java.util">clear</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsKey(java.lang.Object)" title="class or interface in java.util">containsKey</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#containsValue(java.lang.Object)" title="class or interface in java.util">containsValue</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#entrySet()" title="class or interface in java.util">entrySet</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#get(java.lang.Object)" title="class or interface in java.util">get</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#keySet()" title="class or interface in java.util">keySet</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#put(K, V)" title="class or interface in java.util">put</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#putAll(java.util.Map)" title="class or interface in java.util">putAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#size()" title="class or interface in java.util">size</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#values()" title="class or interface in java.util">values</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="create()"><!-- --></A><H3>
-create</H3>
-<PRE>
-public static &lt;B&gt; <A HREF="../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect">MutableClassToInstanceMap</A>&lt;B&gt; <B>create</B>()</PRE>
-<DL>
-<DD>Returns a new <code>MutableClassToInstanceMap</code> instance backed by a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util"><CODE>HashMap</CODE></A> using the default initial capacity and load factor.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="create(java.util.Map)"><!-- --></A><H3>
-create</H3>
-<PRE>
-public static &lt;B&gt; <A HREF="../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect">MutableClassToInstanceMap</A>&lt;B&gt; <B>create</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;? extends B&gt;,B&gt;&nbsp;backingMap)</PRE>
-<DL>
-<DD>Returns a new <code>MutableClassToInstanceMap</code> instance backed by a given
- empty <code>backingMap</code>. The caller surrenders control of the backing map,
- and thus should not allow any direct references to it to remain accessible.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="putInstance(java.lang.Class,java.lang.Object)"><!-- --></A><A NAME="putInstance(java.lang.Class, T)"><!-- --></A><H3>
-putInstance</H3>
-<PRE>
-public &lt;T extends <A HREF="../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="type parameter in MutableClassToInstanceMap">B</A>&gt; T <B>putInstance</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type,
-                                   T&nbsp;value)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html#putInstance(java.lang.Class, T)">ClassToInstanceMap</A></CODE></B></DD>
-<DD>Maps the specified class to the specified value. Does <i>not</i> associate
- this value with any of the class's supertypes.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html#putInstance(java.lang.Class, T)">putInstance</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect">ClassToInstanceMap</A>&lt;<A HREF="../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="type parameter in MutableClassToInstanceMap">B</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>the value previously associated with this class (possibly <code>null</code>), or <code>null</code> if there was no previous entry.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getInstance(java.lang.Class)"><!-- --></A><H3>
-getInstance</H3>
-<PRE>
-public &lt;T extends <A HREF="../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="type parameter in MutableClassToInstanceMap">B</A>&gt; T <B>getInstance</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html#getInstance(java.lang.Class)">ClassToInstanceMap</A></CODE></B></DD>
-<DD>Returns the value the specified class is mapped to, or <code>null</code> if no
- entry for this class is present. This will only return a value that was
- bound to this specific class, not a value that may have been bound to a
- subtype.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html#getInstance(java.lang.Class)">getInstance</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect">ClassToInstanceMap</A>&lt;<A HREF="../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="type parameter in MutableClassToInstanceMap">B</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="delegate()"><!-- --></A><H3>
-delegate</H3>
-<PRE>
-protected <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt; <B>delegate</B>()</PRE>
-<DL>
-<DD><B>Description copied from class: <CODE><A HREF="../../../../com/google/common/collect/ForwardingObject.html#delegate()">ForwardingObject</A></CODE></B></DD>
-<DD>Returns the backing delegate instance that methods are forwarded to.
- Abstract subclasses generally override this method with an abstract method
- that has a more specific return type, such as <A HREF="../../../../com/google/common/collect/ForwardingSet.html#delegate()"><CODE>ForwardingSet.delegate()</CODE></A>. Concrete subclasses override this method to supply
- the instance being decorated.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#delegate()">delegate</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="entrySet()"><!-- --></A><H3>
-entrySet</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;K,V&gt;&gt; <B>entrySet</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#entrySet()" title="class or interface in java.util">entrySet</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#entrySet()">entrySet</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="put(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="put(K, V)"><!-- --></A><H3>
-put</H3>
-<PRE>
-public V <B>put</B>(K&nbsp;key,
-             V&nbsp;value)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#put(K, V)" title="class or interface in java.util">put</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#put(K, V)">put</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="putAll(java.util.Map)"><!-- --></A><H3>
-putAll</H3>
-<PRE>
-public void <B>putAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;map)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#putAll(java.util.Map)" title="class or interface in java.util">putAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html#putAll(java.util.Map)">putAll</A></CODE> in class <CODE><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/MutableClassToInstanceMap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/Multisets.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/ObjectArrays.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/MutableClassToInstanceMap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="MutableClassToInstanceMap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/ObjectArrays.html b/javadoc/com/google/common/collect/ObjectArrays.html
deleted file mode 100644
index d37a2af..0000000
--- a/javadoc/com/google/common/collect/ObjectArrays.html
+++ /dev/null
@@ -1,372 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:59 PST 2010 -->
-<TITLE>
-ObjectArrays (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="ObjectArrays (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ObjectArrays.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ObjectArrays.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ObjectArrays.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class ObjectArrays</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.ObjectArrays</B>
-</PRE>
-<HR>
-<DL>
-<DT><PRE>public final class <B>ObjectArrays</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
-</PRE>
-
-<P>
-Static utility methods pertaining to object arrays.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Kevin Bourrillion</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; T[]</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ObjectArrays.html#concat(T[], T)">concat</A></B>(T[]&nbsp;array,
-       T&nbsp;element)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new array that appends <code>element</code> to <code>array</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; T[]</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ObjectArrays.html#concat(T[], T[], java.lang.Class)">concat</A></B>(T[]&nbsp;first,
-       T[]&nbsp;second,
-       <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new array that contains the concatenated contents of two arrays.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; T[]</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ObjectArrays.html#concat(T, T[])">concat</A></B>(T&nbsp;element,
-       T[]&nbsp;array)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new array that prepends <code>element</code> to <code>array</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; T[]</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ObjectArrays.html#newArray(java.lang.Class, int)">newArray</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type,
-         int&nbsp;length)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new array of the given length with the specified component type.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; T[]</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/ObjectArrays.html#newArray(T[], int)">newArray</A></B>(T[]&nbsp;reference,
-         int&nbsp;length)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new array of the given length with the same type as a reference
- array.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="newArray(java.lang.Class, int)"><!-- --></A><H3>
-newArray</H3>
-<PRE>
-public static &lt;T&gt; T[] <B>newArray</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type,
-                               int&nbsp;length)</PRE>
-<DL>
-<DD>Returns a new array of the given length with the specified component type.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>type</CODE> - the component type<DD><CODE>length</CODE> - the length of the new array</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="newArray(java.lang.Object[],int)"><!-- --></A><A NAME="newArray(T[], int)"><!-- --></A><H3>
-newArray</H3>
-<PRE>
-public static &lt;T&gt; T[] <B>newArray</B>(T[]&nbsp;reference,
-                               int&nbsp;length)</PRE>
-<DL>
-<DD>Returns a new array of the given length with the same type as a reference
- array.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>reference</CODE> - any array of the desired type<DD><CODE>length</CODE> - the length of the new array</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="concat(java.lang.Object[],java.lang.Object[],java.lang.Class)"><!-- --></A><A NAME="concat(T[], T[], java.lang.Class)"><!-- --></A><H3>
-concat</H3>
-<PRE>
-public static &lt;T&gt; T[] <B>concat</B>(T[]&nbsp;first,
-                             T[]&nbsp;second,
-                             <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type)</PRE>
-<DL>
-<DD>Returns a new array that contains the concatenated contents of two arrays.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>first</CODE> - the first array of elements to concatenate<DD><CODE>second</CODE> - the second array of elements to concatenate<DD><CODE>type</CODE> - the component type of the returned array</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="concat(java.lang.Object,java.lang.Object[])"><!-- --></A><A NAME="concat(T, T[])"><!-- --></A><H3>
-concat</H3>
-<PRE>
-public static &lt;T&gt; T[] <B>concat</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                             T&nbsp;element,
-                             T[]&nbsp;array)</PRE>
-<DL>
-<DD>Returns a new array that prepends <code>element</code> to <code>array</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to prepend to the front of <code>array</code><DD><CODE>array</CODE> - the array of elements to append
-<DT><B>Returns:</B><DD>an array whose size is one larger than <code>array</code>, with
-     <code>element</code> occupying the first position, and the
-     elements of <code>array</code> occupying the remaining elements.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="concat(java.lang.Object[],java.lang.Object)"><!-- --></A><A NAME="concat(T[], T)"><!-- --></A><H3>
-concat</H3>
-<PRE>
-public static &lt;T&gt; T[] <B>concat</B>(T[]&nbsp;array,
-                             <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                             T&nbsp;element)</PRE>
-<DL>
-<DD>Returns a new array that appends <code>element</code> to <code>array</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>array</CODE> - the array of elements to prepend<DD><CODE>element</CODE> - the element to append to the end
-<DT><B>Returns:</B><DD>an array whose size is one larger than <code>array</code>, with
-     the same contents as <code>array</code>, plus <code>element</code> occupying the
-     last position.</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ObjectArrays.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/ObjectArrays.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ObjectArrays.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/Ordering.html b/javadoc/com/google/common/collect/Ordering.html
deleted file mode 100644
index b594597..0000000
--- a/javadoc/com/google/common/collect/Ordering.html
+++ /dev/null
@@ -1,1194 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:59 PST 2010 -->
-<TITLE>
-Ordering (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Ordering (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Ordering.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ObjectArrays.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/PeekingIterator.html" title="interface in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/Ordering.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Ordering.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class Ordering&lt;T&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.Ordering&lt;T&gt;</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;T&gt;</DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public abstract class <B>Ordering&lt;T&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A><DT>implements <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;T&gt;</DL>
-</PRE>
-
-<P>
-A comparator with added methods to support common functions. For example:
- <pre>   <code>if (Ordering.from(comparator).reverse().isOrdered(list)) { ... }</code></pre>
-
- <p>The <A HREF="../../../../com/google/common/collect/Ordering.html#from(java.util.Comparator)"><CODE>from(Comparator)</CODE></A> method returns the equivalent <code>Ordering</code> instance for a pre-existing comparator. You can also skip the
- comparator step and extend <code>Ordering</code> directly: <pre>   <code>Ordering&lt;String&gt; byLengthOrdering = new Ordering&lt;String&gt;() {
-     public int compare(String left, String right) {
-       return Ints.compare(left.length(), right.length());
-     }
-   };</code></pre>
-
- Except as noted, the orderings returned by the factory methods of this
- class are serializable if and only if the provided instances that back them
- are. For example, if <code>ordering</code> and <code>function</code> can themselves be
- serialized, then <code>ordering.onResultOf(function)</code> can as well.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Jesse Wilson, Kevin Bourrillion</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected </CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Ordering.html#Ordering()">Ordering</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a new instance of this class (only invokable by the subclass
- constructor, typically implicit).</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Ordering.html#arbitrary()">arbitrary</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an arbitrary ordering over all objects, for which <code>compare(a,
- b) == 0</code> implies <code>a == b</code> (identity equality).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Ordering.html#binarySearch(java.util.List, T)">binarySearch</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;? extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt;&nbsp;sortedList,
-             <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&nbsp;key)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#binarySearch(java.util.List, T, java.util.Comparator)" title="class or interface in java.util"><CODE>Searches</CODE></A>
- <code>sortedList</code> for <code>key</code> using the binary search algorithm.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;U extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt; 
-<BR>
-<A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;U&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Ordering.html#compound(java.util.Comparator)">compound</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super U&gt;&nbsp;secondaryComparator)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an ordering which first uses the ordering <code>this</code>, but which
- in the event of a "tie", then delegates to <code>secondaryComparator</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Ordering.html#compound(java.lang.Iterable)">compound</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super T&gt;&gt;&nbsp;comparators)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an ordering which tries each given comparator in order until a
- non-zero result is found, returning that result, and returning zero only if
- all comparators return zero.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Ordering.html#explicit(java.util.List)">explicit</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;T&gt;&nbsp;valuesInOrder)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an ordering that compares objects according to the order in
- which they appear in the given list.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Ordering.html#explicit(T, T...)">explicit</A></B>(T&nbsp;leastValue,
-         T...&nbsp;remainingValuesInOrder)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an ordering that compares objects according to the order in
- which they are given to this method.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Ordering.html#from(java.util.Comparator)">from</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;T&gt;&nbsp;comparator)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an ordering for a pre-existing <code>comparator</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Ordering.html#from(com.google.common.collect.Ordering)">from</A></B>(<A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;T&gt;&nbsp;ordering)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>no need to use this</I></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Ordering.html#isOrdered(java.lang.Iterable)">isOrdered</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt;&nbsp;iterable)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if each element in <code>iterable</code> after the first is
- greater than or equal to the element that preceded it, according to this
- ordering.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Ordering.html#isStrictlyOrdered(java.lang.Iterable)">isStrictlyOrdered</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt;&nbsp;iterable)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if each element in <code>iterable</code> after the first is
- <i>strictly</i> greater than the element that preceded it, according to
- this ordering.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;S extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt; 
-<BR>
-<A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;S&gt;&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Ordering.html#lexicographical()">lexicographical</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new ordering which sorts iterables by comparing corresponding
- elements pairwise until a nonzero result is found; imposes "dictionary
- order".</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt; 
-<BR>
-E</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Ordering.html#max(E, E)">max</A></B>(E&nbsp;a,
-    E&nbsp;b)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the larger of the two values according to this ordering.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt; 
-<BR>
-E</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Ordering.html#max(E, E, E, E...)">max</A></B>(E&nbsp;a,
-    E&nbsp;b,
-    E&nbsp;c,
-    E...&nbsp;rest)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the largest of the specified values according to this ordering.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt; 
-<BR>
-E</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Ordering.html#max(java.lang.Iterable)">max</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;&nbsp;iterable)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the largest of the specified values according to this ordering.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt; 
-<BR>
-E</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Ordering.html#min(E, E)">min</A></B>(E&nbsp;a,
-    E&nbsp;b)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the smaller of the two values according to this ordering.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt; 
-<BR>
-E</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Ordering.html#min(E, E, E, E...)">min</A></B>(E&nbsp;a,
-    E&nbsp;b,
-    E&nbsp;c,
-    E...&nbsp;rest)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the smallest of the specified values according to this ordering.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt; 
-<BR>
-E</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Ordering.html#min(java.lang.Iterable)">min</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;&nbsp;iterable)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the smallest of the specified values according to this ordering.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;C extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&gt; 
-<BR>
-<A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;C&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Ordering.html#natural()">natural</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a serializable ordering that uses the natural order of the values.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;S extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt; 
-<BR>
-<A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;S&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Ordering.html#nullsFirst()">nullsFirst</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an ordering that treats <code>null</code> as less than all other values
- and uses <code>this</code> to compare non-null values.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;S extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt; 
-<BR>
-<A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;S&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Ordering.html#nullsLast()">nullsLast</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an ordering that treats <code>null</code> as greater than all other
- values and uses this ordering to compare non-null values.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;F&gt; <A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;F&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Ordering.html#onResultOf(com.google.common.base.Function)">onResultOf</A></B>(<A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;F,? extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt;&nbsp;function)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new ordering on <code>F</code> which orders elements by first applying
- a function to them, then comparing those results using <code>this</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;S extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt; 
-<BR>
-<A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;S&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Ordering.html#reverse()">reverse</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the reverse of this ordering; the <code>Ordering</code> equivalent to
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#reverseOrder(java.util.Comparator)" title="class or interface in java.util"><CODE>Collections.reverseOrder(Comparator)</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt; 
-<BR>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Ordering.html#sortedCopy(java.lang.Iterable)">sortedCopy</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;&nbsp;iterable)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a copy of the given iterable sorted by this ordering.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Ordering.html#usingToString()">usingToString</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an ordering that compares objects by the natural ordering of their
- string representations as returned by <code>toString()</code>.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.util.Comparator"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true#compare(T, T)" title="class or interface in java.util">compare</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="Ordering()"><!-- --></A><H3>
-Ordering</H3>
-<PRE>
-protected <B>Ordering</B>()</PRE>
-<DL>
-<DD>Constructs a new instance of this class (only invokable by the subclass
- constructor, typically implicit).
-<P>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="natural()"><!-- --></A><H3>
-natural</H3>
-<PRE>
-public static &lt;C extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&gt; <A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;C&gt; <B>natural</B>()</PRE>
-<DL>
-<DD>Returns a serializable ordering that uses the natural order of the values.
- The ordering throws a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang"><CODE>NullPointerException</CODE></A> when passed a null
- parameter.
-
- <p>The type specification is <code>&lt;C extends Comparable&gt;</code>, instead of
- the technically correct <code>&lt;C extends Comparable&lt;? super C&gt;&gt;</code>, to
- support legacy types from before Java 5.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="from(java.util.Comparator)"><!-- --></A><H3>
-from</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;T&gt; <B>from</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;T&gt;&nbsp;comparator)</PRE>
-<DL>
-<DD>Returns an ordering for a pre-existing <code>comparator</code>. Note
- that if the comparator is not pre-existing, and you don't require
- serialization, you can subclass <code>Ordering</code> and implement its
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true#compare(T, T)" title="class or interface in java.util"><CODE>compare</CODE></A> method instead.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>comparator</CODE> - the comparator that defines the order</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="from(com.google.common.collect.Ordering)"><!-- --></A><H3>
-from</H3>
-<PRE>
-<FONT SIZE="-1"><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</A>
-</FONT>public static &lt;T&gt; <A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;T&gt; <B>from</B>(<A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;T&gt;&nbsp;ordering)</PRE>
-<DL>
-<DD><B>Deprecated.</B>&nbsp;<I>no need to use this</I>
-<P>
-<DD>Simply returns its argument.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="explicit(java.util.List)"><!-- --></A><H3>
-explicit</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;T&gt; <B>explicit</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;T&gt;&nbsp;valuesInOrder)</PRE>
-<DL>
-<DD>Returns an ordering that compares objects according to the order in
- which they appear in the given list. Only objects present in the list
- (according to <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>) may be compared. This comparator
- imposes a "partial ordering" over the type <code>T</code>. Subsequent changes
- to the <code>valuesInOrder</code> list will have no effect on the returned
- comparator. Null values in the list are not supported.
-
- <p>The returned comparator throws an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassCastException.html?is-external=true" title="class or interface in java.lang"><CODE>ClassCastException</CODE></A> when it
- receives an input parameter that isn't among the provided values.
-
- <p>The generated comparator is serializable if all the provided values are
- serializable.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>valuesInOrder</CODE> - the values that the returned comparator will be able
-     to compare, in the order the comparator should induce
-<DT><B>Returns:</B><DD>the comparator described above
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any of the provided values is null
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>valuesInOrder</code> contains any
-     duplicate values (according to <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>)</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="explicit(java.lang.Object,java.lang.Object[])"><!-- --></A><A NAME="explicit(T, T...)"><!-- --></A><H3>
-explicit</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;T&gt; <B>explicit</B>(T&nbsp;leastValue,
-                                       T...&nbsp;remainingValuesInOrder)</PRE>
-<DL>
-<DD>Returns an ordering that compares objects according to the order in
- which they are given to this method. Only objects present in the argument
- list (according to <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>) may be compared. This comparator
- imposes a "partial ordering" over the type <code>T</code>. Null values in the
- argument list are not supported.
-
- <p>The returned comparator throws a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassCastException.html?is-external=true" title="class or interface in java.lang"><CODE>ClassCastException</CODE></A> when it
- receives an input parameter that isn't among the provided values.
-
- <p>The generated comparator is serializable if all the provided values are
- serializable.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>leastValue</CODE> - the value which the returned comparator should consider
-     the "least" of all values<DD><CODE>remainingValuesInOrder</CODE> - the rest of the values that the returned
-     comparator will be able to compare, in the order the comparator should
-     follow
-<DT><B>Returns:</B><DD>the comparator described above
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if any of the provided values is null
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if any duplicate values (according to
-     <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(Object)</CODE></A>) are present among the method arguments</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="arbitrary()"><!-- --></A><H3>
-arbitrary</H3>
-<PRE>
-public static <A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&gt; <B>arbitrary</B>()</PRE>
-<DL>
-<DD>Returns an arbitrary ordering over all objects, for which <code>compare(a,
- b) == 0</code> implies <code>a == b</code> (identity equality). There is no meaning
- whatsoever to the order imposed, but it is constant for the life of the VM.
-
- <p>Because the ordering is identity-based, it is not "consistent with
- <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(Object)</CODE></A>" as defined by <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util"><CODE>Comparator</CODE></A>. Use
- caution when building a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util"><CODE>SortedSet</CODE></A> or <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util"><CODE>SortedMap</CODE></A> from it, as
- the resulting collection will not behave exactly according to spec.
-
- <p>This ordering is not serializable, as its implementation relies on
- <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/System.html?is-external=true#identityHashCode(java.lang.Object)" title="class or interface in java.lang"><CODE>System.identityHashCode(Object)</CODE></A>, so its behavior cannot be
- preserved across serialization.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>tentative</b></DD>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="usingToString()"><!-- --></A><H3>
-usingToString</H3>
-<PRE>
-public static <A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&gt; <B>usingToString</B>()</PRE>
-<DL>
-<DD>Returns an ordering that compares objects by the natural ordering of their
- string representations as returned by <code>toString()</code>. It does not
- support null values.
-
- <p>The comparator is serializable.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="compound(java.lang.Iterable)"><!-- --></A><H3>
-compound</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;T&gt; <B>compound</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super T&gt;&gt;&nbsp;comparators)</PRE>
-<DL>
-<DD>Returns an ordering which tries each given comparator in order until a
- non-zero result is found, returning that result, and returning zero only if
- all comparators return zero. The returned ordering is based on the state of
- the <code>comparators</code> iterable at the time it was provided to this
- method.
-
- <p>The returned ordering is equivalent to that produced using <code>Ordering.from(comp1).compound(comp2).compound(comp3) . . .</code>.
-
- <p><b>Warning:</b> Supplying an argument with undefined iteration order,
- such as a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashSet.html?is-external=true" title="class or interface in java.util"><CODE>HashSet</CODE></A>, will produce non-deterministic results.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>comparators</CODE> - the comparators to try in order</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="compound(java.util.Comparator)"><!-- --></A><H3>
-compound</H3>
-<PRE>
-public &lt;U extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt; <A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;U&gt; <B>compound</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super U&gt;&nbsp;secondaryComparator)</PRE>
-<DL>
-<DD>Returns an ordering which first uses the ordering <code>this</code>, but which
- in the event of a "tie", then delegates to <code>secondaryComparator</code>.
- For example, to sort a bug list first by status and second by priority, you
- might use <code>byStatus.compound(byPriority)</code>. For a compound ordering
- with three or more components, simply chain multiple calls to this method.
-
- <p>An ordering produced by this method, or a chain of calls to this method,
- is equivalent to one created using <A HREF="../../../../com/google/common/collect/Ordering.html#compound(java.lang.Iterable)"><CODE>compound(Iterable)</CODE></A> on
- the same component comparators.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="reverse()"><!-- --></A><H3>
-reverse</H3>
-<PRE>
-public &lt;S extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt; <A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;S&gt; <B>reverse</B>()</PRE>
-<DL>
-<DD>Returns the reverse of this ordering; the <code>Ordering</code> equivalent to
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#reverseOrder(java.util.Comparator)" title="class or interface in java.util"><CODE>Collections.reverseOrder(Comparator)</CODE></A>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="onResultOf(com.google.common.base.Function)"><!-- --></A><H3>
-onResultOf</H3>
-<PRE>
-public &lt;F&gt; <A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;F&gt; <B>onResultOf</B>(<A HREF="../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;F,? extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt;&nbsp;function)</PRE>
-<DL>
-<DD>Returns a new ordering on <code>F</code> which orders elements by first applying
- a function to them, then comparing those results using <code>this</code>. For
- example, to compare objects by their string forms, in a case-insensitive
- manner, use: <pre>   <code>Ordering.from(String.CASE_INSENSITIVE_ORDER)
-       .onResultOf(Functions.toStringFunction())</code></pre>
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="lexicographical()"><!-- --></A><H3>
-lexicographical</H3>
-<PRE>
-public &lt;S extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt; <A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;S&gt;&gt; <B>lexicographical</B>()</PRE>
-<DL>
-<DD>Returns a new ordering which sorts iterables by comparing corresponding
- elements pairwise until a nonzero result is found; imposes "dictionary
- order". If the end of one iterable is reached, but not the other, the
- shorter iterable is considered to be less than the longer one. For example,
- a lexicographical natural ordering over integers considers <code>[] &lt; [1] &lt; [1, 1] &lt; [1, 2] &lt; [2]</code>.
-
- <p>Note that <code>ordering.lexicographical().reverse()</code> is not
- equivalent to <code>ordering.reverse().lexicographical()</code> (consider how
- each would order <code>[1]</code> and <code>[1, 1]</code>).
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>tentative</b></DD>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="nullsFirst()"><!-- --></A><H3>
-nullsFirst</H3>
-<PRE>
-public &lt;S extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt; <A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;S&gt; <B>nullsFirst</B>()</PRE>
-<DL>
-<DD>Returns an ordering that treats <code>null</code> as less than all other values
- and uses <code>this</code> to compare non-null values.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="nullsLast()"><!-- --></A><H3>
-nullsLast</H3>
-<PRE>
-public &lt;S extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt; <A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;S&gt; <B>nullsLast</B>()</PRE>
-<DL>
-<DD>Returns an ordering that treats <code>null</code> as greater than all other
- values and uses this ordering to compare non-null values.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="binarySearch(java.util.List,java.lang.Object)"><!-- --></A><A NAME="binarySearch(java.util.List, T)"><!-- --></A><H3>
-binarySearch</H3>
-<PRE>
-public int <B>binarySearch</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;? extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt;&nbsp;sortedList,
-                        <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&nbsp;key)</PRE>
-<DL>
-<DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#binarySearch(java.util.List, T, java.util.Comparator)" title="class or interface in java.util"><CODE>Searches</CODE></A>
- <code>sortedList</code> for <code>key</code> using the binary search algorithm. The
- list must be sorted using this ordering.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>sortedList</CODE> - the list to be searched<DD><CODE>key</CODE> - the key to be searched for</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="sortedCopy(java.lang.Iterable)"><!-- --></A><H3>
-sortedCopy</H3>
-<PRE>
-public &lt;E extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;E&gt; <B>sortedCopy</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;&nbsp;iterable)</PRE>
-<DL>
-<DD>Returns a copy of the given iterable sorted by this ordering. The input is
- not modified. The returned list is modifiable, serializable, and has random
- access.
-
- <p>Unlike <A HREF="../../../../com/google/common/collect/Sets.html#newTreeSet(java.lang.Iterable)"><CODE>Sets.newTreeSet(Iterable)</CODE></A>, this method does not collapse
- elements that compare as zero, and the resulting collection does not
- maintain its own sort order.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>iterable</CODE> - the elements to be copied and sorted
-<DT><B>Returns:</B><DD>a new list containing the given elements in sorted order</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="isOrdered(java.lang.Iterable)"><!-- --></A><H3>
-isOrdered</H3>
-<PRE>
-public boolean <B>isOrdered</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt;&nbsp;iterable)</PRE>
-<DL>
-<DD>Returns <code>true</code> if each element in <code>iterable</code> after the first is
- greater than or equal to the element that preceded it, according to this
- ordering. Note that this is always true when the iterable has fewer than
- two elements.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="isStrictlyOrdered(java.lang.Iterable)"><!-- --></A><H3>
-isStrictlyOrdered</H3>
-<PRE>
-public boolean <B>isStrictlyOrdered</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt;&nbsp;iterable)</PRE>
-<DL>
-<DD>Returns <code>true</code> if each element in <code>iterable</code> after the first is
- <i>strictly</i> greater than the element that preceded it, according to
- this ordering. Note that this is always true when the iterable has fewer
- than two elements.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="max(java.lang.Iterable)"><!-- --></A><H3>
-max</H3>
-<PRE>
-public &lt;E extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt; E <B>max</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;&nbsp;iterable)</PRE>
-<DL>
-<DD>Returns the largest of the specified values according to this ordering. If
- there are multiple largest values, the first of those is returned.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>iterable</CODE> - the iterable whose maximum element is to be determined
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/NoSuchElementException.html?is-external=true" title="class or interface in java.util">NoSuchElementException</A></CODE> - if <code>iterable</code> is empty
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassCastException.html?is-external=true" title="class or interface in java.lang">ClassCastException</A></CODE> - if the parameters are not <i>mutually
-     comparable</i> under this ordering.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="max(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object[])"><!-- --></A><A NAME="max(E, E, E, E...)"><!-- --></A><H3>
-max</H3>
-<PRE>
-public &lt;E extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt; E <B>max</B>(E&nbsp;a,
-                           E&nbsp;b,
-                           E&nbsp;c,
-                           E...&nbsp;rest)</PRE>
-<DL>
-<DD>Returns the largest of the specified values according to this ordering. If
- there are multiple largest values, the first of those is returned.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>a</CODE> - value to compare, returned if greater than or equal to the rest.<DD><CODE>b</CODE> - value to compare<DD><CODE>c</CODE> - value to compare<DD><CODE>rest</CODE> - values to compare
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassCastException.html?is-external=true" title="class or interface in java.lang">ClassCastException</A></CODE> - if the parameters are not <i>mutually
-     comparable</i> under this ordering.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="max(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="max(E, E)"><!-- --></A><H3>
-max</H3>
-<PRE>
-public &lt;E extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt; E <B>max</B>(E&nbsp;a,
-                           E&nbsp;b)</PRE>
-<DL>
-<DD>Returns the larger of the two values according to this ordering. If the
- values compare as 0, the first is returned.
-
- <p><b>Implementation note:</b> this method is invoked by the default
- implementations of the other <code>max</code> overloads, so overriding it will
- affect their behavior.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>a</CODE> - value to compare, returned if greater than or equal to b.<DD><CODE>b</CODE> - value to compare.
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassCastException.html?is-external=true" title="class or interface in java.lang">ClassCastException</A></CODE> - if the parameters are not <i>mutually
-     comparable</i> under this ordering.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="min(java.lang.Iterable)"><!-- --></A><H3>
-min</H3>
-<PRE>
-public &lt;E extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt; E <B>min</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;&nbsp;iterable)</PRE>
-<DL>
-<DD>Returns the smallest of the specified values according to this ordering. If
- there are multiple smallest values, the first of those is returned.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>iterable</CODE> - the iterable whose minimum element is to be determined
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/NoSuchElementException.html?is-external=true" title="class or interface in java.util">NoSuchElementException</A></CODE> - if <code>iterable</code> is empty
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassCastException.html?is-external=true" title="class or interface in java.lang">ClassCastException</A></CODE> - if the parameters are not <i>mutually
-     comparable</i> under this ordering.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="min(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object[])"><!-- --></A><A NAME="min(E, E, E, E...)"><!-- --></A><H3>
-min</H3>
-<PRE>
-public &lt;E extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt; E <B>min</B>(E&nbsp;a,
-                           E&nbsp;b,
-                           E&nbsp;c,
-                           E...&nbsp;rest)</PRE>
-<DL>
-<DD>Returns the smallest of the specified values according to this ordering. If
- there are multiple smallest values, the first of those is returned.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>a</CODE> - value to compare, returned if less than or equal to the rest.<DD><CODE>b</CODE> - value to compare<DD><CODE>c</CODE> - value to compare<DD><CODE>rest</CODE> - values to compare
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassCastException.html?is-external=true" title="class or interface in java.lang">ClassCastException</A></CODE> - if the parameters are not <i>mutually
-     comparable</i> under this ordering.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="min(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="min(E, E)"><!-- --></A><H3>
-min</H3>
-<PRE>
-public &lt;E extends <A HREF="../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt; E <B>min</B>(E&nbsp;a,
-                           E&nbsp;b)</PRE>
-<DL>
-<DD>Returns the smaller of the two values according to this ordering. If the
- values compare as 0, the first is returned.
-
- <p><b>Implementation note:</b> this method is invoked by the default
- implementations of the other <code>min</code> overloads, so overriding it will
- affect their behavior.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>a</CODE> - value to compare, returned if less than or equal to b.<DD><CODE>b</CODE> - value to compare.
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassCastException.html?is-external=true" title="class or interface in java.lang">ClassCastException</A></CODE> - if the parameters are not <i>mutually
-     comparable</i> under this ordering.</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Ordering.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/ObjectArrays.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/PeekingIterator.html" title="interface in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/Ordering.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Ordering.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/PeekingIterator.html b/javadoc/com/google/common/collect/PeekingIterator.html
deleted file mode 100644
index ec12e50..0000000
--- a/javadoc/com/google/common/collect/PeekingIterator.html
+++ /dev/null
@@ -1,296 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:59 PST 2010 -->
-<TITLE>
-PeekingIterator (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="PeekingIterator (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/PeekingIterator.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/PeekingIterator.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="PeekingIterator.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Interface PeekingIterator&lt;E&gt;</H2>
-<DL>
-<DT><B>All Superinterfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;E&gt;</DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public interface <B>PeekingIterator&lt;E&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;E&gt;</DL>
-</PRE>
-
-<P>
-An iterator that supports a one-element lookahead while iterating.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Mick Killianey</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/PeekingIterator.html" title="type parameter in PeekingIterator">E</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/PeekingIterator.html#next()">next</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/PeekingIterator.html" title="type parameter in PeekingIterator">E</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/PeekingIterator.html#peek()">peek</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the next element in the iteration, without advancing the iteration.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/PeekingIterator.html#remove()">remove</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.util.Iterator"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true#hasNext()" title="class or interface in java.util">hasNext</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="peek()"><!-- --></A><H3>
-peek</H3>
-<PRE>
-<A HREF="../../../../com/google/common/collect/PeekingIterator.html" title="type parameter in PeekingIterator">E</A> <B>peek</B>()</PRE>
-<DL>
-<DD>Returns the next element in the iteration, without advancing the iteration.
-
- <p>Calls to <code>peek()</code> should not change the state of the iteration,
- except that it <i>may</i> prevent removal of the most recent element via
- <A HREF="../../../../com/google/common/collect/PeekingIterator.html#remove()"><CODE>remove()</CODE></A>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/NoSuchElementException.html?is-external=true" title="class or interface in java.util">NoSuchElementException</A></CODE> - if the iteration has no more elements
-     according to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true#hasNext()" title="class or interface in java.util"><CODE>Iterator.hasNext()</CODE></A></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="next()"><!-- --></A><H3>
-next</H3>
-<PRE>
-<A HREF="../../../../com/google/common/collect/PeekingIterator.html" title="type parameter in PeekingIterator">E</A> <B>next</B>()</PRE>
-<DL>
-<DD>
-
- <p>The objects returned by consecutive calls to <A HREF="../../../../com/google/common/collect/PeekingIterator.html#peek()"><CODE>peek()</CODE></A> then <A HREF="../../../../com/google/common/collect/PeekingIterator.html#next()"><CODE>next()</CODE></A> are guaranteed to be equal to each other.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true#next()" title="class or interface in java.util">next</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;<A HREF="../../../../com/google/common/collect/PeekingIterator.html" title="type parameter in PeekingIterator">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="remove()"><!-- --></A><H3>
-remove</H3>
-<PRE>
-void <B>remove</B>()</PRE>
-<DL>
-<DD>
-
- <p>Implementations may or may not support removal when a call to <A HREF="../../../../com/google/common/collect/PeekingIterator.html#peek()"><CODE>peek()</CODE></A> has occurred since the most recent call to <A HREF="../../../../com/google/common/collect/PeekingIterator.html#next()"><CODE>next()</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true#remove()" title="class or interface in java.util">remove</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;<A HREF="../../../../com/google/common/collect/PeekingIterator.html" title="type parameter in PeekingIterator">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalStateException.html?is-external=true" title="class or interface in java.lang">IllegalStateException</A></CODE> - if there has been a call to <A HREF="../../../../com/google/common/collect/PeekingIterator.html#peek()"><CODE>peek()</CODE></A>
-     since the most recent call to <A HREF="../../../../com/google/common/collect/PeekingIterator.html#next()"><CODE>next()</CODE></A> and this implementation
-     does not support this sequence of calls (optional)</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/PeekingIterator.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/PeekingIterator.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="PeekingIterator.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/SetMultimap.html b/javadoc/com/google/common/collect/SetMultimap.html
deleted file mode 100644
index baa589f..0000000
--- a/javadoc/com/google/common/collect/SetMultimap.html
+++ /dev/null
@@ -1,421 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:59 PST 2010 -->
-<TITLE>
-SetMultimap (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="SetMultimap (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/SetMultimap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/PeekingIterator.html" title="interface in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/Sets.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/SetMultimap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="SetMultimap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Interface SetMultimap&lt;K,V&gt;</H2>
-<DL>
-<DT><B>All Superinterfaces:</B> <DD><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</DD>
-</DL>
-<DL>
-<DT><B>All Known Subinterfaces:</B> <DD><A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt;</DD>
-</DL>
-<DL>
-<DT><B>All Known Implementing Classes:</B> <DD><A HREF="../../../../com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect">HashMultimap</A>, <A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>, <A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect">LinkedHashMultimap</A>, <A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">TreeMultimap</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public interface <B>SetMultimap&lt;K,V&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</DL>
-</PRE>
-
-<P>
-A <code>Multimap</code> that cannot hold duplicate key-value pairs. Adding a
- key-value pair that's already in the multimap has no effect.
-
- <p>The <A HREF="../../../../com/google/common/collect/SetMultimap.html#get(K)"><CODE>get(K)</CODE></A>, <A HREF="../../../../com/google/common/collect/SetMultimap.html#removeAll(java.lang.Object)"><CODE>removeAll(java.lang.Object)</CODE></A>, and <A HREF="../../../../com/google/common/collect/SetMultimap.html#replaceValues(K, java.lang.Iterable)"><CODE>replaceValues(K, java.lang.Iterable<? extends V>)</CODE></A> methods
- each return a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A> of values, while <A HREF="../../../../com/google/common/collect/SetMultimap.html#entries()"><CODE>entries()</CODE></A> returns a <code>Set</code> of map entries. Though the method signature doesn't say so explicitly,
- the map returned by <A HREF="../../../../com/google/common/collect/SetMultimap.html#asMap()"><CODE>asMap()</CODE></A> has <code>Set</code> values.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Jared Levy</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">V</A>&gt;&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/SetMultimap.html#asMap()">asMap</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a map view that associates each key with the corresponding values
- in the multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">V</A>&gt;&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/SetMultimap.html#entries()">entries</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection of all key-value pairs.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/SetMultimap.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;obj)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares the specified object to this multimap for equality.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/SetMultimap.html#get(K)">get</A></B>(<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">K</A>&nbsp;key)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection view of all values associated with a key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/SetMultimap.html#removeAll(java.lang.Object)">removeAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes all values associated with a given key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/SetMultimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></B>(<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">K</A>&nbsp;key,
-              <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">V</A>&gt;&nbsp;values)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a collection of values with the same key, replacing any existing
- values for that key.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.Multimap"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface com.google.common.collect.<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#clear()">clear</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#containsEntry(java.lang.Object, java.lang.Object)">containsEntry</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#containsKey(java.lang.Object)">containsKey</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#containsValue(java.lang.Object)">containsValue</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#hashCode()">hashCode</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#keys()">keys</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#keySet()">keySet</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#put(K, V)">put</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#putAll(K, java.lang.Iterable)">putAll</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#putAll(com.google.common.collect.Multimap)">putAll</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#remove(java.lang.Object, java.lang.Object)">remove</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#size()">size</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#values()">values</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="get(java.lang.Object)"><!-- --></A><A NAME="get(K)"><!-- --></A><H3>
-get</H3>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">V</A>&gt; <B>get</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-           <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">K</A>&nbsp;key)</PRE>
-<DL>
-<DD>Returns a collection view of all values associated with a key. If no
- mappings in the multimap have the provided key, an empty collection is
- returned.
-
- <p>Changes to the returned collection will update the underlying multimap,
- and vice versa.
-
- <p>Because a <code>SetMultimap</code> has unique values for a given key, this
- method returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A>, instead of the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A>
- specified in the <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A> interface.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#get(K)">get</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to search for in multimap
-<DT><B>Returns:</B><DD>the collection of values that the key maps to</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="removeAll(java.lang.Object)"><!-- --></A><H3>
-removeAll</H3>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">V</A>&gt; <B>removeAll</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                 <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
-<DL>
-<DD>Removes all values associated with a given key.
-
- <p>Because a <code>SetMultimap</code> has unique values for a given key, this
- method returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A>, instead of the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A>
- specified in the <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A> interface.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#removeAll(java.lang.Object)">removeAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key of entries to remove from the multimap
-<DT><B>Returns:</B><DD>the collection of removed values, or an empty collection if no
-     values were associated with the provided key. The collection
-     <i>may</i> be modifiable, but updating it will have no effect on the
-     multimap.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="replaceValues(java.lang.Object,java.lang.Iterable)"><!-- --></A><A NAME="replaceValues(K, java.lang.Iterable)"><!-- --></A><H3>
-replaceValues</H3>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">V</A>&gt; <B>replaceValues</B>(<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">K</A>&nbsp;key,
-                     <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">V</A>&gt;&nbsp;values)</PRE>
-<DL>
-<DD>Stores a collection of values with the same key, replacing any existing
- values for that key.
-
- <p>Because a <code>SetMultimap</code> has unique values for a given key, this
- method returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A>, instead of the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A>
- specified in the <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A> interface.
-
- <p>Any duplicates in <code>values</code> will be stored in the multimap once.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to store in the multimap<DD><CODE>values</CODE> - values to store in the multimap
-<DT><B>Returns:</B><DD>the collection of replaced values, or an empty collection if no
-     values were previously associated with the key. The collection
-     <i>may</i> be modifiable, but updating it will have no effect on the
-     multimap.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="entries()"><!-- --></A><H3>
-entries</H3>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">V</A>&gt;&gt; <B>entries</B>()</PRE>
-<DL>
-<DD>Returns a collection of all key-value pairs. Changes to the returned
- collection will update the underlying multimap, and vice versa. The entries
- collection does not support the <code>add</code> or <code>addAll</code> operations.
-
- <p>Because a <code>SetMultimap</code> has unique values for a given key, this
- method returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A>, instead of the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A>
- specified in the <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A> interface.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#entries()">entries</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>collection of map entries consisting of key-value pairs</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="asMap()"><!-- --></A><H3>
-asMap</H3>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">V</A>&gt;&gt; <B>asMap</B>()</PRE>
-<DL>
-<DD>Returns a map view that associates each key with the corresponding values
- in the multimap. Changes to the returned map, such as element removal,
- will update the underlying multimap. The map does not support
- <code>setValue()</code> on its entries, <code>put</code>, or <code>putAll</code>.
-
- <p>The collections returned by <code>asMap().get(Object)</code> have the same
- behavior as those returned by <A HREF="../../../../com/google/common/collect/Multimap.html#get(K)"><CODE>Multimap.get(K)</CODE></A>.
-
- <p>Though the method signature doesn't say so explicitly, the returned map
- has <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A> values.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#asMap()">asMap</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a map view from a key to its collection of values</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
-equals</H3>
-<PRE>
-boolean <B>equals</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-               <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;obj)</PRE>
-<DL>
-<DD>Compares the specified object to this multimap for equality.
-
- <p>Two <code>SetMultimap</code> instances are equal if, for each key, they
- contain the same values. Equality does not depend on the ordering of keys
- or values.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#equals(java.lang.Object)">equals</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">V</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/SetMultimap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/PeekingIterator.html" title="interface in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/Sets.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/SetMultimap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="SetMultimap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/Sets.SetView.html b/javadoc/com/google/common/collect/Sets.SetView.html
deleted file mode 100644
index 31ef17b..0000000
--- a/javadoc/com/google/common/collect/Sets.SetView.html
+++ /dev/null
@@ -1,303 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:59 PST 2010 -->
-<TITLE>
-Sets.SetView (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Sets.SetView (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Sets.SetView.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/Sets.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/Sets.SetView.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Sets.SetView.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class Sets.SetView&lt;E&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">java.util.AbstractCollection</A>&lt;E&gt;
-      <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractSet.html?is-external=true" title="class or interface in java.util">java.util.AbstractSet</A>&lt;E&gt;
-          <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.Sets.SetView&lt;E&gt;</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt;</DD>
-</DL>
-<DL>
-<DT><B>Enclosing class:</B><DD><A HREF="../../../../com/google/common/collect/Sets.html" title="class in com.google.common.collect">Sets</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public abstract static class <B>Sets.SetView&lt;E&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractSet.html?is-external=true" title="class or interface in java.util">AbstractSet</A>&lt;E&gt;</DL>
-</PRE>
-
-<P>
-An unmodifiable view of a set which may be backed by other sets; this view
- will change as the backing sets do. Contains methods to copy the data into
- a new set which will then remain stable. There is usually no reason to
- retain a reference of type <code>SetView</code>; typically, you either use it
- as a plain <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A>, or immediately invoke <A HREF="../../../../com/google/common/collect/Sets.SetView.html#immutableCopy()"><CODE>immutableCopy()</CODE></A> or
- <A HREF="../../../../com/google/common/collect/Sets.SetView.html#copyInto(S)"><CODE>copyInto(S)</CODE></A> and forget the <code>SetView</code> itself.
-<P>
-
-<P>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;S extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/Sets.SetView.html" title="type parameter in Sets.SetView">E</A>&gt;&gt; 
-<BR>
-S</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Sets.SetView.html#copyInto(S)">copyInto</A></B>(S&nbsp;set)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies the current contents of this set view into an existing set.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="../../../../com/google/common/collect/Sets.SetView.html" title="type parameter in Sets.SetView">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Sets.SetView.html#immutableCopy()">immutableCopy</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable copy of the current contents of this set view.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.util.AbstractSet"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractSet.html?is-external=true" title="class or interface in java.util">AbstractSet</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractSet.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractSet.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractSet.html?is-external=true#removeAll(java.util.Collection)" title="class or interface in java.util">removeAll</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.util.AbstractCollection"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#add(E)" title="class or interface in java.util">add</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#addAll(java.util.Collection)" title="class or interface in java.util">addAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#clear()" title="class or interface in java.util">clear</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util">contains</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util">containsAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#iterator()" title="class or interface in java.util">iterator</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util">retainAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#size()" title="class or interface in java.util">size</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#toArray()" title="class or interface in java.util">toArray</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#toArray(T[])" title="class or interface in java.util">toArray</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#toString()" title="class or interface in java.util">toString</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.util.Set"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#add(E)" title="class or interface in java.util">add</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#addAll(java.util.Collection)" title="class or interface in java.util">addAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#clear()" title="class or interface in java.util">clear</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util">contains</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util">containsAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#iterator()" title="class or interface in java.util">iterator</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util">retainAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#size()" title="class or interface in java.util">size</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#toArray()" title="class or interface in java.util">toArray</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true#toArray(T[])" title="class or interface in java.util">toArray</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="immutableCopy()"><!-- --></A><H3>
-immutableCopy</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="../../../../com/google/common/collect/Sets.SetView.html" title="type parameter in Sets.SetView">E</A>&gt; <B>immutableCopy</B>()</PRE>
-<DL>
-<DD>Returns an immutable copy of the current contents of this set view.
- Does not support null elements.
-
- <p><b>Warning:</b> this may have unexpected results if a backing set of
- this view uses a nonstandard notion of equivalence, for example if it is
- a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/TreeSet.html?is-external=true" title="class or interface in java.util"><CODE>TreeSet</CODE></A> using a comparator that is inconsistent with <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(Object)</CODE></A>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="copyInto(java.util.Set)"><!-- --></A><A NAME="copyInto(S)"><!-- --></A><H3>
-copyInto</H3>
-<PRE>
-public &lt;S extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/Sets.SetView.html" title="type parameter in Sets.SetView">E</A>&gt;&gt; S <B>copyInto</B>(S&nbsp;set)</PRE>
-<DL>
-<DD>Copies the current contents of this set view into an existing set. This
- method has equivalent behavior to <code>set.addAll(this)</code>, assuming that
- all the sets involved are based on the same notion of equivalence.
-<P>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a reference to <code>set</code>, for convenience</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Sets.SetView.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/Sets.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/Sets.SetView.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Sets.SetView.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/Sets.html b/javadoc/com/google/common/collect/Sets.html
deleted file mode 100644
index 1ae75e4..0000000
--- a/javadoc/com/google/common/collect/Sets.html
+++ /dev/null
@@ -1,1127 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:59 PST 2010 -->
-<TITLE>
-Sets (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Sets (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Sets.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/Sets.SetView.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/Sets.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Sets.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class Sets</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.Sets</B>
-</PRE>
-<HR>
-<DL>
-<DT><PRE>public final class <B>Sets</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
-</PRE>
-
-<P>
-Static utility methods pertaining to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A> instances. Also see this
- class's counterparts <A HREF="../../../../com/google/common/collect/Lists.html" title="class in com.google.common.collect"><CODE>Lists</CODE></A> and <A HREF="../../../../com/google/common/collect/Maps.html" title="class in com.google.common.collect"><CODE>Maps</CODE></A>.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Kevin Bourrillion, Jared Levy</DD>
-</DL>
-<HR>
-
-<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-<A NAME="nested_class_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Nested Class Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Sets.SetView.html" title="class in com.google.common.collect">Sets.SetView</A>&lt;<A HREF="../../../../com/google/common/collect/Sets.SetView.html" title="type parameter in Sets.SetView">E</A>&gt;</B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An unmodifiable view of a set which may be backed by other sets; this view
- will change as the backing sets do.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;B&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;B&gt;&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Sets.html#cartesianProduct(java.util.List)">cartesianProduct</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;? extends B&gt;&gt;&nbsp;sets)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns every possible list that can be formed by choosing one element
- from each of the given sets in order; the "n-ary
- <a href="http://en.wikipedia.org/wiki/Cartesian_product">Cartesian
- product</a>" of the sets.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;B&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;B&gt;&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Sets.html#cartesianProduct(java.util.Set...)">cartesianProduct</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;? extends B&gt;...&nbsp;sets)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns every possible list that can be formed by choosing one element
- from each of the given sets in order; the "n-ary
- <a href="http://en.wikipedia.org/wiki/Cartesian_product">Cartesian
- product</a>" of the sets.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;E&gt;&gt; 
-<BR>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/util/EnumSet.html?is-external=true" title="class or interface in java.util">EnumSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Sets.html#complementOf(java.util.Collection)">complementOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;&nbsp;collection)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an <code>EnumSet</code> consisting of all enum values that are not in
- the specified collection.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;E&gt;&gt; 
-<BR>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/util/EnumSet.html?is-external=true" title="class or interface in java.util">EnumSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Sets.html#complementOf(java.util.Collection, java.lang.Class)">complementOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;&nbsp;collection,
-             <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;E&gt;&nbsp;type)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an <code>EnumSet</code> consisting of all enum values that are not in
- the specified collection.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/Sets.SetView.html" title="class in com.google.common.collect">Sets.SetView</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Sets.html#difference(java.util.Set, java.util.Set)">difference</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt;&nbsp;set1,
-           <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;?&gt;&nbsp;set2)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable <b>view</b> of the difference of two sets.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Sets.html#filter(java.util.Set, com.google.common.base.Predicate)">filter</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt;&nbsp;unfiltered,
-       <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super E&gt;&nbsp;predicate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the elements of <code>unfiltered</code> that satisfy a predicate.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;E&gt;&gt; 
-<BR>
-<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Sets.html#immutableEnumSet(E, E...)">immutableEnumSet</A></B>(E&nbsp;anElement,
-                 E...&nbsp;otherElements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set instance containing the given enum elements.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;E&gt;&gt; 
-<BR>
-<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Sets.html#immutableEnumSet(java.lang.Iterable)">immutableEnumSet</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set instance containing the given enum elements.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/Sets.SetView.html" title="class in com.google.common.collect">Sets.SetView</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Sets.html#intersection(java.util.Set, java.util.Set)">intersection</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt;&nbsp;set1,
-             <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;?&gt;&nbsp;set2)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable <b>view</b> of the intersection of two sets.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;E&gt;&gt; 
-<BR>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/util/EnumSet.html?is-external=true" title="class or interface in java.util">EnumSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Sets.html#newEnumSet(java.lang.Iterable, java.lang.Class)">newEnumSet</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;&nbsp;iterable,
-           <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;E&gt;&nbsp;elementType)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new <code>EnumSet</code> instance containing the given elements.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashSet.html?is-external=true" title="class or interface in java.util">HashSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Sets.html#newHashSet()">newHashSet</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <i>mutable</i>, empty <code>HashSet</code> instance.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashSet.html?is-external=true" title="class or interface in java.util">HashSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Sets.html#newHashSet(E...)">newHashSet</A></B>(E...&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <i>mutable</i> <code>HashSet</code> instance containing the given
- elements in unspecified order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashSet.html?is-external=true" title="class or interface in java.util">HashSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Sets.html#newHashSet(java.lang.Iterable)">newHashSet</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <i>mutable</i> <code>HashSet</code> instance containing the given
- elements in unspecified order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashSet.html?is-external=true" title="class or interface in java.util">HashSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Sets.html#newHashSet(java.util.Iterator)">newHashSet</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <i>mutable</i> <code>HashSet</code> instance containing the given
- elements in unspecified order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashSet.html?is-external=true" title="class or interface in java.util">HashSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Sets.html#newHashSetWithExpectedSize(int)">newHashSetWithExpectedSize</A></B>(int&nbsp;expectedSize)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an empty <code>HashSet</code> instance with enough capacity to hold the
- specified number of elements without rehashing.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/LinkedHashSet.html?is-external=true" title="class or interface in java.util">LinkedHashSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Sets.html#newLinkedHashSet()">newLinkedHashSet</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <i>mutable</i>, empty <code>LinkedHashSet</code> instance.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/LinkedHashSet.html?is-external=true" title="class or interface in java.util">LinkedHashSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Sets.html#newLinkedHashSet(java.lang.Iterable)">newLinkedHashSet</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <i>mutable</i> <code>LinkedHashSet</code> instance containing the
- given elements in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Sets.html#newSetFromMap(java.util.Map)">newSetFromMap</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;E,<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</A>&gt;&nbsp;map)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a set backed by the specified map.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&gt; 
-<BR>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/util/TreeSet.html?is-external=true" title="class or interface in java.util">TreeSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Sets.html#newTreeSet()">newTreeSet</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <i>mutable</i>, empty <code>TreeSet</code> instance sorted by the
- natural sort ordering of its elements.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/TreeSet.html?is-external=true" title="class or interface in java.util">TreeSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Sets.html#newTreeSet(java.util.Comparator)">newTreeSet</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super E&gt;&nbsp;comparator)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <i>mutable</i>, empty <code>TreeSet</code> instance with the given
- comparator.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&gt; 
-<BR>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/util/TreeSet.html?is-external=true" title="class or interface in java.util">TreeSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Sets.html#newTreeSet(java.lang.Iterable)">newTreeSet</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <i>mutable</i> <code>TreeSet</code> instance containing the given
- elements sorted by their natural ordering.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/Sets.SetView.html" title="class in com.google.common.collect">Sets.SetView</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/Sets.html#union(java.util.Set, java.util.Set)">union</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;? extends E&gt;&nbsp;set1,
-      <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;? extends E&gt;&nbsp;set2)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable <b>view</b> of the union of two sets.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="immutableEnumSet(java.lang.Enum,java.lang.Enum[])"><!-- --></A><A NAME="immutableEnumSet(E, E...)"><!-- --></A><H3>
-immutableEnumSet</H3>
-<PRE>
-public static &lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;E&gt;&gt; <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt; <B>immutableEnumSet</B>(E&nbsp;anElement,
-                                                                   E...&nbsp;otherElements)</PRE>
-<DL>
-<DD>Returns an immutable set instance containing the given enum elements.
- Internally, the returned set will be backed by an <A HREF="http://java.sun.com/javase/6/docs/api/java/util/EnumSet.html?is-external=true" title="class or interface in java.util"><CODE>EnumSet</CODE></A>.
-
- <p>The iteration order of the returned set follows the enum's iteration
- order, not the order in which the elements are provided to the method.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>anElement</CODE> - one of the elements the set should contain<DD><CODE>otherElements</CODE> - the rest of the elements the set should contain
-<DT><B>Returns:</B><DD>an immutable set containing those elements, minus duplicates</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="immutableEnumSet(java.lang.Iterable)"><!-- --></A><H3>
-immutableEnumSet</H3>
-<PRE>
-public static &lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;E&gt;&gt; <A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt; <B>immutableEnumSet</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;&nbsp;elements)</PRE>
-<DL>
-<DD>Returns an immutable set instance containing the given enum elements.
- Internally, the returned set will be backed by an <A HREF="http://java.sun.com/javase/6/docs/api/java/util/EnumSet.html?is-external=true" title="class or interface in java.util"><CODE>EnumSet</CODE></A>.
-
- <p>The iteration order of the returned set follows the enum's iteration
- order, not the order in which the elements appear in the given collection.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>elements</CODE> - the elements, all of the same <code>enum</code> type, that the
-     set should contain
-<DT><B>Returns:</B><DD>an immutable set containing those elements, minus duplicates</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="newEnumSet(java.lang.Iterable, java.lang.Class)"><!-- --></A><H3>
-newEnumSet</H3>
-<PRE>
-public static &lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;E&gt;&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/EnumSet.html?is-external=true" title="class or interface in java.util">EnumSet</A>&lt;E&gt; <B>newEnumSet</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;&nbsp;iterable,
-                                                        <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;E&gt;&nbsp;elementType)</PRE>
-<DL>
-<DD>Returns a new <code>EnumSet</code> instance containing the given elements.
- Unlike <A HREF="http://java.sun.com/javase/6/docs/api/java/util/EnumSet.html?is-external=true#copyOf(java.util.Collection)" title="class or interface in java.util"><CODE>EnumSet.copyOf(Collection)</CODE></A>, this method does not produce an
- exception on an empty collection, and it may be called on any iterable, not
- just a <code>Collection</code>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="newHashSet()"><!-- --></A><H3>
-newHashSet</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashSet.html?is-external=true" title="class or interface in java.util">HashSet</A>&lt;E&gt; <B>newHashSet</B>()</PRE>
-<DL>
-<DD>Creates a <i>mutable</i>, empty <code>HashSet</code> instance.
-
- <p><b>Note:</b> if mutability is not required, use <A HREF="../../../../com/google/common/collect/ImmutableSet.html#of()"><CODE>ImmutableSet.of()</CODE></A> instead.
-
- <p><b>Note:</b> if <code>E</code> is an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><CODE>Enum</CODE></A> type, use <A HREF="http://java.sun.com/javase/6/docs/api/java/util/EnumSet.html?is-external=true#noneOf(java.lang.Class)" title="class or interface in java.util"><CODE>EnumSet.noneOf(java.lang.Class<E>)</CODE></A> instead.
-<P>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a new, empty <code>HashSet</code></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="newHashSet(java.lang.Object[])"><!-- --></A><A NAME="newHashSet(E...)"><!-- --></A><H3>
-newHashSet</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashSet.html?is-external=true" title="class or interface in java.util">HashSet</A>&lt;E&gt; <B>newHashSet</B>(E...&nbsp;elements)</PRE>
-<DL>
-<DD>Creates a <i>mutable</i> <code>HashSet</code> instance containing the given
- elements in unspecified order.
-
- <p><b>Note:</b> if mutability is not required and the elements are
- non-null, use <A HREF="../../../../com/google/common/collect/ImmutableSet.html#of(E...)"><CODE>ImmutableSet.of(Object[])</CODE></A> instead.
-
- <p><b>Note:</b> if <code>E</code> is an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><CODE>Enum</CODE></A> type, use <A HREF="http://java.sun.com/javase/6/docs/api/java/util/EnumSet.html?is-external=true#of(E, E...)" title="class or interface in java.util"><CODE>EnumSet.of(Enum, Enum[])</CODE></A> instead.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>elements</CODE> - the elements that the set should contain
-<DT><B>Returns:</B><DD>a new <code>HashSet</code> containing those elements (minus duplicates)</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="newHashSetWithExpectedSize(int)"><!-- --></A><H3>
-newHashSetWithExpectedSize</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashSet.html?is-external=true" title="class or interface in java.util">HashSet</A>&lt;E&gt; <B>newHashSetWithExpectedSize</B>(int&nbsp;expectedSize)</PRE>
-<DL>
-<DD>Creates an empty <code>HashSet</code> instance with enough capacity to hold the
- specified number of elements without rehashing.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>expectedSize</CODE> - the expected size
-<DT><B>Returns:</B><DD>a new, empty <code>HashSet</code> with enough capacity to hold <code>expectedSize</code> elements without rehashing
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>expectedSize</code> is negative</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="newHashSet(java.lang.Iterable)"><!-- --></A><H3>
-newHashSet</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashSet.html?is-external=true" title="class or interface in java.util">HashSet</A>&lt;E&gt; <B>newHashSet</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</PRE>
-<DL>
-<DD>Creates a <i>mutable</i> <code>HashSet</code> instance containing the given
- elements in unspecified order.
-
- <p><b>Note:</b> if mutability is not required and the elements are
- non-null, use <A HREF="../../../../com/google/common/collect/ImmutableSet.html#copyOf(java.lang.Iterable)"><CODE>ImmutableSet.copyOf(Iterable)</CODE></A> instead.
-
- <p><b>Note:</b> if <code>E</code> is an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><CODE>Enum</CODE></A> type, use
- <A HREF="../../../../com/google/common/collect/Sets.html#newEnumSet(java.lang.Iterable, java.lang.Class)"><CODE>newEnumSet(Iterable, Class)</CODE></A> instead.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>elements</CODE> - the elements that the set should contain
-<DT><B>Returns:</B><DD>a new <code>HashSet</code> containing those elements (minus duplicates)</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="newHashSet(java.util.Iterator)"><!-- --></A><H3>
-newHashSet</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashSet.html?is-external=true" title="class or interface in java.util">HashSet</A>&lt;E&gt; <B>newHashSet</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends E&gt;&nbsp;elements)</PRE>
-<DL>
-<DD>Creates a <i>mutable</i> <code>HashSet</code> instance containing the given
- elements in unspecified order.
-
- <p><b>Note:</b> if mutability is not required and the elements are
- non-null, use <A HREF="../../../../com/google/common/collect/ImmutableSet.html#copyOf(java.lang.Iterable)"><CODE>ImmutableSet.copyOf(Iterable)</CODE></A> instead.
-
- <p><b>Note:</b> if <code>E</code> is an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><CODE>Enum</CODE></A> type, you should create an
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/EnumSet.html?is-external=true" title="class or interface in java.util"><CODE>EnumSet</CODE></A> instead.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>elements</CODE> - the elements that the set should contain
-<DT><B>Returns:</B><DD>a new <code>HashSet</code> containing those elements (minus duplicates)</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="newLinkedHashSet()"><!-- --></A><H3>
-newLinkedHashSet</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/LinkedHashSet.html?is-external=true" title="class or interface in java.util">LinkedHashSet</A>&lt;E&gt; <B>newLinkedHashSet</B>()</PRE>
-<DL>
-<DD>Creates a <i>mutable</i>, empty <code>LinkedHashSet</code> instance.
-
- <p><b>Note:</b> if mutability is not required, use <A HREF="../../../../com/google/common/collect/ImmutableSet.html#of()"><CODE>ImmutableSet.of()</CODE></A> instead.
-<P>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a new, empty <code>LinkedHashSet</code></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="newLinkedHashSet(java.lang.Iterable)"><!-- --></A><H3>
-newLinkedHashSet</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/LinkedHashSet.html?is-external=true" title="class or interface in java.util">LinkedHashSet</A>&lt;E&gt; <B>newLinkedHashSet</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</PRE>
-<DL>
-<DD>Creates a <i>mutable</i> <code>LinkedHashSet</code> instance containing the
- given elements in order.
-
- <p><b>Note:</b> if mutability is not required and the elements are
- non-null, use <A HREF="../../../../com/google/common/collect/ImmutableSet.html#copyOf(java.lang.Iterable)"><CODE>ImmutableSet.copyOf(Iterable)</CODE></A> instead.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>elements</CODE> - the elements that the set should contain, in order
-<DT><B>Returns:</B><DD>a new <code>LinkedHashSet</code> containing those elements (minus
-     duplicates)</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="newTreeSet()"><!-- --></A><H3>
-newTreeSet</H3>
-<PRE>
-public static &lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/TreeSet.html?is-external=true" title="class or interface in java.util">TreeSet</A>&lt;E&gt; <B>newTreeSet</B>()</PRE>
-<DL>
-<DD>Creates a <i>mutable</i>, empty <code>TreeSet</code> instance sorted by the
- natural sort ordering of its elements.
-
- <p><b>Note:</b> if mutability is not required, use <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#of()"><CODE>ImmutableSortedSet.of()</CODE></A> instead.
-<P>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a new, empty <code>TreeSet</code></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="newTreeSet(java.lang.Iterable)"><!-- --></A><H3>
-newTreeSet</H3>
-<PRE>
-public static &lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/TreeSet.html?is-external=true" title="class or interface in java.util">TreeSet</A>&lt;E&gt; <B>newTreeSet</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</PRE>
-<DL>
-<DD>Creates a <i>mutable</i> <code>TreeSet</code> instance containing the given
- elements sorted by their natural ordering.
-
- <p><b>Note:</b> if mutability is not required, use <A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html#copyOf(java.lang.Iterable)"><CODE>ImmutableSortedSet.copyOf(Iterable)</CODE></A> instead.
-
- <p><b>Note:</b> If <code>elements</code> is a <code>SortedSet</code> with an explicit
- comparator, this method has different behavior than
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/TreeSet.html?is-external=true#TreeSet(java.util.SortedSet)" title="class or interface in java.util"><CODE>TreeSet.TreeSet(SortedSet)</CODE></A>, which returns a <code>TreeSet</code> with
- that comparator.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>elements</CODE> - the elements that the set should contain
-<DT><B>Returns:</B><DD>a new <code>TreeSet</code> containing those elements (minus duplicates)</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="newTreeSet(java.util.Comparator)"><!-- --></A><H3>
-newTreeSet</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/TreeSet.html?is-external=true" title="class or interface in java.util">TreeSet</A>&lt;E&gt; <B>newTreeSet</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super E&gt;&nbsp;comparator)</PRE>
-<DL>
-<DD>Creates a <i>mutable</i>, empty <code>TreeSet</code> instance with the given
- comparator.
-
- <p><b>Note:</b> if mutability is not required, use <code>ImmutableSortedSet.orderedBy(comparator).build()</code> instead.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>comparator</CODE> - the comparator to use to sort the set
-<DT><B>Returns:</B><DD>a new, empty <code>TreeSet</code>
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>comparator</code> is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="complementOf(java.util.Collection)"><!-- --></A><H3>
-complementOf</H3>
-<PRE>
-public static &lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;E&gt;&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/EnumSet.html?is-external=true" title="class or interface in java.util">EnumSet</A>&lt;E&gt; <B>complementOf</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;&nbsp;collection)</PRE>
-<DL>
-<DD>Creates an <code>EnumSet</code> consisting of all enum values that are not in
- the specified collection. If the collection is an <A HREF="http://java.sun.com/javase/6/docs/api/java/util/EnumSet.html?is-external=true" title="class or interface in java.util"><CODE>EnumSet</CODE></A>, this
- method has the same behavior as <A HREF="http://java.sun.com/javase/6/docs/api/java/util/EnumSet.html?is-external=true#complementOf(java.util.EnumSet)" title="class or interface in java.util"><CODE>EnumSet.complementOf(java.util.EnumSet<E>)</CODE></A>. Otherwise,
- the specified collection must contain at least one element, in order to
- determine the element type. If the collection could be empty, use
- <A HREF="../../../../com/google/common/collect/Sets.html#complementOf(java.util.Collection, java.lang.Class)"><CODE>complementOf(Collection, Class)</CODE></A> instead of this method.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>collection</CODE> - the collection whose complement should be stored in the
-     enum set
-<DT><B>Returns:</B><DD>a new, modifiable <code>EnumSet</code> containing all values of the enum
-     that aren't present in the given collection
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>collection</code> is not an
-     <code>EnumSet</code> instance and contains no elements</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="complementOf(java.util.Collection, java.lang.Class)"><!-- --></A><H3>
-complementOf</H3>
-<PRE>
-public static &lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;E&gt;&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/EnumSet.html?is-external=true" title="class or interface in java.util">EnumSet</A>&lt;E&gt; <B>complementOf</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;&nbsp;collection,
-                                                          <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;E&gt;&nbsp;type)</PRE>
-<DL>
-<DD>Creates an <code>EnumSet</code> consisting of all enum values that are not in
- the specified collection. This is equivalent to
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/EnumSet.html?is-external=true#complementOf(java.util.EnumSet)" title="class or interface in java.util"><CODE>EnumSet.complementOf(java.util.EnumSet<E>)</CODE></A>, but can act on any input collection, as long
- as the elements are of enum type.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>collection</CODE> - the collection whose complement should be stored in the
-     <code>EnumSet</code><DD><CODE>type</CODE> - the type of the elements in the set
-<DT><B>Returns:</B><DD>a new, modifiable <code>EnumSet</code> initially containing all the
-     values of the enum not present in the given collection</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="newSetFromMap(java.util.Map)"><!-- --></A><H3>
-newSetFromMap</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt; <B>newSetFromMap</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;E,<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</A>&gt;&nbsp;map)</PRE>
-<DL>
-<DD>Returns a set backed by the specified map. The resulting set displays
- the same ordering, concurrency, and performance characteristics as the
- backing map. In essence, this factory method provides a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A>
- implementation corresponding to any <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A> implementation. There is no
- need to use this method on a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A> implementation that already has a
- corresponding <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A> implementation (such as <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util"><CODE>HashMap</CODE></A> or
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html?is-external=true" title="class or interface in java.util"><CODE>TreeMap</CODE></A>).
-
- <p>Each method invocation on the set returned by this method results in
- exactly one method invocation on the backing map or its <tt>keySet</tt>
- view, with one exception. The <tt>addAll</tt> method is implemented as a
- sequence of <tt>put</tt> invocations on the backing map.
-
- <p>The specified map must be empty at the time this method is invoked,
- and should not be accessed directly after this method returns. These
- conditions are ensured if the map is created empty, passed directly
- to this method, and no reference to the map is retained, as illustrated
- in the following code fragment: <pre>  <code>Set&lt;Object&gt; identityHashSet = Sets.newSetFromMap(
-      new IdentityHashMap&lt;Object, Boolean&gt;());</code></pre>
-
- This method has the same behavior as the JDK 6 method
- <code>Collections.newSetFromMap()</code>. The returned set is serializable if
- the backing map is.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>map</CODE> - the backing map
-<DT><B>Returns:</B><DD>the set backed by the map
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <tt>map</tt> is not empty</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="union(java.util.Set, java.util.Set)"><!-- --></A><H3>
-union</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/Sets.SetView.html" title="class in com.google.common.collect">Sets.SetView</A>&lt;E&gt; <B>union</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;? extends E&gt;&nbsp;set1,
-                                        <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;? extends E&gt;&nbsp;set2)</PRE>
-<DL>
-<DD>Returns an unmodifiable <b>view</b> of the union of two sets. The returned
- set contains all elements that are contained in either backing set.
- Iterating over the returned set iterates first over all the elements of
- <code>set1</code>, then over each element of <code>set2</code>, in order, that is not
- contained in <code>set1</code>.
-
- <p>Results are undefined if <code>set1</code> and <code>set2</code> are sets based on
- different equivalence relations (as <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashSet.html?is-external=true" title="class or interface in java.util"><CODE>HashSet</CODE></A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/TreeSet.html?is-external=true" title="class or interface in java.util"><CODE>TreeSet</CODE></A>, and
- the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#keySet()" title="class or interface in java.util"><CODE>Map.keySet()</CODE></A> of an <A HREF="http://java.sun.com/javase/6/docs/api/java/util/IdentityHashMap.html?is-external=true" title="class or interface in java.util"><CODE>IdentityHashMap</CODE></A> all are).
-
- <p><b>Note:</b> The returned view performs better when <code>set1</code> is the
- smaller of the two sets. If you have reason to believe one of your sets
- will generally be smaller than the other, pass it first.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="intersection(java.util.Set, java.util.Set)"><!-- --></A><H3>
-intersection</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/Sets.SetView.html" title="class in com.google.common.collect">Sets.SetView</A>&lt;E&gt; <B>intersection</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt;&nbsp;set1,
-                                               <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;?&gt;&nbsp;set2)</PRE>
-<DL>
-<DD>Returns an unmodifiable <b>view</b> of the intersection of two sets. The
- returned set contains all elements that are contained by both backing sets.
- The iteration order of the returned set matches that of <code>set1</code>.
-
- <p>Results are undefined if <code>set1</code> and <code>set2</code> are sets based
- on different equivalence relations (as <code>HashSet</code>, <code>TreeSet</code>,
- and the keySet of an <code>IdentityHashMap</code> all are).
-
- <p><b>Note:</b> The returned view performs slightly better when <code>set1</code> is the smaller of the two sets. If you have reason to believe one of
- your sets will generally be smaller than the other, pass it first.
- Unfortunately, since this method sets the generic type of the returned set
- based on the type of the first set passed, this could in rare cases force
- you to make a cast, for example: <pre>  <code>Set&lt;Object&gt; aFewBadObjects = ...
-  Set&lt;String&gt; manyBadStrings = ...
-
-  // impossible for a non-String to be in the intersection
-  SuppressWarnings("unchecked")
-  Set&lt;String&gt; badStrings = (Set) Sets.intersection(
-      aFewBadObjects, manyBadStrings);</code></pre>
-
- This is unfortunate, but should come up only very rarely.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="difference(java.util.Set, java.util.Set)"><!-- --></A><H3>
-difference</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/Sets.SetView.html" title="class in com.google.common.collect">Sets.SetView</A>&lt;E&gt; <B>difference</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt;&nbsp;set1,
-                                             <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;?&gt;&nbsp;set2)</PRE>
-<DL>
-<DD>Returns an unmodifiable <b>view</b> of the difference of two sets. The
- returned set contains all elements that are contained by <code>set1</code> and
- not contained by <code>set2</code>. <code>set2</code> may also contain elements not
- present in <code>set1</code>; these are simply ignored. The iteration order of
- the returned set matches that of <code>set1</code>.
-
- <p>Results are undefined if <code>set1</code> and <code>set2</code> are sets based
- on different equivalence relations (as <code>HashSet</code>, <code>TreeSet</code>,
- and the keySet of an <code>IdentityHashMap</code> all are).
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="filter(java.util.Set, com.google.common.base.Predicate)"><!-- --></A><H3>
-filter</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt; <B>filter</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt;&nbsp;unfiltered,
-                                <A HREF="../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super E&gt;&nbsp;predicate)</PRE>
-<DL>
-<DD>Returns the elements of <code>unfiltered</code> that satisfy a predicate. The
- returned set is a live view of <code>unfiltered</code>; changes to one affect
- the other.
-
- <p>The resulting set's iterator does not support <code>remove()</code>, but all
- other set methods are supported. The set's <code>add()</code> and
- <code>addAll()</code> methods throw an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang"><CODE>IllegalArgumentException</CODE></A> if an
- element that doesn't satisfy the predicate is provided. When methods such
- as <code>removeAll()</code> and <code>clear()</code> are called on the filtered set,
- only elements that satisfy the filter will be removed from the underlying
- collection.
-
- <p>The returned set isn't threadsafe or serializable, even if
- <code>unfiltered</code> is.
-
- <p>Many of the filtered set's methods, such as <code>size()</code>, iterate
- across every element in the underlying set and determine which elements
- satisfy the filter. When a live view is <i>not</i> needed, it may be faster
- to copy <code>Iterables.filter(unfiltered, predicate)</code> and use the copy.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="cartesianProduct(java.util.List)"><!-- --></A><H3>
-cartesianProduct</H3>
-<PRE>
-public static &lt;B&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;B&gt;&gt; <B>cartesianProduct</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;? extends B&gt;&gt;&nbsp;sets)</PRE>
-<DL>
-<DD>Returns every possible list that can be formed by choosing one element
- from each of the given sets in order; the "n-ary
- <a href="http://en.wikipedia.org/wiki/Cartesian_product">Cartesian
- product</a>" of the sets. For example: <pre class="code">   <code>cartesianProduct(ImmutableList.of(
-       ImmutableSet.of(1, 2),
-       ImmutableSet.of("A", "B", "C")))</code></pre>
-
- returns a set containing six lists:
-
- <ul>
- <li><code>ImmutableList.of(1, "A")</code>
- <li><code>ImmutableList.of(1, "B")</code>
- <li><code>ImmutableList.of(1, "C")</code>
- <li><code>ImmutableList.of(2, "A")</code>
- <li><code>ImmutableList.of(2, "B")</code>
- <li><code>ImmutableList.of(2, "C")</code>
- </ul>
-
- The order in which these lists are returned is not guaranteed, however the
- position of an element inside a tuple always corresponds to the position of
- the set from which it came in the input list. Note that if any input set is
- empty, the Cartesian product will also be empty. If no sets at all are
- provided (an empty list), the resulting Cartesian product has one element,
- an empty list (counter-intuitive, but mathematically consistent).
-<P>
-<DD><DL>
-<DT><B>Type Parameters:</B><DD><CODE>B</CODE> - any common base class shared by all axes (often just <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang"><CODE>Object</CODE></A>)<DT><B>Parameters:</B><DD><CODE>sets</CODE> - the sets to choose elements from, in the order that
-     the elements chosen from those sets should appear in the resulting
-     lists
-<DT><B>Returns:</B><DD>the Cartesian product, as an immutable set containing immutable
-     lists
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>sets</code>, any one of the <code>sets</code>,
-     or any element of a provided set is null<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>tentative</b></DD>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="cartesianProduct(java.util.Set...)"><!-- --></A><H3>
-cartesianProduct</H3>
-<PRE>
-public static &lt;B&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;B&gt;&gt; <B>cartesianProduct</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;? extends B&gt;...&nbsp;sets)</PRE>
-<DL>
-<DD>Returns every possible list that can be formed by choosing one element
- from each of the given sets in order; the "n-ary
- <a href="http://en.wikipedia.org/wiki/Cartesian_product">Cartesian
- product</a>" of the sets. For example: <pre class="code">   <code>cartesianProduct(
-       ImmutableSet.of(1, 2),
-       ImmutableSet.of("A", "B", "C"))</code></pre>
-
- returns a set containing six lists:
-   w
- <ul>
- <li><code>ImmutableList.of(1, "A")</code>
- <li><code>ImmutableList.of(1, "B")</code>
- <li><code>ImmutableList.of(1, "C")</code>
- <li><code>ImmutableList.of(2, "A")</code>
- <li><code>ImmutableList.of(2, "B")</code>
- <li><code>ImmutableList.of(2, "C")</code>
- </ul>
-
- The order in which these lists are returned is not guaranteed, however the
- position of an element inside a tuple always corresponds to the position of
- the set from which it came in the input list. Note that if any input set is
- empty, the Cartesian product will also be empty. If no sets at all are
- provided, the resulting Cartesian product has one element, an empty list
- (counter-intuitive, but mathematically consistent).
-<P>
-<DD><DL>
-<DT><B>Type Parameters:</B><DD><CODE>B</CODE> - any common base class shared by all axes (often just <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang"><CODE>Object</CODE></A>)<DT><B>Parameters:</B><DD><CODE>sets</CODE> - the sets to choose elements from, in the order that
-     the elements chosen from those sets should appear in the resulting
-     lists
-<DT><B>Returns:</B><DD>the Cartesian product, as an immutable set containing immutable
-     lists
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>sets</code>, any one of the <code>sets</code>,
-     or any element of a provided set is null<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>tentative</b></DD>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Sets.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/Sets.SetView.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/Sets.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Sets.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/SortedSetMultimap.html b/javadoc/com/google/common/collect/SortedSetMultimap.html
deleted file mode 100644
index 2c93455..0000000
--- a/javadoc/com/google/common/collect/SortedSetMultimap.html
+++ /dev/null
@@ -1,398 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:59 PST 2010 -->
-<TITLE>
-SortedSetMultimap (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="SortedSetMultimap (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/SortedSetMultimap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/Sets.SetView.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/SortedSetMultimap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="SortedSetMultimap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Interface SortedSetMultimap&lt;K,V&gt;</H2>
-<DL>
-<DT><B>All Superinterfaces:</B> <DD><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;, <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;</DD>
-</DL>
-<DL>
-<DT><B>All Known Implementing Classes:</B> <DD><A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">TreeMultimap</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public interface <B>SortedSetMultimap&lt;K,V&gt;</B><DT>extends <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;</DL>
-</PRE>
-
-<P>
-A <code>SetMultimap</code> whose set of values for a given key are kept sorted;
- that is, they comprise a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util"><CODE>SortedSet</CODE></A>. It cannot hold duplicate
- key-value pairs; adding a key-value pair that's already in the multimap has
- no effect. This interface does not specify the ordering of the multimap's
- keys.
-
- <p>The <A HREF="../../../../com/google/common/collect/SortedSetMultimap.html#get(K)"><CODE>get(K)</CODE></A>, <A HREF="../../../../com/google/common/collect/SortedSetMultimap.html#removeAll(java.lang.Object)"><CODE>removeAll(java.lang.Object)</CODE></A>, and <A HREF="../../../../com/google/common/collect/SortedSetMultimap.html#replaceValues(K, java.lang.Iterable)"><CODE>replaceValues(K, java.lang.Iterable<? extends V>)</CODE></A> methods
- each return a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util"><CODE>SortedSet</CODE></A> of values, while <A HREF="../../../../com/google/common/collect/Multimap.html#entries()"><CODE>Multimap.entries()</CODE></A>
- returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A> of map entries. Though the method signature doesn't say
- so explicitly, the map returned by <A HREF="../../../../com/google/common/collect/SortedSetMultimap.html#asMap()"><CODE>asMap()</CODE></A> has <code>SortedSet</code>
- values.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Jared Levy</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">V</A>&gt;&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/SortedSetMultimap.html#asMap()">asMap</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a map view that associates each key with the corresponding values
- in the multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/SortedSetMultimap.html#get(K)">get</A></B>(<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">K</A>&nbsp;key)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection view of all values associated with a key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/SortedSetMultimap.html#removeAll(java.lang.Object)">removeAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes all values associated with a given key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/SortedSetMultimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></B>(<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">K</A>&nbsp;key,
-              <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">V</A>&gt;&nbsp;values)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a collection of values with the same key, replacing any existing
- values for that key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super <A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/SortedSetMultimap.html#valueComparator()">valueComparator</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the comparator that orders the multimap values, with a <code>null</code>
- indicating that natural ordering is used.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.SetMultimap"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface com.google.common.collect.<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html#entries()">entries</A>, <A HREF="../../../../com/google/common/collect/SetMultimap.html#equals(java.lang.Object)">equals</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.Multimap"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface com.google.common.collect.<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#clear()">clear</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#containsEntry(java.lang.Object, java.lang.Object)">containsEntry</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#containsKey(java.lang.Object)">containsKey</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#containsValue(java.lang.Object)">containsValue</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#hashCode()">hashCode</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#keys()">keys</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#keySet()">keySet</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#put(K, V)">put</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#putAll(K, java.lang.Iterable)">putAll</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#putAll(com.google.common.collect.Multimap)">putAll</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#remove(java.lang.Object, java.lang.Object)">remove</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#size()">size</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#values()">values</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="get(java.lang.Object)"><!-- --></A><A NAME="get(K)"><!-- --></A><H3>
-get</H3>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">V</A>&gt; <B>get</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                 <A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">K</A>&nbsp;key)</PRE>
-<DL>
-<DD>Returns a collection view of all values associated with a key. If no
- mappings in the multimap have the provided key, an empty collection is
- returned.
-
- <p>Changes to the returned collection will update the underlying multimap,
- and vice versa.
-
- <p>Because a <code>SortedSetMultimap</code> has unique sorted values for a given
- key, this method returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util"><CODE>SortedSet</CODE></A>, instead of the
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A> specified in the <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A> interface.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#get(K)">get</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html#get(K)">get</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to search for in multimap
-<DT><B>Returns:</B><DD>the collection of values that the key maps to</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="removeAll(java.lang.Object)"><!-- --></A><H3>
-removeAll</H3>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">V</A>&gt; <B>removeAll</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                       <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
-<DL>
-<DD>Removes all values associated with a given key.
-
- <p>Because a <code>SortedSetMultimap</code> has unique sorted values for a given
- key, this method returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util"><CODE>SortedSet</CODE></A>, instead of the
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A> specified in the <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A> interface.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#removeAll(java.lang.Object)">removeAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html#removeAll(java.lang.Object)">removeAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key of entries to remove from the multimap
-<DT><B>Returns:</B><DD>the collection of removed values, or an empty collection if no
-     values were associated with the provided key. The collection
-     <i>may</i> be modifiable, but updating it will have no effect on the
-     multimap.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="replaceValues(java.lang.Object,java.lang.Iterable)"><!-- --></A><A NAME="replaceValues(K, java.lang.Iterable)"><!-- --></A><H3>
-replaceValues</H3>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">V</A>&gt; <B>replaceValues</B>(<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">K</A>&nbsp;key,
-                           <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">V</A>&gt;&nbsp;values)</PRE>
-<DL>
-<DD>Stores a collection of values with the same key, replacing any existing
- values for that key.
-
- <p>Because a <code>SortedSetMultimap</code> has unique sorted values for a given
- key, this method returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util"><CODE>SortedSet</CODE></A>, instead of the
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A> specified in the <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A> interface.
-
- <p>Any duplicates in <code>values</code> will be stored in the multimap once.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to store in the multimap<DD><CODE>values</CODE> - values to store in the multimap
-<DT><B>Returns:</B><DD>the collection of replaced values, or an empty collection if no
-     values were previously associated with the key. The collection
-     <i>may</i> be modifiable, but updating it will have no effect on the
-     multimap.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="asMap()"><!-- --></A><H3>
-asMap</H3>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">V</A>&gt;&gt; <B>asMap</B>()</PRE>
-<DL>
-<DD>Returns a map view that associates each key with the corresponding values
- in the multimap. Changes to the returned map, such as element removal,
- will update the underlying multimap. The map never supports
- <code>setValue()</code> on the map entries, <code>put</code>, or <code>putAll</code>.
-
- <p>The collections returned by <code>asMap().get(Object)</code> have the same
- behavior as those returned by <A HREF="../../../../com/google/common/collect/SortedSetMultimap.html#get(K)"><CODE>get(K)</CODE></A>.
-
- <p>Though the method signature doesn't say so explicitly, the returned map
- has <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util"><CODE>SortedSet</CODE></A> values.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#asMap()">asMap</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html#asMap()">asMap</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">K</A>,<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a map view from a key to its collection of values</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="valueComparator()"><!-- --></A><H3>
-valueComparator</H3>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super <A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">V</A>&gt; <B>valueComparator</B>()</PRE>
-<DL>
-<DD>Returns the comparator that orders the multimap values, with a <code>null</code>
- indicating that natural ordering is used.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/SortedSetMultimap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/Sets.SetView.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/SortedSetMultimap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="SortedSetMultimap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/TreeMultimap.html b/javadoc/com/google/common/collect/TreeMultimap.html
deleted file mode 100644
index db01b66..0000000
--- a/javadoc/com/google/common/collect/TreeMultimap.html
+++ /dev/null
@@ -1,1021 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:59 PST 2010 -->
-<TITLE>
-TreeMultimap (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="TreeMultimap (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/TreeMultimap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/TreeMultimap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="TreeMultimap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class TreeMultimap&lt;K,V&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.TreeMultimap&lt;K,V&gt;</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;, <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;, <A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public class <B>TreeMultimap&lt;K,V&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
-</PRE>
-
-<P>
-Implementation of <code>Multimap</code> whose keys and values are ordered by
- their natural ordering or by supplied comparators. In all cases, this
- implementation uses <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true#compareTo(T)" title="class or interface in java.lang"><CODE>Comparable.compareTo(T)</CODE></A> or <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true#compare(T, T)" title="class or interface in java.util"><CODE>Comparator.compare(T, T)</CODE></A> instead of <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A> to determine
- equivalence of instances.
-
- <p><b>Warning:</b> The comparators or comparables used must be <i>consistent
- with equals</i> as explained by the <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang"><CODE>Comparable</CODE></A> class specification.
- Otherwise, the resulting multiset will violate the general contract of <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect"><CODE>SetMultimap</CODE></A>, which it is specified in terms of <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>.
-
- <p>The collections returned by <code>keySet</code> and <code>asMap</code> iterate
- through the keys according to the key comparator ordering or the natural
- ordering of the keys. Similarly, <code>get</code>, <code>removeAll</code>, and <code>replaceValues</code> return collections that iterate through the values according
- to the value comparator ordering or the natural ordering of the values. The
- collections generated by <code>entries</code>, <code>keys</code>, and <code>values</code>
- iterate across the keys according to the above key ordering, and for each
- key they iterate across the values according to the value ordering.
-
- <p>The multimap does not store duplicate key-value pairs. Adding a new
- key-value pair equal to an existing key-value pair has no effect.
-
- <p>Depending on the comparators, null keys and values may or may not be
- supported. The natural ordering does not support nulls. All optional multimap
- methods are supported, and all returned views are modifiable.
-
- <p>This class is not threadsafe when any concurrent operations update the
- multimap. Concurrent read operations will work correctly. To allow concurrent
- update operations, wrap your multimap with a call to <A HREF="../../../../com/google/common/collect/Multimaps.html#synchronizedSortedSetMultimap(com.google.common.collect.SortedSetMultimap)"><CODE>Multimaps.synchronizedSortedSetMultimap(com.google.common.collect.SortedSetMultimap<K, V>)</CODE></A>.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Jared Levy</DD>
-<DT><B>See Also:</B><DD><A HREF="../../../../serialized-form.html#com.google.common.collect.TreeMultimap">Serialized Form</A></DL>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="type parameter in TreeMultimap">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="type parameter in TreeMultimap">V</A>&gt;&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultimap.html#asMap()">asMap</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a map view that associates each key with the corresponding values
- in the multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultimap.html#clear()">clear</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes all key-value pairs from the multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultimap.html#containsEntry(java.lang.Object, java.lang.Object)">containsEntry</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
-              <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains the specified key-value pair.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultimap.html#containsKey(java.lang.Object)">containsKey</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains any values for the specified
- key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultimap.html#containsValue(java.lang.Object)">containsValue</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains the specified value for any
- key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>,V extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&gt; 
-<BR>
-<A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">TreeMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultimap.html#create()">create</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an empty <code>TreeMultimap</code> ordered by the natural ordering of
- its keys and values.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">TreeMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultimap.html#create(java.util.Comparator, java.util.Comparator)">create</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super K&gt;&nbsp;keyComparator,
-       <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super V&gt;&nbsp;valueComparator)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an empty <code>TreeMultimap</code> instance using explicit comparators.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>,V extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&gt; 
-<BR>
-<A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">TreeMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultimap.html#create(com.google.common.collect.Multimap)">create</A></B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a <code>TreeMultimap</code>, ordered by the natural ordering of its
- keys and values, with the same mappings as the specified multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;K,V&gt;&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultimap.html#entries()">entries</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection of all key-value pairs.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultimap.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares the specified object to this multimap for equality.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;V&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultimap.html#get(K)">get</A></B>(K&nbsp;key)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection view of all values associated with a key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultimap.html#hashCode()">hashCode</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the hash code for this multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultimap.html#isEmpty()">isEmpty</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if the multimap contains no key-value pairs.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super <A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="type parameter in TreeMultimap">K</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultimap.html#keyComparator()">keyComparator</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the comparator that orders the multimap keys.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;K&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultimap.html#keys()">keys</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection, which may contain duplicates, of all keys.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="type parameter in TreeMultimap">K</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultimap.html#keySet()">keySet</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the set of all keys, each appearing once in the returned set.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultimap.html#put(K, V)">put</A></B>(K&nbsp;key,
-    V&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a key-value pair in the multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultimap.html#putAll(K, java.lang.Iterable)">putAll</A></B>(K&nbsp;key,
-       <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends V&gt;&nbsp;values)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a collection of values with the same key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultimap.html#putAll(com.google.common.collect.Multimap)">putAll</A></B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies all of another multimap's key-value pairs into this multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultimap.html#remove(java.lang.Object, java.lang.Object)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
-       <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes a key-value pair from the multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;V&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultimap.html#removeAll(java.lang.Object)">removeAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes all values associated with a given key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;V&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></B>(K&nbsp;key,
-              <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends V&gt;&nbsp;values)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a collection of values with the same key, replacing any existing
- values for that key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultimap.html#size()">size</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of key-value pairs in the multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultimap.html#toString()">toString</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a string representation of the multimap, generated by calling
- <code>toString</code> on the map returned by <A HREF="../../../../com/google/common/collect/Multimap.html#asMap()"><CODE>Multimap.asMap()</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super <A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="type parameter in TreeMultimap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultimap.html#valueComparator()">valueComparator</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the comparator that orders the multimap values, with a <code>null</code>
- indicating that natural ordering is used.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultimap.html#values()">values</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection of all values in the multimap.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.SetMultimap"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface com.google.common.collect.<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html#entries()">entries</A>, <A HREF="../../../../com/google/common/collect/SetMultimap.html#equals(java.lang.Object)">equals</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.Multimap"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface com.google.common.collect.<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#clear()">clear</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#containsEntry(java.lang.Object, java.lang.Object)">containsEntry</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#containsKey(java.lang.Object)">containsKey</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#containsValue(java.lang.Object)">containsValue</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#hashCode()">hashCode</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#keys()">keys</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#put(K, V)">put</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#putAll(K, java.lang.Iterable)">putAll</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#putAll(com.google.common.collect.Multimap)">putAll</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#remove(java.lang.Object, java.lang.Object)">remove</A>, <A HREF="../../../../com/google/common/collect/Multimap.html#size()">size</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="create()"><!-- --></A><H3>
-create</H3>
-<PRE>
-public static &lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>,V extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&gt; <A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">TreeMultimap</A>&lt;K,V&gt; <B>create</B>()</PRE>
-<DL>
-<DD>Creates an empty <code>TreeMultimap</code> ordered by the natural ordering of
- its keys and values.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="create(java.util.Comparator, java.util.Comparator)"><!-- --></A><H3>
-create</H3>
-<PRE>
-public static &lt;K,V&gt; <A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">TreeMultimap</A>&lt;K,V&gt; <B>create</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super K&gt;&nbsp;keyComparator,
-                                             <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super V&gt;&nbsp;valueComparator)</PRE>
-<DL>
-<DD>Creates an empty <code>TreeMultimap</code> instance using explicit comparators.
- Neither comparator may be null; use <A HREF="../../../../com/google/common/collect/Ordering.html#natural()"><CODE>Ordering.natural()</CODE></A> to specify
- natural order.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>keyComparator</CODE> - the comparator that determines the key ordering<DD><CODE>valueComparator</CODE> - the comparator that determines the value ordering</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="create(com.google.common.collect.Multimap)"><!-- --></A><H3>
-create</H3>
-<PRE>
-public static &lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>,V extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&gt; <A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">TreeMultimap</A>&lt;K,V&gt; <B>create</B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</PRE>
-<DL>
-<DD>Constructs a <code>TreeMultimap</code>, ordered by the natural ordering of its
- keys and values, with the same mappings as the specified multimap.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>multimap</CODE> - the multimap whose contents are copied to this multimap</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="keyComparator()"><!-- --></A><H3>
-keyComparator</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super <A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="type parameter in TreeMultimap">K</A>&gt; <B>keyComparator</B>()</PRE>
-<DL>
-<DD>Returns the comparator that orders the multimap keys.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="valueComparator()"><!-- --></A><H3>
-valueComparator</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super <A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="type parameter in TreeMultimap">V</A>&gt; <B>valueComparator</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/SortedSetMultimap.html#valueComparator()">SortedSetMultimap</A></CODE></B></DD>
-<DD>Returns the comparator that orders the multimap values, with a <code>null</code>
- indicating that natural ordering is used.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="keySet()"><!-- --></A><H3>
-keySet</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="type parameter in TreeMultimap">K</A>&gt; <B>keySet</B>()</PRE>
-<DL>
-<DD>Returns the set of all keys, each appearing once in the returned set.
- Changes to the returned set will update the underlying multimap, and vice
- versa.
-
- <p>Because a <code>TreeMultimap</code> has unique sorted keys, this method
- returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util"><CODE>SortedSet</CODE></A>, instead of the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A> specified in the
- <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A> interface.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#keySet()">keySet</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="type parameter in TreeMultimap">K</A>,<A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="type parameter in TreeMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>the collection of distinct keys</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="asMap()"><!-- --></A><H3>
-asMap</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;<A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="type parameter in TreeMultimap">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="type parameter in TreeMultimap">V</A>&gt;&gt; <B>asMap</B>()</PRE>
-<DL>
-<DD>Returns a map view that associates each key with the corresponding values
- in the multimap. Changes to the returned map, such as element removal,
- will update the underlying multimap. The map does not support
- <code>setValue()</code> on its entries, <code>put</code>, or <code>putAll</code>.
-
- <p>The collections returned by <code>asMap().get(Object)</code> have the same
- behavior as those returned by <A HREF="../../../../com/google/common/collect/Multimap.html#get(K)"><CODE>Multimap.get(K)</CODE></A>.
-
- <p>Because a <code>TreeMultimap</code> has unique sorted keys, this method
- returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util"><CODE>SortedMap</CODE></A>, instead of the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A> specified
- in the <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A> interface.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#asMap()">asMap</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="type parameter in TreeMultimap">K</A>,<A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="type parameter in TreeMultimap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html#asMap()">asMap</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="type parameter in TreeMultimap">K</A>,<A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="type parameter in TreeMultimap">V</A>&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/SortedSetMultimap.html#asMap()">asMap</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;<A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="type parameter in TreeMultimap">K</A>,<A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="type parameter in TreeMultimap">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a map view from a key to its collection of values</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="get(java.lang.Object)"><!-- --></A><A NAME="get(K)"><!-- --></A><H3>
-get</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;V&gt; <B>get</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                        K&nbsp;key)</PRE>
-<DL>
-<DD>Returns a collection view of all values associated with a key. If no
- mappings in the multimap have the provided key, an empty collection is
- returned.
-
- <p>Changes to the returned collection will update the underlying multimap,
- and vice versa.
-
- <p>The returned collection is not serializable.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#get(K)">get</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html#get(K)">get</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/SortedSetMultimap.html#get(K)">get</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to search for in multimap
-<DT><B>Returns:</B><DD>the collection of values that the key maps to</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="removeAll(java.lang.Object)"><!-- --></A><H3>
-removeAll</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;V&gt; <B>removeAll</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                              <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
-<DL>
-<DD>Removes all values associated with a given key.
-
- <p>The returned collection is immutable.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#removeAll(java.lang.Object)">removeAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html#removeAll(java.lang.Object)">removeAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/SortedSetMultimap.html#removeAll(java.lang.Object)">removeAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key of entries to remove from the multimap
-<DT><B>Returns:</B><DD>the collection of removed values, or an empty collection if no
-     values were associated with the provided key. The collection
-     <i>may</i> be modifiable, but updating it will have no effect on the
-     multimap.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="replaceValues(java.lang.Object,java.lang.Iterable)"><!-- --></A><A NAME="replaceValues(K, java.lang.Iterable)"><!-- --></A><H3>
-replaceValues</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;V&gt; <B>replaceValues</B>(K&nbsp;key,
-                                  <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends V&gt;&nbsp;values)</PRE>
-<DL>
-<DD>Stores a collection of values with the same key, replacing any existing
- values for that key.
-
- <p>The returned collection is immutable.
-
- <p>Any duplicates in <code>values</code> will be stored in the multimap once.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/SortedSetMultimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to store in the multimap<DD><CODE>values</CODE> - values to store in the multimap
-<DT><B>Returns:</B><DD>the collection of replaced values, or an empty collection if no
-     values were previously associated with the key. The collection
-     <i>may</i> be modifiable, but updating it will have no effect on the
-     multimap.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="values()"><!-- --></A><H3>
-values</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt; <B>values</B>()</PRE>
-<DL>
-<DD>Returns a collection of all values in the multimap. Changes to the returned
- collection will update the underlying multimap, and vice versa.
-
- <p>The iterator generated by the returned collection traverses the values
- for one key, followed by the values of a second key, and so on.
-
- Consequently, the values do not follow their natural ordering or the
- ordering of the value comparator.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#values()">values</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>collection of values, which may include the same value multiple
-     times if it occurs in multiple mappings</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="entries()"><!-- --></A><H3>
-entries</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;K,V&gt;&gt; <B>entries</B>()</PRE>
-<DL>
-<DD>Returns a collection of all key-value pairs. Changes to the returned
- collection will update the underlying multimap, and vice versa. The entries
- collection does not support the <code>add</code> or <code>addAll</code> operations.
-
- <p>The iterator generated by the returned collection traverses the values
- for one key, followed by the values of a second key, and so on.
-
- <p>Each entry is an immutable snapshot of a key-value mapping in the
- multimap, taken at the time the entry is returned by a method call to the
- collection or its iterator.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#entries()">entries</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html#entries()">entries</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>collection of map entries consisting of key-value pairs</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="put(java.lang.Object,java.lang.Object)"><!-- --></A><A NAME="put(K, V)"><!-- --></A><H3>
-put</H3>
-<PRE>
-public boolean <B>put</B>(K&nbsp;key,
-                   V&nbsp;value)</PRE>
-<DL>
-<DD>Stores a key-value pair in the multimap.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#put(K, V)">put</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to store in the multimap<DD><CODE>value</CODE> - value to store in the multimap
-<DT><B>Returns:</B><DD><code>true</code> if the method increased the size of the multimap, or
-     <code>false</code> if the multimap already contained the key-value pair</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
-equals</H3>
-<PRE>
-public boolean <B>equals</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                      <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
-<DL>
-<DD>Compares the specified object to this multimap for equality.
-
- <p>Two <code>SetMultimap</code> instances are equal if, for each key, they
- contain the same values. Equality does not depend on the ordering of keys
- or values.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#equals(java.lang.Object)">equals</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html#equals(java.lang.Object)">equals</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="size()"><!-- --></A><H3>
-size</H3>
-<PRE>
-public int <B>size</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#size()">Multimap</A></CODE></B></DD>
-<DD>Returns the number of key-value pairs in the multimap.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#size()">size</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="isEmpty()"><!-- --></A><H3>
-isEmpty</H3>
-<PRE>
-public boolean <B>isEmpty</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#isEmpty()">Multimap</A></CODE></B></DD>
-<DD>Returns <code>true</code> if the multimap contains no key-value pairs.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#isEmpty()">isEmpty</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="containsKey(java.lang.Object)"><!-- --></A><H3>
-containsKey</H3>
-<PRE>
-public boolean <B>containsKey</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                           <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsKey(java.lang.Object)">Multimap</A></CODE></B></DD>
-<DD>Returns <code>true</code> if the multimap contains any values for the specified
- key.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsKey(java.lang.Object)">containsKey</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to search for in multimap</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="containsValue(java.lang.Object)"><!-- --></A><H3>
-containsValue</H3>
-<PRE>
-public boolean <B>containsValue</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                             <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsValue(java.lang.Object)">Multimap</A></CODE></B></DD>
-<DD>Returns <code>true</code> if the multimap contains the specified value for any
- key.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsValue(java.lang.Object)">containsValue</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>value</CODE> - value to search for in multimap</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="containsEntry(java.lang.Object, java.lang.Object)"><!-- --></A><H3>
-containsEntry</H3>
-<PRE>
-public boolean <B>containsEntry</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                             <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
-                             <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                             <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsEntry(java.lang.Object, java.lang.Object)">Multimap</A></CODE></B></DD>
-<DD>Returns <code>true</code> if the multimap contains the specified key-value pair.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#containsEntry(java.lang.Object, java.lang.Object)">containsEntry</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to search for in multimap<DD><CODE>value</CODE> - value to search for in multimap</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="remove(java.lang.Object, java.lang.Object)"><!-- --></A><H3>
-remove</H3>
-<PRE>
-public boolean <B>remove</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                      <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key,
-                      <FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                      <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;value)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#remove(java.lang.Object, java.lang.Object)">Multimap</A></CODE></B></DD>
-<DD>Removes a key-value pair from the multimap.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#remove(java.lang.Object, java.lang.Object)">remove</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key of entry to remove from the multimap<DD><CODE>value</CODE> - value of entry to remove the multimap
-<DT><B>Returns:</B><DD><code>true</code> if the multimap changed</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="putAll(java.lang.Object,java.lang.Iterable)"><!-- --></A><A NAME="putAll(K, java.lang.Iterable)"><!-- --></A><H3>
-putAll</H3>
-<PRE>
-public boolean <B>putAll</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                      K&nbsp;key,
-                      <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends V&gt;&nbsp;values)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#putAll(K, java.lang.Iterable)">Multimap</A></CODE></B></DD>
-<DD>Stores a collection of values with the same key.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#putAll(K, java.lang.Iterable)">putAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - key to store in the multimap<DD><CODE>values</CODE> - values to store in the multimap
-<DT><B>Returns:</B><DD><code>true</code> if the multimap changed</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="putAll(com.google.common.collect.Multimap)"><!-- --></A><H3>
-putAll</H3>
-<PRE>
-public boolean <B>putAll</B>(<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#putAll(com.google.common.collect.Multimap)">Multimap</A></CODE></B></DD>
-<DD>Copies all of another multimap's key-value pairs into this multimap. The
- order in which the mappings are added is determined by
- <code>multimap.entries()</code>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#putAll(com.google.common.collect.Multimap)">putAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>multimap</CODE> - mappings to store in this multimap
-<DT><B>Returns:</B><DD><code>true</code> if the multimap changed</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="clear()"><!-- --></A><H3>
-clear</H3>
-<PRE>
-public void <B>clear</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#clear()">Multimap</A></CODE></B></DD>
-<DD>Removes all key-value pairs from the multimap.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#clear()">clear</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="keys()"><!-- --></A><H3>
-keys</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;K&gt; <B>keys</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multimap.html#keys()">Multimap</A></CODE></B></DD>
-<DD>Returns a collection, which may contain duplicates, of all keys. The number
- of times of key appears in the returned multiset equals the number of
- mappings the key has in the multimap. Changes to the returned multiset will
- update the underlying multimap, and vice versa.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#keys()">keys</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a multiset with keys corresponding to the distinct keys of the
-     multimap and frequencies corresponding to the number of values that
-     each key maps to</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="hashCode()"><!-- --></A><H3>
-hashCode</H3>
-<PRE>
-public int <B>hashCode</B>()</PRE>
-<DL>
-<DD>Returns the hash code for this multimap.
-
- <p>The hash code of a multimap is defined as the hash code of the map view,
- as returned by <A HREF="../../../../com/google/common/collect/Multimap.html#asMap()"><CODE>Multimap.asMap()</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multimap.html#hashCode()">hashCode</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#hashCode()" title="class or interface in java.util"><CODE>Map.hashCode()</CODE></A></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toString()"><!-- --></A><H3>
-toString</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
-<DL>
-<DD>Returns a string representation of the multimap, generated by calling
- <code>toString</code> on the map returned by <A HREF="../../../../com/google/common/collect/Multimap.html#asMap()"><CODE>Multimap.asMap()</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a string representation of the multimap</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/TreeMultimap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/TreeMultimap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="TreeMultimap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/TreeMultiset.html b/javadoc/com/google/common/collect/TreeMultiset.html
deleted file mode 100644
index 21db2ec..0000000
--- a/javadoc/com/google/common/collect/TreeMultiset.html
+++ /dev/null
@@ -1,1040 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:59 PST 2010 -->
-<TITLE>
-TreeMultiset (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="TreeMultiset (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/TreeMultiset.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/TreeMultiset.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="TreeMultiset.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class TreeMultiset&lt;E&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">java.util.AbstractCollection</A>&lt;E&gt;
-      <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.TreeMultiset&lt;E&gt;</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public final class <B>TreeMultiset&lt;E&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</DL>
-</PRE>
-
-<P>
-A multiset which maintains the ordering of its elements, according to either
- their natural order or an explicit <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util"><CODE>Comparator</CODE></A>. In all cases, this
- implementation uses <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true#compareTo(T)" title="class or interface in java.lang"><CODE>Comparable.compareTo(T)</CODE></A> or <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true#compare(T, T)" title="class or interface in java.util"><CODE>Comparator.compare(T, T)</CODE></A> instead of <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A> to determine
- equivalence of instances.
-
- <p><b>Warning:</b> The comparison must be <i>consistent with equals</i> as
- explained by the <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang"><CODE>Comparable</CODE></A> class specification. Otherwise, the
- resulting multiset will violate the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A> contract, which it is
- specified in terms of <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Neal Kanodia, Jared Levy</DD>
-<DT><B>See Also:</B><DD><A HREF="../../../../serialized-form.html#com.google.common.collect.TreeMultiset">Serialized Form</A></DL>
-<HR>
-
-<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-<A NAME="nested_class_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Nested Class Summary</B></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;<A NAME="nested_classes_inherited_from_class_com.google.common.collect.Multiset"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Nested classes/interfaces inherited from interface com.google.common.collect.<A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="type parameter in Multiset.Entry">E</A>&gt;</CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultiset.html#add(E)">add</A></B>(E&nbsp;element)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds a single occurrence of the specified element to this multiset.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultiset.html#add(E, int)">add</A></B>(E&nbsp;element,
-    int&nbsp;occurrences)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds a number of occurrences of an element to this multiset.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultiset.html#addAll(java.util.Collection)">addAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;? extends E&gt;&nbsp;elementsToAdd)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultiset.html#clear()">clear</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultiset.html#contains(java.lang.Object)">contains</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Determines whether this multiset contains the specified element.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultiset.html#containsAll(java.util.Collection)">containsAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if this multiset contains at least one occurrence of
- each element in the specified collection.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultiset.html#count(java.lang.Object)">count</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of occurrences of an element in this multiset (the
- <i>count</i> of the element).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&gt; 
-<BR>
-<A HREF="../../../../com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect">TreeMultiset</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultiset.html#create()">create</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new, empty multiset, sorted according to the elements' natural
- order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect">TreeMultiset</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultiset.html#create(java.util.Comparator)">create</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super E&gt;&nbsp;comparator)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new, empty multiset, sorted according to the specified
- comparator.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&gt; 
-<BR>
-<A HREF="../../../../com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect">TreeMultiset</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultiset.html#create(java.lang.Iterable)">create</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an empty multiset containing the given initial elements, sorted
- according to the elements' natural order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/TreeMultiset.html" title="type parameter in TreeMultiset">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultiset.html#elementSet()">elementSet</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the set of distinct elements contained in this multiset.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;E&gt;&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultiset.html#entrySet()">entrySet</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of the contents of this multiset, grouped into <code>Multiset.Entry</code> instances, each providing an element of the multiset and
- the count of that element.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultiset.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares the specified object with this multiset for equality.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultiset.html#hashCode()">hashCode</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the hash code for this multiset.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultiset.html#isEmpty()">isEmpty</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;E&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultiset.html#iterator()">iterator</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultiset.html#remove(java.lang.Object)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes a <i>single</i> occurrence of the specified element from this
- multiset, if present.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultiset.html#remove(java.lang.Object, int)">remove</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element,
-       int&nbsp;occurrences)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes a number of occurrences of the specified element from this
- multiset.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultiset.html#removeAll(java.util.Collection)">removeAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToRemove)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultiset.html#retainAll(java.util.Collection)">retainAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToRetain)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultiset.html#setCount(E, int)">setCount</A></B>(E&nbsp;element,
-         int&nbsp;count)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds or removes the necessary occurrences of an element such that the
- element attains the desired count.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultiset.html#setCount(E, int, int)">setCount</A></B>(E&nbsp;element,
-         int&nbsp;oldCount,
-         int&nbsp;newCount)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Conditionally sets the count of an element to a new value, as described in
- <A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int)"><CODE>Multiset.setCount(Object, int)</CODE></A>, provided that the element has the expected
- current count.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultiset.html#size()">size</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/TreeMultiset.html#toString()">toString</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.util.AbstractCollection"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#toArray()" title="class or interface in java.util">toArray</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#toArray(T[])" title="class or interface in java.util">toArray</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.util.Collection"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#toArray()" title="class or interface in java.util">toArray</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#toArray(T[])" title="class or interface in java.util">toArray</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="create()"><!-- --></A><H3>
-create</H3>
-<PRE>
-public static &lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&gt; <A HREF="../../../../com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect">TreeMultiset</A>&lt;E&gt; <B>create</B>()</PRE>
-<DL>
-<DD>Creates a new, empty multiset, sorted according to the elements' natural
- order. All elements inserted into the multiset must implement the
- <code>Comparable</code> interface. Furthermore, all such elements must be
- <i>mutually comparable</i>: <code>e1.compareTo(e2)</code> must not throw a
- <code>ClassCastException</code> for any elements <code>e1</code> and <code>e2</code> in
- the multiset. If the user attempts to add an element to the multiset that
- violates this constraint (for example, the user attempts to add a string
- element to a set whose elements are integers), the <code>add(Object)</code>
- call will throw a <code>ClassCastException</code>.
-
- <p>The type specification is <code>&lt;E extends Comparable&gt;</code>, instead of the
- more specific <code>&lt;E extends Comparable&lt;? super E&gt;&gt;</code>, to support
- classes defined without generics.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="create(java.util.Comparator)"><!-- --></A><H3>
-create</H3>
-<PRE>
-public static &lt;E&gt; <A HREF="../../../../com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect">TreeMultiset</A>&lt;E&gt; <B>create</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super E&gt;&nbsp;comparator)</PRE>
-<DL>
-<DD>Creates a new, empty multiset, sorted according to the specified
- comparator. All elements inserted into the multiset must be <i>mutually
- comparable</i> by the specified comparator: <code>comparator.compare(e1,
- e2)</code> must not throw a <code>ClassCastException</code> for any elements <code>e1</code> and <code>e2</code> in the multiset. If the user attempts to add an element
- to the multiset that violates this constraint, the <code>add(Object)</code> call
- will throw a <code>ClassCastException</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>comparator</CODE> - the comparator that will be used to sort this multiset. A
-     null value indicates that the elements' <i>natural ordering</i> should
-     be used.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="create(java.lang.Iterable)"><!-- --></A><H3>
-create</H3>
-<PRE>
-public static &lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&gt; <A HREF="../../../../com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect">TreeMultiset</A>&lt;E&gt; <B>create</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</PRE>
-<DL>
-<DD>Creates an empty multiset containing the given initial elements, sorted
- according to the elements' natural order.
-
- <p>The type specification is <code>&lt;E extends Comparable&gt;</code>, instead of the
- more specific <code>&lt;E extends Comparable&lt;? super E&gt;&gt;</code>, to support
- classes defined without generics.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="elementSet()"><!-- --></A><H3>
-elementSet</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;<A HREF="../../../../com/google/common/collect/TreeMultiset.html" title="type parameter in TreeMultiset">E</A>&gt; <B>elementSet</B>()</PRE>
-<DL>
-<DD>Returns the set of distinct elements contained in this multiset. The
- element set is backed by the same data as the multiset, so any change to
- either is immediately reflected in the other. The order of the elements in
- the element set is unspecified.
-
- <p>If the element set supports any removal operations, these necessarily
- cause <b>all</b> occurrences of the removed element(s) to be removed from
- the multiset. Implementations are not expected to support the add
- operations, although this is possible.
-
- <p>A common use for the element set is to find the number of distinct
- elements in the multiset: <code>elementSet().size()</code>.
-
- <p>In <code>TreeMultiset</code>, the return type of this method is narrowed
- from <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A> to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util"><CODE>SortedSet</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#elementSet()">elementSet</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/TreeMultiset.html" title="type parameter in TreeMultiset">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a view of the set of distinct elements in this multiset</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="count(java.lang.Object)"><!-- --></A><H3>
-count</H3>
-<PRE>
-public int <B>count</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                 <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#count(java.lang.Object)">Multiset</A></CODE></B></DD>
-<DD>Returns the number of occurrences of an element in this multiset (the
- <i>count</i> of the element). Note that for an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>-based
- multiset, this gives the same result as <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#frequency(java.util.Collection, java.lang.Object)" title="class or interface in java.util"><CODE>Collections.frequency(java.util.Collection<?>, java.lang.Object)</CODE></A>
- (which would presumably perform more poorly).
-
- <p><b>Note:</b> the utility method <A HREF="../../../../com/google/common/collect/Iterables.html#frequency(java.lang.Iterable, java.lang.Object)"><CODE>Iterables.frequency(java.lang.Iterable<?>, java.lang.Object)</CODE></A> generalizes
- this operation; it correctly delegates to this method when dealing with a
- multiset, but it can also accept any other iterable type.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#count(java.lang.Object)">count</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../com/google/common/collect/TreeMultiset.html" title="type parameter in TreeMultiset">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to count occurrences of
-<DT><B>Returns:</B><DD>the number of occurrences of the element in this multiset; possibly
-     zero but never negative</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="entrySet()"><!-- --></A><H3>
-entrySet</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;E&gt;&gt; <B>entrySet</B>()</PRE>
-<DL>
-<DD>Returns a view of the contents of this multiset, grouped into <code>Multiset.Entry</code> instances, each providing an element of the multiset and
- the count of that element. This set contains exactly one entry for each
- distinct element in the multiset (thus it always has the same size as the
- <A HREF="../../../../com/google/common/collect/Multiset.html#elementSet()"><CODE>Multiset.elementSet()</CODE></A>). The order of the elements in the element set is
- unspecified.
-
- <p>The entry set is backed by the same data as the multiset, so any change
- to either is immediately reflected in the other. However, multiset changes
- may or may not be reflected in any <code>Entry</code> instances already
- retrieved from the entry set (this is implementation-dependent).
- Furthermore, implementations are not required to support modifications to
- the entry set at all, and the <code>Entry</code> instances themselves don't
- even have methods for modification. See the specific implementation class
- for more details on how its entry set handles modifications.
-
- <p>Invoking <A HREF="../../../../com/google/common/collect/Multiset.Entry.html#getCount()"><CODE>Multiset.Entry.getCount()</CODE></A> on an entry in the returned
- set always returns the current count of that element in the multiset, as
- opposed to the count at the time the entry was retrieved.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#entrySet()">entrySet</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a set of entries representing the data of this multiset</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="size()"><!-- --></A><H3>
-size</H3>
-<PRE>
-public int <B>size</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#size()" title="class or interface in java.util">size</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="iterator()"><!-- --></A><H3>
-iterator</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;E&gt; <B>iterator</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#iterator()">Multiset</A></CODE></B></DD>
-<DD>
-
- <p>Elements that occur multiple times in the multiset will appear
- multiple times in this iterator, though not necessarily sequentially.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#iterator()">iterator</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true#iterator()" title="class or interface in java.lang">iterator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#iterator()" title="class or interface in java.util">iterator</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="add(java.lang.Object,int)"><!-- --></A><A NAME="add(E, int)"><!-- --></A><H3>
-add</H3>
-<PRE>
-public int <B>add</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-               E&nbsp;element,
-               int&nbsp;occurrences)</PRE>
-<DL>
-<DD>Adds a number of occurrences of an element to this multiset. Note that if
- <code>occurrences == 1</code>, this method has the identical effect to <A HREF="../../../../com/google/common/collect/Multiset.html#add(E)"><CODE>Multiset.add(Object)</CODE></A>. This method is functionally equivalent (except in the case
- of overflow) to the call <code>addAll(Collections.nCopies(element,
- occurrences))</code>, which would presumably perform much more poorly.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#add(E, int)">add</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to add occurrences of; may be <code>null</code> only
-     if explicitly allowed by the implementation<DD><CODE>occurrences</CODE> - the number of occurrences of the element to add. May be
-     zero, in which case no change will be made.
-<DT><B>Returns:</B><DD>the count of the element before the operation; possibly zero
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if the call would result in more than
-     <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true#MAX_VALUE" title="class or interface in java.lang"><CODE>Integer.MAX_VALUE</CODE></A> occurrences of <code>element</code> in this
-     multiset.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="remove(java.lang.Object, int)"><!-- --></A><H3>
-remove</H3>
-<PRE>
-public int <B>remove</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                  <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element,
-                  int&nbsp;occurrences)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#remove(java.lang.Object, int)">Multiset</A></CODE></B></DD>
-<DD>Removes a number of occurrences of the specified element from this
- multiset. If the multiset contains fewer than this number of occurrences to
- begin with, all occurrences will be removed.  Note that if
- <code>occurrences == 1</code>, this is functionally equivalent to the call
- <code>remove(element)</code>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#remove(java.lang.Object, int)">remove</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to conditionally remove occurrences of<DD><CODE>occurrences</CODE> - the number of occurrences of the element to remove. May
-     be zero, in which case no change will be made.
-<DT><B>Returns:</B><DD>the count of the element before the operation; possibly zero</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="setCount(java.lang.Object,int)"><!-- --></A><A NAME="setCount(E, int)"><!-- --></A><H3>
-setCount</H3>
-<PRE>
-public int <B>setCount</B>(E&nbsp;element,
-                    int&nbsp;count)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int)">Multiset</A></CODE></B></DD>
-<DD>Adds or removes the necessary occurrences of an element such that the
- element attains the desired count.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int)">setCount</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to add or remove occurrences of; may be null
-     only if explicitly allowed by the implementation<DD><CODE>count</CODE> - the desired count of the element in this multiset
-<DT><B>Returns:</B><DD>the count of the element before the operation; possibly zero</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="isEmpty()"><!-- --></A><H3>
-isEmpty</H3>
-<PRE>
-public boolean <B>isEmpty</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#isEmpty()" title="class or interface in java.util">isEmpty</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="contains(java.lang.Object)"><!-- --></A><H3>
-contains</H3>
-<PRE>
-public boolean <B>contains</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                        <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#contains(java.lang.Object)">Multiset</A></CODE></B></DD>
-<DD>Determines whether this multiset contains the specified element.
-
- <p>This method refines <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util"><CODE>Collection.contains(java.lang.Object)</CODE></A> to further specify that
- it <b>may not</b> throw an exception in response to <code>element</code> being
- null or of the wrong type.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#contains(java.lang.Object)">contains</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util">contains</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#contains(java.lang.Object)" title="class or interface in java.util">contains</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to check for
-<DT><B>Returns:</B><DD><code>true</code> if this multiset contains at least one occurrence of
-     the element</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="add(java.lang.Object)"><!-- --></A><A NAME="add(E)"><!-- --></A><H3>
-add</H3>
-<PRE>
-public boolean <B>add</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                   E&nbsp;element)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#add(E)">Multiset</A></CODE></B></DD>
-<DD>Adds a single occurrence of the specified element to this multiset.
-
- <p>This method refines <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#add(E)" title="class or interface in java.util"><CODE>Collection.add(E)</CODE></A>, which only <i>ensures</i>
- the presence of the element, to further specify that a successful call must
- always increment the count of the element, and the overall size of the
- collection, by one.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#add(E)">add</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#add(E)" title="class or interface in java.util">add</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#add(E)" title="class or interface in java.util">add</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to add one occurrence of; may be null only if
-     explicitly allowed by the implementation
-<DT><B>Returns:</B><DD><code>true</code> always, since this call is required to modify the
-     multiset, unlike other <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A> types</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="remove(java.lang.Object)"><!-- --></A><H3>
-remove</H3>
-<PRE>
-public boolean <B>remove</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;element)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#remove(java.lang.Object)">Multiset</A></CODE></B></DD>
-<DD>Removes a <i>single</i> occurrence of the specified element from this
- multiset, if present.
-
- <p>This method refines <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util"><CODE>Collection.remove(java.lang.Object)</CODE></A> to further specify that it
- <b>may not</b> throw an exception in response to <code>element</code> being null
- or of the wrong type.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#remove(java.lang.Object)">remove</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#remove(java.lang.Object)" title="class or interface in java.util">remove</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to remove one occurrence of
-<DT><B>Returns:</B><DD><code>true</code> if an occurrence was found and removed</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="setCount(java.lang.Object,int,int)"><!-- --></A><A NAME="setCount(E, int, int)"><!-- --></A><H3>
-setCount</H3>
-<PRE>
-public boolean <B>setCount</B>(E&nbsp;element,
-                        int&nbsp;oldCount,
-                        int&nbsp;newCount)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int, int)">Multiset</A></CODE></B></DD>
-<DD>Conditionally sets the count of an element to a new value, as described in
- <A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int)"><CODE>Multiset.setCount(Object, int)</CODE></A>, provided that the element has the expected
- current count. If the current count is not <code>oldCount</code>, no change is
- made.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#setCount(E, int, int)">setCount</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>element</CODE> - the element to conditionally set the count of; may be null
-     only if explicitly allowed by the implementation<DD><CODE>oldCount</CODE> - the expected present count of the element in this multiset<DD><CODE>newCount</CODE> - the desired count of the element in this multiset
-<DT><B>Returns:</B><DD><code>true</code> if the condition for modification was met. This
-     implies that the multiset was indeed modified, unless
-     <code>oldCount == newCount</code>.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="containsAll(java.util.Collection)"><!-- --></A><H3>
-containsAll</H3>
-<PRE>
-public boolean <B>containsAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elements)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#containsAll(java.util.Collection)">Multiset</A></CODE></B></DD>
-<DD>Returns <code>true</code> if this multiset contains at least one occurrence of
- each element in the specified collection.
-
- <p>This method refines <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util"><CODE>Collection.containsAll(java.util.Collection<?>)</CODE></A> to further specify
- that it <b>may not</b> throw an exception in response to any of <code>elements</code> being null or of the wrong type.
-
- <p><b>Note:</b> this method does not take into account the occurrence
- count of an element in the two collections; it may still return <code>true</code> even if <code>elements</code> contains several occurrences of an element
- and this multiset contains only one. This is no different than any other
- collection type like <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util"><CODE>List</CODE></A>, but it may be unexpected to the user of
- a multiset.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#containsAll(java.util.Collection)">containsAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util">containsAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#containsAll(java.util.Collection)" title="class or interface in java.util">containsAll</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>elements</CODE> - the collection of elements to be checked for containment in
-     this multiset
-<DT><B>Returns:</B><DD><code>true</code> if this multiset contains at least one occurrence of
-     each element contained in <code>elements</code></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="addAll(java.util.Collection)"><!-- --></A><H3>
-addAll</H3>
-<PRE>
-public boolean <B>addAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;? extends E&gt;&nbsp;elementsToAdd)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#addAll(java.util.Collection)" title="class or interface in java.util">addAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#addAll(java.util.Collection)" title="class or interface in java.util">addAll</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="removeAll(java.util.Collection)"><!-- --></A><H3>
-removeAll</H3>
-<PRE>
-public boolean <B>removeAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToRemove)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#removeAll(java.util.Collection)">Multiset</A></CODE></B></DD>
-<DD>
-
- <p>This method refines <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#removeAll(java.util.Collection)" title="class or interface in java.util"><CODE>Collection.removeAll(java.util.Collection<?>)</CODE></A> to further specify that
- it <b>may not</b> throw an exception in response to any of <code>elements</code>
- being null or of the wrong type.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#removeAll(java.util.Collection)">removeAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#removeAll(java.util.Collection)" title="class or interface in java.util">removeAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#removeAll(java.util.Collection)" title="class or interface in java.util">removeAll</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="retainAll(java.util.Collection)"><!-- --></A><H3>
-retainAll</H3>
-<PRE>
-public boolean <B>retainAll</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;?&gt;&nbsp;elementsToRetain)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/google/common/collect/Multiset.html#retainAll(java.util.Collection)">Multiset</A></CODE></B></DD>
-<DD>
-
- <p>This method refines <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util"><CODE>Collection.retainAll(java.util.Collection<?>)</CODE></A> to further specify that
- it <b>may not</b> throw an exception in response to any of <code>elements</code>
- being null or of the wrong type.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#retainAll(java.util.Collection)">retainAll</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util">retainAll</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#retainAll(java.util.Collection)" title="class or interface in java.util">retainAll</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="clear()"><!-- --></A><H3>
-clear</H3>
-<PRE>
-public void <B>clear</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#clear()" title="class or interface in java.util">clear</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#clear()" title="class or interface in java.util">clear</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
-equals</H3>
-<PRE>
-public boolean <B>equals</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                      <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
-<DL>
-<DD>Compares the specified object with this multiset for equality. Returns
- <code>true</code> if the given object is also a multiset and contains equal
- elements with equal counts, regardless of order.
-
- <p>This implementation returns <code>true</code> if <code>other</code> is a multiset
- of the same size and if, for each element, the two multisets have the same
- count.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#equals(java.lang.Object)">equals</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.util">equals</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="hashCode()"><!-- --></A><H3>
-hashCode</H3>
-<PRE>
-public int <B>hashCode</B>()</PRE>
-<DL>
-<DD>Returns the hash code for this multiset. This is defined as the sum of
-
- <pre>  (element == null ? 0 : element.hashCode()) ^ count(element)</pre>
-
- over all distinct elements in the multiset. It follows that a multiset and
- its entry set always have the same hash code.
-
- <p>This implementation returns the hash code of <A HREF="../../../../com/google/common/collect/Multiset.html#entrySet()"><CODE>Multiset.entrySet()</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#hashCode()">hashCode</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true#hashCode()" title="class or interface in java.util">hashCode</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toString()"><!-- --></A><H3>
-toString</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
-<DL>
-<DD>
-
- <p>It is recommended, though not mandatory, that this method return the
- result of invoking <A HREF="../../../../com/google/common/collect/Multiset.html#toString()"><CODE>Multiset.toString()</CODE></A> on the <A HREF="../../../../com/google/common/collect/Multiset.html#entrySet()"><CODE>Multiset.entrySet()</CODE></A>, yielding a
- result such as
- <pre>
-     [a x 3, c, d x 2, e]
- </pre>
-
- <p>This implementation returns the result of invoking <code>toString</code> on
- <A HREF="../../../../com/google/common/collect/Multiset.html#entrySet()"><CODE>Multiset.entrySet()</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/google/common/collect/Multiset.html#toString()">toString</A></CODE> in interface <CODE><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true#toString()" title="class or interface in java.util">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util">AbstractCollection</A>&lt;E&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/TreeMultiset.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/TreeMultiset.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="TreeMultiset.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/UnmodifiableIterator.html b/javadoc/com/google/common/collect/UnmodifiableIterator.html
deleted file mode 100644
index 0c6b7da..0000000
--- a/javadoc/com/google/common/collect/UnmodifiableIterator.html
+++ /dev/null
@@ -1,284 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:59 PST 2010 -->
-<TITLE>
-UnmodifiableIterator (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="UnmodifiableIterator (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/UnmodifiableIterator.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;NEXT CLASS</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/UnmodifiableIterator.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="UnmodifiableIterator.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.collect</FONT>
-<BR>
-Class UnmodifiableIterator&lt;E&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.collect.UnmodifiableIterator&lt;E&gt;</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;E&gt;</DD>
-</DL>
-<DL>
-<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../../com/google/common/collect/AbstractIterator.html" title="class in com.google.common.collect">AbstractIterator</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public abstract class <B>UnmodifiableIterator&lt;E&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A><DT>implements <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;E&gt;</DL>
-</PRE>
-
-<P>
-An iterator that does not support <A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html#remove()"><CODE>remove()</CODE></A>.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>stable</b> (imported from Google Collections Library)</DD>
-<DT><B>Author:</B></DT>
-  <DD>Jared Levy</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html#UnmodifiableIterator()">UnmodifiableIterator</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html#remove()">remove</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the underlying data unmodified.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.util.Iterator"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true#hasNext()" title="class or interface in java.util">hasNext</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true#next()" title="class or interface in java.util">next</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="UnmodifiableIterator()"><!-- --></A><H3>
-UnmodifiableIterator</H3>
-<PRE>
-public <B>UnmodifiableIterator</B>()</PRE>
-<DL>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="remove()"><!-- --></A><H3>
-remove</H3>
-<PRE>
-public final void <B>remove</B>()</PRE>
-<DL>
-<DD>Guaranteed to throw an exception and leave the underlying data unmodified.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true#remove()" title="class or interface in java.util">remove</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;<A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="type parameter in UnmodifiableIterator">E</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</A></CODE> - always</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/UnmodifiableIterator.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;NEXT CLASS</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/UnmodifiableIterator.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="UnmodifiableIterator.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/AbstractIterator.html b/javadoc/com/google/common/collect/class-use/AbstractIterator.html
deleted file mode 100644
index fdef161..0000000
--- a/javadoc/com/google/common/collect/class-use/AbstractIterator.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.AbstractIterator (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.AbstractIterator (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/AbstractIterator.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useAbstractIterator.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="AbstractIterator.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.AbstractIterator</B></H2>
-</CENTER>
-No usage of com.google.common.collect.AbstractIterator
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/AbstractIterator.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useAbstractIterator.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="AbstractIterator.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ArrayListMultimap.html b/javadoc/com/google/common/collect/class-use/ArrayListMultimap.html
deleted file mode 100644
index 06d0e69..0000000
--- a/javadoc/com/google/common/collect/class-use/ArrayListMultimap.html
+++ /dev/null
@@ -1,222 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.ArrayListMultimap (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.ArrayListMultimap (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useArrayListMultimap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ArrayListMultimap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.ArrayListMultimap</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect">ArrayListMultimap</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect">ArrayListMultimap</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect">ArrayListMultimap</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect">ArrayListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ArrayListMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ArrayListMultimap.html#create()">create</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new, empty <code>ArrayListMultimap</code> with the default initial
- capacities.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect">ArrayListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ArrayListMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ArrayListMultimap.html#create(int, int)">create</A></B>(int&nbsp;expectedKeys,
-       int&nbsp;expectedValuesPerKey)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs an empty <code>ArrayListMultimap</code> with enough capacity to hold
- the specified numbers of keys and values without resizing.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect">ArrayListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ArrayListMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ArrayListMultimap.html#create(com.google.common.collect.Multimap)">create</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs an <code>ArrayListMultimap</code> with the same mappings as the
- specified multimap.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useArrayListMultimap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ArrayListMultimap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/AsynchronousComputationException.html b/javadoc/com/google/common/collect/class-use/AsynchronousComputationException.html
deleted file mode 100644
index c1802ad..0000000
--- a/javadoc/com/google/common/collect/class-use/AsynchronousComputationException.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.AsynchronousComputationException (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.AsynchronousComputationException (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/AsynchronousComputationException.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useAsynchronousComputationException.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="AsynchronousComputationException.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.AsynchronousComputationException</B></H2>
-</CENTER>
-No usage of com.google.common.collect.AsynchronousComputationException
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/AsynchronousComputationException.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useAsynchronousComputationException.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="AsynchronousComputationException.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/BiMap.html b/javadoc/com/google/common/collect/class-use/BiMap.html
deleted file mode 100644
index 57c32c5..0000000
--- a/javadoc/com/google/common/collect/class-use/BiMap.html
+++ /dev/null
@@ -1,291 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Uses of Interface com.google.common.collect.BiMap (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Interface com.google.common.collect.BiMap (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useBiMap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="BiMap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Interface<br>com.google.common.collect.BiMap</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Classes in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that implement <A HREF="../../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect">EnumBiMap&lt;K extends Enum&lt;K&gt;,V extends Enum&lt;V&gt;&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <code>BiMap</code> backed by two <code>EnumMap</code> instances.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect">EnumHashBiMap&lt;K extends Enum&lt;K&gt;,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <code>BiMap</code> backed by an <code>EnumMap</code> instance for keys-to-values, and
- a <code>HashMap</code> instance for values-to-keys.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect">HashBiMap&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <A HREF="../../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect"><CODE>BiMap</CODE></A> backed by two <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util"><CODE>HashMap</CODE></A> instances.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable <A HREF="../../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect"><CODE>BiMap</CODE></A> with reliable user-specified iteration order.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;<A HREF="../../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">V</A>,<A HREF="../../../../../com/google/common/collect/BiMap.html" title="type parameter in BiMap">K</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>BiMap.</B><B><A HREF="../../../../../com/google/common/collect/BiMap.html#inverse()">inverse</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the inverse view of this bimap, which maps each of this bimap's
- values to its associated key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Maps.</B><B><A HREF="../../../../../com/google/common/collect/Maps.html#synchronizedBiMap(com.google.common.collect.BiMap)">synchronizedBiMap</A></B>(<A HREF="../../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt;&nbsp;bimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a synchronized (thread-safe) bimap backed by the specified bimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Maps.</B><B><A HREF="../../../../../com/google/common/collect/Maps.html#unmodifiableBiMap(com.google.common.collect.BiMap)">unmodifiableBiMap</A></B>(<A HREF="../../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;? extends K,? extends V&gt;&nbsp;bimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable view of the specified bimap.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> with parameters of type <A HREF="../../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Maps.</B><B><A HREF="../../../../../com/google/common/collect/Maps.html#synchronizedBiMap(com.google.common.collect.BiMap)">synchronizedBiMap</A></B>(<A HREF="../../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt;&nbsp;bimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a synchronized (thread-safe) bimap backed by the specified bimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Maps.</B><B><A HREF="../../../../../com/google/common/collect/Maps.html#unmodifiableBiMap(com.google.common.collect.BiMap)">unmodifiableBiMap</A></B>(<A HREF="../../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;? extends K,? extends V&gt;&nbsp;bimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable view of the specified bimap.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useBiMap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="BiMap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ClassToInstanceMap.html b/javadoc/com/google/common/collect/class-use/ClassToInstanceMap.html
deleted file mode 100644
index dd40d9c..0000000
--- a/javadoc/com/google/common/collect/class-use/ClassToInstanceMap.html
+++ /dev/null
@@ -1,189 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Interface com.google.common.collect.ClassToInstanceMap (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Interface com.google.common.collect.ClassToInstanceMap (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useClassToInstanceMap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ClassToInstanceMap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Interface<br>com.google.common.collect.ClassToInstanceMap</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect">ClassToInstanceMap</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect">ClassToInstanceMap</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Classes in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that implement <A HREF="../../../../../com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect">ClassToInstanceMap</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap&lt;B&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A class-to-instance map backed by an <A HREF="../../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect"><CODE>ImmutableMap</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect">MutableClassToInstanceMap&lt;B&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A mutable class-to-instance map backed by an arbitrary user-provided map.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useClassToInstanceMap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ClassToInstanceMap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/Collections2.html b/javadoc/com/google/common/collect/class-use/Collections2.html
deleted file mode 100644
index 0e3ecc3..0000000
--- a/javadoc/com/google/common/collect/class-use/Collections2.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.Collections2 (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.Collections2 (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/Collections2.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useCollections2.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Collections2.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.Collections2</B></H2>
-</CENTER>
-No usage of com.google.common.collect.Collections2
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/Collections2.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useCollections2.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Collections2.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ComparisonChain.html b/javadoc/com/google/common/collect/class-use/ComparisonChain.html
deleted file mode 100644
index 705f7d0..0000000
--- a/javadoc/com/google/common/collect/class-use/ComparisonChain.html
+++ /dev/null
@@ -1,261 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.ComparisonChain (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.ComparisonChain (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ComparisonChain.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useComparisonChain.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ComparisonChain.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.ComparisonChain</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/collect/ComparisonChain.html" title="class in com.google.common.collect">ComparisonChain</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/ComparisonChain.html" title="class in com.google.common.collect">ComparisonChain</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/ComparisonChain.html" title="class in com.google.common.collect">ComparisonChain</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>abstract &nbsp;<A HREF="../../../../../com/google/common/collect/ComparisonChain.html" title="class in com.google.common.collect">ComparisonChain</A></CODE></FONT></TD>
-<TD><CODE><B>ComparisonChain.</B><B><A HREF="../../../../../com/google/common/collect/ComparisonChain.html#compare(boolean, boolean)">compare</A></B>(boolean&nbsp;left,
-        boolean&nbsp;right)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares two <code>boolean</code> values as specified by <A HREF="../../../../../com/google/common/primitives/Booleans.html#compare(boolean, boolean)"><CODE>Booleans.compare(boolean, boolean)</CODE></A>, <i>if</i> the result of this comparison chain has not
- already been determined.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>abstract &nbsp;<A HREF="../../../../../com/google/common/collect/ComparisonChain.html" title="class in com.google.common.collect">ComparisonChain</A></CODE></FONT></TD>
-<TD><CODE><B>ComparisonChain.</B><B><A HREF="../../../../../com/google/common/collect/ComparisonChain.html#compare(java.lang.Comparable, java.lang.Comparable)">compare</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;?&gt;&nbsp;left,
-        <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;?&gt;&nbsp;right)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares two comparable objects as specified by <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true#compareTo(T)" title="class or interface in java.lang"><CODE>Comparable.compareTo(T)</CODE></A>, <i>if</i> the result of this comparison chain
- has not already been determined.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>abstract &nbsp;<A HREF="../../../../../com/google/common/collect/ComparisonChain.html" title="class in com.google.common.collect">ComparisonChain</A></CODE></FONT></TD>
-<TD><CODE><B>ComparisonChain.</B><B><A HREF="../../../../../com/google/common/collect/ComparisonChain.html#compare(double, double)">compare</A></B>(double&nbsp;left,
-        double&nbsp;right)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares two <code>double</code> values as specified by <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Double.html?is-external=true#compare(double, double)" title="class or interface in java.lang"><CODE>Double.compare(double, double)</CODE></A>, <i>if</i> the result of this comparison chain has not
- already been determined.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>abstract &nbsp;<A HREF="../../../../../com/google/common/collect/ComparisonChain.html" title="class in com.google.common.collect">ComparisonChain</A></CODE></FONT></TD>
-<TD><CODE><B>ComparisonChain.</B><B><A HREF="../../../../../com/google/common/collect/ComparisonChain.html#compare(float, float)">compare</A></B>(float&nbsp;left,
-        float&nbsp;right)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares two <code>float</code> values as specified by <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true#compare(float, float)" title="class or interface in java.lang"><CODE>Float.compare(float, float)</CODE></A>, <i>if</i> the result of this comparison chain has not
- already been determined.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>abstract &nbsp;<A HREF="../../../../../com/google/common/collect/ComparisonChain.html" title="class in com.google.common.collect">ComparisonChain</A></CODE></FONT></TD>
-<TD><CODE><B>ComparisonChain.</B><B><A HREF="../../../../../com/google/common/collect/ComparisonChain.html#compare(int, int)">compare</A></B>(int&nbsp;left,
-        int&nbsp;right)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares two <code>int</code> values as specified by <A HREF="../../../../../com/google/common/primitives/Ints.html#compare(int, int)"><CODE>Ints.compare(int, int)</CODE></A>,
- <i>if</i> the result of this comparison chain has not already been
- determined.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>abstract &nbsp;<A HREF="../../../../../com/google/common/collect/ComparisonChain.html" title="class in com.google.common.collect">ComparisonChain</A></CODE></FONT></TD>
-<TD><CODE><B>ComparisonChain.</B><B><A HREF="../../../../../com/google/common/collect/ComparisonChain.html#compare(long, long)">compare</A></B>(long&nbsp;left,
-        long&nbsp;right)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares two <code>long</code> values as specified by <A HREF="../../../../../com/google/common/primitives/Longs.html#compare(long, long)"><CODE>Longs.compare(long, long)</CODE></A>,
- <i>if</i> the result of this comparison chain has not already been
- determined.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>abstract 
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/collect/ComparisonChain.html" title="class in com.google.common.collect">ComparisonChain</A></CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ComparisonChain.</B><B><A HREF="../../../../../com/google/common/collect/ComparisonChain.html#compare(T, T, java.util.Comparator)">compare</A></B>(T&nbsp;left,
-        T&nbsp;right,
-        <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;T&gt;&nbsp;comparator)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares two objects using a comparator, <i>if</i> the result of this
- comparison chain has not already been determined.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/collect/ComparisonChain.html" title="class in com.google.common.collect">ComparisonChain</A></CODE></FONT></TD>
-<TD><CODE><B>ComparisonChain.</B><B><A HREF="../../../../../com/google/common/collect/ComparisonChain.html#start()">start</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Begins a new chained comparison statement.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ComparisonChain.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useComparisonChain.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ComparisonChain.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ComputationException.html b/javadoc/com/google/common/collect/class-use/ComputationException.html
deleted file mode 100644
index 75adbdc..0000000
--- a/javadoc/com/google/common/collect/class-use/ComputationException.html
+++ /dev/null
@@ -1,181 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.ComputationException (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.ComputationException (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ComputationException.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useComputationException.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ComputationException.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.ComputationException</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/collect/ComputationException.html" title="class in com.google.common.collect">ComputationException</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/ComputationException.html" title="class in com.google.common.collect">ComputationException</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Subclasses of <A HREF="../../../../../com/google/common/collect/ComputationException.html" title="class in com.google.common.collect">ComputationException</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/AsynchronousComputationException.html" title="class in com.google.common.collect">AsynchronousComputationException</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Wraps an exception that occured during a computation in a different thread.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ComputationException.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useComputationException.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ComputationException.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ConcurrentHashMultiset.html b/javadoc/com/google/common/collect/class-use/ConcurrentHashMultiset.html
deleted file mode 100644
index 7998d3d..0000000
--- a/javadoc/com/google/common/collect/class-use/ConcurrentHashMultiset.html
+++ /dev/null
@@ -1,206 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.ConcurrentHashMultiset (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.ConcurrentHashMultiset (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useConcurrentHashMultiset.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ConcurrentHashMultiset.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.ConcurrentHashMultiset</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect">ConcurrentHashMultiset</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect">ConcurrentHashMultiset</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect">ConcurrentHashMultiset</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect">ConcurrentHashMultiset</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ConcurrentHashMultiset.</B><B><A HREF="../../../../../com/google/common/collect/ConcurrentHashMultiset.html#create()">create</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new, empty <code>ConcurrentHashMultiset</code> using the default
- initial capacity, load factor, and concurrency settings.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect">ConcurrentHashMultiset</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ConcurrentHashMultiset.</B><B><A HREF="../../../../../com/google/common/collect/ConcurrentHashMultiset.html#create(java.lang.Iterable)">create</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>ConcurrentHashMultiset</code> containing the specified
- elements, using the default initial capacity, load factor, and concurrency
- settings.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useConcurrentHashMultiset.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ConcurrentHashMultiset.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/EnumBiMap.html b/javadoc/com/google/common/collect/class-use/EnumBiMap.html
deleted file mode 100644
index afc7e2c..0000000
--- a/javadoc/com/google/common/collect/class-use/EnumBiMap.html
+++ /dev/null
@@ -1,209 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.EnumBiMap (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.EnumBiMap (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useEnumBiMap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="EnumBiMap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.EnumBiMap</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect">EnumBiMap</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect">EnumBiMap</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect">EnumBiMap</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;K&gt;,V extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;V&gt;&gt; 
-<BR>
-<A HREF="../../../../../com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect">EnumBiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>EnumBiMap.</B><B><A HREF="../../../../../com/google/common/collect/EnumBiMap.html#create(java.lang.Class, java.lang.Class)">create</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;K&gt;&nbsp;keyType,
-       <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;V&gt;&nbsp;valueType)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new, empty <code>EnumBiMap</code> using the specified key and value
- types.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;K&gt;,V extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;V&gt;&gt; 
-<BR>
-<A HREF="../../../../../com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect">EnumBiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>EnumBiMap.</B><B><A HREF="../../../../../com/google/common/collect/EnumBiMap.html#create(java.util.Map)">create</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;&nbsp;map)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new bimap with the same mappings as the specified map.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useEnumBiMap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="EnumBiMap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/EnumHashBiMap.html b/javadoc/com/google/common/collect/class-use/EnumHashBiMap.html
deleted file mode 100644
index a83382d..0000000
--- a/javadoc/com/google/common/collect/class-use/EnumHashBiMap.html
+++ /dev/null
@@ -1,207 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.EnumHashBiMap (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.EnumHashBiMap (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useEnumHashBiMap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="EnumHashBiMap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.EnumHashBiMap</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect">EnumHashBiMap</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect">EnumHashBiMap</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect">EnumHashBiMap</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;K&gt;,V&gt; 
-<BR>
-<A HREF="../../../../../com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect">EnumHashBiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>EnumHashBiMap.</B><B><A HREF="../../../../../com/google/common/collect/EnumHashBiMap.html#create(java.lang.Class)">create</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;K&gt;&nbsp;keyType)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new, empty <code>EnumHashBiMap</code> using the specified key type.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;K&gt;,V&gt; 
-<BR>
-<A HREF="../../../../../com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect">EnumHashBiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>EnumHashBiMap.</B><B><A HREF="../../../../../com/google/common/collect/EnumHashBiMap.html#create(java.util.Map)">create</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,? extends V&gt;&nbsp;map)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a new bimap with the same mappings as the specified map.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useEnumHashBiMap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="EnumHashBiMap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/EnumMultiset.html b/javadoc/com/google/common/collect/class-use/EnumMultiset.html
deleted file mode 100644
index 583d0fc..0000000
--- a/javadoc/com/google/common/collect/class-use/EnumMultiset.html
+++ /dev/null
@@ -1,207 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.EnumMultiset (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.EnumMultiset (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/EnumMultiset.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useEnumMultiset.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="EnumMultiset.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.EnumMultiset</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/collect/EnumMultiset.html" title="class in com.google.common.collect">EnumMultiset</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/EnumMultiset.html" title="class in com.google.common.collect">EnumMultiset</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/EnumMultiset.html" title="class in com.google.common.collect">EnumMultiset</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;E&gt;&gt; 
-<BR>
-<A HREF="../../../../../com/google/common/collect/EnumMultiset.html" title="class in com.google.common.collect">EnumMultiset</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>EnumMultiset.</B><B><A HREF="../../../../../com/google/common/collect/EnumMultiset.html#create(java.lang.Class)">create</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;E&gt;&nbsp;type)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an empty <code>EnumMultiset</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;E&gt;&gt; 
-<BR>
-<A HREF="../../../../../com/google/common/collect/EnumMultiset.html" title="class in com.google.common.collect">EnumMultiset</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>EnumMultiset.</B><B><A HREF="../../../../../com/google/common/collect/EnumMultiset.html#create(java.lang.Iterable)">create</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>EnumMultiset</code> containing the specified elements.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/EnumMultiset.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useEnumMultiset.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="EnumMultiset.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ForwardingCollection.html b/javadoc/com/google/common/collect/class-use/ForwardingCollection.html
deleted file mode 100644
index 0f3f7af..0000000
--- a/javadoc/com/google/common/collect/class-use/ForwardingCollection.html
+++ /dev/null
@@ -1,213 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.ForwardingCollection (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.ForwardingCollection (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useForwardingCollection.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingCollection.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.ForwardingCollection</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Subclasses of <A HREF="../../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect">ForwardingList&lt;E&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A list which forwards all its method calls to another list.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect">ForwardingMultiset&lt;E&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A multiset which forwards all its method calls to another multiset.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingQueue.html" title="class in com.google.common.collect">ForwardingQueue&lt;E&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A queue which forwards all its method calls to another queue.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingSet.html" title="class in com.google.common.collect">ForwardingSet&lt;E&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A set which forwards all its method calls to another set.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingSortedSet.html" title="class in com.google.common.collect">ForwardingSortedSet&lt;E&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A sorted set which forwards all its method calls to another sorted set.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useForwardingCollection.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingCollection.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ForwardingConcurrentMap.html b/javadoc/com/google/common/collect/class-use/ForwardingConcurrentMap.html
deleted file mode 100644
index 7074a3b..0000000
--- a/javadoc/com/google/common/collect/class-use/ForwardingConcurrentMap.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.ForwardingConcurrentMap (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.ForwardingConcurrentMap (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useForwardingConcurrentMap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingConcurrentMap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.ForwardingConcurrentMap</B></H2>
-</CENTER>
-No usage of com.google.common.collect.ForwardingConcurrentMap
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useForwardingConcurrentMap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingConcurrentMap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ForwardingIterator.html b/javadoc/com/google/common/collect/class-use/ForwardingIterator.html
deleted file mode 100644
index 01dbcfe..0000000
--- a/javadoc/com/google/common/collect/class-use/ForwardingIterator.html
+++ /dev/null
@@ -1,182 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.ForwardingIterator (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.ForwardingIterator (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ForwardingIterator.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useForwardingIterator.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingIterator.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.ForwardingIterator</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/collect/ForwardingIterator.html" title="class in com.google.common.collect">ForwardingIterator</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/ForwardingIterator.html" title="class in com.google.common.collect">ForwardingIterator</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Subclasses of <A HREF="../../../../../com/google/common/collect/ForwardingIterator.html" title="class in com.google.common.collect">ForwardingIterator</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingListIterator.html" title="class in com.google.common.collect">ForwardingListIterator&lt;E&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A list iterator which forwards all its method calls to another list
- iterator.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ForwardingIterator.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useForwardingIterator.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingIterator.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ForwardingList.html b/javadoc/com/google/common/collect/class-use/ForwardingList.html
deleted file mode 100644
index 81b79db..0000000
--- a/javadoc/com/google/common/collect/class-use/ForwardingList.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.ForwardingList (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.ForwardingList (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useForwardingList.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingList.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.ForwardingList</B></H2>
-</CENTER>
-No usage of com.google.common.collect.ForwardingList
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useForwardingList.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingList.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ForwardingListIterator.html b/javadoc/com/google/common/collect/class-use/ForwardingListIterator.html
deleted file mode 100644
index 33b128e..0000000
--- a/javadoc/com/google/common/collect/class-use/ForwardingListIterator.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.ForwardingListIterator (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.ForwardingListIterator (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ForwardingListIterator.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useForwardingListIterator.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingListIterator.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.ForwardingListIterator</B></H2>
-</CENTER>
-No usage of com.google.common.collect.ForwardingListIterator
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ForwardingListIterator.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useForwardingListIterator.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingListIterator.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ForwardingMap.html b/javadoc/com/google/common/collect/class-use/ForwardingMap.html
deleted file mode 100644
index 5cc5cfd..0000000
--- a/javadoc/com/google/common/collect/class-use/ForwardingMap.html
+++ /dev/null
@@ -1,231 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.ForwardingMap (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.ForwardingMap (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useForwardingMap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingMap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.ForwardingMap</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Subclasses of <A HREF="../../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect">EnumBiMap&lt;K extends Enum&lt;K&gt;,V extends Enum&lt;V&gt;&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <code>BiMap</code> backed by two <code>EnumMap</code> instances.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect">EnumHashBiMap&lt;K extends Enum&lt;K&gt;,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <code>BiMap</code> backed by an <code>EnumMap</code> instance for keys-to-values, and
- a <code>HashMap</code> instance for values-to-keys.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="class in com.google.common.collect">ForwardingConcurrentMap&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A concurrent map which forwards all its method calls to another concurrent
- map.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingSortedMap.html" title="class in com.google.common.collect">ForwardingSortedMap&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A sorted map which forwards all its method calls to another sorted map.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect">HashBiMap&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <A HREF="../../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect"><CODE>BiMap</CODE></A> backed by two <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util"><CODE>HashMap</CODE></A> instances.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap&lt;B&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A class-to-instance map backed by an <A HREF="../../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect"><CODE>ImmutableMap</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect">MutableClassToInstanceMap&lt;B&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A mutable class-to-instance map backed by an arbitrary user-provided map.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useForwardingMap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingMap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ForwardingMapEntry.html b/javadoc/com/google/common/collect/class-use/ForwardingMapEntry.html
deleted file mode 100644
index cf2c82f..0000000
--- a/javadoc/com/google/common/collect/class-use/ForwardingMapEntry.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.ForwardingMapEntry (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.ForwardingMapEntry (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ForwardingMapEntry.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useForwardingMapEntry.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingMapEntry.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.ForwardingMapEntry</B></H2>
-</CENTER>
-No usage of com.google.common.collect.ForwardingMapEntry
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ForwardingMapEntry.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useForwardingMapEntry.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingMapEntry.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ForwardingMultimap.html b/javadoc/com/google/common/collect/class-use/ForwardingMultimap.html
deleted file mode 100644
index 4b7c909..0000000
--- a/javadoc/com/google/common/collect/class-use/ForwardingMultimap.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.ForwardingMultimap (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.ForwardingMultimap (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useForwardingMultimap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingMultimap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.ForwardingMultimap</B></H2>
-</CENTER>
-No usage of com.google.common.collect.ForwardingMultimap
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useForwardingMultimap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingMultimap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ForwardingMultiset.html b/javadoc/com/google/common/collect/class-use/ForwardingMultiset.html
deleted file mode 100644
index 4219983..0000000
--- a/javadoc/com/google/common/collect/class-use/ForwardingMultiset.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.ForwardingMultiset (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.ForwardingMultiset (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useForwardingMultiset.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingMultiset.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.ForwardingMultiset</B></H2>
-</CENTER>
-No usage of com.google.common.collect.ForwardingMultiset
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useForwardingMultiset.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingMultiset.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ForwardingObject.html b/javadoc/com/google/common/collect/class-use/ForwardingObject.html
deleted file mode 100644
index f3151aa..0000000
--- a/javadoc/com/google/common/collect/class-use/ForwardingObject.html
+++ /dev/null
@@ -1,357 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.ForwardingObject (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.ForwardingObject (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useForwardingObject.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingObject.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.ForwardingObject</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.util.concurrent"><B>com.google.common.util.concurrent</B></A></TD>
-<TD>&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Subclasses of <A HREF="../../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect">EnumBiMap&lt;K extends Enum&lt;K&gt;,V extends Enum&lt;V&gt;&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <code>BiMap</code> backed by two <code>EnumMap</code> instances.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect">EnumHashBiMap&lt;K extends Enum&lt;K&gt;,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <code>BiMap</code> backed by an <code>EnumMap</code> instance for keys-to-values, and
- a <code>HashMap</code> instance for values-to-keys.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection&lt;E&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A collection which forwards all its method calls to another collection.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="class in com.google.common.collect">ForwardingConcurrentMap&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A concurrent map which forwards all its method calls to another concurrent
- map.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingIterator.html" title="class in com.google.common.collect">ForwardingIterator&lt;T&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An iterator which forwards all its method calls to another iterator.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect">ForwardingList&lt;E&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A list which forwards all its method calls to another list.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingListIterator.html" title="class in com.google.common.collect">ForwardingListIterator&lt;E&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A list iterator which forwards all its method calls to another list
- iterator.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A map which forwards all its method calls to another map.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingMapEntry.html" title="class in com.google.common.collect">ForwardingMapEntry&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A map entry which forwards all its method calls to another map entry.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect">ForwardingMultimap&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A multimap which forwards all its method calls to another multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect">ForwardingMultiset&lt;E&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A multiset which forwards all its method calls to another multiset.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingQueue.html" title="class in com.google.common.collect">ForwardingQueue&lt;E&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A queue which forwards all its method calls to another queue.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingSet.html" title="class in com.google.common.collect">ForwardingSet&lt;E&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A set which forwards all its method calls to another set.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingSortedMap.html" title="class in com.google.common.collect">ForwardingSortedMap&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A sorted map which forwards all its method calls to another sorted map.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingSortedSet.html" title="class in com.google.common.collect">ForwardingSortedSet&lt;E&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A sorted set which forwards all its method calls to another sorted set.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect">HashBiMap&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <A HREF="../../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect"><CODE>BiMap</CODE></A> backed by two <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util"><CODE>HashMap</CODE></A> instances.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap&lt;B&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A class-to-instance map backed by an <A HREF="../../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect"><CODE>ImmutableMap</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect">MutableClassToInstanceMap&lt;B&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A mutable class-to-instance map backed by an arbitrary user-provided map.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.util.concurrent"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A> in <A HREF="../../../../../com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Subclasses of <A HREF="../../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A> in <A HREF="../../../../../com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/ForwardingFuture.html" title="class in com.google.common.util.concurrent">ForwardingFuture&lt;V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>Future</CODE></A> which forwards all its method calls to another future.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/ForwardingService.html" title="class in com.google.common.util.concurrent">ForwardingService</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <A HREF="../../../../../com/google/common/base/Service.html" title="interface in com.google.common.base"><CODE>Service</CODE></A> that forwards all method calls to another service.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useForwardingObject.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingObject.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ForwardingQueue.html b/javadoc/com/google/common/collect/class-use/ForwardingQueue.html
deleted file mode 100644
index f4fa9bc..0000000
--- a/javadoc/com/google/common/collect/class-use/ForwardingQueue.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.ForwardingQueue (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.ForwardingQueue (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ForwardingQueue.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useForwardingQueue.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingQueue.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.ForwardingQueue</B></H2>
-</CENTER>
-No usage of com.google.common.collect.ForwardingQueue
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ForwardingQueue.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useForwardingQueue.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingQueue.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ForwardingSet.html b/javadoc/com/google/common/collect/class-use/ForwardingSet.html
deleted file mode 100644
index 9864ffe..0000000
--- a/javadoc/com/google/common/collect/class-use/ForwardingSet.html
+++ /dev/null
@@ -1,181 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.ForwardingSet (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.ForwardingSet (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ForwardingSet.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useForwardingSet.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingSet.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.ForwardingSet</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/collect/ForwardingSet.html" title="class in com.google.common.collect">ForwardingSet</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/ForwardingSet.html" title="class in com.google.common.collect">ForwardingSet</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Subclasses of <A HREF="../../../../../com/google/common/collect/ForwardingSet.html" title="class in com.google.common.collect">ForwardingSet</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingSortedSet.html" title="class in com.google.common.collect">ForwardingSortedSet&lt;E&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A sorted set which forwards all its method calls to another sorted set.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ForwardingSet.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useForwardingSet.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingSet.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ForwardingSortedMap.html b/javadoc/com/google/common/collect/class-use/ForwardingSortedMap.html
deleted file mode 100644
index 67750d9..0000000
--- a/javadoc/com/google/common/collect/class-use/ForwardingSortedMap.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.ForwardingSortedMap (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.ForwardingSortedMap (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ForwardingSortedMap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useForwardingSortedMap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingSortedMap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.ForwardingSortedMap</B></H2>
-</CENTER>
-No usage of com.google.common.collect.ForwardingSortedMap
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ForwardingSortedMap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useForwardingSortedMap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingSortedMap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ForwardingSortedSet.html b/javadoc/com/google/common/collect/class-use/ForwardingSortedSet.html
deleted file mode 100644
index 40b9ba1..0000000
--- a/javadoc/com/google/common/collect/class-use/ForwardingSortedSet.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.ForwardingSortedSet (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.ForwardingSortedSet (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ForwardingSortedSet.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useForwardingSortedSet.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingSortedSet.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.ForwardingSortedSet</B></H2>
-</CENTER>
-No usage of com.google.common.collect.ForwardingSortedSet
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ForwardingSortedSet.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useForwardingSortedSet.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingSortedSet.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/HashBiMap.html b/javadoc/com/google/common/collect/class-use/HashBiMap.html
deleted file mode 100644
index 2d416d5..0000000
--- a/javadoc/com/google/common/collect/class-use/HashBiMap.html
+++ /dev/null
@@ -1,219 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.HashBiMap (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.HashBiMap (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useHashBiMap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="HashBiMap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.HashBiMap</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect">HashBiMap</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect">HashBiMap</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect">HashBiMap</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect">HashBiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>HashBiMap.</B><B><A HREF="../../../../../com/google/common/collect/HashBiMap.html#create()">create</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new, empty <code>HashBiMap</code> with the default initial capacity
- (16).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect">HashBiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>HashBiMap.</B><B><A HREF="../../../../../com/google/common/collect/HashBiMap.html#create(int)">create</A></B>(int&nbsp;expectedSize)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a new, empty bimap with the specified expected size.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect">HashBiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>HashBiMap.</B><B><A HREF="../../../../../com/google/common/collect/HashBiMap.html#create(java.util.Map)">create</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;map)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a new bimap containing initial values from <code>map</code>.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useHashBiMap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="HashBiMap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/HashMultimap.html b/javadoc/com/google/common/collect/class-use/HashMultimap.html
deleted file mode 100644
index 3790b79..0000000
--- a/javadoc/com/google/common/collect/class-use/HashMultimap.html
+++ /dev/null
@@ -1,222 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.HashMultimap (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.HashMultimap (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useHashMultimap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="HashMultimap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.HashMultimap</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect">HashMultimap</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect">HashMultimap</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect">HashMultimap</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect">HashMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>HashMultimap.</B><B><A HREF="../../../../../com/google/common/collect/HashMultimap.html#create()">create</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new, empty <code>HashMultimap</code> with the default initial
- capacities.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect">HashMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>HashMultimap.</B><B><A HREF="../../../../../com/google/common/collect/HashMultimap.html#create(int, int)">create</A></B>(int&nbsp;expectedKeys,
-       int&nbsp;expectedValuesPerKey)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs an empty <code>HashMultimap</code> with enough capacity to hold the
- specified numbers of keys and values without rehashing.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect">HashMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>HashMultimap.</B><B><A HREF="../../../../../com/google/common/collect/HashMultimap.html#create(com.google.common.collect.Multimap)">create</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a <code>HashMultimap</code> with the same mappings as the specified
- multimap.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useHashMultimap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="HashMultimap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/HashMultiset.html b/javadoc/com/google/common/collect/class-use/HashMultiset.html
deleted file mode 100644
index 58ee67e..0000000
--- a/javadoc/com/google/common/collect/class-use/HashMultiset.html
+++ /dev/null
@@ -1,220 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.HashMultiset (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.HashMultiset (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useHashMultiset.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="HashMultiset.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.HashMultiset</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect">HashMultiset</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect">HashMultiset</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect">HashMultiset</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect">HashMultiset</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>HashMultiset.</B><B><A HREF="../../../../../com/google/common/collect/HashMultiset.html#create()">create</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new, empty <code>HashMultiset</code> using the default initial
- capacity.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect">HashMultiset</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>HashMultiset.</B><B><A HREF="../../../../../com/google/common/collect/HashMultiset.html#create(int)">create</A></B>(int&nbsp;distinctElements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new, empty <code>HashMultiset</code> with the specified expected
- number of distinct elements.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect">HashMultiset</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>HashMultiset.</B><B><A HREF="../../../../../com/google/common/collect/HashMultiset.html#create(java.lang.Iterable)">create</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>HashMultiset</code> containing the specified elements.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useHashMultiset.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="HashMultiset.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ImmutableBiMap.Builder.html b/javadoc/com/google/common/collect/class-use/ImmutableBiMap.Builder.html
deleted file mode 100644
index 50614f5..0000000
--- a/javadoc/com/google/common/collect/class-use/ImmutableBiMap.Builder.html
+++ /dev/null
@@ -1,205 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.ImmutableBiMap.Builder (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.ImmutableBiMap.Builder (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableBiMap.Builder.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableBiMap.Builder.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.ImmutableBiMap.Builder</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect">ImmutableBiMap.Builder</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect">ImmutableBiMap.Builder</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect">ImmutableBiMap.Builder</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect">ImmutableBiMap.Builder</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableBiMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html#builder()">builder</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new builder.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect">ImmutableBiMap.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableBiMap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableBiMap.Builder.html#put(K, V)">put</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">K</A>&nbsp;key,
-    <A HREF="../../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">V</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Associates <code>key</code> with <code>value</code> in the built bimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect">ImmutableBiMap.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableBiMap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableBiMap.Builder.html#putAll(java.util.Map)">putAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends <A HREF="../../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">K</A>,? extends <A HREF="../../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">V</A>&gt;&nbsp;map)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Associates all of the given map's keys and values in the built bimap.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableBiMap.Builder.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableBiMap.Builder.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ImmutableBiMap.html b/javadoc/com/google/common/collect/class-use/ImmutableBiMap.html
deleted file mode 100644
index 546e492..0000000
--- a/javadoc/com/google/common/collect/class-use/ImmutableBiMap.html
+++ /dev/null
@@ -1,320 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.ImmutableBiMap (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.ImmutableBiMap (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableBiMap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableBiMap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.ImmutableBiMap</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableBiMap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableBiMap.Builder.html#build()">build</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a newly-created immutable bimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableBiMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html#copyOf(java.util.Map)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;map)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable bimap containing the same entries as <code>map</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>abstract &nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>,<A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableBiMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html#inverse()">inverse</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the inverse view of this bimap, which maps each of this bimap's
- values to its associated key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableBiMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html#of()">of</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the empty bimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableBiMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html#of(K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable bimap containing a single entry.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableBiMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html#of(K, V, K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1,
-   K&nbsp;k2,
-   V&nbsp;v2)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing the given entries, in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableBiMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html#of(K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1,
-   K&nbsp;k2,
-   V&nbsp;v2,
-   K&nbsp;k3,
-   V&nbsp;v3)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing the given entries, in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableBiMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html#of(K, V, K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1,
-   K&nbsp;k2,
-   V&nbsp;v2,
-   K&nbsp;k3,
-   V&nbsp;v3,
-   K&nbsp;k4,
-   V&nbsp;v4)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing the given entries, in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableBiMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html#of(K, V, K, V, K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1,
-   K&nbsp;k2,
-   V&nbsp;v2,
-   K&nbsp;k3,
-   V&nbsp;v3,
-   K&nbsp;k4,
-   V&nbsp;v4,
-   K&nbsp;k5,
-   V&nbsp;v5)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing the given entries, in order.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableBiMap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableBiMap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ImmutableClassToInstanceMap.Builder.html b/javadoc/com/google/common/collect/class-use/ImmutableClassToInstanceMap.Builder.html
deleted file mode 100644
index 618358d..0000000
--- a/javadoc/com/google/common/collect/class-use/ImmutableClassToInstanceMap.Builder.html
+++ /dev/null
@@ -1,223 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.ImmutableClassToInstanceMap.Builder (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.ImmutableClassToInstanceMap.Builder (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableClassToInstanceMap.Builder.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableClassToInstanceMap.Builder.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.ImmutableClassToInstanceMap.Builder</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap.Builder</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap.Builder</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap.Builder</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;B&gt; <A HREF="../../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap.Builder</A>&lt;B&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableClassToInstanceMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableClassToInstanceMap.html#builder()">builder</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new builder.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T extends <A HREF="../../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="type parameter in ImmutableClassToInstanceMap.Builder">B</A>&gt; 
-<BR>
-<A HREF="../../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="type parameter in ImmutableClassToInstanceMap.Builder">B</A>&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableClassToInstanceMap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html#put(java.lang.Class, T)">put</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type,
-    T&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Associates <code>key</code> with <code>value</code> in the built map.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T extends <A HREF="../../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="type parameter in ImmutableClassToInstanceMap.Builder">B</A>&gt; 
-<BR>
-<A HREF="../../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="type parameter in ImmutableClassToInstanceMap.Builder">B</A>&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableClassToInstanceMap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html#putAll(java.util.Map)">putAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;? extends T&gt;,? extends T&gt;&nbsp;map)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Associates all of <code>map's</code> keys and values in the built map.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableClassToInstanceMap.Builder.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableClassToInstanceMap.Builder.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ImmutableClassToInstanceMap.html b/javadoc/com/google/common/collect/class-use/ImmutableClassToInstanceMap.html
deleted file mode 100644
index 0fd1c5b..0000000
--- a/javadoc/com/google/common/collect/class-use/ImmutableClassToInstanceMap.html
+++ /dev/null
@@ -1,199 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.ImmutableClassToInstanceMap (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.ImmutableClassToInstanceMap (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableClassToInstanceMap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableClassToInstanceMap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.ImmutableClassToInstanceMap</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="type parameter in ImmutableClassToInstanceMap.Builder">B</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableClassToInstanceMap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html#build()">build</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new immutable class-to-instance map containing the entries
- provided to this builder.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;B,S extends B&gt; 
-<BR>
-<A HREF="../../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap</A>&lt;B&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableClassToInstanceMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableClassToInstanceMap.html#copyOf(java.util.Map)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;? extends S&gt;,? extends S&gt;&nbsp;map)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing the same entries as <code>map</code>.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableClassToInstanceMap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableClassToInstanceMap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ImmutableCollection.html b/javadoc/com/google/common/collect/class-use/ImmutableCollection.html
deleted file mode 100644
index 8f93ae4..0000000
--- a/javadoc/com/google/common/collect/class-use/ImmutableCollection.html
+++ /dev/null
@@ -1,272 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.ImmutableCollection (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.ImmutableCollection (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableCollection.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableCollection.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.ImmutableCollection</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Subclasses of <A HREF="../../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList&lt;E&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A high-performance, immutable, random-access <code>List</code> implementation.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset&lt;E&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable hash-based multiset.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet&lt;E&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A high-performance, immutable <code>Set</code> with reliable, user-specified
- iteration order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet&lt;E&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable <code>SortedSet</code> that stores its elements in a sorted array.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html#entries()">entries</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable collection of all key-value pairs in the multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>abstract &nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html#get(K)">get</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>&nbsp;key)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable collection of the values for the given key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html#removeAll(java.lang.Object)">removeAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the multimap unmodified.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>&nbsp;key,
-              <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;&nbsp;values)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the multimap unmodified.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>abstract &nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMap.html#values()">values</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable collection of the values in this map.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSortedMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html#values()">values</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable collection of the values in this map, sorted by the
- ordering of the corresponding keys.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html#values()">values</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable collection of the values in this multimap.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableCollection.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableCollection.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ImmutableList.Builder.html b/javadoc/com/google/common/collect/class-use/ImmutableList.Builder.html
deleted file mode 100644
index 33af00f..0000000
--- a/javadoc/com/google/common/collect/class-use/ImmutableList.Builder.html
+++ /dev/null
@@ -1,220 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.ImmutableList.Builder (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.ImmutableList.Builder (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableList.Builder.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableList.Builder.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.ImmutableList.Builder</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect">ImmutableList.Builder</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect">ImmutableList.Builder</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect">ImmutableList.Builder</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect">ImmutableList.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableList.Builder.html" title="type parameter in ImmutableList.Builder">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableList.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableList.Builder.html#add(E...)">add</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableList.Builder.html" title="type parameter in ImmutableList.Builder">E</A>...&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds each element of <code>elements</code> to the <code>ImmutableList</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect">ImmutableList.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableList.Builder.html" title="type parameter in ImmutableList.Builder">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableList.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableList.Builder.html#add(E)">add</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableList.Builder.html" title="type parameter in ImmutableList.Builder">E</A>&nbsp;element)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds <code>element</code> to the <code>ImmutableList</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect">ImmutableList.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableList.Builder.html" title="type parameter in ImmutableList.Builder">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableList.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableList.Builder.html#addAll(java.lang.Iterable)">addAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../../com/google/common/collect/ImmutableList.Builder.html" title="type parameter in ImmutableList.Builder">E</A>&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds each element of <code>elements</code> to the <code>ImmutableList</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect">ImmutableList.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableList.Builder.html" title="type parameter in ImmutableList.Builder">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableList.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableList.Builder.html#addAll(java.util.Iterator)">addAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends <A HREF="../../../../../com/google/common/collect/ImmutableList.Builder.html" title="type parameter in ImmutableList.Builder">E</A>&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds each element of <code>elements</code> to the <code>ImmutableList</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect">ImmutableList.Builder</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableList.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableList.html#builder()">builder</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new builder.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableList.Builder.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableList.Builder.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ImmutableList.html b/javadoc/com/google/common/collect/class-use/ImmutableList.html
deleted file mode 100644
index ae4ad88..0000000
--- a/javadoc/com/google/common/collect/class-use/ImmutableList.html
+++ /dev/null
@@ -1,527 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.ImmutableList (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.ImmutableList (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableList.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableList.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.ImmutableList</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableList.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableList.html#asList()">asList</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns this list instance.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableCollection.html" title="type parameter in ImmutableCollection">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableCollection.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableCollection.html#asList()">asList</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a list view of the collection.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableList.Builder.html" title="type parameter in ImmutableList.Builder">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableList.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableList.Builder.html#build()">build</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a newly-created <code>ImmutableList</code> based on the contents of
- the <code>Builder</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableList.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableList.html#copyOf(java.util.Collection)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable list containing the given elements, in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableList.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableList.html#copyOf(java.lang.Iterable)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable list containing the given elements, in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableList.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableList.html#copyOf(java.util.Iterator)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable list containing the given elements, in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableListMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html#get(K)">get</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">K</A>&nbsp;key)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable list of the values for the given key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableList.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableList.html#of()">of</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the empty immutable list.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableList.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableList.html#of(E...)">of</A></B>(E...&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable list containing the given elements, in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableList.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableList.html#of(E)">of</A></B>(E&nbsp;element)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable list containing a single element.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableList.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableList.html#of(E, E)">of</A></B>(E&nbsp;e1,
-   E&nbsp;e2)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Identical to <A HREF="../../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableList.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableList.html#of(E, E, E)">of</A></B>(E&nbsp;e1,
-   E&nbsp;e2,
-   E&nbsp;e3)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Identical to <A HREF="../../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableList.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableList.html#of(E, E, E, E)">of</A></B>(E&nbsp;e1,
-   E&nbsp;e2,
-   E&nbsp;e3,
-   E&nbsp;e4)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Identical to <A HREF="../../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableList.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableList.html#of(E, E, E, E, E)">of</A></B>(E&nbsp;e1,
-   E&nbsp;e2,
-   E&nbsp;e3,
-   E&nbsp;e4,
-   E&nbsp;e5)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Identical to <A HREF="../../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableList.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableList.html#of(E, E, E, E, E, E)">of</A></B>(E&nbsp;e1,
-   E&nbsp;e2,
-   E&nbsp;e3,
-   E&nbsp;e4,
-   E&nbsp;e5,
-   E&nbsp;e6)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Identical to <A HREF="../../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableList.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableList.html#of(E, E, E, E, E, E, E)">of</A></B>(E&nbsp;e1,
-   E&nbsp;e2,
-   E&nbsp;e3,
-   E&nbsp;e4,
-   E&nbsp;e5,
-   E&nbsp;e6,
-   E&nbsp;e7)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Identical to <A HREF="../../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableList.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableList.html#of(E, E, E, E, E, E, E, E)">of</A></B>(E&nbsp;e1,
-   E&nbsp;e2,
-   E&nbsp;e3,
-   E&nbsp;e4,
-   E&nbsp;e5,
-   E&nbsp;e6,
-   E&nbsp;e7,
-   E&nbsp;e8)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Identical to <A HREF="../../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableList.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableList.html#of(E, E, E, E, E, E, E, E, E)">of</A></B>(E&nbsp;e1,
-   E&nbsp;e2,
-   E&nbsp;e3,
-   E&nbsp;e4,
-   E&nbsp;e5,
-   E&nbsp;e6,
-   E&nbsp;e7,
-   E&nbsp;e8,
-   E&nbsp;e9)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Identical to <A HREF="../../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableList.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableList.html#of(E, E, E, E, E, E, E, E, E, E)">of</A></B>(E&nbsp;e1,
-   E&nbsp;e2,
-   E&nbsp;e3,
-   E&nbsp;e4,
-   E&nbsp;e5,
-   E&nbsp;e6,
-   E&nbsp;e7,
-   E&nbsp;e8,
-   E&nbsp;e9,
-   E&nbsp;e10)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Identical to <A HREF="../../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableList.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableList.html#of(E, E, E, E, E, E, E, E, E, E, E)">of</A></B>(E&nbsp;e1,
-   E&nbsp;e2,
-   E&nbsp;e3,
-   E&nbsp;e4,
-   E&nbsp;e5,
-   E&nbsp;e6,
-   E&nbsp;e7,
-   E&nbsp;e8,
-   E&nbsp;e9,
-   E&nbsp;e10,
-   E&nbsp;e11)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Identical to <A HREF="../../../../../com/google/common/collect/ImmutableList.html#of(E...)"><CODE>of(Object[])</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableListMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html#removeAll(java.lang.Object)">removeAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the multimap unmodified.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableListMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">K</A>&nbsp;key,
-              <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">V</A>&gt;&nbsp;values)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the multimap unmodified.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>abstract &nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableList.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableList.html#subList(int, int)">subList</A></B>(int&nbsp;fromIndex,
-        int&nbsp;toIndex)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable list of the elements between the specified <code>fromIndex</code>, inclusive, and <code>toIndex</code>, exclusive.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableList.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableList.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ImmutableListMultimap.Builder.html b/javadoc/com/google/common/collect/class-use/ImmutableListMultimap.Builder.html
deleted file mode 100644
index 0c88f08..0000000
--- a/javadoc/com/google/common/collect/class-use/ImmutableListMultimap.Builder.html
+++ /dev/null
@@ -1,223 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.ImmutableListMultimap.Builder (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.ImmutableListMultimap.Builder (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableListMultimap.Builder.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableListMultimap.Builder.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.ImmutableListMultimap.Builder</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableListMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html#builder()">builder</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new builder.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableListMultimap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html#put(K, V)">put</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>&nbsp;key,
-    <A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds a key-value mapping to the built multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableListMultimap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html#putAll(K, java.lang.Iterable)">putAll</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>&nbsp;key,
-       <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt;&nbsp;values)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a collection of values with the same key in the built multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableListMultimap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html#putAll(K, V...)">putAll</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>&nbsp;key,
-       <A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>...&nbsp;values)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores an array of values with the same key in the built multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableListMultimap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html#putAll(com.google.common.collect.Multimap)">putAll</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends <A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>,? extends <A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt;&nbsp;multimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores another multimap's entries in the built multimap.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableListMultimap.Builder.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableListMultimap.Builder.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ImmutableListMultimap.html b/javadoc/com/google/common/collect/class-use/ImmutableListMultimap.html
deleted file mode 100644
index 6fa1f52..0000000
--- a/javadoc/com/google/common/collect/class-use/ImmutableListMultimap.html
+++ /dev/null
@@ -1,330 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.ImmutableListMultimap (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.ImmutableListMultimap (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableListMultimap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableListMultimap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.ImmutableListMultimap</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableListMultimap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html#build()">build</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a newly-created immutable multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableListMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html#copyOf(com.google.common.collect.Multimap)">copyOf</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the same mappings as
- <code>multimap</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Multimaps.</B><B><A HREF="../../../../../com/google/common/collect/Multimaps.html#index(java.lang.Iterable, com.google.common.base.Function)">index</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;V&gt;&nbsp;values,
-      <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super V,K&gt;&nbsp;keyFunction)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an index <code>ImmutableMultimap</code> that contains the results of
- applying a specified function to each item in an <code>Iterable</code> of
- values.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableListMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html#of()">of</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the empty multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableListMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html#of(K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing a single entry.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableListMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html#of(K, V, K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1,
-   K&nbsp;k2,
-   V&nbsp;v2)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the given entries, in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableListMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html#of(K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1,
-   K&nbsp;k2,
-   V&nbsp;v2,
-   K&nbsp;k3,
-   V&nbsp;v3)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the given entries, in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableListMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html#of(K, V, K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1,
-   K&nbsp;k2,
-   V&nbsp;v2,
-   K&nbsp;k3,
-   V&nbsp;v3,
-   K&nbsp;k4,
-   V&nbsp;v4)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the given entries, in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableListMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html#of(K, V, K, V, K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1,
-   K&nbsp;k2,
-   V&nbsp;v2,
-   K&nbsp;k3,
-   V&nbsp;v3,
-   K&nbsp;k4,
-   V&nbsp;v4,
-   K&nbsp;k5,
-   V&nbsp;v5)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the given entries, in order.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableListMultimap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableListMultimap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ImmutableMap.Builder.html b/javadoc/com/google/common/collect/class-use/ImmutableMap.Builder.html
deleted file mode 100644
index 4142046..0000000
--- a/javadoc/com/google/common/collect/class-use/ImmutableMap.Builder.html
+++ /dev/null
@@ -1,230 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.ImmutableMap.Builder (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.ImmutableMap.Builder (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableMap.Builder.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableMap.Builder.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.ImmutableMap.Builder</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">ImmutableMap.Builder</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">ImmutableMap.Builder</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Subclasses of <A HREF="../../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">ImmutableMap.Builder</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect">ImmutableBiMap.Builder&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A builder for creating immutable bimap instances, especially <code>public
- static final</code> bimaps ("constant bimaps").</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect">ImmutableSortedMap.Builder&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A builder for creating immutable sorted map instances, especially <code>public static final</code> maps ("constant maps").</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">ImmutableMap.Builder</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">ImmutableMap.Builder</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMap.html#builder()">builder</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new builder.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">ImmutableMap.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableMap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMap.Builder.html#put(K, V)">put</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">K</A>&nbsp;key,
-    <A HREF="../../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">V</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Associates <code>key</code> with <code>value</code> in the built map.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">ImmutableMap.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableMap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMap.Builder.html#putAll(java.util.Map)">putAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends <A HREF="../../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">K</A>,? extends <A HREF="../../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">V</A>&gt;&nbsp;map)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Associates all of the given map's keys and values in the built map.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableMap.Builder.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableMap.Builder.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ImmutableMap.html b/javadoc/com/google/common/collect/class-use/ImmutableMap.html
deleted file mode 100644
index cc01af1..0000000
--- a/javadoc/com/google/common/collect/class-use/ImmutableMap.html
+++ /dev/null
@@ -1,371 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.ImmutableMap (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.ImmutableMap (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableMap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableMap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.ImmutableMap</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Subclasses of <A HREF="../../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable <A HREF="../../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect"><CODE>BiMap</CODE></A> with reliable user-specified iteration order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util"><CODE>SortedMap</CODE></A>.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html#asMap()">asMap</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map that associates each key with its corresponding
- values in the multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableMap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMap.Builder.html#build()">build</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a newly-created immutable map.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMap.html#copyOf(java.util.Map)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;map)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing the same entries as <code>map</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>,<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>Maps.</B><B><A HREF="../../../../../com/google/common/collect/Maps.html#fromProperties(java.util.Properties)">fromProperties</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Properties.html?is-external=true" title="class or interface in java.util">Properties</A>&nbsp;properties)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an <code>ImmutableMap&lt;String, String&gt;</code> from a <code>Properties</code>
- instance.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMap.html#of()">of</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the empty map.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMap.html#of(K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing a single entry.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMap.html#of(K, V, K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1,
-   K&nbsp;k2,
-   V&nbsp;v2)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing the given entries, in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMap.html#of(K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1,
-   K&nbsp;k2,
-   V&nbsp;v2,
-   K&nbsp;k3,
-   V&nbsp;v3)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing the given entries, in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMap.html#of(K, V, K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1,
-   K&nbsp;k2,
-   V&nbsp;v2,
-   K&nbsp;k3,
-   V&nbsp;v3,
-   K&nbsp;k4,
-   V&nbsp;v4)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing the given entries, in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMap.html#of(K, V, K, V, K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1,
-   K&nbsp;k2,
-   V&nbsp;v2,
-   K&nbsp;k3,
-   V&nbsp;v3,
-   K&nbsp;k4,
-   V&nbsp;v4,
-   K&nbsp;k5,
-   V&nbsp;v5)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing the given entries, in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Maps.</B><B><A HREF="../../../../../com/google/common/collect/Maps.html#uniqueIndex(java.lang.Iterable, com.google.common.base.Function)">uniqueIndex</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;V&gt;&nbsp;values,
-            <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super V,K&gt;&nbsp;keyFunction)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map for which the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#values()" title="class or interface in java.util"><CODE>Map.values()</CODE></A> are the given
- elements in the given order, and each key is the product of invoking a
- supplied function on its corresponding value.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableMap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableMap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ImmutableMultimap.Builder.html b/javadoc/com/google/common/collect/class-use/ImmutableMultimap.Builder.html
deleted file mode 100644
index 5c416b1..0000000
--- a/javadoc/com/google/common/collect/class-use/ImmutableMultimap.Builder.html
+++ /dev/null
@@ -1,249 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.ImmutableMultimap.Builder (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.ImmutableMultimap.Builder (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableMultimap.Builder.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableMultimap.Builder.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.ImmutableMultimap.Builder</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Subclasses of <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A builder for creating immutable <code>ListMultimap</code> instances, especially
- <code>public static final</code> multimaps ("constant multimaps").</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A builder for creating immutable <code>SetMultimap</code> instances, especially
- <code>public static final</code> multimaps ("constant multimaps").</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html#builder()">builder</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new builder.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableMultimap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html#put(K, V)">put</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>&nbsp;key,
-    <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds a key-value mapping to the built multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableMultimap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html#putAll(K, java.lang.Iterable)">putAll</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>&nbsp;key,
-       <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>&gt;&nbsp;values)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a collection of values with the same key in the built multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableMultimap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html#putAll(K, V...)">putAll</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>&nbsp;key,
-       <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>...&nbsp;values)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores an array of values with the same key in the built multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableMultimap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html#putAll(com.google.common.collect.Multimap)">putAll</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>,? extends <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>&gt;&nbsp;multimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores another multimap's entries in the built multimap.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableMultimap.Builder.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableMultimap.Builder.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ImmutableMultimap.html b/javadoc/com/google/common/collect/class-use/ImmutableMultimap.html
deleted file mode 100644
index c841dc7..0000000
--- a/javadoc/com/google/common/collect/class-use/ImmutableMultimap.html
+++ /dev/null
@@ -1,338 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.ImmutableMultimap (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.ImmutableMultimap (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableMultimap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableMultimap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.ImmutableMultimap</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Subclasses of <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable <A HREF="../../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect"><CODE>ListMultimap</CODE></A> with reliable user-specified key and value
- iteration order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable <A HREF="../../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect"><CODE>SetMultimap</CODE></A> with reliable user-specified key and value
- iteration order.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableMultimap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html#build()">build</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a newly-created immutable multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html#copyOf(com.google.common.collect.Multimap)">copyOf</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the same mappings as
- <code>multimap</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html#of()">of</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an empty multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html#of(K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing a single entry.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html#of(K, V, K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1,
-   K&nbsp;k2,
-   V&nbsp;v2)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the given entries, in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html#of(K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1,
-   K&nbsp;k2,
-   V&nbsp;v2,
-   K&nbsp;k3,
-   V&nbsp;v3)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the given entries, in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html#of(K, V, K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1,
-   K&nbsp;k2,
-   V&nbsp;v2,
-   K&nbsp;k3,
-   V&nbsp;v3,
-   K&nbsp;k4,
-   V&nbsp;v4)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the given entries, in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html#of(K, V, K, V, K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1,
-   K&nbsp;k2,
-   V&nbsp;v2,
-   K&nbsp;k3,
-   V&nbsp;v3,
-   K&nbsp;k4,
-   V&nbsp;v4,
-   K&nbsp;k5,
-   V&nbsp;v5)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the given entries, in order.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableMultimap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableMultimap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ImmutableMultiset.Builder.html b/javadoc/com/google/common/collect/class-use/ImmutableMultiset.Builder.html
deleted file mode 100644
index 184b8f5..0000000
--- a/javadoc/com/google/common/collect/class-use/ImmutableMultiset.Builder.html
+++ /dev/null
@@ -1,239 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.ImmutableMultiset.Builder (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.ImmutableMultiset.Builder (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableMultiset.Builder.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableMultiset.Builder.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.ImmutableMultiset.Builder</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableMultiset.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html#add(E...)">add</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>...&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds each element of <code>elements</code> to the <code>ImmutableMultiset</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableMultiset.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html#add(E)">add</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&nbsp;element)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds <code>element</code> to the <code>ImmutableMultiset</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableMultiset.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html#addAll(java.lang.Iterable)">addAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds each element of <code>elements</code> to the <code>ImmutableMultiset</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableMultiset.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html#addAll(java.util.Iterator)">addAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends <A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds each element of <code>elements</code> to the <code>ImmutableMultiset</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableMultiset.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html#addCopies(E, int)">addCopies</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&nbsp;element,
-          int&nbsp;occurrences)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds a number of occurrences of an element to this <code>ImmutableMultiset</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableMultiset.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultiset.html#builder()">builder</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new builder.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableMultiset.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html#setCount(E, int)">setCount</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&nbsp;element,
-         int&nbsp;count)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds or removes the necessary occurrences of an element such that the
- element attains the desired count.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableMultiset.Builder.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableMultiset.Builder.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ImmutableMultiset.html b/javadoc/com/google/common/collect/class-use/ImmutableMultiset.html
deleted file mode 100644
index f4aa7cb..0000000
--- a/javadoc/com/google/common/collect/class-use/ImmutableMultiset.html
+++ /dev/null
@@ -1,250 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.ImmutableMultiset (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.ImmutableMultiset (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableMultiset.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableMultiset.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.ImmutableMultiset</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableMultiset.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultiset.Builder.html#build()">build</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a newly-created <code>ImmutableMultiset</code> based on the contents
- of the <code>Builder</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableMultiset.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultiset.html#copyOf(java.lang.Iterable)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multiset containing the given elements.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableMultiset.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultiset.html#copyOf(java.util.Iterator)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multiset containing the given elements.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html#keys()">keys</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection, which may contain duplicates, of all keys.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableMultiset.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultiset.html#of()">of</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the empty immutable multiset.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableMultiset.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultiset.html#of(E...)">of</A></B>(E...&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multiset containing the given elements.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableMultiset.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableMultiset.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ImmutableSet.Builder.html b/javadoc/com/google/common/collect/class-use/ImmutableSet.Builder.html
deleted file mode 100644
index 0616e40..0000000
--- a/javadoc/com/google/common/collect/class-use/ImmutableSet.Builder.html
+++ /dev/null
@@ -1,241 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.ImmutableSet.Builder (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.ImmutableSet.Builder (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableSet.Builder.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableSet.Builder.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.ImmutableSet.Builder</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Subclasses of <A HREF="../../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder&lt;E&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A builder for creating immutable sorted set instances, especially
- <code>public static final</code> sets ("constant sets"), with a given
- comparator.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSet.Builder.html" title="type parameter in ImmutableSet.Builder">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSet.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSet.Builder.html#add(E...)">add</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableSet.Builder.html" title="type parameter in ImmutableSet.Builder">E</A>...&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds each element of <code>elements</code> to the <code>ImmutableSet</code>,
- ignoring duplicate elements (only the first duplicate element is added).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSet.Builder.html" title="type parameter in ImmutableSet.Builder">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSet.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSet.Builder.html#add(E)">add</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableSet.Builder.html" title="type parameter in ImmutableSet.Builder">E</A>&nbsp;element)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds <code>element</code> to the <code>ImmutableSet</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSet.Builder.html" title="type parameter in ImmutableSet.Builder">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSet.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSet.Builder.html#addAll(java.lang.Iterable)">addAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../../com/google/common/collect/ImmutableSet.Builder.html" title="type parameter in ImmutableSet.Builder">E</A>&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds each element of <code>elements</code> to the <code>ImmutableSet</code>,
- ignoring duplicate elements (only the first duplicate element is added).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSet.Builder.html" title="type parameter in ImmutableSet.Builder">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSet.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSet.Builder.html#addAll(java.util.Iterator)">addAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends <A HREF="../../../../../com/google/common/collect/ImmutableSet.Builder.html" title="type parameter in ImmutableSet.Builder">E</A>&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds each element of <code>elements</code> to the <code>ImmutableSet</code>,
- ignoring duplicate elements (only the first duplicate element is added).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSet.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSet.html#builder()">builder</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new builder.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableSet.Builder.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableSet.Builder.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ImmutableSet.html b/javadoc/com/google/common/collect/class-use/ImmutableSet.html
deleted file mode 100644
index c26099f..0000000
--- a/javadoc/com/google/common/collect/class-use/ImmutableSet.html
+++ /dev/null
@@ -1,476 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.ImmutableSet (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.ImmutableSet (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableSet.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableSet.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.ImmutableSet</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Subclasses of <A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet&lt;E&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable <code>SortedSet</code> that stores its elements in a sorted array.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSet.Builder.html" title="type parameter in ImmutableSet.Builder">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSet.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSet.Builder.html#build()">build</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a newly-created <code>ImmutableSet</code> based on the contents of
- the <code>Builder</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSet.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSet.html#copyOf(java.lang.Iterable)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set containing the given elements, in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSet.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSet.html#copyOf(java.util.Iterator)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set containing the given elements, in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt;&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSetMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html#entries()">entries</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable collection of all key-value pairs in the multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>abstract &nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A>&gt;&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMap.html#entrySet()">entrySet</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set of the mappings in this map.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt;&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableBiMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html#entrySet()">entrySet</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSortedMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html#entrySet()">entrySet</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set of the mappings in this map, sorted by the key
- ordering.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSetMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html#get(K)">get</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">K</A>&nbsp;key)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set of the values for the given key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="../../../../../com/google/common/collect/Sets.SetView.html" title="type parameter in Sets.SetView">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>Sets.SetView.</B><B><A HREF="../../../../../com/google/common/collect/Sets.SetView.html#immutableCopy()">immutableCopy</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable copy of the current contents of this set view.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;E&gt;&gt; 
-<BR>
-<A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Sets.</B><B><A HREF="../../../../../com/google/common/collect/Sets.html#immutableEnumSet(E, E...)">immutableEnumSet</A></B>(E&nbsp;anElement,
-                 E...&nbsp;otherElements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set instance containing the given enum elements.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;E&gt;&gt; 
-<BR>
-<A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Sets.</B><B><A HREF="../../../../../com/google/common/collect/Sets.html#immutableEnumSet(java.lang.Iterable)">immutableEnumSet</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;E&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set instance containing the given enum elements.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>abstract &nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">K</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMap.html#keySet()">keySet</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set of the keys in this map.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableBiMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html#keySet()">keySet</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html#keySet()">keySet</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set of the distinct keys in this multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSet.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSet.html#of()">of</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the empty immutable set.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSet.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSet.html#of(E...)">of</A></B>(E...&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set containing the given elements, in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSet.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSet.html#of(E)">of</A></B>(E&nbsp;element)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set containing a single element.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSet.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSet.html#of(E, E)">of</A></B>(E&nbsp;e1,
-   E&nbsp;e2)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set containing the given elements, in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSet.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSet.html#of(E, E, E)">of</A></B>(E&nbsp;e1,
-   E&nbsp;e2,
-   E&nbsp;e3)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set containing the given elements, in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSet.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSet.html#of(E, E, E, E)">of</A></B>(E&nbsp;e1,
-   E&nbsp;e2,
-   E&nbsp;e3,
-   E&nbsp;e4)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set containing the given elements, in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSet.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSet.html#of(E, E, E, E, E)">of</A></B>(E&nbsp;e1,
-   E&nbsp;e2,
-   E&nbsp;e3,
-   E&nbsp;e4,
-   E&nbsp;e5)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set containing the given elements, in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSetMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html#removeAll(java.lang.Object)">removeAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&nbsp;key)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the multimap unmodified.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSetMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html#replaceValues(K, java.lang.Iterable)">replaceValues</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">K</A>&nbsp;key,
-              <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt;&nbsp;values)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the multimap unmodified.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableBiMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableBiMap.html#values()">values</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set of the values in this map.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableSet.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableSet.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ImmutableSetMultimap.Builder.html b/javadoc/com/google/common/collect/class-use/ImmutableSetMultimap.Builder.html
deleted file mode 100644
index cd0e2a9..0000000
--- a/javadoc/com/google/common/collect/class-use/ImmutableSetMultimap.Builder.html
+++ /dev/null
@@ -1,224 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.ImmutableSetMultimap.Builder (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.ImmutableSetMultimap.Builder (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableSetMultimap.Builder.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableSetMultimap.Builder.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.ImmutableSetMultimap.Builder</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSetMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html#builder()">builder</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new <A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect"><CODE>ImmutableSetMultimap.Builder</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSetMultimap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html#put(K, V)">put</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>&nbsp;key,
-    <A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds a key-value mapping to the built multimap if it is not already
- present.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSetMultimap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html#putAll(K, java.lang.Iterable)">putAll</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>&nbsp;key,
-       <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt;&nbsp;values)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores a collection of values with the same key in the built multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSetMultimap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html#putAll(K, V...)">putAll</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>&nbsp;key,
-       <A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>...&nbsp;values)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores an array of values with the same key in the built multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSetMultimap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html#putAll(com.google.common.collect.Multimap)">putAll</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends <A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>,? extends <A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt;&nbsp;multimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores another multimap's entries in the built multimap.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableSetMultimap.Builder.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableSetMultimap.Builder.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ImmutableSetMultimap.html b/javadoc/com/google/common/collect/class-use/ImmutableSetMultimap.html
deleted file mode 100644
index 74bd021..0000000
--- a/javadoc/com/google/common/collect/class-use/ImmutableSetMultimap.html
+++ /dev/null
@@ -1,312 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.ImmutableSetMultimap (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.ImmutableSetMultimap (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableSetMultimap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableSetMultimap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.ImmutableSetMultimap</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSetMultimap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html#build()">build</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a newly-created immutable set multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSetMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html#copyOf(com.google.common.collect.Multimap)">copyOf</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set multimap containing the same mappings as
- <code>multimap</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSetMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html#of()">of</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the empty multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSetMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html#of(K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing a single entry.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSetMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html#of(K, V, K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1,
-   K&nbsp;k2,
-   V&nbsp;v2)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the given entries, in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSetMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html#of(K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1,
-   K&nbsp;k2,
-   V&nbsp;v2,
-   K&nbsp;k3,
-   V&nbsp;v3)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the given entries, in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSetMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html#of(K, V, K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1,
-   K&nbsp;k2,
-   V&nbsp;v2,
-   K&nbsp;k3,
-   V&nbsp;v3,
-   K&nbsp;k4,
-   V&nbsp;v4)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the given entries, in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSetMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html#of(K, V, K, V, K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1,
-   K&nbsp;k2,
-   V&nbsp;v2,
-   K&nbsp;k3,
-   V&nbsp;v3,
-   K&nbsp;k4,
-   V&nbsp;v4,
-   K&nbsp;k5,
-   V&nbsp;v5)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the given entries, in order.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableSetMultimap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableSetMultimap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ImmutableSortedMap.Builder.html b/javadoc/com/google/common/collect/class-use/ImmutableSortedMap.Builder.html
deleted file mode 100644
index 8ea1aad..0000000
--- a/javadoc/com/google/common/collect/class-use/ImmutableSortedMap.Builder.html
+++ /dev/null
@@ -1,242 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.ImmutableSortedMap.Builder (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.ImmutableSortedMap.Builder (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableSortedMap.Builder.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableSortedMap.Builder.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.ImmutableSortedMap.Builder</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect">ImmutableSortedMap.Builder</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect">ImmutableSortedMap.Builder</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect">ImmutableSortedMap.Builder</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;K&gt;,V&gt; 
-<BR>
-<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect">ImmutableSortedMap.Builder</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSortedMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html#naturalOrder()">naturalOrder</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a builder that creates immutable sorted maps whose keys are
- ordered by their natural ordering.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect">ImmutableSortedMap.Builder</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSortedMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html#orderedBy(java.util.Comparator)">orderedBy</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;K&gt;&nbsp;comparator)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a builder that creates immutable sorted maps with an explicit
- comparator.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect">ImmutableSortedMap.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSortedMap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.Builder.html#put(K, V)">put</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">K</A>&nbsp;key,
-    <A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">V</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Associates <code>key</code> with <code>value</code> in the built map.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect">ImmutableSortedMap.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSortedMap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.Builder.html#putAll(java.util.Map)">putAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends <A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">K</A>,? extends <A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">V</A>&gt;&nbsp;map)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Associates all of the given map's keys and values in the built map.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;K&gt;,V&gt; 
-<BR>
-<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect">ImmutableSortedMap.Builder</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSortedMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html#reverseOrder()">reverseOrder</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a builder that creates immutable sorted maps whose keys are
- ordered by the reverse of their natural ordering.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableSortedMap.Builder.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableSortedMap.Builder.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ImmutableSortedMap.html b/javadoc/com/google/common/collect/class-use/ImmutableSortedMap.html
deleted file mode 100644
index 8dc0ad6..0000000
--- a/javadoc/com/google/common/collect/class-use/ImmutableSortedMap.html
+++ /dev/null
@@ -1,388 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.ImmutableSortedMap (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.ImmutableSortedMap (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableSortedMap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableSortedMap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.ImmutableSortedMap</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSortedMap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.Builder.html#build()">build</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a newly-created immutable sorted map.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSortedMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html#copyOf(java.util.Map)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;map)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing the same entries as <code>map</code>, sorted
- by the natural ordering of the keys.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSortedMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html#copyOf(java.util.Map, java.util.Comparator)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;map,
-       <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super K&gt;&nbsp;comparator)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing the same entries as <code>map</code>, with
- keys sorted by the provided comparator.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSortedMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html#copyOfSorted(java.util.SortedMap)">copyOfSorted</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;K,? extends V&gt;&nbsp;map)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing the same entries as the provided sorted
- map, with the same ordering.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSortedMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html#headMap(K)">headMap</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>&nbsp;toKey)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This method returns a <code>ImmutableSortedMap</code>, consisting of the entries
- whose keys are less than <code>toKey</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSortedMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html#of()">of</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the empty sorted map.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super K&gt;,V&gt; 
-<BR>
-<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSortedMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html#of(K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable map containing a single entry.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super K&gt;,V&gt; 
-<BR>
-<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSortedMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html#of(K, V, K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1,
-   K&nbsp;k2,
-   V&nbsp;v2)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted map containing the given entries, sorted by the
- natural ordering of their keys.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super K&gt;,V&gt; 
-<BR>
-<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSortedMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html#of(K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1,
-   K&nbsp;k2,
-   V&nbsp;v2,
-   K&nbsp;k3,
-   V&nbsp;v3)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted map containing the given entries, sorted by the
- natural ordering of their keys.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super K&gt;,V&gt; 
-<BR>
-<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSortedMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html#of(K, V, K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1,
-   K&nbsp;k2,
-   V&nbsp;v2,
-   K&nbsp;k3,
-   V&nbsp;v3,
-   K&nbsp;k4,
-   V&nbsp;v4)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted map containing the given entries, sorted by the
- natural ordering of their keys.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super K&gt;,V&gt; 
-<BR>
-<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSortedMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html#of(K, V, K, V, K, V, K, V, K, V)">of</A></B>(K&nbsp;k1,
-   V&nbsp;v1,
-   K&nbsp;k2,
-   V&nbsp;v2,
-   K&nbsp;k3,
-   V&nbsp;v3,
-   K&nbsp;k4,
-   V&nbsp;v4,
-   K&nbsp;k5,
-   V&nbsp;v5)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted map containing the given entries, sorted by the
- natural ordering of their keys.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSortedMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html#subMap(K, K)">subMap</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>&nbsp;fromKey,
-       <A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>&nbsp;toKey)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This method returns a <code>ImmutableSortedMap</code>, consisting of the entries
- whose keys ranges from <code>fromKey</code>, inclusive, to <code>toKey</code>,
- exclusive.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSortedMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html#tailMap(K)">tailMap</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>&nbsp;fromKey)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This method returns a <code>ImmutableSortedMap</code>, consisting of the entries
- whose keys are greater than or equals to <code>fromKey</code>.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableSortedMap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableSortedMap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ImmutableSortedSet.Builder.html b/javadoc/com/google/common/collect/class-use/ImmutableSortedSet.Builder.html
deleted file mode 100644
index 3789ce6..0000000
--- a/javadoc/com/google/common/collect/class-use/ImmutableSortedSet.Builder.html
+++ /dev/null
@@ -1,260 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.ImmutableSortedSet.Builder (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.ImmutableSortedSet.Builder (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableSortedSet.Builder.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableSortedSet.Builder.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.ImmutableSortedSet.Builder</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSortedSet.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.Builder.html#add(E...)">add</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>...&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds each element of <code>elements</code> to the <code>ImmutableSortedSet</code>,
- ignoring duplicate elements (only the first duplicate element is added).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSortedSet.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.Builder.html#add(E)">add</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&nbsp;element)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds <code>element</code> to the <code>ImmutableSortedSet</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSortedSet.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.Builder.html#addAll(java.lang.Iterable)">addAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds each element of <code>elements</code> to the <code>ImmutableSortedSet</code>,
- ignoring duplicate elements (only the first duplicate element is added).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSortedSet.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.Builder.html#addAll(java.util.Iterator)">addAll</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends <A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds each element of <code>elements</code> to the <code>ImmutableSortedSet</code>,
- ignoring duplicate elements (only the first duplicate element is added).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;E&gt;&gt; 
-<BR>
-<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSortedSet.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html#naturalOrder()">naturalOrder</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a builder that creates immutable sorted sets whose elements are
- ordered by their natural ordering.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSortedSet.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html#orderedBy(java.util.Comparator)">orderedBy</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;E&gt;&nbsp;comparator)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a builder that creates immutable sorted sets with an explicit
- comparator.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;E&gt;&gt; 
-<BR>
-<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSortedSet.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html#reverseOrder()">reverseOrder</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a builder that creates immutable sorted sets whose elements are
- ordered by the reverse of their natural ordering.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableSortedSet.Builder.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableSortedSet.Builder.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ImmutableSortedSet.html b/javadoc/com/google/common/collect/class-use/ImmutableSortedSet.html
deleted file mode 100644
index 1ff5fce..0000000
--- a/javadoc/com/google/common/collect/class-use/ImmutableSortedSet.html
+++ /dev/null
@@ -1,429 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.ImmutableSortedSet (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.ImmutableSortedSet (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableSortedSet.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableSortedSet.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.ImmutableSortedSet</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSortedSet.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.Builder.html#build()">build</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a newly-created <code>ImmutableSortedSet</code> based on the contents
- of the <code>Builder</code> and its comparator.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSortedSet.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html#copyOf(java.util.Comparator, java.lang.Iterable)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super E&gt;&nbsp;comparator,
-       <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted set containing the given elements sorted by
- the given <code>Comparator</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSortedSet.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html#copyOf(java.util.Comparator, java.util.Iterator)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super E&gt;&nbsp;comparator,
-       <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted set containing the given elements sorted by
- the given <code>Comparator</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSortedSet.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html#copyOf(java.lang.Iterable)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted set containing the given elements sorted by
- their natural ordering.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSortedSet.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html#copyOf(java.util.Iterator)">copyOf</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted set containing the given elements sorted by
- their natural ordering.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSortedSet.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html#copyOfSorted(java.util.SortedSet)">copyOfSorted</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;E&gt;&nbsp;sortedSet)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted set containing the elements of a sorted set,
- sorted by the same <code>Comparator</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSortedSet.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html#headSet(E)">headSet</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&nbsp;toElement)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSortedMap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedMap.html#keySet()">keySet</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted set of the keys in this map.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSortedSet.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html#of()">of</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the empty immutable sorted set.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super E&gt;&gt; 
-<BR>
-<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSortedSet.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html#of(E...)">of</A></B>(E...&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted set containing the given elements sorted by
- their natural ordering.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super E&gt;&gt; 
-<BR>
-<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSortedSet.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html#of(E)">of</A></B>(E&nbsp;element)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted set containing a single element.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super E&gt;&gt; 
-<BR>
-<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSortedSet.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html#of(E, E)">of</A></B>(E&nbsp;e1,
-   E&nbsp;e2)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted set containing the given elements sorted by
- their natural ordering.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super E&gt;&gt; 
-<BR>
-<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSortedSet.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html#of(E, E, E)">of</A></B>(E&nbsp;e1,
-   E&nbsp;e2,
-   E&nbsp;e3)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted set containing the given elements sorted by
- their natural ordering.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super E&gt;&gt; 
-<BR>
-<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSortedSet.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html#of(E, E, E, E)">of</A></B>(E&nbsp;e1,
-   E&nbsp;e2,
-   E&nbsp;e3,
-   E&nbsp;e4)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted set containing the given elements sorted by
- their natural ordering.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;? super E&gt;&gt; 
-<BR>
-<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSortedSet.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html#of(E, E, E, E, E)">of</A></B>(E&nbsp;e1,
-   E&nbsp;e2,
-   E&nbsp;e3,
-   E&nbsp;e4,
-   E&nbsp;e5)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable sorted set containing the given elements sorted by
- their natural ordering.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSortedSet.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html#subSet(E, E)">subSet</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&nbsp;fromElement,
-       <A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&nbsp;toElement)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSortedSet.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html#tailSet(E)">tailSet</A></B>(<A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&nbsp;fromElement)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useImmutableSortedSet.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ImmutableSortedSet.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/Iterables.html b/javadoc/com/google/common/collect/class-use/Iterables.html
deleted file mode 100644
index 0786ce6..0000000
--- a/javadoc/com/google/common/collect/class-use/Iterables.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.Iterables (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.Iterables (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/Iterables.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useIterables.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Iterables.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.Iterables</B></H2>
-</CENTER>
-No usage of com.google.common.collect.Iterables
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/Iterables.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useIterables.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Iterables.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/Iterators.html b/javadoc/com/google/common/collect/class-use/Iterators.html
deleted file mode 100644
index 95ff5c9..0000000
--- a/javadoc/com/google/common/collect/class-use/Iterators.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.Iterators (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.Iterators (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/Iterators.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useIterators.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Iterators.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.Iterators</B></H2>
-</CENTER>
-No usage of com.google.common.collect.Iterators
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/Iterators.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useIterators.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Iterators.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/LinkedHashMultimap.html b/javadoc/com/google/common/collect/class-use/LinkedHashMultimap.html
deleted file mode 100644
index 3bb61ff..0000000
--- a/javadoc/com/google/common/collect/class-use/LinkedHashMultimap.html
+++ /dev/null
@@ -1,222 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.LinkedHashMultimap (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.LinkedHashMultimap (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useLinkedHashMultimap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="LinkedHashMultimap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.LinkedHashMultimap</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect">LinkedHashMultimap</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect">LinkedHashMultimap</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect">LinkedHashMultimap</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect">LinkedHashMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>LinkedHashMultimap.</B><B><A HREF="../../../../../com/google/common/collect/LinkedHashMultimap.html#create()">create</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new, empty <code>LinkedHashMultimap</code> with the default initial
- capacities.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect">LinkedHashMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>LinkedHashMultimap.</B><B><A HREF="../../../../../com/google/common/collect/LinkedHashMultimap.html#create(int, int)">create</A></B>(int&nbsp;expectedKeys,
-       int&nbsp;expectedValuesPerKey)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs an empty <code>LinkedHashMultimap</code> with enough capacity to hold
- the specified numbers of keys and values without rehashing.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect">LinkedHashMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>LinkedHashMultimap.</B><B><A HREF="../../../../../com/google/common/collect/LinkedHashMultimap.html#create(com.google.common.collect.Multimap)">create</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a <code>LinkedHashMultimap</code> with the same mappings as the
- specified multimap.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useLinkedHashMultimap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="LinkedHashMultimap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/LinkedHashMultiset.html b/javadoc/com/google/common/collect/class-use/LinkedHashMultiset.html
deleted file mode 100644
index e16c4c7..0000000
--- a/javadoc/com/google/common/collect/class-use/LinkedHashMultiset.html
+++ /dev/null
@@ -1,220 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.LinkedHashMultiset (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.LinkedHashMultiset (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useLinkedHashMultiset.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="LinkedHashMultiset.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.LinkedHashMultiset</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect">LinkedHashMultiset</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect">LinkedHashMultiset</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect">LinkedHashMultiset</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect">LinkedHashMultiset</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>LinkedHashMultiset.</B><B><A HREF="../../../../../com/google/common/collect/LinkedHashMultiset.html#create()">create</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new, empty <code>LinkedHashMultiset</code> using the default initial
- capacity.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect">LinkedHashMultiset</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>LinkedHashMultiset.</B><B><A HREF="../../../../../com/google/common/collect/LinkedHashMultiset.html#create(int)">create</A></B>(int&nbsp;distinctElements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new, empty <code>LinkedHashMultiset</code> with the specified expected
- number of distinct elements.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect">LinkedHashMultiset</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>LinkedHashMultiset.</B><B><A HREF="../../../../../com/google/common/collect/LinkedHashMultiset.html#create(java.lang.Iterable)">create</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>LinkedHashMultiset</code> containing the specified elements.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useLinkedHashMultiset.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="LinkedHashMultiset.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/LinkedListMultimap.html b/javadoc/com/google/common/collect/class-use/LinkedListMultimap.html
deleted file mode 100644
index 0df9766..0000000
--- a/javadoc/com/google/common/collect/class-use/LinkedListMultimap.html
+++ /dev/null
@@ -1,221 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.LinkedListMultimap (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.LinkedListMultimap (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useLinkedListMultimap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="LinkedListMultimap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.LinkedListMultimap</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>LinkedListMultimap.</B><B><A HREF="../../../../../com/google/common/collect/LinkedListMultimap.html#create()">create</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new, empty <code>LinkedListMultimap</code> with the default initial
- capacity.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>LinkedListMultimap.</B><B><A HREF="../../../../../com/google/common/collect/LinkedListMultimap.html#create(int)">create</A></B>(int&nbsp;expectedKeys)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs an empty <code>LinkedListMultimap</code> with enough capacity to hold
- the specified number of keys without rehashing.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>LinkedListMultimap.</B><B><A HREF="../../../../../com/google/common/collect/LinkedListMultimap.html#create(com.google.common.collect.Multimap)">create</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a <code>LinkedListMultimap</code> with the same mappings as the
- specified <code>Multimap</code>.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useLinkedListMultimap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="LinkedListMultimap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ListMultimap.html b/javadoc/com/google/common/collect/class-use/ListMultimap.html
deleted file mode 100644
index 905d84b..0000000
--- a/javadoc/com/google/common/collect/class-use/ListMultimap.html
+++ /dev/null
@@ -1,294 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Interface com.google.common.collect.ListMultimap (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Interface com.google.common.collect.ListMultimap (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useListMultimap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ListMultimap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Interface<br>com.google.common.collect.ListMultimap</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Classes in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that implement <A HREF="../../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect">ArrayListMultimap&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Implementation of <code>Multimap</code> that uses an <code>ArrayList</code> to store
- the values for a given key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable <A HREF="../../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect"><CODE>ListMultimap</CODE></A> with reliable user-specified key and value
- iteration order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An implementation of <code>ListMultimap</code> that supports deterministic
- iteration order for both keys and values.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Multimaps.</B><B><A HREF="../../../../../com/google/common/collect/Multimaps.html#newListMultimap(java.util.Map, com.google.common.base.Supplier)">newListMultimap</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt;&nbsp;map,
-                <A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;V&gt;&gt;&nbsp;factory)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>ListMultimap</code> that uses the provided map and factory.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Multimaps.</B><B><A HREF="../../../../../com/google/common/collect/Multimaps.html#synchronizedListMultimap(com.google.common.collect.ListMultimap)">synchronizedListMultimap</A></B>(<A HREF="../../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;&nbsp;multimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a synchronized (thread-safe) <code>ListMultimap</code> backed by the
- specified multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Multimaps.</B><B><A HREF="../../../../../com/google/common/collect/Multimaps.html#unmodifiableListMultimap(com.google.common.collect.ListMultimap)">unmodifiableListMultimap</A></B>(<A HREF="../../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;&nbsp;delegate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable view of the specified <code>ListMultimap</code>.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> with parameters of type <A HREF="../../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Multimaps.</B><B><A HREF="../../../../../com/google/common/collect/Multimaps.html#synchronizedListMultimap(com.google.common.collect.ListMultimap)">synchronizedListMultimap</A></B>(<A HREF="../../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;&nbsp;multimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a synchronized (thread-safe) <code>ListMultimap</code> backed by the
- specified multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Multimaps.</B><B><A HREF="../../../../../com/google/common/collect/Multimaps.html#unmodifiableListMultimap(com.google.common.collect.ListMultimap)">unmodifiableListMultimap</A></B>(<A HREF="../../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;&nbsp;delegate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable view of the specified <code>ListMultimap</code>.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useListMultimap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ListMultimap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/Lists.html b/javadoc/com/google/common/collect/class-use/Lists.html
deleted file mode 100644
index 3be531b..0000000
--- a/javadoc/com/google/common/collect/class-use/Lists.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.Lists (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.Lists (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/Lists.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useLists.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Lists.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.Lists</B></H2>
-</CENTER>
-No usage of com.google.common.collect.Lists
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/Lists.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useLists.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Lists.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/MapDifference.ValueDifference.html b/javadoc/com/google/common/collect/class-use/MapDifference.ValueDifference.html
deleted file mode 100644
index 19df074..0000000
--- a/javadoc/com/google/common/collect/class-use/MapDifference.ValueDifference.html
+++ /dev/null
@@ -1,182 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Interface com.google.common.collect.MapDifference.ValueDifference (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Interface com.google.common.collect.MapDifference.ValueDifference (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/MapDifference.ValueDifference.html" title="interface in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useMapDifference.ValueDifference.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="MapDifference.ValueDifference.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Interface<br>com.google.common.collect.MapDifference.ValueDifference</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/collect/MapDifference.ValueDifference.html" title="interface in com.google.common.collect">MapDifference.ValueDifference</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/MapDifference.ValueDifference.html" title="interface in com.google.common.collect">MapDifference.ValueDifference</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return types with arguments of type <A HREF="../../../../../com/google/common/collect/MapDifference.ValueDifference.html" title="interface in com.google.common.collect">MapDifference.ValueDifference</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="../../../../../com/google/common/collect/MapDifference.html" title="type parameter in MapDifference">K</A>,<A HREF="../../../../../com/google/common/collect/MapDifference.ValueDifference.html" title="interface in com.google.common.collect">MapDifference.ValueDifference</A>&lt;<A HREF="../../../../../com/google/common/collect/MapDifference.html" title="type parameter in MapDifference">V</A>&gt;&gt;</CODE></FONT></TD>
-<TD><CODE><B>MapDifference.</B><B><A HREF="../../../../../com/google/common/collect/MapDifference.html#entriesDiffering()">entriesDiffering</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable map describing keys that appear in both maps, but
- with different values.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/MapDifference.ValueDifference.html" title="interface in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useMapDifference.ValueDifference.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="MapDifference.ValueDifference.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/MapDifference.html b/javadoc/com/google/common/collect/class-use/MapDifference.html
deleted file mode 100644
index 0190d07..0000000
--- a/javadoc/com/google/common/collect/class-use/MapDifference.html
+++ /dev/null
@@ -1,189 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Interface com.google.common.collect.MapDifference (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Interface com.google.common.collect.MapDifference (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/MapDifference.html" title="interface in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useMapDifference.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="MapDifference.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Interface<br>com.google.common.collect.MapDifference</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/collect/MapDifference.html" title="interface in com.google.common.collect">MapDifference</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/MapDifference.html" title="interface in com.google.common.collect">MapDifference</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/MapDifference.html" title="interface in com.google.common.collect">MapDifference</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/MapDifference.html" title="interface in com.google.common.collect">MapDifference</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Maps.</B><B><A HREF="../../../../../com/google/common/collect/Maps.html#difference(java.util.Map, java.util.Map)">difference</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;left,
-           <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;? extends K,? extends V&gt;&nbsp;right)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Computes the difference between two maps.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/MapDifference.html" title="interface in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useMapDifference.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="MapDifference.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/MapMaker.html b/javadoc/com/google/common/collect/class-use/MapMaker.html
deleted file mode 100644
index f1f15b2..0000000
--- a/javadoc/com/google/common/collect/class-use/MapMaker.html
+++ /dev/null
@@ -1,239 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.MapMaker (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.MapMaker (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useMapMaker.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="MapMaker.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.MapMaker</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A></CODE></FONT></TD>
-<TD><CODE><B>MapMaker.</B><B><A HREF="../../../../../com/google/common/collect/MapMaker.html#concurrencyLevel(int)">concurrencyLevel</A></B>(int&nbsp;concurrencyLevel)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guides the allowed concurrency among update operations.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A></CODE></FONT></TD>
-<TD><CODE><B>MapMaker.</B><B><A HREF="../../../../../com/google/common/collect/MapMaker.html#expiration(long, java.util.concurrent.TimeUnit)">expiration</A></B>(long&nbsp;duration,
-           <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</A>&nbsp;unit)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Specifies that each entry should be automatically removed from the
- map once a fixed duration has passed since the entry's creation.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A></CODE></FONT></TD>
-<TD><CODE><B>MapMaker.</B><B><A HREF="../../../../../com/google/common/collect/MapMaker.html#initialCapacity(int)">initialCapacity</A></B>(int&nbsp;initialCapacity)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sets a custom initial capacity (defaults to 16).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A></CODE></FONT></TD>
-<TD><CODE><B>MapMaker.</B><B><A HREF="../../../../../com/google/common/collect/MapMaker.html#softKeys()">softKeys</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Specifies that each key (not value) stored in the map should be
- wrapped in a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/SoftReference.html?is-external=true" title="class or interface in java.lang.ref"><CODE>SoftReference</CODE></A> (by default, strong references
- are used).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A></CODE></FONT></TD>
-<TD><CODE><B>MapMaker.</B><B><A HREF="../../../../../com/google/common/collect/MapMaker.html#softValues()">softValues</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Specifies that each value (not key) stored in the map should be
- wrapped in a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/SoftReference.html?is-external=true" title="class or interface in java.lang.ref"><CODE>SoftReference</CODE></A> (by default, strong references
- are used).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A></CODE></FONT></TD>
-<TD><CODE><B>MapMaker.</B><B><A HREF="../../../../../com/google/common/collect/MapMaker.html#weakKeys()">weakKeys</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Specifies that each key (not value) stored in the map should be
- wrapped in a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/WeakReference.html?is-external=true" title="class or interface in java.lang.ref"><CODE>WeakReference</CODE></A> (by default, strong references
- are used).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A></CODE></FONT></TD>
-<TD><CODE><B>MapMaker.</B><B><A HREF="../../../../../com/google/common/collect/MapMaker.html#weakValues()">weakValues</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Specifies that each value (not key) stored in the map should be
- wrapped in a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/WeakReference.html?is-external=true" title="class or interface in java.lang.ref"><CODE>WeakReference</CODE></A> (by default, strong references
- are used).</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useMapMaker.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="MapMaker.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/Maps.html b/javadoc/com/google/common/collect/class-use/Maps.html
deleted file mode 100644
index 5d78003..0000000
--- a/javadoc/com/google/common/collect/class-use/Maps.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.Maps (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.Maps (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/Maps.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useMaps.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Maps.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.Maps</B></H2>
-</CENTER>
-No usage of com.google.common.collect.Maps
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/Maps.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useMaps.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Maps.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/Multimap.html b/javadoc/com/google/common/collect/class-use/Multimap.html
deleted file mode 100644
index b8df495..0000000
--- a/javadoc/com/google/common/collect/class-use/Multimap.html
+++ /dev/null
@@ -1,620 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Interface com.google.common.collect.Multimap (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Interface com.google.common.collect.Multimap (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useMultimap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Multimap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Interface<br>com.google.common.collect.Multimap</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Subinterfaces of <A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;interface</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <code>Multimap</code> that can hold duplicate key-value pairs and that maintains
- the insertion ordering of values for a given key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;interface</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <code>Multimap</code> that cannot hold duplicate key-value pairs.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;interface</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <code>SetMultimap</code> whose set of values for a given key are kept sorted;
- that is, they comprise a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util"><CODE>SortedSet</CODE></A>.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Classes in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that implement <A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect">ArrayListMultimap&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Implementation of <code>Multimap</code> that uses an <code>ArrayList</code> to store
- the values for a given key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect">ForwardingMultimap&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A multimap which forwards all its method calls to another multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect">HashMultimap&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Implementation of <A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A> using hash tables.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable <A HREF="../../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect"><CODE>ListMultimap</CODE></A> with reliable user-specified key and value
- iteration order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable <A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable <A HREF="../../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect"><CODE>SetMultimap</CODE></A> with reliable user-specified key and value
- iteration order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect">LinkedHashMultimap&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Implementation of <code>Multimap</code> that does not allow duplicate key-value
- entries and that returns collections whose iterators follow the ordering in
- which the data was added to the multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An implementation of <code>ListMultimap</code> that supports deterministic
- iteration order for both keys and values.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">TreeMultimap&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Implementation of <code>Multimap</code> whose keys and values are ordered by
- their natural ordering or by supplied comparators.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> with type parameters of type <A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V,M extends <A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;&gt; 
-<BR>
-M</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Multimaps.</B><B><A HREF="../../../../../com/google/common/collect/Multimaps.html#invertFrom(com.google.common.collect.Multimap, M)">invertFrom</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends V,? extends K&gt;&nbsp;source,
-           M&nbsp;dest)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies each key-value mapping in <code>source</code> into <code>dest</code>, with
- its key and value reversed.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected abstract &nbsp;<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;<A HREF="../../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,<A HREF="../../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ForwardingMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ForwardingMultimap.html#delegate()">delegate</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Multimaps.</B><B><A HREF="../../../../../com/google/common/collect/Multimaps.html#newMultimap(java.util.Map, com.google.common.base.Supplier)">newMultimap</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt;&nbsp;map,
-            <A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt;&nbsp;factory)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>Multimap</code> that uses the provided map and factory.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Multimaps.</B><B><A HREF="../../../../../com/google/common/collect/Multimaps.html#synchronizedMultimap(com.google.common.collect.Multimap)">synchronizedMultimap</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;&nbsp;multimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a synchronized (thread-safe) multimap backed by the specified
- multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Multimaps.</B><B><A HREF="../../../../../com/google/common/collect/Multimaps.html#unmodifiableMultimap(com.google.common.collect.Multimap)">unmodifiableMultimap</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;&nbsp;delegate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable view of the specified multimap.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> with parameters of type <A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableListMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.html#copyOf(com.google.common.collect.Multimap)">copyOf</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the same mappings as
- <code>multimap</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSetMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html#copyOf(com.google.common.collect.Multimap)">copyOf</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable set multimap containing the same mappings as
- <code>multimap</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ImmutableMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html#copyOf(com.google.common.collect.Multimap)">copyOf</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multimap containing the same mappings as
- <code>multimap</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>,V extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&gt; 
-<BR>
-<A HREF="../../../../../com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">TreeMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>TreeMultimap.</B><B><A HREF="../../../../../com/google/common/collect/TreeMultimap.html#create(com.google.common.collect.Multimap)">create</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a <code>TreeMultimap</code>, ordered by the natural ordering of its
- keys and values, with the same mappings as the specified multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect">HashMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>HashMultimap.</B><B><A HREF="../../../../../com/google/common/collect/HashMultimap.html#create(com.google.common.collect.Multimap)">create</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a <code>HashMultimap</code> with the same mappings as the specified
- multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect">ArrayListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ArrayListMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ArrayListMultimap.html#create(com.google.common.collect.Multimap)">create</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs an <code>ArrayListMultimap</code> with the same mappings as the
- specified multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>LinkedListMultimap.</B><B><A HREF="../../../../../com/google/common/collect/LinkedListMultimap.html#create(com.google.common.collect.Multimap)">create</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a <code>LinkedListMultimap</code> with the same mappings as the
- specified <code>Multimap</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect">LinkedHashMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>LinkedHashMultimap.</B><B><A HREF="../../../../../com/google/common/collect/LinkedHashMultimap.html#create(com.google.common.collect.Multimap)">create</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a <code>LinkedHashMultimap</code> with the same mappings as the
- specified multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V,M extends <A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;&gt; 
-<BR>
-M</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Multimaps.</B><B><A HREF="../../../../../com/google/common/collect/Multimaps.html#invertFrom(com.google.common.collect.Multimap, M)">invertFrom</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends V,? extends K&gt;&nbsp;source,
-           M&nbsp;dest)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies each key-value mapping in <code>source</code> into <code>dest</code>, with
- its key and value reversed.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableListMultimap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html#putAll(com.google.common.collect.Multimap)">putAll</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends <A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>,? extends <A HREF="../../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt;&nbsp;multimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores another multimap's entries in the built multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSetMultimap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html#putAll(com.google.common.collect.Multimap)">putAll</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends <A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>,? extends <A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt;&nbsp;multimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores another multimap's entries in the built multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B>ForwardingMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ForwardingMultimap.html#putAll(com.google.common.collect.Multimap)">putAll</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends <A HREF="../../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,? extends <A HREF="../../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt;&nbsp;multimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B>Multimap.</B><B><A HREF="../../../../../com/google/common/collect/Multimap.html#putAll(com.google.common.collect.Multimap)">putAll</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends <A HREF="../../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">K</A>,? extends <A HREF="../../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">V</A>&gt;&nbsp;multimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies all of another multimap's key-value pairs into this multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B>LinkedListMultimap.</B><B><A HREF="../../../../../com/google/common/collect/LinkedListMultimap.html#putAll(com.google.common.collect.Multimap)">putAll</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends <A HREF="../../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,? extends <A HREF="../../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt;&nbsp;multimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B>ImmutableMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html#putAll(com.google.common.collect.Multimap)">putAll</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,? extends <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt;&nbsp;multimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Guaranteed to throw an exception and leave the multimap unmodified.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>,<A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableMultimap.Builder.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html#putAll(com.google.common.collect.Multimap)">putAll</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>,? extends <A HREF="../../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>&gt;&nbsp;multimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stores another multimap's entries in the built multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Multimaps.</B><B><A HREF="../../../../../com/google/common/collect/Multimaps.html#synchronizedMultimap(com.google.common.collect.Multimap)">synchronizedMultimap</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;&nbsp;multimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a synchronized (thread-safe) multimap backed by the specified
- multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Multimaps.</B><B><A HREF="../../../../../com/google/common/collect/Multimaps.html#unmodifiableMultimap(com.google.common.collect.Multimap)">unmodifiableMultimap</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;&nbsp;delegate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable view of the specified multimap.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useMultimap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Multimap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/Multimaps.html b/javadoc/com/google/common/collect/class-use/Multimaps.html
deleted file mode 100644
index 242f513..0000000
--- a/javadoc/com/google/common/collect/class-use/Multimaps.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.Multimaps (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.Multimaps (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/Multimaps.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useMultimaps.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Multimaps.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.Multimaps</B></H2>
-</CENTER>
-No usage of com.google.common.collect.Multimaps
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/Multimaps.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useMultimaps.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Multimaps.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/Multiset.Entry.html b/javadoc/com/google/common/collect/class-use/Multiset.Entry.html
deleted file mode 100644
index 94c8802..0000000
--- a/javadoc/com/google/common/collect/class-use/Multiset.Entry.html
+++ /dev/null
@@ -1,230 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Interface com.google.common.collect.Multiset.Entry (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Interface com.google.common.collect.Multiset.Entry (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useMultiset.Entry.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Multiset.Entry.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Interface<br>com.google.common.collect.Multiset.Entry</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Multisets.</B><B><A HREF="../../../../../com/google/common/collect/Multisets.html#immutableEntry(E, int)">immutableEntry</A></B>(E&nbsp;e,
-               int&nbsp;n)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an immutable multiset entry with the specified element and count.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return types with arguments of type <A HREF="../../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt;&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableMultiset.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultiset.html#entrySet()">entrySet</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;<A HREF="../../../../../com/google/common/collect/ForwardingMultiset.html" title="type parameter in ForwardingMultiset">E</A>&gt;&gt;</CODE></FONT></TD>
-<TD><CODE><B>ForwardingMultiset.</B><B><A HREF="../../../../../com/google/common/collect/ForwardingMultiset.html#entrySet()">entrySet</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;<A HREF="../../../../../com/google/common/collect/Multiset.html" title="type parameter in Multiset">E</A>&gt;&gt;</CODE></FONT></TD>
-<TD><CODE><B>Multiset.</B><B><A HREF="../../../../../com/google/common/collect/Multiset.html#entrySet()">entrySet</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of the contents of this multiset, grouped into <code>Multiset.Entry</code> instances, each providing an element of the multiset and
- the count of that element.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="../../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>&lt;<A HREF="../../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="type parameter in ConcurrentHashMultiset">E</A>&gt;&gt;</CODE></FONT></TD>
-<TD><CODE><B>ConcurrentHashMultiset.</B><B><A HREF="../../../../../com/google/common/collect/ConcurrentHashMultiset.html#entrySet()">entrySet</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useMultiset.Entry.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Multiset.Entry.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/Multiset.html b/javadoc/com/google/common/collect/class-use/Multiset.html
deleted file mode 100644
index 717303f..0000000
--- a/javadoc/com/google/common/collect/class-use/Multiset.html
+++ /dev/null
@@ -1,357 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Interface com.google.common.collect.Multiset (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Interface com.google.common.collect.Multiset (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useMultiset.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Multiset.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Interface<br>com.google.common.collect.Multiset</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Classes in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that implement <A HREF="../../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect">ConcurrentHashMultiset&lt;E&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A multiset that supports concurrent modifications and that provides atomic
- versions of most <code>Multiset</code> operations (exceptions where noted).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/EnumMultiset.html" title="class in com.google.common.collect">EnumMultiset&lt;E extends Enum&lt;E&gt;&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Multiset implementation backed by an <A HREF="http://java.sun.com/javase/6/docs/api/java/util/EnumMap.html?is-external=true" title="class or interface in java.util"><CODE>EnumMap</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect">ForwardingMultiset&lt;E&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A multiset which forwards all its method calls to another multiset.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect">HashMultiset&lt;E&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Multiset implementation backed by a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util"><CODE>HashMap</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset&lt;E&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable hash-based multiset.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect">LinkedHashMultiset&lt;E&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <code>Multiset</code> implementation with predictable iteration order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect">TreeMultiset&lt;E&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A multiset which maintains the ordering of its elements, according to either
- their natural order or an explicit <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util"><CODE>Comparator</CODE></A>.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected abstract &nbsp;<A HREF="../../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../../com/google/common/collect/ForwardingMultiset.html" title="type parameter in ForwardingMultiset">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ForwardingMultiset.</B><B><A HREF="../../../../../com/google/common/collect/ForwardingMultiset.html#delegate()">delegate</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Multisets.</B><B><A HREF="../../../../../com/google/common/collect/Multisets.html#intersection(com.google.common.collect.Multiset, com.google.common.collect.Multiset)">intersection</A></B>(<A HREF="../../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;&nbsp;multiset1,
-             <A HREF="../../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;?&gt;&nbsp;multiset2)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable <b>view</b> of the intersection of two multisets.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../../com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ForwardingMultimap.</B><B><A HREF="../../../../../com/google/common/collect/ForwardingMultimap.html#keys()">keys</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../../com/google/common/collect/Multimap.html" title="type parameter in Multimap">K</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>Multimap.</B><B><A HREF="../../../../../com/google/common/collect/Multimap.html#keys()">keys</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection, which may contain duplicates, of all keys.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;<A HREF="../../../../../com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>LinkedListMultimap.</B><B><A HREF="../../../../../com/google/common/collect/LinkedListMultimap.html#keys()">keys</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Multisets.</B><B><A HREF="../../../../../com/google/common/collect/Multisets.html#unmodifiableMultiset(com.google.common.collect.Multiset)">unmodifiableMultiset</A></B>(<A HREF="../../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;? extends E&gt;&nbsp;multiset)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable view of the specified multiset.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> with parameters of type <A HREF="../../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Multisets.</B><B><A HREF="../../../../../com/google/common/collect/Multisets.html#intersection(com.google.common.collect.Multiset, com.google.common.collect.Multiset)">intersection</A></B>(<A HREF="../../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;&nbsp;multiset1,
-             <A HREF="../../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;?&gt;&nbsp;multiset2)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable <b>view</b> of the intersection of two multisets.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Multisets.</B><B><A HREF="../../../../../com/google/common/collect/Multisets.html#intersection(com.google.common.collect.Multiset, com.google.common.collect.Multiset)">intersection</A></B>(<A HREF="../../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;&nbsp;multiset1,
-             <A HREF="../../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;?&gt;&nbsp;multiset2)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable <b>view</b> of the intersection of two multisets.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Multisets.</B><B><A HREF="../../../../../com/google/common/collect/Multisets.html#unmodifiableMultiset(com.google.common.collect.Multiset)">unmodifiableMultiset</A></B>(<A HREF="../../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;? extends E&gt;&nbsp;multiset)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable view of the specified multiset.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useMultiset.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Multiset.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/Multisets.html b/javadoc/com/google/common/collect/class-use/Multisets.html
deleted file mode 100644
index 9d6dbd3..0000000
--- a/javadoc/com/google/common/collect/class-use/Multisets.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.Multisets (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.Multisets (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/Multisets.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useMultisets.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Multisets.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.Multisets</B></H2>
-</CENTER>
-No usage of com.google.common.collect.Multisets
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/Multisets.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useMultisets.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Multisets.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/MutableClassToInstanceMap.html b/javadoc/com/google/common/collect/class-use/MutableClassToInstanceMap.html
deleted file mode 100644
index 8ca0b6e..0000000
--- a/javadoc/com/google/common/collect/class-use/MutableClassToInstanceMap.html
+++ /dev/null
@@ -1,204 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.MutableClassToInstanceMap (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.MutableClassToInstanceMap (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useMutableClassToInstanceMap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="MutableClassToInstanceMap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.MutableClassToInstanceMap</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect">MutableClassToInstanceMap</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect">MutableClassToInstanceMap</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect">MutableClassToInstanceMap</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;B&gt; <A HREF="../../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect">MutableClassToInstanceMap</A>&lt;B&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>MutableClassToInstanceMap.</B><B><A HREF="../../../../../com/google/common/collect/MutableClassToInstanceMap.html#create()">create</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new <code>MutableClassToInstanceMap</code> instance backed by a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util"><CODE>HashMap</CODE></A> using the default initial capacity and load factor.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;B&gt; <A HREF="../../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect">MutableClassToInstanceMap</A>&lt;B&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>MutableClassToInstanceMap.</B><B><A HREF="../../../../../com/google/common/collect/MutableClassToInstanceMap.html#create(java.util.Map)">create</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;? extends B&gt;,B&gt;&nbsp;backingMap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new <code>MutableClassToInstanceMap</code> instance backed by a given
- empty <code>backingMap</code>.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useMutableClassToInstanceMap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="MutableClassToInstanceMap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/ObjectArrays.html b/javadoc/com/google/common/collect/class-use/ObjectArrays.html
deleted file mode 100644
index 2c2a6d0..0000000
--- a/javadoc/com/google/common/collect/class-use/ObjectArrays.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.ObjectArrays (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.ObjectArrays (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ObjectArrays.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useObjectArrays.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ObjectArrays.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.ObjectArrays</B></H2>
-</CENTER>
-No usage of com.google.common.collect.ObjectArrays
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/ObjectArrays.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useObjectArrays.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ObjectArrays.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/Ordering.html b/javadoc/com/google/common/collect/class-use/Ordering.html
deleted file mode 100644
index 4541478..0000000
--- a/javadoc/com/google/common/collect/class-use/Ordering.html
+++ /dev/null
@@ -1,418 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.Ordering (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.Ordering (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useOrdering.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Ordering.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.Ordering</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>Ordering.</B><B><A HREF="../../../../../com/google/common/collect/Ordering.html#arbitrary()">arbitrary</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an arbitrary ordering over all objects, for which <code>compare(a,
- b) == 0</code> implies <code>a == b</code> (identity equality).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;U extends <A HREF="../../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt; 
-<BR>
-<A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;U&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Ordering.</B><B><A HREF="../../../../../com/google/common/collect/Ordering.html#compound(java.util.Comparator)">compound</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super U&gt;&nbsp;secondaryComparator)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an ordering which first uses the ordering <code>this</code>, but which
- in the event of a "tie", then delegates to <code>secondaryComparator</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Ordering.</B><B><A HREF="../../../../../com/google/common/collect/Ordering.html#compound(java.lang.Iterable)">compound</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super T&gt;&gt;&nbsp;comparators)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an ordering which tries each given comparator in order until a
- non-zero result is found, returning that result, and returning zero only if
- all comparators return zero.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Ordering.</B><B><A HREF="../../../../../com/google/common/collect/Ordering.html#explicit(java.util.List)">explicit</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;T&gt;&nbsp;valuesInOrder)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an ordering that compares objects according to the order in
- which they appear in the given list.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Ordering.</B><B><A HREF="../../../../../com/google/common/collect/Ordering.html#explicit(T, T...)">explicit</A></B>(T&nbsp;leastValue,
-         T...&nbsp;remainingValuesInOrder)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an ordering that compares objects according to the order in
- which they are given to this method.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Ordering.</B><B><A HREF="../../../../../com/google/common/collect/Ordering.html#from(java.util.Comparator)">from</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;T&gt;&nbsp;comparator)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an ordering for a pre-existing <code>comparator</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Ordering.</B><B><A HREF="../../../../../com/google/common/collect/Ordering.html#from(com.google.common.collect.Ordering)">from</A></B>(<A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;T&gt;&nbsp;ordering)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>no need to use this</I></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;S extends <A HREF="../../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt; 
-<BR>
-<A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;S&gt;&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Ordering.</B><B><A HREF="../../../../../com/google/common/collect/Ordering.html#lexicographical()">lexicographical</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new ordering which sorts iterables by comparing corresponding
- elements pairwise until a nonzero result is found; imposes "dictionary
- order".</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;C extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&gt; 
-<BR>
-<A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;C&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Ordering.</B><B><A HREF="../../../../../com/google/common/collect/Ordering.html#natural()">natural</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a serializable ordering that uses the natural order of the values.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;S extends <A HREF="../../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt; 
-<BR>
-<A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;S&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Ordering.</B><B><A HREF="../../../../../com/google/common/collect/Ordering.html#nullsFirst()">nullsFirst</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an ordering that treats <code>null</code> as less than all other values
- and uses <code>this</code> to compare non-null values.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;S extends <A HREF="../../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt; 
-<BR>
-<A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;S&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Ordering.</B><B><A HREF="../../../../../com/google/common/collect/Ordering.html#nullsLast()">nullsLast</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an ordering that treats <code>null</code> as greater than all other
- values and uses this ordering to compare non-null values.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;F&gt; <A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;F&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Ordering.</B><B><A HREF="../../../../../com/google/common/collect/Ordering.html#onResultOf(com.google.common.base.Function)">onResultOf</A></B>(<A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;F,? extends <A HREF="../../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt;&nbsp;function)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new ordering on <code>F</code> which orders elements by first applying
- a function to them, then comparing those results using <code>this</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;S extends <A HREF="../../../../../com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt; 
-<BR>
-<A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;S&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Ordering.</B><B><A HREF="../../../../../com/google/common/collect/Ordering.html#reverse()">reverse</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the reverse of this ordering; the <code>Ordering</code> equivalent to
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#reverseOrder(java.util.Comparator)" title="class or interface in java.util"><CODE>Collections.reverseOrder(Comparator)</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>Ordering.</B><B><A HREF="../../../../../com/google/common/collect/Ordering.html#usingToString()">usingToString</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an ordering that compares objects by the natural ordering of their
- string representations as returned by <code>toString()</code>.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> with parameters of type <A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Ordering.</B><B><A HREF="../../../../../com/google/common/collect/Ordering.html#from(com.google.common.collect.Ordering)">from</A></B>(<A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>&lt;T&gt;&nbsp;ordering)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>no need to use this</I></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useOrdering.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Ordering.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/PeekingIterator.html b/javadoc/com/google/common/collect/class-use/PeekingIterator.html
deleted file mode 100644
index 70aa5fe..0000000
--- a/javadoc/com/google/common/collect/class-use/PeekingIterator.html
+++ /dev/null
@@ -1,188 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Interface com.google.common.collect.PeekingIterator (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Interface com.google.common.collect.PeekingIterator (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/PeekingIterator.html" title="interface in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-usePeekingIterator.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="PeekingIterator.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Interface<br>com.google.common.collect.PeekingIterator</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/collect/PeekingIterator.html" title="interface in com.google.common.collect">PeekingIterator</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/PeekingIterator.html" title="interface in com.google.common.collect">PeekingIterator</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/PeekingIterator.html" title="interface in com.google.common.collect">PeekingIterator</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/collect/PeekingIterator.html" title="interface in com.google.common.collect">PeekingIterator</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Iterators.</B><B><A HREF="../../../../../com/google/common/collect/Iterators.html#peekingIterator(java.util.Iterator)">peekingIterator</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;? extends T&gt;&nbsp;iterator)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a <code>PeekingIterator</code> backed by the given iterator.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/PeekingIterator.html" title="interface in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-usePeekingIterator.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="PeekingIterator.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/SetMultimap.html b/javadoc/com/google/common/collect/class-use/SetMultimap.html
deleted file mode 100644
index 320e279..0000000
--- a/javadoc/com/google/common/collect/class-use/SetMultimap.html
+++ /dev/null
@@ -1,335 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Uses of Interface com.google.common.collect.SetMultimap (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Interface com.google.common.collect.SetMultimap (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useSetMultimap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="SetMultimap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Interface<br>com.google.common.collect.SetMultimap</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Subinterfaces of <A HREF="../../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;interface</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <code>SetMultimap</code> whose set of values for a given key are kept sorted;
- that is, they comprise a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util"><CODE>SortedSet</CODE></A>.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Classes in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that implement <A HREF="../../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect">HashMultimap&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Implementation of <A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A> using hash tables.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable <A HREF="../../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect"><CODE>SetMultimap</CODE></A> with reliable user-specified key and value
- iteration order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect">LinkedHashMultimap&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Implementation of <code>Multimap</code> that does not allow duplicate key-value
- entries and that returns collections whose iterators follow the ordering in
- which the data was added to the multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">TreeMultimap&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Implementation of <code>Multimap</code> whose keys and values are ordered by
- their natural ordering or by supplied comparators.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Multimaps.</B><B><A HREF="../../../../../com/google/common/collect/Multimaps.html#forMap(java.util.Map)">forMap</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;&nbsp;map)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a multimap view of the specified map.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Multimaps.</B><B><A HREF="../../../../../com/google/common/collect/Multimaps.html#newSetMultimap(java.util.Map, com.google.common.base.Supplier)">newSetMultimap</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt;&nbsp;map,
-               <A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;V&gt;&gt;&nbsp;factory)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>SetMultimap</code> that uses the provided map and factory.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Multimaps.</B><B><A HREF="../../../../../com/google/common/collect/Multimaps.html#synchronizedSetMultimap(com.google.common.collect.SetMultimap)">synchronizedSetMultimap</A></B>(<A HREF="../../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;&nbsp;multimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a synchronized (thread-safe) <code>SetMultimap</code> backed by the
- specified multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Multimaps.</B><B><A HREF="../../../../../com/google/common/collect/Multimaps.html#unmodifiableSetMultimap(com.google.common.collect.SetMultimap)">unmodifiableSetMultimap</A></B>(<A HREF="../../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;&nbsp;delegate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable view of the specified <code>SetMultimap</code>.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> with parameters of type <A HREF="../../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Multimaps.</B><B><A HREF="../../../../../com/google/common/collect/Multimaps.html#synchronizedSetMultimap(com.google.common.collect.SetMultimap)">synchronizedSetMultimap</A></B>(<A HREF="../../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;&nbsp;multimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a synchronized (thread-safe) <code>SetMultimap</code> backed by the
- specified multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Multimaps.</B><B><A HREF="../../../../../com/google/common/collect/Multimaps.html#unmodifiableSetMultimap(com.google.common.collect.SetMultimap)">unmodifiableSetMultimap</A></B>(<A HREF="../../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;&nbsp;delegate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable view of the specified <code>SetMultimap</code>.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useSetMultimap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="SetMultimap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/Sets.SetView.html b/javadoc/com/google/common/collect/class-use/Sets.SetView.html
deleted file mode 100644
index 2803e7b..0000000
--- a/javadoc/com/google/common/collect/class-use/Sets.SetView.html
+++ /dev/null
@@ -1,221 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.Sets.SetView (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.Sets.SetView (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/Sets.SetView.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useSets.SetView.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Sets.SetView.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.Sets.SetView</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/collect/Sets.SetView.html" title="class in com.google.common.collect">Sets.SetView</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/Sets.SetView.html" title="class in com.google.common.collect">Sets.SetView</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/Sets.SetView.html" title="class in com.google.common.collect">Sets.SetView</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/Sets.SetView.html" title="class in com.google.common.collect">Sets.SetView</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Sets.</B><B><A HREF="../../../../../com/google/common/collect/Sets.html#difference(java.util.Set, java.util.Set)">difference</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt;&nbsp;set1,
-           <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;?&gt;&nbsp;set2)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable <b>view</b> of the difference of two sets.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/Sets.SetView.html" title="class in com.google.common.collect">Sets.SetView</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Sets.</B><B><A HREF="../../../../../com/google/common/collect/Sets.html#intersection(java.util.Set, java.util.Set)">intersection</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt;&nbsp;set1,
-             <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;?&gt;&nbsp;set2)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable <b>view</b> of the intersection of two sets.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/Sets.SetView.html" title="class in com.google.common.collect">Sets.SetView</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Sets.</B><B><A HREF="../../../../../com/google/common/collect/Sets.html#union(java.util.Set, java.util.Set)">union</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;? extends E&gt;&nbsp;set1,
-      <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;? extends E&gt;&nbsp;set2)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable <b>view</b> of the union of two sets.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/Sets.SetView.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useSets.SetView.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Sets.SetView.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/Sets.html b/javadoc/com/google/common/collect/class-use/Sets.html
deleted file mode 100644
index d6713a6..0000000
--- a/javadoc/com/google/common/collect/class-use/Sets.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.Sets (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.Sets (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/Sets.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useSets.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Sets.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.Sets</B></H2>
-</CENTER>
-No usage of com.google.common.collect.Sets
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/Sets.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useSets.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Sets.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/SortedSetMultimap.html b/javadoc/com/google/common/collect/class-use/SortedSetMultimap.html
deleted file mode 100644
index 4ae9d2e..0000000
--- a/javadoc/com/google/common/collect/class-use/SortedSetMultimap.html
+++ /dev/null
@@ -1,277 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Interface com.google.common.collect.SortedSetMultimap (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Interface com.google.common.collect.SortedSetMultimap (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useSortedSetMultimap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="SortedSetMultimap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Interface<br>com.google.common.collect.SortedSetMultimap</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Classes in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that implement <A HREF="../../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">TreeMultimap&lt;K,V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Implementation of <code>Multimap</code> whose keys and values are ordered by
- their natural ordering or by supplied comparators.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Multimaps.</B><B><A HREF="../../../../../com/google/common/collect/Multimaps.html#newSortedSetMultimap(java.util.Map, com.google.common.base.Supplier)">newSortedSetMultimap</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;V&gt;&gt;&nbsp;map,
-                     <A HREF="../../../../../com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;V&gt;&gt;&nbsp;factory)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>SortedSetMultimap</code> that uses the provided map and
- factory.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Multimaps.</B><B><A HREF="../../../../../com/google/common/collect/Multimaps.html#synchronizedSortedSetMultimap(com.google.common.collect.SortedSetMultimap)">synchronizedSortedSetMultimap</A></B>(<A HREF="../../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt;&nbsp;multimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a synchronized (thread-safe) <code>SortedSetMultimap</code> backed by
- the specified multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Multimaps.</B><B><A HREF="../../../../../com/google/common/collect/Multimaps.html#unmodifiableSortedSetMultimap(com.google.common.collect.SortedSetMultimap)">unmodifiableSortedSetMultimap</A></B>(<A HREF="../../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt;&nbsp;delegate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable view of the specified <code>SortedSetMultimap</code>.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> with parameters of type <A HREF="../../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Multimaps.</B><B><A HREF="../../../../../com/google/common/collect/Multimaps.html#synchronizedSortedSetMultimap(com.google.common.collect.SortedSetMultimap)">synchronizedSortedSetMultimap</A></B>(<A HREF="../../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt;&nbsp;multimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a synchronized (thread-safe) <code>SortedSetMultimap</code> backed by
- the specified multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Multimaps.</B><B><A HREF="../../../../../com/google/common/collect/Multimaps.html#unmodifiableSortedSetMultimap(com.google.common.collect.SortedSetMultimap)">unmodifiableSortedSetMultimap</A></B>(<A HREF="../../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>&lt;K,V&gt;&nbsp;delegate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable view of the specified <code>SortedSetMultimap</code>.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useSortedSetMultimap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="SortedSetMultimap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/TreeMultimap.html b/javadoc/com/google/common/collect/class-use/TreeMultimap.html
deleted file mode 100644
index 4d2f387..0000000
--- a/javadoc/com/google/common/collect/class-use/TreeMultimap.html
+++ /dev/null
@@ -1,225 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.TreeMultimap (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.TreeMultimap (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useTreeMultimap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="TreeMultimap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.TreeMultimap</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">TreeMultimap</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">TreeMultimap</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">TreeMultimap</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>,V extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&gt; 
-<BR>
-<A HREF="../../../../../com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">TreeMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>TreeMultimap.</B><B><A HREF="../../../../../com/google/common/collect/TreeMultimap.html#create()">create</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an empty <code>TreeMultimap</code> ordered by the natural ordering of
- its keys and values.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K,V&gt; <A HREF="../../../../../com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">TreeMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>TreeMultimap.</B><B><A HREF="../../../../../com/google/common/collect/TreeMultimap.html#create(java.util.Comparator, java.util.Comparator)">create</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super K&gt;&nbsp;keyComparator,
-       <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super V&gt;&nbsp;valueComparator)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an empty <code>TreeMultimap</code> instance using explicit comparators.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;K extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>,V extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&gt; 
-<BR>
-<A HREF="../../../../../com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">TreeMultimap</A>&lt;K,V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>TreeMultimap.</B><B><A HREF="../../../../../com/google/common/collect/TreeMultimap.html#create(com.google.common.collect.Multimap)">create</A></B>(<A HREF="../../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;? extends K,? extends V&gt;&nbsp;multimap)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a <code>TreeMultimap</code>, ordered by the natural ordering of its
- keys and values, with the same mappings as the specified multimap.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useTreeMultimap.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="TreeMultimap.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/TreeMultiset.html b/javadoc/com/google/common/collect/class-use/TreeMultiset.html
deleted file mode 100644
index 02b899b..0000000
--- a/javadoc/com/google/common/collect/class-use/TreeMultiset.html
+++ /dev/null
@@ -1,225 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.TreeMultiset (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.TreeMultiset (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useTreeMultiset.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="TreeMultiset.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.TreeMultiset</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect">TreeMultiset</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect">TreeMultiset</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect">TreeMultiset</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&gt; 
-<BR>
-<A HREF="../../../../../com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect">TreeMultiset</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>TreeMultiset.</B><B><A HREF="../../../../../com/google/common/collect/TreeMultiset.html#create()">create</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new, empty multiset, sorted according to the elements' natural
- order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E&gt; <A HREF="../../../../../com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect">TreeMultiset</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>TreeMultiset.</B><B><A HREF="../../../../../com/google/common/collect/TreeMultiset.html#create(java.util.Comparator)">create</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;? super E&gt;&nbsp;comparator)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new, empty multiset, sorted according to the specified
- comparator.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&gt; 
-<BR>
-<A HREF="../../../../../com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect">TreeMultiset</A>&lt;E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>TreeMultiset.</B><B><A HREF="../../../../../com/google/common/collect/TreeMultiset.html#create(java.lang.Iterable)">create</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends E&gt;&nbsp;elements)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an empty multiset containing the given initial elements, sorted
- according to the elements' natural order.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useTreeMultiset.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="TreeMultiset.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/class-use/UnmodifiableIterator.html b/javadoc/com/google/common/collect/class-use/UnmodifiableIterator.html
deleted file mode 100644
index 98b02a4..0000000
--- a/javadoc/com/google/common/collect/class-use/UnmodifiableIterator.html
+++ /dev/null
@@ -1,364 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.collect.UnmodifiableIterator (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.collect.UnmodifiableIterator (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useUnmodifiableIterator.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="UnmodifiableIterator.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.collect.UnmodifiableIterator</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Subclasses of <A HREF="../../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A> in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/collect/AbstractIterator.html" title="class in com.google.common.collect">AbstractIterator&lt;T&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This class provides a skeletal implementation of the <code>Iterator</code>
- interface, to make this interface easier to implement for certain types of
- data sources.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> that return <A HREF="../../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Iterators.</B><B><A HREF="../../../../../com/google/common/collect/Iterators.html#emptyIterator()">emptyIterator</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the empty iterator.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Iterators.</B><B><A HREF="../../../../../com/google/common/collect/Iterators.html#filter(java.util.Iterator, java.lang.Class)">filter</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;?&gt;&nbsp;unfiltered,
-       <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns all instances of class <code>type</code> in <code>unfiltered</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Iterators.</B><B><A HREF="../../../../../com/google/common/collect/Iterators.html#filter(java.util.Iterator, com.google.common.base.Predicate)">filter</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;unfiltered,
-       <A HREF="../../../../../com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;? super T&gt;&nbsp;predicate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the elements of <code>unfiltered</code> that satisfy a predicate.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Iterators.</B><B><A HREF="../../../../../com/google/common/collect/Iterators.html#forArray(T...)">forArray</A></B>(T...&nbsp;array)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an iterator containing the elements of <code>array</code> in order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Iterators.</B><B><A HREF="../../../../../com/google/common/collect/Iterators.html#forEnumeration(java.util.Enumeration)">forEnumeration</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Enumeration.html?is-external=true" title="class or interface in java.util">Enumeration</A>&lt;T&gt;&nbsp;enumeration)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adapts an <code>Enumeration</code> to the <code>Iterator</code> interface.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>abstract &nbsp;<A HREF="../../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableList.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableList.html#iterator()">iterator</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableMultiset.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableMultiset.html#iterator()">iterator</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>abstract &nbsp;<A HREF="../../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableSet.html" title="type parameter in ImmutableSet">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableSet.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableSet.html#iterator()">iterator</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>abstract &nbsp;<A HREF="../../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;<A HREF="../../../../../com/google/common/collect/ImmutableCollection.html" title="type parameter in ImmutableCollection">E</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ImmutableCollection.</B><B><A HREF="../../../../../com/google/common/collect/ImmutableCollection.html#iterator()">iterator</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable iterator across the elements in this collection.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;T&gt;&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Iterators.</B><B><A HREF="../../../../../com/google/common/collect/Iterators.html#paddedPartition(java.util.Iterator, int)">paddedPartition</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator,
-                int&nbsp;size)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Divides an iterator into unmodifiable sublists of the given size, padding
- the final iterator with null values if necessary.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;T&gt;&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Iterators.</B><B><A HREF="../../../../../com/google/common/collect/Iterators.html#partition(java.util.Iterator, int)">partition</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator,
-          int&nbsp;size)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Divides an iterator into unmodifiable sublists of the given size (the final
- list may be smaller).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Iterators.</B><B><A HREF="../../../../../com/google/common/collect/Iterators.html#singletonIterator(T)">singletonIterator</A></B>(T&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an iterator containing only <code>value</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Iterators.</B><B><A HREF="../../../../../com/google/common/collect/Iterators.html#unmodifiableIterator(java.util.Iterator)">unmodifiableIterator</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;T&gt;&nbsp;iterator)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an unmodifiable view of <code>iterator</code>.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/collect//class-useUnmodifiableIterator.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="UnmodifiableIterator.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/package-frame.html b/javadoc/com/google/common/collect/package-frame.html
deleted file mode 100644
index 42693bc..0000000
--- a/javadoc/com/google/common/collect/package-frame.html
+++ /dev/null
@@ -1,206 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-com.google.common.collect (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-
-</HEAD>
-
-<BODY BGCOLOR="white">
-<FONT size="+1" CLASS="FrameTitleFont">
-<A HREF="../../../../com/google/common/collect/package-summary.html" target="classFrame">com.google.common.collect</A></FONT>
-<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
-<TR>
-<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">
-Interfaces</FONT>&nbsp;
-<FONT CLASS="FrameItemFont">
-<BR>
-<A HREF="BiMap.html" title="interface in com.google.common.collect" target="classFrame"><I>BiMap</I></A>
-<BR>
-<A HREF="ClassToInstanceMap.html" title="interface in com.google.common.collect" target="classFrame"><I>ClassToInstanceMap</I></A>
-<BR>
-<A HREF="ListMultimap.html" title="interface in com.google.common.collect" target="classFrame"><I>ListMultimap</I></A>
-<BR>
-<A HREF="MapDifference.html" title="interface in com.google.common.collect" target="classFrame"><I>MapDifference</I></A>
-<BR>
-<A HREF="MapDifference.ValueDifference.html" title="interface in com.google.common.collect" target="classFrame"><I>MapDifference.ValueDifference</I></A>
-<BR>
-<A HREF="Multimap.html" title="interface in com.google.common.collect" target="classFrame"><I>Multimap</I></A>
-<BR>
-<A HREF="Multiset.html" title="interface in com.google.common.collect" target="classFrame"><I>Multiset</I></A>
-<BR>
-<A HREF="Multiset.Entry.html" title="interface in com.google.common.collect" target="classFrame"><I>Multiset.Entry</I></A>
-<BR>
-<A HREF="PeekingIterator.html" title="interface in com.google.common.collect" target="classFrame"><I>PeekingIterator</I></A>
-<BR>
-<A HREF="SetMultimap.html" title="interface in com.google.common.collect" target="classFrame"><I>SetMultimap</I></A>
-<BR>
-<A HREF="SortedSetMultimap.html" title="interface in com.google.common.collect" target="classFrame"><I>SortedSetMultimap</I></A></FONT></TD>
-</TR>
-</TABLE>
-
-
-<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
-<TR>
-<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">
-Classes</FONT>&nbsp;
-<FONT CLASS="FrameItemFont">
-<BR>
-<A HREF="AbstractIterator.html" title="class in com.google.common.collect" target="classFrame">AbstractIterator</A>
-<BR>
-<A HREF="ArrayListMultimap.html" title="class in com.google.common.collect" target="classFrame">ArrayListMultimap</A>
-<BR>
-<A HREF="Collections2.html" title="class in com.google.common.collect" target="classFrame">Collections2</A>
-<BR>
-<A HREF="ComparisonChain.html" title="class in com.google.common.collect" target="classFrame">ComparisonChain</A>
-<BR>
-<A HREF="ConcurrentHashMultiset.html" title="class in com.google.common.collect" target="classFrame">ConcurrentHashMultiset</A>
-<BR>
-<A HREF="EnumBiMap.html" title="class in com.google.common.collect" target="classFrame">EnumBiMap</A>
-<BR>
-<A HREF="EnumHashBiMap.html" title="class in com.google.common.collect" target="classFrame">EnumHashBiMap</A>
-<BR>
-<A HREF="EnumMultiset.html" title="class in com.google.common.collect" target="classFrame">EnumMultiset</A>
-<BR>
-<A HREF="ForwardingCollection.html" title="class in com.google.common.collect" target="classFrame">ForwardingCollection</A>
-<BR>
-<A HREF="ForwardingConcurrentMap.html" title="class in com.google.common.collect" target="classFrame">ForwardingConcurrentMap</A>
-<BR>
-<A HREF="ForwardingIterator.html" title="class in com.google.common.collect" target="classFrame">ForwardingIterator</A>
-<BR>
-<A HREF="ForwardingList.html" title="class in com.google.common.collect" target="classFrame">ForwardingList</A>
-<BR>
-<A HREF="ForwardingListIterator.html" title="class in com.google.common.collect" target="classFrame">ForwardingListIterator</A>
-<BR>
-<A HREF="ForwardingMap.html" title="class in com.google.common.collect" target="classFrame">ForwardingMap</A>
-<BR>
-<A HREF="ForwardingMapEntry.html" title="class in com.google.common.collect" target="classFrame">ForwardingMapEntry</A>
-<BR>
-<A HREF="ForwardingMultimap.html" title="class in com.google.common.collect" target="classFrame">ForwardingMultimap</A>
-<BR>
-<A HREF="ForwardingMultiset.html" title="class in com.google.common.collect" target="classFrame">ForwardingMultiset</A>
-<BR>
-<A HREF="ForwardingObject.html" title="class in com.google.common.collect" target="classFrame">ForwardingObject</A>
-<BR>
-<A HREF="ForwardingQueue.html" title="class in com.google.common.collect" target="classFrame">ForwardingQueue</A>
-<BR>
-<A HREF="ForwardingSet.html" title="class in com.google.common.collect" target="classFrame">ForwardingSet</A>
-<BR>
-<A HREF="ForwardingSortedMap.html" title="class in com.google.common.collect" target="classFrame">ForwardingSortedMap</A>
-<BR>
-<A HREF="ForwardingSortedSet.html" title="class in com.google.common.collect" target="classFrame">ForwardingSortedSet</A>
-<BR>
-<A HREF="HashBiMap.html" title="class in com.google.common.collect" target="classFrame">HashBiMap</A>
-<BR>
-<A HREF="HashMultimap.html" title="class in com.google.common.collect" target="classFrame">HashMultimap</A>
-<BR>
-<A HREF="HashMultiset.html" title="class in com.google.common.collect" target="classFrame">HashMultiset</A>
-<BR>
-<A HREF="ImmutableBiMap.html" title="class in com.google.common.collect" target="classFrame">ImmutableBiMap</A>
-<BR>
-<A HREF="ImmutableBiMap.Builder.html" title="class in com.google.common.collect" target="classFrame">ImmutableBiMap.Builder</A>
-<BR>
-<A HREF="ImmutableClassToInstanceMap.html" title="class in com.google.common.collect" target="classFrame">ImmutableClassToInstanceMap</A>
-<BR>
-<A HREF="ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect" target="classFrame">ImmutableClassToInstanceMap.Builder</A>
-<BR>
-<A HREF="ImmutableCollection.html" title="class in com.google.common.collect" target="classFrame">ImmutableCollection</A>
-<BR>
-<A HREF="ImmutableList.html" title="class in com.google.common.collect" target="classFrame">ImmutableList</A>
-<BR>
-<A HREF="ImmutableList.Builder.html" title="class in com.google.common.collect" target="classFrame">ImmutableList.Builder</A>
-<BR>
-<A HREF="ImmutableListMultimap.html" title="class in com.google.common.collect" target="classFrame">ImmutableListMultimap</A>
-<BR>
-<A HREF="ImmutableListMultimap.Builder.html" title="class in com.google.common.collect" target="classFrame">ImmutableListMultimap.Builder</A>
-<BR>
-<A HREF="ImmutableMap.html" title="class in com.google.common.collect" target="classFrame">ImmutableMap</A>
-<BR>
-<A HREF="ImmutableMap.Builder.html" title="class in com.google.common.collect" target="classFrame">ImmutableMap.Builder</A>
-<BR>
-<A HREF="ImmutableMultimap.html" title="class in com.google.common.collect" target="classFrame">ImmutableMultimap</A>
-<BR>
-<A HREF="ImmutableMultimap.Builder.html" title="class in com.google.common.collect" target="classFrame">ImmutableMultimap.Builder</A>
-<BR>
-<A HREF="ImmutableMultiset.html" title="class in com.google.common.collect" target="classFrame">ImmutableMultiset</A>
-<BR>
-<A HREF="ImmutableMultiset.Builder.html" title="class in com.google.common.collect" target="classFrame">ImmutableMultiset.Builder</A>
-<BR>
-<A HREF="ImmutableSet.html" title="class in com.google.common.collect" target="classFrame">ImmutableSet</A>
-<BR>
-<A HREF="ImmutableSet.Builder.html" title="class in com.google.common.collect" target="classFrame">ImmutableSet.Builder</A>
-<BR>
-<A HREF="ImmutableSetMultimap.html" title="class in com.google.common.collect" target="classFrame">ImmutableSetMultimap</A>
-<BR>
-<A HREF="ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect" target="classFrame">ImmutableSetMultimap.Builder</A>
-<BR>
-<A HREF="ImmutableSortedMap.html" title="class in com.google.common.collect" target="classFrame">ImmutableSortedMap</A>
-<BR>
-<A HREF="ImmutableSortedMap.Builder.html" title="class in com.google.common.collect" target="classFrame">ImmutableSortedMap.Builder</A>
-<BR>
-<A HREF="ImmutableSortedSet.html" title="class in com.google.common.collect" target="classFrame">ImmutableSortedSet</A>
-<BR>
-<A HREF="ImmutableSortedSet.Builder.html" title="class in com.google.common.collect" target="classFrame">ImmutableSortedSet.Builder</A>
-<BR>
-<A HREF="Iterables.html" title="class in com.google.common.collect" target="classFrame">Iterables</A>
-<BR>
-<A HREF="Iterators.html" title="class in com.google.common.collect" target="classFrame">Iterators</A>
-<BR>
-<A HREF="LinkedHashMultimap.html" title="class in com.google.common.collect" target="classFrame">LinkedHashMultimap</A>
-<BR>
-<A HREF="LinkedHashMultiset.html" title="class in com.google.common.collect" target="classFrame">LinkedHashMultiset</A>
-<BR>
-<A HREF="LinkedListMultimap.html" title="class in com.google.common.collect" target="classFrame">LinkedListMultimap</A>
-<BR>
-<A HREF="Lists.html" title="class in com.google.common.collect" target="classFrame">Lists</A>
-<BR>
-<A HREF="MapMaker.html" title="class in com.google.common.collect" target="classFrame">MapMaker</A>
-<BR>
-<A HREF="Maps.html" title="class in com.google.common.collect" target="classFrame">Maps</A>
-<BR>
-<A HREF="Multimaps.html" title="class in com.google.common.collect" target="classFrame">Multimaps</A>
-<BR>
-<A HREF="Multisets.html" title="class in com.google.common.collect" target="classFrame">Multisets</A>
-<BR>
-<A HREF="MutableClassToInstanceMap.html" title="class in com.google.common.collect" target="classFrame">MutableClassToInstanceMap</A>
-<BR>
-<A HREF="ObjectArrays.html" title="class in com.google.common.collect" target="classFrame">ObjectArrays</A>
-<BR>
-<A HREF="Ordering.html" title="class in com.google.common.collect" target="classFrame">Ordering</A>
-<BR>
-<A HREF="Sets.html" title="class in com.google.common.collect" target="classFrame">Sets</A>
-<BR>
-<A HREF="Sets.SetView.html" title="class in com.google.common.collect" target="classFrame">Sets.SetView</A>
-<BR>
-<A HREF="TreeMultimap.html" title="class in com.google.common.collect" target="classFrame">TreeMultimap</A>
-<BR>
-<A HREF="TreeMultiset.html" title="class in com.google.common.collect" target="classFrame">TreeMultiset</A>
-<BR>
-<A HREF="UnmodifiableIterator.html" title="class in com.google.common.collect" target="classFrame">UnmodifiableIterator</A></FONT></TD>
-</TR>
-</TABLE>
-
-
-<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
-<TR>
-<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">
-Exceptions</FONT>&nbsp;
-<FONT CLASS="FrameItemFont">
-<BR>
-<A HREF="AsynchronousComputationException.html" title="class in com.google.common.collect" target="classFrame">AsynchronousComputationException</A>
-<BR>
-<A HREF="ComputationException.html" title="class in com.google.common.collect" target="classFrame">ComputationException</A></FONT></TD>
-</TR>
-</TABLE>
-
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/package-summary.html b/javadoc/com/google/common/collect/package-summary.html
deleted file mode 100644
index 900c6ee..0000000
--- a/javadoc/com/google/common/collect/package-summary.html
+++ /dev/null
@@ -1,709 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-com.google.common.collect (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="com.google.common.collect (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-use.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/base/package-summary.html"><B>PREV PACKAGE</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/io/package-summary.html"><B>NEXT PACKAGE</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/package-summary.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/ParametersAreNonnullByDefault.html?is-external=true" title="class or interface in javax.annotation">@ParametersAreNonnullByDefault</A>
-</FONT><H2>
-Package com.google.common.collect
-</H2>
-This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.
-<P>
-<B>See:</B>
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<A HREF="#package_description"><B>Description</B></A>
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Interface Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap&lt;K,V&gt;</A></B></TD>
-<TD>A bimap (or "bidirectional map") is a map that preserves the uniqueness of
- its values as well as that of its keys.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect">ClassToInstanceMap&lt;B&gt;</A></B></TD>
-<TD>A map, each entry of which maps a Java
- <a href="http://tinyurl.com/2cmwkz">raw type</a> to an instance of that type.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap&lt;K,V&gt;</A></B></TD>
-<TD>A <code>Multimap</code> that can hold duplicate key-value pairs and that maintains
- the insertion ordering of values for a given key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/MapDifference.html" title="interface in com.google.common.collect">MapDifference&lt;K,V&gt;</A></B></TD>
-<TD>An object representing the differences between two maps.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/MapDifference.ValueDifference.html" title="interface in com.google.common.collect">MapDifference.ValueDifference&lt;V&gt;</A></B></TD>
-<TD>A difference between the mappings from two maps with the same key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap&lt;K,V&gt;</A></B></TD>
-<TD>A collection similar to a <code>Map</code>, but which may associate multiple
- values with a single key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset&lt;E&gt;</A></B></TD>
-<TD>A collection that supports order-independent equality, like <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A>, but
- may have duplicate elements.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry&lt;E&gt;</A></B></TD>
-<TD>An unmodifiable element-count pair for a multiset.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/PeekingIterator.html" title="interface in com.google.common.collect">PeekingIterator&lt;E&gt;</A></B></TD>
-<TD>An iterator that supports a one-element lookahead while iterating.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap&lt;K,V&gt;</A></B></TD>
-<TD>A <code>Multimap</code> that cannot hold duplicate key-value pairs.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap&lt;K,V&gt;</A></B></TD>
-<TD>A <code>SetMultimap</code> whose set of values for a given key are kept sorted;
- that is, they comprise a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util"><CODE>SortedSet</CODE></A>.</TD>
-</TR>
-</TABLE>
-&nbsp;
-
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Class Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/AbstractIterator.html" title="class in com.google.common.collect">AbstractIterator&lt;T&gt;</A></B></TD>
-<TD>This class provides a skeletal implementation of the <code>Iterator</code>
- interface, to make this interface easier to implement for certain types of
- data sources.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect">ArrayListMultimap&lt;K,V&gt;</A></B></TD>
-<TD>Implementation of <code>Multimap</code> that uses an <code>ArrayList</code> to store
- the values for a given key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/Collections2.html" title="class in com.google.common.collect">Collections2</A></B></TD>
-<TD>Provides static methods for working with <code>Collection</code> instances.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ComparisonChain.html" title="class in com.google.common.collect">ComparisonChain</A></B></TD>
-<TD>A utility for performing a "lazy" chained comparison statement, which 
- performs comparisons only until it finds a nonzero result.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect">ConcurrentHashMultiset&lt;E&gt;</A></B></TD>
-<TD>A multiset that supports concurrent modifications and that provides atomic
- versions of most <code>Multiset</code> operations (exceptions where noted).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect">EnumBiMap&lt;K extends Enum&lt;K&gt;,V extends Enum&lt;V&gt;&gt;</A></B></TD>
-<TD>A <code>BiMap</code> backed by two <code>EnumMap</code> instances.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect">EnumHashBiMap&lt;K extends Enum&lt;K&gt;,V&gt;</A></B></TD>
-<TD>A <code>BiMap</code> backed by an <code>EnumMap</code> instance for keys-to-values, and
- a <code>HashMap</code> instance for values-to-keys.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/EnumMultiset.html" title="class in com.google.common.collect">EnumMultiset&lt;E extends Enum&lt;E&gt;&gt;</A></B></TD>
-<TD>Multiset implementation backed by an <A HREF="http://java.sun.com/javase/6/docs/api/java/util/EnumMap.html?is-external=true" title="class or interface in java.util"><CODE>EnumMap</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection&lt;E&gt;</A></B></TD>
-<TD>A collection which forwards all its method calls to another collection.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="class in com.google.common.collect">ForwardingConcurrentMap&lt;K,V&gt;</A></B></TD>
-<TD>A concurrent map which forwards all its method calls to another concurrent
- map.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ForwardingIterator.html" title="class in com.google.common.collect">ForwardingIterator&lt;T&gt;</A></B></TD>
-<TD>An iterator which forwards all its method calls to another iterator.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect">ForwardingList&lt;E&gt;</A></B></TD>
-<TD>A list which forwards all its method calls to another list.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ForwardingListIterator.html" title="class in com.google.common.collect">ForwardingListIterator&lt;E&gt;</A></B></TD>
-<TD>A list iterator which forwards all its method calls to another list
- iterator.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap&lt;K,V&gt;</A></B></TD>
-<TD>A map which forwards all its method calls to another map.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="class in com.google.common.collect">ForwardingMapEntry&lt;K,V&gt;</A></B></TD>
-<TD>A map entry which forwards all its method calls to another map entry.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect">ForwardingMultimap&lt;K,V&gt;</A></B></TD>
-<TD>A multimap which forwards all its method calls to another multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect">ForwardingMultiset&lt;E&gt;</A></B></TD>
-<TD>A multiset which forwards all its method calls to another multiset.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A></B></TD>
-<TD>An abstract base class for implementing the <a
- href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ForwardingQueue.html" title="class in com.google.common.collect">ForwardingQueue&lt;E&gt;</A></B></TD>
-<TD>A queue which forwards all its method calls to another queue.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ForwardingSet.html" title="class in com.google.common.collect">ForwardingSet&lt;E&gt;</A></B></TD>
-<TD>A set which forwards all its method calls to another set.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="class in com.google.common.collect">ForwardingSortedMap&lt;K,V&gt;</A></B></TD>
-<TD>A sorted map which forwards all its method calls to another sorted map.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="class in com.google.common.collect">ForwardingSortedSet&lt;E&gt;</A></B></TD>
-<TD>A sorted set which forwards all its method calls to another sorted set.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect">HashBiMap&lt;K,V&gt;</A></B></TD>
-<TD>A <A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect"><CODE>BiMap</CODE></A> backed by two <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util"><CODE>HashMap</CODE></A> instances.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect">HashMultimap&lt;K,V&gt;</A></B></TD>
-<TD>Implementation of <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A> using hash tables.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect">HashMultiset&lt;E&gt;</A></B></TD>
-<TD>Multiset implementation backed by a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util"><CODE>HashMap</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap&lt;K,V&gt;</A></B></TD>
-<TD>An immutable <A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect"><CODE>BiMap</CODE></A> with reliable user-specified iteration order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect">ImmutableBiMap.Builder&lt;K,V&gt;</A></B></TD>
-<TD>A builder for creating immutable bimap instances, especially <code>public
- static final</code> bimaps ("constant bimaps").</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap&lt;B&gt;</A></B></TD>
-<TD>A class-to-instance map backed by an <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect"><CODE>ImmutableMap</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap.Builder&lt;B&gt;</A></B></TD>
-<TD>A builder for creating immutable class-to-instance maps.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection&lt;E&gt;</A></B></TD>
-<TD>An immutable collection.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList&lt;E&gt;</A></B></TD>
-<TD>A high-performance, immutable, random-access <code>List</code> implementation.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect">ImmutableList.Builder&lt;E&gt;</A></B></TD>
-<TD>A builder for creating immutable list instances, especially
- <code>public static final</code> lists ("constant lists").</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap&lt;K,V&gt;</A></B></TD>
-<TD>An immutable <A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect"><CODE>ListMultimap</CODE></A> with reliable user-specified key and value
- iteration order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder&lt;K,V&gt;</A></B></TD>
-<TD>A builder for creating immutable <code>ListMultimap</code> instances, especially
- <code>public static final</code> multimaps ("constant multimaps").</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap&lt;K,V&gt;</A></B></TD>
-<TD>An immutable, hash-based <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A> with reliable user-specified iteration
- order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">ImmutableMap.Builder&lt;K,V&gt;</A></B></TD>
-<TD>A builder for creating immutable map instances, especially <code>public
- static final</code> maps ("constant maps").</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap&lt;K,V&gt;</A></B></TD>
-<TD>An immutable <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder&lt;K,V&gt;</A></B></TD>
-<TD>A builder for creating immutable multimap instances, especially
- <code>public static final</code> multimaps ("constant multimaps").</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset&lt;E&gt;</A></B></TD>
-<TD>An immutable hash-based multiset.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder&lt;E&gt;</A></B></TD>
-<TD>A builder for creating immutable multiset instances, especially
- <code>public static final</code> multisets ("constant multisets").</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet&lt;E&gt;</A></B></TD>
-<TD>A high-performance, immutable <code>Set</code> with reliable, user-specified
- iteration order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder&lt;E&gt;</A></B></TD>
-<TD>A builder for creating immutable set instances, especially
- <code>public static final</code> sets ("constant sets").</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap&lt;K,V&gt;</A></B></TD>
-<TD>An immutable <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect"><CODE>SetMultimap</CODE></A> with reliable user-specified key and value
- iteration order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder&lt;K,V&gt;</A></B></TD>
-<TD>A builder for creating immutable <code>SetMultimap</code> instances, especially
- <code>public static final</code> multimaps ("constant multimaps").</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap&lt;K,V&gt;</A></B></TD>
-<TD>An immutable <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util"><CODE>SortedMap</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect">ImmutableSortedMap.Builder&lt;K,V&gt;</A></B></TD>
-<TD>A builder for creating immutable sorted map instances, especially <code>public static final</code> maps ("constant maps").</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet&lt;E&gt;</A></B></TD>
-<TD>An immutable <code>SortedSet</code> that stores its elements in a sorted array.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder&lt;E&gt;</A></B></TD>
-<TD>A builder for creating immutable sorted set instances, especially
- <code>public static final</code> sets ("constant sets"), with a given
- comparator.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A></B></TD>
-<TD>This class contains static utility methods that operate on or return objects
- of type <code>Iterable</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A></B></TD>
-<TD>This class contains static utility methods that operate on or return objects
- of type <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util"><CODE>Iterator</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect">LinkedHashMultimap&lt;K,V&gt;</A></B></TD>
-<TD>Implementation of <code>Multimap</code> that does not allow duplicate key-value
- entries and that returns collections whose iterators follow the ordering in
- which the data was added to the multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect">LinkedHashMultiset&lt;E&gt;</A></B></TD>
-<TD>A <code>Multiset</code> implementation with predictable iteration order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap&lt;K,V&gt;</A></B></TD>
-<TD>An implementation of <code>ListMultimap</code> that supports deterministic
- iteration order for both keys and values.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/Lists.html" title="class in com.google.common.collect">Lists</A></B></TD>
-<TD>Static utility methods pertaining to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util"><CODE>List</CODE></A> instances.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A></B></TD>
-<TD>A <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ConcurrentMap</CODE></A> builder, providing any combination of these
- features: <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/SoftReference.html?is-external=true" title="class or interface in java.lang.ref">soft</A> or <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/WeakReference.html?is-external=true" title="class or interface in java.lang.ref">weak</A> keys, soft or weak values, timed expiration, and on-demand
- computation of values.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/Maps.html" title="class in com.google.common.collect">Maps</A></B></TD>
-<TD>Static utility methods pertaining to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A> instances.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/Multimaps.html" title="class in com.google.common.collect">Multimaps</A></B></TD>
-<TD>Provides static methods acting on or generating a <code>Multimap</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/Multisets.html" title="class in com.google.common.collect">Multisets</A></B></TD>
-<TD>Provides static utility methods for creating and working with <A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect"><CODE>Multiset</CODE></A> instances.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect">MutableClassToInstanceMap&lt;B&gt;</A></B></TD>
-<TD>A mutable class-to-instance map backed by an arbitrary user-provided map.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ObjectArrays.html" title="class in com.google.common.collect">ObjectArrays</A></B></TD>
-<TD>Static utility methods pertaining to object arrays.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering&lt;T&gt;</A></B></TD>
-<TD>A comparator with added methods to support common functions.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/Sets.html" title="class in com.google.common.collect">Sets</A></B></TD>
-<TD>Static utility methods pertaining to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A> instances.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/Sets.SetView.html" title="class in com.google.common.collect">Sets.SetView&lt;E&gt;</A></B></TD>
-<TD>An unmodifiable view of a set which may be backed by other sets; this view
- will change as the backing sets do.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">TreeMultimap&lt;K,V&gt;</A></B></TD>
-<TD>Implementation of <code>Multimap</code> whose keys and values are ordered by
- their natural ordering or by supplied comparators.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect">TreeMultiset&lt;E&gt;</A></B></TD>
-<TD>A multiset which maintains the ordering of its elements, according to either
- their natural order or an explicit <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util"><CODE>Comparator</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator&lt;E&gt;</A></B></TD>
-<TD>An iterator that does not support <A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html#remove()"><CODE>UnmodifiableIterator.remove()</CODE></A>.</TD>
-</TR>
-</TABLE>
-&nbsp;
-
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Exception Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/AsynchronousComputationException.html" title="class in com.google.common.collect">AsynchronousComputationException</A></B></TD>
-<TD>Wraps an exception that occured during a computation in a different thread.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/collect/ComputationException.html" title="class in com.google.common.collect">ComputationException</A></B></TD>
-<TD>Wraps an exception that occured during a computation.</TD>
-</TR>
-</TABLE>
-&nbsp;
-
-<P>
-<A NAME="package_description"><!-- --></A><H2>
-Package com.google.common.collect Description
-</H2>
-
-<P>
-This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.
-
- <h2>Collection Types</h2>
-
- <dl>
- <dt><A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A>
- <dd>A new type, which is similar to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A>, but may contain
-     multiple entries with the same key. Some behaviors of
-     <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A> are left unspecified and are
-     provided only by the subtypes mentioned below.
-
- <dt><A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect"><CODE>SetMultimap</CODE></A>
- <dd>An extension of <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A> which has
-     order-independent equality and does not allow duplicate entries; that is,
-     while a key may appear twice in a <code>SetMultimap</code>, each must map to a
-     different value.  <code>SetMultimap</code> takes its name from the fact that
-     the <A HREF="../../../../com/google/common/collect/SetMultimap.html#get(K)">collection of
-     values</A> associated with a given key fulfills the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A>
-     contract.
-
- <dt><A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect"><CODE>ListMultimap</CODE></A>
- <dd>An extension of <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A> which permits
-     duplicate entries, supports random access of values for a particular key,
-     and has <i>partially order-dependent equality</i> as defined by
-     <A HREF="../../../../com/google/common/collect/ListMultimap.html#equals(java.lang.Object)"><CODE>ListMultimap.equals(Object)</CODE></A>. <code>ListMultimap</code> takes its name from the fact that the <A HREF="../../../../com/google/common/collect/ListMultimap.html#get(K)">collection of values</A>
-     associated with a given key fulfills the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util"><CODE>List</CODE></A> contract.
-
- <dt><A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect"><CODE>SortedSetMultimap</CODE></A>
- <dd>An extension of <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect"><CODE>SetMultimap</CODE></A> for which
-     the <A HREF="../../../../com/google/common/collect/SortedSetMultimap.html#get(K)">collection values</A> associated with a given key is a
-     <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util"><CODE>SortedSet</CODE></A>.
-
- <dt><A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect"><CODE>Multiset</CODE></A>
- <dd>An extension of <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><CODE>Collection</CODE></A> that may contain duplicate
-     values like a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util"><CODE>List</CODE></A>, yet has order-independent equality
-     like a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A>.  One typical use for a multiset is to
-     represent a histogram.
-
- <dt><A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect"><CODE>BiMap</CODE></A>
- <dd>An extension of <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A> that guarantees the uniqueness of
-     its values as well as that of its keys. This is sometimes called an
-     "invertible map," since the restriction on values enables it to support
-     an <A HREF="../../../../com/google/common/collect/BiMap.html#inverse()">inverse view</A> --
-     which is another instance of <code>BiMap</code>.
-
- <dt><A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect"><CODE>ClassToInstanceMap</CODE></A>
- <dd>An extension of <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A> that associates a raw type with an
-     instance of that type.
- </dl>
-
- <h2>Collection Implementations</h2>
-
- <h3>of <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util"><CODE>List</CODE></A></h3>
- <dl>
- <dt><A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect"><CODE>ImmutableList</CODE></A>
- </ul>
-
- <h3>of <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A></h3>
- <dl>
- <dt><A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect"><CODE>ImmutableSet</CODE></A>
- </ul>
-
- <h3>of <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util"><CODE>SortedSet</CODE></A></h3>
- <dl>
- <dt><A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect"><CODE>ImmutableSortedSet</CODE></A>
- </dl>
-
- <h3>of <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A></h3>
- <dl>
- <dt><A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect"><CODE>ImmutableMap</CODE></A>
- <dt><A HREF="../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect"><CODE>MapMaker</CODE></A> (produced by)
- </ul>
-
- <h3>of <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util"><CODE>SortedMap</CODE></A></h3>
- <dl>
- <dt><A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect"><CODE>ImmutableSortedMap</CODE></A>
- </dl>
-
- <h3>of <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A></h3>
- <dl>
- <dt><A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect"><CODE>ImmutableMultimap</CODE></A>
- <dt><A HREF="../../../../com/google/common/collect/Multimaps.html#newMultimap(java.util.Map, com.google.common.base.Supplier)"><CODE>Multimaps.newMultimap(java.util.Map<K, java.util.Collection<V>>, com.google.common.base.Supplier<? extends java.util.Collection<V>>)</CODE></A>
- </dl>
-
- <h3>of <A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect"><CODE>ListMultimap</CODE></A></h3>
- <dl>
- <dt><A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect"><CODE>ImmutableListMultimap</CODE></A>
- <dt><A HREF="../../../../com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect"><CODE>ArrayListMultimap</CODE></A>
- <dt><A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect"><CODE>LinkedListMultimap</CODE></A>
- <dt><A HREF="../../../../com/google/common/collect/Multimaps.html#newListMultimap(java.util.Map, com.google.common.base.Supplier)"><CODE>Multimaps.newListMultimap(java.util.Map<K, java.util.Collection<V>>, com.google.common.base.Supplier<? extends java.util.List<V>>)</CODE></A>
- </dl>
-
- <h3>of <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect"><CODE>SetMultimap</CODE></A></h3>
- <dl>
- <dt><A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect"><CODE>ImmutableSetMultimap</CODE></A>
- <dt><A HREF="../../../../com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect"><CODE>HashMultimap</CODE></A>
- <dt><A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect"><CODE>LinkedHashMultimap</CODE></A>
- <dt><A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect"><CODE>TreeMultimap</CODE></A>
- <dt><A HREF="../../../../com/google/common/collect/Multimaps.html#newSetMultimap(java.util.Map, com.google.common.base.Supplier)"><CODE>Multimaps.newSetMultimap(java.util.Map<K, java.util.Collection<V>>, com.google.common.base.Supplier<? extends java.util.Set<V>>)</CODE></A>
- <dt><A HREF="../../../../com/google/common/collect/Multimaps.html#newSortedSetMultimap(java.util.Map, com.google.common.base.Supplier)"><CODE>Multimaps.newSortedSetMultimap(java.util.Map<K, java.util.Collection<V>>, com.google.common.base.Supplier<? extends java.util.SortedSet<V>>)</CODE></A>
- </dl>
-
- <h3>of <A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect"><CODE>Multiset</CODE></A></h3>
- <dl>
- <dt><A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect"><CODE>ImmutableMultiset</CODE></A>
- <dt><A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect"><CODE>ConcurrentHashMultiset</CODE></A>
- <dt><A HREF="../../../../com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect"><CODE>HashMultiset</CODE></A>
- <dt><A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect"><CODE>LinkedHashMultiset</CODE></A>
- <dt><A HREF="../../../../com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect"><CODE>TreeMultiset</CODE></A>
- <dt><A HREF="../../../../com/google/common/collect/EnumMultiset.html" title="class in com.google.common.collect"><CODE>EnumMultiset</CODE></A>
- </dl>
-
- <h3>of <A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect"><CODE>BiMap</CODE></A></h3>
- <dl>
- <dt><A HREF="../../../../com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect"><CODE>HashBiMap</CODE></A>
- <dt><A HREF="../../../../com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect"><CODE>EnumBiMap</CODE></A>
- <dt><A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect"><CODE>EnumHashBiMap</CODE></A>
- </dl>
-
- <h3>of <A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect"><CODE>ClassToInstanceMap</CODE></A></h3>
- <dl>
- <dt><A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect"><CODE>ImmutableClassToInstanceMap</CODE></A>
- <dt><A HREF="../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect"><CODE>MutableClassToInstanceMap</CODE></A>
- </dl>
-
- <h2>Skeletal implementations</h2>
- <dl>
- <dt><A HREF="../../../../com/google/common/collect/AbstractIterator.html" title="class in com.google.common.collect"><CODE>AbstractIterator</CODE></A>
- <dt><A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect"><CODE>UnmodifiableIterator</CODE></A>
- </dl>
-
- <h2>Utilities</h2>
-
- <dl>
- <dt><A HREF="../../../../com/google/common/collect/Collections2.html" title="class in com.google.common.collect"><CODE>Collections2</CODE></A>
- <dt><A HREF="../../../../com/google/common/collect/Iterators.html" title="class in com.google.common.collect"><CODE>Iterators</CODE></A>
- <dt><A HREF="../../../../com/google/common/collect/Iterables.html" title="class in com.google.common.collect"><CODE>Iterables</CODE></A>
- <dt><A HREF="../../../../com/google/common/collect/Lists.html" title="class in com.google.common.collect"><CODE>Lists</CODE></A>
- <dt><A HREF="../../../../com/google/common/collect/Maps.html" title="class in com.google.common.collect"><CODE>Maps</CODE></A>
- <dt><A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect"><CODE>Ordering</CODE></A>
- <dt><A HREF="../../../../com/google/common/collect/Sets.html" title="class in com.google.common.collect"><CODE>Sets</CODE></A>
- <dt><A HREF="../../../../com/google/common/collect/Multisets.html" title="class in com.google.common.collect"><CODE>Multisets</CODE></A>
- <dt><A HREF="../../../../com/google/common/collect/Multimaps.html" title="class in com.google.common.collect"><CODE>Multimaps</CODE></A>
- <dt><A HREF="../../../../com/google/common/collect/ObjectArrays.html" title="class in com.google.common.collect"><CODE>ObjectArrays</CODE></A>
- </dl>
-
- <h2>Forwarding collections</h2>
-
- <dl>
- <dt><A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect"><CODE>ForwardingCollection</CODE></A>
- <dt><A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="class in com.google.common.collect"><CODE>ForwardingConcurrentMap</CODE></A>
- <dt><A HREF="../../../../com/google/common/collect/ForwardingIterator.html" title="class in com.google.common.collect"><CODE>ForwardingIterator</CODE></A>
- <dt><A HREF="../../../../com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect"><CODE>ForwardingList</CODE></A>
- <dt><A HREF="../../../../com/google/common/collect/ForwardingListIterator.html" title="class in com.google.common.collect"><CODE>ForwardingListIterator</CODE></A>
- <dt><A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect"><CODE>ForwardingMap</CODE></A>
- <dt><A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="class in com.google.common.collect"><CODE>ForwardingMapEntry</CODE></A>
- <dt><A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect"><CODE>ForwardingMultimap</CODE></A>
- <dt><A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect"><CODE>ForwardingMultiset</CODE></A>
- <dt><A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect"><CODE>ForwardingObject</CODE></A>
- <dt><A HREF="../../../../com/google/common/collect/ForwardingQueue.html" title="class in com.google.common.collect"><CODE>ForwardingQueue</CODE></A>
- <dt><A HREF="../../../../com/google/common/collect/ForwardingSet.html" title="class in com.google.common.collect"><CODE>ForwardingSet</CODE></A>
- <dt><A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="class in com.google.common.collect"><CODE>ForwardingSortedMap</CODE></A>
- <dt><A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="class in com.google.common.collect"><CODE>ForwardingSortedSet</CODE></A>
- </dl>
-<P>
-
-<P>
-<DL>
-</DL>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-use.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/base/package-summary.html"><B>PREV PACKAGE</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/io/package-summary.html"><B>NEXT PACKAGE</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/package-summary.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/package-tree.html b/javadoc/com/google/common/collect/package-tree.html
deleted file mode 100644
index 193ffec..0000000
--- a/javadoc/com/google/common/collect/package-tree.html
+++ /dev/null
@@ -1,241 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-com.google.common.collect Class Hierarchy (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="com.google.common.collect Class Hierarchy (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/base/package-tree.html"><B>PREV</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/io/package-tree.html"><B>NEXT</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/package-tree.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-Hierarchy For Package com.google.common.collect
-</H2>
-</CENTER>
-<DL>
-<DT><B>Package Hierarchies:</B><DD><A HREF="../../../../overview-tree.html">All Packages</A></DL>
-<HR>
-<H2>
-Class Hierarchy
-</H2>
-<UL>
-<LI TYPE="circle">java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang"><B>Object</B></A><UL>
-<LI TYPE="circle">java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util"><B>AbstractCollection</B></A>&lt;E&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;)
-<UL>
-<LI TYPE="circle">java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractSet.html?is-external=true" title="class or interface in java.util"><B>AbstractSet</B></A>&lt;E&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt;)
-<UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/Sets.SetView.html" title="class in com.google.common.collect"><B>Sets.SetView</B></A>&lt;E&gt;</UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect"><B>ConcurrentHashMultiset</B></A>&lt;E&gt; (implements java.io.<A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>)
-<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/EnumMultiset.html" title="class in com.google.common.collect"><B>EnumMultiset</B></A>&lt;E&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect"><B>HashMultiset</B></A>&lt;E&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect"><B>LinkedHashMultiset</B></A>&lt;E&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect"><B>TreeMultiset</B></A>&lt;E&gt;</UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect"><B>ArrayListMultimap</B></A>&lt;K,V&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/Collections2.html" title="class in com.google.common.collect"><B>Collections2</B></A><LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ComparisonChain.html" title="class in com.google.common.collect"><B>ComparisonChain</B></A><LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect"><B>ForwardingObject</B></A><UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect"><B>ForwardingCollection</B></A>&lt;E&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;)
-<UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect"><B>ForwardingList</B></A>&lt;E&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;E&gt;)
-<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect"><B>ForwardingMultiset</B></A>&lt;E&gt; (implements com.google.common.collect.<A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;)
-<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingQueue.html" title="class in com.google.common.collect"><B>ForwardingQueue</B></A>&lt;E&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Queue.html?is-external=true" title="class or interface in java.util">Queue</A>&lt;E&gt;)
-<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingSet.html" title="class in com.google.common.collect"><B>ForwardingSet</B></A>&lt;E&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt;)
-<UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingSortedSet.html" title="class in com.google.common.collect"><B>ForwardingSortedSet</B></A>&lt;E&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;E&gt;)
-</UL>
-</UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingIterator.html" title="class in com.google.common.collect"><B>ForwardingIterator</B></A>&lt;T&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;E&gt;)
-<UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingListIterator.html" title="class in com.google.common.collect"><B>ForwardingListIterator</B></A>&lt;E&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true" title="class or interface in java.util">ListIterator</A>&lt;E&gt;)
-</UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect"><B>ForwardingMap</B></A>&lt;K,V&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;)
-<UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect"><B>EnumBiMap</B></A>&lt;K,V&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect"><B>EnumHashBiMap</B></A>&lt;K,V&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingConcurrentMap.html" title="class in com.google.common.collect"><B>ForwardingConcurrentMap</B></A>&lt;K,V&gt; (implements java.util.concurrent.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</A>&lt;K,V&gt;)
-<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingSortedMap.html" title="class in com.google.common.collect"><B>ForwardingSortedMap</B></A>&lt;K,V&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;K,V&gt;)
-<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect"><B>HashBiMap</B></A>&lt;K,V&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect"><B>ImmutableClassToInstanceMap</B></A>&lt;B&gt; (implements com.google.common.collect.<A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect">ClassToInstanceMap</A>&lt;B&gt;)
-<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect"><B>MutableClassToInstanceMap</B></A>&lt;B&gt; (implements com.google.common.collect.<A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect">ClassToInstanceMap</A>&lt;B&gt;)
-</UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingMapEntry.html" title="class in com.google.common.collect"><B>ForwardingMapEntry</B></A>&lt;K,V&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;K,V&gt;)
-<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect"><B>ForwardingMultimap</B></A>&lt;K,V&gt; (implements com.google.common.collect.<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;)
-</UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect"><B>HashMultimap</B></A>&lt;K,V&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect"><B>ImmutableClassToInstanceMap.Builder</B></A>&lt;B&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect"><B>ImmutableCollection</B></A>&lt;E&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;, java.io.<A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>)
-<UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect"><B>ImmutableList</B></A>&lt;E&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;E&gt;, java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/RandomAccess.html?is-external=true" title="class or interface in java.util">RandomAccess</A>)
-<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect"><B>ImmutableMultiset</B></A>&lt;E&gt; (implements com.google.common.collect.<A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;)
-<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect"><B>ImmutableSet</B></A>&lt;E&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt;)
-<UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect"><B>ImmutableSortedSet</B></A>&lt;E&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;E&gt;)
-</UL>
-</UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect"><B>ImmutableList.Builder</B></A>&lt;E&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect"><B>ImmutableMap</B></A>&lt;K,V&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;, java.io.<A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>)
-<UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect"><B>ImmutableBiMap</B></A>&lt;K,V&gt; (implements com.google.common.collect.<A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt;)
-<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect"><B>ImmutableSortedMap</B></A>&lt;K,V&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;K,V&gt;)
-</UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect"><B>ImmutableMap.Builder</B></A>&lt;K,V&gt;<UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect"><B>ImmutableBiMap.Builder</B></A>&lt;K,V&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect"><B>ImmutableSortedMap.Builder</B></A>&lt;K,V&gt;</UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect"><B>ImmutableMultimap</B></A>&lt;K,V&gt; (implements com.google.common.collect.<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;, java.io.<A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>)
-<UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect"><B>ImmutableListMultimap</B></A>&lt;K,V&gt; (implements com.google.common.collect.<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;)
-<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect"><B>ImmutableSetMultimap</B></A>&lt;K,V&gt; (implements com.google.common.collect.<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;)
-</UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect"><B>ImmutableMultimap.Builder</B></A>&lt;K,V&gt;<UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect"><B>ImmutableListMultimap.Builder</B></A>&lt;K,V&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect"><B>ImmutableSetMultimap.Builder</B></A>&lt;K,V&gt;</UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect"><B>ImmutableMultiset.Builder</B></A>&lt;E&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect"><B>ImmutableSet.Builder</B></A>&lt;E&gt;<UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect"><B>ImmutableSortedSet.Builder</B></A>&lt;E&gt;</UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/Iterables.html" title="class in com.google.common.collect"><B>Iterables</B></A><LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/Iterators.html" title="class in com.google.common.collect"><B>Iterators</B></A><LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect"><B>LinkedHashMultimap</B></A>&lt;K,V&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect"><B>LinkedListMultimap</B></A>&lt;K,V&gt; (implements com.google.common.collect.<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;, java.io.<A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>)
-<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/Lists.html" title="class in com.google.common.collect"><B>Lists</B></A><LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/MapMaker.html" title="class in com.google.common.collect"><B>MapMaker</B></A><LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/Maps.html" title="class in com.google.common.collect"><B>Maps</B></A><LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/Multimaps.html" title="class in com.google.common.collect"><B>Multimaps</B></A><LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/Multisets.html" title="class in com.google.common.collect"><B>Multisets</B></A><LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ObjectArrays.html" title="class in com.google.common.collect"><B>ObjectArrays</B></A><LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/Ordering.html" title="class in com.google.common.collect"><B>Ordering</B></A>&lt;T&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;T&gt;)
-<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/Sets.html" title="class in com.google.common.collect"><B>Sets</B></A><LI TYPE="circle">java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang"><B>Throwable</B></A> (implements java.io.<A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>)
-<UL>
-<LI TYPE="circle">java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang"><B>Exception</B></A><UL>
-<LI TYPE="circle">java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/RuntimeException.html?is-external=true" title="class or interface in java.lang"><B>RuntimeException</B></A><UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ComputationException.html" title="class in com.google.common.collect"><B>ComputationException</B></A><UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/AsynchronousComputationException.html" title="class in com.google.common.collect"><B>AsynchronousComputationException</B></A></UL>
-</UL>
-</UL>
-</UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect"><B>TreeMultimap</B></A>&lt;K,V&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect"><B>UnmodifiableIterator</B></A>&lt;E&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;E&gt;)
-<UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/AbstractIterator.html" title="class in com.google.common.collect"><B>AbstractIterator</B></A>&lt;T&gt;</UL>
-</UL>
-</UL>
-<H2>
-Interface Hierarchy
-</H2>
-<UL>
-<LI TYPE="circle">java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang"><B>Iterable</B></A>&lt;T&gt;<UL>
-<LI TYPE="circle">java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><B>Collection</B></A>&lt;E&gt;<UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/Multiset.html" title="interface in com.google.common.collect"><B>Multiset</B></A>&lt;E&gt;</UL>
-</UL>
-<LI TYPE="circle">java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util"><B>Iterator</B></A>&lt;E&gt;<UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/PeekingIterator.html" title="interface in com.google.common.collect"><B>PeekingIterator</B></A>&lt;E&gt;</UL>
-<LI TYPE="circle">java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><B>Map</B></A>&lt;K,V&gt;<UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect"><B>BiMap</B></A>&lt;K,V&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect"><B>ClassToInstanceMap</B></A>&lt;B&gt;</UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/MapDifference.html" title="interface in com.google.common.collect"><B>MapDifference</B></A>&lt;K,V&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/MapDifference.ValueDifference.html" title="interface in com.google.common.collect"><B>MapDifference.ValueDifference</B></A>&lt;V&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><B>Multimap</B></A>&lt;K,V&gt;<UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect"><B>ListMultimap</B></A>&lt;K,V&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect"><B>SetMultimap</B></A>&lt;K,V&gt;<UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect"><B>SortedSetMultimap</B></A>&lt;K,V&gt;</UL>
-</UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect"><B>Multiset.Entry</B></A>&lt;E&gt;</UL>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/base/package-tree.html"><B>PREV</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/io/package-tree.html"><B>NEXT</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/package-tree.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/collect/package-use.html b/javadoc/com/google/common/collect/package-use.html
deleted file mode 100644
index 7f51a6c..0000000
--- a/javadoc/com/google/common/collect/package-use.html
+++ /dev/null
@@ -1,572 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Package com.google.common.collect (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Package com.google.common.collect (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/package-use.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="package-use.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Package<br>com.google.common.collect</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.collect"><B>com.google.common.collect</B></A></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.util.concurrent"><B>com.google.common.util.concurrent</B></A></TD>
-<TD>&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.collect"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Classes in <A HREF="../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> used by <A HREF="../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/ArrayListMultimap.html#com.google.common.collect"><B>ArrayListMultimap</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Implementation of <code>Multimap</code> that uses an <code>ArrayList</code> to store
- the values for a given key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/BiMap.html#com.google.common.collect"><B>BiMap</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A bimap (or "bidirectional map") is a map that preserves the uniqueness of
- its values as well as that of its keys.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/ClassToInstanceMap.html#com.google.common.collect"><B>ClassToInstanceMap</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A map, each entry of which maps a Java
- <a href="http://tinyurl.com/2cmwkz">raw type</a> to an instance of that type.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/ComparisonChain.html#com.google.common.collect"><B>ComparisonChain</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A utility for performing a "lazy" chained comparison statement, which 
- performs comparisons only until it finds a nonzero result.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/ComputationException.html#com.google.common.collect"><B>ComputationException</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Wraps an exception that occured during a computation.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/ConcurrentHashMultiset.html#com.google.common.collect"><B>ConcurrentHashMultiset</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A multiset that supports concurrent modifications and that provides atomic
- versions of most <code>Multiset</code> operations (exceptions where noted).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/EnumBiMap.html#com.google.common.collect"><B>EnumBiMap</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <code>BiMap</code> backed by two <code>EnumMap</code> instances.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/EnumHashBiMap.html#com.google.common.collect"><B>EnumHashBiMap</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <code>BiMap</code> backed by an <code>EnumMap</code> instance for keys-to-values, and
- a <code>HashMap</code> instance for values-to-keys.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/EnumMultiset.html#com.google.common.collect"><B>EnumMultiset</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Multiset implementation backed by an <A HREF="http://java.sun.com/javase/6/docs/api/java/util/EnumMap.html?is-external=true" title="class or interface in java.util"><CODE>EnumMap</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/ForwardingCollection.html#com.google.common.collect"><B>ForwardingCollection</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A collection which forwards all its method calls to another collection.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/ForwardingIterator.html#com.google.common.collect"><B>ForwardingIterator</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An iterator which forwards all its method calls to another iterator.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/ForwardingMap.html#com.google.common.collect"><B>ForwardingMap</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A map which forwards all its method calls to another map.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/ForwardingObject.html#com.google.common.collect"><B>ForwardingObject</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An abstract base class for implementing the <a
- href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/ForwardingSet.html#com.google.common.collect"><B>ForwardingSet</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A set which forwards all its method calls to another set.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/HashBiMap.html#com.google.common.collect"><B>HashBiMap</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect"><CODE>BiMap</CODE></A> backed by two <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util"><CODE>HashMap</CODE></A> instances.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/HashMultimap.html#com.google.common.collect"><B>HashMultimap</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Implementation of <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A> using hash tables.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/HashMultiset.html#com.google.common.collect"><B>HashMultiset</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Multiset implementation backed by a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util"><CODE>HashMap</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/ImmutableBiMap.html#com.google.common.collect"><B>ImmutableBiMap</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable <A HREF="../../../../com/google/common/collect/BiMap.html" title="interface in com.google.common.collect"><CODE>BiMap</CODE></A> with reliable user-specified iteration order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/ImmutableBiMap.Builder.html#com.google.common.collect"><B>ImmutableBiMap.Builder</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A builder for creating immutable bimap instances, especially <code>public
- static final</code> bimaps ("constant bimaps").</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/ImmutableClassToInstanceMap.html#com.google.common.collect"><B>ImmutableClassToInstanceMap</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A class-to-instance map backed by an <A HREF="../../../../com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect"><CODE>ImmutableMap</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/ImmutableClassToInstanceMap.Builder.html#com.google.common.collect"><B>ImmutableClassToInstanceMap.Builder</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A builder for creating immutable class-to-instance maps.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/ImmutableCollection.html#com.google.common.collect"><B>ImmutableCollection</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable collection.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/ImmutableList.html#com.google.common.collect"><B>ImmutableList</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A high-performance, immutable, random-access <code>List</code> implementation.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/ImmutableList.Builder.html#com.google.common.collect"><B>ImmutableList.Builder</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A builder for creating immutable list instances, especially
- <code>public static final</code> lists ("constant lists").</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/ImmutableListMultimap.html#com.google.common.collect"><B>ImmutableListMultimap</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable <A HREF="../../../../com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect"><CODE>ListMultimap</CODE></A> with reliable user-specified key and value
- iteration order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/ImmutableListMultimap.Builder.html#com.google.common.collect"><B>ImmutableListMultimap.Builder</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A builder for creating immutable <code>ListMultimap</code> instances, especially
- <code>public static final</code> multimaps ("constant multimaps").</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/ImmutableMap.html#com.google.common.collect"><B>ImmutableMap</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable, hash-based <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A> with reliable user-specified iteration
- order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/ImmutableMap.Builder.html#com.google.common.collect"><B>ImmutableMap.Builder</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A builder for creating immutable map instances, especially <code>public
- static final</code> maps ("constant maps").</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/ImmutableMultimap.html#com.google.common.collect"><B>ImmutableMultimap</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable <A HREF="../../../../com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/ImmutableMultimap.Builder.html#com.google.common.collect"><B>ImmutableMultimap.Builder</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A builder for creating immutable multimap instances, especially
- <code>public static final</code> multimaps ("constant multimaps").</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/ImmutableMultiset.html#com.google.common.collect"><B>ImmutableMultiset</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable hash-based multiset.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/ImmutableMultiset.Builder.html#com.google.common.collect"><B>ImmutableMultiset.Builder</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A builder for creating immutable multiset instances, especially
- <code>public static final</code> multisets ("constant multisets").</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/ImmutableSet.html#com.google.common.collect"><B>ImmutableSet</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A high-performance, immutable <code>Set</code> with reliable, user-specified
- iteration order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/ImmutableSet.Builder.html#com.google.common.collect"><B>ImmutableSet.Builder</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A builder for creating immutable set instances, especially
- <code>public static final</code> sets ("constant sets").</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/ImmutableSetMultimap.html#com.google.common.collect"><B>ImmutableSetMultimap</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable <A HREF="../../../../com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect"><CODE>SetMultimap</CODE></A> with reliable user-specified key and value
- iteration order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/ImmutableSetMultimap.Builder.html#com.google.common.collect"><B>ImmutableSetMultimap.Builder</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A builder for creating immutable <code>SetMultimap</code> instances, especially
- <code>public static final</code> multimaps ("constant multimaps").</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/ImmutableSortedMap.html#com.google.common.collect"><B>ImmutableSortedMap</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util"><CODE>SortedMap</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/ImmutableSortedMap.Builder.html#com.google.common.collect"><B>ImmutableSortedMap.Builder</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A builder for creating immutable sorted map instances, especially <code>public static final</code> maps ("constant maps").</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/ImmutableSortedSet.html#com.google.common.collect"><B>ImmutableSortedSet</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An immutable <code>SortedSet</code> that stores its elements in a sorted array.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/ImmutableSortedSet.Builder.html#com.google.common.collect"><B>ImmutableSortedSet.Builder</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A builder for creating immutable sorted set instances, especially
- <code>public static final</code> sets ("constant sets"), with a given
- comparator.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/LinkedHashMultimap.html#com.google.common.collect"><B>LinkedHashMultimap</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Implementation of <code>Multimap</code> that does not allow duplicate key-value
- entries and that returns collections whose iterators follow the ordering in
- which the data was added to the multimap.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/LinkedHashMultiset.html#com.google.common.collect"><B>LinkedHashMultiset</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <code>Multiset</code> implementation with predictable iteration order.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/LinkedListMultimap.html#com.google.common.collect"><B>LinkedListMultimap</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An implementation of <code>ListMultimap</code> that supports deterministic
- iteration order for both keys and values.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/ListMultimap.html#com.google.common.collect"><B>ListMultimap</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <code>Multimap</code> that can hold duplicate key-value pairs and that maintains
- the insertion ordering of values for a given key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/MapDifference.html#com.google.common.collect"><B>MapDifference</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An object representing the differences between two maps.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/MapDifference.ValueDifference.html#com.google.common.collect"><B>MapDifference.ValueDifference</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A difference between the mappings from two maps with the same key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/MapMaker.html#com.google.common.collect"><B>MapMaker</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ConcurrentMap</CODE></A> builder, providing any combination of these
- features: <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/SoftReference.html?is-external=true" title="class or interface in java.lang.ref">soft</A> or <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/WeakReference.html?is-external=true" title="class or interface in java.lang.ref">weak</A> keys, soft or weak values, timed expiration, and on-demand
- computation of values.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/Multimap.html#com.google.common.collect"><B>Multimap</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A collection similar to a <code>Map</code>, but which may associate multiple
- values with a single key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/Multiset.html#com.google.common.collect"><B>Multiset</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A collection that supports order-independent equality, like <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A>, but
- may have duplicate elements.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/Multiset.Entry.html#com.google.common.collect"><B>Multiset.Entry</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An unmodifiable element-count pair for a multiset.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/MutableClassToInstanceMap.html#com.google.common.collect"><B>MutableClassToInstanceMap</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A mutable class-to-instance map backed by an arbitrary user-provided map.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/Ordering.html#com.google.common.collect"><B>Ordering</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A comparator with added methods to support common functions.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/PeekingIterator.html#com.google.common.collect"><B>PeekingIterator</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An iterator that supports a one-element lookahead while iterating.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/SetMultimap.html#com.google.common.collect"><B>SetMultimap</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <code>Multimap</code> that cannot hold duplicate key-value pairs.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/Sets.SetView.html#com.google.common.collect"><B>Sets.SetView</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An unmodifiable view of a set which may be backed by other sets; this view
- will change as the backing sets do.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/SortedSetMultimap.html#com.google.common.collect"><B>SortedSetMultimap</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <code>SetMultimap</code> whose set of values for a given key are kept sorted;
- that is, they comprise a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util"><CODE>SortedSet</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/TreeMultimap.html#com.google.common.collect"><B>TreeMultimap</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Implementation of <code>Multimap</code> whose keys and values are ordered by
- their natural ordering or by supplied comparators.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/TreeMultiset.html#com.google.common.collect"><B>TreeMultiset</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A multiset which maintains the ordering of its elements, according to either
- their natural order or an explicit <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util"><CODE>Comparator</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/UnmodifiableIterator.html#com.google.common.collect"><B>UnmodifiableIterator</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An iterator that does not support <A HREF="../../../../com/google/common/collect/UnmodifiableIterator.html#remove()"><CODE>UnmodifiableIterator.remove()</CODE></A>.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.util.concurrent"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Classes in <A HREF="../../../../com/google/common/collect/package-summary.html">com.google.common.collect</A> used by <A HREF="../../../../com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/collect/class-use/ForwardingObject.html#com.google.common.util.concurrent"><B>ForwardingObject</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An abstract base class for implementing the <a
- href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/collect/package-use.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="package-use.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/io/ByteArrayDataInput.html b/javadoc/com/google/common/io/ByteArrayDataInput.html
deleted file mode 100644
index 02a99d3..0000000
--- a/javadoc/com/google/common/io/ByteArrayDataInput.html
+++ /dev/null
@@ -1,536 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:59 PST 2010 -->
-<TITLE>
-ByteArrayDataInput (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="ByteArrayDataInput (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ByteArrayDataInput.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV CLASS&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/io/ByteArrayDataOutput.html" title="interface in com.google.common.io"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/io/ByteArrayDataInput.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ByteArrayDataInput.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.io</FONT>
-<BR>
-Interface ByteArrayDataInput</H2>
-<DL>
-<DT><B>All Superinterfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataInput.html?is-external=true" title="class or interface in java.io">DataInput</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public interface <B>ByteArrayDataInput</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataInput.html?is-external=true" title="class or interface in java.io">DataInput</A></DL>
-</PRE>
-
-<P>
-An extension of <code>DataInput</code> for reading from in-memory byte arrays; its
- methods offer identical functionality but do not throw <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io"><CODE>IOException</CODE></A>.
- If any method encounters the end of the array prematurely, it throws <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalStateException.html?is-external=true" title="class or interface in java.lang"><CODE>IllegalStateException</CODE></A>.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2009.09.15 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Kevin Bourrillion</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/ByteArrayDataInput.html#readBoolean()">readBoolean</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;byte</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/ByteArrayDataInput.html#readByte()">readByte</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;char</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/ByteArrayDataInput.html#readChar()">readChar</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;double</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/ByteArrayDataInput.html#readDouble()">readDouble</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;float</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/ByteArrayDataInput.html#readFloat()">readFloat</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/ByteArrayDataInput.html#readFully(byte[])">readFully</A></B>(byte[]&nbsp;b)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/ByteArrayDataInput.html#readFully(byte[], int, int)">readFully</A></B>(byte[]&nbsp;b,
-          int&nbsp;off,
-          int&nbsp;len)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/ByteArrayDataInput.html#readInt()">readInt</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/ByteArrayDataInput.html#readLine()">readLine</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;long</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/ByteArrayDataInput.html#readLong()">readLong</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;short</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/ByteArrayDataInput.html#readShort()">readShort</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/ByteArrayDataInput.html#readUnsignedByte()">readUnsignedByte</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/ByteArrayDataInput.html#readUnsignedShort()">readUnsignedShort</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/ByteArrayDataInput.html#readUTF()">readUTF</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/ByteArrayDataInput.html#skipBytes(int)">skipBytes</A></B>(int&nbsp;n)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="readFully(byte[])"><!-- --></A><H3>
-readFully</H3>
-<PRE>
-void <B>readFully</B>(byte[]&nbsp;b)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataInput.html?is-external=true#readFully(byte[])" title="class or interface in java.io">readFully</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataInput.html?is-external=true" title="class or interface in java.io">DataInput</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="readFully(byte[], int, int)"><!-- --></A><H3>
-readFully</H3>
-<PRE>
-void <B>readFully</B>(byte[]&nbsp;b,
-               int&nbsp;off,
-               int&nbsp;len)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataInput.html?is-external=true#readFully(byte[], int, int)" title="class or interface in java.io">readFully</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataInput.html?is-external=true" title="class or interface in java.io">DataInput</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="skipBytes(int)"><!-- --></A><H3>
-skipBytes</H3>
-<PRE>
-int <B>skipBytes</B>(int&nbsp;n)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataInput.html?is-external=true#skipBytes(int)" title="class or interface in java.io">skipBytes</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataInput.html?is-external=true" title="class or interface in java.io">DataInput</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="readBoolean()"><!-- --></A><H3>
-readBoolean</H3>
-<PRE>
-boolean <B>readBoolean</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataInput.html?is-external=true#readBoolean()" title="class or interface in java.io">readBoolean</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataInput.html?is-external=true" title="class or interface in java.io">DataInput</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="readByte()"><!-- --></A><H3>
-readByte</H3>
-<PRE>
-byte <B>readByte</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataInput.html?is-external=true#readByte()" title="class or interface in java.io">readByte</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataInput.html?is-external=true" title="class or interface in java.io">DataInput</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="readUnsignedByte()"><!-- --></A><H3>
-readUnsignedByte</H3>
-<PRE>
-int <B>readUnsignedByte</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataInput.html?is-external=true#readUnsignedByte()" title="class or interface in java.io">readUnsignedByte</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataInput.html?is-external=true" title="class or interface in java.io">DataInput</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="readShort()"><!-- --></A><H3>
-readShort</H3>
-<PRE>
-short <B>readShort</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataInput.html?is-external=true#readShort()" title="class or interface in java.io">readShort</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataInput.html?is-external=true" title="class or interface in java.io">DataInput</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="readUnsignedShort()"><!-- --></A><H3>
-readUnsignedShort</H3>
-<PRE>
-int <B>readUnsignedShort</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataInput.html?is-external=true#readUnsignedShort()" title="class or interface in java.io">readUnsignedShort</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataInput.html?is-external=true" title="class or interface in java.io">DataInput</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="readChar()"><!-- --></A><H3>
-readChar</H3>
-<PRE>
-char <B>readChar</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataInput.html?is-external=true#readChar()" title="class or interface in java.io">readChar</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataInput.html?is-external=true" title="class or interface in java.io">DataInput</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="readInt()"><!-- --></A><H3>
-readInt</H3>
-<PRE>
-int <B>readInt</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataInput.html?is-external=true#readInt()" title="class or interface in java.io">readInt</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataInput.html?is-external=true" title="class or interface in java.io">DataInput</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="readLong()"><!-- --></A><H3>
-readLong</H3>
-<PRE>
-long <B>readLong</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataInput.html?is-external=true#readLong()" title="class or interface in java.io">readLong</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataInput.html?is-external=true" title="class or interface in java.io">DataInput</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="readFloat()"><!-- --></A><H3>
-readFloat</H3>
-<PRE>
-float <B>readFloat</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataInput.html?is-external=true#readFloat()" title="class or interface in java.io">readFloat</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataInput.html?is-external=true" title="class or interface in java.io">DataInput</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="readDouble()"><!-- --></A><H3>
-readDouble</H3>
-<PRE>
-double <B>readDouble</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataInput.html?is-external=true#readDouble()" title="class or interface in java.io">readDouble</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataInput.html?is-external=true" title="class or interface in java.io">DataInput</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="readLine()"><!-- --></A><H3>
-readLine</H3>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>readLine</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataInput.html?is-external=true#readLine()" title="class or interface in java.io">readLine</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataInput.html?is-external=true" title="class or interface in java.io">DataInput</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="readUTF()"><!-- --></A><H3>
-readUTF</H3>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>readUTF</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataInput.html?is-external=true#readUTF()" title="class or interface in java.io">readUTF</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataInput.html?is-external=true" title="class or interface in java.io">DataInput</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ByteArrayDataInput.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV CLASS&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/io/ByteArrayDataOutput.html" title="interface in com.google.common.io"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/io/ByteArrayDataInput.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ByteArrayDataInput.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/io/ByteArrayDataOutput.html b/javadoc/com/google/common/io/ByteArrayDataOutput.html
deleted file mode 100644
index 2ab9115..0000000
--- a/javadoc/com/google/common/io/ByteArrayDataOutput.html
+++ /dev/null
@@ -1,544 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:59 PST 2010 -->
-<TITLE>
-ByteArrayDataOutput (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="ByteArrayDataOutput (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ByteArrayDataOutput.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/io/ByteArrayDataInput.html" title="interface in com.google.common.io"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/io/ByteProcessor.html" title="interface in com.google.common.io"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/io/ByteArrayDataOutput.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ByteArrayDataOutput.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.io</FONT>
-<BR>
-Interface ByteArrayDataOutput</H2>
-<DL>
-<DT><B>All Superinterfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataOutput.html?is-external=true" title="class or interface in java.io">DataOutput</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public interface <B>ByteArrayDataOutput</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataOutput.html?is-external=true" title="class or interface in java.io">DataOutput</A></DL>
-</PRE>
-
-<P>
-An extension of <code>DataOutput</code> for writing to in-memory byte arrays; its
- methods offer identical functionality but do not throw <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io"><CODE>IOException</CODE></A>.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2009.09.15 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Jayaprabhakar Kadarkarai</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;byte[]</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/ByteArrayDataOutput.html#toByteArray()">toByteArray</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the contents that have been written to this instance,
- as a byte array.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/ByteArrayDataOutput.html#write(byte[])">write</A></B>(byte[]&nbsp;b)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/ByteArrayDataOutput.html#write(byte[], int, int)">write</A></B>(byte[]&nbsp;b,
-      int&nbsp;off,
-      int&nbsp;len)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/ByteArrayDataOutput.html#write(int)">write</A></B>(int&nbsp;b)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/ByteArrayDataOutput.html#writeBoolean(boolean)">writeBoolean</A></B>(boolean&nbsp;v)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/ByteArrayDataOutput.html#writeByte(int)">writeByte</A></B>(int&nbsp;v)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/ByteArrayDataOutput.html#writeBytes(java.lang.String)">writeBytes</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;s)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>This method is dangerous as it discards the high byte of
- every character. For UTF-8, use <code>write(s.getBytes(Charsets.UTF_8))</code>.</I></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/ByteArrayDataOutput.html#writeChar(int)">writeChar</A></B>(int&nbsp;v)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/ByteArrayDataOutput.html#writeChars(java.lang.String)">writeChars</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;s)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/ByteArrayDataOutput.html#writeDouble(double)">writeDouble</A></B>(double&nbsp;v)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/ByteArrayDataOutput.html#writeFloat(float)">writeFloat</A></B>(float&nbsp;v)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/ByteArrayDataOutput.html#writeInt(int)">writeInt</A></B>(int&nbsp;v)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/ByteArrayDataOutput.html#writeLong(long)">writeLong</A></B>(long&nbsp;v)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/ByteArrayDataOutput.html#writeShort(int)">writeShort</A></B>(int&nbsp;v)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/ByteArrayDataOutput.html#writeUTF(java.lang.String)">writeUTF</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;s)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="write(int)"><!-- --></A><H3>
-write</H3>
-<PRE>
-void <B>write</B>(int&nbsp;b)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataOutput.html?is-external=true#write(int)" title="class or interface in java.io">write</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataOutput.html?is-external=true" title="class or interface in java.io">DataOutput</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="write(byte[])"><!-- --></A><H3>
-write</H3>
-<PRE>
-void <B>write</B>(byte[]&nbsp;b)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataOutput.html?is-external=true#write(byte[])" title="class or interface in java.io">write</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataOutput.html?is-external=true" title="class or interface in java.io">DataOutput</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="write(byte[], int, int)"><!-- --></A><H3>
-write</H3>
-<PRE>
-void <B>write</B>(byte[]&nbsp;b,
-           int&nbsp;off,
-           int&nbsp;len)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataOutput.html?is-external=true#write(byte[], int, int)" title="class or interface in java.io">write</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataOutput.html?is-external=true" title="class or interface in java.io">DataOutput</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="writeBoolean(boolean)"><!-- --></A><H3>
-writeBoolean</H3>
-<PRE>
-void <B>writeBoolean</B>(boolean&nbsp;v)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataOutput.html?is-external=true#writeBoolean(boolean)" title="class or interface in java.io">writeBoolean</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataOutput.html?is-external=true" title="class or interface in java.io">DataOutput</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="writeByte(int)"><!-- --></A><H3>
-writeByte</H3>
-<PRE>
-void <B>writeByte</B>(int&nbsp;v)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataOutput.html?is-external=true#writeByte(int)" title="class or interface in java.io">writeByte</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataOutput.html?is-external=true" title="class or interface in java.io">DataOutput</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="writeShort(int)"><!-- --></A><H3>
-writeShort</H3>
-<PRE>
-void <B>writeShort</B>(int&nbsp;v)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataOutput.html?is-external=true#writeShort(int)" title="class or interface in java.io">writeShort</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataOutput.html?is-external=true" title="class or interface in java.io">DataOutput</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="writeChar(int)"><!-- --></A><H3>
-writeChar</H3>
-<PRE>
-void <B>writeChar</B>(int&nbsp;v)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataOutput.html?is-external=true#writeChar(int)" title="class or interface in java.io">writeChar</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataOutput.html?is-external=true" title="class or interface in java.io">DataOutput</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="writeInt(int)"><!-- --></A><H3>
-writeInt</H3>
-<PRE>
-void <B>writeInt</B>(int&nbsp;v)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataOutput.html?is-external=true#writeInt(int)" title="class or interface in java.io">writeInt</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataOutput.html?is-external=true" title="class or interface in java.io">DataOutput</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="writeLong(long)"><!-- --></A><H3>
-writeLong</H3>
-<PRE>
-void <B>writeLong</B>(long&nbsp;v)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataOutput.html?is-external=true#writeLong(long)" title="class or interface in java.io">writeLong</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataOutput.html?is-external=true" title="class or interface in java.io">DataOutput</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="writeFloat(float)"><!-- --></A><H3>
-writeFloat</H3>
-<PRE>
-void <B>writeFloat</B>(float&nbsp;v)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataOutput.html?is-external=true#writeFloat(float)" title="class or interface in java.io">writeFloat</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataOutput.html?is-external=true" title="class or interface in java.io">DataOutput</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="writeDouble(double)"><!-- --></A><H3>
-writeDouble</H3>
-<PRE>
-void <B>writeDouble</B>(double&nbsp;v)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataOutput.html?is-external=true#writeDouble(double)" title="class or interface in java.io">writeDouble</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataOutput.html?is-external=true" title="class or interface in java.io">DataOutput</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="writeChars(java.lang.String)"><!-- --></A><H3>
-writeChars</H3>
-<PRE>
-void <B>writeChars</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;s)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataOutput.html?is-external=true#writeChars(java.lang.String)" title="class or interface in java.io">writeChars</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataOutput.html?is-external=true" title="class or interface in java.io">DataOutput</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="writeUTF(java.lang.String)"><!-- --></A><H3>
-writeUTF</H3>
-<PRE>
-void <B>writeUTF</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;s)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataOutput.html?is-external=true#writeUTF(java.lang.String)" title="class or interface in java.io">writeUTF</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataOutput.html?is-external=true" title="class or interface in java.io">DataOutput</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="writeBytes(java.lang.String)"><!-- --></A><H3>
-writeBytes</H3>
-<PRE>
-<FONT SIZE="-1"><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</A>
-</FONT>void <B>writeBytes</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;s)</PRE>
-<DL>
-<DD><B>Deprecated.</B>&nbsp;<I>This method is dangerous as it discards the high byte of
- every character. For UTF-8, use <code>write(s.getBytes(Charsets.UTF_8))</code>.</I>
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataOutput.html?is-external=true#writeBytes(java.lang.String)" title="class or interface in java.io">writeBytes</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataOutput.html?is-external=true" title="class or interface in java.io">DataOutput</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toByteArray()"><!-- --></A><H3>
-toByteArray</H3>
-<PRE>
-byte[] <B>toByteArray</B>()</PRE>
-<DL>
-<DD>Returns the contents that have been written to this instance,
- as a byte array.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ByteArrayDataOutput.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/io/ByteArrayDataInput.html" title="interface in com.google.common.io"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/io/ByteProcessor.html" title="interface in com.google.common.io"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/io/ByteArrayDataOutput.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ByteArrayDataOutput.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/io/ByteProcessor.html b/javadoc/com/google/common/io/ByteProcessor.html
deleted file mode 100644
index a44b2e6..0000000
--- a/javadoc/com/google/common/io/ByteProcessor.html
+++ /dev/null
@@ -1,254 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:59 PST 2010 -->
-<TITLE>
-ByteProcessor (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="ByteProcessor (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ByteProcessor.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/io/ByteArrayDataOutput.html" title="interface in com.google.common.io"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/io/ByteStreams.html" title="class in com.google.common.io"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/io/ByteProcessor.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ByteProcessor.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.io</FONT>
-<BR>
-Interface ByteProcessor&lt;T&gt;</H2>
-<HR>
-<DL>
-<DT><PRE>public interface <B>ByteProcessor&lt;T&gt;</B></DL>
-</PRE>
-
-<P>
-A callback interface to process bytes from a stream.
-
- <p><A HREF="../../../../com/google/common/io/ByteProcessor.html#processBytes(byte[], int, int)"><CODE>processBytes(byte[], int, int)</CODE></A> will be called for each line that is read, and
- should return <code>false</code> when you want to stop processing.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2009.09.15 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Chris Nokleberg</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/io/ByteProcessor.html" title="type parameter in ByteProcessor">T</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/ByteProcessor.html#getResult()">getResult</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the result of processing all the bytes.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/ByteProcessor.html#processBytes(byte[], int, int)">processBytes</A></B>(byte[]&nbsp;buf,
-             int&nbsp;off,
-             int&nbsp;len)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This method will be called for each chunk of bytes in an
- input stream.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="processBytes(byte[], int, int)"><!-- --></A><H3>
-processBytes</H3>
-<PRE>
-boolean <B>processBytes</B>(byte[]&nbsp;buf,
-                     int&nbsp;off,
-                     int&nbsp;len)
-                     throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>This method will be called for each chunk of bytes in an
- input stream. The implementation should process the bytes
- from <code>buf[off]</code> through <code>buf[off + len - 1]</code>
- (inclusive).
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>buf</CODE> - the byte array containing the data to process<DD><CODE>off</CODE> - the initial offset into the array<DD><CODE>len</CODE> - the length of data to be processed
-<DT><B>Returns:</B><DD>true to continue processing, false to stop
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getResult()"><!-- --></A><H3>
-getResult</H3>
-<PRE>
-<A HREF="../../../../com/google/common/io/ByteProcessor.html" title="type parameter in ByteProcessor">T</A> <B>getResult</B>()</PRE>
-<DL>
-<DD>Return the result of processing all the bytes.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ByteProcessor.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/io/ByteArrayDataOutput.html" title="interface in com.google.common.io"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/io/ByteStreams.html" title="class in com.google.common.io"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/io/ByteProcessor.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ByteProcessor.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/io/ByteStreams.html b/javadoc/com/google/common/io/ByteStreams.html
deleted file mode 100644
index 530aa58..0000000
--- a/javadoc/com/google/common/io/ByteStreams.html
+++ /dev/null
@@ -1,919 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:59 PST 2010 -->
-<TITLE>
-ByteStreams (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="ByteStreams (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ByteStreams.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/io/ByteProcessor.html" title="interface in com.google.common.io"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/io/CharStreams.html" title="class in com.google.common.io"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/io/ByteStreams.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ByteStreams.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.io</FONT>
-<BR>
-Class ByteStreams</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.io.ByteStreams</B>
-</PRE>
-<HR>
-<DL>
-<DT><PRE>public final class <B>ByteStreams</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
-</PRE>
-
-<P>
-Provides utility methods for working with byte arrays and I/O streams.
-
- <p>All method parameters must be non-null unless documented otherwise.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2009.09.15 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Chris Nokleberg</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;long</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/ByteStreams.html#copy(java.io.InputStream, java.io.OutputStream)">copy</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&nbsp;from,
-     <A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</A>&nbsp;to)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies all bytes from the input stream to the output stream.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;long</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/ByteStreams.html#copy(com.google.common.io.InputSupplier, java.io.OutputStream)">copy</A></B>(<A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;&nbsp;from,
-     <A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</A>&nbsp;to)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Opens an input stream from the supplier, copies all bytes from the
- input to the output, and closes the input stream.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;long</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/ByteStreams.html#copy(com.google.common.io.InputSupplier, com.google.common.io.OutputSupplier)">copy</A></B>(<A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;&nbsp;from,
-     <A HREF="../../../../com/google/common/io/OutputSupplier.html" title="interface in com.google.common.io">OutputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</A>&gt;&nbsp;to)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Opens input and output streams from the given suppliers, copies all
- bytes from the input to the output, and closes the streams.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;long</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/ByteStreams.html#copy(java.nio.channels.ReadableByteChannel, java.nio.channels.WritableByteChannel)">copy</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/nio/channels/ReadableByteChannel.html?is-external=true" title="class or interface in java.nio.channels">ReadableByteChannel</A>&nbsp;from,
-     <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/channels/WritableByteChannel.html?is-external=true" title="class or interface in java.nio.channels">WritableByteChannel</A>&nbsp;to)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies all bytes from the readable channel to the writable channel.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/ByteStreams.html#equal(com.google.common.io.InputSupplier, com.google.common.io.InputSupplier)">equal</A></B>(<A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;&nbsp;supplier1,
-      <A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;&nbsp;supplier2)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns true if the supplied input streams contain the same bytes.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;long</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/ByteStreams.html#getChecksum(com.google.common.io.InputSupplier, java.util.zip.Checksum)">getChecksum</A></B>(<A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;&nbsp;supplier,
-            <A HREF="http://java.sun.com/javase/6/docs/api/java/util/zip/Checksum.html?is-external=true" title="class or interface in java.util.zip">Checksum</A>&nbsp;checksum)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Computes and returns the checksum value for a supplied input stream.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;byte[]</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/ByteStreams.html#getDigest(com.google.common.io.InputSupplier, java.security.MessageDigest)">getDigest</A></B>(<A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;&nbsp;supplier,
-          <A HREF="http://java.sun.com/javase/6/docs/api/java/security/MessageDigest.html?is-external=true" title="class or interface in java.security">MessageDigest</A>&nbsp;md)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Computes and returns the digest value for a supplied input stream.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/ByteStreams.html#join(com.google.common.io.InputSupplier...)">join</A></B>(<A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;...&nbsp;suppliers)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Varargs form of <A HREF="../../../../com/google/common/io/ByteStreams.html#join(java.lang.Iterable)"><CODE>join(Iterable)</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/ByteStreams.html#join(java.lang.Iterable)">join</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;&gt;&nbsp;suppliers)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Joins multiple <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io"><CODE>InputStream</CODE></A> suppliers into a single supplier.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;long</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/ByteStreams.html#length(com.google.common.io.InputSupplier)">length</A></B>(<A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;&nbsp;supplier)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the length of a supplied input stream, in bytes.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/io/ByteArrayDataInput.html" title="interface in com.google.common.io">ByteArrayDataInput</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/ByteStreams.html#newDataInput(byte[])">newDataInput</A></B>(byte[]&nbsp;bytes)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new <A HREF="../../../../com/google/common/io/ByteArrayDataInput.html" title="interface in com.google.common.io"><CODE>ByteArrayDataInput</CODE></A> instance to read from the <code>bytes</code> array from the beginning.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/io/ByteArrayDataInput.html" title="interface in com.google.common.io">ByteArrayDataInput</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/ByteStreams.html#newDataInput(byte[], int)">newDataInput</A></B>(byte[]&nbsp;bytes,
-             int&nbsp;start)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new <A HREF="../../../../com/google/common/io/ByteArrayDataInput.html" title="interface in com.google.common.io"><CODE>ByteArrayDataInput</CODE></A> instance to read from the <code>bytes</code> array, starting at the given position.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/io/ByteArrayDataOutput.html" title="interface in com.google.common.io">ByteArrayDataOutput</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/ByteStreams.html#newDataOutput()">newDataOutput</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new <A HREF="../../../../com/google/common/io/ByteArrayDataOutput.html" title="interface in com.google.common.io"><CODE>ByteArrayDataOutput</CODE></A> instance with a default size.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/io/ByteArrayDataOutput.html" title="interface in com.google.common.io">ByteArrayDataOutput</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/ByteStreams.html#newDataOutput(int)">newDataOutput</A></B>(int&nbsp;size)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new <A HREF="../../../../com/google/common/io/ByteArrayDataOutput.html" title="interface in com.google.common.io"><CODE>ByteArrayDataOutput</CODE></A> instance sized to hold
- <code>size</code> bytes before resizing.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ByteArrayInputStream.html?is-external=true" title="class or interface in java.io">ByteArrayInputStream</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/ByteStreams.html#newInputStreamSupplier(byte[])">newInputStreamSupplier</A></B>(byte[]&nbsp;b)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a factory that will supply instances of
- <A HREF="http://java.sun.com/javase/6/docs/api/java/io/ByteArrayInputStream.html?is-external=true" title="class or interface in java.io"><CODE>ByteArrayInputStream</CODE></A> that read from the given byte array.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ByteArrayInputStream.html?is-external=true" title="class or interface in java.io">ByteArrayInputStream</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/ByteStreams.html#newInputStreamSupplier(byte[], int, int)">newInputStreamSupplier</A></B>(byte[]&nbsp;b,
-                       int&nbsp;off,
-                       int&nbsp;len)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a factory that will supply instances of
- <A HREF="http://java.sun.com/javase/6/docs/api/java/io/ByteArrayInputStream.html?is-external=true" title="class or interface in java.io"><CODE>ByteArrayInputStream</CODE></A> that read from the given byte array.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/ByteStreams.html#read(java.io.InputStream, byte[], int, int)">read</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&nbsp;in,
-     byte[]&nbsp;b,
-     int&nbsp;off,
-     int&nbsp;len)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reads some bytes from an input stream and stores them into the buffer array
- <code>b</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; T</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/ByteStreams.html#readBytes(com.google.common.io.InputSupplier, com.google.common.io.ByteProcessor)">readBytes</A></B>(<A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;&nbsp;supplier,
-          <A HREF="../../../../com/google/common/io/ByteProcessor.html" title="interface in com.google.common.io">ByteProcessor</A>&lt;T&gt;&nbsp;processor)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Process the bytes of a supplied stream</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/ByteStreams.html#readFully(java.io.InputStream, byte[])">readFully</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&nbsp;in,
-          byte[]&nbsp;b)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Attempts to read enough bytes from the stream to fill the given byte array,
- with the same behavior as <A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataInput.html?is-external=true#readFully(byte[])" title="class or interface in java.io"><CODE>DataInput.readFully(byte[])</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/ByteStreams.html#readFully(java.io.InputStream, byte[], int, int)">readFully</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&nbsp;in,
-          byte[]&nbsp;b,
-          int&nbsp;off,
-          int&nbsp;len)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Attempts to read <code>len</code> bytes from the stream into the given array
- starting at <code>off</code>, with the same behavior as
- <A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataInput.html?is-external=true#readFully(byte[], int, int)" title="class or interface in java.io"><CODE>DataInput.readFully(byte[], int, int)</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/ByteStreams.html#skipFully(java.io.InputStream, long)">skipFully</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&nbsp;in,
-          long&nbsp;n)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Discards <code>n</code> bytes of data from the input stream.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/ByteStreams.html#slice(com.google.common.io.InputSupplier, long, long)">slice</A></B>(<A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;&nbsp;supplier,
-      long&nbsp;offset,
-      long&nbsp;length)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an <A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io"><CODE>InputSupplier</CODE></A> that returns input streams from the
- an underlying supplier, where each stream starts at the given
- offset and is limited to the specified number of bytes.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;byte[]</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/ByteStreams.html#toByteArray(java.io.InputStream)">toByteArray</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&nbsp;in)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reads all bytes from an input stream into a byte array.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;byte[]</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/ByteStreams.html#toByteArray(com.google.common.io.InputSupplier)">toByteArray</A></B>(<A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;&nbsp;supplier)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the data from a <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io"><CODE>InputStream</CODE></A> factory as a byte array.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/ByteStreams.html#write(byte[], com.google.common.io.OutputSupplier)">write</A></B>(byte[]&nbsp;from,
-      <A HREF="../../../../com/google/common/io/OutputSupplier.html" title="interface in com.google.common.io">OutputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</A>&gt;&nbsp;to)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Writes a byte array to an output stream from the given supplier.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="newInputStreamSupplier(byte[])"><!-- --></A><H3>
-newInputStreamSupplier</H3>
-<PRE>
-public static <A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ByteArrayInputStream.html?is-external=true" title="class or interface in java.io">ByteArrayInputStream</A>&gt; <B>newInputStreamSupplier</B>(byte[]&nbsp;b)</PRE>
-<DL>
-<DD>Returns a factory that will supply instances of
- <A HREF="http://java.sun.com/javase/6/docs/api/java/io/ByteArrayInputStream.html?is-external=true" title="class or interface in java.io"><CODE>ByteArrayInputStream</CODE></A> that read from the given byte array.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>b</CODE> - the input buffer
-<DT><B>Returns:</B><DD>the factory</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="newInputStreamSupplier(byte[], int, int)"><!-- --></A><H3>
-newInputStreamSupplier</H3>
-<PRE>
-public static <A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ByteArrayInputStream.html?is-external=true" title="class or interface in java.io">ByteArrayInputStream</A>&gt; <B>newInputStreamSupplier</B>(byte[]&nbsp;b,
-                                                                         int&nbsp;off,
-                                                                         int&nbsp;len)</PRE>
-<DL>
-<DD>Returns a factory that will supply instances of
- <A HREF="http://java.sun.com/javase/6/docs/api/java/io/ByteArrayInputStream.html?is-external=true" title="class or interface in java.io"><CODE>ByteArrayInputStream</CODE></A> that read from the given byte array.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>b</CODE> - the input buffer<DD><CODE>off</CODE> - the offset in the buffer of the first byte to read<DD><CODE>len</CODE> - the maximum number of bytes to read from the buffer
-<DT><B>Returns:</B><DD>the factory</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="write(byte[], com.google.common.io.OutputSupplier)"><!-- --></A><H3>
-write</H3>
-<PRE>
-public static void <B>write</B>(byte[]&nbsp;from,
-                         <A HREF="../../../../com/google/common/io/OutputSupplier.html" title="interface in com.google.common.io">OutputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</A>&gt;&nbsp;to)
-                  throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Writes a byte array to an output stream from the given supplier.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>from</CODE> - the bytes to write<DD><CODE>to</CODE> - the output supplier
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if an I/O error occurs</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="copy(com.google.common.io.InputSupplier, com.google.common.io.OutputSupplier)"><!-- --></A><H3>
-copy</H3>
-<PRE>
-public static long <B>copy</B>(<A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;&nbsp;from,
-                        <A HREF="../../../../com/google/common/io/OutputSupplier.html" title="interface in com.google.common.io">OutputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</A>&gt;&nbsp;to)
-                 throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Opens input and output streams from the given suppliers, copies all
- bytes from the input to the output, and closes the streams.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>from</CODE> - the input factory<DD><CODE>to</CODE> - the output factory
-<DT><B>Returns:</B><DD>the number of bytes copied
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if an I/O error occurs</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="copy(com.google.common.io.InputSupplier, java.io.OutputStream)"><!-- --></A><H3>
-copy</H3>
-<PRE>
-public static long <B>copy</B>(<A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;&nbsp;from,
-                        <A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</A>&nbsp;to)
-                 throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Opens an input stream from the supplier, copies all bytes from the
- input to the output, and closes the input stream. Does not close
- or flush the output stream.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>from</CODE> - the input factory<DD><CODE>to</CODE> - the output stream to write to
-<DT><B>Returns:</B><DD>the number of bytes copied
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if an I/O error occurs</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="copy(java.io.InputStream, java.io.OutputStream)"><!-- --></A><H3>
-copy</H3>
-<PRE>
-public static long <B>copy</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&nbsp;from,
-                        <A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</A>&nbsp;to)
-                 throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Copies all bytes from the input stream to the output stream.
- Does not close or flush either stream.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>from</CODE> - the input stream to read from<DD><CODE>to</CODE> - the output stream to write to
-<DT><B>Returns:</B><DD>the number of bytes copied
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if an I/O error occurs</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="copy(java.nio.channels.ReadableByteChannel, java.nio.channels.WritableByteChannel)"><!-- --></A><H3>
-copy</H3>
-<PRE>
-public static long <B>copy</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/nio/channels/ReadableByteChannel.html?is-external=true" title="class or interface in java.nio.channels">ReadableByteChannel</A>&nbsp;from,
-                        <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/channels/WritableByteChannel.html?is-external=true" title="class or interface in java.nio.channels">WritableByteChannel</A>&nbsp;to)
-                 throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Copies all bytes from the readable channel to the writable channel.
- Does not close or flush either channel.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>from</CODE> - the readable channel to read from<DD><CODE>to</CODE> - the writable channel to write to
-<DT><B>Returns:</B><DD>the number of bytes copied
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if an I/O error occurs</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toByteArray(java.io.InputStream)"><!-- --></A><H3>
-toByteArray</H3>
-<PRE>
-public static byte[] <B>toByteArray</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&nbsp;in)
-                          throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Reads all bytes from an input stream into a byte array.
- Does not close the stream.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>in</CODE> - the input stream to read from
-<DT><B>Returns:</B><DD>a byte array containing all the bytes from the stream
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if an I/O error occurs</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toByteArray(com.google.common.io.InputSupplier)"><!-- --></A><H3>
-toByteArray</H3>
-<PRE>
-public static byte[] <B>toByteArray</B>(<A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;&nbsp;supplier)
-                          throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Returns the data from a <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io"><CODE>InputStream</CODE></A> factory as a byte array.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>supplier</CODE> - the factory
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if an I/O error occurs</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="newDataInput(byte[])"><!-- --></A><H3>
-newDataInput</H3>
-<PRE>
-public static <A HREF="../../../../com/google/common/io/ByteArrayDataInput.html" title="interface in com.google.common.io">ByteArrayDataInput</A> <B>newDataInput</B>(byte[]&nbsp;bytes)</PRE>
-<DL>
-<DD>Returns a new <A HREF="../../../../com/google/common/io/ByteArrayDataInput.html" title="interface in com.google.common.io"><CODE>ByteArrayDataInput</CODE></A> instance to read from the <code>bytes</code> array from the beginning.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="newDataInput(byte[], int)"><!-- --></A><H3>
-newDataInput</H3>
-<PRE>
-public static <A HREF="../../../../com/google/common/io/ByteArrayDataInput.html" title="interface in com.google.common.io">ByteArrayDataInput</A> <B>newDataInput</B>(byte[]&nbsp;bytes,
-                                              int&nbsp;start)</PRE>
-<DL>
-<DD>Returns a new <A HREF="../../../../com/google/common/io/ByteArrayDataInput.html" title="interface in com.google.common.io"><CODE>ByteArrayDataInput</CODE></A> instance to read from the <code>bytes</code> array, starting at the given position.
-<P>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IndexOutOfBoundsException.html?is-external=true" title="class or interface in java.lang">IndexOutOfBoundsException</A></CODE> - if <code>start</code> is negative or greater
-     than the length of the array</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="newDataOutput()"><!-- --></A><H3>
-newDataOutput</H3>
-<PRE>
-public static <A HREF="../../../../com/google/common/io/ByteArrayDataOutput.html" title="interface in com.google.common.io">ByteArrayDataOutput</A> <B>newDataOutput</B>()</PRE>
-<DL>
-<DD>Returns a new <A HREF="../../../../com/google/common/io/ByteArrayDataOutput.html" title="interface in com.google.common.io"><CODE>ByteArrayDataOutput</CODE></A> instance with a default size.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="newDataOutput(int)"><!-- --></A><H3>
-newDataOutput</H3>
-<PRE>
-public static <A HREF="../../../../com/google/common/io/ByteArrayDataOutput.html" title="interface in com.google.common.io">ByteArrayDataOutput</A> <B>newDataOutput</B>(int&nbsp;size)</PRE>
-<DL>
-<DD>Returns a new <A HREF="../../../../com/google/common/io/ByteArrayDataOutput.html" title="interface in com.google.common.io"><CODE>ByteArrayDataOutput</CODE></A> instance sized to hold
- <code>size</code> bytes before resizing.
-<P>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>size</code> is negative</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="length(com.google.common.io.InputSupplier)"><!-- --></A><H3>
-length</H3>
-<PRE>
-public static long <B>length</B>(<A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;&nbsp;supplier)
-                   throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Returns the length of a supplied input stream, in bytes.
-<P>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="equal(com.google.common.io.InputSupplier, com.google.common.io.InputSupplier)"><!-- --></A><H3>
-equal</H3>
-<PRE>
-public static boolean <B>equal</B>(<A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;&nbsp;supplier1,
-                            <A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;&nbsp;supplier2)
-                     throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Returns true if the supplied input streams contain the same bytes.
-<P>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if an I/O error occurs</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="readFully(java.io.InputStream, byte[])"><!-- --></A><H3>
-readFully</H3>
-<PRE>
-public static void <B>readFully</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&nbsp;in,
-                             byte[]&nbsp;b)
-                      throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Attempts to read enough bytes from the stream to fill the given byte array,
- with the same behavior as <A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataInput.html?is-external=true#readFully(byte[])" title="class or interface in java.io"><CODE>DataInput.readFully(byte[])</CODE></A>.
- Does not close the stream.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>in</CODE> - the input stream to read from.<DD><CODE>b</CODE> - the buffer into which the data is read.
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/EOFException.html?is-external=true" title="class or interface in java.io">EOFException</A></CODE> - if this stream reaches the end before reading all
-     the bytes.
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if an I/O error occurs.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="readFully(java.io.InputStream, byte[], int, int)"><!-- --></A><H3>
-readFully</H3>
-<PRE>
-public static void <B>readFully</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&nbsp;in,
-                             byte[]&nbsp;b,
-                             int&nbsp;off,
-                             int&nbsp;len)
-                      throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Attempts to read <code>len</code> bytes from the stream into the given array
- starting at <code>off</code>, with the same behavior as
- <A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataInput.html?is-external=true#readFully(byte[], int, int)" title="class or interface in java.io"><CODE>DataInput.readFully(byte[], int, int)</CODE></A>. Does not close the
- stream.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>in</CODE> - the input stream to read from.<DD><CODE>b</CODE> - the buffer into which the data is read.<DD><CODE>off</CODE> - an int specifying the offset into the data.<DD><CODE>len</CODE> - an int specifying the number of bytes to read.
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/EOFException.html?is-external=true" title="class or interface in java.io">EOFException</A></CODE> - if this stream reaches the end before reading all
-     the bytes.
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if an I/O error occurs.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="skipFully(java.io.InputStream, long)"><!-- --></A><H3>
-skipFully</H3>
-<PRE>
-public static void <B>skipFully</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&nbsp;in,
-                             long&nbsp;n)
-                      throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Discards <code>n</code> bytes of data from the input stream. This method
- will block until the full amount has been skipped. Does not close the
- stream.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>in</CODE> - the input stream to read from<DD><CODE>n</CODE> - the number of bytes to skip
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/EOFException.html?is-external=true" title="class or interface in java.io">EOFException</A></CODE> - if this stream reaches the end before skipping all
-     the bytes
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if an I/O error occurs, or the stream does not
-     support skipping</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="readBytes(com.google.common.io.InputSupplier, com.google.common.io.ByteProcessor)"><!-- --></A><H3>
-readBytes</H3>
-<PRE>
-public static &lt;T&gt; T <B>readBytes</B>(<A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;&nbsp;supplier,
-                              <A HREF="../../../../com/google/common/io/ByteProcessor.html" title="interface in com.google.common.io">ByteProcessor</A>&lt;T&gt;&nbsp;processor)
-                   throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Process the bytes of a supplied stream
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>supplier</CODE> - the input stream factory<DD><CODE>processor</CODE> - the object to which to pass the bytes of the stream
-<DT><B>Returns:</B><DD>the result of the byte processor
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if an I/O error occurs</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getChecksum(com.google.common.io.InputSupplier, java.util.zip.Checksum)"><!-- --></A><H3>
-getChecksum</H3>
-<PRE>
-public static long <B>getChecksum</B>(<A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;&nbsp;supplier,
-                               <A HREF="http://java.sun.com/javase/6/docs/api/java/util/zip/Checksum.html?is-external=true" title="class or interface in java.util.zip">Checksum</A>&nbsp;checksum)
-                        throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Computes and returns the checksum value for a supplied input stream.
- The checksum object is reset when this method returns successfully.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>supplier</CODE> - the input stream factory<DD><CODE>checksum</CODE> - the checksum object
-<DT><B>Returns:</B><DD>the result of <A HREF="http://java.sun.com/javase/6/docs/api/java/util/zip/Checksum.html?is-external=true#getValue()" title="class or interface in java.util.zip"><CODE>Checksum.getValue()</CODE></A> after updating the
-     checksum object with all of the bytes in the stream
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if an I/O error occurs</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getDigest(com.google.common.io.InputSupplier, java.security.MessageDigest)"><!-- --></A><H3>
-getDigest</H3>
-<PRE>
-public static byte[] <B>getDigest</B>(<A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;&nbsp;supplier,
-                               <A HREF="http://java.sun.com/javase/6/docs/api/java/security/MessageDigest.html?is-external=true" title="class or interface in java.security">MessageDigest</A>&nbsp;md)
-                        throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Computes and returns the digest value for a supplied input stream.
- The digest object is reset when this method returns successfully.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>supplier</CODE> - the input stream factory<DD><CODE>md</CODE> - the digest object
-<DT><B>Returns:</B><DD>the result of <A HREF="http://java.sun.com/javase/6/docs/api/java/security/MessageDigest.html?is-external=true#digest()" title="class or interface in java.security"><CODE>MessageDigest.digest()</CODE></A> after updating the
-     digest object with all of the bytes in the stream
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if an I/O error occurs</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="read(java.io.InputStream, byte[], int, int)"><!-- --></A><H3>
-read</H3>
-<PRE>
-public static int <B>read</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&nbsp;in,
-                       byte[]&nbsp;b,
-                       int&nbsp;off,
-                       int&nbsp;len)
-                throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Reads some bytes from an input stream and stores them into the buffer array
- <code>b</code>. This method blocks until <code>len</code> bytes of input data have
- been read into the array, or end of file is detected. The number of bytes
- read is returned, possibly zero. Does not close the stream.
-
- <p>A caller can detect EOF if the number of bytes read is less than
- <code>len</code>. All subsequent calls on the same stream will return zero.
-
- <p>If <code>b</code> is null, a <code>NullPointerException</code> is thrown. If
- <code>off</code> is negative, or <code>len</code> is negative, or <code>off+len</code> is
- greater than the length of the array <code>b</code>, then an
- <code>IndexOutOfBoundsException</code> is thrown. If <code>len</code> is zero, then
- no bytes are read. Otherwise, the first byte read is stored into element
- <code>b[off]</code>, the next one into <code>b[off+1]</code>, and so on. The number
- of bytes read is, at most, equal to <code>len</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>in</CODE> - the input stream to read from<DD><CODE>b</CODE> - the buffer into which the data is read<DD><CODE>off</CODE> - an int specifying the offset into the data<DD><CODE>len</CODE> - an int specifying the number of bytes to read
-<DT><B>Returns:</B><DD>the number of bytes read
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if an I/O error occurs</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="slice(com.google.common.io.InputSupplier, long, long)"><!-- --></A><H3>
-slice</H3>
-<PRE>
-public static <A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt; <B>slice</B>(<A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;&nbsp;supplier,
-                                               long&nbsp;offset,
-                                               long&nbsp;length)</PRE>
-<DL>
-<DD>Returns an <A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io"><CODE>InputSupplier</CODE></A> that returns input streams from the
- an underlying supplier, where each stream starts at the given
- offset and is limited to the specified number of bytes.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>supplier</CODE> - the supplier from which to get the raw streams<DD><CODE>offset</CODE> - the offset in bytes into the underlying stream where
-     the returned streams will start<DD><CODE>length</CODE> - the maximum length of the returned streams
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if offset or length are negative</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="join(java.lang.Iterable)"><!-- --></A><H3>
-join</H3>
-<PRE>
-public static <A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt; <B>join</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;&gt;&nbsp;suppliers)</PRE>
-<DL>
-<DD>Joins multiple <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io"><CODE>InputStream</CODE></A> suppliers into a single supplier.
- Streams returned from the supplier will contain the concatenated data from
- the streams of the underlying suppliers.
-
- <p>Only one underlying input stream will be open at a time. Closing the
- joined stream will close the open underlying stream.
-
- <p>Reading from the joined stream will throw a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang"><CODE>NullPointerException</CODE></A>
- if any of the suppliers are null or return null.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>suppliers</CODE> - the suppliers to concatenate
-<DT><B>Returns:</B><DD>a supplier that will return a stream containing the concatenated
-     stream data</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="join(com.google.common.io.InputSupplier...)"><!-- --></A><H3>
-join</H3>
-<PRE>
-public static <A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt; <B>join</B>(<A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;...&nbsp;suppliers)</PRE>
-<DL>
-<DD>Varargs form of <A HREF="../../../../com/google/common/io/ByteStreams.html#join(java.lang.Iterable)"><CODE>join(Iterable)</CODE></A>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ByteStreams.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/io/ByteProcessor.html" title="interface in com.google.common.io"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/io/CharStreams.html" title="class in com.google.common.io"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/io/ByteStreams.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ByteStreams.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/io/CharStreams.html b/javadoc/com/google/common/io/CharStreams.html
deleted file mode 100644
index 44acefe..0000000
--- a/javadoc/com/google/common/io/CharStreams.html
+++ /dev/null
@@ -1,752 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:59 PST 2010 -->
-<TITLE>
-CharStreams (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="CharStreams (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/CharStreams.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/io/ByteStreams.html" title="class in com.google.common.io"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/io/Closeables.html" title="class in com.google.common.io"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/io/CharStreams.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="CharStreams.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.io</FONT>
-<BR>
-Class CharStreams</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.io.CharStreams</B>
-</PRE>
-<HR>
-<DL>
-<DT><PRE>public final class <B>CharStreams</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
-</PRE>
-
-<P>
-Provides utility methods for working with character streams.
-
- <p>All method parameters must be non-null unless documented otherwise.
-
- <p>Some of the methods in this class take arguments with a generic type of
- <code>Readable &amp; Closeable</code>. A <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Reader.html?is-external=true" title="class or interface in java.io"><CODE>Reader</CODE></A> implements both of
- those interfaces. Similarly for <code>Appendable &amp; Closeable</code> and
- <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Writer.html?is-external=true" title="class or interface in java.io"><CODE>Writer</CODE></A>.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2009.09.15 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Chris Nokleberg, Bin Zhu</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/Writer.html?is-external=true" title="class or interface in java.io">Writer</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/CharStreams.html#asWriter(java.lang.Appendable)">asWriter</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang">Appendable</A>&nbsp;target)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a Writer that sends all output to the given <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang"><CODE>Appendable</CODE></A>
- target.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;R extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang">Readable</A> & <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</A>&gt; 
-<BR>
-long</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/CharStreams.html#copy(com.google.common.io.InputSupplier, java.lang.Appendable)">copy</A></B>(<A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;R&gt;&nbsp;from,
-     <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang">Appendable</A>&nbsp;to)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Opens a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang"><CODE>Readable</CODE></A> object from the supplier, copies all characters
- to the <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang"><CODE>Appendable</CODE></A> object, and closes the input.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;R extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang">Readable</A> & <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</A>,W extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang">Appendable</A> & <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</A>&gt; 
-<BR>
-long</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/CharStreams.html#copy(com.google.common.io.InputSupplier, com.google.common.io.OutputSupplier)">copy</A></B>(<A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;R&gt;&nbsp;from,
-     <A HREF="../../../../com/google/common/io/OutputSupplier.html" title="interface in com.google.common.io">OutputSupplier</A>&lt;W&gt;&nbsp;to)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Opens <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang"><CODE>Readable</CODE></A> and <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang"><CODE>Appendable</CODE></A> objects from the
- given factories, copies all characters between the two, and closes
- them.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;long</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/CharStreams.html#copy(java.lang.Readable, java.lang.Appendable)">copy</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang">Readable</A>&nbsp;from,
-     <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang">Appendable</A>&nbsp;to)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies all characters between the <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang"><CODE>Readable</CODE></A> and <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang"><CODE>Appendable</CODE></A>
- objects.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/Reader.html?is-external=true" title="class or interface in java.io">Reader</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/CharStreams.html#join(com.google.common.io.InputSupplier...)">join</A></B>(<A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Reader.html?is-external=true" title="class or interface in java.io">Reader</A>&gt;...&nbsp;suppliers)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Varargs form of <A HREF="../../../../com/google/common/io/CharStreams.html#join(java.lang.Iterable)"><CODE>join(Iterable)</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/Reader.html?is-external=true" title="class or interface in java.io">Reader</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/CharStreams.html#join(java.lang.Iterable)">join</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Reader.html?is-external=true" title="class or interface in java.io">Reader</A>&gt;&gt;&nbsp;suppliers)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Joins multiple <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Reader.html?is-external=true" title="class or interface in java.io"><CODE>Reader</CODE></A> suppliers into a single supplier.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStreamReader.html?is-external=true" title="class or interface in java.io">InputStreamReader</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/CharStreams.html#newReaderSupplier(com.google.common.io.InputSupplier, java.nio.charset.Charset)">newReaderSupplier</A></B>(<A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;&nbsp;in,
-                  <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A>&nbsp;charset)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a factory that will supply instances of <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStreamReader.html?is-external=true" title="class or interface in java.io"><CODE>InputStreamReader</CODE></A>,
- using the given <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io"><CODE>InputStream</CODE></A> factory and character set.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/StringReader.html?is-external=true" title="class or interface in java.io">StringReader</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/CharStreams.html#newReaderSupplier(java.lang.String)">newReaderSupplier</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a factory that will supply instances of <A HREF="http://java.sun.com/javase/6/docs/api/java/io/StringReader.html?is-external=true" title="class or interface in java.io"><CODE>StringReader</CODE></A> that
- read a string value.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/io/OutputSupplier.html" title="interface in com.google.common.io">OutputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStreamWriter.html?is-external=true" title="class or interface in java.io">OutputStreamWriter</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/CharStreams.html#newWriterSupplier(com.google.common.io.OutputSupplier, java.nio.charset.Charset)">newWriterSupplier</A></B>(<A HREF="../../../../com/google/common/io/OutputSupplier.html" title="interface in com.google.common.io">OutputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</A>&gt;&nbsp;out,
-                  <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A>&nbsp;charset)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a factory that will supply instances of <A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStreamWriter.html?is-external=true" title="class or interface in java.io"><CODE>OutputStreamWriter</CODE></A>,
- using the given <A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io"><CODE>OutputStream</CODE></A> factory and character set.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;R extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang">Readable</A> & <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</A>&gt; 
-<BR>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/CharStreams.html#readFirstLine(com.google.common.io.InputSupplier)">readFirstLine</A></B>(<A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;R&gt;&nbsp;supplier)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reads the first line from a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang"><CODE>Readable</CODE></A> & <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io"><CODE>Closeable</CODE></A> object
- supplied by a factory.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;R extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang">Readable</A> & <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</A>&gt; 
-<BR>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/CharStreams.html#readLines(com.google.common.io.InputSupplier)">readLines</A></B>(<A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;R&gt;&nbsp;supplier)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reads all of the lines from a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang"><CODE>Readable</CODE></A> & <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io"><CODE>Closeable</CODE></A> object
- supplied by a factory.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;R extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang">Readable</A> & <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</A>,T&gt; 
-<BR>
-T</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/CharStreams.html#readLines(com.google.common.io.InputSupplier, com.google.common.io.LineProcessor)">readLines</A></B>(<A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;R&gt;&nbsp;supplier,
-          <A HREF="../../../../com/google/common/io/LineProcessor.html" title="interface in com.google.common.io">LineProcessor</A>&lt;T&gt;&nbsp;callback)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Streams lines from a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang"><CODE>Readable</CODE></A> and <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io"><CODE>Closeable</CODE></A> object
- supplied by a factory, stopping when our callback returns false, or we
- have read all of the lines.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/CharStreams.html#readLines(java.lang.Readable)">readLines</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang">Readable</A>&nbsp;r)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reads all of the lines from a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang"><CODE>Readable</CODE></A> object.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/CharStreams.html#skipFully(java.io.Reader, long)">skipFully</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/Reader.html?is-external=true" title="class or interface in java.io">Reader</A>&nbsp;reader,
-          long&nbsp;n)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Discards <code>n</code> characters of data from the reader.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;R extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang">Readable</A> & <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</A>&gt; 
-<BR>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/CharStreams.html#toString(com.google.common.io.InputSupplier)">toString</A></B>(<A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;R&gt;&nbsp;supplier)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the characters from a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang"><CODE>Readable</CODE></A> & <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io"><CODE>Closeable</CODE></A> object
- supplied by a factory as a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang"><CODE>String</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/CharStreams.html#toString(java.lang.Readable)">toString</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang">Readable</A>&nbsp;r)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reads all characters from a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang"><CODE>Readable</CODE></A> object into a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang"><CODE>String</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;W extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang">Appendable</A> & <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</A>&gt; 
-<BR>
-void</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/CharStreams.html#write(java.lang.CharSequence, com.google.common.io.OutputSupplier)">write</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang">CharSequence</A>&nbsp;from,
-      <A HREF="../../../../com/google/common/io/OutputSupplier.html" title="interface in com.google.common.io">OutputSupplier</A>&lt;W&gt;&nbsp;to)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Writes a character sequence (such as a string) to an appendable
- object from the given supplier.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="newReaderSupplier(java.lang.String)"><!-- --></A><H3>
-newReaderSupplier</H3>
-<PRE>
-public static <A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/StringReader.html?is-external=true" title="class or interface in java.io">StringReader</A>&gt; <B>newReaderSupplier</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;value)</PRE>
-<DL>
-<DD>Returns a factory that will supply instances of <A HREF="http://java.sun.com/javase/6/docs/api/java/io/StringReader.html?is-external=true" title="class or interface in java.io"><CODE>StringReader</CODE></A> that
- read a string value.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>value</CODE> - the string to read
-<DT><B>Returns:</B><DD>the factory</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="newReaderSupplier(com.google.common.io.InputSupplier, java.nio.charset.Charset)"><!-- --></A><H3>
-newReaderSupplier</H3>
-<PRE>
-public static <A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStreamReader.html?is-external=true" title="class or interface in java.io">InputStreamReader</A>&gt; <B>newReaderSupplier</B>(<A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;&nbsp;in,
-                                                                 <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A>&nbsp;charset)</PRE>
-<DL>
-<DD>Returns a factory that will supply instances of <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStreamReader.html?is-external=true" title="class or interface in java.io"><CODE>InputStreamReader</CODE></A>,
- using the given <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io"><CODE>InputStream</CODE></A> factory and character set.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>in</CODE> - the factory that will be used to open input streams<DD><CODE>charset</CODE> - the character set used to decode the input stream
-<DT><B>Returns:</B><DD>the factory</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="newWriterSupplier(com.google.common.io.OutputSupplier, java.nio.charset.Charset)"><!-- --></A><H3>
-newWriterSupplier</H3>
-<PRE>
-public static <A HREF="../../../../com/google/common/io/OutputSupplier.html" title="interface in com.google.common.io">OutputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStreamWriter.html?is-external=true" title="class or interface in java.io">OutputStreamWriter</A>&gt; <B>newWriterSupplier</B>(<A HREF="../../../../com/google/common/io/OutputSupplier.html" title="interface in com.google.common.io">OutputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</A>&gt;&nbsp;out,
-                                                                   <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A>&nbsp;charset)</PRE>
-<DL>
-<DD>Returns a factory that will supply instances of <A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStreamWriter.html?is-external=true" title="class or interface in java.io"><CODE>OutputStreamWriter</CODE></A>,
- using the given <A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io"><CODE>OutputStream</CODE></A> factory and character set.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>out</CODE> - the factory that will be used to open output streams<DD><CODE>charset</CODE> - the character set used to encode the output stream
-<DT><B>Returns:</B><DD>the factory</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="write(java.lang.CharSequence, com.google.common.io.OutputSupplier)"><!-- --></A><H3>
-write</H3>
-<PRE>
-public static &lt;W extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang">Appendable</A> & <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</A>&gt; void <B>write</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang">CharSequence</A>&nbsp;from,
-                                                           <A HREF="../../../../com/google/common/io/OutputSupplier.html" title="interface in com.google.common.io">OutputSupplier</A>&lt;W&gt;&nbsp;to)
-                  throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Writes a character sequence (such as a string) to an appendable
- object from the given supplier.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>from</CODE> - the character sequence to write<DD><CODE>to</CODE> - the output supplier
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if an I/O error occurs</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="copy(com.google.common.io.InputSupplier, com.google.common.io.OutputSupplier)"><!-- --></A><H3>
-copy</H3>
-<PRE>
-public static &lt;R extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang">Readable</A> & <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</A>,W extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang">Appendable</A> & <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</A>&gt; long <B>copy</B>(<A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;R&gt;&nbsp;from,
-                                                                                        <A HREF="../../../../com/google/common/io/OutputSupplier.html" title="interface in com.google.common.io">OutputSupplier</A>&lt;W&gt;&nbsp;to)
-                 throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Opens <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang"><CODE>Readable</CODE></A> and <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang"><CODE>Appendable</CODE></A> objects from the
- given factories, copies all characters between the two, and closes
- them.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>from</CODE> - the input factory<DD><CODE>to</CODE> - the output factory
-<DT><B>Returns:</B><DD>the number of characters copied
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if an I/O error occurs</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="copy(com.google.common.io.InputSupplier, java.lang.Appendable)"><!-- --></A><H3>
-copy</H3>
-<PRE>
-public static &lt;R extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang">Readable</A> & <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</A>&gt; long <B>copy</B>(<A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;R&gt;&nbsp;from,
-                                                        <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang">Appendable</A>&nbsp;to)
-                 throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Opens a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang"><CODE>Readable</CODE></A> object from the supplier, copies all characters
- to the <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang"><CODE>Appendable</CODE></A> object, and closes the input. Does not close
- or flush the output.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>from</CODE> - the input factory<DD><CODE>to</CODE> - the object to write to
-<DT><B>Returns:</B><DD>the number of characters copied
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if an I/O error occurs</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="copy(java.lang.Readable, java.lang.Appendable)"><!-- --></A><H3>
-copy</H3>
-<PRE>
-public static long <B>copy</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang">Readable</A>&nbsp;from,
-                        <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang">Appendable</A>&nbsp;to)
-                 throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Copies all characters between the <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang"><CODE>Readable</CODE></A> and <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang"><CODE>Appendable</CODE></A>
- objects. Does not close or flush either object.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>from</CODE> - the object to read from<DD><CODE>to</CODE> - the object to write to
-<DT><B>Returns:</B><DD>the number of characters copied
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if an I/O error occurs</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toString(java.lang.Readable)"><!-- --></A><H3>
-toString</H3>
-<PRE>
-public static <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>toString</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang">Readable</A>&nbsp;r)
-                       throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Reads all characters from a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang"><CODE>Readable</CODE></A> object into a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang"><CODE>String</CODE></A>.
- Does not close the <code>Readable</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>r</CODE> - the object to read from
-<DT><B>Returns:</B><DD>a string containing all the characters
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if an I/O error occurs</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toString(com.google.common.io.InputSupplier)"><!-- --></A><H3>
-toString</H3>
-<PRE>
-public static &lt;R extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang">Readable</A> & <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</A>&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>toString</B>(<A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;R&gt;&nbsp;supplier)
-                       throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Returns the characters from a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang"><CODE>Readable</CODE></A> & <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io"><CODE>Closeable</CODE></A> object
- supplied by a factory as a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang"><CODE>String</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>supplier</CODE> - the factory to read from
-<DT><B>Returns:</B><DD>a string containing all the characters
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if an I/O error occurs</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="readFirstLine(com.google.common.io.InputSupplier)"><!-- --></A><H3>
-readFirstLine</H3>
-<PRE>
-public static &lt;R extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang">Readable</A> & <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</A>&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>readFirstLine</B>(<A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;R&gt;&nbsp;supplier)
-                            throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Reads the first line from a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang"><CODE>Readable</CODE></A> & <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io"><CODE>Closeable</CODE></A> object
- supplied by a factory. The line does not include line-termination
- characters, but does include other leading and trailing whitespace.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>supplier</CODE> - the factory to read from
-<DT><B>Returns:</B><DD>the first line, or null if the reader is empty
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if an I/O error occurs</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="readLines(com.google.common.io.InputSupplier)"><!-- --></A><H3>
-readLines</H3>
-<PRE>
-public static &lt;R extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang">Readable</A> & <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</A>&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&gt; <B>readLines</B>(<A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;R&gt;&nbsp;supplier)
-                              throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Reads all of the lines from a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang"><CODE>Readable</CODE></A> & <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io"><CODE>Closeable</CODE></A> object
- supplied by a factory. The lines do not include line-termination
- characters, but do include other leading and trailing whitespace.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>supplier</CODE> - the factory to read from
-<DT><B>Returns:</B><DD>a mutable <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util"><CODE>List</CODE></A> containing all the lines
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if an I/O error occurs</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="readLines(java.lang.Readable)"><!-- --></A><H3>
-readLines</H3>
-<PRE>
-public static <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&gt; <B>readLines</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang">Readable</A>&nbsp;r)
-                              throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Reads all of the lines from a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang"><CODE>Readable</CODE></A> object. The lines do
- not include line-termination characters, but do include other
- leading and trailing whitespace.
-
- <p>Does not close the <code>Readable</code>. If reading files or resources you
- should use the <A HREF="../../../../com/google/common/io/Files.html#readLines(java.io.File, java.nio.charset.Charset)"><CODE>Files.readLines(java.io.File, java.nio.charset.Charset)</CODE></A> and <A HREF="../../../../com/google/common/io/Resources.html#readLines(java.net.URL, java.nio.charset.Charset, com.google.common.io.LineProcessor)"><CODE>Resources.readLines(java.net.URL, java.nio.charset.Charset, com.google.common.io.LineProcessor<T>)</CODE></A>
- methods.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>r</CODE> - the object to read from
-<DT><B>Returns:</B><DD>a mutable <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util"><CODE>List</CODE></A> containing all the lines
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if an I/O error occurs</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="readLines(com.google.common.io.InputSupplier, com.google.common.io.LineProcessor)"><!-- --></A><H3>
-readLines</H3>
-<PRE>
-public static &lt;R extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang">Readable</A> & <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</A>,T&gt; T <B>readLines</B>(<A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;R&gt;&nbsp;supplier,
-                                                            <A HREF="../../../../com/google/common/io/LineProcessor.html" title="interface in com.google.common.io">LineProcessor</A>&lt;T&gt;&nbsp;callback)
-                   throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Streams lines from a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang"><CODE>Readable</CODE></A> and <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io"><CODE>Closeable</CODE></A> object
- supplied by a factory, stopping when our callback returns false, or we
- have read all of the lines.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>supplier</CODE> - the factory to read from<DD><CODE>callback</CODE> - the LineProcessor to use to handle the lines
-<DT><B>Returns:</B><DD>the output of processing the lines
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if an I/O error occurs</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="join(java.lang.Iterable)"><!-- --></A><H3>
-join</H3>
-<PRE>
-public static <A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/Reader.html?is-external=true" title="class or interface in java.io">Reader</A>&gt; <B>join</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Reader.html?is-external=true" title="class or interface in java.io">Reader</A>&gt;&gt;&nbsp;suppliers)</PRE>
-<DL>
-<DD>Joins multiple <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Reader.html?is-external=true" title="class or interface in java.io"><CODE>Reader</CODE></A> suppliers into a single supplier.
- Reader returned from the supplier will contain the concatenated data
- from the readers of the underlying suppliers.
-
- <p>Reading from the joined reader will throw a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang"><CODE>NullPointerException</CODE></A>
- if any of the suppliers are null or return null.
-
- <p>Only one underlying reader will be open at a time. Closing the
- joined reader will close the open underlying reader.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>suppliers</CODE> - the suppliers to concatenate
-<DT><B>Returns:</B><DD>a supplier that will return a reader containing the concatenated
-     data</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="join(com.google.common.io.InputSupplier...)"><!-- --></A><H3>
-join</H3>
-<PRE>
-public static <A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/Reader.html?is-external=true" title="class or interface in java.io">Reader</A>&gt; <B>join</B>(<A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Reader.html?is-external=true" title="class or interface in java.io">Reader</A>&gt;...&nbsp;suppliers)</PRE>
-<DL>
-<DD>Varargs form of <A HREF="../../../../com/google/common/io/CharStreams.html#join(java.lang.Iterable)"><CODE>join(Iterable)</CODE></A>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="skipFully(java.io.Reader, long)"><!-- --></A><H3>
-skipFully</H3>
-<PRE>
-public static void <B>skipFully</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/Reader.html?is-external=true" title="class or interface in java.io">Reader</A>&nbsp;reader,
-                             long&nbsp;n)
-                      throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Discards <code>n</code> characters of data from the reader. This method
- will block until the full amount has been skipped. Does not close the
- reader.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>reader</CODE> - the reader to read from<DD><CODE>n</CODE> - the number of characters to skip
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/EOFException.html?is-external=true" title="class or interface in java.io">EOFException</A></CODE> - if this stream reaches the end before skipping all
-     the bytes
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if an I/O error occurs</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="asWriter(java.lang.Appendable)"><!-- --></A><H3>
-asWriter</H3>
-<PRE>
-public static <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Writer.html?is-external=true" title="class or interface in java.io">Writer</A> <B>asWriter</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang">Appendable</A>&nbsp;target)</PRE>
-<DL>
-<DD>Returns a Writer that sends all output to the given <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang"><CODE>Appendable</CODE></A>
- target. Closing the writer will close the target if it is <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io"><CODE>Closeable</CODE></A>, and flushing the writer will flush the target if it is <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Flushable.html?is-external=true" title="class or interface in java.io"><CODE>Flushable</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>target</CODE> - the object to which output will be sent
-<DT><B>Returns:</B><DD>a new Writer object, unless target is a Writer, in which case the
-     target is returned</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/CharStreams.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/io/ByteStreams.html" title="class in com.google.common.io"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/io/Closeables.html" title="class in com.google.common.io"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/io/CharStreams.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="CharStreams.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/io/Closeables.html b/javadoc/com/google/common/io/Closeables.html
deleted file mode 100644
index d372001..0000000
--- a/javadoc/com/google/common/io/Closeables.html
+++ /dev/null
@@ -1,288 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:59 PST 2010 -->
-<TITLE>
-Closeables (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Closeables (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Closeables.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/io/CharStreams.html" title="class in com.google.common.io"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/io/CountingInputStream.html" title="class in com.google.common.io"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/io/Closeables.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Closeables.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.io</FONT>
-<BR>
-Class Closeables</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.io.Closeables</B>
-</PRE>
-<HR>
-<DL>
-<DT><PRE>public final class <B>Closeables</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
-</PRE>
-
-<P>
-Utility methods for working with <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io"><CODE>Closeable</CODE></A> objects.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2009.09.15 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Michael Lancaster</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/Closeables.html#close(java.io.Closeable, boolean)">close</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</A>&nbsp;closeable,
-      boolean&nbsp;swallowIOException)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Closes a <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io"><CODE>Closeable</CODE></A>, with control over whether an
- <code>IOException</code> may be thrown.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/Closeables.html#closeQuietly(java.io.Closeable)">closeQuietly</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</A>&nbsp;closeable)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Equivalent to calling <code>close(closeable, true)</code>, but with no
- IOException in the signature.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="close(java.io.Closeable, boolean)"><!-- --></A><H3>
-close</H3>
-<PRE>
-public static void <B>close</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                         <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</A>&nbsp;closeable,
-                         boolean&nbsp;swallowIOException)
-                  throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Closes a <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io"><CODE>Closeable</CODE></A>, with control over whether an
- <code>IOException</code> may be thrown. This is primarily useful in a
- finally block, where a thrown exception needs to be logged but not
- propagated (otherwise the original exception will be lost).
-
- <p>If <code>swallowIOException</code> is true then we never throw
- <code>IOException</code> but merely log it.
-
- <p>Example:
-
- <p><pre>public void useStreamNicely() throws IOException {
- SomeStream stream = new SomeStream("foo");
- boolean threw = true;
- try {
-   // Some code which does something with the Stream. May throw a
-   // Throwable.
-   threw = false; // No throwable thrown.
- } finally {
-   // Close the stream.
-   // If an exception occurs, only rethrow it if (threw==false).
-   Closeables.close(stream, threw);
- }
- </pre>
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>closeable</CODE> - the <code>Closeable</code> object to be closed, or null,
-     in which case this method does nothing<DD><CODE>swallowIOException</CODE> - if true, don't propagate IO exceptions
-     thrown by the <code>close</code> methods
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if <code>swallowIOException</code> is false and
-     <code>close</code> throws an <code>IOException</code>.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="closeQuietly(java.io.Closeable)"><!-- --></A><H3>
-closeQuietly</H3>
-<PRE>
-public static void <B>closeQuietly</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                                <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</A>&nbsp;closeable)</PRE>
-<DL>
-<DD>Equivalent to calling <code>close(closeable, true)</code>, but with no
- IOException in the signature.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>closeable</CODE> - the <code>Closeable</code> object to be closed, or null, in
-      which case this method does nothing</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Closeables.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/io/CharStreams.html" title="class in com.google.common.io"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/io/CountingInputStream.html" title="class in com.google.common.io"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/io/Closeables.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Closeables.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/io/CountingInputStream.html b/javadoc/com/google/common/io/CountingInputStream.html
deleted file mode 100644
index c89909f..0000000
--- a/javadoc/com/google/common/io/CountingInputStream.html
+++ /dev/null
@@ -1,426 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:59 PST 2010 -->
-<TITLE>
-CountingInputStream (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="CountingInputStream (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/CountingInputStream.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/io/Closeables.html" title="class in com.google.common.io"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/io/CountingOutputStream.html" title="class in com.google.common.io"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/io/CountingInputStream.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="CountingInputStream.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_java.io.FilterInputStream">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.io</FONT>
-<BR>
-Class CountingInputStream</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">java.io.InputStream</A>
-      <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilterInputStream.html?is-external=true" title="class or interface in java.io">java.io.FilterInputStream</A>
-          <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.io.CountingInputStream</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public class <B>CountingInputStream</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilterInputStream.html?is-external=true" title="class or interface in java.io">FilterInputStream</A></DL>
-</PRE>
-
-<P>
-An <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io"><CODE>InputStream</CODE></A> that counts the number of bytes read.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2009.09.15 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Chris Nokleberg</DD>
-</DL>
-<HR>
-
-<P>
-<!-- =========== FIELD SUMMARY =========== -->
-
-<A NAME="field_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Field Summary</B></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;<A NAME="fields_inherited_from_class_java.io.FilterInputStream"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Fields inherited from class java.io.<A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilterInputStream.html?is-external=true" title="class or interface in java.io">FilterInputStream</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilterInputStream.html?is-external=true#in" title="class or interface in java.io">in</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/google/common/io/CountingInputStream.html#CountingInputStream(java.io.InputStream)">CountingInputStream</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&nbsp;in)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Wraps another input stream, counting the number of bytes read.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;long</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/CountingInputStream.html#getCount()">getCount</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of bytes read.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/CountingInputStream.html#mark(int)">mark</A></B>(int&nbsp;readlimit)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/CountingInputStream.html#read()">read</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/CountingInputStream.html#read(byte[], int, int)">read</A></B>(byte[]&nbsp;b,
-     int&nbsp;off,
-     int&nbsp;len)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/CountingInputStream.html#reset()">reset</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;long</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/CountingInputStream.html#skip(long)">skip</A></B>(long&nbsp;n)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.io.FilterInputStream"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.io.<A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilterInputStream.html?is-external=true" title="class or interface in java.io">FilterInputStream</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilterInputStream.html?is-external=true#available()" title="class or interface in java.io">available</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilterInputStream.html?is-external=true#close()" title="class or interface in java.io">close</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilterInputStream.html?is-external=true#markSupported()" title="class or interface in java.io">markSupported</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilterInputStream.html?is-external=true#read(byte[])" title="class or interface in java.io">read</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="CountingInputStream(java.io.InputStream)"><!-- --></A><H3>
-CountingInputStream</H3>
-<PRE>
-public <B>CountingInputStream</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&nbsp;in)</PRE>
-<DL>
-<DD>Wraps another input stream, counting the number of bytes read.
-<P>
-<DL>
-<DT><B>Parameters:</B><DD><CODE>in</CODE> - the input stream to be wrapped</DL>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="getCount()"><!-- --></A><H3>
-getCount</H3>
-<PRE>
-public long <B>getCount</B>()</PRE>
-<DL>
-<DD>Returns the number of bytes read.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="read()"><!-- --></A><H3>
-read</H3>
-<PRE>
-public int <B>read</B>()
-         throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilterInputStream.html?is-external=true#read()" title="class or interface in java.io">read</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilterInputStream.html?is-external=true" title="class or interface in java.io">FilterInputStream</A></CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="read(byte[], int, int)"><!-- --></A><H3>
-read</H3>
-<PRE>
-public int <B>read</B>(byte[]&nbsp;b,
-                int&nbsp;off,
-                int&nbsp;len)
-         throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilterInputStream.html?is-external=true#read(byte[], int, int)" title="class or interface in java.io">read</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilterInputStream.html?is-external=true" title="class or interface in java.io">FilterInputStream</A></CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="skip(long)"><!-- --></A><H3>
-skip</H3>
-<PRE>
-public long <B>skip</B>(long&nbsp;n)
-          throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilterInputStream.html?is-external=true#skip(long)" title="class or interface in java.io">skip</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilterInputStream.html?is-external=true" title="class or interface in java.io">FilterInputStream</A></CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="mark(int)"><!-- --></A><H3>
-mark</H3>
-<PRE>
-public void <B>mark</B>(int&nbsp;readlimit)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilterInputStream.html?is-external=true#mark(int)" title="class or interface in java.io">mark</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilterInputStream.html?is-external=true" title="class or interface in java.io">FilterInputStream</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="reset()"><!-- --></A><H3>
-reset</H3>
-<PRE>
-public void <B>reset</B>()
-           throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilterInputStream.html?is-external=true#reset()" title="class or interface in java.io">reset</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilterInputStream.html?is-external=true" title="class or interface in java.io">FilterInputStream</A></CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/CountingInputStream.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/io/Closeables.html" title="class in com.google.common.io"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/io/CountingOutputStream.html" title="class in com.google.common.io"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/io/CountingInputStream.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="CountingInputStream.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_java.io.FilterInputStream">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/io/CountingOutputStream.html b/javadoc/com/google/common/io/CountingOutputStream.html
deleted file mode 100644
index d21b742..0000000
--- a/javadoc/com/google/common/io/CountingOutputStream.html
+++ /dev/null
@@ -1,354 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:59 PST 2010 -->
-<TITLE>
-CountingOutputStream (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="CountingOutputStream (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/CountingOutputStream.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/io/CountingInputStream.html" title="class in com.google.common.io"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/io/FileBackedOutputStream.html" title="class in com.google.common.io"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/io/CountingOutputStream.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="CountingOutputStream.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_java.io.FilterOutputStream">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.io</FONT>
-<BR>
-Class CountingOutputStream</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">java.io.OutputStream</A>
-      <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilterOutputStream.html?is-external=true" title="class or interface in java.io">java.io.FilterOutputStream</A>
-          <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.io.CountingOutputStream</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Flushable.html?is-external=true" title="class or interface in java.io">Flushable</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public class <B>CountingOutputStream</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilterOutputStream.html?is-external=true" title="class or interface in java.io">FilterOutputStream</A></DL>
-</PRE>
-
-<P>
-An OutputStream that counts the number of bytes written.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2009.09.15 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Chris Nokleberg</DD>
-</DL>
-<HR>
-
-<P>
-<!-- =========== FIELD SUMMARY =========== -->
-
-<A NAME="field_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Field Summary</B></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;<A NAME="fields_inherited_from_class_java.io.FilterOutputStream"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Fields inherited from class java.io.<A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilterOutputStream.html?is-external=true" title="class or interface in java.io">FilterOutputStream</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilterOutputStream.html?is-external=true#out" title="class or interface in java.io">out</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/google/common/io/CountingOutputStream.html#CountingOutputStream(java.io.OutputStream)">CountingOutputStream</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</A>&nbsp;out)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Wraps another output stream, counting the number of bytes written.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;long</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/CountingOutputStream.html#getCount()">getCount</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of bytes written.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/CountingOutputStream.html#write(byte[], int, int)">write</A></B>(byte[]&nbsp;b,
-      int&nbsp;off,
-      int&nbsp;len)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/CountingOutputStream.html#write(int)">write</A></B>(int&nbsp;b)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.io.FilterOutputStream"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.io.<A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilterOutputStream.html?is-external=true" title="class or interface in java.io">FilterOutputStream</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilterOutputStream.html?is-external=true#close()" title="class or interface in java.io">close</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilterOutputStream.html?is-external=true#flush()" title="class or interface in java.io">flush</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilterOutputStream.html?is-external=true#write(byte[])" title="class or interface in java.io">write</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="CountingOutputStream(java.io.OutputStream)"><!-- --></A><H3>
-CountingOutputStream</H3>
-<PRE>
-public <B>CountingOutputStream</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</A>&nbsp;out)</PRE>
-<DL>
-<DD>Wraps another output stream, counting the number of bytes written.
-<P>
-<DL>
-<DT><B>Parameters:</B><DD><CODE>out</CODE> - the output stream to be wrapped</DL>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="getCount()"><!-- --></A><H3>
-getCount</H3>
-<PRE>
-public long <B>getCount</B>()</PRE>
-<DL>
-<DD>Returns the number of bytes written.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="write(byte[], int, int)"><!-- --></A><H3>
-write</H3>
-<PRE>
-public void <B>write</B>(byte[]&nbsp;b,
-                  int&nbsp;off,
-                  int&nbsp;len)
-           throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilterOutputStream.html?is-external=true#write(byte[], int, int)" title="class or interface in java.io">write</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilterOutputStream.html?is-external=true" title="class or interface in java.io">FilterOutputStream</A></CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="write(int)"><!-- --></A><H3>
-write</H3>
-<PRE>
-public void <B>write</B>(int&nbsp;b)
-           throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilterOutputStream.html?is-external=true#write(int)" title="class or interface in java.io">write</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilterOutputStream.html?is-external=true" title="class or interface in java.io">FilterOutputStream</A></CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/CountingOutputStream.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/io/CountingInputStream.html" title="class in com.google.common.io"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/io/FileBackedOutputStream.html" title="class in com.google.common.io"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/io/CountingOutputStream.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="CountingOutputStream.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_java.io.FilterOutputStream">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/io/FileBackedOutputStream.html b/javadoc/com/google/common/io/FileBackedOutputStream.html
deleted file mode 100644
index 30218bb..0000000
--- a/javadoc/com/google/common/io/FileBackedOutputStream.html
+++ /dev/null
@@ -1,462 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:59 PST 2010 -->
-<TITLE>
-FileBackedOutputStream (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="FileBackedOutputStream (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/FileBackedOutputStream.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/io/CountingOutputStream.html" title="class in com.google.common.io"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/io/Files.html" title="class in com.google.common.io"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/io/FileBackedOutputStream.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="FileBackedOutputStream.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.io</FONT>
-<BR>
-Class FileBackedOutputStream</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">java.io.OutputStream</A>
-      <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.io.FileBackedOutputStream</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Flushable.html?is-external=true" title="class or interface in java.io">Flushable</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public final class <B>FileBackedOutputStream</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</A></DL>
-</PRE>
-
-<P>
-An <A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io"><CODE>OutputStream</CODE></A> that starts buffering to a byte array, but
- switches to file buffering once the data reaches a configurable size.
-
- <p>This class is thread-safe.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2009.09.15 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Chris Nokleberg</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/google/common/io/FileBackedOutputStream.html#FileBackedOutputStream(int)">FileBackedOutputStream</A></B>(int&nbsp;fileThreshold)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new instance that uses the given file threshold.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/google/common/io/FileBackedOutputStream.html#FileBackedOutputStream(int, boolean)">FileBackedOutputStream</A></B>(int&nbsp;fileThreshold,
-                       boolean&nbsp;resetOnFinalize)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new instance that uses the given file threshold, and
- optionally resets the data when the <A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io"><CODE>InputSupplier</CODE></A> returned
- by <A HREF="../../../../com/google/common/io/FileBackedOutputStream.html#getSupplier()"><CODE>getSupplier()</CODE></A> is finalized.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/FileBackedOutputStream.html#close()">close</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/FileBackedOutputStream.html#flush()">flush</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/FileBackedOutputStream.html#getSupplier()">getSupplier</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a supplier that may be used to retrieve the data buffered
- by this stream.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/FileBackedOutputStream.html#reset()">reset</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Calls <A HREF="../../../../com/google/common/io/FileBackedOutputStream.html#close()"><CODE>close()</CODE></A> if not already closed, and then resets this
- object back to its initial state, for reuse.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/FileBackedOutputStream.html#write(byte[])">write</A></B>(byte[]&nbsp;b)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/FileBackedOutputStream.html#write(byte[], int, int)">write</A></B>(byte[]&nbsp;b,
-      int&nbsp;off,
-      int&nbsp;len)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/FileBackedOutputStream.html#write(int)">write</A></B>(int&nbsp;b)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="FileBackedOutputStream(int)"><!-- --></A><H3>
-FileBackedOutputStream</H3>
-<PRE>
-public <B>FileBackedOutputStream</B>(int&nbsp;fileThreshold)</PRE>
-<DL>
-<DD>Creates a new instance that uses the given file threshold.
- Equivalent to <code>ThresholdOutputStream(fileThreshold, false)</code>.
-<P>
-<DL>
-<DT><B>Parameters:</B><DD><CODE>fileThreshold</CODE> - the number of bytes before the stream should
-     switch to buffering to a file</DL>
-</DL>
-<HR>
-
-<A NAME="FileBackedOutputStream(int, boolean)"><!-- --></A><H3>
-FileBackedOutputStream</H3>
-<PRE>
-public <B>FileBackedOutputStream</B>(int&nbsp;fileThreshold,
-                              boolean&nbsp;resetOnFinalize)</PRE>
-<DL>
-<DD>Creates a new instance that uses the given file threshold, and
- optionally resets the data when the <A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io"><CODE>InputSupplier</CODE></A> returned
- by <A HREF="../../../../com/google/common/io/FileBackedOutputStream.html#getSupplier()"><CODE>getSupplier()</CODE></A> is finalized.
-<P>
-<DL>
-<DT><B>Parameters:</B><DD><CODE>fileThreshold</CODE> - the number of bytes before the stream should
-     switch to buffering to a file<DD><CODE>resetOnFinalize</CODE> - if true, the <A HREF="../../../../com/google/common/io/FileBackedOutputStream.html#reset()"><CODE>reset()</CODE></A> method will
-     be called when the <A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io"><CODE>InputSupplier</CODE></A> returned by <A HREF="../../../../com/google/common/io/FileBackedOutputStream.html#getSupplier()"><CODE>getSupplier()</CODE></A>
-     is finalized</DL>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="getSupplier()"><!-- --></A><H3>
-getSupplier</H3>
-<PRE>
-public <A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt; <B>getSupplier</B>()</PRE>
-<DL>
-<DD>Returns a supplier that may be used to retrieve the data buffered
- by this stream.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="reset()"><!-- --></A><H3>
-reset</H3>
-<PRE>
-public void <B>reset</B>()
-           throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Calls <A HREF="../../../../com/google/common/io/FileBackedOutputStream.html#close()"><CODE>close()</CODE></A> if not already closed, and then resets this
- object back to its initial state, for reuse. If data was buffered
- to a file, it will be deleted.
-<P>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if an I/O error occurred while deleting the file buffer</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="write(int)"><!-- --></A><H3>
-write</H3>
-<PRE>
-public void <B>write</B>(int&nbsp;b)
-           throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true#write(int)" title="class or interface in java.io">write</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</A></CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="write(byte[])"><!-- --></A><H3>
-write</H3>
-<PRE>
-public void <B>write</B>(byte[]&nbsp;b)
-           throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true#write(byte[])" title="class or interface in java.io">write</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</A></CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="write(byte[], int, int)"><!-- --></A><H3>
-write</H3>
-<PRE>
-public void <B>write</B>(byte[]&nbsp;b,
-                  int&nbsp;off,
-                  int&nbsp;len)
-           throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true#write(byte[], int, int)" title="class or interface in java.io">write</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</A></CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="close()"><!-- --></A><H3>
-close</H3>
-<PRE>
-public void <B>close</B>()
-           throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true#close()" title="class or interface in java.io">close</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</A></CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true#close()" title="class or interface in java.io">close</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</A></CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="flush()"><!-- --></A><H3>
-flush</H3>
-<PRE>
-public void <B>flush</B>()
-           throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/Flushable.html?is-external=true#flush()" title="class or interface in java.io">flush</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/Flushable.html?is-external=true" title="class or interface in java.io">Flushable</A></CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true#flush()" title="class or interface in java.io">flush</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</A></CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/FileBackedOutputStream.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/io/CountingOutputStream.html" title="class in com.google.common.io"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/io/Files.html" title="class in com.google.common.io"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/io/FileBackedOutputStream.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="FileBackedOutputStream.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/io/Files.html b/javadoc/com/google/common/io/Files.html
deleted file mode 100644
index 9edc4c2..0000000
--- a/javadoc/com/google/common/io/Files.html
+++ /dev/null
@@ -1,1273 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:59 PST 2010 -->
-<TITLE>
-Files (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Files (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Files.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/io/FileBackedOutputStream.html" title="class in com.google.common.io"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/io/Flushables.html" title="class in com.google.common.io"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/io/Files.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Files.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.io</FONT>
-<BR>
-Class Files</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.io.Files</B>
-</PRE>
-<HR>
-<DL>
-<DT><PRE>public final class <B>Files</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
-</PRE>
-
-<P>
-Provides utility methods for working with files.
-
- <p>All method parameters must be non-null unless documented otherwise.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2009.09.15 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Chris Nokleberg</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/Files.html#append(java.lang.CharSequence, java.io.File, java.nio.charset.Charset)">append</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang">CharSequence</A>&nbsp;from,
-       <A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;to,
-       <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A>&nbsp;charset)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Appends a character sequence (such as a string) to a file using the given
- character set.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/Files.html#copy(java.io.File, java.nio.charset.Charset, java.lang.Appendable)">copy</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;from,
-     <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A>&nbsp;charset,
-     <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang">Appendable</A>&nbsp;to)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies all characters from a file to an appendable object,
- using the given character set.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;W extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang">Appendable</A> & <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</A>&gt; 
-<BR>
-void</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/Files.html#copy(java.io.File, java.nio.charset.Charset, com.google.common.io.OutputSupplier)">copy</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;from,
-     <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A>&nbsp;charset,
-     <A HREF="../../../../com/google/common/io/OutputSupplier.html" title="interface in com.google.common.io">OutputSupplier</A>&lt;W&gt;&nbsp;to)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies all characters from a file to a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang"><CODE>Appendable</CODE></A> &
- <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io"><CODE>Closeable</CODE></A> object supplied by a factory, using the given
- character set.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/Files.html#copy(java.io.File, java.io.File)">copy</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;from,
-     <A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;to)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies all the bytes from one file to another.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/Files.html#copy(java.io.File, java.io.OutputStream)">copy</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;from,
-     <A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</A>&nbsp;to)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies all bytes from a file to an output stream.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/Files.html#copy(java.io.File, com.google.common.io.OutputSupplier)">copy</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;from,
-     <A HREF="../../../../com/google/common/io/OutputSupplier.html" title="interface in com.google.common.io">OutputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</A>&gt;&nbsp;to)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies all bytes from a file to an <A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io"><CODE>OutputStream</CODE></A> supplied by
- a factory.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/Files.html#copy(com.google.common.io.InputSupplier, java.io.File)">copy</A></B>(<A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;&nbsp;from,
-     <A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;to)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies to a file all bytes from an <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io"><CODE>InputStream</CODE></A> supplied by a
- factory.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;R extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang">Readable</A> & <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</A>&gt; 
-<BR>
-void</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/Files.html#copy(com.google.common.io.InputSupplier, java.io.File, java.nio.charset.Charset)">copy</A></B>(<A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;R&gt;&nbsp;from,
-     <A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;to,
-     <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A>&nbsp;charset)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies to a file all characters from a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang"><CODE>Readable</CODE></A> and
- <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io"><CODE>Closeable</CODE></A> object supplied by a factory, using the given
- character set.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/Files.html#createTempDir()">createTempDir</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Atomically creates a new directory somewhere beneath the system's
- temporary directory (as defined by the <code>java.io.tmpdir</code> system
- property), and returns its name.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/Files.html#deleteDirectoryContents(java.io.File)">deleteDirectoryContents</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;directory)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Deletes all the files within a directory.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/Files.html#deleteRecursively(java.io.File)">deleteRecursively</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;file)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Deletes a file or directory and all contents recursively.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/Files.html#equal(java.io.File, java.io.File)">equal</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;file1,
-      <A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;file2)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns true if the files contains the same bytes.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;long</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/Files.html#getChecksum(java.io.File, java.util.zip.Checksum)">getChecksum</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;file,
-            <A HREF="http://java.sun.com/javase/6/docs/api/java/util/zip/Checksum.html?is-external=true" title="class or interface in java.util.zip">Checksum</A>&nbsp;checksum)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Computes and returns the checksum value for a file.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;byte[]</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/Files.html#getDigest(java.io.File, java.security.MessageDigest)">getDigest</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;file,
-          <A HREF="http://java.sun.com/javase/6/docs/api/java/security/MessageDigest.html?is-external=true" title="class or interface in java.security">MessageDigest</A>&nbsp;md)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Computes and returns the digest value for a file.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/nio/MappedByteBuffer.html?is-external=true" title="class or interface in java.nio">MappedByteBuffer</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/Files.html#map(java.io.File)">map</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;file)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Fully maps a file read-only in to memory as per
- <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/channels/FileChannel.html?is-external=true#map(java.nio.channels.FileChannel.MapMode, long, long)" title="class or interface in java.nio.channels"><CODE>FileChannel.map(java.nio.channels.FileChannel.MapMode, long, long)</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/nio/MappedByteBuffer.html?is-external=true" title="class or interface in java.nio">MappedByteBuffer</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/Files.html#map(java.io.File, java.nio.channels.FileChannel.MapMode)">map</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;file,
-    <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/channels/FileChannel.MapMode.html?is-external=true" title="class or interface in java.nio.channels">FileChannel.MapMode</A>&nbsp;mode)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Fully maps a file in to memory as per
- <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/channels/FileChannel.html?is-external=true#map(java.nio.channels.FileChannel.MapMode, long, long)" title="class or interface in java.nio.channels"><CODE>FileChannel.map(java.nio.channels.FileChannel.MapMode, long, long)</CODE></A>
- using the requested <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/channels/FileChannel.MapMode.html?is-external=true" title="class or interface in java.nio.channels"><CODE>FileChannel.MapMode</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/nio/MappedByteBuffer.html?is-external=true" title="class or interface in java.nio">MappedByteBuffer</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/Files.html#map(java.io.File, java.nio.channels.FileChannel.MapMode, long)">map</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;file,
-    <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/channels/FileChannel.MapMode.html?is-external=true" title="class or interface in java.nio.channels">FileChannel.MapMode</A>&nbsp;mode,
-    long&nbsp;size)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Maps a file in to memory as per
- <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/channels/FileChannel.html?is-external=true#map(java.nio.channels.FileChannel.MapMode, long, long)" title="class or interface in java.nio.channels"><CODE>FileChannel.map(java.nio.channels.FileChannel.MapMode, long, long)</CODE></A>
- using the requested <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/channels/FileChannel.MapMode.html?is-external=true" title="class or interface in java.nio.channels"><CODE>FileChannel.MapMode</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/Files.html#move(java.io.File, java.io.File)">move</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;from,
-     <A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;to)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Moves the file from one path to another.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/FileInputStream.html?is-external=true" title="class or interface in java.io">FileInputStream</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/Files.html#newInputStreamSupplier(java.io.File)">newInputStreamSupplier</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;file)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a factory that will supply instances of <A HREF="http://java.sun.com/javase/6/docs/api/java/io/FileInputStream.html?is-external=true" title="class or interface in java.io"><CODE>FileInputStream</CODE></A>
- that read from a file.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/io/OutputSupplier.html" title="interface in com.google.common.io">OutputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/FileOutputStream.html?is-external=true" title="class or interface in java.io">FileOutputStream</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/Files.html#newOutputStreamSupplier(java.io.File)">newOutputStreamSupplier</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;file)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a factory that will supply instances of <A HREF="http://java.sun.com/javase/6/docs/api/java/io/FileOutputStream.html?is-external=true" title="class or interface in java.io"><CODE>FileOutputStream</CODE></A>
- that write to a file.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/io/OutputSupplier.html" title="interface in com.google.common.io">OutputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/FileOutputStream.html?is-external=true" title="class or interface in java.io">FileOutputStream</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/Files.html#newOutputStreamSupplier(java.io.File, boolean)">newOutputStreamSupplier</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;file,
-                        boolean&nbsp;append)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a factory that will supply instances of <A HREF="http://java.sun.com/javase/6/docs/api/java/io/FileOutputStream.html?is-external=true" title="class or interface in java.io"><CODE>FileOutputStream</CODE></A>
- that write to or append to a file.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/BufferedReader.html?is-external=true" title="class or interface in java.io">BufferedReader</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/Files.html#newReader(java.io.File, java.nio.charset.Charset)">newReader</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;file,
-          <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A>&nbsp;charset)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a buffered reader that reads from a file using the given
- character set.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStreamReader.html?is-external=true" title="class or interface in java.io">InputStreamReader</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/Files.html#newReaderSupplier(java.io.File, java.nio.charset.Charset)">newReaderSupplier</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;file,
-                  <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A>&nbsp;charset)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a factory that will supply instances of
- <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStreamReader.html?is-external=true" title="class or interface in java.io"><CODE>InputStreamReader</CODE></A> that read a file using the given character set.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/BufferedWriter.html?is-external=true" title="class or interface in java.io">BufferedWriter</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/Files.html#newWriter(java.io.File, java.nio.charset.Charset)">newWriter</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;file,
-          <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A>&nbsp;charset)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a buffered writer that writes to a file using the given
- character set.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/io/OutputSupplier.html" title="interface in com.google.common.io">OutputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStreamWriter.html?is-external=true" title="class or interface in java.io">OutputStreamWriter</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/Files.html#newWriterSupplier(java.io.File, java.nio.charset.Charset)">newWriterSupplier</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;file,
-                  <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A>&nbsp;charset)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a factory that will supply instances of <A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStreamWriter.html?is-external=true" title="class or interface in java.io"><CODE>OutputStreamWriter</CODE></A>
- that write to a file using the given character set.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/io/OutputSupplier.html" title="interface in com.google.common.io">OutputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStreamWriter.html?is-external=true" title="class or interface in java.io">OutputStreamWriter</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/Files.html#newWriterSupplier(java.io.File, java.nio.charset.Charset, boolean)">newWriterSupplier</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;file,
-                  <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A>&nbsp;charset,
-                  boolean&nbsp;append)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a factory that will supply instances of <A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStreamWriter.html?is-external=true" title="class or interface in java.io"><CODE>OutputStreamWriter</CODE></A>
- that write to or append to a file using the given character set.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; T</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/Files.html#readBytes(java.io.File, com.google.common.io.ByteProcessor)">readBytes</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;file,
-          <A HREF="../../../../com/google/common/io/ByteProcessor.html" title="interface in com.google.common.io">ByteProcessor</A>&lt;T&gt;&nbsp;processor)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Process the bytes of a file.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/Files.html#readFirstLine(java.io.File, java.nio.charset.Charset)">readFirstLine</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;file,
-              <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A>&nbsp;charset)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reads the first line from a file.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/Files.html#readLines(java.io.File, java.nio.charset.Charset)">readLines</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;file,
-          <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A>&nbsp;charset)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reads all of the lines from a file.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; T</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/Files.html#readLines(java.io.File, java.nio.charset.Charset, com.google.common.io.LineProcessor)">readLines</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;file,
-          <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A>&nbsp;charset,
-          <A HREF="../../../../com/google/common/io/LineProcessor.html" title="interface in com.google.common.io">LineProcessor</A>&lt;T&gt;&nbsp;callback)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Streams lines from a <A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io"><CODE>File</CODE></A>, stopping when our callback returns
- false, or we have read all of the lines.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;byte[]</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/Files.html#toByteArray(java.io.File)">toByteArray</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;file)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reads all bytes from a file into a byte array.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/Files.html#toString(java.io.File, java.nio.charset.Charset)">toString</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;file,
-         <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A>&nbsp;charset)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reads all characters from a file into a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang"><CODE>String</CODE></A>, using the given
- character set.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/Files.html#touch(java.io.File)">touch</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;file)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an empty file or updates the last updated timestamp on the
- same as the unix command of the same name.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/Files.html#write(byte[], java.io.File)">write</A></B>(byte[]&nbsp;from,
-      <A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;to)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Overwrites a file with the contents of a byte array.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/Files.html#write(java.lang.CharSequence, java.io.File, java.nio.charset.Charset)">write</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang">CharSequence</A>&nbsp;from,
-      <A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;to,
-      <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A>&nbsp;charset)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Writes a character sequence (such as a string) to a file using the given
- character set.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="newReader(java.io.File, java.nio.charset.Charset)"><!-- --></A><H3>
-newReader</H3>
-<PRE>
-public static <A HREF="http://java.sun.com/javase/6/docs/api/java/io/BufferedReader.html?is-external=true" title="class or interface in java.io">BufferedReader</A> <B>newReader</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;file,
-                                       <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A>&nbsp;charset)
-                                throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/FileNotFoundException.html?is-external=true" title="class or interface in java.io">FileNotFoundException</A></PRE>
-<DL>
-<DD>Returns a buffered reader that reads from a file using the given
- character set.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>file</CODE> - the file to read from<DD><CODE>charset</CODE> - the character set used when writing the file
-<DT><B>Returns:</B><DD>the buffered reader
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/FileNotFoundException.html?is-external=true" title="class or interface in java.io">FileNotFoundException</A></CODE></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="newWriter(java.io.File, java.nio.charset.Charset)"><!-- --></A><H3>
-newWriter</H3>
-<PRE>
-public static <A HREF="http://java.sun.com/javase/6/docs/api/java/io/BufferedWriter.html?is-external=true" title="class or interface in java.io">BufferedWriter</A> <B>newWriter</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;file,
-                                       <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A>&nbsp;charset)
-                                throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/FileNotFoundException.html?is-external=true" title="class or interface in java.io">FileNotFoundException</A></PRE>
-<DL>
-<DD>Returns a buffered writer that writes to a file using the given
- character set.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>file</CODE> - the file to write to<DD><CODE>charset</CODE> - the character set used when writing the file
-<DT><B>Returns:</B><DD>the buffered writer
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/FileNotFoundException.html?is-external=true" title="class or interface in java.io">FileNotFoundException</A></CODE></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="newInputStreamSupplier(java.io.File)"><!-- --></A><H3>
-newInputStreamSupplier</H3>
-<PRE>
-public static <A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/FileInputStream.html?is-external=true" title="class or interface in java.io">FileInputStream</A>&gt; <B>newInputStreamSupplier</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;file)</PRE>
-<DL>
-<DD>Returns a factory that will supply instances of <A HREF="http://java.sun.com/javase/6/docs/api/java/io/FileInputStream.html?is-external=true" title="class or interface in java.io"><CODE>FileInputStream</CODE></A>
- that read from a file.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>file</CODE> - the file to read from
-<DT><B>Returns:</B><DD>the factory</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="newOutputStreamSupplier(java.io.File)"><!-- --></A><H3>
-newOutputStreamSupplier</H3>
-<PRE>
-public static <A HREF="../../../../com/google/common/io/OutputSupplier.html" title="interface in com.google.common.io">OutputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/FileOutputStream.html?is-external=true" title="class or interface in java.io">FileOutputStream</A>&gt; <B>newOutputStreamSupplier</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;file)</PRE>
-<DL>
-<DD>Returns a factory that will supply instances of <A HREF="http://java.sun.com/javase/6/docs/api/java/io/FileOutputStream.html?is-external=true" title="class or interface in java.io"><CODE>FileOutputStream</CODE></A>
- that write to a file.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>file</CODE> - the file to write to
-<DT><B>Returns:</B><DD>the factory</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="newOutputStreamSupplier(java.io.File, boolean)"><!-- --></A><H3>
-newOutputStreamSupplier</H3>
-<PRE>
-public static <A HREF="../../../../com/google/common/io/OutputSupplier.html" title="interface in com.google.common.io">OutputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/FileOutputStream.html?is-external=true" title="class or interface in java.io">FileOutputStream</A>&gt; <B>newOutputStreamSupplier</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;file,
-                                                                       boolean&nbsp;append)</PRE>
-<DL>
-<DD>Returns a factory that will supply instances of <A HREF="http://java.sun.com/javase/6/docs/api/java/io/FileOutputStream.html?is-external=true" title="class or interface in java.io"><CODE>FileOutputStream</CODE></A>
- that write to or append to a file.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>file</CODE> - the file to write to<DD><CODE>append</CODE> - if true, the encoded characters will be appended to the file;
-     otherwise the file is overwritten
-<DT><B>Returns:</B><DD>the factory</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="newReaderSupplier(java.io.File, java.nio.charset.Charset)"><!-- --></A><H3>
-newReaderSupplier</H3>
-<PRE>
-public static <A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStreamReader.html?is-external=true" title="class or interface in java.io">InputStreamReader</A>&gt; <B>newReaderSupplier</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;file,
-                                                                 <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A>&nbsp;charset)</PRE>
-<DL>
-<DD>Returns a factory that will supply instances of
- <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStreamReader.html?is-external=true" title="class or interface in java.io"><CODE>InputStreamReader</CODE></A> that read a file using the given character set.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>file</CODE> - the file to read from<DD><CODE>charset</CODE> - the character set used when reading the file
-<DT><B>Returns:</B><DD>the factory</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="newWriterSupplier(java.io.File, java.nio.charset.Charset)"><!-- --></A><H3>
-newWriterSupplier</H3>
-<PRE>
-public static <A HREF="../../../../com/google/common/io/OutputSupplier.html" title="interface in com.google.common.io">OutputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStreamWriter.html?is-external=true" title="class or interface in java.io">OutputStreamWriter</A>&gt; <B>newWriterSupplier</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;file,
-                                                                   <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A>&nbsp;charset)</PRE>
-<DL>
-<DD>Returns a factory that will supply instances of <A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStreamWriter.html?is-external=true" title="class or interface in java.io"><CODE>OutputStreamWriter</CODE></A>
- that write to a file using the given character set.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>file</CODE> - the file to write to<DD><CODE>charset</CODE> - the character set used when writing the file
-<DT><B>Returns:</B><DD>the factory</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="newWriterSupplier(java.io.File, java.nio.charset.Charset, boolean)"><!-- --></A><H3>
-newWriterSupplier</H3>
-<PRE>
-public static <A HREF="../../../../com/google/common/io/OutputSupplier.html" title="interface in com.google.common.io">OutputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStreamWriter.html?is-external=true" title="class or interface in java.io">OutputStreamWriter</A>&gt; <B>newWriterSupplier</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;file,
-                                                                   <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A>&nbsp;charset,
-                                                                   boolean&nbsp;append)</PRE>
-<DL>
-<DD>Returns a factory that will supply instances of <A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStreamWriter.html?is-external=true" title="class or interface in java.io"><CODE>OutputStreamWriter</CODE></A>
- that write to or append to a file using the given character set.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>file</CODE> - the file to write to<DD><CODE>charset</CODE> - the character set used when writing the file<DD><CODE>append</CODE> - if true, the encoded characters will be appended to the file;
-     otherwise the file is overwritten
-<DT><B>Returns:</B><DD>the factory</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toByteArray(java.io.File)"><!-- --></A><H3>
-toByteArray</H3>
-<PRE>
-public static byte[] <B>toByteArray</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;file)
-                          throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Reads all bytes from a file into a byte array.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>file</CODE> - the file to read from
-<DT><B>Returns:</B><DD>a byte array containing all the bytes from file
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if the file is bigger than the largest
-     possible byte array (2^31 - 1)
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if an I/O error occurs</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toString(java.io.File, java.nio.charset.Charset)"><!-- --></A><H3>
-toString</H3>
-<PRE>
-public static <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>toString</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;file,
-                              <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A>&nbsp;charset)
-                       throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Reads all characters from a file into a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang"><CODE>String</CODE></A>, using the given
- character set.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>file</CODE> - the file to read from<DD><CODE>charset</CODE> - the character set used when reading the file
-<DT><B>Returns:</B><DD>a string containing all the characters from the file
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if an I/O error occurs</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="copy(com.google.common.io.InputSupplier, java.io.File)"><!-- --></A><H3>
-copy</H3>
-<PRE>
-public static void <B>copy</B>(<A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;&nbsp;from,
-                        <A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;to)
-                 throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Copies to a file all bytes from an <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io"><CODE>InputStream</CODE></A> supplied by a
- factory.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>from</CODE> - the input factory<DD><CODE>to</CODE> - the destination file
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if an I/O error occurs</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="write(byte[], java.io.File)"><!-- --></A><H3>
-write</H3>
-<PRE>
-public static void <B>write</B>(byte[]&nbsp;from,
-                         <A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;to)
-                  throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Overwrites a file with the contents of a byte array.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>from</CODE> - the bytes to write<DD><CODE>to</CODE> - the destination file
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if an I/O error occurs</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="copy(java.io.File, com.google.common.io.OutputSupplier)"><!-- --></A><H3>
-copy</H3>
-<PRE>
-public static void <B>copy</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;from,
-                        <A HREF="../../../../com/google/common/io/OutputSupplier.html" title="interface in com.google.common.io">OutputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</A>&gt;&nbsp;to)
-                 throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Copies all bytes from a file to an <A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io"><CODE>OutputStream</CODE></A> supplied by
- a factory.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>from</CODE> - the source file<DD><CODE>to</CODE> - the output factory
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if an I/O error occurs</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="copy(java.io.File, java.io.OutputStream)"><!-- --></A><H3>
-copy</H3>
-<PRE>
-public static void <B>copy</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;from,
-                        <A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</A>&nbsp;to)
-                 throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Copies all bytes from a file to an output stream.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>from</CODE> - the source file<DD><CODE>to</CODE> - the output stream
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if an I/O error occurs</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="copy(java.io.File, java.io.File)"><!-- --></A><H3>
-copy</H3>
-<PRE>
-public static void <B>copy</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;from,
-                        <A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;to)
-                 throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Copies all the bytes from one file to another.
-.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>from</CODE> - the source file<DD><CODE>to</CODE> - the destination file
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if an I/O error occurs</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="copy(com.google.common.io.InputSupplier, java.io.File, java.nio.charset.Charset)"><!-- --></A><H3>
-copy</H3>
-<PRE>
-public static &lt;R extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang">Readable</A> & <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</A>&gt; void <B>copy</B>(<A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;R&gt;&nbsp;from,
-                                                        <A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;to,
-                                                        <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A>&nbsp;charset)
-                 throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Copies to a file all characters from a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang"><CODE>Readable</CODE></A> and
- <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io"><CODE>Closeable</CODE></A> object supplied by a factory, using the given
- character set.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>from</CODE> - the readable supplier<DD><CODE>to</CODE> - the destination file<DD><CODE>charset</CODE> - the character set used when writing the file
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if an I/O error occurs</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="write(java.lang.CharSequence, java.io.File, java.nio.charset.Charset)"><!-- --></A><H3>
-write</H3>
-<PRE>
-public static void <B>write</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang">CharSequence</A>&nbsp;from,
-                         <A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;to,
-                         <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A>&nbsp;charset)
-                  throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Writes a character sequence (such as a string) to a file using the given
- character set.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>from</CODE> - the character sequence to write<DD><CODE>to</CODE> - the destination file<DD><CODE>charset</CODE> - the character set used when writing the file
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if an I/O error occurs</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="append(java.lang.CharSequence, java.io.File, java.nio.charset.Charset)"><!-- --></A><H3>
-append</H3>
-<PRE>
-public static void <B>append</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang">CharSequence</A>&nbsp;from,
-                          <A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;to,
-                          <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A>&nbsp;charset)
-                   throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Appends a character sequence (such as a string) to a file using the given
- character set.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>from</CODE> - the character sequence to append<DD><CODE>to</CODE> - the destination file<DD><CODE>charset</CODE> - the character set used when writing the file
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if an I/O error occurs</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="copy(java.io.File, java.nio.charset.Charset, com.google.common.io.OutputSupplier)"><!-- --></A><H3>
-copy</H3>
-<PRE>
-public static &lt;W extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang">Appendable</A> & <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</A>&gt; void <B>copy</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;from,
-                                                          <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A>&nbsp;charset,
-                                                          <A HREF="../../../../com/google/common/io/OutputSupplier.html" title="interface in com.google.common.io">OutputSupplier</A>&lt;W&gt;&nbsp;to)
-                 throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Copies all characters from a file to a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang"><CODE>Appendable</CODE></A> &
- <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io"><CODE>Closeable</CODE></A> object supplied by a factory, using the given
- character set.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>from</CODE> - the source file<DD><CODE>charset</CODE> - the character set used when reading the file<DD><CODE>to</CODE> - the appendable supplier
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if an I/O error occurs</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="copy(java.io.File, java.nio.charset.Charset, java.lang.Appendable)"><!-- --></A><H3>
-copy</H3>
-<PRE>
-public static void <B>copy</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;from,
-                        <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A>&nbsp;charset,
-                        <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang">Appendable</A>&nbsp;to)
-                 throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Copies all characters from a file to an appendable object,
- using the given character set.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>from</CODE> - the source file<DD><CODE>charset</CODE> - the character set used when reading the file<DD><CODE>to</CODE> - the appendable object
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if an I/O error occurs</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="equal(java.io.File, java.io.File)"><!-- --></A><H3>
-equal</H3>
-<PRE>
-public static boolean <B>equal</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;file1,
-                            <A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;file2)
-                     throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Returns true if the files contains the same bytes.
-<P>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if an I/O error occurs</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="createTempDir()"><!-- --></A><H3>
-createTempDir</H3>
-<PRE>
-public static <A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A> <B>createTempDir</B>()</PRE>
-<DL>
-<DD>Atomically creates a new directory somewhere beneath the system's
- temporary directory (as defined by the <code>java.io.tmpdir</code> system
- property), and returns its name.
-
- <p>Use this method instead of <A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true#createTempFile(java.lang.String, java.lang.String)" title="class or interface in java.io"><CODE>File.createTempFile(String, String)</CODE></A>
- when you wish to create a directory, not a regular file.  A common pitfall
- is to call <code>createTempFile</code>, delete the file and create a
- directory in its place, but this leads a race condition which can be
- exploited to create security vulnerabilities, especially when executable
- files are to be written into the directory.
-
- <p>This method assumes that the temporary volume is writable, has free
- inodes and free blocks, and that it will not be called thousands of times
- per second.
-<P>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>the newly-created directory
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalStateException.html?is-external=true" title="class or interface in java.lang">IllegalStateException</A></CODE> - if the directory could not be created</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="touch(java.io.File)"><!-- --></A><H3>
-touch</H3>
-<PRE>
-public static void <B>touch</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;file)
-                  throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Creates an empty file or updates the last updated timestamp on the
- same as the unix command of the same name.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>file</CODE> - the file to create or update
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if an I/O error occurs</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="move(java.io.File, java.io.File)"><!-- --></A><H3>
-move</H3>
-<PRE>
-public static void <B>move</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;from,
-                        <A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;to)
-                 throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Moves the file from one path to another. This method can rename a file or
- move it to a different directory, like the Unix <code>mv</code> command.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>from</CODE> - the source file<DD><CODE>to</CODE> - the destination file
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if an I/O error occurs</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="deleteDirectoryContents(java.io.File)"><!-- --></A><H3>
-deleteDirectoryContents</H3>
-<PRE>
-public static void <B>deleteDirectoryContents</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;directory)
-                                    throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Deletes all the files within a directory. Does not delete the
- directory itself.
-
- <p>If the file argument is a symbolic link or there is a symbolic
- link in the path leading to the directory, this method will do
- nothing. Symbolic links within the directory are not followed.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>directory</CODE> - the directory to delete the contents of
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if the argument is not a directory
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if an I/O error occurs<DT><B>See Also:</B><DD><A HREF="../../../../com/google/common/io/Files.html#deleteRecursively(java.io.File)"><CODE>deleteRecursively(java.io.File)</CODE></A></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="deleteRecursively(java.io.File)"><!-- --></A><H3>
-deleteRecursively</H3>
-<PRE>
-public static void <B>deleteRecursively</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;file)
-                              throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Deletes a file or directory and all contents recursively.
-
- <p>If the file argument is a symbolic link the link will be deleted
- but not the target of the link. If the argument is a directory,
- symbolic links within the directory will not be followed.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>file</CODE> - the file to delete
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if an I/O error occurs<DT><B>See Also:</B><DD><A HREF="../../../../com/google/common/io/Files.html#deleteDirectoryContents(java.io.File)"><CODE>deleteDirectoryContents(java.io.File)</CODE></A></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="readFirstLine(java.io.File, java.nio.charset.Charset)"><!-- --></A><H3>
-readFirstLine</H3>
-<PRE>
-public static <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>readFirstLine</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;file,
-                                   <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A>&nbsp;charset)
-                            throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Reads the first line from a file. The line does not include
- line-termination characters, but does include other leading and
- trailing whitespace.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>file</CODE> - the file to read from<DD><CODE>charset</CODE> - the character set used when writing the file
-<DT><B>Returns:</B><DD>the first line, or null if the file is empty
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if an I/O error occurs</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="readLines(java.io.File, java.nio.charset.Charset)"><!-- --></A><H3>
-readLines</H3>
-<PRE>
-public static <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&gt; <B>readLines</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;file,
-                                     <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A>&nbsp;charset)
-                              throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Reads all of the lines from a file. The lines do not include
- line-termination characters, but do include other leading and
- trailing whitespace.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>file</CODE> - the file to read from<DD><CODE>charset</CODE> - the character set used when writing the file
-<DT><B>Returns:</B><DD>a mutable <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util"><CODE>List</CODE></A> containing all the lines
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if an I/O error occurs</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="readLines(java.io.File, java.nio.charset.Charset, com.google.common.io.LineProcessor)"><!-- --></A><H3>
-readLines</H3>
-<PRE>
-public static &lt;T&gt; T <B>readLines</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;file,
-                              <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A>&nbsp;charset,
-                              <A HREF="../../../../com/google/common/io/LineProcessor.html" title="interface in com.google.common.io">LineProcessor</A>&lt;T&gt;&nbsp;callback)
-                   throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Streams lines from a <A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io"><CODE>File</CODE></A>, stopping when our callback returns
- false, or we have read all of the lines.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>file</CODE> - the file to read from<DD><CODE>charset</CODE> - the character set used when writing the file<DD><CODE>callback</CODE> - the <A HREF="../../../../com/google/common/io/LineProcessor.html" title="interface in com.google.common.io"><CODE>LineProcessor</CODE></A> to use to handle the lines
-<DT><B>Returns:</B><DD>the output of processing the lines
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if an I/O error occurs</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="readBytes(java.io.File, com.google.common.io.ByteProcessor)"><!-- --></A><H3>
-readBytes</H3>
-<PRE>
-public static &lt;T&gt; T <B>readBytes</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;file,
-                              <A HREF="../../../../com/google/common/io/ByteProcessor.html" title="interface in com.google.common.io">ByteProcessor</A>&lt;T&gt;&nbsp;processor)
-                   throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Process the bytes of a file.
-
- <p>(If this seems too complicated, maybe you're looking for
- <A HREF="../../../../com/google/common/io/Files.html#toByteArray(java.io.File)"><CODE>toByteArray(java.io.File)</CODE></A>.)
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>file</CODE> - the file to read<DD><CODE>processor</CODE> - the object to which the bytes of the file are passed.
-<DT><B>Returns:</B><DD>the result of the byte processor
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if an I/O error occurs</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getChecksum(java.io.File, java.util.zip.Checksum)"><!-- --></A><H3>
-getChecksum</H3>
-<PRE>
-public static long <B>getChecksum</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;file,
-                               <A HREF="http://java.sun.com/javase/6/docs/api/java/util/zip/Checksum.html?is-external=true" title="class or interface in java.util.zip">Checksum</A>&nbsp;checksum)
-                        throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Computes and returns the checksum value for a file.
- The checksum object is reset when this method returns successfully.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>file</CODE> - the file to read<DD><CODE>checksum</CODE> - the checksum object
-<DT><B>Returns:</B><DD>the result of <A HREF="http://java.sun.com/javase/6/docs/api/java/util/zip/Checksum.html?is-external=true#getValue()" title="class or interface in java.util.zip"><CODE>Checksum.getValue()</CODE></A> after updating the
-     checksum object with all of the bytes in the file
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if an I/O error occurs</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getDigest(java.io.File, java.security.MessageDigest)"><!-- --></A><H3>
-getDigest</H3>
-<PRE>
-public static byte[] <B>getDigest</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;file,
-                               <A HREF="http://java.sun.com/javase/6/docs/api/java/security/MessageDigest.html?is-external=true" title="class or interface in java.security">MessageDigest</A>&nbsp;md)
-                        throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Computes and returns the digest value for a file.
- The digest object is reset when this method returns successfully.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>file</CODE> - the file to read<DD><CODE>md</CODE> - the digest object
-<DT><B>Returns:</B><DD>the result of <A HREF="http://java.sun.com/javase/6/docs/api/java/security/MessageDigest.html?is-external=true#digest()" title="class or interface in java.security"><CODE>MessageDigest.digest()</CODE></A> after updating the
-     digest object with all of the bytes in this file
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if an I/O error occurs</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="map(java.io.File)"><!-- --></A><H3>
-map</H3>
-<PRE>
-public static <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/MappedByteBuffer.html?is-external=true" title="class or interface in java.nio">MappedByteBuffer</A> <B>map</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;file)
-                            throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Fully maps a file read-only in to memory as per
- <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/channels/FileChannel.html?is-external=true#map(java.nio.channels.FileChannel.MapMode, long, long)" title="class or interface in java.nio.channels"><CODE>FileChannel.map(java.nio.channels.FileChannel.MapMode, long, long)</CODE></A>.
-
- <p>Files are mapped from offset 0 to its length.
-
- <p>This only works for files <= <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true#MAX_VALUE" title="class or interface in java.lang"><CODE>Integer.MAX_VALUE</CODE></A> bytes.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>file</CODE> - the file to map
-<DT><B>Returns:</B><DD>a read-only buffer reflecting <code>file</code>
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/FileNotFoundException.html?is-external=true" title="class or interface in java.io">FileNotFoundException</A></CODE> - if the <code>file</code> does not exist
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if an I/O error occurs<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>tentative</b></DD>
-<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/nio/channels/FileChannel.html?is-external=true#map(java.nio.channels.FileChannel.MapMode, long, long)" title="class or interface in java.nio.channels"><CODE>FileChannel.map(MapMode, long, long)</CODE></A></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="map(java.io.File, java.nio.channels.FileChannel.MapMode)"><!-- --></A><H3>
-map</H3>
-<PRE>
-public static <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/MappedByteBuffer.html?is-external=true" title="class or interface in java.nio">MappedByteBuffer</A> <B>map</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;file,
-                                   <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/channels/FileChannel.MapMode.html?is-external=true" title="class or interface in java.nio.channels">FileChannel.MapMode</A>&nbsp;mode)
-                            throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Fully maps a file in to memory as per
- <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/channels/FileChannel.html?is-external=true#map(java.nio.channels.FileChannel.MapMode, long, long)" title="class or interface in java.nio.channels"><CODE>FileChannel.map(java.nio.channels.FileChannel.MapMode, long, long)</CODE></A>
- using the requested <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/channels/FileChannel.MapMode.html?is-external=true" title="class or interface in java.nio.channels"><CODE>FileChannel.MapMode</CODE></A>.
-
- <p>Files are mapped from offset 0 to its length.
-
- <p>This only works for files <= <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true#MAX_VALUE" title="class or interface in java.lang"><CODE>Integer.MAX_VALUE</CODE></A> bytes.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>file</CODE> - the file to map<DD><CODE>mode</CODE> - the mode to use when mapping <code>file</code>
-<DT><B>Returns:</B><DD>a buffer reflecting <code>file</code>
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/FileNotFoundException.html?is-external=true" title="class or interface in java.io">FileNotFoundException</A></CODE> - if the <code>file</code> does not exist
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if an I/O error occurs<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>tentative</b></DD>
-<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/nio/channels/FileChannel.html?is-external=true#map(java.nio.channels.FileChannel.MapMode, long, long)" title="class or interface in java.nio.channels"><CODE>FileChannel.map(MapMode, long, long)</CODE></A></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="map(java.io.File, java.nio.channels.FileChannel.MapMode, long)"><!-- --></A><H3>
-map</H3>
-<PRE>
-public static <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/MappedByteBuffer.html?is-external=true" title="class or interface in java.nio">MappedByteBuffer</A> <B>map</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;file,
-                                   <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/channels/FileChannel.MapMode.html?is-external=true" title="class or interface in java.nio.channels">FileChannel.MapMode</A>&nbsp;mode,
-                                   long&nbsp;size)
-                            throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/FileNotFoundException.html?is-external=true" title="class or interface in java.io">FileNotFoundException</A>,
-                                   <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Maps a file in to memory as per
- <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/channels/FileChannel.html?is-external=true#map(java.nio.channels.FileChannel.MapMode, long, long)" title="class or interface in java.nio.channels"><CODE>FileChannel.map(java.nio.channels.FileChannel.MapMode, long, long)</CODE></A>
- using the requested <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/channels/FileChannel.MapMode.html?is-external=true" title="class or interface in java.nio.channels"><CODE>FileChannel.MapMode</CODE></A>.
-
- <p>Files are mapped from offset 0 to <code>size</code>.
-
- <p>If the mode is <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/channels/FileChannel.MapMode.html?is-external=true#READ_WRITE" title="class or interface in java.nio.channels"><CODE>FileChannel.MapMode.READ_WRITE</CODE></A> and the file does not exist,
- it will be created with the requested <code>size</code>. Thus this method is
- useful for creating memory mapped files which do not yet exist.
-
- <p>This only works for files <= <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true#MAX_VALUE" title="class or interface in java.lang"><CODE>Integer.MAX_VALUE</CODE></A> bytes.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>file</CODE> - the file to map<DD><CODE>mode</CODE> - the mode to use when mapping <code>file</code>
-<DT><B>Returns:</B><DD>a buffer reflecting <code>file</code>
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if an I/O error occurs
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/FileNotFoundException.html?is-external=true" title="class or interface in java.io">FileNotFoundException</A></CODE><DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>tentative</b></DD>
-<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/nio/channels/FileChannel.html?is-external=true#map(java.nio.channels.FileChannel.MapMode, long, long)" title="class or interface in java.nio.channels"><CODE>FileChannel.map(MapMode, long, long)</CODE></A></DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Files.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/io/FileBackedOutputStream.html" title="class in com.google.common.io"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/io/Flushables.html" title="class in com.google.common.io"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/io/Files.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Files.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/io/Flushables.html b/javadoc/com/google/common/io/Flushables.html
deleted file mode 100644
index 67ddb4f..0000000
--- a/javadoc/com/google/common/io/Flushables.html
+++ /dev/null
@@ -1,266 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:59 PST 2010 -->
-<TITLE>
-Flushables (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Flushables (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Flushables.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/io/Files.html" title="class in com.google.common.io"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/io/Flushables.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Flushables.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.io</FONT>
-<BR>
-Class Flushables</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.io.Flushables</B>
-</PRE>
-<HR>
-<DL>
-<DT><PRE>public final class <B>Flushables</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
-</PRE>
-
-<P>
-Utility methods for working with <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Flushable.html?is-external=true" title="class or interface in java.io"><CODE>Flushable</CODE></A> objects.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2009.09.15 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Michael Lancaster</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/Flushables.html#flush(java.io.Flushable, boolean)">flush</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/Flushable.html?is-external=true" title="class or interface in java.io">Flushable</A>&nbsp;flushable,
-      boolean&nbsp;swallowIOException)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Flush a <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Flushable.html?is-external=true" title="class or interface in java.io"><CODE>Flushable</CODE></A>, with control over whether an
- <code>IOException</code> may be thrown.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/Flushables.html#flushQuietly(java.io.Flushable)">flushQuietly</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/Flushable.html?is-external=true" title="class or interface in java.io">Flushable</A>&nbsp;flushable)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Equivalent to calling <code>flush(flushable, true)</code>, but with no
- <code>IOException</code> in the signature.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="flush(java.io.Flushable, boolean)"><!-- --></A><H3>
-flush</H3>
-<PRE>
-public static void <B>flush</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/Flushable.html?is-external=true" title="class or interface in java.io">Flushable</A>&nbsp;flushable,
-                         boolean&nbsp;swallowIOException)
-                  throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Flush a <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Flushable.html?is-external=true" title="class or interface in java.io"><CODE>Flushable</CODE></A>, with control over whether an
- <code>IOException</code> may be thrown.
-
- <p>If <code>swallowIOException</code> is true, then we don't rethrow
- <code>IOException</code>, but merely log it.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>flushable</CODE> - the <code>Flushable</code> object to be flushed.<DD><CODE>swallowIOException</CODE> - if true, don't propagate IO exceptions
-     thrown by the <code>flush</code> method
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if <code>swallowIOException</code> is false and
-     <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Flushable.html?is-external=true#flush()" title="class or interface in java.io"><CODE>Flushable.flush()</CODE></A> throws an <code>IOException</code>.<DT><B>See Also:</B><DD><A HREF="../../../../com/google/common/io/Closeables.html#close(java.io.Closeable, boolean)"><CODE>Closeables.close(java.io.Closeable, boolean)</CODE></A></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="flushQuietly(java.io.Flushable)"><!-- --></A><H3>
-flushQuietly</H3>
-<PRE>
-public static void <B>flushQuietly</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/Flushable.html?is-external=true" title="class or interface in java.io">Flushable</A>&nbsp;flushable)</PRE>
-<DL>
-<DD>Equivalent to calling <code>flush(flushable, true)</code>, but with no
- <code>IOException</code> in the signature.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>flushable</CODE> - the <code>Flushable</code> object to be flushed.</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Flushables.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/io/Files.html" title="class in com.google.common.io"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/io/Flushables.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Flushables.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/io/InputSupplier.html b/javadoc/com/google/common/io/InputSupplier.html
deleted file mode 100644
index d83b5c7..0000000
--- a/javadoc/com/google/common/io/InputSupplier.html
+++ /dev/null
@@ -1,219 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:59 PST 2010 -->
-<TITLE>
-InputSupplier (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="InputSupplier (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/InputSupplier.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/io/Flushables.html" title="class in com.google.common.io"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/io/LimitInputStream.html" title="class in com.google.common.io"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/io/InputSupplier.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="InputSupplier.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.io</FONT>
-<BR>
-Interface InputSupplier&lt;T&gt;</H2>
-<HR>
-<DL>
-<DT><PRE>public interface <B>InputSupplier&lt;T&gt;</B></DL>
-</PRE>
-
-<P>
-A factory for readable streams of bytes or characters.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2009.09.15 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Chris Nokleberg</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/io/InputSupplier.html" title="type parameter in InputSupplier">T</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/InputSupplier.html#getInput()">getInput</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="getInput()"><!-- --></A><H3>
-getInput</H3>
-<PRE>
-<A HREF="../../../../com/google/common/io/InputSupplier.html" title="type parameter in InputSupplier">T</A> <B>getInput</B>()
-           throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/InputSupplier.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/io/Flushables.html" title="class in com.google.common.io"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/io/LimitInputStream.html" title="class in com.google.common.io"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/io/InputSupplier.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="InputSupplier.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/io/LimitInputStream.html b/javadoc/com/google/common/io/LimitInputStream.html
deleted file mode 100644
index 5e1c5f7..0000000
--- a/javadoc/com/google/common/io/LimitInputStream.html
+++ /dev/null
@@ -1,432 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:59 PST 2010 -->
-<TITLE>
-LimitInputStream (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="LimitInputStream (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/LimitInputStream.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/io/LineProcessor.html" title="interface in com.google.common.io"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/io/LimitInputStream.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="LimitInputStream.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_java.io.FilterInputStream">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.io</FONT>
-<BR>
-Class LimitInputStream</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">java.io.InputStream</A>
-      <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilterInputStream.html?is-external=true" title="class or interface in java.io">java.io.FilterInputStream</A>
-          <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.io.LimitInputStream</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public class <B>LimitInputStream</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilterInputStream.html?is-external=true" title="class or interface in java.io">FilterInputStream</A></DL>
-</PRE>
-
-<P>
-An InputStream that limits the number of bytes which can be read.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2009.09.15 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Charles Fry</DD>
-</DL>
-<HR>
-
-<P>
-<!-- =========== FIELD SUMMARY =========== -->
-
-<A NAME="field_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Field Summary</B></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;<A NAME="fields_inherited_from_class_java.io.FilterInputStream"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Fields inherited from class java.io.<A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilterInputStream.html?is-external=true" title="class or interface in java.io">FilterInputStream</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilterInputStream.html?is-external=true#in" title="class or interface in java.io">in</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/google/common/io/LimitInputStream.html#LimitInputStream(java.io.InputStream, long)">LimitInputStream</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&nbsp;in,
-                 long&nbsp;limit)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Wraps another input stream, limiting the number of bytes which can be read.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/LimitInputStream.html#available()">available</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/LimitInputStream.html#mark(int)">mark</A></B>(int&nbsp;readlimit)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/LimitInputStream.html#read()">read</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/LimitInputStream.html#read(byte[], int, int)">read</A></B>(byte[]&nbsp;b,
-     int&nbsp;off,
-     int&nbsp;len)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/LimitInputStream.html#reset()">reset</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;long</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/LimitInputStream.html#skip(long)">skip</A></B>(long&nbsp;n)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.io.FilterInputStream"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.io.<A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilterInputStream.html?is-external=true" title="class or interface in java.io">FilterInputStream</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilterInputStream.html?is-external=true#close()" title="class or interface in java.io">close</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilterInputStream.html?is-external=true#markSupported()" title="class or interface in java.io">markSupported</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilterInputStream.html?is-external=true#read(byte[])" title="class or interface in java.io">read</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="LimitInputStream(java.io.InputStream, long)"><!-- --></A><H3>
-LimitInputStream</H3>
-<PRE>
-public <B>LimitInputStream</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&nbsp;in,
-                        long&nbsp;limit)</PRE>
-<DL>
-<DD>Wraps another input stream, limiting the number of bytes which can be read.
-<P>
-<DL>
-<DT><B>Parameters:</B><DD><CODE>in</CODE> - the input stream to be wrapped<DD><CODE>limit</CODE> - the maximum number of bytes to be read</DL>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="available()"><!-- --></A><H3>
-available</H3>
-<PRE>
-public int <B>available</B>()
-              throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilterInputStream.html?is-external=true#available()" title="class or interface in java.io">available</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilterInputStream.html?is-external=true" title="class or interface in java.io">FilterInputStream</A></CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="mark(int)"><!-- --></A><H3>
-mark</H3>
-<PRE>
-public void <B>mark</B>(int&nbsp;readlimit)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilterInputStream.html?is-external=true#mark(int)" title="class or interface in java.io">mark</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilterInputStream.html?is-external=true" title="class or interface in java.io">FilterInputStream</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="read()"><!-- --></A><H3>
-read</H3>
-<PRE>
-public int <B>read</B>()
-         throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilterInputStream.html?is-external=true#read()" title="class or interface in java.io">read</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilterInputStream.html?is-external=true" title="class or interface in java.io">FilterInputStream</A></CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="read(byte[], int, int)"><!-- --></A><H3>
-read</H3>
-<PRE>
-public int <B>read</B>(byte[]&nbsp;b,
-                int&nbsp;off,
-                int&nbsp;len)
-         throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilterInputStream.html?is-external=true#read(byte[], int, int)" title="class or interface in java.io">read</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilterInputStream.html?is-external=true" title="class or interface in java.io">FilterInputStream</A></CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="reset()"><!-- --></A><H3>
-reset</H3>
-<PRE>
-public void <B>reset</B>()
-           throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilterInputStream.html?is-external=true#reset()" title="class or interface in java.io">reset</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilterInputStream.html?is-external=true" title="class or interface in java.io">FilterInputStream</A></CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="skip(long)"><!-- --></A><H3>
-skip</H3>
-<PRE>
-public long <B>skip</B>(long&nbsp;n)
-          throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilterInputStream.html?is-external=true#skip(long)" title="class or interface in java.io">skip</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilterInputStream.html?is-external=true" title="class or interface in java.io">FilterInputStream</A></CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/LimitInputStream.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/io/LineProcessor.html" title="interface in com.google.common.io"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/io/LimitInputStream.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="LimitInputStream.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_java.io.FilterInputStream">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/io/LineProcessor.html b/javadoc/com/google/common/io/LineProcessor.html
deleted file mode 100644
index 6d1a412..0000000
--- a/javadoc/com/google/common/io/LineProcessor.html
+++ /dev/null
@@ -1,246 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:59 PST 2010 -->
-<TITLE>
-LineProcessor (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="LineProcessor (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/LineProcessor.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/io/LimitInputStream.html" title="class in com.google.common.io"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/io/LineReader.html" title="class in com.google.common.io"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/io/LineProcessor.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="LineProcessor.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.io</FONT>
-<BR>
-Interface LineProcessor&lt;T&gt;</H2>
-<HR>
-<DL>
-<DT><PRE>public interface <B>LineProcessor&lt;T&gt;</B></DL>
-</PRE>
-
-<P>
-A callback to be used with the streaming <code>readLines</code> methods.
-
- <p><A HREF="../../../../com/google/common/io/LineProcessor.html#processLine(java.lang.String)"><CODE>processLine(java.lang.String)</CODE></A> will be called for each line that is read, and
- should return <code>false</code> when you want to stop processing.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2009.09.15 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Miles Barr</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/io/LineProcessor.html" title="type parameter in LineProcessor">T</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/LineProcessor.html#getResult()">getResult</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the result of processing all the lines.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/LineProcessor.html#processLine(java.lang.String)">processLine</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;line)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This method will be called once for each line.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="processLine(java.lang.String)"><!-- --></A><H3>
-processLine</H3>
-<PRE>
-boolean <B>processLine</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;line)
-                    throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>This method will be called once for each line.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>line</CODE> - the line read from the input, without delimiter
-<DT><B>Returns:</B><DD>true to continue processing, false to stop
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getResult()"><!-- --></A><H3>
-getResult</H3>
-<PRE>
-<A HREF="../../../../com/google/common/io/LineProcessor.html" title="type parameter in LineProcessor">T</A> <B>getResult</B>()</PRE>
-<DL>
-<DD>Return the result of processing all the lines.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/LineProcessor.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/io/LimitInputStream.html" title="class in com.google.common.io"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/io/LineReader.html" title="class in com.google.common.io"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/io/LineProcessor.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="LineProcessor.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/io/LineReader.html b/javadoc/com/google/common/io/LineReader.html
deleted file mode 100644
index d6a8a43..0000000
--- a/javadoc/com/google/common/io/LineReader.html
+++ /dev/null
@@ -1,279 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:59 PST 2010 -->
-<TITLE>
-LineReader (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="LineReader (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/LineReader.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/io/LineProcessor.html" title="interface in com.google.common.io"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/io/NullOutputStream.html" title="class in com.google.common.io"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/io/LineReader.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="LineReader.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.io</FONT>
-<BR>
-Class LineReader</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.io.LineReader</B>
-</PRE>
-<HR>
-<DL>
-<DT><PRE>public final class <B>LineReader</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
-</PRE>
-
-<P>
-A class for reading lines of text. Provides the same functionality
- as <A HREF="http://java.sun.com/javase/6/docs/api/java/io/BufferedReader.html?is-external=true#readLine()" title="class or interface in java.io"><CODE>BufferedReader.readLine()</CODE></A> but for all <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang"><CODE>Readable</CODE></A>
- objects, not just instances of <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Reader.html?is-external=true" title="class or interface in java.io"><CODE>Reader</CODE></A>.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2009.09.15 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Chris Nokleberg</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/google/common/io/LineReader.html#LineReader(java.lang.Readable)">LineReader</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang">Readable</A>&nbsp;readable)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new instance that will read lines from the given
- <code>Readable</code> object.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/LineReader.html#readLine()">readLine</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reads a line of text.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="LineReader(java.lang.Readable)"><!-- --></A><H3>
-LineReader</H3>
-<PRE>
-public <B>LineReader</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang">Readable</A>&nbsp;readable)</PRE>
-<DL>
-<DD>Creates a new instance that will read lines from the given
- <code>Readable</code> object.
-<P>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="readLine()"><!-- --></A><H3>
-readLine</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>readLine</B>()
-                throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Reads a line of text. A line is considered to be terminated by any
- one of a line feed (<code>'\n'</code>), a carriage return
- (<code>'\r'</code>), or a carriage return followed immediately by a linefeed
- (<code>"\r\n"</code>).
-<P>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a <code>String</code> containing the contents of the line, not
-     including any line-termination characters, or <code>null</code> if the
-     end of the stream has been reached.
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if an I/O error occurs</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/LineReader.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/io/LineProcessor.html" title="interface in com.google.common.io"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/io/NullOutputStream.html" title="class in com.google.common.io"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/io/LineReader.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="LineReader.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/io/NullOutputStream.html b/javadoc/com/google/common/io/NullOutputStream.html
deleted file mode 100644
index c71db12..0000000
--- a/javadoc/com/google/common/io/NullOutputStream.html
+++ /dev/null
@@ -1,308 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:59 PST 2010 -->
-<TITLE>
-NullOutputStream (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="NullOutputStream (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/NullOutputStream.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/io/LineReader.html" title="class in com.google.common.io"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/io/OutputSupplier.html" title="interface in com.google.common.io"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/io/NullOutputStream.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="NullOutputStream.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.io</FONT>
-<BR>
-Class NullOutputStream</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">java.io.OutputStream</A>
-      <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.io.NullOutputStream</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Flushable.html?is-external=true" title="class or interface in java.io">Flushable</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public class <B>NullOutputStream</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</A></DL>
-</PRE>
-
-<P>
-Implementation of <A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io"><CODE>OutputStream</CODE></A> that simply discards written bytes.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2009.09.15 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Spencer Kimball</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/google/common/io/NullOutputStream.html#NullOutputStream()">NullOutputStream</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/NullOutputStream.html#write(byte[], int, int)">write</A></B>(byte[]&nbsp;b,
-      int&nbsp;off,
-      int&nbsp;len)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Discards the specified byte array.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/NullOutputStream.html#write(int)">write</A></B>(int&nbsp;b)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Discards the specified byte.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.io.OutputStream"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.io.<A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true#close()" title="class or interface in java.io">close</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true#flush()" title="class or interface in java.io">flush</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true#write(byte[])" title="class or interface in java.io">write</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="NullOutputStream()"><!-- --></A><H3>
-NullOutputStream</H3>
-<PRE>
-public <B>NullOutputStream</B>()</PRE>
-<DL>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="write(int)"><!-- --></A><H3>
-write</H3>
-<PRE>
-public void <B>write</B>(int&nbsp;b)</PRE>
-<DL>
-<DD>Discards the specified byte.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true#write(int)" title="class or interface in java.io">write</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="write(byte[], int, int)"><!-- --></A><H3>
-write</H3>
-<PRE>
-public void <B>write</B>(byte[]&nbsp;b,
-                  int&nbsp;off,
-                  int&nbsp;len)</PRE>
-<DL>
-<DD>Discards the specified byte array.
-<P>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true#write(byte[], int, int)" title="class or interface in java.io">write</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/NullOutputStream.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/io/LineReader.html" title="class in com.google.common.io"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/io/OutputSupplier.html" title="interface in com.google.common.io"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/io/NullOutputStream.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="NullOutputStream.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/io/OutputSupplier.html b/javadoc/com/google/common/io/OutputSupplier.html
deleted file mode 100644
index 61edff5..0000000
--- a/javadoc/com/google/common/io/OutputSupplier.html
+++ /dev/null
@@ -1,219 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:59 PST 2010 -->
-<TITLE>
-OutputSupplier (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="OutputSupplier (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/OutputSupplier.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/io/NullOutputStream.html" title="class in com.google.common.io"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/io/PatternFilenameFilter.html" title="class in com.google.common.io"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/io/OutputSupplier.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="OutputSupplier.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.io</FONT>
-<BR>
-Interface OutputSupplier&lt;T&gt;</H2>
-<HR>
-<DL>
-<DT><PRE>public interface <B>OutputSupplier&lt;T&gt;</B></DL>
-</PRE>
-
-<P>
-An factory for writable streams of bytes or characters.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2009.09.15 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Chris Nokleberg</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../com/google/common/io/OutputSupplier.html" title="type parameter in OutputSupplier">T</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/OutputSupplier.html#getOutput()">getOutput</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="getOutput()"><!-- --></A><H3>
-getOutput</H3>
-<PRE>
-<A HREF="../../../../com/google/common/io/OutputSupplier.html" title="type parameter in OutputSupplier">T</A> <B>getOutput</B>()
-            throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/OutputSupplier.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/io/NullOutputStream.html" title="class in com.google.common.io"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/io/PatternFilenameFilter.html" title="class in com.google.common.io"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/io/OutputSupplier.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="OutputSupplier.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/io/PatternFilenameFilter.html b/javadoc/com/google/common/io/PatternFilenameFilter.html
deleted file mode 100644
index d319168..0000000
--- a/javadoc/com/google/common/io/PatternFilenameFilter.html
+++ /dev/null
@@ -1,294 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:59 PST 2010 -->
-<TITLE>
-PatternFilenameFilter (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="PatternFilenameFilter (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/PatternFilenameFilter.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/io/OutputSupplier.html" title="interface in com.google.common.io"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/io/Resources.html" title="class in com.google.common.io"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/io/PatternFilenameFilter.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="PatternFilenameFilter.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.io</FONT>
-<BR>
-Class PatternFilenameFilter</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.io.PatternFilenameFilter</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilenameFilter.html?is-external=true" title="class or interface in java.io">FilenameFilter</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public final class <B>PatternFilenameFilter</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A><DT>implements <A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilenameFilter.html?is-external=true" title="class or interface in java.io">FilenameFilter</A></DL>
-</PRE>
-
-<P>
-File name filter that only accepts files matching a regular expression.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2009.09.15 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Apple Chow</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/google/common/io/PatternFilenameFilter.html#PatternFilenameFilter(java.util.regex.Pattern)">PatternFilenameFilter</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</A>&nbsp;pattern)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a pattern file name filter object.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/google/common/io/PatternFilenameFilter.html#PatternFilenameFilter(java.lang.String)">PatternFilenameFilter</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;patternStr)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a pattern file name filter object.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/PatternFilenameFilter.html#accept(java.io.File, java.lang.String)">accept</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;dir,
-       <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;fileName)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="PatternFilenameFilter(java.lang.String)"><!-- --></A><H3>
-PatternFilenameFilter</H3>
-<PRE>
-public <B>PatternFilenameFilter</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;patternStr)</PRE>
-<DL>
-<DD>Constructs a pattern file name filter object.
-<P>
-<DL>
-<DT><B>Parameters:</B><DD><CODE>patternStr</CODE> - the pattern string on which to filter file names
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/regex/PatternSyntaxException.html?is-external=true" title="class or interface in java.util.regex">PatternSyntaxException</A></CODE> - if pattern compilation fails (runtime)</DL>
-</DL>
-<HR>
-
-<A NAME="PatternFilenameFilter(java.util.regex.Pattern)"><!-- --></A><H3>
-PatternFilenameFilter</H3>
-<PRE>
-public <B>PatternFilenameFilter</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</A>&nbsp;pattern)</PRE>
-<DL>
-<DD>Constructs a pattern file name filter object.
-<P>
-<DL>
-<DT><B>Parameters:</B><DD><CODE>pattern</CODE> - the pattern on which to filter file names</DL>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="accept(java.io.File, java.lang.String)"><!-- --></A><H3>
-accept</H3>
-<PRE>
-public boolean <B>accept</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;dir,
-                      <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;fileName)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilenameFilter.html?is-external=true#accept(java.io.File, java.lang.String)" title="class or interface in java.io">accept</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilenameFilter.html?is-external=true" title="class or interface in java.io">FilenameFilter</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/PatternFilenameFilter.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/io/OutputSupplier.html" title="interface in com.google.common.io"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/io/Resources.html" title="class in com.google.common.io"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/io/PatternFilenameFilter.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="PatternFilenameFilter.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/io/Resources.html b/javadoc/com/google/common/io/Resources.html
deleted file mode 100644
index 573b59b..0000000
--- a/javadoc/com/google/common/io/Resources.html
+++ /dev/null
@@ -1,497 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:59 PST 2010 -->
-<TITLE>
-Resources (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Resources (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Resources.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/io/PatternFilenameFilter.html" title="class in com.google.common.io"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;NEXT CLASS</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/io/Resources.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Resources.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.io</FONT>
-<BR>
-Class Resources</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.io.Resources</B>
-</PRE>
-<HR>
-<DL>
-<DT><PRE>public final class <B>Resources</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
-</PRE>
-
-<P>
-Provides utility methods for working with resources in the classpath.
- Note that even those these methods use <A HREF="http://java.sun.com/javase/6/docs/api/java/net/URL.html?is-external=true" title="class or interface in java.net"><CODE>URL</CODE></A> parameters, they
- are usually not appropriate for HTTP or other non-classpath resources.
-
- <p>All method parameters must be non-null unless documented otherwise.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2009.09.15 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Chris Nokleberg, Ben Yu</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/google/common/io/Resources.html#Resources()">Resources</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/Resources.html#copy(java.net.URL, java.io.OutputStream)">copy</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/net/URL.html?is-external=true" title="class or interface in java.net">URL</A>&nbsp;from,
-     <A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</A>&nbsp;to)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies all bytes from a URL to an output stream.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/net/URL.html?is-external=true" title="class or interface in java.net">URL</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/Resources.html#getResource(java.lang.Class, java.lang.String)">getResource</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;?&gt;&nbsp;contextClass,
-            <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;resourceName)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a <code>URL</code> pointing to <code>resourceName</code> that is relative to
- <code>contextClass</code>, if the resource is found in the class path.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/net/URL.html?is-external=true" title="class or interface in java.net">URL</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/Resources.html#getResource(java.lang.String)">getResource</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;resourceName)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a <code>URL</code> pointing to <code>resourceName</code> if the resource is
- found in the class path.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/Resources.html#newInputStreamSupplier(java.net.URL)">newInputStreamSupplier</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/net/URL.html?is-external=true" title="class or interface in java.net">URL</A>&nbsp;url)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a factory that will supply instances of <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io"><CODE>InputStream</CODE></A> that
- read from the given URL.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStreamReader.html?is-external=true" title="class or interface in java.io">InputStreamReader</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/Resources.html#newReaderSupplier(java.net.URL, java.nio.charset.Charset)">newReaderSupplier</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/net/URL.html?is-external=true" title="class or interface in java.net">URL</A>&nbsp;url,
-                  <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A>&nbsp;charset)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a factory that will supply instances of
- <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStreamReader.html?is-external=true" title="class or interface in java.io"><CODE>InputStreamReader</CODE></A> that read a URL using the given character set.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/Resources.html#readLines(java.net.URL, java.nio.charset.Charset)">readLines</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/net/URL.html?is-external=true" title="class or interface in java.net">URL</A>&nbsp;url,
-          <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A>&nbsp;charset)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reads all of the lines from a URL.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; T</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/Resources.html#readLines(java.net.URL, java.nio.charset.Charset, com.google.common.io.LineProcessor)">readLines</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/net/URL.html?is-external=true" title="class or interface in java.net">URL</A>&nbsp;url,
-          <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A>&nbsp;charset,
-          <A HREF="../../../../com/google/common/io/LineProcessor.html" title="interface in com.google.common.io">LineProcessor</A>&lt;T&gt;&nbsp;callback)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Streams lines from a URL, stopping when our callback returns false, or we
- have read all of the lines.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;byte[]</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/Resources.html#toByteArray(java.net.URL)">toByteArray</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/net/URL.html?is-external=true" title="class or interface in java.net">URL</A>&nbsp;url)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reads all bytes from a URL into a byte array.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/io/Resources.html#toString(java.net.URL, java.nio.charset.Charset)">toString</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/net/URL.html?is-external=true" title="class or interface in java.net">URL</A>&nbsp;url,
-         <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A>&nbsp;charset)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reads all characters from a URL into a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang"><CODE>String</CODE></A>, using the given
- character set.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="Resources()"><!-- --></A><H3>
-Resources</H3>
-<PRE>
-public <B>Resources</B>()</PRE>
-<DL>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="newInputStreamSupplier(java.net.URL)"><!-- --></A><H3>
-newInputStreamSupplier</H3>
-<PRE>
-public static <A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt; <B>newInputStreamSupplier</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/net/URL.html?is-external=true" title="class or interface in java.net">URL</A>&nbsp;url)</PRE>
-<DL>
-<DD>Returns a factory that will supply instances of <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io"><CODE>InputStream</CODE></A> that
- read from the given URL.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>url</CODE> - the URL to read from
-<DT><B>Returns:</B><DD>the factory</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="newReaderSupplier(java.net.URL, java.nio.charset.Charset)"><!-- --></A><H3>
-newReaderSupplier</H3>
-<PRE>
-public static <A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStreamReader.html?is-external=true" title="class or interface in java.io">InputStreamReader</A>&gt; <B>newReaderSupplier</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/net/URL.html?is-external=true" title="class or interface in java.net">URL</A>&nbsp;url,
-                                                                 <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A>&nbsp;charset)</PRE>
-<DL>
-<DD>Returns a factory that will supply instances of
- <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStreamReader.html?is-external=true" title="class or interface in java.io"><CODE>InputStreamReader</CODE></A> that read a URL using the given character set.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>url</CODE> - the URL to read from<DD><CODE>charset</CODE> - the character set used when reading the URL contents
-<DT><B>Returns:</B><DD>the factory</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toByteArray(java.net.URL)"><!-- --></A><H3>
-toByteArray</H3>
-<PRE>
-public static byte[] <B>toByteArray</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/net/URL.html?is-external=true" title="class or interface in java.net">URL</A>&nbsp;url)
-                          throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Reads all bytes from a URL into a byte array.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>url</CODE> - the URL to read from
-<DT><B>Returns:</B><DD>a byte array containing all the bytes from the URL
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if an I/O error occurs</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toString(java.net.URL, java.nio.charset.Charset)"><!-- --></A><H3>
-toString</H3>
-<PRE>
-public static <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>toString</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/net/URL.html?is-external=true" title="class or interface in java.net">URL</A>&nbsp;url,
-                              <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A>&nbsp;charset)
-                       throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Reads all characters from a URL into a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang"><CODE>String</CODE></A>, using the given
- character set.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>url</CODE> - the URL to read from<DD><CODE>charset</CODE> - the character set used when reading the URL
-<DT><B>Returns:</B><DD>a string containing all the characters from the URL
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if an I/O error occurs.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="readLines(java.net.URL, java.nio.charset.Charset, com.google.common.io.LineProcessor)"><!-- --></A><H3>
-readLines</H3>
-<PRE>
-public static &lt;T&gt; T <B>readLines</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/net/URL.html?is-external=true" title="class or interface in java.net">URL</A>&nbsp;url,
-                              <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A>&nbsp;charset,
-                              <A HREF="../../../../com/google/common/io/LineProcessor.html" title="interface in com.google.common.io">LineProcessor</A>&lt;T&gt;&nbsp;callback)
-                   throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Streams lines from a URL, stopping when our callback returns false, or we
- have read all of the lines.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>url</CODE> - the URL to read from<DD><CODE>charset</CODE> - the character set used when reading the URL<DD><CODE>callback</CODE> - the LineProcessor to use to handle the lines
-<DT><B>Returns:</B><DD>the output of processing the lines
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if an I/O error occurs</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="readLines(java.net.URL, java.nio.charset.Charset)"><!-- --></A><H3>
-readLines</H3>
-<PRE>
-public static <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&gt; <B>readLines</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/net/URL.html?is-external=true" title="class or interface in java.net">URL</A>&nbsp;url,
-                                     <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A>&nbsp;charset)
-                              throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Reads all of the lines from a URL. The lines do not include
- line-termination characters, but do include other leading and trailing
- whitespace.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>url</CODE> - the URL to read from<DD><CODE>charset</CODE> - the character set used when writing the file
-<DT><B>Returns:</B><DD>a mutable <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util"><CODE>List</CODE></A> containing all the lines
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if an I/O error occurs</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="copy(java.net.URL, java.io.OutputStream)"><!-- --></A><H3>
-copy</H3>
-<PRE>
-public static void <B>copy</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/net/URL.html?is-external=true" title="class or interface in java.net">URL</A>&nbsp;from,
-                        <A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</A>&nbsp;to)
-                 throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD>Copies all bytes from a URL to an output stream.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>from</CODE> - the URL to read from<DD><CODE>to</CODE> - the output stream
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE> - if an I/O error occurs</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getResource(java.lang.String)"><!-- --></A><H3>
-getResource</H3>
-<PRE>
-public static <A HREF="http://java.sun.com/javase/6/docs/api/java/net/URL.html?is-external=true" title="class or interface in java.net">URL</A> <B>getResource</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;resourceName)</PRE>
-<DL>
-<DD>Returns a <code>URL</code> pointing to <code>resourceName</code> if the resource is
- found in the class path. <code>Resources.class.getClassLoader()</code> is used
- to locate the resource.
-<P>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if resource is not found</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getResource(java.lang.Class, java.lang.String)"><!-- --></A><H3>
-getResource</H3>
-<PRE>
-public static <A HREF="http://java.sun.com/javase/6/docs/api/java/net/URL.html?is-external=true" title="class or interface in java.net">URL</A> <B>getResource</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;?&gt;&nbsp;contextClass,
-                              <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;resourceName)</PRE>
-<DL>
-<DD>Returns a <code>URL</code> pointing to <code>resourceName</code> that is relative to
- <code>contextClass</code>, if the resource is found in the class path.
-<P>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if resource is not found</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Resources.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/io/PatternFilenameFilter.html" title="class in com.google.common.io"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;NEXT CLASS</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/io/Resources.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Resources.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/io/class-use/ByteArrayDataInput.html b/javadoc/com/google/common/io/class-use/ByteArrayDataInput.html
deleted file mode 100644
index c0980ad..0000000
--- a/javadoc/com/google/common/io/class-use/ByteArrayDataInput.html
+++ /dev/null
@@ -1,189 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Interface com.google.common.io.ByteArrayDataInput (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Interface com.google.common.io.ByteArrayDataInput (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/io/ByteArrayDataInput.html" title="interface in com.google.common.io"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/io//class-useByteArrayDataInput.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ByteArrayDataInput.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Interface<br>com.google.common.io.ByteArrayDataInput</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/io/ByteArrayDataInput.html" title="interface in com.google.common.io">ByteArrayDataInput</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.io"><B>com.google.common.io</B></A></TD>
-<TD>&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.io"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/io/ByteArrayDataInput.html" title="interface in com.google.common.io">ByteArrayDataInput</A> in <A HREF="../../../../../com/google/common/io/package-summary.html">com.google.common.io</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/io/package-summary.html">com.google.common.io</A> that return <A HREF="../../../../../com/google/common/io/ByteArrayDataInput.html" title="interface in com.google.common.io">ByteArrayDataInput</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/io/ByteArrayDataInput.html" title="interface in com.google.common.io">ByteArrayDataInput</A></CODE></FONT></TD>
-<TD><CODE><B>ByteStreams.</B><B><A HREF="../../../../../com/google/common/io/ByteStreams.html#newDataInput(byte[])">newDataInput</A></B>(byte[]&nbsp;bytes)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new <A HREF="../../../../../com/google/common/io/ByteArrayDataInput.html" title="interface in com.google.common.io"><CODE>ByteArrayDataInput</CODE></A> instance to read from the <code>bytes</code> array from the beginning.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/io/ByteArrayDataInput.html" title="interface in com.google.common.io">ByteArrayDataInput</A></CODE></FONT></TD>
-<TD><CODE><B>ByteStreams.</B><B><A HREF="../../../../../com/google/common/io/ByteStreams.html#newDataInput(byte[], int)">newDataInput</A></B>(byte[]&nbsp;bytes,
-             int&nbsp;start)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new <A HREF="../../../../../com/google/common/io/ByteArrayDataInput.html" title="interface in com.google.common.io"><CODE>ByteArrayDataInput</CODE></A> instance to read from the <code>bytes</code> array, starting at the given position.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/io/ByteArrayDataInput.html" title="interface in com.google.common.io"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/io//class-useByteArrayDataInput.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ByteArrayDataInput.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/io/class-use/ByteArrayDataOutput.html b/javadoc/com/google/common/io/class-use/ByteArrayDataOutput.html
deleted file mode 100644
index cc3792c..0000000
--- a/javadoc/com/google/common/io/class-use/ByteArrayDataOutput.html
+++ /dev/null
@@ -1,189 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Interface com.google.common.io.ByteArrayDataOutput (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Interface com.google.common.io.ByteArrayDataOutput (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/io/ByteArrayDataOutput.html" title="interface in com.google.common.io"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/io//class-useByteArrayDataOutput.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ByteArrayDataOutput.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Interface<br>com.google.common.io.ByteArrayDataOutput</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/io/ByteArrayDataOutput.html" title="interface in com.google.common.io">ByteArrayDataOutput</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.io"><B>com.google.common.io</B></A></TD>
-<TD>&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.io"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/io/ByteArrayDataOutput.html" title="interface in com.google.common.io">ByteArrayDataOutput</A> in <A HREF="../../../../../com/google/common/io/package-summary.html">com.google.common.io</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/io/package-summary.html">com.google.common.io</A> that return <A HREF="../../../../../com/google/common/io/ByteArrayDataOutput.html" title="interface in com.google.common.io">ByteArrayDataOutput</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/io/ByteArrayDataOutput.html" title="interface in com.google.common.io">ByteArrayDataOutput</A></CODE></FONT></TD>
-<TD><CODE><B>ByteStreams.</B><B><A HREF="../../../../../com/google/common/io/ByteStreams.html#newDataOutput()">newDataOutput</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new <A HREF="../../../../../com/google/common/io/ByteArrayDataOutput.html" title="interface in com.google.common.io"><CODE>ByteArrayDataOutput</CODE></A> instance with a default size.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/io/ByteArrayDataOutput.html" title="interface in com.google.common.io">ByteArrayDataOutput</A></CODE></FONT></TD>
-<TD><CODE><B>ByteStreams.</B><B><A HREF="../../../../../com/google/common/io/ByteStreams.html#newDataOutput(int)">newDataOutput</A></B>(int&nbsp;size)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new <A HREF="../../../../../com/google/common/io/ByteArrayDataOutput.html" title="interface in com.google.common.io"><CODE>ByteArrayDataOutput</CODE></A> instance sized to hold
- <code>size</code> bytes before resizing.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/io/ByteArrayDataOutput.html" title="interface in com.google.common.io"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/io//class-useByteArrayDataOutput.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ByteArrayDataOutput.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/io/class-use/ByteProcessor.html b/javadoc/com/google/common/io/class-use/ByteProcessor.html
deleted file mode 100644
index 0ae76b4..0000000
--- a/javadoc/com/google/common/io/class-use/ByteProcessor.html
+++ /dev/null
@@ -1,204 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Interface com.google.common.io.ByteProcessor (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Interface com.google.common.io.ByteProcessor (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/io/ByteProcessor.html" title="interface in com.google.common.io"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/io//class-useByteProcessor.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ByteProcessor.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Interface<br>com.google.common.io.ByteProcessor</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/io/ByteProcessor.html" title="interface in com.google.common.io">ByteProcessor</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.io"><B>com.google.common.io</B></A></TD>
-<TD>&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.io"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/io/ByteProcessor.html" title="interface in com.google.common.io">ByteProcessor</A> in <A HREF="../../../../../com/google/common/io/package-summary.html">com.google.common.io</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/io/package-summary.html">com.google.common.io</A> with parameters of type <A HREF="../../../../../com/google/common/io/ByteProcessor.html" title="interface in com.google.common.io">ByteProcessor</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; T</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Files.</B><B><A HREF="../../../../../com/google/common/io/Files.html#readBytes(java.io.File, com.google.common.io.ByteProcessor)">readBytes</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;file,
-          <A HREF="../../../../../com/google/common/io/ByteProcessor.html" title="interface in com.google.common.io">ByteProcessor</A>&lt;T&gt;&nbsp;processor)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Process the bytes of a file.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; T</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ByteStreams.</B><B><A HREF="../../../../../com/google/common/io/ByteStreams.html#readBytes(com.google.common.io.InputSupplier, com.google.common.io.ByteProcessor)">readBytes</A></B>(<A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;&nbsp;supplier,
-          <A HREF="../../../../../com/google/common/io/ByteProcessor.html" title="interface in com.google.common.io">ByteProcessor</A>&lt;T&gt;&nbsp;processor)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Process the bytes of a supplied stream</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/io/ByteProcessor.html" title="interface in com.google.common.io"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/io//class-useByteProcessor.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ByteProcessor.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/io/class-use/ByteStreams.html b/javadoc/com/google/common/io/class-use/ByteStreams.html
deleted file mode 100644
index 9ba84b5..0000000
--- a/javadoc/com/google/common/io/class-use/ByteStreams.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.io.ByteStreams (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.io.ByteStreams (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/io/ByteStreams.html" title="class in com.google.common.io"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/io//class-useByteStreams.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ByteStreams.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.io.ByteStreams</B></H2>
-</CENTER>
-No usage of com.google.common.io.ByteStreams
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/io/ByteStreams.html" title="class in com.google.common.io"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/io//class-useByteStreams.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ByteStreams.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/io/class-use/CharStreams.html b/javadoc/com/google/common/io/class-use/CharStreams.html
deleted file mode 100644
index 0da92bb..0000000
--- a/javadoc/com/google/common/io/class-use/CharStreams.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.io.CharStreams (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.io.CharStreams (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/io/CharStreams.html" title="class in com.google.common.io"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/io//class-useCharStreams.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="CharStreams.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.io.CharStreams</B></H2>
-</CENTER>
-No usage of com.google.common.io.CharStreams
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/io/CharStreams.html" title="class in com.google.common.io"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/io//class-useCharStreams.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="CharStreams.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/io/class-use/Closeables.html b/javadoc/com/google/common/io/class-use/Closeables.html
deleted file mode 100644
index 3eea310..0000000
--- a/javadoc/com/google/common/io/class-use/Closeables.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.io.Closeables (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.io.Closeables (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/io/Closeables.html" title="class in com.google.common.io"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/io//class-useCloseables.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Closeables.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.io.Closeables</B></H2>
-</CENTER>
-No usage of com.google.common.io.Closeables
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/io/Closeables.html" title="class in com.google.common.io"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/io//class-useCloseables.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Closeables.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/io/class-use/CountingInputStream.html b/javadoc/com/google/common/io/class-use/CountingInputStream.html
deleted file mode 100644
index 20c07df..0000000
--- a/javadoc/com/google/common/io/class-use/CountingInputStream.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.io.CountingInputStream (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.io.CountingInputStream (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/io/CountingInputStream.html" title="class in com.google.common.io"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/io//class-useCountingInputStream.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="CountingInputStream.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.io.CountingInputStream</B></H2>
-</CENTER>
-No usage of com.google.common.io.CountingInputStream
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/io/CountingInputStream.html" title="class in com.google.common.io"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/io//class-useCountingInputStream.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="CountingInputStream.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/io/class-use/CountingOutputStream.html b/javadoc/com/google/common/io/class-use/CountingOutputStream.html
deleted file mode 100644
index a254dc1..0000000
--- a/javadoc/com/google/common/io/class-use/CountingOutputStream.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.io.CountingOutputStream (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.io.CountingOutputStream (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/io/CountingOutputStream.html" title="class in com.google.common.io"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/io//class-useCountingOutputStream.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="CountingOutputStream.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.io.CountingOutputStream</B></H2>
-</CENTER>
-No usage of com.google.common.io.CountingOutputStream
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/io/CountingOutputStream.html" title="class in com.google.common.io"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/io//class-useCountingOutputStream.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="CountingOutputStream.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/io/class-use/FileBackedOutputStream.html b/javadoc/com/google/common/io/class-use/FileBackedOutputStream.html
deleted file mode 100644
index 1a63286..0000000
--- a/javadoc/com/google/common/io/class-use/FileBackedOutputStream.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.io.FileBackedOutputStream (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.io.FileBackedOutputStream (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/io/FileBackedOutputStream.html" title="class in com.google.common.io"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/io//class-useFileBackedOutputStream.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="FileBackedOutputStream.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.io.FileBackedOutputStream</B></H2>
-</CENTER>
-No usage of com.google.common.io.FileBackedOutputStream
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/io/FileBackedOutputStream.html" title="class in com.google.common.io"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/io//class-useFileBackedOutputStream.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="FileBackedOutputStream.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/io/class-use/Files.html b/javadoc/com/google/common/io/class-use/Files.html
deleted file mode 100644
index 663a0da..0000000
--- a/javadoc/com/google/common/io/class-use/Files.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.io.Files (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.io.Files (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/io/Files.html" title="class in com.google.common.io"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/io//class-useFiles.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Files.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.io.Files</B></H2>
-</CENTER>
-No usage of com.google.common.io.Files
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/io/Files.html" title="class in com.google.common.io"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/io//class-useFiles.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Files.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/io/class-use/Flushables.html b/javadoc/com/google/common/io/class-use/Flushables.html
deleted file mode 100644
index 7d439cf..0000000
--- a/javadoc/com/google/common/io/class-use/Flushables.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.io.Flushables (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.io.Flushables (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/io/Flushables.html" title="class in com.google.common.io"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/io//class-useFlushables.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Flushables.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.io.Flushables</B></H2>
-</CENTER>
-No usage of com.google.common.io.Flushables
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/io/Flushables.html" title="class in com.google.common.io"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/io//class-useFlushables.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Flushables.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/io/class-use/InputSupplier.html b/javadoc/com/google/common/io/class-use/InputSupplier.html
deleted file mode 100644
index c2caf2d..0000000
--- a/javadoc/com/google/common/io/class-use/InputSupplier.html
+++ /dev/null
@@ -1,604 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Interface com.google.common.io.InputSupplier (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Interface com.google.common.io.InputSupplier (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/io//class-useInputSupplier.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="InputSupplier.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Interface<br>com.google.common.io.InputSupplier</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.io"><B>com.google.common.io</B></A></TD>
-<TD>&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.io"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A> in <A HREF="../../../../../com/google/common/io/package-summary.html">com.google.common.io</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/io/package-summary.html">com.google.common.io</A> that return <A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>FileBackedOutputStream.</B><B><A HREF="../../../../../com/google/common/io/FileBackedOutputStream.html#getSupplier()">getSupplier</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a supplier that may be used to retrieve the data buffered
- by this stream.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ByteStreams.</B><B><A HREF="../../../../../com/google/common/io/ByteStreams.html#join(com.google.common.io.InputSupplier...)">join</A></B>(<A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;...&nbsp;suppliers)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Varargs form of <A HREF="../../../../../com/google/common/io/ByteStreams.html#join(java.lang.Iterable)"><CODE>ByteStreams.join(Iterable)</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/Reader.html?is-external=true" title="class or interface in java.io">Reader</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>CharStreams.</B><B><A HREF="../../../../../com/google/common/io/CharStreams.html#join(com.google.common.io.InputSupplier...)">join</A></B>(<A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Reader.html?is-external=true" title="class or interface in java.io">Reader</A>&gt;...&nbsp;suppliers)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Varargs form of <A HREF="../../../../../com/google/common/io/CharStreams.html#join(java.lang.Iterable)"><CODE>CharStreams.join(Iterable)</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ByteStreams.</B><B><A HREF="../../../../../com/google/common/io/ByteStreams.html#join(java.lang.Iterable)">join</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;&gt;&nbsp;suppliers)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Joins multiple <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io"><CODE>InputStream</CODE></A> suppliers into a single supplier.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/Reader.html?is-external=true" title="class or interface in java.io">Reader</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>CharStreams.</B><B><A HREF="../../../../../com/google/common/io/CharStreams.html#join(java.lang.Iterable)">join</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Reader.html?is-external=true" title="class or interface in java.io">Reader</A>&gt;&gt;&nbsp;suppliers)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Joins multiple <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Reader.html?is-external=true" title="class or interface in java.io"><CODE>Reader</CODE></A> suppliers into a single supplier.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ByteArrayInputStream.html?is-external=true" title="class or interface in java.io">ByteArrayInputStream</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ByteStreams.</B><B><A HREF="../../../../../com/google/common/io/ByteStreams.html#newInputStreamSupplier(byte[])">newInputStreamSupplier</A></B>(byte[]&nbsp;b)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a factory that will supply instances of
- <A HREF="http://java.sun.com/javase/6/docs/api/java/io/ByteArrayInputStream.html?is-external=true" title="class or interface in java.io"><CODE>ByteArrayInputStream</CODE></A> that read from the given byte array.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ByteArrayInputStream.html?is-external=true" title="class or interface in java.io">ByteArrayInputStream</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ByteStreams.</B><B><A HREF="../../../../../com/google/common/io/ByteStreams.html#newInputStreamSupplier(byte[], int, int)">newInputStreamSupplier</A></B>(byte[]&nbsp;b,
-                       int&nbsp;off,
-                       int&nbsp;len)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a factory that will supply instances of
- <A HREF="http://java.sun.com/javase/6/docs/api/java/io/ByteArrayInputStream.html?is-external=true" title="class or interface in java.io"><CODE>ByteArrayInputStream</CODE></A> that read from the given byte array.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/FileInputStream.html?is-external=true" title="class or interface in java.io">FileInputStream</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>Files.</B><B><A HREF="../../../../../com/google/common/io/Files.html#newInputStreamSupplier(java.io.File)">newInputStreamSupplier</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;file)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a factory that will supply instances of <A HREF="http://java.sun.com/javase/6/docs/api/java/io/FileInputStream.html?is-external=true" title="class or interface in java.io"><CODE>FileInputStream</CODE></A>
- that read from a file.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>Resources.</B><B><A HREF="../../../../../com/google/common/io/Resources.html#newInputStreamSupplier(java.net.URL)">newInputStreamSupplier</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/net/URL.html?is-external=true" title="class or interface in java.net">URL</A>&nbsp;url)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a factory that will supply instances of <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io"><CODE>InputStream</CODE></A> that
- read from the given URL.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStreamReader.html?is-external=true" title="class or interface in java.io">InputStreamReader</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>Files.</B><B><A HREF="../../../../../com/google/common/io/Files.html#newReaderSupplier(java.io.File, java.nio.charset.Charset)">newReaderSupplier</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;file,
-                  <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A>&nbsp;charset)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a factory that will supply instances of
- <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStreamReader.html?is-external=true" title="class or interface in java.io"><CODE>InputStreamReader</CODE></A> that read a file using the given character set.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStreamReader.html?is-external=true" title="class or interface in java.io">InputStreamReader</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>CharStreams.</B><B><A HREF="../../../../../com/google/common/io/CharStreams.html#newReaderSupplier(com.google.common.io.InputSupplier, java.nio.charset.Charset)">newReaderSupplier</A></B>(<A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;&nbsp;in,
-                  <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A>&nbsp;charset)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a factory that will supply instances of <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStreamReader.html?is-external=true" title="class or interface in java.io"><CODE>InputStreamReader</CODE></A>,
- using the given <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io"><CODE>InputStream</CODE></A> factory and character set.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/StringReader.html?is-external=true" title="class or interface in java.io">StringReader</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>CharStreams.</B><B><A HREF="../../../../../com/google/common/io/CharStreams.html#newReaderSupplier(java.lang.String)">newReaderSupplier</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a factory that will supply instances of <A HREF="http://java.sun.com/javase/6/docs/api/java/io/StringReader.html?is-external=true" title="class or interface in java.io"><CODE>StringReader</CODE></A> that
- read a string value.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStreamReader.html?is-external=true" title="class or interface in java.io">InputStreamReader</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>Resources.</B><B><A HREF="../../../../../com/google/common/io/Resources.html#newReaderSupplier(java.net.URL, java.nio.charset.Charset)">newReaderSupplier</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/net/URL.html?is-external=true" title="class or interface in java.net">URL</A>&nbsp;url,
-                  <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A>&nbsp;charset)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a factory that will supply instances of
- <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStreamReader.html?is-external=true" title="class or interface in java.io"><CODE>InputStreamReader</CODE></A> that read a URL using the given character set.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ByteStreams.</B><B><A HREF="../../../../../com/google/common/io/ByteStreams.html#slice(com.google.common.io.InputSupplier, long, long)">slice</A></B>(<A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;&nbsp;supplier,
-      long&nbsp;offset,
-      long&nbsp;length)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an <A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io"><CODE>InputSupplier</CODE></A> that returns input streams from the
- an underlying supplier, where each stream starts at the given
- offset and is limited to the specified number of bytes.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/io/package-summary.html">com.google.common.io</A> with parameters of type <A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B>Files.</B><B><A HREF="../../../../../com/google/common/io/Files.html#copy(com.google.common.io.InputSupplier, java.io.File)">copy</A></B>(<A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;&nbsp;from,
-     <A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;to)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies to a file all bytes from an <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io"><CODE>InputStream</CODE></A> supplied by a
- factory.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;long</CODE></FONT></TD>
-<TD><CODE><B>ByteStreams.</B><B><A HREF="../../../../../com/google/common/io/ByteStreams.html#copy(com.google.common.io.InputSupplier, java.io.OutputStream)">copy</A></B>(<A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;&nbsp;from,
-     <A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</A>&nbsp;to)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Opens an input stream from the supplier, copies all bytes from the
- input to the output, and closes the input stream.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;long</CODE></FONT></TD>
-<TD><CODE><B>ByteStreams.</B><B><A HREF="../../../../../com/google/common/io/ByteStreams.html#copy(com.google.common.io.InputSupplier, com.google.common.io.OutputSupplier)">copy</A></B>(<A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;&nbsp;from,
-     <A HREF="../../../../../com/google/common/io/OutputSupplier.html" title="interface in com.google.common.io">OutputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</A>&gt;&nbsp;to)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Opens input and output streams from the given suppliers, copies all
- bytes from the input to the output, and closes the streams.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;R extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang">Readable</A> & <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</A>&gt; 
-<BR>
-long</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>CharStreams.</B><B><A HREF="../../../../../com/google/common/io/CharStreams.html#copy(com.google.common.io.InputSupplier, java.lang.Appendable)">copy</A></B>(<A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;R&gt;&nbsp;from,
-     <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang">Appendable</A>&nbsp;to)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Opens a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang"><CODE>Readable</CODE></A> object from the supplier, copies all characters
- to the <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang"><CODE>Appendable</CODE></A> object, and closes the input.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;R extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang">Readable</A> & <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</A>&gt; 
-<BR>
-void</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Files.</B><B><A HREF="../../../../../com/google/common/io/Files.html#copy(com.google.common.io.InputSupplier, java.io.File, java.nio.charset.Charset)">copy</A></B>(<A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;R&gt;&nbsp;from,
-     <A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;to,
-     <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A>&nbsp;charset)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies to a file all characters from a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang"><CODE>Readable</CODE></A> and
- <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io"><CODE>Closeable</CODE></A> object supplied by a factory, using the given
- character set.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;R extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang">Readable</A> & <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</A>,W extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang">Appendable</A> & <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</A>&gt; 
-<BR>
-long</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>CharStreams.</B><B><A HREF="../../../../../com/google/common/io/CharStreams.html#copy(com.google.common.io.InputSupplier, com.google.common.io.OutputSupplier)">copy</A></B>(<A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;R&gt;&nbsp;from,
-     <A HREF="../../../../../com/google/common/io/OutputSupplier.html" title="interface in com.google.common.io">OutputSupplier</A>&lt;W&gt;&nbsp;to)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Opens <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang"><CODE>Readable</CODE></A> and <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang"><CODE>Appendable</CODE></A> objects from the
- given factories, copies all characters between the two, and closes
- them.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B>ByteStreams.</B><B><A HREF="../../../../../com/google/common/io/ByteStreams.html#equal(com.google.common.io.InputSupplier, com.google.common.io.InputSupplier)">equal</A></B>(<A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;&nbsp;supplier1,
-      <A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;&nbsp;supplier2)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns true if the supplied input streams contain the same bytes.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B>ByteStreams.</B><B><A HREF="../../../../../com/google/common/io/ByteStreams.html#equal(com.google.common.io.InputSupplier, com.google.common.io.InputSupplier)">equal</A></B>(<A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;&nbsp;supplier1,
-      <A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;&nbsp;supplier2)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns true if the supplied input streams contain the same bytes.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;long</CODE></FONT></TD>
-<TD><CODE><B>ByteStreams.</B><B><A HREF="../../../../../com/google/common/io/ByteStreams.html#getChecksum(com.google.common.io.InputSupplier, java.util.zip.Checksum)">getChecksum</A></B>(<A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;&nbsp;supplier,
-            <A HREF="http://java.sun.com/javase/6/docs/api/java/util/zip/Checksum.html?is-external=true" title="class or interface in java.util.zip">Checksum</A>&nbsp;checksum)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Computes and returns the checksum value for a supplied input stream.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;byte[]</CODE></FONT></TD>
-<TD><CODE><B>ByteStreams.</B><B><A HREF="../../../../../com/google/common/io/ByteStreams.html#getDigest(com.google.common.io.InputSupplier, java.security.MessageDigest)">getDigest</A></B>(<A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;&nbsp;supplier,
-          <A HREF="http://java.sun.com/javase/6/docs/api/java/security/MessageDigest.html?is-external=true" title="class or interface in java.security">MessageDigest</A>&nbsp;md)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Computes and returns the digest value for a supplied input stream.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ByteStreams.</B><B><A HREF="../../../../../com/google/common/io/ByteStreams.html#join(com.google.common.io.InputSupplier...)">join</A></B>(<A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;...&nbsp;suppliers)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Varargs form of <A HREF="../../../../../com/google/common/io/ByteStreams.html#join(java.lang.Iterable)"><CODE>ByteStreams.join(Iterable)</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/Reader.html?is-external=true" title="class or interface in java.io">Reader</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>CharStreams.</B><B><A HREF="../../../../../com/google/common/io/CharStreams.html#join(com.google.common.io.InputSupplier...)">join</A></B>(<A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Reader.html?is-external=true" title="class or interface in java.io">Reader</A>&gt;...&nbsp;suppliers)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Varargs form of <A HREF="../../../../../com/google/common/io/CharStreams.html#join(java.lang.Iterable)"><CODE>CharStreams.join(Iterable)</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;long</CODE></FONT></TD>
-<TD><CODE><B>ByteStreams.</B><B><A HREF="../../../../../com/google/common/io/ByteStreams.html#length(com.google.common.io.InputSupplier)">length</A></B>(<A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;&nbsp;supplier)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the length of a supplied input stream, in bytes.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStreamReader.html?is-external=true" title="class or interface in java.io">InputStreamReader</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>CharStreams.</B><B><A HREF="../../../../../com/google/common/io/CharStreams.html#newReaderSupplier(com.google.common.io.InputSupplier, java.nio.charset.Charset)">newReaderSupplier</A></B>(<A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;&nbsp;in,
-                  <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A>&nbsp;charset)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a factory that will supply instances of <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStreamReader.html?is-external=true" title="class or interface in java.io"><CODE>InputStreamReader</CODE></A>,
- using the given <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io"><CODE>InputStream</CODE></A> factory and character set.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; T</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ByteStreams.</B><B><A HREF="../../../../../com/google/common/io/ByteStreams.html#readBytes(com.google.common.io.InputSupplier, com.google.common.io.ByteProcessor)">readBytes</A></B>(<A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;&nbsp;supplier,
-          <A HREF="../../../../../com/google/common/io/ByteProcessor.html" title="interface in com.google.common.io">ByteProcessor</A>&lt;T&gt;&nbsp;processor)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Process the bytes of a supplied stream</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;R extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang">Readable</A> & <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</A>&gt; 
-<BR>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>CharStreams.</B><B><A HREF="../../../../../com/google/common/io/CharStreams.html#readFirstLine(com.google.common.io.InputSupplier)">readFirstLine</A></B>(<A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;R&gt;&nbsp;supplier)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reads the first line from a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang"><CODE>Readable</CODE></A> & <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io"><CODE>Closeable</CODE></A> object
- supplied by a factory.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;R extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang">Readable</A> & <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</A>&gt; 
-<BR>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>CharStreams.</B><B><A HREF="../../../../../com/google/common/io/CharStreams.html#readLines(com.google.common.io.InputSupplier)">readLines</A></B>(<A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;R&gt;&nbsp;supplier)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reads all of the lines from a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang"><CODE>Readable</CODE></A> & <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io"><CODE>Closeable</CODE></A> object
- supplied by a factory.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;R extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang">Readable</A> & <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</A>,T&gt; 
-<BR>
-T</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>CharStreams.</B><B><A HREF="../../../../../com/google/common/io/CharStreams.html#readLines(com.google.common.io.InputSupplier, com.google.common.io.LineProcessor)">readLines</A></B>(<A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;R&gt;&nbsp;supplier,
-          <A HREF="../../../../../com/google/common/io/LineProcessor.html" title="interface in com.google.common.io">LineProcessor</A>&lt;T&gt;&nbsp;callback)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Streams lines from a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang"><CODE>Readable</CODE></A> and <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io"><CODE>Closeable</CODE></A> object
- supplied by a factory, stopping when our callback returns false, or we
- have read all of the lines.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ByteStreams.</B><B><A HREF="../../../../../com/google/common/io/ByteStreams.html#slice(com.google.common.io.InputSupplier, long, long)">slice</A></B>(<A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;&nbsp;supplier,
-      long&nbsp;offset,
-      long&nbsp;length)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an <A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io"><CODE>InputSupplier</CODE></A> that returns input streams from the
- an underlying supplier, where each stream starts at the given
- offset and is limited to the specified number of bytes.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;byte[]</CODE></FONT></TD>
-<TD><CODE><B>ByteStreams.</B><B><A HREF="../../../../../com/google/common/io/ByteStreams.html#toByteArray(com.google.common.io.InputSupplier)">toByteArray</A></B>(<A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;&nbsp;supplier)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the data from a <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io"><CODE>InputStream</CODE></A> factory as a byte array.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;R extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang">Readable</A> & <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</A>&gt; 
-<BR>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>CharStreams.</B><B><A HREF="../../../../../com/google/common/io/CharStreams.html#toString(com.google.common.io.InputSupplier)">toString</A></B>(<A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;R&gt;&nbsp;supplier)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the characters from a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang"><CODE>Readable</CODE></A> & <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io"><CODE>Closeable</CODE></A> object
- supplied by a factory as a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang"><CODE>String</CODE></A>.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Method parameters in <A HREF="../../../../../com/google/common/io/package-summary.html">com.google.common.io</A> with type arguments of type <A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>ByteStreams.</B><B><A HREF="../../../../../com/google/common/io/ByteStreams.html#join(java.lang.Iterable)">join</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;&gt;&nbsp;suppliers)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Joins multiple <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io"><CODE>InputStream</CODE></A> suppliers into a single supplier.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/Reader.html?is-external=true" title="class or interface in java.io">Reader</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>CharStreams.</B><B><A HREF="../../../../../com/google/common/io/CharStreams.html#join(java.lang.Iterable)">join</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</A>&lt;? extends <A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Reader.html?is-external=true" title="class or interface in java.io">Reader</A>&gt;&gt;&nbsp;suppliers)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Joins multiple <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Reader.html?is-external=true" title="class or interface in java.io"><CODE>Reader</CODE></A> suppliers into a single supplier.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/io//class-useInputSupplier.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="InputSupplier.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/io/class-use/LimitInputStream.html b/javadoc/com/google/common/io/class-use/LimitInputStream.html
deleted file mode 100644
index 305f46c..0000000
--- a/javadoc/com/google/common/io/class-use/LimitInputStream.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.io.LimitInputStream (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.io.LimitInputStream (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/io/LimitInputStream.html" title="class in com.google.common.io"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/io//class-useLimitInputStream.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="LimitInputStream.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.io.LimitInputStream</B></H2>
-</CENTER>
-No usage of com.google.common.io.LimitInputStream
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/io/LimitInputStream.html" title="class in com.google.common.io"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/io//class-useLimitInputStream.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="LimitInputStream.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/io/class-use/LineProcessor.html b/javadoc/com/google/common/io/class-use/LineProcessor.html
deleted file mode 100644
index 8d1c9e8..0000000
--- a/javadoc/com/google/common/io/class-use/LineProcessor.html
+++ /dev/null
@@ -1,228 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Interface com.google.common.io.LineProcessor (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Interface com.google.common.io.LineProcessor (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/io/LineProcessor.html" title="interface in com.google.common.io"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/io//class-useLineProcessor.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="LineProcessor.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Interface<br>com.google.common.io.LineProcessor</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/io/LineProcessor.html" title="interface in com.google.common.io">LineProcessor</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.io"><B>com.google.common.io</B></A></TD>
-<TD>&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.io"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/io/LineProcessor.html" title="interface in com.google.common.io">LineProcessor</A> in <A HREF="../../../../../com/google/common/io/package-summary.html">com.google.common.io</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/io/package-summary.html">com.google.common.io</A> with parameters of type <A HREF="../../../../../com/google/common/io/LineProcessor.html" title="interface in com.google.common.io">LineProcessor</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; T</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Files.</B><B><A HREF="../../../../../com/google/common/io/Files.html#readLines(java.io.File, java.nio.charset.Charset, com.google.common.io.LineProcessor)">readLines</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;file,
-          <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A>&nbsp;charset,
-          <A HREF="../../../../../com/google/common/io/LineProcessor.html" title="interface in com.google.common.io">LineProcessor</A>&lt;T&gt;&nbsp;callback)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Streams lines from a <A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io"><CODE>File</CODE></A>, stopping when our callback returns
- false, or we have read all of the lines.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;R extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang">Readable</A> & <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</A>,T&gt; 
-<BR>
-T</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>CharStreams.</B><B><A HREF="../../../../../com/google/common/io/CharStreams.html#readLines(com.google.common.io.InputSupplier, com.google.common.io.LineProcessor)">readLines</A></B>(<A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;R&gt;&nbsp;supplier,
-          <A HREF="../../../../../com/google/common/io/LineProcessor.html" title="interface in com.google.common.io">LineProcessor</A>&lt;T&gt;&nbsp;callback)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Streams lines from a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang"><CODE>Readable</CODE></A> and <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io"><CODE>Closeable</CODE></A> object
- supplied by a factory, stopping when our callback returns false, or we
- have read all of the lines.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; T</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Resources.</B><B><A HREF="../../../../../com/google/common/io/Resources.html#readLines(java.net.URL, java.nio.charset.Charset, com.google.common.io.LineProcessor)">readLines</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/net/URL.html?is-external=true" title="class or interface in java.net">URL</A>&nbsp;url,
-          <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A>&nbsp;charset,
-          <A HREF="../../../../../com/google/common/io/LineProcessor.html" title="interface in com.google.common.io">LineProcessor</A>&lt;T&gt;&nbsp;callback)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Streams lines from a URL, stopping when our callback returns false, or we
- have read all of the lines.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/io/LineProcessor.html" title="interface in com.google.common.io"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/io//class-useLineProcessor.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="LineProcessor.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/io/class-use/LineReader.html b/javadoc/com/google/common/io/class-use/LineReader.html
deleted file mode 100644
index efe9770..0000000
--- a/javadoc/com/google/common/io/class-use/LineReader.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.io.LineReader (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.io.LineReader (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/io/LineReader.html" title="class in com.google.common.io"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/io//class-useLineReader.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="LineReader.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.io.LineReader</B></H2>
-</CENTER>
-No usage of com.google.common.io.LineReader
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/io/LineReader.html" title="class in com.google.common.io"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/io//class-useLineReader.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="LineReader.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/io/class-use/NullOutputStream.html b/javadoc/com/google/common/io/class-use/NullOutputStream.html
deleted file mode 100644
index d869eb3..0000000
--- a/javadoc/com/google/common/io/class-use/NullOutputStream.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.io.NullOutputStream (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.io.NullOutputStream (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/io/NullOutputStream.html" title="class in com.google.common.io"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/io//class-useNullOutputStream.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="NullOutputStream.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.io.NullOutputStream</B></H2>
-</CENTER>
-No usage of com.google.common.io.NullOutputStream
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/io/NullOutputStream.html" title="class in com.google.common.io"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/io//class-useNullOutputStream.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="NullOutputStream.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/io/class-use/OutputSupplier.html b/javadoc/com/google/common/io/class-use/OutputSupplier.html
deleted file mode 100644
index b97688c..0000000
--- a/javadoc/com/google/common/io/class-use/OutputSupplier.html
+++ /dev/null
@@ -1,329 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Interface com.google.common.io.OutputSupplier (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Interface com.google.common.io.OutputSupplier (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/io/OutputSupplier.html" title="interface in com.google.common.io"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/io//class-useOutputSupplier.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="OutputSupplier.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Interface<br>com.google.common.io.OutputSupplier</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/io/OutputSupplier.html" title="interface in com.google.common.io">OutputSupplier</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.io"><B>com.google.common.io</B></A></TD>
-<TD>&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.io"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../com/google/common/io/OutputSupplier.html" title="interface in com.google.common.io">OutputSupplier</A> in <A HREF="../../../../../com/google/common/io/package-summary.html">com.google.common.io</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/io/package-summary.html">com.google.common.io</A> that return <A HREF="../../../../../com/google/common/io/OutputSupplier.html" title="interface in com.google.common.io">OutputSupplier</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/io/OutputSupplier.html" title="interface in com.google.common.io">OutputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/FileOutputStream.html?is-external=true" title="class or interface in java.io">FileOutputStream</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>Files.</B><B><A HREF="../../../../../com/google/common/io/Files.html#newOutputStreamSupplier(java.io.File)">newOutputStreamSupplier</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;file)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a factory that will supply instances of <A HREF="http://java.sun.com/javase/6/docs/api/java/io/FileOutputStream.html?is-external=true" title="class or interface in java.io"><CODE>FileOutputStream</CODE></A>
- that write to a file.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/io/OutputSupplier.html" title="interface in com.google.common.io">OutputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/FileOutputStream.html?is-external=true" title="class or interface in java.io">FileOutputStream</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>Files.</B><B><A HREF="../../../../../com/google/common/io/Files.html#newOutputStreamSupplier(java.io.File, boolean)">newOutputStreamSupplier</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;file,
-                        boolean&nbsp;append)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a factory that will supply instances of <A HREF="http://java.sun.com/javase/6/docs/api/java/io/FileOutputStream.html?is-external=true" title="class or interface in java.io"><CODE>FileOutputStream</CODE></A>
- that write to or append to a file.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/io/OutputSupplier.html" title="interface in com.google.common.io">OutputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStreamWriter.html?is-external=true" title="class or interface in java.io">OutputStreamWriter</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>Files.</B><B><A HREF="../../../../../com/google/common/io/Files.html#newWriterSupplier(java.io.File, java.nio.charset.Charset)">newWriterSupplier</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;file,
-                  <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A>&nbsp;charset)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a factory that will supply instances of <A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStreamWriter.html?is-external=true" title="class or interface in java.io"><CODE>OutputStreamWriter</CODE></A>
- that write to a file using the given character set.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/io/OutputSupplier.html" title="interface in com.google.common.io">OutputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStreamWriter.html?is-external=true" title="class or interface in java.io">OutputStreamWriter</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>Files.</B><B><A HREF="../../../../../com/google/common/io/Files.html#newWriterSupplier(java.io.File, java.nio.charset.Charset, boolean)">newWriterSupplier</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;file,
-                  <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A>&nbsp;charset,
-                  boolean&nbsp;append)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a factory that will supply instances of <A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStreamWriter.html?is-external=true" title="class or interface in java.io"><CODE>OutputStreamWriter</CODE></A>
- that write to or append to a file using the given character set.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/io/OutputSupplier.html" title="interface in com.google.common.io">OutputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStreamWriter.html?is-external=true" title="class or interface in java.io">OutputStreamWriter</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>CharStreams.</B><B><A HREF="../../../../../com/google/common/io/CharStreams.html#newWriterSupplier(com.google.common.io.OutputSupplier, java.nio.charset.Charset)">newWriterSupplier</A></B>(<A HREF="../../../../../com/google/common/io/OutputSupplier.html" title="interface in com.google.common.io">OutputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</A>&gt;&nbsp;out,
-                  <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A>&nbsp;charset)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a factory that will supply instances of <A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStreamWriter.html?is-external=true" title="class or interface in java.io"><CODE>OutputStreamWriter</CODE></A>,
- using the given <A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io"><CODE>OutputStream</CODE></A> factory and character set.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../com/google/common/io/package-summary.html">com.google.common.io</A> with parameters of type <A HREF="../../../../../com/google/common/io/OutputSupplier.html" title="interface in com.google.common.io">OutputSupplier</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;W extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang">Appendable</A> & <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</A>&gt; 
-<BR>
-void</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Files.</B><B><A HREF="../../../../../com/google/common/io/Files.html#copy(java.io.File, java.nio.charset.Charset, com.google.common.io.OutputSupplier)">copy</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;from,
-     <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A>&nbsp;charset,
-     <A HREF="../../../../../com/google/common/io/OutputSupplier.html" title="interface in com.google.common.io">OutputSupplier</A>&lt;W&gt;&nbsp;to)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies all characters from a file to a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang"><CODE>Appendable</CODE></A> &
- <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io"><CODE>Closeable</CODE></A> object supplied by a factory, using the given
- character set.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B>Files.</B><B><A HREF="../../../../../com/google/common/io/Files.html#copy(java.io.File, com.google.common.io.OutputSupplier)">copy</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io">File</A>&nbsp;from,
-     <A HREF="../../../../../com/google/common/io/OutputSupplier.html" title="interface in com.google.common.io">OutputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</A>&gt;&nbsp;to)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies all bytes from a file to an <A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io"><CODE>OutputStream</CODE></A> supplied by
- a factory.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;long</CODE></FONT></TD>
-<TD><CODE><B>ByteStreams.</B><B><A HREF="../../../../../com/google/common/io/ByteStreams.html#copy(com.google.common.io.InputSupplier, com.google.common.io.OutputSupplier)">copy</A></B>(<A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</A>&gt;&nbsp;from,
-     <A HREF="../../../../../com/google/common/io/OutputSupplier.html" title="interface in com.google.common.io">OutputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</A>&gt;&nbsp;to)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Opens input and output streams from the given suppliers, copies all
- bytes from the input to the output, and closes the streams.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;R extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang">Readable</A> & <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</A>,W extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang">Appendable</A> & <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</A>&gt; 
-<BR>
-long</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>CharStreams.</B><B><A HREF="../../../../../com/google/common/io/CharStreams.html#copy(com.google.common.io.InputSupplier, com.google.common.io.OutputSupplier)">copy</A></B>(<A HREF="../../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>&lt;R&gt;&nbsp;from,
-     <A HREF="../../../../../com/google/common/io/OutputSupplier.html" title="interface in com.google.common.io">OutputSupplier</A>&lt;W&gt;&nbsp;to)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Opens <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang"><CODE>Readable</CODE></A> and <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang"><CODE>Appendable</CODE></A> objects from the
- given factories, copies all characters between the two, and closes
- them.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="../../../../../com/google/common/io/OutputSupplier.html" title="interface in com.google.common.io">OutputSupplier</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStreamWriter.html?is-external=true" title="class or interface in java.io">OutputStreamWriter</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>CharStreams.</B><B><A HREF="../../../../../com/google/common/io/CharStreams.html#newWriterSupplier(com.google.common.io.OutputSupplier, java.nio.charset.Charset)">newWriterSupplier</A></B>(<A HREF="../../../../../com/google/common/io/OutputSupplier.html" title="interface in com.google.common.io">OutputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</A>&gt;&nbsp;out,
-                  <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</A>&nbsp;charset)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a factory that will supply instances of <A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStreamWriter.html?is-external=true" title="class or interface in java.io"><CODE>OutputStreamWriter</CODE></A>,
- using the given <A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io"><CODE>OutputStream</CODE></A> factory and character set.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B>ByteStreams.</B><B><A HREF="../../../../../com/google/common/io/ByteStreams.html#write(byte[], com.google.common.io.OutputSupplier)">write</A></B>(byte[]&nbsp;from,
-      <A HREF="../../../../../com/google/common/io/OutputSupplier.html" title="interface in com.google.common.io">OutputSupplier</A>&lt;? extends <A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</A>&gt;&nbsp;to)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Writes a byte array to an output stream from the given supplier.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;W extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang">Appendable</A> & <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</A>&gt; 
-<BR>
-void</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>CharStreams.</B><B><A HREF="../../../../../com/google/common/io/CharStreams.html#write(java.lang.CharSequence, com.google.common.io.OutputSupplier)">write</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang">CharSequence</A>&nbsp;from,
-      <A HREF="../../../../../com/google/common/io/OutputSupplier.html" title="interface in com.google.common.io">OutputSupplier</A>&lt;W&gt;&nbsp;to)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Writes a character sequence (such as a string) to an appendable
- object from the given supplier.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/io/OutputSupplier.html" title="interface in com.google.common.io"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/io//class-useOutputSupplier.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="OutputSupplier.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/io/class-use/PatternFilenameFilter.html b/javadoc/com/google/common/io/class-use/PatternFilenameFilter.html
deleted file mode 100644
index 9b25a72..0000000
--- a/javadoc/com/google/common/io/class-use/PatternFilenameFilter.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.io.PatternFilenameFilter (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.io.PatternFilenameFilter (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/io/PatternFilenameFilter.html" title="class in com.google.common.io"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/io//class-usePatternFilenameFilter.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="PatternFilenameFilter.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.io.PatternFilenameFilter</B></H2>
-</CENTER>
-No usage of com.google.common.io.PatternFilenameFilter
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/io/PatternFilenameFilter.html" title="class in com.google.common.io"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/io//class-usePatternFilenameFilter.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="PatternFilenameFilter.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/io/class-use/Resources.html b/javadoc/com/google/common/io/class-use/Resources.html
deleted file mode 100644
index 3dcba6c..0000000
--- a/javadoc/com/google/common/io/class-use/Resources.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.io.Resources (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.io.Resources (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/io/Resources.html" title="class in com.google.common.io"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/io//class-useResources.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Resources.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.io.Resources</B></H2>
-</CENTER>
-No usage of com.google.common.io.Resources
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/io/Resources.html" title="class in com.google.common.io"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/io//class-useResources.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Resources.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/io/package-frame.html b/javadoc/com/google/common/io/package-frame.html
deleted file mode 100644
index 5cbd73c..0000000
--- a/javadoc/com/google/common/io/package-frame.html
+++ /dev/null
@@ -1,77 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-com.google.common.io (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-
-</HEAD>
-
-<BODY BGCOLOR="white">
-<FONT size="+1" CLASS="FrameTitleFont">
-<A HREF="../../../../com/google/common/io/package-summary.html" target="classFrame">com.google.common.io</A></FONT>
-<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
-<TR>
-<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">
-Interfaces</FONT>&nbsp;
-<FONT CLASS="FrameItemFont">
-<BR>
-<A HREF="ByteArrayDataInput.html" title="interface in com.google.common.io" target="classFrame"><I>ByteArrayDataInput</I></A>
-<BR>
-<A HREF="ByteArrayDataOutput.html" title="interface in com.google.common.io" target="classFrame"><I>ByteArrayDataOutput</I></A>
-<BR>
-<A HREF="ByteProcessor.html" title="interface in com.google.common.io" target="classFrame"><I>ByteProcessor</I></A>
-<BR>
-<A HREF="InputSupplier.html" title="interface in com.google.common.io" target="classFrame"><I>InputSupplier</I></A>
-<BR>
-<A HREF="LineProcessor.html" title="interface in com.google.common.io" target="classFrame"><I>LineProcessor</I></A>
-<BR>
-<A HREF="OutputSupplier.html" title="interface in com.google.common.io" target="classFrame"><I>OutputSupplier</I></A></FONT></TD>
-</TR>
-</TABLE>
-
-
-<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
-<TR>
-<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">
-Classes</FONT>&nbsp;
-<FONT CLASS="FrameItemFont">
-<BR>
-<A HREF="ByteStreams.html" title="class in com.google.common.io" target="classFrame">ByteStreams</A>
-<BR>
-<A HREF="CharStreams.html" title="class in com.google.common.io" target="classFrame">CharStreams</A>
-<BR>
-<A HREF="Closeables.html" title="class in com.google.common.io" target="classFrame">Closeables</A>
-<BR>
-<A HREF="CountingInputStream.html" title="class in com.google.common.io" target="classFrame">CountingInputStream</A>
-<BR>
-<A HREF="CountingOutputStream.html" title="class in com.google.common.io" target="classFrame">CountingOutputStream</A>
-<BR>
-<A HREF="FileBackedOutputStream.html" title="class in com.google.common.io" target="classFrame">FileBackedOutputStream</A>
-<BR>
-<A HREF="Files.html" title="class in com.google.common.io" target="classFrame">Files</A>
-<BR>
-<A HREF="Flushables.html" title="class in com.google.common.io" target="classFrame">Flushables</A>
-<BR>
-<A HREF="LimitInputStream.html" title="class in com.google.common.io" target="classFrame">LimitInputStream</A>
-<BR>
-<A HREF="LineReader.html" title="class in com.google.common.io" target="classFrame">LineReader</A>
-<BR>
-<A HREF="NullOutputStream.html" title="class in com.google.common.io" target="classFrame">NullOutputStream</A>
-<BR>
-<A HREF="PatternFilenameFilter.html" title="class in com.google.common.io" target="classFrame">PatternFilenameFilter</A>
-<BR>
-<A HREF="Resources.html" title="class in com.google.common.io" target="classFrame">Resources</A></FONT></TD>
-</TR>
-</TABLE>
-
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/io/package-summary.html b/javadoc/com/google/common/io/package-summary.html
deleted file mode 100644
index f24cb93..0000000
--- a/javadoc/com/google/common/io/package-summary.html
+++ /dev/null
@@ -1,242 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-com.google.common.io (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="com.google.common.io (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-use.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/package-summary.html"><B>PREV PACKAGE</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/primitives/package-summary.html"><B>NEXT PACKAGE</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/io/package-summary.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<H2>
-Package com.google.common.io
-</H2>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Interface Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/io/ByteArrayDataInput.html" title="interface in com.google.common.io">ByteArrayDataInput</A></B></TD>
-<TD>An extension of <code>DataInput</code> for reading from in-memory byte arrays; its
- methods offer identical functionality but do not throw <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io"><CODE>IOException</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/io/ByteArrayDataOutput.html" title="interface in com.google.common.io">ByteArrayDataOutput</A></B></TD>
-<TD>An extension of <code>DataOutput</code> for writing to in-memory byte arrays; its
- methods offer identical functionality but do not throw <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io"><CODE>IOException</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/io/ByteProcessor.html" title="interface in com.google.common.io">ByteProcessor&lt;T&gt;</A></B></TD>
-<TD>A callback interface to process bytes from a stream.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier&lt;T&gt;</A></B></TD>
-<TD>A factory for readable streams of bytes or characters.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/io/LineProcessor.html" title="interface in com.google.common.io">LineProcessor&lt;T&gt;</A></B></TD>
-<TD>A callback to be used with the streaming <code>readLines</code> methods.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/io/OutputSupplier.html" title="interface in com.google.common.io">OutputSupplier&lt;T&gt;</A></B></TD>
-<TD>An factory for writable streams of bytes or characters.</TD>
-</TR>
-</TABLE>
-&nbsp;
-
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Class Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/io/ByteStreams.html" title="class in com.google.common.io">ByteStreams</A></B></TD>
-<TD>Provides utility methods for working with byte arrays and I/O streams.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/io/CharStreams.html" title="class in com.google.common.io">CharStreams</A></B></TD>
-<TD>Provides utility methods for working with character streams.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/io/Closeables.html" title="class in com.google.common.io">Closeables</A></B></TD>
-<TD>Utility methods for working with <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io"><CODE>Closeable</CODE></A> objects.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/io/CountingInputStream.html" title="class in com.google.common.io">CountingInputStream</A></B></TD>
-<TD>An <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io"><CODE>InputStream</CODE></A> that counts the number of bytes read.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/io/CountingOutputStream.html" title="class in com.google.common.io">CountingOutputStream</A></B></TD>
-<TD>An OutputStream that counts the number of bytes written.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/io/FileBackedOutputStream.html" title="class in com.google.common.io">FileBackedOutputStream</A></B></TD>
-<TD>An <A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io"><CODE>OutputStream</CODE></A> that starts buffering to a byte array, but
- switches to file buffering once the data reaches a configurable size.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/io/Files.html" title="class in com.google.common.io">Files</A></B></TD>
-<TD>Provides utility methods for working with files.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/io/Flushables.html" title="class in com.google.common.io">Flushables</A></B></TD>
-<TD>Utility methods for working with <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Flushable.html?is-external=true" title="class or interface in java.io"><CODE>Flushable</CODE></A> objects.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/io/LimitInputStream.html" title="class in com.google.common.io">LimitInputStream</A></B></TD>
-<TD>An InputStream that limits the number of bytes which can be read.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/io/LineReader.html" title="class in com.google.common.io">LineReader</A></B></TD>
-<TD>A class for reading lines of text.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/io/NullOutputStream.html" title="class in com.google.common.io">NullOutputStream</A></B></TD>
-<TD>Implementation of <A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io"><CODE>OutputStream</CODE></A> that simply discards written bytes.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/io/PatternFilenameFilter.html" title="class in com.google.common.io">PatternFilenameFilter</A></B></TD>
-<TD>File name filter that only accepts files matching a regular expression.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/io/Resources.html" title="class in com.google.common.io">Resources</A></B></TD>
-<TD>Provides utility methods for working with resources in the classpath.</TD>
-</TR>
-</TABLE>
-&nbsp;
-
-<P>
-<DL>
-</DL>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-use.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/package-summary.html"><B>PREV PACKAGE</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/primitives/package-summary.html"><B>NEXT PACKAGE</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/io/package-summary.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/io/package-tree.html b/javadoc/com/google/common/io/package-tree.html
deleted file mode 100644
index 9c3e0ae..0000000
--- a/javadoc/com/google/common/io/package-tree.html
+++ /dev/null
@@ -1,173 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-com.google.common.io Class Hierarchy (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="com.google.common.io Class Hierarchy (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/package-tree.html"><B>PREV</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/primitives/package-tree.html"><B>NEXT</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/io/package-tree.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-Hierarchy For Package com.google.common.io
-</H2>
-</CENTER>
-<DL>
-<DT><B>Package Hierarchies:</B><DD><A HREF="../../../../overview-tree.html">All Packages</A></DL>
-<HR>
-<H2>
-Class Hierarchy
-</H2>
-<UL>
-<LI TYPE="circle">java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang"><B>Object</B></A><UL>
-<LI TYPE="circle">com.google.common.io.<A HREF="../../../../com/google/common/io/ByteStreams.html" title="class in com.google.common.io"><B>ByteStreams</B></A><LI TYPE="circle">com.google.common.io.<A HREF="../../../../com/google/common/io/CharStreams.html" title="class in com.google.common.io"><B>CharStreams</B></A><LI TYPE="circle">com.google.common.io.<A HREF="../../../../com/google/common/io/Closeables.html" title="class in com.google.common.io"><B>Closeables</B></A><LI TYPE="circle">com.google.common.io.<A HREF="../../../../com/google/common/io/Files.html" title="class in com.google.common.io"><B>Files</B></A><LI TYPE="circle">com.google.common.io.<A HREF="../../../../com/google/common/io/Flushables.html" title="class in com.google.common.io"><B>Flushables</B></A><LI TYPE="circle">java.io.<A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io"><B>InputStream</B></A> (implements java.io.<A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</A>)
-<UL>
-<LI TYPE="circle">java.io.<A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilterInputStream.html?is-external=true" title="class or interface in java.io"><B>FilterInputStream</B></A><UL>
-<LI TYPE="circle">com.google.common.io.<A HREF="../../../../com/google/common/io/CountingInputStream.html" title="class in com.google.common.io"><B>CountingInputStream</B></A><LI TYPE="circle">com.google.common.io.<A HREF="../../../../com/google/common/io/LimitInputStream.html" title="class in com.google.common.io"><B>LimitInputStream</B></A></UL>
-</UL>
-<LI TYPE="circle">com.google.common.io.<A HREF="../../../../com/google/common/io/LineReader.html" title="class in com.google.common.io"><B>LineReader</B></A><LI TYPE="circle">java.io.<A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io"><B>OutputStream</B></A> (implements java.io.<A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</A>, java.io.<A HREF="http://java.sun.com/javase/6/docs/api/java/io/Flushable.html?is-external=true" title="class or interface in java.io">Flushable</A>)
-<UL>
-<LI TYPE="circle">com.google.common.io.<A HREF="../../../../com/google/common/io/FileBackedOutputStream.html" title="class in com.google.common.io"><B>FileBackedOutputStream</B></A><LI TYPE="circle">java.io.<A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilterOutputStream.html?is-external=true" title="class or interface in java.io"><B>FilterOutputStream</B></A><UL>
-<LI TYPE="circle">com.google.common.io.<A HREF="../../../../com/google/common/io/CountingOutputStream.html" title="class in com.google.common.io"><B>CountingOutputStream</B></A></UL>
-<LI TYPE="circle">com.google.common.io.<A HREF="../../../../com/google/common/io/NullOutputStream.html" title="class in com.google.common.io"><B>NullOutputStream</B></A></UL>
-<LI TYPE="circle">com.google.common.io.<A HREF="../../../../com/google/common/io/PatternFilenameFilter.html" title="class in com.google.common.io"><B>PatternFilenameFilter</B></A> (implements java.io.<A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilenameFilter.html?is-external=true" title="class or interface in java.io">FilenameFilter</A>)
-<LI TYPE="circle">com.google.common.io.<A HREF="../../../../com/google/common/io/Resources.html" title="class in com.google.common.io"><B>Resources</B></A></UL>
-</UL>
-<H2>
-Interface Hierarchy
-</H2>
-<UL>
-<LI TYPE="circle">com.google.common.io.<A HREF="../../../../com/google/common/io/ByteProcessor.html" title="interface in com.google.common.io"><B>ByteProcessor</B></A>&lt;T&gt;<LI TYPE="circle">java.io.<A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataInput.html?is-external=true" title="class or interface in java.io"><B>DataInput</B></A><UL>
-<LI TYPE="circle">com.google.common.io.<A HREF="../../../../com/google/common/io/ByteArrayDataInput.html" title="interface in com.google.common.io"><B>ByteArrayDataInput</B></A></UL>
-<LI TYPE="circle">java.io.<A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataOutput.html?is-external=true" title="class or interface in java.io"><B>DataOutput</B></A><UL>
-<LI TYPE="circle">com.google.common.io.<A HREF="../../../../com/google/common/io/ByteArrayDataOutput.html" title="interface in com.google.common.io"><B>ByteArrayDataOutput</B></A></UL>
-<LI TYPE="circle">com.google.common.io.<A HREF="../../../../com/google/common/io/InputSupplier.html" title="interface in com.google.common.io"><B>InputSupplier</B></A>&lt;T&gt;<LI TYPE="circle">com.google.common.io.<A HREF="../../../../com/google/common/io/LineProcessor.html" title="interface in com.google.common.io"><B>LineProcessor</B></A>&lt;T&gt;<LI TYPE="circle">com.google.common.io.<A HREF="../../../../com/google/common/io/OutputSupplier.html" title="interface in com.google.common.io"><B>OutputSupplier</B></A>&lt;T&gt;</UL>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/collect/package-tree.html"><B>PREV</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/primitives/package-tree.html"><B>NEXT</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/io/package-tree.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/io/package-use.html b/javadoc/com/google/common/io/package-use.html
deleted file mode 100644
index b314756..0000000
--- a/javadoc/com/google/common/io/package-use.html
+++ /dev/null
@@ -1,202 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Package com.google.common.io (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Package com.google.common.io (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/io/package-use.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="package-use.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Package<br>com.google.common.io</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../com/google/common/io/package-summary.html">com.google.common.io</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.io"><B>com.google.common.io</B></A></TD>
-<TD>&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.io"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Classes in <A HREF="../../../../com/google/common/io/package-summary.html">com.google.common.io</A> used by <A HREF="../../../../com/google/common/io/package-summary.html">com.google.common.io</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/io/class-use/ByteArrayDataInput.html#com.google.common.io"><B>ByteArrayDataInput</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An extension of <code>DataInput</code> for reading from in-memory byte arrays; its
- methods offer identical functionality but do not throw <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io"><CODE>IOException</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/io/class-use/ByteArrayDataOutput.html#com.google.common.io"><B>ByteArrayDataOutput</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An extension of <code>DataOutput</code> for writing to in-memory byte arrays; its
- methods offer identical functionality but do not throw <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io"><CODE>IOException</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/io/class-use/ByteProcessor.html#com.google.common.io"><B>ByteProcessor</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A callback interface to process bytes from a stream.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/io/class-use/InputSupplier.html#com.google.common.io"><B>InputSupplier</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A factory for readable streams of bytes or characters.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/io/class-use/LineProcessor.html#com.google.common.io"><B>LineProcessor</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A callback to be used with the streaming <code>readLines</code> methods.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../com/google/common/io/class-use/OutputSupplier.html#com.google.common.io"><B>OutputSupplier</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An factory for writable streams of bytes or characters.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/io/package-use.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="package-use.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/primitives/Booleans.html b/javadoc/com/google/common/primitives/Booleans.html
deleted file mode 100644
index 8a5889c..0000000
--- a/javadoc/com/google/common/primitives/Booleans.html
+++ /dev/null
@@ -1,557 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:59 PST 2010 -->
-<TITLE>
-Booleans (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Booleans (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Booleans.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV CLASS&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/primitives/Bytes.html" title="class in com.google.common.primitives"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/primitives/Booleans.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Booleans.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.primitives</FONT>
-<BR>
-Class Booleans</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.primitives.Booleans</B>
-</PRE>
-<HR>
-<DL>
-<DT><PRE>public final class <B>Booleans</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
-</PRE>
-
-<P>
-Static utility methods pertaining to <code>boolean</code> primitives, that are not
- already found in either <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang"><CODE>Boolean</CODE></A> or <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true" title="class or interface in java.util"><CODE>Arrays</CODE></A>.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2009.09.15 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Kevin Bourrillion</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Booleans.html#asList(boolean...)">asList</A></B>(boolean...&nbsp;backingArray)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a fixed-size list backed by the specified array, similar to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true#asList(T...)" title="class or interface in java.util"><CODE>Arrays.asList(Object[])</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Booleans.html#compare(boolean, boolean)">compare</A></B>(boolean&nbsp;a,
-        boolean&nbsp;b)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares the two specified <code>boolean</code> values in the standard way
- (<code>false</code> is considered less than <code>true</code>).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;boolean[]</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Booleans.html#concat(boolean[]...)">concat</A></B>(boolean[]...&nbsp;arrays)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the values from each provided array combined into a single array.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Booleans.html#contains(boolean[], boolean)">contains</A></B>(boolean[]&nbsp;array,
-         boolean&nbsp;target)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if <code>target</code> is present as an element anywhere in
- <code>array</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;boolean[]</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Booleans.html#ensureCapacity(boolean[], int, int)">ensureCapacity</A></B>(boolean[]&nbsp;array,
-               int&nbsp;minLength,
-               int&nbsp;padding)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an array containing the same values as <code>array</code>, but
- guaranteed to be of a specified minimum length.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Booleans.html#hashCode(boolean)">hashCode</A></B>(boolean&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a hash code for <code>value</code>; equal to the result of invoking
- <code>((Boolean) value).hashCode()</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Booleans.html#indexOf(boolean[], boolean)">indexOf</A></B>(boolean[]&nbsp;array,
-        boolean&nbsp;target)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the index of the first appearance of the value <code>target</code> in
- <code>array</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Booleans.html#indexOf(boolean[], boolean[])">indexOf</A></B>(boolean[]&nbsp;array,
-        boolean[]&nbsp;target)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the start position of the first occurrence of the specified <code>target</code> within <code>array</code>, or <code>-1</code> if there is no such occurrence.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Booleans.html#join(java.lang.String, boolean...)">join</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;separator,
-     boolean...&nbsp;array)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a string containing the supplied <code>boolean</code> values separated
- by <code>separator</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Booleans.html#lastIndexOf(boolean[], boolean)">lastIndexOf</A></B>(boolean[]&nbsp;array,
-            boolean&nbsp;target)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the index of the last appearance of the value <code>target</code> in
- <code>array</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;boolean[]&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Booleans.html#lexicographicalComparator()">lexicographicalComparator</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a comparator that compares two <code>boolean</code> arrays
- lexicographically.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;boolean[]</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Booleans.html#toArray(java.util.Collection)">toArray</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</A>&gt;&nbsp;collection)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies a collection of <code>Boolean</code> instances into a new array of
- primitive <code>boolean</code> values.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="hashCode(boolean)"><!-- --></A><H3>
-hashCode</H3>
-<PRE>
-public static int <B>hashCode</B>(boolean&nbsp;value)</PRE>
-<DL>
-<DD>Returns a hash code for <code>value</code>; equal to the result of invoking
- <code>((Boolean) value).hashCode()</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>value</CODE> - a primitive <code>boolean</code> value
-<DT><B>Returns:</B><DD>a hash code for the value</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="compare(boolean, boolean)"><!-- --></A><H3>
-compare</H3>
-<PRE>
-public static int <B>compare</B>(boolean&nbsp;a,
-                          boolean&nbsp;b)</PRE>
-<DL>
-<DD>Compares the two specified <code>boolean</code> values in the standard way
- (<code>false</code> is considered less than <code>true</code>). The sign of the
- value returned is the same as that of <code>((Boolean) a).compareTo(b)</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>a</CODE> - the first <code>boolean</code> to compare<DD><CODE>b</CODE> - the second <code>boolean</code> to compare
-<DT><B>Returns:</B><DD>a positive number if only <code>a</code> is <code>true</code>,  a negative
-     number if only <code>b</code> is true, or zero if <code>a == b</code></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="contains(boolean[], boolean)"><!-- --></A><H3>
-contains</H3>
-<PRE>
-public static boolean <B>contains</B>(boolean[]&nbsp;array,
-                               boolean&nbsp;target)</PRE>
-<DL>
-<DD>Returns <code>true</code> if <code>target</code> is present as an element anywhere in
- <code>array</code>.
-
- <p><b>Note:</b> consider representing the array as a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/BitSet.html?is-external=true" title="class or interface in java.util"><CODE>BitSet</CODE></A> instead, replacing <code>Booleans.contains(array, true)</code>
- with <code>!bitSet.isEmpty()</code> and <code>Booleans.contains(array, false)</code>
- with <code>bitSet.nextClearBit(0) == sizeOfBitSet</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>array</CODE> - an array of <code>boolean</code> values, possibly empty<DD><CODE>target</CODE> - a primitive <code>boolean</code> value
-<DT><B>Returns:</B><DD><code>true</code> if <code>array[i] == target</code> for some value of <code>i</code></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="indexOf(boolean[], boolean)"><!-- --></A><H3>
-indexOf</H3>
-<PRE>
-public static int <B>indexOf</B>(boolean[]&nbsp;array,
-                          boolean&nbsp;target)</PRE>
-<DL>
-<DD>Returns the index of the first appearance of the value <code>target</code> in
- <code>array</code>.
-
- <p><b>Note:</b> consider representing the array as a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/BitSet.html?is-external=true" title="class or interface in java.util"><CODE>BitSet</CODE></A>
- instead, and using <A HREF="http://java.sun.com/javase/6/docs/api/java/util/BitSet.html?is-external=true#nextSetBit(int)" title="class or interface in java.util"><CODE>BitSet.nextSetBit(int)</CODE></A> or <A HREF="http://java.sun.com/javase/6/docs/api/java/util/BitSet.html?is-external=true#nextClearBit(int)" title="class or interface in java.util"><CODE>BitSet.nextClearBit(int)</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>array</CODE> - an array of <code>boolean</code> values, possibly empty<DD><CODE>target</CODE> - a primitive <code>boolean</code> value
-<DT><B>Returns:</B><DD>the least index <code>i</code> for which <code>array[i] == target</code>, or
-     <code>-1</code> if no such index exists.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="indexOf(boolean[], boolean[])"><!-- --></A><H3>
-indexOf</H3>
-<PRE>
-public static int <B>indexOf</B>(boolean[]&nbsp;array,
-                          boolean[]&nbsp;target)</PRE>
-<DL>
-<DD>Returns the start position of the first occurrence of the specified <code>target</code> within <code>array</code>, or <code>-1</code> if there is no such occurrence.
-
- <p>More formally, returns the lowest index <code>i</code> such that <code>java.util.Arrays.copyOfRange(array, i, i + target.length)</code> contains exactly
- the same elements as <code>target</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>array</CODE> - the array to search for the sequence <code>target</code><DD><CODE>target</CODE> - the array to search for as a sub-sequence of <code>array</code></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="lastIndexOf(boolean[], boolean)"><!-- --></A><H3>
-lastIndexOf</H3>
-<PRE>
-public static int <B>lastIndexOf</B>(boolean[]&nbsp;array,
-                              boolean&nbsp;target)</PRE>
-<DL>
-<DD>Returns the index of the last appearance of the value <code>target</code> in
- <code>array</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>array</CODE> - an array of <code>boolean</code> values, possibly empty<DD><CODE>target</CODE> - a primitive <code>boolean</code> value
-<DT><B>Returns:</B><DD>the greatest index <code>i</code> for which <code>array[i] == target</code>,
-     or <code>-1</code> if no such index exists.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="concat(boolean[]...)"><!-- --></A><H3>
-concat</H3>
-<PRE>
-public static boolean[] <B>concat</B>(boolean[]...&nbsp;arrays)</PRE>
-<DL>
-<DD>Returns the values from each provided array combined into a single array.
- For example, <code>concat(new boolean[] {a, b}, new boolean[] {}, new
- boolean[] {c}</code> returns the array <code>{a, b, c}</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>arrays</CODE> - zero or more <code>boolean</code> arrays
-<DT><B>Returns:</B><DD>a single array containing all the values from the source arrays, in
-     order</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="ensureCapacity(boolean[], int, int)"><!-- --></A><H3>
-ensureCapacity</H3>
-<PRE>
-public static boolean[] <B>ensureCapacity</B>(boolean[]&nbsp;array,
-                                       int&nbsp;minLength,
-                                       int&nbsp;padding)</PRE>
-<DL>
-<DD>Returns an array containing the same values as <code>array</code>, but
- guaranteed to be of a specified minimum length. If <code>array</code> already
- has a length of at least <code>minLength</code>, it is returned directly.
- Otherwise, a new array of size <code>minLength + padding</code> is returned,
- containing the values of <code>array</code>, and zeroes in the remaining places.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>array</CODE> - the source array<DD><CODE>minLength</CODE> - the minimum length the returned array must guarantee<DD><CODE>padding</CODE> - an extra amount to "grow" the array by if growth is
-     necessary
-<DT><B>Returns:</B><DD>an array containing the values of <code>array</code>, with guaranteed
-     minimum length <code>minLength</code>
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>minLength</code> or <code>padding</code> is
-     negative</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="join(java.lang.String, boolean...)"><!-- --></A><H3>
-join</H3>
-<PRE>
-public static <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>join</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;separator,
-                          boolean...&nbsp;array)</PRE>
-<DL>
-<DD>Returns a string containing the supplied <code>boolean</code> values separated
- by <code>separator</code>. For example, <code>join("-", false, true, false)</code>
- returns the string <code>"false-true-false"</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>separator</CODE> - the text that should appear between consecutive values in
-     the resulting string (but not at the start or end)<DD><CODE>array</CODE> - an array of <code>boolean</code> values, possibly empty</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="lexicographicalComparator()"><!-- --></A><H3>
-lexicographicalComparator</H3>
-<PRE>
-public static <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;boolean[]&gt; <B>lexicographicalComparator</B>()</PRE>
-<DL>
-<DD>Returns a comparator that compares two <code>boolean</code> arrays
- lexicographically. That is, it compares, using <A HREF="../../../../com/google/common/primitives/Booleans.html#compare(boolean, boolean)"><CODE>compare(boolean, boolean)</CODE></A>), the first pair of values that follow any
- common prefix, or when one array is a prefix of the other, treats the
- shorter array as the lesser. For example,
- <code>[] &lt; [false] &lt; [false, true] &lt; [true]</code>.
-
- <p>The returned comparator is inconsistent with <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(Object)</CODE></A> (since arrays support only identity equality), but
- it is consistent with <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true#equals(boolean[], boolean[])" title="class or interface in java.util"><CODE>Arrays.equals(boolean[], boolean[])</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>tentative</b></DD>
-<DT><B>See Also:</B><DD><a href="http://en.wikipedia.org/wiki/Lexicographical_order">
-     Lexicographical order</a> article at Wikipedia</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toArray(java.util.Collection)"><!-- --></A><H3>
-toArray</H3>
-<PRE>
-public static boolean[] <B>toArray</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</A>&gt;&nbsp;collection)</PRE>
-<DL>
-<DD>Copies a collection of <code>Boolean</code> instances into a new array of
- primitive <code>boolean</code> values.
-
- <p>Elements are copied from the argument collection as if by <code>collection.toArray()</code>.  Calling this method is as thread-safe as calling
- that method.
-
- <p><b>Note:</b> consider representing the collection as a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/BitSet.html?is-external=true" title="class or interface in java.util"><CODE>BitSet</CODE></A> instead.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>collection</CODE> - a collection of <code>Boolean</code> objects
-<DT><B>Returns:</B><DD>an array containing the same values as <code>collection</code>, in the
-     same order, converted to primitives
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>collection</code> or any of its elements
-     is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="asList(boolean...)"><!-- --></A><H3>
-asList</H3>
-<PRE>
-public static <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</A>&gt; <B>asList</B>(boolean...&nbsp;backingArray)</PRE>
-<DL>
-<DD>Returns a fixed-size list backed by the specified array, similar to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true#asList(T...)" title="class or interface in java.util"><CODE>Arrays.asList(Object[])</CODE></A>. The list supports <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#set(int, E)" title="class or interface in java.util"><CODE>List.set(int, Object)</CODE></A>,
- but any attempt to set a value to <code>null</code> will result in a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang"><CODE>NullPointerException</CODE></A>.
-
- <p>The returned list maintains the values, but not the identities, of
- <code>Boolean</code> objects written to or read from it.  For example, whether
- <code>list.get(0) == list.get(0)</code> is true for the returned list is
- unspecified.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>backingArray</CODE> - the array to back the list
-<DT><B>Returns:</B><DD>a list view of the array</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Booleans.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV CLASS&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/primitives/Bytes.html" title="class in com.google.common.primitives"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/primitives/Booleans.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Booleans.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/primitives/Bytes.html b/javadoc/com/google/common/primitives/Bytes.html
deleted file mode 100644
index 0e0ba84..0000000
--- a/javadoc/com/google/common/primitives/Bytes.html
+++ /dev/null
@@ -1,463 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:59 PST 2010 -->
-<TITLE>
-Bytes (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Bytes (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Bytes.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/primitives/Booleans.html" title="class in com.google.common.primitives"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/primitives/Chars.html" title="class in com.google.common.primitives"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/primitives/Bytes.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Bytes.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.primitives</FONT>
-<BR>
-Class Bytes</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.primitives.Bytes</B>
-</PRE>
-<HR>
-<DL>
-<DT><PRE>public final class <B>Bytes</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
-</PRE>
-
-<P>
-Static utility methods pertaining to <code>byte</code> primitives, that are not
- already found in either <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Byte.html?is-external=true" title="class or interface in java.lang"><CODE>Byte</CODE></A> or <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true" title="class or interface in java.util"><CODE>Arrays</CODE></A>, <i>and interpret
- bytes as neither signed nor unsigned</i>. The methods which specifically
- treat bytes as signed or unsigned are found in <A HREF="../../../../com/google/common/primitives/SignedBytes.html" title="class in com.google.common.primitives"><CODE>SignedBytes</CODE></A> and <A HREF="../../../../com/google/common/primitives/UnsignedBytes.html" title="class in com.google.common.primitives"><CODE>UnsignedBytes</CODE></A>.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2009.09.15 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Kevin Bourrillion</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Byte.html?is-external=true" title="class or interface in java.lang">Byte</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Bytes.html#asList(byte...)">asList</A></B>(byte...&nbsp;backingArray)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a fixed-size list backed by the specified array, similar to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true#asList(T...)" title="class or interface in java.util"><CODE>Arrays.asList(Object[])</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;byte[]</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Bytes.html#concat(byte[]...)">concat</A></B>(byte[]...&nbsp;arrays)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the values from each provided array combined into a single array.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Bytes.html#contains(byte[], byte)">contains</A></B>(byte[]&nbsp;array,
-         byte&nbsp;target)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if <code>target</code> is present as an element anywhere in
- <code>array</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;byte[]</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Bytes.html#ensureCapacity(byte[], int, int)">ensureCapacity</A></B>(byte[]&nbsp;array,
-               int&nbsp;minLength,
-               int&nbsp;padding)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an array containing the same values as <code>array</code>, but
- guaranteed to be of a specified minimum length.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Bytes.html#hashCode(byte)">hashCode</A></B>(byte&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a hash code for <code>value</code>; equal to the result of invoking
- <code>((Byte) value).hashCode()</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Bytes.html#indexOf(byte[], byte)">indexOf</A></B>(byte[]&nbsp;array,
-        byte&nbsp;target)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the index of the first appearance of the value <code>target</code> in
- <code>array</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Bytes.html#indexOf(byte[], byte[])">indexOf</A></B>(byte[]&nbsp;array,
-        byte[]&nbsp;target)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the start position of the first occurrence of the specified <code>target</code> within <code>array</code>, or <code>-1</code> if there is no such occurrence.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Bytes.html#lastIndexOf(byte[], byte)">lastIndexOf</A></B>(byte[]&nbsp;array,
-            byte&nbsp;target)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the index of the last appearance of the value <code>target</code> in
- <code>array</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;byte[]</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Bytes.html#toArray(java.util.Collection)">toArray</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Byte.html?is-external=true" title="class or interface in java.lang">Byte</A>&gt;&nbsp;collection)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies a collection of <code>Byte</code> instances into a new array of
- primitive <code>byte</code> values.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="hashCode(byte)"><!-- --></A><H3>
-hashCode</H3>
-<PRE>
-public static int <B>hashCode</B>(byte&nbsp;value)</PRE>
-<DL>
-<DD>Returns a hash code for <code>value</code>; equal to the result of invoking
- <code>((Byte) value).hashCode()</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>value</CODE> - a primitive <code>byte</code> value
-<DT><B>Returns:</B><DD>a hash code for the value</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="contains(byte[], byte)"><!-- --></A><H3>
-contains</H3>
-<PRE>
-public static boolean <B>contains</B>(byte[]&nbsp;array,
-                               byte&nbsp;target)</PRE>
-<DL>
-<DD>Returns <code>true</code> if <code>target</code> is present as an element anywhere in
- <code>array</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>array</CODE> - an array of <code>byte</code> values, possibly empty<DD><CODE>target</CODE> - a primitive <code>byte</code> value
-<DT><B>Returns:</B><DD><code>true</code> if <code>array[i] == target</code> for some value of <code>i</code></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="indexOf(byte[], byte)"><!-- --></A><H3>
-indexOf</H3>
-<PRE>
-public static int <B>indexOf</B>(byte[]&nbsp;array,
-                          byte&nbsp;target)</PRE>
-<DL>
-<DD>Returns the index of the first appearance of the value <code>target</code> in
- <code>array</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>array</CODE> - an array of <code>byte</code> values, possibly empty<DD><CODE>target</CODE> - a primitive <code>byte</code> value
-<DT><B>Returns:</B><DD>the least index <code>i</code> for which <code>array[i] == target</code>, or
-     <code>-1</code> if no such index exists.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="indexOf(byte[], byte[])"><!-- --></A><H3>
-indexOf</H3>
-<PRE>
-public static int <B>indexOf</B>(byte[]&nbsp;array,
-                          byte[]&nbsp;target)</PRE>
-<DL>
-<DD>Returns the start position of the first occurrence of the specified <code>target</code> within <code>array</code>, or <code>-1</code> if there is no such occurrence.
-
- <p>More formally, returns the lowest index <code>i</code> such that <code>java.util.Arrays.copyOfRange(array, i, i + target.length)</code> contains exactly
- the same elements as <code>target</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>array</CODE> - the array to search for the sequence <code>target</code><DD><CODE>target</CODE> - the array to search for as a sub-sequence of <code>array</code></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="lastIndexOf(byte[], byte)"><!-- --></A><H3>
-lastIndexOf</H3>
-<PRE>
-public static int <B>lastIndexOf</B>(byte[]&nbsp;array,
-                              byte&nbsp;target)</PRE>
-<DL>
-<DD>Returns the index of the last appearance of the value <code>target</code> in
- <code>array</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>array</CODE> - an array of <code>byte</code> values, possibly empty<DD><CODE>target</CODE> - a primitive <code>byte</code> value
-<DT><B>Returns:</B><DD>the greatest index <code>i</code> for which <code>array[i] == target</code>,
-     or <code>-1</code> if no such index exists.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="concat(byte[]...)"><!-- --></A><H3>
-concat</H3>
-<PRE>
-public static byte[] <B>concat</B>(byte[]...&nbsp;arrays)</PRE>
-<DL>
-<DD>Returns the values from each provided array combined into a single array.
- For example, <code>concat(new byte[] {a, b}, new byte[] {}, new
- byte[] {c}</code> returns the array <code>{a, b, c}</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>arrays</CODE> - zero or more <code>byte</code> arrays
-<DT><B>Returns:</B><DD>a single array containing all the values from the source arrays, in
-     order</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="ensureCapacity(byte[], int, int)"><!-- --></A><H3>
-ensureCapacity</H3>
-<PRE>
-public static byte[] <B>ensureCapacity</B>(byte[]&nbsp;array,
-                                    int&nbsp;minLength,
-                                    int&nbsp;padding)</PRE>
-<DL>
-<DD>Returns an array containing the same values as <code>array</code>, but
- guaranteed to be of a specified minimum length. If <code>array</code> already
- has a length of at least <code>minLength</code>, it is returned directly.
- Otherwise, a new array of size <code>minLength + padding</code> is returned,
- containing the values of <code>array</code>, and zeroes in the remaining places.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>array</CODE> - the source array<DD><CODE>minLength</CODE> - the minimum length the returned array must guarantee<DD><CODE>padding</CODE> - an extra amount to "grow" the array by if growth is
-     necessary
-<DT><B>Returns:</B><DD>an array containing the values of <code>array</code>, with guaranteed
-     minimum length <code>minLength</code>
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>minLength</code> or <code>padding</code> is
-     negative</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toArray(java.util.Collection)"><!-- --></A><H3>
-toArray</H3>
-<PRE>
-public static byte[] <B>toArray</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Byte.html?is-external=true" title="class or interface in java.lang">Byte</A>&gt;&nbsp;collection)</PRE>
-<DL>
-<DD>Copies a collection of <code>Byte</code> instances into a new array of
- primitive <code>byte</code> values.
-
- <p>Elements are copied from the argument collection as if by <code>collection.toArray()</code>.  Calling this method is as thread-safe as calling
- that method.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>collection</CODE> - a collection of <code>Byte</code> objects
-<DT><B>Returns:</B><DD>an array containing the same values as <code>collection</code>, in the
-     same order, converted to primitives
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>collection</code> or any of its elements
-     is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="asList(byte...)"><!-- --></A><H3>
-asList</H3>
-<PRE>
-public static <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Byte.html?is-external=true" title="class or interface in java.lang">Byte</A>&gt; <B>asList</B>(byte...&nbsp;backingArray)</PRE>
-<DL>
-<DD>Returns a fixed-size list backed by the specified array, similar to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true#asList(T...)" title="class or interface in java.util"><CODE>Arrays.asList(Object[])</CODE></A>. The list supports <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#set(int, E)" title="class or interface in java.util"><CODE>List.set(int, Object)</CODE></A>,
- but any attempt to set a value to <code>null</code> will result in a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang"><CODE>NullPointerException</CODE></A>.
-
- <p>The returned list maintains the values, but not the identities, of
- <code>Byte</code> objects written to or read from it.  For example, whether
- <code>list.get(0) == list.get(0)</code> is true for the returned list is
- unspecified.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>backingArray</CODE> - the array to back the list
-<DT><B>Returns:</B><DD>a list view of the array</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Bytes.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/primitives/Booleans.html" title="class in com.google.common.primitives"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/primitives/Chars.html" title="class in com.google.common.primitives"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/primitives/Bytes.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Bytes.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/primitives/Chars.html b/javadoc/com/google/common/primitives/Chars.html
deleted file mode 100644
index f3851ca..0000000
--- a/javadoc/com/google/common/primitives/Chars.html
+++ /dev/null
@@ -1,743 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:47:59 PST 2010 -->
-<TITLE>
-Chars (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Chars (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Chars.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/primitives/Bytes.html" title="class in com.google.common.primitives"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/primitives/Doubles.html" title="class in com.google.common.primitives"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/primitives/Chars.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Chars.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.primitives</FONT>
-<BR>
-Class Chars</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.primitives.Chars</B>
-</PRE>
-<HR>
-<DL>
-<DT><PRE>public final class <B>Chars</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
-</PRE>
-
-<P>
-Static utility methods pertaining to <code>char</code> primitives, that are not
- already found in either <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Character.html?is-external=true" title="class or interface in java.lang"><CODE>Character</CODE></A> or <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true" title="class or interface in java.util"><CODE>Arrays</CODE></A>.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2009.09.15 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Kevin Bourrillion</DD>
-</DL>
-<HR>
-
-<P>
-<!-- =========== FIELD SUMMARY =========== -->
-
-<A NAME="field_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Field Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Chars.html#BYTES">BYTES</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of bytes required to represent a primitive <code>char</code>
- value.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Character.html?is-external=true" title="class or interface in java.lang">Character</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Chars.html#asList(char...)">asList</A></B>(char...&nbsp;backingArray)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a fixed-size list backed by the specified array, similar to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true#asList(T...)" title="class or interface in java.util"><CODE>Arrays.asList(Object[])</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;char</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Chars.html#checkedCast(long)">checkedCast</A></B>(long&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the <code>char</code> value that is equal to <code>value</code>, if possible.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Chars.html#compare(char, char)">compare</A></B>(char&nbsp;a,
-        char&nbsp;b)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares the two specified <code>char</code> values.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;char[]</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Chars.html#concat(char[]...)">concat</A></B>(char[]...&nbsp;arrays)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the values from each provided array combined into a single array.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Chars.html#contains(char[], char)">contains</A></B>(char[]&nbsp;array,
-         char&nbsp;target)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if <code>target</code> is present as an element anywhere in
- <code>array</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;char[]</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Chars.html#ensureCapacity(char[], int, int)">ensureCapacity</A></B>(char[]&nbsp;array,
-               int&nbsp;minLength,
-               int&nbsp;padding)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an array containing the same values as <code>array</code>, but
- guaranteed to be of a specified minimum length.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;char</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Chars.html#fromByteArray(byte[])">fromByteArray</A></B>(byte[]&nbsp;bytes)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the <code>char</code> value whose big-endian representation is
- stored in the first 2 bytes of <code>bytes</code>; equivalent to <code>ByteBuffer.wrap(bytes).getChar()</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Chars.html#hashCode(char)">hashCode</A></B>(char&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a hash code for <code>value</code>; equal to the result of invoking
- <code>((Character) value).hashCode()</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Chars.html#indexOf(char[], char)">indexOf</A></B>(char[]&nbsp;array,
-        char&nbsp;target)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the index of the first appearance of the value <code>target</code> in
- <code>array</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Chars.html#indexOf(char[], char[])">indexOf</A></B>(char[]&nbsp;array,
-        char[]&nbsp;target)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the start position of the first occurrence of the specified <code>target</code> within <code>array</code>, or <code>-1</code> if there is no such occurrence.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Chars.html#join(java.lang.String, char...)">join</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;separator,
-     char...&nbsp;array)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a string containing the supplied <code>char</code> values separated
- by <code>separator</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Chars.html#lastIndexOf(char[], char)">lastIndexOf</A></B>(char[]&nbsp;array,
-            char&nbsp;target)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the index of the last appearance of the value <code>target</code> in
- <code>array</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;char[]&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Chars.html#lexicographicalComparator()">lexicographicalComparator</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a comparator that compares two <code>char</code> arrays
- lexicographically.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;char</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Chars.html#max(char...)">max</A></B>(char...&nbsp;array)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the greatest value present in <code>array</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;char</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Chars.html#min(char...)">min</A></B>(char...&nbsp;array)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the least value present in <code>array</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;char</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Chars.html#saturatedCast(long)">saturatedCast</A></B>(long&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the <code>char</code> nearest in value to <code>value</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;char[]</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Chars.html#toArray(java.util.Collection)">toArray</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Character.html?is-external=true" title="class or interface in java.lang">Character</A>&gt;&nbsp;collection)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies a collection of <code>Character</code> instances into a new array of
- primitive <code>char</code> values.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;byte[]</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Chars.html#toByteArray(char)">toByteArray</A></B>(char&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a big-endian representation of <code>value</code> in a 2-element byte
- array; equivalent to <code>ByteBuffer.allocate(2).putChar(value).array()</code>.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ FIELD DETAIL =========== -->
-
-<A NAME="field_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Field Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="BYTES"><!-- --></A><H3>
-BYTES</H3>
-<PRE>
-public static final int <B>BYTES</B></PRE>
-<DL>
-<DD>The number of bytes required to represent a primitive <code>char</code>
- value.
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#com.google.common.primitives.Chars.BYTES">Constant Field Values</A></DL>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="hashCode(char)"><!-- --></A><H3>
-hashCode</H3>
-<PRE>
-public static int <B>hashCode</B>(char&nbsp;value)</PRE>
-<DL>
-<DD>Returns a hash code for <code>value</code>; equal to the result of invoking
- <code>((Character) value).hashCode()</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>value</CODE> - a primitive <code>char</code> value
-<DT><B>Returns:</B><DD>a hash code for the value</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="checkedCast(long)"><!-- --></A><H3>
-checkedCast</H3>
-<PRE>
-public static char <B>checkedCast</B>(long&nbsp;value)</PRE>
-<DL>
-<DD>Returns the <code>char</code> value that is equal to <code>value</code>, if possible.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>value</CODE> - any value in the range of the <code>char</code> type
-<DT><B>Returns:</B><DD>the <code>char</code> value that equals <code>value</code>
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>value</code> is greater than <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Character.html?is-external=true#MAX_VALUE" title="class or interface in java.lang"><CODE>Character.MAX_VALUE</CODE></A> or less than <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Character.html?is-external=true#MIN_VALUE" title="class or interface in java.lang"><CODE>Character.MIN_VALUE</CODE></A></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="saturatedCast(long)"><!-- --></A><H3>
-saturatedCast</H3>
-<PRE>
-public static char <B>saturatedCast</B>(long&nbsp;value)</PRE>
-<DL>
-<DD>Returns the <code>char</code> nearest in value to <code>value</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>value</CODE> - any <code>long</code> value
-<DT><B>Returns:</B><DD>the same value cast to <code>char</code> if it is in the range of the
-     <code>char</code> type, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Character.html?is-external=true#MAX_VALUE" title="class or interface in java.lang"><CODE>Character.MAX_VALUE</CODE></A> if it is too large,
-     or <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Character.html?is-external=true#MIN_VALUE" title="class or interface in java.lang"><CODE>Character.MIN_VALUE</CODE></A> if it is too small</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="compare(char, char)"><!-- --></A><H3>
-compare</H3>
-<PRE>
-public static int <B>compare</B>(char&nbsp;a,
-                          char&nbsp;b)</PRE>
-<DL>
-<DD>Compares the two specified <code>char</code> values. The sign of the value
- returned is the same as that of <code>((Character) a).compareTo(b)</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>a</CODE> - the first <code>char</code> to compare<DD><CODE>b</CODE> - the second <code>char</code> to compare
-<DT><B>Returns:</B><DD>a negative value if <code>a</code> is less than <code>b</code>; a positive
-     value if <code>a</code> is greater than <code>b</code>; or zero if they are equal</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="contains(char[], char)"><!-- --></A><H3>
-contains</H3>
-<PRE>
-public static boolean <B>contains</B>(char[]&nbsp;array,
-                               char&nbsp;target)</PRE>
-<DL>
-<DD>Returns <code>true</code> if <code>target</code> is present as an element anywhere in
- <code>array</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>array</CODE> - an array of <code>char</code> values, possibly empty<DD><CODE>target</CODE> - a primitive <code>char</code> value
-<DT><B>Returns:</B><DD><code>true</code> if <code>array[i] == target</code> for some value of <code>i</code></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="indexOf(char[], char)"><!-- --></A><H3>
-indexOf</H3>
-<PRE>
-public static int <B>indexOf</B>(char[]&nbsp;array,
-                          char&nbsp;target)</PRE>
-<DL>
-<DD>Returns the index of the first appearance of the value <code>target</code> in
- <code>array</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>array</CODE> - an array of <code>char</code> values, possibly empty<DD><CODE>target</CODE> - a primitive <code>char</code> value
-<DT><B>Returns:</B><DD>the least index <code>i</code> for which <code>array[i] == target</code>, or
-     <code>-1</code> if no such index exists.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="indexOf(char[], char[])"><!-- --></A><H3>
-indexOf</H3>
-<PRE>
-public static int <B>indexOf</B>(char[]&nbsp;array,
-                          char[]&nbsp;target)</PRE>
-<DL>
-<DD>Returns the start position of the first occurrence of the specified <code>target</code> within <code>array</code>, or <code>-1</code> if there is no such occurrence.
-
- <p>More formally, returns the lowest index <code>i</code> such that <code>java.util.Arrays.copyOfRange(array, i, i + target.length)</code> contains exactly
- the same elements as <code>target</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>array</CODE> - the array to search for the sequence <code>target</code><DD><CODE>target</CODE> - the array to search for as a sub-sequence of <code>array</code></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="lastIndexOf(char[], char)"><!-- --></A><H3>
-lastIndexOf</H3>
-<PRE>
-public static int <B>lastIndexOf</B>(char[]&nbsp;array,
-                              char&nbsp;target)</PRE>
-<DL>
-<DD>Returns the index of the last appearance of the value <code>target</code> in
- <code>array</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>array</CODE> - an array of <code>char</code> values, possibly empty<DD><CODE>target</CODE> - a primitive <code>char</code> value
-<DT><B>Returns:</B><DD>the greatest index <code>i</code> for which <code>array[i] == target</code>,
-     or <code>-1</code> if no such index exists.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="min(char...)"><!-- --></A><H3>
-min</H3>
-<PRE>
-public static char <B>min</B>(char...&nbsp;array)</PRE>
-<DL>
-<DD>Returns the least value present in <code>array</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>array</CODE> - a <i>nonempty</i> array of <code>char</code> values
-<DT><B>Returns:</B><DD>the value present in <code>array</code> that is less than or equal to
-     every other value in the array
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>array</code> is empty</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="max(char...)"><!-- --></A><H3>
-max</H3>
-<PRE>
-public static char <B>max</B>(char...&nbsp;array)</PRE>
-<DL>
-<DD>Returns the greatest value present in <code>array</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>array</CODE> - a <i>nonempty</i> array of <code>char</code> values
-<DT><B>Returns:</B><DD>the value present in <code>array</code> that is greater than or equal to
-     every other value in the array
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>array</code> is empty</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="concat(char[]...)"><!-- --></A><H3>
-concat</H3>
-<PRE>
-public static char[] <B>concat</B>(char[]...&nbsp;arrays)</PRE>
-<DL>
-<DD>Returns the values from each provided array combined into a single array.
- For example, <code>concat(new char[] {a, b}, new char[] {}, new
- char[] {c}</code> returns the array <code>{a, b, c}</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>arrays</CODE> - zero or more <code>char</code> arrays
-<DT><B>Returns:</B><DD>a single array containing all the values from the source arrays, in
-     order</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toByteArray(char)"><!-- --></A><H3>
-toByteArray</H3>
-<PRE>
-public static byte[] <B>toByteArray</B>(char&nbsp;value)</PRE>
-<DL>
-<DD>Returns a big-endian representation of <code>value</code> in a 2-element byte
- array; equivalent to <code>ByteBuffer.allocate(2).putChar(value).array()</code>.  For example, the input
- value <code>'\\u5432'</code> would yield the byte array <code>{0x54, 0x32}</code>.
-
- <p>If you need to convert and concatenate several values (possibly even of
- different types), use a shared <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio"><CODE>ByteBuffer</CODE></A> instance, or use
- <A HREF="../../../../com/google/common/io/ByteStreams.html#newDataOutput()"><CODE>ByteStreams.newDataOutput()</CODE></A> to get a growable
- buffer.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="fromByteArray(byte[])"><!-- --></A><H3>
-fromByteArray</H3>
-<PRE>
-public static char <B>fromByteArray</B>(byte[]&nbsp;bytes)</PRE>
-<DL>
-<DD>Returns the <code>char</code> value whose big-endian representation is
- stored in the first 2 bytes of <code>bytes</code>; equivalent to <code>ByteBuffer.wrap(bytes).getChar()</code>. For example, the input byte array
- <code>{0x54, 0x32}</code> would yield the <code>char</code> value <code>'\\u5432'</code>.
-
- <p>Arguably, it's preferable to use <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio"><CODE>ByteBuffer</CODE></A>; that
- library exposes much more flexibility at little cost in readability.
-<P>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>bytes</code> has fewer than 2
-     elements</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="ensureCapacity(char[], int, int)"><!-- --></A><H3>
-ensureCapacity</H3>
-<PRE>
-public static char[] <B>ensureCapacity</B>(char[]&nbsp;array,
-                                    int&nbsp;minLength,
-                                    int&nbsp;padding)</PRE>
-<DL>
-<DD>Returns an array containing the same values as <code>array</code>, but
- guaranteed to be of a specified minimum length. If <code>array</code> already
- has a length of at least <code>minLength</code>, it is returned directly.
- Otherwise, a new array of size <code>minLength + padding</code> is returned,
- containing the values of <code>array</code>, and zeroes in the remaining places.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>array</CODE> - the source array<DD><CODE>minLength</CODE> - the minimum length the returned array must guarantee<DD><CODE>padding</CODE> - an extra amount to "grow" the array by if growth is
-     necessary
-<DT><B>Returns:</B><DD>an array containing the values of <code>array</code>, with guaranteed
-     minimum length <code>minLength</code>
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>minLength</code> or <code>padding</code> is
-     negative</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="join(java.lang.String, char...)"><!-- --></A><H3>
-join</H3>
-<PRE>
-public static <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>join</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;separator,
-                          char...&nbsp;array)</PRE>
-<DL>
-<DD>Returns a string containing the supplied <code>char</code> values separated
- by <code>separator</code>. For example, <code>join("-", '1', '2', '3')</code> returns
- the string <code>"1-2-3"</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>separator</CODE> - the text that should appear between consecutive values in
-     the resulting string (but not at the start or end)<DD><CODE>array</CODE> - an array of <code>char</code> values, possibly empty</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="lexicographicalComparator()"><!-- --></A><H3>
-lexicographicalComparator</H3>
-<PRE>
-public static <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;char[]&gt; <B>lexicographicalComparator</B>()</PRE>
-<DL>
-<DD>Returns a comparator that compares two <code>char</code> arrays
- lexicographically. That is, it compares, using <A HREF="../../../../com/google/common/primitives/Chars.html#compare(char, char)"><CODE>compare(char, char)</CODE></A>), the first pair of values that follow any
- common prefix, or when one array is a prefix of the other, treats the
- shorter array as the lesser. For example,
- <code>[] &lt; ['a'] &lt; ['a', 'b'] &lt; ['b']</code>.
-
- <p>The returned comparator is inconsistent with <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(Object)</CODE></A> (since arrays support only identity equality), but
- it is consistent with <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true#equals(char[], char[])" title="class or interface in java.util"><CODE>Arrays.equals(char[], char[])</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>tentative</b></DD>
-<DT><B>See Also:</B><DD><a href="http://en.wikipedia.org/wiki/Lexicographical_order">
-     Lexicographical order</a> article at Wikipedia</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toArray(java.util.Collection)"><!-- --></A><H3>
-toArray</H3>
-<PRE>
-public static char[] <B>toArray</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Character.html?is-external=true" title="class or interface in java.lang">Character</A>&gt;&nbsp;collection)</PRE>
-<DL>
-<DD>Copies a collection of <code>Character</code> instances into a new array of
- primitive <code>char</code> values.
-
- <p>Elements are copied from the argument collection as if by <code>collection.toArray()</code>.  Calling this method is as thread-safe as calling
- that method.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>collection</CODE> - a collection of <code>Character</code> objects
-<DT><B>Returns:</B><DD>an array containing the same values as <code>collection</code>, in the
-     same order, converted to primitives
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>collection</code> or any of its elements
-     is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="asList(char...)"><!-- --></A><H3>
-asList</H3>
-<PRE>
-public static <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Character.html?is-external=true" title="class or interface in java.lang">Character</A>&gt; <B>asList</B>(char...&nbsp;backingArray)</PRE>
-<DL>
-<DD>Returns a fixed-size list backed by the specified array, similar to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true#asList(T...)" title="class or interface in java.util"><CODE>Arrays.asList(Object[])</CODE></A>. The list supports <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#set(int, E)" title="class or interface in java.util"><CODE>List.set(int, Object)</CODE></A>,
- but any attempt to set a value to <code>null</code> will result in a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang"><CODE>NullPointerException</CODE></A>.
-
- <p>The returned list maintains the values, but not the identities, of
- <code>Character</code> objects written to or read from it.  For example, whether
- <code>list.get(0) == list.get(0)</code> is true for the returned list is
- unspecified.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>backingArray</CODE> - the array to back the list
-<DT><B>Returns:</B><DD>a list view of the array</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Chars.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/primitives/Bytes.html" title="class in com.google.common.primitives"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/primitives/Doubles.html" title="class in com.google.common.primitives"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/primitives/Chars.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Chars.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/primitives/Doubles.html b/javadoc/com/google/common/primitives/Doubles.html
deleted file mode 100644
index a762327..0000000
--- a/javadoc/com/google/common/primitives/Doubles.html
+++ /dev/null
@@ -1,610 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Doubles (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Doubles (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Doubles.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/primitives/Chars.html" title="class in com.google.common.primitives"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/primitives/Floats.html" title="class in com.google.common.primitives"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/primitives/Doubles.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Doubles.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.primitives</FONT>
-<BR>
-Class Doubles</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.primitives.Doubles</B>
-</PRE>
-<HR>
-<DL>
-<DT><PRE>public final class <B>Doubles</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
-</PRE>
-
-<P>
-Static utility methods pertaining to <code>double</code> primitives, that are not
- already found in either <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Double.html?is-external=true" title="class or interface in java.lang"><CODE>Double</CODE></A> or <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true" title="class or interface in java.util"><CODE>Arrays</CODE></A>.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2009.09.15 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Kevin Bourrillion</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Double.html?is-external=true" title="class or interface in java.lang">Double</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Doubles.html#asList(double...)">asList</A></B>(double...&nbsp;backingArray)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a fixed-size list backed by the specified array, similar to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true#asList(T...)" title="class or interface in java.util"><CODE>Arrays.asList(Object[])</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Doubles.html#compare(double, double)">compare</A></B>(double&nbsp;a,
-        double&nbsp;b)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares the two specified <code>double</code> values.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;double[]</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Doubles.html#concat(double[]...)">concat</A></B>(double[]...&nbsp;arrays)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the values from each provided array combined into a single array.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Doubles.html#contains(double[], double)">contains</A></B>(double[]&nbsp;array,
-         double&nbsp;target)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if <code>target</code> is present as an element anywhere in
- <code>array</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;double[]</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Doubles.html#ensureCapacity(double[], int, int)">ensureCapacity</A></B>(double[]&nbsp;array,
-               int&nbsp;minLength,
-               int&nbsp;padding)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an array containing the same values as <code>array</code>, but
- guaranteed to be of a specified minimum length.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Doubles.html#hashCode(double)">hashCode</A></B>(double&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a hash code for <code>value</code>; equal to the result of invoking
- <code>((Double) value).hashCode()</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Doubles.html#indexOf(double[], double)">indexOf</A></B>(double[]&nbsp;array,
-        double&nbsp;target)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the index of the first appearance of the value <code>target</code> in
- <code>array</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Doubles.html#indexOf(double[], double[])">indexOf</A></B>(double[]&nbsp;array,
-        double[]&nbsp;target)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the start position of the first occurrence of the specified <code>target</code> within <code>array</code>, or <code>-1</code> if there is no such occurrence.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Doubles.html#join(java.lang.String, double...)">join</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;separator,
-     double...&nbsp;array)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a string containing the supplied <code>double</code> values, converted
- to strings as specified by <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Double.html?is-external=true#toString(double)" title="class or interface in java.lang"><CODE>Double.toString(double)</CODE></A>, and separated
- by <code>separator</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Doubles.html#lastIndexOf(double[], double)">lastIndexOf</A></B>(double[]&nbsp;array,
-            double&nbsp;target)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the index of the last appearance of the value <code>target</code> in
- <code>array</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;double[]&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Doubles.html#lexicographicalComparator()">lexicographicalComparator</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a comparator that compares two <code>double</code> arrays
- lexicographically.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;double</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Doubles.html#max(double...)">max</A></B>(double...&nbsp;array)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the greatest value present in <code>array</code>, using the same rules
- of comparison as <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Math.html?is-external=true#max(double, double)" title="class or interface in java.lang"><CODE>Math.max(double, double)</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;double</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Doubles.html#min(double...)">min</A></B>(double...&nbsp;array)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the least value present in <code>array</code>, using the same rules of
- comparison as <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Math.html?is-external=true#min(double, double)" title="class or interface in java.lang"><CODE>Math.min(double, double)</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;double[]</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Doubles.html#toArray(java.util.Collection)">toArray</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Double.html?is-external=true" title="class or interface in java.lang">Double</A>&gt;&nbsp;collection)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies a collection of <code>Double</code> instances into a new array of
- primitive <code>double</code> values.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="hashCode(double)"><!-- --></A><H3>
-hashCode</H3>
-<PRE>
-public static int <B>hashCode</B>(double&nbsp;value)</PRE>
-<DL>
-<DD>Returns a hash code for <code>value</code>; equal to the result of invoking
- <code>((Double) value).hashCode()</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>value</CODE> - a primitive <code>double</code> value
-<DT><B>Returns:</B><DD>a hash code for the value</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="compare(double, double)"><!-- --></A><H3>
-compare</H3>
-<PRE>
-public static int <B>compare</B>(double&nbsp;a,
-                          double&nbsp;b)</PRE>
-<DL>
-<DD>Compares the two specified <code>double</code> values. The sign of the value
- returned is the same as that of <code>((Double) a).<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Double.html?is-external=true#compareTo(java.lang.Double)" title="class or interface in java.lang">compareTo</A>(b)</code>. As with that method, <code>NaN</code> is
- treated as greater than all other values, and <code>0.0 &gt; -0.0</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>a</CODE> - the first <code>double</code> to compare<DD><CODE>b</CODE> - the second <code>double</code> to compare
-<DT><B>Returns:</B><DD>a negative value if <code>a</code> is less than <code>b</code>; a positive
-     value if <code>a</code> is greater than <code>b</code>; or zero if they are equal</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="contains(double[], double)"><!-- --></A><H3>
-contains</H3>
-<PRE>
-public static boolean <B>contains</B>(double[]&nbsp;array,
-                               double&nbsp;target)</PRE>
-<DL>
-<DD>Returns <code>true</code> if <code>target</code> is present as an element anywhere in
- <code>array</code>. Note that this always returns <code>false</code> when <code>target</code> is <code>NaN</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>array</CODE> - an array of <code>double</code> values, possibly empty<DD><CODE>target</CODE> - a primitive <code>double</code> value
-<DT><B>Returns:</B><DD><code>true</code> if <code>array[i] == target</code> for some value of <code>i</code></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="indexOf(double[], double)"><!-- --></A><H3>
-indexOf</H3>
-<PRE>
-public static int <B>indexOf</B>(double[]&nbsp;array,
-                          double&nbsp;target)</PRE>
-<DL>
-<DD>Returns the index of the first appearance of the value <code>target</code> in
- <code>array</code>. Note that this always returns <code>-1</code> when <code>target</code>
- is <code>NaN</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>array</CODE> - an array of <code>double</code> values, possibly empty<DD><CODE>target</CODE> - a primitive <code>double</code> value
-<DT><B>Returns:</B><DD>the least index <code>i</code> for which <code>array[i] == target</code>, or
-     <code>-1</code> if no such index exists.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="indexOf(double[], double[])"><!-- --></A><H3>
-indexOf</H3>
-<PRE>
-public static int <B>indexOf</B>(double[]&nbsp;array,
-                          double[]&nbsp;target)</PRE>
-<DL>
-<DD>Returns the start position of the first occurrence of the specified <code>target</code> within <code>array</code>, or <code>-1</code> if there is no such occurrence.
-
- <p>More formally, returns the lowest index <code>i</code> such that <code>java.util.Arrays.copyOfRange(array, i, i + target.length)</code> contains exactly
- the same elements as <code>target</code>.
-
- <p>Note that this always returns <code>-1</code> when <code>target</code> contains
- <code>NaN</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>array</CODE> - the array to search for the sequence <code>target</code><DD><CODE>target</CODE> - the array to search for as a sub-sequence of <code>array</code></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="lastIndexOf(double[], double)"><!-- --></A><H3>
-lastIndexOf</H3>
-<PRE>
-public static int <B>lastIndexOf</B>(double[]&nbsp;array,
-                              double&nbsp;target)</PRE>
-<DL>
-<DD>Returns the index of the last appearance of the value <code>target</code> in
- <code>array</code>. Note that this always returns <code>-1</code> when <code>target</code>
- is <code>NaN</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>array</CODE> - an array of <code>double</code> values, possibly empty<DD><CODE>target</CODE> - a primitive <code>double</code> value
-<DT><B>Returns:</B><DD>the greatest index <code>i</code> for which <code>array[i] == target</code>,
-     or <code>-1</code> if no such index exists.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="min(double...)"><!-- --></A><H3>
-min</H3>
-<PRE>
-public static double <B>min</B>(double...&nbsp;array)</PRE>
-<DL>
-<DD>Returns the least value present in <code>array</code>, using the same rules of
- comparison as <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Math.html?is-external=true#min(double, double)" title="class or interface in java.lang"><CODE>Math.min(double, double)</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>array</CODE> - a <i>nonempty</i> array of <code>double</code> values
-<DT><B>Returns:</B><DD>the value present in <code>array</code> that is less than or equal to
-     every other value in the array
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>array</code> is empty</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="max(double...)"><!-- --></A><H3>
-max</H3>
-<PRE>
-public static double <B>max</B>(double...&nbsp;array)</PRE>
-<DL>
-<DD>Returns the greatest value present in <code>array</code>, using the same rules
- of comparison as <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Math.html?is-external=true#max(double, double)" title="class or interface in java.lang"><CODE>Math.max(double, double)</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>array</CODE> - a <i>nonempty</i> array of <code>double</code> values
-<DT><B>Returns:</B><DD>the value present in <code>array</code> that is greater than or equal to
-     every other value in the array
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>array</code> is empty</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="concat(double[]...)"><!-- --></A><H3>
-concat</H3>
-<PRE>
-public static double[] <B>concat</B>(double[]...&nbsp;arrays)</PRE>
-<DL>
-<DD>Returns the values from each provided array combined into a single array.
- For example, <code>concat(new double[] {a, b}, new double[] {}, new
- double[] {c}</code> returns the array <code>{a, b, c}</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>arrays</CODE> - zero or more <code>double</code> arrays
-<DT><B>Returns:</B><DD>a single array containing all the values from the source arrays, in
-     order</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="ensureCapacity(double[], int, int)"><!-- --></A><H3>
-ensureCapacity</H3>
-<PRE>
-public static double[] <B>ensureCapacity</B>(double[]&nbsp;array,
-                                      int&nbsp;minLength,
-                                      int&nbsp;padding)</PRE>
-<DL>
-<DD>Returns an array containing the same values as <code>array</code>, but
- guaranteed to be of a specified minimum length. If <code>array</code> already
- has a length of at least <code>minLength</code>, it is returned directly.
- Otherwise, a new array of size <code>minLength + padding</code> is returned,
- containing the values of <code>array</code>, and zeroes in the remaining places.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>array</CODE> - the source array<DD><CODE>minLength</CODE> - the minimum length the returned array must guarantee<DD><CODE>padding</CODE> - an extra amount to "grow" the array by if growth is
-     necessary
-<DT><B>Returns:</B><DD>an array containing the values of <code>array</code>, with guaranteed
-     minimum length <code>minLength</code>
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>minLength</code> or <code>padding</code> is
-     negative</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="join(java.lang.String, double...)"><!-- --></A><H3>
-join</H3>
-<PRE>
-public static <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>join</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;separator,
-                          double...&nbsp;array)</PRE>
-<DL>
-<DD>Returns a string containing the supplied <code>double</code> values, converted
- to strings as specified by <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Double.html?is-external=true#toString(double)" title="class or interface in java.lang"><CODE>Double.toString(double)</CODE></A>, and separated
- by <code>separator</code>. For example, <code>join("-", 1.0, 2.0, 3.0)</code> returns
- the string <code>"1.0-2.0-3.0"</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>separator</CODE> - the text that should appear between consecutive values in
-     the resulting string (but not at the start or end)<DD><CODE>array</CODE> - an array of <code>double</code> values, possibly empty</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="lexicographicalComparator()"><!-- --></A><H3>
-lexicographicalComparator</H3>
-<PRE>
-public static <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;double[]&gt; <B>lexicographicalComparator</B>()</PRE>
-<DL>
-<DD>Returns a comparator that compares two <code>double</code> arrays
- lexicographically. That is, it compares, using <A HREF="../../../../com/google/common/primitives/Doubles.html#compare(double, double)"><CODE>compare(double, double)</CODE></A>), the first pair of values that follow any
- common prefix, or when one array is a prefix of the other, treats the
- shorter array as the lesser. For example,
- <code>[] &lt; [1.0] &lt; [1.0, 2.0] &lt; [2.0]</code>.
-
- <p>The returned comparator is inconsistent with <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(Object)</CODE></A> (since arrays support only identity equality), but
- it is consistent with <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true#equals(double[], double[])" title="class or interface in java.util"><CODE>Arrays.equals(double[], double[])</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>tentative</b></DD>
-<DT><B>See Also:</B><DD><a href="http://en.wikipedia.org/wiki/Lexicographical_order">
-     Lexicographical order</a> article at Wikipedia</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toArray(java.util.Collection)"><!-- --></A><H3>
-toArray</H3>
-<PRE>
-public static double[] <B>toArray</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Double.html?is-external=true" title="class or interface in java.lang">Double</A>&gt;&nbsp;collection)</PRE>
-<DL>
-<DD>Copies a collection of <code>Double</code> instances into a new array of
- primitive <code>double</code> values.
-
- <p>Elements are copied from the argument collection as if by <code>collection.toArray()</code>.  Calling this method is as thread-safe as calling
- that method.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>collection</CODE> - a collection of <code>Double</code> objects
-<DT><B>Returns:</B><DD>an array containing the same values as <code>collection</code>, in the
-     same order, converted to primitives
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>collection</code> or any of its elements
-     is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="asList(double...)"><!-- --></A><H3>
-asList</H3>
-<PRE>
-public static <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Double.html?is-external=true" title="class or interface in java.lang">Double</A>&gt; <B>asList</B>(double...&nbsp;backingArray)</PRE>
-<DL>
-<DD>Returns a fixed-size list backed by the specified array, similar to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true#asList(T...)" title="class or interface in java.util"><CODE>Arrays.asList(Object[])</CODE></A>. The list supports <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#set(int, E)" title="class or interface in java.util"><CODE>List.set(int, Object)</CODE></A>,
- but any attempt to set a value to <code>null</code> will result in a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang"><CODE>NullPointerException</CODE></A>.
-
- <p>The returned list maintains the values, but not the identities, of
- <code>Double</code> objects written to or read from it.  For example, whether
- <code>list.get(0) == list.get(0)</code> is true for the returned list is
- unspecified.
-
- <p>The returned list may have unexpected behavior if it contains <code>NaN</code>, or if <code>NaN</code> is used as a parameter to any of its methods.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>backingArray</CODE> - the array to back the list
-<DT><B>Returns:</B><DD>a list view of the array</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Doubles.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/primitives/Chars.html" title="class in com.google.common.primitives"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/primitives/Floats.html" title="class in com.google.common.primitives"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/primitives/Doubles.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Doubles.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/primitives/Floats.html b/javadoc/com/google/common/primitives/Floats.html
deleted file mode 100644
index 6b40d69..0000000
--- a/javadoc/com/google/common/primitives/Floats.html
+++ /dev/null
@@ -1,609 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Floats (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Floats (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Floats.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/primitives/Doubles.html" title="class in com.google.common.primitives"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/primitives/Ints.html" title="class in com.google.common.primitives"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/primitives/Floats.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Floats.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.primitives</FONT>
-<BR>
-Class Floats</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.primitives.Floats</B>
-</PRE>
-<HR>
-<DL>
-<DT><PRE>public final class <B>Floats</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
-</PRE>
-
-<P>
-Static utility methods pertaining to <code>float</code> primitives, that are not
- already found in either <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true" title="class or interface in java.lang"><CODE>Float</CODE></A> or <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true" title="class or interface in java.util"><CODE>Arrays</CODE></A>.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2009.09.15 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Kevin Bourrillion</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true" title="class or interface in java.lang">Float</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Floats.html#asList(float...)">asList</A></B>(float...&nbsp;backingArray)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a fixed-size list backed by the specified array, similar to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true#asList(T...)" title="class or interface in java.util"><CODE>Arrays.asList(Object[])</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Floats.html#compare(float, float)">compare</A></B>(float&nbsp;a,
-        float&nbsp;b)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares the two specified <code>float</code> values using <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true#compare(float, float)" title="class or interface in java.lang"><CODE>Float.compare(float, float)</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;float[]</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Floats.html#concat(float[]...)">concat</A></B>(float[]...&nbsp;arrays)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the values from each provided array combined into a single array.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Floats.html#contains(float[], float)">contains</A></B>(float[]&nbsp;array,
-         float&nbsp;target)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if <code>target</code> is present as an element anywhere in
- <code>array</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;float[]</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Floats.html#ensureCapacity(float[], int, int)">ensureCapacity</A></B>(float[]&nbsp;array,
-               int&nbsp;minLength,
-               int&nbsp;padding)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an array containing the same values as <code>array</code>, but
- guaranteed to be of a specified minimum length.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Floats.html#hashCode(float)">hashCode</A></B>(float&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a hash code for <code>value</code>; equal to the result of invoking
- <code>((Float) value).hashCode()</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Floats.html#indexOf(float[], float)">indexOf</A></B>(float[]&nbsp;array,
-        float&nbsp;target)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the index of the first appearance of the value <code>target</code> in
- <code>array</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Floats.html#indexOf(float[], float[])">indexOf</A></B>(float[]&nbsp;array,
-        float[]&nbsp;target)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the start position of the first occurrence of the specified <code>target</code> within <code>array</code>, or <code>-1</code> if there is no such occurrence.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Floats.html#join(java.lang.String, float...)">join</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;separator,
-     float...&nbsp;array)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a string containing the supplied <code>float</code> values, converted
- to strings as specified by <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true#toString(float)" title="class or interface in java.lang"><CODE>Float.toString(float)</CODE></A>, and separated by
- <code>separator</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Floats.html#lastIndexOf(float[], float)">lastIndexOf</A></B>(float[]&nbsp;array,
-            float&nbsp;target)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the index of the last appearance of the value <code>target</code> in
- <code>array</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;float[]&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Floats.html#lexicographicalComparator()">lexicographicalComparator</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a comparator that compares two <code>float</code> arrays
- lexicographically.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;float</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Floats.html#max(float...)">max</A></B>(float...&nbsp;array)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the greatest value present in <code>array</code>, using the same rules
- of comparison as <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Math.html?is-external=true#min(float, float)" title="class or interface in java.lang"><CODE>Math.min(float, float)</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;float</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Floats.html#min(float...)">min</A></B>(float...&nbsp;array)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the least value present in <code>array</code>, using the same rules of
- comparison as <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Math.html?is-external=true#min(float, float)" title="class or interface in java.lang"><CODE>Math.min(float, float)</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;float[]</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Floats.html#toArray(java.util.Collection)">toArray</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true" title="class or interface in java.lang">Float</A>&gt;&nbsp;collection)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies a collection of <code>Float</code> instances into a new array of
- primitive <code>float</code> values.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="hashCode(float)"><!-- --></A><H3>
-hashCode</H3>
-<PRE>
-public static int <B>hashCode</B>(float&nbsp;value)</PRE>
-<DL>
-<DD>Returns a hash code for <code>value</code>; equal to the result of invoking
- <code>((Float) value).hashCode()</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>value</CODE> - a primitive <code>float</code> value
-<DT><B>Returns:</B><DD>a hash code for the value</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="compare(float, float)"><!-- --></A><H3>
-compare</H3>
-<PRE>
-public static int <B>compare</B>(float&nbsp;a,
-                          float&nbsp;b)</PRE>
-<DL>
-<DD>Compares the two specified <code>float</code> values using <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true#compare(float, float)" title="class or interface in java.lang"><CODE>Float.compare(float, float)</CODE></A>. You may prefer to invoke that method
- directly; this method exists only for consistency with the other utilities
- in this package.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>a</CODE> - the first <code>float</code> to compare<DD><CODE>b</CODE> - the second <code>float</code> to compare
-<DT><B>Returns:</B><DD>the result of invoking <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true#compare(float, float)" title="class or interface in java.lang"><CODE>Float.compare(float, float)</CODE></A></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="contains(float[], float)"><!-- --></A><H3>
-contains</H3>
-<PRE>
-public static boolean <B>contains</B>(float[]&nbsp;array,
-                               float&nbsp;target)</PRE>
-<DL>
-<DD>Returns <code>true</code> if <code>target</code> is present as an element anywhere in
- <code>array</code>. Note that this always returns <code>false</code> when <code>target</code> is <code>NaN</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>array</CODE> - an array of <code>float</code> values, possibly empty<DD><CODE>target</CODE> - a primitive <code>float</code> value
-<DT><B>Returns:</B><DD><code>true</code> if <code>array[i] == target</code> for some value of <code>i</code></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="indexOf(float[], float)"><!-- --></A><H3>
-indexOf</H3>
-<PRE>
-public static int <B>indexOf</B>(float[]&nbsp;array,
-                          float&nbsp;target)</PRE>
-<DL>
-<DD>Returns the index of the first appearance of the value <code>target</code> in
- <code>array</code>. Note that this always returns <code>-1</code> when <code>target</code>
- is <code>NaN</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>array</CODE> - an array of <code>float</code> values, possibly empty<DD><CODE>target</CODE> - a primitive <code>float</code> value
-<DT><B>Returns:</B><DD>the least index <code>i</code> for which <code>array[i] == target</code>, or
-     <code>-1</code> if no such index exists.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="indexOf(float[], float[])"><!-- --></A><H3>
-indexOf</H3>
-<PRE>
-public static int <B>indexOf</B>(float[]&nbsp;array,
-                          float[]&nbsp;target)</PRE>
-<DL>
-<DD>Returns the start position of the first occurrence of the specified <code>target</code> within <code>array</code>, or <code>-1</code> if there is no such occurrence.
-
- <p>More formally, returns the lowest index <code>i</code> such that <code>java.util.Arrays.copyOfRange(array, i, i + target.length)</code> contains exactly
- the same elements as <code>target</code>.
-
- <p>Note that this always returns <code>-1</code> when <code>target</code> contains
- <code>NaN</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>array</CODE> - the array to search for the sequence <code>target</code><DD><CODE>target</CODE> - the array to search for as a sub-sequence of <code>array</code></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="lastIndexOf(float[], float)"><!-- --></A><H3>
-lastIndexOf</H3>
-<PRE>
-public static int <B>lastIndexOf</B>(float[]&nbsp;array,
-                              float&nbsp;target)</PRE>
-<DL>
-<DD>Returns the index of the last appearance of the value <code>target</code> in
- <code>array</code>. Note that this always returns <code>-1</code> when <code>target</code>
- is <code>NaN</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>array</CODE> - an array of <code>float</code> values, possibly empty<DD><CODE>target</CODE> - a primitive <code>float</code> value
-<DT><B>Returns:</B><DD>the greatest index <code>i</code> for which <code>array[i] == target</code>,
-     or <code>-1</code> if no such index exists.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="min(float...)"><!-- --></A><H3>
-min</H3>
-<PRE>
-public static float <B>min</B>(float...&nbsp;array)</PRE>
-<DL>
-<DD>Returns the least value present in <code>array</code>, using the same rules of
- comparison as <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Math.html?is-external=true#min(float, float)" title="class or interface in java.lang"><CODE>Math.min(float, float)</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>array</CODE> - a <i>nonempty</i> array of <code>float</code> values
-<DT><B>Returns:</B><DD>the value present in <code>array</code> that is less than or equal to
-     every other value in the array
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>array</code> is empty</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="max(float...)"><!-- --></A><H3>
-max</H3>
-<PRE>
-public static float <B>max</B>(float...&nbsp;array)</PRE>
-<DL>
-<DD>Returns the greatest value present in <code>array</code>, using the same rules
- of comparison as <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Math.html?is-external=true#min(float, float)" title="class or interface in java.lang"><CODE>Math.min(float, float)</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>array</CODE> - a <i>nonempty</i> array of <code>float</code> values
-<DT><B>Returns:</B><DD>the value present in <code>array</code> that is greater than or equal to
-     every other value in the array
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>array</code> is empty</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="concat(float[]...)"><!-- --></A><H3>
-concat</H3>
-<PRE>
-public static float[] <B>concat</B>(float[]...&nbsp;arrays)</PRE>
-<DL>
-<DD>Returns the values from each provided array combined into a single array.
- For example, <code>concat(new float[] {a, b}, new float[] {}, new
- float[] {c}</code> returns the array <code>{a, b, c}</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>arrays</CODE> - zero or more <code>float</code> arrays
-<DT><B>Returns:</B><DD>a single array containing all the values from the source arrays, in
-     order</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="ensureCapacity(float[], int, int)"><!-- --></A><H3>
-ensureCapacity</H3>
-<PRE>
-public static float[] <B>ensureCapacity</B>(float[]&nbsp;array,
-                                     int&nbsp;minLength,
-                                     int&nbsp;padding)</PRE>
-<DL>
-<DD>Returns an array containing the same values as <code>array</code>, but
- guaranteed to be of a specified minimum length. If <code>array</code> already
- has a length of at least <code>minLength</code>, it is returned directly.
- Otherwise, a new array of size <code>minLength + padding</code> is returned,
- containing the values of <code>array</code>, and zeroes in the remaining places.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>array</CODE> - the source array<DD><CODE>minLength</CODE> - the minimum length the returned array must guarantee<DD><CODE>padding</CODE> - an extra amount to "grow" the array by if growth is
-     necessary
-<DT><B>Returns:</B><DD>an array containing the values of <code>array</code>, with guaranteed
-     minimum length <code>minLength</code>
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>minLength</code> or <code>padding</code> is
-     negative</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="join(java.lang.String, float...)"><!-- --></A><H3>
-join</H3>
-<PRE>
-public static <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>join</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;separator,
-                          float...&nbsp;array)</PRE>
-<DL>
-<DD>Returns a string containing the supplied <code>float</code> values, converted
- to strings as specified by <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true#toString(float)" title="class or interface in java.lang"><CODE>Float.toString(float)</CODE></A>, and separated by
- <code>separator</code>. For example, <code>join("-", 1.0f, 2.0f, 3.0f)</code>
- returns the string <code>"1.0-2.0-3.0"</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>separator</CODE> - the text that should appear between consecutive values in
-     the resulting string (but not at the start or end)<DD><CODE>array</CODE> - an array of <code>float</code> values, possibly empty</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="lexicographicalComparator()"><!-- --></A><H3>
-lexicographicalComparator</H3>
-<PRE>
-public static <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;float[]&gt; <B>lexicographicalComparator</B>()</PRE>
-<DL>
-<DD>Returns a comparator that compares two <code>float</code> arrays
- lexicographically. That is, it compares, using <A HREF="../../../../com/google/common/primitives/Floats.html#compare(float, float)"><CODE>compare(float, float)</CODE></A>), the first pair of values that follow any
- common prefix, or when one array is a prefix of the other, treats the
- shorter array as the lesser. For example, <code>[] &lt; [1.0f] &lt; [1.0f, 2.0f]
- &lt; [2.0f]</code>.
-
- <p>The returned comparator is inconsistent with <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(Object)</CODE></A> (since arrays support only identity equality), but
- it is consistent with <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true#equals(float[], float[])" title="class or interface in java.util"><CODE>Arrays.equals(float[], float[])</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>tentative</b></DD>
-<DT><B>See Also:</B><DD><a href="http://en.wikipedia.org/wiki/Lexicographical_order">
-     Lexicographical order</a> article at Wikipedia</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toArray(java.util.Collection)"><!-- --></A><H3>
-toArray</H3>
-<PRE>
-public static float[] <B>toArray</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true" title="class or interface in java.lang">Float</A>&gt;&nbsp;collection)</PRE>
-<DL>
-<DD>Copies a collection of <code>Float</code> instances into a new array of
- primitive <code>float</code> values.
-
- <p>Elements are copied from the argument collection as if by <code>collection.toArray()</code>.  Calling this method is as thread-safe as calling
- that method.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>collection</CODE> - a collection of <code>Float</code> objects
-<DT><B>Returns:</B><DD>an array containing the same values as <code>collection</code>, in the
-     same order, converted to primitives
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>collection</code> or any of its elements
-     is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="asList(float...)"><!-- --></A><H3>
-asList</H3>
-<PRE>
-public static <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true" title="class or interface in java.lang">Float</A>&gt; <B>asList</B>(float...&nbsp;backingArray)</PRE>
-<DL>
-<DD>Returns a fixed-size list backed by the specified array, similar to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true#asList(T...)" title="class or interface in java.util"><CODE>Arrays.asList(Object[])</CODE></A>. The list supports <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#set(int, E)" title="class or interface in java.util"><CODE>List.set(int, Object)</CODE></A>,
- but any attempt to set a value to <code>null</code> will result in a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang"><CODE>NullPointerException</CODE></A>.
-
- <p>The returned list maintains the values, but not the identities, of
- <code>Float</code> objects written to or read from it.  For example, whether
- <code>list.get(0) == list.get(0)</code> is true for the returned list is
- unspecified.
-
- <p>The returned list may have unexpected behavior if it contains <code>NaN</code>, or if <code>NaN</code> is used as a parameter to any of its methods.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>backingArray</CODE> - the array to back the list
-<DT><B>Returns:</B><DD>a list view of the array</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Floats.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/primitives/Doubles.html" title="class in com.google.common.primitives"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/primitives/Ints.html" title="class in com.google.common.primitives"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/primitives/Floats.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Floats.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/primitives/Ints.html b/javadoc/com/google/common/primitives/Ints.html
deleted file mode 100644
index bc4dc61..0000000
--- a/javadoc/com/google/common/primitives/Ints.html
+++ /dev/null
@@ -1,745 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Ints (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Ints (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Ints.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/primitives/Floats.html" title="class in com.google.common.primitives"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/primitives/Longs.html" title="class in com.google.common.primitives"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/primitives/Ints.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Ints.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.primitives</FONT>
-<BR>
-Class Ints</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.primitives.Ints</B>
-</PRE>
-<HR>
-<DL>
-<DT><PRE>public final class <B>Ints</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
-</PRE>
-
-<P>
-Static utility methods pertaining to <code>int</code> primitives, that are not
- already found in either <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang"><CODE>Integer</CODE></A> or <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true" title="class or interface in java.util"><CODE>Arrays</CODE></A>.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2009.09.15 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Kevin Bourrillion</DD>
-</DL>
-<HR>
-
-<P>
-<!-- =========== FIELD SUMMARY =========== -->
-
-<A NAME="field_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Field Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Ints.html#BYTES">BYTES</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of bytes required to represent a primitive <code>int</code>
- value.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Ints.html#asList(int...)">asList</A></B>(int...&nbsp;backingArray)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a fixed-size list backed by the specified array, similar to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true#asList(T...)" title="class or interface in java.util"><CODE>Arrays.asList(Object[])</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Ints.html#checkedCast(long)">checkedCast</A></B>(long&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the <code>int</code> value that is equal to <code>value</code>, if possible.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Ints.html#compare(int, int)">compare</A></B>(int&nbsp;a,
-        int&nbsp;b)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares the two specified <code>int</code> values.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int[]</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Ints.html#concat(int[]...)">concat</A></B>(int[]...&nbsp;arrays)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the values from each provided array combined into a single array.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Ints.html#contains(int[], int)">contains</A></B>(int[]&nbsp;array,
-         int&nbsp;target)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if <code>target</code> is present as an element anywhere in
- <code>array</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int[]</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Ints.html#ensureCapacity(int[], int, int)">ensureCapacity</A></B>(int[]&nbsp;array,
-               int&nbsp;minLength,
-               int&nbsp;padding)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an array containing the same values as <code>array</code>, but
- guaranteed to be of a specified minimum length.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Ints.html#fromByteArray(byte[])">fromByteArray</A></B>(byte[]&nbsp;bytes)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the <code>int</code> value whose big-endian representation is stored in
- the first 4 bytes of <code>bytes</code>; equivalent to <code>ByteBuffer.wrap(bytes).getInt()</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Ints.html#hashCode(int)">hashCode</A></B>(int&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a hash code for <code>value</code>; equal to the result of invoking
- <code>((Integer) value).hashCode()</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Ints.html#indexOf(int[], int)">indexOf</A></B>(int[]&nbsp;array,
-        int&nbsp;target)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the index of the first appearance of the value <code>target</code> in
- <code>array</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Ints.html#indexOf(int[], int[])">indexOf</A></B>(int[]&nbsp;array,
-        int[]&nbsp;target)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the start position of the first occurrence of the specified <code>target</code> within <code>array</code>, or <code>-1</code> if there is no such occurrence.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Ints.html#join(java.lang.String, int...)">join</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;separator,
-     int...&nbsp;array)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a string containing the supplied <code>int</code> values separated
- by <code>separator</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Ints.html#lastIndexOf(int[], int)">lastIndexOf</A></B>(int[]&nbsp;array,
-            int&nbsp;target)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the index of the last appearance of the value <code>target</code> in
- <code>array</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;int[]&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Ints.html#lexicographicalComparator()">lexicographicalComparator</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a comparator that compares two <code>int</code> arrays
- lexicographically.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Ints.html#max(int...)">max</A></B>(int...&nbsp;array)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the greatest value present in <code>array</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Ints.html#min(int...)">min</A></B>(int...&nbsp;array)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the least value present in <code>array</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Ints.html#saturatedCast(long)">saturatedCast</A></B>(long&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the <code>int</code> nearest in value to <code>value</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int[]</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Ints.html#toArray(java.util.Collection)">toArray</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</A>&gt;&nbsp;collection)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies a collection of <code>Integer</code> instances into a new array of
- primitive <code>int</code> values.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;byte[]</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Ints.html#toByteArray(int)">toByteArray</A></B>(int&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a big-endian representation of <code>value</code> in a 4-element byte
- array; equivalent to <code>ByteBuffer.allocate(4).putInt(value).array()</code>.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ FIELD DETAIL =========== -->
-
-<A NAME="field_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Field Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="BYTES"><!-- --></A><H3>
-BYTES</H3>
-<PRE>
-public static final int <B>BYTES</B></PRE>
-<DL>
-<DD>The number of bytes required to represent a primitive <code>int</code>
- value.
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#com.google.common.primitives.Ints.BYTES">Constant Field Values</A></DL>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="hashCode(int)"><!-- --></A><H3>
-hashCode</H3>
-<PRE>
-public static int <B>hashCode</B>(int&nbsp;value)</PRE>
-<DL>
-<DD>Returns a hash code for <code>value</code>; equal to the result of invoking
- <code>((Integer) value).hashCode()</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>value</CODE> - a primitive <code>int</code> value
-<DT><B>Returns:</B><DD>a hash code for the value</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="checkedCast(long)"><!-- --></A><H3>
-checkedCast</H3>
-<PRE>
-public static int <B>checkedCast</B>(long&nbsp;value)</PRE>
-<DL>
-<DD>Returns the <code>int</code> value that is equal to <code>value</code>, if possible.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>value</CODE> - any value in the range of the <code>int</code> type
-<DT><B>Returns:</B><DD>the <code>int</code> value that equals <code>value</code>
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>value</code> is greater than <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true#MAX_VALUE" title="class or interface in java.lang"><CODE>Integer.MAX_VALUE</CODE></A> or less than <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true#MIN_VALUE" title="class or interface in java.lang"><CODE>Integer.MIN_VALUE</CODE></A></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="saturatedCast(long)"><!-- --></A><H3>
-saturatedCast</H3>
-<PRE>
-public static int <B>saturatedCast</B>(long&nbsp;value)</PRE>
-<DL>
-<DD>Returns the <code>int</code> nearest in value to <code>value</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>value</CODE> - any <code>long</code> value
-<DT><B>Returns:</B><DD>the same value cast to <code>int</code> if it is in the range of the
-     <code>int</code> type, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true#MAX_VALUE" title="class or interface in java.lang"><CODE>Integer.MAX_VALUE</CODE></A> if it is too large,
-     or <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true#MIN_VALUE" title="class or interface in java.lang"><CODE>Integer.MIN_VALUE</CODE></A> if it is too small</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="compare(int, int)"><!-- --></A><H3>
-compare</H3>
-<PRE>
-public static int <B>compare</B>(int&nbsp;a,
-                          int&nbsp;b)</PRE>
-<DL>
-<DD>Compares the two specified <code>int</code> values. The sign of the value
- returned is the same as that of <code>((Integer) a).compareTo(b)</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>a</CODE> - the first <code>int</code> to compare<DD><CODE>b</CODE> - the second <code>int</code> to compare
-<DT><B>Returns:</B><DD>a negative value if <code>a</code> is less than <code>b</code>; a positive
-     value if <code>a</code> is greater than <code>b</code>; or zero if they are equal</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="contains(int[], int)"><!-- --></A><H3>
-contains</H3>
-<PRE>
-public static boolean <B>contains</B>(int[]&nbsp;array,
-                               int&nbsp;target)</PRE>
-<DL>
-<DD>Returns <code>true</code> if <code>target</code> is present as an element anywhere in
- <code>array</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>array</CODE> - an array of <code>int</code> values, possibly empty<DD><CODE>target</CODE> - a primitive <code>int</code> value
-<DT><B>Returns:</B><DD><code>true</code> if <code>array[i] == target</code> for some value of <code>i</code></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="indexOf(int[], int)"><!-- --></A><H3>
-indexOf</H3>
-<PRE>
-public static int <B>indexOf</B>(int[]&nbsp;array,
-                          int&nbsp;target)</PRE>
-<DL>
-<DD>Returns the index of the first appearance of the value <code>target</code> in
- <code>array</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>array</CODE> - an array of <code>int</code> values, possibly empty<DD><CODE>target</CODE> - a primitive <code>int</code> value
-<DT><B>Returns:</B><DD>the least index <code>i</code> for which <code>array[i] == target</code>, or
-     <code>-1</code> if no such index exists.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="indexOf(int[], int[])"><!-- --></A><H3>
-indexOf</H3>
-<PRE>
-public static int <B>indexOf</B>(int[]&nbsp;array,
-                          int[]&nbsp;target)</PRE>
-<DL>
-<DD>Returns the start position of the first occurrence of the specified <code>target</code> within <code>array</code>, or <code>-1</code> if there is no such occurrence.
-
- <p>More formally, returns the lowest index <code>i</code> such that <code>java.util.Arrays.copyOfRange(array, i, i + target.length)</code> contains exactly
- the same elements as <code>target</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>array</CODE> - the array to search for the sequence <code>target</code><DD><CODE>target</CODE> - the array to search for as a sub-sequence of <code>array</code></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="lastIndexOf(int[], int)"><!-- --></A><H3>
-lastIndexOf</H3>
-<PRE>
-public static int <B>lastIndexOf</B>(int[]&nbsp;array,
-                              int&nbsp;target)</PRE>
-<DL>
-<DD>Returns the index of the last appearance of the value <code>target</code> in
- <code>array</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>array</CODE> - an array of <code>int</code> values, possibly empty<DD><CODE>target</CODE> - a primitive <code>int</code> value
-<DT><B>Returns:</B><DD>the greatest index <code>i</code> for which <code>array[i] == target</code>,
-     or <code>-1</code> if no such index exists.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="min(int...)"><!-- --></A><H3>
-min</H3>
-<PRE>
-public static int <B>min</B>(int...&nbsp;array)</PRE>
-<DL>
-<DD>Returns the least value present in <code>array</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>array</CODE> - a <i>nonempty</i> array of <code>int</code> values
-<DT><B>Returns:</B><DD>the value present in <code>array</code> that is less than or equal to
-     every other value in the array
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>array</code> is empty</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="max(int...)"><!-- --></A><H3>
-max</H3>
-<PRE>
-public static int <B>max</B>(int...&nbsp;array)</PRE>
-<DL>
-<DD>Returns the greatest value present in <code>array</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>array</CODE> - a <i>nonempty</i> array of <code>int</code> values
-<DT><B>Returns:</B><DD>the value present in <code>array</code> that is greater than or equal to
-     every other value in the array
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>array</code> is empty</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="concat(int[]...)"><!-- --></A><H3>
-concat</H3>
-<PRE>
-public static int[] <B>concat</B>(int[]...&nbsp;arrays)</PRE>
-<DL>
-<DD>Returns the values from each provided array combined into a single array.
- For example, <code>concat(new int[] {a, b}, new int[] {}, new
- int[] {c}</code> returns the array <code>{a, b, c}</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>arrays</CODE> - zero or more <code>int</code> arrays
-<DT><B>Returns:</B><DD>a single array containing all the values from the source arrays, in
-     order</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toByteArray(int)"><!-- --></A><H3>
-toByteArray</H3>
-<PRE>
-public static byte[] <B>toByteArray</B>(int&nbsp;value)</PRE>
-<DL>
-<DD>Returns a big-endian representation of <code>value</code> in a 4-element byte
- array; equivalent to <code>ByteBuffer.allocate(4).putInt(value).array()</code>.
- For example, the input value <code>0x12131415</code> would yield the byte array
- <code>{0x12, 0x13, 0x14, 0x15}</code>.
-
- <p>If you need to convert and concatenate several values (possibly even of
- different types), use a shared <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio"><CODE>ByteBuffer</CODE></A> instance, or use
- <A HREF="../../../../com/google/common/io/ByteStreams.html#newDataOutput()"><CODE>ByteStreams.newDataOutput()</CODE></A> to get a growable
- buffer.
-
- <p><b>Warning:</b> do not use this method in GWT. It returns wrong answers.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="fromByteArray(byte[])"><!-- --></A><H3>
-fromByteArray</H3>
-<PRE>
-public static int <B>fromByteArray</B>(byte[]&nbsp;bytes)</PRE>
-<DL>
-<DD>Returns the <code>int</code> value whose big-endian representation is stored in
- the first 4 bytes of <code>bytes</code>; equivalent to <code>ByteBuffer.wrap(bytes).getInt()</code>. For example, the input byte array <code>{0x12, 0x13, 0x14, 0x15, 0x33}</code> would yield the <code>int</code> value <code>0x12131415</code>.
-
- <p>Arguably, it's preferable to use <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio"><CODE>ByteBuffer</CODE></A>; that
- library exposes much more flexibility at little cost in readability.
-
- <p><b>Warning:</b> do not use this method in GWT. It returns wrong answers.
-<P>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>bytes</code> has fewer than 4 elements</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="ensureCapacity(int[], int, int)"><!-- --></A><H3>
-ensureCapacity</H3>
-<PRE>
-public static int[] <B>ensureCapacity</B>(int[]&nbsp;array,
-                                   int&nbsp;minLength,
-                                   int&nbsp;padding)</PRE>
-<DL>
-<DD>Returns an array containing the same values as <code>array</code>, but
- guaranteed to be of a specified minimum length. If <code>array</code> already
- has a length of at least <code>minLength</code>, it is returned directly.
- Otherwise, a new array of size <code>minLength + padding</code> is returned,
- containing the values of <code>array</code>, and zeroes in the remaining places.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>array</CODE> - the source array<DD><CODE>minLength</CODE> - the minimum length the returned array must guarantee<DD><CODE>padding</CODE> - an extra amount to "grow" the array by if growth is
-     necessary
-<DT><B>Returns:</B><DD>an array containing the values of <code>array</code>, with guaranteed
-     minimum length <code>minLength</code>
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>minLength</code> or <code>padding</code> is
-     negative</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="join(java.lang.String, int...)"><!-- --></A><H3>
-join</H3>
-<PRE>
-public static <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>join</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;separator,
-                          int...&nbsp;array)</PRE>
-<DL>
-<DD>Returns a string containing the supplied <code>int</code> values separated
- by <code>separator</code>. For example, <code>join("-", 1, 2, 3)</code> returns
- the string <code>"1-2-3"</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>separator</CODE> - the text that should appear between consecutive values in
-     the resulting string (but not at the start or end)<DD><CODE>array</CODE> - an array of <code>int</code> values, possibly empty</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="lexicographicalComparator()"><!-- --></A><H3>
-lexicographicalComparator</H3>
-<PRE>
-public static <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;int[]&gt; <B>lexicographicalComparator</B>()</PRE>
-<DL>
-<DD>Returns a comparator that compares two <code>int</code> arrays
- lexicographically. That is, it compares, using <A HREF="../../../../com/google/common/primitives/Ints.html#compare(int, int)"><CODE>compare(int, int)</CODE></A>), the first pair of values that follow any
- common prefix, or when one array is a prefix of the other, treats the
- shorter array as the lesser. For example, <code>[] &lt; [1] &lt; [1, 2] &lt; [2]</code>.
-
- <p>The returned comparator is inconsistent with <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(Object)</CODE></A> (since arrays support only identity equality), but
- it is consistent with <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true#equals(int[], int[])" title="class or interface in java.util"><CODE>Arrays.equals(int[], int[])</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>tentative</b></DD>
-<DT><B>See Also:</B><DD><a href="http://en.wikipedia.org/wiki/Lexicographical_order">
-     Lexicographical order</a> article at Wikipedia</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toArray(java.util.Collection)"><!-- --></A><H3>
-toArray</H3>
-<PRE>
-public static int[] <B>toArray</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</A>&gt;&nbsp;collection)</PRE>
-<DL>
-<DD>Copies a collection of <code>Integer</code> instances into a new array of
- primitive <code>int</code> values.
-
- <p>Elements are copied from the argument collection as if by <code>collection.toArray()</code>.  Calling this method is as thread-safe as calling
- that method.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>collection</CODE> - a collection of <code>Integer</code> objects
-<DT><B>Returns:</B><DD>an array containing the same values as <code>collection</code>, in the
-     same order, converted to primitives
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>collection</code> or any of its elements
-     is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="asList(int...)"><!-- --></A><H3>
-asList</H3>
-<PRE>
-public static <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</A>&gt; <B>asList</B>(int...&nbsp;backingArray)</PRE>
-<DL>
-<DD>Returns a fixed-size list backed by the specified array, similar to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true#asList(T...)" title="class or interface in java.util"><CODE>Arrays.asList(Object[])</CODE></A>. The list supports <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#set(int, E)" title="class or interface in java.util"><CODE>List.set(int, Object)</CODE></A>,
- but any attempt to set a value to <code>null</code> will result in a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang"><CODE>NullPointerException</CODE></A>.
-
- <p>The returned list maintains the values, but not the identities, of
- <code>Integer</code> objects written to or read from it.  For example, whether
- <code>list.get(0) == list.get(0)</code> is true for the returned list is
- unspecified.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>backingArray</CODE> - the array to back the list
-<DT><B>Returns:</B><DD>a list view of the array</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Ints.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/primitives/Floats.html" title="class in com.google.common.primitives"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/primitives/Longs.html" title="class in com.google.common.primitives"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/primitives/Ints.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Ints.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/primitives/Longs.html b/javadoc/com/google/common/primitives/Longs.html
deleted file mode 100644
index 7b371cc..0000000
--- a/javadoc/com/google/common/primitives/Longs.html
+++ /dev/null
@@ -1,701 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Longs (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Longs (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Longs.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/primitives/Ints.html" title="class in com.google.common.primitives"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/primitives/Primitives.html" title="class in com.google.common.primitives"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/primitives/Longs.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Longs.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.primitives</FONT>
-<BR>
-Class Longs</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.primitives.Longs</B>
-</PRE>
-<HR>
-<DL>
-<DT><PRE>public final class <B>Longs</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
-</PRE>
-
-<P>
-Static utility methods pertaining to <code>long</code> primitives, that are not
- already found in either <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang"><CODE>Long</CODE></A> or <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true" title="class or interface in java.util"><CODE>Arrays</CODE></A>.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2009.09.15 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Kevin Bourrillion</DD>
-</DL>
-<HR>
-
-<P>
-<!-- =========== FIELD SUMMARY =========== -->
-
-<A NAME="field_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Field Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Longs.html#BYTES">BYTES</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of bytes required to represent a primitive <code>long</code>
- value.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Longs.html#asList(long...)">asList</A></B>(long...&nbsp;backingArray)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a fixed-size list backed by the specified array, similar to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true#asList(T...)" title="class or interface in java.util"><CODE>Arrays.asList(Object[])</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Longs.html#compare(long, long)">compare</A></B>(long&nbsp;a,
-        long&nbsp;b)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares the two specified <code>long</code> values.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;long[]</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Longs.html#concat(long[]...)">concat</A></B>(long[]...&nbsp;arrays)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the values from each provided array combined into a single array.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Longs.html#contains(long[], long)">contains</A></B>(long[]&nbsp;array,
-         long&nbsp;target)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if <code>target</code> is present as an element anywhere in
- <code>array</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;long[]</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Longs.html#ensureCapacity(long[], int, int)">ensureCapacity</A></B>(long[]&nbsp;array,
-               int&nbsp;minLength,
-               int&nbsp;padding)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an array containing the same values as <code>array</code>, but
- guaranteed to be of a specified minimum length.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;long</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Longs.html#fromByteArray(byte[])">fromByteArray</A></B>(byte[]&nbsp;bytes)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the <code>long</code> value whose big-endian representation is
- stored in the first 8 bytes of <code>bytes</code>; equivalent to <code>ByteBuffer.wrap(bytes).getLong()</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Longs.html#hashCode(long)">hashCode</A></B>(long&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a hash code for <code>value</code>; equal to the result of invoking
- <code>((Long) value).hashCode()</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Longs.html#indexOf(long[], long)">indexOf</A></B>(long[]&nbsp;array,
-        long&nbsp;target)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the index of the first appearance of the value <code>target</code> in
- <code>array</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Longs.html#indexOf(long[], long[])">indexOf</A></B>(long[]&nbsp;array,
-        long[]&nbsp;target)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the start position of the first occurrence of the specified <code>target</code> within <code>array</code>, or <code>-1</code> if there is no such occurrence.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Longs.html#join(java.lang.String, long...)">join</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;separator,
-     long...&nbsp;array)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a string containing the supplied <code>long</code> values separated
- by <code>separator</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Longs.html#lastIndexOf(long[], long)">lastIndexOf</A></B>(long[]&nbsp;array,
-            long&nbsp;target)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the index of the last appearance of the value <code>target</code> in
- <code>array</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;long[]&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Longs.html#lexicographicalComparator()">lexicographicalComparator</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a comparator that compares two <code>long</code> arrays
- lexicographically.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;long</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Longs.html#max(long...)">max</A></B>(long...&nbsp;array)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the greatest value present in <code>array</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;long</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Longs.html#min(long...)">min</A></B>(long...&nbsp;array)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the least value present in <code>array</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;long[]</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Longs.html#toArray(java.util.Collection)">toArray</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</A>&gt;&nbsp;collection)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies a collection of <code>Long</code> instances into a new array of
- primitive <code>long</code> values.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;byte[]</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Longs.html#toByteArray(long)">toByteArray</A></B>(long&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a big-endian representation of <code>value</code> in an 8-element byte
- array; equivalent to <code>ByteBuffer.allocate(8).putLong(value).array()</code>.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ FIELD DETAIL =========== -->
-
-<A NAME="field_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Field Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="BYTES"><!-- --></A><H3>
-BYTES</H3>
-<PRE>
-public static final int <B>BYTES</B></PRE>
-<DL>
-<DD>The number of bytes required to represent a primitive <code>long</code>
- value.
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#com.google.common.primitives.Longs.BYTES">Constant Field Values</A></DL>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="hashCode(long)"><!-- --></A><H3>
-hashCode</H3>
-<PRE>
-public static int <B>hashCode</B>(long&nbsp;value)</PRE>
-<DL>
-<DD>Returns a hash code for <code>value</code>; equal to the result of invoking
- <code>((Long) value).hashCode()</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>value</CODE> - a primitive <code>long</code> value
-<DT><B>Returns:</B><DD>a hash code for the value</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="compare(long, long)"><!-- --></A><H3>
-compare</H3>
-<PRE>
-public static int <B>compare</B>(long&nbsp;a,
-                          long&nbsp;b)</PRE>
-<DL>
-<DD>Compares the two specified <code>long</code> values. The sign of the value
- returned is the same as that of <code>((Long) a).compareTo(b)</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>a</CODE> - the first <code>long</code> to compare<DD><CODE>b</CODE> - the second <code>long</code> to compare
-<DT><B>Returns:</B><DD>a negative value if <code>a</code> is less than <code>b</code>; a positive
-     value if <code>a</code> is greater than <code>b</code>; or zero if they are equal</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="contains(long[], long)"><!-- --></A><H3>
-contains</H3>
-<PRE>
-public static boolean <B>contains</B>(long[]&nbsp;array,
-                               long&nbsp;target)</PRE>
-<DL>
-<DD>Returns <code>true</code> if <code>target</code> is present as an element anywhere in
- <code>array</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>array</CODE> - an array of <code>long</code> values, possibly empty<DD><CODE>target</CODE> - a primitive <code>long</code> value
-<DT><B>Returns:</B><DD><code>true</code> if <code>array[i] == target</code> for some value of <code>i</code></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="indexOf(long[], long)"><!-- --></A><H3>
-indexOf</H3>
-<PRE>
-public static int <B>indexOf</B>(long[]&nbsp;array,
-                          long&nbsp;target)</PRE>
-<DL>
-<DD>Returns the index of the first appearance of the value <code>target</code> in
- <code>array</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>array</CODE> - an array of <code>long</code> values, possibly empty<DD><CODE>target</CODE> - a primitive <code>long</code> value
-<DT><B>Returns:</B><DD>the least index <code>i</code> for which <code>array[i] == target</code>, or
-     <code>-1</code> if no such index exists.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="indexOf(long[], long[])"><!-- --></A><H3>
-indexOf</H3>
-<PRE>
-public static int <B>indexOf</B>(long[]&nbsp;array,
-                          long[]&nbsp;target)</PRE>
-<DL>
-<DD>Returns the start position of the first occurrence of the specified <code>target</code> within <code>array</code>, or <code>-1</code> if there is no such occurrence.
-
- <p>More formally, returns the lowest index <code>i</code> such that <code>java.util.Arrays.copyOfRange(array, i, i + target.length)</code> contains exactly
- the same elements as <code>target</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>array</CODE> - the array to search for the sequence <code>target</code><DD><CODE>target</CODE> - the array to search for as a sub-sequence of <code>array</code></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="lastIndexOf(long[], long)"><!-- --></A><H3>
-lastIndexOf</H3>
-<PRE>
-public static int <B>lastIndexOf</B>(long[]&nbsp;array,
-                              long&nbsp;target)</PRE>
-<DL>
-<DD>Returns the index of the last appearance of the value <code>target</code> in
- <code>array</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>array</CODE> - an array of <code>long</code> values, possibly empty<DD><CODE>target</CODE> - a primitive <code>long</code> value
-<DT><B>Returns:</B><DD>the greatest index <code>i</code> for which <code>array[i] == target</code>,
-     or <code>-1</code> if no such index exists.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="min(long...)"><!-- --></A><H3>
-min</H3>
-<PRE>
-public static long <B>min</B>(long...&nbsp;array)</PRE>
-<DL>
-<DD>Returns the least value present in <code>array</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>array</CODE> - a <i>nonempty</i> array of <code>long</code> values
-<DT><B>Returns:</B><DD>the value present in <code>array</code> that is less than or equal to
-     every other value in the array
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>array</code> is empty</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="max(long...)"><!-- --></A><H3>
-max</H3>
-<PRE>
-public static long <B>max</B>(long...&nbsp;array)</PRE>
-<DL>
-<DD>Returns the greatest value present in <code>array</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>array</CODE> - a <i>nonempty</i> array of <code>long</code> values
-<DT><B>Returns:</B><DD>the value present in <code>array</code> that is greater than or equal to
-     every other value in the array
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>array</code> is empty</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="concat(long[]...)"><!-- --></A><H3>
-concat</H3>
-<PRE>
-public static long[] <B>concat</B>(long[]...&nbsp;arrays)</PRE>
-<DL>
-<DD>Returns the values from each provided array combined into a single array.
- For example, <code>concat(new long[] {a, b}, new long[] {}, new
- long[] {c}</code> returns the array <code>{a, b, c}</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>arrays</CODE> - zero or more <code>long</code> arrays
-<DT><B>Returns:</B><DD>a single array containing all the values from the source arrays, in
-     order</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toByteArray(long)"><!-- --></A><H3>
-toByteArray</H3>
-<PRE>
-public static byte[] <B>toByteArray</B>(long&nbsp;value)</PRE>
-<DL>
-<DD>Returns a big-endian representation of <code>value</code> in an 8-element byte
- array; equivalent to <code>ByteBuffer.allocate(8).putLong(value).array()</code>.
- For example, the input value <code>0x1213141516171819L</code> would yield the
- byte array <code>{0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19}</code>.
-
- <p>If you need to convert and concatenate several values (possibly even of
- different types), use a shared <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio"><CODE>ByteBuffer</CODE></A> instance, or use
- <A HREF="../../../../com/google/common/io/ByteStreams.html#newDataOutput()"><CODE>ByteStreams.newDataOutput()</CODE></A> to get a growable
- buffer.
-
- <p><b>Warning:</b> do not use this method in GWT. It returns wrong answers.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="fromByteArray(byte[])"><!-- --></A><H3>
-fromByteArray</H3>
-<PRE>
-public static long <B>fromByteArray</B>(byte[]&nbsp;bytes)</PRE>
-<DL>
-<DD>Returns the <code>long</code> value whose big-endian representation is
- stored in the first 8 bytes of <code>bytes</code>; equivalent to <code>ByteBuffer.wrap(bytes).getLong()</code>. For example, the input byte array
- <code>{0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19}</code> would yield the
- <code>long</code> value <code>0x1213141516171819L</code>.
-
- <p>Arguably, it's preferable to use <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio"><CODE>ByteBuffer</CODE></A>; that
- library exposes much more flexibility at little cost in readability.
-
- <p><b>Warning:</b> do not use this method in GWT. It returns wrong answers.
-<P>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>bytes</code> has fewer than 8
-     elements</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="ensureCapacity(long[], int, int)"><!-- --></A><H3>
-ensureCapacity</H3>
-<PRE>
-public static long[] <B>ensureCapacity</B>(long[]&nbsp;array,
-                                    int&nbsp;minLength,
-                                    int&nbsp;padding)</PRE>
-<DL>
-<DD>Returns an array containing the same values as <code>array</code>, but
- guaranteed to be of a specified minimum length. If <code>array</code> already
- has a length of at least <code>minLength</code>, it is returned directly.
- Otherwise, a new array of size <code>minLength + padding</code> is returned,
- containing the values of <code>array</code>, and zeroes in the remaining places.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>array</CODE> - the source array<DD><CODE>minLength</CODE> - the minimum length the returned array must guarantee<DD><CODE>padding</CODE> - an extra amount to "grow" the array by if growth is
-     necessary
-<DT><B>Returns:</B><DD>an array containing the values of <code>array</code>, with guaranteed
-     minimum length <code>minLength</code>
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>minLength</code> or <code>padding</code> is
-     negative</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="join(java.lang.String, long...)"><!-- --></A><H3>
-join</H3>
-<PRE>
-public static <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>join</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;separator,
-                          long...&nbsp;array)</PRE>
-<DL>
-<DD>Returns a string containing the supplied <code>long</code> values separated
- by <code>separator</code>. For example, <code>join("-", 1L, 2L, 3L)</code> returns
- the string <code>"1-2-3"</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>separator</CODE> - the text that should appear between consecutive values in
-     the resulting string (but not at the start or end)<DD><CODE>array</CODE> - an array of <code>long</code> values, possibly empty</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="lexicographicalComparator()"><!-- --></A><H3>
-lexicographicalComparator</H3>
-<PRE>
-public static <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;long[]&gt; <B>lexicographicalComparator</B>()</PRE>
-<DL>
-<DD>Returns a comparator that compares two <code>long</code> arrays
- lexicographically. That is, it compares, using <A HREF="../../../../com/google/common/primitives/Longs.html#compare(long, long)"><CODE>compare(long, long)</CODE></A>), the first pair of values that follow any
- common prefix, or when one array is a prefix of the other, treats the
- shorter array as the lesser. For example,
- <code>[] &lt; [1L] &lt; [1L, 2L] &lt; [2L]</code>.
-
- <p>The returned comparator is inconsistent with <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(Object)</CODE></A> (since arrays support only identity equality), but
- it is consistent with <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true#equals(long[], long[])" title="class or interface in java.util"><CODE>Arrays.equals(long[], long[])</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>tentative</b></DD>
-<DT><B>See Also:</B><DD><a href="http://en.wikipedia.org/wiki/Lexicographical_order">
-     Lexicographical order</a> article at Wikipedia</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toArray(java.util.Collection)"><!-- --></A><H3>
-toArray</H3>
-<PRE>
-public static long[] <B>toArray</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</A>&gt;&nbsp;collection)</PRE>
-<DL>
-<DD>Copies a collection of <code>Long</code> instances into a new array of
- primitive <code>long</code> values.
-
- <p>Elements are copied from the argument collection as if by <code>collection.toArray()</code>.  Calling this method is as thread-safe as calling
- that method.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>collection</CODE> - a collection of <code>Long</code> objects
-<DT><B>Returns:</B><DD>an array containing the same values as <code>collection</code>, in the
-     same order, converted to primitives
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>collection</code> or any of its elements
-     is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="asList(long...)"><!-- --></A><H3>
-asList</H3>
-<PRE>
-public static <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</A>&gt; <B>asList</B>(long...&nbsp;backingArray)</PRE>
-<DL>
-<DD>Returns a fixed-size list backed by the specified array, similar to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true#asList(T...)" title="class or interface in java.util"><CODE>Arrays.asList(Object[])</CODE></A>. The list supports <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#set(int, E)" title="class or interface in java.util"><CODE>List.set(int, Object)</CODE></A>,
- but any attempt to set a value to <code>null</code> will result in a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang"><CODE>NullPointerException</CODE></A>.
-
- <p>The returned list maintains the values, but not the identities, of
- <code>Long</code> objects written to or read from it.  For example, whether
- <code>list.get(0) == list.get(0)</code> is true for the returned list is
- unspecified.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>backingArray</CODE> - the array to back the list
-<DT><B>Returns:</B><DD>a list view of the array</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Longs.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/primitives/Ints.html" title="class in com.google.common.primitives"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/primitives/Primitives.html" title="class in com.google.common.primitives"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/primitives/Longs.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Longs.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/primitives/Primitives.html b/javadoc/com/google/common/primitives/Primitives.html
deleted file mode 100644
index a721210..0000000
--- a/javadoc/com/google/common/primitives/Primitives.html
+++ /dev/null
@@ -1,402 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Primitives (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Primitives (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Primitives.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/primitives/Longs.html" title="class in com.google.common.primitives"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/primitives/Shorts.html" title="class in com.google.common.primitives"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/primitives/Primitives.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Primitives.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.primitives</FONT>
-<BR>
-Class Primitives</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.primitives.Primitives</B>
-</PRE>
-<HR>
-<DL>
-<DT><PRE>public final class <B>Primitives</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
-</PRE>
-
-<P>
-Contains static utility methods pertaining to primitive types and their
- corresponding wrapper types.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2009.09.15 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Kevin Bourrillion</DD>
-</DL>
-<HR>
-
-<P>
-<!-- =========== FIELD SUMMARY =========== -->
-
-<A NAME="field_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Field Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;?&gt;,<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;?&gt;&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Primitives.html#PRIMITIVE_TO_WRAPPER_TYPE">PRIMITIVE_TO_WRAPPER_TYPE</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A map from primitive types to their corresponding wrapper types.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;?&gt;&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Primitives.html#PRIMITIVE_TYPES">PRIMITIVE_TYPES</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;All nine primitive types (including void).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;?&gt;,<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;?&gt;&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Primitives.html#WRAPPER_TO_PRIMITIVE_TYPE">WRAPPER_TO_PRIMITIVE_TYPE</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A map from wrapper types to their corresponding primitive types.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;?&gt;&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Primitives.html#WRAPPER_TYPES">WRAPPER_TYPES</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;All nine wrapper types (including Void).</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Primitives.html#isWrapperType(java.lang.Class)">isWrapperType</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;?&gt;&nbsp;type)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if <code>type</code> is one of the nine
- primitive-wrapper types, such as <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang"><CODE>Integer</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Primitives.html#unwrap(java.lang.Class)">unwrap</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the corresponding primitive type of <code>type</code> if it is a
- wrapper type; otherwise returns <code>type</code> itself.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Primitives.html#wrap(java.lang.Class)">wrap</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the corresponding wrapper type of <code>type</code> if it is a primitive
- type; otherwise returns <code>type</code> itself.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ FIELD DETAIL =========== -->
-
-<A NAME="field_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Field Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="PRIMITIVE_TO_WRAPPER_TYPE"><!-- --></A><H3>
-PRIMITIVE_TO_WRAPPER_TYPE</H3>
-<PRE>
-public static final <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;?&gt;,<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;?&gt;&gt; <B>PRIMITIVE_TO_WRAPPER_TYPE</B></PRE>
-<DL>
-<DD>A map from primitive types to their corresponding wrapper types.
-<P>
-<DL>
-</DL>
-</DL>
-<HR>
-
-<A NAME="WRAPPER_TO_PRIMITIVE_TYPE"><!-- --></A><H3>
-WRAPPER_TO_PRIMITIVE_TYPE</H3>
-<PRE>
-public static final <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;?&gt;,<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;?&gt;&gt; <B>WRAPPER_TO_PRIMITIVE_TYPE</B></PRE>
-<DL>
-<DD>A map from wrapper types to their corresponding primitive types.
-<P>
-<DL>
-</DL>
-</DL>
-<HR>
-
-<A NAME="PRIMITIVE_TYPES"><!-- --></A><H3>
-PRIMITIVE_TYPES</H3>
-<PRE>
-public static final <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;?&gt;&gt; <B>PRIMITIVE_TYPES</B></PRE>
-<DL>
-<DD>All nine primitive types (including void).
-<P>
-<DL>
-</DL>
-</DL>
-<HR>
-
-<A NAME="WRAPPER_TYPES"><!-- --></A><H3>
-WRAPPER_TYPES</H3>
-<PRE>
-public static final <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;?&gt;&gt; <B>WRAPPER_TYPES</B></PRE>
-<DL>
-<DD>All nine wrapper types (including Void).
-<P>
-<DL>
-</DL>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="isWrapperType(java.lang.Class)"><!-- --></A><H3>
-isWrapperType</H3>
-<PRE>
-public static boolean <B>isWrapperType</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;?&gt;&nbsp;type)</PRE>
-<DL>
-<DD>Returns <code>true</code> if <code>type</code> is one of the nine
- primitive-wrapper types, such as <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang"><CODE>Integer</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>See Also:</B><DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true#isPrimitive()" title="class or interface in java.lang"><CODE>Class.isPrimitive()</CODE></A></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="wrap(java.lang.Class)"><!-- --></A><H3>
-wrap</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt; <B>wrap</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type)</PRE>
-<DL>
-<DD>Returns the corresponding wrapper type of <code>type</code> if it is a primitive
- type; otherwise returns <code>type</code> itself. Idempotent.
- <pre>
-     wrap(int.class) == Integer.class
-     wrap(Integer.class) == Integer.class
-     wrap(String.class) == String.class
- </pre>
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="unwrap(java.lang.Class)"><!-- --></A><H3>
-unwrap</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt; <B>unwrap</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;type)</PRE>
-<DL>
-<DD>Returns the corresponding primitive type of <code>type</code> if it is a
- wrapper type; otherwise returns <code>type</code> itself. Idempotent.
- <pre>
-     unwrap(Integer.class) == int.class
-     unwrap(int.class) == int.class
-     unwrap(String.class) == String.class
- </pre>
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Primitives.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/primitives/Longs.html" title="class in com.google.common.primitives"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/primitives/Shorts.html" title="class in com.google.common.primitives"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/primitives/Primitives.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Primitives.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/primitives/Shorts.html b/javadoc/com/google/common/primitives/Shorts.html
deleted file mode 100644
index dae33f4..0000000
--- a/javadoc/com/google/common/primitives/Shorts.html
+++ /dev/null
@@ -1,743 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Shorts (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Shorts (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Shorts.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/primitives/Primitives.html" title="class in com.google.common.primitives"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/primitives/SignedBytes.html" title="class in com.google.common.primitives"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/primitives/Shorts.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Shorts.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.primitives</FONT>
-<BR>
-Class Shorts</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.primitives.Shorts</B>
-</PRE>
-<HR>
-<DL>
-<DT><PRE>public final class <B>Shorts</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
-</PRE>
-
-<P>
-Static utility methods pertaining to <code>short</code> primitives, that are not
- already found in either <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Short.html?is-external=true" title="class or interface in java.lang"><CODE>Short</CODE></A> or <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true" title="class or interface in java.util"><CODE>Arrays</CODE></A>.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2009.09.15 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Kevin Bourrillion</DD>
-</DL>
-<HR>
-
-<P>
-<!-- =========== FIELD SUMMARY =========== -->
-
-<A NAME="field_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Field Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Shorts.html#BYTES">BYTES</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of bytes required to represent a primitive <code>short</code>
- value.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Short.html?is-external=true" title="class or interface in java.lang">Short</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Shorts.html#asList(short...)">asList</A></B>(short...&nbsp;backingArray)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a fixed-size list backed by the specified array, similar to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true#asList(T...)" title="class or interface in java.util"><CODE>Arrays.asList(Object[])</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;short</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Shorts.html#checkedCast(long)">checkedCast</A></B>(long&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the <code>short</code> value that is equal to <code>value</code>, if possible.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Shorts.html#compare(short, short)">compare</A></B>(short&nbsp;a,
-        short&nbsp;b)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares the two specified <code>short</code> values.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;short[]</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Shorts.html#concat(short[]...)">concat</A></B>(short[]...&nbsp;arrays)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the values from each provided array combined into a single array.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Shorts.html#contains(short[], short)">contains</A></B>(short[]&nbsp;array,
-         short&nbsp;target)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if <code>target</code> is present as an element anywhere in
- <code>array</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;short[]</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Shorts.html#ensureCapacity(short[], int, int)">ensureCapacity</A></B>(short[]&nbsp;array,
-               int&nbsp;minLength,
-               int&nbsp;padding)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an array containing the same values as <code>array</code>, but
- guaranteed to be of a specified minimum length.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;short</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Shorts.html#fromByteArray(byte[])">fromByteArray</A></B>(byte[]&nbsp;bytes)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the <code>short</code> value whose big-endian representation is
- stored in the first ? bytes of <code>bytes</code>; equivalent to <code>ByteBuffer.wrap(bytes).getShort()</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Shorts.html#hashCode(short)">hashCode</A></B>(short&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a hash code for <code>value</code>; equal to the result of invoking
- <code>((Short) value).hashCode()</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Shorts.html#indexOf(short[], short)">indexOf</A></B>(short[]&nbsp;array,
-        short&nbsp;target)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the index of the first appearance of the value <code>target</code> in
- <code>array</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Shorts.html#indexOf(short[], short[])">indexOf</A></B>(short[]&nbsp;array,
-        short[]&nbsp;target)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the start position of the first occurrence of the specified <code>target</code> within <code>array</code>, or <code>-1</code> if there is no such occurrence.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Shorts.html#join(java.lang.String, short...)">join</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;separator,
-     short...&nbsp;array)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a string containing the supplied <code>short</code> values separated
- by <code>separator</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Shorts.html#lastIndexOf(short[], short)">lastIndexOf</A></B>(short[]&nbsp;array,
-            short&nbsp;target)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the index of the last appearance of the value <code>target</code> in
- <code>array</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;short[]&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Shorts.html#lexicographicalComparator()">lexicographicalComparator</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a comparator that compares two <code>short</code> arrays
- lexicographically.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;short</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Shorts.html#max(short...)">max</A></B>(short...&nbsp;array)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the greatest value present in <code>array</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;short</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Shorts.html#min(short...)">min</A></B>(short...&nbsp;array)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the least value present in <code>array</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;short</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Shorts.html#saturatedCast(long)">saturatedCast</A></B>(long&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the <code>short</code> nearest in value to <code>value</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;short[]</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Shorts.html#toArray(java.util.Collection)">toArray</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Short.html?is-external=true" title="class or interface in java.lang">Short</A>&gt;&nbsp;collection)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies a collection of <code>Short</code> instances into a new array of
- primitive <code>short</code> values.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;byte[]</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/Shorts.html#toByteArray(short)">toByteArray</A></B>(short&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a big-endian representation of <code>value</code> in a ?-element byte
- array; equivalent to <code>ByteBuffer.allocate(?).putShort(value).array()</code>.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ FIELD DETAIL =========== -->
-
-<A NAME="field_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Field Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="BYTES"><!-- --></A><H3>
-BYTES</H3>
-<PRE>
-public static final int <B>BYTES</B></PRE>
-<DL>
-<DD>The number of bytes required to represent a primitive <code>short</code>
- value.
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#com.google.common.primitives.Shorts.BYTES">Constant Field Values</A></DL>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="hashCode(short)"><!-- --></A><H3>
-hashCode</H3>
-<PRE>
-public static int <B>hashCode</B>(short&nbsp;value)</PRE>
-<DL>
-<DD>Returns a hash code for <code>value</code>; equal to the result of invoking
- <code>((Short) value).hashCode()</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>value</CODE> - a primitive <code>short</code> value
-<DT><B>Returns:</B><DD>a hash code for the value</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="checkedCast(long)"><!-- --></A><H3>
-checkedCast</H3>
-<PRE>
-public static short <B>checkedCast</B>(long&nbsp;value)</PRE>
-<DL>
-<DD>Returns the <code>short</code> value that is equal to <code>value</code>, if possible.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>value</CODE> - any value in the range of the <code>short</code> type
-<DT><B>Returns:</B><DD>the <code>short</code> value that equals <code>value</code>
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>value</code> is greater than <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Short.html?is-external=true#MAX_VALUE" title="class or interface in java.lang"><CODE>Short.MAX_VALUE</CODE></A> or less than <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Short.html?is-external=true#MIN_VALUE" title="class or interface in java.lang"><CODE>Short.MIN_VALUE</CODE></A></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="saturatedCast(long)"><!-- --></A><H3>
-saturatedCast</H3>
-<PRE>
-public static short <B>saturatedCast</B>(long&nbsp;value)</PRE>
-<DL>
-<DD>Returns the <code>short</code> nearest in value to <code>value</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>value</CODE> - any <code>long</code> value
-<DT><B>Returns:</B><DD>the same value cast to <code>short</code> if it is in the range of the
-     <code>short</code> type, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Short.html?is-external=true#MAX_VALUE" title="class or interface in java.lang"><CODE>Short.MAX_VALUE</CODE></A> if it is too large,
-     or <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Short.html?is-external=true#MIN_VALUE" title="class or interface in java.lang"><CODE>Short.MIN_VALUE</CODE></A> if it is too small</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="compare(short, short)"><!-- --></A><H3>
-compare</H3>
-<PRE>
-public static int <B>compare</B>(short&nbsp;a,
-                          short&nbsp;b)</PRE>
-<DL>
-<DD>Compares the two specified <code>short</code> values. The sign of the value
- returned is the same as that of <code>((Short) a).compareTo(b)</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>a</CODE> - the first <code>short</code> to compare<DD><CODE>b</CODE> - the second <code>short</code> to compare
-<DT><B>Returns:</B><DD>a negative value if <code>a</code> is less than <code>b</code>; a positive
-     value if <code>a</code> is greater than <code>b</code>; or zero if they are equal</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="contains(short[], short)"><!-- --></A><H3>
-contains</H3>
-<PRE>
-public static boolean <B>contains</B>(short[]&nbsp;array,
-                               short&nbsp;target)</PRE>
-<DL>
-<DD>Returns <code>true</code> if <code>target</code> is present as an element anywhere in
- <code>array</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>array</CODE> - an array of <code>short</code> values, possibly empty<DD><CODE>target</CODE> - a primitive <code>short</code> value
-<DT><B>Returns:</B><DD><code>true</code> if <code>array[i] == target</code> for some value of <code>i</code></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="indexOf(short[], short)"><!-- --></A><H3>
-indexOf</H3>
-<PRE>
-public static int <B>indexOf</B>(short[]&nbsp;array,
-                          short&nbsp;target)</PRE>
-<DL>
-<DD>Returns the index of the first appearance of the value <code>target</code> in
- <code>array</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>array</CODE> - an array of <code>short</code> values, possibly empty<DD><CODE>target</CODE> - a primitive <code>short</code> value
-<DT><B>Returns:</B><DD>the least index <code>i</code> for which <code>array[i] == target</code>, or
-     <code>-1</code> if no such index exists.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="indexOf(short[], short[])"><!-- --></A><H3>
-indexOf</H3>
-<PRE>
-public static int <B>indexOf</B>(short[]&nbsp;array,
-                          short[]&nbsp;target)</PRE>
-<DL>
-<DD>Returns the start position of the first occurrence of the specified <code>target</code> within <code>array</code>, or <code>-1</code> if there is no such occurrence.
-
- <p>More formally, returns the lowest index <code>i</code> such that <code>java.util.Arrays.copyOfRange(array, i, i + target.length)</code> contains exactly
- the same elements as <code>target</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>array</CODE> - the array to search for the sequence <code>target</code><DD><CODE>target</CODE> - the array to search for as a sub-sequence of <code>array</code></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="lastIndexOf(short[], short)"><!-- --></A><H3>
-lastIndexOf</H3>
-<PRE>
-public static int <B>lastIndexOf</B>(short[]&nbsp;array,
-                              short&nbsp;target)</PRE>
-<DL>
-<DD>Returns the index of the last appearance of the value <code>target</code> in
- <code>array</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>array</CODE> - an array of <code>short</code> values, possibly empty<DD><CODE>target</CODE> - a primitive <code>short</code> value
-<DT><B>Returns:</B><DD>the greatest index <code>i</code> for which <code>array[i] == target</code>,
-     or <code>-1</code> if no such index exists.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="min(short...)"><!-- --></A><H3>
-min</H3>
-<PRE>
-public static short <B>min</B>(short...&nbsp;array)</PRE>
-<DL>
-<DD>Returns the least value present in <code>array</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>array</CODE> - a <i>nonempty</i> array of <code>short</code> values
-<DT><B>Returns:</B><DD>the value present in <code>array</code> that is less than or equal to
-     every other value in the array
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>array</code> is empty</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="max(short...)"><!-- --></A><H3>
-max</H3>
-<PRE>
-public static short <B>max</B>(short...&nbsp;array)</PRE>
-<DL>
-<DD>Returns the greatest value present in <code>array</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>array</CODE> - a <i>nonempty</i> array of <code>short</code> values
-<DT><B>Returns:</B><DD>the value present in <code>array</code> that is greater than or equal to
-     every other value in the array
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>array</code> is empty</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="concat(short[]...)"><!-- --></A><H3>
-concat</H3>
-<PRE>
-public static short[] <B>concat</B>(short[]...&nbsp;arrays)</PRE>
-<DL>
-<DD>Returns the values from each provided array combined into a single array.
- For example, <code>concat(new short[] {a, b}, new short[] {}, new
- short[] {c}</code> returns the array <code>{a, b, c}</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>arrays</CODE> - zero or more <code>short</code> arrays
-<DT><B>Returns:</B><DD>a single array containing all the values from the source arrays, in
-     order</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toByteArray(short)"><!-- --></A><H3>
-toByteArray</H3>
-<PRE>
-public static byte[] <B>toByteArray</B>(short&nbsp;value)</PRE>
-<DL>
-<DD>Returns a big-endian representation of <code>value</code> in a ?-element byte
- array; equivalent to <code>ByteBuffer.allocate(?).putShort(value).array()</code>.  For example, the input
- value <code>?</code> would yield the byte array <code>{?}</code>.
-
- <p>If you need to convert and concatenate several values (possibly even of
- different types), use a shared <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio"><CODE>ByteBuffer</CODE></A> instance, or use
- <A HREF="../../../../com/google/common/io/ByteStreams.html#newDataOutput()"><CODE>ByteStreams.newDataOutput()</CODE></A> to get a growable
- buffer.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="fromByteArray(byte[])"><!-- --></A><H3>
-fromByteArray</H3>
-<PRE>
-public static short <B>fromByteArray</B>(byte[]&nbsp;bytes)</PRE>
-<DL>
-<DD>Returns the <code>short</code> value whose big-endian representation is
- stored in the first ? bytes of <code>bytes</code>; equivalent to <code>ByteBuffer.wrap(bytes).getShort()</code>. For example, the input byte array
- <code>{?}</code> would yield the <code>short</code> value <code>?</code>.
-
- <p>Arguably, it's preferable to use <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio"><CODE>ByteBuffer</CODE></A>; that
- library exposes much more flexibility at little cost in readability.
-<P>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>bytes</code> has fewer than ?
-     elements</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="ensureCapacity(short[], int, int)"><!-- --></A><H3>
-ensureCapacity</H3>
-<PRE>
-public static short[] <B>ensureCapacity</B>(short[]&nbsp;array,
-                                     int&nbsp;minLength,
-                                     int&nbsp;padding)</PRE>
-<DL>
-<DD>Returns an array containing the same values as <code>array</code>, but
- guaranteed to be of a specified minimum length. If <code>array</code> already
- has a length of at least <code>minLength</code>, it is returned directly.
- Otherwise, a new array of size <code>minLength + padding</code> is returned,
- containing the values of <code>array</code>, and zeroes in the remaining places.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>array</CODE> - the source array<DD><CODE>minLength</CODE> - the minimum length the returned array must guarantee<DD><CODE>padding</CODE> - an extra amount to "grow" the array by if growth is
-     necessary
-<DT><B>Returns:</B><DD>an array containing the values of <code>array</code>, with guaranteed
-     minimum length <code>minLength</code>
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>minLength</code> or <code>padding</code> is
-     negative</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="join(java.lang.String, short...)"><!-- --></A><H3>
-join</H3>
-<PRE>
-public static <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>join</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;separator,
-                          short...&nbsp;array)</PRE>
-<DL>
-<DD>Returns a string containing the supplied <code>short</code> values separated
- by <code>separator</code>. For example, <code>join("-", 1?, 2?, 3?)</code> returns
- the string <code>"1-2-3"</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>separator</CODE> - the text that should appear between consecutive values in
-     the resulting string (but not at the start or end)<DD><CODE>array</CODE> - an array of <code>short</code> values, possibly empty</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="lexicographicalComparator()"><!-- --></A><H3>
-lexicographicalComparator</H3>
-<PRE>
-public static <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;short[]&gt; <B>lexicographicalComparator</B>()</PRE>
-<DL>
-<DD>Returns a comparator that compares two <code>short</code> arrays
- lexicographically. That is, it compares, using <A HREF="../../../../com/google/common/primitives/Shorts.html#compare(short, short)"><CODE>compare(short, short)</CODE></A>), the first pair of values that follow any
- common prefix, or when one array is a prefix of the other, treats the
- shorter array as the lesser. For example, <code>[] &lt; [(short) 1] &lt;
- [(short) 1, (short) 2] &lt; [(short) 2]</code>.
-
- <p>The returned comparator is inconsistent with <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(Object)</CODE></A> (since arrays support only identity equality), but
- it is consistent with <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true#equals(short[], short[])" title="class or interface in java.util"><CODE>Arrays.equals(short[], short[])</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>tentative</b></DD>
-<DT><B>See Also:</B><DD><a href="http://en.wikipedia.org/wiki/Lexicographical_order">
-     Lexicographical order</a> article at Wikipedia</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toArray(java.util.Collection)"><!-- --></A><H3>
-toArray</H3>
-<PRE>
-public static short[] <B>toArray</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Short.html?is-external=true" title="class or interface in java.lang">Short</A>&gt;&nbsp;collection)</PRE>
-<DL>
-<DD>Copies a collection of <code>Short</code> instances into a new array of
- primitive <code>short</code> values.
-
- <p>Elements are copied from the argument collection as if by <code>collection.toArray()</code>.  Calling this method is as thread-safe as calling
- that method.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>collection</CODE> - a collection of <code>Short</code> objects
-<DT><B>Returns:</B><DD>an array containing the same values as <code>collection</code>, in the
-     same order, converted to primitives
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if <code>collection</code> or any of its elements
-     is null</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="asList(short...)"><!-- --></A><H3>
-asList</H3>
-<PRE>
-public static <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Short.html?is-external=true" title="class or interface in java.lang">Short</A>&gt; <B>asList</B>(short...&nbsp;backingArray)</PRE>
-<DL>
-<DD>Returns a fixed-size list backed by the specified array, similar to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true#asList(T...)" title="class or interface in java.util"><CODE>Arrays.asList(Object[])</CODE></A>. The list supports <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#set(int, E)" title="class or interface in java.util"><CODE>List.set(int, Object)</CODE></A>,
- but any attempt to set a value to <code>null</code> will result in a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang"><CODE>NullPointerException</CODE></A>.
-
- <p>The returned list maintains the values, but not the identities, of
- <code>Short</code> objects written to or read from it.  For example, whether
- <code>list.get(0) == list.get(0)</code> is true for the returned list is
- unspecified.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>backingArray</CODE> - the array to back the list
-<DT><B>Returns:</B><DD>a list view of the array</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Shorts.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/primitives/Primitives.html" title="class in com.google.common.primitives"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/primitives/SignedBytes.html" title="class in com.google.common.primitives"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/primitives/Shorts.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Shorts.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/primitives/SignedBytes.html b/javadoc/com/google/common/primitives/SignedBytes.html
deleted file mode 100644
index 558b5b7..0000000
--- a/javadoc/com/google/common/primitives/SignedBytes.html
+++ /dev/null
@@ -1,396 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-SignedBytes (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="SignedBytes (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/SignedBytes.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/primitives/Shorts.html" title="class in com.google.common.primitives"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/primitives/UnsignedBytes.html" title="class in com.google.common.primitives"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/primitives/SignedBytes.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="SignedBytes.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.primitives</FONT>
-<BR>
-Class SignedBytes</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.primitives.SignedBytes</B>
-</PRE>
-<HR>
-<DL>
-<DT><PRE>public final class <B>SignedBytes</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
-</PRE>
-
-<P>
-Static utility methods pertaining to <code>byte</code> primitives that
- interpret values as signed. The corresponding methods that treat the values
- as unsigned are found in <A HREF="../../../../com/google/common/primitives/UnsignedBytes.html" title="class in com.google.common.primitives"><CODE>UnsignedBytes</CODE></A>, and the methods for which
- signedness is not an issue are in <A HREF="../../../../com/google/common/primitives/Bytes.html" title="class in com.google.common.primitives"><CODE>Bytes</CODE></A>.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2009.09.15 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Kevin Bourrillion</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;byte</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/SignedBytes.html#checkedCast(long)">checkedCast</A></B>(long&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the <code>byte</code> value that is equal to <code>value</code>, if possible.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/SignedBytes.html#compare(byte, byte)">compare</A></B>(byte&nbsp;a,
-        byte&nbsp;b)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares the two specified <code>byte</code> values.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/SignedBytes.html#join(java.lang.String, byte...)">join</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;separator,
-     byte...&nbsp;array)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a string containing the supplied <code>byte</code> values separated
- by <code>separator</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;byte[]&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/SignedBytes.html#lexicographicalComparator()">lexicographicalComparator</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a comparator that compares two <code>byte</code> arrays
- lexicographically.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;byte</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/SignedBytes.html#max(byte...)">max</A></B>(byte...&nbsp;array)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the greatest value present in <code>array</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;byte</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/SignedBytes.html#min(byte...)">min</A></B>(byte...&nbsp;array)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the least value present in <code>array</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;byte</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/SignedBytes.html#saturatedCast(long)">saturatedCast</A></B>(long&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the <code>byte</code> nearest in value to <code>value</code>.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="checkedCast(long)"><!-- --></A><H3>
-checkedCast</H3>
-<PRE>
-public static byte <B>checkedCast</B>(long&nbsp;value)</PRE>
-<DL>
-<DD>Returns the <code>byte</code> value that is equal to <code>value</code>, if possible.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>value</CODE> - any value in the range of the <code>byte</code> type
-<DT><B>Returns:</B><DD>the <code>byte</code> value that equals <code>value</code>
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>value</code> is greater than <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Byte.html?is-external=true#MAX_VALUE" title="class or interface in java.lang"><CODE>Byte.MAX_VALUE</CODE></A> or less than <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Byte.html?is-external=true#MIN_VALUE" title="class or interface in java.lang"><CODE>Byte.MIN_VALUE</CODE></A></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="saturatedCast(long)"><!-- --></A><H3>
-saturatedCast</H3>
-<PRE>
-public static byte <B>saturatedCast</B>(long&nbsp;value)</PRE>
-<DL>
-<DD>Returns the <code>byte</code> nearest in value to <code>value</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>value</CODE> - any <code>long</code> value
-<DT><B>Returns:</B><DD>the same value cast to <code>byte</code> if it is in the range of the
-     <code>byte</code> type, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Byte.html?is-external=true#MAX_VALUE" title="class or interface in java.lang"><CODE>Byte.MAX_VALUE</CODE></A> if it is too large,
-     or <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Byte.html?is-external=true#MIN_VALUE" title="class or interface in java.lang"><CODE>Byte.MIN_VALUE</CODE></A> if it is too small</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="compare(byte, byte)"><!-- --></A><H3>
-compare</H3>
-<PRE>
-public static int <B>compare</B>(byte&nbsp;a,
-                          byte&nbsp;b)</PRE>
-<DL>
-<DD>Compares the two specified <code>byte</code> values. The sign of the value
- returned is the same as that of <code>((Byte) a).compareTo(b)</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>a</CODE> - the first <code>byte</code> to compare<DD><CODE>b</CODE> - the second <code>byte</code> to compare
-<DT><B>Returns:</B><DD>a negative value if <code>a</code> is less than <code>b</code>; a positive
-     value if <code>a</code> is greater than <code>b</code>; or zero if they are equal</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="min(byte...)"><!-- --></A><H3>
-min</H3>
-<PRE>
-public static byte <B>min</B>(byte...&nbsp;array)</PRE>
-<DL>
-<DD>Returns the least value present in <code>array</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>array</CODE> - a <i>nonempty</i> array of <code>byte</code> values
-<DT><B>Returns:</B><DD>the value present in <code>array</code> that is less than or equal to
-     every other value in the array
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>array</code> is empty</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="max(byte...)"><!-- --></A><H3>
-max</H3>
-<PRE>
-public static byte <B>max</B>(byte...&nbsp;array)</PRE>
-<DL>
-<DD>Returns the greatest value present in <code>array</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>array</CODE> - a <i>nonempty</i> array of <code>byte</code> values
-<DT><B>Returns:</B><DD>the value present in <code>array</code> that is greater than or equal to
-     every other value in the array
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>array</code> is empty</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="join(java.lang.String, byte...)"><!-- --></A><H3>
-join</H3>
-<PRE>
-public static <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>join</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;separator,
-                          byte...&nbsp;array)</PRE>
-<DL>
-<DD>Returns a string containing the supplied <code>byte</code> values separated
- by <code>separator</code>. For example, <code>join(":", 0x01, 0x02, -0x01)</code>
- returns the string <code>"1:2:-1"</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>separator</CODE> - the text that should appear between consecutive values in
-     the resulting string (but not at the start or end)<DD><CODE>array</CODE> - an array of <code>byte</code> values, possibly empty</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="lexicographicalComparator()"><!-- --></A><H3>
-lexicographicalComparator</H3>
-<PRE>
-public static <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;byte[]&gt; <B>lexicographicalComparator</B>()</PRE>
-<DL>
-<DD>Returns a comparator that compares two <code>byte</code> arrays
- lexicographically. That is, it compares, using <A HREF="../../../../com/google/common/primitives/SignedBytes.html#compare(byte, byte)"><CODE>compare(byte, byte)</CODE></A>), the first pair of values that follow any common
- prefix, or when one array is a prefix of the other, treats the shorter
- array as the lesser. For example, <code>[] &lt; [0x01] &lt; [0x01, 0x80] &lt;
- [0x01, 0x7F] &lt; [0x02]</code>. Values are treated as signed.
-
- <p>The returned comparator is inconsistent with <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(Object)</CODE></A> (since arrays support only identity equality), but
- it is consistent with <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true#equals(byte[], byte[])" title="class or interface in java.util"><CODE>Arrays.equals(byte[], byte[])</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>tentative</b></DD>
-<DT><B>See Also:</B><DD><a href="http://en.wikipedia.org/wiki/Lexicographical_order">
-     Lexicographical order</a> article at Wikipedia</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/SignedBytes.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/primitives/Shorts.html" title="class in com.google.common.primitives"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/primitives/UnsignedBytes.html" title="class in com.google.common.primitives"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/primitives/SignedBytes.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="SignedBytes.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/primitives/UnsignedBytes.html b/javadoc/com/google/common/primitives/UnsignedBytes.html
deleted file mode 100644
index a6654b9..0000000
--- a/javadoc/com/google/common/primitives/UnsignedBytes.html
+++ /dev/null
@@ -1,405 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-UnsignedBytes (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="UnsignedBytes (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/UnsignedBytes.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/primitives/SignedBytes.html" title="class in com.google.common.primitives"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;NEXT CLASS</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/primitives/UnsignedBytes.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="UnsignedBytes.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.primitives</FONT>
-<BR>
-Class UnsignedBytes</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.primitives.UnsignedBytes</B>
-</PRE>
-<HR>
-<DL>
-<DT><PRE>public final class <B>UnsignedBytes</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
-</PRE>
-
-<P>
-Static utility methods pertaining to <code>byte</code> primitives that interpret
- values as <i>unsigned</i> (that is, any negative value <code>b</code> is treated
- as the positive value <code>256 + b</code>). The corresponding methods that treat
- the values as signed are found in <A HREF="../../../../com/google/common/primitives/SignedBytes.html" title="class in com.google.common.primitives"><CODE>SignedBytes</CODE></A>, and the methods for
- which signedness is not an issue are in <A HREF="../../../../com/google/common/primitives/Bytes.html" title="class in com.google.common.primitives"><CODE>Bytes</CODE></A>.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2009.09.15 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Kevin Bourrillion</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;byte</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/UnsignedBytes.html#checkedCast(long)">checkedCast</A></B>(long&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the <code>byte</code> value that, when treated as unsigned, is equal to
- <code>value</code>, if possible.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/UnsignedBytes.html#compare(byte, byte)">compare</A></B>(byte&nbsp;a,
-        byte&nbsp;b)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares the two specified <code>byte</code> values, treating them as unsigned
- values between 0 and 255 inclusive.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/UnsignedBytes.html#join(java.lang.String, byte...)">join</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;separator,
-     byte...&nbsp;array)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a string containing the supplied <code>byte</code> values separated by
- <code>separator</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;byte[]&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/UnsignedBytes.html#lexicographicalComparator()">lexicographicalComparator</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a comparator that compares two <code>byte</code> arrays
- lexicographically.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;byte</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/UnsignedBytes.html#max(byte...)">max</A></B>(byte...&nbsp;array)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the greatest value present in <code>array</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;byte</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/UnsignedBytes.html#min(byte...)">min</A></B>(byte...&nbsp;array)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the least value present in <code>array</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;byte</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/common/primitives/UnsignedBytes.html#saturatedCast(long)">saturatedCast</A></B>(long&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the <code>byte</code> value that, when treated as unsigned, is nearest
- in value to <code>value</code>.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="checkedCast(long)"><!-- --></A><H3>
-checkedCast</H3>
-<PRE>
-public static byte <B>checkedCast</B>(long&nbsp;value)</PRE>
-<DL>
-<DD>Returns the <code>byte</code> value that, when treated as unsigned, is equal to
- <code>value</code>, if possible.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>value</CODE> - a value between 0 and 255 inclusive
-<DT><B>Returns:</B><DD>the <code>byte</code> value that, when treated as unsigned, equals
-     <code>value</code>
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>value</code> is negative or greater
-     than 255</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="saturatedCast(long)"><!-- --></A><H3>
-saturatedCast</H3>
-<PRE>
-public static byte <B>saturatedCast</B>(long&nbsp;value)</PRE>
-<DL>
-<DD>Returns the <code>byte</code> value that, when treated as unsigned, is nearest
- in value to <code>value</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>value</CODE> - any <code>long</code> value
-<DT><B>Returns:</B><DD><code>(byte) 255</code> if <code>value &gt;= 255</code>, <code>(byte) 0</code> if
-     <code>value &lt;= 0</code>, and <code>value</code> cast to <code>byte</code> otherwise</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="compare(byte, byte)"><!-- --></A><H3>
-compare</H3>
-<PRE>
-public static int <B>compare</B>(byte&nbsp;a,
-                          byte&nbsp;b)</PRE>
-<DL>
-<DD>Compares the two specified <code>byte</code> values, treating them as unsigned
- values between 0 and 255 inclusive. For example, <code>(byte) -127</code> is
- considered greater than <code>(byte) 127</code> because it is seen as having
- the value of positive <code>129</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>a</CODE> - the first <code>byte</code> to compare<DD><CODE>b</CODE> - the second <code>byte</code> to compare
-<DT><B>Returns:</B><DD>a negative value if <code>a</code> is less than <code>b</code>; a positive
-     value if <code>a</code> is greater than <code>b</code>; or zero if they are equal</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="min(byte...)"><!-- --></A><H3>
-min</H3>
-<PRE>
-public static byte <B>min</B>(byte...&nbsp;array)</PRE>
-<DL>
-<DD>Returns the least value present in <code>array</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>array</CODE> - a <i>nonempty</i> array of <code>byte</code> values
-<DT><B>Returns:</B><DD>the value present in <code>array</code> that is less than or equal to
-     every other value in the array
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>array</code> is empty</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="max(byte...)"><!-- --></A><H3>
-max</H3>
-<PRE>
-public static byte <B>max</B>(byte...&nbsp;array)</PRE>
-<DL>
-<DD>Returns the greatest value present in <code>array</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>array</CODE> - a <i>nonempty</i> array of <code>byte</code> values
-<DT><B>Returns:</B><DD>the value present in <code>array</code> that is greater than or equal
-     to every other value in the array
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>array</code> is empty</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="join(java.lang.String, byte...)"><!-- --></A><H3>
-join</H3>
-<PRE>
-public static <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>join</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;separator,
-                          byte...&nbsp;array)</PRE>
-<DL>
-<DD>Returns a string containing the supplied <code>byte</code> values separated by
- <code>separator</code>. For example, <code>join(":", (byte) 1, (byte) 2,
- (byte) 255)</code> returns the string <code>"1:2:255"</code>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>separator</CODE> - the text that should appear between consecutive values in
-     the resulting string (but not at the start or end)<DD><CODE>array</CODE> - an array of <code>byte</code> values, possibly empty</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="lexicographicalComparator()"><!-- --></A><H3>
-lexicographicalComparator</H3>
-<PRE>
-public static <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;byte[]&gt; <B>lexicographicalComparator</B>()</PRE>
-<DL>
-<DD>Returns a comparator that compares two <code>byte</code> arrays
- lexicographically. That is, it compares, using <A HREF="../../../../com/google/common/primitives/UnsignedBytes.html#compare(byte, byte)"><CODE>compare(byte, byte)</CODE></A>), the first pair of values that follow any common
- prefix, or when one array is a prefix of the other, treats the shorter
- array as the lesser. For example, <code>[] &lt; [0x01] &lt; [0x01, 0x7F] &lt;
- [0x01, 0x80] &lt; [0x02]</code>. Values are treated as unsigned.
-
- <p>The returned comparator is inconsistent with <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(Object)</CODE></A> (since arrays support only identity equality), but
- it is consistent with <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true#equals(byte[], byte[])" title="class or interface in java.util"><CODE>Arrays.equals(byte[], byte[])</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>tentative</b></DD>
-<DT><B>See Also:</B><DD><a href="http://en.wikipedia.org/wiki/Lexicographical_order">
-     Lexicographical order</a> article at Wikipedia</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/UnsignedBytes.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/primitives/SignedBytes.html" title="class in com.google.common.primitives"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;NEXT CLASS</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/primitives/UnsignedBytes.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="UnsignedBytes.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/primitives/class-use/Booleans.html b/javadoc/com/google/common/primitives/class-use/Booleans.html
deleted file mode 100644
index bcce256..0000000
--- a/javadoc/com/google/common/primitives/class-use/Booleans.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.primitives.Booleans (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.primitives.Booleans (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/primitives/Booleans.html" title="class in com.google.common.primitives"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/primitives//class-useBooleans.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Booleans.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.primitives.Booleans</B></H2>
-</CENTER>
-No usage of com.google.common.primitives.Booleans
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/primitives/Booleans.html" title="class in com.google.common.primitives"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/primitives//class-useBooleans.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Booleans.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/primitives/class-use/Bytes.html b/javadoc/com/google/common/primitives/class-use/Bytes.html
deleted file mode 100644
index 9456899..0000000
--- a/javadoc/com/google/common/primitives/class-use/Bytes.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.primitives.Bytes (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.primitives.Bytes (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/primitives/Bytes.html" title="class in com.google.common.primitives"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/primitives//class-useBytes.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Bytes.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.primitives.Bytes</B></H2>
-</CENTER>
-No usage of com.google.common.primitives.Bytes
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/primitives/Bytes.html" title="class in com.google.common.primitives"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/primitives//class-useBytes.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Bytes.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/primitives/class-use/Chars.html b/javadoc/com/google/common/primitives/class-use/Chars.html
deleted file mode 100644
index 915de30..0000000
--- a/javadoc/com/google/common/primitives/class-use/Chars.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.primitives.Chars (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.primitives.Chars (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/primitives/Chars.html" title="class in com.google.common.primitives"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/primitives//class-useChars.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Chars.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.primitives.Chars</B></H2>
-</CENTER>
-No usage of com.google.common.primitives.Chars
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/primitives/Chars.html" title="class in com.google.common.primitives"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/primitives//class-useChars.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Chars.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/primitives/class-use/Doubles.html b/javadoc/com/google/common/primitives/class-use/Doubles.html
deleted file mode 100644
index f40a8f7..0000000
--- a/javadoc/com/google/common/primitives/class-use/Doubles.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.primitives.Doubles (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.primitives.Doubles (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/primitives/Doubles.html" title="class in com.google.common.primitives"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/primitives//class-useDoubles.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Doubles.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.primitives.Doubles</B></H2>
-</CENTER>
-No usage of com.google.common.primitives.Doubles
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/primitives/Doubles.html" title="class in com.google.common.primitives"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/primitives//class-useDoubles.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Doubles.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/primitives/class-use/Floats.html b/javadoc/com/google/common/primitives/class-use/Floats.html
deleted file mode 100644
index d8d8f67..0000000
--- a/javadoc/com/google/common/primitives/class-use/Floats.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.primitives.Floats (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.primitives.Floats (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/primitives/Floats.html" title="class in com.google.common.primitives"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/primitives//class-useFloats.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Floats.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.primitives.Floats</B></H2>
-</CENTER>
-No usage of com.google.common.primitives.Floats
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/primitives/Floats.html" title="class in com.google.common.primitives"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/primitives//class-useFloats.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Floats.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/primitives/class-use/Ints.html b/javadoc/com/google/common/primitives/class-use/Ints.html
deleted file mode 100644
index 4b6c933..0000000
--- a/javadoc/com/google/common/primitives/class-use/Ints.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.primitives.Ints (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.primitives.Ints (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/primitives/Ints.html" title="class in com.google.common.primitives"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/primitives//class-useInts.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Ints.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.primitives.Ints</B></H2>
-</CENTER>
-No usage of com.google.common.primitives.Ints
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/primitives/Ints.html" title="class in com.google.common.primitives"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/primitives//class-useInts.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Ints.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/primitives/class-use/Longs.html b/javadoc/com/google/common/primitives/class-use/Longs.html
deleted file mode 100644
index 416db94..0000000
--- a/javadoc/com/google/common/primitives/class-use/Longs.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.primitives.Longs (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.primitives.Longs (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/primitives/Longs.html" title="class in com.google.common.primitives"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/primitives//class-useLongs.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Longs.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.primitives.Longs</B></H2>
-</CENTER>
-No usage of com.google.common.primitives.Longs
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/primitives/Longs.html" title="class in com.google.common.primitives"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/primitives//class-useLongs.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Longs.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/primitives/class-use/Primitives.html b/javadoc/com/google/common/primitives/class-use/Primitives.html
deleted file mode 100644
index 38590e1..0000000
--- a/javadoc/com/google/common/primitives/class-use/Primitives.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.primitives.Primitives (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.primitives.Primitives (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/primitives/Primitives.html" title="class in com.google.common.primitives"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/primitives//class-usePrimitives.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Primitives.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.primitives.Primitives</B></H2>
-</CENTER>
-No usage of com.google.common.primitives.Primitives
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/primitives/Primitives.html" title="class in com.google.common.primitives"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/primitives//class-usePrimitives.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Primitives.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/primitives/class-use/Shorts.html b/javadoc/com/google/common/primitives/class-use/Shorts.html
deleted file mode 100644
index 6cf2389..0000000
--- a/javadoc/com/google/common/primitives/class-use/Shorts.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.primitives.Shorts (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.primitives.Shorts (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/primitives/Shorts.html" title="class in com.google.common.primitives"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/primitives//class-useShorts.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Shorts.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.primitives.Shorts</B></H2>
-</CENTER>
-No usage of com.google.common.primitives.Shorts
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/primitives/Shorts.html" title="class in com.google.common.primitives"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/primitives//class-useShorts.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Shorts.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/primitives/class-use/SignedBytes.html b/javadoc/com/google/common/primitives/class-use/SignedBytes.html
deleted file mode 100644
index 1fac1b2..0000000
--- a/javadoc/com/google/common/primitives/class-use/SignedBytes.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.primitives.SignedBytes (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.primitives.SignedBytes (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/primitives/SignedBytes.html" title="class in com.google.common.primitives"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/primitives//class-useSignedBytes.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="SignedBytes.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.primitives.SignedBytes</B></H2>
-</CENTER>
-No usage of com.google.common.primitives.SignedBytes
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/primitives/SignedBytes.html" title="class in com.google.common.primitives"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/primitives//class-useSignedBytes.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="SignedBytes.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/primitives/class-use/UnsignedBytes.html b/javadoc/com/google/common/primitives/class-use/UnsignedBytes.html
deleted file mode 100644
index 5d826d1..0000000
--- a/javadoc/com/google/common/primitives/class-use/UnsignedBytes.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.primitives.UnsignedBytes (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.primitives.UnsignedBytes (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/primitives/UnsignedBytes.html" title="class in com.google.common.primitives"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/primitives//class-useUnsignedBytes.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="UnsignedBytes.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.primitives.UnsignedBytes</B></H2>
-</CENTER>
-No usage of com.google.common.primitives.UnsignedBytes
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../com/google/common/primitives/UnsignedBytes.html" title="class in com.google.common.primitives"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/primitives//class-useUnsignedBytes.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="UnsignedBytes.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/primitives/package-frame.html b/javadoc/com/google/common/primitives/package-frame.html
deleted file mode 100644
index 8e385f0..0000000
--- a/javadoc/com/google/common/primitives/package-frame.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-com.google.common.primitives (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-
-</HEAD>
-
-<BODY BGCOLOR="white">
-<FONT size="+1" CLASS="FrameTitleFont">
-<A HREF="../../../../com/google/common/primitives/package-summary.html" target="classFrame">com.google.common.primitives</A></FONT>
-<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
-<TR>
-<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">
-Classes</FONT>&nbsp;
-<FONT CLASS="FrameItemFont">
-<BR>
-<A HREF="Booleans.html" title="class in com.google.common.primitives" target="classFrame">Booleans</A>
-<BR>
-<A HREF="Bytes.html" title="class in com.google.common.primitives" target="classFrame">Bytes</A>
-<BR>
-<A HREF="Chars.html" title="class in com.google.common.primitives" target="classFrame">Chars</A>
-<BR>
-<A HREF="Doubles.html" title="class in com.google.common.primitives" target="classFrame">Doubles</A>
-<BR>
-<A HREF="Floats.html" title="class in com.google.common.primitives" target="classFrame">Floats</A>
-<BR>
-<A HREF="Ints.html" title="class in com.google.common.primitives" target="classFrame">Ints</A>
-<BR>
-<A HREF="Longs.html" title="class in com.google.common.primitives" target="classFrame">Longs</A>
-<BR>
-<A HREF="Primitives.html" title="class in com.google.common.primitives" target="classFrame">Primitives</A>
-<BR>
-<A HREF="Shorts.html" title="class in com.google.common.primitives" target="classFrame">Shorts</A>
-<BR>
-<A HREF="SignedBytes.html" title="class in com.google.common.primitives" target="classFrame">SignedBytes</A>
-<BR>
-<A HREF="UnsignedBytes.html" title="class in com.google.common.primitives" target="classFrame">UnsignedBytes</A></FONT></TD>
-</TR>
-</TABLE>
-
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/primitives/package-summary.html b/javadoc/com/google/common/primitives/package-summary.html
deleted file mode 100644
index f30216b..0000000
--- a/javadoc/com/google/common/primitives/package-summary.html
+++ /dev/null
@@ -1,210 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-com.google.common.primitives (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="com.google.common.primitives (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-use.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/io/package-summary.html"><B>PREV PACKAGE</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/util/concurrent/package-summary.html"><B>NEXT PACKAGE</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/primitives/package-summary.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<H2>
-Package com.google.common.primitives
-</H2>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Class Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/primitives/Booleans.html" title="class in com.google.common.primitives">Booleans</A></B></TD>
-<TD>Static utility methods pertaining to <code>boolean</code> primitives, that are not
- already found in either <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang"><CODE>Boolean</CODE></A> or <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true" title="class or interface in java.util"><CODE>Arrays</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/primitives/Bytes.html" title="class in com.google.common.primitives">Bytes</A></B></TD>
-<TD>Static utility methods pertaining to <code>byte</code> primitives, that are not
- already found in either <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Byte.html?is-external=true" title="class or interface in java.lang"><CODE>Byte</CODE></A> or <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true" title="class or interface in java.util"><CODE>Arrays</CODE></A>, <i>and interpret
- bytes as neither signed nor unsigned</i>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/primitives/Chars.html" title="class in com.google.common.primitives">Chars</A></B></TD>
-<TD>Static utility methods pertaining to <code>char</code> primitives, that are not
- already found in either <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Character.html?is-external=true" title="class or interface in java.lang"><CODE>Character</CODE></A> or <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true" title="class or interface in java.util"><CODE>Arrays</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/primitives/Doubles.html" title="class in com.google.common.primitives">Doubles</A></B></TD>
-<TD>Static utility methods pertaining to <code>double</code> primitives, that are not
- already found in either <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Double.html?is-external=true" title="class or interface in java.lang"><CODE>Double</CODE></A> or <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true" title="class or interface in java.util"><CODE>Arrays</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/primitives/Floats.html" title="class in com.google.common.primitives">Floats</A></B></TD>
-<TD>Static utility methods pertaining to <code>float</code> primitives, that are not
- already found in either <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true" title="class or interface in java.lang"><CODE>Float</CODE></A> or <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true" title="class or interface in java.util"><CODE>Arrays</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/primitives/Ints.html" title="class in com.google.common.primitives">Ints</A></B></TD>
-<TD>Static utility methods pertaining to <code>int</code> primitives, that are not
- already found in either <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang"><CODE>Integer</CODE></A> or <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true" title="class or interface in java.util"><CODE>Arrays</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/primitives/Longs.html" title="class in com.google.common.primitives">Longs</A></B></TD>
-<TD>Static utility methods pertaining to <code>long</code> primitives, that are not
- already found in either <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang"><CODE>Long</CODE></A> or <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true" title="class or interface in java.util"><CODE>Arrays</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/primitives/Primitives.html" title="class in com.google.common.primitives">Primitives</A></B></TD>
-<TD>Contains static utility methods pertaining to primitive types and their
- corresponding wrapper types.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/primitives/Shorts.html" title="class in com.google.common.primitives">Shorts</A></B></TD>
-<TD>Static utility methods pertaining to <code>short</code> primitives, that are not
- already found in either <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Short.html?is-external=true" title="class or interface in java.lang"><CODE>Short</CODE></A> or <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true" title="class or interface in java.util"><CODE>Arrays</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/primitives/SignedBytes.html" title="class in com.google.common.primitives">SignedBytes</A></B></TD>
-<TD>Static utility methods pertaining to <code>byte</code> primitives that
- interpret values as signed.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/common/primitives/UnsignedBytes.html" title="class in com.google.common.primitives">UnsignedBytes</A></B></TD>
-<TD>Static utility methods pertaining to <code>byte</code> primitives that interpret
- values as <i>unsigned</i> (that is, any negative value <code>b</code> is treated
- as the positive value <code>256 + b</code>).</TD>
-</TR>
-</TABLE>
-&nbsp;
-
-<P>
-<DL>
-</DL>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-use.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/io/package-summary.html"><B>PREV PACKAGE</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/util/concurrent/package-summary.html"><B>NEXT PACKAGE</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/primitives/package-summary.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/primitives/package-tree.html b/javadoc/com/google/common/primitives/package-tree.html
deleted file mode 100644
index 1599aaf..0000000
--- a/javadoc/com/google/common/primitives/package-tree.html
+++ /dev/null
@@ -1,153 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-com.google.common.primitives Class Hierarchy (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="com.google.common.primitives Class Hierarchy (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/io/package-tree.html"><B>PREV</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/util/concurrent/package-tree.html"><B>NEXT</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/primitives/package-tree.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-Hierarchy For Package com.google.common.primitives
-</H2>
-</CENTER>
-<DL>
-<DT><B>Package Hierarchies:</B><DD><A HREF="../../../../overview-tree.html">All Packages</A></DL>
-<HR>
-<H2>
-Class Hierarchy
-</H2>
-<UL>
-<LI TYPE="circle">java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang"><B>Object</B></A><UL>
-<LI TYPE="circle">com.google.common.primitives.<A HREF="../../../../com/google/common/primitives/Booleans.html" title="class in com.google.common.primitives"><B>Booleans</B></A><LI TYPE="circle">com.google.common.primitives.<A HREF="../../../../com/google/common/primitives/Bytes.html" title="class in com.google.common.primitives"><B>Bytes</B></A><LI TYPE="circle">com.google.common.primitives.<A HREF="../../../../com/google/common/primitives/Chars.html" title="class in com.google.common.primitives"><B>Chars</B></A><LI TYPE="circle">com.google.common.primitives.<A HREF="../../../../com/google/common/primitives/Doubles.html" title="class in com.google.common.primitives"><B>Doubles</B></A><LI TYPE="circle">com.google.common.primitives.<A HREF="../../../../com/google/common/primitives/Floats.html" title="class in com.google.common.primitives"><B>Floats</B></A><LI TYPE="circle">com.google.common.primitives.<A HREF="../../../../com/google/common/primitives/Ints.html" title="class in com.google.common.primitives"><B>Ints</B></A><LI TYPE="circle">com.google.common.primitives.<A HREF="../../../../com/google/common/primitives/Longs.html" title="class in com.google.common.primitives"><B>Longs</B></A><LI TYPE="circle">com.google.common.primitives.<A HREF="../../../../com/google/common/primitives/Primitives.html" title="class in com.google.common.primitives"><B>Primitives</B></A><LI TYPE="circle">com.google.common.primitives.<A HREF="../../../../com/google/common/primitives/Shorts.html" title="class in com.google.common.primitives"><B>Shorts</B></A><LI TYPE="circle">com.google.common.primitives.<A HREF="../../../../com/google/common/primitives/SignedBytes.html" title="class in com.google.common.primitives"><B>SignedBytes</B></A><LI TYPE="circle">com.google.common.primitives.<A HREF="../../../../com/google/common/primitives/UnsignedBytes.html" title="class in com.google.common.primitives"><B>UnsignedBytes</B></A></UL>
-</UL>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/common/io/package-tree.html"><B>PREV</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/common/util/concurrent/package-tree.html"><B>NEXT</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/primitives/package-tree.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/primitives/package-use.html b/javadoc/com/google/common/primitives/package-use.html
deleted file mode 100644
index 8a46e8e..0000000
--- a/javadoc/com/google/common/primitives/package-use.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Package com.google.common.primitives (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Package com.google.common.primitives (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/primitives/package-use.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="package-use.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Package<br>com.google.common.primitives</B></H2>
-</CENTER>
-No usage of com.google.common.primitives
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../index.html?com/google/common/primitives/package-use.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="package-use.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/util/concurrent/AbstractCheckedFuture.html b/javadoc/com/google/common/util/concurrent/AbstractCheckedFuture.html
deleted file mode 100644
index 0339a29..0000000
--- a/javadoc/com/google/common/util/concurrent/AbstractCheckedFuture.html
+++ /dev/null
@@ -1,552 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-AbstractCheckedFuture (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="AbstractCheckedFuture (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/AbstractCheckedFuture.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV CLASS&nbsp;
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/AbstractExecutionThreadService.html" title="class in com.google.common.util.concurrent"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/util/concurrent/AbstractCheckedFuture.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="AbstractCheckedFuture.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.util.concurrent</FONT>
-<BR>
-Class AbstractCheckedFuture&lt;V,E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</A>&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.util.concurrent.AbstractCheckedFuture&lt;V,E&gt;</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../../com/google/common/util/concurrent/CheckedFuture.html" title="interface in com.google.common.util.concurrent">CheckedFuture</A>&lt;V,E&gt;, <A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;V&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;V&gt;</DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public abstract class <B>AbstractCheckedFuture&lt;V,E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</A>&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A><DT>implements <A HREF="../../../../../com/google/common/util/concurrent/CheckedFuture.html" title="interface in com.google.common.util.concurrent">CheckedFuture</A>&lt;V,E&gt;</DL>
-</PRE>
-
-<P>
-A delegating wrapper around a <A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent"><CODE>ListenableFuture</CODE></A> that adds support for
- the <A HREF="../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html#checkedGet()"><CODE>checkedGet()</CODE></A> and <A HREF="../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html#checkedGet(long, java.util.concurrent.TimeUnit)"><CODE>checkedGet(long, TimeUnit)</CODE></A> methods.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2009.09.15 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Sven Mawson</DD>
-</DL>
-<HR>
-
-<P>
-<!-- =========== FIELD SUMMARY =========== -->
-
-<A NAME="field_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Field Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected &nbsp;<A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;<A HREF="../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html" title="type parameter in AbstractCheckedFuture">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html#delegate">delegate</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The delegate, used to pass along all our methods.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected </CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html#AbstractCheckedFuture(com.google.common.util.concurrent.ListenableFuture)">AbstractCheckedFuture</A></B>(<A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;<A HREF="../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html" title="type parameter in AbstractCheckedFuture">V</A>&gt;&nbsp;delegate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs an <code>AbstractCheckedFuture</code> that wraps a delegate.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html#addListener(java.lang.Runnable, java.util.concurrent.Executor)">addListener</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</A>&nbsp;listener,
-            <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executor.html?is-external=true" title="class or interface in java.util.concurrent">Executor</A>&nbsp;exec)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds a listener and executor to the ListenableFuture.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html#cancel(boolean)">cancel</A></B>(boolean&nbsp;mayInterruptIfRunning)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html" title="type parameter in AbstractCheckedFuture">V</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html#checkedGet()">checkedGet</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exception checking version of <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#get()" title="class or interface in java.util.concurrent"><CODE>Future.get()</CODE></A> that will translate
- <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang"><CODE>InterruptedException</CODE></A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/CancellationException.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>CancellationException</CODE></A> and
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutionException.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ExecutionException</CODE></A> into application-specific exceptions.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html" title="type parameter in AbstractCheckedFuture">V</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html#checkedGet(long, java.util.concurrent.TimeUnit)">checkedGet</A></B>(long&nbsp;timeout,
-           <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</A>&nbsp;unit)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exception checking version of <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#get(long, java.util.concurrent.TimeUnit)" title="class or interface in java.util.concurrent"><CODE>Future.get(long, TimeUnit)</CODE></A> that will
- translate <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang"><CODE>InterruptedException</CODE></A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/CancellationException.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>CancellationException</CODE></A> and
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutionException.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ExecutionException</CODE></A> into application-specific exceptions.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html" title="type parameter in AbstractCheckedFuture">V</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html#get()">get</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html" title="type parameter in AbstractCheckedFuture">V</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html#get(long, java.util.concurrent.TimeUnit)">get</A></B>(long&nbsp;timeout,
-    <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</A>&nbsp;unit)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html#isCancelled()">isCancelled</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html#isDone()">isDone</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected abstract &nbsp;<A HREF="../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html" title="type parameter in AbstractCheckedFuture">E</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html#mapException(java.lang.Exception)">mapException</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</A>&nbsp;e)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Translate from an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang"><CODE>InterruptedException</CODE></A>,
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/CancellationException.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>CancellationException</CODE></A> or <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutionException.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ExecutionException</CODE></A> to an exception
- of type <code>E</code>.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ FIELD DETAIL =========== -->
-
-<A NAME="field_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Field Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="delegate"><!-- --></A><H3>
-delegate</H3>
-<PRE>
-protected final <A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;<A HREF="../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html" title="type parameter in AbstractCheckedFuture">V</A>&gt; <B>delegate</B></PRE>
-<DL>
-<DD>The delegate, used to pass along all our methods.
-<P>
-<DL>
-</DL>
-</DL>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="AbstractCheckedFuture(com.google.common.util.concurrent.ListenableFuture)"><!-- --></A><H3>
-AbstractCheckedFuture</H3>
-<PRE>
-protected <B>AbstractCheckedFuture</B>(<A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;<A HREF="../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html" title="type parameter in AbstractCheckedFuture">V</A>&gt;&nbsp;delegate)</PRE>
-<DL>
-<DD>Constructs an <code>AbstractCheckedFuture</code> that wraps a delegate.
-<P>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="mapException(java.lang.Exception)"><!-- --></A><H3>
-mapException</H3>
-<PRE>
-protected abstract <A HREF="../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html" title="type parameter in AbstractCheckedFuture">E</A> <B>mapException</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</A>&nbsp;e)</PRE>
-<DL>
-<DD>Translate from an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang"><CODE>InterruptedException</CODE></A>,
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/CancellationException.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>CancellationException</CODE></A> or <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutionException.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ExecutionException</CODE></A> to an exception
- of type <code>E</code>.  Subclasses must implement the mapping themselves.
- 
- The <code>e</code> parameter can be an instance of <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang"><CODE>InterruptedException</CODE></A>,
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/CancellationException.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>CancellationException</CODE></A>, or <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutionException.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ExecutionException</CODE></A>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="checkedGet()"><!-- --></A><H3>
-checkedGet</H3>
-<PRE>
-public <A HREF="../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html" title="type parameter in AbstractCheckedFuture">V</A> <B>checkedGet</B>()
-             throws <A HREF="../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html" title="type parameter in AbstractCheckedFuture">E</A> extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</A></PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/google/common/util/concurrent/CheckedFuture.html#checkedGet()">CheckedFuture</A></CODE></B></DD>
-<DD>Exception checking version of <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#get()" title="class or interface in java.util.concurrent"><CODE>Future.get()</CODE></A> that will translate
- <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang"><CODE>InterruptedException</CODE></A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/CancellationException.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>CancellationException</CODE></A> and
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutionException.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ExecutionException</CODE></A> into application-specific exceptions.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/google/common/util/concurrent/CheckedFuture.html#checkedGet()">checkedGet</A></CODE> in interface <CODE><A HREF="../../../../../com/google/common/util/concurrent/CheckedFuture.html" title="interface in com.google.common.util.concurrent">CheckedFuture</A>&lt;<A HREF="../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html" title="type parameter in AbstractCheckedFuture">V</A>,<A HREF="../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html" title="type parameter in AbstractCheckedFuture">E</A> extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>the result of executing the future.
-<DT><B>Throws:</B>
-<DD><CODE>E</CODE> - on interruption, cancellation or execution exceptions.
-<DD><CODE><A HREF="../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html" title="type parameter in AbstractCheckedFuture">E</A> extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</A></CODE></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="checkedGet(long, java.util.concurrent.TimeUnit)"><!-- --></A><H3>
-checkedGet</H3>
-<PRE>
-public <A HREF="../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html" title="type parameter in AbstractCheckedFuture">V</A> <B>checkedGet</B>(long&nbsp;timeout,
-                    <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</A>&nbsp;unit)
-             throws <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeoutException.html?is-external=true" title="class or interface in java.util.concurrent">TimeoutException</A>,
-                    <A HREF="../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html" title="type parameter in AbstractCheckedFuture">E</A> extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</A></PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/google/common/util/concurrent/CheckedFuture.html#checkedGet(long, java.util.concurrent.TimeUnit)">CheckedFuture</A></CODE></B></DD>
-<DD>Exception checking version of <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#get(long, java.util.concurrent.TimeUnit)" title="class or interface in java.util.concurrent"><CODE>Future.get(long, TimeUnit)</CODE></A> that will
- translate <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang"><CODE>InterruptedException</CODE></A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/CancellationException.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>CancellationException</CODE></A> and
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutionException.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ExecutionException</CODE></A> into application-specific exceptions.  On
- timeout this method throws a normal <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeoutException.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>TimeoutException</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/google/common/util/concurrent/CheckedFuture.html#checkedGet(long, java.util.concurrent.TimeUnit)">checkedGet</A></CODE> in interface <CODE><A HREF="../../../../../com/google/common/util/concurrent/CheckedFuture.html" title="interface in com.google.common.util.concurrent">CheckedFuture</A>&lt;<A HREF="../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html" title="type parameter in AbstractCheckedFuture">V</A>,<A HREF="../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html" title="type parameter in AbstractCheckedFuture">E</A> extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>the result of executing the future.
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeoutException.html?is-external=true" title="class or interface in java.util.concurrent">TimeoutException</A></CODE> - if retrieving the result timed out.
-<DD><CODE>E</CODE> - on interruption, cancellation or execution exceptions.
-<DD><CODE><A HREF="../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html" title="type parameter in AbstractCheckedFuture">E</A> extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</A></CODE></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="cancel(boolean)"><!-- --></A><H3>
-cancel</H3>
-<PRE>
-public boolean <B>cancel</B>(boolean&nbsp;mayInterruptIfRunning)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#cancel(boolean)" title="class or interface in java.util.concurrent">cancel</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;<A HREF="../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html" title="type parameter in AbstractCheckedFuture">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="isCancelled()"><!-- --></A><H3>
-isCancelled</H3>
-<PRE>
-public boolean <B>isCancelled</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#isCancelled()" title="class or interface in java.util.concurrent">isCancelled</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;<A HREF="../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html" title="type parameter in AbstractCheckedFuture">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="isDone()"><!-- --></A><H3>
-isDone</H3>
-<PRE>
-public boolean <B>isDone</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#isDone()" title="class or interface in java.util.concurrent">isDone</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;<A HREF="../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html" title="type parameter in AbstractCheckedFuture">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="get()"><!-- --></A><H3>
-get</H3>
-<PRE>
-public <A HREF="../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html" title="type parameter in AbstractCheckedFuture">V</A> <B>get</B>()
-      throws <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</A>,
-             <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutionException.html?is-external=true" title="class or interface in java.util.concurrent">ExecutionException</A></PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#get()" title="class or interface in java.util.concurrent">get</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;<A HREF="../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html" title="type parameter in AbstractCheckedFuture">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</A></CODE>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutionException.html?is-external=true" title="class or interface in java.util.concurrent">ExecutionException</A></CODE></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="get(long, java.util.concurrent.TimeUnit)"><!-- --></A><H3>
-get</H3>
-<PRE>
-public <A HREF="../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html" title="type parameter in AbstractCheckedFuture">V</A> <B>get</B>(long&nbsp;timeout,
-             <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</A>&nbsp;unit)
-      throws <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</A>,
-             <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutionException.html?is-external=true" title="class or interface in java.util.concurrent">ExecutionException</A>,
-             <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeoutException.html?is-external=true" title="class or interface in java.util.concurrent">TimeoutException</A></PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#get(long, java.util.concurrent.TimeUnit)" title="class or interface in java.util.concurrent">get</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;<A HREF="../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html" title="type parameter in AbstractCheckedFuture">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</A></CODE>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutionException.html?is-external=true" title="class or interface in java.util.concurrent">ExecutionException</A></CODE>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeoutException.html?is-external=true" title="class or interface in java.util.concurrent">TimeoutException</A></CODE></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="addListener(java.lang.Runnable, java.util.concurrent.Executor)"><!-- --></A><H3>
-addListener</H3>
-<PRE>
-public void <B>addListener</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</A>&nbsp;listener,
-                        <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executor.html?is-external=true" title="class or interface in java.util.concurrent">Executor</A>&nbsp;exec)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html#addListener(java.lang.Runnable, java.util.concurrent.Executor)">ListenableFuture</A></CODE></B></DD>
-<DD><p>Adds a listener and executor to the ListenableFuture.
- The listener will be <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executor.html?is-external=true#execute(java.lang.Runnable)" title="class or interface in java.util.concurrent">passed
- to the executor</A> for execution when the <code>Future</code>'s computation is
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#isDone()" title="class or interface in java.util.concurrent">complete</A>.
-
- <p>There is no guaranteed ordering of execution of listeners, they may get
- called in the order they were added and they may get called out of order,
- but any listener added through this method is guaranteed to be called once
- the computation is complete.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html#addListener(java.lang.Runnable, java.util.concurrent.Executor)">addListener</A></CODE> in interface <CODE><A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;<A HREF="../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html" title="type parameter in AbstractCheckedFuture">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>listener</CODE> - the listener to run when the computation is complete.<DD><CODE>exec</CODE> - the executor to run the listener in.</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/AbstractCheckedFuture.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV CLASS&nbsp;
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/AbstractExecutionThreadService.html" title="class in com.google.common.util.concurrent"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/util/concurrent/AbstractCheckedFuture.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="AbstractCheckedFuture.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/util/concurrent/AbstractExecutionThreadService.html b/javadoc/com/google/common/util/concurrent/AbstractExecutionThreadService.html
deleted file mode 100644
index ba597ff..0000000
--- a/javadoc/com/google/common/util/concurrent/AbstractExecutionThreadService.html
+++ /dev/null
@@ -1,610 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-AbstractExecutionThreadService (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="AbstractExecutionThreadService (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/AbstractExecutionThreadService.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html" title="class in com.google.common.util.concurrent"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html" title="class in com.google.common.util.concurrent"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/util/concurrent/AbstractExecutionThreadService.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="AbstractExecutionThreadService.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.util.concurrent</FONT>
-<BR>
-Class AbstractExecutionThreadService</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.util.concurrent.AbstractExecutionThreadService</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../../com/google/common/base/Service.html" title="interface in com.google.common.base">Service</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public abstract class <B>AbstractExecutionThreadService</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A><DT>implements <A HREF="../../../../../com/google/common/base/Service.html" title="interface in com.google.common.base">Service</A></DL>
-</PRE>
-
-<P>
-Base class for services that can implement <A HREF="../../../../../com/google/common/util/concurrent/AbstractExecutionThreadService.html#startUp()"><CODE>startUp()</CODE></A>, <A HREF="../../../../../com/google/common/util/concurrent/AbstractExecutionThreadService.html#run()"><CODE>run()</CODE></A> and
- <A HREF="../../../../../com/google/common/util/concurrent/AbstractExecutionThreadService.html#shutDown()"><CODE>shutDown()</CODE></A> methods. This class uses a single thread to execute the
- service; consider <A HREF="../../../../../com/google/common/util/concurrent/AbstractService.html" title="class in com.google.common.util.concurrent"><CODE>AbstractService</CODE></A> if you would like to manage any
- threading manually.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2009.09.15 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Jesse Wilson</DD>
-</DL>
-<HR>
-
-<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-<A NAME="nested_class_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Nested Class Summary</B></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;<A NAME="nested_classes_inherited_from_class_com.google.common.base.Service"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Nested classes/interfaces inherited from interface com.google.common.base.<A HREF="../../../../../com/google/common/base/Service.html" title="interface in com.google.common.base">Service</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractExecutionThreadService.html#AbstractExecutionThreadService()">AbstractExecutionThreadService</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected &nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executor.html?is-external=true" title="class or interface in java.util.concurrent">Executor</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractExecutionThreadService.html#executor()">executor</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executor.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>Executor</CODE></A> that will be used to run this service.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractExecutionThreadService.html#isRunning()">isRunning</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if this service is <A HREF="../../../../../com/google/common/base/Service.State.html#RUNNING"><CODE>running</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected abstract &nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractExecutionThreadService.html#run()">run</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Run the service.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected &nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractExecutionThreadService.html#shutDown()">shutDown</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stop the service.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;<A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractExecutionThreadService.html#start()">start</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If the service state is <A HREF="../../../../../com/google/common/base/Service.State.html#NEW"><CODE>Service.State.NEW</CODE></A>, this initiates service startup
- and returns immediately.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractExecutionThreadService.html#startAndWait()">startAndWait</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Initiates service startup (if necessary), returning once the service has
- finished starting.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected &nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractExecutionThreadService.html#startUp()">startUp</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Start the service.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractExecutionThreadService.html#state()">state</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the lifecycle state of the service.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;<A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractExecutionThreadService.html#stop()">stop</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If the service is <A HREF="../../../../../com/google/common/base/Service.State.html#STARTING"><CODE>Service.State.STARTING</CODE></A> or <A HREF="../../../../../com/google/common/base/Service.State.html#RUNNING"><CODE>Service.State.RUNNING</CODE></A>, this
- initiates service shutdown and returns immediately.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractExecutionThreadService.html#stopAndWait()">stopAndWait</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Initiates service shutdown (if necessary), returning once the service has
- finished stopping.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractExecutionThreadService.html#toString()">toString</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected &nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractExecutionThreadService.html#triggerShutdown()">triggerShutdown</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Invoked to request the service to stop.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="AbstractExecutionThreadService()"><!-- --></A><H3>
-AbstractExecutionThreadService</H3>
-<PRE>
-public <B>AbstractExecutionThreadService</B>()</PRE>
-<DL>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="startUp()"><!-- --></A><H3>
-startUp</H3>
-<PRE>
-protected void <B>startUp</B>()
-                throws <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</A></PRE>
-<DL>
-<DD>Start the service. This method is invoked on the execution thread.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</A></CODE></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="run()"><!-- --></A><H3>
-run</H3>
-<PRE>
-protected abstract void <B>run</B>()
-                     throws <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</A></PRE>
-<DL>
-<DD>Run the service. This method is invoked on the execution thread.
- Implementations must respond to stop requests. You could poll for lifecycle
- changes in a work loop:
- <pre>
-   public void run() {
-     while (<A HREF="../../../../../com/google/common/util/concurrent/AbstractExecutionThreadService.html#isRunning()"><CODE>isRunning()</CODE></A>) {
-       // perform a unit of work
-     }
-   }
- </pre>
- ...or you could respond to stop requests by implementing <A HREF="../../../../../com/google/common/util/concurrent/AbstractExecutionThreadService.html#triggerShutdown()"><CODE>triggerShutdown()</CODE></A>, which should cause <A HREF="../../../../../com/google/common/util/concurrent/AbstractExecutionThreadService.html#run()"><CODE>run()</CODE></A> to return.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</A></CODE></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="shutDown()"><!-- --></A><H3>
-shutDown</H3>
-<PRE>
-protected void <B>shutDown</B>()
-                 throws <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</A></PRE>
-<DL>
-<DD>Stop the service. This method is invoked on the execution thread.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</A></CODE></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="triggerShutdown()"><!-- --></A><H3>
-triggerShutdown</H3>
-<PRE>
-protected void <B>triggerShutdown</B>()</PRE>
-<DL>
-<DD>Invoked to request the service to stop.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="executor()"><!-- --></A><H3>
-executor</H3>
-<PRE>
-protected <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executor.html?is-external=true" title="class or interface in java.util.concurrent">Executor</A> <B>executor</B>()</PRE>
-<DL>
-<DD>Returns the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executor.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>Executor</CODE></A> that will be used to run this service.
- Subclasses may override this method to use a custom <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executor.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>Executor</CODE></A>, which
- may configure its worker thread with a specific name, thread group or
- priority. The returned executor's <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executor.html?is-external=true#execute(java.lang.Runnable)" title="class or interface in java.util.concurrent"><CODE>execute()</CODE></A> method is called when this service is started, and should return
- promptly.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toString()"><!-- --></A><H3>
-toString</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="start()"><!-- --></A><H3>
-start</H3>
-<PRE>
-public final <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;<A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A>&gt; <B>start</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/google/common/base/Service.html#start()">Service</A></CODE></B></DD>
-<DD>If the service state is <A HREF="../../../../../com/google/common/base/Service.State.html#NEW"><CODE>Service.State.NEW</CODE></A>, this initiates service startup
- and returns immediately. If the service has already been started, this
- method returns immediately without taking action. A stopped service may not
- be restarted.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/google/common/base/Service.html#start()">start</A></CODE> in interface <CODE><A HREF="../../../../../com/google/common/base/Service.html" title="interface in com.google.common.base">Service</A></CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a future for the startup result, regardless of whether this call
-     initiated startup. Calling <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#get()" title="class or interface in java.util.concurrent"><CODE>Future.get()</CODE></A> will block until the
-     service has finished starting, and returns one of <A HREF="../../../../../com/google/common/base/Service.State.html#RUNNING"><CODE>Service.State.RUNNING</CODE></A>, <A HREF="../../../../../com/google/common/base/Service.State.html#STOPPING"><CODE>Service.State.STOPPING</CODE></A> or <A HREF="../../../../../com/google/common/base/Service.State.html#TERMINATED"><CODE>Service.State.TERMINATED</CODE></A>. If
-     the service fails to start, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#get()" title="class or interface in java.util.concurrent"><CODE>Future.get()</CODE></A> will throw an <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutionException.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ExecutionException</CODE></A>, and the service's state will be <A HREF="../../../../../com/google/common/base/Service.State.html#FAILED"><CODE>Service.State.FAILED</CODE></A>. If it has already finished starting, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#get()" title="class or interface in java.util.concurrent"><CODE>Future.get()</CODE></A>
-     returns immediately. Cancelling the returned future is unsupported and
-     always returns <code>false</code>.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="startAndWait()"><!-- --></A><H3>
-startAndWait</H3>
-<PRE>
-public final <A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A> <B>startAndWait</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/google/common/base/Service.html#startAndWait()">Service</A></CODE></B></DD>
-<DD>Initiates service startup (if necessary), returning once the service has
- finished starting. Unlike calling <code>start().get()</code>, this method throws
- no checked exceptions.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/google/common/base/Service.html#startAndWait()">startAndWait</A></CODE> in interface <CODE><A HREF="../../../../../com/google/common/base/Service.html" title="interface in com.google.common.base">Service</A></CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>the state of the service when startup finished.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="isRunning()"><!-- --></A><H3>
-isRunning</H3>
-<PRE>
-public final boolean <B>isRunning</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/google/common/base/Service.html#isRunning()">Service</A></CODE></B></DD>
-<DD>Returns <code>true</code> if this service is <A HREF="../../../../../com/google/common/base/Service.State.html#RUNNING"><CODE>running</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/google/common/base/Service.html#isRunning()">isRunning</A></CODE> in interface <CODE><A HREF="../../../../../com/google/common/base/Service.html" title="interface in com.google.common.base">Service</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="state()"><!-- --></A><H3>
-state</H3>
-<PRE>
-public final <A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A> <B>state</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/google/common/base/Service.html#state()">Service</A></CODE></B></DD>
-<DD>Returns the lifecycle state of the service.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/google/common/base/Service.html#state()">state</A></CODE> in interface <CODE><A HREF="../../../../../com/google/common/base/Service.html" title="interface in com.google.common.base">Service</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="stop()"><!-- --></A><H3>
-stop</H3>
-<PRE>
-public final <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;<A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A>&gt; <B>stop</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/google/common/base/Service.html#stop()">Service</A></CODE></B></DD>
-<DD>If the service is <A HREF="../../../../../com/google/common/base/Service.State.html#STARTING"><CODE>Service.State.STARTING</CODE></A> or <A HREF="../../../../../com/google/common/base/Service.State.html#RUNNING"><CODE>Service.State.RUNNING</CODE></A>, this
- initiates service shutdown and returns immediately. If this is <A HREF="../../../../../com/google/common/base/Service.State.html#NEW"><CODE>Service.State.NEW</CODE></A>, it is <A HREF="../../../../../com/google/common/base/Service.State.html#TERMINATED"><CODE>terminated</CODE></A> without having been
- started nor stopped.  If the service has already been stopped, this
- method returns immediately without taking action.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/google/common/base/Service.html#stop()">stop</A></CODE> in interface <CODE><A HREF="../../../../../com/google/common/base/Service.html" title="interface in com.google.common.base">Service</A></CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a future for the shutdown result, regardless of whether this call
-     initiated shutdown. Calling <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#get()" title="class or interface in java.util.concurrent"><CODE>Future.get()</CODE></A> will block until the
-     service has finished shutting down, and either returns <A HREF="../../../../../com/google/common/base/Service.State.html#TERMINATED"><CODE>Service.State.TERMINATED</CODE></A> or throws an <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutionException.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ExecutionException</CODE></A>. If it has
-     already finished stopping, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#get()" title="class or interface in java.util.concurrent"><CODE>Future.get()</CODE></A> returns immediately.
-     Cancelling this future is unsupported and always returns <code>false</code>.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="stopAndWait()"><!-- --></A><H3>
-stopAndWait</H3>
-<PRE>
-public final <A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A> <B>stopAndWait</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/google/common/base/Service.html#stopAndWait()">Service</A></CODE></B></DD>
-<DD>Initiates service shutdown (if necessary), returning once the service has
- finished stopping. If this is <A HREF="../../../../../com/google/common/base/Service.State.html#STARTING"><CODE>Service.State.STARTING</CODE></A>, startup will be
- cancelled. If this is <A HREF="../../../../../com/google/common/base/Service.State.html#NEW"><CODE>Service.State.NEW</CODE></A>, it is <A HREF="../../../../../com/google/common/base/Service.State.html#TERMINATED"><CODE>terminated</CODE></A> without having been started nor stopped. Unlike calling <code>stop().get()</code>, this method throws no checked exceptions.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/google/common/base/Service.html#stopAndWait()">stopAndWait</A></CODE> in interface <CODE><A HREF="../../../../../com/google/common/base/Service.html" title="interface in com.google.common.base">Service</A></CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>the state of the service when shutdown finished.</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/AbstractExecutionThreadService.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html" title="class in com.google.common.util.concurrent"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html" title="class in com.google.common.util.concurrent"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/util/concurrent/AbstractExecutionThreadService.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="AbstractExecutionThreadService.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/util/concurrent/AbstractFuture.html b/javadoc/com/google/common/util/concurrent/AbstractFuture.html
deleted file mode 100644
index 9f1f286..0000000
--- a/javadoc/com/google/common/util/concurrent/AbstractFuture.html
+++ /dev/null
@@ -1,500 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-AbstractFuture (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="AbstractFuture (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/AbstractFuture.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/AbstractExecutionThreadService.html" title="class in com.google.common.util.concurrent"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/AbstractIdleService.html" title="class in com.google.common.util.concurrent"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/util/concurrent/AbstractFuture.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="AbstractFuture.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.util.concurrent</FONT>
-<BR>
-Class AbstractFuture&lt;V&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.util.concurrent.AbstractFuture&lt;V&gt;</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;V&gt;</DD>
-</DL>
-<DL>
-<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../../../com/google/common/util/concurrent/AbstractListenableFuture.html" title="class in com.google.common.util.concurrent">AbstractListenableFuture</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public abstract class <B>AbstractFuture&lt;V&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A><DT>implements <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;V&gt;</DL>
-</PRE>
-
-<P>
-<p>An abstract implementation of the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>Future</CODE></A> interface.  This class
- is an abstraction of <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/FutureTask.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>FutureTask</CODE></A> to support use
- for tasks other than <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang"><CODE>Runnable</CODE></A>s.  It uses an
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/locks/AbstractQueuedSynchronizer.html?is-external=true" title="class or interface in java.util.concurrent.locks"><CODE>AbstractQueuedSynchronizer</CODE></A> to deal with concurrency issues and
- guarantee thread safety.  It could be used as a base class to
- <code>FutureTask</code>, or any other implementor of the <code>Future</code> interface.
-
- <p>This class implements all methods in <code>Future</code>.  Subclasses should
- provide a way to set the result of the computation through the protected
- methods <A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html#set(V)"><CODE>set(Object)</CODE></A>, <A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html#setException(java.lang.Throwable)"><CODE>setException(Throwable)</CODE></A>, or
- <A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html#cancel()"><CODE>cancel()</CODE></A>.  If subclasses want to implement cancellation they can
- override the <A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html#cancel(boolean)"><CODE>cancel(boolean)</CODE></A> method with a real implementation, the
- default implementation doesn't support cancellation.
-
- <p>The state changing methods all return a boolean indicating success or
- failure in changing the future's state.  Valid states are running,
- completed, failed, or cancelled.  Because this class does not implement
- cancellation it is left to the subclass to distinguish between created
- and running tasks.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2009.09.15 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Sven Mawson</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html#AbstractFuture()">AbstractFuture</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected &nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html#cancel()">cancel</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Subclasses should invoke this method to mark the future as cancelled.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html#cancel(boolean)">cancel</A></B>(boolean&nbsp;mayInterruptIfRunning)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected &nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html#done()">done</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html" title="type parameter in AbstractFuture">V</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html#get()">get</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html" title="type parameter in AbstractFuture">V</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html#get(long, java.util.concurrent.TimeUnit)">get</A></B>(long&nbsp;timeout,
-    <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</A>&nbsp;unit)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html#isCancelled()">isCancelled</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html#isDone()">isDone</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected &nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html#set(V)">set</A></B>(<A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html" title="type parameter in AbstractFuture">V</A>&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Subclasses should invoke this method to set the result of the computation
- to <code>value</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected &nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html#setException(java.lang.Throwable)">setException</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A>&nbsp;throwable)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Subclasses should invoke this method to set the result of the computation
- to an error, <code>throwable</code>.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="AbstractFuture()"><!-- --></A><H3>
-AbstractFuture</H3>
-<PRE>
-public <B>AbstractFuture</B>()</PRE>
-<DL>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="get(long, java.util.concurrent.TimeUnit)"><!-- --></A><H3>
-get</H3>
-<PRE>
-public <A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html" title="type parameter in AbstractFuture">V</A> <B>get</B>(long&nbsp;timeout,
-             <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</A>&nbsp;unit)
-      throws <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</A>,
-             <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeoutException.html?is-external=true" title="class or interface in java.util.concurrent">TimeoutException</A>,
-             <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutionException.html?is-external=true" title="class or interface in java.util.concurrent">ExecutionException</A></PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#get(long, java.util.concurrent.TimeUnit)" title="class or interface in java.util.concurrent">get</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;<A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html" title="type parameter in AbstractFuture">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</A></CODE>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeoutException.html?is-external=true" title="class or interface in java.util.concurrent">TimeoutException</A></CODE>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutionException.html?is-external=true" title="class or interface in java.util.concurrent">ExecutionException</A></CODE></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="get()"><!-- --></A><H3>
-get</H3>
-<PRE>
-public <A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html" title="type parameter in AbstractFuture">V</A> <B>get</B>()
-      throws <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</A>,
-             <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutionException.html?is-external=true" title="class or interface in java.util.concurrent">ExecutionException</A></PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#get()" title="class or interface in java.util.concurrent">get</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;<A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html" title="type parameter in AbstractFuture">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</A></CODE>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutionException.html?is-external=true" title="class or interface in java.util.concurrent">ExecutionException</A></CODE></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="isDone()"><!-- --></A><H3>
-isDone</H3>
-<PRE>
-public boolean <B>isDone</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#isDone()" title="class or interface in java.util.concurrent">isDone</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;<A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html" title="type parameter in AbstractFuture">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="isCancelled()"><!-- --></A><H3>
-isCancelled</H3>
-<PRE>
-public boolean <B>isCancelled</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#isCancelled()" title="class or interface in java.util.concurrent">isCancelled</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;<A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html" title="type parameter in AbstractFuture">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="cancel(boolean)"><!-- --></A><H3>
-cancel</H3>
-<PRE>
-public boolean <B>cancel</B>(boolean&nbsp;mayInterruptIfRunning)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#cancel(boolean)" title="class or interface in java.util.concurrent">cancel</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;<A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html" title="type parameter in AbstractFuture">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="set(java.lang.Object)"><!-- --></A><A NAME="set(V)"><!-- --></A><H3>
-set</H3>
-<PRE>
-protected boolean <B>set</B>(<A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html" title="type parameter in AbstractFuture">V</A>&nbsp;value)</PRE>
-<DL>
-<DD>Subclasses should invoke this method to set the result of the computation
- to <code>value</code>.  This will set the state of the future to
- <CODE>AbstractFuture.Sync.COMPLETED</CODE> and call <A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html#done()"><CODE>done()</CODE></A> if the
- state was successfully changed.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>value</CODE> - the value that was the result of the task.
-<DT><B>Returns:</B><DD>true if the state was successfully changed.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="setException(java.lang.Throwable)"><!-- --></A><H3>
-setException</H3>
-<PRE>
-protected boolean <B>setException</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A>&nbsp;throwable)</PRE>
-<DL>
-<DD>Subclasses should invoke this method to set the result of the computation
- to an error, <code>throwable</code>.  This will set the state of the future to
- <CODE>AbstractFuture.Sync.COMPLETED</CODE> and call <A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html#done()"><CODE>done()</CODE></A> if the
- state was successfully changed.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>throwable</CODE> - the exception that the task failed with.
-<DT><B>Returns:</B><DD>true if the state was successfully changed.
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Error.html?is-external=true" title="class or interface in java.lang">Error</A></CODE> - if the throwable was an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Error.html?is-external=true" title="class or interface in java.lang"><CODE>Error</CODE></A>.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="cancel()"><!-- --></A><H3>
-cancel</H3>
-<PRE>
-protected final boolean <B>cancel</B>()</PRE>
-<DL>
-<DD>Subclasses should invoke this method to mark the future as cancelled.
- This will set the state of the future to <CODE>AbstractFuture.Sync.CANCELLED</CODE> and call <A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html#done()"><CODE>done()</CODE></A> if the state was
- successfully changed.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>true if the state was successfully changed.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="done()"><!-- --></A><H3>
-done</H3>
-<PRE>
-protected void <B>done</B>()</PRE>
-<DL>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/AbstractFuture.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/AbstractExecutionThreadService.html" title="class in com.google.common.util.concurrent"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/AbstractIdleService.html" title="class in com.google.common.util.concurrent"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/util/concurrent/AbstractFuture.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="AbstractFuture.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/util/concurrent/AbstractIdleService.html b/javadoc/com/google/common/util/concurrent/AbstractIdleService.html
deleted file mode 100644
index 60f5136..0000000
--- a/javadoc/com/google/common/util/concurrent/AbstractIdleService.html
+++ /dev/null
@@ -1,551 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-AbstractIdleService (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="AbstractIdleService (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/AbstractIdleService.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html" title="class in com.google.common.util.concurrent"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/AbstractListenableFuture.html" title="class in com.google.common.util.concurrent"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/util/concurrent/AbstractIdleService.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="AbstractIdleService.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.util.concurrent</FONT>
-<BR>
-Class AbstractIdleService</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.util.concurrent.AbstractIdleService</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../../com/google/common/base/Service.html" title="interface in com.google.common.base">Service</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public abstract class <B>AbstractIdleService</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A><DT>implements <A HREF="../../../../../com/google/common/base/Service.html" title="interface in com.google.common.base">Service</A></DL>
-</PRE>
-
-<P>
-Base class for services that do not need a thread while "running"
- but may need one during startup and shutdown. Subclasses can
- implement <A HREF="../../../../../com/google/common/util/concurrent/AbstractIdleService.html#startUp()"><CODE>startUp()</CODE></A> and <A HREF="../../../../../com/google/common/util/concurrent/AbstractIdleService.html#shutDown()"><CODE>shutDown()</CODE></A> methods, each
- which run in a executor which by default uses a separate thread
- for each method.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2009.09.15 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Chris Nokleberg</DD>
-</DL>
-<HR>
-
-<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-<A NAME="nested_class_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Nested Class Summary</B></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;<A NAME="nested_classes_inherited_from_class_com.google.common.base.Service"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Nested classes/interfaces inherited from interface com.google.common.base.<A HREF="../../../../../com/google/common/base/Service.html" title="interface in com.google.common.base">Service</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractIdleService.html#AbstractIdleService()">AbstractIdleService</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected &nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executor.html?is-external=true" title="class or interface in java.util.concurrent">Executor</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractIdleService.html#executor(com.google.common.base.Service.State)">executor</A></B>(<A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A>&nbsp;state)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executor.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>Executor</CODE></A> that will be used to run this service.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractIdleService.html#isRunning()">isRunning</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if this service is <A HREF="../../../../../com/google/common/base/Service.State.html#RUNNING"><CODE>running</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected abstract &nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractIdleService.html#shutDown()">shutDown</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stop the service.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;<A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractIdleService.html#start()">start</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If the service state is <A HREF="../../../../../com/google/common/base/Service.State.html#NEW"><CODE>Service.State.NEW</CODE></A>, this initiates service startup
- and returns immediately.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractIdleService.html#startAndWait()">startAndWait</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Initiates service startup (if necessary), returning once the service has
- finished starting.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected abstract &nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractIdleService.html#startUp()">startUp</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Start the service.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractIdleService.html#state()">state</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the lifecycle state of the service.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;<A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractIdleService.html#stop()">stop</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If the service is <A HREF="../../../../../com/google/common/base/Service.State.html#STARTING"><CODE>Service.State.STARTING</CODE></A> or <A HREF="../../../../../com/google/common/base/Service.State.html#RUNNING"><CODE>Service.State.RUNNING</CODE></A>, this
- initiates service shutdown and returns immediately.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractIdleService.html#stopAndWait()">stopAndWait</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Initiates service shutdown (if necessary), returning once the service has
- finished stopping.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractIdleService.html#toString()">toString</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="AbstractIdleService()"><!-- --></A><H3>
-AbstractIdleService</H3>
-<PRE>
-public <B>AbstractIdleService</B>()</PRE>
-<DL>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="startUp()"><!-- --></A><H3>
-startUp</H3>
-<PRE>
-protected abstract void <B>startUp</B>()
-                         throws <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</A></PRE>
-<DL>
-<DD>Start the service.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</A></CODE></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="shutDown()"><!-- --></A><H3>
-shutDown</H3>
-<PRE>
-protected abstract void <B>shutDown</B>()
-                          throws <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</A></PRE>
-<DL>
-<DD>Stop the service.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</A></CODE></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="executor(com.google.common.base.Service.State)"><!-- --></A><H3>
-executor</H3>
-<PRE>
-protected <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executor.html?is-external=true" title="class or interface in java.util.concurrent">Executor</A> <B>executor</B>(<A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A>&nbsp;state)</PRE>
-<DL>
-<DD>Returns the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executor.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>Executor</CODE></A> that will be used to run this service.
- Subclasses may override this method to use a custom <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executor.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>Executor</CODE></A>, which
- may configure its worker thread with a specific name, thread group or
- priority. The returned executor's <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executor.html?is-external=true#execute(java.lang.Runnable)" title="class or interface in java.util.concurrent"><CODE>execute()</CODE></A> method is called when this service is started and stopped,
- and should return promptly.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>state</CODE> - <A HREF="../../../../../com/google/common/base/Service.State.html#STARTING"><CODE>Service.State.STARTING</CODE></A> or <A HREF="../../../../../com/google/common/base/Service.State.html#STOPPING"><CODE>Service.State.STOPPING</CODE></A>, used by the
-     default implementation for naming the thread</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toString()"><!-- --></A><H3>
-toString</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>toString</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="start()"><!-- --></A><H3>
-start</H3>
-<PRE>
-public final <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;<A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A>&gt; <B>start</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/google/common/base/Service.html#start()">Service</A></CODE></B></DD>
-<DD>If the service state is <A HREF="../../../../../com/google/common/base/Service.State.html#NEW"><CODE>Service.State.NEW</CODE></A>, this initiates service startup
- and returns immediately. If the service has already been started, this
- method returns immediately without taking action. A stopped service may not
- be restarted.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/google/common/base/Service.html#start()">start</A></CODE> in interface <CODE><A HREF="../../../../../com/google/common/base/Service.html" title="interface in com.google.common.base">Service</A></CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a future for the startup result, regardless of whether this call
-     initiated startup. Calling <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#get()" title="class or interface in java.util.concurrent"><CODE>Future.get()</CODE></A> will block until the
-     service has finished starting, and returns one of <A HREF="../../../../../com/google/common/base/Service.State.html#RUNNING"><CODE>Service.State.RUNNING</CODE></A>, <A HREF="../../../../../com/google/common/base/Service.State.html#STOPPING"><CODE>Service.State.STOPPING</CODE></A> or <A HREF="../../../../../com/google/common/base/Service.State.html#TERMINATED"><CODE>Service.State.TERMINATED</CODE></A>. If
-     the service fails to start, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#get()" title="class or interface in java.util.concurrent"><CODE>Future.get()</CODE></A> will throw an <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutionException.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ExecutionException</CODE></A>, and the service's state will be <A HREF="../../../../../com/google/common/base/Service.State.html#FAILED"><CODE>Service.State.FAILED</CODE></A>. If it has already finished starting, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#get()" title="class or interface in java.util.concurrent"><CODE>Future.get()</CODE></A>
-     returns immediately. Cancelling the returned future is unsupported and
-     always returns <code>false</code>.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="startAndWait()"><!-- --></A><H3>
-startAndWait</H3>
-<PRE>
-public final <A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A> <B>startAndWait</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/google/common/base/Service.html#startAndWait()">Service</A></CODE></B></DD>
-<DD>Initiates service startup (if necessary), returning once the service has
- finished starting. Unlike calling <code>start().get()</code>, this method throws
- no checked exceptions.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/google/common/base/Service.html#startAndWait()">startAndWait</A></CODE> in interface <CODE><A HREF="../../../../../com/google/common/base/Service.html" title="interface in com.google.common.base">Service</A></CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>the state of the service when startup finished.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="isRunning()"><!-- --></A><H3>
-isRunning</H3>
-<PRE>
-public final boolean <B>isRunning</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/google/common/base/Service.html#isRunning()">Service</A></CODE></B></DD>
-<DD>Returns <code>true</code> if this service is <A HREF="../../../../../com/google/common/base/Service.State.html#RUNNING"><CODE>running</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/google/common/base/Service.html#isRunning()">isRunning</A></CODE> in interface <CODE><A HREF="../../../../../com/google/common/base/Service.html" title="interface in com.google.common.base">Service</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="state()"><!-- --></A><H3>
-state</H3>
-<PRE>
-public final <A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A> <B>state</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/google/common/base/Service.html#state()">Service</A></CODE></B></DD>
-<DD>Returns the lifecycle state of the service.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/google/common/base/Service.html#state()">state</A></CODE> in interface <CODE><A HREF="../../../../../com/google/common/base/Service.html" title="interface in com.google.common.base">Service</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="stop()"><!-- --></A><H3>
-stop</H3>
-<PRE>
-public final <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;<A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A>&gt; <B>stop</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/google/common/base/Service.html#stop()">Service</A></CODE></B></DD>
-<DD>If the service is <A HREF="../../../../../com/google/common/base/Service.State.html#STARTING"><CODE>Service.State.STARTING</CODE></A> or <A HREF="../../../../../com/google/common/base/Service.State.html#RUNNING"><CODE>Service.State.RUNNING</CODE></A>, this
- initiates service shutdown and returns immediately. If this is <A HREF="../../../../../com/google/common/base/Service.State.html#NEW"><CODE>Service.State.NEW</CODE></A>, it is <A HREF="../../../../../com/google/common/base/Service.State.html#TERMINATED"><CODE>terminated</CODE></A> without having been
- started nor stopped.  If the service has already been stopped, this
- method returns immediately without taking action.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/google/common/base/Service.html#stop()">stop</A></CODE> in interface <CODE><A HREF="../../../../../com/google/common/base/Service.html" title="interface in com.google.common.base">Service</A></CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a future for the shutdown result, regardless of whether this call
-     initiated shutdown. Calling <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#get()" title="class or interface in java.util.concurrent"><CODE>Future.get()</CODE></A> will block until the
-     service has finished shutting down, and either returns <A HREF="../../../../../com/google/common/base/Service.State.html#TERMINATED"><CODE>Service.State.TERMINATED</CODE></A> or throws an <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutionException.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ExecutionException</CODE></A>. If it has
-     already finished stopping, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#get()" title="class or interface in java.util.concurrent"><CODE>Future.get()</CODE></A> returns immediately.
-     Cancelling this future is unsupported and always returns <code>false</code>.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="stopAndWait()"><!-- --></A><H3>
-stopAndWait</H3>
-<PRE>
-public final <A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A> <B>stopAndWait</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/google/common/base/Service.html#stopAndWait()">Service</A></CODE></B></DD>
-<DD>Initiates service shutdown (if necessary), returning once the service has
- finished stopping. If this is <A HREF="../../../../../com/google/common/base/Service.State.html#STARTING"><CODE>Service.State.STARTING</CODE></A>, startup will be
- cancelled. If this is <A HREF="../../../../../com/google/common/base/Service.State.html#NEW"><CODE>Service.State.NEW</CODE></A>, it is <A HREF="../../../../../com/google/common/base/Service.State.html#TERMINATED"><CODE>terminated</CODE></A> without having been started nor stopped. Unlike calling <code>stop().get()</code>, this method throws no checked exceptions.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/google/common/base/Service.html#stopAndWait()">stopAndWait</A></CODE> in interface <CODE><A HREF="../../../../../com/google/common/base/Service.html" title="interface in com.google.common.base">Service</A></CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>the state of the service when shutdown finished.</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/AbstractIdleService.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html" title="class in com.google.common.util.concurrent"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/AbstractListenableFuture.html" title="class in com.google.common.util.concurrent"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/util/concurrent/AbstractIdleService.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="AbstractIdleService.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/util/concurrent/AbstractListenableFuture.html b/javadoc/com/google/common/util/concurrent/AbstractListenableFuture.html
deleted file mode 100644
index 4258480..0000000
--- a/javadoc/com/google/common/util/concurrent/AbstractListenableFuture.html
+++ /dev/null
@@ -1,336 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-AbstractListenableFuture (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="AbstractListenableFuture (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/AbstractListenableFuture.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/AbstractIdleService.html" title="class in com.google.common.util.concurrent"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/AbstractService.html" title="class in com.google.common.util.concurrent"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/util/concurrent/AbstractListenableFuture.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="AbstractListenableFuture.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.util.concurrent</FONT>
-<BR>
-Class AbstractListenableFuture&lt;V&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html" title="class in com.google.common.util.concurrent">com.google.common.util.concurrent.AbstractFuture</A>&lt;V&gt;
-      <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.util.concurrent.AbstractListenableFuture&lt;V&gt;</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;V&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;V&gt;</DD>
-</DL>
-<DL>
-<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../../../com/google/common/util/concurrent/ValueFuture.html" title="class in com.google.common.util.concurrent">ValueFuture</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public abstract class <B>AbstractListenableFuture&lt;V&gt;</B><DT>extends <A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html" title="class in com.google.common.util.concurrent">AbstractFuture</A>&lt;V&gt;<DT>implements <A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;V&gt;</DL>
-</PRE>
-
-<P>
-<p>An abstract base implementation of the listener support provided by
- <A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent"><CODE>ListenableFuture</CODE></A>. This class uses an <A HREF="../../../../../com/google/common/util/concurrent/ExecutionList.html" title="class in com.google.common.util.concurrent"><CODE>ExecutionList</CODE></A> to
- guarantee that all registered listeners will be executed. Listener/Executor
- pairs are stored in the execution list and executed in the order in which
- they were added, but because of thread scheduling issues there is no
- guarantee that the JVM will execute them in order. In addition, listeners
- added after the task is complete will be executed immediately, even if some
- previously added listeners have not yet been executed.
- 
- <p>This class uses the <A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html" title="class in com.google.common.util.concurrent"><CODE>AbstractFuture</CODE></A> class to implement the
- <code>ListenableFuture</code> interface and simply delegates the
- <A HREF="../../../../../com/google/common/util/concurrent/AbstractListenableFuture.html#addListener(java.lang.Runnable, java.util.concurrent.Executor)"><CODE>addListener(Runnable, Executor)</CODE></A> and <A HREF="../../../../../com/google/common/util/concurrent/AbstractListenableFuture.html#done()"><CODE>done()</CODE></A> methods to it.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2009.09.15 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Sven Mawson</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractListenableFuture.html#AbstractListenableFuture()">AbstractListenableFuture</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractListenableFuture.html#addListener(java.lang.Runnable, java.util.concurrent.Executor)">addListener</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</A>&nbsp;listener,
-            <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executor.html?is-external=true" title="class or interface in java.util.concurrent">Executor</A>&nbsp;exec)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds a listener and executor to the ListenableFuture.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected &nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractListenableFuture.html#done()">done</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.util.concurrent.AbstractFuture"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class com.google.common.util.concurrent.<A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html" title="class in com.google.common.util.concurrent">AbstractFuture</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html#cancel()">cancel</A>, <A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html#cancel(boolean)">cancel</A>, <A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html#get()">get</A>, <A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html#get(long, java.util.concurrent.TimeUnit)">get</A>, <A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html#isCancelled()">isCancelled</A>, <A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html#isDone()">isDone</A>, <A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html#set(V)">set</A>, <A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html#setException(java.lang.Throwable)">setException</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.util.concurrent.Future"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface java.util.concurrent.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#cancel(boolean)" title="class or interface in java.util.concurrent">cancel</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#get()" title="class or interface in java.util.concurrent">get</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#get(long, java.util.concurrent.TimeUnit)" title="class or interface in java.util.concurrent">get</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#isCancelled()" title="class or interface in java.util.concurrent">isCancelled</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#isDone()" title="class or interface in java.util.concurrent">isDone</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="AbstractListenableFuture()"><!-- --></A><H3>
-AbstractListenableFuture</H3>
-<PRE>
-public <B>AbstractListenableFuture</B>()</PRE>
-<DL>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="addListener(java.lang.Runnable, java.util.concurrent.Executor)"><!-- --></A><H3>
-addListener</H3>
-<PRE>
-public void <B>addListener</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</A>&nbsp;listener,
-                        <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executor.html?is-external=true" title="class or interface in java.util.concurrent">Executor</A>&nbsp;exec)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html#addListener(java.lang.Runnable, java.util.concurrent.Executor)">ListenableFuture</A></CODE></B></DD>
-<DD><p>Adds a listener and executor to the ListenableFuture.
- The listener will be <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executor.html?is-external=true#execute(java.lang.Runnable)" title="class or interface in java.util.concurrent">passed
- to the executor</A> for execution when the <code>Future</code>'s computation is
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#isDone()" title="class or interface in java.util.concurrent">complete</A>.
-
- <p>There is no guaranteed ordering of execution of listeners, they may get
- called in the order they were added and they may get called out of order,
- but any listener added through this method is guaranteed to be called once
- the computation is complete.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html#addListener(java.lang.Runnable, java.util.concurrent.Executor)">addListener</A></CODE> in interface <CODE><A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;<A HREF="../../../../../com/google/common/util/concurrent/AbstractListenableFuture.html" title="type parameter in AbstractListenableFuture">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>listener</CODE> - the listener to run when the computation is complete.<DD><CODE>exec</CODE> - the executor to run the listener in.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="done()"><!-- --></A><H3>
-done</H3>
-<PRE>
-protected void <B>done</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html#done()">done</A></CODE> in class <CODE><A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html" title="class in com.google.common.util.concurrent">AbstractFuture</A>&lt;<A HREF="../../../../../com/google/common/util/concurrent/AbstractListenableFuture.html" title="type parameter in AbstractListenableFuture">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/AbstractListenableFuture.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/AbstractIdleService.html" title="class in com.google.common.util.concurrent"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/AbstractService.html" title="class in com.google.common.util.concurrent"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/util/concurrent/AbstractListenableFuture.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="AbstractListenableFuture.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/util/concurrent/AbstractService.html b/javadoc/com/google/common/util/concurrent/AbstractService.html
deleted file mode 100644
index 566555e..0000000
--- a/javadoc/com/google/common/util/concurrent/AbstractService.html
+++ /dev/null
@@ -1,593 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-AbstractService (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="AbstractService (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/AbstractService.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/AbstractListenableFuture.html" title="class in com.google.common.util.concurrent"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/Callables.html" title="class in com.google.common.util.concurrent"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/util/concurrent/AbstractService.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="AbstractService.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.util.concurrent</FONT>
-<BR>
-Class AbstractService</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.util.concurrent.AbstractService</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../../com/google/common/base/Service.html" title="interface in com.google.common.base">Service</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public abstract class <B>AbstractService</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A><DT>implements <A HREF="../../../../../com/google/common/base/Service.html" title="interface in com.google.common.base">Service</A></DL>
-</PRE>
-
-<P>
-Base class for implementing services that can handle <A HREF="../../../../../com/google/common/util/concurrent/AbstractService.html#doStart()"><CODE>doStart()</CODE></A> and
- <A HREF="../../../../../com/google/common/util/concurrent/AbstractService.html#doStop()"><CODE>doStop()</CODE></A> requests, responding to them with <A HREF="../../../../../com/google/common/util/concurrent/AbstractService.html#notifyStarted()"><CODE>notifyStarted()</CODE></A>
- and <A HREF="../../../../../com/google/common/util/concurrent/AbstractService.html#notifyStopped()"><CODE>notifyStopped()</CODE></A> callbacks. Its subclasses must manage threads
- manually; consider <A HREF="../../../../../com/google/common/util/concurrent/AbstractExecutionThreadService.html" title="class in com.google.common.util.concurrent"><CODE>AbstractExecutionThreadService</CODE></A> if you need only a
- single execution thread.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2009.09.15 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Jesse Wilson</DD>
-</DL>
-<HR>
-
-<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-<A NAME="nested_class_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Nested Class Summary</B></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;<A NAME="nested_classes_inherited_from_class_com.google.common.base.Service"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Nested classes/interfaces inherited from interface com.google.common.base.<A HREF="../../../../../com/google/common/base/Service.html" title="interface in com.google.common.base">Service</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractService.html#AbstractService()">AbstractService</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected abstract &nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractService.html#doStart()">doStart</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This method is called by <A HREF="../../../../../com/google/common/util/concurrent/AbstractService.html#start()"><CODE>start()</CODE></A> to initiate service startup.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected abstract &nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractService.html#doStop()">doStop</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This method should be used to initiate service shutdown.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractService.html#isRunning()">isRunning</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if this service is <A HREF="../../../../../com/google/common/base/Service.State.html#RUNNING"><CODE>running</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected &nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractService.html#notifyFailed(java.lang.Throwable)">notifyFailed</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A>&nbsp;cause)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Invoke this method to transition the service to the
- <A HREF="../../../../../com/google/common/base/Service.State.html#FAILED"><CODE>Service.State.FAILED</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected &nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractService.html#notifyStarted()">notifyStarted</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Implementing classes should invoke this method once their service has
- started.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected &nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractService.html#notifyStopped()">notifyStopped</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Implementing classes should invoke this method once their service has
- stopped.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;<A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractService.html#start()">start</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If the service state is <A HREF="../../../../../com/google/common/base/Service.State.html#NEW"><CODE>Service.State.NEW</CODE></A>, this initiates service startup
- and returns immediately.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractService.html#startAndWait()">startAndWait</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Initiates service startup (if necessary), returning once the service has
- finished starting.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractService.html#state()">state</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the lifecycle state of the service.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;<A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractService.html#stop()">stop</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If the service is <A HREF="../../../../../com/google/common/base/Service.State.html#STARTING"><CODE>Service.State.STARTING</CODE></A> or <A HREF="../../../../../com/google/common/base/Service.State.html#RUNNING"><CODE>Service.State.RUNNING</CODE></A>, this
- initiates service shutdown and returns immediately.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractService.html#stopAndWait()">stopAndWait</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Initiates service shutdown (if necessary), returning once the service has
- finished stopping.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="AbstractService()"><!-- --></A><H3>
-AbstractService</H3>
-<PRE>
-public <B>AbstractService</B>()</PRE>
-<DL>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="doStart()"><!-- --></A><H3>
-doStart</H3>
-<PRE>
-protected abstract void <B>doStart</B>()</PRE>
-<DL>
-<DD>This method is called by <A HREF="../../../../../com/google/common/util/concurrent/AbstractService.html#start()"><CODE>start()</CODE></A> to initiate service startup. The
- invocation of this method should cause a call to <A HREF="../../../../../com/google/common/util/concurrent/AbstractService.html#notifyStarted()"><CODE>notifyStarted()</CODE></A>,
- either during this method's run, or after it has returned. If startup
- fails, the invocation should cause a call to <A HREF="../../../../../com/google/common/util/concurrent/AbstractService.html#notifyFailed(java.lang.Throwable)"><CODE>notifyFailed(Throwable)</CODE></A> instead.
-
- <p>This method should return promptly; prefer to do work on a different
- thread where it is convenient. It is invoked exactly once on service
- startup, even when <A HREF="../../../../../com/google/common/util/concurrent/AbstractService.html#start()"><CODE>start()</CODE></A> is called multiple times.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="doStop()"><!-- --></A><H3>
-doStop</H3>
-<PRE>
-protected abstract void <B>doStop</B>()</PRE>
-<DL>
-<DD>This method should be used to initiate service shutdown. The invocation
- of this method should cause a call to <A HREF="../../../../../com/google/common/util/concurrent/AbstractService.html#notifyStopped()"><CODE>notifyStopped()</CODE></A>, either
- during this method's run, or after it has returned. If shutdown fails, the
- invocation should cause a call to <A HREF="../../../../../com/google/common/util/concurrent/AbstractService.html#notifyFailed(java.lang.Throwable)"><CODE>notifyFailed(Throwable)</CODE></A> instead.
-
- <p>This method should return promptly; prefer to do work on a different
- thread where it is convenient. It is invoked exactly once on service
- shutdown, even when <A HREF="../../../../../com/google/common/util/concurrent/AbstractService.html#stop()"><CODE>stop()</CODE></A> is called multiple times.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="start()"><!-- --></A><H3>
-start</H3>
-<PRE>
-public final <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;<A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A>&gt; <B>start</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/google/common/base/Service.html#start()">Service</A></CODE></B></DD>
-<DD>If the service state is <A HREF="../../../../../com/google/common/base/Service.State.html#NEW"><CODE>Service.State.NEW</CODE></A>, this initiates service startup
- and returns immediately. If the service has already been started, this
- method returns immediately without taking action. A stopped service may not
- be restarted.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/google/common/base/Service.html#start()">start</A></CODE> in interface <CODE><A HREF="../../../../../com/google/common/base/Service.html" title="interface in com.google.common.base">Service</A></CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a future for the startup result, regardless of whether this call
-     initiated startup. Calling <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#get()" title="class or interface in java.util.concurrent"><CODE>Future.get()</CODE></A> will block until the
-     service has finished starting, and returns one of <A HREF="../../../../../com/google/common/base/Service.State.html#RUNNING"><CODE>Service.State.RUNNING</CODE></A>, <A HREF="../../../../../com/google/common/base/Service.State.html#STOPPING"><CODE>Service.State.STOPPING</CODE></A> or <A HREF="../../../../../com/google/common/base/Service.State.html#TERMINATED"><CODE>Service.State.TERMINATED</CODE></A>. If
-     the service fails to start, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#get()" title="class or interface in java.util.concurrent"><CODE>Future.get()</CODE></A> will throw an <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutionException.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ExecutionException</CODE></A>, and the service's state will be <A HREF="../../../../../com/google/common/base/Service.State.html#FAILED"><CODE>Service.State.FAILED</CODE></A>. If it has already finished starting, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#get()" title="class or interface in java.util.concurrent"><CODE>Future.get()</CODE></A>
-     returns immediately. Cancelling the returned future is unsupported and
-     always returns <code>false</code>.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="stop()"><!-- --></A><H3>
-stop</H3>
-<PRE>
-public final <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;<A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A>&gt; <B>stop</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/google/common/base/Service.html#stop()">Service</A></CODE></B></DD>
-<DD>If the service is <A HREF="../../../../../com/google/common/base/Service.State.html#STARTING"><CODE>Service.State.STARTING</CODE></A> or <A HREF="../../../../../com/google/common/base/Service.State.html#RUNNING"><CODE>Service.State.RUNNING</CODE></A>, this
- initiates service shutdown and returns immediately. If this is <A HREF="../../../../../com/google/common/base/Service.State.html#NEW"><CODE>Service.State.NEW</CODE></A>, it is <A HREF="../../../../../com/google/common/base/Service.State.html#TERMINATED"><CODE>terminated</CODE></A> without having been
- started nor stopped.  If the service has already been stopped, this
- method returns immediately without taking action.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/google/common/base/Service.html#stop()">stop</A></CODE> in interface <CODE><A HREF="../../../../../com/google/common/base/Service.html" title="interface in com.google.common.base">Service</A></CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a future for the shutdown result, regardless of whether this call
-     initiated shutdown. Calling <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#get()" title="class or interface in java.util.concurrent"><CODE>Future.get()</CODE></A> will block until the
-     service has finished shutting down, and either returns <A HREF="../../../../../com/google/common/base/Service.State.html#TERMINATED"><CODE>Service.State.TERMINATED</CODE></A> or throws an <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutionException.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ExecutionException</CODE></A>. If it has
-     already finished stopping, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#get()" title="class or interface in java.util.concurrent"><CODE>Future.get()</CODE></A> returns immediately.
-     Cancelling this future is unsupported and always returns <code>false</code>.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="startAndWait()"><!-- --></A><H3>
-startAndWait</H3>
-<PRE>
-public <A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A> <B>startAndWait</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/google/common/base/Service.html#startAndWait()">Service</A></CODE></B></DD>
-<DD>Initiates service startup (if necessary), returning once the service has
- finished starting. Unlike calling <code>start().get()</code>, this method throws
- no checked exceptions.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/google/common/base/Service.html#startAndWait()">startAndWait</A></CODE> in interface <CODE><A HREF="../../../../../com/google/common/base/Service.html" title="interface in com.google.common.base">Service</A></CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>the state of the service when startup finished.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="stopAndWait()"><!-- --></A><H3>
-stopAndWait</H3>
-<PRE>
-public <A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A> <B>stopAndWait</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/google/common/base/Service.html#stopAndWait()">Service</A></CODE></B></DD>
-<DD>Initiates service shutdown (if necessary), returning once the service has
- finished stopping. If this is <A HREF="../../../../../com/google/common/base/Service.State.html#STARTING"><CODE>Service.State.STARTING</CODE></A>, startup will be
- cancelled. If this is <A HREF="../../../../../com/google/common/base/Service.State.html#NEW"><CODE>Service.State.NEW</CODE></A>, it is <A HREF="../../../../../com/google/common/base/Service.State.html#TERMINATED"><CODE>terminated</CODE></A> without having been started nor stopped. Unlike calling <code>stop().get()</code>, this method throws no checked exceptions.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/google/common/base/Service.html#stopAndWait()">stopAndWait</A></CODE> in interface <CODE><A HREF="../../../../../com/google/common/base/Service.html" title="interface in com.google.common.base">Service</A></CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>the state of the service when shutdown finished.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="notifyStarted()"><!-- --></A><H3>
-notifyStarted</H3>
-<PRE>
-protected final void <B>notifyStarted</B>()</PRE>
-<DL>
-<DD>Implementing classes should invoke this method once their service has
- started. It will cause the service to transition from <A HREF="../../../../../com/google/common/base/Service.State.html#STARTING"><CODE>Service.State.STARTING</CODE></A> to <A HREF="../../../../../com/google/common/base/Service.State.html#RUNNING"><CODE>Service.State.RUNNING</CODE></A>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalStateException.html?is-external=true" title="class or interface in java.lang">IllegalStateException</A></CODE> - if the service is not
-     <A HREF="../../../../../com/google/common/base/Service.State.html#STARTING"><CODE>Service.State.STARTING</CODE></A>.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="notifyStopped()"><!-- --></A><H3>
-notifyStopped</H3>
-<PRE>
-protected final void <B>notifyStopped</B>()</PRE>
-<DL>
-<DD>Implementing classes should invoke this method once their service has
- stopped. It will cause the service to transition from <A HREF="../../../../../com/google/common/base/Service.State.html#STOPPING"><CODE>Service.State.STOPPING</CODE></A> to <A HREF="../../../../../com/google/common/base/Service.State.html#TERMINATED"><CODE>Service.State.TERMINATED</CODE></A>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalStateException.html?is-external=true" title="class or interface in java.lang">IllegalStateException</A></CODE> - if the service is neither <A HREF="../../../../../com/google/common/base/Service.State.html#STOPPING"><CODE>Service.State.STOPPING</CODE></A> nor <A HREF="../../../../../com/google/common/base/Service.State.html#RUNNING"><CODE>Service.State.RUNNING</CODE></A>.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="notifyFailed(java.lang.Throwable)"><!-- --></A><H3>
-notifyFailed</H3>
-<PRE>
-protected final void <B>notifyFailed</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A>&nbsp;cause)</PRE>
-<DL>
-<DD>Invoke this method to transition the service to the
- <A HREF="../../../../../com/google/common/base/Service.State.html#FAILED"><CODE>Service.State.FAILED</CODE></A>. The service will <b>not be stopped</b> if it
- is running. Invoke this method when a service has failed critically or
- otherwise cannot be started nor stopped.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="isRunning()"><!-- --></A><H3>
-isRunning</H3>
-<PRE>
-public final boolean <B>isRunning</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/google/common/base/Service.html#isRunning()">Service</A></CODE></B></DD>
-<DD>Returns <code>true</code> if this service is <A HREF="../../../../../com/google/common/base/Service.State.html#RUNNING"><CODE>running</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/google/common/base/Service.html#isRunning()">isRunning</A></CODE> in interface <CODE><A HREF="../../../../../com/google/common/base/Service.html" title="interface in com.google.common.base">Service</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="state()"><!-- --></A><H3>
-state</H3>
-<PRE>
-public final <A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A> <B>state</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/google/common/base/Service.html#state()">Service</A></CODE></B></DD>
-<DD>Returns the lifecycle state of the service.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/google/common/base/Service.html#state()">state</A></CODE> in interface <CODE><A HREF="../../../../../com/google/common/base/Service.html" title="interface in com.google.common.base">Service</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/AbstractService.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/AbstractListenableFuture.html" title="class in com.google.common.util.concurrent"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/Callables.html" title="class in com.google.common.util.concurrent"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/util/concurrent/AbstractService.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="AbstractService.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/util/concurrent/Callables.html b/javadoc/com/google/common/util/concurrent/Callables.html
deleted file mode 100644
index b3c9e4b..0000000
--- a/javadoc/com/google/common/util/concurrent/Callables.html
+++ /dev/null
@@ -1,241 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Callables (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Callables (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Callables.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/AbstractService.html" title="class in com.google.common.util.concurrent"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/CheckedFuture.html" title="interface in com.google.common.util.concurrent"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/util/concurrent/Callables.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Callables.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.util.concurrent</FONT>
-<BR>
-Class Callables</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.util.concurrent.Callables</B>
-</PRE>
-<HR>
-<DL>
-<DT><PRE>public final class <B>Callables</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
-</PRE>
-
-<P>
-Static utility methods pertaining to the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>Callable</CODE></A> interface.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2009.09.15 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Isaac Shum</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/Callables.html#returning(T)">returning</A></B>(T&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <code>Callable</code> which immediately returns a preset value each
- time it is called.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="returning(java.lang.Object)"><!-- --></A><A NAME="returning(T)"><!-- --></A><H3>
-returning</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</A>&lt;T&gt; <B>returning</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                                        T&nbsp;value)</PRE>
-<DL>
-<DD>Creates a <code>Callable</code> which immediately returns a preset value each
- time it is called.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Callables.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/AbstractService.html" title="class in com.google.common.util.concurrent"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/CheckedFuture.html" title="interface in com.google.common.util.concurrent"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/util/concurrent/Callables.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Callables.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/util/concurrent/CheckedFuture.html b/javadoc/com/google/common/util/concurrent/CheckedFuture.html
deleted file mode 100644
index 331f23b..0000000
--- a/javadoc/com/google/common/util/concurrent/CheckedFuture.html
+++ /dev/null
@@ -1,306 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-CheckedFuture (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="CheckedFuture (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/CheckedFuture.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/Callables.html" title="class in com.google.common.util.concurrent"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/DaemonThreadFactory.html" title="class in com.google.common.util.concurrent"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/util/concurrent/CheckedFuture.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="CheckedFuture.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.util.concurrent</FONT>
-<BR>
-Interface CheckedFuture&lt;V,E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</A>&gt;</H2>
-<DL>
-<DT><B>All Superinterfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;V&gt;, <A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;V&gt;</DD>
-</DL>
-<DL>
-<DT><B>All Known Implementing Classes:</B> <DD><A HREF="../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html" title="class in com.google.common.util.concurrent">AbstractCheckedFuture</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public interface <B>CheckedFuture&lt;V,E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</A>&gt;</B><DT>extends <A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;V&gt;</DL>
-</PRE>
-
-<P>
-A <code>CheckedFuture</code> is an extension of <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>Future</CODE></A> that includes
- versions of the <code>get</code> methods that can throw a checked exception and
- allows listeners to be attached to the future.  This makes it easier to
- create a future that executes logic which can throw an exception.
- 
- <p>Implementations of this interface must adapt the exceptions thrown by
- <code>Future#get()</code>: <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/CancellationException.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>CancellationException</CODE></A>,
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutionException.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ExecutionException</CODE></A> and <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang"><CODE>InterruptedException</CODE></A> into the type
- specified by the <code>E</code> type parameter.
- 
- <p>This interface also extends the ListenableFuture interface to allow
- listeners to be added. This allows the future to be used as a normal
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>Future</CODE></A> or as an asynchronous callback mechanism as needed. This
- allows multiple callbacks to be registered for a particular task, and the
- future will guarantee execution of all listeners when the task completes.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2009.09.15 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Sven Mawson</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/CheckedFuture.html" title="type parameter in CheckedFuture">V</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/CheckedFuture.html#checkedGet()">checkedGet</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exception checking version of <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#get()" title="class or interface in java.util.concurrent"><CODE>Future.get()</CODE></A> that will translate
- <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang"><CODE>InterruptedException</CODE></A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/CancellationException.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>CancellationException</CODE></A> and
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutionException.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ExecutionException</CODE></A> into application-specific exceptions.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/CheckedFuture.html" title="type parameter in CheckedFuture">V</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/CheckedFuture.html#checkedGet(long, java.util.concurrent.TimeUnit)">checkedGet</A></B>(long&nbsp;timeout,
-           <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</A>&nbsp;unit)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exception checking version of <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#get(long, java.util.concurrent.TimeUnit)" title="class or interface in java.util.concurrent"><CODE>Future.get(long, TimeUnit)</CODE></A> that will
- translate <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang"><CODE>InterruptedException</CODE></A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/CancellationException.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>CancellationException</CODE></A> and
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutionException.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ExecutionException</CODE></A> into application-specific exceptions.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.util.concurrent.ListenableFuture"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface com.google.common.util.concurrent.<A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html#addListener(java.lang.Runnable, java.util.concurrent.Executor)">addListener</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.util.concurrent.Future"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface java.util.concurrent.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#cancel(boolean)" title="class or interface in java.util.concurrent">cancel</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#get()" title="class or interface in java.util.concurrent">get</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#get(long, java.util.concurrent.TimeUnit)" title="class or interface in java.util.concurrent">get</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#isCancelled()" title="class or interface in java.util.concurrent">isCancelled</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#isDone()" title="class or interface in java.util.concurrent">isDone</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="checkedGet()"><!-- --></A><H3>
-checkedGet</H3>
-<PRE>
-<A HREF="../../../../../com/google/common/util/concurrent/CheckedFuture.html" title="type parameter in CheckedFuture">V</A> <B>checkedGet</B>()
-             throws <A HREF="../../../../../com/google/common/util/concurrent/CheckedFuture.html" title="type parameter in CheckedFuture">E</A> extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</A></PRE>
-<DL>
-<DD>Exception checking version of <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#get()" title="class or interface in java.util.concurrent"><CODE>Future.get()</CODE></A> that will translate
- <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang"><CODE>InterruptedException</CODE></A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/CancellationException.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>CancellationException</CODE></A> and
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutionException.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ExecutionException</CODE></A> into application-specific exceptions.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>the result of executing the future.
-<DT><B>Throws:</B>
-<DD><CODE>E</CODE> - on interruption, cancellation or execution exceptions.
-<DD><CODE><A HREF="../../../../../com/google/common/util/concurrent/CheckedFuture.html" title="type parameter in CheckedFuture">E</A> extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</A></CODE></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="checkedGet(long, java.util.concurrent.TimeUnit)"><!-- --></A><H3>
-checkedGet</H3>
-<PRE>
-<A HREF="../../../../../com/google/common/util/concurrent/CheckedFuture.html" title="type parameter in CheckedFuture">V</A> <B>checkedGet</B>(long&nbsp;timeout,
-             <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</A>&nbsp;unit)
-             throws <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeoutException.html?is-external=true" title="class or interface in java.util.concurrent">TimeoutException</A>,
-                    <A HREF="../../../../../com/google/common/util/concurrent/CheckedFuture.html" title="type parameter in CheckedFuture">E</A> extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</A></PRE>
-<DL>
-<DD>Exception checking version of <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#get(long, java.util.concurrent.TimeUnit)" title="class or interface in java.util.concurrent"><CODE>Future.get(long, TimeUnit)</CODE></A> that will
- translate <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang"><CODE>InterruptedException</CODE></A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/CancellationException.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>CancellationException</CODE></A> and
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutionException.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ExecutionException</CODE></A> into application-specific exceptions.  On
- timeout this method throws a normal <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeoutException.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>TimeoutException</CODE></A>.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>the result of executing the future.
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeoutException.html?is-external=true" title="class or interface in java.util.concurrent">TimeoutException</A></CODE> - if retrieving the result timed out.
-<DD><CODE>E</CODE> - on interruption, cancellation or execution exceptions.
-<DD><CODE><A HREF="../../../../../com/google/common/util/concurrent/CheckedFuture.html" title="type parameter in CheckedFuture">E</A> extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</A></CODE></DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/CheckedFuture.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/Callables.html" title="class in com.google.common.util.concurrent"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/DaemonThreadFactory.html" title="class in com.google.common.util.concurrent"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/util/concurrent/CheckedFuture.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="CheckedFuture.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/util/concurrent/DaemonThreadFactory.html b/javadoc/com/google/common/util/concurrent/DaemonThreadFactory.html
deleted file mode 100644
index 9b60de7..0000000
--- a/javadoc/com/google/common/util/concurrent/DaemonThreadFactory.html
+++ /dev/null
@@ -1,268 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-DaemonThreadFactory (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="DaemonThreadFactory (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/DaemonThreadFactory.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/CheckedFuture.html" title="interface in com.google.common.util.concurrent"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/ExecutionList.html" title="class in com.google.common.util.concurrent"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/util/concurrent/DaemonThreadFactory.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="DaemonThreadFactory.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.util.concurrent</FONT>
-<BR>
-Class DaemonThreadFactory</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.util.concurrent.DaemonThreadFactory</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadFactory.html?is-external=true" title="class or interface in java.util.concurrent">ThreadFactory</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public class <B>DaemonThreadFactory</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A><DT>implements <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadFactory.html?is-external=true" title="class or interface in java.util.concurrent">ThreadFactory</A></DL>
-</PRE>
-
-<P>
-Wraps another <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadFactory.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ThreadFactory</CODE></A>, making all new threads daemon threads.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2009.09.15 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Charles Fry, Harendra Verma</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/DaemonThreadFactory.html#DaemonThreadFactory(java.util.concurrent.ThreadFactory)">DaemonThreadFactory</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadFactory.html?is-external=true" title="class or interface in java.util.concurrent">ThreadFactory</A>&nbsp;factory)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Thread.html?is-external=true" title="class or interface in java.lang">Thread</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/DaemonThreadFactory.html#newThread(java.lang.Runnable)">newThread</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</A>&nbsp;r)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="DaemonThreadFactory(java.util.concurrent.ThreadFactory)"><!-- --></A><H3>
-DaemonThreadFactory</H3>
-<PRE>
-public <B>DaemonThreadFactory</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadFactory.html?is-external=true" title="class or interface in java.util.concurrent">ThreadFactory</A>&nbsp;factory)</PRE>
-<DL>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="newThread(java.lang.Runnable)"><!-- --></A><H3>
-newThread</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Thread.html?is-external=true" title="class or interface in java.lang">Thread</A> <B>newThread</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</A>&nbsp;r)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadFactory.html?is-external=true#newThread(java.lang.Runnable)" title="class or interface in java.util.concurrent">newThread</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadFactory.html?is-external=true" title="class or interface in java.util.concurrent">ThreadFactory</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/DaemonThreadFactory.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/CheckedFuture.html" title="interface in com.google.common.util.concurrent"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/ExecutionList.html" title="class in com.google.common.util.concurrent"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/util/concurrent/DaemonThreadFactory.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="DaemonThreadFactory.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/util/concurrent/ExecutionList.html b/javadoc/com/google/common/util/concurrent/ExecutionList.html
deleted file mode 100644
index 39f71be..0000000
--- a/javadoc/com/google/common/util/concurrent/ExecutionList.html
+++ /dev/null
@@ -1,304 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-ExecutionList (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="ExecutionList (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ExecutionList.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/DaemonThreadFactory.html" title="class in com.google.common.util.concurrent"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/Executors.html" title="class in com.google.common.util.concurrent"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/util/concurrent/ExecutionList.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ExecutionList.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.util.concurrent</FONT>
-<BR>
-Class ExecutionList</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.util.concurrent.ExecutionList</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public class <B>ExecutionList</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A><DT>implements <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</A></DL>
-</PRE>
-
-<P>
-<p>A list of (<code>Runnable</code>, <code>Executor</code>) pairs that guarantees
- that every <code>Runnable</code> that is added using the add method will be
- executed in its associated <code>Executor</code> after <A HREF="../../../../../com/google/common/util/concurrent/ExecutionList.html#run()"><CODE>run()</CODE></A> is called.
- <code>Runnable</code>s added after <code>run</code> is called are still guaranteed to
- execute.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2009.09.15 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Nishant Thakkar, Sven Mawson</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/ExecutionList.html#ExecutionList()">ExecutionList</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/ExecutionList.html#add(java.lang.Runnable, java.util.concurrent.Executor)">add</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</A>&nbsp;runnable,
-    <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executor.html?is-external=true" title="class or interface in java.util.concurrent">Executor</A>&nbsp;executor)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Add the runnable/executor pair to the list of pairs to execute.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/ExecutionList.html#run()">run</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Runs this execution list, executing all pairs in the order they were
- added.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="ExecutionList()"><!-- --></A><H3>
-ExecutionList</H3>
-<PRE>
-public <B>ExecutionList</B>()</PRE>
-<DL>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="add(java.lang.Runnable, java.util.concurrent.Executor)"><!-- --></A><H3>
-add</H3>
-<PRE>
-public void <B>add</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</A>&nbsp;runnable,
-                <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executor.html?is-external=true" title="class or interface in java.util.concurrent">Executor</A>&nbsp;executor)</PRE>
-<DL>
-<DD>Add the runnable/executor pair to the list of pairs to execute.  Executes
- the pair immediately if we've already started execution.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="run()"><!-- --></A><H3>
-run</H3>
-<PRE>
-public void <B>run</B>()</PRE>
-<DL>
-<DD>Runs this execution list, executing all pairs in the order they were
- added.  Pairs added after this method has started executing the list will
- be executed immediately.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Runnable.html?is-external=true#run()" title="class or interface in java.lang">run</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ExecutionList.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/DaemonThreadFactory.html" title="class in com.google.common.util.concurrent"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/Executors.html" title="class in com.google.common.util.concurrent"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/util/concurrent/ExecutionList.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ExecutionList.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/util/concurrent/Executors.html b/javadoc/com/google/common/util/concurrent/Executors.html
deleted file mode 100644
index a7fe06a..0000000
--- a/javadoc/com/google/common/util/concurrent/Executors.html
+++ /dev/null
@@ -1,505 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Executors (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Executors (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Executors.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/ExecutionList.html" title="class in com.google.common.util.concurrent"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/FakeTimeLimiter.html" title="class in com.google.common.util.concurrent"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/util/concurrent/Executors.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Executors.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.util.concurrent</FONT>
-<BR>
-Class Executors</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.util.concurrent.Executors</B>
-</PRE>
-<HR>
-<DL>
-<DT><PRE>public class <B>Executors</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
-</PRE>
-
-<P>
-Factory and utility methods for <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executor.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>Executor</CODE></A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ExecutorService</CODE></A>, and <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadFactory.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ThreadFactory</CODE></A>.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2009.09.15 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Eric Fellheimer, Kyle Littlefield, Justin Mahoney</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/Executors.html#Executors()">Executors</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/Executors.html#addDelayedShutdownHook(java.util.concurrent.ExecutorService, long, java.util.concurrent.TimeUnit)">addDelayedShutdownHook</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</A>&nbsp;service,
-                       long&nbsp;terminationTimeout,
-                       <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</A>&nbsp;timeUnit)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Add a shutdown hook to wait for thread completion in the given
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>service</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadFactory.html?is-external=true" title="class or interface in java.util.concurrent">ThreadFactory</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/Executors.html#daemonThreadFactory()">daemonThreadFactory</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadFactory.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ThreadFactory</CODE></A> which creates daemon threads.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadFactory.html?is-external=true" title="class or interface in java.util.concurrent">ThreadFactory</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/Executors.html#daemonThreadFactory(java.util.concurrent.ThreadFactory)">daemonThreadFactory</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadFactory.html?is-external=true" title="class or interface in java.util.concurrent">ThreadFactory</A>&nbsp;factory)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Wraps another <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadFactory.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ThreadFactory</CODE></A>, making all new threads daemon threads.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/Executors.html#getExitingExecutorService(java.util.concurrent.ThreadPoolExecutor)">getExitingExecutorService</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadPoolExecutor.html?is-external=true" title="class or interface in java.util.concurrent">ThreadPoolExecutor</A>&nbsp;executor)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts the given ThreadPoolExecutor into an ExecutorService that exits
- when the application is complete.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/Executors.html#getExitingExecutorService(java.util.concurrent.ThreadPoolExecutor, long, java.util.concurrent.TimeUnit)">getExitingExecutorService</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadPoolExecutor.html?is-external=true" title="class or interface in java.util.concurrent">ThreadPoolExecutor</A>&nbsp;executor,
-                          long&nbsp;terminationTimeout,
-                          <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</A>&nbsp;timeUnit)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts the given ThreadPoolExecutor into an ExecutorService that exits
- when the application is complete.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ScheduledExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ScheduledExecutorService</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/Executors.html#getExitingScheduledExecutorService(java.util.concurrent.ScheduledThreadPoolExecutor)">getExitingScheduledExecutorService</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ScheduledThreadPoolExecutor.html?is-external=true" title="class or interface in java.util.concurrent">ScheduledThreadPoolExecutor</A>&nbsp;executor)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts the given ThreadPoolExecutor into a ScheduledExecutorService that
- exits when the application is complete.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ScheduledExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ScheduledExecutorService</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/Executors.html#getExitingScheduledExecutorService(java.util.concurrent.ScheduledThreadPoolExecutor, long, java.util.concurrent.TimeUnit)">getExitingScheduledExecutorService</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ScheduledThreadPoolExecutor.html?is-external=true" title="class or interface in java.util.concurrent">ScheduledThreadPoolExecutor</A>&nbsp;executor,
-                                   long&nbsp;terminationTimeout,
-                                   <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</A>&nbsp;timeUnit)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts the given ScheduledThreadPoolExecutor into a
- ScheduledExecutorService that exits when the application is complete.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/Executors.html#sameThreadExecutor()">sameThreadExecutor</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an executor service that runs each task in the thread
- that invokes <code>execute/submit</code>, as in <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadPoolExecutor.CallerRunsPolicy.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ThreadPoolExecutor.CallerRunsPolicy</CODE></A>  This
- applies both to individually submitted tasks and to collections of tasks
- submitted via <code>invokeAll</code> or <code>invokeAny</code>.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="Executors()"><!-- --></A><H3>
-Executors</H3>
-<PRE>
-public <B>Executors</B>()</PRE>
-<DL>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="getExitingExecutorService(java.util.concurrent.ThreadPoolExecutor, long, java.util.concurrent.TimeUnit)"><!-- --></A><H3>
-getExitingExecutorService</H3>
-<PRE>
-public static <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</A> <B>getExitingExecutorService</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadPoolExecutor.html?is-external=true" title="class or interface in java.util.concurrent">ThreadPoolExecutor</A>&nbsp;executor,
-                                                        long&nbsp;terminationTimeout,
-                                                        <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</A>&nbsp;timeUnit)</PRE>
-<DL>
-<DD>Converts the given ThreadPoolExecutor into an ExecutorService that exits
- when the application is complete.  It does so by using daemon threads and
- adding a shutdown hook to wait for their completion.
-
- <p>This is mainly for fixed thread pools.
- See <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executors.html?is-external=true#newFixedThreadPool(int)" title="class or interface in java.util.concurrent"><CODE>Executors.newFixedThreadPool(int)</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>executor</CODE> - the executor to modify to make sure it exits when the
-        application is finished<DD><CODE>terminationTimeout</CODE> - how long to wait for the executor to
-        finish before terminating the JVM<DD><CODE>timeUnit</CODE> - unit of time for the time parameter
-<DT><B>Returns:</B><DD>an unmodifiable version of the input which will not hang the JVM</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getExitingScheduledExecutorService(java.util.concurrent.ScheduledThreadPoolExecutor, long, java.util.concurrent.TimeUnit)"><!-- --></A><H3>
-getExitingScheduledExecutorService</H3>
-<PRE>
-public static <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ScheduledExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ScheduledExecutorService</A> <B>getExitingScheduledExecutorService</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ScheduledThreadPoolExecutor.html?is-external=true" title="class or interface in java.util.concurrent">ScheduledThreadPoolExecutor</A>&nbsp;executor,
-                                                                          long&nbsp;terminationTimeout,
-                                                                          <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</A>&nbsp;timeUnit)</PRE>
-<DL>
-<DD>Converts the given ScheduledThreadPoolExecutor into a
- ScheduledExecutorService that exits when the application is complete.  It
- does so by using daemon threads and adding a shutdown hook to wait for
- their completion.
-
- <p>This is mainly for fixed thread pools.
- See <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executors.html?is-external=true#newScheduledThreadPool(int)" title="class or interface in java.util.concurrent"><CODE>Executors.newScheduledThreadPool(int)</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>executor</CODE> - the executor to modify to make sure it exits when the
-        application is finished<DD><CODE>terminationTimeout</CODE> - how long to wait for the executor to
-        finish before terminating the JVM<DD><CODE>timeUnit</CODE> - unit of time for the time parameter
-<DT><B>Returns:</B><DD>an unmodifiable version of the input which will not hang the JVM</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="addDelayedShutdownHook(java.util.concurrent.ExecutorService, long, java.util.concurrent.TimeUnit)"><!-- --></A><H3>
-addDelayedShutdownHook</H3>
-<PRE>
-public static void <B>addDelayedShutdownHook</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</A>&nbsp;service,
-                                          long&nbsp;terminationTimeout,
-                                          <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</A>&nbsp;timeUnit)</PRE>
-<DL>
-<DD>Add a shutdown hook to wait for thread completion in the given
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>service</CODE></A>.  This is useful if the given service uses
- daemon threads, and we want to keep the JVM from exiting immediately on
- shutdown, instead giving these daemon threads a chance to terminate
- normally.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>service</CODE> - ExecutorService which uses daemon threads<DD><CODE>terminationTimeout</CODE> - how long to wait for the executor to finish
-        before terminating the JVM<DD><CODE>timeUnit</CODE> - unit of time for the time parameter</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getExitingExecutorService(java.util.concurrent.ThreadPoolExecutor)"><!-- --></A><H3>
-getExitingExecutorService</H3>
-<PRE>
-public static <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</A> <B>getExitingExecutorService</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadPoolExecutor.html?is-external=true" title="class or interface in java.util.concurrent">ThreadPoolExecutor</A>&nbsp;executor)</PRE>
-<DL>
-<DD>Converts the given ThreadPoolExecutor into an ExecutorService that exits
- when the application is complete.  It does so by using daemon threads and
- adding a shutdown hook to wait for their completion.
-
- <p>This method waits 120 seconds before continuing with JVM termination,
- even if the executor has not finished its work.
-
- <p>This is mainly for fixed thread pools.
- See <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executors.html?is-external=true#newFixedThreadPool(int)" title="class or interface in java.util.concurrent"><CODE>Executors.newFixedThreadPool(int)</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>executor</CODE> - the executor to modify to make sure it exits when the
-        application is finished
-<DT><B>Returns:</B><DD>an unmodifiable version of the input which will not hang the JVM</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getExitingScheduledExecutorService(java.util.concurrent.ScheduledThreadPoolExecutor)"><!-- --></A><H3>
-getExitingScheduledExecutorService</H3>
-<PRE>
-public static <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ScheduledExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ScheduledExecutorService</A> <B>getExitingScheduledExecutorService</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ScheduledThreadPoolExecutor.html?is-external=true" title="class or interface in java.util.concurrent">ScheduledThreadPoolExecutor</A>&nbsp;executor)</PRE>
-<DL>
-<DD>Converts the given ThreadPoolExecutor into a ScheduledExecutorService that
- exits when the application is complete.  It does so by using daemon threads
- and adding a shutdown hook to wait for their completion.
-
- <p>This method waits 120 seconds before continuing with JVM termination,
- even if the executor has not finished its work.
-
- <p>This is mainly for fixed thread pools.
- See <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executors.html?is-external=true#newScheduledThreadPool(int)" title="class or interface in java.util.concurrent"><CODE>Executors.newScheduledThreadPool(int)</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>executor</CODE> - the executor to modify to make sure it exits when the
-        application is finished
-<DT><B>Returns:</B><DD>an unmodifiable version of the input which will not hang the JVM</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="daemonThreadFactory()"><!-- --></A><H3>
-daemonThreadFactory</H3>
-<PRE>
-public static <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadFactory.html?is-external=true" title="class or interface in java.util.concurrent">ThreadFactory</A> <B>daemonThreadFactory</B>()</PRE>
-<DL>
-<DD>Returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadFactory.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ThreadFactory</CODE></A> which creates daemon threads. This is
- implemented by wrapping <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executors.html?is-external=true#defaultThreadFactory()" title="class or interface in java.util.concurrent"><CODE>Executors.defaultThreadFactory()</CODE></A>, marking all new
- threads as daemon threads
-<P>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadFactory.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ThreadFactory</CODE></A> which creates daemon threads</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="daemonThreadFactory(java.util.concurrent.ThreadFactory)"><!-- --></A><H3>
-daemonThreadFactory</H3>
-<PRE>
-public static <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadFactory.html?is-external=true" title="class or interface in java.util.concurrent">ThreadFactory</A> <B>daemonThreadFactory</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadFactory.html?is-external=true" title="class or interface in java.util.concurrent">ThreadFactory</A>&nbsp;factory)</PRE>
-<DL>
-<DD>Wraps another <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadFactory.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ThreadFactory</CODE></A>, making all new threads daemon threads.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>factory</CODE> - the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadFactory.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ThreadFactory</CODE></A> used to generate new threads
-<DT><B>Returns:</B><DD>a new <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadFactory.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ThreadFactory</CODE></A> backed by <code>factory</code> whose created
-         threads are all daemon threads</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="sameThreadExecutor()"><!-- --></A><H3>
-sameThreadExecutor</H3>
-<PRE>
-public static <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</A> <B>sameThreadExecutor</B>()</PRE>
-<DL>
-<DD>Creates an executor service that runs each task in the thread
- that invokes <code>execute/submit</code>, as in <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadPoolExecutor.CallerRunsPolicy.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ThreadPoolExecutor.CallerRunsPolicy</CODE></A>  This
- applies both to individually submitted tasks and to collections of tasks
- submitted via <code>invokeAll</code> or <code>invokeAny</code>.  In the latter case,
- tasks will run serially on the calling thread.  Tasks are run to
- completion before a <code>Future</code> is returned to the caller (unless the
- executor has been shutdown).
-
- <p>Although all tasks are immediately executed in the thread that
- submitted the task, this <code>ExecutorService</code> imposes a small
- locking overhead on each task submission in order to implement shutdown
- and termination behavior.
-
- <p>The implementation deviates from the <code>ExecutorService</code>
- specification with regards to the <code>shutdownNow</code> method.  First,
- "best-effort" with regards to canceling running tasks is implemented
- as "no-effort".  No interrupts or other attempts are made to stop
- threads executing tasks.  Second, the returned list will always be empty,
- as any submitted task is considered to have started execution.
- This applies also to tasks given to <code>invokeAll</code> or <code>invokeAny</code>
- which are pending serial execution, even the subset of the tasks that
- have not yet started execution.  It is unclear from the
- <code>ExecutorService</code> specification if these should be included, and
- it's much easier to implement the interpretation that they not be.
- Finally, a call to <code>shutdown</code> or <code>shutdownNow</code> may result
- in concurrent calls to <code>invokeAll/invokeAny</code> throwing
- RejectedExecutionException, although a subset of the tasks may already
- have been executed.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Executors.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/ExecutionList.html" title="class in com.google.common.util.concurrent"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/FakeTimeLimiter.html" title="class in com.google.common.util.concurrent"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/util/concurrent/Executors.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Executors.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/util/concurrent/FakeTimeLimiter.html b/javadoc/com/google/common/util/concurrent/FakeTimeLimiter.html
deleted file mode 100644
index de29994..0000000
--- a/javadoc/com/google/common/util/concurrent/FakeTimeLimiter.html
+++ /dev/null
@@ -1,366 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-FakeTimeLimiter (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="FakeTimeLimiter (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/FakeTimeLimiter.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/Executors.html" title="class in com.google.common.util.concurrent"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/ForwardingFuture.html" title="class in com.google.common.util.concurrent"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/util/concurrent/FakeTimeLimiter.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="FakeTimeLimiter.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.util.concurrent</FONT>
-<BR>
-Class FakeTimeLimiter</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.util.concurrent.FakeTimeLimiter</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../../com/google/common/util/concurrent/TimeLimiter.html" title="interface in com.google.common.util.concurrent">TimeLimiter</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public class <B>FakeTimeLimiter</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A><DT>implements <A HREF="../../../../../com/google/common/util/concurrent/TimeLimiter.html" title="interface in com.google.common.util.concurrent">TimeLimiter</A></DL>
-</PRE>
-
-<P>
-A TimeLimiter implementation which actually does not attempt to limit time
- at all.  This may be desirable to use in some unit tests.  More importantly,
- attempting to debug a call which is time-limited would be extremely annoying,
- so this gives you a time-limiter you can easily swap in for your real
- time-limiter while you're debugging.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2009.09.15 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Kevin Bourrillion</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/FakeTimeLimiter.html#FakeTimeLimiter()">FakeTimeLimiter</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; T</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/FakeTimeLimiter.html#callWithTimeout(java.util.concurrent.Callable, long, java.util.concurrent.TimeUnit, boolean)">callWithTimeout</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</A>&lt;T&gt;&nbsp;callable,
-                long&nbsp;timeoutDuration,
-                <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</A>&nbsp;timeoutUnit,
-                boolean&nbsp;amInterruptible)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Invokes a specified Callable, timing out after the specified time limit.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; T</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/FakeTimeLimiter.html#newProxy(T, java.lang.Class, long, java.util.concurrent.TimeUnit)">newProxy</A></B>(T&nbsp;target,
-         <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;interfaceType,
-         long&nbsp;timeoutDuration,
-         <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</A>&nbsp;timeoutUnit)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an instance of <code>interfaceType</code> that delegates all method
- calls to the <code>target</code> object, enforcing the specified time limit on
- each call.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="FakeTimeLimiter()"><!-- --></A><H3>
-FakeTimeLimiter</H3>
-<PRE>
-public <B>FakeTimeLimiter</B>()</PRE>
-<DL>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="newProxy(java.lang.Object,java.lang.Class,long,java.util.concurrent.TimeUnit)"><!-- --></A><A NAME="newProxy(T, java.lang.Class, long, java.util.concurrent.TimeUnit)"><!-- --></A><H3>
-newProxy</H3>
-<PRE>
-public &lt;T&gt; T <B>newProxy</B>(T&nbsp;target,
-                      <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;interfaceType,
-                      long&nbsp;timeoutDuration,
-                      <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</A>&nbsp;timeoutUnit)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/google/common/util/concurrent/TimeLimiter.html#newProxy(T, java.lang.Class, long, java.util.concurrent.TimeUnit)">TimeLimiter</A></CODE></B></DD>
-<DD>Returns an instance of <code>interfaceType</code> that delegates all method
- calls to the <code>target</code> object, enforcing the specified time limit on
- each call.  This time-limited delegation is also performed for calls to
- <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang"><CODE>Object.hashCode()</CODE></A>, and
- <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang"><CODE>Object.toString()</CODE></A>.
- <p>
- If the target method call finishes before the limit is reached, the return
- value or exception is propagated to the caller exactly as-is. If, on the
- other hand, the time limit is reached, the proxy will attempt to abort the
- call to the target, and will throw an <A HREF="../../../../../com/google/common/util/concurrent/UncheckedTimeoutException.html" title="class in com.google.common.util.concurrent"><CODE>UncheckedTimeoutException</CODE></A> to
- the caller.
- <p>
- It is important to note that the primary purpose of the proxy object is to
- return control to the caller when the timeout elapses; aborting the target
- method call is of secondary concern.  The particular nature and strength
- of the guarantees made by the proxy is implementation-dependent.  However,
- it is important that each of the methods on the target object behaves
- appropriately when its thread is interrupted.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/google/common/util/concurrent/TimeLimiter.html#newProxy(T, java.lang.Class, long, java.util.concurrent.TimeUnit)">newProxy</A></CODE> in interface <CODE><A HREF="../../../../../com/google/common/util/concurrent/TimeLimiter.html" title="interface in com.google.common.util.concurrent">TimeLimiter</A></CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>target</CODE> - the object to proxy<DD><CODE>interfaceType</CODE> - the interface you wish the returned proxy to
-     implement<DD><CODE>timeoutDuration</CODE> - with timeoutUnit, the maximum length of time that
-     callers are willing to wait on each method call to the proxy<DD><CODE>timeoutUnit</CODE> - with timeoutDuration, the maximum length of time that
-     callers are willing to wait on each method call to the proxy
-<DT><B>Returns:</B><DD>a time-limiting proxy</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="callWithTimeout(java.util.concurrent.Callable, long, java.util.concurrent.TimeUnit, boolean)"><!-- --></A><H3>
-callWithTimeout</H3>
-<PRE>
-public &lt;T&gt; T <B>callWithTimeout</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</A>&lt;T&gt;&nbsp;callable,
-                             long&nbsp;timeoutDuration,
-                             <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</A>&nbsp;timeoutUnit,
-                             boolean&nbsp;amInterruptible)
-                  throws <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</A></PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/google/common/util/concurrent/TimeLimiter.html#callWithTimeout(java.util.concurrent.Callable, long, java.util.concurrent.TimeUnit, boolean)">TimeLimiter</A></CODE></B></DD>
-<DD>Invokes a specified Callable, timing out after the specified time limit.
- If the target method call finished before the limit is reached, the return
- value or exception is propagated to the caller exactly as-is.  If, on the
- other hand, the time limit is reached, we attempt to abort the call to the
- target, and throw an <A HREF="../../../../../com/google/common/util/concurrent/UncheckedTimeoutException.html" title="class in com.google.common.util.concurrent"><CODE>UncheckedTimeoutException</CODE></A> to the caller.
- <p>
- <b>Warning:</b> The future of this method is in doubt.  It may be nuked, or
- changed significantly.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/google/common/util/concurrent/TimeLimiter.html#callWithTimeout(java.util.concurrent.Callable, long, java.util.concurrent.TimeUnit, boolean)">callWithTimeout</A></CODE> in interface <CODE><A HREF="../../../../../com/google/common/util/concurrent/TimeLimiter.html" title="interface in com.google.common.util.concurrent">TimeLimiter</A></CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>callable</CODE> - the Callable to execute<DD><CODE>timeoutDuration</CODE> - with timeoutUnit, the maximum length of time to wait<DD><CODE>timeoutUnit</CODE> - with timeoutDuration, the maximum length of time to wait<DD><CODE>amInterruptible</CODE> - whether to respond to thread interruption by aborting
-     the operation and throwing InterruptedException; if false, the
-     operation is allowed to complete or time out, and the current thread's
-     interrupt status is re-asserted.
-<DT><B>Returns:</B><DD>the result returned by the Callable
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</A></CODE> - if <code>interruptible</code> is true and our
-     thread is interrupted during execution
-<DD><CODE><A HREF="../../../../../com/google/common/util/concurrent/UncheckedTimeoutException.html" title="class in com.google.common.util.concurrent">UncheckedTimeoutException</A></CODE> - if the time limit is reached
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</A></CODE></DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/FakeTimeLimiter.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/Executors.html" title="class in com.google.common.util.concurrent"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/ForwardingFuture.html" title="class in com.google.common.util.concurrent"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/util/concurrent/FakeTimeLimiter.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="FakeTimeLimiter.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/util/concurrent/ForwardingFuture.html b/javadoc/com/google/common/util/concurrent/ForwardingFuture.html
deleted file mode 100644
index 06322db..0000000
--- a/javadoc/com/google/common/util/concurrent/ForwardingFuture.html
+++ /dev/null
@@ -1,411 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-ForwardingFuture (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="ForwardingFuture (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ForwardingFuture.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/FakeTimeLimiter.html" title="class in com.google.common.util.concurrent"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/ForwardingService.html" title="class in com.google.common.util.concurrent"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/util/concurrent/ForwardingFuture.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingFuture.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.util.concurrent</FONT>
-<BR>
-Class ForwardingFuture&lt;V&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingObject</A>
-      <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.util.concurrent.ForwardingFuture&lt;V&gt;</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;V&gt;</DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public abstract class <B>ForwardingFuture&lt;V&gt;</B><DT>extends <A HREF="../../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A><DT>implements <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;V&gt;</DL>
-</PRE>
-
-<P>
-A <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>Future</CODE></A> which forwards all its method calls to another future.
- Subclasses should override one or more methods to modify the behavior of
- the backing collection as desired per the <a
- href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2009.09.15 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Sven Mawson</DD>
-<DT><B>See Also:</B><DD><A HREF="../../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect"><CODE>ForwardingObject</CODE></A></DL>
-<HR>
-
-<P>
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/ForwardingFuture.html#ForwardingFuture()">ForwardingFuture</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/ForwardingFuture.html#cancel(boolean)">cancel</A></B>(boolean&nbsp;mayInterruptIfRunning)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected abstract &nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;<A HREF="../../../../../com/google/common/util/concurrent/ForwardingFuture.html" title="type parameter in ForwardingFuture">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/ForwardingFuture.html#delegate()">delegate</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the backing delegate instance that methods are forwarded to.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/ForwardingFuture.html" title="type parameter in ForwardingFuture">V</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/ForwardingFuture.html#get()">get</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/ForwardingFuture.html" title="type parameter in ForwardingFuture">V</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/ForwardingFuture.html#get(long, java.util.concurrent.TimeUnit)">get</A></B>(long&nbsp;timeout,
-    <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</A>&nbsp;unit)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/ForwardingFuture.html#isCancelled()">isCancelled</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/ForwardingFuture.html#isDone()">isDone</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingObject"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../../com/google/common/collect/ForwardingObject.html#toString()">toString</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="ForwardingFuture()"><!-- --></A><H3>
-ForwardingFuture</H3>
-<PRE>
-public <B>ForwardingFuture</B>()</PRE>
-<DL>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="delegate()"><!-- --></A><H3>
-delegate</H3>
-<PRE>
-protected abstract <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;<A HREF="../../../../../com/google/common/util/concurrent/ForwardingFuture.html" title="type parameter in ForwardingFuture">V</A>&gt; <B>delegate</B>()</PRE>
-<DL>
-<DD><B>Description copied from class: <CODE><A HREF="../../../../../com/google/common/collect/ForwardingObject.html#delegate()">ForwardingObject</A></CODE></B></DD>
-<DD>Returns the backing delegate instance that methods are forwarded to.
- Abstract subclasses generally override this method with an abstract method
- that has a more specific return type, such as <A HREF="../../../../../com/google/common/collect/ForwardingSet.html#delegate()"><CODE>ForwardingSet.delegate()</CODE></A>. Concrete subclasses override this method to supply
- the instance being decorated.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/google/common/collect/ForwardingObject.html#delegate()">delegate</A></CODE> in class <CODE><A HREF="../../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="cancel(boolean)"><!-- --></A><H3>
-cancel</H3>
-<PRE>
-public boolean <B>cancel</B>(boolean&nbsp;mayInterruptIfRunning)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#cancel(boolean)" title="class or interface in java.util.concurrent">cancel</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;<A HREF="../../../../../com/google/common/util/concurrent/ForwardingFuture.html" title="type parameter in ForwardingFuture">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="isCancelled()"><!-- --></A><H3>
-isCancelled</H3>
-<PRE>
-public boolean <B>isCancelled</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#isCancelled()" title="class or interface in java.util.concurrent">isCancelled</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;<A HREF="../../../../../com/google/common/util/concurrent/ForwardingFuture.html" title="type parameter in ForwardingFuture">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="isDone()"><!-- --></A><H3>
-isDone</H3>
-<PRE>
-public boolean <B>isDone</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#isDone()" title="class or interface in java.util.concurrent">isDone</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;<A HREF="../../../../../com/google/common/util/concurrent/ForwardingFuture.html" title="type parameter in ForwardingFuture">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="get()"><!-- --></A><H3>
-get</H3>
-<PRE>
-public <A HREF="../../../../../com/google/common/util/concurrent/ForwardingFuture.html" title="type parameter in ForwardingFuture">V</A> <B>get</B>()
-      throws <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</A>,
-             <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutionException.html?is-external=true" title="class or interface in java.util.concurrent">ExecutionException</A></PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#get()" title="class or interface in java.util.concurrent">get</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;<A HREF="../../../../../com/google/common/util/concurrent/ForwardingFuture.html" title="type parameter in ForwardingFuture">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</A></CODE>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutionException.html?is-external=true" title="class or interface in java.util.concurrent">ExecutionException</A></CODE></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="get(long, java.util.concurrent.TimeUnit)"><!-- --></A><H3>
-get</H3>
-<PRE>
-public <A HREF="../../../../../com/google/common/util/concurrent/ForwardingFuture.html" title="type parameter in ForwardingFuture">V</A> <B>get</B>(long&nbsp;timeout,
-             <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</A>&nbsp;unit)
-      throws <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</A>,
-             <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutionException.html?is-external=true" title="class or interface in java.util.concurrent">ExecutionException</A>,
-             <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeoutException.html?is-external=true" title="class or interface in java.util.concurrent">TimeoutException</A></PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#get(long, java.util.concurrent.TimeUnit)" title="class or interface in java.util.concurrent">get</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;<A HREF="../../../../../com/google/common/util/concurrent/ForwardingFuture.html" title="type parameter in ForwardingFuture">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</A></CODE>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutionException.html?is-external=true" title="class or interface in java.util.concurrent">ExecutionException</A></CODE>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeoutException.html?is-external=true" title="class or interface in java.util.concurrent">TimeoutException</A></CODE></DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ForwardingFuture.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/FakeTimeLimiter.html" title="class in com.google.common.util.concurrent"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/ForwardingService.html" title="class in com.google.common.util.concurrent"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/util/concurrent/ForwardingFuture.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingFuture.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/util/concurrent/ForwardingService.html b/javadoc/com/google/common/util/concurrent/ForwardingService.html
deleted file mode 100644
index 9a87a32..0000000
--- a/javadoc/com/google/common/util/concurrent/ForwardingService.html
+++ /dev/null
@@ -1,480 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-ForwardingService (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="ForwardingService (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ForwardingService.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/ForwardingFuture.html" title="class in com.google.common.util.concurrent"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/Futures.html" title="class in com.google.common.util.concurrent"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/util/concurrent/ForwardingService.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingService.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.util.concurrent</FONT>
-<BR>
-Class ForwardingService</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">com.google.common.collect.ForwardingObject</A>
-      <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.util.concurrent.ForwardingService</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../../com/google/common/base/Service.html" title="interface in com.google.common.base">Service</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public abstract class <B>ForwardingService</B><DT>extends <A HREF="../../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A><DT>implements <A HREF="../../../../../com/google/common/base/Service.html" title="interface in com.google.common.base">Service</A></DL>
-</PRE>
-
-<P>
-A <A HREF="../../../../../com/google/common/base/Service.html" title="interface in com.google.common.base"><CODE>Service</CODE></A> that forwards all method calls to another service.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2009.09.15 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Chris Nokleberg</DD>
-</DL>
-<HR>
-
-<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-<A NAME="nested_class_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Nested Class Summary</B></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;<A NAME="nested_classes_inherited_from_class_com.google.common.base.Service"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Nested classes/interfaces inherited from interface com.google.common.base.<A HREF="../../../../../com/google/common/base/Service.html" title="interface in com.google.common.base">Service</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/ForwardingService.html#ForwardingService()">ForwardingService</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected abstract &nbsp;<A HREF="../../../../../com/google/common/base/Service.html" title="interface in com.google.common.base">Service</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/ForwardingService.html#delegate()">delegate</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the backing delegate instance that methods are forwarded to.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/ForwardingService.html#isRunning()">isRunning</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns <code>true</code> if this service is <A HREF="../../../../../com/google/common/base/Service.State.html#RUNNING"><CODE>running</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;<A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/ForwardingService.html#start()">start</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If the service state is <A HREF="../../../../../com/google/common/base/Service.State.html#NEW"><CODE>Service.State.NEW</CODE></A>, this initiates service startup
- and returns immediately.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/ForwardingService.html#startAndWait()">startAndWait</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Initiates service startup (if necessary), returning once the service has
- finished starting.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/ForwardingService.html#state()">state</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the lifecycle state of the service.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;<A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/ForwardingService.html#stop()">stop</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If the service is <A HREF="../../../../../com/google/common/base/Service.State.html#STARTING"><CODE>Service.State.STARTING</CODE></A> or <A HREF="../../../../../com/google/common/base/Service.State.html#RUNNING"><CODE>Service.State.RUNNING</CODE></A>, this
- initiates service shutdown and returns immediately.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/ForwardingService.html#stopAndWait()">stopAndWait</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Initiates service shutdown (if necessary), returning once the service has
- finished stopping.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.collect.ForwardingObject"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class com.google.common.collect.<A HREF="../../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../../com/google/common/collect/ForwardingObject.html#toString()">toString</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="ForwardingService()"><!-- --></A><H3>
-ForwardingService</H3>
-<PRE>
-public <B>ForwardingService</B>()</PRE>
-<DL>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="delegate()"><!-- --></A><H3>
-delegate</H3>
-<PRE>
-protected abstract <A HREF="../../../../../com/google/common/base/Service.html" title="interface in com.google.common.base">Service</A> <B>delegate</B>()</PRE>
-<DL>
-<DD><B>Description copied from class: <CODE><A HREF="../../../../../com/google/common/collect/ForwardingObject.html#delegate()">ForwardingObject</A></CODE></B></DD>
-<DD>Returns the backing delegate instance that methods are forwarded to.
- Abstract subclasses generally override this method with an abstract method
- that has a more specific return type, such as <A HREF="../../../../../com/google/common/collect/ForwardingSet.html#delegate()"><CODE>ForwardingSet.delegate()</CODE></A>. Concrete subclasses override this method to supply
- the instance being decorated.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/google/common/collect/ForwardingObject.html#delegate()">delegate</A></CODE> in class <CODE><A HREF="../../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="start()"><!-- --></A><H3>
-start</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;<A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A>&gt; <B>start</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/google/common/base/Service.html#start()">Service</A></CODE></B></DD>
-<DD>If the service state is <A HREF="../../../../../com/google/common/base/Service.State.html#NEW"><CODE>Service.State.NEW</CODE></A>, this initiates service startup
- and returns immediately. If the service has already been started, this
- method returns immediately without taking action. A stopped service may not
- be restarted.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/google/common/base/Service.html#start()">start</A></CODE> in interface <CODE><A HREF="../../../../../com/google/common/base/Service.html" title="interface in com.google.common.base">Service</A></CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a future for the startup result, regardless of whether this call
-     initiated startup. Calling <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#get()" title="class or interface in java.util.concurrent"><CODE>Future.get()</CODE></A> will block until the
-     service has finished starting, and returns one of <A HREF="../../../../../com/google/common/base/Service.State.html#RUNNING"><CODE>Service.State.RUNNING</CODE></A>, <A HREF="../../../../../com/google/common/base/Service.State.html#STOPPING"><CODE>Service.State.STOPPING</CODE></A> or <A HREF="../../../../../com/google/common/base/Service.State.html#TERMINATED"><CODE>Service.State.TERMINATED</CODE></A>. If
-     the service fails to start, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#get()" title="class or interface in java.util.concurrent"><CODE>Future.get()</CODE></A> will throw an <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutionException.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ExecutionException</CODE></A>, and the service's state will be <A HREF="../../../../../com/google/common/base/Service.State.html#FAILED"><CODE>Service.State.FAILED</CODE></A>. If it has already finished starting, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#get()" title="class or interface in java.util.concurrent"><CODE>Future.get()</CODE></A>
-     returns immediately. Cancelling the returned future is unsupported and
-     always returns <code>false</code>.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="state()"><!-- --></A><H3>
-state</H3>
-<PRE>
-public <A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A> <B>state</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/google/common/base/Service.html#state()">Service</A></CODE></B></DD>
-<DD>Returns the lifecycle state of the service.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/google/common/base/Service.html#state()">state</A></CODE> in interface <CODE><A HREF="../../../../../com/google/common/base/Service.html" title="interface in com.google.common.base">Service</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="stop()"><!-- --></A><H3>
-stop</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;<A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A>&gt; <B>stop</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/google/common/base/Service.html#stop()">Service</A></CODE></B></DD>
-<DD>If the service is <A HREF="../../../../../com/google/common/base/Service.State.html#STARTING"><CODE>Service.State.STARTING</CODE></A> or <A HREF="../../../../../com/google/common/base/Service.State.html#RUNNING"><CODE>Service.State.RUNNING</CODE></A>, this
- initiates service shutdown and returns immediately. If this is <A HREF="../../../../../com/google/common/base/Service.State.html#NEW"><CODE>Service.State.NEW</CODE></A>, it is <A HREF="../../../../../com/google/common/base/Service.State.html#TERMINATED"><CODE>terminated</CODE></A> without having been
- started nor stopped.  If the service has already been stopped, this
- method returns immediately without taking action.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/google/common/base/Service.html#stop()">stop</A></CODE> in interface <CODE><A HREF="../../../../../com/google/common/base/Service.html" title="interface in com.google.common.base">Service</A></CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>a future for the shutdown result, regardless of whether this call
-     initiated shutdown. Calling <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#get()" title="class or interface in java.util.concurrent"><CODE>Future.get()</CODE></A> will block until the
-     service has finished shutting down, and either returns <A HREF="../../../../../com/google/common/base/Service.State.html#TERMINATED"><CODE>Service.State.TERMINATED</CODE></A> or throws an <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutionException.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ExecutionException</CODE></A>. If it has
-     already finished stopping, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#get()" title="class or interface in java.util.concurrent"><CODE>Future.get()</CODE></A> returns immediately.
-     Cancelling this future is unsupported and always returns <code>false</code>.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="startAndWait()"><!-- --></A><H3>
-startAndWait</H3>
-<PRE>
-public <A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A> <B>startAndWait</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/google/common/base/Service.html#startAndWait()">Service</A></CODE></B></DD>
-<DD>Initiates service startup (if necessary), returning once the service has
- finished starting. Unlike calling <code>start().get()</code>, this method throws
- no checked exceptions.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/google/common/base/Service.html#startAndWait()">startAndWait</A></CODE> in interface <CODE><A HREF="../../../../../com/google/common/base/Service.html" title="interface in com.google.common.base">Service</A></CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>the state of the service when startup finished.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="stopAndWait()"><!-- --></A><H3>
-stopAndWait</H3>
-<PRE>
-public <A HREF="../../../../../com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A> <B>stopAndWait</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/google/common/base/Service.html#stopAndWait()">Service</A></CODE></B></DD>
-<DD>Initiates service shutdown (if necessary), returning once the service has
- finished stopping. If this is <A HREF="../../../../../com/google/common/base/Service.State.html#STARTING"><CODE>Service.State.STARTING</CODE></A>, startup will be
- cancelled. If this is <A HREF="../../../../../com/google/common/base/Service.State.html#NEW"><CODE>Service.State.NEW</CODE></A>, it is <A HREF="../../../../../com/google/common/base/Service.State.html#TERMINATED"><CODE>terminated</CODE></A> without having been started nor stopped. Unlike calling <code>stop().get()</code>, this method throws no checked exceptions.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/google/common/base/Service.html#stopAndWait()">stopAndWait</A></CODE> in interface <CODE><A HREF="../../../../../com/google/common/base/Service.html" title="interface in com.google.common.base">Service</A></CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>the state of the service when shutdown finished.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="isRunning()"><!-- --></A><H3>
-isRunning</H3>
-<PRE>
-public boolean <B>isRunning</B>()</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/google/common/base/Service.html#isRunning()">Service</A></CODE></B></DD>
-<DD>Returns <code>true</code> if this service is <A HREF="../../../../../com/google/common/base/Service.State.html#RUNNING"><CODE>running</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/google/common/base/Service.html#isRunning()">isRunning</A></CODE> in interface <CODE><A HREF="../../../../../com/google/common/base/Service.html" title="interface in com.google.common.base">Service</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ForwardingService.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/ForwardingFuture.html" title="class in com.google.common.util.concurrent"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/Futures.html" title="class in com.google.common.util.concurrent"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/util/concurrent/ForwardingService.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingService.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/util/concurrent/Futures.html b/javadoc/com/google/common/util/concurrent/Futures.html
deleted file mode 100644
index ea155b9..0000000
--- a/javadoc/com/google/common/util/concurrent/Futures.html
+++ /dev/null
@@ -1,688 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Futures (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Futures (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Futures.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/ForwardingService.html" title="class in com.google.common.util.concurrent"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/util/concurrent/Futures.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Futures.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.util.concurrent</FONT>
-<BR>
-Class Futures</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.util.concurrent.Futures</B>
-</PRE>
-<HR>
-<DL>
-<DT><PRE>public class <B>Futures</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></DL>
-</PRE>
-
-<P>
-Static utility methods pertaining to the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>Future</CODE></A> interface.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2009.09.15 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Kevin Bourrillion, Nishant Thakkar, Sven Mawson</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;I,O&gt; <A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;O&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/Futures.html#chain(com.google.common.util.concurrent.ListenableFuture, com.google.common.base.Function)">chain</A></B>(<A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;I&gt;&nbsp;input,
-      <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super I,? extends <A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;? extends O&gt;&gt;&nbsp;function)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>ListenableFuture</code> that wraps another
- <code>ListenableFuture</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;I,O&gt; <A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;O&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/Futures.html#chain(com.google.common.util.concurrent.ListenableFuture, com.google.common.base.Function, java.util.concurrent.Executor)">chain</A></B>(<A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;I&gt;&nbsp;input,
-      <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super I,? extends <A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;? extends O&gt;&gt;&nbsp;function,
-      <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executor.html?is-external=true" title="class or interface in java.util.concurrent">Executor</A>&nbsp;exec)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>ListenableFuture</code> that wraps another
- <code>ListenableFuture</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;I,O&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;O&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/Futures.html#compose(java.util.concurrent.Future, com.google.common.base.Function)">compose</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;I&gt;&nbsp;future,
-        <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super I,? extends O&gt;&nbsp;function)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>Future</code> that wraps another <code>Future</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;I,O&gt; <A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;O&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/Futures.html#compose(com.google.common.util.concurrent.ListenableFuture, com.google.common.base.Function)">compose</A></B>(<A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;I&gt;&nbsp;future,
-        <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super I,? extends O&gt;&nbsp;function)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>ListenableFuture</code> that wraps another
- <code>ListenableFuture</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;I,O&gt; <A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;O&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/Futures.html#compose(com.google.common.util.concurrent.ListenableFuture, com.google.common.base.Function, java.util.concurrent.Executor)">compose</A></B>(<A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;I&gt;&nbsp;future,
-        <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super I,? extends O&gt;&nbsp;function,
-        <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executor.html?is-external=true" title="class or interface in java.util.concurrent">Executor</A>&nbsp;exec)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>ListenableFuture</code> that wraps another
- <code>ListenableFuture</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T,E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</A>&gt; 
-<BR>
-<A HREF="../../../../../com/google/common/util/concurrent/CheckedFuture.html" title="interface in com.google.common.util.concurrent">CheckedFuture</A>&lt;T,E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/Futures.html#immediateCheckedFuture(T)">immediateCheckedFuture</A></B>(T&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <code>CheckedFuture</code> which has its value set immediately upon
- construction.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T,E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</A>&gt; 
-<BR>
-<A HREF="../../../../../com/google/common/util/concurrent/CheckedFuture.html" title="interface in com.google.common.util.concurrent">CheckedFuture</A>&lt;T,E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/Futures.html#immediateFailedCheckedFuture(E)">immediateFailedCheckedFuture</A></B>(E&nbsp;exception)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <code>CheckedFuture</code> which has an exception set immediately
- upon construction.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/Futures.html#immediateFailedFuture(java.lang.Throwable)">immediateFailedFuture</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A>&nbsp;throwable)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <code>ListenableFuture</code> which has an exception set immediately
- upon construction.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/Futures.html#immediateFuture(T)">immediateFuture</A></B>(T&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <code>ListenableFuture</code> which has its value set immediately upon
- construction.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T,E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</A>&gt; 
-<BR>
-<A HREF="../../../../../com/google/common/util/concurrent/CheckedFuture.html" title="interface in com.google.common.util.concurrent">CheckedFuture</A>&lt;T,E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/Futures.html#makeChecked(java.util.concurrent.Future, com.google.common.base.Function)">makeChecked</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;T&gt;&nbsp;future,
-            <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</A>,E&gt;&nbsp;mapper)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <A HREF="../../../../../com/google/common/util/concurrent/CheckedFuture.html" title="interface in com.google.common.util.concurrent"><CODE>CheckedFuture</CODE></A> out of a normal <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>Future</CODE></A> and a
- <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base"><CODE>Function</CODE></A> that maps from <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang"><CODE>Exception</CODE></A> instances into the
- appropriate checked type.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/Futures.html#makeListenable(java.util.concurrent.Future)">makeListenable</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;T&gt;&nbsp;future)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent"><CODE>ListenableFuture</CODE></A> out of a normal <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>Future</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;V&gt; <A HREF="../../../../../com/google/common/util/concurrent/UninterruptibleFuture.html" title="interface in com.google.common.util.concurrent">UninterruptibleFuture</A>&lt;V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/Futures.html#makeUninterruptible(java.util.concurrent.Future)">makeUninterruptible</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;V&gt;&nbsp;future)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an uninterruptible view of a <code>Future</code>.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="makeUninterruptible(java.util.concurrent.Future)"><!-- --></A><H3>
-makeUninterruptible</H3>
-<PRE>
-public static &lt;V&gt; <A HREF="../../../../../com/google/common/util/concurrent/UninterruptibleFuture.html" title="interface in com.google.common.util.concurrent">UninterruptibleFuture</A>&lt;V&gt; <B>makeUninterruptible</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;V&gt;&nbsp;future)</PRE>
-<DL>
-<DD>Returns an uninterruptible view of a <code>Future</code>. If a thread is
- interrupted during an attempt to <code>get()</code> from the returned future, it
- continues to wait on the result until it is available or the timeout
- elapses, and only then re-interrupts the thread.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="makeListenable(java.util.concurrent.Future)"><!-- --></A><H3>
-makeListenable</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;T&gt; <B>makeListenable</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;T&gt;&nbsp;future)</PRE>
-<DL>
-<DD>Creates a <A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent"><CODE>ListenableFuture</CODE></A> out of a normal <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>Future</CODE></A>. The
- returned future will create a thread to wait for the source future to
- complete before executing the listeners.
-
- <p>Callers who have a future that subclasses
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/FutureTask.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>FutureTask</CODE></A> may want to instead subclass
- <A HREF="../../../../../com/google/common/util/concurrent/ListenableFutureTask.html" title="class in com.google.common.util.concurrent"><CODE>ListenableFutureTask</CODE></A>, which adds the <A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent"><CODE>ListenableFuture</CODE></A>
- functionality to the standard <code>FutureTask</code> implementation.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="makeChecked(java.util.concurrent.Future, com.google.common.base.Function)"><!-- --></A><H3>
-makeChecked</H3>
-<PRE>
-public static &lt;T,E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</A>&gt; <A HREF="../../../../../com/google/common/util/concurrent/CheckedFuture.html" title="interface in com.google.common.util.concurrent">CheckedFuture</A>&lt;T,E&gt; <B>makeChecked</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;T&gt;&nbsp;future,
-                                                                     <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</A>,E&gt;&nbsp;mapper)</PRE>
-<DL>
-<DD>Creates a <A HREF="../../../../../com/google/common/util/concurrent/CheckedFuture.html" title="interface in com.google.common.util.concurrent"><CODE>CheckedFuture</CODE></A> out of a normal <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>Future</CODE></A> and a
- <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base"><CODE>Function</CODE></A> that maps from <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang"><CODE>Exception</CODE></A> instances into the
- appropriate checked type.
-
- <p>The given mapping function will be applied to an
- <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang"><CODE>InterruptedException</CODE></A>, a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/CancellationException.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>CancellationException</CODE></A>, or an
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutionException.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ExecutionException</CODE></A> with the actual cause of the exception.
- See <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#get()" title="class or interface in java.util.concurrent"><CODE>Future.get()</CODE></A> for details on the exceptions thrown.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="immediateFuture(java.lang.Object)"><!-- --></A><A NAME="immediateFuture(T)"><!-- --></A><H3>
-immediateFuture</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;T&gt; <B>immediateFuture</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                                                      T&nbsp;value)</PRE>
-<DL>
-<DD>Creates a <code>ListenableFuture</code> which has its value set immediately upon
- construction. The getters just return the value. This <code>Future</code> can't
- be canceled or timed out and its <code>isDone()</code> method always returns
- <code>true</code>. It's useful for returning something that implements the
- <code>ListenableFuture</code> interface but already has the result.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="immediateCheckedFuture(java.lang.Object)"><!-- --></A><A NAME="immediateCheckedFuture(T)"><!-- --></A><H3>
-immediateCheckedFuture</H3>
-<PRE>
-public static &lt;T,E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</A>&gt; <A HREF="../../../../../com/google/common/util/concurrent/CheckedFuture.html" title="interface in com.google.common.util.concurrent">CheckedFuture</A>&lt;T,E&gt; <B>immediateCheckedFuture</B>(<FONT SIZE="-1"><A HREF="http://jsr-305.googlecode.com/svn/trunk/javadoc/javax/annotation/Nullable.html?is-external=true" title="class or interface in javax.annotation">@Nullable</A></FONT>
-                                                                                T&nbsp;value)</PRE>
-<DL>
-<DD>Creates a <code>CheckedFuture</code> which has its value set immediately upon
- construction. The getters just return the value. This <code>Future</code> can't
- be canceled or timed out and its <code>isDone()</code> method always returns
- <code>true</code>. It's useful for returning something that implements the
- <code>CheckedFuture</code> interface but already has the result.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="immediateFailedFuture(java.lang.Throwable)"><!-- --></A><H3>
-immediateFailedFuture</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;T&gt; <B>immediateFailedFuture</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A>&nbsp;throwable)</PRE>
-<DL>
-<DD>Creates a <code>ListenableFuture</code> which has an exception set immediately
- upon construction. The getters just return the value. This <code>Future</code>
- can't be canceled or timed out and its <code>isDone()</code> method always
- returns <code>true</code>. It's useful for returning something that implements
- the <code>ListenableFuture</code> interface but already has a failed
- result. Calling <code>get()</code> will throw the provided <code>Throwable</code>
- (wrapped in an <code>ExecutionException</code>).
-<P>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Error.html?is-external=true" title="class or interface in java.lang">Error</A></CODE> - if the throwable was an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Error.html?is-external=true" title="class or interface in java.lang"><CODE>Error</CODE></A>.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="immediateFailedCheckedFuture(java.lang.Exception)"><!-- --></A><A NAME="immediateFailedCheckedFuture(E)"><!-- --></A><H3>
-immediateFailedCheckedFuture</H3>
-<PRE>
-public static &lt;T,E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</A>&gt; <A HREF="../../../../../com/google/common/util/concurrent/CheckedFuture.html" title="interface in com.google.common.util.concurrent">CheckedFuture</A>&lt;T,E&gt; <B>immediateFailedCheckedFuture</B>(E&nbsp;exception)</PRE>
-<DL>
-<DD>Creates a <code>CheckedFuture</code> which has an exception set immediately
- upon construction. The getters just return the value. This <code>Future</code>
- can't be canceled or timed out and its <code>isDone()</code> method always
- returns <code>true</code>. It's useful for returning something that implements
- the <code>CheckedFuture</code> interface but already has a failed result.
- Calling <code>get()</code> will throw the provided <code>Throwable</code> (wrapped in
- an <code>ExecutionException</code>) and calling <code>checkedGet()</code> will throw
- the provided exception itself.
-<P>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Error.html?is-external=true" title="class or interface in java.lang">Error</A></CODE> - if the throwable was an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Error.html?is-external=true" title="class or interface in java.lang"><CODE>Error</CODE></A>.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="chain(com.google.common.util.concurrent.ListenableFuture, com.google.common.base.Function)"><!-- --></A><H3>
-chain</H3>
-<PRE>
-public static &lt;I,O&gt; <A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;O&gt; <B>chain</B>(<A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;I&gt;&nbsp;input,
-                                              <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super I,? extends <A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;? extends O&gt;&gt;&nbsp;function)</PRE>
-<DL>
-<DD>Creates a new <code>ListenableFuture</code> that wraps another
- <code>ListenableFuture</code>.  The result of the new future is the result of
- the provided function called on the result of the provided future.
- The resulting future doesn't interrupt when aborted.
-
- <p>TODO: Add a version that accepts a normal <code>Future</code>
-
- <p>The typical use for this method would be when a RPC call is dependent on
- the results of another RPC.  One would call the first RPC (input), create a
- function that calls another RPC based on input's result, and then call
- chain on input and that function to get a <code>ListenableFuture</code> of
- the result.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>input</CODE> - The future to chain<DD><CODE>function</CODE> - A function to chain the results of the provided future
-     to the results of the returned future.  This will be run in the thread
-     that notifies input it is complete.
-<DT><B>Returns:</B><DD>A future that holds result of the chain.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="chain(com.google.common.util.concurrent.ListenableFuture, com.google.common.base.Function, java.util.concurrent.Executor)"><!-- --></A><H3>
-chain</H3>
-<PRE>
-public static &lt;I,O&gt; <A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;O&gt; <B>chain</B>(<A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;I&gt;&nbsp;input,
-                                              <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super I,? extends <A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;? extends O&gt;&gt;&nbsp;function,
-                                              <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executor.html?is-external=true" title="class or interface in java.util.concurrent">Executor</A>&nbsp;exec)</PRE>
-<DL>
-<DD>Creates a new <code>ListenableFuture</code> that wraps another
- <code>ListenableFuture</code>.  The result of the new future is the result of
- the provided function called on the result of the provided future.
- The resulting future doesn't interrupt when aborted.
-
- <p>This version allows an arbitrary executor to be passed in for running
- the chained Function. When using <A HREF="../../../../../com/google/common/util/concurrent/Executors.html#sameThreadExecutor()"><CODE>Executors.sameThreadExecutor()</CODE></A>, the
- thread chained Function executes in will be whichever thread set the
- result of the input Future, which may be the network thread in the case of
- RPC-based Futures.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>input</CODE> - The future to chain<DD><CODE>function</CODE> - A function to chain the results of the provided future
-     to the results of the returned future.<DD><CODE>exec</CODE> - Executor to run the function in.
-<DT><B>Returns:</B><DD>A future that holds result of the chain.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="compose(com.google.common.util.concurrent.ListenableFuture, com.google.common.base.Function)"><!-- --></A><H3>
-compose</H3>
-<PRE>
-public static &lt;I,O&gt; <A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;O&gt; <B>compose</B>(<A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;I&gt;&nbsp;future,
-                                                <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super I,? extends O&gt;&nbsp;function)</PRE>
-<DL>
-<DD>Creates a new <code>ListenableFuture</code> that wraps another
- <code>ListenableFuture</code>.  The result of the new future is the result of
- the provided function called on the result of the provided future.
- The resulting future doesn't interrupt when aborted.
-
- <p>An example use of this method is to convert a serializable object
- returned from an RPC into a POJO.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>future</CODE> - The future to compose<DD><CODE>function</CODE> - A Function to compose the results of the provided future
-     to the results of the returned future.  This will be run in the thread
-     that notifies input it is complete.
-<DT><B>Returns:</B><DD>A future that holds result of the composition.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="compose(com.google.common.util.concurrent.ListenableFuture, com.google.common.base.Function, java.util.concurrent.Executor)"><!-- --></A><H3>
-compose</H3>
-<PRE>
-public static &lt;I,O&gt; <A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;O&gt; <B>compose</B>(<A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;I&gt;&nbsp;future,
-                                                <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super I,? extends O&gt;&nbsp;function,
-                                                <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executor.html?is-external=true" title="class or interface in java.util.concurrent">Executor</A>&nbsp;exec)</PRE>
-<DL>
-<DD>Creates a new <code>ListenableFuture</code> that wraps another
- <code>ListenableFuture</code>.  The result of the new future is the result of
- the provided function called on the result of the provided future.
- The resulting future doesn't interrupt when aborted.
-
- <p>An example use of this method is to convert a serializable object
- returned from an RPC into a POJO.
-
- <p>This version allows an arbitrary executor to be passed in for running
- the chained Function. When using <A HREF="../../../../../com/google/common/util/concurrent/Executors.html#sameThreadExecutor()"><CODE>Executors.sameThreadExecutor()</CODE></A>, the
- thread chained Function executes in will be whichever thread set the result
- of the input Future, which may be the network thread in the case of
- RPC-based Futures.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>future</CODE> - The future to compose<DD><CODE>function</CODE> - A Function to compose the results of the provided future
-     to the results of the returned future.<DD><CODE>exec</CODE> - Executor to run the function in.
-<DT><B>Returns:</B><DD>A future that holds result of the composition.<DT><B>Since:</B></DT>
-  <DD>2010.01.04 <b>tentative</b></DD>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="compose(java.util.concurrent.Future, com.google.common.base.Function)"><!-- --></A><H3>
-compose</H3>
-<PRE>
-public static &lt;I,O&gt; <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;O&gt; <B>compose</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;I&gt;&nbsp;future,
-                                      <A HREF="../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super I,? extends O&gt;&nbsp;function)</PRE>
-<DL>
-<DD>Creates a new <code>Future</code> that wraps another <code>Future</code>.
- The result of the new future is the result of the provided function called
- on the result of the provided future.
-
- <p>An example use of this method is to convert a Future that produces a
- handle to an object to a future that produces the object itself.
-
- <p>Each call to <code>Future&lt;O&gt;.get(*)</code> results in a call to
- <code>Future&lt;I&gt;.get(*)</code>, but <code>function</code> is only applied once, so it
- is assumed that <code>Future&lt;I&gt;.get(*)</code> is idempotent.
-
- <p>When calling <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#get(long, java.util.concurrent.TimeUnit)" title="class or interface in java.util.concurrent"><CODE>Future.get(long, TimeUnit)</CODE></A> on the returned
- future, the timeout only applies to the future passed in to this method.
- Any additional time taken by applying <code>function</code> is not considered.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>future</CODE> - The future to compose<DD><CODE>function</CODE> - A Function to compose the results of the provided future
-     to the results of the returned future.  This will be run in the thread
-     that calls one of the varieties of <code>get()</code>.
-<DT><B>Returns:</B><DD>A future that computes result of the composition.</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/Futures.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/ForwardingService.html" title="class in com.google.common.util.concurrent"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/util/concurrent/Futures.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Futures.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/util/concurrent/ListenableFuture.html b/javadoc/com/google/common/util/concurrent/ListenableFuture.html
deleted file mode 100644
index 24d7820..0000000
--- a/javadoc/com/google/common/util/concurrent/ListenableFuture.html
+++ /dev/null
@@ -1,270 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-ListenableFuture (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="ListenableFuture (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ListenableFuture.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/Futures.html" title="class in com.google.common.util.concurrent"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/ListenableFutureTask.html" title="class in com.google.common.util.concurrent"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/util/concurrent/ListenableFuture.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ListenableFuture.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.util.concurrent</FONT>
-<BR>
-Interface ListenableFuture&lt;V&gt;</H2>
-<DL>
-<DT><B>All Superinterfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;V&gt;</DD>
-</DL>
-<DL>
-<DT><B>All Known Subinterfaces:</B> <DD><A HREF="../../../../../com/google/common/util/concurrent/CheckedFuture.html" title="interface in com.google.common.util.concurrent">CheckedFuture</A>&lt;V,E&gt;</DD>
-</DL>
-<DL>
-<DT><B>All Known Implementing Classes:</B> <DD><A HREF="../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html" title="class in com.google.common.util.concurrent">AbstractCheckedFuture</A>, <A HREF="../../../../../com/google/common/util/concurrent/AbstractListenableFuture.html" title="class in com.google.common.util.concurrent">AbstractListenableFuture</A>, <A HREF="../../../../../com/google/common/util/concurrent/ListenableFutureTask.html" title="class in com.google.common.util.concurrent">ListenableFutureTask</A>, <A HREF="../../../../../com/google/common/util/concurrent/ValueFuture.html" title="class in com.google.common.util.concurrent">ValueFuture</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public interface <B>ListenableFuture&lt;V&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;V&gt;</DL>
-</PRE>
-
-<P>
-<p>This interface defines a future that has listeners attached to it, which
- is useful for asynchronous workflows.  Each listener has an associated
- executor, and is invoked using this executor once the <code>Future</code>'s
- computation is <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#isDone()" title="class or interface in java.util.concurrent">complete</A>.  The listener will be
- executed even if it is added after the computation is complete.
-
- <p>Usage:
- <pre>   <code>final ListenableFuture&lt;?&gt; future = myService.async(myRequest);
-   future.addListener(new Runnable() {
-     public void run() {
-       System.out.println("Operation Complete.");
-       try {
-         System.out.println("Result: " + future.get());
-       } catch (Exception e) {
-         System.out.println("Error: " + e.message());
-       }
-     }
-   }, exec);</code></pre>
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2009.09.15 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Sven Mawson, Nishant Thakkar</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html#addListener(java.lang.Runnable, java.util.concurrent.Executor)">addListener</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</A>&nbsp;listener,
-            <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executor.html?is-external=true" title="class or interface in java.util.concurrent">Executor</A>&nbsp;exec)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds a listener and executor to the ListenableFuture.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.util.concurrent.Future"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface java.util.concurrent.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#cancel(boolean)" title="class or interface in java.util.concurrent">cancel</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#get()" title="class or interface in java.util.concurrent">get</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#get(long, java.util.concurrent.TimeUnit)" title="class or interface in java.util.concurrent">get</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#isCancelled()" title="class or interface in java.util.concurrent">isCancelled</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#isDone()" title="class or interface in java.util.concurrent">isDone</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="addListener(java.lang.Runnable, java.util.concurrent.Executor)"><!-- --></A><H3>
-addListener</H3>
-<PRE>
-void <B>addListener</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</A>&nbsp;listener,
-                 <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executor.html?is-external=true" title="class or interface in java.util.concurrent">Executor</A>&nbsp;exec)</PRE>
-<DL>
-<DD><p>Adds a listener and executor to the ListenableFuture.
- The listener will be <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executor.html?is-external=true#execute(java.lang.Runnable)" title="class or interface in java.util.concurrent">passed
- to the executor</A> for execution when the <code>Future</code>'s computation is
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#isDone()" title="class or interface in java.util.concurrent">complete</A>.
-
- <p>There is no guaranteed ordering of execution of listeners, they may get
- called in the order they were added and they may get called out of order,
- but any listener added through this method is guaranteed to be called once
- the computation is complete.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>listener</CODE> - the listener to run when the computation is complete.<DD><CODE>exec</CODE> - the executor to run the listener in.
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if the executor or listener was null.
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/RejectedExecutionException.html?is-external=true" title="class or interface in java.util.concurrent">RejectedExecutionException</A></CODE> - if we tried to execute the listener
- immediately but the executor rejected it.</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ListenableFuture.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/Futures.html" title="class in com.google.common.util.concurrent"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/ListenableFutureTask.html" title="class in com.google.common.util.concurrent"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/util/concurrent/ListenableFuture.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ListenableFuture.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/util/concurrent/ListenableFutureTask.html b/javadoc/com/google/common/util/concurrent/ListenableFutureTask.html
deleted file mode 100644
index 6314ebe..0000000
--- a/javadoc/com/google/common/util/concurrent/ListenableFutureTask.html
+++ /dev/null
@@ -1,363 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-ListenableFutureTask (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="ListenableFutureTask (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ListenableFutureTask.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/NamingThreadFactory.html" title="class in com.google.common.util.concurrent"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/util/concurrent/ListenableFutureTask.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ListenableFutureTask.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.util.concurrent</FONT>
-<BR>
-Class ListenableFutureTask&lt;V&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/FutureTask.html?is-external=true" title="class or interface in java.util.concurrent">java.util.concurrent.FutureTask</A>&lt;V&gt;
-      <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.util.concurrent.ListenableFutureTask&lt;V&gt;</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;V&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;V&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/RunnableFuture.html?is-external=true" title="class or interface in java.util.concurrent">RunnableFuture</A>&lt;V&gt;</DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public class <B>ListenableFutureTask&lt;V&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/FutureTask.html?is-external=true" title="class or interface in java.util.concurrent">FutureTask</A>&lt;V&gt;<DT>implements <A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;V&gt;</DL>
-</PRE>
-
-<P>
-A <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/FutureTask.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>FutureTask</CODE></A> that also implements the <A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent"><CODE>ListenableFuture</CODE></A>
- interface.  Subclasses must make sure to call <code>super.done()</code> if they
- also override the <A HREF="../../../../../com/google/common/util/concurrent/ListenableFutureTask.html#done()"><CODE>done()</CODE></A> method, otherwise the listeners will not
- be called.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2009.09.15 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Sven Mawson</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/ListenableFutureTask.html#ListenableFutureTask(java.util.concurrent.Callable)">ListenableFutureTask</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</A>&lt;<A HREF="../../../../../com/google/common/util/concurrent/ListenableFutureTask.html" title="type parameter in ListenableFutureTask">V</A>&gt;&nbsp;callable)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <code>ListenableFutureTask</code> that will upon running, execute the
- given <code>Callable</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/ListenableFutureTask.html#ListenableFutureTask(java.lang.Runnable, V)">ListenableFutureTask</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</A>&nbsp;runnable,
-                     <A HREF="../../../../../com/google/common/util/concurrent/ListenableFutureTask.html" title="type parameter in ListenableFutureTask">V</A>&nbsp;result)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <code>ListenableFutureTask</code> that will upon running, execute the
- given <code>Runnable</code>, and arrange that <code>get</code> will return the
- given result on successful completion.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/ListenableFutureTask.html#addListener(java.lang.Runnable, java.util.concurrent.Executor)">addListener</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</A>&nbsp;listener,
-            <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executor.html?is-external=true" title="class or interface in java.util.concurrent">Executor</A>&nbsp;exec)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds a listener and executor to the ListenableFuture.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected &nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/ListenableFutureTask.html#done()">done</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.util.concurrent.FutureTask"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.util.concurrent.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/FutureTask.html?is-external=true" title="class or interface in java.util.concurrent">FutureTask</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/FutureTask.html?is-external=true#cancel(boolean)" title="class or interface in java.util.concurrent">cancel</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/FutureTask.html?is-external=true#get()" title="class or interface in java.util.concurrent">get</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/FutureTask.html?is-external=true#get(long, java.util.concurrent.TimeUnit)" title="class or interface in java.util.concurrent">get</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/FutureTask.html?is-external=true#isCancelled()" title="class or interface in java.util.concurrent">isCancelled</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/FutureTask.html?is-external=true#isDone()" title="class or interface in java.util.concurrent">isDone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/FutureTask.html?is-external=true#run()" title="class or interface in java.util.concurrent">run</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/FutureTask.html?is-external=true#runAndReset()" title="class or interface in java.util.concurrent">runAndReset</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/FutureTask.html?is-external=true#set(V)" title="class or interface in java.util.concurrent">set</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/FutureTask.html?is-external=true#setException(java.lang.Throwable)" title="class or interface in java.util.concurrent">setException</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.util.concurrent.Future"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface java.util.concurrent.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#cancel(boolean)" title="class or interface in java.util.concurrent">cancel</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#get()" title="class or interface in java.util.concurrent">get</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#get(long, java.util.concurrent.TimeUnit)" title="class or interface in java.util.concurrent">get</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#isCancelled()" title="class or interface in java.util.concurrent">isCancelled</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#isDone()" title="class or interface in java.util.concurrent">isDone</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="ListenableFutureTask(java.util.concurrent.Callable)"><!-- --></A><H3>
-ListenableFutureTask</H3>
-<PRE>
-public <B>ListenableFutureTask</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</A>&lt;<A HREF="../../../../../com/google/common/util/concurrent/ListenableFutureTask.html" title="type parameter in ListenableFutureTask">V</A>&gt;&nbsp;callable)</PRE>
-<DL>
-<DD>Creates a <code>ListenableFutureTask</code> that will upon running, execute the
- given <code>Callable</code>.
-<P>
-<DL>
-<DT><B>Parameters:</B><DD><CODE>callable</CODE> - the callable task
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if callable is null</DL>
-</DL>
-<HR>
-
-<A NAME="ListenableFutureTask(java.lang.Runnable,java.lang.Object)"><!-- --></A><A NAME="ListenableFutureTask(java.lang.Runnable, V)"><!-- --></A><H3>
-ListenableFutureTask</H3>
-<PRE>
-public <B>ListenableFutureTask</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</A>&nbsp;runnable,
-                            <A HREF="../../../../../com/google/common/util/concurrent/ListenableFutureTask.html" title="type parameter in ListenableFutureTask">V</A>&nbsp;result)</PRE>
-<DL>
-<DD>Creates a <code>ListenableFutureTask</code> that will upon running, execute the
- given <code>Runnable</code>, and arrange that <code>get</code> will return the
- given result on successful completion.
-<P>
-<DL>
-<DT><B>Parameters:</B><DD><CODE>runnable</CODE> - the runnable task<DD><CODE>result</CODE> - the result to return on successful completion. If
- you don't need a particular result, consider using
- constructions of the form:
- <code>ListenableFuture&lt;?&gt; f =
-     new ListenableFutureTask&lt;Object&gt;(runnable, null)</code>
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</A></CODE> - if runnable is null</DL>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="addListener(java.lang.Runnable, java.util.concurrent.Executor)"><!-- --></A><H3>
-addListener</H3>
-<PRE>
-public void <B>addListener</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</A>&nbsp;listener,
-                        <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executor.html?is-external=true" title="class or interface in java.util.concurrent">Executor</A>&nbsp;exec)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html#addListener(java.lang.Runnable, java.util.concurrent.Executor)">ListenableFuture</A></CODE></B></DD>
-<DD><p>Adds a listener and executor to the ListenableFuture.
- The listener will be <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executor.html?is-external=true#execute(java.lang.Runnable)" title="class or interface in java.util.concurrent">passed
- to the executor</A> for execution when the <code>Future</code>'s computation is
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#isDone()" title="class or interface in java.util.concurrent">complete</A>.
-
- <p>There is no guaranteed ordering of execution of listeners, they may get
- called in the order they were added and they may get called out of order,
- but any listener added through this method is guaranteed to be called once
- the computation is complete.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html#addListener(java.lang.Runnable, java.util.concurrent.Executor)">addListener</A></CODE> in interface <CODE><A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;<A HREF="../../../../../com/google/common/util/concurrent/ListenableFutureTask.html" title="type parameter in ListenableFutureTask">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>listener</CODE> - the listener to run when the computation is complete.<DD><CODE>exec</CODE> - the executor to run the listener in.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="done()"><!-- --></A><H3>
-done</H3>
-<PRE>
-protected void <B>done</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/FutureTask.html?is-external=true#done()" title="class or interface in java.util.concurrent">done</A></CODE> in class <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/FutureTask.html?is-external=true" title="class or interface in java.util.concurrent">FutureTask</A>&lt;<A HREF="../../../../../com/google/common/util/concurrent/ListenableFutureTask.html" title="type parameter in ListenableFutureTask">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ListenableFutureTask.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/NamingThreadFactory.html" title="class in com.google.common.util.concurrent"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/util/concurrent/ListenableFutureTask.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ListenableFutureTask.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/util/concurrent/NamingThreadFactory.html b/javadoc/com/google/common/util/concurrent/NamingThreadFactory.html
deleted file mode 100644
index 7b0b1fb..0000000
--- a/javadoc/com/google/common/util/concurrent/NamingThreadFactory.html
+++ /dev/null
@@ -1,342 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-NamingThreadFactory (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="NamingThreadFactory (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/NamingThreadFactory.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/ListenableFutureTask.html" title="class in com.google.common.util.concurrent"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/SimpleTimeLimiter.html" title="class in com.google.common.util.concurrent"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/util/concurrent/NamingThreadFactory.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="NamingThreadFactory.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.util.concurrent</FONT>
-<BR>
-Class NamingThreadFactory</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.util.concurrent.NamingThreadFactory</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadFactory.html?is-external=true" title="class or interface in java.util.concurrent">ThreadFactory</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public class <B>NamingThreadFactory</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A><DT>implements <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadFactory.html?is-external=true" title="class or interface in java.util.concurrent">ThreadFactory</A></DL>
-</PRE>
-
-<P>
-A ThreadFactory which decorates another ThreadFactory to set a name on
- each thread created.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2009.09.15 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Kevin Bourrillion</DD>
-</DL>
-<HR>
-
-<P>
-<!-- =========== FIELD SUMMARY =========== -->
-
-<A NAME="field_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Field Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadFactory.html?is-external=true" title="class or interface in java.util.concurrent">ThreadFactory</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/NamingThreadFactory.html#DEFAULT_FACTORY">DEFAULT_FACTORY</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/NamingThreadFactory.html#NamingThreadFactory(java.lang.String)">NamingThreadFactory</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;format)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new factory that delegates to the default thread factory for
- thread creation, then uses <code>format</code> to construct a name for the new
- thread.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/NamingThreadFactory.html#NamingThreadFactory(java.lang.String, java.util.concurrent.ThreadFactory)">NamingThreadFactory</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;format,
-                    <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadFactory.html?is-external=true" title="class or interface in java.util.concurrent">ThreadFactory</A>&nbsp;backingFactory)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new factory that delegates to <code>backingFactory</code> for thread
- creation, then uses <code>format</code> to construct a name for the new thread.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Thread.html?is-external=true" title="class or interface in java.lang">Thread</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/NamingThreadFactory.html#newThread(java.lang.Runnable)">newThread</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</A>&nbsp;r)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ FIELD DETAIL =========== -->
-
-<A NAME="field_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Field Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="DEFAULT_FACTORY"><!-- --></A><H3>
-DEFAULT_FACTORY</H3>
-<PRE>
-public static final <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadFactory.html?is-external=true" title="class or interface in java.util.concurrent">ThreadFactory</A> <B>DEFAULT_FACTORY</B></PRE>
-<DL>
-<DL>
-</DL>
-</DL>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="NamingThreadFactory(java.lang.String)"><!-- --></A><H3>
-NamingThreadFactory</H3>
-<PRE>
-public <B>NamingThreadFactory</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;format)</PRE>
-<DL>
-<DD>Creates a new factory that delegates to the default thread factory for
- thread creation, then uses <code>format</code> to construct a name for the new
- thread.
-<P>
-<DL>
-<DT><B>Parameters:</B><DD><CODE>format</CODE> - a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true#format(java.lang.String, java.lang.Object...)" title="class or interface in java.lang"><CODE>String.format(String, Object...)</CODE></A>-compatible format
-     String, to which a unique integer (0, 1, etc.) will be supplied as the
-     single parameter. This integer will be unique to this instance of
-     NamingThreadFactory and will be assigned sequentially.</DL>
-</DL>
-<HR>
-
-<A NAME="NamingThreadFactory(java.lang.String, java.util.concurrent.ThreadFactory)"><!-- --></A><H3>
-NamingThreadFactory</H3>
-<PRE>
-public <B>NamingThreadFactory</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;format,
-                           <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadFactory.html?is-external=true" title="class or interface in java.util.concurrent">ThreadFactory</A>&nbsp;backingFactory)</PRE>
-<DL>
-<DD>Creates a new factory that delegates to <code>backingFactory</code> for thread
- creation, then uses <code>format</code> to construct a name for the new thread.
-<P>
-<DL>
-<DT><B>Parameters:</B><DD><CODE>format</CODE> - a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true#format(java.lang.String, java.lang.Object...)" title="class or interface in java.lang"><CODE>String.format(String, Object...)</CODE></A>-compatible format
-     String, to which a unique integer (0, 1, etc.) will be supplied as the
-     single parameter<DD><CODE>backingFactory</CODE> - the factory that will actually create the threads
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/IllegalFormatException.html?is-external=true" title="class or interface in java.util">IllegalFormatException</A></CODE> - if <code>format</code> is invalid</DL>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="newThread(java.lang.Runnable)"><!-- --></A><H3>
-newThread</H3>
-<PRE>
-public <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Thread.html?is-external=true" title="class or interface in java.lang">Thread</A> <B>newThread</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</A>&nbsp;r)</PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadFactory.html?is-external=true#newThread(java.lang.Runnable)" title="class or interface in java.util.concurrent">newThread</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadFactory.html?is-external=true" title="class or interface in java.util.concurrent">ThreadFactory</A></CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/NamingThreadFactory.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/ListenableFutureTask.html" title="class in com.google.common.util.concurrent"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/SimpleTimeLimiter.html" title="class in com.google.common.util.concurrent"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/util/concurrent/NamingThreadFactory.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="NamingThreadFactory.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/util/concurrent/SimpleTimeLimiter.html b/javadoc/com/google/common/util/concurrent/SimpleTimeLimiter.html
deleted file mode 100644
index d434a88..0000000
--- a/javadoc/com/google/common/util/concurrent/SimpleTimeLimiter.html
+++ /dev/null
@@ -1,400 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-SimpleTimeLimiter (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="SimpleTimeLimiter (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/SimpleTimeLimiter.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/NamingThreadFactory.html" title="class in com.google.common.util.concurrent"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/TimeLimiter.html" title="interface in com.google.common.util.concurrent"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/util/concurrent/SimpleTimeLimiter.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="SimpleTimeLimiter.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.util.concurrent</FONT>
-<BR>
-Class SimpleTimeLimiter</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.util.concurrent.SimpleTimeLimiter</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../../com/google/common/util/concurrent/TimeLimiter.html" title="interface in com.google.common.util.concurrent">TimeLimiter</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public class <B>SimpleTimeLimiter</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A><DT>implements <A HREF="../../../../../com/google/common/util/concurrent/TimeLimiter.html" title="interface in com.google.common.util.concurrent">TimeLimiter</A></DL>
-</PRE>
-
-<P>
-A TimeLimiter that runs method calls in the background using an
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ExecutorService</CODE></A>.  If the time limit expires for a given method call,
- the thread running the call will be interrupted.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2009.09.15 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Kevin Bourrillion</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/SimpleTimeLimiter.html#SimpleTimeLimiter()">SimpleTimeLimiter</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a TimeLimiter instance using a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executors.html?is-external=true#newCachedThreadPool()" title="class or interface in java.util.concurrent"><CODE>Executors.newCachedThreadPool()</CODE></A> to execute proxied
- method calls.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/SimpleTimeLimiter.html#SimpleTimeLimiter(java.util.concurrent.ExecutorService)">SimpleTimeLimiter</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</A>&nbsp;executor)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a TimeLimiter instance using the given executor service to
- execute proxied method calls.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; T</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/SimpleTimeLimiter.html#callWithTimeout(java.util.concurrent.Callable, long, java.util.concurrent.TimeUnit, boolean)">callWithTimeout</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</A>&lt;T&gt;&nbsp;callable,
-                long&nbsp;timeoutDuration,
-                <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</A>&nbsp;timeoutUnit,
-                boolean&nbsp;amInterruptible)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Invokes a specified Callable, timing out after the specified time limit.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; T</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/SimpleTimeLimiter.html#newProxy(T, java.lang.Class, long, java.util.concurrent.TimeUnit)">newProxy</A></B>(T&nbsp;target,
-         <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;interfaceType,
-         long&nbsp;timeoutDuration,
-         <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</A>&nbsp;timeoutUnit)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an instance of <code>interfaceType</code> that delegates all method
- calls to the <code>target</code> object, enforcing the specified time limit on
- each call.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="SimpleTimeLimiter(java.util.concurrent.ExecutorService)"><!-- --></A><H3>
-SimpleTimeLimiter</H3>
-<PRE>
-public <B>SimpleTimeLimiter</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</A>&nbsp;executor)</PRE>
-<DL>
-<DD>Constructs a TimeLimiter instance using the given executor service to
- execute proxied method calls.
- <p>
- <b>Warning:</b> using a bounded executor
- may be counterproductive!  If the thread pool fills up, any time callers
- spend waiting for a thread may count toward their time limit, and in
- this case the call may even time out before the target method is ever
- invoked.
-<P>
-<DL>
-<DT><B>Parameters:</B><DD><CODE>executor</CODE> - the ExecutorService that will execute the method calls on
-     the target objects; for example, a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executors.html?is-external=true#newCachedThreadPool()" title="class or interface in java.util.concurrent"><CODE>Executors.newCachedThreadPool()</CODE></A>.</DL>
-</DL>
-<HR>
-
-<A NAME="SimpleTimeLimiter()"><!-- --></A><H3>
-SimpleTimeLimiter</H3>
-<PRE>
-public <B>SimpleTimeLimiter</B>()</PRE>
-<DL>
-<DD>Constructs a TimeLimiter instance using a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executors.html?is-external=true#newCachedThreadPool()" title="class or interface in java.util.concurrent"><CODE>Executors.newCachedThreadPool()</CODE></A> to execute proxied
- method calls.
-
- <p><b>Warning:</b> using a bounded executor may be counterproductive! If
- the thread pool fills up, any time callers spend waiting for a thread may
- count toward their time limit, and in this case the call may even time out
- before the target method is ever invoked.
-<P>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="newProxy(java.lang.Object,java.lang.Class,long,java.util.concurrent.TimeUnit)"><!-- --></A><A NAME="newProxy(T, java.lang.Class, long, java.util.concurrent.TimeUnit)"><!-- --></A><H3>
-newProxy</H3>
-<PRE>
-public &lt;T&gt; T <B>newProxy</B>(T&nbsp;target,
-                      <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;interfaceType,
-                      long&nbsp;timeoutDuration,
-                      <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</A>&nbsp;timeoutUnit)</PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/google/common/util/concurrent/TimeLimiter.html#newProxy(T, java.lang.Class, long, java.util.concurrent.TimeUnit)">TimeLimiter</A></CODE></B></DD>
-<DD>Returns an instance of <code>interfaceType</code> that delegates all method
- calls to the <code>target</code> object, enforcing the specified time limit on
- each call.  This time-limited delegation is also performed for calls to
- <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang"><CODE>Object.hashCode()</CODE></A>, and
- <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang"><CODE>Object.toString()</CODE></A>.
- <p>
- If the target method call finishes before the limit is reached, the return
- value or exception is propagated to the caller exactly as-is. If, on the
- other hand, the time limit is reached, the proxy will attempt to abort the
- call to the target, and will throw an <A HREF="../../../../../com/google/common/util/concurrent/UncheckedTimeoutException.html" title="class in com.google.common.util.concurrent"><CODE>UncheckedTimeoutException</CODE></A> to
- the caller.
- <p>
- It is important to note that the primary purpose of the proxy object is to
- return control to the caller when the timeout elapses; aborting the target
- method call is of secondary concern.  The particular nature and strength
- of the guarantees made by the proxy is implementation-dependent.  However,
- it is important that each of the methods on the target object behaves
- appropriately when its thread is interrupted.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/google/common/util/concurrent/TimeLimiter.html#newProxy(T, java.lang.Class, long, java.util.concurrent.TimeUnit)">newProxy</A></CODE> in interface <CODE><A HREF="../../../../../com/google/common/util/concurrent/TimeLimiter.html" title="interface in com.google.common.util.concurrent">TimeLimiter</A></CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>target</CODE> - the object to proxy<DD><CODE>interfaceType</CODE> - the interface you wish the returned proxy to
-     implement<DD><CODE>timeoutDuration</CODE> - with timeoutUnit, the maximum length of time that
-     callers are willing to wait on each method call to the proxy<DD><CODE>timeoutUnit</CODE> - with timeoutDuration, the maximum length of time that
-     callers are willing to wait on each method call to the proxy
-<DT><B>Returns:</B><DD>a time-limiting proxy</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="callWithTimeout(java.util.concurrent.Callable, long, java.util.concurrent.TimeUnit, boolean)"><!-- --></A><H3>
-callWithTimeout</H3>
-<PRE>
-public &lt;T&gt; T <B>callWithTimeout</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</A>&lt;T&gt;&nbsp;callable,
-                             long&nbsp;timeoutDuration,
-                             <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</A>&nbsp;timeoutUnit,
-                             boolean&nbsp;amInterruptible)
-                  throws <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</A></PRE>
-<DL>
-<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/google/common/util/concurrent/TimeLimiter.html#callWithTimeout(java.util.concurrent.Callable, long, java.util.concurrent.TimeUnit, boolean)">TimeLimiter</A></CODE></B></DD>
-<DD>Invokes a specified Callable, timing out after the specified time limit.
- If the target method call finished before the limit is reached, the return
- value or exception is propagated to the caller exactly as-is.  If, on the
- other hand, the time limit is reached, we attempt to abort the call to the
- target, and throw an <A HREF="../../../../../com/google/common/util/concurrent/UncheckedTimeoutException.html" title="class in com.google.common.util.concurrent"><CODE>UncheckedTimeoutException</CODE></A> to the caller.
- <p>
- <b>Warning:</b> The future of this method is in doubt.  It may be nuked, or
- changed significantly.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/google/common/util/concurrent/TimeLimiter.html#callWithTimeout(java.util.concurrent.Callable, long, java.util.concurrent.TimeUnit, boolean)">callWithTimeout</A></CODE> in interface <CODE><A HREF="../../../../../com/google/common/util/concurrent/TimeLimiter.html" title="interface in com.google.common.util.concurrent">TimeLimiter</A></CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>callable</CODE> - the Callable to execute<DD><CODE>timeoutDuration</CODE> - with timeoutUnit, the maximum length of time to wait<DD><CODE>timeoutUnit</CODE> - with timeoutDuration, the maximum length of time to wait<DD><CODE>amInterruptible</CODE> - whether to respond to thread interruption by aborting
-     the operation and throwing InterruptedException; if false, the
-     operation is allowed to complete or time out, and the current thread's
-     interrupt status is re-asserted.
-<DT><B>Returns:</B><DD>the result returned by the Callable
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</A></CODE> - if <code>interruptible</code> is true and our
-     thread is interrupted during execution
-<DD><CODE><A HREF="../../../../../com/google/common/util/concurrent/UncheckedTimeoutException.html" title="class in com.google.common.util.concurrent">UncheckedTimeoutException</A></CODE> - if the time limit is reached
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</A></CODE></DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/SimpleTimeLimiter.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/NamingThreadFactory.html" title="class in com.google.common.util.concurrent"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/TimeLimiter.html" title="interface in com.google.common.util.concurrent"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/util/concurrent/SimpleTimeLimiter.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="SimpleTimeLimiter.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/util/concurrent/TimeLimiter.html b/javadoc/com/google/common/util/concurrent/TimeLimiter.html
deleted file mode 100644
index 0309c3d..0000000
--- a/javadoc/com/google/common/util/concurrent/TimeLimiter.html
+++ /dev/null
@@ -1,325 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-TimeLimiter (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="TimeLimiter (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/TimeLimiter.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/SimpleTimeLimiter.html" title="class in com.google.common.util.concurrent"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/UncheckedTimeoutException.html" title="class in com.google.common.util.concurrent"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/util/concurrent/TimeLimiter.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="TimeLimiter.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.util.concurrent</FONT>
-<BR>
-Interface TimeLimiter</H2>
-<DL>
-<DT><B>All Known Implementing Classes:</B> <DD><A HREF="../../../../../com/google/common/util/concurrent/FakeTimeLimiter.html" title="class in com.google.common.util.concurrent">FakeTimeLimiter</A>, <A HREF="../../../../../com/google/common/util/concurrent/SimpleTimeLimiter.html" title="class in com.google.common.util.concurrent">SimpleTimeLimiter</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public interface <B>TimeLimiter</B></DL>
-</PRE>
-
-<P>
-Produces proxies that impose a time limit on method
- calls to the proxied object.  For example, to return the value of
- <code>target.someMethod()</code>, but substitute <code>DEFAULT_VALUE</code> if this
- method call takes over 50 ms, you can use this code:
- <pre>
-   TimeLimiter limiter = . . .;
-   TargetType proxy = limiter.newProxy(
-       target, TargetType.class, 50, TimeUnit.MILLISECONDS);
-   try {
-     return proxy.someMethod();
-   } catch (UncheckedTimeoutException e) {
-     return DEFAULT_VALUE;
-   }
- </pre>
- Please see <code>SimpleTimeLimiterTest</code> for more usage examples.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2009.09.15 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Kevin Bourrillion</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; T</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/TimeLimiter.html#callWithTimeout(java.util.concurrent.Callable, long, java.util.concurrent.TimeUnit, boolean)">callWithTimeout</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</A>&lt;T&gt;&nbsp;callable,
-                long&nbsp;timeoutDuration,
-                <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</A>&nbsp;timeoutUnit,
-                boolean&nbsp;interruptible)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Invokes a specified Callable, timing out after the specified time limit.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; T</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/TimeLimiter.html#newProxy(T, java.lang.Class, long, java.util.concurrent.TimeUnit)">newProxy</A></B>(T&nbsp;target,
-         <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;interfaceType,
-         long&nbsp;timeoutDuration,
-         <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</A>&nbsp;timeoutUnit)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an instance of <code>interfaceType</code> that delegates all method
- calls to the <code>target</code> object, enforcing the specified time limit on
- each call.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="newProxy(java.lang.Object,java.lang.Class,long,java.util.concurrent.TimeUnit)"><!-- --></A><A NAME="newProxy(T, java.lang.Class, long, java.util.concurrent.TimeUnit)"><!-- --></A><H3>
-newProxy</H3>
-<PRE>
-&lt;T&gt; T <B>newProxy</B>(T&nbsp;target,
-               <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</A>&lt;T&gt;&nbsp;interfaceType,
-               long&nbsp;timeoutDuration,
-               <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</A>&nbsp;timeoutUnit)</PRE>
-<DL>
-<DD>Returns an instance of <code>interfaceType</code> that delegates all method
- calls to the <code>target</code> object, enforcing the specified time limit on
- each call.  This time-limited delegation is also performed for calls to
- <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang"><CODE>Object.equals(java.lang.Object)</CODE></A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang"><CODE>Object.hashCode()</CODE></A>, and
- <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang"><CODE>Object.toString()</CODE></A>.
- <p>
- If the target method call finishes before the limit is reached, the return
- value or exception is propagated to the caller exactly as-is. If, on the
- other hand, the time limit is reached, the proxy will attempt to abort the
- call to the target, and will throw an <A HREF="../../../../../com/google/common/util/concurrent/UncheckedTimeoutException.html" title="class in com.google.common.util.concurrent"><CODE>UncheckedTimeoutException</CODE></A> to
- the caller.
- <p>
- It is important to note that the primary purpose of the proxy object is to
- return control to the caller when the timeout elapses; aborting the target
- method call is of secondary concern.  The particular nature and strength
- of the guarantees made by the proxy is implementation-dependent.  However,
- it is important that each of the methods on the target object behaves
- appropriately when its thread is interrupted.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>target</CODE> - the object to proxy<DD><CODE>interfaceType</CODE> - the interface you wish the returned proxy to
-     implement<DD><CODE>timeoutDuration</CODE> - with timeoutUnit, the maximum length of time that
-     callers are willing to wait on each method call to the proxy<DD><CODE>timeoutUnit</CODE> - with timeoutDuration, the maximum length of time that
-     callers are willing to wait on each method call to the proxy
-<DT><B>Returns:</B><DD>a time-limiting proxy
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if <code>interfaceType</code> is a regular
-     class, enum, or annotation type, rather than an interface</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="callWithTimeout(java.util.concurrent.Callable, long, java.util.concurrent.TimeUnit, boolean)"><!-- --></A><H3>
-callWithTimeout</H3>
-<PRE>
-&lt;T&gt; T <B>callWithTimeout</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</A>&lt;T&gt;&nbsp;callable,
-                      long&nbsp;timeoutDuration,
-                      <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</A>&nbsp;timeoutUnit,
-                      boolean&nbsp;interruptible)
-                  throws <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</A></PRE>
-<DL>
-<DD>Invokes a specified Callable, timing out after the specified time limit.
- If the target method call finished before the limit is reached, the return
- value or exception is propagated to the caller exactly as-is.  If, on the
- other hand, the time limit is reached, we attempt to abort the call to the
- target, and throw an <A HREF="../../../../../com/google/common/util/concurrent/UncheckedTimeoutException.html" title="class in com.google.common.util.concurrent"><CODE>UncheckedTimeoutException</CODE></A> to the caller.
- <p>
- <b>Warning:</b> The future of this method is in doubt.  It may be nuked, or
- changed significantly.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>callable</CODE> - the Callable to execute<DD><CODE>timeoutDuration</CODE> - with timeoutUnit, the maximum length of time to wait<DD><CODE>timeoutUnit</CODE> - with timeoutDuration, the maximum length of time to wait<DD><CODE>interruptible</CODE> - whether to respond to thread interruption by aborting
-     the operation and throwing InterruptedException; if false, the
-     operation is allowed to complete or time out, and the current thread's
-     interrupt status is re-asserted.
-<DT><B>Returns:</B><DD>the result returned by the Callable
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</A></CODE> - if <code>interruptible</code> is true and our
-     thread is interrupted during execution
-<DD><CODE><A HREF="../../../../../com/google/common/util/concurrent/UncheckedTimeoutException.html" title="class in com.google.common.util.concurrent">UncheckedTimeoutException</A></CODE> - if the time limit is reached
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</A></CODE></DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/TimeLimiter.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/SimpleTimeLimiter.html" title="class in com.google.common.util.concurrent"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/UncheckedTimeoutException.html" title="class in com.google.common.util.concurrent"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/util/concurrent/TimeLimiter.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="TimeLimiter.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/util/concurrent/UncheckedTimeoutException.html b/javadoc/com/google/common/util/concurrent/UncheckedTimeoutException.html
deleted file mode 100644
index 2a6f23b..0000000
--- a/javadoc/com/google/common/util/concurrent/UncheckedTimeoutException.html
+++ /dev/null
@@ -1,293 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-UncheckedTimeoutException (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="UncheckedTimeoutException (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/UncheckedTimeoutException.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/TimeLimiter.html" title="interface in com.google.common.util.concurrent"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/UninterruptibleFuture.html" title="interface in com.google.common.util.concurrent"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/util/concurrent/UncheckedTimeoutException.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="UncheckedTimeoutException.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_java.lang.Throwable">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;METHOD</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.util.concurrent</FONT>
-<BR>
-Class UncheckedTimeoutException</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">java.lang.Throwable</A>
-      <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">java.lang.Exception</A>
-          <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by "><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/RuntimeException.html?is-external=true" title="class or interface in java.lang">java.lang.RuntimeException</A>
-              <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.util.concurrent.UncheckedTimeoutException</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public class <B>UncheckedTimeoutException</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/RuntimeException.html?is-external=true" title="class or interface in java.lang">RuntimeException</A></DL>
-</PRE>
-
-<P>
-Unchecked version of <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeoutException.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>TimeoutException</CODE></A>.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2009.09.15 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Kevin Bourrillion</DD>
-<DT><B>See Also:</B><DD><A HREF="../../../../../serialized-form.html#com.google.common.util.concurrent.UncheckedTimeoutException">Serialized Form</A></DL>
-<HR>
-
-<P>
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/UncheckedTimeoutException.html#UncheckedTimeoutException()">UncheckedTimeoutException</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/UncheckedTimeoutException.html#UncheckedTimeoutException(java.lang.String)">UncheckedTimeoutException</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;message)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/UncheckedTimeoutException.html#UncheckedTimeoutException(java.lang.String, java.lang.Throwable)">UncheckedTimeoutException</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;message,
-                          <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A>&nbsp;cause)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/UncheckedTimeoutException.html#UncheckedTimeoutException(java.lang.Throwable)">UncheckedTimeoutException</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A>&nbsp;cause)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Throwable"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true#fillInStackTrace()" title="class or interface in java.lang">fillInStackTrace</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true#getCause()" title="class or interface in java.lang">getCause</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true#getLocalizedMessage()" title="class or interface in java.lang">getLocalizedMessage</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true#getMessage()" title="class or interface in java.lang">getMessage</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true#getStackTrace()" title="class or interface in java.lang">getStackTrace</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true#initCause(java.lang.Throwable)" title="class or interface in java.lang">initCause</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true#printStackTrace()" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true#printStackTrace(java.io.PrintStream)" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true#printStackTrace(java.io.PrintWriter)" title="class or interface in java.lang">printStackTrace</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true#setStackTrace(java.lang.StackTraceElement[])" title="class or interface in java.lang">setStackTrace</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true#toString()" title="class or interface in java.lang">toString</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="UncheckedTimeoutException()"><!-- --></A><H3>
-UncheckedTimeoutException</H3>
-<PRE>
-public <B>UncheckedTimeoutException</B>()</PRE>
-<DL>
-</DL>
-<HR>
-
-<A NAME="UncheckedTimeoutException(java.lang.String)"><!-- --></A><H3>
-UncheckedTimeoutException</H3>
-<PRE>
-public <B>UncheckedTimeoutException</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;message)</PRE>
-<DL>
-</DL>
-<HR>
-
-<A NAME="UncheckedTimeoutException(java.lang.Throwable)"><!-- --></A><H3>
-UncheckedTimeoutException</H3>
-<PRE>
-public <B>UncheckedTimeoutException</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A>&nbsp;cause)</PRE>
-<DL>
-</DL>
-<HR>
-
-<A NAME="UncheckedTimeoutException(java.lang.String, java.lang.Throwable)"><!-- --></A><H3>
-UncheckedTimeoutException</H3>
-<PRE>
-public <B>UncheckedTimeoutException</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&nbsp;message,
-                                 <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A>&nbsp;cause)</PRE>
-<DL>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/UncheckedTimeoutException.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/TimeLimiter.html" title="interface in com.google.common.util.concurrent"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/UninterruptibleFuture.html" title="interface in com.google.common.util.concurrent"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/util/concurrent/UncheckedTimeoutException.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="UncheckedTimeoutException.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_java.lang.Throwable">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;METHOD</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/util/concurrent/UninterruptibleFuture.html b/javadoc/com/google/common/util/concurrent/UninterruptibleFuture.html
deleted file mode 100644
index 11ad873..0000000
--- a/javadoc/com/google/common/util/concurrent/UninterruptibleFuture.html
+++ /dev/null
@@ -1,266 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-UninterruptibleFuture (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="UninterruptibleFuture (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/UninterruptibleFuture.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/UncheckedTimeoutException.html" title="class in com.google.common.util.concurrent"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/ValueFuture.html" title="class in com.google.common.util.concurrent"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/util/concurrent/UninterruptibleFuture.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="UninterruptibleFuture.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.util.concurrent</FONT>
-<BR>
-Interface UninterruptibleFuture&lt;V&gt;</H2>
-<DL>
-<DT><B>All Superinterfaces:</B> <DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;V&gt;</DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public interface <B>UninterruptibleFuture&lt;V&gt;</B><DT>extends <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;V&gt;</DL>
-</PRE>
-
-<P>
-A <code>Future</code> whose <code>get</code> calls cannot be interrupted. If a thread
- is interrupted during such a call, the call continues to block until the
- result is available or the timeout elapses, and only then re-interrupts the
- thread. Obtain an instance of this type using <A HREF="../../../../../com/google/common/util/concurrent/Futures.html#makeUninterruptible(java.util.concurrent.Future)"><CODE>Futures.makeUninterruptible(Future)</CODE></A>.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2009.09.15 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Kevin Bourrillion</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/UninterruptibleFuture.html" title="type parameter in UninterruptibleFuture">V</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/UninterruptibleFuture.html#get()">get</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/UninterruptibleFuture.html" title="type parameter in UninterruptibleFuture">V</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/UninterruptibleFuture.html#get(long, java.util.concurrent.TimeUnit)">get</A></B>(long&nbsp;timeout,
-    <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</A>&nbsp;unit)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.util.concurrent.Future"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface java.util.concurrent.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#cancel(boolean)" title="class or interface in java.util.concurrent">cancel</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#isCancelled()" title="class or interface in java.util.concurrent">isCancelled</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#isDone()" title="class or interface in java.util.concurrent">isDone</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="get()"><!-- --></A><H3>
-get</H3>
-<PRE>
-<A HREF="../../../../../com/google/common/util/concurrent/UninterruptibleFuture.html" title="type parameter in UninterruptibleFuture">V</A> <B>get</B>()
-      throws <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutionException.html?is-external=true" title="class or interface in java.util.concurrent">ExecutionException</A></PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#get()" title="class or interface in java.util.concurrent">get</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;<A HREF="../../../../../com/google/common/util/concurrent/UninterruptibleFuture.html" title="type parameter in UninterruptibleFuture">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutionException.html?is-external=true" title="class or interface in java.util.concurrent">ExecutionException</A></CODE></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="get(long, java.util.concurrent.TimeUnit)"><!-- --></A><H3>
-get</H3>
-<PRE>
-<A HREF="../../../../../com/google/common/util/concurrent/UninterruptibleFuture.html" title="type parameter in UninterruptibleFuture">V</A> <B>get</B>(long&nbsp;timeout,
-      <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</A>&nbsp;unit)
-      throws <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutionException.html?is-external=true" title="class or interface in java.util.concurrent">ExecutionException</A>,
-             <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeoutException.html?is-external=true" title="class or interface in java.util.concurrent">TimeoutException</A></PRE>
-<DL>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#get(long, java.util.concurrent.TimeUnit)" title="class or interface in java.util.concurrent">get</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;<A HREF="../../../../../com/google/common/util/concurrent/UninterruptibleFuture.html" title="type parameter in UninterruptibleFuture">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutionException.html?is-external=true" title="class or interface in java.util.concurrent">ExecutionException</A></CODE>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeoutException.html?is-external=true" title="class or interface in java.util.concurrent">TimeoutException</A></CODE></DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/UninterruptibleFuture.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/UncheckedTimeoutException.html" title="class in com.google.common.util.concurrent"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/ValueFuture.html" title="class in com.google.common.util.concurrent"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/util/concurrent/UninterruptibleFuture.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="UninterruptibleFuture.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/util/concurrent/ValueFuture.html b/javadoc/com/google/common/util/concurrent/ValueFuture.html
deleted file mode 100644
index 53f15be..0000000
--- a/javadoc/com/google/common/util/concurrent/ValueFuture.html
+++ /dev/null
@@ -1,352 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-ValueFuture (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="ValueFuture (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ValueFuture.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/UninterruptibleFuture.html" title="interface in com.google.common.util.concurrent"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;NEXT CLASS</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/util/concurrent/ValueFuture.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ValueFuture.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.common.util.concurrent</FONT>
-<BR>
-Class ValueFuture&lt;V&gt;</H2>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</A>
-  <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html" title="class in com.google.common.util.concurrent">com.google.common.util.concurrent.AbstractFuture</A>&lt;V&gt;
-      <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../../com/google/common/util/concurrent/AbstractListenableFuture.html" title="class in com.google.common.util.concurrent">com.google.common.util.concurrent.AbstractListenableFuture</A>&lt;V&gt;
-          <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by "><B>com.google.common.util.concurrent.ValueFuture&lt;V&gt;</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;V&gt;, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;V&gt;</DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public class <B>ValueFuture&lt;V&gt;</B><DT>extends <A HREF="../../../../../com/google/common/util/concurrent/AbstractListenableFuture.html" title="class in com.google.common.util.concurrent">AbstractListenableFuture</A>&lt;V&gt;</DL>
-</PRE>
-
-<P>
-A simple ListenableFuture that holds a value or an exception.
-<P>
-
-<P>
-<DL>
-<DT><B>Since:</B></DT>
-  <DD>2009.09.15 <b>tentative</b></DD>
-<DT><B>Author:</B></DT>
-  <DD>Sven Mawson</DD>
-</DL>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/ValueFuture.html#cancel(boolean)">cancel</A></B>(boolean&nbsp;mayInterruptIfRunning)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../com/google/common/util/concurrent/ValueFuture.html" title="class in com.google.common.util.concurrent">ValueFuture</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/ValueFuture.html#create()">create</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>ValueFuture</code> in the default state.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/ValueFuture.html#set(V)">set</A></B>(<A HREF="../../../../../com/google/common/util/concurrent/ValueFuture.html" title="type parameter in ValueFuture">V</A>&nbsp;newValue)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sets the value of this future.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/common/util/concurrent/ValueFuture.html#setException(java.lang.Throwable)">setException</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A>&nbsp;t)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sets the future to having failed with the given exception.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.util.concurrent.AbstractListenableFuture"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class com.google.common.util.concurrent.<A HREF="../../../../../com/google/common/util/concurrent/AbstractListenableFuture.html" title="class in com.google.common.util.concurrent">AbstractListenableFuture</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../../com/google/common/util/concurrent/AbstractListenableFuture.html#addListener(java.lang.Runnable, java.util.concurrent.Executor)">addListener</A>, <A HREF="../../../../../com/google/common/util/concurrent/AbstractListenableFuture.html#done()">done</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_com.google.common.util.concurrent.AbstractFuture"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class com.google.common.util.concurrent.<A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html" title="class in com.google.common.util.concurrent">AbstractFuture</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html#cancel()">cancel</A>, <A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html#get()">get</A>, <A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html#get(long, java.util.concurrent.TimeUnit)">get</A>, <A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html#isCancelled()">isCancelled</A>, <A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html#isDone()">isDone</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.util.concurrent.Future"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from interface java.util.concurrent.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A></B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#get()" title="class or interface in java.util.concurrent">get</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#get(long, java.util.concurrent.TimeUnit)" title="class or interface in java.util.concurrent">get</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#isCancelled()" title="class or interface in java.util.concurrent">isCancelled</A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#isDone()" title="class or interface in java.util.concurrent">isDone</A></CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="create()"><!-- --></A><H3>
-create</H3>
-<PRE>
-public static &lt;T&gt; <A HREF="../../../../../com/google/common/util/concurrent/ValueFuture.html" title="class in com.google.common.util.concurrent">ValueFuture</A>&lt;T&gt; <B>create</B>()</PRE>
-<DL>
-<DD>Creates a new <code>ValueFuture</code> in the default state.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="set(java.lang.Object)"><!-- --></A><A NAME="set(V)"><!-- --></A><H3>
-set</H3>
-<PRE>
-public boolean <B>set</B>(<A HREF="../../../../../com/google/common/util/concurrent/ValueFuture.html" title="type parameter in ValueFuture">V</A>&nbsp;newValue)</PRE>
-<DL>
-<DD>Sets the value of this future.  This method will return <code>true</code> if
- the value was successfully set, or <code>false</code> if the future has already
- been set or cancelled.
-<P>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html#set(V)">set</A></CODE> in class <CODE><A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html" title="class in com.google.common.util.concurrent">AbstractFuture</A>&lt;<A HREF="../../../../../com/google/common/util/concurrent/ValueFuture.html" title="type parameter in ValueFuture">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>newValue</CODE> - the value the future should hold.
-<DT><B>Returns:</B><DD>true if the value was successfully set.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="setException(java.lang.Throwable)"><!-- --></A><H3>
-setException</H3>
-<PRE>
-public boolean <B>setException</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A>&nbsp;t)</PRE>
-<DL>
-<DD>Sets the future to having failed with the given exception.  This exception
- will be wrapped in an ExecutionException and thrown from the get methods.
- This method will return <code>true</code> if the exception was successfully set,
- or <code>false</code> if the future has already been set or cancelled.
-<P>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html#setException(java.lang.Throwable)">setException</A></CODE> in class <CODE><A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html" title="class in com.google.common.util.concurrent">AbstractFuture</A>&lt;<A HREF="../../../../../com/google/common/util/concurrent/ValueFuture.html" title="type parameter in ValueFuture">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>t</CODE> - the exception the future should hold.
-<DT><B>Returns:</B><DD>true if the exception was successfully set.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="cancel(boolean)"><!-- --></A><H3>
-cancel</H3>
-<PRE>
-public boolean <B>cancel</B>(boolean&nbsp;mayInterruptIfRunning)</PRE>
-<DL>
-<DD>
-
- <p>A ValueFuture is never considered in the running state, so the
- <code>mayInterruptIfRunning</code> argument is ignored.
-<P>
-<DD><DL>
-<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#cancel(boolean)" title="class or interface in java.util.concurrent">cancel</A></CODE> in interface <CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;<A HREF="../../../../../com/google/common/util/concurrent/ValueFuture.html" title="type parameter in ValueFuture">V</A>&gt;</CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html#cancel(boolean)">cancel</A></CODE> in class <CODE><A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html" title="class in com.google.common.util.concurrent">AbstractFuture</A>&lt;<A HREF="../../../../../com/google/common/util/concurrent/ValueFuture.html" title="type parameter in ValueFuture">V</A>&gt;</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ValueFuture.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/common/util/concurrent/UninterruptibleFuture.html" title="interface in com.google.common.util.concurrent"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;NEXT CLASS</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/util/concurrent/ValueFuture.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ValueFuture.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/util/concurrent/class-use/AbstractCheckedFuture.html b/javadoc/com/google/common/util/concurrent/class-use/AbstractCheckedFuture.html
deleted file mode 100644
index 3174bc2..0000000
--- a/javadoc/com/google/common/util/concurrent/class-use/AbstractCheckedFuture.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.util.concurrent.AbstractCheckedFuture (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.util.concurrent.AbstractCheckedFuture (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html" title="class in com.google.common.util.concurrent"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../../index.html?com/google/common/util/concurrent//class-useAbstractCheckedFuture.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="AbstractCheckedFuture.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.util.concurrent.AbstractCheckedFuture</B></H2>
-</CENTER>
-No usage of com.google.common.util.concurrent.AbstractCheckedFuture
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html" title="class in com.google.common.util.concurrent"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../../index.html?com/google/common/util/concurrent//class-useAbstractCheckedFuture.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="AbstractCheckedFuture.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/util/concurrent/class-use/AbstractExecutionThreadService.html b/javadoc/com/google/common/util/concurrent/class-use/AbstractExecutionThreadService.html
deleted file mode 100644
index 71f34f6..0000000
--- a/javadoc/com/google/common/util/concurrent/class-use/AbstractExecutionThreadService.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.util.concurrent.AbstractExecutionThreadService (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.util.concurrent.AbstractExecutionThreadService (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../com/google/common/util/concurrent/AbstractExecutionThreadService.html" title="class in com.google.common.util.concurrent"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../../index.html?com/google/common/util/concurrent//class-useAbstractExecutionThreadService.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="AbstractExecutionThreadService.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.util.concurrent.AbstractExecutionThreadService</B></H2>
-</CENTER>
-No usage of com.google.common.util.concurrent.AbstractExecutionThreadService
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../com/google/common/util/concurrent/AbstractExecutionThreadService.html" title="class in com.google.common.util.concurrent"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../../index.html?com/google/common/util/concurrent//class-useAbstractExecutionThreadService.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="AbstractExecutionThreadService.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/util/concurrent/class-use/AbstractFuture.html b/javadoc/com/google/common/util/concurrent/class-use/AbstractFuture.html
deleted file mode 100644
index 5f8fab8..0000000
--- a/javadoc/com/google/common/util/concurrent/class-use/AbstractFuture.html
+++ /dev/null
@@ -1,189 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.util.concurrent.AbstractFuture (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.util.concurrent.AbstractFuture (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../com/google/common/util/concurrent/AbstractFuture.html" title="class in com.google.common.util.concurrent"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../../index.html?com/google/common/util/concurrent//class-useAbstractFuture.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="AbstractFuture.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.util.concurrent.AbstractFuture</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../../com/google/common/util/concurrent/AbstractFuture.html" title="class in com.google.common.util.concurrent">AbstractFuture</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.util.concurrent"><B>com.google.common.util.concurrent</B></A></TD>
-<TD>&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.util.concurrent"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../../com/google/common/util/concurrent/AbstractFuture.html" title="class in com.google.common.util.concurrent">AbstractFuture</A> in <A HREF="../../../../../../com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Subclasses of <A HREF="../../../../../../com/google/common/util/concurrent/AbstractFuture.html" title="class in com.google.common.util.concurrent">AbstractFuture</A> in <A HREF="../../../../../../com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../../com/google/common/util/concurrent/AbstractListenableFuture.html" title="class in com.google.common.util.concurrent">AbstractListenableFuture&lt;V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An abstract base implementation of the listener support provided by
- <A HREF="../../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent"><CODE>ListenableFuture</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../../com/google/common/util/concurrent/ValueFuture.html" title="class in com.google.common.util.concurrent">ValueFuture&lt;V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A simple ListenableFuture that holds a value or an exception.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../com/google/common/util/concurrent/AbstractFuture.html" title="class in com.google.common.util.concurrent"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../../index.html?com/google/common/util/concurrent//class-useAbstractFuture.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="AbstractFuture.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/util/concurrent/class-use/AbstractIdleService.html b/javadoc/com/google/common/util/concurrent/class-use/AbstractIdleService.html
deleted file mode 100644
index d014077..0000000
--- a/javadoc/com/google/common/util/concurrent/class-use/AbstractIdleService.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.util.concurrent.AbstractIdleService (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.util.concurrent.AbstractIdleService (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../com/google/common/util/concurrent/AbstractIdleService.html" title="class in com.google.common.util.concurrent"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../../index.html?com/google/common/util/concurrent//class-useAbstractIdleService.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="AbstractIdleService.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.util.concurrent.AbstractIdleService</B></H2>
-</CENTER>
-No usage of com.google.common.util.concurrent.AbstractIdleService
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../com/google/common/util/concurrent/AbstractIdleService.html" title="class in com.google.common.util.concurrent"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../../index.html?com/google/common/util/concurrent//class-useAbstractIdleService.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="AbstractIdleService.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/util/concurrent/class-use/AbstractListenableFuture.html b/javadoc/com/google/common/util/concurrent/class-use/AbstractListenableFuture.html
deleted file mode 100644
index 2261a20..0000000
--- a/javadoc/com/google/common/util/concurrent/class-use/AbstractListenableFuture.html
+++ /dev/null
@@ -1,180 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.util.concurrent.AbstractListenableFuture (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.util.concurrent.AbstractListenableFuture (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../com/google/common/util/concurrent/AbstractListenableFuture.html" title="class in com.google.common.util.concurrent"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../../index.html?com/google/common/util/concurrent//class-useAbstractListenableFuture.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="AbstractListenableFuture.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.util.concurrent.AbstractListenableFuture</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../../com/google/common/util/concurrent/AbstractListenableFuture.html" title="class in com.google.common.util.concurrent">AbstractListenableFuture</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.util.concurrent"><B>com.google.common.util.concurrent</B></A></TD>
-<TD>&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.util.concurrent"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../../com/google/common/util/concurrent/AbstractListenableFuture.html" title="class in com.google.common.util.concurrent">AbstractListenableFuture</A> in <A HREF="../../../../../../com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Subclasses of <A HREF="../../../../../../com/google/common/util/concurrent/AbstractListenableFuture.html" title="class in com.google.common.util.concurrent">AbstractListenableFuture</A> in <A HREF="../../../../../../com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../../com/google/common/util/concurrent/ValueFuture.html" title="class in com.google.common.util.concurrent">ValueFuture&lt;V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A simple ListenableFuture that holds a value or an exception.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../com/google/common/util/concurrent/AbstractListenableFuture.html" title="class in com.google.common.util.concurrent"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../../index.html?com/google/common/util/concurrent//class-useAbstractListenableFuture.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="AbstractListenableFuture.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/util/concurrent/class-use/AbstractService.html b/javadoc/com/google/common/util/concurrent/class-use/AbstractService.html
deleted file mode 100644
index 73bc07d..0000000
--- a/javadoc/com/google/common/util/concurrent/class-use/AbstractService.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.util.concurrent.AbstractService (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.util.concurrent.AbstractService (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../com/google/common/util/concurrent/AbstractService.html" title="class in com.google.common.util.concurrent"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../../index.html?com/google/common/util/concurrent//class-useAbstractService.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="AbstractService.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.util.concurrent.AbstractService</B></H2>
-</CENTER>
-No usage of com.google.common.util.concurrent.AbstractService
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../com/google/common/util/concurrent/AbstractService.html" title="class in com.google.common.util.concurrent"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../../index.html?com/google/common/util/concurrent//class-useAbstractService.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="AbstractService.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/util/concurrent/class-use/Callables.html b/javadoc/com/google/common/util/concurrent/class-use/Callables.html
deleted file mode 100644
index 6039fc3..0000000
--- a/javadoc/com/google/common/util/concurrent/class-use/Callables.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.util.concurrent.Callables (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.util.concurrent.Callables (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../com/google/common/util/concurrent/Callables.html" title="class in com.google.common.util.concurrent"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../../index.html?com/google/common/util/concurrent//class-useCallables.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Callables.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.util.concurrent.Callables</B></H2>
-</CENTER>
-No usage of com.google.common.util.concurrent.Callables
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../com/google/common/util/concurrent/Callables.html" title="class in com.google.common.util.concurrent"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../../index.html?com/google/common/util/concurrent//class-useCallables.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Callables.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/util/concurrent/class-use/CheckedFuture.html b/javadoc/com/google/common/util/concurrent/class-use/CheckedFuture.html
deleted file mode 100644
index 5562d96..0000000
--- a/javadoc/com/google/common/util/concurrent/class-use/CheckedFuture.html
+++ /dev/null
@@ -1,245 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Interface com.google.common.util.concurrent.CheckedFuture (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Interface com.google.common.util.concurrent.CheckedFuture (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../com/google/common/util/concurrent/CheckedFuture.html" title="interface in com.google.common.util.concurrent"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../../index.html?com/google/common/util/concurrent//class-useCheckedFuture.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="CheckedFuture.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Interface<br>com.google.common.util.concurrent.CheckedFuture</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../../com/google/common/util/concurrent/CheckedFuture.html" title="interface in com.google.common.util.concurrent">CheckedFuture</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.util.concurrent"><B>com.google.common.util.concurrent</B></A></TD>
-<TD>&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.util.concurrent"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../../com/google/common/util/concurrent/CheckedFuture.html" title="interface in com.google.common.util.concurrent">CheckedFuture</A> in <A HREF="../../../../../../com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Classes in <A HREF="../../../../../../com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A> that implement <A HREF="../../../../../../com/google/common/util/concurrent/CheckedFuture.html" title="interface in com.google.common.util.concurrent">CheckedFuture</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html" title="class in com.google.common.util.concurrent">AbstractCheckedFuture&lt;V,E extends Exception&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A delegating wrapper around a <A HREF="../../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent"><CODE>ListenableFuture</CODE></A> that adds support for
- the <A HREF="../../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html#checkedGet()"><CODE>AbstractCheckedFuture.checkedGet()</CODE></A> and <A HREF="../../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html#checkedGet(long, java.util.concurrent.TimeUnit)"><CODE>AbstractCheckedFuture.checkedGet(long, TimeUnit)</CODE></A> methods.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../../com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A> that return <A HREF="../../../../../../com/google/common/util/concurrent/CheckedFuture.html" title="interface in com.google.common.util.concurrent">CheckedFuture</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T,E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</A>&gt; 
-<BR>
-<A HREF="../../../../../../com/google/common/util/concurrent/CheckedFuture.html" title="interface in com.google.common.util.concurrent">CheckedFuture</A>&lt;T,E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Futures.</B><B><A HREF="../../../../../../com/google/common/util/concurrent/Futures.html#immediateCheckedFuture(T)">immediateCheckedFuture</A></B>(T&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <code>CheckedFuture</code> which has its value set immediately upon
- construction.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T,E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</A>&gt; 
-<BR>
-<A HREF="../../../../../../com/google/common/util/concurrent/CheckedFuture.html" title="interface in com.google.common.util.concurrent">CheckedFuture</A>&lt;T,E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Futures.</B><B><A HREF="../../../../../../com/google/common/util/concurrent/Futures.html#immediateFailedCheckedFuture(E)">immediateFailedCheckedFuture</A></B>(E&nbsp;exception)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <code>CheckedFuture</code> which has an exception set immediately
- upon construction.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T,E extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</A>&gt; 
-<BR>
-<A HREF="../../../../../../com/google/common/util/concurrent/CheckedFuture.html" title="interface in com.google.common.util.concurrent">CheckedFuture</A>&lt;T,E&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Futures.</B><B><A HREF="../../../../../../com/google/common/util/concurrent/Futures.html#makeChecked(java.util.concurrent.Future, com.google.common.base.Function)">makeChecked</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;T&gt;&nbsp;future,
-            <A HREF="../../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</A>,E&gt;&nbsp;mapper)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <A HREF="../../../../../../com/google/common/util/concurrent/CheckedFuture.html" title="interface in com.google.common.util.concurrent"><CODE>CheckedFuture</CODE></A> out of a normal <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>Future</CODE></A> and a
- <A HREF="../../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base"><CODE>Function</CODE></A> that maps from <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang"><CODE>Exception</CODE></A> instances into the
- appropriate checked type.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../com/google/common/util/concurrent/CheckedFuture.html" title="interface in com.google.common.util.concurrent"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../../index.html?com/google/common/util/concurrent//class-useCheckedFuture.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="CheckedFuture.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/util/concurrent/class-use/DaemonThreadFactory.html b/javadoc/com/google/common/util/concurrent/class-use/DaemonThreadFactory.html
deleted file mode 100644
index 5536084..0000000
--- a/javadoc/com/google/common/util/concurrent/class-use/DaemonThreadFactory.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.util.concurrent.DaemonThreadFactory (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.util.concurrent.DaemonThreadFactory (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../com/google/common/util/concurrent/DaemonThreadFactory.html" title="class in com.google.common.util.concurrent"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../../index.html?com/google/common/util/concurrent//class-useDaemonThreadFactory.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="DaemonThreadFactory.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.util.concurrent.DaemonThreadFactory</B></H2>
-</CENTER>
-No usage of com.google.common.util.concurrent.DaemonThreadFactory
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../com/google/common/util/concurrent/DaemonThreadFactory.html" title="class in com.google.common.util.concurrent"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../../index.html?com/google/common/util/concurrent//class-useDaemonThreadFactory.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="DaemonThreadFactory.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/util/concurrent/class-use/ExecutionList.html b/javadoc/com/google/common/util/concurrent/class-use/ExecutionList.html
deleted file mode 100644
index 209c7cc..0000000
--- a/javadoc/com/google/common/util/concurrent/class-use/ExecutionList.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.util.concurrent.ExecutionList (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.util.concurrent.ExecutionList (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../com/google/common/util/concurrent/ExecutionList.html" title="class in com.google.common.util.concurrent"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../../index.html?com/google/common/util/concurrent//class-useExecutionList.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ExecutionList.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.util.concurrent.ExecutionList</B></H2>
-</CENTER>
-No usage of com.google.common.util.concurrent.ExecutionList
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../com/google/common/util/concurrent/ExecutionList.html" title="class in com.google.common.util.concurrent"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../../index.html?com/google/common/util/concurrent//class-useExecutionList.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ExecutionList.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/util/concurrent/class-use/Executors.html b/javadoc/com/google/common/util/concurrent/class-use/Executors.html
deleted file mode 100644
index 5f577b0..0000000
--- a/javadoc/com/google/common/util/concurrent/class-use/Executors.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.util.concurrent.Executors (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.util.concurrent.Executors (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../com/google/common/util/concurrent/Executors.html" title="class in com.google.common.util.concurrent"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../../index.html?com/google/common/util/concurrent//class-useExecutors.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Executors.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.util.concurrent.Executors</B></H2>
-</CENTER>
-No usage of com.google.common.util.concurrent.Executors
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../com/google/common/util/concurrent/Executors.html" title="class in com.google.common.util.concurrent"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../../index.html?com/google/common/util/concurrent//class-useExecutors.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Executors.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/util/concurrent/class-use/FakeTimeLimiter.html b/javadoc/com/google/common/util/concurrent/class-use/FakeTimeLimiter.html
deleted file mode 100644
index 9ad2e3b..0000000
--- a/javadoc/com/google/common/util/concurrent/class-use/FakeTimeLimiter.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.util.concurrent.FakeTimeLimiter (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.util.concurrent.FakeTimeLimiter (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../com/google/common/util/concurrent/FakeTimeLimiter.html" title="class in com.google.common.util.concurrent"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../../index.html?com/google/common/util/concurrent//class-useFakeTimeLimiter.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="FakeTimeLimiter.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.util.concurrent.FakeTimeLimiter</B></H2>
-</CENTER>
-No usage of com.google.common.util.concurrent.FakeTimeLimiter
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../com/google/common/util/concurrent/FakeTimeLimiter.html" title="class in com.google.common.util.concurrent"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../../index.html?com/google/common/util/concurrent//class-useFakeTimeLimiter.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="FakeTimeLimiter.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/util/concurrent/class-use/ForwardingFuture.html b/javadoc/com/google/common/util/concurrent/class-use/ForwardingFuture.html
deleted file mode 100644
index 23865f3..0000000
--- a/javadoc/com/google/common/util/concurrent/class-use/ForwardingFuture.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.util.concurrent.ForwardingFuture (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.util.concurrent.ForwardingFuture (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../com/google/common/util/concurrent/ForwardingFuture.html" title="class in com.google.common.util.concurrent"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../../index.html?com/google/common/util/concurrent//class-useForwardingFuture.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingFuture.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.util.concurrent.ForwardingFuture</B></H2>
-</CENTER>
-No usage of com.google.common.util.concurrent.ForwardingFuture
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../com/google/common/util/concurrent/ForwardingFuture.html" title="class in com.google.common.util.concurrent"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../../index.html?com/google/common/util/concurrent//class-useForwardingFuture.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingFuture.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/util/concurrent/class-use/ForwardingService.html b/javadoc/com/google/common/util/concurrent/class-use/ForwardingService.html
deleted file mode 100644
index 3df9f28..0000000
--- a/javadoc/com/google/common/util/concurrent/class-use/ForwardingService.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.util.concurrent.ForwardingService (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.util.concurrent.ForwardingService (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../com/google/common/util/concurrent/ForwardingService.html" title="class in com.google.common.util.concurrent"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../../index.html?com/google/common/util/concurrent//class-useForwardingService.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingService.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.util.concurrent.ForwardingService</B></H2>
-</CENTER>
-No usage of com.google.common.util.concurrent.ForwardingService
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../com/google/common/util/concurrent/ForwardingService.html" title="class in com.google.common.util.concurrent"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../../index.html?com/google/common/util/concurrent//class-useForwardingService.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ForwardingService.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/util/concurrent/class-use/Futures.html b/javadoc/com/google/common/util/concurrent/class-use/Futures.html
deleted file mode 100644
index 252c82b..0000000
--- a/javadoc/com/google/common/util/concurrent/class-use/Futures.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.util.concurrent.Futures (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.util.concurrent.Futures (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../com/google/common/util/concurrent/Futures.html" title="class in com.google.common.util.concurrent"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../../index.html?com/google/common/util/concurrent//class-useFutures.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Futures.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.util.concurrent.Futures</B></H2>
-</CENTER>
-No usage of com.google.common.util.concurrent.Futures
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../com/google/common/util/concurrent/Futures.html" title="class in com.google.common.util.concurrent"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../../index.html?com/google/common/util/concurrent//class-useFutures.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="Futures.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/util/concurrent/class-use/ListenableFuture.html b/javadoc/com/google/common/util/concurrent/class-use/ListenableFuture.html
deleted file mode 100644
index 9d93b05..0000000
--- a/javadoc/com/google/common/util/concurrent/class-use/ListenableFuture.html
+++ /dev/null
@@ -1,501 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Interface com.google.common.util.concurrent.ListenableFuture (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Interface com.google.common.util.concurrent.ListenableFuture (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../../index.html?com/google/common/util/concurrent//class-useListenableFuture.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ListenableFuture.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Interface<br>com.google.common.util.concurrent.ListenableFuture</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.util.concurrent"><B>com.google.common.util.concurrent</B></A></TD>
-<TD>&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.util.concurrent"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A> in <A HREF="../../../../../../com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Subinterfaces of <A HREF="../../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A> in <A HREF="../../../../../../com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;interface</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../../com/google/common/util/concurrent/CheckedFuture.html" title="interface in com.google.common.util.concurrent">CheckedFuture&lt;V,E extends Exception&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <code>CheckedFuture</code> is an extension of <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>Future</CODE></A> that includes
- versions of the <code>get</code> methods that can throw a checked exception and
- allows listeners to be attached to the future.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Classes in <A HREF="../../../../../../com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A> that implement <A HREF="../../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html" title="class in com.google.common.util.concurrent">AbstractCheckedFuture&lt;V,E extends Exception&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A delegating wrapper around a <A HREF="../../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent"><CODE>ListenableFuture</CODE></A> that adds support for
- the <A HREF="../../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html#checkedGet()"><CODE>AbstractCheckedFuture.checkedGet()</CODE></A> and <A HREF="../../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html#checkedGet(long, java.util.concurrent.TimeUnit)"><CODE>AbstractCheckedFuture.checkedGet(long, TimeUnit)</CODE></A> methods.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../../com/google/common/util/concurrent/AbstractListenableFuture.html" title="class in com.google.common.util.concurrent">AbstractListenableFuture&lt;V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An abstract base implementation of the listener support provided by
- <A HREF="../../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent"><CODE>ListenableFuture</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../../com/google/common/util/concurrent/ListenableFutureTask.html" title="class in com.google.common.util.concurrent">ListenableFutureTask&lt;V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/FutureTask.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>FutureTask</CODE></A> that also implements the <A HREF="../../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent"><CODE>ListenableFuture</CODE></A>
- interface.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../../com/google/common/util/concurrent/ValueFuture.html" title="class in com.google.common.util.concurrent">ValueFuture&lt;V&gt;</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A simple ListenableFuture that holds a value or an exception.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Fields in <A HREF="../../../../../../com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A> declared as <A HREF="../../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected &nbsp;<A HREF="../../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;<A HREF="../../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html" title="type parameter in AbstractCheckedFuture">V</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B>AbstractCheckedFuture.</B><B><A HREF="../../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html#delegate">delegate</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The delegate, used to pass along all our methods.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../../com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A> that return <A HREF="../../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;I,O&gt; <A HREF="../../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;O&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Futures.</B><B><A HREF="../../../../../../com/google/common/util/concurrent/Futures.html#chain(com.google.common.util.concurrent.ListenableFuture, com.google.common.base.Function)">chain</A></B>(<A HREF="../../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;I&gt;&nbsp;input,
-      <A HREF="../../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super I,? extends <A HREF="../../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;? extends O&gt;&gt;&nbsp;function)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>ListenableFuture</code> that wraps another
- <code>ListenableFuture</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;I,O&gt; <A HREF="../../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;O&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Futures.</B><B><A HREF="../../../../../../com/google/common/util/concurrent/Futures.html#chain(com.google.common.util.concurrent.ListenableFuture, com.google.common.base.Function, java.util.concurrent.Executor)">chain</A></B>(<A HREF="../../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;I&gt;&nbsp;input,
-      <A HREF="../../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super I,? extends <A HREF="../../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;? extends O&gt;&gt;&nbsp;function,
-      <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executor.html?is-external=true" title="class or interface in java.util.concurrent">Executor</A>&nbsp;exec)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>ListenableFuture</code> that wraps another
- <code>ListenableFuture</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;I,O&gt; <A HREF="../../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;O&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Futures.</B><B><A HREF="../../../../../../com/google/common/util/concurrent/Futures.html#compose(com.google.common.util.concurrent.ListenableFuture, com.google.common.base.Function)">compose</A></B>(<A HREF="../../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;I&gt;&nbsp;future,
-        <A HREF="../../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super I,? extends O&gt;&nbsp;function)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>ListenableFuture</code> that wraps another
- <code>ListenableFuture</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;I,O&gt; <A HREF="../../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;O&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Futures.</B><B><A HREF="../../../../../../com/google/common/util/concurrent/Futures.html#compose(com.google.common.util.concurrent.ListenableFuture, com.google.common.base.Function, java.util.concurrent.Executor)">compose</A></B>(<A HREF="../../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;I&gt;&nbsp;future,
-        <A HREF="../../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super I,? extends O&gt;&nbsp;function,
-        <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executor.html?is-external=true" title="class or interface in java.util.concurrent">Executor</A>&nbsp;exec)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>ListenableFuture</code> that wraps another
- <code>ListenableFuture</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Futures.</B><B><A HREF="../../../../../../com/google/common/util/concurrent/Futures.html#immediateFailedFuture(java.lang.Throwable)">immediateFailedFuture</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</A>&nbsp;throwable)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <code>ListenableFuture</code> which has an exception set immediately
- upon construction.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Futures.</B><B><A HREF="../../../../../../com/google/common/util/concurrent/Futures.html#immediateFuture(T)">immediateFuture</A></B>(T&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <code>ListenableFuture</code> which has its value set immediately upon
- construction.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Futures.</B><B><A HREF="../../../../../../com/google/common/util/concurrent/Futures.html#makeListenable(java.util.concurrent.Future)">makeListenable</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;T&gt;&nbsp;future)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <A HREF="../../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent"><CODE>ListenableFuture</CODE></A> out of a normal <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>Future</CODE></A>.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../../com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A> with parameters of type <A HREF="../../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;I,O&gt; <A HREF="../../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;O&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Futures.</B><B><A HREF="../../../../../../com/google/common/util/concurrent/Futures.html#chain(com.google.common.util.concurrent.ListenableFuture, com.google.common.base.Function)">chain</A></B>(<A HREF="../../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;I&gt;&nbsp;input,
-      <A HREF="../../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super I,? extends <A HREF="../../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;? extends O&gt;&gt;&nbsp;function)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>ListenableFuture</code> that wraps another
- <code>ListenableFuture</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;I,O&gt; <A HREF="../../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;O&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Futures.</B><B><A HREF="../../../../../../com/google/common/util/concurrent/Futures.html#chain(com.google.common.util.concurrent.ListenableFuture, com.google.common.base.Function, java.util.concurrent.Executor)">chain</A></B>(<A HREF="../../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;I&gt;&nbsp;input,
-      <A HREF="../../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super I,? extends <A HREF="../../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;? extends O&gt;&gt;&nbsp;function,
-      <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executor.html?is-external=true" title="class or interface in java.util.concurrent">Executor</A>&nbsp;exec)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>ListenableFuture</code> that wraps another
- <code>ListenableFuture</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;I,O&gt; <A HREF="../../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;O&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Futures.</B><B><A HREF="../../../../../../com/google/common/util/concurrent/Futures.html#compose(com.google.common.util.concurrent.ListenableFuture, com.google.common.base.Function)">compose</A></B>(<A HREF="../../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;I&gt;&nbsp;future,
-        <A HREF="../../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super I,? extends O&gt;&nbsp;function)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>ListenableFuture</code> that wraps another
- <code>ListenableFuture</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;I,O&gt; <A HREF="../../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;O&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Futures.</B><B><A HREF="../../../../../../com/google/common/util/concurrent/Futures.html#compose(com.google.common.util.concurrent.ListenableFuture, com.google.common.base.Function, java.util.concurrent.Executor)">compose</A></B>(<A HREF="../../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;I&gt;&nbsp;future,
-        <A HREF="../../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super I,? extends O&gt;&nbsp;function,
-        <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executor.html?is-external=true" title="class or interface in java.util.concurrent">Executor</A>&nbsp;exec)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>ListenableFuture</code> that wraps another
- <code>ListenableFuture</code>.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Method parameters in <A HREF="../../../../../../com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A> with type arguments of type <A HREF="../../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;I,O&gt; <A HREF="../../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;O&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Futures.</B><B><A HREF="../../../../../../com/google/common/util/concurrent/Futures.html#chain(com.google.common.util.concurrent.ListenableFuture, com.google.common.base.Function)">chain</A></B>(<A HREF="../../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;I&gt;&nbsp;input,
-      <A HREF="../../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super I,? extends <A HREF="../../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;? extends O&gt;&gt;&nbsp;function)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>ListenableFuture</code> that wraps another
- <code>ListenableFuture</code>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;I,O&gt; <A HREF="../../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;O&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Futures.</B><B><A HREF="../../../../../../com/google/common/util/concurrent/Futures.html#chain(com.google.common.util.concurrent.ListenableFuture, com.google.common.base.Function, java.util.concurrent.Executor)">chain</A></B>(<A HREF="../../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;I&gt;&nbsp;input,
-      <A HREF="../../../../../../com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>&lt;? super I,? extends <A HREF="../../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;? extends O&gt;&gt;&nbsp;function,
-      <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executor.html?is-external=true" title="class or interface in java.util.concurrent">Executor</A>&nbsp;exec)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>ListenableFuture</code> that wraps another
- <code>ListenableFuture</code>.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Constructors in <A HREF="../../../../../../com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A> with parameters of type <A HREF="../../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html#AbstractCheckedFuture(com.google.common.util.concurrent.ListenableFuture)">AbstractCheckedFuture</A></B>(<A HREF="../../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;<A HREF="../../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html" title="type parameter in AbstractCheckedFuture">V</A>&gt;&nbsp;delegate)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs an <code>AbstractCheckedFuture</code> that wraps a delegate.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../../index.html?com/google/common/util/concurrent//class-useListenableFuture.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ListenableFuture.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/util/concurrent/class-use/ListenableFutureTask.html b/javadoc/com/google/common/util/concurrent/class-use/ListenableFutureTask.html
deleted file mode 100644
index 60ead22..0000000
--- a/javadoc/com/google/common/util/concurrent/class-use/ListenableFutureTask.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.util.concurrent.ListenableFutureTask (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.util.concurrent.ListenableFutureTask (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../com/google/common/util/concurrent/ListenableFutureTask.html" title="class in com.google.common.util.concurrent"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../../index.html?com/google/common/util/concurrent//class-useListenableFutureTask.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ListenableFutureTask.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.util.concurrent.ListenableFutureTask</B></H2>
-</CENTER>
-No usage of com.google.common.util.concurrent.ListenableFutureTask
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../com/google/common/util/concurrent/ListenableFutureTask.html" title="class in com.google.common.util.concurrent"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../../index.html?com/google/common/util/concurrent//class-useListenableFutureTask.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ListenableFutureTask.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/util/concurrent/class-use/NamingThreadFactory.html b/javadoc/com/google/common/util/concurrent/class-use/NamingThreadFactory.html
deleted file mode 100644
index 3aab91b..0000000
--- a/javadoc/com/google/common/util/concurrent/class-use/NamingThreadFactory.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.util.concurrent.NamingThreadFactory (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.util.concurrent.NamingThreadFactory (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../com/google/common/util/concurrent/NamingThreadFactory.html" title="class in com.google.common.util.concurrent"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../../index.html?com/google/common/util/concurrent//class-useNamingThreadFactory.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="NamingThreadFactory.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.util.concurrent.NamingThreadFactory</B></H2>
-</CENTER>
-No usage of com.google.common.util.concurrent.NamingThreadFactory
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../com/google/common/util/concurrent/NamingThreadFactory.html" title="class in com.google.common.util.concurrent"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../../index.html?com/google/common/util/concurrent//class-useNamingThreadFactory.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="NamingThreadFactory.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/util/concurrent/class-use/SimpleTimeLimiter.html b/javadoc/com/google/common/util/concurrent/class-use/SimpleTimeLimiter.html
deleted file mode 100644
index 67edff6..0000000
--- a/javadoc/com/google/common/util/concurrent/class-use/SimpleTimeLimiter.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.util.concurrent.SimpleTimeLimiter (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.util.concurrent.SimpleTimeLimiter (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../com/google/common/util/concurrent/SimpleTimeLimiter.html" title="class in com.google.common.util.concurrent"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../../index.html?com/google/common/util/concurrent//class-useSimpleTimeLimiter.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="SimpleTimeLimiter.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.util.concurrent.SimpleTimeLimiter</B></H2>
-</CENTER>
-No usage of com.google.common.util.concurrent.SimpleTimeLimiter
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../com/google/common/util/concurrent/SimpleTimeLimiter.html" title="class in com.google.common.util.concurrent"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../../index.html?com/google/common/util/concurrent//class-useSimpleTimeLimiter.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="SimpleTimeLimiter.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/util/concurrent/class-use/TimeLimiter.html b/javadoc/com/google/common/util/concurrent/class-use/TimeLimiter.html
deleted file mode 100644
index b31a9ce..0000000
--- a/javadoc/com/google/common/util/concurrent/class-use/TimeLimiter.html
+++ /dev/null
@@ -1,190 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Interface com.google.common.util.concurrent.TimeLimiter (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Interface com.google.common.util.concurrent.TimeLimiter (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../com/google/common/util/concurrent/TimeLimiter.html" title="interface in com.google.common.util.concurrent"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../../index.html?com/google/common/util/concurrent//class-useTimeLimiter.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="TimeLimiter.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Interface<br>com.google.common.util.concurrent.TimeLimiter</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../../com/google/common/util/concurrent/TimeLimiter.html" title="interface in com.google.common.util.concurrent">TimeLimiter</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.util.concurrent"><B>com.google.common.util.concurrent</B></A></TD>
-<TD>&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.util.concurrent"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../../com/google/common/util/concurrent/TimeLimiter.html" title="interface in com.google.common.util.concurrent">TimeLimiter</A> in <A HREF="../../../../../../com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Classes in <A HREF="../../../../../../com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A> that implement <A HREF="../../../../../../com/google/common/util/concurrent/TimeLimiter.html" title="interface in com.google.common.util.concurrent">TimeLimiter</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../../com/google/common/util/concurrent/FakeTimeLimiter.html" title="class in com.google.common.util.concurrent">FakeTimeLimiter</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A TimeLimiter implementation which actually does not attempt to limit time
- at all.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../../com/google/common/util/concurrent/SimpleTimeLimiter.html" title="class in com.google.common.util.concurrent">SimpleTimeLimiter</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A TimeLimiter that runs method calls in the background using an
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ExecutorService</CODE></A>.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../com/google/common/util/concurrent/TimeLimiter.html" title="interface in com.google.common.util.concurrent"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../../index.html?com/google/common/util/concurrent//class-useTimeLimiter.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="TimeLimiter.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/util/concurrent/class-use/UncheckedTimeoutException.html b/javadoc/com/google/common/util/concurrent/class-use/UncheckedTimeoutException.html
deleted file mode 100644
index 7219801..0000000
--- a/javadoc/com/google/common/util/concurrent/class-use/UncheckedTimeoutException.html
+++ /dev/null
@@ -1,144 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.util.concurrent.UncheckedTimeoutException (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.util.concurrent.UncheckedTimeoutException (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../com/google/common/util/concurrent/UncheckedTimeoutException.html" title="class in com.google.common.util.concurrent"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../../index.html?com/google/common/util/concurrent//class-useUncheckedTimeoutException.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="UncheckedTimeoutException.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.util.concurrent.UncheckedTimeoutException</B></H2>
-</CENTER>
-No usage of com.google.common.util.concurrent.UncheckedTimeoutException
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../com/google/common/util/concurrent/UncheckedTimeoutException.html" title="class in com.google.common.util.concurrent"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../../index.html?com/google/common/util/concurrent//class-useUncheckedTimeoutException.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="UncheckedTimeoutException.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/util/concurrent/class-use/UninterruptibleFuture.html b/javadoc/com/google/common/util/concurrent/class-use/UninterruptibleFuture.html
deleted file mode 100644
index 799dc5a..0000000
--- a/javadoc/com/google/common/util/concurrent/class-use/UninterruptibleFuture.html
+++ /dev/null
@@ -1,187 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Interface com.google.common.util.concurrent.UninterruptibleFuture (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Interface com.google.common.util.concurrent.UninterruptibleFuture (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../com/google/common/util/concurrent/UninterruptibleFuture.html" title="interface in com.google.common.util.concurrent"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../../index.html?com/google/common/util/concurrent//class-useUninterruptibleFuture.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="UninterruptibleFuture.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Interface<br>com.google.common.util.concurrent.UninterruptibleFuture</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../../com/google/common/util/concurrent/UninterruptibleFuture.html" title="interface in com.google.common.util.concurrent">UninterruptibleFuture</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.util.concurrent"><B>com.google.common.util.concurrent</B></A></TD>
-<TD>&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.util.concurrent"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../../com/google/common/util/concurrent/UninterruptibleFuture.html" title="interface in com.google.common.util.concurrent">UninterruptibleFuture</A> in <A HREF="../../../../../../com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../../com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A> that return <A HREF="../../../../../../com/google/common/util/concurrent/UninterruptibleFuture.html" title="interface in com.google.common.util.concurrent">UninterruptibleFuture</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;V&gt; <A HREF="../../../../../../com/google/common/util/concurrent/UninterruptibleFuture.html" title="interface in com.google.common.util.concurrent">UninterruptibleFuture</A>&lt;V&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>Futures.</B><B><A HREF="../../../../../../com/google/common/util/concurrent/Futures.html#makeUninterruptible(java.util.concurrent.Future)">makeUninterruptible</A></B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;V&gt;&nbsp;future)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an uninterruptible view of a <code>Future</code>.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../com/google/common/util/concurrent/UninterruptibleFuture.html" title="interface in com.google.common.util.concurrent"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../../index.html?com/google/common/util/concurrent//class-useUninterruptibleFuture.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="UninterruptibleFuture.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/util/concurrent/class-use/ValueFuture.html b/javadoc/com/google/common/util/concurrent/class-use/ValueFuture.html
deleted file mode 100644
index abf84c6..0000000
--- a/javadoc/com/google/common/util/concurrent/class-use/ValueFuture.html
+++ /dev/null
@@ -1,187 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Class com.google.common.util.concurrent.ValueFuture (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Class com.google.common.util.concurrent.ValueFuture (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../com/google/common/util/concurrent/ValueFuture.html" title="class in com.google.common.util.concurrent"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../../index.html?com/google/common/util/concurrent//class-useValueFuture.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ValueFuture.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Class<br>com.google.common.util.concurrent.ValueFuture</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../../com/google/common/util/concurrent/ValueFuture.html" title="class in com.google.common.util.concurrent">ValueFuture</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.util.concurrent"><B>com.google.common.util.concurrent</B></A></TD>
-<TD>&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.util.concurrent"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Uses of <A HREF="../../../../../../com/google/common/util/concurrent/ValueFuture.html" title="class in com.google.common.util.concurrent">ValueFuture</A> in <A HREF="../../../../../../com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2">Methods in <A HREF="../../../../../../com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A> that return <A HREF="../../../../../../com/google/common/util/concurrent/ValueFuture.html" title="class in com.google.common.util.concurrent">ValueFuture</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="">
-<TR ALIGN="right" VALIGN="">
-<TD NOWRAP><FONT SIZE="-1">
-<CODE>&lt;T&gt; <A HREF="../../../../../../com/google/common/util/concurrent/ValueFuture.html" title="class in com.google.common.util.concurrent">ValueFuture</A>&lt;T&gt;</CODE></FONT></TD>
-</TR>
-</TABLE>
-</CODE></FONT></TD>
-<TD><CODE><B>ValueFuture.</B><B><A HREF="../../../../../../com/google/common/util/concurrent/ValueFuture.html#create()">create</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new <code>ValueFuture</code> in the default state.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../com/google/common/util/concurrent/ValueFuture.html" title="class in com.google.common.util.concurrent"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../../index.html?com/google/common/util/concurrent//class-useValueFuture.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="ValueFuture.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/util/concurrent/package-frame.html b/javadoc/com/google/common/util/concurrent/package-frame.html
deleted file mode 100644
index 73601e7..0000000
--- a/javadoc/com/google/common/util/concurrent/package-frame.html
+++ /dev/null
@@ -1,94 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-com.google.common.util.concurrent (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-
-</HEAD>
-
-<BODY BGCOLOR="white">
-<FONT size="+1" CLASS="FrameTitleFont">
-<A HREF="../../../../../com/google/common/util/concurrent/package-summary.html" target="classFrame">com.google.common.util.concurrent</A></FONT>
-<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
-<TR>
-<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">
-Interfaces</FONT>&nbsp;
-<FONT CLASS="FrameItemFont">
-<BR>
-<A HREF="CheckedFuture.html" title="interface in com.google.common.util.concurrent" target="classFrame"><I>CheckedFuture</I></A>
-<BR>
-<A HREF="ListenableFuture.html" title="interface in com.google.common.util.concurrent" target="classFrame"><I>ListenableFuture</I></A>
-<BR>
-<A HREF="TimeLimiter.html" title="interface in com.google.common.util.concurrent" target="classFrame"><I>TimeLimiter</I></A>
-<BR>
-<A HREF="UninterruptibleFuture.html" title="interface in com.google.common.util.concurrent" target="classFrame"><I>UninterruptibleFuture</I></A></FONT></TD>
-</TR>
-</TABLE>
-
-
-<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
-<TR>
-<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">
-Classes</FONT>&nbsp;
-<FONT CLASS="FrameItemFont">
-<BR>
-<A HREF="AbstractCheckedFuture.html" title="class in com.google.common.util.concurrent" target="classFrame">AbstractCheckedFuture</A>
-<BR>
-<A HREF="AbstractExecutionThreadService.html" title="class in com.google.common.util.concurrent" target="classFrame">AbstractExecutionThreadService</A>
-<BR>
-<A HREF="AbstractFuture.html" title="class in com.google.common.util.concurrent" target="classFrame">AbstractFuture</A>
-<BR>
-<A HREF="AbstractIdleService.html" title="class in com.google.common.util.concurrent" target="classFrame">AbstractIdleService</A>
-<BR>
-<A HREF="AbstractListenableFuture.html" title="class in com.google.common.util.concurrent" target="classFrame">AbstractListenableFuture</A>
-<BR>
-<A HREF="AbstractService.html" title="class in com.google.common.util.concurrent" target="classFrame">AbstractService</A>
-<BR>
-<A HREF="Callables.html" title="class in com.google.common.util.concurrent" target="classFrame">Callables</A>
-<BR>
-<A HREF="DaemonThreadFactory.html" title="class in com.google.common.util.concurrent" target="classFrame">DaemonThreadFactory</A>
-<BR>
-<A HREF="ExecutionList.html" title="class in com.google.common.util.concurrent" target="classFrame">ExecutionList</A>
-<BR>
-<A HREF="Executors.html" title="class in com.google.common.util.concurrent" target="classFrame">Executors</A>
-<BR>
-<A HREF="FakeTimeLimiter.html" title="class in com.google.common.util.concurrent" target="classFrame">FakeTimeLimiter</A>
-<BR>
-<A HREF="ForwardingFuture.html" title="class in com.google.common.util.concurrent" target="classFrame">ForwardingFuture</A>
-<BR>
-<A HREF="ForwardingService.html" title="class in com.google.common.util.concurrent" target="classFrame">ForwardingService</A>
-<BR>
-<A HREF="Futures.html" title="class in com.google.common.util.concurrent" target="classFrame">Futures</A>
-<BR>
-<A HREF="ListenableFutureTask.html" title="class in com.google.common.util.concurrent" target="classFrame">ListenableFutureTask</A>
-<BR>
-<A HREF="NamingThreadFactory.html" title="class in com.google.common.util.concurrent" target="classFrame">NamingThreadFactory</A>
-<BR>
-<A HREF="SimpleTimeLimiter.html" title="class in com.google.common.util.concurrent" target="classFrame">SimpleTimeLimiter</A>
-<BR>
-<A HREF="ValueFuture.html" title="class in com.google.common.util.concurrent" target="classFrame">ValueFuture</A></FONT></TD>
-</TR>
-</TABLE>
-
-
-<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
-<TR>
-<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">
-Exceptions</FONT>&nbsp;
-<FONT CLASS="FrameItemFont">
-<BR>
-<A HREF="UncheckedTimeoutException.html" title="class in com.google.common.util.concurrent" target="classFrame">UncheckedTimeoutException</A></FONT></TD>
-</TR>
-</TABLE>
-
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/util/concurrent/package-summary.html b/javadoc/com/google/common/util/concurrent/package-summary.html
deleted file mode 100644
index 58d178f..0000000
--- a/javadoc/com/google/common/util/concurrent/package-summary.html
+++ /dev/null
@@ -1,281 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-com.google.common.util.concurrent (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="com.google.common.util.concurrent (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-use.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/common/primitives/package-summary.html"><B>PREV PACKAGE</B></A>&nbsp;
-&nbsp;NEXT PACKAGE</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/util/concurrent/package-summary.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<H2>
-Package com.google.common.util.concurrent
-</H2>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Interface Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../../com/google/common/util/concurrent/CheckedFuture.html" title="interface in com.google.common.util.concurrent">CheckedFuture&lt;V,E extends Exception&gt;</A></B></TD>
-<TD>A <code>CheckedFuture</code> is an extension of <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>Future</CODE></A> that includes
- versions of the <code>get</code> methods that can throw a checked exception and
- allows listeners to be attached to the future.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture&lt;V&gt;</A></B></TD>
-<TD>This interface defines a future that has listeners attached to it, which
- is useful for asynchronous workflows.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../../com/google/common/util/concurrent/TimeLimiter.html" title="interface in com.google.common.util.concurrent">TimeLimiter</A></B></TD>
-<TD>Produces proxies that impose a time limit on method
- calls to the proxied object.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../../com/google/common/util/concurrent/UninterruptibleFuture.html" title="interface in com.google.common.util.concurrent">UninterruptibleFuture&lt;V&gt;</A></B></TD>
-<TD>A <code>Future</code> whose <code>get</code> calls cannot be interrupted.</TD>
-</TR>
-</TABLE>
-&nbsp;
-
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Class Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html" title="class in com.google.common.util.concurrent">AbstractCheckedFuture&lt;V,E extends Exception&gt;</A></B></TD>
-<TD>A delegating wrapper around a <A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent"><CODE>ListenableFuture</CODE></A> that adds support for
- the <A HREF="../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html#checkedGet()"><CODE>AbstractCheckedFuture.checkedGet()</CODE></A> and <A HREF="../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html#checkedGet(long, java.util.concurrent.TimeUnit)"><CODE>AbstractCheckedFuture.checkedGet(long, TimeUnit)</CODE></A> methods.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractExecutionThreadService.html" title="class in com.google.common.util.concurrent">AbstractExecutionThreadService</A></B></TD>
-<TD>Base class for services that can implement <A HREF="../../../../../com/google/common/util/concurrent/AbstractExecutionThreadService.html#startUp()"><CODE>AbstractExecutionThreadService.startUp()</CODE></A>, <A HREF="../../../../../com/google/common/util/concurrent/AbstractExecutionThreadService.html#run()"><CODE>AbstractExecutionThreadService.run()</CODE></A> and
- <A HREF="../../../../../com/google/common/util/concurrent/AbstractExecutionThreadService.html#shutDown()"><CODE>AbstractExecutionThreadService.shutDown()</CODE></A> methods.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html" title="class in com.google.common.util.concurrent">AbstractFuture&lt;V&gt;</A></B></TD>
-<TD>An abstract implementation of the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>Future</CODE></A> interface.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractIdleService.html" title="class in com.google.common.util.concurrent">AbstractIdleService</A></B></TD>
-<TD>Base class for services that do not need a thread while "running"
- but may need one during startup and shutdown.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractListenableFuture.html" title="class in com.google.common.util.concurrent">AbstractListenableFuture&lt;V&gt;</A></B></TD>
-<TD>An abstract base implementation of the listener support provided by
- <A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent"><CODE>ListenableFuture</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../../com/google/common/util/concurrent/AbstractService.html" title="class in com.google.common.util.concurrent">AbstractService</A></B></TD>
-<TD>Base class for implementing services that can handle <A HREF="../../../../../com/google/common/util/concurrent/AbstractService.html#doStart()"><CODE>AbstractService.doStart()</CODE></A> and
- <A HREF="../../../../../com/google/common/util/concurrent/AbstractService.html#doStop()"><CODE>AbstractService.doStop()</CODE></A> requests, responding to them with <A HREF="../../../../../com/google/common/util/concurrent/AbstractService.html#notifyStarted()"><CODE>AbstractService.notifyStarted()</CODE></A>
- and <A HREF="../../../../../com/google/common/util/concurrent/AbstractService.html#notifyStopped()"><CODE>AbstractService.notifyStopped()</CODE></A> callbacks.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../../com/google/common/util/concurrent/Callables.html" title="class in com.google.common.util.concurrent">Callables</A></B></TD>
-<TD>Static utility methods pertaining to the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>Callable</CODE></A> interface.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../../com/google/common/util/concurrent/DaemonThreadFactory.html" title="class in com.google.common.util.concurrent">DaemonThreadFactory</A></B></TD>
-<TD>Wraps another <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadFactory.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ThreadFactory</CODE></A>, making all new threads daemon threads.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../../com/google/common/util/concurrent/ExecutionList.html" title="class in com.google.common.util.concurrent">ExecutionList</A></B></TD>
-<TD>A list of (<code>Runnable</code>, <code>Executor</code>) pairs that guarantees
- that every <code>Runnable</code> that is added using the add method will be
- executed in its associated <code>Executor</code> after <A HREF="../../../../../com/google/common/util/concurrent/ExecutionList.html#run()"><CODE>ExecutionList.run()</CODE></A> is called.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../../com/google/common/util/concurrent/Executors.html" title="class in com.google.common.util.concurrent">Executors</A></B></TD>
-<TD>Factory and utility methods for <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executor.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>Executor</CODE></A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ExecutorService</CODE></A>, and <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadFactory.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ThreadFactory</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../../com/google/common/util/concurrent/FakeTimeLimiter.html" title="class in com.google.common.util.concurrent">FakeTimeLimiter</A></B></TD>
-<TD>A TimeLimiter implementation which actually does not attempt to limit time
- at all.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../../com/google/common/util/concurrent/ForwardingFuture.html" title="class in com.google.common.util.concurrent">ForwardingFuture&lt;V&gt;</A></B></TD>
-<TD>A <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>Future</CODE></A> which forwards all its method calls to another future.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../../com/google/common/util/concurrent/ForwardingService.html" title="class in com.google.common.util.concurrent">ForwardingService</A></B></TD>
-<TD>A <A HREF="../../../../../com/google/common/base/Service.html" title="interface in com.google.common.base"><CODE>Service</CODE></A> that forwards all method calls to another service.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../../com/google/common/util/concurrent/Futures.html" title="class in com.google.common.util.concurrent">Futures</A></B></TD>
-<TD>Static utility methods pertaining to the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>Future</CODE></A> interface.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../../com/google/common/util/concurrent/ListenableFutureTask.html" title="class in com.google.common.util.concurrent">ListenableFutureTask&lt;V&gt;</A></B></TD>
-<TD>A <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/FutureTask.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>FutureTask</CODE></A> that also implements the <A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent"><CODE>ListenableFuture</CODE></A>
- interface.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../../com/google/common/util/concurrent/NamingThreadFactory.html" title="class in com.google.common.util.concurrent">NamingThreadFactory</A></B></TD>
-<TD>A ThreadFactory which decorates another ThreadFactory to set a name on
- each thread created.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../../com/google/common/util/concurrent/SimpleTimeLimiter.html" title="class in com.google.common.util.concurrent">SimpleTimeLimiter</A></B></TD>
-<TD>A TimeLimiter that runs method calls in the background using an
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ExecutorService</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../../com/google/common/util/concurrent/ValueFuture.html" title="class in com.google.common.util.concurrent">ValueFuture&lt;V&gt;</A></B></TD>
-<TD>A simple ListenableFuture that holds a value or an exception.</TD>
-</TR>
-</TABLE>
-&nbsp;
-
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Exception Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../../com/google/common/util/concurrent/UncheckedTimeoutException.html" title="class in com.google.common.util.concurrent">UncheckedTimeoutException</A></B></TD>
-<TD>Unchecked version of <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeoutException.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>TimeoutException</CODE></A>.</TD>
-</TR>
-</TABLE>
-&nbsp;
-
-<P>
-<DL>
-</DL>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-use.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/common/primitives/package-summary.html"><B>PREV PACKAGE</B></A>&nbsp;
-&nbsp;NEXT PACKAGE</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/util/concurrent/package-summary.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/util/concurrent/package-tree.html b/javadoc/com/google/common/util/concurrent/package-tree.html
deleted file mode 100644
index 8b3f990..0000000
--- a/javadoc/com/google/common/util/concurrent/package-tree.html
+++ /dev/null
@@ -1,192 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-com.google.common.util.concurrent Class Hierarchy (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="com.google.common.util.concurrent Class Hierarchy (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/common/primitives/package-tree.html"><B>PREV</B></A>&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/util/concurrent/package-tree.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-Hierarchy For Package com.google.common.util.concurrent
-</H2>
-</CENTER>
-<DL>
-<DT><B>Package Hierarchies:</B><DD><A HREF="../../../../../overview-tree.html">All Packages</A></DL>
-<HR>
-<H2>
-Class Hierarchy
-</H2>
-<UL>
-<LI TYPE="circle">java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang"><B>Object</B></A><UL>
-<LI TYPE="circle">com.google.common.util.concurrent.<A HREF="../../../../../com/google/common/util/concurrent/AbstractCheckedFuture.html" title="class in com.google.common.util.concurrent"><B>AbstractCheckedFuture</B></A>&lt;V,E&gt; (implements com.google.common.util.concurrent.<A HREF="../../../../../com/google/common/util/concurrent/CheckedFuture.html" title="interface in com.google.common.util.concurrent">CheckedFuture</A>&lt;V,E&gt;)
-<LI TYPE="circle">com.google.common.util.concurrent.<A HREF="../../../../../com/google/common/util/concurrent/AbstractExecutionThreadService.html" title="class in com.google.common.util.concurrent"><B>AbstractExecutionThreadService</B></A> (implements com.google.common.base.<A HREF="../../../../../com/google/common/base/Service.html" title="interface in com.google.common.base">Service</A>)
-<LI TYPE="circle">com.google.common.util.concurrent.<A HREF="../../../../../com/google/common/util/concurrent/AbstractFuture.html" title="class in com.google.common.util.concurrent"><B>AbstractFuture</B></A>&lt;V&gt; (implements java.util.concurrent.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;V&gt;)
-<UL>
-<LI TYPE="circle">com.google.common.util.concurrent.<A HREF="../../../../../com/google/common/util/concurrent/AbstractListenableFuture.html" title="class in com.google.common.util.concurrent"><B>AbstractListenableFuture</B></A>&lt;V&gt; (implements com.google.common.util.concurrent.<A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;V&gt;)
-<UL>
-<LI TYPE="circle">com.google.common.util.concurrent.<A HREF="../../../../../com/google/common/util/concurrent/ValueFuture.html" title="class in com.google.common.util.concurrent"><B>ValueFuture</B></A>&lt;V&gt;</UL>
-</UL>
-<LI TYPE="circle">com.google.common.util.concurrent.<A HREF="../../../../../com/google/common/util/concurrent/AbstractIdleService.html" title="class in com.google.common.util.concurrent"><B>AbstractIdleService</B></A> (implements com.google.common.base.<A HREF="../../../../../com/google/common/base/Service.html" title="interface in com.google.common.base">Service</A>)
-<LI TYPE="circle">com.google.common.util.concurrent.<A HREF="../../../../../com/google/common/util/concurrent/AbstractService.html" title="class in com.google.common.util.concurrent"><B>AbstractService</B></A> (implements com.google.common.base.<A HREF="../../../../../com/google/common/base/Service.html" title="interface in com.google.common.base">Service</A>)
-<LI TYPE="circle">com.google.common.util.concurrent.<A HREF="../../../../../com/google/common/util/concurrent/Callables.html" title="class in com.google.common.util.concurrent"><B>Callables</B></A><LI TYPE="circle">com.google.common.util.concurrent.<A HREF="../../../../../com/google/common/util/concurrent/DaemonThreadFactory.html" title="class in com.google.common.util.concurrent"><B>DaemonThreadFactory</B></A> (implements java.util.concurrent.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadFactory.html?is-external=true" title="class or interface in java.util.concurrent">ThreadFactory</A>)
-<LI TYPE="circle">com.google.common.util.concurrent.<A HREF="../../../../../com/google/common/util/concurrent/ExecutionList.html" title="class in com.google.common.util.concurrent"><B>ExecutionList</B></A> (implements java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</A>)
-<LI TYPE="circle">com.google.common.util.concurrent.<A HREF="../../../../../com/google/common/util/concurrent/Executors.html" title="class in com.google.common.util.concurrent"><B>Executors</B></A><LI TYPE="circle">com.google.common.util.concurrent.<A HREF="../../../../../com/google/common/util/concurrent/FakeTimeLimiter.html" title="class in com.google.common.util.concurrent"><B>FakeTimeLimiter</B></A> (implements com.google.common.util.concurrent.<A HREF="../../../../../com/google/common/util/concurrent/TimeLimiter.html" title="interface in com.google.common.util.concurrent">TimeLimiter</A>)
-<LI TYPE="circle">com.google.common.collect.<A HREF="../../../../../com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect"><B>ForwardingObject</B></A><UL>
-<LI TYPE="circle">com.google.common.util.concurrent.<A HREF="../../../../../com/google/common/util/concurrent/ForwardingFuture.html" title="class in com.google.common.util.concurrent"><B>ForwardingFuture</B></A>&lt;V&gt; (implements java.util.concurrent.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;V&gt;)
-<LI TYPE="circle">com.google.common.util.concurrent.<A HREF="../../../../../com/google/common/util/concurrent/ForwardingService.html" title="class in com.google.common.util.concurrent"><B>ForwardingService</B></A> (implements com.google.common.base.<A HREF="../../../../../com/google/common/base/Service.html" title="interface in com.google.common.base">Service</A>)
-</UL>
-<LI TYPE="circle">com.google.common.util.concurrent.<A HREF="../../../../../com/google/common/util/concurrent/Futures.html" title="class in com.google.common.util.concurrent"><B>Futures</B></A><LI TYPE="circle">java.util.concurrent.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/FutureTask.html?is-external=true" title="class or interface in java.util.concurrent"><B>FutureTask</B></A>&lt;V&gt; (implements java.util.concurrent.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/RunnableFuture.html?is-external=true" title="class or interface in java.util.concurrent">RunnableFuture</A>&lt;V&gt;)
-<UL>
-<LI TYPE="circle">com.google.common.util.concurrent.<A HREF="../../../../../com/google/common/util/concurrent/ListenableFutureTask.html" title="class in com.google.common.util.concurrent"><B>ListenableFutureTask</B></A>&lt;V&gt; (implements com.google.common.util.concurrent.<A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;V&gt;)
-</UL>
-<LI TYPE="circle">com.google.common.util.concurrent.<A HREF="../../../../../com/google/common/util/concurrent/NamingThreadFactory.html" title="class in com.google.common.util.concurrent"><B>NamingThreadFactory</B></A> (implements java.util.concurrent.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadFactory.html?is-external=true" title="class or interface in java.util.concurrent">ThreadFactory</A>)
-<LI TYPE="circle">com.google.common.util.concurrent.<A HREF="../../../../../com/google/common/util/concurrent/SimpleTimeLimiter.html" title="class in com.google.common.util.concurrent"><B>SimpleTimeLimiter</B></A> (implements com.google.common.util.concurrent.<A HREF="../../../../../com/google/common/util/concurrent/TimeLimiter.html" title="interface in com.google.common.util.concurrent">TimeLimiter</A>)
-<LI TYPE="circle">java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang"><B>Throwable</B></A> (implements java.io.<A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>)
-<UL>
-<LI TYPE="circle">java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang"><B>Exception</B></A><UL>
-<LI TYPE="circle">java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/RuntimeException.html?is-external=true" title="class or interface in java.lang"><B>RuntimeException</B></A><UL>
-<LI TYPE="circle">com.google.common.util.concurrent.<A HREF="../../../../../com/google/common/util/concurrent/UncheckedTimeoutException.html" title="class in com.google.common.util.concurrent"><B>UncheckedTimeoutException</B></A></UL>
-</UL>
-</UL>
-</UL>
-</UL>
-<H2>
-Interface Hierarchy
-</H2>
-<UL>
-<LI TYPE="circle">java.util.concurrent.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent"><B>Future</B></A>&lt;V&gt;<UL>
-<LI TYPE="circle">com.google.common.util.concurrent.<A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent"><B>ListenableFuture</B></A>&lt;V&gt;<UL>
-<LI TYPE="circle">com.google.common.util.concurrent.<A HREF="../../../../../com/google/common/util/concurrent/CheckedFuture.html" title="interface in com.google.common.util.concurrent"><B>CheckedFuture</B></A>&lt;V,E&gt;</UL>
-<LI TYPE="circle">com.google.common.util.concurrent.<A HREF="../../../../../com/google/common/util/concurrent/UninterruptibleFuture.html" title="interface in com.google.common.util.concurrent"><B>UninterruptibleFuture</B></A>&lt;V&gt;</UL>
-<LI TYPE="circle">com.google.common.util.concurrent.<A HREF="../../../../../com/google/common/util/concurrent/TimeLimiter.html" title="interface in com.google.common.util.concurrent"><B>TimeLimiter</B></A></UL>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/common/primitives/package-tree.html"><B>PREV</B></A>&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/util/concurrent/package-tree.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/com/google/common/util/concurrent/package-use.html b/javadoc/com/google/common/util/concurrent/package-use.html
deleted file mode 100644
index 4fa2672..0000000
--- a/javadoc/com/google/common/util/concurrent/package-use.html
+++ /dev/null
@@ -1,211 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Uses of Package com.google.common.util.concurrent (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Uses of Package com.google.common.util.concurrent (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/util/concurrent/package-use.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="package-use.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Uses of Package<br>com.google.common.util.concurrent</B></H2>
-</CENTER>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Packages that use <A HREF="../../../../../com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="#com.google.common.util.concurrent"><B>com.google.common.util.concurrent</B></A></TD>
-<TD>&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<A NAME="com.google.common.util.concurrent"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-Classes in <A HREF="../../../../../com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A> used by <A HREF="../../../../../com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../../com/google/common/util/concurrent/class-use/AbstractFuture.html#com.google.common.util.concurrent"><B>AbstractFuture</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An abstract implementation of the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>Future</CODE></A> interface.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../../com/google/common/util/concurrent/class-use/AbstractListenableFuture.html#com.google.common.util.concurrent"><B>AbstractListenableFuture</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An abstract base implementation of the listener support provided by
- <A HREF="../../../../../com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent"><CODE>ListenableFuture</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../../com/google/common/util/concurrent/class-use/CheckedFuture.html#com.google.common.util.concurrent"><B>CheckedFuture</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <code>CheckedFuture</code> is an extension of <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>Future</CODE></A> that includes
- versions of the <code>get</code> methods that can throw a checked exception and
- allows listeners to be attached to the future.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../../com/google/common/util/concurrent/class-use/ListenableFuture.html#com.google.common.util.concurrent"><B>ListenableFuture</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This interface defines a future that has listeners attached to it, which
- is useful for asynchronous workflows.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../../com/google/common/util/concurrent/class-use/TimeLimiter.html#com.google.common.util.concurrent"><B>TimeLimiter</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Produces proxies that impose a time limit on method
- calls to the proxied object.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../../com/google/common/util/concurrent/class-use/UninterruptibleFuture.html#com.google.common.util.concurrent"><B>UninterruptibleFuture</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A <code>Future</code> whose <code>get</code> calls cannot be interrupted.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><B><A HREF="../../../../../com/google/common/util/concurrent/class-use/ValueFuture.html#com.google.common.util.concurrent"><B>ValueFuture</B></A></B>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A simple ListenableFuture that holds a value or an exception.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="../../../../../index.html?com/google/common/util/concurrent/package-use.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="package-use.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/constant-values.html b/javadoc/constant-values.html
deleted file mode 100644
index 6991fef..0000000
--- a/javadoc/constant-values.html
+++ /dev/null
@@ -1,228 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Constant Field Values (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Constant Field Values (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="index.html?constant-values.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="constant-values.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H1>
-Constant Field Values</H1>
-</CENTER>
-<HR SIZE="4" NOSHADE>
-<B>Contents</B><UL>
-<LI><A HREF="#com.google">com.google.*</A>
-</UL>
-
-<A NAME="com.google"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left"><FONT SIZE="+2">
-com.google.*</FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="3">com.google.common.primitives.<A HREF="com/google/common/primitives/Chars.html" title="class in com.google.common.primitives">Chars</A></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.common.primitives.Chars.BYTES"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/common/primitives/Chars.html#BYTES">BYTES</A></CODE></TD>
-<TD ALIGN="right"><CODE>2</CODE></TD>
-</TR>
-</FONT></TD>
-</TR>
-</TABLE>
-
-<P>
-
-<P>
-
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="3">com.google.common.primitives.<A HREF="com/google/common/primitives/Ints.html" title="class in com.google.common.primitives">Ints</A></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.common.primitives.Ints.BYTES"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/common/primitives/Ints.html#BYTES">BYTES</A></CODE></TD>
-<TD ALIGN="right"><CODE>4</CODE></TD>
-</TR>
-</FONT></TD>
-</TR>
-</TABLE>
-
-<P>
-
-<P>
-
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="3">com.google.common.primitives.<A HREF="com/google/common/primitives/Longs.html" title="class in com.google.common.primitives">Longs</A></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.common.primitives.Longs.BYTES"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/common/primitives/Longs.html#BYTES">BYTES</A></CODE></TD>
-<TD ALIGN="right"><CODE>8</CODE></TD>
-</TR>
-</FONT></TD>
-</TR>
-</TABLE>
-
-<P>
-
-<P>
-
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="3">com.google.common.primitives.<A HREF="com/google/common/primitives/Shorts.html" title="class in com.google.common.primitives">Shorts</A></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.common.primitives.Shorts.BYTES"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/common/primitives/Shorts.html#BYTES">BYTES</A></CODE></TD>
-<TD ALIGN="right"><CODE>2</CODE></TD>
-</TR>
-</FONT></TD>
-</TR>
-</TABLE>
-
-<P>
-
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="index.html?constant-values.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="constant-values.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/deprecated-list.html b/javadoc/deprecated-list.html
deleted file mode 100644
index e677746..0000000
--- a/javadoc/deprecated-list.html
+++ /dev/null
@@ -1,167 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Deprecated List (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Deprecated List (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Deprecated</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="index.html?deprecated-list.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="deprecated-list.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Deprecated API</B></H2>
-</CENTER>
-<HR SIZE="4" NOSHADE>
-<B>Contents</B><UL>
-<LI><A HREF="#method">Deprecated Methods</A>
-</UL>
-
-<A NAME="method"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Deprecated Methods</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="com/google/common/collect/Ordering.html#from(com.google.common.collect.Ordering)">com.google.common.collect.Ordering.from(Ordering<T>)</A>
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>no need to use this</I>&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><A HREF="com/google/common/io/ByteArrayDataOutput.html#writeBytes(java.lang.String)">com.google.common.io.ByteArrayDataOutput.writeBytes(String)</A>
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>This method is dangerous as it discards the high byte of
- every character. For UTF-8, use <code>write(s.getBytes(Charsets.UTF_8))</code>.</I>&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Deprecated</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="index.html?deprecated-list.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="deprecated-list.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/help-doc.html b/javadoc/help-doc.html
deleted file mode 100644
index ecb861d..0000000
--- a/javadoc/help-doc.html
+++ /dev/null
@@ -1,223 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-API Help (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="API Help (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Help</B></FONT>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="index.html?help-doc.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="help-doc.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H1>
-How This API Document Is Organized</H1>
-</CENTER>
-This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.<H3>
-Overview</H3>
-<BLOCKQUOTE>
-
-<P>
-The <A HREF="overview-summary.html">Overview</A> page is the front page of this API document and provides a list of all packages with a summary for each.  This page can also contain an overall description of the set of packages.</BLOCKQUOTE>
-<H3>
-Package</H3>
-<BLOCKQUOTE>
-
-<P>
-Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain four categories:<UL>
-<LI>Interfaces (italic)<LI>Classes<LI>Enums<LI>Exceptions<LI>Errors<LI>Annotation Types</UL>
-</BLOCKQUOTE>
-<H3>
-Class/Interface</H3>
-<BLOCKQUOTE>
-
-<P>
-Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:<UL>
-<LI>Class inheritance diagram<LI>Direct Subclasses<LI>All Known Subinterfaces<LI>All Known Implementing Classes<LI>Class/interface declaration<LI>Class/interface description
-<P>
-<LI>Nested Class Summary<LI>Field Summary<LI>Constructor Summary<LI>Method Summary
-<P>
-<LI>Field Detail<LI>Constructor Detail<LI>Method Detail</UL>
-Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.</BLOCKQUOTE>
-</BLOCKQUOTE>
-<H3>
-Annotation Type</H3>
-<BLOCKQUOTE>
-
-<P>
-Each annotation type has its own separate page with the following sections:<UL>
-<LI>Annotation Type declaration<LI>Annotation Type description<LI>Required Element Summary<LI>Optional Element Summary<LI>Element Detail</UL>
-</BLOCKQUOTE>
-</BLOCKQUOTE>
-<H3>
-Enum</H3>
-<BLOCKQUOTE>
-
-<P>
-Each enum has its own separate page with the following sections:<UL>
-<LI>Enum declaration<LI>Enum description<LI>Enum Constant Summary<LI>Enum Constant Detail</UL>
-</BLOCKQUOTE>
-<H3>
-Use</H3>
-<BLOCKQUOTE>
-Each documented package, class and interface has its own Use page.  This page describes what packages, classes, methods, constructors and fields use any part of the given class or package. Given a class or interface A, its Use page includes subclasses of A, fields declared as A, methods that return A, and methods and constructors with parameters of type A.  You can access this page by first going to the package, class or interface, then clicking on the "Use" link in the navigation bar.</BLOCKQUOTE>
-<H3>
-Tree (Class Hierarchy)</H3>
-<BLOCKQUOTE>
-There is a <A HREF="overview-tree.html">Class Hierarchy</A> page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with <code>java.lang.Object</code>. The interfaces do not inherit from <code>java.lang.Object</code>.<UL>
-<LI>When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.<LI>When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.</UL>
-</BLOCKQUOTE>
-<H3>
-Deprecated API</H3>
-<BLOCKQUOTE>
-The <A HREF="deprecated-list.html">Deprecated API</A> page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.</BLOCKQUOTE>
-<H3>
-Index</H3>
-<BLOCKQUOTE>
-The <A HREF="index-all.html">Index</A> contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.</BLOCKQUOTE>
-<H3>
-Prev/Next</H3>
-These links take you to the next or previous class, interface, package, or related page.<H3>
-Frames/No Frames</H3>
-These links show and hide the HTML frames.  All pages are available with or without frames.
-<P>
-<H3>
-Serialized Form</H3>
-Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description.
-<P>
-<H3>
-Constant Field Values</H3>
-The <a href="constant-values.html">Constant Field Values</a> page lists the static final fields and their values.
-<P>
-<FONT SIZE="-1">
-<EM>
-This help file applies to API documentation generated using the standard doclet.</EM>
-</FONT>
-<BR>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Help</B></FONT>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="index.html?help-doc.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="help-doc.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/index-all.html b/javadoc/index-all.html
deleted file mode 100644
index 74a8668..0000000
--- a/javadoc/index-all.html
+++ /dev/null
@@ -1,5035 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Index (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="./stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Index (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="./overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="./overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="./deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="./help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="./index.html?index-all.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="index-all.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="./allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="./allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<A HREF="#_A_">A</A> <A HREF="#_B_">B</A> <A HREF="#_C_">C</A> <A HREF="#_D_">D</A> <A HREF="#_E_">E</A> <A HREF="#_F_">F</A> <A HREF="#_G_">G</A> <A HREF="#_H_">H</A> <A HREF="#_I_">I</A> <A HREF="#_J_">J</A> <A HREF="#_K_">K</A> <A HREF="#_L_">L</A> <A HREF="#_M_">M</A> <A HREF="#_N_">N</A> <A HREF="#_O_">O</A> <A HREF="#_P_">P</A> <A HREF="#_R_">R</A> <A HREF="#_S_">S</A> <A HREF="#_T_">T</A> <A HREF="#_U_">U</A> <A HREF="#_V_">V</A> <A HREF="#_W_">W</A> <HR>
-<A NAME="_A_"><!-- --></A><H2>
-<B>A</B></H2>
-<DL>
-<DT><A HREF="./com/google/common/util/concurrent/AbstractCheckedFuture.html" title="class in com.google.common.util.concurrent"><B>AbstractCheckedFuture</B></A>&lt;<A HREF="./com/google/common/util/concurrent/AbstractCheckedFuture.html" title="type parameter in AbstractCheckedFuture">V</A>,<A HREF="./com/google/common/util/concurrent/AbstractCheckedFuture.html" title="type parameter in AbstractCheckedFuture">E</A> extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</A>&gt; - Class in <A HREF="./com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A><DD>A delegating wrapper around a <A HREF="./com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent"><CODE>ListenableFuture</CODE></A> that adds support for
- the <A HREF="./com/google/common/util/concurrent/AbstractCheckedFuture.html#checkedGet()"><CODE>AbstractCheckedFuture.checkedGet()</CODE></A> and <A HREF="./com/google/common/util/concurrent/AbstractCheckedFuture.html#checkedGet(long, java.util.concurrent.TimeUnit)"><CODE>AbstractCheckedFuture.checkedGet(long, TimeUnit)</CODE></A> methods.<DT><A HREF="./com/google/common/util/concurrent/AbstractCheckedFuture.html#AbstractCheckedFuture(com.google.common.util.concurrent.ListenableFuture)"><B>AbstractCheckedFuture(ListenableFuture&lt;V&gt;)</B></A> - 
-Constructor for class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractCheckedFuture.html" title="class in com.google.common.util.concurrent">AbstractCheckedFuture</A>
-<DD>Constructs an <code>AbstractCheckedFuture</code> that wraps a delegate.
-<DT><A HREF="./com/google/common/util/concurrent/AbstractExecutionThreadService.html" title="class in com.google.common.util.concurrent"><B>AbstractExecutionThreadService</B></A> - Class in <A HREF="./com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A><DD>Base class for services that can implement <A HREF="./com/google/common/util/concurrent/AbstractExecutionThreadService.html#startUp()"><CODE>AbstractExecutionThreadService.startUp()</CODE></A>, <A HREF="./com/google/common/util/concurrent/AbstractExecutionThreadService.html#run()"><CODE>AbstractExecutionThreadService.run()</CODE></A> and
- <A HREF="./com/google/common/util/concurrent/AbstractExecutionThreadService.html#shutDown()"><CODE>AbstractExecutionThreadService.shutDown()</CODE></A> methods.<DT><A HREF="./com/google/common/util/concurrent/AbstractExecutionThreadService.html#AbstractExecutionThreadService()"><B>AbstractExecutionThreadService()</B></A> - 
-Constructor for class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractExecutionThreadService.html" title="class in com.google.common.util.concurrent">AbstractExecutionThreadService</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/AbstractFuture.html" title="class in com.google.common.util.concurrent"><B>AbstractFuture</B></A>&lt;<A HREF="./com/google/common/util/concurrent/AbstractFuture.html" title="type parameter in AbstractFuture">V</A>&gt; - Class in <A HREF="./com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A><DD>An abstract implementation of the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>Future</CODE></A> interface.<DT><A HREF="./com/google/common/util/concurrent/AbstractFuture.html#AbstractFuture()"><B>AbstractFuture()</B></A> - 
-Constructor for class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractFuture.html" title="class in com.google.common.util.concurrent">AbstractFuture</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/AbstractIdleService.html" title="class in com.google.common.util.concurrent"><B>AbstractIdleService</B></A> - Class in <A HREF="./com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A><DD>Base class for services that do not need a thread while "running"
- but may need one during startup and shutdown.<DT><A HREF="./com/google/common/util/concurrent/AbstractIdleService.html#AbstractIdleService()"><B>AbstractIdleService()</B></A> - 
-Constructor for class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractIdleService.html" title="class in com.google.common.util.concurrent">AbstractIdleService</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/AbstractIterator.html" title="class in com.google.common.collect"><B>AbstractIterator</B></A>&lt;<A HREF="./com/google/common/collect/AbstractIterator.html" title="type parameter in AbstractIterator">T</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>This class provides a skeletal implementation of the <code>Iterator</code>
- interface, to make this interface easier to implement for certain types of
- data sources.<DT><A HREF="./com/google/common/collect/AbstractIterator.html#AbstractIterator()"><B>AbstractIterator()</B></A> - 
-Constructor for class com.google.common.collect.<A HREF="./com/google/common/collect/AbstractIterator.html" title="class in com.google.common.collect">AbstractIterator</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/AbstractListenableFuture.html" title="class in com.google.common.util.concurrent"><B>AbstractListenableFuture</B></A>&lt;<A HREF="./com/google/common/util/concurrent/AbstractListenableFuture.html" title="type parameter in AbstractListenableFuture">V</A>&gt; - Class in <A HREF="./com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A><DD>An abstract base implementation of the listener support provided by
- <A HREF="./com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent"><CODE>ListenableFuture</CODE></A>.<DT><A HREF="./com/google/common/util/concurrent/AbstractListenableFuture.html#AbstractListenableFuture()"><B>AbstractListenableFuture()</B></A> - 
-Constructor for class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractListenableFuture.html" title="class in com.google.common.util.concurrent">AbstractListenableFuture</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/AbstractService.html" title="class in com.google.common.util.concurrent"><B>AbstractService</B></A> - Class in <A HREF="./com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A><DD>Base class for implementing services that can handle <A HREF="./com/google/common/util/concurrent/AbstractService.html#doStart()"><CODE>AbstractService.doStart()</CODE></A> and
- <A HREF="./com/google/common/util/concurrent/AbstractService.html#doStop()"><CODE>AbstractService.doStop()</CODE></A> requests, responding to them with <A HREF="./com/google/common/util/concurrent/AbstractService.html#notifyStarted()"><CODE>AbstractService.notifyStarted()</CODE></A>
- and <A HREF="./com/google/common/util/concurrent/AbstractService.html#notifyStopped()"><CODE>AbstractService.notifyStopped()</CODE></A> callbacks.<DT><A HREF="./com/google/common/util/concurrent/AbstractService.html#AbstractService()"><B>AbstractService()</B></A> - 
-Constructor for class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractService.html" title="class in com.google.common.util.concurrent">AbstractService</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/io/PatternFilenameFilter.html#accept(java.io.File, java.lang.String)"><B>accept(File, String)</B></A> - 
-Method in class com.google.common.io.<A HREF="./com/google/common/io/PatternFilenameFilter.html" title="class in com.google.common.io">PatternFilenameFilter</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/base/Objects.ToStringHelper.html#add(java.lang.String, java.lang.Object)"><B>add(String, Object)</B></A> - 
-Method in class com.google.common.base.<A HREF="./com/google/common/base/Objects.ToStringHelper.html" title="class in com.google.common.base">Objects.ToStringHelper</A>
-<DD>Adds a name/value pair to the formatted output in <code>name=value</code>
- format.
-<DT><A HREF="./com/google/common/collect/ConcurrentHashMultiset.html#add(E, int)"><B>add(E, int)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect">ConcurrentHashMultiset</A>
-<DD>Adds a number of occurrences of the specified element to this multiset.
-<DT><A HREF="./com/google/common/collect/ForwardingCollection.html#add(E)"><B>add(E)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingList.html#add(int, E)"><B>add(int, E)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect">ForwardingList</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingListIterator.html#add(E)"><B>add(E)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingListIterator.html" title="class in com.google.common.collect">ForwardingListIterator</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingMultiset.html#add(E, int)"><B>add(E, int)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect">ForwardingMultiset</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableCollection.html#add(E)"><B>add(E)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>
-<DD>Guaranteed to throw an exception and leave the collection unmodified.
-<DT><A HREF="./com/google/common/collect/ImmutableList.html#add(int, E)"><B>add(int, E)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>
-<DD>Guaranteed to throw an exception and leave the list unmodified.
-<DT><A HREF="./com/google/common/collect/ImmutableList.Builder.html#add(E)"><B>add(E)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect">ImmutableList.Builder</A>
-<DD>Adds <code>element</code> to the <code>ImmutableList</code>.
-<DT><A HREF="./com/google/common/collect/ImmutableList.Builder.html#add(E...)"><B>add(E...)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect">ImmutableList.Builder</A>
-<DD>Adds each element of <code>elements</code> to the <code>ImmutableList</code>.
-<DT><A HREF="./com/google/common/collect/ImmutableMultiset.html#add(E, int)"><B>add(E, int)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>
-<DD>Guaranteed to throw an exception and leave the collection unmodified.
-<DT><A HREF="./com/google/common/collect/ImmutableMultiset.Builder.html#add(E)"><B>add(E)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>
-<DD>Adds <code>element</code> to the <code>ImmutableMultiset</code>.
-<DT><A HREF="./com/google/common/collect/ImmutableMultiset.Builder.html#add(E...)"><B>add(E...)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>
-<DD>Adds each element of <code>elements</code> to the <code>ImmutableMultiset</code>.
-<DT><A HREF="./com/google/common/collect/ImmutableSet.Builder.html#add(E)"><B>add(E)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A>
-<DD>Adds <code>element</code> to the <code>ImmutableSet</code>.
-<DT><A HREF="./com/google/common/collect/ImmutableSet.Builder.html#add(E...)"><B>add(E...)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A>
-<DD>Adds each element of <code>elements</code> to the <code>ImmutableSet</code>,
- ignoring duplicate elements (only the first duplicate element is added).
-<DT><A HREF="./com/google/common/collect/ImmutableSortedSet.Builder.html#add(E)"><B>add(E)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>
-<DD>Adds <code>element</code> to the <code>ImmutableSortedSet</code>.
-<DT><A HREF="./com/google/common/collect/ImmutableSortedSet.Builder.html#add(E...)"><B>add(E...)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>
-<DD>Adds each element of <code>elements</code> to the <code>ImmutableSortedSet</code>,
- ignoring duplicate elements (only the first duplicate element is added).
-<DT><A HREF="./com/google/common/collect/Multiset.html#add(E, int)"><B>add(E, int)</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>
-<DD>Adds a number of occurrences of an element to this multiset.
-<DT><A HREF="./com/google/common/collect/Multiset.html#add(E)"><B>add(E)</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>
-<DD>Adds a single occurrence of the specified element to this multiset.
-<DT><A HREF="./com/google/common/util/concurrent/ExecutionList.html#add(java.lang.Runnable, java.util.concurrent.Executor)"><B>add(Runnable, Executor)</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/ExecutionList.html" title="class in com.google.common.util.concurrent">ExecutionList</A>
-<DD>Add the runnable/executor pair to the list of pairs to execute.
-<DT><A HREF="./com/google/common/collect/ForwardingCollection.html#addAll(java.util.Collection)"><B>addAll(Collection&lt;? extends E&gt;)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingList.html#addAll(int, java.util.Collection)"><B>addAll(int, Collection&lt;? extends E&gt;)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect">ForwardingList</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableCollection.html#addAll(java.util.Collection)"><B>addAll(Collection&lt;? extends E&gt;)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>
-<DD>Guaranteed to throw an exception and leave the collection unmodified.
-<DT><A HREF="./com/google/common/collect/ImmutableList.html#addAll(int, java.util.Collection)"><B>addAll(int, Collection&lt;? extends E&gt;)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>
-<DD>Guaranteed to throw an exception and leave the list unmodified.
-<DT><A HREF="./com/google/common/collect/ImmutableList.Builder.html#addAll(java.lang.Iterable)"><B>addAll(Iterable&lt;? extends E&gt;)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect">ImmutableList.Builder</A>
-<DD>Adds each element of <code>elements</code> to the <code>ImmutableList</code>.
-<DT><A HREF="./com/google/common/collect/ImmutableList.Builder.html#addAll(java.util.Iterator)"><B>addAll(Iterator&lt;? extends E&gt;)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect">ImmutableList.Builder</A>
-<DD>Adds each element of <code>elements</code> to the <code>ImmutableList</code>.
-<DT><A HREF="./com/google/common/collect/ImmutableMultiset.Builder.html#addAll(java.lang.Iterable)"><B>addAll(Iterable&lt;? extends E&gt;)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>
-<DD>Adds each element of <code>elements</code> to the <code>ImmutableMultiset</code>.
-<DT><A HREF="./com/google/common/collect/ImmutableMultiset.Builder.html#addAll(java.util.Iterator)"><B>addAll(Iterator&lt;? extends E&gt;)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>
-<DD>Adds each element of <code>elements</code> to the <code>ImmutableMultiset</code>.
-<DT><A HREF="./com/google/common/collect/ImmutableSet.Builder.html#addAll(java.lang.Iterable)"><B>addAll(Iterable&lt;? extends E&gt;)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A>
-<DD>Adds each element of <code>elements</code> to the <code>ImmutableSet</code>,
- ignoring duplicate elements (only the first duplicate element is added).
-<DT><A HREF="./com/google/common/collect/ImmutableSet.Builder.html#addAll(java.util.Iterator)"><B>addAll(Iterator&lt;? extends E&gt;)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A>
-<DD>Adds each element of <code>elements</code> to the <code>ImmutableSet</code>,
- ignoring duplicate elements (only the first duplicate element is added).
-<DT><A HREF="./com/google/common/collect/ImmutableSortedSet.Builder.html#addAll(java.lang.Iterable)"><B>addAll(Iterable&lt;? extends E&gt;)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>
-<DD>Adds each element of <code>elements</code> to the <code>ImmutableSortedSet</code>,
- ignoring duplicate elements (only the first duplicate element is added).
-<DT><A HREF="./com/google/common/collect/ImmutableSortedSet.Builder.html#addAll(java.util.Iterator)"><B>addAll(Iterator&lt;? extends E&gt;)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>
-<DD>Adds each element of <code>elements</code> to the <code>ImmutableSortedSet</code>,
- ignoring duplicate elements (only the first duplicate element is added).
-<DT><A HREF="./com/google/common/collect/Iterables.html#addAll(java.util.Collection, java.lang.Iterable)"><B>addAll(Collection&lt;T&gt;, Iterable&lt;? extends T&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
-<DD>Adds all elements in <code>iterable</code> to <code>collection</code>.
-<DT><A HREF="./com/google/common/collect/Iterators.html#addAll(java.util.Collection, java.util.Iterator)"><B>addAll(Collection&lt;T&gt;, Iterator&lt;? extends T&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
-<DD>Adds all elements in <code>iterator</code> to <code>collection</code>.
-<DT><A HREF="./com/google/common/collect/ImmutableMultiset.Builder.html#addCopies(E, int)"><B>addCopies(E, int)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>
-<DD>Adds a number of occurrences of an element to this <code>ImmutableMultiset</code>.
-<DT><A HREF="./com/google/common/util/concurrent/Executors.html#addDelayedShutdownHook(java.util.concurrent.ExecutorService, long, java.util.concurrent.TimeUnit)"><B>addDelayedShutdownHook(ExecutorService, long, TimeUnit)</B></A> - 
-Static method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/Executors.html" title="class in com.google.common.util.concurrent">Executors</A>
-<DD>Add a shutdown hook to wait for thread completion in the given
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>service</CODE></A>.
-<DT><A HREF="./com/google/common/util/concurrent/AbstractCheckedFuture.html#addListener(java.lang.Runnable, java.util.concurrent.Executor)"><B>addListener(Runnable, Executor)</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractCheckedFuture.html" title="class in com.google.common.util.concurrent">AbstractCheckedFuture</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/AbstractListenableFuture.html#addListener(java.lang.Runnable, java.util.concurrent.Executor)"><B>addListener(Runnable, Executor)</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractListenableFuture.html" title="class in com.google.common.util.concurrent">AbstractListenableFuture</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/ListenableFuture.html#addListener(java.lang.Runnable, java.util.concurrent.Executor)"><B>addListener(Runnable, Executor)</B></A> - 
-Method in interface com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>
-<DD>Adds a listener and executor to the ListenableFuture.
-<DT><A HREF="./com/google/common/util/concurrent/ListenableFutureTask.html#addListener(java.lang.Runnable, java.util.concurrent.Executor)"><B>addListener(Runnable, Executor)</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/ListenableFutureTask.html" title="class in com.google.common.util.concurrent">ListenableFutureTask</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/base/Objects.ToStringHelper.html#addValue(java.lang.Object)"><B>addValue(Object)</B></A> - 
-Method in class com.google.common.base.<A HREF="./com/google/common/base/Objects.ToStringHelper.html" title="class in com.google.common.base">Objects.ToStringHelper</A>
-<DD>Adds a value to the formatted output in <code>value</code> format.<p/>
-
- It is strongly encouraged to use <A HREF="./com/google/common/base/Objects.ToStringHelper.html#add(java.lang.String, java.lang.Object)"><CODE>Objects.ToStringHelper.add(String, Object)</CODE></A> instead and
- give value a readable name.
-<DT><A HREF="./com/google/common/collect/Iterables.html#all(java.lang.Iterable, com.google.common.base.Predicate)"><B>all(Iterable&lt;T&gt;, Predicate&lt;? super T&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
-<DD>Returns <code>true</code> if every element in <code>iterable</code> satisfies the
- predicate.
-<DT><A HREF="./com/google/common/collect/Iterators.html#all(java.util.Iterator, com.google.common.base.Predicate)"><B>all(Iterator&lt;T&gt;, Predicate&lt;? super T&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
-<DD>Returns <code>true</code> if every element returned by <code>iterator</code>
- satisfies the given predicate.
-<DT><A HREF="./com/google/common/base/Predicates.html#alwaysFalse()"><B>alwaysFalse()</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Predicates.html" title="class in com.google.common.base">Predicates</A>
-<DD>Returns a predicate that always evaluates to <code>false</code>.
-<DT><A HREF="./com/google/common/base/Predicates.html#alwaysTrue()"><B>alwaysTrue()</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Predicates.html" title="class in com.google.common.base">Predicates</A>
-<DD>Returns a predicate that always evaluates to <code>true</code>.
-<DT><A HREF="./com/google/common/base/CharMatcher.html#and(com.google.common.base.CharMatcher)"><B>and(CharMatcher)</B></A> - 
-Method in class com.google.common.base.<A HREF="./com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>
-<DD>Returns a matcher that matches any character matched by both this matcher
- and <code>other</code>.
-<DT><A HREF="./com/google/common/base/Predicates.html#and(java.lang.Iterable)"><B>and(Iterable&lt;? extends Predicate&lt;? super T&gt;&gt;)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Predicates.html" title="class in com.google.common.base">Predicates</A>
-<DD>Returns a predicate that evaluates to <code>true</code> if each of its
- components evaluates to <code>true</code>.
-<DT><A HREF="./com/google/common/base/Predicates.html#and(com.google.common.base.Predicate...)"><B>and(Predicate&lt;? super T&gt;...)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Predicates.html" title="class in com.google.common.base">Predicates</A>
-<DD>Returns a predicate that evaluates to <code>true</code> if each of its
- components evaluates to <code>true</code>.
-<DT><A HREF="./com/google/common/base/Predicates.html#and(com.google.common.base.Predicate, com.google.common.base.Predicate)"><B>and(Predicate&lt;? super T&gt;, Predicate&lt;? super T&gt;)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Predicates.html" title="class in com.google.common.base">Predicates</A>
-<DD>Returns a predicate that evaluates to <code>true</code> if both of its
- components evaluate to <code>true</code>.
-<DT><A HREF="./com/google/common/base/CharMatcher.html#ANY"><B>ANY</B></A> - 
-Static variable in class com.google.common.base.<A HREF="./com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>
-<DD>Matches any character.
-<DT><A HREF="./com/google/common/collect/Iterables.html#any(java.lang.Iterable, com.google.common.base.Predicate)"><B>any(Iterable&lt;T&gt;, Predicate&lt;? super T&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
-<DD>Returns <code>true</code> if one or more elements in <code>iterable</code> satisfy
- the predicate.
-<DT><A HREF="./com/google/common/collect/Iterators.html#any(java.util.Iterator, com.google.common.base.Predicate)"><B>any(Iterator&lt;T&gt;, Predicate&lt;? super T&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
-<DD>Returns <code>true</code> if one or more elements returned by <code>iterator</code>
- satisfy the given predicate.
-<DT><A HREF="./com/google/common/base/CharMatcher.html#anyOf(java.lang.CharSequence)"><B>anyOf(CharSequence)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>
-<DD>Returns a <code>char</code> matcher that matches any character present in the
- given character sequence.
-<DT><A HREF="./com/google/common/io/Files.html#append(java.lang.CharSequence, java.io.File, java.nio.charset.Charset)"><B>append(CharSequence, File, Charset)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/Files.html" title="class in com.google.common.io">Files</A>
-<DD>Appends a character sequence (such as a string) to a file using the given
- character set.
-<DT><A HREF="./com/google/common/base/Joiner.html#appendTo(A, java.lang.Iterable)"><B>appendTo(A, Iterable&lt;?&gt;)</B></A> - 
-Method in class com.google.common.base.<A HREF="./com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A>
-<DD>Appends the string representation of each of <code>parts</code>, using the
- previously configured separator between each, to <code>appendable</code>.
-<DT><A HREF="./com/google/common/base/Joiner.html#appendTo(A, java.lang.Object[])"><B>appendTo(A, Object[])</B></A> - 
-Method in class com.google.common.base.<A HREF="./com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A>
-<DD>Appends the string representation of each of <code>parts</code>, using the
- previously configured separator between each, to <code>appendable</code>.
-<DT><A HREF="./com/google/common/base/Joiner.html#appendTo(A, java.lang.Object, java.lang.Object, java.lang.Object...)"><B>appendTo(A, Object, Object, Object...)</B></A> - 
-Method in class com.google.common.base.<A HREF="./com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A>
-<DD>Appends to <code>appendable</code> the string representation of each of the
- remaining arguments.
-<DT><A HREF="./com/google/common/base/Joiner.html#appendTo(java.lang.StringBuilder, java.lang.Iterable)"><B>appendTo(StringBuilder, Iterable&lt;?&gt;)</B></A> - 
-Method in class com.google.common.base.<A HREF="./com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A>
-<DD>Appends the string representation of each of <code>parts</code>, using the
- previously configured separator between each, to <code>builder</code>.
-<DT><A HREF="./com/google/common/base/Joiner.html#appendTo(java.lang.StringBuilder, java.lang.Object[])"><B>appendTo(StringBuilder, Object[])</B></A> - 
-Method in class com.google.common.base.<A HREF="./com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A>
-<DD>Appends the string representation of each of <code>parts</code>, using the
- previously configured separator between each, to <code>builder</code>.
-<DT><A HREF="./com/google/common/base/Joiner.html#appendTo(java.lang.StringBuilder, java.lang.Object, java.lang.Object, java.lang.Object...)"><B>appendTo(StringBuilder, Object, Object, Object...)</B></A> - 
-Method in class com.google.common.base.<A HREF="./com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A>
-<DD>Appends to <code>builder</code> the string representation of each of the
- remaining arguments.
-<DT><A HREF="./com/google/common/base/Joiner.MapJoiner.html#appendTo(A, java.util.Map)"><B>appendTo(A, Map&lt;?, ?&gt;)</B></A> - 
-Method in class com.google.common.base.<A HREF="./com/google/common/base/Joiner.MapJoiner.html" title="class in com.google.common.base">Joiner.MapJoiner</A>
-<DD>Appends the string representation of each entry of <code>map</code>, using the
- previously configured separator and key-value separator, to <code>appendable</code>.
-<DT><A HREF="./com/google/common/base/Joiner.MapJoiner.html#appendTo(java.lang.StringBuilder, java.util.Map)"><B>appendTo(StringBuilder, Map&lt;?, ?&gt;)</B></A> - 
-Method in class com.google.common.base.<A HREF="./com/google/common/base/Joiner.MapJoiner.html" title="class in com.google.common.base">Joiner.MapJoiner</A>
-<DD>Appends the string representation of each entry of <code>map</code>, using the
- previously configured separator and key-value separator, to <code>builder</code>.
-<DT><A HREF="./com/google/common/base/CharMatcher.html#apply(java.lang.Character)"><B>apply(Character)</B></A> - 
-Method in class com.google.common.base.<A HREF="./com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>
-<DD>Returns <code>true</code> if this matcher matches the given character.
-<DT><A HREF="./com/google/common/base/Function.html#apply(F)"><B>apply(F)</B></A> - 
-Method in interface com.google.common.base.<A HREF="./com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>
-<DD>Applies the function to an object of type <code>F</code>, resulting in an object
- of type <code>T</code>.
-<DT><A HREF="./com/google/common/base/Predicate.html#apply(T)"><B>apply(T)</B></A> - 
-Method in interface com.google.common.base.<A HREF="./com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>
-<DD>Applies this predicate to the given object.
-<DT><A HREF="./com/google/common/collect/Ordering.html#arbitrary()"><B>arbitrary()</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>
-<DD>Returns an arbitrary ordering over all objects, for which <code>compare(a,
- b) == 0</code> implies <code>a == b</code> (identity equality).
-<DT><A HREF="./com/google/common/collect/MapDifference.html#areEqual()"><B>areEqual()</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/MapDifference.html" title="interface in com.google.common.collect">MapDifference</A>
-<DD>Returns <code>true</code> if there are no differences between the two maps;
- that is, if the maps are equal.
-<DT><A HREF="./com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect"><B>ArrayListMultimap</B></A>&lt;<A HREF="./com/google/common/collect/ArrayListMultimap.html" title="type parameter in ArrayListMultimap">K</A>,<A HREF="./com/google/common/collect/ArrayListMultimap.html" title="type parameter in ArrayListMultimap">V</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>Implementation of <code>Multimap</code> that uses an <code>ArrayList</code> to store
- the values for a given key.<DT><A HREF="./com/google/common/base/CharMatcher.html#ASCII"><B>ASCII</B></A> - 
-Static variable in class com.google.common.base.<A HREF="./com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>
-<DD>Determines whether a character is ASCII, meaning that its code point is
- less than 128.
-<DT><A HREF="./com/google/common/collect/Iterators.html#asEnumeration(java.util.Iterator)"><B>asEnumeration(Iterator&lt;T&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
-<DD>Adapts an <code>Iterator</code> to the <code>Enumeration</code> interface.
-<DT><A HREF="./com/google/common/collect/ImmutableCollection.html#asList()"><B>asList()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>
-<DD>Returns a list view of the collection.
-<DT><A HREF="./com/google/common/collect/ImmutableList.html#asList()"><B>asList()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>
-<DD>Returns this list instance.
-<DT><A HREF="./com/google/common/collect/Lists.html#asList(E, E[])"><B>asList(E, E[])</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Lists.html" title="class in com.google.common.collect">Lists</A>
-<DD>Returns an unmodifiable list containing the specified first element and
- backed by the specified array of additional elements.
-<DT><A HREF="./com/google/common/collect/Lists.html#asList(E, E, E[])"><B>asList(E, E, E[])</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Lists.html" title="class in com.google.common.collect">Lists</A>
-<DD>Returns an unmodifiable list containing the specified first and second
- element, and backed by the specified array of additional elements.
-<DT><A HREF="./com/google/common/primitives/Booleans.html#asList(boolean...)"><B>asList(boolean...)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Booleans.html" title="class in com.google.common.primitives">Booleans</A>
-<DD>Returns a fixed-size list backed by the specified array, similar to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true#asList(T...)" title="class or interface in java.util"><CODE>Arrays.asList(Object[])</CODE></A>.
-<DT><A HREF="./com/google/common/primitives/Bytes.html#asList(byte...)"><B>asList(byte...)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Bytes.html" title="class in com.google.common.primitives">Bytes</A>
-<DD>Returns a fixed-size list backed by the specified array, similar to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true#asList(T...)" title="class or interface in java.util"><CODE>Arrays.asList(Object[])</CODE></A>.
-<DT><A HREF="./com/google/common/primitives/Chars.html#asList(char...)"><B>asList(char...)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Chars.html" title="class in com.google.common.primitives">Chars</A>
-<DD>Returns a fixed-size list backed by the specified array, similar to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true#asList(T...)" title="class or interface in java.util"><CODE>Arrays.asList(Object[])</CODE></A>.
-<DT><A HREF="./com/google/common/primitives/Doubles.html#asList(double...)"><B>asList(double...)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Doubles.html" title="class in com.google.common.primitives">Doubles</A>
-<DD>Returns a fixed-size list backed by the specified array, similar to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true#asList(T...)" title="class or interface in java.util"><CODE>Arrays.asList(Object[])</CODE></A>.
-<DT><A HREF="./com/google/common/primitives/Floats.html#asList(float...)"><B>asList(float...)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Floats.html" title="class in com.google.common.primitives">Floats</A>
-<DD>Returns a fixed-size list backed by the specified array, similar to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true#asList(T...)" title="class or interface in java.util"><CODE>Arrays.asList(Object[])</CODE></A>.
-<DT><A HREF="./com/google/common/primitives/Ints.html#asList(int...)"><B>asList(int...)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Ints.html" title="class in com.google.common.primitives">Ints</A>
-<DD>Returns a fixed-size list backed by the specified array, similar to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true#asList(T...)" title="class or interface in java.util"><CODE>Arrays.asList(Object[])</CODE></A>.
-<DT><A HREF="./com/google/common/primitives/Longs.html#asList(long...)"><B>asList(long...)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Longs.html" title="class in com.google.common.primitives">Longs</A>
-<DD>Returns a fixed-size list backed by the specified array, similar to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true#asList(T...)" title="class or interface in java.util"><CODE>Arrays.asList(Object[])</CODE></A>.
-<DT><A HREF="./com/google/common/primitives/Shorts.html#asList(short...)"><B>asList(short...)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Shorts.html" title="class in com.google.common.primitives">Shorts</A>
-<DD>Returns a fixed-size list backed by the specified array, similar to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true#asList(T...)" title="class or interface in java.util"><CODE>Arrays.asList(Object[])</CODE></A>.
-<DT><A HREF="./com/google/common/collect/ForwardingMultimap.html#asMap()"><B>asMap()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect">ForwardingMultimap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html#asMap()"><B>asMap()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
-<DD>Returns an immutable map that associates each key with its corresponding
- values in the multimap.
-<DT><A HREF="./com/google/common/collect/LinkedListMultimap.html#asMap()"><B>asMap()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ListMultimap.html#asMap()"><B>asMap()</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>
-<DD>Returns a map view that associates each key with the corresponding values
- in the multimap.
-<DT><A HREF="./com/google/common/collect/Multimap.html#asMap()"><B>asMap()</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>
-<DD>Returns a map view that associates each key with the corresponding values
- in the multimap.
-<DT><A HREF="./com/google/common/collect/SetMultimap.html#asMap()"><B>asMap()</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>
-<DD>Returns a map view that associates each key with the corresponding values
- in the multimap.
-<DT><A HREF="./com/google/common/collect/SortedSetMultimap.html#asMap()"><B>asMap()</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>
-<DD>Returns a map view that associates each key with the corresponding values
- in the multimap.
-<DT><A HREF="./com/google/common/collect/TreeMultimap.html#asMap()"><B>asMap()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">TreeMultimap</A>
-<DD>Returns a map view that associates each key with the corresponding values
- in the multimap.
-<DT><A HREF="./com/google/common/io/CharStreams.html#asWriter(java.lang.Appendable)"><B>asWriter(Appendable)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/CharStreams.html" title="class in com.google.common.io">CharStreams</A>
-<DD>Returns a Writer that sends all output to the given <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang"><CODE>Appendable</CODE></A>
- target.
-<DT><A HREF="./com/google/common/collect/AsynchronousComputationException.html" title="class in com.google.common.collect"><B>AsynchronousComputationException</B></A> - Exception in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>Wraps an exception that occured during a computation in a different thread.<DT><A HREF="./com/google/common/collect/AsynchronousComputationException.html#AsynchronousComputationException(java.lang.Throwable)"><B>AsynchronousComputationException(Throwable)</B></A> - 
-Constructor for exception com.google.common.collect.<A HREF="./com/google/common/collect/AsynchronousComputationException.html" title="class in com.google.common.collect">AsynchronousComputationException</A>
-<DD>Creates a new instance with the given cause.
-<DT><A HREF="./com/google/common/io/LimitInputStream.html#available()"><B>available()</B></A> - 
-Method in class com.google.common.io.<A HREF="./com/google/common/io/LimitInputStream.html" title="class in com.google.common.io">LimitInputStream</A>
-<DD>&nbsp;
-</DL>
-<HR>
-<A NAME="_B_"><!-- --></A><H2>
-<B>B</B></H2>
-<DL>
-<DT><A HREF="./com/google/common/collect/BiMap.html" title="interface in com.google.common.collect"><B>BiMap</B></A>&lt;<A HREF="./com/google/common/collect/BiMap.html" title="type parameter in BiMap">K</A>,<A HREF="./com/google/common/collect/BiMap.html" title="type parameter in BiMap">V</A>&gt; - Interface in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A bimap (or "bidirectional map") is a map that preserves the uniqueness of
- its values as well as that of its keys.<DT><A HREF="./com/google/common/collect/Ordering.html#binarySearch(java.util.List, T)"><B>binarySearch(List&lt;? extends T&gt;, T)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>
-<DD><A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#binarySearch(java.util.List, T, java.util.Comparator)" title="class or interface in java.util"><CODE>Searches</CODE></A>
- <code>sortedList</code> for <code>key</code> using the binary search algorithm.
-<DT><A HREF="./com/google/common/primitives/Booleans.html" title="class in com.google.common.primitives"><B>Booleans</B></A> - Class in <A HREF="./com/google/common/primitives/package-summary.html">com.google.common.primitives</A><DD>Static utility methods pertaining to <code>boolean</code> primitives, that are not
- already found in either <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang"><CODE>Boolean</CODE></A> or <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true" title="class or interface in java.util"><CODE>Arrays</CODE></A>.<DT><A HREF="./com/google/common/base/CharMatcher.html#BREAKING_WHITESPACE"><B>BREAKING_WHITESPACE</B></A> - 
-Static variable in class com.google.common.base.<A HREF="./com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>
-<DD>Determines whether a character is a breaking whitespace (that is,
- a whitespace which can be interpreted as a break between words
- for formatting purposes).
-<DT><A HREF="./com/google/common/collect/ImmutableBiMap.Builder.html#build()"><B>build()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect">ImmutableBiMap.Builder</A>
-<DD>Returns a newly-created immutable bimap.
-<DT><A HREF="./com/google/common/collect/ImmutableClassToInstanceMap.Builder.html#build()"><B>build()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap.Builder</A>
-<DD>Returns a new immutable class-to-instance map containing the entries
- provided to this builder.
-<DT><A HREF="./com/google/common/collect/ImmutableList.Builder.html#build()"><B>build()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect">ImmutableList.Builder</A>
-<DD>Returns a newly-created <code>ImmutableList</code> based on the contents of
- the <code>Builder</code>.
-<DT><A HREF="./com/google/common/collect/ImmutableListMultimap.Builder.html#build()"><B>build()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder</A>
-<DD>Returns a newly-created immutable multimap.
-<DT><A HREF="./com/google/common/collect/ImmutableMap.Builder.html#build()"><B>build()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">ImmutableMap.Builder</A>
-<DD>Returns a newly-created immutable map.
-<DT><A HREF="./com/google/common/collect/ImmutableMultimap.Builder.html#build()"><B>build()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>
-<DD>Returns a newly-created immutable multimap.
-<DT><A HREF="./com/google/common/collect/ImmutableMultiset.Builder.html#build()"><B>build()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>
-<DD>Returns a newly-created <code>ImmutableMultiset</code> based on the contents
- of the <code>Builder</code>.
-<DT><A HREF="./com/google/common/collect/ImmutableSet.Builder.html#build()"><B>build()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A>
-<DD>Returns a newly-created <code>ImmutableSet</code> based on the contents of
- the <code>Builder</code>.
-<DT><A HREF="./com/google/common/collect/ImmutableSetMultimap.Builder.html#build()"><B>build()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder</A>
-<DD>Returns a newly-created immutable set multimap.
-<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.Builder.html#build()"><B>build()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect">ImmutableSortedMap.Builder</A>
-<DD>Returns a newly-created immutable sorted map.
-<DT><A HREF="./com/google/common/collect/ImmutableSortedSet.Builder.html#build()"><B>build()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>
-<DD>Returns a newly-created <code>ImmutableSortedSet</code> based on the contents
- of the <code>Builder</code> and its comparator.
-<DT><A HREF="./com/google/common/collect/ImmutableBiMap.html#builder()"><B>builder()</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>
-<DD>Returns a new builder.
-<DT><A HREF="./com/google/common/collect/ImmutableClassToInstanceMap.html#builder()"><B>builder()</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap</A>
-<DD>Returns a new builder.
-<DT><A HREF="./com/google/common/collect/ImmutableList.html#builder()"><B>builder()</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>
-<DD>Returns a new builder.
-<DT><A HREF="./com/google/common/collect/ImmutableListMultimap.html#builder()"><B>builder()</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>
-<DD>Returns a new builder.
-<DT><A HREF="./com/google/common/collect/ImmutableMap.html#builder()"><B>builder()</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>
-<DD>Returns a new builder.
-<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html#builder()"><B>builder()</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
-<DD>Returns a new builder.
-<DT><A HREF="./com/google/common/collect/ImmutableMultiset.html#builder()"><B>builder()</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>
-<DD>Returns a new builder.
-<DT><A HREF="./com/google/common/collect/ImmutableSet.html#builder()"><B>builder()</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>
-<DD>Returns a new builder.
-<DT><A HREF="./com/google/common/collect/ImmutableSetMultimap.html#builder()"><B>builder()</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>
-<DD>Returns a new <A HREF="./com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect"><CODE>ImmutableSetMultimap.Builder</CODE></A>.
-<DT><A HREF="./com/google/common/io/ByteArrayDataInput.html" title="interface in com.google.common.io"><B>ByteArrayDataInput</B></A> - Interface in <A HREF="./com/google/common/io/package-summary.html">com.google.common.io</A><DD>An extension of <code>DataInput</code> for reading from in-memory byte arrays; its
- methods offer identical functionality but do not throw <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io"><CODE>IOException</CODE></A>.<DT><A HREF="./com/google/common/io/ByteArrayDataOutput.html" title="interface in com.google.common.io"><B>ByteArrayDataOutput</B></A> - Interface in <A HREF="./com/google/common/io/package-summary.html">com.google.common.io</A><DD>An extension of <code>DataOutput</code> for writing to in-memory byte arrays; its
- methods offer identical functionality but do not throw <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io"><CODE>IOException</CODE></A>.<DT><A HREF="./com/google/common/io/ByteProcessor.html" title="interface in com.google.common.io"><B>ByteProcessor</B></A>&lt;<A HREF="./com/google/common/io/ByteProcessor.html" title="type parameter in ByteProcessor">T</A>&gt; - Interface in <A HREF="./com/google/common/io/package-summary.html">com.google.common.io</A><DD>A callback interface to process bytes from a stream.<DT><A HREF="./com/google/common/primitives/Bytes.html" title="class in com.google.common.primitives"><B>Bytes</B></A> - Class in <A HREF="./com/google/common/primitives/package-summary.html">com.google.common.primitives</A><DD>Static utility methods pertaining to <code>byte</code> primitives, that are not
- already found in either <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Byte.html?is-external=true" title="class or interface in java.lang"><CODE>Byte</CODE></A> or <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true" title="class or interface in java.util"><CODE>Arrays</CODE></A>, <i>and interpret
- bytes as neither signed nor unsigned</i>.<DT><A HREF="./com/google/common/primitives/Chars.html#BYTES"><B>BYTES</B></A> - 
-Static variable in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Chars.html" title="class in com.google.common.primitives">Chars</A>
-<DD>The number of bytes required to represent a primitive <code>char</code>
- value.
-<DT><A HREF="./com/google/common/primitives/Ints.html#BYTES"><B>BYTES</B></A> - 
-Static variable in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Ints.html" title="class in com.google.common.primitives">Ints</A>
-<DD>The number of bytes required to represent a primitive <code>int</code>
- value.
-<DT><A HREF="./com/google/common/primitives/Longs.html#BYTES"><B>BYTES</B></A> - 
-Static variable in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Longs.html" title="class in com.google.common.primitives">Longs</A>
-<DD>The number of bytes required to represent a primitive <code>long</code>
- value.
-<DT><A HREF="./com/google/common/primitives/Shorts.html#BYTES"><B>BYTES</B></A> - 
-Static variable in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Shorts.html" title="class in com.google.common.primitives">Shorts</A>
-<DD>The number of bytes required to represent a primitive <code>short</code>
- value.
-<DT><A HREF="./com/google/common/io/ByteStreams.html" title="class in com.google.common.io"><B>ByteStreams</B></A> - Class in <A HREF="./com/google/common/io/package-summary.html">com.google.common.io</A><DD>Provides utility methods for working with byte arrays and I/O streams.</DL>
-<HR>
-<A NAME="_C_"><!-- --></A><H2>
-<B>C</B></H2>
-<DL>
-<DT><A HREF="./com/google/common/util/concurrent/Callables.html" title="class in com.google.common.util.concurrent"><B>Callables</B></A> - Class in <A HREF="./com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A><DD>Static utility methods pertaining to the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>Callable</CODE></A> interface.<DT><A HREF="./com/google/common/util/concurrent/FakeTimeLimiter.html#callWithTimeout(java.util.concurrent.Callable, long, java.util.concurrent.TimeUnit, boolean)"><B>callWithTimeout(Callable&lt;T&gt;, long, TimeUnit, boolean)</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/FakeTimeLimiter.html" title="class in com.google.common.util.concurrent">FakeTimeLimiter</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/SimpleTimeLimiter.html#callWithTimeout(java.util.concurrent.Callable, long, java.util.concurrent.TimeUnit, boolean)"><B>callWithTimeout(Callable&lt;T&gt;, long, TimeUnit, boolean)</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/SimpleTimeLimiter.html" title="class in com.google.common.util.concurrent">SimpleTimeLimiter</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/TimeLimiter.html#callWithTimeout(java.util.concurrent.Callable, long, java.util.concurrent.TimeUnit, boolean)"><B>callWithTimeout(Callable&lt;T&gt;, long, TimeUnit, boolean)</B></A> - 
-Method in interface com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/TimeLimiter.html" title="interface in com.google.common.util.concurrent">TimeLimiter</A>
-<DD>Invokes a specified Callable, timing out after the specified time limit.
-<DT><A HREF="./com/google/common/util/concurrent/AbstractCheckedFuture.html#cancel(boolean)"><B>cancel(boolean)</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractCheckedFuture.html" title="class in com.google.common.util.concurrent">AbstractCheckedFuture</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/AbstractFuture.html#cancel(boolean)"><B>cancel(boolean)</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractFuture.html" title="class in com.google.common.util.concurrent">AbstractFuture</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/AbstractFuture.html#cancel()"><B>cancel()</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractFuture.html" title="class in com.google.common.util.concurrent">AbstractFuture</A>
-<DD>Subclasses should invoke this method to mark the future as cancelled.
-<DT><A HREF="./com/google/common/util/concurrent/ForwardingFuture.html#cancel(boolean)"><B>cancel(boolean)</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/ForwardingFuture.html" title="class in com.google.common.util.concurrent">ForwardingFuture</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/ValueFuture.html#cancel(boolean)"><B>cancel(boolean)</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/ValueFuture.html" title="class in com.google.common.util.concurrent">ValueFuture</A>
-<DD>
-<DT><A HREF="./com/google/common/collect/Sets.html#cartesianProduct(java.util.List)"><B>cartesianProduct(List&lt;? extends Set&lt;? extends B&gt;&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Sets.html" title="class in com.google.common.collect">Sets</A>
-<DD>Returns every possible list that can be formed by choosing one element
- from each of the given sets in order; the "n-ary
- <a href="http://en.wikipedia.org/wiki/Cartesian_product">Cartesian
- product</a>" of the sets.
-<DT><A HREF="./com/google/common/collect/Sets.html#cartesianProduct(java.util.Set...)"><B>cartesianProduct(Set&lt;? extends B&gt;...)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Sets.html" title="class in com.google.common.collect">Sets</A>
-<DD>Returns every possible list that can be formed by choosing one element
- from each of the given sets in order; the "n-ary
- <a href="http://en.wikipedia.org/wiki/Cartesian_product">Cartesian
- product</a>" of the sets.
-<DT><A HREF="./com/google/common/base/CaseFormat.html" title="enum in com.google.common.base"><B>CaseFormat</B></A> - Enum in <A HREF="./com/google/common/base/package-summary.html">com.google.common.base</A><DD>Utility class for converting between various case formats.<DT><A HREF="./com/google/common/util/concurrent/Futures.html#chain(com.google.common.util.concurrent.ListenableFuture, com.google.common.base.Function)"><B>chain(ListenableFuture&lt;I&gt;, Function&lt;? super I, ? extends ListenableFuture&lt;? extends O&gt;&gt;)</B></A> - 
-Static method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/Futures.html" title="class in com.google.common.util.concurrent">Futures</A>
-<DD>Creates a new <code>ListenableFuture</code> that wraps another
- <code>ListenableFuture</code>.
-<DT><A HREF="./com/google/common/util/concurrent/Futures.html#chain(com.google.common.util.concurrent.ListenableFuture, com.google.common.base.Function, java.util.concurrent.Executor)"><B>chain(ListenableFuture&lt;I&gt;, Function&lt;? super I, ? extends ListenableFuture&lt;? extends O&gt;&gt;, Executor)</B></A> - 
-Static method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/Futures.html" title="class in com.google.common.util.concurrent">Futures</A>
-<DD>Creates a new <code>ListenableFuture</code> that wraps another
- <code>ListenableFuture</code>.
-<DT><A HREF="./com/google/common/base/CharMatcher.html" title="class in com.google.common.base"><B>CharMatcher</B></A> - Class in <A HREF="./com/google/common/base/package-summary.html">com.google.common.base</A><DD>Determines a true or false value for any Java <code>char</code> value, just as
- <A HREF="./com/google/common/base/Predicate.html" title="interface in com.google.common.base"><CODE>Predicate</CODE></A> does for any <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang"><CODE>Object</CODE></A>.<DT><A HREF="./com/google/common/base/CharMatcher.html#CharMatcher()"><B>CharMatcher()</B></A> - 
-Constructor for class com.google.common.base.<A HREF="./com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/base/CharMatcher.LookupTable.html" title="class in com.google.common.base"><B>CharMatcher.LookupTable</B></A> - Class in <A HREF="./com/google/common/base/package-summary.html">com.google.common.base</A><DD>A bit array with one bit per <code>char</code> value, used by <A HREF="./com/google/common/base/CharMatcher.html#precomputed()"><CODE>CharMatcher.precomputed()</CODE></A>.<DT><A HREF="./com/google/common/base/CharMatcher.LookupTable.html#CharMatcher.LookupTable()"><B>CharMatcher.LookupTable()</B></A> - 
-Constructor for class com.google.common.base.<A HREF="./com/google/common/base/CharMatcher.LookupTable.html" title="class in com.google.common.base">CharMatcher.LookupTable</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/primitives/Chars.html" title="class in com.google.common.primitives"><B>Chars</B></A> - Class in <A HREF="./com/google/common/primitives/package-summary.html">com.google.common.primitives</A><DD>Static utility methods pertaining to <code>char</code> primitives, that are not
- already found in either <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Character.html?is-external=true" title="class or interface in java.lang"><CODE>Character</CODE></A> or <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true" title="class or interface in java.util"><CODE>Arrays</CODE></A>.<DT><A HREF="./com/google/common/base/Charsets.html" title="class in com.google.common.base"><B>Charsets</B></A> - Class in <A HREF="./com/google/common/base/package-summary.html">com.google.common.base</A><DD>Contains constant definitions for the six standard <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset"><CODE>Charset</CODE></A>
- instances, which are guaranteed to be supported by all Java platform
- implementations.<DT><A HREF="./com/google/common/io/CharStreams.html" title="class in com.google.common.io"><B>CharStreams</B></A> - Class in <A HREF="./com/google/common/io/package-summary.html">com.google.common.io</A><DD>Provides utility methods for working with character streams.<DT><A HREF="./com/google/common/base/Preconditions.html#checkArgument(boolean)"><B>checkArgument(boolean)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Preconditions.html" title="class in com.google.common.base">Preconditions</A>
-<DD>Ensures the truth of an expression involving one or more parameters to the
- calling method.
-<DT><A HREF="./com/google/common/base/Preconditions.html#checkArgument(boolean, java.lang.Object)"><B>checkArgument(boolean, Object)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Preconditions.html" title="class in com.google.common.base">Preconditions</A>
-<DD>Ensures the truth of an expression involving one or more parameters to the
- calling method.
-<DT><A HREF="./com/google/common/base/Preconditions.html#checkArgument(boolean, java.lang.String, java.lang.Object...)"><B>checkArgument(boolean, String, Object...)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Preconditions.html" title="class in com.google.common.base">Preconditions</A>
-<DD>Ensures the truth of an expression involving one or more parameters to the
- calling method.
-<DT><A HREF="./com/google/common/primitives/Chars.html#checkedCast(long)"><B>checkedCast(long)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Chars.html" title="class in com.google.common.primitives">Chars</A>
-<DD>Returns the <code>char</code> value that is equal to <code>value</code>, if possible.
-<DT><A HREF="./com/google/common/primitives/Ints.html#checkedCast(long)"><B>checkedCast(long)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Ints.html" title="class in com.google.common.primitives">Ints</A>
-<DD>Returns the <code>int</code> value that is equal to <code>value</code>, if possible.
-<DT><A HREF="./com/google/common/primitives/Shorts.html#checkedCast(long)"><B>checkedCast(long)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Shorts.html" title="class in com.google.common.primitives">Shorts</A>
-<DD>Returns the <code>short</code> value that is equal to <code>value</code>, if possible.
-<DT><A HREF="./com/google/common/primitives/SignedBytes.html#checkedCast(long)"><B>checkedCast(long)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/SignedBytes.html" title="class in com.google.common.primitives">SignedBytes</A>
-<DD>Returns the <code>byte</code> value that is equal to <code>value</code>, if possible.
-<DT><A HREF="./com/google/common/primitives/UnsignedBytes.html#checkedCast(long)"><B>checkedCast(long)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/UnsignedBytes.html" title="class in com.google.common.primitives">UnsignedBytes</A>
-<DD>Returns the <code>byte</code> value that, when treated as unsigned, is equal to
- <code>value</code>, if possible.
-<DT><A HREF="./com/google/common/util/concurrent/CheckedFuture.html" title="interface in com.google.common.util.concurrent"><B>CheckedFuture</B></A>&lt;<A HREF="./com/google/common/util/concurrent/CheckedFuture.html" title="type parameter in CheckedFuture">V</A>,<A HREF="./com/google/common/util/concurrent/CheckedFuture.html" title="type parameter in CheckedFuture">E</A> extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</A>&gt; - Interface in <A HREF="./com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A><DD>A <code>CheckedFuture</code> is an extension of <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>Future</CODE></A> that includes
- versions of the <code>get</code> methods that can throw a checked exception and
- allows listeners to be attached to the future.<DT><A HREF="./com/google/common/util/concurrent/AbstractCheckedFuture.html#checkedGet()"><B>checkedGet()</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractCheckedFuture.html" title="class in com.google.common.util.concurrent">AbstractCheckedFuture</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/AbstractCheckedFuture.html#checkedGet(long, java.util.concurrent.TimeUnit)"><B>checkedGet(long, TimeUnit)</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractCheckedFuture.html" title="class in com.google.common.util.concurrent">AbstractCheckedFuture</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/CheckedFuture.html#checkedGet()"><B>checkedGet()</B></A> - 
-Method in interface com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/CheckedFuture.html" title="interface in com.google.common.util.concurrent">CheckedFuture</A>
-<DD>Exception checking version of <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#get()" title="class or interface in java.util.concurrent"><CODE>Future.get()</CODE></A> that will translate
- <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang"><CODE>InterruptedException</CODE></A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/CancellationException.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>CancellationException</CODE></A> and
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutionException.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ExecutionException</CODE></A> into application-specific exceptions.
-<DT><A HREF="./com/google/common/util/concurrent/CheckedFuture.html#checkedGet(long, java.util.concurrent.TimeUnit)"><B>checkedGet(long, TimeUnit)</B></A> - 
-Method in interface com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/CheckedFuture.html" title="interface in com.google.common.util.concurrent">CheckedFuture</A>
-<DD>Exception checking version of <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true#get(long, java.util.concurrent.TimeUnit)" title="class or interface in java.util.concurrent"><CODE>Future.get(long, TimeUnit)</CODE></A> that will
- translate <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang"><CODE>InterruptedException</CODE></A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/CancellationException.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>CancellationException</CODE></A> and
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutionException.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ExecutionException</CODE></A> into application-specific exceptions.
-<DT><A HREF="./com/google/common/base/Preconditions.html#checkElementIndex(int, int)"><B>checkElementIndex(int, int)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Preconditions.html" title="class in com.google.common.base">Preconditions</A>
-<DD>Ensures that <code>index</code> specifies a valid <i>element</i> in an array,
- list or string of size <code>size</code>.
-<DT><A HREF="./com/google/common/base/Preconditions.html#checkElementIndex(int, int, java.lang.String)"><B>checkElementIndex(int, int, String)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Preconditions.html" title="class in com.google.common.base">Preconditions</A>
-<DD>Ensures that <code>index</code> specifies a valid <i>element</i> in an array,
- list or string of size <code>size</code>.
-<DT><A HREF="./com/google/common/base/Preconditions.html#checkNotNull(T)"><B>checkNotNull(T)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Preconditions.html" title="class in com.google.common.base">Preconditions</A>
-<DD>Ensures that an object reference passed as a parameter to the calling
- method is not null.
-<DT><A HREF="./com/google/common/base/Preconditions.html#checkNotNull(T, java.lang.Object)"><B>checkNotNull(T, Object)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Preconditions.html" title="class in com.google.common.base">Preconditions</A>
-<DD>Ensures that an object reference passed as a parameter to the calling
- method is not null.
-<DT><A HREF="./com/google/common/base/Preconditions.html#checkNotNull(T, java.lang.String, java.lang.Object...)"><B>checkNotNull(T, String, Object...)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Preconditions.html" title="class in com.google.common.base">Preconditions</A>
-<DD>Ensures that an object reference passed as a parameter to the calling
- method is not null.
-<DT><A HREF="./com/google/common/base/Preconditions.html#checkPositionIndex(int, int)"><B>checkPositionIndex(int, int)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Preconditions.html" title="class in com.google.common.base">Preconditions</A>
-<DD>Ensures that <code>index</code> specifies a valid <i>position</i> in an array,
- list or string of size <code>size</code>.
-<DT><A HREF="./com/google/common/base/Preconditions.html#checkPositionIndex(int, int, java.lang.String)"><B>checkPositionIndex(int, int, String)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Preconditions.html" title="class in com.google.common.base">Preconditions</A>
-<DD>Ensures that <code>index</code> specifies a valid <i>position</i> in an array,
- list or string of size <code>size</code>.
-<DT><A HREF="./com/google/common/base/Preconditions.html#checkPositionIndexes(int, int, int)"><B>checkPositionIndexes(int, int, int)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Preconditions.html" title="class in com.google.common.base">Preconditions</A>
-<DD>Ensures that <code>start</code> and <code>end</code> specify a valid <i>positions</i>
- in an array, list or string of size <code>size</code>, and are in order.
-<DT><A HREF="./com/google/common/base/Preconditions.html#checkState(boolean)"><B>checkState(boolean)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Preconditions.html" title="class in com.google.common.base">Preconditions</A>
-<DD>Ensures the truth of an expression involving the state of the calling
- instance, but not involving any parameters to the calling method.
-<DT><A HREF="./com/google/common/base/Preconditions.html#checkState(boolean, java.lang.Object)"><B>checkState(boolean, Object)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Preconditions.html" title="class in com.google.common.base">Preconditions</A>
-<DD>Ensures the truth of an expression involving the state of the calling
- instance, but not involving any parameters to the calling method.
-<DT><A HREF="./com/google/common/base/Preconditions.html#checkState(boolean, java.lang.String, java.lang.Object...)"><B>checkState(boolean, String, Object...)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Preconditions.html" title="class in com.google.common.base">Preconditions</A>
-<DD>Ensures the truth of an expression involving the state of the calling
- instance, but not involving any parameters to the calling method.
-<DT><A HREF="./com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect"><B>ClassToInstanceMap</B></A>&lt;<A HREF="./com/google/common/collect/ClassToInstanceMap.html" title="type parameter in ClassToInstanceMap">B</A>&gt; - Interface in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A map, each entry of which maps a Java
- <a href="http://tinyurl.com/2cmwkz">raw type</a> to an instance of that type.<DT><A HREF="./com/google/common/collect/ForwardingCollection.html#clear()"><B>clear()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingMap.html#clear()"><B>clear()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingMultimap.html#clear()"><B>clear()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect">ForwardingMultimap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableCollection.html#clear()"><B>clear()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>
-<DD>Guaranteed to throw an exception and leave the collection unmodified.
-<DT><A HREF="./com/google/common/collect/ImmutableMap.html#clear()"><B>clear()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>
-<DD>Guaranteed to throw an exception and leave the map unmodified.
-<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html#clear()"><B>clear()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
-<DD>Guaranteed to throw an exception and leave the multimap unmodified.
-<DT><A HREF="./com/google/common/collect/LinkedListMultimap.html#clear()"><B>clear()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/Multimap.html#clear()"><B>clear()</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>
-<DD>Removes all key-value pairs from the multimap.
-<DT><A HREF="./com/google/common/io/Closeables.html#close(java.io.Closeable, boolean)"><B>close(Closeable, boolean)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/Closeables.html" title="class in com.google.common.io">Closeables</A>
-<DD>Closes a <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io"><CODE>Closeable</CODE></A>, with control over whether an
- <code>IOException</code> may be thrown.
-<DT><A HREF="./com/google/common/io/FileBackedOutputStream.html#close()"><B>close()</B></A> - 
-Method in class com.google.common.io.<A HREF="./com/google/common/io/FileBackedOutputStream.html" title="class in com.google.common.io">FileBackedOutputStream</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/io/Closeables.html" title="class in com.google.common.io"><B>Closeables</B></A> - Class in <A HREF="./com/google/common/io/package-summary.html">com.google.common.io</A><DD>Utility methods for working with <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io"><CODE>Closeable</CODE></A> objects.<DT><A HREF="./com/google/common/io/Closeables.html#closeQuietly(java.io.Closeable)"><B>closeQuietly(Closeable)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/Closeables.html" title="class in com.google.common.io">Closeables</A>
-<DD>Equivalent to calling <code>close(closeable, true)</code>, but with no
- IOException in the signature.
-<DT><A HREF="./com/google/common/base/CharMatcher.html#collapseFrom(java.lang.CharSequence, char)"><B>collapseFrom(CharSequence, char)</B></A> - 
-Method in class com.google.common.base.<A HREF="./com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>
-<DD>Returns a string copy of the input character sequence, with each group of
- consecutive characters that match this matcher replaced by a single
- replacement character.
-<DT><A HREF="./com/google/common/collect/Collections2.html" title="class in com.google.common.collect"><B>Collections2</B></A> - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>Provides static methods for working with <code>Collection</code> instances.<DT><A HREF="./com/google/common/annotations/package-summary.html"><B>com.google.common.annotations</B></A> - package com.google.common.annotations<DD>&nbsp;<DT><A HREF="./com/google/common/base/package-summary.html"><B>com.google.common.base</B></A> - package com.google.common.base<DD>Miscellaneous common util classes and annotations.<DT><A HREF="./com/google/common/collect/package-summary.html"><B>com.google.common.collect</B></A> - package com.google.common.collect<DD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.<DT><A HREF="./com/google/common/io/package-summary.html"><B>com.google.common.io</B></A> - package com.google.common.io<DD>&nbsp;<DT><A HREF="./com/google/common/primitives/package-summary.html"><B>com.google.common.primitives</B></A> - package com.google.common.primitives<DD>&nbsp;<DT><A HREF="./com/google/common/util/concurrent/package-summary.html"><B>com.google.common.util.concurrent</B></A> - package com.google.common.util.concurrent<DD>&nbsp;<DT><A HREF="./com/google/common/collect/ForwardingSortedMap.html#comparator()"><B>comparator()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingSortedMap.html" title="class in com.google.common.collect">ForwardingSortedMap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingSortedSet.html#comparator()"><B>comparator()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingSortedSet.html" title="class in com.google.common.collect">ForwardingSortedSet</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.html#comparator()"><B>comparator()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>
-<DD>Returns the comparator that orders the keys, which is
- <A HREF="./com/google/common/collect/Ordering.html#natural()"><CODE>Ordering.natural()</CODE></A> when the natural ordering of the keys is used.
-<DT><A HREF="./com/google/common/collect/ImmutableSortedSet.html#comparator()"><B>comparator()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>
-<DD>Returns the comparator that orders the elements, which is
- <A HREF="./com/google/common/collect/Ordering.html#natural()"><CODE>Ordering.natural()</CODE></A> when the natural ordering of the
- elements is used.
-<DT><A HREF="./com/google/common/collect/ComparisonChain.html#compare(java.lang.Comparable, java.lang.Comparable)"><B>compare(Comparable&lt;?&gt;, Comparable&lt;?&gt;)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ComparisonChain.html" title="class in com.google.common.collect">ComparisonChain</A>
-<DD>Compares two comparable objects as specified by <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true#compareTo(T)" title="class or interface in java.lang"><CODE>Comparable.compareTo(T)</CODE></A>, <i>if</i> the result of this comparison chain
- has not already been determined.
-<DT><A HREF="./com/google/common/collect/ComparisonChain.html#compare(T, T, java.util.Comparator)"><B>compare(T, T, Comparator&lt;T&gt;)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ComparisonChain.html" title="class in com.google.common.collect">ComparisonChain</A>
-<DD>Compares two objects using a comparator, <i>if</i> the result of this
- comparison chain has not already been determined.
-<DT><A HREF="./com/google/common/collect/ComparisonChain.html#compare(int, int)"><B>compare(int, int)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ComparisonChain.html" title="class in com.google.common.collect">ComparisonChain</A>
-<DD>Compares two <code>int</code> values as specified by <A HREF="./com/google/common/primitives/Ints.html#compare(int, int)"><CODE>Ints.compare(int, int)</CODE></A>,
- <i>if</i> the result of this comparison chain has not already been
- determined.
-<DT><A HREF="./com/google/common/collect/ComparisonChain.html#compare(long, long)"><B>compare(long, long)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ComparisonChain.html" title="class in com.google.common.collect">ComparisonChain</A>
-<DD>Compares two <code>long</code> values as specified by <A HREF="./com/google/common/primitives/Longs.html#compare(long, long)"><CODE>Longs.compare(long, long)</CODE></A>,
- <i>if</i> the result of this comparison chain has not already been
- determined.
-<DT><A HREF="./com/google/common/collect/ComparisonChain.html#compare(float, float)"><B>compare(float, float)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ComparisonChain.html" title="class in com.google.common.collect">ComparisonChain</A>
-<DD>Compares two <code>float</code> values as specified by <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true#compare(float, float)" title="class or interface in java.lang"><CODE>Float.compare(float, float)</CODE></A>, <i>if</i> the result of this comparison chain has not
- already been determined.
-<DT><A HREF="./com/google/common/collect/ComparisonChain.html#compare(double, double)"><B>compare(double, double)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ComparisonChain.html" title="class in com.google.common.collect">ComparisonChain</A>
-<DD>Compares two <code>double</code> values as specified by <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Double.html?is-external=true#compare(double, double)" title="class or interface in java.lang"><CODE>Double.compare(double, double)</CODE></A>, <i>if</i> the result of this comparison chain has not
- already been determined.
-<DT><A HREF="./com/google/common/collect/ComparisonChain.html#compare(boolean, boolean)"><B>compare(boolean, boolean)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ComparisonChain.html" title="class in com.google.common.collect">ComparisonChain</A>
-<DD>Compares two <code>boolean</code> values as specified by <A HREF="./com/google/common/primitives/Booleans.html#compare(boolean, boolean)"><CODE>Booleans.compare(boolean, boolean)</CODE></A>, <i>if</i> the result of this comparison chain has not
- already been determined.
-<DT><A HREF="./com/google/common/primitives/Booleans.html#compare(boolean, boolean)"><B>compare(boolean, boolean)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Booleans.html" title="class in com.google.common.primitives">Booleans</A>
-<DD>Compares the two specified <code>boolean</code> values in the standard way
- (<code>false</code> is considered less than <code>true</code>).
-<DT><A HREF="./com/google/common/primitives/Chars.html#compare(char, char)"><B>compare(char, char)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Chars.html" title="class in com.google.common.primitives">Chars</A>
-<DD>Compares the two specified <code>char</code> values.
-<DT><A HREF="./com/google/common/primitives/Doubles.html#compare(double, double)"><B>compare(double, double)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Doubles.html" title="class in com.google.common.primitives">Doubles</A>
-<DD>Compares the two specified <code>double</code> values.
-<DT><A HREF="./com/google/common/primitives/Floats.html#compare(float, float)"><B>compare(float, float)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Floats.html" title="class in com.google.common.primitives">Floats</A>
-<DD>Compares the two specified <code>float</code> values using <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true#compare(float, float)" title="class or interface in java.lang"><CODE>Float.compare(float, float)</CODE></A>.
-<DT><A HREF="./com/google/common/primitives/Ints.html#compare(int, int)"><B>compare(int, int)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Ints.html" title="class in com.google.common.primitives">Ints</A>
-<DD>Compares the two specified <code>int</code> values.
-<DT><A HREF="./com/google/common/primitives/Longs.html#compare(long, long)"><B>compare(long, long)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Longs.html" title="class in com.google.common.primitives">Longs</A>
-<DD>Compares the two specified <code>long</code> values.
-<DT><A HREF="./com/google/common/primitives/Shorts.html#compare(short, short)"><B>compare(short, short)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Shorts.html" title="class in com.google.common.primitives">Shorts</A>
-<DD>Compares the two specified <code>short</code> values.
-<DT><A HREF="./com/google/common/primitives/SignedBytes.html#compare(byte, byte)"><B>compare(byte, byte)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/SignedBytes.html" title="class in com.google.common.primitives">SignedBytes</A>
-<DD>Compares the two specified <code>byte</code> values.
-<DT><A HREF="./com/google/common/primitives/UnsignedBytes.html#compare(byte, byte)"><B>compare(byte, byte)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/UnsignedBytes.html" title="class in com.google.common.primitives">UnsignedBytes</A>
-<DD>Compares the two specified <code>byte</code> values, treating them as unsigned
- values between 0 and 255 inclusive.
-<DT><A HREF="./com/google/common/collect/ComparisonChain.html" title="class in com.google.common.collect"><B>ComparisonChain</B></A> - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A utility for performing a "lazy" chained comparison statement, which 
- performs comparisons only until it finds a nonzero result.<DT><A HREF="./com/google/common/collect/Sets.html#complementOf(java.util.Collection)"><B>complementOf(Collection&lt;E&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Sets.html" title="class in com.google.common.collect">Sets</A>
-<DD>Creates an <code>EnumSet</code> consisting of all enum values that are not in
- the specified collection.
-<DT><A HREF="./com/google/common/collect/Sets.html#complementOf(java.util.Collection, java.lang.Class)"><B>complementOf(Collection&lt;E&gt;, Class&lt;E&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Sets.html" title="class in com.google.common.collect">Sets</A>
-<DD>Creates an <code>EnumSet</code> consisting of all enum values that are not in
- the specified collection.
-<DT><A HREF="./com/google/common/base/Functions.html#compose(com.google.common.base.Function, com.google.common.base.Function)"><B>compose(Function&lt;B, C&gt;, Function&lt;A, ? extends B&gt;)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Functions.html" title="class in com.google.common.base">Functions</A>
-<DD>Returns the composition of two functions.
-<DT><A HREF="./com/google/common/base/Predicates.html#compose(com.google.common.base.Predicate, com.google.common.base.Function)"><B>compose(Predicate&lt;B&gt;, Function&lt;A, ? extends B&gt;)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Predicates.html" title="class in com.google.common.base">Predicates</A>
-<DD>Returns the composition of a function and a predicate.
-<DT><A HREF="./com/google/common/base/Suppliers.html#compose(com.google.common.base.Function, com.google.common.base.Supplier)"><B>compose(Function&lt;? super F, T&gt;, Supplier&lt;F&gt;)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Suppliers.html" title="class in com.google.common.base">Suppliers</A>
-<DD>Returns a new supplier which is the composition of the provided function
- and supplier.
-<DT><A HREF="./com/google/common/util/concurrent/Futures.html#compose(com.google.common.util.concurrent.ListenableFuture, com.google.common.base.Function)"><B>compose(ListenableFuture&lt;I&gt;, Function&lt;? super I, ? extends O&gt;)</B></A> - 
-Static method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/Futures.html" title="class in com.google.common.util.concurrent">Futures</A>
-<DD>Creates a new <code>ListenableFuture</code> that wraps another
- <code>ListenableFuture</code>.
-<DT><A HREF="./com/google/common/util/concurrent/Futures.html#compose(com.google.common.util.concurrent.ListenableFuture, com.google.common.base.Function, java.util.concurrent.Executor)"><B>compose(ListenableFuture&lt;I&gt;, Function&lt;? super I, ? extends O&gt;, Executor)</B></A> - 
-Static method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/Futures.html" title="class in com.google.common.util.concurrent">Futures</A>
-<DD>Creates a new <code>ListenableFuture</code> that wraps another
- <code>ListenableFuture</code>.
-<DT><A HREF="./com/google/common/util/concurrent/Futures.html#compose(java.util.concurrent.Future, com.google.common.base.Function)"><B>compose(Future&lt;I&gt;, Function&lt;? super I, ? extends O&gt;)</B></A> - 
-Static method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/Futures.html" title="class in com.google.common.util.concurrent">Futures</A>
-<DD>Creates a new <code>Future</code> that wraps another <code>Future</code>.
-<DT><A HREF="./com/google/common/collect/Ordering.html#compound(java.lang.Iterable)"><B>compound(Iterable&lt;? extends Comparator&lt;? super T&gt;&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>
-<DD>Returns an ordering which tries each given comparator in order until a
- non-zero result is found, returning that result, and returning zero only if
- all comparators return zero.
-<DT><A HREF="./com/google/common/collect/Ordering.html#compound(java.util.Comparator)"><B>compound(Comparator&lt;? super U&gt;)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>
-<DD>Returns an ordering which first uses the ordering <code>this</code>, but which
- in the event of a "tie", then delegates to <code>secondaryComparator</code>.
-<DT><A HREF="./com/google/common/collect/ComputationException.html" title="class in com.google.common.collect"><B>ComputationException</B></A> - Exception in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>Wraps an exception that occured during a computation.<DT><A HREF="./com/google/common/collect/ComputationException.html#ComputationException(java.lang.Throwable)"><B>ComputationException(Throwable)</B></A> - 
-Constructor for exception com.google.common.collect.<A HREF="./com/google/common/collect/ComputationException.html" title="class in com.google.common.collect">ComputationException</A>
-<DD>Creates a new instance with the given cause.
-<DT><A HREF="./com/google/common/collect/AbstractIterator.html#computeNext()"><B>computeNext()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/AbstractIterator.html" title="class in com.google.common.collect">AbstractIterator</A>
-<DD>Returns the next element.
-<DT><A HREF="./com/google/common/collect/Iterables.html#concat(java.lang.Iterable, java.lang.Iterable)"><B>concat(Iterable&lt;? extends T&gt;, Iterable&lt;? extends T&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
-<DD>Combines two iterables into a single iterable.
-<DT><A HREF="./com/google/common/collect/Iterables.html#concat(java.lang.Iterable, java.lang.Iterable, java.lang.Iterable)"><B>concat(Iterable&lt;? extends T&gt;, Iterable&lt;? extends T&gt;, Iterable&lt;? extends T&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
-<DD>Combines three iterables into a single iterable.
-<DT><A HREF="./com/google/common/collect/Iterables.html#concat(java.lang.Iterable, java.lang.Iterable, java.lang.Iterable, java.lang.Iterable)"><B>concat(Iterable&lt;? extends T&gt;, Iterable&lt;? extends T&gt;, Iterable&lt;? extends T&gt;, Iterable&lt;? extends T&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
-<DD>Combines four iterables into a single iterable.
-<DT><A HREF="./com/google/common/collect/Iterables.html#concat(java.lang.Iterable...)"><B>concat(Iterable&lt;? extends T&gt;...)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
-<DD>Combines multiple iterables into a single iterable.
-<DT><A HREF="./com/google/common/collect/Iterables.html#concat(java.lang.Iterable)"><B>concat(Iterable&lt;? extends Iterable&lt;? extends T&gt;&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
-<DD>Combines multiple iterables into a single iterable.
-<DT><A HREF="./com/google/common/collect/Iterators.html#concat(java.util.Iterator, java.util.Iterator)"><B>concat(Iterator&lt;? extends T&gt;, Iterator&lt;? extends T&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
-<DD>Combines two iterators into a single iterator.
-<DT><A HREF="./com/google/common/collect/Iterators.html#concat(java.util.Iterator, java.util.Iterator, java.util.Iterator)"><B>concat(Iterator&lt;? extends T&gt;, Iterator&lt;? extends T&gt;, Iterator&lt;? extends T&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
-<DD>Combines three iterators into a single iterator.
-<DT><A HREF="./com/google/common/collect/Iterators.html#concat(java.util.Iterator, java.util.Iterator, java.util.Iterator, java.util.Iterator)"><B>concat(Iterator&lt;? extends T&gt;, Iterator&lt;? extends T&gt;, Iterator&lt;? extends T&gt;, Iterator&lt;? extends T&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
-<DD>Combines four iterators into a single iterator.
-<DT><A HREF="./com/google/common/collect/Iterators.html#concat(java.util.Iterator...)"><B>concat(Iterator&lt;? extends T&gt;...)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
-<DD>Combines multiple iterators into a single iterator.
-<DT><A HREF="./com/google/common/collect/Iterators.html#concat(java.util.Iterator)"><B>concat(Iterator&lt;? extends Iterator&lt;? extends T&gt;&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
-<DD>Combines multiple iterators into a single iterator.
-<DT><A HREF="./com/google/common/collect/ObjectArrays.html#concat(T[], T[], java.lang.Class)"><B>concat(T[], T[], Class&lt;T&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ObjectArrays.html" title="class in com.google.common.collect">ObjectArrays</A>
-<DD>Returns a new array that contains the concatenated contents of two arrays.
-<DT><A HREF="./com/google/common/collect/ObjectArrays.html#concat(T, T[])"><B>concat(T, T[])</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ObjectArrays.html" title="class in com.google.common.collect">ObjectArrays</A>
-<DD>Returns a new array that prepends <code>element</code> to <code>array</code>.
-<DT><A HREF="./com/google/common/collect/ObjectArrays.html#concat(T[], T)"><B>concat(T[], T)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ObjectArrays.html" title="class in com.google.common.collect">ObjectArrays</A>
-<DD>Returns a new array that appends <code>element</code> to <code>array</code>.
-<DT><A HREF="./com/google/common/primitives/Booleans.html#concat(boolean[]...)"><B>concat(boolean[]...)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Booleans.html" title="class in com.google.common.primitives">Booleans</A>
-<DD>Returns the values from each provided array combined into a single array.
-<DT><A HREF="./com/google/common/primitives/Bytes.html#concat(byte[]...)"><B>concat(byte[]...)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Bytes.html" title="class in com.google.common.primitives">Bytes</A>
-<DD>Returns the values from each provided array combined into a single array.
-<DT><A HREF="./com/google/common/primitives/Chars.html#concat(char[]...)"><B>concat(char[]...)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Chars.html" title="class in com.google.common.primitives">Chars</A>
-<DD>Returns the values from each provided array combined into a single array.
-<DT><A HREF="./com/google/common/primitives/Doubles.html#concat(double[]...)"><B>concat(double[]...)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Doubles.html" title="class in com.google.common.primitives">Doubles</A>
-<DD>Returns the values from each provided array combined into a single array.
-<DT><A HREF="./com/google/common/primitives/Floats.html#concat(float[]...)"><B>concat(float[]...)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Floats.html" title="class in com.google.common.primitives">Floats</A>
-<DD>Returns the values from each provided array combined into a single array.
-<DT><A HREF="./com/google/common/primitives/Ints.html#concat(int[]...)"><B>concat(int[]...)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Ints.html" title="class in com.google.common.primitives">Ints</A>
-<DD>Returns the values from each provided array combined into a single array.
-<DT><A HREF="./com/google/common/primitives/Longs.html#concat(long[]...)"><B>concat(long[]...)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Longs.html" title="class in com.google.common.primitives">Longs</A>
-<DD>Returns the values from each provided array combined into a single array.
-<DT><A HREF="./com/google/common/primitives/Shorts.html#concat(short[]...)"><B>concat(short[]...)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Shorts.html" title="class in com.google.common.primitives">Shorts</A>
-<DD>Returns the values from each provided array combined into a single array.
-<DT><A HREF="./com/google/common/collect/MapMaker.html#concurrencyLevel(int)"><B>concurrencyLevel(int)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A>
-<DD>Guides the allowed concurrency among update operations.
-<DT><A HREF="./com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect"><B>ConcurrentHashMultiset</B></A>&lt;<A HREF="./com/google/common/collect/ConcurrentHashMultiset.html" title="type parameter in ConcurrentHashMultiset">E</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A multiset that supports concurrent modifications and that provides atomic
- versions of most <code>Multiset</code> operations (exceptions where noted).<DT><A HREF="./com/google/common/base/Functions.html#constant(E)"><B>constant(E)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Functions.html" title="class in com.google.common.base">Functions</A>
-<DD>Creates a function that returns <code>value</code> for any input.
-<DT><A HREF="./com/google/common/collect/Iterables.html#consumingIterable(java.lang.Iterable)"><B>consumingIterable(Iterable&lt;T&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
-<DD>Returns a view of the supplied iterable that wraps each generated
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util"><CODE>Iterator</CODE></A> through <A HREF="./com/google/common/collect/Iterators.html#consumingIterator(java.util.Iterator)"><CODE>Iterators.consumingIterator(Iterator)</CODE></A>.
-<DT><A HREF="./com/google/common/collect/Iterators.html#consumingIterator(java.util.Iterator)"><B>consumingIterator(Iterator&lt;T&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
-<DD>Returns a view of the supplied <code>iterator</code> that removes each element
- from the supplied <code>iterator</code> as it is returned.
-<DT><A HREF="./com/google/common/collect/ForwardingCollection.html#contains(java.lang.Object)"><B>contains(Object)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableCollection.html#contains(java.lang.Object)"><B>contains(Object)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableMultiset.html#contains(java.lang.Object)"><B>contains(Object)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/Iterables.html#contains(java.lang.Iterable, java.lang.Object)"><B>contains(Iterable&lt;?&gt;, Object)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
-<DD>Returns <code>true</code> if <code>iterable</code> contains <code>element</code>; that is,
- any object for while <code>equals(element)</code> is true.
-<DT><A HREF="./com/google/common/collect/Iterators.html#contains(java.util.Iterator, java.lang.Object)"><B>contains(Iterator&lt;?&gt;, Object)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
-<DD>Returns <code>true</code> if <code>iterator</code> contains <code>element</code>.
-<DT><A HREF="./com/google/common/collect/Multiset.html#contains(java.lang.Object)"><B>contains(Object)</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>
-<DD>Determines whether this multiset contains the specified element.
-<DT><A HREF="./com/google/common/primitives/Booleans.html#contains(boolean[], boolean)"><B>contains(boolean[], boolean)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Booleans.html" title="class in com.google.common.primitives">Booleans</A>
-<DD>Returns <code>true</code> if <code>target</code> is present as an element anywhere in
- <code>array</code>.
-<DT><A HREF="./com/google/common/primitives/Bytes.html#contains(byte[], byte)"><B>contains(byte[], byte)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Bytes.html" title="class in com.google.common.primitives">Bytes</A>
-<DD>Returns <code>true</code> if <code>target</code> is present as an element anywhere in
- <code>array</code>.
-<DT><A HREF="./com/google/common/primitives/Chars.html#contains(char[], char)"><B>contains(char[], char)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Chars.html" title="class in com.google.common.primitives">Chars</A>
-<DD>Returns <code>true</code> if <code>target</code> is present as an element anywhere in
- <code>array</code>.
-<DT><A HREF="./com/google/common/primitives/Doubles.html#contains(double[], double)"><B>contains(double[], double)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Doubles.html" title="class in com.google.common.primitives">Doubles</A>
-<DD>Returns <code>true</code> if <code>target</code> is present as an element anywhere in
- <code>array</code>.
-<DT><A HREF="./com/google/common/primitives/Floats.html#contains(float[], float)"><B>contains(float[], float)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Floats.html" title="class in com.google.common.primitives">Floats</A>
-<DD>Returns <code>true</code> if <code>target</code> is present as an element anywhere in
- <code>array</code>.
-<DT><A HREF="./com/google/common/primitives/Ints.html#contains(int[], int)"><B>contains(int[], int)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Ints.html" title="class in com.google.common.primitives">Ints</A>
-<DD>Returns <code>true</code> if <code>target</code> is present as an element anywhere in
- <code>array</code>.
-<DT><A HREF="./com/google/common/primitives/Longs.html#contains(long[], long)"><B>contains(long[], long)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Longs.html" title="class in com.google.common.primitives">Longs</A>
-<DD>Returns <code>true</code> if <code>target</code> is present as an element anywhere in
- <code>array</code>.
-<DT><A HREF="./com/google/common/primitives/Shorts.html#contains(short[], short)"><B>contains(short[], short)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Shorts.html" title="class in com.google.common.primitives">Shorts</A>
-<DD>Returns <code>true</code> if <code>target</code> is present as an element anywhere in
- <code>array</code>.
-<DT><A HREF="./com/google/common/collect/ForwardingCollection.html#containsAll(java.util.Collection)"><B>containsAll(Collection&lt;?&gt;)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableCollection.html#containsAll(java.util.Collection)"><B>containsAll(Collection&lt;?&gt;)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/Multiset.html#containsAll(java.util.Collection)"><B>containsAll(Collection&lt;?&gt;)</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>
-<DD>Returns <code>true</code> if this multiset contains at least one occurrence of
- each element in the specified collection.
-<DT><A HREF="./com/google/common/collect/ForwardingMultimap.html#containsEntry(java.lang.Object, java.lang.Object)"><B>containsEntry(Object, Object)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect">ForwardingMultimap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html#containsEntry(java.lang.Object, java.lang.Object)"><B>containsEntry(Object, Object)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/LinkedListMultimap.html#containsEntry(java.lang.Object, java.lang.Object)"><B>containsEntry(Object, Object)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/Multimap.html#containsEntry(java.lang.Object, java.lang.Object)"><B>containsEntry(Object, Object)</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>
-<DD>Returns <code>true</code> if the multimap contains the specified key-value pair.
-<DT><A HREF="./com/google/common/collect/ForwardingMap.html#containsKey(java.lang.Object)"><B>containsKey(Object)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingMultimap.html#containsKey(java.lang.Object)"><B>containsKey(Object)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect">ForwardingMultimap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableBiMap.html#containsKey(java.lang.Object)"><B>containsKey(Object)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableMap.html#containsKey(java.lang.Object)"><B>containsKey(Object)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html#containsKey(java.lang.Object)"><B>containsKey(Object)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/LinkedListMultimap.html#containsKey(java.lang.Object)"><B>containsKey(Object)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/Multimap.html#containsKey(java.lang.Object)"><B>containsKey(Object)</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>
-<DD>Returns <code>true</code> if the multimap contains any values for the specified
- key.
-<DT><A HREF="./com/google/common/collect/ForwardingMap.html#containsValue(java.lang.Object)"><B>containsValue(Object)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingMultimap.html#containsValue(java.lang.Object)"><B>containsValue(Object)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect">ForwardingMultimap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableBiMap.html#containsValue(java.lang.Object)"><B>containsValue(Object)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableMap.html#containsValue(java.lang.Object)"><B>containsValue(Object)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html#containsValue(java.lang.Object)"><B>containsValue(Object)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.html#containsValue(java.lang.Object)"><B>containsValue(Object)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/LinkedListMultimap.html#containsValue(java.lang.Object)"><B>containsValue(Object)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/Multimap.html#containsValue(java.lang.Object)"><B>containsValue(Object)</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>
-<DD>Returns <code>true</code> if the multimap contains the specified value for any
- key.
-<DT><A HREF="./com/google/common/io/ByteStreams.html#copy(com.google.common.io.InputSupplier, com.google.common.io.OutputSupplier)"><B>copy(InputSupplier&lt;? extends InputStream&gt;, OutputSupplier&lt;? extends OutputStream&gt;)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/ByteStreams.html" title="class in com.google.common.io">ByteStreams</A>
-<DD>Opens input and output streams from the given suppliers, copies all
- bytes from the input to the output, and closes the streams.
-<DT><A HREF="./com/google/common/io/ByteStreams.html#copy(com.google.common.io.InputSupplier, java.io.OutputStream)"><B>copy(InputSupplier&lt;? extends InputStream&gt;, OutputStream)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/ByteStreams.html" title="class in com.google.common.io">ByteStreams</A>
-<DD>Opens an input stream from the supplier, copies all bytes from the
- input to the output, and closes the input stream.
-<DT><A HREF="./com/google/common/io/ByteStreams.html#copy(java.io.InputStream, java.io.OutputStream)"><B>copy(InputStream, OutputStream)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/ByteStreams.html" title="class in com.google.common.io">ByteStreams</A>
-<DD>Copies all bytes from the input stream to the output stream.
-<DT><A HREF="./com/google/common/io/ByteStreams.html#copy(java.nio.channels.ReadableByteChannel, java.nio.channels.WritableByteChannel)"><B>copy(ReadableByteChannel, WritableByteChannel)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/ByteStreams.html" title="class in com.google.common.io">ByteStreams</A>
-<DD>Copies all bytes from the readable channel to the writable channel.
-<DT><A HREF="./com/google/common/io/CharStreams.html#copy(com.google.common.io.InputSupplier, com.google.common.io.OutputSupplier)"><B>copy(InputSupplier&lt;R&gt;, OutputSupplier&lt;W&gt;)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/CharStreams.html" title="class in com.google.common.io">CharStreams</A>
-<DD>Opens <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang"><CODE>Readable</CODE></A> and <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang"><CODE>Appendable</CODE></A> objects from the
- given factories, copies all characters between the two, and closes
- them.
-<DT><A HREF="./com/google/common/io/CharStreams.html#copy(com.google.common.io.InputSupplier, java.lang.Appendable)"><B>copy(InputSupplier&lt;R&gt;, Appendable)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/CharStreams.html" title="class in com.google.common.io">CharStreams</A>
-<DD>Opens a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang"><CODE>Readable</CODE></A> object from the supplier, copies all characters
- to the <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang"><CODE>Appendable</CODE></A> object, and closes the input.
-<DT><A HREF="./com/google/common/io/CharStreams.html#copy(java.lang.Readable, java.lang.Appendable)"><B>copy(Readable, Appendable)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/CharStreams.html" title="class in com.google.common.io">CharStreams</A>
-<DD>Copies all characters between the <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang"><CODE>Readable</CODE></A> and <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang"><CODE>Appendable</CODE></A>
- objects.
-<DT><A HREF="./com/google/common/io/Files.html#copy(com.google.common.io.InputSupplier, java.io.File)"><B>copy(InputSupplier&lt;? extends InputStream&gt;, File)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/Files.html" title="class in com.google.common.io">Files</A>
-<DD>Copies to a file all bytes from an <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io"><CODE>InputStream</CODE></A> supplied by a
- factory.
-<DT><A HREF="./com/google/common/io/Files.html#copy(java.io.File, com.google.common.io.OutputSupplier)"><B>copy(File, OutputSupplier&lt;? extends OutputStream&gt;)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/Files.html" title="class in com.google.common.io">Files</A>
-<DD>Copies all bytes from a file to an <A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io"><CODE>OutputStream</CODE></A> supplied by
- a factory.
-<DT><A HREF="./com/google/common/io/Files.html#copy(java.io.File, java.io.OutputStream)"><B>copy(File, OutputStream)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/Files.html" title="class in com.google.common.io">Files</A>
-<DD>Copies all bytes from a file to an output stream.
-<DT><A HREF="./com/google/common/io/Files.html#copy(java.io.File, java.io.File)"><B>copy(File, File)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/Files.html" title="class in com.google.common.io">Files</A>
-<DD>Copies all the bytes from one file to another.
-<DT><A HREF="./com/google/common/io/Files.html#copy(com.google.common.io.InputSupplier, java.io.File, java.nio.charset.Charset)"><B>copy(InputSupplier&lt;R&gt;, File, Charset)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/Files.html" title="class in com.google.common.io">Files</A>
-<DD>Copies to a file all characters from a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang"><CODE>Readable</CODE></A> and
- <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io"><CODE>Closeable</CODE></A> object supplied by a factory, using the given
- character set.
-<DT><A HREF="./com/google/common/io/Files.html#copy(java.io.File, java.nio.charset.Charset, com.google.common.io.OutputSupplier)"><B>copy(File, Charset, OutputSupplier&lt;W&gt;)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/Files.html" title="class in com.google.common.io">Files</A>
-<DD>Copies all characters from a file to a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Appendable.html?is-external=true" title="class or interface in java.lang"><CODE>Appendable</CODE></A> &
- <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io"><CODE>Closeable</CODE></A> object supplied by a factory, using the given
- character set.
-<DT><A HREF="./com/google/common/io/Files.html#copy(java.io.File, java.nio.charset.Charset, java.lang.Appendable)"><B>copy(File, Charset, Appendable)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/Files.html" title="class in com.google.common.io">Files</A>
-<DD>Copies all characters from a file to an appendable object,
- using the given character set.
-<DT><A HREF="./com/google/common/io/Resources.html#copy(java.net.URL, java.io.OutputStream)"><B>copy(URL, OutputStream)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/Resources.html" title="class in com.google.common.io">Resources</A>
-<DD>Copies all bytes from a URL to an output stream.
-<DT><A HREF="./com/google/common/collect/Sets.SetView.html#copyInto(S)"><B>copyInto(S)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/Sets.SetView.html" title="class in com.google.common.collect">Sets.SetView</A>
-<DD>Copies the current contents of this set view into an existing set.
-<DT><A HREF="./com/google/common/collect/ImmutableBiMap.html#copyOf(java.util.Map)"><B>copyOf(Map&lt;? extends K, ? extends V&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>
-<DD>Returns an immutable bimap containing the same entries as <code>map</code>.
-<DT><A HREF="./com/google/common/collect/ImmutableClassToInstanceMap.html#copyOf(java.util.Map)"><B>copyOf(Map&lt;? extends Class&lt;? extends S&gt;, ? extends S&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap</A>
-<DD>Returns an immutable map containing the same entries as <code>map</code>.
-<DT><A HREF="./com/google/common/collect/ImmutableList.html#copyOf(java.lang.Iterable)"><B>copyOf(Iterable&lt;? extends E&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>
-<DD>Returns an immutable list containing the given elements, in order.
-<DT><A HREF="./com/google/common/collect/ImmutableList.html#copyOf(java.util.Collection)"><B>copyOf(Collection&lt;? extends E&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>
-<DD>Returns an immutable list containing the given elements, in order.
-<DT><A HREF="./com/google/common/collect/ImmutableList.html#copyOf(java.util.Iterator)"><B>copyOf(Iterator&lt;? extends E&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>
-<DD>Returns an immutable list containing the given elements, in order.
-<DT><A HREF="./com/google/common/collect/ImmutableListMultimap.html#copyOf(com.google.common.collect.Multimap)"><B>copyOf(Multimap&lt;? extends K, ? extends V&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>
-<DD>Returns an immutable multimap containing the same mappings as
- <code>multimap</code>.
-<DT><A HREF="./com/google/common/collect/ImmutableMap.html#copyOf(java.util.Map)"><B>copyOf(Map&lt;? extends K, ? extends V&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>
-<DD>Returns an immutable map containing the same entries as <code>map</code>.
-<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html#copyOf(com.google.common.collect.Multimap)"><B>copyOf(Multimap&lt;? extends K, ? extends V&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
-<DD>Returns an immutable multimap containing the same mappings as
- <code>multimap</code>.
-<DT><A HREF="./com/google/common/collect/ImmutableMultiset.html#copyOf(java.lang.Iterable)"><B>copyOf(Iterable&lt;? extends E&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>
-<DD>Returns an immutable multiset containing the given elements.
-<DT><A HREF="./com/google/common/collect/ImmutableMultiset.html#copyOf(java.util.Iterator)"><B>copyOf(Iterator&lt;? extends E&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>
-<DD>Returns an immutable multiset containing the given elements.
-<DT><A HREF="./com/google/common/collect/ImmutableSet.html#copyOf(java.lang.Iterable)"><B>copyOf(Iterable&lt;? extends E&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>
-<DD>Returns an immutable set containing the given elements, in order.
-<DT><A HREF="./com/google/common/collect/ImmutableSet.html#copyOf(java.util.Iterator)"><B>copyOf(Iterator&lt;? extends E&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>
-<DD>Returns an immutable set containing the given elements, in order.
-<DT><A HREF="./com/google/common/collect/ImmutableSetMultimap.html#copyOf(com.google.common.collect.Multimap)"><B>copyOf(Multimap&lt;? extends K, ? extends V&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>
-<DD>Returns an immutable set multimap containing the same mappings as
- <code>multimap</code>.
-<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.html#copyOf(java.util.Map)"><B>copyOf(Map&lt;? extends K, ? extends V&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>
-<DD>Returns an immutable map containing the same entries as <code>map</code>, sorted
- by the natural ordering of the keys.
-<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.html#copyOf(java.util.Map, java.util.Comparator)"><B>copyOf(Map&lt;? extends K, ? extends V&gt;, Comparator&lt;? super K&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>
-<DD>Returns an immutable map containing the same entries as <code>map</code>, with
- keys sorted by the provided comparator.
-<DT><A HREF="./com/google/common/collect/ImmutableSortedSet.html#copyOf(java.lang.Iterable)"><B>copyOf(Iterable&lt;? extends E&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>
-<DD>Returns an immutable sorted set containing the given elements sorted by
- their natural ordering.
-<DT><A HREF="./com/google/common/collect/ImmutableSortedSet.html#copyOf(java.util.Iterator)"><B>copyOf(Iterator&lt;? extends E&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>
-<DD>Returns an immutable sorted set containing the given elements sorted by
- their natural ordering.
-<DT><A HREF="./com/google/common/collect/ImmutableSortedSet.html#copyOf(java.util.Comparator, java.lang.Iterable)"><B>copyOf(Comparator&lt;? super E&gt;, Iterable&lt;? extends E&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>
-<DD>Returns an immutable sorted set containing the given elements sorted by
- the given <code>Comparator</code>.
-<DT><A HREF="./com/google/common/collect/ImmutableSortedSet.html#copyOf(java.util.Comparator, java.util.Iterator)"><B>copyOf(Comparator&lt;? super E&gt;, Iterator&lt;? extends E&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>
-<DD>Returns an immutable sorted set containing the given elements sorted by
- the given <code>Comparator</code>.
-<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.html#copyOfSorted(java.util.SortedMap)"><B>copyOfSorted(SortedMap&lt;K, ? extends V&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>
-<DD>Returns an immutable map containing the same entries as the provided sorted
- map, with the same ordering.
-<DT><A HREF="./com/google/common/collect/ImmutableSortedSet.html#copyOfSorted(java.util.SortedSet)"><B>copyOfSorted(SortedSet&lt;E&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>
-<DD>Returns an immutable sorted set containing the elements of a sorted set,
- sorted by the same <code>Comparator</code>.
-<DT><A HREF="./com/google/common/collect/ConcurrentHashMultiset.html#count(java.lang.Object)"><B>count(Object)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect">ConcurrentHashMultiset</A>
-<DD>Returns the number of occurrences of <code>element</code> in this multiset.
-<DT><A HREF="./com/google/common/collect/ForwardingMultiset.html#count(java.lang.Object)"><B>count(Object)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect">ForwardingMultiset</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableMultiset.html#count(java.lang.Object)"><B>count(Object)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/Multiset.html#count(java.lang.Object)"><B>count(Object)</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>
-<DD>Returns the number of occurrences of an element in this multiset (the
- <i>count</i> of the element).
-<DT><A HREF="./com/google/common/collect/TreeMultiset.html#count(java.lang.Object)"><B>count(Object)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect">TreeMultiset</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/base/CharMatcher.html#countIn(java.lang.CharSequence)"><B>countIn(CharSequence)</B></A> - 
-Method in class com.google.common.base.<A HREF="./com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>
-<DD>Returns the number of matching characters found in a character sequence.
-<DT><A HREF="./com/google/common/io/CountingInputStream.html" title="class in com.google.common.io"><B>CountingInputStream</B></A> - Class in <A HREF="./com/google/common/io/package-summary.html">com.google.common.io</A><DD>An <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io"><CODE>InputStream</CODE></A> that counts the number of bytes read.<DT><A HREF="./com/google/common/io/CountingInputStream.html#CountingInputStream(java.io.InputStream)"><B>CountingInputStream(InputStream)</B></A> - 
-Constructor for class com.google.common.io.<A HREF="./com/google/common/io/CountingInputStream.html" title="class in com.google.common.io">CountingInputStream</A>
-<DD>Wraps another input stream, counting the number of bytes read.
-<DT><A HREF="./com/google/common/io/CountingOutputStream.html" title="class in com.google.common.io"><B>CountingOutputStream</B></A> - Class in <A HREF="./com/google/common/io/package-summary.html">com.google.common.io</A><DD>An OutputStream that counts the number of bytes written.<DT><A HREF="./com/google/common/io/CountingOutputStream.html#CountingOutputStream(java.io.OutputStream)"><B>CountingOutputStream(OutputStream)</B></A> - 
-Constructor for class com.google.common.io.<A HREF="./com/google/common/io/CountingOutputStream.html" title="class in com.google.common.io">CountingOutputStream</A>
-<DD>Wraps another output stream, counting the number of bytes written.
-<DT><A HREF="./com/google/common/collect/ArrayListMultimap.html#create()"><B>create()</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect">ArrayListMultimap</A>
-<DD>Creates a new, empty <code>ArrayListMultimap</code> with the default initial
- capacities.
-<DT><A HREF="./com/google/common/collect/ArrayListMultimap.html#create(int, int)"><B>create(int, int)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect">ArrayListMultimap</A>
-<DD>Constructs an empty <code>ArrayListMultimap</code> with enough capacity to hold
- the specified numbers of keys and values without resizing.
-<DT><A HREF="./com/google/common/collect/ArrayListMultimap.html#create(com.google.common.collect.Multimap)"><B>create(Multimap&lt;? extends K, ? extends V&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect">ArrayListMultimap</A>
-<DD>Constructs an <code>ArrayListMultimap</code> with the same mappings as the
- specified multimap.
-<DT><A HREF="./com/google/common/collect/ConcurrentHashMultiset.html#create()"><B>create()</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect">ConcurrentHashMultiset</A>
-<DD>Creates a new, empty <code>ConcurrentHashMultiset</code> using the default
- initial capacity, load factor, and concurrency settings.
-<DT><A HREF="./com/google/common/collect/ConcurrentHashMultiset.html#create(java.lang.Iterable)"><B>create(Iterable&lt;? extends E&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect">ConcurrentHashMultiset</A>
-<DD>Creates a new <code>ConcurrentHashMultiset</code> containing the specified
- elements, using the default initial capacity, load factor, and concurrency
- settings.
-<DT><A HREF="./com/google/common/collect/EnumBiMap.html#create(java.lang.Class, java.lang.Class)"><B>create(Class&lt;K&gt;, Class&lt;V&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect">EnumBiMap</A>
-<DD>Returns a new, empty <code>EnumBiMap</code> using the specified key and value
- types.
-<DT><A HREF="./com/google/common/collect/EnumBiMap.html#create(java.util.Map)"><B>create(Map&lt;K, V&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect">EnumBiMap</A>
-<DD>Returns a new bimap with the same mappings as the specified map.
-<DT><A HREF="./com/google/common/collect/EnumHashBiMap.html#create(java.lang.Class)"><B>create(Class&lt;K&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect">EnumHashBiMap</A>
-<DD>Returns a new, empty <code>EnumHashBiMap</code> using the specified key type.
-<DT><A HREF="./com/google/common/collect/EnumHashBiMap.html#create(java.util.Map)"><B>create(Map&lt;K, ? extends V&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect">EnumHashBiMap</A>
-<DD>Constructs a new bimap with the same mappings as the specified map.
-<DT><A HREF="./com/google/common/collect/EnumMultiset.html#create(java.lang.Class)"><B>create(Class&lt;E&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/EnumMultiset.html" title="class in com.google.common.collect">EnumMultiset</A>
-<DD>Creates an empty <code>EnumMultiset</code>.
-<DT><A HREF="./com/google/common/collect/EnumMultiset.html#create(java.lang.Iterable)"><B>create(Iterable&lt;E&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/EnumMultiset.html" title="class in com.google.common.collect">EnumMultiset</A>
-<DD>Creates a new <code>EnumMultiset</code> containing the specified elements.
-<DT><A HREF="./com/google/common/collect/HashBiMap.html#create()"><B>create()</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect">HashBiMap</A>
-<DD>Returns a new, empty <code>HashBiMap</code> with the default initial capacity
- (16).
-<DT><A HREF="./com/google/common/collect/HashBiMap.html#create(int)"><B>create(int)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect">HashBiMap</A>
-<DD>Constructs a new, empty bimap with the specified expected size.
-<DT><A HREF="./com/google/common/collect/HashBiMap.html#create(java.util.Map)"><B>create(Map&lt;? extends K, ? extends V&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect">HashBiMap</A>
-<DD>Constructs a new bimap containing initial values from <code>map</code>.
-<DT><A HREF="./com/google/common/collect/HashMultimap.html#create()"><B>create()</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect">HashMultimap</A>
-<DD>Creates a new, empty <code>HashMultimap</code> with the default initial
- capacities.
-<DT><A HREF="./com/google/common/collect/HashMultimap.html#create(int, int)"><B>create(int, int)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect">HashMultimap</A>
-<DD>Constructs an empty <code>HashMultimap</code> with enough capacity to hold the
- specified numbers of keys and values without rehashing.
-<DT><A HREF="./com/google/common/collect/HashMultimap.html#create(com.google.common.collect.Multimap)"><B>create(Multimap&lt;? extends K, ? extends V&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect">HashMultimap</A>
-<DD>Constructs a <code>HashMultimap</code> with the same mappings as the specified
- multimap.
-<DT><A HREF="./com/google/common/collect/HashMultiset.html#create()"><B>create()</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect">HashMultiset</A>
-<DD>Creates a new, empty <code>HashMultiset</code> using the default initial
- capacity.
-<DT><A HREF="./com/google/common/collect/HashMultiset.html#create(int)"><B>create(int)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect">HashMultiset</A>
-<DD>Creates a new, empty <code>HashMultiset</code> with the specified expected
- number of distinct elements.
-<DT><A HREF="./com/google/common/collect/HashMultiset.html#create(java.lang.Iterable)"><B>create(Iterable&lt;? extends E&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect">HashMultiset</A>
-<DD>Creates a new <code>HashMultiset</code> containing the specified elements.
-<DT><A HREF="./com/google/common/collect/LinkedHashMultimap.html#create()"><B>create()</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect">LinkedHashMultimap</A>
-<DD>Creates a new, empty <code>LinkedHashMultimap</code> with the default initial
- capacities.
-<DT><A HREF="./com/google/common/collect/LinkedHashMultimap.html#create(int, int)"><B>create(int, int)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect">LinkedHashMultimap</A>
-<DD>Constructs an empty <code>LinkedHashMultimap</code> with enough capacity to hold
- the specified numbers of keys and values without rehashing.
-<DT><A HREF="./com/google/common/collect/LinkedHashMultimap.html#create(com.google.common.collect.Multimap)"><B>create(Multimap&lt;? extends K, ? extends V&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect">LinkedHashMultimap</A>
-<DD>Constructs a <code>LinkedHashMultimap</code> with the same mappings as the
- specified multimap.
-<DT><A HREF="./com/google/common/collect/LinkedHashMultiset.html#create()"><B>create()</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect">LinkedHashMultiset</A>
-<DD>Creates a new, empty <code>LinkedHashMultiset</code> using the default initial
- capacity.
-<DT><A HREF="./com/google/common/collect/LinkedHashMultiset.html#create(int)"><B>create(int)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect">LinkedHashMultiset</A>
-<DD>Creates a new, empty <code>LinkedHashMultiset</code> with the specified expected
- number of distinct elements.
-<DT><A HREF="./com/google/common/collect/LinkedHashMultiset.html#create(java.lang.Iterable)"><B>create(Iterable&lt;? extends E&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect">LinkedHashMultiset</A>
-<DD>Creates a new <code>LinkedHashMultiset</code> containing the specified elements.
-<DT><A HREF="./com/google/common/collect/LinkedListMultimap.html#create()"><B>create()</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>
-<DD>Creates a new, empty <code>LinkedListMultimap</code> with the default initial
- capacity.
-<DT><A HREF="./com/google/common/collect/LinkedListMultimap.html#create(int)"><B>create(int)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>
-<DD>Constructs an empty <code>LinkedListMultimap</code> with enough capacity to hold
- the specified number of keys without rehashing.
-<DT><A HREF="./com/google/common/collect/LinkedListMultimap.html#create(com.google.common.collect.Multimap)"><B>create(Multimap&lt;? extends K, ? extends V&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>
-<DD>Constructs a <code>LinkedListMultimap</code> with the same mappings as the
- specified <code>Multimap</code>.
-<DT><A HREF="./com/google/common/collect/MutableClassToInstanceMap.html#create()"><B>create()</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect">MutableClassToInstanceMap</A>
-<DD>Returns a new <code>MutableClassToInstanceMap</code> instance backed by a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util"><CODE>HashMap</CODE></A> using the default initial capacity and load factor.
-<DT><A HREF="./com/google/common/collect/MutableClassToInstanceMap.html#create(java.util.Map)"><B>create(Map&lt;Class&lt;? extends B&gt;, B&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect">MutableClassToInstanceMap</A>
-<DD>Returns a new <code>MutableClassToInstanceMap</code> instance backed by a given
- empty <code>backingMap</code>.
-<DT><A HREF="./com/google/common/collect/TreeMultimap.html#create()"><B>create()</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">TreeMultimap</A>
-<DD>Creates an empty <code>TreeMultimap</code> ordered by the natural ordering of
- its keys and values.
-<DT><A HREF="./com/google/common/collect/TreeMultimap.html#create(java.util.Comparator, java.util.Comparator)"><B>create(Comparator&lt;? super K&gt;, Comparator&lt;? super V&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">TreeMultimap</A>
-<DD>Creates an empty <code>TreeMultimap</code> instance using explicit comparators.
-<DT><A HREF="./com/google/common/collect/TreeMultimap.html#create(com.google.common.collect.Multimap)"><B>create(Multimap&lt;? extends K, ? extends V&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">TreeMultimap</A>
-<DD>Constructs a <code>TreeMultimap</code>, ordered by the natural ordering of its
- keys and values, with the same mappings as the specified multimap.
-<DT><A HREF="./com/google/common/collect/TreeMultiset.html#create()"><B>create()</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect">TreeMultiset</A>
-<DD>Creates a new, empty multiset, sorted according to the elements' natural
- order.
-<DT><A HREF="./com/google/common/collect/TreeMultiset.html#create(java.util.Comparator)"><B>create(Comparator&lt;? super E&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect">TreeMultiset</A>
-<DD>Creates a new, empty multiset, sorted according to the specified
- comparator.
-<DT><A HREF="./com/google/common/collect/TreeMultiset.html#create(java.lang.Iterable)"><B>create(Iterable&lt;? extends E&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect">TreeMultiset</A>
-<DD>Creates an empty multiset containing the given initial elements, sorted
- according to the elements' natural order.
-<DT><A HREF="./com/google/common/util/concurrent/ValueFuture.html#create()"><B>create()</B></A> - 
-Static method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/ValueFuture.html" title="class in com.google.common.util.concurrent">ValueFuture</A>
-<DD>Creates a new <code>ValueFuture</code> in the default state.
-<DT><A HREF="./com/google/common/io/Files.html#createTempDir()"><B>createTempDir()</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/Files.html" title="class in com.google.common.io">Files</A>
-<DD>Atomically creates a new directory somewhere beneath the system's
- temporary directory (as defined by the <code>java.io.tmpdir</code> system
- property), and returns its name.
-<DT><A HREF="./com/google/common/collect/Iterables.html#cycle(java.lang.Iterable)"><B>cycle(Iterable&lt;T&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
-<DD>Returns an iterable whose iterators cycle indefinitely over the elements of
- <code>iterable</code>.
-<DT><A HREF="./com/google/common/collect/Iterables.html#cycle(T...)"><B>cycle(T...)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
-<DD>Returns an iterable whose iterators cycle indefinitely over the provided
- elements.
-<DT><A HREF="./com/google/common/collect/Iterators.html#cycle(java.lang.Iterable)"><B>cycle(Iterable&lt;T&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
-<DD>Returns an iterator that cycles indefinitely over the elements of <code>iterable</code>.
-<DT><A HREF="./com/google/common/collect/Iterators.html#cycle(T...)"><B>cycle(T...)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
-<DD>Returns an iterator that cycles indefinitely over the provided elements.
-</DL>
-<HR>
-<A NAME="_D_"><!-- --></A><H2>
-<B>D</B></H2>
-<DL>
-<DT><A HREF="./com/google/common/util/concurrent/DaemonThreadFactory.html" title="class in com.google.common.util.concurrent"><B>DaemonThreadFactory</B></A> - Class in <A HREF="./com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A><DD>Wraps another <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadFactory.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ThreadFactory</CODE></A>, making all new threads daemon threads.<DT><A HREF="./com/google/common/util/concurrent/DaemonThreadFactory.html#DaemonThreadFactory(java.util.concurrent.ThreadFactory)"><B>DaemonThreadFactory(ThreadFactory)</B></A> - 
-Constructor for class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/DaemonThreadFactory.html" title="class in com.google.common.util.concurrent">DaemonThreadFactory</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/Executors.html#daemonThreadFactory()"><B>daemonThreadFactory()</B></A> - 
-Static method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/Executors.html" title="class in com.google.common.util.concurrent">Executors</A>
-<DD>Returns a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadFactory.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ThreadFactory</CODE></A> which creates daemon threads.
-<DT><A HREF="./com/google/common/util/concurrent/Executors.html#daemonThreadFactory(java.util.concurrent.ThreadFactory)"><B>daemonThreadFactory(ThreadFactory)</B></A> - 
-Static method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/Executors.html" title="class in com.google.common.util.concurrent">Executors</A>
-<DD>Wraps another <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadFactory.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ThreadFactory</CODE></A>, making all new threads daemon threads.
-<DT><A HREF="./com/google/common/util/concurrent/NamingThreadFactory.html#DEFAULT_FACTORY"><B>DEFAULT_FACTORY</B></A> - 
-Static variable in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/NamingThreadFactory.html" title="class in com.google.common.util.concurrent">NamingThreadFactory</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/base/Defaults.html" title="class in com.google.common.base"><B>Defaults</B></A> - Class in <A HREF="./com/google/common/base/package-summary.html">com.google.common.base</A><DD>This class provides default values for all Java types, as defined by the JLS.<DT><A HREF="./com/google/common/base/Defaults.html#defaultValue(java.lang.Class)"><B>defaultValue(Class&lt;T&gt;)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Defaults.html" title="class in com.google.common.base">Defaults</A>
-<DD>Returns the default value of <code>type</code> as defined by JLS --- <code>0</code>
- for numbers, <code>false</code> for <code>boolean</code> and <code>'\0'</code> for <code>char</code>.
-<DT><A HREF="./com/google/common/collect/ForwardingCollection.html#delegate()"><B>delegate()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingConcurrentMap.html#delegate()"><B>delegate()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingConcurrentMap.html" title="class in com.google.common.collect">ForwardingConcurrentMap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingIterator.html#delegate()"><B>delegate()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingIterator.html" title="class in com.google.common.collect">ForwardingIterator</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingList.html#delegate()"><B>delegate()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect">ForwardingList</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingListIterator.html#delegate()"><B>delegate()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingListIterator.html" title="class in com.google.common.collect">ForwardingListIterator</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingMap.html#delegate()"><B>delegate()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingMapEntry.html#delegate()"><B>delegate()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMapEntry.html" title="class in com.google.common.collect">ForwardingMapEntry</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingMultimap.html#delegate()"><B>delegate()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect">ForwardingMultimap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingMultiset.html#delegate()"><B>delegate()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect">ForwardingMultiset</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingObject.html#delegate()"><B>delegate()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A>
-<DD>Returns the backing delegate instance that methods are forwarded to.
-<DT><A HREF="./com/google/common/collect/ForwardingQueue.html#delegate()"><B>delegate()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingQueue.html" title="class in com.google.common.collect">ForwardingQueue</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingSet.html#delegate()"><B>delegate()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingSet.html" title="class in com.google.common.collect">ForwardingSet</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingSortedMap.html#delegate()"><B>delegate()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingSortedMap.html" title="class in com.google.common.collect">ForwardingSortedMap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingSortedSet.html#delegate()"><B>delegate()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingSortedSet.html" title="class in com.google.common.collect">ForwardingSortedSet</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableClassToInstanceMap.html#delegate()"><B>delegate()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/AbstractCheckedFuture.html#delegate"><B>delegate</B></A> - 
-Variable in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractCheckedFuture.html" title="class in com.google.common.util.concurrent">AbstractCheckedFuture</A>
-<DD>The delegate, used to pass along all our methods.
-<DT><A HREF="./com/google/common/util/concurrent/ForwardingFuture.html#delegate()"><B>delegate()</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/ForwardingFuture.html" title="class in com.google.common.util.concurrent">ForwardingFuture</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/ForwardingService.html#delegate()"><B>delegate()</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/ForwardingService.html" title="class in com.google.common.util.concurrent">ForwardingService</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/io/Files.html#deleteDirectoryContents(java.io.File)"><B>deleteDirectoryContents(File)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/Files.html" title="class in com.google.common.io">Files</A>
-<DD>Deletes all the files within a directory.
-<DT><A HREF="./com/google/common/io/Files.html#deleteRecursively(java.io.File)"><B>deleteRecursively(File)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/Files.html" title="class in com.google.common.io">Files</A>
-<DD>Deletes a file or directory and all contents recursively.
-<DT><A HREF="./com/google/common/collect/Maps.html#difference(java.util.Map, java.util.Map)"><B>difference(Map&lt;? extends K, ? extends V&gt;, Map&lt;? extends K, ? extends V&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Maps.html" title="class in com.google.common.collect">Maps</A>
-<DD>Computes the difference between two maps.
-<DT><A HREF="./com/google/common/collect/Sets.html#difference(java.util.Set, java.util.Set)"><B>difference(Set&lt;E&gt;, Set&lt;?&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Sets.html" title="class in com.google.common.collect">Sets</A>
-<DD>Returns an unmodifiable <b>view</b> of the difference of two sets.
-<DT><A HREF="./com/google/common/base/CharMatcher.html#DIGIT"><B>DIGIT</B></A> - 
-Static variable in class com.google.common.base.<A HREF="./com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>
-<DD>Determines whether a character is a digit according to
- <a href="http://unicode.org/cldr/utility/list-unicodeset.jsp?a=%5Cp%7Bdigit%7D">Unicode</a>.
-<DT><A HREF="./com/google/common/util/concurrent/AbstractFuture.html#done()"><B>done()</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractFuture.html" title="class in com.google.common.util.concurrent">AbstractFuture</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/AbstractListenableFuture.html#done()"><B>done()</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractListenableFuture.html" title="class in com.google.common.util.concurrent">AbstractListenableFuture</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/ListenableFutureTask.html#done()"><B>done()</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/ListenableFutureTask.html" title="class in com.google.common.util.concurrent">ListenableFutureTask</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/AbstractService.html#doStart()"><B>doStart()</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractService.html" title="class in com.google.common.util.concurrent">AbstractService</A>
-<DD>This method is called by <A HREF="./com/google/common/util/concurrent/AbstractService.html#start()"><CODE>AbstractService.start()</CODE></A> to initiate service startup.
-<DT><A HREF="./com/google/common/util/concurrent/AbstractService.html#doStop()"><B>doStop()</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractService.html" title="class in com.google.common.util.concurrent">AbstractService</A>
-<DD>This method should be used to initiate service shutdown.
-<DT><A HREF="./com/google/common/primitives/Doubles.html" title="class in com.google.common.primitives"><B>Doubles</B></A> - Class in <A HREF="./com/google/common/primitives/package-summary.html">com.google.common.primitives</A><DD>Static utility methods pertaining to <code>double</code> primitives, that are not
- already found in either <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Double.html?is-external=true" title="class or interface in java.lang"><CODE>Double</CODE></A> or <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true" title="class or interface in java.util"><CODE>Arrays</CODE></A>.</DL>
-<HR>
-<A NAME="_E_"><!-- --></A><H2>
-<B>E</B></H2>
-<DL>
-<DT><A HREF="./com/google/common/collect/ForwardingQueue.html#element()"><B>element()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingQueue.html" title="class in com.google.common.collect">ForwardingQueue</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/Iterables.html#elementsEqual(java.lang.Iterable, java.lang.Iterable)"><B>elementsEqual(Iterable&lt;?&gt;, Iterable&lt;?&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
-<DD>Determines whether two iterables contain equal elements in the same order.
-<DT><A HREF="./com/google/common/collect/Iterators.html#elementsEqual(java.util.Iterator, java.util.Iterator)"><B>elementsEqual(Iterator&lt;?&gt;, Iterator&lt;?&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
-<DD>Determines whether two iterators contain equal elements in the same order.
-<DT><A HREF="./com/google/common/collect/ForwardingMultiset.html#elementSet()"><B>elementSet()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect">ForwardingMultiset</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableMultiset.html#elementSet()"><B>elementSet()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/Multiset.html#elementSet()"><B>elementSet()</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>
-<DD>Returns the set of distinct elements contained in this multiset.
-<DT><A HREF="./com/google/common/collect/TreeMultiset.html#elementSet()"><B>elementSet()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect">TreeMultiset</A>
-<DD>Returns the set of distinct elements contained in this multiset.
-<DT><A HREF="./com/google/common/collect/Iterators.html#emptyIterator()"><B>emptyIterator()</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
-<DD>Returns the empty iterator.
-<DT><A HREF="./com/google/common/collect/AbstractIterator.html#endOfData()"><B>endOfData()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/AbstractIterator.html" title="class in com.google.common.collect">AbstractIterator</A>
-<DD>Implementations of <code>computeNext</code> <b>must</b> invoke this method when
- there are no elements left in the iteration.
-<DT><A HREF="./com/google/common/primitives/Booleans.html#ensureCapacity(boolean[], int, int)"><B>ensureCapacity(boolean[], int, int)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Booleans.html" title="class in com.google.common.primitives">Booleans</A>
-<DD>Returns an array containing the same values as <code>array</code>, but
- guaranteed to be of a specified minimum length.
-<DT><A HREF="./com/google/common/primitives/Bytes.html#ensureCapacity(byte[], int, int)"><B>ensureCapacity(byte[], int, int)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Bytes.html" title="class in com.google.common.primitives">Bytes</A>
-<DD>Returns an array containing the same values as <code>array</code>, but
- guaranteed to be of a specified minimum length.
-<DT><A HREF="./com/google/common/primitives/Chars.html#ensureCapacity(char[], int, int)"><B>ensureCapacity(char[], int, int)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Chars.html" title="class in com.google.common.primitives">Chars</A>
-<DD>Returns an array containing the same values as <code>array</code>, but
- guaranteed to be of a specified minimum length.
-<DT><A HREF="./com/google/common/primitives/Doubles.html#ensureCapacity(double[], int, int)"><B>ensureCapacity(double[], int, int)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Doubles.html" title="class in com.google.common.primitives">Doubles</A>
-<DD>Returns an array containing the same values as <code>array</code>, but
- guaranteed to be of a specified minimum length.
-<DT><A HREF="./com/google/common/primitives/Floats.html#ensureCapacity(float[], int, int)"><B>ensureCapacity(float[], int, int)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Floats.html" title="class in com.google.common.primitives">Floats</A>
-<DD>Returns an array containing the same values as <code>array</code>, but
- guaranteed to be of a specified minimum length.
-<DT><A HREF="./com/google/common/primitives/Ints.html#ensureCapacity(int[], int, int)"><B>ensureCapacity(int[], int, int)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Ints.html" title="class in com.google.common.primitives">Ints</A>
-<DD>Returns an array containing the same values as <code>array</code>, but
- guaranteed to be of a specified minimum length.
-<DT><A HREF="./com/google/common/primitives/Longs.html#ensureCapacity(long[], int, int)"><B>ensureCapacity(long[], int, int)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Longs.html" title="class in com.google.common.primitives">Longs</A>
-<DD>Returns an array containing the same values as <code>array</code>, but
- guaranteed to be of a specified minimum length.
-<DT><A HREF="./com/google/common/primitives/Shorts.html#ensureCapacity(short[], int, int)"><B>ensureCapacity(short[], int, int)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Shorts.html" title="class in com.google.common.primitives">Shorts</A>
-<DD>Returns an array containing the same values as <code>array</code>, but
- guaranteed to be of a specified minimum length.
-<DT><A HREF="./com/google/common/collect/ForwardingMultimap.html#entries()"><B>entries()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect">ForwardingMultimap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html#entries()"><B>entries()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
-<DD>Returns an immutable collection of all key-value pairs in the multimap.
-<DT><A HREF="./com/google/common/collect/ImmutableSetMultimap.html#entries()"><B>entries()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>
-<DD>Returns an immutable collection of all key-value pairs in the multimap.
-<DT><A HREF="./com/google/common/collect/LinkedHashMultimap.html#entries()"><B>entries()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect">LinkedHashMultimap</A>
-<DD>Returns a set of all key-value pairs.
-<DT><A HREF="./com/google/common/collect/LinkedListMultimap.html#entries()"><B>entries()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>
-<DD>Returns a collection of all key-value pairs.
-<DT><A HREF="./com/google/common/collect/Multimap.html#entries()"><B>entries()</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>
-<DD>Returns a collection of all key-value pairs.
-<DT><A HREF="./com/google/common/collect/SetMultimap.html#entries()"><B>entries()</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>
-<DD>Returns a collection of all key-value pairs.
-<DT><A HREF="./com/google/common/collect/MapDifference.html#entriesDiffering()"><B>entriesDiffering()</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/MapDifference.html" title="interface in com.google.common.collect">MapDifference</A>
-<DD>Returns an unmodifiable map describing keys that appear in both maps, but
- with different values.
-<DT><A HREF="./com/google/common/collect/MapDifference.html#entriesInCommon()"><B>entriesInCommon()</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/MapDifference.html" title="interface in com.google.common.collect">MapDifference</A>
-<DD>Returns an unmodifiable map containing the entries that appear in both
- maps; that is, the intersection of the two maps.
-<DT><A HREF="./com/google/common/collect/MapDifference.html#entriesOnlyOnLeft()"><B>entriesOnlyOnLeft()</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/MapDifference.html" title="interface in com.google.common.collect">MapDifference</A>
-<DD>Returns an unmodifiable map containing the entries from the left map whose
- keys are not present in the right map.
-<DT><A HREF="./com/google/common/collect/MapDifference.html#entriesOnlyOnRight()"><B>entriesOnlyOnRight()</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/MapDifference.html" title="interface in com.google.common.collect">MapDifference</A>
-<DD>Returns an unmodifiable map containing the entries from the right map whose
- keys are not present in the left map.
-<DT><A HREF="./com/google/common/collect/ConcurrentHashMultiset.html#entrySet()"><B>entrySet()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect">ConcurrentHashMultiset</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingMap.html#entrySet()"><B>entrySet()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingMultiset.html#entrySet()"><B>entrySet()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect">ForwardingMultiset</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableBiMap.html#entrySet()"><B>entrySet()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableMap.html#entrySet()"><B>entrySet()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>
-<DD>Returns an immutable set of the mappings in this map.
-<DT><A HREF="./com/google/common/collect/ImmutableMultiset.html#entrySet()"><B>entrySet()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.html#entrySet()"><B>entrySet()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>
-<DD>Returns an immutable set of the mappings in this map, sorted by the key
- ordering.
-<DT><A HREF="./com/google/common/collect/Multiset.html#entrySet()"><B>entrySet()</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>
-<DD>Returns a view of the contents of this multiset, grouped into <code>Multiset.Entry</code> instances, each providing an element of the multiset and
- the count of that element.
-<DT><A HREF="./com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect"><B>EnumBiMap</B></A>&lt;<A HREF="./com/google/common/collect/EnumBiMap.html" title="type parameter in EnumBiMap">K</A> extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;<A HREF="./com/google/common/collect/EnumBiMap.html" title="type parameter in EnumBiMap">K</A>&gt;,<A HREF="./com/google/common/collect/EnumBiMap.html" title="type parameter in EnumBiMap">V</A> extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;<A HREF="./com/google/common/collect/EnumBiMap.html" title="type parameter in EnumBiMap">V</A>&gt;&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A <code>BiMap</code> backed by two <code>EnumMap</code> instances.<DT><A HREF="./com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect"><B>EnumHashBiMap</B></A>&lt;<A HREF="./com/google/common/collect/EnumHashBiMap.html" title="type parameter in EnumHashBiMap">K</A> extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;<A HREF="./com/google/common/collect/EnumHashBiMap.html" title="type parameter in EnumHashBiMap">K</A>&gt;,<A HREF="./com/google/common/collect/EnumHashBiMap.html" title="type parameter in EnumHashBiMap">V</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A <code>BiMap</code> backed by an <code>EnumMap</code> instance for keys-to-values, and
- a <code>HashMap</code> instance for values-to-keys.<DT><A HREF="./com/google/common/collect/EnumMultiset.html" title="class in com.google.common.collect"><B>EnumMultiset</B></A>&lt;<A HREF="./com/google/common/collect/EnumMultiset.html" title="type parameter in EnumMultiset">E</A> extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;<A HREF="./com/google/common/collect/EnumMultiset.html" title="type parameter in EnumMultiset">E</A>&gt;&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>Multiset implementation backed by an <A HREF="http://java.sun.com/javase/6/docs/api/java/util/EnumMap.html?is-external=true" title="class or interface in java.util"><CODE>EnumMap</CODE></A>.<DT><A HREF="./com/google/common/base/Objects.html#equal(java.lang.Object, java.lang.Object)"><B>equal(Object, Object)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Objects.html" title="class in com.google.common.base">Objects</A>
-<DD>Determines whether two possibly-null objects are equal.
-<DT><A HREF="./com/google/common/io/ByteStreams.html#equal(com.google.common.io.InputSupplier, com.google.common.io.InputSupplier)"><B>equal(InputSupplier&lt;? extends InputStream&gt;, InputSupplier&lt;? extends InputStream&gt;)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/ByteStreams.html" title="class in com.google.common.io">ByteStreams</A>
-<DD>Returns true if the supplied input streams contain the same bytes.
-<DT><A HREF="./com/google/common/io/Files.html#equal(java.io.File, java.io.File)"><B>equal(File, File)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/Files.html" title="class in com.google.common.io">Files</A>
-<DD>Returns true if the files contains the same bytes.
-<DT><A HREF="./com/google/common/base/Function.html#equals(java.lang.Object)"><B>equals(Object)</B></A> - 
-Method in interface com.google.common.base.<A HREF="./com/google/common/base/Function.html" title="interface in com.google.common.base">Function</A>
-<DD>Indicates whether some other object is equal to this <code>Function</code>.
-<DT><A HREF="./com/google/common/base/Predicate.html#equals(java.lang.Object)"><B>equals(Object)</B></A> - 
-Method in interface com.google.common.base.<A HREF="./com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>
-<DD>Indicates whether some other object is equal to this <code>Predicate</code>.
-<DT><A HREF="./com/google/common/collect/ForwardingList.html#equals(java.lang.Object)"><B>equals(Object)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect">ForwardingList</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingMap.html#equals(java.lang.Object)"><B>equals(Object)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingMapEntry.html#equals(java.lang.Object)"><B>equals(Object)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMapEntry.html" title="class in com.google.common.collect">ForwardingMapEntry</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingMultimap.html#equals(java.lang.Object)"><B>equals(Object)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect">ForwardingMultimap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingMultiset.html#equals(java.lang.Object)"><B>equals(Object)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect">ForwardingMultiset</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingSet.html#equals(java.lang.Object)"><B>equals(Object)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingSet.html" title="class in com.google.common.collect">ForwardingSet</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableBiMap.html#equals(java.lang.Object)"><B>equals(Object)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableMap.html#equals(java.lang.Object)"><B>equals(Object)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html#equals(java.lang.Object)"><B>equals(Object)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableMultiset.html#equals(java.lang.Object)"><B>equals(Object)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableSet.html#equals(java.lang.Object)"><B>equals(Object)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/LinkedListMultimap.html#equals(java.lang.Object)"><B>equals(Object)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>
-<DD>Compares the specified object to this multimap for equality.
-<DT><A HREF="./com/google/common/collect/ListMultimap.html#equals(java.lang.Object)"><B>equals(Object)</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>
-<DD>Compares the specified object to this multimap for equality.
-<DT><A HREF="./com/google/common/collect/MapDifference.html#equals(java.lang.Object)"><B>equals(Object)</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/MapDifference.html" title="interface in com.google.common.collect">MapDifference</A>
-<DD>Compares the specified object with this instance for equality.
-<DT><A HREF="./com/google/common/collect/MapDifference.ValueDifference.html#equals(java.lang.Object)"><B>equals(Object)</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/MapDifference.ValueDifference.html" title="interface in com.google.common.collect">MapDifference.ValueDifference</A>
-<DD>Two instances are considered equal if their <A HREF="./com/google/common/collect/MapDifference.ValueDifference.html#leftValue()"><CODE>MapDifference.ValueDifference.leftValue()</CODE></A>
- values are equal and their <A HREF="./com/google/common/collect/MapDifference.ValueDifference.html#rightValue()"><CODE>MapDifference.ValueDifference.rightValue()</CODE></A> values are also equal.
-<DT><A HREF="./com/google/common/collect/Multimap.html#equals(java.lang.Object)"><B>equals(Object)</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>
-<DD>Compares the specified object with this multimap for equality.
-<DT><A HREF="./com/google/common/collect/Multiset.Entry.html#equals(java.lang.Object)"><B>equals(Object)</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>
-<DD>
-<DT><A HREF="./com/google/common/collect/Multiset.html#equals(java.lang.Object)"><B>equals(Object)</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>
-<DD>Compares the specified object with this multiset for equality.
-<DT><A HREF="./com/google/common/collect/SetMultimap.html#equals(java.lang.Object)"><B>equals(Object)</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>
-<DD>Compares the specified object to this multimap for equality.
-<DT><A HREF="./com/google/common/base/Predicates.html#equalTo(T)"><B>equalTo(T)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Predicates.html" title="class in com.google.common.base">Predicates</A>
-<DD>Returns a predicate that evaluates to <code>true</code> if the object being
- tested <code>equals()</code> the given target or both are null.
-<DT><A HREF="./com/google/common/util/concurrent/ExecutionList.html" title="class in com.google.common.util.concurrent"><B>ExecutionList</B></A> - Class in <A HREF="./com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A><DD>A list of (<code>Runnable</code>, <code>Executor</code>) pairs that guarantees
- that every <code>Runnable</code> that is added using the add method will be
- executed in its associated <code>Executor</code> after <A HREF="./com/google/common/util/concurrent/ExecutionList.html#run()"><CODE>ExecutionList.run()</CODE></A> is called.<DT><A HREF="./com/google/common/util/concurrent/ExecutionList.html#ExecutionList()"><B>ExecutionList()</B></A> - 
-Constructor for class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/ExecutionList.html" title="class in com.google.common.util.concurrent">ExecutionList</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/AbstractExecutionThreadService.html#executor()"><B>executor()</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractExecutionThreadService.html" title="class in com.google.common.util.concurrent">AbstractExecutionThreadService</A>
-<DD>Returns the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executor.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>Executor</CODE></A> that will be used to run this service.
-<DT><A HREF="./com/google/common/util/concurrent/AbstractIdleService.html#executor(com.google.common.base.Service.State)"><B>executor(Service.State)</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractIdleService.html" title="class in com.google.common.util.concurrent">AbstractIdleService</A>
-<DD>Returns the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executor.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>Executor</CODE></A> that will be used to run this service.
-<DT><A HREF="./com/google/common/util/concurrent/Executors.html" title="class in com.google.common.util.concurrent"><B>Executors</B></A> - Class in <A HREF="./com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A><DD>Factory and utility methods for <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executor.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>Executor</CODE></A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ExecutorService</CODE></A>, and <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadFactory.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ThreadFactory</CODE></A>.<DT><A HREF="./com/google/common/util/concurrent/Executors.html#Executors()"><B>Executors()</B></A> - 
-Constructor for class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/Executors.html" title="class in com.google.common.util.concurrent">Executors</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/MapMaker.html#expiration(long, java.util.concurrent.TimeUnit)"><B>expiration(long, TimeUnit)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A>
-<DD>Specifies that each entry should be automatically removed from the
- map once a fixed duration has passed since the entry's creation.
-<DT><A HREF="./com/google/common/collect/Ordering.html#explicit(java.util.List)"><B>explicit(List&lt;T&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>
-<DD>Returns an ordering that compares objects according to the order in
- which they appear in the given list.
-<DT><A HREF="./com/google/common/collect/Ordering.html#explicit(T, T...)"><B>explicit(T, T...)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>
-<DD>Returns an ordering that compares objects according to the order in
- which they are given to this method.
-</DL>
-<HR>
-<A NAME="_F_"><!-- --></A><H2>
-<B>F</B></H2>
-<DL>
-<DT><A HREF="./com/google/common/util/concurrent/FakeTimeLimiter.html" title="class in com.google.common.util.concurrent"><B>FakeTimeLimiter</B></A> - Class in <A HREF="./com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A><DD>A TimeLimiter implementation which actually does not attempt to limit time
- at all.<DT><A HREF="./com/google/common/util/concurrent/FakeTimeLimiter.html#FakeTimeLimiter()"><B>FakeTimeLimiter()</B></A> - 
-Constructor for class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/FakeTimeLimiter.html" title="class in com.google.common.util.concurrent">FakeTimeLimiter</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/io/FileBackedOutputStream.html" title="class in com.google.common.io"><B>FileBackedOutputStream</B></A> - Class in <A HREF="./com/google/common/io/package-summary.html">com.google.common.io</A><DD>An <A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io"><CODE>OutputStream</CODE></A> that starts buffering to a byte array, but
- switches to file buffering once the data reaches a configurable size.<DT><A HREF="./com/google/common/io/FileBackedOutputStream.html#FileBackedOutputStream(int)"><B>FileBackedOutputStream(int)</B></A> - 
-Constructor for class com.google.common.io.<A HREF="./com/google/common/io/FileBackedOutputStream.html" title="class in com.google.common.io">FileBackedOutputStream</A>
-<DD>Creates a new instance that uses the given file threshold.
-<DT><A HREF="./com/google/common/io/FileBackedOutputStream.html#FileBackedOutputStream(int, boolean)"><B>FileBackedOutputStream(int, boolean)</B></A> - 
-Constructor for class com.google.common.io.<A HREF="./com/google/common/io/FileBackedOutputStream.html" title="class in com.google.common.io">FileBackedOutputStream</A>
-<DD>Creates a new instance that uses the given file threshold, and
- optionally resets the data when the <A HREF="./com/google/common/io/InputSupplier.html" title="interface in com.google.common.io"><CODE>InputSupplier</CODE></A> returned
- by <A HREF="./com/google/common/io/FileBackedOutputStream.html#getSupplier()"><CODE>FileBackedOutputStream.getSupplier()</CODE></A> is finalized.
-<DT><A HREF="./com/google/common/io/Files.html" title="class in com.google.common.io"><B>Files</B></A> - Class in <A HREF="./com/google/common/io/package-summary.html">com.google.common.io</A><DD>Provides utility methods for working with files.<DT><A HREF="./com/google/common/collect/Collections2.html#filter(java.util.Collection, com.google.common.base.Predicate)"><B>filter(Collection&lt;E&gt;, Predicate&lt;? super E&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Collections2.html" title="class in com.google.common.collect">Collections2</A>
-<DD>Returns the elements of <code>unfiltered</code> that satisfy a predicate.
-<DT><A HREF="./com/google/common/collect/Iterables.html#filter(java.lang.Iterable, com.google.common.base.Predicate)"><B>filter(Iterable&lt;T&gt;, Predicate&lt;? super T&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
-<DD>Returns the elements of <code>unfiltered</code> that satisfy a predicate.
-<DT><A HREF="./com/google/common/collect/Iterables.html#filter(java.lang.Iterable, java.lang.Class)"><B>filter(Iterable&lt;?&gt;, Class&lt;T&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
-<DD>Returns all instances of class <code>type</code> in <code>unfiltered</code>.
-<DT><A HREF="./com/google/common/collect/Iterators.html#filter(java.util.Iterator, com.google.common.base.Predicate)"><B>filter(Iterator&lt;T&gt;, Predicate&lt;? super T&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
-<DD>Returns the elements of <code>unfiltered</code> that satisfy a predicate.
-<DT><A HREF="./com/google/common/collect/Iterators.html#filter(java.util.Iterator, java.lang.Class)"><B>filter(Iterator&lt;?&gt;, Class&lt;T&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
-<DD>Returns all instances of class <code>type</code> in <code>unfiltered</code>.
-<DT><A HREF="./com/google/common/collect/Sets.html#filter(java.util.Set, com.google.common.base.Predicate)"><B>filter(Set&lt;E&gt;, Predicate&lt;? super E&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Sets.html" title="class in com.google.common.collect">Sets</A>
-<DD>Returns the elements of <code>unfiltered</code> that satisfy a predicate.
-<DT><A HREF="./com/google/common/collect/Maps.html#filterEntries(java.util.Map, com.google.common.base.Predicate)"><B>filterEntries(Map&lt;K, V&gt;, Predicate&lt;? super Map.Entry&lt;K, V&gt;&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Maps.html" title="class in com.google.common.collect">Maps</A>
-<DD>Returns a map containing the mappings in <code>unfiltered</code> that satisfy a
- predicate.
-<DT><A HREF="./com/google/common/collect/Maps.html#filterKeys(java.util.Map, com.google.common.base.Predicate)"><B>filterKeys(Map&lt;K, V&gt;, Predicate&lt;? super K&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Maps.html" title="class in com.google.common.collect">Maps</A>
-<DD>Returns a map containing the mappings in <code>unfiltered</code> whose keys
- satisfy a predicate.
-<DT><A HREF="./com/google/common/collect/Maps.html#filterValues(java.util.Map, com.google.common.base.Predicate)"><B>filterValues(Map&lt;K, V&gt;, Predicate&lt;? super V&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Maps.html" title="class in com.google.common.collect">Maps</A>
-<DD>Returns a map containing the mappings in <code>unfiltered</code> whose values
- satisfy a predicate.
-<DT><A HREF="./com/google/common/base/FinalizablePhantomReference.html" title="class in com.google.common.base"><B>FinalizablePhantomReference</B></A>&lt;<A HREF="./com/google/common/base/FinalizablePhantomReference.html" title="type parameter in FinalizablePhantomReference">T</A>&gt; - Class in <A HREF="./com/google/common/base/package-summary.html">com.google.common.base</A><DD>Phantom reference with a <code>finalizeReferent()</code> method which a
- background thread invokes after the garbage collector reclaims the
- referent.<DT><A HREF="./com/google/common/base/FinalizablePhantomReference.html#FinalizablePhantomReference(T, com.google.common.base.FinalizableReferenceQueue)"><B>FinalizablePhantomReference(T, FinalizableReferenceQueue)</B></A> - 
-Constructor for class com.google.common.base.<A HREF="./com/google/common/base/FinalizablePhantomReference.html" title="class in com.google.common.base">FinalizablePhantomReference</A>
-<DD>Constructs a new finalizable phantom reference.
-<DT><A HREF="./com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base"><B>FinalizableReference</B></A> - Interface in <A HREF="./com/google/common/base/package-summary.html">com.google.common.base</A><DD>Implemented by references that have code to run after garbage collection of
- their referents.<DT><A HREF="./com/google/common/base/FinalizableReferenceQueue.html" title="class in com.google.common.base"><B>FinalizableReferenceQueue</B></A> - Class in <A HREF="./com/google/common/base/package-summary.html">com.google.common.base</A><DD>A reference queue with an associated background thread that dequeues
- references and invokes <A HREF="./com/google/common/base/FinalizableReference.html#finalizeReferent()"><CODE>FinalizableReference.finalizeReferent()</CODE></A> on
- them.<DT><A HREF="./com/google/common/base/FinalizableReferenceQueue.html#FinalizableReferenceQueue()"><B>FinalizableReferenceQueue()</B></A> - 
-Constructor for class com.google.common.base.<A HREF="./com/google/common/base/FinalizableReferenceQueue.html" title="class in com.google.common.base">FinalizableReferenceQueue</A>
-<DD>Constructs a new queue.
-<DT><A HREF="./com/google/common/base/FinalizableSoftReference.html" title="class in com.google.common.base"><B>FinalizableSoftReference</B></A>&lt;<A HREF="./com/google/common/base/FinalizableSoftReference.html" title="type parameter in FinalizableSoftReference">T</A>&gt; - Class in <A HREF="./com/google/common/base/package-summary.html">com.google.common.base</A><DD>Soft reference with a <code>finalizeReferent()</code> method which a background
- thread invokes after the garbage collector reclaims the referent.<DT><A HREF="./com/google/common/base/FinalizableSoftReference.html#FinalizableSoftReference(T, com.google.common.base.FinalizableReferenceQueue)"><B>FinalizableSoftReference(T, FinalizableReferenceQueue)</B></A> - 
-Constructor for class com.google.common.base.<A HREF="./com/google/common/base/FinalizableSoftReference.html" title="class in com.google.common.base">FinalizableSoftReference</A>
-<DD>Constructs a new finalizable soft reference.
-<DT><A HREF="./com/google/common/base/FinalizableWeakReference.html" title="class in com.google.common.base"><B>FinalizableWeakReference</B></A>&lt;<A HREF="./com/google/common/base/FinalizableWeakReference.html" title="type parameter in FinalizableWeakReference">T</A>&gt; - Class in <A HREF="./com/google/common/base/package-summary.html">com.google.common.base</A><DD>Weak reference with a <code>finalizeReferent()</code> method which a background
- thread invokes after the garbage collector reclaims the referent.<DT><A HREF="./com/google/common/base/FinalizableWeakReference.html#FinalizableWeakReference(T, com.google.common.base.FinalizableReferenceQueue)"><B>FinalizableWeakReference(T, FinalizableReferenceQueue)</B></A> - 
-Constructor for class com.google.common.base.<A HREF="./com/google/common/base/FinalizableWeakReference.html" title="class in com.google.common.base">FinalizableWeakReference</A>
-<DD>Constructs a new finalizable weak reference.
-<DT><A HREF="./com/google/common/base/FinalizableReference.html#finalizeReferent()"><B>finalizeReferent()</B></A> - 
-Method in interface com.google.common.base.<A HREF="./com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base">FinalizableReference</A>
-<DD>Invoked on a background thread after the referent has been garbage
- collected unless security restrictions prevented starting a background
- thread, in which case this method is invoked when new references
- are created.
-<DT><A HREF="./com/google/common/collect/Iterables.html#find(java.lang.Iterable, com.google.common.base.Predicate)"><B>find(Iterable&lt;T&gt;, Predicate&lt;? super T&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
-<DD>Returns the first element in <code>iterable</code> that satisfies the given
- predicate.
-<DT><A HREF="./com/google/common/collect/Iterators.html#find(java.util.Iterator, com.google.common.base.Predicate)"><B>find(Iterator&lt;T&gt;, Predicate&lt;? super T&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
-<DD>Returns the first element in <code>iterator</code> that satisfies the given
- predicate.
-<DT><A HREF="./com/google/common/collect/ForwardingSortedSet.html#first()"><B>first()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingSortedSet.html" title="class in com.google.common.collect">ForwardingSortedSet</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingSortedMap.html#firstKey()"><B>firstKey()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingSortedMap.html" title="class in com.google.common.collect">ForwardingSortedMap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.html#firstKey()"><B>firstKey()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/base/Splitter.html#fixedLength(int)"><B>fixedLength(int)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Splitter.html" title="class in com.google.common.base">Splitter</A>
-<DD>Returns a splitter that divides strings into pieces of the given length.
-<DT><A HREF="./com/google/common/primitives/Floats.html" title="class in com.google.common.primitives"><B>Floats</B></A> - Class in <A HREF="./com/google/common/primitives/package-summary.html">com.google.common.primitives</A><DD>Static utility methods pertaining to <code>float</code> primitives, that are not
- already found in either <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true" title="class or interface in java.lang"><CODE>Float</CODE></A> or <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true" title="class or interface in java.util"><CODE>Arrays</CODE></A>.<DT><A HREF="./com/google/common/io/FileBackedOutputStream.html#flush()"><B>flush()</B></A> - 
-Method in class com.google.common.io.<A HREF="./com/google/common/io/FileBackedOutputStream.html" title="class in com.google.common.io">FileBackedOutputStream</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/io/Flushables.html#flush(java.io.Flushable, boolean)"><B>flush(Flushable, boolean)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/Flushables.html" title="class in com.google.common.io">Flushables</A>
-<DD>Flush a <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Flushable.html?is-external=true" title="class or interface in java.io"><CODE>Flushable</CODE></A>, with control over whether an
- <code>IOException</code> may be thrown.
-<DT><A HREF="./com/google/common/io/Flushables.html" title="class in com.google.common.io"><B>Flushables</B></A> - Class in <A HREF="./com/google/common/io/package-summary.html">com.google.common.io</A><DD>Utility methods for working with <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Flushable.html?is-external=true" title="class or interface in java.io"><CODE>Flushable</CODE></A> objects.<DT><A HREF="./com/google/common/io/Flushables.html#flushQuietly(java.io.Flushable)"><B>flushQuietly(Flushable)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/Flushables.html" title="class in com.google.common.io">Flushables</A>
-<DD>Equivalent to calling <code>flush(flushable, true)</code>, but with no
- <code>IOException</code> in the signature.
-<DT><A HREF="./com/google/common/collect/Iterators.html#forArray(T...)"><B>forArray(T...)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
-<DD>Returns an iterator containing the elements of <code>array</code> in order.
-<DT><A HREF="./com/google/common/collect/BiMap.html#forcePut(K, V)"><B>forcePut(K, V)</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>
-<DD>An alternate form of <code>put</code> that silently removes any existing entry
- with the value <code>value</code> before proceeding with the <A HREF="./com/google/common/collect/BiMap.html#put(K, V)"><CODE>BiMap.put(K, V)</CODE></A>
- operation.
-<DT><A HREF="./com/google/common/collect/EnumHashBiMap.html#forcePut(K, V)"><B>forcePut(K, V)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect">EnumHashBiMap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/HashBiMap.html#forcePut(K, V)"><B>forcePut(K, V)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect">HashBiMap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableBiMap.html#forcePut(K, V)"><B>forcePut(K, V)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>
-<DD>Guaranteed to throw an exception and leave the bimap unmodified.
-<DT><A HREF="./com/google/common/collect/Iterators.html#forEnumeration(java.util.Enumeration)"><B>forEnumeration(Enumeration&lt;T&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
-<DD>Adapts an <code>Enumeration</code> to the <code>Iterator</code> interface.
-<DT><A HREF="./com/google/common/base/Functions.html#forMap(java.util.Map)"><B>forMap(Map&lt;K, V&gt;)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Functions.html" title="class in com.google.common.base">Functions</A>
-<DD>Returns a function which performs a map lookup.
-<DT><A HREF="./com/google/common/base/Functions.html#forMap(java.util.Map, V)"><B>forMap(Map&lt;K, ? extends V&gt;, V)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Functions.html" title="class in com.google.common.base">Functions</A>
-<DD>Returns a function which performs a map lookup with a default value.
-<DT><A HREF="./com/google/common/collect/Multimaps.html#forMap(java.util.Map)"><B>forMap(Map&lt;K, V&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Multimaps.html" title="class in com.google.common.collect">Multimaps</A>
-<DD>Returns a multimap view of the specified map.
-<DT><A HREF="./com/google/common/base/CharMatcher.html#forPredicate(com.google.common.base.Predicate)"><B>forPredicate(Predicate&lt;? super Character&gt;)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>
-<DD>Returns a matcher with identical behavior to the given <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Character.html?is-external=true" title="class or interface in java.lang"><CODE>Character</CODE></A>-based predicate, but which operates on primitive <code>char</code>
- instances instead.
-<DT><A HREF="./com/google/common/base/Functions.html#forPredicate(com.google.common.base.Predicate)"><B>forPredicate(Predicate&lt;T&gt;)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Functions.html" title="class in com.google.common.base">Functions</A>
-<DD>Creates a function that returns the same boolean output as the given
- predicate for all inputs.
-<DT><A HREF="./com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect"><B>ForwardingCollection</B></A>&lt;<A HREF="./com/google/common/collect/ForwardingCollection.html" title="type parameter in ForwardingCollection">E</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A collection which forwards all its method calls to another collection.<DT><A HREF="./com/google/common/collect/ForwardingCollection.html#ForwardingCollection()"><B>ForwardingCollection()</B></A> - 
-Constructor for class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingConcurrentMap.html" title="class in com.google.common.collect"><B>ForwardingConcurrentMap</B></A>&lt;<A HREF="./com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">K</A>,<A HREF="./com/google/common/collect/ForwardingConcurrentMap.html" title="type parameter in ForwardingConcurrentMap">V</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A concurrent map which forwards all its method calls to another concurrent
- map.<DT><A HREF="./com/google/common/collect/ForwardingConcurrentMap.html#ForwardingConcurrentMap()"><B>ForwardingConcurrentMap()</B></A> - 
-Constructor for class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingConcurrentMap.html" title="class in com.google.common.collect">ForwardingConcurrentMap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/ForwardingFuture.html" title="class in com.google.common.util.concurrent"><B>ForwardingFuture</B></A>&lt;<A HREF="./com/google/common/util/concurrent/ForwardingFuture.html" title="type parameter in ForwardingFuture">V</A>&gt; - Class in <A HREF="./com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A><DD>A <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>Future</CODE></A> which forwards all its method calls to another future.<DT><A HREF="./com/google/common/util/concurrent/ForwardingFuture.html#ForwardingFuture()"><B>ForwardingFuture()</B></A> - 
-Constructor for class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/ForwardingFuture.html" title="class in com.google.common.util.concurrent">ForwardingFuture</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingIterator.html" title="class in com.google.common.collect"><B>ForwardingIterator</B></A>&lt;<A HREF="./com/google/common/collect/ForwardingIterator.html" title="type parameter in ForwardingIterator">T</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>An iterator which forwards all its method calls to another iterator.<DT><A HREF="./com/google/common/collect/ForwardingIterator.html#ForwardingIterator()"><B>ForwardingIterator()</B></A> - 
-Constructor for class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingIterator.html" title="class in com.google.common.collect">ForwardingIterator</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect"><B>ForwardingList</B></A>&lt;<A HREF="./com/google/common/collect/ForwardingList.html" title="type parameter in ForwardingList">E</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A list which forwards all its method calls to another list.<DT><A HREF="./com/google/common/collect/ForwardingList.html#ForwardingList()"><B>ForwardingList()</B></A> - 
-Constructor for class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect">ForwardingList</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingListIterator.html" title="class in com.google.common.collect"><B>ForwardingListIterator</B></A>&lt;<A HREF="./com/google/common/collect/ForwardingListIterator.html" title="type parameter in ForwardingListIterator">E</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A list iterator which forwards all its method calls to another list
- iterator.<DT><A HREF="./com/google/common/collect/ForwardingListIterator.html#ForwardingListIterator()"><B>ForwardingListIterator()</B></A> - 
-Constructor for class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingListIterator.html" title="class in com.google.common.collect">ForwardingListIterator</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect"><B>ForwardingMap</B></A>&lt;<A HREF="./com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">K</A>,<A HREF="./com/google/common/collect/ForwardingMap.html" title="type parameter in ForwardingMap">V</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A map which forwards all its method calls to another map.<DT><A HREF="./com/google/common/collect/ForwardingMap.html#ForwardingMap()"><B>ForwardingMap()</B></A> - 
-Constructor for class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingMapEntry.html" title="class in com.google.common.collect"><B>ForwardingMapEntry</B></A>&lt;<A HREF="./com/google/common/collect/ForwardingMapEntry.html" title="type parameter in ForwardingMapEntry">K</A>,<A HREF="./com/google/common/collect/ForwardingMapEntry.html" title="type parameter in ForwardingMapEntry">V</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A map entry which forwards all its method calls to another map entry.<DT><A HREF="./com/google/common/collect/ForwardingMapEntry.html#ForwardingMapEntry()"><B>ForwardingMapEntry()</B></A> - 
-Constructor for class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMapEntry.html" title="class in com.google.common.collect">ForwardingMapEntry</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect"><B>ForwardingMultimap</B></A>&lt;<A HREF="./com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">K</A>,<A HREF="./com/google/common/collect/ForwardingMultimap.html" title="type parameter in ForwardingMultimap">V</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A multimap which forwards all its method calls to another multimap.<DT><A HREF="./com/google/common/collect/ForwardingMultimap.html#ForwardingMultimap()"><B>ForwardingMultimap()</B></A> - 
-Constructor for class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect">ForwardingMultimap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect"><B>ForwardingMultiset</B></A>&lt;<A HREF="./com/google/common/collect/ForwardingMultiset.html" title="type parameter in ForwardingMultiset">E</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A multiset which forwards all its method calls to another multiset.<DT><A HREF="./com/google/common/collect/ForwardingMultiset.html#ForwardingMultiset()"><B>ForwardingMultiset()</B></A> - 
-Constructor for class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect">ForwardingMultiset</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect"><B>ForwardingObject</B></A> - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>An abstract base class for implementing the <a
- href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.<DT><A HREF="./com/google/common/collect/ForwardingObject.html#ForwardingObject()"><B>ForwardingObject()</B></A> - 
-Constructor for class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A>
-<DD>Sole constructor.
-<DT><A HREF="./com/google/common/collect/ForwardingQueue.html" title="class in com.google.common.collect"><B>ForwardingQueue</B></A>&lt;<A HREF="./com/google/common/collect/ForwardingQueue.html" title="type parameter in ForwardingQueue">E</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A queue which forwards all its method calls to another queue.<DT><A HREF="./com/google/common/collect/ForwardingQueue.html#ForwardingQueue()"><B>ForwardingQueue()</B></A> - 
-Constructor for class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingQueue.html" title="class in com.google.common.collect">ForwardingQueue</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/ForwardingService.html" title="class in com.google.common.util.concurrent"><B>ForwardingService</B></A> - Class in <A HREF="./com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A><DD>A <A HREF="./com/google/common/base/Service.html" title="interface in com.google.common.base"><CODE>Service</CODE></A> that forwards all method calls to another service.<DT><A HREF="./com/google/common/util/concurrent/ForwardingService.html#ForwardingService()"><B>ForwardingService()</B></A> - 
-Constructor for class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/ForwardingService.html" title="class in com.google.common.util.concurrent">ForwardingService</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingSet.html" title="class in com.google.common.collect"><B>ForwardingSet</B></A>&lt;<A HREF="./com/google/common/collect/ForwardingSet.html" title="type parameter in ForwardingSet">E</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A set which forwards all its method calls to another set.<DT><A HREF="./com/google/common/collect/ForwardingSet.html#ForwardingSet()"><B>ForwardingSet()</B></A> - 
-Constructor for class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingSet.html" title="class in com.google.common.collect">ForwardingSet</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingSortedMap.html" title="class in com.google.common.collect"><B>ForwardingSortedMap</B></A>&lt;<A HREF="./com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">K</A>,<A HREF="./com/google/common/collect/ForwardingSortedMap.html" title="type parameter in ForwardingSortedMap">V</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A sorted map which forwards all its method calls to another sorted map.<DT><A HREF="./com/google/common/collect/ForwardingSortedMap.html#ForwardingSortedMap()"><B>ForwardingSortedMap()</B></A> - 
-Constructor for class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingSortedMap.html" title="class in com.google.common.collect">ForwardingSortedMap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingSortedSet.html" title="class in com.google.common.collect"><B>ForwardingSortedSet</B></A>&lt;<A HREF="./com/google/common/collect/ForwardingSortedSet.html" title="type parameter in ForwardingSortedSet">E</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A sorted set which forwards all its method calls to another sorted set.<DT><A HREF="./com/google/common/collect/ForwardingSortedSet.html#ForwardingSortedSet()"><B>ForwardingSortedSet()</B></A> - 
-Constructor for class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingSortedSet.html" title="class in com.google.common.collect">ForwardingSortedSet</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/Iterables.html#frequency(java.lang.Iterable, java.lang.Object)"><B>frequency(Iterable&lt;?&gt;, Object)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
-<DD>Returns the number of elements in the specified iterable that equal the
- specified object.
-<DT><A HREF="./com/google/common/collect/Iterators.html#frequency(java.util.Iterator, java.lang.Object)"><B>frequency(Iterator&lt;?&gt;, Object)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
-<DD>Returns the number of elements in the specified iterator that equal the
- specified object.
-<DT><A HREF="./com/google/common/collect/Ordering.html#from(java.util.Comparator)"><B>from(Comparator&lt;T&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>
-<DD>Returns an ordering for a pre-existing <code>comparator</code>.
-<DT><A HREF="./com/google/common/collect/Ordering.html#from(com.google.common.collect.Ordering)"><B>from(Ordering&lt;T&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>
-<DD><B>Deprecated.</B>&nbsp;<I>no need to use this</I>
-<DT><A HREF="./com/google/common/primitives/Chars.html#fromByteArray(byte[])"><B>fromByteArray(byte[])</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Chars.html" title="class in com.google.common.primitives">Chars</A>
-<DD>Returns the <code>char</code> value whose big-endian representation is
- stored in the first 2 bytes of <code>bytes</code>; equivalent to <code>ByteBuffer.wrap(bytes).getChar()</code>.
-<DT><A HREF="./com/google/common/primitives/Ints.html#fromByteArray(byte[])"><B>fromByteArray(byte[])</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Ints.html" title="class in com.google.common.primitives">Ints</A>
-<DD>Returns the <code>int</code> value whose big-endian representation is stored in
- the first 4 bytes of <code>bytes</code>; equivalent to <code>ByteBuffer.wrap(bytes).getInt()</code>.
-<DT><A HREF="./com/google/common/primitives/Longs.html#fromByteArray(byte[])"><B>fromByteArray(byte[])</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Longs.html" title="class in com.google.common.primitives">Longs</A>
-<DD>Returns the <code>long</code> value whose big-endian representation is
- stored in the first 8 bytes of <code>bytes</code>; equivalent to <code>ByteBuffer.wrap(bytes).getLong()</code>.
-<DT><A HREF="./com/google/common/primitives/Shorts.html#fromByteArray(byte[])"><B>fromByteArray(byte[])</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Shorts.html" title="class in com.google.common.primitives">Shorts</A>
-<DD>Returns the <code>short</code> value whose big-endian representation is
- stored in the first ? bytes of <code>bytes</code>; equivalent to <code>ByteBuffer.wrap(bytes).getShort()</code>.
-<DT><A HREF="./com/google/common/collect/Maps.html#fromProperties(java.util.Properties)"><B>fromProperties(Properties)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Maps.html" title="class in com.google.common.collect">Maps</A>
-<DD>Creates an <code>ImmutableMap&lt;String, String&gt;</code> from a <code>Properties</code>
- instance.
-<DT><A HREF="./com/google/common/base/Function.html" title="interface in com.google.common.base"><B>Function</B></A>&lt;<A HREF="./com/google/common/base/Function.html" title="type parameter in Function">F</A>,<A HREF="./com/google/common/base/Function.html" title="type parameter in Function">T</A>&gt; - Interface in <A HREF="./com/google/common/base/package-summary.html">com.google.common.base</A><DD>A transformation from one object to another.<DT><A HREF="./com/google/common/base/Functions.html" title="class in com.google.common.base"><B>Functions</B></A> - Class in <A HREF="./com/google/common/base/package-summary.html">com.google.common.base</A><DD>Useful functions.<DT><A HREF="./com/google/common/util/concurrent/Futures.html" title="class in com.google.common.util.concurrent"><B>Futures</B></A> - Class in <A HREF="./com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A><DD>Static utility methods pertaining to the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>Future</CODE></A> interface.</DL>
-<HR>
-<A NAME="_G_"><!-- --></A><H2>
-<B>G</B></H2>
-<DL>
-<DT><A HREF="./com/google/common/base/Supplier.html#get()"><B>get()</B></A> - 
-Method in interface com.google.common.base.<A HREF="./com/google/common/base/Supplier.html" title="interface in com.google.common.base">Supplier</A>
-<DD>Retrieves an instance of the appropriate type.
-<DT><A HREF="./com/google/common/collect/ForwardingList.html#get(int)"><B>get(int)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect">ForwardingList</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingMap.html#get(java.lang.Object)"><B>get(Object)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingMultimap.html#get(K)"><B>get(K)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect">ForwardingMultimap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableBiMap.html#get(java.lang.Object)"><B>get(Object)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableListMultimap.html#get(K)"><B>get(K)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>
-<DD>Returns an immutable list of the values for the given key.
-<DT><A HREF="./com/google/common/collect/ImmutableMap.html#get(java.lang.Object)"><B>get(Object)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html#get(K)"><B>get(K)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
-<DD>Returns an immutable collection of the values for the given key.
-<DT><A HREF="./com/google/common/collect/ImmutableSetMultimap.html#get(K)"><B>get(K)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>
-<DD>Returns an immutable set of the values for the given key.
-<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.html#get(java.lang.Object)"><B>get(Object)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/Iterables.html#get(java.lang.Iterable, int)"><B>get(Iterable&lt;T&gt;, int)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
-<DD>Returns the element at the specified position in an iterable.
-<DT><A HREF="./com/google/common/collect/Iterators.html#get(java.util.Iterator, int)"><B>get(Iterator&lt;T&gt;, int)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
-<DD>Advances <code>iterator</code> <code>position + 1</code> times, returning the element
- at the <code>position</code>th position.
-<DT><A HREF="./com/google/common/collect/LinkedListMultimap.html#get(K)"><B>get(K)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>
-<DD>Returns a collection view of all values associated with a key.
-<DT><A HREF="./com/google/common/collect/ListMultimap.html#get(K)"><B>get(K)</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>
-<DD>Returns a collection view of all values associated with a key.
-<DT><A HREF="./com/google/common/collect/Multimap.html#get(K)"><B>get(K)</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>
-<DD>Returns a collection view of all values associated with a key.
-<DT><A HREF="./com/google/common/collect/SetMultimap.html#get(K)"><B>get(K)</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>
-<DD>Returns a collection view of all values associated with a key.
-<DT><A HREF="./com/google/common/collect/SortedSetMultimap.html#get(K)"><B>get(K)</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>
-<DD>Returns a collection view of all values associated with a key.
-<DT><A HREF="./com/google/common/util/concurrent/AbstractCheckedFuture.html#get()"><B>get()</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractCheckedFuture.html" title="class in com.google.common.util.concurrent">AbstractCheckedFuture</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/AbstractCheckedFuture.html#get(long, java.util.concurrent.TimeUnit)"><B>get(long, TimeUnit)</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractCheckedFuture.html" title="class in com.google.common.util.concurrent">AbstractCheckedFuture</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/AbstractFuture.html#get(long, java.util.concurrent.TimeUnit)"><B>get(long, TimeUnit)</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractFuture.html" title="class in com.google.common.util.concurrent">AbstractFuture</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/AbstractFuture.html#get()"><B>get()</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractFuture.html" title="class in com.google.common.util.concurrent">AbstractFuture</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/ForwardingFuture.html#get()"><B>get()</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/ForwardingFuture.html" title="class in com.google.common.util.concurrent">ForwardingFuture</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/ForwardingFuture.html#get(long, java.util.concurrent.TimeUnit)"><B>get(long, TimeUnit)</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/ForwardingFuture.html" title="class in com.google.common.util.concurrent">ForwardingFuture</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/UninterruptibleFuture.html#get()"><B>get()</B></A> - 
-Method in interface com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/UninterruptibleFuture.html" title="interface in com.google.common.util.concurrent">UninterruptibleFuture</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/UninterruptibleFuture.html#get(long, java.util.concurrent.TimeUnit)"><B>get(long, TimeUnit)</B></A> - 
-Method in interface com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/UninterruptibleFuture.html" title="interface in com.google.common.util.concurrent">UninterruptibleFuture</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/base/Throwables.html#getCausalChain(java.lang.Throwable)"><B>getCausalChain(Throwable)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Throwables.html" title="class in com.google.common.base">Throwables</A>
-<DD>Gets a <code>Throwable</code> cause chain as a list.
-<DT><A HREF="./com/google/common/io/ByteStreams.html#getChecksum(com.google.common.io.InputSupplier, java.util.zip.Checksum)"><B>getChecksum(InputSupplier&lt;? extends InputStream&gt;, Checksum)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/ByteStreams.html" title="class in com.google.common.io">ByteStreams</A>
-<DD>Computes and returns the checksum value for a supplied input stream.
-<DT><A HREF="./com/google/common/io/Files.html#getChecksum(java.io.File, java.util.zip.Checksum)"><B>getChecksum(File, Checksum)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/Files.html" title="class in com.google.common.io">Files</A>
-<DD>Computes and returns the checksum value for a file.
-<DT><A HREF="./com/google/common/collect/Multiset.Entry.html#getCount()"><B>getCount()</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>
-<DD>Returns the count of the associated element in the underlying multiset.
-<DT><A HREF="./com/google/common/io/CountingInputStream.html#getCount()"><B>getCount()</B></A> - 
-Method in class com.google.common.io.<A HREF="./com/google/common/io/CountingInputStream.html" title="class in com.google.common.io">CountingInputStream</A>
-<DD>Returns the number of bytes read.
-<DT><A HREF="./com/google/common/io/CountingOutputStream.html#getCount()"><B>getCount()</B></A> - 
-Method in class com.google.common.io.<A HREF="./com/google/common/io/CountingOutputStream.html" title="class in com.google.common.io">CountingOutputStream</A>
-<DD>Returns the number of bytes written.
-<DT><A HREF="./com/google/common/io/ByteStreams.html#getDigest(com.google.common.io.InputSupplier, java.security.MessageDigest)"><B>getDigest(InputSupplier&lt;? extends InputStream&gt;, MessageDigest)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/ByteStreams.html" title="class in com.google.common.io">ByteStreams</A>
-<DD>Computes and returns the digest value for a supplied input stream.
-<DT><A HREF="./com/google/common/io/Files.html#getDigest(java.io.File, java.security.MessageDigest)"><B>getDigest(File, MessageDigest)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/Files.html" title="class in com.google.common.io">Files</A>
-<DD>Computes and returns the digest value for a file.
-<DT><A HREF="./com/google/common/collect/Multiset.Entry.html#getElement()"><B>getElement()</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>
-<DD>Returns the multiset element corresponding to this entry.
-<DT><A HREF="./com/google/common/util/concurrent/Executors.html#getExitingExecutorService(java.util.concurrent.ThreadPoolExecutor, long, java.util.concurrent.TimeUnit)"><B>getExitingExecutorService(ThreadPoolExecutor, long, TimeUnit)</B></A> - 
-Static method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/Executors.html" title="class in com.google.common.util.concurrent">Executors</A>
-<DD>Converts the given ThreadPoolExecutor into an ExecutorService that exits
- when the application is complete.
-<DT><A HREF="./com/google/common/util/concurrent/Executors.html#getExitingExecutorService(java.util.concurrent.ThreadPoolExecutor)"><B>getExitingExecutorService(ThreadPoolExecutor)</B></A> - 
-Static method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/Executors.html" title="class in com.google.common.util.concurrent">Executors</A>
-<DD>Converts the given ThreadPoolExecutor into an ExecutorService that exits
- when the application is complete.
-<DT><A HREF="./com/google/common/util/concurrent/Executors.html#getExitingScheduledExecutorService(java.util.concurrent.ScheduledThreadPoolExecutor, long, java.util.concurrent.TimeUnit)"><B>getExitingScheduledExecutorService(ScheduledThreadPoolExecutor, long, TimeUnit)</B></A> - 
-Static method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/Executors.html" title="class in com.google.common.util.concurrent">Executors</A>
-<DD>Converts the given ScheduledThreadPoolExecutor into a
- ScheduledExecutorService that exits when the application is complete.
-<DT><A HREF="./com/google/common/util/concurrent/Executors.html#getExitingScheduledExecutorService(java.util.concurrent.ScheduledThreadPoolExecutor)"><B>getExitingScheduledExecutorService(ScheduledThreadPoolExecutor)</B></A> - 
-Static method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/Executors.html" title="class in com.google.common.util.concurrent">Executors</A>
-<DD>Converts the given ThreadPoolExecutor into a ScheduledExecutorService that
- exits when the application is complete.
-<DT><A HREF="./com/google/common/io/InputSupplier.html#getInput()"><B>getInput()</B></A> - 
-Method in interface com.google.common.io.<A HREF="./com/google/common/io/InputSupplier.html" title="interface in com.google.common.io">InputSupplier</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ClassToInstanceMap.html#getInstance(java.lang.Class)"><B>getInstance(Class&lt;T&gt;)</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect">ClassToInstanceMap</A>
-<DD>Returns the value the specified class is mapped to, or <code>null</code> if no
- entry for this class is present.
-<DT><A HREF="./com/google/common/collect/ImmutableClassToInstanceMap.html#getInstance(java.lang.Class)"><B>getInstance(Class&lt;T&gt;)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/MutableClassToInstanceMap.html#getInstance(java.lang.Class)"><B>getInstance(Class&lt;T&gt;)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect">MutableClassToInstanceMap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingMapEntry.html#getKey()"><B>getKey()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMapEntry.html" title="class in com.google.common.collect">ForwardingMapEntry</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/Iterables.html#getLast(java.lang.Iterable)"><B>getLast(Iterable&lt;T&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
-<DD>Returns the last element of <code>iterable</code>.
-<DT><A HREF="./com/google/common/collect/Iterators.html#getLast(java.util.Iterator)"><B>getLast(Iterator&lt;T&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
-<DD>Advances <code>iterator</code> to the end, returning the last element.
-<DT><A HREF="./com/google/common/collect/Iterables.html#getOnlyElement(java.lang.Iterable)"><B>getOnlyElement(Iterable&lt;T&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
-<DD>Returns the single element contained in <code>iterable</code>.
-<DT><A HREF="./com/google/common/collect/Iterables.html#getOnlyElement(java.lang.Iterable, T)"><B>getOnlyElement(Iterable&lt;T&gt;, T)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
-<DD>Returns the single element contained in <code>iterable</code>, or <code>defaultValue</code> if the iterable is empty.
-<DT><A HREF="./com/google/common/collect/Iterators.html#getOnlyElement(java.util.Iterator)"><B>getOnlyElement(Iterator&lt;T&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
-<DD>Returns the single element contained in <code>iterator</code>.
-<DT><A HREF="./com/google/common/collect/Iterators.html#getOnlyElement(java.util.Iterator, T)"><B>getOnlyElement(Iterator&lt;T&gt;, T)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
-<DD>Returns the single element contained in <code>iterator</code>, or <code>defaultValue</code> if the iterator is empty.
-<DT><A HREF="./com/google/common/io/OutputSupplier.html#getOutput()"><B>getOutput()</B></A> - 
-Method in interface com.google.common.io.<A HREF="./com/google/common/io/OutputSupplier.html" title="interface in com.google.common.io">OutputSupplier</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/io/Resources.html#getResource(java.lang.String)"><B>getResource(String)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/Resources.html" title="class in com.google.common.io">Resources</A>
-<DD>Returns a <code>URL</code> pointing to <code>resourceName</code> if the resource is
- found in the class path.
-<DT><A HREF="./com/google/common/io/Resources.html#getResource(java.lang.Class, java.lang.String)"><B>getResource(Class&lt;?&gt;, String)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/Resources.html" title="class in com.google.common.io">Resources</A>
-<DD>Returns a <code>URL</code> pointing to <code>resourceName</code> that is relative to
- <code>contextClass</code>, if the resource is found in the class path.
-<DT><A HREF="./com/google/common/io/ByteProcessor.html#getResult()"><B>getResult()</B></A> - 
-Method in interface com.google.common.io.<A HREF="./com/google/common/io/ByteProcessor.html" title="interface in com.google.common.io">ByteProcessor</A>
-<DD>Return the result of processing all the bytes.
-<DT><A HREF="./com/google/common/io/LineProcessor.html#getResult()"><B>getResult()</B></A> - 
-Method in interface com.google.common.io.<A HREF="./com/google/common/io/LineProcessor.html" title="interface in com.google.common.io">LineProcessor</A>
-<DD>Return the result of processing all the lines.
-<DT><A HREF="./com/google/common/base/Throwables.html#getRootCause(java.lang.Throwable)"><B>getRootCause(Throwable)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Throwables.html" title="class in com.google.common.base">Throwables</A>
-<DD>Returns the innermost cause of <code>throwable</code>.
-<DT><A HREF="./com/google/common/base/Throwables.html#getStackTraceAsString(java.lang.Throwable)"><B>getStackTraceAsString(Throwable)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Throwables.html" title="class in com.google.common.base">Throwables</A>
-<DD>Returns a string containing the result of
- <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true#toString()" title="class or interface in java.lang"><CODE>toString()</CODE></A>, followed by the full, recursive
- stack trace of <code>throwable</code>.
-<DT><A HREF="./com/google/common/io/FileBackedOutputStream.html#getSupplier()"><B>getSupplier()</B></A> - 
-Method in class com.google.common.io.<A HREF="./com/google/common/io/FileBackedOutputStream.html" title="class in com.google.common.io">FileBackedOutputStream</A>
-<DD>Returns a supplier that may be used to retrieve the data buffered
- by this stream.
-<DT><A HREF="./com/google/common/collect/ForwardingMapEntry.html#getValue()"><B>getValue()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMapEntry.html" title="class in com.google.common.collect">ForwardingMapEntry</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/annotations/GwtCompatible.html" title="annotation in com.google.common.annotations"><B>GwtCompatible</B></A> - Annotation Type in <A HREF="./com/google/common/annotations/package-summary.html">com.google.common.annotations</A><DD>The presence of this annotation on a type indicates that the type may be
- used with the
- <a href="http://code.google.com/webtoolkit/">Google Web Toolkit</a> (GWT).<DT><A HREF="./com/google/common/annotations/GwtIncompatible.html" title="annotation in com.google.common.annotations"><B>GwtIncompatible</B></A> - Annotation Type in <A HREF="./com/google/common/annotations/package-summary.html">com.google.common.annotations</A><DD>The presence of this annotation on a method indicates that the method may
- <em>not</em> be used with the
- <a href="http://code.google.com/webtoolkit/">Google Web Toolkit</a> (GWT),
- even though its type is annotated as <A HREF="./com/google/common/annotations/GwtCompatible.html" title="annotation in com.google.common.annotations"><CODE>GwtCompatible</CODE></A> and accessible in
- GWT.</DL>
-<HR>
-<A NAME="_H_"><!-- --></A><H2>
-<B>H</B></H2>
-<DL>
-<DT><A HREF="./com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect"><B>HashBiMap</B></A>&lt;<A HREF="./com/google/common/collect/HashBiMap.html" title="type parameter in HashBiMap">K</A>,<A HREF="./com/google/common/collect/HashBiMap.html" title="type parameter in HashBiMap">V</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A <A HREF="./com/google/common/collect/BiMap.html" title="interface in com.google.common.collect"><CODE>BiMap</CODE></A> backed by two <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util"><CODE>HashMap</CODE></A> instances.<DT><A HREF="./com/google/common/base/Objects.html#hashCode(java.lang.Object...)"><B>hashCode(Object...)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Objects.html" title="class in com.google.common.base">Objects</A>
-<DD>Generates a hash code for multiple values.
-<DT><A HREF="./com/google/common/collect/ForwardingList.html#hashCode()"><B>hashCode()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect">ForwardingList</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingMap.html#hashCode()"><B>hashCode()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingMapEntry.html#hashCode()"><B>hashCode()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMapEntry.html" title="class in com.google.common.collect">ForwardingMapEntry</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingMultimap.html#hashCode()"><B>hashCode()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect">ForwardingMultimap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingMultiset.html#hashCode()"><B>hashCode()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect">ForwardingMultiset</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingSet.html#hashCode()"><B>hashCode()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingSet.html" title="class in com.google.common.collect">ForwardingSet</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableBiMap.html#hashCode()"><B>hashCode()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableMap.html#hashCode()"><B>hashCode()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html#hashCode()"><B>hashCode()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableMultiset.html#hashCode()"><B>hashCode()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableSet.html#hashCode()"><B>hashCode()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/LinkedListMultimap.html#hashCode()"><B>hashCode()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>
-<DD>Returns the hash code for this multimap.
-<DT><A HREF="./com/google/common/collect/MapDifference.html#hashCode()"><B>hashCode()</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/MapDifference.html" title="interface in com.google.common.collect">MapDifference</A>
-<DD>Returns the hash code for this instance.
-<DT><A HREF="./com/google/common/collect/MapDifference.ValueDifference.html#hashCode()"><B>hashCode()</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/MapDifference.ValueDifference.html" title="interface in com.google.common.collect">MapDifference.ValueDifference</A>
-<DD>The hash code equals the value
- <code>Arrays.asList(leftValue(), rightValue()).hashCode()</code>.
-<DT><A HREF="./com/google/common/collect/Multimap.html#hashCode()"><B>hashCode()</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>
-<DD>Returns the hash code for this multimap.
-<DT><A HREF="./com/google/common/collect/Multiset.Entry.html#hashCode()"><B>hashCode()</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>
-<DD>
-<DT><A HREF="./com/google/common/collect/Multiset.html#hashCode()"><B>hashCode()</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>
-<DD>Returns the hash code for this multiset.
-<DT><A HREF="./com/google/common/primitives/Booleans.html#hashCode(boolean)"><B>hashCode(boolean)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Booleans.html" title="class in com.google.common.primitives">Booleans</A>
-<DD>Returns a hash code for <code>value</code>; equal to the result of invoking
- <code>((Boolean) value).hashCode()</code>.
-<DT><A HREF="./com/google/common/primitives/Bytes.html#hashCode(byte)"><B>hashCode(byte)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Bytes.html" title="class in com.google.common.primitives">Bytes</A>
-<DD>Returns a hash code for <code>value</code>; equal to the result of invoking
- <code>((Byte) value).hashCode()</code>.
-<DT><A HREF="./com/google/common/primitives/Chars.html#hashCode(char)"><B>hashCode(char)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Chars.html" title="class in com.google.common.primitives">Chars</A>
-<DD>Returns a hash code for <code>value</code>; equal to the result of invoking
- <code>((Character) value).hashCode()</code>.
-<DT><A HREF="./com/google/common/primitives/Doubles.html#hashCode(double)"><B>hashCode(double)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Doubles.html" title="class in com.google.common.primitives">Doubles</A>
-<DD>Returns a hash code for <code>value</code>; equal to the result of invoking
- <code>((Double) value).hashCode()</code>.
-<DT><A HREF="./com/google/common/primitives/Floats.html#hashCode(float)"><B>hashCode(float)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Floats.html" title="class in com.google.common.primitives">Floats</A>
-<DD>Returns a hash code for <code>value</code>; equal to the result of invoking
- <code>((Float) value).hashCode()</code>.
-<DT><A HREF="./com/google/common/primitives/Ints.html#hashCode(int)"><B>hashCode(int)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Ints.html" title="class in com.google.common.primitives">Ints</A>
-<DD>Returns a hash code for <code>value</code>; equal to the result of invoking
- <code>((Integer) value).hashCode()</code>.
-<DT><A HREF="./com/google/common/primitives/Longs.html#hashCode(long)"><B>hashCode(long)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Longs.html" title="class in com.google.common.primitives">Longs</A>
-<DD>Returns a hash code for <code>value</code>; equal to the result of invoking
- <code>((Long) value).hashCode()</code>.
-<DT><A HREF="./com/google/common/primitives/Shorts.html#hashCode(short)"><B>hashCode(short)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Shorts.html" title="class in com.google.common.primitives">Shorts</A>
-<DD>Returns a hash code for <code>value</code>; equal to the result of invoking
- <code>((Short) value).hashCode()</code>.
-<DT><A HREF="./com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect"><B>HashMultimap</B></A>&lt;<A HREF="./com/google/common/collect/HashMultimap.html" title="type parameter in HashMultimap">K</A>,<A HREF="./com/google/common/collect/HashMultimap.html" title="type parameter in HashMultimap">V</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>Implementation of <A HREF="./com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A> using hash tables.<DT><A HREF="./com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect"><B>HashMultiset</B></A>&lt;<A HREF="./com/google/common/collect/HashMultiset.html" title="type parameter in HashMultiset">E</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>Multiset implementation backed by a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util"><CODE>HashMap</CODE></A>.<DT><A HREF="./com/google/common/collect/AbstractIterator.html#hasNext()"><B>hasNext()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/AbstractIterator.html" title="class in com.google.common.collect">AbstractIterator</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingIterator.html#hasNext()"><B>hasNext()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingIterator.html" title="class in com.google.common.collect">ForwardingIterator</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingListIterator.html#hasPrevious()"><B>hasPrevious()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingListIterator.html" title="class in com.google.common.collect">ForwardingListIterator</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingSortedMap.html#headMap(K)"><B>headMap(K)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingSortedMap.html" title="class in com.google.common.collect">ForwardingSortedMap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.html#headMap(K)"><B>headMap(K)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>
-<DD>This method returns a <code>ImmutableSortedMap</code>, consisting of the entries
- whose keys are less than <code>toKey</code>.
-<DT><A HREF="./com/google/common/collect/ForwardingSortedSet.html#headSet(E)"><B>headSet(E)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingSortedSet.html" title="class in com.google.common.collect">ForwardingSortedSet</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableSortedSet.html#headSet(E)"><B>headSet(E)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>
-<DD>
-</DL>
-<HR>
-<A NAME="_I_"><!-- --></A><H2>
-<B>I</B></H2>
-<DL>
-<DT><A HREF="./com/google/common/base/Functions.html#identity()"><B>identity()</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Functions.html" title="class in com.google.common.base">Functions</A>
-<DD>Returns the identity function.
-<DT><A HREF="./com/google/common/util/concurrent/Futures.html#immediateCheckedFuture(T)"><B>immediateCheckedFuture(T)</B></A> - 
-Static method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/Futures.html" title="class in com.google.common.util.concurrent">Futures</A>
-<DD>Creates a <code>CheckedFuture</code> which has its value set immediately upon
- construction.
-<DT><A HREF="./com/google/common/util/concurrent/Futures.html#immediateFailedCheckedFuture(E)"><B>immediateFailedCheckedFuture(E)</B></A> - 
-Static method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/Futures.html" title="class in com.google.common.util.concurrent">Futures</A>
-<DD>Creates a <code>CheckedFuture</code> which has an exception set immediately
- upon construction.
-<DT><A HREF="./com/google/common/util/concurrent/Futures.html#immediateFailedFuture(java.lang.Throwable)"><B>immediateFailedFuture(Throwable)</B></A> - 
-Static method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/Futures.html" title="class in com.google.common.util.concurrent">Futures</A>
-<DD>Creates a <code>ListenableFuture</code> which has an exception set immediately
- upon construction.
-<DT><A HREF="./com/google/common/util/concurrent/Futures.html#immediateFuture(T)"><B>immediateFuture(T)</B></A> - 
-Static method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/Futures.html" title="class in com.google.common.util.concurrent">Futures</A>
-<DD>Creates a <code>ListenableFuture</code> which has its value set immediately upon
- construction.
-<DT><A HREF="./com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect"><B>ImmutableBiMap</B></A>&lt;<A HREF="./com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>,<A HREF="./com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>An immutable <A HREF="./com/google/common/collect/BiMap.html" title="interface in com.google.common.collect"><CODE>BiMap</CODE></A> with reliable user-specified iteration order.<DT><A HREF="./com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect"><B>ImmutableBiMap.Builder</B></A>&lt;<A HREF="./com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">K</A>,<A HREF="./com/google/common/collect/ImmutableBiMap.Builder.html" title="type parameter in ImmutableBiMap.Builder">V</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A builder for creating immutable bimap instances, especially <code>public
- static final</code> bimaps ("constant bimaps").<DT><A HREF="./com/google/common/collect/ImmutableBiMap.Builder.html#ImmutableBiMap.Builder()"><B>ImmutableBiMap.Builder()</B></A> - 
-Constructor for class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect">ImmutableBiMap.Builder</A>
-<DD>Creates a new builder.
-<DT><A HREF="./com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect"><B>ImmutableClassToInstanceMap</B></A>&lt;<A HREF="./com/google/common/collect/ImmutableClassToInstanceMap.html" title="type parameter in ImmutableClassToInstanceMap">B</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A class-to-instance map backed by an <A HREF="./com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect"><CODE>ImmutableMap</CODE></A>.<DT><A HREF="./com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect"><B>ImmutableClassToInstanceMap.Builder</B></A>&lt;<A HREF="./com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="type parameter in ImmutableClassToInstanceMap.Builder">B</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A builder for creating immutable class-to-instance maps.<DT><A HREF="./com/google/common/collect/ImmutableClassToInstanceMap.Builder.html#ImmutableClassToInstanceMap.Builder()"><B>ImmutableClassToInstanceMap.Builder()</B></A> - 
-Constructor for class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap.Builder</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect"><B>ImmutableCollection</B></A>&lt;<A HREF="./com/google/common/collect/ImmutableCollection.html" title="type parameter in ImmutableCollection">E</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>An immutable collection.<DT><A HREF="./com/google/common/collect/Sets.SetView.html#immutableCopy()"><B>immutableCopy()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/Sets.SetView.html" title="class in com.google.common.collect">Sets.SetView</A>
-<DD>Returns an immutable copy of the current contents of this set view.
-<DT><A HREF="./com/google/common/collect/Maps.html#immutableEntry(K, V)"><B>immutableEntry(K, V)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Maps.html" title="class in com.google.common.collect">Maps</A>
-<DD>Returns an immutable map entry with the specified key and value.
-<DT><A HREF="./com/google/common/collect/Multisets.html#immutableEntry(E, int)"><B>immutableEntry(E, int)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Multisets.html" title="class in com.google.common.collect">Multisets</A>
-<DD>Returns an immutable multiset entry with the specified element and count.
-<DT><A HREF="./com/google/common/collect/Sets.html#immutableEnumSet(E, E...)"><B>immutableEnumSet(E, E...)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Sets.html" title="class in com.google.common.collect">Sets</A>
-<DD>Returns an immutable set instance containing the given enum elements.
-<DT><A HREF="./com/google/common/collect/Sets.html#immutableEnumSet(java.lang.Iterable)"><B>immutableEnumSet(Iterable&lt;E&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Sets.html" title="class in com.google.common.collect">Sets</A>
-<DD>Returns an immutable set instance containing the given enum elements.
-<DT><A HREF="./com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect"><B>ImmutableList</B></A>&lt;<A HREF="./com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A high-performance, immutable, random-access <code>List</code> implementation.<DT><A HREF="./com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect"><B>ImmutableList.Builder</B></A>&lt;<A HREF="./com/google/common/collect/ImmutableList.Builder.html" title="type parameter in ImmutableList.Builder">E</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A builder for creating immutable list instances, especially
- <code>public static final</code> lists ("constant lists").<DT><A HREF="./com/google/common/collect/ImmutableList.Builder.html#ImmutableList.Builder()"><B>ImmutableList.Builder()</B></A> - 
-Constructor for class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect">ImmutableList.Builder</A>
-<DD>Creates a new builder.
-<DT><A HREF="./com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect"><B>ImmutableListMultimap</B></A>&lt;<A HREF="./com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">K</A>,<A HREF="./com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">V</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>An immutable <A HREF="./com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect"><CODE>ListMultimap</CODE></A> with reliable user-specified key and value
- iteration order.<DT><A HREF="./com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect"><B>ImmutableListMultimap.Builder</B></A>&lt;<A HREF="./com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">K</A>,<A HREF="./com/google/common/collect/ImmutableListMultimap.Builder.html" title="type parameter in ImmutableListMultimap.Builder">V</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A builder for creating immutable <code>ListMultimap</code> instances, especially
- <code>public static final</code> multimaps ("constant multimaps").<DT><A HREF="./com/google/common/collect/ImmutableListMultimap.Builder.html#ImmutableListMultimap.Builder()"><B>ImmutableListMultimap.Builder()</B></A> - 
-Constructor for class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder</A>
-<DD>Creates a new builder.
-<DT><A HREF="./com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect"><B>ImmutableMap</B></A>&lt;<A HREF="./com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">K</A>,<A HREF="./com/google/common/collect/ImmutableMap.html" title="type parameter in ImmutableMap">V</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>An immutable, hash-based <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A> with reliable user-specified iteration
- order.<DT><A HREF="./com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect"><B>ImmutableMap.Builder</B></A>&lt;<A HREF="./com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">K</A>,<A HREF="./com/google/common/collect/ImmutableMap.Builder.html" title="type parameter in ImmutableMap.Builder">V</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A builder for creating immutable map instances, especially <code>public
- static final</code> maps ("constant maps").<DT><A HREF="./com/google/common/collect/ImmutableMap.Builder.html#ImmutableMap.Builder()"><B>ImmutableMap.Builder()</B></A> - 
-Constructor for class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">ImmutableMap.Builder</A>
-<DD>Creates a new builder.
-<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect"><B>ImmutableMultimap</B></A>&lt;<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">K</A>,<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="type parameter in ImmutableMultimap">V</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>An immutable <A HREF="./com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><CODE>Multimap</CODE></A>.<DT><A HREF="./com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect"><B>ImmutableMultimap.Builder</B></A>&lt;<A HREF="./com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">K</A>,<A HREF="./com/google/common/collect/ImmutableMultimap.Builder.html" title="type parameter in ImmutableMultimap.Builder">V</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A builder for creating immutable multimap instances, especially
- <code>public static final</code> multimaps ("constant multimaps").<DT><A HREF="./com/google/common/collect/ImmutableMultimap.Builder.html#ImmutableMultimap.Builder()"><B>ImmutableMultimap.Builder()</B></A> - 
-Constructor for class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>
-<DD>Creates a new builder.
-<DT><A HREF="./com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect"><B>ImmutableMultiset</B></A>&lt;<A HREF="./com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>An immutable hash-based multiset.<DT><A HREF="./com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect"><B>ImmutableMultiset.Builder</B></A>&lt;<A HREF="./com/google/common/collect/ImmutableMultiset.Builder.html" title="type parameter in ImmutableMultiset.Builder">E</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A builder for creating immutable multiset instances, especially
- <code>public static final</code> multisets ("constant multisets").<DT><A HREF="./com/google/common/collect/ImmutableMultiset.Builder.html#ImmutableMultiset.Builder()"><B>ImmutableMultiset.Builder()</B></A> - 
-Constructor for class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>
-<DD>Creates a new builder.
-<DT><A HREF="./com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect"><B>ImmutableSet</B></A>&lt;<A HREF="./com/google/common/collect/ImmutableSet.html" title="type parameter in ImmutableSet">E</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A high-performance, immutable <code>Set</code> with reliable, user-specified
- iteration order.<DT><A HREF="./com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect"><B>ImmutableSet.Builder</B></A>&lt;<A HREF="./com/google/common/collect/ImmutableSet.Builder.html" title="type parameter in ImmutableSet.Builder">E</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A builder for creating immutable set instances, especially
- <code>public static final</code> sets ("constant sets").<DT><A HREF="./com/google/common/collect/ImmutableSet.Builder.html#ImmutableSet.Builder()"><B>ImmutableSet.Builder()</B></A> - 
-Constructor for class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect">ImmutableSet.Builder</A>
-<DD>Creates a new builder.
-<DT><A HREF="./com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect"><B>ImmutableSetMultimap</B></A>&lt;<A HREF="./com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">K</A>,<A HREF="./com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>An immutable <A HREF="./com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect"><CODE>SetMultimap</CODE></A> with reliable user-specified key and value
- iteration order.<DT><A HREF="./com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect"><B>ImmutableSetMultimap.Builder</B></A>&lt;<A HREF="./com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">K</A>,<A HREF="./com/google/common/collect/ImmutableSetMultimap.Builder.html" title="type parameter in ImmutableSetMultimap.Builder">V</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A builder for creating immutable <code>SetMultimap</code> instances, especially
- <code>public static final</code> multimaps ("constant multimaps").<DT><A HREF="./com/google/common/collect/ImmutableSetMultimap.Builder.html#ImmutableSetMultimap.Builder()"><B>ImmutableSetMultimap.Builder()</B></A> - 
-Constructor for class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder</A>
-<DD>Creates a new builder.
-<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect"><B>ImmutableSortedMap</B></A>&lt;<A HREF="./com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="./com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>An immutable <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util"><CODE>SortedMap</CODE></A>.<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect"><B>ImmutableSortedMap.Builder</B></A>&lt;<A HREF="./com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">K</A>,<A HREF="./com/google/common/collect/ImmutableSortedMap.Builder.html" title="type parameter in ImmutableSortedMap.Builder">V</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A builder for creating immutable sorted map instances, especially <code>public static final</code> maps ("constant maps").<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.Builder.html#ImmutableSortedMap.Builder(java.util.Comparator)"><B>ImmutableSortedMap.Builder(Comparator&lt;? super K&gt;)</B></A> - 
-Constructor for class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect">ImmutableSortedMap.Builder</A>
-<DD>Creates a new builder.
-<DT><A HREF="./com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect"><B>ImmutableSortedSet</B></A>&lt;<A HREF="./com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>An immutable <code>SortedSet</code> that stores its elements in a sorted array.<DT><A HREF="./com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect"><B>ImmutableSortedSet.Builder</B></A>&lt;<A HREF="./com/google/common/collect/ImmutableSortedSet.Builder.html" title="type parameter in ImmutableSortedSet.Builder">E</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A builder for creating immutable sorted set instances, especially
- <code>public static final</code> sets ("constant sets"), with a given
- comparator.<DT><A HREF="./com/google/common/collect/ImmutableSortedSet.Builder.html#ImmutableSortedSet.Builder(java.util.Comparator)"><B>ImmutableSortedSet.Builder(Comparator&lt;? super E&gt;)</B></A> - 
-Constructor for class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect">ImmutableSortedSet.Builder</A>
-<DD>Creates a new builder.
-<DT><A HREF="./com/google/common/base/Predicates.html#in(java.util.Collection)"><B>in(Collection&lt;? extends T&gt;)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Predicates.html" title="class in com.google.common.base">Predicates</A>
-<DD>Returns a predicate that evaluates to <code>true</code> if the object reference
- being tested is a member of the given collection.
-<DT><A HREF="./com/google/common/collect/Multimaps.html#index(java.lang.Iterable, com.google.common.base.Function)"><B>index(Iterable&lt;V&gt;, Function&lt;? super V, K&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Multimaps.html" title="class in com.google.common.collect">Multimaps</A>
-<DD>Creates an index <code>ImmutableMultimap</code> that contains the results of
- applying a specified function to each item in an <code>Iterable</code> of
- values.
-<DT><A HREF="./com/google/common/base/CharMatcher.html#indexIn(java.lang.CharSequence)"><B>indexIn(CharSequence)</B></A> - 
-Method in class com.google.common.base.<A HREF="./com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>
-<DD>Returns the index of the first matching character in a character sequence,
- or <code>-1</code> if no matching character is present.
-<DT><A HREF="./com/google/common/base/CharMatcher.html#indexIn(java.lang.CharSequence, int)"><B>indexIn(CharSequence, int)</B></A> - 
-Method in class com.google.common.base.<A HREF="./com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>
-<DD>Returns the index of the first matching character in a character sequence,
- starting from a given position, or <code>-1</code> if no character matches after
- that position.
-<DT><A HREF="./com/google/common/collect/ForwardingList.html#indexOf(java.lang.Object)"><B>indexOf(Object)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect">ForwardingList</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableList.html#indexOf(java.lang.Object)"><B>indexOf(Object)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/Iterables.html#indexOf(java.lang.Iterable, com.google.common.base.Predicate)"><B>indexOf(Iterable&lt;T&gt;, Predicate&lt;? super T&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
-<DD>Returns the index in <code>iterable</code> of the first element that satisfies
- the provided <code>predicate</code>, or <code>-1</code> if the Iterable has no such
- elements.
-<DT><A HREF="./com/google/common/collect/Iterators.html#indexOf(java.util.Iterator, com.google.common.base.Predicate)"><B>indexOf(Iterator&lt;T&gt;, Predicate&lt;? super T&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
-<DD>Returns the index in <code>iterator</code> of the first element that satisfies
- the provided <code>predicate</code>, or <code>-1</code> if the Iterator has no such
- elements.
-<DT><A HREF="./com/google/common/primitives/Booleans.html#indexOf(boolean[], boolean)"><B>indexOf(boolean[], boolean)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Booleans.html" title="class in com.google.common.primitives">Booleans</A>
-<DD>Returns the index of the first appearance of the value <code>target</code> in
- <code>array</code>.
-<DT><A HREF="./com/google/common/primitives/Booleans.html#indexOf(boolean[], boolean[])"><B>indexOf(boolean[], boolean[])</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Booleans.html" title="class in com.google.common.primitives">Booleans</A>
-<DD>Returns the start position of the first occurrence of the specified <code>target</code> within <code>array</code>, or <code>-1</code> if there is no such occurrence.
-<DT><A HREF="./com/google/common/primitives/Bytes.html#indexOf(byte[], byte)"><B>indexOf(byte[], byte)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Bytes.html" title="class in com.google.common.primitives">Bytes</A>
-<DD>Returns the index of the first appearance of the value <code>target</code> in
- <code>array</code>.
-<DT><A HREF="./com/google/common/primitives/Bytes.html#indexOf(byte[], byte[])"><B>indexOf(byte[], byte[])</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Bytes.html" title="class in com.google.common.primitives">Bytes</A>
-<DD>Returns the start position of the first occurrence of the specified <code>target</code> within <code>array</code>, or <code>-1</code> if there is no such occurrence.
-<DT><A HREF="./com/google/common/primitives/Chars.html#indexOf(char[], char)"><B>indexOf(char[], char)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Chars.html" title="class in com.google.common.primitives">Chars</A>
-<DD>Returns the index of the first appearance of the value <code>target</code> in
- <code>array</code>.
-<DT><A HREF="./com/google/common/primitives/Chars.html#indexOf(char[], char[])"><B>indexOf(char[], char[])</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Chars.html" title="class in com.google.common.primitives">Chars</A>
-<DD>Returns the start position of the first occurrence of the specified <code>target</code> within <code>array</code>, or <code>-1</code> if there is no such occurrence.
-<DT><A HREF="./com/google/common/primitives/Doubles.html#indexOf(double[], double)"><B>indexOf(double[], double)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Doubles.html" title="class in com.google.common.primitives">Doubles</A>
-<DD>Returns the index of the first appearance of the value <code>target</code> in
- <code>array</code>.
-<DT><A HREF="./com/google/common/primitives/Doubles.html#indexOf(double[], double[])"><B>indexOf(double[], double[])</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Doubles.html" title="class in com.google.common.primitives">Doubles</A>
-<DD>Returns the start position of the first occurrence of the specified <code>target</code> within <code>array</code>, or <code>-1</code> if there is no such occurrence.
-<DT><A HREF="./com/google/common/primitives/Floats.html#indexOf(float[], float)"><B>indexOf(float[], float)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Floats.html" title="class in com.google.common.primitives">Floats</A>
-<DD>Returns the index of the first appearance of the value <code>target</code> in
- <code>array</code>.
-<DT><A HREF="./com/google/common/primitives/Floats.html#indexOf(float[], float[])"><B>indexOf(float[], float[])</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Floats.html" title="class in com.google.common.primitives">Floats</A>
-<DD>Returns the start position of the first occurrence of the specified <code>target</code> within <code>array</code>, or <code>-1</code> if there is no such occurrence.
-<DT><A HREF="./com/google/common/primitives/Ints.html#indexOf(int[], int)"><B>indexOf(int[], int)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Ints.html" title="class in com.google.common.primitives">Ints</A>
-<DD>Returns the index of the first appearance of the value <code>target</code> in
- <code>array</code>.
-<DT><A HREF="./com/google/common/primitives/Ints.html#indexOf(int[], int[])"><B>indexOf(int[], int[])</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Ints.html" title="class in com.google.common.primitives">Ints</A>
-<DD>Returns the start position of the first occurrence of the specified <code>target</code> within <code>array</code>, or <code>-1</code> if there is no such occurrence.
-<DT><A HREF="./com/google/common/primitives/Longs.html#indexOf(long[], long)"><B>indexOf(long[], long)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Longs.html" title="class in com.google.common.primitives">Longs</A>
-<DD>Returns the index of the first appearance of the value <code>target</code> in
- <code>array</code>.
-<DT><A HREF="./com/google/common/primitives/Longs.html#indexOf(long[], long[])"><B>indexOf(long[], long[])</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Longs.html" title="class in com.google.common.primitives">Longs</A>
-<DD>Returns the start position of the first occurrence of the specified <code>target</code> within <code>array</code>, or <code>-1</code> if there is no such occurrence.
-<DT><A HREF="./com/google/common/primitives/Shorts.html#indexOf(short[], short)"><B>indexOf(short[], short)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Shorts.html" title="class in com.google.common.primitives">Shorts</A>
-<DD>Returns the index of the first appearance of the value <code>target</code> in
- <code>array</code>.
-<DT><A HREF="./com/google/common/primitives/Shorts.html#indexOf(short[], short[])"><B>indexOf(short[], short[])</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Shorts.html" title="class in com.google.common.primitives">Shorts</A>
-<DD>Returns the start position of the first occurrence of the specified <code>target</code> within <code>array</code>, or <code>-1</code> if there is no such occurrence.
-<DT><A HREF="./com/google/common/collect/MapMaker.html#initialCapacity(int)"><B>initialCapacity(int)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A>
-<DD>Sets a custom initial capacity (defaults to 16).
-<DT><A HREF="./com/google/common/io/InputSupplier.html" title="interface in com.google.common.io"><B>InputSupplier</B></A>&lt;<A HREF="./com/google/common/io/InputSupplier.html" title="type parameter in InputSupplier">T</A>&gt; - Interface in <A HREF="./com/google/common/io/package-summary.html">com.google.common.io</A><DD>A factory for readable streams of bytes or characters.<DT><A HREF="./com/google/common/base/CharMatcher.html#inRange(char, char)"><B>inRange(char, char)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>
-<DD>Returns a <code>char</code> matcher that matches any character in a given range
- (both endpoints are inclusive).
-<DT><A HREF="./com/google/common/base/Predicates.html#instanceOf(java.lang.Class)"><B>instanceOf(Class&lt;?&gt;)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Predicates.html" title="class in com.google.common.base">Predicates</A>
-<DD>Returns a predicate that evaluates to <code>true</code> if the object being
- tested is an instance of the given class.
-<DT><A HREF="./com/google/common/collect/Multisets.html#intersection(com.google.common.collect.Multiset, com.google.common.collect.Multiset)"><B>intersection(Multiset&lt;E&gt;, Multiset&lt;?&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Multisets.html" title="class in com.google.common.collect">Multisets</A>
-<DD>Returns an unmodifiable <b>view</b> of the intersection of two multisets.
-<DT><A HREF="./com/google/common/collect/Sets.html#intersection(java.util.Set, java.util.Set)"><B>intersection(Set&lt;E&gt;, Set&lt;?&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Sets.html" title="class in com.google.common.collect">Sets</A>
-<DD>Returns an unmodifiable <b>view</b> of the intersection of two sets.
-<DT><A HREF="./com/google/common/primitives/Ints.html" title="class in com.google.common.primitives"><B>Ints</B></A> - Class in <A HREF="./com/google/common/primitives/package-summary.html">com.google.common.primitives</A><DD>Static utility methods pertaining to <code>int</code> primitives, that are not
- already found in either <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang"><CODE>Integer</CODE></A> or <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true" title="class or interface in java.util"><CODE>Arrays</CODE></A>.<DT><A HREF="./com/google/common/collect/BiMap.html#inverse()"><B>inverse()</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>
-<DD>Returns the inverse view of this bimap, which maps each of this bimap's
- values to its associated key.
-<DT><A HREF="./com/google/common/collect/ImmutableBiMap.html#inverse()"><B>inverse()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>
-<DD>Returns the inverse view of this bimap, which maps each of this bimap's
- values to its associated key.
-<DT><A HREF="./com/google/common/collect/Multimaps.html#invertFrom(com.google.common.collect.Multimap, M)"><B>invertFrom(Multimap&lt;? extends V, ? extends K&gt;, M)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Multimaps.html" title="class in com.google.common.collect">Multimaps</A>
-<DD>Copies each key-value mapping in <code>source</code> into <code>dest</code>, with
- its key and value reversed.
-<DT><A HREF="./com/google/common/base/CharMatcher.html#INVISIBLE"><B>INVISIBLE</B></A> - 
-Static variable in class com.google.common.base.<A HREF="./com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>
-<DD>Determines whether a character is invisible; that is, if its Unicode
- category is any of SPACE_SEPARATOR, LINE_SEPARATOR,
- PARAGRAPH_SEPARATOR, CONTROL, FORMAT, SURROGATE, and PRIVATE_USE according
- to ICU4J.
-<DT><A HREF="./com/google/common/base/CharMatcher.html#is(char)"><B>is(char)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>
-<DD>Returns a <code>char</code> matcher that matches only one specified character.
-<DT><A HREF="./com/google/common/util/concurrent/AbstractCheckedFuture.html#isCancelled()"><B>isCancelled()</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractCheckedFuture.html" title="class in com.google.common.util.concurrent">AbstractCheckedFuture</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/AbstractFuture.html#isCancelled()"><B>isCancelled()</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractFuture.html" title="class in com.google.common.util.concurrent">AbstractFuture</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/ForwardingFuture.html#isCancelled()"><B>isCancelled()</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/ForwardingFuture.html" title="class in com.google.common.util.concurrent">ForwardingFuture</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/AbstractCheckedFuture.html#isDone()"><B>isDone()</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractCheckedFuture.html" title="class in com.google.common.util.concurrent">AbstractCheckedFuture</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/AbstractFuture.html#isDone()"><B>isDone()</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractFuture.html" title="class in com.google.common.util.concurrent">AbstractFuture</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/ForwardingFuture.html#isDone()"><B>isDone()</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/ForwardingFuture.html" title="class in com.google.common.util.concurrent">ForwardingFuture</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingCollection.html#isEmpty()"><B>isEmpty()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingMap.html#isEmpty()"><B>isEmpty()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingMultimap.html#isEmpty()"><B>isEmpty()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect">ForwardingMultimap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableBiMap.html#isEmpty()"><B>isEmpty()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableCollection.html#isEmpty()"><B>isEmpty()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableMap.html#isEmpty()"><B>isEmpty()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html#isEmpty()"><B>isEmpty()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/Iterables.html#isEmpty(java.lang.Iterable)"><B>isEmpty(Iterable&lt;T&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
-<DD>Determines if the given iterable contains no elements.
-<DT><A HREF="./com/google/common/collect/LinkedListMultimap.html#isEmpty()"><B>isEmpty()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/Multimap.html#isEmpty()"><B>isEmpty()</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>
-<DD>Returns <code>true</code> if the multimap contains no key-value pairs.
-<DT><A HREF="./com/google/common/base/CharMatcher.html#isNot(char)"><B>isNot(char)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>
-<DD>Returns a <code>char</code> matcher that matches any character except the one
- specified.
-<DT><A HREF="./com/google/common/base/Predicates.html#isNull()"><B>isNull()</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Predicates.html" title="class in com.google.common.base">Predicates</A>
-<DD>Returns a predicate that evaluates to <code>true</code> if the object reference
- being tested is null.
-<DT><A HREF="./com/google/common/base/Charsets.html#ISO_8859_1"><B>ISO_8859_1</B></A> - 
-Static variable in class com.google.common.base.<A HREF="./com/google/common/base/Charsets.html" title="class in com.google.common.base">Charsets</A>
-<DD>ISO-8859-1.
-<DT><A HREF="./com/google/common/collect/Ordering.html#isOrdered(java.lang.Iterable)"><B>isOrdered(Iterable&lt;? extends T&gt;)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>
-<DD>Returns <code>true</code> if each element in <code>iterable</code> after the first is
- greater than or equal to the element that preceded it, according to this
- ordering.
-<DT><A HREF="./com/google/common/base/Service.html#isRunning()"><B>isRunning()</B></A> - 
-Method in interface com.google.common.base.<A HREF="./com/google/common/base/Service.html" title="interface in com.google.common.base">Service</A>
-<DD>Returns <code>true</code> if this service is <A HREF="./com/google/common/base/Service.State.html#RUNNING"><CODE>running</CODE></A>.
-<DT><A HREF="./com/google/common/util/concurrent/AbstractExecutionThreadService.html#isRunning()"><B>isRunning()</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractExecutionThreadService.html" title="class in com.google.common.util.concurrent">AbstractExecutionThreadService</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/AbstractIdleService.html#isRunning()"><B>isRunning()</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractIdleService.html" title="class in com.google.common.util.concurrent">AbstractIdleService</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/AbstractService.html#isRunning()"><B>isRunning()</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractService.html" title="class in com.google.common.util.concurrent">AbstractService</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/ForwardingService.html#isRunning()"><B>isRunning()</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/ForwardingService.html" title="class in com.google.common.util.concurrent">ForwardingService</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/Ordering.html#isStrictlyOrdered(java.lang.Iterable)"><B>isStrictlyOrdered(Iterable&lt;? extends T&gt;)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>
-<DD>Returns <code>true</code> if each element in <code>iterable</code> after the first is
- <i>strictly</i> greater than the element that preceded it, according to
- this ordering.
-<DT><A HREF="./com/google/common/primitives/Primitives.html#isWrapperType(java.lang.Class)"><B>isWrapperType(Class&lt;?&gt;)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Primitives.html" title="class in com.google.common.primitives">Primitives</A>
-<DD>Returns <code>true</code> if <code>type</code> is one of the nine
- primitive-wrapper types, such as <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang"><CODE>Integer</CODE></A>.
-<DT><A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect"><B>Iterables</B></A> - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>This class contains static utility methods that operate on or return objects
- of type <code>Iterable</code>.<DT><A HREF="./com/google/common/collect/ForwardingCollection.html#iterator()"><B>iterator()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableCollection.html#iterator()"><B>iterator()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>
-<DD>Returns an unmodifiable iterator across the elements in this collection.
-<DT><A HREF="./com/google/common/collect/ImmutableList.html#iterator()"><B>iterator()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableMultiset.html#iterator()"><B>iterator()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableSet.html#iterator()"><B>iterator()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/Multiset.html#iterator()"><B>iterator()</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>
-<DD>
-<DT><A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect"><B>Iterators</B></A> - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>This class contains static utility methods that operate on or return objects
- of type <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util"><CODE>Iterator</CODE></A>.</DL>
-<HR>
-<A NAME="_J_"><!-- --></A><H2>
-<B>J</B></H2>
-<DL>
-<DT><A HREF="./com/google/common/base/CharMatcher.html#JAVA_DIGIT"><B>JAVA_DIGIT</B></A> - 
-Static variable in class com.google.common.base.<A HREF="./com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>
-<DD>Determines whether a character is a digit according to <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Character.html?is-external=true#isDigit(char)" title="class or interface in java.lang"><CODE>Java's definition</CODE></A>.
-<DT><A HREF="./com/google/common/base/CharMatcher.html#JAVA_ISO_CONTROL"><B>JAVA_ISO_CONTROL</B></A> - 
-Static variable in class com.google.common.base.<A HREF="./com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>
-<DD>Determines whether a character is an ISO control character according to
- <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Character.html?is-external=true#isISOControl(char)" title="class or interface in java.lang"><CODE>Character.isISOControl(char)</CODE></A>.
-<DT><A HREF="./com/google/common/base/CharMatcher.html#JAVA_LETTER"><B>JAVA_LETTER</B></A> - 
-Static variable in class com.google.common.base.<A HREF="./com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>
-<DD>Determines whether a character is a letter according to <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Character.html?is-external=true#isLetter(char)" title="class or interface in java.lang"><CODE>Java's definition</CODE></A>.
-<DT><A HREF="./com/google/common/base/CharMatcher.html#JAVA_LETTER_OR_DIGIT"><B>JAVA_LETTER_OR_DIGIT</B></A> - 
-Static variable in class com.google.common.base.<A HREF="./com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>
-<DD>Determines whether a character is a letter or digit according to <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Character.html?is-external=true#isLetterOrDigit(char)" title="class or interface in java.lang"><CODE>Java's definition</CODE></A>.
-<DT><A HREF="./com/google/common/base/CharMatcher.html#JAVA_LOWER_CASE"><B>JAVA_LOWER_CASE</B></A> - 
-Static variable in class com.google.common.base.<A HREF="./com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>
-<DD>Determines whether a character is lower case according to <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Character.html?is-external=true#isLowerCase(char)" title="class or interface in java.lang"><CODE>Java's definition</CODE></A>.
-<DT><A HREF="./com/google/common/base/CharMatcher.html#JAVA_UPPER_CASE"><B>JAVA_UPPER_CASE</B></A> - 
-Static variable in class com.google.common.base.<A HREF="./com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>
-<DD>Determines whether a character is upper case according to <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Character.html?is-external=true#isUpperCase(char)" title="class or interface in java.lang"><CODE>Java's definition</CODE></A>.
-<DT><A HREF="./com/google/common/base/CharMatcher.html#JAVA_WHITESPACE"><B>JAVA_WHITESPACE</B></A> - 
-Static variable in class com.google.common.base.<A HREF="./com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>
-<DD>Determines whether a character is whitespace according to <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Character.html?is-external=true#isWhitespace(char)" title="class or interface in java.lang"><CODE>Java's definition</CODE></A>; it is usually preferable
- to use <A HREF="./com/google/common/base/CharMatcher.html#WHITESPACE"><CODE>CharMatcher.WHITESPACE</CODE></A>.
-<DT><A HREF="./com/google/common/base/Joiner.html#join(java.lang.Iterable)"><B>join(Iterable&lt;?&gt;)</B></A> - 
-Method in class com.google.common.base.<A HREF="./com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A>
-<DD>Returns a string containing the string representation of each of <code>parts</code>, using the previously configured separator between each.
-<DT><A HREF="./com/google/common/base/Joiner.html#join(java.lang.Object[])"><B>join(Object[])</B></A> - 
-Method in class com.google.common.base.<A HREF="./com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A>
-<DD>Returns a string containing the string representation of each of <code>parts</code>, using the previously configured separator between each.
-<DT><A HREF="./com/google/common/base/Joiner.html#join(java.lang.Object, java.lang.Object, java.lang.Object...)"><B>join(Object, Object, Object...)</B></A> - 
-Method in class com.google.common.base.<A HREF="./com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A>
-<DD>Returns a string containing the string representation of each argument,
- using the previously configured separator between each.
-<DT><A HREF="./com/google/common/base/Joiner.MapJoiner.html#join(java.util.Map)"><B>join(Map&lt;?, ?&gt;)</B></A> - 
-Method in class com.google.common.base.<A HREF="./com/google/common/base/Joiner.MapJoiner.html" title="class in com.google.common.base">Joiner.MapJoiner</A>
-<DD>Returns a string containing the string representation of each entry of
- <code>map</code>, using the previously configured separator and key-value
- separator.
-<DT><A HREF="./com/google/common/io/ByteStreams.html#join(java.lang.Iterable)"><B>join(Iterable&lt;? extends InputSupplier&lt;? extends InputStream&gt;&gt;)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/ByteStreams.html" title="class in com.google.common.io">ByteStreams</A>
-<DD>Joins multiple <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io"><CODE>InputStream</CODE></A> suppliers into a single supplier.
-<DT><A HREF="./com/google/common/io/ByteStreams.html#join(com.google.common.io.InputSupplier...)"><B>join(InputSupplier&lt;? extends InputStream&gt;...)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/ByteStreams.html" title="class in com.google.common.io">ByteStreams</A>
-<DD>Varargs form of <A HREF="./com/google/common/io/ByteStreams.html#join(java.lang.Iterable)"><CODE>ByteStreams.join(Iterable)</CODE></A>.
-<DT><A HREF="./com/google/common/io/CharStreams.html#join(java.lang.Iterable)"><B>join(Iterable&lt;? extends InputSupplier&lt;? extends Reader&gt;&gt;)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/CharStreams.html" title="class in com.google.common.io">CharStreams</A>
-<DD>Joins multiple <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Reader.html?is-external=true" title="class or interface in java.io"><CODE>Reader</CODE></A> suppliers into a single supplier.
-<DT><A HREF="./com/google/common/io/CharStreams.html#join(com.google.common.io.InputSupplier...)"><B>join(InputSupplier&lt;? extends Reader&gt;...)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/CharStreams.html" title="class in com.google.common.io">CharStreams</A>
-<DD>Varargs form of <A HREF="./com/google/common/io/CharStreams.html#join(java.lang.Iterable)"><CODE>CharStreams.join(Iterable)</CODE></A>.
-<DT><A HREF="./com/google/common/primitives/Booleans.html#join(java.lang.String, boolean...)"><B>join(String, boolean...)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Booleans.html" title="class in com.google.common.primitives">Booleans</A>
-<DD>Returns a string containing the supplied <code>boolean</code> values separated
- by <code>separator</code>.
-<DT><A HREF="./com/google/common/primitives/Chars.html#join(java.lang.String, char...)"><B>join(String, char...)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Chars.html" title="class in com.google.common.primitives">Chars</A>
-<DD>Returns a string containing the supplied <code>char</code> values separated
- by <code>separator</code>.
-<DT><A HREF="./com/google/common/primitives/Doubles.html#join(java.lang.String, double...)"><B>join(String, double...)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Doubles.html" title="class in com.google.common.primitives">Doubles</A>
-<DD>Returns a string containing the supplied <code>double</code> values, converted
- to strings as specified by <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Double.html?is-external=true#toString(double)" title="class or interface in java.lang"><CODE>Double.toString(double)</CODE></A>, and separated
- by <code>separator</code>.
-<DT><A HREF="./com/google/common/primitives/Floats.html#join(java.lang.String, float...)"><B>join(String, float...)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Floats.html" title="class in com.google.common.primitives">Floats</A>
-<DD>Returns a string containing the supplied <code>float</code> values, converted
- to strings as specified by <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Float.html?is-external=true#toString(float)" title="class or interface in java.lang"><CODE>Float.toString(float)</CODE></A>, and separated by
- <code>separator</code>.
-<DT><A HREF="./com/google/common/primitives/Ints.html#join(java.lang.String, int...)"><B>join(String, int...)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Ints.html" title="class in com.google.common.primitives">Ints</A>
-<DD>Returns a string containing the supplied <code>int</code> values separated
- by <code>separator</code>.
-<DT><A HREF="./com/google/common/primitives/Longs.html#join(java.lang.String, long...)"><B>join(String, long...)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Longs.html" title="class in com.google.common.primitives">Longs</A>
-<DD>Returns a string containing the supplied <code>long</code> values separated
- by <code>separator</code>.
-<DT><A HREF="./com/google/common/primitives/Shorts.html#join(java.lang.String, short...)"><B>join(String, short...)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Shorts.html" title="class in com.google.common.primitives">Shorts</A>
-<DD>Returns a string containing the supplied <code>short</code> values separated
- by <code>separator</code>.
-<DT><A HREF="./com/google/common/primitives/SignedBytes.html#join(java.lang.String, byte...)"><B>join(String, byte...)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/SignedBytes.html" title="class in com.google.common.primitives">SignedBytes</A>
-<DD>Returns a string containing the supplied <code>byte</code> values separated
- by <code>separator</code>.
-<DT><A HREF="./com/google/common/primitives/UnsignedBytes.html#join(java.lang.String, byte...)"><B>join(String, byte...)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/UnsignedBytes.html" title="class in com.google.common.primitives">UnsignedBytes</A>
-<DD>Returns a string containing the supplied <code>byte</code> values separated by
- <code>separator</code>.
-<DT><A HREF="./com/google/common/base/Joiner.html" title="class in com.google.common.base"><B>Joiner</B></A> - Class in <A HREF="./com/google/common/base/package-summary.html">com.google.common.base</A><DD>An object which joins pieces of text (specified as an array, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang"><CODE>Iterable</CODE></A>, varargs or even a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A>) with a separator.<DT><A HREF="./com/google/common/base/Joiner.MapJoiner.html" title="class in com.google.common.base"><B>Joiner.MapJoiner</B></A> - Class in <A HREF="./com/google/common/base/package-summary.html">com.google.common.base</A><DD>An object that joins map entries in the same manner as <code>Joiner</code> joins
- iterables and arrays.</DL>
-<HR>
-<A NAME="_K_"><!-- --></A><H2>
-<B>K</B></H2>
-<DL>
-<DT><A HREF="./com/google/common/collect/TreeMultimap.html#keyComparator()"><B>keyComparator()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">TreeMultimap</A>
-<DD>Returns the comparator that orders the multimap keys.
-<DT><A HREF="./com/google/common/collect/ForwardingMultimap.html#keys()"><B>keys()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect">ForwardingMultimap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html#keys()"><B>keys()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
-<DD>Returns a collection, which may contain duplicates, of all keys.
-<DT><A HREF="./com/google/common/collect/LinkedListMultimap.html#keys()"><B>keys()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/Multimap.html#keys()"><B>keys()</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>
-<DD>Returns a collection, which may contain duplicates, of all keys.
-<DT><A HREF="./com/google/common/collect/ForwardingMap.html#keySet()"><B>keySet()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingMultimap.html#keySet()"><B>keySet()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect">ForwardingMultimap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableBiMap.html#keySet()"><B>keySet()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableMap.html#keySet()"><B>keySet()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>
-<DD>Returns an immutable set of the keys in this map.
-<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html#keySet()"><B>keySet()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
-<DD>Returns an immutable set of the distinct keys in this multimap.
-<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.html#keySet()"><B>keySet()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>
-<DD>Returns an immutable sorted set of the keys in this map.
-<DT><A HREF="./com/google/common/collect/LinkedListMultimap.html#keySet()"><B>keySet()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/Multimap.html#keySet()"><B>keySet()</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>
-<DD>Returns the set of all keys, each appearing once in the returned set.
-<DT><A HREF="./com/google/common/collect/TreeMultimap.html#keySet()"><B>keySet()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">TreeMultimap</A>
-<DD>Returns the set of all keys, each appearing once in the returned set.
-<DT><A HREF="./com/google/common/collect/EnumBiMap.html#keyType()"><B>keyType()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect">EnumBiMap</A>
-<DD>Returns the associated key type.
-<DT><A HREF="./com/google/common/collect/EnumHashBiMap.html#keyType()"><B>keyType()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect">EnumHashBiMap</A>
-<DD>Returns the associated key type.
-</DL>
-<HR>
-<A NAME="_L_"><!-- --></A><H2>
-<B>L</B></H2>
-<DL>
-<DT><A HREF="./com/google/common/collect/ForwardingSortedSet.html#last()"><B>last()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingSortedSet.html" title="class in com.google.common.collect">ForwardingSortedSet</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/base/CharMatcher.html#lastIndexIn(java.lang.CharSequence)"><B>lastIndexIn(CharSequence)</B></A> - 
-Method in class com.google.common.base.<A HREF="./com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>
-<DD>Returns the index of the last matching character in a character sequence,
- or <code>-1</code> if no matching character is present.
-<DT><A HREF="./com/google/common/collect/ForwardingList.html#lastIndexOf(java.lang.Object)"><B>lastIndexOf(Object)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect">ForwardingList</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableList.html#lastIndexOf(java.lang.Object)"><B>lastIndexOf(Object)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/primitives/Booleans.html#lastIndexOf(boolean[], boolean)"><B>lastIndexOf(boolean[], boolean)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Booleans.html" title="class in com.google.common.primitives">Booleans</A>
-<DD>Returns the index of the last appearance of the value <code>target</code> in
- <code>array</code>.
-<DT><A HREF="./com/google/common/primitives/Bytes.html#lastIndexOf(byte[], byte)"><B>lastIndexOf(byte[], byte)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Bytes.html" title="class in com.google.common.primitives">Bytes</A>
-<DD>Returns the index of the last appearance of the value <code>target</code> in
- <code>array</code>.
-<DT><A HREF="./com/google/common/primitives/Chars.html#lastIndexOf(char[], char)"><B>lastIndexOf(char[], char)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Chars.html" title="class in com.google.common.primitives">Chars</A>
-<DD>Returns the index of the last appearance of the value <code>target</code> in
- <code>array</code>.
-<DT><A HREF="./com/google/common/primitives/Doubles.html#lastIndexOf(double[], double)"><B>lastIndexOf(double[], double)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Doubles.html" title="class in com.google.common.primitives">Doubles</A>
-<DD>Returns the index of the last appearance of the value <code>target</code> in
- <code>array</code>.
-<DT><A HREF="./com/google/common/primitives/Floats.html#lastIndexOf(float[], float)"><B>lastIndexOf(float[], float)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Floats.html" title="class in com.google.common.primitives">Floats</A>
-<DD>Returns the index of the last appearance of the value <code>target</code> in
- <code>array</code>.
-<DT><A HREF="./com/google/common/primitives/Ints.html#lastIndexOf(int[], int)"><B>lastIndexOf(int[], int)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Ints.html" title="class in com.google.common.primitives">Ints</A>
-<DD>Returns the index of the last appearance of the value <code>target</code> in
- <code>array</code>.
-<DT><A HREF="./com/google/common/primitives/Longs.html#lastIndexOf(long[], long)"><B>lastIndexOf(long[], long)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Longs.html" title="class in com.google.common.primitives">Longs</A>
-<DD>Returns the index of the last appearance of the value <code>target</code> in
- <code>array</code>.
-<DT><A HREF="./com/google/common/primitives/Shorts.html#lastIndexOf(short[], short)"><B>lastIndexOf(short[], short)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Shorts.html" title="class in com.google.common.primitives">Shorts</A>
-<DD>Returns the index of the last appearance of the value <code>target</code> in
- <code>array</code>.
-<DT><A HREF="./com/google/common/collect/ForwardingSortedMap.html#lastKey()"><B>lastKey()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingSortedMap.html" title="class in com.google.common.collect">ForwardingSortedMap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.html#lastKey()"><B>lastKey()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/MapDifference.ValueDifference.html#leftValue()"><B>leftValue()</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/MapDifference.ValueDifference.html" title="interface in com.google.common.collect">MapDifference.ValueDifference</A>
-<DD>Returns the value from the left map (possibly null).
-<DT><A HREF="./com/google/common/io/ByteStreams.html#length(com.google.common.io.InputSupplier)"><B>length(InputSupplier&lt;? extends InputStream&gt;)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/ByteStreams.html" title="class in com.google.common.io">ByteStreams</A>
-<DD>Returns the length of a supplied input stream, in bytes.
-<DT><A HREF="./com/google/common/collect/Ordering.html#lexicographical()"><B>lexicographical()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>
-<DD>Returns a new ordering which sorts iterables by comparing corresponding
- elements pairwise until a nonzero result is found; imposes "dictionary
- order".
-<DT><A HREF="./com/google/common/primitives/Booleans.html#lexicographicalComparator()"><B>lexicographicalComparator()</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Booleans.html" title="class in com.google.common.primitives">Booleans</A>
-<DD>Returns a comparator that compares two <code>boolean</code> arrays
- lexicographically.
-<DT><A HREF="./com/google/common/primitives/Chars.html#lexicographicalComparator()"><B>lexicographicalComparator()</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Chars.html" title="class in com.google.common.primitives">Chars</A>
-<DD>Returns a comparator that compares two <code>char</code> arrays
- lexicographically.
-<DT><A HREF="./com/google/common/primitives/Doubles.html#lexicographicalComparator()"><B>lexicographicalComparator()</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Doubles.html" title="class in com.google.common.primitives">Doubles</A>
-<DD>Returns a comparator that compares two <code>double</code> arrays
- lexicographically.
-<DT><A HREF="./com/google/common/primitives/Floats.html#lexicographicalComparator()"><B>lexicographicalComparator()</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Floats.html" title="class in com.google.common.primitives">Floats</A>
-<DD>Returns a comparator that compares two <code>float</code> arrays
- lexicographically.
-<DT><A HREF="./com/google/common/primitives/Ints.html#lexicographicalComparator()"><B>lexicographicalComparator()</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Ints.html" title="class in com.google.common.primitives">Ints</A>
-<DD>Returns a comparator that compares two <code>int</code> arrays
- lexicographically.
-<DT><A HREF="./com/google/common/primitives/Longs.html#lexicographicalComparator()"><B>lexicographicalComparator()</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Longs.html" title="class in com.google.common.primitives">Longs</A>
-<DD>Returns a comparator that compares two <code>long</code> arrays
- lexicographically.
-<DT><A HREF="./com/google/common/primitives/Shorts.html#lexicographicalComparator()"><B>lexicographicalComparator()</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Shorts.html" title="class in com.google.common.primitives">Shorts</A>
-<DD>Returns a comparator that compares two <code>short</code> arrays
- lexicographically.
-<DT><A HREF="./com/google/common/primitives/SignedBytes.html#lexicographicalComparator()"><B>lexicographicalComparator()</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/SignedBytes.html" title="class in com.google.common.primitives">SignedBytes</A>
-<DD>Returns a comparator that compares two <code>byte</code> arrays
- lexicographically.
-<DT><A HREF="./com/google/common/primitives/UnsignedBytes.html#lexicographicalComparator()"><B>lexicographicalComparator()</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/UnsignedBytes.html" title="class in com.google.common.primitives">UnsignedBytes</A>
-<DD>Returns a comparator that compares two <code>byte</code> arrays
- lexicographically.
-<DT><A HREF="./com/google/common/io/LimitInputStream.html" title="class in com.google.common.io"><B>LimitInputStream</B></A> - Class in <A HREF="./com/google/common/io/package-summary.html">com.google.common.io</A><DD>An InputStream that limits the number of bytes which can be read.<DT><A HREF="./com/google/common/io/LimitInputStream.html#LimitInputStream(java.io.InputStream, long)"><B>LimitInputStream(InputStream, long)</B></A> - 
-Constructor for class com.google.common.io.<A HREF="./com/google/common/io/LimitInputStream.html" title="class in com.google.common.io">LimitInputStream</A>
-<DD>Wraps another input stream, limiting the number of bytes which can be read.
-<DT><A HREF="./com/google/common/io/LineProcessor.html" title="interface in com.google.common.io"><B>LineProcessor</B></A>&lt;<A HREF="./com/google/common/io/LineProcessor.html" title="type parameter in LineProcessor">T</A>&gt; - Interface in <A HREF="./com/google/common/io/package-summary.html">com.google.common.io</A><DD>A callback to be used with the streaming <code>readLines</code> methods.<DT><A HREF="./com/google/common/io/LineReader.html" title="class in com.google.common.io"><B>LineReader</B></A> - Class in <A HREF="./com/google/common/io/package-summary.html">com.google.common.io</A><DD>A class for reading lines of text.<DT><A HREF="./com/google/common/io/LineReader.html#LineReader(java.lang.Readable)"><B>LineReader(Readable)</B></A> - 
-Constructor for class com.google.common.io.<A HREF="./com/google/common/io/LineReader.html" title="class in com.google.common.io">LineReader</A>
-<DD>Creates a new instance that will read lines from the given
- <code>Readable</code> object.
-<DT><A HREF="./com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect"><B>LinkedHashMultimap</B></A>&lt;<A HREF="./com/google/common/collect/LinkedHashMultimap.html" title="type parameter in LinkedHashMultimap">K</A>,<A HREF="./com/google/common/collect/LinkedHashMultimap.html" title="type parameter in LinkedHashMultimap">V</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>Implementation of <code>Multimap</code> that does not allow duplicate key-value
- entries and that returns collections whose iterators follow the ordering in
- which the data was added to the multimap.<DT><A HREF="./com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect"><B>LinkedHashMultiset</B></A>&lt;<A HREF="./com/google/common/collect/LinkedHashMultiset.html" title="type parameter in LinkedHashMultiset">E</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A <code>Multiset</code> implementation with predictable iteration order.<DT><A HREF="./com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect"><B>LinkedListMultimap</B></A>&lt;<A HREF="./com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">K</A>,<A HREF="./com/google/common/collect/LinkedListMultimap.html" title="type parameter in LinkedListMultimap">V</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>An implementation of <code>ListMultimap</code> that supports deterministic
- iteration order for both keys and values.<DT><A HREF="./com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent"><B>ListenableFuture</B></A>&lt;<A HREF="./com/google/common/util/concurrent/ListenableFuture.html" title="type parameter in ListenableFuture">V</A>&gt; - Interface in <A HREF="./com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A><DD>This interface defines a future that has listeners attached to it, which
- is useful for asynchronous workflows.<DT><A HREF="./com/google/common/util/concurrent/ListenableFutureTask.html" title="class in com.google.common.util.concurrent"><B>ListenableFutureTask</B></A>&lt;<A HREF="./com/google/common/util/concurrent/ListenableFutureTask.html" title="type parameter in ListenableFutureTask">V</A>&gt; - Class in <A HREF="./com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A><DD>A <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/FutureTask.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>FutureTask</CODE></A> that also implements the <A HREF="./com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent"><CODE>ListenableFuture</CODE></A>
- interface.<DT><A HREF="./com/google/common/util/concurrent/ListenableFutureTask.html#ListenableFutureTask(java.util.concurrent.Callable)"><B>ListenableFutureTask(Callable&lt;V&gt;)</B></A> - 
-Constructor for class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/ListenableFutureTask.html" title="class in com.google.common.util.concurrent">ListenableFutureTask</A>
-<DD>Creates a <code>ListenableFutureTask</code> that will upon running, execute the
- given <code>Callable</code>.
-<DT><A HREF="./com/google/common/util/concurrent/ListenableFutureTask.html#ListenableFutureTask(java.lang.Runnable, V)"><B>ListenableFutureTask(Runnable, V)</B></A> - 
-Constructor for class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/ListenableFutureTask.html" title="class in com.google.common.util.concurrent">ListenableFutureTask</A>
-<DD>Creates a <code>ListenableFutureTask</code> that will upon running, execute the
- given <code>Runnable</code>, and arrange that <code>get</code> will return the
- given result on successful completion.
-<DT><A HREF="./com/google/common/collect/ForwardingList.html#listIterator()"><B>listIterator()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect">ForwardingList</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingList.html#listIterator(int)"><B>listIterator(int)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect">ForwardingList</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect"><B>ListMultimap</B></A>&lt;<A HREF="./com/google/common/collect/ListMultimap.html" title="type parameter in ListMultimap">K</A>,<A HREF="./com/google/common/collect/ListMultimap.html" title="type parameter in ListMultimap">V</A>&gt; - Interface in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A <code>Multimap</code> that can hold duplicate key-value pairs and that maintains
- the insertion ordering of values for a given key.<DT><A HREF="./com/google/common/collect/Lists.html" title="class in com.google.common.collect"><B>Lists</B></A> - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>Static utility methods pertaining to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util"><CODE>List</CODE></A> instances.<DT><A HREF="./com/google/common/primitives/Longs.html" title="class in com.google.common.primitives"><B>Longs</B></A> - Class in <A HREF="./com/google/common/primitives/package-summary.html">com.google.common.primitives</A><DD>Static utility methods pertaining to <code>long</code> primitives, that are not
- already found in either <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang"><CODE>Long</CODE></A> or <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true" title="class or interface in java.util"><CODE>Arrays</CODE></A>.</DL>
-<HR>
-<A NAME="_M_"><!-- --></A><H2>
-<B>M</B></H2>
-<DL>
-<DT><A HREF="./com/google/common/util/concurrent/Futures.html#makeChecked(java.util.concurrent.Future, com.google.common.base.Function)"><B>makeChecked(Future&lt;T&gt;, Function&lt;Exception, E&gt;)</B></A> - 
-Static method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/Futures.html" title="class in com.google.common.util.concurrent">Futures</A>
-<DD>Creates a <A HREF="./com/google/common/util/concurrent/CheckedFuture.html" title="interface in com.google.common.util.concurrent"><CODE>CheckedFuture</CODE></A> out of a normal <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>Future</CODE></A> and a
- <A HREF="./com/google/common/base/Function.html" title="interface in com.google.common.base"><CODE>Function</CODE></A> that maps from <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang"><CODE>Exception</CODE></A> instances into the
- appropriate checked type.
-<DT><A HREF="./com/google/common/collect/MapMaker.html#makeComputingMap(com.google.common.base.Function)"><B>makeComputingMap(Function&lt;? super K, ? extends V&gt;)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A>
-<DD>Builds a map that supports atomic, on-demand computation of values.
-<DT><A HREF="./com/google/common/util/concurrent/Futures.html#makeListenable(java.util.concurrent.Future)"><B>makeListenable(Future&lt;T&gt;)</B></A> - 
-Static method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/Futures.html" title="class in com.google.common.util.concurrent">Futures</A>
-<DD>Creates a <A HREF="./com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent"><CODE>ListenableFuture</CODE></A> out of a normal <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>Future</CODE></A>.
-<DT><A HREF="./com/google/common/collect/MapMaker.html#makeMap()"><B>makeMap()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A>
-<DD>Builds the final map, without on-demand computation of values.
-<DT><A HREF="./com/google/common/util/concurrent/Futures.html#makeUninterruptible(java.util.concurrent.Future)"><B>makeUninterruptible(Future&lt;V&gt;)</B></A> - 
-Static method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/Futures.html" title="class in com.google.common.util.concurrent">Futures</A>
-<DD>Returns an uninterruptible view of a <code>Future</code>.
-<DT><A HREF="./com/google/common/io/Files.html#map(java.io.File)"><B>map(File)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/Files.html" title="class in com.google.common.io">Files</A>
-<DD>Fully maps a file read-only in to memory as per
- <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/channels/FileChannel.html?is-external=true#map(java.nio.channels.FileChannel.MapMode, long, long)" title="class or interface in java.nio.channels"><CODE>FileChannel.map(java.nio.channels.FileChannel.MapMode, long, long)</CODE></A>.
-<DT><A HREF="./com/google/common/io/Files.html#map(java.io.File, java.nio.channels.FileChannel.MapMode)"><B>map(File, FileChannel.MapMode)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/Files.html" title="class in com.google.common.io">Files</A>
-<DD>Fully maps a file in to memory as per
- <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/channels/FileChannel.html?is-external=true#map(java.nio.channels.FileChannel.MapMode, long, long)" title="class or interface in java.nio.channels"><CODE>FileChannel.map(java.nio.channels.FileChannel.MapMode, long, long)</CODE></A>
- using the requested <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/channels/FileChannel.MapMode.html?is-external=true" title="class or interface in java.nio.channels"><CODE>FileChannel.MapMode</CODE></A>.
-<DT><A HREF="./com/google/common/io/Files.html#map(java.io.File, java.nio.channels.FileChannel.MapMode, long)"><B>map(File, FileChannel.MapMode, long)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/Files.html" title="class in com.google.common.io">Files</A>
-<DD>Maps a file in to memory as per
- <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/channels/FileChannel.html?is-external=true#map(java.nio.channels.FileChannel.MapMode, long, long)" title="class or interface in java.nio.channels"><CODE>FileChannel.map(java.nio.channels.FileChannel.MapMode, long, long)</CODE></A>
- using the requested <A HREF="http://java.sun.com/javase/6/docs/api/java/nio/channels/FileChannel.MapMode.html?is-external=true" title="class or interface in java.nio.channels"><CODE>FileChannel.MapMode</CODE></A>.
-<DT><A HREF="./com/google/common/collect/MapDifference.html" title="interface in com.google.common.collect"><B>MapDifference</B></A>&lt;<A HREF="./com/google/common/collect/MapDifference.html" title="type parameter in MapDifference">K</A>,<A HREF="./com/google/common/collect/MapDifference.html" title="type parameter in MapDifference">V</A>&gt; - Interface in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>An object representing the differences between two maps.<DT><A HREF="./com/google/common/collect/MapDifference.ValueDifference.html" title="interface in com.google.common.collect"><B>MapDifference.ValueDifference</B></A>&lt;<A HREF="./com/google/common/collect/MapDifference.ValueDifference.html" title="type parameter in MapDifference.ValueDifference">V</A>&gt; - Interface in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A difference between the mappings from two maps with the same key.<DT><A HREF="./com/google/common/util/concurrent/AbstractCheckedFuture.html#mapException(java.lang.Exception)"><B>mapException(Exception)</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractCheckedFuture.html" title="class in com.google.common.util.concurrent">AbstractCheckedFuture</A>
-<DD>Translate from an <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang"><CODE>InterruptedException</CODE></A>,
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/CancellationException.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>CancellationException</CODE></A> or <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutionException.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ExecutionException</CODE></A> to an exception
- of type <code>E</code>.
-<DT><A HREF="./com/google/common/collect/MapMaker.html" title="class in com.google.common.collect"><B>MapMaker</B></A> - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ConcurrentMap</CODE></A> builder, providing any combination of these
- features: <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/SoftReference.html?is-external=true" title="class or interface in java.lang.ref">soft</A> or <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/WeakReference.html?is-external=true" title="class or interface in java.lang.ref">weak</A> keys, soft or weak values, timed expiration, and on-demand
- computation of values.<DT><A HREF="./com/google/common/collect/MapMaker.html#MapMaker()"><B>MapMaker()</B></A> - 
-Constructor for class com.google.common.collect.<A HREF="./com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A>
-<DD>Constructs a new <code>MapMaker</code> instance with default settings,
- including strong keys, strong values, and no automatic expiration.
-<DT><A HREF="./com/google/common/collect/Maps.html" title="class in com.google.common.collect"><B>Maps</B></A> - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>Static utility methods pertaining to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><CODE>Map</CODE></A> instances.<DT><A HREF="./com/google/common/io/CountingInputStream.html#mark(int)"><B>mark(int)</B></A> - 
-Method in class com.google.common.io.<A HREF="./com/google/common/io/CountingInputStream.html" title="class in com.google.common.io">CountingInputStream</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/io/LimitInputStream.html#mark(int)"><B>mark(int)</B></A> - 
-Method in class com.google.common.io.<A HREF="./com/google/common/io/LimitInputStream.html" title="class in com.google.common.io">LimitInputStream</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/base/CharMatcher.html#matches(char)"><B>matches(char)</B></A> - 
-Method in class com.google.common.base.<A HREF="./com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>
-<DD>Determines a true or false value for the given character.
-<DT><A HREF="./com/google/common/base/CharMatcher.html#matchesAllOf(java.lang.CharSequence)"><B>matchesAllOf(CharSequence)</B></A> - 
-Method in class com.google.common.base.<A HREF="./com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>
-<DD>Returns <code>true</code> if a character sequence contains only matching
- characters.
-<DT><A HREF="./com/google/common/base/CharMatcher.html#matchesNoneOf(java.lang.CharSequence)"><B>matchesNoneOf(CharSequence)</B></A> - 
-Method in class com.google.common.base.<A HREF="./com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>
-<DD>Returns <code>true</code> if a character sequence contains no matching
- characters.
-<DT><A HREF="./com/google/common/collect/Ordering.html#max(java.lang.Iterable)"><B>max(Iterable&lt;E&gt;)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>
-<DD>Returns the largest of the specified values according to this ordering.
-<DT><A HREF="./com/google/common/collect/Ordering.html#max(E, E, E, E...)"><B>max(E, E, E, E...)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>
-<DD>Returns the largest of the specified values according to this ordering.
-<DT><A HREF="./com/google/common/collect/Ordering.html#max(E, E)"><B>max(E, E)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>
-<DD>Returns the larger of the two values according to this ordering.
-<DT><A HREF="./com/google/common/primitives/Chars.html#max(char...)"><B>max(char...)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Chars.html" title="class in com.google.common.primitives">Chars</A>
-<DD>Returns the greatest value present in <code>array</code>.
-<DT><A HREF="./com/google/common/primitives/Doubles.html#max(double...)"><B>max(double...)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Doubles.html" title="class in com.google.common.primitives">Doubles</A>
-<DD>Returns the greatest value present in <code>array</code>, using the same rules
- of comparison as <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Math.html?is-external=true#max(double, double)" title="class or interface in java.lang"><CODE>Math.max(double, double)</CODE></A>.
-<DT><A HREF="./com/google/common/primitives/Floats.html#max(float...)"><B>max(float...)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Floats.html" title="class in com.google.common.primitives">Floats</A>
-<DD>Returns the greatest value present in <code>array</code>, using the same rules
- of comparison as <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Math.html?is-external=true#min(float, float)" title="class or interface in java.lang"><CODE>Math.min(float, float)</CODE></A>.
-<DT><A HREF="./com/google/common/primitives/Ints.html#max(int...)"><B>max(int...)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Ints.html" title="class in com.google.common.primitives">Ints</A>
-<DD>Returns the greatest value present in <code>array</code>.
-<DT><A HREF="./com/google/common/primitives/Longs.html#max(long...)"><B>max(long...)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Longs.html" title="class in com.google.common.primitives">Longs</A>
-<DD>Returns the greatest value present in <code>array</code>.
-<DT><A HREF="./com/google/common/primitives/Shorts.html#max(short...)"><B>max(short...)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Shorts.html" title="class in com.google.common.primitives">Shorts</A>
-<DD>Returns the greatest value present in <code>array</code>.
-<DT><A HREF="./com/google/common/primitives/SignedBytes.html#max(byte...)"><B>max(byte...)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/SignedBytes.html" title="class in com.google.common.primitives">SignedBytes</A>
-<DD>Returns the greatest value present in <code>array</code>.
-<DT><A HREF="./com/google/common/primitives/UnsignedBytes.html#max(byte...)"><B>max(byte...)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/UnsignedBytes.html" title="class in com.google.common.primitives">UnsignedBytes</A>
-<DD>Returns the greatest value present in <code>array</code>.
-<DT><A HREF="./com/google/common/base/Suppliers.html#memoize(com.google.common.base.Supplier)"><B>memoize(Supplier&lt;T&gt;)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Suppliers.html" title="class in com.google.common.base">Suppliers</A>
-<DD>Returns a supplier which caches the instance retrieved during the first
- call to <code>get()</code> and returns that value on subsequent calls to
- <code>get()</code>.
-<DT><A HREF="./com/google/common/base/Suppliers.html#memoizeWithExpiration(com.google.common.base.Supplier, long, java.util.concurrent.TimeUnit)"><B>memoizeWithExpiration(Supplier&lt;T&gt;, long, TimeUnit)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Suppliers.html" title="class in com.google.common.base">Suppliers</A>
-<DD>Returns a supplier that caches the instance supplied by the delegate and
- removes the cached value after the specified time has passed.
-<DT><A HREF="./com/google/common/collect/Ordering.html#min(java.lang.Iterable)"><B>min(Iterable&lt;E&gt;)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>
-<DD>Returns the smallest of the specified values according to this ordering.
-<DT><A HREF="./com/google/common/collect/Ordering.html#min(E, E, E, E...)"><B>min(E, E, E, E...)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>
-<DD>Returns the smallest of the specified values according to this ordering.
-<DT><A HREF="./com/google/common/collect/Ordering.html#min(E, E)"><B>min(E, E)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>
-<DD>Returns the smaller of the two values according to this ordering.
-<DT><A HREF="./com/google/common/primitives/Chars.html#min(char...)"><B>min(char...)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Chars.html" title="class in com.google.common.primitives">Chars</A>
-<DD>Returns the least value present in <code>array</code>.
-<DT><A HREF="./com/google/common/primitives/Doubles.html#min(double...)"><B>min(double...)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Doubles.html" title="class in com.google.common.primitives">Doubles</A>
-<DD>Returns the least value present in <code>array</code>, using the same rules of
- comparison as <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Math.html?is-external=true#min(double, double)" title="class or interface in java.lang"><CODE>Math.min(double, double)</CODE></A>.
-<DT><A HREF="./com/google/common/primitives/Floats.html#min(float...)"><B>min(float...)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Floats.html" title="class in com.google.common.primitives">Floats</A>
-<DD>Returns the least value present in <code>array</code>, using the same rules of
- comparison as <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Math.html?is-external=true#min(float, float)" title="class or interface in java.lang"><CODE>Math.min(float, float)</CODE></A>.
-<DT><A HREF="./com/google/common/primitives/Ints.html#min(int...)"><B>min(int...)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Ints.html" title="class in com.google.common.primitives">Ints</A>
-<DD>Returns the least value present in <code>array</code>.
-<DT><A HREF="./com/google/common/primitives/Longs.html#min(long...)"><B>min(long...)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Longs.html" title="class in com.google.common.primitives">Longs</A>
-<DD>Returns the least value present in <code>array</code>.
-<DT><A HREF="./com/google/common/primitives/Shorts.html#min(short...)"><B>min(short...)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Shorts.html" title="class in com.google.common.primitives">Shorts</A>
-<DD>Returns the least value present in <code>array</code>.
-<DT><A HREF="./com/google/common/primitives/SignedBytes.html#min(byte...)"><B>min(byte...)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/SignedBytes.html" title="class in com.google.common.primitives">SignedBytes</A>
-<DD>Returns the least value present in <code>array</code>.
-<DT><A HREF="./com/google/common/primitives/UnsignedBytes.html#min(byte...)"><B>min(byte...)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/UnsignedBytes.html" title="class in com.google.common.primitives">UnsignedBytes</A>
-<DD>Returns the least value present in <code>array</code>.
-<DT><A HREF="./com/google/common/io/Files.html#move(java.io.File, java.io.File)"><B>move(File, File)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/Files.html" title="class in com.google.common.io">Files</A>
-<DD>Moves the file from one path to another.
-<DT><A HREF="./com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><B>Multimap</B></A>&lt;<A HREF="./com/google/common/collect/Multimap.html" title="type parameter in Multimap">K</A>,<A HREF="./com/google/common/collect/Multimap.html" title="type parameter in Multimap">V</A>&gt; - Interface in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A collection similar to a <code>Map</code>, but which may associate multiple
- values with a single key.<DT><A HREF="./com/google/common/collect/Multimaps.html" title="class in com.google.common.collect"><B>Multimaps</B></A> - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>Provides static methods acting on or generating a <code>Multimap</code>.<DT><A HREF="./com/google/common/collect/Multiset.html" title="interface in com.google.common.collect"><B>Multiset</B></A>&lt;<A HREF="./com/google/common/collect/Multiset.html" title="type parameter in Multiset">E</A>&gt; - Interface in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A collection that supports order-independent equality, like <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A>, but
- may have duplicate elements.<DT><A HREF="./com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect"><B>Multiset.Entry</B></A>&lt;<A HREF="./com/google/common/collect/Multiset.Entry.html" title="type parameter in Multiset.Entry">E</A>&gt; - Interface in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>An unmodifiable element-count pair for a multiset.<DT><A HREF="./com/google/common/collect/Multisets.html" title="class in com.google.common.collect"><B>Multisets</B></A> - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>Provides static utility methods for creating and working with <A HREF="./com/google/common/collect/Multiset.html" title="interface in com.google.common.collect"><CODE>Multiset</CODE></A> instances.<DT><A HREF="./com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect"><B>MutableClassToInstanceMap</B></A>&lt;<A HREF="./com/google/common/collect/MutableClassToInstanceMap.html" title="type parameter in MutableClassToInstanceMap">B</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A mutable class-to-instance map backed by an arbitrary user-provided map.</DL>
-<HR>
-<A NAME="_N_"><!-- --></A><H2>
-<B>N</B></H2>
-<DL>
-<DT><A HREF="./com/google/common/util/concurrent/NamingThreadFactory.html" title="class in com.google.common.util.concurrent"><B>NamingThreadFactory</B></A> - Class in <A HREF="./com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A><DD>A ThreadFactory which decorates another ThreadFactory to set a name on
- each thread created.<DT><A HREF="./com/google/common/util/concurrent/NamingThreadFactory.html#NamingThreadFactory(java.lang.String)"><B>NamingThreadFactory(String)</B></A> - 
-Constructor for class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/NamingThreadFactory.html" title="class in com.google.common.util.concurrent">NamingThreadFactory</A>
-<DD>Creates a new factory that delegates to the default thread factory for
- thread creation, then uses <code>format</code> to construct a name for the new
- thread.
-<DT><A HREF="./com/google/common/util/concurrent/NamingThreadFactory.html#NamingThreadFactory(java.lang.String, java.util.concurrent.ThreadFactory)"><B>NamingThreadFactory(String, ThreadFactory)</B></A> - 
-Constructor for class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/NamingThreadFactory.html" title="class in com.google.common.util.concurrent">NamingThreadFactory</A>
-<DD>Creates a new factory that delegates to <code>backingFactory</code> for thread
- creation, then uses <code>format</code> to construct a name for the new thread.
-<DT><A HREF="./com/google/common/collect/Ordering.html#natural()"><B>natural()</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>
-<DD>Returns a serializable ordering that uses the natural order of the values.
-<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.html#naturalOrder()"><B>naturalOrder()</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>
-<DD>Returns a builder that creates immutable sorted maps whose keys are
- ordered by their natural ordering.
-<DT><A HREF="./com/google/common/collect/ImmutableSortedSet.html#naturalOrder()"><B>naturalOrder()</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>
-<DD>Returns a builder that creates immutable sorted sets whose elements are
- ordered by their natural ordering.
-<DT><A HREF="./com/google/common/base/CharMatcher.html#negate()"><B>negate()</B></A> - 
-Method in class com.google.common.base.<A HREF="./com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>
-<DD>Returns a matcher that matches any character not matched by this matcher.
-<DT><A HREF="./com/google/common/collect/ObjectArrays.html#newArray(java.lang.Class, int)"><B>newArray(Class&lt;T&gt;, int)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ObjectArrays.html" title="class in com.google.common.collect">ObjectArrays</A>
-<DD>Returns a new array of the given length with the specified component type.
-<DT><A HREF="./com/google/common/collect/ObjectArrays.html#newArray(T[], int)"><B>newArray(T[], int)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ObjectArrays.html" title="class in com.google.common.collect">ObjectArrays</A>
-<DD>Returns a new array of the given length with the same type as a reference
- array.
-<DT><A HREF="./com/google/common/collect/Lists.html#newArrayList()"><B>newArrayList()</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Lists.html" title="class in com.google.common.collect">Lists</A>
-<DD>Creates a <i>mutable</i>, empty <code>ArrayList</code> instance.
-<DT><A HREF="./com/google/common/collect/Lists.html#newArrayList(E...)"><B>newArrayList(E...)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Lists.html" title="class in com.google.common.collect">Lists</A>
-<DD>Creates a <i>mutable</i> <code>ArrayList</code> instance containing the given
- elements.
-<DT><A HREF="./com/google/common/collect/Lists.html#newArrayList(java.lang.Iterable)"><B>newArrayList(Iterable&lt;? extends E&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Lists.html" title="class in com.google.common.collect">Lists</A>
-<DD>Creates a <i>mutable</i> <code>ArrayList</code> instance containing the given
- elements.
-<DT><A HREF="./com/google/common/collect/Lists.html#newArrayList(java.util.Iterator)"><B>newArrayList(Iterator&lt;? extends E&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Lists.html" title="class in com.google.common.collect">Lists</A>
-<DD>Creates a <i>mutable</i> <code>ArrayList</code> instance containing the given
- elements.
-<DT><A HREF="./com/google/common/collect/Lists.html#newArrayListWithCapacity(int)"><B>newArrayListWithCapacity(int)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Lists.html" title="class in com.google.common.collect">Lists</A>
-<DD>Creates an <code>ArrayList</code> instance backed by an array of the
- <i>exact</i> size specified; equivalent to
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html?is-external=true#ArrayList(int)" title="class or interface in java.util"><CODE>ArrayList.ArrayList(int)</CODE></A>.
-<DT><A HREF="./com/google/common/collect/Lists.html#newArrayListWithExpectedSize(int)"><B>newArrayListWithExpectedSize(int)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Lists.html" title="class in com.google.common.collect">Lists</A>
-<DD>Creates an <code>ArrayList</code> instance sized appropriately to hold an
- <i>estimated</i> number of elements without resizing.
-<DT><A HREF="./com/google/common/io/ByteStreams.html#newDataInput(byte[])"><B>newDataInput(byte[])</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/ByteStreams.html" title="class in com.google.common.io">ByteStreams</A>
-<DD>Returns a new <A HREF="./com/google/common/io/ByteArrayDataInput.html" title="interface in com.google.common.io"><CODE>ByteArrayDataInput</CODE></A> instance to read from the <code>bytes</code> array from the beginning.
-<DT><A HREF="./com/google/common/io/ByteStreams.html#newDataInput(byte[], int)"><B>newDataInput(byte[], int)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/ByteStreams.html" title="class in com.google.common.io">ByteStreams</A>
-<DD>Returns a new <A HREF="./com/google/common/io/ByteArrayDataInput.html" title="interface in com.google.common.io"><CODE>ByteArrayDataInput</CODE></A> instance to read from the <code>bytes</code> array, starting at the given position.
-<DT><A HREF="./com/google/common/io/ByteStreams.html#newDataOutput()"><B>newDataOutput()</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/ByteStreams.html" title="class in com.google.common.io">ByteStreams</A>
-<DD>Returns a new <A HREF="./com/google/common/io/ByteArrayDataOutput.html" title="interface in com.google.common.io"><CODE>ByteArrayDataOutput</CODE></A> instance with a default size.
-<DT><A HREF="./com/google/common/io/ByteStreams.html#newDataOutput(int)"><B>newDataOutput(int)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/ByteStreams.html" title="class in com.google.common.io">ByteStreams</A>
-<DD>Returns a new <A HREF="./com/google/common/io/ByteArrayDataOutput.html" title="interface in com.google.common.io"><CODE>ByteArrayDataOutput</CODE></A> instance sized to hold
- <code>size</code> bytes before resizing.
-<DT><A HREF="./com/google/common/collect/Maps.html#newEnumMap(java.lang.Class)"><B>newEnumMap(Class&lt;K&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Maps.html" title="class in com.google.common.collect">Maps</A>
-<DD>Creates an <code>EnumMap</code> instance.
-<DT><A HREF="./com/google/common/collect/Maps.html#newEnumMap(java.util.Map)"><B>newEnumMap(Map&lt;K, ? extends V&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Maps.html" title="class in com.google.common.collect">Maps</A>
-<DD>Creates an <code>EnumMap</code> with the same mappings as the specified map.
-<DT><A HREF="./com/google/common/collect/Sets.html#newEnumSet(java.lang.Iterable, java.lang.Class)"><B>newEnumSet(Iterable&lt;E&gt;, Class&lt;E&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Sets.html" title="class in com.google.common.collect">Sets</A>
-<DD>Returns a new <code>EnumSet</code> instance containing the given elements.
-<DT><A HREF="./com/google/common/collect/Maps.html#newHashMap()"><B>newHashMap()</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Maps.html" title="class in com.google.common.collect">Maps</A>
-<DD>Creates a <i>mutable</i>, empty <code>HashMap</code> instance.
-<DT><A HREF="./com/google/common/collect/Maps.html#newHashMap(java.util.Map)"><B>newHashMap(Map&lt;? extends K, ? extends V&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Maps.html" title="class in com.google.common.collect">Maps</A>
-<DD>Creates a <i>mutable</i> <code>HashMap</code> instance with the same mappings as
- the specified map.
-<DT><A HREF="./com/google/common/collect/Maps.html#newHashMapWithExpectedSize(int)"><B>newHashMapWithExpectedSize(int)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Maps.html" title="class in com.google.common.collect">Maps</A>
-<DD>Creates a <code>HashMap</code> instance with enough capacity to hold the
- specified number of elements without rehashing.
-<DT><A HREF="./com/google/common/collect/Sets.html#newHashSet()"><B>newHashSet()</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Sets.html" title="class in com.google.common.collect">Sets</A>
-<DD>Creates a <i>mutable</i>, empty <code>HashSet</code> instance.
-<DT><A HREF="./com/google/common/collect/Sets.html#newHashSet(E...)"><B>newHashSet(E...)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Sets.html" title="class in com.google.common.collect">Sets</A>
-<DD>Creates a <i>mutable</i> <code>HashSet</code> instance containing the given
- elements in unspecified order.
-<DT><A HREF="./com/google/common/collect/Sets.html#newHashSet(java.lang.Iterable)"><B>newHashSet(Iterable&lt;? extends E&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Sets.html" title="class in com.google.common.collect">Sets</A>
-<DD>Creates a <i>mutable</i> <code>HashSet</code> instance containing the given
- elements in unspecified order.
-<DT><A HREF="./com/google/common/collect/Sets.html#newHashSet(java.util.Iterator)"><B>newHashSet(Iterator&lt;? extends E&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Sets.html" title="class in com.google.common.collect">Sets</A>
-<DD>Creates a <i>mutable</i> <code>HashSet</code> instance containing the given
- elements in unspecified order.
-<DT><A HREF="./com/google/common/collect/Sets.html#newHashSetWithExpectedSize(int)"><B>newHashSetWithExpectedSize(int)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Sets.html" title="class in com.google.common.collect">Sets</A>
-<DD>Creates an empty <code>HashSet</code> instance with enough capacity to hold the
- specified number of elements without rehashing.
-<DT><A HREF="./com/google/common/collect/Maps.html#newIdentityHashMap()"><B>newIdentityHashMap()</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Maps.html" title="class in com.google.common.collect">Maps</A>
-<DD>Creates an <code>IdentityHashMap</code> instance.
-<DT><A HREF="./com/google/common/io/ByteStreams.html#newInputStreamSupplier(byte[])"><B>newInputStreamSupplier(byte[])</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/ByteStreams.html" title="class in com.google.common.io">ByteStreams</A>
-<DD>Returns a factory that will supply instances of
- <A HREF="http://java.sun.com/javase/6/docs/api/java/io/ByteArrayInputStream.html?is-external=true" title="class or interface in java.io"><CODE>ByteArrayInputStream</CODE></A> that read from the given byte array.
-<DT><A HREF="./com/google/common/io/ByteStreams.html#newInputStreamSupplier(byte[], int, int)"><B>newInputStreamSupplier(byte[], int, int)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/ByteStreams.html" title="class in com.google.common.io">ByteStreams</A>
-<DD>Returns a factory that will supply instances of
- <A HREF="http://java.sun.com/javase/6/docs/api/java/io/ByteArrayInputStream.html?is-external=true" title="class or interface in java.io"><CODE>ByteArrayInputStream</CODE></A> that read from the given byte array.
-<DT><A HREF="./com/google/common/io/Files.html#newInputStreamSupplier(java.io.File)"><B>newInputStreamSupplier(File)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/Files.html" title="class in com.google.common.io">Files</A>
-<DD>Returns a factory that will supply instances of <A HREF="http://java.sun.com/javase/6/docs/api/java/io/FileInputStream.html?is-external=true" title="class or interface in java.io"><CODE>FileInputStream</CODE></A>
- that read from a file.
-<DT><A HREF="./com/google/common/io/Resources.html#newInputStreamSupplier(java.net.URL)"><B>newInputStreamSupplier(URL)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/Resources.html" title="class in com.google.common.io">Resources</A>
-<DD>Returns a factory that will supply instances of <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io"><CODE>InputStream</CODE></A> that
- read from the given URL.
-<DT><A HREF="./com/google/common/collect/Maps.html#newLinkedHashMap()"><B>newLinkedHashMap()</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Maps.html" title="class in com.google.common.collect">Maps</A>
-<DD>Creates a <i>mutable</i>, empty, insertion-ordered <code>LinkedHashMap</code>
- instance.
-<DT><A HREF="./com/google/common/collect/Maps.html#newLinkedHashMap(java.util.Map)"><B>newLinkedHashMap(Map&lt;? extends K, ? extends V&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Maps.html" title="class in com.google.common.collect">Maps</A>
-<DD>Creates a <i>mutable</i>, insertion-ordered <code>LinkedHashMap</code> instance
- with the same mappings as the specified map.
-<DT><A HREF="./com/google/common/collect/Sets.html#newLinkedHashSet()"><B>newLinkedHashSet()</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Sets.html" title="class in com.google.common.collect">Sets</A>
-<DD>Creates a <i>mutable</i>, empty <code>LinkedHashSet</code> instance.
-<DT><A HREF="./com/google/common/collect/Sets.html#newLinkedHashSet(java.lang.Iterable)"><B>newLinkedHashSet(Iterable&lt;? extends E&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Sets.html" title="class in com.google.common.collect">Sets</A>
-<DD>Creates a <i>mutable</i> <code>LinkedHashSet</code> instance containing the
- given elements in order.
-<DT><A HREF="./com/google/common/collect/Lists.html#newLinkedList()"><B>newLinkedList()</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Lists.html" title="class in com.google.common.collect">Lists</A>
-<DD>Creates an empty <code>LinkedList</code> instance.
-<DT><A HREF="./com/google/common/collect/Lists.html#newLinkedList(java.lang.Iterable)"><B>newLinkedList(Iterable&lt;? extends E&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Lists.html" title="class in com.google.common.collect">Lists</A>
-<DD>Creates a <code>LinkedList</code> instance containing the given elements.
-<DT><A HREF="./com/google/common/collect/Multimaps.html#newListMultimap(java.util.Map, com.google.common.base.Supplier)"><B>newListMultimap(Map&lt;K, Collection&lt;V&gt;&gt;, Supplier&lt;? extends List&lt;V&gt;&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Multimaps.html" title="class in com.google.common.collect">Multimaps</A>
-<DD>Creates a new <code>ListMultimap</code> that uses the provided map and factory.
-<DT><A HREF="./com/google/common/collect/Multimaps.html#newMultimap(java.util.Map, com.google.common.base.Supplier)"><B>newMultimap(Map&lt;K, Collection&lt;V&gt;&gt;, Supplier&lt;? extends Collection&lt;V&gt;&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Multimaps.html" title="class in com.google.common.collect">Multimaps</A>
-<DD>Creates a new <code>Multimap</code> that uses the provided map and factory.
-<DT><A HREF="./com/google/common/io/Files.html#newOutputStreamSupplier(java.io.File)"><B>newOutputStreamSupplier(File)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/Files.html" title="class in com.google.common.io">Files</A>
-<DD>Returns a factory that will supply instances of <A HREF="http://java.sun.com/javase/6/docs/api/java/io/FileOutputStream.html?is-external=true" title="class or interface in java.io"><CODE>FileOutputStream</CODE></A>
- that write to a file.
-<DT><A HREF="./com/google/common/io/Files.html#newOutputStreamSupplier(java.io.File, boolean)"><B>newOutputStreamSupplier(File, boolean)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/Files.html" title="class in com.google.common.io">Files</A>
-<DD>Returns a factory that will supply instances of <A HREF="http://java.sun.com/javase/6/docs/api/java/io/FileOutputStream.html?is-external=true" title="class or interface in java.io"><CODE>FileOutputStream</CODE></A>
- that write to or append to a file.
-<DT><A HREF="./com/google/common/util/concurrent/FakeTimeLimiter.html#newProxy(T, java.lang.Class, long, java.util.concurrent.TimeUnit)"><B>newProxy(T, Class&lt;T&gt;, long, TimeUnit)</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/FakeTimeLimiter.html" title="class in com.google.common.util.concurrent">FakeTimeLimiter</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/SimpleTimeLimiter.html#newProxy(T, java.lang.Class, long, java.util.concurrent.TimeUnit)"><B>newProxy(T, Class&lt;T&gt;, long, TimeUnit)</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/SimpleTimeLimiter.html" title="class in com.google.common.util.concurrent">SimpleTimeLimiter</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/TimeLimiter.html#newProxy(T, java.lang.Class, long, java.util.concurrent.TimeUnit)"><B>newProxy(T, Class&lt;T&gt;, long, TimeUnit)</B></A> - 
-Method in interface com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/TimeLimiter.html" title="interface in com.google.common.util.concurrent">TimeLimiter</A>
-<DD>Returns an instance of <code>interfaceType</code> that delegates all method
- calls to the <code>target</code> object, enforcing the specified time limit on
- each call.
-<DT><A HREF="./com/google/common/io/Files.html#newReader(java.io.File, java.nio.charset.Charset)"><B>newReader(File, Charset)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/Files.html" title="class in com.google.common.io">Files</A>
-<DD>Returns a buffered reader that reads from a file using the given
- character set.
-<DT><A HREF="./com/google/common/io/CharStreams.html#newReaderSupplier(java.lang.String)"><B>newReaderSupplier(String)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/CharStreams.html" title="class in com.google.common.io">CharStreams</A>
-<DD>Returns a factory that will supply instances of <A HREF="http://java.sun.com/javase/6/docs/api/java/io/StringReader.html?is-external=true" title="class or interface in java.io"><CODE>StringReader</CODE></A> that
- read a string value.
-<DT><A HREF="./com/google/common/io/CharStreams.html#newReaderSupplier(com.google.common.io.InputSupplier, java.nio.charset.Charset)"><B>newReaderSupplier(InputSupplier&lt;? extends InputStream&gt;, Charset)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/CharStreams.html" title="class in com.google.common.io">CharStreams</A>
-<DD>Returns a factory that will supply instances of <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStreamReader.html?is-external=true" title="class or interface in java.io"><CODE>InputStreamReader</CODE></A>,
- using the given <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io"><CODE>InputStream</CODE></A> factory and character set.
-<DT><A HREF="./com/google/common/io/Files.html#newReaderSupplier(java.io.File, java.nio.charset.Charset)"><B>newReaderSupplier(File, Charset)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/Files.html" title="class in com.google.common.io">Files</A>
-<DD>Returns a factory that will supply instances of
- <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStreamReader.html?is-external=true" title="class or interface in java.io"><CODE>InputStreamReader</CODE></A> that read a file using the given character set.
-<DT><A HREF="./com/google/common/io/Resources.html#newReaderSupplier(java.net.URL, java.nio.charset.Charset)"><B>newReaderSupplier(URL, Charset)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/Resources.html" title="class in com.google.common.io">Resources</A>
-<DD>Returns a factory that will supply instances of
- <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStreamReader.html?is-external=true" title="class or interface in java.io"><CODE>InputStreamReader</CODE></A> that read a URL using the given character set.
-<DT><A HREF="./com/google/common/collect/Sets.html#newSetFromMap(java.util.Map)"><B>newSetFromMap(Map&lt;E, Boolean&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Sets.html" title="class in com.google.common.collect">Sets</A>
-<DD>Returns a set backed by the specified map.
-<DT><A HREF="./com/google/common/collect/Multimaps.html#newSetMultimap(java.util.Map, com.google.common.base.Supplier)"><B>newSetMultimap(Map&lt;K, Collection&lt;V&gt;&gt;, Supplier&lt;? extends Set&lt;V&gt;&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Multimaps.html" title="class in com.google.common.collect">Multimaps</A>
-<DD>Creates a new <code>SetMultimap</code> that uses the provided map and factory.
-<DT><A HREF="./com/google/common/collect/Multimaps.html#newSortedSetMultimap(java.util.Map, com.google.common.base.Supplier)"><B>newSortedSetMultimap(Map&lt;K, Collection&lt;V&gt;&gt;, Supplier&lt;? extends SortedSet&lt;V&gt;&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Multimaps.html" title="class in com.google.common.collect">Multimaps</A>
-<DD>Creates a new <code>SortedSetMultimap</code> that uses the provided map and
- factory.
-<DT><A HREF="./com/google/common/util/concurrent/DaemonThreadFactory.html#newThread(java.lang.Runnable)"><B>newThread(Runnable)</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/DaemonThreadFactory.html" title="class in com.google.common.util.concurrent">DaemonThreadFactory</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/NamingThreadFactory.html#newThread(java.lang.Runnable)"><B>newThread(Runnable)</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/NamingThreadFactory.html" title="class in com.google.common.util.concurrent">NamingThreadFactory</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/Maps.html#newTreeMap()"><B>newTreeMap()</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Maps.html" title="class in com.google.common.collect">Maps</A>
-<DD>Creates a <i>mutable</i>, empty <code>TreeMap</code> instance using the natural
- ordering of its elements.
-<DT><A HREF="./com/google/common/collect/Maps.html#newTreeMap(java.util.SortedMap)"><B>newTreeMap(SortedMap&lt;K, ? extends V&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Maps.html" title="class in com.google.common.collect">Maps</A>
-<DD>Creates a <i>mutable</i> <code>TreeMap</code> instance with the same mappings as
- the specified map and using the same ordering as the specified map.
-<DT><A HREF="./com/google/common/collect/Maps.html#newTreeMap(java.util.Comparator)"><B>newTreeMap(Comparator&lt;C&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Maps.html" title="class in com.google.common.collect">Maps</A>
-<DD>Creates a <i>mutable</i>, empty <code>TreeMap</code> instance using the given
- comparator.
-<DT><A HREF="./com/google/common/collect/Sets.html#newTreeSet()"><B>newTreeSet()</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Sets.html" title="class in com.google.common.collect">Sets</A>
-<DD>Creates a <i>mutable</i>, empty <code>TreeSet</code> instance sorted by the
- natural sort ordering of its elements.
-<DT><A HREF="./com/google/common/collect/Sets.html#newTreeSet(java.lang.Iterable)"><B>newTreeSet(Iterable&lt;? extends E&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Sets.html" title="class in com.google.common.collect">Sets</A>
-<DD>Creates a <i>mutable</i> <code>TreeSet</code> instance containing the given
- elements sorted by their natural ordering.
-<DT><A HREF="./com/google/common/collect/Sets.html#newTreeSet(java.util.Comparator)"><B>newTreeSet(Comparator&lt;? super E&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Sets.html" title="class in com.google.common.collect">Sets</A>
-<DD>Creates a <i>mutable</i>, empty <code>TreeSet</code> instance with the given
- comparator.
-<DT><A HREF="./com/google/common/io/Files.html#newWriter(java.io.File, java.nio.charset.Charset)"><B>newWriter(File, Charset)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/Files.html" title="class in com.google.common.io">Files</A>
-<DD>Returns a buffered writer that writes to a file using the given
- character set.
-<DT><A HREF="./com/google/common/io/CharStreams.html#newWriterSupplier(com.google.common.io.OutputSupplier, java.nio.charset.Charset)"><B>newWriterSupplier(OutputSupplier&lt;? extends OutputStream&gt;, Charset)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/CharStreams.html" title="class in com.google.common.io">CharStreams</A>
-<DD>Returns a factory that will supply instances of <A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStreamWriter.html?is-external=true" title="class or interface in java.io"><CODE>OutputStreamWriter</CODE></A>,
- using the given <A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io"><CODE>OutputStream</CODE></A> factory and character set.
-<DT><A HREF="./com/google/common/io/Files.html#newWriterSupplier(java.io.File, java.nio.charset.Charset)"><B>newWriterSupplier(File, Charset)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/Files.html" title="class in com.google.common.io">Files</A>
-<DD>Returns a factory that will supply instances of <A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStreamWriter.html?is-external=true" title="class or interface in java.io"><CODE>OutputStreamWriter</CODE></A>
- that write to a file using the given character set.
-<DT><A HREF="./com/google/common/io/Files.html#newWriterSupplier(java.io.File, java.nio.charset.Charset, boolean)"><B>newWriterSupplier(File, Charset, boolean)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/Files.html" title="class in com.google.common.io">Files</A>
-<DD>Returns a factory that will supply instances of <A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStreamWriter.html?is-external=true" title="class or interface in java.io"><CODE>OutputStreamWriter</CODE></A>
- that write to or append to a file using the given character set.
-<DT><A HREF="./com/google/common/collect/AbstractIterator.html#next()"><B>next()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/AbstractIterator.html" title="class in com.google.common.collect">AbstractIterator</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingIterator.html#next()"><B>next()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingIterator.html" title="class in com.google.common.collect">ForwardingIterator</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/PeekingIterator.html#next()"><B>next()</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/PeekingIterator.html" title="interface in com.google.common.collect">PeekingIterator</A>
-<DD>
-<DT><A HREF="./com/google/common/collect/ForwardingListIterator.html#nextIndex()"><B>nextIndex()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingListIterator.html" title="class in com.google.common.collect">ForwardingListIterator</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/base/CharMatcher.html#NONE"><B>NONE</B></A> - 
-Static variable in class com.google.common.base.<A HREF="./com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>
-<DD>Matches no characters.
-<DT><A HREF="./com/google/common/base/CharMatcher.html#noneOf(java.lang.CharSequence)"><B>noneOf(CharSequence)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>
-<DD>Returns a <code>char</code> matcher that matches any character not present in
- the given character sequence.
-<DT><A HREF="./com/google/common/base/Predicates.html#not(com.google.common.base.Predicate)"><B>not(Predicate&lt;T&gt;)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Predicates.html" title="class in com.google.common.base">Predicates</A>
-<DD>Returns a predicate that evaluates to <code>true</code> if the given predicate
- evaluates to <code>false</code>.
-<DT><A HREF="./com/google/common/util/concurrent/AbstractService.html#notifyFailed(java.lang.Throwable)"><B>notifyFailed(Throwable)</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractService.html" title="class in com.google.common.util.concurrent">AbstractService</A>
-<DD>Invoke this method to transition the service to the
- <A HREF="./com/google/common/base/Service.State.html#FAILED"><CODE>Service.State.FAILED</CODE></A>.
-<DT><A HREF="./com/google/common/util/concurrent/AbstractService.html#notifyStarted()"><B>notifyStarted()</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractService.html" title="class in com.google.common.util.concurrent">AbstractService</A>
-<DD>Implementing classes should invoke this method once their service has
- started.
-<DT><A HREF="./com/google/common/util/concurrent/AbstractService.html#notifyStopped()"><B>notifyStopped()</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractService.html" title="class in com.google.common.util.concurrent">AbstractService</A>
-<DD>Implementing classes should invoke this method once their service has
- stopped.
-<DT><A HREF="./com/google/common/base/Predicates.html#notNull()"><B>notNull()</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Predicates.html" title="class in com.google.common.base">Predicates</A>
-<DD>Returns a predicate that evaluates to <code>true</code> if the object reference
- being tested is not null.
-<DT><A HREF="./com/google/common/io/NullOutputStream.html" title="class in com.google.common.io"><B>NullOutputStream</B></A> - Class in <A HREF="./com/google/common/io/package-summary.html">com.google.common.io</A><DD>Implementation of <A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io"><CODE>OutputStream</CODE></A> that simply discards written bytes.<DT><A HREF="./com/google/common/io/NullOutputStream.html#NullOutputStream()"><B>NullOutputStream()</B></A> - 
-Constructor for class com.google.common.io.<A HREF="./com/google/common/io/NullOutputStream.html" title="class in com.google.common.io">NullOutputStream</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/Ordering.html#nullsFirst()"><B>nullsFirst()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>
-<DD>Returns an ordering that treats <code>null</code> as less than all other values
- and uses <code>this</code> to compare non-null values.
-<DT><A HREF="./com/google/common/collect/Ordering.html#nullsLast()"><B>nullsLast()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>
-<DD>Returns an ordering that treats <code>null</code> as greater than all other
- values and uses this ordering to compare non-null values.
-</DL>
-<HR>
-<A NAME="_O_"><!-- --></A><H2>
-<B>O</B></H2>
-<DL>
-<DT><A HREF="./com/google/common/collect/ObjectArrays.html" title="class in com.google.common.collect"><B>ObjectArrays</B></A> - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>Static utility methods pertaining to object arrays.<DT><A HREF="./com/google/common/base/Objects.html" title="class in com.google.common.base"><B>Objects</B></A> - Class in <A HREF="./com/google/common/base/package-summary.html">com.google.common.base</A><DD>Helper functions that can operate on any <code>Object</code>.<DT><A HREF="./com/google/common/base/Objects.ToStringHelper.html" title="class in com.google.common.base"><B>Objects.ToStringHelper</B></A> - Class in <A HREF="./com/google/common/base/package-summary.html">com.google.common.base</A><DD>Support class for <A HREF="./com/google/common/base/Objects.html#toStringHelper(java.lang.Object)"><CODE>Objects.toStringHelper(java.lang.Object)</CODE></A>.<DT><A HREF="./com/google/common/collect/ImmutableBiMap.html#of()"><B>of()</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>
-<DD>Returns the empty bimap.
-<DT><A HREF="./com/google/common/collect/ImmutableBiMap.html#of(K, V)"><B>of(K, V)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>
-<DD>Returns an immutable bimap containing a single entry.
-<DT><A HREF="./com/google/common/collect/ImmutableBiMap.html#of(K, V, K, V)"><B>of(K, V, K, V)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>
-<DD>Returns an immutable map containing the given entries, in order.
-<DT><A HREF="./com/google/common/collect/ImmutableBiMap.html#of(K, V, K, V, K, V)"><B>of(K, V, K, V, K, V)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>
-<DD>Returns an immutable map containing the given entries, in order.
-<DT><A HREF="./com/google/common/collect/ImmutableBiMap.html#of(K, V, K, V, K, V, K, V)"><B>of(K, V, K, V, K, V, K, V)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>
-<DD>Returns an immutable map containing the given entries, in order.
-<DT><A HREF="./com/google/common/collect/ImmutableBiMap.html#of(K, V, K, V, K, V, K, V, K, V)"><B>of(K, V, K, V, K, V, K, V, K, V)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>
-<DD>Returns an immutable map containing the given entries, in order.
-<DT><A HREF="./com/google/common/collect/ImmutableList.html#of()"><B>of()</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>
-<DD>Returns the empty immutable list.
-<DT><A HREF="./com/google/common/collect/ImmutableList.html#of(E)"><B>of(E)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>
-<DD>Returns an immutable list containing a single element.
-<DT><A HREF="./com/google/common/collect/ImmutableList.html#of(E, E)"><B>of(E, E)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>
-<DD>Identical to <A HREF="./com/google/common/collect/ImmutableList.html#of(E...)"><CODE>ImmutableList.of(Object[])</CODE></A>.
-<DT><A HREF="./com/google/common/collect/ImmutableList.html#of(E, E, E)"><B>of(E, E, E)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>
-<DD>Identical to <A HREF="./com/google/common/collect/ImmutableList.html#of(E...)"><CODE>ImmutableList.of(Object[])</CODE></A>.
-<DT><A HREF="./com/google/common/collect/ImmutableList.html#of(E, E, E, E)"><B>of(E, E, E, E)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>
-<DD>Identical to <A HREF="./com/google/common/collect/ImmutableList.html#of(E...)"><CODE>ImmutableList.of(Object[])</CODE></A>.
-<DT><A HREF="./com/google/common/collect/ImmutableList.html#of(E, E, E, E, E)"><B>of(E, E, E, E, E)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>
-<DD>Identical to <A HREF="./com/google/common/collect/ImmutableList.html#of(E...)"><CODE>ImmutableList.of(Object[])</CODE></A>.
-<DT><A HREF="./com/google/common/collect/ImmutableList.html#of(E, E, E, E, E, E)"><B>of(E, E, E, E, E, E)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>
-<DD>Identical to <A HREF="./com/google/common/collect/ImmutableList.html#of(E...)"><CODE>ImmutableList.of(Object[])</CODE></A>.
-<DT><A HREF="./com/google/common/collect/ImmutableList.html#of(E, E, E, E, E, E, E)"><B>of(E, E, E, E, E, E, E)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>
-<DD>Identical to <A HREF="./com/google/common/collect/ImmutableList.html#of(E...)"><CODE>ImmutableList.of(Object[])</CODE></A>.
-<DT><A HREF="./com/google/common/collect/ImmutableList.html#of(E, E, E, E, E, E, E, E)"><B>of(E, E, E, E, E, E, E, E)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>
-<DD>Identical to <A HREF="./com/google/common/collect/ImmutableList.html#of(E...)"><CODE>ImmutableList.of(Object[])</CODE></A>.
-<DT><A HREF="./com/google/common/collect/ImmutableList.html#of(E, E, E, E, E, E, E, E, E)"><B>of(E, E, E, E, E, E, E, E, E)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>
-<DD>Identical to <A HREF="./com/google/common/collect/ImmutableList.html#of(E...)"><CODE>ImmutableList.of(Object[])</CODE></A>.
-<DT><A HREF="./com/google/common/collect/ImmutableList.html#of(E, E, E, E, E, E, E, E, E, E)"><B>of(E, E, E, E, E, E, E, E, E, E)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>
-<DD>Identical to <A HREF="./com/google/common/collect/ImmutableList.html#of(E...)"><CODE>ImmutableList.of(Object[])</CODE></A>.
-<DT><A HREF="./com/google/common/collect/ImmutableList.html#of(E, E, E, E, E, E, E, E, E, E, E)"><B>of(E, E, E, E, E, E, E, E, E, E, E)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>
-<DD>Identical to <A HREF="./com/google/common/collect/ImmutableList.html#of(E...)"><CODE>ImmutableList.of(Object[])</CODE></A>.
-<DT><A HREF="./com/google/common/collect/ImmutableList.html#of(E...)"><B>of(E...)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>
-<DD>Returns an immutable list containing the given elements, in order.
-<DT><A HREF="./com/google/common/collect/ImmutableListMultimap.html#of()"><B>of()</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>
-<DD>Returns the empty multimap.
-<DT><A HREF="./com/google/common/collect/ImmutableListMultimap.html#of(K, V)"><B>of(K, V)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>
-<DD>Returns an immutable multimap containing a single entry.
-<DT><A HREF="./com/google/common/collect/ImmutableListMultimap.html#of(K, V, K, V)"><B>of(K, V, K, V)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>
-<DD>Returns an immutable multimap containing the given entries, in order.
-<DT><A HREF="./com/google/common/collect/ImmutableListMultimap.html#of(K, V, K, V, K, V)"><B>of(K, V, K, V, K, V)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>
-<DD>Returns an immutable multimap containing the given entries, in order.
-<DT><A HREF="./com/google/common/collect/ImmutableListMultimap.html#of(K, V, K, V, K, V, K, V)"><B>of(K, V, K, V, K, V, K, V)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>
-<DD>Returns an immutable multimap containing the given entries, in order.
-<DT><A HREF="./com/google/common/collect/ImmutableListMultimap.html#of(K, V, K, V, K, V, K, V, K, V)"><B>of(K, V, K, V, K, V, K, V, K, V)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>
-<DD>Returns an immutable multimap containing the given entries, in order.
-<DT><A HREF="./com/google/common/collect/ImmutableMap.html#of()"><B>of()</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>
-<DD>Returns the empty map.
-<DT><A HREF="./com/google/common/collect/ImmutableMap.html#of(K, V)"><B>of(K, V)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>
-<DD>Returns an immutable map containing a single entry.
-<DT><A HREF="./com/google/common/collect/ImmutableMap.html#of(K, V, K, V)"><B>of(K, V, K, V)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>
-<DD>Returns an immutable map containing the given entries, in order.
-<DT><A HREF="./com/google/common/collect/ImmutableMap.html#of(K, V, K, V, K, V)"><B>of(K, V, K, V, K, V)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>
-<DD>Returns an immutable map containing the given entries, in order.
-<DT><A HREF="./com/google/common/collect/ImmutableMap.html#of(K, V, K, V, K, V, K, V)"><B>of(K, V, K, V, K, V, K, V)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>
-<DD>Returns an immutable map containing the given entries, in order.
-<DT><A HREF="./com/google/common/collect/ImmutableMap.html#of(K, V, K, V, K, V, K, V, K, V)"><B>of(K, V, K, V, K, V, K, V, K, V)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>
-<DD>Returns an immutable map containing the given entries, in order.
-<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html#of()"><B>of()</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
-<DD>Returns an empty multimap.
-<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html#of(K, V)"><B>of(K, V)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
-<DD>Returns an immutable multimap containing a single entry.
-<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html#of(K, V, K, V)"><B>of(K, V, K, V)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
-<DD>Returns an immutable multimap containing the given entries, in order.
-<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html#of(K, V, K, V, K, V)"><B>of(K, V, K, V, K, V)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
-<DD>Returns an immutable multimap containing the given entries, in order.
-<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html#of(K, V, K, V, K, V, K, V)"><B>of(K, V, K, V, K, V, K, V)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
-<DD>Returns an immutable multimap containing the given entries, in order.
-<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html#of(K, V, K, V, K, V, K, V, K, V)"><B>of(K, V, K, V, K, V, K, V, K, V)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
-<DD>Returns an immutable multimap containing the given entries, in order.
-<DT><A HREF="./com/google/common/collect/ImmutableMultiset.html#of()"><B>of()</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>
-<DD>Returns the empty immutable multiset.
-<DT><A HREF="./com/google/common/collect/ImmutableMultiset.html#of(E...)"><B>of(E...)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>
-<DD>Returns an immutable multiset containing the given elements.
-<DT><A HREF="./com/google/common/collect/ImmutableSet.html#of()"><B>of()</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>
-<DD>Returns the empty immutable set.
-<DT><A HREF="./com/google/common/collect/ImmutableSet.html#of(E)"><B>of(E)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>
-<DD>Returns an immutable set containing a single element.
-<DT><A HREF="./com/google/common/collect/ImmutableSet.html#of(E, E)"><B>of(E, E)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>
-<DD>Returns an immutable set containing the given elements, in order.
-<DT><A HREF="./com/google/common/collect/ImmutableSet.html#of(E, E, E)"><B>of(E, E, E)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>
-<DD>Returns an immutable set containing the given elements, in order.
-<DT><A HREF="./com/google/common/collect/ImmutableSet.html#of(E, E, E, E)"><B>of(E, E, E, E)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>
-<DD>Returns an immutable set containing the given elements, in order.
-<DT><A HREF="./com/google/common/collect/ImmutableSet.html#of(E, E, E, E, E)"><B>of(E, E, E, E, E)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>
-<DD>Returns an immutable set containing the given elements, in order.
-<DT><A HREF="./com/google/common/collect/ImmutableSet.html#of(E...)"><B>of(E...)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">ImmutableSet</A>
-<DD>Returns an immutable set containing the given elements, in order.
-<DT><A HREF="./com/google/common/collect/ImmutableSetMultimap.html#of()"><B>of()</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>
-<DD>Returns the empty multimap.
-<DT><A HREF="./com/google/common/collect/ImmutableSetMultimap.html#of(K, V)"><B>of(K, V)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>
-<DD>Returns an immutable multimap containing a single entry.
-<DT><A HREF="./com/google/common/collect/ImmutableSetMultimap.html#of(K, V, K, V)"><B>of(K, V, K, V)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>
-<DD>Returns an immutable multimap containing the given entries, in order.
-<DT><A HREF="./com/google/common/collect/ImmutableSetMultimap.html#of(K, V, K, V, K, V)"><B>of(K, V, K, V, K, V)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>
-<DD>Returns an immutable multimap containing the given entries, in order.
-<DT><A HREF="./com/google/common/collect/ImmutableSetMultimap.html#of(K, V, K, V, K, V, K, V)"><B>of(K, V, K, V, K, V, K, V)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>
-<DD>Returns an immutable multimap containing the given entries, in order.
-<DT><A HREF="./com/google/common/collect/ImmutableSetMultimap.html#of(K, V, K, V, K, V, K, V, K, V)"><B>of(K, V, K, V, K, V, K, V, K, V)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>
-<DD>Returns an immutable multimap containing the given entries, in order.
-<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.html#of()"><B>of()</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>
-<DD>Returns the empty sorted map.
-<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.html#of(K, V)"><B>of(K, V)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>
-<DD>Returns an immutable map containing a single entry.
-<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.html#of(K, V, K, V)"><B>of(K, V, K, V)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>
-<DD>Returns an immutable sorted map containing the given entries, sorted by the
- natural ordering of their keys.
-<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.html#of(K, V, K, V, K, V)"><B>of(K, V, K, V, K, V)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>
-<DD>Returns an immutable sorted map containing the given entries, sorted by the
- natural ordering of their keys.
-<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.html#of(K, V, K, V, K, V, K, V)"><B>of(K, V, K, V, K, V, K, V)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>
-<DD>Returns an immutable sorted map containing the given entries, sorted by the
- natural ordering of their keys.
-<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.html#of(K, V, K, V, K, V, K, V, K, V)"><B>of(K, V, K, V, K, V, K, V, K, V)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>
-<DD>Returns an immutable sorted map containing the given entries, sorted by the
- natural ordering of their keys.
-<DT><A HREF="./com/google/common/collect/ImmutableSortedSet.html#of()"><B>of()</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>
-<DD>Returns the empty immutable sorted set.
-<DT><A HREF="./com/google/common/collect/ImmutableSortedSet.html#of(E)"><B>of(E)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>
-<DD>Returns an immutable sorted set containing a single element.
-<DT><A HREF="./com/google/common/collect/ImmutableSortedSet.html#of(E, E)"><B>of(E, E)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>
-<DD>Returns an immutable sorted set containing the given elements sorted by
- their natural ordering.
-<DT><A HREF="./com/google/common/collect/ImmutableSortedSet.html#of(E, E, E)"><B>of(E, E, E)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>
-<DD>Returns an immutable sorted set containing the given elements sorted by
- their natural ordering.
-<DT><A HREF="./com/google/common/collect/ImmutableSortedSet.html#of(E, E, E, E)"><B>of(E, E, E, E)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>
-<DD>Returns an immutable sorted set containing the given elements sorted by
- their natural ordering.
-<DT><A HREF="./com/google/common/collect/ImmutableSortedSet.html#of(E, E, E, E, E)"><B>of(E, E, E, E, E)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>
-<DD>Returns an immutable sorted set containing the given elements sorted by
- their natural ordering.
-<DT><A HREF="./com/google/common/collect/ImmutableSortedSet.html#of(E...)"><B>of(E...)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>
-<DD>Returns an immutable sorted set containing the given elements sorted by
- their natural ordering.
-<DT><A HREF="./com/google/common/collect/ForwardingQueue.html#offer(E)"><B>offer(E)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingQueue.html" title="class in com.google.common.collect">ForwardingQueue</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/base/Suppliers.html#ofInstance(T)"><B>ofInstance(T)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Suppliers.html" title="class in com.google.common.base">Suppliers</A>
-<DD>Returns a supplier that always supplies <code>instance</code>.
-<DT><A HREF="./com/google/common/base/Splitter.html#omitEmptyStrings()"><B>omitEmptyStrings()</B></A> - 
-Method in class com.google.common.base.<A HREF="./com/google/common/base/Splitter.html" title="class in com.google.common.base">Splitter</A>
-<DD>Returns a splitter that behaves equivalently to <code>this</code> splitter, but
- automatically omits empty strings from the results.
-<DT><A HREF="./com/google/common/base/Joiner.html#on(java.lang.String)"><B>on(String)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A>
-<DD>Returns a joiner which automatically places <code>separator</code> between
- consecutive elements.
-<DT><A HREF="./com/google/common/base/Joiner.html#on(char)"><B>on(char)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A>
-<DD>Returns a joiner which automatically places <code>separator</code> between
- consecutive elements.
-<DT><A HREF="./com/google/common/base/Splitter.html#on(char)"><B>on(char)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Splitter.html" title="class in com.google.common.base">Splitter</A>
-<DD>Returns a splitter that uses the given single-character separator.
-<DT><A HREF="./com/google/common/base/Splitter.html#on(com.google.common.base.CharMatcher)"><B>on(CharMatcher)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Splitter.html" title="class in com.google.common.base">Splitter</A>
-<DD>Returns a splitter that considers any single character matched by the
- given <code>CharMatcher</code> to be a separator.
-<DT><A HREF="./com/google/common/base/Splitter.html#on(java.lang.String)"><B>on(String)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Splitter.html" title="class in com.google.common.base">Splitter</A>
-<DD>Returns a splitter that uses the given fixed string as a separator.
-<DT><A HREF="./com/google/common/base/Splitter.html#on(java.util.regex.Pattern)"><B>on(Pattern)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Splitter.html" title="class in com.google.common.base">Splitter</A>
-<DD>Returns a splitter that considers any subsequence matching <code>pattern</code> to be a separator.
-<DT><A HREF="./com/google/common/base/Splitter.html#onPattern(java.lang.String)"><B>onPattern(String)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Splitter.html" title="class in com.google.common.base">Splitter</A>
-<DD>Returns a splitter that considers any subsequence matching a given
- pattern (regular expression) to be a separator.
-<DT><A HREF="./com/google/common/collect/Ordering.html#onResultOf(com.google.common.base.Function)"><B>onResultOf(Function&lt;F, ? extends T&gt;)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>
-<DD>Returns a new ordering on <code>F</code> which orders elements by first applying
- a function to them, then comparing those results using <code>this</code>.
-<DT><A HREF="./com/google/common/base/CharMatcher.html#or(com.google.common.base.CharMatcher)"><B>or(CharMatcher)</B></A> - 
-Method in class com.google.common.base.<A HREF="./com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>
-<DD>Returns a matcher that matches any character matched by either this matcher
- or <code>other</code>.
-<DT><A HREF="./com/google/common/base/Predicates.html#or(java.lang.Iterable)"><B>or(Iterable&lt;? extends Predicate&lt;? super T&gt;&gt;)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Predicates.html" title="class in com.google.common.base">Predicates</A>
-<DD>Returns a predicate that evaluates to <code>true</code> if any one of its
- components evaluates to <code>true</code>.
-<DT><A HREF="./com/google/common/base/Predicates.html#or(com.google.common.base.Predicate...)"><B>or(Predicate&lt;? super T&gt;...)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Predicates.html" title="class in com.google.common.base">Predicates</A>
-<DD>Returns a predicate that evaluates to <code>true</code> if any one of its
- components evaluates to <code>true</code>.
-<DT><A HREF="./com/google/common/base/Predicates.html#or(com.google.common.base.Predicate, com.google.common.base.Predicate)"><B>or(Predicate&lt;? super T&gt;, Predicate&lt;? super T&gt;)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Predicates.html" title="class in com.google.common.base">Predicates</A>
-<DD>Returns a predicate that evaluates to <code>true</code> if either of its
- components evaluates to <code>true</code>.
-<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.html#orderedBy(java.util.Comparator)"><B>orderedBy(Comparator&lt;K&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>
-<DD>Returns a builder that creates immutable sorted maps with an explicit
- comparator.
-<DT><A HREF="./com/google/common/collect/ImmutableSortedSet.html#orderedBy(java.util.Comparator)"><B>orderedBy(Comparator&lt;E&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>
-<DD>Returns a builder that creates immutable sorted sets with an explicit
- comparator.
-<DT><A HREF="./com/google/common/collect/Ordering.html" title="class in com.google.common.collect"><B>Ordering</B></A>&lt;<A HREF="./com/google/common/collect/Ordering.html" title="type parameter in Ordering">T</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A comparator with added methods to support common functions.<DT><A HREF="./com/google/common/collect/Ordering.html#Ordering()"><B>Ordering()</B></A> - 
-Constructor for class com.google.common.collect.<A HREF="./com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>
-<DD>Constructs a new instance of this class (only invokable by the subclass
- constructor, typically implicit).
-<DT><A HREF="./com/google/common/io/OutputSupplier.html" title="interface in com.google.common.io"><B>OutputSupplier</B></A>&lt;<A HREF="./com/google/common/io/OutputSupplier.html" title="type parameter in OutputSupplier">T</A>&gt; - Interface in <A HREF="./com/google/common/io/package-summary.html">com.google.common.io</A><DD>An factory for writable streams of bytes or characters.</DL>
-<HR>
-<A NAME="_P_"><!-- --></A><H2>
-<B>P</B></H2>
-<DL>
-<DT><A HREF="./com/google/common/collect/Iterables.html#paddedPartition(java.lang.Iterable, int)"><B>paddedPartition(Iterable&lt;T&gt;, int)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
-<DD>Divides an iterable into unmodifiable sublists of the given size, padding
- the final iterable with null values if necessary.
-<DT><A HREF="./com/google/common/collect/Iterators.html#paddedPartition(java.util.Iterator, int)"><B>paddedPartition(Iterator&lt;T&gt;, int)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
-<DD>Divides an iterator into unmodifiable sublists of the given size, padding
- the final iterator with null values if necessary.
-<DT><A HREF="./com/google/common/collect/Iterables.html#partition(java.lang.Iterable, int)"><B>partition(Iterable&lt;T&gt;, int)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
-<DD>Divides an iterable into unmodifiable sublists of the given size (the final
- iterable may be smaller).
-<DT><A HREF="./com/google/common/collect/Iterators.html#partition(java.util.Iterator, int)"><B>partition(Iterator&lt;T&gt;, int)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
-<DD>Divides an iterator into unmodifiable sublists of the given size (the final
- list may be smaller).
-<DT><A HREF="./com/google/common/collect/Lists.html#partition(java.util.List, int)"><B>partition(List&lt;T&gt;, int)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Lists.html" title="class in com.google.common.collect">Lists</A>
-<DD>Returns consecutive <A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true#subList(int, int)" title="class or interface in java.util">sublists</A> of a list,
- each of the same size (the final list may be smaller).
-<DT><A HREF="./com/google/common/io/PatternFilenameFilter.html" title="class in com.google.common.io"><B>PatternFilenameFilter</B></A> - Class in <A HREF="./com/google/common/io/package-summary.html">com.google.common.io</A><DD>File name filter that only accepts files matching a regular expression.<DT><A HREF="./com/google/common/io/PatternFilenameFilter.html#PatternFilenameFilter(java.lang.String)"><B>PatternFilenameFilter(String)</B></A> - 
-Constructor for class com.google.common.io.<A HREF="./com/google/common/io/PatternFilenameFilter.html" title="class in com.google.common.io">PatternFilenameFilter</A>
-<DD>Constructs a pattern file name filter object.
-<DT><A HREF="./com/google/common/io/PatternFilenameFilter.html#PatternFilenameFilter(java.util.regex.Pattern)"><B>PatternFilenameFilter(Pattern)</B></A> - 
-Constructor for class com.google.common.io.<A HREF="./com/google/common/io/PatternFilenameFilter.html" title="class in com.google.common.io">PatternFilenameFilter</A>
-<DD>Constructs a pattern file name filter object.
-<DT><A HREF="./com/google/common/collect/AbstractIterator.html#peek()"><B>peek()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/AbstractIterator.html" title="class in com.google.common.collect">AbstractIterator</A>
-<DD>Returns the next element in the iteration without advancing the iteration,
- according to the contract of <A HREF="./com/google/common/collect/PeekingIterator.html#peek()"><CODE>PeekingIterator.peek()</CODE></A>.
-<DT><A HREF="./com/google/common/collect/ForwardingQueue.html#peek()"><B>peek()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingQueue.html" title="class in com.google.common.collect">ForwardingQueue</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/PeekingIterator.html#peek()"><B>peek()</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/PeekingIterator.html" title="interface in com.google.common.collect">PeekingIterator</A>
-<DD>Returns the next element in the iteration, without advancing the iteration.
-<DT><A HREF="./com/google/common/collect/Iterators.html#peekingIterator(java.util.Iterator)"><B>peekingIterator(Iterator&lt;? extends T&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
-<DD>Returns a <code>PeekingIterator</code> backed by the given iterator.
-<DT><A HREF="./com/google/common/collect/PeekingIterator.html" title="interface in com.google.common.collect"><B>PeekingIterator</B></A>&lt;<A HREF="./com/google/common/collect/PeekingIterator.html" title="type parameter in PeekingIterator">E</A>&gt; - Interface in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>An iterator that supports a one-element lookahead while iterating.<DT><A HREF="./com/google/common/collect/ForwardingQueue.html#poll()"><B>poll()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingQueue.html" title="class in com.google.common.collect">ForwardingQueue</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/base/CharMatcher.html#precomputed()"><B>precomputed()</B></A> - 
-Method in class com.google.common.base.<A HREF="./com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>
-<DD>Returns a <code>char</code> matcher functionally equivalent to this one, but
- which may be faster to query than the original; your mileage may vary.
-<DT><A HREF="./com/google/common/base/Preconditions.html" title="class in com.google.common.base"><B>Preconditions</B></A> - Class in <A HREF="./com/google/common/base/package-summary.html">com.google.common.base</A><DD>Simple static methods to be called at the start of your own methods to verify
- correct arguments and state.<DT><A HREF="./com/google/common/base/Predicate.html" title="interface in com.google.common.base"><B>Predicate</B></A>&lt;<A HREF="./com/google/common/base/Predicate.html" title="type parameter in Predicate">T</A>&gt; - Interface in <A HREF="./com/google/common/base/package-summary.html">com.google.common.base</A><DD>Determines a true or false value for a given input.<DT><A HREF="./com/google/common/base/Predicates.html" title="class in com.google.common.base"><B>Predicates</B></A> - Class in <A HREF="./com/google/common/base/package-summary.html">com.google.common.base</A><DD>Contains static factory methods for creating <code>Predicate</code> instances.<DT><A HREF="./com/google/common/collect/ForwardingListIterator.html#previous()"><B>previous()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingListIterator.html" title="class in com.google.common.collect">ForwardingListIterator</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingListIterator.html#previousIndex()"><B>previousIndex()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingListIterator.html" title="class in com.google.common.collect">ForwardingListIterator</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/primitives/Primitives.html#PRIMITIVE_TO_WRAPPER_TYPE"><B>PRIMITIVE_TO_WRAPPER_TYPE</B></A> - 
-Static variable in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Primitives.html" title="class in com.google.common.primitives">Primitives</A>
-<DD>A map from primitive types to their corresponding wrapper types.
-<DT><A HREF="./com/google/common/primitives/Primitives.html#PRIMITIVE_TYPES"><B>PRIMITIVE_TYPES</B></A> - 
-Static variable in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Primitives.html" title="class in com.google.common.primitives">Primitives</A>
-<DD>All nine primitive types (including void).
-<DT><A HREF="./com/google/common/primitives/Primitives.html" title="class in com.google.common.primitives"><B>Primitives</B></A> - Class in <A HREF="./com/google/common/primitives/package-summary.html">com.google.common.primitives</A><DD>Contains static utility methods pertaining to primitive types and their
- corresponding wrapper types.<DT><A HREF="./com/google/common/io/ByteProcessor.html#processBytes(byte[], int, int)"><B>processBytes(byte[], int, int)</B></A> - 
-Method in interface com.google.common.io.<A HREF="./com/google/common/io/ByteProcessor.html" title="interface in com.google.common.io">ByteProcessor</A>
-<DD>This method will be called for each chunk of bytes in an
- input stream.
-<DT><A HREF="./com/google/common/io/LineProcessor.html#processLine(java.lang.String)"><B>processLine(String)</B></A> - 
-Method in interface com.google.common.io.<A HREF="./com/google/common/io/LineProcessor.html" title="interface in com.google.common.io">LineProcessor</A>
-<DD>This method will be called once for each line.
-<DT><A HREF="./com/google/common/base/Throwables.html#propagate(java.lang.Throwable)"><B>propagate(Throwable)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Throwables.html" title="class in com.google.common.base">Throwables</A>
-<DD>Propagates <code>throwable</code> as-is if it is an instance of
- <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/RuntimeException.html?is-external=true" title="class or interface in java.lang"><CODE>RuntimeException</CODE></A> or <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Error.html?is-external=true" title="class or interface in java.lang"><CODE>Error</CODE></A>, or else as a last resort, wraps
- it in a <code>RuntimeException</code> then propagates.
-<DT><A HREF="./com/google/common/base/Throwables.html#propagateIfInstanceOf(java.lang.Throwable, java.lang.Class)"><B>propagateIfInstanceOf(Throwable, Class&lt;X&gt;)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Throwables.html" title="class in com.google.common.base">Throwables</A>
-<DD>Propagates <code>throwable</code> exactly as-is, if and only if it is an
- instance of <code>declaredType</code>.
-<DT><A HREF="./com/google/common/base/Throwables.html#propagateIfPossible(java.lang.Throwable)"><B>propagateIfPossible(Throwable)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Throwables.html" title="class in com.google.common.base">Throwables</A>
-<DD>Propagates <code>throwable</code> exactly as-is, if and only if it is an
- instance of <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/RuntimeException.html?is-external=true" title="class or interface in java.lang"><CODE>RuntimeException</CODE></A> or <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Error.html?is-external=true" title="class or interface in java.lang"><CODE>Error</CODE></A>.
-<DT><A HREF="./com/google/common/base/Throwables.html#propagateIfPossible(java.lang.Throwable, java.lang.Class)"><B>propagateIfPossible(Throwable, Class&lt;X&gt;)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Throwables.html" title="class in com.google.common.base">Throwables</A>
-<DD>Propagates <code>throwable</code> exactly as-is, if and only if it is an
- instance of <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/RuntimeException.html?is-external=true" title="class or interface in java.lang"><CODE>RuntimeException</CODE></A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Error.html?is-external=true" title="class or interface in java.lang"><CODE>Error</CODE></A>, or
- <code>declaredType</code>.
-<DT><A HREF="./com/google/common/base/Throwables.html#propagateIfPossible(java.lang.Throwable, java.lang.Class, java.lang.Class)"><B>propagateIfPossible(Throwable, Class&lt;X1&gt;, Class&lt;X2&gt;)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Throwables.html" title="class in com.google.common.base">Throwables</A>
-<DD>Propagates <code>throwable</code> exactly as-is, if and only if it is an
- instance of <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/RuntimeException.html?is-external=true" title="class or interface in java.lang"><CODE>RuntimeException</CODE></A>, <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Error.html?is-external=true" title="class or interface in java.lang"><CODE>Error</CODE></A>, <code>aDeclaredType</code>,
- or <code>anotherDeclaredType</code>.
-<DT><A HREF="./com/google/common/collect/BiMap.html#put(K, V)"><B>put(K, V)</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>
-<DD>
-<DT><A HREF="./com/google/common/collect/EnumHashBiMap.html#put(K, V)"><B>put(K, V)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect">EnumHashBiMap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingMap.html#put(K, V)"><B>put(K, V)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingMultimap.html#put(K, V)"><B>put(K, V)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect">ForwardingMultimap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/HashBiMap.html#put(K, V)"><B>put(K, V)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect">HashBiMap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableBiMap.Builder.html#put(K, V)"><B>put(K, V)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect">ImmutableBiMap.Builder</A>
-<DD>Associates <code>key</code> with <code>value</code> in the built bimap.
-<DT><A HREF="./com/google/common/collect/ImmutableClassToInstanceMap.Builder.html#put(java.lang.Class, T)"><B>put(Class&lt;T&gt;, T)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap.Builder</A>
-<DD>Associates <code>key</code> with <code>value</code> in the built map.
-<DT><A HREF="./com/google/common/collect/ImmutableListMultimap.Builder.html#put(K, V)"><B>put(K, V)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder</A>
-<DD>Adds a key-value mapping to the built multimap.
-<DT><A HREF="./com/google/common/collect/ImmutableMap.Builder.html#put(K, V)"><B>put(K, V)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">ImmutableMap.Builder</A>
-<DD>Associates <code>key</code> with <code>value</code> in the built map.
-<DT><A HREF="./com/google/common/collect/ImmutableMap.html#put(K, V)"><B>put(K, V)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>
-<DD>Guaranteed to throw an exception and leave the map unmodified.
-<DT><A HREF="./com/google/common/collect/ImmutableMultimap.Builder.html#put(K, V)"><B>put(K, V)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>
-<DD>Adds a key-value mapping to the built multimap.
-<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html#put(K, V)"><B>put(K, V)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
-<DD>Guaranteed to throw an exception and leave the multimap unmodified.
-<DT><A HREF="./com/google/common/collect/ImmutableSetMultimap.Builder.html#put(K, V)"><B>put(K, V)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder</A>
-<DD>Adds a key-value mapping to the built multimap if it is not already
- present.
-<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.Builder.html#put(K, V)"><B>put(K, V)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect">ImmutableSortedMap.Builder</A>
-<DD>Associates <code>key</code> with <code>value</code> in the built map.
-<DT><A HREF="./com/google/common/collect/LinkedListMultimap.html#put(K, V)"><B>put(K, V)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>
-<DD>Stores a key-value pair in the multimap.
-<DT><A HREF="./com/google/common/collect/Multimap.html#put(K, V)"><B>put(K, V)</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>
-<DD>Stores a key-value pair in the multimap.
-<DT><A HREF="./com/google/common/collect/BiMap.html#putAll(java.util.Map)"><B>putAll(Map&lt;? extends K, ? extends V&gt;)</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>
-<DD>
-<DT><A HREF="./com/google/common/collect/ForwardingMap.html#putAll(java.util.Map)"><B>putAll(Map&lt;? extends K, ? extends V&gt;)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingMultimap.html#putAll(K, java.lang.Iterable)"><B>putAll(K, Iterable&lt;? extends V&gt;)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect">ForwardingMultimap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingMultimap.html#putAll(com.google.common.collect.Multimap)"><B>putAll(Multimap&lt;? extends K, ? extends V&gt;)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect">ForwardingMultimap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableBiMap.Builder.html#putAll(java.util.Map)"><B>putAll(Map&lt;? extends K, ? extends V&gt;)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect">ImmutableBiMap.Builder</A>
-<DD>Associates all of the given map's keys and values in the built bimap.
-<DT><A HREF="./com/google/common/collect/ImmutableClassToInstanceMap.Builder.html#putAll(java.util.Map)"><B>putAll(Map&lt;? extends Class&lt;? extends T&gt;, ? extends T&gt;)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap.Builder</A>
-<DD>Associates all of <code>map's</code> keys and values in the built map.
-<DT><A HREF="./com/google/common/collect/ImmutableListMultimap.Builder.html#putAll(K, java.lang.Iterable)"><B>putAll(K, Iterable&lt;? extends V&gt;)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder</A>
-<DD>Stores a collection of values with the same key in the built multimap.
-<DT><A HREF="./com/google/common/collect/ImmutableListMultimap.Builder.html#putAll(K, V...)"><B>putAll(K, V...)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder</A>
-<DD>Stores an array of values with the same key in the built multimap.
-<DT><A HREF="./com/google/common/collect/ImmutableListMultimap.Builder.html#putAll(com.google.common.collect.Multimap)"><B>putAll(Multimap&lt;? extends K, ? extends V&gt;)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect">ImmutableListMultimap.Builder</A>
-<DD>Stores another multimap's entries in the built multimap.
-<DT><A HREF="./com/google/common/collect/ImmutableMap.Builder.html#putAll(java.util.Map)"><B>putAll(Map&lt;? extends K, ? extends V&gt;)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect">ImmutableMap.Builder</A>
-<DD>Associates all of the given map's keys and values in the built map.
-<DT><A HREF="./com/google/common/collect/ImmutableMap.html#putAll(java.util.Map)"><B>putAll(Map&lt;? extends K, ? extends V&gt;)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>
-<DD>Guaranteed to throw an exception and leave the map unmodified.
-<DT><A HREF="./com/google/common/collect/ImmutableMultimap.Builder.html#putAll(K, java.lang.Iterable)"><B>putAll(K, Iterable&lt;? extends V&gt;)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>
-<DD>Stores a collection of values with the same key in the built multimap.
-<DT><A HREF="./com/google/common/collect/ImmutableMultimap.Builder.html#putAll(K, V...)"><B>putAll(K, V...)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>
-<DD>Stores an array of values with the same key in the built multimap.
-<DT><A HREF="./com/google/common/collect/ImmutableMultimap.Builder.html#putAll(com.google.common.collect.Multimap)"><B>putAll(Multimap&lt;? extends K, ? extends V&gt;)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect">ImmutableMultimap.Builder</A>
-<DD>Stores another multimap's entries in the built multimap.
-<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html#putAll(K, java.lang.Iterable)"><B>putAll(K, Iterable&lt;? extends V&gt;)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
-<DD>Guaranteed to throw an exception and leave the multimap unmodified.
-<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html#putAll(com.google.common.collect.Multimap)"><B>putAll(Multimap&lt;? extends K, ? extends V&gt;)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
-<DD>Guaranteed to throw an exception and leave the multimap unmodified.
-<DT><A HREF="./com/google/common/collect/ImmutableSetMultimap.Builder.html#putAll(K, java.lang.Iterable)"><B>putAll(K, Iterable&lt;? extends V&gt;)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder</A>
-<DD>Stores a collection of values with the same key in the built multimap.
-<DT><A HREF="./com/google/common/collect/ImmutableSetMultimap.Builder.html#putAll(K, V...)"><B>putAll(K, V...)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder</A>
-<DD>Stores an array of values with the same key in the built multimap.
-<DT><A HREF="./com/google/common/collect/ImmutableSetMultimap.Builder.html#putAll(com.google.common.collect.Multimap)"><B>putAll(Multimap&lt;? extends K, ? extends V&gt;)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect">ImmutableSetMultimap.Builder</A>
-<DD>Stores another multimap's entries in the built multimap.
-<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.Builder.html#putAll(java.util.Map)"><B>putAll(Map&lt;? extends K, ? extends V&gt;)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect">ImmutableSortedMap.Builder</A>
-<DD>Associates all of the given map's keys and values in the built map.
-<DT><A HREF="./com/google/common/collect/LinkedListMultimap.html#putAll(K, java.lang.Iterable)"><B>putAll(K, Iterable&lt;? extends V&gt;)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/LinkedListMultimap.html#putAll(com.google.common.collect.Multimap)"><B>putAll(Multimap&lt;? extends K, ? extends V&gt;)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/Multimap.html#putAll(K, java.lang.Iterable)"><B>putAll(K, Iterable&lt;? extends V&gt;)</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>
-<DD>Stores a collection of values with the same key.
-<DT><A HREF="./com/google/common/collect/Multimap.html#putAll(com.google.common.collect.Multimap)"><B>putAll(Multimap&lt;? extends K, ? extends V&gt;)</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>
-<DD>Copies all of another multimap's key-value pairs into this multimap.
-<DT><A HREF="./com/google/common/collect/ForwardingConcurrentMap.html#putIfAbsent(K, V)"><B>putIfAbsent(K, V)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingConcurrentMap.html" title="class in com.google.common.collect">ForwardingConcurrentMap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ClassToInstanceMap.html#putInstance(java.lang.Class, T)"><B>putInstance(Class&lt;T&gt;, T)</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect">ClassToInstanceMap</A>
-<DD>Maps the specified class to the specified value.
-<DT><A HREF="./com/google/common/collect/ImmutableClassToInstanceMap.html#putInstance(java.lang.Class, T)"><B>putInstance(Class&lt;T&gt;, T)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect">ImmutableClassToInstanceMap</A>
-<DD>Guaranteed to throw an exception and leave the map unmodified.
-<DT><A HREF="./com/google/common/collect/MutableClassToInstanceMap.html#putInstance(java.lang.Class, T)"><B>putInstance(Class&lt;T&gt;, T)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect">MutableClassToInstanceMap</A>
-<DD>&nbsp;
-</DL>
-<HR>
-<A NAME="_R_"><!-- --></A><H2>
-<B>R</B></H2>
-<DL>
-<DT><A HREF="./com/google/common/io/ByteStreams.html#read(java.io.InputStream, byte[], int, int)"><B>read(InputStream, byte[], int, int)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/ByteStreams.html" title="class in com.google.common.io">ByteStreams</A>
-<DD>Reads some bytes from an input stream and stores them into the buffer array
- <code>b</code>.
-<DT><A HREF="./com/google/common/io/CountingInputStream.html#read()"><B>read()</B></A> - 
-Method in class com.google.common.io.<A HREF="./com/google/common/io/CountingInputStream.html" title="class in com.google.common.io">CountingInputStream</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/io/CountingInputStream.html#read(byte[], int, int)"><B>read(byte[], int, int)</B></A> - 
-Method in class com.google.common.io.<A HREF="./com/google/common/io/CountingInputStream.html" title="class in com.google.common.io">CountingInputStream</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/io/LimitInputStream.html#read()"><B>read()</B></A> - 
-Method in class com.google.common.io.<A HREF="./com/google/common/io/LimitInputStream.html" title="class in com.google.common.io">LimitInputStream</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/io/LimitInputStream.html#read(byte[], int, int)"><B>read(byte[], int, int)</B></A> - 
-Method in class com.google.common.io.<A HREF="./com/google/common/io/LimitInputStream.html" title="class in com.google.common.io">LimitInputStream</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/io/ByteArrayDataInput.html#readBoolean()"><B>readBoolean()</B></A> - 
-Method in interface com.google.common.io.<A HREF="./com/google/common/io/ByteArrayDataInput.html" title="interface in com.google.common.io">ByteArrayDataInput</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/io/ByteArrayDataInput.html#readByte()"><B>readByte()</B></A> - 
-Method in interface com.google.common.io.<A HREF="./com/google/common/io/ByteArrayDataInput.html" title="interface in com.google.common.io">ByteArrayDataInput</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/io/ByteStreams.html#readBytes(com.google.common.io.InputSupplier, com.google.common.io.ByteProcessor)"><B>readBytes(InputSupplier&lt;? extends InputStream&gt;, ByteProcessor&lt;T&gt;)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/ByteStreams.html" title="class in com.google.common.io">ByteStreams</A>
-<DD>Process the bytes of a supplied stream
-<DT><A HREF="./com/google/common/io/Files.html#readBytes(java.io.File, com.google.common.io.ByteProcessor)"><B>readBytes(File, ByteProcessor&lt;T&gt;)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/Files.html" title="class in com.google.common.io">Files</A>
-<DD>Process the bytes of a file.
-<DT><A HREF="./com/google/common/io/ByteArrayDataInput.html#readChar()"><B>readChar()</B></A> - 
-Method in interface com.google.common.io.<A HREF="./com/google/common/io/ByteArrayDataInput.html" title="interface in com.google.common.io">ByteArrayDataInput</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/io/ByteArrayDataInput.html#readDouble()"><B>readDouble()</B></A> - 
-Method in interface com.google.common.io.<A HREF="./com/google/common/io/ByteArrayDataInput.html" title="interface in com.google.common.io">ByteArrayDataInput</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/io/CharStreams.html#readFirstLine(com.google.common.io.InputSupplier)"><B>readFirstLine(InputSupplier&lt;R&gt;)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/CharStreams.html" title="class in com.google.common.io">CharStreams</A>
-<DD>Reads the first line from a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang"><CODE>Readable</CODE></A> & <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io"><CODE>Closeable</CODE></A> object
- supplied by a factory.
-<DT><A HREF="./com/google/common/io/Files.html#readFirstLine(java.io.File, java.nio.charset.Charset)"><B>readFirstLine(File, Charset)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/Files.html" title="class in com.google.common.io">Files</A>
-<DD>Reads the first line from a file.
-<DT><A HREF="./com/google/common/io/ByteArrayDataInput.html#readFloat()"><B>readFloat()</B></A> - 
-Method in interface com.google.common.io.<A HREF="./com/google/common/io/ByteArrayDataInput.html" title="interface in com.google.common.io">ByteArrayDataInput</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/io/ByteArrayDataInput.html#readFully(byte[])"><B>readFully(byte[])</B></A> - 
-Method in interface com.google.common.io.<A HREF="./com/google/common/io/ByteArrayDataInput.html" title="interface in com.google.common.io">ByteArrayDataInput</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/io/ByteArrayDataInput.html#readFully(byte[], int, int)"><B>readFully(byte[], int, int)</B></A> - 
-Method in interface com.google.common.io.<A HREF="./com/google/common/io/ByteArrayDataInput.html" title="interface in com.google.common.io">ByteArrayDataInput</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/io/ByteStreams.html#readFully(java.io.InputStream, byte[])"><B>readFully(InputStream, byte[])</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/ByteStreams.html" title="class in com.google.common.io">ByteStreams</A>
-<DD>Attempts to read enough bytes from the stream to fill the given byte array,
- with the same behavior as <A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataInput.html?is-external=true#readFully(byte[])" title="class or interface in java.io"><CODE>DataInput.readFully(byte[])</CODE></A>.
-<DT><A HREF="./com/google/common/io/ByteStreams.html#readFully(java.io.InputStream, byte[], int, int)"><B>readFully(InputStream, byte[], int, int)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/ByteStreams.html" title="class in com.google.common.io">ByteStreams</A>
-<DD>Attempts to read <code>len</code> bytes from the stream into the given array
- starting at <code>off</code>, with the same behavior as
- <A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataInput.html?is-external=true#readFully(byte[], int, int)" title="class or interface in java.io"><CODE>DataInput.readFully(byte[], int, int)</CODE></A>.
-<DT><A HREF="./com/google/common/io/ByteArrayDataInput.html#readInt()"><B>readInt()</B></A> - 
-Method in interface com.google.common.io.<A HREF="./com/google/common/io/ByteArrayDataInput.html" title="interface in com.google.common.io">ByteArrayDataInput</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/io/ByteArrayDataInput.html#readLine()"><B>readLine()</B></A> - 
-Method in interface com.google.common.io.<A HREF="./com/google/common/io/ByteArrayDataInput.html" title="interface in com.google.common.io">ByteArrayDataInput</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/io/LineReader.html#readLine()"><B>readLine()</B></A> - 
-Method in class com.google.common.io.<A HREF="./com/google/common/io/LineReader.html" title="class in com.google.common.io">LineReader</A>
-<DD>Reads a line of text.
-<DT><A HREF="./com/google/common/io/CharStreams.html#readLines(com.google.common.io.InputSupplier)"><B>readLines(InputSupplier&lt;R&gt;)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/CharStreams.html" title="class in com.google.common.io">CharStreams</A>
-<DD>Reads all of the lines from a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang"><CODE>Readable</CODE></A> & <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io"><CODE>Closeable</CODE></A> object
- supplied by a factory.
-<DT><A HREF="./com/google/common/io/CharStreams.html#readLines(java.lang.Readable)"><B>readLines(Readable)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/CharStreams.html" title="class in com.google.common.io">CharStreams</A>
-<DD>Reads all of the lines from a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang"><CODE>Readable</CODE></A> object.
-<DT><A HREF="./com/google/common/io/CharStreams.html#readLines(com.google.common.io.InputSupplier, com.google.common.io.LineProcessor)"><B>readLines(InputSupplier&lt;R&gt;, LineProcessor&lt;T&gt;)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/CharStreams.html" title="class in com.google.common.io">CharStreams</A>
-<DD>Streams lines from a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang"><CODE>Readable</CODE></A> and <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io"><CODE>Closeable</CODE></A> object
- supplied by a factory, stopping when our callback returns false, or we
- have read all of the lines.
-<DT><A HREF="./com/google/common/io/Files.html#readLines(java.io.File, java.nio.charset.Charset)"><B>readLines(File, Charset)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/Files.html" title="class in com.google.common.io">Files</A>
-<DD>Reads all of the lines from a file.
-<DT><A HREF="./com/google/common/io/Files.html#readLines(java.io.File, java.nio.charset.Charset, com.google.common.io.LineProcessor)"><B>readLines(File, Charset, LineProcessor&lt;T&gt;)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/Files.html" title="class in com.google.common.io">Files</A>
-<DD>Streams lines from a <A HREF="http://java.sun.com/javase/6/docs/api/java/io/File.html?is-external=true" title="class or interface in java.io"><CODE>File</CODE></A>, stopping when our callback returns
- false, or we have read all of the lines.
-<DT><A HREF="./com/google/common/io/Resources.html#readLines(java.net.URL, java.nio.charset.Charset, com.google.common.io.LineProcessor)"><B>readLines(URL, Charset, LineProcessor&lt;T&gt;)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/Resources.html" title="class in com.google.common.io">Resources</A>
-<DD>Streams lines from a URL, stopping when our callback returns false, or we
- have read all of the lines.
-<DT><A HREF="./com/google/common/io/Resources.html#readLines(java.net.URL, java.nio.charset.Charset)"><B>readLines(URL, Charset)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/Resources.html" title="class in com.google.common.io">Resources</A>
-<DD>Reads all of the lines from a URL.
-<DT><A HREF="./com/google/common/io/ByteArrayDataInput.html#readLong()"><B>readLong()</B></A> - 
-Method in interface com.google.common.io.<A HREF="./com/google/common/io/ByteArrayDataInput.html" title="interface in com.google.common.io">ByteArrayDataInput</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/io/ByteArrayDataInput.html#readShort()"><B>readShort()</B></A> - 
-Method in interface com.google.common.io.<A HREF="./com/google/common/io/ByteArrayDataInput.html" title="interface in com.google.common.io">ByteArrayDataInput</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/io/ByteArrayDataInput.html#readUnsignedByte()"><B>readUnsignedByte()</B></A> - 
-Method in interface com.google.common.io.<A HREF="./com/google/common/io/ByteArrayDataInput.html" title="interface in com.google.common.io">ByteArrayDataInput</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/io/ByteArrayDataInput.html#readUnsignedShort()"><B>readUnsignedShort()</B></A> - 
-Method in interface com.google.common.io.<A HREF="./com/google/common/io/ByteArrayDataInput.html" title="interface in com.google.common.io">ByteArrayDataInput</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/io/ByteArrayDataInput.html#readUTF()"><B>readUTF()</B></A> - 
-Method in interface com.google.common.io.<A HREF="./com/google/common/io/ByteArrayDataInput.html" title="interface in com.google.common.io">ByteArrayDataInput</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ConcurrentHashMultiset.html#remove(java.lang.Object, int)"><B>remove(Object, int)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect">ConcurrentHashMultiset</A>
-<DD>Removes a number of occurrences of the specified element from this
- multiset.
-<DT><A HREF="./com/google/common/collect/ForwardingCollection.html#remove(java.lang.Object)"><B>remove(Object)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingConcurrentMap.html#remove(java.lang.Object, java.lang.Object)"><B>remove(Object, Object)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingConcurrentMap.html" title="class in com.google.common.collect">ForwardingConcurrentMap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingIterator.html#remove()"><B>remove()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingIterator.html" title="class in com.google.common.collect">ForwardingIterator</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingList.html#remove(int)"><B>remove(int)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect">ForwardingList</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingMap.html#remove(java.lang.Object)"><B>remove(Object)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingMultimap.html#remove(java.lang.Object, java.lang.Object)"><B>remove(Object, Object)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect">ForwardingMultimap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingMultiset.html#remove(java.lang.Object, int)"><B>remove(Object, int)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect">ForwardingMultiset</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingQueue.html#remove()"><B>remove()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingQueue.html" title="class in com.google.common.collect">ForwardingQueue</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableCollection.html#remove(java.lang.Object)"><B>remove(Object)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>
-<DD>Guaranteed to throw an exception and leave the collection unmodified.
-<DT><A HREF="./com/google/common/collect/ImmutableList.html#remove(int)"><B>remove(int)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>
-<DD>Guaranteed to throw an exception and leave the list unmodified.
-<DT><A HREF="./com/google/common/collect/ImmutableMap.html#remove(java.lang.Object)"><B>remove(Object)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>
-<DD>Guaranteed to throw an exception and leave the map unmodified.
-<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html#remove(java.lang.Object, java.lang.Object)"><B>remove(Object, Object)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
-<DD>Guaranteed to throw an exception and leave the multimap unmodified.
-<DT><A HREF="./com/google/common/collect/ImmutableMultiset.html#remove(java.lang.Object, int)"><B>remove(Object, int)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>
-<DD>Guaranteed to throw an exception and leave the collection unmodified.
-<DT><A HREF="./com/google/common/collect/LinkedListMultimap.html#remove(java.lang.Object, java.lang.Object)"><B>remove(Object, Object)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/Multimap.html#remove(java.lang.Object, java.lang.Object)"><B>remove(Object, Object)</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>
-<DD>Removes a key-value pair from the multimap.
-<DT><A HREF="./com/google/common/collect/Multiset.html#remove(java.lang.Object, int)"><B>remove(Object, int)</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>
-<DD>Removes a number of occurrences of the specified element from this
- multiset.
-<DT><A HREF="./com/google/common/collect/Multiset.html#remove(java.lang.Object)"><B>remove(Object)</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>
-<DD>Removes a <i>single</i> occurrence of the specified element from this
- multiset, if present.
-<DT><A HREF="./com/google/common/collect/PeekingIterator.html#remove()"><B>remove()</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/PeekingIterator.html" title="interface in com.google.common.collect">PeekingIterator</A>
-<DD>
-<DT><A HREF="./com/google/common/collect/UnmodifiableIterator.html#remove()"><B>remove()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>
-<DD>Guaranteed to throw an exception and leave the underlying data unmodified.
-<DT><A HREF="./com/google/common/collect/ForwardingCollection.html#removeAll(java.util.Collection)"><B>removeAll(Collection&lt;?&gt;)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingMultimap.html#removeAll(java.lang.Object)"><B>removeAll(Object)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect">ForwardingMultimap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableCollection.html#removeAll(java.util.Collection)"><B>removeAll(Collection&lt;?&gt;)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>
-<DD>Guaranteed to throw an exception and leave the collection unmodified.
-<DT><A HREF="./com/google/common/collect/ImmutableListMultimap.html#removeAll(java.lang.Object)"><B>removeAll(Object)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>
-<DD>Guaranteed to throw an exception and leave the multimap unmodified.
-<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html#removeAll(java.lang.Object)"><B>removeAll(Object)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
-<DD>Guaranteed to throw an exception and leave the multimap unmodified.
-<DT><A HREF="./com/google/common/collect/ImmutableSetMultimap.html#removeAll(java.lang.Object)"><B>removeAll(Object)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>
-<DD>Guaranteed to throw an exception and leave the multimap unmodified.
-<DT><A HREF="./com/google/common/collect/Iterables.html#removeAll(java.lang.Iterable, java.util.Collection)"><B>removeAll(Iterable&lt;?&gt;, Collection&lt;?&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
-<DD>Removes, from an iterable, every element that belongs to the provided
- collection.
-<DT><A HREF="./com/google/common/collect/Iterators.html#removeAll(java.util.Iterator, java.util.Collection)"><B>removeAll(Iterator&lt;?&gt;, Collection&lt;?&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
-<DD>Traverses an iterator and removes every element that belongs to the
- provided collection.
-<DT><A HREF="./com/google/common/collect/LinkedListMultimap.html#removeAll(java.lang.Object)"><B>removeAll(Object)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>
-<DD>Removes all values associated with a given key.
-<DT><A HREF="./com/google/common/collect/ListMultimap.html#removeAll(java.lang.Object)"><B>removeAll(Object)</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>
-<DD>Removes all values associated with a given key.
-<DT><A HREF="./com/google/common/collect/Multimap.html#removeAll(java.lang.Object)"><B>removeAll(Object)</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>
-<DD>Removes all values associated with a given key.
-<DT><A HREF="./com/google/common/collect/Multiset.html#removeAll(java.util.Collection)"><B>removeAll(Collection&lt;?&gt;)</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>
-<DD>
-<DT><A HREF="./com/google/common/collect/SetMultimap.html#removeAll(java.lang.Object)"><B>removeAll(Object)</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>
-<DD>Removes all values associated with a given key.
-<DT><A HREF="./com/google/common/collect/SortedSetMultimap.html#removeAll(java.lang.Object)"><B>removeAll(Object)</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>
-<DD>Removes all values associated with a given key.
-<DT><A HREF="./com/google/common/collect/ConcurrentHashMultiset.html#removeExactly(java.lang.Object, int)"><B>removeExactly(Object, int)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect">ConcurrentHashMultiset</A>
-<DD>Removes exactly the specified number of occurrences of <code>element</code>, or
- makes no change if this is not possible.
-<DT><A HREF="./com/google/common/base/CharMatcher.html#removeFrom(java.lang.CharSequence)"><B>removeFrom(CharSequence)</B></A> - 
-Method in class com.google.common.base.<A HREF="./com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>
-<DD>Returns a string containing all non-matching characters of a character
- sequence, in order.
-<DT><A HREF="./com/google/common/collect/Iterables.html#removeIf(java.lang.Iterable, com.google.common.base.Predicate)"><B>removeIf(Iterable&lt;T&gt;, Predicate&lt;? super T&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
-<DD>Removes, from an iterable, every element that satisfies the provided
- predicate.
-<DT><A HREF="./com/google/common/collect/Iterators.html#removeIf(java.util.Iterator, com.google.common.base.Predicate)"><B>removeIf(Iterator&lt;T&gt;, Predicate&lt;? super T&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
-<DD>Removes every element that satisfies the provided predicate from the
- iterator.
-<DT><A HREF="./com/google/common/collect/ForwardingConcurrentMap.html#replace(K, V)"><B>replace(K, V)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingConcurrentMap.html" title="class in com.google.common.collect">ForwardingConcurrentMap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingConcurrentMap.html#replace(K, V, V)"><B>replace(K, V, V)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingConcurrentMap.html" title="class in com.google.common.collect">ForwardingConcurrentMap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/base/CharMatcher.html#replaceFrom(java.lang.CharSequence, char)"><B>replaceFrom(CharSequence, char)</B></A> - 
-Method in class com.google.common.base.<A HREF="./com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>
-<DD>Returns a string copy of the input character sequence, with each character
- that matches this matcher replaced by a given replacement character.
-<DT><A HREF="./com/google/common/base/CharMatcher.html#replaceFrom(java.lang.CharSequence, java.lang.CharSequence)"><B>replaceFrom(CharSequence, CharSequence)</B></A> - 
-Method in class com.google.common.base.<A HREF="./com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>
-<DD>Returns a string copy of the input character sequence, with each character
- that matches this matcher replaced by a given replacement sequence.
-<DT><A HREF="./com/google/common/collect/ForwardingMultimap.html#replaceValues(K, java.lang.Iterable)"><B>replaceValues(K, Iterable&lt;? extends V&gt;)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect">ForwardingMultimap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableListMultimap.html#replaceValues(K, java.lang.Iterable)"><B>replaceValues(K, Iterable&lt;? extends V&gt;)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">ImmutableListMultimap</A>
-<DD>Guaranteed to throw an exception and leave the multimap unmodified.
-<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html#replaceValues(K, java.lang.Iterable)"><B>replaceValues(K, Iterable&lt;? extends V&gt;)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
-<DD>Guaranteed to throw an exception and leave the multimap unmodified.
-<DT><A HREF="./com/google/common/collect/ImmutableSetMultimap.html#replaceValues(K, java.lang.Iterable)"><B>replaceValues(K, Iterable&lt;? extends V&gt;)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">ImmutableSetMultimap</A>
-<DD>Guaranteed to throw an exception and leave the multimap unmodified.
-<DT><A HREF="./com/google/common/collect/LinkedHashMultimap.html#replaceValues(K, java.lang.Iterable)"><B>replaceValues(K, Iterable&lt;? extends V&gt;)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect">LinkedHashMultimap</A>
-<DD>Stores a collection of values with the same key, replacing any existing
- values for that key.
-<DT><A HREF="./com/google/common/collect/LinkedListMultimap.html#replaceValues(K, java.lang.Iterable)"><B>replaceValues(K, Iterable&lt;? extends V&gt;)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>
-<DD>Stores a collection of values with the same key, replacing any existing
- values for that key.
-<DT><A HREF="./com/google/common/collect/ListMultimap.html#replaceValues(K, java.lang.Iterable)"><B>replaceValues(K, Iterable&lt;? extends V&gt;)</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>
-<DD>Stores a collection of values with the same key, replacing any existing
- values for that key.
-<DT><A HREF="./com/google/common/collect/Multimap.html#replaceValues(K, java.lang.Iterable)"><B>replaceValues(K, Iterable&lt;? extends V&gt;)</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>
-<DD>Stores a collection of values with the same key, replacing any existing
- values for that key.
-<DT><A HREF="./com/google/common/collect/SetMultimap.html#replaceValues(K, java.lang.Iterable)"><B>replaceValues(K, Iterable&lt;? extends V&gt;)</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>
-<DD>Stores a collection of values with the same key, replacing any existing
- values for that key.
-<DT><A HREF="./com/google/common/collect/SortedSetMultimap.html#replaceValues(K, java.lang.Iterable)"><B>replaceValues(K, Iterable&lt;? extends V&gt;)</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>
-<DD>Stores a collection of values with the same key, replacing any existing
- values for that key.
-<DT><A HREF="./com/google/common/io/CountingInputStream.html#reset()"><B>reset()</B></A> - 
-Method in class com.google.common.io.<A HREF="./com/google/common/io/CountingInputStream.html" title="class in com.google.common.io">CountingInputStream</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/io/FileBackedOutputStream.html#reset()"><B>reset()</B></A> - 
-Method in class com.google.common.io.<A HREF="./com/google/common/io/FileBackedOutputStream.html" title="class in com.google.common.io">FileBackedOutputStream</A>
-<DD>Calls <A HREF="./com/google/common/io/FileBackedOutputStream.html#close()"><CODE>FileBackedOutputStream.close()</CODE></A> if not already closed, and then resets this
- object back to its initial state, for reuse.
-<DT><A HREF="./com/google/common/io/LimitInputStream.html#reset()"><B>reset()</B></A> - 
-Method in class com.google.common.io.<A HREF="./com/google/common/io/LimitInputStream.html" title="class in com.google.common.io">LimitInputStream</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/io/Resources.html" title="class in com.google.common.io"><B>Resources</B></A> - Class in <A HREF="./com/google/common/io/package-summary.html">com.google.common.io</A><DD>Provides utility methods for working with resources in the classpath.<DT><A HREF="./com/google/common/io/Resources.html#Resources()"><B>Resources()</B></A> - 
-Constructor for class com.google.common.io.<A HREF="./com/google/common/io/Resources.html" title="class in com.google.common.io">Resources</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ComparisonChain.html#result()"><B>result()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ComparisonChain.html" title="class in com.google.common.collect">ComparisonChain</A>
-<DD>Ends this comparison chain and returns its result: a value having the
- same sign as the first nonzero comparison result in the chain, or zero if
- every result was zero.
-<DT><A HREF="./com/google/common/collect/ForwardingCollection.html#retainAll(java.util.Collection)"><B>retainAll(Collection&lt;?&gt;)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableCollection.html#retainAll(java.util.Collection)"><B>retainAll(Collection&lt;?&gt;)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>
-<DD>Guaranteed to throw an exception and leave the collection unmodified.
-<DT><A HREF="./com/google/common/collect/Iterables.html#retainAll(java.lang.Iterable, java.util.Collection)"><B>retainAll(Iterable&lt;?&gt;, Collection&lt;?&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
-<DD>Removes, from an iterable, every element that does not belong to the
- provided collection.
-<DT><A HREF="./com/google/common/collect/Iterators.html#retainAll(java.util.Iterator, java.util.Collection)"><B>retainAll(Iterator&lt;?&gt;, Collection&lt;?&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
-<DD>Traverses an iterator and removes every element that does not belong to the
- provided collection.
-<DT><A HREF="./com/google/common/collect/Multiset.html#retainAll(java.util.Collection)"><B>retainAll(Collection&lt;?&gt;)</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>
-<DD>
-<DT><A HREF="./com/google/common/base/CharMatcher.html#retainFrom(java.lang.CharSequence)"><B>retainFrom(CharSequence)</B></A> - 
-Method in class com.google.common.base.<A HREF="./com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>
-<DD>Returns a string containing all matching characters of a character
- sequence, in order.
-<DT><A HREF="./com/google/common/util/concurrent/Callables.html#returning(T)"><B>returning(T)</B></A> - 
-Static method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/Callables.html" title="class in com.google.common.util.concurrent">Callables</A>
-<DD>Creates a <code>Callable</code> which immediately returns a preset value each
- time it is called.
-<DT><A HREF="./com/google/common/collect/Iterables.html#reverse(java.util.List)"><B>reverse(List&lt;T&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
-<DD>Adapts a list to an iterable with reversed iteration order.
-<DT><A HREF="./com/google/common/collect/Ordering.html#reverse()"><B>reverse()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>
-<DD>Returns the reverse of this ordering; the <code>Ordering</code> equivalent to
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collections.html?is-external=true#reverseOrder(java.util.Comparator)" title="class or interface in java.util"><CODE>Collections.reverseOrder(Comparator)</CODE></A>.
-<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.html#reverseOrder()"><B>reverseOrder()</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>
-<DD>Returns a builder that creates immutable sorted maps whose keys are
- ordered by the reverse of their natural ordering.
-<DT><A HREF="./com/google/common/collect/ImmutableSortedSet.html#reverseOrder()"><B>reverseOrder()</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>
-<DD>Returns a builder that creates immutable sorted sets whose elements are
- ordered by the reverse of their natural ordering.
-<DT><A HREF="./com/google/common/collect/MapDifference.ValueDifference.html#rightValue()"><B>rightValue()</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/MapDifference.ValueDifference.html" title="interface in com.google.common.collect">MapDifference.ValueDifference</A>
-<DD>Returns the value from the right map (possibly null).
-<DT><A HREF="./com/google/common/util/concurrent/AbstractExecutionThreadService.html#run()"><B>run()</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractExecutionThreadService.html" title="class in com.google.common.util.concurrent">AbstractExecutionThreadService</A>
-<DD>Run the service.
-<DT><A HREF="./com/google/common/util/concurrent/ExecutionList.html#run()"><B>run()</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/ExecutionList.html" title="class in com.google.common.util.concurrent">ExecutionList</A>
-<DD>Runs this execution list, executing all pairs in the order they were
- added.
-</DL>
-<HR>
-<A NAME="_S_"><!-- --></A><H2>
-<B>S</B></H2>
-<DL>
-<DT><A HREF="./com/google/common/util/concurrent/Executors.html#sameThreadExecutor()"><B>sameThreadExecutor()</B></A> - 
-Static method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/Executors.html" title="class in com.google.common.util.concurrent">Executors</A>
-<DD>Creates an executor service that runs each task in the thread
- that invokes <code>execute/submit</code>, as in <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadPoolExecutor.CallerRunsPolicy.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ThreadPoolExecutor.CallerRunsPolicy</CODE></A>  This
- applies both to individually submitted tasks and to collections of tasks
- submitted via <code>invokeAll</code> or <code>invokeAny</code>.
-<DT><A HREF="./com/google/common/primitives/Chars.html#saturatedCast(long)"><B>saturatedCast(long)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Chars.html" title="class in com.google.common.primitives">Chars</A>
-<DD>Returns the <code>char</code> nearest in value to <code>value</code>.
-<DT><A HREF="./com/google/common/primitives/Ints.html#saturatedCast(long)"><B>saturatedCast(long)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Ints.html" title="class in com.google.common.primitives">Ints</A>
-<DD>Returns the <code>int</code> nearest in value to <code>value</code>.
-<DT><A HREF="./com/google/common/primitives/Shorts.html#saturatedCast(long)"><B>saturatedCast(long)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Shorts.html" title="class in com.google.common.primitives">Shorts</A>
-<DD>Returns the <code>short</code> nearest in value to <code>value</code>.
-<DT><A HREF="./com/google/common/primitives/SignedBytes.html#saturatedCast(long)"><B>saturatedCast(long)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/SignedBytes.html" title="class in com.google.common.primitives">SignedBytes</A>
-<DD>Returns the <code>byte</code> nearest in value to <code>value</code>.
-<DT><A HREF="./com/google/common/primitives/UnsignedBytes.html#saturatedCast(long)"><B>saturatedCast(long)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/UnsignedBytes.html" title="class in com.google.common.primitives">UnsignedBytes</A>
-<DD>Returns the <code>byte</code> value that, when treated as unsigned, is nearest
- in value to <code>value</code>.
-<DT><A HREF="./com/google/common/base/Service.html" title="interface in com.google.common.base"><B>Service</B></A> - Interface in <A HREF="./com/google/common/base/package-summary.html">com.google.common.base</A><DD>An object with an operational state, plus asynchronous <A HREF="./com/google/common/base/Service.html#start()"><CODE>Service.start()</CODE></A> and
- <A HREF="./com/google/common/base/Service.html#stop()"><CODE>Service.stop()</CODE></A> lifecycle methods to transfer into and out of this state.<DT><A HREF="./com/google/common/base/Service.State.html" title="enum in com.google.common.base"><B>Service.State</B></A> - Enum in <A HREF="./com/google/common/base/package-summary.html">com.google.common.base</A><DD>The lifecycle states of a service.<DT><A HREF="./com/google/common/collect/ForwardingList.html#set(int, E)"><B>set(int, E)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect">ForwardingList</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingListIterator.html#set(E)"><B>set(E)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingListIterator.html" title="class in com.google.common.collect">ForwardingListIterator</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableList.html#set(int, E)"><B>set(int, E)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>
-<DD>Guaranteed to throw an exception and leave the list unmodified.
-<DT><A HREF="./com/google/common/util/concurrent/AbstractFuture.html#set(V)"><B>set(V)</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractFuture.html" title="class in com.google.common.util.concurrent">AbstractFuture</A>
-<DD>Subclasses should invoke this method to set the result of the computation
- to <code>value</code>.
-<DT><A HREF="./com/google/common/util/concurrent/ValueFuture.html#set(V)"><B>set(V)</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/ValueFuture.html" title="class in com.google.common.util.concurrent">ValueFuture</A>
-<DD>Sets the value of this future.
-<DT><A HREF="./com/google/common/base/CharMatcher.html#setBits(com.google.common.base.CharMatcher.LookupTable)"><B>setBits(CharMatcher.LookupTable)</B></A> - 
-Method in class com.google.common.base.<A HREF="./com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>
-<DD>For use by implementors; sets the bit corresponding to each character ('\0'
- to '\uFFFF') that matches this matcher in the given bit array,
- leaving all other bits untouched.
-<DT><A HREF="./com/google/common/collect/ConcurrentHashMultiset.html#setCount(E, int)"><B>setCount(E, int)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect">ConcurrentHashMultiset</A>
-<DD>Adds or removes occurrences of <code>element</code> such that the <A HREF="./com/google/common/collect/ConcurrentHashMultiset.html#count(java.lang.Object)"><CODE>ConcurrentHashMultiset.count(java.lang.Object)</CODE></A>
- of the element becomes <code>count</code>.
-<DT><A HREF="./com/google/common/collect/ConcurrentHashMultiset.html#setCount(E, int, int)"><B>setCount(E, int, int)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect">ConcurrentHashMultiset</A>
-<DD>Sets the number of occurrences of <code>element</code> to <code>newCount</code>, but
- only if the count is currently <code>oldCount</code>.
-<DT><A HREF="./com/google/common/collect/ForwardingMultiset.html#setCount(E, int)"><B>setCount(E, int)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect">ForwardingMultiset</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingMultiset.html#setCount(E, int, int)"><B>setCount(E, int, int)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect">ForwardingMultiset</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableMultiset.Builder.html#setCount(E, int)"><B>setCount(E, int)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect">ImmutableMultiset.Builder</A>
-<DD>Adds or removes the necessary occurrences of an element such that the
- element attains the desired count.
-<DT><A HREF="./com/google/common/collect/ImmutableMultiset.html#setCount(E, int)"><B>setCount(E, int)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>
-<DD>Guaranteed to throw an exception and leave the collection unmodified.
-<DT><A HREF="./com/google/common/collect/ImmutableMultiset.html#setCount(E, int, int)"><B>setCount(E, int, int)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>
-<DD>Guaranteed to throw an exception and leave the collection unmodified.
-<DT><A HREF="./com/google/common/collect/Multiset.html#setCount(E, int)"><B>setCount(E, int)</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>
-<DD>Adds or removes the necessary occurrences of an element such that the
- element attains the desired count.
-<DT><A HREF="./com/google/common/collect/Multiset.html#setCount(E, int, int)"><B>setCount(E, int, int)</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>
-<DD>Conditionally sets the count of an element to a new value, as described in
- <A HREF="./com/google/common/collect/Multiset.html#setCount(E, int)"><CODE>Multiset.setCount(Object, int)</CODE></A>, provided that the element has the expected
- current count.
-<DT><A HREF="./com/google/common/util/concurrent/AbstractFuture.html#setException(java.lang.Throwable)"><B>setException(Throwable)</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractFuture.html" title="class in com.google.common.util.concurrent">AbstractFuture</A>
-<DD>Subclasses should invoke this method to set the result of the computation
- to an error, <code>throwable</code>.
-<DT><A HREF="./com/google/common/util/concurrent/ValueFuture.html#setException(java.lang.Throwable)"><B>setException(Throwable)</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/ValueFuture.html" title="class in com.google.common.util.concurrent">ValueFuture</A>
-<DD>Sets the future to having failed with the given exception.
-<DT><A HREF="./com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect"><B>SetMultimap</B></A>&lt;<A HREF="./com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">K</A>,<A HREF="./com/google/common/collect/SetMultimap.html" title="type parameter in SetMultimap">V</A>&gt; - Interface in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A <code>Multimap</code> that cannot hold duplicate key-value pairs.<DT><A HREF="./com/google/common/collect/Sets.html" title="class in com.google.common.collect"><B>Sets</B></A> - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>Static utility methods pertaining to <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util"><CODE>Set</CODE></A> instances.<DT><A HREF="./com/google/common/collect/Sets.SetView.html" title="class in com.google.common.collect"><B>Sets.SetView</B></A>&lt;<A HREF="./com/google/common/collect/Sets.SetView.html" title="type parameter in Sets.SetView">E</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>An unmodifiable view of a set which may be backed by other sets; this view
- will change as the backing sets do.<DT><A HREF="./com/google/common/collect/ForwardingMapEntry.html#setValue(V)"><B>setValue(V)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMapEntry.html" title="class in com.google.common.collect">ForwardingMapEntry</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/primitives/Shorts.html" title="class in com.google.common.primitives"><B>Shorts</B></A> - Class in <A HREF="./com/google/common/primitives/package-summary.html">com.google.common.primitives</A><DD>Static utility methods pertaining to <code>short</code> primitives, that are not
- already found in either <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Short.html?is-external=true" title="class or interface in java.lang"><CODE>Short</CODE></A> or <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Arrays.html?is-external=true" title="class or interface in java.util"><CODE>Arrays</CODE></A>.<DT><A HREF="./com/google/common/util/concurrent/AbstractExecutionThreadService.html#shutDown()"><B>shutDown()</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractExecutionThreadService.html" title="class in com.google.common.util.concurrent">AbstractExecutionThreadService</A>
-<DD>Stop the service.
-<DT><A HREF="./com/google/common/util/concurrent/AbstractIdleService.html#shutDown()"><B>shutDown()</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractIdleService.html" title="class in com.google.common.util.concurrent">AbstractIdleService</A>
-<DD>Stop the service.
-<DT><A HREF="./com/google/common/primitives/SignedBytes.html" title="class in com.google.common.primitives"><B>SignedBytes</B></A> - Class in <A HREF="./com/google/common/primitives/package-summary.html">com.google.common.primitives</A><DD>Static utility methods pertaining to <code>byte</code> primitives that
- interpret values as signed.<DT><A HREF="./com/google/common/util/concurrent/SimpleTimeLimiter.html" title="class in com.google.common.util.concurrent"><B>SimpleTimeLimiter</B></A> - Class in <A HREF="./com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A><DD>A TimeLimiter that runs method calls in the background using an
- <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>ExecutorService</CODE></A>.<DT><A HREF="./com/google/common/util/concurrent/SimpleTimeLimiter.html#SimpleTimeLimiter(java.util.concurrent.ExecutorService)"><B>SimpleTimeLimiter(ExecutorService)</B></A> - 
-Constructor for class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/SimpleTimeLimiter.html" title="class in com.google.common.util.concurrent">SimpleTimeLimiter</A>
-<DD>Constructs a TimeLimiter instance using the given executor service to
- execute proxied method calls.
-<DT><A HREF="./com/google/common/util/concurrent/SimpleTimeLimiter.html#SimpleTimeLimiter()"><B>SimpleTimeLimiter()</B></A> - 
-Constructor for class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/SimpleTimeLimiter.html" title="class in com.google.common.util.concurrent">SimpleTimeLimiter</A>
-<DD>Constructs a TimeLimiter instance using a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Executors.html?is-external=true#newCachedThreadPool()" title="class or interface in java.util.concurrent"><CODE>Executors.newCachedThreadPool()</CODE></A> to execute proxied
- method calls.
-<DT><A HREF="./com/google/common/base/CharMatcher.html#SINGLE_WIDTH"><B>SINGLE_WIDTH</B></A> - 
-Static variable in class com.google.common.base.<A HREF="./com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>
-<DD>Determines whether a character is single-width (not double-width).
-<DT><A HREF="./com/google/common/collect/Iterators.html#singletonIterator(T)"><B>singletonIterator(T)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
-<DD>Returns an iterator containing only <code>value</code>.
-<DT><A HREF="./com/google/common/collect/ConcurrentHashMultiset.html#size()"><B>size()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect">ConcurrentHashMultiset</A>
-<DD>
-<DT><A HREF="./com/google/common/collect/ForwardingCollection.html#size()"><B>size()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingMap.html#size()"><B>size()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingMultimap.html#size()"><B>size()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect">ForwardingMultimap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableBiMap.html#size()"><B>size()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html#size()"><B>size()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableMultiset.html#size()"><B>size()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.html#size()"><B>size()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/Iterables.html#size(java.lang.Iterable)"><B>size(Iterable&lt;?&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
-<DD>Returns the number of elements in <code>iterable</code>.
-<DT><A HREF="./com/google/common/collect/Iterators.html#size(java.util.Iterator)"><B>size(Iterator&lt;?&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
-<DD>Returns the number of elements remaining in <code>iterator</code>.
-<DT><A HREF="./com/google/common/collect/LinkedListMultimap.html#size()"><B>size()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/Multimap.html#size()"><B>size()</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>
-<DD>Returns the number of key-value pairs in the multimap.
-<DT><A HREF="./com/google/common/io/CountingInputStream.html#skip(long)"><B>skip(long)</B></A> - 
-Method in class com.google.common.io.<A HREF="./com/google/common/io/CountingInputStream.html" title="class in com.google.common.io">CountingInputStream</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/io/LimitInputStream.html#skip(long)"><B>skip(long)</B></A> - 
-Method in class com.google.common.io.<A HREF="./com/google/common/io/LimitInputStream.html" title="class in com.google.common.io">LimitInputStream</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/io/ByteArrayDataInput.html#skipBytes(int)"><B>skipBytes(int)</B></A> - 
-Method in interface com.google.common.io.<A HREF="./com/google/common/io/ByteArrayDataInput.html" title="interface in com.google.common.io">ByteArrayDataInput</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/io/ByteStreams.html#skipFully(java.io.InputStream, long)"><B>skipFully(InputStream, long)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/ByteStreams.html" title="class in com.google.common.io">ByteStreams</A>
-<DD>Discards <code>n</code> bytes of data from the input stream.
-<DT><A HREF="./com/google/common/io/CharStreams.html#skipFully(java.io.Reader, long)"><B>skipFully(Reader, long)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/CharStreams.html" title="class in com.google.common.io">CharStreams</A>
-<DD>Discards <code>n</code> characters of data from the reader.
-<DT><A HREF="./com/google/common/base/Joiner.html#skipNulls()"><B>skipNulls()</B></A> - 
-Method in class com.google.common.base.<A HREF="./com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A>
-<DD>Returns a joiner with the same behavior as this joiner, except
- automatically skipping over any provided null elements.
-<DT><A HREF="./com/google/common/io/ByteStreams.html#slice(com.google.common.io.InputSupplier, long, long)"><B>slice(InputSupplier&lt;? extends InputStream&gt;, long, long)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/ByteStreams.html" title="class in com.google.common.io">ByteStreams</A>
-<DD>Returns an <A HREF="./com/google/common/io/InputSupplier.html" title="interface in com.google.common.io"><CODE>InputSupplier</CODE></A> that returns input streams from the
- an underlying supplier, where each stream starts at the given
- offset and is limited to the specified number of bytes.
-<DT><A HREF="./com/google/common/collect/MapMaker.html#softKeys()"><B>softKeys()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A>
-<DD>Specifies that each key (not value) stored in the map should be
- wrapped in a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/SoftReference.html?is-external=true" title="class or interface in java.lang.ref"><CODE>SoftReference</CODE></A> (by default, strong references
- are used).
-<DT><A HREF="./com/google/common/collect/MapMaker.html#softValues()"><B>softValues()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A>
-<DD>Specifies that each value (not key) stored in the map should be
- wrapped in a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/SoftReference.html?is-external=true" title="class or interface in java.lang.ref"><CODE>SoftReference</CODE></A> (by default, strong references
- are used).
-<DT><A HREF="./com/google/common/collect/Ordering.html#sortedCopy(java.lang.Iterable)"><B>sortedCopy(Iterable&lt;E&gt;)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>
-<DD>Returns a copy of the given iterable sorted by this ordering.
-<DT><A HREF="./com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect"><B>SortedSetMultimap</B></A>&lt;<A HREF="./com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">K</A>,<A HREF="./com/google/common/collect/SortedSetMultimap.html" title="type parameter in SortedSetMultimap">V</A>&gt; - Interface in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A <code>SetMultimap</code> whose set of values for a given key are kept sorted;
- that is, they comprise a <A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util"><CODE>SortedSet</CODE></A>.<DT><A HREF="./com/google/common/base/Splitter.html#split(java.lang.CharSequence)"><B>split(CharSequence)</B></A> - 
-Method in class com.google.common.base.<A HREF="./com/google/common/base/Splitter.html" title="class in com.google.common.base">Splitter</A>
-<DD>Splits the <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/CharSequence.html?is-external=true" title="class or interface in java.lang"><CODE>CharSequence</CODE></A> passed in parameter.
-<DT><A HREF="./com/google/common/base/Splitter.html" title="class in com.google.common.base"><B>Splitter</B></A> - Class in <A HREF="./com/google/common/base/package-summary.html">com.google.common.base</A><DD>An object that divides strings (or other instances of <code>CharSequence</code>)
- into substrings, by recognizing a <i>separator</i> (a.k.a.<DT><A HREF="./com/google/common/base/Service.html#start()"><B>start()</B></A> - 
-Method in interface com.google.common.base.<A HREF="./com/google/common/base/Service.html" title="interface in com.google.common.base">Service</A>
-<DD>If the service state is <A HREF="./com/google/common/base/Service.State.html#NEW"><CODE>Service.State.NEW</CODE></A>, this initiates service startup
- and returns immediately.
-<DT><A HREF="./com/google/common/collect/ComparisonChain.html#start()"><B>start()</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/ComparisonChain.html" title="class in com.google.common.collect">ComparisonChain</A>
-<DD>Begins a new chained comparison statement.
-<DT><A HREF="./com/google/common/util/concurrent/AbstractExecutionThreadService.html#start()"><B>start()</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractExecutionThreadService.html" title="class in com.google.common.util.concurrent">AbstractExecutionThreadService</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/AbstractIdleService.html#start()"><B>start()</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractIdleService.html" title="class in com.google.common.util.concurrent">AbstractIdleService</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/AbstractService.html#start()"><B>start()</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractService.html" title="class in com.google.common.util.concurrent">AbstractService</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/ForwardingService.html#start()"><B>start()</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/ForwardingService.html" title="class in com.google.common.util.concurrent">ForwardingService</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/base/Service.html#startAndWait()"><B>startAndWait()</B></A> - 
-Method in interface com.google.common.base.<A HREF="./com/google/common/base/Service.html" title="interface in com.google.common.base">Service</A>
-<DD>Initiates service startup (if necessary), returning once the service has
- finished starting.
-<DT><A HREF="./com/google/common/util/concurrent/AbstractExecutionThreadService.html#startAndWait()"><B>startAndWait()</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractExecutionThreadService.html" title="class in com.google.common.util.concurrent">AbstractExecutionThreadService</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/AbstractIdleService.html#startAndWait()"><B>startAndWait()</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractIdleService.html" title="class in com.google.common.util.concurrent">AbstractIdleService</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/AbstractService.html#startAndWait()"><B>startAndWait()</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractService.html" title="class in com.google.common.util.concurrent">AbstractService</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/ForwardingService.html#startAndWait()"><B>startAndWait()</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/ForwardingService.html" title="class in com.google.common.util.concurrent">ForwardingService</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/AbstractExecutionThreadService.html#startUp()"><B>startUp()</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractExecutionThreadService.html" title="class in com.google.common.util.concurrent">AbstractExecutionThreadService</A>
-<DD>Start the service.
-<DT><A HREF="./com/google/common/util/concurrent/AbstractIdleService.html#startUp()"><B>startUp()</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractIdleService.html" title="class in com.google.common.util.concurrent">AbstractIdleService</A>
-<DD>Start the service.
-<DT><A HREF="./com/google/common/base/Service.html#state()"><B>state()</B></A> - 
-Method in interface com.google.common.base.<A HREF="./com/google/common/base/Service.html" title="interface in com.google.common.base">Service</A>
-<DD>Returns the lifecycle state of the service.
-<DT><A HREF="./com/google/common/util/concurrent/AbstractExecutionThreadService.html#state()"><B>state()</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractExecutionThreadService.html" title="class in com.google.common.util.concurrent">AbstractExecutionThreadService</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/AbstractIdleService.html#state()"><B>state()</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractIdleService.html" title="class in com.google.common.util.concurrent">AbstractIdleService</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/AbstractService.html#state()"><B>state()</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractService.html" title="class in com.google.common.util.concurrent">AbstractService</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/ForwardingService.html#state()"><B>state()</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/ForwardingService.html" title="class in com.google.common.util.concurrent">ForwardingService</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/base/Service.html#stop()"><B>stop()</B></A> - 
-Method in interface com.google.common.base.<A HREF="./com/google/common/base/Service.html" title="interface in com.google.common.base">Service</A>
-<DD>If the service is <A HREF="./com/google/common/base/Service.State.html#STARTING"><CODE>Service.State.STARTING</CODE></A> or <A HREF="./com/google/common/base/Service.State.html#RUNNING"><CODE>Service.State.RUNNING</CODE></A>, this
- initiates service shutdown and returns immediately.
-<DT><A HREF="./com/google/common/util/concurrent/AbstractExecutionThreadService.html#stop()"><B>stop()</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractExecutionThreadService.html" title="class in com.google.common.util.concurrent">AbstractExecutionThreadService</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/AbstractIdleService.html#stop()"><B>stop()</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractIdleService.html" title="class in com.google.common.util.concurrent">AbstractIdleService</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/AbstractService.html#stop()"><B>stop()</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractService.html" title="class in com.google.common.util.concurrent">AbstractService</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/ForwardingService.html#stop()"><B>stop()</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/ForwardingService.html" title="class in com.google.common.util.concurrent">ForwardingService</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/base/Service.html#stopAndWait()"><B>stopAndWait()</B></A> - 
-Method in interface com.google.common.base.<A HREF="./com/google/common/base/Service.html" title="interface in com.google.common.base">Service</A>
-<DD>Initiates service shutdown (if necessary), returning once the service has
- finished stopping.
-<DT><A HREF="./com/google/common/util/concurrent/AbstractExecutionThreadService.html#stopAndWait()"><B>stopAndWait()</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractExecutionThreadService.html" title="class in com.google.common.util.concurrent">AbstractExecutionThreadService</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/AbstractIdleService.html#stopAndWait()"><B>stopAndWait()</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractIdleService.html" title="class in com.google.common.util.concurrent">AbstractIdleService</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/AbstractService.html#stopAndWait()"><B>stopAndWait()</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractService.html" title="class in com.google.common.util.concurrent">AbstractService</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/ForwardingService.html#stopAndWait()"><B>stopAndWait()</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/ForwardingService.html" title="class in com.google.common.util.concurrent">ForwardingService</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingList.html#subList(int, int)"><B>subList(int, int)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect">ForwardingList</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableList.html#subList(int, int)"><B>subList(int, int)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">ImmutableList</A>
-<DD>Returns an immutable list of the elements between the specified <code>fromIndex</code>, inclusive, and <code>toIndex</code>, exclusive.
-<DT><A HREF="./com/google/common/collect/ForwardingSortedMap.html#subMap(K, K)"><B>subMap(K, K)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingSortedMap.html" title="class in com.google.common.collect">ForwardingSortedMap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.html#subMap(K, K)"><B>subMap(K, K)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>
-<DD>This method returns a <code>ImmutableSortedMap</code>, consisting of the entries
- whose keys ranges from <code>fromKey</code>, inclusive, to <code>toKey</code>,
- exclusive.
-<DT><A HREF="./com/google/common/collect/ForwardingSortedSet.html#subSet(E, E)"><B>subSet(E, E)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingSortedSet.html" title="class in com.google.common.collect">ForwardingSortedSet</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableSortedSet.html#subSet(E, E)"><B>subSet(E, E)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>
-<DD>
-<DT><A HREF="./com/google/common/base/Supplier.html" title="interface in com.google.common.base"><B>Supplier</B></A>&lt;<A HREF="./com/google/common/base/Supplier.html" title="type parameter in Supplier">T</A>&gt; - Interface in <A HREF="./com/google/common/base/package-summary.html">com.google.common.base</A><DD>A class that can supply objects of a single type.<DT><A HREF="./com/google/common/base/Suppliers.html" title="class in com.google.common.base"><B>Suppliers</B></A> - Class in <A HREF="./com/google/common/base/package-summary.html">com.google.common.base</A><DD>Useful suppliers.<DT><A HREF="./com/google/common/collect/Maps.html#synchronizedBiMap(com.google.common.collect.BiMap)"><B>synchronizedBiMap(BiMap&lt;K, V&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Maps.html" title="class in com.google.common.collect">Maps</A>
-<DD>Returns a synchronized (thread-safe) bimap backed by the specified bimap.
-<DT><A HREF="./com/google/common/collect/Multimaps.html#synchronizedListMultimap(com.google.common.collect.ListMultimap)"><B>synchronizedListMultimap(ListMultimap&lt;K, V&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Multimaps.html" title="class in com.google.common.collect">Multimaps</A>
-<DD>Returns a synchronized (thread-safe) <code>ListMultimap</code> backed by the
- specified multimap.
-<DT><A HREF="./com/google/common/collect/Multimaps.html#synchronizedMultimap(com.google.common.collect.Multimap)"><B>synchronizedMultimap(Multimap&lt;K, V&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Multimaps.html" title="class in com.google.common.collect">Multimaps</A>
-<DD>Returns a synchronized (thread-safe) multimap backed by the specified
- multimap.
-<DT><A HREF="./com/google/common/collect/Multimaps.html#synchronizedSetMultimap(com.google.common.collect.SetMultimap)"><B>synchronizedSetMultimap(SetMultimap&lt;K, V&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Multimaps.html" title="class in com.google.common.collect">Multimaps</A>
-<DD>Returns a synchronized (thread-safe) <code>SetMultimap</code> backed by the
- specified multimap.
-<DT><A HREF="./com/google/common/collect/Multimaps.html#synchronizedSortedSetMultimap(com.google.common.collect.SortedSetMultimap)"><B>synchronizedSortedSetMultimap(SortedSetMultimap&lt;K, V&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Multimaps.html" title="class in com.google.common.collect">Multimaps</A>
-<DD>Returns a synchronized (thread-safe) <code>SortedSetMultimap</code> backed by
- the specified multimap.
-<DT><A HREF="./com/google/common/base/Suppliers.html#synchronizedSupplier(com.google.common.base.Supplier)"><B>synchronizedSupplier(Supplier&lt;T&gt;)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Suppliers.html" title="class in com.google.common.base">Suppliers</A>
-<DD>Returns a supplier whose <code>get()</code> method synchronizes on
- <code>delegate</code> before calling it, making it thread-safe.
-</DL>
-<HR>
-<A NAME="_T_"><!-- --></A><H2>
-<B>T</B></H2>
-<DL>
-<DT><A HREF="./com/google/common/collect/ForwardingSortedMap.html#tailMap(K)"><B>tailMap(K)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingSortedMap.html" title="class in com.google.common.collect">ForwardingSortedMap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.html#tailMap(K)"><B>tailMap(K)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>
-<DD>This method returns a <code>ImmutableSortedMap</code>, consisting of the entries
- whose keys are greater than or equals to <code>fromKey</code>.
-<DT><A HREF="./com/google/common/collect/ForwardingSortedSet.html#tailSet(E)"><B>tailSet(E)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingSortedSet.html" title="class in com.google.common.collect">ForwardingSortedSet</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableSortedSet.html#tailSet(E)"><B>tailSet(E)</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">ImmutableSortedSet</A>
-<DD>
-<DT><A HREF="./com/google/common/base/Throwables.html" title="class in com.google.common.base"><B>Throwables</B></A> - Class in <A HREF="./com/google/common/base/package-summary.html">com.google.common.base</A><DD>Static utility methods pertaining to instances of <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang"><CODE>Throwable</CODE></A>.<DT><A HREF="./com/google/common/base/Throwables.html#throwCause(java.lang.Exception, boolean)"><B>throwCause(Exception, boolean)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Throwables.html" title="class in com.google.common.base">Throwables</A>
-<DD>Rethrows the cause exception of a given throwable, discarding the original
- throwable.
-<DT><A HREF="./com/google/common/util/concurrent/TimeLimiter.html" title="interface in com.google.common.util.concurrent"><B>TimeLimiter</B></A> - Interface in <A HREF="./com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A><DD>Produces proxies that impose a time limit on method
- calls to the proxied object.<DT><A HREF="./com/google/common/base/CaseFormat.html#to(com.google.common.base.CaseFormat, java.lang.String)"><B>to(CaseFormat, String)</B></A> - 
-Method in enum com.google.common.base.<A HREF="./com/google/common/base/CaseFormat.html" title="enum in com.google.common.base">CaseFormat</A>
-<DD>Converts the specified <code>String s</code> from this format to the specified
- <code>format</code>.
-<DT><A HREF="./com/google/common/collect/ConcurrentHashMultiset.html#toArray()"><B>toArray()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect">ConcurrentHashMultiset</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ConcurrentHashMultiset.html#toArray(T[])"><B>toArray(T[])</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect">ConcurrentHashMultiset</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingCollection.html#toArray()"><B>toArray()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingCollection.html#toArray(T[])"><B>toArray(T[])</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect">ForwardingCollection</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableCollection.html#toArray()"><B>toArray()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableCollection.html#toArray(T[])"><B>toArray(T[])</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/Iterables.html#toArray(java.lang.Iterable, java.lang.Class)"><B>toArray(Iterable&lt;? extends T&gt;, Class&lt;T&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
-<DD>Copies an iterable's elements into an array.
-<DT><A HREF="./com/google/common/collect/Iterators.html#toArray(java.util.Iterator, java.lang.Class)"><B>toArray(Iterator&lt;? extends T&gt;, Class&lt;T&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
-<DD>Copies an iterator's elements into an array.
-<DT><A HREF="./com/google/common/primitives/Booleans.html#toArray(java.util.Collection)"><B>toArray(Collection&lt;Boolean&gt;)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Booleans.html" title="class in com.google.common.primitives">Booleans</A>
-<DD>Copies a collection of <code>Boolean</code> instances into a new array of
- primitive <code>boolean</code> values.
-<DT><A HREF="./com/google/common/primitives/Bytes.html#toArray(java.util.Collection)"><B>toArray(Collection&lt;Byte&gt;)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Bytes.html" title="class in com.google.common.primitives">Bytes</A>
-<DD>Copies a collection of <code>Byte</code> instances into a new array of
- primitive <code>byte</code> values.
-<DT><A HREF="./com/google/common/primitives/Chars.html#toArray(java.util.Collection)"><B>toArray(Collection&lt;Character&gt;)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Chars.html" title="class in com.google.common.primitives">Chars</A>
-<DD>Copies a collection of <code>Character</code> instances into a new array of
- primitive <code>char</code> values.
-<DT><A HREF="./com/google/common/primitives/Doubles.html#toArray(java.util.Collection)"><B>toArray(Collection&lt;Double&gt;)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Doubles.html" title="class in com.google.common.primitives">Doubles</A>
-<DD>Copies a collection of <code>Double</code> instances into a new array of
- primitive <code>double</code> values.
-<DT><A HREF="./com/google/common/primitives/Floats.html#toArray(java.util.Collection)"><B>toArray(Collection&lt;Float&gt;)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Floats.html" title="class in com.google.common.primitives">Floats</A>
-<DD>Copies a collection of <code>Float</code> instances into a new array of
- primitive <code>float</code> values.
-<DT><A HREF="./com/google/common/primitives/Ints.html#toArray(java.util.Collection)"><B>toArray(Collection&lt;Integer&gt;)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Ints.html" title="class in com.google.common.primitives">Ints</A>
-<DD>Copies a collection of <code>Integer</code> instances into a new array of
- primitive <code>int</code> values.
-<DT><A HREF="./com/google/common/primitives/Longs.html#toArray(java.util.Collection)"><B>toArray(Collection&lt;Long&gt;)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Longs.html" title="class in com.google.common.primitives">Longs</A>
-<DD>Copies a collection of <code>Long</code> instances into a new array of
- primitive <code>long</code> values.
-<DT><A HREF="./com/google/common/primitives/Shorts.html#toArray(java.util.Collection)"><B>toArray(Collection&lt;Short&gt;)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Shorts.html" title="class in com.google.common.primitives">Shorts</A>
-<DD>Copies a collection of <code>Short</code> instances into a new array of
- primitive <code>short</code> values.
-<DT><A HREF="./com/google/common/io/ByteArrayDataOutput.html#toByteArray()"><B>toByteArray()</B></A> - 
-Method in interface com.google.common.io.<A HREF="./com/google/common/io/ByteArrayDataOutput.html" title="interface in com.google.common.io">ByteArrayDataOutput</A>
-<DD>Returns the contents that have been written to this instance,
- as a byte array.
-<DT><A HREF="./com/google/common/io/ByteStreams.html#toByteArray(java.io.InputStream)"><B>toByteArray(InputStream)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/ByteStreams.html" title="class in com.google.common.io">ByteStreams</A>
-<DD>Reads all bytes from an input stream into a byte array.
-<DT><A HREF="./com/google/common/io/ByteStreams.html#toByteArray(com.google.common.io.InputSupplier)"><B>toByteArray(InputSupplier&lt;? extends InputStream&gt;)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/ByteStreams.html" title="class in com.google.common.io">ByteStreams</A>
-<DD>Returns the data from a <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io"><CODE>InputStream</CODE></A> factory as a byte array.
-<DT><A HREF="./com/google/common/io/Files.html#toByteArray(java.io.File)"><B>toByteArray(File)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/Files.html" title="class in com.google.common.io">Files</A>
-<DD>Reads all bytes from a file into a byte array.
-<DT><A HREF="./com/google/common/io/Resources.html#toByteArray(java.net.URL)"><B>toByteArray(URL)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/Resources.html" title="class in com.google.common.io">Resources</A>
-<DD>Reads all bytes from a URL into a byte array.
-<DT><A HREF="./com/google/common/primitives/Chars.html#toByteArray(char)"><B>toByteArray(char)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Chars.html" title="class in com.google.common.primitives">Chars</A>
-<DD>Returns a big-endian representation of <code>value</code> in a 2-element byte
- array; equivalent to <code>ByteBuffer.allocate(2).putChar(value).array()</code>.
-<DT><A HREF="./com/google/common/primitives/Ints.html#toByteArray(int)"><B>toByteArray(int)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Ints.html" title="class in com.google.common.primitives">Ints</A>
-<DD>Returns a big-endian representation of <code>value</code> in a 4-element byte
- array; equivalent to <code>ByteBuffer.allocate(4).putInt(value).array()</code>.
-<DT><A HREF="./com/google/common/primitives/Longs.html#toByteArray(long)"><B>toByteArray(long)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Longs.html" title="class in com.google.common.primitives">Longs</A>
-<DD>Returns a big-endian representation of <code>value</code> in an 8-element byte
- array; equivalent to <code>ByteBuffer.allocate(8).putLong(value).array()</code>.
-<DT><A HREF="./com/google/common/primitives/Shorts.html#toByteArray(short)"><B>toByteArray(short)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Shorts.html" title="class in com.google.common.primitives">Shorts</A>
-<DD>Returns a big-endian representation of <code>value</code> in a ?-element byte
- array; equivalent to <code>ByteBuffer.allocate(?).putShort(value).array()</code>.
-<DT><A HREF="./com/google/common/base/Objects.ToStringHelper.html#toString()"><B>toString()</B></A> - 
-Method in class com.google.common.base.<A HREF="./com/google/common/base/Objects.ToStringHelper.html" title="class in com.google.common.base">Objects.ToStringHelper</A>
-<DD>Returns the formatted string.
-<DT><A HREF="./com/google/common/collect/ForwardingObject.html#toString()"><B>toString()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect">ForwardingObject</A>
-<DD>Returns the string representation generated by the delegate's
- <code>toString</code> method.
-<DT><A HREF="./com/google/common/collect/ImmutableBiMap.html#toString()"><B>toString()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableCollection.html#toString()"><B>toString()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableMap.html#toString()"><B>toString()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html#toString()"><B>toString()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableMultiset.html#toString()"><B>toString()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">ImmutableMultiset</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/Iterables.html#toString(java.lang.Iterable)"><B>toString(Iterable&lt;?&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
-<DD>Returns a string representation of <code>iterable</code>, with the format
- <code>[e1, e2, ..., en]</code>.
-<DT><A HREF="./com/google/common/collect/Iterators.html#toString(java.util.Iterator)"><B>toString(Iterator&lt;?&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
-<DD>Returns a string representation of <code>iterator</code>, with the format
- <code>[e1, e2, ..., en]</code>.
-<DT><A HREF="./com/google/common/collect/LinkedListMultimap.html#toString()"><B>toString()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>
-<DD>Returns a string representation of the multimap, generated by calling
- <code>toString</code> on the map returned by <A HREF="./com/google/common/collect/Multimap.html#asMap()"><CODE>Multimap.asMap()</CODE></A>.
-<DT><A HREF="./com/google/common/collect/Multiset.Entry.html#toString()"><B>toString()</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect">Multiset.Entry</A>
-<DD>Returns the canonical string representation of this entry, defined as
- follows.
-<DT><A HREF="./com/google/common/collect/Multiset.html#toString()"><B>toString()</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>
-<DD>
-<DT><A HREF="./com/google/common/io/CharStreams.html#toString(java.lang.Readable)"><B>toString(Readable)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/CharStreams.html" title="class in com.google.common.io">CharStreams</A>
-<DD>Reads all characters from a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang"><CODE>Readable</CODE></A> object into a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang"><CODE>String</CODE></A>.
-<DT><A HREF="./com/google/common/io/CharStreams.html#toString(com.google.common.io.InputSupplier)"><B>toString(InputSupplier&lt;R&gt;)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/CharStreams.html" title="class in com.google.common.io">CharStreams</A>
-<DD>Returns the characters from a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Readable.html?is-external=true" title="class or interface in java.lang"><CODE>Readable</CODE></A> & <A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io"><CODE>Closeable</CODE></A> object
- supplied by a factory as a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang"><CODE>String</CODE></A>.
-<DT><A HREF="./com/google/common/io/Files.html#toString(java.io.File, java.nio.charset.Charset)"><B>toString(File, Charset)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/Files.html" title="class in com.google.common.io">Files</A>
-<DD>Reads all characters from a file into a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang"><CODE>String</CODE></A>, using the given
- character set.
-<DT><A HREF="./com/google/common/io/Resources.html#toString(java.net.URL, java.nio.charset.Charset)"><B>toString(URL, Charset)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/Resources.html" title="class in com.google.common.io">Resources</A>
-<DD>Reads all characters from a URL into a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang"><CODE>String</CODE></A>, using the given
- character set.
-<DT><A HREF="./com/google/common/util/concurrent/AbstractExecutionThreadService.html#toString()"><B>toString()</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractExecutionThreadService.html" title="class in com.google.common.util.concurrent">AbstractExecutionThreadService</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/AbstractIdleService.html#toString()"><B>toString()</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractIdleService.html" title="class in com.google.common.util.concurrent">AbstractIdleService</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/base/Functions.html#toStringFunction()"><B>toStringFunction()</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Functions.html" title="class in com.google.common.base">Functions</A>
-<DD>Returns a function that calls <code>toString()</code> on its argument.
-<DT><A HREF="./com/google/common/base/Objects.html#toStringHelper(java.lang.Object)"><B>toStringHelper(Object)</B></A> - 
-Static method in class com.google.common.base.<A HREF="./com/google/common/base/Objects.html" title="class in com.google.common.base">Objects</A>
-<DD>Creates an instance of <A HREF="./com/google/common/base/Objects.ToStringHelper.html" title="class in com.google.common.base"><CODE>Objects.ToStringHelper</CODE></A>.
-<DT><A HREF="./com/google/common/io/Files.html#touch(java.io.File)"><B>touch(File)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/Files.html" title="class in com.google.common.io">Files</A>
-<DD>Creates an empty file or updates the last updated timestamp on the
- same as the unix command of the same name.
-<DT><A HREF="./com/google/common/collect/Collections2.html#transform(java.util.Collection, com.google.common.base.Function)"><B>transform(Collection&lt;F&gt;, Function&lt;? super F, T&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Collections2.html" title="class in com.google.common.collect">Collections2</A>
-<DD>Returns a collection that applies <code>function</code> to each element of
- <code>fromCollection</code>.
-<DT><A HREF="./com/google/common/collect/Iterables.html#transform(java.lang.Iterable, com.google.common.base.Function)"><B>transform(Iterable&lt;F&gt;, Function&lt;? super F, ? extends T&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
-<DD>Returns an iterable that applies <code>function</code> to each element of <code>fromIterable</code>.
-<DT><A HREF="./com/google/common/collect/Iterators.html#transform(java.util.Iterator, com.google.common.base.Function)"><B>transform(Iterator&lt;F&gt;, Function&lt;? super F, ? extends T&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
-<DD>Returns an iterator that applies <code>function</code> to each element of <code>fromIterator</code>.
-<DT><A HREF="./com/google/common/collect/Lists.html#transform(java.util.List, com.google.common.base.Function)"><B>transform(List&lt;F&gt;, Function&lt;? super F, ? extends T&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Lists.html" title="class in com.google.common.collect">Lists</A>
-<DD>Returns a list that applies <code>function</code> to each element of <code>fromList</code>.
-<DT><A HREF="./com/google/common/collect/Maps.html#transformValues(java.util.Map, com.google.common.base.Function)"><B>transformValues(Map&lt;K, V1&gt;, Function&lt;? super V1, V2&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Maps.html" title="class in com.google.common.collect">Maps</A>
-<DD>Returns a view of a map where each value is transformed by a function.
-<DT><A HREF="./com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect"><B>TreeMultimap</B></A>&lt;<A HREF="./com/google/common/collect/TreeMultimap.html" title="type parameter in TreeMultimap">K</A>,<A HREF="./com/google/common/collect/TreeMultimap.html" title="type parameter in TreeMultimap">V</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>Implementation of <code>Multimap</code> whose keys and values are ordered by
- their natural ordering or by supplied comparators.<DT><A HREF="./com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect"><B>TreeMultiset</B></A>&lt;<A HREF="./com/google/common/collect/TreeMultiset.html" title="type parameter in TreeMultiset">E</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>A multiset which maintains the ordering of its elements, according to either
- their natural order or an explicit <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util"><CODE>Comparator</CODE></A>.<DT><A HREF="./com/google/common/util/concurrent/AbstractExecutionThreadService.html#triggerShutdown()"><B>triggerShutdown()</B></A> - 
-Method in class com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/AbstractExecutionThreadService.html" title="class in com.google.common.util.concurrent">AbstractExecutionThreadService</A>
-<DD>Invoked to request the service to stop.
-<DT><A HREF="./com/google/common/base/CharMatcher.html#trimAndCollapseFrom(java.lang.CharSequence, char)"><B>trimAndCollapseFrom(CharSequence, char)</B></A> - 
-Method in class com.google.common.base.<A HREF="./com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>
-<DD>Collapses groups of matching characters exactly as <A HREF="./com/google/common/base/CharMatcher.html#collapseFrom(java.lang.CharSequence, char)"><CODE>CharMatcher.collapseFrom(java.lang.CharSequence, char)</CODE></A>
- does, except that groups of matching characters at the start or end of the
- sequence are removed without replacement.
-<DT><A HREF="./com/google/common/base/CharMatcher.html#trimFrom(java.lang.CharSequence)"><B>trimFrom(CharSequence)</B></A> - 
-Method in class com.google.common.base.<A HREF="./com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>
-<DD>Returns a substring of the input character sequence that omits all
- characters this matcher matches from the beginning and from the end of the
- string.
-<DT><A HREF="./com/google/common/base/CharMatcher.html#trimLeadingFrom(java.lang.CharSequence)"><B>trimLeadingFrom(CharSequence)</B></A> - 
-Method in class com.google.common.base.<A HREF="./com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>
-<DD>Returns a substring of the input character sequence that omits all
- characters this matcher matches from the beginning of the
- string.
-<DT><A HREF="./com/google/common/base/Splitter.html#trimResults()"><B>trimResults()</B></A> - 
-Method in class com.google.common.base.<A HREF="./com/google/common/base/Splitter.html" title="class in com.google.common.base">Splitter</A>
-<DD>Returns a splitter that behaves equivalently to <code>this</code> splitter, but
- automatically removes leading and trailing <A HREF="./com/google/common/base/CharMatcher.html#WHITESPACE">whitespace</A> from each returned substring; equivalent
- to <code>trimResults(CharMatcher.WHITESPACE)</code>.
-<DT><A HREF="./com/google/common/base/Splitter.html#trimResults(com.google.common.base.CharMatcher)"><B>trimResults(CharMatcher)</B></A> - 
-Method in class com.google.common.base.<A HREF="./com/google/common/base/Splitter.html" title="class in com.google.common.base">Splitter</A>
-<DD>Returns a splitter that behaves equivalently to <code>this</code> splitter, but
- removes all leading or trailing characters matching the given <code>CharMatcher</code> from each returned substring.
-<DT><A HREF="./com/google/common/collect/ArrayListMultimap.html#trimToSize()"><B>trimToSize()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect">ArrayListMultimap</A>
-<DD>Reduces the memory used by this <code>ArrayListMultimap</code>, if feasible.
-<DT><A HREF="./com/google/common/base/CharMatcher.html#trimTrailingFrom(java.lang.CharSequence)"><B>trimTrailingFrom(CharSequence)</B></A> - 
-Method in class com.google.common.base.<A HREF="./com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>
-<DD>Returns a substring of the input character sequence that omits all
- characters this matcher matches from the end of the
- string.
-</DL>
-<HR>
-<A NAME="_U_"><!-- --></A><H2>
-<B>U</B></H2>
-<DL>
-<DT><A HREF="./com/google/common/util/concurrent/UncheckedTimeoutException.html" title="class in com.google.common.util.concurrent"><B>UncheckedTimeoutException</B></A> - Exception in <A HREF="./com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A><DD>Unchecked version of <A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/TimeoutException.html?is-external=true" title="class or interface in java.util.concurrent"><CODE>TimeoutException</CODE></A>.<DT><A HREF="./com/google/common/util/concurrent/UncheckedTimeoutException.html#UncheckedTimeoutException()"><B>UncheckedTimeoutException()</B></A> - 
-Constructor for exception com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/UncheckedTimeoutException.html" title="class in com.google.common.util.concurrent">UncheckedTimeoutException</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/UncheckedTimeoutException.html#UncheckedTimeoutException(java.lang.String)"><B>UncheckedTimeoutException(String)</B></A> - 
-Constructor for exception com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/UncheckedTimeoutException.html" title="class in com.google.common.util.concurrent">UncheckedTimeoutException</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/UncheckedTimeoutException.html#UncheckedTimeoutException(java.lang.Throwable)"><B>UncheckedTimeoutException(Throwable)</B></A> - 
-Constructor for exception com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/UncheckedTimeoutException.html" title="class in com.google.common.util.concurrent">UncheckedTimeoutException</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/UncheckedTimeoutException.html#UncheckedTimeoutException(java.lang.String, java.lang.Throwable)"><B>UncheckedTimeoutException(String, Throwable)</B></A> - 
-Constructor for exception com.google.common.util.concurrent.<A HREF="./com/google/common/util/concurrent/UncheckedTimeoutException.html" title="class in com.google.common.util.concurrent">UncheckedTimeoutException</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/UninterruptibleFuture.html" title="interface in com.google.common.util.concurrent"><B>UninterruptibleFuture</B></A>&lt;<A HREF="./com/google/common/util/concurrent/UninterruptibleFuture.html" title="type parameter in UninterruptibleFuture">V</A>&gt; - Interface in <A HREF="./com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A><DD>A <code>Future</code> whose <code>get</code> calls cannot be interrupted.<DT><A HREF="./com/google/common/collect/Sets.html#union(java.util.Set, java.util.Set)"><B>union(Set&lt;? extends E&gt;, Set&lt;? extends E&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Sets.html" title="class in com.google.common.collect">Sets</A>
-<DD>Returns an unmodifiable <b>view</b> of the union of two sets.
-<DT><A HREF="./com/google/common/collect/Maps.html#uniqueIndex(java.lang.Iterable, com.google.common.base.Function)"><B>uniqueIndex(Iterable&lt;V&gt;, Function&lt;? super V, K&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Maps.html" title="class in com.google.common.collect">Maps</A>
-<DD>Returns an immutable map for which the <A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true#values()" title="class or interface in java.util"><CODE>Map.values()</CODE></A> are the given
- elements in the given order, and each key is the product of invoking a
- supplied function on its corresponding value.
-<DT><A HREF="./com/google/common/collect/Maps.html#unmodifiableBiMap(com.google.common.collect.BiMap)"><B>unmodifiableBiMap(BiMap&lt;? extends K, ? extends V&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Maps.html" title="class in com.google.common.collect">Maps</A>
-<DD>Returns an unmodifiable view of the specified bimap.
-<DT><A HREF="./com/google/common/collect/Iterables.html#unmodifiableIterable(java.lang.Iterable)"><B>unmodifiableIterable(Iterable&lt;T&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterables.html" title="class in com.google.common.collect">Iterables</A>
-<DD>Returns an unmodifiable view of <code>iterable</code>.
-<DT><A HREF="./com/google/common/collect/Iterators.html#unmodifiableIterator(java.util.Iterator)"><B>unmodifiableIterator(Iterator&lt;T&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Iterators.html" title="class in com.google.common.collect">Iterators</A>
-<DD>Returns an unmodifiable view of <code>iterator</code>.
-<DT><A HREF="./com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect"><B>UnmodifiableIterator</B></A>&lt;<A HREF="./com/google/common/collect/UnmodifiableIterator.html" title="type parameter in UnmodifiableIterator">E</A>&gt; - Class in <A HREF="./com/google/common/collect/package-summary.html">com.google.common.collect</A><DD>An iterator that does not support <A HREF="./com/google/common/collect/UnmodifiableIterator.html#remove()"><CODE>UnmodifiableIterator.remove()</CODE></A>.<DT><A HREF="./com/google/common/collect/UnmodifiableIterator.html#UnmodifiableIterator()"><B>UnmodifiableIterator()</B></A> - 
-Constructor for class com.google.common.collect.<A HREF="./com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect">UnmodifiableIterator</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/Multimaps.html#unmodifiableListMultimap(com.google.common.collect.ListMultimap)"><B>unmodifiableListMultimap(ListMultimap&lt;K, V&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Multimaps.html" title="class in com.google.common.collect">Multimaps</A>
-<DD>Returns an unmodifiable view of the specified <code>ListMultimap</code>.
-<DT><A HREF="./com/google/common/collect/Multimaps.html#unmodifiableMultimap(com.google.common.collect.Multimap)"><B>unmodifiableMultimap(Multimap&lt;K, V&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Multimaps.html" title="class in com.google.common.collect">Multimaps</A>
-<DD>Returns an unmodifiable view of the specified multimap.
-<DT><A HREF="./com/google/common/collect/Multisets.html#unmodifiableMultiset(com.google.common.collect.Multiset)"><B>unmodifiableMultiset(Multiset&lt;? extends E&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Multisets.html" title="class in com.google.common.collect">Multisets</A>
-<DD>Returns an unmodifiable view of the specified multiset.
-<DT><A HREF="./com/google/common/collect/Multimaps.html#unmodifiableSetMultimap(com.google.common.collect.SetMultimap)"><B>unmodifiableSetMultimap(SetMultimap&lt;K, V&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Multimaps.html" title="class in com.google.common.collect">Multimaps</A>
-<DD>Returns an unmodifiable view of the specified <code>SetMultimap</code>.
-<DT><A HREF="./com/google/common/collect/Multimaps.html#unmodifiableSortedSetMultimap(com.google.common.collect.SortedSetMultimap)"><B>unmodifiableSortedSetMultimap(SortedSetMultimap&lt;K, V&gt;)</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Multimaps.html" title="class in com.google.common.collect">Multimaps</A>
-<DD>Returns an unmodifiable view of the specified <code>SortedSetMultimap</code>.
-<DT><A HREF="./com/google/common/primitives/UnsignedBytes.html" title="class in com.google.common.primitives"><B>UnsignedBytes</B></A> - Class in <A HREF="./com/google/common/primitives/package-summary.html">com.google.common.primitives</A><DD>Static utility methods pertaining to <code>byte</code> primitives that interpret
- values as <i>unsigned</i> (that is, any negative value <code>b</code> is treated
- as the positive value <code>256 + b</code>).<DT><A HREF="./com/google/common/primitives/Primitives.html#unwrap(java.lang.Class)"><B>unwrap(Class&lt;T&gt;)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Primitives.html" title="class in com.google.common.primitives">Primitives</A>
-<DD>Returns the corresponding primitive type of <code>type</code> if it is a
- wrapper type; otherwise returns <code>type</code> itself.
-<DT><A HREF="./com/google/common/base/Charsets.html#US_ASCII"><B>US_ASCII</B></A> - 
-Static variable in class com.google.common.base.<A HREF="./com/google/common/base/Charsets.html" title="class in com.google.common.base">Charsets</A>
-<DD>US-ASCII: seven-bit ASCII, a.k.a.
-<DT><A HREF="./com/google/common/base/Joiner.MapJoiner.html#useForNull(java.lang.String)"><B>useForNull(String)</B></A> - 
-Method in class com.google.common.base.<A HREF="./com/google/common/base/Joiner.MapJoiner.html" title="class in com.google.common.base">Joiner.MapJoiner</A>
-<DD>Returns a map joiner with the same behavior as this one, except
- automatically substituting <code>nullText</code> for any provided null keys or
- values.
-<DT><A HREF="./com/google/common/base/Joiner.html#useForNull(java.lang.String)"><B>useForNull(String)</B></A> - 
-Method in class com.google.common.base.<A HREF="./com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A>
-<DD>Returns a joiner with the same behavior as this one, except automatically
- substituting <code>nullText</code> for any provided null elements.
-<DT><A HREF="./com/google/common/collect/Ordering.html#usingToString()"><B>usingToString()</B></A> - 
-Static method in class com.google.common.collect.<A HREF="./com/google/common/collect/Ordering.html" title="class in com.google.common.collect">Ordering</A>
-<DD>Returns an ordering that compares objects by the natural ordering of their
- string representations as returned by <code>toString()</code>.
-<DT><A HREF="./com/google/common/base/Charsets.html#UTF_16"><B>UTF_16</B></A> - 
-Static variable in class com.google.common.base.<A HREF="./com/google/common/base/Charsets.html" title="class in com.google.common.base">Charsets</A>
-<DD>UTF-16: sixteen-bit UCS Transformation Format, byte order identified by an
- optional byte-order mark.
-<DT><A HREF="./com/google/common/base/Charsets.html#UTF_16BE"><B>UTF_16BE</B></A> - 
-Static variable in class com.google.common.base.<A HREF="./com/google/common/base/Charsets.html" title="class in com.google.common.base">Charsets</A>
-<DD>UTF-16BE: sixteen-bit UCS Transformation Format, big-endian byte order.
-<DT><A HREF="./com/google/common/base/Charsets.html#UTF_16LE"><B>UTF_16LE</B></A> - 
-Static variable in class com.google.common.base.<A HREF="./com/google/common/base/Charsets.html" title="class in com.google.common.base">Charsets</A>
-<DD>UTF-16LE: sixteen-bit UCS Transformation Format, little-endian byte order.
-<DT><A HREF="./com/google/common/base/Charsets.html#UTF_8"><B>UTF_8</B></A> - 
-Static variable in class com.google.common.base.<A HREF="./com/google/common/base/Charsets.html" title="class in com.google.common.base">Charsets</A>
-<DD>UTF-8: eight-bit UCS Transformation Format.
-</DL>
-<HR>
-<A NAME="_V_"><!-- --></A><H2>
-<B>V</B></H2>
-<DL>
-<DT><A HREF="./com/google/common/collect/SortedSetMultimap.html#valueComparator()"><B>valueComparator()</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect">SortedSetMultimap</A>
-<DD>Returns the comparator that orders the multimap values, with a <code>null</code>
- indicating that natural ordering is used.
-<DT><A HREF="./com/google/common/collect/TreeMultimap.html#valueComparator()"><B>valueComparator()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">TreeMultimap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/util/concurrent/ValueFuture.html" title="class in com.google.common.util.concurrent"><B>ValueFuture</B></A>&lt;<A HREF="./com/google/common/util/concurrent/ValueFuture.html" title="type parameter in ValueFuture">V</A>&gt; - Class in <A HREF="./com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A><DD>A simple ListenableFuture that holds a value or an exception.<DT><A HREF="./com/google/common/base/CaseFormat.html#valueOf(java.lang.String)"><B>valueOf(String)</B></A> - 
-Static method in enum com.google.common.base.<A HREF="./com/google/common/base/CaseFormat.html" title="enum in com.google.common.base">CaseFormat</A>
-<DD>Returns the enum constant of this type with the specified name.
-<DT><A HREF="./com/google/common/base/Service.State.html#valueOf(java.lang.String)"><B>valueOf(String)</B></A> - 
-Static method in enum com.google.common.base.<A HREF="./com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A>
-<DD>Returns the enum constant of this type with the specified name.
-<DT><A HREF="./com/google/common/base/CaseFormat.html#values()"><B>values()</B></A> - 
-Static method in enum com.google.common.base.<A HREF="./com/google/common/base/CaseFormat.html" title="enum in com.google.common.base">CaseFormat</A>
-<DD>Returns an array containing the constants of this enum type, in
-the order they are declared.
-<DT><A HREF="./com/google/common/base/Service.State.html#values()"><B>values()</B></A> - 
-Static method in enum com.google.common.base.<A HREF="./com/google/common/base/Service.State.html" title="enum in com.google.common.base">Service.State</A>
-<DD>Returns an array containing the constants of this enum type, in
-the order they are declared.
-<DT><A HREF="./com/google/common/collect/BiMap.html#values()"><B>values()</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>
-<DD>
-<DT><A HREF="./com/google/common/collect/ForwardingMap.html#values()"><B>values()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect">ForwardingMap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ForwardingMultimap.html#values()"><B>values()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect">ForwardingMultimap</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/collect/ImmutableBiMap.html#values()"><B>values()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">ImmutableBiMap</A>
-<DD>Returns an immutable set of the values in this map.
-<DT><A HREF="./com/google/common/collect/ImmutableMap.html#values()"><B>values()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>
-<DD>Returns an immutable collection of the values in this map.
-<DT><A HREF="./com/google/common/collect/ImmutableMultimap.html#values()"><B>values()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>
-<DD>Returns an immutable collection of the values in this multimap.
-<DT><A HREF="./com/google/common/collect/ImmutableSortedMap.html#values()"><B>values()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">ImmutableSortedMap</A>
-<DD>Returns an immutable collection of the values in this map, sorted by the
- ordering of the corresponding keys.
-<DT><A HREF="./com/google/common/collect/LinkedHashMultimap.html#values()"><B>values()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect">LinkedHashMultimap</A>
-<DD>Returns a collection of all values in the multimap.
-<DT><A HREF="./com/google/common/collect/LinkedListMultimap.html#values()"><B>values()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">LinkedListMultimap</A>
-<DD>Returns a collection of all values in the multimap.
-<DT><A HREF="./com/google/common/collect/Multimap.html#values()"><B>values()</B></A> - 
-Method in interface com.google.common.collect.<A HREF="./com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>
-<DD>Returns a collection of all values in the multimap.
-<DT><A HREF="./com/google/common/collect/EnumBiMap.html#valueType()"><B>valueType()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect">EnumBiMap</A>
-<DD>Returns the associated value type.
-<DT><A HREF="./com/google/common/annotations/VisibleForTesting.html" title="annotation in com.google.common.annotations"><B>VisibleForTesting</B></A> - Annotation Type in <A HREF="./com/google/common/annotations/package-summary.html">com.google.common.annotations</A><DD>An annotation that indicates that the visibility of a type or member has
- been relaxed to make the code testable.</DL>
-<HR>
-<A NAME="_W_"><!-- --></A><H2>
-<B>W</B></H2>
-<DL>
-<DT><A HREF="./com/google/common/collect/MapMaker.html#weakKeys()"><B>weakKeys()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A>
-<DD>Specifies that each key (not value) stored in the map should be
- wrapped in a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/WeakReference.html?is-external=true" title="class or interface in java.lang.ref"><CODE>WeakReference</CODE></A> (by default, strong references
- are used).
-<DT><A HREF="./com/google/common/collect/MapMaker.html#weakValues()"><B>weakValues()</B></A> - 
-Method in class com.google.common.collect.<A HREF="./com/google/common/collect/MapMaker.html" title="class in com.google.common.collect">MapMaker</A>
-<DD>Specifies that each value (not key) stored in the map should be
- wrapped in a <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/WeakReference.html?is-external=true" title="class or interface in java.lang.ref"><CODE>WeakReference</CODE></A> (by default, strong references
- are used).
-<DT><A HREF="./com/google/common/base/CharMatcher.html#WHITESPACE"><B>WHITESPACE</B></A> - 
-Static variable in class com.google.common.base.<A HREF="./com/google/common/base/CharMatcher.html" title="class in com.google.common.base">CharMatcher</A>
-<DD>Determines whether a character is whitespace according to the latest
- Unicode standard, as illustrated
- <a href="http://unicode.org/cldr/utility/list-unicodeset.jsp?a=%5Cp%7Bwhitespace%7D">here</a>.
-<DT><A HREF="./com/google/common/base/Joiner.html#withKeyValueSeparator(java.lang.String)"><B>withKeyValueSeparator(String)</B></A> - 
-Method in class com.google.common.base.<A HREF="./com/google/common/base/Joiner.html" title="class in com.google.common.base">Joiner</A>
-<DD>Returns a <code>MapJoiner</code> using the given key-value separator, and the
- same configuration as this <code>Joiner</code> otherwise.
-<DT><A HREF="./com/google/common/primitives/Primitives.html#wrap(java.lang.Class)"><B>wrap(Class&lt;T&gt;)</B></A> - 
-Static method in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Primitives.html" title="class in com.google.common.primitives">Primitives</A>
-<DD>Returns the corresponding wrapper type of <code>type</code> if it is a primitive
- type; otherwise returns <code>type</code> itself.
-<DT><A HREF="./com/google/common/primitives/Primitives.html#WRAPPER_TO_PRIMITIVE_TYPE"><B>WRAPPER_TO_PRIMITIVE_TYPE</B></A> - 
-Static variable in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Primitives.html" title="class in com.google.common.primitives">Primitives</A>
-<DD>A map from wrapper types to their corresponding primitive types.
-<DT><A HREF="./com/google/common/primitives/Primitives.html#WRAPPER_TYPES"><B>WRAPPER_TYPES</B></A> - 
-Static variable in class com.google.common.primitives.<A HREF="./com/google/common/primitives/Primitives.html" title="class in com.google.common.primitives">Primitives</A>
-<DD>All nine wrapper types (including Void).
-<DT><A HREF="./com/google/common/io/ByteArrayDataOutput.html#write(int)"><B>write(int)</B></A> - 
-Method in interface com.google.common.io.<A HREF="./com/google/common/io/ByteArrayDataOutput.html" title="interface in com.google.common.io">ByteArrayDataOutput</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/io/ByteArrayDataOutput.html#write(byte[])"><B>write(byte[])</B></A> - 
-Method in interface com.google.common.io.<A HREF="./com/google/common/io/ByteArrayDataOutput.html" title="interface in com.google.common.io">ByteArrayDataOutput</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/io/ByteArrayDataOutput.html#write(byte[], int, int)"><B>write(byte[], int, int)</B></A> - 
-Method in interface com.google.common.io.<A HREF="./com/google/common/io/ByteArrayDataOutput.html" title="interface in com.google.common.io">ByteArrayDataOutput</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/io/ByteStreams.html#write(byte[], com.google.common.io.OutputSupplier)"><B>write(byte[], OutputSupplier&lt;? extends OutputStream&gt;)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/ByteStreams.html" title="class in com.google.common.io">ByteStreams</A>
-<DD>Writes a byte array to an output stream from the given supplier.
-<DT><A HREF="./com/google/common/io/CharStreams.html#write(java.lang.CharSequence, com.google.common.io.OutputSupplier)"><B>write(CharSequence, OutputSupplier&lt;W&gt;)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/CharStreams.html" title="class in com.google.common.io">CharStreams</A>
-<DD>Writes a character sequence (such as a string) to an appendable
- object from the given supplier.
-<DT><A HREF="./com/google/common/io/CountingOutputStream.html#write(byte[], int, int)"><B>write(byte[], int, int)</B></A> - 
-Method in class com.google.common.io.<A HREF="./com/google/common/io/CountingOutputStream.html" title="class in com.google.common.io">CountingOutputStream</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/io/CountingOutputStream.html#write(int)"><B>write(int)</B></A> - 
-Method in class com.google.common.io.<A HREF="./com/google/common/io/CountingOutputStream.html" title="class in com.google.common.io">CountingOutputStream</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/io/FileBackedOutputStream.html#write(int)"><B>write(int)</B></A> - 
-Method in class com.google.common.io.<A HREF="./com/google/common/io/FileBackedOutputStream.html" title="class in com.google.common.io">FileBackedOutputStream</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/io/FileBackedOutputStream.html#write(byte[])"><B>write(byte[])</B></A> - 
-Method in class com.google.common.io.<A HREF="./com/google/common/io/FileBackedOutputStream.html" title="class in com.google.common.io">FileBackedOutputStream</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/io/FileBackedOutputStream.html#write(byte[], int, int)"><B>write(byte[], int, int)</B></A> - 
-Method in class com.google.common.io.<A HREF="./com/google/common/io/FileBackedOutputStream.html" title="class in com.google.common.io">FileBackedOutputStream</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/io/Files.html#write(byte[], java.io.File)"><B>write(byte[], File)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/Files.html" title="class in com.google.common.io">Files</A>
-<DD>Overwrites a file with the contents of a byte array.
-<DT><A HREF="./com/google/common/io/Files.html#write(java.lang.CharSequence, java.io.File, java.nio.charset.Charset)"><B>write(CharSequence, File, Charset)</B></A> - 
-Static method in class com.google.common.io.<A HREF="./com/google/common/io/Files.html" title="class in com.google.common.io">Files</A>
-<DD>Writes a character sequence (such as a string) to a file using the given
- character set.
-<DT><A HREF="./com/google/common/io/NullOutputStream.html#write(int)"><B>write(int)</B></A> - 
-Method in class com.google.common.io.<A HREF="./com/google/common/io/NullOutputStream.html" title="class in com.google.common.io">NullOutputStream</A>
-<DD>Discards the specified byte.
-<DT><A HREF="./com/google/common/io/NullOutputStream.html#write(byte[], int, int)"><B>write(byte[], int, int)</B></A> - 
-Method in class com.google.common.io.<A HREF="./com/google/common/io/NullOutputStream.html" title="class in com.google.common.io">NullOutputStream</A>
-<DD>Discards the specified byte array.
-<DT><A HREF="./com/google/common/io/ByteArrayDataOutput.html#writeBoolean(boolean)"><B>writeBoolean(boolean)</B></A> - 
-Method in interface com.google.common.io.<A HREF="./com/google/common/io/ByteArrayDataOutput.html" title="interface in com.google.common.io">ByteArrayDataOutput</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/io/ByteArrayDataOutput.html#writeByte(int)"><B>writeByte(int)</B></A> - 
-Method in interface com.google.common.io.<A HREF="./com/google/common/io/ByteArrayDataOutput.html" title="interface in com.google.common.io">ByteArrayDataOutput</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/io/ByteArrayDataOutput.html#writeBytes(java.lang.String)"><B>writeBytes(String)</B></A> - 
-Method in interface com.google.common.io.<A HREF="./com/google/common/io/ByteArrayDataOutput.html" title="interface in com.google.common.io">ByteArrayDataOutput</A>
-<DD><B>Deprecated.</B>&nbsp;<I>This method is dangerous as it discards the high byte of
- every character. For UTF-8, use <code>write(s.getBytes(Charsets.UTF_8))</code>.</I>
-<DT><A HREF="./com/google/common/io/ByteArrayDataOutput.html#writeChar(int)"><B>writeChar(int)</B></A> - 
-Method in interface com.google.common.io.<A HREF="./com/google/common/io/ByteArrayDataOutput.html" title="interface in com.google.common.io">ByteArrayDataOutput</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/io/ByteArrayDataOutput.html#writeChars(java.lang.String)"><B>writeChars(String)</B></A> - 
-Method in interface com.google.common.io.<A HREF="./com/google/common/io/ByteArrayDataOutput.html" title="interface in com.google.common.io">ByteArrayDataOutput</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/io/ByteArrayDataOutput.html#writeDouble(double)"><B>writeDouble(double)</B></A> - 
-Method in interface com.google.common.io.<A HREF="./com/google/common/io/ByteArrayDataOutput.html" title="interface in com.google.common.io">ByteArrayDataOutput</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/io/ByteArrayDataOutput.html#writeFloat(float)"><B>writeFloat(float)</B></A> - 
-Method in interface com.google.common.io.<A HREF="./com/google/common/io/ByteArrayDataOutput.html" title="interface in com.google.common.io">ByteArrayDataOutput</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/io/ByteArrayDataOutput.html#writeInt(int)"><B>writeInt(int)</B></A> - 
-Method in interface com.google.common.io.<A HREF="./com/google/common/io/ByteArrayDataOutput.html" title="interface in com.google.common.io">ByteArrayDataOutput</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/io/ByteArrayDataOutput.html#writeLong(long)"><B>writeLong(long)</B></A> - 
-Method in interface com.google.common.io.<A HREF="./com/google/common/io/ByteArrayDataOutput.html" title="interface in com.google.common.io">ByteArrayDataOutput</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/io/ByteArrayDataOutput.html#writeShort(int)"><B>writeShort(int)</B></A> - 
-Method in interface com.google.common.io.<A HREF="./com/google/common/io/ByteArrayDataOutput.html" title="interface in com.google.common.io">ByteArrayDataOutput</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/common/io/ByteArrayDataOutput.html#writeUTF(java.lang.String)"><B>writeUTF(String)</B></A> - 
-Method in interface com.google.common.io.<A HREF="./com/google/common/io/ByteArrayDataOutput.html" title="interface in com.google.common.io">ByteArrayDataOutput</A>
-<DD>&nbsp;
-</DL>
-<HR>
-<A HREF="#_A_">A</A> <A HREF="#_B_">B</A> <A HREF="#_C_">C</A> <A HREF="#_D_">D</A> <A HREF="#_E_">E</A> <A HREF="#_F_">F</A> <A HREF="#_G_">G</A> <A HREF="#_H_">H</A> <A HREF="#_I_">I</A> <A HREF="#_J_">J</A> <A HREF="#_K_">K</A> <A HREF="#_L_">L</A> <A HREF="#_M_">M</A> <A HREF="#_N_">N</A> <A HREF="#_O_">O</A> <A HREF="#_P_">P</A> <A HREF="#_R_">R</A> <A HREF="#_S_">S</A> <A HREF="#_T_">T</A> <A HREF="#_U_">U</A> <A HREF="#_V_">V</A> <A HREF="#_W_">W</A> 
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="./overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="./overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="./deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="./help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="./index.html?index-all.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="index-all.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="./allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="./allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/index.html b/javadoc/index.html
deleted file mode 100644
index 367b883..0000000
--- a/javadoc/index.html
+++ /dev/null
@@ -1,39 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc on Mon Jan 04 20:48:01 PST 2010-->
-<TITLE>
-Guava Libraries 2010.01.04
-</TITLE>
-<SCRIPT type="text/javascript">
-    targetPage = "" + window.location.search;
-    if (targetPage != "" && targetPage != "undefined")
-        targetPage = targetPage.substring(1);
-    if (targetPage.indexOf(":") != -1)
-        targetPage = "undefined";
-    function loadFrames() {
-        if (targetPage != "" && targetPage != "undefined")
-             top.classFrame.location = top.targetPage;
-    }
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-</HEAD>
-<FRAMESET cols="20%,80%" title="" onLoad="top.loadFrames()">
-<FRAMESET rows="30%,70%" title="" onLoad="top.loadFrames()">
-<FRAME src="overview-frame.html" name="packageListFrame" title="All Packages">
-<FRAME src="allclasses-frame.html" name="packageFrame" title="All classes and interfaces (except non-static nested types)">
-</FRAMESET>
-<FRAME src="overview-summary.html" name="classFrame" title="Package, class and interface descriptions" scrolling="yes">
-<NOFRAMES>
-<H2>
-Frame Alert</H2>
-
-<P>
-This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
-<BR>
-Link to<A HREF="overview-summary.html">Non-frame version.</A>
-</NOFRAMES>
-</FRAMESET>
-</HTML>
diff --git a/javadoc/overview-frame.html b/javadoc/overview-frame.html
deleted file mode 100644
index 24923e4..0000000
--- a/javadoc/overview-frame.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Overview List (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
-
-
-</HEAD>
-
-<BODY BGCOLOR="white">
-
-<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
-<TR>
-<TH ALIGN="left" NOWRAP><FONT size="+1" CLASS="FrameTitleFont">
-<B></B></FONT></TH>
-</TR>
-</TABLE>
-
-<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
-<TR>
-<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="allclasses-frame.html" target="packageFrame">All Classes</A></FONT>
-<P>
-<FONT size="+1" CLASS="FrameHeadingFont">
-Packages</FONT>
-<BR>
-<FONT CLASS="FrameItemFont"><A HREF="com/google/common/annotations/package-frame.html" target="packageFrame">com.google.common.annotations</A></FONT>
-<BR>
-<FONT CLASS="FrameItemFont"><A HREF="com/google/common/base/package-frame.html" target="packageFrame">com.google.common.base</A></FONT>
-<BR>
-<FONT CLASS="FrameItemFont"><A HREF="com/google/common/collect/package-frame.html" target="packageFrame">com.google.common.collect</A></FONT>
-<BR>
-<FONT CLASS="FrameItemFont"><A HREF="com/google/common/io/package-frame.html" target="packageFrame">com.google.common.io</A></FONT>
-<BR>
-<FONT CLASS="FrameItemFont"><A HREF="com/google/common/primitives/package-frame.html" target="packageFrame">com.google.common.primitives</A></FONT>
-<BR>
-<FONT CLASS="FrameItemFont"><A HREF="com/google/common/util/concurrent/package-frame.html" target="packageFrame">com.google.common.util.concurrent</A></FONT>
-<BR>
-</TD>
-</TR>
-</TABLE>
-
-<P>
-&nbsp;
-</BODY>
-</HTML>
diff --git a/javadoc/overview-summary.html b/javadoc/overview-summary.html
deleted file mode 100644
index ef22caf..0000000
--- a/javadoc/overview-summary.html
+++ /dev/null
@@ -1,172 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Overview (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Overview (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Overview</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="index.html?overview-summary.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="overview-summary.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Packages</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="20%"><B><A HREF="com/google/common/annotations/package-summary.html">com.google.common.annotations</A></B></TD>
-<TD>&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="20%"><B><A HREF="com/google/common/base/package-summary.html">com.google.common.base</A></B></TD>
-<TD>Miscellaneous common util classes and annotations.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="20%"><B><A HREF="com/google/common/collect/package-summary.html">com.google.common.collect</A></B></TD>
-<TD>This package contains generic collection interfaces and implementations, and
- other utilities for working with collections.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="20%"><B><A HREF="com/google/common/io/package-summary.html">com.google.common.io</A></B></TD>
-<TD>&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="20%"><B><A HREF="com/google/common/primitives/package-summary.html">com.google.common.primitives</A></B></TD>
-<TD>&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="20%"><B><A HREF="com/google/common/util/concurrent/package-summary.html">com.google.common.util.concurrent</A></B></TD>
-<TD>&nbsp;</TD>
-</TR>
-</TABLE>
-
-<P>
-&nbsp;<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Overview</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="index.html?overview-summary.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="overview-summary.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/overview-tree.html b/javadoc/overview-tree.html
deleted file mode 100644
index 3c139ba..0000000
--- a/javadoc/overview-tree.html
+++ /dev/null
@@ -1,310 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:01 PST 2010 -->
-<TITLE>
-Class Hierarchy (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Class Hierarchy (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="index.html?overview-tree.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="overview-tree.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-Hierarchy For All Packages</H2>
-</CENTER>
-<DL>
-<DT><B>Package Hierarchies:</B><DD><A HREF="com/google/common/annotations/package-tree.html">com.google.common.annotations</A>, <A HREF="com/google/common/base/package-tree.html">com.google.common.base</A>, <A HREF="com/google/common/collect/package-tree.html">com.google.common.collect</A>, <A HREF="com/google/common/io/package-tree.html">com.google.common.io</A>, <A HREF="com/google/common/primitives/package-tree.html">com.google.common.primitives</A>, <A HREF="com/google/common/util/concurrent/package-tree.html">com.google.common.util.concurrent</A></DL>
-<HR>
-<H2>
-Class Hierarchy
-</H2>
-<UL>
-<LI TYPE="circle">java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang"><B>Object</B></A><UL>
-<LI TYPE="circle">com.google.common.util.concurrent.<A HREF="com/google/common/util/concurrent/AbstractCheckedFuture.html" title="class in com.google.common.util.concurrent"><B>AbstractCheckedFuture</B></A>&lt;V,E&gt; (implements com.google.common.util.concurrent.<A HREF="com/google/common/util/concurrent/CheckedFuture.html" title="interface in com.google.common.util.concurrent">CheckedFuture</A>&lt;V,E&gt;)
-<LI TYPE="circle">java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractCollection.html?is-external=true" title="class or interface in java.util"><B>AbstractCollection</B></A>&lt;E&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;)
-<UL>
-<LI TYPE="circle">java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/AbstractSet.html?is-external=true" title="class or interface in java.util"><B>AbstractSet</B></A>&lt;E&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt;)
-<UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/Sets.SetView.html" title="class in com.google.common.collect"><B>Sets.SetView</B></A>&lt;E&gt;</UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect"><B>ConcurrentHashMultiset</B></A>&lt;E&gt; (implements java.io.<A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>)
-<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/EnumMultiset.html" title="class in com.google.common.collect"><B>EnumMultiset</B></A>&lt;E&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect"><B>HashMultiset</B></A>&lt;E&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect"><B>LinkedHashMultiset</B></A>&lt;E&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect"><B>TreeMultiset</B></A>&lt;E&gt;</UL>
-<LI TYPE="circle">com.google.common.util.concurrent.<A HREF="com/google/common/util/concurrent/AbstractExecutionThreadService.html" title="class in com.google.common.util.concurrent"><B>AbstractExecutionThreadService</B></A> (implements com.google.common.base.<A HREF="com/google/common/base/Service.html" title="interface in com.google.common.base">Service</A>)
-<LI TYPE="circle">com.google.common.util.concurrent.<A HREF="com/google/common/util/concurrent/AbstractFuture.html" title="class in com.google.common.util.concurrent"><B>AbstractFuture</B></A>&lt;V&gt; (implements java.util.concurrent.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;V&gt;)
-<UL>
-<LI TYPE="circle">com.google.common.util.concurrent.<A HREF="com/google/common/util/concurrent/AbstractListenableFuture.html" title="class in com.google.common.util.concurrent"><B>AbstractListenableFuture</B></A>&lt;V&gt; (implements com.google.common.util.concurrent.<A HREF="com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;V&gt;)
-<UL>
-<LI TYPE="circle">com.google.common.util.concurrent.<A HREF="com/google/common/util/concurrent/ValueFuture.html" title="class in com.google.common.util.concurrent"><B>ValueFuture</B></A>&lt;V&gt;</UL>
-</UL>
-<LI TYPE="circle">com.google.common.util.concurrent.<A HREF="com/google/common/util/concurrent/AbstractIdleService.html" title="class in com.google.common.util.concurrent"><B>AbstractIdleService</B></A> (implements com.google.common.base.<A HREF="com/google/common/base/Service.html" title="interface in com.google.common.base">Service</A>)
-<LI TYPE="circle">com.google.common.util.concurrent.<A HREF="com/google/common/util/concurrent/AbstractService.html" title="class in com.google.common.util.concurrent"><B>AbstractService</B></A> (implements com.google.common.base.<A HREF="com/google/common/base/Service.html" title="interface in com.google.common.base">Service</A>)
-<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect"><B>ArrayListMultimap</B></A>&lt;K,V&gt;<LI TYPE="circle">com.google.common.primitives.<A HREF="com/google/common/primitives/Booleans.html" title="class in com.google.common.primitives"><B>Booleans</B></A><LI TYPE="circle">com.google.common.primitives.<A HREF="com/google/common/primitives/Bytes.html" title="class in com.google.common.primitives"><B>Bytes</B></A><LI TYPE="circle">com.google.common.io.<A HREF="com/google/common/io/ByteStreams.html" title="class in com.google.common.io"><B>ByteStreams</B></A><LI TYPE="circle">com.google.common.util.concurrent.<A HREF="com/google/common/util/concurrent/Callables.html" title="class in com.google.common.util.concurrent"><B>Callables</B></A><LI TYPE="circle">com.google.common.base.<A HREF="com/google/common/base/CharMatcher.html" title="class in com.google.common.base"><B>CharMatcher</B></A> (implements com.google.common.base.<A HREF="com/google/common/base/Predicate.html" title="interface in com.google.common.base">Predicate</A>&lt;T&gt;)
-<LI TYPE="circle">com.google.common.base.<A HREF="com/google/common/base/CharMatcher.LookupTable.html" title="class in com.google.common.base"><B>CharMatcher.LookupTable</B></A><LI TYPE="circle">com.google.common.primitives.<A HREF="com/google/common/primitives/Chars.html" title="class in com.google.common.primitives"><B>Chars</B></A><LI TYPE="circle">com.google.common.base.<A HREF="com/google/common/base/Charsets.html" title="class in com.google.common.base"><B>Charsets</B></A><LI TYPE="circle">com.google.common.io.<A HREF="com/google/common/io/CharStreams.html" title="class in com.google.common.io"><B>CharStreams</B></A><LI TYPE="circle">com.google.common.io.<A HREF="com/google/common/io/Closeables.html" title="class in com.google.common.io"><B>Closeables</B></A><LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/Collections2.html" title="class in com.google.common.collect"><B>Collections2</B></A><LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ComparisonChain.html" title="class in com.google.common.collect"><B>ComparisonChain</B></A><LI TYPE="circle">com.google.common.util.concurrent.<A HREF="com/google/common/util/concurrent/DaemonThreadFactory.html" title="class in com.google.common.util.concurrent"><B>DaemonThreadFactory</B></A> (implements java.util.concurrent.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadFactory.html?is-external=true" title="class or interface in java.util.concurrent">ThreadFactory</A>)
-<LI TYPE="circle">com.google.common.base.<A HREF="com/google/common/base/Defaults.html" title="class in com.google.common.base"><B>Defaults</B></A><LI TYPE="circle">com.google.common.primitives.<A HREF="com/google/common/primitives/Doubles.html" title="class in com.google.common.primitives"><B>Doubles</B></A><LI TYPE="circle">com.google.common.util.concurrent.<A HREF="com/google/common/util/concurrent/ExecutionList.html" title="class in com.google.common.util.concurrent"><B>ExecutionList</B></A> (implements java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</A>)
-<LI TYPE="circle">com.google.common.util.concurrent.<A HREF="com/google/common/util/concurrent/Executors.html" title="class in com.google.common.util.concurrent"><B>Executors</B></A><LI TYPE="circle">com.google.common.util.concurrent.<A HREF="com/google/common/util/concurrent/FakeTimeLimiter.html" title="class in com.google.common.util.concurrent"><B>FakeTimeLimiter</B></A> (implements com.google.common.util.concurrent.<A HREF="com/google/common/util/concurrent/TimeLimiter.html" title="interface in com.google.common.util.concurrent">TimeLimiter</A>)
-<LI TYPE="circle">com.google.common.io.<A HREF="com/google/common/io/Files.html" title="class in com.google.common.io"><B>Files</B></A><LI TYPE="circle">com.google.common.base.<A HREF="com/google/common/base/FinalizableReferenceQueue.html" title="class in com.google.common.base"><B>FinalizableReferenceQueue</B></A><LI TYPE="circle">com.google.common.primitives.<A HREF="com/google/common/primitives/Floats.html" title="class in com.google.common.primitives"><B>Floats</B></A><LI TYPE="circle">com.google.common.io.<A HREF="com/google/common/io/Flushables.html" title="class in com.google.common.io"><B>Flushables</B></A><LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ForwardingObject.html" title="class in com.google.common.collect"><B>ForwardingObject</B></A><UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ForwardingCollection.html" title="class in com.google.common.collect"><B>ForwardingCollection</B></A>&lt;E&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;)
-<UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ForwardingList.html" title="class in com.google.common.collect"><B>ForwardingList</B></A>&lt;E&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;E&gt;)
-<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ForwardingMultiset.html" title="class in com.google.common.collect"><B>ForwardingMultiset</B></A>&lt;E&gt; (implements com.google.common.collect.<A HREF="com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;)
-<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ForwardingQueue.html" title="class in com.google.common.collect"><B>ForwardingQueue</B></A>&lt;E&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Queue.html?is-external=true" title="class or interface in java.util">Queue</A>&lt;E&gt;)
-<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ForwardingSet.html" title="class in com.google.common.collect"><B>ForwardingSet</B></A>&lt;E&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt;)
-<UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ForwardingSortedSet.html" title="class in com.google.common.collect"><B>ForwardingSortedSet</B></A>&lt;E&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;E&gt;)
-</UL>
-</UL>
-<LI TYPE="circle">com.google.common.util.concurrent.<A HREF="com/google/common/util/concurrent/ForwardingFuture.html" title="class in com.google.common.util.concurrent"><B>ForwardingFuture</B></A>&lt;V&gt; (implements java.util.concurrent.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</A>&lt;V&gt;)
-<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ForwardingIterator.html" title="class in com.google.common.collect"><B>ForwardingIterator</B></A>&lt;T&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;E&gt;)
-<UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ForwardingListIterator.html" title="class in com.google.common.collect"><B>ForwardingListIterator</B></A>&lt;E&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/ListIterator.html?is-external=true" title="class or interface in java.util">ListIterator</A>&lt;E&gt;)
-</UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ForwardingMap.html" title="class in com.google.common.collect"><B>ForwardingMap</B></A>&lt;K,V&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;)
-<UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect"><B>EnumBiMap</B></A>&lt;K,V&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect"><B>EnumHashBiMap</B></A>&lt;K,V&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ForwardingConcurrentMap.html" title="class in com.google.common.collect"><B>ForwardingConcurrentMap</B></A>&lt;K,V&gt; (implements java.util.concurrent.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</A>&lt;K,V&gt;)
-<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ForwardingSortedMap.html" title="class in com.google.common.collect"><B>ForwardingSortedMap</B></A>&lt;K,V&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;K,V&gt;)
-<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect"><B>HashBiMap</B></A>&lt;K,V&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ImmutableClassToInstanceMap.html" title="class in com.google.common.collect"><B>ImmutableClassToInstanceMap</B></A>&lt;B&gt; (implements com.google.common.collect.<A HREF="com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect">ClassToInstanceMap</A>&lt;B&gt;)
-<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/MutableClassToInstanceMap.html" title="class in com.google.common.collect"><B>MutableClassToInstanceMap</B></A>&lt;B&gt; (implements com.google.common.collect.<A HREF="com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect">ClassToInstanceMap</A>&lt;B&gt;)
-</UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ForwardingMapEntry.html" title="class in com.google.common.collect"><B>ForwardingMapEntry</B></A>&lt;K,V&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</A>&lt;K,V&gt;)
-<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ForwardingMultimap.html" title="class in com.google.common.collect"><B>ForwardingMultimap</B></A>&lt;K,V&gt; (implements com.google.common.collect.<A HREF="com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;)
-<LI TYPE="circle">com.google.common.util.concurrent.<A HREF="com/google/common/util/concurrent/ForwardingService.html" title="class in com.google.common.util.concurrent"><B>ForwardingService</B></A> (implements com.google.common.base.<A HREF="com/google/common/base/Service.html" title="interface in com.google.common.base">Service</A>)
-</UL>
-<LI TYPE="circle">com.google.common.base.<A HREF="com/google/common/base/Functions.html" title="class in com.google.common.base"><B>Functions</B></A><LI TYPE="circle">com.google.common.util.concurrent.<A HREF="com/google/common/util/concurrent/Futures.html" title="class in com.google.common.util.concurrent"><B>Futures</B></A><LI TYPE="circle">java.util.concurrent.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/FutureTask.html?is-external=true" title="class or interface in java.util.concurrent"><B>FutureTask</B></A>&lt;V&gt; (implements java.util.concurrent.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/RunnableFuture.html?is-external=true" title="class or interface in java.util.concurrent">RunnableFuture</A>&lt;V&gt;)
-<UL>
-<LI TYPE="circle">com.google.common.util.concurrent.<A HREF="com/google/common/util/concurrent/ListenableFutureTask.html" title="class in com.google.common.util.concurrent"><B>ListenableFutureTask</B></A>&lt;V&gt; (implements com.google.common.util.concurrent.<A HREF="com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent">ListenableFuture</A>&lt;V&gt;)
-</UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect"><B>HashMultimap</B></A>&lt;K,V&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ImmutableClassToInstanceMap.Builder.html" title="class in com.google.common.collect"><B>ImmutableClassToInstanceMap.Builder</B></A>&lt;B&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect"><B>ImmutableCollection</B></A>&lt;E&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</A>&lt;E&gt;, java.io.<A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>)
-<UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect"><B>ImmutableList</B></A>&lt;E&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</A>&lt;E&gt;, java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/RandomAccess.html?is-external=true" title="class or interface in java.util">RandomAccess</A>)
-<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect"><B>ImmutableMultiset</B></A>&lt;E&gt; (implements com.google.common.collect.<A HREF="com/google/common/collect/Multiset.html" title="interface in com.google.common.collect">Multiset</A>&lt;E&gt;)
-<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect"><B>ImmutableSet</B></A>&lt;E&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</A>&lt;E&gt;)
-<UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect"><B>ImmutableSortedSet</B></A>&lt;E&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</A>&lt;E&gt;)
-</UL>
-</UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ImmutableList.Builder.html" title="class in com.google.common.collect"><B>ImmutableList.Builder</B></A>&lt;E&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect"><B>ImmutableMap</B></A>&lt;K,V&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;K,V&gt;, java.io.<A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>)
-<UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect"><B>ImmutableBiMap</B></A>&lt;K,V&gt; (implements com.google.common.collect.<A HREF="com/google/common/collect/BiMap.html" title="interface in com.google.common.collect">BiMap</A>&lt;K,V&gt;)
-<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect"><B>ImmutableSortedMap</B></A>&lt;K,V&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</A>&lt;K,V&gt;)
-</UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ImmutableMap.Builder.html" title="class in com.google.common.collect"><B>ImmutableMap.Builder</B></A>&lt;K,V&gt;<UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ImmutableBiMap.Builder.html" title="class in com.google.common.collect"><B>ImmutableBiMap.Builder</B></A>&lt;K,V&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ImmutableSortedMap.Builder.html" title="class in com.google.common.collect"><B>ImmutableSortedMap.Builder</B></A>&lt;K,V&gt;</UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect"><B>ImmutableMultimap</B></A>&lt;K,V&gt; (implements com.google.common.collect.<A HREF="com/google/common/collect/Multimap.html" title="interface in com.google.common.collect">Multimap</A>&lt;K,V&gt;, java.io.<A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>)
-<UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect"><B>ImmutableListMultimap</B></A>&lt;K,V&gt; (implements com.google.common.collect.<A HREF="com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;)
-<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect"><B>ImmutableSetMultimap</B></A>&lt;K,V&gt; (implements com.google.common.collect.<A HREF="com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect">SetMultimap</A>&lt;K,V&gt;)
-</UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ImmutableMultimap.Builder.html" title="class in com.google.common.collect"><B>ImmutableMultimap.Builder</B></A>&lt;K,V&gt;<UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ImmutableListMultimap.Builder.html" title="class in com.google.common.collect"><B>ImmutableListMultimap.Builder</B></A>&lt;K,V&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ImmutableSetMultimap.Builder.html" title="class in com.google.common.collect"><B>ImmutableSetMultimap.Builder</B></A>&lt;K,V&gt;</UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ImmutableMultiset.Builder.html" title="class in com.google.common.collect"><B>ImmutableMultiset.Builder</B></A>&lt;E&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ImmutableSet.Builder.html" title="class in com.google.common.collect"><B>ImmutableSet.Builder</B></A>&lt;E&gt;<UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ImmutableSortedSet.Builder.html" title="class in com.google.common.collect"><B>ImmutableSortedSet.Builder</B></A>&lt;E&gt;</UL>
-<LI TYPE="circle">java.io.<A HREF="http://java.sun.com/javase/6/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io"><B>InputStream</B></A> (implements java.io.<A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</A>)
-<UL>
-<LI TYPE="circle">java.io.<A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilterInputStream.html?is-external=true" title="class or interface in java.io"><B>FilterInputStream</B></A><UL>
-<LI TYPE="circle">com.google.common.io.<A HREF="com/google/common/io/CountingInputStream.html" title="class in com.google.common.io"><B>CountingInputStream</B></A><LI TYPE="circle">com.google.common.io.<A HREF="com/google/common/io/LimitInputStream.html" title="class in com.google.common.io"><B>LimitInputStream</B></A></UL>
-</UL>
-<LI TYPE="circle">com.google.common.primitives.<A HREF="com/google/common/primitives/Ints.html" title="class in com.google.common.primitives"><B>Ints</B></A><LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/Iterables.html" title="class in com.google.common.collect"><B>Iterables</B></A><LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/Iterators.html" title="class in com.google.common.collect"><B>Iterators</B></A><LI TYPE="circle">com.google.common.base.<A HREF="com/google/common/base/Joiner.html" title="class in com.google.common.base"><B>Joiner</B></A><LI TYPE="circle">com.google.common.base.<A HREF="com/google/common/base/Joiner.MapJoiner.html" title="class in com.google.common.base"><B>Joiner.MapJoiner</B></A><LI TYPE="circle">com.google.common.io.<A HREF="com/google/common/io/LineReader.html" title="class in com.google.common.io"><B>LineReader</B></A><LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect"><B>LinkedHashMultimap</B></A>&lt;K,V&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect"><B>LinkedListMultimap</B></A>&lt;K,V&gt; (implements com.google.common.collect.<A HREF="com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect">ListMultimap</A>&lt;K,V&gt;, java.io.<A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>)
-<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/Lists.html" title="class in com.google.common.collect"><B>Lists</B></A><LI TYPE="circle">com.google.common.primitives.<A HREF="com/google/common/primitives/Longs.html" title="class in com.google.common.primitives"><B>Longs</B></A><LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/MapMaker.html" title="class in com.google.common.collect"><B>MapMaker</B></A><LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/Maps.html" title="class in com.google.common.collect"><B>Maps</B></A><LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/Multimaps.html" title="class in com.google.common.collect"><B>Multimaps</B></A><LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/Multisets.html" title="class in com.google.common.collect"><B>Multisets</B></A><LI TYPE="circle">com.google.common.util.concurrent.<A HREF="com/google/common/util/concurrent/NamingThreadFactory.html" title="class in com.google.common.util.concurrent"><B>NamingThreadFactory</B></A> (implements java.util.concurrent.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadFactory.html?is-external=true" title="class or interface in java.util.concurrent">ThreadFactory</A>)
-<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ObjectArrays.html" title="class in com.google.common.collect"><B>ObjectArrays</B></A><LI TYPE="circle">com.google.common.base.<A HREF="com/google/common/base/Objects.html" title="class in com.google.common.base"><B>Objects</B></A><LI TYPE="circle">com.google.common.base.<A HREF="com/google/common/base/Objects.ToStringHelper.html" title="class in com.google.common.base"><B>Objects.ToStringHelper</B></A><LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/Ordering.html" title="class in com.google.common.collect"><B>Ordering</B></A>&lt;T&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</A>&lt;T&gt;)
-<LI TYPE="circle">java.io.<A HREF="http://java.sun.com/javase/6/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io"><B>OutputStream</B></A> (implements java.io.<A HREF="http://java.sun.com/javase/6/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</A>, java.io.<A HREF="http://java.sun.com/javase/6/docs/api/java/io/Flushable.html?is-external=true" title="class or interface in java.io">Flushable</A>)
-<UL>
-<LI TYPE="circle">com.google.common.io.<A HREF="com/google/common/io/FileBackedOutputStream.html" title="class in com.google.common.io"><B>FileBackedOutputStream</B></A><LI TYPE="circle">java.io.<A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilterOutputStream.html?is-external=true" title="class or interface in java.io"><B>FilterOutputStream</B></A><UL>
-<LI TYPE="circle">com.google.common.io.<A HREF="com/google/common/io/CountingOutputStream.html" title="class in com.google.common.io"><B>CountingOutputStream</B></A></UL>
-<LI TYPE="circle">com.google.common.io.<A HREF="com/google/common/io/NullOutputStream.html" title="class in com.google.common.io"><B>NullOutputStream</B></A></UL>
-<LI TYPE="circle">com.google.common.io.<A HREF="com/google/common/io/PatternFilenameFilter.html" title="class in com.google.common.io"><B>PatternFilenameFilter</B></A> (implements java.io.<A HREF="http://java.sun.com/javase/6/docs/api/java/io/FilenameFilter.html?is-external=true" title="class or interface in java.io">FilenameFilter</A>)
-<LI TYPE="circle">com.google.common.base.<A HREF="com/google/common/base/Preconditions.html" title="class in com.google.common.base"><B>Preconditions</B></A><LI TYPE="circle">com.google.common.base.<A HREF="com/google/common/base/Predicates.html" title="class in com.google.common.base"><B>Predicates</B></A><LI TYPE="circle">com.google.common.primitives.<A HREF="com/google/common/primitives/Primitives.html" title="class in com.google.common.primitives"><B>Primitives</B></A><LI TYPE="circle">java.lang.ref.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/Reference.html?is-external=true" title="class or interface in java.lang.ref"><B>Reference</B></A>&lt;T&gt;<UL>
-<LI TYPE="circle">java.lang.ref.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/PhantomReference.html?is-external=true" title="class or interface in java.lang.ref"><B>PhantomReference</B></A>&lt;T&gt;<UL>
-<LI TYPE="circle">com.google.common.base.<A HREF="com/google/common/base/FinalizablePhantomReference.html" title="class in com.google.common.base"><B>FinalizablePhantomReference</B></A>&lt;T&gt; (implements com.google.common.base.<A HREF="com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base">FinalizableReference</A>)
-</UL>
-<LI TYPE="circle">java.lang.ref.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/SoftReference.html?is-external=true" title="class or interface in java.lang.ref"><B>SoftReference</B></A>&lt;T&gt;<UL>
-<LI TYPE="circle">com.google.common.base.<A HREF="com/google/common/base/FinalizableSoftReference.html" title="class in com.google.common.base"><B>FinalizableSoftReference</B></A>&lt;T&gt; (implements com.google.common.base.<A HREF="com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base">FinalizableReference</A>)
-</UL>
-<LI TYPE="circle">java.lang.ref.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ref/WeakReference.html?is-external=true" title="class or interface in java.lang.ref"><B>WeakReference</B></A>&lt;T&gt;<UL>
-<LI TYPE="circle">com.google.common.base.<A HREF="com/google/common/base/FinalizableWeakReference.html" title="class in com.google.common.base"><B>FinalizableWeakReference</B></A>&lt;T&gt; (implements com.google.common.base.<A HREF="com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base">FinalizableReference</A>)
-</UL>
-</UL>
-<LI TYPE="circle">com.google.common.io.<A HREF="com/google/common/io/Resources.html" title="class in com.google.common.io"><B>Resources</B></A><LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/Sets.html" title="class in com.google.common.collect"><B>Sets</B></A><LI TYPE="circle">com.google.common.primitives.<A HREF="com/google/common/primitives/Shorts.html" title="class in com.google.common.primitives"><B>Shorts</B></A><LI TYPE="circle">com.google.common.primitives.<A HREF="com/google/common/primitives/SignedBytes.html" title="class in com.google.common.primitives"><B>SignedBytes</B></A><LI TYPE="circle">com.google.common.util.concurrent.<A HREF="com/google/common/util/concurrent/SimpleTimeLimiter.html" title="class in com.google.common.util.concurrent"><B>SimpleTimeLimiter</B></A> (implements com.google.common.util.concurrent.<A HREF="com/google/common/util/concurrent/TimeLimiter.html" title="interface in com.google.common.util.concurrent">TimeLimiter</A>)
-<LI TYPE="circle">com.google.common.base.<A HREF="com/google/common/base/Splitter.html" title="class in com.google.common.base"><B>Splitter</B></A><LI TYPE="circle">com.google.common.base.<A HREF="com/google/common/base/Suppliers.html" title="class in com.google.common.base"><B>Suppliers</B></A><LI TYPE="circle">java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang"><B>Throwable</B></A> (implements java.io.<A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>)
-<UL>
-<LI TYPE="circle">java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang"><B>Exception</B></A><UL>
-<LI TYPE="circle">java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/RuntimeException.html?is-external=true" title="class or interface in java.lang"><B>RuntimeException</B></A><UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ComputationException.html" title="class in com.google.common.collect"><B>ComputationException</B></A><UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/AsynchronousComputationException.html" title="class in com.google.common.collect"><B>AsynchronousComputationException</B></A></UL>
-<LI TYPE="circle">com.google.common.util.concurrent.<A HREF="com/google/common/util/concurrent/UncheckedTimeoutException.html" title="class in com.google.common.util.concurrent"><B>UncheckedTimeoutException</B></A></UL>
-</UL>
-</UL>
-<LI TYPE="circle">com.google.common.base.<A HREF="com/google/common/base/Throwables.html" title="class in com.google.common.base"><B>Throwables</B></A><LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect"><B>TreeMultimap</B></A>&lt;K,V&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/UnmodifiableIterator.html" title="class in com.google.common.collect"><B>UnmodifiableIterator</B></A>&lt;E&gt; (implements java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</A>&lt;E&gt;)
-<UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/AbstractIterator.html" title="class in com.google.common.collect"><B>AbstractIterator</B></A>&lt;T&gt;</UL>
-<LI TYPE="circle">com.google.common.primitives.<A HREF="com/google/common/primitives/UnsignedBytes.html" title="class in com.google.common.primitives"><B>UnsignedBytes</B></A></UL>
-</UL>
-<H2>
-Interface Hierarchy
-</H2>
-<UL>
-<LI TYPE="circle">com.google.common.io.<A HREF="com/google/common/io/ByteProcessor.html" title="interface in com.google.common.io"><B>ByteProcessor</B></A>&lt;T&gt;<LI TYPE="circle">java.io.<A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataInput.html?is-external=true" title="class or interface in java.io"><B>DataInput</B></A><UL>
-<LI TYPE="circle">com.google.common.io.<A HREF="com/google/common/io/ByteArrayDataInput.html" title="interface in com.google.common.io"><B>ByteArrayDataInput</B></A></UL>
-<LI TYPE="circle">java.io.<A HREF="http://java.sun.com/javase/6/docs/api/java/io/DataOutput.html?is-external=true" title="class or interface in java.io"><B>DataOutput</B></A><UL>
-<LI TYPE="circle">com.google.common.io.<A HREF="com/google/common/io/ByteArrayDataOutput.html" title="interface in com.google.common.io"><B>ByteArrayDataOutput</B></A></UL>
-<LI TYPE="circle">com.google.common.base.<A HREF="com/google/common/base/FinalizableReference.html" title="interface in com.google.common.base"><B>FinalizableReference</B></A><LI TYPE="circle">com.google.common.base.<A HREF="com/google/common/base/Function.html" title="interface in com.google.common.base"><B>Function</B></A>&lt;F,T&gt;<LI TYPE="circle">java.util.concurrent.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent"><B>Future</B></A>&lt;V&gt;<UL>
-<LI TYPE="circle">com.google.common.util.concurrent.<A HREF="com/google/common/util/concurrent/CheckedFuture.html" title="interface in com.google.common.util.concurrent"><B>CheckedFuture</B></A>&lt;V,E&gt;<LI TYPE="circle">com.google.common.util.concurrent.<A HREF="com/google/common/util/concurrent/ListenableFuture.html" title="interface in com.google.common.util.concurrent"><B>ListenableFuture</B></A>&lt;V&gt;<UL>
-<LI TYPE="circle">com.google.common.util.concurrent.<A HREF="com/google/common/util/concurrent/CheckedFuture.html" title="interface in com.google.common.util.concurrent"><B>CheckedFuture</B></A>&lt;V,E&gt;</UL>
-<LI TYPE="circle">com.google.common.util.concurrent.<A HREF="com/google/common/util/concurrent/UninterruptibleFuture.html" title="interface in com.google.common.util.concurrent"><B>UninterruptibleFuture</B></A>&lt;V&gt;</UL>
-<LI TYPE="circle">com.google.common.io.<A HREF="com/google/common/io/InputSupplier.html" title="interface in com.google.common.io"><B>InputSupplier</B></A>&lt;T&gt;<LI TYPE="circle">java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang"><B>Iterable</B></A>&lt;T&gt;<UL>
-<LI TYPE="circle">java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util"><B>Collection</B></A>&lt;E&gt;<UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/Multiset.html" title="interface in com.google.common.collect"><B>Multiset</B></A>&lt;E&gt;</UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/Multiset.html" title="interface in com.google.common.collect"><B>Multiset</B></A>&lt;E&gt;</UL>
-<LI TYPE="circle">java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util"><B>Iterator</B></A>&lt;E&gt;<UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/PeekingIterator.html" title="interface in com.google.common.collect"><B>PeekingIterator</B></A>&lt;E&gt;</UL>
-<LI TYPE="circle">com.google.common.io.<A HREF="com/google/common/io/LineProcessor.html" title="interface in com.google.common.io"><B>LineProcessor</B></A>&lt;T&gt;<LI TYPE="circle">java.util.<A HREF="http://java.sun.com/javase/6/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util"><B>Map</B></A>&lt;K,V&gt;<UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/BiMap.html" title="interface in com.google.common.collect"><B>BiMap</B></A>&lt;K,V&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ClassToInstanceMap.html" title="interface in com.google.common.collect"><B>ClassToInstanceMap</B></A>&lt;B&gt;</UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/MapDifference.html" title="interface in com.google.common.collect"><B>MapDifference</B></A>&lt;K,V&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/MapDifference.ValueDifference.html" title="interface in com.google.common.collect"><B>MapDifference.ValueDifference</B></A>&lt;V&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/Multimap.html" title="interface in com.google.common.collect"><B>Multimap</B></A>&lt;K,V&gt;<UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/ListMultimap.html" title="interface in com.google.common.collect"><B>ListMultimap</B></A>&lt;K,V&gt;<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/SetMultimap.html" title="interface in com.google.common.collect"><B>SetMultimap</B></A>&lt;K,V&gt;<UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect"><B>SortedSetMultimap</B></A>&lt;K,V&gt;</UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/SortedSetMultimap.html" title="interface in com.google.common.collect"><B>SortedSetMultimap</B></A>&lt;K,V&gt;</UL>
-<LI TYPE="circle">com.google.common.collect.<A HREF="com/google/common/collect/Multiset.Entry.html" title="interface in com.google.common.collect"><B>Multiset.Entry</B></A>&lt;E&gt;<LI TYPE="circle">com.google.common.io.<A HREF="com/google/common/io/OutputSupplier.html" title="interface in com.google.common.io"><B>OutputSupplier</B></A>&lt;T&gt;<LI TYPE="circle">com.google.common.base.<A HREF="com/google/common/base/Predicate.html" title="interface in com.google.common.base"><B>Predicate</B></A>&lt;T&gt;<LI TYPE="circle">com.google.common.base.<A HREF="com/google/common/base/Service.html" title="interface in com.google.common.base"><B>Service</B></A><LI TYPE="circle">com.google.common.base.<A HREF="com/google/common/base/Supplier.html" title="interface in com.google.common.base"><B>Supplier</B></A>&lt;T&gt;<LI TYPE="circle">com.google.common.util.concurrent.<A HREF="com/google/common/util/concurrent/TimeLimiter.html" title="interface in com.google.common.util.concurrent"><B>TimeLimiter</B></A></UL>
-<H2>
-Annotation Type Hierarchy
-</H2>
-<UL>
-<LI TYPE="circle">com.google.common.annotations.<A HREF="com/google/common/annotations/GwtIncompatible.html" title="annotation in com.google.common.annotations"><B>GwtIncompatible</B></A> (implements java.lang.annotation.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</A>)
-<LI TYPE="circle">com.google.common.annotations.<A HREF="com/google/common/annotations/GwtCompatible.html" title="annotation in com.google.common.annotations"><B>GwtCompatible</B></A> (implements java.lang.annotation.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</A>)
-<LI TYPE="circle">com.google.common.annotations.<A HREF="com/google/common/annotations/VisibleForTesting.html" title="annotation in com.google.common.annotations"><B>VisibleForTesting</B></A> (implements java.lang.annotation.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</A>)
-</UL>
-<H2>
-Enum Hierarchy
-</H2>
-<UL>
-<LI TYPE="circle">java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang"><B>Object</B></A><UL>
-<LI TYPE="circle">java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><B>Enum</B></A>&lt;E&gt; (implements java.lang.<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</A>&lt;T&gt;, java.io.<A HREF="http://java.sun.com/javase/6/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</A>)
-<UL>
-<LI TYPE="circle">com.google.common.base.<A HREF="com/google/common/base/CaseFormat.html" title="enum in com.google.common.base"><B>CaseFormat</B></A><LI TYPE="circle">com.google.common.base.<A HREF="com/google/common/base/Service.State.html" title="enum in com.google.common.base"><B>Service.State</B></A></UL>
-</UL>
-</UL>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="index.html?overview-tree.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="overview-tree.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/package-list b/javadoc/package-list
deleted file mode 100644
index 733f6ed..0000000
--- a/javadoc/package-list
+++ /dev/null
@@ -1,6 +0,0 @@
-com.google.common.annotations
-com.google.common.base
-com.google.common.collect
-com.google.common.io
-com.google.common.primitives
-com.google.common.util.concurrent
diff --git a/javadoc/resources/inherit.gif b/javadoc/resources/inherit.gif
deleted file mode 100644
index c814867..0000000
--- a/javadoc/resources/inherit.gif
+++ /dev/null
Binary files differ
diff --git a/javadoc/serialized-form.html b/javadoc/serialized-form.html
deleted file mode 100644
index 3a399de..0000000
--- a/javadoc/serialized-form.html
+++ /dev/null
@@ -1,1312 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0-google-internal) on Mon Jan 04 20:48:00 PST 2010 -->
-<TITLE>
-Serialized Form (Guava Libraries 2010.01.04)
-</TITLE>
-
-<META NAME="date" CONTENT="2010-01-04">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
-    if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Serialized Form (Guava Libraries 2010.01.04)";
-    }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="index.html?serialized-form.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="serialized-form.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H1>
-Serialized Form</H1>
-</CENTER>
-<HR SIZE="4" NOSHADE>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="center"><FONT SIZE="+2">
-<B>Package</B> <B>com.google.common.collect</B></FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-<A NAME="com.google.common.collect.ArrayListMultimap"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Class <A HREF="com/google/common/collect/ArrayListMultimap.html" title="class in com.google.common.collect">com.google.common.collect.ArrayListMultimap</A> extends com.google.common.collect.AbstractListMultimap&lt;<A HREF="com/google/common/collect/ArrayListMultimap.html" title="type parameter in ArrayListMultimap">K</A>,<A HREF="com/google/common/collect/ArrayListMultimap.html" title="type parameter in ArrayListMultimap">V</A>&gt; implements Serializable</B></FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-<B>serialVersionUID:&nbsp;</B>0L
-
-<P>
-<A NAME="serialized_methods"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Serialization Methods</B></FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-<A NAME="readObject(java.io.ObjectInputStream)"><!-- --></A><H3>
-readObject</H3>
-<PRE>
-private void <B>readObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectInputStream.html?is-external=true" title="class or interface in java.io">ObjectInputStream</A>&nbsp;stream)
-                 throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A>,
-                        <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></PRE>
-<DL>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></CODE></DD>
-</DL>
-</DL>
-<HR>
-<A NAME="writeObject(java.io.ObjectOutputStream)"><!-- --></A><H3>
-writeObject</H3>
-<PRE>
-private void <B>writeObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectOutputStream.html?is-external=true" title="class or interface in java.io">ObjectOutputStream</A>&nbsp;stream)
-                  throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD><DL>
-<DT><B>Serial Data:</B></DT>
-  <DD>expectedValuesPerKey, number of distinct keys, and then for
-     each distinct key: the key, number of values for that key, and the
-     key's values</DD>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DD>
-</DL>
-</DL>
-
-<P>
-<A NAME="com.google.common.collect.AsynchronousComputationException"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Class <A HREF="com/google/common/collect/AsynchronousComputationException.html" title="class in com.google.common.collect">com.google.common.collect.AsynchronousComputationException</A> extends <A HREF="com/google/common/collect/ComputationException.html" title="class in com.google.common.collect">ComputationException</A> implements Serializable</B></FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-<B>serialVersionUID:&nbsp;</B>0L
-
-<P>
-
-<P>
-<A NAME="com.google.common.collect.ComputationException"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Class <A HREF="com/google/common/collect/ComputationException.html" title="class in com.google.common.collect">com.google.common.collect.ComputationException</A> extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/RuntimeException.html?is-external=true" title="class or interface in java.lang">RuntimeException</A> implements Serializable</B></FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-<B>serialVersionUID:&nbsp;</B>0L
-
-<P>
-
-<P>
-<A NAME="com.google.common.collect.ConcurrentHashMultiset"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Class <A HREF="com/google/common/collect/ConcurrentHashMultiset.html" title="class in com.google.common.collect">com.google.common.collect.ConcurrentHashMultiset</A> extends com.google.common.collect.AbstractMultiset&lt;<A HREF="com/google/common/collect/ConcurrentHashMultiset.html" title="type parameter in ConcurrentHashMultiset">E</A>&gt; implements Serializable</B></FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-<B>serialVersionUID:&nbsp;</B>0L
-
-<P>
-<A NAME="serialized_methods"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Serialization Methods</B></FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-<A NAME="readObject(java.io.ObjectInputStream)"><!-- --></A><H3>
-readObject</H3>
-<PRE>
-private void <B>readObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectInputStream.html?is-external=true" title="class or interface in java.io">ObjectInputStream</A>&nbsp;stream)
-                 throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A>,
-                        <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></PRE>
-<DL>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></CODE></DD>
-</DL>
-</DL>
-<HR>
-<A NAME="writeObject(java.io.ObjectOutputStream)"><!-- --></A><H3>
-writeObject</H3>
-<PRE>
-private void <B>writeObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectOutputStream.html?is-external=true" title="class or interface in java.io">ObjectOutputStream</A>&nbsp;stream)
-                  throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD><DL>
-<DT><B>Serial Data:</B></DT>
-  <DD>the number of distinct elements, the first element, its count,
-     the second element, its count, and so on</DD>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DD>
-</DL>
-</DL>
-
-<P>
-<A NAME="com.google.common.collect.EnumBiMap"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Class <A HREF="com/google/common/collect/EnumBiMap.html" title="class in com.google.common.collect">com.google.common.collect.EnumBiMap</A> extends com.google.common.collect.AbstractBiMap&lt;<A HREF="com/google/common/collect/EnumBiMap.html" title="type parameter in EnumBiMap">K</A> extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;<A HREF="com/google/common/collect/EnumBiMap.html" title="type parameter in EnumBiMap">K</A>&gt;,<A HREF="com/google/common/collect/EnumBiMap.html" title="type parameter in EnumBiMap">V</A> extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;<A HREF="com/google/common/collect/EnumBiMap.html" title="type parameter in EnumBiMap">V</A>&gt;&gt; implements Serializable</B></FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-<B>serialVersionUID:&nbsp;</B>0L
-
-<P>
-<A NAME="serialized_methods"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Serialization Methods</B></FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-<A NAME="readObject(java.io.ObjectInputStream)"><!-- --></A><H3>
-readObject</H3>
-<PRE>
-private void <B>readObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectInputStream.html?is-external=true" title="class or interface in java.io">ObjectInputStream</A>&nbsp;stream)
-                 throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A>,
-                        <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></PRE>
-<DL>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></CODE></DD>
-</DL>
-</DL>
-<HR>
-<A NAME="writeObject(java.io.ObjectOutputStream)"><!-- --></A><H3>
-writeObject</H3>
-<PRE>
-private void <B>writeObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectOutputStream.html?is-external=true" title="class or interface in java.io">ObjectOutputStream</A>&nbsp;stream)
-                  throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD><DL>
-<DT><B>Serial Data:</B></DT>
-  <DD>the key class, value class, number of entries, first key, first
-     value, second key, second value, and so on.</DD>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DD>
-</DL>
-</DL>
-
-<P>
-<A NAME="com.google.common.collect.EnumHashBiMap"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Class <A HREF="com/google/common/collect/EnumHashBiMap.html" title="class in com.google.common.collect">com.google.common.collect.EnumHashBiMap</A> extends com.google.common.collect.AbstractBiMap&lt;<A HREF="com/google/common/collect/EnumHashBiMap.html" title="type parameter in EnumHashBiMap">K</A> extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;<A HREF="com/google/common/collect/EnumHashBiMap.html" title="type parameter in EnumHashBiMap">K</A>&gt;,<A HREF="com/google/common/collect/EnumHashBiMap.html" title="type parameter in EnumHashBiMap">V</A>&gt; implements Serializable</B></FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-<B>serialVersionUID:&nbsp;</B>0L
-
-<P>
-<A NAME="serialized_methods"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Serialization Methods</B></FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-<A NAME="readObject(java.io.ObjectInputStream)"><!-- --></A><H3>
-readObject</H3>
-<PRE>
-private void <B>readObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectInputStream.html?is-external=true" title="class or interface in java.io">ObjectInputStream</A>&nbsp;stream)
-                 throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A>,
-                        <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></PRE>
-<DL>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></CODE></DD>
-</DL>
-</DL>
-<HR>
-<A NAME="writeObject(java.io.ObjectOutputStream)"><!-- --></A><H3>
-writeObject</H3>
-<PRE>
-private void <B>writeObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectOutputStream.html?is-external=true" title="class or interface in java.io">ObjectOutputStream</A>&nbsp;stream)
-                  throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD><DL>
-<DT><B>Serial Data:</B></DT>
-  <DD>the key class, number of entries, first key, first value,
-     second key, second value, and so on.</DD>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DD>
-</DL>
-</DL>
-
-<P>
-<A NAME="com.google.common.collect.EnumMultiset"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Class <A HREF="com/google/common/collect/EnumMultiset.html" title="class in com.google.common.collect">com.google.common.collect.EnumMultiset</A> extends com.google.common.collect.AbstractMapBasedMultiset&lt;<A HREF="com/google/common/collect/EnumMultiset.html" title="type parameter in EnumMultiset">E</A> extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</A>&lt;<A HREF="com/google/common/collect/EnumMultiset.html" title="type parameter in EnumMultiset">E</A>&gt;&gt; implements Serializable</B></FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-<B>serialVersionUID:&nbsp;</B>0L
-
-<P>
-<A NAME="serialized_methods"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Serialization Methods</B></FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-<A NAME="readObject(java.io.ObjectInputStream)"><!-- --></A><H3>
-readObject</H3>
-<PRE>
-private void <B>readObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectInputStream.html?is-external=true" title="class or interface in java.io">ObjectInputStream</A>&nbsp;stream)
-                 throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A>,
-                        <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></PRE>
-<DL>
-<DD><DL>
-<DT><B>Serial Data:</B></DT>
-  <DD>the <code>Class&lt;E&gt;</code> for the enum type, the number of distinct
-     elements, the first element, its count, the second element, its count,
-     and so on</DD>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></CODE></DD>
-</DL>
-</DL>
-<HR>
-<A NAME="writeObject(java.io.ObjectOutputStream)"><!-- --></A><H3>
-writeObject</H3>
-<PRE>
-private void <B>writeObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectOutputStream.html?is-external=true" title="class or interface in java.io">ObjectOutputStream</A>&nbsp;stream)
-                  throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DD>
-</DL>
-</DL>
-
-<P>
-<A NAME="com.google.common.collect.HashBiMap"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Class <A HREF="com/google/common/collect/HashBiMap.html" title="class in com.google.common.collect">com.google.common.collect.HashBiMap</A> extends com.google.common.collect.AbstractBiMap&lt;<A HREF="com/google/common/collect/HashBiMap.html" title="type parameter in HashBiMap">K</A>,<A HREF="com/google/common/collect/HashBiMap.html" title="type parameter in HashBiMap">V</A>&gt; implements Serializable</B></FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-<B>serialVersionUID:&nbsp;</B>0L
-
-<P>
-<A NAME="serialized_methods"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Serialization Methods</B></FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-<A NAME="readObject(java.io.ObjectInputStream)"><!-- --></A><H3>
-readObject</H3>
-<PRE>
-private void <B>readObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectInputStream.html?is-external=true" title="class or interface in java.io">ObjectInputStream</A>&nbsp;stream)
-                 throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A>,
-                        <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></PRE>
-<DL>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></CODE></DD>
-</DL>
-</DL>
-<HR>
-<A NAME="writeObject(java.io.ObjectOutputStream)"><!-- --></A><H3>
-writeObject</H3>
-<PRE>
-private void <B>writeObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectOutputStream.html?is-external=true" title="class or interface in java.io">ObjectOutputStream</A>&nbsp;stream)
-                  throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD><DL>
-<DT><B>Serial Data:</B></DT>
-  <DD>the number of entries, first key, first value, second key,
-     second value, and so on.</DD>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DD>
-</DL>
-</DL>
-
-<P>
-<A NAME="com.google.common.collect.HashMultimap"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Class <A HREF="com/google/common/collect/HashMultimap.html" title="class in com.google.common.collect">com.google.common.collect.HashMultimap</A> extends com.google.common.collect.AbstractSetMultimap&lt;<A HREF="com/google/common/collect/HashMultimap.html" title="type parameter in HashMultimap">K</A>,<A HREF="com/google/common/collect/HashMultimap.html" title="type parameter in HashMultimap">V</A>&gt; implements Serializable</B></FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-<B>serialVersionUID:&nbsp;</B>0L
-
-<P>
-<A NAME="serialized_methods"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Serialization Methods</B></FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-<A NAME="readObject(java.io.ObjectInputStream)"><!-- --></A><H3>
-readObject</H3>
-<PRE>
-private void <B>readObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectInputStream.html?is-external=true" title="class or interface in java.io">ObjectInputStream</A>&nbsp;stream)
-                 throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A>,
-                        <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></PRE>
-<DL>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></CODE></DD>
-</DL>
-</DL>
-<HR>
-<A NAME="writeObject(java.io.ObjectOutputStream)"><!-- --></A><H3>
-writeObject</H3>
-<PRE>
-private void <B>writeObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectOutputStream.html?is-external=true" title="class or interface in java.io">ObjectOutputStream</A>&nbsp;stream)
-                  throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD><DL>
-<DT><B>Serial Data:</B></DT>
-  <DD>expectedValuesPerKey, number of distinct keys, and then for
-     each distinct key: the key, number of values for that key, and the
-     key's values</DD>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DD>
-</DL>
-</DL>
-
-<P>
-<A NAME="com.google.common.collect.HashMultiset"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Class <A HREF="com/google/common/collect/HashMultiset.html" title="class in com.google.common.collect">com.google.common.collect.HashMultiset</A> extends com.google.common.collect.AbstractMapBasedMultiset&lt;<A HREF="com/google/common/collect/HashMultiset.html" title="type parameter in HashMultiset">E</A>&gt; implements Serializable</B></FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-<B>serialVersionUID:&nbsp;</B>0L
-
-<P>
-<A NAME="serialized_methods"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Serialization Methods</B></FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-<A NAME="readObject(java.io.ObjectInputStream)"><!-- --></A><H3>
-readObject</H3>
-<PRE>
-private void <B>readObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectInputStream.html?is-external=true" title="class or interface in java.io">ObjectInputStream</A>&nbsp;stream)
-                 throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A>,
-                        <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></PRE>
-<DL>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></CODE></DD>
-</DL>
-</DL>
-<HR>
-<A NAME="writeObject(java.io.ObjectOutputStream)"><!-- --></A><H3>
-writeObject</H3>
-<PRE>
-private void <B>writeObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectOutputStream.html?is-external=true" title="class or interface in java.io">ObjectOutputStream</A>&nbsp;stream)
-                  throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD><DL>
-<DT><B>Serial Data:</B></DT>
-  <DD>the number of distinct elements, the first element, its count,
-     the second element, its count, and so on</DD>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DD>
-</DL>
-</DL>
-
-<P>
-<A NAME="com.google.common.collect.ImmutableBiMap"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Class <A HREF="com/google/common/collect/ImmutableBiMap.html" title="class in com.google.common.collect">com.google.common.collect.ImmutableBiMap</A> extends <A HREF="com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">ImmutableMap</A>&lt;<A HREF="com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">K</A>,<A HREF="com/google/common/collect/ImmutableBiMap.html" title="type parameter in ImmutableBiMap">V</A>&gt; implements Serializable</B></FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-<A NAME="serialized_methods"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Serialization Methods</B></FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-<A NAME="writeReplace()"><!-- --></A><H3>
-writeReplace</H3>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A> <B>writeReplace</B>()</PRE>
-<DL>
-<DD><DL>
-</DD>
-</DL>
-</DL>
-
-<P>
-<A NAME="com.google.common.collect.ImmutableCollection"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Class <A HREF="com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">com.google.common.collect.ImmutableCollection</A> extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A> implements Serializable</B></FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-<A NAME="serialized_methods"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Serialization Methods</B></FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-<A NAME="writeReplace()"><!-- --></A><H3>
-writeReplace</H3>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A> <B>writeReplace</B>()</PRE>
-<DL>
-<DD><DL>
-</DD>
-</DL>
-</DL>
-
-<P>
-<A NAME="com.google.common.collect.ImmutableList"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Class <A HREF="com/google/common/collect/ImmutableList.html" title="class in com.google.common.collect">com.google.common.collect.ImmutableList</A> extends <A HREF="com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;<A HREF="com/google/common/collect/ImmutableList.html" title="type parameter in ImmutableList">E</A>&gt; implements Serializable</B></FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-<A NAME="serialized_methods"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Serialization Methods</B></FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-<A NAME="readObject(java.io.ObjectInputStream)"><!-- --></A><H3>
-readObject</H3>
-<PRE>
-private void <B>readObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectInputStream.html?is-external=true" title="class or interface in java.io">ObjectInputStream</A>&nbsp;stream)
-                 throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InvalidObjectException.html?is-external=true" title="class or interface in java.io">InvalidObjectException</A></PRE>
-<DL>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/InvalidObjectException.html?is-external=true" title="class or interface in java.io">InvalidObjectException</A></CODE></DD>
-</DL>
-</DL>
-<HR>
-<A NAME="writeReplace()"><!-- --></A><H3>
-writeReplace</H3>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A> <B>writeReplace</B>()</PRE>
-<DL>
-<DD><DL>
-</DD>
-</DL>
-</DL>
-
-<P>
-<A NAME="com.google.common.collect.ImmutableListMultimap"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Class <A HREF="com/google/common/collect/ImmutableListMultimap.html" title="class in com.google.common.collect">com.google.common.collect.ImmutableListMultimap</A> extends <A HREF="com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;<A HREF="com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">K</A>,<A HREF="com/google/common/collect/ImmutableListMultimap.html" title="type parameter in ImmutableListMultimap">V</A>&gt; implements Serializable</B></FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-<B>serialVersionUID:&nbsp;</B>0L
-
-<P>
-<A NAME="serialized_methods"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Serialization Methods</B></FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-<A NAME="readObject(java.io.ObjectInputStream)"><!-- --></A><H3>
-readObject</H3>
-<PRE>
-private void <B>readObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectInputStream.html?is-external=true" title="class or interface in java.io">ObjectInputStream</A>&nbsp;stream)
-                 throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A>,
-                        <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></PRE>
-<DL>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></CODE></DD>
-</DL>
-</DL>
-<HR>
-<A NAME="writeObject(java.io.ObjectOutputStream)"><!-- --></A><H3>
-writeObject</H3>
-<PRE>
-private void <B>writeObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectOutputStream.html?is-external=true" title="class or interface in java.io">ObjectOutputStream</A>&nbsp;stream)
-                  throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD><DL>
-<DT><B>Serial Data:</B></DT>
-  <DD>number of distinct keys, and then for each distinct key: the
-     key, the number of values for that key, and the key's values</DD>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DD>
-</DL>
-</DL>
-
-<P>
-<A NAME="com.google.common.collect.ImmutableMap"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Class <A HREF="com/google/common/collect/ImmutableMap.html" title="class in com.google.common.collect">com.google.common.collect.ImmutableMap</A> extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A> implements Serializable</B></FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-<A NAME="serialized_methods"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Serialization Methods</B></FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-<A NAME="writeReplace()"><!-- --></A><H3>
-writeReplace</H3>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A> <B>writeReplace</B>()</PRE>
-<DL>
-<DD><DL>
-</DD>
-</DL>
-</DL>
-
-<P>
-<A NAME="com.google.common.collect.ImmutableMultimap"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Class <A HREF="com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">com.google.common.collect.ImmutableMultimap</A> extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A> implements Serializable</B></FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-<B>serialVersionUID:&nbsp;</B>0L
-
-<P>
-
-<P>
-<A NAME="com.google.common.collect.ImmutableMultiset"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Class <A HREF="com/google/common/collect/ImmutableMultiset.html" title="class in com.google.common.collect">com.google.common.collect.ImmutableMultiset</A> extends <A HREF="com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;<A HREF="com/google/common/collect/ImmutableMultiset.html" title="type parameter in ImmutableMultiset">E</A>&gt; implements Serializable</B></FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-<B>serialVersionUID:&nbsp;</B>0L
-
-<P>
-<A NAME="serialized_methods"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Serialization Methods</B></FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-<A NAME="readObject(java.io.ObjectInputStream)"><!-- --></A><H3>
-readObject</H3>
-<PRE>
-private void <B>readObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectInputStream.html?is-external=true" title="class or interface in java.io">ObjectInputStream</A>&nbsp;stream)
-                 throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A>,
-                        <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></PRE>
-<DL>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></CODE></DD>
-</DL>
-</DL>
-<HR>
-<A NAME="writeObject(java.io.ObjectOutputStream)"><!-- --></A><H3>
-writeObject</H3>
-<PRE>
-private void <B>writeObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectOutputStream.html?is-external=true" title="class or interface in java.io">ObjectOutputStream</A>&nbsp;stream)
-                  throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD><DL>
-<DT><B>Serial Data:</B></DT>
-  <DD>the number of distinct elements, the first element, its count,
-     the second element, its count, and so on</DD>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DD>
-</DL>
-</DL>
-<HR>
-<A NAME="writeReplace()"><!-- --></A><H3>
-writeReplace</H3>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A> <B>writeReplace</B>()</PRE>
-<DL>
-<DD><DL>
-</DD>
-</DL>
-</DL>
-
-<P>
-<A NAME="com.google.common.collect.ImmutableSet"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Class <A HREF="com/google/common/collect/ImmutableSet.html" title="class in com.google.common.collect">com.google.common.collect.ImmutableSet</A> extends <A HREF="com/google/common/collect/ImmutableCollection.html" title="class in com.google.common.collect">ImmutableCollection</A>&lt;<A HREF="com/google/common/collect/ImmutableSet.html" title="type parameter in ImmutableSet">E</A>&gt; implements Serializable</B></FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-<A NAME="serialized_methods"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Serialization Methods</B></FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-<A NAME="writeReplace()"><!-- --></A><H3>
-writeReplace</H3>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A> <B>writeReplace</B>()</PRE>
-<DL>
-<DD><DL>
-</DD>
-</DL>
-</DL>
-
-<P>
-<A NAME="com.google.common.collect.ImmutableSetMultimap"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Class <A HREF="com/google/common/collect/ImmutableSetMultimap.html" title="class in com.google.common.collect">com.google.common.collect.ImmutableSetMultimap</A> extends <A HREF="com/google/common/collect/ImmutableMultimap.html" title="class in com.google.common.collect">ImmutableMultimap</A>&lt;<A HREF="com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">K</A>,<A HREF="com/google/common/collect/ImmutableSetMultimap.html" title="type parameter in ImmutableSetMultimap">V</A>&gt; implements Serializable</B></FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-<B>serialVersionUID:&nbsp;</B>0L
-
-<P>
-<A NAME="serialized_methods"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Serialization Methods</B></FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-<A NAME="readObject(java.io.ObjectInputStream)"><!-- --></A><H3>
-readObject</H3>
-<PRE>
-private void <B>readObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectInputStream.html?is-external=true" title="class or interface in java.io">ObjectInputStream</A>&nbsp;stream)
-                 throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A>,
-                        <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></PRE>
-<DL>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></CODE></DD>
-</DL>
-</DL>
-<HR>
-<A NAME="writeObject(java.io.ObjectOutputStream)"><!-- --></A><H3>
-writeObject</H3>
-<PRE>
-private void <B>writeObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectOutputStream.html?is-external=true" title="class or interface in java.io">ObjectOutputStream</A>&nbsp;stream)
-                  throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD><DL>
-<DT><B>Serial Data:</B></DT>
-  <DD>number of distinct keys, and then for each distinct key: the
-     key, the number of values for that key, and the key's values</DD>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DD>
-</DL>
-</DL>
-
-<P>
-<A NAME="com.google.common.collect.ImmutableSortedMap"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Class <A HREF="com/google/common/collect/ImmutableSortedMap.html" title="class in com.google.common.collect">com.google.common.collect.ImmutableSortedMap</A> extends com.google.common.collect.ImmutableSortedMapFauxverideShim&lt;<A HREF="com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">K</A>,<A HREF="com/google/common/collect/ImmutableSortedMap.html" title="type parameter in ImmutableSortedMap">V</A>&gt; implements Serializable</B></FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-<B>serialVersionUID:&nbsp;</B>0L
-
-<P>
-<A NAME="serialized_methods"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Serialization Methods</B></FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-<A NAME="writeReplace()"><!-- --></A><H3>
-writeReplace</H3>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A> <B>writeReplace</B>()</PRE>
-<DL>
-<DD><DL>
-</DD>
-</DL>
-</DL>
-
-<P>
-<A NAME="com.google.common.collect.ImmutableSortedSet"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Class <A HREF="com/google/common/collect/ImmutableSortedSet.html" title="class in com.google.common.collect">com.google.common.collect.ImmutableSortedSet</A> extends com.google.common.collect.ImmutableSortedSetFauxverideShim&lt;<A HREF="com/google/common/collect/ImmutableSortedSet.html" title="type parameter in ImmutableSortedSet">E</A>&gt; implements Serializable</B></FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-<A NAME="serialized_methods"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Serialization Methods</B></FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-<A NAME="readObject(java.io.ObjectInputStream)"><!-- --></A><H3>
-readObject</H3>
-<PRE>
-private void <B>readObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectInputStream.html?is-external=true" title="class or interface in java.io">ObjectInputStream</A>&nbsp;stream)
-                 throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/InvalidObjectException.html?is-external=true" title="class or interface in java.io">InvalidObjectException</A></PRE>
-<DL>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/InvalidObjectException.html?is-external=true" title="class or interface in java.io">InvalidObjectException</A></CODE></DD>
-</DL>
-</DL>
-<HR>
-<A NAME="writeReplace()"><!-- --></A><H3>
-writeReplace</H3>
-<PRE>
-<A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A> <B>writeReplace</B>()</PRE>
-<DL>
-<DD><DL>
-</DD>
-</DL>
-</DL>
-
-<P>
-<A NAME="com.google.common.collect.LinkedHashMultimap"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Class <A HREF="com/google/common/collect/LinkedHashMultimap.html" title="class in com.google.common.collect">com.google.common.collect.LinkedHashMultimap</A> extends com.google.common.collect.AbstractSetMultimap&lt;<A HREF="com/google/common/collect/LinkedHashMultimap.html" title="type parameter in LinkedHashMultimap">K</A>,<A HREF="com/google/common/collect/LinkedHashMultimap.html" title="type parameter in LinkedHashMultimap">V</A>&gt; implements Serializable</B></FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-<B>serialVersionUID:&nbsp;</B>0L
-
-<P>
-<A NAME="serialized_methods"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Serialization Methods</B></FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-<A NAME="readObject(java.io.ObjectInputStream)"><!-- --></A><H3>
-readObject</H3>
-<PRE>
-private void <B>readObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectInputStream.html?is-external=true" title="class or interface in java.io">ObjectInputStream</A>&nbsp;stream)
-                 throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A>,
-                        <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></PRE>
-<DL>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></CODE></DD>
-</DL>
-</DL>
-<HR>
-<A NAME="writeObject(java.io.ObjectOutputStream)"><!-- --></A><H3>
-writeObject</H3>
-<PRE>
-private void <B>writeObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectOutputStream.html?is-external=true" title="class or interface in java.io">ObjectOutputStream</A>&nbsp;stream)
-                  throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD><DL>
-<DT><B>Serial Data:</B></DT>
-  <DD>the number of distinct keys, and then for each distinct key:
-     the first key, the number of values for that key, and the key's values,
-     followed by successive keys and values from the entries() ordering</DD>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DD>
-</DL>
-</DL>
-
-<P>
-<A NAME="com.google.common.collect.LinkedHashMultiset"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Class <A HREF="com/google/common/collect/LinkedHashMultiset.html" title="class in com.google.common.collect">com.google.common.collect.LinkedHashMultiset</A> extends com.google.common.collect.AbstractMapBasedMultiset&lt;<A HREF="com/google/common/collect/LinkedHashMultiset.html" title="type parameter in LinkedHashMultiset">E</A>&gt; implements Serializable</B></FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-<B>serialVersionUID:&nbsp;</B>0L
-
-<P>
-<A NAME="serialized_methods"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Serialization Methods</B></FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-<A NAME="readObject(java.io.ObjectInputStream)"><!-- --></A><H3>
-readObject</H3>
-<PRE>
-private void <B>readObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectInputStream.html?is-external=true" title="class or interface in java.io">ObjectInputStream</A>&nbsp;stream)
-                 throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A>,
-                        <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></PRE>
-<DL>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></CODE></DD>
-</DL>
-</DL>
-<HR>
-<A NAME="writeObject(java.io.ObjectOutputStream)"><!-- --></A><H3>
-writeObject</H3>
-<PRE>
-private void <B>writeObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectOutputStream.html?is-external=true" title="class or interface in java.io">ObjectOutputStream</A>&nbsp;stream)
-                  throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD><DL>
-<DT><B>Serial Data:</B></DT>
-  <DD>the number of distinct elements, the first element, its count,
-     the second element, its count, and so on</DD>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DD>
-</DL>
-</DL>
-
-<P>
-<A NAME="com.google.common.collect.LinkedListMultimap"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Class <A HREF="com/google/common/collect/LinkedListMultimap.html" title="class in com.google.common.collect">com.google.common.collect.LinkedListMultimap</A> extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</A> implements Serializable</B></FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-<B>serialVersionUID:&nbsp;</B>0L
-
-<P>
-<A NAME="serialized_methods"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Serialization Methods</B></FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-<A NAME="readObject(java.io.ObjectInputStream)"><!-- --></A><H3>
-readObject</H3>
-<PRE>
-private void <B>readObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectInputStream.html?is-external=true" title="class or interface in java.io">ObjectInputStream</A>&nbsp;stream)
-                 throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A>,
-                        <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></PRE>
-<DL>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></CODE></DD>
-</DL>
-</DL>
-<HR>
-<A NAME="writeObject(java.io.ObjectOutputStream)"><!-- --></A><H3>
-writeObject</H3>
-<PRE>
-private void <B>writeObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectOutputStream.html?is-external=true" title="class or interface in java.io">ObjectOutputStream</A>&nbsp;stream)
-                  throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD><DL>
-<DT><B>Serial Data:</B></DT>
-  <DD>the number of distinct keys, and then for each distinct key:
-     the first key, the number of values for that key, and the key's values,
-     followed by successive keys and values from the entries() ordering</DD>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DD>
-</DL>
-</DL>
-
-<P>
-<A NAME="com.google.common.collect.TreeMultimap"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Class <A HREF="com/google/common/collect/TreeMultimap.html" title="class in com.google.common.collect">com.google.common.collect.TreeMultimap</A> extends com.google.common.collect.AbstractSortedSetMultimap&lt;<A HREF="com/google/common/collect/TreeMultimap.html" title="type parameter in TreeMultimap">K</A>,<A HREF="com/google/common/collect/TreeMultimap.html" title="type parameter in TreeMultimap">V</A>&gt; implements Serializable</B></FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-<B>serialVersionUID:&nbsp;</B>0L
-
-<P>
-<A NAME="serialized_methods"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Serialization Methods</B></FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-<A NAME="readObject(java.io.ObjectInputStream)"><!-- --></A><H3>
-readObject</H3>
-<PRE>
-private void <B>readObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectInputStream.html?is-external=true" title="class or interface in java.io">ObjectInputStream</A>&nbsp;stream)
-                 throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A>,
-                        <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></PRE>
-<DL>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></CODE></DD>
-</DL>
-</DL>
-<HR>
-<A NAME="writeObject(java.io.ObjectOutputStream)"><!-- --></A><H3>
-writeObject</H3>
-<PRE>
-private void <B>writeObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectOutputStream.html?is-external=true" title="class or interface in java.io">ObjectOutputStream</A>&nbsp;stream)
-                  throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD><DL>
-<DT><B>Serial Data:</B></DT>
-  <DD>key comparator, value comparator, number of distinct keys, and
-     then for each distinct key: the key, number of values for that key, and
-     key values</DD>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DD>
-</DL>
-</DL>
-
-<P>
-<A NAME="com.google.common.collect.TreeMultiset"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Class <A HREF="com/google/common/collect/TreeMultiset.html" title="class in com.google.common.collect">com.google.common.collect.TreeMultiset</A> extends com.google.common.collect.AbstractMapBasedMultiset&lt;<A HREF="com/google/common/collect/TreeMultiset.html" title="type parameter in TreeMultiset">E</A>&gt; implements Serializable</B></FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-<B>serialVersionUID:&nbsp;</B>0L
-
-<P>
-<A NAME="serialized_methods"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Serialization Methods</B></FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-<A NAME="readObject(java.io.ObjectInputStream)"><!-- --></A><H3>
-readObject</H3>
-<PRE>
-private void <B>readObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectInputStream.html?is-external=true" title="class or interface in java.io">ObjectInputStream</A>&nbsp;stream)
-                 throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A>,
-                        <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></PRE>
-<DL>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</A></CODE></DD>
-</DL>
-</DL>
-<HR>
-<A NAME="writeObject(java.io.ObjectOutputStream)"><!-- --></A><H3>
-writeObject</H3>
-<PRE>
-private void <B>writeObject</B>(<A HREF="http://java.sun.com/javase/6/docs/api/java/io/ObjectOutputStream.html?is-external=true" title="class or interface in java.io">ObjectOutputStream</A>&nbsp;stream)
-                  throws <A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></PRE>
-<DL>
-<DD><DL>
-<DT><B>Serial Data:</B></DT>
-  <DD>the comparator, the number of distinct elements, the first
-     element, its count, the second element, its count, and so on</DD>
-
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="http://java.sun.com/javase/6/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</A></CODE></DD>
-</DL>
-</DL>
-<HR SIZE="4" NOSHADE>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="center"><FONT SIZE="+2">
-<B>Package</B> <B>com.google.common.util.concurrent</B></FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-<A NAME="com.google.common.util.concurrent.UncheckedTimeoutException"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Class <A HREF="com/google/common/util/concurrent/UncheckedTimeoutException.html" title="class in com.google.common.util.concurrent">com.google.common.util.concurrent.UncheckedTimeoutException</A> extends <A HREF="http://java.sun.com/javase/6/docs/api/java/lang/RuntimeException.html?is-external=true" title="class or interface in java.lang">RuntimeException</A> implements Serializable</B></FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-<B>serialVersionUID:&nbsp;</B>0L
-
-<P>
-
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
-  <TR ALIGN="center" VALIGN="top">
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
-  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
-  </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-  <A HREF="index.html?serialized-form.html" target="_top"><B>FRAMES</B></A>  &nbsp;
-&nbsp;<A HREF="serialized-form.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
-  <!--
-  if(window==top) {
-    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
-  }
-  //-->
-</SCRIPT>
-<NOSCRIPT>
-  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/javadoc/stylesheet.css b/javadoc/stylesheet.css
deleted file mode 100644
index 6ea9e51..0000000
--- a/javadoc/stylesheet.css
+++ /dev/null
@@ -1,29 +0,0 @@
-/* Javadoc style sheet */
-
-/* Define colors, fonts and other style attributes here to override the defaults */
-
-/* Page background color */
-body { background-color: #FFFFFF; color:#000000 }
-
-/* Headings */
-h1 { font-size: 145% }
-
-/* Table colors */
-.TableHeadingColor     { background: #CCCCFF; color:#000000 } /* Dark mauve */
-.TableSubHeadingColor  { background: #EEEEFF; color:#000000 } /* Light mauve */
-.TableRowColor         { background: #FFFFFF; color:#000000 } /* White */
-
-/* Font used in left-hand frame lists */
-.FrameTitleFont   { font-size: 100%; font-family: Helvetica, Arial, sans-serif; color:#000000 }
-.FrameHeadingFont { font-size:  90%; font-family: Helvetica, Arial, sans-serif; color:#000000 }
-.FrameItemFont    { font-size:  90%; font-family: Helvetica, Arial, sans-serif; color:#000000 }
-
-/* Navigation bar fonts and colors */
-.NavBarCell1    { background-color:#EEEEFF; color:#000000} /* Light mauve */
-.NavBarCell1Rev { background-color:#00008B; color:#FFFFFF} /* Dark Blue */
-.NavBarFont1    { font-family: Arial, Helvetica, sans-serif; color:#000000;color:#000000;}
-.NavBarFont1Rev { font-family: Arial, Helvetica, sans-serif; color:#FFFFFF;color:#FFFFFF;}
-
-.NavBarCell2    { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF; color:#000000}
-.NavBarCell3    { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF; color:#000000}
-
diff --git a/mvn-deploy.sh b/mvn-deploy.sh
new file mode 100644
index 0000000..4c8a5f7
--- /dev/null
+++ b/mvn-deploy.sh
@@ -0,0 +1,40 @@
+#!/bin/bash
+#
+# This script checks the java version and bails if it's less
+# than Java6 (because we use @Override annotations on interface
+# overriding methods.  It then proceeds to do a maven build that
+# first cleans, then builds the normal lifecycle through compilation
+# unit testing (if available) up to packaging.  It then packages
+# the source, javadocs, and maven site.  It then signs the 
+# artifacts with whatever pgp signature is the default of the 
+# user executing it, and then deploys to the repository contained
+# in the distributionManagement section of the pom.
+#
+# author: cgruber@google.com (Christian Edward Gruber)
+#
+if [[ -n ${JAVA_HOME} ]] ; then 
+  JAVA_CMD=${JAVA_HOME}/bin/java
+else
+  JAVA_CMD=java
+fi
+java_version="$(${JAVA_CMD} -version 2>&1 | grep -e 'java version' | awk '{ print $3 }')"
+
+# This test sucks, but it's short term
+# TODO(cgruber) strip the quotes and patch version and do version comparison. 
+greater_than_java5="$(echo ${java_version} | grep -e '^"1.[67]')"
+
+if [[ -z ${greater_than_java5} ]] ; then
+  echo "Your java version is ${java_version}."
+  echo "You must use at least a java 6 JVM to build and deploy this software."
+  exit 1
+else
+  echo "Building with java ${java_version}"
+fi
+
+if [[ $# > 0 ]]; then
+  params+=" -Dgpg.keyname=${1}"
+  gpg_sign_plugin=" gpg:sign"
+fi
+cmd="mvn clean package source:jar site:jar javadoc:jar ${gpg_sign_plugin} deploy ${params}"
+echo "Executing ${cmd}"
+${cmd}
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..774b0d7
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" 
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.sonatype.oss</groupId>
+    <artifactId>oss-parent</artifactId>
+    <version>7</version>
+  </parent>
+  <groupId>com.google.guava</groupId>
+  <artifactId>guava-parent</artifactId>
+  <version>11.0.2</version>
+  <packaging>pom</packaging>
+  <name>Guava Maven Parent</name>
+  <url>http://code.google.com/p/guava-libraries</url>
+  <issueManagement>
+    <system>code.google.com</system>
+    <url>http://code.google.com/p/guava-libraries/issues</url>
+  </issueManagement>
+  <inceptionYear>2010</inceptionYear>
+  <licenses>
+    <license>
+      <name>The Apache Software License, Version 2.0</name>
+      <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
+      <distribution>repo</distribution>
+    </license>
+  </licenses>
+  <prerequisites>
+    <maven>2.0.9</maven>
+  </prerequisites>
+  <scm>
+    <connection>scm:git:https://code.google.com/p/guava-libraries/</connection>
+    <developerConnection>scm:git:https://code.google.com/p/guava-libraries/</developerConnection>
+    <url>http://code.google.com/p/guava-libraries/source/browse</url>
+  </scm>
+  <developers>
+    <developer>
+      <id>kevinb9n</id>
+      <name>Kevin Bourillion</name>
+      <email>kevinb@google.com</email>
+      <organization>Google</organization>
+      <organizationUrl>http://www.google.com</organizationUrl>
+      <roles>
+        <role>owner</role>
+        <role>developer</role>
+      </roles>
+      <timezone>-8</timezone>
+    </developer>
+  </developers>
+  <modules>
+    <module>guava</module>
+    <module>guava-bootstrap</module>
+    <module>guava-gwt</module>
+    <module>guava-testlib</module>
+    <module>guava-tests</module>
+  </modules>
+</project>
diff --git a/src/com/google/common/annotations/GwtCompatible.java b/src/com/google/common/annotations/GwtCompatible.java
deleted file mode 100644
index deb95f1..0000000
--- a/src/com/google/common/annotations/GwtCompatible.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright (C) 2009 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.annotations;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * The presence of this annotation on a type indicates that the type may be
- * used with the
- * <a href="http://code.google.com/webtoolkit/">Google Web Toolkit</a> (GWT).
- * When applied to a method, the return type of the method is GWT compatible.
- * It's useful to indicate that an instance created by factory methods has a GWT
- * serializable type.  In the following example,
- *
- * <pre style="code">
- * {@literal @}GwtCompatible
- * class Lists {
- *   ...
- *   {@literal @}GwtCompatible(serializable = true)
- *   static &lt;E> List&lt;E> newArrayList(E... elements) {
- *     ...
- *   }
- * }
- * </pre>
- * The return value of {@code Lists.newArrayList(E[])} has GWT
- * serializable type.  It is also useful in specifying contracts of interface
- * methods.  In the following example,
- *
- * <pre style="code">
- * {@literal @}GwtCompatible
- * interface ListFactory {
- *   ...
- *   {@literal @}GwtCompatible(serializable = true)
- *   &lt;E> List&lt;E> newArrayList(E... elements);
- * }
- * </pre>
- * The {@code newArrayList(E[])} method of all implementations of {@code
- * ListFactory} is expected to return a value with a GWT serializable type.
- *
- * <p>Note that a {@code GwtCompatible} type may have some {@link
- * GwtIncompatible} methods.
- *
- * @author Charles Fry
- * @author Hayward Chan
- */
-@Retention(RetentionPolicy.CLASS)
-@Target({ ElementType.TYPE, ElementType.METHOD })
-// @Documented - uncomment when GWT support is official
-@GwtCompatible
-public @interface GwtCompatible {
-
-  /**
-   * When {@code true}, the annotated type or the type of the method return
-   * value is GWT serializable.
-   *
-   * @see <a href="http://code.google.com/docreader/#p=google-web-toolkit-doc-1-5&t=DevGuideSerializableTypes">
-   *     Documentation about GWT serialization</a>
-   */
-  boolean serializable() default false;
-
-  /**
-   * When {@code true}, the annotated type is emulated in GWT. The emulated
-   * source (also known as super-source) is different from the implementation
-   * used by the JVM.
-   *
-   * @see <a href="http://code.google.com/docreader/#p=google-web-toolkit-doc-1-5&t=DevGuideModuleXml">
-   *     Documentation about GWT emulated source</a>
-   */
-  boolean emulated() default false;
-}
diff --git a/src/com/google/common/annotations/GwtIncompatible.java b/src/com/google/common/annotations/GwtIncompatible.java
deleted file mode 100644
index bd85b74..0000000
--- a/src/com/google/common/annotations/GwtIncompatible.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (C) 2009 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.annotations;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * The presence of this annotation on a method indicates that the method may
- * <em>not</em> be used with the
- * <a href="http://code.google.com/webtoolkit/">Google Web Toolkit</a> (GWT),
- * even though its type is annotated as {@link GwtCompatible} and accessible in
- * GWT.  They can cause GWT compilation errors or simply unexpected exceptions
- * when used in GWT.
- *
- * <p>Note that this annotation should only be applied to methods of types which
- * are annotated as {@link GwtCompatible}.
- *
- * @author Charles Fry
- */
-@Retention(RetentionPolicy.CLASS)
-@Target(ElementType.METHOD)
-// @Documented - uncomment when GWT support is official
-@GwtCompatible
-public @interface GwtIncompatible {
-
-  /**
-   * Describes why the annotated element is incompatible with GWT. Since this is
-   * generally due to a dependence on a type/method which GWT doesn't support,
-   * it is sufficient to simply reference the unsupported type/method. E.g.
-   * "Class.isInstance".
-   */
-  String value();
-
-}
diff --git a/src/com/google/common/annotations/VisibleForTesting.java b/src/com/google/common/annotations/VisibleForTesting.java
deleted file mode 100644
index d890ba6..0000000
--- a/src/com/google/common/annotations/VisibleForTesting.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (C) 2006 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.annotations;
-
-/**
- * An annotation that indicates that the visibility of a type or member has
- * been relaxed to make the code testable.
- *
- * @author Johannes Henkel
- */
-@GwtCompatible
-public @interface VisibleForTesting {}
diff --git a/src/com/google/common/base/CaseFormat.java b/src/com/google/common/base/CaseFormat.java
deleted file mode 100644
index bdbc34e..0000000
--- a/src/com/google/common/base/CaseFormat.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * Copyright (C) 2006 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.base;
-
-import java.util.Locale;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-/**
- * Utility class for converting between various case formats.
- *
- * @author Mike Bostock
- * @since 2009.09.15 <b>tentative</b>
- */
-public enum CaseFormat {
-
-  /**
-   * Hyphenated variable naming convention, e.g., "lower-hyphen".
-   */
-  LOWER_HYPHEN(Pattern.compile("[-]"), "-"),
-
-  /**
-   * C++ variable naming convention, e.g., "lower_underscore".
-   */
-  LOWER_UNDERSCORE(Pattern.compile("[_]"), "_"),
-
-  /**
-   * Java variable naming convention, e.g., "lowerCamel".
-   */
-  LOWER_CAMEL(Pattern.compile("[A-Z]"), ""),
-
-  /**
-   * Java and C++ class naming convention, e.g., "UpperCamel".
-   */
-  UPPER_CAMEL(Pattern.compile("[A-Z]"), ""),
-
-  /**
-   * Java and C++ constant naming convention, e.g., "UPPER_UNDERSCORE".
-   */
-  UPPER_UNDERSCORE(Pattern.compile("[_]"), "_");
-
-  private final Pattern wordBoundary;
-  private final String wordSeparator;
-
-  private CaseFormat(Pattern wordBoundary, String wordSeparator) {
-    this.wordBoundary = wordBoundary;
-    this.wordSeparator = wordSeparator;
-  }
-
-  /**
-   * Converts the specified {@code String s} from this format to the specified
-   * {@code format}. A "best effort" approach is taken; if {@code s} does not
-   * conform to the assumed format, then the behavior of this method is
-   * undefined but we make a reasonable effort at converting anyway.
-   */
-  public String to(CaseFormat format, String s) {
-    if (format == null) {
-      throw new NullPointerException();
-    }
-    if (s == null) {
-      throw new NullPointerException();
-    }
-
-    /* optimize case where no conversion is required */
-    if (format == this) {
-      return s;
-    }
-
-    /* optimize cases where no camel conversion is required */
-    switch (this) {
-      case LOWER_HYPHEN:
-        switch (format) {
-          case LOWER_UNDERSCORE: return s.replace("-", "_");
-          case UPPER_UNDERSCORE: return s.replace("-", "_").toUpperCase(Locale.US);
-        }
-        break;
-      case LOWER_UNDERSCORE:
-        switch (format) {
-          case LOWER_HYPHEN: return s.replace("_", "-");
-          case UPPER_UNDERSCORE: return s.toUpperCase(Locale.US);
-        }
-        break;
-      case UPPER_UNDERSCORE:
-        switch (format) {
-          case LOWER_HYPHEN: return s.replace("_", "-").toLowerCase(Locale.US);
-          case LOWER_UNDERSCORE: return s.toLowerCase(Locale.US);
-        }
-        break;
-    }
-
-    /* otherwise, deal with camel conversion */
-    StringBuilder out = null;
-    int i = 0;
-    for (Matcher matcher = wordBoundary.matcher(s); matcher.find();) {
-      int j = matcher.start();
-      if (i == 0) {
-        /* include some extra space for separators */
-        out = new StringBuilder(s.length() + 4 * wordSeparator.length());
-        out.append(format.normalizeFirstWord(s.substring(i, j)));
-      } else {
-        out.append(format.normalizeWord(s.substring(i, j)));
-      }
-      out.append(format.wordSeparator);
-      i = j + wordSeparator.length();
-    }
-    if (i == 0) {
-      return format.normalizeFirstWord(s);
-    }
-    out.append(format.normalizeWord(s.substring(i)));
-    return out.toString();
-  }
-
-  private String normalizeFirstWord(String word) {
-    switch (this) {
-      case LOWER_CAMEL: return word.toLowerCase(Locale.US);
-      default: return normalizeWord(word);
-    }
-  }
-
-  private String normalizeWord(String word) {
-    switch (this) {
-      case LOWER_HYPHEN: return word.toLowerCase(Locale.US);
-      case LOWER_UNDERSCORE: return word.toLowerCase(Locale.US);
-      case LOWER_CAMEL: return toTitleCase(word);
-      case UPPER_CAMEL: return toTitleCase(word);
-      case UPPER_UNDERSCORE: return word.toUpperCase(Locale.US);
-    }
-    throw new RuntimeException("unknown case: " + this);
-  }
-
-  private static String toTitleCase(String word) {
-    return (word.length() < 2) ? word.toUpperCase(Locale.US)
-        : (Character.toTitleCase(word.charAt(0))
-           + word.substring(1).toLowerCase(Locale.US));
-  }
-
-}
diff --git a/src/com/google/common/base/CharMatcher.java b/src/com/google/common/base/CharMatcher.java
deleted file mode 100644
index 16c50cc..0000000
--- a/src/com/google/common/base/CharMatcher.java
+++ /dev/null
@@ -1,1112 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.base;
-
-import com.google.common.annotations.GwtCompatible;
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * Determines a true or false value for any Java {@code char} value, just as
- * {@link Predicate} does for any {@link Object}. Also offers basic text
- * processing methods based on this function. Implementations are strongly
- * encouraged to be side-effect-free and immutable.
- *
- * <p>Throughout the documentation of this class, the phrase "matching
- * character" is used to mean "any character {@code c} for which {@code
- * this.matches(c)} returns {@code true}".
- *
- * <p><b>Note:</b> This class deals only with {@code char} values; it does not
- * understand supplementary Unicode code points in the range {@code 0x10000} to
- * {@code 0x10FFFF}. Such logical characters are encoded into a {@code String}
- * using surrogate pairs, and a {@code CharMatcher} treats these just as two
- * separate characters.
- *
- * @author Kevin Bourrillion
- * @since 2009.09.15 <b>tentative</b>
- */
-@GwtCompatible
-public abstract class CharMatcher implements Predicate<Character> {
-
-  // Constants
-
-  // Excludes 2000-2000a, which is handled as a range
-  private static final String BREAKING_WHITESPACE_CHARS =
-      "\t\n\013\f\r \u0085\u1680\u2028\u2029\u205f\u3000";
-
-  // Excludes 2007, which is handled as a gap in a pair of ranges
-  private static final String NON_BREAKING_WHITESPACE_CHARS =
-      "\u00a0\u180e\u202f";
-
-  /**
-   * Determines whether a character is whitespace according to the latest
-   * Unicode standard, as illustrated
-   * <a href="http://unicode.org/cldr/utility/list-unicodeset.jsp?a=%5Cp%7Bwhitespace%7D">here</a>.
-   * This is not the same definition used by other Java APIs. See a comparison
-   * of several definitions of "whitespace" at
-   * <a href="TODO">(TODO)</a>.
-   *
-   * <p><b>Note:</b> as the Unicode definition evolves, we will modify this
-   * constant to keep it up to date.
-   */
-  public static final CharMatcher WHITESPACE =
-      anyOf(BREAKING_WHITESPACE_CHARS + NON_BREAKING_WHITESPACE_CHARS)
-          .or(inRange('\u2000', '\u200a'));
-
-  /**
-   * Determines whether a character is a breaking whitespace (that is,
-   * a whitespace which can be interpreted as a break between words
-   * for formatting purposes).  See {@link #WHITESPACE} for a discussion
-   * of that term.
-   *
-   * @since 2010.01.04 <b>tentative</b>
-   */
-  public static final CharMatcher BREAKING_WHITESPACE =
-      anyOf(BREAKING_WHITESPACE_CHARS)
-          .or(inRange('\u2000', '\u2006'))
-          .or(inRange('\u2008', '\u200a'));
-
-  /**
-   * Determines whether a character is ASCII, meaning that its code point is
-   * less than 128.
-   */
-  public static final CharMatcher ASCII = inRange('\0', '\u007f');
-
-  /**
-   * Determines whether a character is a digit according to
-   * <a href="http://unicode.org/cldr/utility/list-unicodeset.jsp?a=%5Cp%7Bdigit%7D">Unicode</a>.
-   */
-  public static final CharMatcher DIGIT;
-
-  static {
-    CharMatcher digit = inRange('0', '9');
-    String zeroes =
-        "\u0660\u06f0\u07c0\u0966\u09e6\u0a66\u0ae6\u0b66\u0be6\u0c66"
-            + "\u0ce6\u0d66\u0e50\u0ed0\u0f20\u1040\u1090\u17e0\u1810\u1946"
-            + "\u19d0\u1b50\u1bb0\u1c40\u1c50\ua620\ua8d0\ua900\uaa50\uff10";
-    for (char base : zeroes.toCharArray()) {
-      digit = digit.or(inRange(base, (char) (base + 9)));
-    }
-    DIGIT = digit;
-  }
-
-  /**
-   * Determines whether a character is whitespace according to {@link
-   * Character#isWhitespace(char) Java's definition}; it is usually preferable
-   * to use {@link #WHITESPACE}. See a comparison of several definitions of
-   * "whitespace" at <a href="http://go/white+space">go/white+space</a>.
-   */
-  public static final CharMatcher JAVA_WHITESPACE
-      = inRange('\u0009', (char) 13)  // \\u000d doesn't work as a char literal
-      .or(inRange('\u001c', '\u0020'))
-      .or(is('\u1680'))
-      .or(is('\u180e'))
-      .or(inRange('\u2000', '\u2006'))
-      .or(inRange('\u2008', '\u200b'))
-      .or(inRange('\u2028', '\u2029'))
-      .or(is('\u205f'))
-      .or(is('\u3000'));
-
-  /**
-   * Determines whether a character is a digit according to {@link
-   * Character#isDigit(char) Java's definition}. If you only care to match
-   * ASCII digits, you can use {@code inRange('0', '9')}.
-   */
-  public static final CharMatcher JAVA_DIGIT = new CharMatcher() {
-    @Override public boolean matches(char c) {
-      return Character.isDigit(c);
-    }
-  };
-
-  /**
-   * Determines whether a character is a letter according to {@link
-   * Character#isLetter(char) Java's definition}. If you only care to match
-   * letters of the Latin alphabet, you can use {@code
-   * inRange('a', 'z').or(inRange('A', 'Z'))}.
-   */
-  public static final CharMatcher JAVA_LETTER = new CharMatcher() {
-    @Override public boolean matches(char c) {
-      return Character.isLetter(c);
-    }
-  };
-
-  /**
-   * Determines whether a character is a letter or digit according to {@link
-   * Character#isLetterOrDigit(char) Java's definition}.
-   */
-  public static final CharMatcher JAVA_LETTER_OR_DIGIT = new CharMatcher() {
-    @Override public boolean matches(char c) {
-      return Character.isLetterOrDigit(c);
-    }
-  };
-
-  /**
-   * Determines whether a character is upper case according to {@link
-   * Character#isUpperCase(char) Java's definition}.
-   */
-  public static final CharMatcher JAVA_UPPER_CASE = new CharMatcher() {
-    @Override public boolean matches(char c) {
-      return Character.isUpperCase(c);
-    }
-  };
-
-  /**
-   * Determines whether a character is lower case according to {@link
-   * Character#isLowerCase(char) Java's definition}.
-   */
-  public static final CharMatcher JAVA_LOWER_CASE = new CharMatcher() {
-    @Override public boolean matches(char c) {
-      return Character.isLowerCase(c);
-    }
-  };
-
-  /**
-   * Determines whether a character is an ISO control character according to
-   * {@link Character#isISOControl(char)}.
-   */
-  public static final CharMatcher JAVA_ISO_CONTROL = inRange('\u0000', '\u001f')
-      .or(inRange('\u007f', '\u009f'));
-
-  /**
-   * Determines whether a character is invisible; that is, if its Unicode
-   * category is any of SPACE_SEPARATOR, LINE_SEPARATOR,
-   * PARAGRAPH_SEPARATOR, CONTROL, FORMAT, SURROGATE, and PRIVATE_USE according
-   * to ICU4J.
-   */
-  public static final CharMatcher INVISIBLE = inRange('\u0000', '\u0020')
-      .or(inRange('\u007f', '\u00a0'))
-      .or(is('\u00ad'))
-      .or(inRange('\u0600', '\u0603'))
-      .or(anyOf("\u06dd\u070f\u1680\u17b4\u17b5\u180e"))
-      .or(inRange('\u2000', '\u200f'))
-      .or(inRange('\u2028', '\u202f'))
-      .or(inRange('\u205f', '\u2064'))
-      .or(inRange('\u206a', '\u206f'))
-      .or(is('\u3000'))
-      .or(inRange('\ud800', '\uf8ff'))
-      .or(anyOf("\ufeff\ufff9\ufffa\ufffb"));
-
-  /**
-   * Determines whether a character is single-width (not double-width).  When
-   * in doubt, this matcher errs on the side of returning {@code false} (that
-   * is, it tends to assume a character is double-width).
-   *
-   * <b>Note:</b> as the reference file evolves, we will modify this constant
-   * to keep it up to date.
-   */
-  public static final CharMatcher SINGLE_WIDTH = inRange('\u0000', '\u04f9')
-      .or(is('\u05be'))
-      .or(inRange('\u05d0', '\u05ea'))
-      .or(is('\u05f3'))
-      .or(is('\u05f4'))
-      .or(inRange('\u0600', '\u06ff'))
-      .or(inRange('\u0750', '\u077f'))
-      .or(inRange('\u0e00', '\u0e7f'))
-      .or(inRange('\u1e00', '\u20af'))
-      .or(inRange('\u2100', '\u213a'))
-      .or(inRange('\ufb50', '\ufdff'))
-      .or(inRange('\ufe70', '\ufeff'))
-      .or(inRange('\uff61', '\uffdc'));
-
-  /** Matches any character. */
-  public static final CharMatcher ANY = new CharMatcher() {
-    @Override public boolean matches(char c) {
-      return true;
-    }
-
-    @Override public int indexIn(CharSequence sequence) {
-      return (sequence.length() == 0) ? -1 : 0;
-    }
-    @Override public int indexIn(CharSequence sequence, int start) {
-      int length = sequence.length();
-      Preconditions.checkPositionIndex(start, length);
-      return (start == length) ? -1 : start;
-    }
-    @Override public int lastIndexIn(CharSequence sequence) {
-      return sequence.length() - 1;
-    }
-    @Override public boolean matchesAllOf(CharSequence sequence) {
-      checkNotNull(sequence);
-      return true;
-    }
-    @Override public boolean matchesNoneOf(CharSequence sequence) {
-      return sequence.length() == 0;
-    }
-    @Override public String removeFrom(CharSequence sequence) {
-      checkNotNull(sequence);
-      return "";
-    }
-    @Override public String replaceFrom(
-        CharSequence sequence, char replacement) {
-      char[] array = new char[sequence.length()];
-      Arrays.fill(array, replacement);
-      return new String(array);
-    }
-    @Override public String replaceFrom(
-        CharSequence sequence, CharSequence replacement) {
-      StringBuilder retval = new StringBuilder(sequence.length() * replacement.length());
-      for (int i = 0; i < sequence.length(); i++) {
-        retval.append(replacement);
-      }
-      return retval.toString();
-    }
-    @Override public String collapseFrom(CharSequence sequence, char replacement) {
-      return (sequence.length() == 0) ? "" : String.valueOf(replacement);
-    }
-    @Override public String trimFrom(CharSequence sequence) {
-      checkNotNull(sequence);
-      return "";
-    }
-    @Override public int countIn(CharSequence sequence) {
-      return sequence.length();
-    }
-    @Override public CharMatcher and(CharMatcher other) {
-      return checkNotNull(other);
-    }
-    @Override public CharMatcher or(CharMatcher other) {
-      checkNotNull(other);
-      return this;
-    }
-    @Override public CharMatcher negate() {
-      return NONE;
-    }
-    @Override public CharMatcher precomputed() {
-      return this;
-    }
-  };
-
-  /** Matches no characters. */
-  public static final CharMatcher NONE = new CharMatcher() {
-    @Override public boolean matches(char c) {
-      return false;
-    }
-
-    @Override public int indexIn(CharSequence sequence) {
-      checkNotNull(sequence);
-      return -1;
-    }
-    @Override public int indexIn(CharSequence sequence, int start) {
-      int length = sequence.length();
-      Preconditions.checkPositionIndex(start, length);
-      return -1;
-    }
-    @Override public int lastIndexIn(CharSequence sequence) {
-      checkNotNull(sequence);
-      return -1;
-    }
-    @Override public boolean matchesAllOf(CharSequence sequence) {
-      return sequence.length() == 0;
-    }
-    @Override public boolean matchesNoneOf(CharSequence sequence) {
-      checkNotNull(sequence);
-      return true;
-    }
-    @Override public String removeFrom(CharSequence sequence) {
-      return sequence.toString();
-    }
-    @Override public String replaceFrom(
-        CharSequence sequence, char replacement) {
-      return sequence.toString();
-    }
-    @Override public String replaceFrom(
-        CharSequence sequence, CharSequence replacement) {
-      checkNotNull(replacement);
-      return sequence.toString();
-    }
-    @Override public String collapseFrom(
-        CharSequence sequence, char replacement) {
-      return sequence.toString();
-    }
-    @Override public String trimFrom(CharSequence sequence) {
-      return sequence.toString();
-    }
-    @Override public int countIn(CharSequence sequence) {
-      checkNotNull(sequence);
-      return 0;
-    }
-    @Override public CharMatcher and(CharMatcher other) {
-      checkNotNull(other);
-      return this;
-    }
-    @Override public CharMatcher or(CharMatcher other) {
-      return checkNotNull(other);
-    }
-    @Override public CharMatcher negate() {
-      return ANY;
-    }
-    @Override protected void setBits(LookupTable table) {
-    }
-    @Override public CharMatcher precomputed() {
-      return this;
-    }
-  };
-
-  // Static factories
-
-  /**
-   * Returns a {@code char} matcher that matches only one specified character.
-   */
-  public static CharMatcher is(final char match) {
-    return new CharMatcher() {
-      @Override public boolean matches(char c) {
-        return c == match;
-      }
-
-      @Override public String replaceFrom(
-          CharSequence sequence, char replacement) {
-        return sequence.toString().replace(match, replacement);
-      }
-      @Override public CharMatcher and(CharMatcher other) {
-        return other.matches(match) ? this : NONE;
-      }
-      @Override public CharMatcher or(CharMatcher other) {
-        return other.matches(match) ? other : super.or(other);
-      }
-      @Override public CharMatcher negate() {
-        return isNot(match);
-      }
-      @Override protected void setBits(LookupTable table) {
-        table.set(match);
-      }
-      @Override public CharMatcher precomputed() {
-        return this;
-      }
-    };
-  }
-
-  /**
-   * Returns a {@code char} matcher that matches any character except the one
-   * specified.
-   *
-   * <p>To negate another {@code CharMatcher}, use {@link #negate()}.
-   */
-  public static CharMatcher isNot(final char match) {
-    return new CharMatcher() {
-      @Override public boolean matches(char c) {
-        return c != match;
-      }
-
-      @Override public CharMatcher and(CharMatcher other) {
-        return other.matches(match) ? super.and(other) : other;
-      }
-      @Override public CharMatcher or(CharMatcher other) {
-        return other.matches(match) ? ANY : this;
-      }
-      @Override public CharMatcher negate() {
-        return is(match);
-      }
-    };
-  }
-
-  /**
-   * Returns a {@code char} matcher that matches any character present in the
-   * given character sequence.
-   */
-  public static CharMatcher anyOf(final CharSequence sequence) {
-    switch (sequence.length()) {
-      case 0:
-        return NONE;
-      case 1:
-        return is(sequence.charAt(0));
-      case 2:
-        final char match1 = sequence.charAt(0);
-        final char match2 = sequence.charAt(1);
-        return new CharMatcher() {
-          @Override public boolean matches(char c) {
-            return c == match1 || c == match2;
-          }
-          @Override protected void setBits(LookupTable table) {
-            table.set(match1);
-            table.set(match2);
-          }
-          @Override public CharMatcher precomputed() {
-            return this;
-          }
-        };
-    }
-
-    final char[] chars = sequence.toString().toCharArray();
-    Arrays.sort(chars); // not worth collapsing duplicates
-
-    return new CharMatcher() {
-      @Override public boolean matches(char c) {
-        return Arrays.binarySearch(chars, c) >= 0;
-      }
-      @Override protected void setBits(LookupTable table) {
-        for (char c : chars) {
-          table.set(c);
-        }
-      }
-    };
-  }
-
-  /**
-   * Returns a {@code char} matcher that matches any character not present in
-   * the given character sequence.
-   */
-  public static CharMatcher noneOf(CharSequence sequence) {
-    return anyOf(sequence).negate();
-  }
-
-  /**
-   * Returns a {@code char} matcher that matches any character in a given range
-   * (both endpoints are inclusive). For example, to match any lowercase letter
-   * of the English alphabet, use {@code CharMatcher.inRange('a', 'z')}.
-   *
-   * @throws IllegalArgumentException if {@code endInclusive < startInclusive}
-   */
-  public static CharMatcher inRange(
-      final char startInclusive, final char endInclusive) {
-    checkArgument(endInclusive >= startInclusive);
-    return new CharMatcher() {
-      @Override public boolean matches(char c) {
-        return startInclusive <= c && c <= endInclusive;
-      }
-      @Override protected void setBits(LookupTable table) {
-        char c = startInclusive;
-        while (true) {
-          table.set(c);
-          if (c++ == endInclusive) {
-            break;
-          }
-        }
-      }
-      @Override public CharMatcher precomputed() {
-        return this;
-      }
-    };
-  }
-
-  /**
-   * Returns a matcher with identical behavior to the given {@link
-   * Character}-based predicate, but which operates on primitive {@code char}
-   * instances instead.
-   */
-  public static CharMatcher forPredicate(
-      final Predicate<? super Character> predicate) {
-    checkNotNull(predicate);
-    if (predicate instanceof CharMatcher) {
-      return (CharMatcher) predicate;
-    }
-    return new CharMatcher() {
-      @Override public boolean matches(char c) {
-        return predicate.apply(c);
-      }
-      @Override public boolean apply(Character character) {
-        return predicate.apply(checkNotNull(character));
-      }
-    };
-  }
-
-  // Abstract methods
-
-  /** Determines a true or false value for the given character. */
-  public abstract boolean matches(char c);
-
-  // Non-static factories
-
-  /**
-   * Returns a matcher that matches any character not matched by this matcher.
-   */
-  public CharMatcher negate() {
-    final CharMatcher original = this;
-    return new CharMatcher() {
-      @Override public boolean matches(char c) {
-        return !original.matches(c);
-      }
-
-      @Override public boolean matchesAllOf(CharSequence sequence) {
-        return original.matchesNoneOf(sequence);
-      }
-      @Override public boolean matchesNoneOf(CharSequence sequence) {
-        return original.matchesAllOf(sequence);
-      }
-      @Override public int countIn(CharSequence sequence) {
-        return sequence.length() - original.countIn(sequence);
-      }
-      @Override public CharMatcher negate() {
-        return original;
-      }
-    };
-  }
-
-  /**
-   * Returns a matcher that matches any character matched by both this matcher
-   * and {@code other}.
-   */
-  public CharMatcher and(CharMatcher other) {
-    return new And(Arrays.asList(this, checkNotNull(other)));
-  }
-
-  private static class And extends CharMatcher {
-    List<CharMatcher> components;
-
-    And(List<CharMatcher> components) {
-      this.components = components; // Skip defensive copy (private)
-    }
-
-    @Override public boolean matches(char c) {
-      for (CharMatcher matcher : components) {
-        if (!matcher.matches(c)) {
-          return false;
-        }
-      }
-      return true;
-    }
-
-    @Override public CharMatcher and(CharMatcher other) {
-      List<CharMatcher> newComponents = new ArrayList<CharMatcher>(components);
-      newComponents.add(checkNotNull(other));
-      return new And(newComponents);
-    }
-  }
-
-  /**
-   * Returns a matcher that matches any character matched by either this matcher
-   * or {@code other}.
-   */
-  public CharMatcher or(CharMatcher other) {
-    return new Or(Arrays.asList(this, checkNotNull(other)));
-  }
-
-  private static class Or extends CharMatcher {
-    List<CharMatcher> components;
-
-    Or(List<CharMatcher> components) {
-      this.components = components; // Skip defensive copy (private)
-    }
-
-    @Override public boolean matches(char c) {
-      for (CharMatcher matcher : components) {
-        if (matcher.matches(c)) {
-          return true;
-        }
-      }
-      return false;
-    }
-
-    @Override public CharMatcher or(CharMatcher other) {
-      List<CharMatcher> newComponents = new ArrayList<CharMatcher>(components);
-      newComponents.add(checkNotNull(other));
-      return new Or(newComponents);
-    }
-
-    @Override protected void setBits(LookupTable table) {
-      for (CharMatcher matcher : components) {
-        matcher.setBits(table);
-      }
-    }
-  }
-
-  /**
-   * Returns a {@code char} matcher functionally equivalent to this one, but
-   * which may be faster to query than the original; your mileage may vary.
-   * Precomputation takes time and is likely to be worthwhile only if the
-   * precomputed matcher is queried many thousands of times.
-   *
-   * <p>This method has no effect (returns {@code this}) when called in GWT:
-   * it's unclear whether a precomputed matcher is faster, but it certainly
-   * consumes more memory, which doesn't seem like a worthwhile tradeoff in a
-   * browser.
-   */
-  public CharMatcher precomputed() {
-    return Platform.precomputeCharMatcher(this);
-  }
-
-  /**
-   * This is the actual implementation of {@link #precomputed}, but we bounce
-   * calls through a method on {@link Platform} so that we can have different
-   * behavior in GWT.
-   *
-   * <p>The default precomputation is to cache the configuration of the original
-   * matcher in an eight-kilobyte bit array. In some situations this produces a
-   * matcher which is faster to query than the original.
-   *
-   * <p>The default implementation creates a new bit array and passes it to
-   * {@link #setBits(LookupTable)}.
-   */
-  CharMatcher precomputedInternal() {
-    final LookupTable table = new LookupTable();
-    setBits(table);
-
-    return new CharMatcher() {
-      @Override public boolean matches(char c) {
-        return table.get(c);
-      }
-
-      // TODO: make methods like negate() smart
-
-      @Override public CharMatcher precomputed() {
-        return this;
-      }
-    };
-  }
-
-  /**
-   * For use by implementors; sets the bit corresponding to each character ('\0'
-   * to '{@literal \}uFFFF') that matches this matcher in the given bit array,
-   * leaving all other bits untouched.
-   *
-   * <p>The default implementation loops over every possible character value,
-   * invoking {@link #matches} for each one.
-   */
-  protected void setBits(LookupTable table) {
-    char c = Character.MIN_VALUE;
-    while (true) {
-      if (matches(c)) {
-        table.set(c);
-      }
-      if (c++ == Character.MAX_VALUE) {
-        break;
-      }
-    }
-  }
-
-  /**
-   * A bit array with one bit per {@code char} value, used by {@link
-   * CharMatcher#precomputed}.
-   *
-   * <p>TODO: possibly share a common BitArray class with BloomFilter
-   * and others... a simpler java.util.BitSet.
-   */
-  protected static class LookupTable {
-    int[] data = new int[2048];
-
-    void set(char index) {
-      data[index >> 5] |= (1 << index);
-    }
-    boolean get(char index) {
-      return (data[index >> 5] & (1 << index)) != 0;
-    }
-  }
-
-  // Text processing routines
-
-  /**
-   * Returns {@code true} if a character sequence contains only matching
-   * characters.
-   *
-   * <p>The default implementation iterates over the sequence, invoking {@link
-   * #matches} for each character, until this returns {@code false} or the end
-   * is reached.
-   *
-   * @param sequence the character sequence to examine, possibly empty
-   * @return {@code true} if this matcher matches every character in the
-   *     sequence, including when the sequence is empty
-   */
-  public boolean matchesAllOf(CharSequence sequence) {
-    for (int i = sequence.length() - 1; i >= 0; i--) {
-      if (!matches(sequence.charAt(i))) {
-        return false;
-      }
-    }
-    return true;
-  }
-
-  /**
-   * Returns {@code true} if a character sequence contains no matching
-   * characters.
-   *
-   * <p>The default implementation iterates over the sequence, invoking {@link
-   * #matches} for each character, until this returns {@code false} or the end is
-   * reached.
-   *
-   * @param sequence the character sequence to examine, possibly empty
-   * @return {@code true} if this matcher matches every character in the
-   *     sequence, including when the sequence is empty
-   */
-  public boolean matchesNoneOf(CharSequence sequence) {
-    return indexIn(sequence) == -1;
-  }
-
-  // TODO: perhaps add matchesAnyOf()
-
-  /**
-   * Returns the index of the first matching character in a character sequence,
-   * or {@code -1} if no matching character is present.
-   *
-   * <p>The default implementation iterates over the sequence in forward order
-   * calling {@link #matches} for each character.
-   *
-   * @param sequence the character sequence to examine from the beginning
-   * @return an index, or {@code -1} if no character matches
-   */
-  public int indexIn(CharSequence sequence) {
-    int length = sequence.length();
-    for (int i = 0; i < length; i++) {
-      if (matches(sequence.charAt(i))) {
-        return i;
-      }
-    }
-    return -1;
-  }
-
-  /**
-   * Returns the index of the first matching character in a character sequence,
-   * starting from a given position, or {@code -1} if no character matches after
-   * that position.
-   *
-   * <p>The default implementation iterates over the sequence in forward order,
-   * beginning at {@code start}, calling {@link #matches} for each character.
-   *
-   * @param sequence the character sequence to examine
-   * @param start the first index to examine; must be nonnegative and no
-   *     greater than {@code sequence.length()}
-   * @return the index of the first matching character, guaranteed to be no less
-   *     than {@code start}, or {@code -1} if no character matches
-   * @throws IndexOutOfBoundsException if start is negative or greater than
-   *     {@code sequence.length()}
-   */
-  public int indexIn(CharSequence sequence, int start) {
-    int length = sequence.length();
-    Preconditions.checkPositionIndex(start, length);
-    for (int i = start; i < length; i++) {
-      if (matches(sequence.charAt(i))) {
-        return i;
-      }
-    }
-    return -1;
-  }
-
-  /**
-   * Returns the index of the last matching character in a character sequence,
-   * or {@code -1} if no matching character is present.
-   *
-   * <p>The default implementation iterates over the sequence in reverse order
-   * calling {@link #matches} for each character.
-   *
-   * @param sequence the character sequence to examine from the end
-   * @return an index, or {@code -1} if no character matches
-   */
-  public int lastIndexIn(CharSequence sequence) {
-    for (int i = sequence.length() - 1; i >= 0; i--) {
-      if (matches(sequence.charAt(i))) {
-        return i;
-      }
-    }
-    return -1;
-  }
-
-  /**
-   * Returns the number of matching characters found in a character sequence.
-   */
-  public int countIn(CharSequence sequence) {
-    int count = 0;
-    for (int i = 0; i < sequence.length(); i++) {
-      if (matches(sequence.charAt(i))) {
-        count++;
-      }
-    }
-    return count;
-  }
-
-  /**
-   * Returns a string containing all non-matching characters of a character
-   * sequence, in order. For example: <pre>   {@code
-   *
-   *   CharMatcher.is('a').removeFrom("bazaar")}</pre>
-   *
-   * ... returns {@code "bzr"}.
-   */
-  public String removeFrom(CharSequence sequence) {
-    String string = sequence.toString();
-    int pos = indexIn(string);
-    if (pos == -1) {
-      return string;
-    }
-
-    char[] chars = string.toCharArray();
-    int spread = 1;
-
-    // This unusual loop comes from extensive benchmarking
-    OUT:
-    while (true) {
-      pos++;
-      while (true) {
-        if (pos == chars.length) {
-          break OUT;
-        }
-        if (matches(chars[pos])) {
-          break;
-        }
-        chars[pos - spread] = chars[pos];
-        pos++;
-      }
-      spread++;
-    }
-    return new String(chars, 0, pos - spread);
-  }
-
-  /**
-   * Returns a string containing all matching characters of a character
-   * sequence, in order. For example: <pre>   {@code
-   *
-   *   CharMatcher.is('a').retainFrom("bazaar")}</pre>
-   *
-   * ... returns {@code "aaa"}.
-   */
-  public String retainFrom(CharSequence sequence) {
-    return negate().removeFrom(sequence);
-  }
-
-  /**
-   * Returns a string copy of the input character sequence, with each character
-   * that matches this matcher replaced by a given replacement character. For
-   * example: <pre>   {@code
-   *
-   *   CharMatcher.is('a').replaceFrom("radar", 'o')}</pre>
-   *
-   * ... returns {@code "rodor"}.
-   *
-   * <p>The default implementation uses {@link #indexIn(CharSequence)} to find
-   * the first matching character, then iterates the remainder of the sequence
-   * calling {@link #matches(char)} for each character.
-   *
-   * @param sequence the character sequence to replace matching characters in
-   * @param replacement the character to append to the result string in place of
-   *     each matching character in {@code sequence}
-   * @return the new string
-   */
-  public String replaceFrom(CharSequence sequence, char replacement) {
-    String string = sequence.toString();
-    int pos = indexIn(string);
-    if (pos == -1) {
-      return string;
-    }
-    char[] chars = string.toCharArray();
-    chars[pos] = replacement;
-    for (int i = pos + 1; i < chars.length; i++) {
-      if (matches(chars[i])) {
-        chars[i] = replacement;
-      }
-    }
-    return new String(chars);
-  }
-
-  /**
-   * Returns a string copy of the input character sequence, with each character
-   * that matches this matcher replaced by a given replacement sequence. For
-   * example: <pre>   {@code
-   *
-   *   CharMatcher.is('a').replaceFrom("yaha", "oo")}</pre>
-   *
-   * ... returns {@code "yoohoo"}.
-   *
-   * <p><b>Note:</b> If the replacement is a fixed string with only one character,
-   * you are better off calling {@link #replaceFrom(CharSequence, char)} directly.
-   *
-   * @param sequence the character sequence to replace matching characters in
-   * @param replacement the characters to append to the result string in place
-   *     of each matching character in {@code sequence}
-   * @return the new string
-   */
-  public String replaceFrom(CharSequence sequence, CharSequence replacement) {
-    int replacementLen = replacement.length();
-    if (replacementLen == 0) {
-      return removeFrom(sequence);
-    }
-    if (replacementLen == 1) {
-      return replaceFrom(sequence, replacement.charAt(0));
-    }
-
-    String string = sequence.toString();
-    int pos = indexIn(string);
-    if (pos == -1) {
-      return string;
-    }
-
-    int len = string.length();
-    StringBuilder buf = new StringBuilder((int) (len * 1.5) + 16);
-
-    int oldpos = 0;
-    do {
-      buf.append(string, oldpos, pos);
-      buf.append(replacement);
-      oldpos = pos + 1;
-      pos = indexIn(string, oldpos);
-    } while (pos != -1);
-
-    buf.append(string, oldpos, len);
-    return buf.toString();
-  }
-
-  /**
-   * Returns a substring of the input character sequence that omits all
-   * characters this matcher matches from the beginning and from the end of the
-   * string. For example: <pre> {@code
-   *
-   *   CharMatcher.anyOf("ab").trimFrom("abacatbab")}</pre>
-   *
-   * ... returns {@code "cat"}.
-   *
-   * <p>Note that<pre>   {@code
-   *
-   *   CharMatcher.inRange('\0', ' ').trimFrom(str)}</pre>
-   *
-   * ... is equivalent to {@link String#trim()}.
-   */
-  public String trimFrom(CharSequence sequence) {
-    int len = sequence.length();
-    int first;
-    int last;
-
-    for (first = 0; first < len; first++) {
-      if (!matches(sequence.charAt(first))) {
-        break;
-      }
-    }
-    for (last = len - 1; last > first; last--) {
-      if (!matches(sequence.charAt(last))) {
-        break;
-      }
-    }
-
-    return sequence.subSequence(first, last + 1).toString();
-  }
-
-  /**
-   * Returns a substring of the input character sequence that omits all
-   * characters this matcher matches from the beginning of the
-   * string. For example: <pre> {@code
-   *
-   *   CharMatcher.anyOf("ab").trimLeadingFrom("abacatbab")}</pre>
-   *
-   * ... returns {@code "catbab"}.
-   */
-  public String trimLeadingFrom(CharSequence sequence) {
-    int len = sequence.length();
-    int first;
-
-    for (first = 0; first < len; first++) {
-      if (!matches(sequence.charAt(first))) {
-        break;
-      }
-    }
-
-    return sequence.subSequence(first, len).toString();
-  }
-
-  /**
-   * Returns a substring of the input character sequence that omits all
-   * characters this matcher matches from the end of the
-   * string. For example: <pre> {@code
-   *
-   *   CharMatcher.anyOf("ab").trimTrailingFrom("abacatbab")}</pre>
-   *
-   * ... returns {@code "abacat"}.
-   */
-  public String trimTrailingFrom(CharSequence sequence) {
-    int len = sequence.length();
-    int last;
-
-    for (last = len - 1; last >= 0; last--) {
-      if (!matches(sequence.charAt(last))) {
-        break;
-      }
-    }
-
-    return sequence.subSequence(0, last + 1).toString();
-  }
-
-  /**
-   * Returns a string copy of the input character sequence, with each group of
-   * consecutive characters that match this matcher replaced by a single
-   * replacement character. For example: <pre>   {@code
-   *
-   *   CharMatcher.anyOf("eko").collapseFrom("bookkeeper", '-')}</pre>
-   *
-   * ... returns {@code "b-p-r"}.
-   *
-   * <p>The default implementation uses {@link #indexIn(CharSequence)} to find
-   * the first matching character, then iterates the remainder of the sequence
-   * calling {@link #matches(char)} for each character.
-   *
-   * @param sequence the character sequence to replace matching groups of
-   *     characters in
-   * @param replacement the character to append to the result string in place of
-   *     each group of matching characters in {@code sequence}
-   * @return the new string
-   */
-  public String collapseFrom(CharSequence sequence, char replacement) {
-    int first = indexIn(sequence);
-    if (first == -1) {
-      return sequence.toString();
-    }
-
-    // TODO: this implementation can probably be made faster.
-
-    StringBuilder builder = new StringBuilder(sequence.length())
-        .append(sequence.subSequence(0, first))
-        .append(replacement);
-    boolean in = true;
-    for (int i = first + 1; i < sequence.length(); i++) {
-      char c = sequence.charAt(i);
-      if (apply(c)) {
-        if (!in) {
-          builder.append(replacement);
-          in = true;
-        }
-      } else {
-        builder.append(c);
-        in = false;
-      }
-    }
-    return builder.toString();
-  }
-
-  /**
-   * Collapses groups of matching characters exactly as {@link #collapseFrom}
-   * does, except that groups of matching characters at the start or end of the
-   * sequence are removed without replacement.
-   */
-  public String trimAndCollapseFrom(CharSequence sequence, char replacement) {
-    int first = negate().indexIn(sequence);
-    if (first == -1) {
-      return ""; // everything matches. nothing's left.
-    }
-    StringBuilder builder = new StringBuilder(sequence.length());
-    boolean inMatchingGroup = false;
-    for (int i = first; i < sequence.length(); i++) {
-      char c = sequence.charAt(i);
-      if (apply(c)) {
-        inMatchingGroup = true;
-      } else {
-        if (inMatchingGroup) {
-          builder.append(replacement);
-          inMatchingGroup = false;
-        }
-        builder.append(c);
-      }
-    }
-    return builder.toString();
-  }
-
-  // Predicate interface
-
-  /**
-   * Returns {@code true} if this matcher matches the given character.
-   *
-   * @throws NullPointerException if {@code character} is null
-   */
-  /*@Override*/ public boolean apply(Character character) {
-    return matches(character);
-  }
-}
diff --git a/src/com/google/common/base/Charsets.java b/src/com/google/common/base/Charsets.java
deleted file mode 100644
index 29fc12a..0000000
--- a/src/com/google/common/base/Charsets.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.base;
-
-import java.nio.charset.Charset;
-
-/**
- * Contains constant definitions for the six standard {@link Charset}
- * instances, which are guaranteed to be supported by all Java platform
- * implementations.
- *
- * @author Mike Bostock
- * @since 2009.09.15 <b>tentative</b>
- */
-public final class Charsets {
-  private Charsets() {}
-
-  /**
-   * US-ASCII: seven-bit ASCII, a.k.a. ISO646-US, a.k.a the Basic Latin block of
-   * the Unicode character set.
-   */
-  public static final Charset US_ASCII = Charset.forName("US-ASCII");
-
-  /**
-   * ISO-8859-1. ISO Latin Alphabet No. 1, a.k.a. ISO-LATIN-1.
-   */
-  public static final Charset ISO_8859_1 = Charset.forName("ISO-8859-1");
-
-  /**
-   * UTF-8: eight-bit UCS Transformation Format.
-   */
-  public static final Charset UTF_8 = Charset.forName("UTF-8");
-
-  /**
-   * UTF-16BE: sixteen-bit UCS Transformation Format, big-endian byte order.
-   */
-  public static final Charset UTF_16BE = Charset.forName("UTF-16BE");
-
-  /**
-   * UTF-16LE: sixteen-bit UCS Transformation Format, little-endian byte order.
-   */
-  public static final Charset UTF_16LE = Charset.forName("UTF-16LE");
-
-  /**
-   * UTF-16: sixteen-bit UCS Transformation Format, byte order identified by an
-   * optional byte-order mark.
-   */
-  public static final Charset UTF_16 = Charset.forName("UTF-16");
-
-  /*
-   * Please do not add new Charset references to this class, unless those
-   * character encodings are part of the set required to be supported by all
-   * Java platform implementations! Any Charsets initialized here may cause
-   * unexpected delays when this class is loaded. See the Charset Javadocs for
-   * the list of built-in character encodings.
-   */
-}
diff --git a/src/com/google/common/base/Defaults.java b/src/com/google/common/base/Defaults.java
deleted file mode 100644
index dfaf18c..0000000
--- a/src/com/google/common/base/Defaults.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.base;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * This class provides default values for all Java types, as defined by the JLS.
- *
- * @author Ben Yu
- */
-public final class Defaults {
-  private Defaults() {}
-
-  private static final Map<Class<?>, Object> DEFAULTS =
-      new HashMap<Class<?>, Object>(16);
-
-  private static <T> void put(Class<T> type, T value) {
-    DEFAULTS.put(type, value);
-  }
-
-  static {
-    put(boolean.class, false);
-    put(char.class, '\0');
-    put(byte.class, (byte) 0);
-    put(short.class, (short) 0);
-    put(int.class, 0);
-    put(long.class, 0L);
-    put(float.class, 0f);
-    put(double.class, 0d);
-  }
-
-  /**
-   * Returns the default value of {@code type} as defined by JLS --- {@code 0}
-   * for numbers, {@code false} for {@code boolean} and {@code '\0'} for {@code
-   * char}. For non-primitive types and {@code void}, null is returned.
-   */
-  @SuppressWarnings("unchecked")
-  public static <T> T defaultValue(Class<T> type) {
-    return (T) DEFAULTS.get(type);
-  }
-}
diff --git a/src/com/google/common/base/FinalizablePhantomReference.java b/src/com/google/common/base/FinalizablePhantomReference.java
deleted file mode 100644
index a13d665..0000000
--- a/src/com/google/common/base/FinalizablePhantomReference.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.base;
-
-import java.lang.ref.PhantomReference;
-
-/**
- * Phantom reference with a {@code finalizeReferent()} method which a
- * background thread invokes after the garbage collector reclaims the
- * referent. This is a simpler alternative to using a {@link
- * java.lang.ref.ReferenceQueue}.
- *
- * <p>Unlike a normal phantom reference, this reference will be cleared
- * automatically.
- *
- * @author Bob Lee
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-public abstract class FinalizablePhantomReference<T>
-    extends PhantomReference<T> implements FinalizableReference {
-
-  /**
-   * Constructs a new finalizable phantom reference.
-   *
-   * @param referent to phantom reference
-   * @param queue that should finalize the referent
-   */
-  protected FinalizablePhantomReference(T referent,
-      FinalizableReferenceQueue queue) {
-    super(referent, queue.queue);
-    queue.cleanUp();
-  }
-}
diff --git a/src/com/google/common/base/FinalizableReference.java b/src/com/google/common/base/FinalizableReference.java
deleted file mode 100644
index 87c2345..0000000
--- a/src/com/google/common/base/FinalizableReference.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.base;
-
-/**
- * Implemented by references that have code to run after garbage collection of
- * their referents.
- *
- * @see FinalizableReferenceQueue
- * @author Bob Lee
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-public interface FinalizableReference {
-
-  /**
-   * Invoked on a background thread after the referent has been garbage
-   * collected unless security restrictions prevented starting a background
-   * thread, in which case this method is invoked when new references
-   * are created.
-   */
-  void finalizeReferent();
-}
diff --git a/src/com/google/common/base/FinalizableReferenceQueue.java b/src/com/google/common/base/FinalizableReferenceQueue.java
deleted file mode 100644
index 8061052..0000000
--- a/src/com/google/common/base/FinalizableReferenceQueue.java
+++ /dev/null
@@ -1,314 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.base;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.lang.ref.Reference;
-import java.lang.ref.ReferenceQueue;
-import java.lang.reflect.Method;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * A reference queue with an associated background thread that dequeues
- * references and invokes {@link FinalizableReference#finalizeReferent()} on
- * them.
- *
- * <p>Keep a strong reference to this object until all of the associated
- * referents have been finalized. If this object is garbage collected earlier,
- * the backing thread will not invoke {@code finalizeReferent()} on the
- * remaining references.
- *
- * @author Bob Lee
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-public class FinalizableReferenceQueue {
-
-  /*
-   * The Finalizer thread keeps a phantom reference to this object. When the
-   * client (ReferenceMap, for example) no longer has a strong reference to
-   * this object, the garbage collector will reclaim it and enqueue the
-   * phantom reference. The enqueued reference will trigger the Finalizer to
-   * stop.
-   *
-   * If this library is loaded in the system class loader,
-   * FinalizableReferenceQueue can load Finalizer directly with no problems.
-   *
-   * If this library is loaded in an application class loader, it's important
-   * that Finalizer not have a strong reference back to the class loader.
-   * Otherwise, you could have a graph like this:
-   *
-   * Finalizer Thread
-   *   runs instance of -> Finalizer.class
-   *     loaded by -> Application class loader
-   *       which loaded -> ReferenceMap.class
-   *         which has a static -> FinalizableReferenceQueue instance
-   *
-   * Even if no other references to classes from the application class loader
-   * remain, the Finalizer thread keeps an indirect strong reference to the
-   * queue in ReferenceMap, which keeps the Finalizer running, and as a result,
-   * the application class loader can never be reclaimed.
-   *
-   * This means that dynamically loaded web applications and OSGi bundles can't
-   * be unloaded.
-   *
-   * If the library is loaded in an application class loader, we try to break
-   * the cycle by loading Finalizer in its own independent class loader:
-   *
-   * System class loader
-   *   -> Application class loader
-   *     -> ReferenceMap
-   *     -> FinalizableReferenceQueue
-   *     -> etc.
-   *   -> Decoupled class loader
-   *     -> Finalizer
-   *
-   * Now, Finalizer no longer keeps an indirect strong reference to the
-   * static FinalizableReferenceQueue field in ReferenceMap. The application
-   * class loader can be reclaimed at which point the Finalizer thread will
-   * stop and its decoupled class loader can also be reclaimed.
-   *
-   * If any of this fails along the way, we fall back to loading Finalizer
-   * directly in the application class loader.
-   */
-
-  private static final Logger logger
-      = Logger.getLogger(FinalizableReferenceQueue.class.getName());
-
-  private static final String FINALIZER_CLASS_NAME
-      = "com.google.common.base.internal.Finalizer";
-
-  /** Reference to Finalizer.startFinalizer(). */
-  private static final Method startFinalizer;
-  static {
-    Class<?> finalizer = loadFinalizer(
-        new SystemLoader(), new DecoupledLoader(), new DirectLoader());
-    startFinalizer = getStartFinalizer(finalizer);
-  }
-
-  /**
-   * The actual reference queue that our background thread will poll.
-   */
-  final ReferenceQueue<Object> queue;
-
-  /**
-   * Whether or not the background thread started successfully.
-   */
-  final boolean threadStarted;
-
-  /**
-   * Constructs a new queue.
-   */
-  @SuppressWarnings("unchecked")
-  public FinalizableReferenceQueue() {
-    // We could start the finalizer lazily, but I'd rather it blow up early.
-    ReferenceQueue<Object> queue;
-    boolean threadStarted = false;
-    try {
-      queue = (ReferenceQueue<Object>) startFinalizer.invoke(null,
-          FinalizableReference.class, this);
-      threadStarted = true;
-    } catch (IllegalAccessException e) {
-      // Finalizer.startFinalizer() is public.
-      throw new AssertionError(e);
-    } catch (Throwable t) {
-      logger.log(Level.INFO, "Failed to start reference finalizer thread."
-          + " Reference cleanup will only occur when new references are"
-          + " created.", t);
-      queue = new ReferenceQueue<Object>();
-    }
-
-    this.queue = queue;
-    this.threadStarted = threadStarted;
-  }
-
-  /**
-   * Repeatedly dequeues references from the queue and invokes
-   * {@link FinalizableReference#finalizeReferent()} on them until the queue
-   * is empty. This method is a no-op if the background thread was created
-   * successfully.
-   */
-  void cleanUp() {
-    if (threadStarted) {
-      return;
-    }
-
-    Reference<?> reference;
-    while ((reference = queue.poll()) != null) {
-      /*
-       * This is for the benefit of phantom references. Weak and soft
-       * references will have already been cleared by this point.
-       */
-      reference.clear();
-      try {
-        ((FinalizableReference) reference).finalizeReferent();
-      } catch (Throwable t) {
-        logger.log(Level.SEVERE, "Error cleaning up after reference.", t);
-      }
-    }
-  }
-
-  /**
-   * Iterates through the given loaders until it finds one that can load
-   * Finalizer.
-   *
-   * @return Finalizer.class
-   */
-  private static Class<?> loadFinalizer(FinalizerLoader... loaders) {
-    for (FinalizerLoader loader : loaders) {
-      Class<?> finalizer = loader.loadFinalizer();
-      if (finalizer != null) {
-        return finalizer;
-      }
-    }
-
-    throw new AssertionError();
-  }
-
-  /**
-   * Loads Finalizer.class.
-   */
-  interface FinalizerLoader {
-
-    /**
-     * Returns Finalizer.class or null if this loader shouldn't or can't load
-     * it.
-     *
-     * @throws SecurityException if we don't have the appropriate privileges
-     */
-    Class<?> loadFinalizer();
-  }
-
-  /**
-   * Tries to load Finalizer from the system class loader. If Finalizer is
-   * in the system class path, we needn't create a separate loader.
-   */
-  static class SystemLoader implements FinalizerLoader {
-    public Class<?> loadFinalizer() {
-      ClassLoader systemLoader;
-      try {
-        systemLoader = ClassLoader.getSystemClassLoader();
-      } catch (SecurityException e) {
-        logger.info("Not allowed to access system class loader.");
-        return null;
-      }
-      if (systemLoader != null) {
-        try {
-          return systemLoader.loadClass(FINALIZER_CLASS_NAME);
-        } catch (ClassNotFoundException e) {
-          // Ignore. Finalizer is simply in a child class loader.
-          return null;
-        }
-      } else {
-        return null;
-      }
-    }
-  }
-
-  /**
-   * Try to load Finalizer in its own class loader. If Finalizer's thread
-   * had a direct reference to our class loader (which could be that of
-   * a dynamically loaded web application or OSGi bundle), it would prevent
-   * our class loader from getting garbage collected.
-   */
-  static class DecoupledLoader implements FinalizerLoader {
-
-    private static final String LOADING_ERROR = "Could not load Finalizer in"
-        + " its own class loader. Loading Finalizer in the current class loader"
-        + " instead. As a result, you will not be able to garbage collect this"
-        + " class loader. To support reclaiming this class loader, either"
-        + " resolve the underlying issue, or move Google Collections to your"
-        + " system class path.";
-
-    public Class<?> loadFinalizer() {
-      try {
-        /*
-         * We use URLClassLoader because it's the only concrete class loader
-         * implementation in the JDK. If we used our own ClassLoader subclass,
-         * Finalizer would indirectly reference this class loader:
-         *
-         * Finalizer.class ->
-         *   CustomClassLoader ->
-         *     CustomClassLoader.class ->
-         *       This class loader
-         *
-         * System class loader will (and must) be the parent.
-         */
-        ClassLoader finalizerLoader = newLoader(getBaseUrl());
-        return finalizerLoader.loadClass(FINALIZER_CLASS_NAME);
-      } catch (Exception e) {
-        logger.log(Level.WARNING, LOADING_ERROR, e);
-        return null;
-      }
-    }
-
-    /**
-     * Gets URL for base of path containing Finalizer.class.
-     */
-    URL getBaseUrl() throws IOException {
-      // Find URL pointing to Finalizer.class file.
-      String finalizerPath = FINALIZER_CLASS_NAME.replace('.', '/') + ".class";
-      URL finalizerUrl = getClass().getClassLoader().getResource(finalizerPath);
-      if (finalizerUrl == null) {
-        throw new FileNotFoundException(finalizerPath);
-      }
-
-      // Find URL pointing to base of class path.
-      String urlString = finalizerUrl.toString();
-      if (!urlString.endsWith(finalizerPath)) {
-        throw new IOException("Unsupported path style: " + urlString);
-      }
-      urlString = urlString.substring(0,
-          urlString.length() - finalizerPath.length());
-      return new URL(finalizerUrl, urlString);
-    }
-
-    /** Creates a class loader with the given base URL as its classpath. */
-    URLClassLoader newLoader(URL base) {
-      return new URLClassLoader(new URL[] { base });
-    }
-  }
-
-  /**
-   * Loads Finalizer directly using the current class loader. We won't be
-   * able to garbage collect this class loader, but at least the world
-   * doesn't end.
-   */
-  static class DirectLoader implements FinalizerLoader {
-    public Class<?> loadFinalizer() {
-      try {
-        return Class.forName(FINALIZER_CLASS_NAME);
-      } catch (ClassNotFoundException e) {
-        throw new AssertionError(e);
-      }
-    }
-  }
-
-  /**
-   * Looks up Finalizer.startFinalizer().
-   */
-  static Method getStartFinalizer(Class<?> finalizer) {
-    try {
-      return finalizer.getMethod("startFinalizer", Class.class, Object.class);
-    } catch (NoSuchMethodException e) {
-      throw new AssertionError(e);
-    }
-  }
-}
diff --git a/src/com/google/common/base/FinalizableSoftReference.java b/src/com/google/common/base/FinalizableSoftReference.java
deleted file mode 100644
index 631d5ff..0000000
--- a/src/com/google/common/base/FinalizableSoftReference.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.base;
-
-import java.lang.ref.SoftReference;
-
-/**
- * Soft reference with a {@code finalizeReferent()} method which a background
- * thread invokes after the garbage collector reclaims the referent. This is a
- * simpler alternative to using a {@link java.lang.ref.ReferenceQueue}.
- *
- * @author Bob Lee
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-public abstract class FinalizableSoftReference<T> extends SoftReference<T>
-    implements FinalizableReference {
-
-  /**
-   * Constructs a new finalizable soft reference.
-   *
-   * @param referent to softly reference
-   * @param queue that should finalize the referent
-   */
-  protected FinalizableSoftReference(T referent,
-      FinalizableReferenceQueue queue) {
-    super(referent, queue.queue);
-    queue.cleanUp();
-  }
-}
diff --git a/src/com/google/common/base/FinalizableWeakReference.java b/src/com/google/common/base/FinalizableWeakReference.java
deleted file mode 100644
index a93c3c1..0000000
--- a/src/com/google/common/base/FinalizableWeakReference.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.base;
-
-import java.lang.ref.WeakReference;
-
-/**
- * Weak reference with a {@code finalizeReferent()} method which a background
- * thread invokes after the garbage collector reclaims the referent. This is a
- * simpler alternative to using a {@link java.lang.ref.ReferenceQueue}.
- *
- * @author Bob Lee
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-public abstract class FinalizableWeakReference<T> extends WeakReference<T>
-    implements FinalizableReference {
-
-  /**
-   * Constructs a new finalizable weak reference.
-   *
-   * @param referent to weakly reference
-   * @param queue that should finalize the referent
-   */
-  protected FinalizableWeakReference(T referent,
-      FinalizableReferenceQueue queue) {
-    super(referent, queue.queue);
-    queue.cleanUp();
-  }
-}
diff --git a/src/com/google/common/base/Function.java b/src/com/google/common/base/Function.java
deleted file mode 100644
index 0df46e6..0000000
--- a/src/com/google/common/base/Function.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.base;
-
-import com.google.common.annotations.GwtCompatible;
-
-import javax.annotation.Nullable;
-
-/**
- * A transformation from one object to another. For example, a
- * {@code StringToIntegerFunction} may implement
- * <code>Function&lt;String,Integer&gt;</code> and transform integers in
- * {@code String} format to {@code Integer} format.
- *
- * <p>The transformation on the source object does not necessarily result in
- * an object of a different type.  For example, a
- * {@code FarenheitToCelsiusFunction} may implement
- * <code>Function&lt;Float,Float&gt;</code>.
- *
- * <p>Implementations which may cause side effects upon evaluation are strongly
- * encouraged to state this fact clearly in their API documentation.
- *
- * @param <F> the type of the function input
- * @param <T> the type of the function output
- * @author Kevin Bourrillion
- * @author Scott Bonneau
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible
-public interface Function<F, T> {
-
-  /**
-   * Applies the function to an object of type {@code F}, resulting in an object
-   * of type {@code T}.  Note that types {@code F} and {@code T} may or may not
-   * be the same.
-   *
-   * @param from the source object
-   * @return the resulting object
-   */
-  T apply(@Nullable F from);
-
-  /**
-   * Indicates whether some other object is equal to this {@code Function}.
-   * This method can return {@code true} <i>only</i> if the specified object is
-   * also a {@code Function} and, for every input object {@code o}, it returns
-   * exactly the same value.  Thus, {@code function1.equals(function2)} implies
-   * that either {@code function1.apply(o)} and {@code function2.apply(o)} are
-   * both null, or {@code function1.apply(o).equals(function2.apply(o))}.
-   *
-   * <p>Note that it is always safe <em>not</em> to override
-   * {@link Object#equals}.
-   */
-  boolean equals(@Nullable Object obj);
-}
diff --git a/src/com/google/common/base/Functions.java b/src/com/google/common/base/Functions.java
deleted file mode 100644
index 246598a..0000000
--- a/src/com/google/common/base/Functions.java
+++ /dev/null
@@ -1,286 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.base;
-
-import com.google.common.annotations.GwtCompatible;
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.io.Serializable;
-import java.util.Map;
-
-import javax.annotation.Nullable;
-
-/**
- * Useful functions.
- *
- * <p>All methods returns serializable functions as long as they're given
- * serializable parameters.
- *
- * @author Mike Bostock
- * @author Vlad Patryshev
- * @author Jared Levy
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible
-public final class Functions {
-  private Functions() {}
-
-  /**
-   * Returns a function that calls {@code toString()} on its argument. The
-   * function does not accept nulls; it will throw a
-   * {@link NullPointerException} when applied to {@code null}.
-   */
-  public static Function<Object, String> toStringFunction() {
-    return ToStringFunction.INSTANCE;
-  }
-
-  // enum singleton pattern
-  private enum ToStringFunction implements Function<Object, String> {
-    INSTANCE;
-
-    public String apply(Object o) {
-      return o.toString();
-    }
-
-    @Override public String toString() {
-      return "toString";
-    }
-  }
-
-  /**
-   * Returns the identity function.
-   */
-  @SuppressWarnings("unchecked")
-  public static <E> Function<E, E> identity() {
-    return (Function<E, E>) IdentityFunction.INSTANCE;
-  }
-
-  // enum singleton pattern
-  private enum IdentityFunction implements Function<Object, Object> {
-    INSTANCE;
-
-    public Object apply(Object o) {
-      return o;
-    }
-
-    @Override public String toString() {
-      return "identity";
-    }
-  }
-
-  /**
-   * Returns a function which performs a map lookup. The returned function
-   * throws an {@link IllegalArgumentException} if given a key that does not
-   * exist in the map.
-   */
-  public static <K, V> Function<K, V> forMap(Map<K, V> map) {
-    return new FunctionForMapNoDefault<K, V>(map);
-  }
-
-  private static class FunctionForMapNoDefault<K, V>
-      implements Function<K, V>, Serializable {
-    final Map<K, V> map;
-
-    FunctionForMapNoDefault(Map<K, V> map) {
-      this.map = checkNotNull(map);
-    }
-    public V apply(K key) {
-      V result = map.get(key);
-      checkArgument(result != null || map.containsKey(key),
-          "Key '%s' not present in map", key);
-      return result;
-    }
-    @Override public boolean equals(Object o) {
-      if (o instanceof FunctionForMapNoDefault) {
-        FunctionForMapNoDefault<?, ?> that = (FunctionForMapNoDefault<?, ?>) o;
-        return map.equals(that.map);
-      }
-      return false;
-    }
-    @Override public int hashCode() {
-      return map.hashCode();
-    }
-    @Override public String toString() {
-      return "forMap(" + map + ")";
-    }
-    private static final long serialVersionUID = 0;
-  }
-
-  /**
-   * Returns a function which performs a map lookup with a default value. The
-   * function created by this method returns {@code defaultValue} for all
-   * inputs that do not belong to the map's key set.
-   *
-   * @param map source map that determines the function behavior
-   * @param defaultValue the value to return for inputs that aren't map keys
-   * @return function that returns {@code map.get(a)} when {@code a} is a key,
-   *     or {@code defaultValue} otherwise
-   */
-  public static <K, V> Function<K, V> forMap(
-      Map<K, ? extends V> map, @Nullable V defaultValue) {
-    return new ForMapWithDefault<K, V>(map, defaultValue);
-  }
-
-  private static class ForMapWithDefault<K, V>
-      implements Function<K, V>, Serializable {
-    final Map<K, ? extends V> map;
-    final V defaultValue;
-
-    ForMapWithDefault(Map<K, ? extends V> map, V defaultValue) {
-      this.map = checkNotNull(map);
-      this.defaultValue = defaultValue;
-    }
-    public V apply(K key) {
-      return map.containsKey(key) ? map.get(key) : defaultValue;
-    }
-    @Override public boolean equals(Object o) {
-      if (o instanceof ForMapWithDefault) {
-        ForMapWithDefault<?, ?> that = (ForMapWithDefault<?, ?>) o;
-        return map.equals(that.map)
-            && Objects.equal(defaultValue, that.defaultValue);
-      }
-      return false;
-    }
-    @Override public int hashCode() {
-      return Objects.hashCode(map, defaultValue);
-    }
-    @Override public String toString() {
-      return "forMap(" + map + ", defaultValue=" + defaultValue + ")";
-    }
-    private static final long serialVersionUID = 0;
-  }
-
-  /**
-   * Returns the composition of two functions. For {@code f: A->B} and
-   * {@code g: B->C}, composition is defined as the function h such that
-   * {@code h(a) == g(f(a))} for each {@code a}.
-   *
-   * @see <a href="//en.wikipedia.org/wiki/Function_composition">
-   * function composition</a>
-   *
-   * @param g the second function to apply
-   * @param f the first function to apply
-   * @return the composition of {@code f} and {@code g}
-   */
-  public static <A, B, C> Function<A, C> compose(
-      Function<B, C> g, Function<A, ? extends B> f) {
-    return new FunctionComposition<A, B, C>(g, f);
-  }
-
-  private static class FunctionComposition<A, B, C>
-      implements Function<A, C>, Serializable {
-    private final Function<B, C> g;
-    private final Function<A, ? extends B> f;
-
-    public FunctionComposition(Function<B, C> g,
-        Function<A, ? extends B> f) {
-      this.g = checkNotNull(g);
-      this.f = checkNotNull(f);
-    }
-    public C apply(A a) {
-      return g.apply(f.apply(a));
-    }
-    @Override public boolean equals(Object obj) {
-      if (obj instanceof FunctionComposition) {
-        FunctionComposition<?, ?, ?> that = (FunctionComposition<?, ?, ?>) obj;
-        return f.equals(that.f) && g.equals(that.g);
-      }
-      return false;
-    }
-
-    @Override public int hashCode() {
-      return f.hashCode() ^ g.hashCode();
-    }
-    @Override public String toString() {
-      return g.toString() + "(" + f.toString() + ")";
-    }
-    private static final long serialVersionUID = 0;
-  }
-
-  /**
-   * Creates a function that returns the same boolean output as the given
-   * predicate for all inputs.
-   */
-  public static <T> Function<T, Boolean> forPredicate(Predicate<T> predicate) {
-    return new PredicateFunction<T>(predicate);
-  }
-
-  /** @see Functions#forPredicate */
-  private static class PredicateFunction<T>
-      implements Function<T, Boolean>, Serializable {
-    private final Predicate<T> predicate;
-
-    private PredicateFunction(Predicate<T> predicate) {
-      this.predicate = checkNotNull(predicate);
-    }
-
-    public Boolean apply(T t) {
-      return predicate.apply(t);
-    }
-    @Override public boolean equals(Object obj) {
-      if (obj instanceof PredicateFunction) {
-        PredicateFunction<?> that = (PredicateFunction<?>) obj;
-        return predicate.equals(that.predicate);
-      }
-      return false;
-    }
-    @Override public int hashCode() {
-      return predicate.hashCode();
-    }
-    @Override public String toString() {
-      return "forPredicate(" + predicate + ")";
-    }
-    private static final long serialVersionUID = 0;
-  }
-
-  /**
-   * Creates a function that returns {@code value} for any input.
-   *
-   * @param value the constant value for the function to return
-   * @return a function that always returns {@code value}
-   */
-  public static <E> Function<Object, E> constant(@Nullable E value) {
-    return new ConstantFunction<E>(value);
-  }
-
-  private static class ConstantFunction<E>
-      implements Function<Object, E>, Serializable {
-    private final E value;
-
-    public ConstantFunction(@Nullable E value) {
-      this.value = value;
-    }
-    public E apply(Object from) {
-      return value;
-    }
-    @Override public boolean equals(Object obj) {
-      if (obj instanceof ConstantFunction) {
-        ConstantFunction<?> that = (ConstantFunction<?>) obj;
-        return Objects.equal(value, that.value);
-      }
-      return false;
-    }
-    @Override public int hashCode() {
-      return (value == null) ? 0 : value.hashCode();
-    }
-    @Override public String toString() {
-      return "constant(" + value + ")";
-    }
-    private static final long serialVersionUID = 0;
-  }
-}
diff --git a/src/com/google/common/base/Joiner.java b/src/com/google/common/base/Joiner.java
deleted file mode 100644
index ca7353e..0000000
--- a/src/com/google/common/base/Joiner.java
+++ /dev/null
@@ -1,342 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.base;
-
-import com.google.common.annotations.GwtCompatible;
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.io.IOException;
-import java.util.AbstractList;
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Map.Entry;
-
-import javax.annotation.Nullable;
-
-/**
- * An object which joins pieces of text (specified as an array, {@link
- * Iterable}, varargs or even a {@link Map}) with a separator. It either
- * appends the results to an {@link Appendable} or returns them as a {@link
- * String}. Example: <pre>   {@code
- *
- *   Joiner joiner = Joiner.on("; ").skipNulls();
- *    . . .
- *   return joiner.join("Harry", null, "Ron", "Hermione");}</pre>
- *
- * This returns the string {@code "Harry; Ron; Hermione"}. Note that all input
- * elements are converted to strings using {@link Object#toString()} before
- * being appended.
- *
- * <p>If neither {@link #skipNulls()} nor {@link #useForNull(String)} is
- * specified, the joining methods will throw {@link NullPointerException} if any
- * given element is null.
- *
- * @author Kevin Bourrillion
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible public class Joiner {
-  /**
-   * Returns a joiner which automatically places {@code separator} between
-   * consecutive elements.
-   */
-  public static Joiner on(String separator) {
-    return new Joiner(separator);
-  }
-
-  /**
-   * Returns a joiner which automatically places {@code separator} between
-   * consecutive elements.
-   */
-  public static Joiner on(char separator) {
-    return new Joiner(String.valueOf(separator));
-  }
-
-  private final String separator;
-
-  private Joiner(String separator) {
-    this.separator = checkNotNull(separator);
-  }
-
-  private Joiner(Joiner prototype) {
-    this.separator = prototype.separator;
-  }
-
-  /**
-   * Appends the string representation of each of {@code parts}, using the
-   * previously configured separator between each, to {@code appendable}.
-   */
-  public <A extends Appendable> A appendTo(A appendable, Iterable<?> parts)
-      throws IOException {
-    checkNotNull(appendable);
-    Iterator<?> iterator = parts.iterator();
-    if (iterator.hasNext()) {
-      appendable.append(toString(iterator.next()));
-      while (iterator.hasNext()) {
-        appendable.append(separator);
-        appendable.append(toString(iterator.next()));
-      }
-    }
-    return appendable;
-  }
-
-  /**
-   * Appends the string representation of each of {@code parts}, using the
-   * previously configured separator between each, to {@code appendable}.
-   */
-  public final <A extends Appendable> A appendTo(
-      A appendable, Object[] parts) throws IOException {
-    return appendTo(appendable, Arrays.asList(parts));
-  }
-
-  /**
-   * Appends to {@code appendable} the string representation of each of the
-   * remaining arguments.
-   */
-  public final <A extends Appendable> A appendTo(A appendable,
-      @Nullable Object first, @Nullable Object second, Object... rest)
-      throws IOException {
-    return appendTo(appendable, iterable(first, second, rest));
-  }
-
-  /**
-   * Appends the string representation of each of {@code parts}, using the
-   * previously configured separator between each, to {@code builder}. Identical
-   * to {@link #appendTo(Appendable, Iterable)}, except that it does not throw
-   * {@link IOException}.
-   */
-  public final StringBuilder appendTo(StringBuilder builder, Iterable<?> parts)
-  {
-    try {
-      appendTo((Appendable) builder, parts);
-    } catch (IOException impossible) {
-      throw new AssertionError(impossible);
-    }
-    return builder;
-  }
-
-  /**
-   * Appends the string representation of each of {@code parts}, using the
-   * previously configured separator between each, to {@code builder}. Identical
-   * to {@link #appendTo(Appendable, Iterable)}, except that it does not throw
-   * {@link IOException}.
-   */
-  public final StringBuilder appendTo(StringBuilder builder, Object[] parts) {
-    return appendTo(builder, Arrays.asList(parts));
-  }
-
-  /**
-   * Appends to {@code builder} the string representation of each of the
-   * remaining arguments. Identical to {@link #appendTo(Appendable, Object,
-   * Object, Object[])}, except that it does not throw {@link IOException}.
-   */
-  public final StringBuilder appendTo(StringBuilder builder,
-      @Nullable Object first, @Nullable Object second, Object... rest) {
-    return appendTo(builder, iterable(first, second, rest));
-  }
-
-  /**
-   * Returns a string containing the string representation of each of {@code
-   * parts}, using the previously configured separator between each.
-   */
-  public final String join(Iterable<?> parts) {
-    return appendTo(new StringBuilder(), parts).toString();
-  }
-
-  /**
-   * Returns a string containing the string representation of each of {@code
-   * parts}, using the previously configured separator between each.
-   */
-  public final String join(Object[] parts) {
-    return join(Arrays.asList(parts));
-  }
-
-  /**
-   * Returns a string containing the string representation of each argument,
-   * using the previously configured separator between each.
-   */
-  public final String join(
-      @Nullable Object first, @Nullable Object second, Object... rest) {
-    return join(iterable(first, second, rest));
-  }
-
-  /**
-   * Returns a joiner with the same behavior as this one, except automatically
-   * substituting {@code nullText} for any provided null elements.
-   */
-  public Joiner useForNull(final String nullText) {
-    checkNotNull(nullText);
-    return new Joiner(this) {
-      @Override CharSequence toString(Object part) {
-        return (part == null) ? nullText : Joiner.this.toString(part);
-      }
-      @Override public Joiner useForNull(String nullText) {
-        checkNotNull(nullText); // weird, just to satisfy NullPointerTester!
-        // TODO: fix that?
-        throw new UnsupportedOperationException("already specified useForNull");
-      }
-      @Override public Joiner skipNulls() {
-        throw new UnsupportedOperationException("already specified useForNull");
-      }
-    };
-  }
-
-  /**
-   * Returns a joiner with the same behavior as this joiner, except
-   * automatically skipping over any provided null elements.
-   */
-  public Joiner skipNulls() {
-    return new Joiner(this) {
-      @Override public <A extends Appendable> A appendTo(
-          A appendable, Iterable<?> parts) throws IOException {
-        checkNotNull(appendable, "appendable");
-        checkNotNull(parts, "parts");
-        Iterator<?> iterator = parts.iterator();
-        while (iterator.hasNext()) {
-          Object part = iterator.next();
-          if (part != null) {
-            appendable.append(Joiner.this.toString(part));
-            break;
-          }
-        }
-        while (iterator.hasNext()) {
-          Object part = iterator.next();
-          if (part != null) {
-            appendable.append(separator);
-            appendable.append(Joiner.this.toString(part));
-          }
-        }
-        return appendable;
-      }
-      @Override public Joiner useForNull(String nullText) {
-        checkNotNull(nullText); // weird, just to satisfy NullPointerTester!
-        throw new UnsupportedOperationException("already specified skipNulls");
-      }
-      @Override public MapJoiner withKeyValueSeparator(String kvs) {
-        checkNotNull(kvs); // weird, just to satisfy NullPointerTester!
-        throw new UnsupportedOperationException(
-            "can't use .skipNulls() with maps");
-      }
-    };
-  }
-
-  /**
-   * Returns a {@code MapJoiner} using the given key-value separator, and the
-   * same configuration as this {@code Joiner} otherwise.
-   */
-  public MapJoiner withKeyValueSeparator(String keyValueSeparator) {
-    return new MapJoiner(this, checkNotNull(keyValueSeparator));
-  }
-
-  /**
-   * An object that joins map entries in the same manner as {@code Joiner} joins
-   * iterables and arrays.
-   */
-  public static class MapJoiner {
-    private Joiner joiner;
-    private String keyValueSeparator;
-
-    private MapJoiner(Joiner joiner, String keyValueSeparator) {
-      this.joiner = joiner;
-      this.keyValueSeparator = keyValueSeparator;
-    }
-
-    /**
-     * Appends the string representation of each entry of {@code map}, using the
-     * previously configured separator and key-value separator, to {@code
-     * appendable}.
-     */
-    public <A extends Appendable> A appendTo(A appendable, Map<?, ?> map)
-        throws IOException {
-      checkNotNull(appendable);
-      Iterator<? extends Map.Entry<?, ?>> iterator = map.entrySet().iterator();
-      if (iterator.hasNext()) {
-        Entry<?, ?> entry = iterator.next();
-        appendable.append(joiner.toString(entry.getKey()));
-        appendable.append(keyValueSeparator);
-        appendable.append(joiner.toString(entry.getValue()));
-        while (iterator.hasNext()) {
-          appendable.append(joiner.separator);
-          Entry<?, ?> e = iterator.next();
-          appendable.append(joiner.toString(e.getKey()));
-          appendable.append(keyValueSeparator);
-          appendable.append(joiner.toString(e.getValue()));
-        }
-      }
-      return appendable;
-    }
-
-    /**
-     * Appends the string representation of each entry of {@code map}, using the
-     * previously configured separator and key-value separator, to {@code
-     * builder}. Identical to {@link #appendTo(Appendable, Map)}, except that it
-     * does not throw {@link IOException}.
-     */
-    public StringBuilder appendTo(StringBuilder builder, Map<?, ?> map) {
-      try {
-        appendTo((Appendable) builder, map);
-      } catch (IOException impossible) {
-        throw new AssertionError(impossible);
-      }
-      return builder;
-    }
-
-    /**
-     * Returns a string containing the string representation of each entry of
-     * {@code map}, using the previously configured separator and key-value
-     * separator.
-     */
-    public String join(Map<?, ?> map) {
-      return appendTo(new StringBuilder(), map).toString();
-    }
-
-    /**
-     * Returns a map joiner with the same behavior as this one, except
-     * automatically substituting {@code nullText} for any provided null keys or
-     * values.
-     */
-    public MapJoiner useForNull(String nullText) {
-      return new MapJoiner(joiner.useForNull(nullText), keyValueSeparator);
-    }
-  }
-
-  CharSequence toString(Object part) {
-    return (part instanceof CharSequence)
-        ? (CharSequence) part
-        : part.toString();
-  }
-
-  private static Iterable<Object> iterable(
-      final Object first, final Object second, final Object[] rest) {
-    checkNotNull(rest);
-    return new AbstractList<Object>() {
-      @Override public int size() {
-        return rest.length + 2;
-      }
-      @Override public Object get(int index) {
-        switch (index) {
-          case 0:
-            return first;
-          case 1:
-            return second;
-          default:
-            return rest[index - 2];
-        }
-      }
-    };
-  }
-}
diff --git a/src/com/google/common/base/Objects.java b/src/com/google/common/base/Objects.java
deleted file mode 100644
index db969a0..0000000
--- a/src/com/google/common/base/Objects.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.base;
-
-import com.google.common.annotations.GwtCompatible;
-import com.google.common.annotations.VisibleForTesting;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import javax.annotation.Nullable;
-
-/**
- * Helper functions that can operate on any {@code Object}.
- *
- * @author Laurence Gonsalves
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible
-public final class Objects {
-  private Objects() {}
-
-  /**
-   * Determines whether two possibly-null objects are equal. Returns:
-   *
-   * <ul>
-   * <li>{@code true} if {@code a} and {@code b} are both null.
-   * <li>{@code true} if {@code a} and {@code b} are both non-null and they are
-   *     equal according to {@link Object#equals(Object)}.
-   * <li>{@code false} in all other situations.
-   * </ul>
-   *
-   * <p>This assumes that any non-null objects passed to this function conform
-   * to the {@code equals()} contract.
-   */
-  public static boolean equal(@Nullable Object a, @Nullable Object b) {
-    return a == b || (a != null && a.equals(b));
-  }
-
-  /**
-   * Generates a hash code for multiple values. The hash code is generated by
-   * calling {@link Arrays#hashCode(Object[])}.
-   *
-   * <p>This is useful for implementing {@link Object#hashCode()}. For example,
-   * in an object that has three properties, {@code x}, {@code y}, and
-   * {@code z}, one could write:
-   * <pre>
-   * public int hashCode() {
-   *   return Objects.hashCode(getX(), getY(), getZ());
-   * }</pre>
-   *
-   * <b>Warning</b>: When a single object is supplied, the returned hash code
-   * does not equal the hash code of that object.
-   */
-  public static int hashCode(Object... objects) {
-    return Arrays.hashCode(objects);
-  }
-
-  /**
-   * Creates an instance of {@link ToStringHelper}.
-   *
-   * <p>This is helpful for implementing {@link Object#toString()}. For
-   * example, in an object that contains two member variables, {@code x},
-   * and {@code y}, one could write:<pre>   <tt>
-   *   public class ClassName {
-   *     public String toString() {
-   *       return Objects.toStringHelper(this)
-   *           .add("x", x)
-   *           .add("y", y)
-   *           .toString();
-   *     }
-   *   }</tt>
-   * </pre>
-   *
-   * Assuming the values of {@code x} and {@code y} are 1 and 2,
-   * this code snippet returns the string <tt>"ClassName{x=1, y=2}"</tt>.
-   *
-   * @since 2010.01.04 <b>tentative</b>
-   */
-  public static ToStringHelper toStringHelper(Object object) {
-    return new ToStringHelper(object);
-  }
-
-  /**
-   * Support class for {@link Objects#toStringHelper}.
-   *
-   * @author Jason Lee
-   * @since 2010.01.04 <b>tentative</b>
-   */
-  public static class ToStringHelper {
-    private final List<String> fieldString = new ArrayList<String>();
-    private final Object instance;
-
-    /**
-     * Use {@link Objects#toStringHelper(Object)} to create an instance.
-     */
-    private ToStringHelper(Object instance) {
-      this.instance = Preconditions.checkNotNull(instance);
-    }
-
-    /**
-     * Adds a name/value pair to the formatted output in {@code name=value}
-     * format. If {@code value} is {@code null}, the string {@code "null"}
-     * is used.
-     */
-    public ToStringHelper add(String name, @Nullable Object value) {
-      return addValue(Preconditions.checkNotNull(name) + "=" + value);
-    }
-
-    /**
-     * Adds a value to the formatted output in {@code value} format.<p/>
-     *
-     * It is strongly encouraged to use {@link #add(String, Object)} instead and
-     * give value a readable name.
-     */
-    public ToStringHelper addValue(@Nullable Object value) {
-      fieldString.add(String.valueOf(value));
-      return this;
-    }
-
-    private static final Joiner JOINER = Joiner.on(", ");
-
-    /**
-     * Returns the formatted string.
-     */
-    @Override public String toString() {
-      StringBuilder builder = new StringBuilder(100)
-          .append(simpleName(instance.getClass()))
-          .append('{');
-      return JOINER.appendTo(builder, fieldString)
-          .append('}')
-          .toString();
-    }
-
-    /**
-     * {@link Class#getSimpleName()} is not GWT compatible yet, so we
-     * provide our own implementation.
-     */
-    @VisibleForTesting
-    static String simpleName(Class<?> clazz) {
-      String name = clazz.getName();
-
-      // we want the name of the inner class all by its lonesome
-      int start = name.lastIndexOf('$');
-
-      // if this isn't an inner class, just find the start of the
-      // top level class name.
-      if (start == -1) {
-        start = name.lastIndexOf('.');
-      }
-      return name.substring(start + 1);
-    }
-  }
-}
diff --git a/src/com/google/common/base/Platform.java b/src/com/google/common/base/Platform.java
deleted file mode 100644
index a8a5cd6..0000000
--- a/src/com/google/common/base/Platform.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (C) 2009 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.base;
-
-import com.google.common.annotations.GwtCompatible;
-
-/**
- * Methods factored out so that they can be emulated differently in GWT.
- *
- * @author Jesse Wilson
- */
-@GwtCompatible(emulated = true)
-final class Platform {
-  private Platform() {}
-
-  /**
-   * Calls {@link Class#isInstance(Object)}.
-   *
-   * <p>This method is not supported in GWT yet.
-   */
-  static boolean isInstance(Class<?> clazz, Object obj) {
-    return clazz.isInstance(obj);
-  }
-  
-  /** Returns a thread-local 1024-char array. */
-  static char[] charBufferFromThreadLocal() {
-    return DEST_TL.get();
-  }
-
-  /**
-   * A thread-local destination buffer to keep us from creating new buffers.
-   * The starting size is 1024 characters.  If we grow past this we don't
-   * put it back in the threadlocal, we just keep going and grow as needed.
-   */
-  private static final ThreadLocal<char[]> DEST_TL = new ThreadLocal<char[]>() {
-    @Override
-    protected char[] initialValue() {
-      return new char[1024];
-    }
-  };
-
-  static CharMatcher precomputeCharMatcher(CharMatcher matcher) {
-    return matcher.precomputedInternal();
-  }
-}
diff --git a/src/com/google/common/base/Preconditions.java b/src/com/google/common/base/Preconditions.java
deleted file mode 100644
index 9653c1a..0000000
--- a/src/com/google/common/base/Preconditions.java
+++ /dev/null
@@ -1,434 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.base;
-
-import com.google.common.annotations.GwtCompatible;
-import com.google.common.annotations.VisibleForTesting;
-
-import java.util.Collection;
-import java.util.NoSuchElementException;
-
-/**
- * Simple static methods to be called at the start of your own methods to verify
- * correct arguments and state. This allows constructs such as
- * <pre>
- *     if (count <= 0) {
- *       throw new IllegalArgumentException("must be positive: " + count);
- *     }</pre>
- *
- * to be replaced with the more compact
- * <pre>
- *     checkArgument(count > 0, "must be positive: %s", count);</pre>
- *
- * Note that the sense of the expression is inverted; with {@code Preconditions}
- * you declare what you expect to be <i>true</i>, just as you do with an
- * <a href="http://java.sun.com/j2se/1.5.0/docs/guide/language/assert.html">
- * {@code assert}</a> or a JUnit {@code assertTrue} call.
- *
- * <p><b>Warning:</b> only the {@code "%s"} specifier is recognized as a
- * placeholder in these messages, not the full range of {@link
- * String#format(String, Object[])} specifiers.
- *
- * <p>Take care not to confuse precondition checking with other similar types
- * of checks! Precondition exceptions -- including those provided here, but also
- * {@link IndexOutOfBoundsException}, {@link NoSuchElementException}, {@link
- * UnsupportedOperationException} and others -- are used to signal that the
- * <i>calling method</i> has made an error. This tells the caller that it should
- * not have invoked the method when it did, with the arguments it did, or
- * perhaps ever. Postcondition or other invariant failures should not throw
- * these types of exceptions.
- *
- * @author Kevin Bourrillion
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible
-public final class Preconditions {
-  private Preconditions() {}
-
-  /**
-   * Ensures the truth of an expression involving one or more parameters to the
-   * calling method.
-   *
-   * @param expression a boolean expression
-   * @throws IllegalArgumentException if {@code expression} is false
-   */
-  public static void checkArgument(boolean expression) {
-    if (!expression) {
-      throw new IllegalArgumentException();
-    }
-  }
-
-  /**
-   * Ensures the truth of an expression involving one or more parameters to the
-   * calling method.
-   *
-   * @param expression a boolean expression
-   * @param errorMessage the exception message to use if the check fails; will
-   *     be converted to a string using {@link String#valueOf(Object)}
-   * @throws IllegalArgumentException if {@code expression} is false
-   */
-  public static void checkArgument(boolean expression, Object errorMessage) {
-    if (!expression) {
-      throw new IllegalArgumentException(String.valueOf(errorMessage));
-    }
-  }
-
-  /**
-   * Ensures the truth of an expression involving one or more parameters to the
-   * calling method.
-   *
-   * @param expression a boolean expression
-   * @param errorMessageTemplate a template for the exception message should the
-   *     check fail. The message is formed by replacing each {@code %s}
-   *     placeholder in the template with an argument. These are matched by
-   *     position - the first {@code %s} gets {@code errorMessageArgs[0]}, etc.
-   *     Unmatched arguments will be appended to the formatted message in square
-   *     braces. Unmatched placeholders will be left as-is.
-   * @param errorMessageArgs the arguments to be substituted into the message
-   *     template. Arguments are converted to strings using
-   *     {@link String#valueOf(Object)}.
-   * @throws IllegalArgumentException if {@code expression} is false
-   * @throws NullPointerException if the check fails and either {@code
-   *     errorMessageTemplate} or {@code errorMessageArgs} is null (don't let
-   *     this happen)
-   */
-  public static void checkArgument(boolean expression,
-      String errorMessageTemplate, Object... errorMessageArgs) {
-    if (!expression) {
-      throw new IllegalArgumentException(
-          format(errorMessageTemplate, errorMessageArgs));
-    }
-  }
-
-  /**
-   * Ensures the truth of an expression involving the state of the calling
-   * instance, but not involving any parameters to the calling method.
-   *
-   * @param expression a boolean expression
-   * @throws IllegalStateException if {@code expression} is false
-   */
-  public static void checkState(boolean expression) {
-    if (!expression) {
-      throw new IllegalStateException();
-    }
-  }
-
-  /**
-   * Ensures the truth of an expression involving the state of the calling
-   * instance, but not involving any parameters to the calling method.
-   *
-   * @param expression a boolean expression
-   * @param errorMessage the exception message to use if the check fails; will
-   *     be converted to a string using {@link String#valueOf(Object)}
-   * @throws IllegalStateException if {@code expression} is false
-   */
-  public static void checkState(boolean expression, Object errorMessage) {
-    if (!expression) {
-      throw new IllegalStateException(String.valueOf(errorMessage));
-    }
-  }
-
-  /**
-   * Ensures the truth of an expression involving the state of the calling
-   * instance, but not involving any parameters to the calling method.
-   *
-   * @param expression a boolean expression
-   * @param errorMessageTemplate a template for the exception message should the
-   *     check fail. The message is formed by replacing each {@code %s}
-   *     placeholder in the template with an argument. These are matched by
-   *     position - the first {@code %s} gets {@code errorMessageArgs[0]}, etc.
-   *     Unmatched arguments will be appended to the formatted message in square
-   *     braces. Unmatched placeholders will be left as-is.
-   * @param errorMessageArgs the arguments to be substituted into the message
-   *     template. Arguments are converted to strings using
-   *     {@link String#valueOf(Object)}.
-   * @throws IllegalStateException if {@code expression} is false
-   * @throws NullPointerException if the check fails and either {@code
-   *     errorMessageTemplate} or {@code errorMessageArgs} is null (don't let
-   *     this happen)
-   */
-  public static void checkState(boolean expression,
-      String errorMessageTemplate, Object... errorMessageArgs) {
-    if (!expression) {
-      throw new IllegalStateException(
-          format(errorMessageTemplate, errorMessageArgs));
-    }
-  }
-
-  /**
-   * Ensures that an object reference passed as a parameter to the calling
-   * method is not null.
-   *
-   * @param reference an object reference
-   * @return the non-null reference that was validated
-   * @throws NullPointerException if {@code reference} is null
-   */
-  public static <T> T checkNotNull(T reference) {
-    if (reference == null) {
-      throw new NullPointerException();
-    }
-    return reference;
-  }
-
-  /**
-   * Ensures that an object reference passed as a parameter to the calling
-   * method is not null.
-   *
-   * @param reference an object reference
-   * @param errorMessage the exception message to use if the check fails; will
-   *     be converted to a string using {@link String#valueOf(Object)}
-   * @return the non-null reference that was validated
-   * @throws NullPointerException if {@code reference} is null
-   */
-  public static <T> T checkNotNull(T reference, Object errorMessage) {
-    if (reference == null) {
-      throw new NullPointerException(String.valueOf(errorMessage));
-    }
-    return reference;
-  }
-
-  /**
-   * Ensures that an object reference passed as a parameter to the calling
-   * method is not null.
-   *
-   * @param reference an object reference
-   * @param errorMessageTemplate a template for the exception message should the
-   *     check fail. The message is formed by replacing each {@code %s}
-   *     placeholder in the template with an argument. These are matched by
-   *     position - the first {@code %s} gets {@code errorMessageArgs[0]}, etc.
-   *     Unmatched arguments will be appended to the formatted message in square
-   *     braces. Unmatched placeholders will be left as-is.
-   * @param errorMessageArgs the arguments to be substituted into the message
-   *     template. Arguments are converted to strings using
-   *     {@link String#valueOf(Object)}.
-   * @return the non-null reference that was validated
-   * @throws NullPointerException if {@code reference} is null
-   */
-  public static <T> T checkNotNull(T reference, String errorMessageTemplate,
-      Object... errorMessageArgs) {
-    if (reference == null) {
-      // If either of these parameters is null, the right thing happens anyway
-      throw new NullPointerException(
-          format(errorMessageTemplate, errorMessageArgs));
-    }
-    return reference;
-  }
-
-  /*
-   * All recent hotspots (as of 2009) *really* like to have the natural code
-   *
-   * if (guardExpression) {
-   *    throw new BadException(messageExpression);
-   * }
-   *
-   * refactored so that messageExpression is moved to a separate
-   * String-returning method.
-   *
-   * if (guardExpression) {
-   *    throw new BadException(badMsg(...));
-   * }
-   *
-   * The alternative natural refactorings into void or Exception-returning
-   * methods are much slower.  This is a big deal - we're talking factors of
-   * 2-8 in microbenchmarks, not just 10-20%.  (This is a hotspot optimizer
-   * bug, which should be fixed, but that's a separate, big project).
-   *
-   * The coding pattern above is heavily used in java.util, e.g. in ArrayList.
-   * There is a RangeCheckMicroBenchmark in the JDK that was used to test this.
-   *
-   * But the methods in this class want to throw different exceptions,
-   * depending on the args, so it appears that this pattern is not directly
-   * applicable.  But we can use the ridiculous, devious trick of throwing an
-   * exception in the middle of the construction of another exception.
-   * Hotspot is fine with that.
-   */
-
-  /**
-   * Ensures that {@code index} specifies a valid <i>element</i> in an array,
-   * list or string of size {@code size}. An element index may range from zero,
-   * inclusive, to {@code size}, exclusive.
-   *
-   * @param index a user-supplied index identifying an element of an array, list
-   *     or string
-   * @param size the size of that array, list or string
-   * @return the value of {@code index}
-   * @throws IndexOutOfBoundsException if {@code index} is negative or is not
-   *     less than {@code size}
-   * @throws IllegalArgumentException if {@code size} is negative
-   */
-  public static int checkElementIndex(int index, int size) {
-    return checkElementIndex(index, size, "index");
-  }
-
-  /**
-   * Ensures that {@code index} specifies a valid <i>element</i> in an array,
-   * list or string of size {@code size}. An element index may range from zero,
-   * inclusive, to {@code size}, exclusive.
-   *
-   * @param index a user-supplied index identifying an element of an array, list
-   *     or string
-   * @param size the size of that array, list or string
-   * @param desc the text to use to describe this index in an error message
-   * @return the value of {@code index}
-   * @throws IndexOutOfBoundsException if {@code index} is negative or is not
-   *     less than {@code size}
-   * @throws IllegalArgumentException if {@code size} is negative
-   */
-  public static int checkElementIndex(int index, int size, String desc) {
-    // Carefully optimized for execution by hotspot (explanatory comment above)
-    if (index < 0 || index >= size) {
-      throw new IndexOutOfBoundsException(badElementIndex(index, size, desc));
-    }
-    return index;
-  }
-
-  private static String badElementIndex(int index, int size, String desc) {
-    if (index < 0) {
-      return format("%s (%s) must not be negative", desc, index);
-    } else if (size < 0) {
-      throw new IllegalArgumentException("negative size: " + size);
-    } else { // index >= size
-      return format("%s (%s) must be less than size (%s)", desc, index, size);
-    }
-  }
-
-  /**
-   * Ensures that {@code index} specifies a valid <i>position</i> in an array,
-   * list or string of size {@code size}. A position index may range from zero
-   * to {@code size}, inclusive.
-   *
-   * @param index a user-supplied index identifying a position in an array, list
-   *     or string
-   * @param size the size of that array, list or string
-   * @return the value of {@code index}
-   * @throws IndexOutOfBoundsException if {@code index} is negative or is
-   *     greater than {@code size}
-   * @throws IllegalArgumentException if {@code size} is negative
-   */
-  public static int checkPositionIndex(int index, int size) {
-    return checkPositionIndex(index, size, "index");
-  }
-
-  /**
-   * Ensures that {@code index} specifies a valid <i>position</i> in an array,
-   * list or string of size {@code size}. A position index may range from zero
-   * to {@code size}, inclusive.
-   *
-   * @param index a user-supplied index identifying a position in an array, list
-   *     or string
-   * @param size the size of that array, list or string
-   * @param desc the text to use to describe this index in an error message
-   * @return the value of {@code index}
-   * @throws IndexOutOfBoundsException if {@code index} is negative or is
-   *     greater than {@code size}
-   * @throws IllegalArgumentException if {@code size} is negative
-   */
-  public static int checkPositionIndex(int index, int size, String desc) {
-    // Carefully optimized for execution by hotspot (explanatory comment above)
-    if (index < 0 || index > size) {
-      throw new IndexOutOfBoundsException(badPositionIndex(index, size, desc));
-    }
-    return index;
-  }
-
-  private static String badPositionIndex(int index, int size, String desc) {
-    if (index < 0) {
-      return format("%s (%s) must not be negative", desc, index);
-    } else if (size < 0) {
-      throw new IllegalArgumentException("negative size: " + size);
-    } else { // index > size
-      return format("%s (%s) must not be greater than size (%s)",
-                    desc, index, size);
-    }
-  }
-
-  /**
-   * Ensures that {@code start} and {@code end} specify a valid <i>positions</i>
-   * in an array, list or string of size {@code size}, and are in order. A
-   * position index may range from zero to {@code size}, inclusive.
-   *
-   * @param start a user-supplied index identifying a starting position in an
-   *     array, list or string
-   * @param end a user-supplied index identifying a ending position in an array,
-   *     list or string
-   * @param size the size of that array, list or string
-   * @throws IndexOutOfBoundsException if either index is negative or is
-   *     greater than {@code size}, or if {@code end} is less than {@code start}
-   * @throws IllegalArgumentException if {@code size} is negative
-   */
-  public static void checkPositionIndexes(int start, int end, int size) {
-    // Carefully optimized for execution by hotspot (explanatory comment above)
-    if (start < 0 || end < start || end > size) {
-      throw new IndexOutOfBoundsException(badPositionIndexes(start, end, size));
-    }
-  }
-
-  private static String badPositionIndexes(int start, int end, int size) {
-    if (start < 0 || start > size) {
-      return badPositionIndex(start, size, "start index");
-    }
-    if (end < 0 || end > size) {
-      return badPositionIndex(end, size, "end index");
-    }
-    // end < start
-    return format("end index (%s) must not be less than start index (%s)",
-                  end, start);
-  }
-
-  /**
-   * Substitutes each {@code %s} in {@code template} with an argument. These
-   * are matched by position - the first {@code %s} gets {@code args[0]}, etc.
-   * If there are more arguments than placeholders, the unmatched arguments will
-   * be appended to the end of the formatted message in square braces.
-   *
-   * @param template a non-null string containing 0 or more {@code %s}
-   *     placeholders.
-   * @param args the arguments to be substituted into the message
-   *     template. Arguments are converted to strings using
-   *     {@link String#valueOf(Object)}. Arguments can be null.
-   */
-  @VisibleForTesting static String format(String template, Object... args) {
-    // start substituting the arguments into the '%s' placeholders
-    StringBuilder builder = new StringBuilder(
-        template.length() + 16 * args.length);
-    int templateStart = 0;
-    int i = 0;
-    while (i < args.length) {
-      int placeholderStart = template.indexOf("%s", templateStart);
-      if (placeholderStart == -1) {
-        break;
-      }
-      builder.append(template.substring(templateStart, placeholderStart));
-      builder.append(args[i++]);
-      templateStart = placeholderStart + 2;
-    }
-    builder.append(template.substring(templateStart));
-
-    // if we run out of placeholders, append the extra args in square braces
-    if (i < args.length) {
-      builder.append(" [");
-      builder.append(args[i++]);
-      while (i < args.length) {
-        builder.append(", ");
-        builder.append(args[i++]);
-      }
-      builder.append("]");
-    }
-
-    return builder.toString();
-  }
-}
diff --git a/src/com/google/common/base/Predicate.java b/src/com/google/common/base/Predicate.java
deleted file mode 100644
index f676f5e..0000000
--- a/src/com/google/common/base/Predicate.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.base;
-
-import com.google.common.annotations.GwtCompatible;
-
-import javax.annotation.Nullable;
-
-/**
- * Determines a true or false value for a given input. For example, a
- * {@code RegexPredicate} might implement {@code Predicate<String>}, and return
- * {@code true} for any string that matches its given regular expression.
- *
- * <p>Implementations which may cause side effects upon evaluation are strongly
- * encouraged to state this fact clearly in their API documentation.
- *
- * @author Kevin Bourrillion
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible
-public interface Predicate<T> {
-
-  /*
-   * This interface does not extend Function<T, Boolean> because doing so would
-   * let predicates return null.
-   */
-
-  /**
-   * Applies this predicate to the given object.
-   *
-   * @param input the input that the predicate should act on
-   * @return the value of this predicate when applied to the input {@code t}
-   */
-  boolean apply(@Nullable T input);
-
-  /**
-   * Indicates whether some other object is equal to this {@code Predicate}.
-   * This method can return {@code true} <i>only</i> if the specified object is
-   * also a {@code Predicate} and, for every input object {@code input}, it
-   * returns exactly the same value. Thus, {@code predicate1.equals(predicate2)}
-   * implies that either {@code predicate1.apply(input)} and
-   * {@code predicate2.apply(input)} are both {@code true} or both
-   * {@code false}.
-   *
-   * <p>Note that it is always safe <i>not</i> to override
-   * {@link Object#equals}.
-   */
-  boolean equals(@Nullable Object obj);
-}
diff --git a/src/com/google/common/base/Predicates.java b/src/com/google/common/base/Predicates.java
deleted file mode 100644
index 3fa18ef..0000000
--- a/src/com/google/common/base/Predicates.java
+++ /dev/null
@@ -1,555 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.base;
-
-import com.google.common.annotations.GwtCompatible;
-import com.google.common.annotations.GwtIncompatible;
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-
-import javax.annotation.Nullable;
-
-/**
- * Contains static factory methods for creating {@code Predicate} instances.
- *
- * <p>All methods returns serializable predicates as long as they're given
- * serializable parameters.
- *
- * @author Kevin Bourrillion
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible
-public final class Predicates {
-  private Predicates() {}
-
-  // TODO: considering having these implement a VisitablePredicate interface
-  // which specifies an accept(PredicateVisitor) method.
-
-  /**
-   * Returns a predicate that always evaluates to {@code true}.
-   */
-  @GwtCompatible(serializable = true)
-  @SuppressWarnings("unchecked")
-  public static <T> Predicate<T> alwaysTrue() {
-    return (Predicate<T>) AlwaysTruePredicate.INSTANCE;
-  }
-
-  /**
-   * Returns a predicate that always evaluates to {@code false}.
-   */
-  @GwtCompatible(serializable = true)
-  @SuppressWarnings("unchecked")
-  public static <T> Predicate<T> alwaysFalse() {
-    return (Predicate<T>) AlwaysFalsePredicate.INSTANCE;
-  }
-
-  /**
-   * Returns a predicate that evaluates to {@code true} if the object reference
-   * being tested is null.
-   */
-  @SuppressWarnings("unchecked")
-  public static <T> Predicate<T> isNull() {
-    return (Predicate<T>) IsNullPredicate.INSTANCE;
-  }
-
-  /**
-   * Returns a predicate that evaluates to {@code true} if the object reference
-   * being tested is not null.
-   */
-  @SuppressWarnings("unchecked")
-  public static <T> Predicate<T> notNull() {
-    return (Predicate<T>) NotNullPredicate.INSTANCE;
-  }
-
-  /**
-   * Returns a predicate that evaluates to {@code true} if the given predicate
-   * evaluates to {@code false}.
-   */
-  public static <T> Predicate<T> not(Predicate<T> predicate) {
-    return new NotPredicate<T>(predicate);
-  }
-
-  /**
-   * Returns a predicate that evaluates to {@code true} if each of its
-   * components evaluates to {@code true}. The components are evaluated in
-   * order, and evaluation will be "short-circuited" as soon as a false
-   * predicate is found. It defensively copies the iterable passed in, so future
-   * changes to it won't alter the behavior of this predicate. If {@code
-   * components} is empty, the returned predicate will always evaluate to {@code
-   * true}.
-   */
-  public static <T> Predicate<T> and(
-      Iterable<? extends Predicate<? super T>> components) {
-    return new AndPredicate<T>(defensiveCopy(components));
-  }
-
-  /**
-   * Returns a predicate that evaluates to {@code true} if each of its
-   * components evaluates to {@code true}. The components are evaluated in
-   * order, and evaluation will be "short-circuited" as soon as a false
-   * predicate is found. It defensively copies the array passed in, so future
-   * changes to it won't alter the behavior of this predicate. If {@code
-   * components} is empty, the returned predicate will always evaluate to {@code
-   * true}.
-   */
-  public static <T> Predicate<T> and(Predicate<? super T>... components) {
-    return new AndPredicate<T>(defensiveCopy(components));
-  }
-
-  /**
-   * Returns a predicate that evaluates to {@code true} if both of its
-   * components evaluate to {@code true}. The components are evaluated in
-   * order, and evaluation will be "short-circuited" as soon as a false
-   * predicate is found.
-   */
-  public static <T> Predicate<T> and(Predicate<? super T> first,
-      Predicate<? super T> second) {
-    return new AndPredicate<T>(Predicates.<T>asList(
-        checkNotNull(first), checkNotNull(second)));
-  }
-
-  /**
-   * Returns a predicate that evaluates to {@code true} if any one of its
-   * components evaluates to {@code true}. The components are evaluated in
-   * order, and evaluation will be "short-circuited" as soon as as soon as a
-   * true predicate is found. It defensively copies the iterable passed in, so
-   * future changes to it won't alter the behavior of this predicate. If {@code
-   * components} is empty, the returned predicate will always evaluate to {@code
-   * false}.
-   */
-  public static <T> Predicate<T> or(
-      Iterable<? extends Predicate<? super T>> components) {
-    return new OrPredicate<T>(defensiveCopy(components));
-  }
-
-  /**
-   * Returns a predicate that evaluates to {@code true} if any one of its
-   * components evaluates to {@code true}. The components are evaluated in
-   * order, and evaluation will be "short-circuited" as soon as as soon as a
-   * true predicate is found. It defensively copies the array passed in, so
-   * future changes to it won't alter the behavior of this predicate. If {@code
-   * components} is empty, the returned predicate will always evaluate to {@code
-   * false}.
-   */
-  public static <T> Predicate<T> or(Predicate<? super T>... components) {
-    return new OrPredicate<T>(defensiveCopy(components));
-  }
-
-  /**
-   * Returns a predicate that evaluates to {@code true} if either of its
-   * components evaluates to {@code true}. The components are evaluated in
-   * order, and evaluation will be "short-circuited" as soon as as soon as a
-   * true predicate is found.
-   */
-  public static <T> Predicate<T> or(Predicate<? super T> first,
-      Predicate<? super T> second) {
-    return new OrPredicate<T>(Predicates.<T>asList(
-        checkNotNull(first), checkNotNull(second)));
-  }
-
-  /**
-   * Returns a predicate that evaluates to {@code true} if the object being
-   * tested {@code equals()} the given target or both are null.
-   */
-  public static <T> Predicate<T> equalTo(@Nullable T target) {
-    // TODO: Change signature to return Predicate<Object>.
-    return (target == null)
-        ? Predicates.<T>isNull()
-        : new IsEqualToPredicate<T>(target);
-  }
-
-  /**
-   * Returns a predicate that evaluates to {@code true} if the object being
-   * tested is an instance of the given class. If the object being tested
-   * is {@code null} this predicate evaluates to {@code false}.
-   *
-   * <p>If you want to filter an {@code Iterable} to narrow its type, consider
-   * using {@link com.google.common.collect.Iterables#filter(Iterable, Class)}
-   * in preference.
-   */
-  @GwtIncompatible("Class.isInstance")
-  public static Predicate<Object> instanceOf(Class<?> clazz) {
-    return new InstanceOfPredicate(clazz);
-  }
-
-  /**
-   * Returns a predicate that evaluates to {@code true} if the object reference
-   * being tested is a member of the given collection. It does not defensively
-   * copy the collection passed in, so future changes to it will alter the
-   * behavior of the predicate.
-   *
-   * This method can technically accept any Collection<?>, but using a typed
-   * collection helps prevent bugs. This approach doesn't block any potential
-   * users since it is always possible to use {@code Predicates.<Object>in()}.
-   *
-   * @param target the collection that may contain the function input
-   */
-  public static <T> Predicate<T> in(Collection<? extends T> target) {
-    return new InPredicate<T>(target);
-  }
-
-  /**
-   * Returns the composition of a function and a predicate. For every {@code x},
-   * the generated predicate returns {@code predicate(function(x))}.
-   *
-   * @return the composition of the provided function and predicate
-   */
-  public static <A, B> Predicate<A> compose(
-      Predicate<B> predicate, Function<A, ? extends B> function) {
-    return new CompositionPredicate<A, B>(predicate, function);
-  }
-
-  /** @see Predicates#alwaysTrue() */
-  // Package private for GWT serialization.
-  enum AlwaysTruePredicate implements Predicate<Object> {
-    INSTANCE;
-
-    public boolean apply(Object o) {
-      return true;
-    }
-    @Override public String toString() {
-      return "AlwaysTrue";
-    }
-  }
-
-  /** @see Predicates#alwaysFalse() */
-  // Package private for GWT serialization.
-  enum AlwaysFalsePredicate implements Predicate<Object> {
-    INSTANCE;
-
-    public boolean apply(Object o) {
-      return false;
-    }
-    @Override public String toString() {
-      return "AlwaysFalse";
-    }
-  }
-
-  /** @see Predicates#not(Predicate) */
-  private static class NotPredicate<T>
-      implements Predicate<T>, Serializable {
-    private final Predicate<T> predicate;
-
-    private NotPredicate(Predicate<T> predicate) {
-      this.predicate = checkNotNull(predicate);
-    }
-    public boolean apply(T t) {
-      return !predicate.apply(t);
-    }
-    @Override public int hashCode() {
-      return ~predicate.hashCode(); /* Invert all bits. */
-    }
-    @Override public boolean equals(Object obj) {
-      if (obj instanceof NotPredicate<?>) {
-        NotPredicate<?> that = (NotPredicate<?>) obj;
-        return predicate.equals(that.predicate);
-      }
-      return false;
-    }
-    @Override public String toString() {
-      return "Not(" + predicate.toString() + ")";
-    }
-    private static final long serialVersionUID = 0;
-  }
-
-  private static final Joiner commaJoiner = Joiner.on(",");
-
-  /** @see Predicates#and(Iterable) */
-  private static class AndPredicate<T>
-      implements Predicate<T>, Serializable {
-    private final Iterable<? extends Predicate<? super T>> components;
-
-    private AndPredicate(Iterable<? extends Predicate<? super T>> components) {
-      this.components = components;
-    }
-    public boolean apply(T t) {
-      for (Predicate<? super T> predicate : components) {
-        if (!predicate.apply(t)) {
-          return false;
-        }
-      }
-      return true;
-    }
-    @Override public int hashCode() {
-      int result = -1; /* Start with all bits on. */
-      for (Predicate<? super T> predicate : components) {
-        result &= predicate.hashCode();
-      }
-      return result;
-    }
-    @Override public boolean equals(Object obj) {
-      if (obj instanceof AndPredicate<?>) {
-        AndPredicate<?> that = (AndPredicate<?>) obj;
-        return iterableElementsEqual(components, that.components);
-      }
-      return false;
-    }
-    @Override public String toString() {
-      return "And(" + commaJoiner.join(components) + ")";
-    }
-    private static final long serialVersionUID = 0;
-  }
-
-  /** @see Predicates#or(Iterable) */
-  private static class OrPredicate<T>
-      implements Predicate<T>, Serializable {
-    private final Iterable<? extends Predicate<? super T>> components;
-
-    private OrPredicate(Iterable<? extends Predicate<? super T>> components) {
-      this.components = components;
-    }
-    public boolean apply(T t) {
-      for (Predicate<? super T> predicate : components) {
-        if (predicate.apply(t)) {
-          return true;
-        }
-      }
-      return false;
-    }
-    @Override public int hashCode() {
-      int result = 0; /* Start with all bits off. */
-      for (Predicate<? super T> predicate : components) {
-        result |= predicate.hashCode();
-      }
-      return result;
-    }
-    @Override public boolean equals(Object obj) {
-      if (obj instanceof OrPredicate<?>) {
-        OrPredicate<?> that = (OrPredicate<?>) obj;
-        return iterableElementsEqual(components, that.components);
-      }
-      return false;
-    }
-    @Override public String toString() {
-      return "Or(" + commaJoiner.join(components) + ")";
-    }
-    private static final long serialVersionUID = 0;
-  }
-
-  /** @see Predicates#equalTo(Object) */
-  private static class IsEqualToPredicate<T>
-      implements Predicate<T>, Serializable {
-    private final T target;
-
-    private IsEqualToPredicate(T target) {
-      this.target = target;
-    }
-    public boolean apply(T t) {
-      return target.equals(t);
-    }
-    @Override public int hashCode() {
-      return target.hashCode();
-    }
-    @Override public boolean equals(Object obj) {
-      if (obj instanceof IsEqualToPredicate) {
-        IsEqualToPredicate<?> that = (IsEqualToPredicate<?>) obj;
-        return target.equals(that.target);
-      }
-      return false;
-    }
-    @Override public String toString() {
-      return "IsEqualTo(" + target + ")";
-    }
-    private static final long serialVersionUID = 0;
-  }
-
-  /** @see Predicates#instanceOf(Class) */
-  private static class InstanceOfPredicate
-      implements Predicate<Object>, Serializable {
-    private final Class<?> clazz;
-
-    private InstanceOfPredicate(Class<?> clazz) {
-      this.clazz = checkNotNull(clazz);
-    }
-    public boolean apply(Object o) {
-      return Platform.isInstance(clazz, o);
-    }
-    @Override public int hashCode() {
-      return clazz.hashCode();
-    }
-    @Override public boolean equals(Object obj) {
-      if (obj instanceof InstanceOfPredicate) {
-        InstanceOfPredicate that = (InstanceOfPredicate) obj;
-        return clazz == that.clazz;
-      }
-      return false;
-    }
-    @Override public String toString() {
-      return "IsInstanceOf(" + clazz.getName() + ")";
-    }
-    private static final long serialVersionUID = 0;
-  }
-
-  /** @see Predicates#isNull() */
-  // enum singleton pattern
-  private enum IsNullPredicate implements Predicate<Object> {
-    INSTANCE;
-
-    public boolean apply(Object o) {
-      return o == null;
-    }
-    @Override public String toString() {
-      return "IsNull";
-    }
-  }
-
-  /** @see Predicates#notNull() */
-  // enum singleton pattern
-  private enum NotNullPredicate implements Predicate<Object> {
-    INSTANCE;
-
-    public boolean apply(Object o) {
-      return o != null;
-    }
-    @Override public String toString() {
-      return "NotNull";
-    }
-  }
-
-  /** @see Predicates#in(Collection) */
-  private static class InPredicate<T>
-      implements Predicate<T>, Serializable {
-    private final Collection<?> target;
-
-    private InPredicate(Collection<?> target) {
-      this.target = checkNotNull(target);
-    }
-
-    public boolean apply(T t) {
-      try {
-        return target.contains(t);
-      } catch (NullPointerException e) {
-        return false;
-      } catch (ClassCastException e) {
-        return false;
-      }
-    }
-
-    @Override public boolean equals(Object obj) {
-      if (obj instanceof InPredicate<?>) {
-        InPredicate<?> that = (InPredicate<?>) obj;
-        return target.equals(that.target);
-      }
-      return false;
-    }
-
-    @Override public int hashCode() {
-      return target.hashCode();
-    }
-
-    @Override public String toString() {
-      return "In(" + target + ")";
-    }
-    private static final long serialVersionUID = 0;
-  }
-
-  /** @see Predicates#compose(Predicate, Function) */
-  private static class CompositionPredicate<A, B>
-      implements Predicate<A>, Serializable {
-    final Predicate<B> p;
-    final Function<A, ? extends B> f;
-
-    private CompositionPredicate(Predicate<B> p, Function<A, ? extends B> f) {
-      this.p = checkNotNull(p);
-      this.f = checkNotNull(f);
-    }
-
-    public boolean apply(A a) {
-      return p.apply(f.apply(a));
-    }
-
-    @Override public boolean equals(Object obj) {
-      if (obj instanceof CompositionPredicate<?, ?>) {
-        CompositionPredicate<?, ?> that = (CompositionPredicate<?, ?>) obj;
-        return f.equals(that.f) && p.equals(that.p);
-      }
-      return false;
-    }
-
-    @Override public int hashCode() {
-      /*
-       * TODO:  To leave the door open for future enhancement, this
-       * calculation should be coordinated with the hashCode() method of the
-       * corresponding composition method in Functions.  To construct the
-       * composition:
-       *    predicate(function2(function1(x)))
-       *
-       * There are two different ways of composing it:
-       *    compose(predicate, compose(function2, function1))
-       *    compose(compose(predicate, function2), function1)
-       *
-       * It would be nice if these could be equal.
-       */
-      return f.hashCode() ^ p.hashCode();
-    }
-
-    @Override public String toString() {
-      return p.toString() + "(" + f.toString() + ")";
-    }
-
-    private static final long serialVersionUID = 0;
-  }
-
-  /**
-   * Determines whether the two Iterables contain equal elements. More
-   * specifically, this method returns {@code true} if {@code iterable1} and
-   * {@code iterable2} contain the same number of elements and every element of
-   * {@code iterable1} is equal to the corresponding element of {@code
-   * iterable2}.
-   *
-   * <p>This is not a general-purpose method; it assumes that the iterations
-   * contain no {@code null} elements.
-   */
-  private static boolean iterableElementsEqual(
-      Iterable<?> iterable1, Iterable<?> iterable2) {
-    Iterator<?> iterator1 = iterable1.iterator();
-    Iterator<?> iterator2 = iterable2.iterator();
-    while (iterator1.hasNext()) {
-      if (!iterator2.hasNext()) {
-        return false;
-      }
-      if (!iterator1.next().equals(iterator2.next())) {
-        return false;
-      }
-    }
-    return !iterator2.hasNext();
-  }
-
-  @SuppressWarnings("unchecked")
-  private static <T> List<Predicate<? super T>> asList(
-      Predicate<? super T> first, Predicate<? super T> second) {
-    return Arrays.<Predicate<? super T>>asList(first, second);
-  }
-
-  private static <T> List<T> defensiveCopy(T... array) {
-    return defensiveCopy(Arrays.asList(array));
-  }
-
-  static <T> List<T> defensiveCopy(Iterable<T> iterable) {
-    ArrayList<T> list = new ArrayList<T>();
-    for (T element : iterable) {
-      list.add(checkNotNull(element));
-    }
-    return list;
-  }
-}
diff --git a/src/com/google/common/base/Service.java b/src/com/google/common/base/Service.java
deleted file mode 100644
index c9cbbae..0000000
--- a/src/com/google/common/base/Service.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * Copyright (C) 2009 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.base;
-
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Future;
-
-/**
- * An object with an operational state, plus asynchronous {@link #start()} and
- * {@link #stop()} lifecycle methods to transfer into and out of this state.
- * Example services include webservers, RPC servers and timers. The normal
- * lifecycle of a service is:
- * <ul>
- *   <li>{@link State#NEW} -&gt;</li>
- *   <li>{@link State#STARTING} -&gt;</li>
- *   <li>{@link State#RUNNING} -&gt;</li>
- *   <li>{@link State#STOPPING} -&gt;</li>
- *   <li>{@link State#TERMINATED}</li>
- * </ul>
- *
- * If the service fails while starting, running or stopping, its state will be
- * {@link State#FAILED}, and its behavior is undefined. Such a service cannot be
- * started nor stopped.
- *
- * <p>Implementors of this interface are strongly encouraged to extend {@link
- * com.google.common.util.concurrent.AbstractService} or {@link
- * com.google.common.util.concurrent.AbstractExecutionThreadService}, which make
- * the threading and state management easier.
- *
- * @author Jesse Wilson
- * @since 2009.09.15 <b>tentative</b>
- */
-public interface Service {
-  /**
-   * If the service state is {@link State#NEW}, this initiates service startup
-   * and returns immediately. If the service has already been started, this
-   * method returns immediately without taking action. A stopped service may not
-   * be restarted.
-   *
-   * @return a future for the startup result, regardless of whether this call
-   *     initiated startup. Calling {@link Future#get} will block until the
-   *     service has finished starting, and returns one of {@link
-   *     State#RUNNING}, {@link State#STOPPING} or {@link State#TERMINATED}. If
-   *     the service fails to start, {@link Future#get} will throw an {@link
-   *     ExecutionException}, and the service's state will be {@link
-   *     State#FAILED}. If it has already finished starting, {@link Future#get}
-   *     returns immediately. Cancelling the returned future is unsupported and
-   *     always returns {@code false}.
-   */
-  Future<State> start();
-
-  /**
-   * Initiates service startup (if necessary), returning once the service has
-   * finished starting. Unlike calling {@code start().get()}, this method throws
-   * no checked exceptions.
-   *
-   * @throws InterruptedRuntimeException if the thread was interrupted while
-   *      waiting for the service to finish starting up.
-   * @throws RuntimeException if startup failed
-   * @return the state of the service when startup finished.
-   */
-  State startAndWait();
-
-  /**
-   * Returns {@code true} if this service is {@link State#RUNNING running}.
-   */
-  boolean isRunning();
-
-  /**
-   * Returns the lifecycle state of the service.
-   */
-  State state();
-
-  /**
-   * If the service is {@link State#STARTING} or {@link State#RUNNING}, this
-   * initiates service shutdown and returns immediately. If this is {@link
-   * State#NEW}, it is {@link State#TERMINATED terminated} without having been
-   * started nor stopped.  If the service has already been stopped, this
-   * method returns immediately without taking action.
-   *
-   * @return a future for the shutdown result, regardless of whether this call
-   *     initiated shutdown. Calling {@link Future#get} will block until the
-   *     service has finished shutting down, and either returns {@link
-   *     State#TERMINATED} or throws an {@link ExecutionException}. If it has
-   *     already finished stopping, {@link Future#get} returns immediately.
-   *     Cancelling this future is unsupported and always returns {@code
-   *     false}.
-   */
-  Future<State> stop();
-
-  /**
-   * Initiates service shutdown (if necessary), returning once the service has
-   * finished stopping. If this is {@link State#STARTING}, startup will be
-   * cancelled. If this is {@link State#NEW}, it is {@link State#TERMINATED
-   * terminated} without having been started nor stopped. Unlike calling {@code
-   * stop().get()}, this method throws no checked exceptions.
-   *
-   * @throws InterruptedRuntimeException if the thread was interrupted while
-   *      waiting for the service to finish shutting down.
-   * @throws RuntimeException if shutdown failed
-   * @return the state of the service when shutdown finished.
-   */
-  State stopAndWait();
-
-  /**
-   * The lifecycle states of a service.
-   */
-  public enum State {
-
-    /**
-     * A service in this state is inactive. It does minimal work and consumes
-     * minimal resources.
-     */
-    NEW,
-
-    /**
-     * A service in this state is transitioning to {@link #RUNNING}.
-     */
-    STARTING,
-
-    /**
-     * A service in this state is operational.
-     */
-    RUNNING,
-
-    /**
-     * A service in this state is transitioning to {@link #TERMINATED}.
-     */
-    STOPPING,
-
-    /**
-     * A service in this state has completed execution normally. It does minimal
-     * work and consumes minimal resources.
-     */
-    TERMINATED,
-
-    /**
-     * A service in this state has encountered a problem and may not be
-     * operational. It cannot be started nor stopped.
-     */
-    FAILED
-  }
-}
diff --git a/src/com/google/common/base/Splitter.java b/src/com/google/common/base/Splitter.java
deleted file mode 100644
index fd61465..0000000
--- a/src/com/google/common/base/Splitter.java
+++ /dev/null
@@ -1,455 +0,0 @@
-/*
- * Copyright (C) 2009 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.base;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Preconditions.checkState;
-
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-import java.util.StringTokenizer;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import java.util.regex.PatternSyntaxException;
-
-/**
- * An object that divides strings (or other instances of {@code CharSequence})
- * into substrings, by recognizing a <i>separator</i> (a.k.a. "delimiter")
- * which can be expressed as a single character, literal string, regular
- * expression, {@code CharMatcher}, or by using a fixed substring length. This
- * class provides the complementary functionality to {@link Joiner}.
- *
- * <p>Here is the most basic example of {@code Splitter} usage: <pre>   {@code
- *
- *   Splitter.on(',').split("foo,bar")}</pre>
- *
- * This invocation returns an {@code Iterable<String>} containing {@code "foo"}
- * and {@code "bar"}, in that order.
- *
- * <p>By default {@code Splitter}'s behavior is very simplistic: <pre>   {@code
- *
- *   Splitter.on(',').split("foo,,bar,  quux")}</pre>
- *
- * This returns an iterable containing {@code ["foo", "", "bar", "  quux"]}.
- * Notice that the splitter does not assume that you want empty strings removed,
- * or that you wish to trim whitespace. If you want features like these, simply
- * ask for them: <pre> {@code
- *
- *   private static final Splitter MY_SPLITTER = Splitter.on(',')
- *       .trimResults()
- *       .omitEmptyStrings();}</pre>
- *
- * Now {@code MY_SPLITTER.split("foo, ,bar,  quux,")} returns an iterable
- * containing just {@code ["foo", "bar", "quux"]}. Note that the order in which
- * the configuration methods are called is never significant; for instance,
- * trimming is always applied first before checking for an empty result,
- * regardless of the order in which the {@link #trimResults()} and
- * {@link #omitEmptyStrings()} methods were invoked.
- *
- * <p><b>Warning: splitter instances are always immutable</b>; a configuration
- * method such as {@code omitEmptyStrings} has no effect on the instance it
- * is invoked on! You must store and use the new splitter instance returned by
- * the method. This makes splitters thread-safe, and safe to store as {@code
- * static final} constants (as illustrated above). <pre>   {@code
- *
- *   // Bad! Do not do this!
- *   Splitter splitter = Splitter.on('/');
- *   splitter.trimResults(); // does nothing!
- *   return splitter.split("wrong / wrong / wrong");}</pre>
- *
- * The separator recognized by the splitter does not have to be a single
- * literal character as in the examples above. See the methods {@link
- * #on(String)}, {@link #on(Pattern)} and {@link #on(CharMatcher)} for examples
- * of other ways to specify separators.
- *
- * <p><b>Note:</b> this class does not mimic any of the quirky behaviors of
- * similar JDK methods; for instance, it does not silently discard trailing
- * separators, as does {@link String#split(String)}, nor does it have a default
- * behavior of using five particular whitespace characters as separators, like
- * {@link StringTokenizer}.
- *
- * @author Julien Silland
- * @author Jesse Wilson
- * @author Kevin Bourrillion
- * @since 2009.09.15 <b>tentative</b>
- */
-public final class Splitter {
-  private final CharMatcher trimmer;
-  private final boolean omitEmptyStrings;
-  private final Strategy strategy;
-
-  private Splitter(Strategy strategy) {
-    this(strategy, false, CharMatcher.NONE);
-  }
-
-  private Splitter(Strategy strategy, boolean omitEmptyStrings,
-      CharMatcher trimmer) {
-    this.strategy = strategy;
-    this.omitEmptyStrings = omitEmptyStrings;
-    this.trimmer = trimmer;
-  }
-
-  /**
-   * Returns a splitter that uses the given single-character separator. For
-   * example, {@code Splitter.on(',').split("foo,,bar")} returns an iterable
-   * containing {@code ["foo", "", "bar"]}.
-   *
-   * @param separator the character to recognize as a separator
-   * @return a splitter, with default settings, that recognizes that separator
-   */
-  public static Splitter on(char separator) {
-    return on(CharMatcher.is(separator));
-  }
-
-  /**
-   * Returns a splitter that considers any single character matched by the
-   * given {@code CharMatcher} to be a separator. For example, {@code
-   * Splitter.on(CharMatcher.anyOf(";,")).split("foo,;bar,quux")} returns an
-   * iterable containing {@code ["foo", "", "bar", "quux"]}.
-   *
-   * @param separatorMatcher a {@link CharMatcher} that determines whether a
-   *     character is a separator
-   * @return a splitter, with default settings, that uses this matcher
-   */
-  public static Splitter on(final CharMatcher separatorMatcher) {
-    checkNotNull(separatorMatcher);
-
-    return new Splitter(new Strategy() {
-      /*@Override*/ public SplittingIterator iterator(
-          Splitter splitter, final CharSequence toSplit) {
-        return new SplittingIterator(splitter, toSplit) {
-          @Override int separatorStart(int start) {
-            return separatorMatcher.indexIn(toSplit, start);
-          }
-
-          @Override int separatorEnd(int separatorPosition) {
-            return separatorPosition + 1;
-          }
-        };
-      }
-    });
-  }
-
-  /**
-   * Returns a splitter that uses the given fixed string as a separator. For
-   * example, {@code Splitter.on(", ").split("foo, bar, baz,qux")} returns an
-   * iterable containing {@code ["foo", "bar", "baz,qux"]}.
-   *
-   * @param separator the literal, nonempty string to recognize as a separator
-   * @return a splitter, with default settings, that recognizes that separator
-   */
-  public static Splitter on(final String separator) {
-    checkArgument(separator.length() != 0,
-        "The separator may not be the empty string.");
-
-    return new Splitter(new Strategy() {
-      /*@Override*/ public SplittingIterator iterator(
-          Splitter splitter, CharSequence toSplit) {
-        return new SplittingIterator(splitter, toSplit) {
-          @Override public int separatorStart(int start) {
-            int delimeterLength = separator.length();
-
-            positions:
-            for (int p = start, last = toSplit.length() - delimeterLength;
-                p <= last; p++) {
-              for (int i = 0; i < delimeterLength; i++) {
-                if (toSplit.charAt(i + p) != separator.charAt(i)) {
-                  continue positions;
-                }
-              }
-              return p;
-            }
-            return -1;
-          }
-
-          @Override public int separatorEnd(int separatorPosition) {
-            return separatorPosition + separator.length();
-          }
-        };
-      }
-    });
-  }
-
-  /**
-   * Returns a splitter that considers any subsequence matching {@code
-   * pattern} to be a separator. For example, {@code
-   * Splitter.on(Pattern.compile("\r?\n")).split(entireFile)} splits a string
-   * into lines whether it uses DOS-style or UNIX-style line terminators.
-   *
-   * @param separatorPattern the pattern that determines whether a subsequence
-   *     is a separator. This pattern may not match the empty string.
-   * @return a splitter, with default settings, that uses this pattern
-   * @throws IllegalArgumentException if {@code separatorPattern} matches the
-   *     empty string
-   */
-  public static Splitter on(final Pattern separatorPattern) {
-    checkNotNull(separatorPattern);
-    checkArgument(!separatorPattern.matcher("").matches(),
-        "The pattern may not match the empty string: %s", separatorPattern);
-
-    return new Splitter(new Strategy() {
-      /*@Override*/ public SplittingIterator iterator(
-          final Splitter splitter, CharSequence toSplit) {
-        final Matcher matcher = separatorPattern.matcher(toSplit);
-        return new SplittingIterator(splitter, toSplit) {
-          @Override public int separatorStart(int start) {
-            return matcher.find(start) ? matcher.start() : -1;
-          }
-
-          @Override public int separatorEnd(int separatorPosition) {
-            return matcher.end();
-          }
-        };
-      }
-    });
-  }
-
-  /**
-   * Returns a splitter that considers any subsequence matching a given
-   * pattern (regular expression) to be a separator. For example, {@code
-   * Splitter.onPattern("\r?\n").split(entireFile)} splits a string into lines
-   * whether it uses DOS-style or UNIX-style line terminators. This is
-   * equivalent to {@code Splitter.on(Pattern.compile(pattern))}.
-   *
-   * @param separatorPattern the pattern that determines whether a subsequence
-   *     is a separator. This pattern may not match the empty string.
-   * @return a splitter, with default settings, that uses this pattern
-   * @throws PatternSyntaxException if {@code separatorPattern} is a malformed
-   *     expression
-   * @throws IllegalArgumentException if {@code separatorPattern} matches the
-   *     empty string
-   */
-  public static Splitter onPattern(String separatorPattern) {
-    return on(Pattern.compile(separatorPattern));
-  }
-
-  /**
-   * Returns a splitter that divides strings into pieces of the given length.
-   * For example, {@code Splitter.atEach(2).split("abcde")} returns an
-   * iterable containing {@code ["ab", "cd", "e"]}. The last piece can be
-   * smaller than {@code length} but will never be empty.
-   *
-   * @param length the desired length of pieces after splitting
-   * @return a splitter, with default settings, that can split into fixed sized
-   *     pieces
-   */
-  public static Splitter fixedLength(final int length) {
-    checkArgument(length > 0, "The length may not be less than 1");
-
-    return new Splitter(new Strategy() {
-      /*@Override*/ public SplittingIterator iterator(
-          final Splitter splitter, CharSequence toSplit) {
-        return new SplittingIterator(splitter, toSplit) {
-          @Override public int separatorStart(int start) {
-            int nextChunkStart = start + length;
-            return (nextChunkStart < toSplit.length() ? nextChunkStart : -1);
-          }
-
-          @Override public int separatorEnd(int separatorPosition) {
-            return separatorPosition;
-          }
-        };
-      }
-    });
-  }
-
-  /**
-   * Returns a splitter that behaves equivalently to {@code this} splitter, but
-   * automatically omits empty strings from the results. For example, {@code
-   * Splitter.on(',').omitEmptyStrings().split(",a,,,b,c,,")} returns an
-   * iterable containing only {@code ["a", "b", "c"]}.
-   *
-   * <p>If either {@code trimResults} option is also specified when creating a
-   * splitter, that splitter always trims results first before checking for
-   * emptiness. So, for example, {@code
-   * Splitter.on(':').omitEmptyStrings().trimResults().split(": : : ")} returns
-   * an empty iterable.
-   *
-   * <p>Note that it is ordinarily not possible for {@link #split(CharSequence)}
-   * to return an empty iterable, but when using this option, it can (if the
-   * input sequence consists of nothing but separators).
-   *
-   * @return a splitter with the desired configuration
-   */
-  public Splitter omitEmptyStrings() {
-    return new Splitter(strategy, true, trimmer);
-  }
-
-  /**
-   * Returns a splitter that behaves equivalently to {@code this} splitter, but
-   * automatically removes leading and trailing {@linkplain
-   * CharMatcher#WHITESPACE whitespace} from each returned substring; equivalent
-   * to {@code trimResults(CharMatcher.WHITESPACE)}. For example, {@code
-   * Splitter.on(',').trimResults().split(" a, b  ,c  ")} returns an iterable
-   * containing {@code ["a", "b", "c"]}.
-   *
-   * @return a splitter with the desired configuration
-   */
-  public Splitter trimResults() {
-    return trimResults(CharMatcher.WHITESPACE);
-  }
-
-  /**
-   * Returns a splitter that behaves equivalently to {@code this} splitter, but
-   * removes all leading or trailing characters matching the given {@code
-   * CharMatcher} from each returned substring. For example, {@code
-   * Splitter.on(',').trimResults(CharMatcher.is('_')).split("_a ,_b_ ,c__")}
-   * returns an iterable containing {@code ["a ", "b_ ", "c"]}.
-   *
-   * @param trimmer a {@link CharMatcher} that determines whether a character
-   *     should be removed from the beginning/end of a subsequence
-   * @return a splitter with the desired configuration
-   */
-  public Splitter trimResults(CharMatcher trimmer) {
-    checkNotNull(trimmer);
-    return new Splitter(strategy, omitEmptyStrings, trimmer);
-  }
-
-  /**
-   * Splits the {@link CharSequence} passed in parameter.
-   *
-   * @param sequence the sequence of characters to split
-   * @return an iteration over the segments split from the parameter.
-   */
-  public Iterable<String> split(final CharSequence sequence) {
-    checkNotNull(sequence);
-
-    return new Iterable<String>() {
-      /*@Override*/ public Iterator<String> iterator() {
-        return strategy.iterator(Splitter.this, sequence);
-      }
-    };
-  }
-
-  private interface Strategy {
-    Iterator<String> iterator(Splitter splitter, CharSequence toSplit);
-  }
-
-  private abstract static class SplittingIterator
-      extends AbstractIterator<String> {
-    final CharSequence toSplit;
-    final CharMatcher trimmer;
-    final boolean omitEmptyStrings;
-
-    /**
-     * Returns the first index in {@code toSplit} at or after {@code start}
-     * that contains the separator.
-     */
-    abstract int separatorStart(int start);
-
-    /**
-     * Returns the first index in {@code toSplit} after {@code
-     * separatorPosition} that does not contain a separator. This method is only
-     * invoked after a call to {@code separatorStart}.
-     */
-    abstract int separatorEnd(int separatorPosition);
-
-    int offset = 0;
-
-    protected SplittingIterator(Splitter splitter, CharSequence toSplit) {
-      this.trimmer = splitter.trimmer;
-      this.omitEmptyStrings = splitter.omitEmptyStrings;
-      this.toSplit = toSplit;
-    }
-
-    @Override protected String computeNext() {
-      while (offset != -1) {
-        int start = offset;
-        int end;
-
-        int separatorPosition = separatorStart(offset);
-        if (separatorPosition == -1) {
-          end = toSplit.length();
-          offset = -1;
-        } else {
-          end = separatorPosition;
-          offset = separatorEnd(separatorPosition);
-        }
-
-        while (start < end && trimmer.matches(toSplit.charAt(start))) {
-          start++;
-        }
-        while (end > start && trimmer.matches(toSplit.charAt(end - 1))) {
-          end--;
-        }
-
-        if (omitEmptyStrings && start == end) {
-          continue;
-        }
-
-        return toSplit.subSequence(start, end).toString();
-      }
-      return endOfData();
-    }
-  }
-
-  /*
-   * Copied from common.collect.AbstractIterator. TODO: un-fork once these
-   * packages have been combined into a single library.
-   */
-  private static abstract class AbstractIterator<T> implements Iterator<T> {
-    State state = State.NOT_READY;
-
-    enum State {
-      READY, NOT_READY, DONE, FAILED,
-    }
-
-    T next;
-
-    protected abstract T computeNext();
-
-    protected final T endOfData() {
-      state = State.DONE;
-      return null;
-    }
-
-    public final boolean hasNext() {
-      checkState(state != State.FAILED);
-      switch (state) {
-        case DONE:
-          return false;
-        case READY:
-          return true;
-        default:
-      }
-      return tryToComputeNext();
-    }
-
-    boolean tryToComputeNext() {
-      state = State.FAILED; // temporary pessimism
-      next = computeNext();
-      if (state != State.DONE) {
-        state = State.READY;
-        return true;
-      }
-      return false;
-    }
-
-    public final T next() {
-      if (!hasNext()) {
-        throw new NoSuchElementException();
-      }
-      state = State.NOT_READY;
-      return next;
-    }
-
-    /*@Override*/ public void remove() {
-      throw new UnsupportedOperationException();
-    }
-  }
-}
diff --git a/src/com/google/common/base/Supplier.java b/src/com/google/common/base/Supplier.java
deleted file mode 100644
index 3636015..0000000
--- a/src/com/google/common/base/Supplier.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.base;
-
-import com.google.common.annotations.GwtCompatible;
-
-/**
- * A class that can supply objects of a single type.  Semantically, this could
- * be a factory, generator, builder, closure, or something else entirely. No
- * guarantees are implied by this interface.
- *
- * @author Harry Heymann
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible
-public interface Supplier<T> {
-  /**
-   * Retrieves an instance of the appropriate type. The returned object may or
-   * may not be a new instance, depending on the implementation.
-   *
-   * @return an instance of the appropriate type
-   */
-  public T get();
-}
diff --git a/src/com/google/common/base/Suppliers.java b/src/com/google/common/base/Suppliers.java
deleted file mode 100644
index 135ad77..0000000
--- a/src/com/google/common/base/Suppliers.java
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.base;
-
-import com.google.common.annotations.VisibleForTesting;
-
-import java.io.Serializable;
-import java.util.concurrent.TimeUnit;
-
-import javax.annotation.Nullable;
-
-/**
- * Useful suppliers.
- *
- * <p>All methods return serializable suppliers as long as they're given
- * serializable parameters.
- *
- * @author Laurence Gonsalves
- * @author Harry Heymann
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-public final class Suppliers {
-  private Suppliers() {}
-
-  /**
-   * Returns a new supplier which is the composition of the provided function
-   * and supplier. In other words, the new supplier's value will be computed by
-   * retrieving the value from {@code first}, and then applying
-   * {@code function} to that value. Note that the resulting supplier will not
-   * call {@code first} or invoke {@code function} until it is called.
-   */
-  public static <F, T> Supplier<T> compose(
-      Function<? super F, T> function, Supplier<F> first) {
-    Preconditions.checkNotNull(function);
-    Preconditions.checkNotNull(first);
-    return new SupplierComposition<F, T>(function, first);
-  }
-
-  private static class SupplierComposition<F, T>
-      implements Supplier<T>, Serializable {
-    final Function<? super F, ? extends T> function;
-    final Supplier<? extends F> first;
-
-    SupplierComposition(Function<? super F, ? extends T> function,
-        Supplier<? extends F> first) {
-      this.function = function;
-      this.first = first;
-    }
-    public T get() {
-      return function.apply(first.get());
-    }
-    private static final long serialVersionUID = 0;
-  }
-
-  /**
-   * Returns a supplier which caches the instance retrieved during the first
-   * call to {@code get()} and returns that value on subsequent calls to
-   * {@code get()}. See:
-   * <a href="http://en.wikipedia.org/wiki/Memoization">memoization</a>
-   *
-   * <p>The returned supplier is thread-safe. The supplier's serialized form
-   * does not contain the cached value, which will be recalculated when {@code
-   * get()} is called on the reserialized instance.
-   */
-  public static <T> Supplier<T> memoize(Supplier<T> delegate) {
-    return new MemoizingSupplier<T>(Preconditions.checkNotNull(delegate));
-  }
-
-  @VisibleForTesting static class MemoizingSupplier<T>
-      implements Supplier<T>, Serializable {
-    final Supplier<T> delegate;
-    transient boolean initialized;
-    transient T value;
-
-    MemoizingSupplier(Supplier<T> delegate) {
-      this.delegate = delegate;
-    }
-
-    public synchronized T get() {
-      if (!initialized) {
-        value = delegate.get();
-        initialized = true;
-      }
-      return value;
-    }
-
-    private static final long serialVersionUID = 0;
-  }
-
-  /**
-   * Returns a supplier that caches the instance supplied by the delegate and
-   * removes the cached value after the specified time has passed. Subsequent
-   * calls to {@code get()} return the cached value if the expiration time has
-   * not passed. After the expiration time, a new value is retrieved, cached,
-   * and returned. See:
-   * <a href="http://en.wikipedia.org/wiki/Memoization">memoization</a>
-   *
-   * <p>The returned supplier is thread-safe. The supplier's serialized form
-   * does not contain the cached value, which will be recalculated when {@code
-   * get()} is called on the reserialized instance.
-   *
-   * @param duration the length of time after a value is created that it
-   *     should stop being returned by subsequent {@code get()} calls
-   * @param unit the unit that {@code duration} is expressed in
-   * @throws IllegalArgumentException if {@code duration} is not positive
-   * @since 2010.01.04 <b>tentative</b>
-   */
-  public static <T> Supplier<T> memoizeWithExpiration(
-      Supplier<T> delegate, long duration, TimeUnit unit) {
-    return new ExpiringMemoizingSupplier<T>(delegate, duration, unit);
-  }
-
-  @VisibleForTesting static class ExpiringMemoizingSupplier<T>
-      implements Supplier<T>, Serializable {
-    final Supplier<T> delegate;
-    final long durationNanos;
-    transient boolean initialized;
-    transient T value;
-    transient long expirationNanos;
-
-    ExpiringMemoizingSupplier(
-        Supplier<T> delegate, long duration, TimeUnit unit) {
-      this.delegate = Preconditions.checkNotNull(delegate);
-      this.durationNanos = unit.toNanos(duration);
-      Preconditions.checkArgument(duration > 0);
-    }
-
-    public synchronized T get() {
-      if (!initialized || System.nanoTime() - expirationNanos >= 0) {
-        value = delegate.get();
-        initialized = true;
-        expirationNanos = System.nanoTime() + durationNanos;
-      }
-      return value;
-    }
-
-    private static final long serialVersionUID = 0;
-  }
-
-  /**
-   * Returns a supplier that always supplies {@code instance}.
-   */
-  public static <T> Supplier<T> ofInstance(@Nullable T instance) {
-    return new SupplierOfInstance<T>(instance);
-  }
-
-  private static class SupplierOfInstance<T>
-      implements Supplier<T>, Serializable {
-    final T instance;
-
-    SupplierOfInstance(T instance) {
-      this.instance = instance;
-    }
-    public T get() {
-      return instance;
-    }
-    private static final long serialVersionUID = 0;
-  }
-
-  /**
-   * Returns a supplier whose {@code get()} method synchronizes on
-   * {@code delegate} before calling it, making it thread-safe.
-   */
-  public static <T> Supplier<T> synchronizedSupplier(Supplier<T> delegate) {
-    return new ThreadSafeSupplier<T>(Preconditions.checkNotNull(delegate));
-  }
-
-  private static class ThreadSafeSupplier<T>
-      implements Supplier<T>, Serializable {
-    final Supplier<T> delegate;
-
-    ThreadSafeSupplier(Supplier<T> delegate) {
-      this.delegate = delegate;
-    }
-    public T get() {
-      synchronized (delegate) {
-        return delegate.get();
-      }
-    }
-    private static final long serialVersionUID = 0;
-  }
-}
diff --git a/src/com/google/common/base/Throwables.java b/src/com/google/common/base/Throwables.java
deleted file mode 100644
index b30e76e..0000000
--- a/src/com/google/common/base/Throwables.java
+++ /dev/null
@@ -1,242 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.base;
-
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Collections;
-
-/**
- * Static utility methods pertaining to instances of {@link Throwable}.
- *
- * @author Kevin Bourrillion
- * @author Ben Yu
- * @since 2009.09.15 <b>tentative</b>
- */
-public final class Throwables {
-  private Throwables() {}
-
-  /**
-   * Propagates {@code throwable} exactly as-is, if and only if it is an
-   * instance of {@code declaredType}.  Example usage:
-   * <pre>
-   *   try {
-   *     someMethodThatCouldThrowAnything();
-   *   } catch (IKnowWhatToDoWithThisException e) {
-   *     handle(e);
-   *   } catch (Throwable t) {
-   *     Throwables.propagateIfInstanceOf(t, IOException.class);
-   *     Throwables.propagateIfInstanceOf(t, SQLException.class);
-   *     throw Throwables.propagate(t);
-   *   }
-   * </pre>
-   */
-  public static <X extends Throwable> void propagateIfInstanceOf(
-      Throwable throwable, Class<X> declaredType) throws X {
-    if (declaredType.isInstance(throwable)) {
-      throw declaredType.cast(throwable);
-    }
-  }
-
-  /**
-   * Propagates {@code throwable} exactly as-is, if and only if it is an
-   * instance of {@link RuntimeException} or {@link Error}.  Example usage:
-   * <pre>
-   *   try {
-   *     someMethodThatCouldThrowAnything();
-   *   } catch (IKnowWhatToDoWithThisException e) {
-   *     handle(e);
-   *   } catch (Throwable t) {
-   *     Throwables.propagateIfPossible(t);
-   *     throw new RuntimeException("unexpected", t);
-   *   }
-   * </pre>
-   */
-  public static void propagateIfPossible(Throwable throwable) {
-    propagateIfInstanceOf(throwable, Error.class);
-    propagateIfInstanceOf(throwable, RuntimeException.class);
-  }
-
-  /**
-   * Propagates {@code throwable} exactly as-is, if and only if it is an
-   * instance of {@link RuntimeException}, {@link Error}, or
-   * {@code declaredType}. Example usage:
-   * <pre>
-   *   try {
-   *     someMethodThatCouldThrowAnything();
-   *   } catch (IKnowWhatToDoWithThisException e) {
-   *     handle(e);
-   *   } catch (Throwable t) {
-   *     Throwables.propagateIfPossible(t, OtherException.class);
-   *     throw new RuntimeException("unexpected", t);
-   *   }
-   * </pre>
-   *
-   * @param throwable the Throwable to possibly propagate
-   * @param declaredType the single checked exception type declared by the
-   *     calling method
-   */
-  public static <X extends Throwable> void propagateIfPossible(
-      Throwable throwable, Class<X> declaredType) throws X {
-    propagateIfInstanceOf(throwable, declaredType);
-    propagateIfPossible(throwable);
-  }
-
-  /**
-   * Propagates {@code throwable} exactly as-is, if and only if it is an
-   * instance of {@link RuntimeException}, {@link Error}, {@code aDeclaredType},
-   * or {@code anotherDeclaredType}.  In the unlikely case that you have three
-   * or more declared checked exception types, you can handle them all by
-   * invoking these methods repeatedly. See usage example in
-   * {@link #propagateIfPossible(Throwable, Class)}.
-   *
-   * @param throwable the Throwable to possibly propagate
-   * @param aDeclaredType any checked exception type declared by the calling
-   *     method
-   * @param anotherDeclaredType any other checked exception type declared by the
-   *     calling method
-   */
-  public static <X1 extends Throwable, X2 extends Throwable> void
-      propagateIfPossible(Throwable throwable, Class<X1> aDeclaredType,
-          Class<X2> anotherDeclaredType) throws X1, X2 {
-    propagateIfInstanceOf(throwable, aDeclaredType);
-    propagateIfPossible(throwable, anotherDeclaredType);
-  }
-
-  /**
-   * Propagates {@code throwable} as-is if it is an instance of
-   * {@link RuntimeException} or {@link Error}, or else as a last resort, wraps
-   * it in a {@code RuntimeException} then propagates.
-   * <p>
-   * This method always throws an exception. The {@code RuntimeException} return
-   * type is only for client code to make Java type system happy in case a
-   * return value is required by the enclosing method. Example usage:
-   * <pre>
-   *   T doSomething() {
-   *     try {
-   *       return someMethodThatCouldThrowAnything();
-   *     } catch (IKnowWhatToDoWithThisException e) {
-   *       return handle(e);
-   *     } catch (Throwable t) {
-   *       throw Throwables.propagate(t);
-   *     }
-   *   }
-   * </pre>
-   *
-   * @param throwable the Throwable to propagate
-   * @return nothing will ever be returned
-   */
-  public static RuntimeException propagate(Throwable throwable) {
-    propagateIfPossible(throwable);
-    throw new RuntimeException(throwable);
-  }
-
-  /**
-   * Returns the innermost cause of {@code throwable}. The first throwable in a
-   * chain provides context from when the error or exception was initially
-   * detected. Example usage:
-   * <pre>
-   *   assertEquals("Unable to assign a customer id",
-   *       Throwables.getRootCause(e).getMessage());
-   * </pre>
-   */
-  public static Throwable getRootCause(Throwable throwable) {
-    Throwable cause;
-    while ((cause = throwable.getCause()) != null) {
-      throwable = cause;
-    }
-    return throwable;
-  }
-
-  /**
-   * Gets a {@code Throwable} cause chain as a list.  The first entry in the
-   * list will be {@code throwable} followed by its cause hierarchy.  Note
-   * that this is a snapshot of the cause chain and will not reflect
-   * any subsequent changes to the cause chain.
-   *
-   * <p>Here's an example of how it can be used to find specific types
-   * of exceptions in the cause chain:
-   *
-   * <pre>
-   * Iterables.filter(Throwables.getCausalChain(e), IOException.class));
-   * </pre>
-   *
-   * @param throwable the non-null {@code Throwable} to extract causes from
-   * @return an unmodifiable list containing the cause chain starting with
-   *     {@code throwable}
-   */
-  public static List<Throwable> getCausalChain(Throwable throwable) {
-    Preconditions.checkNotNull(throwable);
-    List<Throwable> causes = new ArrayList<Throwable>(4);
-    while (throwable != null) {
-      causes.add(throwable);
-      throwable = throwable.getCause();
-    }
-    return Collections.unmodifiableList(causes);
-  }
-
-  /**
-   * Returns a string containing the result of
-   * {@link Throwable#toString() toString()}, followed by the full, recursive
-   * stack trace of {@code throwable}. Note that you probably should not be
-   * parsing the resulting string; if you need programmatic access to the stack
-   * frames, you can call {@link Throwable#getStackTrace()}.
-   */
-  public static String getStackTraceAsString(Throwable throwable) {
-    StringWriter stringWriter = new StringWriter();
-    throwable.printStackTrace(new PrintWriter(stringWriter));
-    return stringWriter.toString();
-  }
-
-  /**
-   * Rethrows the cause exception of a given throwable, discarding the original
-   * throwable. Optionally, the stack frames of the cause and the outer
-   * exception are combined and the stack trace of the cause is set to this
-   * combined trace. If there is no cause the original exception is rethrown
-   * unchanged in all cases.
-   *
-   * @param exception the exception from which to extract the cause
-   * @param combineStackTraces if true the stack trace of the cause will be
-   *     replaced by the concatenation of the trace from the exception and the
-   *     trace from the cause.
-   */
-  public static Exception throwCause(Exception exception, boolean combineStackTraces)
-      throws Exception {
-    Throwable cause = exception.getCause();
-    if (cause == null) {
-      throw exception;
-    }
-    if (combineStackTraces) {
-      StackTraceElement[] causeTrace = cause.getStackTrace();
-      StackTraceElement[] outerTrace = exception.getStackTrace();
-      StackTraceElement[] combined = new StackTraceElement[causeTrace.length + outerTrace.length];
-      System.arraycopy(causeTrace, 0, combined, 0, causeTrace.length);
-      System.arraycopy(outerTrace, 0, combined, causeTrace.length, outerTrace.length);
-      cause.setStackTrace(combined);
-    }
-    if (cause instanceof Exception) {
-      throw (Exception) cause;
-    }
-    if (cause instanceof Error) {
-      throw (Error) cause;
-    }
-    // The cause is a weird kind of Throwable, so throw the outer exception
-    throw exception;
-  }
-}
diff --git a/src/com/google/common/base/internal/Finalizer.java b/src/com/google/common/base/internal/Finalizer.java
deleted file mode 100644
index c517589..0000000
--- a/src/com/google/common/base/internal/Finalizer.java
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.base.internal;
-
-import java.lang.ref.PhantomReference;
-import java.lang.ref.Reference;
-import java.lang.ref.ReferenceQueue;
-import java.lang.ref.WeakReference;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * Thread that finalizes referents. All references should implement
- * {@code com.google.common.base.FinalizableReference}.
- *
- * <p>While this class is public, we consider it to be *internal* and not part
- * of our published API. It is public so we can access it reflectively across
- * class loaders in secure environments.
- *
- * <p>This class can't depend on other Google Collections code. If we were
- * to load this class in the same class loader as the rest of
- * Google Collections, this thread would keep an indirect strong reference
- * to the class loader and prevent it from being garbage collected. This
- * poses a problem for environments where you want to throw away the class
- * loader. For example, dynamically reloading a web application or unloading
- * an OSGi bundle.
- *
- * <p>{@code com.google.common.base.FinalizableReferenceQueue} loads this class
- * in its own class loader. That way, this class doesn't prevent the main
- * class loader from getting garbage collected, and this class can detect when
- * the main class loader has been garbage collected and stop itself.
- */
-public class Finalizer extends Thread {
-
-  private static final Logger logger
-      = Logger.getLogger(Finalizer.class.getName());
-
-  /** Name of FinalizableReference.class. */
-  private static final String FINALIZABLE_REFERENCE
-      = "com.google.common.base.FinalizableReference";
-
-  /**
-   * Starts the Finalizer thread. FinalizableReferenceQueue calls this method
-   * reflectively.
-   *
-   * @param finalizableReferenceClass FinalizableReference.class
-   * @param frq reference to instance of FinalizableReferenceQueue that started
-   *  this thread
-   * @return ReferenceQueue which Finalizer will poll
-   */
-  public static ReferenceQueue<Object> startFinalizer(
-      Class<?> finalizableReferenceClass, Object frq) {
-    /*
-     * We use FinalizableReference.class for two things:
-     *
-     * 1) To invoke FinalizableReference.finalizeReferent()
-     *
-     * 2) To detect when FinalizableReference's class loader has to be garbage
-     * collected, at which point, Finalizer can stop running
-     */
-    if (!finalizableReferenceClass.getName().equals(FINALIZABLE_REFERENCE)) {
-      throw new IllegalArgumentException(
-          "Expected " + FINALIZABLE_REFERENCE + ".");
-    }
-
-    Finalizer finalizer = new Finalizer(finalizableReferenceClass, frq);
-    finalizer.start();
-    return finalizer.queue;
-  }
-
-  private final WeakReference<Class<?>> finalizableReferenceClassReference;
-  private final PhantomReference<Object> frqReference;
-  private final ReferenceQueue<Object> queue = new ReferenceQueue<Object>();
-
-  private static final Field inheritableThreadLocals
-      = getInheritableThreadLocalsField();
-
-  /** Constructs a new finalizer thread. */
-  private Finalizer(Class<?> finalizableReferenceClass, Object frq) {
-    super(Finalizer.class.getName());
-
-    this.finalizableReferenceClassReference
-        = new WeakReference<Class<?>>(finalizableReferenceClass);
-
-    // Keep track of the FRQ that started us so we know when to stop.
-    this.frqReference = new PhantomReference<Object>(frq, queue);
-
-    setDaemon(true);
-
-    try {
-      if (inheritableThreadLocals != null) {
-        inheritableThreadLocals.set(this, null);
-      }
-    } catch (Throwable t) {
-      logger.log(Level.INFO, "Failed to clear thread local values inherited"
-          + " by reference finalizer thread.", t);
-    }
-
-    // TODO: Priority?
-  }
-
-  /**
-   * Loops continuously, pulling references off the queue and cleaning them up.
-   */
-  @SuppressWarnings("InfiniteLoopStatement")
-  @Override
-  public void run() {
-    try {
-      while (true) {
-        try {
-          cleanUp(queue.remove());
-        } catch (InterruptedException e) { /* ignore */ }
-      }
-    } catch (ShutDown shutDown) { /* ignore */ }
-  }
-
-  /**
-   * Cleans up a single reference. Catches and logs all throwables.
-   */
-  private void cleanUp(Reference<?> reference) throws ShutDown {
-    Method finalizeReferentMethod = getFinalizeReferentMethod();
-    do {
-      /*
-       * This is for the benefit of phantom references. Weak and soft
-       * references will have already been cleared by this point.
-       */
-      reference.clear();
-
-      if (reference == frqReference) {
-        /*
-         * The client no longer has a reference to the
-         * FinalizableReferenceQueue. We can stop.
-         */
-        throw new ShutDown();
-      }
-
-      try {
-        finalizeReferentMethod.invoke(reference);
-      } catch (Throwable t) {
-        logger.log(Level.SEVERE, "Error cleaning up after reference.", t);
-      }
-
-      /*
-       * Loop as long as we have references available so as not to waste
-       * CPU looking up the Method over and over again.
-       */
-    } while ((reference = queue.poll()) != null);
-  }
-
-  /**
-   * Looks up FinalizableReference.finalizeReferent() method.
-   */
-  private Method getFinalizeReferentMethod() throws ShutDown {
-    Class<?> finalizableReferenceClass
-        = finalizableReferenceClassReference.get();
-    if (finalizableReferenceClass == null) {
-      /*
-       * FinalizableReference's class loader was reclaimed. While there's a
-       * chance that other finalizable references could be enqueued
-       * subsequently (at which point the class loader would be resurrected
-       * by virtue of us having a strong reference to it), we should pretty
-       * much just shut down and make sure we don't keep it alive any longer
-       * than necessary.
-       */
-      throw new ShutDown();
-    }
-    try {
-      return finalizableReferenceClass.getMethod("finalizeReferent");
-    } catch (NoSuchMethodException e) {
-      throw new AssertionError(e);
-    }
-  }
-
-  public static Field getInheritableThreadLocalsField() {
-    try {
-      Field inheritableThreadLocals
-          = Thread.class.getDeclaredField("inheritableThreadLocals");
-      inheritableThreadLocals.setAccessible(true);
-      return inheritableThreadLocals;
-    } catch (Throwable t) {
-      logger.log(Level.INFO, "Couldn't access Thread.inheritableThreadLocals."
-          + " Reference finalizer threads will inherit thread local"
-          + " values.");
-      return null;
-    }
-  }
-
-  /** Indicates that it's time to shut down the Finalizer. */
-  @SuppressWarnings("serial") // Never serialized or thrown out of this class.
-  private static class ShutDown extends Exception { }
-}
diff --git a/src/com/google/common/base/package-info.java b/src/com/google/common/base/package-info.java
deleted file mode 100644
index 9cfa5c7..0000000
--- a/src/com/google/common/base/package-info.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-/**
- * Miscellaneous common util classes and annotations.
- */
-package com.google.common.base;
diff --git a/src/com/google/common/collect/AbstractBiMap.java b/src/com/google/common/collect/AbstractBiMap.java
deleted file mode 100644
index 9c0170f..0000000
--- a/src/com/google/common/collect/AbstractBiMap.java
+++ /dev/null
@@ -1,394 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-import com.google.common.base.Objects;
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkState;
-
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.io.Serializable;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-
-import javax.annotation.Nullable;
-
-/**
- * A general-purpose bimap implementation using any two backing {@code Map}
- * instances.
- *
- * <p>Note that this class contains {@code equals()} calls that keep it from
- * supporting {@code IdentityHashMap} backing maps.
- *
- * @author Kevin Bourrillion
- * @author Mike Bostock
- */
-@GwtCompatible
-abstract class AbstractBiMap<K, V> extends ForwardingMap<K, V>
-    implements BiMap<K, V>, Serializable {
-
-  private transient Map<K, V> delegate;
-  private transient AbstractBiMap<V, K> inverse;
-
-  /** Package-private constructor for creating a map-backed bimap. */
-  AbstractBiMap(Map<K, V> forward, Map<V, K> backward) {
-    setDelegates(forward, backward);
-  }
-
-  /** Private constructor for inverse bimap. */
-  private AbstractBiMap(Map<K, V> backward, AbstractBiMap<V, K> forward) {
-    delegate = backward;
-    inverse = forward;
-  }
-
-  @Override protected Map<K, V> delegate() {
-    return delegate;
-  }
-
-  /**
-   * Specifies the delegate maps going in each direction. Called by the
-   * constructor and by subclasses during deserialization.
-   */
-  void setDelegates(Map<K, V> forward, Map<V, K> backward) {
-    checkState(delegate == null);
-    checkState(inverse == null);
-    checkArgument(forward.isEmpty());
-    checkArgument(backward.isEmpty());
-    checkArgument(forward != backward);
-    delegate = forward;
-    inverse = new Inverse<V, K>(backward, this);
-  }
-
-  void setInverse(AbstractBiMap<V, K> inverse) {
-    this.inverse = inverse;
-  }
-
-  // Query Operations (optimizations)
-
-  @Override public boolean containsValue(Object value) {
-    return inverse.containsKey(value);
-  }
-
-  // Modification Operations
-
-  @Override public V put(K key, V value) {
-    return putInBothMaps(key, value, false);
-  }
-
-  public V forcePut(K key, V value) {
-    return putInBothMaps(key, value, true);
-  }
-
-  private V putInBothMaps(@Nullable K key, @Nullable V value, boolean force) {
-    boolean containedKey = containsKey(key);
-    if (containedKey && Objects.equal(value, get(key))) {
-      return value;
-    }
-    if (force) {
-      inverse().remove(value);
-    } else {
-      checkArgument(!containsValue(value), "value already present: %s", value);
-    }
-    V oldValue = delegate.put(key, value);
-    updateInverseMap(key, containedKey, oldValue, value);
-    return oldValue;
-  }
-
-  private void updateInverseMap(
-      K key, boolean containedKey, V oldValue, V newValue) {
-    if (containedKey) {
-      removeFromInverseMap(oldValue);
-    }
-    inverse.delegate.put(newValue, key);
-  }
-
-  @Override public V remove(Object key) {
-    return containsKey(key) ? removeFromBothMaps(key) : null;
-  }
-
-  private V removeFromBothMaps(Object key) {
-    V oldValue = delegate.remove(key);
-    removeFromInverseMap(oldValue);
-    return oldValue;
-  }
-
-  private void removeFromInverseMap(V oldValue) {
-    inverse.delegate.remove(oldValue);
-  }
-
-  // Bulk Operations
-
-  @Override public void putAll(Map<? extends K, ? extends V> map) {
-    for (Entry<? extends K, ? extends V> entry : map.entrySet()) {
-      put(entry.getKey(), entry.getValue());
-    }
-  }
-
-  @Override public void clear() {
-    delegate.clear();
-    inverse.delegate.clear();
-  }
-
-  // Views
-
-  public BiMap<V, K> inverse() {
-    return inverse;
-  }
-
-  private transient Set<K> keySet;
-
-  @Override public Set<K> keySet() {
-    Set<K> result = keySet;
-    return (result == null) ? keySet = new KeySet() : result;
-  }
-
-  private class KeySet extends ForwardingSet<K> {
-    @Override protected Set<K> delegate() {
-      return delegate.keySet();
-    }
-
-    @Override public void clear() {
-      AbstractBiMap.this.clear();
-    }
-
-    @Override public boolean remove(Object key) {
-      if (!contains(key)) {
-        return false;
-      }
-      removeFromBothMaps(key);
-      return true;
-    }
-
-    @Override public boolean removeAll(Collection<?> keysToRemove) {
-      return Iterators.removeAll(iterator(), keysToRemove);
-    }
-
-    @Override public boolean retainAll(Collection<?> keysToRetain) {
-      return Iterators.retainAll(iterator(), keysToRetain);
-    }
-
-    @Override public Iterator<K> iterator() {
-      final Iterator<Entry<K, V>> iterator = delegate.entrySet().iterator();
-      return new Iterator<K>() {
-        Entry<K, V> entry;
-
-        public boolean hasNext() {
-          return iterator.hasNext();
-        }
-        public K next() {
-          entry = iterator.next();
-          return entry.getKey();
-        }
-        public void remove() {
-          checkState(entry != null);
-          V value = entry.getValue();
-          iterator.remove();
-          removeFromInverseMap(value);
-        }
-      };
-    }
-  }
-
-  private transient Set<V> valueSet;
-
-  @Override public Set<V> values() {
-    /*
-     * We can almost reuse the inverse's keySet, except we have to fix the
-     * iteration order so that it is consistent with the forward map.
-     */
-    Set<V> result = valueSet;
-    return (result == null) ? valueSet = new ValueSet() : result;
-  }
-
-  private class ValueSet extends ForwardingSet<V> {
-    final Set<V> valuesDelegate = inverse.keySet();
-
-    @Override protected Set<V> delegate() {
-      return valuesDelegate;
-    }
-
-    @Override public Iterator<V> iterator() {
-      final Iterator<V> iterator = delegate.values().iterator();
-      return new Iterator<V>() {
-        V valueToRemove;
-
-        /*@Override*/ public boolean hasNext() {
-          return iterator.hasNext();
-        }
-
-        /*@Override*/ public V next() {
-          return valueToRemove = iterator.next();
-        }
-
-        /*@Override*/ public void remove() {
-          iterator.remove();
-          removeFromInverseMap(valueToRemove);
-        }
-      };
-    }
-
-    @Override public Object[] toArray() {
-      return ObjectArrays.toArrayImpl(this);
-    }
-
-    @Override public <T> T[] toArray(T[] array) {
-      return ObjectArrays.toArrayImpl(this, array);
-    }
-
-    @Override public String toString() {
-      return Iterators.toString(iterator());
-    }
-  }
-
-  private transient Set<Entry<K, V>> entrySet;
-
-  @Override public Set<Entry<K, V>> entrySet() {
-    Set<Entry<K, V>> result = entrySet;
-    return (result == null) ? entrySet = new EntrySet() : result;
-  }
-
-  private class EntrySet extends ForwardingSet<Entry<K, V>> {
-    final Set<Entry<K, V>> esDelegate = delegate.entrySet();
-
-    @Override protected Set<Entry<K, V>> delegate() {
-      return esDelegate;
-    }
-
-    @Override public void clear() {
-      AbstractBiMap.this.clear();
-    }
-
-    @Override public boolean remove(Object object) {
-      if (!esDelegate.remove(object)) {
-        return false;
-      }
-      Entry<?, ?> entry = (Entry<?, ?>) object;
-      inverse.delegate.remove(entry.getValue());
-      return true;
-    }
-
-    @Override public Iterator<Entry<K, V>> iterator() {
-      final Iterator<Entry<K, V>> iterator = esDelegate.iterator();
-      return new Iterator<Entry<K, V>>() {
-        Entry<K, V> entry;
-
-        /*@Override*/ public boolean hasNext() {
-          return iterator.hasNext();
-        }
-
-        /*@Override*/ public Entry<K, V> next() {
-          entry = iterator.next();
-          final Entry<K, V> finalEntry = entry;
-
-          return new ForwardingMapEntry<K, V>() {
-            @Override protected Entry<K, V> delegate() {
-              return finalEntry;
-            }
-
-            @Override public V setValue(V value) {
-              // Preconditions keep the map and inverse consistent.
-              checkState(contains(this), "entry no longer in map");
-              // similar to putInBothMaps, but set via entry
-              if (Objects.equal(value, getValue())) {
-                return value;
-              }
-              checkArgument(!containsValue(value),
-                  "value already present: %s", value);
-              V oldValue = finalEntry.setValue(value);
-              checkState(Objects.equal(value, get(getKey())),
-                  "entry no longer in map");
-              updateInverseMap(getKey(), true, oldValue, value);
-              return oldValue;
-            }
-          };
-        }
-
-        /*@Override*/ public void remove() {
-          checkState(entry != null);
-          V value = entry.getValue();
-          iterator.remove();
-          removeFromInverseMap(value);
-        }
-      };
-    }
-
-    // See java.util.Collections.CheckedEntrySet for details on attacks.
-
-    @Override public Object[] toArray() {
-      return ObjectArrays.toArrayImpl(this);
-    }
-    @Override public <T> T[] toArray(T[] array) {
-      return ObjectArrays.toArrayImpl(this, array);
-    }
-    @Override public boolean contains(Object o) {
-      return Maps.containsEntryImpl(delegate(), o);
-    }
-    @Override public boolean containsAll(Collection<?> c) {
-      return Collections2.containsAll(this, c);
-    }
-    @Override public boolean removeAll(Collection<?> c) {
-      return Iterators.removeAll(iterator(), c);
-    }
-    @Override public boolean retainAll(Collection<?> c) {
-      return Iterators.retainAll(iterator(), c);
-    }
-  }
-
-  /** The inverse of any other {@code AbstractBiMap} subclass. */
-  private static class Inverse<K, V> extends AbstractBiMap<K, V> {
-    private Inverse(Map<K, V> backward, AbstractBiMap<V, K> forward) {
-      super(backward, forward);
-    }
-
-    /*
-     * Serialization stores the forward bimap, the inverse of this inverse.
-     * Deserialization calls inverse() on the forward bimap and returns that
-     * inverse.
-     *
-     * If a bimap and its inverse are serialized together, the deserialized
-     * instances have inverse() methods that return the other.
-     */
-
-    /**
-     * @serialData the forward bimap
-     */
-    private void writeObject(ObjectOutputStream stream) throws IOException {
-      stream.defaultWriteObject();
-      stream.writeObject(inverse());
-    }
-
-    @SuppressWarnings("unchecked") // reading data stored by writeObject
-    private void readObject(ObjectInputStream stream)
-        throws IOException, ClassNotFoundException {
-      stream.defaultReadObject();
-      setInverse((AbstractBiMap<V, K>) stream.readObject());
-    }
-
-    Object readResolve() {
-      return inverse().inverse();
-    }
-
-    private static final long serialVersionUID = 0;
-  }
-
-  private static final long serialVersionUID = 0;
-}
diff --git a/src/com/google/common/collect/AbstractIterator.java b/src/com/google/common/collect/AbstractIterator.java
deleted file mode 100644
index 11704b2..0000000
--- a/src/com/google/common/collect/AbstractIterator.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-import static com.google.common.base.Preconditions.checkState;
-
-import java.util.NoSuchElementException;
-
-/**
- * This class provides a skeletal implementation of the {@code Iterator}
- * interface, to make this interface easier to implement for certain types of
- * data sources.
- *
- * <p>{@code Iterator} requires its implementations to support querying the
- * end-of-data status without changing the iterator's state, using the {@link
- * #hasNext} method. But many data sources, such as {@link
- * java.io.Reader#read()}), do not expose this information; the only way to
- * discover whether there is any data left is by trying to retrieve it. These
- * types of data sources are ordinarily difficult to write iterators for. But
- * using this class, one must implement only the {@link #computeNext} method,
- * and invoke the {@link #endOfData} method when appropriate.
- *
- * <p>Another example is an iterator that skips over null elements in a backing
- * iterator. This could be implemented as: <pre>   {@code
- *
- *   public static Iterator<String> skipNulls(final Iterator<String> in) {
- *     return new AbstractIterator<String>() {
- *       protected String computeNext() {
- *         while (in.hasNext()) {
- *           String s = in.next();
- *           if (s != null) {
- *             return s;
- *           }
- *         }
- *         return endOfData();
- *       }
- *     };
- *   }}</pre>
- *
- * This class supports iterators that include null elements.
- *
- * @author Kevin Bourrillion
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible
-public abstract class AbstractIterator<T> extends UnmodifiableIterator<T> {
-  private State state = State.NOT_READY;
-
-  private enum State {
-    /** We have computed the next element and haven't returned it yet. */
-    READY,
-
-    /** We haven't yet computed or have already returned the element. */
-    NOT_READY,
-
-    /** We have reached the end of the data and are finished. */
-    DONE,
-
-    /** We've suffered an exception and are kaput. */
-    FAILED,
-  }
-
-  private T next;
-
-  /**
-   * Returns the next element. <b>Note:</b> the implementation must call {@link
-   * #endOfData()} when there are no elements left in the iteration. Failure to
-   * do so could result in an infinite loop.
-   *
-   * <p>The initial invocation of {@link #hasNext()} or {@link #next()} calls
-   * this method, as does the first invocation of {@code hasNext} or {@code
-   * next} following each successful call to {@code next}. Once the
-   * implementation either invokes {@code endOfData} or throws an exception,
-   * {@code computeNext} is guaranteed to never be called again.
-   *
-   * <p>If this method throws an exception, it will propagate outward to the
-   * {@code hasNext} or {@code next} invocation that invoked this method. Any
-   * further attempts to use the iterator will result in an {@link
-   * IllegalStateException}.
-   *
-   * <p>The implementation of this method may not invoke the {@code hasNext},
-   * {@code next}, or {@link #peek()} methods on this instance; if it does, an
-   * {@code IllegalStateException} will result.
-   *
-   * @return the next element if there was one. If {@code endOfData} was called
-   *     during execution, the return value will be ignored.
-   * @throws RuntimeException if any unrecoverable error happens. This exception
-   *     will propagate outward to the {@code hasNext()}, {@code next()}, or
-   *     {@code peek()} invocation that invoked this method. Any further
-   *     attempts to use the iterator will result in an
-   *     {@link IllegalStateException}.
-   */
-  protected abstract T computeNext();
-
-  /**
-   * Implementations of {@code computeNext} <b>must</b> invoke this method when
-   * there are no elements left in the iteration.
-   *
-   * @return {@code null}; a convenience so your {@link #computeNext}
-   *     implementation can use the simple statement {@code return endOfData();}
-   */
-  protected final T endOfData() {
-    state = State.DONE;
-    return null;
-  }
-
-  public final boolean hasNext() {
-    checkState(state != State.FAILED);
-    switch (state) {
-      case DONE:
-        return false;
-      case READY:
-        return true;
-      default:
-    }
-    return tryToComputeNext();
-  }
-
-  private boolean tryToComputeNext() {
-    state = State.FAILED; // temporary pessimism
-    next = computeNext();
-    if (state != State.DONE) {
-      state = State.READY;
-      return true;
-    }
-    return false;
-  }
-
-  public final T next() {
-    if (!hasNext()) {
-      throw new NoSuchElementException();
-    }
-    state = State.NOT_READY;
-    return next;
-  }
-
-  /**
-   * Returns the next element in the iteration without advancing the iteration,
-   * according to the contract of {@link PeekingIterator#peek()}.
-   *
-   * <p>Implementations of {@code AbstractIterator} that wish to expose this
-   * functionality should implement {@code PeekingIterator}.
-   */
-  public final T peek() {
-    if (!hasNext()) {
-      throw new NoSuchElementException();
-    }
-    return next;
-  }
-}
diff --git a/src/com/google/common/collect/AbstractListMultimap.java b/src/com/google/common/collect/AbstractListMultimap.java
deleted file mode 100644
index c46eb91..0000000
--- a/src/com/google/common/collect/AbstractListMultimap.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-import javax.annotation.Nullable;
-
-/**
- * Basic implementation of the {@link ListMultimap} interface. It's a wrapper
- * around {@link AbstractMultimap} that converts the returned collections into
- * {@code Lists}. The {@link #createCollection} method must return a {@code
- * List}.
- *
- * @author Jared Levy
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible
-abstract class AbstractListMultimap<K, V>
-    extends AbstractMultimap<K, V> implements ListMultimap<K, V> {
-  /**
-   * Creates a new multimap that uses the provided map.
-   *
-   * @param map place to store the mapping from each key to its corresponding
-   *     values
-   */
-  protected AbstractListMultimap(Map<K, Collection<V>> map) {
-    super(map);
-  }
-
-  @Override abstract List<V> createCollection();
-
-  @Override public List<V> get(@Nullable K key) {
-    return (List<V>) super.get(key);
-  }
-
-  @Override public List<V> removeAll(@Nullable Object key) {
-    return (List<V>) super.removeAll(key);
-  }
-
-  @Override public List<V> replaceValues(
-      @Nullable K key, Iterable<? extends V> values) {
-    return (List<V>) super.replaceValues(key, values);
-  }
-
-  /**
-   * Stores a key-value pair in the multimap.
-   *
-   * @param key key to store in the multimap
-   * @param value value to store in the multimap
-   * @return {@code true} always
-   */
-  @Override public boolean put(@Nullable K key, @Nullable V value) {
-    return super.put(key, value);
-  }
-
-  /**
-   * Compares the specified object to this multimap for equality.
-   *
-   * <p>Two {@code ListMultimap} instances are equal if, for each key, they
-   * contain the same values in the same order. If the value orderings disagree,
-   * the multimaps will not be considered equal.
-   */
-  @Override public boolean equals(@Nullable Object object) {
-    return super.equals(object);
-  }
-  
-  private static final long serialVersionUID = 6588350623831699109L;  
-}
diff --git a/src/com/google/common/collect/AbstractMapBasedMultiset.java b/src/com/google/common/collect/AbstractMapBasedMultiset.java
deleted file mode 100644
index d736868..0000000
--- a/src/com/google/common/collect/AbstractMapBasedMultiset.java
+++ /dev/null
@@ -1,414 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Preconditions.checkState;
-import static com.google.common.collect.Multisets.checkNonnegative;
-
-import java.io.InvalidObjectException;
-import java.io.ObjectStreamException;
-import java.io.Serializable;
-import java.util.AbstractSet;
-import java.util.Collection;
-import java.util.ConcurrentModificationException;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.atomic.AtomicInteger;
-
-import javax.annotation.Nullable;
-
-/**
- * Basic implementation of {@code Multiset<E>} backed by an instance of {@code
- * Map<E, AtomicInteger>}.
- *
- * <p>For serialization to work, the subclass must specify explicit {@code
- * readObject} and {@code writeObject} methods.
- *
- * @author Kevin Bourrillion
- */
-@GwtCompatible
-abstract class AbstractMapBasedMultiset<E> extends AbstractMultiset<E>
-    implements Serializable {
-
-  // TODO: Replace AtomicInteger with a to-be-written IntegerHolder class for
-  // better performance.
-  private transient Map<E, AtomicInteger> backingMap;
-
-  /*
-   * Cache the size for efficiency. Using a long lets us avoid the need for
-   * overflow checking and ensures that size() will function correctly even if
-   * the multiset had once been larger than Integer.MAX_VALUE.
-   */
-  private transient long size;
-
-  /** Standard constructor. */
-  protected AbstractMapBasedMultiset(Map<E, AtomicInteger> backingMap) {
-    this.backingMap = checkNotNull(backingMap);
-    this.size = super.size();
-  }
-
-  Map<E, AtomicInteger> backingMap() {
-    return backingMap;
-  }
-
-  /** Used during deserialization only. The backing map must be empty. */
-  void setBackingMap(Map<E, AtomicInteger> backingMap) {
-    this.backingMap = backingMap;
-  }
-
-  // Required Implementations
-
-  private transient EntrySet entrySet;
-
-  /**
-   * {@inheritDoc}
-   *
-   * <p>Invoking {@link Multiset.Entry#getCount} on an entry in the returned
-   * set always returns the current count of that element in the multiset, as
-   * opposed to the count at the time the entry was retrieved.
-   */
-  @Override public Set<Multiset.Entry<E>> entrySet() {
-    EntrySet result = entrySet;
-    if (result == null) {
-      entrySet = result = new EntrySet();
-    }
-    return result;
-  }
-
-  private class EntrySet extends AbstractSet<Multiset.Entry<E>> {
-    @Override public Iterator<Multiset.Entry<E>> iterator() {
-      final Iterator<Map.Entry<E, AtomicInteger>> backingEntries
-          = backingMap.entrySet().iterator();
-      return new Iterator<Multiset.Entry<E>>() {
-        Map.Entry<E, AtomicInteger> toRemove;
-
-        public boolean hasNext() {
-          return backingEntries.hasNext();
-        }
-
-        public Multiset.Entry<E> next() {
-          final Map.Entry<E, AtomicInteger> mapEntry = backingEntries.next();
-          toRemove = mapEntry;
-          return new Multisets.AbstractEntry<E>() {
-            public E getElement() {
-              return mapEntry.getKey();
-            }
-            public int getCount() {
-              int count = mapEntry.getValue().get();
-              if (count == 0) {
-                AtomicInteger frequency = backingMap.get(getElement());
-                if (frequency != null) {
-                  count = frequency.get();
-                }
-              }
-              return count;
-            }
-          };
-        }
-
-        public void remove() {
-          checkState(toRemove != null,
-              "no calls to next() since the last call to remove()");
-          size -= toRemove.getValue().getAndSet(0);
-          backingEntries.remove();
-          toRemove = null;
-        }
-      };
-    }
-
-    @Override public int size() {
-      return backingMap.size();
-    }
-
-    // The following overrides are for better performance.
-
-    @Override public void clear() {
-      for (AtomicInteger frequency : backingMap.values()) {
-        frequency.set(0);
-      }
-      backingMap.clear();
-      size = 0L;
-    }
-
-    @Override public boolean contains(Object o) {
-      if (o instanceof Entry) {
-        Entry<?> entry = (Entry<?>) o;
-        int count = count(entry.getElement());
-        return (count == entry.getCount()) && (count > 0);
-      }
-      return false;
-    }
-
-    @Override public boolean remove(Object o) {
-      if (contains(o)) {
-        Entry<?> entry = (Entry<?>) o;
-        AtomicInteger frequency = backingMap.remove(entry.getElement());
-        int numberRemoved = frequency.getAndSet(0);
-        size -= numberRemoved;
-        return true;
-      }
-      return false;
-    }
-  }
-
-  // Optimizations - Query Operations
-
-  @Override public int size() {
-    return (int) Math.min(this.size, Integer.MAX_VALUE);
-  }
-
-  @Override public Iterator<E> iterator() {
-    return new MapBasedMultisetIterator();
-  }
-
-  /*
-   * Not subclassing AbstractMultiset$MultisetIterator because next() needs to
-   * retrieve the Map.Entry<E, AtomicInteger> entry, which can then be used for
-   * a more efficient remove() call.
-   */
-  private class MapBasedMultisetIterator implements Iterator<E> {
-    final Iterator<Map.Entry<E, AtomicInteger>> entryIterator;
-    Map.Entry<E, AtomicInteger> currentEntry;
-    int occurrencesLeft;
-    boolean canRemove;
-
-    MapBasedMultisetIterator() {
-      this.entryIterator = backingMap.entrySet().iterator();
-    }
-
-    public boolean hasNext() {
-      return occurrencesLeft > 0 || entryIterator.hasNext();
-    }
-
-    public E next() {
-      if (occurrencesLeft == 0) {
-        currentEntry = entryIterator.next();
-        occurrencesLeft = currentEntry.getValue().get();
-      }
-      occurrencesLeft--;
-      canRemove = true;
-      return currentEntry.getKey();
-    }
-
-    public void remove() {
-      checkState(canRemove,
-          "no calls to next() since the last call to remove()");
-      int frequency = currentEntry.getValue().get();
-      if (frequency <= 0) {
-        throw new ConcurrentModificationException();
-      }
-      if (currentEntry.getValue().addAndGet(-1) == 0) {
-        entryIterator.remove();
-      }
-      size--;
-      canRemove = false;
-    }
-  }
-
-  @Override public int count(@Nullable Object element) {
-    AtomicInteger frequency = backingMap.get(element);
-    return (frequency == null) ? 0 : frequency.get();
-  }
-
-  // Optional Operations - Modification Operations
-
-  /**
-   * {@inheritDoc}
-   *
-   * @throws IllegalArgumentException if the call would result in more than
-   *     {@link Integer#MAX_VALUE} occurrences of {@code element} in this
-   *     multiset.
-   */
-  @Override public int add(@Nullable E element, int occurrences) {
-    if (occurrences == 0) {
-      return count(element);
-    }
-    checkArgument(
-        occurrences > 0, "occurrences cannot be negative: %s", occurrences);
-    AtomicInteger frequency = backingMap.get(element);
-    int oldCount;
-    if (frequency == null) {
-      oldCount = 0;
-      backingMap.put(element, new AtomicInteger(occurrences));
-    } else {
-      oldCount = frequency.get();
-      long newCount = (long) oldCount + (long) occurrences;
-      checkArgument(newCount <= Integer.MAX_VALUE,
-          "too many occurrences: %s", newCount);
-      frequency.getAndAdd(occurrences);
-    }
-    size += occurrences;
-    return oldCount;
-  }
-
-  @Override public int remove(@Nullable Object element, int occurrences) {
-    if (occurrences == 0) {
-      return count(element);
-    }
-    checkArgument(
-        occurrences > 0, "occurrences cannot be negative: %s", occurrences);
-    AtomicInteger frequency = backingMap.get(element);
-    if (frequency == null) {
-      return 0;
-    }
-
-    int oldCount = frequency.get();
-
-    int numberRemoved;
-    if (oldCount > occurrences) {
-      numberRemoved = occurrences;
-    } else {
-      numberRemoved = oldCount;
-      backingMap.remove(element);
-    }
-
-    frequency.addAndGet(-numberRemoved);
-    size -= numberRemoved;
-    return oldCount;
-  }
-
-  // Roughly a 33% performance improvement over AbstractMultiset.setCount().
-  @Override public int setCount(E element, int count) {
-    checkNonnegative(count, "count");
-
-    AtomicInteger existingCounter;
-    int oldCount;
-    if (count == 0) {
-      existingCounter = backingMap.remove(element);
-      oldCount = getAndSet(existingCounter, count);
-    } else {
-      existingCounter = backingMap.get(element);
-      oldCount = getAndSet(existingCounter, count);
-
-      if (existingCounter == null) {
-        backingMap.put(element, new AtomicInteger(count));
-      }
-    }
-
-    size += (count - oldCount);
-    return oldCount;
-  }
-
-  private static int getAndSet(AtomicInteger i, int count) {
-    if (i == null) {
-      return 0;
-    }
-
-    return i.getAndSet(count);
-  }
-
-  private int removeAllOccurrences(@Nullable Object element,
-      Map<E, AtomicInteger> map) {
-    AtomicInteger frequency = map.remove(element);
-    if (frequency == null) {
-      return 0;
-    }
-    int numberRemoved = frequency.getAndSet(0);
-    size -= numberRemoved;
-    return numberRemoved;
-  }
-
-  // Views
-
-  @Override Set<E> createElementSet() {
-    return new MapBasedElementSet(backingMap);
-  }
-
-  class MapBasedElementSet extends ForwardingSet<E> {
-
-    // This mapping is the usually the same as {@code backingMap}, but can be a
-    // submap in some implementations.
-    private final Map<E, AtomicInteger> map;
-    private final Set<E> delegate;
-
-    MapBasedElementSet(Map<E, AtomicInteger> map) {
-      this.map = map;
-      delegate = map.keySet();
-    }
-
-    @Override protected Set<E> delegate() {
-      return delegate;
-    }
-
-    // TODO: a way to not have to write this much code?
-
-    @Override public Iterator<E> iterator() {
-      final Iterator<Map.Entry<E, AtomicInteger>> entries
-          = map.entrySet().iterator();
-      return new Iterator<E>() {
-        Map.Entry<E, AtomicInteger> toRemove;
-
-        public boolean hasNext() {
-          return entries.hasNext();
-        }
-
-        public E next() {
-          toRemove = entries.next();
-          return toRemove.getKey();
-        }
-
-        public void remove() {
-          checkState(toRemove != null,
-              "no calls to next() since the last call to remove()");
-          size -= toRemove.getValue().getAndSet(0);
-          entries.remove();
-          toRemove = null;
-        }
-      };
-    }
-
-    @Override public boolean remove(Object element) {
-      return removeAllOccurrences(element, map) != 0;
-    }
-
-    @Override public boolean removeAll(Collection<?> elementsToRemove) {
-      return Iterators.removeAll(iterator(), elementsToRemove);
-    }
-
-    @Override public boolean retainAll(Collection<?> elementsToRetain) {
-      return Iterators.retainAll(iterator(), elementsToRetain);
-    }
-
-    @Override public void clear() {
-      if (map == backingMap) {
-        AbstractMapBasedMultiset.this.clear();
-      } else {
-        Iterator<E> i = iterator();
-        while (i.hasNext()) {
-          i.next();
-          i.remove();
-        }
-      }
-    }
-
-    public Map<E, AtomicInteger> getMap() {
-      return map;
-    }
-  }
-
-  // Don't allow default serialization.
-  @SuppressWarnings("unused") // actually used during deserialization
-  private void readObjectNoData() throws ObjectStreamException {
-    throw new InvalidObjectException("Stream data required");
-  }
-
-  private static final long serialVersionUID = -2250766705698539974L;
-}
diff --git a/src/com/google/common/collect/AbstractMapEntry.java b/src/com/google/common/collect/AbstractMapEntry.java
deleted file mode 100644
index de99ad7..0000000
--- a/src/com/google/common/collect/AbstractMapEntry.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-import com.google.common.base.Objects;
-
-import java.util.Map.Entry;
-
-import javax.annotation.Nullable;
-
-/**
- * Implementation of the {@code equals}, {@code hashCode}, and {@code toString}
- * methods of {@code Entry}.
- *
- * @author Jared Levy
- */
-@GwtCompatible
-abstract class AbstractMapEntry<K, V> implements Entry<K, V> {
-
-  public abstract K getKey();
-
-  public abstract V getValue();
-
-  public V setValue(V value) {
-    throw new UnsupportedOperationException();
-  }
-
-  @Override public boolean equals(@Nullable Object object) {
-    if (object instanceof Entry) {
-      Entry<?, ?> that = (Entry<?, ?>) object;
-      return Objects.equal(this.getKey(), that.getKey())
-          && Objects.equal(this.getValue(), that.getValue());
-    }
-    return false;
-  }
-
-  @Override public int hashCode() {
-    K k = getKey();
-    V v = getValue();
-    return ((k == null) ? 0 : k.hashCode()) ^ ((v == null) ? 0 : v.hashCode());
-  }
-
-  /**
-   * Returns a string representation of the form <code>{key}={value}</code>.
-   */
-  @Override public String toString() {
-    return getKey() + "=" + getValue();
-  }
-}
diff --git a/src/com/google/common/collect/AbstractMultimap.java b/src/com/google/common/collect/AbstractMultimap.java
deleted file mode 100644
index 0500686..0000000
--- a/src/com/google/common/collect/AbstractMultimap.java
+++ /dev/null
@@ -1,1492 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-import com.google.common.annotations.GwtIncompatible;
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Preconditions.checkState;
-
-import java.io.Serializable;
-import java.util.AbstractCollection;
-import java.util.AbstractMap;
-import java.util.AbstractSet;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.ConcurrentModificationException;
-import java.util.Iterator;
-import java.util.List;
-import java.util.ListIterator;
-import java.util.Map;
-import java.util.RandomAccess;
-import java.util.Set;
-import java.util.SortedMap;
-import java.util.SortedSet;
-
-import javax.annotation.Nullable;
-
-/**
- * Basic implementation of the {@link Multimap} interface. This class represents
- * a multimap as a map that associates each key with a collection of values. All
- * methods of {@link Multimap} are supported, including those specified as
- * optional in the interface.
- *
- * <p>To implement a multimap, a subclass must define the method {@link
- * #createCollection()}, which creates an empty collection of values for a key.
- *
- * <p>The multimap constructor takes a map that has a single entry for each
- * distinct key. When you insert a key-value pair with a key that isn't already
- * in the multimap, {@code AbstractMultimap} calls {@link #createCollection()}
- * to create the collection of values for that key. The subclass should not call
- * {@link #createCollection()} directly, and a new instance should be created
- * every time the method is called.
- *
- * <p>For example, the subclass could pass a {@link java.util.TreeMap} during
- * construction, and {@link #createCollection()} could return a {@link
- * java.util.TreeSet}, in which case the multimap's iterators would propagate
- * through the keys and values in sorted order.
- *
- * <p>Keys and values may be null, as long as the underlying collection classes
- * support null elements.
- *
- * <p>The collections created by {@link #createCollection()} may or may not
- * allow duplicates. If the collection, such as a {@link Set}, does not support
- * duplicates, an added key-value pair will replace an existing pair with the
- * same key and value, if such a pair is present. With collections like {@link
- * List} that allow duplicates, the collection will keep the existing key-value
- * pairs while adding a new pair.
- *
- * <p>This class is not threadsafe when any concurrent operations update the
- * multimap, even if the underlying map and {@link #createCollection()} method
- * return threadsafe classes. Concurrent read operations will work correctly. To
- * allow concurrent update operations, wrap your multimap with a call to {@link
- * Multimaps#synchronizedMultimap}.
- *
- * <p>For serialization to work, the subclass must specify explicit
- * {@code readObject} and {@code writeObject} methods.
- *
- * @author Jared Levy
- */
-@GwtCompatible
-abstract class AbstractMultimap<K, V> implements Multimap<K, V>, Serializable {
-  /*
-   * Here's an outline of the overall design.
-   *
-   * The map variable contains the collection of values associated with each
-   * key. When a key-value pair is added to a multimap that didn't previously
-   * contain any values for that key, a new collection generated by
-   * createCollection is added to the map. That same collection instance
-   * remains in the map as long as the multimap has any values for the key. If
-   * all values for the key are removed, the key and collection are removed
-   * from the map.
-   *
-   * The get method returns a WrappedCollection, which decorates the collection
-   * in the map (if the key is present) or an empty collection (if the key is
-   * not present). When the collection delegate in the WrappedCollection is
-   * empty, the multimap may contain subsequently added values for that key. To
-   * handle that situation, the WrappedCollection checks whether map contains
-   * an entry for the provided key, and if so replaces the delegate.
-   */
-
-  private transient Map<K, Collection<V>> map;
-  private transient int totalSize;
-
-  /**
-   * Creates a new multimap that uses the provided map.
-   *
-   * @param map place to store the mapping from each key to its corresponding
-   *     values
-   * @throws IllegalArgumentException if {@code map} is not empty
-   */
-  protected AbstractMultimap(Map<K, Collection<V>> map) {
-    checkArgument(map.isEmpty());
-    this.map = map;
-  }
-
-  /** Used during deserialization only. */
-  final void setMap(Map<K, Collection<V>> map) {
-    this.map = map;
-    totalSize = 0;
-    for (Collection<V> values : map.values()) {
-      checkArgument(!values.isEmpty());
-      totalSize += values.size();
-    }
-  }
-
-  /**
-   * Creates the collection of values for a single key.
-   *
-   * <p>Collections with weak, soft, or phantom references are not supported.
-   * Each call to {@code createCollection} should create a new instance.
-   *
-   * <p>The returned collection class determines whether duplicate key-value
-   * pairs are allowed.
-   *
-   * @return an empty collection of values
-   */
-  abstract Collection<V> createCollection();
-
-  /**
-   * Creates the collection of values for an explicitly provided key. By
-   * default, it simply calls {@link #createCollection()}, which is the correct
-   * behavior for most implementations. The {@link LinkedHashMultimap} class
-   * overrides it.
-   *
-   * @param key key to associate with values in the collection
-   * @return an empty collection of values
-   */
-  Collection<V> createCollection(@Nullable K key) {
-    return createCollection();
-  }
-
-  Map<K, Collection<V>> backingMap() {
-    return map;
-  }
-
-  // Query Operations
-
-  public int size() {
-    return totalSize;
-  }
-
-  public boolean isEmpty() {
-    return totalSize == 0;
-  }
-
-  public boolean containsKey(@Nullable Object key) {
-    return map.containsKey(key);
-  }
-
-  public boolean containsValue(@Nullable Object value) {
-    for (Collection<V> collection : map.values()) {
-      if (collection.contains(value)) {
-        return true;
-      }
-    }
-
-    return false;
-  }
-
-  public boolean containsEntry(@Nullable Object key, @Nullable Object value) {
-    Collection<V> collection = map.get(key);
-    return collection != null && collection.contains(value);
-  }
-
-  // Modification Operations
-
-  public boolean put(@Nullable K key, @Nullable V value) {
-    Collection<V> collection = getOrCreateCollection(key);
-
-    if (collection.add(value)) {
-      totalSize++;
-      return true;
-    } else {
-      return false;
-    }
-  }
-
-  private Collection<V> getOrCreateCollection(@Nullable K key) {
-    Collection<V> collection = map.get(key);
-    if (collection == null) {
-      collection = createCollection(key);
-      map.put(key, collection);
-    }
-    return collection;
-  }
-
-  public boolean remove(@Nullable Object key, @Nullable Object value) {
-    Collection<V> collection = map.get(key);
-    if (collection == null) {
-      return false;
-    }
-
-    boolean changed = collection.remove(value);
-    if (changed) {
-      totalSize--;
-      if (collection.isEmpty()) {
-        map.remove(key);
-      }
-    }
-    return changed;
-  }
-
-  // Bulk Operations
-
-  public boolean putAll(@Nullable K key, Iterable<? extends V> values) {
-    if (!values.iterator().hasNext()) {
-      return false;
-    }
-    Collection<V> collection = getOrCreateCollection(key);
-    int oldSize = collection.size();
-
-    boolean changed = false;
-    if (values instanceof Collection) {
-      @SuppressWarnings("unchecked")
-      Collection<? extends V> c = (Collection<? extends V>) values;
-      changed = collection.addAll(c);
-    } else {
-      for (V value : values) {
-        changed |= collection.add(value);
-      }
-    }
-
-    totalSize += (collection.size() - oldSize);
-    return changed;
-  }
-
-  public boolean putAll(Multimap<? extends K, ? extends V> multimap) {
-    boolean changed = false;
-    for (Map.Entry<? extends K, ? extends V> entry : multimap.entries()) {
-      changed |= put(entry.getKey(), entry.getValue());
-    }
-    return changed;
-  }
-
-  /**
-   * {@inheritDoc}
-   *
-   * <p>The returned collection is immutable.
-   */
-  public Collection<V> replaceValues(
-      @Nullable K key, Iterable<? extends V> values) {
-    Iterator<? extends V> iterator = values.iterator();
-    if (!iterator.hasNext()) {
-      return removeAll(key);
-    }
-
-    Collection<V> collection = getOrCreateCollection(key);
-    Collection<V> oldValues = createCollection();
-    oldValues.addAll(collection);
-
-    totalSize -= collection.size();
-    collection.clear();
-
-    while (iterator.hasNext()) {
-      if (collection.add(iterator.next())) {
-        totalSize++;
-      }
-    }
-
-    return unmodifiableCollectionSubclass(oldValues);
-  }
-
-  /**
-   * {@inheritDoc}
-   *
-   * <p>The returned collection is immutable.
-   */
-  public Collection<V> removeAll(@Nullable Object key) {
-    Collection<V> collection = map.remove(key);
-    Collection<V> output = createCollection();
-
-    if (collection != null) {
-      output.addAll(collection);
-      totalSize -= collection.size();
-      collection.clear();
-    }
-
-    return unmodifiableCollectionSubclass(output);
-  }
-
-  private Collection<V> unmodifiableCollectionSubclass(
-      Collection<V> collection) {
-    if (collection instanceof SortedSet) {
-      return Collections.unmodifiableSortedSet((SortedSet<V>) collection);
-    } else if (collection instanceof Set) {
-      return Collections.unmodifiableSet((Set<V>) collection);
-    } else if (collection instanceof List) {
-      return Collections.unmodifiableList((List<V>) collection);
-    } else {
-      return Collections.unmodifiableCollection(collection);
-    }
-  }
-
-  public void clear() {
-    // Clear each collection, to make previously returned collections empty.
-    for (Collection<V> collection : map.values()) {
-      collection.clear();
-    }
-    map.clear();
-    totalSize = 0;
-  }
-
-  // Views
-
-  /**
-   * {@inheritDoc}
-   *
-   * <p>The returned collection is not serializable.
-   */
-  public Collection<V> get(@Nullable K key) {
-    Collection<V> collection = map.get(key);
-    if (collection == null) {
-      collection = createCollection(key);
-    }
-    return wrapCollection(key, collection);
-  }
-
-  /**
-   * Generates a decorated collection that remains consistent with the values in
-   * the multimap for the provided key. Changes to the multimap may alter the
-   * returned collection, and vice versa.
-   */
-  private Collection<V> wrapCollection(
-      @Nullable K key, Collection<V> collection) {
-    if (collection instanceof SortedSet) {
-      return new WrappedSortedSet(key, (SortedSet<V>) collection, null);
-    } else if (collection instanceof Set) {
-      return new WrappedSet(key, (Set<V>) collection);
-    } else if (collection instanceof List) {
-      return wrapList(key, (List<V>) collection, null);
-    } else {
-      return new WrappedCollection(key, collection, null);
-    }
-  }
-
-  private List<V> wrapList(
-      K key, List<V> list, @Nullable WrappedCollection ancestor) {
-    return (list instanceof RandomAccess)
-        ? new RandomAccessWrappedList(key, list, ancestor)
-        : new WrappedList(key, list, ancestor);
-  }
-
-  /**
-   * Collection decorator that stays in sync with the multimap values for a key.
-   * There are two kinds of wrapped collections: full and subcollections. Both
-   * have a delegate pointing to the underlying collection class.
-   *
-   * <p>Full collections, identified by a null ancestor field, contain all
-   * multimap values for a given key. Its delegate is a value in {@link
-   * AbstractMultimap#map} whenever the delegate is non-empty. The {@code
-   * refreshIfEmpty}, {@code removeIfEmpty}, and {@code addToMap} methods ensure
-   * that the {@code WrappedCollection} and map remain consistent.
-   *
-   * <p>A subcollection, such as a sublist, contains some of the values for a
-   * given key. Its ancestor field points to the full wrapped collection with
-   * all values for the key. The subcollection {@code refreshIfEmpty}, {@code
-   * removeIfEmpty}, and {@code addToMap} methods call the corresponding methods
-   * of the full wrapped collection.
-   */
-  private class WrappedCollection extends AbstractCollection<V> {
-    final K key;
-    Collection<V> delegate;
-    final WrappedCollection ancestor;
-    final Collection<V> ancestorDelegate;
-
-    WrappedCollection(@Nullable K key, Collection<V> delegate,
-        @Nullable WrappedCollection ancestor) {
-      this.key = key;
-      this.delegate = delegate;
-      this.ancestor = ancestor;
-      this.ancestorDelegate
-          = (ancestor == null) ? null : ancestor.getDelegate();
-    }
-
-    /**
-     * If the delegate collection is empty, but the multimap has values for the
-     * key, replace the delegate with the new collection for the key.
-     *
-     * <p>For a subcollection, refresh its ancestor and validate that the
-     * ancestor delegate hasn't changed.
-     */
-    void refreshIfEmpty() {
-      if (ancestor != null) {
-        ancestor.refreshIfEmpty();
-        if (ancestor.getDelegate() != ancestorDelegate) {
-          throw new ConcurrentModificationException();
-        }
-      } else if (delegate.isEmpty()) {
-        Collection<V> newDelegate = map.get(key);
-        if (newDelegate != null) {
-          delegate = newDelegate;
-        }
-      }
-    }
-
-    /**
-     * If collection is empty, remove it from {@code map}. For subcollections,
-     * check whether the ancestor collection is empty.
-     */
-    void removeIfEmpty() {
-      if (ancestor != null) {
-        ancestor.removeIfEmpty();
-      } else if (delegate.isEmpty()) {
-        map.remove(key);
-      }
-    }
-
-    K getKey() {
-      return key;
-    }
-
-    /**
-     * Add the delegate to the map. Other {@code WrappedCollection} methods
-     * should call this method after adding elements to a previously empty
-     * collection.
-     *
-     * <p>Subcollection add the ancestor's delegate instead.
-     */
-    void addToMap() {
-      if (ancestor != null) {
-        ancestor.addToMap();
-      } else {
-        map.put(key, delegate);
-      }
-    }
-
-    @Override public int size() {
-      refreshIfEmpty();
-      return delegate.size();
-    }
-
-    @Override public boolean equals(@Nullable Object object) {
-      if (object == this) {
-        return true;
-      }
-      refreshIfEmpty();
-      return delegate.equals(object);
-    }
-
-    @Override public int hashCode() {
-      refreshIfEmpty();
-      return delegate.hashCode();
-    }
-
-    @Override public String toString() {
-      refreshIfEmpty();
-      return delegate.toString();
-    }
-
-    Collection<V> getDelegate() {
-      return delegate;
-    }
-
-    @Override public Iterator<V> iterator() {
-      refreshIfEmpty();
-      return new WrappedIterator();
-    }
-
-    /** Collection iterator for {@code WrappedCollection}. */
-    class WrappedIterator implements Iterator<V> {
-      final Iterator<V> delegateIterator;
-      final Collection<V> originalDelegate = delegate;
-
-      WrappedIterator() {
-        delegateIterator = iteratorOrListIterator(delegate);
-      }
-
-      WrappedIterator(Iterator<V> delegateIterator) {
-        this.delegateIterator = delegateIterator;
-      }
-
-      /**
-       * If the delegate changed since the iterator was created, the iterator is
-       * no longer valid.
-       */
-      void validateIterator() {
-        refreshIfEmpty();
-        if (delegate != originalDelegate) {
-          throw new ConcurrentModificationException();
-        }
-      }
-
-      public boolean hasNext() {
-        validateIterator();
-        return delegateIterator.hasNext();
-      }
-
-      public V next() {
-        validateIterator();
-        return delegateIterator.next();
-      }
-
-      public void remove() {
-        delegateIterator.remove();
-        totalSize--;
-        removeIfEmpty();
-      }
-
-      Iterator<V> getDelegateIterator() {
-        validateIterator();
-        return delegateIterator;
-      }
-    }
-
-    @Override public boolean add(V value) {
-      refreshIfEmpty();
-      boolean wasEmpty = delegate.isEmpty();
-      boolean changed = delegate.add(value);
-      if (changed) {
-        totalSize++;
-        if (wasEmpty) {
-          addToMap();
-        }
-      }
-      return changed;
-    }
-
-    WrappedCollection getAncestor() {
-      return ancestor;
-    }
-
-    // The following methods are provided for better performance.
-
-    @Override public boolean addAll(Collection<? extends V> collection) {
-      if (collection.isEmpty()) {
-        return false;
-      }
-      int oldSize = size();  // calls refreshIfEmpty
-      boolean changed = delegate.addAll(collection);
-      if (changed) {
-        int newSize = delegate.size();
-        totalSize += (newSize - oldSize);
-        if (oldSize == 0) {
-          addToMap();
-        }
-      }
-      return changed;
-    }
-
-    @Override public boolean contains(Object o) {
-      refreshIfEmpty();
-      return delegate.contains(o);
-    }
-
-    @Override public boolean containsAll(Collection<?> c) {
-      refreshIfEmpty();
-      return delegate.containsAll(c);
-    }
-
-    @Override public void clear() {
-      int oldSize = size();  // calls refreshIfEmpty
-      if (oldSize == 0) {
-        return;
-      }
-      delegate.clear();
-      totalSize -= oldSize;
-      removeIfEmpty();       // maybe shouldn't be removed if this is a sublist
-    }
-
-    @Override public boolean remove(Object o) {
-      refreshIfEmpty();
-      boolean changed = delegate.remove(o);
-      if (changed) {
-        totalSize--;
-        removeIfEmpty();
-      }
-      return changed;
-    }
-
-    @Override public boolean removeAll(Collection<?> c) {
-      if (c.isEmpty()) {
-        return false;
-      }
-      int oldSize = size();  // calls refreshIfEmpty
-      boolean changed = delegate.removeAll(c);
-      if (changed) {
-        int newSize = delegate.size();
-        totalSize += (newSize - oldSize);
-        removeIfEmpty();
-      }
-      return changed;
-    }
-
-    @Override public boolean retainAll(Collection<?> c) {
-      checkNotNull(c);
-      int oldSize = size();  // calls refreshIfEmpty
-      boolean changed = delegate.retainAll(c);
-      if (changed) {
-        int newSize = delegate.size();
-        totalSize += (newSize - oldSize);
-        removeIfEmpty();
-      }
-      return changed;
-    }
-  }
-
-  private Iterator<V> iteratorOrListIterator(Collection<V> collection) {
-    return (collection instanceof List)
-        ? ((List<V>) collection).listIterator()
-        : collection.iterator();
-  }
-
-  /** Set decorator that stays in sync with the multimap values for a key. */
-  private class WrappedSet extends WrappedCollection implements Set<V> {
-    WrappedSet(K key, Set<V> delegate) {
-      super(key, delegate, null);
-    }
-  }
-
-  /**
-   * SortedSet decorator that stays in sync with the multimap values for a key.
-   */
-  private class WrappedSortedSet extends WrappedCollection
-      implements SortedSet<V> {
-    WrappedSortedSet(@Nullable K key, SortedSet<V> delegate,
-        @Nullable WrappedCollection ancestor) {
-      super(key, delegate, ancestor);
-    }
-
-    SortedSet<V> getSortedSetDelegate() {
-      return (SortedSet<V>) getDelegate();
-    }
-
-    public Comparator<? super V> comparator() {
-      return getSortedSetDelegate().comparator();
-    }
-
-    public V first() {
-      refreshIfEmpty();
-      return getSortedSetDelegate().first();
-    }
-
-    public V last() {
-      refreshIfEmpty();
-      return getSortedSetDelegate().last();
-    }
-
-    public SortedSet<V> headSet(V toElement) {
-      refreshIfEmpty();
-      return new WrappedSortedSet(
-          getKey(), getSortedSetDelegate().headSet(toElement),
-          (getAncestor() == null) ? this : getAncestor());
-    }
-
-    public SortedSet<V> subSet(V fromElement, V toElement) {
-      refreshIfEmpty();
-      return new WrappedSortedSet(
-          getKey(), getSortedSetDelegate().subSet(fromElement, toElement),
-          (getAncestor() == null) ? this : getAncestor());
-    }
-
-    public SortedSet<V> tailSet(V fromElement) {
-      refreshIfEmpty();
-      return new WrappedSortedSet(
-          getKey(), getSortedSetDelegate().tailSet(fromElement),
-          (getAncestor() == null) ? this : getAncestor());
-    }
-  }
-
-  /** List decorator that stays in sync with the multimap values for a key. */
-  private class WrappedList extends WrappedCollection implements List<V> {
-    WrappedList(K key, List<V> delegate, @Nullable WrappedCollection ancestor) {
-      super(key, delegate, ancestor);
-    }
-
-    List<V> getListDelegate() {
-      return (List<V>) getDelegate();
-    }
-
-    public boolean addAll(int index, Collection<? extends V> c) {
-      if (c.isEmpty()) {
-        return false;
-      }
-      int oldSize = size();  // calls refreshIfEmpty
-      boolean changed = getListDelegate().addAll(index, c);
-      if (changed) {
-        int newSize = getDelegate().size();
-        totalSize += (newSize - oldSize);
-        if (oldSize == 0) {
-          addToMap();
-        }
-      }
-      return changed;
-    }
-
-    public V get(int index) {
-      refreshIfEmpty();
-      return getListDelegate().get(index);
-    }
-
-    public V set(int index, V element) {
-      refreshIfEmpty();
-      return getListDelegate().set(index, element);
-    }
-
-    public void add(int index, V element) {
-      refreshIfEmpty();
-      boolean wasEmpty = getDelegate().isEmpty();
-      getListDelegate().add(index, element);
-      totalSize++;
-      if (wasEmpty) {
-        addToMap();
-      }
-    }
-
-    public V remove(int index) {
-      refreshIfEmpty();
-      V value = getListDelegate().remove(index);
-      totalSize--;
-      removeIfEmpty();
-      return value;
-    }
-
-    public int indexOf(Object o) {
-      refreshIfEmpty();
-      return getListDelegate().indexOf(o);
-    }
-
-    public int lastIndexOf(Object o) {
-      refreshIfEmpty();
-      return getListDelegate().lastIndexOf(o);
-    }
-
-    public ListIterator<V> listIterator() {
-      refreshIfEmpty();
-      return new WrappedListIterator();
-    }
-
-    public ListIterator<V> listIterator(int index) {
-      refreshIfEmpty();
-      return new WrappedListIterator(index);
-    }
-
-    @GwtIncompatible("List.subList")
-    public List<V> subList(int fromIndex, int toIndex) {
-      refreshIfEmpty();
-      return wrapList(getKey(),
-          Platform.subList(getListDelegate(), fromIndex, toIndex),
-          (getAncestor() == null) ? this : getAncestor());
-    }
-
-    /** ListIterator decorator. */
-    private class WrappedListIterator extends WrappedIterator
-        implements ListIterator<V> {
-      WrappedListIterator() {}
-
-      public WrappedListIterator(int index) {
-        super(getListDelegate().listIterator(index));
-      }
-
-      private ListIterator<V> getDelegateListIterator() {
-        return (ListIterator<V>) getDelegateIterator();
-      }
-
-      public boolean hasPrevious() {
-        return getDelegateListIterator().hasPrevious();
-      }
-
-      public V previous() {
-        return getDelegateListIterator().previous();
-      }
-
-      public int nextIndex() {
-        return getDelegateListIterator().nextIndex();
-      }
-
-      public int previousIndex() {
-        return getDelegateListIterator().previousIndex();
-      }
-
-      public void set(V value) {
-        getDelegateListIterator().set(value);
-      }
-
-      public void add(V value) {
-        boolean wasEmpty = isEmpty();
-        getDelegateListIterator().add(value);
-        totalSize++;
-        if (wasEmpty) {
-          addToMap();
-        }
-      }
-    }
-  }
-
-  /**
-   * List decorator that stays in sync with the multimap values for a key and
-   * supports rapid random access.
-   */
-  private class RandomAccessWrappedList extends WrappedList
-      implements RandomAccess {
-    RandomAccessWrappedList(K key, List<V> delegate,
-        @Nullable WrappedCollection ancestor) {
-      super(key, delegate, ancestor);
-    }
-  }
-
-  private transient Set<K> keySet;
-
-  public Set<K> keySet() {
-    Set<K> result = keySet;
-    return (result == null) ? keySet = createKeySet() : result;
-  }
-
-  private Set<K> createKeySet() {
-    return (map instanceof SortedMap)
-        ? new SortedKeySet((SortedMap<K, Collection<V>>) map) : new KeySet(map);
-  }
-
-  private class KeySet extends AbstractSet<K> {
-
-    /**
-     * This is usually the same as map, except when someone requests a
-     * subcollection of a {@link SortedKeySet}.
-     */
-    final Map<K, Collection<V>> subMap;
-
-    KeySet(final Map<K, Collection<V>> subMap) {
-      this.subMap = subMap;
-    }
-
-    @Override public int size() {
-      return subMap.size();
-    }
-
-    @Override public Iterator<K> iterator() {
-      return new Iterator<K>() {
-        final Iterator<Map.Entry<K, Collection<V>>> entryIterator
-            = subMap.entrySet().iterator();
-        Map.Entry<K, Collection<V>> entry;
-
-        public boolean hasNext() {
-          return entryIterator.hasNext();
-        }
-        public K next() {
-          entry = entryIterator.next();
-          return entry.getKey();
-        }
-        public void remove() {
-          checkState(entry != null);
-          Collection<V> collection = entry.getValue();
-          entryIterator.remove();
-          totalSize -= collection.size();
-          collection.clear();
-        }
-      };
-    }
-
-    // The following methods are included for better performance.
-
-    @Override public boolean contains(Object key) {
-      return subMap.containsKey(key);
-    }
-
-    @Override public boolean remove(Object key) {
-      int count = 0;
-      Collection<V> collection = subMap.remove(key);
-      if (collection != null) {
-        count = collection.size();
-        collection.clear();
-        totalSize -= count;
-      }
-      return count > 0;
-    }
-
-    @Override public boolean containsAll(Collection<?> c) {
-      return subMap.keySet().containsAll(c);
-    }
-
-    @Override public boolean equals(@Nullable Object object) {
-      return this == object || this.subMap.keySet().equals(object);
-    }
-
-    @Override public int hashCode() {
-      return subMap.keySet().hashCode();
-    }
-  }
-
-  private class SortedKeySet extends KeySet implements SortedSet<K> {
-
-    SortedKeySet(SortedMap<K, Collection<V>> subMap) {
-      super(subMap);
-    }
-
-    SortedMap<K, Collection<V>> sortedMap() {
-      return (SortedMap<K, Collection<V>>) subMap;
-    }
-
-    public Comparator<? super K> comparator() {
-      return sortedMap().comparator();
-    }
-
-    public K first() {
-      return sortedMap().firstKey();
-    }
-
-    public SortedSet<K> headSet(K toElement) {
-      return new SortedKeySet(sortedMap().headMap(toElement));
-    }
-
-    public K last() {
-      return sortedMap().lastKey();
-    }
-
-    public SortedSet<K> subSet(K fromElement, K toElement) {
-      return new SortedKeySet(sortedMap().subMap(fromElement, toElement));
-    }
-
-    public SortedSet<K> tailSet(K fromElement) {
-      return new SortedKeySet(sortedMap().tailMap(fromElement));
-    }
-  }
-
-  private transient Multiset<K> multiset;
-
-  public Multiset<K> keys() {
-    Multiset<K> result = multiset;
-    return (result == null) ? multiset = new MultisetView() : result;
-  }
-
-  /** Multiset view that stays in sync with the multimap keys. */
-  private class MultisetView extends AbstractMultiset<K> {
-
-    @Override public int remove(Object key, int occurrences) {
-      if (occurrences == 0) {
-        return count(key);
-      }
-      checkArgument(occurrences > 0);
-
-      Collection<V> collection;
-      try {
-        collection = map.get(key);
-      } catch (NullPointerException e) {
-        return 0;
-      } catch (ClassCastException e) {
-        return 0;
-      }
-
-      if (collection == null) {
-        return 0;
-      }
-      int count = collection.size();
-
-      if (occurrences >= count) {
-        return removeValuesForKey(key);
-      }
-
-      Iterator<V> iterator = collection.iterator();
-      for (int i = 0; i < occurrences; i++) {
-        iterator.next();
-        iterator.remove();
-      }
-      totalSize -= occurrences;
-      return count;
-    }
-
-    @Override public Set<K> elementSet() {
-      return AbstractMultimap.this.keySet();
-    }
-
-    transient Set<Multiset.Entry<K>> entrySet;
-
-    @Override public Set<Multiset.Entry<K>> entrySet() {
-      Set<Multiset.Entry<K>> result = entrySet;
-      return (result == null) ? entrySet = new EntrySet() : result;
-    }
-
-    private class EntrySet extends AbstractSet<Multiset.Entry<K>> {
-      @Override public Iterator<Multiset.Entry<K>> iterator() {
-        return new MultisetEntryIterator();
-      }
-      @Override public int size() {
-        return map.size();
-      }
-
-      // The following methods are included for better performance.
-
-      @Override public boolean contains(Object o) {
-        if (!(o instanceof Multiset.Entry)) {
-          return false;
-        }
-        Multiset.Entry<?> entry = (Multiset.Entry<?>) o;
-        Collection<V> collection = map.get(entry.getElement());
-        return (collection != null) &&
-            (collection.size() == entry.getCount());
-      }
-      @Override public void clear() {
-        AbstractMultimap.this.clear();
-      }
-      @Override public boolean remove(Object o) {
-        return contains(o) &&
-            (removeValuesForKey(((Multiset.Entry<?>) o).getElement()) > 0);
-      }
-    }
-
-    @Override public Iterator<K> iterator() {
-      return new MultisetKeyIterator();
-    }
-
-    // The following methods are included for better performance.
-
-    @Override public int count(Object key) {
-      try {
-        Collection<V> collection = map.get(key);
-        return (collection == null) ? 0 : collection.size();
-      } catch (NullPointerException e) {
-        return 0;
-      } catch (ClassCastException e) {
-        return 0;
-      }
-    }
-
-    @Override public int size() {
-      return totalSize;
-    }
-
-    @Override public void clear() {
-      AbstractMultimap.this.clear();
-    }
-  }
-
-  /**
-   * Removes all values for the provided key. Unlike {@link #removeAll}, it
-   * returns the number of removed mappings.
-   */
-  private int removeValuesForKey(Object key) {
-    Collection<V> collection;
-    try {
-      collection = map.remove(key);
-    } catch (NullPointerException e) {
-      return 0;
-    } catch (ClassCastException e) {
-      return 0;
-    }
-
-    int count = 0;
-    if (collection != null) {
-      count = collection.size();
-      collection.clear();
-      totalSize -= count;
-    }
-    return count;
-  }
-
-  /** Iterator across each key, repeating once per value. */
-  private class MultisetEntryIterator implements Iterator<Multiset.Entry<K>> {
-    final Iterator<Map.Entry<K, Collection<V>>> asMapIterator
-        = asMap().entrySet().iterator();
-
-    public boolean hasNext() {
-      return asMapIterator.hasNext();
-    }
-    public Multiset.Entry<K> next() {
-      return new MultisetEntry(asMapIterator.next());
-    }
-    public void remove() {
-      asMapIterator.remove();
-    }
-  }
-
-  private class MultisetEntry extends Multisets.AbstractEntry<K> {
-    final Map.Entry<K, Collection<V>> entry;
-
-    public MultisetEntry(Map.Entry<K, Collection<V>> entry) {
-      this.entry = entry;
-    }
-    public K getElement() {
-      return entry.getKey();
-    }
-    public int getCount() {
-      return entry.getValue().size();
-    }
-  }
-
-  /** Iterator across each key, repeating once per value. */
-  private class MultisetKeyIterator implements Iterator<K> {
-    final Iterator<Map.Entry<K, V>> entryIterator = entries().iterator();
-
-    public boolean hasNext() {
-      return entryIterator.hasNext();
-    }
-    public K next() {
-      return entryIterator.next().getKey();
-    }
-    public void remove() {
-      entryIterator.remove();
-    }
-  }
-
-  private transient Collection<V> valuesCollection;
-
-  /**
-   * {@inheritDoc}
-   *
-   * <p>The iterator generated by the returned collection traverses the values
-   * for one key, followed by the values of a second key, and so on.
-   */
-  public Collection<V> values() {
-    Collection<V> result = valuesCollection;
-    return (result == null) ? valuesCollection = new Values() : result;
-  }
-
-  private class Values extends AbstractCollection<V> {
-    @Override public Iterator<V> iterator() {
-      return new ValueIterator();
-    }
-    @Override public int size() {
-      return totalSize;
-    }
-
-    // The following methods are included to improve performance.
-
-    @Override public void clear() {
-      AbstractMultimap.this.clear();
-    }
-
-    @Override public boolean contains(Object value) {
-      return containsValue(value);
-    }
-  }
-
-  /** Iterator across all values. */
-  private class ValueIterator implements Iterator<V> {
-    final Iterator<Map.Entry<K, V>> entryIterator = createEntryIterator();
-
-    public boolean hasNext() {
-      return entryIterator.hasNext();
-    }
-    public V next() {
-      return entryIterator.next().getValue();
-    }
-    public void remove() {
-      entryIterator.remove();
-    }
-  }
-
-  private transient Collection<Map.Entry<K, V>> entries;
-
-  // TODO: should we copy this javadoc to each concrete class, so that classes
-  // like LinkedHashMultimap that need to say something different are still
-  // able to {@inheritDoc} all the way from Multimap?
-
-  /**
-   * {@inheritDoc}
-   *
-   * <p>The iterator generated by the returned collection traverses the values
-   * for one key, followed by the values of a second key, and so on.
-   *
-   * <p>Each entry is an immutable snapshot of a key-value mapping in the
-   * multimap, taken at the time the entry is returned by a method call to the
-   * collection or its iterator.
-   */
-  public Collection<Map.Entry<K, V>> entries() {
-    Collection<Map.Entry<K, V>> result = entries;
-    return (entries == null) ? entries = createEntries() : result;
-  }
-
-  private Collection<Map.Entry<K, V>> createEntries() {
-    // TODO: can we refactor so we're not doing "this instanceof"?
-    return (this instanceof SetMultimap) ? new EntrySet() : new Entries();
-  }
-
-  /** Entries for multimap. */
-  private class Entries extends AbstractCollection<Map.Entry<K, V>> {
-    @Override public Iterator<Map.Entry<K, V>> iterator() {
-      return createEntryIterator();
-    }
-    @Override public int size() {
-      return totalSize;
-    }
-
-    // The following methods are included to improve performance.
-
-    @Override public boolean contains(Object o) {
-      if (!(o instanceof Map.Entry)) {
-        return false;
-      }
-      Map.Entry<?, ?> entry = (Map.Entry<?, ?>) o;
-      return containsEntry(entry.getKey(), entry.getValue());
-    }
-
-    @Override public void clear() {
-      AbstractMultimap.this.clear();
-    }
-
-    @Override public boolean remove(Object o) {
-      if (!(o instanceof Map.Entry)) {
-        return false;
-      }
-      Map.Entry<?, ?> entry = (Map.Entry<?, ?>) o;
-      return AbstractMultimap.this.remove(entry.getKey(), entry.getValue());
-    }
-  }
-
-  /**
-   * Returns an iterator across all key-value map entries, used by {@code
-   * entries().iterator()} and {@code values().iterator()}. The default
-   * behavior, which traverses the values for one key, the values for a second
-   * key, and so on, suffices for most {@code AbstractMultimap} implementations.
-   *
-   * @return an iterator across map entries
-   */
-  Iterator<Map.Entry<K, V>> createEntryIterator() {
-    return new EntryIterator();
-  }
-
-  /** Iterator across all key-value pairs. */
-  private class EntryIterator implements Iterator<Map.Entry<K, V>> {
-    final Iterator<Map.Entry<K, Collection<V>>> keyIterator;
-    K key;
-    Collection<V> collection;
-    Iterator<V> valueIterator;
-
-    EntryIterator() {
-      keyIterator = map.entrySet().iterator();
-      if (keyIterator.hasNext()) {
-        findValueIteratorAndKey();
-      } else {
-        valueIterator = Iterators.emptyModifiableIterator();
-      }
-    }
-
-    void findValueIteratorAndKey() {
-      Map.Entry<K, Collection<V>> entry = keyIterator.next();
-      key = entry.getKey();
-      collection = entry.getValue();
-      valueIterator = collection.iterator();
-    }
-
-    public boolean hasNext() {
-      return keyIterator.hasNext() || valueIterator.hasNext();
-    }
-
-    public Map.Entry<K, V> next() {
-      if (!valueIterator.hasNext()) {
-        findValueIteratorAndKey();
-      }
-      return Maps.immutableEntry(key, valueIterator.next());
-    }
-
-    public void remove() {
-      valueIterator.remove();
-      if (collection.isEmpty()) {
-        keyIterator.remove();
-      }
-      totalSize--;
-    }
-  }
-
-  /** Entry set for a {@link SetMultimap}. */
-  private class EntrySet extends Entries implements Set<Map.Entry<K, V>> {
-    @Override public boolean equals(@Nullable Object object) {
-      return Collections2.setEquals(this, object);
-    }
-    @Override public int hashCode() {
-      return Sets.hashCodeImpl(this);
-    }
-  }
-
-  private transient Map<K, Collection<V>> asMap;
-
-  public Map<K, Collection<V>> asMap() {
-    Map<K, Collection<V>> result = asMap;
-    return (result == null) ? asMap = createAsMap() : result;
-  }
-
-  private Map<K, Collection<V>> createAsMap() {
-    return (map instanceof SortedMap)
-        ? new SortedAsMap((SortedMap<K, Collection<V>>) map) : new AsMap(map);
-  }
-
-  private class AsMap extends AbstractMap<K, Collection<V>> {
-    /**
-     * Usually the same as map, but smaller for the headMap(), tailMap(), or
-     * subMap() of a SortedAsMap.
-     */
-    final transient Map<K, Collection<V>> submap;
-
-    AsMap(Map<K, Collection<V>> submap) {
-      this.submap = submap;
-    }
-
-    transient Set<Map.Entry<K, Collection<V>>> entrySet;
-
-    @Override public Set<Map.Entry<K, Collection<V>>> entrySet() {
-      Set<Map.Entry<K, Collection<V>>> result = entrySet;
-      return (entrySet == null) ? entrySet = new AsMapEntries() : result;
-    }
-
-    // The following methods are included for performance.
-
-    @Override public boolean containsKey(Object key) {
-      return Maps.safeContainsKey(submap, key);
-    }
-
-    @Override public Collection<V> get(Object key) {
-      Collection<V> collection = Maps.safeGet(submap, key);
-      if (collection == null) {
-        return null;
-      }
-      @SuppressWarnings("unchecked")
-      K k = (K) key;
-      return wrapCollection(k, collection);
-    }
-
-    @Override public Set<K> keySet() {
-      return AbstractMultimap.this.keySet();
-    }
-
-    @Override public Collection<V> remove(Object key) {
-      Collection<V> collection = submap.remove(key);
-      if (collection == null) {
-        return null;
-      }
-
-      Collection<V> output = createCollection();
-      output.addAll(collection);
-      totalSize -= collection.size();
-      collection.clear();
-      return output;
-    }
-
-    @Override public boolean equals(@Nullable Object object) {
-      return this == object || submap.equals(object);
-    }
-
-    @Override public int hashCode() {
-      return submap.hashCode();
-    }
-
-    @Override public String toString() {
-      return submap.toString();
-    }
-
-    class AsMapEntries extends AbstractSet<Map.Entry<K, Collection<V>>> {
-      @Override public Iterator<Map.Entry<K, Collection<V>>> iterator() {
-        return new AsMapIterator();
-      }
-
-      @Override public int size() {
-        return submap.size();
-      }
-
-      // The following methods are included for performance.
-
-      @Override public boolean contains(Object o) {
-        return Collections2.safeContains(submap.entrySet(), o);
-      }
-
-      @Override public boolean remove(Object o) {
-        if (!contains(o)) {
-          return false;
-        }
-        Map.Entry<?, ?> entry = (Map.Entry<?, ?>) o;
-        removeValuesForKey(entry.getKey());
-        return true;
-      }
-    }
-
-    /** Iterator across all keys and value collections. */
-    class AsMapIterator implements Iterator<Map.Entry<K, Collection<V>>> {
-      final Iterator<Map.Entry<K, Collection<V>>> delegateIterator
-          = submap.entrySet().iterator();
-      Collection<V> collection;
-
-      public boolean hasNext() {
-        return delegateIterator.hasNext();
-      }
-
-      public Map.Entry<K, Collection<V>> next() {
-        Map.Entry<K, Collection<V>> entry = delegateIterator.next();
-        K key = entry.getKey();
-        collection = entry.getValue();
-        return Maps.immutableEntry(key, wrapCollection(key, collection));
-      }
-
-      public void remove() {
-        delegateIterator.remove();
-        totalSize -= collection.size();
-        collection.clear();
-      }
-    }
-  }
-
-  private class SortedAsMap extends AsMap
-      implements SortedMap<K, Collection<V>> {
-    SortedAsMap(SortedMap<K, Collection<V>> submap) {
-      super(submap);
-    }
-
-    SortedMap<K, Collection<V>> sortedMap() {
-      return (SortedMap<K, Collection<V>>) submap;
-    }
-
-    public Comparator<? super K> comparator() {
-      return sortedMap().comparator();
-    }
-
-    public K firstKey() {
-      return sortedMap().firstKey();
-    }
-
-    public K lastKey() {
-      return sortedMap().lastKey();
-    }
-
-    public SortedMap<K, Collection<V>> headMap(K toKey) {
-      return new SortedAsMap(sortedMap().headMap(toKey));
-    }
-
-    public SortedMap<K, Collection<V>> subMap(K fromKey, K toKey) {
-      return new SortedAsMap(sortedMap().subMap(fromKey, toKey));
-    }
-
-    public SortedMap<K, Collection<V>> tailMap(K fromKey) {
-      return new SortedAsMap(sortedMap().tailMap(fromKey));
-    }
-
-    SortedSet<K> sortedKeySet;
-
-    // returns a SortedSet, even though returning a Set would be sufficient to
-    // satisfy the SortedMap.keySet() interface
-    @Override public SortedSet<K> keySet() {
-      SortedSet<K> result = sortedKeySet;
-      return (result == null)
-          ? sortedKeySet = new SortedKeySet(sortedMap()) : result;
-    }
-  }
-
-  // Comparison and hashing
-
-  @Override public boolean equals(@Nullable Object object) {
-    if (object == this) {
-      return true;
-    }
-    if (object instanceof Multimap) {
-      Multimap<?, ?> that = (Multimap<?, ?>) object;
-      return this.map.equals(that.asMap());
-    }
-    return false;
-  }
-
-  /**
-   * Returns the hash code for this multimap.
-   *
-   * <p>The hash code of a multimap is defined as the hash code of the map view,
-   * as returned by {@link Multimap#asMap}.
-   *
-   * @see Map#hashCode
-   */
-  @Override public int hashCode() {
-    return map.hashCode();
-  }
-
-  /**
-   * Returns a string representation of the multimap, generated by calling
-   * {@code toString} on the map returned by {@link Multimap#asMap}.
-   *
-   * @return a string representation of the multimap
-   */
-  @Override public String toString() {
-    return map.toString();
-  }
-
-  private static final long serialVersionUID = 2447537837011683357L;
-}
diff --git a/src/com/google/common/collect/AbstractMultiset.java b/src/com/google/common/collect/AbstractMultiset.java
deleted file mode 100644
index c545ea2..0000000
--- a/src/com/google/common/collect/AbstractMultiset.java
+++ /dev/null
@@ -1,297 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-import com.google.common.base.Objects;
-
-import java.util.AbstractCollection;
-import java.util.AbstractSet;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-import java.util.Set;
-
-import javax.annotation.Nullable;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Preconditions.checkState;
-import static com.google.common.collect.Multisets.setCountImpl;
-
-
-/**
- * This class provides a skeletal implementation of the {@link Multiset}
- * interface. A new multiset implementation can be created easily by extending
- * this class and implementing the {@link Multiset#entrySet()} method, plus
- * optionally overriding {@link #add(Object, int)} and
- * {@link #remove(Object, int)} to enable modifications to the multiset.
- *
- * <p>The {@link #contains}, {@link #containsAll}, {@link #count}, and
- * {@link #size} implementations all iterate across the set returned by
- * {@link Multiset#entrySet()}, as do many methods acting on the set returned by
- * {@link #elementSet()}. Override those methods for better performance.
- *
- * @author Kevin Bourrillion
- */
-@GwtCompatible
-abstract class AbstractMultiset<E> extends AbstractCollection<E>
-    implements Multiset<E> {
-  public abstract Set<Entry<E>> entrySet();
-
-  // Query Operations
-
-  @Override public int size() {
-    long sum = 0L;
-    for (Entry<E> entry : entrySet()) {
-      sum += entry.getCount();
-    }
-    return (int) Math.min(sum, Integer.MAX_VALUE);
-  }
-
-  @Override public boolean isEmpty() {
-    return entrySet().isEmpty();
-  }
-
-  @Override public boolean contains(@Nullable Object element) {
-    return elementSet().contains(element);
-  }
-
-  @Override public Iterator<E> iterator() {
-    return new MultisetIterator();
-  }
-
-  private class MultisetIterator implements Iterator<E> {
-    private final Iterator<Entry<E>> entryIterator;
-    private Entry<E> currentEntry;
-    /** Count of subsequent elements equal to current element */
-    private int laterCount;
-    /** Count of all elements equal to current element */
-    private int totalCount;
-    private boolean canRemove;
-
-    MultisetIterator() {
-      this.entryIterator = entrySet().iterator();
-    }
-
-    public boolean hasNext() {
-      return laterCount > 0 || entryIterator.hasNext();
-    }
-
-    public E next() {
-      if (!hasNext()) {
-        throw new NoSuchElementException();
-      }
-      if (laterCount == 0) {
-        currentEntry = entryIterator.next();
-        totalCount = laterCount = currentEntry.getCount();
-      }
-      laterCount--;
-      canRemove = true;
-      return currentEntry.getElement();
-    }
-
-    public void remove() {
-      checkState(canRemove,
-          "no calls to next() since the last call to remove()");
-      if (totalCount == 1) {
-        entryIterator.remove();
-      } else {
-        AbstractMultiset.this.remove(currentEntry.getElement());
-      }
-      totalCount--;
-      canRemove = false;
-    }
-  }
-
-  public int count(Object element) {
-    for (Entry<E> entry : entrySet()) {
-      if (Objects.equal(entry.getElement(), element)) {
-        return entry.getCount();
-      }
-    }
-    return 0;
-  }
-
-  // Modification Operations
-
-  @Override public boolean add(@Nullable E element) {
-    add(element, 1);
-    return true;
-  }
-
-  public int add(E element, int occurrences) {
-    throw new UnsupportedOperationException();
-  }
-
-  @Override public boolean remove(Object element) {
-    return remove(element, 1) > 0;
-  }
-
-  public int remove(Object element, int occurrences) {
-    throw new UnsupportedOperationException();
-  }
-
-  public int setCount(E element, int count) {
-    return setCountImpl(this, element, count);
-  }
-
-  public boolean setCount(E element, int oldCount, int newCount) {
-    return setCountImpl(this, element, oldCount, newCount);
-  }
-
-  // Bulk Operations
-
-  @Override public boolean containsAll(Collection<?> elements) {
-    return elementSet().containsAll(elements);
-  }
-
-  @Override public boolean addAll(Collection<? extends E> elementsToAdd) {
-    if (elementsToAdd.isEmpty()) {
-      return false;
-    }
-    if (elementsToAdd instanceof Multiset) {
-      @SuppressWarnings("unchecked")
-      Multiset<? extends E> that = (Multiset<? extends E>) elementsToAdd;
-      for (Entry<? extends E> entry : that.entrySet()) {
-        add(entry.getElement(), entry.getCount());
-      }
-    } else {
-      super.addAll(elementsToAdd);
-    }
-    return true;
-  }
-
-  @Override public boolean removeAll(Collection<?> elementsToRemove) {
-    Collection<?> collection = (elementsToRemove instanceof Multiset)
-        ? ((Multiset<?>) elementsToRemove).elementSet() : elementsToRemove;
-
-    return elementSet().removeAll(collection);
-    // TODO: implement retainAll similarly?
-  }
-
-  @Override public boolean retainAll(Collection<?> elementsToRetain) {
-    checkNotNull(elementsToRetain);
-    Iterator<Entry<E>> entries = entrySet().iterator();
-    boolean modified = false;
-    while (entries.hasNext()) {
-      Entry<E> entry = entries.next();
-      if (!elementsToRetain.contains(entry.getElement())) {
-        entries.remove();
-        modified = true;
-      }
-    }
-    return modified;
-  }
-
-  @Override public void clear() {
-    entrySet().clear();
-  }
-
-  // Views
-
-  private transient Set<E> elementSet;
-
-  public Set<E> elementSet() {
-    Set<E> result = elementSet;
-    if (result == null) {
-      elementSet = result = createElementSet();
-    }
-    return result;
-  }
-
-  /**
-   * Creates a new instance of this multiset's element set, which will be
-   * returned by {@link #elementSet()}.
-   */
-  Set<E> createElementSet() {
-    return new ElementSet();
-  }
-
-  private class ElementSet extends AbstractSet<E> {
-    @Override public Iterator<E> iterator() {
-      final Iterator<Entry<E>> entryIterator = entrySet().iterator();
-      return new Iterator<E>() {
-        public boolean hasNext() {
-          return entryIterator.hasNext();
-        }
-        public E next() {
-          return entryIterator.next().getElement();
-        }
-        public void remove() {
-          entryIterator.remove();
-        }
-      };
-    }
-    @Override public int size() {
-      return entrySet().size();
-    }
-  }
-
-  // Object methods
-
-  /**
-   * {@inheritDoc}
-   *
-   * <p>This implementation returns {@code true} if {@code other} is a multiset
-   * of the same size and if, for each element, the two multisets have the same
-   * count.
-   */
-  @Override public boolean equals(@Nullable Object object) {
-    if (object == this) {
-      return true;
-    }
-    if (object instanceof Multiset) {
-      Multiset<?> that = (Multiset<?>) object;
-      /*
-       * We can't simply check whether the entry sets are equal, since that
-       * approach fails when a TreeMultiset has a comparator that returns 0
-       * when passed unequal elements.
-       */
-
-      if (this.size() != that.size()) {
-        return false;
-      }
-      for (Entry<?> entry : that.entrySet()) {
-        if (count(entry.getElement()) != entry.getCount()) {
-          return false;
-        }
-      }
-      return true;
-    }
-    return false;
-  }
-
-  /**
-   * {@inheritDoc}
-   *
-   * <p>This implementation returns the hash code of {@link
-   * Multiset#entrySet()}.
-   */
-  @Override public int hashCode() {
-    return entrySet().hashCode();
-  }
-
-  /**
-   * {@inheritDoc}
-   *
-   * <p>This implementation returns the result of invoking {@code toString} on
-   * {@link Multiset#entrySet()}.
-   */
-  @Override public String toString() {
-    return entrySet().toString();
-  }
-}
diff --git a/src/com/google/common/collect/AbstractSetMultimap.java b/src/com/google/common/collect/AbstractSetMultimap.java
deleted file mode 100644
index 9d488f8..0000000
--- a/src/com/google/common/collect/AbstractSetMultimap.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-
-import java.util.Collection;
-import java.util.Map;
-import java.util.Set;
-
-import javax.annotation.Nullable;
-
-/**
- * Basic implementation of the {@link SetMultimap} interface. It's a wrapper
- * around {@link AbstractMultimap} that converts the returned collections into
- * {@code Sets}. The {@link #createCollection} method must return a {@code Set}.
- *
- * @author Jared Levy
- */
-@GwtCompatible
-abstract class AbstractSetMultimap<K, V>
-    extends AbstractMultimap<K, V> implements SetMultimap<K, V> {
-  /**
-   * Creates a new multimap that uses the provided map.
-   *
-   * @param map place to store the mapping from each key to its corresponding
-   *     values
-   */
-  protected AbstractSetMultimap(Map<K, Collection<V>> map) {
-    super(map);
-  }
-
-  @Override abstract Set<V> createCollection();
-
-  @Override public Set<V> get(@Nullable K key) {
-    return (Set<V>) super.get(key);
-  }
-
-  @Override public Set<Map.Entry<K, V>> entries() {
-    return (Set<Map.Entry<K, V>>) super.entries();
-  }
-
-  @Override public Set<V> removeAll(@Nullable Object key) {
-    return (Set<V>) super.removeAll(key);
-  }
-
-  /**
-   * {@inheritDoc}
-   *
-   * <p>Any duplicates in {@code values} will be stored in the multimap once.
-   */
-  @Override public Set<V> replaceValues(
-      @Nullable K key, Iterable<? extends V> values) {
-    return (Set<V>) super.replaceValues(key, values);
-  }
-
-  /**
-   * Stores a key-value pair in the multimap.
-   *
-   * @param key key to store in the multimap
-   * @param value value to store in the multimap
-   * @return {@code true} if the method increased the size of the multimap, or
-   *     {@code false} if the multimap already contained the key-value pair
-   */
-  @Override public boolean put(K key, V value) {
-    return super.put(key, value);
-  }
-
-  /**
-   * Compares the specified object to this multimap for equality.
-   *
-   * <p>Two {@code SetMultimap} instances are equal if, for each key, they
-   * contain the same values. Equality does not depend on the ordering of keys
-   * or values.
-   */
-  @Override public boolean equals(@Nullable Object object) {
-    return super.equals(object);
-  }
-  
-  private static final long serialVersionUID = 7431625294878419160L;  
-}
diff --git a/src/com/google/common/collect/AbstractSortedSetMultimap.java b/src/com/google/common/collect/AbstractSortedSetMultimap.java
deleted file mode 100644
index 720ba69..0000000
--- a/src/com/google/common/collect/AbstractSortedSetMultimap.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-
-import java.util.Collection;
-import java.util.Map;
-import java.util.SortedSet;
-
-import javax.annotation.Nullable;
-
-/**
- * Basic implementation of the {@link SortedSetMultimap} interface. It's a
- * wrapper around {@link AbstractMultimap} that converts the returned
- * collections into sorted sets. The {@link #createCollection} method
- * must return a {@code SortedSet}.
- *
- * @author Jared Levy
- */
-@GwtCompatible
-abstract class AbstractSortedSetMultimap<K, V>
-    extends AbstractSetMultimap<K, V> implements SortedSetMultimap<K, V> {
-  /**
-   * Creates a new multimap that uses the provided map.
-   *
-   * @param map place to store the mapping from each key to its corresponding
-   *     values
-   */
-  protected AbstractSortedSetMultimap(Map<K, Collection<V>> map) {
-    super(map);
-  }
-
-  @Override abstract SortedSet<V> createCollection();
-
-  @Override public SortedSet<V> get(@Nullable K key) {
-    return (SortedSet<V>) super.get(key);
-  }
-
-  @Override public SortedSet<V> removeAll(@Nullable Object key) {
-    return (SortedSet<V>) super.removeAll(key);
-  }
-
-  @Override public SortedSet<V> replaceValues(
-      K key, Iterable<? extends V> values) {
-    return (SortedSet<V>) super.replaceValues(key, values);
-  }
-
-  /**
-   * {@inheritDoc}
-   *
-   * Consequently, the values do not follow their natural ordering or the
-   * ordering of the value comparator.
-   */
-  @Override public Collection<V> values() {
-    return super.values();
-  }
-  
-  private static final long serialVersionUID = 430848587173315748L;  
-}
\ No newline at end of file
diff --git a/src/com/google/common/collect/ArrayListMultimap.java b/src/com/google/common/collect/ArrayListMultimap.java
deleted file mode 100644
index 6b87af6..0000000
--- a/src/com/google/common/collect/ArrayListMultimap.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-import com.google.common.annotations.VisibleForTesting;
-
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import static com.google.common.base.Preconditions.checkArgument;
-
-/**
- * Implementation of {@code Multimap} that uses an {@code ArrayList} to store
- * the values for a given key. A {@link HashMap} associates each key with an
- * {@link ArrayList} of values.
- *
- * <p>When iterating through the collections supplied by this class, the
- * ordering of values for a given key agrees with the order in which the values
- * were added.
- *
- * <p>This multimap allows duplicate key-value pairs. After adding a new
- * key-value pair equal to an existing key-value pair, the {@code
- * ArrayListMultimap} will contain entries for both the new value and the old
- * value.
- *
- * <p>Keys and values may be null. All optional multimap methods are supported,
- * and all returned views are modifiable.
- *
- * <p>The lists returned by {@link #get}, {@link #removeAll}, and {@link
- * #replaceValues} all implement {@link java.util.RandomAccess}.
- *
- * <p>This class is not threadsafe when any concurrent operations update the
- * multimap. Concurrent read operations will work correctly. To allow concurrent
- * update operations, wrap your multimap with a call to {@link
- * Multimaps#synchronizedListMultimap}.
- *
- * @author Jared Levy
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible(serializable = true)
-public final class ArrayListMultimap<K, V> extends AbstractListMultimap<K, V> {
-  // Default from ArrayList
-  private static final int DEFAULT_VALUES_PER_KEY = 10;
-
-  @VisibleForTesting transient int expectedValuesPerKey;
-
-  /**
-   * Creates a new, empty {@code ArrayListMultimap} with the default initial
-   * capacities.
-   */
-  public static <K, V> ArrayListMultimap<K, V> create() {
-    return new ArrayListMultimap<K, V>();
-  }
-
-  /**
-   * Constructs an empty {@code ArrayListMultimap} with enough capacity to hold
-   * the specified numbers of keys and values without resizing.
-   *
-   * @param expectedKeys the expected number of distinct keys
-   * @param expectedValuesPerKey the expected average number of values per key
-   * @throws IllegalArgumentException if {@code expectedKeys} or {@code
-   *      expectedValuesPerKey} is negative
-   */
-  public static <K, V> ArrayListMultimap<K, V> create(
-      int expectedKeys, int expectedValuesPerKey) {
-    return new ArrayListMultimap<K, V>(expectedKeys, expectedValuesPerKey);
-  }
-
-  /**
-   * Constructs an {@code ArrayListMultimap} with the same mappings as the
-   * specified multimap.
-   *
-   * @param multimap the multimap whose contents are copied to this multimap
-   */
-  public static <K, V> ArrayListMultimap<K, V> create(
-      Multimap<? extends K, ? extends V> multimap) {
-    return new ArrayListMultimap<K, V>(multimap);
-  }
-
-  private ArrayListMultimap() {
-    super(new HashMap<K, Collection<V>>());
-    expectedValuesPerKey = DEFAULT_VALUES_PER_KEY;
-  }
-
-  private ArrayListMultimap(int expectedKeys, int expectedValuesPerKey) {
-    super(Maps.<K, Collection<V>>newHashMapWithExpectedSize(expectedKeys));
-    checkArgument(expectedValuesPerKey >= 0);
-    this.expectedValuesPerKey = expectedValuesPerKey;
-  }
-
-  private ArrayListMultimap(Multimap<? extends K, ? extends V> multimap) {
-    this(multimap.keySet().size(),
-        (multimap instanceof ArrayListMultimap) ?
-            ((ArrayListMultimap<?, ?>) multimap).expectedValuesPerKey :
-            DEFAULT_VALUES_PER_KEY);
-    putAll(multimap);
-  }
-
-  /**
-   * Creates a new, empty {@code ArrayList} to hold the collection of values for
-   * an arbitrary key.
-   */
-  @Override List<V> createCollection() {
-    return new ArrayList<V>(expectedValuesPerKey);
-  }
-
-  /**
-   * Reduces the memory used by this {@code ArrayListMultimap}, if feasible.
-   */
-  public void trimToSize() {
-    for (Collection<V> collection : backingMap().values()) {
-      ArrayList<V> arrayList = (ArrayList<V>) collection;
-      arrayList.trimToSize();
-    }
-  }
-
-  /**
-   * @serialData expectedValuesPerKey, number of distinct keys, and then for
-   *     each distinct key: the key, number of values for that key, and the
-   *     key's values
-   */
-  private void writeObject(ObjectOutputStream stream) throws IOException {
-    stream.defaultWriteObject();
-    stream.writeInt(expectedValuesPerKey);
-    Serialization.writeMultimap(this, stream);
-  }
-
-  private void readObject(ObjectInputStream stream)
-      throws IOException, ClassNotFoundException {
-    stream.defaultReadObject();
-    expectedValuesPerKey = stream.readInt();
-    int distinctKeys = Serialization.readCount(stream);
-    Map<K, Collection<V>> map = Maps.newHashMapWithExpectedSize(distinctKeys);
-    setMap(map);
-    Serialization.populateMultimap(this, stream, distinctKeys);
-  }
-
-  private static final long serialVersionUID = 0;
-}
diff --git a/src/com/google/common/collect/AsynchronousComputationException.java b/src/com/google/common/collect/AsynchronousComputationException.java
deleted file mode 100644
index 5fecda0..0000000
--- a/src/com/google/common/collect/AsynchronousComputationException.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2009 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-/**
- * Wraps an exception that occured during a computation in a different thread.
- *
- * @author Bob Lee
- */
-public class AsynchronousComputationException extends ComputationException {
-  /**
-   * Creates a new instance with the given cause.
-   */
-  public AsynchronousComputationException(Throwable cause) {
-    super(cause);
-  }
-  private static final long serialVersionUID = 0;
-}
diff --git a/src/com/google/common/collect/BiMap.java b/src/com/google/common/collect/BiMap.java
deleted file mode 100644
index e300baf..0000000
--- a/src/com/google/common/collect/BiMap.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-
-import java.util.Map;
-import java.util.Set;
-
-import javax.annotation.Nullable;
-
-/**
- * A bimap (or "bidirectional map") is a map that preserves the uniqueness of
- * its values as well as that of its keys. This constraint enables bimaps to
- * support an "inverse view", which is another bimap containing the same entries
- * as this bimap but with reversed keys and values.
- *
- * @author Kevin Bourrillion
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible
-public interface BiMap<K, V> extends Map<K, V> {
-  // Modification Operations
-
-  /**
-   * {@inheritDoc}
-   *
-   * @throws IllegalArgumentException if the given value is already bound to a
-   *     different key in this bimap. The bimap will remain unmodified in this
-   *     event. To avoid this exception, call {@link #forcePut} instead.
-   */
-  V put(@Nullable K key, @Nullable V value);
-
-  /**
-   * An alternate form of {@code put} that silently removes any existing entry
-   * with the value {@code value} before proceeding with the {@link #put}
-   * operation. If the bimap previously contained the provided key-value
-   * mapping, this method has no effect.
-   *
-   * <p>Note that a successful call to this method could cause the size of the
-   * bimap to increase by one, stay the same, or even decrease by one.
-   *
-   * <p><b>Warning</b>: If an existing entry with this value is removed, the key
-   * for that entry is discarded and not returned.
-   *
-   * @param key the key with which the specified value is to be associated
-   * @param value the value to be associated with the specified key
-   * @return the value which was previously associated with the key, which may
-   *     be {@code null}, or {@code null} if there was no previous entry
-   */
-  V forcePut(@Nullable K key, @Nullable V value);
-
-  // Bulk Operations
-
-  /**
-   * {@inheritDoc}
-   *
-   * <p><b>Warning:</b> the results of calling this method may vary depending on
-   * the iteration order of {@code map}.
-   *
-   * @throws IllegalArgumentException if an attempt to {@code put} any
-   *     entry fails. Note that some map entries may have been added to the
-   *     bimap before the exception was thrown.
-   */
-  void putAll(Map<? extends K, ? extends V> map);
-
-  // Views
-
-  /**
-   * {@inheritDoc}
-   *
-   * <p>Because a bimap has unique values, this method returns a {@link Set},
-   * instead of the {@link java.util.Collection} specified in the {@link Map}
-   * interface.
-   */
-  Set<V> values();
-
-  /**
-   * Returns the inverse view of this bimap, which maps each of this bimap's
-   * values to its associated key. The two bimaps are backed by the same data;
-   * any changes to one will appear in the other.
-   *
-   * <p><b>Note:</b>There is no guaranteed correspondence between the iteration
-   * order of a bimap and that of its inverse.
-   *
-   * @return the inverse view of this bimap
-   */
-  BiMap<V, K> inverse();
-}
diff --git a/src/com/google/common/collect/ByFunctionOrdering.java b/src/com/google/common/collect/ByFunctionOrdering.java
deleted file mode 100644
index 08829c6..0000000
--- a/src/com/google/common/collect/ByFunctionOrdering.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-import com.google.common.base.Function;
-import com.google.common.base.Objects;
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.io.Serializable;
-
-import javax.annotation.Nullable;
-
-/**
- * An ordering that orders elements by applying an order to the result of a
- * function on those elements.
- */
-@GwtCompatible(serializable = true)
-final class ByFunctionOrdering<F, T>
-    extends Ordering<F> implements Serializable {
-  final Function<F, ? extends T> function;
-  final Ordering<T> ordering;
-
-  ByFunctionOrdering(
-      Function<F, ? extends T> function, Ordering<T> ordering) {
-    this.function = checkNotNull(function);
-    this.ordering = checkNotNull(ordering);
-  }
-
-  public int compare(F left, F right) {
-    return ordering.compare(function.apply(left), function.apply(right));
-  }
-
-  @Override public boolean equals(@Nullable Object object) {
-    if (object == this) {
-      return true;
-    }
-    if (object instanceof ByFunctionOrdering) {
-      ByFunctionOrdering<?, ?> that = (ByFunctionOrdering<?, ?>) object;
-      return this.function.equals(that.function)
-          && this.ordering.equals(that.ordering);
-    }
-    return false;
-  }
-
-  @Override public int hashCode() {
-    return Objects.hashCode(function, ordering);
-  }
-
-  @Override public String toString() {
-    return ordering + ".onResultOf(" + function + ")";
-  }
-
-  private static final long serialVersionUID = 0;
-}
diff --git a/src/com/google/common/collect/ClassToInstanceMap.java b/src/com/google/common/collect/ClassToInstanceMap.java
deleted file mode 100644
index a832ffa..0000000
--- a/src/com/google/common/collect/ClassToInstanceMap.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-
-import java.util.Map;
-
-import javax.annotation.Nullable;
-
-/**
- * A map, each entry of which maps a Java
- * <a href="http://tinyurl.com/2cmwkz">raw type</a> to an instance of that type.
- * In addition to implementing {@code Map}, the additional type-safe operations
- * {@link #putInstance} and {@link #getInstance} are available.
- *
- * <p>Like any other {@code Map<Class, Object>}, this map may contain entries
- * for primitive types, and a primitive type and its corresponding wrapper type
- * may map to different values.
- *
- * @param <B> the common supertype that all entries must share; often this is
- *     simply {@link Object}
- *
- * @author Kevin Bourrillion
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible
-public interface ClassToInstanceMap<B> extends Map<Class<? extends B>, B> {
-  /**
-   * Returns the value the specified class is mapped to, or {@code null} if no
-   * entry for this class is present. This will only return a value that was
-   * bound to this specific class, not a value that may have been bound to a
-   * subtype.
-   */
-  <T extends B> T getInstance(Class<T> type);
-
-  /**
-   * Maps the specified class to the specified value. Does <i>not</i> associate
-   * this value with any of the class's supertypes.
-   *
-   * @return the value previously associated with this class (possibly {@code
-   *     null}), or {@code null} if there was no previous entry.
-   */
-  <T extends B> T putInstance(Class<T> type, @Nullable T value);
-}
diff --git a/src/com/google/common/collect/Collections2.java b/src/com/google/common/collect/Collections2.java
deleted file mode 100644
index b9decb3..0000000
--- a/src/com/google/common/collect/Collections2.java
+++ /dev/null
@@ -1,301 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-import com.google.common.base.Function;
-import com.google.common.base.Joiner;
-import com.google.common.base.Predicate;
-import com.google.common.base.Predicates;
-
-import java.util.AbstractCollection;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.Set;
-
-import javax.annotation.Nullable;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
-
-/**
- * Provides static methods for working with {@code Collection} instances.
- *
- * @author Chris Povirk
- * @author Mike Bostock
- * @author Jared Levy
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible
-public final class Collections2 {
-  private Collections2() {}
-
-  /**
-   * Returns {@code true} if the collection {@code self} contains all of the
-   * elements in the collection {@code c}.
-   *
-   * <p>This method iterates over the specified collection {@code c}, checking
-   * each element returned by the iterator in turn to see if it is contained in
-   * the specified collection {@code self}. If all elements are so contained,
-   * {@code true} is returned, otherwise {@code false}.
-   *
-   * @param self a collection which might contain all elements in {@code c}
-   * @param c a collection whose elements might be contained by {@code self}
-   */
-  // TODO: Make public?
-  static boolean containsAll(Collection<?> self, Collection<?> c) {
-    checkNotNull(self);
-    for (Object o : c) {
-      if (!self.contains(o)) {
-        return false;
-      }
-    }
-    return true;
-  }
-
-  /**
-   * Converts an iterable into a collection. If the iterable is already a
-   * collection, it is returned. Otherwise, an {@link java.util.ArrayList} is
-   * created with the contents of the iterable in the same iteration order.
-   */
-  static <E> Collection<E> toCollection(Iterable<E> iterable) {
-    return (iterable instanceof Collection)
-        ? (Collection<E>) iterable : Lists.newArrayList(iterable);
-  }
-
-  /**
-   * Returns the elements of {@code unfiltered} that satisfy a predicate. The
-   * returned collection is a live view of {@code unfiltered}; changes to one
-   * affect the other.
-   *
-   * <p>The resulting collection's iterator does not support {@code remove()},
-   * but all other collection methods are supported. The collection's
-   * {@code add()} and {@code addAll()} methods throw an
-   * {@link IllegalArgumentException} if an element that doesn't satisfy the
-   * predicate is provided. When methods such as {@code removeAll()} and
-   * {@code clear()} are called on the filtered collection, only elements that
-   * satisfy the filter will be removed from the underlying collection.
-   *
-   * <p>The returned collection isn't threadsafe or serializable, even if
-   * {@code unfiltered} is.
-   *
-   * <p>Many of the filtered collection's methods, such as {@code size()},
-   * iterate across every element in the underlying collection and determine
-   * which elements satisfy the filter. When a live view is <i>not</i> needed,
-   * it may be faster to copy {@code Iterables.filter(unfiltered, predicate)}
-   * and use the copy.
-   */
-  public static <E> Collection<E> filter(
-      Collection<E> unfiltered, Predicate<? super E> predicate) {
-    if (unfiltered instanceof FilteredCollection) {
-      // Support clear(), removeAll(), and retainAll() when filtering a filtered
-      // collection.
-      return ((FilteredCollection<E>) unfiltered).createCombined(predicate);
-    }
-
-    return new FilteredCollection<E>(
-        checkNotNull(unfiltered), checkNotNull(predicate));
-  }
-
-  /**
-   * Delegates to {@link Collection#contains}.  Returns {@code false} on {@code
-   * ClassCastException}
-   */
-  static boolean safeContains(Collection<?> collection, Object object) {
-    try {
-      return collection.contains(object);
-    } catch (ClassCastException e) {
-      return false;
-    }
-  }
-
-  static class FilteredCollection<E> implements Collection<E> {
-    final Collection<E> unfiltered;
-    final Predicate<? super E> predicate;
-
-    FilteredCollection(Collection<E> unfiltered,
-        Predicate<? super E> predicate) {
-      this.unfiltered = unfiltered;
-      this.predicate = predicate;
-    }
-
-    FilteredCollection<E> createCombined(Predicate<? super E> newPredicate) {
-      return new FilteredCollection<E>(unfiltered,
-          Predicates.<E>and(predicate, newPredicate));
-      // .<E> above needed to compile in JDK 5
-    }
-
-    public boolean add(E element) {
-      checkArgument(predicate.apply(element));
-      return unfiltered.add(element);
-    }
-
-    public boolean addAll(Collection<? extends E> collection) {
-      for (E element : collection) {
-        checkArgument(predicate.apply(element));
-      }
-      return unfiltered.addAll(collection);
-    }
-
-    public void clear() {
-      Iterables.removeIf(unfiltered, predicate);
-    }
-
-    public boolean contains(Object element) {
-      try {
-        // unsafe cast can result in a CCE from predicate.apply(), which we
-        // will catch
-        @SuppressWarnings("unchecked")
-        E e = (E) element;
-        return predicate.apply(e) && unfiltered.contains(element);
-      } catch (NullPointerException e) {
-        return false;
-      } catch (ClassCastException e) {
-        return false;
-      }
-    }
-
-    public boolean containsAll(Collection<?> collection) {
-      for (Object element : collection) {
-        if (!contains(element)) {
-          return false;
-        }
-      }
-      return true;
-    }
-
-    public boolean isEmpty() {
-      return !Iterators.any(unfiltered.iterator(), predicate);
-    }
-
-    public Iterator<E> iterator() {
-      return Iterators.filter(unfiltered.iterator(), predicate);
-    }
-
-    public boolean remove(Object element) {
-      try {
-        // unsafe cast can result in a CCE from predicate.apply(), which we
-        // will catch
-        @SuppressWarnings("unchecked")
-        E e = (E) element;
-        return predicate.apply(e) && unfiltered.remove(element);
-      } catch (NullPointerException e) {
-        return false;
-      } catch (ClassCastException e) {
-        return false;
-      }
-    }
-
-    public boolean removeAll(final Collection<?> collection) {
-      checkNotNull(collection);
-      Predicate<E> combinedPredicate = new Predicate<E>() {
-        public boolean apply(E input) {
-          return predicate.apply(input) && collection.contains(input);
-        }
-      };
-      return Iterables.removeIf(unfiltered, combinedPredicate);
-    }
-
-    public boolean retainAll(final Collection<?> collection) {
-      checkNotNull(collection);
-      Predicate<E> combinedPredicate = new Predicate<E>() {
-        public boolean apply(E input) {
-          return predicate.apply(input) && !collection.contains(input);
-        }
-      };
-      return Iterables.removeIf(unfiltered, combinedPredicate);
-    }
-
-    public int size() {
-      return Iterators.size(iterator());
-    }
-
-    public Object[] toArray() {
-      // creating an ArrayList so filtering happens once
-      return Lists.newArrayList(iterator()).toArray();
-    }
-
-    public <T> T[] toArray(T[] array) {
-      return Lists.newArrayList(iterator()).toArray(array);
-    }
-
-    @Override public String toString() {
-      return Iterators.toString(iterator());
-    }
-  }
-
-  /**
-   * Returns a collection that applies {@code function} to each element of
-   * {@code fromCollection}. The returned collection is a live view of {@code
-   * fromCollection}; changes to one affect the other.
-   *
-   * <p>The returned collection's {@code add()} and {@code addAll()} methods
-   * throw an {@link UnsupportedOperationException}. All other collection
-   * methods are supported, as long as {@code fromCollection} supports them.
-   *
-   * <p>The returned collection isn't threadsafe or serializable, even if
-   * {@code fromCollection} is.
-   *
-   * <p>When a live view is <i>not</i> needed, it may be faster to copy the
-   * transformed collection and use the copy.
-   */
-  public static <F, T> Collection<T> transform(Collection<F> fromCollection,
-      Function<? super F, T> function) {
-    return new TransformedCollection<F, T>(fromCollection, function);
-  }
-
-  static class TransformedCollection<F, T> extends AbstractCollection<T> {
-    final Collection<F> fromCollection;
-    final Function<? super F, ? extends T> function;
-
-    TransformedCollection(Collection<F> fromCollection,
-        Function<? super F, ? extends T> function) {
-      this.fromCollection = checkNotNull(fromCollection);
-      this.function = checkNotNull(function);
-    }
-
-    @Override public void clear() {
-      fromCollection.clear();
-    }
-
-    @Override public boolean isEmpty() {
-      return fromCollection.isEmpty();
-    }
-
-    @Override public Iterator<T> iterator() {
-      return Iterators.transform(fromCollection.iterator(), function);
-    }
-
-    @Override public int size() {
-      return fromCollection.size();
-    }
-  }
-
-  static boolean setEquals(Set<?> thisSet, @Nullable Object object) {
-    if (object == thisSet) {
-      return true;
-    }
-    if (object instanceof Set) {
-      Set<?> thatSet = (Set<?>) object;
-      return thisSet.size() == thatSet.size()
-          && thisSet.containsAll(thatSet);
-    }
-    return false;
-  }
-
-  static final Joiner standardJoiner = Joiner.on(", ");
-}
diff --git a/src/com/google/common/collect/ComparatorOrdering.java b/src/com/google/common/collect/ComparatorOrdering.java
deleted file mode 100644
index 2e79e2f..0000000
--- a/src/com/google/common/collect/ComparatorOrdering.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.io.Serializable;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-
-import javax.annotation.Nullable;
-
-/** An ordering for a pre-existing {@code comparator}. */
-@GwtCompatible(serializable = true)
-final class ComparatorOrdering<T> extends Ordering<T> implements Serializable {
-  final Comparator<T> comparator;
-
-  ComparatorOrdering(Comparator<T> comparator) {
-    this.comparator = checkNotNull(comparator);
-  }
-
-  public int compare(T a, T b) {
-    return comparator.compare(a, b);
-  }
-
-  // Override just to remove a level of indirection from inner loops
-  @Override public int binarySearch(List<? extends T> sortedList, T key) {
-    return Collections.binarySearch(sortedList, key, comparator);
-  }
-
-  // Override just to remove a level of indirection from inner loops
-  @Override public <E extends T> List<E> sortedCopy(Iterable<E> iterable) {
-    List<E> list = Lists.newArrayList(iterable);
-    Collections.sort(list, comparator);
-    return list;
-  }
-
-  @Override public boolean equals(@Nullable Object object) {
-    if (object == this) {
-      return true;
-    }
-    if (object instanceof ComparatorOrdering) {
-      ComparatorOrdering<?> that = (ComparatorOrdering<?>) object;
-      return this.comparator.equals(that.comparator);
-    }
-    return false;
-  }
-
-  @Override public int hashCode() {
-    return comparator.hashCode();
-  }
-
-  @Override public String toString() {
-    return comparator.toString();
-  }
-
-  private static final long serialVersionUID = 0;
-}
diff --git a/src/com/google/common/collect/ComparisonChain.java b/src/com/google/common/collect/ComparisonChain.java
deleted file mode 100644
index a3d0006..0000000
--- a/src/com/google/common/collect/ComparisonChain.java
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- * Copyright (C) 2009 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.primitives.Booleans;
-import com.google.common.primitives.Ints;
-import com.google.common.primitives.Longs;
-
-import java.util.Comparator;
-
-import javax.annotation.Nullable;
-
-/**
- * A utility for performing a "lazy" chained comparison statement, which 
- * performs comparisons only until it finds a nonzero result. For example:
- *
- * <pre class="code">   {@code
- *
- *   public int compareTo(Foo that) {
- *     return ComparisonChain.start()
- *         .compare(this.aString, that.aString)
- *         .compare(this.anInt, that.anInt)
- *         .compare(this.anEnum, that.anEnum, Ordering.nullsLast())
- *         .result();
- *   }}</pre>
- *
- * The value of this expression will have the same sign as the <i>first
- * nonzero</i> comparison result in the chain, or will be zero if every
- * comparison result was zero.
- *
- * <p>Once any comparison returns a nonzero value, remaining comparisons are
- * "short-circuited".
- *
- * @author Mark Davis
- * @author Kevin Bourrillion
- * @since 2010.01.04 <b>tentative</b>
- */
-public abstract class ComparisonChain {
-  private ComparisonChain() {}
-
-  /**
-   * Begins a new chained comparison statement. See example in the class
-   * documentation.
-   */
-  public static ComparisonChain start() {
-    return ACTIVE;
-  }
-
-  private static final ComparisonChain ACTIVE = new ComparisonChain() {
-    @SuppressWarnings("unchecked")
-    @Override public ComparisonChain compare(
-        Comparable left, Comparable right) {
-      return classify(left.compareTo(right));
-    }
-    @Override public <T> ComparisonChain compare(
-        @Nullable T left, @Nullable T right, Comparator<T> comparator) {
-      return classify(comparator.compare(left, right));
-    }
-    @Override public ComparisonChain compare(int left, int right) {
-      return classify(Ints.compare(left, right));
-    }
-    @Override public ComparisonChain compare(long left, long right) {
-      return classify(Longs.compare(left, right));
-    }
-    @Override public ComparisonChain compare(float left, float right) {
-      return classify(Float.compare(left, right));
-    }
-    @Override public ComparisonChain compare(double left, double right) {
-      return classify(Double.compare(left, right));
-    }
-    @Override public ComparisonChain compare(boolean left, boolean right) {
-      return classify(Booleans.compare(left, right));
-    }
-    ComparisonChain classify(int result) {
-      return (result < 0) ? LESS : (result > 0) ? GREATER : ACTIVE;
-    }
-    @Override public int result() {
-      return 0;
-    }
-  };
-
-  private static final ComparisonChain LESS = new InactiveComparisonChain(-1);
-
-  private static final ComparisonChain GREATER = new InactiveComparisonChain(1);
-
-  private static final class InactiveComparisonChain extends ComparisonChain {
-    final int result;
-
-    InactiveComparisonChain(int result) {
-      this.result = result;
-    }
-    @SuppressWarnings("unchecked")
-    @Override public ComparisonChain compare(
-        @Nullable Comparable left, @Nullable Comparable right) {
-      return this;
-    }
-    @Override public <T> ComparisonChain compare(@Nullable T left,
-        @Nullable T right, @Nullable Comparator<T> comparator) {
-      return this;
-    }
-    @Override public ComparisonChain compare(int left, int right) {
-      return this;
-    }
-    @Override public ComparisonChain compare(long left, long right) {
-      return this;
-    }
-    @Override public ComparisonChain compare(float left, float right) {
-      return this;
-    }
-    @Override public ComparisonChain compare(double left, double right) {
-      return this;
-    }
-    @Override public ComparisonChain compare(boolean left, boolean right) {
-      return this;
-    }
-    @Override public int result() {
-      return result;
-    }
-  }
-
-  /**
-   * Compares two comparable objects as specified by {@link
-   * Comparable#compareTo}, <i>if</i> the result of this comparison chain
-   * has not already been determined.
-   */
-  public abstract ComparisonChain compare(
-      Comparable<?> left, Comparable<?> right);
-
-  /**
-   * Compares two objects using a comparator, <i>if</i> the result of this
-   * comparison chain has not already been determined.
-   */
-  public abstract <T> ComparisonChain compare(
-      @Nullable T left, @Nullable T right, Comparator<T> comparator);
-
-  /**
-   * Compares two {@code int} values as specified by {@link Ints#compare},
-   * <i>if</i> the result of this comparison chain has not already been
-   * determined.
-   */
-  public abstract ComparisonChain compare(int left, int right);
-
-  /**
-   * Compares two {@code long} values as specified by {@link Longs#compare},
-   * <i>if</i> the result of this comparison chain has not already been
-   * determined.
-   */
-  public abstract ComparisonChain compare(long left, long right);
-
-  /**
-   * Compares two {@code float} values as specified by {@link
-   * Float#compare}, <i>if</i> the result of this comparison chain has not
-   * already been determined.
-   */
-  public abstract ComparisonChain compare(float left, float right);
-
-  /**
-   * Compares two {@code double} values as specified by {@link
-   * Double#compare}, <i>if</i> the result of this comparison chain has not
-   * already been determined.
-   */
-  public abstract ComparisonChain compare(double left, double right);
-
-  /**
-   * Compares two {@code boolean} values as specified by {@link
-   * Booleans#compare}, <i>if</i> the result of this comparison chain has not
-   * already been determined.
-   */
-  public abstract ComparisonChain compare(boolean left, boolean right);
-
-  /**
-   * Ends this comparison chain and returns its result: a value having the
-   * same sign as the first nonzero comparison result in the chain, or zero if
-   * every result was zero.
-   */
-  public abstract int result();
-}
diff --git a/src/com/google/common/collect/CompoundOrdering.java b/src/com/google/common/collect/CompoundOrdering.java
deleted file mode 100644
index 7c1e169..0000000
--- a/src/com/google/common/collect/CompoundOrdering.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-
-import java.io.Serializable;
-import java.util.Comparator;
-import java.util.List;
-
-/** An ordering that tries several comparators in order. */
-@GwtCompatible(serializable = true)
-final class CompoundOrdering<T> extends Ordering<T> implements Serializable {
-  final ImmutableList<Comparator<? super T>> comparators;
-
-  CompoundOrdering(Comparator<? super T> primary,
-      Comparator<? super T> secondary) {
-    this.comparators
-        = ImmutableList.<Comparator<? super T>>of(primary, secondary);
-  }
-
-  CompoundOrdering(Iterable<? extends Comparator<? super T>> comparators) {
-    this.comparators = ImmutableList.copyOf(comparators);
-  }
-
-  CompoundOrdering(List<? extends Comparator<? super T>> comparators,
-      Comparator<? super T> lastComparator) {
-    this.comparators = new ImmutableList.Builder<Comparator<? super T>>()
-        .addAll(comparators).add(lastComparator).build();
-  }
-
-  public int compare(T left, T right) {
-    for (Comparator<? super T> comparator : comparators) {
-      int result = comparator.compare(left, right);
-      if (result != 0) {
-        return result;
-      }
-    }
-    return 0;
-  }
-
-  @Override public boolean equals(Object object) {
-    if (object == this) {
-      return true;
-    }
-    if (object instanceof CompoundOrdering) {
-      CompoundOrdering<?> that = (CompoundOrdering<?>) object;
-      return this.comparators.equals(that.comparators);
-    }
-    return false;
-  }
-
-  @Override public int hashCode() {
-    return comparators.hashCode();
-  }
-
-  @Override public String toString() {
-    return "Ordering.compound(" + comparators + ")";
-  }
-
-  private static final long serialVersionUID = 0;
-}
diff --git a/src/com/google/common/collect/ComputationException.java b/src/com/google/common/collect/ComputationException.java
deleted file mode 100644
index 5c29774..0000000
--- a/src/com/google/common/collect/ComputationException.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2009 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-
-/**
- * Wraps an exception that occured during a computation.
- */
-@GwtCompatible
-public class ComputationException extends RuntimeException {
-  /**
-   * Creates a new instance with the given cause.
-   */
-  public ComputationException(Throwable cause) {
-    super(cause);
-  }
-  private static final long serialVersionUID = 0;
-}
diff --git a/src/com/google/common/collect/ConcurrentHashMultiset.java b/src/com/google/common/collect/ConcurrentHashMultiset.java
deleted file mode 100644
index 0421199..0000000
--- a/src/com/google/common/collect/ConcurrentHashMultiset.java
+++ /dev/null
@@ -1,486 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.VisibleForTesting;
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.collect.Multisets.checkNonnegative;
-import com.google.common.collect.Serialization.FieldSetter;
-
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.io.Serializable;
-import java.util.AbstractSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-
-import javax.annotation.Nullable;
-
-/**
- * A multiset that supports concurrent modifications and that provides atomic
- * versions of most {@code Multiset} operations (exceptions where noted). Null
- * elements are not supported.
- *
- * @author Cliff L. Biffle
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-public final class ConcurrentHashMultiset<E> extends AbstractMultiset<E>
-    implements Serializable {
-  /*
-   * The ConcurrentHashMultiset's atomic operations are implemented in terms of
-   * ConcurrentMap's atomic operations. Many of them, such as add(E, int), are
-   * read-modify-write sequences, and so are implemented as loops that wrap
-   * ConcurrentMap's compare-and-set operations (like putIfAbsent).
-   */
-
-  /** The number of occurrences of each element. */
-  private final transient ConcurrentMap<E, Integer> countMap;
-
-  // This constant allows the deserialization code to set a final field. This
-  // holder class makes sure it is not initialized unless an instance is
-  // deserialized.
-  private static class FieldSettersHolder {
-    @SuppressWarnings("unchecked")
-    // eclipse doesn't like the raw type here, but it's harmless
-    static final FieldSetter<ConcurrentHashMultiset> COUNT_MAP_FIELD_SETTER
-        = Serialization.getFieldSetter(
-            ConcurrentHashMultiset.class, "countMap");
-  }
-
-  /**
-   * Creates a new, empty {@code ConcurrentHashMultiset} using the default
-   * initial capacity, load factor, and concurrency settings.
-   */
-  public static <E> ConcurrentHashMultiset<E> create() {
-    return new ConcurrentHashMultiset<E>(new ConcurrentHashMap<E, Integer>());
-  }
-
-  /**
-   * Creates a new {@code ConcurrentHashMultiset} containing the specified
-   * elements, using the default initial capacity, load factor, and concurrency
-   * settings.
-   *
-   * @param elements the elements that the multiset should contain
-   */
-  public static <E> ConcurrentHashMultiset<E> create(
-      Iterable<? extends E> elements) {
-    ConcurrentHashMultiset<E> multiset = ConcurrentHashMultiset.create();
-    Iterables.addAll(multiset, elements);
-    return multiset;
-  }
-
-  /**
-   * Creates an instance using {@code countMap} to store elements and their
-   * counts.
-   *
-   * <p>This instance will assume ownership of {@code countMap}, and other code
-   * should not maintain references to the map or modify it in any way.
-   *
-   * @param countMap backing map for storing the elements in the multiset and
-   *     their counts. It must be empty.
-   * @throws IllegalArgumentException if {@code countMap} is not empty
-   */
-  @VisibleForTesting ConcurrentHashMultiset(
-      ConcurrentMap<E, Integer> countMap) {
-    checkArgument(countMap.isEmpty());
-    this.countMap = countMap;
-  }
-
-  // Query Operations
-
-  /**
-   * Returns the number of occurrences of {@code element} in this multiset.
-   *
-   * @param element the element to look for
-   * @return the nonnegative number of occurrences of the element
-   */
-  @Override public int count(@Nullable Object element) {
-    try {
-      return unbox(countMap.get(element));
-    } catch (NullPointerException e) {
-      return 0;
-    } catch (ClassCastException e) {
-      return 0;
-    }
-  }
-
-  /**
-   * {@inheritDoc}
-   *
-   * <p>If the data in the multiset is modified by any other threads during this
-   * method, it is undefined which (if any) of these modifications will be
-   * reflected in the result.
-   */
-  @Override public int size() {
-    long sum = 0L;
-    for (Integer value : countMap.values()) {
-      sum += value;
-    }
-    return (int) Math.min(sum, Integer.MAX_VALUE);
-  }
-
-  /*
-   * Note: the superclass toArray() methods assume that size() gives a correct
-   * answer, which ours does not.
-   */
-
-  @Override public Object[] toArray() {
-    return snapshot().toArray();
-  }
-
-  @Override public <T> T[] toArray(T[] array) {
-    return snapshot().toArray(array);
-  }
-
-  /*
-   * We'd love to use 'new ArrayList(this)' or 'list.addAll(this)', but
-   * either of these would recurse back to us again!
-   */
-  private List<E> snapshot() {
-    List<E> list = Lists.newArrayListWithExpectedSize(size());
-    for (Multiset.Entry<E> entry : entrySet()) {
-      E element = entry.getElement();
-      for (int i = entry.getCount(); i > 0; i--) {
-        list.add(element);
-      }
-    }
-    return list;
-  }
-
-  // Modification Operations
-
-  /**
-   * Adds a number of occurrences of the specified element to this multiset.
-   *
-   * @param element the element to add
-   * @param occurrences the number of occurrences to add
-   * @return the previous count of the element before the operation; possibly
-   *     zero
-   * @throws IllegalArgumentException if {@code occurrences} is negative, or if
-   *     the resulting amount would exceed {@link Integer#MAX_VALUE}
-   */
-  @Override public int add(E element, int occurrences) {
-    if (occurrences == 0) {
-      return count(element);
-    }
-    checkArgument(occurrences > 0, "Invalid occurrences: %s", occurrences);
-
-    while (true) {
-      int current = count(element);
-      if (current == 0) {
-        if (countMap.putIfAbsent(element, occurrences) == null) {
-          return 0;
-        }
-      } else {
-        checkArgument(occurrences <= Integer.MAX_VALUE - current,
-            "Overflow adding %s occurrences to a count of %s",
-            occurrences, current);
-        int next = current + occurrences;
-        if (countMap.replace(element, current, next)) {
-          return current;
-        }
-      }
-      // If we're still here, there was a race, so just try again.
-    }
-  }
-
-  /**
-   * Removes a number of occurrences of the specified element from this
-   * multiset. If the multiset contains fewer than this number of occurrences to
-   * begin with, all occurrences will be removed.
-   *
-   * @param element the element whose occurrences should be removed
-   * @param occurrences the number of occurrences of the element to remove
-   * @return the count of the element before the operation; possibly zero
-   * @throws IllegalArgumentException if {@code occurrences} is negative
-   */
-  @Override public int remove(@Nullable Object element, int occurrences) {
-    if (occurrences == 0) {
-      return count(element);
-    }
-    checkArgument(occurrences > 0, "Invalid occurrences: %s", occurrences);
-
-    while (true) {
-      int current = count(element);
-      if (current == 0) {
-        return 0;
-      }
-      if (occurrences >= current) {
-        if (countMap.remove(element, current)) {
-          return current;
-        }
-      } else {
-        // We know it's an "E" because it already exists in the map.
-        @SuppressWarnings("unchecked")
-        E casted = (E) element;
-
-        if (countMap.replace(casted, current, current - occurrences)) {
-          return current;
-        }
-      }
-      // If we're still here, there was a race, so just try again.
-    }
-  }
-
-  /**
-   * Removes <b>all</b> occurrences of the specified element from this multiset.
-   * This method complements {@link Multiset#remove(Object)}, which removes only
-   * one occurrence at a time.
-   *
-   * @param element the element whose occurrences should all be removed
-   * @return the number of occurrences successfully removed, possibly zero
-   */
-  private int removeAllOccurrences(@Nullable Object element) {
-    try {
-      return unbox(countMap.remove(element));
-    } catch (NullPointerException e) {
-      return 0;
-    } catch (ClassCastException e) {
-      return 0;
-    }
-  }
-
-  /**
-   * Removes exactly the specified number of occurrences of {@code element}, or
-   * makes no change if this is not possible.
-   *
-   * <p>This method, in contrast to {@link #remove(Object, int)}, has no effect
-   * when the element count is smaller than {@code occurrences}.
-   *
-   * @param element the element to remove
-   * @param occurrences the number of occurrences of {@code element} to remove
-   * @return {@code true} if the removal was possible (including if {@code
-   *     occurrences} is zero)
-   */
-  public boolean removeExactly(@Nullable Object element, int occurrences) {
-    if (occurrences == 0) {
-      return true;
-    }
-    checkArgument(occurrences > 0, "Invalid occurrences: %s", occurrences);
-
-    while (true) {
-      int current = count(element);
-      if (occurrences > current) {
-        return false;
-      }
-      if (occurrences == current) {
-        if (countMap.remove(element, occurrences)) {
-          return true;
-        }
-      } else {
-        @SuppressWarnings("unchecked") // it's in the map, must be an "E"
-        E casted = (E) element;
-        if (countMap.replace(casted, current, current - occurrences)) {
-          return true;
-        }
-      }
-      // If we're still here, there was a race, so just try again.
-    }
-  }
-
-  /**
-   * Adds or removes occurrences of {@code element} such that the {@link #count}
-   * of the element becomes {@code count}.
-   *
-   * @return the count of {@code element} in the multiset before this call
-   * @throws IllegalArgumentException if {@code count} is negative
-   */
-  @Override public int setCount(E element, int count) {
-    checkNonnegative(count, "count");
-    return (count == 0)
-        ? removeAllOccurrences(element)
-        : unbox(countMap.put(element, count));
-  }
-
-  /**
-   * Sets the number of occurrences of {@code element} to {@code newCount}, but
-   * only if the count is currently {@code oldCount}. If {@code element} does
-   * not appear in the multiset exactly {@code oldCount} times, no changes will
-   * be made.
-   *
-   * @return {@code true} if the change was successful. This usually indicates
-   *     that the multiset has been modified, but not always: in the case that
-   *     {@code oldCount == newCount}, the method will return {@code true} if
-   *     the condition was met.
-   * @throws IllegalArgumentException if {@code oldCount} or {@code newCount} is
-   *     negative
-   */
-  @Override public boolean setCount(E element, int oldCount, int newCount) {
-    checkNonnegative(oldCount, "oldCount");
-    checkNonnegative(newCount, "newCount");
-    if (newCount == 0) {
-      if (oldCount == 0) {
-        // No change to make, but must return true if the element is not present
-        return !countMap.containsKey(element);
-      } else {
-        return countMap.remove(element, oldCount);
-      }
-    }
-    if (oldCount == 0) {
-      return countMap.putIfAbsent(element, newCount) == null;
-    }
-    return countMap.replace(element, oldCount, newCount);
-  }
-
-  // Views
-
-  @Override Set<E> createElementSet() {
-    final Set<E> delegate = countMap.keySet();
-    return new ForwardingSet<E>() {
-      @Override protected Set<E> delegate() {
-        return delegate;
-      }
-      @Override public boolean remove(Object object) {
-        try {
-          return delegate.remove(object);
-        } catch (NullPointerException e) {
-          return false;
-        } catch (ClassCastException e) {
-          return false;
-        }
-      }
-    };
-  }
-
-  private transient EntrySet entrySet;
-
-  @Override public Set<Multiset.Entry<E>> entrySet() {
-    EntrySet result = entrySet;
-    if (result == null) {
-      entrySet = result = new EntrySet();
-    }
-    return result;
-  }
-
-  private class EntrySet extends AbstractSet<Multiset.Entry<E>> {
-    @Override public int size() {
-      return countMap.size();
-    }
-
-    @Override public boolean isEmpty() {
-      return countMap.isEmpty();
-    }
-
-    @Override public boolean contains(Object object) {
-      if (object instanceof Multiset.Entry) {
-        Multiset.Entry<?> entry = (Multiset.Entry<?>) object;
-        Object element = entry.getElement();
-        int entryCount = entry.getCount();
-        return entryCount > 0 && count(element) == entryCount;
-      }
-      return false;
-    }
-
-    @Override public Iterator<Multiset.Entry<E>> iterator() {
-      final Iterator<Map.Entry<E, Integer>> backingIterator
-          = countMap.entrySet().iterator();
-      return new Iterator<Multiset.Entry<E>>() {
-        public boolean hasNext() {
-          return backingIterator.hasNext();
-        }
-
-        public Multiset.Entry<E> next() {
-          Map.Entry<E, Integer> backingEntry = backingIterator.next();
-          return Multisets.immutableEntry(
-              backingEntry.getKey(), backingEntry.getValue());
-        }
-
-        public void remove() {
-          backingIterator.remove();
-        }
-      };
-    }
-
-    /*
-     * Note: the superclass toArray() methods assume that size() gives a correct
-     * answer, which ours does not.
-     */
-
-    @Override public Object[] toArray() {
-      return snapshot().toArray();
-    }
-
-    @Override public <T> T[] toArray(T[] array) {
-      return snapshot().toArray(array);
-    }
-
-    /*
-     * We'd love to use 'new ArrayList(this)' or 'list.addAll(this)', but
-     * either of these would recurse back to us again!
-     */
-    private List<Multiset.Entry<E>> snapshot() {
-      List<Multiset.Entry<E>> list = Lists.newArrayListWithExpectedSize(size());
-      for (Multiset.Entry<E> entry : this) {
-        list.add(entry);
-      }
-      return list;
-    }
-
-    @Override public boolean remove(Object object) {
-      if (object instanceof Multiset.Entry) {
-        Multiset.Entry<?> entry = (Multiset.Entry<?>) object;
-        Object element = entry.getElement();
-        int entryCount = entry.getCount();
-        return countMap.remove(element, entryCount);
-      }
-      return false;
-    }
-
-    @Override public void clear() {
-      countMap.clear();
-    }
-
-    /**
-     * The hash code is the same as countMap's, though the objects aren't equal.
-     */
-    @Override public int hashCode() {
-      return countMap.hashCode();
-    }
-  }
-
-  /**
-   * We use a special form of unboxing that treats null as zero.
-   */
-  private static int unbox(Integer i) {
-    return (i == null) ? 0 : i;
-  }
-
-  /**
-   * @serialData the number of distinct elements, the first element, its count,
-   *     the second element, its count, and so on
-   */
-  private void writeObject(ObjectOutputStream stream) throws IOException {
-    stream.defaultWriteObject();
-    // creating HashMultiset to handle concurrent changes
-    Serialization.writeMultiset(HashMultiset.create(this), stream);
-  }
-
-  private void readObject(ObjectInputStream stream)
-      throws IOException, ClassNotFoundException {
-    stream.defaultReadObject();
-    FieldSettersHolder.COUNT_MAP_FIELD_SETTER.set(
-        this, new ConcurrentHashMap<Object, Object>());
-    Serialization.populateMultiset(this, stream);
-  }
-
-  private static final long serialVersionUID = 0L;
-}
diff --git a/src/com/google/common/collect/ConstrainedMap.java b/src/com/google/common/collect/ConstrainedMap.java
deleted file mode 100644
index 8eceef0..0000000
--- a/src/com/google/common/collect/ConstrainedMap.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-
-import javax.annotation.Nullable;
-
-/**
- * Factory and utilities pertaining to the {@code MapConstraint} interface.
- *
- * @author Mike Bostock
- */
-@GwtCompatible
-class ConstrainedMap<K, V> extends ForwardingMap<K, V> {
-  final Map<K, V> delegate;
-  final MapConstraint<? super K, ? super V> constraint;
-  private volatile Set<Entry<K, V>> entrySet;
-
-  ConstrainedMap(
-      Map<K, V> delegate, MapConstraint<? super K, ? super V> constraint) {
-    this.delegate = checkNotNull(delegate);
-    this.constraint = checkNotNull(constraint);
-  }
-
-  @Override protected Map<K, V> delegate() {
-    return delegate;
-  }
-  @Override public Set<Entry<K, V>> entrySet() {
-    if (entrySet == null) {
-      entrySet = constrainedEntrySet(delegate.entrySet(), constraint);
-    }
-    return entrySet;
-  }
-  @Override public V put(K key, V value) {
-    constraint.checkKeyValue(key, value);
-    return delegate.put(key, value);
-  }
-  @Override public void putAll(Map<? extends K, ? extends V> map) {
-    for (Entry<? extends K, ? extends V> entry : map.entrySet()) {
-      put(entry.getKey(), entry.getValue());
-    }
-  }
-
-  private static <K, V> Entry<K, V> constrainedEntry(
-      final Entry<K, V> entry,
-      final MapConstraint<? super K, ? super V> constraint) {
-    checkNotNull(entry);
-    checkNotNull(constraint);
-    return new ForwardingMapEntry<K, V>() {
-      @Override protected Entry<K, V> delegate() {
-        return entry;
-      }
-      @Override public V setValue(V value) {
-        constraint.checkKeyValue(getKey(), value);
-        return entry.setValue(value);
-      }
-    };
-  }
-
-  private static <K, V> Set<Entry<K, V>> constrainedEntrySet(
-      Set<Entry<K, V>> entries,
-      MapConstraint<? super K, ? super V> constraint) {
-    return new ConstrainedEntrySet<K, V>(entries, constraint);
-  }
-
-  private static class ConstrainedEntries<K, V>
-      extends ForwardingCollection<Entry<K, V>> {
-    final MapConstraint<? super K, ? super V> constraint;
-    final Collection<Entry<K, V>> entries;
-
-    ConstrainedEntries(Collection<Entry<K, V>> entries,
-        MapConstraint<? super K, ? super V> constraint) {
-      this.entries = entries;
-      this.constraint = constraint;
-    }
-    @Override protected Collection<Entry<K, V>> delegate() {
-      return entries;
-    }
-
-    @Override public Iterator<Entry<K, V>> iterator() {
-      final Iterator<Entry<K, V>> iterator = entries.iterator();
-      return new ForwardingIterator<Entry<K, V>>() {
-        @Override public Entry<K, V> next() {
-          return constrainedEntry(iterator.next(), constraint);
-        }
-        @Override protected Iterator<Entry<K, V>> delegate() {
-          return iterator;
-        }
-      };
-    }
-
-    // See Collections.CheckedMap.CheckedEntrySet for details on attacks.
-
-    @Override public Object[] toArray() {
-      return ObjectArrays.toArrayImpl(this);
-    }
-    @Override public <T> T[] toArray(T[] array) {
-      return ObjectArrays.toArrayImpl(this, array);
-    }
-    @Override public boolean contains(Object o) {
-      return Maps.containsEntryImpl(delegate(), o);
-    }
-    @Override public boolean containsAll(Collection<?> c) {
-      return Collections2.containsAll(this, c);
-    }
-    @Override public boolean remove(Object o) {
-      return Maps.removeEntryImpl(delegate(), o);
-    }
-    @Override public boolean removeAll(Collection<?> c) {
-      return Iterators.removeAll(iterator(), c);
-    }
-    @Override public boolean retainAll(Collection<?> c) {
-      return Iterators.retainAll(iterator(), c);
-    }
-  }
-
-  static class ConstrainedEntrySet<K, V>
-      extends ConstrainedEntries<K, V> implements Set<Entry<K, V>> {
-    ConstrainedEntrySet(Set<Entry<K, V>> entries,
-        MapConstraint<? super K, ? super V> constraint) {
-      super(entries, constraint);
-    }
-
-    // See Collections.CheckedMap.CheckedEntrySet for details on attacks.
-
-    @Override public boolean equals(@Nullable Object object) {
-      return Collections2.setEquals(this, object);
-    }
-
-    @Override public int hashCode() {
-      return Sets.hashCodeImpl(this);
-    }
-  }
-}
diff --git a/src/com/google/common/collect/CustomConcurrentHashMap.java b/src/com/google/common/collect/CustomConcurrentHashMap.java
deleted file mode 100644
index d9089ba..0000000
--- a/src/com/google/common/collect/CustomConcurrentHashMap.java
+++ /dev/null
@@ -1,2161 +0,0 @@
-/*
- * Copyright (C) 2009 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.base.Function;
-
-import java.io.IOException;
-import java.io.Serializable;
-import java.lang.reflect.Array;
-import java.lang.reflect.Field;
-import java.util.AbstractCollection;
-import java.util.AbstractMap;
-import java.util.AbstractSet;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.NoSuchElementException;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.atomic.AtomicReferenceArray;
-import java.util.concurrent.locks.ReentrantLock;
-
-import javax.annotation.Nullable;
-
-/**
- * A framework for concurrent hash map implementations. The
- * CustomConcurrentHashMap class itself is not extensible and does not contain
- * any methods. Use {@link Builder} to create a custom concurrent hash map
- * instance. Client libraries implement {@link Strategy}, and this class
- * provides the surrounding concurrent data structure which implements {@link
- * ConcurrentMap}. Additionally supports implementing maps where {@link
- * Map#get} atomically computes values on demand (see {@link
- * Builder#buildComputingMap(CustomConcurrentHashMap.ComputingStrategy,
- * Function)}).
- *
- * <p>The resulting hash table supports full concurrency of retrievals and
- * adjustable expected concurrency for updates. Even though all operations are
- * thread-safe, retrieval operations do <i>not</i> entail locking,
- * and there is <i>not</i> any support for locking the entire table
- * in a way that prevents all access.
- *
- * <p>Retrieval operations (including {@link Map#get}) generally do not
- * block, so may overlap with update operations (including
- * {@link Map#put} and {@link Map#remove}). Retrievals reflect the results
- * of the most recently <i>completed</i> update operations holding
- * upon their onset. For aggregate operations such as {@link Map#putAll}
- * and {@link Map#clear}, concurrent retrievals may reflect insertion or
- * removal of only some entries. Similarly, iterators return elements
- * reflecting the state of the hash table at some point at or since the
- * creation of the iterator. They do <i>not</i> throw
- * {@link java.util.ConcurrentModificationException}. However, iterators can
- * only be used by one thread at a time.
- *
- * <p>The resulting {@link ConcurrentMap} and its views and iterators implement
- * all of the <i>optional</i> methods of the {@link java.util.Map} and {@link
- * java.util.Iterator} interfaces. Partially reclaimed entries are never
- * exposed through the views or iterators.
- *
- * <p>For example, the following strategy emulates the behavior of
- * {@link java.util.concurrent.ConcurrentHashMap}:
- *
- * <pre> {@code
- * class ConcurrentHashMapStrategy<K, V>
- *     implements CustomConcurrentHashMap.Strategy<K, V,
- *     InternalEntry<K, V>>, Serializable {
- *   public InternalEntry<K, V> newEntry(K key, int hash,
- *       InternalEntry<K, V> next) {
- *     return new InternalEntry<K, V>(key, hash, null, next);
- *   }
- *   public InternalEntry<K, V> copyEntry(K key,
- *       InternalEntry<K, V> original, InternalEntry<K, V> next) {
- *     return new InternalEntry<K, V>(key, original.hash, original.value, next);
- *   }
- *   public void setValue(InternalEntry<K, V> entry, V value) {
- *     entry.value = value;
- *   }
- *   public V getValue(InternalEntry<K, V> entry) { return entry.value; }
- *   public boolean equalKeys(K a, Object b) { return a.equals(b); }
- *   public boolean equalValues(V a, Object b) { return a.equals(b); }
- *   public int hashKey(Object key) { return key.hashCode(); }
- *   public K getKey(InternalEntry<K, V> entry) { return entry.key; }
- *   public InternalEntry<K, V> getNext(InternalEntry<K, V> entry) {
- *     return entry.next;
- *   }
- *   public int getHash(InternalEntry<K, V> entry) { return entry.hash; }
- *   public void setInternals(CustomConcurrentHashMap.Internals<K, V,
- *       InternalEntry<K, V>> internals) {} // ignored
- * }
- *
- * class InternalEntry<K, V> {
- *   final K key;
- *   final int hash;
- *   volatile V value;
- *   final InternalEntry<K, V> next;
- *   InternalEntry(K key, int hash, V value, InternalEntry<K, V> next) {
- *     this.key = key;
- *     this.hash = hash;
- *     this.value = value;
- *     this.next = next;
- *   }
- * }
- * }</pre>
- *
- * To create a {@link java.util.concurrent.ConcurrentMap} using the strategy
- * above:
- *
- * <pre>{@code
- *   ConcurrentMap<K, V> map = new CustomConcurrentHashMap.Builder()
- *       .build(new ConcurrentHashMapStrategy<K, V>());
- * }</pre>
- *
- * @author Bob Lee
- * @author Doug Lea
- */
-final class CustomConcurrentHashMap {
-
-  /** Prevents instantiation. */
-  private CustomConcurrentHashMap() {}
-
-  /**
-   * Builds a custom concurrent hash map.
-   */
-  static final class Builder {
-    private static final int DEFAULT_INITIAL_CAPACITY = 16;
-    private static final int DEFAULT_CONCURRENCY_LEVEL = 16;
-    
-    private static final int UNSET_INITIAL_CAPACITY = -1;
-    private static final int UNSET_CONCURRENCY_LEVEL = -1;
-    
-    int initialCapacity = UNSET_INITIAL_CAPACITY;
-    int concurrencyLevel = UNSET_CONCURRENCY_LEVEL;
-
-    /**
-     * Sets a custom initial capacity (defaults to 16). Resizing this or any
-     * other kind of hash table is a relatively slow operation, so, when
-     * possible, it is a good idea to provide estimates of expected table
-     * sizes.
-     *
-     * @throws IllegalArgumentException if initialCapacity < 0
-     */
-    public Builder initialCapacity(int initialCapacity) {
-      if (this.initialCapacity != UNSET_INITIAL_CAPACITY) {
-        throw new IllegalStateException(
-            "initial capacity was already set to " + this.initialCapacity);
-      }
-      if (initialCapacity < 0) {
-        throw new IllegalArgumentException();
-      }
-      this.initialCapacity = initialCapacity;
-      return this;
-    }
-
-    /**
-     * Guides the allowed concurrency among update operations. Used as a
-     * hint for internal sizing. The table is internally partitioned to try to
-     * permit the indicated number of concurrent updates without contention.
-     * Because placement in hash tables is essentially random, the actual
-     * concurrency will vary. Ideally, you should choose a value to accommodate
-     * as many threads as will ever concurrently modify the table. Using a
-     * significantly higher value than you need can waste space and time,
-     * and a significantly lower value can lead to thread contention. But
-     * overestimates and underestimates within an order of magnitude do
-     * not usually have much noticeable impact. A value of one is
-     * appropriate when it is known that only one thread will modify and
-     * all others will only read. Defaults to {@literal 16}.
-     *
-     * @throws IllegalArgumentException if concurrencyLevel < 0
-     */
-    public Builder concurrencyLevel(int concurrencyLevel) {
-      if (this.concurrencyLevel != UNSET_CONCURRENCY_LEVEL) {
-        throw new IllegalStateException(
-            "concurrency level was already set to " + this.concurrencyLevel);
-      }
-      if (concurrencyLevel <= 0) {
-        throw new IllegalArgumentException();
-      }
-      this.concurrencyLevel = concurrencyLevel;
-      return this;
-    }
-
-    /**
-     * Creates a new concurrent hash map backed by the given strategy.
-     *
-     * @param strategy used to implement and manipulate the entries
-     *
-     * @param <K> the type of keys to be stored in the returned map
-     * @param <V> the type of values to be stored in the returned map
-     * @param <E> the type of internal entry to be stored in the returned map
-     *
-     * @throws NullPointerException if strategy is null
-     */
-    public <K, V, E> ConcurrentMap<K, V> buildMap(Strategy<K, V, E> strategy) {
-      if (strategy == null) {
-        throw new NullPointerException("strategy");
-      }
-      return new Impl<K, V, E>(strategy, this);
-    }
-
-    /**
-     * Creates a {@link ConcurrentMap}, backed by the given strategy, that
-     * supports atomic, on-demand computation of values. {@link Map#get}
-     * returns the value corresponding to the given key, atomically computes
-     * it using the computer function passed to this builder, or waits for
-     * another thread to compute the value if necessary. Only one value will
-     * be computed for each key at a given time.
-     *
-     * <p>If an entry's value has not finished computing yet, query methods
-     * besides {@link java.util.Map#get} return immediately as if an entry
-     * doesn't exist. In other words, an entry isn't externally visible until
-     * the value's computation completes.
-     *
-     * <p>{@link Map#get} in the returned map implementation throws:
-     * <ul>
-     * <li>{@link NullPointerException} if the key is null or the
-     *  computer returns null</li>
-     * <li>or {@link ComputationException} wrapping an exception thrown by the
-     *  computation</li>
-     * </ul>
-     *
-     * <p><b>Note:</b> Callers of {@code get()} <i>must</i> ensure that the key
-     *  argument is of type {@code K}. {@code Map.get()} takes {@code Object},
-     *  so the key type is not checked at compile time. Passing an object of
-     *  a type other than {@code K} can result in that object being unsafely
-     *  passed to the computer function as type {@code K} not to mention the
-     *  unsafe key being stored in the map.
-     *
-     * @param strategy used to implement and manipulate the entries
-     * @param computer used to compute values for keys
-     *
-     * @param <K> the type of keys to be stored in the returned map
-     * @param <V> the type of values to be stored in the returned map
-     * @param <E> the type of internal entry to be stored in the returned map
-     *
-     * @throws NullPointerException if strategy or computer is null
-     */
-    public <K, V, E> ConcurrentMap<K, V> buildComputingMap(
-        ComputingStrategy<K, V, E> strategy,
-        Function<? super K, ? extends V> computer) {
-      if (strategy == null) {
-        throw new NullPointerException("strategy");
-      }
-      if (computer == null) {
-        throw new NullPointerException("computer");
-      }
-
-      return new ComputingImpl<K, V, E>(strategy, this, computer);
-    }
-    
-    int getInitialCapacity() {
-      return (initialCapacity == UNSET_INITIAL_CAPACITY)
-          ? DEFAULT_INITIAL_CAPACITY : initialCapacity;
-    }
-
-    int getConcurrencyLevel() {
-      return (concurrencyLevel == UNSET_CONCURRENCY_LEVEL)
-          ? DEFAULT_CONCURRENCY_LEVEL : concurrencyLevel;
-    }
-  }
-
-  /**
-   * Implements behavior specific to the client's concurrent hash map
-   * implementation. Used by the framework to create new entries and perform
-   * operations on them.
-   *
-   * <p>Method parameters are never null unless otherwise specified.
-   *
-   * <h3>Partially Reclaimed Entries</h3>
-   *
-   * <p>This class does <i>not</i> allow {@code null} to be used as a key.
-   * Setting values to null is not permitted, but entries may have null keys
-   * or values for various reasons. For example, the key or value may have
-   * been garbage collected or reclaimed through other means.
-   * CustomConcurrentHashMap treats entries with null keys and values as
-   * "partially reclaimed" and ignores them for the most part. Entries may
-   * enter a partially reclaimed state but they must not leave it. Partially
-   * reclaimed entries will not be copied over during table expansions, for
-   * example. Strategy implementations should proactively remove partially
-   * reclaimed entries so that {@link Map#isEmpty} and {@link Map#size()}
-   * return up-to-date results.
-   *
-   * @param <K> the type of keys to be stored in the returned map
-   * @param <V> the type of values to be stored in the returned map
-   * @param <E> internal entry type, not directly exposed to clients in map
-   *  views
-   */
-  public interface Strategy<K, V, E> {
-
-    /**
-     * Constructs a new entry for the given key with a pointer to the given
-     * next entry.
-     *
-     * <p>This method may return different entry implementations
-     * depending upon whether next is null or not. For example, if next is
-     * null (as will often be the case), this factory might use an entry
-     * class that doesn't waste memory on an unnecessary field.
-     *
-     * @param key for this entry
-     * @param hash of key returned by {@link #hashKey}
-     * @param next entry (used when implementing a hash bucket as a linked
-     *  list, for example), possibly null
-     * @return a new entry
-     */
-    abstract E newEntry(K key, int hash, E next);
-
-    /**
-     * Creates a copy of the given entry pointing to the given next entry.
-     * Copies the value and any other implementation-specific state from
-     * {@code original} to the returned entry. For example,
-     * CustomConcurrentHashMap might use this method when removing other
-     * entries or expanding the internal table.
-     *
-     * @param key for {@code original} as well as the returned entry.
-     *  Explicitly provided here to prevent reclamation of the key at an
-     *  inopportune time in implementations that don't otherwise keep
-     *  a strong reference to the key.
-     * @param original entry from which the value and other
-     *  implementation-specific state should be copied
-     * @param newNext the next entry the new entry should point to, possibly
-     *  null
-     */
-    E copyEntry(K key, E original, E newNext);
-
-    /**
-     * Sets the value of an entry using volatile semantics. Values are set
-     * synchronously on a per-entry basis.
-     *
-     * @param entry to set the value on
-     * @param value to set
-     */
-    void setValue(E entry, V value);
-
-    /**
-     * Gets the value of an entry using volatile semantics.
-     *
-     * @param entry to get the value from
-     */
-    V getValue(E entry);
-
-    /**
-     * Returns true if the two given keys are equal, false otherwise. Neither
-     * key will be null.
-     *
-     * @param a key from inside the map
-     * @param b key passed from caller, not necesarily of type K
-     *
-     * @see Object#equals the same contractual obligations apply here
-     */
-    boolean equalKeys(K a, Object b);
-
-    /**
-     * Returns true if the two given values are equal, false otherwise. Neither
-     * value will be null.
-     *
-     * @param a value from inside the map
-     * @param b value passed from caller, not necesarily of type V
-     *
-     * @see Object#equals the same contractual obligations apply here
-     */
-    boolean equalValues(V a, Object b);
-
-    /**
-     * Returns a hash code for the given key.
-     *
-     * @see Object#hashCode the same contractual obligations apply here
-     */
-    int hashKey(Object key);
-
-    /**
-     * Gets the key for the given entry. This may return null (for example,
-     * if the key was reclaimed by the garbage collector).
-     *
-     * @param entry to get key from
-     * @return key from the given entry
-     */
-    K getKey(E entry);
-
-    /**
-     * Gets the next entry relative to the given entry, the exact same entry
-     * that was provided to {@link Strategy#newEntry} when the given entry was
-     * created.
-     *
-     * @return the next entry or null if null was passed to
-     *  {@link Strategy#newEntry}
-     */
-    E getNext(E entry);
-
-    /**
-     * Returns the hash code that was passed to {@link Strategy#newEntry})
-     * when the given entry was created.
-     */
-    int getHash(E entry);
-
-// TODO:
-//    /**
-//     * Notifies the strategy that an entry has been removed from the map.
-//     *
-//     * @param entry that was recently removed
-//     */
-//    void remove(E entry);
-
-    /**
-     * Provides an API for interacting directly with the map's internal
-     * entries to this strategy. Invoked once when the map is created.
-     * Strategies that don't need access to the map's internal entries
-     * can simply ignore the argument.
-     *
-     * @param internals of the map, enables direct interaction with the
-     *  internal entries
-     */
-    void setInternals(Internals<K, V, E> internals);
-  }
-
-  /**
-   * Provides access to a map's internal entries.
-   */
-  public interface Internals<K, V, E> {
-
-// TODO:
-//    /**
-//     * Returns a set view of the internal entries.
-//     */
-//    Set<E> entrySet();
-
-    /**
-     * Returns the internal entry corresponding to the given key from the map.
-     *
-     * @param key to retrieve entry for
-     *
-     * @throws NullPointerException if key is null
-     */
-    E getEntry(K key);
-
-    /**
-     * Removes the given entry from the map if the value of the entry in the
-     * map matches the given value.
-     *
-     * @param entry to remove
-     * @param value entry must have for the removal to succeed
-     *
-     * @throws NullPointerException if entry is null
-     */
-    boolean removeEntry(E entry, @Nullable V value);
-
-    /**
-     * Removes the given entry from the map.
-     *
-     * @param entry to remove
-     *
-     * @throws NullPointerException if entry is null
-     */
-    boolean removeEntry(E entry);
-  }
-
-  /**
-   * Extends {@link Strategy} to add support for computing values on-demand.
-   * Implementations should typically intialize the entry's value to a
-   * placeholder value in {@link #newEntry(Object, int, Object)} so that
-   * {@link #waitForValue(Object)} can tell the difference between a
-   * pre-intialized value and an in-progress computation. {@link
-   * #copyEntry(Object, Object, Object)} must detect and handle the case where
-   * an entry is copied in the middle of a computation. Implementations can
-   * throw {@link UnsupportedOperationException} in {@link #setValue(Object,
-   * Object)} if they wish to prevent users from setting values directly.
-   *
-   * @see Builder#buildComputingMap(CustomConcurrentHashMap.ComputingStrategy,
-   *     Function)
-   */
-  public interface ComputingStrategy<K, V, E> extends Strategy<K, V, E> {
-
-    /**
-     * Computes a value for the given key and stores it in the given entry.
-     * Called as a result of {@link Map#get}. If this method throws an
-     * exception, CustomConcurrentHashMap will remove the entry and retry
-     * the computation on subsequent requests.
-     *
-     * @param entry that was created
-     * @param computer passed to {@link Builder#buildMap}
-     *
-     * @throws ComputationException if the computation threw an exception
-     * @throws NullPointerException if the computer returned null
-     *
-     * @return the computed value
-     */
-    V compute(K key, E entry, Function<? super K, ? extends V> computer);
-
-    /**
-     * Gets a value from an entry waiting for the value to be set by {@link
-     * #compute} if necessary. Returns null if a value isn't available at
-     * which point CustomConcurrentHashMap tries to compute a new value.
-     *
-     * @param entry to return value from
-     * @return stored value or null if the value isn't available
-     *
-     * @throws InterruptedException if the thread was interrupted while
-     *  waiting
-     */
-    V waitForValue(E entry) throws InterruptedException;
-  }
-
-  /**
-   * Applies a supplemental hash function to a given hash code, which defends
-   * against poor quality hash functions. This is critical when the
-   * concurrent hash map uses power-of-two length hash tables, that otherwise
-   * encounter collisions for hash codes that do not differ in lower or upper
-   * bits.
-   *
-   * @param h hash code
-   */
-  private static int rehash(int h) {
-    // Spread bits to regularize both segment and index locations,
-    // using variant of single-word Wang/Jenkins hash.
-    h += (h << 15) ^ 0xffffcd7d;
-    h ^= (h >>> 10);
-    h += (h << 3);
-    h ^= (h >>> 6);
-    h += (h << 2) + (h << 14);
-    return h ^ (h >>> 16);
-  }
-
-  /** The concurrent hash map implementation. */
-  static class Impl<K, V, E> extends AbstractMap<K, V>
-      implements ConcurrentMap<K, V>, Serializable {
-
-    /*
-     * The basic strategy is to subdivide the table among Segments,
-     * each of which itself is a concurrently readable hash table.
-     */
-
-    /* ---------------- Constants -------------- */
-
-    /**
-     * The maximum capacity, used if a higher value is implicitly specified by
-     * either of the constructors with arguments.  MUST be a power of two <=
-     * 1<<30 to ensure that entries are indexable using ints.
-     */
-    static final int MAXIMUM_CAPACITY = 1 << 30;
-
-    /**
-     * The maximum number of segments to allow; used to bound constructor
-     * arguments.
-     */
-    static final int MAX_SEGMENTS = 1 << 16; // slightly conservative
-
-    /**
-     * Number of unsynchronized retries in size and containsValue methods before
-     * resorting to locking. This is used to avoid unbounded retries if tables
-     * undergo continuous modification which would make it impossible to obtain
-     * an accurate result.
-     */
-    static final int RETRIES_BEFORE_LOCK = 2;
-
-    /* ---------------- Fields -------------- */
-
-    /**
-     * The strategy used to implement this map.
-     */
-    final Strategy<K, V, E> strategy;
-
-    /**
-     * Mask value for indexing into segments. The upper bits of a key's hash
-     * code are used to choose the segment.
-     */
-    final int segmentMask;
-
-    /**
-     * Shift value for indexing within segments. Helps prevent entries that
-     * end up in the same segment from also ending up in the same bucket.
-     */
-    final int segmentShift;
-
-    /**
-     * The segments, each of which is a specialized hash table
-     */
-    final Segment[] segments;
-
-    /**
-     * Creates a new, empty map with the specified strategy, initial capacity,
-     * load factor and concurrency level.
-     */
-    Impl(Strategy<K, V, E> strategy, Builder builder) {
-      int concurrencyLevel = builder.getConcurrencyLevel();
-      int initialCapacity = builder.getInitialCapacity();
-
-      if (concurrencyLevel > MAX_SEGMENTS) {
-        concurrencyLevel = MAX_SEGMENTS;
-      }
-
-      // Find power-of-two sizes best matching arguments
-      int segmentShift = 0;
-      int segmentCount = 1;
-      while (segmentCount < concurrencyLevel) {
-        ++segmentShift;
-        segmentCount <<= 1;
-      }
-      this.segmentShift = 32 - segmentShift;
-      segmentMask = segmentCount - 1;
-      this.segments = newSegmentArray(segmentCount);
-
-      if (initialCapacity > MAXIMUM_CAPACITY) {
-        initialCapacity = MAXIMUM_CAPACITY;
-      }
-
-      int segmentCapacity = initialCapacity / segmentCount;
-      if (segmentCapacity * segmentCount < initialCapacity) {
-        ++segmentCapacity;
-      }
-
-      int segmentSize = 1;
-      while (segmentSize < segmentCapacity) {
-          segmentSize <<= 1;
-      }
-      for (int i = 0; i < this.segments.length; ++i) {
-        this.segments[i] = new Segment(segmentSize);
-      }
-
-      this.strategy = strategy;
-
-      strategy.setInternals(new InternalsImpl());
-    }
-
-    int hash(Object key) {
-      int h = strategy.hashKey(key);
-      return rehash(h);
-    }
-
-    class InternalsImpl implements Internals<K, V, E>, Serializable {
-
-      static final long serialVersionUID = 0;
-
-      public E getEntry(K key) {
-        if (key == null) {
-          throw new NullPointerException("key");
-        }
-        int hash = hash(key);
-        return segmentFor(hash).getEntry(key, hash);
-      }
-
-      public boolean removeEntry(E entry, V value) {
-        if (entry == null) {
-          throw new NullPointerException("entry");
-        }
-        int hash = strategy.getHash(entry);
-        return segmentFor(hash).removeEntry(entry, hash, value);
-      }
-
-      public boolean removeEntry(E entry) {
-        if (entry == null) {
-          throw new NullPointerException("entry");
-        }
-        int hash = strategy.getHash(entry);
-        return segmentFor(hash).removeEntry(entry, hash);
-      }
-    }
-
-    @SuppressWarnings("unchecked")
-    Segment[] newSegmentArray(int ssize) {
-      // Note: This is the only way I could figure out how to create
-      // a segment array (the compile has a tough time with arrays of
-      // inner classes of generic types apparently). Safe because we're
-      // restricting what can go in the array and no one has an
-      // unrestricted reference.
-      return (Segment[]) Array.newInstance(Segment.class, ssize);
-    }
-
-    /* ---------------- Small Utilities -------------- */
-
-    /**
-     * Returns the segment that should be used for key with given hash
-     *
-     * @param hash the hash code for the key
-     * @return the segment
-     */
-    Segment segmentFor(int hash) {
-      return segments[(hash >>> segmentShift) & segmentMask];
-    }
-
-    /* ---------------- Inner Classes -------------- */
-
-    /**
-     * Segments are specialized versions of hash tables.  This subclasses from
-     * ReentrantLock opportunistically, just to simplify some locking and avoid
-     * separate construction.
-     */
-    @SuppressWarnings("serial") // This class is never serialized.
-    final class Segment extends ReentrantLock {
-
-      /*
-       * Segments maintain a table of entry lists that are ALWAYS
-       * kept in a consistent state, so can be read without locking.
-       * Next fields of nodes are immutable (final).  All list
-       * additions are performed at the front of each bin. This
-       * makes it easy to check changes, and also fast to traverse.
-       * When nodes would otherwise be changed, new nodes are
-       * created to replace them. This works well for hash tables
-       * since the bin lists tend to be short. (The average length
-       * is less than two for the default load factor threshold.)
-       *
-       * Read operations can thus proceed without locking, but rely
-       * on selected uses of volatiles to ensure that completed
-       * write operations performed by other threads are
-       * noticed. For most purposes, the "count" field, tracking the
-       * number of elements, serves as that volatile variable
-       * ensuring visibility.  This is convenient because this field
-       * needs to be read in many read operations anyway:
-       *
-       *   - All (unsynchronized) read operations must first read the
-       *     "count" field, and should not look at table entries if
-       *     it is 0.
-       *
-       *   - All (synchronized) write operations should write to
-       *     the "count" field after structurally changing any bin.
-       *     The operations must not take any action that could even
-       *     momentarily cause a concurrent read operation to see
-       *     inconsistent data. This is made easier by the nature of
-       *     the read operations in Map. For example, no operation
-       *     can reveal that the table has grown but the threshold
-       *     has not yet been updated, so there are no atomicity
-       *     requirements for this with respect to reads.
-       *
-       * As a guide, all critical volatile reads and writes to the
-       * count field are marked in code comments.
-       */
-
-      /**
-       * The number of elements in this segment's region.
-       */
-      volatile int count;
-
-      /**
-       * Number of updates that alter the size of the table. This is used
-       * during bulk-read methods to make sure they see a consistent snapshot:
-       * If modCounts change during a traversal of segments computing size or
-       * checking containsValue, then we might have an inconsistent view of
-       * state so (usually) must retry.
-       */
-      int modCount;
-
-      /**
-       * The table is expanded when its size exceeds this threshold. (The
-       * value of this field is always {@code (int)(capacity * loadFactor)}.)
-       */
-      int threshold;
-
-      /**
-       * The per-segment table.
-       */
-      volatile AtomicReferenceArray<E> table;
-
-      Segment(int initialCapacity) {
-        setTable(newEntryArray(initialCapacity));
-      }
-
-      AtomicReferenceArray<E> newEntryArray(int size) {
-        return new AtomicReferenceArray<E>(size);
-      }
-
-      /**
-       * Sets table to new HashEntry array. Call only while holding lock or in
-       * constructor.
-       */
-      void setTable(AtomicReferenceArray<E> newTable) {
-        this.threshold = newTable.length() * 3 / 4;
-        this.table = newTable;
-      }
-
-      /**
-       * Returns properly casted first entry of bin for given hash.
-       */
-      E getFirst(int hash) {
-        AtomicReferenceArray<E> table = this.table;
-        return table.get(hash & (table.length() - 1));
-      }
-
-      /* Specialized implementations of map methods */
-
-      public E getEntry(Object key, int hash) {
-        Strategy<K, V, E> s = Impl.this.strategy;
-        if (count != 0) { // read-volatile
-          for (E e = getFirst(hash); e != null; e = s.getNext(e)) {
-            if (s.getHash(e) != hash) {
-              continue;
-            }
-
-            K entryKey = s.getKey(e);
-            if (entryKey == null) {
-              continue;
-            }
-
-            if (s.equalKeys(entryKey, key)) {
-              return e;
-            }
-          }
-        }
-
-        return null;
-      }
-
-      V get(Object key, int hash) {
-        E entry = getEntry(key, hash);
-        if (entry == null) {
-          return null;
-        }
-
-        return strategy.getValue(entry);
-      }
-
-      boolean containsKey(Object key, int hash) {
-        Strategy<K, V, E> s = Impl.this.strategy;
-        if (count != 0) { // read-volatile
-          for (E e = getFirst(hash); e != null; e = s.getNext(e)) {
-            if (s.getHash(e) != hash) {
-              continue;
-            }
-
-            K entryKey = s.getKey(e);
-            if (entryKey == null) {
-              continue;
-            }
-
-            if (s.equalKeys(entryKey, key)) {
-              // Return true only if this entry has a value.
-              return s.getValue(e) != null;
-            }
-          }
-        }
-
-        return false;
-      }
-
-      boolean containsValue(Object value) {
-        Strategy<K, V, E> s = Impl.this.strategy;
-        if (count != 0) { // read-volatile
-          AtomicReferenceArray<E> table = this.table;
-          int length = table.length();
-          for (int i = 0; i < length; i++) {
-            for (E e = table.get(i); e != null; e = s.getNext(e)) {
-              V entryValue = s.getValue(e);
-
-              // If the value disappeared, this entry is partially collected,
-              // and we should skip it.
-              if (entryValue == null) {
-                continue;
-              }
-
-              if (s.equalValues(entryValue, value)) {
-                return true;
-              }
-            }
-          }
-        }
-
-        return false;
-      }
-
-      boolean replace(K key, int hash, V oldValue, V newValue) {
-        Strategy<K, V, E> s = Impl.this.strategy;
-        lock();
-        try {
-          for (E e = getFirst(hash); e != null; e = s.getNext(e)) {
-            K entryKey = s.getKey(e);
-            if (s.getHash(e) == hash && entryKey != null
-                && s.equalKeys(key, entryKey)) {
-              // If the value disappeared, this entry is partially collected,
-              // and we should pretend like it doesn't exist.
-              V entryValue = s.getValue(e);
-              if (entryValue == null) {
-                return false;
-              }
-
-              if (s.equalValues(entryValue, oldValue)) {
-                s.setValue(e, newValue);
-                return true;
-              }
-            }
-          }
-
-          return false;
-        } finally {
-          unlock();
-        }
-      }
-
-      V replace(K key, int hash, V newValue) {
-        Strategy<K, V, E> s = Impl.this.strategy;
-        lock();
-        try {
-          for (E e = getFirst(hash); e != null; e = s.getNext(e)) {
-            K entryKey = s.getKey(e);
-            if (s.getHash(e) == hash && entryKey != null
-                && s.equalKeys(key, entryKey)) {
-              // If the value disappeared, this entry is partially collected,
-              // and we should pretend like it doesn't exist.
-              V entryValue = s.getValue(e);
-              if (entryValue == null) {
-                return null;
-              }
-
-              s.setValue(e, newValue);
-              return entryValue;
-            }
-          }
-
-          return null;
-        } finally {
-          unlock();
-        }
-      }
-
-      V put(K key, int hash, V value, boolean onlyIfAbsent) {
-        Strategy<K, V, E> s = Impl.this.strategy;
-        lock();
-        try {
-          int count = this.count;
-          if (count++ > this.threshold) { // ensure capacity
-            expand();
-          }
-
-          AtomicReferenceArray<E> table = this.table;
-          int index = hash & (table.length() - 1);
-
-          E first = table.get(index);
-
-          // Look for an existing entry.
-          for (E e = first; e != null; e = s.getNext(e)) {
-            K entryKey = s.getKey(e);
-            if (s.getHash(e) == hash && entryKey != null
-                && s.equalKeys(key, entryKey)) {
-              // We found an existing entry.
-
-              // If the value disappeared, this entry is partially collected,
-              // and we should pretend like it doesn't exist.
-              V entryValue = s.getValue(e);
-              if (onlyIfAbsent && entryValue != null) {
-                return entryValue;
-              }
-
-              s.setValue(e, value);
-              return entryValue;
-            }
-          }
-
-          // Create a new entry.
-          ++modCount;
-          E newEntry = s.newEntry(key, hash, first);
-          s.setValue(newEntry, value);
-          table.set(index, newEntry);
-          this.count = count; // write-volatile
-          return null;
-        } finally {
-          unlock();
-        }
-      }
-
-      /**
-       * Expands the table if possible.
-       */
-      void expand() {
-        AtomicReferenceArray<E> oldTable = table;
-        int oldCapacity = oldTable.length();
-        if (oldCapacity >= MAXIMUM_CAPACITY) {
-          return;
-        }
-
-        /*
-         * Reclassify nodes in each list to new Map.  Because we are
-         * using power-of-two expansion, the elements from each bin
-         * must either stay at same index, or move with a power of two
-         * offset. We eliminate unnecessary node creation by catching
-         * cases where old nodes can be reused because their next
-         * fields won't change. Statistically, at the default
-         * threshold, only about one-sixth of them need cloning when
-         * a table doubles. The nodes they replace will be garbage
-         * collectable as soon as they are no longer referenced by any
-         * reader thread that may be in the midst of traversing table
-         * right now.
-         */
-
-        Strategy<K, V, E> s = Impl.this.strategy;
-        AtomicReferenceArray<E> newTable = newEntryArray(oldCapacity << 1);
-        threshold = newTable.length() * 3 / 4;
-        int newMask = newTable.length() - 1;
-        for (int oldIndex = 0; oldIndex < oldCapacity; oldIndex++) {
-          // We need to guarantee that any existing reads of old Map can
-          //  proceed. So we cannot yet null out each bin.
-          E head = oldTable.get(oldIndex);
-
-          if (head != null) {
-            E next = s.getNext(head);
-            int headIndex = s.getHash(head) & newMask;
-
-            // Single node on list
-            if (next == null) {
-              newTable.set(headIndex, head);
-            } else {
-              // Reuse the consecutive sequence of nodes with the same target
-              // index from the end of the list. tail points to the first
-              // entry in the reusable list.
-              E tail = head;
-              int tailIndex = headIndex;
-              for (E last = next; last != null; last = s.getNext(last)) {
-                int newIndex = s.getHash(last) & newMask;
-                if (newIndex != tailIndex) {
-                  // The index changed. We'll need to copy the previous entry.
-                  tailIndex = newIndex;
-                  tail = last;
-                }
-              }
-              newTable.set(tailIndex, tail);
-
-              // Clone nodes leading up to the tail.
-              for (E e = head; e != tail; e = s.getNext(e)) {
-                K key = s.getKey(e);
-                if (key != null) {
-                  int newIndex = s.getHash(e) & newMask;
-                  E newNext = newTable.get(newIndex);
-                  newTable.set(newIndex, s.copyEntry(key, e, newNext));
-                } else {
-                  // Key was reclaimed. Skip entry.
-                }
-              }
-            }
-          }
-        }
-        table = newTable;
-      }
-
-      V remove(Object key, int hash) {
-        Strategy<K, V, E> s = Impl.this.strategy;
-        lock();
-        try {
-          int count = this.count - 1;
-          AtomicReferenceArray<E> table = this.table;
-          int index = hash & (table.length() - 1);
-          E first = table.get(index);
-
-          for (E e = first; e != null; e = s.getNext(e)) {
-            K entryKey = s.getKey(e);
-            if (s.getHash(e) == hash && entryKey != null
-                && s.equalKeys(entryKey, key)) {
-              V entryValue = strategy.getValue(e);
-              // All entries following removed node can stay
-              // in list, but all preceding ones need to be
-              // cloned.
-              ++modCount;
-              E newFirst = s.getNext(e);
-              for (E p = first; p != e; p = s.getNext(p)) {
-                K pKey = s.getKey(p);
-                if (pKey != null) {
-                  newFirst = s.copyEntry(pKey, p, newFirst);
-                } else {
-                  // Key was reclaimed. Skip entry.
-                }
-              }
-              table.set(index, newFirst);
-              this.count = count; // write-volatile
-              return entryValue;
-            }
-          }
-
-          return null;
-        } finally {
-          unlock();
-        }
-      }
-
-      boolean remove(Object key, int hash, Object value) {
-        Strategy<K, V, E> s = Impl.this.strategy;
-        lock();
-        try {
-          int count = this.count - 1;
-          AtomicReferenceArray<E> table = this.table;
-          int index = hash & (table.length() - 1);
-          E first = table.get(index);
-
-          for (E e = first; e != null; e = s.getNext(e)) {
-            K entryKey = s.getKey(e);
-            if (s.getHash(e) == hash && entryKey != null
-                && s.equalKeys(entryKey, key)) {
-              V entryValue = strategy.getValue(e);
-              if (value == entryValue || (value != null && entryValue != null
-                  && s.equalValues(entryValue, value))) {
-                // All entries following removed node can stay
-                // in list, but all preceding ones need to be
-                // cloned.
-                ++modCount;
-                E newFirst = s.getNext(e);
-                for (E p = first; p != e; p = s.getNext(p)) {
-                  K pKey = s.getKey(p);
-                  if (pKey != null) {
-                    newFirst = s.copyEntry(pKey, p, newFirst);
-                  } else {
-                    // Key was reclaimed. Skip entry.
-                  }
-                }
-                table.set(index, newFirst);
-                this.count = count; // write-volatile
-                return true;
-              } else {
-                return false;
-              }
-            }
-          }
-
-          return false;
-        } finally {
-          unlock();
-        }
-      }
-
-      public boolean removeEntry(E entry, int hash, V value) {
-        Strategy<K, V, E> s = Impl.this.strategy;
-        lock();
-        try {
-          int count = this.count - 1;
-          AtomicReferenceArray<E> table = this.table;
-          int index = hash & (table.length() - 1);
-          E first = table.get(index);
-
-          for (E e = first; e != null; e = s.getNext(e)) {
-            if (s.getHash(e) == hash && entry.equals(e)) {
-              V entryValue = s.getValue(e);
-              if (entryValue == value || (value != null
-                  && s.equalValues(entryValue, value))) {
-                // All entries following removed node can stay
-                // in list, but all preceding ones need to be
-                // cloned.
-                ++modCount;
-                E newFirst = s.getNext(e);
-                for (E p = first; p != e; p = s.getNext(p)) {
-                  K pKey = s.getKey(p);
-                  if (pKey != null) {
-                    newFirst = s.copyEntry(pKey, p, newFirst);
-                  } else {
-                    // Key was reclaimed. Skip entry.
-                  }
-                }
-                table.set(index, newFirst);
-                this.count = count; // write-volatile
-                return true;
-              } else {
-                return false;
-              }
-            }
-          }
-
-          return false;
-        } finally {
-          unlock();
-        }
-      }
-
-      public boolean removeEntry(E entry, int hash) {
-        Strategy<K, V, E> s = Impl.this.strategy;
-        lock();
-        try {
-          int count = this.count - 1;
-          AtomicReferenceArray<E> table = this.table;
-          int index = hash & (table.length() - 1);
-          E first = table.get(index);
-
-          for (E e = first; e != null; e = s.getNext(e)) {
-            if (s.getHash(e) == hash && entry.equals(e)) {
-              // All entries following removed node can stay
-              // in list, but all preceding ones need to be
-              // cloned.
-              ++modCount;
-              E newFirst = s.getNext(e);
-              for (E p = first; p != e; p = s.getNext(p)) {
-                K pKey = s.getKey(p);
-                if (pKey != null) {
-                  newFirst = s.copyEntry(pKey, p, newFirst);
-                } else {
-                  // Key was reclaimed. Skip entry.
-                }
-              }
-              table.set(index, newFirst);
-              this.count = count; // write-volatile
-              return true;
-            }
-          }
-
-          return false;
-        } finally {
-          unlock();
-        }
-      }
-
-      void clear() {
-        if (count != 0) {
-          lock();
-          try {
-            AtomicReferenceArray<E> table = this.table;
-            for (int i = 0; i < table.length(); i++) {
-              table.set(i, null);
-            }
-            ++modCount;
-            count = 0; // write-volatile
-          } finally {
-            unlock();
-          }
-        }
-      }
-    }
-
-    /* ---------------- Public operations -------------- */
-
-    /**
-     * Returns {@code true} if this map contains no key-value mappings.
-     *
-     * @return {@code true} if this map contains no key-value mappings
-     */
-    @Override public boolean isEmpty() {
-      final Segment[] segments = this.segments;
-      /*
-       * We keep track of per-segment modCounts to avoid ABA
-       * problems in which an element in one segment was added and
-       * in another removed during traversal, in which case the
-       * table was never actually empty at any point. Note the
-       * similar use of modCounts in the size() and containsValue()
-       * methods, which are the only other methods also susceptible
-       * to ABA problems.
-       */
-      int[] mc = new int[segments.length];
-      int mcsum = 0;
-      for (int i = 0; i < segments.length; ++i) {
-        if (segments[i].count != 0) {
-          return false;
-        } else {
-          mcsum += mc[i] = segments[i].modCount;
-        }
-      }
-      // If mcsum happens to be zero, then we know we got a snapshot
-      // before any modifications at all were made.  This is
-      // probably common enough to bother tracking.
-      if (mcsum != 0) {
-        for (int i = 0; i < segments.length; ++i) {
-          if (segments[i].count != 0 ||
-              mc[i] != segments[i].modCount) {
-            return false;
-          }
-        }
-      }
-      return true;
-    }
-
-    /**
-     * Returns the number of key-value mappings in this map.  If the map
-     * contains more than {@code Integer.MAX_VALUE} elements, returns
-     * {@code Integer.MAX_VALUE}.
-     *
-     * @return the number of key-value mappings in this map
-     */
-    @Override public int size() {
-      final Segment[] segments = this.segments;
-      long sum = 0;
-      long check = 0;
-      int[] mc = new int[segments.length];
-      // Try a few times to get accurate count. On failure due to
-      // continuous async changes in table, resort to locking.
-      for (int k = 0; k < RETRIES_BEFORE_LOCK; ++k) {
-        check = 0;
-        sum = 0;
-        int mcsum = 0;
-        for (int i = 0; i < segments.length; ++i) {
-          sum += segments[i].count;
-          mcsum += mc[i] = segments[i].modCount;
-        }
-        if (mcsum != 0) {
-          for (int i = 0; i < segments.length; ++i) {
-            check += segments[i].count;
-            if (mc[i] != segments[i].modCount) {
-              check = -1; // force retry
-              break;
-            }
-          }
-        }
-        if (check == sum) {
-          break;
-        }
-      }
-      if (check != sum) { // Resort to locking all segments
-        sum = 0;
-        for (Segment segment : segments) {
-          segment.lock();
-        }
-        for (Segment segment : segments) {
-          sum += segment.count;
-        }
-        for (Segment segment : segments) {
-          segment.unlock();
-        }
-      }
-      if (sum > Integer.MAX_VALUE) {
-        return Integer.MAX_VALUE;
-      } else {
-        return (int) sum;
-      }
-    }
-
-    /**
-     * Returns the value to which the specified key is mapped, or {@code null}
-     * if this map contains no mapping for the key.
-     *
-     * <p>More formally, if this map contains a mapping from a key {@code k} to
-     * a value {@code v} such that {@code key.equals(k)}, then this method
-     * returns {@code v}; otherwise it returns {@code null}.  (There can be at
-     * most one such mapping.)
-     *
-     * @throws NullPointerException if the specified key is null
-     */
-    @Override public V get(Object key) {
-      if (key == null) {
-        throw new NullPointerException("key");
-      }
-      int hash = hash(key);
-      return segmentFor(hash).get(key, hash);
-    }
-
-    /**
-     * Tests if the specified object is a key in this table.
-     *
-     * @param key possible key
-     * @return {@code true} if and only if the specified object is a key in
-     *         this table, as determined by the {@code equals} method;
-     *         {@code false} otherwise.
-     * @throws NullPointerException if the specified key is null
-     */
-    @Override public boolean containsKey(Object key) {
-      if (key == null) {
-        throw new NullPointerException("key");
-      }
-      int hash = hash(key);
-      return segmentFor(hash).containsKey(key, hash);
-    }
-
-    /**
-     * Returns {@code true} if this map maps one or more keys to the specified
-     * value. Note: This method requires a full internal traversal of the hash
-     * table, and so is much slower than method {@code containsKey}.
-     *
-     * @param value value whose presence in this map is to be tested
-     * @return {@code true} if this map maps one or more keys to the specified
-     *         value
-     * @throws NullPointerException if the specified value is null
-     */
-    @Override public boolean containsValue(Object value) {
-      if (value == null) {
-        throw new NullPointerException("value");
-      }
-
-      // See explanation of modCount use above
-
-      final Segment[] segments = this.segments;
-      int[] mc = new int[segments.length];
-
-      // Try a few times without locking
-      for (int k = 0; k < RETRIES_BEFORE_LOCK; ++k) {
-        int mcsum = 0;
-        for (int i = 0; i < segments.length; ++i) {
-          @SuppressWarnings("UnusedDeclaration")
-          int c = segments[i].count;
-          mcsum += mc[i] = segments[i].modCount;
-          if (segments[i].containsValue(value)) {
-            return true;
-          }
-        }
-        boolean cleanSweep = true;
-        if (mcsum != 0) {
-          for (int i = 0; i < segments.length; ++i) {
-            @SuppressWarnings("UnusedDeclaration")
-            int c = segments[i].count;
-            if (mc[i] != segments[i].modCount) {
-              cleanSweep = false;
-              break;
-            }
-          }
-        }
-        if (cleanSweep) {
-          return false;
-        }
-      }
-      // Resort to locking all segments
-      for (Segment segment : segments) {
-        segment.lock();
-      }
-      boolean found = false;
-      try {
-        for (Segment segment : segments) {
-          if (segment.containsValue(value)) {
-            found = true;
-            break;
-          }
-        }
-      } finally {
-        for (Segment segment : segments) {
-          segment.unlock();
-        }
-      }
-      return found;
-    }
-
-    /**
-     * Maps the specified key to the specified value in this table. Neither the
-     * key nor the value can be null.
-     *
-     * <p> The value can be retrieved by calling the {@code get} method with a
-     * key that is equal to the original key.
-     *
-     * @param key   key with which the specified value is to be associated
-     * @param value value to be associated with the specified key
-     * @return the previous value associated with {@code key}, or {@code null}
-     *         if there was no mapping for {@code key}
-     * @throws NullPointerException if the specified key or value is null
-     */
-    @Override public V put(K key, V value) {
-      if (key == null) {
-        throw new NullPointerException("key");
-      }
-      if (value == null) {
-        throw new NullPointerException("value");
-      }
-      int hash = hash(key);
-      return segmentFor(hash).put(key, hash, value, false);
-    }
-
-    /**
-     * {@inheritDoc}
-     *
-     * @return the previous value associated with the specified key, or
-     *         {@code null} if there was no mapping for the key
-     * @throws NullPointerException if the specified key or value is null
-     */
-    public V putIfAbsent(K key, V value) {
-      if (key == null) {
-        throw new NullPointerException("key");
-      }
-      if (value == null) {
-        throw new NullPointerException("value");
-      }
-      int hash = hash(key);
-      return segmentFor(hash).put(key, hash, value, true);
-    }
-
-    /**
-     * Copies all of the mappings from the specified map to this one. These
-     * mappings replace any mappings that this map had for any of the keys
-     * currently in the specified map.
-     *
-     * @param m mappings to be stored in this map
-     */
-    @Override public void putAll(Map<? extends K, ? extends V> m) {
-      for (Entry<? extends K, ? extends V> e : m.entrySet()) {
-        put(e.getKey(), e.getValue());
-      }
-    }
-
-    /**
-     * Removes the key (and its corresponding value) from this map. This method
-     * does nothing if the key is not in the map.
-     *
-     * @param key the key that needs to be removed
-     * @return the previous value associated with {@code key}, or {@code null}
-     *         if there was no mapping for {@code key}
-     * @throws NullPointerException if the specified key is null
-     */
-    @Override public V remove(Object key) {
-      if (key == null) {
-        throw new NullPointerException("key");
-      }
-      int hash = hash(key);
-      return segmentFor(hash).remove(key, hash);
-    }
-
-    /**
-     * {@inheritDoc}
-     *
-     * @throws NullPointerException if the specified key is null
-     */
-    public boolean remove(Object key, Object value) {
-      if (key == null) {
-        throw new NullPointerException("key");
-      }
-      int hash = hash(key);
-      return segmentFor(hash).remove(key, hash, value);
-    }
-
-    /**
-     * {@inheritDoc}
-     *
-     * @throws NullPointerException if any of the arguments are null
-     */
-    public boolean replace(K key, V oldValue, V newValue) {
-      if (key == null) {
-        throw new NullPointerException("key");
-      }
-      if (oldValue == null) {
-        throw new NullPointerException("oldValue");
-      }
-      if (newValue == null) {
-        throw new NullPointerException("newValue");
-      }
-      int hash = hash(key);
-      return segmentFor(hash).replace(key, hash, oldValue, newValue);
-    }
-
-    /**
-     * {@inheritDoc}
-     *
-     * @return the previous value associated with the specified key, or
-     *         {@code null} if there was no mapping for the key
-     * @throws NullPointerException if the specified key or value is null
-     */
-    public V replace(K key, V value) {
-      if (key == null) {
-        throw new NullPointerException("key");
-      }
-      if (value == null) {
-        throw new NullPointerException("value");
-      }
-      int hash = hash(key);
-      return segmentFor(hash).replace(key, hash, value);
-    }
-
-    /**
-     * Removes all of the mappings from this map.
-     */
-    @Override public void clear() {
-      for (Segment segment : segments) {
-        segment.clear();
-      }
-    }
-
-    Set<K> keySet;
-
-    /**
-     * Returns a {@link java.util.Set} view of the keys contained in this map.
-     * The set is backed by the map, so changes to the map are reflected in the
-     * set, and vice-versa. The set supports element removal, which removes the
-     * corresponding mapping from this map, via the {@code Iterator.remove},
-     * {@code Set.remove}, {@code removeAll}, {@code retainAll}, and
-     * {@code clear} operations. It does not support the {@code add} or
-     * {@code addAll} operations.
-     *
-     * <p>The view's {@code iterator} is a "weakly consistent" iterator that
-     * will never throw {@link java.util.ConcurrentModificationException}, and
-     * guarantees to traverse elements as they existed upon construction of the
-     * iterator, and may (but is not guaranteed to) reflect any modifications
-     * subsequent to construction.
-     */
-    @Override public Set<K> keySet() {
-      Set<K> ks = keySet;
-      return (ks != null) ? ks : (keySet = new KeySet());
-    }
-
-    Collection<V> values;
-
-    /**
-     * Returns a {@link java.util.Collection} view of the values contained in
-     * this map. The collection is backed by the map, so changes to the map are
-     * reflected in the collection, and vice-versa. The collection supports
-     * element removal, which removes the corresponding mapping from this map,
-     * via the {@code Iterator.remove}, {@code Collection.remove},
-     * {@code removeAll}, {@code retainAll}, and {@code clear} operations. It
-     * does not support the {@code add} or {@code addAll} operations.
-     *
-     * <p>The view's {@code iterator} is a "weakly consistent" iterator that
-     * will never throw {@link java.util.ConcurrentModificationException}, and
-     * guarantees to traverse elements as they existed upon construction of the
-     * iterator, and may (but is not guaranteed to) reflect any modifications
-     * subsequent to construction.
-     */
-    @Override public Collection<V> values() {
-      Collection<V> vs = values;
-      return (vs != null) ? vs : (values = new Values());
-    }
-
-    Set<Entry<K, V>> entrySet;
-
-    /**
-     * Returns a {@link java.util.Set} view of the mappings contained in this
-     * map. The set is backed by the map, so changes to the map are reflected in
-     * the set, and vice-versa. The set supports element removal, which removes
-     * the corresponding mapping from the map, via the {@code Iterator.remove},
-     * {@code Set.remove}, {@code removeAll}, {@code retainAll}, and
-     * {@code clear} operations. It does not support the {@code add} or
-     * {@code addAll} operations.
-     *
-     * <p>The view's {@code iterator} is a "weakly consistent" iterator that
-     * will never throw {@link java.util.ConcurrentModificationException}, and
-     * guarantees to traverse elements as they existed upon construction of the
-     * iterator, and may (but is not guaranteed to) reflect any modifications
-     * subsequent to construction.
-     */
-    @Override public Set<Entry<K, V>> entrySet() {
-      Set<Entry<K, V>> es = entrySet;
-      return (es != null) ? es : (entrySet = new EntrySet());
-    }
-
-    /* ---------------- Iterator Support -------------- */
-
-    abstract class HashIterator {
-
-      int nextSegmentIndex;
-      int nextTableIndex;
-      AtomicReferenceArray<E> currentTable;
-      E nextEntry;
-      WriteThroughEntry nextExternal;
-      WriteThroughEntry lastReturned;
-
-      HashIterator() {
-        nextSegmentIndex = segments.length - 1;
-        nextTableIndex = -1;
-        advance();
-      }
-
-      public boolean hasMoreElements() {
-        return hasNext();
-      }
-
-      final void advance() {
-        nextExternal = null;
-
-        if (nextInChain()) {
-          return;
-        }
-
-        if (nextInTable()) {
-          return;
-        }
-
-        while (nextSegmentIndex >= 0) {
-          Segment seg = segments[nextSegmentIndex--];
-          if (seg.count != 0) {
-            currentTable = seg.table;
-            nextTableIndex = currentTable.length() - 1;
-            if (nextInTable()) {
-              return;
-            }
-          }
-        }
-      }
-
-      /**
-       * Finds the next entry in the current chain. Returns true if an entry
-       * was found.
-       */
-      boolean nextInChain() {
-        Strategy<K, V, E> s = Impl.this.strategy;
-        if (nextEntry != null) {
-          for (nextEntry = s.getNext(nextEntry); nextEntry != null;
-              nextEntry = s.getNext(nextEntry)) {
-            if (advanceTo(nextEntry)) {
-              return true;
-            }
-          }
-        }
-        return false;
-      }
-
-      /**
-       * Finds the next entry in the current table. Returns true if an entry
-       * was found.
-       */
-      boolean nextInTable() {
-        while (nextTableIndex >= 0) {
-          if ((nextEntry = currentTable.get(nextTableIndex--)) != null) {
-            if (advanceTo(nextEntry) || nextInChain()) {
-              return true;
-            }
-          }
-        }
-        return false;
-      }
-
-      /**
-       * Advances to the given entry. Returns true if the entry was valid,
-       * false if it should be skipped.
-       */
-      boolean advanceTo(E entry) {
-        Strategy<K, V, E> s = Impl.this.strategy;
-        K key = s.getKey(entry);
-        V value = s.getValue(entry);
-        if (key != null && value != null) {
-          nextExternal = new WriteThroughEntry(key, value);
-          return true;
-        } else {
-          // Skip partially reclaimed entry.
-          return false;
-        }
-      }
-
-      public boolean hasNext() {
-        return nextExternal != null;
-      }
-
-      WriteThroughEntry nextEntry() {
-        if (nextExternal == null) {
-          throw new NoSuchElementException();
-        }
-        lastReturned = nextExternal;
-        advance();
-        return lastReturned;
-      }
-
-      public void remove() {
-        if (lastReturned == null) {
-          throw new IllegalStateException();
-        }
-        Impl.this.remove(lastReturned.getKey());
-        lastReturned = null;
-      }
-    }
-
-    final class KeyIterator extends HashIterator implements Iterator<K> {
-
-      public K next() {
-        return super.nextEntry().getKey();
-      }
-    }
-
-    final class ValueIterator extends HashIterator implements Iterator<V> {
-
-      public V next() {
-        return super.nextEntry().getValue();
-      }
-    }
-
-    /**
-     * Custom Entry class used by EntryIterator.next(), that relays setValue
-     * changes to the underlying map.
-     */
-    final class WriteThroughEntry extends AbstractMapEntry<K, V> {
-      final K key;
-      V value;
-
-      WriteThroughEntry(K key, V value) {
-        this.key = key;
-        this.value = value;
-      }
-
-      @Override public K getKey() {
-        return key;
-      }
-
-      @Override public V getValue() {
-        return value;
-      }
-
-      /**
-       * Set our entry's value and write through to the map. The value to
-       * return is somewhat arbitrary here. Since a WriteThroughEntry does not
-       * necessarily track asynchronous changes, the most recent "previous"
-       * value could be different from what we return (or could even have been
-       * removed in which case the put will re-establish). We do not and
-       * cannot guarantee more.
-       */
-      @Override public V setValue(V value) {
-        if (value == null) {
-          throw new NullPointerException();
-        }
-        V oldValue = Impl.this.put(getKey(), value);
-        this.value = value;
-        return oldValue;
-      }
-    }
-
-    final class EntryIterator extends HashIterator
-        implements Iterator<Entry<K, V>> {
-
-      public Entry<K, V> next() {
-        return nextEntry();
-      }
-    }
-
-    final class KeySet extends AbstractSet<K> {
-
-      @Override public Iterator<K> iterator() {
-        return new KeyIterator();
-      }
-
-      @Override public int size() {
-        return Impl.this.size();
-      }
-
-      @Override public boolean isEmpty() {
-        return Impl.this.isEmpty();
-      }
-
-      @Override public boolean contains(Object o) {
-        return Impl.this.containsKey(o);
-      }
-
-      @Override public boolean remove(Object o) {
-        return Impl.this.remove(o) != null;
-      }
-
-      @Override public void clear() {
-        Impl.this.clear();
-      }
-    }
-
-    final class Values extends AbstractCollection<V> {
-
-      @Override public Iterator<V> iterator() {
-        return new ValueIterator();
-      }
-
-      @Override public int size() {
-        return Impl.this.size();
-      }
-
-      @Override public boolean isEmpty() {
-        return Impl.this.isEmpty();
-      }
-
-      @Override public boolean contains(Object o) {
-        return Impl.this.containsValue(o);
-      }
-
-      @Override public void clear() {
-        Impl.this.clear();
-      }
-    }
-
-    final class EntrySet extends AbstractSet<Entry<K, V>> {
-
-      @Override public Iterator<Entry<K, V>> iterator() {
-        return new EntryIterator();
-      }
-
-      @Override public boolean contains(Object o) {
-        if (!(o instanceof Entry)) {
-          return false;
-        }
-        Entry<?, ?> e = (Entry<?, ?>) o;
-        Object key = e.getKey();
-        if (key == null) {
-          return false;
-        }
-        V v = Impl.this.get(key);
-
-        return v != null && strategy.equalValues(v, e.getValue());
-      }
-
-      @Override public boolean remove(Object o) {
-        if (!(o instanceof Entry)) {
-          return false;
-        }
-        Entry<?, ?> e = (Entry<?, ?>) o;
-        Object key = e.getKey();
-        return key != null && Impl.this.remove(key, e.getValue());
-      }
-
-      @Override public int size() {
-        return Impl.this.size();
-      }
-
-      @Override public boolean isEmpty() {
-        return Impl.this.isEmpty();
-      }
-
-      @Override public void clear() {
-        Impl.this.clear();
-      }
-    }
-
-    /* ---------------- Serialization Support -------------- */
-
-    private static final long serialVersionUID = 1;
-
-    private void writeObject(java.io.ObjectOutputStream out)
-        throws IOException {
-      out.writeInt(size());
-      out.writeInt(segments.length); // concurrencyLevel
-      out.writeObject(strategy);
-      for (Entry<K, V> entry : entrySet()) {
-        out.writeObject(entry.getKey());
-        out.writeObject(entry.getValue());
-      }
-      out.writeObject(null); // terminate entries
-    }
-
-    /**
-     * Fields used during deserialization. We use a nested class so we don't
-     * load them until we need them. We need to use reflection to set final
-     * fields outside of the constructor.
-     */
-    static class Fields {
-
-      static final Field segmentShift = findField("segmentShift");
-      static final Field segmentMask = findField("segmentMask");
-      static final Field segments = findField("segments");
-      static final Field strategy = findField("strategy");
-
-      static Field findField(String name) {
-        try {
-          Field f = Impl.class.getDeclaredField(name);
-          f.setAccessible(true);
-          return f;
-        } catch (NoSuchFieldException e) {
-          throw new AssertionError(e);
-        }
-      }
-    }
-
-    @SuppressWarnings("unchecked")
-    private void readObject(java.io.ObjectInputStream in)
-        throws IOException, ClassNotFoundException {
-      try {
-        int initialCapacity = in.readInt();
-        int concurrencyLevel = in.readInt();
-        Strategy<K, V, E> strategy = (Strategy<K, V, E>) in.readObject();
-
-        if (concurrencyLevel > MAX_SEGMENTS) {
-          concurrencyLevel = MAX_SEGMENTS;
-        }
-
-        // Find power-of-two sizes best matching arguments
-        int segmentShift = 0;
-        int segmentCount = 1;
-        while (segmentCount < concurrencyLevel) {
-          ++segmentShift;
-          segmentCount <<= 1;
-        }
-        Fields.segmentShift.set(this, 32 - segmentShift);
-        Fields.segmentMask.set(this, segmentCount - 1);
-        Fields.segments.set(this, newSegmentArray(segmentCount));
-
-        if (initialCapacity > MAXIMUM_CAPACITY) {
-          initialCapacity = MAXIMUM_CAPACITY;
-        }
-
-        int segmentCapacity = initialCapacity / segmentCount;
-        if (segmentCapacity * segmentCount < initialCapacity) {
-          ++segmentCapacity;
-        }
-
-        int segmentSize = 1;
-        while (segmentSize < segmentCapacity) {
-            segmentSize <<= 1;
-        }
-        for (int i = 0; i < this.segments.length; ++i) {
-          this.segments[i] = new Segment(segmentSize);
-        }
-
-        Fields.strategy.set(this, strategy);
-
-        while (true) {
-          K key = (K) in.readObject();
-          if (key == null) {
-            break; // terminator
-          }
-          V value = (V) in.readObject();
-          put(key, value);
-        }
-      } catch (IllegalAccessException e) {
-        throw new AssertionError(e);
-      }
-    }
-  }
-
-  static class ComputingImpl<K, V, E> extends Impl<K, V, E> {
-
-    static final long serialVersionUID = 0;
-
-    final ComputingStrategy<K, V, E> computingStrategy;
-    final Function<? super K, ? extends V> computer;
-
-    /**
-     * Creates a new, empty map with the specified strategy, initial capacity,
-     * load factor and concurrency level.
-     */
-    ComputingImpl(ComputingStrategy<K, V, E> strategy, Builder builder,
-        Function<? super K, ? extends V> computer) {
-      super(strategy, builder);
-      this.computingStrategy = strategy;
-      this.computer = computer;
-    }
-
-    @Override public V get(Object k) {
-      /*
-       * This cast isn't safe, but we can rely on the fact that K is almost
-       * always passed to Map.get(), and tools like IDEs and Findbugs can
-       * catch situations where this isn't the case.
-       *
-       * The alternative is to add an overloaded method, but the chances of
-       * a user calling get() instead of the new API and the risks inherent
-       * in adding a new API outweigh this little hole.
-       */
-      @SuppressWarnings("unchecked")
-      K key = (K) k;
-
-      if (key == null) {
-        throw new NullPointerException("key");
-      }
-
-      int hash = hash(key);
-      Segment segment = segmentFor(hash);
-      outer: while (true) {
-        E entry = segment.getEntry(key, hash);
-        if (entry == null) {
-          boolean created = false;
-          segment.lock();
-          try {
-            // Try again--an entry could have materialized in the interim.
-            entry = segment.getEntry(key, hash);
-            if (entry == null) {
-              // Create a new entry.
-              created = true;
-              int count = segment.count;
-              if (count++ > segment.threshold) { // ensure capacity
-                segment.expand();
-              }
-              AtomicReferenceArray<E> table = segment.table;
-              int index = hash & (table.length() - 1);
-              E first = table.get(index);
-              ++segment.modCount;
-              entry = computingStrategy.newEntry(key, hash, first);
-              table.set(index, entry);
-              segment.count = count; // write-volatile
-            }
-          } finally {
-            segment.unlock();
-          }
-
-          if (created) {
-            // This thread solely created the entry.
-            boolean success = false;
-            try {
-              V value = computingStrategy.compute(key, entry, computer);
-              if (value == null) {
-                throw new NullPointerException(
-                    "compute() returned null unexpectedly");
-              }
-              success = true;
-              return value;
-            } finally {
-              if (!success) {
-                segment.removeEntry(entry, hash);
-              }
-            }
-          }
-        }
-
-        // The entry already exists. Wait for the computation.
-        boolean interrupted = false;
-        try {
-          while (true) {
-            try {
-              V value = computingStrategy.waitForValue(entry);
-              if (value == null) {
-                // Purge entry and try again.
-                segment.removeEntry(entry, hash);
-                continue outer;
-              }
-              return value;
-            } catch (InterruptedException e) {
-              interrupted = true;
-            }
-          }
-        } finally {
-          if (interrupted) {
-            Thread.currentThread().interrupt();
-          }
-        }
-      }
-    }
-  }
-
-  /**
-   * A basic, no-frills implementation of {@code Strategy} using {@link
-   * SimpleInternalEntry}. Intended to be subclassed to provide customized
-   * behavior. For example, the following creates a map that uses byte arrays as
-   * keys: <pre>   {@code
-   *
-   *   return new CustomConcurrentHashMap.Builder().buildMap(
-   *       new SimpleStrategy<byte[], V>() {
-   *         public int hashKey(Object key) {
-   *           return Arrays.hashCode((byte[]) key);
-   *         }
-   *         public boolean equalKeys(byte[] a, Object b) {
-   *           return Arrays.equals(a, (byte[]) b);
-   *         }
-   *       });}</pre>
-   *
-   * With nothing overridden, it yields map behavior equivalent to that of
-   * {@link ConcurrentHashMap}.
-   */
-  static class SimpleStrategy<K, V>
-      implements Strategy<K, V, SimpleInternalEntry<K, V>> {
-    public SimpleInternalEntry<K, V> newEntry(
-        K key, int hash, SimpleInternalEntry<K, V> next) {
-      return new SimpleInternalEntry<K, V>(key, hash, null, next);
-    }
-    public SimpleInternalEntry<K, V> copyEntry(K key,
-        SimpleInternalEntry<K, V> original, SimpleInternalEntry<K, V> next) {
-      return new SimpleInternalEntry<K, V>(
-          key, original.hash, original.value, next);
-    }
-    public void setValue(SimpleInternalEntry<K, V> entry, V value) {
-      entry.value = value;
-    }
-    public V getValue(SimpleInternalEntry<K, V> entry) {
-      return entry.value;
-    }
-    public boolean equalKeys(K a, Object b) {
-      return a.equals(b);
-    }
-    public boolean equalValues(V a, Object b) {
-      return a.equals(b);
-    }
-    public int hashKey(Object key) {
-      return key.hashCode();
-    }
-    public K getKey(SimpleInternalEntry<K, V> entry) {
-      return entry.key;
-    }
-    public SimpleInternalEntry<K, V> getNext(SimpleInternalEntry<K, V> entry) {
-      return entry.next;
-    }
-    public int getHash(SimpleInternalEntry<K, V> entry) {
-      return entry.hash;
-    }
-    public void setInternals(
-        Internals<K, V, SimpleInternalEntry<K, V>> internals) {
-      // ignore?
-    }
-  }
-
-  /**
-   * A basic, no-frills entry class used by {@link SimpleInternalEntry}.
-   */
-  static class SimpleInternalEntry<K, V> {
-    final K key;
-    final int hash;
-    final SimpleInternalEntry<K, V> next;
-    volatile V value;
-    SimpleInternalEntry(
-        K key, int hash, @Nullable V value, SimpleInternalEntry<K, V> next) {
-      this.key = key;
-      this.hash = hash;
-      this.value = value;
-      this.next = next;
-    }
-  }
-}
diff --git a/src/com/google/common/collect/EmptyImmutableList.java b/src/com/google/common/collect/EmptyImmutableList.java
deleted file mode 100644
index cea56f9..0000000
--- a/src/com/google/common/collect/EmptyImmutableList.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-import static com.google.common.base.Preconditions.checkElementIndex;
-import static com.google.common.base.Preconditions.checkPositionIndex;
-import static com.google.common.base.Preconditions.checkPositionIndexes;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.ListIterator;
-
-import javax.annotation.Nullable;
-
-/**
- * An empty immutable list.
- * 
- * @author Kevin Bourrillion
- */
-@GwtCompatible(serializable = true)
-final class EmptyImmutableList extends ImmutableList<Object> {
-  static final EmptyImmutableList INSTANCE = new EmptyImmutableList();
-
-  private EmptyImmutableList() {}
-
-  public int size() {
-    return 0;
-  }
-
-  @Override public boolean isEmpty() {
-    return true;
-  }
-
-  @Override public boolean contains(Object target) {
-    return false;
-  }
-
-  @Override public UnmodifiableIterator<Object> iterator() {
-    return Iterators.emptyIterator();
-  }
-
-  private static final Object[] EMPTY_ARRAY = new Object[0];
-
-  @Override public Object[] toArray() {
-    return EMPTY_ARRAY;
-  }
-
-  @Override public <T> T[] toArray(T[] a) {
-    if (a.length > 0) {
-      a[0] = null;
-    }
-    return a;
-  }
-
-  public Object get(int index) {
-    // guaranteed to fail, but at least we get a consistent message
-    checkElementIndex(index, 0);
-    throw new AssertionError("unreachable");
-  }
-
-  @Override public int indexOf(Object target) {
-    return -1;
-  }
-
-  @Override public int lastIndexOf(Object target) {
-    return -1;
-  }
-
-  @Override public ImmutableList<Object> subList(int fromIndex, int toIndex) {
-    checkPositionIndexes(fromIndex, toIndex, 0);
-    return this;
-  }
-
-  public ListIterator<Object> listIterator() {
-    return Collections.emptyList().listIterator();
-  }
-
-  public ListIterator<Object> listIterator(int start) {
-    checkPositionIndex(start, 0);
-    return Collections.emptyList().listIterator();
-  }
-
-  @Override public boolean containsAll(Collection<?> targets) {
-    return targets.isEmpty();
-  }
-
-  @Override public boolean equals(@Nullable Object object) {
-    if (object instanceof List) {
-      List<?> that = (List<?>) object;
-      return that.isEmpty();
-    }
-    return false;
-  }
-
-  @Override public int hashCode() {
-    return 1;
-  }
-
-  @Override public String toString() {
-    return "[]";
-  }
-
-  Object readResolve() {
-    return INSTANCE; // preserve singleton property
-  }
-
-  private static final long serialVersionUID = 0;
-}
diff --git a/src/com/google/common/collect/EmptyImmutableListMultimap.java b/src/com/google/common/collect/EmptyImmutableListMultimap.java
deleted file mode 100644
index c4c8ab5..0000000
--- a/src/com/google/common/collect/EmptyImmutableListMultimap.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-
-/**
- * Implementation of {@link ImmutableListMultimap} with no entries.
- *
- * @author Jared Levy
- */
-@GwtCompatible(serializable = true)
-class EmptyImmutableListMultimap extends ImmutableListMultimap<Object, Object> {
-  static final EmptyImmutableListMultimap INSTANCE
-      = new EmptyImmutableListMultimap();
-
-  private EmptyImmutableListMultimap() {
-    super(ImmutableMap.<Object, ImmutableList<Object>>of(), 0);
-  }
-
-  private Object readResolve() {
-    return INSTANCE; // preserve singleton property
-  }
-
-  private static final long serialVersionUID = 0;
-}
diff --git a/src/com/google/common/collect/EmptyImmutableMap.java b/src/com/google/common/collect/EmptyImmutableMap.java
deleted file mode 100644
index 3f90281..0000000
--- a/src/com/google/common/collect/EmptyImmutableMap.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-
-import java.util.Map;
-
-import javax.annotation.Nullable;
-
-/**
- * An empty immutable map.
- * 
- * @author Jesse Wilson
- * @author Kevin Bourrillion
- */
-@GwtCompatible(serializable = true)
-final class EmptyImmutableMap extends ImmutableMap<Object, Object> {
-  static final EmptyImmutableMap INSTANCE = new EmptyImmutableMap();
-
-  private EmptyImmutableMap() {}
-
-  @Override public Object get(Object key) {
-    return null;
-  }
-
-  public int size() {
-    return 0;
-  }
-
-  @Override public boolean isEmpty() {
-    return true;
-  }
-
-  @Override public boolean containsKey(Object key) {
-    return false;
-  }
-
-  @Override public boolean containsValue(Object value) {
-    return false;
-  }
-
-  @Override public ImmutableSet<Entry<Object, Object>> entrySet() {
-    return ImmutableSet.of();
-  }
-
-  @Override public ImmutableSet<Object> keySet() {
-    return ImmutableSet.of();
-  }
-
-  @Override public ImmutableCollection<Object> values() {
-    return ImmutableCollection.EMPTY_IMMUTABLE_COLLECTION;
-  }
-
-  @Override public boolean equals(@Nullable Object object) {
-    if (object instanceof Map) {
-      Map<?, ?> that = (Map<?, ?>) object;
-      return that.isEmpty();
-    }
-    return false;
-  }
-
-  @Override public int hashCode() {
-    return 0;
-  }
-
-  @Override public String toString() {
-    return "{}";
-  }
-
-  Object readResolve() {
-    return INSTANCE; // preserve singleton property
-  }
-
-  private static final long serialVersionUID = 0;
-}
diff --git a/src/com/google/common/collect/EmptyImmutableMultiset.java b/src/com/google/common/collect/EmptyImmutableMultiset.java
deleted file mode 100644
index 523098a..0000000
--- a/src/com/google/common/collect/EmptyImmutableMultiset.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-
-/**
- * An empty immutable multiset.
- * 
- * @author Jared Levy
- */
-@GwtCompatible(serializable = true)
-final class EmptyImmutableMultiset extends ImmutableMultiset<Object> {
-  static final EmptyImmutableMultiset INSTANCE = new EmptyImmutableMultiset();
-
-  private EmptyImmutableMultiset() {
-    super(ImmutableMap.<Object, Integer>of(), 0);
-  }
-
-  Object readResolve() {
-    return INSTANCE; // preserve singleton property
-  }
-
-  private static final long serialVersionUID = 0;
-}
diff --git a/src/com/google/common/collect/EmptyImmutableSet.java b/src/com/google/common/collect/EmptyImmutableSet.java
deleted file mode 100644
index 4f601e7..0000000
--- a/src/com/google/common/collect/EmptyImmutableSet.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-
-import java.util.Collection;
-import java.util.Set;
-
-import javax.annotation.Nullable;
-
-/**
- * An empty immutable set.
- * 
- * @author Kevin Bourrillion
- */
-@GwtCompatible(serializable = true)
-final class EmptyImmutableSet extends ImmutableSet<Object> {
-  static final EmptyImmutableSet INSTANCE = new EmptyImmutableSet();
-
-  private EmptyImmutableSet() {}
-
-  public int size() {
-    return 0;
-  }
-
-  @Override public boolean isEmpty() {
-    return true;
-  }
-
-  @Override public boolean contains(Object target) {
-    return false;
-  }
-
-  @Override public UnmodifiableIterator<Object> iterator() {
-    return Iterators.emptyIterator();
-  }
-
-  private static final Object[] EMPTY_ARRAY = new Object[0];
-
-  @Override public Object[] toArray() {
-    return EMPTY_ARRAY;
-  }
-
-  @Override public <T> T[] toArray(T[] a) {
-    if (a.length > 0) {
-      a[0] = null;
-    }
-    return a;
-  }
-
-  @Override public boolean containsAll(Collection<?> targets) {
-    return targets.isEmpty();
-  }
-
-  @Override public boolean equals(@Nullable Object object) {
-    if (object instanceof Set) {
-      Set<?> that = (Set<?>) object;
-      return that.isEmpty();
-    }
-    return false;
-  }
-
-  @Override public final int hashCode() {
-    return 0;
-  }
-
-  @Override boolean isHashCodeFast() {
-    return true;
-  }
-
-  @Override public String toString() {
-    return "[]";
-  }
-
-  Object readResolve() {
-    return INSTANCE; // preserve singleton property
-  }
-
-  private static final long serialVersionUID = 0;
-}
diff --git a/src/com/google/common/collect/EmptyImmutableSetMultimap.java b/src/com/google/common/collect/EmptyImmutableSetMultimap.java
deleted file mode 100644
index 348df8b..0000000
--- a/src/com/google/common/collect/EmptyImmutableSetMultimap.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2009 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-
-/**
- * Implementation of {@link ImmutableListMultimap} with no entries.
- *
- * @author Mike Ward
- */
-@GwtCompatible(serializable = true)
-class EmptyImmutableSetMultimap extends ImmutableSetMultimap<Object, Object> {
-  static final EmptyImmutableSetMultimap INSTANCE
-      = new EmptyImmutableSetMultimap();
-
-  private EmptyImmutableSetMultimap() {
-    super(ImmutableMap.<Object, ImmutableSet<Object>>of(), 0);
-  }
-
-  private Object readResolve() {
-    return INSTANCE; // preserve singleton property
-  }
-
-  private static final long serialVersionUID = 0;
-}
diff --git a/src/com/google/common/collect/EmptyImmutableSortedSet.java b/src/com/google/common/collect/EmptyImmutableSortedSet.java
deleted file mode 100644
index 38d031e..0000000
--- a/src/com/google/common/collect/EmptyImmutableSortedSet.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-
-import java.util.Collection;
-import java.util.Comparator;
-import java.util.NoSuchElementException;
-import java.util.Set;
-
-import javax.annotation.Nullable;
-
-/**
- * An empty immutable sorted set.
- *
- * @author Jared Levy
- */
-@GwtCompatible(serializable = true)
-@SuppressWarnings("serial") // uses writeReplace(), not default serialization
-class EmptyImmutableSortedSet<E> extends ImmutableSortedSet<E> {
-  EmptyImmutableSortedSet(Comparator<? super E> comparator) {
-    super(comparator);
-  }
-
-  public int size() {
-    return 0;
-  }
-
-  @Override public boolean isEmpty() {
-    return true;
-  }
-
-  @Override public boolean contains(Object target) {
-    return false;
-  }
-
-  @Override public UnmodifiableIterator<E> iterator() {
-    return Iterators.emptyIterator();
-  }
-
-  private static final Object[] EMPTY_ARRAY = new Object[0];
-
-  @Override public Object[] toArray() {
-    return EMPTY_ARRAY;
-  }
-
-  @Override public <T> T[] toArray(T[] a) {
-    if (a.length > 0) {
-      a[0] = null;
-    }
-    return a;
-  }
-
-  @Override public boolean containsAll(Collection<?> targets) {
-    return targets.isEmpty();
-  }
-
-  @Override public boolean equals(@Nullable Object object) {
-    if (object instanceof Set) {
-      Set<?> that = (Set<?>) object;
-      return that.isEmpty();
-    }
-    return false;
-  }
-
-  @Override public int hashCode() {
-    return 0;
-  }
-
-  @Override public String toString() {
-    return "[]";
-  }
-
-  public E first() {
-    throw new NoSuchElementException();
-  }
-
-  public E last() {
-    throw new NoSuchElementException();
-  }
-
-  @Override ImmutableSortedSet<E> headSetImpl(E toElement) {
-    return this;
-  }
-
-  @Override ImmutableSortedSet<E> subSetImpl(E fromElement, E toElement) {
-    return this;
-  }
-
-  @Override ImmutableSortedSet<E> tailSetImpl(E fromElement) {
-    return this;
-  }
-
-  @Override boolean hasPartialArray() {
-    return false;
-  }
-
-  @Override int indexOf(Object target) {
-    return -1;
-  }
-}
diff --git a/src/com/google/common/collect/EnumBiMap.java b/src/com/google/common/collect/EnumBiMap.java
deleted file mode 100644
index b3a4640..0000000
--- a/src/com/google/common/collect/EnumBiMap.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import static com.google.common.base.Preconditions.checkArgument;
-
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.util.EnumMap;
-import java.util.Map;
-
-/**
- * A {@code BiMap} backed by two {@code EnumMap} instances. Null keys and values
- * are not permitted. An {@code EnumBiMap} and its inverse are both
- * serializable.
- *
- * @author Mike Bostock
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-public final class EnumBiMap<K extends Enum<K>, V extends Enum<V>>
-    extends AbstractBiMap<K, V> {
-  private transient Class<K> keyType;
-  private transient Class<V> valueType;
-
-  /**
-   * Returns a new, empty {@code EnumBiMap} using the specified key and value
-   * types.
-   *
-   * @param keyType the key type
-   * @param valueType the value type
-   */
-  public static <K extends Enum<K>, V extends Enum<V>> EnumBiMap<K, V>
-      create(Class<K> keyType, Class<V> valueType) {
-    return new EnumBiMap<K, V>(keyType, valueType);
-  }
-
-  /**
-   * Returns a new bimap with the same mappings as the specified map. If the
-   * specified map is an {@code EnumBiMap}, the new bimap has the same types as
-   * the provided map. Otherwise, the specified map must contain at least one
-   * mapping, in order to determine the key and value types.
-   *
-   * @param map the map whose mappings are to be placed in this map
-   * @throws IllegalArgumentException if map is not an {@code EnumBiMap}
-   *     instance and contains no mappings
-   */
-  public static <K extends Enum<K>, V extends Enum<V>> EnumBiMap<K, V>
-      create(Map<K, V> map) {
-    EnumBiMap<K, V> bimap = create(inferKeyType(map), inferValueType(map));
-    bimap.putAll(map);
-    return bimap;
-  }
-
-  private EnumBiMap(Class<K> keyType, Class<V> valueType) {
-    super(new EnumMap<K, V>(keyType), new EnumMap<V, K>(valueType));
-    this.keyType = keyType;
-    this.valueType = valueType;
-  }
-
-  static <K extends Enum<K>> Class<K> inferKeyType(Map<K, ?> map) {
-    if (map instanceof EnumBiMap) {
-      return ((EnumBiMap<K, ?>) map).keyType();
-    }
-    if (map instanceof EnumHashBiMap) {
-      return ((EnumHashBiMap<K, ?>) map).keyType();
-    }
-    checkArgument(!map.isEmpty());
-    return map.keySet().iterator().next().getDeclaringClass();
-  }
-
-  private static <V extends Enum<V>> Class<V> inferValueType(Map<?, V> map) {
-    if (map instanceof EnumBiMap) {
-      return ((EnumBiMap<?, V>) map).valueType;
-    }
-    checkArgument(!map.isEmpty());
-    return map.values().iterator().next().getDeclaringClass();
-  }
-
-  /** Returns the associated key type. */
-  public Class<K> keyType() {
-    return keyType;
-  }
-
-  /** Returns the associated value type. */
-  public Class<V> valueType() {
-    return valueType;
-  }
-
-  /**
-   * @serialData the key class, value class, number of entries, first key, first
-   *     value, second key, second value, and so on.
-   */
-  private void writeObject(ObjectOutputStream stream) throws IOException {
-    stream.defaultWriteObject();
-    stream.writeObject(keyType);
-    stream.writeObject(valueType);
-    Serialization.writeMap(this, stream);
-  }
-
-  @SuppressWarnings("unchecked") // reading fields populated by writeObject
-  private void readObject(ObjectInputStream stream)
-      throws IOException, ClassNotFoundException {
-    stream.defaultReadObject();
-    keyType = (Class<K>) stream.readObject();
-    valueType = (Class<V>) stream.readObject();
-    setDelegates(new EnumMap<K, V>(keyType), new EnumMap<V, K>(valueType));
-    Serialization.populateMap(this, stream);
-  }
-
-  private static final long serialVersionUID = 0;
-}
diff --git a/src/com/google/common/collect/EnumHashBiMap.java b/src/com/google/common/collect/EnumHashBiMap.java
deleted file mode 100644
index 6552a70..0000000
--- a/src/com/google/common/collect/EnumHashBiMap.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.util.EnumMap;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.annotation.Nullable;
-
-/**
- * A {@code BiMap} backed by an {@code EnumMap} instance for keys-to-values, and
- * a {@code HashMap} instance for values-to-keys. Null keys are not permitted,
- * but null values are. An {@code EnumHashBiMap} and its inverse are both
- * serializable.
- *
- * @author Mike Bostock
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-public final class EnumHashBiMap<K extends Enum<K>, V>
-    extends AbstractBiMap<K, V> {
-  private transient Class<K> keyType;
-
-  /**
-   * Returns a new, empty {@code EnumHashBiMap} using the specified key type.
-   *
-   * @param keyType the key type
-   */
-  public static <K extends Enum<K>, V> EnumHashBiMap<K, V>
-      create(Class<K> keyType) {
-    return new EnumHashBiMap<K, V>(keyType);
-  }
-
-  /**
-   * Constructs a new bimap with the same mappings as the specified map. If the
-   * specified map is an {@code EnumHashBiMap} or an {@link EnumBiMap}, the new
-   * bimap has the same key type as the input bimap. Otherwise, the specified
-   * map must contain at least one mapping, in order to determine the key type.
-   *
-   * @param map the map whose mappings are to be placed in this map
-   * @throws IllegalArgumentException if map is not an {@code EnumBiMap} or an
-   *     {@code EnumHashBiMap} instance and contains no mappings
-   */
-  public static <K extends Enum<K>, V> EnumHashBiMap<K, V>
-      create(Map<K, ? extends V> map) {
-    EnumHashBiMap<K, V> bimap = create(EnumBiMap.inferKeyType(map));
-    bimap.putAll(map);
-    return bimap;
-  }
-
-  private EnumHashBiMap(Class<K> keyType) {
-    super(new EnumMap<K, V>(keyType), Maps.<V, K>newHashMapWithExpectedSize(
-        keyType.getEnumConstants().length));
-    this.keyType = keyType;
-  }
-
-  // Overriding these two methods to show that values may be null (but not keys)
-
-  @Override public V put(K key, @Nullable V value) {
-    return super.put(key, value);
-  }
-
-  @Override public V forcePut(K key, @Nullable V value) {
-    return super.forcePut(key, value);
-  }
-
-  /** Returns the associated key type. */
-  public Class<K> keyType() {
-    return keyType;
-  }
-
-  /**
-   * @serialData the key class, number of entries, first key, first value,
-   *     second key, second value, and so on.
-   */
-  private void writeObject(ObjectOutputStream stream) throws IOException {
-    stream.defaultWriteObject();
-    stream.writeObject(keyType);
-    Serialization.writeMap(this, stream);
-  }
-
-  @SuppressWarnings("unchecked") // reading field populated by writeObject
-  private void readObject(ObjectInputStream stream)
-      throws IOException, ClassNotFoundException {
-    stream.defaultReadObject();
-    keyType = (Class<K>) stream.readObject();
-    setDelegates(new EnumMap<K, V>(keyType),
-        new HashMap<V, K>(keyType.getEnumConstants().length * 3 / 2));
-    Serialization.populateMap(this, stream);
-  }
-
-  private static final long serialVersionUID = 0;
-}
diff --git a/src/com/google/common/collect/EnumMultiset.java b/src/com/google/common/collect/EnumMultiset.java
deleted file mode 100644
index e2ca7fb..0000000
--- a/src/com/google/common/collect/EnumMultiset.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-import static com.google.common.base.Preconditions.checkArgument;
-
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.util.EnumMap;
-import java.util.Iterator;
-import java.util.concurrent.atomic.AtomicInteger;
-
-/**
- * Multiset implementation backed by an {@link EnumMap}.
- *
- * @author Jared Levy
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible
-public final class EnumMultiset<E extends Enum<E>>
-    extends AbstractMapBasedMultiset<E> {
-  /** Creates an empty {@code EnumMultiset}. */
-  public static <E extends Enum<E>> EnumMultiset<E> create(Class<E> type) {
-    return new EnumMultiset<E>(type);
-  }
-
-  /**
-   * Creates a new {@code EnumMultiset} containing the specified elements.
-   *
-   * @param elements the elements that the multiset should contain
-   * @throws IllegalArgumentException if {@code elements} is empty
-   */
-  public static <E extends Enum<E>> EnumMultiset<E> create(
-      Iterable<E> elements) {
-    Iterator<E> iterator = elements.iterator();
-    checkArgument(iterator.hasNext(),
-        "EnumMultiset constructor passed empty Iterable");
-    EnumMultiset<E> multiset
-        = new EnumMultiset<E>(iterator.next().getDeclaringClass());
-    Iterables.addAll(multiset, elements);
-    return multiset;
-  }
-
-  private transient Class<E> type;
-
-  /** Creates an empty {@code EnumMultiset}. */
-  private EnumMultiset(Class<E> type) {
-    super(new EnumMap<E, AtomicInteger>(type));
-    this.type = type;
-  }
-
-  private void writeObject(ObjectOutputStream stream) throws IOException {
-    stream.defaultWriteObject();
-    stream.writeObject(type);
-    Serialization.writeMultiset(this, stream);
-  }
-
-  /**
-   * @serialData the {@code Class<E>} for the enum type, the number of distinct
-   *     elements, the first element, its count, the second element, its count,
-   *     and so on
-   */
-  private void readObject(ObjectInputStream stream)
-      throws IOException, ClassNotFoundException {
-    stream.defaultReadObject();
-    @SuppressWarnings("unchecked") // reading data stored by writeObject
-    Class<E> localType = (Class<E>) stream.readObject();
-    type = localType;
-    setBackingMap(new EnumMap<E, AtomicInteger>(type));
-    Serialization.populateMultiset(this, stream);
-  }
-
-  private static final long serialVersionUID = 0;
-}
diff --git a/src/com/google/common/collect/ExpirationTimer.java b/src/com/google/common/collect/ExpirationTimer.java
deleted file mode 100644
index 3c344ca..0000000
--- a/src/com/google/common/collect/ExpirationTimer.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (C) 2009 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import java.util.Timer;
-
-/**
- * Timer used for entry expiration in MapMaker.
- */
-class ExpirationTimer {
-  static Timer instance = new Timer(true);
-}
diff --git a/src/com/google/common/collect/ExplicitOrdering.java b/src/com/google/common/collect/ExplicitOrdering.java
deleted file mode 100644
index 7625d07..0000000
--- a/src/com/google/common/collect/ExplicitOrdering.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-
-import java.io.Serializable;
-import java.util.List;
-
-import javax.annotation.Nullable;
-
-/** An ordering that compares objects according to a given order. */
-@GwtCompatible(serializable = true)
-final class ExplicitOrdering<T> extends Ordering<T> implements Serializable {
-  final ImmutableMap<T, Integer> rankMap;
-
-  ExplicitOrdering(List<T> valuesInOrder) {
-    this(buildRankMap(valuesInOrder));
-  }
-
-  ExplicitOrdering(ImmutableMap<T, Integer> rankMap) {
-    this.rankMap = rankMap;
-  }
-
-  public int compare(T left, T right) {
-    return rank(left) - rank(right); // safe because both are nonnegative
-  }
-
-  private int rank(T value) {
-    Integer rank = rankMap.get(value);
-    if (rank == null) {
-      throw new IncomparableValueException(value);
-    }
-    return rank;
-  }
-
-  private static <T> ImmutableMap<T, Integer> buildRankMap(
-      List<T> valuesInOrder) {
-    ImmutableMap.Builder<T, Integer> builder = ImmutableMap.builder();
-    int rank = 0;
-    for (T value : valuesInOrder) {
-      builder.put(value, rank++);
-    }
-    return builder.build();
-  }
-
-  @Override public boolean equals(@Nullable Object object) {
-    if (object instanceof ExplicitOrdering) {
-      ExplicitOrdering<?> that = (ExplicitOrdering<?>) object;
-      return this.rankMap.equals(that.rankMap);
-    }
-    return false;
-  }
-
-  @Override public int hashCode() {
-    return rankMap.hashCode();
-  }
-
-  @Override public String toString() {
-    return "Ordering.explicit(" + rankMap.keySet() + ")";
-  }
-
-  private static final long serialVersionUID = 0;
-}
diff --git a/src/com/google/common/collect/ForwardingCollection.java b/src/com/google/common/collect/ForwardingCollection.java
deleted file mode 100644
index baee6ec..0000000
--- a/src/com/google/common/collect/ForwardingCollection.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-
-import java.util.Collection;
-import java.util.Iterator;
-
-/**
- * A collection which forwards all its method calls to another collection.
- * Subclasses should override one or more methods to modify the behavior of
- * the backing collection as desired per the <a
- * href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
- *
- * @see ForwardingObject
- * @author Kevin Bourrillion
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible
-public abstract class ForwardingCollection<E> extends ForwardingObject
-    implements Collection<E> {
-
-  @Override protected abstract Collection<E> delegate();
-
-  public Iterator<E> iterator() {
-    return delegate().iterator();
-  }
-
-  public int size() {
-    return delegate().size();
-  }
-
-  public boolean removeAll(Collection<?> collection) {
-    return delegate().removeAll(collection);
-  }
-
-  public boolean isEmpty() {
-    return delegate().isEmpty();
-  }
-
-  public boolean contains(Object object) {
-    return delegate().contains(object);
-  }
-
-  public Object[] toArray() {
-    return delegate().toArray();
-  }
-
-  public <T> T[] toArray(T[] array) {
-    return delegate().toArray(array);
-  }
-
-  public boolean add(E element) {
-    return delegate().add(element);
-  }
-
-  public boolean remove(Object object) {
-    return delegate().remove(object);
-  }
-
-  public boolean containsAll(Collection<?> collection) {
-    return delegate().containsAll(collection);
-  }
-
-  public boolean addAll(Collection<? extends E> collection) {
-    return delegate().addAll(collection);
-  }
-
-  public boolean retainAll(Collection<?> collection) {
-    return delegate().retainAll(collection);
-  }
-
-  public void clear() {
-    delegate().clear();
-  }
-}
diff --git a/src/com/google/common/collect/ForwardingConcurrentMap.java b/src/com/google/common/collect/ForwardingConcurrentMap.java
deleted file mode 100644
index 042fc46..0000000
--- a/src/com/google/common/collect/ForwardingConcurrentMap.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-
-import java.util.concurrent.ConcurrentMap;
-
-/**
- * A concurrent map which forwards all its method calls to another concurrent
- * map. Subclasses should override one or more methods to modify the behavior of
- * the backing map as desired per the <a
- * href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
- *
- * @see ForwardingObject
- * @author Charles Fry
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible
-public abstract class ForwardingConcurrentMap<K, V> extends ForwardingMap<K, V>
-    implements ConcurrentMap<K, V> {
-
-  @Override protected abstract ConcurrentMap<K, V> delegate();
-
-  public V putIfAbsent(K key, V value) {
-    return delegate().putIfAbsent(key, value);
-  }
-
-  public boolean remove(Object key, Object value) {
-    return delegate().remove(key, value);
-  }
-
-  public V replace(K key, V value) {
-    return delegate().replace(key, value);
-  }
-
-  public boolean replace(K key, V oldValue, V newValue) {
-    return delegate().replace(key, oldValue, newValue);
-  }
-
-}
diff --git a/src/com/google/common/collect/ForwardingIterator.java b/src/com/google/common/collect/ForwardingIterator.java
deleted file mode 100644
index f792fb3..0000000
--- a/src/com/google/common/collect/ForwardingIterator.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-
-import java.util.Iterator;
-
-/**
- * An iterator which forwards all its method calls to another iterator.
- * Subclasses should override one or more methods to modify the behavior of the
- * backing iterator as desired per the <a
- * href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
- *
- * @see ForwardingObject
- * @author Kevin Bourrillion
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible
-public abstract class ForwardingIterator<T>
-    extends ForwardingObject implements Iterator<T> {
-
-  @Override protected abstract Iterator<T> delegate();
-
-  public boolean hasNext() {
-    return delegate().hasNext();
-  }
-
-  public T next() {
-    return delegate().next();
-  }
-
-  public void remove() {
-    delegate().remove();
-  }
-}
diff --git a/src/com/google/common/collect/ForwardingList.java b/src/com/google/common/collect/ForwardingList.java
deleted file mode 100644
index 902b483..0000000
--- a/src/com/google/common/collect/ForwardingList.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-import com.google.common.annotations.GwtIncompatible;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.ListIterator;
-
-import javax.annotation.Nullable;
-
-/**
- * A list which forwards all its method calls to another list. Subclasses should
- * override one or more methods to modify the behavior of the backing list as
- * desired per the <a
- * href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
- *
- * <p>This class does not implement {@link java.util.RandomAccess}. If the
- * delegate supports random access, the {@code ForwadingList} subclass should
- * implement the {@code RandomAccess} interface.
- *
- * @author Mike Bostock
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible
-public abstract class ForwardingList<E> extends ForwardingCollection<E>
-    implements List<E> {
-
-  @Override protected abstract List<E> delegate();
-
-  public void add(int index, E element) {
-    delegate().add(index, element);
-  }
-
-  public boolean addAll(int index, Collection<? extends E> elements) {
-    return delegate().addAll(index, elements);
-  }
-
-  public E get(int index) {
-    return delegate().get(index);
-  }
-
-  public int indexOf(Object element) {
-    return delegate().indexOf(element);
-  }
-
-  public int lastIndexOf(Object element) {
-    return delegate().lastIndexOf(element);
-  }
-
-  public ListIterator<E> listIterator() {
-    return delegate().listIterator();
-  }
-
-  public ListIterator<E> listIterator(int index) {
-    return delegate().listIterator(index);
-  }
-
-  public E remove(int index) {
-    return delegate().remove(index);
-  }
-
-  public E set(int index, E element) {
-    return delegate().set(index, element);
-  }
-
-  @GwtIncompatible("List.subList")
-  public List<E> subList(int fromIndex, int toIndex) {
-    return Platform.subList(delegate(), fromIndex, toIndex);
-  }
-
-  @Override public boolean equals(@Nullable Object object) {
-    return object == this || delegate().equals(object);
-  }
-
-  @Override public int hashCode() {
-    return delegate().hashCode();
-  }
-}
diff --git a/src/com/google/common/collect/ForwardingListIterator.java b/src/com/google/common/collect/ForwardingListIterator.java
deleted file mode 100644
index 5a4d9e5..0000000
--- a/src/com/google/common/collect/ForwardingListIterator.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-
-import java.util.ListIterator;
-
-/**
- * A list iterator which forwards all its method calls to another list
- * iterator. Subclasses should override one or more methods to modify the
- * behavior of the backing iterator as desired per the <a
- * href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
- *
- * @see ForwardingObject
- * @author Mike Bostock
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible
-public abstract class ForwardingListIterator<E> extends ForwardingIterator<E>
-    implements ListIterator<E> {
-
-  @Override protected abstract ListIterator<E> delegate();
-
-  public void add(E element) {
-    delegate().add(element);
-  }
-
-  public boolean hasPrevious() {
-    return delegate().hasPrevious();
-  }
-
-  public int nextIndex() {
-    return delegate().nextIndex();
-  }
-
-  public E previous() {
-    return delegate().previous();
-  }
-
-  public int previousIndex() {
-    return delegate().previousIndex();
-  }
-
-  public void set(E element) {
-    delegate().set(element);
-  }
-}
diff --git a/src/com/google/common/collect/ForwardingMap.java b/src/com/google/common/collect/ForwardingMap.java
deleted file mode 100644
index 7626d98..0000000
--- a/src/com/google/common/collect/ForwardingMap.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-
-import java.util.Collection;
-import java.util.Map;
-import java.util.Set;
-
-import javax.annotation.Nullable;
-
-/**
- * A map which forwards all its method calls to another map. Subclasses should
- * override one or more methods to modify the behavior of the backing map as
- * desired per the <a
- * href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
- *
- * @see ForwardingObject
- * @author Kevin Bourrillion
- * @author Jared Levy
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible
-public abstract class ForwardingMap<K, V> extends ForwardingObject
-    implements Map<K, V> {
-
-  @Override protected abstract Map<K, V> delegate();
-
-  public int size() {
-    return delegate().size();
-  }
-
-  public boolean isEmpty() {
-    return delegate().isEmpty();
-  }
-
-  public V remove(Object object) {
-    return delegate().remove(object);
-  }
-
-  public void clear() {
-    delegate().clear();
-  }
-
-  public boolean containsKey(Object key) {
-    return delegate().containsKey(key);
-  }
-
-  public boolean containsValue(Object value) {
-    return delegate().containsValue(value);
-  }
-
-  public V get(Object key) {
-    return delegate().get(key);
-  }
-
-  public V put(K key, V value) {
-    return delegate().put(key, value);
-  }
-
-  public void putAll(Map<? extends K, ? extends V> map) {
-    delegate().putAll(map);
-  }
-
-  public Set<K> keySet() {
-    return delegate().keySet();
-  }
-
-  public Collection<V> values() {
-    return delegate().values();
-  }
-
-  public Set<Entry<K, V>> entrySet() {
-    return delegate().entrySet();
-  }
-
-  @Override public boolean equals(@Nullable Object object) {
-    return object == this || delegate().equals(object);
-  }
-
-  @Override public int hashCode() {
-    return delegate().hashCode();
-  }
-}
diff --git a/src/com/google/common/collect/ForwardingMapEntry.java b/src/com/google/common/collect/ForwardingMapEntry.java
deleted file mode 100644
index 029e303..0000000
--- a/src/com/google/common/collect/ForwardingMapEntry.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-
-import java.util.Map;
-
-import javax.annotation.Nullable;
-
-/**
- * A map entry which forwards all its method calls to another map entry.
- * Subclasses should override one or more methods to modify the behavior of the
- * backing map entry as desired per the <a
- * href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
- *
- * @see ForwardingObject
- * @author Mike Bostock
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible
-public abstract class ForwardingMapEntry<K, V>
-    extends ForwardingObject implements Map.Entry<K, V> {
-
-  @Override protected abstract Map.Entry<K, V> delegate();
-
-  public K getKey() {
-    return delegate().getKey();
-  }
-
-  public V getValue() {
-    return delegate().getValue();
-  }
-
-  public V setValue(V value) {
-    return delegate().setValue(value);
-  }
-
-  @Override public boolean equals(@Nullable Object object) {
-    return delegate().equals(object);
-  }
-
-  @Override public int hashCode() {
-    return delegate().hashCode();
-  }
-}
diff --git a/src/com/google/common/collect/ForwardingMultimap.java b/src/com/google/common/collect/ForwardingMultimap.java
deleted file mode 100644
index 4518a1e..0000000
--- a/src/com/google/common/collect/ForwardingMultimap.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-
-import java.util.Collection;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-
-import javax.annotation.Nullable;
-
-/**
- * A multimap which forwards all its method calls to another multimap.
- * Subclasses should override one or more methods to modify the behavior of
- * the backing multimap as desired per the <a
- * href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
- *
- * @see ForwardingObject
- * @author Robert Konigsberg
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible
-public abstract class ForwardingMultimap<K, V> extends ForwardingObject
-    implements Multimap<K, V> {
-
-  @Override protected abstract Multimap<K, V> delegate();
-
-  public Map<K, Collection<V>> asMap() {
-    return delegate().asMap();
-  }
-
-  public void clear() {
-    delegate().clear();
-  }
-
-  public boolean containsEntry(@Nullable Object key, @Nullable Object value) {
-    return delegate().containsEntry(key, value);
-  }
-
-  public boolean containsKey(@Nullable Object key) {
-    return delegate().containsKey(key);
-  }
-
-  public boolean containsValue(@Nullable Object value) {
-    return delegate().containsValue(value);
-  }
-
-  public Collection<Entry<K, V>> entries() {
-    return delegate().entries();
-  }
-
-  public Collection<V> get(@Nullable K key) {
-    return delegate().get(key);
-  }
-
-  public boolean isEmpty() {
-    return delegate().isEmpty();
-  }
-
-  public Multiset<K> keys() {
-    return delegate().keys();
-  }
-
-  public Set<K> keySet() {
-    return delegate().keySet();
-  }
-
-  public boolean put(K key, V value) {
-    return delegate().put(key, value);
-  }
-
-  public boolean putAll(K key, Iterable<? extends V> values) {
-    return delegate().putAll(key, values);
-  }
-
-  public boolean putAll(Multimap<? extends K, ? extends V> multimap) {
-    return delegate().putAll(multimap);
-  }
-
-  public boolean remove(@Nullable Object key, @Nullable Object value) {
-    return delegate().remove(key, value);
-  }
-
-  public Collection<V> removeAll(@Nullable Object key) {
-    return delegate().removeAll(key);
-  }
-
-  public Collection<V> replaceValues(K key, Iterable<? extends V> values) {
-    return delegate().replaceValues(key, values);
-  }
-
-  public int size() {
-    return delegate().size();
-  }
-
-  public Collection<V> values() {
-    return delegate().values();
-  }
-
-  @Override public boolean equals(@Nullable Object object) {
-    return object == this || delegate().equals(object);
-  }
-
-  @Override public int hashCode() {
-    return delegate().hashCode();
-  }
-}
diff --git a/src/com/google/common/collect/ForwardingMultiset.java b/src/com/google/common/collect/ForwardingMultiset.java
deleted file mode 100644
index 1538879..0000000
--- a/src/com/google/common/collect/ForwardingMultiset.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-
-import java.util.Set;
-
-import javax.annotation.Nullable;
-
-/**
- * A multiset which forwards all its method calls to another multiset.
- * Subclasses should override one or more methods to modify the behavior of the
- * backing multiset as desired per the <a
- * href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
- *
- * @see ForwardingObject
- * @author Kevin Bourrillion
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible
-public abstract class ForwardingMultiset<E> extends ForwardingCollection<E>
-    implements Multiset<E> {
-
-  @Override protected abstract Multiset<E> delegate();
-
-  public int count(Object element) {
-    return delegate().count(element);
-  }
-
-  public int add(E element, int occurrences) {
-    return delegate().add(element, occurrences);
-  }
-
-  public int remove(Object element, int occurrences) {
-    return delegate().remove(element, occurrences);
-  }
-
-  public Set<E> elementSet() {
-    return delegate().elementSet();
-  }
-
-  public Set<Entry<E>> entrySet() {
-    return delegate().entrySet();
-  }
-
-  @Override public boolean equals(@Nullable Object object) {
-    return object == this || delegate().equals(object);
-  }
-
-  @Override public int hashCode() {
-    return delegate().hashCode();
-  }
-
-  public int setCount(E element, int count) {
-    return delegate().setCount(element, count);
-  }
-
-  public boolean setCount(E element, int oldCount, int newCount) {
-    return delegate().setCount(element, oldCount, newCount);
-  }
-}
diff --git a/src/com/google/common/collect/ForwardingObject.java b/src/com/google/common/collect/ForwardingObject.java
deleted file mode 100644
index 8ec1265..0000000
--- a/src/com/google/common/collect/ForwardingObject.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-
-import java.io.Serializable;
-
-/**
- * An abstract base class for implementing the <a
- * href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
- * The {@link #delegate()} method must be overridden to return the instance
- * being decorated.
- *
- * This class does <i>not</i> forward the {@code hashCode} and {@code equals}
- * methods through to the backing object, but relies on {@code Object}'s
- * implementation. This is necessary to preserve the symmetry of {@code equals}.
- * Custom definitions of equality are usually based on an interface, such as
- * {@code Set} or {@code List}, so that the implementation of {@code equals} can
- * cast the object being tested for equality to the custom interface. {@code
- * ForwardingObject} implements no such custom interfaces directly; they
- * are implemented only in subclasses. Therefore, forwarding {@code equals}
- * would break symmetry, as the forwarding object might consider itself equal to
- * the object being tested, but the reverse could not be true. This behavior is
- * consistent with the JDK's collection wrappers, such as
- * {@link java.util.Collections#unmodifiableCollection}. Use an
- * interface-specific subclass of {@code ForwardingObject}, such as {@link
- * ForwardingList}, to preserve equality behavior, or override {@code equals}
- * directly.
- *
- * <p>The {@code toString} method is forwarded to the delegate. Although this
- * class does not implement {@link Serializable}, a serializable subclass may be
- * created since this class has a parameter-less constructor.
- *
- * @author Mike Bostock
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible
-public abstract class ForwardingObject {
-
-  /** Sole constructor. */
-  protected ForwardingObject() {}
-
-  /**
-   * Returns the backing delegate instance that methods are forwarded to.
-   * Abstract subclasses generally override this method with an abstract method
-   * that has a more specific return type, such as {@link
-   * ForwardingSet#delegate}. Concrete subclasses override this method to supply
-   * the instance being decorated.
-   */
-  protected abstract Object delegate();
-
-  /**
-   * Returns the string representation generated by the delegate's
-   * {@code toString} method.
-   */
-  @Override public String toString() {
-    return delegate().toString();
-  }
-
-  /* No equals or hashCode. See class comments for details. */
-}
diff --git a/src/com/google/common/collect/ForwardingQueue.java b/src/com/google/common/collect/ForwardingQueue.java
deleted file mode 100644
index 8dca777..0000000
--- a/src/com/google/common/collect/ForwardingQueue.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-
-import java.util.Queue;
-
-/**
- * A queue which forwards all its method calls to another queue. Subclasses
- * should override one or more methods to modify the behavior of the backing
- * queue as desired per the <a
- * href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
- *
- * @see ForwardingObject
- * @author Mike Bostock
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible
-public abstract class ForwardingQueue<E> extends ForwardingCollection<E>
-    implements Queue<E> {
-
-  @Override protected abstract Queue<E> delegate();
-
-  public boolean offer(E o) {
-    return delegate().offer(o);
-  }
-
-  public E poll() {
-    return delegate().poll();
-  }
-
-  public E remove() {
-    return delegate().remove();
-  }
-
-  public E peek() {
-    return delegate().peek();
-  }
-
-  public E element() {
-    return delegate().element();
-  }
-}
diff --git a/src/com/google/common/collect/ForwardingSet.java b/src/com/google/common/collect/ForwardingSet.java
deleted file mode 100644
index c54ed68..0000000
--- a/src/com/google/common/collect/ForwardingSet.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-
-import java.util.Set;
-
-import javax.annotation.Nullable;
-
-/**
- * A set which forwards all its method calls to another set. Subclasses should
- * override one or more methods to modify the behavior of the backing set as
- * desired per the <a
- * href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
- *
- * @see ForwardingObject
- * @author Kevin Bourrillion
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible
-public abstract class ForwardingSet<E> extends ForwardingCollection<E>
-    implements Set<E> {
-
-  @Override protected abstract Set<E> delegate();
-
-  @Override public boolean equals(@Nullable Object object) {
-    return object == this || delegate().equals(object);
-  }
-
-  @Override public int hashCode() {
-    return delegate().hashCode();
-  }
-}
diff --git a/src/com/google/common/collect/ForwardingSortedMap.java b/src/com/google/common/collect/ForwardingSortedMap.java
deleted file mode 100644
index 58950df..0000000
--- a/src/com/google/common/collect/ForwardingSortedMap.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-
-import java.util.Comparator;
-import java.util.SortedMap;
-
-/**
- * A sorted map which forwards all its method calls to another sorted map.
- * Subclasses should override one or more methods to modify the behavior of
- * the backing sorted map as desired per the <a
- * href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
- *
- * @see ForwardingObject
- * @author Mike Bostock
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible
-public abstract class ForwardingSortedMap<K, V> extends ForwardingMap<K, V>
-    implements SortedMap<K, V> {
-
-  @Override protected abstract SortedMap<K, V> delegate();
-
-  public Comparator<? super K> comparator() {
-    return delegate().comparator();
-  }
-
-  public K firstKey() {
-    return delegate().firstKey();
-  }
-
-  public SortedMap<K, V> headMap(K toKey) {
-    return delegate().headMap(toKey);
-  }
-
-  public K lastKey() {
-    return delegate().lastKey();
-  }
-
-  public SortedMap<K, V> subMap(K fromKey, K toKey) {
-    return delegate().subMap(fromKey, toKey);
-  }
-
-  public SortedMap<K, V> tailMap(K fromKey) {
-    return delegate().tailMap(fromKey);
-  }
-}
diff --git a/src/com/google/common/collect/ForwardingSortedSet.java b/src/com/google/common/collect/ForwardingSortedSet.java
deleted file mode 100644
index 6cbfe3a..0000000
--- a/src/com/google/common/collect/ForwardingSortedSet.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-
-import java.util.Comparator;
-import java.util.SortedSet;
-
-/**
- * A sorted set which forwards all its method calls to another sorted set.
- * Subclasses should override one or more methods to modify the behavior of the
- * backing sorted set as desired per the <a
- * href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
- *
- * @see ForwardingObject
- * @author Mike Bostock
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible
-public abstract class ForwardingSortedSet<E> extends ForwardingSet<E>
-    implements SortedSet<E> {
-
-  @Override protected abstract SortedSet<E> delegate();
-
-  public Comparator<? super E> comparator() {
-    return delegate().comparator();
-  }
-
-  public E first() {
-    return delegate().first();
-  }
-
-  public SortedSet<E> headSet(E toElement) {
-    return delegate().headSet(toElement);
-  }
-
-  public E last() {
-    return delegate().last();
-  }
-
-  public SortedSet<E> subSet(E fromElement, E toElement) {
-    return delegate().subSet(fromElement, toElement);
-  }
-
-  public SortedSet<E> tailSet(E fromElement) {
-    return delegate().tailSet(fromElement);
-  }
-}
diff --git a/src/com/google/common/collect/HashBiMap.java b/src/com/google/common/collect/HashBiMap.java
deleted file mode 100644
index a967ac1..0000000
--- a/src/com/google/common/collect/HashBiMap.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.annotation.Nullable;
-
-/**
- * A {@link BiMap} backed by two {@link HashMap} instances. This implementation
- * allows null keys and values. A {@code HashBiMap} and its inverse are both
- * serializable.
- *
- * @author Mike Bostock
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible
-public final class HashBiMap<K, V> extends AbstractBiMap<K, V> {
-
-  /**
-   * Returns a new, empty {@code HashBiMap} with the default initial capacity
-   * (16).
-   */
-  public static <K, V> HashBiMap<K, V> create() {
-    return new HashBiMap<K, V>();
-  }
-
-  /**
-   * Constructs a new, empty bimap with the specified expected size.
-   *
-   * @param expectedSize the expected number of entries
-   * @throws IllegalArgumentException if the specified expected size is
-   *     negative
-   */
-  public static <K, V> HashBiMap<K, V> create(int expectedSize) {
-    return new HashBiMap<K, V>(expectedSize);
-  }
-
-  /**
-   * Constructs a new bimap containing initial values from {@code map}. The
-   * bimap is created with an initial capacity sufficient to hold the mappings
-   * in the specified map.
-   */
-  public static <K, V> HashBiMap<K, V> create(
-      Map<? extends K, ? extends V> map) {
-    HashBiMap<K, V> bimap = create(map.size());
-    bimap.putAll(map);
-    return bimap;
-  }
-
-  private HashBiMap() {
-    super(new HashMap<K, V>(), new HashMap<V, K>());
-  }
-
-  private HashBiMap(int expectedSize) {
-    super(new HashMap<K, V>(Maps.capacity(expectedSize)),
-        new HashMap<V, K>(Maps.capacity(expectedSize)));
-  }
-
-  // Override these two methods to show that keys and values may be null
-
-  @Override public V put(@Nullable K key, @Nullable V value) {
-    return super.put(key, value);
-  }
-
-  @Override public V forcePut(@Nullable K key, @Nullable V value) {
-    return super.forcePut(key, value);
-  }
-
-  /**
-   * @serialData the number of entries, first key, first value, second key,
-   *     second value, and so on.
-   */
-  private void writeObject(ObjectOutputStream stream) throws IOException {
-    stream.defaultWriteObject();
-    Serialization.writeMap(this, stream);
-  }
-
-  private void readObject(ObjectInputStream stream)
-      throws IOException, ClassNotFoundException {
-    stream.defaultReadObject();
-    int size = Serialization.readCount(stream);
-    setDelegates(Maps.<K, V>newHashMapWithExpectedSize(size),
-        Maps.<V, K>newHashMapWithExpectedSize(size));
-    Serialization.populateMap(this, stream, size);
-  }
-
-  private static final long serialVersionUID = 0;
-}
diff --git a/src/com/google/common/collect/HashMultimap.java b/src/com/google/common/collect/HashMultimap.java
deleted file mode 100644
index 9576588..0000000
--- a/src/com/google/common/collect/HashMultimap.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Preconditions;
-
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * Implementation of {@link Multimap} using hash tables.
- *
- * <p>The multimap does not store duplicate key-value pairs. Adding a new
- * key-value pair equal to an existing key-value pair has no effect.
- *
- * <p>Keys and values may be null. All optional multimap methods are supported,
- * and all returned views are modifiable.
- *
- * <p>This class is not threadsafe when any concurrent operations update the
- * multimap. Concurrent read operations will work correctly. To allow concurrent
- * update operations, wrap your multimap with a call to {@link
- * Multimaps#synchronizedSetMultimap}.
- *
- * @author Jared Levy
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible(serializable = true)
-public final class HashMultimap<K, V> extends AbstractSetMultimap<K, V> {
-  private static final int DEFAULT_VALUES_PER_KEY = 8;
-
-  @VisibleForTesting
-  transient int expectedValuesPerKey = DEFAULT_VALUES_PER_KEY;
-
-  /**
-   * Creates a new, empty {@code HashMultimap} with the default initial
-   * capacities.
-   */
-  public static <K, V> HashMultimap<K, V> create() {
-    return new HashMultimap<K, V>();
-  }
-
-  /**
-   * Constructs an empty {@code HashMultimap} with enough capacity to hold the
-   * specified numbers of keys and values without rehashing.
-   *
-   * @param expectedKeys the expected number of distinct keys
-   * @param expectedValuesPerKey the expected average number of values per key
-   * @throws IllegalArgumentException if {@code expectedKeys} or {@code
-   *      expectedValuesPerKey} is negative
-   */
-  public static <K, V> HashMultimap<K, V> create(
-      int expectedKeys, int expectedValuesPerKey) {
-    return new HashMultimap<K, V>(expectedKeys, expectedValuesPerKey);
-  }
-
-  /**
-   * Constructs a {@code HashMultimap} with the same mappings as the specified
-   * multimap. If a key-value mapping appears multiple times in the input
-   * multimap, it only appears once in the constructed multimap.
-   *
-   * @param multimap the multimap whose contents are copied to this multimap
-   */
-  public static <K, V> HashMultimap<K, V> create(
-      Multimap<? extends K, ? extends V> multimap) {
-    return new HashMultimap<K, V>(multimap);
-  }
-
-  private HashMultimap() {
-    super(new HashMap<K, Collection<V>>());
-  }
-
-  private HashMultimap(int expectedKeys, int expectedValuesPerKey) {
-    super(Maps.<K, Collection<V>>newHashMapWithExpectedSize(expectedKeys));
-    Preconditions.checkArgument(expectedValuesPerKey >= 0);
-    this.expectedValuesPerKey = expectedValuesPerKey;
-  }
-
-  private HashMultimap(Multimap<? extends K, ? extends V> multimap) {
-    super(Maps.<K, Collection<V>>newHashMapWithExpectedSize(
-        multimap.keySet().size()));
-    putAll(multimap);
-  }
-
-  /**
-   * {@inheritDoc}
-   *
-   * <p>Creates an empty {@code HashSet} for a collection of values for one key.
-   *
-   * @return a new {@code HashSet} containing a collection of values for one key
-   */
-  @Override Set<V> createCollection() {
-    return Sets.<V>newHashSetWithExpectedSize(expectedValuesPerKey);
-  }
-
-  /**
-   * @serialData expectedValuesPerKey, number of distinct keys, and then for
-   *     each distinct key: the key, number of values for that key, and the
-   *     key's values
-   */
-  private void writeObject(ObjectOutputStream stream) throws IOException {
-    stream.defaultWriteObject();
-    stream.writeInt(expectedValuesPerKey);
-    Serialization.writeMultimap(this, stream);
-  }
-
-  private void readObject(ObjectInputStream stream)
-      throws IOException, ClassNotFoundException {
-    stream.defaultReadObject();
-    expectedValuesPerKey = stream.readInt();
-    int distinctKeys = Serialization.readCount(stream);
-    Map<K, Collection<V>> map = Maps.newHashMapWithExpectedSize(distinctKeys);
-    setMap(map);
-    Serialization.populateMultimap(this, stream, distinctKeys);
-  }
-
-  private static final long serialVersionUID = 0;
-}
diff --git a/src/com/google/common/collect/HashMultiset.java b/src/com/google/common/collect/HashMultiset.java
deleted file mode 100644
index dfbb360..0000000
--- a/src/com/google/common/collect/HashMultiset.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.util.HashMap;
-import java.util.concurrent.atomic.AtomicInteger;
-
-/**
- * Multiset implementation backed by a {@link HashMap}.
- *
- * @author Kevin Bourrillion
- * @author Jared Levy
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible(serializable = true)
-public final class HashMultiset<E> extends AbstractMapBasedMultiset<E> {
-
-  /**
-   * Creates a new, empty {@code HashMultiset} using the default initial
-   * capacity.
-   */
-  public static <E> HashMultiset<E> create() {
-    return new HashMultiset<E>();
-  }
-
-  /**
-   * Creates a new, empty {@code HashMultiset} with the specified expected
-   * number of distinct elements.
-   *
-   * @param distinctElements the expected number of distinct elements
-   * @throws IllegalArgumentException if {@code distinctElements} is negative
-   */
-  public static <E> HashMultiset<E> create(int distinctElements) {
-    return new HashMultiset<E>(distinctElements);
-  }
-
-  /**
-   * Creates a new {@code HashMultiset} containing the specified elements.
-   *
-   * @param elements the elements that the multiset should contain
-   */
-  public static <E> HashMultiset<E> create(Iterable<? extends E> elements) {
-    HashMultiset<E> multiset =
-        create(Multisets.inferDistinctElements(elements));
-    Iterables.addAll(multiset, elements);
-    return multiset;
-  }
-
-  private HashMultiset() {
-    super(new HashMap<E, AtomicInteger>());
-  }
-
-  private HashMultiset(int distinctElements) {
-    super(new HashMap<E, AtomicInteger>(Maps.capacity(distinctElements)));
-  }
-
-  /**
-   * @serialData the number of distinct elements, the first element, its count,
-   *     the second element, its count, and so on
-   */
-  private void writeObject(ObjectOutputStream stream) throws IOException {
-    stream.defaultWriteObject();
-    Serialization.writeMultiset(this, stream);
-  }
-
-  private void readObject(ObjectInputStream stream)
-      throws IOException, ClassNotFoundException {
-    stream.defaultReadObject();
-    int distinctElements = Serialization.readCount(stream);
-    setBackingMap(
-        Maps.<E, AtomicInteger>newHashMapWithExpectedSize(distinctElements));
-    Serialization.populateMultiset(this, stream, distinctElements);
-  }
-
-  private static final long serialVersionUID = 0;
-}
diff --git a/src/com/google/common/collect/Hashing.java b/src/com/google/common/collect/Hashing.java
deleted file mode 100644
index 158888d..0000000
--- a/src/com/google/common/collect/Hashing.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-import static com.google.common.base.Preconditions.checkArgument;
-
-/**
- * Static methods for implementing hash-based collections.
- *
- * @author Kevin Bourrillion
- * @author Jesse Wilson
- */
-@GwtCompatible
-final class Hashing {
-  private Hashing() {}
-
-  /*
-   * This method was written by Doug Lea with assistance from members of JCP
-   * JSR-166 Expert Group and released to the public domain, as explained at
-   * http://creativecommons.org/licenses/publicdomain
-   */
-  static int smear(int hashCode) {
-    hashCode ^= (hashCode >>> 20) ^ (hashCode >>> 12);
-    return hashCode ^ (hashCode >>> 7) ^ (hashCode >>> 4);
-  }
-
-  // We use power-of-2 tables, and this is the highest int that's a power of 2
-  private static final int MAX_TABLE_SIZE = 1 << 30;
-
-  // If the set has this many elements, it will "max out" the table size
-  private static final int CUTOFF = 1 << 29;
-
-  // Size the table to be at most 50% full, if possible
-  static int chooseTableSize(int setSize) {
-    if (setSize < CUTOFF) {
-      return Integer.highestOneBit(setSize) << 2;
-    }
-
-    // The table can't be completely full or we'll get infinite reprobes
-    checkArgument(setSize < MAX_TABLE_SIZE, "collection too large");
-    return MAX_TABLE_SIZE;
-  }
-}
diff --git a/src/com/google/common/collect/ImmutableAsList.java b/src/com/google/common/collect/ImmutableAsList.java
deleted file mode 100644
index 7de9a5d..0000000
--- a/src/com/google/common/collect/ImmutableAsList.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (C) 2009 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import java.io.InvalidObjectException;
-import java.io.ObjectInputStream;
-import java.io.Serializable;
-
-/**
- * List returned by {@link ImmutableCollection#asList} when the collection isn't
- * an {@link ImmutableList} or an {@link ImmutableSortedSet}.
- *
- * @author Jared Levy
- */
-@SuppressWarnings("serial")
-final class ImmutableAsList<E> extends RegularImmutableList<E> {
-  private final transient ImmutableCollection<E> collection;
-
-  ImmutableAsList(Object[] array, ImmutableCollection<E> collection) {
-    super(array, 0, array.length);
-    this.collection = collection;
-  }
-
-  @Override public boolean contains(Object target) {
-    // The collection's contains() is at least as fast as RegularImmutableList's
-    // and is often faster.
-    return collection.contains(target);
-  }
-
-  /**
-   * Serialized form that leads to the same performance as the original list.
-   */
-  static class SerializedForm implements Serializable {
-    final ImmutableCollection<?> collection;
-    SerializedForm(ImmutableCollection<?> collection) {
-      this.collection = collection;
-    }
-    Object readResolve() {
-      return collection.asList();
-    }
-    private static final long serialVersionUID = 0;
-  }
-
-  private void readObject(ObjectInputStream stream)
-      throws InvalidObjectException {
-    throw new InvalidObjectException("Use SerializedForm");
-  }
-
-  @Override Object writeReplace() {
-    return new SerializedForm(collection);
-  }
-}
diff --git a/src/com/google/common/collect/ImmutableBiMap.java b/src/com/google/common/collect/ImmutableBiMap.java
deleted file mode 100644
index 520f818..0000000
--- a/src/com/google/common/collect/ImmutableBiMap.java
+++ /dev/null
@@ -1,312 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-
-import java.util.Map;
-
-import javax.annotation.Nullable;
-
-/**
- * An immutable {@link BiMap} with reliable user-specified iteration order. Does
- * not permit null keys or values. An {@code ImmutableBiMap} and its inverse
- * have the same iteration ordering.
- *
- * <p>An instance of {@code ImmutableBiMap} contains its own data and will
- * <i>never</i> change. {@code ImmutableBiMap} is convenient for
- * {@code public static final} maps ("constant maps") and also lets you easily
- * make a "defensive copy" of a bimap provided to your class by a caller.
- *
- * <p><b>Note</b>: Although this class is not final, it cannot be subclassed as
- * it has no public or protected constructors. Thus, instances of this class are
- * guaranteed to be immutable.
- *
- * @author Jared Levy
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible(serializable = true)
-public abstract class ImmutableBiMap<K, V> extends ImmutableMap<K, V>
-    implements BiMap<K, V> {
-
-  private static final ImmutableBiMap<Object, Object> EMPTY_IMMUTABLE_BIMAP
-      = new EmptyBiMap();
-
-  /**
-   * Returns the empty bimap.
-   */
-  // Casting to any type is safe because the set will never hold any elements.
-  @SuppressWarnings("unchecked")
-  public static <K, V> ImmutableBiMap<K, V> of() {
-    return (ImmutableBiMap<K, V>) EMPTY_IMMUTABLE_BIMAP;
-  }
-
-  /**
-   * Returns an immutable bimap containing a single entry.
-   */
-  public static <K, V> ImmutableBiMap<K, V> of(K k1, V v1) {
-    return new RegularImmutableBiMap<K, V>(ImmutableMap.of(k1, v1));
-  }
-
-  /**
-   * Returns an immutable map containing the given entries, in order.
-   *
-   * @throws IllegalArgumentException if duplicate keys or values are added
-   */
-  public static <K, V> ImmutableBiMap<K, V> of(K k1, V v1, K k2, V v2) {
-    return new RegularImmutableBiMap<K, V>(ImmutableMap.of(k1, v1, k2, v2));
-  }
-
-  /**
-   * Returns an immutable map containing the given entries, in order.
-   *
-   * @throws IllegalArgumentException if duplicate keys or values are added
-   */
-  public static <K, V> ImmutableBiMap<K, V> of(
-      K k1, V v1, K k2, V v2, K k3, V v3) {
-    return new RegularImmutableBiMap<K, V>(ImmutableMap.of(
-        k1, v1, k2, v2, k3, v3));
-  }
-
-  /**
-   * Returns an immutable map containing the given entries, in order.
-   *
-   * @throws IllegalArgumentException if duplicate keys or values are added
-   */
-  public static <K, V> ImmutableBiMap<K, V> of(
-      K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4) {
-    return new RegularImmutableBiMap<K, V>(ImmutableMap.of(
-        k1, v1, k2, v2, k3, v3, k4, v4));
-  }
-
-  /**
-   * Returns an immutable map containing the given entries, in order.
-   *
-   * @throws IllegalArgumentException if duplicate keys or values are added
-   */
-  public static <K, V> ImmutableBiMap<K, V> of(
-      K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5) {
-    return new RegularImmutableBiMap<K, V>(ImmutableMap.of(
-        k1, v1, k2, v2, k3, v3, k4, v4, k5, v5));
-  }
-
-  // looking for of() with > 5 entries? Use the builder instead.
-
-  /**
-   * Returns a new builder. The generated builder is equivalent to the builder
-   * created by the {@link Builder} constructor.
-   */
-  public static <K, V> Builder<K, V> builder() {
-    return new Builder<K, V>();
-  }
-
-  /**
-   * A builder for creating immutable bimap instances, especially {@code public
-   * static final} bimaps ("constant bimaps"). Example: <pre>   {@code
-   *
-   *   static final ImmutableBiMap<String, Integer> WORD_TO_INT =
-   *       new ImmutableBiMap.Builder<String, Integer>()
-   *           .put("one", 1)
-   *           .put("two", 2)
-   *           .put("three", 3)
-   *           .build();}</pre>
-   *
-   * For <i>small</i> immutable bimaps, the {@code ImmutableBiMap.of()} methods
-   * are even more convenient.
-   *
-   * <p>Builder instances can be reused - it is safe to call {@link #build}
-   * multiple times to build multiple bimaps in series. Each bimap is a superset
-   * of the bimaps created before it.
-   */
-  public static final class Builder<K, V> extends ImmutableMap.Builder<K, V> {
-
-    /**
-     * Creates a new builder. The returned builder is equivalent to the builder
-     * generated by {@link ImmutableBiMap#builder}.
-     */
-    public Builder() {}
-
-    /**
-     * Associates {@code key} with {@code value} in the built bimap. Duplicate
-     * keys or values are not allowed, and will cause {@link #build} to fail.
-     */
-    @Override public Builder<K, V> put(K key, V value) {
-      super.put(key, value);
-      return this;
-    }
-
-    /**
-     * Associates all of the given map's keys and values in the built bimap.
-     * Duplicate keys or values are not allowed, and will cause {@link #build}
-     * to fail.
-     *
-     * @throws NullPointerException if any key or value in {@code map} is null
-     */
-    @Override public Builder<K, V> putAll(Map<? extends K, ? extends V> map) {
-      super.putAll(map);
-      return this;
-    }
-
-    /**
-     * Returns a newly-created immutable bimap.
-     *
-     * @throws IllegalArgumentException if duplicate keys or values were added
-     */
-    @Override public ImmutableBiMap<K, V> build() {
-      ImmutableMap<K, V> map = super.build();
-      if (map.isEmpty()) {
-        return of();
-      }
-      return new RegularImmutableBiMap<K, V>(super.build());
-    }
-  }
-
-  /**
-   * Returns an immutable bimap containing the same entries as {@code map}. If
-   * {@code map} somehow contains entries with duplicate keys (for example, if
-   * it is a {@code SortedMap} whose comparator is not <i>consistent with
-   * equals</i>), the results of this method are undefined.
-   *
-   * <p><b>Note:</b> If {@code map} is an {@code ImmutableBiMap}, the given map
-   * itself will be returned.
-   *
-   * @throws IllegalArgumentException if two keys have the same value
-   * @throws NullPointerException if any key or value in {@code map} is null
-   */
-  public static <K, V> ImmutableBiMap<K, V> copyOf(
-      Map<? extends K, ? extends V> map) {
-    if (map instanceof ImmutableBiMap) {
-      @SuppressWarnings("unchecked") // safe since map is not writable
-      ImmutableBiMap<K, V> bimap = (ImmutableBiMap<K, V>) map;
-      return bimap;
-    }
-
-    if (map.isEmpty()) {
-      return of();
-    }
-
-    ImmutableMap<K, V> immutableMap = ImmutableMap.copyOf(map);
-    return new RegularImmutableBiMap<K, V>(immutableMap);
-  }
-
-  ImmutableBiMap() {}
-
-  abstract ImmutableMap<K, V> delegate();
-
-  /**
-   * {@inheritDoc}
-   *
-   * <p>The inverse of an {@code ImmutableBiMap} is another
-   * {@code ImmutableBiMap}.
-   */
-  public abstract ImmutableBiMap<V, K> inverse();
-
-  @Override public boolean containsKey(@Nullable Object key) {
-    return delegate().containsKey(key);
-  }
-
-  @Override public boolean containsValue(@Nullable Object value) {
-    return inverse().containsKey(value);
-  }
-
-  @Override public ImmutableSet<Entry<K, V>> entrySet() {
-    return delegate().entrySet();
-  }
-
-  @Override public V get(@Nullable Object key) {
-    return delegate().get(key);
-  }
-
-  @Override public ImmutableSet<K> keySet() {
-    return delegate().keySet();
-  }
-
-  /**
-   * Returns an immutable set of the values in this map. The values are in the
-   * same order as the parameters used to build this map.
-   */
-  @Override public ImmutableSet<V> values() {
-    return inverse().keySet();
-  }
-
-  /**
-   * Guaranteed to throw an exception and leave the bimap unmodified.
-   *
-   * @throws UnsupportedOperationException always
-   */
-  public V forcePut(K key, V value) {
-    throw new UnsupportedOperationException();
-  }
-
-  @Override public boolean isEmpty() {
-    return delegate().isEmpty();
-  }
-
-  public int size() {
-    return delegate().size();
-  }
-
-  @Override public boolean equals(@Nullable Object object) {
-    return object == this || delegate().equals(object);
-  }
-
-  @Override public int hashCode() {
-    return delegate().hashCode();
-  }
-
-  @Override public String toString() {
-    return delegate().toString();
-  }
-
-  /** Bimap with no mappings. */
-  @SuppressWarnings("serial") // uses writeReplace(), not default serialization
-  static class EmptyBiMap extends ImmutableBiMap<Object, Object> {
-    @Override ImmutableMap<Object, Object> delegate() {
-      return ImmutableMap.of();
-    }
-    @Override public ImmutableBiMap<Object, Object> inverse() {
-      return this;
-    }
-    Object readResolve() {
-      return EMPTY_IMMUTABLE_BIMAP; // preserve singleton property
-    }
-  }
-
-  /**
-   * Serialized type for all ImmutableBiMap instances. It captures the logical
-   * contents and they are reconstructed using public factory methods. This
-   * ensures that the implementation types remain as implementation details.
-   *
-   * Since the bimap is immutable, ImmutableBiMap doesn't require special logic
-   * for keeping the bimap and its inverse in sync during serialization, the way
-   * AbstractBiMap does.
-   */
-  private static class SerializedForm extends ImmutableMap.SerializedForm {
-    SerializedForm(ImmutableBiMap<?, ?> bimap) {
-      super(bimap);
-    }
-    @Override Object readResolve() {
-      Builder<Object, Object> builder = new Builder<Object, Object>();
-      return createMap(builder);
-    }
-    private static final long serialVersionUID = 0;
-  }
-
-  @Override Object writeReplace() {
-    return new SerializedForm(this);
-  }
-}
diff --git a/src/com/google/common/collect/ImmutableClassToInstanceMap.java b/src/com/google/common/collect/ImmutableClassToInstanceMap.java
deleted file mode 100644
index 3df36de..0000000
--- a/src/com/google/common/collect/ImmutableClassToInstanceMap.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Copyright (C) 2009 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import static com.google.common.collect.MutableClassToInstanceMap.cast;
-
-import java.util.Map;
-
-/**
- * A class-to-instance map backed by an {@link ImmutableMap}. See also {@link
- * MutableClassToInstanceMap}.
- *
- * @author Kevin Bourrillion
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-public final class ImmutableClassToInstanceMap<B> extends
-    ForwardingMap<Class<? extends B>, B> implements ClassToInstanceMap<B> {
-  /**
-   * Returns a new builder. The generated builder is equivalent to the builder
-   * created by the {@link Builder} constructor.
-   */
-  public static <B> Builder<B> builder() {
-    return new Builder<B>();
-  }
-
-  /**
-   * A builder for creating immutable class-to-instance maps. Example:
-   * <pre>   {@code
-   *
-   *   static final ImmutableClassToInstanceMap<Handler> HANDLERS =
-   *       new ImmutableClassToInstanceMap.Builder<Handler>()
-   *           .put(FooHandler.class, new FooHandler())
-   *           .put(BarHandler.class, new SubBarHandler())
-   *           .put(Handler.class, new QuuxHandler())
-   *           .build();}</pre>
-   *
-   * <p>After invoking {@link #build()} it is still possible to add more
-   * entries and build again. Thus each map generated by this builder will be
-   * a superset of any map generated before it.
-   */
-  public static final class Builder<B> {
-    private final ImmutableMap.Builder<Class<? extends B>, B> mapBuilder
-        = ImmutableMap.builder();
-
-    /**
-     * Associates {@code key} with {@code value} in the built map. Duplicate
-     * keys are not allowed, and will cause {@link #build} to fail.
-     */
-    public <T extends B> Builder<B> put(Class<T> type, T value) {
-      mapBuilder.put(type, value);
-      return this;
-    }
-
-    /**
-     * Associates all of {@code map's} keys and values in the built map.
-     * Duplicate keys are not allowed, and will cause {@link #build} to fail.
-     *
-     * @throws NullPointerException if any key or value in {@code map} is null
-     * @throws ClassCastException if any value is not an instance of the type
-     *     specified by its key
-     */
-    public <T extends B> Builder<B> putAll(
-        Map<? extends Class<? extends T>, ? extends T> map) {
-      for (Entry<? extends Class<? extends T>, ? extends T> entry
-          : map.entrySet()) {
-        Class<? extends T> type = entry.getKey();
-        T value = entry.getValue();
-        mapBuilder.put(type, cast(type, value));
-      }
-      return this;
-    }
-
-    /**
-     * Returns a new immutable class-to-instance map containing the entries
-     * provided to this builder.
-     *
-     * @throws IllegalArgumentException if duplicate keys were added
-     */
-    public ImmutableClassToInstanceMap<B> build() {
-      return new ImmutableClassToInstanceMap<B>(mapBuilder.build());
-    }
-  }
-
-  /**
-   * Returns an immutable map containing the same entries as {@code map}. If
-   * {@code map} somehow contains entries with duplicate keys (for example, if
-   * it is a {@code SortedMap} whose comparator is not <i>consistent with
-   * equals</i>), the results of this method are undefined.
-   *
-   * <p><b>Note:</b> Despite what the method name suggests, if {@code map} is
-   * an {@code ImmutableClassToInstanceMap}, no copy will actually be performed.
-   *
-   * @throws NullPointerException if any key or value in {@code map} is null
-   * @throws ClassCastException if any value is not an instance of the type
-   *     specified by its key
-   */
-  @SuppressWarnings("unchecked") // covariant casts safe (unmodifiable)
-  public static <B, S extends B> ImmutableClassToInstanceMap<B> copyOf(
-      Map<? extends Class<? extends S>, ? extends S> map) {
-    if (map instanceof ImmutableClassToInstanceMap) {
-      return (ImmutableClassToInstanceMap<B>) (Map) map;
-    }
-    return new Builder<B>().putAll(map).build();
-  }
-
-  private final ImmutableMap<Class<? extends B>, B> delegate;
-
-  private ImmutableClassToInstanceMap(
-      ImmutableMap<Class<? extends B>, B> delegate) {
-    this.delegate = delegate;
-  }
-
-  @Override protected Map<Class<? extends B>, B> delegate() {
-    return delegate;
-  }
-
-  @SuppressWarnings("unchecked") // value could not get in if not a T
-  public <T extends B> T getInstance(Class<T> type) {
-    return (T) delegate.get(type);
-  }
-
-  /**
-   * Guaranteed to throw an exception and leave the map unmodified.
-   *
-   * @throws UnsupportedOperationException always
-   */
-  public <T extends B> T putInstance(Class<T> type, T value) {
-    throw new UnsupportedOperationException();
-  }
-}
diff --git a/src/com/google/common/collect/ImmutableCollection.java b/src/com/google/common/collect/ImmutableCollection.java
deleted file mode 100644
index cea72e3..0000000
--- a/src/com/google/common/collect/ImmutableCollection.java
+++ /dev/null
@@ -1,346 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.io.Serializable;
-import java.util.Collection;
-import java.util.Iterator;
-
-import javax.annotation.Nullable;
-
-/**
- * An immutable collection. Does not permit null elements.
- *
- * <p>In addition to the {@link Collection} methods, this class has an {@link
- * #asList()} method, which returns a list view of the collection's elements.
- *
- * <p><b>Note</b>: Although this class is not final, it cannot be subclassed
- * outside of this package as it has no public or protected constructors. Thus,
- * instances of this type are guaranteed to be immutable.
- *
- * @author Jesse Wilson
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible
-@SuppressWarnings("serial") // we're overriding default serialization
-public abstract class ImmutableCollection<E>
-    implements Collection<E>, Serializable {
-  static final ImmutableCollection<Object> EMPTY_IMMUTABLE_COLLECTION
-      = new EmptyImmutableCollection();
-
-  ImmutableCollection() {}
-
-  /**
-   * Returns an unmodifiable iterator across the elements in this collection.
-   */
-  public abstract UnmodifiableIterator<E> iterator();
-
-  public Object[] toArray() {
-    Object[] newArray = new Object[size()];
-    return toArray(newArray);
-  }
-
-  public <T> T[] toArray(T[] other) {
-    int size = size();
-    if (other.length < size) {
-      other = ObjectArrays.newArray(other, size);
-    } else if (other.length > size) {
-      other[size] = null;
-    }
-
-    // Writes will produce ArrayStoreException when the toArray() doc requires.
-    Object[] otherAsObjectArray = other;
-    int index = 0;
-    for (E element : this) {
-      otherAsObjectArray[index++] = element;
-    }
-    return other;
-  }
-
-  public boolean contains(@Nullable Object object) {
-    if (object == null) {
-      return false;
-    }
-    for (E element : this) {
-      if (element.equals(object)) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  public boolean containsAll(Collection<?> targets) {
-    for (Object target : targets) {
-      if (!contains(target)) {
-        return false;
-      }
-    }
-    return true;
-  }
-
-  public boolean isEmpty() {
-    return size() == 0;
-  }
-
-  @Override public String toString() {
-    StringBuilder sb = new StringBuilder(size() * 16).append('[');
-    Collections2.standardJoiner.appendTo(sb, this);
-    return sb.append(']').toString();
-  }
-
-  /**
-   * Guaranteed to throw an exception and leave the collection unmodified.
-   *
-   * @throws UnsupportedOperationException always
-   */
-  public final boolean add(E e) {
-    throw new UnsupportedOperationException();
-  }
-
-  /**
-   * Guaranteed to throw an exception and leave the collection unmodified.
-   *
-   * @throws UnsupportedOperationException always
-   */
-  public final boolean remove(Object object) {
-    throw new UnsupportedOperationException();
-  }
-
-  /**
-   * Guaranteed to throw an exception and leave the collection unmodified.
-   *
-   * @throws UnsupportedOperationException always
-   */
-  public final boolean addAll(Collection<? extends E> newElements) {
-    throw new UnsupportedOperationException();
-  }
-
-  /**
-   * Guaranteed to throw an exception and leave the collection unmodified.
-   *
-   * @throws UnsupportedOperationException always
-   */
-  public final boolean removeAll(Collection<?> oldElements) {
-    throw new UnsupportedOperationException();
-  }
-
-  /**
-   * Guaranteed to throw an exception and leave the collection unmodified.
-   *
-   * @throws UnsupportedOperationException always
-   */
-  public final boolean retainAll(Collection<?> elementsToKeep) {
-    throw new UnsupportedOperationException();
-  }
-
-  /**
-   * Guaranteed to throw an exception and leave the collection unmodified.
-   *
-   * @throws UnsupportedOperationException always
-   */
-  public final void clear() {
-    throw new UnsupportedOperationException();
-  }
-
-  // TODO: Restructure code so ImmutableList doesn't contain this variable,
-  // which it doesn't use.
-  private transient ImmutableList<E> asList;
-
-  /**
-   * Returns a list view of the collection.
-   *
-   * @since 2010.01.04 <b>tentative</b>
-   */
-  public ImmutableList<E> asList() {
-    ImmutableList<E> list = asList;
-    return (list == null) ? (asList = createAsList()) : list;
-  }
-
-  ImmutableList<E> createAsList() {
-    switch (size()) {
-      case 0:
-        return ImmutableList.of();
-      case 1:
-        return ImmutableList.of(iterator().next());
-      default:
-        return new ImmutableAsList<E>(toArray(), this);
-    }
-  }
-
-  private static class EmptyImmutableCollection
-      extends ImmutableCollection<Object> {
-    public int size() {
-      return 0;
-    }
-
-    @Override public boolean isEmpty() {
-      return true;
-    }
-
-    @Override public boolean contains(@Nullable Object object) {
-      return false;
-    }
-
-    @Override public UnmodifiableIterator<Object> iterator() {
-      return Iterators.EMPTY_ITERATOR;
-    }
-
-    private static final Object[] EMPTY_ARRAY = new Object[0];
-
-    @Override public Object[] toArray() {
-      return EMPTY_ARRAY;
-    }
-
-    @Override public <T> T[] toArray(T[] array) {
-      if (array.length > 0) {
-        array[0] = null;
-      }
-      return array;
-    }
-  }
-
-  private static class ArrayImmutableCollection<E>
-      extends ImmutableCollection<E> {
-    private final E[] elements;
-
-    ArrayImmutableCollection(E[] elements) {
-      this.elements = elements;
-    }
-
-    public int size() {
-      return elements.length;
-    }
-
-    @Override public boolean isEmpty() {
-      return false;
-    }
-
-    @Override public UnmodifiableIterator<E> iterator() {
-      return Iterators.forArray(elements);
-    }
-  }
-
-  /*
-   * Serializes ImmutableCollections as their logical contents. This ensures
-   * that implementation types do not leak into the serialized representation.
-   */
-  private static class SerializedForm implements Serializable {
-    final Object[] elements;
-    SerializedForm(Object[] elements) {
-      this.elements = elements;
-    }
-    Object readResolve() {
-      return elements.length == 0
-          ? EMPTY_IMMUTABLE_COLLECTION
-          : new ArrayImmutableCollection<Object>(Platform.clone(elements));
-    }
-    private static final long serialVersionUID = 0;
-  }
-
-  Object writeReplace() {
-    return new SerializedForm(toArray());
-  }
-
-  /**
-   * Abstract base class for builders of {@link ImmutableCollection} types.
-   */
-  abstract static class Builder<E> {
-    /**
-     * Adds {@code element} to the {@code ImmutableCollection} being built.
-     *
-     * <p>Note that each builder class covariantly returns its own type from
-     * this method.
-     *
-     * @param element the element to add
-     * @return this {@code Builder} instance
-     * @throws NullPointerException if {@code element} is null
-     */
-    public abstract Builder<E> add(E element);
-
-    /**
-     * Adds each element of {@code elements} to the {@code ImmutableCollection}
-     * being built.
-     *
-     * <p>Note that each builder class overrides this method in order to
-     * covariantly return its own type.
-     *
-     * @param elements the elements to add
-     * @return this {@code Builder} instance
-     * @throws NullPointerException if {@code elements} is null or contains a
-     *     null element
-     */
-    public Builder<E> add(E... elements) {
-      checkNotNull(elements); // for GWT
-      for (E element : elements) {
-        add(element);
-      }
-      return this;
-    }
-
-    /**
-     * Adds each element of {@code elements} to the {@code ImmutableCollection}
-     * being built.
-     *
-     * <p>Note that each builder class overrides this method in order to
-     * covariantly return its own type.
-     *
-     * @param elements the elements to add
-     * @return this {@code Builder} instance
-     * @throws NullPointerException if {@code elements} is null or contains a
-     *     null element
-     */
-    public Builder<E> addAll(Iterable<? extends E> elements) {
-      checkNotNull(elements); // for GWT
-      for (E element : elements) {
-        add(element);
-      }
-      return this;
-    }
-
-    /**
-     * Adds each element of {@code elements} to the {@code ImmutableCollection}
-     * being built.
-     *
-     * <p>Note that each builder class overrides this method in order to
-     * covariantly return its own type.
-     *
-     * @param elements the elements to add
-     * @return this {@code Builder} instance
-     * @throws NullPointerException if {@code elements} is null or contains a
-     *     null element
-     */
-    public Builder<E> addAll(Iterator<? extends E> elements) {
-      checkNotNull(elements); // for GWT
-      while (elements.hasNext()) {
-        add(elements.next());
-      }
-      return this;
-    }
-
-    /**
-     * Returns a newly-created {@code ImmutableCollection} of the appropriate
-     * type, containing the elements provided to this builder.
-     *
-     * <p>Note that each builder class covariantly returns the appropriate type
-     * of {@code ImmutableCollection} from this method.
-     */
-    public abstract ImmutableCollection<E> build();
-  }
-}
diff --git a/src/com/google/common/collect/ImmutableEntry.java b/src/com/google/common/collect/ImmutableEntry.java
deleted file mode 100644
index 56b1c9b..0000000
--- a/src/com/google/common/collect/ImmutableEntry.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-
-import java.io.Serializable;
-
-import javax.annotation.Nullable;
-
-/**
- * @see com.google.common.collect.Maps#immutableEntry(Object, Object)
- */
-@GwtCompatible
-class ImmutableEntry<K, V> extends AbstractMapEntry<K, V>
-    implements Serializable {
-  private final K key;
-  private final V value;
-
-  ImmutableEntry(@Nullable K key, @Nullable V value) {
-    this.key = key;
-    this.value = value;
-  }
-
-  @Override public K getKey() {
-    return key;
-  }
-
-  @Override public V getValue() {
-    return value;
-  }
-  private static final long serialVersionUID = 0;
-}
diff --git a/src/com/google/common/collect/ImmutableEnumSet.java b/src/com/google/common/collect/ImmutableEnumSet.java
deleted file mode 100644
index 1e70db8..0000000
--- a/src/com/google/common/collect/ImmutableEnumSet.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * Copyright (C) 2009 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-
-import java.io.Serializable;
-import java.util.Collection;
-import java.util.EnumSet;
-import java.util.Set;
-
-/**
- * Implementation of {@link ImmutableSet} backed by a non-empty {@link
- * java.util.EnumSet}.
- *
- * @author Jared Levy
- */
-@GwtCompatible(serializable = true)
-@SuppressWarnings("serial") // we're overriding default serialization
-final class ImmutableEnumSet<E /*extends Enum<E>*/> extends ImmutableSet<E> {
-  /*
-   * Notes on EnumSet and <E extends Enum<E>>:
-   *
-   * This class isn't an arbitrary ForwardingImmutableSet because we need to
-   * know that calling {@code clone()} during deserialization will return an
-   * object that no one else has a reference to, allowing us to guarantee
-   * immutability. Hence, we support only {@link EnumSet}.
-   *
-   * GWT complicates matters. If we declare the class's type parameter as
-   * <E extends Enum<E>> (as is necessary to declare a field of type
-   * EnumSet<E>), GWT generates serializers for every available enum. This
-   * increases the size of some applications' JavaScript by over 10%. To avoid
-   * this, we declare the type parameter as just <E> and the field as just
-   * Set<E>. writeReplace() must then use an unchecked cast to return to
-   * EnumSet, guaranteeing immutability as described above.
-   */
-  private final transient Set<E> delegate;
-
-  ImmutableEnumSet(Set<E> delegate) {
-    this.delegate = delegate;
-  }
-
-  @Override public UnmodifiableIterator<E> iterator() {
-    return Iterators.unmodifiableIterator(delegate.iterator());
-  }
-
-  public int size() {
-    return delegate.size();
-  }
-
-  @Override public boolean contains(Object object) {
-    return delegate.contains(object);
-  }
-
-  @Override public boolean containsAll(Collection<?> collection) {
-    return delegate.containsAll(collection);
-  }
-
-  @Override public boolean isEmpty() {
-    return delegate.isEmpty();
-  }
-
-  @Override public Object[] toArray() {
-    return delegate.toArray();
-  }
-
-  @Override public <T> T[] toArray(T[] array) {
-    return delegate.toArray(array);
-  }
-
-  @Override public boolean equals(Object object) {
-    return object == this || delegate.equals(object);
-  }
-
-  private transient int hashCode;
-
-  @Override public int hashCode() {
-    int result = hashCode;
-    return (result == 0) ? hashCode = delegate.hashCode() : result;
-  }
-
-  @Override public String toString() {
-    return delegate.toString();
-  }
-
-  // All callers of the constructor are restricted to <E extends Enum<E>>.
-  @SuppressWarnings("unchecked")
-  @Override Object writeReplace() {
-    return new EnumSerializedForm((EnumSet) delegate);
-  }
-
-  /*
-   * This class is used to serialize ImmutableEnumSet instances.
-   */
-  private static class EnumSerializedForm<E extends Enum<E>>
-      implements Serializable {
-    final EnumSet<E> delegate;
-    EnumSerializedForm(EnumSet<E> delegate) {
-      this.delegate = delegate;
-    }
-    Object readResolve() {
-      // EJ2 #76: Write readObject() methods defensively.
-      return new ImmutableEnumSet<E>(delegate.clone());
-    }
-    private static final long serialVersionUID = 0;
-  }
-}
diff --git a/src/com/google/common/collect/ImmutableList.java b/src/com/google/common/collect/ImmutableList.java
deleted file mode 100644
index 2957fa5..0000000
--- a/src/com/google/common/collect/ImmutableList.java
+++ /dev/null
@@ -1,482 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-
-import java.io.InvalidObjectException;
-import java.io.ObjectInputStream;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import java.util.RandomAccess;
-
-import javax.annotation.Nullable;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-/**
- * A high-performance, immutable, random-access {@code List} implementation.
- * Does not permit null elements.
- *
- * <p>Unlike {@link Collections#unmodifiableList}, which is a <i>view</i> of a
- * separate collection that can still change, an instance of {@code
- * ImmutableList} contains its own private data and will <i>never</i> change.
- * {@code ImmutableList} is convenient for {@code public static final} lists
- * ("constant lists") and also lets you easily make a "defensive copy" of a list
- * provided to your class by a caller.
- *
- * <p><b>Note</b>: Although this class is not final, it cannot be subclassed as
- * it has no public or protected constructors. Thus, instances of this type are
- * guaranteed to be immutable.
- *
- * @see ImmutableMap
- * @see ImmutableSet
- * @author Kevin Bourrillion
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible(serializable = true)
-@SuppressWarnings("serial") // we're overriding default serialization
-public abstract class ImmutableList<E> extends ImmutableCollection<E>
-    implements List<E>, RandomAccess {
-  /**
-   * Returns the empty immutable list. This set behaves and performs comparably
-   * to {@link Collections#emptyList}, and is preferable mainly for consistency
-   * and maintainability of your code.
-   */
-  // Casting to any type is safe because the list will never hold any elements.
-  @SuppressWarnings("unchecked")
-  public static <E> ImmutableList<E> of() {
-    // BEGIN android-changed
-    return (ImmutableList) EmptyImmutableList.INSTANCE;
-    // END android-changed
-  }
-
-  /**
-   * Returns an immutable list containing a single element. This list behaves
-   * and performs comparably to {@link Collections#singleton}, but will not
-   * accept a null element. It is preferable mainly for consistency and
-   * maintainability of your code.
-   *
-   * @throws NullPointerException if {@code element} is null
-   */
-  public static <E> ImmutableList<E> of(E element) {
-    return new SingletonImmutableList<E>(element);
-  }
-
-  /**
-   * Identical to {@link #of(Object[])}.
-   *
-   * @throws NullPointerException if any element is null
-   */
-  public static <E> ImmutableList<E> of(E e1, E e2) {
-    return new RegularImmutableList<E>(copyIntoArray(e1, e2));
-  }
-
-  /**
-   * Identical to {@link #of(Object[])}.
-   *
-   * @throws NullPointerException if any element is null
-   */
-  public static <E> ImmutableList<E> of(E e1, E e2, E e3) {
-    return new RegularImmutableList<E>(copyIntoArray(e1, e2, e3));
-  }
-
-  /**
-   * Identical to {@link #of(Object[])}.
-   *
-   * @throws NullPointerException if any element is null
-   */
-  public static <E> ImmutableList<E> of(E e1, E e2, E e3, E e4) {
-    return new RegularImmutableList<E>(copyIntoArray(e1, e2, e3, e4));
-  }
-
-  /**
-   * Identical to {@link #of(Object[])}.
-   *
-   * @throws NullPointerException if any element is null
-   */
-  public static <E> ImmutableList<E> of(E e1, E e2, E e3, E e4, E e5) {
-    return new RegularImmutableList<E>(copyIntoArray(e1, e2, e3, e4, e5));
-  }
-
-  /**
-   * Identical to {@link #of(Object[])}.
-   *
-   * @throws NullPointerException if any element is null
-   */
-  public static <E> ImmutableList<E> of(E e1, E e2, E e3, E e4, E e5, E e6) {
-    return new RegularImmutableList<E>(copyIntoArray(e1, e2, e3, e4, e5, e6));
-  }
-
-  /**
-   * Identical to {@link #of(Object[])}.
-   *
-   * @throws NullPointerException if any element is null
-   */
-  public static <E> ImmutableList<E> of(
-      E e1, E e2, E e3, E e4, E e5, E e6, E e7) {
-    return new RegularImmutableList<E>(
-        copyIntoArray(e1, e2, e3, e4, e5, e6, e7));
-  }
-
-  /**
-   * Identical to {@link #of(Object[])}.
-   *
-   * @throws NullPointerException if any element is null
-   */
-  public static <E> ImmutableList<E> of(
-      E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8) {
-    return new RegularImmutableList<E>(
-        copyIntoArray(e1, e2, e3, e4, e5, e6, e7, e8));
-  }
-
-  /**
-   * Identical to {@link #of(Object[])}.
-   *
-   * @throws NullPointerException if any element is null
-   */
-  public static <E> ImmutableList<E> of(
-      E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9) {
-    return new RegularImmutableList<E>(
-        copyIntoArray(e1, e2, e3, e4, e5, e6, e7, e8, e9));
-  }
-
-  /**
-   * Identical to {@link #of(Object[])}.
-   *
-   * @throws NullPointerException if any element is null
-   */
-  public static <E> ImmutableList<E> of(
-      E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9, E e10) {
-    return new RegularImmutableList<E>(
-        copyIntoArray(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10));
-  }
-
-  /**
-   * Identical to {@link #of(Object[])}.
-   *
-   * @throws NullPointerException if any element is null
-   */
-  public static <E> ImmutableList<E> of(
-      E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9, E e10, E e11) {
-    return new RegularImmutableList<E>(
-        copyIntoArray(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11));
-  }
-
-  // These go up to eleven. After that, you just get the varargs form, and
-  // whatever warnings might come along with it. :(
-
-  /**
-   * Returns an immutable list containing the given elements, in order.
-   *
-   * @throws NullPointerException if any of {@code elements} is null
-   */
-  public static <E> ImmutableList<E> of(E... elements) {
-    checkNotNull(elements); // for GWT
-    switch (elements.length) {
-      case 0:
-        return ImmutableList.of();
-      case 1:
-        return new SingletonImmutableList<E>(elements[0]);
-      default:
-        return new RegularImmutableList<E>(copyIntoArray(elements));
-    }
-  }
-
-  /**
-   * Returns an immutable list containing the given elements, in order. If
-   * {@code elements} is a {@link Collection}, this method behaves exactly as
-   * {@link #copyOf(Collection)}; otherwise, it behaves exactly as {@code
-   * copyOf(elements.iterator()}.
-   *
-   * @throws NullPointerException if any of {@code elements} is null
-   */
-  @SuppressWarnings("unchecked") // bugs.sun.com/view_bug.do?bug_id=6558557
-  public static <E> ImmutableList<E> copyOf(Iterable<? extends E> elements) {
-    checkNotNull(elements);
-    return (elements instanceof Collection)
-      ? copyOf((Collection<? extends E>) elements)
-      : copyOf(elements.iterator());
-  }
-
-  /**
-   * Returns an immutable list containing the given elements, in order.
-   *
-   * <p><b>Note:</b> Despite what the method name suggests, if {@code elements}
-   * is an {@code ImmutableList}, no copy will actually be performed, and the
-   * given list itself will be returned.
-   *
-   * <p>Note that if {@code list} is a {@code List<String>}, then {@code
-   * ImmutableList.copyOf(list)} returns an {@code ImmutableList<String>}
-   * containing each of the strings in {@code list}, while
-   * ImmutableList.of(list)} returns an {@code ImmutableList<List<String>>}
-   * containing one element (the given list itself).
-   *
-   * <p>This method is safe to use even when {@code elements} is a synchronized
-   * or concurrent collection that is currently being modified by another
-   * thread.
-   *
-   * @throws NullPointerException if any of {@code elements} is null
-   * @since 2010.01.04 <b>stable</b> (Iterable overload existed previously)
-   */
-  public static <E> ImmutableList<E> copyOf(Collection<? extends E> elements) {
-    checkNotNull(elements);
-    // TODO: Once the ImmutableAsList and ImmutableSortedAsList are
-    // GWT-compatible, return elements.asList() when elements is an
-    // ImmutableCollection.
-    if (elements instanceof ImmutableList) {
-      /*
-       * TODO: When given an ImmutableList that's a sublist, copy the referenced
-       * portion of the array into a new array to save space?
-       */
-      @SuppressWarnings("unchecked") // all supported methods are covariant
-      ImmutableList<E> list = (ImmutableList<E>) elements;
-      return list;
-    }
-    return copyFromCollection(elements);
-  }
-
-  /**
-   * Returns an immutable list containing the given elements, in order.
-   *
-   * @throws NullPointerException if any of {@code elements} is null
-   */
-  public static <E> ImmutableList<E> copyOf(Iterator<? extends E> elements) {
-    return copyFromCollection(Lists.newArrayList(elements));
-  }
-
-  private static <E> ImmutableList<E> copyFromCollection(
-      Collection<? extends E> collection) {
-    Object[] elements = collection.toArray();
-    switch (elements.length) {
-      case 0:
-        return of();
-      case 1:
-        @SuppressWarnings("unchecked") // collection had only Es in it
-        ImmutableList<E> list = new SingletonImmutableList<E>((E) elements[0]);
-        return list;
-      default:
-        return new RegularImmutableList<E>(copyIntoArray(elements));
-    }
-  }
-
-  ImmutableList() {}
-
-  // This declaration is needed to make List.iterator() and
-  // ImmutableCollection.iterator() consistent.
-  @Override public abstract UnmodifiableIterator<E> iterator();
-
-  // Mark these two methods with @Nullable
-
-  public abstract int indexOf(@Nullable Object object);
-
-  public abstract int lastIndexOf(@Nullable Object object);
-
-  // constrain the return type to ImmutableList<E>
-
-  /**
-   * Returns an immutable list of the elements between the specified {@code
-   * fromIndex}, inclusive, and {@code toIndex}, exclusive. (If {@code
-   * fromIndex} and {@code toIndex} are equal, the empty immutable list is
-   * returned.)
-   */
-  public abstract ImmutableList<E> subList(int fromIndex, int toIndex);
-
-  /**
-   * Guaranteed to throw an exception and leave the list unmodified.
-   *
-   * @throws UnsupportedOperationException always
-   */
-  public final boolean addAll(int index, Collection<? extends E> newElements) {
-    throw new UnsupportedOperationException();
-  }
-
-  /**
-   * Guaranteed to throw an exception and leave the list unmodified.
-   *
-   * @throws UnsupportedOperationException always
-   */
-  public final E set(int index, E element) {
-    throw new UnsupportedOperationException();
-  }
-
-  /**
-   * Guaranteed to throw an exception and leave the list unmodified.
-   *
-   * @throws UnsupportedOperationException always
-   */
-  public final void add(int index, E element) {
-    throw new UnsupportedOperationException();
-  }
-
-  /**
-   * Guaranteed to throw an exception and leave the list unmodified.
-   *
-   * @throws UnsupportedOperationException always
-   */
-  public final E remove(int index) {
-    throw new UnsupportedOperationException();
-  }
-
-  private static Object[] copyIntoArray(Object... source) {
-    Object[] array = new Object[source.length];
-    int index = 0;
-    for (Object element : source) {
-      if (element == null) {
-        throw new NullPointerException("at index " + index);
-      }
-      array[index++] = element;
-    }
-    return array;
-  }
-
-  /**
-   * Returns this list instance.
-   *
-   * @since 2010.01.04 <b>tentative</b>
-   */
-  @Override public ImmutableList<E> asList() {
-    return this;
-  }
-
-  /*
-   * Serializes ImmutableLists as their logical contents. This ensures that
-   * implementation types do not leak into the serialized representation.
-   */
-  private static class SerializedForm implements Serializable {
-    final Object[] elements;
-    SerializedForm(Object[] elements) {
-      this.elements = elements;
-    }
-    Object readResolve() {
-      return of(elements);
-    }
-    private static final long serialVersionUID = 0;
-  }
-
-  private void readObject(ObjectInputStream stream)
-      throws InvalidObjectException {
-    throw new InvalidObjectException("Use SerializedForm");
-  }
-
-  @Override Object writeReplace() {
-    return new SerializedForm(toArray());
-  }
-
-  /**
-   * Returns a new builder. The generated builder is equivalent to the builder
-   * created by the {@link Builder} constructor.
-   */
-  public static <E> Builder<E> builder() {
-    return new Builder<E>();
-  }
-
-  /**
-   * A builder for creating immutable list instances, especially
-   * {@code public static final} lists ("constant lists").
-   *
-   * <p>Example:
-   * <pre>   {@code
-   *   public static final ImmutableList<Color> GOOGLE_COLORS
-   *       = new ImmutableList.Builder<Color>()
-   *           .addAll(WEBSAFE_COLORS)
-   *           .add(new Color(0, 191, 255))
-   *           .build();}</pre>
-   *
-   * <p>Builder instances can be reused - it is safe to call {@link #build}
-   * multiple times to build multiple lists in series. Each new list
-   * contains the one created before it.
-   */
-  public static final class Builder<E> extends ImmutableCollection.Builder<E> {
-    private final ArrayList<E> contents = Lists.newArrayList();
-
-    /**
-     * Creates a new builder. The returned builder is equivalent to the builder
-     * generated by {@link ImmutableList#builder}.
-     */
-    public Builder() {}
-
-    /**
-     * Adds {@code element} to the {@code ImmutableList}.
-     *
-     * @param element the element to add
-     * @return this {@code Builder} object
-     * @throws NullPointerException if {@code element} is null
-     */
-    @Override public Builder<E> add(E element) {
-      contents.add(checkNotNull(element));
-      return this;
-    }
-
-    /**
-     * Adds each element of {@code elements} to the {@code ImmutableList}.
-     *
-     * @param elements the {@code Iterable} to add to the {@code ImmutableList}
-     * @return this {@code Builder} object
-     * @throws NullPointerException if {@code elements} is null or contains a
-     *     null element
-     */
-    @Override public Builder<E> addAll(Iterable<? extends E> elements) {
-      if (elements instanceof Collection) {
-        Collection<?> collection = (Collection<?>) elements;
-        contents.ensureCapacity(contents.size() + collection.size());
-      }
-      super.addAll(elements);
-      return this;
-    }
-
-    /**
-     * Adds each element of {@code elements} to the {@code ImmutableList}.
-     *
-     * @param elements the {@code Iterable} to add to the {@code ImmutableList}
-     * @return this {@code Builder} object
-     * @throws NullPointerException if {@code elements} is null or contains a
-     *     null element
-     */
-    @Override public Builder<E> add(E... elements) {
-      checkNotNull(elements); // for GWT
-      contents.ensureCapacity(contents.size() + elements.length);
-      super.add(elements);
-      return this;
-    }
-
-    /**
-     * Adds each element of {@code elements} to the {@code ImmutableList}.
-     *
-     * @param elements the {@code Iterable} to add to the {@code ImmutableList}
-     * @return this {@code Builder} object
-     * @throws NullPointerException if {@code elements} is null or contains a
-     *     null element
-     */
-    @Override public Builder<E> addAll(Iterator<? extends E> elements) {
-      super.addAll(elements);
-      return this;
-    }
-
-    /**
-     * Returns a newly-created {@code ImmutableList} based on the contents of
-     * the {@code Builder}.
-     */
-    @Override public ImmutableList<E> build() {
-      return copyOf(contents);
-    }
-  }
-}
diff --git a/src/com/google/common/collect/ImmutableListMultimap.java b/src/com/google/common/collect/ImmutableListMultimap.java
deleted file mode 100644
index 6d0ec60..0000000
--- a/src/com/google/common/collect/ImmutableListMultimap.java
+++ /dev/null
@@ -1,339 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-
-import java.io.IOException;
-import java.io.InvalidObjectException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.util.Collection;
-import java.util.Map;
-
-import javax.annotation.Nullable;
-
-/**
- * An immutable {@link ListMultimap} with reliable user-specified key and value
- * iteration order. Does not permit null keys or values.
- *
- * <p>Unlike {@link Multimaps#unmodifiableListMultimap(ListMultimap)}, which is
- * a <i>view</i> of a separate multimap which can still change, an instance of
- * {@code ImmutableListMultimap} contains its own data and will <i>never</i>
- * change. {@code ImmutableListMultimap} is convenient for
- * {@code public static final} multimaps ("constant multimaps") and also lets
- * you easily make a "defensive copy" of a multimap provided to your class by
- * a caller.
- *
- * <p><b>Note</b>: Although this class is not final, it cannot be subclassed as
- * it has no public or protected constructors. Thus, instances of this class
- * are guaranteed to be immutable.
- *
- * @author Jared Levy
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible(serializable = true)
-public class ImmutableListMultimap<K, V>
-    extends ImmutableMultimap<K, V>
-    implements ListMultimap<K, V> {
-
-  /** Returns the empty multimap. */
-  // Casting is safe because the multimap will never hold any elements.
-  @SuppressWarnings("unchecked")
-  public static <K, V> ImmutableListMultimap<K, V> of() {
-    // BEGIN android-changed
-    return (ImmutableListMultimap) EmptyImmutableListMultimap.INSTANCE;
-    // END android-changed
-  }
-
-  /**
-   * Returns an immutable multimap containing a single entry.
-   */
-  public static <K, V> ImmutableListMultimap<K, V> of(K k1, V v1) {
-    ImmutableListMultimap.Builder<K, V> builder
-        = ImmutableListMultimap.builder();
-    builder.put(k1, v1);
-    return builder.build();
-  }
-
-  /**
-   * Returns an immutable multimap containing the given entries, in order.
-   */
-  public static <K, V> ImmutableListMultimap<K, V> of(K k1, V v1, K k2, V v2) {
-    ImmutableListMultimap.Builder<K, V> builder
-        = ImmutableListMultimap.builder();
-    builder.put(k1, v1);
-    builder.put(k2, v2);
-    return builder.build();
-  }
-
-  /**
-   * Returns an immutable multimap containing the given entries, in order.
-   */
-  public static <K, V> ImmutableListMultimap<K, V> of(
-      K k1, V v1, K k2, V v2, K k3, V v3) {
-    ImmutableListMultimap.Builder<K, V> builder
-        = ImmutableListMultimap.builder();
-    builder.put(k1, v1);
-    builder.put(k2, v2);
-    builder.put(k3, v3);
-    return builder.build();
-  }
-
-  /**
-   * Returns an immutable multimap containing the given entries, in order.
-   */
-  public static <K, V> ImmutableListMultimap<K, V> of(
-      K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4) {
-    ImmutableListMultimap.Builder<K, V> builder
-        = ImmutableListMultimap.builder();
-    builder.put(k1, v1);
-    builder.put(k2, v2);
-    builder.put(k3, v3);
-    builder.put(k4, v4);
-    return builder.build();
-  }
-
-  /**
-   * Returns an immutable multimap containing the given entries, in order.
-   */
-  public static <K, V> ImmutableListMultimap<K, V> of(
-      K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5) {
-    ImmutableListMultimap.Builder<K, V> builder
-        = ImmutableListMultimap.builder();
-    builder.put(k1, v1);
-    builder.put(k2, v2);
-    builder.put(k3, v3);
-    builder.put(k4, v4);
-    builder.put(k5, v5);
-    return builder.build();
-  }
-
-  // looking for of() with > 5 entries? Use the builder instead.
-
-  /**
-   * Returns a new builder. The generated builder is equivalent to the builder
-   * created by the {@link Builder} constructor.
-   */
-  public static <K, V> Builder<K, V> builder() {
-    return new Builder<K, V>();
-  }
-
-  /**
-   * A builder for creating immutable {@code ListMultimap} instances, especially
-   * {@code public static final} multimaps ("constant multimaps"). Example:
-   * <pre>   {@code
-   *
-   *   static final Multimap<String, Integer> STRING_TO_INTEGER_MULTIMAP =
-   *       new ImmutableListMultimap.Builder<String, Integer>()
-   *           .put("one", 1)
-   *           .putAll("several", 1, 2, 3)
-   *           .putAll("many", 1, 2, 3, 4, 5)
-   *           .build();}</pre>
-   *
-   * <p>Builder instances can be reused - it is safe to call {@link #build}
-   * multiple times to build multiple multimaps in series. Each multimap
-   * contains the key-value mappings in the previously created multimaps.
-   */
-  public static final class Builder<K, V>
-      extends ImmutableMultimap.Builder<K, V> {
-    /**
-     * Creates a new builder. The returned builder is equivalent to the builder
-     * generated by {@link ImmutableListMultimap#builder}.
-     */
-    public Builder() {}
-
-    /**
-     * Adds a key-value mapping to the built multimap.
-     */
-    @Override public Builder<K, V> put(K key, V value) {
-      super.put(key, value);
-      return this;
-    }
-
-    /**
-     * Stores a collection of values with the same key in the built multimap.
-     *
-     * @throws NullPointerException if {@code key}, {@code values}, or any
-     *     element in {@code values} is null. The builder is left in an invalid
-     *     state.
-     */
-    @Override public Builder<K, V> putAll(K key, Iterable<? extends V> values) {
-      super.putAll(key, values);
-      return this;
-    }
-
-    /**
-     * Stores an array of values with the same key in the built multimap.
-     *
-     * @throws NullPointerException if the key or any value is null. The builder
-     *     is left in an invalid state.
-     */
-    @Override public Builder<K, V> putAll(K key, V... values) {
-      super.putAll(key, values);
-      return this;
-    }
-
-    /**
-     * Stores another multimap's entries in the built multimap. The generated
-     * multimap's key and value orderings correspond to the iteration ordering
-     * of the {@code multimap.asMap()} view, with new keys and values following
-     * any existing keys and values.
-     *
-     * @throws NullPointerException if any key or value in {@code multimap} is
-     *     null. The builder is left in an invalid state.
-     */
-    @Override public Builder<K, V> putAll(
-        Multimap<? extends K, ? extends V> multimap) {
-      super.putAll(multimap);
-      return this;
-    }
-
-    /**
-     * Returns a newly-created immutable multimap.
-     */
-    @Override public ImmutableListMultimap<K, V> build() {
-      return (ImmutableListMultimap<K, V>) super.build();
-    }
-  }
-
-  /**
-   * Returns an immutable multimap containing the same mappings as
-   * {@code multimap}. The generated multimap's key and value orderings
-   * correspond to the iteration ordering of the {@code multimap.asMap()} view.
-   *
-   * <p><b>Note:</b> Despite what the method name suggests, if
-   * {@code multimap} is an {@code ImmutableListMultimap}, no copy will actually
-   * be performed, and the given multimap itself will be returned.
-   *
-   * @throws NullPointerException if any key or value in {@code multimap} is
-   *     null
-   */
-  public static <K, V> ImmutableListMultimap<K, V> copyOf(
-      Multimap<? extends K, ? extends V> multimap) {
-    if (multimap.isEmpty()) {
-      return of();
-    }
-
-    if (multimap instanceof ImmutableListMultimap) {
-      @SuppressWarnings("unchecked") // safe since multimap is not writable
-      ImmutableListMultimap<K, V> kvMultimap
-          = (ImmutableListMultimap<K, V>) multimap;
-      return kvMultimap;
-    }
-
-    ImmutableMap.Builder<K, ImmutableList<V>> builder = ImmutableMap.builder();
-    int size = 0;
-
-    for (Map.Entry<? extends K, ? extends Collection<? extends V>> entry
-        : multimap.asMap().entrySet()) {
-      ImmutableList<V> list = ImmutableList.copyOf(entry.getValue());
-      if (!list.isEmpty()) {
-        builder.put(entry.getKey(), list);
-        size += list.size();
-      }
-    }
-
-    return new ImmutableListMultimap<K, V>(builder.build(), size);
-  }
-
-  ImmutableListMultimap(ImmutableMap<K, ImmutableList<V>> map, int size) {
-    super(map, size);
-  }
-
-  // views
-
-  /**
-   * Returns an immutable list of the values for the given key.  If no mappings
-   * in the multimap have the provided key, an empty immutable list is
-   * returned. The values are in the same order as the parameters used to build
-   * this multimap.
-   */
-  @Override public ImmutableList<V> get(@Nullable K key) {
-    // This cast is safe as its type is known in constructor.
-    ImmutableList<V> list = (ImmutableList<V>) map.get(key);
-    return (list == null) ? ImmutableList.<V>of() : list;
-  }
-
-  /**
-   * Guaranteed to throw an exception and leave the multimap unmodified.
-   *
-   * @throws UnsupportedOperationException always
-   */
-  @Override public ImmutableList<V> removeAll(Object key) {
-    throw new UnsupportedOperationException();
-  }
-
-  /**
-   * Guaranteed to throw an exception and leave the multimap unmodified.
-   *
-   * @throws UnsupportedOperationException always
-   */
-  @Override public ImmutableList<V> replaceValues(
-      K key, Iterable<? extends V> values) {
-    throw new UnsupportedOperationException();
-  }
-
-  /**
-   * @serialData number of distinct keys, and then for each distinct key: the
-   *     key, the number of values for that key, and the key's values
-   */
-  private void writeObject(ObjectOutputStream stream) throws IOException {
-    stream.defaultWriteObject();
-    Serialization.writeMultimap(this, stream);
-  }
-
-  private void readObject(ObjectInputStream stream)
-      throws IOException, ClassNotFoundException {
-    stream.defaultReadObject();
-    int keyCount = stream.readInt();
-    if (keyCount < 0) {
-      throw new InvalidObjectException("Invalid key count " + keyCount);
-    }
-    ImmutableMap.Builder<Object, ImmutableList<Object>> builder
-        = ImmutableMap.builder();
-    int tmpSize = 0;
-
-    for (int i = 0; i < keyCount; i++) {
-      Object key = stream.readObject();
-      int valueCount = stream.readInt();
-      if (valueCount <= 0) {
-        throw new InvalidObjectException("Invalid value count " + valueCount);
-      }
-
-      Object[] array = new Object[valueCount];
-      for (int j = 0; j < valueCount; j++) {
-        array[j] = stream.readObject();
-      }
-      builder.put(key, ImmutableList.of(array));
-      tmpSize += valueCount;
-    }
-
-    ImmutableMap<Object, ImmutableList<Object>> tmpMap;
-    try {
-      tmpMap = builder.build();
-    } catch (IllegalArgumentException e) {
-      throw (InvalidObjectException)
-          new InvalidObjectException(e.getMessage()).initCause(e);
-    }
-
-    FieldSettersHolder.MAP_FIELD_SETTER.set(this, tmpMap);
-    FieldSettersHolder.SIZE_FIELD_SETTER.set(this, tmpSize);
-  }
-
-  private static final long serialVersionUID = 0;
-}
diff --git a/src/com/google/common/collect/ImmutableMap.java b/src/com/google/common/collect/ImmutableMap.java
deleted file mode 100644
index b842b8c..0000000
--- a/src/com/google/common/collect/ImmutableMap.java
+++ /dev/null
@@ -1,383 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.collect.Iterables.getOnlyElement;
-
-import java.io.Serializable;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
-import javax.annotation.Nullable;
-
-/**
- * An immutable, hash-based {@link Map} with reliable user-specified iteration
- * order. Does not permit null keys or values.
- *
- * <p>Unlike {@link Collections#unmodifiableMap}, which is a <i>view</i> of a
- * separate map which can still change, an instance of {@code ImmutableMap}
- * contains its own data and will <i>never</i> change. {@code ImmutableMap} is
- * convenient for {@code public static final} maps ("constant maps") and also
- * lets you easily make a "defensive copy" of a map provided to your class by a
- * caller.
- *
- * <p><b>Note</b>: Although this class is not final, it cannot be subclassed as
- * it has no public or protected constructors. Thus, instances of this class are
- * guaranteed to be immutable.
- *
- * @see ImmutableList
- * @see ImmutableSet
- * @author Jesse Wilson
- * @author Kevin Bourrillion
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible(serializable = true)
-@SuppressWarnings("serial") // we're overriding default serialization
-public abstract class ImmutableMap<K, V> implements Map<K, V>, Serializable {
-  /**
-   * Returns the empty map. This map behaves and performs comparably to
-   * {@link Collections#emptyMap}, and is preferable mainly for consistency
-   * and maintainability of your code.
-   */
-  // Casting to any type is safe because the set will never hold any elements.
-  @SuppressWarnings("unchecked")
-  public static <K, V> ImmutableMap<K, V> of() {
-    // BEGIN android-changed
-    return (ImmutableMap) EmptyImmutableMap.INSTANCE;
-    // END android-changed
-  }
-
-  /**
-   * Returns an immutable map containing a single entry. This map behaves and
-   * performs comparably to {@link Collections#singletonMap} but will not accept
-   * a null key or value. It is preferable mainly for consistency and
-   * maintainability of your code.
-   */
-  public static <K, V> ImmutableMap<K, V> of(K k1, V v1) {
-    return new SingletonImmutableMap<K, V>(
-        checkNotNull(k1), checkNotNull(v1));
-  }
-
-  /**
-   * Returns an immutable map containing the given entries, in order.
-   *
-   * @throws IllegalArgumentException if duplicate keys are provided
-   */
-  public static <K, V> ImmutableMap<K, V> of(K k1, V v1, K k2, V v2) {
-    return new RegularImmutableMap<K, V>(entryOf(k1, v1), entryOf(k2, v2));
-  }
-
-  /**
-   * Returns an immutable map containing the given entries, in order.
-   *
-   * @throws IllegalArgumentException if duplicate keys are provided
-   */
-  public static <K, V> ImmutableMap<K, V> of(
-      K k1, V v1, K k2, V v2, K k3, V v3) {
-    return new RegularImmutableMap<K, V>(
-        entryOf(k1, v1), entryOf(k2, v2), entryOf(k3, v3));
-  }
-
-  /**
-   * Returns an immutable map containing the given entries, in order.
-   *
-   * @throws IllegalArgumentException if duplicate keys are provided
-   */
-  public static <K, V> ImmutableMap<K, V> of(
-      K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4) {
-    return new RegularImmutableMap<K, V>(
-        entryOf(k1, v1), entryOf(k2, v2), entryOf(k3, v3), entryOf(k4, v4));
-  }
-
-  /**
-   * Returns an immutable map containing the given entries, in order.
-   *
-   * @throws IllegalArgumentException if duplicate keys are provided
-   */
-  public static <K, V> ImmutableMap<K, V> of(
-      K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5) {
-    return new RegularImmutableMap<K, V>(entryOf(k1, v1),
-        entryOf(k2, v2), entryOf(k3, v3), entryOf(k4, v4), entryOf(k5, v5));
-  }
-
-  // looking for of() with > 5 entries? Use the builder instead.
-
-  /**
-   * Returns a new builder. The generated builder is equivalent to the builder
-   * created by the {@link Builder} constructor.
-   */
-  public static <K, V> Builder<K, V> builder() {
-    return new Builder<K, V>();
-  }
-
-  /**
-   * Verifies that {@code key} and {@code value} are non-null, and returns a new
-   * immutable entry with those values.
-   *
-   * <p>A call to {@link Map.Entry#setValue} on the returned entry will always
-   * throw {@link UnsupportedOperationException}.
-   */
-  static <K, V> Entry<K, V> entryOf(K key, V value) {
-    return Maps.immutableEntry(checkNotNull(key), checkNotNull(value));
-  }
-
-  /**
-   * A builder for creating immutable map instances, especially {@code public
-   * static final} maps ("constant maps"). Example: <pre>   {@code
-   *
-   *   static final ImmutableMap<String, Integer> WORD_TO_INT =
-   *       new ImmutableMap.Builder<String, Integer>()
-   *           .put("one", 1)
-   *           .put("two", 2)
-   *           .put("three", 3)
-   *           .build();}</pre>
-   *
-   * For <i>small</i> immutable maps, the {@code ImmutableMap.of()} methods are
-   * even more convenient.
-   *
-   * <p>Builder instances can be reused - it is safe to call {@link #build}
-   * multiple times to build multiple maps in series. Each map is a superset of
-   * the maps created before it.
-   */
-  public static class Builder<K, V> {
-    final List<Entry<K, V>> entries = Lists.newArrayList();
-
-    /**
-     * Creates a new builder. The returned builder is equivalent to the builder
-     * generated by {@link ImmutableMap#builder}.
-     */
-    public Builder() {}
-
-    /**
-     * Associates {@code key} with {@code value} in the built map. Duplicate
-     * keys are not allowed, and will cause {@link #build} to fail.
-     */
-    public Builder<K, V> put(K key, V value) {
-      entries.add(entryOf(key, value));
-      return this;
-    }
-
-    /**
-     * Associates all of the given map's keys and values in the built map.
-     * Duplicate keys are not allowed, and will cause {@link #build} to fail.
-     *
-     * @throws NullPointerException if any key or value in {@code map} is null
-     */
-    public Builder<K, V> putAll(Map<? extends K, ? extends V> map) {
-      for (Entry<? extends K, ? extends V> entry : map.entrySet()) {
-        put(entry.getKey(), entry.getValue());
-      }
-      return this;
-    }
-
-    // TODO: Should build() and the ImmutableBiMap & ImmutableSortedMap versions
-    // throw an IllegalStateException instead?
-
-    /**
-     * Returns a newly-created immutable map.
-     *
-     * @throws IllegalArgumentException if duplicate keys were added
-     */
-    public ImmutableMap<K, V> build() {
-      return fromEntryList(entries);
-    }
-
-    private static <K, V> ImmutableMap<K, V> fromEntryList(
-        List<Entry<K, V>> entries) {
-      int size = entries.size();
-      switch (size) {
-        case 0:
-          return of();
-        case 1:
-          return new SingletonImmutableMap<K, V>(getOnlyElement(entries));
-        default:
-          Entry<?, ?>[] entryArray
-              = entries.toArray(new Entry<?, ?>[entries.size()]);
-          return new RegularImmutableMap<K, V>(entryArray);
-      }
-    }
-  }
-
-  /**
-   * Returns an immutable map containing the same entries as {@code map}. If
-   * {@code map} somehow contains entries with duplicate keys (for example, if
-   * it is a {@code SortedMap} whose comparator is not <i>consistent with
-   * equals</i>), the results of this method are undefined.
-   *
-   * <p><b>Note:</b> Despite what the method name suggests, if {@code map} is an
-   * {@code ImmutableMap}, no copy will actually be performed, and the given map
-   * itself will be returned.
-   *
-   * @throws NullPointerException if any key or value in {@code map} is null
-   */
-  public static <K, V> ImmutableMap<K, V> copyOf(
-      Map<? extends K, ? extends V> map) {
-    if ((map instanceof ImmutableMap) && !(map instanceof ImmutableSortedMap)) {
-      @SuppressWarnings("unchecked") // safe since map is not writable
-      ImmutableMap<K, V> kvMap = (ImmutableMap<K, V>) map;
-      return kvMap;
-    }
-
-    @SuppressWarnings("unchecked") // we won't write to this array
-    Entry<K, V>[] entries = map.entrySet().toArray(new Entry[0]);
-    switch (entries.length) {
-      case 0:
-        return of();
-      case 1:
-        return new SingletonImmutableMap<K, V>(entryOf(
-            entries[0].getKey(), entries[0].getValue()));
-      default:
-        for (int i = 0; i < entries.length; i++) {
-          K k = entries[i].getKey();
-          V v = entries[i].getValue();
-          entries[i] = entryOf(k, v);
-        }
-        return new RegularImmutableMap<K, V>(entries);
-    }
-  }
-
-  ImmutableMap() {}
-
-  /**
-   * Guaranteed to throw an exception and leave the map unmodified.
-   *
-   * @throws UnsupportedOperationException always
-   */
-  public final V put(K k, V v) {
-    throw new UnsupportedOperationException();
-  }
-
-  /**
-   * Guaranteed to throw an exception and leave the map unmodified.
-   *
-   * @throws UnsupportedOperationException always
-   */
-  public final V remove(Object o) {
-    throw new UnsupportedOperationException();
-  }
-
-  /**
-   * Guaranteed to throw an exception and leave the map unmodified.
-   *
-   * @throws UnsupportedOperationException always
-   */
-  public final void putAll(Map<? extends K, ? extends V> map) {
-    throw new UnsupportedOperationException();
-  }
-
-  /**
-   * Guaranteed to throw an exception and leave the map unmodified.
-   *
-   * @throws UnsupportedOperationException always
-   */
-  public final void clear() {
-    throw new UnsupportedOperationException();
-  }
-
-  public boolean isEmpty() {
-    return size() == 0;
-  }
-
-  public boolean containsKey(@Nullable Object key) {
-    return get(key) != null;
-  }
-
-  // Overriding to mark it Nullable
-  public abstract boolean containsValue(@Nullable Object value);
-
-  // Overriding to mark it Nullable
-  public abstract V get(@Nullable Object key);
-
-  /**
-   * Returns an immutable set of the mappings in this map. The entries are in
-   * the same order as the parameters used to build this map.
-   */
-  public abstract ImmutableSet<Entry<K, V>> entrySet();
-
-  /**
-   * Returns an immutable set of the keys in this map. These keys are in
-   * the same order as the parameters used to build this map.
-   */
-  public abstract ImmutableSet<K> keySet();
-
-  /**
-   * Returns an immutable collection of the values in this map. The values are
-   * in the same order as the parameters used to build this map.
-   */
-  public abstract ImmutableCollection<V> values();
-
-  @Override public boolean equals(@Nullable Object object) {
-    if (object == this) {
-      return true;
-    }
-    if (object instanceof Map) {
-      Map<?, ?> that = (Map<?, ?>) object;
-      return this.entrySet().equals(that.entrySet());
-    }
-    return false;
-  }
-
-  @Override public int hashCode() {
-    // not caching hash code since it could change if map values are mutable
-    // in a way that modifies their hash codes
-    return entrySet().hashCode();
-  }
-
-  @Override public String toString() {
-    StringBuilder result = new StringBuilder(size() * 16).append('{');
-    Maps.standardJoiner.appendTo(result, this);
-    return result.append('}').toString();
-  }
-
-  /**
-   * Serialized type for all ImmutableMap instances. It captures the logical
-   * contents and they are reconstructed using public factory methods. This
-   * ensures that the implementation types remain as implementation details.
-   */
-  static class SerializedForm implements Serializable {
-    private final Object[] keys;
-    private final Object[] values;
-    SerializedForm(ImmutableMap<?, ?> map) {
-      keys = new Object[map.size()];
-      values = new Object[map.size()];
-      int i = 0;
-      for (Entry<?, ?> entry : map.entrySet()) {
-        keys[i] = entry.getKey();
-        values[i] = entry.getValue();
-        i++;
-      }
-    }
-    Object readResolve() {
-      Builder<Object, Object> builder = new Builder<Object, Object>();
-      return createMap(builder);
-    }
-    Object createMap(Builder<Object, Object> builder) {
-      for (int i = 0; i < keys.length; i++) {
-        builder.put(keys[i], values[i]);
-      }
-      return builder.build();
-    }
-    private static final long serialVersionUID = 0;
-  }
-
-  Object writeReplace() {
-    return new SerializedForm(this);
-  }
-}
diff --git a/src/com/google/common/collect/ImmutableMultimap.java b/src/com/google/common/collect/ImmutableMultimap.java
deleted file mode 100644
index 831387c..0000000
--- a/src/com/google/common/collect/ImmutableMultimap.java
+++ /dev/null
@@ -1,514 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.io.Serializable;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-import javax.annotation.Nullable;
-
-/**
- * An immutable {@link Multimap}. Does not permit null keys or values.
- *
- * <p>Unlike {@link Multimaps#unmodifiableMultimap(Multimap)}, which is
- * a <i>view</i> of a separate multimap which can still change, an instance of
- * {@code ImmutableMultimap} contains its own data and will <i>never</i>
- * change. {@code ImmutableMultimap} is convenient for
- * {@code public static final} multimaps ("constant multimaps") and also lets
- * you easily make a "defensive copy" of a multimap provided to your class by
- * a caller.
- *
- * <p><b>Note</b>: Although this class is not final, it cannot be subclassed as
- * it has no public or protected constructors. Thus, instances of this class
- * are guaranteed to be immutable.
- *
- * @author Jared Levy
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible
-public abstract class ImmutableMultimap<K, V>
-    implements Multimap<K, V>, Serializable {
-
-  /** Returns an empty multimap. */
-  public static <K, V> ImmutableMultimap<K, V> of() {
-    return ImmutableListMultimap.of();
-  }
-
-  /**
-   * Returns an immutable multimap containing a single entry.
-   */
-  public static <K, V> ImmutableMultimap<K, V> of(K k1, V v1) {
-    return ImmutableListMultimap.of(k1, v1);
-  }
-
-  /**
-   * Returns an immutable multimap containing the given entries, in order.
-   */
-  public static <K, V> ImmutableMultimap<K, V> of(K k1, V v1, K k2, V v2) {
-    return ImmutableListMultimap.of(k1, v1, k2, v2);
-  }
-
-  /**
-   * Returns an immutable multimap containing the given entries, in order.
-   */
-  public static <K, V> ImmutableMultimap<K, V> of(
-      K k1, V v1, K k2, V v2, K k3, V v3) {
-    return ImmutableListMultimap.of(k1, v1, k2, v2, k3, v3);
-  }
-
-  /**
-   * Returns an immutable multimap containing the given entries, in order.
-   */
-  public static <K, V> ImmutableMultimap<K, V> of(
-      K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4) {
-    return ImmutableListMultimap.of(k1, v1, k2, v2, k3, v3, k4, v4);
-  }
-
-  /**
-   * Returns an immutable multimap containing the given entries, in order.
-   */
-  public static <K, V> ImmutableMultimap<K, V> of(
-      K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5) {
-    return ImmutableListMultimap.of(k1, v1, k2, v2, k3, v3, k4, v4, k5, v5);
-  }
-
-  // looking for of() with > 5 entries? Use the builder instead.
-
-  /**
-   * Returns a new builder. The generated builder is equivalent to the builder
-   * created by the {@link Builder} constructor.
-   */
-  public static <K, V> Builder<K, V> builder() {
-    return new Builder<K, V>();
-  }
-
-  /**
-   * Multimap for {@link ImmutableMultimap.Builder} that maintains key and
-   * value orderings, allows duplicate values, and performs better than
-   * {@link LinkedListMultimap}.
-   */
-  private static class BuilderMultimap<K, V> extends AbstractMultimap<K, V> {
-    BuilderMultimap() {
-      super(new LinkedHashMap<K, Collection<V>>());
-    }
-    @Override Collection<V> createCollection() {
-      return Lists.newArrayList();
-    }
-    private static final long serialVersionUID = 0;
-  }
-
-  /**
-   * A builder for creating immutable multimap instances, especially
-   * {@code public static final} multimaps ("constant multimaps"). Example:
-   * <pre>   {@code
-   *
-   *   static final Multimap<String, Integer> STRING_TO_INTEGER_MULTIMAP =
-   *       new ImmutableMultimap.Builder<String, Integer>()
-   *           .put("one", 1)
-   *           .putAll("several", 1, 2, 3)
-   *           .putAll("many", 1, 2, 3, 4, 5)
-   *           .build();}</pre>
-   *
-   * <p>Builder instances can be reused - it is safe to call {@link #build}
-   * multiple times to build multiple multimaps in series. Each multimap
-   * contains the key-value mappings in the previously created multimaps.
-   */
-  public static class Builder<K, V> {
-    private final Multimap<K, V> builderMultimap = new BuilderMultimap<K, V>();
-
-    /**
-     * Creates a new builder. The returned builder is equivalent to the builder
-     * generated by {@link ImmutableMultimap#builder}.
-     */
-    public Builder() {}
-
-    /**
-     * Adds a key-value mapping to the built multimap.
-     */
-    public Builder<K, V> put(K key, V value) {
-      builderMultimap.put(checkNotNull(key), checkNotNull(value));
-      return this;
-    }
-
-    /**
-     * Stores a collection of values with the same key in the built multimap.
-     *
-     * @throws NullPointerException if {@code key}, {@code values}, or any
-     *     element in {@code values} is null. The builder is left in an invalid
-     *     state.
-     */
-    public Builder<K, V> putAll(K key, Iterable<? extends V> values) {
-      Collection<V> valueList = builderMultimap.get(checkNotNull(key));
-      for (V value : values) {
-        valueList.add(checkNotNull(value));
-      }
-      return this;
-    }
-
-    /**
-     * Stores an array of values with the same key in the built multimap.
-     *
-     * @throws NullPointerException if the key or any value is null. The builder
-     *     is left in an invalid state.
-     */
-    public Builder<K, V> putAll(K key, V... values) {
-      return putAll(key, Arrays.asList(values));
-    }
-
-    /**
-     * Stores another multimap's entries in the built multimap. The generated
-     * multimap's key and value orderings correspond to the iteration ordering
-     * of the {@code multimap.asMap()} view, with new keys and values following
-     * any existing keys and values.
-     *
-     * @throws NullPointerException if any key or value in {@code multimap} is
-     *     null. The builder is left in an invalid state.
-     */
-    public Builder<K, V> putAll(Multimap<? extends K, ? extends V> multimap) {
-      for (Map.Entry<? extends K, ? extends Collection<? extends V>> entry
-          : multimap.asMap().entrySet()) {
-        putAll(entry.getKey(), entry.getValue());
-      }
-      return this;
-    }
-
-    /**
-     * Returns a newly-created immutable multimap.
-     */
-    public ImmutableMultimap<K, V> build() {
-      return copyOf(builderMultimap);
-    }
-  }
-
-  /**
-   * Returns an immutable multimap containing the same mappings as
-   * {@code multimap}. The generated multimap's key and value orderings
-   * correspond to the iteration ordering of the {@code multimap.asMap()} view.
-   *
-   * <p><b>Note:</b> Despite what the method name suggests, if
-   * {@code multimap} is an {@code ImmutableMultimap}, no copy will actually be
-   * performed, and the given multimap itself will be returned.
-   *
-   * @throws NullPointerException if any key or value in {@code multimap} is
-   *     null
-   */
-  public static <K, V> ImmutableMultimap<K, V> copyOf(
-      Multimap<? extends K, ? extends V> multimap) {
-    if (multimap instanceof ImmutableMultimap) {
-      @SuppressWarnings("unchecked") // safe since multimap is not writable
-      ImmutableMultimap<K, V> kvMultimap
-          = (ImmutableMultimap<K, V>) multimap;
-      return kvMultimap;
-    } else {
-      return ImmutableListMultimap.copyOf(multimap);
-    }
-  }
-
-  final transient ImmutableMap<K, ? extends ImmutableCollection<V>> map;
-  final transient int size;
-
-  // These constants allow the deserialization code to set final fields. This
-  // holder class makes sure they are not initialized unless an instance is
-  // deserialized.
-  static class FieldSettersHolder {
-    // Eclipse doesn't like the raw ImmutableMultimap
-    @SuppressWarnings("unchecked")
-    static final Serialization.FieldSetter<ImmutableMultimap>
-        MAP_FIELD_SETTER = Serialization.getFieldSetter(
-        ImmutableMultimap.class, "map");
-    // Eclipse doesn't like the raw ImmutableMultimap
-    @SuppressWarnings("unchecked")
-    static final Serialization.FieldSetter<ImmutableMultimap>
-        SIZE_FIELD_SETTER = Serialization.getFieldSetter(
-        ImmutableMultimap.class, "size");
-  }
-
-  ImmutableMultimap(ImmutableMap<K, ? extends ImmutableCollection<V>> map,
-      int size) {
-    this.map = map;
-    this.size = size;
-  }
-
-  // mutators (not supported)
-
-  /**
-   * Guaranteed to throw an exception and leave the multimap unmodified.
-   *
-   * @throws UnsupportedOperationException always
-   */
-  public ImmutableCollection<V> removeAll(Object key) {
-    throw new UnsupportedOperationException();
-  }
-
-  /**
-   * Guaranteed to throw an exception and leave the multimap unmodified.
-   *
-   * @throws UnsupportedOperationException always
-   */
-  public ImmutableCollection<V> replaceValues(K key,
-      Iterable<? extends V> values) {
-    throw new UnsupportedOperationException();
-  }
-
-  /**
-   * Guaranteed to throw an exception and leave the multimap unmodified.
-   *
-   * @throws UnsupportedOperationException always
-   */
-  public void clear() {
-    throw new UnsupportedOperationException();
-  }
-
-  /**
-   * Returns an immutable collection of the values for the given key.  If no
-   * mappings in the multimap have the provided key, an empty immutable
-   * collection is returned. The values are in the same order as the parameters
-   * used to build this multimap.
-   */
-  public abstract ImmutableCollection<V> get(K key);
-
-  /**
-   * Guaranteed to throw an exception and leave the multimap unmodified.
-   *
-   * @throws UnsupportedOperationException always
-   */
-  public boolean put(K key, V value) {
-    throw new UnsupportedOperationException();
-  }
-
-  /**
-   * Guaranteed to throw an exception and leave the multimap unmodified.
-   *
-   * @throws UnsupportedOperationException always
-   */
-  public boolean putAll(K key, Iterable<? extends V> values) {
-    throw new UnsupportedOperationException();
-  }
-
-  /**
-   * Guaranteed to throw an exception and leave the multimap unmodified.
-   *
-   * @throws UnsupportedOperationException always
-   */
-  public boolean putAll(Multimap<? extends K, ? extends V> multimap) {
-    throw new UnsupportedOperationException();
-  }
-
-  /**
-   * Guaranteed to throw an exception and leave the multimap unmodified.
-   *
-   * @throws UnsupportedOperationException always
-   */
-  public boolean remove(Object key, Object value) {
-    throw new UnsupportedOperationException();
-  }
-
-  // accessors
-
-  public boolean containsEntry(@Nullable Object key, @Nullable Object value) {
-    Collection<V> values = map.get(key);
-    return values != null && values.contains(value);
-  }
-
-  public boolean containsKey(@Nullable Object key) {
-    return map.containsKey(key);
-  }
-
-  public boolean containsValue(@Nullable Object value) {
-    for (Collection<V> valueCollection : map.values()) {
-      if (valueCollection.contains(value)) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  public boolean isEmpty() {
-    return size == 0;
-  }
-
-  public int size() {
-    return size;
-  }
-
-  @Override public boolean equals(@Nullable Object object) {
-    if (object instanceof Multimap) {
-      Multimap<?, ?> that = (Multimap<?, ?>) object;
-      return this.map.equals(that.asMap());
-    }
-    return false;
-  }
-
-  @Override public int hashCode() {
-    return map.hashCode();
-  }
-
-  @Override public String toString() {
-    return map.toString();
-  }
-
-  // views
-
-  /**
-   * Returns an immutable set of the distinct keys in this multimap. These keys
-   * are ordered according to when they first appeared during the construction
-   * of this multimap.
-   */
-  public ImmutableSet<K> keySet() {
-    return map.keySet();
-  }
-
-  /**
-   * Returns an immutable map that associates each key with its corresponding
-   * values in the multimap.
-   */
-  @SuppressWarnings("unchecked") // a widening cast
-  public ImmutableMap<K, Collection<V>> asMap() {
-    return (ImmutableMap) map;
-  }
-
-  private transient ImmutableCollection<Map.Entry<K, V>> entries;
-
-  /**
-   * Returns an immutable collection of all key-value pairs in the multimap. Its
-   * iterator traverses the values for the first key, the values for the second
-   * key, and so on.
-   */
-  public ImmutableCollection<Map.Entry<K, V>> entries() {
-    ImmutableCollection<Map.Entry<K, V>> result = entries;
-    return (result == null)
-        ? (entries = new EntryCollection<K, V>(this)) : result;
-  }
-
-  private static class EntryCollection<K, V>
-      extends ImmutableCollection<Map.Entry<K, V>> {
-    final ImmutableMultimap<K, V> multimap;
-
-    EntryCollection(ImmutableMultimap<K, V> multimap) {
-      this.multimap = multimap;
-    }
-
-    @Override public UnmodifiableIterator<Map.Entry<K, V>> iterator() {
-      final Iterator<? extends Map.Entry<K, ? extends ImmutableCollection<V>>>
-          mapIterator = this.multimap.map.entrySet().iterator();
-
-      return new UnmodifiableIterator<Map.Entry<K, V>>() {
-        K key;
-        Iterator<V> valueIterator;
-
-        public boolean hasNext() {
-          return (key != null && valueIterator.hasNext())
-              || mapIterator.hasNext();
-        }
-
-        public Map.Entry<K, V> next() {
-          if (key == null || !valueIterator.hasNext()) {
-            Map.Entry<K, ? extends ImmutableCollection<V>> entry
-                = mapIterator.next();
-            key = entry.getKey();
-            valueIterator = entry.getValue().iterator();
-          }
-          return Maps.immutableEntry(key, valueIterator.next());
-        }
-      };
-    }
-
-    public int size() {
-      return multimap.size();
-    }
-
-    @Override public boolean contains(Object object) {
-      if (object instanceof Map.Entry) {
-        Map.Entry<?, ?> entry = (Map.Entry<?, ?>) object;
-        return multimap.containsEntry(entry.getKey(), entry.getValue());
-      }
-      return false;
-    }
-
-    private static final long serialVersionUID = 0;
-  }
-
-  private transient ImmutableMultiset<K> keys;
-
-  /**
-   * Returns a collection, which may contain duplicates, of all keys. The number
-   * of times a key appears in the returned multiset equals the number of
-   * mappings the key has in the multimap. Duplicate keys appear consecutively
-   * in the multiset's iteration order.
-   */
-  public ImmutableMultiset<K> keys() {
-    ImmutableMultiset<K> result = keys;
-    return (result == null) ? (keys = createKeys()) : result;
-  }
-
-  private ImmutableMultiset<K> createKeys() {
-    ImmutableMultiset.Builder<K> builder = ImmutableMultiset.builder();
-    for (Map.Entry<K, ? extends ImmutableCollection<V>> entry
-        : map.entrySet()) {
-      builder.addCopies(entry.getKey(), entry.getValue().size());
-    }
-    return builder.build();
-  }
-
-  private transient ImmutableCollection<V> values;
-
-  /**
-   * Returns an immutable collection of the values in this multimap. Its
-   * iterator traverses the values for the first key, the values for the second
-   * key, and so on.
-   */
-  public ImmutableCollection<V> values() {
-    ImmutableCollection<V> result = values;
-    return (result == null) ? (values = new Values<V>(this)) : result;
-  }
-
-  private static class Values<V> extends ImmutableCollection<V> {
-    final Multimap<?, V> multimap;
-
-    Values(Multimap<?, V> multimap) {
-      this.multimap = multimap;
-    }
-
-    @Override public UnmodifiableIterator<V> iterator() {
-      final Iterator<? extends Map.Entry<?, V>> entryIterator
-          = multimap.entries().iterator();
-      return new UnmodifiableIterator<V>() {
-        public boolean hasNext() {
-          return entryIterator.hasNext();
-        }
-        public V next() {
-          return entryIterator.next().getValue();
-        }
-      };
-    }
-
-    public int size() {
-      return multimap.size();
-    }
-
-    private static final long serialVersionUID = 0;
-  }
-
-  private static final long serialVersionUID = 0;
-}
diff --git a/src/com/google/common/collect/ImmutableMultiset.java b/src/com/google/common/collect/ImmutableMultiset.java
deleted file mode 100644
index 543b37b..0000000
--- a/src/com/google/common/collect/ImmutableMultiset.java
+++ /dev/null
@@ -1,505 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-import static com.google.common.base.Preconditions.checkNotNull;
-import com.google.common.collect.Serialization.FieldSetter;
-
-import java.io.IOException;
-import java.io.InvalidObjectException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-
-import javax.annotation.Nullable;
-
-/**
- * An immutable hash-based multiset. Does not permit null elements.
- *
- * <p>Its iterator orders elements according to the first appearance of the
- * element among the items passed to the factory method or builder. When the
- * multiset contains multiple instances of an element, those instances are
- * consecutive in the iteration order.
- *
- * @author Jared Levy
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible(serializable = true)
-public class ImmutableMultiset<E> extends ImmutableCollection<E>
-    implements Multiset<E> {
-
-  /**
-   * Returns the empty immutable multiset.
-   */
-  @SuppressWarnings("unchecked") // all supported methods are covariant
-  public static <E> ImmutableMultiset<E> of() {
-    // BEGIN android-changed
-    return (ImmutableMultiset) EmptyImmutableMultiset.INSTANCE;
-    // END android-changed
-  }
-
-  /**
-   * Returns an immutable multiset containing the given elements.
-   *
-   * <p>The multiset is ordered by the first occurrence of each element. For
-   * example, {@code ImmutableMultiset.of(2, 3, 1, 3)} yields a multiset with
-   * elements in the order {@code 2, 3, 3, 1}.
-   *
-   * @throws NullPointerException if any of {@code elements} is null
-   */
-  public static <E> ImmutableMultiset<E> of(E... elements) {
-    return copyOf(Arrays.asList(elements));
-  }
-
-  /**
-   * Returns an immutable multiset containing the given elements.
-   *
-   * <p>The multiset is ordered by the first occurrence of each element. For
-   * example, {@code ImmutableMultiset.copyOf(Arrays.asList(2, 3, 1, 3))} yields
-   * a multiset with elements in the order {@code 2, 3, 3, 1}.
-   *
-   * <p>Note that if {@code c} is a {@code Collection<String>}, then {@code
-   * ImmutableMultiset.copyOf(c)} returns an {@code ImmutableMultiset<String>}
-   * containing each of the strings in {@code c}, while
-   * {@code ImmutableMultiset.of(c)} returns an
-   * {@code ImmutableMultiset<Collection<String>>} containing one element (the
-   * given collection itself).
-   *
-   * <p><b>Note:</b> Despite what the method name suggests, if {@code elements}
-   * is an {@code ImmutableMultiset}, no copy will actually be performed, and
-   * the given multiset itself will be returned.
-   *
-   * @throws NullPointerException if any of {@code elements} is null
-   */
-  public static <E> ImmutableMultiset<E> copyOf(
-      Iterable<? extends E> elements) {
-    if (elements instanceof ImmutableMultiset) {
-      @SuppressWarnings("unchecked") // all supported methods are covariant
-      ImmutableMultiset<E> result = (ImmutableMultiset<E>) elements;
-      return result;
-    }
-
-    @SuppressWarnings("unchecked") // the cast causes a warning
-    Multiset<? extends E> multiset = (elements instanceof Multiset)
-        ? (Multiset<? extends E>) elements
-        : LinkedHashMultiset.create(elements);
-
-    return copyOfInternal(multiset);
-  }
-
-  private static <E> ImmutableMultiset<E> copyOfInternal(
-      Multiset<? extends E> multiset) {
-    long size = 0;
-    ImmutableMap.Builder<E, Integer> builder = ImmutableMap.builder();
-
-    for (Entry<? extends E> entry : multiset.entrySet()) {
-      int count = entry.getCount();
-      if (count > 0) {
-        // Since ImmutableMap.Builder throws an NPE if an element is null, no
-        // other null checks are needed.
-        builder.put(entry.getElement(), count);
-        size += count;
-      }
-    }
-
-    if (size == 0) {
-      return of();
-    }
-    return new ImmutableMultiset<E>(
-        builder.build(), (int) Math.min(size, Integer.MAX_VALUE));
-  }
-
-  /**
-   * Returns an immutable multiset containing the given elements.
-   *
-   * <p>The multiset is ordered by the first occurrence of each element. For
-   * example,
-   * {@code ImmutableMultiset.copyOf(Arrays.asList(2, 3, 1, 3).iterator())}
-   * yields a multiset with elements in the order {@code 2, 3, 3, 1}.
-   *
-   * @throws NullPointerException if any of {@code elements} is null
-   */
-  public static <E> ImmutableMultiset<E> copyOf(
-      Iterator<? extends E> elements) {
-    Multiset<E> multiset = LinkedHashMultiset.create();
-    Iterators.addAll(multiset, elements);
-    return copyOfInternal(multiset);
-  }
-
-  private final transient ImmutableMap<E, Integer> map;
-  private final transient int size;
-
-  // These constants allow the deserialization code to set final fields. This
-  // holder class makes sure they are not initialized unless an instance is
-  // deserialized.
-  @SuppressWarnings("unchecked")
-  // eclipse doesn't like the raw types here, but they're harmless
-  private static class FieldSettersHolder {
-    static final FieldSetter<ImmutableMultiset> MAP_FIELD_SETTER
-        = Serialization.getFieldSetter(ImmutableMultiset.class, "map");
-    static final FieldSetter<ImmutableMultiset> SIZE_FIELD_SETTER
-        = Serialization.getFieldSetter(ImmutableMultiset.class, "size");
-  }
-
-  ImmutableMultiset(ImmutableMap<E, Integer> map, int size) {
-    this.map = map;
-    this.size = size;
-  }
-
-  public int count(@Nullable Object element) {
-    Integer value = map.get(element);
-    return (value == null) ? 0 : value;
-  }
-
-  @Override public UnmodifiableIterator<E> iterator() {
-    final Iterator<Map.Entry<E, Integer>> mapIterator
-        = map.entrySet().iterator();
-
-    return new UnmodifiableIterator<E>() {
-      int remaining;
-      E element;
-
-      public boolean hasNext() {
-        return (remaining > 0) || mapIterator.hasNext();
-      }
-
-      public E next() {
-        if (remaining <= 0) {
-          Map.Entry<E, Integer> entry = mapIterator.next();
-          element = entry.getKey();
-          remaining = entry.getValue();
-        }
-        remaining--;
-        return element;
-      }
-    };
-  }
-
-  public int size() {
-    return size;
-  }
-
-  @Override public boolean contains(@Nullable Object element) {
-    return map.containsKey(element);
-  }
-
-  /**
-   * Guaranteed to throw an exception and leave the collection unmodified.
-   *
-   * @throws UnsupportedOperationException always
-   */
-  public int add(E element, int occurrences) {
-    throw new UnsupportedOperationException();
-  }
-
-  /**
-   * Guaranteed to throw an exception and leave the collection unmodified.
-   *
-   * @throws UnsupportedOperationException always
-   */
-  public int remove(Object element, int occurrences) {
-    throw new UnsupportedOperationException();
-  }
-
-  /**
-   * Guaranteed to throw an exception and leave the collection unmodified.
-   *
-   * @throws UnsupportedOperationException always
-   */
-  public int setCount(E element, int count) {
-    throw new UnsupportedOperationException();
-  }
-
-  /**
-   * Guaranteed to throw an exception and leave the collection unmodified.
-   *
-   * @throws UnsupportedOperationException always
-   */
-  public boolean setCount(E element, int oldCount, int newCount) {
-    throw new UnsupportedOperationException();
-  }
-
-  @Override public boolean equals(@Nullable Object object) {
-    if (object == this) {
-      return true;
-    }
-    if (object instanceof Multiset) {
-      Multiset<?> that = (Multiset<?>) object;
-      if (this.size() != that.size()) {
-        return false;
-      }
-      for (Entry<?> entry : that.entrySet()) {
-        if (count(entry.getElement()) != entry.getCount()) {
-          return false;
-        }
-      }
-      return true;
-    }
-    return false;
-  }
-
-  @Override public int hashCode() {
-    // could cache this, but not considered worthwhile to do so
-    return map.hashCode();
-  }
-
-  @Override public String toString() {
-    return entrySet().toString();
-  }
-
-  // TODO: Serialization of the element set should serialize the multiset, and
-  // deserialization should call multiset.elementSet(). Then
-  // reserialized(multiset).elementSet() == reserialized(multiset.elementSet())
-  // Currently, those object references differ.
-  public Set<E> elementSet() {
-    return map.keySet();
-  }
-
-  private transient ImmutableSet<Entry<E>> entrySet;
-
-  public Set<Entry<E>> entrySet() {
-    ImmutableSet<Entry<E>> es = entrySet;
-    return (es == null) ? (entrySet = new EntrySet<E>(this)) : es;
-  }
-
-  private static class EntrySet<E> extends ImmutableSet<Entry<E>> {
-    final ImmutableMultiset<E> multiset;
-
-    public EntrySet(ImmutableMultiset<E> multiset) {
-      this.multiset = multiset;
-    }
-
-    @Override public UnmodifiableIterator<Entry<E>> iterator() {
-      final Iterator<Map.Entry<E, Integer>> mapIterator
-          = multiset.map.entrySet().iterator();
-      return new UnmodifiableIterator<Entry<E>>() {
-        public boolean hasNext() {
-          return mapIterator.hasNext();
-        }
-        public Entry<E> next() {
-          Map.Entry<E, Integer> mapEntry = mapIterator.next();
-          return
-              Multisets.immutableEntry(mapEntry.getKey(), mapEntry.getValue());
-        }
-      };
-    }
-
-    public int size() {
-      return multiset.map.size();
-    }
-
-    @Override public boolean contains(Object o) {
-      if (o instanceof Entry) {
-        Entry<?> entry = (Entry<?>) o;
-        if (entry.getCount() <= 0) {
-          return false;
-        }
-        int count = multiset.count(entry.getElement());
-        return count == entry.getCount();
-      }
-      return false;
-    }
-
-    @Override public int hashCode() {
-      return multiset.map.hashCode();
-    }
-
-    @Override Object writeReplace() {
-      return this;
-    }
-
-    private static final long serialVersionUID = 0;
-  }
-
-  /**
-   * @serialData the number of distinct elements, the first element, its count,
-   *     the second element, its count, and so on
-   */
-  private void writeObject(ObjectOutputStream stream) throws IOException {
-    stream.defaultWriteObject();
-    Serialization.writeMultiset(this, stream);
-  }
-
-  private void readObject(ObjectInputStream stream)
-      throws IOException, ClassNotFoundException {
-    stream.defaultReadObject();
-    int entryCount = stream.readInt();
-    ImmutableMap.Builder<E, Integer> builder = ImmutableMap.builder();
-    long tmpSize = 0;
-    for (int i = 0; i < entryCount; i++) {
-      @SuppressWarnings("unchecked") // reading data stored by writeMultiset
-      E element = (E) stream.readObject();
-      int count = stream.readInt();
-      if (count <= 0) {
-        throw new InvalidObjectException("Invalid count " + count);
-      }
-      builder.put(element, count);
-      tmpSize += count;
-    }
-
-    FieldSettersHolder.MAP_FIELD_SETTER.set(this, builder.build());
-    FieldSettersHolder.SIZE_FIELD_SETTER.set(
-        this, (int) Math.min(tmpSize, Integer.MAX_VALUE));
-  }
-
-  @Override Object writeReplace() {
-    return this;
-  }
-
-  private static final long serialVersionUID = 0;
-
-  /**
-   * Returns a new builder. The generated builder is equivalent to the builder
-   * created by the {@link Builder} constructor.
-   */
-  public static <E> Builder<E> builder() {
-    return new Builder<E>();
-  }
-
-  /**
-   * A builder for creating immutable multiset instances, especially
-   * {@code public static final} multisets ("constant multisets").
-   *
-   * <p>Example:
-   * <pre>   {@code
-   *   public static final ImmutableMultiset<Bean> BEANS
-   *       = new ImmutableMultiset.Builder<Bean>()
-   *           .addCopies(Bean.COCOA, 4)
-   *           .addCopies(Bean.GARDEN, 6)
-   *           .addCopies(Bean.RED, 8)
-   *           .addCopies(Bean.BLACK_EYED, 10)
-   *           .build();}</pre>
-   *
-   * <p>Builder instances can be reused - it is safe to call {@link #build}
-   * multiple times to build multiple multisets in series. Each multiset
-   * is a superset of the multiset created before it.
-   */
-  public static final class Builder<E> extends ImmutableCollection.Builder<E> {
-    private final Multiset<E> contents = LinkedHashMultiset.create();
-
-    /**
-     * Creates a new builder. The returned builder is equivalent to the builder
-     * generated by {@link ImmutableMultiset#builder}.
-     */
-    public Builder() {}
-
-    /**
-     * Adds {@code element} to the {@code ImmutableMultiset}.
-     *
-     * @param element the element to add
-     * @return this {@code Builder} object
-     * @throws NullPointerException if {@code element} is null
-     */
-    @Override public Builder<E> add(E element) {
-      contents.add(checkNotNull(element));
-      return this;
-    }
-
-    /**
-     * Adds a number of occurrences of an element to this {@code
-     * ImmutableMultiset}.
-     *
-     * @param element the element to add
-     * @param occurrences the number of occurrences of the element to add. May
-     *     be zero, in which case no change will be made.
-     * @return this {@code Builder} object
-     * @throws NullPointerException if {@code element} is null
-     * @throws IllegalArgumentException if {@code occurrences} is negative, or
-     *     if this operation would result in more than {@link Integer#MAX_VALUE}
-     *     occurrences of the element
-     */
-    public Builder<E> addCopies(E element, int occurrences) {
-      contents.add(checkNotNull(element), occurrences);
-      return this;
-    }
-
-    /**
-     * Adds or removes the necessary occurrences of an element such that the
-     * element attains the desired count.
-     *
-     * @param element the element to add or remove occurrences of
-     * @param count the desired count of the element in this multiset
-     * @return this {@code Builder} object
-     * @throws NullPointerException if {@code element} is null
-     * @throws IllegalArgumentException if {@code count} is negative
-     */
-    public Builder<E> setCount(E element, int count) {
-      contents.setCount(checkNotNull(element), count);
-      return this;
-    }
-
-    /**
-     * Adds each element of {@code elements} to the {@code ImmutableMultiset}.
-     *
-     * @param elements the elements to add
-     * @return this {@code Builder} object
-     * @throws NullPointerException if {@code elements} is null or contains a
-     *     null element
-     */
-    @Override public Builder<E> add(E... elements) {
-      super.add(elements);
-      return this;
-    }
-
-    /**
-     * Adds each element of {@code elements} to the {@code ImmutableMultiset}.
-     *
-     * @param elements the {@code Iterable} to add to the {@code
-     *     ImmutableMultiset}
-     * @return this {@code Builder} object
-     * @throws NullPointerException if {@code elements} is null or contains a
-     *     null element
-     */
-    @Override public Builder<E> addAll(Iterable<? extends E> elements) {
-      if (elements instanceof Multiset) {
-        @SuppressWarnings("unchecked")
-        Multiset<? extends E> multiset = (Multiset<? extends E>) elements;
-        for (Entry<? extends E> entry : multiset.entrySet()) {
-          addCopies(entry.getElement(), entry.getCount());
-        }
-      } else {
-        super.addAll(elements);
-      }
-      return this;
-    }
-
-    /**
-     * Adds each element of {@code elements} to the {@code ImmutableMultiset}.
-     *
-     * @param elements the elements to add to the {@code ImmutableMultiset}
-     * @return this {@code Builder} object
-     * @throws NullPointerException if {@code elements} is null or contains a
-     *     null element
-     */
-    @Override public Builder<E> addAll(Iterator<? extends E> elements) {
-      super.addAll(elements);
-      return this;
-    }
-
-    /**
-     * Returns a newly-created {@code ImmutableMultiset} based on the contents
-     * of the {@code Builder}.
-     */
-    @Override public ImmutableMultiset<E> build() {
-      return copyOf(contents);
-    }
-  }
-}
diff --git a/src/com/google/common/collect/ImmutableSet.java b/src/com/google/common/collect/ImmutableSet.java
deleted file mode 100644
index 855ba13..0000000
--- a/src/com/google/common/collect/ImmutableSet.java
+++ /dev/null
@@ -1,543 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-import javax.annotation.Nullable;
-
-/**
- * A high-performance, immutable {@code Set} with reliable, user-specified
- * iteration order. Does not permit null elements.
- *
- * <p>Unlike {@link Collections#unmodifiableSet}, which is a <i>view</i> of a
- * separate collection that can still change, an instance of this class contains
- * its own private data and will <i>never</i> change. This class is convenient
- * for {@code public static final} sets ("constant sets") and also lets you
- * easily make a "defensive copy" of a set provided to your class by a caller.
- *
- * <p><b>Warning:</b> Like most sets, an {@code ImmutableSet} will not function
- * correctly if an element is modified after being placed in the set. For this
- * reason, and to avoid general confusion, it is strongly recommended to place
- * only immutable objects into this collection.
- *
- * <p>This class has been observed to perform significantly better than {@link
- * HashSet} for objects with very fast {@link Object#hashCode} implementations
- * (as a well-behaved immutable object should). While this class's factory
- * methods create hash-based instances, the {@link ImmutableSortedSet} subclass
- * performs binary searches instead.
- *
- * <p><b>Note</b>: Although this class is not final, it cannot be subclassed
- * outside its package as it has no public or protected constructors. Thus,
- * instances of this type are guaranteed to be immutable.
- *
- * @see ImmutableList
- * @see ImmutableMap
- * @author Kevin Bourrillion
- * @author Nick Kralevich
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible(serializable = true)
-@SuppressWarnings("serial") // we're overriding default serialization
-public abstract class ImmutableSet<E> extends ImmutableCollection<E>
-    implements Set<E> {
-  /**
-   * Returns the empty immutable set. This set behaves and performs comparably
-   * to {@link Collections#emptySet}, and is preferable mainly for consistency
-   * and maintainability of your code.
-   */
-  // Casting to any type is safe because the set will never hold any elements.
-  @SuppressWarnings({"unchecked"})
-  public static <E> ImmutableSet<E> of() {
-    // BEGIN android-changed
-    return (ImmutableSet) EmptyImmutableSet.INSTANCE;
-    // END android-changed
-  }
-
-  /**
-   * Returns an immutable set containing a single element. This set behaves and
-   * performs comparably to {@link Collections#singleton}, but will not accept
-   * a null element. It is preferable mainly for consistency and
-   * maintainability of your code.
-   */
-  public static <E> ImmutableSet<E> of(E element) {
-    return new SingletonImmutableSet<E>(element);
-  }
-
-  /**
-   * Returns an immutable set containing the given elements, in order. Repeated
-   * occurrences of an element (according to {@link Object#equals}) after the
-   * first are ignored.
-   *
-   * @throws NullPointerException if any element is null
-   */
-  @SuppressWarnings("unchecked")
-  public static <E> ImmutableSet<E> of(E e1, E e2) {
-    return create(e1, e2);
-  }
-
-  /**
-   * Returns an immutable set containing the given elements, in order. Repeated
-   * occurrences of an element (according to {@link Object#equals}) after the
-   * first are ignored.
-   *
-   * @throws NullPointerException if any element is null
-   */
-  @SuppressWarnings("unchecked")
-  public static <E> ImmutableSet<E> of(E e1, E e2, E e3) {
-    return create(e1, e2, e3);
-  }
-
-  /**
-   * Returns an immutable set containing the given elements, in order. Repeated
-   * occurrences of an element (according to {@link Object#equals}) after the
-   * first are ignored.
-   *
-   * @throws NullPointerException if any element is null
-   */
-  @SuppressWarnings("unchecked")
-  public static <E> ImmutableSet<E> of(E e1, E e2, E e3, E e4) {
-    return create(e1, e2, e3, e4);
-  }
-
-  /**
-   * Returns an immutable set containing the given elements, in order. Repeated
-   * occurrences of an element (according to {@link Object#equals}) after the
-   * first are ignored.
-   *
-   * @throws NullPointerException if any element is null
-   */
-  @SuppressWarnings("unchecked")
-  public static <E> ImmutableSet<E> of(E e1, E e2, E e3, E e4, E e5) {
-    return create(e1, e2, e3, e4, e5);
-  }
-
-  /**
-   * Returns an immutable set containing the given elements, in order. Repeated
-   * occurrences of an element (according to {@link Object#equals}) after the
-   * first are ignored (but too many of these may result in the set being
-   * sized inappropriately).
-   *
-   * @throws NullPointerException if any of {@code elements} is null
-   */
-  public static <E> ImmutableSet<E> of(E... elements) {
-    checkNotNull(elements); // for GWT
-    switch (elements.length) {
-      case 0:
-        return of();
-      case 1:
-        return of(elements[0]);
-      default:
-        return create(elements);
-    }
-  }
-
-  /**
-   * Returns an immutable set containing the given elements, in order. Repeated
-   * occurrences of an element (according to {@link Object#equals}) after the
-   * first are ignored (but too many of these may result in the set being
-   * sized inappropriately). This method iterates over {@code elements} at most
-   * once.
-   *
-   * <p>Note that if {@code s} is a {@code Set<String>}, then {@code
-   * ImmutableSet.copyOf(s)} returns an {@code ImmutableSet<String>} containing
-   * each of the strings in {@code s}, while {@code ImmutableSet.of(s)} returns
-   * a {@code ImmutableSet<Set<String>>} containing one element (the given set
-   * itself).
-   *
-   * <p><b>Note:</b> Despite what the method name suggests, if {@code elements}
-   * is an {@code ImmutableSet} (but not an {@code ImmutableSortedSet}), no copy
-   * will actually be performed, and the given set itself will be returned.
-   *
-   * @throws NullPointerException if any of {@code elements} is null
-   */
-  public static <E> ImmutableSet<E> copyOf(Iterable<? extends E> elements) {
-    if (elements instanceof ImmutableSet
-        && !(elements instanceof ImmutableSortedSet)) {
-      @SuppressWarnings("unchecked") // all supported methods are covariant
-      ImmutableSet<E> set = (ImmutableSet<E>) elements;
-      return set;
-    }
-    return copyOfInternal(Collections2.toCollection(elements));
-  }
-
-  /**
-   * Returns an immutable set containing the given elements, in order. Repeated
-   * occurrences of an element (according to {@link Object#equals}) after the
-   * first are ignored.
-   *
-   * @throws NullPointerException if any of {@code elements} is null
-   */
-  public static <E> ImmutableSet<E> copyOf(Iterator<? extends E> elements) {
-    Collection<E> list = Lists.newArrayList(elements);
-    return copyOfInternal(list);
-  }
-
-  private static <E> ImmutableSet<E> copyOfInternal(
-      Collection<? extends E> collection) {
-    // TODO: Support concurrent collections that change while this method is
-    // running.
-    switch (collection.size()) {
-      case 0:
-        return of();
-      case 1:
-        // TODO: Remove "ImmutableSet.<E>" when eclipse bug is fixed.
-        return ImmutableSet.<E>of(collection.iterator().next());
-      default:
-        return create(collection, collection.size());
-    }
-  }
-
-  ImmutableSet() {}
-
-  /** Returns {@code true} if the {@code hashCode()} method runs quickly. */
-  boolean isHashCodeFast() {
-    return false;
-  }
-
-  @Override public boolean equals(@Nullable Object object) {
-    if (object == this) {
-      return true;
-    }
-    if (object instanceof ImmutableSet
-        && isHashCodeFast()
-        && ((ImmutableSet<?>) object).isHashCodeFast()
-        && hashCode() != object.hashCode()) {
-      return false;
-    }
-    return Collections2.setEquals(this, object);
-  }
-
-  @Override public int hashCode() {
-    int hashCode = 0;
-    for (Object o : this) {
-      hashCode += o.hashCode();
-    }
-    return hashCode;
-  }
-
-  // This declaration is needed to make Set.iterator() and
-  // ImmutableCollection.iterator() consistent.
-  @Override public abstract UnmodifiableIterator<E> iterator();
-
-  private static <E> ImmutableSet<E> create(E... elements) {
-    return create(Arrays.asList(elements), elements.length);
-  }
-
-  private static <E> ImmutableSet<E> create(
-      Iterable<? extends E> iterable, int count) {
-    // count is always the (nonzero) number of elements in the iterable
-    int tableSize = Hashing.chooseTableSize(count);
-    Object[] table = new Object[tableSize];
-    int mask = tableSize - 1;
-
-    List<E> elements = new ArrayList<E>(count);
-    int hashCode = 0;
-
-    for (E element : iterable) {
-      checkNotNull(element); // for GWT
-      int hash = element.hashCode();
-      for (int i = Hashing.smear(hash); true; i++) {
-        int index = i & mask;
-        Object value = table[index];
-        if (value == null) {
-          // Came to an empty bucket. Put the element here.
-          table[index] = element;
-          elements.add(element);
-          hashCode += hash;
-          break;
-        } else if (value.equals(element)) {
-          break; // Found a duplicate. Nothing to do.
-        }
-      }
-    }
-
-    if (elements.size() == 1) {
-      // The iterable contained only duplicates of the same element.
-      return new SingletonImmutableSet<E>(elements.get(0), hashCode);
-    } else if (tableSize > Hashing.chooseTableSize(elements.size())) {
-      // Resize the table when the iterable includes too many duplicates.
-      return create(elements, elements.size());
-    } else {
-      return new RegularImmutableSet<E>(
-          elements.toArray(), hashCode, table, mask);
-    }
-  }
-
-  abstract static class ArrayImmutableSet<E> extends ImmutableSet<E> {
-    // the elements (two or more) in the desired order.
-    final transient Object[] elements;
-
-    ArrayImmutableSet(Object[] elements) {
-      this.elements = elements;
-    }
-
-    public int size() {
-      return elements.length;
-    }
-
-    @Override public boolean isEmpty() {
-      return false;
-    }
-
-    /*
-     * The cast is safe because the only way to create an instance is via the
-     * create() method above, which only permits elements of type E.
-     */
-    @SuppressWarnings("unchecked")
-    @Override public UnmodifiableIterator<E> iterator() {
-      return (UnmodifiableIterator<E>) Iterators.forArray(elements);
-    }
-
-    @Override public Object[] toArray() {
-      Object[] array = new Object[size()];
-      Platform.unsafeArrayCopy(elements, 0, array, 0, size());
-      return array;
-    }
-
-    @Override public <T> T[] toArray(T[] array) {
-      int size = size();
-      if (array.length < size) {
-        array = ObjectArrays.newArray(array, size);
-      } else if (array.length > size) {
-        array[size] = null;
-      }
-      Platform.unsafeArrayCopy(elements, 0, array, 0, size);
-      return array;
-    }
-
-    @Override public boolean containsAll(Collection<?> targets) {
-      if (targets == this) {
-        return true;
-      }
-      if (!(targets instanceof ArrayImmutableSet)) {
-        return super.containsAll(targets);
-      }
-      if (targets.size() > size()) {
-        return false;
-      }
-      for (Object target : ((ArrayImmutableSet<?>) targets).elements) {
-        if (!contains(target)) {
-          return false;
-        }
-      }
-      return true;
-    }
-
-    @Override ImmutableList<E> createAsList() {
-      return new ImmutableAsList<E>(elements, this);
-    }
-  }
-
-  /** such as ImmutableMap.keySet() */
-  abstract static class TransformedImmutableSet<D, E> extends ImmutableSet<E> {
-    final D[] source;
-    final int hashCode;
-
-    TransformedImmutableSet(D[] source, int hashCode) {
-      this.source = source;
-      this.hashCode = hashCode;
-    }
-
-    abstract E transform(D element);
-
-    public int size() {
-      return source.length;
-    }
-
-    @Override public boolean isEmpty() {
-      return false;
-    }
-
-    @Override public UnmodifiableIterator<E> iterator() {
-      return new AbstractIterator<E>() {
-        int index = 0;
-        @Override protected E computeNext() {
-          return index < source.length
-              ? transform(source[index++])
-              : endOfData();
-        }
-      };
-    }
-
-    @Override public Object[] toArray() {
-      return toArray(new Object[size()]);
-    }
-
-    @Override public <T> T[] toArray(T[] array) {
-      int size = size();
-      if (array.length < size) {
-        array = ObjectArrays.newArray(array, size);
-      } else if (array.length > size) {
-        array[size] = null;
-      }
-
-      // Writes will produce ArrayStoreException when the toArray() doc requires.
-      Object[] objectArray = array;
-      for (int i = 0; i < source.length; i++) {
-        objectArray[i] = transform(source[i]);
-      }
-      return array;
-    }
-
-    @Override public final int hashCode() {
-      return hashCode;
-    }
-
-    @Override boolean isHashCodeFast() {
-      return true;
-    }
-  }
-
-  /*
-   * This class is used to serialize all ImmutableSet instances, except for
-   * ImmutableEnumSet/ImmutableSortedSet, regardless of implementation type. It
-   * captures their "logical contents" and they are reconstructed using public
-   * static factories. This is necessary to ensure that the existence of a
-   * particular implementation type is an implementation detail.
-   */
-  private static class SerializedForm implements Serializable {
-    final Object[] elements;
-    SerializedForm(Object[] elements) {
-      this.elements = elements;
-    }
-    Object readResolve() {
-      return of(elements);
-    }
-    private static final long serialVersionUID = 0;
-  }
-
-  @Override Object writeReplace() {
-    return new SerializedForm(toArray());
-  }
-
-  /**
-   * Returns a new builder. The generated builder is equivalent to the builder
-   * created by the {@link Builder} constructor.
-   */
-  public static <E> Builder<E> builder() {
-    return new Builder<E>();
-  }
-
-  /**
-   * A builder for creating immutable set instances, especially
-   * {@code public static final} sets ("constant sets").
-   *
-   * <p>Example:
-   * <pre>{@code
-   *   public static final ImmutableSet<Color> GOOGLE_COLORS
-   *       = new ImmutableSet.Builder<Color>()
-   *           .addAll(WEBSAFE_COLORS)
-   *           .add(new Color(0, 191, 255))
-   *           .build();}</pre>
-   *
-   * <p>Builder instances can be reused - it is safe to call {@link #build}
-   * multiple times to build multiple sets in series. Each set
-   * is a superset of the set created before it.
-   */
-  public static class Builder<E> extends ImmutableCollection.Builder<E> {
-    // accessed directly by ImmutableSortedSet
-    final ArrayList<E> contents = Lists.newArrayList();
-
-    /**
-     * Creates a new builder. The returned builder is equivalent to the builder
-     * generated by {@link ImmutableSet#builder}.
-     */
-    public Builder() {}
-
-    /**
-     * Adds {@code element} to the {@code ImmutableSet}.  If the {@code
-     * ImmutableSet} already contains {@code element}, then {@code add} has no
-     * effect (only the previously added element is retained).
-     *
-     * @param element the element to add
-     * @return this {@code Builder} object
-     * @throws NullPointerException if {@code element} is null
-     */
-    @Override public Builder<E> add(E element) {
-      contents.add(checkNotNull(element));
-      return this;
-    }
-
-    /**
-     * Adds each element of {@code elements} to the {@code ImmutableSet},
-     * ignoring duplicate elements (only the first duplicate element is added).
-     *
-     * @param elements the elements to add
-     * @return this {@code Builder} object
-     * @throws NullPointerException if {@code elements} is null or contains a
-     *     null element
-     */
-    @Override public Builder<E> add(E... elements) {
-      checkNotNull(elements); // for GWT
-      contents.ensureCapacity(contents.size() + elements.length);
-      super.add(elements);
-      return this;
-    }
-
-    /**
-     * Adds each element of {@code elements} to the {@code ImmutableSet},
-     * ignoring duplicate elements (only the first duplicate element is added).
-     *
-     * @param elements the {@code Iterable} to add to the {@code ImmutableSet}
-     * @return this {@code Builder} object
-     * @throws NullPointerException if {@code elements} is null or contains a
-     *     null element
-     */
-    @Override public Builder<E> addAll(Iterable<? extends E> elements) {
-      if (elements instanceof Collection) {
-        Collection<?> collection = (Collection<?>) elements;
-        contents.ensureCapacity(contents.size() + collection.size());
-      }
-      super.addAll(elements);
-      return this;
-    }
-
-    /**
-     * Adds each element of {@code elements} to the {@code ImmutableSet},
-     * ignoring duplicate elements (only the first duplicate element is added).
-     *
-     * @param elements the elements to add to the {@code ImmutableSet}
-     * @return this {@code Builder} object
-     * @throws NullPointerException if {@code elements} is null or contains a
-     *     null element
-     */
-    @Override public Builder<E> addAll(Iterator<? extends E> elements) {
-      super.addAll(elements);
-      return this;
-    }
-
-    /**
-     * Returns a newly-created {@code ImmutableSet} based on the contents of
-     * the {@code Builder}.
-     */
-    @Override public ImmutableSet<E> build() {
-      return copyOf(contents);
-    }
-  }
-}
diff --git a/src/com/google/common/collect/ImmutableSetMultimap.java b/src/com/google/common/collect/ImmutableSetMultimap.java
deleted file mode 100644
index 325afff..0000000
--- a/src/com/google/common/collect/ImmutableSetMultimap.java
+++ /dev/null
@@ -1,390 +0,0 @@
-/*
- * Copyright (C) 2009 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.io.IOException;
-import java.io.InvalidObjectException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-import javax.annotation.Nullable;
-
-/**
- * An immutable {@link SetMultimap} with reliable user-specified key and value
- * iteration order. Does not permit null keys or values.
- *
- * <p>Unlike {@link Multimaps#unmodifiableSetMultimap(SetMultimap)}, which is
- * a <i>view</i> of a separate multimap which can still change, an instance of
- * {@code ImmutableSetMultimap} contains its own data and will <i>never</i>
- * change. {@code ImmutableSetMultimap} is convenient for
- * {@code public static final} multimaps ("constant multimaps") and also lets
- * you easily make a "defensive copy" of a multimap provided to your class by
- * a caller.
- *
- * <p><b>Note</b>: Although this class is not final, it cannot be subclassed as
- * it has no public or protected constructors. Thus, instances of this class
- * are guaranteed to be immutable.
- *
- * @author Mike Ward
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible(serializable = true)
-public class ImmutableSetMultimap<K, V>
-    extends ImmutableMultimap<K, V>
-    implements SetMultimap<K, V> {
-
-  /** Returns the empty multimap. */
-  // Casting is safe because the multimap will never hold any elements.
-  @SuppressWarnings("unchecked")
-  public static <K, V> ImmutableSetMultimap<K, V> of() {
-    // BEGIN android-changed
-    return (ImmutableSetMultimap) EmptyImmutableSetMultimap.INSTANCE;
-    // END android-changed
-  }
-
-  /**
-   * Returns an immutable multimap containing a single entry.
-   */
-  public static <K, V> ImmutableSetMultimap<K, V> of(K k1, V v1) {
-    ImmutableSetMultimap.Builder<K, V> builder = ImmutableSetMultimap.builder();
-    builder.put(k1, v1);
-    return builder.build();
-  }
-
-  /**
-   * Returns an immutable multimap containing the given entries, in order.
-   * Repeated occurrences of an entry (according to {@link Object#equals}) after
-   * the first are ignored.
-   */
-  public static <K, V> ImmutableSetMultimap<K, V> of(K k1, V v1, K k2, V v2) {
-    ImmutableSetMultimap.Builder<K, V> builder = ImmutableSetMultimap.builder();
-    builder.put(k1, v1);
-    builder.put(k2, v2);
-    return builder.build();
-  }
-
-  /**
-   * Returns an immutable multimap containing the given entries, in order.
-   * Repeated occurrences of an entry (according to {@link Object#equals}) after
-   * the first are ignored.
-   */
-  public static <K, V> ImmutableSetMultimap<K, V> of(
-      K k1, V v1, K k2, V v2, K k3, V v3) {
-    ImmutableSetMultimap.Builder<K, V> builder = ImmutableSetMultimap.builder();
-    builder.put(k1, v1);
-    builder.put(k2, v2);
-    builder.put(k3, v3);
-    return builder.build();
-  }
-
-  /**
-   * Returns an immutable multimap containing the given entries, in order.
-   * Repeated occurrences of an entry (according to {@link Object#equals}) after
-   * the first are ignored.
-   */
-  public static <K, V> ImmutableSetMultimap<K, V> of(
-      K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4) {
-    ImmutableSetMultimap.Builder<K, V> builder = ImmutableSetMultimap.builder();
-    builder.put(k1, v1);
-    builder.put(k2, v2);
-    builder.put(k3, v3);
-    builder.put(k4, v4);
-    return builder.build();
-  }
-
-  /**
-   * Returns an immutable multimap containing the given entries, in order.
-   * Repeated occurrences of an entry (according to {@link Object#equals}) after
-   * the first are ignored.
-   */
-  public static <K, V> ImmutableSetMultimap<K, V> of(
-      K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5) {
-    ImmutableSetMultimap.Builder<K, V> builder = ImmutableSetMultimap.builder();
-    builder.put(k1, v1);
-    builder.put(k2, v2);
-    builder.put(k3, v3);
-    builder.put(k4, v4);
-    builder.put(k5, v5);
-    return builder.build();
-  }
-
-  // looking for of() with > 5 entries? Use the builder instead.
-
-  /**
-   * Returns a new {@link Builder}.
-   */
-  public static <K, V> Builder<K, V> builder() {
-    return new Builder<K, V>();
-  }
-
-  /**
-   * Multimap for {@link ImmutableSetMultimap.Builder} that maintains key
-   * and value orderings and performs better than {@link LinkedHashMultimap}.
-   */
-  private static class BuilderMultimap<K, V> extends AbstractMultimap<K, V> {
-    BuilderMultimap() {
-      super(new LinkedHashMap<K, Collection<V>>());
-    }
-    @Override Collection<V> createCollection() {
-      return Sets.newLinkedHashSet();
-    }
-    private static final long serialVersionUID = 0;
-  }
-
-  /**
-   * A builder for creating immutable {@code SetMultimap} instances, especially
-   * {@code public static final} multimaps ("constant multimaps"). Example:
-   * <pre>   {@code
-   *
-   *   static final Multimap<String, Integer> STRING_TO_INTEGER_MULTIMAP =
-   *       new ImmutableSetMultimap.Builder<String, Integer>()
-   *           .put("one", 1)
-   *           .putAll("several", 1, 2, 3)
-   *           .putAll("many", 1, 2, 3, 4, 5)
-   *           .build();}</pre>
-   *
-   * <p>Builder instances can be reused - it is safe to call {@link #build}
-   * multiple times to build multiple multimaps in series. Each multimap
-   * contains the key-value mappings in the previously created multimaps.
-   */
-  public static final class Builder<K, V>
-      extends ImmutableMultimap.Builder<K, V> {
-    private final Multimap<K, V> builderMultimap = new BuilderMultimap<K, V>();
-
-    /**
-     * Creates a new builder. The returned builder is equivalent to the builder
-     * generated by {@link ImmutableSetMultimap#builder}.
-     */
-    public Builder() {}
-
-    /**
-     * Adds a key-value mapping to the built multimap if it is not already
-     * present.
-     */
-    @Override public Builder<K, V> put(K key, V value) {
-      builderMultimap.put(checkNotNull(key), checkNotNull(value));
-      return this;
-    }
-
-    /**
-     * Stores a collection of values with the same key in the built multimap.
-     *
-     * @throws NullPointerException if {@code key}, {@code values}, or any
-     *     element in {@code values} is null. The builder is left in an invalid
-     *     state.
-     */
-    @Override public Builder<K, V> putAll(K key, Iterable<? extends V> values) {
-      Collection<V> collection = builderMultimap.get(checkNotNull(key));
-      for (V value : values) {
-        collection.add(checkNotNull(value));
-      }
-      return this;
-    }
-
-    /**
-     * Stores an array of values with the same key in the built multimap.
-     *
-     * @throws NullPointerException if the key or any value is null. The
-     *     builder is left in an invalid state.
-     */
-    @Override public Builder<K, V> putAll(K key, V... values) {
-      return putAll(key, Arrays.asList(values));
-    }
-
-    /**
-     * Stores another multimap's entries in the built multimap. The generated
-     * multimap's key and value orderings correspond to the iteration ordering
-     * of the {@code multimap.asMap()} view, with new keys and values following
-     * any existing keys and values.
-     *
-     * @throws NullPointerException if any key or value in {@code multimap} is
-     *     null. The builder is left in an invalid state.
-     */
-    @Override public Builder<K, V> putAll(
-        Multimap<? extends K, ? extends V> multimap) {
-      for (Map.Entry<? extends K, ? extends Collection<? extends V>> entry
-          : multimap.asMap().entrySet()) {
-        putAll(entry.getKey(), entry.getValue());
-      }
-      return this;
-    }
-
-    /**
-     * Returns a newly-created immutable set multimap.
-     */
-    @Override public ImmutableSetMultimap<K, V> build() {
-      return copyOf(builderMultimap);
-    }
-  }
-
-  /**
-   * Returns an immutable set multimap containing the same mappings as
-   * {@code multimap}. The generated multimap's key and value orderings
-   * correspond to the iteration ordering of the {@code multimap.asMap()} view.
-   * Repeated occurrences of an entry in the multimap after the first are
-   * ignored.
-   *
-   * <p><b>Note:</b> Despite what the method name suggests, if
-   * {@code multimap} is an {@code ImmutableSetMultimap}, no copy will actually
-   * be performed, and the given multimap itself will be returned.
-   *
-   * @throws NullPointerException if any key or value in {@code multimap} is
-   *     null
-   */
-  public static <K, V> ImmutableSetMultimap<K, V> copyOf(
-      Multimap<? extends K, ? extends V> multimap) {
-    if (multimap.isEmpty()) {
-      return of();
-    }
-
-    if (multimap instanceof ImmutableSetMultimap) {
-      @SuppressWarnings("unchecked") // safe since multimap is not writable
-      ImmutableSetMultimap<K, V> kvMultimap
-          = (ImmutableSetMultimap<K, V>) multimap;
-      return kvMultimap;
-    }
-
-    ImmutableMap.Builder<K, ImmutableSet<V>> builder = ImmutableMap.builder();
-    int size = 0;
-
-    for (Map.Entry<? extends K, ? extends Collection<? extends V>> entry
-        : multimap.asMap().entrySet()) {
-      K key = entry.getKey();
-      Collection<? extends V> values = entry.getValue();
-      ImmutableSet<V> set = ImmutableSet.copyOf(values);
-      if (!set.isEmpty()) {
-        builder.put(key, set);
-        size += set.size();
-      }
-    }
-
-    return new ImmutableSetMultimap<K, V>(builder.build(), size);
-  }
-
-  ImmutableSetMultimap(ImmutableMap<K, ImmutableSet<V>> map, int size) {
-    super(map, size);
-  }
-
-  // views
-
-  /**
-   * Returns an immutable set of the values for the given key.  If no mappings
-   * in the multimap have the provided key, an empty immutable set is returned.
-   * The values are in the same order as the parameters used to build this
-   * multimap.
-   */
-  @Override public ImmutableSet<V> get(@Nullable K key) {
-    // This cast is safe as its type is known in constructor.
-    ImmutableSet<V> set = (ImmutableSet<V>) map.get(key);
-    return (set == null) ? ImmutableSet.<V>of() : set;
-  }
-
-  /**
-   * Guaranteed to throw an exception and leave the multimap unmodified.
-   *
-   * @throws UnsupportedOperationException always
-   */
-  @Override public ImmutableSet<V> removeAll(Object key) {
-    throw new UnsupportedOperationException();
-  }
-
-  /**
-   * Guaranteed to throw an exception and leave the multimap unmodified.
-   *
-   * @throws UnsupportedOperationException always
-   */
-  @Override public ImmutableSet<V> replaceValues(
-      K key, Iterable<? extends V> values) {
-    throw new UnsupportedOperationException();
-  }
-
-  private transient ImmutableSet<Map.Entry<K, V>> entries;
-
-  /**
-   * Returns an immutable collection of all key-value pairs in the multimap.
-   * Its iterator traverses the values for the first key, the values for the
-   * second key, and so on.
-   */
-  // TODO: Fix this so that two copies of the entries are not created.
-  @Override public ImmutableSet<Map.Entry<K, V>> entries() {
-    ImmutableSet<Map.Entry<K, V>> result = entries;
-    return (result == null)
-        ? (entries = ImmutableSet.copyOf(super.entries()))
-        : result;
-  }
-
-  /**
-   * @serialData number of distinct keys, and then for each distinct key: the
-   *     key, the number of values for that key, and the key's values
-   */
-  private void writeObject(ObjectOutputStream stream) throws IOException {
-    stream.defaultWriteObject();
-    Serialization.writeMultimap(this, stream);
-  }
-
-  private void readObject(ObjectInputStream stream)
-      throws IOException, ClassNotFoundException {
-    stream.defaultReadObject();
-    int keyCount = stream.readInt();
-    if (keyCount < 0) {
-      throw new InvalidObjectException("Invalid key count " + keyCount);
-    }
-    ImmutableMap.Builder<Object, ImmutableSet<Object>> builder
-        = ImmutableMap.builder();
-    int tmpSize = 0;
-
-    for (int i = 0; i < keyCount; i++) {
-      Object key = stream.readObject();
-      int valueCount = stream.readInt();
-      if (valueCount <= 0) {
-        throw new InvalidObjectException("Invalid value count " + valueCount);
-      }
-
-      Object[] array = new Object[valueCount];
-      for (int j = 0; j < valueCount; j++) {
-        array[j] = stream.readObject();
-      }
-      ImmutableSet<Object> valueSet = ImmutableSet.of(array);
-      if (valueSet.size() != array.length) {
-        throw new InvalidObjectException(
-            "Duplicate key-value pairs exist for key " + key);
-      }
-      builder.put(key, valueSet);
-      tmpSize += valueCount;
-    }
-
-    ImmutableMap<Object, ImmutableSet<Object>> tmpMap;
-    try {
-      tmpMap = builder.build();
-    } catch (IllegalArgumentException e) {
-      throw (InvalidObjectException)
-          new InvalidObjectException(e.getMessage()).initCause(e);
-    }
-
-    FieldSettersHolder.MAP_FIELD_SETTER.set(this, tmpMap);
-    FieldSettersHolder.SIZE_FIELD_SETTER.set(this, tmpSize);
-  }
-
-  private static final long serialVersionUID = 0;
-}
diff --git a/src/com/google/common/collect/ImmutableSortedAsList.java b/src/com/google/common/collect/ImmutableSortedAsList.java
deleted file mode 100644
index 2044220..0000000
--- a/src/com/google/common/collect/ImmutableSortedAsList.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (C) 2009 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.base.Preconditions;
-
-/**
- * List returned by {@code ImmutableSortedSet.asList()} when the set isn't
- * empty.
- *
- * @author Jared Levy
- */
-@SuppressWarnings("serial")
-final class ImmutableSortedAsList<E> extends RegularImmutableList<E> {
-  private final transient ImmutableSortedSet<E> set;
-
-  ImmutableSortedAsList(Object[] array, int offset, int size,
-      ImmutableSortedSet<E> set) {
-    super(array, offset, size);
-    this.set = set;
-  }
-
-  // Override contains(), indexOf(), and lastIndexOf() to be O(log N) instead of
-  // O(N).
-
-  @Override public boolean contains(Object target) {
-    return set.indexOf(target) >= 0;
-  }
-
-  @Override public int indexOf(Object target) {
-    return set.indexOf(target);
-  }
-
-  @Override public int lastIndexOf(Object target) {
-    return set.indexOf(target);
-  }
-
-  // The returned ImmutableSortedAsList maintains the contains(), indexOf(), and
-  // lastIndexOf() performance benefits.
-  @Override public ImmutableList<E> subList(int fromIndex, int toIndex) {
-    Preconditions.checkPositionIndexes(fromIndex, toIndex, size());
-    return (fromIndex == toIndex)
-        ? ImmutableList.<E>of()
-        : new RegularImmutableSortedSet<E>(
-            array(), set.comparator(),
-            offset() + fromIndex, offset() + toIndex).asList();
-  }
-
-  // The ImmutableAsList serialized form has the correct behavior.
-  @Override Object writeReplace() {
-    return new ImmutableAsList.SerializedForm(set);
-  }
-}
diff --git a/src/com/google/common/collect/ImmutableSortedMap.java b/src/com/google/common/collect/ImmutableSortedMap.java
deleted file mode 100644
index 183824a..0000000
--- a/src/com/google/common/collect/ImmutableSortedMap.java
+++ /dev/null
@@ -1,696 +0,0 @@
-/*
- * Copyright (C) 2009 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import com.google.common.annotations.GwtCompatible;
-
-import java.io.Serializable;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-import java.util.Map;
-import java.util.NoSuchElementException;
-import java.util.SortedMap;
-import java.util.TreeMap;
-
-import javax.annotation.Nullable;
-
-/**
- * An immutable {@link SortedMap}. Does not permit null keys or values.
- *
- * <p>Unlike {@link Collections#unmodifiableSortedMap}, which is a <i>view</i>
- * of a separate map which can still change, an instance of {@code
- * ImmutableSortedMap} contains its own data and will <i>never</i> change.
- * {@code ImmutableSortedMap} is convenient for {@code public static final} maps
- * ("constant maps") and also lets you easily make a "defensive copy" of a map
- * provided to your class by a caller.
- *
- * <p><b>Note</b>: Although this class is not final, it cannot be subclassed as
- * it has no public or protected constructors. Thus, instances of this class are
- * guaranteed to be immutable.
- *
- * @author Jared Levy
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible(serializable = true)
-public class ImmutableSortedMap<K, V>
-    extends ImmutableSortedMapFauxverideShim<K, V> implements SortedMap<K, V> {
-
-  // TODO: Confirm that ImmutableSortedMap is faster to construct and uses less
-  // memory than TreeMap; then say so in the class Javadoc.
-
-  // TODO: Create separate subclasses for empty, single-entry, and
-  // multiple-entry instances.
-
-  @SuppressWarnings("unchecked")
-  private static final Comparator NATURAL_ORDER = Ordering.natural();
-  private static final Entry<?, ?>[] EMPTY_ARRAY = new Entry<?, ?>[0];
-
-  @SuppressWarnings("unchecked")
-  private static final ImmutableMap<Object, Object> NATURAL_EMPTY_MAP
-      = new ImmutableSortedMap<Object, Object>(EMPTY_ARRAY, NATURAL_ORDER);
-
-  /**
-   * Returns the empty sorted map.
-   */
-  // Casting to any type is safe because the set will never hold any elements.
-  @SuppressWarnings("unchecked")
-  public static <K, V> ImmutableSortedMap<K, V> of() {
-    return (ImmutableSortedMap) NATURAL_EMPTY_MAP;
-  }
-
-  private static <K, V> ImmutableSortedMap<K, V> emptyMap(
-      Comparator<? super K> comparator) {
-    if (NATURAL_ORDER.equals(comparator)) {
-      return ImmutableSortedMap.of();
-    } else {
-      return new ImmutableSortedMap<K, V>(EMPTY_ARRAY, comparator);
-    }
-  }
-
-  /**
-   * Returns an immutable map containing a single entry.
-   */
-  public static <K extends Comparable<? super K>, V> ImmutableSortedMap<K, V>
-      of(K k1, V v1) {
-    Entry<?, ?>[] entries = { entryOf(k1, v1) };
-    return new ImmutableSortedMap<K, V>(entries, Ordering.natural());
-  }
-
-  /**
-   * Returns an immutable sorted map containing the given entries, sorted by the
-   * natural ordering of their keys.
-   *
-   * @throws IllegalArgumentException if the two keys are equal according to
-   *     their natural ordering
-   */
-  public static <K extends Comparable<? super K>, V> ImmutableSortedMap<K, V>
-      of(K k1, V v1, K k2, V v2) {
-    return new Builder<K, V>(Ordering.natural())
-        .put(k1, v1).put(k2, v2).build();
-  }
-
-  /**
-   * Returns an immutable sorted map containing the given entries, sorted by the
-   * natural ordering of their keys.
-   *
-   * @throws IllegalArgumentException if any two keys are equal according to
-   *     their natural ordering
-   */
-  public static <K extends Comparable<? super K>, V> ImmutableSortedMap<K, V>
-      of(K k1, V v1, K k2, V v2, K k3, V v3) {
-    return new Builder<K, V>(Ordering.natural())
-        .put(k1, v1).put(k2, v2).put(k3, v3).build();
-  }
-
-  /**
-   * Returns an immutable sorted map containing the given entries, sorted by the
-   * natural ordering of their keys.
-   *
-   * @throws IllegalArgumentException if any two keys are equal according to
-   *     their natural ordering
-   */
-  public static <K extends Comparable<? super K>, V> ImmutableSortedMap<K, V>
-      of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4) {
-    return new Builder<K, V>(Ordering.natural())
-        .put(k1, v1).put(k2, v2).put(k3, v3).put(k4, v4).build();
-  }
-
-  /**
-   * Returns an immutable sorted map containing the given entries, sorted by the
-   * natural ordering of their keys.
-   *
-   * @throws IllegalArgumentException if any two keys are equal according to
-   *     their natural ordering
-   */
-  public static <K extends Comparable<? super K>, V> ImmutableSortedMap<K, V>
-      of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5) {
-    return new Builder<K, V>(Ordering.natural())
-        .put(k1, v1).put(k2, v2).put(k3, v3).put(k4, v4).put(k5, v5).build();
-  }
-
-  /**
-   * Returns an immutable map containing the same entries as {@code map}, sorted
-   * by the natural ordering of the keys.
-   *
-   * <p><b>Note:</b> Despite what the method name suggests, if {@code map} is an
-   * {@code ImmutableSortedMap}, it may be returned instead of a copy.
-   *
-   * <p>This method is not type-safe, as it may be called on a map with keys
-   * that are not mutually comparable.
-   *
-   * @throws ClassCastException if the keys in {@code map} are not mutually
-   *     comparable
-   * @throws NullPointerException if any key or value in {@code map} is null
-   * @throws IllegalArgumentException if any two keys are equal according to
-   *     their natural ordering
-   */
-  public static <K, V> ImmutableSortedMap<K, V> copyOf(
-      Map<? extends K, ? extends V> map) {
-    // Hack around K not being a subtype of Comparable.
-    // Unsafe, see ImmutableSortedSetFauxverideShim.
-    @SuppressWarnings("unchecked")
-    Ordering<K> naturalOrder = (Ordering) Ordering.<Comparable>natural();
-    return copyOfInternal(map, naturalOrder);
-  }
-
-  /**
-   * Returns an immutable map containing the same entries as {@code map}, with
-   * keys sorted by the provided comparator.
-   *
-   * <p><b>Note:</b> Despite what the method name suggests, if {@code map} is an
-   * {@code ImmutableSortedMap}, it may be returned instead of a copy.
-   *
-   * @throws NullPointerException if any key or value in {@code map} is null
-   * @throws IllegalArgumentException if any two keys are equal according to
-   *     the comparator
-   */
-  public static <K, V> ImmutableSortedMap<K, V> copyOf(
-      Map<? extends K, ? extends V> map, Comparator<? super K> comparator) {
-    return copyOfInternal(map, checkNotNull(comparator));
-  }
-
-  /**
-   * Returns an immutable map containing the same entries as the provided sorted
-   * map, with the same ordering.
-   *
-   * <p><b>Note:</b> Despite what the method name suggests, if {@code map} is an
-   * {@code ImmutableSortedMap}, it may be returned instead of a copy.
-   *
-   * @throws NullPointerException if any key or value in {@code map} is null
-   */
-  public static <K, V> ImmutableSortedMap<K, V> copyOfSorted(
-      SortedMap<K, ? extends V> map) {
-    // If map has a null comparator, the keys should have a natural ordering,
-    // even though K doesn't explicitly implement Comparable.
-    @SuppressWarnings("unchecked")
-    Comparator<? super K> comparator =
-        (map.comparator() == null) ? NATURAL_ORDER : map.comparator();
-    return copyOfInternal(map, comparator);
-  }
-
-  private static <K, V> ImmutableSortedMap<K, V> copyOfInternal(
-      Map<? extends K, ? extends V> map, Comparator<? super K> comparator) {
-    boolean sameComparator = false;
-    if (map instanceof SortedMap) {
-      SortedMap<?, ?> sortedMap = (SortedMap<?, ?>) map;
-      Comparator<?> comparator2 = sortedMap.comparator();
-      sameComparator = (comparator2 == null)
-          ? comparator == NATURAL_ORDER
-          : comparator.equals(comparator2);
-    }
-
-    if (sameComparator && (map instanceof ImmutableSortedMap)) {
-      // TODO: Prove that this cast is safe, even though
-      // Collections.unmodifiableSortedMap requires the same key type.
-      @SuppressWarnings("unchecked")
-      ImmutableSortedMap<K, V> kvMap = (ImmutableSortedMap<K, V>) map;
-      return kvMap;
-    }
-
-    // Using List to support concurrent map whose size changes
-    List<Entry<?, ?>> list = Lists.newArrayListWithCapacity(map.size());
-    for (Entry<? extends K, ? extends V> entry : map.entrySet()) {
-      list.add(entryOf(entry.getKey(), entry.getValue()));
-    }
-    Entry<?, ?>[] entryArray = list.toArray(new Entry<?, ?>[list.size()]);
-
-    if (!sameComparator) {
-      sortEntries(entryArray, comparator);
-      validateEntries(entryArray, comparator);
-    }
-
-    return new ImmutableSortedMap<K, V>(entryArray, comparator);
-  }
-
-  private static void sortEntries(Entry<?, ?>[] entryArray,
-      final Comparator<?> comparator) {
-    Comparator<Entry<?, ?>> entryComparator = new Comparator<Entry<?, ?>>() {
-      public int compare(Entry<?, ?> entry1, Entry<?, ?> entry2) {
-        return ImmutableSortedSet.unsafeCompare(
-            comparator, entry1.getKey(), entry2.getKey());
-      }
-    };
-    Arrays.sort(entryArray, entryComparator);
-  }
-
-  private static void validateEntries(Entry<?, ?>[] entryArray,
-      Comparator<?> comparator) {
-    for (int i = 1; i < entryArray.length; i++) {
-      if (ImmutableSortedSet.unsafeCompare(comparator,
-          entryArray[i - 1].getKey(), entryArray[i].getKey()) == 0) {
-        throw new IllegalArgumentException(
-            "Duplicate keys in mappings "
-                + entryArray[i - 1] + " and " + entryArray[i]);
-      }
-    }
-  }
-
-  /**
-   * Returns a builder that creates immutable sorted maps whose keys are
-   * ordered by their natural ordering. The sorted maps use {@link
-   * Ordering#natural()} as the comparator.
-   *
-   * <p>Note: the type parameter {@code K} extends {@code Comparable<K>} rather
-   * than {@code Comparable<? super K>} as a workaround for javac <a
-   * href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6468354">bug
-   * 6468354</a>.
-   */
-  public static <K extends Comparable<K>, V> Builder<K, V> naturalOrder() {
-    return new Builder<K, V>(Ordering.natural());
-  }
-
-  /**
-   * Returns a builder that creates immutable sorted maps with an explicit
-   * comparator. If the comparator has a more general type than the map's keys,
-   * such as creating a {@code SortedMap<Integer, String>} with a {@code
-   * Comparator<Number>}, use the {@link Builder} constructor instead.
-   *
-   * @throws NullPointerException if {@code comparator} is null
-   */
-  public static <K, V> Builder<K, V> orderedBy(Comparator<K> comparator) {
-    return new Builder<K, V>(comparator);
-  }
-
-  /**
-   * Returns a builder that creates immutable sorted maps whose keys are
-   * ordered by the reverse of their natural ordering.
-   *
-   * <p>Note: the type parameter {@code K} extends {@code Comparable<K>} rather
-   * than {@code Comparable<? super K>} as a workaround for javac <a
-   * href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6468354">bug
-   * 6468354</a>.
-   */
-  public static <K extends Comparable<K>, V> Builder<K, V> reverseOrder() {
-    return new Builder<K, V>(Ordering.natural().reverse());
-  }
-
-  /**
-   * A builder for creating immutable sorted map instances, especially {@code
-   * public static final} maps ("constant maps"). Example: <pre>   {@code
-   *
-   *   static final ImmutableSortedMap<Integer, String> INT_TO_WORD =
-   *       new ImmutableSortedMap.Builder<Integer, String>(Ordering.natural())
-   *           .put(1, "one")
-   *           .put(2, "two")
-   *           .put(3, "three")
-   *           .build();}</pre>
-   *
-   * For <i>small</i> immutable sorted maps, the {@code ImmutableSortedMap.of()}
-   * methods are even more convenient.
-   *
-   * <p>Builder instances can be reused - it is safe to call {@link #build}
-   * multiple times to build multiple maps in series. Each map is a superset of
-   * the maps created before it.
-   */
-  public static final class Builder<K, V> extends ImmutableMap.Builder<K, V> {
-    private final Comparator<? super K> comparator;
-
-    /**
-     * Creates a new builder. The returned builder is equivalent to the builder
-     * generated by {@link ImmutableSortedMap#orderedBy}.
-     */
-    public Builder(Comparator<? super K> comparator) {
-      this.comparator = checkNotNull(comparator);
-    }
-
-    /**
-     * Associates {@code key} with {@code value} in the built map. Duplicate
-     * keys, according to the comparator (which might be the keys' natural
-     * order), are not allowed, and will cause {@link #build} to fail.
-     */
-    @Override public Builder<K, V> put(K key, V value) {
-      entries.add(entryOf(key, value));
-      return this;
-    }
-
-    /**
-     * Associates all of the given map's keys and values in the built map.
-     * Duplicate keys, according to the comparator (which might be the keys'
-     * natural order), are not allowed, and will cause {@link #build} to fail.
-     *
-     * @throws NullPointerException if any key or value in {@code map} is null
-     */
-    @Override public Builder<K, V> putAll(Map<? extends K, ? extends V> map) {
-      for (Entry<? extends K, ? extends V> entry : map.entrySet()) {
-        put(entry.getKey(), entry.getValue());
-      }
-      return this;
-    }
-
-    /**
-     * Returns a newly-created immutable sorted map.
-     *
-     * @throws IllegalArgumentException if any two keys are equal according to
-     *     the comparator (which might be the keys' natural order)
-     */
-    @Override public ImmutableSortedMap<K, V> build() {
-      Entry<?, ?>[] entryArray
-          = entries.toArray(new Entry<?, ?>[entries.size()]);
-      sortEntries(entryArray, comparator);
-      validateEntries(entryArray, comparator);
-      return new ImmutableSortedMap<K, V>(entryArray, comparator);
-    }
-  }
-
-  private final transient Entry<K, V>[] entries;
-  private final transient Comparator<? super K> comparator;
-  private final transient int fromIndex;
-  private final transient int toIndex;
-
-  private ImmutableSortedMap(Entry<?, ?>[] entries,
-      Comparator<? super K> comparator, int fromIndex, int toIndex) {
-    // each of the callers carefully put only Entry<K, V>s into the array!
-    @SuppressWarnings("unchecked")
-    Entry<K, V>[] tmp = (Entry<K, V>[]) entries;
-    this.entries = tmp;
-    this.comparator = comparator;
-    this.fromIndex = fromIndex;
-    this.toIndex = toIndex;
-  }
-
-  ImmutableSortedMap(Entry<?, ?>[] entries,
-      Comparator<? super K> comparator) {
-    this(entries, comparator, 0, entries.length);
-  }
-
-  public int size() {
-    return toIndex - fromIndex;
-  }
-
-  @Override public V get(@Nullable Object key) {
-    if (key == null) {
-      return null;
-    }
-    int i;
-    try {
-      i = binarySearch(key);
-    } catch (ClassCastException e) {
-      return null;
-    }
-    return (i >= 0) ? entries[i].getValue() : null;
-  }
-
-  private int binarySearch(Object key) {
-    int lower = fromIndex;
-    int upper = toIndex - 1;
-
-    while (lower <= upper) {
-      int middle = lower + (upper - lower) / 2;
-      int c = ImmutableSortedSet.unsafeCompare(
-          comparator, key, entries[middle].getKey());
-      if (c < 0) {
-        upper = middle - 1;
-      } else if (c > 0) {
-        lower = middle + 1;
-      } else {
-        return middle;
-      }
-    }
-
-    return -lower - 1;
-  }
-
-  @Override public boolean containsValue(@Nullable Object value) {
-    if (value == null) {
-      return false;
-    }
-    for (int i = fromIndex; i < toIndex; i++) {
-      if (entries[i].getValue().equals(value)) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  private transient ImmutableSet<Entry<K, V>> entrySet;
-
-  /**
-   * Returns an immutable set of the mappings in this map, sorted by the key
-   * ordering.
-   */
-  @Override public ImmutableSet<Entry<K, V>> entrySet() {
-    ImmutableSet<Entry<K, V>> es = entrySet;
-    return (es == null) ? (entrySet = createEntrySet()) : es;
-  }
-
-  private ImmutableSet<Entry<K, V>> createEntrySet() {
-    return isEmpty() ? ImmutableSet.<Entry<K, V>>of()
-        : new EntrySet<K, V>(this);
-  }
-
-  @SuppressWarnings("serial") // uses writeReplace(), not default serialization
-  private static class EntrySet<K, V> extends ImmutableSet<Entry<K, V>> {
-    final transient ImmutableSortedMap<K, V> map;
-
-    EntrySet(ImmutableSortedMap<K, V> map) {
-      this.map = map;
-    }
-
-    public int size() {
-      return map.size();
-    }
-
-    @Override public UnmodifiableIterator<Entry<K, V>> iterator() {
-      return Iterators.forArray(map.entries, map.fromIndex, size());
-    }
-
-    @Override public boolean contains(Object target) {
-      if (target instanceof Entry) {
-        Entry<?, ?> entry = (Entry<?, ?>) target;
-        V mappedValue = map.get(entry.getKey());
-        return mappedValue != null && mappedValue.equals(entry.getValue());
-      }
-      return false;
-    }
-
-    @Override Object writeReplace() {
-      return new EntrySetSerializedForm<K, V>(map);
-    }
-  }
-
-  private static class EntrySetSerializedForm<K, V> implements Serializable {
-    final ImmutableSortedMap<K, V> map;
-    EntrySetSerializedForm(ImmutableSortedMap<K, V> map) {
-      this.map = map;
-    }
-    Object readResolve() {
-      return map.entrySet();
-    }
-    private static final long serialVersionUID = 0;
-  }
-
-  private transient ImmutableSortedSet<K> keySet;
-
-  /**
-   * Returns an immutable sorted set of the keys in this map.
-   */
-  @Override public ImmutableSortedSet<K> keySet() {
-    ImmutableSortedSet<K> ks = keySet;
-    return (ks == null) ? (keySet = createKeySet()) : ks;
-  }
-
-  private ImmutableSortedSet<K> createKeySet() {
-    if (isEmpty()) {
-      return ImmutableSortedSet.emptySet(comparator);
-    }
-
-    // TODO: For better performance, don't create a separate array.
-    Object[] array = new Object[size()];
-    for (int i = fromIndex; i < toIndex; i++) {
-      array[i - fromIndex] = entries[i].getKey();
-    }
-    return new RegularImmutableSortedSet<K>(array, comparator);
-  }
-
-  private transient ImmutableCollection<V> values;
-
-  /**
-   * Returns an immutable collection of the values in this map, sorted by the
-   * ordering of the corresponding keys.
-   */
-  @Override public ImmutableCollection<V> values() {
-    ImmutableCollection<V> v = values;
-    return (v == null) ? (values = new Values<V>(this)) : v;
-  }
-
-  @SuppressWarnings("serial") // uses writeReplace(), not default serialization
-  private static class Values<V> extends ImmutableCollection<V> {
-    private final ImmutableSortedMap<?, V> map;
-
-    Values(ImmutableSortedMap<?, V> map) {
-      this.map = map;
-    }
-
-    public int size() {
-      return map.size();
-    }
-
-    @Override public UnmodifiableIterator<V> iterator() {
-      return new AbstractIterator<V>() {
-        int index = map.fromIndex;
-        @Override protected V computeNext() {
-          return (index < map.toIndex)
-              ? map.entries[index++].getValue()
-              : endOfData();
-        }
-      };
-    }
-
-    @Override public boolean contains(Object target) {
-      return map.containsValue(target);
-    }
-
-    @Override Object writeReplace() {
-      return new ValuesSerializedForm<V>(map);
-    }
-  }
-
-  private static class ValuesSerializedForm<V> implements Serializable {
-    final ImmutableSortedMap<?, V> map;
-    ValuesSerializedForm(ImmutableSortedMap<?, V> map) {
-      this.map = map;
-    }
-    Object readResolve() {
-      return map.values();
-    }
-    private static final long serialVersionUID = 0;
-  }
-
-  /**
-   * Returns the comparator that orders the keys, which is
-   * {@link Ordering#natural()} when the natural ordering of the keys is used.
-   * Note that its behavior is not consistent with {@link TreeMap#comparator()},
-   * which returns {@code null} to indicate natural ordering.
-   */
-  public Comparator<? super K> comparator() {
-    return comparator;
-  }
-
-  public K firstKey() {
-    if (isEmpty()) {
-      throw new NoSuchElementException();
-    }
-    return entries[fromIndex].getKey();
-  }
-
-  public K lastKey() {
-    if (isEmpty()) {
-      throw new NoSuchElementException();
-    }
-    return entries[toIndex - 1].getKey();
-  }
-
-  /**
-   * This method returns a {@code ImmutableSortedMap}, consisting of the entries
-   * whose keys are less than {@code toKey}.
-   *
-   * <p>The {@link SortedMap#headMap} documentation states that a submap of a
-   * submap throws an {@link IllegalArgumentException} if passed a {@code toKey}
-   * greater than an earlier {@code toKey}. However, this method doesn't throw
-   * an exception in that situation, but instead keeps the original {@code
-   * toKey}.
-   */
-  public ImmutableSortedMap<K, V> headMap(K toKey) {
-    int newToIndex = findSubmapIndex(checkNotNull(toKey));
-    return createSubmap(fromIndex, newToIndex);
-  }
-
-  /**
-   * This method returns a {@code ImmutableSortedMap}, consisting of the entries
-   * whose keys ranges from {@code fromKey}, inclusive, to {@code toKey},
-   * exclusive.
-   *
-   * <p>The {@link SortedMap#subMap} documentation states that a submap of a
-   * submap throws an {@link IllegalArgumentException} if passed a {@code
-   * fromKey} less than an earlier {@code fromKey}. However, this method doesn't
-   * throw an exception in that situation, but instead keeps the original {@code
-   * fromKey}. Similarly, this method keeps the original {@code toKey}, instead
-   * of throwing an exception, if passed a {@code toKey} greater than an earlier
-   * {@code toKey}.
-   */
-  public ImmutableSortedMap<K, V> subMap(K fromKey, K toKey) {
-    checkNotNull(fromKey);
-    checkNotNull(toKey);
-    checkArgument(comparator.compare(fromKey, toKey) <= 0);
-    int newFromIndex = findSubmapIndex(fromKey);
-    int newToIndex = findSubmapIndex(toKey);
-    return createSubmap(newFromIndex, newToIndex);
-  }
-
-  /**
-   * This method returns a {@code ImmutableSortedMap}, consisting of the entries
-   * whose keys are greater than or equals to {@code fromKey}.
-   *
-   * <p>The {@link SortedMap#tailMap} documentation states that a submap of a
-   * submap throws an {@link IllegalArgumentException} if passed a {@code
-   * fromKey} less than an earlier {@code fromKey}. However, this method doesn't
-   * throw an exception in that situation, but instead keeps the original {@code
-   * fromKey}.
-   */
-  public ImmutableSortedMap<K, V> tailMap(K fromKey) {
-    int newFromIndex = findSubmapIndex(checkNotNull(fromKey));
-    return createSubmap(newFromIndex, toIndex);
-  }
-
-  private int findSubmapIndex(K key) {
-    int index = binarySearch(key);
-    return (index >= 0) ? index : (-index - 1);
-  }
-
-  private ImmutableSortedMap<K, V> createSubmap(
-      int newFromIndex, int newToIndex) {
-    if (newFromIndex < newToIndex) {
-      return new ImmutableSortedMap<K, V>(entries, comparator,
-          newFromIndex, newToIndex);
-    } else {
-      return emptyMap(comparator);
-    }
-  }
-
-  /**
-   * Serialized type for all ImmutableSortedMap instances. It captures the
-   * logical contents and they are reconstructed using public factory methods.
-   * This ensures that the implementation types remain as implementation
-   * details.
-   */
-  private static class SerializedForm extends ImmutableMap.SerializedForm {
-    private final Comparator<Object> comparator;
-    @SuppressWarnings("unchecked")
-    SerializedForm(ImmutableSortedMap<?, ?> sortedMap) {
-      super(sortedMap);
-      comparator = (Comparator<Object>) sortedMap.comparator();
-    }
-    @Override Object readResolve() {
-      Builder<Object, Object> builder = new Builder<Object, Object>(comparator);
-      return createMap(builder);
-    }
-    private static final long serialVersionUID = 0;
-  }
-
-  @Override Object writeReplace() {
-    return new SerializedForm(this);
-  }
-
-  // This class is never actually serialized directly, but we have to make the
-  // warning go away (and suppressing would suppress for all nested classes too)
-  private static final long serialVersionUID = 0;
-}
diff --git a/src/com/google/common/collect/ImmutableSortedMapFauxverideShim.java b/src/com/google/common/collect/ImmutableSortedMapFauxverideShim.java
deleted file mode 100644
index 0748d51..0000000
--- a/src/com/google/common/collect/ImmutableSortedMapFauxverideShim.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright (C) 2009 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-
-/**
- * "Overrides" the {@link ImmutableMap} static methods that lack
- * {@link ImmutableSortedMap} equivalents with deprecated, exception-throwing
- * versions. See {@link ImmutableSortedSetFauxverideShim} for details.
- *
- * @author Chris Povirk
- */
-@GwtCompatible
-abstract class ImmutableSortedMapFauxverideShim<K, V>
-    extends ImmutableMap<K, V> {
-  /**
-   * Not supported. Use {@link ImmutableSortedMap#naturalOrder}, which offers
-   * better type-safety, instead. This method exists only to hide
-   * {@link ImmutableMap#builder} from consumers of {@code ImmutableSortedMap}.
-   *
-   * @throws UnsupportedOperationException always
-   * @deprecated Use {@link ImmutableSortedMap#naturalOrder}, which offers
-   *     better type-safety.
-   */
-  @Deprecated public static <K, V> ImmutableSortedMap.Builder<K, V> builder() {
-    throw new UnsupportedOperationException();
-  }
-
-  /**
-   * Not supported. <b>You are attempting to create a map that may contain a
-   * non-{@code Comparable} key.</b> Proper calls will resolve to the version in
-   * {@code ImmutableSortedMap}, not this dummy version.
-   *
-   * @throws UnsupportedOperationException always
-   * @deprecated <b>Pass a key of type {@code Comparable} to use {@link
-   *     ImmutableSortedMap#of(Comparable, Object)}.</b>
-   */
-  @Deprecated public static <K, V> ImmutableSortedMap<K, V> of(K k1, V v1) {
-    throw new UnsupportedOperationException();
-  }
-
-  /**
-   * Not supported. <b>You are attempting to create a map that may contain
-   * non-{@code Comparable} keys.</b> Proper calls will resolve to the version
-   * in {@code ImmutableSortedMap}, not this dummy version.
-   *
-   * @throws UnsupportedOperationException always
-   * @deprecated <b>Pass keys of type {@code Comparable} to use {@link
-   *     ImmutableSortedMap#of(Comparable, Object, Comparable, Object)}.</b>
-   */
-  @Deprecated public static <K, V> ImmutableSortedMap<K, V> of(
-      K k1, V v1, K k2, V v2) {
-    throw new UnsupportedOperationException();
-  }
-
-  /**
-   * Not supported. <b>You are attempting to create a map that may contain
-   * non-{@code Comparable} keys.</b> Proper calls to will resolve to the
-   * version in {@code ImmutableSortedMap}, not this dummy version.
-   *
-   * @throws UnsupportedOperationException always
-   * @deprecated <b>Pass keys of type {@code Comparable} to use {@link
-   *     ImmutableSortedMap#of(Comparable, Object, Comparable, Object,
-   *     Comparable, Object)}.</b>
-   */
-  @Deprecated public static <K, V> ImmutableSortedMap<K, V> of(
-      K k1, V v1, K k2, V v2, K k3, V v3) {
-    throw new UnsupportedOperationException();
-  }
-
-  /**
-   * Not supported. <b>You are attempting to create a map that may contain
-   * non-{@code Comparable} keys.</b> Proper calls will resolve to the version
-   * in {@code ImmutableSortedMap}, not this dummy version.
-   *
-   * @throws UnsupportedOperationException always
-   * @deprecated <b>Pass keys of type {@code Comparable} to use {@link
-   *     ImmutableSortedMap#of(Comparable, Object, Comparable, Object,
-   *     Comparable, Object, Comparable, Object)}.</b>
-   */
-  @Deprecated public static <K, V> ImmutableSortedMap<K, V> of(
-      K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4) {
-    throw new UnsupportedOperationException();
-  }
-
-  /**
-   * Not supported. <b>You are attempting to create a map that may contain
-   * non-{@code Comparable} keys.</b> Proper calls will resolve to the version
-   * in {@code ImmutableSortedMap}, not this dummy version.
-   *
-   * @throws UnsupportedOperationException always
-   * @deprecated <b>Pass keys of type {@code Comparable} to use {@link
-   *     ImmutableSortedMap#of(Comparable, Object, Comparable, Object,
-   *     Comparable, Object, Comparable, Object, Comparable, Object)}.</b>
-   */
-  @Deprecated public static <K, V> ImmutableSortedMap<K, V> of(
-      K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5) {
-    throw new UnsupportedOperationException();
-  }
-
-  // No copyOf() fauxveride; see ImmutableSortedSetFauxverideShim.
-}
diff --git a/src/com/google/common/collect/ImmutableSortedSet.java b/src/com/google/common/collect/ImmutableSortedSet.java
deleted file mode 100644
index f94dc8a..0000000
--- a/src/com/google/common/collect/ImmutableSortedSet.java
+++ /dev/null
@@ -1,684 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import com.google.common.annotations.GwtCompatible;
-
-import java.io.InvalidObjectException;
-import java.io.ObjectInputStream;
-import java.io.Serializable;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Iterator;
-import java.util.List;
-import java.util.SortedSet;
-
-/**
- * An immutable {@code SortedSet} that stores its elements in a sorted array.
- * Some instances are ordered by an explicit comparator, while others follow the
- * natural sort ordering of their elements. Either way, null elements are not
- * supported.
- *
- * <p>Unlike {@link Collections#unmodifiableSortedSet}, which is a <i>view</i>
- * of a separate collection that can still change, an instance of {@code
- * ImmutableSortedSet} contains its own private data and will <i>never</i>
- * change. This class is convenient for {@code public static final} sets
- * ("constant sets") and also lets you easily make a "defensive copy" of a set
- * provided to your class by a caller.
- *
- * <p>The sets returned by {@link #headSet}, {@link #tailSet}, and
- * {@link #subSet} methods share the same array as the original set, preventing
- * that array from being garbage collected. If this is a concern, the data may
- * be copied into a correctly-sized array by calling {@link #copyOfSorted}.
- *
- * <p><b>Note on element equivalence:</b> The {@link #contains(Object)},
- * {@link #containsAll(Collection)}, and {@link #equals(Object)}
- * implementations must check whether a provided object is equivalent to an
- * element in the collection. Unlike most collections, an
- * {@code ImmutableSortedSet} doesn't use {@link Object#equals} to determine if
- * two elements are equivalent. Instead, with an explicit comparator, the
- * following relation determines whether elements {@code x} and {@code y} are
- * equivalent: <pre>   {@code
- *
- *   {(x, y) | comparator.compare(x, y) == 0}}</pre>
- *
- * With natural ordering of elements, the following relation determines whether
- * two elements are equivalent: <pre>   {@code
- *
- *   {(x, y) | x.compareTo(y) == 0}}</pre>
- *
- * <b>Warning:</b> Like most sets, an {@code ImmutableSortedSet} will not
- * function correctly if an element is modified after being placed in the set.
- * For this reason, and to avoid general confusion, it is strongly recommended
- * to place only immutable objects into this collection.
- *
- * <p><b>Note</b>: Although this class is not final, it cannot be subclassed as
- * it has no public or protected constructors. Thus, instances of this type are
- * guaranteed to be immutable.
- *
- * @see ImmutableSet
- * @author Jared Levy
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible(serializable = true)
-@SuppressWarnings("serial") // we're overriding default serialization
-public abstract class ImmutableSortedSet<E>
-    extends ImmutableSortedSetFauxverideShim<E> implements SortedSet<E> {
-
-  // TODO: Can we find a way to remove this @SuppressWarnings even for eclipse?
-  @SuppressWarnings("unchecked")
-  private static final Comparator NATURAL_ORDER = Ordering.natural();
-
-  @SuppressWarnings("unchecked")
-  private static final ImmutableSortedSet<Object> NATURAL_EMPTY_SET =
-      new EmptyImmutableSortedSet<Object>(NATURAL_ORDER);
-
-  @SuppressWarnings("unchecked")
-  private static <E> ImmutableSortedSet<E> emptySet() {
-    return (ImmutableSortedSet<E>) NATURAL_EMPTY_SET;
-  }
-
-  static <E> ImmutableSortedSet<E> emptySet(
-      Comparator<? super E> comparator) {
-    if (NATURAL_ORDER.equals(comparator)) {
-      return emptySet();
-    } else {
-      return new EmptyImmutableSortedSet<E>(comparator);
-    }
-  }
-
-  /**
-   * Returns the empty immutable sorted set.
-   */
-  public static <E> ImmutableSortedSet<E> of() {
-    return emptySet();
-  }
-
-  /**
-   * Returns an immutable sorted set containing a single element.
-   */
-  public static <E extends Comparable<? super E>> ImmutableSortedSet<E> of(
-      E element) {
-    Object[] array = { checkNotNull(element) };
-    return new RegularImmutableSortedSet<E>(array, Ordering.natural());
-  }
-
-  /**
-   * Returns an immutable sorted set containing the given elements sorted by
-   * their natural ordering. When multiple elements are equivalent according to
-   * {@link Comparable#compareTo}, only the first one specified is included.
-   *
-   * @throws NullPointerException if any element is null
-   */
-  @SuppressWarnings("unchecked")
-  public static <E extends Comparable<? super E>> ImmutableSortedSet<E> of(
-      E e1, E e2) {
-    return ofInternal(Ordering.natural(), e1, e2);
-  }
-
-  /**
-   * Returns an immutable sorted set containing the given elements sorted by
-   * their natural ordering. When multiple elements are equivalent according to
-   * {@link Comparable#compareTo}, only the first one specified is included.
-   *
-   * @throws NullPointerException if any element is null
-   */
-  @SuppressWarnings("unchecked")
-  public static <E extends Comparable<? super E>> ImmutableSortedSet<E> of(
-      E e1, E e2, E e3) {
-    return ofInternal(Ordering.natural(), e1, e2, e3);
-  }
-
-  /**
-   * Returns an immutable sorted set containing the given elements sorted by
-   * their natural ordering. When multiple elements are equivalent according to
-   * {@link Comparable#compareTo}, only the first one specified is included.
-   *
-   * @throws NullPointerException if any element is null
-   */
-  @SuppressWarnings("unchecked")
-  public static <E extends Comparable<? super E>> ImmutableSortedSet<E> of(
-      E e1, E e2, E e3, E e4) {
-    return ofInternal(Ordering.natural(), e1, e2, e3, e4);
-  }
-
-  /**
-   * Returns an immutable sorted set containing the given elements sorted by
-   * their natural ordering. When multiple elements are equivalent according to
-   * {@link Comparable#compareTo}, only the first one specified is included.
-   *
-   * @throws NullPointerException if any element is null
-   */
-  @SuppressWarnings("unchecked")
-  public static <E extends Comparable<? super E>> ImmutableSortedSet<E> of(
-      E e1, E e2, E e3, E e4, E e5) {
-    return ofInternal(Ordering.natural(), e1, e2, e3, e4, e5);
-  }
-
-  // TODO: Consider adding factory methods that throw an exception when given
-  // duplicate elements.
-
-  /**
-   * Returns an immutable sorted set containing the given elements sorted by
-   * their natural ordering. When multiple elements are equivalent according to
-   * {@link Comparable#compareTo}, only the first one specified is included.
-   *
-   * @throws NullPointerException if any of {@code elements} is null
-   */
-  public static <E extends Comparable<? super E>> ImmutableSortedSet<E> of(
-      E... elements) {
-    return ofInternal(Ordering.natural(), elements);
-  }
-
-  private static <E> ImmutableSortedSet<E> ofInternal(
-      Comparator<? super E> comparator, E... elements) {
-    checkNotNull(elements); // for GWT
-    switch (elements.length) {
-      case 0:
-        return emptySet(comparator);
-      default:
-        /*
-         * We can't use Platform.clone() because of GWT bug 3621. See our GWT
-         * ImmutableSortedSetTest.testOf_gwtArraycopyBug() for details. We can't
-         * use System.arraycopy() here for the same reason.
-         */
-        Object[] array = new Object[elements.length];
-        for (int i = 0; i < elements.length; i++) {
-          array[i] = checkNotNull(elements[i]);
-        }
-        sort(array, comparator);
-        array = removeDupes(array, comparator);
-        return new RegularImmutableSortedSet<E>(array, comparator);
-    }
-  }
-
-  /** Sort the array, according to the comparator. */
-  @SuppressWarnings("unchecked") // E comparator with Object array
-  private static <E> void sort(
-      Object[] array, Comparator<? super E> comparator) {
-    Arrays.sort(array, (Comparator<Object>) comparator);
-  }
-
-  /**
-   * Returns an array that removes duplicate consecutive elements, according to
-   * the provided comparator. Note that the input array is modified. This method
-   * does not support empty arrays.
-   */
-  private static <E> Object[] removeDupes(Object[] array,
-      Comparator<? super E> comparator) {
-    int size = 1;
-    for (int i = 1; i < array.length; i++) {
-      Object element = array[i];
-      if (unsafeCompare(comparator, array[size - 1], element) != 0) {
-        array[size] = element;
-        size++;
-      }
-    }
-
-    // TODO: Move to ObjectArrays?
-    if (size == array.length) {
-      return array;
-    } else {
-      Object[] copy = new Object[size];
-      Platform.unsafeArrayCopy(array, 0, copy, 0, size);
-      return copy;
-    }
-  }
-
-  /**
-   * Returns an immutable sorted set containing the given elements sorted by
-   * their natural ordering. When multiple elements are equivalent according to
-   * {@code compareTo()}, only the first one specified is included. To create a
-   * copy of a {@code SortedSet} that preserves the comparator, call
-   * {@link #copyOfSorted} instead. This method iterates over {@code elements}
-   * at most once.
-   *
-   * <p>Note that if {@code s} is a {@code Set<String>}, then
-   * {@code ImmutableSortedSet.copyOf(s)} returns an
-   * {@code ImmutableSortedSet<String>} containing each of the strings in
-   * {@code s}, while {@code ImmutableSortedSet.of(s)} returns an
-   * {@code ImmutableSortedSet<Set<String>>} containing one element (the given
-   * set itself).
-   *
-   * <p><b>Note:</b> Despite what the method name suggests, if {@code elements}
-   * is an {@code ImmutableSortedSet}, it may be returned instead of a copy.
-   *
-   * <p>This method is not type-safe, as it may be called on elements that are
-   * not mutually comparable.
-   *
-   * @throws ClassCastException if the elements are not mutually comparable
-   * @throws NullPointerException if any of {@code elements} is null
-   */
-  public static <E> ImmutableSortedSet<E> copyOf(
-      Iterable<? extends E> elements) {
-    // Hack around K not being a subtype of Comparable.
-    // Unsafe, see ImmutableSortedSetFauxverideShim.
-    @SuppressWarnings("unchecked")
-    Ordering<E> naturalOrder = (Ordering) Ordering.<Comparable>natural();
-    return copyOfInternal(naturalOrder, elements, false);
-  }
-
-  /**
-   * Returns an immutable sorted set containing the given elements sorted by
-   * their natural ordering. When multiple elements are equivalent according to
-   * {@code compareTo()}, only the first one specified is included.
-   *
-   * <p>This method is not type-safe, as it may be called on elements that are
-   * not mutually comparable.
-   *
-   * @throws ClassCastException if the elements are not mutually comparable
-   * @throws NullPointerException if any of {@code elements} is null
-   */
-  public static <E> ImmutableSortedSet<E> copyOf(
-      Iterator<? extends E> elements) {
-    // Hack around K not being a subtype of Comparable.
-    // Unsafe, see ImmutableSortedSetFauxverideShim.
-    @SuppressWarnings("unchecked")
-    Ordering<E> naturalOrder = (Ordering) Ordering.<Comparable>natural();
-    return copyOfInternal(naturalOrder, elements);
-  }
-
-  /**
-   * Returns an immutable sorted set containing the given elements sorted by
-   * the given {@code Comparator}. When multiple elements are equivalent
-   * according to {@code compare()}, only the first one specified is
-   * included. This method iterates over {@code elements} at most once.
-   *
-   * <p><b>Note:</b> Despite what the method name suggests, if {@code elements}
-   * is an {@code ImmutableSortedSet}, it may be returned instead of a copy.
-   *
-   * @throws NullPointerException if {@code comparator} or any of
-   *     {@code elements} is null
-   */
-  public static <E> ImmutableSortedSet<E> copyOf(
-      Comparator<? super E> comparator, Iterable<? extends E> elements) {
-    checkNotNull(comparator);
-    return copyOfInternal(comparator, elements, false);
-  }
-
-  /**
-   * Returns an immutable sorted set containing the given elements sorted by
-   * the given {@code Comparator}. When multiple elements are equivalent
-   * according to {@code compareTo()}, only the first one specified is
-   * included.
-   *
-   * @throws NullPointerException if {@code comparator} or any of
-   *     {@code elements} is null
-   */
-  public static <E> ImmutableSortedSet<E> copyOf(
-      Comparator<? super E> comparator, Iterator<? extends E> elements) {
-    checkNotNull(comparator);
-    return copyOfInternal(comparator, elements);
-  }
-
-  /**
-   * Returns an immutable sorted set containing the elements of a sorted set,
-   * sorted by the same {@code Comparator}. That behavior differs from
-   * {@link #copyOf(Iterable)}, which always uses the natural ordering of the
-   * elements.
-   *
-   * <p><b>Note:</b> Despite what the method name suggests, if {@code sortedSet}
-   * is an {@code ImmutableSortedSet}, it may be returned instead of a copy.
-   *
-   * @throws NullPointerException if any of {@code elements} is null
-   */
-  @SuppressWarnings("unchecked")
-  public static <E> ImmutableSortedSet<E> copyOfSorted(SortedSet<E> sortedSet) {
-    Comparator<? super E> comparator = sortedSet.comparator();
-    if (comparator == null) {
-      comparator = NATURAL_ORDER;
-    }
-    return copyOfInternal(comparator, sortedSet, true);
-  }
-
-  private static <E> ImmutableSortedSet<E> copyOfInternal(
-      Comparator<? super E> comparator, Iterable<? extends E> elements,
-      boolean fromSortedSet) {
-    boolean hasSameComparator
-        = fromSortedSet || hasSameComparator(elements, comparator);
-
-    if (hasSameComparator && (elements instanceof ImmutableSortedSet)) {
-      @SuppressWarnings("unchecked")
-      ImmutableSortedSet<E> result = (ImmutableSortedSet<E>) elements;
-      if (!result.hasPartialArray()) {
-        return result;
-      }
-    }
-
-    Object[] array = newObjectArray(elements);
-    if (array.length == 0) {
-      return emptySet(comparator);
-    }
-
-    for (Object e : array) {
-      checkNotNull(e);
-    }
-    if (!hasSameComparator) {
-      sort(array, comparator);
-      array = removeDupes(array, comparator);
-    }
-    return new RegularImmutableSortedSet<E>(array, comparator);
-  }
-
-  /** Simplified version of {@link Iterables#toArray} that is GWT safe. */
-  private static <T> Object[] newObjectArray(Iterable<T> iterable) {
-    Collection<T> collection = (iterable instanceof Collection)
-        ? (Collection<T>) iterable : Lists.newArrayList(iterable);
-    Object[] array = new Object[collection.size()];
-    return collection.toArray(array);
-  }
-
-  private static <E> ImmutableSortedSet<E> copyOfInternal(
-      Comparator<? super E> comparator, Iterator<? extends E> elements) {
-    if (!elements.hasNext()) {
-      return emptySet(comparator);
-    }
-    List<E> list = Lists.newArrayList();
-    while (elements.hasNext()) {
-      list.add(checkNotNull(elements.next()));
-    }
-    Object[] array = list.toArray();
-    sort(array, comparator);
-    array = removeDupes(array, comparator);
-    return new RegularImmutableSortedSet<E>(array, comparator);
-  }
-
-  /**
-   * Returns {@code true} if {@code elements} is a {@code SortedSet} that uses
-   * {@code comparator} to order its elements. Note that equivalent comparators
-   * may still return {@code false}, if {@code equals} doesn't consider them
-   * equal. If one comparator is {@code null} and the other is
-   * {@link Ordering#natural()}, this method returns {@code true}.
-   */
-  static boolean hasSameComparator(
-      Iterable<?> elements, Comparator<?> comparator) {
-    if (elements instanceof SortedSet) {
-      SortedSet<?> sortedSet = (SortedSet<?>) elements;
-      Comparator<?> comparator2 = sortedSet.comparator();
-      return (comparator2 == null)
-          ? comparator == Ordering.natural()
-          : comparator.equals(comparator2);
-    }
-    return false;
-  }
-
-  /**
-   * Returns a builder that creates immutable sorted sets with an explicit
-   * comparator. If the comparator has a more general type than the set being
-   * generated, such as creating a {@code SortedSet<Integer>} with a
-   * {@code Comparator<Number>}, use the {@link Builder} constructor instead.
-   *
-   * @throws NullPointerException if {@code comparator} is null
-   */
-  public static <E> Builder<E> orderedBy(Comparator<E> comparator) {
-    return new Builder<E>(comparator);
-  }
-
-  /**
-   * Returns a builder that creates immutable sorted sets whose elements are
-   * ordered by the reverse of their natural ordering.
-   *
-   * <p>Note: the type parameter {@code E} extends {@code Comparable<E>} rather
-   * than {@code Comparable<? super E>} as a workaround for javac <a
-   * href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6468354">bug
-   * 6468354</a>.
-   */
-  public static <E extends Comparable<E>> Builder<E> reverseOrder() {
-    return new Builder<E>(Ordering.natural().reverse());
-  }
-
-  /**
-   * Returns a builder that creates immutable sorted sets whose elements are
-   * ordered by their natural ordering. The sorted sets use {@link
-   * Ordering#natural()} as the comparator. This method provides more
-   * type-safety than {@link #builder}, as it can be called only for classes
-   * that implement {@link Comparable}.
-   *
-   * <p>Note: the type parameter {@code E} extends {@code Comparable<E>} rather
-   * than {@code Comparable<? super E>} as a workaround for javac <a
-   * href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6468354">bug
-   * 6468354</a>.
-   */
-  public static <E extends Comparable<E>> Builder<E> naturalOrder() {
-    return new Builder<E>(Ordering.natural());
-  }
-
-  /**
-   * A builder for creating immutable sorted set instances, especially
-   * {@code public static final} sets ("constant sets"), with a given
-   * comparator.
-   *
-   * <p>Example:
-   * <pre>{@code
-   *   public static final ImmutableSortedSet<Number> LUCKY_NUMBERS
-   *       = new ImmutableSortedSet.Builder<Number>(ODDS_FIRST_COMPARATOR)
-   *           .addAll(SINGLE_DIGIT_PRIMES)
-   *           .add(42)
-   *           .build();}</pre>
-   *
-   * <p>Builder instances can be reused - it is safe to call {@link #build}
-   * multiple times to build multiple sets in series. Each set
-   * is a superset of the set created before it.
-   */
-  public static final class Builder<E> extends ImmutableSet.Builder<E> {
-    private final Comparator<? super E> comparator;
-
-    /**
-     * Creates a new builder. The returned builder is equivalent to the builder
-     * generated by {@link ImmutableSortedSet#orderedBy}.
-     */
-    public Builder(Comparator<? super E> comparator) {
-      this.comparator = checkNotNull(comparator);
-    }
-
-    /**
-     * Adds {@code element} to the {@code ImmutableSortedSet}.  If the
-     * {@code ImmutableSortedSet} already contains {@code element}, then
-     * {@code add} has no effect. (only the previously added element
-     * is retained).
-     *
-     * @param element the element to add
-     * @return this {@code Builder} object
-     * @throws NullPointerException if {@code element} is null
-     */
-    @Override public Builder<E> add(E element) {
-      super.add(element);
-      return this;
-    }
-
-    /**
-     * Adds each element of {@code elements} to the {@code ImmutableSortedSet},
-     * ignoring duplicate elements (only the first duplicate element is added).
-     *
-     * @param elements the elements to add
-     * @return this {@code Builder} object
-     * @throws NullPointerException if {@code elements} contains a null element
-     */
-    @Override public Builder<E> add(E... elements) {
-      super.add(elements);
-      return this;
-    }
-
-    /**
-     * Adds each element of {@code elements} to the {@code ImmutableSortedSet},
-     * ignoring duplicate elements (only the first duplicate element is added).
-     *
-     * @param elements the elements to add to the {@code ImmutableSortedSet}
-     * @return this {@code Builder} object
-     * @throws NullPointerException if {@code elements} contains a null element
-     */
-    @Override public Builder<E> addAll(Iterable<? extends E> elements) {
-      super.addAll(elements);
-      return this;
-    }
-
-    /**
-     * Adds each element of {@code elements} to the {@code ImmutableSortedSet},
-     * ignoring duplicate elements (only the first duplicate element is added).
-     *
-     * @param elements the elements to add to the {@code ImmutableSortedSet}
-     * @return this {@code Builder} object
-     * @throws NullPointerException if {@code elements} contains a null element
-     */
-    @Override public Builder<E> addAll(Iterator<? extends E> elements) {
-      super.addAll(elements);
-      return this;
-    }
-
-    /**
-     * Returns a newly-created {@code ImmutableSortedSet} based on the contents
-     * of the {@code Builder} and its comparator.
-     */
-    @Override public ImmutableSortedSet<E> build() {
-      return copyOfInternal(comparator, contents.iterator());
-    }
-  }
-
-  int unsafeCompare(Object a, Object b) {
-    return unsafeCompare(comparator, a, b);
-  }
-
-  static int unsafeCompare(
-      Comparator<?> comparator, Object a, Object b) {
-    // Pretend the comparator can compare anything. If it turns out it can't
-    // compare a and b, we should get a CCE on the subsequent line. Only methods
-    // that are spec'd to throw CCE should call this.
-    @SuppressWarnings("unchecked")
-    Comparator<Object> unsafeComparator = (Comparator<Object>) comparator;
-    return unsafeComparator.compare(a, b);
-  }
-
-  final transient Comparator<? super E> comparator;
-
-  ImmutableSortedSet(Comparator<? super E> comparator) {
-    this.comparator = comparator;
-  }
-
-  /**
-   * Returns the comparator that orders the elements, which is
-   * {@link Ordering#natural()} when the natural ordering of the
-   * elements is used. Note that its behavior is not consistent with
-   * {@link SortedSet#comparator()}, which returns {@code null} to indicate
-   * natural ordering.
-   */
-  public Comparator<? super E> comparator() {
-    return comparator;
-  }
-
-  /**
-   * {@inheritDoc}
-   *
-   * <p>This method returns a serializable {@code ImmutableSortedSet}.
-   *
-   * <p>The {@link SortedSet#headSet} documentation states that a subset of a
-   * subset throws an {@link IllegalArgumentException} if passed a
-   * {@code toElement} greater than an earlier {@code toElement}. However, this
-   * method doesn't throw an exception in that situation, but instead keeps the
-   * original {@code toElement}.
-   */
-  public ImmutableSortedSet<E> headSet(E toElement) {
-    return headSetImpl(checkNotNull(toElement));
-  }
-
-  /**
-   * {@inheritDoc}
-   *
-   * <p>This method returns a serializable {@code ImmutableSortedSet}.
-   *
-   * <p>The {@link SortedSet#subSet} documentation states that a subset of a
-   * subset throws an {@link IllegalArgumentException} if passed a
-   * {@code fromElement} smaller than an earlier {@code fromElement}. However,
-   * this method doesn't throw an exception in that situation, but instead keeps
-   * the original {@code fromElement}. Similarly, this method keeps the
-   * original {@code toElement}, instead of throwing an exception, if passed a
-   * {@code toElement} greater than an earlier {@code toElement}.
-   */
-  public ImmutableSortedSet<E> subSet(E fromElement, E toElement) {
-    checkNotNull(fromElement);
-    checkNotNull(toElement);
-    checkArgument(comparator.compare(fromElement, toElement) <= 0);
-    return subSetImpl(fromElement, toElement);
-  }
-
-  /**
-   * {@inheritDoc}
-   *
-   * <p>This method returns a serializable {@code ImmutableSortedSet}.
-   *
-   * <p>The {@link SortedSet#tailSet} documentation states that a subset of a
-   * subset throws an {@link IllegalArgumentException} if passed a
-   * {@code fromElement} smaller than an earlier {@code fromElement}. However,
-   * this method doesn't throw an exception in that situation, but instead keeps
-   * the original {@code fromElement}.
-   */
-  public ImmutableSortedSet<E> tailSet(E fromElement) {
-    return tailSetImpl(checkNotNull(fromElement));
-  }
-
-  /*
-   * These methods perform most headSet, subSet, and tailSet logic, besides
-   * parameter validation.
-   */
-  abstract ImmutableSortedSet<E> headSetImpl(E toElement);
-  abstract ImmutableSortedSet<E> subSetImpl(E fromElement, E toElement);
-  abstract ImmutableSortedSet<E> tailSetImpl(E fromElement);
-
-  /** Returns whether the elements are stored in a subset of a larger array. */
-  abstract boolean hasPartialArray();
-
-  /**
-   * Returns the position of an element within the set, or -1 if not present.
-   */
-  abstract int indexOf(Object target);
-
-  /*
-   * This class is used to serialize all ImmutableSortedSet instances,
-   * regardless of implementation type. It captures their "logical contents"
-   * only. This is necessary to ensure that the existence of a particular
-   * implementation type is an implementation detail.
-   */
-  private static class SerializedForm<E> implements Serializable {
-    final Comparator<? super E> comparator;
-    final Object[] elements;
-
-    public SerializedForm(Comparator<? super E> comparator, Object[] elements) {
-      this.comparator = comparator;
-      this.elements = elements;
-    }
-
-    @SuppressWarnings("unchecked")
-    Object readResolve() {
-      return new Builder<E>(comparator).add((E[]) elements).build();
-    }
-
-    private static final long serialVersionUID = 0;
-  }
-
-  private void readObject(ObjectInputStream stream)
-      throws InvalidObjectException {
-    throw new InvalidObjectException("Use SerializedForm");
-  }
-
-  @Override Object writeReplace() {
-    return new SerializedForm<E>(comparator, toArray());
-  }
-}
diff --git a/src/com/google/common/collect/ImmutableSortedSetFauxverideShim.java b/src/com/google/common/collect/ImmutableSortedSetFauxverideShim.java
deleted file mode 100644
index 3b42eb5..0000000
--- a/src/com/google/common/collect/ImmutableSortedSetFauxverideShim.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Copyright (C) 2009 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-
-/**
- * "Overrides" the {@link ImmutableSet} static methods that lack
- * {@link ImmutableSortedSet} equivalents with deprecated, exception-throwing
- * versions. This prevents accidents like the following:<pre>   {@code
- *
- *   List<Object> objects = ...;
- *   // Sort them:
- *   Set<Object> sorted = ImmutableSortedSet.copyOf(objects);
- *   // BAD CODE! The returned set is actually an unsorted ImmutableSet!}</pre>
- *
- * <p>While we could put the overrides in {@link ImmutableSortedSet} itself, it
- * seems clearer to separate these "do not call" methods from those intended for
- * normal use.
- *
- * @author Chris Povirk
- */
-@GwtCompatible
-abstract class ImmutableSortedSetFauxverideShim<E> extends ImmutableSet<E> {
-  /**
-   * Not supported. Use {@link ImmutableSortedSet#naturalOrder}, which offers
-   * better type-safety, instead. This method exists only to hide
-   * {@link ImmutableSet#builder} from consumers of {@code ImmutableSortedSet}.
-   *
-   * @throws UnsupportedOperationException always
-   * @deprecated Use {@link ImmutableSortedSet#naturalOrder}, which offers
-   *     better type-safety.
-   */
-  @Deprecated public static <E> ImmutableSortedSet.Builder<E> builder() {
-    throw new UnsupportedOperationException();
-  }
-
-  /**
-   * Not supported. <b>You are attempting to create a set that may contain a
-   * non-{@code Comparable} element.</b> Proper calls will resolve to the
-   * version in {@code ImmutableSortedSet}, not this dummy version.
-   *
-   * @throws UnsupportedOperationException always
-   * @deprecated <b>Pass a parameter of type {@code Comparable} to use {@link
-   *     ImmutableSortedSet#of(Comparable)}.</b>
-   */
-  @Deprecated public static <E> ImmutableSortedSet<E> of(E element) {
-    throw new UnsupportedOperationException();
-  }
-
-  /**
-   * Not supported. <b>You are attempting to create a set that may contain a
-   * non-{@code Comparable} element.</b> Proper calls will resolve to the
-   * version in {@code ImmutableSortedSet}, not this dummy version.
-   *
-   * @throws UnsupportedOperationException always
-   * @deprecated <b>Pass the parameters of type {@code Comparable} to use {@link
-   *     ImmutableSortedSet#of(Comparable, Comparable)}.</b>
-   */
-  @Deprecated public static <E> ImmutableSortedSet<E> of(E e1, E e2) {
-    throw new UnsupportedOperationException();
-  }
-
-  /**
-   * Not supported. <b>You are attempting to create a set that may contain a
-   * non-{@code Comparable} element.</b> Proper calls will resolve to the
-   * version in {@code ImmutableSortedSet}, not this dummy version.
-   *
-   * @throws UnsupportedOperationException always
-   * @deprecated <b>Pass the parameters of type {@code Comparable} to use {@link
-   *     ImmutableSortedSet#of(Comparable, Comparable, Comparable)}.</b>
-   */
-  @Deprecated public static <E> ImmutableSortedSet<E> of(E e1, E e2, E e3) {
-    throw new UnsupportedOperationException();
-  }
-
-  /**
-   * Not supported. <b>You are attempting to create a set that may contain a
-   * non-{@code Comparable} element.</b> Proper calls will resolve to the
-   * version in {@code ImmutableSortedSet}, not this dummy version.
-   *
-   * @throws UnsupportedOperationException always
-   * @deprecated <b>Pass the parameters of type {@code Comparable} to use {@link
-   *     ImmutableSortedSet#of(Comparable, Comparable, Comparable, Comparable)}.
-   * </b>
-   */
-  @Deprecated public static <E> ImmutableSortedSet<E> of(
-      E e1, E e2, E e3, E e4) {
-    throw new UnsupportedOperationException();
-  }
-
-  /**
-   * Not supported. <b>You are attempting to create a set that may contain a
-   * non-{@code Comparable} element.</b> Proper calls will resolve to the
-   * version in {@code ImmutableSortedSet}, not this dummy version.
-   *
-   * @throws UnsupportedOperationException always
-   * @deprecated <b>Pass the parameters of type {@code Comparable} to use {@link
-   *     ImmutableSortedSet#of(
-   *     Comparable, Comparable, Comparable, Comparable, Comparable)}. </b>
-   */
-  @Deprecated public static <E> ImmutableSortedSet<E> of(
-      E e1, E e2, E e3, E e4, E e5) {
-    throw new UnsupportedOperationException();
-  }
-
-  /**
-   * Not supported. <b>You are attempting to create a set that may contain
-   * non-{@code Comparable} elements.</b> Proper calls will resolve to the
-   * version in {@code ImmutableSortedSet}, not this dummy version.
-   *
-   * @throws UnsupportedOperationException always
-   * @deprecated <b>Pass parameters of type {@code Comparable} to use {@link
-   *     ImmutableSortedSet#of(Comparable[])}.</b>
-   */
-  @Deprecated public static <E> ImmutableSortedSet<E> of(E... elements) {
-    throw new UnsupportedOperationException();
-  }
-
-  /*
-   * We would like to include an unsupported "<E> copyOf(Iterable<E>)" here,
-   * providing only the properly typed
-   * "<E extends Comparable<E>> copyOf(Iterable<E>)" in ImmutableSortedSet (and
-   * likewise for the Iterator equivalent). However, due to a change in Sun's
-   * interpretation of the JLS (as described at
-   * http://bugs.sun.com/view_bug.do?bug_id=6182950), the OpenJDK 7 compiler
-   * available as of this writing rejects our attempts. To maintain
-   * compatibility with that version and with any other compilers that interpret
-   * the JLS similarly, there is no definition of copyOf() here, and the
-   * definition in ImmutableSortedSet matches that in ImmutableSet.
-   * 
-   * The result is that ImmutableSortedSet.copyOf() may be called on
-   * non-Comparable elements. We have not discovered a better solution. In
-   * retrospect, the static factory methods should have gone in a separate class
-   * so that ImmutableSortedSet wouldn't "inherit" too-permissive factory
-   * methods from ImmutableSet.
-   */
-}
diff --git a/src/com/google/common/collect/Iterables.java b/src/com/google/common/collect/Iterables.java
deleted file mode 100644
index c7b0edc..0000000
--- a/src/com/google/common/collect/Iterables.java
+++ /dev/null
@@ -1,758 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-import com.google.common.annotations.GwtIncompatible;
-import com.google.common.base.Function;
-import com.google.common.base.Objects;
-import com.google.common.base.Preconditions;
-import com.google.common.base.Predicate;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.ListIterator;
-import java.util.NoSuchElementException;
-import java.util.RandomAccess;
-import java.util.Set;
-import java.util.SortedSet;
-
-import javax.annotation.Nullable;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
-
-/**
- * This class contains static utility methods that operate on or return objects
- * of type {@code Iterable}. Except as noted, each method has a corresponding
- * {@link Iterator}-based method in the {@link Iterators} class.
- *
- * @author Kevin Bourrillion
- * @author Jared Levy
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible
-public final class Iterables {
-  private Iterables() {}
-
-  /** Returns an unmodifiable view of {@code iterable}. */
-  public static <T> Iterable<T> unmodifiableIterable(final Iterable<T> iterable)
-  {
-    checkNotNull(iterable);
-    return new Iterable<T>() {
-      public Iterator<T> iterator() {
-        return Iterators.unmodifiableIterator(iterable.iterator());
-      }
-      @Override public String toString() {
-        return iterable.toString();
-      }
-      // no equals and hashCode; it would break the contract!
-    };
-  }
-
-  /**
-   * Returns the number of elements in {@code iterable}.
-   */
-  public static int size(Iterable<?> iterable) {
-    return (iterable instanceof Collection)
-        ? ((Collection<?>) iterable).size()
-        : Iterators.size(iterable.iterator());
-  }
-
-  /**
-   * Returns {@code true} if {@code iterable} contains {@code element}; that is,
-   * any object for while {@code equals(element)} is true.
-   */
-  public static boolean contains(Iterable<?> iterable, @Nullable Object element)
-  {
-    if (iterable instanceof Collection) {
-      Collection<?> collection = (Collection<?>) iterable;
-      try {
-        return collection.contains(element);
-      } catch (NullPointerException e) {
-        return false;
-      } catch (ClassCastException e) {
-        return false;
-      }
-    }
-    return Iterators.contains(iterable.iterator(), element);
-  }
-
-  /**
-   * Removes, from an iterable, every element that belongs to the provided
-   * collection.
-   *
-   * <p>This method calls {@link Collection#removeAll} if {@code iterable} is a
-   * collection, and {@link Iterators#removeAll} otherwise.
-   *
-   * @param removeFrom the iterable to (potentially) remove elements from
-   * @param elementsToRemove the elements to remove
-   * @return {@code true} if any elements are removed from {@code iterable}
-   */
-  public static boolean removeAll(
-      Iterable<?> removeFrom, Collection<?> elementsToRemove) {
-    return (removeFrom instanceof Collection)
-        ? ((Collection<?>) removeFrom).removeAll(checkNotNull(elementsToRemove))
-        : Iterators.removeAll(removeFrom.iterator(), elementsToRemove);
-  }
-
-  /**
-   * Removes, from an iterable, every element that does not belong to the
-   * provided collection.
-   *
-   * <p>This method calls {@link Collection#retainAll} if {@code iterable} is a
-   * collection, and {@link Iterators#retainAll} otherwise.
-   *
-   * @param removeFrom the iterable to (potentially) remove elements from
-   * @param elementsToRetain the elements to retain
-   * @return {@code true} if any elements are removed from {@code iterable}
-   */
-  public static boolean retainAll(
-      Iterable<?> removeFrom, Collection<?> elementsToRetain) {
-    return (removeFrom instanceof Collection)
-        ? ((Collection<?>) removeFrom).retainAll(checkNotNull(elementsToRetain))
-        : Iterators.retainAll(removeFrom.iterator(), elementsToRetain);
-  }
-
-  /**
-   * Removes, from an iterable, every element that satisfies the provided
-   * predicate.
-   *
-   * @param removeFrom the iterable to (potentially) remove elements from
-   * @param predicate a predicate that determines whether an element should
-   *     be removed
-   * @return {@code true} if any elements were removed from the iterable
-   *
-   * @throws UnsupportedOperationException if the iterable does not support
-   *     {@code remove()}.
-   * @since 2010.01.04 <b>tentative</b>
-   */
-  public static <T> boolean removeIf(
-      Iterable<T> removeFrom, Predicate<? super T> predicate) {
-    if (removeFrom instanceof RandomAccess && removeFrom instanceof List) {
-      return removeIfFromRandomAccessList(
-          (List<T>) removeFrom, checkNotNull(predicate));
-    }
-    return Iterators.removeIf(removeFrom.iterator(), predicate);
-  }
-
-  private static <T> boolean removeIfFromRandomAccessList(
-      List<T> list, Predicate<? super T> predicate) {
-    int from = 0;
-    int to = 0;
-
-    for (; from < list.size(); from++) {
-      T element = list.get(from);
-      if (!predicate.apply(element)) {
-        if (from > to) {
-          list.set(to, element);
-        }
-        to++;
-      }
-    }
-
-    // Clear the tail of any remaining items
-    // Note: hand-written GWT-compatible version of
-    // list.subList(to, list.size()).clear();
-    ListIterator<T> iter = list.listIterator(list.size());
-    for (int idx = from - to; idx > 0; idx--) {
-      iter.previous();
-      iter.remove();
-    }
-
-    return from != to;
-  }
-
-  /**
-   * Determines whether two iterables contain equal elements in the same order.
-   * More specifically, this method returns {@code true} if {@code iterable1}
-   * and {@code iterable2} contain the same number of elements and every element
-   * of {@code iterable1} is equal to the corresponding element of
-   * {@code iterable2}.
-   */
-  public static boolean elementsEqual(
-      Iterable<?> iterable1, Iterable<?> iterable2) {
-    return Iterators.elementsEqual(iterable1.iterator(), iterable2.iterator());
-  }
-
-  /**
-   * Returns a string representation of {@code iterable}, with the format
-   * {@code [e1, e2, ..., en]}.
-   */
-  public static String toString(Iterable<?> iterable) {
-    return Iterators.toString(iterable.iterator());
-  }
-
-  /**
-   * Returns the single element contained in {@code iterable}.
-   *
-   * @throws NoSuchElementException if the iterable is empty
-   * @throws IllegalArgumentException if the iterable contains multiple
-   *     elements
-   */
-  public static <T> T getOnlyElement(Iterable<T> iterable) {
-    return Iterators.getOnlyElement(iterable.iterator());
-  }
-
-  /**
-   * Returns the single element contained in {@code iterable}, or {@code
-   * defaultValue} if the iterable is empty.
-   *
-   * @throws IllegalArgumentException if the iterator contains multiple
-   *     elements
-   */
-  public static <T> T getOnlyElement(
-      Iterable<T> iterable, @Nullable T defaultValue) {
-    return Iterators.getOnlyElement(iterable.iterator(), defaultValue);
-  }
-
-  /**
-   * Copies an iterable's elements into an array.
-   *
-   * @param iterable the iterable to copy
-   * @param type the type of the elements
-   * @return a newly-allocated array into which all the elements of the iterable
-   *     have been copied
-   */
-  @GwtIncompatible("Array.newInstance(Class, int)")
-  public static <T> T[] toArray(Iterable<? extends T> iterable, Class<T> type) {
-    @SuppressWarnings("unchecked") // bugs.sun.com/view_bug.do?bug_id=6558557
-    Collection<? extends T> collection = (iterable instanceof Collection)
-        ? (Collection<? extends T>) iterable
-        : Lists.newArrayList(iterable);
-    T[] array = ObjectArrays.newArray(type, collection.size());
-    return collection.toArray(array);
-  }
-
-  /**
-   * Adds all elements in {@code iterable} to {@code collection}.
-   *
-   * @return {@code true} if {@code collection} was modified as a result of this
-   *     operation.
-   */
-  public static <T> boolean addAll(
-      Collection<T> addTo, Iterable<? extends T> elementsToAdd) {
-    if (elementsToAdd instanceof Collection) {
-      @SuppressWarnings("unchecked")
-      Collection<? extends T> c = (Collection<? extends T>) elementsToAdd;
-      return addTo.addAll(c);
-    }
-    return Iterators.addAll(addTo, elementsToAdd.iterator());
-  }
-
-  /**
-   * Returns the number of elements in the specified iterable that equal the
-   * specified object.
-   *
-   * @see Collections#frequency
-   */
-  public static int frequency(Iterable<?> iterable, @Nullable Object element) {
-    if ((iterable instanceof Multiset)) {
-      return ((Multiset<?>) iterable).count(element);
-    }
-    if ((iterable instanceof Set)) {
-      return ((Set<?>) iterable).contains(element) ? 1 : 0;
-    }
-    return Iterators.frequency(iterable.iterator(), element);
-  }
-
-  /**
-   * Returns an iterable whose iterators cycle indefinitely over the elements of
-   * {@code iterable}.
-   *
-   * <p>That iterator supports {@code remove()} if {@code iterable.iterator()}
-   * does. After {@code remove()} is called, subsequent cycles omit the removed
-   * element, which is no longer in {@code iterable}. The iterator's
-   * {@code hasNext()} method returns {@code true} until {@code iterable} is
-   * empty.
-   *
-   * <p><b>Warning:</b> Typical uses of the resulting iterator may produce an
-   * infinite loop. You should use an explicit {@code break} or be certain that
-   * you will eventually remove all the elements.
-   *
-   * <p>To cycle over the iterable {@code n} times, use the following:
-   * {@code Iterables.concat(Collections.nCopies(n, iterable))}
-   */
-  public static <T> Iterable<T> cycle(final Iterable<T> iterable) {
-    checkNotNull(iterable);
-    return new Iterable<T>() {
-      public Iterator<T> iterator() {
-        return Iterators.cycle(iterable);
-      }
-      @Override public String toString() {
-        return iterable.toString() + " (cycled)";
-      }
-    };
-  }
-
-  /**
-   * Returns an iterable whose iterators cycle indefinitely over the provided
-   * elements.
-   *
-   * <p>After {@code remove} is invoked on a generated iterator, the removed
-   * element will no longer appear in either that iterator or any other iterator
-   * created from the same source iterable. That is, this method behaves exactly
-   * as {@code Iterables.cycle(Lists.newArrayList(elements))}. The iterator's
-   * {@code hasNext} method returns {@code true} until all of the original
-   * elements have been removed.
-   *
-   * <p><b>Warning:</b> Typical uses of the resulting iterator may produce an
-   * infinite loop. You should use an explicit {@code break} or be certain that
-   * you will eventually remove all the elements.
-   *
-   * <p>To cycle over the elements {@code n} times, use the following:
-   * {@code Iterables.concat(Collections.nCopies(n, Arrays.asList(elements)))}
-   */
-  public static <T> Iterable<T> cycle(T... elements) {
-    return cycle(Lists.newArrayList(elements));
-  }
-
-  /**
-   * Combines two iterables into a single iterable. The returned iterable has an
-   * iterator that traverses the elements in {@code a}, followed by the elements
-   * in {@code b}. The source iterators are not polled until necessary.
-   *
-   * <p>The returned iterable's iterator supports {@code remove()} when the
-   * corresponding input iterator supports it.
-   */
-  @SuppressWarnings("unchecked")
-  public static <T> Iterable<T> concat(
-      Iterable<? extends T> a, Iterable<? extends T> b) {
-    checkNotNull(a);
-    checkNotNull(b);
-    return concat(Arrays.asList(a, b));
-  }
-
-  /**
-   * Combines three iterables into a single iterable. The returned iterable has
-   * an iterator that traverses the elements in {@code a}, followed by the
-   * elements in {@code b}, followed by the elements in {@code c}. The source
-   * iterators are not polled until necessary.
-   *
-   * <p>The returned iterable's iterator supports {@code remove()} when the
-   * corresponding input iterator supports it.
-   */
-  @SuppressWarnings("unchecked")
-  public static <T> Iterable<T> concat(Iterable<? extends T> a,
-      Iterable<? extends T> b, Iterable<? extends T> c) {
-    checkNotNull(a);
-    checkNotNull(b);
-    checkNotNull(c);
-    return concat(Arrays.asList(a, b, c));
-  }
-
-  /**
-   * Combines four iterables into a single iterable. The returned iterable has
-   * an iterator that traverses the elements in {@code a}, followed by the
-   * elements in {@code b}, followed by the elements in {@code c}, followed by
-   * the elements in {@code d}. The source iterators are not polled until
-   * necessary.
-   *
-   * <p>The returned iterable's iterator supports {@code remove()} when the
-   * corresponding input iterator supports it.
-   */
-  @SuppressWarnings("unchecked")
-  public static <T> Iterable<T> concat(Iterable<? extends T> a,
-      Iterable<? extends T> b, Iterable<? extends T> c,
-      Iterable<? extends T> d) {
-    checkNotNull(a);
-    checkNotNull(b);
-    checkNotNull(c);
-    checkNotNull(d);
-    return concat(Arrays.asList(a, b, c, d));
-  }
-
-  /**
-   * Combines multiple iterables into a single iterable. The returned iterable
-   * has an iterator that traverses the elements of each iterable in
-   * {@code inputs}. The input iterators are not polled until necessary.
-   *
-   * <p>The returned iterable's iterator supports {@code remove()} when the
-   * corresponding input iterator supports it.
-   *
-   * @throws NullPointerException if any of the provided iterables is null
-   */
-  public static <T> Iterable<T> concat(Iterable<? extends T>... inputs) {
-    return concat(ImmutableList.of(inputs));
-  }
-
-  /**
-   * Combines multiple iterables into a single iterable. The returned iterable
-   * has an iterator that traverses the elements of each iterable in
-   * {@code inputs}. The input iterators are not polled until necessary.
-   *
-   * <p>The returned iterable's iterator supports {@code remove()} when the
-   * corresponding input iterator supports it. The methods of the returned
-   * iterable may throw {@code NullPointerException} if any of the input
-   * iterators are null.
-   */
-  public static <T> Iterable<T> concat(
-      Iterable<? extends Iterable<? extends T>> inputs) {
-    /*
-     * Hint: if you let A represent Iterable<? extends T> and B represent
-     * Iterator<? extends T>, then this Function would look simply like:
-     *
-     *   Function<A, B> function = new Function<A, B> {
-     *     public B apply(A from) {
-     *       return from.iterator();
-     *     }
-     *   }
-     *
-     * TODO: there may be a better way to do this.
-     */
-
-    Function<Iterable<? extends T>, Iterator<? extends T>> function
-        = new Function<Iterable<? extends T>, Iterator<? extends T>>() {
-      public Iterator<? extends T> apply(Iterable<? extends T> from) {
-        return from.iterator();
-      }
-    };
-    final Iterable<Iterator<? extends T>> iterators
-        = transform(inputs, function);
-    return new IterableWithToString<T>() {
-      public Iterator<T> iterator() {
-        return Iterators.concat(iterators.iterator());
-      }
-    };
-  }
-
-  /**
-   * Divides an iterable into unmodifiable sublists of the given size (the final
-   * iterable may be smaller). For example, partitioning an iterable containing
-   * {@code [a, b, c, d, e]} with a partition size of 3 yields {@code
-   * [[a, b, c], [d, e]]} -- an outer iterable containing two inner lists of
-   * three and two elements, all in the original order.
-   *
-   * <p>Iterators returned by the returned iterable do not support the {@link
-   * Iterator#remove()} method. The returned lists implement {@link
-   * RandomAccess}, whether or not the input list does.
-   *
-   * <p><b>Note:</b> if {@code iterable} is a {@link List}, use {@link
-   * Lists#partition(List, int)} instead.
-   *
-   * @param iterable the iterable to return a partitioned view of
-   * @param size the desired size of each partition (the last may be smaller)
-   * @return an iterable of unmodifiable lists containing the elements of {@code
-   *     iterable} divided into partitions
-   * @throws IllegalArgumentException if {@code size} is nonpositive
-   */
-  public static <T> Iterable<List<T>> partition(
-      final Iterable<T> iterable, final int size) {
-    checkNotNull(iterable);
-    checkArgument(size > 0);
-    return new IterableWithToString<List<T>>() {
-      public Iterator<List<T>> iterator() {
-        return Iterators.partition(iterable.iterator(), size);
-      }
-    };
-  }
-
-  /**
-   * Divides an iterable into unmodifiable sublists of the given size, padding
-   * the final iterable with null values if necessary. For example, partitioning
-   * an iterable containing {@code [a, b, c, d, e]} with a partition size of 3
-   * yields {@code [[a, b, c], [d, e, null]]} -- an outer iterable containing
-   * two inner lists of three elements each, all in the original order.
-   *
-   * <p>Iterators returned by the returned iterable do not support the {@link
-   * Iterator#remove()} method.
-   *
-   * @param iterable the iterable to return a partitioned view of
-   * @param size the desired size of each partition
-   * @return an iterable of unmodifiable lists containing the elements of {@code
-   *     iterable} divided into partitions (the final iterable may have
-   *     trailing null elements)
-   * @throws IllegalArgumentException if {@code size} is nonpositive
-   */
-  public static <T> Iterable<List<T>> paddedPartition(
-      final Iterable<T> iterable, final int size) {
-    checkNotNull(iterable);
-    checkArgument(size > 0);
-    return new IterableWithToString<List<T>>() {
-      public Iterator<List<T>> iterator() {
-        return Iterators.paddedPartition(iterable.iterator(), size);
-      }
-    };
-  }
-
-  /**
-   * Returns the elements of {@code unfiltered} that satisfy a predicate. The
-   * resulting iterable's iterator does not support {@code remove()}.
-   */
-  public static <T> Iterable<T> filter(
-      final Iterable<T> unfiltered, final Predicate<? super T> predicate) {
-    checkNotNull(unfiltered);
-    checkNotNull(predicate);
-    return new IterableWithToString<T>() {
-      public Iterator<T> iterator() {
-        return Iterators.filter(unfiltered.iterator(), predicate);
-      }
-    };
-  }
-
-  /**
-   * Returns all instances of class {@code type} in {@code unfiltered}. The
-   * returned iterable has elements whose class is {@code type} or a subclass of
-   * {@code type}. The returned iterable's iterator does not support
-   * {@code remove()}.
-   *
-   * @param unfiltered an iterable containing objects of any type
-   * @param type the type of elements desired
-   * @return an unmodifiable iterable containing all elements of the original
-   *     iterable that were of the requested type
-   */
-  @GwtIncompatible("Class.isInstance")
-  public static <T> Iterable<T> filter(
-      final Iterable<?> unfiltered, final Class<T> type) {
-    checkNotNull(unfiltered);
-    checkNotNull(type);
-    return new IterableWithToString<T>() {
-      public Iterator<T> iterator() {
-        return Iterators.filter(unfiltered.iterator(), type);
-      }
-    };
-  }
-
-  /**
-   * Returns {@code true} if one or more elements in {@code iterable} satisfy
-   * the predicate.
-   */
-  public static <T> boolean any(
-      Iterable<T> iterable, Predicate<? super T> predicate) {
-    return Iterators.any(iterable.iterator(), predicate);
-  }
-
-  /**
-   * Returns {@code true} if every element in {@code iterable} satisfies the
-   * predicate. If {@code iterable} is empty, {@code true} is returned.
-   */
-  public static <T> boolean all(
-      Iterable<T> iterable, Predicate<? super T> predicate) {
-    return Iterators.all(iterable.iterator(), predicate);
-  }
-
-  /**
-   * Returns the first element in {@code iterable} that satisfies the given
-   * predicate.
-   *
-   * @throws NoSuchElementException if no element in {@code iterable} matches
-   *     the given predicate
-   */
-  public static <T> T find(Iterable<T> iterable,
-      Predicate<? super T> predicate) {
-    return Iterators.find(iterable.iterator(), predicate);
-  }
-
-  /**
-   * Returns the index in {@code iterable} of the first element that satisfies
-   * the provided {@code predicate}, or {@code -1} if the Iterable has no such
-   * elements.
-   *
-   * <p>More formally, returns the lowest index {@code i} such that
-   * {@code predicate.apply(Iterables.get(iterable, i))} is {@code true} or
-   * {@code -1} if there is no such index.
-   *
-   * @since 2010.01.04 <b>tentative</b>
-   */
-  public static <T> int indexOf(
-      Iterable<T> iterable, Predicate<? super T> predicate) {
-    return Iterators.indexOf(iterable.iterator(), predicate);
-  }
-
-  /**
-   * Returns an iterable that applies {@code function} to each element of {@code
-   * fromIterable}.
-   *
-   * <p>The returned iterable's iterator supports {@code remove()} if the
-   * provided iterator does. After a successful {@code remove()} call,
-   * {@code fromIterable} no longer contains the corresponding element.
-   */
-  public static <F, T> Iterable<T> transform(final Iterable<F> fromIterable,
-      final Function<? super F, ? extends T> function) {
-    checkNotNull(fromIterable);
-    checkNotNull(function);
-    return new IterableWithToString<T>() {
-      public Iterator<T> iterator() {
-        return Iterators.transform(fromIterable.iterator(), function);
-      }
-    };
-  }
-
-  /**
-   * Returns the element at the specified position in an iterable.
-   *
-   * @param position position of the element to return
-   * @return the element at the specified position in {@code iterable}
-   * @throws IndexOutOfBoundsException if {@code position} is negative or
-   *     greater than or equal to the size of {@code iterable}
-   */
-  public static <T> T get(Iterable<T> iterable, int position) {
-    checkNotNull(iterable);
-    if (iterable instanceof List) {
-      return ((List<T>) iterable).get(position);
-    }
-
-    if (iterable instanceof Collection) {
-      // Can check both ends
-      Collection<T> collection = (Collection<T>) iterable;
-      Preconditions.checkElementIndex(position, collection.size());
-    } else {
-      // Can only check the lower end
-      if (position < 0) {
-        throw new IndexOutOfBoundsException(
-            "position cannot be negative: " + position);
-      }
-    }
-    return Iterators.get(iterable.iterator(), position);
-  }
-
-  /**
-   * Returns the last element of {@code iterable}.
-   *
-   * @return the last element of {@code iterable}
-   * @throws NoSuchElementException if the iterable has no elements
-   */
-  public static <T> T getLast(Iterable<T> iterable) {
-    if (iterable instanceof List) {
-      List<T> list = (List<T>) iterable;
-      // TODO: Support a concurrent list whose size changes while this method
-      // is running.
-      if (list.isEmpty()) {
-        throw new NoSuchElementException();
-      }
-      return list.get(list.size() - 1);
-    }
-
-    if (iterable instanceof SortedSet) {
-      SortedSet<T> sortedSet = (SortedSet<T>) iterable;
-      return sortedSet.last();
-    }
-
-    return Iterators.getLast(iterable.iterator());
-  }
-
-  /**
-   * Returns a view of the supplied iterable that wraps each generated
-   * {@link Iterator} through {@link Iterators#consumingIterator(Iterator)}.
-   *
-   * @param iterable the iterable to wrap
-   * @return a view of the supplied iterable that wraps each generated iterator
-   *     through {@link Iterators#consumingIterator(Iterator)}
-   *
-   * @see Iterators#consumingIterator(Iterator)
-   * @since 2010.01.04 <b>tentative</b>
-   */
-  public static <T> Iterable<T> consumingIterable(final Iterable<T> iterable) {
-    checkNotNull(iterable);
-    return new Iterable<T>() {
-      public Iterator<T> iterator() {
-        return Iterators.consumingIterator(iterable.iterator());
-      }
-    };
-  }
-
-  // Methods only in Iterables, not in Iterators
-
-  /**
-   * Adapts a list to an iterable with reversed iteration order. It is
-   * especially useful in foreach-style loops: <pre class="code">   {@code
-   *
-   *   List<String> mylist = ...
-   *   for (String str : Iterables.reverse(mylist)) {
-   *     ...
-   *   }}</pre>
-   *
-   * There is no corresponding method in {@link Iterators}, since {@link
-   * Iterable#iterator} can simply be invoked on the result of calling this
-   * method.
-   *
-   * @return an iterable with the same elements as the list, in reverse
-   */
-  public static <T> Iterable<T> reverse(final List<T> list) {
-    checkNotNull(list);
-    return new IterableWithToString<T>() {
-      public Iterator<T> iterator() {
-        final ListIterator<T> listIter = list.listIterator(list.size());
-        return new Iterator<T>() {
-          public boolean hasNext() {
-            return listIter.hasPrevious();
-          }
-          public T next() {
-            return listIter.previous();
-          }
-          public void remove() {
-            listIter.remove();
-          }
-        };
-      }
-    };
-  }
-
-  /**
-   * Determines if the given iterable contains no elements.
-   *
-   * <p>There is no precise {@link Iterator} equivalent to this method, since
-   * one can only ask an iterator whether it has any elements <i>remaining</i>
-   * (which one does using {@link Iterator#hasNext}).
-   *
-   * @return {@code true} if the iterable contains no elements
-   */
-  public static <T> boolean isEmpty(Iterable<T> iterable) {
-    return !iterable.iterator().hasNext();
-  }
-
-  // Non-public
-
-  /**
-   * Removes the specified element from the specified iterable.
-   *
-   * <p>This method iterates over the iterable, checking each element returned
-   * by the iterator in turn to see if it equals the object {@code o}. If they
-   * are equal, it is removed from the iterable with the iterator's
-   * {@code remove} method. At most one element is removed, even if the iterable
-   * contains multiple members that equal {@code o}.
-   *
-   * <p><b>Warning</b>: Do not use this method for a collection, such as a
-   * {@link HashSet}, that has a fast {@code remove} method.
-   *
-   * @param iterable the iterable from which to remove
-   * @param o an element to remove from the collection
-   * @return {@code true} if the iterable changed as a result
-   * @throws UnsupportedOperationException if the iterator does not support the
-   *     {@code remove} method and the iterable contains the object
-   */
-  static boolean remove(Iterable<?> iterable, @Nullable Object o) {
-    Iterator<?> i = iterable.iterator();
-    while (i.hasNext()) {
-      if (Objects.equal(i.next(), o)) {
-        i.remove();
-        return true;
-      }
-    }
-    return false;
-  }
-
-  abstract static class IterableWithToString<E> implements Iterable<E> {
-    @Override public String toString() {
-      return Iterables.toString(this);
-    }
-  }
-}
diff --git a/src/com/google/common/collect/Iterators.java b/src/com/google/common/collect/Iterators.java
deleted file mode 100644
index ca1dfdd..0000000
--- a/src/com/google/common/collect/Iterators.java
+++ /dev/null
@@ -1,1034 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-import com.google.common.annotations.GwtIncompatible;
-import com.google.common.base.Function;
-import com.google.common.base.Objects;
-import com.google.common.base.Preconditions;
-import com.google.common.base.Predicate;
-import com.google.common.base.Predicates;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.Iterator;
-import java.util.List;
-import java.util.NoSuchElementException;
-
-import javax.annotation.Nullable;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Preconditions.checkState;
-
-/**
- * This class contains static utility methods that operate on or return objects
- * of type {@link Iterator}. Except as noted, each method has a corresponding
- * {@link Iterable}-based method in the {@link Iterables} class.
- *
- * @author Kevin Bourrillion
- * @author Jared Levy
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible
-public final class Iterators {
-  private Iterators() {}
-
-  static final UnmodifiableIterator<Object> EMPTY_ITERATOR
-      = new UnmodifiableIterator<Object>() {
-        public boolean hasNext() {
-          return false;
-        }
-        public Object next() {
-          throw new NoSuchElementException();
-        }
-      };
-
-  /**
-   * Returns the empty iterator.
-   *
-   * <p>The {@link Iterable} equivalent of this method is {@link
-   * Collections#emptySet}.
-   */
-  // Casting to any type is safe since there are no actual elements.
-  @SuppressWarnings("unchecked")
-  public static <T> UnmodifiableIterator<T> emptyIterator() {
-    return (UnmodifiableIterator<T>) EMPTY_ITERATOR;
-  }
-
-  private static final Iterator<Object> EMPTY_MODIFIABLE_ITERATOR =
-      new Iterator<Object>() {
-        /*@Override*/ public boolean hasNext() {
-          return false;
-        }
-
-        /*@Override*/ public Object next() {
-          throw new NoSuchElementException();
-        }
-
-        /*@Override*/ public void remove() {
-          throw new IllegalStateException();
-        }
-      };
-
-  /**
-   * Returns the empty {@code Iterator} that throws
-   * {@link IllegalStateException} instead of
-   * {@link UnsupportedOperationException} on a call to
-   * {@link Iterator#remove()}.
-   */
-  // Casting to any type is safe since there are no actual elements.
-  @SuppressWarnings("unchecked")
-  static <T> Iterator<T> emptyModifiableIterator() {
-    return (Iterator<T>) EMPTY_MODIFIABLE_ITERATOR;
-  }
-
-  /** Returns an unmodifiable view of {@code iterator}. */
-  public static <T> UnmodifiableIterator<T> unmodifiableIterator(
-      final Iterator<T> iterator) {
-    checkNotNull(iterator);
-    return new UnmodifiableIterator<T>() {
-      public boolean hasNext() {
-        return iterator.hasNext();
-      }
-      public T next() {
-        return iterator.next();
-      }
-    };
-  }
-
-  /**
-   * Returns the number of elements remaining in {@code iterator}. The iterator
-   * will be left exhausted: its {@code hasNext()} method will return
-   * {@code false}.
-   */
-  public static int size(Iterator<?> iterator) {
-    int count = 0;
-    while (iterator.hasNext()) {
-      iterator.next();
-      count++;
-    }
-    return count;
-  }
-
-  /**
-   * Returns {@code true} if {@code iterator} contains {@code element}.
-   */
-  public static boolean contains(Iterator<?> iterator, @Nullable Object element)
-  {
-    if (element == null) {
-      while (iterator.hasNext()) {
-        if (iterator.next() == null) {
-          return true;
-        }
-      }
-    } else {
-      while (iterator.hasNext()) {
-        if (element.equals(iterator.next())) {
-          return true;
-        }
-      }
-    }
-    return false;
-  }
-
-  /**
-   * Traverses an iterator and removes every element that belongs to the
-   * provided collection. The iterator will be left exhausted: its
-   * {@code hasNext()} method will return {@code false}.
-   *
-   * @param removeFrom the iterator to (potentially) remove elements from
-   * @param elementsToRemove the elements to remove
-   * @return {@code true} if any elements are removed from {@code iterator}
-   */
-  public static boolean removeAll(
-      Iterator<?> removeFrom, Collection<?> elementsToRemove) {
-    checkNotNull(elementsToRemove);
-    boolean modified = false;
-    while (removeFrom.hasNext()) {
-      if (elementsToRemove.contains(removeFrom.next())) {
-        removeFrom.remove();
-        modified = true;
-      }
-    }
-    return modified;
-  }
-
-  /**
-   * Removes every element that satisfies the provided predicate from the
-   * iterator. The iterator will be left exhausted: its {@code hasNext()}
-   * method will return {@code false}.
-   *
-   * @param removeFrom the iterator to (potentially) remove elements from
-   * @param predicate a predicate that determines whether an element should
-   *     be removed
-   * @return {@code true} if any elements were removed from the iterator
-   * @since 2010.01.04 <b>tentative</b>
-   */
-  public static <T> boolean removeIf(
-      Iterator<T> removeFrom, Predicate<? super T> predicate) {
-    checkNotNull(predicate);
-    boolean modified = false;
-    while (removeFrom.hasNext()) {
-      if (predicate.apply(removeFrom.next())) {
-        removeFrom.remove();
-        modified = true;
-      }
-    }
-    return modified;
-  }
-
-  /**
-   * Traverses an iterator and removes every element that does not belong to the
-   * provided collection. The iterator will be left exhausted: its
-   * {@code hasNext()} method will return {@code false}.
-   *
-   * @param removeFrom the iterator to (potentially) remove elements from
-   * @param elementsToRetain the elements to retain
-   * @return {@code true} if any elements are removed from {@code iterator}
-   */
-  public static boolean retainAll(
-      Iterator<?> removeFrom, Collection<?> elementsToRetain) {
-    checkNotNull(elementsToRetain);
-    boolean modified = false;
-    while (removeFrom.hasNext()) {
-      if (!elementsToRetain.contains(removeFrom.next())) {
-        removeFrom.remove();
-        modified = true;
-      }
-    }
-    return modified;
-  }
-
-  /**
-   * Determines whether two iterators contain equal elements in the same order.
-   * More specifically, this method returns {@code true} if {@code iterator1}
-   * and {@code iterator2} contain the same number of elements and every element
-   * of {@code iterator1} is equal to the corresponding element of
-   * {@code iterator2}.
-   *
-   * <p>Note that this will modify the supplied iterators, since they will have
-   * been advanced some number of elements forward.
-   */
-  public static boolean elementsEqual(
-      Iterator<?> iterator1, Iterator<?> iterator2) {
-    while (iterator1.hasNext()) {
-      if (!iterator2.hasNext()) {
-        return false;
-      }
-      Object o1 = iterator1.next();
-      Object o2 = iterator2.next();
-      if (!Objects.equal(o1, o2)) {
-        return false;
-      }
-    }
-    return !iterator2.hasNext();
-  }
-
-  /**
-   * Returns a string representation of {@code iterator}, with the format
-   * {@code [e1, e2, ..., en]}. The iterator will be left exhausted: its
-   * {@code hasNext()} method will return {@code false}.
-   */
-  public static String toString(Iterator<?> iterator) {
-    if (!iterator.hasNext()) {
-      return "[]";
-    }
-    StringBuilder builder = new StringBuilder();
-    builder.append('[').append(iterator.next());
-    while (iterator.hasNext()) {
-      builder.append(", ").append(iterator.next());
-    }
-    return builder.append(']').toString();
-  }
-
-  /**
-   * Returns the single element contained in {@code iterator}.
-   *
-   * @throws NoSuchElementException if the iterator is empty
-   * @throws IllegalArgumentException if the iterator contains multiple
-   *     elements.  The state of the iterator is unspecified.
-   */
-  public static <T> T getOnlyElement(Iterator<T> iterator) {
-    T first = iterator.next();
-    if (!iterator.hasNext()) {
-      return first;
-    }
-
-    StringBuilder sb = new StringBuilder();
-    sb.append("expected one element but was: <" + first);
-    for (int i = 0; i < 4 && iterator.hasNext(); i++) {
-      sb.append(", " + iterator.next());
-    }
-    if (iterator.hasNext()) {
-      sb.append(", ...");
-    }
-    sb.append(">");
-
-    throw new IllegalArgumentException(sb.toString());
-  }
-
-  /**
-   * Returns the single element contained in {@code iterator}, or {@code
-   * defaultValue} if the iterator is empty.
-   *
-   * @throws IllegalArgumentException if the iterator contains multiple
-   *     elements.  The state of the iterator is unspecified.
-   */
-  public static <T> T getOnlyElement(
-      Iterator<T> iterator, @Nullable T defaultValue) {
-    return iterator.hasNext() ? getOnlyElement(iterator) : defaultValue;
-  }
-
-  /**
-   * Copies an iterator's elements into an array. The iterator will be left
-   * exhausted: its {@code hasNext()} method will return {@code false}.
-   *
-   * @param iterator the iterator to copy
-   * @param type the type of the elements
-   * @return a newly-allocated array into which all the elements of the iterator
-   *         have been copied
-   */
-  @GwtIncompatible("Array.newArray")
-  public static <T> T[] toArray(
-      Iterator<? extends T> iterator, Class<T> type) {
-    List<T> list = Lists.newArrayList(iterator);
-    return Iterables.toArray(list, type);
-  }
-
-  /**
-   * Adds all elements in {@code iterator} to {@code collection}. The iterator
-   * will be left exhausted: its {@code hasNext()} method will return
-   * {@code false}.
-   *
-   * @return {@code true} if {@code collection} was modified as a result of this
-   *         operation
-   */
-  public static <T> boolean addAll(
-      Collection<T> addTo, Iterator<? extends T> iterator) {
-    checkNotNull(addTo);
-    boolean wasModified = false;
-    while (iterator.hasNext()) {
-      wasModified |= addTo.add(iterator.next());
-    }
-    return wasModified;
-  }
-
-  /**
-   * Returns the number of elements in the specified iterator that equal the
-   * specified object. The iterator will be left exhausted: its
-   * {@code hasNext()} method will return {@code false}.
-   *
-   * @see Collections#frequency
-   */
-  public static int frequency(Iterator<?> iterator, @Nullable Object element) {
-    int result = 0;
-    if (element == null) {
-      while (iterator.hasNext()) {
-        if (iterator.next() == null) {
-          result++;
-        }
-      }
-    } else {
-      while (iterator.hasNext()) {
-        if (element.equals(iterator.next())) {
-          result++;
-        }
-      }
-    }
-    return result;
-  }
-
-  /**
-   * Returns an iterator that cycles indefinitely over the elements of {@code
-   * iterable}.
-   *
-   * <p>The returned iterator supports {@code remove()} if the provided iterator
-   * does. After {@code remove()} is called, subsequent cycles omit the removed
-   * element, which is no longer in {@code iterable}. The iterator's
-   * {@code hasNext()} method returns {@code true} until {@code iterable} is
-   * empty.
-   *
-   * <p><b>Warning:</b> Typical uses of the resulting iterator may produce an
-   * infinite loop. You should use an explicit {@code break} or be certain that
-   * you will eventually remove all the elements.
-   */
-  public static <T> Iterator<T> cycle(final Iterable<T> iterable) {
-    checkNotNull(iterable);
-    return new Iterator<T>() {
-      Iterator<T> iterator = emptyIterator();
-      Iterator<T> removeFrom;
-
-      public boolean hasNext() {
-        if (!iterator.hasNext()) {
-          iterator = iterable.iterator();
-        }
-        return iterator.hasNext();
-      }
-      public T next() {
-        if (!hasNext()) {
-          throw new NoSuchElementException();
-        }
-        removeFrom = iterator;
-        return iterator.next();
-      }
-      public void remove() {
-        checkState(removeFrom != null,
-            "no calls to next() since last call to remove()");
-        removeFrom.remove();
-        removeFrom = null;
-      }
-    };
-  }
-
-  /**
-   * Returns an iterator that cycles indefinitely over the provided elements.
-   *
-   * <p>The returned iterator supports {@code remove()} if the provided iterator
-   * does. After {@code remove()} is called, subsequent cycles omit the removed
-   * element, but {@code elements} does not change. The iterator's
-   * {@code hasNext()} method returns {@code true} until all of the original
-   * elements have been removed.
-   *
-   * <p><b>Warning:</b> Typical uses of the resulting iterator may produce an
-   * infinite loop. You should use an explicit {@code break} or be certain that
-   * you will eventually remove all the elements.
-   */
-  public static <T> Iterator<T> cycle(T... elements) {
-    return cycle(Lists.newArrayList(elements));
-  }
-
-  /**
-   * Combines two iterators into a single iterator. The returned iterator
-   * iterates across the elements in {@code a}, followed by the elements in
-   * {@code b}. The source iterators are not polled until necessary.
-   *
-   * <p>The returned iterator supports {@code remove()} when the corresponding
-   * input iterator supports it.
-   */
-  @SuppressWarnings("unchecked")
-  public static <T> Iterator<T> concat(Iterator<? extends T> a,
-      Iterator<? extends T> b) {
-    checkNotNull(a);
-    checkNotNull(b);
-    return concat(Arrays.asList(a, b).iterator());
-  }
-
-  /**
-   * Combines three iterators into a single iterator. The returned iterator
-   * iterates across the elements in {@code a}, followed by the elements in
-   * {@code b}, followed by the elements in {@code c}. The source iterators
-   * are not polled until necessary.
-   *
-   * <p>The returned iterator supports {@code remove()} when the corresponding
-   * input iterator supports it.
-   */
-  @SuppressWarnings("unchecked")
-  public static <T> Iterator<T> concat(Iterator<? extends T> a,
-      Iterator<? extends T> b, Iterator<? extends T> c) {
-    checkNotNull(a);
-    checkNotNull(b);
-    checkNotNull(c);
-    return concat(Arrays.asList(a, b, c).iterator());
-  }
-
-  /**
-   * Combines four iterators into a single iterator. The returned iterator
-   * iterates across the elements in {@code a}, followed by the elements in
-   * {@code b}, followed by the elements in {@code c}, followed by the elements
-   * in {@code d}. The source iterators are not polled until necessary.
-   *
-   * <p>The returned iterator supports {@code remove()} when the corresponding
-   * input iterator supports it.
-   */
-  @SuppressWarnings("unchecked")
-  public static <T> Iterator<T> concat(Iterator<? extends T> a,
-      Iterator<? extends T> b, Iterator<? extends T> c,
-      Iterator<? extends T> d) {
-    checkNotNull(a);
-    checkNotNull(b);
-    checkNotNull(c);
-    checkNotNull(d);
-    return concat(Arrays.asList(a, b, c, d).iterator());
-  }
-
-  /**
-   * Combines multiple iterators into a single iterator. The returned iterator
-   * iterates across the elements of each iterator in {@code inputs}. The input
-   * iterators are not polled until necessary.
-   *
-   * <p>The returned iterator supports {@code remove()} when the corresponding
-   * input iterator supports it.
-   *
-   * @throws NullPointerException if any of the provided iterators is null
-   */
-  public static <T> Iterator<T> concat(Iterator<? extends T>... inputs) {
-    return concat(ImmutableList.of(inputs).iterator());
-  }
-
-  /**
-   * Combines multiple iterators into a single iterator. The returned iterator
-   * iterates across the elements of each iterator in {@code inputs}. The input
-   * iterators are not polled until necessary.
-   *
-   * <p>The returned iterator supports {@code remove()} when the corresponding
-   * input iterator supports it. The methods of the returned iterator may throw
-   * {@code NullPointerException} if any of the input iterators are null.
-   */
-  public static <T> Iterator<T> concat(
-      final Iterator<? extends Iterator<? extends T>> inputs) {
-    checkNotNull(inputs);
-    return new Iterator<T>() {
-      Iterator<? extends T> current = emptyIterator();
-      Iterator<? extends T> removeFrom;
-
-      public boolean hasNext() {
-        // http://code.google.com/p/google-collections/issues/detail?id=151
-        // current.hasNext() might be relatively expensive, worth minimizing.
-        boolean currentHasNext;
-        while (!(currentHasNext = current.hasNext()) && inputs.hasNext()) {
-          current = inputs.next();
-        }
-        return currentHasNext;
-      }
-      public T next() {
-        if (!hasNext()) {
-          throw new NoSuchElementException();
-        }
-        removeFrom = current;
-        return current.next();
-      }
-      public void remove() {
-        checkState(removeFrom != null,
-            "no calls to next() since last call to remove()");
-        removeFrom.remove();
-        removeFrom = null;
-      }
-    };
-  }
-
-  /**
-   * Divides an iterator into unmodifiable sublists of the given size (the final
-   * list may be smaller). For example, partitioning an iterator containing
-   * {@code [a, b, c, d, e]} with a partition size of 3 yields {@code
-   * [[a, b, c], [d, e]]} -- an outer iterator containing two inner lists of
-   * three and two elements, all in the original order.
-   *
-   * <p>The returned lists implement {@link java.util.RandomAccess}.
-   *
-   * @param iterator the iterator to return a partitioned view of
-   * @param size the desired size of each partition (the last may be smaller)
-   * @return an iterator of immutable lists containing the elements of {@code
-   *     iterator} divided into partitions
-   * @throws IllegalArgumentException if {@code size} is nonpositive
-   */
-  public static <T> UnmodifiableIterator<List<T>> partition(
-      Iterator<T> iterator, int size) {
-    return partitionImpl(iterator, size, false);
-  }
-
-  /**
-   * Divides an iterator into unmodifiable sublists of the given size, padding
-   * the final iterator with null values if necessary. For example, partitioning
-   * an iterator containing {@code [a, b, c, d, e]} with a partition size of 3
-   * yields {@code [[a, b, c], [d, e, null]]} -- an outer iterator containing
-   * two inner lists of three elements each, all in the original order.
-   *
-   * <p>The returned lists implement {@link java.util.RandomAccess}.
-   *
-   * @param iterator the iterator to return a partitioned view of
-   * @param size the desired size of each partition
-   * @return an iterator of immutable lists containing the elements of {@code
-   *     iterator} divided into partitions (the final iterable may have
-   *     trailing null elements)
-   * @throws IllegalArgumentException if {@code size} is nonpositive
-   */
-  public static <T> UnmodifiableIterator<List<T>> paddedPartition(
-      Iterator<T> iterator, int size) {
-    return partitionImpl(iterator, size, true);
-  }
-
-  private static <T> UnmodifiableIterator<List<T>> partitionImpl(
-      final Iterator<T> iterator, final int size, final boolean pad) {
-    checkNotNull(iterator);
-    checkArgument(size > 0);
-    return new UnmodifiableIterator<List<T>>() {
-      public boolean hasNext() {
-        return iterator.hasNext();
-      }
-      public List<T> next() {
-        if (!hasNext()) {
-          throw new NoSuchElementException();
-        }
-        Object[] array = new Object[size];
-        int count = 0;
-        for (; count < size && iterator.hasNext(); count++) {
-          array[count] = iterator.next();
-        }
-
-        @SuppressWarnings("unchecked") // we only put Ts in it
-        List<T> list = Collections.unmodifiableList(
-            (List<T>) Arrays.asList(array));
-        return (pad || count == size) ? list : Platform.subList(list, 0, count);
-      }
-    };
-  }
-
-  /**
-   * Returns the elements of {@code unfiltered} that satisfy a predicate.
-   */
-  public static <T> UnmodifiableIterator<T> filter(
-      final Iterator<T> unfiltered, final Predicate<? super T> predicate) {
-    checkNotNull(unfiltered);
-    checkNotNull(predicate);
-    return new AbstractIterator<T>() {
-      @Override protected T computeNext() {
-        while (unfiltered.hasNext()) {
-          T element = unfiltered.next();
-          if (predicate.apply(element)) {
-            return element;
-          }
-        }
-        return endOfData();
-      }
-    };
-  }
-
-  /**
-   * Returns all instances of class {@code type} in {@code unfiltered}. The
-   * returned iterator has elements whose class is {@code type} or a subclass of
-   * {@code type}.
-   *
-   * @param unfiltered an iterator containing objects of any type
-   * @param type the type of elements desired
-   * @return an unmodifiable iterator containing all elements of the original
-   *     iterator that were of the requested type
-   */
-  @SuppressWarnings("unchecked") // can cast to <T> because non-Ts are removed
-  @GwtIncompatible("Class.isInstance")
-  public static <T> UnmodifiableIterator<T> filter(
-      Iterator<?> unfiltered, Class<T> type) {
-    return (UnmodifiableIterator<T>)
-        filter(unfiltered, Predicates.instanceOf(type));
-  }
-
-  /**
-   * Returns {@code true} if one or more elements returned by {@code iterator}
-   * satisfy the given predicate.
-   */
-  public static <T> boolean any(
-      Iterator<T> iterator, Predicate<? super T> predicate) {
-    checkNotNull(predicate);
-    while (iterator.hasNext()) {
-      T element = iterator.next();
-      if (predicate.apply(element)) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  /**
-   * Returns {@code true} if every element returned by {@code iterator}
-   * satisfies the given predicate. If {@code iterator} is empty, {@code true}
-   * is returned.
-   */
-  public static <T> boolean all(
-      Iterator<T> iterator, Predicate<? super T> predicate) {
-    checkNotNull(predicate);
-    while (iterator.hasNext()) {
-      T element = iterator.next();
-      if (!predicate.apply(element)) {
-        return false;
-      }
-    }
-    return true;
-  }
-
-  /**
-   * Returns the first element in {@code iterator} that satisfies the given
-   * predicate. If a matching element is found, the iterator will be left in a
-   * state such that calling {@code iterator.remove()} will remove the found
-   * item. If no such element is found, the iterator will be left exhausted: its
-   * {@code hasNext()} method will return {@code false}.
-   *
-   * @return the first matching element in {@code iterator}
-   * @throws NoSuchElementException if no element in {@code iterator} matches
-   *     the given predicate
-   */
-  public static <T> T find(Iterator<T> iterator, Predicate<? super T> predicate)
-  {
-    return filter(iterator, predicate).next();
-  }
-
-  /**
-   * Returns the index in {@code iterator} of the first element that satisfies
-   * the provided {@code predicate}, or {@code -1} if the Iterator has no such
-   * elements.
-   *
-   * <p>More formally, returns the lowest index {@code i} such that
-   * {@code predicate.apply(Iterators.get(iterator, i))} is {@code true}, or
-   * {@code -1} if there is no such index.
-   *
-   * <p>If -1 is returned, the iterator will be left exhausted: its
-   * {@code hasNext()} method will return {@code false}.  Otherwise,
-   * the iterator will be set to the element which satisfies the
-   * {@code predicate}.
-   *
-   * @since 2010.01.04 <b>tentative</b>
-   */
-  public static <T> int indexOf(
-      Iterator<T> iterator, Predicate<? super T> predicate) {
-    Preconditions.checkNotNull(predicate, "predicate");
-    int i = 0;
-    while (iterator.hasNext()) {
-      T current = iterator.next();
-      if (predicate.apply(current)) {
-        return i;
-      }
-      i++;
-    }
-    return -1;
-  }
-
-  /**
-   * Returns an iterator that applies {@code function} to each element of {@code
-   * fromIterator}.
-   *
-   * <p>The returned iterator supports {@code remove()} if the provided iterator
-   * does. After a successful {@code remove()} call, {@code fromIterator} no
-   * longer contains the corresponding element.
-   */
-  public static <F, T> Iterator<T> transform(final Iterator<F> fromIterator,
-      final Function<? super F, ? extends T> function) {
-    checkNotNull(fromIterator);
-    checkNotNull(function);
-    return new Iterator<T>() {
-      public boolean hasNext() {
-        return fromIterator.hasNext();
-      }
-      public T next() {
-        F from = fromIterator.next();
-        return function.apply(from);
-      }
-      public void remove() {
-        fromIterator.remove();
-      }
-    };
-  }
-
-  /**
-   * Advances {@code iterator} {@code position + 1} times, returning the element
-   * at the {@code position}th position.
-   *
-   * @param position position of the element to return
-   * @return the element at the specified position in {@code iterator}
-   * @throws IndexOutOfBoundsException if {@code position} is negative or
-   *     greater than or equal to the number of elements remaining in
-   *     {@code iterator}
-   */
-  public static <T> T get(Iterator<T> iterator, int position) {
-    if (position < 0) {
-      throw new IndexOutOfBoundsException("position (" + position
-          + ") must not be negative");
-    }
-
-    int skipped = 0;
-    while (iterator.hasNext()) {
-      T t = iterator.next();
-      if (skipped++ == position) {
-        return t;
-      }
-    }
-
-    throw new IndexOutOfBoundsException("position (" + position
-        + ") must be less than the number of elements that remained ("
-        + skipped + ")");
-  }
-
-  /**
-   * Advances {@code iterator} to the end, returning the last element.
-   *
-   * @return the last element of {@code iterator}
-   * @throws NoSuchElementException if the iterator has no remaining elements
-   */
-  public static <T> T getLast(Iterator<T> iterator) {
-    while (true) {
-      T current = iterator.next();
-      if (!iterator.hasNext()) {
-        return current;
-      }
-    }
-  }
-
-  /**
-   * Returns a view of the supplied {@code iterator} that removes each element
-   * from the supplied {@code iterator} as it is returned.
-   *
-   * <p>The provided iterator must support {@link Iterator#remove()} or
-   * else the returned iterator will fail on the first call to {@code
-   * next}.
-   *
-   * @param iterator the iterator to remove and return elements from
-   * @return an iterator that removes and returns elements from the
-   *     supplied iterator
-   * @since 2010.01.04 <b>tentative</b>
-   */
-  public static <T> Iterator<T> consumingIterator(final Iterator<T> iterator) {
-    checkNotNull(iterator);
-    return new UnmodifiableIterator<T>() {
-      public boolean hasNext() {
-        return iterator.hasNext();
-      }
-
-      public T next() {
-        T next = iterator.next();
-        iterator.remove();
-        return next;
-      }
-    };
-  }
-
-  // Methods only in Iterators, not in Iterables
-
-  /**
-   * Returns an iterator containing the elements of {@code array} in order. The
-   * returned iterator is a view of the array; subsequent changes to the array
-   * will be reflected in the iterator.
-   *
-   * <p><b>Note:</b> It is often preferable to represent your data using a
-   * collection type, for example using {@link Arrays#asList(Object[])}, making
-   * this method unnecessary.
-   *
-   * <p>The {@code Iterable} equivalent of this method is either {@link
-   * Arrays#asList(Object[])} or {@link ImmutableList#of(Object[])}}.
-   */
-  public static <T> UnmodifiableIterator<T> forArray(final T... array) {
-    // TODO: compare performance with Arrays.asList(array).iterator().
-    checkNotNull(array);  // eager for GWT.
-    return new UnmodifiableIterator<T>() {
-      final int length = array.length;
-      int i = 0;
-      public boolean hasNext() {
-        return i < length;
-      }
-      public T next() {
-        if (i < length) {
-          return array[i++];
-        } else {
-          throw new NoSuchElementException();
-        }
-      }
-    };
-  }
-
-  /**
-   * Returns an iterator containing the elements in the specified range of
-   * {@code array} in order. The returned iterator is a view of the array;
-   * subsequent changes to the array will be reflected in the iterator.
-   *
-   * <p>The {@code Iterable} equivalent of this method is {@code
-   * Arrays.asList(array).subList(offset, offset + length)}.
-   *
-   * @param array array to read elements out of
-   * @param offset index of first array element to retrieve
-   * @param length number of elements in iteration
-   *
-   * @throws IndexOutOfBoundsException if {@code offset} is negative,
-   *    {@code length} is negative, or {@code offset + length > array.length}
-   */
-  static <T> UnmodifiableIterator<T> forArray(
-      final T[] array, final int offset, int length) {
-    checkArgument(length >= 0);
-    final int end = offset + length;
-
-    // Technically we should give a slightly more descriptive error on overflow
-    Preconditions.checkPositionIndexes(offset, end, array.length);
-
-    // If length == 0 is a common enough case, we could return emptyIterator().
-
-    return new UnmodifiableIterator<T>() {
-      int i = offset;
-      public boolean hasNext() {
-        return i < end;
-      }
-      public T next() {
-        if (!hasNext()) {
-          throw new NoSuchElementException();
-        }
-        return array[i++];
-      }
-    };
-  }
-
-  /**
-   * Returns an iterator containing only {@code value}.
-   *
-   * <p>The {@link Iterable} equivalent of this method is {@link
-   * Collections#singleton}.
-   */
-  public static <T> UnmodifiableIterator<T> singletonIterator(
-      @Nullable final T value) {
-    return new UnmodifiableIterator<T>() {
-      boolean done;
-      public boolean hasNext() {
-        return !done;
-      }
-      public T next() {
-        if (done) {
-          throw new NoSuchElementException();
-        }
-        done = true;
-        return value;
-      }
-    };
-  }
-
-  /**
-   * Adapts an {@code Enumeration} to the {@code Iterator} interface.
-   *
-   * <p>This method has no equivalent in {@link Iterables} because viewing an
-   * {@code Enumeration} as an {@code Iterable} is impossible. However, the
-   * contents can be <i>copied</i> into a collection using {@link
-   * Collections#list}.
-   */
-  public static <T> UnmodifiableIterator<T> forEnumeration(
-      final Enumeration<T> enumeration) {
-    checkNotNull(enumeration);
-    return new UnmodifiableIterator<T>() {
-      public boolean hasNext() {
-        return enumeration.hasMoreElements();
-      }
-      public T next() {
-        return enumeration.nextElement();
-      }
-    };
-  }
-
-  /**
-   * Adapts an {@code Iterator} to the {@code Enumeration} interface.
-   *
-   * <p>The {@code Iterable} equivalent of this method is either {@link
-   * Collections#enumeration} (if you have a {@link Collection}), or
-   * {@code Iterators.asEnumeration(collection.iterator())}.
-   */
-  public static <T> Enumeration<T> asEnumeration(final Iterator<T> iterator) {
-    checkNotNull(iterator);
-    return new Enumeration<T>() {
-      public boolean hasMoreElements() {
-        return iterator.hasNext();
-      }
-      public T nextElement() {
-        return iterator.next();
-      }
-    };
-  }
-
-  /**
-   * Implementation of PeekingIterator that avoids peeking unless necessary.
-   */
-  private static class PeekingImpl<E> implements PeekingIterator<E> {
-
-    private final Iterator<? extends E> iterator;
-    private boolean hasPeeked;
-    private E peekedElement;
-
-    public PeekingImpl(Iterator<? extends E> iterator) {
-      this.iterator = checkNotNull(iterator);
-    }
-
-    public boolean hasNext() {
-      return hasPeeked || iterator.hasNext();
-    }
-
-    public E next() {
-      if (!hasPeeked) {
-        return iterator.next();
-      }
-      E result = peekedElement;
-      hasPeeked = false;
-      peekedElement = null;
-      return result;
-    }
-
-    public void remove() {
-      checkState(!hasPeeked, "Can't remove after you've peeked at next");
-      iterator.remove();
-    }
-
-    public E peek() {
-      if (!hasPeeked) {
-        peekedElement = iterator.next();
-        hasPeeked = true;
-      }
-      return peekedElement;
-    }
-  }
-
-  /**
-   * Returns a {@code PeekingIterator} backed by the given iterator.
-   *
-   * <p>Calls to the {@code peek} method with no intervening calls to {@code
-   * next} do not affect the iteration, and hence return the same object each
-   * time. A subsequent call to {@code next} is guaranteed to return the same
-   * object again. For example: <pre>   {@code
-   *
-   *   PeekingIterator<String> peekingIterator =
-   *       Iterators.peekingIterator(Iterators.forArray("a", "b"));
-   *   String a1 = peekingIterator.peek(); // returns "a"
-   *   String a2 = peekingIterator.peek(); // also returns "a"
-   *   String a3 = peekingIterator.next(); // also returns "a"}</pre>
-   *
-   * Any structural changes to the underlying iteration (aside from those
-   * performed by the iterator's own {@link PeekingIterator#remove()} method)
-   * will leave the iterator in an undefined state.
-   *
-   * <p>The returned iterator does not support removal after peeking, as
-   * explained by {@link PeekingIterator#remove()}.
-   *
-   * <p>Note: If the given iterator is already a {@code PeekingIterator},
-   * it <i>might</i> be returned to the caller, although this is neither
-   * guaranteed to occur nor required to be consistent.  For example, this
-   * method <i>might</i> choose to pass through recognized implementations of
-   * {@code PeekingIterator} when the behavior of the implementation is
-   * known to meet the contract guaranteed by this method.
-   *
-   * <p>There is no {@link Iterable} equivalent to this method, so use this
-   * method to wrap each individual iterator as it is generated.
-   *
-   * @param iterator the backing iterator. The {@link PeekingIterator} assumes
-   *     ownership of this iterator, so users should cease making direct calls
-   *     to it after calling this method.
-   * @return a peeking iterator backed by that iterator. Apart from the
-   *     additional {@link PeekingIterator#peek()} method, this iterator behaves
-   *     exactly the same as {@code iterator}.
-   */
-  public static <T> PeekingIterator<T> peekingIterator(
-      Iterator<? extends T> iterator) {
-    if (iterator instanceof PeekingImpl) {
-      // Safe to cast <? extends T> to <T> because PeekingImpl only uses T
-      // covariantly (and cannot be subclassed to add non-covariant uses).
-      @SuppressWarnings("unchecked")
-      PeekingImpl<T> peeking = (PeekingImpl<T>) iterator;
-      return peeking;
-    }
-    return new PeekingImpl<T>(iterator);
-  }
-}
diff --git a/src/com/google/common/collect/LexicographicalOrdering.java b/src/com/google/common/collect/LexicographicalOrdering.java
deleted file mode 100644
index 508d7fb..0000000
--- a/src/com/google/common/collect/LexicographicalOrdering.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-
-import java.io.Serializable;
-import java.util.Iterator;
-
-import javax.annotation.Nullable;
-
-/**
- * An ordering which sorts iterables by comparing corresponding elements
- * pairwise.
- */
-@GwtCompatible(serializable = true)
-final class LexicographicalOrdering<T>
-    extends Ordering<Iterable<T>> implements Serializable {
-  final Ordering<? super T> elementOrder;
-
-  LexicographicalOrdering(Ordering<? super T> elementOrder) {
-    this.elementOrder = elementOrder;
-  }
-
-  public int compare(Iterable<T> leftIterable, Iterable<T> rightIterable) {
-    Iterator<T> left = leftIterable.iterator();
-    Iterator<T> right = rightIterable.iterator();
-    while (left.hasNext()) {
-      if (!right.hasNext()) {
-        return LEFT_IS_GREATER; // because it's longer
-      }
-      int result = elementOrder.compare(left.next(), right.next());
-      if (result != 0) {
-        return result;
-      }
-    }
-    if (right.hasNext()) {
-      return RIGHT_IS_GREATER; // because it's longer
-    }
-    return 0;
-  }
-
-  @Override public boolean equals(@Nullable Object object) {
-    if (object == this) {
-      return true;
-    }
-    if (object instanceof LexicographicalOrdering) {
-      LexicographicalOrdering<?> that = (LexicographicalOrdering<?>) object;
-      return this.elementOrder.equals(that.elementOrder);
-    }
-    return false;
-  }
-
-  @Override public int hashCode() {
-    return elementOrder.hashCode() ^ 2075626741; // meaningless
-  }
-
-  @Override public String toString() {
-    return elementOrder + ".lexicographical()";
-  }
-
-  private static final long serialVersionUID = 0;
-}
diff --git a/src/com/google/common/collect/LinkedHashMultimap.java b/src/com/google/common/collect/LinkedHashMultimap.java
deleted file mode 100644
index e0ea53f..0000000
--- a/src/com/google/common/collect/LinkedHashMultimap.java
+++ /dev/null
@@ -1,382 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Preconditions;
-
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
-import java.util.Map;
-import java.util.Set;
-
-import javax.annotation.Nullable;
-
-/**
- * Implementation of {@code Multimap} that does not allow duplicate key-value
- * entries and that returns collections whose iterators follow the ordering in
- * which the data was added to the multimap.
- *
- * <p>The collections returned by {@code keySet}, {@code keys}, and {@code
- * asMap} iterate through the keys in the order they were first added to the
- * multimap. Similarly, {@code get}, {@code removeAll}, and {@code
- * replaceValues} return collections that iterate through the values in the
- * order they were added. The collections generated by {@code entries} and
- * {@code values} iterate across the key-value mappings in the order they were
- * added to the multimap.
- *
- * <p>The iteration ordering of the collections generated by {@code keySet},
- * {@code keys}, and {@code asMap} has a few subtleties. As long as the set of
- * keys remains unchanged, adding or removing mappings does not affect the key
- * iteration order. However, if you remove all values associated with a key and
- * then add the key back to the multimap, that key will come last in the key
- * iteration order.
- *
- * <p>The multimap does not store duplicate key-value pairs. Adding a new
- * key-value pair equal to an existing key-value pair has no effect.
- *
- * <p>Keys and values may be null. All optional multimap methods are supported,
- * and all returned views are modifiable.
- *
- * <p>This class is not threadsafe when any concurrent operations update the
- * multimap. Concurrent read operations will work correctly. To allow concurrent
- * update operations, wrap your multimap with a call to {@link
- * Multimaps#synchronizedSetMultimap}.
- *
- * @author Jared Levy
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible(serializable = true)
-public final class LinkedHashMultimap<K, V> extends AbstractSetMultimap<K, V> {
-  private static final int DEFAULT_VALUES_PER_KEY = 8;
-
-  @VisibleForTesting
-  transient int expectedValuesPerKey = DEFAULT_VALUES_PER_KEY;
-
-  /**
-   * Map entries with an iteration order corresponding to the order in which the
-   * key-value pairs were added to the multimap.
-   */
-  // package-private for GWT deserialization
-  transient Collection<Map.Entry<K, V>> linkedEntries;
-
-  /**
-   * Creates a new, empty {@code LinkedHashMultimap} with the default initial
-   * capacities.
-   */
-  public static <K, V> LinkedHashMultimap<K, V> create() {
-    return new LinkedHashMultimap<K, V>();
-  }
-
-  /**
-   * Constructs an empty {@code LinkedHashMultimap} with enough capacity to hold
-   * the specified numbers of keys and values without rehashing.
-   *
-   * @param expectedKeys the expected number of distinct keys
-   * @param expectedValuesPerKey the expected average number of values per key
-   * @throws IllegalArgumentException if {@code expectedKeys} or {@code
-   *      expectedValuesPerKey} is negative
-   */
-  public static <K, V> LinkedHashMultimap<K, V> create(
-      int expectedKeys, int expectedValuesPerKey) {
-    return new LinkedHashMultimap<K, V>(expectedKeys, expectedValuesPerKey);
-  }
-
-  /**
-   * Constructs a {@code LinkedHashMultimap} with the same mappings as the
-   * specified multimap. If a key-value mapping appears multiple times in the
-   * input multimap, it only appears once in the constructed multimap. The new
-   * multimap has the same {@link Multimap#entries()} iteration order as the
-   * input multimap, except for excluding duplicate mappings.
-   *
-   * @param multimap the multimap whose contents are copied to this multimap
-   */
-  public static <K, V> LinkedHashMultimap<K, V> create(
-      Multimap<? extends K, ? extends V> multimap) {
-    return new LinkedHashMultimap<K, V>(multimap);
-  }
-
-  private LinkedHashMultimap() {
-    super(new LinkedHashMap<K, Collection<V>>());
-    linkedEntries = Sets.newLinkedHashSet();
-  }
-
-  private LinkedHashMultimap(int expectedKeys, int expectedValuesPerKey) {
-    super(new LinkedHashMap<K, Collection<V>>(expectedKeys));
-    Preconditions.checkArgument(expectedValuesPerKey >= 0);
-    this.expectedValuesPerKey = expectedValuesPerKey;
-    linkedEntries = new LinkedHashSet<Map.Entry<K, V>>(
-        expectedKeys * expectedValuesPerKey);
-  }
-
-  private LinkedHashMultimap(Multimap<? extends K, ? extends V> multimap) {
-    super(new LinkedHashMap<K, Collection<V>>(
-        Maps.capacity(multimap.keySet().size())));
-    linkedEntries
-        = new LinkedHashSet<Map.Entry<K, V>>(Maps.capacity(multimap.size()));
-    putAll(multimap);
-  }
-
-  /**
-   * {@inheritDoc}
-   *
-   * <p>Creates an empty {@code LinkedHashSet} for a collection of values for
-   * one key.
-   *
-   * @return a new {@code LinkedHashSet} containing a collection of values for
-   *     one key
-   */
-  @Override Set<V> createCollection() {
-    return new LinkedHashSet<V>(Maps.capacity(expectedValuesPerKey));
-  }
-
-  /**
-   * {@inheritDoc}
-   *
-   * <p>Creates a decorated {@code LinkedHashSet} that also keeps track of the
-   * order in which key-value pairs are added to the multimap.
-   *
-   * @param key key to associate with values in the collection
-   * @return a new decorated {@code LinkedHashSet} containing a collection of
-   *     values for one key
-   */
-  @Override Collection<V> createCollection(@Nullable K key) {
-    return new SetDecorator(key, createCollection());
-  }
-
-  private class SetDecorator extends ForwardingSet<V> {
-    final Set<V> delegate;
-    final K key;
-
-    SetDecorator(@Nullable K key, Set<V> delegate) {
-      this.delegate = delegate;
-      this.key = key;
-    }
-
-    @Override protected Set<V> delegate() {
-      return delegate;
-    }
-
-    <E> Map.Entry<K, E> createEntry(@Nullable E value) {
-      return Maps.immutableEntry(key, value);
-    }
-
-    <E> Collection<Map.Entry<K, E>> createEntries(Collection<E> values) {
-      // converts a collection of values into a list of key/value map entries
-      Collection<Map.Entry<K, E>> entries
-          = Lists.newArrayListWithExpectedSize(values.size());
-      for (E value : values) {
-        entries.add(createEntry(value));
-      }
-      return entries;
-    }
-
-    @Override public boolean add(@Nullable V value) {
-      boolean changed = delegate.add(value);
-      if (changed) {
-        linkedEntries.add(createEntry(value));
-      }
-      return changed;
-    }
-
-    @Override public boolean addAll(Collection<? extends V> values) {
-      boolean changed = delegate.addAll(values);
-      if (changed) {
-        linkedEntries.addAll(createEntries(delegate()));
-      }
-      return changed;
-    }
-
-    @Override public void clear() {
-      linkedEntries.removeAll(createEntries(delegate()));
-      delegate.clear();
-    }
-
-    @Override public Iterator<V> iterator() {
-      final Iterator<V> delegateIterator = delegate.iterator();
-      return new Iterator<V>() {
-        V value;
-
-        public boolean hasNext() {
-          return delegateIterator.hasNext();
-        }
-        public V next() {
-          value = delegateIterator.next();
-          return value;
-        }
-        public void remove() {
-          delegateIterator.remove();
-          linkedEntries.remove(createEntry(value));
-        }
-      };
-    }
-
-    @Override public boolean remove(@Nullable Object value) {
-      boolean changed = delegate.remove(value);
-      if (changed) {
-        /*
-         * linkedEntries.remove() will return false when this method is called
-         * by entries().iterator().remove()
-         */
-        linkedEntries.remove(createEntry(value));
-      }
-      return changed;
-    }
-
-    @Override public boolean removeAll(Collection<?> values) {
-      boolean changed = delegate.removeAll(values);
-      if (changed) {
-        linkedEntries.removeAll(createEntries(values));
-      }
-      return changed;
-    }
-
-    @Override public boolean retainAll(Collection<?> values) {
-      /*
-       * Calling linkedEntries.retainAll() would incorrectly remove values
-       * with other keys.
-       */
-      boolean changed = false;
-      Iterator<V> iterator = delegate.iterator();
-      while (iterator.hasNext()) {
-        V value = iterator.next();
-        if (!values.contains(value)) {
-          iterator.remove();
-          linkedEntries.remove(Maps.immutableEntry(key, value));
-          changed = true;
-        }
-      }
-      return changed;
-    }
-  }
-
-  /**
-   * {@inheritDoc}
-   *
-   * <p>Generates an iterator across map entries that follows the ordering in
-   * which the key-value pairs were added to the multimap.
-   *
-   * @return a key-value iterator with the correct ordering
-   */
-  @Override Iterator<Map.Entry<K, V>> createEntryIterator() {
-    final Iterator<Map.Entry<K, V>> delegateIterator = linkedEntries.iterator();
-
-    return new Iterator<Map.Entry<K, V>>() {
-      Map.Entry<K, V> entry;
-
-      public boolean hasNext() {
-        return delegateIterator.hasNext();
-      }
-
-      public Map.Entry<K, V> next() {
-        entry = delegateIterator.next();
-        return entry;
-      }
-
-      public void remove() {
-        // Remove from iterator first to keep iterator valid.
-        delegateIterator.remove();
-        LinkedHashMultimap.this.remove(entry.getKey(), entry.getValue());
-      }
-    };
-  }
-
-  /**
-   * {@inheritDoc}
-   *
-   * <p>If {@code values} is not empty and the multimap already contains a
-   * mapping for {@code key}, the {@code keySet()} ordering is unchanged.
-   * However, the provided values always come last in the {@link #entries()} and
-   * {@link #values()} iteration orderings.
-   */
-  @Override public Set<V> replaceValues(
-      @Nullable K key, Iterable<? extends V> values) {
-    return super.replaceValues(key, values);
-  }
-
-  /**
-   * Returns a set of all key-value pairs. Changes to the returned set will
-   * update the underlying multimap, and vice versa. The entries set does not
-   * support the {@code add} or {@code addAll} operations.
-   *
-   * <p>The iterator generated by the returned set traverses the entries in the
-   * order they were added to the multimap.
-   *
-   * <p>Each entry is an immutable snapshot of a key-value mapping in the
-   * multimap, taken at the time the entry is returned by a method call to the
-   * collection or its iterator.
-   */
-  @Override public Set<Map.Entry<K, V>> entries() {
-    return super.entries();
-  }
-
-  /**
-   * Returns a collection of all values in the multimap. Changes to the returned
-   * collection will update the underlying multimap, and vice versa.
-   *
-   * <p>The iterator generated by the returned collection traverses the values
-   * in the order they were added to the multimap.
-   */
-  @Override public Collection<V> values() {
-    return super.values();
-  }
-
-  // Unfortunately, the entries() ordering does not determine the key ordering;
-  // see the example in the LinkedListMultimap class Javadoc.
-
-  /**
-   * @serialData the number of distinct keys, and then for each distinct key:
-   *     the first key, the number of values for that key, and the key's values,
-   *     followed by successive keys and values from the entries() ordering
-   */
-  private void writeObject(ObjectOutputStream stream) throws IOException {
-    stream.defaultWriteObject();
-    stream.writeInt(expectedValuesPerKey);
-    Serialization.writeMultimap(this, stream);
-    for (Map.Entry<K, V> entry : linkedEntries) {
-      stream.writeObject(entry.getKey());
-      stream.writeObject(entry.getValue());
-    }
-  }
-
-  private void readObject(ObjectInputStream stream)
-      throws IOException, ClassNotFoundException {
-    stream.defaultReadObject();
-    expectedValuesPerKey = stream.readInt();
-    int distinctKeys = Serialization.readCount(stream);
-    setMap(new LinkedHashMap<K, Collection<V>>(Maps.capacity(distinctKeys)));
-    linkedEntries = new LinkedHashSet<Map.Entry<K, V>>(
-        distinctKeys * expectedValuesPerKey);
-    Serialization.populateMultimap(this, stream, distinctKeys);
-    linkedEntries.clear(); // will clear and repopulate entries
-    for (int i = 0; i < size(); i++) {
-      @SuppressWarnings("unchecked") // reading data stored by writeObject
-      K key = (K) stream.readObject();
-      @SuppressWarnings("unchecked") // reading data stored by writeObject
-      V value = (V) stream.readObject();
-      linkedEntries.add(Maps.immutableEntry(key, value));
-    }
-  }
-
-  private static final long serialVersionUID = 0;
-}
diff --git a/src/com/google/common/collect/LinkedHashMultiset.java b/src/com/google/common/collect/LinkedHashMultiset.java
deleted file mode 100644
index 2d44cd0..0000000
--- a/src/com/google/common/collect/LinkedHashMultiset.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.util.LinkedHashMap;
-import java.util.concurrent.atomic.AtomicInteger;
-
-/**
- * A {@code Multiset} implementation with predictable iteration order. Its
- * iterator orders elements according to when the first occurrence of the
- * element was added. When the multiset contains multiple instances of an
- * element, those instances are consecutive in the iteration order. If all
- * occurrences of an element are removed, after which that element is added to
- * the multiset, the element will appear at the end of the iteration.
- *
- * @author Kevin Bourrillion
- * @author Jared Levy
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible(serializable = true)
-@SuppressWarnings("serial") // we're overriding default serialization
-public final class LinkedHashMultiset<E> extends AbstractMapBasedMultiset<E> {
-
-  /**
-   * Creates a new, empty {@code LinkedHashMultiset} using the default initial
-   * capacity.
-   */
-  public static <E> LinkedHashMultiset<E> create() {
-    return new LinkedHashMultiset<E>();
-  }
-
-  /**
-   * Creates a new, empty {@code LinkedHashMultiset} with the specified expected
-   * number of distinct elements.
-   *
-   * @param distinctElements the expected number of distinct elements
-   * @throws IllegalArgumentException if {@code distinctElements} is negative
-   */
-  public static <E> LinkedHashMultiset<E> create(int distinctElements) {
-    return new LinkedHashMultiset<E>(distinctElements);
-  }
-
-  /**
-   * Creates a new {@code LinkedHashMultiset} containing the specified elements.
-   *
-   * @param elements the elements that the multiset should contain
-   */
-  public static <E> LinkedHashMultiset<E> create(
-      Iterable<? extends E> elements) {
-    LinkedHashMultiset<E> multiset =
-        create(Multisets.inferDistinctElements(elements));
-    Iterables.addAll(multiset, elements);
-    return multiset;
-  }
-
-  private LinkedHashMultiset() {
-    super(new LinkedHashMap<E, AtomicInteger>());
-  }
-
-  private LinkedHashMultiset(int distinctElements) {
-    // Could use newLinkedHashMapWithExpectedSize() if it existed
-    super(new LinkedHashMap<E, AtomicInteger>(Maps.capacity(distinctElements)));
-  }
-
-  /**
-   * @serialData the number of distinct elements, the first element, its count,
-   *     the second element, its count, and so on
-   */
-  private void writeObject(ObjectOutputStream stream) throws IOException {
-    stream.defaultWriteObject();
-    Serialization.writeMultiset(this, stream);
-  }
-
-  private void readObject(ObjectInputStream stream)
-      throws IOException, ClassNotFoundException {
-    stream.defaultReadObject();
-    int distinctElements = Serialization.readCount(stream);
-    setBackingMap(new LinkedHashMap<E, AtomicInteger>(
-        Maps.capacity(distinctElements)));
-    Serialization.populateMultiset(this, stream, distinctElements);
-  }
-
-  private static final long serialVersionUID = 0;
-}
diff --git a/src/com/google/common/collect/LinkedListMultimap.java b/src/com/google/common/collect/LinkedListMultimap.java
deleted file mode 100644
index a27c99e..0000000
--- a/src/com/google/common/collect/LinkedListMultimap.java
+++ /dev/null
@@ -1,952 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-import com.google.common.base.Objects;
-import com.google.common.base.Preconditions;
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkState;
-import static com.google.common.collect.Multisets.setCountImpl;
-
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.io.Serializable;
-import java.util.AbstractCollection;
-import java.util.AbstractMap;
-import java.util.AbstractSequentialList;
-import java.util.AbstractSet;
-import java.util.Collection;
-import static java.util.Collections.unmodifiableList;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.ListIterator;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.NoSuchElementException;
-import java.util.Set;
-
-import javax.annotation.Nullable;
-
-/**
- * An implementation of {@code ListMultimap} that supports deterministic
- * iteration order for both keys and values. The iteration order is preserved
- * across non-distinct key values. For example, for the following multimap
- * definition: <pre>   {@code
- *
- *   Multimap<K, V> multimap = LinkedListMultimap.create();
- *   multimap.put(key1, foo);
- *   multimap.put(key2, bar);
- *   multimap.put(key1, baz);}</pre>
- *
- * ... the iteration order for {@link #keys()} is {@code [key1, key2, key1]},
- * and similarly for {@link #entries()}. Unlike {@link LinkedHashMultimap}, the
- * iteration order is kept consistent between keys, entries and values. For
- * example, calling: <pre>   {@code
- *
- *   map.remove(key1, foo);}</pre>
- *
- * changes the entries iteration order to {@code [key2=bar, key1=baz]} and the
- * key iteration order to {@code [key2, key1]}. The {@link #entries()} iterator
- * returns mutable map entries, and {@link #replaceValues} attempts to preserve
- * iteration order as much as possible.
- *
- * <p>The collections returned by {@link #keySet} and {@link #asMap} iterate
- * through the keys in the order they were first added to the multimap.
- * Similarly, {@link #get}, {@link #removeAll}, and {@link #replaceValues}
- * return collections that iterate through the values in the order they were
- * added. The collections generated by {@link #entries}, {@link #keys}, and
- * {@link #values} iterate across the key-value mappings in the order they were
- * added to the multimap.
- *
- * <p>Keys and values may be null. All optional multimap methods are supported,
- * and all returned views are modifiable.
- *
- * <p>The methods {@link #get}, {@link #keySet}, {@link #keys}, {@link #values},
- * {@link #entries}, and {@link #asMap} return collections that are views of the
- * multimap. If the multimap is modified while an iteration over any of those
- * collections is in progress, except through the iterator's own {@code remove}
- * operation, the results of the iteration are undefined.
- *
- * <p>This class is not threadsafe when any concurrent operations update the
- * multimap. Concurrent read operations will work correctly. To allow concurrent
- * update operations, wrap your multimap with a call to {@link
- * Multimaps#synchronizedListMultimap}.
- *
- * @author Mike Bostock
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible(serializable = true)
-public final class LinkedListMultimap<K, V>
-    implements ListMultimap<K, V>, Serializable {
-  /*
-   * Order is maintained using a linked list containing all key-value pairs. In
-   * addition, a series of disjoint linked lists of "siblings", each containing
-   * the values for a specific key, is used to implement {@link
-   * ValueForKeyIterator} in constant time.
-   */
-
-  private static final class Node<K, V> {
-    final K key;
-    V value;
-    Node<K, V> next; // the next node (with any key)
-    Node<K, V> previous; // the previous node (with any key)
-    Node<K, V> nextSibling; // the next node with the same key
-    Node<K, V> previousSibling; // the previous node with the same key
-
-    Node(@Nullable K key, @Nullable V value) {
-      this.key = key;
-      this.value = value;
-    }
-
-    @Override public String toString() {
-      return key + "=" + value;
-    }
-  }
-
-  private transient Node<K, V> head; // the head for all keys
-  private transient Node<K, V> tail; // the tail for all keys
-  private transient Multiset<K> keyCount; // the number of values for each key
-  private transient Map<K, Node<K, V>> keyToKeyHead; // the head for a given key
-  private transient Map<K, Node<K, V>> keyToKeyTail; // the tail for a given key
-
-  /**
-   * Creates a new, empty {@code LinkedListMultimap} with the default initial
-   * capacity.
-   */
-  public static <K, V> LinkedListMultimap<K, V> create() {
-    return new LinkedListMultimap<K, V>();
-  }
-
-  /**
-   * Constructs an empty {@code LinkedListMultimap} with enough capacity to hold
-   * the specified number of keys without rehashing.
-   *
-   * @param expectedKeys the expected number of distinct keys
-   * @throws IllegalArgumentException if {@code expectedKeys} is negative
-   */
-  public static <K, V> LinkedListMultimap<K, V> create(int expectedKeys) {
-    return new LinkedListMultimap<K, V>(expectedKeys);
-  }
-
-  /**
-   * Constructs a {@code LinkedListMultimap} with the same mappings as the
-   * specified {@code Multimap}. The new multimap has the same
-   * {@link Multimap#entries()} iteration order as the input multimap.
-   *
-   * @param multimap the multimap whose contents are copied to this multimap
-   */
-  public static <K, V> LinkedListMultimap<K, V> create(
-      Multimap<? extends K, ? extends V> multimap) {
-    return new LinkedListMultimap<K, V>(multimap);
-  }
-
-  private LinkedListMultimap() {
-    keyCount = LinkedHashMultiset.create();
-    keyToKeyHead = Maps.newHashMap();
-    keyToKeyTail = Maps.newHashMap();
-  }
-
-  private LinkedListMultimap(int expectedKeys) {
-    keyCount = LinkedHashMultiset.create(expectedKeys);
-    keyToKeyHead = Maps.newHashMapWithExpectedSize(expectedKeys);
-    keyToKeyTail = Maps.newHashMapWithExpectedSize(expectedKeys);
-  }
-
-  private LinkedListMultimap(Multimap<? extends K, ? extends V> multimap) {
-    this(multimap.keySet().size());
-    putAll(multimap);
-  }
-
-  /**
-   * Adds a new node for the specified key-value pair before the specified
-   * {@code nextSibling} element, or at the end of the list if {@code
-   * nextSibling} is null. Note: if {@code nextSibling} is specified, it MUST be
-   * for an node for the same {@code key}!
-   */
-  private Node<K, V> addNode(
-      @Nullable K key, @Nullable V value, @Nullable Node<K, V> nextSibling) {
-    Node<K, V> node = new Node<K, V>(key, value);
-    if (head == null) { // empty list
-      head = tail = node;
-      keyToKeyHead.put(key, node);
-      keyToKeyTail.put(key, node);
-    } else if (nextSibling == null) { // non-empty list, add to tail
-      tail.next = node;
-      node.previous = tail;
-      Node<K, V> keyTail = keyToKeyTail.get(key);
-      if (keyTail == null) { // first for this key
-        keyToKeyHead.put(key, node);
-      } else {
-        keyTail.nextSibling = node;
-        node.previousSibling = keyTail;
-      }
-      keyToKeyTail.put(key, node);
-      tail = node;
-    } else { // non-empty list, insert before nextSibling
-      node.previous = nextSibling.previous;
-      node.previousSibling = nextSibling.previousSibling;
-      node.next = nextSibling;
-      node.nextSibling = nextSibling;
-      if (nextSibling.previousSibling == null) { // nextSibling was key head
-        keyToKeyHead.put(key, node);
-      } else {
-        nextSibling.previousSibling.nextSibling = node;
-      }
-      if (nextSibling.previous == null) { // nextSibling was head
-        head = node;
-      } else {
-        nextSibling.previous.next = node;
-      }
-      nextSibling.previous = node;
-      nextSibling.previousSibling = node;
-    }
-    keyCount.add(key);
-    return node;
-  }
-
-  /**
-   * Removes the specified node from the linked list. This method is only
-   * intended to be used from the {@code Iterator} classes. See also {@link
-   * LinkedListMultimap#removeAllNodes(Object)}.
-   */
-  private void removeNode(Node<K, V> node) {
-    if (node.previous != null) {
-      node.previous.next = node.next;
-    } else { // node was head
-      head = node.next;
-    }
-    if (node.next != null) {
-      node.next.previous = node.previous;
-    } else { // node was tail
-      tail = node.previous;
-    }
-    if (node.previousSibling != null) {
-      node.previousSibling.nextSibling = node.nextSibling;
-    } else if (node.nextSibling != null) { // node was key head
-      keyToKeyHead.put(node.key, node.nextSibling);
-    } else {
-      keyToKeyHead.remove(node.key); // don't leak a key-null entry
-    }
-    if (node.nextSibling != null) {
-      node.nextSibling.previousSibling = node.previousSibling;
-    } else if (node.previousSibling != null) { // node was key tail
-      keyToKeyTail.put(node.key, node.previousSibling);
-    } else {
-      keyToKeyTail.remove(node.key); // don't leak a key-null entry
-    }
-    keyCount.remove(node.key);
-  }
-
-  /** Removes all nodes for the specified key. */
-  private void removeAllNodes(@Nullable Object key) {
-    for (Iterator<V> i = new ValueForKeyIterator(key); i.hasNext();) {
-      i.next();
-      i.remove();
-    }
-  }
-
-  /** Helper method for verifying that an iterator element is present. */
-  private static void checkElement(@Nullable Object node) {
-    if (node == null) {
-      throw new NoSuchElementException();
-    }
-  }
-
-  /** An {@code Iterator} over all nodes. */
-  private class NodeIterator implements Iterator<Node<K, V>> {
-    Node<K, V> next = head;
-    Node<K, V> current;
-
-    public boolean hasNext() {
-      return next != null;
-    }
-    public Node<K, V> next() {
-      checkElement(next);
-      current = next;
-      next = next.next;
-      return current;
-    }
-    public void remove() {
-      checkState(current != null);
-      removeNode(current);
-      current = null;
-    }
-  }
-
-  /** An {@code Iterator} over distinct keys in key head order. */
-  private class DistinctKeyIterator implements Iterator<K> {
-    final Set<K> seenKeys = new HashSet<K>(Maps.capacity(keySet().size()));
-    Node<K, V> next = head;
-    Node<K, V> current;
-
-    public boolean hasNext() {
-      return next != null;
-    }
-    public K next() {
-      checkElement(next);
-      current = next;
-      seenKeys.add(current.key);
-      do { // skip ahead to next unseen key
-        next = next.next;
-      } while ((next != null) && !seenKeys.add(next.key));
-      return current.key;
-    }
-    public void remove() {
-      checkState(current != null);
-      removeAllNodes(current.key);
-      current = null;
-    }
-  }
-
-  /** A {@code ListIterator} over values for a specified key. */
-  private class ValueForKeyIterator implements ListIterator<V> {
-    final Object key;
-    int nextIndex;
-    Node<K, V> next;
-    Node<K, V> current;
-    Node<K, V> previous;
-
-    /** Constructs a new iterator over all values for the specified key. */
-    ValueForKeyIterator(@Nullable Object key) {
-      this.key = key;
-      next = keyToKeyHead.get(key);
-    }
-
-    /**
-     * Constructs a new iterator over all values for the specified key starting
-     * at the specified index. This constructor is optimized so that it starts
-     * at either the head or the tail, depending on which is closer to the
-     * specified index. This allows adds to the tail to be done in constant
-     * time.
-     *
-     * @throws IndexOutOfBoundsException if index is invalid
-     */
-    public ValueForKeyIterator(@Nullable Object key, int index) {
-      int size = keyCount.count(key);
-      Preconditions.checkPositionIndex(index, size);
-      if (index >= (size / 2)) {
-        previous = keyToKeyTail.get(key);
-        nextIndex = size;
-        while (index++ < size) {
-          previous();
-        }
-      } else {
-        next = keyToKeyHead.get(key);
-        while (index-- > 0) {
-          next();
-        }
-      }
-      this.key = key;
-      current = null;
-    }
-
-    public boolean hasNext() {
-      return next != null;
-    }
-
-    public V next() {
-      checkElement(next);
-      previous = current = next;
-      next = next.nextSibling;
-      nextIndex++;
-      return current.value;
-    }
-
-    public boolean hasPrevious() {
-      return previous != null;
-    }
-
-    public V previous() {
-      checkElement(previous);
-      next = current = previous;
-      previous = previous.previousSibling;
-      nextIndex--;
-      return current.value;
-    }
-
-    public int nextIndex() {
-      return nextIndex;
-    }
-
-    public int previousIndex() {
-      return nextIndex - 1;
-    }
-
-    public void remove() {
-      checkState(current != null);
-      if (current != next) { // removing next element
-        previous = current.previousSibling;
-        nextIndex--;
-      } else {
-        next = current.nextSibling;
-      }
-      removeNode(current);
-      current = null;
-    }
-
-    public void set(V value) {
-      checkState(current != null);
-      current.value = value;
-    }
-
-    @SuppressWarnings("unchecked")
-    public void add(V value) {
-      previous = addNode((K) key, value, next);
-      nextIndex++;
-      current = null;
-    }
-  }
-
-  // Query Operations
-
-  public int size() {
-    return keyCount.size();
-  }
-
-  public boolean isEmpty() {
-    return head == null;
-  }
-
-  public boolean containsKey(@Nullable Object key) {
-    return keyToKeyHead.containsKey(key);
-  }
-
-  public boolean containsValue(@Nullable Object value) {
-    for (Iterator<Node<K, V>> i = new NodeIterator(); i.hasNext();) {
-      if (Objects.equal(i.next().value, value)) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  public boolean containsEntry(@Nullable Object key, @Nullable Object value) {
-    for (Iterator<V> i = new ValueForKeyIterator(key); i.hasNext();) {
-      if (Objects.equal(i.next(), value)) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  // Modification Operations
-
-  /**
-   * Stores a key-value pair in the multimap.
-   *
-   * @param key key to store in the multimap
-   * @param value value to store in the multimap
-   * @return {@code true} always
-   */
-  public boolean put(@Nullable K key, @Nullable V value) {
-    addNode(key, value, null);
-    return true;
-  }
-
-  public boolean remove(@Nullable Object key, @Nullable Object value) {
-    Iterator<V> values = new ValueForKeyIterator(key);
-    while (values.hasNext()) {
-      if (Objects.equal(values.next(), value)) {
-        values.remove();
-        return true;
-      }
-    }
-    return false;
-  }
-
-  // Bulk Operations
-
-  public boolean putAll(@Nullable K key, Iterable<? extends V> values) {
-    boolean changed = false;
-    for (V value : values) {
-      changed |= put(key, value);
-    }
-    return changed;
-  }
-
-  public boolean putAll(Multimap<? extends K, ? extends V> multimap) {
-    boolean changed = false;
-    for (Entry<? extends K, ? extends V> entry : multimap.entries()) {
-      changed |= put(entry.getKey(), entry.getValue());
-    }
-    return changed;
-  }
-
-  /**
-   * {@inheritDoc}
-   *
-   * <p>If any entries for the specified {@code key} already exist in the
-   * multimap, their values are changed in-place without affecting the iteration
-   * order.
-   *
-   * <p>The returned list is immutable and implements
-   * {@link java.util.RandomAccess}.
-   */
-  public List<V> replaceValues(@Nullable K key, Iterable<? extends V> values) {
-    List<V> oldValues = getCopy(key);
-    ListIterator<V> keyValues = new ValueForKeyIterator(key);
-    Iterator<? extends V> newValues = values.iterator();
-
-    // Replace existing values, if any.
-    while (keyValues.hasNext() && newValues.hasNext()) {
-      keyValues.next();
-      keyValues.set(newValues.next());
-    }
-
-    // Remove remaining old values, if any.
-    while (keyValues.hasNext()) {
-      keyValues.next();
-      keyValues.remove();
-    }
-
-    // Add remaining new values, if any.
-    while (newValues.hasNext()) {
-      keyValues.add(newValues.next());
-    }
-
-    return oldValues;
-  }
-
-  private List<V> getCopy(@Nullable Object key) {
-    return unmodifiableList(Lists.newArrayList(new ValueForKeyIterator(key)));
-  }
-
-  /**
-   * {@inheritDoc}
-   *
-   * <p>The returned list is immutable and implements
-   * {@link java.util.RandomAccess}.
-   */
-  public List<V> removeAll(@Nullable Object key) {
-    List<V> oldValues = getCopy(key);
-    removeAllNodes(key);
-    return oldValues;
-  }
-
-  public void clear() {
-    head = null;
-    tail = null;
-    keyCount.clear();
-    keyToKeyHead.clear();
-    keyToKeyTail.clear();
-  }
-
-  // Views
-
-  /**
-   * {@inheritDoc}
-   *
-   * <p>If the multimap is modified while an iteration over the list is in
-   * progress (except through the iterator's own {@code add}, {@code set} or
-   * {@code remove} operations) the results of the iteration are undefined.
-   *
-   * <p>The returned list is not serializable and does not have random access.
-   */
-  public List<V> get(final @Nullable K key) {
-    return new AbstractSequentialList<V>() {
-      @Override public int size() {
-        return keyCount.count(key);
-      }
-      @Override public ListIterator<V> listIterator(int index) {
-        return new ValueForKeyIterator(key, index);
-      }
-      @Override public boolean removeAll(Collection<?> c) {
-        return Iterators.removeAll(iterator(), c);
-      }
-      @Override public boolean retainAll(Collection<?> c) {
-        return Iterators.retainAll(iterator(), c);
-      }
-    };
-  }
-
-  private transient Set<K> keySet;
-
-  public Set<K> keySet() {
-    Set<K> result = keySet;
-    if (result == null) {
-      keySet = result = new AbstractSet<K>() {
-        @Override public int size() {
-          return keyCount.elementSet().size();
-        }
-        @Override public Iterator<K> iterator() {
-          return new DistinctKeyIterator();
-        }
-        @Override public boolean contains(Object key) { // for performance
-          return keyCount.contains(key);
-        }
-      };
-    }
-    return result;
-  }
-
-  private transient Multiset<K> keys;
-
-  public Multiset<K> keys() {
-    Multiset<K> result = keys;
-    if (result == null) {
-      keys = result = new MultisetView();
-    }
-    return result;
-  }
-
-  private class MultisetView extends AbstractCollection<K>
-      implements Multiset<K> {
-
-    @Override public int size() {
-      return keyCount.size();
-    }
-
-    @Override public Iterator<K> iterator() {
-      final Iterator<Node<K, V>> nodes = new NodeIterator();
-      return new Iterator<K>() {
-        public boolean hasNext() {
-          return nodes.hasNext();
-        }
-        public K next() {
-          return nodes.next().key;
-        }
-        public void remove() {
-          nodes.remove();
-        }
-      };
-    }
-
-    public int count(@Nullable Object key) {
-      return keyCount.count(key);
-    }
-
-    public int add(@Nullable K key, int occurrences) {
-      throw new UnsupportedOperationException();
-    }
-
-    public int remove(@Nullable Object key, int occurrences) {
-      checkArgument(occurrences >= 0);
-      int oldCount = count(key);
-      Iterator<V> values = new ValueForKeyIterator(key);
-      while ((occurrences-- > 0) && values.hasNext()) {
-        values.next();
-        values.remove();
-      }
-      return oldCount;
-    }
-
-    public int setCount(K element, int count) {
-      return setCountImpl(this, element, count);
-    }
-
-    public boolean setCount(K element, int oldCount, int newCount) {
-      return setCountImpl(this, element, oldCount, newCount);
-    }
-
-    @Override public boolean removeAll(Collection<?> c) {
-      return Iterators.removeAll(iterator(), c);
-    }
-
-    @Override public boolean retainAll(Collection<?> c) {
-      return Iterators.retainAll(iterator(), c);
-    }
-
-    public Set<K> elementSet() {
-      return keySet();
-    }
-
-    public Set<Entry<K>> entrySet() {
-      // TODO: lazy init?
-      return new AbstractSet<Entry<K>>() {
-        @Override public int size() {
-          return keyCount.elementSet().size();
-        }
-
-        @Override public Iterator<Entry<K>> iterator() {
-          final Iterator<K> keyIterator = new DistinctKeyIterator();
-          return new Iterator<Entry<K>>() {
-            public boolean hasNext() {
-              return keyIterator.hasNext();
-            }
-            public Entry<K> next() {
-              final K key = keyIterator.next();
-              return new Multisets.AbstractEntry<K>() {
-                public K getElement() {
-                  return key;
-                }
-                public int getCount() {
-                  return keyCount.count(key);
-                }
-              };
-            }
-            public void remove() {
-              keyIterator.remove();
-            }
-          };
-        }
-      };
-    }
-
-    @Override public boolean equals(@Nullable Object object) {
-      return keyCount.equals(object);
-    }
-
-    @Override public int hashCode() {
-      return keyCount.hashCode();
-    }
-
-    @Override public String toString() {
-      return keyCount.toString(); // XXX observe order?
-    }
-  }
-
-  private transient Collection<V> valuesCollection;
-
-  /**
-   * {@inheritDoc}
-   *
-   * <p>The iterator generated by the returned collection traverses the values
-   * in the order they were added to the multimap.
-   */
-  public Collection<V> values() {
-    Collection<V> result = valuesCollection;
-    if (result == null) {
-      valuesCollection = result = new AbstractCollection<V>() {
-        @Override public int size() {
-          return keyCount.size();
-        }
-        @Override public Iterator<V> iterator() {
-          final Iterator<Node<K, V>> nodes = new NodeIterator();
-          return new Iterator<V>() {
-            public boolean hasNext() {
-              return nodes.hasNext();
-            }
-            public V next() {
-              return nodes.next().value;
-            }
-            public void remove() {
-              nodes.remove();
-            }
-          };
-        }
-      };
-    }
-    return result;
-  }
-
-  private transient Collection<Entry<K, V>> entries;
-
-  /**
-   * {@inheritDoc}
-   *
-   * <p>The iterator generated by the returned collection traverses the entries
-   * in the order they were added to the multimap.
-   *
-   * <p>An entry's {@link Entry#getKey} method always returns the same key,
-   * regardless of what happens subsequently. As long as the corresponding
-   * key-value mapping is not removed from the multimap, {@link Entry#getValue}
-   * returns the value from the multimap, which may change over time, and {@link
-   * Entry#setValue} modifies that value. Removing the mapping from the
-   * multimap does not alter the value returned by {@code getValue()}, though a
-   * subsequent {@code setValue()} call won't update the multimap but will lead
-   * to a revised value being returned by {@code getValue()}.
-   */
-  public Collection<Entry<K, V>> entries() {
-    Collection<Entry<K, V>> result = entries;
-    if (result == null) {
-      entries = result = new AbstractCollection<Entry<K, V>>() {
-        @Override public int size() {
-          return keyCount.size();
-        }
-
-        @Override public Iterator<Entry<K, V>> iterator() {
-          final Iterator<Node<K, V>> nodes = new NodeIterator();
-          return new Iterator<Entry<K, V>>() {
-            public boolean hasNext() {
-              return nodes.hasNext();
-            }
-
-            public Entry<K, V> next() {
-              final Node<K, V> node = nodes.next();
-              return new AbstractMapEntry<K, V>() {
-                @Override public K getKey() {
-                  return node.key;
-                }
-                @Override public V getValue() {
-                  return node.value;
-                }
-                @Override public V setValue(V value) {
-                  V oldValue = node.value;
-                  node.value = value;
-                  return oldValue;
-                }
-              };
-            }
-
-            public void remove() {
-              nodes.remove();
-            }
-          };
-        }
-      };
-    }
-    return result;
-  }
-
-  private class AsMapEntries extends AbstractSet<Entry<K, Collection<V>>> {
-
-    // TODO: Override contains() and remove() for better performance.
-
-    @Override public int size() {
-      return keyCount.elementSet().size();
-    }
-
-    @Override public Iterator<Entry<K, Collection<V>>> iterator() {
-      final Iterator<K> keyIterator = new DistinctKeyIterator();
-      return new Iterator<Entry<K, Collection<V>>>() {
-        public boolean hasNext() {
-          return keyIterator.hasNext();
-        }
-
-        public Entry<K, Collection<V>> next() {
-          final K key = keyIterator.next();
-          return new AbstractMapEntry<K, Collection<V>>() {
-            @Override public K getKey() {
-              return key;
-            }
-
-            @Override public Collection<V> getValue() {
-              return LinkedListMultimap.this.get(key);
-            }
-          };
-        }
-
-        public void remove() {
-          keyIterator.remove();
-        }
-      };
-    }
-  }
-
-  private transient Map<K, Collection<V>> map;
-
-  public Map<K, Collection<V>> asMap() {
-    Map<K, Collection<V>> result = map;
-    if (result == null) {
-      map = result = new AbstractMap<K, Collection<V>>() {
-        Set<Entry<K, Collection<V>>> entrySet;
-
-        @Override public Set<Entry<K, Collection<V>>> entrySet() {
-          Set<Entry<K, Collection<V>>> result = entrySet;
-          if (result == null) {
-            entrySet = result = new AsMapEntries();
-          }
-          return result;
-        }
-
-        // The following methods are included for performance.
-
-        @Override public boolean containsKey(@Nullable Object key) {
-          return LinkedListMultimap.this.containsKey(key);
-        }
-
-        @SuppressWarnings("unchecked")
-        @Override public Collection<V> get(@Nullable Object key) {
-          Collection<V> collection = LinkedListMultimap.this.get((K) key);
-          return collection.isEmpty() ? null : collection;
-        }
-
-        @Override public Collection<V> remove(@Nullable Object key) {
-          Collection<V> collection = removeAll(key);
-          return collection.isEmpty() ? null : collection;
-        }
-      };
-    }
-
-    return result;
-  }
-
-  // Comparison and hashing
-
-  /**
-   * Compares the specified object to this multimap for equality.
-   *
-   * <p>Two {@code ListMultimap} instances are equal if, for each key, they
-   * contain the same values in the same order. If the value orderings disagree,
-   * the multimaps will not be considered equal.
-   */
-  @Override public boolean equals(@Nullable Object other) {
-    if (other == this) {
-      return true;
-    }
-    if (other instanceof Multimap) {
-      Multimap<?, ?> that = (Multimap<?, ?>) other;
-      return this.asMap().equals(that.asMap());
-    }
-    return false;
-  }
-
-  /**
-   * Returns the hash code for this multimap.
-   *
-   * <p>The hash code of a multimap is defined as the hash code of the map view,
-   * as returned by {@link Multimap#asMap}.
-   */
-  @Override public int hashCode() {
-    return asMap().hashCode();
-  }
-
-  /**
-   * Returns a string representation of the multimap, generated by calling
-   * {@code toString} on the map returned by {@link Multimap#asMap}.
-   *
-   * @return a string representation of the multimap
-   */
-  @Override public String toString() {
-    return asMap().toString();
-  }
-
-  /**
-   * @serialData the number of distinct keys, and then for each distinct key:
-   *     the first key, the number of values for that key, and the key's values,
-   *     followed by successive keys and values from the entries() ordering
-   */
-  private void writeObject(ObjectOutputStream stream) throws IOException {
-    stream.defaultWriteObject();
-    stream.writeInt(size());
-    for (Entry<K, V> entry : entries()) {
-      stream.writeObject(entry.getKey());
-      stream.writeObject(entry.getValue());
-    }
-  }
-
-  private void readObject(ObjectInputStream stream)
-      throws IOException, ClassNotFoundException {
-    stream.defaultReadObject();
-    keyCount = LinkedHashMultiset.create();
-    keyToKeyHead = Maps.newHashMap();
-    keyToKeyTail = Maps.newHashMap();
-    int size = stream.readInt();
-    for (int i = 0; i < size; i++) {
-      @SuppressWarnings("unchecked") // reading data stored by writeObject
-      K key = (K) stream.readObject();
-      @SuppressWarnings("unchecked") // reading data stored by writeObject
-      V value = (V) stream.readObject();
-      put(key, value);
-    }
-  }
-
-  private static final long serialVersionUID = 0;
-}
diff --git a/src/com/google/common/collect/ListMultimap.java b/src/com/google/common/collect/ListMultimap.java
deleted file mode 100644
index 8b20e25..0000000
--- a/src/com/google/common/collect/ListMultimap.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-import javax.annotation.Nullable;
-
-/**
- * A {@code Multimap} that can hold duplicate key-value pairs and that maintains
- * the insertion ordering of values for a given key.
- *
- * <p>The {@link #get}, {@link #removeAll}, and {@link #replaceValues} methods
- * each return a {@link List} of values. Though the method signature doesn't say
- * so explicitly, the map returned by {@link #asMap} has {@code List} values.
- *
- * @author Jared Levy
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible
-public interface ListMultimap<K, V> extends Multimap<K, V> {
-  /**
-   * {@inheritDoc}
-   *
-   * <p>Because the values for a given key may have duplicates and follow the
-   * insertion ordering, this method returns a {@link List}, instead of the
-   * {@link java.util.Collection} specified in the {@link Multimap} interface.
-   */
-  List<V> get(@Nullable K key);
-
-  /**
-   * {@inheritDoc}
-   *
-   * <p>Because the values for a given key may have duplicates and follow the
-   * insertion ordering, this method returns a {@link List}, instead of the
-   * {@link java.util.Collection} specified in the {@link Multimap} interface.
-   */
-  List<V> removeAll(@Nullable Object key);
-
-  /**
-   * {@inheritDoc}
-   *
-   * <p>Because the values for a given key may have duplicates and follow the
-   * insertion ordering, this method returns a {@link List}, instead of the
-   * {@link java.util.Collection} specified in the {@link Multimap} interface.
-   */
-  List<V> replaceValues(K key, Iterable<? extends V> values);
-
-  /**
-   * {@inheritDoc}
-   *
-   * <p>Though the method signature doesn't say so explicitly, the returned map
-   * has {@link List} values.
-   */
-  Map<K, Collection<V>> asMap();
-
-  /**
-   * Compares the specified object to this multimap for equality.
-   *
-   * <p>Two {@code ListMultimap} instances are equal if, for each key, they
-   * contain the same values in the same order. If the value orderings disagree,
-   * the multimaps will not be considered equal.
-   */
-  boolean equals(@Nullable Object obj);
-}
diff --git a/src/com/google/common/collect/Lists.java b/src/com/google/common/collect/Lists.java
deleted file mode 100644
index f616ab4..0000000
--- a/src/com/google/common/collect/Lists.java
+++ /dev/null
@@ -1,505 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Function;
-
-import java.io.Serializable;
-import java.util.AbstractList;
-import java.util.AbstractSequentialList;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.ListIterator;
-import java.util.RandomAccess;
-
-import javax.annotation.Nullable;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkElementIndex;
-import static com.google.common.base.Preconditions.checkNotNull;
-
-/**
- * Static utility methods pertaining to {@link List} instances. Also see this
- * class's counterparts {@link Sets} and {@link Maps}.
- *
- * @author Kevin Bourrillion
- * @author Mike Bostock
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible
-public final class Lists {
-  private Lists() {}
-
-  // ArrayList
-
-  /**
-   * Creates a <i>mutable</i>, empty {@code ArrayList} instance.
-   *
-   * <p><b>Note:</b> if mutability is not required, use {@link
-   * ImmutableList#of()} instead.
-   *
-   * @return a new, empty {@code ArrayList}
-   */
-  @GwtCompatible(serializable = true)
-  public static <E> ArrayList<E> newArrayList() {
-    return new ArrayList<E>();
-  }
-
-  /**
-   * Creates a <i>mutable</i> {@code ArrayList} instance containing the given
-   * elements.
-   *
-   * <p><b>Note:</b> if mutability is not required and the elements are
-   * non-null, use {@link ImmutableList#of(Object[])} instead.
-   *
-   * @param elements the elements that the list should contain, in order
-   * @return a new {@code ArrayList} containing those elements
-   */
-  @GwtCompatible(serializable = true)
-  public static <E> ArrayList<E> newArrayList(E... elements) {
-    checkNotNull(elements); // for GWT
-    // Avoid integer overflow when a large array is passed in
-    int capacity = computeArrayListCapacity(elements.length);
-    ArrayList<E> list = new ArrayList<E>(capacity);
-    Collections.addAll(list, elements);
-    return list;
-  }
-
-  @VisibleForTesting static int computeArrayListCapacity(int arraySize) {
-    checkArgument(arraySize >= 0);
-
-    // TODO: Figure out the right behavior, and document it
-    return (int) Math.min(5L + arraySize + (arraySize / 10), Integer.MAX_VALUE);
-  }
-
-  /**
-   * Creates a <i>mutable</i> {@code ArrayList} instance containing the given
-   * elements.
-   *
-   * <p><b>Note:</b> if mutability is not required and the elements are
-   * non-null, use {@link ImmutableList#copyOf(Iterator)} instead.
-   *
-   * @param elements the elements that the list should contain, in order
-   * @return a new {@code ArrayList} containing those elements
-   */
-  @GwtCompatible(serializable = true)
-  public static <E> ArrayList<E> newArrayList(Iterable<? extends E> elements) {
-    checkNotNull(elements); // for GWT
-    // Let ArrayList's sizing logic work, if possible
-    if (elements instanceof Collection) {
-      @SuppressWarnings("unchecked")
-      Collection<? extends E> collection = (Collection<? extends E>) elements;
-      return new ArrayList<E>(collection);
-    } else {
-      return newArrayList(elements.iterator());
-    }
-  }
-
-  /**
-   * Creates a <i>mutable</i> {@code ArrayList} instance containing the given
-   * elements.
-   *
-   * <p><b>Note:</b> if mutability is not required and the elements are
-   * non-null, use {@link ImmutableList#copyOf(Iterator)} instead.
-   *
-   * @param elements the elements that the list should contain, in order
-   * @return a new {@code ArrayList} containing those elements
-   */
-  @GwtCompatible(serializable = true)
-  public static <E> ArrayList<E> newArrayList(Iterator<? extends E> elements) {
-    checkNotNull(elements); // for GWT
-    ArrayList<E> list = newArrayList();
-    while (elements.hasNext()) {
-      list.add(elements.next());
-    }
-    return list;
-  }
-
-  /**
-   * Creates an {@code ArrayList} instance backed by an array of the
-   * <i>exact</i> size specified; equivalent to
-   * {@link ArrayList#ArrayList(int)}.
-   *
-   * <p><b>Note:</b> if you know the exact size your list will be, consider
-   * using a fixed-size list ({@link Arrays#asList(Object[])}) or an {@link
-   * ImmutableList} instead of a growable {@link ArrayList}.
-   *
-   * <p><b>Note:</b> If you have only an <i>estimate</i> of the eventual size of
-   * the list, consider padding this estimate by a suitable amount, or simply
-   * use {@link #newArrayListWithExpectedSize(int)} instead.
-   *
-   * @param initialArraySize the exact size of the initial backing array for
-   *     the returned array list ({@code ArrayList} documentation calls this
-   *     value the "capacity")
-   * @return a new, empty {@code ArrayList} which is guaranteed not to resize
-   *     itself unless its size reaches {@code initialArraySize + 1}
-   * @throws IllegalArgumentException if {@code initialArraySize} is negative
-   */
-  @GwtCompatible(serializable = true)
-  public static <E> ArrayList<E> newArrayListWithCapacity(
-      int initialArraySize) {
-    return new ArrayList<E>(initialArraySize);
-  }
-
-  /**
-   * Creates an {@code ArrayList} instance sized appropriately to hold an
-   * <i>estimated</i> number of elements without resizing. A small amount of
-   * padding is added in case the estimate is low.
-   *
-   * <p><b>Note:</b> If you know the <i>exact</i> number of elements the list
-   * will hold, or prefer to calculate your own amount of padding, refer to
-   * {@link #newArrayListWithCapacity(int)}.
-   *
-   * @param estimatedSize an estimate of the eventual {@link List#size()} of
-   *     the new list
-   * @return a new, empty {@code ArrayList}, sized appropriately to hold the
-   *     estimated number of elements
-   * @throws IllegalArgumentException if {@code estimatedSize} is negative
-   */
-  @GwtCompatible(serializable = true)
-  public static <E> ArrayList<E> newArrayListWithExpectedSize(
-      int estimatedSize) {
-    return new ArrayList<E>(computeArrayListCapacity(estimatedSize));
-  }
-
-  // LinkedList
-
-  /**
-   * Creates an empty {@code LinkedList} instance.
-   *
-   * <p><b>Note:</b> if you need an immutable empty {@link List}, use
-   * {@link Collections#emptyList} instead.
-   *
-   * @return a new, empty {@code LinkedList}
-   */
-  @GwtCompatible(serializable = true)
-  public static <E> LinkedList<E> newLinkedList() {
-    return new LinkedList<E>();
-  }
-
-  /**
-   * Creates a {@code LinkedList} instance containing the given elements.
-   *
-   * @param elements the elements that the list should contain, in order
-   * @return a new {@code LinkedList} containing those elements
-   */
-  @GwtCompatible(serializable = true)
-  public static <E> LinkedList<E> newLinkedList(
-      Iterable<? extends E> elements) {
-    LinkedList<E> list = newLinkedList();
-    for (E element : elements) {
-      list.add(element);
-    }
-    return list;
-  }
-
-  /**
-   * Returns an unmodifiable list containing the specified first element and
-   * backed by the specified array of additional elements. Changes to the {@code
-   * rest} array will be reflected in the returned list. Unlike {@link
-   * Arrays#asList}, the returned list is unmodifiable.
-   *
-   * <p>This is useful when a varargs method needs to use a signature such as
-   * {@code (Foo firstFoo, Foo... moreFoos)}, in order to avoid overload
-   * ambiguity or to enforce a minimum argument count.
-   *
-   * <p>The returned list is serializable and implements {@link RandomAccess}.
-   *
-   * @param first the first element
-   * @param rest an array of additional elements, possibly empty
-   * @return an unmodifiable list containing the specified elements
-   */
-  public static <E> List<E> asList(@Nullable E first, E[] rest) {
-    return new OnePlusArrayList<E>(first, rest);
-  }
-
-  /** @see Lists#asList(Object, Object[]) */
-  private static class OnePlusArrayList<E> extends AbstractList<E>
-      implements Serializable, RandomAccess {
-    final E first;
-    final E[] rest;
-
-    OnePlusArrayList(@Nullable E first, E[] rest) {
-      this.first = first;
-      this.rest = checkNotNull(rest);
-    }
-    @Override public int size() {
-      return rest.length + 1;
-    }
-    @Override public E get(int index) {
-      // check explicitly so the IOOBE will have the right message
-      checkElementIndex(index, size());
-      return (index == 0) ? first : rest[index - 1];
-    }
-    private static final long serialVersionUID = 0;
-  }
-
-  /**
-   * Returns an unmodifiable list containing the specified first and second
-   * element, and backed by the specified array of additional elements. Changes
-   * to the {@code rest} array will be reflected in the returned list. Unlike
-   * {@link Arrays#asList}, the returned list is unmodifiable.
-   *
-   * <p>This is useful when a varargs method needs to use a signature such as
-   * {@code (Foo firstFoo, Foo secondFoo, Foo... moreFoos)}, in order to avoid
-   * overload ambiguity or to enforce a minimum argument count.
-   *
-   * <p>The returned list is serializable and implements {@link RandomAccess}.
-   *
-   * @param first the first element
-   * @param second the second element
-   * @param rest an array of additional elements, possibly empty
-   * @return an unmodifiable list containing the specified elements
-   */
-  public static <E> List<E> asList(
-      @Nullable E first, @Nullable E second, E[] rest) {
-    return new TwoPlusArrayList<E>(first, second, rest);
-  }
-
-  /** @see Lists#asList(Object, Object, Object[]) */
-  private static class TwoPlusArrayList<E> extends AbstractList<E>
-      implements Serializable, RandomAccess {
-    final E first;
-    final E second;
-    final E[] rest;
-
-    TwoPlusArrayList(@Nullable E first, @Nullable E second, E[] rest) {
-      this.first = first;
-      this.second = second;
-      this.rest = checkNotNull(rest);
-    }
-    @Override public int size() {
-      return rest.length + 2;
-    }
-    @Override public E get(int index) {
-      switch (index) {
-        case 0:
-          return first;
-        case 1:
-          return second;
-        default:
-          // check explicitly so the IOOBE will have the right message
-          checkElementIndex(index, size());
-          return rest[index - 2];
-      }
-    }
-    private static final long serialVersionUID = 0;
-  }
-
-  /**
-   * Returns a list that applies {@code function} to each element of {@code
-   * fromList}. The returned list is a transformed view of {@code fromList};
-   * changes to {@code fromList} will be reflected in the returned list and vice
-   * versa.
-   *
-   * <p>Since functions are not reversible, the transform is one-way and new
-   * items cannot be stored in the returned list. The {@code add},
-   * {@code addAll} and {@code set} methods are unsupported in the returned
-   * list.
-   *
-   * <p>The function is applied lazily, invoked when needed. This is necessary
-   * for the returned list to be a view, but it means that the function will be
-   * applied many times for bulk operations like {@link List#contains} and
-   * {@link List#hashCode}. For this to perform well, {@code function} should be
-   * fast. To avoid lazy evaluation when the returned list doesn't need to be a
-   * view, copy the returned list into a new list of your choosing.
-   *
-   * <p>If {@code fromList} implements {@link RandomAccess}, so will the
-   * returned list. The returned list always implements {@link Serializable},
-   * but serialization will succeed only when {@code fromList} and
-   * {@code function} are serializable. The returned list is threadsafe if the
-   * supplied list and function are.
-   */
-  public static <F, T> List<T> transform(
-      List<F> fromList, Function<? super F, ? extends T> function) {
-    return (fromList instanceof RandomAccess)
-        ? new TransformingRandomAccessList<F, T>(fromList, function)
-        : new TransformingSequentialList<F, T>(fromList, function);
-  }
-
-  /**
-   * Implementation of a sequential transforming list.
-   *
-   * @see Lists#transform
-   */
-  private static class TransformingSequentialList<F, T>
-      extends AbstractSequentialList<T> implements Serializable {
-    final List<F> fromList;
-    final Function<? super F, ? extends T> function;
-
-    TransformingSequentialList(
-        List<F> fromList, Function<? super F, ? extends T> function) {
-      this.fromList = checkNotNull(fromList);
-      this.function = checkNotNull(function);
-    }
-    /**
-     * The default implementation inherited is based on iteration and removal of
-     * each element which can be overkill. That's why we forward this call
-     * directly to the backing list.
-     */
-    @Override public void clear() {
-      fromList.clear();
-    }
-    @Override public int size() {
-      return fromList.size();
-    }
-    @Override public ListIterator<T> listIterator(final int index) {
-      final ListIterator<F> delegate = fromList.listIterator(index);
-      return new ListIterator<T>() {
-        public void add(T e) {
-          throw new UnsupportedOperationException();
-        }
-
-        public boolean hasNext() {
-          return delegate.hasNext();
-        }
-
-        public boolean hasPrevious() {
-          return delegate.hasPrevious();
-        }
-
-        public T next() {
-          return function.apply(delegate.next());
-        }
-
-        public int nextIndex() {
-          return delegate.nextIndex();
-        }
-
-        public T previous() {
-          return function.apply(delegate.previous());
-        }
-
-        public int previousIndex() {
-          return delegate.previousIndex();
-        }
-
-        public void remove() {
-          delegate.remove();
-        }
-
-        public void set(T e) {
-          throw new UnsupportedOperationException("not supported");
-        }
-      };
-    }
-
-    private static final long serialVersionUID = 0;
-  }
-
-  /**
-   * Implementation of a transforming random access list. We try to make as many
-   * of these methods pass-through to the source list as possible so that the
-   * performance characteristics of the source list and transformed list are
-   * similar.
-   *
-   * @see Lists#transform
-   */
-  private static class TransformingRandomAccessList<F, T>
-      extends AbstractList<T> implements RandomAccess, Serializable {
-    final List<F> fromList;
-    final Function<? super F, ? extends T> function;
-
-    TransformingRandomAccessList(
-        List<F> fromList, Function<? super F, ? extends T> function) {
-      this.fromList = checkNotNull(fromList);
-      this.function = checkNotNull(function);
-    }
-    @Override public void clear() {
-      fromList.clear();
-    }
-    @Override public T get(int index) {
-      return function.apply(fromList.get(index));
-    }
-    @Override public boolean isEmpty() {
-      return fromList.isEmpty();
-    }
-    @Override public T remove(int index) {
-      return function.apply(fromList.remove(index));
-    }
-    @Override public int size() {
-      return fromList.size();
-    }
-    private static final long serialVersionUID = 0;
-  }
-
-  /**
-   * Returns consecutive {@linkplain List#subList(int, int) sublists} of a list,
-   * each of the same size (the final list may be smaller). For example,
-   * partitioning a list containing {@code [a, b, c, d, e]} with a partition
-   * size of 3 yields {@code [[a, b, c], [d, e]]} -- an outer list containing
-   * two inner lists of three and two elements, all in the original order.
-   *
-   * <p>The outer list is unmodifiable, but reflects the latest state of the
-   * source list. The inner lists are sublist views of the original list,
-   * produced on demand using {@link List#subList(int, int)}, and are subject
-   * to all the usual caveats about modification as explained in that API.
-   *
-   * @param list the list to return consecutive sublists of
-   * @param size the desired size of each sublist (the last may be
-   *     smaller)
-   * @return a list of consecutive sublists
-   * @throws IllegalArgumentException if {@code partitionSize} is nonpositive
-   */
-  public static <T> List<List<T>> partition(List<T> list, int size) {
-    checkNotNull(list);
-    checkArgument(size > 0);
-    return (list instanceof RandomAccess)
-        ? new RandomAccessPartition<T>(list, size)
-        : new Partition<T>(list, size);
-  }
-
-  private static class Partition<T> extends AbstractList<List<T>> {
-    final List<T> list;
-    final int size;
-
-    Partition(List<T> list, int size) {
-      this.list = list;
-      this.size = size;
-    }
-
-    @Override public List<T> get(int index) {
-      int listSize = size();
-      checkElementIndex(index, listSize);
-      int start = index * size;
-      int end = Math.min(start + size, list.size());
-      return Platform.subList(list, start, end);
-    }
-
-    @Override public int size() {
-      return (list.size() + size - 1) / size;
-    }
-
-    @Override public boolean isEmpty() {
-      return list.isEmpty();
-    }
-  }
-
-  private static class RandomAccessPartition<T> extends Partition<T>
-      implements RandomAccess {
-    RandomAccessPartition(List<T> list, int size) {
-      super(list, size);
-    }
-  }
-}
diff --git a/src/com/google/common/collect/MapConstraint.java b/src/com/google/common/collect/MapConstraint.java
deleted file mode 100644
index edf2513..0000000
--- a/src/com/google/common/collect/MapConstraint.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-
-import javax.annotation.Nullable;
-
-@GwtCompatible
-interface MapConstraint<K, V> {
-  /**
-   * Throws a suitable {@code RuntimeException} if the specified key or value is
-   * illegal. Typically this is either a {@link NullPointerException}, an
-   * {@link IllegalArgumentException}, or a {@link ClassCastException}, though
-   * an application-specific exception class may be used if appropriate.
-   */
-  void checkKeyValue(@Nullable K key, @Nullable V value);
-
-  /**
-   * Returns a brief human readable description of this constraint, such as
-   * "Not null".
-   */
-  String toString();
-}
diff --git a/src/com/google/common/collect/MapDifference.java b/src/com/google/common/collect/MapDifference.java
deleted file mode 100644
index fa10f86..0000000
--- a/src/com/google/common/collect/MapDifference.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-
-import java.util.Map;
-
-import javax.annotation.Nullable;
-
-/**
- * An object representing the differences between two maps.
- *
- * @author Kevin Bourrillion
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible
-public interface MapDifference<K, V> {
-  /**
-   * Returns {@code true} if there are no differences between the two maps;
-   * that is, if the maps are equal.
-   */
-  boolean areEqual();
-
-  /**
-   * Returns an unmodifiable map containing the entries from the left map whose
-   * keys are not present in the right map.
-   */
-  Map<K, V> entriesOnlyOnLeft();
-
-  /**
-   * Returns an unmodifiable map containing the entries from the right map whose
-   * keys are not present in the left map.
-   */
-  Map<K, V> entriesOnlyOnRight();
-
-  /**
-   * Returns an unmodifiable map containing the entries that appear in both
-   * maps; that is, the intersection of the two maps.
-   */
-  Map<K, V> entriesInCommon();
-
-  /**
-   * Returns an unmodifiable map describing keys that appear in both maps, but
-   * with different values.
-   */
-  Map<K, ValueDifference<V>> entriesDiffering();
-
-  /**
-   * Compares the specified object with this instance for equality. Returns
-   * {@code true} if the given object is also a {@code MapDifference} and the
-   * values returned by the {@link #entriesOnlyOnLeft()}, {@link
-   * #entriesOnlyOnRight()}, {@link #entriesInCommon()} and {@link
-   * #entriesDiffering()} of the two instances are equal.
-   */
-  boolean equals(@Nullable Object object);
-
-  /**
-   * Returns the hash code for this instance. This is defined as the hash code
-   * of <pre>   {@code
-   *
-   *   Arrays.asList(entriesOnlyOnLeft(), entriesOnlyOnRight(),
-   *       entriesInCommon(), entriesDiffering())}</pre>
-   */
-  int hashCode();
-
-  /**
-   * A difference between the mappings from two maps with the same key. The
-   * {@code leftValue()} and {@code rightValue} are not equal, and one but not
-   * both of them may be null.
-   */
-  interface ValueDifference<V> {
-    /**
-     * Returns the value from the left map (possibly null).
-     */
-    V leftValue();
-
-    /**
-     * Returns the value from the right map (possibly null).
-     */
-    V rightValue();
-
-    /**
-     * Two instances are considered equal if their {@link #leftValue()}
-     * values are equal and their {@link #rightValue()} values are also equal.
-     */
-    @Override boolean equals(@Nullable Object other);
-
-    /**
-     * The hash code equals the value
-     * {@code Arrays.asList(leftValue(), rightValue()).hashCode()}.
-     */
-    @Override int hashCode();
-  }
-
-}
diff --git a/src/com/google/common/collect/MapMaker.java b/src/com/google/common/collect/MapMaker.java
deleted file mode 100644
index 789e806..0000000
--- a/src/com/google/common/collect/MapMaker.java
+++ /dev/null
@@ -1,1119 +0,0 @@
-/*
- * Copyright (C) 2009 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-import com.google.common.annotations.GwtIncompatible;
-import com.google.common.base.FinalizableReferenceQueue;
-import com.google.common.base.FinalizableSoftReference;
-import com.google.common.base.FinalizableWeakReference;
-import com.google.common.base.Function;
-import com.google.common.collect.CustomConcurrentHashMap.ComputingStrategy;
-import com.google.common.collect.CustomConcurrentHashMap.Internals;
-
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.io.Serializable;
-import java.lang.ref.SoftReference;
-import java.lang.ref.WeakReference;
-import java.lang.reflect.Field;
-import java.util.Map;
-import java.util.TimerTask;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.TimeUnit;
-
-/**
- * A {@link ConcurrentMap} builder, providing any combination of these
- * features: {@linkplain SoftReference soft} or {@linkplain WeakReference
- * weak} keys, soft or weak values, timed expiration, and on-demand
- * computation of values. Usage example: <pre> {@code
- *
- *   ConcurrentMap<Key, Graph> graphs = new MapMaker()
- *       .concurrencyLevel(32)
- *       .softKeys()
- *       .weakValues()
- *       .expiration(30, TimeUnit.MINUTES)
- *       .makeComputingMap(
- *           new Function<Key, Graph>() {
- *             public Graph apply(Key key) {
- *               return createExpensiveGraph(key);
- *             }
- *           });}</pre>
- *
- * These features are all optional; {@code new MapMaker().makeMap()}
- * returns a valid concurrent map that behaves exactly like a
- * {@link ConcurrentHashMap}.
- *
- * The returned map is implemented as a hash table with similar performance
- * characteristics to {@link ConcurrentHashMap}. It supports all optional
- * operations of the {@code ConcurrentMap} interface. It does not permit
- * null keys or values. It is serializable; however, serializing a map that
- * uses soft or weak references can give unpredictable results.
- *
- * <p><b>Note:</b> by default, the returned map uses equality comparisons
- * (the {@link Object#equals(Object) equals} method) to determine equality
- * for keys or values. However, if {@link #weakKeys()} or {@link
- * #softKeys()} was specified, the map uses identity ({@code ==})
- * comparisons instead for keys. Likewise, if {@link #weakValues()} or
- * {@link #softValues()} was specified, the map uses identity comparisons
- * for values.
- *
- * <p>The returned map has <i>weakly consistent iteration</i>: an iterator
- * over one of the map's view collections may reflect some, all or none of
- * the changes made to the map after the iterator was created.
- *
- * <p>An entry whose key or value is reclaimed by the garbage collector
- * immediately disappears from the map. (If the default settings of strong
- * keys and strong values are used, this will never happen.) The client can
- * never observe a partially-reclaimed entry. Any {@link java.util.Map.Entry}
- * instance retrieved from the map's {@linkplain Map#entrySet() entry set}
- * is snapshot of that entry's state at the time of retrieval.
- *
- * <p>{@code new MapMaker().weakKeys().makeMap()} can almost always be
- * used as a drop-in replacement for {@link java.util.WeakHashMap}, adding
- * concurrency, asynchronous cleanup, identity-based equality for keys, and
- * great flexibility.
- *
- * @author Bob Lee
- * @author Kevin Bourrillion
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible(emulated = true)
-public final class MapMaker {
-  private Strength keyStrength = Strength.STRONG;
-  private Strength valueStrength = Strength.STRONG;
-  private long expirationNanos = 0;
-  private boolean useCustomMap;
-  private final CustomConcurrentHashMap.Builder builder
-      = new CustomConcurrentHashMap.Builder();
-
-  /**
-   * Constructs a new {@code MapMaker} instance with default settings,
-   * including strong keys, strong values, and no automatic expiration.
-   */
-  public MapMaker() {}
-
-  /**
-   * Sets a custom initial capacity (defaults to 16). Resizing this or
-   * any other kind of hash table is a relatively slow operation, so,
-   * when possible, it is a good idea to provide estimates of expected
-   * table sizes.
-   *
-   * @throws IllegalArgumentException if {@code initialCapacity} is
-   *   negative
-   * @throws IllegalStateException if an initial capacity was already set
-   */
-  public MapMaker initialCapacity(int initialCapacity) {
-    builder.initialCapacity(initialCapacity);
-    return this;
-  }
-
-  /**
-   * Guides the allowed concurrency among update operations. Used as a
-   * hint for internal sizing. The table is internally partitioned to try
-   * to permit the indicated number of concurrent updates without
-   * contention.  Because placement in hash tables is essentially random,
-   * the actual concurrency will vary. Ideally, you should choose a value
-   * to accommodate as many threads as will ever concurrently modify the
-   * table. Using a significantly higher value than you need can waste
-   * space and time, and a significantly lower value can lead to thread
-   * contention. But overestimates and underestimates within an order of
-   * magnitude do not usually have much noticeable impact. A value of one
-   * is appropriate when it is known that only one thread will modify and
-   * all others will only read. Defaults to 16.
-   *
-   * @throws IllegalArgumentException if {@code concurrencyLevel} is
-   *     nonpositive
-   * @throws IllegalStateException if a concurrency level was already set
-   */
-  @GwtIncompatible("java.util.concurrent.ConcurrentHashMap concurrencyLevel")
-  public MapMaker concurrencyLevel(int concurrencyLevel) {
-    builder.concurrencyLevel(concurrencyLevel);
-    return this;
-  }
-
-  /**
-   * Specifies that each key (not value) stored in the map should be
-   * wrapped in a {@link WeakReference} (by default, strong references
-   * are used).
-   *
-   * <p><b>Note:</b> the map will use identity ({@code ==}) comparison
-   * to determine equality of weak keys, which may not behave as you expect.
-   * For example, storing a key in the map and then attempting a lookup
-   * using a different but {@link Object#equals(Object) equals}-equivalent
-   * key will always fail.
-   *
-   * @throws IllegalStateException if the key strength was already set
-   * @see WeakReference
-   */
-  @GwtIncompatible("java.lang.ref.WeakReference")
-  public MapMaker weakKeys() {
-    return setKeyStrength(Strength.WEAK);
-  }
-
-  /**
-   * Specifies that each key (not value) stored in the map should be
-   * wrapped in a {@link SoftReference} (by default, strong references
-   * are used).
-   *
-   * <p><b>Note:</b> the map will use identity ({@code ==}) comparison
-   * to determine equality of soft keys, which may not behave as you expect.
-   * For example, storing a key in the map and then attempting a lookup
-   * using a different but {@link Object#equals(Object) equals}-equivalent
-   * key will always fail.
-   *
-   * @throws IllegalStateException if the key strength was already set
-   * @see SoftReference
-   */
-  @GwtIncompatible("java.lang.ref.SoftReference")
-  public MapMaker softKeys() {
-    return setKeyStrength(Strength.SOFT);
-  }
-
-  private MapMaker setKeyStrength(Strength strength) {
-    if (keyStrength != Strength.STRONG) {
-      throw new IllegalStateException("Key strength was already set to "
-          + keyStrength + ".");
-    }
-    keyStrength = strength;
-    useCustomMap = true;
-    return this;
-  }
-
-  /**
-   * Specifies that each value (not key) stored in the map should be
-   * wrapped in a {@link WeakReference} (by default, strong references
-   * are used).
-   *
-   * <p>Weak values will be garbage collected once they are weakly
-   * reachable. This makes them a poor candidate for caching; consider
-   * {@link #softValues()} instead.
-   *
-   * <p><b>Note:</b> the map will use identity ({@code ==}) comparison
-   * to determine equality of weak values. This will notably impact
-   * the behavior of {@link Map#containsValue(Object) containsValue},
-   * {@link ConcurrentMap#remove(Object, Object) remove(Object, Object)},
-   * and {@link ConcurrentMap#replace(Object, Object, Object) replace(K, V, V)}.
-   *
-   * @throws IllegalStateException if the key strength was already set
-   * @see WeakReference
-   */
-  @GwtIncompatible("java.lang.ref.WeakReference")
-  public MapMaker weakValues() {
-    return setValueStrength(Strength.WEAK);
-  }
-
-  /**
-   * Specifies that each value (not key) stored in the map should be
-   * wrapped in a {@link SoftReference} (by default, strong references
-   * are used).
-   *
-   * <p>Soft values will be garbage collected in response to memory
-   * demand, and in a least-recently-used manner. This makes them a
-   * good candidate for caching.
-   *
-   * <p><b>Note:</b> the map will use identity ({@code ==}) comparison
-   * to determine equality of soft values. This will notably impact
-   * the behavior of {@link Map#containsValue(Object) containsValue},
-   * {@link ConcurrentMap#remove(Object, Object) remove(Object, Object)},
-   * and {@link ConcurrentMap#replace(Object, Object, Object) replace(K, V, V)}.
-   *
-   * @throws IllegalStateException if the value strength was already set
-   * @see SoftReference
-   */
-  @GwtIncompatible("java.lang.ref.SoftReference")
-  public MapMaker softValues() {
-    return setValueStrength(Strength.SOFT);
-  }
-
-  private MapMaker setValueStrength(Strength strength) {
-    if (valueStrength != Strength.STRONG) {
-      throw new IllegalStateException("Value strength was already set to "
-          + valueStrength + ".");
-    }
-    valueStrength = strength;
-    useCustomMap = true;
-    return this;
-  }
-
-  /**
-   * Specifies that each entry should be automatically removed from the
-   * map once a fixed duration has passed since the entry's creation.
-   *
-   * @param duration the length of time after an entry is created that it
-   *     should be automatically removed
-   * @param unit the unit that {@code duration} is expressed in
-   * @throws IllegalArgumentException if {@code duration} is not positive
-   * @throws IllegalStateException if the expiration time was already set
-   */
-  public MapMaker expiration(long duration, TimeUnit unit) {
-    if (expirationNanos != 0) {
-      throw new IllegalStateException("expiration time of "
-          + expirationNanos + " ns was already set");
-    }
-    if (duration <= 0) {
-      throw new IllegalArgumentException("invalid duration: " + duration);
-    }
-    this.expirationNanos = unit.toNanos(duration);
-    useCustomMap = true;
-    return this;
-  }
-
-  /**
-   * Builds the final map, without on-demand computation of values. This method
-   * does not alter the state of this {@code MapMaker} instance, so it can be
-   * invoked again to create multiple independent maps.
-   *
-   * @param <K> the type of keys to be stored in the returned map
-   * @param <V> the type of values to be stored in the returned map
-   * @return a concurrent map having the requested features
-   */
-  public <K, V> ConcurrentMap<K, V> makeMap() {
-    return useCustomMap
-        ? new StrategyImpl<K, V>(this).map
-        : new ConcurrentHashMap<K, V>(builder.getInitialCapacity(),
-            0.75f, builder.getConcurrencyLevel());
-  }
-
-  /**
-   * Builds a map that supports atomic, on-demand computation of values. {@link
-   * Map#get} either returns an already-computed value for the given key,
-   * atomically computes it using the supplied function, or, if another thread
-   * is currently computing the value for this key, simply waits for that thread
-   * to finish and returns its computed value. Note that the function may be
-   * executed concurrently by multiple threads, but only for distinct keys.
-   *
-   * <p>If an entry's value has not finished computing yet, query methods
-   * besides {@code get} return immediately as if an entry doesn't exist. In
-   * other words, an entry isn't externally visible until the value's
-   * computation completes.
-   *
-   * <p>{@link Map#get} on the returned map will never return {@code null}. It
-   * may throw:
-   *
-   * <ul>
-   * <li>{@link NullPointerException} if the key is null or the computing
-   *     function returns null
-   * <li>{@link ComputationException} if an exception was thrown by the
-   *     computing function. If that exception is already of type {@link
-   *     ComputationException}, it is propagated directly; otherwise it is
-   *     wrapped.
-   * </ul>
-   *
-   * <p><b>Note:</b> Callers of {@code get} <i>must</i> ensure that the key
-   * argument is of type {@code K}. The {@code get} method accepts {@code
-   * Object}, so the key type is not checked at compile time. Passing an object
-   * of a type other than {@code K} can result in that object being unsafely
-   * passed to the computing function as type {@code K}, and unsafely stored in
-   * the map.
-   *
-   * <p>If {@link Map#put} is called before a computation completes, other
-   * threads waiting on the computation will wake up and return the stored
-   * value. When the computation completes, its new result will overwrite the
-   * value that was put in the map manually.
-   *
-   * <p>This method does not alter the state of this {@code MapMaker} instance,
-   * so it can be invoked again to create multiple independent maps.
-   */
-  public <K, V> ConcurrentMap<K, V> makeComputingMap(
-      Function<? super K, ? extends V> computingFunction) {
-    return new StrategyImpl<K, V>(this, computingFunction).map;
-  }
-
-  // Remainder of this file is private implementation details
-
-  private enum Strength {
-    WEAK {
-      @Override boolean equal(Object a, Object b) {
-        return a == b;
-      }
-      @Override int hash(Object o) {
-        return System.identityHashCode(o);
-      }
-      @Override <K, V> ValueReference<K, V> referenceValue(
-          ReferenceEntry<K, V> entry, V value) {
-        return new WeakValueReference<K, V>(value, entry);
-      }
-      @Override <K, V> ReferenceEntry<K, V> newEntry(
-          Internals<K, V, ReferenceEntry<K, V>> internals, K key,
-          int hash, ReferenceEntry<K, V> next) {
-        return (next == null)
-            ? new WeakEntry<K, V>(internals, key, hash)
-            : new LinkedWeakEntry<K, V>(internals, key, hash, next);
-      }
-      @Override <K, V> ReferenceEntry<K, V> copyEntry(
-          K key, ReferenceEntry<K, V> original,
-          ReferenceEntry<K, V> newNext) {
-        WeakEntry<K, V> from = (WeakEntry<K, V>) original;
-        return (newNext == null)
-            ? new WeakEntry<K, V>(from.internals, key, from.hash)
-            : new LinkedWeakEntry<K, V>(
-                from.internals, key, from.hash, newNext);
-      }
-    },
-
-    SOFT {
-      @Override boolean equal(Object a, Object b) {
-        return a == b;
-      }
-      @Override int hash(Object o) {
-        return System.identityHashCode(o);
-      }
-      @Override <K, V> ValueReference<K, V> referenceValue(
-          ReferenceEntry<K, V> entry, V value) {
-        return new SoftValueReference<K, V>(value, entry);
-      }
-      @Override <K, V> ReferenceEntry<K, V> newEntry(
-          Internals<K, V, ReferenceEntry<K, V>> internals, K key,
-          int hash, ReferenceEntry<K, V> next) {
-        return (next == null)
-            ? new SoftEntry<K, V>(internals, key, hash)
-            : new LinkedSoftEntry<K, V>(internals, key, hash, next);
-      }
-      @Override <K, V> ReferenceEntry<K, V> copyEntry(
-          K key, ReferenceEntry<K, V> original,
-          ReferenceEntry<K, V> newNext) {
-        SoftEntry<K, V> from = (SoftEntry<K, V>) original;
-        return (newNext == null)
-            ? new SoftEntry<K, V>(from.internals, key, from.hash)
-            : new LinkedSoftEntry<K, V>(
-                from.internals, key, from.hash, newNext);
-      }
-    },
-
-    STRONG {
-      @Override boolean equal(Object a, Object b) {
-        return a.equals(b);
-      }
-      @Override int hash(Object o) {
-        return o.hashCode();
-      }
-      @Override <K, V> ValueReference<K, V> referenceValue(
-          ReferenceEntry<K, V> entry, V value) {
-        return new StrongValueReference<K, V>(value);
-      }
-      @Override <K, V> ReferenceEntry<K, V> newEntry(
-          Internals<K, V, ReferenceEntry<K, V>> internals, K key,
-          int hash, ReferenceEntry<K, V> next) {
-        return (next == null)
-            ? new StrongEntry<K, V>(internals, key, hash)
-            : new LinkedStrongEntry<K, V>(
-                internals, key, hash, next);
-      }
-      @Override <K, V> ReferenceEntry<K, V> copyEntry(
-          K key, ReferenceEntry<K, V> original,
-          ReferenceEntry<K, V> newNext) {
-        StrongEntry<K, V> from = (StrongEntry<K, V>) original;
-        return (newNext == null)
-            ? new StrongEntry<K, V>(from.internals, key, from.hash)
-            : new LinkedStrongEntry<K, V>(
-                from.internals, key, from.hash, newNext);
-      }
-    };
-
-    /**
-     * Determines if two keys or values are equal according to this
-     * strength strategy.
-     */
-    abstract boolean equal(Object a, Object b);
-
-    /**
-     * Hashes a key according to this strategy.
-     */
-    abstract int hash(Object o);
-
-    /**
-     * Creates a reference for the given value according to this value
-     * strength.
-     */
-    abstract <K, V> ValueReference<K, V> referenceValue(
-        ReferenceEntry<K, V> entry, V value);
-
-    /**
-     * Creates a new entry based on the current key strength.
-     */
-    abstract <K, V> ReferenceEntry<K, V> newEntry(
-        Internals<K, V, ReferenceEntry<K, V>> internals, K key,
-        int hash, ReferenceEntry<K, V> next);
-
-    /**
-     * Creates a new entry and copies the value and other state from an
-     * existing entry.
-     */
-    abstract <K, V> ReferenceEntry<K, V> copyEntry(K key,
-        ReferenceEntry<K, V> original, ReferenceEntry<K, V> newNext);
-  }
-
-  private static class StrategyImpl<K, V> implements Serializable,
-      ComputingStrategy<K, V, ReferenceEntry<K, V>> {
-    final Strength keyStrength;
-    final Strength valueStrength;
-    final ConcurrentMap<K, V> map;
-    final long expirationNanos;
-    Internals<K, V, ReferenceEntry<K, V>> internals;
-
-    StrategyImpl(MapMaker maker) {
-      this.keyStrength = maker.keyStrength;
-      this.valueStrength = maker.valueStrength;
-      this.expirationNanos = maker.expirationNanos;
-
-      map = maker.builder.buildMap(this);
-    }
-
-    StrategyImpl(
-        MapMaker maker, Function<? super K, ? extends V> computer) {
-      this.keyStrength = maker.keyStrength;
-      this.valueStrength = maker.valueStrength;
-      this.expirationNanos = maker.expirationNanos;
-
-      map = maker.builder.buildComputingMap(this, computer);
-    }
-
-    public void setValue(ReferenceEntry<K, V> entry, V value) {
-      setValueReference(
-          entry, valueStrength.referenceValue(entry, value));
-      if (expirationNanos > 0) {
-        scheduleRemoval(entry.getKey(), value);
-      }
-    }
-
-    void scheduleRemoval(K key, V value) {
-      /*
-       * TODO: Keep weak reference to map, too. Build a priority
-       * queue out of the entries themselves instead of creating a
-       * task per entry. Then, we could have one recurring task per
-       * map (which would clean the entire map and then reschedule
-       * itself depending upon when the next expiration comes). We
-       * also want to avoid removing an entry prematurely if the
-       * entry was set to the same value again.
-       */
-      final WeakReference<K> keyReference = new WeakReference<K>(key);
-      final WeakReference<V> valueReference = new WeakReference<V>(value);
-      ExpirationTimer.instance.schedule(
-          new TimerTask() {
-            @Override public void run() {
-              K key = keyReference.get();
-              if (key != null) {
-                // Remove if the value is still the same.
-                map.remove(key, valueReference.get());
-              }
-            }
-          }, TimeUnit.NANOSECONDS.toMillis(expirationNanos));
-    }
-
-    public boolean equalKeys(K a, Object b) {
-      return keyStrength.equal(a, b);
-    }
-
-    public boolean equalValues(V a, Object b) {
-      return valueStrength.equal(a, b);
-    }
-
-    public int hashKey(Object key) {
-      return keyStrength.hash(key);
-    }
-
-    public K getKey(ReferenceEntry<K, V> entry) {
-      return entry.getKey();
-    }
-
-    public int getHash(ReferenceEntry<K, V> entry) {
-      return entry.getHash();
-    }
-
-    public ReferenceEntry<K, V> newEntry(
-        K key, int hash, ReferenceEntry<K, V> next) {
-      return keyStrength.newEntry(internals, key, hash, next);
-    }
-
-    public ReferenceEntry<K, V> copyEntry(K key,
-        ReferenceEntry<K, V> original, ReferenceEntry<K, V> newNext) {
-      ValueReference<K, V> valueReference = original.getValueReference();
-      if (valueReference == COMPUTING) {
-        ReferenceEntry<K, V> newEntry
-            = newEntry(key, original.getHash(), newNext);
-        newEntry.setValueReference(
-            new FutureValueReference(original, newEntry));
-        return newEntry;
-      } else {
-        ReferenceEntry<K, V> newEntry
-            = newEntry(key, original.getHash(), newNext);
-        newEntry.setValueReference(valueReference.copyFor(newEntry));
-        return newEntry;
-      }
-    }
-
-    /**
-     * Waits for a computation to complete. Returns the result of the
-     * computation or null if none was available.
-     */
-    public V waitForValue(ReferenceEntry<K, V> entry)
-        throws InterruptedException {
-      ValueReference<K, V> valueReference = entry.getValueReference();
-      if (valueReference == COMPUTING) {
-        synchronized (entry) {
-          while ((valueReference = entry.getValueReference())
-              == COMPUTING) {
-            entry.wait();
-          }
-        }
-      }
-      return valueReference.waitForValue();
-    }
-
-    /**
-     * Used by CustomConcurrentHashMap to retrieve values. Returns null
-     * instead of blocking or throwing an exception.
-     */
-    public V getValue(ReferenceEntry<K, V> entry) {
-      ValueReference<K, V> valueReference = entry.getValueReference();
-      return valueReference.get();
-    }
-
-    public V compute(K key, final ReferenceEntry<K, V> entry,
-        Function<? super K, ? extends V> computer) {
-      V value;
-      try {
-        value = computer.apply(key);
-      } catch (ComputationException e) {
-        // if computer has thrown a computation exception, propagate rather
-        // than wrap
-        setValueReference(entry,
-            new ComputationExceptionReference<K, V>(e.getCause()));
-        throw e;
-      } catch (Throwable t) {
-        setValueReference(
-          entry, new ComputationExceptionReference<K, V>(t));
-        throw new ComputationException(t);
-      }
-
-      if (value == null) {
-        String message
-            = computer + " returned null for key " + key + ".";
-        setValueReference(
-            entry, new NullOutputExceptionReference<K, V>(message));
-        throw new NullOutputException(message);
-      } else {
-        setValue(entry, value);
-      }
-      return value;
-    }
-
-    /**
-     * Sets the value reference on an entry and notifies waiting
-     * threads.
-     */
-    void setValueReference(ReferenceEntry<K, V> entry,
-        ValueReference<K, V> valueReference) {
-      boolean notifyOthers = (entry.getValueReference() == COMPUTING);
-      entry.setValueReference(valueReference);
-      if (notifyOthers) {
-        synchronized (entry) {
-          entry.notifyAll();
-        }
-      }
-    }
-
-    /**
-     * Points to an old entry where a value is being computed. Used to
-     * support non-blocking copying of entries during table expansion,
-     * removals, etc.
-     */
-    private class FutureValueReference implements ValueReference<K, V> {
-      final ReferenceEntry<K, V> original;
-      final ReferenceEntry<K, V> newEntry;
-
-      FutureValueReference(
-          ReferenceEntry<K, V> original, ReferenceEntry<K, V> newEntry) {
-        this.original = original;
-        this.newEntry = newEntry;
-      }
-
-      public V get() {
-        boolean success = false;
-        try {
-          V value = original.getValueReference().get();
-          success = true;
-          return value;
-        } finally {
-          if (!success) {
-            removeEntry();
-          }
-        }
-      }
-
-      public ValueReference<K, V> copyFor(ReferenceEntry<K, V> entry) {
-        return new FutureValueReference(original, entry);
-      }
-
-      public V waitForValue() throws InterruptedException {
-        boolean success = false;
-        try {
-          // assert that key != null
-          V value = StrategyImpl.this.waitForValue(original);
-          success = true;
-          return value;
-        } finally {
-          if (!success) {
-            removeEntry();
-          }
-        }
-      }
-
-      /**
-       * Removes the entry in the event of an exception. Ideally,
-       * we'd clean up as soon as the computation completes, but we
-       * can't do that without keeping a reference to this entry from
-       * the original.
-       */
-      void removeEntry() {
-        internals.removeEntry(newEntry);
-      }
-    }
-
-    public ReferenceEntry<K, V> getNext(
-        ReferenceEntry<K, V> entry) {
-      return entry.getNext();
-    }
-
-    public void setInternals(
-        Internals<K, V, ReferenceEntry<K, V>> internals) {
-      this.internals = internals;
-    }
-
-    private static final long serialVersionUID = 0;
-
-    private void writeObject(ObjectOutputStream out)
-        throws IOException {
-      // Custom serialization code ensures that the key and value
-      // strengths are written before the map. We'll need them to
-      // deserialize the map entries.
-      out.writeObject(keyStrength);
-      out.writeObject(valueStrength);
-      out.writeLong(expirationNanos);
-
-      // TODO: It is possible for the strategy to try to use the map
-      // or internals during deserialization, for example, if an
-      // entry gets reclaimed. We could detect this case and queue up
-      // removals to be flushed after we deserialize the map.
-      out.writeObject(internals);
-      out.writeObject(map);
-    }
-
-    /**
-     * Fields used during deserialization. We use a nested class so we
-     * don't load them until we need them. We need to use reflection to
-     * set final fields outside of the constructor.
-     */
-    private static class Fields {
-      static final Field keyStrength = findField("keyStrength");
-      static final Field valueStrength = findField("valueStrength");
-      static final Field expirationNanos = findField("expirationNanos");
-      static final Field internals = findField("internals");
-      static final Field map = findField("map");
-
-      static Field findField(String name) {
-        try {
-          Field f = StrategyImpl.class.getDeclaredField(name);
-          f.setAccessible(true);
-          return f;
-        } catch (NoSuchFieldException e) {
-          throw new AssertionError(e);
-        }
-      }
-    }
-
-    private void readObject(ObjectInputStream in)
-        throws IOException, ClassNotFoundException {
-      try {
-        Fields.keyStrength.set(this, in.readObject());
-        Fields.valueStrength.set(this, in.readObject());
-        Fields.expirationNanos.set(this, in.readLong());
-        Fields.internals.set(this, in.readObject());
-        Fields.map.set(this, in.readObject());
-      } catch (IllegalAccessException e) {
-        throw new AssertionError(e);
-      }
-    }
-  }
-
-  /** A reference to a value. */
-  private interface ValueReference<K, V> {
-    /**
-     * Gets the value. Does not block or throw exceptions.
-     */
-    V get();
-
-    /** Creates a copy of this reference for the given entry. */
-    ValueReference<K, V> copyFor(ReferenceEntry<K, V> entry);
-
-    /**
-     * Waits for a value that may still be computing. Unlike get(),
-     * this method can block (in the case of FutureValueReference) or
-     * throw an exception.
-     */
-    V waitForValue() throws InterruptedException;
-  }
-
-  private static final ValueReference<Object, Object> COMPUTING
-      = new ValueReference<Object, Object>() {
-    public Object get() {
-      return null;
-    }
-    public ValueReference<Object, Object> copyFor(
-        ReferenceEntry<Object, Object> entry) {
-      throw new AssertionError();
-    }
-    public Object waitForValue() {
-      throw new AssertionError();
-    }
-  };
-
-  /**
-   * Singleton placeholder that indicates a value is being computed.
-   */
-  @SuppressWarnings("unchecked")
-  // Safe because impl never uses a parameter or returns any non-null value
-  private static <K, V> ValueReference<K, V> computing() {
-    return (ValueReference<K, V>) COMPUTING;
-  }
-
-  /** Used to provide null output exceptions to other threads. */
-  private static class NullOutputExceptionReference<K, V>
-      implements ValueReference<K, V> {
-    final String message;
-    NullOutputExceptionReference(String message) {
-      this.message = message;
-    }
-    public V get() {
-      return null;
-    }
-    public ValueReference<K, V> copyFor(
-        ReferenceEntry<K, V> entry) {
-      return this;
-    }
-    public V waitForValue() {
-      throw new NullOutputException(message);
-    }
-  }
-
-  /** Used to provide computation exceptions to other threads. */
-  private static class ComputationExceptionReference<K, V>
-      implements ValueReference<K, V> {
-    final Throwable t;
-    ComputationExceptionReference(Throwable t) {
-      this.t = t;
-    }
-    public V get() {
-      return null;
-    }
-    public ValueReference<K, V> copyFor(
-        ReferenceEntry<K, V> entry) {
-      return this;
-    }
-    public V waitForValue() {
-      throw new AsynchronousComputationException(t);
-    }
-  }
-
-  /** Wrapper class ensures that queue isn't created until it's used. */
-  private static class QueueHolder {
-    static final FinalizableReferenceQueue queue
-        = new FinalizableReferenceQueue();
-  }
-
-  /**
-   * An entry in a reference map.
-   */
-  private interface ReferenceEntry<K, V> {
-    /**
-     * Gets the value reference from this entry.
-     */
-    ValueReference<K, V> getValueReference();
-
-    /**
-     * Sets the value reference for this entry.
-     *
-     * @param valueReference
-     */
-    void setValueReference(ValueReference<K, V> valueReference);
-
-    /**
-     * Removes this entry from the map if its value reference hasn't
-     * changed.  Used to clean up after values. The value reference can
-     * just call this method on the entry so it doesn't have to keep
-     * its own reference to the map.
-     */
-    void valueReclaimed();
-
-    /** Gets the next entry in the chain. */
-    ReferenceEntry<K, V> getNext();
-
-    /** Gets the entry's hash. */
-    int getHash();
-
-    /** Gets the key for this entry. */
-    public K getKey();
-  }
-
-  /**
-   * Used for strongly-referenced keys.
-   */
-  private static class StrongEntry<K, V> implements ReferenceEntry<K, V> {
-    final K key;
-
-    StrongEntry(Internals<K, V, ReferenceEntry<K, V>> internals, K key,
-        int hash) {
-      this.internals = internals;
-      this.key = key;
-      this.hash = hash;
-    }
-
-    public K getKey() {
-      return this.key;
-    }
-
-    // The code below is exactly the same for each entry type.
-
-    final Internals<K, V, ReferenceEntry<K, V>> internals;
-    final int hash;
-    volatile ValueReference<K, V> valueReference = computing();
-
-    public ValueReference<K, V> getValueReference() {
-      return valueReference;
-    }
-    public void setValueReference(
-        ValueReference<K, V> valueReference) {
-      this.valueReference = valueReference;
-    }
-    public void valueReclaimed() {
-      internals.removeEntry(this, null);
-    }
-    public ReferenceEntry<K, V> getNext() {
-      return null;
-    }
-    public int getHash() {
-      return hash;
-    }
-  }
-
-  private static class LinkedStrongEntry<K, V> extends StrongEntry<K, V> {
-
-    LinkedStrongEntry(Internals<K, V, ReferenceEntry<K, V>> internals,
-        K key, int hash, ReferenceEntry<K, V> next) {
-      super(internals, key, hash);
-      this.next = next;
-    }
-
-    final ReferenceEntry<K, V> next;
-
-    @Override public ReferenceEntry<K, V> getNext() {
-      return next;
-    }
-  }
-
-  /**
-   * Used for softly-referenced keys.
-   */
-  private static class SoftEntry<K, V> extends FinalizableSoftReference<K>
-      implements ReferenceEntry<K, V> {
-    SoftEntry(Internals<K, V, ReferenceEntry<K, V>> internals, K key,
-        int hash) {
-      super(key, QueueHolder.queue);
-      this.internals = internals;
-      this.hash = hash;
-    }
-
-    public K getKey() {
-      return get();
-    }
-
-    public void finalizeReferent() {
-      internals.removeEntry(this);
-    }
-
-    // The code below is exactly the same for each entry type.
-
-    final Internals<K, V, ReferenceEntry<K, V>> internals;
-    final int hash;
-    volatile ValueReference<K, V> valueReference = computing();
-
-    public ValueReference<K, V> getValueReference() {
-      return valueReference;
-    }
-    public void setValueReference(
-        ValueReference<K, V> valueReference) {
-      this.valueReference = valueReference;
-    }
-    public void valueReclaimed() {
-      internals.removeEntry(this, null);
-    }
-    public ReferenceEntry<K, V> getNext() {
-      return null;
-    }
-    public int getHash() {
-      return hash;
-    }
-  }
-
-  private static class LinkedSoftEntry<K, V> extends SoftEntry<K, V> {
-    LinkedSoftEntry(Internals<K, V, ReferenceEntry<K, V>> internals,
-        K key, int hash, ReferenceEntry<K, V> next) {
-      super(internals, key, hash);
-      this.next = next;
-    }
-
-    final ReferenceEntry<K, V> next;
-
-    @Override public ReferenceEntry<K, V> getNext() {
-      return next;
-    }
-  }
-
-  /**
-   * Used for weakly-referenced keys.
-   */
-  private static class WeakEntry<K, V> extends FinalizableWeakReference<K>
-      implements ReferenceEntry<K, V> {
-    WeakEntry(Internals<K, V, ReferenceEntry<K, V>> internals, K key,
-        int hash) {
-      super(key, QueueHolder.queue);
-      this.internals = internals;
-      this.hash = hash;
-    }
-
-    public K getKey() {
-      return get();
-    }
-
-    public void finalizeReferent() {
-      internals.removeEntry(this);
-    }
-
-    // The code below is exactly the same for each entry type.
-
-    final Internals<K, V, ReferenceEntry<K, V>> internals;
-    final int hash;
-    volatile ValueReference<K, V> valueReference = computing();
-
-    public ValueReference<K, V> getValueReference() {
-      return valueReference;
-    }
-    public void setValueReference(
-        ValueReference<K, V> valueReference) {
-      this.valueReference = valueReference;
-    }
-    public void valueReclaimed() {
-      internals.removeEntry(this, null);
-    }
-    public ReferenceEntry<K, V> getNext() {
-      return null;
-    }
-    public int getHash() {
-      return hash;
-    }
-  }
-
-  private static class LinkedWeakEntry<K, V> extends WeakEntry<K, V> {
-    LinkedWeakEntry(Internals<K, V, ReferenceEntry<K, V>> internals,
-        K key, int hash, ReferenceEntry<K, V> next) {
-      super(internals, key, hash);
-      this.next = next;
-    }
-
-    final ReferenceEntry<K, V> next;
-
-    @Override public ReferenceEntry<K, V> getNext() {
-      return next;
-    }
-  }
-
-  /** References a weak value. */
-  private static class WeakValueReference<K, V>
-      extends FinalizableWeakReference<V>
-      implements ValueReference<K, V> {
-    final ReferenceEntry<K, V> entry;
-
-    WeakValueReference(V referent, ReferenceEntry<K, V> entry) {
-      super(referent, QueueHolder.queue);
-      this.entry = entry;
-    }
-
-    public void finalizeReferent() {
-      entry.valueReclaimed();
-    }
-
-    public ValueReference<K, V> copyFor(
-        ReferenceEntry<K, V> entry) {
-      return new WeakValueReference<K, V>(get(), entry);
-    }
-
-    public V waitForValue() {
-      return get();
-    }
-  }
-
-  /** References a soft value. */
-  private static class SoftValueReference<K, V>
-      extends FinalizableSoftReference<V>
-      implements ValueReference<K, V> {
-    final ReferenceEntry<K, V> entry;
-
-    SoftValueReference(V referent, ReferenceEntry<K, V> entry) {
-      super(referent, QueueHolder.queue);
-      this.entry = entry;
-    }
-
-    public void finalizeReferent() {
-      entry.valueReclaimed();
-    }
-
-    public ValueReference<K, V> copyFor(
-        ReferenceEntry<K, V> entry) {
-      return new SoftValueReference<K, V>(get(), entry);
-    }
-
-    public V waitForValue() {
-      return get();
-    }
-  }
-
-  /** References a strong value. */
-  private static class StrongValueReference<K, V>
-      implements ValueReference<K, V> {
-    final V referent;
-
-    StrongValueReference(V referent) {
-      this.referent = referent;
-    }
-
-    public V get() {
-      return referent;
-    }
-
-    public ValueReference<K, V> copyFor(
-        ReferenceEntry<K, V> entry) {
-      return this;
-    }
-
-    public V waitForValue() {
-      return get();
-    }
-  }
-}
diff --git a/src/com/google/common/collect/Maps.java b/src/com/google/common/collect/Maps.java
deleted file mode 100644
index 43aefb4..0000000
--- a/src/com/google/common/collect/Maps.java
+++ /dev/null
@@ -1,1360 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-import com.google.common.base.Function;
-import com.google.common.base.Joiner.MapJoiner;
-import com.google.common.base.Objects;
-import com.google.common.base.Predicate;
-import com.google.common.base.Predicates;
-
-import java.io.Serializable;
-import java.util.AbstractCollection;
-import java.util.AbstractMap;
-import java.util.AbstractSet;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.EnumMap;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.IdentityHashMap;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Properties;
-import java.util.Set;
-import java.util.SortedMap;
-import java.util.TreeMap;
-
-import javax.annotation.Nullable;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
-
-/**
- * Static utility methods pertaining to {@link Map} instances. Also see this
- * class's counterparts {@link Lists} and {@link Sets}.
- *
- * @author Kevin Bourrillion
- * @author Mike Bostock
- * @author Isaac Shum
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible
-public final class Maps {
-  private Maps() {}
-
-  /**
-   * Creates a <i>mutable</i>, empty {@code HashMap} instance.
-   *
-   * <p><b>Note:</b> if mutability is not required, use {@link
-   * ImmutableMap#of()} instead.
-   *
-   * <p><b>Note:</b> if {@code K} is an {@code enum} type, use {@link
-   * #newEnumMap} instead.
-   *
-   * @return a new, empty {@code HashMap}
-   */
-  public static <K, V> HashMap<K, V> newHashMap() {
-    return new HashMap<K, V>();
-  }
-
-  /**
-   * Creates a {@code HashMap} instance with enough capacity to hold the
-   * specified number of elements without rehashing.
-   *
-   * @param expectedSize the expected size
-   * @return a new, empty {@code HashMap} with enough
-   *     capacity to hold {@code expectedSize} elements without rehashing
-   * @throws IllegalArgumentException if {@code expectedSize} is negative
-   */
-  public static <K, V> HashMap<K, V> newHashMapWithExpectedSize(
-      int expectedSize) {
-    /*
-     * The HashMap is constructed with an initialCapacity that's greater than
-     * expectedSize. The larger value is necessary because HashMap resizes
-     * its internal array if the map size exceeds loadFactor * initialCapacity.
-     */
-    return new HashMap<K, V>(capacity(expectedSize));
-  }
-
-  /**
-   * Returns an appropriate value for the "capacity" (in reality, "minimum
-   * table size") parameter of a {@link HashMap} constructor, such that the
-   * resulting table will be between 25% and 50% full when it contains
-   * {@code expectedSize} entries.
-   *
-   * @throws IllegalArgumentException if {@code expectedSize} is negative
-   */
-  static int capacity(int expectedSize) {
-    checkArgument(expectedSize >= 0);
-    return Math.max(expectedSize * 2, 16);
-  }
-
-  /**
-   * Creates a <i>mutable</i> {@code HashMap} instance with the same mappings as
-   * the specified map.
-   *
-   * <p><b>Note:</b> if mutability is not required, use {@link
-   * ImmutableMap#copyOf(Map)} instead.
-   *
-   * <p><b>Note:</b> if {@code K} is an {@link Enum} type, use {@link
-   * #newEnumMap} instead.
-   *
-   * @param map the mappings to be placed in the new map
-   * @return a new {@code HashMap} initialized with the mappings from
-   *     {@code map}
-   */
-  public static <K, V> HashMap<K, V> newHashMap(
-      Map<? extends K, ? extends V> map) {
-    return new HashMap<K, V>(map);
-  }
-
-  /**
-   * Creates a <i>mutable</i>, empty, insertion-ordered {@code LinkedHashMap}
-   * instance.
-   *
-   * <p><b>Note:</b> if mutability is not required, use {@link
-   * ImmutableMap#of()} instead.
-   *
-   * @return a new, empty {@code LinkedHashMap}
-   */
-  public static <K, V> LinkedHashMap<K, V> newLinkedHashMap() {
-    return new LinkedHashMap<K, V>();
-  }
-
-  /**
-   * Creates a <i>mutable</i>, insertion-ordered {@code LinkedHashMap} instance
-   * with the same mappings as the specified map.
-   *
-   * <p><b>Note:</b> if mutability is not required, use {@link
-   * ImmutableMap#copyOf(Map)} instead.
-   *
-   * @param map the mappings to be placed in the new map
-   * @return a new, {@code LinkedHashMap} initialized with the
-   *     mappings from {@code map}
-   */
-  public static <K, V> LinkedHashMap<K, V>
-      newLinkedHashMap(Map<? extends K, ? extends V> map) {
-    return new LinkedHashMap<K, V>(map);
-  }
-
-  /**
-   * Creates a <i>mutable</i>, empty {@code TreeMap} instance using the natural
-   * ordering of its elements.
-   *
-   * <p><b>Note:</b> if mutability is not required, use {@link
-   * ImmutableSortedMap#of()} instead.
-   *
-   * @return a new, empty {@code TreeMap}
-   */
-  @SuppressWarnings("unchecked") // eclipse doesn't like the raw Comparable
-  public static <K extends Comparable, V> TreeMap<K, V> newTreeMap() {
-    return new TreeMap<K, V>();
-  }
-
-  /**
-   * Creates a <i>mutable</i> {@code TreeMap} instance with the same mappings as
-   * the specified map and using the same ordering as the specified map.
-   *
-   * <p><b>Note:</b> if mutability is not required, use {@link
-   * ImmutableSortedMap#copyOfSorted(SortedMap)} instead.
-   *
-   * @param map the sorted map whose mappings are to be placed in the new map
-   *     and whose comparator is to be used to sort the new map
-   * @return a new {@code TreeMap} initialized with the mappings from {@code
-   *     map} and using the comparator of {@code map}
-   */
-  public static <K, V> TreeMap<K, V> newTreeMap(SortedMap<K, ? extends V> map) {
-    return new TreeMap<K, V>(map);
-  }
-
-  /**
-   * Creates a <i>mutable</i>, empty {@code TreeMap} instance using the given
-   * comparator.
-   *
-   * <p><b>Note:</b> if mutability is not required, use {@code
-   * ImmutableSortedMap.orderedBy(comparator).build()} instead.
-   *
-   * @param comparator the comparator to sort the keys with
-   * @return a new, empty {@code TreeMap}
-   */
-  public static <C, K extends C, V> TreeMap<K, V> newTreeMap(
-      @Nullable Comparator<C> comparator) {
-    // Ideally, the extra type parameter "C" shouldn't be necessary. It is a
-    // work-around of a compiler type inference quirk that prevents the
-    // following code from being compiled:
-    // Comparator<Class<?>> comparator = null;
-    // Map<Class<? extends Throwable>, String> map = newTreeMap(comparator);
-    return new TreeMap<K, V>(comparator);
-  }
-
-  /**
-   * Creates an {@code EnumMap} instance.
-   *
-   * @param type the key type for this map
-   * @return a new, empty {@code EnumMap}
-   */
-  public static <K extends Enum<K>, V> EnumMap<K, V> newEnumMap(Class<K> type) {
-    return new EnumMap<K, V>(checkNotNull(type));
-  }
-
-  /**
-   * Creates an {@code EnumMap} with the same mappings as the specified map.
-   *
-   * @param map the map from which to initialize this {@code EnumMap}
-   * @return a new {@code EnumMap} initialized with the mappings from {@code
-   *     map}
-   * @throws IllegalArgumentException if {@code m} is not an {@code EnumMap}
-   *     instance and contains no mappings
-   */
-  public static <K extends Enum<K>, V> EnumMap<K, V> newEnumMap(
-      Map<K, ? extends V> map) {
-    return new EnumMap<K, V>(map);
-  }
-
-  /**
-   * Creates an {@code IdentityHashMap} instance.
-   *
-   * @return a new, empty {@code IdentityHashMap}
-   */
-  public static <K, V> IdentityHashMap<K, V> newIdentityHashMap() {
-    return new IdentityHashMap<K, V>();
-  }
-
-  /**
-   * Returns a synchronized (thread-safe) bimap backed by the specified bimap.
-   * In order to guarantee serial access, it is critical that <b>all</b> access
-   * to the backing bimap is accomplished through the returned bimap.
-   *
-   * <p>It is imperative that the user manually synchronize on the returned map
-   * when accessing any of its collection views: <pre>   {@code
-   *
-   *   BiMap<Long, String> map = Maps.synchronizedBiMap(
-   *       HashBiMap.<Long, String>create());
-   *    ...
-   *   Set<Long> set = map.keySet();  // Needn't be in synchronized block
-   *    ...
-   *   synchronized (map) {  // Synchronizing on map, not set!
-   *     Iterator<Long> it = set.iterator(); // Must be in synchronized block
-   *     while (it.hasNext()) {
-   *       foo(it.next());
-   *     }
-   *   }}</pre>
-   *
-   * Failure to follow this advice may result in non-deterministic behavior.
-   *
-   * <p>The returned bimap will be serializable if the specified bimap is
-   * serializable.
-   *
-   * @param bimap the bimap to be wrapped in a synchronized view
-   * @return a sychronized view of the specified bimap
-   */
-  public static <K, V> BiMap<K, V> synchronizedBiMap(BiMap<K, V> bimap) {
-    return Synchronized.biMap(bimap, null);
-  }
-
-  /**
-   * Computes the difference between two maps. This difference is an immutable
-   * snapshot of the state of the maps at the time this method is called. It
-   * will never change, even if the maps change at a later time.
-   *
-   * <p>Since this method uses {@code HashMap} instances internally, the keys of
-   * the supplied maps must be well-behaved with respect to
-   * {@link Object#equals} and {@link Object#hashCode}.
-   *
-   * <p><b>Note:</b>If you only need to know whether two maps have the same
-   * mappings, call {@code left.equals(right)} instead of this method.
-   *
-   * @param left the map to treat as the "left" map for purposes of comparison
-   * @param right the map to treat as the "right" map for purposes of comparison
-   * @return the difference between the two maps
-   */
-  public static <K, V> MapDifference<K, V> difference(
-      Map<? extends K, ? extends V> left, Map<? extends K, ? extends V> right) {
-    Map<K, V> onlyOnLeft = newHashMap();
-    Map<K, V> onlyOnRight = new HashMap<K, V>(right); // will whittle it down
-    Map<K, V> onBoth = newHashMap();
-    Map<K, MapDifference.ValueDifference<V>> differences = newHashMap();
-    boolean eq = true;
-
-    for (Entry<? extends K, ? extends V> entry : left.entrySet()) {
-      K leftKey = entry.getKey();
-      V leftValue = entry.getValue();
-      if (right.containsKey(leftKey)) {
-        V rightValue = onlyOnRight.remove(leftKey);
-        if (Objects.equal(leftValue, rightValue)) {
-          onBoth.put(leftKey, leftValue);
-        } else {
-          eq = false;
-          differences.put(leftKey, new ValueDifferenceImpl<V>(
-              leftValue, rightValue));
-        }
-      } else {
-        eq = false;
-        onlyOnLeft.put(leftKey, leftValue);
-      }
-    }
-
-    boolean areEqual = eq && onlyOnRight.isEmpty();
-    return new MapDifferenceImpl<K, V>(
-        areEqual, onlyOnLeft, onlyOnRight, onBoth, differences);
-  }
-
-  private static class MapDifferenceImpl<K, V>
-      implements MapDifference<K, V> {
-    final boolean areEqual;
-    final Map<K, V> onlyOnLeft;
-    final Map<K, V> onlyOnRight;
-    final Map<K, V> onBoth;
-    final Map<K, ValueDifference<V>> differences;
-
-    MapDifferenceImpl(boolean areEqual, Map<K, V> onlyOnLeft,
-        Map<K, V> onlyOnRight, Map<K, V> onBoth,
-        Map<K, ValueDifference<V>> differences) {
-      this.areEqual = areEqual;
-      this.onlyOnLeft = Collections.unmodifiableMap(onlyOnLeft);
-      this.onlyOnRight = Collections.unmodifiableMap(onlyOnRight);
-      this.onBoth = Collections.unmodifiableMap(onBoth);
-      this.differences = Collections.unmodifiableMap(differences);
-    }
-
-    public boolean areEqual() {
-      return areEqual;
-    }
-
-    public Map<K, V> entriesOnlyOnLeft() {
-      return onlyOnLeft;
-    }
-
-    public Map<K, V> entriesOnlyOnRight() {
-      return onlyOnRight;
-    }
-
-    public Map<K, V> entriesInCommon() {
-      return onBoth;
-    }
-
-    public Map<K, ValueDifference<V>> entriesDiffering() {
-      return differences;
-    }
-
-    @Override public boolean equals(Object object) {
-      if (object == this) {
-        return true;
-      }
-      if (object instanceof MapDifference) {
-        MapDifference<?, ?> other = (MapDifference<?, ?>) object;
-        return entriesOnlyOnLeft().equals(other.entriesOnlyOnLeft())
-            && entriesOnlyOnRight().equals(other.entriesOnlyOnRight())
-            && entriesInCommon().equals(other.entriesInCommon())
-            && entriesDiffering().equals(other.entriesDiffering());
-      }
-      return false;
-    }
-
-    @Override public int hashCode() {
-      return Objects.hashCode(entriesOnlyOnLeft(), entriesOnlyOnRight(),
-          entriesInCommon(), entriesDiffering());
-    }
-
-    @Override public String toString() {
-      if (areEqual) {
-        return "equal";
-      }
-
-      StringBuilder result = new StringBuilder("not equal");
-      if (!onlyOnLeft.isEmpty()) {
-        result.append(": only on left=").append(onlyOnLeft);
-      }
-      if (!onlyOnRight.isEmpty()) {
-        result.append(": only on right=").append(onlyOnRight);
-      }
-      if (!differences.isEmpty()) {
-        result.append(": value differences=").append(differences);
-      }
-      return result.toString();
-    }
-  }
-
-  static class ValueDifferenceImpl<V>
-      implements MapDifference.ValueDifference<V> {
-
-    private final V left;
-    private final V right;
-
-    ValueDifferenceImpl(@Nullable V left, @Nullable V right) {
-      this.left = left;
-      this.right = right;
-    }
-
-    public V leftValue() {
-      return left;
-    }
-
-    public V rightValue() {
-      return right;
-    }
-
-    @Override public boolean equals(@Nullable Object object) {
-      if (object instanceof MapDifference.ValueDifference<?>) {
-        MapDifference.ValueDifference<?> that =
-            (MapDifference.ValueDifference<?>) object;
-        return Objects.equal(this.left, that.leftValue())
-            && Objects.equal(this.right, that.rightValue());
-      }
-      return false;
-    }
-
-    @Override public int hashCode() {
-      return Objects.hashCode(left, right);
-    }
-
-    @Override public String toString() {
-      return "(" + left + ", " + right + ")";
-    }
-  }
-
-  /**
-   * Returns an immutable map for which the {@link Map#values} are the given
-   * elements in the given order, and each key is the product of invoking a
-   * supplied function on its corresponding value.
-   *
-   * @param values the values to use when constructing the {@code Map}
-   * @param keyFunction the function used to produce the key for each value
-   * @return a map mapping the result of evaluating the function {@code
-   *     keyFunction} on each value in the input collection to that value
-   * @throws IllegalArgumentException if {@code keyFunction} produces the same
-   *     key for more than one value in the input collection
-   * @throws NullPointerException if any elements of {@code values} is null, or
-   *     if {@code keyFunction} produces {@code null} for any value
-   */
-  // TODO: consider returning a bimap, whose inverse view does lookups by
-  // invoking the function.
-  public static <K, V> ImmutableMap<K, V> uniqueIndex(
-      Iterable<V> values, Function<? super V, K> keyFunction) {
-    checkNotNull(keyFunction);
-    ImmutableMap.Builder<K, V> builder = ImmutableMap.builder();
-    for (V value : values) {
-      builder.put(keyFunction.apply(value), value);
-    }
-    return builder.build();
-  }
-
-  /**
-   * Creates an {@code ImmutableMap<String, String>} from a {@code Properties}
-   * instance. Properties normally derive from {@code Map<Object, Object>}, but
-   * they typically contain strings, which is awkward. This method lets you get
-   * a plain-old-{@code Map} out of a {@code Properties}.
-   *
-   * @param properties a {@code Properties} object to be converted
-   * @return an immutable map containing all the entries in
-   *     {@code properties}
-   * @throws ClassCastException if any key in {@code Properties} is not a
-   *     {@code String}
-   * @throws NullPointerException if any key or value in {@code Properties} is
-   *     null.
-   */
-  public static ImmutableMap<String, String>
-      fromProperties(Properties properties) {
-    ImmutableMap.Builder<String, String> builder = ImmutableMap.builder();
-
-    for (Enumeration<?> e = properties.propertyNames(); e.hasMoreElements();) {
-      String key = (String) e.nextElement();
-      builder.put(key, properties.getProperty(key));
-    }
-
-    return builder.build();
-  }
-
-  /**
-   * Returns an immutable map entry with the specified key and value. The {@link
-   * Entry#setValue} operation throws an {@link UnsupportedOperationException}.
-   *
-   * <p>The returned entry is serializable.
-   *
-   * @param key the key to be associated with the returned entry
-   * @param value the value to be associated with the returned entry
-   */
-  public static <K, V> Entry<K, V> immutableEntry(
-      @Nullable final K key, @Nullable final V value) {
-    return new ImmutableEntry<K, V>(key, value);
-  }
-
-  /**
-   * Returns an unmodifiable view of the specified set of entries. The {@link
-   * Entry#setValue} operation throws an {@link UnsupportedOperationException},
-   * as do any operations that would modify the returned set.
-   *
-   * @param entrySet the entries for which to return an unmodifiable view
-   * @return an unmodifiable view of the entries
-   */
-  static <K, V> Set<Entry<K, V>> unmodifiableEntrySet(
-      final Set<Entry<K, V>> entrySet) {
-    return new UnmodifiableEntrySet<K, V>(Collections.unmodifiableSet(
-        entrySet));
-  }
-
-  /**
-   * Returns an unmodifiable view of the specified map entry. The {@link
-   * Entry#setValue} operation throws an {@link UnsupportedOperationException}.
-   * This also has the side-effect of redefining {@code equals} to comply with
-   * the Entry contract, to avoid a possible nefarious implementation of
-   * equals.
-   *
-   * @param entry the entry for which to return an unmodifiable view
-   * @return an unmodifiable view of the entry
-   */
-  private static <K, V> Entry<K, V> unmodifiableEntry(final Entry<K, V> entry) {
-    checkNotNull(entry);
-    return new AbstractMapEntry<K, V>() {
-      @Override public K getKey() {
-        return entry.getKey();
-      }
-      @Override public V getValue() {
-        return entry.getValue();
-      }
-    };
-  }
-
-  /** @see Multimaps#unmodifiableEntries */
-  static class UnmodifiableEntries<K, V>
-      extends ForwardingCollection<Entry<K, V>> {
-    private final Collection<Entry<K, V>> entries;
-
-    UnmodifiableEntries(Collection<Entry<K, V>> entries) {
-      this.entries = entries;
-    }
-
-    @Override protected Collection<Entry<K, V>> delegate() {
-      return entries;
-    }
-
-    @Override public Iterator<Entry<K, V>> iterator() {
-      final Iterator<Entry<K, V>> delegate = super.iterator();
-      return new ForwardingIterator<Entry<K, V>>() {
-        @Override public Entry<K, V> next() {
-          return unmodifiableEntry(super.next());
-        }
-        @Override protected Iterator<Entry<K, V>> delegate() {
-          return delegate;
-        }
-      };
-    }
-
-    // See java.util.Collections.UnmodifiableEntrySet for details on attacks.
-
-    @Override public Object[] toArray() {
-      return ObjectArrays.toArrayImpl(this);
-    }
-
-    @Override public <T> T[] toArray(T[] array) {
-      return ObjectArrays.toArrayImpl(this, array);
-    }
-
-    @Override public boolean contains(Object o) {
-      return containsEntryImpl(delegate(), o);
-    }
-
-    @Override public boolean containsAll(Collection<?> c) {
-      return Collections2.containsAll(this, c);
-    }
-  }
-
-  /** @see Maps#unmodifiableEntrySet(Set) */
-  static class UnmodifiableEntrySet<K, V>
-      extends UnmodifiableEntries<K, V>
-      implements Set<Entry<K, V>> {
-    UnmodifiableEntrySet(Set<Entry<K, V>> entries) {
-      super(entries);
-    }
-
-    // See java.util.Collections.UnmodifiableEntrySet for details on attacks.
-
-    @Override public boolean equals(@Nullable Object object) {
-      return Collections2.setEquals(this, object);
-    }
-
-    @Override public int hashCode() {
-      return Sets.hashCodeImpl(this);
-    }
-  }
-
-  /**
-   * Returns an unmodifiable view of the specified bimap. This method allows
-   * modules to provide users with "read-only" access to internal bimaps. Query
-   * operations on the returned bimap "read through" to the specified bimap, and
-   * attemps to modify the returned map, whether direct or via its collection
-   * views, result in an {@code UnsupportedOperationException}.
-   *
-   * <p>The returned bimap will be serializable if the specified bimap is
-   * serializable.
-   *
-   * @param bimap the bimap for which an unmodifiable view is to be returned
-   * @return an unmodifiable view of the specified bimap
-   */
-  public static <K, V> BiMap<K, V> unmodifiableBiMap(
-      BiMap<? extends K, ? extends V> bimap) {
-    return new UnmodifiableBiMap<K, V>(bimap, null);
-  }
-
-  /** @see Maps#unmodifiableBiMap(BiMap) */
-  private static class UnmodifiableBiMap<K, V>
-      extends ForwardingMap<K, V> implements BiMap<K, V>, Serializable {
-
-    final Map<K, V> unmodifiableMap;
-    final BiMap<? extends K, ? extends V> delegate;
-    transient BiMap<V, K> inverse;
-    transient Set<V> values;
-
-    UnmodifiableBiMap(BiMap<? extends K, ? extends V> delegate,
-        @Nullable BiMap<V, K> inverse) {
-      unmodifiableMap = Collections.<K, V>unmodifiableMap(delegate);
-      this.delegate = delegate;
-      this.inverse = inverse;
-    }
-
-    @Override protected Map<K, V> delegate() {
-      return unmodifiableMap;
-    }
-
-    public V forcePut(K key, V value) {
-      throw new UnsupportedOperationException();
-    }
-
-    public BiMap<V, K> inverse() {
-      BiMap<V, K> result = inverse;
-      return (result == null)
-          ? inverse = new UnmodifiableBiMap<V, K>(delegate.inverse(), this)
-          : result;
-    }
-
-    @Override public Set<V> values() {
-      Set<V> result = values;
-      return (result == null)
-          ? values = Collections.<V>unmodifiableSet(delegate.values())
-          : result;
-    }
-
-    private static final long serialVersionUID = 0;
-  }
-
-  /**
-   * Implements {@code Collection.contains} safely for forwarding collections of
-   * map entries. If {@code o} is an instance of {@code Map.Entry}, it is
-   * wrapped using {@link #unmodifiableEntry} to protect against a possible
-   * nefarious equals method.
-   *
-   * <p>Note that {@code c} is the backing (delegate) collection, rather than
-   * the forwarding collection.
-   *
-   * @param c the delegate (unwrapped) collection of map entries
-   * @param o the object that might be contained in {@code c}
-   * @return {@code true} if {@code c} contains {@code o}
-   */
-  static <K, V> boolean containsEntryImpl(Collection<Entry<K, V>> c, Object o) {
-    if (!(o instanceof Entry)) {
-      return false;
-    }
-    return c.contains(unmodifiableEntry((Entry<?, ?>) o));
-  }
-
-  /**
-   * Implements {@code Collection.remove} safely for forwarding collections of
-   * map entries. If {@code o} is an instance of {@code Map.Entry}, it is
-   * wrapped using {@link #unmodifiableEntry} to protect against a possible
-   * nefarious equals method.
-   *
-   * <p>Note that {@code c} is backing (delegate) collection, rather than the
-   * forwarding collection.
-   *
-   * @param c the delegate (unwrapped) collection of map entries
-   * @param o the object to remove from {@code c}
-   * @return {@code true} if {@code c} was changed
-   */
-  static <K, V> boolean removeEntryImpl(Collection<Entry<K, V>> c, Object o) {
-    if (!(o instanceof Entry)) {
-      return false;
-    }
-    return c.remove(unmodifiableEntry((Entry<?, ?>) o));
-  }
-
-  /**
-   * Returns a view of a map where each value is transformed by a function. All
-   * other properties of the map, such as iteration order, are left intact. For
-   * example, the code:
-   * <pre>   {@code
-   *
-   *   Map<String, Integer> map = ImmutableMap.of("a", 4, "b", 9);
-   *   Function<Integer, Double> sqrt = new Function<Integer, Double>() {
-   *     public Double apply(Integer in) {
-   *       return Math.sqrt((int) in);
-   *     }
-   *   };
-   *   Map<String, Double> transformed = Maps.transformValues(sqrt, map);
-   *   System.out.println(transformed);}</pre>
-   *
-   * ... prints {@code {a=2.0, b=3.0}}.
-   *
-   * <p>Changes in the underlying map are reflected in this view. Conversely,
-   * this view supports removal operations, and these are reflected in the
-   * underlying map.
-   *
-   * <p>It's acceptable for the underlying map to contain null keys, and even
-   * null values provided that the function is capable of accepting null input.
-   * The transformed map might contain null values, if the function sometimes
-   * gives a null result.
-   *
-   * <p>The returned map is not thread-safe or serializable, even if the
-   * underlying map is.
-   *
-   * <p>The function is applied lazily, invoked when needed. This is necessary
-   * for the returned map to be a view, but it means that the function will be
-   * applied many times for bulk operations like {@link Map#containsValue} and
-   * {@code Map.toString()}. For this to perform well, {@code function} should
-   * be fast. To avoid lazy evaluation when the returned map doesn't need to be
-   * a view, copy the returned map into a new map of your choosing.
-   */
-  public static <K, V1, V2> Map<K, V2> transformValues(
-      Map<K, V1> fromMap, Function<? super V1, V2> function) {
-    return new TransformedValuesMap<K, V1, V2>(fromMap, function);
-  }
-
-  private static class TransformedValuesMap<K, V1, V2>
-      extends AbstractMap<K, V2> {
-    final Map<K, V1> fromMap;
-    final Function<? super V1, V2> function;
-
-    TransformedValuesMap(Map<K, V1> fromMap, Function<? super V1, V2> function)
-    {
-      this.fromMap = checkNotNull(fromMap);
-      this.function = checkNotNull(function);
-    }
-
-    @Override public int size() {
-      return fromMap.size();
-    }
-
-    @Override public boolean containsKey(Object key) {
-      return fromMap.containsKey(key);
-    }
-
-    @Override public V2 get(Object key) {
-      V1 value = fromMap.get(key);
-      return (value != null || fromMap.containsKey(key))
-          ? function.apply(value) : null;
-    }
-
-    @Override public V2 remove(Object key) {
-      return fromMap.containsKey(key)
-          ? function.apply(fromMap.remove(key))
-          : null;
-    }
-
-    @Override public void clear() {
-      fromMap.clear();
-    }
-
-    EntrySet entrySet;
-
-    @Override public Set<Entry<K, V2>> entrySet() {
-      EntrySet result = entrySet;
-      if (result == null) {
-        entrySet = result = new EntrySet();
-      }
-      return result;
-    }
-
-    class EntrySet extends AbstractSet<Entry<K, V2>> {
-      @Override public int size() {
-        return TransformedValuesMap.this.size();
-      }
-
-      @Override public Iterator<Entry<K, V2>> iterator() {
-        final Iterator<Entry<K, V1>> mapIterator
-            = fromMap.entrySet().iterator();
-
-        return new Iterator<Entry<K, V2>>() {
-          public boolean hasNext() {
-            return mapIterator.hasNext();
-          }
-
-          public Entry<K, V2> next() {
-            final Entry<K, V1> entry = mapIterator.next();
-            return new AbstractMapEntry<K, V2>() {
-              @Override public K getKey() {
-                return entry.getKey();
-              }
-              @Override public V2 getValue() {
-                return function.apply(entry.getValue());
-              }
-            };
-          }
-
-          public void remove() {
-            mapIterator.remove();
-          }
-        };
-      }
-
-      @Override public void clear() {
-        fromMap.clear();
-      }
-
-      @Override public boolean contains(Object o) {
-        if (!(o instanceof Entry)) {
-          return false;
-        }
-        Entry<?, ?> entry = (Entry<?, ?>) o;
-        Object entryKey = entry.getKey();
-        Object entryValue = entry.getValue();
-        V2 mapValue = TransformedValuesMap.this.get(entryKey);
-        if (mapValue != null) {
-          return mapValue.equals(entryValue);
-        }
-        return entryValue == null && containsKey(entryKey);
-      }
-
-      @Override public boolean remove(Object o) {
-        if (contains(o)) {
-          Entry<?, ?> entry = (Entry<?, ?>) o;
-          Object key = entry.getKey();
-          fromMap.remove(key);
-          return true;
-        }
-        return false;
-      }
-    }
-  }
-
-  /**
-   * Returns a map containing the mappings in {@code unfiltered} whose keys
-   * satisfy a predicate. The returned map is a live view of {@code unfiltered};
-   * changes to one affect the other.
-   *
-   * <p>The resulting map's {@code keySet()}, {@code entrySet()}, and {@code
-   * values()} views have iterators that don't support {@code remove()}, but all
-   * other methods are supported by the map and its views. The map's {@code
-   * put()} and {@code putAll()} methods throw an {@link
-   * IllegalArgumentException} if a key that doesn't satisfy the predicate is
-   * provided.
-   *
-   * <p>When methods such as {@code removeAll()} and {@code clear()} are called
-   * on the filtered map or its views, only mappings whose keys satisfy the
-   * filter will be removed from the underlying map.
-   *
-   * <p>The returned map isn't threadsafe or serializable, even if {@code
-   * unfiltered} is.
-   *
-   * <p>Many of the filtered map's methods, such as {@code size()},
-   * iterate across every key/value mapping in the underlying map and determine
-   * which satisfy the filter. When a live view is <i>not</i> needed, it may be
-   * faster to copy the filtered map and use the copy.
-   */
-  public static <K, V> Map<K, V> filterKeys(
-      Map<K, V> unfiltered, final Predicate<? super K> keyPredicate) {
-    checkNotNull(keyPredicate);
-    Predicate<Entry<K, V>> entryPredicate = new Predicate<Entry<K, V>>() {
-      public boolean apply(Entry<K, V> input) {
-        return keyPredicate.apply(input.getKey());
-      }
-    };
-    return (unfiltered instanceof AbstractFilteredMap)
-        ? filterFiltered((AbstractFilteredMap<K, V>) unfiltered, entryPredicate)
-        : new FilteredKeyMap<K, V>(
-            checkNotNull(unfiltered), keyPredicate, entryPredicate);
-  }
-
-  /**
-   * Returns a map containing the mappings in {@code unfiltered} whose values
-   * satisfy a predicate. The returned map is a live view of {@code unfiltered};
-   * changes to one affect the other.
-   *
-   * <p>The resulting map's {@code keySet()}, {@code entrySet()}, and {@code
-   * values()} views have iterators that don't support {@code remove()}, but all
-   * other methods are supported by the map and its views. The {@link Map#put},
-   * {@link Map#putAll}, and {@link Entry#setValue} methods throw an {@link
-   * IllegalArgumentException} if a value that doesn't satisfy the predicate is
-   * provided.
-   *
-   * <p>When methods such as {@code removeAll()} and {@code clear()} are called
-   * on the filtered map or its views, only mappings whose values satisfy the
-   * filter will be removed from the underlying map.
-   *
-   * <p>The returned map isn't threadsafe or serializable, even if {@code
-   * unfiltered} is.
-   *
-   * <p>Many of the filtered map's methods, such as {@code size()},
-   * iterate across every key/value mapping in the underlying map and determine
-   * which satisfy the filter. When a live view is <i>not</i> needed, it may be
-   * faster to copy the filtered map and use the copy.
-   */
-  public static <K, V> Map<K, V> filterValues(
-      Map<K, V> unfiltered, final Predicate<? super V> valuePredicate) {
-    checkNotNull(valuePredicate);
-    Predicate<Entry<K, V>> entryPredicate = new Predicate<Entry<K, V>>() {
-      public boolean apply(Entry<K, V> input) {
-        return valuePredicate.apply(input.getValue());
-      }
-    };
-    return filterEntries(unfiltered, entryPredicate);
-  }
-
-  /**
-   * Returns a map containing the mappings in {@code unfiltered} that satisfy a
-   * predicate. The returned map is a live view of {@code unfiltered}; changes
-   * to one affect the other.
-   *
-   * <p>The resulting map's {@code keySet()}, {@code entrySet()}, and {@code
-   * values()} views have iterators that don't support {@code remove()}, but all
-   * other methods are supported by the map and its views. The map's {@code
-   * put()} and {@code putAll()} methods throw an {@link
-   * IllegalArgumentException} if a key/value pair that doesn't satisfy the
-   * predicate is provided. Similarly, the map's entries have a {@link
-   * Entry#setValue} method that throws an {@link IllegalArgumentException} when
-   * the existing key and the provided value don't satisfy the predicate.
-   *
-   * <p>When methods such as {@code removeAll()} and {@code clear()} are called
-   * on the filtered map or its views, only mappings that satisfy the filter
-   * will be removed from the underlying map.
-   *
-   * <p>The returned map isn't threadsafe or serializable, even if {@code
-   * unfiltered} is.
-   *
-   * <p>Many of the filtered map's methods, such as {@code size()},
-   * iterate across every key/value mapping in the underlying map and determine
-   * which satisfy the filter. When a live view is <i>not</i> needed, it may be
-   * faster to copy the filtered map and use the copy.
-   */
-  public static <K, V> Map<K, V> filterEntries(
-      Map<K, V> unfiltered, Predicate<? super Entry<K, V>> entryPredicate) {
-    checkNotNull(entryPredicate);
-    return (unfiltered instanceof AbstractFilteredMap)
-        ? filterFiltered((AbstractFilteredMap<K, V>) unfiltered, entryPredicate)
-        : new FilteredEntryMap<K, V>(checkNotNull(unfiltered), entryPredicate);
-  }
-
-  /**
-   * Support {@code clear()}, {@code removeAll()}, and {@code retainAll()} when
-   * filtering a filtered map.
-   */
-  private static <K, V> Map<K, V> filterFiltered(
-      AbstractFilteredMap<K, V> map,
-      Predicate<? super Entry<K, V>> entryPredicate) {
-    Predicate<Entry<K, V>> predicate
-        = Predicates.and(map.predicate, entryPredicate);
-    return new FilteredEntryMap<K, V>(map.unfiltered, predicate);
-  }
-
-  private static abstract class AbstractFilteredMap<K, V>
-      extends AbstractMap<K, V> {
-
-    final Map<K, V> unfiltered;
-    final Predicate<? super Entry<K, V>> predicate;
-
-    AbstractFilteredMap(Map<K, V> unfiltered,
-        Predicate<? super Entry<K, V>> predicate) {
-      this.unfiltered = unfiltered;
-      this.predicate = predicate;
-    }
-
-    boolean apply(Object key, V value) {
-      // This method is called only when the key is in the map, implying that
-      // key is a K.
-      @SuppressWarnings("unchecked")
-      K k = (K) key;
-      return predicate.apply(Maps.immutableEntry(k, value));
-    }
-
-    @Override public V put(K key, V value) {
-      checkArgument(apply(key, value));
-      return unfiltered.put(key, value);
-    }
-
-    @Override public void putAll(Map<? extends K, ? extends V> map) {
-      for (Entry<? extends K, ? extends V> entry : map.entrySet()) {
-        checkArgument(apply(entry.getKey(), entry.getValue()));
-      }
-      unfiltered.putAll(map);
-    }
-
-    @Override public boolean containsKey(Object key) {
-      return unfiltered.containsKey(key) && apply(key, unfiltered.get(key));
-    }
-
-    @Override public V get(Object key) {
-      V value = unfiltered.get(key);
-      return ((value != null) && apply(key, value)) ? value : null;
-    }
-
-    @Override public boolean isEmpty() {
-      return entrySet().isEmpty();
-    }
-
-    @Override public V remove(Object key) {
-      return containsKey(key) ? unfiltered.remove(key) : null;
-    }
-
-    Collection<V> values;
-
-    @Override public Collection<V> values() {
-      Collection<V> result = values;
-      return (result == null) ? values = new Values() : result;
-    }
-
-    class Values extends AbstractCollection<V> {
-      @Override public Iterator<V> iterator() {
-        final Iterator<Entry<K, V>> entryIterator = entrySet().iterator();
-        return new UnmodifiableIterator<V>() {
-          public boolean hasNext() {
-            return entryIterator.hasNext();
-          }
-          public V next() {
-            return entryIterator.next().getValue();
-          }
-        };
-      }
-
-      @Override public int size() {
-        return entrySet().size();
-      }
-
-      @Override public void clear() {
-        entrySet().clear();
-      }
-
-      @Override public boolean isEmpty() {
-        return entrySet().isEmpty();
-      }
-
-      @Override public boolean remove(Object o) {
-        Iterator<Entry<K, V>> iterator = unfiltered.entrySet().iterator();
-        while (iterator.hasNext()) {
-          Entry<K, V> entry = iterator.next();
-          if (Objects.equal(o, entry.getValue()) && predicate.apply(entry)) {
-            iterator.remove();
-            return true;
-          }
-        }
-        return false;
-      }
-
-      @Override public boolean removeAll(Collection<?> collection) {
-        checkNotNull(collection);
-        boolean changed = false;
-        Iterator<Entry<K, V>> iterator = unfiltered.entrySet().iterator();
-        while (iterator.hasNext()) {
-          Entry<K, V> entry = iterator.next();
-          if (collection.contains(entry.getValue()) && predicate.apply(entry)) {
-            iterator.remove();
-            changed = true;
-          }
-        }
-        return changed;
-      }
-
-      @Override public boolean retainAll(Collection<?> collection) {
-        checkNotNull(collection);
-        boolean changed = false;
-        Iterator<Entry<K, V>> iterator = unfiltered.entrySet().iterator();
-        while (iterator.hasNext()) {
-          Entry<K, V> entry = iterator.next();
-          if (!collection.contains(entry.getValue())
-              && predicate.apply(entry)) {
-            iterator.remove();
-            changed = true;
-          }
-        }
-        return changed;
-      }
-
-      @Override public Object[] toArray() {
-        // creating an ArrayList so filtering happens once
-        return Lists.newArrayList(iterator()).toArray();
-      }
-
-      @Override public <T> T[] toArray(T[] array) {
-        return Lists.newArrayList(iterator()).toArray(array);
-      }
-    }
-  }
-
-  private static class FilteredKeyMap<K, V> extends AbstractFilteredMap<K, V> {
-    Predicate<? super K> keyPredicate;
-
-    FilteredKeyMap(Map<K, V> unfiltered, Predicate<? super K> keyPredicate,
-        Predicate<Entry<K, V>> entryPredicate) {
-      super(unfiltered, entryPredicate);
-      this.keyPredicate = keyPredicate;
-    }
-
-    Set<Entry<K, V>> entrySet;
-
-    @Override public Set<Entry<K, V>> entrySet() {
-      Set<Entry<K, V>> result = entrySet;
-      return (result == null)
-          ? entrySet = Sets.filter(unfiltered.entrySet(), predicate)
-          : result;
-    }
-
-    Set<K> keySet;
-
-    @Override public Set<K> keySet() {
-      Set<K> result = keySet;
-      return (result == null)
-          ? keySet = Sets.filter(unfiltered.keySet(), keyPredicate)
-          : result;
-    }
-
-    // The cast is called only when the key is in the unfiltered map, implying
-    // that key is a K.
-    @SuppressWarnings("unchecked")
-    @Override public boolean containsKey(Object key) {
-      return unfiltered.containsKey(key) && keyPredicate.apply((K) key);
-    }
-  }
-
-  private static class FilteredEntryMap<K, V>
-      extends AbstractFilteredMap<K, V> {
-    /**
-     * Entries in this set satisfy the predicate, but they don't validate the
-     * input to {@code Entry.setValue()}.
-     */
-    final Set<Entry<K, V>> filteredEntrySet;
-
-    FilteredEntryMap(Map<K, V> unfiltered,
-        Predicate<? super Entry<K, V>> entryPredicate) {
-      super(unfiltered, entryPredicate);
-      filteredEntrySet = Sets.filter(unfiltered.entrySet(), predicate);
-    }
-
-    Set<Entry<K, V>> entrySet;
-
-    @Override public Set<Entry<K, V>> entrySet() {
-      Set<Entry<K, V>> result = entrySet;
-      return (result == null) ? entrySet = new EntrySet() : result;
-    }
-
-    private class EntrySet extends ForwardingSet<Entry<K, V>> {
-      @Override protected Set<Entry<K, V>> delegate() {
-        return filteredEntrySet;
-      }
-
-      @Override public Iterator<Entry<K, V>> iterator() {
-        final Iterator<Entry<K, V>> iterator = filteredEntrySet.iterator();
-        return new UnmodifiableIterator<Entry<K, V>>() {
-          public boolean hasNext() {
-            return iterator.hasNext();
-          }
-          public Entry<K, V> next() {
-            final Entry<K, V> entry = iterator.next();
-            return new ForwardingMapEntry<K, V>() {
-              @Override protected Entry<K, V> delegate() {
-                return entry;
-              }
-              @Override public V setValue(V value) {
-                checkArgument(apply(entry.getKey(), value));
-                return super.setValue(value);
-              }
-            };
-          }
-        };
-      }
-    }
-
-    Set<K> keySet;
-
-    @Override public Set<K> keySet() {
-      Set<K> result = keySet;
-      return (result == null) ? keySet = new KeySet() : result;
-    }
-
-    private class KeySet extends AbstractSet<K> {
-      @Override public Iterator<K> iterator() {
-        final Iterator<Entry<K, V>> iterator = filteredEntrySet.iterator();
-        return new UnmodifiableIterator<K>() {
-          public boolean hasNext() {
-            return iterator.hasNext();
-          }
-          public K next() {
-            return iterator.next().getKey();
-          }
-        };
-      }
-
-      @Override public int size() {
-        return filteredEntrySet.size();
-      }
-
-      @Override public void clear() {
-        filteredEntrySet.clear();
-      }
-
-      @Override public boolean contains(Object o) {
-        return containsKey(o);
-      }
-
-      @Override public boolean remove(Object o) {
-        if (containsKey(o)) {
-          unfiltered.remove(o);
-          return true;
-        }
-        return false;
-      }
-
-      @Override public boolean removeAll(Collection<?> collection) {
-        checkNotNull(collection); // for GWT
-        boolean changed = false;
-        for (Object obj : collection) {
-          changed |= remove(obj);
-        }
-        return changed;
-      }
-
-      @Override public boolean retainAll(Collection<?> collection) {
-        checkNotNull(collection); // for GWT
-        boolean changed = false;
-        Iterator<Entry<K, V>> iterator = unfiltered.entrySet().iterator();
-        while (iterator.hasNext()) {
-          Entry<K, V> entry = iterator.next();
-          if (!collection.contains(entry.getKey()) && predicate.apply(entry)) {
-            iterator.remove();
-            changed = true;
-          }
-        }
-        return changed;
-      }
-
-      @Override public Object[] toArray() {
-        // creating an ArrayList so filtering happens once
-        return Lists.newArrayList(iterator()).toArray();
-      }
-
-      @Override public <T> T[] toArray(T[] array) {
-        return Lists.newArrayList(iterator()).toArray(array);
-      }
-    }
-  }
-
-  /**
-   * {@code AbstractMap} extension that implements {@link #isEmpty()} as {@code
-   * entrySet().isEmpty()} instead of {@code size() == 0} to speed up
-   * implementations where {@code size()} is O(n), and it delegates the {@code
-   * isEmpty()} methods of its key set and value collection to this
-   * implementation.
-   */
-  @GwtCompatible
-  abstract static class ImprovedAbstractMap<K, V>
-      extends AbstractMap<K, V> {
-
-    /**
-     * Creates the entry set to be returned by {@link #entrySet()}. This method
-     * is invoked at most once on a given map, at the time when {@code
-     * entrySet} is first called.
-     */
-    protected abstract Set<Entry<K, V>> createEntrySet();
-
-    private transient Set<Entry<K, V>> entrySet;
-
-    @Override public Set<Entry<K, V>> entrySet() {
-      Set<Entry<K, V>> result = entrySet;
-      if (result == null) {
-        entrySet = result = createEntrySet();
-      }
-      return result;
-    }
-
-    private transient Set<K> keySet;
-
-    @Override public Set<K> keySet() {
-      Set<K> result = keySet;
-      if (result == null) {
-        final Set<K> delegate = super.keySet();
-        keySet = result = new ForwardingSet<K>() {
-          @Override protected Set<K> delegate() {
-            return delegate;
-          }
-
-          @Override public boolean isEmpty() {
-            return ImprovedAbstractMap.this.isEmpty();
-          }
-        };
-      }
-      return result;
-    }
-
-    private transient Collection<V> values;
-
-    @Override public Collection<V> values() {
-      Collection<V> result = values;
-      if (result == null) {
-        final Collection<V> delegate = super.values();
-        values = result = new ForwardingCollection<V>() {
-          @Override protected Collection<V> delegate() {
-            return delegate;
-          }
-
-          @Override public boolean isEmpty() {
-            return ImprovedAbstractMap.this.isEmpty();
-          }
-        };
-      }
-      return result;
-    }
-
-    /**
-     * Returns {@code true} if this map contains no key-value mappings.
-     *
-     * <p>The implementation returns {@code entrySet().isEmpty()}.
-     *
-     * @return {@code true} if this map contains no key-value mappings
-     */
-    @Override public boolean isEmpty() {
-      return entrySet().isEmpty();
-    }
-  }
-
-  static final MapJoiner standardJoiner
-      = Collections2.standardJoiner.withKeyValueSeparator("=");
-
-  /**
-   * Delegates to {@link Map#get}.  Returns {@code null} on {@code
-   * ClassCastException}.
-   */
-  static <V> V safeGet(Map<?, V> map, Object key) {
-    try {
-      return map.get(key);
-    } catch (ClassCastException e) {
-      return null;
-    }
-  }
-
-  /**
-   * Delegates to {@link Map#containsKey}.  Returns {@code false} on {@code
-   * ClassCastException}
-   */
-  static boolean safeContainsKey(Map<?, ?> map, Object key) {
-    try {
-      return map.containsKey(key);
-    } catch (ClassCastException e) {
-      return false;
-    }
-  }
-}
diff --git a/src/com/google/common/collect/Multimap.java b/src/com/google/common/collect/Multimap.java
deleted file mode 100644
index 6fe4ddb..0000000
--- a/src/com/google/common/collect/Multimap.java
+++ /dev/null
@@ -1,263 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-
-import java.util.Collection;
-import java.util.Map;
-import java.util.Set;
-
-import javax.annotation.Nullable;
-
-/**
- * A collection similar to a {@code Map}, but which may associate multiple
- * values with a single key. If you call {@link #put} twice, with the same key
- * but different values, the multimap contains mappings from the key to both
- * values.
- *
- * <p>The methods {@link #get}, {@link #keySet}, {@link #keys}, {@link #values},
- * {@link #entries}, and {@link #asMap} return collections that are views of the
- * multimap. If the multimap is modifiable, updating it can change the contents
- * of those collections, and updating the collections will change the multimap.
- * In contrast, {@link #replaceValues} and {@link #removeAll} return collections
- * that are independent of subsequent multimap changes.
- *
- * <p>Depending on the implementation, a multimap may or may not allow duplicate
- * key-value pairs. In other words, the multimap contents after adding the same
- * key and value twice varies between implementations. In multimaps allowing
- * duplicates, the multimap will contain two mappings, and {@code get} will
- * return a collection that includes the value twice. In multimaps not
- * supporting duplicates, the multimap will contain a single mapping from the
- * key to the value, and {@code get} will return a collection that includes the
- * value once.
- *
- * <p>All methods that alter the multimap are optional, and the views returned
- * by the multimap may or may not be modifiable. When modification isn't
- * supported, those methods will throw an {@link UnsupportedOperationException}.
- *
- * @author Jared Levy
- * @param <K> the type of keys maintained by this multimap
- * @param <V> the type of mapped values
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible
-public interface Multimap<K, V> {
-  // Query Operations
-
-  /** Returns the number of key-value pairs in the multimap. */
-  int size();
-
-  /** Returns {@code true} if the multimap contains no key-value pairs. */
-  boolean isEmpty();
-
-  /**
-   * Returns {@code true} if the multimap contains any values for the specified
-   * key.
-   *
-   * @param key key to search for in multimap
-   */
-  boolean containsKey(@Nullable Object key);
-
-  /**
-   * Returns {@code true} if the multimap contains the specified value for any
-   * key.
-   *
-   * @param value value to search for in multimap
-   */
-  boolean containsValue(@Nullable Object value);
-
-  /**
-   * Returns {@code true} if the multimap contains the specified key-value pair.
-   *
-   * @param key key to search for in multimap
-   * @param value value to search for in multimap
-   */
-  boolean containsEntry(@Nullable Object key, @Nullable Object value);
-
-  // Modification Operations
-
-  /**
-   * Stores a key-value pair in the multimap.
-   *
-   * <p>Some multimap implementations allow duplicate key-value pairs, in which
-   * case {@code put} always adds a new key-value pair and increases the
-   * multimap size by 1. Other implementations prohibit duplicates, and storing
-   * a key-value pair that's already in the multimap has no effect.
-   *
-   * @param key key to store in the multimap
-   * @param value value to store in the multimap
-   * @return {@code true} if the method increased the size of the multimap, or
-   *     {@code false} if the multimap already contained the key-value pair and
-   *     doesn't allow duplicates
-   */
-  boolean put(@Nullable K key, @Nullable V value);
-
-  /**
-   * Removes a key-value pair from the multimap.
-   *
-   * @param key key of entry to remove from the multimap
-   * @param value value of entry to remove the multimap
-   * @return {@code true} if the multimap changed
-   */
-  boolean remove(@Nullable Object key, @Nullable Object value);
-
-  // Bulk Operations
-
-  /**
-   * Stores a collection of values with the same key.
-   *
-   * @param key key to store in the multimap
-   * @param values values to store in the multimap
-   * @return {@code true} if the multimap changed
-   */
-  boolean putAll(@Nullable K key, Iterable<? extends V> values);
-
-  /**
-   * Copies all of another multimap's key-value pairs into this multimap. The
-   * order in which the mappings are added is determined by
-   * {@code multimap.entries()}.
-   *
-   * @param multimap mappings to store in this multimap
-   * @return {@code true} if the multimap changed
-   */
-  boolean putAll(Multimap<? extends K, ? extends V> multimap);
-
-  /**
-   * Stores a collection of values with the same key, replacing any existing
-   * values for that key.
-   *
-   * @param key key to store in the multimap
-   * @param values values to store in the multimap
-   * @return the collection of replaced values, or an empty collection if no
-   *     values were previously associated with the key. The collection
-   *     <i>may</i> be modifiable, but updating it will have no effect on the
-   *     multimap.
-   */
-  Collection<V> replaceValues(@Nullable K key, Iterable<? extends V> values);
-
-  /**
-   * Removes all values associated with a given key.
-   *
-   * @param key key of entries to remove from the multimap
-   * @return the collection of removed values, or an empty collection if no
-   *     values were associated with the provided key. The collection
-   *     <i>may</i> be modifiable, but updating it will have no effect on the
-   *     multimap.
-   */
-  Collection<V> removeAll(@Nullable Object key);
-
-  /**
-   * Removes all key-value pairs from the multimap.
-   */
-  void clear();
-
-  // Views
-
-  /**
-   * Returns a collection view of all values associated with a key. If no
-   * mappings in the multimap have the provided key, an empty collection is
-   * returned.
-   *
-   * <p>Changes to the returned collection will update the underlying multimap,
-   * and vice versa.
-   *
-   * @param key key to search for in multimap
-   * @return the collection of values that the key maps to
-   */
-  Collection<V> get(@Nullable K key);
-
-  /**
-   * Returns the set of all keys, each appearing once in the returned set.
-   * Changes to the returned set will update the underlying multimap, and vice
-   * versa.
-   *
-   * @return the collection of distinct keys
-   */
-  Set<K> keySet();
-
-  /**
-   * Returns a collection, which may contain duplicates, of all keys. The number
-   * of times of key appears in the returned multiset equals the number of
-   * mappings the key has in the multimap. Changes to the returned multiset will
-   * update the underlying multimap, and vice versa.
-   *
-   * @return a multiset with keys corresponding to the distinct keys of the
-   *     multimap and frequencies corresponding to the number of values that
-   *     each key maps to
-   */
-  Multiset<K> keys();
-
-  /**
-   * Returns a collection of all values in the multimap. Changes to the returned
-   * collection will update the underlying multimap, and vice versa.
-   *
-   * @return collection of values, which may include the same value multiple
-   *     times if it occurs in multiple mappings
-   */
-  Collection<V> values();
-
-  /**
-   * Returns a collection of all key-value pairs. Changes to the returned
-   * collection will update the underlying multimap, and vice versa. The entries
-   * collection does not support the {@code add} or {@code addAll} operations.
-   *
-   * @return collection of map entries consisting of key-value pairs
-   */
-  Collection<Map.Entry<K, V>> entries();
-
-  /**
-   * Returns a map view that associates each key with the corresponding values
-   * in the multimap. Changes to the returned map, such as element removal,
-   * will update the underlying multimap. The map does not support
-   * {@code setValue()} on its entries, {@code put}, or {@code putAll}.
-   *
-   * <p>The collections returned by {@code asMap().get(Object)} have the same
-   * behavior as those returned by {@link #get}.
-   *
-   * @return a map view from a key to its collection of values
-   */
-  Map<K, Collection<V>> asMap();
-
-  // Comparison and hashing
-
-  /**
-   * Compares the specified object with this multimap for equality. Two
-   * multimaps are equal when their map views, as returned by {@link #asMap},
-   * are also equal.
-   *
-   * <p>In general, two multimaps with identical key-value mappings may or may
-   * not be equal, depending on the implementation. For example, two
-   * {@link SetMultimap} instances with the same key-value mappings are equal,
-   * but equality of two {@link ListMultimap} instances depends on the ordering
-   * of the values for each key.
-   *
-   * <p>A non-empty {@link SetMultimap} cannot be equal to a non-empty
-   * {@link ListMultimap}, since their {@link #asMap} views contain unequal
-   * collections as values. However, any two empty multimaps are equal, because
-   * they both have empty {@link #asMap} views.
-   */
-  boolean equals(@Nullable Object obj);
-
-  /**
-   * Returns the hash code for this multimap.
-   *
-   * <p>The hash code of a multimap is defined as the hash code of the map view,
-   * as returned by {@link Multimap#asMap}.
-   */
-  int hashCode();
-}
diff --git a/src/com/google/common/collect/Multimaps.java b/src/com/google/common/collect/Multimaps.java
deleted file mode 100644
index eea459b..0000000
--- a/src/com/google/common/collect/Multimaps.java
+++ /dev/null
@@ -1,1228 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-import com.google.common.base.Function;
-import com.google.common.base.Joiner;
-import com.google.common.base.Joiner.MapJoiner;
-import com.google.common.base.Preconditions;
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Preconditions.checkState;
-import com.google.common.base.Supplier;
-
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.io.Serializable;
-import java.util.AbstractSet;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.NoSuchElementException;
-import java.util.Set;
-import java.util.SortedSet;
-
-import javax.annotation.Nullable;
-
-/**
- * Provides static methods acting on or generating a {@code Multimap}.
- *
- * @author Jared Levy
- * @author Robert Konigsberg
- * @author Mike Bostock
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible
-public final class Multimaps {
-  private Multimaps() {}
-
-  /**
-   * Creates a new {@code Multimap} that uses the provided map and factory. It
-   * can generate a multimap based on arbitrary {@link Map} and
-   * {@link Collection} classes.
-   *
-   * <p>The {@code factory}-generated and {@code map} classes determine the
-   * multimap iteration order. They also specify the behavior of the
-   * {@code equals}, {@code hashCode}, and {@code toString} methods for the
-   * multimap and its returned views. However, the multimap's {@code get}
-   * method returns instances of a different class than {@code factory.get()}
-   * does.
-   *
-   * <p>The multimap is serializable if {@code map}, {@code factory}, the
-   * collections generated by {@code factory}, and the multimap contents are all
-   * serializable.
-   *
-   * <p>The multimap is not threadsafe when any concurrent operations update the
-   * multimap, even if {@code map} and the instances generated by
-   * {@code factory} are. Concurrent read operations will work correctly. To
-   * allow concurrent update operations, wrap the multimap with a call to
-   * {@link #synchronizedMultimap}.
-   *
-   * <p>Call this method only when the simpler methods
-   * {@link ArrayListMultimap#create()}, {@link HashMultimap#create()},
-   * {@link LinkedHashMultimap#create()}, {@link LinkedListMultimap#create()},
-   * {@link TreeMultimap#create()}, and
-   * {@link TreeMultimap#create(Comparator, Comparator)} won't suffice.
-   *
-   * <p>Note: the multimap assumes complete ownership over of {@code map} and
-   * the collections returned by {@code factory}. Those objects should not be
-   * manually updated and they should not use soft, weak, or phantom references.
-   *
-   * @param map place to store the mapping from each key to its corresponding
-   *     values
-   * @param factory supplier of new, empty collections that will each hold all
-   *     values for a given key
-   * @throws IllegalArgumentException if {@code map} is not empty
-   */
-  public static <K, V> Multimap<K, V> newMultimap(Map<K, Collection<V>> map,
-      final Supplier<? extends Collection<V>> factory) {
-    return new CustomMultimap<K, V>(map, factory);
-  }
-
-  private static class CustomMultimap<K, V> extends AbstractMultimap<K, V> {
-    transient Supplier<? extends Collection<V>> factory;
-
-    CustomMultimap(Map<K, Collection<V>> map,
-        Supplier<? extends Collection<V>> factory) {
-      super(map);
-      this.factory = checkNotNull(factory);
-    }
-
-    @Override protected Collection<V> createCollection() {
-      return factory.get();
-    }
-
-    // can't use Serialization writeMultimap and populateMultimap methods since
-    // there's no way to generate the empty backing map.
-
-    /** @serialData the factory and the backing map */
-    private void writeObject(ObjectOutputStream stream) throws IOException {
-      stream.defaultWriteObject();
-      stream.writeObject(factory);
-      stream.writeObject(backingMap());
-    }
-
-    @SuppressWarnings("unchecked") // reading data stored by writeObject
-    private void readObject(ObjectInputStream stream)
-        throws IOException, ClassNotFoundException {
-      stream.defaultReadObject();
-      factory = (Supplier<? extends Collection<V>>) stream.readObject();
-      Map<K, Collection<V>> map = (Map<K, Collection<V>>) stream.readObject();
-      setMap(map);
-    }
-
-    private static final long serialVersionUID = 0;
-  }
-
-  /**
-   * Creates a new {@code ListMultimap} that uses the provided map and factory.
-   * It can generate a multimap based on arbitrary {@link Map} and {@link List}
-   * classes.
-   *
-   * <p>The {@code factory}-generated and {@code map} classes determine the
-   * multimap iteration order. They also specify the behavior of the
-   * {@code equals}, {@code hashCode}, and {@code toString} methods for the
-   * multimap and its returned views. The multimap's {@code get}, {@code
-   * removeAll}, and {@code replaceValues} methods return {@code RandomAccess}
-   * lists if the factory does. However, the multimap's {@code get} method
-   * returns instances of a different class than does {@code factory.get()}.
-   *
-   * <p>The multimap is serializable if {@code map}, {@code factory}, the
-   * lists generated by {@code factory}, and the multimap contents are all
-   * serializable.
-   *
-   * <p>The multimap is not threadsafe when any concurrent operations update the
-   * multimap, even if {@code map} and the instances generated by
-   * {@code factory} are. Concurrent read operations will work correctly. To
-   * allow concurrent update operations, wrap the multimap with a call to
-   * {@link #synchronizedListMultimap}.
-   *
-   * <p>Call this method only when the simpler methods
-   * {@link ArrayListMultimap#create()} and {@link LinkedListMultimap#create()}
-   * won't suffice.
-   *
-   * <p>Note: the multimap assumes complete ownership over of {@code map} and
-   * the lists returned by {@code factory}. Those objects should not be manually
-   * updated and they should not use soft, weak, or phantom references.
-   *
-   * @param map place to store the mapping from each key to its corresponding
-   *     values
-   * @param factory supplier of new, empty lists that will each hold all values
-   *     for a given key
-   * @throws IllegalArgumentException if {@code map} is not empty
-   */
-  public static <K, V> ListMultimap<K, V> newListMultimap(
-      Map<K, Collection<V>> map, final Supplier<? extends List<V>> factory) {
-    return new CustomListMultimap<K, V>(map, factory);
-  }
-
-  private static class CustomListMultimap<K, V>
-      extends AbstractListMultimap<K, V> {
-    transient Supplier<? extends List<V>> factory;
-
-    CustomListMultimap(Map<K, Collection<V>> map,
-        Supplier<? extends List<V>> factory) {
-      super(map);
-      this.factory = checkNotNull(factory);
-    }
-
-    @Override protected List<V> createCollection() {
-      return factory.get();
-    }
-
-    /** @serialData the factory and the backing map */
-    private void writeObject(ObjectOutputStream stream) throws IOException {
-      stream.defaultWriteObject();
-      stream.writeObject(factory);
-      stream.writeObject(backingMap());
-    }
-
-    @SuppressWarnings("unchecked") // reading data stored by writeObject
-    private void readObject(ObjectInputStream stream)
-        throws IOException, ClassNotFoundException {
-      stream.defaultReadObject();
-      factory = (Supplier<? extends List<V>>) stream.readObject();
-      Map<K, Collection<V>> map = (Map<K, Collection<V>>) stream.readObject();
-      setMap(map);
-    }
-
-    private static final long serialVersionUID = 0;
-  }
-
-  /**
-   * Creates a new {@code SetMultimap} that uses the provided map and factory.
-   * It can generate a multimap based on arbitrary {@link Map} and {@link Set}
-   * classes.
-   *
-   * <p>The {@code factory}-generated and {@code map} classes determine the
-   * multimap iteration order. They also specify the behavior of the
-   * {@code equals}, {@code hashCode}, and {@code toString} methods for the
-   * multimap and its returned views. However, the multimap's {@code get}
-   * method returns instances of a different class than {@code factory.get()}
-   * does.
-   *
-   * <p>The multimap is serializable if {@code map}, {@code factory}, the
-   * sets generated by {@code factory}, and the multimap contents are all
-   * serializable.
-   *
-   * <p>The multimap is not threadsafe when any concurrent operations update the
-   * multimap, even if {@code map} and the instances generated by
-   * {@code factory} are. Concurrent read operations will work correctly. To
-   * allow concurrent update operations, wrap the multimap with a call to
-   * {@link #synchronizedSetMultimap}.
-   *
-   * <p>Call this method only when the simpler methods
-   * {@link HashMultimap#create()}, {@link LinkedHashMultimap#create()},
-   * {@link TreeMultimap#create()}, and
-   * {@link TreeMultimap#create(Comparator, Comparator)} won't suffice.
-   *
-   * <p>Note: the multimap assumes complete ownership over of {@code map} and
-   * the sets returned by {@code factory}. Those objects should not be manually
-   * updated and they should not use soft, weak, or phantom references.
-   *
-   * @param map place to store the mapping from each key to its corresponding
-   *     values
-   * @param factory supplier of new, empty sets that will each hold all values
-   *     for a given key
-   * @throws IllegalArgumentException if {@code map} is not empty
-   */
-  public static <K, V> SetMultimap<K, V> newSetMultimap(
-      Map<K, Collection<V>> map, final Supplier<? extends Set<V>> factory) {
-    return new CustomSetMultimap<K, V>(map, factory);
-  }
-
-  private static class CustomSetMultimap<K, V>
-      extends AbstractSetMultimap<K, V> {
-    transient Supplier<? extends Set<V>> factory;
-
-    CustomSetMultimap(Map<K, Collection<V>> map,
-        Supplier<? extends Set<V>> factory) {
-      super(map);
-      this.factory = checkNotNull(factory);
-    }
-
-    @Override protected Set<V> createCollection() {
-      return factory.get();
-    }
-
-    /** @serialData the factory and the backing map */
-    private void writeObject(ObjectOutputStream stream) throws IOException {
-      stream.defaultWriteObject();
-      stream.writeObject(factory);
-      stream.writeObject(backingMap());
-    }
-
-    @SuppressWarnings("unchecked") // reading data stored by writeObject
-    private void readObject(ObjectInputStream stream)
-        throws IOException, ClassNotFoundException {
-      stream.defaultReadObject();
-      factory = (Supplier<? extends Set<V>>) stream.readObject();
-      Map<K, Collection<V>> map = (Map<K, Collection<V>>) stream.readObject();
-      setMap(map);
-    }
-
-    private static final long serialVersionUID = 0;
-  }
-
-  /**
-   * Creates a new {@code SortedSetMultimap} that uses the provided map and
-   * factory. It can generate a multimap based on arbitrary {@link Map} and
-   * {@link SortedSet} classes.
-   *
-   * <p>The {@code factory}-generated and {@code map} classes determine the
-   * multimap iteration order. They also specify the behavior of the
-   * {@code equals}, {@code hashCode}, and {@code toString} methods for the
-   * multimap and its returned views. However, the multimap's {@code get}
-   * method returns instances of a different class than {@code factory.get()}
-   * does.
-   *
-   * <p>The multimap is serializable if {@code map}, {@code factory}, the
-   * sets generated by {@code factory}, and the multimap contents are all
-   * serializable.
-   *
-   * <p>The multimap is not threadsafe when any concurrent operations update the
-   * multimap, even if {@code map} and the instances generated by
-   * {@code factory} are. Concurrent read operations will work correctly. To
-   * allow concurrent update operations, wrap the multimap with a call to
-   * {@link #synchronizedSortedSetMultimap}.
-   *
-   * <p>Call this method only when the simpler methods
-   * {@link TreeMultimap#create()} and
-   * {@link TreeMultimap#create(Comparator, Comparator)} won't suffice.
-   *
-   * <p>Note: the multimap assumes complete ownership over of {@code map} and
-   * the sets returned by {@code factory}. Those objects should not be manually
-   * updated and they should not use soft, weak, or phantom references.
-   *
-   * @param map place to store the mapping from each key to its corresponding
-   *     values
-   * @param factory supplier of new, empty sorted sets that will each hold
-   *     all values for a given key
-   * @throws IllegalArgumentException if {@code map} is not empty
-   */
-  public static <K, V> SortedSetMultimap<K, V> newSortedSetMultimap(
-      Map<K, Collection<V>> map,
-      final Supplier<? extends SortedSet<V>> factory) {
-    return new CustomSortedSetMultimap<K, V>(map, factory);
-  }
-
-  private static class CustomSortedSetMultimap<K, V>
-      extends AbstractSortedSetMultimap<K, V> {
-    transient Supplier<? extends SortedSet<V>> factory;
-    transient Comparator<? super V> valueComparator;
-
-    CustomSortedSetMultimap(Map<K, Collection<V>> map,
-        Supplier<? extends SortedSet<V>> factory) {
-      super(map);
-      this.factory = checkNotNull(factory);
-      valueComparator = factory.get().comparator();
-    }
-
-    @Override protected SortedSet<V> createCollection() {
-      return factory.get();
-    }
-
-    /*@Override*/ public Comparator<? super V> valueComparator() {
-      return valueComparator;
-    }
-
-    /** @serialData the factory and the backing map */
-    private void writeObject(ObjectOutputStream stream) throws IOException {
-      stream.defaultWriteObject();
-      stream.writeObject(factory);
-      stream.writeObject(backingMap());
-    }
-
-    @SuppressWarnings("unchecked") // reading data stored by writeObject
-    private void readObject(ObjectInputStream stream)
-        throws IOException, ClassNotFoundException {
-      stream.defaultReadObject();
-      factory = (Supplier<? extends SortedSet<V>>) stream.readObject();
-      valueComparator = factory.get().comparator();
-      Map<K, Collection<V>> map = (Map<K, Collection<V>>) stream.readObject();
-      setMap(map);
-    }
-
-    private static final long serialVersionUID = 0;
-  }
-
-  /**
-   * Copies each key-value mapping in {@code source} into {@code dest}, with
-   * its key and value reversed.
-   *
-   * @param source any multimap
-   * @param dest the multimap to copy into; usually empty
-   * @return {@code dest}
-   */
-  public static <K, V, M extends Multimap<K, V>> M invertFrom(
-      Multimap<? extends V, ? extends K> source, M dest) {
-    for (Map.Entry<? extends V, ? extends K> entry : source.entries()) {
-      dest.put(entry.getValue(), entry.getKey());
-    }
-    return dest;
-  }
-
-  /**
-   * Returns a synchronized (thread-safe) multimap backed by the specified
-   * multimap. In order to guarantee serial access, it is critical that
-   * <b>all</b> access to the backing multimap is accomplished through the
-   * returned multimap.
-   *
-   * <p>It is imperative that the user manually synchronize on the returned
-   * multimap when accessing any of its collection views: <pre>  {@code
-   *
-   *  Multimap<K, V> m = Multimaps.synchronizedMultimap(
-   *      HashMultimap.<K, V>create());
-   *  ...
-   *  Set<K> s = m.keySet();  // Needn't be in synchronized block
-   *  ...
-   *  synchronized (m) {  // Synchronizing on m, not s!
-   *    Iterator<K> i = s.iterator(); // Must be in synchronized block
-   *    while (i.hasNext()) {
-   *      foo(i.next());
-   *    }
-   *  }}</pre>
-   *
-   * Failure to follow this advice may result in non-deterministic behavior.
-   *
-   * <p>Note that the generated multimap's {@link Multimap#removeAll} and
-   * {@link Multimap#replaceValues} methods return collections that aren't
-   * synchronized.
-   *
-   * <p>The returned multimap will be serializable if the specified multimap is
-   * serializable.
-   *
-   * @param multimap the multimap to be wrapped in a synchronized view
-   * @return a synchronized view of the specified multimap
-   */
-  public static <K, V> Multimap<K, V> synchronizedMultimap(
-      Multimap<K, V> multimap) {
-    return Synchronized.multimap(multimap, null);
-  }
-
-  /**
-   * Returns an unmodifiable view of the specified multimap. Query operations on
-   * the returned multimap "read through" to the specified multimap, and
-   * attempts to modify the returned multimap, either directly or through the
-   * multimap's views, result in an {@code UnsupportedOperationException}.
-   *
-   * <p>Note that the generated multimap's {@link Multimap#removeAll} and
-   * {@link Multimap#replaceValues} methods return collections that are
-   * modifiable.
-   *
-   * <p>The returned multimap will be serializable if the specified multimap is
-   * serializable.
-   *
-   * @param delegate the multimap for which an unmodifiable view is to be
-   *     returned
-   * @return an unmodifiable view of the specified multimap
-   */
-  public static <K, V> Multimap<K, V> unmodifiableMultimap(
-      Multimap<K, V> delegate) {
-    return new UnmodifiableMultimap<K, V>(delegate);
-  }
-
-  private static class UnmodifiableMultimap<K, V>
-      extends ForwardingMultimap<K, V> implements Serializable {
-    final Multimap<K, V> delegate;
-    transient Collection<Entry<K, V>> entries;
-    transient Multiset<K> keys;
-    transient Set<K> keySet;
-    transient Collection<V> values;
-    transient Map<K, Collection<V>> map;
-
-    UnmodifiableMultimap(final Multimap<K, V> delegate) {
-      this.delegate = delegate;
-    }
-
-    @Override protected Multimap<K, V> delegate() {
-      return delegate;
-    }
-
-    @Override public void clear() {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override public Map<K, Collection<V>> asMap() {
-      Map<K, Collection<V>> result = map;
-      if (result == null) {
-        final Map<K, Collection<V>> unmodifiableMap
-            = Collections.unmodifiableMap(delegate.asMap());
-        map = result = new ForwardingMap<K, Collection<V>>() {
-          @Override protected Map<K, Collection<V>> delegate() {
-            return unmodifiableMap;
-          }
-
-          Set<Entry<K, Collection<V>>> entrySet;
-
-          @Override public Set<Map.Entry<K, Collection<V>>> entrySet() {
-            Set<Entry<K, Collection<V>>> result = entrySet;
-            return (result == null)
-                ? entrySet
-                    = unmodifiableAsMapEntries(unmodifiableMap.entrySet())
-                : result;
-          }
-
-          @Override public Collection<V> get(Object key) {
-            Collection<V> collection = unmodifiableMap.get(key);
-            return (collection == null)
-                ? null : unmodifiableValueCollection(collection);
-          }
-
-          Collection<Collection<V>> asMapValues;
-
-          @Override public Collection<Collection<V>> values() {
-            Collection<Collection<V>> result = asMapValues;
-            return (result == null)
-                ? asMapValues
-                    = new UnmodifiableAsMapValues<V>(unmodifiableMap.values())
-                : result;
-          }
-
-          @Override public boolean containsValue(Object o) {
-            return values().contains(o);
-          }
-        };
-      }
-      return result;
-    }
-
-    @Override public Collection<Entry<K, V>> entries() {
-      Collection<Entry<K, V>> result = entries;
-      if (result == null) {
-        entries = result = unmodifiableEntries(delegate.entries());
-      }
-      return result;
-    }
-
-    @Override public Collection<V> get(K key) {
-      return unmodifiableValueCollection(delegate.get(key));
-    }
-
-    @Override public Multiset<K> keys() {
-      Multiset<K> result = keys;
-      if (result == null) {
-        keys = result = Multisets.unmodifiableMultiset(delegate.keys());
-      }
-      return result;
-    }
-
-    @Override public Set<K> keySet() {
-      Set<K> result = keySet;
-      if (result == null) {
-        keySet = result = Collections.unmodifiableSet(delegate.keySet());
-      }
-      return result;
-    }
-
-    @Override public boolean put(K key, V value) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override public boolean putAll(K key,
-        @SuppressWarnings("hiding") Iterable<? extends V> values) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public boolean putAll(Multimap<? extends K, ? extends V> multimap) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override public boolean remove(Object key, Object value) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override public Collection<V> removeAll(Object key) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override public Collection<V> replaceValues(K key,
-        @SuppressWarnings("hiding") Iterable<? extends V> values) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override public Collection<V> values() {
-      Collection<V> result = values;
-      if (result == null) {
-        values = result = Collections.unmodifiableCollection(delegate.values());
-      }
-      return result;
-    }
-
-    private static final long serialVersionUID = 0;
-  }
-
-  private static class UnmodifiableAsMapValues<V>
-      extends ForwardingCollection<Collection<V>> {
-    final Collection<Collection<V>> delegate;
-    UnmodifiableAsMapValues(Collection<Collection<V>> delegate) {
-      this.delegate = Collections.unmodifiableCollection(delegate);
-    }
-    @Override protected Collection<Collection<V>> delegate() {
-      return delegate;
-    }
-    @Override public Iterator<Collection<V>> iterator() {
-      final Iterator<Collection<V>> iterator = delegate.iterator();
-      return new Iterator<Collection<V>>() {
-        public boolean hasNext() {
-          return iterator.hasNext();
-        }
-        public Collection<V> next() {
-          return unmodifiableValueCollection(iterator.next());
-        }
-        public void remove() {
-          throw new UnsupportedOperationException();
-        }
-      };
-    }
-    @Override public Object[] toArray() {
-      return ObjectArrays.toArrayImpl(this);
-    }
-    @Override public <T> T[] toArray(T[] array) {
-      return ObjectArrays.toArrayImpl(this, array);
-    }
-    @Override public boolean contains(Object o) {
-      return Iterators.contains(iterator(), o);
-    }
-    @Override public boolean containsAll(Collection<?> c) {
-      return Collections2.containsAll(this, c);
-    }
-  }
-
-  private static class UnmodifiableListMultimap<K, V>
-      extends UnmodifiableMultimap<K, V> implements ListMultimap<K, V> {
-    UnmodifiableListMultimap(ListMultimap<K, V> delegate) {
-      super(delegate);
-    }
-    @Override public ListMultimap<K, V> delegate() {
-      return (ListMultimap<K, V>) super.delegate();
-    }
-    @Override public List<V> get(K key) {
-      return Collections.unmodifiableList(delegate().get(key));
-    }
-    @Override public List<V> removeAll(Object key) {
-      throw new UnsupportedOperationException();
-    }
-    @Override public List<V> replaceValues(
-        K key, @SuppressWarnings("hiding") Iterable<? extends V> values) {
-      throw new UnsupportedOperationException();
-    }
-    private static final long serialVersionUID = 0;
-  }
-
-  private static class UnmodifiableSetMultimap<K, V>
-      extends UnmodifiableMultimap<K, V> implements SetMultimap<K, V> {
-    UnmodifiableSetMultimap(SetMultimap<K, V> delegate) {
-      super(delegate);
-    }
-    @Override public SetMultimap<K, V> delegate() {
-      return (SetMultimap<K, V>) super.delegate();
-    }
-    @Override public Set<V> get(K key) {
-      /*
-       * Note that this doesn't return a SortedSet when delegate is a
-       * SortedSetMultiset, unlike (SortedSet<V>) super.get().
-       */
-      return Collections.unmodifiableSet(delegate().get(key));
-    }
-    @Override public Set<Map.Entry<K, V>> entries() {
-      return Maps.unmodifiableEntrySet(delegate().entries());
-    }
-    @Override public Set<V> removeAll(Object key) {
-      throw new UnsupportedOperationException();
-    }
-    @Override public Set<V> replaceValues(
-        K key, @SuppressWarnings("hiding") Iterable<? extends V> values) {
-      throw new UnsupportedOperationException();
-    }
-    private static final long serialVersionUID = 0;
-  }
-
-  private static class UnmodifiableSortedSetMultimap<K, V>
-      extends UnmodifiableSetMultimap<K, V> implements SortedSetMultimap<K, V> {
-    UnmodifiableSortedSetMultimap(SortedSetMultimap<K, V> delegate) {
-      super(delegate);
-    }
-    @Override public SortedSetMultimap<K, V> delegate() {
-      return (SortedSetMultimap<K, V>) super.delegate();
-    }
-    @Override public SortedSet<V> get(K key) {
-      return Collections.unmodifiableSortedSet(delegate().get(key));
-    }
-    @Override public SortedSet<V> removeAll(Object key) {
-      throw new UnsupportedOperationException();
-    }
-    @Override public SortedSet<V> replaceValues(
-        K key, @SuppressWarnings("hiding") Iterable<? extends V> values) {
-      throw new UnsupportedOperationException();
-    }
-    public Comparator<? super V> valueComparator() {
-      return delegate().valueComparator();
-    }
-    private static final long serialVersionUID = 0;
-  }
-
-  /**
-   * Returns a synchronized (thread-safe) {@code SetMultimap} backed by the
-   * specified multimap.
-   *
-   * <p>You must follow the warnings described in {@link #synchronizedMultimap}.
-   *
-   * <p>The returned multimap will be serializable if the specified multimap is
-   * serializable.
-   *
-   * @param multimap the multimap to be wrapped
-   * @return a synchronized view of the specified multimap
-   */
-  public static <K, V> SetMultimap<K, V> synchronizedSetMultimap(
-      SetMultimap<K, V> multimap) {
-    return Synchronized.setMultimap(multimap, null);
-  }
-
-  /**
-   * Returns an unmodifiable view of the specified {@code SetMultimap}. Query
-   * operations on the returned multimap "read through" to the specified
-   * multimap, and attempts to modify the returned multimap, either directly or
-   * through the multimap's views, result in an
-   * {@code UnsupportedOperationException}.
-   *
-   * <p>Note that the generated multimap's {@link Multimap#removeAll} and
-   * {@link Multimap#replaceValues} methods return collections that are
-   * modifiable.
-   *
-   * <p>The returned multimap will be serializable if the specified multimap is
-   * serializable.
-   *
-   * @param delegate the multimap for which an unmodifiable view is to be
-   *     returned
-   * @return an unmodifiable view of the specified multimap
-   */
-  public static <K, V> SetMultimap<K, V> unmodifiableSetMultimap(
-      SetMultimap<K, V> delegate) {
-    return new UnmodifiableSetMultimap<K, V>(delegate);
-  }
-
-  /**
-   * Returns a synchronized (thread-safe) {@code SortedSetMultimap} backed by
-   * the specified multimap.
-   *
-   * <p>You must follow the warnings described in {@link #synchronizedMultimap}.
-   *
-   * <p>The returned multimap will be serializable if the specified multimap is
-   * serializable.
-   *
-   * @param multimap the multimap to be wrapped
-   * @return a synchronized view of the specified multimap
-   */
-  public static <K, V> SortedSetMultimap<K, V>
-      synchronizedSortedSetMultimap(SortedSetMultimap<K, V> multimap) {
-    return Synchronized.sortedSetMultimap(multimap, null);
-  }
-
-  /**
-   * Returns an unmodifiable view of the specified {@code SortedSetMultimap}.
-   * Query operations on the returned multimap "read through" to the specified
-   * multimap, and attempts to modify the returned multimap, either directly or
-   * through the multimap's views, result in an
-   * {@code UnsupportedOperationException}.
-   *
-   * <p>Note that the generated multimap's {@link Multimap#removeAll} and
-   * {@link Multimap#replaceValues} methods return collections that are
-   * modifiable.
-   *
-   * <p>The returned multimap will be serializable if the specified multimap is
-   * serializable.
-   *
-   * @param delegate the multimap for which an unmodifiable view is to be
-   *     returned
-   * @return an unmodifiable view of the specified multimap
-   */
-  public static <K, V> SortedSetMultimap<K, V> unmodifiableSortedSetMultimap(
-      SortedSetMultimap<K, V> delegate) {
-    return new UnmodifiableSortedSetMultimap<K, V>(delegate);
-  }
-
-  /**
-   * Returns a synchronized (thread-safe) {@code ListMultimap} backed by the
-   * specified multimap.
-   *
-   * <p>You must follow the warnings described in {@link #synchronizedMultimap}.
-   *
-   * @param multimap the multimap to be wrapped
-   * @return a synchronized view of the specified multimap
-   */
-  public static <K, V> ListMultimap<K, V> synchronizedListMultimap(
-      ListMultimap<K, V> multimap) {
-    return Synchronized.listMultimap(multimap, null);
-  }
-
-  /**
-   * Returns an unmodifiable view of the specified {@code ListMultimap}. Query
-   * operations on the returned multimap "read through" to the specified
-   * multimap, and attempts to modify the returned multimap, either directly or
-   * through the multimap's views, result in an
-   * {@code UnsupportedOperationException}.
-   *
-   * <p>Note that the generated multimap's {@link Multimap#removeAll} and
-   * {@link Multimap#replaceValues} methods return collections that are
-   * modifiable.
-   *
-   * <p>The returned multimap will be serializable if the specified multimap is
-   * serializable.
-   *
-   * @param delegate the multimap for which an unmodifiable view is to be
-   *     returned
-   * @return an unmodifiable view of the specified multimap
-   */
-  public static <K, V> ListMultimap<K, V> unmodifiableListMultimap(
-      ListMultimap<K, V> delegate) {
-    return new UnmodifiableListMultimap<K, V>(delegate);
-  }
-
-  /**
-   * Returns an unmodifiable view of the specified collection, preserving the
-   * interface for instances of {@code SortedSet}, {@code Set}, {@code List} and
-   * {@code Collection}, in that order of preference.
-   *
-   * @param collection the collection for which to return an unmodifiable view
-   * @return an unmodifiable view of the collection
-   */
-  private static <V> Collection<V> unmodifiableValueCollection(
-      Collection<V> collection) {
-    if (collection instanceof SortedSet) {
-      return Collections.unmodifiableSortedSet((SortedSet<V>) collection);
-    } else if (collection instanceof Set) {
-      return Collections.unmodifiableSet((Set<V>) collection);
-    } else if (collection instanceof List) {
-      return Collections.unmodifiableList((List<V>) collection);
-    }
-    return Collections.unmodifiableCollection(collection);
-  }
-
-  /**
-   * Returns an unmodifiable view of the specified multimap {@code asMap} entry.
-   * The {@link Entry#setValue} operation throws an {@link
-   * UnsupportedOperationException}, and the collection returned by {@code
-   * getValue} is also an unmodifiable (type-preserving) view. This also has the
-   * side-effect of redefining equals to comply with the Map.Entry contract, and
-   * to avoid a possible nefarious implementation of equals.
-   *
-   * @param entry the entry for which to return an unmodifiable view
-   * @return an unmodifiable view of the entry
-   */
-  private static <K, V> Map.Entry<K, Collection<V>> unmodifiableAsMapEntry(
-      final Map.Entry<K, Collection<V>> entry) {
-    checkNotNull(entry);
-    return new AbstractMapEntry<K, Collection<V>>() {
-      @Override public K getKey() {
-        return entry.getKey();
-      }
-
-      @Override public Collection<V> getValue() {
-        return unmodifiableValueCollection(entry.getValue());
-      }
-    };
-  }
-
-  /**
-   * Returns an unmodifiable view of the specified collection of entries. The
-   * {@link Entry#setValue} operation throws an {@link
-   * UnsupportedOperationException}. If the specified collection is a {@code
-   * Set}, the returned collection is also a {@code Set}.
-   *
-   * @param entries the entries for which to return an unmodifiable view
-   * @return an unmodifiable view of the entries
-   */
-  private static <K, V> Collection<Entry<K, V>> unmodifiableEntries(
-      Collection<Entry<K, V>> entries) {
-    if (entries instanceof Set) {
-      return Maps.unmodifiableEntrySet((Set<Entry<K, V>>) entries);
-    }
-    return new Maps.UnmodifiableEntries<K, V>(
-        Collections.unmodifiableCollection(entries));
-  }
-
-  /**
-   * Returns an unmodifiable view of the specified set of {@code asMap} entries.
-   * The {@link Entry#setValue} operation throws an {@link
-   * UnsupportedOperationException}, as do any operations that attempt to modify
-   * the returned collection.
-   *
-   * @param asMapEntries the {@code asMap} entries for which to return an
-   *     unmodifiable view
-   * @return an unmodifiable view of the collection entries
-   */
-  private static <K, V> Set<Entry<K, Collection<V>>> unmodifiableAsMapEntries(
-      Set<Entry<K, Collection<V>>> asMapEntries) {
-    return new UnmodifiableAsMapEntries<K, V>(
-        Collections.unmodifiableSet(asMapEntries));
-  }
-
-  /** @see Multimaps#unmodifiableAsMapEntries */
-  static class UnmodifiableAsMapEntries<K, V>
-      extends ForwardingSet<Entry<K, Collection<V>>> {
-    private final Set<Entry<K, Collection<V>>> delegate;
-    UnmodifiableAsMapEntries(Set<Entry<K, Collection<V>>> delegate) {
-      this.delegate = delegate;
-    }
-
-    @Override protected Set<Entry<K, Collection<V>>> delegate() {
-      return delegate;
-    }
-
-    @Override public Iterator<Entry<K, Collection<V>>> iterator() {
-      final Iterator<Entry<K, Collection<V>>> iterator = delegate.iterator();
-      return new ForwardingIterator<Entry<K, Collection<V>>>() {
-        @Override protected Iterator<Entry<K, Collection<V>>> delegate() {
-          return iterator;
-        }
-        @Override public Entry<K, Collection<V>> next() {
-          return unmodifiableAsMapEntry(iterator.next());
-        }
-      };
-    }
-
-    @Override public Object[] toArray() {
-      return ObjectArrays.toArrayImpl(this);
-    }
-
-    @Override public <T> T[] toArray(T[] array) {
-      return ObjectArrays.toArrayImpl(this, array);
-    }
-
-    @Override public boolean contains(Object o) {
-      return Maps.containsEntryImpl(delegate(), o);
-    }
-
-    @Override public boolean containsAll(Collection<?> c) {
-      return Collections2.containsAll(this, c);
-    }
-
-    @Override public boolean equals(@Nullable Object object) {
-      return Collections2.setEquals(this, object);
-    }
-  }
-
-  /**
-   * Returns a multimap view of the specified map. The multimap is backed by the
-   * map, so changes to the map are reflected in the multimap, and vice versa.
-   * If the map is modified while an iteration over one of the multimap's
-   * collection views is in progress (except through the iterator's own {@code
-   * remove} operation, or through the {@code setValue} operation on a map entry
-   * returned by the iterator), the results of the iteration are undefined.
-   *
-   * <p>The multimap supports mapping removal, which removes the corresponding
-   * mapping from the map. It does not support any operations which might add
-   * mappings, such as {@code put}, {@code putAll} or {@code replaceValues}.
-   *
-   * <p>The returned multimap will be serializable if the specified map is
-   * serializable.
-   *
-   * @param map the backing map for the returned multimap view
-   */
-  public static <K, V> SetMultimap<K, V> forMap(Map<K, V> map) {
-    return new MapMultimap<K, V>(map);
-  }
-
-  /** @see Multimaps#forMap */
-  private static class MapMultimap<K, V>
-      implements SetMultimap<K, V>, Serializable {
-    final Map<K, V> map;
-    transient Map<K, Collection<V>> asMap;
-
-    MapMultimap(Map<K, V> map) {
-      this.map = checkNotNull(map);
-    }
-
-    public int size() {
-      return map.size();
-    }
-
-    public boolean isEmpty() {
-      return map.isEmpty();
-    }
-
-    public boolean containsKey(Object key) {
-      return map.containsKey(key);
-    }
-
-    public boolean containsValue(Object value) {
-      return map.containsValue(value);
-    }
-
-    public boolean containsEntry(Object key, Object value) {
-      return map.entrySet().contains(Maps.immutableEntry(key, value));
-    }
-
-    public Set<V> get(final K key) {
-      return new AbstractSet<V>() {
-        @Override public Iterator<V> iterator() {
-          return new Iterator<V>() {
-            int i;
-
-            public boolean hasNext() {
-              return (i == 0) && map.containsKey(key);
-            }
-
-            public V next() {
-              if (!hasNext()) {
-                throw new NoSuchElementException();
-              }
-              i++;
-              return map.get(key);
-            }
-
-            public void remove() {
-              checkState(i == 1);
-              i = -1;
-              map.remove(key);
-            }
-          };
-        }
-
-        @Override public int size() {
-          return map.containsKey(key) ? 1 : 0;
-        }
-      };
-    }
-
-    public boolean put(K key, V value) {
-      throw new UnsupportedOperationException();
-    }
-
-    public boolean putAll(K key, Iterable<? extends V> values) {
-      throw new UnsupportedOperationException();
-    }
-
-    public boolean putAll(Multimap<? extends K, ? extends V> multimap) {
-      throw new UnsupportedOperationException();
-    }
-
-    public Set<V> replaceValues(K key, Iterable<? extends V> values) {
-      throw new UnsupportedOperationException();
-    }
-
-    public boolean remove(Object key, Object value) {
-      return map.entrySet().remove(Maps.immutableEntry(key, value));
-    }
-
-    public Set<V> removeAll(Object key) {
-      Set<V> values = new HashSet<V>(2);
-      if (!map.containsKey(key)) {
-        return values;
-      }
-      values.add(map.remove(key));
-      return values;
-    }
-
-    public void clear() {
-      map.clear();
-    }
-
-    public Set<K> keySet() {
-      return map.keySet();
-    }
-
-    public Multiset<K> keys() {
-      return Multisets.forSet(map.keySet());
-    }
-
-    public Collection<V> values() {
-      return map.values();
-    }
-
-    public Set<Entry<K, V>> entries() {
-      return map.entrySet();
-    }
-
-    public Map<K, Collection<V>> asMap() {
-      Map<K, Collection<V>> result = asMap;
-      if (result == null) {
-        asMap = result = new AsMap();
-      }
-      return result;
-    }
-
-    @Override public boolean equals(@Nullable Object object) {
-      if (object == this) {
-        return true;
-      }
-      if (object instanceof Multimap) {
-        Multimap<?, ?> that = (Multimap<?, ?>) object;
-        return this.size() == that.size() && asMap().equals(that.asMap());
-      }
-      return false;
-    }
-
-    @Override public int hashCode() {
-      return map.hashCode();
-    }
-
-    private static final MapJoiner joiner
-        = Joiner.on("], ").withKeyValueSeparator("=[").useForNull("null");
-
-    @Override public String toString() {
-      if (map.isEmpty()) {
-        return "{}";
-      }
-      StringBuilder builder = new StringBuilder(map.size() * 16).append('{');
-      joiner.appendTo(builder, map);
-      return builder.append("]}").toString();
-    }
-
-    /** @see MapMultimap#asMap */
-    class AsMapEntries extends AbstractSet<Entry<K, Collection<V>>> {
-      @Override public int size() {
-        return map.size();
-      }
-
-      @Override public Iterator<Entry<K, Collection<V>>> iterator() {
-        return new Iterator<Entry<K, Collection<V>>>() {
-          final Iterator<K> keys = map.keySet().iterator();
-
-          public boolean hasNext() {
-            return keys.hasNext();
-          }
-          public Entry<K, Collection<V>> next() {
-            final K key = keys.next();
-            return new AbstractMapEntry<K, Collection<V>>() {
-              @Override public K getKey() {
-                return key;
-              }
-              @Override public Collection<V> getValue() {
-                return get(key);
-              }
-            };
-          }
-          public void remove() {
-            keys.remove();
-          }
-        };
-      }
-
-      @Override public boolean contains(Object o) {
-        if (!(o instanceof Entry)) {
-          return false;
-        }
-        Entry<?, ?> entry = (Entry<?, ?>) o;
-        if (!(entry.getValue() instanceof Set)) {
-          return false;
-        }
-        Set<?> set = (Set<?>) entry.getValue();
-        return (set.size() == 1)
-            && containsEntry(entry.getKey(), set.iterator().next());
-      }
-
-      @Override public boolean remove(Object o) {
-        if (!(o instanceof Entry)) {
-          return false;
-        }
-        Entry<?, ?> entry = (Entry<?, ?>) o;
-        if (!(entry.getValue() instanceof Set)) {
-          return false;
-        }
-        Set<?> set = (Set<?>) entry.getValue();
-        return (set.size() == 1)
-            && map.entrySet().remove(
-                Maps.immutableEntry(entry.getKey(), set.iterator().next()));
-      }
-    }
-
-    /** @see MapMultimap#asMap */
-    class AsMap extends Maps.ImprovedAbstractMap<K, Collection<V>> {
-      @Override protected Set<Entry<K, Collection<V>>> createEntrySet() {
-        return new AsMapEntries();
-      }
-
-      // The following methods are included for performance.
-
-      @Override public boolean containsKey(Object key) {
-        return map.containsKey(key);
-      }
-
-      @SuppressWarnings("unchecked")
-      @Override public Collection<V> get(Object key) {
-        Collection<V> collection = MapMultimap.this.get((K) key);
-        return collection.isEmpty() ? null : collection;
-      }
-
-      @Override public Collection<V> remove(Object key) {
-        Collection<V> collection = removeAll(key);
-        return collection.isEmpty() ? null : collection;
-      }
-    }
-    private static final long serialVersionUID = 7845222491160860175L;
-  }
-
-  /**
-   * Creates an index {@code ImmutableMultimap} that contains the results of
-   * applying a specified function to each item in an {@code Iterable} of
-   * values. Each value will be stored as a value in the resulting multimap,
-   * yielding a multimap with the same size as the input iterable. The key used
-   * to store that value in the multimap will be the result of calling the
-   * function on that value. The resulting multimap is created as an immutable
-   * snapshot, it does <em>not</em> reflect subsequent changes on the input
-   * iterable.
-   *
-   * <p>For example, <pre class="code">  {@code
-   *
-   *  List<String> badGuys
-   *      = Arrays.asList("Inky", "Blinky", "Pinky", "Pinky", "Clyde");
-   *  Function<String, Integer> stringLengthFunction = ...;
-   *  Multimap<Integer, String> index
-   *      = Multimaps.index(badGuys, stringLengthFunction);
-   *  System.out.println(index);}</pre>
-   *
-   * prints <pre class="code">  {@code
-   *
-   *  {4=[Inky], 5=[Pinky, Pinky, Clyde], 6=[Blinky]}}</pre>
-   *
-   * <p>The returned multimap is serializable if its keys and values are all
-   * serializable.
-   *
-   * @param values the values to use when constructing the {@code
-   *     ImmutableMultimap}
-   * @param keyFunction the function used to produce the key for each value
-   * @return {@code ImmutableMultimap} mapping the result of evaluating the
-   *     function {@code keyFunction} on each value in the input collection to
-   *     that value
-   * @throws NullPointerException if any of the following cases is true: <ul>
-   * <li> {@code values} is null
-   * <li> {@code keyFunction} is null
-   * <li> An element in {@code values} is null
-   * <li> {@code keyFunction} returns null for any element of {@code values}
-   * </ul>
-   */
-  public static <K, V> ImmutableListMultimap<K, V> index(
-      Iterable<V> values, Function<? super V, K> keyFunction) {
-    checkNotNull(keyFunction);
-    ImmutableListMultimap.Builder<K, V> builder
-        = ImmutableListMultimap.builder();
-    for (V value : values) {
-      Preconditions.checkNotNull(value, values);
-      builder.put(keyFunction.apply(value), value);
-    }
-    return builder.build();
-  }
-}
diff --git a/src/com/google/common/collect/Multiset.java b/src/com/google/common/collect/Multiset.java
deleted file mode 100644
index 2851524..0000000
--- a/src/com/google/common/collect/Multiset.java
+++ /dev/null
@@ -1,404 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-import javax.annotation.Nullable;
-
-/**
- * A collection that supports order-independent equality, like {@link Set}, but
- * may have duplicate elements. A multiset is also sometimes called a
- * <i>bag</i>.
- *
- * <p>Elements of a multiset that are equal to one another (see "Note on
- * element equivalence", below) are referred to as <i>occurrences</i> of the
- * same single element. The total number of occurrences of an element in a
- * multiset is called the <i>count</i> of that element (the terms "frequency"
- * and "multiplicity" are equivalent, but not used in this API). Since the count
- * of an element is represented as an {@code int}, a multiset may never contain
- * more than {@link Integer#MAX_VALUE} occurrences of any one element.
- *
- * <p>{@code Multiset} refines the specifications of several methods from
- * {@code Collection}. It also defines an additional query operation, {@link
- * #count}, which returns the count of an element. There are five new
- * bulk-modification operations, for example {@link #add(Object, int)}, to add
- * or remove multiple occurrences of an element at once, or to set the count of
- * an element to a specific value. These modification operations are optional,
- * but implementations which support the standard collection operations {@link
- * #add(Object)} or {@link #remove(Object)} are encouraged to implement the
- * related methods as well. Finally, two collection views are provided: {@link
- * #elementSet} contains the distinct elements of the multiset "with duplicates
- * collapsed", and {@link #entrySet} is similar but contains {@link Entry
- * Multiset.Entry} instances, each providing both a distinct element and the
- * count of that element.
- *
- * <p>In addition to these required methods, implementations of {@code
- * Multiset} are expected to provide two {@code static} creation methods:
- * {@code create()}, returning an empty multiset, and {@code
- * create(Iterable<? extends E>)}, returning a multiset containing the
- * given initial elements. This is simply a refinement of {@code Collection}'s
- * constructor recommendations, reflecting the new developments of Java 5.
- *
- * <p>As with other collection types, the modification operations are optional,
- * and should throw {@link UnsupportedOperationException} when they are not
- * implemented. Most implementations should support either all add operations
- * or none of them, all removal operations or none of them, and if and only if
- * all of these are supported, the {@code setCount} methods as well.
- *
- * <p>A multiset uses {@link Object#equals} to determine whether two instances
- * should be considered "the same," <i>unless specified otherwise</i> by the
- * implementation.
- *
- * @author Kevin Bourrillion
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible
-public interface Multiset<E> extends Collection<E> {
-  // Query Operations
-
-  /**
-   * Returns the number of occurrences of an element in this multiset (the
-   * <i>count</i> of the element). Note that for an {@link Object#equals}-based
-   * multiset, this gives the same result as {@link Collections#frequency}
-   * (which would presumably perform more poorly).
-   *
-   * <p><b>Note:</b> the utility method {@link Iterables#frequency} generalizes
-   * this operation; it correctly delegates to this method when dealing with a
-   * multiset, but it can also accept any other iterable type.
-   *
-   * @param element the element to count occurrences of
-   * @return the number of occurrences of the element in this multiset; possibly
-   *     zero but never negative
-   */
-  int count(@Nullable Object element);
-
-  // Bulk Operations
-
-  /**
-   * Adds a number of occurrences of an element to this multiset. Note that if
-   * {@code occurrences == 1}, this method has the identical effect to {@link
-   * #add(Object)}. This method is functionally equivalent (except in the case
-   * of overflow) to the call {@code addAll(Collections.nCopies(element,
-   * occurrences))}, which would presumably perform much more poorly.
-   *
-   * @param element the element to add occurrences of; may be {@code null} only
-   *     if explicitly allowed by the implementation
-   * @param occurrences the number of occurrences of the element to add. May be
-   *     zero, in which case no change will be made.
-   * @return the count of the element before the operation; possibly zero
-   * @throws IllegalArgumentException if {@code occurrences} is negative, or if
-   *     this operation would result in more than {@link Integer#MAX_VALUE}
-   *     occurrences of the element
-   * @throws NullPointerException if {@code element} is null and this
-   *     implementation does not permit null elements. Note that if {@code
-   *     occurrences} is zero, the implementation may opt to return normally.
-   */
-  int add(@Nullable E element, int occurrences);
-
-  /**
-   * Removes a number of occurrences of the specified element from this
-   * multiset. If the multiset contains fewer than this number of occurrences to
-   * begin with, all occurrences will be removed.  Note that if
-   * {@code occurrences == 1}, this is functionally equivalent to the call
-   * {@code remove(element)}.
-   *
-   * @param element the element to conditionally remove occurrences of
-   * @param occurrences the number of occurrences of the element to remove. May
-   *     be zero, in which case no change will be made.
-   * @return the count of the element before the operation; possibly zero
-   * @throws IllegalArgumentException if {@code occurrences} is negative
-   */
-  int remove(@Nullable Object element, int occurrences);
-
-  /**
-   * Adds or removes the necessary occurrences of an element such that the
-   * element attains the desired count.
-   *
-   * @param element the element to add or remove occurrences of; may be null
-   *     only if explicitly allowed by the implementation
-   * @param count the desired count of the element in this multiset
-   * @return the count of the element before the operation; possibly zero
-   * @throws IllegalArgumentException if {@code count} is negative
-   * @throws NullPointerException if {@code element} is null and this
-   *     implementation does not permit null elements. Note that if {@code
-   *     count} is zero, the implementor may optionally return zero instead.
-   */
-  int setCount(E element, int count);
-
-  /**
-   * Conditionally sets the count of an element to a new value, as described in
-   * {@link #setCount(Object, int)}, provided that the element has the expected
-   * current count. If the current count is not {@code oldCount}, no change is
-   * made.
-   *
-   * @param element the element to conditionally set the count of; may be null
-   *     only if explicitly allowed by the implementation
-   * @param oldCount the expected present count of the element in this multiset
-   * @param newCount the desired count of the element in this multiset
-   * @return {@code true} if the condition for modification was met. This
-   *     implies that the multiset was indeed modified, unless
-   *     {@code oldCount == newCount}.
-   * @throws IllegalArgumentException if {@code oldCount} or {@code newCount} is
-   *     negative
-   * @throws NullPointerException if {@code element} is null and the
-   *     implementation does not permit null elements. Note that if {@code
-   *     oldCount} and {@code newCount} are both zero, the implementor may
-   *     optionally return {@code true} instead.
-   */
-  boolean setCount(E element, int oldCount, int newCount);
-
-  // Views
-
-  /**
-   * Returns the set of distinct elements contained in this multiset. The
-   * element set is backed by the same data as the multiset, so any change to
-   * either is immediately reflected in the other. The order of the elements in
-   * the element set is unspecified.
-   *
-   * <p>If the element set supports any removal operations, these necessarily
-   * cause <b>all</b> occurrences of the removed element(s) to be removed from
-   * the multiset. Implementations are not expected to support the add
-   * operations, although this is possible.
-   *
-   * <p>A common use for the element set is to find the number of distinct
-   * elements in the multiset: {@code elementSet().size()}.
-   *
-   * @return a view of the set of distinct elements in this multiset
-   */
-  Set<E> elementSet();
-
-  /**
-   * Returns a view of the contents of this multiset, grouped into {@code
-   * Multiset.Entry} instances, each providing an element of the multiset and
-   * the count of that element. This set contains exactly one entry for each
-   * distinct element in the multiset (thus it always has the same size as the
-   * {@link #elementSet}). The order of the elements in the element set is
-   * unspecified.
-   *
-   * <p>The entry set is backed by the same data as the multiset, so any change
-   * to either is immediately reflected in the other. However, multiset changes
-   * may or may not be reflected in any {@code Entry} instances already
-   * retrieved from the entry set (this is implementation-dependent).
-   * Furthermore, implementations are not required to support modifications to
-   * the entry set at all, and the {@code Entry} instances themselves don't
-   * even have methods for modification. See the specific implementation class
-   * for more details on how its entry set handles modifications.
-   *
-   * @return a set of entries representing the data of this multiset
-   */
-  Set<Entry<E>> entrySet();
-
-  /**
-   * An unmodifiable element-count pair for a multiset. The {@link
-   * Multiset#entrySet} method returns a view of the multiset whose elements
-   * are of this class. A multiset implementation may return Entry instances
-   * that are either live "read-through" views to the Multiset, or immutable
-   * snapshots. Note that this type is unrelated to the similarly-named type
-   * {@code Map.Entry}.
-   */
-  interface Entry<E> {
-
-    /**
-     * Returns the multiset element corresponding to this entry. Multiple calls
-     * to this method always return the same instance.
-     *
-     * @return the element corresponding to this entry
-     */
-    E getElement();
-
-    /**
-     * Returns the count of the associated element in the underlying multiset.
-     * This count may either be an unchanging snapshot of the count at the time
-     * the entry was retrieved, or a live view of the current count of the
-     * element in the multiset, depending on the implementation. Note that in
-     * the former case, this method can never return zero, while in the latter,
-     * it will return zero if all occurrences of the element were since removed
-     * from the multiset.
-     *
-     * @return the count of the element; never negative
-     */
-    int getCount();
-
-    /**
-     * {@inheritDoc}
-     *
-     * <p>Returns {@code true} if the given object is also a multiset entry and
-     * the two entries represent the same element and count. More formally, two
-     * entries {@code a} and {@code b} are equal if:
-     *
-     * <pre>  ((a.getElement() == null)
-     *      ? (b.getElement() == null) : a.getElement().equals(b.getElement()))
-     *    && (a.getCount() == b.getCount())</pre>
-     */
-    // TODO: check this wrt TreeMultiset?
-    boolean equals(Object o);
-
-    /**
-     * {@inheritDoc}
-     *
-     * <p>The hash code of a multiset entry for element {@code element} and
-     * count {@code count} is defined as:
-     *
-     * <pre>  (element == null ? 0 : element.hashCode()) ^ count</pre>
-     */
-    int hashCode();
-
-    /**
-     * Returns the canonical string representation of this entry, defined as
-     * follows. If the count for this entry is one, this is simply the string
-     * representation of the corresponding element. Otherwise, it is the string
-     * representation of the element, followed by the three characters {@code
-     * " x "} (space, letter x, space), followed by the count.
-     */
-    String toString();
-  }
-
-  // Comparison and hashing
-
-  /**
-   * Compares the specified object with this multiset for equality. Returns
-   * {@code true} if the given object is also a multiset and contains equal
-   * elements with equal counts, regardless of order.
-   */
-  // TODO: caveats about equivalence-relation?
-  boolean equals(@Nullable Object object);
-
-  /**
-   * Returns the hash code for this multiset. This is defined as the sum of
-   *
-   * <pre>  (element == null ? 0 : element.hashCode()) ^ count(element)</pre>
-   *
-   * over all distinct elements in the multiset. It follows that a multiset and
-   * its entry set always have the same hash code.
-   */
-  int hashCode();
-
-  /**
-   * {@inheritDoc}
-   *
-   * <p>It is recommended, though not mandatory, that this method return the
-   * result of invoking {@link #toString} on the {@link #entrySet}, yielding a
-   * result such as
-   * <pre>
-   *     [a x 3, c, d x 2, e]
-   * </pre>
-   */
-  String toString();
-
-  // Refined Collection Methods
-
-  /**
-   * {@inheritDoc}
-   *
-   * <p>Elements that occur multiple times in the multiset will appear
-   * multiple times in this iterator, though not necessarily sequentially.
-   */
-  Iterator<E> iterator();
-
-  /**
-   * Determines whether this multiset contains the specified element.
-   *
-   * <p>This method refines {@link Collection#contains} to further specify that
-   * it <b>may not</b> throw an exception in response to {@code element} being
-   * null or of the wrong type.
-   *
-   * @param element the element to check for
-   * @return {@code true} if this multiset contains at least one occurrence of
-   *     the element
-   */
-  boolean contains(@Nullable Object element);
-
-  /**
-   * Returns {@code true} if this multiset contains at least one occurrence of
-   * each element in the specified collection.
-   *
-   * <p>This method refines {@link Collection#containsAll} to further specify
-   * that it <b>may not</b> throw an exception in response to any of {@code
-   * elements} being null or of the wrong type.
-   *
-   * <p><b>Note:</b> this method does not take into account the occurrence
-   * count of an element in the two collections; it may still return {@code
-   * true} even if {@code elements} contains several occurrences of an element
-   * and this multiset contains only one. This is no different than any other
-   * collection type like {@link List}, but it may be unexpected to the user of
-   * a multiset.
-   *
-   * @param elements the collection of elements to be checked for containment in
-   *     this multiset
-   * @return {@code true} if this multiset contains at least one occurrence of
-   *     each element contained in {@code elements}
-   * @throws NullPointerException if {@code elements} is null
-   */
-  boolean containsAll(Collection<?> elements);
-
-  /**
-   * Adds a single occurrence of the specified element to this multiset.
-   *
-   * <p>This method refines {@link Collection#add}, which only <i>ensures</i>
-   * the presence of the element, to further specify that a successful call must
-   * always increment the count of the element, and the overall size of the
-   * collection, by one.
-   *
-   * @param element the element to add one occurrence of; may be null only if
-   *     explicitly allowed by the implementation
-   * @return {@code true} always, since this call is required to modify the
-   *     multiset, unlike other {@link Collection} types
-   * @throws NullPointerException if {@code element} is null and this
-   *     implementation does not permit null elements
-   * @throws IllegalArgumentException if {@link Integer#MAX_VALUE} occurrences
-   *     of {@code element} are already contained in this multiset
-   */
-  boolean add(E element);
-
-  /**
-   * Removes a <i>single</i> occurrence of the specified element from this
-   * multiset, if present.
-   *
-   * <p>This method refines {@link Collection#remove} to further specify that it
-   * <b>may not</b> throw an exception in response to {@code element} being null
-   * or of the wrong type.
-   *
-   * @param element the element to remove one occurrence of
-   * @return {@code true} if an occurrence was found and removed
-   */
-  boolean remove(@Nullable Object element);
-
-  /**
-   * {@inheritDoc}
-   *
-   * <p>This method refines {@link Collection#removeAll} to further specify that
-   * it <b>may not</b> throw an exception in response to any of {@code elements}
-   * being null or of the wrong type.
-   */
-  boolean removeAll(Collection<?> c);
-
-  /**
-   * {@inheritDoc}
-   *
-   * <p>This method refines {@link Collection#retainAll} to further specify that
-   * it <b>may not</b> throw an exception in response to any of {@code elements}
-   * being null or of the wrong type.
-   */
-  boolean retainAll(Collection<?> c);
-}
diff --git a/src/com/google/common/collect/Multisets.java b/src/com/google/common/collect/Multisets.java
deleted file mode 100644
index a8511d5..0000000
--- a/src/com/google/common/collect/Multisets.java
+++ /dev/null
@@ -1,471 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-import com.google.common.base.Objects;
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.io.Serializable;
-import java.util.AbstractSet;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.Set;
-
-import javax.annotation.Nullable;
-
-/**
- * Provides static utility methods for creating and working with {@link
- * Multiset} instances.
- *
- * @author Kevin Bourrillion
- * @author Mike Bostock
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible
-public final class Multisets {
-  private Multisets() {}
-
-  /**
-   * Returns an unmodifiable view of the specified multiset. Query operations on
-   * the returned multiset "read through" to the specified multiset, and
-   * attempts to modify the returned multiset result in an
-   * {@link UnsupportedOperationException}.
-   *
-   * <p>The returned multiset will be serializable if the specified multiset is
-   * serializable.
-   *
-   * @param multiset the multiset for which an unmodifiable view is to be
-   *     generated
-   * @return an unmodifiable view of the multiset
-   */
-  public static <E> Multiset<E> unmodifiableMultiset(
-      Multiset<? extends E> multiset) {
-    return new UnmodifiableMultiset<E>(multiset);
-  }
-
-  private static class UnmodifiableMultiset<E>
-      extends ForwardingMultiset<E> implements Serializable {
-    final Multiset<? extends E> delegate;
-
-    UnmodifiableMultiset(Multiset<? extends E> delegate) {
-      this.delegate = delegate;
-    }
-
-    @SuppressWarnings("unchecked")
-    @Override protected Multiset<E> delegate() {
-      // This is safe because all non-covariant methods are overriden
-      return (Multiset) delegate;
-    }
-
-    transient Set<E> elementSet;
-
-    @Override public Set<E> elementSet() {
-      Set<E> es = elementSet;
-      return (es == null)
-          ? elementSet = Collections.<E>unmodifiableSet(delegate.elementSet())
-          : es;
-    }
-
-    transient Set<Multiset.Entry<E>> entrySet;
-
-    @SuppressWarnings("unchecked")
-    @Override public Set<Multiset.Entry<E>> entrySet() {
-      Set<Multiset.Entry<E>> es = entrySet;
-      return (es == null)
-          // Safe because the returned set is made unmodifiable and Entry
-          // itself is readonly
-          ? entrySet = (Set) Collections.unmodifiableSet(delegate.entrySet())
-          : es;
-    }
-
-    @SuppressWarnings("unchecked")
-    @Override public Iterator<E> iterator() {
-      // Safe because the returned Iterator is made unmodifiable
-      return (Iterator) Iterators.unmodifiableIterator(delegate.iterator());
-    }
-
-    @Override public boolean add(E element) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override public int add(E element, int occurences) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override public boolean addAll(Collection<? extends E> elementsToAdd) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override public boolean remove(Object element) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override public int remove(Object element, int occurrences) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override public boolean removeAll(Collection<?> elementsToRemove) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override public boolean retainAll(Collection<?> elementsToRetain) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override public void clear() {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override public int setCount(E element, int count) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override public boolean setCount(E element, int oldCount, int newCount) {
-      throw new UnsupportedOperationException();
-    }
-
-    private static final long serialVersionUID = 0;
-  }
-
-  /**
-   * Returns an immutable multiset entry with the specified element and count.
-   *
-   * @param e the element to be associated with the returned entry
-   * @param n the count to be associated with the returned entry
-   * @throws IllegalArgumentException if {@code n} is negative
-   */
-  public static <E> Multiset.Entry<E> immutableEntry(
-      @Nullable final E e, final int n) {
-    checkArgument(n >= 0);
-    return new AbstractEntry<E>() {
-      public E getElement() {
-        return e;
-      }
-      public int getCount() {
-        return n;
-      }
-    };
-  }
-
-  /**
-   * Returns a multiset view of the specified set. The multiset is backed by the
-   * set, so changes to the set are reflected in the multiset, and vice versa.
-   * If the set is modified while an iteration over the multiset is in progress
-   * (except through the iterator's own {@code remove} operation) the results of
-   * the iteration are undefined.
-   *
-   * <p>The multiset supports element removal, which removes the corresponding
-   * element from the set. It does not support the {@code add} or {@code addAll}
-   * operations, nor does it support the use of {@code setCount} to add
-   * elements.
-   *
-   * <p>The returned multiset will be serializable if the specified set is
-   * serializable. The multiset is threadsafe if the set is threadsafe.
-   *
-   * @param set the backing set for the returned multiset view
-   */
-  static <E> Multiset<E> forSet(Set<E> set) {
-    return new SetMultiset<E>(set);
-  }
-
-  /** @see Multisets#forSet */
-  private static class SetMultiset<E> extends ForwardingCollection<E>
-      implements Multiset<E>, Serializable {
-    final Set<E> delegate;
-
-    SetMultiset(Set<E> set) {
-      delegate = checkNotNull(set);
-    }
-
-    @Override protected Set<E> delegate() {
-      return delegate;
-    }
-
-    public int count(Object element) {
-      return delegate.contains(element) ? 1 : 0;
-    }
-
-    public int add(E element, int occurrences) {
-      throw new UnsupportedOperationException();
-    }
-
-    public int remove(Object element, int occurrences) {
-      if (occurrences == 0) {
-        return count(element);
-      }
-      checkArgument(occurrences > 0);
-      return delegate.remove(element) ? 1 : 0;
-    }
-
-    transient Set<E> elementSet;
-
-    public Set<E> elementSet() {
-      Set<E> es = elementSet;
-      return (es == null) ? elementSet = new ElementSet() : es;
-    }
-
-    transient Set<Entry<E>> entrySet;
-
-    public Set<Entry<E>> entrySet() {
-      Set<Entry<E>> es = entrySet;
-      return (es == null) ? entrySet = new EntrySet() : es;
-    }
-
-    @Override public boolean add(E o) {
-      throw new UnsupportedOperationException();
-    }
-
-    @Override public boolean addAll(Collection<? extends E> c) {
-      throw new UnsupportedOperationException();
-    }
-
-    public int setCount(E element, int count) {
-      checkNonnegative(count, "count");
-
-      if (count == count(element)) {
-        return count;
-      } else if (count == 0) {
-        remove(element);
-        return 1;
-      } else {
-        throw new UnsupportedOperationException();
-      }
-    }
-
-    public boolean setCount(E element, int oldCount, int newCount) {
-      return setCountImpl(this, element, oldCount, newCount);
-    }
-
-    @Override public boolean equals(@Nullable Object object) {
-      if (object instanceof Multiset) {
-        Multiset<?> that = (Multiset<?>) object;
-        return this.size() == that.size() && delegate.equals(that.elementSet());
-      }
-      return false;
-    }
-
-    @Override public int hashCode() {
-      int sum = 0;
-      for (E e : this) {
-        sum += ((e == null) ? 0 : e.hashCode()) ^ 1;
-      }
-      return sum;
-    }
-
-    /** @see SetMultiset#elementSet */
-    class ElementSet extends ForwardingSet<E> {
-      @Override protected Set<E> delegate() {
-        return delegate;
-      }
-
-      @Override public boolean add(E o) {
-        throw new UnsupportedOperationException();
-      }
-
-      @Override public boolean addAll(Collection<? extends E> c) {
-        throw new UnsupportedOperationException();
-      }
-    }
-
-    /** @see SetMultiset#entrySet */
-    class EntrySet extends AbstractSet<Entry<E>> {
-      @Override public int size() {
-        return delegate.size();
-      }
-      @Override public Iterator<Entry<E>> iterator() {
-        return new Iterator<Entry<E>>() {
-          final Iterator<E> elements = delegate.iterator();
-
-          public boolean hasNext() {
-            return elements.hasNext();
-          }
-          public Entry<E> next() {
-            return immutableEntry(elements.next(), 1);
-          }
-          public void remove() {
-            elements.remove();
-          }
-        };
-      }
-      // TODO: faster contains, remove
-    }
-
-    private static final long serialVersionUID = 0;
-  }
-
-  /**
-   * Returns the expected number of distinct elements given the specified
-   * elements. The number of distinct elements is only computed if {@code
-   * elements} is an instance of {@code Multiset}; otherwise the default value
-   * of 11 is returned.
-   */
-  static int inferDistinctElements(Iterable<?> elements) {
-    if (elements instanceof Multiset) {
-      return ((Multiset<?>) elements).elementSet().size();
-    }
-    return 11; // initial capacity will be rounded up to 16
-  }
-
-  /**
-   * Returns an unmodifiable <b>view</b> of the intersection of two multisets.
-   * An element's count in the multiset is the smaller of its counts in the two
-   * backing multisets. The iteration order of the returned multiset matches the
-   * element set of {@code multiset1}, with repeated occurrences of the same
-   * element appearing consecutively.
-   *
-   * <p>Results are undefined if {@code multiset1} and {@code multiset2} are
-   * based on different equivalence relations (as {@code HashMultiset} and
-   * {@code TreeMultiset} are).
-   *
-   * @since 2010.01.04 <b>tentative</b>
-   */
-  public static <E> Multiset<E> intersection(
-      final Multiset<E> multiset1, final Multiset<?> multiset2) {
-    checkNotNull(multiset1);
-    checkNotNull(multiset2);
-
-    return new AbstractMultiset<E>() {
-      @Override public int count(Object element) {
-        int count1 = multiset1.count(element);
-        return (count1 == 0) ? 0 : Math.min(count1, multiset2.count(element));
-      }
-
-      @Override Set<E> createElementSet() {
-        return Sets.intersection(
-            multiset1.elementSet(), multiset2.elementSet());
-      }
-
-      @Override public Set<Entry<E>> entrySet() {
-        return entrySet;
-      }
-
-      final Set<Entry<E>> entrySet = new AbstractSet<Entry<E>>() {
-        @Override public Iterator<Entry<E>> iterator() {
-          final Iterator<Entry<E>> iterator1 = multiset1.entrySet().iterator();
-          return new AbstractIterator<Entry<E>>() {
-            @Override protected Entry<E> computeNext() {
-              while (iterator1.hasNext()) {
-                Entry<E> entry1 = iterator1.next();
-                E element = entry1.getElement();
-                int count
-                    = Math.min(entry1.getCount(), multiset2.count(element));
-                if (count > 0) {
-                  return Multisets.immutableEntry(element, count);
-                }
-              }
-              return endOfData();
-            }
-          };
-        }
-
-        @Override public int size() {
-          return elementSet().size();
-        }
-
-        @Override public boolean contains(Object o) {
-          if (o instanceof Entry) {
-            Entry<?> entry = (Entry<?>) o;
-            int entryCount = entry.getCount();
-            return (entryCount > 0)
-                && (count(entry.getElement()) == entryCount);
-          }
-          return false;
-        }
-
-        @Override public boolean isEmpty() {
-          return elementSet().isEmpty();
-        }
-      };
-    };
-  }
-
-  /**
-   * Implementation of the {@code equals}, {@code hashCode}, and
-   * {@code toString} methods of {@link Multiset.Entry}.
-   */
-  abstract static class AbstractEntry<E> implements Multiset.Entry<E> {
-    /**
-     * Indicates whether an object equals this entry, following the behavior
-     * specified in {@link Multiset.Entry#equals}.
-     */
-    @Override public boolean equals(@Nullable Object object) {
-      if (object instanceof Multiset.Entry) {
-        Multiset.Entry<?> that = (Multiset.Entry<?>) object;
-        return this.getCount() == that.getCount()
-            && Objects.equal(this.getElement(), that.getElement());
-      }
-      return false;
-    }
-
-    /**
-     * Return this entry's hash code, following the behavior specified in
-     * {@link Multiset.Entry#hashCode}.
-     */
-    @Override public int hashCode() {
-      E e = getElement();
-      return ((e == null) ? 0 : e.hashCode()) ^ getCount();
-    }
-
-    /**
-     * Returns a string representation of this multiset entry. The string
-     * representation consists of the associated element if the associated count
-     * is one, and otherwise the associated element followed by the characters
-     * " x " (space, x and space) followed by the count. Elements and counts are
-     * converted to strings as by {@code String.valueOf}.
-     */
-    @Override public String toString() {
-      String text = String.valueOf(getElement());
-      int n = getCount();
-      return (n == 1) ? text : (text + " x " + n);
-    }
-  }
-
-  static <E> int setCountImpl(Multiset<E> self, E element, int count) {
-    checkNonnegative(count, "count");
-
-    int oldCount = self.count(element);
-
-    int delta = count - oldCount;
-    if (delta > 0) {
-      self.add(element, delta);
-    } else if (delta < 0) {
-      self.remove(element, -delta);
-    }
-
-    return oldCount;
-  }
-
-  static <E> boolean setCountImpl(
-      Multiset<E> self, E element, int oldCount, int newCount) {
-    checkNonnegative(oldCount, "oldCount");
-    checkNonnegative(newCount, "newCount");
-
-    if (self.count(element) == oldCount) {
-      self.setCount(element, newCount);
-      return true;
-    } else {
-      return false;
-    }
-  }
-
-  static void checkNonnegative(int count, String name) {
-    checkArgument(count >= 0, "%s cannot be negative: %s", name, count);
-  }
-}
diff --git a/src/com/google/common/collect/MutableClassToInstanceMap.java b/src/com/google/common/collect/MutableClassToInstanceMap.java
deleted file mode 100644
index 732f2c7..0000000
--- a/src/com/google/common/collect/MutableClassToInstanceMap.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * A mutable class-to-instance map backed by an arbitrary user-provided map.
- * See also {@link ImmutableClassToInstanceMap}.
- *
- * @author Kevin Bourrillion
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-public final class MutableClassToInstanceMap<B>
-    extends ConstrainedMap<Class<? extends B>, B>
-    implements ClassToInstanceMap<B> {
-
-  /**
-   * Returns a new {@code MutableClassToInstanceMap} instance backed by a {@link
-   * HashMap} using the default initial capacity and load factor.
-   */
-  public static <B> MutableClassToInstanceMap<B> create() {
-    return new MutableClassToInstanceMap<B>(
-        new HashMap<Class<? extends B>, B>());
-  }
-
-  /**
-   * Returns a new {@code MutableClassToInstanceMap} instance backed by a given
-   * empty {@code backingMap}. The caller surrenders control of the backing map,
-   * and thus should not allow any direct references to it to remain accessible.
-   */
-  public static <B> MutableClassToInstanceMap<B> create(
-      Map<Class<? extends B>, B> backingMap) {
-    return new MutableClassToInstanceMap<B>(backingMap);
-  }
-
-  private MutableClassToInstanceMap(Map<Class<? extends B>, B> delegate) {
-    super(delegate, VALUE_CAN_BE_CAST_TO_KEY);
-  }
-
-  private static final MapConstraint<Class<?>, Object> VALUE_CAN_BE_CAST_TO_KEY
-      = new MapConstraint<Class<?>, Object>() {
-    public void checkKeyValue(Class<?> key, Object value) {
-      cast(key, value);
-    }
-  };
-
-  public <T extends B> T putInstance(Class<T> type, T value) {
-    return cast(type, put(type, value));
-  }
-
-  public <T extends B> T getInstance(Class<T> type) {
-    return cast(type, get(type));
-  }
-
-  // Default access so that ImmutableClassToInstanceMap can share it
-  static <B, T extends B> T cast(Class<T> type, B value) {
-    // TODO: this should eventually use common.primitives.Primitives.wrap()
-    return wrap(type).cast(value);
-  }
-
-  // safe because both Long.class and long.class are of type Class<Long>
-  @SuppressWarnings("unchecked")
-  private static <T> Class<T> wrap(Class<T> c) {
-    return c.isPrimitive() ? (Class<T>) PRIMITIVES_TO_WRAPPERS.get(c) : c;
-  }
-
-  private static final Map<Class<?>, Class<?>> PRIMITIVES_TO_WRAPPERS
-      = new ImmutableMap.Builder<Class<?>, Class<?>>()
-          .put(boolean.class, Boolean.class)
-          .put(byte.class, Byte.class)
-          .put(char.class, Character.class)
-          .put(double.class, Double.class)
-          .put(float.class, Float.class)
-          .put(int.class, Integer.class)
-          .put(long.class, Long.class)
-          .put(short.class, Short.class)
-          .put(void.class, Void.class)
-          .build();
-
-  private static final long serialVersionUID = 0;
-}
diff --git a/src/com/google/common/collect/NaturalOrdering.java b/src/com/google/common/collect/NaturalOrdering.java
deleted file mode 100644
index 6d14ce4..0000000
--- a/src/com/google/common/collect/NaturalOrdering.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.io.Serializable;
-import java.util.Collections;
-import java.util.List;
-
-/** An ordering that uses the natural order of the values. */
-@GwtCompatible(serializable = true)
-@SuppressWarnings("unchecked") // TODO: the right way to explain this??
-final class NaturalOrdering
-    extends Ordering<Comparable> implements Serializable {
-  static final NaturalOrdering INSTANCE = new NaturalOrdering();
-
-  public int compare(Comparable left, Comparable right) {
-    checkNotNull(right); // left null is caught later
-    if (left == right) {
-      return 0;
-    }
-
-    @SuppressWarnings("unchecked") // we're permitted to throw CCE
-    int result = left.compareTo(right);
-    return result;
-  }
-
-  @SuppressWarnings("unchecked") // TODO: the right way to explain this??
-  @Override public <S extends Comparable> Ordering<S> reverse() {
-    return (Ordering) ReverseNaturalOrdering.INSTANCE;
-  }
-
-  // Override to remove a level of indirection from inner loop
-  @SuppressWarnings("unchecked") // TODO: the right way to explain this??
-  @Override public int binarySearch(
-      List<? extends Comparable> sortedList, Comparable key) {
-    return Collections.binarySearch((List) sortedList, key);
-  }
-
-  // Override to remove a level of indirection from inner loop
-  @Override public <E extends Comparable> List<E> sortedCopy(
-      Iterable<E> iterable) {
-    List<E> list = Lists.newArrayList(iterable);
-    Collections.sort(list);
-    return list;
-  }
-
-  // preserving singleton-ness gives equals()/hashCode() for free
-  private Object readResolve() {
-    return INSTANCE;
-  }
-
-  @Override public String toString() {
-    return "Ordering.natural()";
-  }
-
-  private NaturalOrdering() {}
-
-  private static final long serialVersionUID = 0;
-}
diff --git a/src/com/google/common/collect/NullOutputException.java b/src/com/google/common/collect/NullOutputException.java
deleted file mode 100644
index 18e06ff..0000000
--- a/src/com/google/common/collect/NullOutputException.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2009 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-/**
- * Thrown when a computer function returns null. This subclass exists so
- * that our ReferenceCache adapter can differentiate null output from null
- * keys, but we don't want to make this public otherwise.
- *
- * @author Bob Lee
- */
-class NullOutputException extends NullPointerException {
-  public NullOutputException(String s) {
-    super(s);
-  }
-  private static final long serialVersionUID = 0;
-}
diff --git a/src/com/google/common/collect/NullsFirstOrdering.java b/src/com/google/common/collect/NullsFirstOrdering.java
deleted file mode 100644
index 09d64e8..0000000
--- a/src/com/google/common/collect/NullsFirstOrdering.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-
-import java.io.Serializable;
-
-import javax.annotation.Nullable;
-
-/** An ordering that treats {@code null} as less than all other values. */
-@GwtCompatible(serializable = true)
-final class NullsFirstOrdering<T> extends Ordering<T> implements Serializable {
-  final Ordering<? super T> ordering;
-
-  NullsFirstOrdering(Ordering<? super T> ordering) {
-    this.ordering = ordering;
-  }
-
-  public int compare(T left, T right) {
-    if (left == right) {
-      return 0;
-    }
-    if (left == null) {
-      return RIGHT_IS_GREATER;
-    }
-    if (right == null) {
-      return LEFT_IS_GREATER;
-    }
-    return ordering.compare(left, right);
-  }
-
-  @Override public <S extends T> Ordering<S> reverse() {
-    // ordering.reverse() might be optimized, so let it do its thing
-    return ordering.reverse().nullsLast();
-  }
-
-  @SuppressWarnings("unchecked") // still need the right way to explain this
-  @Override public <S extends T> Ordering<S> nullsFirst() {
-    return (Ordering) this;
-  }
-
-  @Override public <S extends T> Ordering<S> nullsLast() {
-    return ordering.nullsLast();
-  }
-
-  @Override public boolean equals(@Nullable Object object) {
-    if (object == this) {
-      return true;
-    }
-    if (object instanceof NullsFirstOrdering) {
-      NullsFirstOrdering<?> that = (NullsFirstOrdering<?>) object;
-      return this.ordering.equals(that.ordering);
-    }
-    return false;
-  }
-
-  @Override public int hashCode() {
-    return ordering.hashCode() ^ 957692532; // meaningless
-  }
-
-  @Override public String toString() {
-    return ordering + ".nullsFirst()";
-  }
-
-  private static final long serialVersionUID = 0;
-}
diff --git a/src/com/google/common/collect/NullsLastOrdering.java b/src/com/google/common/collect/NullsLastOrdering.java
deleted file mode 100644
index 22113ab..0000000
--- a/src/com/google/common/collect/NullsLastOrdering.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-
-import java.io.Serializable;
-
-import javax.annotation.Nullable;
-
-/** An ordering that treats {@code null} as greater than all other values. */
-@GwtCompatible(serializable = true)
-final class NullsLastOrdering<T> extends Ordering<T> implements Serializable {
-  final Ordering<? super T> ordering;
-
-  NullsLastOrdering(Ordering<? super T> ordering) {
-    this.ordering = ordering;
-  }
-
-  public int compare(T left, T right) {
-    if (left == right) {
-      return 0;
-    }
-    if (left == null) {
-      return LEFT_IS_GREATER;
-    }
-    if (right == null) {
-      return RIGHT_IS_GREATER;
-    }
-    return ordering.compare(left, right);
-  }
-
-  @Override public <S extends T> Ordering<S> reverse() {
-    // ordering.reverse() might be optimized, so let it do its thing
-    return ordering.reverse().nullsFirst();
-  }
-
-  @Override public <S extends T> Ordering<S> nullsFirst() {
-    return ordering.nullsFirst();
-  }
-
-  @SuppressWarnings("unchecked") // still need the right way to explain this
-  @Override public <S extends T> Ordering<S> nullsLast() {
-    return (Ordering) this;
-  }
-
-  @Override public boolean equals(@Nullable Object object) {
-    if (object == this) {
-      return true;
-    }
-    if (object instanceof NullsLastOrdering) {
-      NullsLastOrdering<?> that = (NullsLastOrdering<?>) object;
-      return this.ordering.equals(that.ordering);
-    }
-    return false;
-  }
-
-  @Override public int hashCode() {
-    return ordering.hashCode() ^ -921210296; // meaningless
-  }
-
-  @Override public String toString() {
-    return ordering + ".nullsLast()";
-  }
-
-  private static final long serialVersionUID = 0;
-}
diff --git a/src/com/google/common/collect/ObjectArrays.java b/src/com/google/common/collect/ObjectArrays.java
deleted file mode 100644
index a235814..0000000
--- a/src/com/google/common/collect/ObjectArrays.java
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-import com.google.common.annotations.GwtIncompatible;
-
-import java.util.Collection;
-
-import javax.annotation.Nullable;
-
-/**
- * Static utility methods pertaining to object arrays.
- *
- * @author Kevin Bourrillion
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible
-public final class ObjectArrays {
-  private ObjectArrays() {}
-
-  /**
-   * Returns a new array of the given length with the specified component type.
-   *
-   * @param type the component type
-   * @param length the length of the new array
-   */
-  @GwtIncompatible("Array.newInstance(Class, int)")
-  @SuppressWarnings("unchecked")
-  public static <T> T[] newArray(Class<T> type, int length) {
-    return Platform.newArray(type, length);
-  }
-
-  /**
-   * Returns a new array of the given length with the same type as a reference
-   * array.
-   *
-   * @param reference any array of the desired type
-   * @param length the length of the new array
-   */
-  public static <T> T[] newArray(T[] reference, int length) {
-    return Platform.newArray(reference, length);
-  }
-
-  /**
-   * Returns a new array that contains the concatenated contents of two arrays.
-   *
-   * @param first the first array of elements to concatenate
-   * @param second the second array of elements to concatenate
-   * @param type the component type of the returned array
-   */
-  @GwtIncompatible("Array.newInstance(Class, int)")
-  public static <T> T[] concat(T[] first, T[] second, Class<T> type) {
-    T[] result = newArray(type, first.length + second.length);
-    Platform.unsafeArrayCopy(first, 0, result, 0, first.length);
-    Platform.unsafeArrayCopy(second, 0, result, first.length, second.length);
-    return result;
-  }
-
-  /**
-   * Returns a new array that prepends {@code element} to {@code array}.
-   *
-   * @param element the element to prepend to the front of {@code array}
-   * @param array the array of elements to append
-   * @return an array whose size is one larger than {@code array}, with
-   *     {@code element} occupying the first position, and the
-   *     elements of {@code array} occupying the remaining elements.
-   */
-  public static <T> T[] concat(@Nullable T element, T[] array) {
-    T[] result = newArray(array, array.length + 1);
-    result[0] = element;
-    Platform.unsafeArrayCopy(array, 0, result, 1, array.length);
-    return result;
-  }
-
-  /**
-   * Returns a new array that appends {@code element} to {@code array}.
-   *
-   * @param array the array of elements to prepend
-   * @param element the element to append to the end
-   * @return an array whose size is one larger than {@code array}, with
-   *     the same contents as {@code array}, plus {@code element} occupying the
-   *     last position.
-   */
-  public static <T> T[] concat(T[] array, @Nullable T element) {
-    T[] result = arraysCopyOf(array, array.length + 1);
-    result[array.length] = element;
-    return result;
-  }
-
-  /** GWT safe version of Arrays.copyOf. */
-  private static <T> T[] arraysCopyOf(T[] original, int newLength) {
-    T[] copy = newArray(original, newLength);
-    Platform.unsafeArrayCopy(
-        original, 0, copy, 0, Math.min(original.length, newLength));
-    return copy;
-  }
-
-  /**
-   * Returns an array containing all of the elements in the specified
-   * collection; the runtime type of the returned array is that of the specified
-   * array. If the collection fits in the specified array, it is returned
-   * therein. Otherwise, a new array is allocated with the runtime type of the
-   * specified array and the size of the specified collection.
-   *
-   * <p>If the collection fits in the specified array with room to spare (i.e.,
-   * the array has more elements than the collection), the element in the array
-   * immediately following the end of the collection is set to null. This is
-   * useful in determining the length of the collection <i>only</i> if the
-   * caller knows that the collection does not contain any null elements.
-   *
-   * <p>This method returns the elements in the order they are returned by the
-   * collection's iterator.
-   *
-   * <p>TODO: Support concurrent collections whose size can change while the
-   * method is running.
-   *
-   * @param c the collection for which to return an array of elements
-   * @param array the array in which to place the collection elements
-   * @throws ArrayStoreException if the runtime type of the specified array is
-   *     not a supertype of the runtime type of every element in the specified
-   *     collection
-   */
-  static <T> T[] toArrayImpl(Collection<?> c, T[] array) {
-    int size = c.size();
-    if (array.length < size) {
-      array = newArray(array, size);
-    }
-    fillArray(c, array);
-    if (array.length > size) {
-      array[size] = null;
-    }
-    return array;
-  }
-
-  /**
-   * Returns an array containing all of the elements in the specified
-   * collection. This method returns the elements in the order they are returned
-   * by the collection's iterator. The returned array is "safe" in that no
-   * references to it are maintained by the collection. The caller is thus free
-   * to modify the returned array.
-   *
-   * <p>This method assumes that the collection size doesn't change while the
-   * method is running.
-   *
-   * <p>TODO: Support concurrent collections whose size can change while the
-   * method is running.
-   *
-   * @param c the collection for which to return an array of elements
-   */
-  static Object[] toArrayImpl(Collection<?> c) {
-    return fillArray(c, new Object[c.size()]);
-  }
-
-  private static Object[] fillArray(Iterable<?> elements, Object[] array) {
-    int i = 0;
-    for (Object element : elements) {
-      array[i++] = element;
-    }
-    return array;
-  }
-}
diff --git a/src/com/google/common/collect/Ordering.java b/src/com/google/common/collect/Ordering.java
deleted file mode 100644
index d4d5d1b..0000000
--- a/src/com/google/common/collect/Ordering.java
+++ /dev/null
@@ -1,577 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Function;
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.NoSuchElementException;
-import java.util.SortedMap;
-import java.util.SortedSet;
-import java.util.concurrent.atomic.AtomicInteger;
-
-/**
- * A comparator with added methods to support common functions. For example:
- * <pre>   {@code
- *
- *   if (Ordering.from(comparator).reverse().isOrdered(list)) { ... }}</pre>
- *
- * <p>The {@link #from(Comparator)} method returns the equivalent {@code
- * Ordering} instance for a pre-existing comparator. You can also skip the
- * comparator step and extend {@code Ordering} directly: <pre>   {@code
- *
- *   Ordering<String> byLengthOrdering = new Ordering<String>() {
- *     public int compare(String left, String right) {
- *       return Ints.compare(left.length(), right.length());
- *     }
- *   };}</pre>
- *
- * Except as noted, the orderings returned by the factory methods of this
- * class are serializable if and only if the provided instances that back them
- * are. For example, if {@code ordering} and {@code function} can themselves be
- * serialized, then {@code ordering.onResultOf(function)} can as well.
- *
- * @author Jesse Wilson
- * @author Kevin Bourrillion
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible
-public abstract class Ordering<T> implements Comparator<T> {
-  // Static factories
-
-  /**
-   * Returns a serializable ordering that uses the natural order of the values.
-   * The ordering throws a {@link NullPointerException} when passed a null
-   * parameter.
-   *
-   * <p>The type specification is {@code <C extends Comparable>}, instead of
-   * the technically correct {@code <C extends Comparable<? super C>>}, to
-   * support legacy types from before Java 5.
-   */
-  @GwtCompatible(serializable = true)
-  @SuppressWarnings("unchecked") // TODO: the right way to explain this??
-  public static <C extends Comparable> Ordering<C> natural() {
-    return (Ordering) NaturalOrdering.INSTANCE;
-  }
-
-  /**
-   * Returns an ordering for a pre-existing {@code comparator}. Note
-   * that if the comparator is not pre-existing, and you don't require
-   * serialization, you can subclass {@code Ordering} and implement its
-   * {@link #compare(Object, Object) compare} method instead.
-   *
-   * @param comparator the comparator that defines the order
-   */
-  @GwtCompatible(serializable = true)
-  public static <T> Ordering<T> from(Comparator<T> comparator) {
-    return (comparator instanceof Ordering)
-        ? (Ordering<T>) comparator
-        : new ComparatorOrdering<T>(comparator);
-  }
-
-  /**
-   * Simply returns its argument.
-   *
-   * @deprecated no need to use this
-   */
-  @GwtCompatible(serializable = true)
-  @Deprecated public static <T> Ordering<T> from(Ordering<T> ordering) {
-    return checkNotNull(ordering);
-  }
-
-  /**
-   * Returns an ordering that compares objects according to the order in
-   * which they appear in the given list. Only objects present in the list
-   * (according to {@link Object#equals}) may be compared. This comparator
-   * imposes a "partial ordering" over the type {@code T}. Subsequent changes
-   * to the {@code valuesInOrder} list will have no effect on the returned
-   * comparator. Null values in the list are not supported.
-   *
-   * <p>The returned comparator throws an {@link ClassCastException} when it
-   * receives an input parameter that isn't among the provided values.
-   *
-   * <p>The generated comparator is serializable if all the provided values are
-   * serializable.
-   *
-   * @param valuesInOrder the values that the returned comparator will be able
-   *     to compare, in the order the comparator should induce
-   * @return the comparator described above
-   * @throws NullPointerException if any of the provided values is null
-   * @throws IllegalArgumentException if {@code valuesInOrder} contains any
-   *     duplicate values (according to {@link Object#equals})
-   */
-  @GwtCompatible(serializable = true)
-  public static <T> Ordering<T> explicit(List<T> valuesInOrder) {
-    return new ExplicitOrdering<T>(valuesInOrder);
-  }
-
-  /**
-   * Returns an ordering that compares objects according to the order in
-   * which they are given to this method. Only objects present in the argument
-   * list (according to {@link Object#equals}) may be compared. This comparator
-   * imposes a "partial ordering" over the type {@code T}. Null values in the
-   * argument list are not supported.
-   *
-   * <p>The returned comparator throws a {@link ClassCastException} when it
-   * receives an input parameter that isn't among the provided values.
-   *
-   * <p>The generated comparator is serializable if all the provided values are
-   * serializable.
-   *
-   * @param leastValue the value which the returned comparator should consider
-   *     the "least" of all values
-   * @param remainingValuesInOrder the rest of the values that the returned
-   *     comparator will be able to compare, in the order the comparator should
-   *     follow
-   * @return the comparator described above
-   * @throws NullPointerException if any of the provided values is null
-   * @throws IllegalArgumentException if any duplicate values (according to
-   *     {@link Object#equals(Object)}) are present among the method arguments
-   */
-  @GwtCompatible(serializable = true)
-  public static <T> Ordering<T> explicit(
-      T leastValue, T... remainingValuesInOrder) {
-    return explicit(Lists.asList(leastValue, remainingValuesInOrder));
-  }
-
-  /**
-   * Exception thrown by a {@link Ordering#explicit(List)} or {@link
-   * Ordering#explicit(Object, Object[])} comparator when comparing a value
-   * outside the set of values it can compare. Extending {@link
-   * ClassCastException} may seem odd, but it is required.
-   */
-  // TODO: consider making this exception type public. or consider getting rid
-  // of it.
-  @VisibleForTesting
-  static class IncomparableValueException extends ClassCastException {
-    final Object value;
-
-    IncomparableValueException(Object value) {
-      super("Cannot compare value: " + value);
-      this.value = value;
-    }
-
-    private static final long serialVersionUID = 0;
-  }
-
-  /**
-   * Returns an arbitrary ordering over all objects, for which {@code compare(a,
-   * b) == 0} implies {@code a == b} (identity equality). There is no meaning
-   * whatsoever to the order imposed, but it is constant for the life of the VM.
-   *
-   * <p>Because the ordering is identity-based, it is not "consistent with
-   * {@link Object#equals(Object)}" as defined by {@link Comparator}. Use
-   * caution when building a {@link SortedSet} or {@link SortedMap} from it, as
-   * the resulting collection will not behave exactly according to spec.
-   *
-   * <p>This ordering is not serializable, as its implementation relies on
-   * {@link System#identityHashCode(Object)}, so its behavior cannot be
-   * preserved across serialization.
-   *
-   * @since 2010.01.04 <b>tentative</b>
-   */
-  public static Ordering<Object> arbitrary() {
-    return ArbitraryOrderingHolder.ARBITRARY_ORDERING;
-  }
-
-  private static class ArbitraryOrderingHolder {
-    static final Ordering<Object> ARBITRARY_ORDERING = new ArbitraryOrdering();
-  }
-
-  @VisibleForTesting static class ArbitraryOrdering extends Ordering<Object> {
-    private Map<Object, Integer> uids =
-        Platform.tryWeakKeys(new MapMaker()).makeComputingMap(
-            new Function<Object, Integer>() {
-              final AtomicInteger counter = new AtomicInteger(0);
-              public Integer apply(Object from) {
-                return counter.getAndIncrement();
-              }
-            });
-
-    /*@Override*/ public int compare(Object left, Object right) {
-      if (left == right) {
-        return 0;
-      }
-      int leftCode = identityHashCode(left);
-      int rightCode = identityHashCode(right);
-      if (leftCode != rightCode) {
-        return leftCode < rightCode ? -1 : 1;
-      }
-
-      // identityHashCode collision (rare, but not as rare as you'd think)
-      int result = uids.get(left).compareTo(uids.get(right));
-      if (result == 0) {
-        throw new AssertionError(); // extremely, extremely unlikely.
-      }
-      return result;
-    }
-
-    @Override public String toString() {
-      return "Ordering.arbitrary()";
-    }
-
-    /*
-     * We need to be able to mock identityHashCode() calls for tests, because it
-     * can take 1-10 seconds to find colliding objects. Mocking frameworks that
-     * can do magic to mock static method calls still can't do so for a system
-     * class, so we need the indirection. In production, Hotspot should still
-     * recognize that the call is 1-morphic and should still be willing to
-     * inline it if necessary.
-     */
-    int identityHashCode(Object object) {
-      return System.identityHashCode(object);
-    }
-  }
-
-  /**
-   * Returns an ordering that compares objects by the natural ordering of their
-   * string representations as returned by {@code toString()}. It does not
-   * support null values.
-   *
-   * <p>The comparator is serializable.
-   */
-  @GwtCompatible(serializable = true)
-  public static Ordering<Object> usingToString() {
-    return UsingToStringOrdering.INSTANCE;
-  }
-
-  /**
-   * Returns an ordering which tries each given comparator in order until a
-   * non-zero result is found, returning that result, and returning zero only if
-   * all comparators return zero. The returned ordering is based on the state of
-   * the {@code comparators} iterable at the time it was provided to this
-   * method.
-   *
-   * <p>The returned ordering is equivalent to that produced using {@code
-   * Ordering.from(comp1).compound(comp2).compound(comp3) . . .}.
-   *
-   * <p><b>Warning:</b> Supplying an argument with undefined iteration order,
-   * such as a {@link HashSet}, will produce non-deterministic results.
-   *
-   * @param comparators the comparators to try in order
-   */
-  @GwtCompatible(serializable = true)
-  public static <T> Ordering<T> compound(
-      Iterable<? extends Comparator<? super T>> comparators) {
-    return new CompoundOrdering<T>(comparators);
-  }
-
-  /**
-   * Constructs a new instance of this class (only invokable by the subclass
-   * constructor, typically implicit).
-   */
-  protected Ordering() {}
-
-  // Non-static factories
-
-  /**
-   * Returns an ordering which first uses the ordering {@code this}, but which
-   * in the event of a "tie", then delegates to {@code secondaryComparator}.
-   * For example, to sort a bug list first by status and second by priority, you
-   * might use {@code byStatus.compound(byPriority)}. For a compound ordering
-   * with three or more components, simply chain multiple calls to this method.
-   *
-   * <p>An ordering produced by this method, or a chain of calls to this method,
-   * is equivalent to one created using {@link Ordering#compound(Iterable)} on
-   * the same component comparators.
-   */
-  @GwtCompatible(serializable = true)
-  public <U extends T> Ordering<U> compound(
-      Comparator<? super U> secondaryComparator) {
-    return new CompoundOrdering<U>(this, checkNotNull(secondaryComparator));
-  }
-
-  /**
-   * Returns the reverse of this ordering; the {@code Ordering} equivalent to
-   * {@link Collections#reverseOrder(Comparator)}.
-   */
-  // type parameter <S> lets us avoid the extra <String> in statements like:
-  // Ordering<String> o = Ordering.<String>natural().reverse();
-  @GwtCompatible(serializable = true)
-  public <S extends T> Ordering<S> reverse() {
-    return new ReverseOrdering<S>(this);
-  }
-
-  /**
-   * Returns a new ordering on {@code F} which orders elements by first applying
-   * a function to them, then comparing those results using {@code this}. For
-   * example, to compare objects by their string forms, in a case-insensitive
-   * manner, use: <pre>   {@code
-   *
-   *   Ordering.from(String.CASE_INSENSITIVE_ORDER)
-   *       .onResultOf(Functions.toStringFunction())}</pre>
-   */
-  @GwtCompatible(serializable = true)
-  public <F> Ordering<F> onResultOf(Function<F, ? extends T> function) {
-    return new ByFunctionOrdering<F, T>(function, this);
-  }
-
-  /**
-   * Returns a new ordering which sorts iterables by comparing corresponding
-   * elements pairwise until a nonzero result is found; imposes "dictionary
-   * order". If the end of one iterable is reached, but not the other, the
-   * shorter iterable is considered to be less than the longer one. For example,
-   * a lexicographical natural ordering over integers considers {@code
-   * [] < [1] < [1, 1] < [1, 2] < [2]}.
-   *
-   * <p>Note that {@code ordering.lexicographical().reverse()} is not
-   * equivalent to {@code ordering.reverse().lexicographical()} (consider how
-   * each would order {@code [1]} and {@code [1, 1]}).
-   *
-   * @since 2010.01.04 <b>tentative</b>
-   */
-  @GwtCompatible(serializable = true)
-  // type parameter <S> lets us avoid the extra <String> in statements like:
-  // Ordering<Iterable<String>> o =
-  //     Ordering.<String>natural().lexicographical();
-  public <S extends T> Ordering<Iterable<S>> lexicographical() {
-    /*
-     * Note that technically the returned ordering should be capable of
-     * handling not just {@code Iterable<S>} instances, but also any {@code
-     * Iterable<? extends S>}. However, the need for this comes up so rarely
-     * that it doesn't justify making everyone else deal with the very ugly
-     * wildcard.
-     */
-    return new LexicographicalOrdering<S>(this);
-  }
-
-  /**
-   * Returns an ordering that treats {@code null} as less than all other values
-   * and uses {@code this} to compare non-null values.
-   */
-  // type parameter <S> lets us avoid the extra <String> in statements like:
-  // Ordering<String> o = Ordering.<String>natural().nullsFirst();
-  @GwtCompatible(serializable = true)
-  public <S extends T> Ordering<S> nullsFirst() {
-    return new NullsFirstOrdering<S>(this);
-  }
-
-  /**
-   * Returns an ordering that treats {@code null} as greater than all other
-   * values and uses this ordering to compare non-null values.
-   */
-  // type parameter <S> lets us avoid the extra <String> in statements like:
-  // Ordering<String> o = Ordering.<String>natural().nullsLast();
-  @GwtCompatible(serializable = true)
-  public <S extends T> Ordering<S> nullsLast() {
-    return new NullsLastOrdering<S>(this);
-  }
-
-  /**
-   * {@link Collections#binarySearch(List, Object, Comparator) Searches}
-   * {@code sortedList} for {@code key} using the binary search algorithm. The
-   * list must be sorted using this ordering.
-   *
-   * @param sortedList the list to be searched
-   * @param key the key to be searched for
-   */
-  public int binarySearch(List<? extends T> sortedList, T key) {
-    return Collections.binarySearch(sortedList, key, this);
-  }
-
-  /**
-   * Returns a copy of the given iterable sorted by this ordering. The input is
-   * not modified. The returned list is modifiable, serializable, and has random
-   * access.
-   *
-   * <p>Unlike {@link Sets#newTreeSet(Iterable)}, this method does not collapse
-   * elements that compare as zero, and the resulting collection does not
-   * maintain its own sort order.
-   *
-   * @param iterable the elements to be copied and sorted
-   * @return a new list containing the given elements in sorted order
-   */
-  public <E extends T> List<E> sortedCopy(Iterable<E> iterable) {
-    List<E> list = Lists.newArrayList(iterable);
-    Collections.sort(list, this);
-    return list;
-  }
-
-  /**
-   * Returns {@code true} if each element in {@code iterable} after the first is
-   * greater than or equal to the element that preceded it, according to this
-   * ordering. Note that this is always true when the iterable has fewer than
-   * two elements.
-   */
-  public boolean isOrdered(Iterable<? extends T> iterable) {
-    Iterator<? extends T> it = iterable.iterator();
-    if (it.hasNext()) {
-      T prev = it.next();
-      while (it.hasNext()) {
-        T next = it.next();
-        if (compare(prev, next) > 0) {
-          return false;
-        }
-        prev = next;
-      }
-    }
-    return true;
-  }
-
-  /**
-   * Returns {@code true} if each element in {@code iterable} after the first is
-   * <i>strictly</i> greater than the element that preceded it, according to
-   * this ordering. Note that this is always true when the iterable has fewer
-   * than two elements.
-   */
-  public boolean isStrictlyOrdered(Iterable<? extends T> iterable) {
-    Iterator<? extends T> it = iterable.iterator();
-    if (it.hasNext()) {
-      T prev = it.next();
-      while (it.hasNext()) {
-        T next = it.next();
-        if (compare(prev, next) >= 0) {
-          return false;
-        }
-        prev = next;
-      }
-    }
-    return true;
-  }
-
-  /**
-   * Returns the largest of the specified values according to this ordering. If
-   * there are multiple largest values, the first of those is returned.
-   *
-   * @param iterable the iterable whose maximum element is to be determined
-   * @throws NoSuchElementException if {@code iterable} is empty
-   * @throws ClassCastException if the parameters are not <i>mutually
-   *     comparable</i> under this ordering.
-   */
-  public <E extends T> E max(Iterable<E> iterable) {
-    Iterator<E> iterator = iterable.iterator();
-
-    // let this throw NoSuchElementException as necessary
-    E maxSoFar = iterator.next();
-
-    while (iterator.hasNext()) {
-      maxSoFar = max(maxSoFar, iterator.next());
-    }
-
-    return maxSoFar;
-  }
-
-  /**
-   * Returns the largest of the specified values according to this ordering. If
-   * there are multiple largest values, the first of those is returned.
-   *
-   * @param a value to compare, returned if greater than or equal to the rest.
-   * @param b value to compare
-   * @param c value to compare
-   * @param rest values to compare
-   * @throws ClassCastException if the parameters are not <i>mutually
-   *     comparable</i> under this ordering.
-   */
-  public <E extends T> E max(E a, E b, E c, E... rest) {
-    E maxSoFar = max(max(a, b), c);
-
-    for (E r : rest) {
-      maxSoFar = max(maxSoFar, r);
-    }
-
-    return maxSoFar;
-  }
-
-  /**
-   * Returns the larger of the two values according to this ordering. If the
-   * values compare as 0, the first is returned.
-   *
-   * <p><b>Implementation note:</b> this method is invoked by the default
-   * implementations of the other {@code max} overloads, so overriding it will
-   * affect their behavior.
-   *
-   * @param a value to compare, returned if greater than or equal to b.
-   * @param b value to compare.
-   * @throws ClassCastException if the parameters are not <i>mutually
-   *     comparable</i> under this ordering.
-   */
-  public <E extends T> E max(E a, E b) {
-    return compare(a, b) >= 0 ? a : b;
-  }
-
-  /**
-   * Returns the smallest of the specified values according to this ordering. If
-   * there are multiple smallest values, the first of those is returned.
-   *
-   * @param iterable the iterable whose minimum element is to be determined
-   * @throws NoSuchElementException if {@code iterable} is empty
-   * @throws ClassCastException if the parameters are not <i>mutually
-   *     comparable</i> under this ordering.
-   */
-  public <E extends T> E min(Iterable<E> iterable) {
-    Iterator<E> iterator = iterable.iterator();
-
-    // let this throw NoSuchElementException as necessary
-    E minSoFar = iterator.next();
-
-    while (iterator.hasNext()) {
-      minSoFar = min(minSoFar, iterator.next());
-    }
-
-    return minSoFar;
-  }
-
-  /**
-   * Returns the smallest of the specified values according to this ordering. If
-   * there are multiple smallest values, the first of those is returned.
-   *
-   * @param a value to compare, returned if less than or equal to the rest.
-   * @param b value to compare
-   * @param c value to compare
-   * @param rest values to compare
-   * @throws ClassCastException if the parameters are not <i>mutually
-   *     comparable</i> under this ordering.
-   */
-  public <E extends T> E min(E a, E b, E c, E... rest) {
-    E minSoFar = min(min(a, b), c);
-
-    for (E r : rest) {
-      minSoFar = min(minSoFar, r);
-    }
-
-    return minSoFar;
-  }
-
-  /**
-   * Returns the smaller of the two values according to this ordering. If the
-   * values compare as 0, the first is returned.
-   *
-   * <p><b>Implementation note:</b> this method is invoked by the default
-   * implementations of the other {@code min} overloads, so overriding it will
-   * affect their behavior.
-   *
-   * @param a value to compare, returned if less than or equal to b.
-   * @param b value to compare.
-   * @throws ClassCastException if the parameters are not <i>mutually
-   *     comparable</i> under this ordering.
-   */
-  public <E extends T> E min(E a, E b) {
-    return compare(a, b) <= 0 ? a : b;
-  }
-
-  // Never make these public
-  static final int LEFT_IS_GREATER = 1;
-  static final int RIGHT_IS_GREATER = -1;
-}
diff --git a/src/com/google/common/collect/PeekingIterator.java b/src/com/google/common/collect/PeekingIterator.java
deleted file mode 100644
index 3149730..0000000
--- a/src/com/google/common/collect/PeekingIterator.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-
-/**
- * An iterator that supports a one-element lookahead while iterating.
- *
- * @author Mick Killianey
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible
-public interface PeekingIterator<E> extends Iterator<E> {
-  /**
-   * Returns the next element in the iteration, without advancing the iteration.
-   *
-   * <p>Calls to {@code peek()} should not change the state of the iteration,
-   * except that it <i>may</i> prevent removal of the most recent element via
-   * {@link #remove()}.
-   *
-   * @throws NoSuchElementException if the iteration has no more elements
-   *     according to {@link #hasNext()}
-   */
-  E peek();
-
-  /**
-   * {@inheritDoc}
-   *
-   * <p>The objects returned by consecutive calls to {@link #peek()} then {@link
-   * #next()} are guaranteed to be equal to each other.
-   */
-  E next();
-
-  /**
-   * {@inheritDoc}
-   *
-   * <p>Implementations may or may not support removal when a call to {@link
-   * #peek()} has occurred since the most recent call to {@link #next()}.
-   *
-   * @throws IllegalStateException if there has been a call to {@link #peek()}
-   *     since the most recent call to {@link #next()} and this implementation
-   *     does not support this sequence of calls (optional)
-   */
-  void remove();
-}
diff --git a/src/com/google/common/collect/Platform.java b/src/com/google/common/collect/Platform.java
deleted file mode 100644
index 1e3eb43..0000000
--- a/src/com/google/common/collect/Platform.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-import com.google.common.annotations.GwtIncompatible;
-
-import java.lang.reflect.Array;
-import java.util.List;
-
-/**
- * Methods factored out so that they can be emulated differently in GWT.
- *
- * @author Hayward Chan
- */
-@GwtCompatible(emulated = true)
-class Platform {
-
-  /**
-   * Calls {@link List#subList(int, int)}.  Factored out so that it can be
-   * emulated in GWT.
-   *
-   * <p>This method is not supported in GWT yet.  See <a
-   * href="http://code.google.com/p/google-web-toolkit/issues/detail?id=1791">
-   * GWT issue 1791</a>
-   */
-  @GwtIncompatible("List.subList")
-  static <T> List<T> subList(List<T> list, int fromIndex, int toIndex) {
-    return list.subList(fromIndex, toIndex);
-  }
-
-  /**
-   * Calls {@link Class#isInstance(Object)}.  Factored out so that it can be
-   * emulated in GWT.
-   */
-  @GwtIncompatible("Class.isInstance")
-  static boolean isInstance(Class<?> clazz, Object obj) {
-    return clazz.isInstance(obj);
-  }
-
-  /**
-   * Clone the given array using {@link Object#clone()}.  It is factored out so
-   * that it can be emulated in GWT.
-   */
-  static <T> T[] clone(T[] array) {
-    return array.clone();
-  }
-
-  /**
-   * Wrapper around {@link System#arraycopy} so that it can be emulated
-   * correctly in GWT.
-   *
-   * <p>It is only intended for the case {@code src} and {@code dest} are
-   * different.  It also doesn't validate the types and indices.
-   *
-   * <p>As of GWT 2.0, The built-in {@link System#arraycopy} doesn't work
-   * in general case.  See
-   * http://code.google.com/p/google-web-toolkit/issues/detail?id=3621
-   * for more details.
-   */
-  static void unsafeArrayCopy(
-      Object[] src, int srcPos, Object[] dest, int destPos, int length) {
-    System.arraycopy(src, srcPos, dest, destPos, length);
-  }
-
-  /**
-   * Returns a new array of the given length with the specified component type.
-   *
-   * @param type the component type
-   * @param length the length of the new array
-   */
-  @GwtIncompatible("Array.newInstance(Class, int)")
-  @SuppressWarnings("unchecked")
-  static <T> T[] newArray(Class<T> type, int length) {
-    return (T[]) Array.newInstance(type, length);
-  }
-
-  /**
-   * Returns a new array of the given length with the same type as a reference
-   * array.
-   *
-   * @param reference any array of the desired type
-   * @param length the length of the new array
-   */
-  static <T> T[] newArray(T[] reference, int length) {
-    Class<?> type = reference.getClass().getComponentType();
-
-    // the cast is safe because
-    // result.getClass() == reference.getClass().getComponentType()
-    @SuppressWarnings("unchecked")
-    T[] result = (T[]) Array.newInstance(type, length);
-    return result;
-  }
-
-  /**
-   * Configures the given map maker to use weak keys, if possible; does nothing
-   * otherwise (i.e., in GWT). This is sometimes acceptable, when only
-   * server-side code could generate enough volume that reclamation becomes
-   * important.
-   */
-  static MapMaker tryWeakKeys(MapMaker mapMaker) {
-    return mapMaker.weakKeys();
-  }
-
-  private Platform() {}
-}
diff --git a/src/com/google/common/collect/RegularImmutableBiMap.java b/src/com/google/common/collect/RegularImmutableBiMap.java
deleted file mode 100644
index 53a50fb..0000000
--- a/src/com/google/common/collect/RegularImmutableBiMap.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-
-/**
- * Bimap with one or more mappings.
- * 
- * @author Jared Levy
- */
-@GwtCompatible(serializable = true)
-@SuppressWarnings("serial") // uses writeReplace(), not default serialization
-class RegularImmutableBiMap<K, V> extends ImmutableBiMap<K, V> {
-  final transient ImmutableMap<K, V> delegate;
-  final transient ImmutableBiMap<V, K> inverse;
-
-  RegularImmutableBiMap(ImmutableMap<K, V> delegate) {
-    this.delegate = delegate;
-
-    ImmutableMap.Builder<V, K> builder = ImmutableMap.builder();
-    for (Entry<K, V> entry : delegate.entrySet()) {
-      builder.put(entry.getValue(), entry.getKey());
-    }
-    ImmutableMap<V, K> backwardMap = builder.build();
-    this.inverse = new RegularImmutableBiMap<V, K>(backwardMap, this);
-  }
-
-  RegularImmutableBiMap(ImmutableMap<K, V> delegate,
-      ImmutableBiMap<V, K> inverse) {
-    this.delegate = delegate;
-    this.inverse = inverse;
-  }
-
-  @Override ImmutableMap<K, V> delegate() {
-    return delegate;
-  }
-
-  @Override public ImmutableBiMap<V, K> inverse() {
-    return inverse;
-  }
-}
diff --git a/src/com/google/common/collect/RegularImmutableList.java b/src/com/google/common/collect/RegularImmutableList.java
deleted file mode 100644
index 49b6d1c..0000000
--- a/src/com/google/common/collect/RegularImmutableList.java
+++ /dev/null
@@ -1,235 +0,0 @@
-/*
- * Copyright (C) 2009 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-import com.google.common.base.Preconditions;
-
-import java.util.List;
-import java.util.ListIterator;
-import java.util.NoSuchElementException;
-
-import javax.annotation.Nullable;
-
-/**
- * Implementation of {@link ImmutableList} with one or more elements.
- *
- * @author Kevin Bourrillion
- */
-@GwtCompatible(serializable = true)
-@SuppressWarnings("serial") // uses writeReplace(), not default serialization
-class RegularImmutableList<E> extends ImmutableList<E> {
-  private final transient int offset;
-  private final transient int size;
-  private final transient Object[] array;
-
-  RegularImmutableList(Object[] array, int offset, int size) {
-    this.offset = offset;
-    this.size = size;
-    this.array = array;
-  }
-
-  RegularImmutableList(Object[] array) {
-    this(array, 0, array.length);
-  }
-
-  public int size() {
-    return size;
-  }
-
-  @Override public boolean isEmpty() {
-    return false;
-  }
-
-  @Override public boolean contains(Object target) {
-    return indexOf(target) != -1;
-  }
-
-  // The fake cast to E is safe because the creation methods only allow E's
-  @SuppressWarnings("unchecked")
-  @Override public UnmodifiableIterator<E> iterator() {
-    return (UnmodifiableIterator<E>) Iterators.forArray(array, offset, size);
-  }
-
-  @Override public Object[] toArray() {
-    Object[] newArray = new Object[size()];
-    Platform.unsafeArrayCopy(array, offset, newArray, 0, size);
-    return newArray;
-  }
-
-  @Override public <T> T[] toArray(T[] other) {
-    if (other.length < size) {
-      other = ObjectArrays.newArray(other, size);
-    } else if (other.length > size) {
-      other[size] = null;
-    }
-    Platform.unsafeArrayCopy(array, offset, other, 0, size);
-    return other;
-  }
-
-  // The fake cast to E is safe because the creation methods only allow E's
-  @SuppressWarnings("unchecked")
-  public E get(int index) {
-    Preconditions.checkElementIndex(index, size);
-    return (E) array[index + offset];
-  }
-
-  @Override public int indexOf(Object target) {
-    if (target != null) {
-      for (int i = offset; i < offset + size; i++) {
-        if (array[i].equals(target)) {
-          return i - offset;
-        }
-      }
-    }
-    return -1;
-  }
-
-  @Override public int lastIndexOf(Object target) {
-    if (target != null) {
-      for (int i = offset + size - 1; i >= offset; i--) {
-        if (array[i].equals(target)) {
-          return i - offset;
-        }
-      }
-    }
-    return -1;
-  }
-
-  @Override public ImmutableList<E> subList(int fromIndex, int toIndex) {
-    Preconditions.checkPositionIndexes(fromIndex, toIndex, size);
-    return (fromIndex == toIndex)
-        ? ImmutableList.<E>of()
-        : new RegularImmutableList<E>(
-            array, offset + fromIndex, toIndex - fromIndex);
-  }
-
-  public ListIterator<E> listIterator() {
-    return listIterator(0);
-  }
-
-  public ListIterator<E> listIterator(final int start) {
-    Preconditions.checkPositionIndex(start, size);
-
-    return new ListIterator<E>() {
-      int index = start;
-
-      public boolean hasNext() {
-        return index < size;
-      }
-      public boolean hasPrevious() {
-        return index > 0;
-      }
-
-      public int nextIndex() {
-        return index;
-      }
-      public int previousIndex() {
-        return index - 1;
-      }
-
-      public E next() {
-        E result;
-        try {
-          result = get(index);
-        } catch (IndexOutOfBoundsException rethrown) {
-          throw new NoSuchElementException();
-        }
-        index++;
-        return result;
-      }
-      public E previous() {
-        E result;
-        try {
-          result = get(index - 1);
-        } catch (IndexOutOfBoundsException rethrown) {
-          throw new NoSuchElementException();
-        }
-        index--;
-        return result;
-      }
-
-      public void set(E o) {
-        throw new UnsupportedOperationException();
-      }
-      public void add(E o) {
-        throw new UnsupportedOperationException();
-      }
-      public void remove() {
-        throw new UnsupportedOperationException();
-      }
-    };
-  }
-
-  @Override public boolean equals(@Nullable Object object) {
-    if (object == this) {
-      return true;
-    }
-    if (!(object instanceof List)) {
-      return false;
-    }
-
-    List<?> that = (List<?>) object;
-    if (this.size() != that.size()) {
-      return false;
-    }
-
-    int index = offset;
-    if (object instanceof RegularImmutableList) {
-      RegularImmutableList<?> other = (RegularImmutableList<?>) object;
-      for (int i = other.offset; i < other.offset + other.size; i++) {
-        if (!array[index++].equals(other.array[i])) {
-          return false;
-        }
-      }
-    } else {
-      for (Object element : that) {
-        if (!array[index++].equals(element)) {
-          return false;
-        }
-      }
-    }
-    return true;
-  }
-
-  @Override public int hashCode() {
-    // not caching hash code since it could change if the elements are mutable
-    // in a way that modifies their hash codes
-    int hashCode = 1;
-    for (int i = offset; i < offset + size; i++) {
-      hashCode = 31 * hashCode + array[i].hashCode();
-    }
-    return hashCode;
-  }
-
-  @Override public String toString() {
-    StringBuilder sb = new StringBuilder(size() * 16);
-    sb.append('[').append(array[offset]);
-    for (int i = offset + 1; i < offset + size; i++) {
-      sb.append(", ").append(array[i]);
-    }
-    return sb.append(']').toString();
-  }
-
-  int offset() {
-    return offset;
-  }
-
-  Object[] array() {
-    return array;
-  }
-}
diff --git a/src/com/google/common/collect/RegularImmutableMap.java b/src/com/google/common/collect/RegularImmutableMap.java
deleted file mode 100644
index b3440b3..0000000
--- a/src/com/google/common/collect/RegularImmutableMap.java
+++ /dev/null
@@ -1,213 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-import com.google.common.collect.ImmutableSet.ArrayImmutableSet;
-import com.google.common.collect.ImmutableSet.TransformedImmutableSet;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-/**
- * Implementation of {@link ImmutableMap} with two or more entries.
- *
- * @author Jesse Wilson
- * @author Kevin Bourrillion
- */
-@GwtCompatible(serializable = true)
-final class RegularImmutableMap<K, V> extends ImmutableMap<K, V> {
-
-  private final transient Entry<K, V>[] entries; // entries in insertion order
-  private final transient Object[] table; // alternating keys and values
-  // 'and' with an int then shift to get a table index
-  private final transient int mask;
-  private final transient int keySetHashCode;
-
-  RegularImmutableMap(Entry<?, ?>... immutableEntries) {
-    // each of our 6 callers carefully put only Entry<K, V>s into the array!
-    // checkNotNull for GWT.
-    @SuppressWarnings("unchecked")
-    Entry<K, V>[] tmp = (Entry<K, V>[]) checkNotNull(immutableEntries);
-    this.entries = tmp;
-
-    int tableSize = Hashing.chooseTableSize(immutableEntries.length);
-    table = new Object[tableSize * 2];
-    mask = tableSize - 1;
-
-    int keySetHashCodeMutable = 0;
-    for (Entry<K, V> entry : this.entries) {
-      checkNotNull(entry);  // checkNotNull for GWT.
-      K key = checkNotNull(entry.getKey());  // checkNotNull for GWT.
-      int keyHashCode = key.hashCode();
-      for (int i = Hashing.smear(keyHashCode); true; i++) {
-        int index = (i & mask) * 2;
-        Object existing = table[index];
-        if (existing == null) {
-          V value = checkNotNull(entry.getValue());  // checkNotNull for GWT.
-          table[index] = key;
-          table[index + 1] = value;
-          keySetHashCodeMutable += keyHashCode;
-          break;
-        } else if (existing.equals(key)) {
-          throw new IllegalArgumentException("duplicate key: " + key);
-        }
-      }
-    }
-    keySetHashCode = keySetHashCodeMutable;
-  }
-
-  @Override public V get(Object key) {
-    if (key == null) {
-      return null;
-    }
-    for (int i = Hashing.smear(key.hashCode()); true; i++) {
-      int index = (i & mask) * 2;
-      Object candidate = table[index];
-      if (candidate == null) {
-        return null;
-      }
-      if (candidate.equals(key)) {
-        // we're careful to store only V's at odd indices
-        @SuppressWarnings("unchecked")
-        V value = (V) table[index + 1];
-        return value;
-      }
-    }
-  }
-
-  public int size() {
-    return entries.length;
-  }
-
-  @Override public boolean isEmpty() {
-    return false;
-  }
-
-  @Override public boolean containsValue(Object value) {
-    if (value == null) {
-      return false;
-    }
-    for (Entry<K, V> entry : entries) {
-      if (entry.getValue().equals(value)) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  // TODO: Serialization of the map views should serialize the map, and
-  // deserialization should call entrySet(), keySet(), or values() on the
-  // deserialized map. The views are serializable since the Immutable* classes
-  // are.
-
-  private transient ImmutableSet<Entry<K, V>> entrySet;
-
-  @Override public ImmutableSet<Entry<K, V>> entrySet() {
-    ImmutableSet<Entry<K, V>> es = entrySet;
-    return (es == null) ? (entrySet = new EntrySet<K, V>(this)) : es;
-  }
-
-  @SuppressWarnings("serial") // uses writeReplace(), not default serialization
-  private static class EntrySet<K, V> extends ArrayImmutableSet<Entry<K, V>> {
-    final transient RegularImmutableMap<K, V> map;
-
-    EntrySet(RegularImmutableMap<K, V> map) {
-      super(map.entries);
-      this.map = map;
-    }
-
-    @Override public boolean contains(Object target) {
-      if (target instanceof Entry) {
-        Entry<?, ?> entry = (Entry<?, ?>) target;
-        V mappedValue = map.get(entry.getKey());
-        return mappedValue != null && mappedValue.equals(entry.getValue());
-      }
-      return false;
-    }
-  }
-
-  private transient ImmutableSet<K> keySet;
-
-  @Override public ImmutableSet<K> keySet() {
-    ImmutableSet<K> ks = keySet;
-    return (ks == null) ? (keySet = new KeySet<K, V>(this)) : ks;
-  }
-
-  @SuppressWarnings("serial") // uses writeReplace(), not default serialization
-  private static class KeySet<K, V>
-      extends TransformedImmutableSet<Entry<K, V>, K> {
-    final RegularImmutableMap<K, V> map;
-
-    KeySet(RegularImmutableMap<K, V> map) {
-      super(map.entries, map.keySetHashCode);
-      this.map = map;
-    }
-
-    @Override K transform(Entry<K, V> element) {
-      return element.getKey();
-    }
-
-    @Override public boolean contains(Object target) {
-      return map.containsKey(target);
-    }
-  }
-
-  private transient ImmutableCollection<V> values;
-
-  @Override public ImmutableCollection<V> values() {
-    ImmutableCollection<V> v = values;
-    return (v == null) ? (values = new Values<V>(this)) : v;
-  }
-
-  @SuppressWarnings("serial") // uses writeReplace(), not default serialization
-  private static class Values<V> extends ImmutableCollection<V> {
-    final RegularImmutableMap<?, V> map;
-
-    Values(RegularImmutableMap<?, V> map) {
-      this.map = map;
-    }
-
-    public int size() {
-      return map.entries.length;
-    }
-
-    @Override public UnmodifiableIterator<V> iterator() {
-      return new AbstractIterator<V>() {
-        int index = 0;
-        @Override protected V computeNext() {
-          return (index < map.entries.length)
-              ? map.entries[index++].getValue()
-              : endOfData();
-        }
-      };
-    }
-
-    @Override public boolean contains(Object target) {
-      return map.containsValue(target);
-    }
-  }
-
-  @Override public String toString() {
-    StringBuilder result = new StringBuilder(size() * 16).append('{');
-    Collections2.standardJoiner.appendTo(result, entries);
-    return result.append('}').toString();
-  }
-
-  // This class is never actually serialized directly, but we have to make the
-  // warning go away (and suppressing would suppress for all nested classes too)
-  private static final long serialVersionUID = 0;
-}
diff --git a/src/com/google/common/collect/RegularImmutableSet.java b/src/com/google/common/collect/RegularImmutableSet.java
deleted file mode 100644
index 5eeea8a..0000000
--- a/src/com/google/common/collect/RegularImmutableSet.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.collect.ImmutableSet.ArrayImmutableSet;
-
-/**
- * Implementation of {@link ImmutableSet} with two or more elements.
- *
- * @author Kevin Bourrillion
- */
-@GwtCompatible(serializable = true)
-@SuppressWarnings("serial") // uses writeReplace(), not default serialization
-final class RegularImmutableSet<E> extends ArrayImmutableSet<E> {
-  // the same elements in hashed positions (plus nulls)
-  @VisibleForTesting final transient Object[] table;
-  // 'and' with an int to get a valid table index.
-  private final transient int mask;
-  private final transient int hashCode;
-
-  RegularImmutableSet(
-      Object[] elements, int hashCode, Object[] table, int mask) {
-    super(elements);
-    this.table = table;
-    this.mask = mask;
-    this.hashCode = hashCode;
-  }
-
-  @Override public boolean contains(Object target) {
-    if (target == null) {
-      return false;
-    }
-    for (int i = Hashing.smear(target.hashCode()); true; i++) {
-      Object candidate = table[i & mask];
-      if (candidate == null) {
-        return false;
-      }
-      if (candidate.equals(target)) {
-        return true;
-      }
-    }
-  }
-
-  @Override public int hashCode() {
-    return hashCode;
-  }
-
-  @Override boolean isHashCodeFast() {
-    return true;
-  }
-}
diff --git a/src/com/google/common/collect/RegularImmutableSortedSet.java b/src/com/google/common/collect/RegularImmutableSortedSet.java
deleted file mode 100644
index 9445379..0000000
--- a/src/com/google/common/collect/RegularImmutableSortedSet.java
+++ /dev/null
@@ -1,273 +0,0 @@
-/*
- * Copyright (C) 2009 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-
-import java.util.Collection;
-import java.util.Comparator;
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-import java.util.Set;
-
-import javax.annotation.Nullable;
-
-/**
- * An immutable sorted set with one or more elements.
- * TODO: Consider creating a separate class for a single-element sorted set.
- *
- * @author Jared Levy
- */
-@GwtCompatible(serializable = true)
-@SuppressWarnings("serial")
-final class RegularImmutableSortedSet<E>
-    extends ImmutableSortedSet<E> {
-
-  private final Object[] elements;
-  /**
-   * The index of the first element that's in the sorted set (inclusive
-   * index).
-   */
-  private final int fromIndex;
-  /**
-   * The index after the last element that's in the sorted set (exclusive
-   * index).
-   */
-  private final int toIndex;
-
-  RegularImmutableSortedSet(Object[] elements,
-      Comparator<? super E> comparator) {
-    super(comparator);
-    this.elements = elements;
-    this.fromIndex = 0;
-    this.toIndex = elements.length;
-  }
-
-  RegularImmutableSortedSet(Object[] elements,
-      Comparator<? super E> comparator, int fromIndex, int toIndex) {
-    super(comparator);
-    this.elements = elements;
-    this.fromIndex = fromIndex;
-    this.toIndex = toIndex;
-  }
-
-  // The factory methods ensure that every element is an E.
-  @SuppressWarnings("unchecked")
-  @Override public UnmodifiableIterator<E> iterator() {
-    return (UnmodifiableIterator<E>)
-        Iterators.forArray(elements, fromIndex, size());
-  }
-
-  @Override public boolean isEmpty() {
-    return false;
-  }
-
-  public int size() {
-    return toIndex - fromIndex;
-  }
-
-  @Override public boolean contains(Object o) {
-    if (o == null) {
-      return false;
-    }
-    try {
-      return binarySearch(o) >= 0;
-    } catch (ClassCastException e) {
-      return false;
-    }
-  }
-
-  @Override public boolean containsAll(Collection<?> targets) {
-    // TODO: For optimal performance, use a binary search when
-    // targets.size() < size() / log(size())
-    if (!hasSameComparator(targets, comparator()) || (targets.size() <= 1)) {
-      return super.containsAll(targets);
-    }
-
-    /*
-     * If targets is a sorted set with the same comparator, containsAll can
-     * run in O(n) time stepping through the two collections.
-     */
-    int i = fromIndex;
-    Iterator<?> iterator = targets.iterator();
-    Object target = iterator.next();
-
-    while (true) {
-      if (i >= toIndex) {
-        return false;
-      }
-
-      int cmp = unsafeCompare(elements[i], target);
-
-      if (cmp < 0) {
-        i++;
-      } else if (cmp == 0) {
-        if (!iterator.hasNext()) {
-          return true;
-        }
-        target = iterator.next();
-        i++;
-      } else if (cmp > 0) {
-        return false;
-      }
-    }
-  }
-
-  private int binarySearch(Object key) {
-    int lower = fromIndex;
-    int upper = toIndex - 1;
-
-    while (lower <= upper) {
-      int middle = lower + (upper - lower) / 2;
-      int c = unsafeCompare(key, elements[middle]);
-      if (c < 0) {
-        upper = middle - 1;
-      } else if (c > 0) {
-        lower = middle + 1;
-      } else {
-        return middle;
-      }
-    }
-
-    return -lower - 1;
-  }
-
-  @Override public Object[] toArray() {
-    Object[] array = new Object[size()];
-    Platform.unsafeArrayCopy(elements, fromIndex, array, 0, size());
-    return array;
-  }
-
-  // TODO: Move to ObjectArrays (same code in ImmutableList).
-  @Override public <T> T[] toArray(T[] array) {
-    int size = size();
-    if (array.length < size) {
-      array = ObjectArrays.newArray(array, size);
-    } else if (array.length > size) {
-      array[size] = null;
-    }
-    Platform.unsafeArrayCopy(elements, fromIndex, array, 0, size);
-    return array;
-  }
-
-  @Override public boolean equals(@Nullable Object object) {
-    if (object == this) {
-      return true;
-    }
-    if (!(object instanceof Set)) {
-      return false;
-    }
-
-    Set<?> that = (Set<?>) object;
-    if (size() != that.size()) {
-      return false;
-    }
-
-    if (hasSameComparator(that, comparator)) {
-      Iterator<?> iterator = that.iterator();
-      try {
-        for (int i = fromIndex; i < toIndex; i++) {
-          Object otherElement = iterator.next();
-          if (otherElement == null
-              || unsafeCompare(elements[i], otherElement) != 0) {
-            return false;
-          }
-        }
-        return true;
-      } catch (ClassCastException e) {
-        return false;
-      } catch (NoSuchElementException e) {
-        return false; // concurrent change to other set
-      }
-    }
-    return this.containsAll(that);
-  }
-
-  @Override public int hashCode() {
-    // not caching hash code since it could change if the elements are mutable
-    // in a way that modifies their hash codes
-    int hash = 0;
-    for (int i = fromIndex; i < toIndex; i++) {
-      hash += elements[i].hashCode();
-    }
-    return hash;
-  }
-
-  // The factory methods ensure that every element is an E.
-  @SuppressWarnings("unchecked")
-  public E first() {
-    return (E) elements[fromIndex];
-  }
-
-  // The factory methods ensure that every element is an E.
-  @SuppressWarnings("unchecked")
-  public E last() {
-    return (E) elements[toIndex - 1];
-  }
-
-  @Override ImmutableSortedSet<E> headSetImpl(E toElement) {
-    return createSubset(fromIndex, findSubsetIndex(toElement));
-  }
-
-  @Override ImmutableSortedSet<E> subSetImpl(E fromElement, E toElement) {
-    return createSubset(
-        findSubsetIndex(fromElement), findSubsetIndex(toElement));
-  }
-
-  @Override ImmutableSortedSet<E> tailSetImpl(E fromElement) {
-    return createSubset(findSubsetIndex(fromElement), toIndex);
-  }
-
-  private int findSubsetIndex(E element) {
-    int index = binarySearch(element);
-    return (index >= 0) ? index : (-index - 1);
-  }
-
-  private ImmutableSortedSet<E> createSubset(
-      int newFromIndex, int newToIndex) {
-    if (newFromIndex < newToIndex) {
-      return new RegularImmutableSortedSet<E>(elements, comparator,
-          newFromIndex, newToIndex);
-    } else {
-      return emptySet(comparator);
-    }
-  }
-
-  @Override boolean hasPartialArray() {
-    return (fromIndex != 0) || (toIndex != elements.length);
-  }
-
-  @Override int indexOf(Object target) {
-    if (target == null) {
-      return -1;
-    }
-    int position;
-    try {
-      position = binarySearch(target);
-    } catch (ClassCastException e) {
-      return -1;
-    }
-    // The equals() check is needed when the comparator isn't compatible with
-    // equals().
-    return (position >= 0 && elements[position].equals(target))
-        ? position - fromIndex : -1;
-  }
-
-  @Override ImmutableList<E> createAsList() {
-    return new ImmutableSortedAsList<E>(elements, fromIndex, size(), this);
-  }
-}
diff --git a/src/com/google/common/collect/ReverseNaturalOrdering.java b/src/com/google/common/collect/ReverseNaturalOrdering.java
deleted file mode 100644
index 3582f02..0000000
--- a/src/com/google/common/collect/ReverseNaturalOrdering.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.io.Serializable;
-
-/** An ordering that uses the reverse of the natural order of the values. */
-@GwtCompatible(serializable = true)
-@SuppressWarnings("unchecked") // TODO: the right way to explain this??
-final class ReverseNaturalOrdering
-    extends Ordering<Comparable> implements Serializable {
-  static final ReverseNaturalOrdering INSTANCE = new ReverseNaturalOrdering();
-
-  public int compare(Comparable left, Comparable right) {
-    checkNotNull(left); // right null is caught later
-    if (left == right) {
-      return 0;
-    }
-
-    @SuppressWarnings("unchecked") // we're permitted to throw CCE
-    int result = right.compareTo(left);
-    return result;
-  }
-
-  @Override public <S extends Comparable> Ordering<S> reverse() {
-    return Ordering.natural();
-  }
-
-  // Override the six min/max methods to "hoist" delegation outside loops
-
-  @Override public <E extends Comparable> E min(E a, E b) {
-    return NaturalOrdering.INSTANCE.max(a, b);
-  }
-
-  @Override public <E extends Comparable> E min(E a, E b, E c, E... rest) {
-    return NaturalOrdering.INSTANCE.max(a, b, c, rest);
-  }
-
-  @Override public <E extends Comparable> E min(Iterable<E> iterable) {
-    return NaturalOrdering.INSTANCE.max(iterable);
-  }
-
-  @Override public <E extends Comparable> E max(E a, E b) {
-    return NaturalOrdering.INSTANCE.min(a, b);
-  }
-
-  @Override public <E extends Comparable> E max(E a, E b, E c, E... rest) {
-    return NaturalOrdering.INSTANCE.min(a, b, c, rest);
-  }
-
-  @Override public <E extends Comparable> E max(Iterable<E> iterable) {
-    return NaturalOrdering.INSTANCE.min(iterable);
-  }
-  
-  // preserving singleton-ness gives equals()/hashCode() for free
-  private Object readResolve() {
-    return INSTANCE;
-  }
-
-  @Override public String toString() {
-    return "Ordering.natural().reverse()";
-  }
-
-  private ReverseNaturalOrdering() {}
-
-  private static final long serialVersionUID = 0;
-}
diff --git a/src/com/google/common/collect/ReverseOrdering.java b/src/com/google/common/collect/ReverseOrdering.java
deleted file mode 100644
index e74d27a..0000000
--- a/src/com/google/common/collect/ReverseOrdering.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.io.Serializable;
-
-import javax.annotation.Nullable;
-
-/** An ordering that uses the reverse of a given order. */
-@GwtCompatible(serializable = true)
-final class ReverseOrdering<T> extends Ordering<T> implements Serializable {
-  final Ordering<? super T> forwardOrder;
-
-  ReverseOrdering(Ordering<? super T> forwardOrder) {
-    this.forwardOrder = checkNotNull(forwardOrder);
-  }
-
-  public int compare(T a, T b) {
-    return forwardOrder.compare(b, a);
-  }
-
-  @SuppressWarnings("unchecked") // how to explain?
-  @Override public <S extends T> Ordering<S> reverse() {
-    return (Ordering) forwardOrder;
-  }
-
-  // Override the six min/max methods to "hoist" delegation outside loops
-
-  @Override public <E extends T> E min(E a, E b) {
-    return forwardOrder.max(a, b);
-  }
-
-  @Override public <E extends T> E min(E a, E b, E c, E... rest) {
-    return forwardOrder.max(a, b, c, rest);
-  }
-
-  @Override public <E extends T> E min(Iterable<E> iterable) {
-    return forwardOrder.max(iterable);
-  }
-
-  @Override public <E extends T> E max(E a, E b) {
-    return forwardOrder.min(a, b);
-  }
-
-  @Override public <E extends T> E max(E a, E b, E c, E... rest) {
-    return forwardOrder.min(a, b, c, rest);
-  }
-
-  @Override public <E extends T> E max(Iterable<E> iterable) {
-    return forwardOrder.min(iterable);
-  }
-
-  @Override public int hashCode() {
-    return -forwardOrder.hashCode();
-  }
-
-  @Override public boolean equals(@Nullable Object object) {
-    if (object == this) {
-      return true;
-    }
-    if (object instanceof ReverseOrdering) {
-      ReverseOrdering<?> that = (ReverseOrdering<?>) object;
-      return this.forwardOrder.equals(that.forwardOrder);
-    }
-    return false;
-  }
-
-  @Override public String toString() {
-    return forwardOrder + ".reverse()";
-  }
-
-  private static final long serialVersionUID = 0;
-}
diff --git a/src/com/google/common/collect/Serialization.java b/src/com/google/common/collect/Serialization.java
deleted file mode 100644
index b2f053d..0000000
--- a/src/com/google/common/collect/Serialization.java
+++ /dev/null
@@ -1,249 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-import com.google.common.annotations.GwtIncompatible;
-
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.lang.reflect.Field;
-import java.util.Collection;
-import java.util.Map;
-
-/**
- * Provides static methods for serializing collection classes.
- *
- * <p>This class assists the implementation of collection classes. Do not use
- * this class to serialize collections that are defined elsewhere.
- *
- * @author Jared Levy
- */
-@GwtCompatible(emulated = true) // Accessible but not supported in GWT.
-final class Serialization {
-  private Serialization() {}
-
-  /**
-   * Reads a count corresponding to a serialized map, multiset, or multimap. It
-   * returns the size of a map serialized by {@link
-   * #writeMap(Map, ObjectOutputStream)}, the number of distinct elements in a
-   * multiset serialized by {@link
-   * #writeMultiset(Multiset, ObjectOutputStream)}, or the number of distinct
-   * keys in a multimap serialized by {@link
-   * #writeMultimap(Multimap, ObjectOutputStream)}.
-   *
-   * <p>The returned count may be used to construct an empty collection of the
-   * appropriate capacity before calling any of the {@code populate} methods.
-   */
-  @GwtIncompatible("java.io.ObjectInputStream")
-  public static int readCount(ObjectInputStream stream) throws IOException {
-    return stream.readInt();
-  }
-
-  /**
-   * Stores the contents of a map in an output stream, as part of serialization.
-   * It does not support concurrent maps whose content may change while the
-   * method is running.
-   *
-   * <p>The serialized output consists of the number of entries, first key,
-   * first value, second key, second value, and so on.
-   */
-  @GwtIncompatible("java.io.ObjectOutputStream")
-  public static <K, V> void writeMap(Map<K, V> map, ObjectOutputStream stream)
-      throws IOException {
-    stream.writeInt(map.size());
-    for (Map.Entry<K, V> entry : map.entrySet()) {
-      stream.writeObject(entry.getKey());
-      stream.writeObject(entry.getValue());
-    }
-  }
-
-  /**
-   * Populates a map by reading an input stream, as part of deserialization.
-   * See {@link #writeMap} for the data format.
-   */
-  @GwtIncompatible("java.io.ObjectInputStream")
-  public static <K, V> void populateMap(Map<K, V> map, ObjectInputStream stream)
-      throws IOException, ClassNotFoundException {
-    int size = stream.readInt();
-    populateMap(map, stream, size);
-  }
-
-  /**
-   * Populates a map by reading an input stream, as part of deserialization.
-   * See {@link #writeMap} for the data format. The size is determined by a
-   * prior call to {@link #readCount}.
-   */
-  @GwtIncompatible("java.io.ObjectInputStream")
-  public static <K, V> void populateMap(Map<K, V> map, ObjectInputStream stream,
-      int size) throws IOException, ClassNotFoundException {
-    for (int i = 0; i < size; i++) {
-      @SuppressWarnings("unchecked") // reading data stored by writeMap
-      K key = (K) stream.readObject();
-      @SuppressWarnings("unchecked") // reading data stored by writeMap
-      V value = (V) stream.readObject();
-      map.put(key, value);
-    }
-  }
-
-  /**
-   * Stores the contents of a multiset in an output stream, as part of
-   * serialization. It does not support concurrent multisets whose content may
-   * change while the method is running.
-   *
-   * <p>The serialized output consists of the number of distinct elements, the
-   * first element, its count, the second element, its count, and so on.
-   */
-  @GwtIncompatible("java.io.ObjectOutputStream")
-  public static <E> void writeMultiset(
-      Multiset<E> multiset, ObjectOutputStream stream) throws IOException {
-    int entryCount = multiset.entrySet().size();
-    stream.writeInt(entryCount);
-    for (Multiset.Entry<E> entry : multiset.entrySet()) {
-      stream.writeObject(entry.getElement());
-      stream.writeInt(entry.getCount());
-    }
-  }
-
-  /**
-   * Populates a multiset by reading an input stream, as part of
-   * deserialization. See {@link #writeMultiset} for the data format.
-   */
-  @GwtIncompatible("java.io.ObjectInputStream")
-  public static <E> void populateMultiset(
-      Multiset<E> multiset, ObjectInputStream stream)
-      throws IOException, ClassNotFoundException {
-    int distinctElements = stream.readInt();
-    populateMultiset(multiset, stream, distinctElements);
-  }
-
-  /**
-   * Populates a multiset by reading an input stream, as part of
-   * deserialization. See {@link #writeMultiset} for the data format. The number
-   * of distinct elements is determined by a prior call to {@link #readCount}.
-   */
-  @GwtIncompatible("java.io.ObjectInputStream")
-  public static <E> void populateMultiset(
-      Multiset<E> multiset, ObjectInputStream stream, int distinctElements)
-      throws IOException, ClassNotFoundException {
-    for (int i = 0; i < distinctElements; i++) {
-      @SuppressWarnings("unchecked") // reading data stored by writeMultiset
-      E element = (E) stream.readObject();
-      int count = stream.readInt();
-      multiset.add(element, count);
-    }
-  }
-
-  /**
-   * Stores the contents of a multimap in an output stream, as part of
-   * serialization. It does not support concurrent multimaps whose content may
-   * change while the method is running. The {@link Multimap#asMap} view
-   * determines the ordering in which data is written to the stream.
-   *
-   * <p>The serialized output consists of the number of distinct keys, and then
-   * for each distinct key: the key, the number of values for that key, and the
-   * key's values.
-   */
-  @GwtIncompatible("java.io.ObjectOutputStream")
-  public static <K, V> void writeMultimap(
-      Multimap<K, V> multimap, ObjectOutputStream stream) throws IOException {
-    stream.writeInt(multimap.asMap().size());
-    for (Map.Entry<K, Collection<V>> entry : multimap.asMap().entrySet()) {
-      stream.writeObject(entry.getKey());
-      stream.writeInt(entry.getValue().size());
-      for (V value : entry.getValue()) {
-        stream.writeObject(value);
-      }
-    }
-  }
-
-  /**
-   * Populates a multimap by reading an input stream, as part of
-   * deserialization. See {@link #writeMultimap} for the data format.
-   */
-  @GwtIncompatible("java.io.ObjectInputStream")
-  public static <K, V> void populateMultimap(
-      Multimap<K, V> multimap, ObjectInputStream stream)
-      throws IOException, ClassNotFoundException {
-    int distinctKeys = stream.readInt();
-    populateMultimap(multimap, stream, distinctKeys);
-  }
-
-  /**
-   * Populates a multimap by reading an input stream, as part of
-   * deserialization. See {@link #writeMultimap} for the data format. The number
-   * of distinct keys is determined by a prior call to {@link #readCount}.
-   */
-  @GwtIncompatible("java.io.ObjectInputStream")
-  public static <K, V> void populateMultimap(
-      Multimap<K, V> multimap, ObjectInputStream stream, int distinctKeys)
-      throws IOException, ClassNotFoundException {
-    for (int i = 0; i < distinctKeys; i++) {
-      @SuppressWarnings("unchecked") // reading data stored by writeMultimap
-      K key = (K) stream.readObject();
-      Collection<V> values = multimap.get(key);
-      int valueCount = stream.readInt();
-      for (int j = 0; j < valueCount; j++) {
-        @SuppressWarnings("unchecked") // reading data stored by writeMultimap
-        V value = (V) stream.readObject();
-        values.add(value);
-      }
-    }
-  }
-
-  // Secret sauce for setting final fields; don't make it public.
-  @GwtIncompatible("java.lang.reflect.Field")
-  static <T> FieldSetter<T> getFieldSetter(
-      final Class<T> clazz, String fieldName) {
-    try {
-      Field field = clazz.getDeclaredField(fieldName);
-      return new FieldSetter<T>(field);
-    } catch (NoSuchFieldException e) {
-      throw new AssertionError(e); // programmer error
-    }
-  }
-
-  // Secret sauce for setting final fields; don't make it public.
-  @GwtCompatible(emulated = true) // Accessible but not supported in GWT.
-  static final class FieldSetter<T> {
-    private final Field field;
-
-    private FieldSetter(Field field) {
-      this.field = field;
-      field.setAccessible(true);
-    }
-
-    @GwtIncompatible("java.lang.reflect.Field")
-    void set(T instance, Object value) {
-      try {
-        field.set(instance, value);
-      } catch (IllegalAccessException impossible) {
-        throw new AssertionError(impossible);
-      }
-    }
-
-    @GwtIncompatible("java.lang.reflect.Field")
-    void set(T instance, int value) {
-      try {
-        field.set(instance, value);
-      } catch (IllegalAccessException impossible) {
-        throw new AssertionError(impossible);
-      }
-    }
-  }
-}
diff --git a/src/com/google/common/collect/SetMultimap.java b/src/com/google/common/collect/SetMultimap.java
deleted file mode 100644
index 62ac97e..0000000
--- a/src/com/google/common/collect/SetMultimap.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-
-import java.util.Collection;
-import java.util.Map;
-import java.util.Set;
-
-import javax.annotation.Nullable;
-
-/**
- * A {@code Multimap} that cannot hold duplicate key-value pairs. Adding a
- * key-value pair that's already in the multimap has no effect.
- *
- * <p>The {@link #get}, {@link #removeAll}, and {@link #replaceValues} methods
- * each return a {@link Set} of values, while {@link #entries} returns a {@code
- * Set} of map entries. Though the method signature doesn't say so explicitly,
- * the map returned by {@link #asMap} has {@code Set} values.
- *
- * @author Jared Levy
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible
-public interface SetMultimap<K, V> extends Multimap<K, V> {
-  /**
-   * {@inheritDoc}
-   *
-   * <p>Because a {@code SetMultimap} has unique values for a given key, this
-   * method returns a {@link Set}, instead of the {@link java.util.Collection}
-   * specified in the {@link Multimap} interface.
-   */
-  Set<V> get(@Nullable K key);
-
-  /**
-   * {@inheritDoc}
-   *
-   * <p>Because a {@code SetMultimap} has unique values for a given key, this
-   * method returns a {@link Set}, instead of the {@link java.util.Collection}
-   * specified in the {@link Multimap} interface.
-   */
-  Set<V> removeAll(@Nullable Object key);
-
-  /**
-   * {@inheritDoc}
-   *
-   * <p>Because a {@code SetMultimap} has unique values for a given key, this
-   * method returns a {@link Set}, instead of the {@link java.util.Collection}
-   * specified in the {@link Multimap} interface.
-   *
-   * <p>Any duplicates in {@code values} will be stored in the multimap once.
-   */
-  Set<V> replaceValues(K key, Iterable<? extends V> values);
-
-  /**
-   * {@inheritDoc}
-   *
-   * <p>Because a {@code SetMultimap} has unique values for a given key, this
-   * method returns a {@link Set}, instead of the {@link java.util.Collection}
-   * specified in the {@link Multimap} interface.
-   */
-  Set<Map.Entry<K, V>> entries();
-
-  /**
-   * {@inheritDoc}
-   *
-   * <p>Though the method signature doesn't say so explicitly, the returned map
-   * has {@link Set} values.
-   */
-  Map<K, Collection<V>> asMap();
-
-  /**
-   * Compares the specified object to this multimap for equality.
-   *
-   * <p>Two {@code SetMultimap} instances are equal if, for each key, they
-   * contain the same values. Equality does not depend on the ordering of keys
-   * or values.
-   */
-  boolean equals(@Nullable Object obj);
-}
diff --git a/src/com/google/common/collect/Sets.java b/src/com/google/common/collect/Sets.java
deleted file mode 100644
index 686c7c4..0000000
--- a/src/com/google/common/collect/Sets.java
+++ /dev/null
@@ -1,949 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-import com.google.common.base.Predicate;
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2.FilteredCollection;
-import com.google.common.primitives.Ints;
-
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.Serializable;
-import java.util.AbstractSet;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.EnumSet;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.IdentityHashMap;
-import java.util.Iterator;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.NoSuchElementException;
-import java.util.Set;
-import java.util.SortedSet;
-import java.util.TreeMap;
-import java.util.TreeSet;
-
-import javax.annotation.Nullable;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
-
-/**
- * Static utility methods pertaining to {@link Set} instances. Also see this
- * class's counterparts {@link Lists} and {@link Maps}.
- *
- * @author Kevin Bourrillion
- * @author Jared Levy
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible
-public final class Sets {
-  private Sets() {}
-
-  /**
-   * Returns an immutable set instance containing the given enum elements.
-   * Internally, the returned set will be backed by an {@link EnumSet}.
-   *
-   * <p>The iteration order of the returned set follows the enum's iteration
-   * order, not the order in which the elements are provided to the method.
-   *
-   * @param anElement one of the elements the set should contain
-   * @param otherElements the rest of the elements the set should contain
-   * @return an immutable set containing those elements, minus duplicates
-   */
-  // http://code.google.com/p/google-web-toolkit/issues/detail?id=3028
-  @GwtCompatible(serializable = true)
-  public static <E extends Enum<E>> ImmutableSet<E> immutableEnumSet(
-      E anElement, E... otherElements) {
-    return new ImmutableEnumSet<E>(EnumSet.of(anElement, otherElements));
-  }
-
-  /**
-   * Returns an immutable set instance containing the given enum elements.
-   * Internally, the returned set will be backed by an {@link EnumSet}.
-   *
-   * <p>The iteration order of the returned set follows the enum's iteration
-   * order, not the order in which the elements appear in the given collection.
-   *
-   * @param elements the elements, all of the same {@code enum} type, that the
-   *     set should contain
-   * @return an immutable set containing those elements, minus duplicates
-   */
-  // http://code.google.com/p/google-web-toolkit/issues/detail?id=3028
-  @GwtCompatible(serializable = true)
-  public static <E extends Enum<E>> ImmutableSet<E> immutableEnumSet(
-      Iterable<E> elements) {
-    Iterator<E> iterator = elements.iterator();
-    if (!iterator.hasNext()) {
-      return ImmutableSet.of();
-    }
-    if (elements instanceof EnumSet) {
-      EnumSet<E> enumSetClone = EnumSet.copyOf((EnumSet<E>) elements);
-      return new ImmutableEnumSet<E>(enumSetClone);
-    }
-    E first = iterator.next();
-    EnumSet<E> set = EnumSet.of(first);
-    while (iterator.hasNext()) {
-      set.add(iterator.next());
-    }
-    return new ImmutableEnumSet<E>(set);
-  }
-
-  /**
-   * Returns a new {@code EnumSet} instance containing the given elements.
-   * Unlike {@link EnumSet#copyOf(Collection)}, this method does not produce an
-   * exception on an empty collection, and it may be called on any iterable, not
-   * just a {@code Collection}.
-   */
-  public static <E extends Enum<E>> EnumSet<E> newEnumSet(Iterable<E> iterable,
-      Class<E> elementType) {
-    /*
-     * TODO: noneOf() and addAll() will both throw NullPointerExceptions when
-     * appropriate. However, NullPointerTester will fail on this method because
-     * it passes in Class.class instead of an enum type. This means that, when
-     * iterable is null but elementType is not, noneOf() will throw a
-     * ClassCastException before addAll() has a chance to throw a
-     * NullPointerException. NullPointerTester considers this a failure.
-     * Ideally the test would be fixed, but it would require a special case for
-     * Class<E> where E extends Enum. Until that happens (if ever), leave
-     * checkNotNull() here. For now, contemplate the irony that checking
-     * elementType, the problem argument, is harmful, while checking iterable,
-     * the innocent bystander, is effective.
-     */
-    checkNotNull(iterable);
-    EnumSet<E> set = EnumSet.noneOf(elementType);
-    Iterables.addAll(set, iterable);
-    return set;
-  }
-
-  // HashSet
-
-  /**
-   * Creates a <i>mutable</i>, empty {@code HashSet} instance.
-   *
-   * <p><b>Note:</b> if mutability is not required, use {@link
-   * ImmutableSet#of()} instead.
-   *
-   * <p><b>Note:</b> if {@code E} is an {@link Enum} type, use {@link
-   * EnumSet#noneOf} instead.
-   *
-   * @return a new, empty {@code HashSet}
-   */
-  public static <E> HashSet<E> newHashSet() {
-    return new HashSet<E>();
-  }
-
-  /**
-   * Creates a <i>mutable</i> {@code HashSet} instance containing the given
-   * elements in unspecified order.
-   *
-   * <p><b>Note:</b> if mutability is not required and the elements are
-   * non-null, use {@link ImmutableSet#of(Object[])} instead.
-   *
-   * <p><b>Note:</b> if {@code E} is an {@link Enum} type, use {@link
-   * EnumSet#of(Enum, Enum[])} instead.
-   *
-   * @param elements the elements that the set should contain
-   * @return a new {@code HashSet} containing those elements (minus duplicates)
-   */
-  public static <E> HashSet<E> newHashSet(E... elements) {
-    int capacity = Maps.capacity(elements.length);
-    HashSet<E> set = new HashSet<E>(capacity);
-    Collections.addAll(set, elements);
-    return set;
-  }
-
-  /**
-   * Creates an empty {@code HashSet} instance with enough capacity to hold the
-   * specified number of elements without rehashing.
-   *
-   * @param expectedSize the expected size
-   * @return a new, empty {@code HashSet} with enough capacity to hold {@code
-   *     expectedSize} elements without rehashing
-   * @throws IllegalArgumentException if {@code expectedSize} is negative
-   */
-  public static <E> HashSet<E> newHashSetWithExpectedSize(int expectedSize) {
-    return new HashSet<E>(Maps.capacity(expectedSize));
-  }
-
-  /**
-   * Creates a <i>mutable</i> {@code HashSet} instance containing the given
-   * elements in unspecified order.
-   *
-   * <p><b>Note:</b> if mutability is not required and the elements are
-   * non-null, use {@link ImmutableSet#copyOf(Iterable)} instead.
-   *
-   * <p><b>Note:</b> if {@code E} is an {@link Enum} type, use
-   * {@link #newEnumSet(Iterable, Class)} instead.
-   *
-   * @param elements the elements that the set should contain
-   * @return a new {@code HashSet} containing those elements (minus duplicates)
-   */
-  public static <E> HashSet<E> newHashSet(Iterable<? extends E> elements) {
-    if (elements instanceof Collection) {
-      @SuppressWarnings("unchecked")
-      Collection<? extends E> collection = (Collection<? extends E>) elements;
-      return new HashSet<E>(collection);
-    } else {
-      return newHashSet(elements.iterator());
-    }
-  }
-
-  /**
-   * Creates a <i>mutable</i> {@code HashSet} instance containing the given
-   * elements in unspecified order.
-   *
-   * <p><b>Note:</b> if mutability is not required and the elements are
-   * non-null, use {@link ImmutableSet#copyOf(Iterable)} instead.
-   *
-   * <p><b>Note:</b> if {@code E} is an {@link Enum} type, you should create an
-   * {@link EnumSet} instead.
-   *
-   * @param elements the elements that the set should contain
-   * @return a new {@code HashSet} containing those elements (minus duplicates)
-   */
-  public static <E> HashSet<E> newHashSet(Iterator<? extends E> elements) {
-    HashSet<E> set = newHashSet();
-    while (elements.hasNext()) {
-      set.add(elements.next());
-    }
-    return set;
-  }
-
-  // LinkedHashSet
-
-  /**
-   * Creates a <i>mutable</i>, empty {@code LinkedHashSet} instance.
-   *
-   * <p><b>Note:</b> if mutability is not required, use {@link
-   * ImmutableSet#of()} instead.
-   *
-   * @return a new, empty {@code LinkedHashSet}
-   */
-  public static <E> LinkedHashSet<E> newLinkedHashSet() {
-    return new LinkedHashSet<E>();
-  }
-
-  /**
-   * Creates a <i>mutable</i> {@code LinkedHashSet} instance containing the
-   * given elements in order.
-   *
-   * <p><b>Note:</b> if mutability is not required and the elements are
-   * non-null, use {@link ImmutableSet#copyOf(Iterable)} instead.
-   *
-   * @param elements the elements that the set should contain, in order
-   * @return a new {@code LinkedHashSet} containing those elements (minus
-   *     duplicates)
-   */
-  public static <E> LinkedHashSet<E> newLinkedHashSet(
-      Iterable<? extends E> elements) {
-    if (elements instanceof Collection) {
-      @SuppressWarnings("unchecked")
-      Collection<? extends E> collection = (Collection<? extends E>) elements;
-      return new LinkedHashSet<E>(collection);
-    } else {
-      LinkedHashSet<E> set = newLinkedHashSet();
-      for (E element : elements) {
-        set.add(element);
-      }
-      return set;
-    }
-  }
-
-  // TreeSet
-
-  /**
-   * Creates a <i>mutable</i>, empty {@code TreeSet} instance sorted by the
-   * natural sort ordering of its elements.
-   *
-   * <p><b>Note:</b> if mutability is not required, use {@link
-   * ImmutableSortedSet#of()} instead.
-   *
-   * @return a new, empty {@code TreeSet}
-   */
-  @SuppressWarnings("unchecked")  // allow ungenerified Comparable types
-  public static <E extends Comparable> TreeSet<E> newTreeSet() {
-    return new TreeSet<E>();
-  }
-
-  /**
-   * Creates a <i>mutable</i> {@code TreeSet} instance containing the given
-   * elements sorted by their natural ordering.
-   *
-   * <p><b>Note:</b> if mutability is not required, use {@link
-   * ImmutableSortedSet#copyOf(Iterable)} instead.
-   *
-   * <p><b>Note:</b> If {@code elements} is a {@code SortedSet} with an explicit
-   * comparator, this method has different behavior than
-   * {@link TreeSet#TreeSet(SortedSet)}, which returns a {@code TreeSet} with
-   * that comparator.
-   *
-   * @param elements the elements that the set should contain
-   * @return a new {@code TreeSet} containing those elements (minus duplicates)
-   */
-  @SuppressWarnings("unchecked")  // allow ungenerified Comparable types
-  public static <E extends Comparable> TreeSet<E> newTreeSet(
-      Iterable<? extends E> elements) {
-    TreeSet<E> set = newTreeSet();
-    for (E element : elements) {
-      set.add(element);
-    }
-    return set;
-  }
-
-  /**
-   * Creates a <i>mutable</i>, empty {@code TreeSet} instance with the given
-   * comparator.
-   *
-   * <p><b>Note:</b> if mutability is not required, use {@code
-   * ImmutableSortedSet.orderedBy(comparator).build()} instead.
-   *
-   * @param comparator the comparator to use to sort the set
-   * @return a new, empty {@code TreeSet}
-   * @throws NullPointerException if {@code comparator} is null
-   */
-  public static <E> TreeSet<E> newTreeSet(Comparator<? super E> comparator) {
-    return new TreeSet<E>(checkNotNull(comparator));
-  }
-
-  /**
-   * Creates an {@code EnumSet} consisting of all enum values that are not in
-   * the specified collection. If the collection is an {@link EnumSet}, this
-   * method has the same behavior as {@link EnumSet#complementOf}. Otherwise,
-   * the specified collection must contain at least one element, in order to
-   * determine the element type. If the collection could be empty, use
-   * {@link #complementOf(Collection, Class)} instead of this method.
-   *
-   * @param collection the collection whose complement should be stored in the
-   *     enum set
-   * @return a new, modifiable {@code EnumSet} containing all values of the enum
-   *     that aren't present in the given collection
-   * @throws IllegalArgumentException if {@code collection} is not an
-   *     {@code EnumSet} instance and contains no elements
-   */
-  public static <E extends Enum<E>> EnumSet<E> complementOf(
-      Collection<E> collection) {
-    if (collection instanceof EnumSet) {
-      return EnumSet.complementOf((EnumSet<E>) collection);
-    }
-    checkArgument(!collection.isEmpty(),
-        "collection is empty; use the other version of this method");
-    Class<E> type = collection.iterator().next().getDeclaringClass();
-    return makeComplementByHand(collection, type);
-  }
-
-  /**
-   * Creates an {@code EnumSet} consisting of all enum values that are not in
-   * the specified collection. This is equivalent to
-   * {@link EnumSet#complementOf}, but can act on any input collection, as long
-   * as the elements are of enum type.
-   *
-   * @param collection the collection whose complement should be stored in the
-   *     {@code EnumSet}
-   * @param type the type of the elements in the set
-   * @return a new, modifiable {@code EnumSet} initially containing all the
-   *     values of the enum not present in the given collection
-   */
-  public static <E extends Enum<E>> EnumSet<E> complementOf(
-      Collection<E> collection, Class<E> type) {
-    checkNotNull(collection);
-    return (collection instanceof EnumSet)
-        ? EnumSet.complementOf((EnumSet<E>) collection)
-        : makeComplementByHand(collection, type);
-  }
-
-  private static <E extends Enum<E>> EnumSet<E> makeComplementByHand(
-      Collection<E> collection, Class<E> type) {
-    EnumSet<E> result = EnumSet.allOf(type);
-    result.removeAll(collection);
-    return result;
-  }
-
-  /*
-   * Regarding newSetForMap() and SetFromMap:
-   *
-   * Written by Doug Lea with assistance from members of JCP JSR-166
-   * Expert Group and released to the public domain, as explained at
-   * http://creativecommons.org/licenses/publicdomain
-   */
-
-  /**
-   * Returns a set backed by the specified map. The resulting set displays
-   * the same ordering, concurrency, and performance characteristics as the
-   * backing map. In essence, this factory method provides a {@link Set}
-   * implementation corresponding to any {@link Map} implementation. There is no
-   * need to use this method on a {@link Map} implementation that already has a
-   * corresponding {@link Set} implementation (such as {@link HashMap} or
-   * {@link TreeMap}).
-   *
-   * <p>Each method invocation on the set returned by this method results in
-   * exactly one method invocation on the backing map or its <tt>keySet</tt>
-   * view, with one exception. The <tt>addAll</tt> method is implemented as a
-   * sequence of <tt>put</tt> invocations on the backing map.
-   *
-   * <p>The specified map must be empty at the time this method is invoked,
-   * and should not be accessed directly after this method returns. These
-   * conditions are ensured if the map is created empty, passed directly
-   * to this method, and no reference to the map is retained, as illustrated
-   * in the following code fragment: <pre>  {@code
-   *
-   *  Set<Object> identityHashSet = Sets.newSetFromMap(
-   *      new IdentityHashMap<Object, Boolean>());}</pre>
-   *
-   * This method has the same behavior as the JDK 6 method
-   * {@code Collections.newSetFromMap()}. The returned set is serializable if
-   * the backing map is.
-   *
-   * @param map the backing map
-   * @return the set backed by the map
-   * @throws IllegalArgumentException if <tt>map</tt> is not empty
-   */
-  public static <E> Set<E> newSetFromMap(Map<E, Boolean> map) {
-    return new SetFromMap<E>(map);
-  }
-
-  private static class SetFromMap<E> extends AbstractSet<E>
-      implements Set<E>, Serializable {
-    private final Map<E, Boolean> m; // The backing map
-    private transient Set<E> s; // Its keySet
-
-    SetFromMap(Map<E, Boolean> map) {
-      checkArgument(map.isEmpty(), "Map is non-empty");
-      m = map;
-      s = map.keySet();
-    }
-
-    @Override public void clear() {
-      m.clear();
-    }
-    @Override public int size() {
-      return m.size();
-    }
-    @Override public boolean isEmpty() {
-      return m.isEmpty();
-    }
-    @Override public boolean contains(Object o) {
-      return m.containsKey(o);
-    }
-    @Override public boolean remove(Object o) {
-      return m.remove(o) != null;
-    }
-    @Override public boolean add(E e) {
-      return m.put(e, Boolean.TRUE) == null;
-    }
-    @Override public Iterator<E> iterator() {
-      return s.iterator();
-    }
-    @Override public Object[] toArray() {
-      return s.toArray();
-    }
-    @Override public <T> T[] toArray(T[] a) {
-      return s.toArray(a);
-    }
-    @Override public String toString() {
-      return s.toString();
-    }
-    @Override public int hashCode() {
-      return s.hashCode();
-    }
-    @Override public boolean equals(@Nullable Object object) {
-      return this == object || this.s.equals(object);
-    }
-    @Override public boolean containsAll(Collection<?> c) {
-      return s.containsAll(c);
-    }
-    @Override public boolean removeAll(Collection<?> c) {
-      return s.removeAll(c);
-    }
-    @Override public boolean retainAll(Collection<?> c) {
-      return s.retainAll(c);
-    }
-
-    // addAll is the only inherited implementation
-
-    private static final long serialVersionUID = 0;
-
-    private void readObject(ObjectInputStream stream)
-        throws IOException, ClassNotFoundException {
-      stream.defaultReadObject();
-      s = m.keySet();
-    }
-  }
-
-  /**
-   * An unmodifiable view of a set which may be backed by other sets; this view
-   * will change as the backing sets do. Contains methods to copy the data into
-   * a new set which will then remain stable. There is usually no reason to
-   * retain a reference of type {@code SetView}; typically, you either use it
-   * as a plain {@link Set}, or immediately invoke {@link #immutableCopy} or
-   * {@link #copyInto} and forget the {@code SetView} itself.
-   */
-  public abstract static class SetView<E> extends AbstractSet<E> {
-    private SetView() {} // no subclasses but our own
-
-    /**
-     * Returns an immutable copy of the current contents of this set view.
-     * Does not support null elements.
-     *
-     * <p><b>Warning:</b> this may have unexpected results if a backing set of
-     * this view uses a nonstandard notion of equivalence, for example if it is
-     * a {@link TreeSet} using a comparator that is inconsistent with {@link
-     * Object#equals(Object)}.
-     */
-    public ImmutableSet<E> immutableCopy() {
-      return ImmutableSet.copyOf(this);
-    }
-
-    /**
-     * Copies the current contents of this set view into an existing set. This
-     * method has equivalent behavior to {@code set.addAll(this)}, assuming that
-     * all the sets involved are based on the same notion of equivalence.
-     *
-     * @return a reference to {@code set}, for convenience
-     */
-    // Note: S should logically extend Set<? super E> but can't due to either
-    // some javac bug or some weirdness in the spec, not sure which.
-    public <S extends Set<E>> S copyInto(S set) {
-      set.addAll(this);
-      return set;
-    }
-  }
-
-  /**
-   * Returns an unmodifiable <b>view</b> of the union of two sets. The returned
-   * set contains all elements that are contained in either backing set.
-   * Iterating over the returned set iterates first over all the elements of
-   * {@code set1}, then over each element of {@code set2}, in order, that is not
-   * contained in {@code set1}.
-   *
-   * <p>Results are undefined if {@code set1} and {@code set2} are sets based on
-   * different equivalence relations (as {@link HashSet}, {@link TreeSet}, and
-   * the {@link Map#keySet} of an {@link IdentityHashMap} all are).
-   *
-   * <p><b>Note:</b> The returned view performs better when {@code set1} is the
-   * smaller of the two sets. If you have reason to believe one of your sets
-   * will generally be smaller than the other, pass it first.
-   */
-  public static <E> SetView<E> union(
-      final Set<? extends E> set1, final Set<? extends E> set2) {
-    checkNotNull(set1, "set1");
-    checkNotNull(set2, "set2");
-
-    // TODO: once we have OrderedIterators, check if these are compatible
-    // sorted sets and use that instead if so
-
-    final Set<? extends E> set2minus1 = difference(set2, set1);
-
-    return new SetView<E>() {
-      @Override public int size() {
-        return set1.size() + set2minus1.size();
-      }
-      @Override public boolean isEmpty() {
-        return set1.isEmpty() && set2.isEmpty();
-      }
-      @Override public Iterator<E> iterator() {
-        return Iterators.unmodifiableIterator(
-            Iterators.concat(set1.iterator(), set2minus1.iterator()));
-      }
-      @Override public boolean contains(Object object) {
-        return set1.contains(object) || set2.contains(object);
-      }
-      @Override public <S extends Set<E>> S copyInto(S set) {
-        set.addAll(set1);
-        set.addAll(set2);
-        return set;
-      }
-      @Override public ImmutableSet<E> immutableCopy() {
-        return new ImmutableSet.Builder<E>()
-            .addAll(set1).addAll(set2).build();
-      }
-    };
-  }
-
-  /**
-   * Returns an unmodifiable <b>view</b> of the intersection of two sets. The
-   * returned set contains all elements that are contained by both backing sets.
-   * The iteration order of the returned set matches that of {@code set1}.
-   *
-   * <p>Results are undefined if {@code set1} and {@code set2} are sets based
-   * on different equivalence relations (as {@code HashSet}, {@code TreeSet},
-   * and the keySet of an {@code IdentityHashMap} all are).
-   *
-   * <p><b>Note:</b> The returned view performs slightly better when {@code
-   * set1} is the smaller of the two sets. If you have reason to believe one of
-   * your sets will generally be smaller than the other, pass it first.
-   * Unfortunately, since this method sets the generic type of the returned set
-   * based on the type of the first set passed, this could in rare cases force
-   * you to make a cast, for example: <pre>  {@code
-   *
-   *  Set<Object> aFewBadObjects = ...
-   *  Set<String> manyBadStrings = ...
-   *
-   *  // impossible for a non-String to be in the intersection
-   *  SuppressWarnings("unchecked")
-   *  Set<String> badStrings = (Set) Sets.intersection(
-   *      aFewBadObjects, manyBadStrings);}</pre>
-   *
-   * This is unfortunate, but should come up only very rarely.
-   */
-  public static <E> SetView<E> intersection(
-      final Set<E> set1, final Set<?> set2) {
-    checkNotNull(set1, "set1");
-    checkNotNull(set2, "set2");
-
-    // TODO: once we have OrderedIterators, check if these are compatible
-    // sorted sets and use that instead if so
-
-    final Predicate<Object> inSet2 = Predicates.in(set2);
-    return new SetView<E>() {
-      @Override public Iterator<E> iterator() {
-        return Iterators.filter(set1.iterator(), inSet2);
-      }
-      @Override public int size() {
-        return Iterators.size(iterator());
-      }
-      @Override public boolean isEmpty() {
-        return !iterator().hasNext();
-      }
-      @Override public boolean contains(Object object) {
-        return set1.contains(object) && set2.contains(object);
-      }
-      @Override public boolean containsAll(Collection<?> collection) {
-        return set1.containsAll(collection)
-            && set2.containsAll(collection);
-      }
-    };
-  }
-
-  /**
-   * Returns an unmodifiable <b>view</b> of the difference of two sets. The
-   * returned set contains all elements that are contained by {@code set1} and
-   * not contained by {@code set2}. {@code set2} may also contain elements not
-   * present in {@code set1}; these are simply ignored. The iteration order of
-   * the returned set matches that of {@code set1}.
-   *
-   * <p>Results are undefined if {@code set1} and {@code set2} are sets based
-   * on different equivalence relations (as {@code HashSet}, {@code TreeSet},
-   * and the keySet of an {@code IdentityHashMap} all are).
-   */
-  public static <E> SetView<E> difference(
-      final Set<E> set1, final Set<?> set2) {
-    checkNotNull(set1, "set1");
-    checkNotNull(set2, "set2");
-
-    // TODO: once we have OrderedIterators, check if these are compatible
-    // sorted sets and use that instead if so
-
-    final Predicate<Object> notInSet2 = Predicates.not(Predicates.in(set2));
-    return new SetView<E>() {
-      @Override public Iterator<E> iterator() {
-        return Iterators.filter(set1.iterator(), notInSet2);
-      }
-      @Override public int size() {
-        return Iterators.size(iterator());
-      }
-      @Override public boolean isEmpty() {
-        return set2.containsAll(set1);
-      }
-      @Override public boolean contains(Object element) {
-        return set1.contains(element) && !set2.contains(element);
-      }
-    };
-  }
-
-  /**
-   * Returns the elements of {@code unfiltered} that satisfy a predicate. The
-   * returned set is a live view of {@code unfiltered}; changes to one affect
-   * the other.
-   *
-   * <p>The resulting set's iterator does not support {@code remove()}, but all
-   * other set methods are supported. The set's {@code add()} and
-   * {@code addAll()} methods throw an {@link IllegalArgumentException} if an
-   * element that doesn't satisfy the predicate is provided. When methods such
-   * as {@code removeAll()} and {@code clear()} are called on the filtered set,
-   * only elements that satisfy the filter will be removed from the underlying
-   * collection.
-   *
-   * <p>The returned set isn't threadsafe or serializable, even if
-   * {@code unfiltered} is.
-   *
-   * <p>Many of the filtered set's methods, such as {@code size()}, iterate
-   * across every element in the underlying set and determine which elements
-   * satisfy the filter. When a live view is <i>not</i> needed, it may be faster
-   * to copy {@code Iterables.filter(unfiltered, predicate)} and use the copy.
-   */
-  public static <E> Set<E> filter(
-      Set<E> unfiltered, Predicate<? super E> predicate) {
-    if (unfiltered instanceof FilteredSet) {
-      // Support clear(), removeAll(), and retainAll() when filtering a filtered
-      // collection.
-      FilteredSet<E> filtered = (FilteredSet<E>) unfiltered;
-      Predicate<E> combinedPredicate
-          = Predicates.<E>and(filtered.predicate, predicate);
-      return new FilteredSet<E>(
-          (Set<E>) filtered.unfiltered, combinedPredicate);
-    }
-
-    return new FilteredSet<E>(
-        checkNotNull(unfiltered), checkNotNull(predicate));
-  }
-
-  private static class FilteredSet<E> extends FilteredCollection<E>
-      implements Set<E> {
-    FilteredSet(Set<E> unfiltered, Predicate<? super E> predicate) {
-      super(unfiltered, predicate);
-    }
-
-    @Override public boolean equals(@Nullable Object object) {
-      return Collections2.setEquals(this, object);
-    }
-
-    @Override public int hashCode() {
-      return hashCodeImpl(this);
-    }
-  }
-
-  /**
-   * Returns every possible list that can be formed by choosing one element
-   * from each of the given sets in order; the "n-ary
-   * <a href="http://en.wikipedia.org/wiki/Cartesian_product">Cartesian
-   * product</a>" of the sets. For example: <pre class="code">   {@code
-   *
-   *   cartesianProduct(ImmutableList.of(
-   *       ImmutableSet.of(1, 2),
-   *       ImmutableSet.of("A", "B", "C")))}</pre>
-   *
-   * returns a set containing six lists:
-   *
-   * <ul>
-   * <li>{@code ImmutableList.of(1, "A")}
-   * <li>{@code ImmutableList.of(1, "B")}
-   * <li>{@code ImmutableList.of(1, "C")}
-   * <li>{@code ImmutableList.of(2, "A")}
-   * <li>{@code ImmutableList.of(2, "B")}
-   * <li>{@code ImmutableList.of(2, "C")}
-   * </ul>
-   *
-   * The order in which these lists are returned is not guaranteed, however the
-   * position of an element inside a tuple always corresponds to the position of
-   * the set from which it came in the input list. Note that if any input set is
-   * empty, the Cartesian product will also be empty. If no sets at all are
-   * provided (an empty list), the resulting Cartesian product has one element,
-   * an empty list (counter-intuitive, but mathematically consistent).
-   *
-   * @param sets the sets to choose elements from, in the order that
-   *     the elements chosen from those sets should appear in the resulting
-   *     lists
-   * @param <B> any common base class shared by all axes (often just {@link
-   *     Object})
-   * @return the Cartesian product, as an immutable set containing immutable
-   *     lists
-   * @throws NullPointerException if {@code sets}, any one of the {@code sets},
-   *     or any element of a provided set is null
-   * @since 2010.01.04 <b>tentative</b>
-   */
-  public static <B> Set<List<B>> cartesianProduct(
-      List<? extends Set<? extends B>> sets) {
-    CartesianSet<B> cartesianSet = new CartesianSet<B>(sets);
-    return cartesianSet.isEmpty() ? ImmutableSet.<List<B>>of() : cartesianSet;
-  }
-
-  /**
-   * Returns every possible list that can be formed by choosing one element
-   * from each of the given sets in order; the "n-ary
-   * <a href="http://en.wikipedia.org/wiki/Cartesian_product">Cartesian
-   * product</a>" of the sets. For example: <pre class="code">   {@code
-   *
-   *   cartesianProduct(
-   *       ImmutableSet.of(1, 2),
-   *       ImmutableSet.of("A", "B", "C"))}</pre>
-   *
-   * returns a set containing six lists:
-   w
-   * <ul>
-   * <li>{@code ImmutableList.of(1, "A")}
-   * <li>{@code ImmutableList.of(1, "B")}
-   * <li>{@code ImmutableList.of(1, "C")}
-   * <li>{@code ImmutableList.of(2, "A")}
-   * <li>{@code ImmutableList.of(2, "B")}
-   * <li>{@code ImmutableList.of(2, "C")}
-   * </ul>
-   *
-   * The order in which these lists are returned is not guaranteed, however the
-   * position of an element inside a tuple always corresponds to the position of
-   * the set from which it came in the input list. Note that if any input set is
-   * empty, the Cartesian product will also be empty. If no sets at all are
-   * provided, the resulting Cartesian product has one element, an empty list
-   * (counter-intuitive, but mathematically consistent).
-   *
-   * @param sets the sets to choose elements from, in the order that
-   *     the elements chosen from those sets should appear in the resulting
-   *     lists
-   * @param <B> any common base class shared by all axes (often just {@link
-   *     Object})
-   * @return the Cartesian product, as an immutable set containing immutable
-   *     lists
-   * @throws NullPointerException if {@code sets}, any one of the {@code sets},
-   *     or any element of a provided set is null
-   * @since 2010.01.04 <b>tentative</b>
-   */
-  public static <B> Set<List<B>> cartesianProduct(
-      Set<? extends B>... sets) {
-    return cartesianProduct(Arrays.asList(sets));
-  }
-
-  private static class CartesianSet<B> extends AbstractSet<List<B>> {
-    final ImmutableList<Axis> axes;
-    final int size;
-
-    CartesianSet(List<? extends Set<? extends B>> sets) {
-      long dividend = 1;
-      ImmutableList.Builder<Axis> builder = ImmutableList.builder();
-      for (Set<? extends B> set : sets) {
-        Axis axis = new Axis(set, (int) dividend); // check overflow at end
-        builder.add(axis);
-        dividend *= axis.size();
-      }
-      this.axes = builder.build();
-      size = Ints.checkedCast(dividend);
-    }
-
-    @Override public int size() {
-      return size;
-    }
-
-    @Override public UnmodifiableIterator<List<B>> iterator() {
-      return new UnmodifiableIterator<List<B>>() {
-        int index;
-
-        public boolean hasNext() {
-          return index < size;
-        }
-
-        public List<B> next() {
-          if (!hasNext()) {
-            throw new NoSuchElementException();
-          }
-
-          Object[] tuple = new Object[axes.size()];
-          for (int i = 0 ; i < tuple.length; i++) {
-            tuple[i] = axes.get(i).getForIndex(index);
-          }
-          index++;
-
-          @SuppressWarnings("unchecked") // only B's are put in here
-          List<B> result = (ImmutableList<B>) ImmutableList.of(tuple);
-          return result;
-        }
-      };
-    }
-
-    @Override public boolean contains(Object element) {
-      if (!(element instanceof List<?>)) {
-        return false;
-      }
-      List<?> tuple = (List<?>) element;
-      int dimensions = axes.size();
-      if (tuple.size() != dimensions) {
-        return false;
-      }
-      for (int i = 0; i < dimensions; i++) {
-        if (!axes.get(i).contains(tuple.get(i))) {
-          return false;
-        }
-      }
-      return true;
-    }
-
-    @Override public boolean equals(@Nullable Object object) {
-      // Warning: this is broken if size() == 0, so it is critical that we
-      // substitute an empty ImmutableSet to the user in place of this
-      if (object instanceof CartesianSet<?>) {
-        CartesianSet<?> that = (CartesianSet) object;
-        return this.axes.equals(that.axes);
-      }
-      return super.equals(object);
-    }
-
-    @Override public int hashCode() {
-      // Warning: this is broken if size() == 0, so it is critical that we
-      // substitute an empty ImmutableSet to the user in place of this
-
-      // It's a weird formula, but tests prove it works.
-      int adjust = size - 1;
-      for (int i = 0; i < axes.size(); i++) {
-        adjust *= 31;
-      }
-      return axes.hashCode() + adjust;
-    }
-
-    private class Axis {
-      final ImmutableSet<? extends B> choices;
-      final int dividend;
-
-      Axis(Set<? extends B> set, int dividend) {
-        choices = ImmutableSet.copyOf(set);
-        this.dividend = dividend;
-      }
-
-      int size() {
-        return choices.size();
-      }
-
-      B getForIndex(int index) {
-        return choices.asList().get(index / dividend % size());
-      }
-
-      boolean contains(Object target) {
-        return choices.contains(target);
-      }
-
-      @Override public boolean equals(Object obj) {
-        if (obj instanceof CartesianSet.Axis) {
-          CartesianSet.Axis that = (CartesianSet.Axis) obj;
-          return this.choices.equals(that.choices);
-          // dividends must be equal or we wouldn't have gotten this far
-        }
-        return false;
-      }
-
-      @Override public int hashCode() {
-        // an opportunistic formula chosen because it happens to make
-        // CartesianSet.hashCode() work!
-        return size / choices.size() * choices.hashCode();
-      }
-    }
-  }
-
-  /**
-   * Calculates and returns the hash code of {@code s}.
-   */
-  static int hashCodeImpl(Set<?> s) {
-    int hashCode = 0;
-    for (Object o : s) {
-      hashCode += o != null ? o.hashCode() : 0;
-    }
-    return hashCode;
-  }
-}
diff --git a/src/com/google/common/collect/SingletonImmutableList.java b/src/com/google/common/collect/SingletonImmutableList.java
deleted file mode 100644
index a9eefcf..0000000
--- a/src/com/google/common/collect/SingletonImmutableList.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Copyright (C) 2009 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-import com.google.common.base.Preconditions;
-
-import java.util.Collections;
-import java.util.List;
-import java.util.ListIterator;
-
-import javax.annotation.Nullable;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-/**
- * Implementation of {@link ImmutableList} with exactly one element.
- *
- * @author Hayward Chan
- */
-@GwtCompatible(serializable = true)
-@SuppressWarnings("serial") // uses writeReplace(), not default serialization
-final class SingletonImmutableList<E> extends ImmutableList<E> {
-  final transient E element;
-
-  SingletonImmutableList(E element) {
-    this.element = checkNotNull(element);
-  }
-
-  public E get(int index) {
-    Preconditions.checkElementIndex(index, 1);
-    return element;
-  }
-
-  @Override public int indexOf(@Nullable Object object) {
-    return element.equals(object) ? 0 : -1;
-  }
-
-  @Override public UnmodifiableIterator<E> iterator() {
-    return Iterators.singletonIterator(element);
-  }
-
-  @Override public int lastIndexOf(@Nullable Object object) {
-    return element.equals(object) ? 0 : -1;
-  }
-
-  public ListIterator<E> listIterator() {
-    return listIterator(0);
-  }
-
-  public ListIterator<E> listIterator(final int start) {
-    // suboptimal but not worth optimizing.
-    return Collections.singletonList(element).listIterator(start);
-  }
-
-  public int size() {
-    return 1;
-  }
-
-  @Override public ImmutableList<E> subList(int fromIndex, int toIndex) {
-    Preconditions.checkPositionIndexes(fromIndex, toIndex, 1);
-    return (fromIndex == toIndex) ? ImmutableList.<E>of() : this;
-  }
-
-  @Override public boolean contains(@Nullable Object object) {
-    return element.equals(object);
-  }
-
-  @Override public boolean equals(Object object) {
-    if (object == this) {
-      return true;
-    }
-    if (object instanceof List) {
-      List<?> that = (List<?>) object;
-      return that.size() == 1 && element.equals(that.get(0));
-    }
-    return false;
-  }
-
-  @Override public int hashCode() {
-    // not caching hash code since it could change if the element is mutable
-    // in a way that modifies its hash code.
-    return 31 + element.hashCode();
-  }
-
-  @Override public boolean isEmpty() {
-    return false;
-  }
-
-  @Override public Object[] toArray() {
-    return new Object[] { element };
-  }
-
-  @Override public <T> T[] toArray(T[] array) {
-    if (array.length == 0) {
-      array = ObjectArrays.newArray(array, 1);
-    } else if (array.length > 1) {
-      array[1] = null;
-    }
-    // Writes will produce ArrayStoreException when the toArray() doc requires.
-    Object[] objectArray = array;
-    objectArray[0] = element;
-    return array;
-  }
-}
diff --git a/src/com/google/common/collect/SingletonImmutableMap.java b/src/com/google/common/collect/SingletonImmutableMap.java
deleted file mode 100644
index 6a33d6e..0000000
--- a/src/com/google/common/collect/SingletonImmutableMap.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-
-import java.util.Map;
-
-import javax.annotation.Nullable;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-/**
- * Implementation of {@link ImmutableMap} with exactly one entry.
- *
- * @author Jesse Wilson
- * @author Kevin Bourrillion
- */
-@GwtCompatible(serializable = true)
-@SuppressWarnings("serial") // uses writeReplace(), not default serialization
-final class SingletonImmutableMap<K, V> extends ImmutableMap<K, V> {
-  final transient K singleKey;
-  final transient V singleValue;
-
-  private transient Entry<K, V> entry;
-
-  SingletonImmutableMap(K singleKey, V singleValue) {
-    this.singleKey = singleKey;
-    this.singleValue = singleValue;
-  }
-
-  SingletonImmutableMap(Entry<K, V> entry) {
-    this.entry = checkNotNull(entry);  // checkNotNull for GWT.
-    this.singleKey = checkNotNull(entry.getKey());  // checkNotNull for GWT.
-    this.singleValue = checkNotNull(entry.getValue()); // checkNotNull for GWT.
-  }
-
-  private Entry<K, V> entry() {
-    Entry<K, V> e = entry;
-    return (e == null)
-        ? (entry = Maps.immutableEntry(singleKey, singleValue)) : e;
-  }
-
-  @Override public V get(Object key) {
-    return singleKey.equals(key) ? singleValue : null;
-  }
-
-  public int size() {
-    return 1;
-  }
-
-  @Override public boolean isEmpty() {
-    return false;
-  }
-
-  @Override public boolean containsKey(Object key) {
-    return singleKey.equals(key);
-  }
-
-  @Override public boolean containsValue(Object value) {
-    return singleValue.equals(value);
-  }
-
-  private transient ImmutableSet<Entry<K, V>> entrySet;
-
-  @Override public ImmutableSet<Entry<K, V>> entrySet() {
-    ImmutableSet<Entry<K, V>> es = entrySet;
-    return (es == null) ? (entrySet = ImmutableSet.of(entry())) : es;
-  }
-
-  private transient ImmutableSet<K> keySet;
-
-  @Override public ImmutableSet<K> keySet() {
-    ImmutableSet<K> ks = keySet;
-    return (ks == null) ? (keySet = ImmutableSet.of(singleKey)) : ks;
-  }
-
-  private transient ImmutableCollection<V> values;
-
-  @Override public ImmutableCollection<V> values() {
-    ImmutableCollection<V> v = values;
-    return (v == null) ? (values = new Values<V>(singleValue)) : v;
-  }
-
-  @SuppressWarnings("serial") // uses writeReplace(), not default serialization
-  private static class Values<V> extends ImmutableCollection<V> {
-    final V singleValue;
-
-    Values(V singleValue) {
-      this.singleValue = singleValue;
-    }
-
-    @Override public boolean contains(Object object) {
-      return singleValue.equals(object);
-    }
-
-    @Override public boolean isEmpty() {
-      return false;
-    }
-
-    public int size() {
-      return 1;
-    }
-
-    @Override public UnmodifiableIterator<V> iterator() {
-      return Iterators.singletonIterator(singleValue);
-    }
-  }
-
-  @Override public boolean equals(@Nullable Object object) {
-    if (object == this) {
-      return true;
-    }
-    if (object instanceof Map) {
-      Map<?, ?> that = (Map<?, ?>) object;
-      if (that.size() != 1) {
-        return false;
-      }
-      Entry<?, ?> entry = that.entrySet().iterator().next();
-      return singleKey.equals(entry.getKey())
-          && singleValue.equals(entry.getValue());
-    }
-    return false;
-  }
-
-  @Override public int hashCode() {
-    return singleKey.hashCode() ^ singleValue.hashCode();
-  }
-
-  @Override public String toString() {
-    return new StringBuilder()
-        .append('{')
-        .append(singleKey.toString())
-        .append('=')
-        .append(singleValue.toString())
-        .append('}')
-        .toString();
-  }
-}
diff --git a/src/com/google/common/collect/SingletonImmutableSet.java b/src/com/google/common/collect/SingletonImmutableSet.java
deleted file mode 100644
index 952f52c..0000000
--- a/src/com/google/common/collect/SingletonImmutableSet.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-import com.google.common.base.Preconditions;
-
-import java.util.Set;
-
-import javax.annotation.Nullable;
-
-/**
- * Implementation of {@link ImmutableSet} with exactly one element.
- *
- * @author Kevin Bourrillion
- * @author Nick Kralevich
- */
-@GwtCompatible(serializable = true)
-@SuppressWarnings("serial") // uses writeReplace(), not default serialization
-final class SingletonImmutableSet<E> extends ImmutableSet<E> {
-  final transient E element;
-
-  // Non-volatile because:
-  //   - Integer is immutable and thus thread-safe;
-  //   - no problems if one thread overwrites the cachedHashCode from another.
-  private transient Integer cachedHashCode;
-
-  SingletonImmutableSet(E element) {
-    this.element = Preconditions.checkNotNull(element);
-  }
-
-  SingletonImmutableSet(E element, int hashCode) {
-    // Guaranteed to be non-null by the presence of the pre-computed hash code.
-    this.element = element;
-    cachedHashCode = hashCode;
-  }
-
-  public int size() {
-    return 1;
-  }
-
-  @Override public boolean isEmpty() {
-    return false;
-  }
-
-  @Override public boolean contains(Object target) {
-    return element.equals(target);
-  }
-
-  @Override public UnmodifiableIterator<E> iterator() {
-    return Iterators.singletonIterator(element);
-  }
-
-  @Override public Object[] toArray() {
-    return new Object[] { element };
-  }
-
-  @SuppressWarnings({"unchecked"})
-  @Override public <T> T[] toArray(T[] array) {
-    if (array.length == 0) {
-      array = ObjectArrays.newArray(array, 1);
-    } else if (array.length > 1) {
-      array[1] = null;
-    }
-    // Writes will produce ArrayStoreException when the toArray() doc requires.
-    Object[] objectArray = array;
-    objectArray[0] = element;
-    return array;
-  }
-
-  @Override public boolean equals(@Nullable Object object) {
-    if (object == this) {
-      return true;
-    }
-    if (object instanceof Set) {
-      Set<?> that = (Set<?>) object;
-      return that.size() == 1 && element.equals(that.iterator().next());
-    }
-    return false;
-  }
-
-  @Override public final int hashCode() {
-    Integer code = cachedHashCode;
-    if (code == null) {
-      return cachedHashCode = element.hashCode();
-    }
-    return code;
-  }
-
-  @Override boolean isHashCodeFast() {
-    return false;
-  }
-
-  @Override public String toString() {
-    String elementToString = element.toString();
-    return new StringBuilder(elementToString.length() + 2)
-        .append('[')
-        .append(elementToString)
-        .append(']')
-        .toString();
-  }
-}
diff --git a/src/com/google/common/collect/SortedSetMultimap.java b/src/com/google/common/collect/SortedSetMultimap.java
deleted file mode 100644
index 7f496fc..0000000
--- a/src/com/google/common/collect/SortedSetMultimap.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-
-import java.util.Collection;
-import java.util.Comparator;
-import java.util.Map;
-import java.util.Set;
-import java.util.SortedSet;
-
-import javax.annotation.Nullable;
-
-/**
- * A {@code SetMultimap} whose set of values for a given key are kept sorted;
- * that is, they comprise a {@link SortedSet}. It cannot hold duplicate
- * key-value pairs; adding a key-value pair that's already in the multimap has
- * no effect. This interface does not specify the ordering of the multimap's
- * keys.
- *
- * <p>The {@link #get}, {@link #removeAll}, and {@link #replaceValues} methods
- * each return a {@link SortedSet} of values, while {@link Multimap#entries()}
- * returns a {@link Set} of map entries. Though the method signature doesn't say
- * so explicitly, the map returned by {@link #asMap} has {@code SortedSet}
- * values.
- *
- * @author Jared Levy
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible
-public interface SortedSetMultimap<K, V> extends SetMultimap<K, V> {
-  /**
-   * Returns a collection view of all values associated with a key. If no
-   * mappings in the multimap have the provided key, an empty collection is
-   * returned.
-   *
-   * <p>Changes to the returned collection will update the underlying multimap,
-   * and vice versa.
-   *
-   * <p>Because a {@code SortedSetMultimap} has unique sorted values for a given
-   * key, this method returns a {@link SortedSet}, instead of the
-   * {@link java.util.Collection} specified in the {@link Multimap} interface.
-   */
-  SortedSet<V> get(@Nullable K key);
-
-  /**
-   * Removes all values associated with a given key.
-   *
-   * <p>Because a {@code SortedSetMultimap} has unique sorted values for a given
-   * key, this method returns a {@link SortedSet}, instead of the
-   * {@link java.util.Collection} specified in the {@link Multimap} interface.
-   */
-  SortedSet<V> removeAll(@Nullable Object key);
-
-  /**
-   * Stores a collection of values with the same key, replacing any existing
-   * values for that key.
-   *
-   * <p>Because a {@code SortedSetMultimap} has unique sorted values for a given
-   * key, this method returns a {@link SortedSet}, instead of the
-   * {@link java.util.Collection} specified in the {@link Multimap} interface.
-   *
-   * <p>Any duplicates in {@code values} will be stored in the multimap once.
-   */
-  SortedSet<V> replaceValues(K key, Iterable<? extends V> values);
-
-  /**
-   * Returns a map view that associates each key with the corresponding values
-   * in the multimap. Changes to the returned map, such as element removal,
-   * will update the underlying multimap. The map never supports
-   * {@code setValue()} on the map entries, {@code put}, or {@code putAll}.
-   *
-   * <p>The collections returned by {@code asMap().get(Object)} have the same
-   * behavior as those returned by {@link #get}.
-   *
-   * <p>Though the method signature doesn't say so explicitly, the returned map
-   * has {@link SortedSet} values.
-   */
-  Map<K, Collection<V>> asMap();
-
-  /**
-   * Returns the comparator that orders the multimap values, with a {@code null}
-   * indicating that natural ordering is used.
-   */
-  Comparator<? super V> valueComparator();
-}
diff --git a/src/com/google/common/collect/Synchronized.java b/src/com/google/common/collect/Synchronized.java
deleted file mode 100644
index 733295e..0000000
--- a/src/com/google/common/collect/Synchronized.java
+++ /dev/null
@@ -1,1367 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-import com.google.common.annotations.GwtIncompatible;
-
-import java.io.IOException;
-import java.io.ObjectOutputStream;
-import java.io.Serializable;
-import java.util.Collection;
-import java.util.Comparator;
-import java.util.Iterator;
-import java.util.List;
-import java.util.ListIterator;
-import java.util.Map;
-import java.util.RandomAccess;
-import java.util.Set;
-import java.util.SortedSet;
-
-import javax.annotation.Nullable;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-/**
- * Synchronized collection views. The returned synchronized collection views are
- * serializable if the backing collection and the mutex are serializable.
- *
- * <p>If a {@code null} is passed as the {@code mutex} parameter to any of this
- * class's top-level methods or inner class constructors, the created object
- * uses itself as the synchronization mutex.
- *
- * <p>This class should be used by other collection classes only.
- *
- * @author Mike Bostock
- * @author Jared Levy
- */
-@GwtCompatible
-final class Synchronized {
-  private Synchronized() {}
-
-  /** Abstract base class for synchronized views. */
-  static class SynchronizedObject implements Serializable {
-    private final Object delegate;
-    protected final Object mutex;
-
-    public SynchronizedObject(Object delegate, @Nullable Object mutex) {
-      this.delegate = checkNotNull(delegate);
-      this.mutex = (mutex == null) ? this : mutex;
-    }
-
-    protected Object delegate() {
-      return delegate;
-    }
-
-    // No equals and hashCode; see ForwardingObject for details.
-
-    @Override public String toString() {
-      synchronized (mutex) {
-        return delegate.toString();
-      }
-    }
-
-    // Serialization invokes writeObject only when it's private.
-    // The SynchronizedObject subclasses don't need a writeObject method since
-    // they don't contain any non-transient member variables, while the
-    // following writeObject() handles the SynchronizedObject members.
-
-    private void writeObject(ObjectOutputStream stream) throws IOException {
-      synchronized (mutex) {
-        stream.defaultWriteObject();
-      }
-    }
-
-    private static final long serialVersionUID = 0;
-  }
-
-  /**
-   * Returns a synchronized (thread-safe) collection backed by the specified
-   * collection using the specified mutex. In order to guarantee serial access,
-   * it is critical that <b>all</b> access to the backing collection is
-   * accomplished through the returned collection.
-   *
-   * <p>It is imperative that the user manually synchronize on the specified
-   * mutex when iterating over the returned collection: <pre>  {@code
-   *
-   *  Collection<E> s = Synchronized.collection(
-   *      new HashSet<E>(), mutex);
-   *  ...
-   *  synchronized (mutex) {
-   *    Iterator<E> i = s.iterator(); // Must be in synchronized block
-   *    while (i.hasNext()) {
-   *      foo(i.next());
-   *    }
-   *  }}</pre>
-   *
-   * Failure to follow this advice may result in non-deterministic behavior.
-   *
-   * @param collection the collection to be wrapped in a synchronized view
-   * @return a synchronized view of the specified collection
-   */
-  static <E> Collection<E> collection(
-      Collection<E> collection, @Nullable Object mutex) {
-    return new SynchronizedCollection<E>(collection, mutex);
-  }
-
-  /** @see Synchronized#collection */
-  static class SynchronizedCollection<E> extends SynchronizedObject
-      implements Collection<E> {
-    public SynchronizedCollection(
-        Collection<E> delegate, @Nullable Object mutex) {
-      super(delegate, mutex);
-    }
-
-    @SuppressWarnings("unchecked")
-    @Override protected Collection<E> delegate() {
-      return (Collection<E>) super.delegate();
-    }
-
-    public boolean add(E e) {
-      synchronized (mutex) {
-        return delegate().add(e);
-      }
-    }
-
-    public boolean addAll(Collection<? extends E> c) {
-      synchronized (mutex) {
-        return delegate().addAll(c);
-      }
-    }
-
-    public void clear() {
-      synchronized (mutex) {
-        delegate().clear();
-      }
-    }
-
-    public boolean contains(Object o) {
-      synchronized (mutex) {
-        return delegate().contains(o);
-      }
-    }
-
-    public boolean containsAll(Collection<?> c) {
-      synchronized (mutex) {
-        return delegate().containsAll(c);
-      }
-    }
-
-    public boolean isEmpty() {
-      synchronized (mutex) {
-        return delegate().isEmpty();
-      }
-    }
-
-    public Iterator<E> iterator() {
-      return delegate().iterator(); // manually synchronized
-    }
-
-    public boolean remove(Object o) {
-      synchronized (mutex) {
-        return delegate().remove(o);
-      }
-    }
-
-    public boolean removeAll(Collection<?> c) {
-      synchronized (mutex) {
-        return delegate().removeAll(c);
-      }
-    }
-
-    public boolean retainAll(Collection<?> c) {
-      synchronized (mutex) {
-        return delegate().retainAll(c);
-      }
-    }
-
-    public int size() {
-      synchronized (mutex) {
-        return delegate().size();
-      }
-    }
-
-    public Object[] toArray() {
-      synchronized (mutex) {
-        return delegate().toArray();
-      }
-    }
-
-    public <T> T[] toArray(T[] a) {
-      synchronized (mutex) {
-        return delegate().toArray(a);
-      }
-    }
-
-    private static final long serialVersionUID = 0;
-  }
-
-  /**
-   * Returns a synchronized (thread-safe) set backed by the specified set using
-   * the specified mutex. In order to guarantee serial access, it is critical
-   * that <b>all</b> access to the backing set is accomplished through the
-   * returned set.
-   *
-   * <p>It is imperative that the user manually synchronize on the specified
-   * mutex when iterating over the returned set:  <pre>  {@code
-   *
-   *  Set<E> s = Synchronized.set(new HashSet<E>(), mutex);
-   *  ...
-   *  synchronized (mutex) {
-   *    Iterator<E> i = s.iterator(); // Must be in synchronized block
-   *    while (i.hasNext()) {
-   *      foo(i.next());
-   *    }
-   *  }}</pre>
-   *
-   * Failure to follow this advice may result in non-deterministic behavior.
-   *
-   * @param set the set to be wrapped in a synchronized view
-   * @return a synchronized view of the specified set
-   */
-  public static <E> Set<E> set(Set<E> set, @Nullable Object mutex) {
-    return new SynchronizedSet<E>(set, mutex);
-  }
-
-  /** @see Synchronized#set */
-  static class SynchronizedSet<E> extends SynchronizedCollection<E>
-      implements Set<E> {
-    public SynchronizedSet(Set<E> delegate, @Nullable Object mutex) {
-      super(delegate, mutex);
-    }
-
-    @Override protected Set<E> delegate() {
-      return (Set<E>) super.delegate();
-    }
-
-    @Override public boolean equals(Object o) {
-      if (o == this) {
-        return true;
-      }
-      synchronized (mutex) {
-        return delegate().equals(o);
-      }
-    }
-
-    @Override public int hashCode() {
-      synchronized (mutex) {
-        return delegate().hashCode();
-      }
-    }
-
-    private static final long serialVersionUID = 0;
-  }
-
-  /**
-   * Returns a synchronized (thread-safe) sorted set backed by the specified
-   * sorted set using the specified mutex. In order to guarantee serial access,
-   * it is critical that <b>all</b> access to the backing sorted set is
-   * accomplished through the returned sorted set.
-   *
-   * <p>It is imperative that the user manually synchronize on the specified
-   * mutex when iterating over the returned sorted set: <pre>  {@code
-   *
-   *  SortedSet<E> s = Synchronized.sortedSet(
-   *      new TreeSet<E>(), mutex);
-   *  ...
-   *  synchronized (mutex) {
-   *    Iterator<E> i = s.iterator(); // Must be in synchronized block
-   *    while (i.hasNext()) {
-   *      foo(i.next());
-   *    }
-   *  }}</pre>
-   *
-   * Failure to follow this advice may result in non-deterministic behavior.
-   *
-   * @param set the sorted set to be wrapped in a synchronized view
-   * @return a synchronized view of the specified sorted set
-   */
-  static <E> SortedSet<E> sortedSet(SortedSet<E> set, @Nullable Object mutex) {
-    return new SynchronizedSortedSet<E>(set, mutex);
-  }
-
-  /** @see Synchronized#sortedSet */
-  static class SynchronizedSortedSet<E> extends SynchronizedSet<E>
-      implements SortedSet<E> {
-    public SynchronizedSortedSet(
-        SortedSet<E> delegate, @Nullable Object mutex) {
-      super(delegate, mutex);
-    }
-
-    @Override protected SortedSet<E> delegate() {
-      return (SortedSet<E>) super.delegate();
-    }
-
-    public Comparator<? super E> comparator() {
-      synchronized (mutex) {
-        return delegate().comparator();
-      }
-    }
-
-    public SortedSet<E> subSet(E fromElement, E toElement) {
-      synchronized (mutex) {
-        return sortedSet(delegate().subSet(fromElement, toElement), mutex);
-      }
-    }
-
-    public SortedSet<E> headSet(E toElement) {
-      synchronized (mutex) {
-        return sortedSet(delegate().headSet(toElement), mutex);
-      }
-    }
-
-    public SortedSet<E> tailSet(E fromElement) {
-      synchronized (mutex) {
-        return sortedSet(delegate().tailSet(fromElement), mutex);
-      }
-    }
-
-    public E first() {
-      synchronized (mutex) {
-        return delegate().first();
-      }
-    }
-
-    public E last() {
-      synchronized (mutex) {
-        return delegate().last();
-      }
-    }
-
-    private static final long serialVersionUID = 0;
-  }
-
-  /**
-   * Returns a synchronized (thread-safe) list backed by the specified list
-   * using the specified mutex. In order to guarantee serial access, it is
-   * critical that <b>all</b> access to the backing list is accomplished
-   * through the returned list.
-   *
-   * <p>It is imperative that the user manually synchronize on the specified
-   * mutex when iterating over the returned list: <pre>  {@code
-   *
-   *  List<E> l = Synchronized.list(new ArrayList<E>(), mutex);
-   *  ...
-   *  synchronized (mutex) {
-   *    Iterator<E> i = l.iterator(); // Must be in synchronized block
-   *    while (i.hasNext()) {
-   *      foo(i.next());
-   *    }
-   *  }}</pre>
-   *
-   * Failure to follow this advice may result in non-deterministic behavior.
-   *
-   * <p>The returned list implements {@link RandomAccess} if the specified list
-   * implements {@code RandomAccess}.
-   *
-   * @param list the list to be wrapped in a synchronized view
-   * @return a synchronized view of the specified list
-   */
-  static <E> List<E> list(List<E> list, @Nullable Object mutex) {
-    return (list instanceof RandomAccess)
-        ? new SynchronizedRandomAccessList<E>(list, mutex)
-        : new SynchronizedList<E>(list, mutex);
-  }
-
-  /** @see Synchronized#list */
-  static class SynchronizedList<E> extends SynchronizedCollection<E>
-      implements List<E> {
-    public SynchronizedList(List<E> delegate, @Nullable Object mutex) {
-      super(delegate, mutex);
-    }
-
-    @Override protected List<E> delegate() {
-      return (List<E>) super.delegate();
-    }
-
-    public void add(int index, E element) {
-      synchronized (mutex) {
-        delegate().add(index, element);
-      }
-    }
-
-    public boolean addAll(int index, Collection<? extends E> c) {
-      synchronized (mutex) {
-        return delegate().addAll(index, c);
-      }
-    }
-
-    public E get(int index) {
-      synchronized (mutex) {
-        return delegate().get(index);
-      }
-    }
-
-    public int indexOf(Object o) {
-      synchronized (mutex) {
-        return delegate().indexOf(o);
-      }
-    }
-
-    public int lastIndexOf(Object o) {
-      synchronized (mutex) {
-        return delegate().lastIndexOf(o);
-      }
-    }
-
-    public ListIterator<E> listIterator() {
-      return delegate().listIterator(); // manually synchronized
-    }
-
-    public ListIterator<E> listIterator(int index) {
-      return delegate().listIterator(index); // manually synchronized
-    }
-
-    public E remove(int index) {
-      synchronized (mutex) {
-        return delegate().remove(index);
-      }
-    }
-
-    public E set(int index, E element) {
-      synchronized (mutex) {
-        return delegate().set(index, element);
-      }
-    }
-
-    @GwtIncompatible("List.subList")
-    public List<E> subList(int fromIndex, int toIndex) {
-      synchronized (mutex) {
-        return list(Platform.subList(delegate(), fromIndex, toIndex), mutex);
-      }
-    }
-
-    @Override public boolean equals(Object o) {
-      if (o == this) {
-        return true;
-      }
-      synchronized (mutex) {
-        return delegate().equals(o);
-      }
-    }
-
-    @Override public int hashCode() {
-      synchronized (mutex) {
-        return delegate().hashCode();
-      }
-    }
-
-    private static final long serialVersionUID = 0;
-  }
-
-  /** @see Synchronized#list */
-  static class SynchronizedRandomAccessList<E> extends SynchronizedList<E>
-      implements RandomAccess {
-    public SynchronizedRandomAccessList(List<E> list, @Nullable Object mutex) {
-      super(list, mutex);
-    }
-    private static final long serialVersionUID = 0;
-  }
-
-  /**
-   * Returns a synchronized (thread-safe) multiset backed by the specified
-   * multiset using the specified mutex. In order to guarantee serial access, it
-   * is critical that <b>all</b> access to the backing multiset is accomplished
-   * through the returned multiset.
-   *
-   * <p>It is imperative that the user manually synchronize on the specified
-   * mutex when iterating over the returned multiset: <pre>  {@code
-   *
-   *  Multiset<E> s = Synchronized.multiset(
-   *      HashMultiset.<E>create(), mutex);
-   *  ...
-   *  synchronized (mutex) {
-   *    Iterator<E> i = s.iterator(); // Must be in synchronized block
-   *    while (i.hasNext()) {
-   *      foo(i.next());
-   *    }
-   *  }}</pre>
-   *
-   * Failure to follow this advice may result in non-deterministic behavior.
-   *
-   * @param multiset the multiset to be wrapped
-   * @return a synchronized view of the specified multiset
-   */
-  private static <E> Multiset<E> multiset(
-      Multiset<E> multiset, @Nullable Object mutex) {
-    return new SynchronizedMultiset<E>(multiset, mutex);
-  }
-
-  /** @see Synchronized#multiset */
-  static class SynchronizedMultiset<E> extends SynchronizedCollection<E>
-      implements Multiset<E> {
-    private transient Set<E> elementSet;
-    private transient Set<Entry<E>> entrySet;
-
-    public SynchronizedMultiset(Multiset<E> delegate, @Nullable Object mutex) {
-      super(delegate, mutex);
-    }
-
-    @Override protected Multiset<E> delegate() {
-      return (Multiset<E>) super.delegate();
-    }
-
-    public int count(Object o) {
-      synchronized (mutex) {
-        return delegate().count(o);
-      }
-    }
-
-    public int add(E e, int n) {
-      synchronized (mutex) {
-        return delegate().add(e, n);
-      }
-    }
-
-    public int remove(Object o, int n) {
-      synchronized (mutex) {
-        return delegate().remove(o, n);
-      }
-    }
-
-    public int setCount(E element, int count) {
-      synchronized (mutex) {
-        return delegate().setCount(element, count);
-      }
-    }
-
-    public boolean setCount(E element, int oldCount, int newCount) {
-      synchronized (mutex) {
-        return delegate().setCount(element, oldCount, newCount);
-      }
-    }
-
-    public Set<E> elementSet() {
-      synchronized (mutex) {
-        if (elementSet == null) {
-          elementSet = typePreservingSet(delegate().elementSet(), mutex);
-        }
-        return elementSet;
-      }
-    }
-
-    public Set<Entry<E>> entrySet() {
-      synchronized (mutex) {
-        if (entrySet == null) {
-          entrySet = typePreservingSet(delegate().entrySet(), mutex);
-        }
-        return entrySet;
-      }
-    }
-
-    @Override public boolean equals(Object o) {
-      if (o == this) {
-        return true;
-      }
-      synchronized (mutex) {
-        return delegate().equals(o);
-      }
-    }
-
-    @Override public int hashCode() {
-      synchronized (mutex) {
-        return delegate().hashCode();
-      }
-    }
-
-    private static final long serialVersionUID = 0;
-  }
-
-  /**
-   * Returns a synchronized (thread-safe) multimap backed by the specified
-   * multimap using the specified mutex. In order to guarantee serial access, it
-   * is critical that <b>all</b> access to the backing multimap is accomplished
-   * through the returned multimap.
-   *
-   * <p>It is imperative that the user manually synchronize on the specified
-   * mutex when accessing any of the return multimap's collection views:
-   * <pre>  {@code
-   *
-   *  Multimap<K, V> m = Synchronized.multimap(
-   *      HashMultimap.create(), mutex);
-   *  ...
-   *  Set<K> s = m.keySet();  // Needn't be in synchronized block
-   *  ...
-   *  synchronized (mutex) {
-   *    Iterator<K> i = s.iterator(); // Must be in synchronized block
-   *    while (i.hasNext()) {
-   *      foo(i.next());
-   *    }
-   *  }}</pre>
-   *
-   * Failure to follow this advice may result in non-deterministic behavior.
-   *
-   * @param multimap the multimap to be wrapped in a synchronized view
-   * @return a synchronized view of the specified multimap
-   */
-  public static <K, V> Multimap<K, V> multimap(
-      Multimap<K, V> multimap, @Nullable Object mutex) {
-    return new SynchronizedMultimap<K, V>(multimap, mutex);
-  }
-
-  /** @see Synchronized#multimap */
-  private static class SynchronizedMultimap<K, V> extends SynchronizedObject
-      implements Multimap<K, V> {
-    transient Set<K> keySet;
-    transient Collection<V> valuesCollection;
-    transient Collection<Map.Entry<K, V>> entries;
-    transient Map<K, Collection<V>> asMap;
-    transient Multiset<K> keys;
-
-    @SuppressWarnings("unchecked")
-    @Override protected Multimap<K, V> delegate() {
-      return (Multimap<K, V>) super.delegate();
-    }
-
-    SynchronizedMultimap(Multimap<K, V> delegate, @Nullable Object mutex) {
-      super(delegate, mutex);
-    }
-
-    public int size() {
-      synchronized (mutex) {
-        return delegate().size();
-      }
-    }
-
-    public boolean isEmpty() {
-      synchronized (mutex) {
-        return delegate().isEmpty();
-      }
-    }
-
-    public boolean containsKey(Object key) {
-      synchronized (mutex) {
-        return delegate().containsKey(key);
-      }
-    }
-
-    public boolean containsValue(Object value) {
-      synchronized (mutex) {
-        return delegate().containsValue(value);
-      }
-    }
-
-    public boolean containsEntry(Object key, Object value) {
-      synchronized (mutex) {
-        return delegate().containsEntry(key, value);
-      }
-    }
-
-    public Collection<V> get(K key) {
-      synchronized (mutex) {
-        return typePreservingCollection(delegate().get(key), mutex);
-      }
-    }
-
-    public boolean put(K key, V value) {
-      synchronized (mutex) {
-        return delegate().put(key, value);
-      }
-    }
-
-    public boolean putAll(K key, Iterable<? extends V> values) {
-      synchronized (mutex) {
-        return delegate().putAll(key, values);
-      }
-    }
-
-    public boolean putAll(Multimap<? extends K, ? extends V> multimap) {
-      synchronized (mutex) {
-        return delegate().putAll(multimap);
-      }
-    }
-
-    public Collection<V> replaceValues(K key, Iterable<? extends V> values) {
-      synchronized (mutex) {
-        return delegate().replaceValues(key, values); // copy not synchronized
-      }
-    }
-
-    public boolean remove(Object key, Object value) {
-      synchronized (mutex) {
-        return delegate().remove(key, value);
-      }
-    }
-
-    public Collection<V> removeAll(Object key) {
-      synchronized (mutex) {
-        return delegate().removeAll(key); // copy not synchronized
-      }
-    }
-
-    public void clear() {
-      synchronized (mutex) {
-        delegate().clear();
-      }
-    }
-
-    public Set<K> keySet() {
-      synchronized (mutex) {
-        if (keySet == null) {
-          keySet = typePreservingSet(delegate().keySet(), mutex);
-        }
-        return keySet;
-      }
-    }
-
-    public Collection<V> values() {
-      synchronized (mutex) {
-        if (valuesCollection == null) {
-          valuesCollection = collection(delegate().values(), mutex);
-        }
-        return valuesCollection;
-      }
-    }
-
-    public Collection<Map.Entry<K, V>> entries() {
-      synchronized (mutex) {
-        if (entries == null) {
-          entries = typePreservingCollection(delegate().entries(), mutex);
-        }
-        return entries;
-      }
-    }
-
-    public Map<K, Collection<V>> asMap() {
-      synchronized (mutex) {
-        if (asMap == null) {
-          asMap = new SynchronizedAsMap<K, V>(delegate().asMap(), mutex);
-        }
-        return asMap;
-      }
-    }
-
-    public Multiset<K> keys() {
-      synchronized (mutex) {
-        if (keys == null) {
-          keys = multiset(delegate().keys(), mutex);
-        }
-        return keys;
-      }
-    }
-
-    @Override public boolean equals(Object o) {
-      if (o == this) {
-        return true;
-      }
-      synchronized (mutex) {
-        return delegate().equals(o);
-      }
-    }
-
-    @Override public int hashCode() {
-      synchronized (mutex) {
-        return delegate().hashCode();
-      }
-    }
-
-    private static final long serialVersionUID = 0;
-  }
-
-  /**
-   * Returns a synchronized (thread-safe) list multimap backed by the specified
-   * multimap using the specified mutex.
-   *
-   * <p>You must follow the warnings described for {@link #multimap}.
-   *
-   * @param multimap the multimap to be wrapped in a synchronized view
-   * @return a synchronized view of the specified multimap
-   */
-  public static <K, V> ListMultimap<K, V> listMultimap(
-      ListMultimap<K, V> multimap, @Nullable Object mutex) {
-    return new SynchronizedListMultimap<K, V>(multimap, mutex);
-  }
-
-  /** @see Synchronized#listMultimap */
-  private static class SynchronizedListMultimap<K, V>
-      extends SynchronizedMultimap<K, V> implements ListMultimap<K, V> {
-    SynchronizedListMultimap(
-        ListMultimap<K, V> delegate, @Nullable Object mutex) {
-      super(delegate, mutex);
-    }
-    @Override protected ListMultimap<K, V> delegate() {
-      return (ListMultimap<K, V>) super.delegate();
-    }
-    @Override public List<V> get(K key) {
-      synchronized (mutex) {
-        return list(delegate().get(key), mutex);
-      }
-    }
-    @Override public List<V> removeAll(Object key) {
-      synchronized (mutex) {
-        return delegate().removeAll(key); // copy not synchronized
-      }
-    }
-    @Override public List<V> replaceValues(
-        K key, Iterable<? extends V> values) {
-      synchronized (mutex) {
-        return delegate().replaceValues(key, values); // copy not synchronized
-      }
-    }
-    private static final long serialVersionUID = 0;
-  }
-
-  /**
-   * Returns a synchronized (thread-safe) set multimap backed by the specified
-   * multimap using the specified mutex.
-   *
-   * <p>You must follow the warnings described for {@link #multimap}.
-   *
-   * @param multimap the multimap to be wrapped in a synchronized view
-   * @return a synchronized view of the specified multimap
-   */
-  public static <K, V> SetMultimap<K, V> setMultimap(
-      SetMultimap<K, V> multimap, @Nullable Object mutex) {
-    return new SynchronizedSetMultimap<K, V>(multimap, mutex);
-  }
-
-  /** @see Synchronized#setMultimap */
-  private static class SynchronizedSetMultimap<K, V>
-      extends SynchronizedMultimap<K, V> implements SetMultimap<K, V> {
-    transient Set<Map.Entry<K, V>> entrySet;
-    SynchronizedSetMultimap(
-        SetMultimap<K, V> delegate, @Nullable Object mutex) {
-      super(delegate, mutex);
-    }
-    @Override protected SetMultimap<K, V> delegate() {
-      return (SetMultimap<K, V>) super.delegate();
-    }
-    @Override public Set<V> get(K key) {
-      synchronized (mutex) {
-        return set(delegate().get(key), mutex);
-      }
-    }
-    @Override public Set<V> removeAll(Object key) {
-      synchronized (mutex) {
-        return delegate().removeAll(key); // copy not synchronized
-      }
-    }
-    @Override public Set<V> replaceValues(
-        K key, Iterable<? extends V> values) {
-      synchronized (mutex) {
-        return delegate().replaceValues(key, values); // copy not synchronized
-      }
-    }
-    @Override public Set<Map.Entry<K, V>> entries() {
-      synchronized (mutex) {
-        if (entrySet == null) {
-          entrySet = set(delegate().entries(), mutex);
-        }
-        return entrySet;
-      }
-    }
-    private static final long serialVersionUID = 0;
-  }
-
-  /**
-   * Returns a synchronized (thread-safe) sorted set multimap backed by the
-   * specified multimap using the specified mutex.
-   *
-   * <p>You must follow the warnings described for {@link #multimap}.
-   *
-   * @param multimap the multimap to be wrapped in a synchronized view
-   * @return a synchronized view of the specified multimap
-   */
-  public static <K, V> SortedSetMultimap<K, V> sortedSetMultimap(
-      SortedSetMultimap<K, V> multimap, @Nullable Object mutex) {
-    return new SynchronizedSortedSetMultimap<K, V>(multimap, mutex);
-  }
-
-  /** @see Synchronized#sortedSetMultimap */
-  private static class SynchronizedSortedSetMultimap<K, V>
-      extends SynchronizedSetMultimap<K, V> implements SortedSetMultimap<K, V> {
-    SynchronizedSortedSetMultimap(
-        SortedSetMultimap<K, V> delegate, @Nullable Object mutex) {
-      super(delegate, mutex);
-    }
-    @Override protected SortedSetMultimap<K, V> delegate() {
-      return (SortedSetMultimap<K, V>) super.delegate();
-    }
-    @Override public SortedSet<V> get(K key) {
-      synchronized (mutex) {
-        return sortedSet(delegate().get(key), mutex);
-      }
-    }
-    @Override public SortedSet<V> removeAll(Object key) {
-      synchronized (mutex) {
-        return delegate().removeAll(key); // copy not synchronized
-      }
-    }
-    @Override public SortedSet<V> replaceValues(
-        K key, Iterable<? extends V> values) {
-      synchronized (mutex) {
-        return delegate().replaceValues(key, values); // copy not synchronized
-      }
-    }
-    public Comparator<? super V> valueComparator() {
-      synchronized (mutex) {
-        return delegate().valueComparator();
-      }
-    }
-    private static final long serialVersionUID = 0;
-  }
-
-  /**
-   * Returns a synchronized (thread-safe) collection backed by the specified
-   * collection using the specified mutex. In order to guarantee serial access,
-   * it is critical that <b>all</b> access to the backing collection is
-   * accomplished through the returned collection.
-   *
-   * <p>It is imperative that the user manually synchronize on the specified
-   * mutex when iterating over the returned collection: <pre>  {@code
-   *
-   *  Collection<E> s = Synchronized.typePreservingCollection(
-   *      new HashSet<E>(), mutex);
-   *  ...
-   *  synchronized (mutex) {
-   *    Iterator<E> i = s.iterator(); // Must be in synchronized block
-   *    while (i.hasNext()) {
-   *      foo(i.next());
-   *    }
-   *  }}</pre>
-   *
-   * Failure to follow this advice may result in non-deterministic behavior.
-   *
-   * <p>If the specified collection is a {@code SortedSet}, {@code Set} or
-   * {@code List}, this method will behave identically to {@link #sortedSet},
-   * {@link #set} or {@link #list} respectively, in that order of specificity.
-   *
-   * @param collection the collection to be wrapped in a synchronized view
-   * @return a synchronized view of the specified collection
-   */
-  private static <E> Collection<E> typePreservingCollection(
-      Collection<E> collection, @Nullable Object mutex) {
-    if (collection instanceof SortedSet) {
-      return sortedSet((SortedSet<E>) collection, mutex);
-    } else if (collection instanceof Set) {
-      return set((Set<E>) collection, mutex);
-    } else if (collection instanceof List) {
-      return list((List<E>) collection, mutex);
-    } else {
-      return collection(collection, mutex);
-    }
-  }
-
-  /**
-   * Returns a synchronized (thread-safe) set backed by the specified set using
-   * the specified mutex. In order to guarantee serial access, it is critical
-   * that <b>all</b> access to the backing collection is accomplished through
-   * the returned collection.
-   *
-   * <p>It is imperative that the user manually synchronize on the specified
-   * mutex when iterating over the returned collection: <pre>  {@code
-   *
-   *  Set<E> s = Synchronized.typePreservingSet(
-   *      new HashSet<E>(), mutex);
-   *  ...
-   *  synchronized (mutex) {
-   *    Iterator<E> i = s.iterator(); // Must be in synchronized block
-   *    while (i.hasNext()) {
-   *      foo(i.next());
-   *    }
-   *  }}</pre>
-   *
-   * Failure to follow this advice may result in non-deterministic behavior.
-   *
-   * <p>If the specified collection is a {@code SortedSet} this method will
-   * behave identically to {@link #sortedSet}.
-   *
-   * @param set the set to be wrapped in a synchronized view
-   * @return a synchronized view of the specified set
-   */
-  public static <E> Set<E> typePreservingSet(
-      Set<E> set, @Nullable Object mutex) {
-    if (set instanceof SortedSet) {
-      return sortedSet((SortedSet<E>) set, mutex);
-    } else {
-      return set(set, mutex);
-    }
-  }
-
-  /** @see Synchronized#multimap */
-  static class SynchronizedAsMapEntries<K, V>
-      extends SynchronizedSet<Map.Entry<K, Collection<V>>> {
-    public SynchronizedAsMapEntries(
-        Set<Map.Entry<K, Collection<V>>> delegate, @Nullable Object mutex) {
-      super(delegate, mutex);
-    }
-
-    @Override public Iterator<Map.Entry<K, Collection<V>>> iterator() {
-      // Must be manually synchronized.
-      final Iterator<Map.Entry<K, Collection<V>>> iterator = super.iterator();
-      return new ForwardingIterator<Map.Entry<K, Collection<V>>>() {
-        @Override protected Iterator<Map.Entry<K, Collection<V>>> delegate() {
-          return iterator;
-        }
-
-        @Override public Map.Entry<K, Collection<V>> next() {
-          final Map.Entry<K, Collection<V>> entry = iterator.next();
-          return new ForwardingMapEntry<K, Collection<V>>() {
-            @Override protected Map.Entry<K, Collection<V>> delegate() {
-              return entry;
-            }
-            @Override public Collection<V> getValue() {
-              return typePreservingCollection(entry.getValue(), mutex);
-            }
-          };
-        }
-      };
-    }
-
-    // See Collections.CheckedMap.CheckedEntrySet for details on attacks.
-
-    @Override public Object[] toArray() {
-      synchronized (mutex) {
-        return ObjectArrays.toArrayImpl(delegate());
-      }
-    }
-    @Override public <T> T[] toArray(T[] array) {
-      synchronized (mutex) {
-        return ObjectArrays.toArrayImpl(delegate(), array);
-      }
-    }
-    @Override public boolean contains(Object o) {
-      synchronized (mutex) {
-        return Maps.containsEntryImpl(delegate(), o);
-      }
-    }
-    @Override public boolean containsAll(Collection<?> c) {
-      synchronized (mutex) {
-        return Collections2.containsAll(delegate(), c);
-      }
-    }
-    @Override public boolean equals(Object o) {
-      if (o == this) {
-        return true;
-      }
-      synchronized (mutex) {
-        return Collections2.setEquals(delegate(), o);
-      }
-    }
-    @Override public boolean remove(Object o) {
-      synchronized (mutex) {
-        return Maps.removeEntryImpl(delegate(), o);
-      }
-    }
-    @Override public boolean removeAll(Collection<?> c) {
-      synchronized (mutex) {
-        return Iterators.removeAll(delegate().iterator(), c);
-      }
-    }
-    @Override public boolean retainAll(Collection<?> c) {
-      synchronized (mutex) {
-        return Iterators.retainAll(delegate().iterator(), c);
-      }
-    }
-
-    private static final long serialVersionUID = 0;
-  }
-
-  /**
-   * Returns a synchronized (thread-safe) map backed by the specified map using
-   * the specified mutex. In order to guarantee serial access, it is critical
-   * that <b>all</b> access to the backing map is accomplished through the
-   * returned map.
-   *
-   * <p>It is imperative that the user manually synchronize on the specified
-   * mutex when accessing any of the return map's collection views:
-   * <pre>  {@code
-   *
-   *  Map<K, V> m = Synchronized.map(
-   *      new HashMap<K, V>(), mutex);
-   *  ...
-   *  Set<K> s = m.keySet();  // Needn't be in synchronized block
-   *  ...
-   *  synchronized (mutex) {
-   *    Iterator<K> i = s.iterator(); // Must be in synchronized block
-   *    while (i.hasNext()) {
-   *      foo(i.next());
-   *    }
-   *  }}</pre>
-   *
-   * Failure to follow this advice may result in non-deterministic behavior.
-   *
-   * @param map the map to be wrapped in a synchronized view
-   * @return a synchronized view of the specified map
-   */
-  public static <K, V> Map<K, V> map(Map<K, V> map, @Nullable Object mutex) {
-    return new SynchronizedMap<K, V>(map, mutex);
-  }
-
-  /** @see Synchronized#map */
-  static class SynchronizedMap<K, V> extends SynchronizedObject
-      implements Map<K, V> {
-    private transient Set<K> keySet;
-    private transient Collection<V> values;
-    private transient Set<Map.Entry<K, V>> entrySet;
-
-    public SynchronizedMap(Map<K, V> delegate, @Nullable Object mutex) {
-      super(delegate, mutex);
-    }
-
-    @SuppressWarnings("unchecked")
-    @Override protected Map<K, V> delegate() {
-      return (Map<K, V>) super.delegate();
-    }
-
-    public void clear() {
-      synchronized (mutex) {
-        delegate().clear();
-      }
-    }
-
-    public boolean containsKey(Object key) {
-      synchronized (mutex) {
-        return delegate().containsKey(key);
-      }
-    }
-
-    public boolean containsValue(Object value) {
-      synchronized (mutex) {
-        return delegate().containsValue(value);
-      }
-    }
-
-    public Set<Map.Entry<K, V>> entrySet() {
-      synchronized (mutex) {
-        if (entrySet == null) {
-          entrySet = set(delegate().entrySet(), mutex);
-        }
-        return entrySet;
-      }
-    }
-
-    public V get(Object key) {
-      synchronized (mutex) {
-        return delegate().get(key);
-      }
-    }
-
-    public boolean isEmpty() {
-      synchronized (mutex) {
-        return delegate().isEmpty();
-      }
-    }
-
-    public Set<K> keySet() {
-      synchronized (mutex) {
-        if (keySet == null) {
-          keySet = set(delegate().keySet(), mutex);
-        }
-        return keySet;
-      }
-    }
-
-    public V put(K key, V value) {
-      synchronized (mutex) {
-        return delegate().put(key, value);
-      }
-    }
-
-    public void putAll(Map<? extends K, ? extends V> map) {
-      synchronized (mutex) {
-        delegate().putAll(map);
-      }
-    }
-
-    public V remove(Object key) {
-      synchronized (mutex) {
-        return delegate().remove(key);
-      }
-    }
-
-    public int size() {
-      synchronized (mutex) {
-        return delegate().size();
-      }
-    }
-
-    public Collection<V> values() {
-      synchronized (mutex) {
-        if (values == null) {
-          values = collection(delegate().values(), mutex);
-        }
-        return values;
-      }
-    }
-
-    @Override public boolean equals(Object o) {
-      if (o == this) {
-        return true;
-      }
-      synchronized (mutex) {
-        return delegate().equals(o);
-      }
-    }
-
-    @Override public int hashCode() {
-      synchronized (mutex) {
-        return delegate().hashCode();
-      }
-    }
-
-    private static final long serialVersionUID = 0;
-  }
-
-  /**
-   * Returns a synchronized (thread-safe) bimap backed by the specified bimap
-   * using the specified mutex. In order to guarantee serial access, it is
-   * critical that <b>all</b> access to the backing bimap is accomplished
-   * through the returned bimap.
-   *
-   * <p>It is imperative that the user manually synchronize on the specified
-   * mutex when accessing any of the return bimap's collection views:
-   * <pre>  {@code
-   *
-   *  BiMap<K, V> m = Synchronized.biMap(
-   *      HashBiMap.<K, V>create(), mutex);
-   *  ...
-   *  Set<K> s = m.keySet();  // Needn't be in synchronized block
-   *  ...
-   *  synchronized (mutex) {
-   *    Iterator<K> i = s.iterator(); // Must be in synchronized block
-   *    while (i.hasNext()) {
-   *      foo(i.next());
-   *    }
-   *  }}</pre>
-   *
-   * Failure to follow this advice may result in non-deterministic behavior.
-   *
-   * @param bimap the bimap to be wrapped in a synchronized view
-   * @return a synchronized view of the specified bimap
-   */
-  public static <K, V> BiMap<K, V> biMap(
-      BiMap<K, V> bimap, @Nullable Object mutex) {
-    return new SynchronizedBiMap<K, V>(bimap, mutex, null);
-  }
-
-  /** @see Synchronized#biMap */
-  static class SynchronizedBiMap<K, V> extends SynchronizedMap<K, V>
-      implements BiMap<K, V>, Serializable {
-    private transient Set<V> valueSet;
-    private transient BiMap<V, K> inverse;
-
-    public SynchronizedBiMap(
-        BiMap<K, V> delegate, @Nullable Object mutex,
-        @Nullable BiMap<V, K> inverse) {
-      super(delegate, mutex);
-      this.inverse = inverse;
-    }
-
-    @Override protected BiMap<K, V> delegate() {
-      return (BiMap<K, V>) super.delegate();
-    }
-
-    @Override public Set<V> values() {
-      synchronized (mutex) {
-        if (valueSet == null) {
-          valueSet = set(delegate().values(), mutex);
-        }
-        return valueSet;
-      }
-    }
-
-    public V forcePut(K key, V value) {
-      synchronized (mutex) {
-        return delegate().forcePut(key, value);
-      }
-    }
-
-    public BiMap<V, K> inverse() {
-      synchronized (mutex) {
-        if (inverse == null) {
-          inverse
-              = new SynchronizedBiMap<V, K>(delegate().inverse(), mutex, this);
-        }
-        return inverse;
-      }
-    }
-
-    private static final long serialVersionUID = 0;
-  }
-
-  /** @see SynchronizedMultimap#asMap */
-  static class SynchronizedAsMap<K, V>
-      extends SynchronizedMap<K, Collection<V>> {
-    private transient Set<Map.Entry<K, Collection<V>>> asMapEntrySet;
-    private transient Collection<Collection<V>> asMapValues;
-
-    public SynchronizedAsMap(
-        Map<K, Collection<V>> delegate, @Nullable Object mutex) {
-      super(delegate, mutex);
-    }
-
-    @Override public Collection<V> get(Object key) {
-      synchronized (mutex) {
-        Collection<V> collection = super.get(key);
-        return (collection == null) ? null
-            : typePreservingCollection(collection, mutex);
-      }
-    }
-
-    @Override public Set<Map.Entry<K, Collection<V>>> entrySet() {
-      synchronized (mutex) {
-        if (asMapEntrySet == null) {
-          asMapEntrySet = new SynchronizedAsMapEntries<K, V>(
-              delegate().entrySet(), mutex);
-        }
-        return asMapEntrySet;
-      }
-    }
-
-    @Override public Collection<Collection<V>> values() {
-      synchronized (mutex) {
-        if (asMapValues == null) {
-          asMapValues
-              = new SynchronizedAsMapValues<V>(delegate().values(), mutex);
-        }
-        return asMapValues;
-      }
-    }
-
-    @Override public boolean containsValue(Object o) {
-      // values() and its contains() method are both synchronized.
-      return values().contains(o);
-    }
-
-    private static final long serialVersionUID = 0;
-  }
-
-  /** @see SynchronizedMultimap#asMap */
-  static class SynchronizedAsMapValues<V>
-      extends SynchronizedCollection<Collection<V>> {
-    SynchronizedAsMapValues(
-        Collection<Collection<V>> delegate, @Nullable Object mutex) {
-      super(delegate, mutex);
-    }
-
-    @Override public Iterator<Collection<V>> iterator() {
-      // Must be manually synchronized.
-      final Iterator<Collection<V>> iterator = super.iterator();
-      return new ForwardingIterator<Collection<V>>() {
-        @Override protected Iterator<Collection<V>> delegate() {
-          return iterator;
-        }
-        @Override public Collection<V> next() {
-          return typePreservingCollection(iterator.next(), mutex);
-        }
-      };
-    }
-
-    private static final long serialVersionUID = 0;
-  }
-}
diff --git a/src/com/google/common/collect/TreeMultimap.java b/src/com/google/common/collect/TreeMultimap.java
deleted file mode 100644
index f121bb9..0000000
--- a/src/com/google/common/collect/TreeMultimap.java
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.util.Collection;
-import java.util.Comparator;
-import java.util.Set;
-import java.util.SortedMap;
-import java.util.SortedSet;
-import java.util.TreeMap;
-import java.util.TreeSet;
-
-import javax.annotation.Nullable;
-
-/**
- * Implementation of {@code Multimap} whose keys and values are ordered by
- * their natural ordering or by supplied comparators. In all cases, this
- * implementation uses {@link Comparable#compareTo} or {@link
- * Comparator#compare} instead of {@link Object#equals} to determine
- * equivalence of instances.
- *
- * <p><b>Warning:</b> The comparators or comparables used must be <i>consistent
- * with equals</i> as explained by the {@link Comparable} class specification.
- * Otherwise, the resulting multiset will violate the general contract of {@link
- * SetMultimap}, which it is specified in terms of {@link Object#equals}.
- *
- * <p>The collections returned by {@code keySet} and {@code asMap} iterate
- * through the keys according to the key comparator ordering or the natural
- * ordering of the keys. Similarly, {@code get}, {@code removeAll}, and {@code
- * replaceValues} return collections that iterate through the values according
- * to the value comparator ordering or the natural ordering of the values. The
- * collections generated by {@code entries}, {@code keys}, and {@code values}
- * iterate across the keys according to the above key ordering, and for each
- * key they iterate across the values according to the value ordering.
- *
- * <p>The multimap does not store duplicate key-value pairs. Adding a new
- * key-value pair equal to an existing key-value pair has no effect.
- *
- * <p>Depending on the comparators, null keys and values may or may not be
- * supported. The natural ordering does not support nulls. All optional multimap
- * methods are supported, and all returned views are modifiable.
- *
- * <p>This class is not threadsafe when any concurrent operations update the
- * multimap. Concurrent read operations will work correctly. To allow concurrent
- * update operations, wrap your multimap with a call to {@link
- * Multimaps#synchronizedSortedSetMultimap}.
- *
- * @author Jared Levy
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible(serializable = true)
-public class TreeMultimap<K, V> extends AbstractSortedSetMultimap<K, V> {
-  private transient Comparator<? super K> keyComparator;
-  private transient Comparator<? super V> valueComparator;
-
-  /**
-   * Creates an empty {@code TreeMultimap} ordered by the natural ordering of
-   * its keys and values.
-   */
-  @SuppressWarnings("unchecked") // eclipse doesn't like the raw Comparable
-  public static <K extends Comparable, V extends Comparable>
-      TreeMultimap<K, V> create() {
-    return new TreeMultimap<K, V>(Ordering.natural(), Ordering.natural());
-  }
-
-  /**
-   * Creates an empty {@code TreeMultimap} instance using explicit comparators.
-   * Neither comparator may be null; use {@link Ordering#natural()} to specify
-   * natural order.
-   *
-   * @param keyComparator the comparator that determines the key ordering
-   * @param valueComparator the comparator that determines the value ordering
-   */
-  public static <K, V> TreeMultimap<K, V> create(
-      Comparator<? super K> keyComparator,
-      Comparator<? super V> valueComparator) {
-    return new TreeMultimap<K, V>(checkNotNull(keyComparator),
-        checkNotNull(valueComparator));
-  }
-
-  /**
-   * Constructs a {@code TreeMultimap}, ordered by the natural ordering of its
-   * keys and values, with the same mappings as the specified multimap.
-   *
-   * @param multimap the multimap whose contents are copied to this multimap
-   */
-  @SuppressWarnings("unchecked") // eclipse doesn't like the raw Comparable
-  public static <K extends Comparable, V extends Comparable>
-      TreeMultimap<K, V> create(Multimap<? extends K, ? extends V> multimap) {
-    return new TreeMultimap<K, V>(Ordering.natural(), Ordering.natural(),
-        multimap);
-  }
-
-  // Used by the TreeMultimap serialization test.
-  TreeMultimap() {
-    this(null, null);
-  }
-
-  // Must be package-private so multimaps with null comparators can be
-  // serialized (which can be created with Multimaps.newTreeMultimap()). Once
-  // that method is removed, this constructor can be made private.
-  TreeMultimap(@Nullable Comparator<? super K> keyComparator,
-      @Nullable Comparator<? super V> valueComparator) {
-    super((keyComparator == null)
-        ? new TreeMap<K, Collection<V>>()
-        : new TreeMap<K, Collection<V>>(keyComparator));
-    this.keyComparator = keyComparator;
-    this.valueComparator = valueComparator;
-  }
-
-  private TreeMultimap(Comparator<? super K> keyComparator,
-      Comparator<? super V> valueComparator,
-      Multimap<? extends K, ? extends V> multimap) {
-    this(keyComparator, valueComparator);
-    putAll(multimap);
-  }
-
-  /**
-   * {@inheritDoc}
-   *
-   * <p>Creates an empty {@code TreeSet} for a collection of values for one key.
-   *
-   * @return a new {@code TreeSet} containing a collection of values for one
-   *     key
-   */
-  @Override SortedSet<V> createCollection() {
-    return (valueComparator == null)
-        ? new TreeSet<V>() : new TreeSet<V>(valueComparator);
-  }
-
-  /**
-   * Returns the comparator that orders the multimap keys.
-   */
-  public Comparator<? super K> keyComparator() {
-    return keyComparator;
-  }
-
-  public Comparator<? super V> valueComparator() {
-    return valueComparator;
-  }
-
-  /**
-   * {@inheritDoc}
-   *
-   * <p>Because a {@code TreeMultimap} has unique sorted keys, this method
-   * returns a {@link SortedSet}, instead of the {@link Set} specified in the
-   * {@link Multimap} interface.
-   */
-  @Override public SortedSet<K> keySet() {
-    return (SortedSet<K>) super.keySet();
-  }
-
-  /**
-   * {@inheritDoc}
-   *
-   * <p>Because a {@code TreeMultimap} has unique sorted keys, this method
-   * returns a {@link SortedMap}, instead of the {@link java.util.Map} specified
-   * in the {@link Multimap} interface.
-   */
-  @Override public SortedMap<K, Collection<V>> asMap() {
-    return (SortedMap<K, Collection<V>>) super.asMap();
-  }
-
-  /**
-   * @serialData key comparator, value comparator, number of distinct keys, and
-   *     then for each distinct key: the key, number of values for that key, and
-   *     key values
-   */
-  private void writeObject(ObjectOutputStream stream) throws IOException {
-    stream.defaultWriteObject();
-    stream.writeObject(keyComparator());
-    stream.writeObject(valueComparator());
-    Serialization.writeMultimap(this, stream);
-  }
-
-  @SuppressWarnings("unchecked") // reading data stored by writeObject
-  private void readObject(ObjectInputStream stream)
-      throws IOException, ClassNotFoundException {
-    stream.defaultReadObject();
-    keyComparator = (Comparator<? super K>) stream.readObject();
-    valueComparator = (Comparator<? super V>) stream.readObject();
-    setMap(new TreeMap<K, Collection<V>>(keyComparator));
-    Serialization.populateMultimap(this, stream);
-  }
-
-  private static final long serialVersionUID = 0;
-}
diff --git a/src/com/google/common/collect/TreeMultiset.java b/src/com/google/common/collect/TreeMultiset.java
deleted file mode 100644
index b2f5b11..0000000
--- a/src/com/google/common/collect/TreeMultiset.java
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.util.Comparator;
-import java.util.Set;
-import java.util.SortedMap;
-import java.util.SortedSet;
-import java.util.TreeMap;
-import java.util.Collection;
-import java.util.concurrent.atomic.AtomicInteger;
-
-import javax.annotation.Nullable;
-
-/**
- * A multiset which maintains the ordering of its elements, according to either
- * their natural order or an explicit {@link Comparator}. In all cases, this
- * implementation uses {@link Comparable#compareTo} or {@link
- * Comparator#compare} instead of {@link Object#equals} to determine
- * equivalence of instances.
- *
- * <p><b>Warning:</b> The comparison must be <i>consistent with equals</i> as
- * explained by the {@link Comparable} class specification. Otherwise, the
- * resulting multiset will violate the {@link Collection} contract, which it is
- * specified in terms of {@link Object#equals}.
- *
- * @author Neal Kanodia
- * @author Jared Levy
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible
-@SuppressWarnings("serial") // we're overriding default serialization
-public final class TreeMultiset<E> extends AbstractMapBasedMultiset<E> {
-
-  /**
-   * Creates a new, empty multiset, sorted according to the elements' natural
-   * order. All elements inserted into the multiset must implement the
-   * {@code Comparable} interface. Furthermore, all such elements must be
-   * <i>mutually comparable</i>: {@code e1.compareTo(e2)} must not throw a
-   * {@code ClassCastException} for any elements {@code e1} and {@code e2} in
-   * the multiset. If the user attempts to add an element to the multiset that
-   * violates this constraint (for example, the user attempts to add a string
-   * element to a set whose elements are integers), the {@code add(Object)}
-   * call will throw a {@code ClassCastException}.
-   *
-   * <p>The type specification is {@code <E extends Comparable>}, instead of the
-   * more specific {@code <E extends Comparable<? super E>>}, to support
-   * classes defined without generics.
-   */
-  @SuppressWarnings("unchecked") // eclipse doesn't like the raw Comparable
-  public static <E extends Comparable> TreeMultiset<E> create() {
-    return new TreeMultiset<E>();
-  }
-
-  /**
-   * Creates a new, empty multiset, sorted according to the specified
-   * comparator. All elements inserted into the multiset must be <i>mutually
-   * comparable</i> by the specified comparator: {@code comparator.compare(e1,
-   * e2)} must not throw a {@code ClassCastException} for any elements {@code
-   * e1} and {@code e2} in the multiset. If the user attempts to add an element
-   * to the multiset that violates this constraint, the {@code add(Object)} call
-   * will throw a {@code ClassCastException}.
-   *
-   * @param comparator the comparator that will be used to sort this multiset. A
-   *     null value indicates that the elements' <i>natural ordering</i> should
-   *     be used.
-   */
-  public static <E> TreeMultiset<E> create(Comparator<? super E> comparator) {
-    return new TreeMultiset<E>(comparator);
-  }
-
-  /**
-   * Creates an empty multiset containing the given initial elements, sorted
-   * according to the elements' natural order.
-   *
-   * <p>The type specification is {@code <E extends Comparable>}, instead of the
-   * more specific {@code <E extends Comparable<? super E>>}, to support
-   * classes defined without generics.
-   */
-  @SuppressWarnings("unchecked") // eclipse doesn't like the raw Comparable
-  public static <E extends Comparable> TreeMultiset<E> create(
-      Iterable<? extends E> elements) {
-    TreeMultiset<E> multiset = create();
-    Iterables.addAll(multiset, elements);
-    return multiset;
-  }
-
-  private TreeMultiset() {
-    super(new TreeMap<E, AtomicInteger>());
-  }
-
-  private TreeMultiset(Comparator<? super E> comparator) {
-    super(new TreeMap<E, AtomicInteger>(comparator));
-  }
-
-  /**
-   * {@inheritDoc}
-   *
-   * <p>In {@code TreeMultiset}, the return type of this method is narrowed
-   * from {@link Set} to {@link SortedSet}.
-   */
-  @Override public SortedSet<E> elementSet() {
-    return (SortedSet<E>) super.elementSet();
-  }
-
-  @Override public int count(@Nullable Object element) {
-    try {
-      return super.count(element);
-    } catch (NullPointerException e) {
-      return 0;
-    } catch (ClassCastException e) {
-      return 0;
-    }
-  }
-
-  @Override Set<E> createElementSet() {
-    return new SortedMapBasedElementSet(
-        (SortedMap<E, AtomicInteger>) backingMap());
-  }
-
-  private class SortedMapBasedElementSet extends MapBasedElementSet
-      implements SortedSet<E> {
-
-    SortedMapBasedElementSet(SortedMap<E, AtomicInteger> map) {
-      super(map);
-    }
-
-    SortedMap<E, AtomicInteger> sortedMap() {
-      return (SortedMap<E, AtomicInteger>) getMap();
-    }
-
-    public Comparator<? super E> comparator() {
-      return sortedMap().comparator();
-    }
-
-    public E first() {
-      return sortedMap().firstKey();
-    }
-
-    public E last() {
-      return sortedMap().lastKey();
-    }
-
-    public SortedSet<E> headSet(E toElement) {
-      return new SortedMapBasedElementSet(sortedMap().headMap(toElement));
-    }
-
-    public SortedSet<E> subSet(E fromElement, E toElement) {
-      return new SortedMapBasedElementSet(
-          sortedMap().subMap(fromElement, toElement));
-    }
-
-    public SortedSet<E> tailSet(E fromElement) {
-      return new SortedMapBasedElementSet(sortedMap().tailMap(fromElement));
-    }
-
-    @Override public boolean remove(Object element) {
-      try {
-        return super.remove(element);
-      } catch (NullPointerException e) {
-        return false;
-      } catch (ClassCastException e) {
-        return false;
-      }
-    }
-  }
-
-  /*
-   * TODO: Decide whether entrySet() should return entries with an equals()
-   * method that calls the comparator to compare the two keys. If that change
-   * is made, AbstractMultiset.equals() can simply check whether two multisets
-   * have equal entry sets.
-   */
-
-  /**
-   * @serialData the comparator, the number of distinct elements, the first
-   *     element, its count, the second element, its count, and so on
-   */
-  private void writeObject(ObjectOutputStream stream) throws IOException {
-    stream.defaultWriteObject();
-    stream.writeObject(elementSet().comparator());
-    Serialization.writeMultiset(this, stream);
-  }
-
-  private void readObject(ObjectInputStream stream)
-      throws IOException, ClassNotFoundException {
-    stream.defaultReadObject();
-    @SuppressWarnings("unchecked") // reading data stored by writeObject
-    Comparator<? super E> comparator
-        = (Comparator<? super E>) stream.readObject();
-    setBackingMap(new TreeMap<E, AtomicInteger>(comparator));
-    Serialization.populateMultiset(this, stream);
-  }
-
-  private static final long serialVersionUID = 0;
-}
diff --git a/src/com/google/common/collect/UnmodifiableIterator.java b/src/com/google/common/collect/UnmodifiableIterator.java
deleted file mode 100644
index 8075415..0000000
--- a/src/com/google/common/collect/UnmodifiableIterator.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-
-import java.util.Iterator;
-
-/**
- * An iterator that does not support {@link #remove}.
- *
- * @author Jared Levy
- * @since 2010.01.04 <b>stable</b> (imported from Google Collections Library)
- */
-@GwtCompatible
-public abstract class UnmodifiableIterator<E> implements Iterator<E> {
-  /**
-   * Guaranteed to throw an exception and leave the underlying data unmodified.
-   *
-   * @throws UnsupportedOperationException always
-   */
-  public final void remove() {
-    throw new UnsupportedOperationException();
-  }
-}
diff --git a/src/com/google/common/collect/UsingToStringOrdering.java b/src/com/google/common/collect/UsingToStringOrdering.java
deleted file mode 100644
index d08aeb8..0000000
--- a/src/com/google/common/collect/UsingToStringOrdering.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.collect;
-
-import com.google.common.annotations.GwtCompatible;
-
-import java.io.Serializable;
-
-/** An ordering that uses the reverse of the natural order of the values. */
-@GwtCompatible(serializable = true)
-final class UsingToStringOrdering
-    extends Ordering<Object> implements Serializable {
-  static final UsingToStringOrdering INSTANCE = new UsingToStringOrdering();
-
-  public int compare(Object left, Object right) {
-    return left.toString().compareTo(right.toString());
-  }
-
-  // preserve singleton-ness, so equals() and hashCode() work correctly
-  private Object readResolve() {
-    return INSTANCE;
-  }
-
-  @Override public String toString() {
-    return "Ordering.usingToString()";
-  }
-
-  private UsingToStringOrdering() {}
-
-  private static final long serialVersionUID = 0;
-}
diff --git a/src/com/google/common/collect/package-info.java b/src/com/google/common/collect/package-info.java
deleted file mode 100644
index 1df3b2e..0000000
--- a/src/com/google/common/collect/package-info.java
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-/**
- * This package contains generic collection interfaces and implementations, and
- * other utilities for working with collections.
- *
- * <h2>Collection Types</h2>
- *
- * <dl>
- * <dt>{@link com.google.common.collect.Multimap}
- * <dd>A new type, which is similar to {@link java.util.Map}, but may contain
- *     multiple entries with the same key. Some behaviors of
- *     {@link com.google.common.collect.Multimap} are left unspecified and are
- *     provided only by the subtypes mentioned below.
- *
- * <dt>{@link com.google.common.collect.SetMultimap}
- * <dd>An extension of {@link com.google.common.collect.Multimap} which has
- *     order-independent equality and does not allow duplicate entries; that is,
- *     while a key may appear twice in a {@code SetMultimap}, each must map to a
- *     different value.  {@code SetMultimap} takes its name from the fact that
- *     the {@linkplain com.google.common.collect.SetMultimap#get collection of
- *     values} associated with a given key fulfills the {@link java.util.Set}
- *     contract.
- *
- * <dt>{@link com.google.common.collect.ListMultimap}
- * <dd>An extension of {@link com.google.common.collect.Multimap} which permits
- *     duplicate entries, supports random access of values for a particular key,
- *     and has <i>partially order-dependent equality</i> as defined by
- *     {@link com.google.common.collect.ListMultimap#equals(Object)}. {@code
- *     ListMultimap} takes its name from the fact that the {@linkplain
- *     com.google.common.collect.ListMultimap#get collection of values}
- *     associated with a given key fulfills the {@link java.util.List} contract.
- *
- * <dt>{@link com.google.common.collect.SortedSetMultimap}
- * <dd>An extension of {@link com.google.common.collect.SetMultimap} for which
- *     the {@linkplain com.google.common.collect.SortedSetMultimap#get
- *     collection values} associated with a given key is a
- *     {@link java.util.SortedSet}.
- *
- * <dt>{@link com.google.common.collect.Multiset}
- * <dd>An extension of {@link java.util.Collection} that may contain duplicate
- *     values like a {@link java.util.List}, yet has order-independent equality
- *     like a {@link java.util.Set}.  One typical use for a multiset is to
- *     represent a histogram.
- *
- * <dt>{@link com.google.common.collect.BiMap}
- * <dd>An extension of {@link java.util.Map} that guarantees the uniqueness of
- *     its values as well as that of its keys. This is sometimes called an
- *     "invertible map," since the restriction on values enables it to support
- *     an {@linkplain com.google.common.collect.BiMap#inverse inverse view} --
- *     which is another instance of {@code BiMap}.
- *
- * <dt>{@link com.google.common.collect.ClassToInstanceMap}
- * <dd>An extension of {@link java.util.Map} that associates a raw type with an
- *     instance of that type.
- * </dl>
- *
- * <h2>Collection Implementations</h2>
- *
- * <h3>of {@link java.util.List}</h3>
- * <dl>
- * <dt>{@link com.google.common.collect.ImmutableList}
- * </ul>
- *
- * <h3>of {@link java.util.Set}</h3>
- * <dl>
- * <dt>{@link com.google.common.collect.ImmutableSet}
- * </ul>
- *
- * <h3>of {@link java.util.SortedSet}</h3>
- * <dl>
- * <dt>{@link com.google.common.collect.ImmutableSortedSet}
- * </dl>
- *
- * <h3>of {@link java.util.Map}</h3>
- * <dl>
- * <dt>{@link com.google.common.collect.ImmutableMap}
- * <dt>{@link com.google.common.collect.MapMaker} (produced by)
- * </ul>
- *
- * <h3>of {@link java.util.SortedMap}</h3>
- * <dl>
- * <dt>{@link com.google.common.collect.ImmutableSortedMap}
- * </dl>
- *
- * <h3>of {@link com.google.common.collect.Multimap}</h3>
- * <dl>
- * <dt>{@link com.google.common.collect.ImmutableMultimap}
- * <dt>{@link com.google.common.collect.Multimaps#newMultimap}
- * </dl>
- *
- * <h3>of {@link com.google.common.collect.ListMultimap}</h3>
- * <dl>
- * <dt>{@link com.google.common.collect.ImmutableListMultimap}
- * <dt>{@link com.google.common.collect.ArrayListMultimap}
- * <dt>{@link com.google.common.collect.LinkedListMultimap}
- * <dt>{@link com.google.common.collect.Multimaps#newListMultimap}
- * </dl>
- *
- * <h3>of {@link com.google.common.collect.SetMultimap}</h3>
- * <dl>
- * <dt>{@link com.google.common.collect.ImmutableSetMultimap}
- * <dt>{@link com.google.common.collect.HashMultimap}
- * <dt>{@link com.google.common.collect.LinkedHashMultimap}
- * <dt>{@link com.google.common.collect.TreeMultimap}
- * <dt>{@link com.google.common.collect.Multimaps#newSetMultimap}
- * <dt>{@link com.google.common.collect.Multimaps#newSortedSetMultimap}
- * </dl>
- *
- * <h3>of {@link com.google.common.collect.Multiset}</h3>
- * <dl>
- * <dt>{@link com.google.common.collect.ImmutableMultiset}
- * <dt>{@link com.google.common.collect.ConcurrentHashMultiset}
- * <dt>{@link com.google.common.collect.HashMultiset}
- * <dt>{@link com.google.common.collect.LinkedHashMultiset}
- * <dt>{@link com.google.common.collect.TreeMultiset}
- * <dt>{@link com.google.common.collect.EnumMultiset}
- * </dl>
- *
- * <h3>of {@link com.google.common.collect.BiMap}</h3>
- * <dl>
- * <dt>{@link com.google.common.collect.HashBiMap}
- * <dt>{@link com.google.common.collect.EnumBiMap}
- * <dt>{@link com.google.common.collect.EnumHashBiMap}
- * </dl>
- *
- * <h3>of {@link com.google.common.collect.ClassToInstanceMap}</h3>
- * <dl>
- * <dt>{@link com.google.common.collect.ImmutableClassToInstanceMap}
- * <dt>{@link com.google.common.collect.MutableClassToInstanceMap}
- * </dl>
- *
- * <h2>Skeletal implementations</h2>
- * <dl>
- * <dt>{@link com.google.common.collect.AbstractIterator}
- * <dt>{@link com.google.common.collect.UnmodifiableIterator}
- * </dl>
- *
- * <h2>Utilities</h2>
- *
- * <dl>
- * <dt>{@link com.google.common.collect.Collections2}
- * <dt>{@link com.google.common.collect.Iterators}
- * <dt>{@link com.google.common.collect.Iterables}
- * <dt>{@link com.google.common.collect.Lists}
- * <dt>{@link com.google.common.collect.Maps}
- * <dt>{@link com.google.common.collect.Ordering}
- * <dt>{@link com.google.common.collect.Sets}
- * <dt>{@link com.google.common.collect.Multisets}
- * <dt>{@link com.google.common.collect.Multimaps}
- * <dt>{@link com.google.common.collect.ObjectArrays}
- * </dl>
-
- * <h2>Forwarding collections</h2>
- *
- * <dl>
- * <dt>{@link com.google.common.collect.ForwardingCollection }
- * <dt>{@link com.google.common.collect.ForwardingConcurrentMap }
- * <dt>{@link com.google.common.collect.ForwardingIterator }
- * <dt>{@link com.google.common.collect.ForwardingList }
- * <dt>{@link com.google.common.collect.ForwardingListIterator }
- * <dt>{@link com.google.common.collect.ForwardingMap }
- * <dt>{@link com.google.common.collect.ForwardingMapEntry }
- * <dt>{@link com.google.common.collect.ForwardingMultimap }
- * <dt>{@link com.google.common.collect.ForwardingMultiset }
- * <dt>{@link com.google.common.collect.ForwardingObject }
- * <dt>{@link com.google.common.collect.ForwardingQueue }
- * <dt>{@link com.google.common.collect.ForwardingSet }
- * <dt>{@link com.google.common.collect.ForwardingSortedMap }
- * <dt>{@link com.google.common.collect.ForwardingSortedSet }
- * </dl>
- */
-@javax.annotation.ParametersAreNonnullByDefault
-package com.google.common.collect;
diff --git a/src/com/google/common/io/AppendableWriter.java b/src/com/google/common/io/AppendableWriter.java
deleted file mode 100644
index 68d21c9..0000000
--- a/src/com/google/common/io/AppendableWriter.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright (C) 2006 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.io;
-
-import java.io.Closeable;
-import java.io.Flushable;
-import java.io.Writer;
-import java.io.IOException;
-
-/**
- * Writer that places all output on an {@link Appendable} target. If the target
- * is {@link Flushable} or {@link Closeable}, flush()es and close()s will also
- * be delegated to the target.
- *
- * @author Alan Green
- * @author Sebastian Kanthak
- * @since 2009.09.15 <b>tentative</b>
- */
-class AppendableWriter extends Writer {
-  private final Appendable target;
-  private boolean closed;
-
-  /**
-   * Creates a new writer that appends everything it writes to {@code target}.
-   *
-   * @param target target to which to append output
-   */
-  AppendableWriter(Appendable target) {
-    this.target = target;
-  }
-
-  /*
-   * Abstract methods from Writer
-   */
-
-  @Override public void write(char cbuf[], int off, int len)
-      throws IOException {
-    checkNotClosed();
-    // It turns out that creating a new String is usually as fast, or faster
-    // than wrapping cbuf in a light-weight CharSequence.
-    target.append(new String(cbuf, off, len));
-  }
-
-  @Override public void flush() throws IOException {
-    checkNotClosed();
-    if (target instanceof Flushable) {
-      ((Flushable) target).flush();
-    }
-  }
-
-  @Override public void close() throws IOException {
-    this.closed = true;
-    if (target instanceof Closeable) {
-      ((Closeable) target).close();
-    }
-  }
-
-  /*
-   * Override a few functions for performance reasons to avoid creating
-   * unnecessary strings.
-   */
-
-  @Override public void write(int c) throws IOException {
-    checkNotClosed();
-    target.append((char) c);
-  }
-
-  @Override public void write(String str) throws IOException {
-    checkNotClosed();
-    target.append(str);
-  }
-
-  @Override public void write(String str, int off, int len) throws IOException {
-    checkNotClosed();
-    // tricky: append takes start, end pair...
-    target.append(str, off, off + len);
-  }
-
-  @Override public Writer append(char c) throws IOException {
-    checkNotClosed();
-    target.append(c);
-    return this;
-  }
-
-  @Override public Writer append(CharSequence charSeq) throws IOException {
-    checkNotClosed();
-    target.append(charSeq);
-    return this;
-  }
-
-  @Override public Writer append(CharSequence charSeq, int start, int end)
-      throws IOException {
-    checkNotClosed();
-    target.append(charSeq, start, end);
-    return this;
-  }
-
-  private void checkNotClosed() throws IOException {
-    if (closed) {
-      throw new IOException("Cannot write to a closed writer.");
-    }
-  }
-}
diff --git a/src/com/google/common/io/ByteArrayDataInput.java b/src/com/google/common/io/ByteArrayDataInput.java
deleted file mode 100644
index 84e305a..0000000
--- a/src/com/google/common/io/ByteArrayDataInput.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2009 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.io;
-
-import java.io.DataInput;
-import java.io.IOException;
-
-/**
- * An extension of {@code DataInput} for reading from in-memory byte arrays; its
- * methods offer identical functionality but do not throw {@link IOException}.
- * If any method encounters the end of the array prematurely, it throws {@link
- * IllegalStateException}.
- *
- * @author Kevin Bourrillion
- * @since 2009.09.15 <b>tentative</b>
- */
-public interface ByteArrayDataInput extends DataInput {
-  /*@Override*/ void readFully(byte b[]);
-  /*@Override*/ void readFully(byte b[], int off, int len);
-  /*@Override*/ int skipBytes(int n);
-  /*@Override*/ boolean readBoolean();
-  /*@Override*/ byte readByte();
-  /*@Override*/ int readUnsignedByte();
-  /*@Override*/ short readShort();
-  /*@Override*/ int readUnsignedShort();
-  /*@Override*/ char readChar();
-  /*@Override*/ int readInt();
-  /*@Override*/ long readLong();
-  /*@Override*/ float readFloat();
-  /*@Override*/ double readDouble();
-  /*@Override*/ String readLine();
-  /*@Override*/ String readUTF();
-}
diff --git a/src/com/google/common/io/ByteArrayDataOutput.java b/src/com/google/common/io/ByteArrayDataOutput.java
deleted file mode 100644
index fc27e28..0000000
--- a/src/com/google/common/io/ByteArrayDataOutput.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (C) 2009 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.io;
-
-import java.io.DataOutput;
-import java.io.IOException;
-
-/**
- * An extension of {@code DataOutput} for writing to in-memory byte arrays; its
- * methods offer identical functionality but do not throw {@link IOException}.
- *
- * @author Jayaprabhakar Kadarkarai
- * @since 2009.09.15 <b>tentative</b>
- */
-public interface ByteArrayDataOutput extends DataOutput {
-  /*@Override*/ void write(int b);
-  /*@Override*/ void write(byte b[]);
-  /*@Override*/ void write(byte b[], int off, int len);
-  /*@Override*/ void writeBoolean(boolean v);
-  /*@Override*/ void writeByte(int v);
-  /*@Override*/ void writeShort(int v);
-  /*@Override*/ void writeChar(int v);
-  /*@Override*/ void writeInt(int v);
-  /*@Override*/ void writeLong(long v);
-  /*@Override*/ void writeFloat(float v);
-  /*@Override*/ void writeDouble(double v);
-  /*@Override*/ void writeChars(String s);
-  /*@Override*/ void writeUTF(String s);
-
-  /**
-   * @deprecated This method is dangerous as it discards the high byte of
-   * every character. For UTF-8, use {@code write(s.getBytes(Charsets.UTF_8))}.
-   */
-  @Deprecated /*@Override*/ void writeBytes(String s);
-
-  /**
-   * Returns the contents that have been written to this instance,
-   * as a byte array.
-   */
-  byte[] toByteArray();
-}
diff --git a/src/com/google/common/io/ByteProcessor.java b/src/com/google/common/io/ByteProcessor.java
deleted file mode 100644
index 371bfb3..0000000
--- a/src/com/google/common/io/ByteProcessor.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (C) 2009 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.io;
-
-import java.io.IOException;
-
-/**
- * A callback interface to process bytes from a stream.
- *
- * <p>{@link #processBytes} will be called for each line that is read, and
- * should return {@code false} when you want to stop processing.
- *
- * @author Chris Nokleberg
- * @since 2009.09.15 <b>tentative</b>
- */
-public interface ByteProcessor<T> {
-  /**
-   * This method will be called for each chunk of bytes in an
-   * input stream. The implementation should process the bytes
-   * from {@code buf[off]} through {@code buf[off + len - 1]}
-   * (inclusive).
-   *
-   * @param buf the byte array containing the data to process
-   * @param off the initial offset into the array
-   * @param len the length of data to be processed
-   * @return true to continue processing, false to stop
-   */
-  boolean processBytes(byte[] buf, int off, int len) throws IOException;
-
-  /** Return the result of processing all the bytes. */
-  T getResult();
-}
diff --git a/src/com/google/common/io/ByteStreams.java b/src/com/google/common/io/ByteStreams.java
deleted file mode 100644
index dc1b483..0000000
--- a/src/com/google/common/io/ByteStreams.java
+++ /dev/null
@@ -1,846 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.io;
-
-import com.google.common.base.Preconditions;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.DataInput;
-import java.io.DataInputStream;
-import java.io.DataOutput;
-import java.io.DataOutputStream;
-import java.io.EOFException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.nio.ByteBuffer;
-import java.nio.channels.ReadableByteChannel;
-import java.nio.channels.WritableByteChannel;
-import java.security.MessageDigest;
-import java.util.Arrays;
-import java.util.zip.Checksum;
-
-/**
- * Provides utility methods for working with byte arrays and I/O streams.
- *
- * <p>All method parameters must be non-null unless documented otherwise.
- *
- * @author Chris Nokleberg
- * @since 2009.09.15 <b>tentative</b>
- */
-public final class ByteStreams {
-  private static final int BUF_SIZE = 0x1000; // 4K
-
-  private ByteStreams() {}
-
-  /**
-   * Returns a factory that will supply instances of
-   * {@link ByteArrayInputStream} that read from the given byte array.
-   *
-   * @param b the input buffer
-   * @return the factory
-   */
-  public static InputSupplier<ByteArrayInputStream> newInputStreamSupplier(
-      byte[] b) {
-    return newInputStreamSupplier(b, 0, b.length);
-  }
-
-  /**
-   * Returns a factory that will supply instances of
-   * {@link ByteArrayInputStream} that read from the given byte array.
-   *
-   * @param b the input buffer
-   * @param off the offset in the buffer of the first byte to read
-   * @param len the maximum number of bytes to read from the buffer
-   * @return the factory
-   */
-  public static InputSupplier<ByteArrayInputStream> newInputStreamSupplier(
-      final byte[] b, final int off, final int len) {
-    return new InputSupplier<ByteArrayInputStream>() {
-      public ByteArrayInputStream getInput() {
-        return new ByteArrayInputStream(b, off, len);
-      }
-    };
-  }
-
-  /**
-   * Writes a byte array to an output stream from the given supplier.
-   *
-   * @param from the bytes to write
-   * @param to the output supplier
-   * @throws IOException if an I/O error occurs
-   */
-  public static void write(byte[] from,
-      OutputSupplier<? extends OutputStream> to) throws IOException {
-    Preconditions.checkNotNull(from);
-    boolean threw = true;
-    OutputStream out = to.getOutput();
-    try {
-      out.write(from);
-      threw = false;
-    } finally {
-      Closeables.close(out, threw);
-    }
-  }
-
-  /**
-   * Opens input and output streams from the given suppliers, copies all
-   * bytes from the input to the output, and closes the streams.
-   *
-   * @param from the input factory
-   * @param to the output factory
-   * @return the number of bytes copied
-   * @throws IOException if an I/O error occurs
-   */
-  public static long copy(InputSupplier<? extends InputStream> from,
-      OutputSupplier<? extends OutputStream> to) throws IOException {
-    boolean threw = true;
-    InputStream in = from.getInput();
-    try {
-      OutputStream out = to.getOutput();
-      try {
-        long count = copy(in, out);
-        threw = false;
-        return count;
-      } finally {
-        Closeables.close(out, threw);
-      }
-    } finally {
-      Closeables.close(in, threw);
-    }
-  }
-
-  /**
-   * Opens an input stream from the supplier, copies all bytes from the
-   * input to the output, and closes the input stream. Does not close
-   * or flush the output stream.
-   *
-   * @param from the input factory
-   * @param to the output stream to write to
-   * @return the number of bytes copied
-   * @throws IOException if an I/O error occurs
-   */
-  public static long copy(InputSupplier<? extends InputStream> from,
-      OutputStream to) throws IOException {
-    boolean threw = true;
-    InputStream in = from.getInput();
-    try {
-      long count = copy(in, to);
-      threw = false;
-      return count;
-    } finally {
-      Closeables.close(in, threw);
-    }
-  }
-
-  /**
-   * Copies all bytes from the input stream to the output stream.
-   * Does not close or flush either stream.
-   *
-   * @param from the input stream to read from
-   * @param to the output stream to write to
-   * @return the number of bytes copied
-   * @throws IOException if an I/O error occurs
-   */
-  public static long copy(InputStream from, OutputStream to)
-      throws IOException {
-    byte[] buf = new byte[BUF_SIZE];
-    long total = 0;
-    while (true) {
-      int r = from.read(buf);
-      if (r == -1) {
-        break;
-      }
-      to.write(buf, 0, r);
-      total += r;
-    }
-    return total;
-  }
-
-  /**
-   * Copies all bytes from the readable channel to the writable channel.
-   * Does not close or flush either channel.
-   *
-   * @param from the readable channel to read from
-   * @param to the writable channel to write to
-   * @return the number of bytes copied
-   * @throws IOException if an I/O error occurs
-   */
-  public static long copy(ReadableByteChannel from,
-      WritableByteChannel to) throws IOException {
-    ByteBuffer buf = ByteBuffer.allocate(BUF_SIZE);
-    long total = 0;
-    while (from.read(buf) != -1) {
-      buf.flip();
-      while (buf.hasRemaining()) {
-        total += to.write(buf);
-      }
-      buf.clear();
-    }
-    return total;
-  }
-
-  /**
-   * Reads all bytes from an input stream into a byte array.
-   * Does not close the stream.
-   *
-   * @param in the input stream to read from
-   * @return a byte array containing all the bytes from the stream
-   * @throws IOException if an I/O error occurs
-   */
-  public static byte[] toByteArray(InputStream in) throws IOException {
-    ByteArrayOutputStream out = new ByteArrayOutputStream();
-    copy(in, out);
-    return out.toByteArray();
-  }
-
-  /**
-   * Returns the data from a {@link InputStream} factory as a byte array.
-   *
-   * @param supplier the factory
-   * @throws IOException if an I/O error occurs
-   */
-  public static byte[] toByteArray(
-      InputSupplier<? extends InputStream> supplier) throws IOException {
-    boolean threw = true;
-    InputStream in = supplier.getInput();
-    try {
-      byte[] result = toByteArray(in);
-      threw = false;
-      return result;
-    } finally {
-      Closeables.close(in, threw);
-    }
-  }
-
-  /**
-   * Returns a new {@link ByteArrayDataInput} instance to read from the {@code
-   * bytes} array from the beginning.
-   */
-  public static ByteArrayDataInput newDataInput(byte[] bytes) {
-    return new ByteArrayDataInputStream(bytes);
-  }
-
-  /**
-   * Returns a new {@link ByteArrayDataInput} instance to read from the {@code
-   * bytes} array, starting at the given position.
-   *
-   * @throws IndexOutOfBoundsException if {@code start} is negative or greater
-   *     than the length of the array
-   */
-  public static ByteArrayDataInput newDataInput(byte[] bytes, int start) {
-    Preconditions.checkPositionIndex(start, bytes.length);
-    return new ByteArrayDataInputStream(bytes, start);
-  }
-
-  private static class ByteArrayDataInputStream implements ByteArrayDataInput {
-    final DataInput input;
-
-    ByteArrayDataInputStream(byte[] bytes) {
-      this.input = new DataInputStream(new ByteArrayInputStream(bytes));
-    }
-
-    ByteArrayDataInputStream(byte[] bytes, int start) {
-      this.input = new DataInputStream(
-          new ByteArrayInputStream(bytes, start, bytes.length - start));
-    }
-
-    /*@Override*/ public void readFully(byte b[]) {
-      try {
-        input.readFully(b);
-      } catch (IOException e) {
-        throw new IllegalStateException(e);
-      }
-    }
-
-    /*@Override*/ public void readFully(byte b[], int off, int len) {
-      try {
-        input.readFully(b, off, len);
-      } catch (IOException e) {
-        throw new IllegalStateException(e);
-      }
-    }
-
-    /*@Override*/ public int skipBytes(int n) {
-      try {
-        return input.skipBytes(n);
-      } catch (IOException e) {
-        throw new IllegalStateException(e);
-      }
-    }
-
-    /*@Override*/ public boolean readBoolean() {
-      try {
-        return input.readBoolean();
-      } catch (IOException e) {
-        throw new IllegalStateException(e);
-      }
-    }
-
-    /*@Override*/ public byte readByte() {
-      try {
-        return input.readByte();
-      } catch (EOFException e) {
-        throw new IllegalStateException(e);
-      } catch (IOException impossible) {
-        throw new AssertionError(impossible);
-      }
-    }
-
-    /*@Override*/ public int readUnsignedByte() {
-      try {
-        return input.readUnsignedByte();
-      } catch (IOException e) {
-        throw new IllegalStateException(e);
-      }
-    }
-
-    /*@Override*/ public short readShort() {
-      try {
-        return input.readShort();
-      } catch (IOException e) {
-        throw new IllegalStateException(e);
-      }
-    }
-
-    /*@Override*/ public int readUnsignedShort() {
-      try {
-        return input.readUnsignedShort();
-      } catch (IOException e) {
-        throw new IllegalStateException(e);
-      }
-    }
-
-    /*@Override*/ public char readChar() {
-      try {
-        return input.readChar();
-      } catch (IOException e) {
-        throw new IllegalStateException(e);
-      }
-    }
-
-    /*@Override*/ public int readInt() {
-      try {
-        return input.readInt();
-      } catch (IOException e) {
-        throw new IllegalStateException(e);
-      }
-    }
-
-    /*@Override*/ public long readLong() {
-      try {
-        return input.readLong();
-      } catch (IOException e) {
-        throw new IllegalStateException(e);
-      }
-    }
-
-    /*@Override*/ public float readFloat() {
-      try {
-        return input.readFloat();
-      } catch (IOException e) {
-        throw new IllegalStateException(e);
-      }
-    }
-
-    /*@Override*/ public double readDouble() {
-      try {
-        return input.readDouble();
-      } catch (IOException e) {
-        throw new IllegalStateException(e);
-      }
-    }
-
-    /*@Override*/ public String readLine() {
-      try {
-        return input.readLine();
-      } catch (IOException e) {
-        throw new IllegalStateException(e);
-      }
-    }
-
-    /*@Override*/ public String readUTF() {
-      try {
-        return input.readUTF();
-      } catch (IOException e) {
-        throw new IllegalStateException(e);
-      }
-    }
-  }
-
-  /**
-   * Returns a new {@link ByteArrayDataOutput} instance with a default size.
-   */
-  public static ByteArrayDataOutput newDataOutput() {
-    return new ByteArrayDataOutputStream();
-  }
-
-  /**
-   * Returns a new {@link ByteArrayDataOutput} instance sized to hold
-   * {@code size} bytes before resizing.
-   *
-   * @throws IllegalArgumentException if {@code size} is negative
-   */
-  public static ByteArrayDataOutput newDataOutput(int size) {
-    Preconditions.checkArgument(size >= 0, "Invalid size: %s", size);
-    return new ByteArrayDataOutputStream(size);
-  }
-
-  @SuppressWarnings("deprecation") // for writeBytes
-  private static class ByteArrayDataOutputStream
-      implements ByteArrayDataOutput {
-
-    final DataOutput output;
-    final ByteArrayOutputStream byteArrayOutputSteam;
-
-    ByteArrayDataOutputStream() {
-      this(new ByteArrayOutputStream());
-    }
-
-    ByteArrayDataOutputStream(int size) {
-      this(new ByteArrayOutputStream(size));
-    }
-
-    ByteArrayDataOutputStream(ByteArrayOutputStream byteArrayOutputSteam) {
-      this.byteArrayOutputSteam = byteArrayOutputSteam;
-      output = new DataOutputStream(byteArrayOutputSteam);
-    }
-
-    /*@Override*/ public void write(int b) {
-      try {
-        output.write(b);
-      } catch (IOException impossible) {
-        throw new AssertionError(impossible);
-      }
-    }
-
-    /*@Override*/ public void write(byte[] b) {
-      try {
-        output.write(b);
-      } catch (IOException impossible) {
-        throw new AssertionError(impossible);
-      }
-    }
-
-    /*@Override*/ public void write(byte[] b, int off, int len) {
-      try {
-        output.write(b, off, len);
-      } catch (IOException impossible) {
-        throw new AssertionError(impossible);
-      }
-    }
-
-    /*@Override*/ public void writeBoolean(boolean v) {
-      try {
-        output.writeBoolean(v);
-      } catch (IOException impossible) {
-        throw new AssertionError(impossible);
-      }
-    }
-
-    /*@Override*/ public void writeByte(int v) {
-      try {
-        output.writeByte(v);
-      } catch (IOException impossible) {
-        throw new AssertionError(impossible);
-      }
-    }
-
-    /*@Override*/ public void writeBytes(String s) {
-      try {
-        output.writeBytes(s);
-      } catch (IOException impossible) {
-        throw new AssertionError(impossible);
-      }
-    }
-
-    /*@Override*/ public void writeChar(int v) {
-      try {
-        output.writeChar(v);
-      } catch (IOException impossible) {
-        throw new AssertionError(impossible);
-      }
-    }
-
-    /*@Override*/ public void writeChars(String s) {
-      try {
-        output.writeChars(s);
-      } catch (IOException impossible) {
-        throw new AssertionError(impossible);
-      }
-    }
-
-    /*@Override*/ public void writeDouble(double v) {
-      try {
-        output.writeDouble(v);
-      } catch (IOException impossible) {
-        throw new AssertionError(impossible);
-      }
-    }
-
-    /*@Override*/ public void writeFloat(float v) {
-      try {
-        output.writeFloat(v);
-      } catch (IOException impossible) {
-        throw new AssertionError(impossible);
-      }
-    }
-
-    /*@Override*/ public void writeInt(int v) {
-      try {
-        output.writeInt(v);
-      } catch (IOException impossible) {
-        throw new AssertionError(impossible);
-      }
-    }
-
-    /*@Override*/ public void writeLong(long v) {
-      try {
-        output.writeLong(v);
-      } catch (IOException impossible) {
-        throw new AssertionError(impossible);
-      }
-    }
-
-    /*@Override*/ public void writeShort(int v) {
-      try {
-        output.writeShort(v);
-      } catch (IOException impossible) {
-        throw new AssertionError(impossible);
-      }
-    }
-
-    /*@Override*/ public void writeUTF(String s) {
-      try {
-        output.writeUTF(s);
-      } catch (IOException impossible) {
-        throw new AssertionError(impossible);
-      }
-    }
-
-    /*@Override*/ public byte[] toByteArray() {
-      return byteArrayOutputSteam.toByteArray();
-    }
-
-  }
-
-  // TODO: Not all streams support skipping.
-  /** Returns the length of a supplied input stream, in bytes. */
-  public static long length(InputSupplier<? extends InputStream> supplier)
-      throws IOException {
-    long count = 0;
-    boolean threw = true;
-    InputStream in = supplier.getInput();
-    try {
-      while (true) {
-        // We skip only Integer.MAX_VALUE due to JDK overflow bugs.
-        long amt = in.skip(Integer.MAX_VALUE);
-        if (amt == 0) {
-          if (in.read() == -1) {
-            threw = false;
-            return count;
-          }
-          count++;
-        } else {
-          count += amt;
-        }
-      }
-    } finally {
-      Closeables.close(in, threw);
-    }
-  }
-
-  /**
-   * Returns true if the supplied input streams contain the same bytes.
-   *
-   * @throws IOException if an I/O error occurs
-   */
-  public static boolean equal(InputSupplier<? extends InputStream> supplier1,
-      InputSupplier<? extends InputStream> supplier2) throws IOException {
-    byte[] buf1 = new byte[BUF_SIZE];
-    byte[] buf2 = new byte[BUF_SIZE];
-
-    boolean threw = true;
-    InputStream in1 = supplier1.getInput();
-    try {
-      InputStream in2 = supplier2.getInput();
-      try {
-        while (true) {
-          int read1 = read(in1, buf1, 0, BUF_SIZE);
-          int read2 = read(in2, buf2, 0, BUF_SIZE);
-          if (read1 != read2 || !Arrays.equals(buf1, buf2)) {
-            threw = false;
-            return false;
-          } else if (read1 != BUF_SIZE) {
-            threw = false;
-            return true;
-          }
-        }
-      } finally {
-        Closeables.close(in2, threw);
-      }
-    } finally {
-      Closeables.close(in1, threw);
-    }
-  }
-
-  /**
-   * Attempts to read enough bytes from the stream to fill the given byte array,
-   * with the same behavior as {@link DataInput#readFully(byte[])}.
-   * Does not close the stream.
-   *
-   * @param in the input stream to read from.
-   * @param b the buffer into which the data is read.
-   * @throws EOFException if this stream reaches the end before reading all
-   *     the bytes.
-   * @throws IOException if an I/O error occurs.
-   */
-  public static void readFully(InputStream in, byte[] b) throws IOException {
-    readFully(in, b, 0, b.length);
-  }
-
-  /**
-   * Attempts to read {@code len} bytes from the stream into the given array
-   * starting at {@code off}, with the same behavior as
-   * {@link DataInput#readFully(byte[], int, int)}. Does not close the
-   * stream.
-   *
-   * @param in the input stream to read from.
-   * @param b the buffer into which the data is read.
-   * @param off an int specifying the offset into the data.
-   * @param len an int specifying the number of bytes to read.
-   * @throws EOFException if this stream reaches the end before reading all
-   *     the bytes.
-   * @throws IOException if an I/O error occurs.
-   */
-  public static void readFully(InputStream in, byte[] b, int off, int len)
-      throws IOException {
-    if (read(in, b, off, len) != len) {
-      throw new EOFException();
-    }
-  }
-
-  /**
-   * Discards {@code n} bytes of data from the input stream. This method
-   * will block until the full amount has been skipped. Does not close the
-   * stream.
-   *
-   * @param in the input stream to read from
-   * @param n the number of bytes to skip
-   * @throws EOFException if this stream reaches the end before skipping all
-   *     the bytes
-   * @throws IOException if an I/O error occurs, or the stream does not
-   *     support skipping
-   */
-  public static void skipFully(InputStream in, long n) throws IOException {
-    while (n > 0) {
-      long amt = in.skip(n);
-      if (amt == 0) {
-        // Force a blocking read to avoid infinite loop
-        if (in.read() == -1) {
-          throw new EOFException();
-        }
-        n--;
-      } else {
-        n -= amt;
-      }
-    }
-  }
-
-  /**
-   * Process the bytes of a supplied stream
-   *
-   * @param supplier the input stream factory
-   * @param processor the object to which to pass the bytes of the stream
-   * @return the result of the byte processor
-   * @throws IOException if an I/O error occurs
-   */
-  public static <T> T readBytes(InputSupplier<? extends InputStream> supplier,
-      ByteProcessor<T> processor) throws IOException {
-    byte[] buf = new byte[BUF_SIZE];
-    boolean threw = true;
-    InputStream in = supplier.getInput();
-    try {
-      int amt;
-      do {
-        amt = in.read(buf);
-        if (amt == -1) {
-          threw = false;
-          break;
-        }
-      } while (processor.processBytes(buf, 0, amt));
-      return processor.getResult();
-    } finally {
-      Closeables.close(in, threw);
-    }
-  }
-
-  /**
-   * Computes and returns the checksum value for a supplied input stream.
-   * The checksum object is reset when this method returns successfully.
-   *
-   * @param supplier the input stream factory
-   * @param checksum the checksum object
-   * @return the result of {@link Checksum#getValue} after updating the
-   *     checksum object with all of the bytes in the stream
-   * @throws IOException if an I/O error occurs
-   */
-  public static long getChecksum(InputSupplier<? extends InputStream> supplier,
-      final Checksum checksum) throws IOException {
-    return readBytes(supplier, new ByteProcessor<Long>() {
-      public boolean processBytes(byte[] buf, int off, int len) {
-        checksum.update(buf, off, len);
-        return true;
-      }
-
-      public Long getResult() {
-        long result = checksum.getValue();
-        checksum.reset();
-        return result;
-      }
-    });
-  }
-
-  /**
-   * Computes and returns the digest value for a supplied input stream.
-   * The digest object is reset when this method returns successfully.
-   *
-   * @param supplier the input stream factory
-   * @param md the digest object
-   * @return the result of {@link MessageDigest#digest()} after updating the
-   *     digest object with all of the bytes in the stream
-   * @throws IOException if an I/O error occurs
-   */
-  public static byte[] getDigest(InputSupplier<? extends InputStream> supplier,
-      final MessageDigest md) throws IOException {
-    return readBytes(supplier, new ByteProcessor<byte[]>() {
-      public boolean processBytes(byte[] buf, int off, int len) {
-        md.update(buf, off, len);
-        return true;
-      }
-
-      public byte[] getResult() {
-        return md.digest();
-      }
-    });
-  }
-
-  /**
-   * Reads some bytes from an input stream and stores them into the buffer array
-   * {@code b}. This method blocks until {@code len} bytes of input data have
-   * been read into the array, or end of file is detected. The number of bytes
-   * read is returned, possibly zero. Does not close the stream.
-   *
-   * <p>A caller can detect EOF if the number of bytes read is less than
-   * {@code len}. All subsequent calls on the same stream will return zero.
-   *
-   * <p>If {@code b} is null, a {@code NullPointerException} is thrown. If
-   * {@code off} is negative, or {@code len} is negative, or {@code off+len} is
-   * greater than the length of the array {@code b}, then an
-   * {@code IndexOutOfBoundsException} is thrown. If {@code len} is zero, then
-   * no bytes are read. Otherwise, the first byte read is stored into element
-   * {@code b[off]}, the next one into {@code b[off+1]}, and so on. The number
-   * of bytes read is, at most, equal to {@code len}.
-   *
-   * @param in the input stream to read from
-   * @param b the buffer into which the data is read
-   * @param off an int specifying the offset into the data
-   * @param len an int specifying the number of bytes to read
-   * @return the number of bytes read
-   * @throws IOException if an I/O error occurs
-   */
-  public static int read(InputStream in, byte[] b, int off, int len)
-      throws IOException {
-    if (len < 0) {
-      throw new IndexOutOfBoundsException("len is negative");
-    }
-    int total = 0;
-    while (total < len) {
-      int result = in.read(b, off + total, len - total);
-      if (result == -1) {
-        break;
-      }
-      total += result;
-    }
-    return total;
-  }
-
-  /**
-   * Returns an {@link InputSupplier} that returns input streams from the
-   * an underlying supplier, where each stream starts at the given
-   * offset and is limited to the specified number of bytes.
-   *
-   * @param supplier the supplier from which to get the raw streams
-   * @param offset the offset in bytes into the underlying stream where
-   *     the returned streams will start
-   * @param length the maximum length of the returned streams
-   * @throws IllegalArgumentException if offset or length are negative
-   */
-  public static InputSupplier<InputStream> slice(
-      final InputSupplier<? extends InputStream> supplier,
-      final long offset,
-      final long length) {
-    Preconditions.checkNotNull(supplier);
-    Preconditions.checkArgument(offset >= 0, "offset is negative");
-    Preconditions.checkArgument(length >= 0, "length is negative");
-    return new InputSupplier<InputStream>() {
-      /*@Override*/ public InputStream getInput() throws IOException {
-        InputStream in = supplier.getInput();
-        if (offset > 0) {
-          try {
-            skipFully(in, offset);
-          } catch (IOException e) {
-            Closeables.closeQuietly(in);
-            throw e;
-          }
-        }
-        return new LimitInputStream(in, length);
-      }
-    };
-  }
-
-  /**
-   * Joins multiple {@link InputStream} suppliers into a single supplier.
-   * Streams returned from the supplier will contain the concatenated data from
-   * the streams of the underlying suppliers.
-   *
-   * <p>Only one underlying input stream will be open at a time. Closing the
-   * joined stream will close the open underlying stream.
-   *
-   * <p>Reading from the joined stream will throw a {@link NullPointerException}
-   * if any of the suppliers are null or return null.
-   *
-   * @param suppliers the suppliers to concatenate
-   * @return a supplier that will return a stream containing the concatenated
-   *     stream data
-   */
-  public static InputSupplier<InputStream> join(
-     final Iterable<? extends InputSupplier<? extends InputStream>> suppliers) {
-    return new InputSupplier<InputStream>() {
-      /*@Override*/ public InputStream getInput() throws IOException {
-        return new MultiInputStream(suppliers.iterator());
-      }
-    };
-  }
-
-  /** Varargs form of {@link #join(Iterable)}. */
-  public static InputSupplier<InputStream> join(
-      InputSupplier<? extends InputStream>... suppliers) {
-    return join(Arrays.asList(suppliers));
-  }
-}
diff --git a/src/com/google/common/io/CharStreams.java b/src/com/google/common/io/CharStreams.java
deleted file mode 100644
index 1f48d6e..0000000
--- a/src/com/google/common/io/CharStreams.java
+++ /dev/null
@@ -1,434 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.io;
-
-import com.google.common.base.Preconditions;
-
-import java.io.Closeable;
-import java.io.EOFException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.io.Reader;
-import java.io.StringReader;
-import java.io.Writer;
-import java.nio.CharBuffer;
-import java.nio.charset.Charset;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * Provides utility methods for working with character streams.
- *
- * <p>All method parameters must be non-null unless documented otherwise.
- *
- * <p>Some of the methods in this class take arguments with a generic type of
- * {@code Readable & Closeable}. A {@link java.io.Reader} implements both of
- * those interfaces. Similarly for {@code Appendable & Closeable} and
- * {@link java.io.Writer}.
- *
- * @author Chris Nokleberg
- * @author Bin Zhu
- * @since 2009.09.15 <b>tentative</b>
- */
-public final class CharStreams {
-  private static final int BUF_SIZE = 0x800; // 2K chars (4K bytes)
-
-  private CharStreams() {}
-
-  /**
-   * Returns a factory that will supply instances of {@link StringReader} that
-   * read a string value.
-   *
-   * @param value the string to read
-   * @return the factory
-   */
-  public static InputSupplier<StringReader> newReaderSupplier(final String value) {
-    Preconditions.checkNotNull(value);
-    return new InputSupplier<StringReader>() {
-      public StringReader getInput() {
-        return new StringReader(value);
-      }
-    };
-  }
-
-  /**
-   * Returns a factory that will supply instances of {@link InputStreamReader},
-   * using the given {@link InputStream} factory and character set.
-   *
-   * @param in the factory that will be used to open input streams
-   * @param charset the character set used to decode the input stream
-   * @return the factory
-   */
-  public static InputSupplier<InputStreamReader> newReaderSupplier(
-      final InputSupplier<? extends InputStream> in, final Charset charset) {
-    Preconditions.checkNotNull(in);
-    Preconditions.checkNotNull(charset);
-    return new InputSupplier<InputStreamReader>() {
-      public InputStreamReader getInput() throws IOException {
-        return new InputStreamReader(in.getInput(), charset);
-      }
-    };
-  }
-
-  /**
-   * Returns a factory that will supply instances of {@link OutputStreamWriter},
-   * using the given {@link OutputStream} factory and character set.
-   *
-   * @param out the factory that will be used to open output streams
-   * @param charset the character set used to encode the output stream
-   * @return the factory
-   */
-  public static OutputSupplier<OutputStreamWriter> newWriterSupplier(
-      final OutputSupplier<? extends OutputStream> out, final Charset charset) {
-    Preconditions.checkNotNull(out);
-    Preconditions.checkNotNull(charset);
-    return new OutputSupplier<OutputStreamWriter>() {
-      public OutputStreamWriter getOutput() throws IOException {
-        return new OutputStreamWriter(out.getOutput(), charset);
-      }
-    };
-  }
-
-  /**
-   * Writes a character sequence (such as a string) to an appendable
-   * object from the given supplier.
-   *
-   * @param from the character sequence to write
-   * @param to the output supplier
-   * @throws IOException if an I/O error occurs
-   */
-  public static <W extends Appendable & Closeable> void write(CharSequence from,
-      OutputSupplier<W> to) throws IOException {
-    Preconditions.checkNotNull(from);
-    boolean threw = true;
-    W out = to.getOutput();
-    try {
-      out.append(from);
-      threw = false;
-    } finally {
-      Closeables.close(out, threw);
-    }
-  }
-
-  /**
-   * Opens {@link Readable} and {@link Appendable} objects from the
-   * given factories, copies all characters between the two, and closes
-   * them.
-   *
-   * @param from the input factory
-   * @param to the output factory
-   * @return the number of characters copied
-   * @throws IOException if an I/O error occurs
-   */
-  public static <R extends Readable & Closeable,
-      W extends Appendable & Closeable> long copy(InputSupplier<R> from,
-      OutputSupplier<W> to) throws IOException {
-    boolean threw = true;
-    R in = from.getInput();
-    try {
-      W out = to.getOutput();
-      try {
-        long count = copy(in, out);
-        threw = false;
-        return count;
-      } finally {
-        Closeables.close(out, threw);
-      }
-    } finally {
-      Closeables.close(in, threw);
-    }
-  }
-
-  /**
-   * Opens a {@link Readable} object from the supplier, copies all characters
-   * to the {@link Appendable} object, and closes the input. Does not close
-   * or flush the output.
-   *
-   * @param from the input factory
-   * @param to the object to write to
-   * @return the number of characters copied
-   * @throws IOException if an I/O error occurs
-   */
-  public static <R extends Readable & Closeable> long copy(InputSupplier<R> from,
-      Appendable to) throws IOException {
-    boolean threw = true;
-    R in = from.getInput();
-    try {
-      long count = copy(in, to);
-      threw = false;
-      return count;
-    } finally {
-      Closeables.close(in, threw);
-    }
-  }
-
-  /**
-   * Copies all characters between the {@link Readable} and {@link Appendable}
-   * objects. Does not close or flush either object.
-   *
-   * @param from the object to read from
-   * @param to the object to write to
-   * @return the number of characters copied
-   * @throws IOException if an I/O error occurs
-   */
-  public static long copy(Readable from, Appendable to) throws IOException {
-    CharBuffer buf = CharBuffer.allocate(BUF_SIZE);
-    long total = 0;
-    while (true) {
-      int r = from.read(buf);
-      if (r == -1) {
-        break;
-      }
-      buf.flip();
-      to.append(buf, 0, r);
-      total += r;
-    }
-    return total;
-  }
-
-  /**
-   * Reads all characters from a {@link Readable} object into a {@link String}.
-   * Does not close the {@code Readable}.
-   *
-   * @param r the object to read from
-   * @return a string containing all the characters
-   * @throws IOException if an I/O error occurs
-   */
-  public static String toString(Readable r) throws IOException {
-    return toStringBuilder(r).toString();
-  }
-
-  /**
-   * Returns the characters from a {@link Readable} & {@link Closeable} object
-   * supplied by a factory as a {@link String}.
-   *
-   * @param supplier the factory to read from
-   * @return a string containing all the characters
-   * @throws IOException if an I/O error occurs
-   */
-  public static <R extends Readable & Closeable> String toString(
-      InputSupplier<R> supplier) throws IOException {
-    return toStringBuilder(supplier).toString();
-  }
-
-  /**
-   * Reads all characters from a {@link Readable} object into a new
-   * {@link StringBuilder} instance. Does not close the {@code Readable}.
-   *
-   * @param r the object to read from
-   * @return a {@link StringBuilder} containing all the characters
-   * @throws IOException if an I/O error occurs
-   */
-  private static StringBuilder toStringBuilder(Readable r) throws IOException {
-    StringBuilder sb = new StringBuilder();
-    copy(r, sb);
-    return sb;
-  }
-
-  /**
-   * Returns the characters from a {@link Readable} & {@link Closeable} object
-   * supplied by a factory as a new {@link StringBuilder} instance.
-   *
-   * @param supplier the factory to read from
-   * @throws IOException if an I/O error occurs
-   */
-  private static <R extends Readable & Closeable> StringBuilder toStringBuilder(
-      InputSupplier<R> supplier) throws IOException {
-    boolean threw = true;
-    R r = supplier.getInput();
-    try {
-      StringBuilder result = toStringBuilder(r);
-      threw = false;
-      return result;
-    } finally {
-      Closeables.close(r, threw);
-    }
-  }
-
-  /**
-   * Reads the first line from a {@link Readable} & {@link Closeable} object
-   * supplied by a factory. The line does not include line-termination
-   * characters, but does include other leading and trailing whitespace.
-   *
-   * @param supplier the factory to read from
-   * @return the first line, or null if the reader is empty
-   * @throws IOException if an I/O error occurs
-   */
-  public static <R extends Readable & Closeable> String readFirstLine(
-      InputSupplier<R> supplier) throws IOException {
-    boolean threw = true;
-    R r = supplier.getInput();
-    try {
-      String line = new LineReader(r).readLine();
-      threw = false;
-      return line;
-    } finally {
-      Closeables.close(r, threw);
-    }
-  }
-
-  /**
-   * Reads all of the lines from a {@link Readable} & {@link Closeable} object
-   * supplied by a factory. The lines do not include line-termination
-   * characters, but do include other leading and trailing whitespace.
-   *
-   * @param supplier the factory to read from
-   * @return a mutable {@link List} containing all the lines
-   * @throws IOException if an I/O error occurs
-   */
-  public static <R extends Readable & Closeable> List<String> readLines(
-      InputSupplier<R> supplier) throws IOException {
-    boolean threw = true;
-    R r = supplier.getInput();
-    try {
-      List<String> result = readLines(r);
-      threw = false;
-      return result;
-    } finally {
-      Closeables.close(r, threw);
-    }
-  }
-
-  /**
-   * Reads all of the lines from a {@link Readable} object. The lines do
-   * not include line-termination characters, but do include other
-   * leading and trailing whitespace.
-   *
-   * <p>Does not close the {@code Readable}. If reading files or resources you
-   * should use the {@link Files#readLines} and {@link Resources#readLines}
-   * methods.
-   *
-   * @param r the object to read from
-   * @return a mutable {@link List} containing all the lines
-   * @throws IOException if an I/O error occurs
-   */
-  public static List<String> readLines(Readable r) throws IOException {
-    List<String> result = new ArrayList<String>();
-    LineReader lineReader = new LineReader(r);
-    String line;
-    while ((line = lineReader.readLine()) != null) {
-      result.add(line);
-    }
-    return result;
-  }
-
-  /**
-   * Streams lines from a {@link Readable} and {@link Closeable} object
-   * supplied by a factory, stopping when our callback returns false, or we
-   * have read all of the lines.
-   *
-   * @param supplier the factory to read from
-   * @param callback the LineProcessor to use to handle the lines
-   * @return the output of processing the lines
-   * @throws IOException if an I/O error occurs
-   */
-  public static <R extends Readable & Closeable, T> T readLines(
-      InputSupplier<R> supplier, LineProcessor<T> callback) throws IOException {
-    boolean threw = true;
-    R r = supplier.getInput();
-    try {
-      LineReader lineReader = new LineReader(r);
-      String line;
-      while ((line = lineReader.readLine()) != null) {
-        if (!callback.processLine(line)) {
-          break;
-        }
-      }
-      threw = false;
-    } finally {
-      Closeables.close(r, threw);
-    }
-    return callback.getResult();
-  }
-
-  /**
-   * Joins multiple {@link Reader} suppliers into a single supplier.
-   * Reader returned from the supplier will contain the concatenated data
-   * from the readers of the underlying suppliers.
-   *
-   * <p>Reading from the joined reader will throw a {@link NullPointerException}
-   * if any of the suppliers are null or return null.
-   *
-   * <p>Only one underlying reader will be open at a time. Closing the
-   * joined reader will close the open underlying reader.
-   *
-   * @param suppliers the suppliers to concatenate
-   * @return a supplier that will return a reader containing the concatenated
-   *     data
-   */
-  public static InputSupplier<Reader> join(
-      final Iterable<? extends InputSupplier<? extends Reader>> suppliers) {
-    return new InputSupplier<Reader>() {
-      /*@Override*/ public Reader getInput() throws IOException {
-        return new MultiReader(suppliers.iterator());
-      }
-    };
-  }
-
-  /** Varargs form of {@link #join(Iterable)}. */
-  public static InputSupplier<Reader> join(
-      InputSupplier<? extends Reader>... suppliers) {
-    return join(Arrays.asList(suppliers));
-  }
-
-  /**
-   * Discards {@code n} characters of data from the reader. This method
-   * will block until the full amount has been skipped. Does not close the
-   * reader.
-   *
-   * @param reader the reader to read from
-   * @param n the number of characters to skip
-   * @throws EOFException if this stream reaches the end before skipping all
-   *     the bytes
-   * @throws IOException if an I/O error occurs
-   */
-  public static void skipFully(Reader reader, long n) throws IOException {
-    while (n > 0) {
-      long amt = reader.skip(n);
-      if (amt == 0) {
-        // force a blocking read
-        if (reader.read() == -1) {
-          throw new EOFException();
-        }
-        n--;
-      } else {
-        n -= amt;
-      }
-    }
-  }
-
-  /**
-   * Returns a Writer that sends all output to the given {@link Appendable}
-   * target. Closing the writer will close the target if it is {@link
-   * Closeable}, and flushing the writer will flush the target if it is {@link
-   * java.io.Flushable}.
-   *
-   * @param target the object to which output will be sent
-   * @return a new Writer object, unless target is a Writer, in which case the
-   *     target is returned
-   */
-  public static Writer asWriter(Appendable target) {
-    if (target instanceof Writer) {
-      return (Writer) target;
-    }
-    return new AppendableWriter(target);
-  }
-}
diff --git a/src/com/google/common/io/Closeables.java b/src/com/google/common/io/Closeables.java
deleted file mode 100644
index 049a4cf..0000000
--- a/src/com/google/common/io/Closeables.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.io;
-
-import java.io.Closeable;
-import java.io.IOException;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import javax.annotation.Nullable;
-
-/**
- * Utility methods for working with {@link Closeable} objects.
- *
- * @author Michael Lancaster
- * @since 2009.09.15 <b>tentative</b>
- */
-public final class Closeables {
-  private static final Logger logger
-      = Logger.getLogger(Closeables.class.getName());
-
-  private Closeables() {}
-
-  /**
-   * Closes a {@link Closeable}, with control over whether an
-   * {@code IOException} may be thrown. This is primarily useful in a
-   * finally block, where a thrown exception needs to be logged but not
-   * propagated (otherwise the original exception will be lost).
-   *
-   * <p>If {@code swallowIOException} is true then we never throw
-   * {@code IOException} but merely log it.
-   *
-   * <p>Example:
-   *
-   * <p><pre>public void useStreamNicely() throws IOException {
-   * SomeStream stream = new SomeStream("foo");
-   * boolean threw = true;
-   * try {
-   *   // Some code which does something with the Stream. May throw a
-   *   // Throwable.
-   *   threw = false; // No throwable thrown.
-   * } finally {
-   *   // Close the stream.
-   *   // If an exception occurs, only rethrow it if (threw==false).
-   *   Closeables.close(stream, threw);
-   * }
-   * </pre>
-   *
-   * @param closeable the {@code Closeable} object to be closed, or null,
-   *     in which case this method does nothing
-   * @param swallowIOException if true, don't propagate IO exceptions
-   *     thrown by the {@code close} methods
-   * @throws IOException if {@code swallowIOException} is false and
-   *     {@code close} throws an {@code IOException}.
-   */
-  public static void close(@Nullable Closeable closeable,
-      boolean swallowIOException) throws IOException {
-    if (closeable == null) {
-      return;
-    }
-    try {
-      closeable.close();
-    } catch (IOException e) {
-      if (swallowIOException) {
-        logger.log(Level.WARNING,
-            "IOException thrown while closing Closeable.", e);
-      } else {
-        throw e;
-      }
-    }
-  }
-
-  /**
-   * Equivalent to calling {@code close(closeable, true)}, but with no
-   * IOException in the signature.
-   * @param closeable the {@code Closeable} object to be closed, or null, in
-   *      which case this method does nothing
-   */
-  public static void closeQuietly(@Nullable Closeable closeable) {
-    try {
-      close(closeable, true);
-    } catch (IOException e) {
-      logger.log(Level.SEVERE, "IOException should not have been thrown.", e);
-    }
-  }
-}
diff --git a/src/com/google/common/io/CountingInputStream.java b/src/com/google/common/io/CountingInputStream.java
deleted file mode 100644
index 7b6c2b7..0000000
--- a/src/com/google/common/io/CountingInputStream.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.io;
-
-import java.io.FilterInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * An {@link InputStream} that counts the number of bytes read.
- *
- * @author Chris Nokleberg
- * @since 2009.09.15 <b>tentative</b>
- */
-public class CountingInputStream extends FilterInputStream {
-
-  private long count;
-  private long mark = -1;
-
-  /**
-   * Wraps another input stream, counting the number of bytes read.
-   *
-   * @param in the input stream to be wrapped
-   */
-  public CountingInputStream(InputStream in) {
-    super(in);
-  }
-
-  /** Returns the number of bytes read. */
-  public long getCount() {
-    return count;
-  }
-
-  @Override public int read() throws IOException {
-    int result = in.read();
-    if (result != -1) {
-      count++;
-    }
-    return result;
-  }
-
-  @Override public int read(byte[] b, int off, int len) throws IOException {
-    int result = in.read(b, off, len);
-    if (result != -1) {
-      count += result;
-    }
-    return result;
-  }
-
-  @Override public long skip(long n) throws IOException {
-    long result = in.skip(n);
-    count += result;
-    return result;
-  }
-
-  @Override public void mark(int readlimit) {
-    in.mark(readlimit);
-    mark = count;
-    // it's okay to mark even if mark isn't supported, as reset won't work
-  }
-
-  @Override public void reset() throws IOException {
-    if (!in.markSupported()) {
-      throw new IOException("Mark not supported");
-    }
-    if (mark == -1) {
-      throw new IOException("Mark not set");
-    }
-
-    in.reset();
-    count = mark;
-  }
-}
diff --git a/src/com/google/common/io/CountingOutputStream.java b/src/com/google/common/io/CountingOutputStream.java
deleted file mode 100644
index b583170..0000000
--- a/src/com/google/common/io/CountingOutputStream.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.io;
-
-import java.io.FilterOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-
-/**
- * An OutputStream that counts the number of bytes written.
- *
- * @author Chris Nokleberg
- * @since 2009.09.15 <b>tentative</b>
- */
-public class CountingOutputStream extends FilterOutputStream {
-
-  private long count;
-
-  /**
-   * Wraps another output stream, counting the number of bytes written.
-   *
-   * @param out the output stream to be wrapped
-   */
-  public CountingOutputStream(OutputStream out) {
-    super(out);
-  }
-
-  /** Returns the number of bytes written. */
-  public long getCount() {
-    return count;
-  }
-
-  @Override public void write(byte[] b, int off, int len) throws IOException {
-    out.write(b, off, len);
-    count += len;
-  }
-
-  @Override public void write(int b) throws IOException {
-    out.write(b);
-    count++;
-  }
-}
diff --git a/src/com/google/common/io/FileBackedOutputStream.java b/src/com/google/common/io/FileBackedOutputStream.java
deleted file mode 100644
index 6dc4afe..0000000
--- a/src/com/google/common/io/FileBackedOutputStream.java
+++ /dev/null
@@ -1,204 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.io;
-
-import com.google.common.annotations.VisibleForTesting;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-/**
- * An {@link OutputStream} that starts buffering to a byte array, but
- * switches to file buffering once the data reaches a configurable size.
- *
- * <p>This class is thread-safe.
- *
- * @author Chris Nokleberg
- * @since 2009.09.15 <b>tentative</b>
- */
-public final class FileBackedOutputStream extends OutputStream {
-
-  private final int fileThreshold;
-  private final boolean resetOnFinalize;
-  private final InputSupplier<InputStream> supplier;
-
-  private OutputStream out;
-  private MemoryOutput memory;
-  private File file;
-
-  /** ByteArrayOutputStream that exposes its internals. */
-  private static class MemoryOutput extends ByteArrayOutputStream {
-    byte[] getBuffer() {
-      return buf;
-    }
-
-    int getCount() {
-      return count;
-    }
-  }
-
-  /** Returns the file holding the data (possibly null). */
-  @VisibleForTesting synchronized File getFile() {
-    return file;
-  }
-
-  /**
-   * Creates a new instance that uses the given file threshold.
-   * Equivalent to {@code ThresholdOutputStream(fileThreshold, false)}.
-   *
-   * @param fileThreshold the number of bytes before the stream should
-   *     switch to buffering to a file
-   */
-  public FileBackedOutputStream(int fileThreshold) {
-    this(fileThreshold, false);
-  }
-
-  /**
-   * Creates a new instance that uses the given file threshold, and
-   * optionally resets the data when the {@link InputSupplier} returned
-   * by {@link #getSupplier} is finalized.
-   *
-   * @param fileThreshold the number of bytes before the stream should
-   *     switch to buffering to a file
-   * @param resetOnFinalize if true, the {@link #reset} method will
-   *     be called when the {@link InputSupplier} returned by {@link #getSupplier}
-   *     is finalized
-   */
-  public FileBackedOutputStream(int fileThreshold, boolean resetOnFinalize) {
-    this.fileThreshold = fileThreshold;
-    this.resetOnFinalize = resetOnFinalize;
-    memory = new MemoryOutput();
-    out = memory;
-
-    if (resetOnFinalize) {
-      supplier = new InputSupplier<InputStream>() {
-        public InputStream getInput() throws IOException {
-          return openStream();
-        }
-
-        @Override protected void finalize() {
-          try {
-            reset();
-          } catch (Throwable t) {
-            t.printStackTrace(System.err);
-          }
-        }
-      };
-    } else {
-      supplier = new InputSupplier<InputStream>() {
-        public InputStream getInput() throws IOException {
-          return openStream();
-        }
-      };
-    }
-  }
-
-  /**
-   * Returns a supplier that may be used to retrieve the data buffered
-   * by this stream.
-   */
-  public InputSupplier<InputStream> getSupplier() {
-    return supplier;
-  }
-
-  private synchronized InputStream openStream() throws IOException {
-    if (file != null) {
-      return new FileInputStream(file);
-    } else {
-      return new ByteArrayInputStream(
-          memory.getBuffer(), 0, memory.getCount());
-    }
-  }
-
-  /**
-   * Calls {@link #close} if not already closed, and then resets this
-   * object back to its initial state, for reuse. If data was buffered
-   * to a file, it will be deleted.
-   *
-   * @throws IOException if an I/O error occurred while deleting the file buffer
-   */
-  public synchronized void reset() throws IOException {
-    try {
-      close();
-    } finally {
-      if (memory == null) {
-        memory = new MemoryOutput();
-      } else {
-        memory.reset();
-      }
-      out = memory;
-      if (file != null) {
-        File deleteMe = file;
-        file = null;
-        if (!deleteMe.delete()) {
-          throw new IOException("Could not delete: " + deleteMe);
-        }
-      }
-    }
-  }
-
-  @Override public synchronized void write(int b) throws IOException {
-    update(1);
-    out.write(b);
-  }
-
-  @Override public synchronized void write(byte[] b) throws IOException {
-    write(b, 0, b.length);
-  }
-
-  @Override public synchronized void write(byte[] b, int off, int len) throws IOException {
-    update(len);
-    out.write(b, off, len);
-  }
-
-  @Override public synchronized void close() throws IOException {
-    out.close();
-  }
-
-  @Override public synchronized void flush() throws IOException {
-    out.flush();
-  }
-
-  /**
-   * Checks if writing {@code len} bytes would go over threshold, and
-   * switches to file buffering if so.
-   */
-  private void update(int len) throws IOException {
-    if (file == null && (memory.getCount() + len > fileThreshold)) {
-      File temp = File.createTempFile("FileBackedOutputStream", null);
-      if (resetOnFinalize) {
-        // Finalizers are not guaranteed to be called on system shutdown;
-        // this is insurance.
-        temp.deleteOnExit();
-      }
-      FileOutputStream transfer = new FileOutputStream(temp);
-      transfer.write(memory.getBuffer(), 0, memory.getCount());
-      transfer.flush();
-
-      // We've successfully transferred the data; switch to writing to file
-      out = transfer;
-      file = temp;
-      memory = null;
-    }
-  }
-}
diff --git a/src/com/google/common/io/Files.java b/src/com/google/common/io/Files.java
deleted file mode 100644
index 6e16eb6..0000000
--- a/src/com/google/common/io/Files.java
+++ /dev/null
@@ -1,696 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.io;
-
-import com.google.common.base.Preconditions;
-
-import java.io.BufferedReader;
-import java.io.BufferedWriter;
-import java.io.Closeable;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.io.RandomAccessFile;
-import java.nio.MappedByteBuffer;
-import java.nio.channels.FileChannel;
-import java.nio.channels.FileChannel.MapMode;
-import java.nio.charset.Charset;
-import java.security.MessageDigest;
-import java.util.List;
-import java.util.zip.Checksum;
-
-/**
- * Provides utility methods for working with files.
- *
- * <p>All method parameters must be non-null unless documented otherwise.
- *
- * @author Chris Nokleberg
- * @since 2009.09.15 <b>tentative</b>
- */
-public final class Files {
-
-  /** Maximum loop count when creating temp directories. */
-  private static final int TEMP_DIR_ATTEMPTS = 10000;
-
-  private Files() {}
-
-  /**
-   * Returns a buffered reader that reads from a file using the given
-   * character set.
-   *
-   * @param file the file to read from
-   * @param charset the character set used when writing the file
-   * @return the buffered reader
-   */
-  public static BufferedReader newReader(File file, Charset charset)
-      throws FileNotFoundException {
-    return new BufferedReader(
-        new InputStreamReader(new FileInputStream(file), charset));
-  }
-
-  /**
-   * Returns a buffered writer that writes to a file using the given
-   * character set.
-   *
-   * @param file the file to write to
-   * @param charset the character set used when writing the file
-   * @return the buffered writer
-   */
-  public static BufferedWriter newWriter(File file, Charset charset)
-      throws FileNotFoundException {
-   return new BufferedWriter(
-        new OutputStreamWriter(new FileOutputStream(file), charset));
-  }
-
-  /**
-   * Returns a factory that will supply instances of {@link FileInputStream}
-   * that read from a file.
-   *
-   * @param file the file to read from
-   * @return the factory
-   */
-  public static InputSupplier<FileInputStream> newInputStreamSupplier(
-      final File file) {
-    Preconditions.checkNotNull(file);
-    return new InputSupplier<FileInputStream>() {
-      public FileInputStream getInput() throws IOException {
-        return new FileInputStream(file);
-      }
-    };
-  }
-
-  /**
-   * Returns a factory that will supply instances of {@link FileOutputStream}
-   * that write to a file.
-   *
-   * @param file the file to write to
-   * @return the factory
-   */
-  public static OutputSupplier<FileOutputStream> newOutputStreamSupplier(
-      File file) {
-    return newOutputStreamSupplier(file, false);
-  }
-
-  /**
-   * Returns a factory that will supply instances of {@link FileOutputStream}
-   * that write to or append to a file.
-   *
-   * @param file the file to write to
-   * @param append if true, the encoded characters will be appended to the file;
-   *     otherwise the file is overwritten
-   * @return the factory
-   */
-  public static OutputSupplier<FileOutputStream> newOutputStreamSupplier(
-      final File file, final boolean append) {
-    Preconditions.checkNotNull(file);
-    return new OutputSupplier<FileOutputStream>() {
-      public FileOutputStream getOutput() throws IOException {
-        return new FileOutputStream(file, append);
-      }
-    };
-  }
-
-  /**
-   * Returns a factory that will supply instances of
-   * {@link InputStreamReader} that read a file using the given character set.
-   *
-   * @param file the file to read from
-   * @param charset the character set used when reading the file
-   * @return the factory
-   */
-  public static InputSupplier<InputStreamReader> newReaderSupplier(File file,
-      Charset charset) {
-    return CharStreams.newReaderSupplier(newInputStreamSupplier(file), charset);
-  }
-
-  /**
-   * Returns a factory that will supply instances of {@link OutputStreamWriter}
-   * that write to a file using the given character set.
-   *
-   * @param file the file to write to
-   * @param charset the character set used when writing the file
-   * @return the factory
-   */
-  public static OutputSupplier<OutputStreamWriter> newWriterSupplier(File file,
-      Charset charset) {
-    return newWriterSupplier(file, charset, false);
-  }
-
-  /**
-   * Returns a factory that will supply instances of {@link OutputStreamWriter}
-   * that write to or append to a file using the given character set.
-   *
-   * @param file the file to write to
-   * @param charset the character set used when writing the file
-   * @param append if true, the encoded characters will be appended to the file;
-   *     otherwise the file is overwritten
-   * @return the factory
-   */
-  public static OutputSupplier<OutputStreamWriter> newWriterSupplier(File file,
-      Charset charset, boolean append) {
-    return CharStreams.newWriterSupplier(newOutputStreamSupplier(file, append),
-        charset);
-  }
-
-  /**
-   * Reads all bytes from a file into a byte array.
-   *
-   * @param file the file to read from
-   * @return a byte array containing all the bytes from file
-   * @throws IllegalArgumentException if the file is bigger than the largest
-   *     possible byte array (2^31 - 1)
-   * @throws IOException if an I/O error occurs
-   */
-  public static byte[] toByteArray(File file) throws IOException {
-    Preconditions.checkArgument(file.length() <= Integer.MAX_VALUE);
-    if (file.length() == 0) {
-      // Some special files are length 0 but have content nonetheless.
-      return ByteStreams.toByteArray(newInputStreamSupplier(file));
-    } else {
-      // Avoid an extra allocation and copy.
-      byte[] b = new byte[(int) file.length()];
-      boolean threw = true;
-      InputStream in = new FileInputStream(file);
-      try {
-        ByteStreams.readFully(in, b);
-        threw = false;
-      } finally {
-        Closeables.close(in, threw);
-      }
-      return b;
-    }
-  }
-
-  /**
-   * Reads all characters from a file into a {@link String}, using the given
-   * character set.
-   *
-   * @param file the file to read from
-   * @param charset the character set used when reading the file
-   * @return a string containing all the characters from the file
-   * @throws IOException if an I/O error occurs
-   */
-  public static String toString(File file, Charset charset) throws IOException {
-    return new String(toByteArray(file), charset.name());
-  }
-
-  /**
-   * Copies to a file all bytes from an {@link InputStream} supplied by a
-   * factory.
-   *
-   * @param from the input factory
-   * @param to the destination file
-   * @throws IOException if an I/O error occurs
-   */
-  public static void copy(InputSupplier<? extends InputStream> from, File to)
-      throws IOException {
-    ByteStreams.copy(from, newOutputStreamSupplier(to));
-  }
-
-  /**
-   * Overwrites a file with the contents of a byte array.
-   *
-   * @param from the bytes to write
-   * @param to the destination file
-   * @throws IOException if an I/O error occurs
-   */
-  public static void write(byte[] from, File to) throws IOException {
-    ByteStreams.write(from, newOutputStreamSupplier(to));
-  }
-
-  /**
-   * Copies all bytes from a file to an {@link OutputStream} supplied by
-   * a factory.
-   *
-   * @param from the source file
-   * @param to the output factory
-   * @throws IOException if an I/O error occurs
-   */
-  public static void copy(File from, OutputSupplier<? extends OutputStream> to)
-      throws IOException {
-    ByteStreams.copy(newInputStreamSupplier(from), to);
-  }
-
-  /**
-   * Copies all bytes from a file to an output stream.
-   *
-   * @param from the source file
-   * @param to the output stream
-   * @throws IOException if an I/O error occurs
-   */
-  public static void copy(File from, OutputStream to) throws IOException {
-    ByteStreams.copy(newInputStreamSupplier(from), to);
-  }
-
-  /**
-   * Copies all the bytes from one file to another.
-   *.
-   * @param from the source file
-   * @param to the destination file
-   * @throws IOException if an I/O error occurs
-   */
-  public static void copy(File from, File to) throws IOException {
-    copy(newInputStreamSupplier(from), to);
-  }
-
-  /**
-   * Copies to a file all characters from a {@link Readable} and
-   * {@link Closeable} object supplied by a factory, using the given
-   * character set.
-   *
-   * @param from the readable supplier
-   * @param to the destination file
-   * @param charset the character set used when writing the file
-   * @throws IOException if an I/O error occurs
-   */
-  public static <R extends Readable & Closeable> void copy(
-      InputSupplier<R> from, File to, Charset charset) throws IOException {
-    CharStreams.copy(from, newWriterSupplier(to, charset));
-  }
-
-  /**
-   * Writes a character sequence (such as a string) to a file using the given
-   * character set.
-   *
-   * @param from the character sequence to write
-   * @param to the destination file
-   * @param charset the character set used when writing the file
-   * @throws IOException if an I/O error occurs
-   */
-  public static void write(CharSequence from, File to, Charset charset)
-      throws IOException {
-    write(from, to, charset, false);
-  }
-
-  /**
-   * Appends a character sequence (such as a string) to a file using the given
-   * character set.
-   *
-   * @param from the character sequence to append
-   * @param to the destination file
-   * @param charset the character set used when writing the file
-   * @throws IOException if an I/O error occurs
-   */
-  public static void append(CharSequence from, File to, Charset charset)
-      throws IOException {
-    write(from, to, charset, true);
-  }
-
-  /**
-   * Private helper method. Writes a character sequence to a file,
-   * optionally appending.
-   *
-   * @param from the character sequence to append
-   * @param to the destination file
-   * @param charset the character set used when writing the file
-   * @param append true to append, false to overwrite
-   * @throws IOException if an I/O error occurs
-   */
-  private static void write(CharSequence from, File to, Charset charset,
-      boolean append) throws IOException {
-    CharStreams.write(from, newWriterSupplier(to, charset, append));
-  }
-
-  /**
-   * Copies all characters from a file to a {@link Appendable} &
-   * {@link Closeable} object supplied by a factory, using the given
-   * character set.
-   *
-   * @param from the source file
-   * @param charset the character set used when reading the file
-   * @param to the appendable supplier
-   * @throws IOException if an I/O error occurs
-   */
-  public static <W extends Appendable & Closeable> void copy(File from,
-      Charset charset, OutputSupplier<W> to) throws IOException {
-    CharStreams.copy(newReaderSupplier(from, charset), to);
-  }
-
-  /**
-   * Copies all characters from a file to an appendable object,
-   * using the given character set.
-   *
-   * @param from the source file
-   * @param charset the character set used when reading the file
-   * @param to the appendable object
-   * @throws IOException if an I/O error occurs
-   */
-  public static void copy(File from, Charset charset, Appendable to)
-      throws IOException {
-    CharStreams.copy(newReaderSupplier(from, charset), to);
-  }
-
-  /**
-   * Returns true if the files contains the same bytes.
-   *
-   * @throws IOException if an I/O error occurs
-   */
-  public static boolean equal(File file1, File file2) throws IOException {
-    if (file1 == file2 || file1.equals(file2)) {
-      return true;
-    }
-
-    /*
-     * Some operating systems may return zero as the length for files
-     * denoting system-dependent entities such as devices or pipes, in
-     * which case we must fall back on comparing the bytes directly.
-     */
-    long len1 = file1.length();
-    long len2 = file2.length();
-    if (len1 != 0 && len2 != 0 && len1 != len2) {
-      return false;
-    }
-    return ByteStreams.equal(newInputStreamSupplier(file1),
-        newInputStreamSupplier(file2));
-  }
-
-  /**
-   * Atomically creates a new directory somewhere beneath the system's
-   * temporary directory (as defined by the {@code java.io.tmpdir} system
-   * property), and returns its name.
-   *
-   * <p>Use this method instead of {@link File#createTempFile(String, String)}
-   * when you wish to create a directory, not a regular file.  A common pitfall
-   * is to call {@code createTempFile}, delete the file and create a
-   * directory in its place, but this leads a race condition which can be
-   * exploited to create security vulnerabilities, especially when executable
-   * files are to be written into the directory.
-   *
-   * <p>This method assumes that the temporary volume is writable, has free
-   * inodes and free blocks, and that it will not be called thousands of times
-   * per second.
-   *
-   * @return the newly-created directory
-   * @throws IllegalStateException if the directory could not be created
-   */
-  public static File createTempDir() {
-    File baseDir = new File(System.getProperty("java.io.tmpdir"));
-    String baseName = System.currentTimeMillis() + "-";
-
-    for (int counter = 0; counter < TEMP_DIR_ATTEMPTS; counter++) {
-      File tempDir = new File(baseDir, baseName + counter);
-      if (tempDir.mkdir()) {
-        return tempDir;
-      }
-    }
-    throw new IllegalStateException("Failed to create directory within "
-        + TEMP_DIR_ATTEMPTS + " attempts (tried "
-        + baseName + "0 to " + baseName + (TEMP_DIR_ATTEMPTS - 1) + ')');
-  }
-
-  /**
-   * Creates an empty file or updates the last updated timestamp on the
-   * same as the unix command of the same name.
-   *
-   * @param file the file to create or update
-   * @throws IOException if an I/O error occurs
-   */
-  public static void touch(File file) throws IOException {
-    if (!file.createNewFile()
-        && !file.setLastModified(System.currentTimeMillis())) {
-      throw new IOException("Unable to update modification time of " + file);
-    }
-  }
-
-  /**
-   * Moves the file from one path to another. This method can rename a file or
-   * move it to a different directory, like the Unix {@code mv} command.
-   *
-   * @param from the source file
-   * @param to the destination file
-   * @throws IOException if an I/O error occurs
-   */
-  public static void move(File from, File to) throws IOException {
-    Preconditions.checkNotNull(to);
-    Preconditions.checkArgument(!from.equals(to),
-        "Source %s and destination %s must be different", from, to);
-
-    if (!from.renameTo(to)) {
-      copy(from, to);
-      if (!from.delete()) {
-        if (!to.delete()) {
-          throw new IOException("Unable to delete " + to);
-        }
-        throw new IOException("Unable to delete " + from);
-      }
-    }
-  }
-
-  /**
-   * Deletes all the files within a directory. Does not delete the
-   * directory itself.
-   *
-   * <p>If the file argument is a symbolic link or there is a symbolic
-   * link in the path leading to the directory, this method will do
-   * nothing. Symbolic links within the directory are not followed.
-   *
-   * @param directory the directory to delete the contents of
-   * @throws IllegalArgumentException if the argument is not a directory
-   * @throws IOException if an I/O error occurs
-   * @see #deleteRecursively
-   */
-  public static void deleteDirectoryContents(File directory)
-      throws IOException {
-    Preconditions.checkArgument(directory.isDirectory(),
-        "Not a directory: %s", directory);
-    // Symbolic links will have different canonical and absolute paths
-    if (!directory.getCanonicalPath().equals(directory.getAbsolutePath())) {
-      return;
-    }
-    File[] files = directory.listFiles();
-    if (files == null) {
-      throw new IOException("Error listing files for " + directory);
-    }
-    for (File file : files) {
-      deleteRecursively(file);
-    }
-  }
-
-  /**
-   * Deletes a file or directory and all contents recursively.
-   *
-   * <p>If the file argument is a symbolic link the link will be deleted
-   * but not the target of the link. If the argument is a directory,
-   * symbolic links within the directory will not be followed.
-   *
-   * @param file the file to delete
-   * @throws IOException if an I/O error occurs
-   * @see #deleteDirectoryContents
-   */
-  public static void deleteRecursively(File file) throws IOException {
-    if (file.isDirectory()) {
-      deleteDirectoryContents(file);
-    }
-    if (!file.delete()) {
-      throw new IOException("Failed to delete " + file);
-    }
-  }
-
-  /**
-   * Reads the first line from a file. The line does not include
-   * line-termination characters, but does include other leading and
-   * trailing whitespace.
-   *
-   * @param file the file to read from
-   * @param charset the character set used when writing the file
-   * @return the first line, or null if the file is empty
-   * @throws IOException if an I/O error occurs
-   */
-  public static String readFirstLine(File file, Charset charset)
-      throws IOException {
-    return CharStreams.readFirstLine(Files.newReaderSupplier(file, charset));
-  }
-
-  /**
-   * Reads all of the lines from a file. The lines do not include
-   * line-termination characters, but do include other leading and
-   * trailing whitespace.
-   *
-   * @param file the file to read from
-   * @param charset the character set used when writing the file
-   * @return a mutable {@link List} containing all the lines
-   * @throws IOException if an I/O error occurs
-   */
-  public static List<String> readLines(File file, Charset charset)
-      throws IOException {
-    return CharStreams.readLines(Files.newReaderSupplier(file, charset));
-  }
-
-  /**
-   * Streams lines from a {@link File}, stopping when our callback returns
-   * false, or we have read all of the lines.
-   *
-   * @param file the file to read from
-   * @param charset the character set used when writing the file
-   * @param callback the {@link LineProcessor} to use to handle the lines
-   * @return the output of processing the lines
-   * @throws IOException if an I/O error occurs
-   */
-  public static <T> T readLines(File file, Charset charset,
-      LineProcessor<T> callback) throws IOException {
-    return CharStreams.readLines(Files.newReaderSupplier(file, charset),
-        callback);
-  }
-
-  /**
-   * Process the bytes of a file.
-   *
-   * <p>(If this seems too complicated, maybe you're looking for
-   * {@link #toByteArray}.)
-   *
-   * @param file the file to read
-   * @param processor the object to which the bytes of the file are passed.
-   * @return the result of the byte processor
-   * @throws IOException if an I/O error occurs
-   */
-  public static <T> T readBytes(File file, ByteProcessor<T> processor)
-      throws IOException {
-    return ByteStreams.readBytes(newInputStreamSupplier(file), processor);
-  }
-
-  /**
-   * Computes and returns the checksum value for a file.
-   * The checksum object is reset when this method returns successfully.
-   *
-   * @param file the file to read
-   * @param checksum the checksum object
-   * @return the result of {@link Checksum#getValue} after updating the
-   *     checksum object with all of the bytes in the file
-   * @throws IOException if an I/O error occurs
-   */
-  public static long getChecksum(File file, Checksum checksum)
-      throws IOException {
-    return ByteStreams.getChecksum(newInputStreamSupplier(file), checksum);
-  }
-
-  /**
-   * Computes and returns the digest value for a file.
-   * The digest object is reset when this method returns successfully.
-   *
-   * @param file the file to read
-   * @param md the digest object
-   * @return the result of {@link MessageDigest#digest()} after updating the
-   *     digest object with all of the bytes in this file
-   * @throws IOException if an I/O error occurs
-   */
-  public static byte[] getDigest(File file, MessageDigest md)
-      throws IOException {
-    return ByteStreams.getDigest(newInputStreamSupplier(file), md);
-  }
-
-  /**
-   * Fully maps a file read-only in to memory as per
-   * {@link FileChannel#map(java.nio.channels.FileChannel.MapMode, long, long)}.
-   *
-   * <p>Files are mapped from offset 0 to its length.
-   *
-   * <p>This only works for files <= {@link Integer#MAX_VALUE} bytes.
-   *
-   * @param file the file to map
-   * @return a read-only buffer reflecting {@code file}
-   * @throws FileNotFoundException if the {@code file} does not exist
-   * @throws IOException if an I/O error occurs
-   *
-   * @see FileChannel#map(MapMode, long, long)
-   * @since 2010.01.04 <b>tentative</b>
-   */
-  public static MappedByteBuffer map(File file) throws IOException {
-    return map(file, MapMode.READ_ONLY);
-  }
-
-  /**
-   * Fully maps a file in to memory as per
-   * {@link FileChannel#map(java.nio.channels.FileChannel.MapMode, long, long)}
-   * using the requested {@link MapMode}.
-   *
-   * <p>Files are mapped from offset 0 to its length.
-   *
-   * <p>This only works for files <= {@link Integer#MAX_VALUE} bytes.
-   *
-   * @param file the file to map
-   * @param mode the mode to use when mapping {@code file}
-   * @return a buffer reflecting {@code file}
-   * @throws FileNotFoundException if the {@code file} does not exist
-   * @throws IOException if an I/O error occurs
-   *
-   * @see FileChannel#map(MapMode, long, long)
-   * @since 2010.01.04 <b>tentative</b>
-   */
-  public static MappedByteBuffer map(File file, MapMode mode)
-      throws IOException {
-    if (!file.exists()) {
-      throw new FileNotFoundException(file.toString());
-    }
-    return map(file, mode, file.length());
-  }
-
-  /**
-   * Maps a file in to memory as per
-   * {@link FileChannel#map(java.nio.channels.FileChannel.MapMode, long, long)}
-   * using the requested {@link MapMode}.
-   *
-   * <p>Files are mapped from offset 0 to {@code size}.
-   *
-   * <p>If the mode is {@link MapMode#READ_WRITE} and the file does not exist,
-   * it will be created with the requested {@code size}. Thus this method is
-   * useful for creating memory mapped files which do not yet exist.
-   *
-   * <p>This only works for files <= {@link Integer#MAX_VALUE} bytes.
-   *
-   * @param file the file to map
-   * @param mode the mode to use when mapping {@code file}
-   * @return a buffer reflecting {@code file}
-   * @throws IOException if an I/O error occurs
-   *
-   * @see FileChannel#map(MapMode, long, long)
-   * @since 2010.01.04 <b>tentative</b>
-   */
-  public static MappedByteBuffer map(File file, MapMode mode, long size)
-      throws FileNotFoundException, IOException {
-    RandomAccessFile raf =
-        new RandomAccessFile(file, mode == MapMode.READ_ONLY ? "r" : "rw");
-
-    boolean threw = true;
-    try {
-      MappedByteBuffer mbb = map(raf, mode, size);
-      threw = false;
-      return mbb;
-    } finally {
-      Closeables.close(raf, threw);
-    }
-  }
-
-  private static MappedByteBuffer map(RandomAccessFile raf, MapMode mode,
-      long size) throws IOException {
-    FileChannel channel = raf.getChannel();
-
-    boolean threw = true;
-    try {
-      MappedByteBuffer mbb = channel.map(mode, 0, size);
-      threw = false;
-      return mbb;
-    } finally {
-      Closeables.close(channel, threw);
-    }
-  }
-}
diff --git a/src/com/google/common/io/Flushables.java b/src/com/google/common/io/Flushables.java
deleted file mode 100644
index ded2948..0000000
--- a/src/com/google/common/io/Flushables.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.io;
-
-import java.io.Flushable;
-import java.io.IOException;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * Utility methods for working with {@link Flushable} objects.
- *
- * @author Michael Lancaster
- * @since 2009.09.15 <b>tentative</b>
- */
-public final class Flushables {
-  private static final Logger logger
-      = Logger.getLogger(Flushables.class.getName());
-
-  private Flushables() {}
-
-  /**
-   * Flush a {@link Flushable}, with control over whether an
-   * {@code IOException} may be thrown.
-   *
-   * <p>If {@code swallowIOException} is true, then we don't rethrow
-   * {@code IOException}, but merely log it.
-   *
-   * @param flushable the {@code Flushable} object to be flushed.
-   * @param swallowIOException if true, don't propagate IO exceptions
-   *     thrown by the {@code flush} method
-   * @throws IOException if {@code swallowIOException} is false and
-   *     {@link Flushable#flush} throws an {@code IOException}.
-   * @see Closeables#close
-   */
-  public static void flush(Flushable flushable, boolean swallowIOException)
-      throws IOException {
-    try {
-      flushable.flush();
-    } catch (IOException e) {
-      logger.log(Level.WARNING,
-          "IOException thrown while flushing Flushable.", e);
-      if (!swallowIOException) {
-        throw e;
-      }
-    }
-  }
-
-  /**
-   * Equivalent to calling {@code flush(flushable, true)}, but with no
-   * {@code IOException} in the signature.
-   *
-   * @param flushable the {@code Flushable} object to be flushed.
-   */
-  public static void flushQuietly(Flushable flushable) {
-    try {
-      flush(flushable, true);
-    } catch (IOException e) {
-      logger.log(Level.SEVERE, "IOException should not have been thrown.", e);
-    }
-  }
-}
diff --git a/src/com/google/common/io/InputSupplier.java b/src/com/google/common/io/InputSupplier.java
deleted file mode 100644
index 8d8fa2a..0000000
--- a/src/com/google/common/io/InputSupplier.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.io;
-
-import java.io.IOException;
-
-/**
- * A factory for readable streams of bytes or characters.
- *
- * @author Chris Nokleberg
- * @since 2009.09.15 <b>tentative</b>
- */
-public interface InputSupplier<T> {
-  T getInput() throws IOException;
-}
diff --git a/src/com/google/common/io/LimitInputStream.java b/src/com/google/common/io/LimitInputStream.java
deleted file mode 100644
index 9fdf395..0000000
--- a/src/com/google/common/io/LimitInputStream.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.io;
-
-import com.google.common.base.Preconditions;
-
-import java.io.FilterInputStream;
-import java.io.InputStream;
-import java.io.IOException;
-
-/**
- * An InputStream that limits the number of bytes which can be read.
- *
- * @author Charles Fry
- * @since 2009.09.15 <b>tentative</b>
- */
-public class LimitInputStream extends FilterInputStream {
-
-  private long left;
-  private long mark = -1;
-
-  /**
-   * Wraps another input stream, limiting the number of bytes which can be read.
-   *
-   * @param in the input stream to be wrapped
-   * @param limit the maximum number of bytes to be read
-   */
-  public LimitInputStream(InputStream in, long limit) {
-    super(in);
-    Preconditions.checkNotNull(in);
-    Preconditions.checkArgument(limit >= 0, "limit must be non-negative");
-    left = limit;
-  }
-
-  @Override public int available() throws IOException {
-    return (int) Math.min(in.available(), left);
-  }
-
-  @Override public void mark(int readlimit) {
-    in.mark(readlimit);
-    mark = left;
-    // it's okay to mark even if mark isn't supported, as reset won't work
-  }
-
-  @Override public int read() throws IOException {
-    if (left == 0) {
-      return -1;
-    }
-
-    int result = in.read();
-    if (result != -1) {
-      --left;
-    }
-    return result;
-  }
-
-  @Override public int read(byte[] b, int off, int len) throws IOException {
-    if (left == 0) {
-      return -1;
-    }
-
-    len = (int) Math.min(len, left);
-    int result = in.read(b, off, len);
-    if (result != -1) {
-      left -= result;
-    }
-    return result;
-  }
-
-  @Override public void reset() throws IOException {
-    if (!in.markSupported()) {
-      throw new IOException("Mark not supported");
-    }
-    if (mark == -1) {
-      throw new IOException("Mark not set");
-    }
-
-    in.reset();
-    left = mark;
-  }
-
-  @Override public long skip(long n) throws IOException {
-    n = Math.min(n, left);
-    long skipped = in.skip(n);
-    left -= skipped;
-    return skipped;
-  }
-
-}
diff --git a/src/com/google/common/io/LineBuffer.java b/src/com/google/common/io/LineBuffer.java
deleted file mode 100644
index 3924638..0000000
--- a/src/com/google/common/io/LineBuffer.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.io;
-
-import java.io.IOException;
-
-/**
- * Package-protected abstract class that implements the line reading
- * algorithm used by {@link LineReader}. Line separators are per {@link
- * java.io.BufferedReader}: line feed, carriage return, or carriage
- * return followed immediately by a linefeed.
- *
- * <p>Subclasses must implement {@link #handleLine}, call {@link #add}
- * to pass character data, and call {@link #finish} at the end of stream.
- *
- * @author Chris Nokleberg
- * @since 2009.09.15 <b>tentative</b>
- */
-abstract class LineBuffer {
-  /** Holds partial line contents. */
-  private StringBuilder line = new StringBuilder();
-  /** Whether a line ending with a CR is pending processing. */
-  private boolean sawReturn;
-
-  /**
-   * Process additional characters from the stream. When a line separator
-   * is found the contents of the line and the line separator itself
-   * are passed to the abstract {@link #handleLine} method.
-   *
-   * @param cbuf the character buffer to process
-   * @param off the offset into the buffer
-   * @param len the number of characters to process
-   * @throws IOException if an I/O error occurs
-   * @see #finish
-   */
-  @SuppressWarnings("fallthrough")
-  protected void add(char[] cbuf, int off, int len) throws IOException {
-    int pos = off;
-    if (sawReturn && len > 0) {
-      // Last call to add ended with a CR; we can handle the line now.
-      if (finishLine(cbuf[pos] == '\n')) {
-        pos++;
-      }
-    }
-
-    int start = pos;
-    for (int end = off + len; pos < end; pos++) {
-      switch (cbuf[pos]) {
-        case '\r':
-          line.append(cbuf, start, pos - start);
-          sawReturn = true;
-          if (pos + 1 < end) {
-            if (finishLine(cbuf[pos + 1] == '\n')) {
-              pos++;
-            }
-          }
-          start = pos + 1;
-          break;
-
-        case '\n':
-          line.append(cbuf, start, pos - start);
-          finishLine(true);
-          start = pos + 1;
-          break;
-      }
-    }
-    line.append(cbuf, start, off + len - start);
-  }
-
-  /** Called when a line is complete. */
-  private boolean finishLine(boolean sawNewline) throws IOException {
-    handleLine(line.toString(), sawReturn
-        ? (sawNewline ? "\r\n" : "\r")
-        : (sawNewline ? "\n" : ""));
-    line = new StringBuilder();
-    sawReturn = false;
-    return sawNewline;
-  }
-
-  /**
-   * Subclasses must call this method after finishing character processing,
-   * in order to ensure that any unterminated line in the buffer is
-   * passed to {@link #handleLine}.
-   *
-   * @throws IOException if an I/O error occurs
-   */
-  protected void finish() throws IOException {
-    if (sawReturn || line.length() > 0) {
-      finishLine(false);
-    }
-  }
-
-  /**
-   * Called for each line found in the character data passed to
-   * {@link #add}.
-   *
-   * @param line a line of text (possibly empty), without any line separators
-   * @param end the line separator; one of {@code "\r"}, {@code "\n"},
-   *     {@code "\r\n"}, or {@code ""}
-   * @throws IOException if an I/O error occurs
-   */
-  protected abstract void handleLine(String line, String end)
-      throws IOException;
-}
diff --git a/src/com/google/common/io/LineProcessor.java b/src/com/google/common/io/LineProcessor.java
deleted file mode 100644
index 52ac219..0000000
--- a/src/com/google/common/io/LineProcessor.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2009 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.io;
-
-import java.io.IOException;
-
-/**
- * A callback to be used with the streaming {@code readLines} methods.
- *
- * <p>{@link #processLine} will be called for each line that is read, and
- * should return {@code false} when you want to stop processing.
- *
- * @author Miles Barr
- * @since 2009.09.15 <b>tentative</b>
- */
-public interface LineProcessor<T> {
-
-  /**
-   * This method will be called once for each line.
-   *
-   * @param line the line read from the input, without delimiter
-   * @return true to continue processing, false to stop
-   */
-  boolean processLine(String line) throws IOException;
-
-  /** Return the result of processing all the lines. */
-  T getResult();
-}
diff --git a/src/com/google/common/io/LineReader.java b/src/com/google/common/io/LineReader.java
deleted file mode 100644
index 73a5fcb..0000000
--- a/src/com/google/common/io/LineReader.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.io;
-
-import com.google.common.base.Preconditions;
-
-import java.io.IOException;
-import java.io.Reader;
-import java.nio.CharBuffer;
-import java.util.LinkedList;
-import java.util.Queue;
-
-/**
- * A class for reading lines of text. Provides the same functionality
- * as {@link java.io.BufferedReader#readLine()} but for all {@link Readable}
- * objects, not just instances of {@link Reader}.
- *
- * @author Chris Nokleberg
- * @since 2009.09.15 <b>tentative</b>
- */
-public final class LineReader {
-  private final Readable readable;
-  private final Reader reader;
-  private final char[] buf = new char[0x1000]; // 4K
-  private final CharBuffer cbuf = CharBuffer.wrap(buf);
-
-  private final Queue<String> lines = new LinkedList<String>();
-  private final LineBuffer lineBuf = new LineBuffer() {
-    @Override protected void handleLine(String line, String end) {
-      lines.add(line);
-    }
-  };
-
-  /**
-   * Creates a new instance that will read lines from the given
-   * {@code Readable} object.
-   */
-  public LineReader(Readable readable) {
-    Preconditions.checkNotNull(readable);
-    this.readable = readable;
-    this.reader = (readable instanceof Reader) ? (Reader) readable : null;
-  }
-
-  /**
-   * Reads a line of text. A line is considered to be terminated by any
-   * one of a line feed ({@code '\n'}), a carriage return
-   * ({@code '\r'}), or a carriage return followed immediately by a linefeed
-   * ({@code "\r\n"}).
-   *
-   * @return a {@code String} containing the contents of the line, not
-   *     including any line-termination characters, or {@code null} if the
-   *     end of the stream has been reached.
-   * @throws IOException if an I/O error occurs
-   */
-  public String readLine() throws IOException {
-    while (lines.peek() == null) {
-      cbuf.clear();
-      // The default implementation of Reader#read(CharBuffer) allocates a
-      // temporary char[], so we call Reader#read(char[], int, int) instead.
-      int read = (reader != null)
-          ? reader.read(buf, 0, buf.length)
-          : readable.read(cbuf);
-      if (read == -1) {
-        lineBuf.finish();
-        break;
-      }
-      lineBuf.add(buf, 0, read);
-    }
-    return lines.poll();
-  }
-}
diff --git a/src/com/google/common/io/MultiInputStream.java b/src/com/google/common/io/MultiInputStream.java
deleted file mode 100644
index 49b76eb..0000000
--- a/src/com/google/common/io/MultiInputStream.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.io;
-
-import java.io.InputStream;
-import java.io.IOException;
-import java.util.Iterator;
-
-/**
- * An {@link InputStream} that concatenates multiple substreams. At most
- * one stream will be open at a time.
- *
- * @author Chris Nokleberg
- * @since 2009.09.15 <b>tentative</b>
- */
-final class MultiInputStream extends InputStream {
-
-  private Iterator<? extends InputSupplier<? extends InputStream>> it;
-  private InputStream in;
-
-  /**
-   * Creates a new instance.
-   *
-   * @param it an iterator of I/O suppliers that will provide each substream
-   */
-  public MultiInputStream(
-      Iterator<? extends InputSupplier<? extends InputStream>> it)
-      throws IOException {
-    this.it = it;
-    advance();
-  }
-
-  @Override public void close() throws IOException {
-    if (in != null) {
-      try {
-        in.close();
-      } finally {
-        in = null;
-      }
-    }
-  }
-
-  /**
-   * Closes the current input stream and opens the next one, if any.
-   */
-  private void advance() throws IOException {
-    close();
-    if (it.hasNext()) {
-      in = it.next().getInput();
-    }
-  }
-
-  @Override public int available() throws IOException {
-    if (in == null) {
-      return 0;
-    }
-    return in.available();
-  }
-
-  @Override public boolean markSupported() {
-    return false;
-  }
-
-  @Override public int read() throws IOException {
-    if (in == null) {
-      return -1;
-    }
-    int result = in.read();
-    if (result == -1) {
-      advance();
-      return read();
-    }
-    return result;
-  }
-
-  @Override public int read(byte[] b, int off, int len) throws IOException {
-    if (in == null) {
-      return -1;
-    }
-    int result = in.read(b, off, len);
-    if (result == -1) {
-      advance();
-      return read(b, off, len);
-    }
-    return result;
-  }
-
-  @Override public long skip(long n) throws IOException {
-    if (in == null || n <= 0) {
-      return 0;
-    }
-    long result = in.skip(n);
-    if (result != 0) {
-      return result;
-    }
-    if (read() == -1) {
-      return 0;
-    }
-    return 1 + in.skip(n - 1);
-  }
-}
diff --git a/src/com/google/common/io/MultiReader.java b/src/com/google/common/io/MultiReader.java
deleted file mode 100644
index 9d8ed74..0000000
--- a/src/com/google/common/io/MultiReader.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.io;
-
-import com.google.common.base.Preconditions;
-
-import java.io.Reader;
-import java.io.IOException;
-import java.util.Iterator;
-
-/**
- * A {@link Reader} that will concatenates multiple readers
- *
- * @author Bin Zhu
- * @since 2009.09.15 <b>tentative</b>
- */
-class MultiReader extends Reader {
-  private final Iterator<? extends InputSupplier<? extends Reader>> it;
-  private Reader current;
-
-  MultiReader(Iterator<? extends InputSupplier<? extends Reader>> readers)
-      throws IOException {
-    this.it = readers;
-    advance();
-  }
-
-  /**
-   * Closes the current reader and opens the next one, if any.
-   */
-  private void advance() throws IOException {
-    close();
-    if (it.hasNext()) {
-      current = it.next().getInput();
-    }
-  }
-
-  @Override public int read(char cbuf[], int off, int len) throws IOException {
-    if (current == null) {
-      return -1;
-    }
-    int result = current.read(cbuf, off, len);
-    if (result == -1) {
-      advance();
-      return read(cbuf, off, len);
-    }
-    return result;
-  }
-
-  @Override public long skip(long n) throws IOException {
-    Preconditions.checkArgument(n >= 0, "n is negative");
-    if (n > 0) {
-      while (current != null) {
-        long result = current.skip(n);
-        if (result > 0) {
-          return result;
-        }
-        advance();
-      }
-    }
-    return 0;
-  }
-
-  @Override public boolean ready() throws IOException {
-    return (current != null) && current.ready();
-  }
-
-  @Override public void close() throws IOException {
-    if (current != null) {
-      try {
-        current.close();
-      } finally {
-        current = null;
-      }
-    }
-  }
-}
diff --git a/src/com/google/common/io/NullOutputStream.java b/src/com/google/common/io/NullOutputStream.java
deleted file mode 100644
index 1e75497..0000000
--- a/src/com/google/common/io/NullOutputStream.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2004 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.io;
-
-import java.io.OutputStream;
-
-/**
- * Implementation of {@link OutputStream} that simply discards written bytes.
- *
- * @author Spencer Kimball
- * @since 2009.09.15 <b>tentative</b>
- */
-public class NullOutputStream extends OutputStream {
-  /** Discards the specified byte. */
-  @Override public void write(int b) {
-  }
-
-  /** Discards the specified byte array. */
-  @Override public void write(byte[] b, int off, int len) {
-  }
-}
diff --git a/src/com/google/common/io/OutputSupplier.java b/src/com/google/common/io/OutputSupplier.java
deleted file mode 100644
index 251064e..0000000
--- a/src/com/google/common/io/OutputSupplier.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.io;
-
-import java.io.IOException;
-
-/**
- * An factory for writable streams of bytes or characters.
- *
- * @author Chris Nokleberg
- * @since 2009.09.15 <b>tentative</b>
- */
-public interface OutputSupplier<T> {
-  T getOutput() throws IOException;
-}
diff --git a/src/com/google/common/io/PatternFilenameFilter.java b/src/com/google/common/io/PatternFilenameFilter.java
deleted file mode 100644
index f9fa8e9..0000000
--- a/src/com/google/common/io/PatternFilenameFilter.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright (C) 2006 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.io;
-
-import com.google.common.base.Preconditions;
-
-import java.io.File;
-import java.io.FilenameFilter;
-import java.util.regex.Pattern;
-import java.util.regex.PatternSyntaxException;
-
-/**
- * File name filter that only accepts files matching a regular expression.
- *
- * @author Apple Chow
- * @since 2009.09.15 <b>tentative</b>
- */
-public final class PatternFilenameFilter implements FilenameFilter {
-
-  private final Pattern pattern;
-
-  /**
-   * Constructs a pattern file name filter object.
-   * @param patternStr the pattern string on which to filter file names
-   *
-   * @throws PatternSyntaxException if pattern compilation fails (runtime)
-   */
-  public PatternFilenameFilter(String patternStr) {
-    this(Pattern.compile(patternStr));
-  }
-
-  /**
-   * Constructs a pattern file name filter object.
-   * @param pattern the pattern on which to filter file names
-   */
-  public PatternFilenameFilter(Pattern pattern) {
-    this.pattern = Preconditions.checkNotNull(pattern);
-  }
-
-  /*@Override*/ public boolean accept(File dir, String fileName) {
-    return pattern.matcher(fileName).matches();
-  }
-}
diff --git a/src/com/google/common/io/Resources.java b/src/com/google/common/io/Resources.java
deleted file mode 100644
index bd34dbb..0000000
--- a/src/com/google/common/io/Resources.java
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.io;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.net.URL;
-import java.nio.charset.Charset;
-import java.util.List;
-
-/**
- * Provides utility methods for working with resources in the classpath.
- * Note that even those these methods use {@link URL} parameters, they
- * are usually not appropriate for HTTP or other non-classpath resources.
- *
- * <p>All method parameters must be non-null unless documented otherwise.
- *
- * @author Chris Nokleberg
- * @author Ben Yu
- * @since 2009.09.15 <b>tentative</b>
- */
-public final class Resources {
-
-  /**
-   * Returns a factory that will supply instances of {@link InputStream} that
-   * read from the given URL.
-   *
-   * @param url the URL to read from
-   * @return the factory
-   */
-  public static InputSupplier<InputStream> newInputStreamSupplier(
-      final URL url) {
-    checkNotNull(url);
-    return new InputSupplier<InputStream>() {
-      public InputStream getInput() throws IOException {
-        return url.openStream();
-      }
-    };
-  }
-
-  /**
-   * Returns a factory that will supply instances of
-   * {@link InputStreamReader} that read a URL using the given character set.
-   *
-   * @param url the URL to read from
-   * @param charset the character set used when reading the URL contents
-   * @return the factory
-   */
-  public static InputSupplier<InputStreamReader> newReaderSupplier(
-      URL url, Charset charset) {
-    return CharStreams.newReaderSupplier(newInputStreamSupplier(url), charset);
-  }
-
-  /**
-   * Reads all bytes from a URL into a byte array.
-   *
-   * @param url the URL to read from
-   * @return a byte array containing all the bytes from the URL
-   * @throws IOException if an I/O error occurs
-   */
-  public static byte[] toByteArray(URL url) throws IOException {
-    return ByteStreams.toByteArray(newInputStreamSupplier(url));
-  }
-
-  /**
-   * Reads all characters from a URL into a {@link String}, using the given
-   * character set.
-   *
-   * @param url the URL to read from
-   * @param charset the character set used when reading the URL
-   * @return a string containing all the characters from the URL
-   * @throws IOException if an I/O error occurs.
-   */
-  public static String toString(URL url, Charset charset) throws IOException {
-    return CharStreams.toString(newReaderSupplier(url, charset));
-  }
-
-  /**
-   * Streams lines from a URL, stopping when our callback returns false, or we
-   * have read all of the lines.
-   *
-   * @param url the URL to read from
-   * @param charset the character set used when reading the URL
-   * @param callback the LineProcessor to use to handle the lines
-   * @return the output of processing the lines
-   * @throws IOException if an I/O error occurs
-   */
-  public static <T> T readLines(URL url, Charset charset,
-      LineProcessor<T> callback) throws IOException {
-    return CharStreams.readLines(newReaderSupplier(url, charset), callback);
-  }
-
-  /**
-   * Reads all of the lines from a URL. The lines do not include
-   * line-termination characters, but do include other leading and trailing
-   * whitespace.
-   *
-   * @param url the URL to read from
-   * @param charset the character set used when writing the file
-   * @return a mutable {@link List} containing all the lines
-   * @throws IOException if an I/O error occurs
-   */
-  public static List<String> readLines(URL url, Charset charset)
-      throws IOException {
-    return CharStreams.readLines(newReaderSupplier(url, charset));
-  }
-
-  /**
-   * Copies all bytes from a URL to an output stream.
-   *
-   * @param from the URL to read from
-   * @param to the output stream
-   * @throws IOException if an I/O error occurs
-   */
-  public static void copy(URL from, OutputStream to) throws IOException {
-    ByteStreams.copy(newInputStreamSupplier(from), to);
-  }
-  
-  /**
-   * Returns a {@code URL} pointing to {@code resourceName} if the resource is
-   * found in the class path. {@code Resources.class.getClassLoader()} is used
-   * to locate the resource.
-   * 
-   * @throws IllegalArgumentException if resource is not found
-   */
-  public static URL getResource(String resourceName) {
-    URL url = Resources.class.getClassLoader().getResource(resourceName);
-    checkArgument(url != null, "resource %s not found.", resourceName);
-    return url;
-  }
-
-  /**
-   * Returns a {@code URL} pointing to {@code resourceName} that is relative to
-   * {@code contextClass}, if the resource is found in the class path. 
-   * 
-   * @throws IllegalArgumentException if resource is not found
-   */
-  public static URL getResource(Class<?> contextClass, String resourceName) {
-    URL url = contextClass.getResource(resourceName);
-    checkArgument(url != null, "resource %s relative to %s not found.",
-        resourceName, contextClass.getName());
-    return url;
-  }
-}
diff --git a/src/com/google/common/io/package-info.java b/src/com/google/common/io/package-info.java
deleted file mode 100644
index e0bbf85..0000000
--- a/src/com/google/common/io/package-info.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.io;
-
-/**
- * This package contains utility methods and classes for working with Java I/O,
- * for example input streams, output streams, readers, writers, and files.
- *
- * <p>Many of the methods are based on the
- * {@link com.google.common.io.InputSupplier} and
- * {@link com.google.common.io.OutputSupplier} interfaces. They are used as
- * factories for I/O objects that might throw {@link java.io.IOException} when
- * being created. The advantage of using a factory is that the helper methods in
- * this package can take care of closing the resource properly, even if an
- * exception is thrown. The {@link com.google.common.io.ByteStreams},
- * {@link com.google.common.io.CharStreams}, and
- * {@link com.google.common.io.Files} classes all have static helper methods to
- * create new factories and to work with them.
- *
- * <p>The methods of this package always throw {@link NullPointerException} in
- * response to a null value being supplied for any parameter that is not
- * explicitly annotated as being {@link javax.annotation.Nullable}.
- *
- * @author Chris Nokleberg
- */
diff --git a/src/com/google/common/primitives/Booleans.java b/src/com/google/common/primitives/Booleans.java
deleted file mode 100644
index 612b1a9..0000000
--- a/src/com/google/common/primitives/Booleans.java
+++ /dev/null
@@ -1,465 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.primitives;
-
-import com.google.common.annotations.GwtCompatible;
-
-import java.io.Serializable;
-import java.util.AbstractList;
-import java.util.Arrays;
-import java.util.BitSet;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-import java.util.RandomAccess;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkElementIndex;
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Preconditions.checkPositionIndexes;
-
-/**
- * Static utility methods pertaining to {@code boolean} primitives, that are not
- * already found in either {@link Boolean} or {@link Arrays}.
- *
- * @author Kevin Bourrillion
- * @since 2009.09.15 <b>tentative</b>
- */
-@GwtCompatible
-public final class Booleans {
-  private Booleans() {}
-
-  /**
-   * Returns a hash code for {@code value}; equal to the result of invoking
-   * {@code ((Boolean) value).hashCode()}.
-   *
-   * @param value a primitive {@code boolean} value
-   * @return a hash code for the value
-   */
-  public static int hashCode(boolean value) {
-    return value ? 1231 : 1237;
-  }
-
-  /**
-   * Compares the two specified {@code boolean} values in the standard way
-   * ({@code false} is considered less than {@code true}). The sign of the
-   * value returned is the same as that of {@code ((Boolean) a).compareTo(b)}.
-   *
-   * @param a the first {@code boolean} to compare
-   * @param b the second {@code boolean} to compare
-   * @return a positive number if only {@code a} is {@code true},  a negative
-   *     number if only {@code b} is true, or zero if {@code a == b}
-   */
-  public static int compare(boolean a, boolean b) {
-    return (a == b) ? 0 : (a ? 1 : -1);
-  }
-
-  /**
-   * Returns {@code true} if {@code target} is present as an element anywhere in
-   * {@code array}.
-   *
-   * <p><b>Note:</b> consider representing the array as a {@link
-   * BitSet} instead, replacing {@code Booleans.contains(array, true)}
-   * with {@code !bitSet.isEmpty()} and {@code Booleans.contains(array, false)}
-   * with {@code bitSet.nextClearBit(0) == sizeOfBitSet}.
-   *
-   * @param array an array of {@code boolean} values, possibly empty
-   * @param target a primitive {@code boolean} value
-   * @return {@code true} if {@code array[i] == target} for some value of {@code
-   *     i}
-   */
-  public static boolean contains(boolean[] array, boolean target) {
-    for (boolean value : array) {
-      if (value == target) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  /**
-   * Returns the index of the first appearance of the value {@code target} in
-   * {@code array}.
-   *
-   * <p><b>Note:</b> consider representing the array as a {@link BitSet}
-   * instead, and using {@link BitSet#nextSetBit(int)} or {@link
-   * BitSet#nextClearBit(int)}.
-   *
-   * @param array an array of {@code boolean} values, possibly empty
-   * @param target a primitive {@code boolean} value
-   * @return the least index {@code i} for which {@code array[i] == target}, or
-   *     {@code -1} if no such index exists.
-   */
-  public static int indexOf(boolean[] array, boolean target) {
-    return indexOf(array, target, 0, array.length);
-  }
-
-  // TODO: consider making this public
-  private static int indexOf(
-      boolean[] array, boolean target, int start, int end) {
-    for (int i = start; i < end; i++) {
-      if (array[i] == target) {
-        return i;
-      }
-    }
-    return -1;
-  }
-
-  /**
-   * Returns the start position of the first occurrence of the specified {@code
-   * target} within {@code array}, or {@code -1} if there is no such occurrence.
-   *
-   * <p>More formally, returns the lowest index {@code i} such that {@code
-   * java.util.Arrays.copyOfRange(array, i, i + target.length)} contains exactly
-   * the same elements as {@code target}.
-   *
-   * @param array the array to search for the sequence {@code target}
-   * @param target the array to search for as a sub-sequence of {@code array}
-   */
-  public static int indexOf(boolean[] array, boolean[] target) {
-    checkNotNull(array, "array");
-    checkNotNull(target, "target");
-    if (target.length == 0) {
-      return 0;
-    }
-
-    outer:
-    for (int i = 0; i < array.length - target.length + 1; i++) {
-      for (int j = 0; j < target.length; j++) {
-        if (array[i + j] != target[j]) {
-          continue outer;
-        }
-      }
-      return i;
-    }
-    return -1;
-  }
-
-  /**
-   * Returns the index of the last appearance of the value {@code target} in
-   * {@code array}.
-   *
-   * @param array an array of {@code boolean} values, possibly empty
-   * @param target a primitive {@code boolean} value
-   * @return the greatest index {@code i} for which {@code array[i] == target},
-   *     or {@code -1} if no such index exists.
-   */
-  public static int lastIndexOf(boolean[] array, boolean target) {
-    return lastIndexOf(array, target, 0, array.length);
-  }
-
-  // TODO: consider making this public
-  private static int lastIndexOf(
-      boolean[] array, boolean target, int start, int end) {
-    for (int i = end - 1; i >= start; i--) {
-      if (array[i] == target) {
-        return i;
-      }
-    }
-    return -1;
-  }
-
-  /**
-   * Returns the values from each provided array combined into a single array.
-   * For example, {@code concat(new boolean[] {a, b}, new boolean[] {}, new
-   * boolean[] {c}} returns the array {@code {a, b, c}}.
-   *
-   * @param arrays zero or more {@code boolean} arrays
-   * @return a single array containing all the values from the source arrays, in
-   *     order
-   */
-  public static boolean[] concat(boolean[]... arrays) {
-    int length = 0;
-    for (boolean[] array : arrays) {
-      length += array.length;
-    }
-    boolean[] result = new boolean[length];
-    int pos = 0;
-    for (boolean[] array : arrays) {
-      System.arraycopy(array, 0, result, pos, array.length);
-      pos += array.length;
-    }
-    return result;
-  }
-
-  /**
-   * Returns an array containing the same values as {@code array}, but
-   * guaranteed to be of a specified minimum length. If {@code array} already
-   * has a length of at least {@code minLength}, it is returned directly.
-   * Otherwise, a new array of size {@code minLength + padding} is returned,
-   * containing the values of {@code array}, and zeroes in the remaining places.
-   *
-   * @param array the source array
-   * @param minLength the minimum length the returned array must guarantee
-   * @param padding an extra amount to "grow" the array by if growth is
-   *     necessary
-   * @throws IllegalArgumentException if {@code minLength} or {@code padding} is
-   *     negative
-   * @return an array containing the values of {@code array}, with guaranteed
-   *     minimum length {@code minLength}
-   */
-  public static boolean[] ensureCapacity(
-      boolean[] array, int minLength, int padding) {
-    checkArgument(minLength >= 0, "Invalid minLength: %s", minLength);
-    checkArgument(padding >= 0, "Invalid padding: %s", padding);
-    return (array.length < minLength)
-        ? copyOf(array, minLength + padding)
-        : array;
-  }
-
-  // Arrays.copyOf() requires Java 6
-  private static boolean[] copyOf(boolean[] original, int length) {
-    boolean[] copy = new boolean[length];
-    System.arraycopy(original, 0, copy, 0, Math.min(original.length, length));
-    return copy;
-  }
-
-  /**
-   * Returns a string containing the supplied {@code boolean} values separated
-   * by {@code separator}. For example, {@code join("-", false, true, false)}
-   * returns the string {@code "false-true-false"}.
-   *
-   * @param separator the text that should appear between consecutive values in
-   *     the resulting string (but not at the start or end)
-   * @param array an array of {@code boolean} values, possibly empty
-   */
-  public static String join(String separator, boolean... array) {
-    checkNotNull(separator);
-    if (array.length == 0) {
-      return "";
-    }
-
-    // For pre-sizing a builder, just get the right order of magnitude
-    StringBuilder builder = new StringBuilder(array.length * 7);
-    builder.append(array[0]);
-    for (int i = 1; i < array.length; i++) {
-      builder.append(separator).append(array[i]);
-    }
-    return builder.toString();
-  }
-
-  /**
-   * Returns a comparator that compares two {@code boolean} arrays
-   * lexicographically. That is, it compares, using {@link
-   * #compare(boolean, boolean)}), the first pair of values that follow any
-   * common prefix, or when one array is a prefix of the other, treats the
-   * shorter array as the lesser. For example,
-   * {@code [] < [false] < [false, true] < [true]}.
-   *
-   * <p>The returned comparator is inconsistent with {@link
-   * Object#equals(Object)} (since arrays support only identity equality), but
-   * it is consistent with {@link Arrays#equals(boolean[], boolean[])}.
-   *
-   * @see <a href="http://en.wikipedia.org/wiki/Lexicographical_order">
-   *     Lexicographical order</a> article at Wikipedia
-   * @since 2010.01.04 <b>tentative</b>
-   */
-  public static Comparator<boolean[]> lexicographicalComparator() {
-    return LexicographicalComparator.INSTANCE;
-  }
-
-  private enum LexicographicalComparator implements Comparator<boolean[]> {
-    INSTANCE;
-
-    public int compare(boolean[] left, boolean[] right) {
-      int minLength = Math.min(left.length, right.length);
-      for (int i = 0; i < minLength; i++) {
-        int result = Booleans.compare(left[i], right[i]);
-        if (result != 0) {
-          return result;
-        }
-      }
-      return left.length - right.length;
-    }
-  }
-
-  /**
-   * Copies a collection of {@code Boolean} instances into a new array of
-   * primitive {@code boolean} values.
-   *
-   * <p>Elements are copied from the argument collection as if by {@code
-   * collection.toArray()}.  Calling this method is as thread-safe as calling
-   * that method.
-   *
-   * <p><b>Note:</b> consider representing the collection as a {@link
-   * BitSet} instead.
-   *
-   * @param collection a collection of {@code Boolean} objects
-   * @return an array containing the same values as {@code collection}, in the
-   *     same order, converted to primitives
-   * @throws NullPointerException if {@code collection} or any of its elements
-   *     is null
-   */
-  public static boolean[] toArray(Collection<Boolean> collection) {
-    if (collection instanceof BooleanArrayAsList) {
-      return ((BooleanArrayAsList) collection).toBooleanArray();
-    }
-
-    Object[] boxedArray = collection.toArray();
-    int len = boxedArray.length;
-    boolean[] array = new boolean[len];
-    for (int i = 0; i < len; i++) {
-      array[i] = (Boolean) boxedArray[i];
-    }
-    return array;
-  }
-
-  /**
-   * Returns a fixed-size list backed by the specified array, similar to {@link
-   * Arrays#asList(Object[])}. The list supports {@link List#set(int, Object)},
-   * but any attempt to set a value to {@code null} will result in a {@link
-   * NullPointerException}.
-   *
-   * <p>The returned list maintains the values, but not the identities, of
-   * {@code Boolean} objects written to or read from it.  For example, whether
-   * {@code list.get(0) == list.get(0)} is true for the returned list is
-   * unspecified.
-   *
-   * @param backingArray the array to back the list
-   * @return a list view of the array
-   */
-  public static List<Boolean> asList(boolean... backingArray) {
-    if (backingArray.length == 0) {
-      return Collections.emptyList();
-    }
-    return new BooleanArrayAsList(backingArray);
-  }
-
-  @GwtCompatible
-  private static class BooleanArrayAsList extends AbstractList<Boolean>
-      implements RandomAccess, Serializable {
-    final boolean[] array;
-    final int start;
-    final int end;
-
-    BooleanArrayAsList(boolean[] array) {
-      this(array, 0, array.length);
-    }
-
-    BooleanArrayAsList(boolean[] array, int start, int end) {
-      this.array = array;
-      this.start = start;
-      this.end = end;
-    }
-
-    @Override public int size() {
-      return end - start;
-    }
-
-    @Override public boolean isEmpty() {
-      return false;
-    }
-
-    @Override public Boolean get(int index) {
-      checkElementIndex(index, size());
-      return array[start + index];
-    }
-
-    @Override public boolean contains(Object target) {
-      // Overridden to prevent a ton of boxing
-      return (target instanceof Boolean)
-          && Booleans.indexOf(array, (Boolean) target, start, end) != -1;
-    }
-
-    @Override public int indexOf(Object target) {
-      // Overridden to prevent a ton of boxing
-      if (target instanceof Boolean) {
-        int i = Booleans.indexOf(array, (Boolean) target, start, end);
-        if (i >= 0) {
-          return i - start;
-        }
-      }
-      return -1;
-    }
-
-    @Override public int lastIndexOf(Object target) {
-      // Overridden to prevent a ton of boxing
-      if (target instanceof Boolean) {
-        int i = Booleans.lastIndexOf(array, (Boolean) target, start, end);
-        if (i >= 0) {
-          return i - start;
-        }
-      }
-      return -1;
-    }
-
-    @Override public Boolean set(int index, Boolean element) {
-      checkElementIndex(index, size());
-      boolean oldValue = array[start + index];
-      array[start + index] = element;
-      return oldValue;
-    }
-
-    /** In GWT, List and AbstractList do not have the subList method. */
-    /*@Override*/ public List<Boolean> subList(int fromIndex, int toIndex) {
-      int size = size();
-      checkPositionIndexes(fromIndex, toIndex, size);
-      if (fromIndex == toIndex) {
-        return Collections.emptyList();
-      }
-      return new BooleanArrayAsList(array, start + fromIndex, start + toIndex);
-    }
-
-    @Override public boolean equals(Object object) {
-      if (object == this) {
-        return true;
-      }
-      if (object instanceof BooleanArrayAsList) {
-        BooleanArrayAsList that = (BooleanArrayAsList) object;
-        int size = size();
-        if (that.size() != size) {
-          return false;
-        }
-        for (int i = 0; i < size; i++) {
-          if (array[start + i] != that.array[that.start + i]) {
-            return false;
-          }
-        }
-        return true;
-      }
-      return super.equals(object);
-    }
-
-    @Override public int hashCode() {
-      int result = 1;
-      for (int i = start; i < end; i++) {
-        result = 31 * result + Booleans.hashCode(array[i]);
-      }
-      return result;
-    }
-
-    @Override public String toString() {
-      StringBuilder builder = new StringBuilder(size() * 7);
-      builder.append(array[start] ? "[true" : "[false");
-      for (int i = start + 1; i < end; i++) {
-        builder.append(array[i] ? ", true" : ", false");
-      }
-      return builder.append(']').toString();
-    }
-
-    boolean[] toBooleanArray() {
-      // Arrays.copyOfRange() requires Java 6
-      int size = size();
-      boolean[] result = new boolean[size];
-      System.arraycopy(array, start, result, 0, size);
-      return result;
-    }
-
-    private static final long serialVersionUID = 0;
-  }
-}
diff --git a/src/com/google/common/primitives/Bytes.java b/src/com/google/common/primitives/Bytes.java
deleted file mode 100644
index 8a67fed..0000000
--- a/src/com/google/common/primitives/Bytes.java
+++ /dev/null
@@ -1,380 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.primitives;
-
-import com.google.common.annotations.GwtCompatible;
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkElementIndex;
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Preconditions.checkPositionIndexes;
-
-import java.io.Serializable;
-import java.util.AbstractList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.RandomAccess;
-
-/**
- * Static utility methods pertaining to {@code byte} primitives, that are not
- * already found in either {@link Byte} or {@link Arrays}, <i>and interpret
- * bytes as neither signed nor unsigned</i>. The methods which specifically
- * treat bytes as signed or unsigned are found in {@link SignedBytes} and {@link
- * UnsignedBytes}.
- *
- * @author Kevin Bourrillion
- * @since 2009.09.15 <b>tentative</b>
- */
-@GwtCompatible
-public final class Bytes {
-  private Bytes() {}
-
-  /**
-   * Returns a hash code for {@code value}; equal to the result of invoking
-   * {@code ((Byte) value).hashCode()}.
-   *
-   * @param value a primitive {@code byte} value
-   * @return a hash code for the value
-   */
-  public static int hashCode(byte value) {
-    return value;
-  }
-
-  /**
-   * Returns {@code true} if {@code target} is present as an element anywhere in
-   * {@code array}.
-   *
-   * @param array an array of {@code byte} values, possibly empty
-   * @param target a primitive {@code byte} value
-   * @return {@code true} if {@code array[i] == target} for some value of {@code
-   *     i}
-   */
-  public static boolean contains(byte[] array, byte target) {
-    for (byte value : array) {
-      if (value == target) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  /**
-   * Returns the index of the first appearance of the value {@code target} in
-   * {@code array}.
-   *
-   * @param array an array of {@code byte} values, possibly empty
-   * @param target a primitive {@code byte} value
-   * @return the least index {@code i} for which {@code array[i] == target}, or
-   *     {@code -1} if no such index exists.
-   */
-  public static int indexOf(byte[] array, byte target) {
-    return indexOf(array, target, 0, array.length);
-  }
-
-  // TODO: consider making this public
-  private static int indexOf(
-      byte[] array, byte target, int start, int end) {
-    for (int i = start; i < end; i++) {
-      if (array[i] == target) {
-        return i;
-      }
-    }
-    return -1;
-  }
-
-  /**
-   * Returns the start position of the first occurrence of the specified {@code
-   * target} within {@code array}, or {@code -1} if there is no such occurrence.
-   *
-   * <p>More formally, returns the lowest index {@code i} such that {@code
-   * java.util.Arrays.copyOfRange(array, i, i + target.length)} contains exactly
-   * the same elements as {@code target}.
-   *
-   * @param array the array to search for the sequence {@code target}
-   * @param target the array to search for as a sub-sequence of {@code array}
-   */
-  public static int indexOf(byte[] array, byte[] target) {
-    checkNotNull(array, "array");
-    checkNotNull(target, "target");
-    if (target.length == 0) {
-      return 0;
-    }
-
-    outer:
-    for (int i = 0; i < array.length - target.length + 1; i++) {
-      for (int j = 0; j < target.length; j++) {
-        if (array[i + j] != target[j]) {
-          continue outer;
-        }
-      }
-      return i;
-    }
-    return -1;
-  }
-
-  /**
-   * Returns the index of the last appearance of the value {@code target} in
-   * {@code array}.
-   *
-   * @param array an array of {@code byte} values, possibly empty
-   * @param target a primitive {@code byte} value
-   * @return the greatest index {@code i} for which {@code array[i] == target},
-   *     or {@code -1} if no such index exists.
-   */
-  public static int lastIndexOf(byte[] array, byte target) {
-    return lastIndexOf(array, target, 0, array.length);
-  }
-
-  // TODO: consider making this public
-  private static int lastIndexOf(
-      byte[] array, byte target, int start, int end) {
-    for (int i = end - 1; i >= start; i--) {
-      if (array[i] == target) {
-        return i;
-      }
-    }
-    return -1;
-  }
-
-  /**
-   * Returns the values from each provided array combined into a single array.
-   * For example, {@code concat(new byte[] {a, b}, new byte[] {}, new
-   * byte[] {c}} returns the array {@code {a, b, c}}.
-   *
-   * @param arrays zero or more {@code byte} arrays
-   * @return a single array containing all the values from the source arrays, in
-   *     order
-   */
-  public static byte[] concat(byte[]... arrays) {
-    int length = 0;
-    for (byte[] array : arrays) {
-      length += array.length;
-    }
-    byte[] result = new byte[length];
-    int pos = 0;
-    for (byte[] array : arrays) {
-      System.arraycopy(array, 0, result, pos, array.length);
-      pos += array.length;
-    }
-    return result;
-  }
-
-  /**
-   * Returns an array containing the same values as {@code array}, but
-   * guaranteed to be of a specified minimum length. If {@code array} already
-   * has a length of at least {@code minLength}, it is returned directly.
-   * Otherwise, a new array of size {@code minLength + padding} is returned,
-   * containing the values of {@code array}, and zeroes in the remaining places.
-   *
-   * @param array the source array
-   * @param minLength the minimum length the returned array must guarantee
-   * @param padding an extra amount to "grow" the array by if growth is
-   *     necessary
-   * @throws IllegalArgumentException if {@code minLength} or {@code padding} is
-   *     negative
-   * @return an array containing the values of {@code array}, with guaranteed
-   *     minimum length {@code minLength}
-   */
-  public static byte[] ensureCapacity(
-      byte[] array, int minLength, int padding) {
-    checkArgument(minLength >= 0, "Invalid minLength: %s", minLength);
-    checkArgument(padding >= 0, "Invalid padding: %s", padding);
-    return (array.length < minLength)
-        ? copyOf(array, minLength + padding)
-        : array;
-  }
-
-  // Arrays.copyOf() requires Java 6
-  private static byte[] copyOf(byte[] original, int length) {
-    byte[] copy = new byte[length];
-    System.arraycopy(original, 0, copy, 0, Math.min(original.length, length));
-    return copy;
-  }
-
-  /**
-   * Copies a collection of {@code Byte} instances into a new array of
-   * primitive {@code byte} values.
-   *
-   * <p>Elements are copied from the argument collection as if by {@code
-   * collection.toArray()}.  Calling this method is as thread-safe as calling
-   * that method.
-   *
-   * @param collection a collection of {@code Byte} objects
-   * @return an array containing the same values as {@code collection}, in the
-   *     same order, converted to primitives
-   * @throws NullPointerException if {@code collection} or any of its elements
-   *     is null
-   */
-  public static byte[] toArray(Collection<Byte> collection) {
-    if (collection instanceof ByteArrayAsList) {
-      return ((ByteArrayAsList) collection).toByteArray();
-    }
-
-    Object[] boxedArray = collection.toArray();
-    int len = boxedArray.length;
-    byte[] array = new byte[len];
-    for (int i = 0; i < len; i++) {
-      array[i] = (Byte) boxedArray[i];
-    }
-    return array;
-  }
-
-  /**
-   * Returns a fixed-size list backed by the specified array, similar to {@link
-   * Arrays#asList(Object[])}. The list supports {@link List#set(int, Object)},
-   * but any attempt to set a value to {@code null} will result in a {@link
-   * NullPointerException}.
-   *
-   * <p>The returned list maintains the values, but not the identities, of
-   * {@code Byte} objects written to or read from it.  For example, whether
-   * {@code list.get(0) == list.get(0)} is true for the returned list is
-   * unspecified.
-   *
-   * @param backingArray the array to back the list
-   * @return a list view of the array
-   */
-  public static List<Byte> asList(byte... backingArray) {
-    if (backingArray.length == 0) {
-      return Collections.emptyList();
-    }
-    return new ByteArrayAsList(backingArray);
-  }
-
-  @GwtCompatible
-  private static class ByteArrayAsList extends AbstractList<Byte>
-      implements RandomAccess, Serializable {
-    final byte[] array;
-    final int start;
-    final int end;
-
-    ByteArrayAsList(byte[] array) {
-      this(array, 0, array.length);
-    }
-
-    ByteArrayAsList(byte[] array, int start, int end) {
-      this.array = array;
-      this.start = start;
-      this.end = end;
-    }
-
-    @Override public int size() {
-      return end - start;
-    }
-
-    @Override public boolean isEmpty() {
-      return false;
-    }
-
-    @Override public Byte get(int index) {
-      checkElementIndex(index, size());
-      return array[start + index];
-    }
-
-    @Override public boolean contains(Object target) {
-      // Overridden to prevent a ton of boxing
-      return (target instanceof Byte)
-          && Bytes.indexOf(array, (Byte) target, start, end) != -1;
-    }
-
-    @Override public int indexOf(Object target) {
-      // Overridden to prevent a ton of boxing
-      if (target instanceof Byte) {
-        int i = Bytes.indexOf(array, (Byte) target, start, end);
-        if (i >= 0) {
-          return i - start;
-        }
-      }
-      return -1;
-    }
-
-    @Override public int lastIndexOf(Object target) {
-      // Overridden to prevent a ton of boxing
-      if (target instanceof Byte) {
-        int i = Bytes.lastIndexOf(array, (Byte) target, start, end);
-        if (i >= 0) {
-          return i - start;
-        }
-      }
-      return -1;
-    }
-
-    @Override public Byte set(int index, Byte element) {
-      checkElementIndex(index, size());
-      byte oldValue = array[start + index];
-      array[start + index] = element;
-      return oldValue;
-    }
-
-    /** In GWT, List and AbstractList do not have the subList method. */
-    /*@Override*/ public List<Byte> subList(int fromIndex, int toIndex) {
-      int size = size();
-      checkPositionIndexes(fromIndex, toIndex, size);
-      if (fromIndex == toIndex) {
-        return Collections.emptyList();
-      }
-      return new ByteArrayAsList(array, start + fromIndex, start + toIndex);
-    }
-
-    @Override public boolean equals(Object object) {
-      if (object == this) {
-        return true;
-      }
-      if (object instanceof ByteArrayAsList) {
-        ByteArrayAsList that = (ByteArrayAsList) object;
-        int size = size();
-        if (that.size() != size) {
-          return false;
-        }
-        for (int i = 0; i < size; i++) {
-          if (array[start + i] != that.array[that.start + i]) {
-            return false;
-          }
-        }
-        return true;
-      }
-      return super.equals(object);
-    }
-
-    @Override public int hashCode() {
-      int result = 1;
-      for (int i = start; i < end; i++) {
-        result = 31 * result + Bytes.hashCode(array[i]);
-      }
-      return result;
-    }
-
-    @Override public String toString() {
-      StringBuilder builder = new StringBuilder(size() * 5);
-      builder.append('[').append(array[start]);
-      for (int i = start + 1; i < end; i++) {
-        builder.append(", ").append(array[i]);
-      }
-      return builder.append(']').toString();
-    }
-
-    byte[] toByteArray() {
-      // Arrays.copyOfRange() requires Java 6
-      int size = size();
-      byte[] result = new byte[size];
-      System.arraycopy(array, start, result, 0, size);
-      return result;
-    }
-
-    private static final long serialVersionUID = 0;
-  }
-}
diff --git a/src/com/google/common/primitives/Chars.java b/src/com/google/common/primitives/Chars.java
deleted file mode 100644
index 3c422a4..0000000
--- a/src/com/google/common/primitives/Chars.java
+++ /dev/null
@@ -1,566 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.primitives;
-
-import com.google.common.annotations.GwtCompatible;
-import com.google.common.annotations.GwtIncompatible;
-
-import java.io.Serializable;
-import java.util.AbstractList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-import java.util.RandomAccess;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkElementIndex;
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Preconditions.checkPositionIndexes;
-
-/**
- * Static utility methods pertaining to {@code char} primitives, that are not
- * already found in either {@link Character} or {@link Arrays}.
- *
- * @author Kevin Bourrillion
- * @since 2009.09.15 <b>tentative</b>
- */
-@GwtCompatible
-public final class Chars {
-  private Chars() {}
-
-  /**
-   * The number of bytes required to represent a primitive {@code char}
-   * value.
-   */
-  public static final int BYTES = Character.SIZE / Byte.SIZE;
-
-  /**
-   * Returns a hash code for {@code value}; equal to the result of invoking
-   * {@code ((Character) value).hashCode()}.
-   *
-   * @param value a primitive {@code char} value
-   * @return a hash code for the value
-   */
-  public static int hashCode(char value) {
-    return value;
-  }
-
-  /**
-   * Returns the {@code char} value that is equal to {@code value}, if possible.
-   *
-   * @param value any value in the range of the {@code char} type
-   * @return the {@code char} value that equals {@code value}
-   * @throws IllegalArgumentException if {@code value} is greater than {@link
-   *     Character#MAX_VALUE} or less than {@link Character#MIN_VALUE}
-   */
-  public static char checkedCast(long value) {
-    char result = (char) value;
-    checkArgument(result == value, "Out of range: %s", value);
-    return result;
-  }
-
-  /**
-   * Returns the {@code char} nearest in value to {@code value}.
-   *
-   * @param value any {@code long} value
-   * @return the same value cast to {@code char} if it is in the range of the
-   *     {@code char} type, {@link Character#MAX_VALUE} if it is too large,
-   *     or {@link Character#MIN_VALUE} if it is too small
-   */
-  public static char saturatedCast(long value) {
-    if (value > Character.MAX_VALUE) {
-      return Character.MAX_VALUE;
-    }
-    if (value < Character.MIN_VALUE) {
-      return Character.MIN_VALUE;
-    }
-    return (char) value;
-  }
-
-  /**
-   * Compares the two specified {@code char} values. The sign of the value
-   * returned is the same as that of {@code ((Character) a).compareTo(b)}.
-   *
-   * @param a the first {@code char} to compare
-   * @param b the second {@code char} to compare
-   * @return a negative value if {@code a} is less than {@code b}; a positive
-   *     value if {@code a} is greater than {@code b}; or zero if they are equal
-   */
-  public static int compare(char a, char b) {
-    return a - b; // safe due to restricted range
-  }
-
-  /**
-   * Returns {@code true} if {@code target} is present as an element anywhere in
-   * {@code array}.
-   *
-   * @param array an array of {@code char} values, possibly empty
-   * @param target a primitive {@code char} value
-   * @return {@code true} if {@code array[i] == target} for some value of {@code
-   *     i}
-   */
-  public static boolean contains(char[] array, char target) {
-    for (char value : array) {
-      if (value == target) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  /**
-   * Returns the index of the first appearance of the value {@code target} in
-   * {@code array}.
-   *
-   * @param array an array of {@code char} values, possibly empty
-   * @param target a primitive {@code char} value
-   * @return the least index {@code i} for which {@code array[i] == target}, or
-   *     {@code -1} if no such index exists.
-   */
-  public static int indexOf(char[] array, char target) {
-    return indexOf(array, target, 0, array.length);
-  }
-
-  // TODO: consider making this public
-  private static int indexOf(
-      char[] array, char target, int start, int end) {
-    for (int i = start; i < end; i++) {
-      if (array[i] == target) {
-        return i;
-      }
-    }
-    return -1;
-  }
-
-  /**
-   * Returns the start position of the first occurrence of the specified {@code
-   * target} within {@code array}, or {@code -1} if there is no such occurrence.
-   *
-   * <p>More formally, returns the lowest index {@code i} such that {@code
-   * java.util.Arrays.copyOfRange(array, i, i + target.length)} contains exactly
-   * the same elements as {@code target}.
-   *
-   * @param array the array to search for the sequence {@code target}
-   * @param target the array to search for as a sub-sequence of {@code array}
-   */
-  public static int indexOf(char[] array, char[] target) {
-    checkNotNull(array, "array");
-    checkNotNull(target, "target");
-    if (target.length == 0) {
-      return 0;
-    }
-
-    outer:
-    for (int i = 0; i < array.length - target.length + 1; i++) {
-      for (int j = 0; j < target.length; j++) {
-        if (array[i + j] != target[j]) {
-          continue outer;
-        }
-      }
-      return i;
-    }
-    return -1;
-  }
-
-  /**
-   * Returns the index of the last appearance of the value {@code target} in
-   * {@code array}.
-   *
-   * @param array an array of {@code char} values, possibly empty
-   * @param target a primitive {@code char} value
-   * @return the greatest index {@code i} for which {@code array[i] == target},
-   *     or {@code -1} if no such index exists.
-   */
-  public static int lastIndexOf(char[] array, char target) {
-    return lastIndexOf(array, target, 0, array.length);
-  }
-
-  // TODO: consider making this public
-  private static int lastIndexOf(
-      char[] array, char target, int start, int end) {
-    for (int i = end - 1; i >= start; i--) {
-      if (array[i] == target) {
-        return i;
-      }
-    }
-    return -1;
-  }
-
-  /**
-   * Returns the least value present in {@code array}.
-   *
-   * @param array a <i>nonempty</i> array of {@code char} values
-   * @return the value present in {@code array} that is less than or equal to
-   *     every other value in the array
-   * @throws IllegalArgumentException if {@code array} is empty
-   */
-  public static char min(char... array) {
-    checkArgument(array.length > 0);
-    char min = array[0];
-    for (int i = 1; i < array.length; i++) {
-      if (array[i] < min) {
-        min = array[i];
-      }
-    }
-    return min;
-  }
-
-  /**
-   * Returns the greatest value present in {@code array}.
-   *
-   * @param array a <i>nonempty</i> array of {@code char} values
-   * @return the value present in {@code array} that is greater than or equal to
-   *     every other value in the array
-   * @throws IllegalArgumentException if {@code array} is empty
-   */
-  public static char max(char... array) {
-    checkArgument(array.length > 0);
-    char max = array[0];
-    for (int i = 1; i < array.length; i++) {
-      if (array[i] > max) {
-        max = array[i];
-      }
-    }
-    return max;
-  }
-
-  /**
-   * Returns the values from each provided array combined into a single array.
-   * For example, {@code concat(new char[] {a, b}, new char[] {}, new
-   * char[] {c}} returns the array {@code {a, b, c}}.
-   *
-   * @param arrays zero or more {@code char} arrays
-   * @return a single array containing all the values from the source arrays, in
-   *     order
-   */
-  public static char[] concat(char[]... arrays) {
-    int length = 0;
-    for (char[] array : arrays) {
-      length += array.length;
-    }
-    char[] result = new char[length];
-    int pos = 0;
-    for (char[] array : arrays) {
-      System.arraycopy(array, 0, result, pos, array.length);
-      pos += array.length;
-    }
-    return result;
-  }
-
-  /**
-   * Returns a big-endian representation of {@code value} in a 2-element byte
-   * array; equivalent to {@code
-   * ByteBuffer.allocate(2).putChar(value).array()}.  For example, the input
-   * value {@code '\\u5432'} would yield the byte array {@code {0x54, 0x32}}.
-   *
-   * <p>If you need to convert and concatenate several values (possibly even of
-   * different types), use a shared {@link java.nio.ByteBuffer} instance, or use
-   * {@link com.google.common.io.ByteStreams#newDataOutput()} to get a growable
-   * buffer.
-   */
-  @GwtIncompatible("doesn't work")
-  public static byte[] toByteArray(char value) {
-    return new byte[] {
-        (byte) (value >> 8),
-        (byte) value};
-  }
-
-  /**
-   * Returns the {@code char} value whose big-endian representation is
-   * stored in the first 2 bytes of {@code bytes}; equivalent to {@code
-   * ByteBuffer.wrap(bytes).getChar()}. For example, the input byte array
-   * {@code {0x54, 0x32}} would yield the {@code char} value {@code '\\u5432'}.
-   *
-   * <p>Arguably, it's preferable to use {@link java.nio.ByteBuffer}; that
-   * library exposes much more flexibility at little cost in readability.
-   *
-   * @throws IllegalArgumentException if {@code bytes} has fewer than 2
-   *     elements
-   */
-  @GwtIncompatible("doesn't work")
-  public static char fromByteArray(byte[] bytes) {
-    checkArgument(bytes.length >= BYTES,
-        "array too small: %s < %s", bytes.length, BYTES);
-    return (char) ((bytes[0] << 8) | (bytes[1] & 0xFF));
-  }
-
-  /**
-   * Returns an array containing the same values as {@code array}, but
-   * guaranteed to be of a specified minimum length. If {@code array} already
-   * has a length of at least {@code minLength}, it is returned directly.
-   * Otherwise, a new array of size {@code minLength + padding} is returned,
-   * containing the values of {@code array}, and zeroes in the remaining places.
-   *
-   * @param array the source array
-   * @param minLength the minimum length the returned array must guarantee
-   * @param padding an extra amount to "grow" the array by if growth is
-   *     necessary
-   * @throws IllegalArgumentException if {@code minLength} or {@code padding} is
-   *     negative
-   * @return an array containing the values of {@code array}, with guaranteed
-   *     minimum length {@code minLength}
-   */
-  public static char[] ensureCapacity(
-      char[] array, int minLength, int padding) {
-    checkArgument(minLength >= 0, "Invalid minLength: %s", minLength);
-    checkArgument(padding >= 0, "Invalid padding: %s", padding);
-    return (array.length < minLength)
-        ? copyOf(array, minLength + padding)
-        : array;
-  }
-
-  // Arrays.copyOf() requires Java 6
-  private static char[] copyOf(char[] original, int length) {
-    char[] copy = new char[length];
-    System.arraycopy(original, 0, copy, 0, Math.min(original.length, length));
-    return copy;
-  }
-
-  /**
-   * Returns a string containing the supplied {@code char} values separated
-   * by {@code separator}. For example, {@code join("-", '1', '2', '3')} returns
-   * the string {@code "1-2-3"}.
-   *
-   * @param separator the text that should appear between consecutive values in
-   *     the resulting string (but not at the start or end)
-   * @param array an array of {@code char} values, possibly empty
-   */
-  public static String join(String separator, char... array) {
-    checkNotNull(separator);
-    int len = array.length;
-    if (len == 0) {
-      return "";
-    }
-
-    StringBuilder builder
-        = new StringBuilder(len + separator.length() * (len - 1));
-    builder.append(array[0]);
-    for (int i = 1; i < len; i++) {
-      builder.append(separator).append(array[i]);
-    }
-    return builder.toString();
-  }
-
-  /**
-   * Returns a comparator that compares two {@code char} arrays
-   * lexicographically. That is, it compares, using {@link
-   * #compare(char, char)}), the first pair of values that follow any
-   * common prefix, or when one array is a prefix of the other, treats the
-   * shorter array as the lesser. For example,
-   * {@code [] < ['a'] < ['a', 'b'] < ['b']}.
-   *
-   * <p>The returned comparator is inconsistent with {@link
-   * Object#equals(Object)} (since arrays support only identity equality), but
-   * it is consistent with {@link Arrays#equals(char[], char[])}.
-   *
-   * @see <a href="http://en.wikipedia.org/wiki/Lexicographical_order">
-   *     Lexicographical order</a> article at Wikipedia
-   * @since 2010.01.04 <b>tentative</b>
-   */
-  public static Comparator<char[]> lexicographicalComparator() {
-    return LexicographicalComparator.INSTANCE;
-  }
-
-  private enum LexicographicalComparator implements Comparator<char[]> {
-    INSTANCE;
-
-    public int compare(char[] left, char[] right) {
-      int minLength = Math.min(left.length, right.length);
-      for (int i = 0; i < minLength; i++) {
-        int result = Chars.compare(left[i], right[i]);
-        if (result != 0) {
-          return result;
-        }
-      }
-      return left.length - right.length;
-    }
-  }
-
-  /**
-   * Copies a collection of {@code Character} instances into a new array of
-   * primitive {@code char} values.
-   *
-   * <p>Elements are copied from the argument collection as if by {@code
-   * collection.toArray()}.  Calling this method is as thread-safe as calling
-   * that method.
-   *
-   * @param collection a collection of {@code Character} objects
-   * @return an array containing the same values as {@code collection}, in the
-   *     same order, converted to primitives
-   * @throws NullPointerException if {@code collection} or any of its elements
-   *     is null
-   */
-  public static char[] toArray(Collection<Character> collection) {
-    if (collection instanceof CharArrayAsList) {
-      return ((CharArrayAsList) collection).toCharArray();
-    }
-
-    Object[] boxedArray = collection.toArray();
-    int len = boxedArray.length;
-    char[] array = new char[len];
-    for (int i = 0; i < len; i++) {
-      array[i] = (Character) boxedArray[i];
-    }
-    return array;
-  }
-
-  /**
-   * Returns a fixed-size list backed by the specified array, similar to {@link
-   * Arrays#asList(Object[])}. The list supports {@link List#set(int, Object)},
-   * but any attempt to set a value to {@code null} will result in a {@link
-   * NullPointerException}.
-   *
-   * <p>The returned list maintains the values, but not the identities, of
-   * {@code Character} objects written to or read from it.  For example, whether
-   * {@code list.get(0) == list.get(0)} is true for the returned list is
-   * unspecified.
-   *
-   * @param backingArray the array to back the list
-   * @return a list view of the array
-   */
-  public static List<Character> asList(char... backingArray) {
-    if (backingArray.length == 0) {
-      return Collections.emptyList();
-    }
-    return new CharArrayAsList(backingArray);
-  }
-
-  @GwtCompatible
-  private static class CharArrayAsList extends AbstractList<Character>
-      implements RandomAccess, Serializable {
-    final char[] array;
-    final int start;
-    final int end;
-
-    CharArrayAsList(char[] array) {
-      this(array, 0, array.length);
-    }
-
-    CharArrayAsList(char[] array, int start, int end) {
-      this.array = array;
-      this.start = start;
-      this.end = end;
-    }
-
-    @Override public int size() {
-      return end - start;
-    }
-
-    @Override public boolean isEmpty() {
-      return false;
-    }
-
-    @Override public Character get(int index) {
-      checkElementIndex(index, size());
-      return array[start + index];
-    }
-
-    @Override public boolean contains(Object target) {
-      // Overridden to prevent a ton of boxing
-      return (target instanceof Character)
-          && Chars.indexOf(array, (Character) target, start, end) != -1;
-    }
-
-    @Override public int indexOf(Object target) {
-      // Overridden to prevent a ton of boxing
-      if (target instanceof Character) {
-        int i = Chars.indexOf(array, (Character) target, start, end);
-        if (i >= 0) {
-          return i - start;
-        }
-      }
-      return -1;
-    }
-
-    @Override public int lastIndexOf(Object target) {
-      // Overridden to prevent a ton of boxing
-      if (target instanceof Character) {
-        int i = Chars.lastIndexOf(array, (Character) target, start, end);
-        if (i >= 0) {
-          return i - start;
-        }
-      }
-      return -1;
-    }
-
-    @Override public Character set(int index, Character element) {
-      checkElementIndex(index, size());
-      char oldValue = array[start + index];
-      array[start + index] = element;
-      return oldValue;
-    }
-
-    /** In GWT, List and AbstractList do not have the subList method. */
-    /*@Override*/ public List<Character> subList(int fromIndex, int toIndex) {
-      int size = size();
-      checkPositionIndexes(fromIndex, toIndex, size);
-      if (fromIndex == toIndex) {
-        return Collections.emptyList();
-      }
-      return new CharArrayAsList(array, start + fromIndex, start + toIndex);
-    }
-
-    @Override public boolean equals(Object object) {
-      if (object == this) {
-        return true;
-      }
-      if (object instanceof CharArrayAsList) {
-        CharArrayAsList that = (CharArrayAsList) object;
-        int size = size();
-        if (that.size() != size) {
-          return false;
-        }
-        for (int i = 0; i < size; i++) {
-          if (array[start + i] != that.array[that.start + i]) {
-            return false;
-          }
-        }
-        return true;
-      }
-      return super.equals(object);
-    }
-
-    @Override public int hashCode() {
-      int result = 1;
-      for (int i = start; i < end; i++) {
-        result = 31 * result + Chars.hashCode(array[i]);
-      }
-      return result;
-    }
-
-    @Override public String toString() {
-      StringBuilder builder = new StringBuilder(size() * 3);
-      builder.append('[').append(array[start]);
-      for (int i = start + 1; i < end; i++) {
-        builder.append(", ").append(array[i]);
-      }
-      return builder.append(']').toString();
-    }
-
-    char[] toCharArray() {
-      // Arrays.copyOfRange() requires Java 6
-      int size = size();
-      char[] result = new char[size];
-      System.arraycopy(array, start, result, 0, size);
-      return result;
-    }
-
-    private static final long serialVersionUID = 0;
-  }
-}
diff --git a/src/com/google/common/primitives/Doubles.java b/src/com/google/common/primitives/Doubles.java
deleted file mode 100644
index 19d6e55..0000000
--- a/src/com/google/common/primitives/Doubles.java
+++ /dev/null
@@ -1,502 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.primitives;
-
-import com.google.common.annotations.GwtCompatible;
-
-import java.io.Serializable;
-import java.util.AbstractList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-import java.util.RandomAccess;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkElementIndex;
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Preconditions.checkPositionIndexes;
-
-/**
- * Static utility methods pertaining to {@code double} primitives, that are not
- * already found in either {@link Double} or {@link Arrays}.
- *
- * @author Kevin Bourrillion
- * @since 2009.09.15 <b>tentative</b>
- */
-@GwtCompatible
-public final class Doubles {
-  private Doubles() {}
-
-  /**
-   * Returns a hash code for {@code value}; equal to the result of invoking
-   * {@code ((Double) value).hashCode()}.
-   *
-   * @param value a primitive {@code double} value
-   * @return a hash code for the value
-   */
-  public static int hashCode(double value) {
-    return ((Double) value).hashCode();
-    // TODO: do it this way when we can (GWT problem):
-    // long bits = Double.doubleToLongBits(value);
-    // return (int)(bits ^ (bits >>> 32));
-  }
-
-  /**
-   * Compares the two specified {@code double} values. The sign of the value
-   * returned is the same as that of <code>((Double) a).{@linkplain
-   * Double#compareTo compareTo}(b)</code>. As with that method, {@code NaN} is
-   * treated as greater than all other values, and {@code 0.0 > -0.0}.
-   *
-   * @param a the first {@code double} to compare
-   * @param b the second {@code double} to compare
-   * @return a negative value if {@code a} is less than {@code b}; a positive
-   *     value if {@code a} is greater than {@code b}; or zero if they are equal
-   */
-  public static int compare(double a, double b) {
-    return Double.compare(a, b);
-  }
-
-  /**
-   * Returns {@code true} if {@code target} is present as an element anywhere in
-   * {@code array}. Note that this always returns {@code false} when {@code
-   * target} is {@code NaN}.
-   *
-   * @param array an array of {@code double} values, possibly empty
-   * @param target a primitive {@code double} value
-   * @return {@code true} if {@code array[i] == target} for some value of {@code
-   *     i}
-   */
-  public static boolean contains(double[] array, double target) {
-    for (double value : array) {
-      if (value == target) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  /**
-   * Returns the index of the first appearance of the value {@code target} in
-   * {@code array}. Note that this always returns {@code -1} when {@code target}
-   * is {@code NaN}.
-   *
-   * @param array an array of {@code double} values, possibly empty
-   * @param target a primitive {@code double} value
-   * @return the least index {@code i} for which {@code array[i] == target}, or
-   *     {@code -1} if no such index exists.
-   */
-  public static int indexOf(double[] array, double target) {
-    return indexOf(array, target, 0, array.length);
-  }
-
-  // TODO: consider making this public
-  private static int indexOf(
-      double[] array, double target, int start, int end) {
-    for (int i = start; i < end; i++) {
-      if (array[i] == target) {
-        return i;
-      }
-    }
-    return -1;
-  }
-
-  /**
-   * Returns the start position of the first occurrence of the specified {@code
-   * target} within {@code array}, or {@code -1} if there is no such occurrence.
-   *
-   * <p>More formally, returns the lowest index {@code i} such that {@code
-   * java.util.Arrays.copyOfRange(array, i, i + target.length)} contains exactly
-   * the same elements as {@code target}.
-   *
-   * <p>Note that this always returns {@code -1} when {@code target} contains
-   * {@code NaN}.
-   *
-   * @param array the array to search for the sequence {@code target}
-   * @param target the array to search for as a sub-sequence of {@code array}
-   */
-  public static int indexOf(double[] array, double[] target) {
-    checkNotNull(array, "array");
-    checkNotNull(target, "target");
-    if (target.length == 0) {
-      return 0;
-    }
-
-    outer:
-    for (int i = 0; i < array.length - target.length + 1; i++) {
-      for (int j = 0; j < target.length; j++) {
-        if (array[i + j] != target[j]) {
-          continue outer;
-        }
-      }
-      return i;
-    }
-    return -1;
-  }
-
-  /**
-   * Returns the index of the last appearance of the value {@code target} in
-   * {@code array}. Note that this always returns {@code -1} when {@code target}
-   * is {@code NaN}.
-   *
-   * @param array an array of {@code double} values, possibly empty
-   * @param target a primitive {@code double} value
-   * @return the greatest index {@code i} for which {@code array[i] == target},
-   *     or {@code -1} if no such index exists.
-   */
-  public static int lastIndexOf(double[] array, double target) {
-    return lastIndexOf(array, target, 0, array.length);
-  }
-
-  // TODO: consider making this public
-  private static int lastIndexOf(
-      double[] array, double target, int start, int end) {
-    for (int i = end - 1; i >= start; i--) {
-      if (array[i] == target) {
-        return i;
-      }
-    }
-    return -1;
-  }
-
-  /**
-   * Returns the least value present in {@code array}, using the same rules of
-   * comparison as {@link Math#min(double, double)}.
-   *
-   * @param array a <i>nonempty</i> array of {@code double} values
-   * @return the value present in {@code array} that is less than or equal to
-   *     every other value in the array
-   * @throws IllegalArgumentException if {@code array} is empty
-   */
-  public static double min(double... array) {
-    checkArgument(array.length > 0);
-    double min = array[0];
-    for (int i = 1; i < array.length; i++) {
-      min = Math.min(min, array[i]);
-    }
-    return min;
-  }
-
-  /**
-   * Returns the greatest value present in {@code array}, using the same rules
-   * of comparison as {@link Math#max(double, double)}.
-   *
-   * @param array a <i>nonempty</i> array of {@code double} values
-   * @return the value present in {@code array} that is greater than or equal to
-   *     every other value in the array
-   * @throws IllegalArgumentException if {@code array} is empty
-   */
-  public static double max(double... array) {
-    checkArgument(array.length > 0);
-    double max = array[0];
-    for (int i = 1; i < array.length; i++) {
-      max = Math.max(max, array[i]);
-    }
-    return max;
-  }
-
-  /**
-   * Returns the values from each provided array combined into a single array.
-   * For example, {@code concat(new double[] {a, b}, new double[] {}, new
-   * double[] {c}} returns the array {@code {a, b, c}}.
-   *
-   * @param arrays zero or more {@code double} arrays
-   * @return a single array containing all the values from the source arrays, in
-   *     order
-   */
-  public static double[] concat(double[]... arrays) {
-    int length = 0;
-    for (double[] array : arrays) {
-      length += array.length;
-    }
-    double[] result = new double[length];
-    int pos = 0;
-    for (double[] array : arrays) {
-      System.arraycopy(array, 0, result, pos, array.length);
-      pos += array.length;
-    }
-    return result;
-  }
-
-  /**
-   * Returns an array containing the same values as {@code array}, but
-   * guaranteed to be of a specified minimum length. If {@code array} already
-   * has a length of at least {@code minLength}, it is returned directly.
-   * Otherwise, a new array of size {@code minLength + padding} is returned,
-   * containing the values of {@code array}, and zeroes in the remaining places.
-   *
-   * @param array the source array
-   * @param minLength the minimum length the returned array must guarantee
-   * @param padding an extra amount to "grow" the array by if growth is
-   *     necessary
-   * @throws IllegalArgumentException if {@code minLength} or {@code padding} is
-   *     negative
-   * @return an array containing the values of {@code array}, with guaranteed
-   *     minimum length {@code minLength}
-   */
-  public static double[] ensureCapacity(
-      double[] array, int minLength, int padding) {
-    checkArgument(minLength >= 0, "Invalid minLength: %s", minLength);
-    checkArgument(padding >= 0, "Invalid padding: %s", padding);
-    return (array.length < minLength)
-        ? copyOf(array, minLength + padding)
-        : array;
-  }
-
-  // Arrays.copyOf() requires Java 6
-  private static double[] copyOf(double[] original, int length) {
-    double[] copy = new double[length];
-    System.arraycopy(original, 0, copy, 0, Math.min(original.length, length));
-    return copy;
-  }
-
-  /**
-   * Returns a string containing the supplied {@code double} values, converted
-   * to strings as specified by {@link Double#toString(double)}, and separated
-   * by {@code separator}. For example, {@code join("-", 1.0, 2.0, 3.0)} returns
-   * the string {@code "1.0-2.0-3.0"}.
-   *
-   * @param separator the text that should appear between consecutive values in
-   *     the resulting string (but not at the start or end)
-   * @param array an array of {@code double} values, possibly empty
-   */
-  public static String join(String separator, double... array) {
-    checkNotNull(separator);
-    if (array.length == 0) {
-      return "";
-    }
-
-    // For pre-sizing a builder, just get the right order of magnitude
-    StringBuilder builder = new StringBuilder(array.length * 12);
-    builder.append(array[0]);
-    for (int i = 1; i < array.length; i++) {
-      builder.append(separator).append(array[i]);
-    }
-    return builder.toString();
-  }
-
-  /**
-   * Returns a comparator that compares two {@code double} arrays
-   * lexicographically. That is, it compares, using {@link
-   * #compare(double, double)}), the first pair of values that follow any
-   * common prefix, or when one array is a prefix of the other, treats the
-   * shorter array as the lesser. For example,
-   * {@code [] < [1.0] < [1.0, 2.0] < [2.0]}.
-   *
-   * <p>The returned comparator is inconsistent with {@link
-   * Object#equals(Object)} (since arrays support only identity equality), but
-   * it is consistent with {@link Arrays#equals(double[], double[])}.
-   *
-   * @see <a href="http://en.wikipedia.org/wiki/Lexicographical_order">
-   *     Lexicographical order</a> article at Wikipedia
-   * @since 2010.01.04 <b>tentative</b>
-   */
-  public static Comparator<double[]> lexicographicalComparator() {
-    return LexicographicalComparator.INSTANCE;
-  }
-
-  private enum LexicographicalComparator implements Comparator<double[]> {
-    INSTANCE;
-
-    public int compare(double[] left, double[] right) {
-      int minLength = Math.min(left.length, right.length);
-      for (int i = 0; i < minLength; i++) {
-        int result = Doubles.compare(left[i], right[i]);
-        if (result != 0) {
-          return result;
-        }
-      }
-      return left.length - right.length;
-    }
-  }
-
-  /**
-   * Copies a collection of {@code Double} instances into a new array of
-   * primitive {@code double} values.
-   *
-   * <p>Elements are copied from the argument collection as if by {@code
-   * collection.toArray()}.  Calling this method is as thread-safe as calling
-   * that method.
-   *
-   * @param collection a collection of {@code Double} objects
-   * @return an array containing the same values as {@code collection}, in the
-   *     same order, converted to primitives
-   * @throws NullPointerException if {@code collection} or any of its elements
-   *     is null
-   */
-  public static double[] toArray(Collection<Double> collection) {
-    if (collection instanceof DoubleArrayAsList) {
-      return ((DoubleArrayAsList) collection).toDoubleArray();
-    }
-
-    Object[] boxedArray = collection.toArray();
-    int len = boxedArray.length;
-    double[] array = new double[len];
-    for (int i = 0; i < len; i++) {
-      array[i] = (Double) boxedArray[i];
-    }
-    return array;
-  }
-
-  /**
-   * Returns a fixed-size list backed by the specified array, similar to {@link
-   * Arrays#asList(Object[])}. The list supports {@link List#set(int, Object)},
-   * but any attempt to set a value to {@code null} will result in a {@link
-   * NullPointerException}.
-   *
-   * <p>The returned list maintains the values, but not the identities, of
-   * {@code Double} objects written to or read from it.  For example, whether
-   * {@code list.get(0) == list.get(0)} is true for the returned list is
-   * unspecified.
-   *
-   * <p>The returned list may have unexpected behavior if it contains {@code
-   * NaN}, or if {@code NaN} is used as a parameter to any of its methods.
-   *
-   * @param backingArray the array to back the list
-   * @return a list view of the array
-   */
-  public static List<Double> asList(double... backingArray) {
-    if (backingArray.length == 0) {
-      return Collections.emptyList();
-    }
-    return new DoubleArrayAsList(backingArray);
-  }
-
-  @GwtCompatible
-  private static class DoubleArrayAsList extends AbstractList<Double>
-      implements RandomAccess, Serializable {
-    final double[] array;
-    final int start;
-    final int end;
-
-    DoubleArrayAsList(double[] array) {
-      this(array, 0, array.length);
-    }
-
-    DoubleArrayAsList(double[] array, int start, int end) {
-      this.array = array;
-      this.start = start;
-      this.end = end;
-    }
-
-    @Override public int size() {
-      return end - start;
-    }
-
-    @Override public boolean isEmpty() {
-      return false;
-    }
-
-    @Override public Double get(int index) {
-      checkElementIndex(index, size());
-      return array[start + index];
-    }
-
-    @Override public boolean contains(Object target) {
-      // Overridden to prevent a ton of boxing
-      return (target instanceof Double)
-          && Doubles.indexOf(array, (Double) target, start, end) != -1;
-    }
-
-    @Override public int indexOf(Object target) {
-      // Overridden to prevent a ton of boxing
-      if (target instanceof Double) {
-        int i = Doubles.indexOf(array, (Double) target, start, end);
-        if (i >= 0) {
-          return i - start;
-        }
-      }
-      return -1;
-    }
-
-    @Override public int lastIndexOf(Object target) {
-      // Overridden to prevent a ton of boxing
-      if (target instanceof Double) {
-        int i = Doubles.lastIndexOf(array, (Double) target, start, end);
-        if (i >= 0) {
-          return i - start;
-        }
-      }
-      return -1;
-    }
-
-    @Override public Double set(int index, Double element) {
-      checkElementIndex(index, size());
-      double oldValue = array[start + index];
-      array[start + index] = element;
-      return oldValue;
-    }
-
-    /** In GWT, List and AbstractList do not have the subList method. */
-    /*@Override*/ public List<Double> subList(int fromIndex, int toIndex) {
-      int size = size();
-      checkPositionIndexes(fromIndex, toIndex, size);
-      if (fromIndex == toIndex) {
-        return Collections.emptyList();
-      }
-      return new DoubleArrayAsList(array, start + fromIndex, start + toIndex);
-    }
-
-    @Override public boolean equals(Object object) {
-      if (object == this) {
-        return true;
-      }
-      if (object instanceof DoubleArrayAsList) {
-        DoubleArrayAsList that = (DoubleArrayAsList) object;
-        int size = size();
-        if (that.size() != size) {
-          return false;
-        }
-        for (int i = 0; i < size; i++) {
-          if (array[start + i] != that.array[that.start + i]) {
-            return false;
-          }
-        }
-        return true;
-      }
-      return super.equals(object);
-    }
-
-    @Override public int hashCode() {
-      int result = 1;
-      for (int i = start; i < end; i++) {
-        result = 31 * result + Doubles.hashCode(array[i]);
-      }
-      return result;
-    }
-
-    @Override public String toString() {
-      StringBuilder builder = new StringBuilder(size() * 12);
-      builder.append('[').append(array[start]);
-      for (int i = start + 1; i < end; i++) {
-        builder.append(", ").append(array[i]);
-      }
-      return builder.append(']').toString();
-    }
-
-    double[] toDoubleArray() {
-      // Arrays.copyOfRange() requires Java 6
-      int size = size();
-      double[] result = new double[size];
-      System.arraycopy(array, start, result, 0, size);
-      return result;
-    }
-
-    private static final long serialVersionUID = 0;
-  }
-}
diff --git a/src/com/google/common/primitives/Floats.java b/src/com/google/common/primitives/Floats.java
deleted file mode 100644
index 7062971..0000000
--- a/src/com/google/common/primitives/Floats.java
+++ /dev/null
@@ -1,499 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.primitives;
-
-import com.google.common.annotations.GwtCompatible;
-
-import java.io.Serializable;
-import java.util.AbstractList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-import java.util.RandomAccess;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkElementIndex;
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Preconditions.checkPositionIndexes;
-
-/**
- * Static utility methods pertaining to {@code float} primitives, that are not
- * already found in either {@link Float} or {@link Arrays}.
- *
- * @author Kevin Bourrillion
- * @since 2009.09.15 <b>tentative</b>
- */
-@GwtCompatible
-public final class Floats {
-  private Floats() {}
-
-  /**
-   * Returns a hash code for {@code value}; equal to the result of invoking
-   * {@code ((Float) value).hashCode()}.
-   *
-   * @param value a primitive {@code float} value
-   * @return a hash code for the value
-   */
-  public static int hashCode(float value) {
-    // TODO: is there a better way, that's still gwt-safe?
-    return ((Float) value).hashCode();
-  }
-
-  /**
-   * Compares the two specified {@code float} values using {@link
-   * Float#compare(float, float)}. You may prefer to invoke that method
-   * directly; this method exists only for consistency with the other utilities
-   * in this package.
-   *
-   * @param a the first {@code float} to compare
-   * @param b the second {@code float} to compare
-   * @return the result of invoking {@link Float#compare(float, float)}
-   */
-  public static int compare(float a, float b) {
-    return Float.compare(a, b);
-  }
-
-  /**
-   * Returns {@code true} if {@code target} is present as an element anywhere in
-   * {@code array}. Note that this always returns {@code false} when {@code
-   * target} is {@code NaN}.
-   *
-   * @param array an array of {@code float} values, possibly empty
-   * @param target a primitive {@code float} value
-   * @return {@code true} if {@code array[i] == target} for some value of {@code
-   *     i}
-   */
-  public static boolean contains(float[] array, float target) {
-    for (float value : array) {
-      if (value == target) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  /**
-   * Returns the index of the first appearance of the value {@code target} in
-   * {@code array}. Note that this always returns {@code -1} when {@code target}
-   * is {@code NaN}.
-   *
-   * @param array an array of {@code float} values, possibly empty
-   * @param target a primitive {@code float} value
-   * @return the least index {@code i} for which {@code array[i] == target}, or
-   *     {@code -1} if no such index exists.
-   */
-  public static int indexOf(float[] array, float target) {
-    return indexOf(array, target, 0, array.length);
-  }
-
-  // TODO: consider making this public
-  private static int indexOf(
-      float[] array, float target, int start, int end) {
-    for (int i = start; i < end; i++) {
-      if (array[i] == target) {
-        return i;
-      }
-    }
-    return -1;
-  }
-
-  /**
-   * Returns the start position of the first occurrence of the specified {@code
-   * target} within {@code array}, or {@code -1} if there is no such occurrence.
-   *
-   * <p>More formally, returns the lowest index {@code i} such that {@code
-   * java.util.Arrays.copyOfRange(array, i, i + target.length)} contains exactly
-   * the same elements as {@code target}.
-   *
-   * <p>Note that this always returns {@code -1} when {@code target} contains
-   * {@code NaN}.
-   *
-   * @param array the array to search for the sequence {@code target}
-   * @param target the array to search for as a sub-sequence of {@code array}
-   */
-  public static int indexOf(float[] array, float[] target) {
-    checkNotNull(array, "array");
-    checkNotNull(target, "target");
-    if (target.length == 0) {
-      return 0;
-    }
-
-    outer:
-    for (int i = 0; i < array.length - target.length + 1; i++) {
-      for (int j = 0; j < target.length; j++) {
-        if (array[i + j] != target[j]) {
-          continue outer;
-        }
-      }
-      return i;
-    }
-    return -1;
-  }
-
-  /**
-   * Returns the index of the last appearance of the value {@code target} in
-   * {@code array}. Note that this always returns {@code -1} when {@code target}
-   * is {@code NaN}.
-   *
-   * @param array an array of {@code float} values, possibly empty
-   * @param target a primitive {@code float} value
-   * @return the greatest index {@code i} for which {@code array[i] == target},
-   *     or {@code -1} if no such index exists.
-   */
-  public static int lastIndexOf(float[] array, float target) {
-    return lastIndexOf(array, target, 0, array.length);
-  }
-
-  // TODO: consider making this public
-  private static int lastIndexOf(
-      float[] array, float target, int start, int end) {
-    for (int i = end - 1; i >= start; i--) {
-      if (array[i] == target) {
-        return i;
-      }
-    }
-    return -1;
-  }
-
-  /**
-   * Returns the least value present in {@code array}, using the same rules of
-   * comparison as {@link Math#min(float, float)}.
-   *
-   * @param array a <i>nonempty</i> array of {@code float} values
-   * @return the value present in {@code array} that is less than or equal to
-   *     every other value in the array
-   * @throws IllegalArgumentException if {@code array} is empty
-   */
-  public static float min(float... array) {
-    checkArgument(array.length > 0);
-    float min = array[0];
-    for (int i = 1; i < array.length; i++) {
-      min = Math.min(min, array[i]);
-    }
-    return min;
-  }
-
-  /**
-   * Returns the greatest value present in {@code array}, using the same rules
-   * of comparison as {@link Math#min(float, float)}.
-   *
-   * @param array a <i>nonempty</i> array of {@code float} values
-   * @return the value present in {@code array} that is greater than or equal to
-   *     every other value in the array
-   * @throws IllegalArgumentException if {@code array} is empty
-   */
-  public static float max(float... array) {
-    checkArgument(array.length > 0);
-    float max = array[0];
-    for (int i = 1; i < array.length; i++) {
-      max = Math.max(max, array[i]);
-    }
-    return max;
-  }
-
-  /**
-   * Returns the values from each provided array combined into a single array.
-   * For example, {@code concat(new float[] {a, b}, new float[] {}, new
-   * float[] {c}} returns the array {@code {a, b, c}}.
-   *
-   * @param arrays zero or more {@code float} arrays
-   * @return a single array containing all the values from the source arrays, in
-   *     order
-   */
-  public static float[] concat(float[]... arrays) {
-    int length = 0;
-    for (float[] array : arrays) {
-      length += array.length;
-    }
-    float[] result = new float[length];
-    int pos = 0;
-    for (float[] array : arrays) {
-      System.arraycopy(array, 0, result, pos, array.length);
-      pos += array.length;
-    }
-    return result;
-  }
-
-  /**
-   * Returns an array containing the same values as {@code array}, but
-   * guaranteed to be of a specified minimum length. If {@code array} already
-   * has a length of at least {@code minLength}, it is returned directly.
-   * Otherwise, a new array of size {@code minLength + padding} is returned,
-   * containing the values of {@code array}, and zeroes in the remaining places.
-   *
-   * @param array the source array
-   * @param minLength the minimum length the returned array must guarantee
-   * @param padding an extra amount to "grow" the array by if growth is
-   *     necessary
-   * @throws IllegalArgumentException if {@code minLength} or {@code padding} is
-   *     negative
-   * @return an array containing the values of {@code array}, with guaranteed
-   *     minimum length {@code minLength}
-   */
-  public static float[] ensureCapacity(
-      float[] array, int minLength, int padding) {
-    checkArgument(minLength >= 0, "Invalid minLength: %s", minLength);
-    checkArgument(padding >= 0, "Invalid padding: %s", padding);
-    return (array.length < minLength)
-        ? copyOf(array, minLength + padding)
-        : array;
-  }
-
-  // Arrays.copyOf() requires Java 6
-  private static float[] copyOf(float[] original, int length) {
-    float[] copy = new float[length];
-    System.arraycopy(original, 0, copy, 0, Math.min(original.length, length));
-    return copy;
-  }
-
-  /**
-   * Returns a string containing the supplied {@code float} values, converted
-   * to strings as specified by {@link Float#toString(float)}, and separated by
-   * {@code separator}. For example, {@code join("-", 1.0f, 2.0f, 3.0f)}
-   * returns the string {@code "1.0-2.0-3.0"}.
-   *
-   * @param separator the text that should appear between consecutive values in
-   *     the resulting string (but not at the start or end)
-   * @param array an array of {@code float} values, possibly empty
-   */
-  public static String join(String separator, float... array) {
-    checkNotNull(separator);
-    if (array.length == 0) {
-      return "";
-    }
-
-    // For pre-sizing a builder, just get the right order of magnitude
-    StringBuilder builder = new StringBuilder(array.length * 12);
-    builder.append(array[0]);
-    for (int i = 1; i < array.length; i++) {
-      builder.append(separator).append(array[i]);
-    }
-    return builder.toString();
-  }
-
-  /**
-   * Returns a comparator that compares two {@code float} arrays
-   * lexicographically. That is, it compares, using {@link
-   * #compare(float, float)}), the first pair of values that follow any
-   * common prefix, or when one array is a prefix of the other, treats the
-   * shorter array as the lesser. For example, {@code [] < [1.0f] < [1.0f, 2.0f]
-   * < [2.0f]}.
-   *
-   * <p>The returned comparator is inconsistent with {@link
-   * Object#equals(Object)} (since arrays support only identity equality), but
-   * it is consistent with {@link Arrays#equals(float[], float[])}.
-   *
-   * @see <a href="http://en.wikipedia.org/wiki/Lexicographical_order">
-   *     Lexicographical order</a> article at Wikipedia
-   * @since 2010.01.04 <b>tentative</b>
-   */
-  public static Comparator<float[]> lexicographicalComparator() {
-    return LexicographicalComparator.INSTANCE;
-  }
-
-  private enum LexicographicalComparator implements Comparator<float[]> {
-    INSTANCE;
-
-    public int compare(float[] left, float[] right) {
-      int minLength = Math.min(left.length, right.length);
-      for (int i = 0; i < minLength; i++) {
-        int result = Floats.compare(left[i], right[i]);
-        if (result != 0) {
-          return result;
-        }
-      }
-      return left.length - right.length;
-    }
-  }
-
-  /**
-   * Copies a collection of {@code Float} instances into a new array of
-   * primitive {@code float} values.
-   *
-   * <p>Elements are copied from the argument collection as if by {@code
-   * collection.toArray()}.  Calling this method is as thread-safe as calling
-   * that method.
-   *
-   * @param collection a collection of {@code Float} objects
-   * @return an array containing the same values as {@code collection}, in the
-   *     same order, converted to primitives
-   * @throws NullPointerException if {@code collection} or any of its elements
-   *     is null
-   */
-  public static float[] toArray(Collection<Float> collection) {
-    if (collection instanceof FloatArrayAsList) {
-      return ((FloatArrayAsList) collection).toFloatArray();
-    }
-
-    Object[] boxedArray = collection.toArray();
-    int len = boxedArray.length;
-    float[] array = new float[len];
-    for (int i = 0; i < len; i++) {
-      array[i] = (Float) boxedArray[i];
-    }
-    return array;
-  }
-
-  /**
-   * Returns a fixed-size list backed by the specified array, similar to {@link
-   * Arrays#asList(Object[])}. The list supports {@link List#set(int, Object)},
-   * but any attempt to set a value to {@code null} will result in a {@link
-   * NullPointerException}.
-   *
-   * <p>The returned list maintains the values, but not the identities, of
-   * {@code Float} objects written to or read from it.  For example, whether
-   * {@code list.get(0) == list.get(0)} is true for the returned list is
-   * unspecified.
-   *
-   * <p>The returned list may have unexpected behavior if it contains {@code
-   * NaN}, or if {@code NaN} is used as a parameter to any of its methods.
-   *
-   * @param backingArray the array to back the list
-   * @return a list view of the array
-   */
-  public static List<Float> asList(float... backingArray) {
-    if (backingArray.length == 0) {
-      return Collections.emptyList();
-    }
-    return new FloatArrayAsList(backingArray);
-  }
-
-  @GwtCompatible
-  private static class FloatArrayAsList extends AbstractList<Float>
-      implements RandomAccess, Serializable {
-    final float[] array;
-    final int start;
-    final int end;
-
-    FloatArrayAsList(float[] array) {
-      this(array, 0, array.length);
-    }
-
-    FloatArrayAsList(float[] array, int start, int end) {
-      this.array = array;
-      this.start = start;
-      this.end = end;
-    }
-
-    @Override public int size() {
-      return end - start;
-    }
-
-    @Override public boolean isEmpty() {
-      return false;
-    }
-
-    @Override public Float get(int index) {
-      checkElementIndex(index, size());
-      return array[start + index];
-    }
-
-    @Override public boolean contains(Object target) {
-      // Overridden to prevent a ton of boxing
-      return (target instanceof Float)
-          && Floats.indexOf(array, (Float) target, start, end) != -1;
-    }
-
-    @Override public int indexOf(Object target) {
-      // Overridden to prevent a ton of boxing
-      if (target instanceof Float) {
-        int i = Floats.indexOf(array, (Float) target, start, end);
-        if (i >= 0) {
-          return i - start;
-        }
-      }
-      return -1;
-    }
-
-    @Override public int lastIndexOf(Object target) {
-      // Overridden to prevent a ton of boxing
-      if (target instanceof Float) {
-        int i = Floats.lastIndexOf(array, (Float) target, start, end);
-        if (i >= 0) {
-          return i - start;
-        }
-      }
-      return -1;
-    }
-
-    @Override public Float set(int index, Float element) {
-      checkElementIndex(index, size());
-      float oldValue = array[start + index];
-      array[start + index] = element;
-      return oldValue;
-    }
-
-    /** In GWT, List and AbstractList do not have the subList method. */
-    /*@Override*/ public List<Float> subList(int fromIndex, int toIndex) {
-      int size = size();
-      checkPositionIndexes(fromIndex, toIndex, size);
-      if (fromIndex == toIndex) {
-        return Collections.emptyList();
-      }
-      return new FloatArrayAsList(array, start + fromIndex, start + toIndex);
-    }
-
-    @Override public boolean equals(Object object) {
-      if (object == this) {
-        return true;
-      }
-      if (object instanceof FloatArrayAsList) {
-        FloatArrayAsList that = (FloatArrayAsList) object;
-        int size = size();
-        if (that.size() != size) {
-          return false;
-        }
-        for (int i = 0; i < size; i++) {
-          if (array[start + i] != that.array[that.start + i]) {
-            return false;
-          }
-        }
-        return true;
-      }
-      return super.equals(object);
-    }
-
-    @Override public int hashCode() {
-      int result = 1;
-      for (int i = start; i < end; i++) {
-        result = 31 * result + Floats.hashCode(array[i]);
-      }
-      return result;
-    }
-
-    @Override public String toString() {
-      StringBuilder builder = new StringBuilder(size() * 12);
-      builder.append('[').append(array[start]);
-      for (int i = start + 1; i < end; i++) {
-        builder.append(", ").append(array[i]);
-      }
-      return builder.append(']').toString();
-    }
-
-    float[] toFloatArray() {
-      // Arrays.copyOfRange() requires Java 6
-      int size = size();
-      float[] result = new float[size];
-      System.arraycopy(array, start, result, 0, size);
-      return result;
-    }
-
-    private static final long serialVersionUID = 0;
-  }
-}
diff --git a/src/com/google/common/primitives/Ints.java b/src/com/google/common/primitives/Ints.java
deleted file mode 100644
index 62023ca..0000000
--- a/src/com/google/common/primitives/Ints.java
+++ /dev/null
@@ -1,573 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.primitives;
-
-import com.google.common.annotations.GwtCompatible;
-import com.google.common.annotations.GwtIncompatible;
-
-import java.io.Serializable;
-import java.util.AbstractList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-import java.util.RandomAccess;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkElementIndex;
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Preconditions.checkPositionIndexes;
-
-/**
- * Static utility methods pertaining to {@code int} primitives, that are not
- * already found in either {@link Integer} or {@link Arrays}.
- *
- * @author Kevin Bourrillion
- * @since 2009.09.15 <b>tentative</b>
- */
-@GwtCompatible
-public final class Ints {
-  private Ints() {}
-
-  /**
-   * The number of bytes required to represent a primitive {@code int}
-   * value.
-   */
-  public static final int BYTES = Integer.SIZE / Byte.SIZE;
-
-  /**
-   * Returns a hash code for {@code value}; equal to the result of invoking
-   * {@code ((Integer) value).hashCode()}.
-   *
-   * @param value a primitive {@code int} value
-   * @return a hash code for the value
-   */
-  public static int hashCode(int value) {
-    return value;
-  }
-
-  /**
-   * Returns the {@code int} value that is equal to {@code value}, if possible.
-   *
-   * @param value any value in the range of the {@code int} type
-   * @return the {@code int} value that equals {@code value}
-   * @throws IllegalArgumentException if {@code value} is greater than {@link
-   *     Integer#MAX_VALUE} or less than {@link Integer#MIN_VALUE}
-   */
-  public static int checkedCast(long value) {
-    int result = (int) value;
-    checkArgument(result == value, "Out of range: %s", value);
-    return result;
-  }
-
-  /**
-   * Returns the {@code int} nearest in value to {@code value}.
-   *
-   * @param value any {@code long} value
-   * @return the same value cast to {@code int} if it is in the range of the
-   *     {@code int} type, {@link Integer#MAX_VALUE} if it is too large,
-   *     or {@link Integer#MIN_VALUE} if it is too small
-   */
-  public static int saturatedCast(long value) {
-    if (value > Integer.MAX_VALUE) {
-      return Integer.MAX_VALUE;
-    }
-    if (value < Integer.MIN_VALUE) {
-      return Integer.MIN_VALUE;
-    }
-    return (int) value;
-  }
-
-  /**
-   * Compares the two specified {@code int} values. The sign of the value
-   * returned is the same as that of {@code ((Integer) a).compareTo(b)}.
-   *
-   * @param a the first {@code int} to compare
-   * @param b the second {@code int} to compare
-   * @return a negative value if {@code a} is less than {@code b}; a positive
-   *     value if {@code a} is greater than {@code b}; or zero if they are equal
-   */
-  public static int compare(int a, int b) {
-    return (a < b) ? -1 : ((a > b) ? 1 : 0);
-  }
-
-  /**
-   * Returns {@code true} if {@code target} is present as an element anywhere in
-   * {@code array}.
-   *
-   * @param array an array of {@code int} values, possibly empty
-   * @param target a primitive {@code int} value
-   * @return {@code true} if {@code array[i] == target} for some value of {@code
-   *     i}
-   */
-  public static boolean contains(int[] array, int target) {
-    for (int value : array) {
-      if (value == target) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  /**
-   * Returns the index of the first appearance of the value {@code target} in
-   * {@code array}.
-   *
-   * @param array an array of {@code int} values, possibly empty
-   * @param target a primitive {@code int} value
-   * @return the least index {@code i} for which {@code array[i] == target}, or
-   *     {@code -1} if no such index exists.
-   */
-  public static int indexOf(int[] array, int target) {
-    return indexOf(array, target, 0, array.length);
-  }
-
-  // TODO: consider making this public
-  private static int indexOf(
-      int[] array, int target, int start, int end) {
-    for (int i = start; i < end; i++) {
-      if (array[i] == target) {
-        return i;
-      }
-    }
-    return -1;
-  }
-
-  /**
-   * Returns the start position of the first occurrence of the specified {@code
-   * target} within {@code array}, or {@code -1} if there is no such occurrence.
-   *
-   * <p>More formally, returns the lowest index {@code i} such that {@code
-   * java.util.Arrays.copyOfRange(array, i, i + target.length)} contains exactly
-   * the same elements as {@code target}.
-   *
-   * @param array the array to search for the sequence {@code target}
-   * @param target the array to search for as a sub-sequence of {@code array}
-   */
-  public static int indexOf(int[] array, int[] target) {
-    checkNotNull(array, "array");
-    checkNotNull(target, "target");
-    if (target.length == 0) {
-      return 0;
-    }
-
-    outer:
-    for (int i = 0; i < array.length - target.length + 1; i++) {
-      for (int j = 0; j < target.length; j++) {
-        if (array[i + j] != target[j]) {
-          continue outer;
-        }
-      }
-      return i;
-    }
-    return -1;
-  }
-
-  /**
-   * Returns the index of the last appearance of the value {@code target} in
-   * {@code array}.
-   *
-   * @param array an array of {@code int} values, possibly empty
-   * @param target a primitive {@code int} value
-   * @return the greatest index {@code i} for which {@code array[i] == target},
-   *     or {@code -1} if no such index exists.
-   */
-  public static int lastIndexOf(int[] array, int target) {
-    return lastIndexOf(array, target, 0, array.length);
-  }
-
-  // TODO: consider making this public
-  private static int lastIndexOf(
-      int[] array, int target, int start, int end) {
-    for (int i = end - 1; i >= start; i--) {
-      if (array[i] == target) {
-        return i;
-      }
-    }
-    return -1;
-  }
-
-  /**
-   * Returns the least value present in {@code array}.
-   *
-   * @param array a <i>nonempty</i> array of {@code int} values
-   * @return the value present in {@code array} that is less than or equal to
-   *     every other value in the array
-   * @throws IllegalArgumentException if {@code array} is empty
-   */
-  public static int min(int... array) {
-    checkArgument(array.length > 0);
-    int min = array[0];
-    for (int i = 1; i < array.length; i++) {
-      if (array[i] < min) {
-        min = array[i];
-      }
-    }
-    return min;
-  }
-
-  /**
-   * Returns the greatest value present in {@code array}.
-   *
-   * @param array a <i>nonempty</i> array of {@code int} values
-   * @return the value present in {@code array} that is greater than or equal to
-   *     every other value in the array
-   * @throws IllegalArgumentException if {@code array} is empty
-   */
-  public static int max(int... array) {
-    checkArgument(array.length > 0);
-    int max = array[0];
-    for (int i = 1; i < array.length; i++) {
-      if (array[i] > max) {
-        max = array[i];
-      }
-    }
-    return max;
-  }
-
-  /**
-   * Returns the values from each provided array combined into a single array.
-   * For example, {@code concat(new int[] {a, b}, new int[] {}, new
-   * int[] {c}} returns the array {@code {a, b, c}}.
-   *
-   * @param arrays zero or more {@code int} arrays
-   * @return a single array containing all the values from the source arrays, in
-   *     order
-   */
-  public static int[] concat(int[]... arrays) {
-    int length = 0;
-    for (int[] array : arrays) {
-      length += array.length;
-    }
-    int[] result = new int[length];
-    int pos = 0;
-    for (int[] array : arrays) {
-      System.arraycopy(array, 0, result, pos, array.length);
-      pos += array.length;
-    }
-    return result;
-  }
-
-  /**
-   * Returns a big-endian representation of {@code value} in a 4-element byte
-   * array; equivalent to {@code ByteBuffer.allocate(4).putInt(value).array()}.
-   * For example, the input value {@code 0x12131415} would yield the byte array
-   * {@code {0x12, 0x13, 0x14, 0x15}}.
-   *
-   * <p>If you need to convert and concatenate several values (possibly even of
-   * different types), use a shared {@link java.nio.ByteBuffer} instance, or use
-   * {@link com.google.common.io.ByteStreams#newDataOutput()} to get a growable
-   * buffer.
-   *
-   * <p><b>Warning:</b> do not use this method in GWT. It returns wrong answers.
-   */
-  @GwtIncompatible("doesn't work")
-  public static byte[] toByteArray(int value) {
-    return new byte[] {
-        (byte) (value >> 24),
-        (byte) (value >> 16),
-        (byte) (value >> 8),
-        (byte) value};
-  }
-
-  /**
-   * Returns the {@code int} value whose big-endian representation is stored in
-   * the first 4 bytes of {@code bytes}; equivalent to {@code
-   * ByteBuffer.wrap(bytes).getInt()}. For example, the input byte array {@code
-   * {0x12, 0x13, 0x14, 0x15, 0x33}} would yield the {@code int} value {@code
-   * 0x12131415}.
-   *
-   * <p>Arguably, it's preferable to use {@link java.nio.ByteBuffer}; that
-   * library exposes much more flexibility at little cost in readability.
-   *
-   * <p><b>Warning:</b> do not use this method in GWT. It returns wrong answers.
-   *
-   * @throws IllegalArgumentException if {@code bytes} has fewer than 4 elements
-   */
-  @GwtIncompatible("doesn't work")
-  public static int fromByteArray(byte[] bytes) {
-    checkArgument(bytes.length >= BYTES,
-        "array too small: %s < %s", bytes.length, BYTES);
-    return bytes[0] << 24
-        | (bytes[1] & 0xFF) << 16
-        | (bytes[2] & 0xFF) << 8
-        | (bytes[3] & 0xFF);
-  }
-
-  /**
-   * Returns an array containing the same values as {@code array}, but
-   * guaranteed to be of a specified minimum length. If {@code array} already
-   * has a length of at least {@code minLength}, it is returned directly.
-   * Otherwise, a new array of size {@code minLength + padding} is returned,
-   * containing the values of {@code array}, and zeroes in the remaining places.
-   *
-   * @param array the source array
-   * @param minLength the minimum length the returned array must guarantee
-   * @param padding an extra amount to "grow" the array by if growth is
-   *     necessary
-   * @throws IllegalArgumentException if {@code minLength} or {@code padding} is
-   *     negative
-   * @return an array containing the values of {@code array}, with guaranteed
-   *     minimum length {@code minLength}
-   */
-  public static int[] ensureCapacity(
-      int[] array, int minLength, int padding) {
-    checkArgument(minLength >= 0, "Invalid minLength: %s", minLength);
-    checkArgument(padding >= 0, "Invalid padding: %s", padding);
-    return (array.length < minLength)
-        ? copyOf(array, minLength + padding)
-        : array;
-  }
-
-  // Arrays.copyOf() requires Java 6
-  private static int[] copyOf(int[] original, int length) {
-    int[] copy = new int[length];
-    System.arraycopy(original, 0, copy, 0, Math.min(original.length, length));
-    return copy;
-  }
-
-  /**
-   * Returns a string containing the supplied {@code int} values separated
-   * by {@code separator}. For example, {@code join("-", 1, 2, 3)} returns
-   * the string {@code "1-2-3"}.
-   *
-   * @param separator the text that should appear between consecutive values in
-   *     the resulting string (but not at the start or end)
-   * @param array an array of {@code int} values, possibly empty
-   */
-  public static String join(String separator, int... array) {
-    checkNotNull(separator);
-    if (array.length == 0) {
-      return "";
-    }
-
-    // For pre-sizing a builder, just get the right order of magnitude
-    StringBuilder builder = new StringBuilder(array.length * 5);
-    builder.append(array[0]);
-    for (int i = 1; i < array.length; i++) {
-      builder.append(separator).append(array[i]);
-    }
-    return builder.toString();
-  }
-
-  /**
-   * Returns a comparator that compares two {@code int} arrays
-   * lexicographically. That is, it compares, using {@link
-   * #compare(int, int)}), the first pair of values that follow any
-   * common prefix, or when one array is a prefix of the other, treats the
-   * shorter array as the lesser. For example, {@code [] < [1] < [1, 2] < [2]}.
-   *
-   * <p>The returned comparator is inconsistent with {@link
-   * Object#equals(Object)} (since arrays support only identity equality), but
-   * it is consistent with {@link Arrays#equals(int[], int[])}.
-   *
-   * @see <a href="http://en.wikipedia.org/wiki/Lexicographical_order">
-   *     Lexicographical order</a> article at Wikipedia
-   * @since 2010.01.04 <b>tentative</b>
-   */
-  public static Comparator<int[]> lexicographicalComparator() {
-    return LexicographicalComparator.INSTANCE;
-  }
-
-  private enum LexicographicalComparator implements Comparator<int[]> {
-    INSTANCE;
-
-    public int compare(int[] left, int[] right) {
-      int minLength = Math.min(left.length, right.length);
-      for (int i = 0; i < minLength; i++) {
-        int result = Ints.compare(left[i], right[i]);
-        if (result != 0) {
-          return result;
-        }
-      }
-      return left.length - right.length;
-    }
-  }
-
-  /**
-   * Copies a collection of {@code Integer} instances into a new array of
-   * primitive {@code int} values.
-   *
-   * <p>Elements are copied from the argument collection as if by {@code
-   * collection.toArray()}.  Calling this method is as thread-safe as calling
-   * that method.
-   *
-   * @param collection a collection of {@code Integer} objects
-   * @return an array containing the same values as {@code collection}, in the
-   *     same order, converted to primitives
-   * @throws NullPointerException if {@code collection} or any of its elements
-   *     is null
-   */
-  public static int[] toArray(Collection<Integer> collection) {
-    if (collection instanceof IntArrayAsList) {
-      return ((IntArrayAsList) collection).toIntArray();
-    }
-
-    Object[] boxedArray = collection.toArray();
-    int len = boxedArray.length;
-    int[] array = new int[len];
-    for (int i = 0; i < len; i++) {
-      array[i] = (Integer) boxedArray[i];
-    }
-    return array;
-  }
-
-  /**
-   * Returns a fixed-size list backed by the specified array, similar to {@link
-   * Arrays#asList(Object[])}. The list supports {@link List#set(int, Object)},
-   * but any attempt to set a value to {@code null} will result in a {@link
-   * NullPointerException}.
-   *
-   * <p>The returned list maintains the values, but not the identities, of
-   * {@code Integer} objects written to or read from it.  For example, whether
-   * {@code list.get(0) == list.get(0)} is true for the returned list is
-   * unspecified.
-   *
-   * @param backingArray the array to back the list
-   * @return a list view of the array
-   */
-  public static List<Integer> asList(int... backingArray) {
-    if (backingArray.length == 0) {
-      return Collections.emptyList();
-    }
-    return new IntArrayAsList(backingArray);
-  }
-
-  @GwtCompatible
-  private static class IntArrayAsList extends AbstractList<Integer>
-      implements RandomAccess, Serializable {
-    final int[] array;
-    final int start;
-    final int end;
-
-    IntArrayAsList(int[] array) {
-      this(array, 0, array.length);
-    }
-
-    IntArrayAsList(int[] array, int start, int end) {
-      this.array = array;
-      this.start = start;
-      this.end = end;
-    }
-
-    @Override public int size() {
-      return end - start;
-    }
-
-    @Override public boolean isEmpty() {
-      return false;
-    }
-
-    @Override public Integer get(int index) {
-      checkElementIndex(index, size());
-      return array[start + index];
-    }
-
-    @Override public boolean contains(Object target) {
-      // Overridden to prevent a ton of boxing
-      return (target instanceof Integer)
-          && Ints.indexOf(array, (Integer) target, start, end) != -1;
-    }
-
-    @Override public int indexOf(Object target) {
-      // Overridden to prevent a ton of boxing
-      if (target instanceof Integer) {
-        int i = Ints.indexOf(array, (Integer) target, start, end);
-        if (i >= 0) {
-          return i - start;
-        }
-      }
-      return -1;
-    }
-
-    @Override public int lastIndexOf(Object target) {
-      // Overridden to prevent a ton of boxing
-      if (target instanceof Integer) {
-        int i = Ints.lastIndexOf(array, (Integer) target, start, end);
-        if (i >= 0) {
-          return i - start;
-        }
-      }
-      return -1;
-    }
-
-    @Override public Integer set(int index, Integer element) {
-      checkElementIndex(index, size());
-      int oldValue = array[start + index];
-      array[start + index] = element;
-      return oldValue;
-    }
-
-    /** In GWT, List and AbstractList do not have the subList method. */
-    /*@Override*/ public List<Integer> subList(int fromIndex, int toIndex) {
-      int size = size();
-      checkPositionIndexes(fromIndex, toIndex, size);
-      if (fromIndex == toIndex) {
-        return Collections.emptyList();
-      }
-      return new IntArrayAsList(array, start + fromIndex, start + toIndex);
-    }
-
-    @Override public boolean equals(Object object) {
-      if (object == this) {
-        return true;
-      }
-      if (object instanceof IntArrayAsList) {
-        IntArrayAsList that = (IntArrayAsList) object;
-        int size = size();
-        if (that.size() != size) {
-          return false;
-        }
-        for (int i = 0; i < size; i++) {
-          if (array[start + i] != that.array[that.start + i]) {
-            return false;
-          }
-        }
-        return true;
-      }
-      return super.equals(object);
-    }
-
-    @Override public int hashCode() {
-      int result = 1;
-      for (int i = start; i < end; i++) {
-        result = 31 * result + Ints.hashCode(array[i]);
-      }
-      return result;
-    }
-
-    @Override public String toString() {
-      StringBuilder builder = new StringBuilder(size() * 5);
-      builder.append('[').append(array[start]);
-      for (int i = start + 1; i < end; i++) {
-        builder.append(", ").append(array[i]);
-      }
-      return builder.append(']').toString();
-    }
-
-    int[] toIntArray() {
-      // Arrays.copyOfRange() requires Java 6
-      int size = size();
-      int[] result = new int[size];
-      System.arraycopy(array, start, result, 0, size);
-      return result;
-    }
-
-    private static final long serialVersionUID = 0;
-  }
-}
diff --git a/src/com/google/common/primitives/Longs.java b/src/com/google/common/primitives/Longs.java
deleted file mode 100644
index 26dca08..0000000
--- a/src/com/google/common/primitives/Longs.java
+++ /dev/null
@@ -1,551 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.primitives;
-
-import com.google.common.annotations.GwtCompatible;
-import com.google.common.annotations.GwtIncompatible;
-
-import java.io.Serializable;
-import java.util.AbstractList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-import java.util.RandomAccess;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkElementIndex;
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Preconditions.checkPositionIndexes;
-
-/**
- * Static utility methods pertaining to {@code long} primitives, that are not
- * already found in either {@link Long} or {@link Arrays}.
- *
- * @author Kevin Bourrillion
- * @since 2009.09.15 <b>tentative</b>
- */
-@GwtCompatible
-public final class Longs {
-  private Longs() {}
-
-  /**
-   * The number of bytes required to represent a primitive {@code long}
-   * value.
-   */
-  public static final int BYTES = Long.SIZE / Byte.SIZE;
-
-  /**
-   * Returns a hash code for {@code value}; equal to the result of invoking
-   * {@code ((Long) value).hashCode()}.
-   *
-   * @param value a primitive {@code long} value
-   * @return a hash code for the value
-   */
-  public static int hashCode(long value) {
-    return (int) (value ^ (value >>> 32));
-  }
-
-  /**
-   * Compares the two specified {@code long} values. The sign of the value
-   * returned is the same as that of {@code ((Long) a).compareTo(b)}.
-   *
-   * @param a the first {@code long} to compare
-   * @param b the second {@code long} to compare
-   * @return a negative value if {@code a} is less than {@code b}; a positive
-   *     value if {@code a} is greater than {@code b}; or zero if they are equal
-   */
-  public static int compare(long a, long b) {
-    return (a < b) ? -1 : ((a > b) ? 1 : 0);
-  }
-
-  /**
-   * Returns {@code true} if {@code target} is present as an element anywhere in
-   * {@code array}.
-   *
-   * @param array an array of {@code long} values, possibly empty
-   * @param target a primitive {@code long} value
-   * @return {@code true} if {@code array[i] == target} for some value of {@code
-   *     i}
-   */
-  public static boolean contains(long[] array, long target) {
-    for (long value : array) {
-      if (value == target) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  /**
-   * Returns the index of the first appearance of the value {@code target} in
-   * {@code array}.
-   *
-   * @param array an array of {@code long} values, possibly empty
-   * @param target a primitive {@code long} value
-   * @return the least index {@code i} for which {@code array[i] == target}, or
-   *     {@code -1} if no such index exists.
-   */
-  public static int indexOf(long[] array, long target) {
-    return indexOf(array, target, 0, array.length);
-  }
-
-  // TODO: consider making this public
-  private static int indexOf(
-      long[] array, long target, int start, int end) {
-    for (int i = start; i < end; i++) {
-      if (array[i] == target) {
-        return i;
-      }
-    }
-    return -1;
-  }
-
-  /**
-   * Returns the start position of the first occurrence of the specified {@code
-   * target} within {@code array}, or {@code -1} if there is no such occurrence.
-   *
-   * <p>More formally, returns the lowest index {@code i} such that {@code
-   * java.util.Arrays.copyOfRange(array, i, i + target.length)} contains exactly
-   * the same elements as {@code target}.
-   *
-   * @param array the array to search for the sequence {@code target}
-   * @param target the array to search for as a sub-sequence of {@code array}
-   */
-  public static int indexOf(long[] array, long[] target) {
-    checkNotNull(array, "array");
-    checkNotNull(target, "target");
-    if (target.length == 0) {
-      return 0;
-    }
-
-    outer:
-    for (int i = 0; i < array.length - target.length + 1; i++) {
-      for (int j = 0; j < target.length; j++) {
-        if (array[i + j] != target[j]) {
-          continue outer;
-        }
-      }
-      return i;
-    }
-    return -1;
-  }
-
-  /**
-   * Returns the index of the last appearance of the value {@code target} in
-   * {@code array}.
-   *
-   * @param array an array of {@code long} values, possibly empty
-   * @param target a primitive {@code long} value
-   * @return the greatest index {@code i} for which {@code array[i] == target},
-   *     or {@code -1} if no such index exists.
-   */
-  public static int lastIndexOf(long[] array, long target) {
-    return lastIndexOf(array, target, 0, array.length);
-  }
-
-  // TODO: consider making this public
-  private static int lastIndexOf(
-      long[] array, long target, int start, int end) {
-    for (int i = end - 1; i >= start; i--) {
-      if (array[i] == target) {
-        return i;
-      }
-    }
-    return -1;
-  }
-
-  /**
-   * Returns the least value present in {@code array}.
-   *
-   * @param array a <i>nonempty</i> array of {@code long} values
-   * @return the value present in {@code array} that is less than or equal to
-   *     every other value in the array
-   * @throws IllegalArgumentException if {@code array} is empty
-   */
-  public static long min(long... array) {
-    checkArgument(array.length > 0);
-    long min = array[0];
-    for (int i = 1; i < array.length; i++) {
-      if (array[i] < min) {
-        min = array[i];
-      }
-    }
-    return min;
-  }
-
-  /**
-   * Returns the greatest value present in {@code array}.
-   *
-   * @param array a <i>nonempty</i> array of {@code long} values
-   * @return the value present in {@code array} that is greater than or equal to
-   *     every other value in the array
-   * @throws IllegalArgumentException if {@code array} is empty
-   */
-  public static long max(long... array) {
-    checkArgument(array.length > 0);
-    long max = array[0];
-    for (int i = 1; i < array.length; i++) {
-      if (array[i] > max) {
-        max = array[i];
-      }
-    }
-    return max;
-  }
-
-  /**
-   * Returns the values from each provided array combined into a single array.
-   * For example, {@code concat(new long[] {a, b}, new long[] {}, new
-   * long[] {c}} returns the array {@code {a, b, c}}.
-   *
-   * @param arrays zero or more {@code long} arrays
-   * @return a single array containing all the values from the source arrays, in
-   *     order
-   */
-  public static long[] concat(long[]... arrays) {
-    int length = 0;
-    for (long[] array : arrays) {
-      length += array.length;
-    }
-    long[] result = new long[length];
-    int pos = 0;
-    for (long[] array : arrays) {
-      System.arraycopy(array, 0, result, pos, array.length);
-      pos += array.length;
-    }
-    return result;
-  }
-
-  /**
-   * Returns a big-endian representation of {@code value} in an 8-element byte
-   * array; equivalent to {@code ByteBuffer.allocate(8).putLong(value).array()}.
-   * For example, the input value {@code 0x1213141516171819L} would yield the
-   * byte array {@code {0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19}}.
-   *
-   * <p>If you need to convert and concatenate several values (possibly even of
-   * different types), use a shared {@link java.nio.ByteBuffer} instance, or use
-   * {@link com.google.common.io.ByteStreams#newDataOutput()} to get a growable
-   * buffer.
-   *
-   * <p><b>Warning:</b> do not use this method in GWT. It returns wrong answers.
-   */
-  @GwtIncompatible("doesn't work")
-  public static byte[] toByteArray(long value) {
-    return new byte[] {
-        (byte) (value >> 56),
-        (byte) (value >> 48),
-        (byte) (value >> 40),
-        (byte) (value >> 32),
-        (byte) (value >> 24),
-        (byte) (value >> 16),
-        (byte) (value >> 8),
-        (byte) value};
-  }
-
-  /**
-   * Returns the {@code long} value whose big-endian representation is
-   * stored in the first 8 bytes of {@code bytes}; equivalent to {@code
-   * ByteBuffer.wrap(bytes).getLong()}. For example, the input byte array
-   * {@code {0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19}} would yield the
-   * {@code long} value {@code 0x1213141516171819L}.
-   *
-   * <p>Arguably, it's preferable to use {@link java.nio.ByteBuffer}; that
-   * library exposes much more flexibility at little cost in readability.
-   *
-   * <p><b>Warning:</b> do not use this method in GWT. It returns wrong answers.
-   *
-   * @throws IllegalArgumentException if {@code bytes} has fewer than 8
-   *     elements
-   */
-  @GwtIncompatible("doesn't work")
-  public static long fromByteArray(byte[] bytes) {
-    checkArgument(bytes.length >= BYTES,
-        "array too small: %s < %s", bytes.length, BYTES);
-    return (bytes[0] & 0xFFL) << 56
-        | (bytes[1] & 0xFFL) << 48
-        | (bytes[2] & 0xFFL) << 40
-        | (bytes[3] & 0xFFL) << 32
-        | (bytes[4] & 0xFFL) << 24
-        | (bytes[5] & 0xFFL) << 16
-        | (bytes[6] & 0xFFL) << 8
-        | (bytes[7] & 0xFFL);
-  }
-
-  /**
-   * Returns an array containing the same values as {@code array}, but
-   * guaranteed to be of a specified minimum length. If {@code array} already
-   * has a length of at least {@code minLength}, it is returned directly.
-   * Otherwise, a new array of size {@code minLength + padding} is returned,
-   * containing the values of {@code array}, and zeroes in the remaining places.
-   *
-   * @param array the source array
-   * @param minLength the minimum length the returned array must guarantee
-   * @param padding an extra amount to "grow" the array by if growth is
-   *     necessary
-   * @throws IllegalArgumentException if {@code minLength} or {@code padding} is
-   *     negative
-   * @return an array containing the values of {@code array}, with guaranteed
-   *     minimum length {@code minLength}
-   */
-  public static long[] ensureCapacity(
-      long[] array, int minLength, int padding) {
-    checkArgument(minLength >= 0, "Invalid minLength: %s", minLength);
-    checkArgument(padding >= 0, "Invalid padding: %s", padding);
-    return (array.length < minLength)
-        ? copyOf(array, minLength + padding)
-        : array;
-  }
-
-  // Arrays.copyOf() requires Java 6
-  private static long[] copyOf(long[] original, int length) {
-    long[] copy = new long[length];
-    System.arraycopy(original, 0, copy, 0, Math.min(original.length, length));
-    return copy;
-  }
-
-  /**
-   * Returns a string containing the supplied {@code long} values separated
-   * by {@code separator}. For example, {@code join("-", 1L, 2L, 3L)} returns
-   * the string {@code "1-2-3"}.
-   *
-   * @param separator the text that should appear between consecutive values in
-   *     the resulting string (but not at the start or end)
-   * @param array an array of {@code long} values, possibly empty
-   */
-  public static String join(String separator, long... array) {
-    checkNotNull(separator);
-    if (array.length == 0) {
-      return "";
-    }
-
-    // For pre-sizing a builder, just get the right order of magnitude
-    StringBuilder builder = new StringBuilder(array.length * 10);
-    builder.append(array[0]);
-    for (int i = 1; i < array.length; i++) {
-      builder.append(separator).append(array[i]);
-    }
-    return builder.toString();
-  }
-
-  /**
-   * Returns a comparator that compares two {@code long} arrays
-   * lexicographically. That is, it compares, using {@link
-   * #compare(long, long)}), the first pair of values that follow any
-   * common prefix, or when one array is a prefix of the other, treats the
-   * shorter array as the lesser. For example,
-   * {@code [] < [1L] < [1L, 2L] < [2L]}.
-   *
-   * <p>The returned comparator is inconsistent with {@link
-   * Object#equals(Object)} (since arrays support only identity equality), but
-   * it is consistent with {@link Arrays#equals(long[], long[])}.
-   *
-   * @see <a href="http://en.wikipedia.org/wiki/Lexicographical_order">
-   *     Lexicographical order</a> article at Wikipedia
-   * @since 2010.01.04 <b>tentative</b>
-   */
-  public static Comparator<long[]> lexicographicalComparator() {
-    return LexicographicalComparator.INSTANCE;
-  }
-
-  private enum LexicographicalComparator implements Comparator<long[]> {
-    INSTANCE;
-
-    public int compare(long[] left, long[] right) {
-      int minLength = Math.min(left.length, right.length);
-      for (int i = 0; i < minLength; i++) {
-        int result = Longs.compare(left[i], right[i]);
-        if (result != 0) {
-          return result;
-        }
-      }
-      return left.length - right.length;
-    }
-  }
-
-  /**
-   * Copies a collection of {@code Long} instances into a new array of
-   * primitive {@code long} values.
-   *
-   * <p>Elements are copied from the argument collection as if by {@code
-   * collection.toArray()}.  Calling this method is as thread-safe as calling
-   * that method.
-   *
-   * @param collection a collection of {@code Long} objects
-   * @return an array containing the same values as {@code collection}, in the
-   *     same order, converted to primitives
-   * @throws NullPointerException if {@code collection} or any of its elements
-   *     is null
-   */
-  public static long[] toArray(Collection<Long> collection) {
-    if (collection instanceof LongArrayAsList) {
-      return ((LongArrayAsList) collection).toLongArray();
-    }
-
-    Object[] boxedArray = collection.toArray();
-    int len = boxedArray.length;
-    long[] array = new long[len];
-    for (int i = 0; i < len; i++) {
-      array[i] = (Long) boxedArray[i];
-    }
-    return array;
-  }
-
-  /**
-   * Returns a fixed-size list backed by the specified array, similar to {@link
-   * Arrays#asList(Object[])}. The list supports {@link List#set(int, Object)},
-   * but any attempt to set a value to {@code null} will result in a {@link
-   * NullPointerException}.
-   *
-   * <p>The returned list maintains the values, but not the identities, of
-   * {@code Long} objects written to or read from it.  For example, whether
-   * {@code list.get(0) == list.get(0)} is true for the returned list is
-   * unspecified.
-   *
-   * @param backingArray the array to back the list
-   * @return a list view of the array
-   */
-  public static List<Long> asList(long... backingArray) {
-    if (backingArray.length == 0) {
-      return Collections.emptyList();
-    }
-    return new LongArrayAsList(backingArray);
-  }
-
-  @GwtCompatible
-  private static class LongArrayAsList extends AbstractList<Long>
-      implements RandomAccess, Serializable {
-    final long[] array;
-    final int start;
-    final int end;
-
-    LongArrayAsList(long[] array) {
-      this(array, 0, array.length);
-    }
-
-    LongArrayAsList(long[] array, int start, int end) {
-      this.array = array;
-      this.start = start;
-      this.end = end;
-    }
-
-    @Override public int size() {
-      return end - start;
-    }
-
-    @Override public boolean isEmpty() {
-      return false;
-    }
-
-    @Override public Long get(int index) {
-      checkElementIndex(index, size());
-      return array[start + index];
-    }
-
-    @Override public boolean contains(Object target) {
-      // Overridden to prevent a ton of boxing
-      return (target instanceof Long)
-          && Longs.indexOf(array, (Long) target, start, end) != -1;
-    }
-
-    @Override public int indexOf(Object target) {
-      // Overridden to prevent a ton of boxing
-      if (target instanceof Long) {
-        int i = Longs.indexOf(array, (Long) target, start, end);
-        if (i >= 0) {
-          return i - start;
-        }
-      }
-      return -1;
-    }
-
-    @Override public int lastIndexOf(Object target) {
-      // Overridden to prevent a ton of boxing
-      if (target instanceof Long) {
-        int i = Longs.lastIndexOf(array, (Long) target, start, end);
-        if (i >= 0) {
-          return i - start;
-        }
-      }
-      return -1;
-    }
-
-    @Override public Long set(int index, Long element) {
-      checkElementIndex(index, size());
-      long oldValue = array[start + index];
-      array[start + index] = element;
-      return oldValue;
-    }
-
-    /** In GWT, List and AbstractList do not have the subList method. */
-    /*@Override*/ public List<Long> subList(int fromIndex, int toIndex) {
-      int size = size();
-      checkPositionIndexes(fromIndex, toIndex, size);
-      if (fromIndex == toIndex) {
-        return Collections.emptyList();
-      }
-      return new LongArrayAsList(array, start + fromIndex, start + toIndex);
-    }
-
-    @Override public boolean equals(Object object) {
-      if (object == this) {
-        return true;
-      }
-      if (object instanceof LongArrayAsList) {
-        LongArrayAsList that = (LongArrayAsList) object;
-        int size = size();
-        if (that.size() != size) {
-          return false;
-        }
-        for (int i = 0; i < size; i++) {
-          if (array[start + i] != that.array[that.start + i]) {
-            return false;
-          }
-        }
-        return true;
-      }
-      return super.equals(object);
-    }
-
-    @Override public int hashCode() {
-      int result = 1;
-      for (int i = start; i < end; i++) {
-        result = 31 * result + Longs.hashCode(array[i]);
-      }
-      return result;
-    }
-
-    @Override public String toString() {
-      StringBuilder builder = new StringBuilder(size() * 10);
-      builder.append('[').append(array[start]);
-      for (int i = start + 1; i < end; i++) {
-        builder.append(", ").append(array[i]);
-      }
-      return builder.append(']').toString();
-    }
-
-    long[] toLongArray() {
-      // Arrays.copyOfRange() requires Java 6
-      int size = size();
-      long[] result = new long[size];
-      System.arraycopy(array, start, result, 0, size);
-      return result;
-    }
-
-    private static final long serialVersionUID = 0;
-  }
-}
diff --git a/src/com/google/common/primitives/Primitives.java b/src/com/google/common/primitives/Primitives.java
deleted file mode 100644
index a2004c5..0000000
--- a/src/com/google/common/primitives/Primitives.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.primitives;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * Contains static utility methods pertaining to primitive types and their
- * corresponding wrapper types.
- *
- * @author Kevin Bourrillion
- * @since 2009.09.15 <b>tentative</b>
- */
-public final class Primitives {
-  private Primitives() {}
-
-  /** A map from primitive types to their corresponding wrapper types. */
-  public static final Map<Class<?>, Class<?>> PRIMITIVE_TO_WRAPPER_TYPE;
-
-  /** A map from wrapper types to their corresponding primitive types. */
-  public static final Map<Class<?>, Class<?>> WRAPPER_TO_PRIMITIVE_TYPE;
-
-  // Sad that we can't use a BiMap. :(
-  
-  static {
-    Map<Class<?>, Class<?>> primToWrap = new HashMap<Class<?>, Class<?>>(16);
-    Map<Class<?>, Class<?>> wrapToPrim = new HashMap<Class<?>, Class<?>>(16);
-
-    add(primToWrap, wrapToPrim, boolean.class, Boolean.class);
-    add(primToWrap, wrapToPrim, byte.class, Byte.class);
-    add(primToWrap, wrapToPrim, char.class, Character.class);
-    add(primToWrap, wrapToPrim, double.class, Double.class);
-    add(primToWrap, wrapToPrim, float.class, Float.class);
-    add(primToWrap, wrapToPrim, int.class, Integer.class);
-    add(primToWrap, wrapToPrim, long.class, Long.class);
-    add(primToWrap, wrapToPrim, short.class, Short.class);
-    add(primToWrap, wrapToPrim, void.class, Void.class);
-
-    PRIMITIVE_TO_WRAPPER_TYPE = Collections.unmodifiableMap(primToWrap);
-    WRAPPER_TO_PRIMITIVE_TYPE = Collections.unmodifiableMap(wrapToPrim);
-  }
-
-  private static void add(Map<Class<?>, Class<?>> forward,
-      Map<Class<?>, Class<?>> backward, Class<?> key, Class<?> value) {
-    forward.put(key, value);
-    backward.put(value, key);
-  }
-
-  /** All nine primitive types (including void). */
-  public static final Set<Class<?>> PRIMITIVE_TYPES
-      = PRIMITIVE_TO_WRAPPER_TYPE.keySet();
-
-  /** All nine wrapper types (including Void). */
-  public static final Set<Class<?>> WRAPPER_TYPES
-      = WRAPPER_TO_PRIMITIVE_TYPE.keySet();
-
-  /**
-   * Returns {@code true} if {@code type} is one of the nine
-   * primitive-wrapper types, such as {@link Integer}.
-   *
-   * @see Class#isPrimitive
-   */
-  public static boolean isWrapperType(Class<?> type) {
-    return WRAPPER_TO_PRIMITIVE_TYPE.containsKey(checkNotNull(type));
-  }
-
-  /**
-   * Returns the corresponding wrapper type of {@code type} if it is a primitive
-   * type; otherwise returns {@code type} itself. Idempotent.
-   * <pre>
-   *     wrap(int.class) == Integer.class
-   *     wrap(Integer.class) == Integer.class
-   *     wrap(String.class) == String.class
-   * </pre>
-   */
-  public static <T> Class<T> wrap(Class<T> type) {
-    checkNotNull(type);
-
-    // cast is safe: long.class and Long.class are both of type Class<Long>
-    @SuppressWarnings("unchecked")
-    Class<T> wrapped = (Class<T>) PRIMITIVE_TO_WRAPPER_TYPE.get(type);
-    return (wrapped == null) ? type : wrapped;
-  }
-
-  /**
-   * Returns the corresponding primitive type of {@code type} if it is a
-   * wrapper type; otherwise returns {@code type} itself. Idempotent.
-   * <pre>
-   *     unwrap(Integer.class) == int.class
-   *     unwrap(int.class) == int.class
-   *     unwrap(String.class) == String.class
-   * </pre>
-   */
-  public static <T> Class<T> unwrap(Class<T> type) {
-    checkNotNull(type);
-
-    // cast is safe: long.class and Long.class are both of type Class<Long>
-    @SuppressWarnings("unchecked")
-    Class<T> unwrapped = (Class<T>) WRAPPER_TO_PRIMITIVE_TYPE.get(type);
-    return (unwrapped == null) ? type : unwrapped;
-  }
-}
diff --git a/src/com/google/common/primitives/Shorts.java b/src/com/google/common/primitives/Shorts.java
deleted file mode 100644
index a5adc7e..0000000
--- a/src/com/google/common/primitives/Shorts.java
+++ /dev/null
@@ -1,565 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.primitives;
-
-import com.google.common.annotations.GwtCompatible;
-import com.google.common.annotations.GwtIncompatible;
-
-import java.io.Serializable;
-import java.util.AbstractList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-import java.util.RandomAccess;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkElementIndex;
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Preconditions.checkPositionIndexes;
-
-/**
- * Static utility methods pertaining to {@code short} primitives, that are not
- * already found in either {@link Short} or {@link Arrays}.
- *
- * @author Kevin Bourrillion
- * @since 2009.09.15 <b>tentative</b>
- */
-@GwtCompatible
-public final class Shorts {
-  private Shorts() {}
-
-  /**
-   * The number of bytes required to represent a primitive {@code short}
-   * value.
-   */
-  public static final int BYTES = Short.SIZE / Byte.SIZE;
-
-  /**
-   * Returns a hash code for {@code value}; equal to the result of invoking
-   * {@code ((Short) value).hashCode()}.
-   *
-   * @param value a primitive {@code short} value
-   * @return a hash code for the value
-   */
-  public static int hashCode(short value) {
-    return value;
-  }
-
-  /**
-   * Returns the {@code short} value that is equal to {@code value}, if possible.
-   *
-   * @param value any value in the range of the {@code short} type
-   * @return the {@code short} value that equals {@code value}
-   * @throws IllegalArgumentException if {@code value} is greater than {@link
-   *     Short#MAX_VALUE} or less than {@link Short#MIN_VALUE}
-   */
-  public static short checkedCast(long value) {
-    short result = (short) value;
-    checkArgument(result == value, "Out of range: %s", value);
-    return result;
-  }
-
-  /**
-   * Returns the {@code short} nearest in value to {@code value}.
-   *
-   * @param value any {@code long} value
-   * @return the same value cast to {@code short} if it is in the range of the
-   *     {@code short} type, {@link Short#MAX_VALUE} if it is too large,
-   *     or {@link Short#MIN_VALUE} if it is too small
-   */
-  public static short saturatedCast(long value) {
-    if (value > Short.MAX_VALUE) {
-      return Short.MAX_VALUE;
-    }
-    if (value < Short.MIN_VALUE) {
-      return Short.MIN_VALUE;
-    }
-    return (short) value;
-  }
-
-  /**
-   * Compares the two specified {@code short} values. The sign of the value
-   * returned is the same as that of {@code ((Short) a).compareTo(b)}.
-   *
-   * @param a the first {@code short} to compare
-   * @param b the second {@code short} to compare
-   * @return a negative value if {@code a} is less than {@code b}; a positive
-   *     value if {@code a} is greater than {@code b}; or zero if they are equal
-   */
-  public static int compare(short a, short b) {
-    return a - b; // safe due to restricted range
-  }
-
-  /**
-   * Returns {@code true} if {@code target} is present as an element anywhere in
-   * {@code array}.
-   *
-   * @param array an array of {@code short} values, possibly empty
-   * @param target a primitive {@code short} value
-   * @return {@code true} if {@code array[i] == target} for some value of {@code
-   *     i}
-   */
-  public static boolean contains(short[] array, short target) {
-    for (short value : array) {
-      if (value == target) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  /**
-   * Returns the index of the first appearance of the value {@code target} in
-   * {@code array}.
-   *
-   * @param array an array of {@code short} values, possibly empty
-   * @param target a primitive {@code short} value
-   * @return the least index {@code i} for which {@code array[i] == target}, or
-   *     {@code -1} if no such index exists.
-   */
-  public static int indexOf(short[] array, short target) {
-    return indexOf(array, target, 0, array.length);
-  }
-
-  // TODO: consider making this public
-  private static int indexOf(
-      short[] array, short target, int start, int end) {
-    for (int i = start; i < end; i++) {
-      if (array[i] == target) {
-        return i;
-      }
-    }
-    return -1;
-  }
-
-  /**
-   * Returns the start position of the first occurrence of the specified {@code
-   * target} within {@code array}, or {@code -1} if there is no such occurrence.
-   *
-   * <p>More formally, returns the lowest index {@code i} such that {@code
-   * java.util.Arrays.copyOfRange(array, i, i + target.length)} contains exactly
-   * the same elements as {@code target}.
-   *
-   * @param array the array to search for the sequence {@code target}
-   * @param target the array to search for as a sub-sequence of {@code array}
-   */
-  public static int indexOf(short[] array, short[] target) {
-    checkNotNull(array, "array");
-    checkNotNull(target, "target");
-    if (target.length == 0) {
-      return 0;
-    }
-
-    outer:
-    for (int i = 0; i < array.length - target.length + 1; i++) {
-      for (int j = 0; j < target.length; j++) {
-        if (array[i + j] != target[j]) {
-          continue outer;
-        }
-      }
-      return i;
-    }
-    return -1;
-  }
-
-  /**
-   * Returns the index of the last appearance of the value {@code target} in
-   * {@code array}.
-   *
-   * @param array an array of {@code short} values, possibly empty
-   * @param target a primitive {@code short} value
-   * @return the greatest index {@code i} for which {@code array[i] == target},
-   *     or {@code -1} if no such index exists.
-   */
-  public static int lastIndexOf(short[] array, short target) {
-    return lastIndexOf(array, target, 0, array.length);
-  }
-
-  // TODO: consider making this public
-  private static int lastIndexOf(
-      short[] array, short target, int start, int end) {
-    for (int i = end - 1; i >= start; i--) {
-      if (array[i] == target) {
-        return i;
-      }
-    }
-    return -1;
-  }
-
-  /**
-   * Returns the least value present in {@code array}.
-   *
-   * @param array a <i>nonempty</i> array of {@code short} values
-   * @return the value present in {@code array} that is less than or equal to
-   *     every other value in the array
-   * @throws IllegalArgumentException if {@code array} is empty
-   */
-  public static short min(short... array) {
-    checkArgument(array.length > 0);
-    short min = array[0];
-    for (int i = 1; i < array.length; i++) {
-      if (array[i] < min) {
-        min = array[i];
-      }
-    }
-    return min;
-  }
-
-  /**
-   * Returns the greatest value present in {@code array}.
-   *
-   * @param array a <i>nonempty</i> array of {@code short} values
-   * @return the value present in {@code array} that is greater than or equal to
-   *     every other value in the array
-   * @throws IllegalArgumentException if {@code array} is empty
-   */
-  public static short max(short... array) {
-    checkArgument(array.length > 0);
-    short max = array[0];
-    for (int i = 1; i < array.length; i++) {
-      if (array[i] > max) {
-        max = array[i];
-      }
-    }
-    return max;
-  }
-
-  /**
-   * Returns the values from each provided array combined into a single array.
-   * For example, {@code concat(new short[] {a, b}, new short[] {}, new
-   * short[] {c}} returns the array {@code {a, b, c}}.
-   *
-   * @param arrays zero or more {@code short} arrays
-   * @return a single array containing all the values from the source arrays, in
-   *     order
-   */
-  public static short[] concat(short[]... arrays) {
-    int length = 0;
-    for (short[] array : arrays) {
-      length += array.length;
-    }
-    short[] result = new short[length];
-    int pos = 0;
-    for (short[] array : arrays) {
-      System.arraycopy(array, 0, result, pos, array.length);
-      pos += array.length;
-    }
-    return result;
-  }
-
-  /**
-   * Returns a big-endian representation of {@code value} in a ?-element byte
-   * array; equivalent to {@code
-   * ByteBuffer.allocate(?).putShort(value).array()}.  For example, the input
-   * value {@code ?} would yield the byte array {@code {?}}.
-   *
-   * <p>If you need to convert and concatenate several values (possibly even of
-   * different types), use a shared {@link java.nio.ByteBuffer} instance, or use
-   * {@link com.google.common.io.ByteStreams#newDataOutput()} to get a growable
-   * buffer.
-   */
-  @GwtIncompatible("doesn't work")
-  public static byte[] toByteArray(short value) {
-    return new byte[] {
-        (byte) (value >> 8),
-        (byte) value};
-  }
-
-  /**
-   * Returns the {@code short} value whose big-endian representation is
-   * stored in the first ? bytes of {@code bytes}; equivalent to {@code
-   * ByteBuffer.wrap(bytes).getShort()}. For example, the input byte array
-   * {@code {?}} would yield the {@code short} value {@code ?}.
-   *
-   * <p>Arguably, it's preferable to use {@link java.nio.ByteBuffer}; that
-   * library exposes much more flexibility at little cost in readability.
-   *
-   * @throws IllegalArgumentException if {@code bytes} has fewer than ?
-   *     elements
-   */
-  @GwtIncompatible("doesn't work")
-  public static short fromByteArray(byte[] bytes) {
-    checkArgument(bytes.length >= BYTES,
-        "array too small: %s < %s", bytes.length, BYTES);
-    return (short) ((bytes[0] << 8) | (bytes[1] & 0xFF));
-  }
-
-  /**
-   * Returns an array containing the same values as {@code array}, but
-   * guaranteed to be of a specified minimum length. If {@code array} already
-   * has a length of at least {@code minLength}, it is returned directly.
-   * Otherwise, a new array of size {@code minLength + padding} is returned,
-   * containing the values of {@code array}, and zeroes in the remaining places.
-   *
-   * @param array the source array
-   * @param minLength the minimum length the returned array must guarantee
-   * @param padding an extra amount to "grow" the array by if growth is
-   *     necessary
-   * @throws IllegalArgumentException if {@code minLength} or {@code padding} is
-   *     negative
-   * @return an array containing the values of {@code array}, with guaranteed
-   *     minimum length {@code minLength}
-   */
-  public static short[] ensureCapacity(
-      short[] array, int minLength, int padding) {
-    checkArgument(minLength >= 0, "Invalid minLength: %s", minLength);
-    checkArgument(padding >= 0, "Invalid padding: %s", padding);
-    return (array.length < minLength)
-        ? copyOf(array, minLength + padding)
-        : array;
-  }
-
-  // Arrays.copyOf() requires Java 6
-  private static short[] copyOf(short[] original, int length) {
-    short[] copy = new short[length];
-    System.arraycopy(original, 0, copy, 0, Math.min(original.length, length));
-    return copy;
-  }
-
-  /**
-   * Returns a string containing the supplied {@code short} values separated
-   * by {@code separator}. For example, {@code join("-", 1?, 2?, 3?)} returns
-   * the string {@code "1-2-3"}.
-   *
-   * @param separator the text that should appear between consecutive values in
-   *     the resulting string (but not at the start or end)
-   * @param array an array of {@code short} values, possibly empty
-   */
-  public static String join(String separator, short... array) {
-    checkNotNull(separator);
-    if (array.length == 0) {
-      return "";
-    }
-
-    // For pre-sizing a builder, just get the right order of magnitude
-    StringBuilder builder = new StringBuilder(array.length * 6);
-    builder.append(array[0]);
-    for (int i = 1; i < array.length; i++) {
-      builder.append(separator).append(array[i]);
-    }
-    return builder.toString();
-  }
-
-  /**
-   * Returns a comparator that compares two {@code short} arrays
-   * lexicographically. That is, it compares, using {@link
-   * #compare(short, short)}), the first pair of values that follow any
-   * common prefix, or when one array is a prefix of the other, treats the
-   * shorter array as the lesser. For example, {@code [] < [(short) 1] <
-   * [(short) 1, (short) 2] < [(short) 2]}.
-   *
-   * <p>The returned comparator is inconsistent with {@link
-   * Object#equals(Object)} (since arrays support only identity equality), but
-   * it is consistent with {@link Arrays#equals(short[], short[])}.
-   *
-   * @see <a href="http://en.wikipedia.org/wiki/Lexicographical_order">
-   *     Lexicographical order</a> article at Wikipedia
-   * @since 2010.01.04 <b>tentative</b>
-   */
-  public static Comparator<short[]> lexicographicalComparator() {
-    return LexicographicalComparator.INSTANCE;
-  }
-
-  private enum LexicographicalComparator implements Comparator<short[]> {
-    INSTANCE;
-
-    public int compare(short[] left, short[] right) {
-      int minLength = Math.min(left.length, right.length);
-      for (int i = 0; i < minLength; i++) {
-        int result = Shorts.compare(left[i], right[i]);
-        if (result != 0) {
-          return result;
-        }
-      }
-      return left.length - right.length;
-    }
-  }
-
-  /**
-   * Copies a collection of {@code Short} instances into a new array of
-   * primitive {@code short} values.
-   *
-   * <p>Elements are copied from the argument collection as if by {@code
-   * collection.toArray()}.  Calling this method is as thread-safe as calling
-   * that method.
-   *
-   * @param collection a collection of {@code Short} objects
-   * @return an array containing the same values as {@code collection}, in the
-   *     same order, converted to primitives
-   * @throws NullPointerException if {@code collection} or any of its elements
-   *     is null
-   */
-  public static short[] toArray(Collection<Short> collection) {
-    if (collection instanceof ShortArrayAsList) {
-      return ((ShortArrayAsList) collection).toShortArray();
-    }
-
-    Object[] boxedArray = collection.toArray();
-    int len = boxedArray.length;
-    short[] array = new short[len];
-    for (int i = 0; i < len; i++) {
-      array[i] = (Short) boxedArray[i];
-    }
-    return array;
-  }
-
-  /**
-   * Returns a fixed-size list backed by the specified array, similar to {@link
-   * Arrays#asList(Object[])}. The list supports {@link List#set(int, Object)},
-   * but any attempt to set a value to {@code null} will result in a {@link
-   * NullPointerException}.
-   *
-   * <p>The returned list maintains the values, but not the identities, of
-   * {@code Short} objects written to or read from it.  For example, whether
-   * {@code list.get(0) == list.get(0)} is true for the returned list is
-   * unspecified.
-   *
-   * @param backingArray the array to back the list
-   * @return a list view of the array
-   */
-  public static List<Short> asList(short... backingArray) {
-    if (backingArray.length == 0) {
-      return Collections.emptyList();
-    }
-    return new ShortArrayAsList(backingArray);
-  }
-
-  @GwtCompatible
-  private static class ShortArrayAsList extends AbstractList<Short>
-      implements RandomAccess, Serializable {
-    final short[] array;
-    final int start;
-    final int end;
-
-    ShortArrayAsList(short[] array) {
-      this(array, 0, array.length);
-    }
-
-    ShortArrayAsList(short[] array, int start, int end) {
-      this.array = array;
-      this.start = start;
-      this.end = end;
-    }
-
-    @Override public int size() {
-      return end - start;
-    }
-
-    @Override public boolean isEmpty() {
-      return false;
-    }
-
-    @Override public Short get(int index) {
-      checkElementIndex(index, size());
-      return array[start + index];
-    }
-
-    @Override public boolean contains(Object target) {
-      // Overridden to prevent a ton of boxing
-      return (target instanceof Short)
-          && Shorts.indexOf(array, (Short) target, start, end) != -1;
-    }
-
-    @Override public int indexOf(Object target) {
-      // Overridden to prevent a ton of boxing
-      if (target instanceof Short) {
-        int i = Shorts.indexOf(array, (Short) target, start, end);
-        if (i >= 0) {
-          return i - start;
-        }
-      }
-      return -1;
-    }
-
-    @Override public int lastIndexOf(Object target) {
-      // Overridden to prevent a ton of boxing
-      if (target instanceof Short) {
-        int i = Shorts.lastIndexOf(array, (Short) target, start, end);
-        if (i >= 0) {
-          return i - start;
-        }
-      }
-      return -1;
-    }
-
-    @Override public Short set(int index, Short element) {
-      checkElementIndex(index, size());
-      short oldValue = array[start + index];
-      array[start + index] = element;
-      return oldValue;
-    }
-
-    /** In GWT, List and AbstractList do not have the subList method. */
-    /*@Override*/ public List<Short> subList(int fromIndex, int toIndex) {
-      int size = size();
-      checkPositionIndexes(fromIndex, toIndex, size);
-      if (fromIndex == toIndex) {
-        return Collections.emptyList();
-      }
-      return new ShortArrayAsList(array, start + fromIndex, start + toIndex);
-    }
-
-    @Override public boolean equals(Object object) {
-      if (object == this) {
-        return true;
-      }
-      if (object instanceof ShortArrayAsList) {
-        ShortArrayAsList that = (ShortArrayAsList) object;
-        int size = size();
-        if (that.size() != size) {
-          return false;
-        }
-        for (int i = 0; i < size; i++) {
-          if (array[start + i] != that.array[that.start + i]) {
-            return false;
-          }
-        }
-        return true;
-      }
-      return super.equals(object);
-    }
-
-    @Override public int hashCode() {
-      int result = 1;
-      for (int i = start; i < end; i++) {
-        result = 31 * result + Shorts.hashCode(array[i]);
-      }
-      return result;
-    }
-
-    @Override public String toString() {
-      StringBuilder builder = new StringBuilder(size() * 6);
-      builder.append('[').append(array[start]);
-      for (int i = start + 1; i < end; i++) {
-        builder.append(", ").append(array[i]);
-      }
-      return builder.append(']').toString();
-    }
-
-    short[] toShortArray() {
-      // Arrays.copyOfRange() requires Java 6
-      int size = size();
-      short[] result = new short[size];
-      System.arraycopy(array, start, result, 0, size);
-      return result;
-    }
-
-    private static final long serialVersionUID = 0;
-  }
-}
diff --git a/src/com/google/common/primitives/SignedBytes.java b/src/com/google/common/primitives/SignedBytes.java
deleted file mode 100644
index 7b993bb..0000000
--- a/src/com/google/common/primitives/SignedBytes.java
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
- * Copyright (C) 2009 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.primitives;
-
-import com.google.common.annotations.GwtCompatible;
-
-import java.util.Comparator;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
-
-/**
- * Static utility methods pertaining to {@code byte} primitives that
- * interpret values as signed. The corresponding methods that treat the values
- * as unsigned are found in {@link UnsignedBytes}, and the methods for which
- * signedness is not an issue are in {@link Bytes}.
- *
- * @author Kevin Bourrillion
- * @since 2009.09.15 <b>tentative</b>
- */
-@GwtCompatible
-public final class SignedBytes {
-  private SignedBytes() {}
-
-  /**
-   * Returns the {@code byte} value that is equal to {@code value}, if possible.
-   *
-   * @param value any value in the range of the {@code byte} type
-   * @return the {@code byte} value that equals {@code value}
-   * @throws IllegalArgumentException if {@code value} is greater than {@link
-   *     Byte#MAX_VALUE} or less than {@link Byte#MIN_VALUE}
-   */
-  public static byte checkedCast(long value) {
-    byte result = (byte) value;
-    checkArgument(result == value, "Out of range: %s", value);
-    return result;
-  }
-
-  /**
-   * Returns the {@code byte} nearest in value to {@code value}.
-   *
-   * @param value any {@code long} value
-   * @return the same value cast to {@code byte} if it is in the range of the
-   *     {@code byte} type, {@link Byte#MAX_VALUE} if it is too large,
-   *     or {@link Byte#MIN_VALUE} if it is too small
-   */
-  public static byte saturatedCast(long value) {
-    if (value > Byte.MAX_VALUE) {
-      return Byte.MAX_VALUE;
-    }
-    if (value < Byte.MIN_VALUE) {
-      return Byte.MIN_VALUE;
-    }
-    return (byte) value;
-  }
-
-  /**
-   * Compares the two specified {@code byte} values. The sign of the value
-   * returned is the same as that of {@code ((Byte) a).compareTo(b)}.
-   *
-   * @param a the first {@code byte} to compare
-   * @param b the second {@code byte} to compare
-   * @return a negative value if {@code a} is less than {@code b}; a positive
-   *     value if {@code a} is greater than {@code b}; or zero if they are equal
-   */
-  public static int compare(byte a, byte b) {
-    return a - b; // safe due to restricted range
-  }
-
-  /**
-   * Returns the least value present in {@code array}.
-   *
-   * @param array a <i>nonempty</i> array of {@code byte} values
-   * @return the value present in {@code array} that is less than or equal to
-   *     every other value in the array
-   * @throws IllegalArgumentException if {@code array} is empty
-   */
-  public static byte min(byte... array) {
-    checkArgument(array.length > 0);
-    byte min = array[0];
-    for (int i = 1; i < array.length; i++) {
-      if (array[i] < min) {
-        min = array[i];
-      }
-    }
-    return min;
-  }
-
-  /**
-   * Returns the greatest value present in {@code array}.
-   *
-   * @param array a <i>nonempty</i> array of {@code byte} values
-   * @return the value present in {@code array} that is greater than or equal to
-   *     every other value in the array
-   * @throws IllegalArgumentException if {@code array} is empty
-   */
-  public static byte max(byte... array) {
-    checkArgument(array.length > 0);
-    byte max = array[0];
-    for (int i = 1; i < array.length; i++) {
-      if (array[i] > max) {
-        max = array[i];
-      }
-    }
-    return max;
-  }
-
-  /**
-   * Returns a string containing the supplied {@code byte} values separated
-   * by {@code separator}. For example, {@code join(":", 0x01, 0x02, -0x01)}
-   * returns the string {@code "1:2:-1"}.
-   *
-   * @param separator the text that should appear between consecutive values in
-   *     the resulting string (but not at the start or end)
-   * @param array an array of {@code byte} values, possibly empty
-   */
-  public static String join(String separator, byte... array) {
-    checkNotNull(separator);
-    if (array.length == 0) {
-      return "";
-    }
-
-    // For pre-sizing a builder, just get the right order of magnitude
-    StringBuilder builder = new StringBuilder(array.length * 5);
-    builder.append(array[0]);
-    for (int i = 1; i < array.length; i++) {
-      builder.append(separator).append(array[i]);
-    }
-    return builder.toString();
-  }
-
-  /**
-   * Returns a comparator that compares two {@code byte} arrays
-   * lexicographically. That is, it compares, using {@link
-   * #compare(byte, byte)}), the first pair of values that follow any common
-   * prefix, or when one array is a prefix of the other, treats the shorter
-   * array as the lesser. For example, {@code [] < [0x01] < [0x01, 0x80] <
-   * [0x01, 0x7F] < [0x02]}. Values are treated as signed.
-   *
-   * <p>The returned comparator is inconsistent with {@link
-   * Object#equals(Object)} (since arrays support only identity equality), but
-   * it is consistent with {@link java.util.Arrays#equals(byte[], byte[])}.
-   *
-   * @see <a href="http://en.wikipedia.org/wiki/Lexicographical_order">
-   *     Lexicographical order</a> article at Wikipedia
-   * @since 2010.01.04 <b>tentative</b>
-   */
-  public static Comparator<byte[]> lexicographicalComparator() {
-    return LexicographicalComparator.INSTANCE;
-  }
-
-  private enum LexicographicalComparator implements Comparator<byte[]> {
-    INSTANCE;
-
-    public int compare(byte[] left, byte[] right) {
-      int minLength = Math.min(left.length, right.length);
-      for (int i = 0; i < minLength; i++) {
-        int result = SignedBytes.compare(left[i], right[i]);
-        if (result != 0) {
-          return result;
-        }
-      }
-      return left.length - right.length;
-    }
-  }
-}
diff --git a/src/com/google/common/primitives/UnsignedBytes.java b/src/com/google/common/primitives/UnsignedBytes.java
deleted file mode 100644
index b678ead..0000000
--- a/src/com/google/common/primitives/UnsignedBytes.java
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- * Copyright (C) 2009 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.primitives;
-
-import java.util.Comparator;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
-
-/**
- * Static utility methods pertaining to {@code byte} primitives that interpret
- * values as <i>unsigned</i> (that is, any negative value {@code b} is treated
- * as the positive value {@code 256 + b}). The corresponding methods that treat
- * the values as signed are found in {@link SignedBytes}, and the methods for
- * which signedness is not an issue are in {@link Bytes}.
- *
- * @author Kevin Bourrillion
- * @since 2009.09.15 <b>tentative</b>
- */
-public final class UnsignedBytes {
-  private UnsignedBytes() {}
-
-  /**
-   * Returns the {@code byte} value that, when treated as unsigned, is equal to
-   * {@code value}, if possible.
-   *
-   * @param value a value between 0 and 255 inclusive
-   * @return the {@code byte} value that, when treated as unsigned, equals
-   *     {@code value}
-   * @throws IllegalArgumentException if {@code value} is negative or greater
-   *     than 255
-   */
-  public static byte checkedCast(long value) {
-    checkArgument(value >> 8 == 0, "out of range: %s", value);
-    return (byte) value;
-  }
-
-  /**
-   * Returns the {@code byte} value that, when treated as unsigned, is nearest
-   * in value to {@code value}.
-   *
-   * @param value any {@code long} value
-   * @return {@code (byte) 255} if {@code value >= 255}, {@code (byte) 0} if
-   *     {@code value <= 0}, and {@code value} cast to {@code byte} otherwise
-   */
-  public static byte saturatedCast(long value) {
-    if (value > 255) {
-      return (byte) 255; // -1
-    }
-    if (value < 0) {
-      return (byte) 0;
-    }
-    return (byte) value;
-  }
-
-  /**
-   * Compares the two specified {@code byte} values, treating them as unsigned
-   * values between 0 and 255 inclusive. For example, {@code (byte) -127} is
-   * considered greater than {@code (byte) 127} because it is seen as having
-   * the value of positive {@code 129}.
-   *
-   * @param a the first {@code byte} to compare
-   * @param b the second {@code byte} to compare
-   * @return a negative value if {@code a} is less than {@code b}; a positive
-   *     value if {@code a} is greater than {@code b}; or zero if they are equal
-   */
-  public static int compare(byte a, byte b) {
-    return (a & 0xFF) - (b & 0xFF);
-  }
-
-  /**
-   * Returns the least value present in {@code array}.
-   *
-   * @param array a <i>nonempty</i> array of {@code byte} values
-   * @return the value present in {@code array} that is less than or equal to
-   *     every other value in the array
-   * @throws IllegalArgumentException if {@code array} is empty
-   */
-  public static byte min(byte... array) {
-    checkArgument(array.length > 0);
-    int min = array[0] & 0xFF;
-    for (int i = 1; i < array.length; i++) {
-      int next = array[i] & 0xFF;
-      if (next < min) {
-        min = next;
-      }
-    }
-    return (byte) min;
-  }
-
-  /**
-   * Returns the greatest value present in {@code array}.
-   *
-   * @param array a <i>nonempty</i> array of {@code byte} values
-   * @return the value present in {@code array} that is greater than or equal
-   *     to every other value in the array
-   * @throws IllegalArgumentException if {@code array} is empty
-   */
-  public static byte max(byte... array) {
-    checkArgument(array.length > 0);
-    int max = array[0] & 0xFF;
-    for (int i = 1; i < array.length; i++) {
-      int next = array[i] & 0xFF;
-      if (next > max) {
-        max = next;
-      }
-    }
-    return (byte) max;
-  }
-
-  /**
-   * Returns a string containing the supplied {@code byte} values separated by
-   * {@code separator}. For example, {@code join(":", (byte) 1, (byte) 2,
-   * (byte) 255)} returns the string {@code "1:2:255"}.
-   *
-   * @param separator the text that should appear between consecutive values in
-   *     the resulting string (but not at the start or end)
-   * @param array an array of {@code byte} values, possibly empty
-   */
-  public static String join(String separator, byte... array) {
-    checkNotNull(separator);
-    if (array.length == 0) {
-      return "";
-    }
-
-    // For pre-sizing a builder, just get the right order of magnitude
-    StringBuilder builder = new StringBuilder(array.length * 5);
-    builder.append(array[0] & 0xFF);
-    for (int i = 1; i < array.length; i++) {
-      builder.append(separator).append(array[i] & 0xFF);
-    }
-    return builder.toString();
-  }
-
-  /**
-   * Returns a comparator that compares two {@code byte} arrays
-   * lexicographically. That is, it compares, using {@link
-   * #compare(byte, byte)}), the first pair of values that follow any common
-   * prefix, or when one array is a prefix of the other, treats the shorter
-   * array as the lesser. For example, {@code [] < [0x01] < [0x01, 0x7F] <
-   * [0x01, 0x80] < [0x02]}. Values are treated as unsigned.
-   *
-   * <p>The returned comparator is inconsistent with {@link
-   * Object#equals(Object)} (since arrays support only identity equality), but
-   * it is consistent with {@link java.util.Arrays#equals(byte[], byte[])}.
-   *
-   * @see <a href="http://en.wikipedia.org/wiki/Lexicographical_order">
-   *     Lexicographical order</a> article at Wikipedia
-   * @since 2010.01.04 <b>tentative</b>
-   */
-  public static Comparator<byte[]> lexicographicalComparator() {
-    return LexicographicalComparator.INSTANCE;
-  }
-
-  private enum LexicographicalComparator implements Comparator<byte[]> {
-    INSTANCE;
-
-    public int compare(byte[] left, byte[] right) {
-      int minLength = Math.min(left.length, right.length);
-      for (int i = 0; i < minLength; i++) {
-        int result = UnsignedBytes.compare(left[i], right[i]);
-        if (result != 0) {
-          return result;
-        }
-      }
-      return left.length - right.length;
-    }
-  }
-}
diff --git a/src/com/google/common/primitives/generate.sh b/src/com/google/common/primitives/generate.sh
deleted file mode 100755
index dc41089..0000000
--- a/src/com/google/common/primitives/generate.sh
+++ /dev/null
@@ -1,589 +0,0 @@
-#!/bin/sh
-#
-# Usage example: ./generate.sh int Int Integer"
-# Args are: primitive type, capitalized primitive type, wrapper type
-#
-# To make changes to the .java files in this package,
-# 1. run this script to generate the templates, move the .gen files
-#    somewhere else
-# 2. modify the template with your intended changes, then rerun the
-#    script
-# 3. use any three-way merge tool to edit the checked-in source files,
-#    using the before-and-after generated files as the bases.
-#
-
-if [ "$#" -ne "3" ]
-then
-  echo "Usage example: ./generate.sh int Int Integer"
-  exit 1
-fi
-
-# Note: using the strange strings 'primtyp' and 'WrapperCl' so that they match
-# the maximum length of the real strings ('boolean' and 'Character').
-
-perl -pe "s/primtyp/$1/g; s/PrimTyp/$2/g; s/WrapperCl/$3/g" << "--EOF--" > $2s.java.gen
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.primitives;
-
-import com.google.common.annotations.GwtCompatible;
-import com.google.common.annotations.GwtIncompatible;
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkElementIndex;
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Preconditions.checkPositionIndexes;
-
-import java.io.Serializable;
-import java.util.AbstractList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-import java.util.RandomAccess;
-
-/**
- * Static utility methods pertaining to {@code primtyp} primitives, that are not
- * already found in either {@link WrapperCl} or {@link Arrays}.
- *
- * @author Kevin Bourrillion
- * @since 2009.09.15 <b>tentative</b>
- */
-@GwtCompatible
-public final class PrimTyps {
-  private PrimTyps() {}
-
-  /**
-   * The number of bytes required to represent a primitive {@code primtyp}
-   * value.
-   */
-  public static final int BYTES = WrapperCl.SIZE / Byte.SIZE;
-
-  /**
-   * Returns a hash code for {@code value}; equal to the result of invoking
-   * {@code ((WrapperCl) value).hashCode()}.
-   *
-   * @param value a primitive {@code primtyp} value
-   * @return a hash code for the value
-   */
-  public static int hashCode(primtyp value) {
-    return ??
-  }
-
-  /**
-   * Returns the {@code primtyp} value that is equal to {@code value}, if possible.
-   *
-   * @param value any value in the range of the {@code primtyp} type
-   * @return the {@code primtyp} value that equals {@code value}
-   * @throws IllegalArgumentException if {@code value} is greater than {@link
-   *     WrapperCl#MAX_VALUE} or less than {@link WrapperCl#MIN_VALUE}
-   */
-  public static primtyp checkedCast(long value) {
-    primtyp result = (primtyp) value;
-    checkArgument(result == value, "Out of range: %s", value);
-    return result;
-  }
-
-  /**
-   * Returns the {@code primtyp} nearest in value to {@code value}.
-   *
-   * @param value any {@code long} value
-   * @return the same value cast to {@code primtyp} if it is in the range of the
-   *     {@code primtyp} type, {@link WrapperCl#MAX_VALUE} if it is too large,
-   *     or {@link WrapperCl#MIN_VALUE} if it is too small
-   */
-  public static primtyp saturatedCast(long value) {
-    if (value > WrapperCl.MAX_VALUE) {
-      return WrapperCl.MAX_VALUE;
-    }
-    if (value < WrapperCl.MIN_VALUE) {
-      return WrapperCl.MIN_VALUE;
-    }
-    return (primtyp) value;
-  }
-
-  /**
-   * Compares the two specified {@code primtyp} values. The sign of the value
-   * returned is the same as that of {@code ((WrapperCl) a).compareTo(b)}.
-   *
-   * @param a the first {@code primtyp} to compare
-   * @param b the second {@code primtyp} to compare
-   * @return a negative value if {@code a} is less than {@code b}; a positive
-   *     value if {@code a} is greater than {@code b}; or zero if they are equal
-   */
-  public static int compare(primtyp a, primtyp b) {
-    return (a < b) ? -1 : ((a > b) ? 1 : 0);
-  }
-
-  /**
-   * Returns {@code true} if {@code target} is present as an element anywhere in
-   * {@code array}.
-   *
-   * @param array an array of {@code primtyp} values, possibly empty
-   * @param target a primitive {@code primtyp} value
-   * @return {@code true} if {@code array[i] == target} for some value of {@code
-   *     i}
-   */
-  public static boolean contains(primtyp[] array, primtyp target) {
-    for (primtyp value : array) {
-      if (value == target) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  /**
-   * Returns the index of the first appearance of the value {@code target} in
-   * {@code array}.
-   *
-   * @param array an array of {@code primtyp} values, possibly empty
-   * @param target a primitive {@code primtyp} value
-   * @return the least index {@code i} for which {@code array[i] == target}, or
-   *     {@code -1} if no such index exists.
-   */
-  public static int indexOf(primtyp[] array, primtyp target) {
-    return indexOf(array, target, 0, array.length);
-  }
-
-  // TODO: consider making this public
-  private static int indexOf(
-      primtyp[] array, primtyp target, int start, int end) {
-    for (int i = start; i < end; i++) {
-      if (array[i] == target) {
-        return i;
-      }
-    }
-    return -1;
-  }
-
-  /**
-   * Returns the start position of the first occurrence of the specified {@code
-   * target} within {@code array}, or {@code -1} if there is no such occurrence.
-   *
-   * <p>More formally, returns the lowest index {@code i} such that {@code
-   * java.util.Arrays.copyOfRange(array, i, i + target.length)} contains exactly
-   * the same elements as {@code target}.
-   *
-   * @param array the array to search for the sequence {@code target}
-   * @param target the array to search for as a sub-sequence of {@code array}
-   */
-  public static int indexOf(primtyp[] array, primtyp[] target) {
-    checkNotNull(array, "array");
-    checkNotNull(target, "target");
-    if (target.length == 0) {
-      return 0;
-    }
-
-    outer:
-    for (int i = 0; i < array.length - target.length + 1; i++) {
-      for (int j = 0; j < target.length; j++) {
-        if (array[i + j] != target[j]) {
-          continue outer;
-        }
-      }
-      return i;
-    }
-    return -1;
-  }
-
-  /**
-   * Returns the index of the last appearance of the value {@code target} in
-   * {@code array}.
-   *
-   * @param array an array of {@code primtyp} values, possibly empty
-   * @param target a primitive {@code primtyp} value
-   * @return the greatest index {@code i} for which {@code array[i] == target},
-   *     or {@code -1} if no such index exists.
-   */
-  public static int lastIndexOf(primtyp[] array, primtyp target) {
-    return lastIndexOf(array, target, 0, array.length);
-  }
-
-  // TODO: consider making this public
-  private static int lastIndexOf(
-      primtyp[] array, primtyp target, int start, int end) {
-    for (int i = end - 1; i >= start; i--) {
-      if (array[i] == target) {
-        return i;
-      }
-    }
-    return -1;
-  }
-
-  /**
-   * Returns the least value present in {@code array}.
-   *
-   * @param array a <i>nonempty</i> array of {@code primtyp} values
-   * @return the value present in {@code array} that is less than or equal to
-   *     every other value in the array
-   * @throws IllegalArgumentException if {@code array} is empty
-   */
-  public static primtyp min(primtyp... array) {
-    checkArgument(array.length > 0);
-    primtyp min = array[0];
-    for (int i = 1; i < array.length; i++) {
-      if (array[i] < min) {
-        min = array[i];
-      }
-    }
-    return min;
-  }
-
-  /**
-   * Returns the greatest value present in {@code array}.
-   *
-   * @param array a <i>nonempty</i> array of {@code primtyp} values
-   * @return the value present in {@code array} that is greater than or equal to
-   *     every other value in the array
-   * @throws IllegalArgumentException if {@code array} is empty
-   */
-  public static primtyp max(primtyp... array) {
-    checkArgument(array.length > 0);
-    primtyp max = array[0];
-    for (int i = 1; i < array.length; i++) {
-      if (array[i] > max) {
-        max = array[i];
-      }
-    }
-    return max;
-  }
-
-  /**
-   * Returns the values from each provided array combined into a single array.
-   * For example, {@code concat(new primtyp[] {a, b}, new primtyp[] {}, new
-   * primtyp[] {c}} returns the array {@code {a, b, c}}.
-   *
-   * @param arrays zero or more {@code primtyp} arrays
-   * @return a single array containing all the values from the source arrays, in
-   *     order
-   */
-  public static primtyp[] concat(primtyp[]... arrays) {
-    int length = 0;
-    for (primtyp[] array : arrays) {
-      length += array.length;
-    }
-    primtyp[] result = new primtyp[length];
-    int pos = 0;
-    for (primtyp[] array : arrays) {
-      System.arraycopy(array, 0, result, pos, array.length);
-      pos += array.length;
-    }
-    return result;
-  }
-
-  /**
-   * Returns a big-endian representation of {@code value} in a ?-element byte
-   * array; equivalent to {@code
-   * ByteBuffer.allocate(?).putPrimTyp(value).array()}.  For example, the input
-   * value {@code ?} would yield the byte array {@code {?}}.
-   *
-   * <p>If you need to convert and concatenate several values (possibly even of
-   * different types), use a shared {@link java.nio.ByteBuffer} instance, or use
-   * {@link com.google.common.io.ByteStreams#newDataOutput()} to get a growable
-   * buffer.
-   */
-  @GwtIncompatible("doesn't work")
-  public static byte[] toByteArray(primtyp value) {
-    return new byte[] {
-      ?
-    };
-  }
-
-  /**
-   * Returns the {@code primtyp} value whose big-endian representation is
-   * stored in the first ? bytes of {@code bytes}; equivalent to {@code
-   * ByteBuffer.wrap(bytes).getPrimTyp()}. For example, the input byte array
-   * {@code {?}} would yield the {@code primtyp} value {@code ?}.
-   *
-   * <p>Arguably, it's preferable to use {@link java.nio.ByteBuffer}; that
-   * library exposes much more flexibility at little cost in readability.
-   *
-   * @throws IllegalArgumentException if {@code bytes} has fewer than ?
-   *     elements
-   */
-  @GwtIncompatible("doesn't work")
-  public static primtyp fromByteArray(byte[] bytes) {
-    checkArgument(bytes.length >= BYTES,
-        "array too small: %s < %s", bytes.length, BYTES);
-    return ?
-  }
-
-  /**
-   * Returns an array containing the same values as {@code array}, but
-   * guaranteed to be of a specified minimum length. If {@code array} already
-   * has a length of at least {@code minLength}, it is returned directly.
-   * Otherwise, a new array of size {@code minLength + padding} is returned,
-   * containing the values of {@code array}, and zeroes in the remaining places.
-   *
-   * @param array the source array
-   * @param minLength the minimum length the returned array must guarantee
-   * @param padding an extra amount to "grow" the array by if growth is
-   *     necessary
-   * @throws IllegalArgumentException if {@code minLength} or {@code padding} is
-   *     negative
-   * @return an array containing the values of {@code array}, with guaranteed
-   *     minimum length {@code minLength}
-   */
-  public static primtyp[] ensureCapacity(
-      primtyp[] array, int minLength, int padding) {
-    checkArgument(minLength >= 0, "Invalid minLength: %s", minLength);
-    checkArgument(padding >= 0, "Invalid padding: %s", padding);
-    return (array.length < minLength)
-        ? copyOf(array, minLength + padding)
-        : array;
-  }
-
-  // Arrays.copyOf() requires Java 6
-  private static primtyp[] copyOf(primtyp[] original, int length) {
-    primtyp[] copy = new primtyp[length];
-    System.arraycopy(original, 0, copy, 0, Math.min(original.length, length));
-    return copy;
-  }
-
-  /**
-   * Returns a string containing the supplied {@code primtyp} values separated
-   * by {@code separator}. For example, {@code join("-", 1?, 2?, 3?)} returns
-   * the string {@code "1-2-3"}.
-   *
-   * @param separator the text that should appear between consecutive values in
-   *     the resulting string (but not at the start or end)
-   * @param array an array of {@code primtyp} values, possibly empty
-   */
-  public static String join(String separator, primtyp... array) {
-    checkNotNull(separator);
-    if (array.length == 0) {
-      return "";
-    }
-
-    // For pre-sizing a builder, just get the right order of magnitude
-    StringBuilder builder = new StringBuilder(array.length * ??);
-    builder.append(array[0]);
-    for (int i = 1; i < array.length; i++) {
-      builder.append(separator).append(array[i]);
-    }
-    return builder.toString();
-  }
-
-  /**
-   * Returns a comparator that compares two {@code primtyp} arrays
-   * lexicographically. That is, it compares, using {@link
-   * #compare(primtyp, primtyp)}), the first pair of values that follow any
-   * common prefix, or when one array is a prefix of the other, treats the
-   * shorter array as the lesser. For example, {@code [] < [1] < [1, 2] < [2]}.
-   *
-   * <p>The returned comparator is inconsistent with {@link
-   * Object#equals(Object)} (since arrays support only identity equality), but
-   * it is consistent with {@link Arrays#equals(primtyp[], primtyp[])}.
-   *
-   * @see <a href="http://en.wikipedia.org/wiki/Lexicographical_order">
-   *     Lexicographical order</a> article at Wikipedia
-   * @since 2010.01.04 <b>tentative</b>
-   */
-  public static Comparator<primtyp[]> lexicographicalComparator() {
-    return LexicographicalComparator.INSTANCE;
-  }
-
-  private enum LexicographicalComparator implements Comparator<primtyp[]> {
-    INSTANCE;
-
-    public int compare(primtyp[] left, primtyp[] right) {
-      int minLength = Math.min(left.length, right.length);
-      for (int i = 0; i < minLength; i++) {
-        int result = PrimTyps.compare(left[i], right[i]);
-        if (result != 0) {
-          return result;
-        }
-      }
-      return left.length - right.length;
-    }
-  }
-
-  /**
-   * Copies a collection of {@code WrapperCl} instances into a new array of
-   * primitive {@code primtyp} values.
-   *
-   * <p>Elements are copied from the argument collection as if by {@code
-   * collection.toArray()}.  Calling this method is as thread-safe as calling
-   * that method.
-   *
-   * @param collection a collection of {@code WrapperCl} objects
-   * @return an array containing the same values as {@code collection}, in the
-   *     same order, converted to primitives
-   * @throws NullPointerException if {@code collection} or any of its elements
-   *     is null
-   */
-  public static primtyp[] toArray(Collection<WrapperCl> collection) {
-    if (collection instanceof PrimTypArrayAsList) {
-      return ((PrimTypArrayAsList) collection).toPrimTypArray();
-    }
-
-    Object[] boxedArray = collection.toArray();
-    int len = boxedArray.length;
-    primtyp[] array = new primtyp[len];
-    for (int i = 0; i < len; i++) {
-      array[i] = (WrapperCl) boxedArray[i];
-    }
-    return array;
-  }
-
-  /**
-   * Returns a fixed-size list backed by the specified array, similar to {@link
-   * Arrays#asList(Object[])}. The list supports {@link List#set(int, Object)},
-   * but any attempt to set a value to {@code null} will result in a {@link
-   * NullPointerException}.
-   *
-   * <p>The returned list maintains the values, but not the identities, of
-   * {@code WrapperCl} objects written to or read from it.  For example, whether
-   * {@code list.get(0) == list.get(0)} is true for the returned list is
-   * unspecified.
-   *
-   * @param backingArray the array to back the list
-   * @return a list view of the array
-   */
-  public static List<WrapperCl> asList(primtyp... backingArray) {
-    if (backingArray.length == 0) {
-      return Collections.emptyList();
-    }
-    return new PrimTypArrayAsList(backingArray);
-  }
-
-  @GwtCompatible
-  private static class PrimTypArrayAsList extends AbstractList<WrapperCl>
-      implements RandomAccess, Serializable {
-    final primtyp[] array;
-    final int start;
-    final int end;
-
-    PrimTypArrayAsList(primtyp[] array) {
-      this(array, 0, array.length);
-    }
-
-    PrimTypArrayAsList(primtyp[] array, int start, int end) {
-      this.array = array;
-      this.start = start;
-      this.end = end;
-    }
-
-    @Override public int size() {
-      return end - start;
-    }
-
-    @Override public boolean isEmpty() {
-      return false;
-    }
-
-    @Override public WrapperCl get(int index) {
-      checkElementIndex(index, size());
-      return array[start + index];
-    }
-
-    @Override public boolean contains(Object target) {
-      // Overridden to prevent a ton of boxing
-      return (target instanceof WrapperCl)
-          && PrimTyps.indexOf(array, (WrapperCl) target, start, end) != -1;
-    }
-
-    @Override public int indexOf(Object target) {
-      // Overridden to prevent a ton of boxing
-      if (target instanceof WrapperCl) {
-        int i = PrimTyps.indexOf(array, (WrapperCl) target, start, end);
-        if (i >= 0) {
-          return i - start;
-        }
-      }
-      return -1;
-    }
-
-    @Override public int lastIndexOf(Object target) {
-      // Overridden to prevent a ton of boxing
-      if (target instanceof WrapperCl) {
-        int i = PrimTyps.lastIndexOf(array, (WrapperCl) target, start, end);
-        if (i >= 0) {
-          return i - start;
-        }
-      }
-      return -1;
-    }
-
-    @Override public WrapperCl set(int index, WrapperCl element) {
-      checkElementIndex(index, size());
-      primtyp oldValue = array[start + index];
-      array[start + index] = element;
-      return oldValue;
-    }
-
-    /** In GWT, List and AbstractList do not have the subList method. */
-    /*@Override*/ public List<WrapperCl> subList(int fromIndex, int toIndex) {
-      int size = size();
-      checkPositionIndexes(fromIndex, toIndex, size);
-      if (fromIndex == toIndex) {
-        return Collections.emptyList();
-      }
-      return new PrimTypArrayAsList(array, start + fromIndex, start + toIndex);
-    }
-
-    @Override public boolean equals(Object object) {
-      if (object == this) {
-        return true;
-      }
-      if (object instanceof PrimTypArrayAsList) {
-        PrimTypArrayAsList that = (PrimTypArrayAsList) object;
-        int size = size();
-        if (that.size() != size) {
-          return false;
-        }
-        for (int i = 0; i < size; i++) {
-          if (array[start + i] != that.array[that.start + i]) {
-            return false;
-          }
-        }
-        return true;
-      }
-      return super.equals(object);
-    }
-
-    @Override public int hashCode() {
-      int result = 1;
-      for (int i = start; i < end; i++) {
-        result = 31 * result + PrimTyps.hashCode(array[i]);
-      }
-      return result;
-    }
-
-    @Override public String toString() {
-      StringBuilder builder = new StringBuilder(size() * ??);
-      builder.append('[').append(array[start]);
-      for (int i = start + 1; i < end; i++) {
-        builder.append(", ").append(array[i]);
-      }
-      return builder.append(']').toString();
-    }
-
-    primtyp[] toPrimTypArray() {
-      // Arrays.copyOfRange() requires Java 6
-      int size = size();
-      primtyp[] result = new primtyp[size];
-      System.arraycopy(array, start, result, 0, size);
-      return result;
-    }
-
-    private static final long serialVersionUID = 0;
-  }
-}
---EOF--
-
diff --git a/src/com/google/common/util/concurrent/AbstractCheckedFuture.java b/src/com/google/common/util/concurrent/AbstractCheckedFuture.java
deleted file mode 100644
index 2fe7297..0000000
--- a/src/com/google/common/util/concurrent/AbstractCheckedFuture.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.util.concurrent;
-
-import java.util.concurrent.CancellationException;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Executor;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.TimeoutException;
-
-/**
- * A delegating wrapper around a {@link ListenableFuture} that adds support for
- * the {@link #checkedGet()} and {@link #checkedGet(long, TimeUnit)} methods.
- * 
- * @author Sven Mawson
- * @since 2009.09.15 <b>tentative</b>
- */
-public abstract class AbstractCheckedFuture<V, E extends Exception>
-    implements CheckedFuture<V, E> {
-
-  /** The delegate, used to pass along all our methods. */
-  protected final ListenableFuture<V> delegate;
-  
-  /**
-   * Constructs an {@code AbstractCheckedFuture} that wraps a delegate.
-   */
-  protected AbstractCheckedFuture(ListenableFuture<V> delegate) {
-    this.delegate = delegate;
-  }
-
-  /**
-   * Translate from an {@link InterruptedException},
-   * {@link CancellationException} or {@link ExecutionException} to an exception
-   * of type {@code E}.  Subclasses must implement the mapping themselves.
-   * 
-   * The {@code e} parameter can be an instance of {@link InterruptedException},
-   * {@link CancellationException}, or {@link ExecutionException}.
-   */
-  protected abstract E mapException(Exception e);
-  
-  /*
-   * Just like get but maps the exceptions into appropriate application-specific
-   * exceptions.
-   */
-  public V checkedGet() throws E {
-    try {
-      return get();
-    } catch (InterruptedException e) {
-      cancel(true);
-      throw mapException(e);
-    } catch (CancellationException e) {
-      throw mapException(e);
-    } catch (ExecutionException e) {
-      throw mapException(e);
-    }
-  }
-
-  /*
-   * The timed version of checkedGet maps the interrupted, cancellation or
-   * execution exceptions exactly the same as the untimed version does.
-   */
-  public V checkedGet(long timeout, TimeUnit unit) throws TimeoutException, E {
-    try {
-      return get(timeout, unit);
-    } catch (InterruptedException e) {
-      cancel(true);
-      throw mapException(e);
-    } catch (CancellationException e) {
-      throw mapException(e);
-    } catch (ExecutionException e) {
-      throw mapException(e);
-    }
-  }
-
-  // Delegate methods for methods defined in the ListenableFuture interface.
-  
-  public boolean cancel(boolean mayInterruptIfRunning) {
-    return delegate.cancel(mayInterruptIfRunning);
-  }
-  
-  public boolean isCancelled() {
-    return delegate.isCancelled();
-  }
-  
-  public boolean isDone() {
-    return delegate.isDone();
-  }
-  
-  public V get() throws InterruptedException, ExecutionException {
-    return delegate.get();
-  }
-  
-  public V get(long timeout, TimeUnit unit) throws InterruptedException,
-      ExecutionException, TimeoutException {
-    return delegate.get(timeout, unit);
-  }
-  
-  public void addListener(Runnable listener, Executor exec) {
-    delegate.addListener(listener, exec);
-  }
-}
diff --git a/src/com/google/common/util/concurrent/AbstractExecutionThreadService.java b/src/com/google/common/util/concurrent/AbstractExecutionThreadService.java
deleted file mode 100644
index 337e54b..0000000
--- a/src/com/google/common/util/concurrent/AbstractExecutionThreadService.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * Copyright (C) 2009 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.util.concurrent;
-
-import com.google.common.base.Service;
-import com.google.common.base.Throwables;
-
-import java.util.concurrent.Executor;
-import java.util.concurrent.Future;
-
-/**
- * Base class for services that can implement {@link #startUp}, {@link #run} and
- * {@link #shutDown} methods. This class uses a single thread to execute the
- * service; consider {@link AbstractService} if you would like to manage any
- * threading manually.
- *
- * @author Jesse Wilson
- * @since 2009.09.15 <b>tentative</b>
- */
-public abstract class AbstractExecutionThreadService implements Service {
-
-  /* use AbstractService for state management */
-  private final Service delegate = new AbstractService() {
-    @Override protected final void doStart() {
-      executor().execute(new Runnable() {
-        public void run() {
-          try {
-            startUp();
-            notifyStarted();
-
-            if (isRunning()) {
-              try {
-                AbstractExecutionThreadService.this.run();
-              } catch (Throwable t) {
-                try {
-                  shutDown();
-                } catch (Exception ignored) {}
-                throw t;
-              }
-            }
-
-            shutDown();
-            notifyStopped();
-          } catch (Throwable t) {
-            notifyFailed(t);
-            throw Throwables.propagate(t);
-          }
-        }
-      });
-    }
-
-    @Override protected void doStop() {
-      triggerShutdown();
-    }
-  };
-
-  /**
-   * Start the service. This method is invoked on the execution thread.
-   */
-  protected void startUp() throws Exception {}
-
-  /**
-   * Run the service. This method is invoked on the execution thread.
-   * Implementations must respond to stop requests. You could poll for lifecycle
-   * changes in a work loop:
-   * <pre>
-   *   public void run() {
-   *     while ({@link #isRunning()}) {
-   *       // perform a unit of work
-   *     }
-   *   }
-   * </pre>
-   * ...or you could respond to stop requests by implementing {@link
-   * #triggerShutdown()}, which should cause {@link #run()} to return.
-   */
-  protected abstract void run() throws Exception;
-
-  /**
-   * Stop the service. This method is invoked on the execution thread.
-   */
-  // TODO: consider supporting a TearDownTestCase-like API
-  protected void shutDown() throws Exception {}
-
-  /**
-   * Invoked to request the service to stop.
-   */
-  protected void triggerShutdown() {}
-
-  /**
-   * Returns the {@link Executor} that will be used to run this service.
-   * Subclasses may override this method to use a custom {@link Executor}, which
-   * may configure its worker thread with a specific name, thread group or
-   * priority. The returned executor's {@link Executor#execute(Runnable)
-   * execute()} method is called when this service is started, and should return
-   * promptly.
-   */
-  protected Executor executor() {
-    return new Executor() {
-      public void execute(Runnable command) {
-        new Thread(command, AbstractExecutionThreadService.this.toString())
-            .start();
-      }
-    };
-  }
-
-  @Override public String toString() {
-    return getClass().getSimpleName();
-  }
-
-  // We override instead of using ForwardingService so that these can be final.
-
-  /*@Override*/ public final Future<State> start() {
-    return delegate.start();
-  }
-
-  /*@Override*/ public final State startAndWait() {
-    return delegate.startAndWait();
-  }
-
-  /*@Override*/ public final boolean isRunning() {
-    return delegate.isRunning();
-  }
-
-  /*@Override*/ public final State state() {
-    return delegate.state();
-  }
-
-  /*@Override*/ public final Future<State> stop() {
-    return delegate.stop();
-  }
-
-  /*@Override*/ public final State stopAndWait() {
-    return delegate.stopAndWait();
-  }
-}
diff --git a/src/com/google/common/util/concurrent/AbstractFuture.java b/src/com/google/common/util/concurrent/AbstractFuture.java
deleted file mode 100644
index 51821d5..0000000
--- a/src/com/google/common/util/concurrent/AbstractFuture.java
+++ /dev/null
@@ -1,322 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.util.concurrent;
-
-import java.util.concurrent.CancellationException;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Future;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.TimeoutException;
-import java.util.concurrent.locks.AbstractQueuedSynchronizer;
-
-/**
- * <p>An abstract implementation of the {@link Future} interface.  This class
- * is an abstraction of {@link java.util.concurrent.FutureTask} to support use
- * for tasks other than {@link Runnable}s.  It uses an
- * {@link AbstractQueuedSynchronizer} to deal with concurrency issues and
- * guarantee thread safety.  It could be used as a base class to
- * {@code FutureTask}, or any other implementor of the {@code Future} interface.
- *
- * <p>This class implements all methods in {@code Future}.  Subclasses should
- * provide a way to set the result of the computation through the protected
- * methods {@link #set(Object)}, {@link #setException(Throwable)}, or
- * {@link #cancel()}.  If subclasses want to implement cancellation they can
- * override the {@link #cancel(boolean)} method with a real implementation, the
- * default implementation doesn't support cancellation.
- *
- * <p>The state changing methods all return a boolean indicating success or
- * failure in changing the future's state.  Valid states are running,
- * completed, failed, or cancelled.  Because this class does not implement
- * cancellation it is left to the subclass to distinguish between created
- * and running tasks.
- *
- * @author Sven Mawson
- * @since 2009.09.15 <b>tentative</b>
- */
-public abstract class AbstractFuture<V> implements Future<V> {
-
-  /** Synchronization control for AbstractFutures. */
-  private final Sync<V> sync = new Sync<V>();
-
-  /*
-   * Blocks until either the task completes or the timeout expires.  Uses the
-   * sync blocking-with-timeout support provided by AQS.
-   */
-  public V get(long timeout, TimeUnit unit) throws InterruptedException,
-      TimeoutException, ExecutionException {
-    return sync.get(unit.toNanos(timeout));
-  }
-
-  /*
-   * Blocks until the task completes or we get interrupted. Uses the
-   * interruptible blocking support provided by AQS.
-   */
-  public V get() throws InterruptedException, ExecutionException {
-    return sync.get();
-  }
-
-  /*
-   * Checks if the sync is not in the running state.
-   */
-  public boolean isDone() {
-    return sync.isDone();
-  }
-
-  /*
-   * Checks if the sync is in the cancelled state.
-   */
-  public boolean isCancelled() {
-    return sync.isCancelled();
-  }
-
-  /*
-   * Default implementation of cancel that never cancels the future.
-   * Subclasses should override this to implement cancellation if desired.
-   */
-  public boolean cancel(boolean mayInterruptIfRunning) {
-    return false;
-  }
-
-  /**
-   * Subclasses should invoke this method to set the result of the computation
-   * to {@code value}.  This will set the state of the future to
-   * {@link AbstractFuture.Sync#COMPLETED} and call {@link #done()} if the
-   * state was successfully changed.
-   *
-   * @param value the value that was the result of the task.
-   * @return true if the state was successfully changed.
-   */
-  protected boolean set(V value) {
-    boolean result = sync.set(value);
-    if (result) {
-      done();
-    }
-    return result;
-  }
-
-  /**
-   * Subclasses should invoke this method to set the result of the computation
-   * to an error, {@code throwable}.  This will set the state of the future to
-   * {@link AbstractFuture.Sync#COMPLETED} and call {@link #done()} if the
-   * state was successfully changed.
-   *
-   * @param throwable the exception that the task failed with.
-   * @return true if the state was successfully changed.
-   * @throws Error if the throwable was an {@link Error}.
-   */
-  protected boolean setException(Throwable throwable) {
-    boolean result = sync.setException(throwable);
-    if (result) {
-      done();
-    }
-
-    // If it's an Error, we want to make sure it reaches the top of the
-    // call stack, so we rethrow it.
-    if (throwable instanceof Error) {
-      throw (Error) throwable;
-    }
-    return result;
-  }
-
-  /**
-   * Subclasses should invoke this method to mark the future as cancelled.
-   * This will set the state of the future to {@link
-   * AbstractFuture.Sync#CANCELLED} and call {@link #done()} if the state was
-   * successfully changed.
-   *
-   * @return true if the state was successfully changed.
-   */
-  protected final boolean cancel() {
-    boolean result = sync.cancel();
-    if (result) {
-      done();
-    }
-    return result;
-  }
-
-  /*
-   * Called by the success, failed, or cancelled methods to indicate that the
-   * value is now available and the latch can be released.  Subclasses can
-   * use this method to deal with any actions that should be undertaken when
-   * the task has completed.
-   */
-  protected void done() {
-    // Default implementation does nothing.
-  }
-
-  /**
-   * <p>Following the contract of {@link AbstractQueuedSynchronizer} we create a
-   * private subclass to hold the synchronizer.  This synchronizer is used to
-   * implement the blocking and waiting calls as well as to handle state changes
-   * in a thread-safe manner.  The current state of the future is held in the
-   * Sync state, and the lock is released whenever the state changes to either
-   * {@link #COMPLETED} or {@link #CANCELLED}.
-   *
-   * <p>To avoid races between threads doing release and acquire, we transition
-   * to the final state in two steps.  One thread will successfully CAS from
-   * RUNNING to COMPLETING, that thread will then set the result of the
-   * computation, and only then transition to COMPLETED or CANCELLED.
-   *
-   * <p>We don't use the integer argument passed between acquire methods so we
-   * pass around a -1 everywhere.
-   */
-  static final class Sync<V> extends AbstractQueuedSynchronizer {
-
-    private static final long serialVersionUID = 0L;
-
-    /* Valid states. */
-    static final int RUNNING = 0;
-    static final int COMPLETING = 1;
-    static final int COMPLETED = 2;
-    static final int CANCELLED = 4;
-
-    private V value;
-    private ExecutionException exception;
-
-    /*
-     * Acquisition succeeds if the future is done, otherwise it fails.
-     */
-    @Override
-    protected int tryAcquireShared(int ignored) {
-      if (isDone()) {
-        return 1;
-      }
-      return -1;
-    }
-
-    /*
-     * We always allow a release to go through, this means the state has been
-     * successfully changed and the result is available.
-     */
-    @Override
-    protected boolean tryReleaseShared(int finalState) {
-      setState(finalState);
-      return true;
-    }
-
-    /**
-     * Blocks until the task is complete or the timeout expires.  Throws a
-     * {@link TimeoutException} if the timer expires, otherwise behaves like
-     * {@link #get()}.
-     */
-    V get(long nanos) throws TimeoutException, CancellationException,
-        ExecutionException, InterruptedException {
-
-      // Attempt to acquire the shared lock with a timeout.
-      if (!tryAcquireSharedNanos(-1, nanos)) {
-        throw new TimeoutException("Timeout waiting for task.");
-      }
-
-      return getValue();
-    }
-
-    /**
-     * Blocks until {@link #complete(Object, Throwable, int)} has been
-     * successfully called.  Throws a {@link CancellationException} if the task
-     * was cancelled, or a {@link ExecutionException} if the task completed with
-     * an error.
-     */
-    V get() throws CancellationException, ExecutionException,
-        InterruptedException {
-
-      // Acquire the shared lock allowing interruption.
-      acquireSharedInterruptibly(-1);
-      return getValue();
-    }
-
-    /**
-     * Implementation of the actual value retrieval.  Will return the value
-     * on success, an exception on failure, a cancellation on cancellation, or
-     * an illegal state if the synchronizer is in an invalid state.
-     */
-    private V getValue() throws CancellationException, ExecutionException {
-      int state = getState();
-      switch (state) {
-        case COMPLETED:
-          if (exception != null) {
-            throw exception;
-          } else {
-            return value;
-          }
-
-        case CANCELLED:
-          throw new CancellationException("Task was cancelled.");
-
-        default:
-          throw new IllegalStateException(
-              "Error, synchronizer in invalid state: " + state);
-      }
-    }
-
-    /**
-     * Checks if the state is {@link #COMPLETED} or {@link #CANCELLED}.
-     */
-    boolean isDone() {
-      return (getState() & (COMPLETED | CANCELLED)) != 0;
-    }
-
-    /**
-     * Checks if the state is {@link #CANCELLED}.
-     */
-    boolean isCancelled() {
-      return getState() == CANCELLED;
-    }
-
-    /**
-     * Transition to the COMPLETED state and set the value.
-     */
-    boolean set(V v) {
-      return complete(v, null, COMPLETED);
-    }
-
-    /**
-     * Transition to the COMPLETED state and set the exception.
-     */
-    boolean setException(Throwable t) {
-      return complete(null, t, COMPLETED);
-    }
-
-    /**
-     * Transition to the CANCELLED state.
-     */
-    boolean cancel() {
-      return complete(null, null, CANCELLED);
-    }
-
-    /**
-     * Implementation of completing a task.  Either {@code v} or {@code t} will
-     * be set but not both.  The {@code finalState} is the state to change to
-     * from {@link #RUNNING}.  If the state is not in the RUNNING state we
-     * return {@code false}.
-     *
-     * @param v the value to set as the result of the computation.
-     * @param t the exception to set as the result of the computation.
-     * @param finalState the state to transition to.
-     */
-    private boolean complete(V v, Throwable t, int finalState) {
-      if (compareAndSetState(RUNNING, COMPLETING)) {
-        this.value = v;
-        this.exception = t == null ? null : new ExecutionException(t);
-        releaseShared(finalState);
-        return true;
-      }
-
-      // The state was not RUNNING, so there are no valid transitions.
-      return false;
-    }
-  }
-}
diff --git a/src/com/google/common/util/concurrent/AbstractIdleService.java b/src/com/google/common/util/concurrent/AbstractIdleService.java
deleted file mode 100644
index e06fad7..0000000
--- a/src/com/google/common/util/concurrent/AbstractIdleService.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Copyright (C) 2009 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.util.concurrent;
-
-import com.google.common.base.Service;
-import com.google.common.base.Service.State; // for javadoc
-import com.google.common.base.Throwables;
-
-import java.util.concurrent.Executor;
-import java.util.concurrent.Future;
-
-/**
- * Base class for services that do not need a thread while "running"
- * but may need one during startup and shutdown. Subclasses can
- * implement {@link #startUp} and {@link #shutDown} methods, each
- * which run in a executor which by default uses a separate thread
- * for each method.
- *
- * @author Chris Nokleberg
- * @since 2009.09.15 <b>tentative</b>
- */
-public abstract class AbstractIdleService implements Service {
-
-  /* use AbstractService for state management */
-  private final Service delegate = new AbstractService() {
-    @Override protected final void doStart() {
-      executor(State.STARTING).execute(new Runnable() {
-        /*@Override*/ public void run() {
-          try {
-            startUp();
-            notifyStarted();
-          } catch (Throwable t) {
-            notifyFailed(t);
-            throw Throwables.propagate(t);
-          }
-        }
-      });
-    }
-
-    @Override protected final void doStop() {
-      executor(State.STOPPING).execute(new Runnable() {
-        /*@Override*/ public void run() {
-          try {
-            shutDown();
-            notifyStopped();
-          } catch (Throwable t) {
-            notifyFailed(t);
-            throw Throwables.propagate(t);
-          }
-        }
-      });
-    }
-  };
-
-  /** Start the service. */
-  protected abstract void startUp() throws Exception;
-
-  /** Stop the service. */
-  protected abstract void shutDown() throws Exception;
-
-  /**
-   * Returns the {@link Executor} that will be used to run this service.
-   * Subclasses may override this method to use a custom {@link Executor}, which
-   * may configure its worker thread with a specific name, thread group or
-   * priority. The returned executor's {@link Executor#execute(Runnable)
-   * execute()} method is called when this service is started and stopped,
-   * and should return promptly.
-   *
-   * @param state {@link State#STARTING} or {@link State#STOPPING}, used by the
-   *     default implementation for naming the thread
-   */
-  protected Executor executor(final State state) {
-    return new Executor() {
-      public void execute(Runnable command) {
-        new Thread(command, AbstractIdleService.this.toString() + " " + state)
-            .start();
-      }
-    };
-  }
-
-  @Override public String toString() {
-    return getClass().getSimpleName();
-  }
-
-  // We override instead of using ForwardingService so that these can be final.
-
-  /*@Override*/ public final Future<State> start() {
-    return delegate.start();
-  }
-
-  /*@Override*/ public final State startAndWait() {
-    return delegate.startAndWait();
-  }
-
-  /*@Override*/ public final boolean isRunning() {
-    return delegate.isRunning();
-  }
-
-  /*@Override*/ public final State state() {
-    return delegate.state();
-  }
-
-  /*@Override*/ public final Future<State> stop() {
-    return delegate.stop();
-  }
-
-  /*@Override*/ public final State stopAndWait() {
-    return delegate.stopAndWait();
-  }
-}
diff --git a/src/com/google/common/util/concurrent/AbstractListenableFuture.java b/src/com/google/common/util/concurrent/AbstractListenableFuture.java
deleted file mode 100644
index 52f0c96..0000000
--- a/src/com/google/common/util/concurrent/AbstractListenableFuture.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.util.concurrent;
-
-import java.util.concurrent.Executor;
-
-/**
- * <p>An abstract base implementation of the listener support provided by
- * {@link ListenableFuture}. This class uses an {@link ExecutionList} to
- * guarantee that all registered listeners will be executed. Listener/Executor
- * pairs are stored in the execution list and executed in the order in which
- * they were added, but because of thread scheduling issues there is no
- * guarantee that the JVM will execute them in order. In addition, listeners
- * added after the task is complete will be executed immediately, even if some
- * previously added listeners have not yet been executed.
- * 
- * <p>This class uses the {@link AbstractFuture} class to implement the
- * {@code ListenableFuture} interface and simply delegates the
- * {@link #addListener(Runnable, Executor)} and {@link #done()} methods to it.
- * 
- * @author Sven Mawson
- * @since 2009.09.15 <b>tentative</b>
- */
-public abstract class AbstractListenableFuture<V>
-    extends AbstractFuture<V> implements ListenableFuture<V> {
-
-  // The execution list to hold our executors.
-  private final ExecutionList executionList = new ExecutionList();
-
-  /*
-   * Adds a listener/executor pair to execution list to execute when this task
-   * is completed.
-   */
-  public void addListener(Runnable listener, Executor exec) {
-    executionList.add(listener, exec);
-  }
-
-  /*
-   * Override the done method to execute the execution list.
-   */
-  @Override
-  protected void done() {
-    executionList.run();
-  }
-}
diff --git a/src/com/google/common/util/concurrent/AbstractService.java b/src/com/google/common/util/concurrent/AbstractService.java
deleted file mode 100644
index bf97a2c..0000000
--- a/src/com/google/common/util/concurrent/AbstractService.java
+++ /dev/null
@@ -1,304 +0,0 @@
-/*
- * Copyright (C) 2009 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.util.concurrent;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Preconditions.checkState;
-import com.google.common.base.Service;
-import com.google.common.base.Service.State; // javadoc needs this
-import com.google.common.base.Throwables;
-
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Future;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.TimeoutException;
-import java.util.concurrent.locks.ReentrantLock;
-
-/**
- * Base class for implementing services that can handle {@link #doStart} and
- * {@link #doStop} requests, responding to them with {@link #notifyStarted()}
- * and {@link #notifyStopped()} callbacks. Its subclasses must manage threads
- * manually; consider {@link AbstractExecutionThreadService} if you need only a
- * single execution thread.
- *
- * @author Jesse Wilson
- * @since 2009.09.15 <b>tentative</b>
- */
-public abstract class AbstractService implements Service {
-
-  private final ReentrantLock lock = new ReentrantLock();
-
-  private final Transition startup = new Transition();
-  private final Transition shutdown = new Transition();
-
-  /**
-   * The internal state, which equals external state unless
-   * shutdownWhenStartupFinishes is true. Guarded by {@code lock}.
-   */
-  private State state = State.NEW;
-
-  /**
-   * If true, the user requested a shutdown while the service was still starting
-   * up. Guarded by {@code lock}.
-   */
-  private boolean shutdownWhenStartupFinishes = false;
-
-  /**
-   * This method is called by {@link #start} to initiate service startup. The
-   * invocation of this method should cause a call to {@link #notifyStarted()},
-   * either during this method's run, or after it has returned. If startup
-   * fails, the invocation should cause a call to {@link
-   * #notifyFailed(Throwable)} instead.
-   *
-   * <p>This method should return promptly; prefer to do work on a different
-   * thread where it is convenient. It is invoked exactly once on service
-   * startup, even when {@link #start} is called multiple times.
-   */
-  protected abstract void doStart();
-
-  /**
-   * This method should be used to initiate service shutdown. The invocation
-   * of this method should cause a call to {@link #notifyStopped()}, either
-   * during this method's run, or after it has returned. If shutdown fails, the
-   * invocation should cause a call to {@link #notifyFailed(Throwable)} instead.
-   *
-   * <p>This method should return promptly; prefer to do work on a different
-   * thread where it is convenient. It is invoked exactly once on service
-   * shutdown, even when {@link #stop} is called multiple times.
-   */
-  protected abstract void doStop();
-
-  public final Future<State> start() {
-    lock.lock();
-    try {
-      if (state == State.NEW) {
-        state = State.STARTING;
-        doStart();
-      }
-    } catch (Throwable startupFailure) {
-      // put the exception in the future, the user can get it via Future.get()
-      notifyFailed(startupFailure);
-    } finally {
-      lock.unlock();
-    }
-
-    return startup;
-  }
-
-  public final Future<State> stop() {
-    lock.lock();
-    try {
-      if (state == State.NEW) {
-        state = State.TERMINATED;
-        startup.transitionSucceeded(State.TERMINATED);
-        shutdown.transitionSucceeded(State.TERMINATED);
-      } else if (state == State.STARTING) {
-        shutdownWhenStartupFinishes = true;
-        startup.transitionSucceeded(State.STOPPING);
-      } else if (state == State.RUNNING) {
-        state = State.STOPPING;
-        doStop();
-      }
-    } catch (Throwable shutdownFailure) {
-      // put the exception in the future, the user can get it via Future.get()
-      notifyFailed(shutdownFailure);
-    } finally {
-      lock.unlock();
-    }
-
-    return shutdown;
-  }
-
-  public State startAndWait() {
-    try {
-      return start().get();
-    } catch (InterruptedException e) {
-      Thread.currentThread().interrupt();
-      throw new RuntimeException(e);
-    } catch (ExecutionException e) {
-      throw Throwables.propagate(e.getCause());
-    }
-  }
-
-  public State stopAndWait() {
-    try {
-      return stop().get();
-    } catch (ExecutionException e) {
-      throw Throwables.propagate(e.getCause());
-    } catch (InterruptedException e) {
-      Thread.currentThread().interrupt();
-      throw new RuntimeException(e);
-    }
-  }
-
-  /**
-   * Implementing classes should invoke this method once their service has
-   * started. It will cause the service to transition from {@link
-   * State#STARTING} to {@link State#RUNNING}.
-   *
-   * @throws IllegalStateException if the service is not
-   *     {@link State#STARTING}.
-   */
-  protected final void notifyStarted() {
-    lock.lock();
-    try {
-      if (state != State.STARTING) {
-        IllegalStateException failure = new IllegalStateException(
-            "Cannot notifyStarted() when the service is " + state);
-        notifyFailed(failure);
-        throw failure;
-      }
-
-      state = State.RUNNING;
-      if (shutdownWhenStartupFinishes) {
-        stop();
-      } else {
-        startup.transitionSucceeded(State.RUNNING);
-      }
-    } finally {
-      lock.unlock();
-    }
-  }
-
-  /**
-   * Implementing classes should invoke this method once their service has
-   * stopped. It will cause the service to transition from {@link
-   * State#STOPPING} to {@link State#TERMINATED}.
-   *
-   * @throws IllegalStateException if the service is neither {@link
-   *     State#STOPPING} nor {@link State#RUNNING}.
-   */
-  protected final void notifyStopped() {
-    lock.lock();
-    try {
-      if (state != State.STOPPING && state != State.RUNNING) {
-        IllegalStateException failure = new IllegalStateException(
-            "Cannot notifyStopped() when the service is " + state);
-        notifyFailed(failure);
-        throw failure;
-      }
-
-      state = State.TERMINATED;
-      shutdown.transitionSucceeded(State.TERMINATED);
-    } finally {
-      lock.unlock();
-    }
-  }
-
-  /**
-   * Invoke this method to transition the service to the
-   * {@link State#FAILED}. The service will <b>not be stopped</b> if it
-   * is running. Invoke this method when a service has failed critically or
-   * otherwise cannot be started nor stopped.
-   */
-  protected final void notifyFailed(Throwable cause) {
-    checkNotNull(cause);
-
-    lock.lock();
-    try {
-      if (state == State.STARTING) {
-        startup.transitionFailed(cause);
-        shutdown.transitionFailed(new Exception(
-            "Service failed to start.", cause));
-      } else if (state == State.STOPPING) {
-        shutdown.transitionFailed(cause);
-      }
-
-      state = State.FAILED;
-    } finally {
-      lock.unlock();
-    }
-  }
-
-  public final boolean isRunning() {
-    return state() == State.RUNNING;
-  }
-
-  public final State state() {
-    lock.lock();
-    try {
-      if (shutdownWhenStartupFinishes && state == State.STARTING) {
-        return State.STOPPING;
-      } else {
-        return state;
-      }
-    } finally {
-      lock.unlock();
-    }
-  }
-
-  /**
-   * A change from one service state to another, plus the result of the change.
-   *
-   * TODO: could this be renamed to DefaultFuture, with methods
-   *     like setResult(T) and setFailure(T) ?
-   */
-  private static class Transition implements Future<State> {
-    private final CountDownLatch done = new CountDownLatch(1);
-    private State result;
-    private Throwable failureCause;
-
-    void transitionSucceeded(State result) {
-      // guarded by AbstractService.lock
-      checkState(this.result == null);
-      this.result = result;
-      done.countDown();
-    }
-
-    void transitionFailed(Throwable cause) {
-      // guarded by AbstractService.lock
-      checkState(result == null);
-      this.result = State.FAILED;
-      this.failureCause = cause;
-      done.countDown();
-    }
-
-    public boolean cancel(boolean mayInterruptIfRunning) {
-      return false;
-    }
-
-    public boolean isCancelled() {
-      return false;
-    }
-
-    public boolean isDone() {
-      return done.getCount() == 0;
-    }
-
-    public State get() throws InterruptedException, ExecutionException {
-      done.await();
-      return getImmediately();
-    }
-
-    public State get(long timeout, TimeUnit unit)
-        throws InterruptedException, ExecutionException, TimeoutException {
-      if (done.await(timeout, unit)) {
-        return getImmediately();
-      }
-      throw new TimeoutException();
-    }
-
-    private State getImmediately() throws ExecutionException {
-      if (result == State.FAILED) {
-        throw new ExecutionException(failureCause);
-      } else {
-        return result;
-      }
-    }
-  }
-}
diff --git a/src/com/google/common/util/concurrent/Callables.java b/src/com/google/common/util/concurrent/Callables.java
deleted file mode 100644
index d12eceb..0000000
--- a/src/com/google/common/util/concurrent/Callables.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2009 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.util.concurrent;
-
-import java.util.concurrent.Callable;
-
-import javax.annotation.Nullable;
-
-/**
- * Static utility methods pertaining to the {@link Callable} interface.
- *
- * @author Isaac Shum
- * @since 2009.09.15 <b>tentative</b>
- */
-public final class Callables {
-  private Callables() {}
-
-  /**
-   * Creates a {@code Callable} which immediately returns a preset value each
-   * time it is called.
-   */
-  public static <T> Callable<T> returning(final @Nullable T value) {
-    return new Callable<T>() {
-      /*@Override*/ public T call() {
-        return value;
-      }
-    };
-  }
-}
diff --git a/src/com/google/common/util/concurrent/CheckedFuture.java b/src/com/google/common/util/concurrent/CheckedFuture.java
deleted file mode 100644
index c469230..0000000
--- a/src/com/google/common/util/concurrent/CheckedFuture.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.util.concurrent;
-
-import java.util.concurrent.CancellationException;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Future;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.TimeoutException;
-
-/**
- * A {@code CheckedFuture} is an extension of {@link Future} that includes
- * versions of the {@code get} methods that can throw a checked exception and
- * allows listeners to be attached to the future.  This makes it easier to
- * create a future that executes logic which can throw an exception.
- * 
- * <p>Implementations of this interface must adapt the exceptions thrown by
- * {@code Future#get()}: {@link CancellationException},
- * {@link ExecutionException} and {@link InterruptedException} into the type
- * specified by the {@code E} type parameter.
- * 
- * <p>This interface also extends the ListenableFuture interface to allow
- * listeners to be added. This allows the future to be used as a normal
- * {@link Future} or as an asynchronous callback mechanism as needed. This
- * allows multiple callbacks to be registered for a particular task, and the
- * future will guarantee execution of all listeners when the task completes.
- * 
- * @author Sven Mawson
- * @since 2009.09.15 <b>tentative</b>
- */
-public interface CheckedFuture<V, E extends Exception>
-    extends ListenableFuture<V> {
-
-  /**
-   * Exception checking version of {@link Future#get()} that will translate
-   * {@link InterruptedException}, {@link CancellationException} and
-   * {@link ExecutionException} into application-specific exceptions.
-   * 
-   * @return the result of executing the future.
-   * @throws E on interruption, cancellation or execution exceptions.
-   */
-  public V checkedGet() throws E;
-  
-  /**
-   * Exception checking version of {@link Future#get(long, TimeUnit)} that will
-   * translate {@link InterruptedException}, {@link CancellationException} and
-   * {@link ExecutionException} into application-specific exceptions.  On
-   * timeout this method throws a normal {@link TimeoutException}.
-   * 
-   * @return the result of executing the future.
-   * @throws TimeoutException if retrieving the result timed out.
-   * @throws E on interruption, cancellation or execution exceptions.
-   */
-  public V checkedGet(long timeout, TimeUnit unit)
-      throws TimeoutException, E;
-}
diff --git a/src/com/google/common/util/concurrent/DaemonThreadFactory.java b/src/com/google/common/util/concurrent/DaemonThreadFactory.java
deleted file mode 100644
index feccf53..0000000
--- a/src/com/google/common/util/concurrent/DaemonThreadFactory.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.util.concurrent;
-
-import com.google.common.base.Preconditions;
-
-import java.util.concurrent.ThreadFactory;
-
-/**
- * Wraps another {@link ThreadFactory}, making all new threads daemon threads.
- *
- * @author Charles Fry
- * @author Harendra Verma
- * @since 2009.09.15 <b>tentative</b>
- */
-public class DaemonThreadFactory implements ThreadFactory {
-
-  private final ThreadFactory factory;
-
-  public DaemonThreadFactory(ThreadFactory factory) {
-    Preconditions.checkNotNull(factory);
-    this.factory = factory;
-  }
-
-  public Thread newThread(Runnable r) {
-    Thread t = factory.newThread(r);
-    t.setDaemon(true);
-    return t;
-  }
-}
diff --git a/src/com/google/common/util/concurrent/ExecutionList.java b/src/com/google/common/util/concurrent/ExecutionList.java
deleted file mode 100644
index ee12164..0000000
--- a/src/com/google/common/util/concurrent/ExecutionList.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.util.concurrent;
-
-import com.google.common.base.Preconditions;
-import com.google.common.collect.Lists;
-
-import java.util.List;
-import java.util.concurrent.Executor;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * <p>A list of ({@code Runnable}, {@code Executor}) pairs that guarantees
- * that every {@code Runnable} that is added using the add method will be
- * executed in its associated {@code Executor} after {@link #run()} is called.
- * {@code Runnable}s added after {@code run} is called are still guaranteed to
- * execute.
- * 
- * @author Nishant Thakkar
- * @author Sven Mawson
- * @since 2009.09.15 <b>tentative</b>
- */
-public class ExecutionList implements Runnable {
-  
-  // Logger to log exceptions caught when running runnables.
-  private static final Logger LOG =
-      Logger.getLogger(ExecutionList.class.getName());
-
-  // The list of runnable,executor pairs to execute.  Only modified within
-  // a synchronized block.
-  private final List<RunnableExecutorPair> runnables = Lists.newArrayList();
-  
-  // Boolean we use mark when execution has started.  Only accessed from within
-  // synchronized blocks.
-  private boolean executed = false;
-
-  /**
-   * Add the runnable/executor pair to the list of pairs to execute.  Executes
-   * the pair immediately if we've already started execution.
-   */
-  public void add(Runnable runnable, Executor executor) {
-    
-    // Fail fast on a null.  We throw NPE here because the contract of
-    // Executor states that it throws NPE on null listener, so we propagate
-    // that contract up into the add method as well.
-    Preconditions.checkNotNull(runnable, "Runnable was null.");
-    Preconditions.checkNotNull(executor, "Executor was null.");
-
-    boolean executeImmediate = false;
-    
-    // Lock while we check state.  We must maintain the lock while adding the
-    // new pair so that another thread can't run the list out from under us.
-    // We only add to the list if we have not yet started execution.
-    synchronized (runnables) {
-      if (!executed) {
-        runnables.add(new RunnableExecutorPair(runnable, executor));
-      } else {
-        executeImmediate = true;
-      }
-    }
-    
-    // Execute the runnable immediately.  Because of scheduling this may end up
-    // getting called before some of the previously added runnables, but we're
-    // ok with that.  If we want to change the contract to guarantee ordering
-    // among runnables we'd have to modify the logic here to allow it.
-    if (executeImmediate) {
-      executor.execute(runnable);
-    }
-  }
-
-  /**
-   * Runs this execution list, executing all pairs in the order they were
-   * added.  Pairs added after this method has started executing the list will
-   * be executed immediately.
-   */
-  public void run() {
-    
-    // Lock while we update our state so the add method above will finish adding
-    // any listeners before we start to run them.
-    synchronized (runnables) {
-      executed = true;
-    }
-    
-    // At this point the runnable list will never be modified again, so we are
-    // safe running it outside of the synchronized block.
-    for (RunnableExecutorPair runnableAndExecutor : runnables) {
-      runnableAndExecutor.execute();
-    }
-  }
-
-  private static class RunnableExecutorPair {
-    final Runnable runnable;
-    final Executor executor;
-
-    RunnableExecutorPair(Runnable runnable, Executor executor) {
-      this.runnable = runnable;
-      this.executor = executor;
-    }
-
-    void execute() {
-      try {
-        executor.execute(runnable);
-      } catch (RuntimeException e) {
-        // Log it and keep going, bad runnable and/or executor.  Don't
-        // punish the other runnables if we're given a bad one.  We only
-        // catch RuntimeException because we want Errors to propagate up.
-        LOG.log(Level.SEVERE, "RuntimeException while executing runnable "
-            + runnable + " with executor " + executor, e);
-      }
-    }
-  }
-}
diff --git a/src/com/google/common/util/concurrent/Executors.java b/src/com/google/common/util/concurrent/Executors.java
deleted file mode 100644
index 102796b..0000000
--- a/src/com/google/common/util/concurrent/Executors.java
+++ /dev/null
@@ -1,353 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.util.concurrent;
-
-import java.util.Collections;
-import java.util.List;
-import java.util.concurrent.AbstractExecutorService;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.RejectedExecutionException;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.ScheduledThreadPoolExecutor;
-import java.util.concurrent.ThreadFactory;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.ThreadPoolExecutor.CallerRunsPolicy;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.locks.Condition;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReentrantLock;
-
-/**
- * Factory and utility methods for {@link java.util.concurrent.Executor}, {@link
- * ExecutorService}, and {@link ThreadFactory}.
- *
- * @author Eric Fellheimer
- * @author Kyle Littlefield
- * @author Justin Mahoney
- * @since 2009.09.15 <b>tentative</b>
- */
-public class Executors {
-
-  /**
-   * Converts the given ThreadPoolExecutor into an ExecutorService that exits
-   * when the application is complete.  It does so by using daemon threads and
-   * adding a shutdown hook to wait for their completion.
-   *
-   * <p>This is mainly for fixed thread pools.
-   * See {@link java.util.concurrent.Executors#newFixedThreadPool(int)}.
-   *
-   * @param executor the executor to modify to make sure it exits when the
-   *        application is finished
-   * @param terminationTimeout how long to wait for the executor to
-   *        finish before terminating the JVM
-   * @param timeUnit unit of time for the time parameter
-   * @return an unmodifiable version of the input which will not hang the JVM
-   */
-  public static ExecutorService getExitingExecutorService(
-      ThreadPoolExecutor executor, long terminationTimeout, TimeUnit timeUnit) {
-    executor.setThreadFactory(daemonThreadFactory(executor.getThreadFactory()));
-
-    ExecutorService service = java.util.concurrent.Executors
-        .unconfigurableExecutorService(executor);
-
-    addDelayedShutdownHook(service, terminationTimeout, timeUnit);
-
-    return service;
-  }
-
-  /**
-   * Converts the given ScheduledThreadPoolExecutor into a
-   * ScheduledExecutorService that exits when the application is complete.  It
-   * does so by using daemon threads and adding a shutdown hook to wait for
-   * their completion.
-   *
-   * <p>This is mainly for fixed thread pools.
-   * See {@link java.util.concurrent.Executors#newScheduledThreadPool(int)}.
-   *
-   * @param executor the executor to modify to make sure it exits when the
-   *        application is finished
-   * @param terminationTimeout how long to wait for the executor to
-   *        finish before terminating the JVM
-   * @param timeUnit unit of time for the time parameter
-   * @return an unmodifiable version of the input which will not hang the JVM
-   */
-  public static ScheduledExecutorService getExitingScheduledExecutorService(
-      ScheduledThreadPoolExecutor executor, long terminationTimeout,
-      TimeUnit timeUnit) {
-    executor.setThreadFactory(daemonThreadFactory(executor.getThreadFactory()));
-
-    ScheduledExecutorService service = java.util.concurrent.Executors
-        .unconfigurableScheduledExecutorService(executor);
-
-    addDelayedShutdownHook(service, terminationTimeout, timeUnit);
-
-    return service;
-  }
-
-  /**
-   * Add a shutdown hook to wait for thread completion in the given
-   * {@link ExecutorService service}.  This is useful if the given service uses
-   * daemon threads, and we want to keep the JVM from exiting immediately on
-   * shutdown, instead giving these daemon threads a chance to terminate
-   * normally.
-   * @param service ExecutorService which uses daemon threads
-   * @param terminationTimeout how long to wait for the executor to finish
-   *        before terminating the JVM
-   * @param timeUnit unit of time for the time parameter
-   */
-  public static void addDelayedShutdownHook(
-      final ExecutorService service, final long terminationTimeout,
-      final TimeUnit timeUnit) {
-    Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
-      public void run() {
-        try {
-          // We'd like to log progress and failures that may arise in the
-          // following code, but unfortunately the behavior of logging
-          // is undefined in shutdown hooks.
-          // This is because the logging code installs a shutdown hook of its
-          // own. See Cleaner class inside {@link LogManager}.
-          service.shutdown();
-          service.awaitTermination(terminationTimeout, timeUnit);
-        } catch (InterruptedException ignored) {
-          // We're shutting down anyway, so just ignore.
-        }
-      }
-    }));
-  }
-
-  /**
-   * Converts the given ThreadPoolExecutor into an ExecutorService that exits
-   * when the application is complete.  It does so by using daemon threads and
-   * adding a shutdown hook to wait for their completion.
-   *
-   * <p>This method waits 120 seconds before continuing with JVM termination,
-   * even if the executor has not finished its work.
-   *
-   * <p>This is mainly for fixed thread pools.
-   * See {@link java.util.concurrent.Executors#newFixedThreadPool(int)}.
-   *
-   * @param executor the executor to modify to make sure it exits when the
-   *        application is finished
-   * @return an unmodifiable version of the input which will not hang the JVM
-   */
-  public static ExecutorService getExitingExecutorService(
-      ThreadPoolExecutor executor) {
-    return getExitingExecutorService(executor, 120, TimeUnit.SECONDS);
-  }
-
-  /**
-   * Converts the given ThreadPoolExecutor into a ScheduledExecutorService that
-   * exits when the application is complete.  It does so by using daemon threads
-   * and adding a shutdown hook to wait for their completion.
-   *
-   * <p>This method waits 120 seconds before continuing with JVM termination,
-   * even if the executor has not finished its work.
-   *
-   * <p>This is mainly for fixed thread pools.
-   * See {@link java.util.concurrent.Executors#newScheduledThreadPool(int)}.
-   *
-   * @param executor the executor to modify to make sure it exits when the
-   *        application is finished
-   * @return an unmodifiable version of the input which will not hang the JVM
-   */
-  public static ScheduledExecutorService getExitingScheduledExecutorService(
-      ScheduledThreadPoolExecutor executor) {
-    return getExitingScheduledExecutorService(executor, 120, TimeUnit.SECONDS);
-  }
-
-  /**
-   * Returns a {@link ThreadFactory} which creates daemon threads. This is
-   * implemented by wrapping {@link
-   * java.util.concurrent.Executors#defaultThreadFactory()}, marking all new
-   * threads as daemon threads
-   *
-   * @return a {@link ThreadFactory} which creates daemon threads
-   */
-  public static ThreadFactory daemonThreadFactory() {
-    return daemonThreadFactory(
-        java.util.concurrent.Executors.defaultThreadFactory());
-  }
-
-  /**
-   * Wraps another {@link ThreadFactory}, making all new threads daemon threads.
-   *
-   * @param factory the {@link ThreadFactory} used to generate new threads
-   * @return a new {@link ThreadFactory} backed by {@code factory} whose created
-   *         threads are all daemon threads
-   */
-  public static ThreadFactory daemonThreadFactory(ThreadFactory factory) {
-    return new DaemonThreadFactory(factory);
-  }
-
-  /**
-   * Creates an executor service that runs each task in the thread
-   * that invokes {@code execute/submit}, as in {@link CallerRunsPolicy}  This
-   * applies both to individually submitted tasks and to collections of tasks
-   * submitted via {@code invokeAll} or {@code invokeAny}.  In the latter case,
-   * tasks will run serially on the calling thread.  Tasks are run to
-   * completion before a {@code Future} is returned to the caller (unless the
-   * executor has been shutdown).
-   *
-   * <p>Although all tasks are immediately executed in the thread that
-   * submitted the task, this {@code ExecutorService} imposes a small
-   * locking overhead on each task submission in order to implement shutdown
-   * and termination behavior.
-   *
-   * <p>The implementation deviates from the {@code ExecutorService}
-   * specification with regards to the {@code shutdownNow} method.  First,
-   * "best-effort" with regards to canceling running tasks is implemented
-   * as "no-effort".  No interrupts or other attempts are made to stop
-   * threads executing tasks.  Second, the returned list will always be empty,
-   * as any submitted task is considered to have started execution.
-   * This applies also to tasks given to {@code invokeAll} or {@code invokeAny}
-   * which are pending serial execution, even the subset of the tasks that
-   * have not yet started execution.  It is unclear from the
-   * {@code ExecutorService} specification if these should be included, and
-   * it's much easier to implement the interpretation that they not be.
-   * Finally, a call to {@code shutdown} or {@code shutdownNow} may result
-   * in concurrent calls to {@code invokeAll/invokeAny} throwing
-   * RejectedExecutionException, although a subset of the tasks may already
-   * have been executed.
-   */
-  public static ExecutorService sameThreadExecutor() {
-    return new SameThreadExecutorService();
-  }
-
-  // See sameThreadExecutor javadoc for behavioral notes.
-  private static class SameThreadExecutorService extends AbstractExecutorService {
-
-    /**
-     * Lock used whenever accessing the state variables
-     * (runningTasks, shutdown, terminationCondition) of the executor
-     */
-    private final Lock lock = new ReentrantLock();
-
-    /** Signaled after the executor is shutdown and running tasks are done */
-    private final Condition termination = lock.newCondition();
-
-    /*
-     * Conceptually, these two variables describe the executor being in
-     * one of three states:
-     *   - Active: shutdown == false
-     *   - Shutdown: runningTasks > 0 and shutdown == true
-     *   - Terminated: runningTasks == 0 and shutdown == true
-     */
-    private int runningTasks = 0;
-    private boolean shutdown = false;
-
-    /*@Override*/
-    public void execute(Runnable command) {
-      startTask();
-      try {
-        command.run();
-      } finally {
-        endTask();
-      }
-    }
-
-    /*@Override*/
-    public boolean isShutdown() {
-      lock.lock();
-      try {
-        return shutdown;
-      } finally {
-        lock.unlock();
-      }
-    }
-
-    /*@Override*/
-    public void shutdown() {
-      lock.lock();
-      try {
-        shutdown = true;
-      } finally {
-        lock.unlock();
-      }
-    }
-
-    // See sameThreadExecutor javadoc for unusual behavior of this method.
-    /*@Override*/
-    public List<Runnable> shutdownNow() {
-      shutdown();
-      return Collections.emptyList();
-    }
-
-    /*@Override*/
-    public boolean isTerminated() {
-      lock.lock();
-      try {
-        return shutdown && runningTasks == 0;
-      } finally {
-        lock.unlock();
-      }
-    }
-
-    /*@Override*/
-    public boolean awaitTermination(long timeout, TimeUnit unit)
-        throws InterruptedException {
-      long nanos = unit.toNanos(timeout);
-      lock.lock();
-      try {
-        for (;;) {
-          if (isTerminated()) {
-            return true;
-          } else if (nanos <= 0) {
-            return false;
-          } else {
-            nanos = termination.awaitNanos(nanos);
-          }
-        }
-      } finally {
-        lock.unlock();
-      }
-    }
-
-    /**
-     * Checks if the executor has been shut down and increments the running
-     * task count.
-     *
-     * @throws RejectedExecutionException if the executor has been previously
-     *         shutdown
-     */
-    private void startTask() {
-      lock.lock();
-      try {
-        if (isShutdown()) {
-          throw new RejectedExecutionException("Executor already shutdown");
-        }
-        runningTasks++;
-      } finally {
-        lock.unlock();
-      }
-    }
-
-    /**
-     * Decrements the running task count.
-     */
-    private void endTask() {
-      lock.lock();
-      try {
-        runningTasks--;
-        if (isTerminated()) {
-          termination.signalAll();
-        }
-      } finally {
-        lock.unlock();
-      }
-    }
-  }
-}
diff --git a/src/com/google/common/util/concurrent/FakeTimeLimiter.java b/src/com/google/common/util/concurrent/FakeTimeLimiter.java
deleted file mode 100644
index 8122e5f..0000000
--- a/src/com/google/common/util/concurrent/FakeTimeLimiter.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2006 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.util.concurrent;
-
-import java.util.concurrent.Callable;
-import java.util.concurrent.TimeUnit;
-
-/**
- * A TimeLimiter implementation which actually does not attempt to limit time
- * at all.  This may be desirable to use in some unit tests.  More importantly,
- * attempting to debug a call which is time-limited would be extremely annoying,
- * so this gives you a time-limiter you can easily swap in for your real
- * time-limiter while you're debugging.
- *
- * @author Kevin Bourrillion
- * @since 2009.09.15 <b>tentative</b>
- */
-public class FakeTimeLimiter implements TimeLimiter {
-  public <T> T newProxy(T target, Class<T> interfaceType, long timeoutDuration,
-      TimeUnit timeoutUnit) {
-    return target; // ha ha
-  }
-
-  public <T> T callWithTimeout(Callable<T> callable, long timeoutDuration,
-      TimeUnit timeoutUnit, boolean amInterruptible) throws Exception {
-    return callable.call(); // fooled you
-  }
-}
diff --git a/src/com/google/common/util/concurrent/ForwardingFuture.java b/src/com/google/common/util/concurrent/ForwardingFuture.java
deleted file mode 100644
index f778915..0000000
--- a/src/com/google/common/util/concurrent/ForwardingFuture.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (C) 2009 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.util.concurrent;
-
-import com.google.common.collect.ForwardingObject;
-
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Future;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.TimeoutException;
-
-/**
- * A {@link Future} which forwards all its method calls to another future.
- * Subclasses should override one or more methods to modify the behavior of
- * the backing collection as desired per the <a
- * href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
- *
- * @see ForwardingObject
- * @author Sven Mawson
- * @since 2009.09.15 <b>tentative</b>
- */
-public abstract class ForwardingFuture<V> extends ForwardingObject
-    implements Future<V> {
-
-  @Override protected abstract Future<V> delegate();
-
-  /*@Override*/
-  public boolean cancel(boolean mayInterruptIfRunning) {
-    return delegate().cancel(mayInterruptIfRunning);
-  }
-
-  /*@Override*/
-  public boolean isCancelled() {
-    return delegate().isCancelled();
-  }
-
-  /*@Override*/
-  public boolean isDone() {
-    return delegate().isDone();
-  }
-
-  /*@Override*/
-  public V get() throws InterruptedException, ExecutionException {
-    return delegate().get();
-  }
-
-  /*@Override*/
-  public V get(long timeout, TimeUnit unit)
-      throws InterruptedException, ExecutionException, TimeoutException {
-    return delegate().get(timeout, unit);
-  }
-}
diff --git a/src/com/google/common/util/concurrent/ForwardingService.java b/src/com/google/common/util/concurrent/ForwardingService.java
deleted file mode 100644
index e56b4e6..0000000
--- a/src/com/google/common/util/concurrent/ForwardingService.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (C) 2009 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.util.concurrent;
-
-import com.google.common.base.Service;
-import com.google.common.collect.ForwardingObject;
-
-import java.util.concurrent.Future;
-
-/**
- * A {@link Service} that forwards all method calls to another service.
- *
- * @author Chris Nokleberg
- * @since 2009.09.15 <b>tentative</b>
- */
-public abstract class ForwardingService extends ForwardingObject
-    implements Service {
-
-  @Override protected abstract Service delegate();
-
-  /*@Override*/ public Future<State> start() {
-    return delegate().start();
-  }
-
-  /*@Override*/ public State state() {
-    return delegate().state();
-  }
-
-  /*@Override*/ public Future<State> stop() {
-    return delegate().stop();
-  }
-
-  /*@Override*/ public State startAndWait() {
-    return delegate().startAndWait();
-  }
-
-  /*@Override*/ public State stopAndWait() {
-    return delegate().stopAndWait();
-  }
-
-  /*@Override*/ public boolean isRunning() {
-    return delegate().isRunning();
-  }
-}
diff --git a/src/com/google/common/util/concurrent/Futures.java b/src/com/google/common/util/concurrent/Futures.java
deleted file mode 100644
index 0d24962..0000000
--- a/src/com/google/common/util/concurrent/Futures.java
+++ /dev/null
@@ -1,565 +0,0 @@
-/*
- * Copyright (C) 2006 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.util.concurrent;
-
-import com.google.common.base.Function;
-
-import java.lang.reflect.UndeclaredThrowableException;
-import java.util.concurrent.CancellationException;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Executor;
-import java.util.concurrent.Future;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.TimeoutException;
-import java.util.concurrent.atomic.AtomicBoolean;
-
-import javax.annotation.Nullable;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-/**
- * Static utility methods pertaining to the {@link Future} interface.
- *
- * @author Kevin Bourrillion
- * @author Nishant Thakkar
- * @author Sven Mawson
- * @since 2009.09.15 <b>tentative</b>
- */
-public class Futures {
-  private Futures() {}
-
-  /**
-   * Returns an uninterruptible view of a {@code Future}. If a thread is
-   * interrupted during an attempt to {@code get()} from the returned future, it
-   * continues to wait on the result until it is available or the timeout
-   * elapses, and only then re-interrupts the thread.
-   */
-  public static <V> UninterruptibleFuture<V> makeUninterruptible(
-      final Future<V> future) {
-    checkNotNull(future);
-    if (future instanceof UninterruptibleFuture) {
-      return (UninterruptibleFuture<V>) future;
-    }
-    return new UninterruptibleFuture<V>() {
-      public boolean cancel(boolean mayInterruptIfRunning) {
-        return future.cancel(mayInterruptIfRunning);
-      }
-      public boolean isCancelled() {
-        return future.isCancelled();
-      }
-      public boolean isDone() {
-        return future.isDone();
-      }
-
-      public V get(long timeoutDuration, TimeUnit timeoutUnit)
-          throws TimeoutException, ExecutionException {
-        boolean interrupted = false;
-        try {
-          long timeoutNanos = timeoutUnit.toNanos(timeoutDuration);
-          long end = System.nanoTime() + timeoutNanos;
-          for (long remaining = timeoutNanos; remaining > 0;
-              remaining = end - System.nanoTime()) {
-            try {
-              return future.get(remaining, TimeUnit.NANOSECONDS);
-            } catch (InterruptedException ignored) {
-              interrupted = true;
-            }
-          }
-          throw new TimeoutException();
-        } finally {
-          if (interrupted) {
-            Thread.currentThread().interrupt();
-          }
-        }
-      }
-
-      public V get() throws ExecutionException {
-        boolean interrupted = false;
-        try {
-          while (true) {
-            try {
-              return future.get();
-            } catch (InterruptedException ignored) {
-              interrupted = true;
-            }
-          }
-        } finally {
-          if (interrupted) {
-            Thread.currentThread().interrupt();
-          }
-        }
-      }
-    };
-  }
-
-  /**
-   * Creates a {@link ListenableFuture} out of a normal {@link Future}. The
-   * returned future will create a thread to wait for the source future to
-   * complete before executing the listeners.
-   *
-   * <p>Callers who have a future that subclasses
-   * {@link java.util.concurrent.FutureTask} may want to instead subclass
-   * {@link ListenableFutureTask}, which adds the {@link ListenableFuture}
-   * functionality to the standard {@code FutureTask} implementation.
-   */
-  public static <T> ListenableFuture<T> makeListenable(Future<T> future) {
-    if (future instanceof ListenableFuture) {
-      return (ListenableFuture<T>) future;
-    }
-    return new ListenableFutureAdapter<T>(future);
-  }
-
-  /**
-   * Creates a {@link CheckedFuture} out of a normal {@link Future} and a
-   * {@link Function} that maps from {@link Exception} instances into the
-   * appropriate checked type.
-   *
-   * <p>The given mapping function will be applied to an
-   * {@link InterruptedException}, a {@link CancellationException}, or an
-   * {@link ExecutionException} with the actual cause of the exception.
-   * See {@link Future#get()} for details on the exceptions thrown.
-   */
-  public static <T, E extends Exception> CheckedFuture<T, E> makeChecked(
-      Future<T> future, Function<Exception, E> mapper) {
-    return new MappingCheckedFuture<T, E>(makeListenable(future), mapper);
-  }
-
-  /**
-   * Creates a {@code ListenableFuture} which has its value set immediately upon
-   * construction. The getters just return the value. This {@code Future} can't
-   * be canceled or timed out and its {@code isDone()} method always returns
-   * {@code true}. It's useful for returning something that implements the
-   * {@code ListenableFuture} interface but already has the result.
-   */
-  public static <T> ListenableFuture<T> immediateFuture(@Nullable T value) {
-    ValueFuture<T> future = ValueFuture.create();
-    future.set(value);
-    return future;
-  }
-
-  /**
-   * Creates a {@code CheckedFuture} which has its value set immediately upon
-   * construction. The getters just return the value. This {@code Future} can't
-   * be canceled or timed out and its {@code isDone()} method always returns
-   * {@code true}. It's useful for returning something that implements the
-   * {@code CheckedFuture} interface but already has the result.
-   */
-  public static <T, E extends Exception> CheckedFuture<T, E>
-      immediateCheckedFuture(@Nullable T value) {
-    ValueFuture<T> future = ValueFuture.create();
-    future.set(value);
-    return Futures.makeChecked(future, new Function<Exception, E>() {
-      public E apply(Exception e) {
-        throw new AssertionError("impossible");
-      }
-    });
-  }
-
-  /**
-   * Creates a {@code ListenableFuture} which has an exception set immediately
-   * upon construction. The getters just return the value. This {@code Future}
-   * can't be canceled or timed out and its {@code isDone()} method always
-   * returns {@code true}. It's useful for returning something that implements
-   * the {@code ListenableFuture} interface but already has a failed
-   * result. Calling {@code get()} will throw the provided {@code Throwable}
-   * (wrapped in an {@code ExecutionException}).
-   *
-   * @throws Error if the throwable was an {@link Error}.
-   */
-  public static <T> ListenableFuture<T> immediateFailedFuture(
-      Throwable throwable) {
-    checkNotNull(throwable);
-    ValueFuture<T> future = ValueFuture.create();
-    future.setException(throwable);
-    return future;
-  }
-
-  /**
-   * Creates a {@code CheckedFuture} which has an exception set immediately
-   * upon construction. The getters just return the value. This {@code Future}
-   * can't be canceled or timed out and its {@code isDone()} method always
-   * returns {@code true}. It's useful for returning something that implements
-   * the {@code CheckedFuture} interface but already has a failed result.
-   * Calling {@code get()} will throw the provided {@code Throwable} (wrapped in
-   * an {@code ExecutionException}) and calling {@code checkedGet()} will throw
-   * the provided exception itself.
-   *
-   * @throws Error if the throwable was an {@link Error}.
-   */
-  public static <T, E extends Exception> CheckedFuture<T, E>
-      immediateFailedCheckedFuture(final E exception) {
-    checkNotNull(exception);
-    return makeChecked(Futures.<T>immediateFailedFuture(exception),
-        new Function<Exception, E>() {
-          public E apply(Exception e) {
-            return exception;
-          }
-        });
-  }
-
-  /**
-   * Creates a new {@code ListenableFuture} that wraps another
-   * {@code ListenableFuture}.  The result of the new future is the result of
-   * the provided function called on the result of the provided future.
-   * The resulting future doesn't interrupt when aborted.
-   *
-   * <p>TODO: Add a version that accepts a normal {@code Future}
-   *
-   * <p>The typical use for this method would be when a RPC call is dependent on
-   * the results of another RPC.  One would call the first RPC (input), create a
-   * function that calls another RPC based on input's result, and then call
-   * chain on input and that function to get a {@code ListenableFuture} of
-   * the result.
-   *
-   * @param input The future to chain
-   * @param function A function to chain the results of the provided future
-   *     to the results of the returned future.  This will be run in the thread
-   *     that notifies input it is complete.
-   * @return A future that holds result of the chain.
-   */
-  public static <I, O> ListenableFuture<O> chain(ListenableFuture<I> input,
-      Function<? super I, ? extends ListenableFuture<? extends O>> function) {
-    return chain(input, function, Executors.sameThreadExecutor());
-  }
-
-  /**
-   * Creates a new {@code ListenableFuture} that wraps another
-   * {@code ListenableFuture}.  The result of the new future is the result of
-   * the provided function called on the result of the provided future.
-   * The resulting future doesn't interrupt when aborted.
-   *
-   * <p>This version allows an arbitrary executor to be passed in for running
-   * the chained Function. When using {@link Executors#sameThreadExecutor}, the
-   * thread chained Function executes in will be whichever thread set the
-   * result of the input Future, which may be the network thread in the case of
-   * RPC-based Futures.
-   *
-   * @param input The future to chain
-   * @param function A function to chain the results of the provided future
-   *     to the results of the returned future.
-   * @param exec Executor to run the function in.
-   * @return A future that holds result of the chain.
-   */
-  public static <I, O> ListenableFuture<O> chain(ListenableFuture<I> input,
-      Function<? super I, ? extends ListenableFuture<? extends O>> function,
-      Executor exec) {
-    ChainingListenableFuture<I, O> chain =
-        new ChainingListenableFuture<I, O>(function, input);
-    input.addListener(chain, exec);
-    return chain;
-  }
-
-  /**
-   * Creates a new {@code ListenableFuture} that wraps another
-   * {@code ListenableFuture}.  The result of the new future is the result of
-   * the provided function called on the result of the provided future.
-   * The resulting future doesn't interrupt when aborted.
-   *
-   * <p>An example use of this method is to convert a serializable object
-   * returned from an RPC into a POJO.
-   *
-   * @param future The future to compose
-   * @param function A Function to compose the results of the provided future
-   *     to the results of the returned future.  This will be run in the thread
-   *     that notifies input it is complete.
-   * @return A future that holds result of the composition.
-   */
-  public static <I, O> ListenableFuture<O> compose(ListenableFuture<I> future,
-      final Function<? super I, ? extends O> function) {
-    return compose(future, function, Executors.sameThreadExecutor());
-  }
-
-  /**
-   * Creates a new {@code ListenableFuture} that wraps another
-   * {@code ListenableFuture}.  The result of the new future is the result of
-   * the provided function called on the result of the provided future.
-   * The resulting future doesn't interrupt when aborted.
-   *
-   * <p>An example use of this method is to convert a serializable object
-   * returned from an RPC into a POJO.
-   *
-   * <p>This version allows an arbitrary executor to be passed in for running
-   * the chained Function. When using {@link Executors#sameThreadExecutor}, the
-   * thread chained Function executes in will be whichever thread set the result
-   * of the input Future, which may be the network thread in the case of
-   * RPC-based Futures.
-   *
-   * @param future The future to compose
-   * @param function A Function to compose the results of the provided future
-   *     to the results of the returned future.
-   * @param exec Executor to run the function in.
-   * @return A future that holds result of the composition.
-   * @since 2010.01.04 <b>tentative</b>
-   */
-  public static <I, O> ListenableFuture<O> compose(ListenableFuture<I> future,
-      final Function<? super I, ? extends O> function, Executor exec) {
-    Function<I, ListenableFuture<O>> wrapperFunction
-        = new Function<I, ListenableFuture<O>>() {
-            /*@Override*/ public ListenableFuture<O> apply(I input) {
-              O output = function.apply(input);
-              return immediateFuture(output);
-            }
-        };
-    return chain(future, wrapperFunction, exec);
-  }
-
-  /**
-   * Creates a new {@code Future} that wraps another {@code Future}.
-   * The result of the new future is the result of the provided function called
-   * on the result of the provided future.
-   *
-   * <p>An example use of this method is to convert a Future that produces a
-   * handle to an object to a future that produces the object itself.
-   *
-   * <p>Each call to {@code Future<O>.get(*)} results in a call to
-   * {@code Future<I>.get(*)}, but {@code function} is only applied once, so it
-   * is assumed that {@code Future<I>.get(*)} is idempotent.
-   *
-   * <p>When calling {@link Future#get(long, TimeUnit)} on the returned
-   * future, the timeout only applies to the future passed in to this method.
-   * Any additional time taken by applying {@code function} is not considered.
-   *
-   * @param future The future to compose
-   * @param function A Function to compose the results of the provided future
-   *     to the results of the returned future.  This will be run in the thread
-   *     that calls one of the varieties of {@code get()}.
-   * @return A future that computes result of the composition.
-   */
-  public static <I, O> Future<O> compose(final Future<I> future,
-      final Function<? super I, ? extends O> function) {
-
-    return new Future<O>() {
-
-      /*
-       * Concurrency detail:
-       *
-       * <p>To preserve the idempotency of calls to this.get(*) calls to the
-       * function are only applied once. A lock is required to prevent multiple
-       * applications of the function. The calls to future.get(*) are performed
-       * outside the lock, as is required to prevent calls to
-       * get(long, TimeUnit) to persist beyond their timeout.
-       *
-       * <p>Calls to future.get(*) on every call to this.get(*) also provide
-       * the cancellation behavior for this.
-       *
-       * <p>(Consider: in thread A, call get(), in thread B call get(long,
-       * TimeUnit). Thread B may have to wait for Thread A to finish, which
-       * would be unacceptable.)
-       *
-       * <p>Note that each call to Future<O>.get(*) results in a call to
-       * Future<I>.get(*), but the function is only applied once, so
-       * Future<I>.get(*) is assumed to be idempotent.
-       */
-
-      private final Object lock = new Object();
-      private boolean set = false;
-      private O value = null;
-
-      /*@Override*/
-      public O get() throws InterruptedException, ExecutionException {
-        return apply(future.get());
-      }
-
-      /*@Override*/
-      public O get(long timeout, TimeUnit unit) throws InterruptedException,
-          ExecutionException, TimeoutException {
-        return apply(future.get(timeout, unit));
-      }
-
-      private O apply(I raw) {
-        synchronized(lock) {
-          if (!set) {
-            value = function.apply(raw);
-            set = true;
-          }
-          return value;
-        }
-      }
-
-      /*@Override*/
-      public boolean cancel(boolean mayInterruptIfRunning) {
-        return future.cancel(mayInterruptIfRunning);
-      }
-
-      /*@Override*/
-      public boolean isCancelled() {
-        return future.isCancelled();
-      }
-
-      /*@Override*/
-      public boolean isDone() {
-        return future.isDone();
-      }
-    };
-  }
-
-  /**
-   * An implementation of {@code ListenableFuture} that also implements
-   * {@code Runnable} so that it can be used to nest ListenableFutures.
-   * Once the passed-in {@code ListenableFuture} is complete, it calls the
-   * passed-in {@code Function} to generate the result.
-   * The resulting future doesn't interrupt when aborted.
-   *
-   * <p>If the function throws any checked exceptions, they should be wrapped
-   * in a {@code UndeclaredThrowableException} so that this class can get
-   * access to the cause.
-   */
-  private static class ChainingListenableFuture<I, O>
-      extends AbstractListenableFuture<O> implements Runnable {
-
-    private final Function<? super I, ? extends ListenableFuture<? extends O>>
-        function;
-    private final UninterruptibleFuture<? extends I> inputFuture;
-
-    private ChainingListenableFuture(
-        Function<? super I, ? extends ListenableFuture<? extends O>> function,
-        ListenableFuture<? extends I> inputFuture) {
-      this.function = function;
-      this.inputFuture = makeUninterruptible(inputFuture);
-    }
-
-    public void run() {
-      try {
-        I sourceResult;
-        try {
-          sourceResult = inputFuture.get();
-        } catch (CancellationException e) {
-          // Cancel this future and return.
-          cancel();
-          return;
-        } catch (ExecutionException e) {
-          // Set the cause of the exception as this future's exception
-          setException(e.getCause());
-          return;
-        }
-
-        final ListenableFuture<? extends O> outputFuture =
-            function.apply(sourceResult);
-        outputFuture.addListener(new Runnable() {
-            public void run() {
-              try {
-                // Here it would have been nice to have had an
-                // UninterruptibleListenableFuture, but we don't want to start a
-                // combinatorial explosion of interfaces, so we have to make do.
-                set(makeUninterruptible(outputFuture).get());
-              } catch (ExecutionException e) {
-                // Set the cause of the exception as this future's exception
-                setException(e.getCause());
-              }
-            }
-          }, Executors.sameThreadExecutor());
-      } catch (UndeclaredThrowableException e) {
-        // Set the cause of the exception as this future's exception
-        setException(e.getCause());
-      } catch (RuntimeException e) {
-        // This exception is irrelevant in this thread, but useful for the
-        // client
-        setException(e);
-      } catch (Error e) {
-        // This seems evil, but the client needs to know an error occured and
-        // the error needs to be propagated ASAP.
-        setException(e);
-        throw e;
-      }
-    }
-  }
-
-  /**
-   * A checked future that uses a function to map from exceptions to the
-   * appropriate checked type.
-   */
-  private static class MappingCheckedFuture<T, E extends Exception> extends
-      AbstractCheckedFuture<T, E> {
-
-    final Function<Exception, E> mapper;
-
-    MappingCheckedFuture(ListenableFuture<T> delegate,
-        Function<Exception, E> mapper) {
-      super(delegate);
-
-      this.mapper = mapper;
-    }
-
-    @Override
-    protected E mapException(Exception e) {
-      return mapper.apply(e);
-    }
-  }
-
-  /**
-   * An adapter to turn a {@link Future} into a {@link ListenableFuture}.  This
-   * will wait on the future to finish, and when it completes, run the
-   * listeners.  This implementation will wait on the source future
-   * indefinitely, so if the source future never completes, the adapter will
-   * never complete either.
-   *
-   * <p>If the delegate future is interrupted or throws an unexpected unchecked
-   * exception, the listeners will not be invoked.
-   */
-  private static class ListenableFutureAdapter<T> extends ForwardingFuture<T>
-      implements ListenableFuture<T> {
-
-    private static final Executor adapterExecutor =
-        java.util.concurrent.Executors.newCachedThreadPool();
-
-    // The execution list to hold our listeners.
-    private final ExecutionList executionList = new ExecutionList();
-
-    // This allows us to only start up a thread waiting on the delegate future
-    // when the first listener is added.
-    private final AtomicBoolean hasListeners = new AtomicBoolean(false);
-
-    // The delegate future.
-    private final Future<T> delegate;
-
-    ListenableFutureAdapter(final Future<T> delegate) {
-      this.delegate = delegate;
-    }
-
-    @Override
-    protected Future<T> delegate() {
-      return delegate;
-    }
-
-    /*@Override*/
-    public void addListener(Runnable listener, Executor exec) {
-
-      // When a listener is first added, we run a task that will wait for
-      // the delegate to finish, and when it is done will run the listeners.
-      if (!hasListeners.get() && hasListeners.compareAndSet(false, true)) {
-        adapterExecutor.execute(new Runnable() {
-          /*@Override*/
-          public void run() {
-            try {
-              delegate.get();
-            } catch (CancellationException e) {
-              // The task was cancelled, so it is done, run the listeners.
-            } catch (InterruptedException e) {
-              // This thread was interrupted.  This should never happen, so we
-              // throw an IllegalStateException.
-              throw new IllegalStateException("Adapter thread interrupted!", e);
-            } catch (ExecutionException e) {
-              // The task caused an exception, so it is done, run the listeners.
-            }
-            executionList.run();
-          }
-        });
-      }
-      executionList.add(listener, exec);
-    }
-  }
-}
diff --git a/src/com/google/common/util/concurrent/ListenableFuture.java b/src/com/google/common/util/concurrent/ListenableFuture.java
deleted file mode 100644
index 9a6c476..0000000
--- a/src/com/google/common/util/concurrent/ListenableFuture.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (C) 2007 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.util.concurrent;
-
-import java.util.concurrent.Executor;
-import java.util.concurrent.Future;
-import java.util.concurrent.RejectedExecutionException;
-
-/**
- * <p>This interface defines a future that has listeners attached to it, which
- * is useful for asynchronous workflows.  Each listener has an associated
- * executor, and is invoked using this executor once the {@code Future}'s
- * computation is {@linkplain Future#isDone() complete}.  The listener will be
- * executed even if it is added after the computation is complete.
- *
- * <p>Usage:
- * <pre>   {@code
- *   final ListenableFuture<?> future = myService.async(myRequest);
- *   future.addListener(new Runnable() {
- *     public void run() {
- *       System.out.println("Operation Complete.");
- *       try {
- *         System.out.println("Result: " + future.get());
- *       } catch (Exception e) {
- *         System.out.println("Error: " + e.message());
- *       }
- *     }
- *   }, exec);}</pre>
- *
- * @author Sven Mawson
- * @author Nishant Thakkar
- * @since 2009.09.15 <b>tentative</b>
- */
-public interface ListenableFuture<V> extends Future<V> {
-
-  /**
-   * <p>Adds a listener and executor to the ListenableFuture.
-   * The listener will be {@linkplain Executor#execute(Runnable) passed
-   * to the executor} for execution when the {@code Future}'s computation is
-   * {@linkplain Future#isDone() complete}.
-   *
-   * <p>There is no guaranteed ordering of execution of listeners, they may get
-   * called in the order they were added and they may get called out of order,
-   * but any listener added through this method is guaranteed to be called once
-   * the computation is complete.
-   *
-   * @param listener the listener to run when the computation is complete.
-   * @param exec the executor to run the listener in.
-   * @throws NullPointerException if the executor or listener was null.
-   * @throws RejectedExecutionException if we tried to execute the listener
-   * immediately but the executor rejected it.
-   */
-  public void addListener(Runnable listener, Executor exec);
-}
diff --git a/src/com/google/common/util/concurrent/ListenableFutureTask.java b/src/com/google/common/util/concurrent/ListenableFutureTask.java
deleted file mode 100644
index 8b4db64..0000000
--- a/src/com/google/common/util/concurrent/ListenableFutureTask.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (C) 2008 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.util.concurrent;
-
-import java.util.concurrent.Callable;
-import java.util.concurrent.Executor;
-import java.util.concurrent.FutureTask;
-
-/**
- * A {@link FutureTask} that also implements the {@link ListenableFuture}
- * interface.  Subclasses must make sure to call {@code super.done()} if they
- * also override the {@link #done()} method, otherwise the listeners will not
- * be called.
- * 
- * @author Sven Mawson
- * @since 2009.09.15 <b>tentative</b>
- */
-public class ListenableFutureTask<V> extends FutureTask<V>
-    implements ListenableFuture<V> {
-
-  // The execution list to hold our listeners.
-  private final ExecutionList executionList = new ExecutionList();
-  
-  /**
-   * Creates a {@code ListenableFutureTask} that will upon running, execute the
-   * given {@code Callable}.
-   *
-   * @param  callable the callable task
-   * @throws NullPointerException if callable is null
-   */
-  public ListenableFutureTask(Callable<V> callable) {
-    super(callable);
-  }
-
-  /**
-   * Creates a {@code ListenableFutureTask} that will upon running, execute the
-   * given {@code Runnable}, and arrange that {@code get} will return the
-   * given result on successful completion.
-   *
-   * @param  runnable the runnable task
-   * @param result the result to return on successful completion. If
-   * you don't need a particular result, consider using
-   * constructions of the form:
-   * {@code ListenableFuture<?> f =
-   *     new ListenableFutureTask<Object>(runnable, null)}
-   * @throws NullPointerException if runnable is null
-   */
-  public ListenableFutureTask(Runnable runnable, V result) {
-    super(runnable, result);
-  }
-
-  public void addListener(Runnable listener, Executor exec) {
-    executionList.add(listener, exec);
-  }
-  
-  @Override
-  protected void done() {
-    executionList.run();
-  }
-}
diff --git a/src/com/google/common/util/concurrent/NamingThreadFactory.java b/src/com/google/common/util/concurrent/NamingThreadFactory.java
deleted file mode 100644
index e51bdbc..0000000
--- a/src/com/google/common/util/concurrent/NamingThreadFactory.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright (C) 2006 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.util.concurrent;
-
-import java.util.concurrent.Executors;
-import java.util.concurrent.ThreadFactory;
-import java.util.concurrent.atomic.AtomicInteger;
-
-/**
- * A ThreadFactory which decorates another ThreadFactory to set a name on
- * each thread created.
- *
- * @author Kevin Bourrillion
- * @since 2009.09.15 <b>tentative</b>
- */
-public class NamingThreadFactory implements ThreadFactory {
-  private final ThreadFactory backingFactory;
-  private final String format;
-  private final AtomicInteger count = new AtomicInteger(0);
-
-  public static final ThreadFactory DEFAULT_FACTORY
-      = Executors.defaultThreadFactory();
-
-  /**
-   * Creates a new factory that delegates to the default thread factory for
-   * thread creation, then uses {@code format} to construct a name for the new
-   * thread.
-   *
-   * @param format a {@link String#format(String, Object...)}-compatible format
-   *     String, to which a unique integer (0, 1, etc.) will be supplied as the
-   *     single parameter. This integer will be unique to this instance of
-   *     NamingThreadFactory and will be assigned sequentially.
-   */
-  public NamingThreadFactory(String format) {
-    this(format, DEFAULT_FACTORY);
-  }
-
-  /**
-   * Creates a new factory that delegates to {@code backingFactory} for thread
-   * creation, then uses {@code format} to construct a name for the new thread.
-   *
-   * @param format a {@link String#format(String, Object...)}-compatible format
-   *     String, to which a unique integer (0, 1, etc.) will be supplied as the
-   *     single parameter
-   * @param backingFactory the factory that will actually create the threads
-   * @throws java.util.IllegalFormatException if {@code format} is invalid
-   */
-  public NamingThreadFactory(String format, ThreadFactory backingFactory) {
-    this.format = format;
-    this.backingFactory = backingFactory;
-    makeName(0); // fail fast if format is bad
-  }
-
-  public Thread newThread(Runnable r) {
-    Thread t = backingFactory.newThread(r);
-    t.setName(makeName(count.getAndIncrement()));
-    return t;
-  }
-
-  private String makeName(int ordinal) {
-    return String.format(format, ordinal);
-  }
-}
diff --git a/src/com/google/common/util/concurrent/SimpleTimeLimiter.java b/src/com/google/common/util/concurrent/SimpleTimeLimiter.java
deleted file mode 100644
index bed5022..0000000
--- a/src/com/google/common/util/concurrent/SimpleTimeLimiter.java
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * Copyright (C) 2006 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.util.concurrent;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
-import com.google.common.base.Throwables;
-import com.google.common.collect.Sets;
-
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Proxy;
-import java.util.Set;
-import java.util.concurrent.Callable;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.TimeoutException;
-
-/**
- * A TimeLimiter that runs method calls in the background using an
- * {@link ExecutorService}.  If the time limit expires for a given method call,
- * the thread running the call will be interrupted.
- *
- * @author Kevin Bourrillion
- * @since 2009.09.15 <b>tentative</b>
- */
-public class SimpleTimeLimiter implements TimeLimiter {
-
-  private final ExecutorService executor;
-
-  /**
-   * Constructs a TimeLimiter instance using the given executor service to
-   * execute proxied method calls.
-   * <p>
-   * <b>Warning:</b> using a bounded executor
-   * may be counterproductive!  If the thread pool fills up, any time callers
-   * spend waiting for a thread may count toward their time limit, and in
-   * this case the call may even time out before the target method is ever
-   * invoked.
-   *
-   * @param executor the ExecutorService that will execute the method calls on
-   *     the target objects; for example, a {@link
-   *     java.util.concurrent.Executors#newCachedThreadPool()}.
-   */
-  public SimpleTimeLimiter(ExecutorService executor) {
-    checkNotNull(executor);
-    this.executor = executor;
-  }
-
-  /**
-   * Constructs a TimeLimiter instance using a {@link
-   * java.util.concurrent.Executors#newCachedThreadPool()} to execute proxied
-   * method calls.
-   *
-   * <p><b>Warning:</b> using a bounded executor may be counterproductive! If
-   * the thread pool fills up, any time callers spend waiting for a thread may
-   * count toward their time limit, and in this case the call may even time out
-   * before the target method is ever invoked.
-   */
-  public SimpleTimeLimiter() {
-    this(Executors.newCachedThreadPool());
-  }
-
-  public <T> T newProxy(final T target, Class<T> interfaceType,
-      final long timeoutDuration, final TimeUnit timeoutUnit) {
-    checkNotNull(target);
-    checkNotNull(interfaceType);
-    checkNotNull(timeoutUnit);
-    checkArgument(timeoutDuration > 0, "bad timeout: " + timeoutDuration);
-    checkArgument(interfaceType.isInterface(),
-        "interfaceType must be an interface type");
-
-    final Set<Method> interruptibleMethods
-        = findInterruptibleMethods(interfaceType);
-
-    InvocationHandler handler = new InvocationHandler() {
-      public Object invoke(Object obj, final Method method, final Object[] args)
-          throws Throwable {
-        Callable<Object> callable = new Callable<Object>() {
-          public Object call() throws Exception {
-            try {
-              return method.invoke(target, args);
-            } catch (InvocationTargetException e) {
-              Throwables.throwCause(e, false);
-              throw new AssertionError("can't get here");
-            }
-          }
-        };
-        return callWithTimeout(callable, timeoutDuration, timeoutUnit,
-            interruptibleMethods.contains(method));
-      }
-    };
-    return newProxy(interfaceType, handler);
-  }
-
-  // TODO: should this actually throw only ExecutionException?
-  public <T> T callWithTimeout(Callable<T> callable, long timeoutDuration,
-      TimeUnit timeoutUnit, boolean amInterruptible) throws Exception {
-    checkNotNull(callable);
-    checkNotNull(timeoutUnit);
-    checkArgument(timeoutDuration > 0, "bad timeout: " + timeoutDuration);
-    Future<T> future = executor.submit(callable);
-    try {
-      if (amInterruptible) {
-        try {
-          return future.get(timeoutDuration, timeoutUnit);
-        } catch (InterruptedException e) {
-          future.cancel(true);
-          throw e;
-        }
-      } else {
-        Future<T> uninterruptible = Futures.makeUninterruptible(future);
-        return uninterruptible.get(timeoutDuration, timeoutUnit);
-      }
-    } catch (ExecutionException e) {
-      throw Throwables.throwCause(e, true);
-    } catch (TimeoutException e) {
-      future.cancel(true);
-      throw new UncheckedTimeoutException(e);
-    }
-  }
-
-  private static Set<Method> findInterruptibleMethods(Class<?> interfaceType) {
-    Set<Method> set = Sets.newHashSet();
-    for (Method m : interfaceType.getMethods()) {
-      if (declaresInterruptedEx(m)) {
-        set.add(m);
-      }
-    }
-    return set;
-  }
-
-  private static boolean declaresInterruptedEx(Method method) {
-    for (Class<?> exType : method.getExceptionTypes()) {
-      // debate: == or isAssignableFrom?
-      if (exType == InterruptedException.class) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  // TODO: replace with version in common.reflect if and when that gets open-sourced
-  private static <T> T newProxy(
-      Class<T> interfaceType, InvocationHandler handler) {
-    Object object = Proxy.newProxyInstance(
-        interfaceType.getClassLoader(), new Class<?>[] { interfaceType }, handler);
-    return interfaceType.cast(object);
-  }
-}
diff --git a/src/com/google/common/util/concurrent/TimeLimiter.java b/src/com/google/common/util/concurrent/TimeLimiter.java
deleted file mode 100644
index f86a0cb..0000000
--- a/src/com/google/common/util/concurrent/TimeLimiter.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright (C) 2006 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.util.concurrent;
-
-import java.util.concurrent.Callable;
-import java.util.concurrent.TimeUnit;
-
-/**
- * Produces proxies that impose a time limit on method
- * calls to the proxied object.  For example, to return the value of
- * {@code target.someMethod()}, but substitute {@code DEFAULT_VALUE} if this
- * method call takes over 50 ms, you can use this code:
- * <pre>
- *   TimeLimiter limiter = . . .;
- *   TargetType proxy = limiter.newProxy(
- *       target, TargetType.class, 50, TimeUnit.MILLISECONDS);
- *   try {
- *     return proxy.someMethod();
- *   } catch (UncheckedTimeoutException e) {
- *     return DEFAULT_VALUE;
- *   }
- * </pre>
- * Please see {@code SimpleTimeLimiterTest} for more usage examples.
- *
- * @author Kevin Bourrillion
- * @since 2009.09.15 <b>tentative</b>
- */
-public interface TimeLimiter {
-
-  /**
-   * Returns an instance of {@code interfaceType} that delegates all method
-   * calls to the {@code target} object, enforcing the specified time limit on
-   * each call.  This time-limited delegation is also performed for calls to
-   * {@link Object#equals}, {@link Object#hashCode}, and
-   * {@link Object#toString}.
-   * <p>
-   * If the target method call finishes before the limit is reached, the return
-   * value or exception is propagated to the caller exactly as-is. If, on the
-   * other hand, the time limit is reached, the proxy will attempt to abort the
-   * call to the target, and will throw an {@link UncheckedTimeoutException} to
-   * the caller.
-   * <p>
-   * It is important to note that the primary purpose of the proxy object is to
-   * return control to the caller when the timeout elapses; aborting the target
-   * method call is of secondary concern.  The particular nature and strength
-   * of the guarantees made by the proxy is implementation-dependent.  However,
-   * it is important that each of the methods on the target object behaves
-   * appropriately when its thread is interrupted.
-   *
-   * @param target the object to proxy
-   * @param interfaceType the interface you wish the returned proxy to
-   *     implement
-   * @param timeoutDuration with timeoutUnit, the maximum length of time that
-   *     callers are willing to wait on each method call to the proxy
-   * @param timeoutUnit with timeoutDuration, the maximum length of time that
-   *     callers are willing to wait on each method call to the proxy
-   * @return a time-limiting proxy
-   * @throws IllegalArgumentException if {@code interfaceType} is a regular
-   *     class, enum, or annotation type, rather than an interface
-   */
-  <T> T newProxy(T target, Class<T> interfaceType,
-     long timeoutDuration, TimeUnit timeoutUnit);
-
-  /**
-   * Invokes a specified Callable, timing out after the specified time limit.
-   * If the target method call finished before the limit is reached, the return
-   * value or exception is propagated to the caller exactly as-is.  If, on the
-   * other hand, the time limit is reached, we attempt to abort the call to the
-   * target, and throw an {@link UncheckedTimeoutException} to the caller.
-   * <p>
-   * <b>Warning:</b> The future of this method is in doubt.  It may be nuked, or
-   * changed significantly.
-   *
-   * @param callable the Callable to execute
-   * @param timeoutDuration with timeoutUnit, the maximum length of time to wait
-   * @param timeoutUnit with timeoutDuration, the maximum length of time to wait
-   * @param interruptible whether to respond to thread interruption by aborting
-   *     the operation and throwing InterruptedException; if false, the
-   *     operation is allowed to complete or time out, and the current thread's
-   *     interrupt status is re-asserted.
-   * @return the result returned by the Callable
-   * @throws InterruptedException if {@code interruptible} is true and our
-   *     thread is interrupted during execution
-   * @throws UncheckedTimeoutException if the time limit is reached
-   * @throws Exception
-   */
-  <T> T callWithTimeout(Callable<T> callable, long timeoutDuration,
-      TimeUnit timeoutUnit, boolean interruptible) throws Exception;
-}
diff --git a/src/com/google/common/util/concurrent/UncheckedTimeoutException.java b/src/com/google/common/util/concurrent/UncheckedTimeoutException.java
deleted file mode 100644
index c85504b..0000000
--- a/src/com/google/common/util/concurrent/UncheckedTimeoutException.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2006 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.util.concurrent;
-
-/**
- * Unchecked version of {@link java.util.concurrent.TimeoutException}.
- *
- * @author Kevin Bourrillion
- * @since 2009.09.15 <b>tentative</b>
- */
-public class UncheckedTimeoutException extends RuntimeException {
-  public UncheckedTimeoutException() {}
-
-  public UncheckedTimeoutException(String message) {
-    super(message);
-  }
-
-  public UncheckedTimeoutException(Throwable cause) {
-    super(cause);
-  }
-
-  public UncheckedTimeoutException(String message, Throwable cause) {
-    super(message, cause);
-  }
-
-  private static final long serialVersionUID = 0;
-}
diff --git a/src/com/google/common/util/concurrent/UninterruptibleFuture.java b/src/com/google/common/util/concurrent/UninterruptibleFuture.java
deleted file mode 100644
index a68ef93..0000000
--- a/src/com/google/common/util/concurrent/UninterruptibleFuture.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2009 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.util.concurrent;
-
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Future;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.TimeoutException;
-
-/**
- * A {@code Future} whose {@code get} calls cannot be interrupted. If a thread
- * is interrupted during such a call, the call continues to block until the
- * result is available or the timeout elapses, and only then re-interrupts the
- * thread. Obtain an instance of this type using {@link
- * Futures#makeUninterruptible(Future)}.
- *
- * @author Kevin Bourrillion
- * @since 2009.09.15 <b>tentative</b>
- */
-public interface UninterruptibleFuture<V> extends Future<V> {
-  /*@Override*/ V get() throws ExecutionException;
-
-  /*@Override*/ V get(long timeout, TimeUnit unit)
-      throws ExecutionException, TimeoutException;
-}
diff --git a/src/com/google/common/util/concurrent/ValueFuture.java b/src/com/google/common/util/concurrent/ValueFuture.java
deleted file mode 100644
index 9d34f8e..0000000
--- a/src/com/google/common/util/concurrent/ValueFuture.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright (C) 2009 Google Inc.
- *
- * Licensed 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.
- */
-
-package com.google.common.util.concurrent;
-
-/**
- * A simple ListenableFuture that holds a value or an exception.
- *
- * @author Sven Mawson
- * @since 2009.09.15 <b>tentative</b>
- */
-public class ValueFuture<V> extends AbstractListenableFuture<V> {
-
-  /**
-   * Creates a new {@code ValueFuture} in the default state.
-   */
-  public static <T> ValueFuture<T> create() {
-    return new ValueFuture<T>();
-  }
-
-  /**
-   * Explicit private constructor, use the {@link #create} factory method to
-   * create instances of {@code ValueFuture}.
-   */
-  private ValueFuture() {}
-
-  /**
-   * Sets the value of this future.  This method will return {@code true} if
-   * the value was successfully set, or {@code false} if the future has already
-   * been set or cancelled.
-   *
-   * @param newValue the value the future should hold.
-   * @return true if the value was successfully set.
-   */
-  @Override
-  public boolean set(V newValue) {
-    return super.set(newValue);
-  }
-
-  /**
-   * Sets the future to having failed with the given exception.  This exception
-   * will be wrapped in an ExecutionException and thrown from the get methods.
-   * This method will return {@code true} if the exception was successfully set,
-   * or {@code false} if the future has already been set or cancelled.
-   *
-   * @param t the exception the future should hold.
-   * @return true if the exception was successfully set.
-   */
-  @Override
-  public boolean setException(Throwable t) {
-    return super.setException(t);
-  }
-
-  /**
-   * {@inheritDoc}
-   *
-   * <p>A ValueFuture is never considered in the running state, so the
-   * {@code mayInterruptIfRunning} argument is ignored.
-   */
-  @Override
-  public boolean cancel(boolean mayInterruptIfRunning) {
-    return super.cancel();
-  }
-}